[
  {
    "path": ".cirrus.yml",
    "content": "env:\n  GOFLAGS: -mod=vendor\n\nfreebsd_instance:\n  image_family: freebsd-14-3\n\ntest_task:\n  install_script: pkg install -y go gcc git\n  test_script: make test\n"
  },
  {
    "path": ".gitattributes",
    "content": "pkg/version/version.go ident\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/issue_template.yml",
    "content": "name: Bug Report\ndescription: File a bug report.\nbody:\n  - type: input\n    id: delve_version\n    attributes:\n      label: What version of Delve are you using (`dlv version`)?\n    validations:\n      required: true\n  - type: input\n    id: go_version\n    attributes:\n      label: What version of Go are you using? (`go version`)?\n    validations:\n      required: true\n  - type: input\n    id: platform\n    attributes:\n      label: What operating system and processor architecture are you using?\n    validations:\n      required: true\n  - type: textarea\n    id: what\n    attributes:\n      label: Description\n      value: |\n        If this is about source listing not showing up (or breakpoints not being accepted) while running in a container please read our [FAQ](https://github.com/go-delve/delve/blob/master/Documentation/faq.md#substpath) first.\n        \n        1. What did you do?\n        2. What did you expect to see?\n        3. What did you see instead?\n        \n        Note: Please include any substantial examples (debug session output, stacktraces, etc) as linked gists.\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\n\non:\n  push:\n    tags:\n      - 'v*'\n  workflow_dispatch:\n    inputs:\n      tag:\n        description: 'Git tag to release (e.g. v1.24.0). Required for non-dry-run releases.'\n        type: string\n        required: false\n      dry_run:\n        description: 'Dry run only (snapshot build, not published to GitHub Releases)'\n        type: boolean\n        default: true\n\n# Cancel in-progress runs for the same ref.\nconcurrency:\n  group: \"${{ github.ref }}-release\"\n  cancel-in-progress: false\n\npermissions:\n  contents: write   # create GitHub Release and upload assets\n  id-token: write   # cosign OIDC for keyless signing\n\njobs:\n  release:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Validate tag input\n        if: github.event_name == 'workflow_dispatch' && inputs.dry_run == false && inputs.tag == ''\n        run: |\n          echo \"::error::A tag must be specified for non-dry-run releases\"\n          exit 1\n\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0  # full history required for goreleaser release notes\n          ref: ${{ inputs.tag || github.ref }}\n\n      - name: Set up Go\n        uses: actions/setup-go@v5\n        with:\n          go-version: stable\n\n      - name: Install cosign\n        uses: sigstore/cosign-installer@v3\n\n      - name: Run goreleaser (release)\n        if: github.event_name == 'push' || (github.event_name == 'workflow_dispatch' && inputs.dry_run == false)\n        uses: goreleaser/goreleaser-action@v6\n        with:\n          version: ~> v2\n          args: release --clean\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          GORELEASER_CURRENT_TAG: ${{ inputs.tag || github.ref_name }}\n\n      - name: Run goreleaser (snapshot)\n        if: github.event_name == 'workflow_dispatch' && inputs.dry_run == true\n        uses: goreleaser/goreleaser-action@v6\n        with:\n          version: ~> v2\n          args: release --snapshot --clean\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Upload snapshot artifacts\n        if: github.event_name == 'workflow_dispatch' && inputs.dry_run == true\n        uses: actions/upload-artifact@v4\n        with:\n          name: snapshot-dist\n          path: dist/\n          retention-days: 7\n"
  },
  {
    "path": ".github/workflows/test-windows-arm64.yml",
    "content": "name: Test Windows ARM64\n\non:\n  push:\n  pull_request:\n    branches: [master]\n\n# Cancel existing runs if user makes another push.\nconcurrency:\n  group: \"${{ github.ref }}-${{ github.workflow}}\"\n  cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n  test-windows-arm64:\n    runs-on: windows-11-arm\n    timeout-minutes: 90\n\n    strategy:\n      fail-fast: false\n      matrix:\n        go-version: [\"1.24\", \"1.25\", \"tip\"]\n\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v5\n\n      - name: Run tests\n        run: _scripts/test_windows.ps1 -version go${{ matrix.go-version }} -arch arm64 -binDir $env:RUNNER_TOOL_CACHE\n        continue-on-error: ${{ matrix.go-version == 'tip' }}\n"
  },
  {
    "path": ".gitignore",
    "content": "**/*.test\n.tags*\ntags\n.dbg_history\n**/**/dlv\n!cmd/dlv/\n.vagrant\n**/*.swp\nlocaltests\n.idea\n*.iml\n.teamcity/target\n.vscode\n.claude\ndist/\n"
  },
  {
    "path": ".goreleaser.yaml",
    "content": "version: 2\n\nproject_name: dlv\n\nbefore:\n  hooks:\n    - go mod download\n\nbuilds:\n  - main: ./cmd/dlv\n    binary: dlv\n    # CGO is left at its default: enabled for native builds, automatically\n    # disabled by the Go toolchain when cross-compiling. This means linux/amd64\n    # release binaries are built with CGO on a linux/amd64 CI runner, while all\n    # cross-compiled targets (darwin, windows, linux/arm64, etc.) use pure Go.\n    goos:\n      - linux\n      - darwin\n      - windows\n    goarch:\n      - amd64\n      - arm64\n      - \"386\"\n      - ppc64le\n    ignore:\n      # darwin and windows only support amd64 and arm64 in this release config.\n      # riscv64 and loong64 are supported by Delve but excluded here because\n      # goreleaser cross-compilation toolchains for those targets are not yet\n      # available in standard CI environments.\n      - goos: darwin\n        goarch: \"386\"\n      - goos: darwin\n        goarch: ppc64le\n      - goos: windows\n        goarch: \"386\"\n      - goos: windows\n        goarch: ppc64le\n    ldflags:\n      - -X main.Build={{.FullCommit}}\n\narchives:\n  - formats:\n      - tar.gz\n    format_overrides:\n      - goos: windows\n        formats:\n          - zip\n    name_template: \"dlv_{{ .Version }}_{{ .Os }}_{{ .Arch }}\"\n\nchecksum:\n  name_template: \"checksums.txt\"\n  algorithm: sha256\n\n# Cosign keyless signing via Sigstore. Signing runs automatically in GitHub\n# Actions with `id-token: write` permission — cosign v2 auto-detects the\n# GitHub Actions OIDC identity. No private key or secret is required.\n# To verify: cosign verify-blob --certificate <file>.cert --signature <file>.sig <file>\nsigns:\n  - cmd: cosign\n    certificate: \"${artifact}.cert\"\n    args:\n      - sign-blob\n      - \"--output-certificate=${certificate}\"\n      - \"--output-signature=${signature}\"\n      - \"${artifact}\"\n      - --yes\n    artifacts: checksum\n    output: true\n\nrelease:\n  github:\n    owner: go-delve\n    name: delve\n\nsnapshot:\n  version_template: \"{{ .Tag }}-next\"\n"
  },
  {
    "path": ".teamcity/pom.xml",
    "content": "<?xml version=\"1.0\"?>\n<project>\n  <modelVersion>4.0.0</modelVersion>\n  <name>Delve Config DSL Script</name>\n  <groupId>Delve</groupId>\n  <artifactId>Delve_dsl</artifactId>\n  <version>1.0-SNAPSHOT</version>\n\n  <parent>\n    <groupId>org.jetbrains.teamcity</groupId>\n    <artifactId>configs-dsl-kotlin-parent</artifactId>\n    <version>1.0-SNAPSHOT</version>\n  </parent>\n\n  <repositories>\n    <repository>\n      <id>jetbrains-all</id>\n      <url>https://download.jetbrains.com/teamcity-repository</url>\n      <snapshots>\n        <enabled>true</enabled>\n      </snapshots>\n    </repository>\n    <repository>\n      <id>teamcity-server</id>\n      <url>https://delve.teamcity.com/app/dsl-plugins-repository</url>\n      <snapshots>\n        <enabled>true</enabled>\n      </snapshots>\n    </repository>\n  </repositories>\n\n  <pluginRepositories>\n    <pluginRepository>\n      <id>JetBrains</id>\n      <url>https://download.jetbrains.com/teamcity-repository</url>\n    </pluginRepository>\n  </pluginRepositories>\n\n  <build>\n    <sourceDirectory>${basedir}</sourceDirectory>\n    <plugins>\n      <plugin>\n        <artifactId>kotlin-maven-plugin</artifactId>\n        <groupId>org.jetbrains.kotlin</groupId>\n        <version>${kotlin.version}</version>\n\n        <configuration/>\n        <executions>\n          <execution>\n            <id>compile</id>\n            <phase>process-sources</phase>\n            <goals>\n              <goal>compile</goal>\n            </goals>\n          </execution>\n          <execution>\n            <id>test-compile</id>\n            <phase>process-test-sources</phase>\n            <goals>\n              <goal>test-compile</goal>\n            </goals>\n          </execution>\n        </executions>\n      </plugin>\n      <plugin>\n        <groupId>org.jetbrains.teamcity</groupId>\n        <artifactId>teamcity-configs-maven-plugin</artifactId>\n        <version>${teamcity.dsl.version}</version>\n        <configuration>\n          <format>kotlin</format>\n          <dstDir>target/generated-configs</dstDir>\n        </configuration>\n      </plugin>\n    </plugins>\n  </build>\n\n  <dependencies>\n    <dependency>\n      <groupId>org.jetbrains.teamcity</groupId>\n      <artifactId>configs-dsl-kotlin-latest</artifactId>\n      <version>${teamcity.dsl.version}</version>\n      <scope>compile</scope>\n    </dependency>\n    <dependency>\n      <groupId>org.jetbrains.teamcity</groupId>\n      <artifactId>configs-dsl-kotlin-plugins-latest</artifactId>\n      <version>1.0-SNAPSHOT</version>\n      <type>pom</type>\n      <scope>compile</scope>\n    </dependency>\n    <dependency>\n      <groupId>org.jetbrains.kotlin</groupId>\n      <artifactId>kotlin-stdlib-jdk8</artifactId>\n      <version>${kotlin.version}</version>\n      <scope>compile</scope>\n    </dependency>\n    <dependency>\n      <groupId>org.jetbrains.kotlin</groupId>\n      <artifactId>kotlin-script-runtime</artifactId>\n      <version>${kotlin.version}</version>\n      <scope>compile</scope>\n    </dependency>\n  </dependencies>\n</project>"
  },
  {
    "path": ".teamcity/settings.kts",
    "content": "import jetbrains.buildServer.configs.kotlin.AbsoluteId\nimport jetbrains.buildServer.configs.kotlin.BuildType\nimport jetbrains.buildServer.configs.kotlin.DslContext\nimport jetbrains.buildServer.configs.kotlin.Project\nimport jetbrains.buildServer.configs.kotlin.buildFeatures.PullRequests\nimport jetbrains.buildServer.configs.kotlin.buildFeatures.commitStatusPublisher\nimport jetbrains.buildServer.configs.kotlin.buildFeatures.golang\nimport jetbrains.buildServer.configs.kotlin.buildFeatures.pullRequests\nimport jetbrains.buildServer.configs.kotlin.buildSteps.dockerCommand\nimport jetbrains.buildServer.configs.kotlin.buildSteps.exec\nimport jetbrains.buildServer.configs.kotlin.buildSteps.powerShell\nimport jetbrains.buildServer.configs.kotlin.failureConditions.BuildFailureOnMetric\nimport jetbrains.buildServer.configs.kotlin.failureConditions.failOnMetricChange\nimport jetbrains.buildServer.configs.kotlin.project\nimport jetbrains.buildServer.configs.kotlin.triggers.schedule\nimport jetbrains.buildServer.configs.kotlin.triggers.vcs\nimport jetbrains.buildServer.configs.kotlin.version\n\n/*\nThe settings script is an entry point for defining a TeamCity\nproject hierarchy. The script should contain a single call to the\nproject() function with a Project instance or an init function as\nan argument.\n\nVcsRoots, BuildTypes, Templates, and subprojects can be\nregistered inside the project using the vcsRoot(), buildType(),\ntemplate(), and subProject() methods respectively.\n\nTo debug settings scripts in command-line, run the\n\n    mvnDebug org.jetbrains.teamcity:teamcity-configs-maven-plugin:generate\n\ncommand and attach your debugger to the port 8000.\n\nTo debug in IntelliJ Idea, open the 'Maven Projects' tool window (View\n-> Tool Windows -> Maven Projects), find the generate task node\n(Plugins -> teamcity-configs -> teamcity-configs:generate), the\n'Debug' option is available in the context menu for the task.\n*/\n\nversion = \"2023.05\"\n\nval targets = arrayOf(\n        \"linux/amd64/1.24\",\n        \"linux/amd64/1.25\",\n        \"linux/amd64/1.26\",\n        \"linux/amd64/tip\",\n\n        \"linux/386/1.26\",\n\n        \"linux/arm64/1.26\",\n        \"linux/arm64/tip\",\n\n        \"linux/ppc64le/1.26\",\n\n        // \"linux/riscv64/1.26\", // needs exp.linuxriscv64 build tag, disabled due to CI issues\n\n        \"windows/amd64/1.26\",\n        \"windows/amd64/tip\",\n\n        \"mac/amd64/1.26\",\n        \"mac/amd64/tip\",\n\n        \"mac/arm64/1.26\",\n        \"mac/arm64/tip\"\n)\n\nproject {\n    val tests = targets.map { target ->\n        val (os, arch, version) = target.split(\"/\")\n        TestBuild(os, arch, version, AbsoluteId(\"Delve_${os}_${arch}_${version.replace('.', '_')}\"))\n    }\n    tests.map { test ->\n        test.os\n    }.distinct().forEach { os ->\n        subProject(OSProject(os, tests.filter { test ->\n            test.os == os && test.version != \"tip\"\n        }))\n    }\n    subProject(TipProject(tests.filter { test ->\n        test.version == \"tip\"\n    }))\n    buildType(AggregatorBuild(tests.filter { test ->\n        test.version != \"tip\"\n    }))\n    params {\n        param(\"teamcity.ui.settings.readOnly\", \"true\")\n        param(\"env.CI\", \"true\")\n    }\n}\n\nclass AggregatorBuild(tests: Collection<BuildType>) : BuildType({\n    name = \"Aggregator\"\n    type = Type.COMPOSITE\n\n    vcs {\n        root(DslContext.settingsRoot)\n    }\n\n    triggers {\n        vcs {\n        }\n    }\n\n    dependencies {\n        tests.forEach { test ->\n            snapshot(test) {\n            }\n        }\n    }\n\n    features {\n        pullRequests {\n            vcsRootExtId = \"${DslContext.settingsRoot.id}\"\n            provider = github {\n                authType = token {\n                    token = \"credentialsJSON:1312c856-0e13-4b04-8c40-ac26d4a5f700\"\n                }\n                filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY\n            }\n        }\n        commitStatusPublisher {\n            vcsRootExtId = \"${DslContext.settingsRoot.id}\"\n            publisher = github {\n                githubUrl = \"https://api.github.com\"\n                authType = personalToken {\n                    token = \"credentialsJSON:1312c856-0e13-4b04-8c40-ac26d4a5f700\"\n                }\n            }\n            param(\"github_oauth_user\", \"\")\n        }\n    }\n\n    failureConditions {\n        executionTimeoutMin = 60\n    }\n})\n\nclass TipProject(tests: List<TestBuild>) : Project({\n    id = AbsoluteId(\"Delve_tip\")\n    name = \"Tip\"\n\n    tests.forEach { test ->\n        buildType(test)\n    }\n})\n\nclass OSProject(os: String, tests: List<TestBuild>) : Project({\n    id = AbsoluteId(\"Delve_$os\")\n    name = os.capitalize()\n\n    tests.map { test ->\n        test.arch\n    }.distinct().forEach { arch ->\n        subProject(ArchProject(os, arch, tests.filter { test ->\n            test.arch == arch\n        }))\n    }\n})\n\nclass ArchProject(os: String, arch: String, tests: List<TestBuild>) : Project({\n    id = AbsoluteId(\"Delve_${os}_${arch}\")\n    name = arch\n\n    tests.forEach { test ->\n        buildType(test)\n    }\n})\n\nclass TestBuild(val os: String, val arch: String, val version: String, buildId: AbsoluteId) : BuildType({\n    id = buildId\n    name = if (version == \"tip\") \"${os}_${arch}_tip\" else version\n\n    vcs {\n        root(DslContext.settingsRoot)\n        branchFilter = if (version == \"tip\") {\n            \"\"\"\n                +:*\n                -:pull/*\n                \"\"\".trimIndent()\n        } else {\n            \"+:*\"\n        }\n    }\n\n    if (version == \"tip\") {\n        triggers {\n            schedule {\n                schedulingPolicy = daily {\n                    hour = 23\n                }\n                withPendingChangesOnly = true\n                triggerBuild = always()\n            }\n        }\n    }\n\n    failureConditions {\n        executionTimeoutMin = 30\n\n        if (version != \"tip\") {\n            failOnMetricChange {\n                 metric = BuildFailureOnMetric.MetricType.TEST_COUNT\n                 units = BuildFailureOnMetric.MetricUnit.DEFAULT_UNIT\n                 comparison = BuildFailureOnMetric.MetricComparison.LESS\n                 compareTo = value()\n            }\n        }\n    }\n\n    steps {\n        when (os) {\n            \"linux\" -> {\n                val dockerArch = when (arch) {\n                    \"386\" -> \"i386\"\n                    \"arm64\" -> \"arm64v8\"\n                    else -> {\n                        arch\n                    }\n                }\n                val dockerPlatformArch = when (arch) {\n                    \"arm64\" -> \"arm64/v8\"\n                    else -> {\n                        dockerArch\n                    }\n                }\n                val ubuntuVersion = when (arch) {\n                    \"riscv64\" -> \"24.04\"\n                    else -> \"20.04\"\n                }\n                dockerCommand {\n                    name = \"Pull Ubuntu\"\n                    commandType = other {\n                        subCommand = \"pull\"\n                        commandArgs = \"$dockerArch/ubuntu:$ubuntuVersion\"\n                    }\n                }\n                dockerCommand {\n                    name = \"Test\"\n                    commandType = other {\n                        subCommand = \"run\"\n                        commandArgs = \"\"\"\n                        -v %teamcity.build.checkoutDir%:/delve\n                        --env TEAMCITY_VERSION=${'$'}TEAMCITY_VERSION\n                        --env CI=true\n                        --privileged\n                        --platform linux/$dockerPlatformArch\n                        $dockerArch/ubuntu:$ubuntuVersion\n                        /delve/_scripts/test_linux.sh ${\"go$version\"} $arch\n                    \"\"\".trimIndent()\n                    }\n                }\n            }\n            \"windows\" -> {\n                powerShell {\n                    name = \"Test\"\n                    scriptMode = file {\n                        path = \"_scripts/test_windows.ps1\"\n                    }\n                    param(\"jetbrains_powershell_scriptArguments\", \"-version ${\"go$version\"} -arch $arch\")\n                }\n            }\n            \"mac\" -> {\n                exec {\n                    name = \"Test\"\n                    path = \"_scripts/test_mac.sh\"\n                    arguments = \"${\"go$version\"} $arch %system.teamcity.build.tempDir%\"\n                }\n            }\n        }\n    }\n\n    requirements {\n        when (arch) {\n            \"386\", \"amd64\" -> equals(\"teamcity.agent.jvm.os.arch\", if (os == \"mac\") \"x86_64\" else \"amd64\")\n            \"arm64\" -> equals(\"teamcity.agent.jvm.os.arch\", \"aarch64\")\n            \"ppc64le\" -> equals(\"teamcity.agent.jvm.os.arch\", \"ppc64le\")\n            \"riscv64\" -> equals(\"teamcity.agent.jvm.os.arch\", \"riscv64\")\n            \"loong64\" -> equals(\"teamcity.agent.jvm.os.arch\", \"loongarch64\")\n        }\n        when (os) {\n            \"linux\" -> {\n                matches(\"teamcity.agent.jvm.os.family\", \"Linux\")\n            }\n            \"windows\" -> {\n                matches(\"teamcity.agent.jvm.os.family\", \"Windows\")\n            }\n            \"mac\" -> {\n                matches(\"teamcity.agent.jvm.os.family\", \"Mac OS\")\n            }\n        }\n    }\n\n    features {\n        pullRequests {\n            vcsRootExtId = \"${DslContext.settingsRoot.id}\"\n            provider = github {\n                authType = token {\n                    token = \"credentialsJSON:1312c856-0e13-4b04-8c40-ac26d4a5f700\"\n                }\n                filterAuthorRole = PullRequests.GitHubRoleFilter.EVERYBODY\n            }\n        }\n        golang {\n            testFormat = \"json\"\n        }\n    }\n})\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\nThis project adheres to Semantic Versioning.\n\n## [1.26.1] 2026-03-03\n\n### Added\n\n- Support for debugging stripped non-Go binaries (#4263, @derekparker)\n- Package for detecting debugger attachment (#4258, @derekparker)\n- Starlark `append_file` built-in function (#4252, @sding3)\n- DAP: Hit conditional breakpoint capability (#4230, @DrSergei)\n- Detection and warning about trimpath (#4241, @aarzilli)\n\n### Fixed\n\n- Fix debuginfod download progress (#4270, @aarzilli)\n- Fix sigpanics in swiss map iterator (#4261, @derekparker)\n- Fix finding moduledata in Go 1.26+ (#4228, @derekparker)\n- Fix goroutine leak and shutdown sequence for eBPF backend (#4231, @derekparker)\n- Fix eBPF uprobe placement to skip function prologue (#4249, @derekparker)\n- Fix `ProducerAfterOrEqual` comparison for devel builds (#4234, @typesanitizer)\n- DAP: Better error messages when debugger can't be launched (#4264, @aarzilli)\n- DAP: Reject most requests before launch/attach (#4240, @aarzilli)\n- Propagate short type option when printing structs (#4235, @igadmg)\n- Better error if process is already being debugged (#4242, @aarzilli)\n- Print error when request body can't be decoded (#4247, @aarzilli)\n- Parse rc version with trailing suffix (#4255, @alexsaezm)\n\n### Changed\n\n- Migrate from gopkg.in/yaml.v3 to go.yaml.in/yaml/v3 (#4257, @scop)\n- Update waitReason switch for Go 1.27 (#4244, @typesanitizer)\n- Downgrade riscv64 support (#4232, @derekparker)\n- Miscellaneous code quality improvements (#4221, #4226, #4259, #4262, #4224, @derekparker, @aarzilli)\n- Miscellaneous improvements to tests, documentation, and build configuration (#4250, #4254, #4248, #4265, @derekparker, @aarzilli, @stack1ng)\n\n## [1.26.0] 2025-12-18\n\n### Added\n\n- Go 1.26 support (#4211, #4205, #4212, #4217, @aarzilli)\n- Savestate command for terminal (#4045, @alexsaezm)\n- DAP: Target command and follow-exec support (#4078, @Lslightly)\n- DAP: Read memory request handler (#4083, @MistaTwista)\n- DAP: Input/output redirection (#4178, @aarzilli)\n- DAP: Suspended breakpoints support (#4075, @firelizzard18)\n- DAP: Use exception breakpoints for predefined breakpoints (#4169, @aarzilli)\n- Custom starlark commands can be used with on prefix (#4170, @derekparker)\n- Shortcut syntax to access target variables in starlark (#4134, @aarzilli)\n- Support for tracing defer function calls with follow option (#3978, @archanaravindar)\n- Flag to retain trace directory after detach (#4091, @archanaravindar)\n- Ability to cancel debuginfod downloads (#4123, @aarzilli)\n- Process spawned event (#4171, @firelizzard18)\n- Materialized breakpoint event for follow-exec mode (#4161, @aarzilli)\n- Way to disable stop-on-error for breakpoint conditions (#4191, @aarzilli)\n- Function call support on loong64 (#4114, @yelvens)\n- Build argument logging (#4185, @pedia)\n- Capslock check (#4106, @derekparker)\n\n### Fixed\n\n- DAP: Restart handling when compilation fails (#4215, @aarzilli)\n- DAP: Disable string() field for address-less variables (#4214, @aarzilli)\n- DAP: Race condition in tests (#4121, @derekparker)\n- Gdbserial: Do not set detached if we kill the process (#4216, @aarzilli)\n- Prevent trace killing attached process (#4164, @alex-emery)\n- Trace /regexp/ should set ret breakpoints correctly (#4130, @aarzilli)\n- Replay subcommand must keep trace directory (#4184, @lwintermelon)\n- Nil pointer dereference when calling extra on a nil func (#4174, @aarzilli)\n- Check that breakpoint exists in ClearBreakpoint (#4141, @aarzilli)\n- Use address in ClearBreakpoint only when ID is 0 (#4168, @aarzilli)\n- Return error when calling a non-ptr receiver method on a nil ptr (#4139, @aarzilli)\n- Additional checks parsing g structs (#4140, @aarzilli)\n- Remember that we attached in WaitFor attach mode (#4120, @aarzilli)\n- Guard register logging from nil pointer dereferences (#4188, @aarzilli)\n- Do not insist stmt is same line as entry in DWARF (#4186, @derekparker)\n- Fix wait reason string table (#4182, @aarzilli)\n- Workaround for non-unicode strings in Variables (#4082, @aarzilli)\n- Fix ppc64le clause in support_sentinel_linux.go (#4129, @tshah14)\n- Improve frame unwind context handling on loong64 (#4133, @yelvens)\n\n### Changed\n\n- Replace hashicorp/golang-lru with custom lru cache (#4196, @qmuntal)\n- Update riscv64 support and add to test matrix (#4190, @lrzlin)\n- Update riscv64 capslock file (#4210, @derekparker)\n- Move things that use x/tools/go/packages to new repo (#3990, @aarzilli)\n- Remove experimental build tags for Windows ARM64 (#4176, @gdams)\n- Add Windows ARM64 workflow to CI (#4175, @gdams)\n- Add linux/loong64 to TeamCity configuration (#4154, @yelvens)\n- Set CI=true on a project level (#4156, @vietage)\n- Hierarchical search for structMember or method (#4118, @wenxuan70)\n- Update trie to v3.2.0 (#4131, @derekparker)\n- Parallelize tests where possible (#4115, @derekparker)\n- Modernize codebase with newer syntax and helpers (#4110, @derekparker)\n- Miscellaneous improvements to tests and build configuration (#4096, #4135, #4145, #4157, #4163, #4198, #4202, #4111, #4122, #4124, #4209, @derekparker, @aarzilli)\n- Miscellaneous code refactoring (#4159, #4173, #4201, @aarzilli)\n\n## [1.25.2] 2025-08-26\n\n### Added\n\n* Added notifications for debuginfod downloads (#3980, @aarzilli)\n\n### Fixed\n\n* Fixed restart behavior of DAP server (#4068, @derekparker)\n* Various fixes for loong64 backend (#4095, #4100, @yelvens)\n* Miscellaneous minor bug fixes (#4067, #4090, #4089, @aarzilli)\n\n### Changed\n\n* Miscellaneous code quality improvements (#4088, @cui)\n\n## [1.25.1] 2025-07-18\n\n### Added\n- Implement restart request for DAP (#4057, @derekparker)\n\n### Fixed\n- Fixed panic when trying to stacktrace an unreadable goroutine in DAP (#4056, @aarzilli)\n- Fixed panic when trying to access value of unreadable string variables in DAP (#4055, @aarzilli)\n- Fixed type cast between slices with the same element type (#4048, @aarzilli)\n- Fixed closure captured variables visibility on closure's first line (#4049, @aarzilli)\n- Fixed unknown DWARF opcodes causing panics (#4037, @aarzilli)\n- Added missing response body close in DAP test (#4039, @alexandear)\n- Fix panic in switchToGoroutineStacktrace (#4043, @derekparker)\n\n### Changed\n- Handle moving of direct interface flag in Go 1.26 (#4032, @randall77)\n- Simplified tests using slices.Contains (#4040, @alexandear)\n- Updated Go max support minor version and update golang.org/x/tools (#4046, @derekparker)\n\n## [1.25.0] 2025-04-16\n\n### Added\n- Go 1.25 support (#4014, @aarzilli) (more work went into the 1.24.2 and earlier releases)\n\n### Fixed\n- Fixed several panics found via telemetry (#4026, #4018, #4017, #4015 @aarzilli)\n- Fixed git hash in version output (#3987, @codeaucafe)\n- Fix development version parsing (#3999, @aarzilli)\n- Fix call injection in newer macOS versions (#3988, @aarzilli)\n- Fix typo in goroutines help output (#4024, @jersey1dev)\n\n### Changed\n- Internal breakpoints (panic, throw) are excluded from DAP response (#4027, @ConradIrwin)\n\n## [1.24.2] 2025-04-10\n\n### Added\n\n- Support for struct literals in expression evaluator (#3935, #3953, @aarzilli)\n- Check to reject DWARFv5 executables if delve itself isn't built with 1.25 or later due to bugs in Go's standard library prior to 1.25 (#3943, #3961, @aarzilli)\n\n### Fixed\n\n- Support for macOS Sequoia 15.4 (#3966, @aarzilli)\n- Race conditions with rr backend (#3971, #3973, #3963, @BronzeDeer, @aarzilli)\n- Goroutine load with corrupted label maps (#3968, #3962, @hongyuh-hh)\n- Breakpoint conditions on suspended breakpoints (#3938, @Lslightly)\n\n### Changed\n\n- Miscellaneous test and documentation fixes (#3979, #3952, #3954, #3955, #3951, @alexandear, @codesoap, @derekparker)\n\n## [1.24.1] 2025-03-05\n\n### Added\n\n- Support for linux/loong64 in native backend (#3892, @yelvens)\n- Support for watchpoints on interface values (#3922, #3924, @derekparker)\n- Improved support for DWARFv5 (#3893, @aarzilli)\n- Telemetry stack counters for internal errors (#3930, @aarzilli)\n- Support for zed editor and allow args in DELVE_EDITOR (#3899, @derekparker)\n\n### Fixed\n\n- Fix uprobe address in ebpf implementation (#3894, @3u13r)\n- Provide process events after launch in DAP (#3902, @shaunduncan)\n- Use rr version to determine style of qRRCmd (#3921, @aarzilli)\n- Better error message for breakpoints on stripped binaries (#3914, @aarzilli)\n- Switch to goroutine stack if no progress on thread stack (#3898, @aarzilli)\n- Handle wider registers in test (#3929, @derekparker)\n\n### Changed\n\n- Replace logrus with log/slog (#3918, @aarzilli)\n- Remove uses of reflect.MethodByName from all of Delve (#3916, @aarzilli)\n- Refactor sort.Sort to slices.SortFunc (#3880, @alexandear)\n- Allow access to thread registers after a function call (#3908, @aarzilli)\n- Remove riscv64 from TeamCity configuration (#3912, @aarzilli)\n\n## [1.24.0] 2024-12-18\n\n### Added\n\n- Support for Go 1.24, particularly the new swiss table map implementation (#3882, #3879, #3838, @aarzilli)\n- Import go telemetry and enable crash reporting (#3841, @hyangah)\n- Enable stepping into coroutine (#3791, @aarzilli)\n- Add raw examinemem dump (#3721, @aarzilli)\n- Add linux-riscv64 support (experimental) (#3785, @lrzlin)\n- Automatically guessing substitute-path config (#3781, @aarzilli)\n- Print a message when the debuggee process exits while Delve in headless mode (#3870, @jakejx)\n- Allow accessing closure captured variable as if they were struct fields (#3866, @aarzilli)\n- Add dape to list of plugins (#3817, @jgarte)\n\n### Fixed\n\n- Fix step stuttering when entering range-over-func bodies (#3788, @aarzilli)\n- Fix formatting of autogenerated documentation (#3836, @aarzilli)\n- Fix issue on Windows when launching process while detached (#3867, @aarzilli)\n- Fix handling of unsatisfiable breakpoints during restart (#3868, @aarzilli)\n\n### Changed\n\n- Update 'client-addr' to support Unix domain sockets (#3819, @n1lesh)\n- Adds pointer pinning to call injection, improving function calls during debug session (#3787, @aarzilli)\n- Allow modification of starlark structs returned by API (#3872, @aarzilli)\n- API V1 has been removed following the deprecation from last version (#3881, @aarzilli)\n\n## [1.23.1] 2024-09-23\n\nTelemetry notice: starting with version 1.24.0 Delve will begin collecting opt-in telemetry data using the same mechanism used by the toolchain, see <https://github.com/golang/go/issues/68384>, <https://go.dev/doc/telemetry#background>, <https://github.com/go-delve/delve/issues/3815>.\n\n### Fixed\n\n- Debugging on macOS Sequoia (#3799, @aarzilli)\n- Various bugs with range-over-func loops (#3808, #3788, @aarzilli)\n- Reslice operator did not allow reslicing up to the slice's cap (#3796, @Jille)\n- Starlark access to named constants (#3802, @arvidfm)\n\n\n## [1.23.0] 2024-07-16\n\nDeprecation notice: starting with the next version of Delve version 1 of the API will be removed. Version 2 was added in version 0.12.0 in 2017 and has been the recommended way to connect to Delve since.\n\n### Added\n\n- Support for Go 1.23, particularly the new range-over-func statement (#3663, #3697, #3736, #3738, #3750, #3755, #3763, #3778, @aarzilli)\n- `next-instruction` command (#3671, @derekparker)\n- Support reading captured variables of closure functions (#3682, @aarzilli)\n- Breakpoint command `break` now allows adding a condition the a breakpoint with a postfix notation (`break <name> <locspec> if <condition>`) (#3693, #3702, @derekparker)\n- When the `step` command is executed on `go funccall()` statements it will stop on the newly created goroutine (#3686, @aarzilli)\n- Invocation of [rr](https://github.com/rr-debugger/rr/) when it is used as a backend can be now controlled with environment variables `$DELVE_RR_RECORD_FLAGS` and `$DELVE_RR_REPLAY_FLAGS` (#3726, @aarzilli)\n- Added new suboption `--follow-calls` to trace command (#3594, @archanaravindar)\n\n### Fixed\n\n- Better behavior on stripped files (#3678, #3695, @aarzilli, @derekparker)\n- Support rr version 5.7.0 and later (#3705, #3718, @howardjohn, @aarzilli)\n- Watchpoints on newer versions of macOS (#3703, @derekparker)\n- Bug related to watchpoints going out of scope (#3742, @aarzilli)\n- Bug invoking debuginfod-find (#3762, @derekparker)\n- Miscellaneus fixes (#3707, #3761, #3759, #3767, @scop, @jayantxie, @aarzilli, @zdyj3170101136)\n\n### Changed\n\n- Improved auto-completions for shells (#3696, #3699, @scop)\n- Print more informations on tracepoint stops (#3675, #3712, @derekparker, @archanaravindar)\n- Improved performance of the default macOS backend (#3715, @derekparker)\n- When a breakpoint is hit on a headless instance of Delve while no clients are connected a message will be printed to stdout (#3632,#3747, @fatanugraha, @aarzilli)\n- Miscellaneous code and documentation improvements (#3676, #3677, #3698, #3716, #3727, #3722, #3730, #3731, #3753, #3752, #3756, #3757, #3741, #3773, #3775, #3770, #3769, #3772, #3779, #3774, @alexandear, @aarzilli, @abbasudo, @jayantxie)\n\n## [1.22.1] 2024-02-21\n\n### Added\n\n- `--listen` and `connect` now support Unix Domain Sockets (#3655, ##3658, @aarzilli)\n- Paging for commands `print`, `vars`, `args` and `locals` (#3620, @aarzilli)\n- Syntax highlighting for stacktraces and options to change the color of Delve's prompt (#3649, #3648, @aarzilli)\n- Wait-for option for DAP's attach mode (#3656, @muggle-nil)\n\n### Fixed\n\n- Bug where Ctrl-Z was not sent to other processes in the same group as Delve (#3619, @aarzilli)\n- Parsing of `/proc/net/tcp` when it has 10000 or more entries (#3660, @michaelmerg)\n- Rare error when valuating expressions containing `runtime.frame(n)` inside breakpoint conditions (#3624, @aarzilli)\n- Line number reported for the stack frame that caused a panic (#3638, @aarzilli)\n- Building when dlv's executable already exists on macOS with a signing key already installed (#3639, @ardnew)\n\n### Changed\n\n- When evaluating an expression containing a reslice operation with constant bounds the entire resulting slice will be loaded (#3623, @aarzilli)\n\n## [1.22.0] 2023-12-29\n\n### Added\n\n- Support for Go 1.22 (#3583, @aarzilli)\n- Support for min and max builtins (#3530, @aarzilli)\n- Expression evaluator can now reference previous frames (#3534, @derekparker)\n- Better support for stripped binaries (#3549, #3577, #3597, @derekparker)\n- Remove package paths from types returned by DAP (#3535, @stefanhaller)\n- Show pprof labels in DAP (#3501, @stefanhaller)\n\n### Fixed\n\n- Fixes for signal routing with debugserver (#3541, @aarzilli)\n- Clear substitute path rules cache every time the `config` command is used (#3567, @aarzilli)\n- Fixes handling of hardcoded breakpoints after a manual stop (#3582, @aarzilli)\n- Occasional close on closed channel panic in DAP (#3573, @aarzilli)\n- Correctly reports exit code on Linux when a we receive a signal close to the program's exit (#3585, @aarzilli)\n\n### Changed\n\n- Type casts from slice to string and vice versa will now use the load configuration for the target type, which is more intuitive (#3596, @aarzilli)\n- Miscellaneous improvements to documentation (#3531, #3555, #3556, #3562, #3564, #3575, #3576, @alexandear, @testwill)\n\n## [1.21.2] 2023-10-30\n\n### Added\n\n- DAP: add concrete type to interface type (@suzmue, #3510)\n- Support for VSCode in the edit command (@derekparker, #3524)\n- Follow-mode support for Windows (@aarzilli, #3507)\n\n### Fixed\n\n- Fix bugs handling stdout/stderr in DAP (@hyangah, #3522)\n- Fix bug with autogenerated wrappers for methods of generic types (@aarzilli, #3528)\n\n### Changed\n\n- Use Cgo instead of C code in the FreeBSD backend (@4a6f656c, #3529)\n- Remove obsolete build tags (+build) (@alexandear, #3513)\n\n## [1.21.1] 2023-10-3\n\n### Added\n\n- Support for linux/ppc64le (@alexsaezm)\n- Enable debugging stripped mach-o (MacOS) binaries (@pgavlin)\n- Enable function call injection for linux/ppc64le (@archanaravindar)\n- Improved support for editors in 'edit' command (@derekparker)\n- Early 1.22 support (@aarzilli)\n- Add 'packages' command to list packages in compiled binary (@hyangah)\n- Support debugging PIE binaries on linux/ppc64le (@archanaravindar)\n- Add ability to list goroutines waiting on channel (@aarzilli)\n- Add support for more argument / return type parsing in ebpf tracing backend (@derekparker)\n- Add waitfor option to 'attach' command (@aarzilli)\n\n### Fixed\n\n- Fix memory leak in native Darwin backend CGO usage (@thechampagne)\n- Fix hexadecimal printing of variables with symbolic const values (@aarzilli)\n- Handle ctrl-c during tracing executing (@derekparker)\n- Use a stack for restore/remember opcodes in DWARF CFI (@javierhonduco)\n- Pass user specified '-C' argument first in gobuild flags (@aarzilli)\n- Fix stacktraces on freebsd/amd64/go1.20 (@aarzilli)\n- Fix PIE support on macOS (@aarzilli)\n- Fix starlark slice unmarshaling (@andreimatei)\n- Restore breakpoints set with line offsets on restart (@aarzilli)\n- Check recursion level when printing pointers (@aarzilli)\n- Fix FrameDescriptionEntries' append bug removing duplicates (@gocurr)\n- Read context from sigtrampgo fixing cgo stack traces on 1.21 (@aarzilli)\n\n### Changed\n\n- Replace deprecated io/ioutil usage (@alexandear)\n- Accept string list as launch requests buildFlags in DAP server (@hyangah)\n- Strip package paths from symbols in callstack in DAP response (@stefanhaller)\n- Update cilium/ebpf package (@aarzilli)\n\n## [1.21.0] 2023-06-23\n\n### Added\n\n- Go 1.21 support (#3370, #3401, @aarzilli)\n- Basic debug functionality for stripped executables (#3408, #3421, @derekparker)\n- Core dumping on FreeBSD (#3305, @aarzilli)\n- Ability to automatically attach to child processes when they are spawned (linux-only) (#3286, #3346, @aarzilli)\n- Starlark scripts can now use the time module (#3375, @andreimatei)\n- Online help for starlark interpreter (#3388, @aarzilli)\n- `dlv trace` has a new option, `--timestamp`, that prints timestamps before every trace event (#3358, @spacewander)\n\n### Fixed\n\n- Stepping could hide normal breakpoint hits occurring simultaneously, in rare circumstances (#3287, @aarzilli)\n- Internal error when defer locations can not be resolved (#3329, @aarzilli)\n- Channels of certain types could be displayed incorrectly (#3362, @aarzilli)\n- Formatted time wouldn't always be displayed when using DAP (#3349, @suzmue)\n- Function call injection when parameters are in registers (#3365, @ZekeLu)\n- Panic in Starlark interface when using partially loaded variables (#3386, @andreimatei)\n- Use debug info directories configuration in `dlv trace` (#3405, @nozzy123nozzy)\n- Updated DAP version (#3414, @suzmue)\n\n### Changed\n\n- Improved eBPF tracepoints (#3325, #3353, #3417, @chenhengqi, @derekparker)\n- The name of the default output binary is now randomizes, which fixes some weird behavior when multiple instances of Delve are run simultaneously in the same directory (#3366, @aarzilli)\n- Stderr of debuginfod-find is now suppressed (#3381, @fche)\n- Better documentation for substitute-path (#3335, @aarzilli)\n- `quit -c` will ask for confirmation when breakpoints still exist (#3398, @aarzilli)\n- Miscellaneous improvements to documentation and tests (#3326, #3327, #3340, #3341, #3357, #3378, #3376, #3399, #3374, #3426, @alexandear, @cuishuang, @alexsaezm, @andreimatei)\n\n\n## [1.20.2] 2023-04-05\n\n### Added\n\n- New flag --rr-onprocess-pid to replay command (#3281, @jcpowermac)\n- Added documentation for watching arbitrary address (#3268, @felixge)\n- Allow extracting a DWARF entry field (#3258, @brancz)\n- Add SetLoggerFactory to terminal/logflags package (#3257, @blaubaer)\n- New config option for tab printing when printing source code (#3243, @thockin)\n- Added documentation for debugging Go runtime with Delve (#3234, @aarzilli)\n\n### Fixed\n\n- Fix printing boolean values in Starlark scripts (#3314, @vitalif)\n- Fix infinite recursion in escapeCheck (#3311, @aarzilli)\n- Support multiple functions with same name (#3297, @aarzilli)\n- Handle end_seq in dwarf/line correctly (#3277, @derekparker)\n- Fix calls into SYS_PROCESS_VM_READV/WRITEV syscalls (#3273, @aarzilli)\n- Fix exit status for trace subcommand (#3263, @derekparker)\n- Fix stripping DYLD_INSERT_LIBRARIES on macOS (#3245, @aviramha)\n- Fix handling of list colors via config (#3240, @derekparker)\n- Fixes to FreeBSD backend (#3224, @aarzilli)\n\n### Changed\n\n- Add limit to maximum time.Time we try and format (#3294, @aarzilli)\n- Add fuzzing tests to expression evaluator and variable loader (#3293, @aarzilli)\n- Removed some support for Go 1.12 and earlier (#3271, @aarzilli)\n- Moved util functions to dwarf package (#3252, @alexandear)\n- Attempt to load DW_AT_specification if present (#3247, @brancz)\n- Match go test behavior when dlv test gets list of go files (#3232, @aarzilli)\n- Populate Value field in pointer Variable (#3229, @andreimatei)\n\n## [1.20.1] 2022-12-12\n\n### Fixed\n\n- Fix executing programs on macOS with most versions of debugserver installed (#3211, @aarzilli)\n\n## [1.20.0] 2022-12-07\n\n### Added\n\n- Support for Go 1.20 (#3129, #3196, #3180, @cuiweixie, @qmuntal, @aarzilli)\n- Support for Windows/arm64 (gated by a build tag) (#3063, #3198, #3200, @qmuntal)\n- Compatibility with coredumpctl (#3195, @Foxboron)\n\n### Fixed\n\n- Improve evaluation of type casts (#3146, #3149, #3186, @aarzilli)\n- DAP: Added type to response of EvaluateRequest (#3172, @gfszr)\n- Cgo stacktraces on linux/arm64 (#3192, @derekparker)\n- Debugserver crashes on recent versions of macOS when $DYLD_INSERT_LIBRARIES is set (#3181, @aviramha)\n- Stacktraces and stepping on Go 1.19.2 and later on macOS (#3204, @aarzilli)\n- Attaching to processes used by a different user on Windows (#3162, @aarzilli)\n- Nil pointer dereference when current address is not part of a function (#3157, @aarzilli)\n\n### Changed\n\n- Change behavior of exec command so that it looks for the executable in the current directory (#3167, @derekparker)\n- DAP shows full value when evaluating log messages (#3141, @suzmue)\n- Wait time is no longer reported for parked goroutines (its value was always incorrect) (#3139, @aarzilli)\n- Miscellaneous improvements to documentation and error messages (#3119, #3117, #3154, #3161, #3169, #3188, @aarzilli, @derekparker, @cuishuang, @Frederick888,  @dlipovetsky)\n\n## [1.9.1] 2022-08-23\n\n### Added\n\n- Add support for empty string in substitutePath (@RuijieC-dev)\n- Support gnu_debuglink section (@aarzilli)\n- Support exact matches in SubstitutePath (@eandre)\n- Add ability to show disassembly instead of source code (@aarzilli)\n- Add -per-g-hitcount to breakpoint conditions (@yangxikun)\n\n### Fixed\n\n- Ensure breakpoint map exists (@aarzilli)\n- Use standard library to compute CRC for gnu_debuglink section (@aarzilli)\n- Fix command to download Go version in CI (@derekparker)\n- Do not panic reading bad G struct (@aarzilli)\n- Fix parsing DWARFv5 file table (@derekparker)\n- Improve trace subcommand output (@derekparker)\n- Fix documentation for examinemem (@aarzilli)\n- Fix step instruction on 1 byte instruction with software breakpoint (@qmuntal)\n- Fix handling of function entry / return in ebpf tracing backend (@derekparker)\n- Fix size of ebpf type for fn_addr (@derekparker)\n\n### Changed\n\n- Send large terminal output to pager (@aarzilli)\n- Refactor windows backend framework (@qmuntal)\n- Complete the dropping of CGO dependency for ebpf backend (@aarzilli)\n- Limit disassembly range in DAP backend (@aarzilli)\n\n## [1.9.0] 2022-07-06\n\n### Added\n\n- Support for Go 1.19 (#3038, #3031, #3009, @aarzilli)\n- Autocomplete for local variables (#3004, @pippolo84)\n- Support for function call injection on arm64 (#2996, @aarzilli)\n\n### Fixed\n\n- Ctrl-C handling on Windows (#3039, @aarzilli)\n- Expressions accessing maps with string literals (#3036, @aarzilli)\n- Occasional crash caused by race between manual stop and normal stop on macOS (#3021, @aarzilli)\n- Pretty-print of register components (#3022, @aarzilli)\n- Misc function call injection bugs (#3007, #3002, #3000, @aarzilli)\n\n### Changed\n- Improved FreeBSD port (#3019, #2972, #2981, #2982, @4a6f656c)\n- Misc test fixes (#3011, #2995, #2979, @polinasok, @aarzilli)\n- Misc documentation changes (#2998, #2991, @aarzilli, @polinasok)\n- Better autogenerated function skip (#2975, @aarzilli)\n\n## [1.8.3] 2022-04-25\n### Added\n- Pretty-print time.Time variables (@aarzilli)\n- Better \"could not open debug info\" errors (@polinasok)\n- DAP: Support --disable-aslr (@polinasok)\n- DAP interface documentation improvements (@polinasok)\n- CLI documentation improvements (@derekparker, @deathiop)\n\n### Fixed\n- DAP: offer disconnect/stop options for attach mode only (@polinasok)\n- Fix godoc comments (@hitzhangjie)\n- Allow low index == len in reslice expressions (@aarzilli)\n- Fix leaky process when failing to debug stripped binaries in headless mode (@polinasok)\n- Skip stepping into autogenerated functions for go1.18 (@aarzilli)\n\n### Changed\n- Drop support for building on Go < 1.10 (@aarzilli)\n\n## [1.8.2] 2022-03-07\n### Added\n- Add '-clear' option for 'condition' command (@chainhelen)\n- Support ctrl-Z for shell job control (@derekparker)\n\n### Fixed\n- Improve handling of hard coded breakpoints (@aarzilli)\n- Better error messages for ambiguous function calls / type casts (@aarzilli)\n- Fix crash when trying to open separate debug info (@aarzilli)\n- Handle non-install dev tools on osx (@zchee)\n\n### Changed\n- Downgrade loadBuildID error to warning (@aarzilli)\n- Require go-delve/liner in go.mod file instead of upstream version (@hyanhag)\n\n## [1.8.1] 2022-02-07\n\n### Added\n\n- Downloading source code listings with debuginfod (@Foxboron)\n- Added `transcript` command (@aarzilli)\n- Enabled `dump` command on windows (@aarzilli)\n- Env attribute in DAP launch requests (@hyangah)\n- Better documentation for the DAP interface (@polinasok)\n\n### Fixed\n\n- Require argument for trace subcommand (@derekparker)\n- Handling of inlined calls within inlined calls (@derekparker)\n- Handling of DW_AT_inline attribute (@aarzilli)\n- Set stop reason in StepInstruction (@suzmue)\n\n### Changed\n\n- The DAP interface will not create executables in the temp directory (@hyangah)\n- When the `goroutines` command looks for the user frame it will exclude frames in internal and runtime/internal in addition to private runtime functions (@aarzilli)\n- Breakpoints with hitcount conditions are automatically disabled when their condition can no longer be satisfied (@pippolo84)\n- The commands `break` and `trace` will set a breakpoint on the current line if no argument is specified (@thockin)\n- Miscellaneous documentation improvements (@chainhelen, @gareth-rees, @polinasok)\n\n## [1.8.0] 2021-12-23\n\n### Added\n\n* Go 1.18 support\n* Support for DWARF5 on Windows/MacOS (@aarzilli)\n* Added more installation instructions to documentation (@polinasok)\n* Allow for rewind to work after process exit with RR backend (@aarzilli)\n* Added documentation on runtime.curg and runtime.frameoff in eval (@aarzilli)\n* DAP: Expose sources command in evaluate request (@suzmue)\n* DAP: Support Goroutine filters (@suzmue)\n\n### Fixed\n\n* Fix build version using buildinfo (@aarzilli)\n* Fix crash when using deferred with no args (@kaddy-tom)\n* DAP: Misc remote attach improvements (@polinasok)\n\n### Changed\n\n* Misc cleanup and refactoring (@aarzilli)\n* Added option to disable invoking git during build (@herbygillot)\n* Ignore 'pf' mappings during core dump creation (@aarzilli)\n\n## [1.7.3] 2021-11-16\n\n### Added\n\n* Misc changes to prepare for Go 1.18 and generics (#2703, @2745, @aarzilli)\n* Watchpoint support (disabled on Windows) (#2651, #2659, #2667, #2769, @aarzilli)\n* Warn about listening to remote connections (#2721, @aarzilli)\n* Support call injection with rr backend (#2740, @aarzilli)\n* Support JSON-RPC and DAP on the same port from 'dlv debug/exec/test/attach' (#2755, @polinasok)\n* DAP: Remote attach support (#2709, @polinasok)\n* DAP: Multi-client support (#2731, #2737, #2781, @polinasok)\n* DAP: Logpoints support (#2634, #2730, #2747, #2748, @suzmue)\n* DAP: Disassembly view support (#2713, #2716, #2728, #2742, @suzmue)\n* DAP: Support dlvCwd and use a temp file as default debug binary (#2660, #2734, @hyangah, @polinasok)\n* DAP: Auto-resume execution when setting breakpoints while running (#2726, @suzmue)\n* DAP: Add --client-addr flag to run dap with a predefined client (#2568, @hyangah)\n* DAP: Log parsed and applied launch configs (#2732, @polinasok)\n* DAP: Add option to hide system goroutines (#2743, @suzmue)\n* DAP: Add support for special 'config' expressions (#2750, @suzmue)\n\n### Fixed\n\n* Return correct exit status from Halt command (#2674, @suzmue)\n* Merge register data before writing to register (#2699, @mknyszek)\n* Do not assign temp breakpoint IDs to avoid conflicts with user breakpoints (#2650, @aarzilli)\n* Miscellaneous fixes for Windows native backend (#2736, @aarzilli)\n* Return error when assigning between function variables (#2692, @aarzilli)\n* Obey logflags config for LoadConfig warnings (#2701, @aarzilli, @suzmue)\n* Workaround for debugserver register set bug (#2770, @aarzilli)\n* DAP: Fix nil dereference when byte array cannot be converted to string (#2733, @polinasok)\n* DAP: Fix data race for noDebugProcess.ProcessState (#2735, @polinasok)\n\n### Changed\n\n* Refine handling of version-too-old errors (#2684, #2712, @polinasok, @yang-wei)\n* eBPF tracing backend return value parsing (#2704, @derekparker)\n* Replace libbpfgo with cilium/ebpf (##2771, @derekparker)\n* DAP: Merge Arguments and Locals scopes (#2717, @suzmue)\n* DAP: Refine launch/attach error visibility (#2671, @polinasok)\n* DAP: Server refactoring to separate listener and client session layers (#2729, @polinasok)\n* DAP: Improve shutdown logic and test coverage (#2749, @polinasok)\n\n## [1.7.2] 2021-09-21\n\n### Added\n\n* Documentation: Add notes on porting Delve to other architectures (@aarzilli)\n* Add internal checks to ensure we're synched with Go runtime internals (@aarzilli)\n* eBPF backend can parse goroutine info (@derekparker)\n* Add support for debuginfo-find (@derekparker)\n* Add MAKE arguments for GOOS / GOARCH (@cmol)\n\n### Fixed\n\n* Correctly check for 1.17 and regabi (@aarzilli)\n* Print config output strings quoted (@aarzilli, @krobelus)\n* Update check for system goroutines (@suzmue)\n* DAP: Halt before detach in Stop (@polinasok)\n* DAP: Do not send halt request if debuggee is not running (@suzmue)\n\n### Changed\n\n* Include selected goroutine in threads request (@suzmue)\n* Remove individual OS install instructions (@gabriel-vasile)\n* DAP: Show decimal / hex values for uint (@suzmue)\n* Avoid bright colors in default syntax highlighting (@krobelus)\n\n## [1.7.1] 2021-08-18\n\n### Added\n\n- *EXPERIMENTAL* Added support for eBPF based trace backend (@derekparker)\n- Added fuzzy completion for the CLI for commands and breakpoint locations (@derekparker)\n- Added stack watchpoints (@aarzilli)\n- Added verbose version output (@hyangah)\n- DAP: Support for replay and core modes (@Iggomez)\n- DAP: Added ability to page stack frames (@suzmue)\n- DAP: Added len as metadata for maps (@suzmue)\n- DAP: Add 'backend' launch/attach attribute (@polinasok)\n\n### Fixed\n\n- Fix handling of runtime throws (@derekparker)\n- DAP: Handle unexpected debugger termination (@polinasok)\n\n### Changed\n\n- Added configuration for Target to not clear stepping breakpoints (@suzmue)\n- Ignore existing breakpoints for continue-until (@derekparker)\n- Improve help output for examinemem (@derekparker)\n- Clarify next-while-nexting error (@suzmue)\n- DWARF improvements for additional opcodes (@aarzilli)\n- Treat SIGTERM as server disconnect signal (@polinasok)\n- Update Cobra lib to v1.1.3 (@hyangah)\n- Improvements to 'on' command (@aarzilli)\n- Terminal will now prompt when breakpoint is hit during next/step/stepout (@aarzilli)\n- DAP: Ensure server is always headless and target foregrounded (@polinasok)\n- DAP: Set hit breakpoint IDs (@suzmue)\n\n## [1.7.0] 2021-07-19\n\n### Added\n\n- Go 1.17 support (@aarzilli, @mknyszek)\n- Add new API and terminal command for setting watchpoints (@aarzilli)\n- Add filtering and grouping to goroutines command (@aarzilli)\n- Added support for hit count condition on breakpoints (@suzmue, @aarzilli)\n- DAP server: Handle SetVariable requests (@hyangah)\n- DAP server: Add clipboard support (@hyangah)\n\n### Fixed\n\n- DAP server: Several shutdown / disconnect fixes (@suzmue, @polinasok)\n- DAP server: Clean output executable name on Windows (@hyangah)\n- DAP server: Variables response must not have null variables array (@polinasok)\n- Fix runtimeTypeToDIE setup (necessary for Go 1.17) (@aarzilli)\n- Reenable CGO stacktrace test on arm64 (@derekparker)\n- Fix incorrect integer casts in freebsd C backend (@dwagin)\n- Ensure correct exit status reported on commands following process death (@derekparker)\n- Misc flakey test fixes / test refactoring (@polinasok)\n- Fix for frame parameter being ignored in ConvertEvalScope when no goroutine is found (@suzmue)\n- Ensure ContinueOnce returns StopExited if process exited, otherwise return StopUnknown (@polinasok)\n- Fix panic in RPC2.ListDynamicLibraries (@derekparker)\n- Fix typo in flag passed to check if debugserver supports unmask_signals (@staugust)\n\n### Changed\n\n- DAP server: Add sameuser security check (@hyangah)\n- DAP server: Changes to context-dependent load limits for string type (@hyangah, @polinasok)\n- DAP server: Add paging for arrays, slices and maps (@suzmue)\n- DAP server: Deemphasize internal runtime stack frames (@suzmue)\n- DAP server: Add throw reason to exception information upon panic (@suzmue)\n- DAP server: Set breakpoint hit ID (@suzmue)\n- DAP server: Add string value of byte/rune slice as child (@suzmue)\n- Documentation: Add viminspector to list of editor plugins (@aarzilli)\n- Support for ZMM registers in gdbserial backend (@aarzilli)\n- Remove support for stack barriers (@derekparker)\n- Improve support for DWARF5 (@derekparker)\n- Improve documentation (@derekparker, @aarzilli)\n- Print message and exit if Delve detects it is running under Rosetta on M1 macs (@aarzilli)\n- Drop official Go 1.14 support (@derekparker)\n\n## [1.6.1] 2021-05-18\n\n### Added\n\n- Dump command: generate core dumps from within Delve (@aarzilli)\n- Toggle command: toggle breakpoints on or off (@alexsaezm)\n- DAP server improvements (@polinasok, @hyangah, @suzmue)\n- Delve now parses and uses the .eh_frame section when available (@aarzilli)\n- Add linespec argument to 'continue' command (@icholy)\n- Add optional format argument to 'print' and 'display' commands (@aarzilli)\n\n### Fixed\n\n- Fixed file reference handling with DWARF5 compilation units (@thanm)\n- Fix embedded field searching (@aarzilli)\n- Fix off by one error reading core files (@aarzilli)\n- Correctly read G address on linux/arm64\n- Avoid double removal of temp built binary (@polinasok)\n- Fix temp binary deletion race in DAP server (@polinasok)\n- Fix shutdown related bugs in RPC server (@aarzilli)\n- Fix crashes induced by RequestManualStop (@aarzilli)\n- Fix handling of DW_OP_piece (@aarzilli)\n- Correctly truncate the result of binary operations on integers (@aarzilli)\n\n### Changed\n\n- Dropped Go 1.13 support (@aarzilli)\n- Improved documentation (@ChrisHines, @aarzilli, @becheran, @hedenface, @andreimatei, @ehershey , @hyangah)\n- Allow examinememory to use an expression (@felixge)\n- Improve gdb server check on newer ARM based macs (@oxisto)\n- CPU registers can now be used in expressions (@aarzilli)\n- DAP: Add type information to variables (@suzmue)\n- DAP: Support setting breakpoints while target is running (@polinasok)\n- DAP: Implement function breakpoints (@suzmue)\n\n## [1.6.0] 2021-01-28\n\n### Added\n\n- Support for debugging darwin/arm64 (i.e. macOS on Apple Silicon) (#2285, @oxisto)\n- Support for debugging Go1.16 (#2214, @aarzilli)\n- DAP: support for attaching to a local process (#2260, @polinasok)\n- DAP: fill the `evaluateName` field when returning variables, enabling \"Add to Watch\" and \"Copy as Expression\" features of VSCode (#2292, @polinasok)\n- Added WaitSince, WaitReason to `service/api.Goroutine` and to the `goroutines` command (#2264, #2283, #2270, @dlsniper, @nd, @aarzilli)\n- Syntax highlighting for Go code (#2294, @aarzilli)\n- Added flag `CallReturn` to `service/api.Thread` to distinguish return values filled by a `stepOut` command from the ones filled by a `call` command (#2230, @aarzilli)\n\n### Fixed\n\n- Fix occasional \"Access is denied\" error when debugging on Windows (#2281, @nd)\n- Register formatting on ARM64 (#2289, @dujinze)\n- Miscellaneous bug fixes (#2232, #2255, #2280, #2286, #2291, #2309, #2293, @aarzilli, @polinasok, @hitzhangjie)\n\n### Changed\n\n- The `goroutines` command can be interrupted by pressing Ctrl-C (#2278, @aarzilli)\n- Using a TeamCity instance provided by JetBrains for Continuous Integration (#2298, #2307, #2311, #2315, #2326, @artspb, @nd, @aarzilli, @derekparker)\n- Improvements to documentation and error messages (#2266, #2265, #2273, #2299, @andreimatei, @hitzhangjie, @zamai, @polinasok)\n\n## [1.5.1] 2020-12-09\n\n### Added\n- DAP: Scope and variable requests, including call injection (#2111, #2158, #2160, #2184, #2185, @polinasok)\n- DAP: Support removing breakpoints and breakpoint conditions (#2188, @polinasok)\n- DAP: Support next, stepIn, stepOut requests (#2143, @polinasok)\n- DAP: Miscellaneous improvements (#2167, #2186, #2238, #2233, #2248, @eliben, @suzmue, @polinasok)\n- Command line flag `-r` to redirect standard file descriptors of the target process (#2146, #2222, @aarzilli)\n- `-size` flag for `examinemem` command (##2147, @hitzhangjie)\n- Command line flag to disable ASLR (#2202, @aarzilli)\n- Support for DWARFv5 loclists (#2097, @aarzilli)\n\n### Fixed\n- Support for Go version >= 1.15.4 (#2235, @aarzilli)\n- Fix displaying AVX registers (#2139, @aarzilli)\n- Panic during `next`, `step` when there is no current goroutine (#2164, @chainhelen)\n- Reading a deferred call's arguments on linux/arm64 (#2210, @aarzilli)\n- Miscellaneous bug fixes (#2135, #2131, #2142, #2140, #2127, #2113, #2172, #2181, #2195, #2193, #2220, #2179, #2206, #2223, @aarzilli)\n\n### Changed\n- `dlv test` switches to the package directory like `go test` does (#2128, @aarzilli)\n- Delve will no longer resolve symbolic links when searching for split debug_info if the executable path is not /proc/pid/exe (#2170, @aarzilli)\n- Starlark scripts can now be interrupted using Ctrl-C even if they are not making any API calls (#2149, @aarzilli)\n- An error message will be displayed more prominently if a connection is rejected due to the `--only-same-user` flag (which is enabled by default) (#2211, @aarzilli)\n- Substitute path rules are applied to the argument of `break` and `trace` (#2213, @aarzilli)\n- The output of `xcode-select --print-path` will be used to determine the location of `debugserver` instead of a hardcoded path (#2229, @aaronsky)\n- Improvements to documentation and error messages (#2148, #2154, #2196, #2228, @aurkenb, @pohzipohzi, @chainhelen, @andreimatei)\n\n\n## [1.5.0] 2020-07-29\n\n### Added\n\n- Go 1.15 support (#2011, @aarzilli)\n- Added the `reload` command that restarts the debugging session after recompiling the program (#1971, @alexsaezm)\n- Better support for printing pointers in the C part of a cgo program (#1997, @aarzilli)\n- Some support for DWARFv5 (#2090, @aarzilli)\n\n### Fixed\n\n- Fixed trace subcommand when the `-p` option is used (#2069, @chainhelen)\n- Nil pointer dereference when printing tracepoints (#2071, @aarzilli)\n- Internal debugger error when printing the goroutine list of a corrupted or truncated core file (#2070, @aarzilli)\n- Do not corrupt the list of source files whenever a plugin (or dynamically loaded library) is loaded (#2075, @aarzilli)\n- Fixed current file/line reported after a segfault on macOS that was wrong under certain circumstances (#2081, @aarzilli)\n- Internal debugger error when reading global variables of types using unsupported debug_info features (#2105, #2106, #2110, @aarzilli, @b00f)\n\n### Changed\n\n- Support for stack trace requests in DAP and other DAP improvements (#2056, #2093, #2099, #2103, @polinasok)\n- Delve will step inside a private runtime function call when it is already inside the runtime package (#2061, @aarzilli)\n- Updated cosiner/argv dependency to v0.1.0 (#2088, @gadelkareem)\n- Improvements to documentation and error messages (#2068, #2084, #2091, @aarzilli, @bhcleek, @letientai299)\n\n## [1.4.1] 2020-05-22\n\n### Added\n\n- Support for linux/386 added (@chainhelen)\n- DAP server initial release (@polinasok, @eliben, @hyangah)\n- New command `examinemem` (or `x`) allows users to examine raw memory (@chainhelen)\n- New command `display` allows users to print value of an expression every time the program stops (@aarzilli)\n- New flag `--tty` allows users to supply a TTY for the debugged program to use (@derekparker)\n- Coredump support added for Arm64 (@ossdev07)\n- Ability to print goroutine labels (@aarzilli)\n- Allow printing registers for arbitrary stack frames (@aarzilli)\n- Add `disassemble-flavor` to config to specify assembly syntax (@chainhelen)\n\n### Fixed\n\n- Allow function calls on non-struct types (@derekparker)\n- Dwarf line parsing bug fix (@klemens-morgenstern)\n- Improved error message when building Delve on unsupported systems (@aarzilli)\n- Improved error message when trying to execute a binary in an invalid format for host system (@derekparker)\n- Fix panic in Delve when using `call` command with some invalid input (@chainhelen)\n\n### Changed\n\n- Improved output from `dlv trace` and `trace` REPL commands (@derekparker)\n- Conditional breakpoint performance improvements (@aarzilli)\n- Thread register loading performance improvement on gdbserial backend (@derekparker)\n- Reduce default log level to error (@aarzilli)\n- Linux memory read/write optimization using process_vm_read/write (@cuviper)\n- Terminal output of commands divided into categories (@aarzilli)\n- Use less permissive file settings on history file (@derekparker)\n- Autogenerated interface method calls wrappers now automatically stepped through (@aarzilli)\n\n## [1.4.0] 2020-02-11\n\n### Added\n\n- Support for Linux/ARM64 (#1733, #1780 @hengwu0, @tykcd996)\n- Support for Go 1.14 (@aarzilli)\n- Added an API call that can be used by Delve front-ends to map between package names and build paths (#1784, @aarzilli)\n- Added a field to goroutine objects returned by the API listing the goroutine's pprof labels (#1836, @nd)\n- Better support for inlined functions (#1717, #1742, #1807 @aarzilli)\n\n### Fixed\n\n- Fixed target program crash after step-instruction (#1738, @aarzilli)\n- Fixed miscellaneus bugs related to debugging Position Independent Executables and plugins (#1775, @aarzilli)\n- Always remove breakpoints during detach (#1772, @hengwu0)\n- Fixed Delve's exit status after the program has ended (#1781, @derekparker)\n- Fixed nil pointer dereference in FunctionReturnLocations (#1789, @aarzilli)\n- Improved performance of `goroutines -t` command (#1830, @aarzilli)\n- Fixed occasional \"Access Denied\" error during attach on Windows (#1826, @alexbrainman)\n- Fixed parsing of the `disassemble` command (#1837, @chainhelen)\n\n### Changed\n\n- Check that local connections originate from the same User ID as the one that started Delve's instance (#1764, @stapelberg)\n- Mapping between package names and package paths is done using the DW_AT_go_package_name where available (#1757, @aarzilli)\n- Improvements to documentation and error messages (#1806, #1822, #1827, #1843, #1848, #1850, #1853 @spacewander, @chainhelen, @stigok)\n- Miscellaneous code refactorings (#1746, #1777, #1834 @derekparker, @aarzilli)\n\n## [1.3.2] 2019-10-21\n\n### Added\n\n- New example for starlark documentation (@aarzilli)\n- Allow calls to optimized functions (@aarzilli)\n- Option to bypass smart stacktraces (@aarzilli)\n- Ability to call method of embedded field (@chainhelen)\n- Added `make unininstall` command (@chainhelen)\n- User can re-record recorded targets (@aarzilli)\n\n### Fixed\n\n- Fix version reporting (current latest tagged as 1.3.1, reporting 1.3.0) (@derekparker)\n- Fix nil pointer deref on proc.GetG (@aarzilli)\n- Better handling of DW_TAG_inlined_subroutine without debug_line info (@aarzilli)\n- Fix panic on invalid config values (@TerrySolar)\n- Fix debug_line state machine behavior with multi-sequence units (@aarzilli)\n- Fix starlark iteration on maps > 64 entries (@alxn)\n- debug_frame parser fixed parsing augmentation (@chainhelen)\n- Round TLS segment size to its alignment (@heschik)\n\n### Changed\n\n- Documentation bumped required Go version (@codekaup)\n- Disassemble now works without a selected goroutine (@aarzilli)\n- Correctly mark closure variables as shadowed (@aarzilli)\n- Bump CI to use Go 1.13 (@aarzilli)\n\n## [1.3.0] 2019-08-27\n\n### Added\n\n- Go 1.13 support (#1546, @aarzilli)\n- Starlark scripting language in the command line client (#1466, #1605, @aarzilli, @derekparker)\n- Initial support for FreeBSD (#1480, @rayrapetyan)\n- Command line flag to continue process immediately after launch/attach (#1585, @briandealwis)\n- Configuration option for the maximum recursion depth used when printing variables (#1626, @msaf1980)\n- `next` command now takes a numerical option specifying how many times it should be repeated (#1629, @jeremyfaller)\n- Command line options to redirect logs to a file or file descriptor (#1525, @aarzilli)\n- Ability to read goroutine ancestors if they are enabled by passing `GODEBUG=\"tracebackancestors=N\"` (requires Go >= 1.11) (#1514, #1570, @aarzilli)\n- Breakpoint autocompletion for the command line client (#1612, @qingyunha)\n- Added reverse step-instruction command for rr backend (#1596, @dpapastamos)\n- Support debugging programs using plugins on Linux with Go 1.12 or later (#1413, #1414, @aarzilli)\n- Improved function call injection (#1503, #1504, #1548, #1591, #1602, @aarzilli)\n- New variable flag to mark variables that have a fake or no-longer-valid address, because they are either stored in registers or in a stack frame that has been removed from the stack (#1619, @aarzilli)\n- Support relative file paths when specifying breakpoint locations (#1478, @chainhelen)\n- GetVersion API response now reports currently used backend (#1641, @aarzilli)\n- `so` as alias for `stepout` (#1646, @stmuk)\n\n### Fixed\n\n- Fixed values of registers smaller than 64bit (#1583, @derekparker)\n- Fixed reading maps with removed entries in Go 1.12 (#1532, @aarzilli)\n- Fixed possible crash on Linux caused by function call injection (#1538, @aarzilli)\n- Fixed errors reading DWARF sections (#1574, #1582, #1603, @aarzilli)\n- Prompt to shutdown headless instance after the target process has exited (#1621, @briandealwis)\n- Stacktraces when a SIGSEGV (or other signal) happens during a cgo call (#1647, @aarzilli)\n- Error restarting program with next/step/stepout under some circumstances (#1657, @aarzilli)\n- Other bug fixes (#1487, #1488, #1490, #1500, #1497, #1469, #1553, #1595, #1594, #1620, #1622, #1624, #1637, #1664, #1665, #1668, @derekparker, @aarzilli, @dpapastamos, @pjot726)\n\n### Changed\n\n- Delve will refuse to work with a version of Go that is either too old or too new (can be disabled with `--check-go-version=false`) (#1533, @aarzilli)\n- When the value of a variable is determined to be a symbolic constant the numerical value of the symbolic constant will also be printed (#1530, @aarzilli)\n- Catch fatal runtime errors (such as the deadlock detector triggering) automatically (#1502, @aarzilli)\n- Replaced glide (which we weren't using anymore) with `go mod vendor` in make script (#1606, @derekparker)\n- Removed support for reading interfaces in older versions (prior to 1.7) of Go (#1501, @aarzilli)\n- Removed support for location expression \"<fnname>:0\" and associated API functionality (#1588, @aarzilli)\n- Calling an unknown method through the JSON-RPC API will now return an error while previously it would simply be ignored (#1571, @aarzilli)\n- Improved documentation and error messages (#1492, #1520, #1524, #1561, #1562, #1556, #1559, #1567, #1638, #1649, #1662, @derekparker, @Ladicle, @qaisjp, @justinclift, @tschundler, @two, @aarzilli, @dr2chase)\n\n## [1.2.0] 2019-02-19\n\n### Added\n\n- Go 1.12 support\n- Improved `trace` command to show return values and trace pre-built executables or tests (#1379, #1380, #1381, @derekparker)\n- Windows Minidump support (#1386, #1387, #1402, @aarzilli)\n- Better support for split DWARF symbol files (#1405, #1420, @derekparker, @slp)\n- Function call support on macOS (#1324, @derekparker)\n- `deferred` command to view the arguments of a deferred call (#1285, #1265, @aarzilli)\n- Support for debugging Position Independent Executables (#1358, @aarzilli)\n- Type conversions of byte and rune arrays into strings (#1372, @chainhelen)\n- Configuration option (source-list-line-color) to change the color of line numbers in listings (#1364, @Russtopia)\n- New expression `iface.(data)` to access the concrete value of interface variable `iface`, without having to write a full type assertion (#1340, @aarzilli)\n- Support for specifying multiple source files as arguments for `debug`, `trace` and `test` (#1339, @chainhelen)\n\n### Fixed\n\n- Make `edit` command work with vim and neovim (#1451, @the4thamigo-uk)\n- Support Linux kernels prior to 2.6.34 (i.e. without PTRACE_GETREGSET) (#1435, @aarzilli)\n- Fixed `substitute-path` configuration option on Windows (#1418, @zavla)\n- Better performance for ListGoroutines API call (#1440, #1408, @slp, @aarzilli)\n- Better performance when loading the value of very large sparse maps (#1392, @aarzilli)\n- Other bug fixes (#1377, #1384, #1429, #1434, #1445, @aarzilli)\n\n### Changed\n\n- Changes to where the configuration is stored, conforming to [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) with fallbacks to the current directory when calls to `user.Current` fail (#1455 @GregorioMartinez, @acshekhara1)\n- Project moved from github.com/derekparker/delve to github.com/go-delve/delve (@derekparker)\n- Switched dependency management to go.mod (@aarzilli, @derekparker, @zavla)\n- New build scripts and support building on macOS without the native backend (@aarzilli, @kevin-cantwell)\n- Tolerate corrupted memory when reading the goroutine list (#1354, @aarzilli)\n- Improved documentation and error messages (@sbromberger, @aarzilli, @derekparker, @chainhelen, @dishmaev, @altimac)\n\n## [1.1.0] 2018-08-15\n\n### Added\n\n- Go 1.11 support (@aarzilli)\n- Improvements to Delve logging (@aarzilli, @derekparker)\n- Show global variables in disassembly (@aarzilli)\n- Support for inlined calls (@aarzilli, @derekparker, @jaym)\n- Support dwz compressed debug symbols (@slp)\n- Support for debug info in a separate file (@slp)\n- Let target process access the tty when running in headless mode on linux/native and darwin/gdbserial (@aarzilli)\n- Commands `up` and `down` (@yasushi-saito)\n- Flag to print stacktrace of all goroutines (@acshekhara1)\n- Command `edit` (@benc153)\n- Allow headless instances to keep running without a connected client (@aarzilli)\n- Add `StartLoc` to `api.Goroutine` containing the starting location of each goroutine (@aarzilli)\n- Preliminary support for function call injection with Go 1.11 (@aarzilli)\n- Ability to read list of deferred calls of a goroutine (@aarzilli)\n\n### Fixed\n\n- Fixed crashes when configuration file can not be created (@derekparker, @yuval-k, @aarzilli)\n- Fixed reported location of the go statement of goroutines (@derekparker)\n- Allow evaluation of constants specified without the full package path (@aarzilli)\n- Fixed some integer arithmetic bugs in proc (@functionary)\n- Respect load configuration after reslicing a map (@aarzilli)\n- Fixed race condition between Halt and process death in the linux native backend (@aarzilli)\n- Support core files generated by gdb (@psanford)\n- Fixed evaluation of breakpoint conditions containing a single boolean variable (@aarzilli)\n- Miscellaneous bugs in the debug_line state machine (@aarzilli)\n\n### Changed\n\n- Removed redundant/obsolete methods of proc.Process Halt and Kill, general cleanup of native backends (@aarzilli)\n- Improved documentation (@giuscri, @jsoref, @Carpetsmoker, @PatrickSchuster, @aarzilli, @derekparker, @ramya-rao-a, @dlsniper)\n- Workaround in the gdbserial backend for broken version 902 of debugserver (@aarzilli)\n- Changed operators || and && to short-circuit the evaluation of their arguments, like in Go (@aarzilli)\n- Mark shadowed arguments as shadowed (@aarzilli)\n- Allow syntax \"package/path\".varname to specify the full package path of a variable, in case disambiguating between multiple packages with the same name is necessary (@aarzilli)\n\n## [1.0.0] 2018-02-19\n\n### Added\n\n- Print DWARF location expression with `whatis` (@aarzilli)\n- Use `DW_AT_producer` to warn about optimized code (@aarzilli)\n- Use constants to describe variable value (@aarzilli)\n- Use `DW_AT_decl_line` to determine variable visibility (@aarzilli)\n- `-offsets` flag for `stack` command (@aarzilli)\n- Support CGO stacktraces (@aarzilli)\n- Disable optimizations in C compiler (@aarzilli)\n- `--output` flag to configure output binary (@Carpetsmoker)\n- Support `DW_OP_piece`, `DW_OP_regX`, `DW_OP_fbreg` (@aarzilli)\n- Support `DW_LNE_define_file` (@aarzilli)\n- Support more type casts (@aarzilli)\n\n### Fixed\n\n- Disable file path case normalization on OSX (@aarzilli)\n- Support Mozilla RR 5.1.0 (@aarzilli)\n- Terminal no longer crashes when process exits during `next` (@aarzilli)\n- Fix TestCoreFPRegisters on Go 1.9 (@aarzilli)\n- Avoid scanning system stack if it's not executing CGO (@aarzilli)\n- Locspec \"+0\" should always evaluate to the current PC (@aarzilli)\n- Handle `DW_LNE_end_of_sequence` correctly (@aarzilli)\n- Top level interface variables may have 0 address (@aarzilli)\n- Handle `DW_TAG_subprogram` with a nochildren abbrev (@aarzilli)\n- StepBreakpoint handling (@aarzilli)\n\n### Changed\n\n- Documentation improvements (@grahamking)\n- Removed limitation of exit notifications (@dlsniper)\n- Use `go env GOPATH` for install path\n- Disable test caching (@aarzilli)\n- Disable `-a` and use `all=` for Go 1.10 building (@aarzilli)\n- Automatically deref interfaces on member access (@aarzilli)\n- Replace all uses of `gosymtab/gopclntab` with `.debug_line` section (@aarzilli)\n\n## [1.0.0-rc.2] 2017-10-16\n\n### Added\n\n- Automatically print panic reason for unrecovered panics (@aarzilli)\n- Propagate frame offset to clients (@aarzilli)\n- Added vim-delve plugin to documentation (@sebdah)\n- Floating point register support in core files (@aarzilli)\n- Go 1.9 support, including lexical block support (@aarzilli)\n- Added whatis and config commands (@aarzilli)\n- Add FrameOffset field to api.Stackframe (@aarzilli)\n\n### Fixed\n\n- Better interoperation with debugserver on macOS (@aarzilli / @dlsniper)\n- Fix behavior of next, step and stepout with recursive functions (@aarzilli)\n- Parsing of maps with zero sized values (@aarzilli)\n- Typo in the documentation of `types` command (@custa)\n- Data races in tests (@aarzilli)\n- Fixed SetBreakpoint in native and gdbserial to return the breakpoint if it already exists (@dlsniper)\n- Return breakpoint if it already exists (@dlsniper)\n- Collect breakpoint information on exit from next/stepout/step (@aarzilli)\n- Fixed install instructions (@jacobvanorder)\n- Make headless server quit when the client disconnects (@aarzilli)\n- Store the correct concrete value for interface variables (previously we would always have a pointer type, even when the concrete value was not a pointer) (@aarzilli)\n- Fix interface and slice equality with nil (@aarzilli)\n- Fix file:line location specs when relative paths are in .debug_line (@hyangah)\n- Fix behavior of next/step/stepout in several edge-cases (invalid return addresses, no current goroutine, after process exists, inside unknown code, inside assembly files) (@aarzilli)\n- Make sure the debugged executable we generated is deleted after exit (@alexbrainman)\n- Make sure rr trace directories are deleted when we delete the executable and after tests (@aarzilli)\n- Return errors for commands sent after the target process exited instead of panicking (@derekparker)\n- Fixed typo in clear-checkpoint documentation (@iamzhout)\n\n### Changed\n\n- Switched from godeps to glide (@derekparker)\n- Better performance of linux native backend (@aarzilli)\n- Collect breakpoints information if necessary after a next, step or stepout command (@aarzilli)\n- Autodereference escaped variables (@aarzilli)\n- Use runtime.tlsg to determine G struct offset (@heschik)\n- Use os.StartProcess to implement Launch on windows (@alexbrainman)\n- Escaped variables are dereferenced instead of being reported as &v (@aarzilli)\n- Report errors when we fail to load the executable on attach (@aarzilli)\n- Distinguish between nil and empty slices and maps both in the API and on the command line interface (@aarzilli)\n- Skip deferred functions on next and stepout (as long as they are not called through a panic) (@aarzilli)\n\n## [1.0.0-rc.1] 2017-05-05\n\n### Added\n\n- Added support for core files (@heschik)\n- Added support for lldb-server and debugserver as backend, using debugserver by default on macOS (@aarzilli)\n- Added support for Mozilla RR as backend (@aarzilli)\n\n### Fixed\n\n- Detach should correctly kill child process we created (@aarzilli)\n- Correctly return error when reading/writing memory of exited process (@aarzilli)\n- Fix race condition in test (@hyangah)\n- Fix version extraction to support proposals (@allada)\n- Tolerate spaces better after command prefixes (@aarzilli)\n\n### Changed\n\n- Updated Mac OSX install instructions (@aarzilli)\n- Refactor of core code in proc (@aarzilli)\n- Improve list command (@aarzilli)\n\n## [0.12.2] 2017-04-13\n\n### Fixed\n\n- Fix infinite recursion with pointer loop (@aarzilli)\n- Windows: Handle delayed events (@aarzilli)\n- Fix Println call to be Printf (@derekparker)\n- Fix build on OSX (@koichi)\n- Mark malformed maps as unreadable instead of panicking (@aarzilli)\n- Fixed broken benchmarks (@derekparker)\n- Improve reliability of certain tests (@aarzilli)\n\n### Added\n\n- Go 1.8 Compatibility (@aarzilli)\n- Add Go 1.8 to test matrix (@derekparker)\n- Support NaN/Inf float values (@aarzilli)\n- Handle absence of stack barriers in Go 1.9 (@drchase)\n- Add gdlv to list of alternative UIs (@aarzilli)\n\n### Changed\n\n- Optimized 'trace' functionality (@aarzilli)\n- Internal refactoring to support multiple backends, core dumps, and more (@aarzilli) [Still ongoing]\n- Improve stacktraces (@aarzilli)\n- Improved documentation for passing flags to debugged process (@njason)\n\n## [0.12.1] 2017-01-11\n\n### Fixed\n\n- Fixed version output format.\n\n## [0.12.0] 2017-01-11\n\n### Added\n\n- Added support for OSX 10.12.1 kernel update (@aarzilli)\n- Added flag to set working directory (#650) (@rustyrobot)\n- Added stepout command (@aarzilli)\n- Implemented \"attach\" on Windows (@alexbrainman)\n- Implemented next / step / step-instruction on parked goroutines (@aarzilli)\n- Added support for App Engine (@dbenque)\n- Go 1.7 support\n- Added HomeBrew formula for installing on OSX.\n- Delve now will break on unrecovered panics. (@aarzilli)\n- Headless server can serve multiple clients.\n- Conditional breakpoints have been implemented. (@aarzilli)\n- Disassemble command has been implemented. (@aarzilli)\n- Much improved documentation (still a ways to go).\n\n### Changed\n\n- Pretty printing: type of elements of interface slices are printed.\n- Improvements in internal operation of \"step\" command.\n- Allow quoting in build flags argument.\n- \"h\" as alias for \"help\" command. (@stmuk)\n\n### Fixed\n\n- Improved prologue detection for large stack frames (#690) (@aarzilli)\n- Fixed bugs involving stale executables during restart (#689) (@aarzilli)\n- Various improvements to variable evaluation code (@aarzilli)\n- Fix bug reading process comm name (@ggndnn)\n- Add better detection for launching non executable files. (@aarzilli)\n- Fix halt bug during tracing. (@aarzilli)\n- Do not use escape codes on Windows when unsupported (@alexbrainman)\n- Fixed path lookup logic on Windows. (@lukehoban)\n\n## [0.11.0-alpha] 2016-01-26\n\n### Added\n\n- Windows support landed in master. Still work to be done, but 95% the way there. (@lukehoban)\n- `step-instruction` command added, has same behavior of the old `step` command.\n- (Backend) Implementation for conditional breakpoints, front end command coming soon. (@aarzilli)\n- Implement expression evaluator, can now execute commands like `print i == 2`. (@aarzilli)\n\n### Changed\n\n- `step` command no longer steps single instruction but goes to next source line, stepping into functions.\n- Refactor of `parseG` command for clarity and speed improvements.\n- Optimize reading from target process memory with cache. (prefetch + parse) (@aarzilli)\n- Shorten file paths in `trace` output.\n- Added Git SHA to version output.\n- Support function spec with partial package paths. (@aarzilli)\n- Bunch of misc variable evaluation fixes (@aarzilli)\n\n### Fixed\n\n- Misc fixes in preparation for Go 1.6. (@aarzilli, @derekparker)\n- Replace stdlib debug/dwarf with golang.org/x/debug/dwarf and fix Dwarf endian related parsing issues. (@aarzilli)\n- Fix `goroutines` not working without an argument. (@aarzilli)\n- Always clear temp breakpoints, even if normal breakpoint is hit. (@aarzilli)\n- Infinite loading loop through maps. (@aarzilli)\n- Fix OSX issues related to CGO memory corruption (array overrun in CGO). (@aarzilli)\n- Fix OSX issue related to reporting multiple breakpoints hit at same time. (@aarzilli)\n- Fix panic when using the `trace` subcommand.\n\n## [0.10.0-alpha] 2015-10-04\n\n### Added\n\n- `set` command, allows user to set variable (currently only supports pointers / numeric values) (@aarzilli)\n- All deps are vendored with Godeps and leveraging GO15VENDOREXPERIMENT\n- `source` command and `--init` flag to run commands from a file (@aarzilli)\n- `clearall` commands now take linespec (@kostya-sh)\n- Support for multiple levels of struct nesting during variable eval (i.e. `print foo.bar.baz` now works) (@lukehoban)\n\n### Changed\n\n- Removed hardware assisted breakpoints (for now)\n- Remove Go 1.4.2 on Travis builds\n\n### Fixed\n\n- Limit string sizes, be more tolerant of uninitialized memory (@aarzilli)\n- `make` commands fixed for >= Go 1.5 on OSX\n- Fixed bug where process would not be killed upon detach (@aarzilli)\n- Fixed bug trying to detach/kill process that has already exited (@aarzilli)\n- Support for \"dumb\" terminals (@dlsniper)\n- Fix bug setting breakpoints at chanRecvAddrs (@aarzilli)\n\n## [0.9.0-alpha] 2015-09-19\n\n### Added\n\n- Basic tab completion to terminal UI (@icholy)\n- Added `-full` flag to stack command, prints local vars and function args (@aarzilli)\n\n### Changed\n\n- Output of threads and goroutines sorted by ID (@icholy)\n- Performance improvement: cache parsed goroutines during halt (@icholy)\n- Stack command no longer takes goroutine ID. Use scope prefix command instead (i.e. `goroutine <id> bt`)\n\n### Fixed\n\n- OSX: Fix hang when 'next'ing through highly parallel programs\n- Absolute path confused as regexp in FindLocation (@aarzilli)\n- Use sched.pc instead of gopc for goroutine location\n- Exclude dead goroutines from `goroutines` command output (@icholy)\n\n## [0.8.1-alpha] 2015-09-05\n\n### Fixed\n- OSX: Fix error setting breakpoint upon Delve startup.\n\n## [0.8.0-alpha] 2015-09-05\n\n### Added\n- New command: 'frame'. Accepts a frame number and a command to execute in the context of that frame. (@aarzilli)\n- New command: 'goroutine'. Accepts goroutine ID and optionally a command to execute within the context of that goroutine. (@aarzilli)\n- New subcommand: 'exec'. Allows user to debug existing binary.\n- Add config file and add config options for command aliases. (@tylerb)\n\n### Changed\n- Add Go 1.5 to travis list.\n- Stop shortening file paths from API, shorten instead in terminal UI.\n- Implemented several improvements for `next`ing through highly parallel programs.\n- Visually align registers. (@paulsmith)\n\n### Fixed\n- Fixed output of 'goroutines' command.\n- Stopped preserving temp breakpoints on restart.\n- Added support for parsing multiple DWARF file tables. (@Omie)\n\n## [0.7.0-alpha] 2015-08-14\n\n### Added\n\n- New command: 'list' (alias: 'ls'). Allows you to list the source code of either your current location, or a location that you describe via: file:line, line number (in current file), +/- offset or /regexp/. (@joeshaw)\n- Added Travis-CI for continuous integration. Works for now, will eventually change.\n- Ability to connect to headless server. When running Delve in headless mode (used previously only for editor integration), you now have the opportunity to connect to it from the command line with `dlv connect [addr]`. This will allow you to (insecurely) remotely debug an application. (@tylerb)\n- Support for printing complex numeric types. (@ebfe)\n\n### Changed\n\n- Deprecate 'run' subcommand in favor of 'debug'. The 'run' subcommand now simply prints a warning, instructing the user to use the 'debug' command instead.\n- All 'info' subcommands have been promoted to the top level. You can now simply run 'funcs', or 'sources' instead of 'info funcs', etc...\n- Any command taking a location expression (i.e. break/trace/list) now support an updated linespec implementation. This allows you to describe the location you would like a breakpoint (etc..) set at in a more convenient way (@aarzilli).\n\n### Fixed\n\n- Improved support for CGO. (@aarzilli)\n- Support for upcoming Go 1.5.\n- Improve handling of soft signals on Darwin.\n- EvalVariable evaluates package variables. (@aarzilli)\n- Restart command now preserves breakpoints previously set.\n- Track recurse level when eval'ing slices/arrays. (@aarzilli)\n- Fix bad format string in cmd/dlv. (@moshee)\n"
  },
  {
    "path": "CLAUDE.md",
    "content": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working\nwith code in this repository.\n\n## Project Overview\n\nDelve is a debugger for the Go programming language. This is a complex,\nmulti-layered system that requires understanding of debugging internals,\nDWARF format, OS-specific process control, and Go runtime internals.\n\n## Build and Test Commands\n\n### Building\n\n```bash\nmake build          # Build dlv binary\nmake install        # Install dlv to system\nmake uninstall      # Remove dlv from system\n```\n\n### Testing\n\n```bash\nmake test                       # Run all tests with vetting\nmake vet                        # Run Go vet with architecture tags\ngo test -run TestName ./pkg/... # Run specific test by name\ngo test ./pkg/proc              # Run all pkg/proc tests\ngo test ./service/test          # Run all integration tests\n```\n\n### eBPF Backend Development\n\n```bash\nmake build-ebpf-image   # Build Docker image for eBPF compilation\nmake build-ebpf-object  # Compile eBPF C code to object files\n```\n\nThe eBPF backend uses Docker to compile C code\n(`pkg/proc/internal/ebpf/bpf/trace.bpf.c`) in a controlled environment,\nproducing architecture-specific `.o` files.\n\n#### eBPF Testing\n\neBPF tests (TestTraceEBPF*) require elevated capabilities (CAP_BPF,\nCAP_PERFMON, CAP_SYS_RESOURCE) and must be run with sudo:\n\n```bash\n# Run specific eBPF test\nsudo go test -v -run TestTraceEBPF3 -count 1 ./cmd/dlv\n\n# Run all eBPF tests\nsudo go test -v -run TestTraceEBPF -count 1 ./cmd/dlv\n\n# Run eBPF tests in Docker (useful when host lacks capabilities or for CI)\ndocker run --privileged -v \"$(pwd)\":/delve -w /delve \\\n  -e GOFLAGS=\"-buildvcs=false\" golang:1.24-bookworm \\\n  go test -v -run TestTraceEBPF -count 1 ./cmd/dlv\n\n# Suppress debug output\nsudo go test -v -run TestTraceEBPF3 -count 1 ./cmd/dlv 2>&1 | \\\n  grep -v \"^DEBUG\"\n```\n\n### Running Delve\n\n```bash\ndlv debug           # Compile and debug current package\ndlv test            # Compile and debug tests\ndlv attach <pid>    # Attach to running process\ndlv exec <binary>   # Debug pre-compiled binary\ndlv dap             # Start Debug Adapter Protocol server\n```\n\n## Test-Driven Development (MANDATORY)\n\n**CRITICAL**: All code changes MUST follow test-driven development (TDD).\nThis is not optional.\n\n### Red-Green-Refactor Cycle\n\n1. **RED** - Write a failing test first (must fail for the right reason)\n2. **GREEN** - Write minimum code to pass the test\n3. **REFACTOR** - Clean up while keeping tests green\n4. **VERIFY** - Run full test suite before committing\n\n### Mandatory TDD Rules\n\n1. **NEVER write implementation code without a failing test first**\n2. **NEVER commit code without tests**\n3. **NEVER skip tests or mark them as skipped to make CI pass**\n4. **NEVER disable existing tests** - fix them or fix the code\n5. Each test should verify ONE specific behavior\n6. Test names should describe the scenario being tested\n\n### Example Workflow\n\n```bash\n# RED - Write failing test\ngo test -run TestEvaluateComplexType ./pkg/proc\n# Output: FAIL - undefined: evaluateComplexType (EXPECTED)\n\n# GREEN - Implement minimum code\ngo test -run TestEvaluateComplexType ./pkg/proc\n# Output: PASS\n\n# REFACTOR - Clean up\ngo test -run TestEvaluateComplexType ./pkg/proc\n# Output: PASS (must stay green)\n\n# VERIFY - Full suite\nmake test\n```\n\n### Where to Write Tests\n\n- **Unit tests**: Co-locate with code (e.g., `pkg/proc/variables_test.go`\n  for `variables.go`)\n- **Integration tests**: `service/test/` for end-to-end scenarios\n- **Platform-specific tests**: Use build tags (e.g., `//go:build linux`)\n- **Backend-specific tests**: Test each backend separately\n- **Test fixtures**: Source code in `_fixtures/` (compiled during tests,\n  not pre-compiled binaries)\n- **Finding fixtures directory**: Use `protest.FindFixturesDir()` from\n  `github.com/go-delve/delve/pkg/proc/test` instead of writing custom\n  fixture directory lookup code\n\n### Test Quality Standards\n\n- Test behavior, not implementation\n- One assertion per test when possible (easier diagnosis)\n- Clear naming: `Test<What>_<Scenario>_<ExpectedResult>`\n- Use existing test utilities in `*_test.go` files\n- Tests must be deterministic (no random values or race conditions)\n\n### When TDD Seems Difficult\n\nDifficulty writing tests first indicates: (1) function doing too much,\n(2) tightly coupled dependencies, or (3) unclear requirements. **DO NOT\nskip TDD** - the difficulty signals a design problem.\n\n## Architecture Overview\n\nDelve uses a **layered architecture** with clear separation of concerns:\n\n```\nCLI (cmd/dlv) → Cobra commands\n    ↓\nService Layer (service/) → RPC2, DAP protocol implementations\n    ↓\nDebugger (service/debugger) → High-level debugging operations\n    ↓\nProcess Abstraction (pkg/proc) → TargetGroup, Target, ProcessInternal\n    ↓\nBackend Implementations:\n  - pkg/proc/native/        → Direct OS debugging (ptrace, Windows APIs)\n  - pkg/proc/gdbserial/     → GDB remote protocol client\n  - pkg/proc/core/          → Core dump analysis\n  - pkg/proc/internal/ebpf/ → eBPF-based tracing (non-stop debugging)\n```\n\n### Process Abstraction (`pkg/proc`)\n\nCore of Delve's architecture with **two-level interface design**:\n\n- `Process` - Read-only public interface\n- `ProcessInternal` - Internal interface with state-modifying operations\n- `Target` - Wraps `ProcessInternal` with debugging state\n- `TargetGroup` - Manages multiple processes (for exec following)\n- `Thread` - OS thread abstraction\n- `MemoryReadWriter` - Memory access abstraction\n\nBackends are pluggable via `ProcessInternal` interface. When modifying\nbackends, changes usually apply to ALL implementations.\n\n### Service Layer (`service/`)\n\n- **`debugger/`** - `Debugger` struct wrapping `TargetGroup` with\n  high-level operations (launch, attach, breakpoints, stepping, variable\n  evaluation)\n- **`rpc2/`** - JSON-RPC 2.0 server for remote clients\n- **`dap/`** - Debug Adapter Protocol for IDE integration\n- **`api/`** - Shared type definitions\n\n### Binary Analysis\n\n- **`pkg/dwarf/`** - Custom DWARF parser with Delve-specific features\n- **`pkg/gobuild/`** - Go build system integration\n- **`pkg/proc/BinaryInfo`** - Debug symbols, function entries, line tables\n\n### Platform/Architecture Handling\n\nUses **filename-based conditional compilation**:\n\n- OS-specific: `*_linux.go`, `*_darwin.go`, `*_windows.go`, `*_freebsd.go`\n- Architecture-specific: `regs_amd64.go`, `regs_arm64.go`, etc.\n- **DO NOT put platform-specific code in generic files**\n- In most cases platform-specific code should only be added to the\n  `pkg/proc/native` and `pkg/proc/gdbserial` backends.\n\nSupported: amd64, arm64, 386, ppc64le, riscv64, loong64\n\n## Development Guidelines\n\n### Code Organization\n\n1. **OS/arch separation**: Use Go's filename-based conditional\n   compilation. Never put platform-specific code in generic files.\n\n2. **Breakpoint types**: Two kinds exist:\n   - `LogicalBreakpoint` - User-visible (set at file:line or function)\n   - `Breakpoint` - Physical per target (multiple per logical breakpoint)\n\n3. **Testing**: See \"Test-Driven Development (MANDATORY)\" section above.\n\n### Working with DWARF\n\n- Parsing in `pkg/dwarf/` with custom reader utilities\n- Operations (expressions) in `pkg/dwarf/op/`\n- Variable evaluation issues: check type reading\n  (`pkg/proc/variables.go`), DWARF expression evaluation\n  (`pkg/dwarf/op/`), and memory reading (`Process.Memory()`)\n\n### Working with eBPF Backend\n\n`pkg/proc/internal/ebpf/` is **fundamentally different**: uses **uprobes**\nto trace function calls without stopping execution. C code compiles to\neBPF bytecode using Docker for reproducible builds. Manages goroutines for\nevent processing - be careful with shutdown.\n\nModifying eBPF code:\n\n1. Edit `pkg/proc/internal/ebpf/bpf/trace.bpf.c`\n2. Run `make build-ebpf-object`\n3. Go code loads `.o` files using cilium/ebpf library\n\n**Critical - Function Prologues**: Set breakpoints/uprobes at\n`FirstPCAfterPrologue`, not `fn.Entry` (unless explicitly requested). Go's\nstack-check prologue will re-trigger if set at `fn.Entry`.\n\n### Commit Message Format\n\nUse subsystem-based format from CONTRIBUTING.md:\n\n```\n<subsystem>: <what changed>\n\n<why this change was made>\n\nFixes #<issue>\n```\n\nSubsystems: `proc`, `service`, `terminal`, `dwarf`, `native`, `dap`, `rpc2`,\n`cmd/dlv`, etc.\n\n**Subject line**: Max 70 characters, **Body**: Wrap at 80 characters\n\n**Example**:\n\n```\nproc/internal/ebpf: fix goroutine leak and shutdown sequence\n\nThe eBPF event processing goroutines were not being properly cleaned up\non debugger shutdown, causing resource leaks. This adds proper context\ncancellation and wait groups.\n\nFixes #1234\n```\n\n### Common Pitfalls\n\n1. **Don't modify Process state directly** - Use `ProcessInternal` methods\n   for locking and state consistency\n\n2. **Breakpoint insertion is backend-specific** - `native` uses software\n   breakpoints (INT3), `gdbserial` sends packets, `ebpf` uses uprobes\n\n3. **Thread vs Goroutine** - Delve tracks both OS threads (`Thread`) and\n   Go goroutines (`G` struct). Most operations work on goroutines, not\n   threads.\n\n4. **Memory safety** - Always handle errors when reading process memory.\n   Process may die, memory may be unmapped, or addresses invalid.\n\n5. **Don't reparse DWARF sections** - `loadDebugInfoMaps` already\n   iterates all compile units. Add per-CU checks there instead of\n   making separate passes over `debug_info`.\n\n## File Organization\n\n```\ndelve/\n├── cmd/dlv/                    # CLI entry point and commands\n├── pkg/\n│   ├── proc/                   # Core process abstraction\n│   │   ├── native/            # OS-level debugging backends\n│   │   ├── gdbserial/         # GDB remote protocol\n│   │   ├── core/              # Core dump support\n│   │   ├── internal/ebpf/     # eBPF tracing backend\n│   │   └── *.go               # Process interfaces and common logic\n│   ├── dwarf/                 # DWARF parsing and manipulation\n│   ├── terminal/              # Interactive CLI\n│   ├── config/                # Configuration (.delverc)\n│   └── ...                    # Other utilities\n├── service/\n│   ├── debugger/              # High-level debugger API\n│   ├── rpc2/                  # JSON-RPC 2.0 server\n│   ├── dap/                   # Debug Adapter Protocol\n│   └── api/                   # Shared type definitions\n├── _fixtures/                 # Test source files (compiled during tests)\n├── _scripts/                  # Build helper scripts\n└── Documentation/             # User and internal documentation\n```\n\n## Dependencies\n\nKey external dependencies (see `go.mod`):\n\n- `github.com/cilium/ebpf` - eBPF program loading\n- `github.com/google/go-dap` - Debug Adapter Protocol\n- `github.com/spf13/cobra` - CLI framework\n- `golang.org/x/arch` - CPU architecture utilities\n- `golang.org/x/sys` - System calls and OS interfaces\n\n## Resources\n\n- [Internal Architecture Slides](https://speakerdeck.com/aarzilli/internal-architecture-of-delve)\n- [Porting Guide](Documentation/internal/portnotes.md)\n- [API Documentation](Documentation/api)\n- [How to Write a Delve Client](Documentation/api/ClientHowto.md)\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to Delve\n\nWant to help contribute to Delve? Great! Any and all help is certainly appreciated, whether it's code, documentation, or spelling corrections.\n\nIf you are planning to contribute a significant change, please draft a design document (or start a conversation) and post it to the [developer mailing list](https://groups.google.com/forum/#!forum/delve-dev). This will allow other developers and users to discuss the proposed change.\n\n## Filing issues\n\nWhen filing an issue, make sure to answer these six questions:\n\n1. What version of Delve are you using (`dlv version`)?\n2. What version of Go are you using? (`go version`)?\n3. What operating system and processor architecture are you using?\n4. What did you do?\n5. What did you expect to see?\n6. What did you see instead?\n\n## Contributing code\n\nFork this repo and create your own feature branch. Install all dependencies as documented in the README.\n\n### Build prerequisites\n\n- Go (see `go.mod` for minimum version)\n- [goreleaser v2](https://goreleaser.com/install/) — required for `make build`\n  Install: `go install github.com/goreleaser/goreleaser/v2@latest`\n\n### Guidelines\n\nConsider the following guidelines when preparing to submit a patch:\n\n* Follow standard Go conventions (document any new exported types, funcs, etc.., ensuring proper punctuation).\n* Ensure that you test your code. Any patches sent in for new / fixed functionality must include tests in order to be merged into master.\n* If you plan on making any major changes, create an issue before sending a patch. This will allow for proper discussion beforehand.\n* Keep any os / arch specific code contained to os / arch specific files. Delve leverages Go's filename based conditional compilation, i.e do not put Linux specific functionality in a non Linux specific file.\n\n### Format of the Commit Message\n\nWe follow a rough convention for commit messages that is designed to answer two\nquestions: what changed and why. The subject line should feature the what and\nthe body of the commit should describe the why.\n\n```\nterminal/command: Add 'list' command\n\nThis change adds the 'list' command which will print either your current\nlocation, or the location that you specify using the Delve linespec.\n\nFixes #38\n```\n\nThe format can be described more formally as follows:\n\n```\n<subsystem>: <what changed>\n<BLANK LINE>\n<why this change was made>\n<BLANK LINE>\n<footer>\n```\n\nThe first line is the subject and should be no longer than 70 characters, the\nsecond line is always blank, and other lines should be wrapped at 80 characters.\nThis allows the message to be easier to read on GitHub as well as in various\ngit tools.\n\n## Code of Conduct\n\nThis project adopts the standard Go code of conduct: https://go.dev/conduct.\n"
  },
  {
    "path": "Documentation/AI/AI_POLICY.md",
    "content": "# AI Usage Policy\n\n> **Attribution:** This policy is adapted from the\n> [Ghostty project's AI_POLICY.md](https://github.com/ghostty-org/ghostty/blob/main/AI_POLICY.md).\n> We are grateful to the Ghostty maintainers for providing a clear and\n> thoughtful framework for AI usage in open source projects.\n\nThe Delve project has strict rules for AI usage:\n\n- **All AI usage in any form must be disclosed.** You must state\n  the tool you used (e.g. Claude Code, Cursor, Amp) along with\n  the extent that the work was AI-assisted.\n\n- **Pull requests created in any way by AI can only be for accepted issues.**\n  Drive-by pull requests that do not reference an accepted issue will be\n  closed. If AI isn't disclosed but a maintainer suspects its use, the\n  PR will be closed. If you want to share code for a non-accepted issue,\n  open a discussion or attach it to an existing discussion.\n\n- **Pull requests created by AI must have been fully verified with\n  human use.** AI must not create hypothetically correct code that\n  hasn't been tested. Importantly, you must not allow AI to write\n  code for platforms or environments you don't have access to manually\n  test on.\n\n- **Issues and discussions can use AI assistance but must have a full\n  human-in-the-loop.** This means that any content generated with AI\n  must have been reviewed _and edited_ by a human before submission.\n  AI is very good at being overly verbose and including noise that\n  distracts from the main point. Humans must do their research and\n  trim this down.\n\nThese rules apply only to outside contributions to Delve. Maintainers\nare exempt from these rules and may use AI tools at their discretion;\nthey've proven themselves trustworthy to apply good judgment.\n\n## There are Humans Here\n\nPlease remember that Delve is maintained by humans.\n\nEvery discussion, issue, and pull request is read and reviewed by\nhumans (and sometimes machines, too). It is a boundary point at which\npeople interact with each other and the work done. It is rude and\ndisrespectful to approach this boundary with low-effort, unqualified\nwork, since it puts the burden of validation on the maintainer.\n\nIn a perfect world, AI would produce high-quality, accurate work\nevery time. But today, that reality depends on the driver of the AI.\nAnd today, most drivers of AI are just not good enough. So, until either\nthe people get better, the AI gets better, or both, we have to have\nstrict rules to protect maintainers.\n\n## AI is Welcome Here\n\nAs a project, we welcome AI as a tool!\n\n**Our reason for the AI policy is not due to an anti-AI stance**, but\ninstead intended to help produce high quality code and maintain code\nquality and overall standards when using AI coding assistance. This policy\nalso gives a common framework to use and foster effective open source\ncollaboration in the era of AI Agentic coding.\n\nI include this section to be transparent about the project's usage about\nAI for people who may disagree with it, and to address the misconception\nthat this policy is anti-AI in nature.\n"
  },
  {
    "path": "Documentation/EditorIntegration.md",
    "content": "## Editor plugins\n\nThe following editor plugins for delve are available:\n\n**Atom**\n* [Go Debugger for Atom](https://github.com/lloiser/go-debug)\n\n**Emacs**\n* [Emacs plugin](https://github.com/benma/go-dlv.el/)\n* [dap-mode](https://github.com/emacs-lsp/dap-mode#go-1)\n* [dape](https://github.com/svaante/dape?tab=readme-ov-file#go---dlv)\n\n**Goland**\n* [JetBrains Goland](https://www.jetbrains.com/go)\n\n**IntelliJ IDEA**\n* [Golang Plugin for IntelliJ IDEA](https://plugins.jetbrains.com/plugin/9568-go)\n\n**LiteIDE**\n* [LiteIDE](https://github.com/visualfc/liteide)\n\n**Vim**\n* [vim-go](https://github.com/fatih/vim-go) (both Vim and Neovim)\n* [vim-delve](https://github.com/sebdah/vim-delve) (both Vim and Neovim)\n* [vim-godebug](https://github.com/jodosha/vim-godebug) (only Neovim)\n* [vimspector](https://github.com/puremourning/vimspector/)\n\n**VisualStudio Code**\n* [Go for Visual Studio Code](https://github.com/golang/vscode-go)\n\n**Sublime**\n* [Go Debugger for Sublime](https://github.com/dishmaev/GoDebug)\n\n## Alternative UIs\n\nThe following alternative UIs for delve are available:\n\n* [Gdlv](https://github.com/aarzilli/gdlv)\n* [Debugger](https://github.com/emad-elsaid/debugger)\n"
  },
  {
    "path": "Documentation/KnownBugs.md",
    "content": "# Known Bugs\n\n- When Delve is compiled with versions of go prior to 1.7.0 it is not possible to set a breakpoint on a function in a remote package using the `Receiver.MethodName` syntax. See [Issue #528](https://github.com/go-delve/delve/issues/528).\n- When running Delve on binaries compiled with a version of go prior to 1.9.0 `locals` will print all local variables, including ones that are out of scope, the shadowed flag will be applied arbitrarily. If there are multiple variables defined with the same name in the current function `print` will not be able to select the correct one for the current line.\n- `reverse step` will not reverse step into functions called by deferred calls.\n"
  },
  {
    "path": "Documentation/README.md",
    "content": "# Delve Documentation\n\nDocumentation for the project will reside in this directory.\n\n- [Installation](installation)\n- [Usage](usage)\n- [Command Line Interface](cli)\n- [API](api)\n- [Internal](internal)\n- [Editor Integration and Alternative UI](EditorIntegration.md)\n- [Known Bugs](KnownBugs.md)\n"
  },
  {
    "path": "Documentation/api/ClientHowto.md",
    "content": "# How to write a Delve client, an informal guide\n\n## Spawning the backend\n\nThe `dlv` binary built by our `Makefile` contains both the backend and a\nsimple command line client. If you are writing your own client you will\nprobably want to run only the backend, you can do this by specifying the\n`--headless` option, for example:\n\n```\n$ dlv --headless debug\n```\n\nThe rest of the command line remains unchanged. You can use `debug`, `exec`,\n`test`, etc... along with `--headless` and they will work. If this project\nis part of a larger IDE integration then you probably have your own build\nsystem and do not wish to offload this task to Delve, in that case it's\nperfectly fine to always use the `dlv exec` command but do remember that:\n1. Delve may not have all the information necessary to properly debug optimized binaries, so it is recommended to disable them via: `-gcflags='all=-N -l`.\n2. your users *do want* to debug their tests so you should also provide some way to build the test executable (equivalent to `go test -c --gcflags='all=-N -l'`) and pass it to Delve.\n\nIt would also be nice for your users if you provided a way to attach to a running process, like `dlv attach` does.\n\nCommand line arguments that should be handed to the inferior process should be specified on dlv's command line after a \"--\" argument:\n\n```\ndlv exec --headless ./somebinary -- these arguments are for the inferior process\n```\n\nSpecifying a static port number, like in the [README](//github.com/go-delve/delve/tree/master/Documentation/README.md) example, can be done using `--listen=127.0.0.1:portnumber`. \n\nThis will, however, cause problems if you actually spawn multiple instances of the debugger. \n\nIt's probably better to let Delve pick a random unused port number on its own. To do this do not specify any `--listen` option and read one line of output from dlv's stdout. If the first line emitted by dlv starts with \"API server listening at: \" then dlv started correctly and the rest of the line specifies the address that Delve is listening at.\n\nThe `--log-dest` option can be used to redirect the \"API server listening at:\" message to a file or to a file descriptor. If the flag is not specified, the message will be output to stdout while other log messages are output to stderr.\n\n## Controlling the backend\n\nOnce you have a running headless instance you can connect to it and start sending commands. Delve's protocol is built on top of the [JSON-RPC 1.0 specification](https://www.jsonrpc.org/specification_v1).\n\nThe methods of a `service/rpc2.RPCServer` are exposed through this connection, to find out which requests you can send see the documentation of RPCServer on [Go Reference](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer). \n\n### Example\n\nLet's say you are trying to create a breakpoint. By looking at [Go Reference](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer) you'll find that there is a `CreateBreakpoint` method in `RPCServer`.\n\nThis method, like all other methods of RPCServer that you can call through the API, has two arguments: `args` and `out`: `args` contains all the input arguments of `CreateBreakpoint`, while `out` is what `CreateBreakpoint` will return to you.\n\nThe call that you could want to make, in pseudo-code, would be:\n\n```\nRPCServer.CreateBreakpoint(CreateBreakpointIn{ File: \"/User/you/some/file.go\", Line: 16 })\n```\n\nTo actually send this request on the JSON-RPC connection you just have to convert the CreateBreakpointIn object to json and then wrap everything into a JSON-RPC envelope:\n\n```\n{\"method\":\"RPCServer.CreateBreakpoint\",\"params\":[{\"Breakpoint\":{\"file\":\"/User/you/some/file.go\",\"line\":16}}],\"id\":27}\n```\n\nDelve will respond by sending a response packet that will look like this:\n\n```\n{\"id\":27, \"result\": {\"Breakpoint\": {\"id\":3, \"name\":\"\", \"addr\":4538829, \"file\":\"/User/you/some/file.go\", \"line\":16, \"functionName\":\"main.main\", \"Cond\":\"\", \"continue\":false, \"goroutine\":false, \"stacktrace\":0, \"LoadArgs\":null, \"LoadLocals\":null, \"hitCount\":{}, \"totalHitCount\":0}}, \"error\":null}\n```\n\n## Selecting the API version\n\nDelve currently supports two version of its API, APIv1 and APIv2. By default\na headless instance of `dlv` will serve APIv1 for backward-compatibility\nwith older clients, however new clients should use APIv2 as new features\nwill only be made available through version 2. The preferred method of\nswitching to APIv2 is to send the `RPCServer.SetApiVersion` command right\nafter connecting to the backend.\nAlternatively the `--api-version=2` command line option can be used when\nspawning the backend.\n\n## Diagnostics\n\nJust like any other program, both Delve and your client have bugs. To help\nwith determining where the problem is you should log the exchange of\nmessages between Delve and your client somehow.\n\nIf you don't want to do this yourself you can also pass the options `--log\n--log-output=rpc` to Delve. In fact the `--log-output` has many useful\nvalues and you should expose it to users, if possible, so that we can\ndiagnose problems that are hard to reproduce.\n\n## Using RPCServer.Command\n\n`Command` is probably the most important API entry point. It lets your\nclient stop (`Name == \"halt\"`) and resume (`Name == \"continue\"`) execution\nof the inferior process.\n\nThe return value of `Command` is a `DebuggerState` object. If you lose the\nDebuggerState object returned by your last call to `Command` you can ask for\na new copy with `RPCServer.State`.\n\n### Dealing with simultaneous breakpoints\n\nSince Go is a programming language with a big emphasis on concurrency and\nparallelism it's possible that multiple goroutines will stop at a breakpoint\nsimultaneously. This may at first seem incredibly unlikely but you must\nunderstand that between the time a breakpoint is triggered and the point\nwhere the debugger finishes stopping all threads of the inferior process\nthousands of CPU instructions have to be executed, which make simultaneous\nbreakpoint triggering not that unlikely.\n\nYou should signal to your user *all* the breakpoints that occur after\nexecuting a command, not just the first one. To do this iterate through the\n`Threads` array in `DebuggerState` and note all the threads that have a non\nnil `Breakpoint` member.\n\n### Special continue commands\n\nIn addition to \"halt\" and vanilla \"continue\" `Command` offers a few extra\nflavours of continue that automatically set interesting temporary\nbreakpoints: \"next\" will continue until the next line of the program,\n\"stepout\" will continue until the function returns, \"step\" is just like\n\"next\" but it will step into function calls (but skip all calls to\nunexported runtime functions).\n\nAll of \"next\", \"step\" and \"stepout\" operate on the selected goroutine. The\nselected goroutine is described by the `SelectedGoroutine` field of\n`DebuggerState`. Every time `Command` returns the selected goroutine will be\nreset to the goroutine that triggered the breakpoint.\n\nIf multiple breakpoints are triggered simultaneously the selected goroutine\nwill be chosen randomly between the goroutines that are stopped at a\nbreakpoint. If a breakpoint is hit by a thread that is executing on the\nsystem stack *there will be no selected goroutine*. If the \"halt\" command is\ncalled *there may not be a selected goroutine*.\n\nThe selected goroutine can be changed using the \"switchGoroutine\" command.\nIf \"switchGoroutine\" is used to switch to a goroutine that's currently\nparked SelectedGoroutine and CurrentThread will be mismatched. Always prefer\nSelectedGoroutine over CurrentThread, you should ignore CurrentThread\nentirely unless SelectedGoroutine is nil.\n\n### Special continue commands and asynchronous breakpoints\n\nBecause of the way go internals work it is not possible for a debugger to\nresume a single goroutine. Therefore it's possible that after executing a\nnext/step/stepout a goroutine other than the goroutine the next/step/stepout\nwas executed on will hit a breakpoint.\n\nIf this happens Delve will return a DebuggerState with NextInProgress set to\ntrue. When this happens your client has two options:\n\n* You can signal that a different breakpoint was hit and then automatically attempt to complete the next/step/stepout by calling `RPCServer.Command` with `Name == \"continue\"`\n* You can abort the next/step/stepout operation using `RPCServer.CancelNext`.\n\nIt is important to note that while NextInProgress is true it is not possible\nto call next/step/stepout again without using CancelNext first. There can\nnot be multiple next/step/stepout operations in progress at any time.\n\n### RPCServer.Command and stale executable files\n\nIt's possible (albeit unfortunate) that your user will decide to change the\nsource of the program being executed in the debugger, while the debugger is\nrunning. Because of this it would be advisable that your client check that\nthe executable is not stale every time `Command` returns and notify the user\nthat the executable being run is stale and line numbers may nor align\nproperly anymore.\n\nYou can do this bookkeeping yourself, but Delve can also help you with the\n`LastModified` call that returns the LastModified time of the executable\nfile when Delve started it.\n\n## Using RPCServer.CreateBreakpoint\n\nThe only two fields you probably want to fill of the Breakpoint argument of\nCreateBreakpoint are File and Line. The file name should be the absolute\npath to the file as the compiler saw it.\n\nFor example if the compiler saw this path:\n\n```\n/Users/you/go/src/something/something.go\n```\n\nBut `/Users/you/go/src/something` is a symbolic link to\n`/Users/you/projects/golang/something` the path *must* be specified as\n`/Users/you/go/src/something/something.go` and\n`/Users/you/projects/golang/something/something.go` will not be recognized\nas valid.\n\nIf you want to let your users specify a breakpoint on a function selected\nfrom a list of all functions you should specify the name of the function in\nthe FunctionName field of Breakpoint.\n\nIf you want to support the [same language as dlv's break and trace commands](//github.com/go-delve/delve/tree/master/Documentation/cli/locspec.md)\n you should call RPCServer.FindLocation and\nthen use the returned slice of Location objects to create Breakpoints to\npass to CreateBreakpoint: just fill each Breakpoint.Addr with the\ncontents of the corresponding Location.PC.\n\n## Looking into variables\n\nThere are several API entry points to evaluate variables in Delve:\n\n* RPCServer.ListPackageVars returns all global variables in all packages\n* PRCServer.ListLocalVars returns all local variables of a stack frame\n* RPCServer.ListFunctionArgs returns all function arguments of a stack frame\n* RPCServer.Eval evaluates an expression on a given stack frame\n\nAll those API calls take a LoadConfig argument. The LoadConfig specifies how\nmuch of the variable's value should actually be loaded. Because of\nLoadConfig a variable could be loaded incompletely, you should always notify\nthe user of this:\n\n* For strings, arrays, slices *and structs* the load is incomplete if: `Variable.Len > len(Variable.Children)`. This can happen to structs even if LoadConfig.MaxStructFields is -1 when MaxVariableRecurse is reached.\n* For maps the load is incomplete if: `Variable.Len > len(Variable.Children) / 2`\n* For interfaces the load is incomplete if the only children has the onlyAddr attribute set to true.\n\n### Loading more of a Variable\n\nYou can also give the user an option to continue loading an incompletely\nloaded variable. To load a struct that wasn't loaded automatically evaluate\nthe expression returned by:\n\n```\nfmt.Sprintf(\"*(*%q)(%#x)\", v.Type, v.Addr)\n```\n\nwhere v is the variable that was truncated.\n\nTo load more elements from an array, slice or string:\n\n```\nfmt.Sprintf(\"(*(*%q)(%#x))[%d:]\", v.Type, v.Addr, len(v.Children))\n```\n\nTo load more elements from a map:\n\n```\nfmt.Sprintf(\"(*(*%q)(%#x))[%d:]\", v.Type, v.Addr, len(v.Children)/2)\n```\n\nAll the evaluation API calls except ListPackageVars also take a EvalScope\nargument, this specifies which stack frame you are interested in. If you\nare interested in the topmost stack frame of the current goroutine (or\nthread) use: `EvalScope{ GoroutineID: -1, Frame: 0 }`.\n\nMore information on the expression language interpreted by RPCServer.Eval\ncan be found [here](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md).\n\n### Variable shadowing\n\nLet's assume you are debugging a piece of code that looks like this:\n\n```\n\tfor i := 0; i < N; i++ {\n\t\tfor i := 0; i < M; i++ {\n\t\t\tf(i) // <-- debugger is stopped here\n\t\t}\n\t}\n```\n\nThe response to a ListLocalVars request will list two variables named `i`,\nbecause at that point in the code two variables named `i` exist and are in\nscope. Only one (the innermost one), however, is visible to the user. The\nother one is *shadowed*.\n\nDelve will tell you which variable is shadowed through the `Flags` field of\nthe `Variable` object. If `Flags` has the `VariableShadowed` bit set then\nthe variable in question is shadowed.\n\nUsers of your client should be able to distinguish between shadowed and\nnon-shadowed variables.\n\n## Gracefully ending the debug session\n\nTo ensure that Delve cleans up after itself by deleting the `debug` or `debug.test` binary it creates \nand killing any processes spawned by the program being debugged, the `Detach` command needs to be called.\nIn case you are disconnecting a running program, ensure to halt the program before trying to detach.\n\n## Testing the Client\n\nA set of [example programs is\navailable](https://github.com/aarzilli/delve_client_testing) to test corner\ncases in handling breakpoints and displaying data structures. Follow the\ninstructions in the README.txt file.\n"
  },
  {
    "path": "Documentation/api/README.md",
    "content": "# Server/Client API Documentation\n\nDelve exposes two API interfaces, JSON-RPC and DAP, so that frontends other than the built-in [terminal client](../cli/README.md), such as [IDEs and editors](../EditorIntegration.md), can interact with Delve programmatically. The [JSON-RPC API](json-rpc/README.md) is used by the [terminal client](../cli/README.md), and will always stay up to date in lockstep regardless of new features. The [DAP API](dap/README.md) is a popular generic API already in use by many [tools](https://microsoft.github.io/debug-adapter-protocol/implementors/tools/).\n\n## Usage\n\nIn order to run Delve in \"API mode\", simply invoke with one of the standard commands, providing the `--headless` flag, like so:\n\n```\n$ dlv debug --headless --api-version=2 --log --log-output=debugger,dap,rpc --listen=127.0.0.1:8181\n```\n\nThis will start the debugger in a non-interactive mode, listening on the specified address, and will enable logging. The logging flags as well as the server address are optional, of course.\n\nOptionally, you may also specify the `--accept-multiclient` flag if you would like to connect multiple JSON-RPC or DAP clients to the API.\n\nYou can connect to the headless debugger from Delve itself using the `connect` subcommand:\n\n```\n$ dlv connect 127.0.0.1:8181\n```\n\nThis can be useful for remote debugging.\n\n## API Interfaces\n\nDelve has been architected in such a way as to allow multiple client/server implementations. All of the \"business logic\" as it were is abstracted away from the actual client/server implementations, allowing for easy implementation of new API interfaces.\n\n### Current API Interfaces\n\n- [JSON-RPC](json-rpc/README.md)\n- [DAP](dap/README.md)\n"
  },
  {
    "path": "Documentation/api/dap/README.md",
    "content": "# DAP Interface\n\nDelve exposes a [DAP](https://microsoft.github.io/debug-adapter-protocol/overview) API interface.\n\nThis interface is served over a streaming TCP socket using `dlv` server in one of the two headless modes:\n1. [`dlv dap`](../../usage/dlv_dap.md) - starts a single-use DAP-only server that waits for a client to specify launch/attach configuration for starting the debug session.\n2. `dlv --headless <command> <debuggee>` - starts a general server, enters a debug session for the specified debuggee and waits for a [JSON-RPC](../json-rpc/README.md) or a [DAP](https://microsoft.github.io/debug-adapter-protocol/overview) remote-attach client to begin interactive debugging. Can be used in multi-client mode with the following options:\n   *  `--accept-multiclient` - use to support connections from multiple clients\n   *  `--continue` - use to resume debuggee execution as soon as server session starts\n\nSee [Launch and Attach Configurations](#launch-and-attach-configurations) for more usage details of these two options.\n\nThe primary user of this mode is [VS Code Go](https://github.com/golang/vscode-go). Please see its \ndetailed [debugging documentation](https://github.com/golang/vscode-go/blob/master/docs/debugging.md) for additional information.\n\n## Debug Adapter Protocol\n\n[DAP](https://microsoft.github.io/debug-adapter-protocol/specification) is a general debugging protocol supported by many [tools](https://microsoft.github.io/debug-adapter-protocol/implementors/tools/) and [programming languages](https://microsoft.github.io/debug-adapter-protocol/implementors/adapters/). We tailored it to Go specifics, such as mapping [threads request](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Threads) to communicate goroutines and [exceptionInfo request](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_ExceptionInfo) to support panics and fatal errors.\n\nSee [dap.Server.handleRequest](https://github.com/go-delve/delve/search?q=handleRequest) and capabilities set in [dap.Server.onInitializeRequest](https://github.com/go-delve/delve/search?q=onInitializeRequest) for an up-to-date list of supported requests and options.\n\n## Launch and Attach Configurations\n\nIn addition to the general [DAP spec](https://microsoft.github.io/debug-adapter-protocol/specification), the server supports the following implementation-specific configuration options for starting the debug session:\n\n<table border=1>\n<tr><th>request<th>mode<th>required<th colspan=9>optional<th></tr>\n<tr><td rowspan=5>launch<br><a href=\"https://pkg.go.dev/github.com/go-delve/delve/service/dap#LaunchConfig\">godoc</a>\n    <td>debug<td>program               <td>dlvCwd<td>env<td>backend<td>args<td>cwd<td>buildFlags<td>output<td>noDebug\n    <td rowspan=7>\n    substitutePath<br>\n    stopOnEntry<br>\n    stackTraceDepth<br>\n    showGlobalVariables<br>\n    showRegisters<br>\n    showPprofLabels<br>\n    hideSystemGoroutines<br>\n    goroutineFilters\n    </tr>\n<tr>\n    <td>test<td>program                <td>dlvCwd<td>env<td>backend<td>args<td>cwd<td>buildFlags<td>output<td>noDebug</tr>\n<tr>\n    <td>exec<td>program                <td>dlvCwd<td>env<td>backend<td>args<td>cwd<td>          <td>      <td>noDebug</tr>\n<tr>\n    <td>core<td>program<br>corefilePath<td>dlvCwd<td>env<td>       <td>    <td>   <td>          <td>      <td>       </tr>\n<tr>\n    <td>replay<td>traceDirPath         <td>dlvCwd<td>env<td>       <td>    <td>   <td>          <td>      <td>       </tr>\n<tr><td rowspan=2>attach<br><a href=\"https://pkg.go.dev/github.com/go-delve/delve/service/dap#AttachConfig\">godoc</a>\n    <td>local<td>processId             <td>      <td>   <td>backend<td>   <td>    <td>          <td>      <td>        </tr>\n<tr>\n    <td>remote<td>                     <td>      <td>   <td>       <td>   <td>    <td>          <td>      <td>        </tr>\n</table>\n\n\nNot all of the configurations are supported by each of the two available DAP servers:\n\n<table border=1>\n<tr>\n<th>request<th>\"mode\":<th>`dlv dap`<th>`dlv --headless` <th> Description <th> Typical Client Usage\n</tr>\n<tr>\n<td>launch<td>\"debug\"<br>\"test\"<br>\"exec\"<br>\"replay\"<br>\"core\"<td>supported<td>NOT supported <td> Tells the `dlv dap` server to launch the specified target and start debugging it.\n<td rowspan=2>The client would launch the `dlv dap` server for the user or allow them to specify `host:port` of an external (a.k.a. remote) server.\n<tr>\n<td>attach<td>\"local\"<td>supported<td>NOT supported<td>Tells the `dlv dap` server to attach to an existing process local to the server.\n</tr>\n<tr>\n<td>attach<td>\"remote\"<td>NOT supported<td>supported<td>Tells the `dlv --headless` server that it is expected to already be debugging a target specified as part of its command-line invocation.\n<td>The client would expect `host:port` specification of an external (a.k.a. remote) server that the user already started with target <a href=\"https://github.com/go-delve/delve/blob/master/Documentation/usage/README.md\">command and args</a>.\n</tr>\n</table>\n\n## Disconnect and Shutdown\n\n### Single-Client Mode\n\nWhen used with `dlv dap` or `dlv --headless --accept-multiclient=false` (default), the DAP server will shut itself down at the end of the debug session, when the client sends a [disconnect request](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Disconnect). If the debuggee was launched, it will be taken down as well. If the debuggee was attached to, `terminateDebuggee` option will be respected.\n\nWhen the program terminates, we send a [terminated event](https://microsoft.github.io/debug-adapter-protocol/specification#Events_Terminated), which is expected to trigger a [disconnect request](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Disconnect) from the client for a session and a server shutdown. The [restart request](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Restart) is supported. \n\nThe server also shuts down in case of a client connection error or SIGTERM signal, taking down a launched process, but letting an attached process continue. \n\nPressing Ctrl-C on the terminal where a headless server is running sends SIGINT to the debuggee, foregrounded in headless mode to support debugging interactive programs.\n\n### Multi-Client Mode\n\nWhen used with `dlv --headless --accept-multiclient=true`, the DAP server will honor the multi-client mode when a client [disconnects](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Disconnect) or client connection fails. The server will remain running and ready for a new client connection, and the debuggee will remain in whatever state it was at the time of disconnect - running or halted. Once [`suspendDebuggee`](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Disconnect) option is supported by frontends like VS Code ([vscode/issues/134412](https://github.com/microsoft/vscode/issues/134412)), we will update the server to offer this as a way to specify debuggee state on disconnect.\n\nThe client may request full shutdown of the server and the debuggee with [`terminateDebuggee`](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Disconnect) option.\n\nThe server shuts down in response to a SIGTERM signal, taking down a launched process, but letting an attached process continue.\n\nPressing Ctrl-C on the terminal where a headless server is running sends SIGINT to the debuggee, foregrounded in headless mode to support debugging interactive programs.\n\n## Debugger Output\n\nThe debugger always logs one of the following on start-up to stdout:\n* `dlv dap`:\n   * `DAP server listening at: <host>:<port>`\n* `dlv --headless`: \n   * `API server listening at: <host>:<port>`\n\nThis can be used to confirm that server start-up succeeded.\n\nThe server uses [output events](https://microsoft.github.io/debug-adapter-protocol/specification#Events_Output) to communicate errors and select status messages to the client. For example:\n\n```\nStep interrupted by a breakpoint. Use 'Continue' to resume the original step command.\ninvalid command: Unable to step while the previous step is interrupted by a breakpoint.\nUse 'Continue' to resume the original step command.\nDetaching and terminating target process\n```\n\nMore detailed logging can be enabled with `--log --log-output=dap` as part of the [`dlv` command](../../usage/dlv.md).\nIt will record the server-side DAP message traffic. For example, \n```\n2022-01-04T00:27:57-08:00 debug layer=dap [<- from client]{\"seq\":1,\"type\":\"request\",\"command\":\"initialize\",\"arguments\":{\"clientID\":\"vscode\",\"clientName\":\"Visual Studio Code\",\"adapterID\":\"go\",\"locale\":\"en-us\",\"linesStartAt1\":true,\"columnsStartAt1\":true,\"pathFormat\":\"path\",\"supportsVariableType\":true,\"supportsVariablePaging\":true,\"supportsRunInTerminalRequest\":true,\"supportsMemoryReferences\":true,\"supportsProgressReporting\":true,\"supportsInvalidatedEvent\":true}}\n2022-01-04T00:27:57-08:00 debug layer=dap [-> to client]{\"seq\":0,\"type\":\"response\",\"request_seq\":1,\"success\":true,\"command\":\"initialize\",\"body\":{\"supportsConfigurationDoneRequest\":true,\"supportsFunctionBreakpoints\":true,\"supportsConditionalBreakpoints\":true,\"supportsEvaluateForHovers\":true,\"supportsSetVariable\":true,\"supportsExceptionInfoRequest\":true,\"supportTerminateDebuggee\":true,\"supportsDelayedStackTraceLoading\":true,\"supportsLogPoints\":true,\"supportsDisassembleRequest\":true,\"supportsClipboardContext\":true,\"supportsSteppingGranularity\":true,\"supportsInstructionBreakpoints\":true}}\n2022-01-04T00:27:57-08:00 debug layer=dap [<- from client]{\"seq\":2,\"type\":\"request\",\"command\":\"launch\",\"arguments\":{\"name\":\"Launch file\",\"type\":\"go\",\"request\":\"launch\",\"mode\":\"debug\",\"program\":\"./temp.go\",\"hideSystemGoroutines\":true,\"__buildDir\":\"/Users/polina/go/src\",\"__sessionId\":\"2ad0f0c1-a1fd-4fff-9fff-b8bc9a933fe5\"}}\n2022-01-04T00:27:57-08:00 debug layer=dap parsed launch config: {\n\t\"mode\": \"debug\",\n\t\"program\": \"./temp.go\",\n\t\"backend\": \"default\",\n\t\"stackTraceDepth\": 50,\n\t\"hideSystemGoroutines\": true\n}\n...\n```\nThis logging is written to stderr and is not forwarded via \n[output events](https://microsoft.github.io/debug-adapter-protocol/specification#Events_Output).\n\n## Debuggee Output\n\nDebuggee's stdout and stderr are written to stdout and stderr respectfully and are not forwarded via \n[output events](https://microsoft.github.io/debug-adapter-protocol/specification#Events_Output).\n\n## Versions\n\nThe initial DAP support was released in [v1.6.1](https://github.com/go-delve/delve/releases/tag/v1.6.1) with many additional improvements in subsequent versions. The [remote attach](https://github.com/go-delve/delve/issues/2328) support was added in [v1.7.3](https://github.com/go-delve/delve/releases/tag/v1.7.3). The [restart request](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Restart) support was added in [v1.25.1](https://github.com/go-delve/delve/releases/tag/v1.25.1).\n\nThe DAP API changes are backward-compatible as all new features are opt-in only. To update to a new [DAP version](https://microsoft.github.io/debug-adapter-protocol/changelog) and import a new DAP feature into delve, \none must first update the [go-dap](https://github.com/google/go-dap) dependency.\n\n<!--- TODO:\n- most requests are handled synchronously and block\n- hence many commands not supported when running, but setting breakpoints is\n--->"
  },
  {
    "path": "Documentation/api/json-rpc/README.md",
    "content": "# JSON-RPC interface\n\nDelve exposes a [JSON-RPC](https://www.jsonrpc.org/specification_v1) API interface. \n\nNote that this JSON-RPC interface is served over a streaming socket, *not* over HTTP.\n\n# API versions\n\nDelve currently only supports v2 of its API. Support for v1 was dropped in version v1.24.0 of Delve.\n\n# API version 2 documentation\n\nAll the methods of the type `service/rpc2.RPCServer` can be called using JSON-RPC, the documentation for these calls is [available on godoc](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer).\n\nNote that all exposed methods take one single input parameter (usually called `args`) of a struct type and also return a result of a struct type. Also note that the method name should be prefixed with `RPCServer.` in JSON-RPC.\n\n# Example\n\nYour client wants to set a breakpoint on the function `main.main`.\nThe first step will be calling the method `FindLocation` with `Scope = api.EvalScope{ GoroutineID: -1, Frame: 0}` and `Loc = \"main.main\"`. The JSON-RPC request packet should look like this:\n\n```\n{\"method\":\"RPCServer.FindLocation\",\"params\":[{\"Scope\":{\"GoroutineID\":-1,\"Frame\":0},\"Loc\":\"main.main\"}],\"id\":2}\n```\n\nthe response packet will look like this:\n\n```\n{\"id\":2,\"result\":{\"Locations\":[{\"pc\":4199019,\"file\":\"/home/a/temp/callme/callme.go\",\"line\":31,\"function\":{\"name\":\"main.main\",\"value\":4198992,\"type\":84,\"goType\":0}}]},\"error\":null}\n```\n\nNow your client should call the method `CreateBreakpoint` and specify `4199019` (the `pc` field in the response object) as the target address:\n\n```\n{\"method\":\"RPCServer.CreateBreakpoint\",\"params\":[{\"Breakpoint\":{\"addr\":4199019}}],\"id\":3}\n```\n\nif this request is successful your client will receive the following response:\n\n```\n{\"id\":3,\"result\":{\"Breakpoint\":{\"id\":1,\"name\":\"\",\"addr\":4199019,\"file\":\"/home/a/temp/callme/callme.go\",\"line\":31,\"functionName\":\"main.main\",\"Cond\":\"\",\"continue\":false,\"goroutine\":false,\"stacktrace\":0,\"LoadArgs\":null,\"LoadLocals\":null,\"hitCount\":{},\"totalHitCount\":0}},\"error\":null}\n```\n"
  },
  {
    "path": "Documentation/backend_test_health.md",
    "content": "Tests skipped by each supported backend:\n\n* 386 skipped = 11\n\t* 1 broken\n\t* 3 broken - cgo stacktraces\n\t* 6 not implemented\n\t* 1 not working due to optimizations\n* arm64 skipped = 1\n\t* 1 broken - global variable symbolication\n* darwin skipped = 5\n\t* 4 follow exec not implemented on macOS\n\t* 1 waitfor implementation is delegated to debugserver\n* darwin/arm64 skipped = 1\n\t* 1 broken - cgo stacktraces\n* darwin/lldb skipped = 1\n\t* 1 upstream issue\n* freebsd skipped = 15\n\t* 2 flaky\n\t* 4 follow exec not implemented on freebsd\n\t* 7 not implemented\n\t* 2 not working on freebsd\n* linux/386 skipped = 2\n\t* 2 not working on linux/386\n* linux/386/pie skipped = 1\n\t* 1 broken\n* linux/loong64 skipped = 1\n\t* 1 not working on linux/loong64\n* linux/ppc64le skipped = 3\n\t* 1 broken - cgo stacktraces\n\t* 2 not working on linux/ppc64le when -gcflags=-N -l is passed\n* linux/ppc64le/native skipped = 1\n\t* 1 broken in linux ppc64le\n* linux/ppc64le/native/pie skipped = 3\n\t* 3 broken - pie mode\n* linux/riscv64 skipped = 1\n\t* 1 not working on linux/riscv64\n* loong64 skipped = 7\n\t* 1 broken - global variable symbolication\n\t* 6 not implemented\n* pie skipped = 2\n\t* 2 upstream issue - https://github.com/golang/go/issues/29322\n* ppc64le skipped = 14\n\t* 6 broken\n\t* 1 broken - global variable symbolication\n\t* 7 not implemented\n* riscv64 skipped = 6\n\t* 1 broken - global variable symbolication\n\t* 5 not implemented\n* windows skipped = 9\n\t* 1 broken\n\t* 2 not working on windows\n\t* 6 see https://github.com/go-delve/delve/issues/2768\n* windows/arm64 skipped = 3\n\t* 2 broken - cgo stacktraces\n\t* 1 flaky\n"
  },
  {
    "path": "Documentation/cli/README.md",
    "content": "# Configuration and Command History\n\nIf `$XDG_CONFIG_HOME` is set, then configuration and command history files are located in `$XDG_CONFIG_HOME/dlv`. Otherwise, they are located in `$HOME/.config/dlv` on Linux and `$HOME/.dlv` on other systems.\n\nThe configuration file `config.yml` contains all the configurable options and their default values ([config.yml documentation](./config.md)). The command history is stored in `.dbg_history`.\n\n# Commands\n\n## Running the program\n\nCommand | Description\n--------|------------\n[call](#call) | Resumes process, injecting a function call (EXPERIMENTAL!!!)\n[continue](#continue) | Run until breakpoint or program termination.\n[next](#next) | Step over to next source line.\n[next-instruction](#next-instruction) | Single step a single cpu instruction, skipping function calls.\n[rebuild](#rebuild) | Rebuild the target executable and restarts it. It does not work if the executable was not built by delve.\n[restart](#restart) | Restart process.\n[rev](#rev) | Reverses the execution of the target program for the command specified.\n[rewind](#rewind) | Run backwards until breakpoint or start of recorded history.\n[step](#step) | Single step through program.\n[step-instruction](#step-instruction) | Single step a single cpu instruction.\n[stepout](#stepout) | Step out of the current function.\n\n\n## Manipulating breakpoints\n\nCommand | Description\n--------|------------\n[break](#break) | Sets a breakpoint.\n[breakpoints](#breakpoints) | Print out info for active breakpoints.\n[clear](#clear) | Deletes breakpoint.\n[clearall](#clearall) | Deletes multiple breakpoints.\n[condition](#condition) | Set breakpoint condition.\n[on](#on) | Executes a command when a breakpoint is hit.\n[toggle](#toggle) | Toggles on or off a breakpoint.\n[trace](#trace) | Set tracepoint.\n[watch](#watch) | Set watchpoint.\n\n\n## Viewing program variables and memory\n\nCommand | Description\n--------|------------\n[args](#args) | Print function arguments.\n[display](#display) | Print value of an expression every time the program stops.\n[examinemem](#examinemem) | Examine raw memory at the given address.\n[locals](#locals) | Print local variables.\n[print](#print) | Evaluate an expression.\n[regs](#regs) | Print contents of CPU registers.\n[set](#set) | Changes the value of a variable.\n[vars](#vars) | Print package variables.\n[whatis](#whatis) | Prints type of an expression.\n\n\n## Listing and switching between threads and goroutines\n\nCommand | Description\n--------|------------\n[goroutine](#goroutine) | Shows or changes current goroutine\n[goroutines](#goroutines) | List program goroutines.\n[thread](#thread) | Switch to the specified thread.\n[threads](#threads) | Print out info for every traced thread.\n\n\n## Viewing the call stack and selecting frames\n\nCommand | Description\n--------|------------\n[deferred](#deferred) | Executes command in the context of a deferred call.\n[down](#down) | Move the current frame down.\n[frame](#frame) | Set the current frame, or execute command on a different frame.\n[stack](#stack) | Print stack trace.\n[up](#up) | Move the current frame up.\n\n\n## Other commands\n\nCommand | Description\n--------|------------\n[check](#check) | Creates a checkpoint at the current position.\n[checkpoints](#checkpoints) | Print out info for existing checkpoints.\n[clear-checkpoint](#clear-checkpoint) | Deletes checkpoint.\n[config](#config) | Changes configuration parameters.\n[disassemble](#disassemble) | Disassembler.\n[dump](#dump) | Creates a core dump from the current process state\n[edit](#edit) | Open where you are in $DELVE_EDITOR or $EDITOR\n[exit](#exit) | Exit the debugger.\n[funcs](#funcs) | Print list of functions.\n[help](#help) | Prints the help message.\n[libraries](#libraries) | List loaded dynamic libraries.\n[list](#list) | Show source code.\n[packages](#packages) | Print list of packages.\n[source](#source) | Executes a file containing a list of delve commands\n[sources](#sources) | Print list of source files.\n[target](#target) | Manages child process debugging.\n[transcript](#transcript) | Appends command output to a file.\n[types](#types) | Print list of types\n\n## args\nPrint function arguments.\n\n\t[goroutine <n>] [frame <m>] args [-v] [<regex>]\n\nIf regex is specified only function arguments with a name matching it will be returned. If -v is specified more information about each function argument will be shown.\n\n\n## break\nSets a breakpoint.\n\n\tbreak [name] [locspec] [if <condition>]\n\nLocspec is a location specifier in the form of:\n\n  * *&lt;address> Specifies the location of memory address address. address can be specified as a decimal, hexadecimal or octal number\n  * &lt;filename>:&lt;line> Specifies the line in filename. filename can be the partial path to a file or even just the base name as long as the expression remains unambiguous.\n  * &lt;line> Specifies the line in the current file\n  * +&lt;offset> Specifies the line offset lines after the current one\n  * -&lt;offset> Specifies the line offset lines before the current one\n  * &lt;function>[:&lt;line>] Specifies the line inside function.\n      The full syntax for function is &lt;package>.(*&lt;receiver type>).&lt;function name> however the only required element is the function name,\n      everything else can be omitted as long as the expression remains unambiguous. For setting a breakpoint on an init function (ex: main.init),\n      the &lt;filename>:&lt;line> syntax should be used to break in the correct init function at the correct location.\n  * /&lt;regex>/ Specifies the location of all the functions matching regex\n\nIf locspec is omitted a breakpoint will be set on the current line.\n\nIf you would like to assign a name to the breakpoint you can do so with the form:\n\n\tbreak mybpname main.go:4\n\nFinally, you can assign a condition to the newly created breakpoint by using the 'if' postfix form, like so:\n\n\tbreak main.go:55 if i == 5\n\nAlternatively you can set a condition on a breakpoint after created by using the 'on' command.\n\nSee also: \"help on\", \"help cond\" and \"help clear\"\n\nAliases: b\n\n## breakpoints\nPrint out info for active breakpoints.\n\n\tbreakpoints [-a] [-save <filename>]\n\nSpecifying -a prints all physical breakpoint, including internal breakpoints.\nSpeciftying -save &lt;filename> saves all breakpoints to the specified file in a format that can be loaded later using the 'source' command.\n\nAliases: bp\n\n## call\nResumes process, injecting a function call (EXPERIMENTAL!!!)\n\n\tcall [-unsafe] <function call expression>\n\nCurrent limitations:\n- only pointers to stack-allocated objects can be passed as argument.\n- only some automatic type conversions are supported.\n- functions can only be called on running goroutines that are not\n  executing the runtime.\n- the current goroutine needs to have at least 256 bytes of free space on\n  the stack.\n- functions can only be called when the goroutine is stopped at a safe\n  point.\n- calling a function will resume execution of all goroutines.\n- only supported on linux's native backend.\n\n\n\n## check\nCreates a checkpoint at the current position.\n\n\tcheckpoint [note]\n\nThe \"note\" is arbitrary text that can be used to identify the checkpoint, if it is not specified it defaults to the current filename:line position.\n\nAliases: checkpoint\n\n## checkpoints\nPrint out info for existing checkpoints.\n\n\n## clear\nDeletes breakpoint.\n\n\tclear <breakpoint name or id>\n\n\n## clear-checkpoint\nDeletes checkpoint.\n\n\tclear-checkpoint <id>\n\nAliases: clearcheck\n\n## clearall\nDeletes multiple breakpoints.\n\n\tclearall [<locspec>]\n\nIf called with the locspec argument it will delete all the breakpoints matching the locspec. If locspec is omitted all breakpoints are deleted.\n\n\n## condition\nSet breakpoint condition.\n\n\tcondition <breakpoint name or id> <boolean expression>.\n\tcondition -hitcount <breakpoint name or id> <operator> <argument>.\n\tcondition -per-g-hitcount <breakpoint name or id> <operator> <argument>.\n\tcondition -clear <breakpoint name or id>.\n\nSpecifies that the breakpoint, tracepoint or watchpoint should break only if the boolean expression is true.\n\nSee [Documentation/cli/expr.md](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md) for a description of supported expressions and [Documentation/cli/cond.md](//github.com/go-delve/delve/tree/master/Documentation/cli/cond.md) for a description of how breakpoint conditions are evaluated.\n\nWith the -hitcount option a condition on the breakpoint hit count can be set, the following operators are supported\n\n\tcondition -hitcount bp > n\n\tcondition -hitcount bp >= n\n\tcondition -hitcount bp < n\n\tcondition -hitcount bp <= n\n\tcondition -hitcount bp == n\n\tcondition -hitcount bp != n\n\tcondition -hitcount bp % n\n\nThe -per-g-hitcount option works like -hitcount, but use per goroutine hitcount to compare with n.\n\nWith the -clear option a condition on the breakpoint can removed.\n\nThe '% n' form means we should stop at the breakpoint when the hitcount is a multiple of n.\n\nExamples:\n\n\tcond 2 i == 10\t\t\t\tbreakpoint 2 will stop when variable i equals 10\n\tcond name runtime.curg.goid == 5\tbreakpoint 'name' will stop only on goroutine 5\n\tcond -clear 2\t\t\t\tthe condition on breakpoint 2 will be removed\n\n\nAliases: cond\n\n## config\nChanges configuration parameters.\n\n\tconfig -list\n\nShow all configuration parameters.\n\n\tconfig -save\n\nSaves the configuration file to disk, overwriting the current configuration file.\n\n\tconfig <parameter> <value>\n\nChanges the value of simple configuration parameters.\n\nUse 'help config &lt;parameter>' for more informations on specific configuration options.\n\n\n\n## continue\nRun until breakpoint or program termination.\n\n\tcontinue [<locspec>]\n\nOptional locspec argument allows you to continue until a specific location is reached. The program will halt if a breakpoint is hit before reaching the specified location.\n\nFor example:\n\n\tcontinue main.main\n\tcontinue encoding/json.Marshal\n\n\nAliases: c\n\n## deferred\nExecutes command in the context of a deferred call.\n\n\tdeferred <n> <command>\n\nExecutes the specified command (print, args, locals) in the context of the n-th deferred call in the current frame.\n\n\n## disassemble\nDisassembler.\n\n\t[goroutine <n>] [frame <m>] disassemble [-a <start> <end>] [-l <locspec>]\n\nIf no argument is specified the function being executed in the selected stack frame will be executed.\n\n\t-a <start> <end>\tdisassembles the specified address range\n\t-l <locspec>\t\tdisassembles the specified function\n\nAliases: disass\n\n## display\nPrint value of an expression every time the program stops.\n\n\tdisplay -a [%format] <expression>\n\tdisplay -d <number>\n\nThe '-a' option adds an expression to the list of expression printed every time the program stops. The '-d' option removes the specified expression from the list.\n\nIf display is called without arguments it will print the value of all expression in the list.\n\n\n## down\nMove the current frame down.\n\n\tdown [<m>]\n\tdown [<m>] <command>\n\nMove the current frame down by &lt;m>. The second form runs the command on the given frame.\n\n\n## dump\nCreates a core dump from the current process state\n\n\tdump <output file>\n\nThe core dump is always written in ELF, even on systems (windows, macOS) where this is not customary. For environments other than linux/amd64 threads and registers are dumped in a format that only Delve can read back.\n\n\n## edit\nOpen where you are in $DELVE_EDITOR or $EDITOR\n\n\tedit [locspec]\n\nIf locspec is omitted edit will open the current source file in the editor, otherwise it will open the specified location.\n\nAliases: ed\n\n## examinemem\nExamine raw memory at the given address.\n\nExamine memory:\n\n\texaminemem [-fmt <format>] [-count|-len <count>] [-size <size>] <address>\n\texaminemem [-fmt <format>] [-count|-len <count>] [-size <size>] -x <expression>\n\nFormat represents the data format and the value is one of this list (default hex): bin(binary), oct(octal), dec(decimal), hex(hexadecimal) and raw.\nLength is the number of bytes (default 1) and must be less than or equal to 1000.\nAddress is the memory location of the target to examine. Please note '-len' is deprecated by '-count and -size'.\nExpression can be an integer expression or pointer value of the memory location to examine.\n\nFor example:\n\n    x -fmt hex -count 20 -size 1 0xc00008af38\n    x -fmt hex -count 20 -size 1 -x 0xc00008af38 + 8\n    x -fmt hex -count 20 -size 1 -x &myVar\n    x -fmt hex -count 20 -size 1 -x myPtrVar\n\nAliases: x\n\n## exit\nExit the debugger.\n\n\texit [-c]\n\nWhen connected to a headless instance started with the --accept-multiclient, pass -c to resume the execution of the target process before disconnecting.\n\nAliases: quit q\n\n## frame\nSet the current frame, or execute command on a different frame.\n\n\tframe <m>\n\tframe <m> <command>\n\nThe first form sets frame used by subsequent commands such as \"print\" or \"set\".\nThe second form runs the command on the given frame.\n\n\n## funcs\nPrint list of functions.\n\n\tfuncs [<regex>]\n\nIf regex is specified only the functions matching it will be returned.\n\n\n## goroutine\nShows or changes current goroutine\n\n\tgoroutine\n\tgoroutine <id>\n\tgoroutine <id> <command>\n\nCalled without arguments it will show information about the current goroutine.\nCalled with a single argument it will switch to the specified goroutine.\nCalled with more arguments it will execute a command on the specified goroutine.\n\nAliases: gr\n\n## goroutines\nList program goroutines.\n\n\tgoroutines [-u|-r|-g|-s] [-t [depth]] [-l] [-with loc expr] [-without loc expr] [-group argument] [-chan expr] [-exec command]\n\nPrint out info for every goroutine. The flag controls what information is shown along with each goroutine:\n\n\t-u\tdisplays location of topmost stackframe in user code (default)\n\t-r\tdisplays location of topmost stackframe (including frames inside private runtime functions)\n\t-g\tdisplays location of go instruction that created the goroutine\n\t-s\tdisplays location of the start function\n\t-t\tdisplays goroutine's stacktrace (an optional depth value can be specified, default: 10)\n\t-l\tdisplays goroutine's labels\n\nIf no flag is specified the default is -u, i.e. the first frame within the first 30 frames that is not executing a runtime private function.\n\nFILTERING\n\nIf -with or -without are specified only goroutines that match the given condition are returned.\n\nTo only display goroutines where the specified location contains (or does not contain, for -without and -wo) expr as a substring, use:\n\n\tgoroutines -with (userloc|curloc|goloc|startloc) expr\n\tgoroutines -w (userloc|curloc|goloc|startloc) expr\n\tgoroutines -without (userloc|curloc|goloc|startloc) expr\n\tgoroutines -wo (userloc|curloc|goloc|startloc) expr\n\n\tWhere:\n\tuserloc: filter by the location of the topmost stackframe in user code\n\tcurloc: filter by the location of the topmost stackframe (including frames inside private runtime functions)\n\tgoloc: filter by the location of the go instruction that created the goroutine\n\tstartloc: filter by the location of the start function\n\nTo only display goroutines that have (or do not have) the specified label key and value, use:\n\n\tgoroutines -with label key=value\n\tgoroutines -without label key=value\n\nTo only display goroutines that have (or do not have) the specified label key, use:\n\n\tgoroutines -with label key\n\tgoroutines -without label key\n\nTo only display goroutines that are running (or are not running) on a OS thread, use:\n\n\n\tgoroutines -with running\n\tgoroutines -without running\n\nTo only display user (or runtime) goroutines, use:\n\n\tgoroutines -with user\n\tgoroutines -without user\n\nCHANNELS\n\nTo only show goroutines waiting to send to or receive from a specific channel use:\n\n\tgoroutines -chan expr\n\nNote that 'expr' must not contain spaces.\n\nGROUPING\n\n\tgoroutines -group (userloc|curloc|goloc|startloc|running|user)\n\n\tWhere:\n\tuserloc: groups goroutines by the location of the topmost stackframe in user code\n\tcurloc: groups goroutines by the location of the topmost stackframe\n\tgoloc: groups goroutines by the location of the go instruction that created the goroutine\n\tstartloc: groups goroutines by the location of the start function\n\trunning: groups goroutines by whether they are running or not\n\tuser: groups goroutines by whether they are user or runtime goroutines\n\n\nGroups goroutines by the given location, running status or user classification, up to 5 goroutines per group will be displayed as well as the total number of goroutines in the group.\n\n\tgoroutines -group label key\n\nGroups goroutines by the value of the label with the specified key.\n\nEXEC\n\n\tgoroutines -exec <command>\n\nRuns the command on every goroutine.\n\n\nAliases: grs\n\n## help\nPrints the help message.\n\n\thelp [command]\n\nType \"help\" followed by the name of a command for more information about it.\n\nAliases: h\n\n## libraries\nList loaded dynamic libraries.\n\n\tlibraries [-d N]\n\nIf used with the -d option it will re-attempt to download the debug symbols for library N, using debuginfod-find.\n\n\n## list\nShow source code.\n\n\t[goroutine <n>] [frame <m>] list [<locspec>]\n\nShow source around current point or provided locspec.\n\nFor example:\n\n\tframe 1 list 69\n\tlist testvariables.go:10000\n\tlist main.main:30\n\tlist 40\n\nAliases: ls l\n\n## locals\nPrint local variables.\n\n\t[goroutine <n>] [frame <m>] locals [-v] [<regex>]\n\nThe name of variables that are shadowed in the current scope will be shown in parenthesis.\n\nIf regex is specified only local variables with a name matching it will be returned. If -v is specified more information about each local variable will be shown.\n\n\n## next\nStep over to next source line.\n\n\tnext [count]\n\nOptional [count] argument allows you to skip multiple lines.\n\n\nAliases: n\n\n## next-instruction\nSingle step a single cpu instruction, skipping function calls.\n\nAliases: ni nexti\n\n## on\nExecutes a command when a breakpoint is hit.\n\n\ton <breakpoint name or id> <command>\n\ton <breakpoint name or id> -edit\n\n\nSupported commands: print, stack, goroutine, trace and cond.\n\nAll custom starlark commands can also be used with the 'on' prefix. See [Documentation/cli/starlark.md](//github.com/go-delve/delve/tree/master/Documentation/cli/starlark.md) for more information.\n\nTo convert a breakpoint into a tracepoint use:\n\n\ton <breakpoint name or id> trace\n\nThe command 'on &lt;bp> cond &lt;cond-arguments>' is equivalent to 'cond &lt;bp> &lt;cond-arguments>'.\n\nThe command 'on x -edit' can be used to edit the list of commands executed when the breakpoint is hit.\n\n\n## packages\nPrint list of packages.\n\n\tpackages [<regex>]\n\nIf regex is specified only the packages matching it will be returned.\n\n\n## print\nEvaluate an expression.\n\n\t[goroutine <n>] [frame <m>] print [%format] <expression>\n\nSee [Documentation/cli/expr.md](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md) for a description of supported expressions.\n\nThe optional format argument is a format specifier, like the ones used by the fmt package. For example \"print %x v\" will print v as an hexadecimal number.\n\nAliases: p\n\n## rebuild\nRebuild the target executable and restarts it. It does not work if the executable was not built by delve.\n\n\n## regs\nPrint contents of CPU registers.\n\n\tregs [-a]\n\nArgument -a shows more registers. Individual registers can also be displayed by 'print' and 'display'. See [Documentation/cli/expr.md](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md).\n\n\n## restart\nRestart process.\n\nFor recorded targets the command takes the following forms:\n\n\trestart\t\t\t\t\tresets to the start of the recording\n\trestart [checkpoint]\t\t\tresets the recording to the given checkpoint\n\trestart -r [newargv...]\t[redirects...]\tre-records the target process\n\nFor live targets the command takes the following forms:\n\n\trestart [newargv...] [redirects...]\trestarts the process\n\nIf newargv is omitted the process is restarted (or re-recorded) with the same argument vector.\nIf -noargs is specified instead, the argument vector is cleared.\n\nA list of file redirections can be specified after the new argument list to override the redirections defined using the '--redirect' command line option. A syntax similar to Unix shells is used:\n\n\t<input.txt\tredirects the standard input of the target process from input.txt\n\t>output.txt\tredirects the standard output of the target process to output.txt\n\t2>error.txt\tredirects the standard error of the target process to error.txt\n\n\nAliases: r\n\n## rev\nReverses the execution of the target program for the command specified.\nCurrently, rev next, step, step-instruction and stepout commands are supported.\n\n\n## rewind\nRun backwards until breakpoint or start of recorded history.\n\nAliases: rw\n\n## set\nChanges the value of a variable.\n\n\t[goroutine <n>] [frame <m>] set <variable> = <value>\n\nSee [Documentation/cli/expr.md](//github.com/go-delve/delve/tree/master/Documentation/cli/expr.md) for a description of supported expressions. Only numerical variables and pointers can be changed.\n\n\n## source\nExecutes a file containing a list of delve commands\n\n\tsource <path>\n\nIf path ends with the .star extension it will be interpreted as a starlark script. See [Documentation/cli/starlark.md](//github.com/go-delve/delve/tree/master/Documentation/cli/starlark.md) for the syntax.\n\nIf path is a single '-' character an interactive starlark interpreter will start instead. Type 'exit' to exit.\n\n\n## sources\nPrint list of source files.\n\n\tsources [<regex>]\n\nIf regex is specified only the source files matching it will be returned.\n\n\n## stack\nPrint stack trace.\n\n\t[goroutine <n>] [frame <m>] stack [<depth>] [-full] [-offsets] [-defer] [-a <n>] [-adepth <depth>] [-mode <mode>]\n\n\t-full\t\tevery stackframe is decorated with the value of its local variables and arguments.\n\t-offsets\tprints frame offset of each frame.\n\t-defer\t\tprints deferred function call stack for each frame.\n\t-a <n>\t\tprints stacktrace of n ancestors of the selected goroutine (target process must have tracebackancestors enabled)\n\t-adepth <depth>\tconfigures depth of ancestor stacktrace\n\t-mode <mode>\tspecifies the stacktrace mode, possible values are:\n\t\t\tnormal\t- attempts to automatically switch between cgo frames and go frames\n\t\t\tsimple\t- disables automatic switch between cgo and go\n\t\t\tfromg\t- starts from the registers stored in the runtime.g struct\n\n\nAliases: bt\n\n## step\nSingle step through program.\n\nAliases: s\n\n## step-instruction\nSingle step a single cpu instruction.\n\nAliases: si stepi\n\n## stepout\nStep out of the current function.\n\nAliases: so\n\n## target\nManages child process debugging.\n\n\ttarget follow-exec [-on [regex]] [-off]\n\nEnables or disables follow exec mode. When follow exec mode Delve will automatically attach to new child processes executed by the target process. An optional regular expression can be passed to 'target follow-exec', only child processes with a command line matching the regular expression will be followed.\n\n\ttarget list\n\nList currently attached processes.\n\n\ttarget switch [pid]\n\nSwitches to the specified process.\n\n\n## thread\nSwitch to the specified thread.\n\n\tthread <id>\n\nAliases: tr\n\n## threads\nPrint out info for every traced thread.\n\n\n## toggle\nToggles on or off a breakpoint.\n\n\ttoggle <breakpoint name or id>\n\n\n## trace\nSet tracepoint.\n\n\ttrace [name] [locspec]\n\nA tracepoint is a breakpoint that does not stop the execution of the program, instead when the tracepoint is hit a notification is displayed. See [Documentation/cli/locspec.md](//github.com/go-delve/delve/tree/master/Documentation/cli/locspec.md) for the syntax of locspec. If locspec is omitted a tracepoint will be set on the current line.\n\nSee also: \"help on\", \"help cond\" and \"help clear\"\n\nAliases: t\n\n## transcript\nAppends command output to a file.\n\n\ttranscript [-t] [-x] <output file>\n\ttranscript -off\n\nOutput of Delve's command is appended to the specified output file. If '-t' is specified and the output file exists it is truncated. If '-x' is specified output to stdout is suppressed instead.\n\nUsing the -off option disables the transcript.\n\n\n## types\nPrint list of types\n\n\ttypes [<regex>]\n\nIf regex is specified only the types matching it will be returned.\n\n\n## up\nMove the current frame up.\n\n\tup [<m>]\n\tup [<m>] <command>\n\nMove the current frame up by &lt;m>. The second form runs the command on the given frame.\n\n\n## vars\nPrint package variables.\n\n\tvars [-v] [<regex>]\n\nIf regex is specified only package variables with a name matching it will be returned. If -v is specified more information about each package variable will be shown.\n\n\n## watch\nSet watchpoint.\n\n\twatch [-r|-w|-rw] <expr>\n\n\t-r\tstops when the memory location is read\n\t-w\tstops when the memory location is written\n\t-rw\tstops when the memory location is read or written\n\nThe memory location is specified with the same expression language used by 'print', for example:\n\n\twatch v\n\twatch -w *(*int)(0x1400007c018)\n\nwill watch the address of variable 'v' and writes to an int at addr '0x1400007c018'.\n\nNote that writes that do not change the value of the watched memory address might not be reported.\n\nSee also: \"help print\".\n\n\n## whatis\nPrints type of an expression.\n\n\twhatis <expression>\n\n\n"
  },
  {
    "path": "Documentation/cli/cond.md",
    "content": "# Breakpoint conditions\n\nBreakpoints have two conditions:\n\n* The normal condition, which is specified using the command `cond <breakpoint> <expr>` (or by setting the Cond field when amending a breakpoint via the API), is any [expression](expr.md) which evaluates to true or false.\n* The hitcount condition, which is specified `cond <breakpoint> -hitcount <operator> <number>` (or by setting the HitCond field when amending a breakpoint via the API), is a constraint on the number of times the breakpoint has been hit.\n\nWhen a breakpoint location is encountered during the execution of the program, the debugger will:\n\n* Evaluate the normal condition\n* Stop if there is an error while evaluating the normal condition\n* If the normal condition evaluates to true the hit count is incremented\n* Evaluate the hitcount condition\n* If the hitcount condition is also satisfied stop the execution at the breakpoint\n\n"
  },
  {
    "path": "Documentation/cli/config.md",
    "content": "# Configuration\n\nThe configuration file `config.yml` is found in `$XDG_CONFIG_HOME/dlv` if `$XDG_CONFIG_HOME` is set, if it isn't set it will be in `$HOME/.config/dlv` on Linux and `$HOME/.dlv` in other operating systems.\n\nThe following options are available:\n\nOption | Description\n-------|------------\naliases | Map fo command aliases `command: [ \"alias1\", \"alias2\" ]`.\ndebug-info-directories | List of directories to use when searching for separate debug info files.\ndisassemble-flavor | Disassembler syntax. Can be 'intel', 'gun' or 'go'.\nmax-array-values | Maximum number of array values when printing variables.\nmax-string-len | Maximum string length used when printing variables.\nmax-variable-recurse | Maximum number of nested struct members when printing variables.\nposition | Controls how the current position in the program is displayed (source | disassembly | default).\nprompt | Controls Delve's command line prompt. Use `help config prompt` for documentation on the available escape codes.\nprompt-color | Prompt color, as a terminal escape sequence.\nshow-location-expr | If true the 'whatis' command will print the DWARF location expression of its argument.\nsource-list-arrow-color | Source list arrow color, as a terminal escape sequence.\nsource-list-comment-color | Source list comment color, as a terminal escape sequence.\nsource-list-keyword-color | Source list keyword color, as a terminal escape sequence.\nsource-list-line-color | Source list line-number color, as a terminal escape sequence.\nsource-list-line-count | Number of lines to list above and below the cursor when printing source code.\nsource-list-number-color | Source list number color, as a terminal escape sequence.\nsource-list-string-color | Source list string color, as a terminal escape sequence.\nsource-list-tab-color | Source list tab color, as a terminal escape sequence.\nstacktrace-basename-color | Color for the base name in paths in the stack trace, as a terminal escape sequence.\nstacktrace-function-color | Color for function names in the stack trace, as a terminal escape sequence.\nsubstitute-path | Path substitution rules, a list of `{ from: path, to: path }` pairs.\ntab | Changes what is printed when a tab character is encountered in source code.\ntrace-show-timestamp | If true timestamps are shown in the trace output.\n\n"
  },
  {
    "path": "Documentation/cli/expr.md",
    "content": "# Expressions\n\nDelve can evaluate a subset of go expression language, specifically the following features are supported:\n\n- All (binary and unary) on basic types except <-, ++ and --\n- Comparison operators on any type\n- Type casts between numeric types\n- Type casts of integer constants into any pointer type and vice versa\n- Type casts between string, []byte and []rune\n- Struct member access (i.e. `somevar.memberfield`)\n- Slicing and indexing operators on arrays, slices and strings\n- Map access\n- Pointer dereference\n- Calls to builtin functions: `cap`, `len`, `complex`, `imag` and `real`\n- Type assertion on interface variables (i.e. `somevar.(concretetype)`)\n\n# Nesting limit\n\nWhen delve evaluates a memory address it will automatically return the value of nested struct members, array and slice items and dereference pointers.\nHowever to limit the size of the output evaluation will be limited to two levels deep. Beyond two levels only the address of the item will be returned, for example:\n\n```\n(dlv) print c1\nmain.cstruct {\n\tpb: *struct main.bstruct {\n\t\ta: (*main.astruct)(0xc82000a430),\n\t},\n\tsa: []*main.astruct len: 3, cap: 3, [\n\t\t*(*main.astruct)(0xc82000a440),\n\t\t*(*main.astruct)(0xc82000a450),\n\t\t*(*main.astruct)(0xc82000a460),\n\t],\n}\n```\n\nTo see the contents of the first item of the slice `c1.sa` there are two possibilities:\n\n1. Execute `print c1.sa[0]`\n2. Use the address directly, executing: `print *(*main.astruct)(0xc82000a440)`\n\n# Elements limit\n\nFor arrays, slices, strings and maps delve will only return a maximum of 64 elements at a time:\n\n```\n(dlv) print ba\n[]int len: 200, cap: 200, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+136 more]\n```\n\nTo see more values use the slice operator:\n\n```\n(dlv) print ba[64:]\n[]int len: 136, cap: 136, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+72 more]\n```\n\nFor this purpose delve allows use of the slice operator on maps, `m[64:]` will return the key/value pairs of map `m` that follow the first 64 key/value pairs (note that delve iterates over maps using a fixed ordering).\n\nThese limits can be configured with `max-string-len` and `max-array-values`. See [config](https://github.com/go-delve/delve/tree/master/Documentation/cli#config) for usage.\n\n# Interfaces\n\nInterfaces will be printed using the following syntax:\n```\n<interface name>(<concrete type>) <value>\n```\n\nFor example:\n\n```\n(dlv) p iface1\n(dlv) p iface1\ninterface {}(*struct main.astruct) *{A: 1, B: 2}\n(dlv) p iface2\ninterface {}(*struct string) *\"test\"\n(dlv) p err1\nerror(*struct main.astruct) *{A: 1, B: 2}\n```\n\nTo use the contents of an interface variable use a type assertion:\n\n```\n(dlv) p iface1.(*main.astruct).B\n2\n```\n\nOr just use the special `.(data)` type assertion:\n\n```\n(dlv) p iface1.(data).B\n2\n```\n\nIf the contents of the interface variable are a struct or a pointer to struct the fields can also be accessed directly:\n\n```\n(dlv) p iface1.B\n2\n```\n\n# Specifying package paths\n\nPackages with the same name can be disambiguated by using the full package path. For example, if the application imports two packages, `some/package` and `some/other/package`, both defining a variable `A`, the two variables can be accessed using this syntax:\n\n```\n(dlv) p \"some/package\".A\n(dlv) p \"some/other/package\".A\n```\n\n# Pointers in Cgo\n\nChar pointers are always treated as NUL terminated strings, both indexing and the slice operator can be applied to them. Other C pointers can also be used similarly to Go slices, with indexing and the slice operator. In both of these cases it is up to the user to respect array bounds.\n\n# Special Features\n\n## Special Variables\n\nDelve defines two special variables:\n\n* `runtime.curg` evaluates to the 'g' struct for the current goroutine, in particular `runtime.curg.goid` is the goroutine id of the current goroutine.\n* `runtime.frameoff` is the offset of the frame's base address from the bottom of the stack.\n* `delve.bphitcount[X]` is the total hitcount for breakpoint X, which can be either an ID or the breakpoint name as a string.\n\n## Access to variables from previous frames\n\nVariables from previous frames (i.e. stack frames other than the top of the stack) can be referred using the following notation `runtime.frame(n).name` which is the variable called 'name' on the n-th frame from the top of the stack.\n\n## CPU Registers\n\nThe name of a CPU register, in all uppercase letters, will resolve to the value of that CPU register in the current frame. For example on AMD64 the expression `RAX` will evaluate to the value of the RAX register. \n\nRegister names are shadowed by both local and global variables, so if a local variable called \"RAX\" exists, the `RAX` expression will evaluate to it instead of the CPU register.\n\nRegister names can optionally be prefixed by any number of underscore characters, so `RAX`, `_RAX`, `__RAX`, etc... can all be used to refer to the same RAX register and, in absence of shadowing from other variables, will all evaluate to the same value.\n\nRegisters of 64bits or less are returned as uint64 variables. Larger registers are returned as strings of hexadecimal digits.\n\nBecause many architectures have SIMD registers that can be used by the application in different ways the following syntax is also available:\n\n* `REGNAME.intN` returns the register REGNAME as an array of intN elements.\n* `REGNAME.uintN` returns the register REGNAME as an array of uintN elements.\n* `REGNAME.floatN` returns the register REGNAME as an array of floatN elements.\n\nIn all cases N must be a power of 2.\n\n"
  },
  {
    "path": "Documentation/cli/getting_started.md",
    "content": "# Getting Started\n\nDelve aims to be a very simple and powerful tool, but can be confusing if you're\nnot used to using a source level debugger in a compiled language. This document\nwill provide all the information you need to get started debugging your Go\nprograms.\n\n## Debugging 'main' packages\n\nThe first CLI subcommand we will explore is `debug`. This subcommand can be run\nwithout arguments if you're in the same directory as your `main` package,\notherwise it optionally accepts a package path.\n\nFor example given this project layout:\n\n```\ngithub.com/me/foo\n├── cmd\n│   └── foo\n│       └── main.go\n└── pkg\n    └── baz\n        ├── bar.go\n        └── bar_test.go\n```\n\nIf you are in the directory `github.com/me/foo/cmd/foo` you can simply run `dlv debug`\nfrom the command line. From anywhere else, say the project root, you can simply\nprovide the package: `dlv debug github.com/me/foo/cmd/foo`. To pass flags to your program \nseparate them with `--`: `dlv debug github.com/me/foo/cmd/foo -- -arg1 value`.\n\nInvoking that command will cause Delve to compile the program in a way most\nsuitable for debugging, then it will execute and attach to the program and begin\na debug session. Now, when the debug session has first started you are at the\nvery beginning of the program's initialization. To get to someplace more useful\nyou're going to want to set a breakpoint or two and continue execution to that\npoint.\n\nFor example, to continue execution to your program's `main` function:\n\n```\n$ dlv debug github.com/me/foo/cmd/foo\nType 'help' for list of commands.\n(dlv) break main.main\nBreakpoint 1 set at 0x49ecf3 for main.main() ./test.go:5\n(dlv) continue\n> main.main() ./test.go:5 (hits goroutine(1):1 total:1) (PC: 0x49ecf3)\n     1:\tpackage main\n     2:\t\n     3:\timport \"fmt\"\n     4:\t\n=>   5:\tfunc main() {\n     6:\t\tfmt.Println(\"delve test\")\n     7:\t}\n(dlv) \n```\n\n## Debugging tests\n\nGiven the same directory structure as above you can debug your code by executing\nyour test suite. For this you can use the `dlv test` subcommand, which takes the\nsame optional package path as `dlv debug`, and will also build the current\npackage if not given any argument.\n\n```\n$ dlv test github.com/me/foo/pkg/baz\nType 'help' for list of commands.\n(dlv) funcs test.Test*\n/home/me/go/src/github.com/me/foo/pkg/baz/test.TestHi\n(dlv) break TestHi\nBreakpoint 1 set at 0x536513 for /home/me/go/src/github.com/me/foo/pkg/baz/test.TestHi() ./test_test.go:5\n(dlv) continue\n> /home/me/go/src/github.com/me/foo/pkg/baz/test.TestHi() ./bar_test.go:5 (hits goroutine(5):1 total:1) (PC: 0x536513)\n     1:\tpackage baz\n     2:\t\n     3:\timport \"testing\"\n     4:\t\n=>   5:\tfunc TestHi(t *testing.T) {\n     6:\t\tt.Fatal(\"implement me!\")\n     7:\t}\n(dlv) \n```\n\nAs you can see, we began debugging the test binary, found our test function via\nthe `funcs` command which takes a regexp to filter the list of functions, set a\nbreakpoint and then continued execution until we hit that breakpoint.\n\nFor more information on subcommands you can use, type `dlv help`, and once in a\ndebug session you can see all of the commands available to you by typing `help`\nat any time.\n"
  },
  {
    "path": "Documentation/cli/locspec.md",
    "content": "# Location Specifiers\n\nSeveral delve commands take a program location as an argument, the syntax accepted by this commands is:\n\n* `*<address>` Specifies the location of memory address *address*. *address* can be specified as a decimal, hexadecimal or octal number\n* `<filename>:<line>` Specifies the line *line* in *filename*. *filename* can be the partial path to a file or even just the base name as long as the expression remains unambiguous.\n* `<line>` Specifies the line *line* in the current file\n* `+<offset>` Specifies the line *offset* lines after the current one\n* `-<offset>` Specifies the line *offset* lines before the current one\n* `<function>[:<line>]` Specifies the line *line* inside *function*. The full syntax for *function* is `<package>.(*<receiver type>).<function name>` however the only required element is the function name, everything else can be omitted as long as the expression remains unambiguous. For setting a breakpoint on an init function (ex: main.init), the `<filename>:<line>` syntax should be used to break in the correct init function at the correct location.\n\n* `/<regex>/` Specifies the location of all the functions matching *regex*\n"
  },
  {
    "path": "Documentation/cli/starlark.md",
    "content": "# Introduction\n\nPassing a file with the .star extension to the `source` command will cause delve to interpret it as a starlark script.\n\nStarlark is a dialect of python, a [specification of its syntax can be found here](https://github.com/google/starlark-go/blob/master/doc/spec.md).\n\nIn addition to the normal starlark built-ins delve defines [a number of global functions](#Starlark-built-ins) that can be used to interact with the debugger.\n\nAfter the file has been evaluated delve will bind any function starting with `command_` to a command-line command: for example `command_goroutines_wait_reason` will be bound to `goroutines_wait_reason`. \n\nThen if a function named `main` exists it will be executed.\n\nGlobal functions with a name that begins with a capital letter will be available to other scripts.\n\n# Starlark built-ins\n\n<!-- BEGIN MAPPING TABLE -->\nFunction | API Call\n---------|---------\namend_breakpoint(Breakpoint) | Equivalent to API call [AmendBreakpoint](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.AmendBreakpoint)\nancestors(GoroutineID, NumAncestors, Depth) | Equivalent to API call [Ancestors](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Ancestors)\nattached_to_existing_process() | Equivalent to API call [AttachedToExistingProcess](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.AttachedToExistingProcess)\nbuild_id() | Equivalent to API call [BuildID](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.BuildID)\ncancel_next() | Equivalent to API call [CancelNext](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.CancelNext)\ncheckpoint(Where) | Equivalent to API call [Checkpoint](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Checkpoint)\nclear_breakpoint(Id, Name) | Equivalent to API call [ClearBreakpoint](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ClearBreakpoint)\nclear_checkpoint(ID) | Equivalent to API call [ClearCheckpoint](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ClearCheckpoint)\nraw_command(Name, ThreadID, GoroutineID, ReturnInfoLoadConfig, Expr, WithEvents, UnsafeCall) | Equivalent to API call [Command](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Command)\ncreate_breakpoint(Breakpoint, LocExpr, SubstitutePathRules, Suspended) | Equivalent to API call [CreateBreakpoint](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.CreateBreakpoint)\ncreate_ebpf_tracepoint(FunctionName) | Equivalent to API call [CreateEBPFTracepoint](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.CreateEBPFTracepoint)\ncreate_watchpoint(Scope, Expr, Type) | Equivalent to API call [CreateWatchpoint](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.CreateWatchpoint)\ndebug_info_directories(Set, List) | Equivalent to API call [DebugInfoDirectories](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.DebugInfoDirectories)\ndetach(Kill) | Equivalent to API call [Detach](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Detach)\ndisassemble(Scope, StartPC, EndPC, Flavour) | Equivalent to API call [Disassemble](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Disassemble)\ndump_cancel() | Equivalent to API call [DumpCancel](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.DumpCancel)\ndump_start(Destination) | Equivalent to API call [DumpStart](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.DumpStart)\ndump_wait(Wait) | Equivalent to API call [DumpWait](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.DumpWait)\neval(Scope, Expr, Cfg) | Equivalent to API call [Eval](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Eval)\nexamine_memory(Address, Length) | Equivalent to API call [ExamineMemory](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ExamineMemory)\nfind_location(Scope, Loc, IncludeNonExecutableLines, SubstitutePathRules) | Equivalent to API call [FindLocation](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.FindLocation)\nfollow_exec(Enable, Regex) | Equivalent to API call [FollowExec](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.FollowExec)\nfollow_exec_enabled() | Equivalent to API call [FollowExecEnabled](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.FollowExecEnabled)\nfunction_return_locations(FnName) | Equivalent to API call [FunctionReturnLocations](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.FunctionReturnLocations)\nget_breakpoint(Id, Name) | Equivalent to API call [GetBreakpoint](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.GetBreakpoint)\nget_buffered_tracepoints() | Equivalent to API call [GetBufferedTracepoints](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.GetBufferedTracepoints)\nget_thread(Id) | Equivalent to API call [GetThread](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.GetThread)\nguess_substitute_path(Args) | Equivalent to API call [GuessSubstitutePath](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.GuessSubstitutePath)\nis_multiclient() | Equivalent to API call [IsMulticlient](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.IsMulticlient)\nlast_modified() | Equivalent to API call [LastModified](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.LastModified)\nbreakpoints(All) | Equivalent to API call [ListBreakpoints](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListBreakpoints)\ncheckpoints() | Equivalent to API call [ListCheckpoints](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListCheckpoints)\ndynamic_libraries() | Equivalent to API call [ListDynamicLibraries](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListDynamicLibraries)\nfunction_args(Scope, Cfg) | Equivalent to API call [ListFunctionArgs](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListFunctionArgs)\nfunctions(Filter, FollowCalls) | Equivalent to API call [ListFunctions](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListFunctions)\ngoroutines(Start, Count, Filters, GoroutineGroupingOptions, EvalScope) | Equivalent to API call [ListGoroutines](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListGoroutines)\nlocal_vars(Scope, Cfg) | Equivalent to API call [ListLocalVars](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListLocalVars)\npackage_vars(Filter, Cfg) | Equivalent to API call [ListPackageVars](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListPackageVars)\npackages_build_info(IncludeFiles, Filter) | Equivalent to API call [ListPackagesBuildInfo](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListPackagesBuildInfo)\nregisters(ThreadID, IncludeFp, Scope) | Equivalent to API call [ListRegisters](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListRegisters)\nsources(Filter) | Equivalent to API call [ListSources](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListSources)\ntargets() | Equivalent to API call [ListTargets](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListTargets)\nthreads() | Equivalent to API call [ListThreads](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListThreads)\ntypes(Filter) | Equivalent to API call [ListTypes](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ListTypes)\nprocess_pid() | Equivalent to API call [ProcessPid](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ProcessPid)\nrecorded() | Equivalent to API call [Recorded](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Recorded)\nrestart(Position, ResetArgs, NewArgs, Rerecord, Rebuild, NewRedirects) | Equivalent to API call [Restart](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Restart)\nset_expr(Scope, Symbol, Value) | Equivalent to API call [Set](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Set)\nstacktrace(Id, Depth, Full, Defers, Opts, Cfg, Skip) | Equivalent to API call [Stacktrace](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Stacktrace)\nstate(NonBlocking) | Equivalent to API call [State](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.State)\ntoggle_breakpoint(Id, Name) | Equivalent to API call [ToggleBreakpoint](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.ToggleBreakpoint)\ndlv_command(command) | Executes the specified command as if typed at the dlv_prompt\nread_file(path) | Reads the file as a string\nwrite_file(path, contents) | Writes string to a file\ncur_scope() | Returns the current evaluation scope\ndefault_load_config() | Returns the current default load configuration\n<!-- END MAPPING TABLE -->\n\nIn addition to these built-ins, the [time](https://pkg.go.dev/go.starlark.net/lib/time#pkg-variables) library from the starlark-go project is also available to scripts.\n\n## Should I use raw_command or dlv_command?\n\nThere are two ways to resume the execution of the target program:\n\n\traw_command(\"continue\")\n\tdlv_command(\"continue\")\n\nThe first one maps to the API call [Command](https://pkg.go.dev/github.com/go-delve/delve/service/rpc2#RPCServer.Command). As such all the caveats explained in the [Client HowTo](../api/ClientHowto.md).\n\nThe latter is equivalent to typing `continue` to the `(dlv)` command line and should do what you expect.\n\nIn general `dlv_command(\"continue\")` should be preferred, unless the behavior you wish to produces diverges significantly from that of the command line's `continue`.\n\n# Creating new commands\n\nAny global function with a name starting with `command_` will be made available as a command line command. If the function has a single argument named `args` all arguments passed on the command line will be passed to the function as a single string. \n\nOtherwise arguments passed on the command line are interpreted as starlark expressions. See the [expression arguments](#expression-arguments) example. \n\nIf the command function has a doc string it will be used as a help message.\n\n## Using custom commands with the `on` prefix\n\nAll custom starlark commands can be used with the `on` command (see `help on`) to execute when a breakpoint is hit:\n\n```python\ndef command_my_trace(args):\n\t\"\"\"Custom trace command that executes when a breakpoint is hit.\"\"\"\n\tprint(\"Tracing:\", args)\n```\n\nYou can use this command like this:\n\n```\n(dlv) break main.go:10\n(dlv) on 1 my_trace\n```\n\n# Working with variables\n\nVariables of the target program can be accessed using `local_vars`, `function_args` or the `eval` functions. Each variable will be returned as a [Variable](https://pkg.go.dev/github.com/go-delve/delve/service/api#Variable) struct, with one special field: `Value`.\n\nAs a convenience a special global object exists, called `tgt`: evaluating `tgt.varname` is equivalent to evaluating `eval(None, \"varname\").Variable.Value`.\n\n## Variable.Value\n\nThe `Value` field will return the value of the target variable converted to a starlark value:\n\n* integers, floating point numbers and strings are represented by equivalent starlark values\n* structs are represented as starlark dictionaries\n* slices and arrays are represented by starlark lists\n* maps are represented by starlark dicts\n* pointers and interfaces are represented by a one-element starlark list containing the value they point to\n\nFor example, given this variable in the target program:\n\n```go\ntype astruct struct {\n\tA int\n\tB int\n}\n\ns2 := []astruct{{1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}, {11, 12}, {13, 14}, {15, 16}}\n```\n\nThe following is possible:\n\n```\n>>> s2 = eval(None, \"s2\").Variable\n>>> s2.Value[0]                                     # access of a slice item by index\nmain.astruct {A: 1, B: 2}\n>>> a = s2.Value[1]\n>>> a.Value.A                                       # access to a struct field\n3\n>>> a.Value.A + 10                            # arithmetic on the value of s2[1].X\n13\n>>> a.Value[\"B\"]                                    # access to a struct field, using dictionary syntax\n4\n```\n\nFor more examples see the [linked list example](#Print-all-elements-of-a-linked-list) below.\n\n# Examples\n\n## Listing goroutines and making custom commands\n\nCreate a `goroutine_start_line` command that prints the starting line of each goroutine, sets `gsl` as an alias:\n\n```python\ndef command_goroutine_start_line(args):\n\tgs = goroutines().Goroutines\n\tfor g in gs:\n\t\tline = read_file(g.StartLoc.File).splitlines()[g.StartLoc.Line-1].strip()\n\t\tprint(g.ID, \"\\t\", g.StartLoc.File + \":\" + str(g.StartLoc.Line), \"\\t\", line)\n\ndef main():\n\tdlv_command(\"config alias goroutine_start_line gsl\")\n```\n\nUse it like this:\n\n```\n(dlv) source goroutine_start_line.star\n(dlv) goroutine_start_line\n1 \t /usr/local/go/src/runtime/proc.go:110 \t func main() {\n2 \t /usr/local/go/src/runtime/proc.go:242 \t func forcegchelper() {\n17 \t /usr/local/go/src/runtime/mgcsweep.go:64 \t func bgsweep(c chan int) {\n18 \t /usr/local/go/src/runtime/mfinal.go:161 \t func runfinq() {\n(dlv) gsl\n1 \t /usr/local/go/src/runtime/proc.go:110 \t func main() {\n2 \t /usr/local/go/src/runtime/proc.go:242 \t func forcegchelper() {\n17 \t /usr/local/go/src/runtime/mgcsweep.go:64 \t func bgsweep(c chan int) {\n18 \t /usr/local/go/src/runtime/mfinal.go:161 \t func runfinq() {\n```\n\n## Expression arguments\n\nAfter evaluating this script:\n\n```python\ndef command_echo(args):\n\tprint(args)\n\ndef command_echo_expr(a, b, c):\n\tprint(\"a\", a, \"b\", b, \"c\", c)\n```\n\nThe first command, `echo`, takes its arguments as a single string, while for `echo_expr` it will be possible to pass starlark expression as arguments:\n\n```\n(dlv) echo 2+2, 2-1, 2*3\n\"2+2, 2-1, 2*3\"\n(dlv) echo_expr 2+2, 2-1, 2*3\na 4 b 1 c 6\n```\n\n## Creating breakpoints\n\nSet a breakpoint on all private methods of package `main`:\n\n```python\ndef main():\n\tfor f in functions().Funcs:\n\t\tv = f.split('.')\n\t\tif len(v) != 2:\n\t\t\tcontinue\n\t\tif v[0] != \"main\":\n\t\t\tcontinue\n\t\tif v[1][0] >= 'a' and v[1][0] <= 'z':\n\t\t\tcreate_breakpoint({ \"FunctionName\": f, \"Line\": -1 }) # see documentation of RPCServer.CreateBreakpoint\n```\n\n## Switching goroutines\n\nCreate a command, `switch_to_main_goroutine`, that searches for a goroutine running a function in the main package and switches to it:\n\n```python\ndef command_switch_to_main_goroutine(args):\n\tfor g in goroutines().Goroutines:\n\t\tif g.currentLoc.function != None and g.currentLoc.function.name.startswith(\"main.\"):\n\t\t\tprint(\"switching to:\", g.id)\n\t\t\traw_command(\"switchGoroutine\", GoroutineID=g.id)\n\t\t\tbreak\n```\n\n## Listing goroutines\n\nCreate a command, \"goexcl\", that lists all goroutines excluding the ones stopped on a specified function.\n\n```python\ndef command_goexcl(args):\n\t\"\"\"Prints all goroutines not stopped in the function passed as argument.\"\"\"\n\texcluded = 0\n\tstart = 0\n\twhile start >= 0:\n\t\tgr = goroutines(start, 10)\n\t\tstart = gr.Nextg\n\t\tfor g in gr.Goroutines:\n\t\t\tfn = g.UserCurrentLoc.Function\n\t\t\tif fn == None:\n\t\t\t\tprint(\"Goroutine\", g.ID, \"User:\", g.UserCurrentLoc.File, g.UserCurrentLoc.Line)\n\t\t\telif fn.Name_ != args:\n\t\t\t\tprint(\"Goroutine\", g.ID, \"User:\", g.UserCurrentLoc.File, g.UserCurrentLoc.Line, fn.Name_)\n\t\t\telse:\n\t\t\t\texcluded = excluded + 1\n\tprint(\"Excluded\", excluded, \"goroutines\")\n```\n\nUsage:\n\n```\n(dlv) goexcl main.somefunc\n```\n\nprints all goroutines that are not stopped inside `main.somefunc`.\n\n## Repeatedly executing the target until a breakpoint is hit.\n\nRepeatedly call continue and restart until the target hits a breakpoint.\n\n```python\ndef command_flaky(args):\n\t\"Repeatedly runs program until a breakpoint is hit\"\n\twhile True:\n\t\tif dlv_command(\"continue\") == None:\n\t\t\tbreak\n\t\tdlv_command(\"restart\")\n```\n\n## Print all elements of a linked list\n\n```python\ndef command_linked_list(args):\n\t\"\"\"Prints the contents of a linked list.\n\t\n\tlinked_list <var_name> <next_field_name> <max_depth>\n\nPrints up to max_depth elements of the linked list variable 'var_name' using 'next_field_name' as the name of the link field.\n\"\"\"\n\tvar_name, next_field_name, max_depth = args.split(\" \")\n\tmax_depth = int(max_depth)\n\tnext_name = var_name\n\tv = eval(None, var_name).Variable.Value\n\tfor i in range(0, max_depth):\n\t\tprint(str(i)+\":\",v)\n\t\tif v[0] == None:\n\t\t\tbreak\n\t\tv = v[next_field_name]\n```\n\n## Find an array element matching a predicate\n\n```python\ndef command_find_array(arr, pred):\n\t\"\"\"Calls pred for each element of the array or slice 'arr' returns the index of the first element for which pred returns true.\n\t\n\tfind_arr <arr> <pred>\n\t\nExample use (find the first element of slice 's2' with field A equal to 5):\n\t\n\tfind_arr \"s2\", lambda x: x.A == 5\n\"\"\"\n\tarrv = eval(None, arr).Variable\n\tfor i in range(0, arrv.Len):\n\t\tv = arrv.Value[i]\n\t\tif pred(v):\n\t\t\tprint(\"found\", i)\n\t\t\treturn\n\n\tprint(\"not found\")\n```\n\n## Rerunning a program until it fails or hits a breakpoint\n\n```python\ndef command_flaky(args):\n\t\"Continues and restarts the target program repeatedly (re-recording it on the rr backend), until a breakpoint is hit\"\n\tcount = 1\n\twhile True:\n\t\tif dlv_command(\"continue\") == None:\n\t\t\tbreak\n\t\tprint(\"restarting\", count, \"...\")\n\t\tcount = count+1\n\t\trestart(Rerecord=True)\n\n```\n\n## Passing a struct as an argument\n\nStruct literals can be passed to built-ins as Starlark dictionaries. For example, the following snippet passes\nin an [api.EvalScope](https://pkg.go.dev/github.com/go-delve/delve/service/api#EvalScope)\nand [api.LoadConfig](https://pkg.go.dev/github.com/go-delve/delve/service/api#LoadConfig)\nto the `eval` built-in. `None` can be passed for optional arguments, and\ntrailing optional arguments can be elided completely.\n\n```python\nvar = eval(\n        {\"GoroutineID\": 42, \"Frame\": 5},\n        \"myVar\",\n        {\"FollowPointers\":True, \"MaxVariableRecurse\":2, \"MaxStringLen\":100, \"MaxArrayValues\":10, \"MaxStructFields\":100}\n      )\n```\n\n## Chain breakpoints\n\nChain a number of breakpoints such that breakpoint n+1 is only hit after breakpoint n is hit:\n\n```python\ndef command_breakchain(*args):\n\tv = args.split(\" \")\n\t\n\tbp = get_breakpoint(int(v[0]), \"\").Breakpoint\n\tbp.HitCond = \"== 1\"\n\tamend_breakpoint(bp)\n\t\n\tfor i in range(1, len(v)):\n\t\tbp = get_breakpoint(int(v[i]), \"\").Breakpoint\n\t\tif i != len(v)-1:\n\t\t\tbp.HitCond = \"== 1\"\n\t\tbp.Cond = \"delve.bphitcount[\" + v[i-1] + \"] > 0\"\n\t\tamend_breakpoint(bp)\n```\n\nTo be used as `chain 1 2 3` where `1`, `2`, and `3` are IDs of breakpoints to chain together.\n"
  },
  {
    "path": "Documentation/cli/substitutepath.md",
    "content": "## Path substitution configuration\n\nNormally Delve finds the path to the source code that was used to produce an executable by looking at the debug symbols of the executable.\nHowever, under [some circumstances](../faq.md#substpath), the paths that end up inside the executable will be different from the paths to the source code on the machine that is running the debugger. If that is the case Delve will need extra configuration to convert the paths stored inside the executable to paths in your local filesystem.\n\nThis configuration is done by specifying a list of path substitution rules.\n\nThe path substitution code is SubstitutePath in pkg/locspec/locations.go.\n\n### Where are path substitution rules specified\n\n#### Delve command line client\n\nThe command line client reads the path substitution rules from Delve's YAML configuration file located at `$XDG_CONFIG_HOME/dlv/config.yml` or `.dlv/config.yml` inside the home directory on Windows.\n\nThe `substitute-path` entry should look like this:\n\n```\nsubstitute-path:\n  - {from: \"/compiler/machine/directory\", to: \"/debugger/machine/directory\"}\n  - {from: \"\", to: \"/mapping/for/relative/paths\"}\n```\n\nIf you are starting a headless instance of Delve and connecting to it through `dlv connect` the configuration file that is used is the one that runs `dlv connect`.\n\nWhen Delve needs to convert a path P found inside the executable file into a path in the local filesystem it will scan through the list of rules looking for the first one where P starts with the from-path and replace from-path with to-path.\n\nEmpty paths in both from-path and to-path are special, they represent relative paths:\n\n- `(from=\"\" to=\"/home/user/project/src\")` converts all relative paths in the executable to absolute paths in `/home/user/project/src`\n- `(from=\"/build/dir\" to=\"\")` converts all paths in the executable that start with `/build/dir` into relative paths.\n\nThe rules can also be modified while Delve is running by using the [config substitute-path command](./README.md#config):\n\n```\n(dlv) config substitute-path /from/path /to/path\n```\n\nDouble quotes can be used to specify paths that contain spaces, or to specify empty paths:\n\n```\n(dlv) config substitute-path \"/path containing spaces/\" /path-without-spaces/\n(dlv) config substitute-path /make/this/path/relative \"\"\n```\n\n#### DAP server\n\nIf you connect to Delve using the DAP protocol then the substitute path rules are specified using the substitutePath option in [launch.json](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#launchjson-attributes). **Note that `from` and `to` have reversed meaning here.**\n\n```\n\t\"substitutePath\": [\n\t\t{ \"from\": \"/debugger/machine/directory\", \"to\": \"/compiler/machine/directory\" }\n\t]\n```\n\nWhen Delve needs to convert a path P found in the local filesystem into a path inside the executable file it will scan through the list of rules looking for the first one where P starts with from-path and replace from-path with to-path.\n\nEmpty paths in both from-path and to-path are special, they represent relative paths:\n\n- `(from=\"/home/user/project/src\" to=\"\")` converts all relative paths in the executable to absolute paths in `/home/user/project/src`\n- `(from=\"\" to=\"/build/dir\")` converts all paths in the executable that start with `/build/dir` into relative paths.\n\nThe [debug console](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#dlv-command-from-debug-console) can also be used to modify the path substitution list:\n\n```\ndlv config substitutePath /debugger/machine/directory /compiler/machine/directory\n```\n"
  },
  {
    "path": "Documentation/faq.md",
    "content": "## Frequently Asked Questions\n\n<!-- BEGIN TOC -->\n* [I'm getting an error while compiling Delve / unsupported architectures and OSs](#unsupportedplatforms)\n* [How do I use Delve with Docker?](#docker)\n* [How can I use Delve to debug a CLI application?](#ttydebug)\n* [How can I use Delve for remote debugging?](#remote)\n* [Can not set breakpoints or see source listing in a complicated debugging environment](#substpath)\n* [Using Delve to debug the Go runtime](#runtime)\n<!-- END TOC -->\n\n### <a name=\"unsupportedplatforms\"></a> I'm getting an error while compiling Delve / unsupported architectures and OSs\n\nThe most likely cause of this is that you are running an unsupported Operating System or architecture.\nCurrently Delve supports (GOOS / GOARCH):\n* linux / amd64 (86x64)\n* linux / arm64 (AARCH64)\n* linux / 386\n* windows / amd64\n* windows / arm64\n* darwin (macOS) / amd64\n\nThere is no planned ETA for support of other architectures or operating systems. Bugs tracking requested support are:\n\n- [32bit ARM support](https://github.com/go-delve/delve/issues/328)\n- [PowerPC support](https://github.com/go-delve/delve/issues/1564)\n- [OpenBSD](https://github.com/go-delve/delve/issues/1477)\n\nSee also: [backend test health](backend_test_health.md).\n\n### <a name=\"docker\"></a> How do I use Delve with Docker?\n\nWhen running the container you should pass the `--security-opt=seccomp:unconfined` option to Docker. You can start a headless instance of Delve inside the container like this:\n\n```\ndlv exec --headless --listen :4040 /path/to/executable\n```\n\nAnd then connect to it from outside the container:\n\n```\ndlv connect :4040\n```\n\nThe program will not start executing until you connect to Delve and send the `continue` command.  If you want the program to start immediately you can do that by passing the `--continue` and `--accept-multiclient` options to Delve:\n\n```\ndlv exec --headless --continue --listen :4040 --accept-multiclient /path/to/executable\n```\n\nNote that the connection to Delve is unauthenticated and will allow arbitrary remote code execution: *do not do this in production*.\n\n### <a name=\"ttydebug\"></a> How can I use Delve to debug a CLI application?\n\nThere are three good ways to go about this\n\n1. Run your CLI application in a separate terminal and then attach to it via `dlv attach`. \n\n1. Run Delve in headless mode via `dlv debug --headless` and then connect to it from\nanother terminal. This will place the process in the foreground and allow it to access\nthe terminal TTY.\n\n1. Assign the process its own TTY. This can be done on UNIX systems via the `--tty` flag for the \n`dlv debug` and `dlv exec` commands. For the best experience, you should create your own PTY and \nassign it as the TTY. This can be done via [ptyme](https://github.com/derekparker/ptyme).\n\n### <a name=\"remote\"></a> How can I use Delve for remote debugging?\n\nIt is best not to use remote debugging on a public network. If you have to do this, we recommend using ssh tunnels or a vpn connection.  \n\n##### ```Example ``` \n\nRemote server:\n```\ndlv exec --headless --listen localhost:4040 /path/to/executable\n```\n\nLocal client:\n1. connect to the server and start a local port forward\n\n```\nssh -NL 4040:localhost:4040 user@remote.ip\n```\n\n2. connect local port\n```\ndlv connect :4040\n```\n\n### <a name=\"substpath\"></a> Can not set breakpoints or see source listing in a complicated debugging environment\n\nThis problem manifests when one or more of these things happen:\n\n* Can not see source code when the program stops at a breakpoint\n* Setting a breakpoint using full path, or through an IDE, does not work\n\nWhile doing one of the following things:\n\n* **The program is built and run inside a container** and Delve (or an IDE) is remotely connecting to it\n* Generally, every time the build environment (VM, container, computer...) differs from the environment where Delve's front-end (dlv or a IDE) runs \n* Using `-trimpath` or `-gcflags=-trimpath`\n* Using a build system other than `go build` (eg. bazel)\n* Using symlinks in your source tree\n\nIf you are affected by this problem then the `list main.main` command (in the command line interface) will have this result:\n\n```\n(dlv) list main.main\nShowing /path/to/the/mainfile.go:42 (PC: 0x47dfca)\nCommand failed: open /path/to/the/mainfile.go: no such file or directory\n(dlv)\n```\n\nThis is not a bug. The Go compiler embeds the paths of source files into the executable so that debuggers, including Delve, can use them. Doing any of the things listed above will prevent this feature from working seamlessly.\n\nThe substitute-path feature can be used to solve this problem, see `help config` or the `substitutePath` option in launch.json.\n\nThe `sources` command could also be useful in troubleshooting this problem, it shows the list of file paths that has been embedded by the compiler into the executable.\n\nFor more information on path substitution see [path substitution](cli/substitutepath.md).\n\nIf you still think this is a bug in Delve and not a configuration problem, open an [issue](https://github.com/go-delve/delve/issues), filling the issue template and including the logs produced by delve with the options `--log --log-output=rpc,dap`.\n\n### <a name=\"runtime\"></a> Using Delve to debug the Go runtime\n\nIt's possible to use Delve to debug the Go runtime, however there are some caveats to keep in mind\n\n* The `runtime` package is always compiled with optimizations and inlining, all of the caveats that apply to debugging optimized binaries apply to the runtime package. In particular some variables could be unavailable or have stale values and it could expose some bugs with the compiler assigning line numbers to instructions.\n\n* Next, step and stepout try to follow the current goroutine, if you debug one of the functions in the runtime that modify the curg pointer they will get confused. The 'step-instruction' command should be used instead.\n \n* When executing a stacktrace from g0 Delve will return the top frame and then immediately switch to the goroutine stack. If you want to see the g0 stacktrace use `stack -mode simple`.\n\n* The step command only steps into private runtime functions if it is already inside a runtime function. To step inside a private runtime function inserted into user code by the compiler set a breakpoint and then use `runtime.curg.goid == <current goroutine id>` as condition.\n"
  },
  {
    "path": "Documentation/installation/README.md",
    "content": "# Installation\nThe following instructions are known to work on Linux, macOS, Windows and FreeBSD.\n\nWith Go version 1.16 or later:\n\n```\n# Install the latest release:\n$ go install github.com/go-delve/delve/cmd/dlv@latest\n\n# Install from tree head:\n$ go install github.com/go-delve/delve/cmd/dlv@master\n\n# Install a specific version or pseudo-version:\n$ go install github.com/go-delve/delve/cmd/dlv@v1.7.3\n$ go install github.com/go-delve/delve/cmd/dlv@v1.7.4-0.20211208103735-2f13672765fe\n```\n\nSee [Versions](https://go.dev/ref/mod#versions) and [Pseudo-versions](https://go.dev/ref/mod#pseudo-versions) for how to format the version suffixes.\n\n## Download a binary release\n\nPre-built binaries for Linux, macOS, and Windows are available on the\n[GitHub Releases page](https://github.com/go-delve/delve/releases).\n\nDownload the archive for your platform, extract it, and place `dlv` in\nyour `$PATH`.\n\nTo verify a release with cosign, verify the signed checksum file and then\ncheck your archive against it:\n\n```sh\n# Verify the signed checksum file (validates both signature and signer identity)\ncosign verify-blob \\\n  --certificate checksums.txt.cert \\\n  --signature checksums.txt.sig \\\n  --certificate-identity-regexp \"https://github.com/go-delve/delve/.github/workflows/release.yml@refs/tags/.*\" \\\n  --certificate-oidc-issuer \"https://token.actions.githubusercontent.com\" \\\n  checksums.txt\n\n# Verify your archive matches the checksum\nsha256sum -c --ignore-missing checksums.txt\n```\n\nAlternatively, clone the git repository and build:\n\n```\n$ git clone https://github.com/go-delve/delve\n$ cd delve\n$ go install github.com/go-delve/delve/cmd/dlv\n```\n\nSee `go help install` for details on where the `dlv` executable is saved.\n\nIf during the install step you receive an error similar to this:\n\n```\nfound packages native (proc.go) and your_operating_system_and_architecture_combination_is_not_supported_by_delve (support_sentinel.go) in /home/pi/go/src/github.com/go-delve/delve/pkg/proc/native\n```\n\nIt means that your combination of operating system and CPU architecture is not supported, check the output of `go version`.\n\n## macOS considerations\n\nOn macOS make sure you also install the command line developer tools:\n\n```\n$ xcode-select --install\n```\n\nIf you didn't enable Developer Mode using Xcode you will be asked to authorize the debugger every time you use it. To enable Developer Mode and only have to authorize once per session use:\n\n```\nsudo /usr/sbin/DevToolsSecurity -enable\n```\n\nYou might also need to add your user to the developer group:\n\n```\nsudo dscl . append /Groups/_developer GroupMembership $(whoami)\n```\n\n## Compiling macOS native backend\n\nYou do not need the macOS native backend and it [has known problems](https://github.com/go-delve/delve/issues/1112). If you still want to build it:\n\n1. Run `xcode-select --install`\n2. On macOS 10.14 manually install the legacy include headers by running `/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg`\n3. Clone the repo into `$GOPATH/src/github.com/go-delve/delve`\n4. Run `make install` in that directory (on some versions of macOS this requires being root, the first time you run it, to install a new certificate)\n\nThe makefile will take care of creating and installing a self-signed certificate automatically.\n"
  },
  {
    "path": "Documentation/installation/freebsd/install.md",
    "content": "See [general install instructions](../README.md)."
  },
  {
    "path": "Documentation/installation/linux/install.md",
    "content": "See [general install instructions](../README.md).\n"
  },
  {
    "path": "Documentation/installation/osx/install.md",
    "content": "## Homebrew\n\nYou can install Delve via HomeBrew with the following command:\n\n```shell\n$ brew install delve\n```\n\n## Other installation methods\n\nSee [general install instructions](../README.md).\n"
  },
  {
    "path": "Documentation/installation/windows/install.md",
    "content": "See [general install instructions](../README.md)."
  },
  {
    "path": "Documentation/internal/README.md",
    "content": "# Internal Documentation\n\n* [Architecture of Delve slides](https://speakerdeck.com/aarzilli/internal-architecture-of-delve).\n* [Notes on porting Delve to other architectures](portnotes.md)\n\nTODO(derekparker)\n\nThis directory will hold documentation around the internals of the debugger and how it works.\n"
  },
  {
    "path": "Documentation/internal/portnotes.md",
    "content": "# Notes on porting Delve to other architectures\n\n## Continuous Integration requirements\n\nCode that isn't tested doesn't work, we like to run CI on all supported platforms. Currently our CI is done on an [instance of TeamCity cloud provided by JetBrains](https://delve.teamcity.com/), with the exception of the FreeBSD port, which is tested by Cirrus-CI.\n\nTeamCity settings are in `.teamcity/settings.kts` which in turn runs one of `_scripts/test_linux.sh`, `_scripts/test_mac.sh` or `_scripts/test_windows.ps1`.\nAll test scripts eventually end up calling into our main test program `_scripts/make.go`, which makes the appropriate `go test` calls.\n\nIf you plan to port Delve to a new platform you should first figure out how we are going to add your port to our CI, there are three possible solutions:\n\n1. the platform can be run on existing agents we have on TeamCity (linux/amd64, linux/arm64, windows/amd64, darwin/amd64, darwin/arm64) through Docker or similar solutions.\n2. there is a free CI service that integrates with GitHub that we can use\n3. you provide the hardware to be added to TeamCity to test it\n\nException to this requirement can be discussed in special cases.\n\n## General code organization\n\nAn introduction to the architecture of Delve can be found in the 2018 Gophercon Iceland talk: [slides](https://speakerdeck.com/aarzilli/internal-architecture-of-delve), [video](https://www.youtube.com/watch?v=IKnTr7Zms1k).\n\n### Packages you shouldn't worry about\n\n* `cmd/dlv/...` implements the command line program\n* `pkg/terminal/...` implements the command line user interface\n* `service/...` with the exception of `service/test`, implements our API as well as DAP\n* `pkg/dwarf/...` with the exception of `pkg/dwarf/regnum`, implements DWARF features not covered by the standard library\n* anything else in `pkg` that isn't inside `pkg/proc`\n\n### pkg/proc\n\n`pkg/proc` is the symbolic layer of Delve, its job is to bridge the distance between the API and low level Operating System and CPU features. Almost all features of Delve are implemented here, **except for the interaction with the OS/CPU**, which is provided by one of three backends: `pkg/proc/native`, `pkg/proc/core` or `pkg/proc/gdbserial`.\n\nThis package also contains the main test suite for Delve's backends in `pkg/proc/proc_test.go`. The tests for reading variables, however, are inside `service/test` for historical reasons.\n\nWhen porting Delve to a new CPU a new instance of the `proc.Arch` structure should be filled, see `pkg/proc/arch.go` and `pkg/proc/amd64_arch.go` as an example. To do this you will have to:\n\n- provide a disassembler for the port architecture\n- provide a mapping between DWARF register numbers and hardware registers in `pkg/dwarf/regnum` (see `pkg/dwarf/regnum/amd64.go` as an example). This mapping *is not arbitrary* it needs to be described in some standard document which should be linked to in the documentation of `pkg/dwarf/regnum`, for example the mapping for amd64 is described by the System V ABI AMD64 Architecture Processor Supplement v. 1.0 on page 61 figure 3.36.\n- if you don't know what `proc.Arch.fixFrameUnwindContext` or `porc.Arch.switchStack` should do *leave them empty*\n- the `proc.Arch.prologues` field needs to be filled by looking at the relevant parts of the Go linker (`cmd/link`), the code is somewhere inside `$GOROOT/src/cmd/internal/obj`, usually the function is called `stacksplit`.\n\nIf your target OS uses an executable file format other than ELF, Mach-O or PE you will also have to change `pkg/proc/bininfo.go` .\n\n**See also** the note on [build tags](#buildtags).\n\n### pkg/proc/gdbserial\n\nThis implements GDB remote serial protocol, it is used as the main backend on macOS as well as connecting to [rr](https://rr-project.org/).\n\nUnless you are making a macOS port you shouldn't worry about this.\n\n### pkg/proc/core\n\nThis implements code for reading core files. You don't need to support this for the port platform, see the note on [skippable features](#skippable).\nIf you decide to do it anyway see the note on [build tags](#buildtags).\n\n### pkg/proc/native\n\nThis is the interface between Delve and the OS/CPU, you will definitely want to work on this and it will be the bulk of the port job. The tests for this code however are not in this directory, they are in `pkg/proc` and `service/test`.\n\n## General port process\n\n1. Edit `pkg/proc/native/support_sentinel.go` to disable it in the port platform\n2. Fill `proc.Arch` struct for target architecture if it isn't supported already\n3. Go in `pkg/proc`\n    * run `go test -v`\n    * fix compiler errors\n    * repeat until compilation succeeds\n    * fix test failures\n    * repeat until almost all tests pass (see note on [skippable tests and features](#skippable))\n5. Go in `service/test`\n    * run `go test -v`\n    * fix compiler errors\n    * repeat until compilation succeeds\n    * fix test failures\n    * repeat until almost all tests pass (see note on [skippable tests and features](#skippable))\n6. Go to the root directory of the project\n    * run `go run _scripts/make.go test`\n    * fix compiler errors\n    * repeat until compilation succeeds\n    * fix test failures\n    * repeat until almost all tests pass (see note on [skippable tests and features](#skippable))\n\n## Miscellaneous\n\n### <a name='buildtags'> Uses of build tags, runtime.GOOS and runtime.GOARCH\n\nDelve has the ability to read cross-platform core files: you can read a core file of any supported platform with Delve running on any other supported platform.\nFor example, a core file produced by linux/arm64 can be read using Delve running under windows/amd64.\nThis feature has far reaching consequences, for example the stack unwinding code in `pkg/proc/stack.go` could be asked to unwind a stack for an architecture different from the one its running under.\n\nWhat this means in practice is that, in general, using build tags (like `_amd64.go`) or checking `runtime.GOOS` and `runtime.GOARCH` is forbidden throughout Delve's source tree, with two important exceptions:\n\n* `pkg/proc/native` is allowed to check runtime.GOOS/runtime.GOARCH as well as using build tags\n* test files are allowed to check runtime.GOOS/runtime.GOARCH as well as using build tags\n\nOther exceptions can be considered, but in general code outside of `pkg/proc/native` should:\n\n* use `proc.BinaryInfo.GOOS` instead of `runtime.GOOS`\n* use `proc.BinaryInfo.Arch.Name` instead of `runtime.GOARCH`\n* use `proc.BinaryInfo.Arch.PtrSize()` instead of determining the pointer size with `unsafe.Sizeof`\n* use `uint64` wherever an address-sized integer is needed, instead of `uintptr`\n* use `amd64_filename.go` instead of the build tag version, `filename_amd64.go`\n\n### <a name='skippable'> Features and tests that can be skipped by a port\n\nDelve offers many features, however not all of them are necessary for a useful port of Delve. The following features are optional to implement for a port:\n\n- Reading core files (i.e. `pkg/proc/core`)\n- Writing core files (i.e. `pkg/proc/native/dump_*.go`)\n- Watchpoints (`(*nativeThread).writeHardwareBreakpoint` etc)\n- Supporting CGO calls (`proc.Arch.switchStack`)\n- eBPF (`pkg/proc/internal/ebpf`)\n- Working with Position Independent Executables (PIE), unless the default buildmode for the port platform is PIE\n- Function call injection (`pkg/proc/fncall.go` -- it is probably not supported on the port architecture anyway)\n\nFor all these features it is acceptable (and possibly advisable) to either leave the implementation empty or to write a stub that always returns an \"not implemented\" error. Tests relative to these features can be skipped, `proc_test.go` has a `skipOn` utility function that can be called to skip a specific test on some architectures.\n\nOther tests should pass reliably, it is acceptable to skip some of them as long as most of them will pass.\nThe following tests should not be skipped even if you will be tempted to:\n\n* `proc.TestNextConcurrent`\n* `proc.TestNextConcurrentVariant2`\n* `proc.TestBreakpointCounts` (enable `proc.TestBreakpointCountsWithDetection` if you have problems with this)\n* `proc.TestStepConcurrentDirect`\n* `proc.TestStepConcurrentPtr`\n\n### Porting to Big Endian architectures\n\nDelve was initially written for amd64 and assumed 64bit and little endianness everywhere. The assumption on pointer size has been removed throughout the codebase, the assumption about endianness hasn't. Both `pkg/dwarf/loclist` and `pkg/dwarf/frame` incorrectly assume little endian encoding. Other parts of the code might do the same.\n\n### Porting to ARM32, MIPS and Software Single Stepping\n\nWhen resuming a thread stopped at a breakpoint Delve will:\n\n1. remove the breakpoint temporarily\n2. make the thread execute a single instruction\n3. write the breakpoint back\n\nStep 2 is implemented using the hardware single step feature that many CPUs have and that is exposed via PTRACE_SINGLESTEP or similar features.\nARM32 and MIPS do not have a hardware single step implemented, this means that it has to be implemented in software.\nThe linux kernel used to have a software implementation of PTRACE_SINGLESTEP but those have been removed because they were too burdensome to maintain and delegated the feature to userspace debuggers entirely.\n\nA software singlestep implementation would work like this:\n\n1. decode the current instruction\n2. figure out all the possible places where the PC registers could be after executing the current instruction\n3. set a breakpoint on all of them\n4. resume the thread normally\n5. clear all breakpoints created on step 3\n\nDelve does not currently have any infrastructure to help implement this, which means that porting to architectures without hardware singlestep is even more complicated.\n\n"
  },
  {
    "path": "Documentation/usage/README.md",
    "content": "# Using Delve\n\nYou can invoke Delve in [multiple ways](dlv.md), depending on your usage needs. Delve makes every attempt to be user-friendly, ensuring the user has to do the least amount of work possible to begin debugging their program.\n\nThe [available commands](dlv.md) can be grouped into the following categories:\n\n*  Specify target and start debugging with the default [terminal interface](../cli/README.md):\n   * [dlv debug [package]](dlv_debug.md)\n   * [dlv test [package]](dlv_test.md)\n   * [dlv exec \\<exe\\>](dlv_exec.md)\n   * [dlv attach \\<pid\\>](dlv_attach.md)\n   * [dlv core \\<exe\\> \\<core\\>](dlv_core.md)\n   * [dlv replay \\<rr trace\\> ](dlv_replay.md)\n* Trace target program execution\n   * [dlv trace [package] \\<regexp\\>](dlv_trace.md)\n* Start a headless backend server only and connect with an external [frontend client](../EditorIntegration.md):\n   * [dlv **--headless** \\<command\\> \\<target\\> \\<args\\> ](../api/ClientHowto.md#spawning-the-backend)\n      * starts a server, enters a debug session for the specified target and waits to accept a client connection over JSON-RPC or DAP\n      * `<command>` can be any of `debug`, `test`, `exec`, `attach`, `core` or `replay`\n      * if `--headless` flag is not specified the default [terminal client](../cli/README.md) will be automatically started instead\n      * compatible with [dlv connect](dlv_connect.md), [VS Code Go](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging), [GoLand](https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine)\n   * [dlv dap](dlv_dap.md)\n      * starts a DAP-only server and waits for a DAP client connection to specify the target and arguments\n      * compatible with [VS Code Go](https://github.com/golang/vscode-go/blob/master/docs/debugging.md#remote-debugging)\n      * NOT compatible with [dlv connect](dlv_connect.md), [GoLand](https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#attach-to-a-process-on-a-remote-machine)\n   * [dlv connect \\<addr\\>](dlv_connect.md)\n      * starts a [terminal interface client](../cli/README.md) and connects it to a running headless server over JSON-RPC\n* Help information\n   * [dlv help [command]](dlv.md)\n   * [dlv log](dlv_log.md)\n   * [dlv backend](dlv_backend.md)\n   * [dlv redirect](dlv_redirect.md)\n   * [dlv version](dlv_version.md)\n\nThe above list may be incomplete. Refer to the auto-generated [complete usage document](dlv.md) to further explore all available commands.\n\n## Environment variables\n\nDelve also reads the following environment variables:\n\n* `$DELVE_EDITOR` is used by the `edit` command (if it isn't set the `$EDITOR` variable is used instead)\n* `$DELVE_PAGER` is used by commands that emit large output (if it isn't set the `$PAGER` variable is used instead, if neither is set `more` is used)\n* `$TERM` is used to decide whether or not ANSI escape codes should be used for colorized output\n* `$DELVE_DEBUGSERVER_PATH` is used to locate the debugserver executable on macOS\n"
  },
  {
    "path": "Documentation/usage/dlv.md",
    "content": "## dlv\n\nDelve is a debugger for the Go programming language.\n\n### Synopsis\n\nDelve is a source level debugger for Go programs.\n\nDelve enables you to interact with your program by controlling the execution of the process,\nevaluating variables, and providing information of thread / goroutine state, CPU register state and more.\n\nThe goal of this tool is to provide a simple yet powerful interface for debugging Go programs.\n\nPass flags to the program you are debugging using `--`, for example:\n\n`dlv exec ./hello -- server --config conf/config.toml`\n\n### Options\n\n```\n  -h, --help   help for dlv\n```\n\n### SEE ALSO\n\n* [dlv attach](dlv_attach.md)\t - Attach to running process and begin debugging.\n* [dlv connect](dlv_connect.md)\t - Connect to a headless debug server with a terminal client.\n* [dlv core](dlv_core.md)\t - Examine a core dump.\n* [dlv dap](dlv_dap.md)\t - Starts a headless TCP server communicating via Debug Adaptor Protocol (DAP).\n* [dlv debug](dlv_debug.md)\t - Compile and begin debugging main package in current directory, or the package specified.\n* [dlv exec](dlv_exec.md)\t - Execute a precompiled binary, and begin a debug session.\n* [dlv replay](dlv_replay.md)\t - Replays a rr trace.\n* [dlv test](dlv_test.md)\t - Compile test binary and begin debugging program.\n* [dlv trace](dlv_trace.md)\t - Compile and begin tracing program.\n* [dlv version](dlv_version.md)\t - Prints version.\n\n* [dlv log](dlv_log.md)\t - Help about logging flags\n* [dlv backend](dlv_backend.md)\t - Help about the `--backend` flag\n"
  },
  {
    "path": "Documentation/usage/dlv_attach.md",
    "content": "## dlv attach\n\nAttach to running process and begin debugging.\n\n### Synopsis\n\nAttach to an already running process and begin debugging it.\n\nThis command will cause Delve to take control of an already running process, and\nbegin a new debug session.  When exiting the debug session you will have the\noption to let the process continue or kill it.\n\n\n```\ndlv attach pid [executable] [flags]\n```\n\n### Options\n\n```\n      --continue                 Continue the debugged process on start.\n  -h, --help                     help for attach\n      --waitfor string           Wait for a process with a name beginning with this prefix\n      --waitfor-duration float   Total time to wait for a process\n      --waitfor-interval float   Interval between checks of the process list, in millisecond (default 1)\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --backend string                   Backend selection (see 'dlv help backend'). (default \"default\")\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_backend.md",
    "content": "## dlv backend\n\nHelp about the --backend flag.\n\n### Synopsis\n\nThe --backend flag specifies which backend should be used, possible values\nare:\n\n\tdefault\t\tUses lldb on macOS, native everywhere else.\n\tnative\t\tNative backend.\n\tlldb\t\tUses lldb-server or debugserver.\n\trr\t\tUses mozilla rr (https://github.com/mozilla/rr).\n\nSome backends can be configured using environment variables:\n\n* DELVE_DEBUGSERVER_PATH specifies the path of the debugserver executable for the lldb backend\n* DELVE_RR_RECORD_FLAGS specifies additional flags used when calling 'rr record'\n* DELVE_RR_REPLAY_FLAGS specifies additional flags used when calling 'rr replay'\n\n\n### Options\n\n```\n  -h, --help   help for backend\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --backend string                   Backend selection (see 'dlv help backend'). (default \"default\")\n      --build-flags string               Build flags, to be passed to the compiler. For example: --build-flags=\"-tags=integration -mod=vendor -cover -v\"\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr                     Disables address space randomization\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n  -r, --redirect stringArray             Specifies redirect rules for target process (see 'dlv help redirect')\n      --wd string                        Working directory for running the program.\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_connect.md",
    "content": "## dlv connect\n\nConnect to a headless debug server with a terminal client.\n\n### Synopsis\n\nConnect to a running headless debug server with a terminal client. Prefix with 'unix:' to use a unix domain socket.\n\n```\ndlv connect addr [flags]\n```\n\n### Options\n\n```\n  -h, --help   help for connect\n```\n\n### Options inherited from parent commands\n\n```\n      --backend string      Backend selection (see 'dlv help backend'). (default \"default\")\n      --init string         Init file, executed by the terminal client.\n      --log                 Enable debugging server logging.\n      --log-dest string     Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string   Comma separated list of components that should produce debug output (see 'dlv help log')\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_core.md",
    "content": "## dlv core\n\nExamine a core dump.\n\n### Synopsis\n\nExamine a core dump (only supports linux and windows core dumps).\n\nThe core command will open the specified core file and the associated\nexecutable and let you examine the state of the process when the\ncore dump was taken.\n\nCurrently supports linux/amd64 and linux/arm64 core files, windows/amd64 minidumps and core files generated by Delve's 'dump' command.\n\n```\ndlv core <executable> <core> [flags]\n```\n\n### Options\n\n```\n  -h, --help   help for core\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_dap.md",
    "content": "## dlv dap\n\nStarts a headless TCP server communicating via Debug Adaptor Protocol (DAP).\n\n### Synopsis\n\nStarts a headless TCP server communicating via Debug Adaptor Protocol (DAP).\n\nThe server is always headless and requires a DAP client like VS Code to connect and request a binary\nto be launched or a process to be attached to. The following modes can be specified via the client's launch config:\n- launch + exec   (executes precompiled binary, like 'dlv exec')\n- launch + debug  (builds and launches, like 'dlv debug')\n- launch + test   (builds and tests, like 'dlv test')\n- launch + replay (replays an rr trace, like 'dlv replay')\n- launch + core   (replays a core dump file, like 'dlv core')\n- attach + local  (attaches to a running process, like 'dlv attach')\n\nProgram and output binary paths will be interpreted relative to dlv's working directory.\n\nThis server does not accept multiple client connections (--accept-multiclient).\nUse 'dlv [command] --headless' instead and a DAP client with attach + remote config.\nWhile --continue is not supported, stopOnEntry launch/attach attribute can be used to control if\nexecution is resumed at the start of the debug session.\n\nThe --client-addr flag is a special flag that makes the server initiate a debug session\nby dialing in to the host:port where a DAP client is waiting. This server process\nwill exit when the debug session ends.\n\n```\ndlv dap [flags]\n```\n\n### Options\n\n```\n      --client-addr string   Address where the DAP client is waiting for the DAP server to dial in. Prefix with 'unix:' to use a unix domain socket.\n  -h, --help                 help for dap\n```\n\n### Options inherited from parent commands\n\n```\n      --check-go-version    Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr        Disables address space randomization\n  -l, --listen string       Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                 Enable debugging server logging.\n      --log-dest string     Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string   Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user      Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_debug.md",
    "content": "## dlv debug\n\nCompile and begin debugging main package in current directory, or the package specified.\n\n### Synopsis\n\nCompiles your program with optimizations disabled, starts and attaches to it.\n\nBy default, with no arguments, Delve will compile the 'main' package in the\ncurrent directory, and begin to debug it. Alternatively you can specify a\npackage name and Delve will compile that package instead, and begin a new debug\nsession.\n\n```\ndlv debug [package] [flags]\n```\n\n### Options\n\n```\n      --continue        Continue the debugged process on start.\n  -h, --help            help for debug\n      --output string   Output path for the binary.\n      --rr-cleanup      Delete directory containing debug recording on detach. (default true)\n      --tty string      TTY to use for the target program\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --backend string                   Backend selection (see 'dlv help backend'). (default \"default\")\n      --build-flags string               Build flags, to be passed to the compiler. For example: --build-flags=\"-tags=integration -mod=vendor -cover -v\"\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr                     Disables address space randomization\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n  -r, --redirect stringArray             Specifies redirect rules for target process (see 'dlv help redirect')\n      --wd string                        Working directory for running the program.\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_exec.md",
    "content": "## dlv exec\n\nExecute a precompiled binary, and begin a debug session.\n\n### Synopsis\n\nExecute a precompiled binary and begin a debug session.\n\nThis command will cause Delve to exec the binary and immediately attach to it to\nbegin a new debug session. Please note that if the binary was not compiled with\noptimizations disabled, it may be difficult to properly debug it. Please\nconsider compiling debugging binaries with -gcflags=\"all=-N -l\" on Go 1.10\nor later, -gcflags=\"-N -l\" on earlier versions of Go.\n\n```\ndlv exec <path/to/binary> [flags]\n```\n\n### Options\n\n```\n      --continue     Continue the debugged process on start.\n  -h, --help         help for exec\n      --rr-cleanup   Delete directory containing debug recording on detach. (default true)\n      --tty string   TTY to use for the target program\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --backend string                   Backend selection (see 'dlv help backend'). (default \"default\")\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr                     Disables address space randomization\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n  -r, --redirect stringArray             Specifies redirect rules for target process (see 'dlv help redirect')\n      --wd string                        Working directory for running the program.\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_log.md",
    "content": "## dlv log\n\nHelp about logging flags.\n\n### Synopsis\n\nLogging can be enabled by specifying the --log flag and using the\n--log-output flag to select which components should produce logs.\n\nThe argument of --log-output must be a comma separated list of component\nnames selected from this list:\n\n\n\tdebugger\tLog debugger commands\n\tgdbwire\t\tLog connection to gdbserial backend\n\tlldbout\t\tCopy output from debugserver/lldb to standard output\n\tdebuglineerr\tLog recoverable errors reading .debug_line\n\trpc\t\tLog all RPC messages\n\tdap\t\tLog all DAP messages\n\tfncall\t\tLog function call protocol\n\tminidump\tLog minidump loading\n\tstack           Log stacktracer\n\nAdditionally --log-dest can be used to specify where the logs should be\nwritten.\nIf the argument is a number it will be interpreted as a file descriptor,\notherwise as a file path.\nThis option will also redirect the \"server listening at\" message in headless\nand dap modes.\n\n\n\n### Options\n\n```\n  -h, --help   help for log\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --backend string                   Backend selection (see 'dlv help backend'). (default \"default\")\n      --build-flags string               Build flags, to be passed to the compiler. For example: --build-flags=\"-tags=integration -mod=vendor -cover -v\"\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr                     Disables address space randomization\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n  -r, --redirect stringArray             Specifies redirect rules for target process (see 'dlv help redirect')\n      --wd string                        Working directory for running the program.\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_redirect.md",
    "content": "## dlv redirect\n\nHelp about file redirection.\n\n### Synopsis\n\nThe standard file descriptors of the target process can be controlled using the '-r' and '--tty' arguments.\n\nThe --tty argument allows redirecting all standard descriptors to a terminal, specified as an argument to --tty.\n\nThe syntax for '-r' argument is:\n\n\t\t-r [source:]destination\n\nWhere source is one of 'stdin', 'stdout' or 'stderr' and destination is the path to a file. If the source is omitted stdin is used implicitly.\n\nFile redirects can also be changed using the 'restart' command.\n\n\n### Options\n\n```\n  -h, --help   help for redirect\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --backend string                   Backend selection (see 'dlv help backend'). (default \"default\")\n      --build-flags string               Build flags, to be passed to the compiler. For example: --build-flags=\"-tags=integration -mod=vendor -cover -v\"\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr                     Disables address space randomization\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n  -r, --redirect stringArray             Specifies redirect rules for target process (see 'dlv help redirect')\n      --wd string                        Working directory for running the program.\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_replay.md",
    "content": "## dlv replay\n\nReplays a rr trace.\n\n### Synopsis\n\nReplays a rr trace.\n\nThe replay command will open a trace generated by mozilla rr. Mozilla rr must be installed:\nhttps://github.com/mozilla/rr\n\t\t\t\n\n```\ndlv replay [trace directory] [flags]\n```\n\n### Options\n\n```\n  -h, --help            help for replay\n  -p, --onprocess int   Pass onprocess pid to rr.\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_run.md",
    "content": "## dlv run\n\nDeprecated command. Use 'debug' instead.\n\n```\ndlv run [flags]\n```\n\n### Options\n\n```\n  -h, --help   help for run\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. New clients should use v2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 1)\n      --backend string                   Backend selection (see 'dlv help backend'). (default \"default\")\n      --build-flags string               Build flags, to be passed to the compiler. For example: --build-flags=\"-tags=integration -mod=vendor -cover -v\"\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr                     Disables address space randomization\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n  -r, --redirect stringArray             Specifies redirect rules for target process (see 'dlv help redirect')\n      --wd string                        Working directory for running the program.\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_test.md",
    "content": "## dlv test\n\nCompile test binary and begin debugging program.\n\n### Synopsis\n\nCompiles a test binary with optimizations disabled and begins a new debug session.\n\nThe test command allows you to begin a new debug session in the context of your\nunit tests. By default Delve will debug the tests in the current directory.\nAlternatively you can specify a package name, and Delve will debug the tests in\nthat package instead. Double-dashes `--` can be used to pass arguments to the test program:\n\ndlv test [package] -- -test.run TestSomething -test.v -other-argument\n\nSee also: 'go help testflag'.\n\n```\ndlv test [package] [flags]\n```\n\n### Options\n\n```\n  -h, --help            help for test\n      --output string   Output path for the binary.\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --backend string                   Backend selection (see 'dlv help backend'). (default \"default\")\n      --build-flags string               Build flags, to be passed to the compiler. For example: --build-flags=\"-tags=integration -mod=vendor -cover -v\"\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr                     Disables address space randomization\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n  -r, --redirect stringArray             Specifies redirect rules for target process (see 'dlv help redirect')\n      --wd string                        Working directory for running the program.\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_trace.md",
    "content": "## dlv trace\n\nCompile and begin tracing program.\n\n### Synopsis\n\nTrace program execution.\n\nThe trace sub command will set a tracepoint on every function matching the\nprovided regular expression and output information when tracepoint is hit.  This\nis useful if you do not want to begin an entire debug session, but merely want\nto know what functions your process is executing.\n\nThe output of the trace sub command is printed to stderr, so if you would like to\nonly see the output of the trace operations you can redirect stdout.\n\n```\ndlv trace [package] regexp [flags]\n```\n\n### Options\n\n```\n      --ebpf               Trace using eBPF (experimental).\n  -e, --exec string        Binary file to exec and trace.\n      --follow-calls int   Trace all children of the function to the required depth. Trace also supports defer functions and cases where functions are dynamically returned and passed as parameters.\n  -h, --help               help for trace\n      --output string      Output path for the binary.\n  -p, --pid int            Pid to attach to.\n  -s, --stack int          Show stack trace with given depth. (Ignored with --ebpf)\n  -t, --test               Trace a test binary.\n      --timestamp          Show timestamp in the output\n```\n\n### Options inherited from parent commands\n\n```\n      --backend string         Backend selection (see 'dlv help backend'). (default \"default\")\n      --build-flags string     Build flags, to be passed to the compiler. For example: --build-flags=\"-tags=integration -mod=vendor -cover -v\"\n      --check-go-version       Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr           Disables address space randomization\n      --log                    Enable debugging server logging.\n      --log-dest string        Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string      Comma separated list of components that should produce debug output (see 'dlv help log')\n  -r, --redirect stringArray   Specifies redirect rules for target process (see 'dlv help redirect')\n      --wd string              Working directory for running the program.\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "Documentation/usage/dlv_version.md",
    "content": "## dlv version\n\nPrints version.\n\n```\ndlv version [flags]\n```\n\n### Options\n\n```\n  -h, --help   help for version\n```\n\n### Options inherited from parent commands\n\n```\n      --accept-multiclient               Allows a headless server to accept multiple client connections via JSON-RPC or DAP.\n      --allow-non-terminal-interactive   Allows interactive sessions of Delve that don't have a terminal as stdin, stdout and stderr\n      --api-version int                  Selects JSON-RPC API version when headless. The only valid value is 2. Can be reset via RPCServer.SetApiVersion. See Documentation/api/json-rpc/README.md. (default 2)\n      --backend string                   Backend selection (see 'dlv help backend'). (default \"default\")\n      --build-flags string               Build flags, to be passed to the compiler. For example: --build-flags=\"-tags=integration -mod=vendor -cover -v\"\n      --check-go-version                 Exits if the version of Go in use is not compatible (too old or too new) with the version of Delve. (default true)\n      --disable-aslr                     Disables address space randomization\n      --headless                         Run debug server only, in headless mode. Server will accept both JSON-RPC or DAP client connections.\n      --init string                      Init file, executed by the terminal client.\n  -l, --listen string                    Debugging server listen address. Prefix with 'unix:' to use a unix domain socket. (default \"127.0.0.1:0\")\n      --log                              Enable debugging server logging.\n      --log-dest string                  Writes logs to the specified file or file descriptor (see 'dlv help log').\n      --log-output string                Comma separated list of components that should produce debug output (see 'dlv help log')\n      --only-same-user                   Only connections from the same user that started this instance of Delve are allowed to connect. (default true)\n  -r, --redirect stringArray             Specifies redirect rules for target process (see 'dlv help redirect')\n      --wd string                        Working directory for running the program.\n```\n\n### SEE ALSO\n\n* [dlv](dlv.md)\t - Delve is a debugger for the Go programming language.\n\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Derek Parker\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Makefile",
    "content": ".DEFAULT_GOAL=test\n\nSHELL := /bin/bash\nGO_SRC := $(shell find . -type f -not -path './_fixtures/*' -not -path './vendor/*' -not -path './_scripts/*' -not -path './localtests/*' -name '*.go')\n\ncheck-cert:\n\t@go run _scripts/make.go check-cert\n\nbuild: $(GO_SRC)\n\t@go run _scripts/make.go build\n\ninstall: $(GO_SRC)\n\t@go run _scripts/make.go install\n\nuninstall:\n\t@go run _scripts/make.go uninstall\n\ntest: vet\n\t@go run _scripts/make.go test -v\n\nvet:\n\t@go vet -tags exp.linuxppc64le $$(go list -tags exp.linuxppc64le ./... | grep -v native)\n\nvendor:\n\t@go run _scripts/make.go vendor\n\nbuild-ebpf-image:\n\t./pkg/proc/internal/ebpf/build/build-ebpf-builder-img.sh\n\nbuild-ebpf-object: build-ebpf-image\n\t./pkg/proc/internal/ebpf/build/build-ebpf-objects.sh\n\n.PHONY: vendor test-integration-run test-proc-run test check-cert install build vet uninstall build-ebpf-image build-ebpf-object\n"
  },
  {
    "path": "README.md",
    "content": "![Delve](https://raw.githubusercontent.com/go-delve/delve/master/assets/delve_horizontal.png)\n\n[![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/go-delve/delve/master/LICENSE)\n[![Go Reference](https://pkg.go.dev/badge/github.com/go-delve/delve.svg)](https://pkg.go.dev/github.com/go-delve/delve)\n[![Build Status](https://delve.teamcity.com/app/rest/builds/buildType:(id:Delve_AggregatorBuild)/statusIcon.svg)](https://delve.teamcity.com/viewType.html?buildTypeId=Delve_AggregatorBuild&guest=1)\n\nThe GitHub issue tracker is for **bugs** only. Please use the [developer mailing list](https://groups.google.com/forum/#!forum/delve-dev) for any feature proposals and discussions.\n\n### About Delve\n\n- [Installation](Documentation/installation)\n- [Getting Started](Documentation/cli/getting_started.md)\n- [Documentation](Documentation)\n  - [Command line options](Documentation/usage/dlv.md)\n  - [Command line client](Documentation/cli/README.md)\n  - [Plugins and GUIs](Documentation/EditorIntegration.md)\n  - [Frequently Asked Questions](Documentation/faq.md)\n- [Contributing](CONTRIBUTING.md)\n  - [AI Usage Policy](Documentation/AI/AI_POLICY.md)\n  - [Internal Documentation](Documentation/internal)\n  - [API documentation](Documentation/api)\n  - [How to write a Delve client](Documentation/api/ClientHowto.md)\n\nDelve is a debugger for the Go programming language. The goal of the project is to provide a simple, full featured debugging tool for Go. Delve should be easy to invoke and easy to use. Chances are if you're using a debugger, things aren't going your way. With that in mind, Delve should stay out of your way as much as possible.\n"
  },
  {
    "path": "_fixtures/amend_breakpoint.star",
    "content": "bp = get_breakpoint(0, \"afuncbreak\").Breakpoint\nbp.Stacktrace = 2\nbp.HitCond = \"== 2\"\namend_breakpoint(bp)\nbp2 = get_breakpoint(0, \"afuncbreak\").Breakpoint\nprint(bp)\n"
  },
  {
    "path": "_fixtures/asmnilptr/main.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc asmFunc(*int) int\n\nfunc main() {\n\tfmt.Printf(\"%d\\n\", asmFunc(nil))\n}\n"
  },
  {
    "path": "_fixtures/asmnilptr/main_386.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·asmFunc(SB),0,$0-16\n\tMOVL arg+0(FP), AX\n\tMOVL (AX), AX\n\tMOVL AX, ret+4(FP)\n\tRET\n"
  },
  {
    "path": "_fixtures/asmnilptr/main_amd64.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·asmFunc(SB),0,$0-16\n\tMOVQ arg+0(FP), AX\n\tMOVQ (AX), AX\n\tMOVQ AX, ret+8(FP)\n\tRET\n"
  },
  {
    "path": "_fixtures/asmnilptr/main_arm64.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·asmFunc(SB),0,$0-16\n\tMOVD arg+0(FP), R5\n\tMOVD (R5), R5\n\tMOVD R5, ret+8(FP)\n\tRET\n"
  },
  {
    "path": "_fixtures/asmnilptr/main_loong64.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·asmFunc(SB),0,$0-16\n\tMOVV arg+0(FP), R5\n\tMOVV (R5), R5\n\tMOVV R5, ret+8(FP)\n\tRET\n"
  },
  {
    "path": "_fixtures/asmnilptr/main_ppc64le.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·asmFunc(SB),0,$0-16\n\tMOVD arg+0(FP), R5\n\tMOVD (R5), R5\n\tMOVD R5, ret+8(FP)\n\tRET\n"
  },
  {
    "path": "_fixtures/asmnilptr/main_riscv64.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·asmFunc(SB),0,$0-16\n\tMOV arg+0(FP), R5\n\tMOV (R5), R5\n\tMOV R5, ret+8(FP)\n\tRET"
  },
  {
    "path": "_fixtures/backwardsiter.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"iter\"\n)\n\nfunc backwards(s []int) func(func(int) bool) {\n\treturn func(yield func(int) bool) {\n\t\tfor i := len(s) - 1; i >= 0; i-- {\n\t\t\tif !yield(s[i]) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc main() {\n\tnext, stop := iter.Pull(backwards([]int{10, 20, 30, 40}))\n\tfmt.Println(next())\n\tfmt.Println(next())\n\tfmt.Println(next())\n\tstop()\n}\n"
  },
  {
    "path": "_fixtures/badflags.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nfunc g() {\n}\n\nfunc main() {\n\tg()\n\ta := os.Args[1] == \"1\"\n\tif a {\n\t\tfmt.Printf(\"true branch %v\\n\", a)\n\t} else {\n\t\tfmt.Printf(\"false branch %v\\n\", a)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/binarytrees.go",
    "content": "/* The Computer Language Benchmarks Game\n * http://benchmarksgame.alioth.debian.org/\n *\n * based on Go program by The Go Authors.\n * based on C program by Kevin Carson\n * flag.Arg hack by Isaac Gouy\n * modified by Jamil Djadala to use goroutines\n * modified by Chai Shushan\n *\n */\n\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"sync\"\n)\n\nvar minDepth = 4\nvar n = 20\n\nfunc main() {\n\truntime.GOMAXPROCS(runtime.NumCPU() * 2)\n\n\tflag.Parse()\n\tif flag.NArg() > 0 {\n\t\tn, _ = strconv.Atoi(flag.Arg(0))\n\t}\n\n\tmaxDepth := n\n\tif minDepth+2 > n {\n\t\tmaxDepth = minDepth + 2\n\t}\n\tstretchDepth := maxDepth + 1\n\n\tcheck_l := bottomUpTree(0, stretchDepth).ItemCheck()\n\tfmt.Printf(\"stretch tree of depth %d\\t check: %d\\n\", stretchDepth, check_l)\n\n\tlongLivedTree := bottomUpTree(0, maxDepth)\n\n\tresult_trees := make([]int, maxDepth+1)\n\tresult_check := make([]int, maxDepth+1)\n\n\tvar wg sync.WaitGroup\n\tfor depth_l := minDepth; depth_l <= maxDepth; depth_l += 2 {\n\t\twg.Add(1)\n\t\tgo func(depth int) {\n\t\t\titerations := 1 << uint(maxDepth-depth+minDepth)\n\t\t\tcheck := 0\n\n\t\t\tfor i := 1; i <= iterations; i++ {\n\t\t\t\tcheck += bottomUpTree(i, depth).ItemCheck()\n\t\t\t\tcheck += bottomUpTree(-i, depth).ItemCheck()\n\t\t\t}\n\t\t\tresult_trees[depth] = iterations * 2\n\t\t\tresult_check[depth] = check\n\n\t\t\twg.Done()\n\t\t}(depth_l)\n\t}\n\twg.Wait()\n\n\tfor depth := minDepth; depth <= maxDepth; depth += 2 {\n\t\tfmt.Printf(\"%d\\t trees of depth %d\\t check: %d\\n\",\n\t\t\tresult_trees[depth], depth, result_check[depth],\n\t\t)\n\t}\n\tfmt.Printf(\"long lived tree of depth %d\\t check: %d\\n\",\n\t\tmaxDepth, longLivedTree.ItemCheck(),\n\t)\n}\n\nfunc bottomUpTree(item, depth int) *Node {\n\tif depth <= 0 {\n\t\treturn &Node{item, nil, nil}\n\t}\n\treturn &Node{item,\n\t\tbottomUpTree(2*item-1, depth-1),\n\t\tbottomUpTree(2*item, depth-1),\n\t}\n}\n\ntype Node struct {\n\titem        int\n\tleft, right *Node\n}\n\nfunc (self *Node) ItemCheck() int {\n\tif self.left == nil {\n\t\treturn self.item\n\t}\n\treturn self.item + self.left.ItemCheck() - self.right.ItemCheck()\n}\n"
  },
  {
    "path": "_fixtures/bpcountstest.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"sync\"\n\t\"time\"\n)\n\nfunc demo(id int, wait *sync.WaitGroup) {\n\tfor i := 0; i < 100; i++ {\n\t\tsleep := rand.Intn(10) + 1\n\t\tfmt.Printf(\"id: %d step: %d sleeping %d\\n\", id, i, sleep)\n\t\ttime.Sleep(time.Duration(sleep) * time.Millisecond)\n\t}\n\n\twait.Done()\n}\n\nfunc main() {\n\twait := new(sync.WaitGroup)\n\twait.Add(1)\n\twait.Add(1)\n\tgo demo(1, wait)\n\tgo demo(2, wait)\n\n\twait.Wait()\n}\n"
  },
  {
    "path": "_fixtures/bpfile",
    "content": "# comment line\ntrace main.main\n\nbreak main.sayhi\n\n#\n# comment line\n#\n"
  },
  {
    "path": "_fixtures/bphitcountchain.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc breakfunc1() {\n\tfmt.Println(\"breakfunc1\")\n}\n\nfunc breakfunc2() {\n\tfmt.Println(\"breakfunc2\")\n}\n\nfunc breakfunc3() {\n\tfmt.Println(\"breakfunc3\")\n}\n\nfunc main() {\n\tbreakfunc2()\n\tbreakfunc3()\n\n\tbreakfunc1() // hit\n\tbreakfunc3()\n\tbreakfunc1()\n\n\tbreakfunc2() // hit\n\tbreakfunc1()\n\n\tbreakfunc3() // hit\n\tbreakfunc1()\n\tbreakfunc2()\n}\n"
  },
  {
    "path": "_fixtures/break/break_amd64.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·asmBrk(SB),0,$0-0\n\tBYTE\t$0xcc\n\tRET\n"
  },
  {
    "path": "_fixtures/break/main.go",
    "content": "package main\r\n\r\nfunc asmBrk()\r\n\r\nfunc main() {\r\n\tasmBrk()\r\n}\r\n"
  },
  {
    "path": "_fixtures/break.go",
    "content": "package main\n\nfunc main() {\n\ti := 0\n\tfor {\n\t\ti++\n\t\tif i > 10 {\n\t\t\tbreak\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "_fixtures/buildflagtest.go",
    "content": "package main\n\nimport \"fmt\"\n\n// To be set via\n//   go build -ldflags '-X main.Hello=World'\nvar Hello string\n\nfunc main() {\n\tif len(Hello) < 1 {\n\t\tpanic(\"global main.Hello not set via build flags\")\n\t}\n\tfmt.Printf(\"Hello %s!\\n\", Hello)\n}\n"
  },
  {
    "path": "_fixtures/buildtest/__debug_bin2807893743",
    "content": ""
  },
  {
    "path": "_fixtures/buildtest/main.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Println(\"hello world!\")\n}\n"
  },
  {
    "path": "_fixtures/buildtest/main_test.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\t\"testing\"\n)\n\nfunc TestMain(m *testing.M) {\n\tos.Exit(m.Run())\n}\n\nfunc TestCurrentDirectory(t *testing.T) {\n\twd, _ := os.Getwd()\n\tt.Logf(\"current directory: %s\", wd)\n}\n"
  },
  {
    "path": "_fixtures/callme.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc callme(i int) {\n\tfmt.Println(\"got:\", i)\n}\n\nconst nBytes = 10\nvar zeroarr [nBytes]byte\n\nfunc callme2() {\n\tfor i := 0; i < nBytes; i++ {\n\t\tzeroarr[i] = '0'\n\t}\n\tfmt.Println(\"callme2\")\n}\n\nfunc callme3() {\n\tcallme2()\n}\n\nfunc main() {\n\tfor i := 0; i < 5; i++ {\n\t\tcallme(i)\n\t}\n\tcallme3()\n}\n"
  },
  {
    "path": "_fixtures/cat.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n)\n\nfunc main() {\n\ts := bufio.NewScanner(os.Stdin)\n\tfor s.Scan() {\n\t\tfmt.Printf(\"read %q\\n\", s.Text())\n\t}\n\tos.Stdout.Close()\n}\n"
  },
  {
    "path": "_fixtures/cgodisass.go",
    "content": "package main\n\n/*\nint a(int v) {\n\treturn 0xff + v;\n}\n*/\nimport \"C\"\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Println(\"aaa\")\n\tprint(C.a(11))\n}\n"
  },
  {
    "path": "_fixtures/cgosigsegvstack.go",
    "content": "package main\n\n// #cgo CFLAGS: -g -Wall -O0\n/*\nvoid sigsegv(int x) {\n\tint *p = NULL;\n\t*p = x;\n}\nvoid testfn(int x) {\n\tsigsegv(x);\n}\n*/\nimport \"C\"\n\nfunc main() {\n\tC.testfn(C.int(10))\n}\n"
  },
  {
    "path": "_fixtures/cgostacktest/hello.c",
    "content": "#include <stdio.h>\n\n#include \"_cgo_export.h\"\n\n#ifdef __amd64__\n#define BREAKPOINT asm(\"int3;\")\n#elif __i386__\n#define BREAKPOINT asm(\"int3;\")\n#elif __PPC64__\n#define BREAKPOINT asm(\"tw 31,0,0;\")\n#elif __aarch64__\n#ifdef WIN32\n#define BREAKPOINT asm(\"brk 0xF000;\")\n#else\n#define BREAKPOINT asm(\"brk 0;\")\n#endif\n#elif __riscv\n#define BREAKPOINT asm(\"ebreak;\")\n#elif __loongarch__\n#define BREAKPOINT asm(\"break 0;\")\n#endif\n\nvoid helloworld_pt2(int x) {\n\tBREAKPOINT;\n\thelloWorld(x+1);\n}\n\nvoid helloworld(int x) {\n\thelloworld_pt2(x+1);\n}\n\nvoid helloworld_pt4(int x) {\n\tBREAKPOINT;\n\thelloWorld2(x+1);\n}\n\nvoid helloworld_pt3(int x) {\n\thelloworld_pt4(x+1);\n}\n"
  },
  {
    "path": "_fixtures/cgostacktest/hello.h",
    "content": "#ifndef __HELLO_H__\n#define __HELLO_H__\n\nvoid helloworld(int);\nvoid helloworld_pt3(int);\n\n#endif\n"
  },
  {
    "path": "_fixtures/cgostacktest/main.go",
    "content": "package main\n\n// #include \"hello.h\"\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc main() {\n\truntime.Breakpoint()\n\tC.helloworld(2)\n}\n\n//export helloWorld\nfunc helloWorld(x C.int) {\n\thelloWorldS(x)\n}\n\nfunc helloWorldS(x C.int) {\n\truntime.Breakpoint()\n\tC.helloworld_pt3(x - 1)\n}\n\n//export helloWorld2\nfunc helloWorld2(x C.int) {\n\truntime.Breakpoint()\n\tfmt.Printf(\"hello world %d\\n\", x)\n}\n"
  },
  {
    "path": "_fixtures/cgotest.go",
    "content": "package main\n\n/*\n#include <stdio.h>\nchar* foo(void) { return \"hello, world!\"; }\n*/\nimport \"C\"\n\nimport \"fmt\"\nimport \"runtime\"\n\nfunc main() {\n\truntime.GOMAXPROCS(runtime.NumCPU())\n\tfmt.Println(C.GoString(C.foo()))\n}\n"
  },
  {
    "path": "_fixtures/chain_breakpoints.star",
    "content": "def command_chain(args):\n\tv = args.split(\" \")\n\t\n\tbp = get_breakpoint(int(v[0]), \"\").Breakpoint\n\tbp.HitCond = \"== 1\"\n\tamend_breakpoint(bp)\n\t\n\tfor i in range(1, len(v)):\n\t\tbp = get_breakpoint(int(v[i]), \"\").Breakpoint\n\t\tif i != len(v)-1:\n\t\t\tbp.HitCond = \"== 1\"\n\t\tbp.Cond = \"delve.bphitcount[\" + v[i-1] + \"] > 0\"\n\t\tamend_breakpoint(bp)\n"
  },
  {
    "path": "_fixtures/changoroutines.go",
    "content": "package main\n\nimport (\n\t\"runtime\"\n\t\"time\"\n)\n\nfunc main() {\n\tblockingchan1 := make(chan int)\n\tblockingchan2 := make(chan int)\n\n\tgo sendToChan(\"one\", blockingchan1)\n\tgo sendToChan(\"two\", blockingchan1)\n\tgo recvFromChan(blockingchan2)\n\ttime.Sleep(time.Second)\n\n\truntime.Breakpoint()\n}\n\nfunc sendToChan(name string, ch chan<- int) {\n\tch <- 1\n}\n\nfunc recvFromChan(ch <-chan int) {\n\t<-ch\n}\n"
  },
  {
    "path": "_fixtures/clientdo.go",
    "content": "package main\n\nimport (\n\t\"net/http\"\n\t\"net/url\"\n)\n\nfunc main() {\n\thttp.DefaultClient.Do(&http.Request{URL: &url.URL{}})\n}\n"
  },
  {
    "path": "_fixtures/closurecontents.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc makeAcc(scale int) func(x int) int {\n\ta := 0\n\treturn func(x int) int {\n\t\ta += x * scale\n\t\treturn a\n\t}\n}\n\nfunc main() {\n\tacc := makeAcc(3)\n\truntime.Breakpoint()\n\tfmt.Println(acc(1))\n\truntime.Breakpoint()\n\tfmt.Println(acc(2))\n\truntime.Breakpoint()\n\tfmt.Println(acc(6))\n\truntime.Breakpoint()\n}\n"
  },
  {
    "path": "_fixtures/condframe.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc callme() {\n\tfor i := 0; i < 10; i++ {\n\t\tcallme2()\n\t}\n}\n\nfunc callme2() {\n\tfmt.Println(\"called again!!\")\n}\n\nfunc main() {\n\tcallme()\n}\n"
  },
  {
    "path": "_fixtures/condperghitcount.go",
    "content": "package main\n\nimport (\n\t\"sync\"\n\t\"time\"\n)\n\nfunc main() {\n\tvar wg sync.WaitGroup\n\twg.Add(2)\n\tfor i := 0; i < 2; i++ {\n\t\tgo func() {\n\t\t\tj := 0\n\t\t\tfor {\n\t\t\t\tj++\n\t\t\t\tif j > 10 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\twg.Done()\n\t\t}()\n\t\ttime.Sleep(time.Second)\n\t}\n\twg.Wait()\n}\n"
  },
  {
    "path": "_fixtures/consts.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/go-delve/delve/_fixtures/internal/dir0/pkg\"\n\t\"runtime\"\n)\n\ntype ConstType uint8\n\nconst (\n\tconstZero ConstType = iota\n\tconstOne\n\tconstTwo\n\tconstThree\n)\n\ntype BitFieldType uint8\n\nconst (\n\tbitZero BitFieldType = 1 << iota\n\tbitOne\n\tbitTwo\n\tbitThree\n\tbitFour\n)\n\nfunc main() {\n\ta := constTwo\n\tb := constThree\n\tc := bitZero | bitOne\n\td := BitFieldType(33)\n\te := ConstType(10)\n\tf := BitFieldType(0)\n\truntime.Breakpoint()\n\tpkg.SomeVar.AnotherMethod(2)\n\tfmt.Println(a, b, c, d, e, f, pkg.SomeConst)\n}\n"
  },
  {
    "path": "_fixtures/continuetestprog.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc sleepytime() {\n\ttime.Sleep(time.Millisecond)\n}\n\nfunc sayhi() {\n\tfmt.Println(\"Hello, World!\")\n}\n\nfunc main() {\n\tsleepytime()\n\tsayhi()\n}\n"
  },
  {
    "path": "_fixtures/coreemptystring.go",
    "content": "package main\n\nfunc main() {\n\ts := \"\"\n\tt := \"test\"\n\tpanic(\"panic!!!\")\n\tprintln(s, t)\n}\n"
  },
  {
    "path": "_fixtures/create_breakpoint_main.star",
    "content": "def main():\n\tfor f in functions().Funcs:\n\t\tv = f.split('.')\n\t\tif len(v) != 2:\n\t\t\tcontinue\n\t\tif v[0] != \"main\":\n\t\t\tcontinue\n\t\tif v[1][0] >= 'a' and v[1][0] <= 'z':\n\t\t\tcreate_breakpoint({ \"FunctionName\": f, \"Line\": -1 }) # see documentation of RPCServer.CreateBreakpoint\n"
  },
  {
    "path": "_fixtures/databpcountstest.go",
    "content": "package main\n\nimport (\n\t\"math/rand\"\n\t\"sync\"\n\t\"time\"\n)\n\nvar globalvar1 int\n\nfunc demo(id int, wait *sync.WaitGroup) {\n\tfor i := 0; i < 100; i++ {\n\t\tsleep := rand.Intn(10) + 1\n\t\tglobalvar1 = globalvar1 + 1\n\t\ttime.Sleep(time.Duration(sleep) * time.Millisecond)\n\t}\n\n\twait.Done()\n}\n\nfunc main() {\n\twait := new(sync.WaitGroup)\n\twait.Add(1)\n\twait.Add(1)\n\tgo demo(1, wait)\n\tgo demo(2, wait)\n\n\twait.Wait()\n}\n"
  },
  {
    "path": "_fixtures/databpeasy.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"sync\"\n\t\"time\"\n)\n\nvar globalvar1 = 0\nvar globalvar2 = 0\n\nfunc main() { // Position 0\n\truntime.LockOSThread()\n\tglobalvar2 = 1\n\tfmt.Printf(\"%d %d\\n\", globalvar1, globalvar2)\n\tglobalvar2 = globalvar1 + 1\n\tglobalvar1 = globalvar2 + 1\n\tfmt.Printf(\"%d %d\\n\", globalvar1, globalvar2) // Position 1\n\n\tglobalvar2 = globalvar2 + 1          // Position 2\n\tglobalvar2 = globalvar1 + globalvar2 // Position 3\n\tfmt.Printf(\"%d %d\\n\", globalvar1, globalvar2)\n\tglobalvar1 = globalvar2 + 1\n\tfmt.Printf(\"%d %d\\n\", globalvar1, globalvar2)\n\n\tdone := make(chan struct{}) // Position 4\n\tvar wg sync.WaitGroup\n\tfor i := 0; i < 20; i++ {\n\t\twg.Add(1)\n\t\tgo waitfunc(i, &wg)\n\t}\n\twg.Wait()\n\tgo f(done)\n\t<-done\n}\n\nfunc f(done chan struct{}) {\n\truntime.LockOSThread()\n\tglobalvar1 = globalvar2 + 2\n\tclose(done) // Position 5\n}\n\nfunc waitfunc(i int, wg *sync.WaitGroup) {\n\truntime.LockOSThread()\n\twg.Done()\n\ttime.Sleep(50 * time.Second)\n}\n"
  },
  {
    "path": "_fixtures/databpstack.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t//\n)\n\nfunc f() {\n\tw := 0\n\n\tg(1000, &w) // Position 0\n}\n\nfunc g(cnt int, p *int) {\n\tif cnt == 0 {\n\t\t*p = 10\n\t\treturn // Position 1\n\t}\n\tg(cnt-1, p)\n}\n\nfunc main() {\n\tf()\n\tfmt.Printf(\"done\\n\") // Position 2\n}\n"
  },
  {
    "path": "_fixtures/debugdetect.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/go-delve/delve/pkg/debugdetect\"\n)\n\nfunc main() {\n\tattached, err := debugdetect.IsDebuggerAttached()\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"ERROR: %v\\n\", err)\n\t\tos.Exit(2)\n\t}\n\tif attached {\n\t\tfmt.Println(\"ATTACHED\")\n\t} else {\n\t\tfmt.Println(\"NOT_ATTACHED\")\n\t}\n}\n"
  },
  {
    "path": "_fixtures/decllinetest.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n)\n\nfunc main() {\n\ta := 0\n\ta++\n\tb := 0\n\tf1(a, b)\n}\n\nfunc f1(\n\ta int,\n\tb int,\n) {\n\tfmt.Printf(\"%d %d\\n\", a, b)\n}\n"
  },
  {
    "path": "_fixtures/defercall.go",
    "content": "package main\n\nvar n = 0\n\nfunc sampleFunction() {\n\tn++\n}\n\nfunc callAndDeferReturn() {\n\tdefer sampleFunction()\n\tsampleFunction()\n\tn++\n}\n\nfunc callAndPanic2() {\n\tdefer sampleFunction()\n\tsampleFunction()\n\tpanic(\"panicking\")\n}\n\nfunc callAndPanic() {\n\tdefer recover()\n\tcallAndPanic2()\n}\n\nfunc main() {\n\tcallAndDeferReturn()\n\tcallAndPanic()\n}\n"
  },
  {
    "path": "_fixtures/deferstack.go",
    "content": "package main\n\nimport \"runtime\"\n\nfunc f1() {\n}\n\nfunc f2(a int8, b int32) {\n}\n\nfunc f3() {\n}\n\nfunc call1() {\n\tdefer f2(1, -1)\n\tdefer f1()\n\tcall2()\n}\n\nfunc call2() {\n\tdefer f3()\n\tdefer f2(42, 61)\n\tcall3()\n}\n\nfunc call3() {\n\truntime.Breakpoint()\n}\n\nfunc main() {\n\tcall1()\n}\n"
  },
  {
    "path": "_fixtures/delvecatch.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tfor i, iface := range []any{12, \"test\", nil, 2.2, \"hello\", 7} {\n\t\tfmt.Println(i, iface)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/dotpackagesiface.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/go-delve/delve/_fixtures/internal/dir.io\"\n\t\"github.com/go-delve/delve/_fixtures/internal/dir.io/io.io\"\n\t\"runtime\"\n)\n\nfunc main() {\n\tvar iface interface{} = &dirio.SomeType{}\n\tvar iface2 interface{} = &ioio.SomeOtherType{}\n\truntime.Breakpoint()\n\tfmt.Println(iface, iface2)\n}\n"
  },
  {
    "path": "_fixtures/doubleinline.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"strconv\"\n)\n\ntype Rectangle struct{}\n\nfunc (r *Rectangle) Height() int {\n\th, _ := strconv.ParseInt(\"7\", 10, 0)\n\treturn int(h)\n}\n\nfunc (r *Rectangle) Width() int {\n\treturn 6\n}\n\nfunc (r *Rectangle) Area() int { return r.Height() * r.Width() }\n\nfunc main() {\n\tvar r Rectangle\n\truntime.Breakpoint()\n\tfmt.Println(r.Area())\n}\n"
  },
  {
    "path": "_fixtures/dwzcompression.go",
    "content": "package main\n\n// #include <stdio.h>\n// void fortytwo()\n// {\n//      fprintf(stdin, \"42\");\n// }\nimport \"C\"\nimport \"runtime\"\n\nfunc main() {\n\tC.fortytwo()\n\truntime.Breakpoint()\n}\n"
  },
  {
    "path": "_fixtures/ebpf_trace.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc callme(i int) int {\n\tif i == 0 {\n\t\treturn 100\n\t}\n\treturn callme(i - 1)\n}\n\nfunc main() {\n\tfmt.Println(callme(10))\n}\n"
  },
  {
    "path": "_fixtures/ebpf_trace2.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc main() {\n\ti := int64(0)\n\tfor i = 0; i < 5; i++ {\n\t\ttracedFunction(i)\n\t}\n\tfor i = 5; i < 10; i++ {\n\t\ttracedFunction(i)\n\t\ttime.Sleep(time.Second)\n\t}\n}\n\n//go:noinline\nfunc tracedFunction(x int64) {\n\tfmt.Println(x)\n}\n"
  },
  {
    "path": "_fixtures/ebpf_trace3.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc main() {\n\tstr := \"abcdefghijklmnopqrstuvqxyz\"\n\ti := int64(0)\n\tfor i = 0; i < 5; i++ {\n\t\ttracedFunction(i, i%5 == 0, str[i])\n\t}\n\tfor i = 5; i < 10; i++ {\n\t\ttracedFunction(i, i%5 == 0, str[i])\n\t\ttime.Sleep(time.Millisecond)\n\t}\n}\n\n//go:noinline\nfunc tracedFunction(x int64, b bool, r byte) {\n\tfmt.Println(x, b, r)\n}\n"
  },
  {
    "path": "_fixtures/echo_expr.star",
    "content": "def command_echo_expr(a, b, c):\n\tprint(\"a\", a, \"b\", b, \"c\", c)\n"
  },
  {
    "path": "_fixtures/examinememory.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n)\n\nfunc main() {\n\tl := int(51)\n\tbs := make([]byte, l)\n\tfor i := 0; i < l; i++ {\n\t\tbs[i] = byte(i + int(10))\n\t}\n\n\tbsp := (*byte)(unsafe.Pointer(&bs[0]))\n\n\tbspUintptr := uintptr(unsafe.Pointer(bsp))\n\n\tfmt.Printf(\"%#x\\n\", bspUintptr)\n\t_ = *bsp\n\n\tbs[0] = 255\n\n\t_ = *bsp\n}\n"
  },
  {
    "path": "_fixtures/exit.init",
    "content": "exit\n"
  },
  {
    "path": "_fixtures/fake-debuginfod-find/debuginfod-find",
    "content": "#!/bin/bash\n\nif [ \"$1\" == \"--help\" ]; then\n\texit 0\nfi\n\nfor i in $(seq 1 100000 1000000); do\n\techo \"Downloading $i...\" >&2\n\tsleep 1\ndone\n\necho \"i-dont-actually-have-a-path-im-a-fake-stub-sorry\""
  },
  {
    "path": "_fixtures/fatalerror.go",
    "content": "package main\n\nfunc main() {\n\tvar f func()\n\tgo f()\n}\n"
  },
  {
    "path": "_fixtures/find_array.star",
    "content": "def command_find_array(arr, pred):\n\t\"\"\"Calls pred for each element of the array or slice 'arr' returns the index of the first element for which pred returns true.\n\t\n\tfind_arr <arr>, <pred>\n\t\nExample use:\n\t\n\tfind_arr \"s2\", lambda x: x.A == 5\n\"\"\"\n\tarrv = eval(None, arr).Variable\n\tfor i in range(0, arrv.Len):\n\t\tv = arrv.Value[i]\n\t\tif pred(v):\n\t\t\tprint(\"found\", i)\n\t\t\treturn\n\n\tprint(\"not found\")\n"
  },
  {
    "path": "_fixtures/fncall.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n)\n\nvar call = \"this is a variable named `call`\"\n\nfunc callstacktrace() (stacktrace string) {\n\tfor skip := 0; ; skip++ {\n\t\tpc, file, line, ok := runtime.Caller(skip)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tfn := runtime.FuncForPC(pc)\n\t\tstacktrace += fmt.Sprintf(\"in %s at %s:%d\\n\", fn.Name(), file, line)\n\t}\n\treturn stacktrace\n}\n\nfunc call0(a, b int) {\n\tfmt.Printf(\"call0: first: %d second: %d\\n\", a, b)\n}\n\nfunc call1(a, b int) int {\n\tfmt.Printf(\"first: %d second: %d\\n\", a, b)\n\treturn a + b\n}\n\nfunc call2(a, b int) (int, int) {\n\tfmt.Printf(\"call2: first: %d second: %d\\n\", a, b)\n\treturn a, b\n}\n\nfunc callexit() {\n\tfmt.Printf(\"about to exit\\n\")\n\tos.Exit(0)\n}\n\nfunc callpanic() {\n\tfmt.Printf(\"about to panic\\n\")\n\tpanic(\"callpanic panicked\")\n}\n\nfunc callbreak() {\n\tfmt.Printf(\"about to break\")\n\truntime.Breakpoint()\n}\n\nfunc stringsJoin(v []string, sep string) string {\n\t// This is needed because strings.Join is in an optimized package and\n\t// because of a bug in the compiler arguments of optimized functions don't\n\t// have a location.\n\treturn strings.Join(v, sep)\n}\n\nfunc mul2(x a2struct) int {\n\treturn x.Y * 2\n}\n\nfunc mul2ptr(x *a2struct) int {\n\treturn x.Y * 2\n}\n\ntype astruct struct {\n\tX int\n}\n\ntype a2struct struct {\n\tY int\n}\n\nfunc (a astruct) VRcvr(x int) string {\n\treturn fmt.Sprintf(\"%d + %d = %d\", x, a.X, x+a.X)\n}\n\nfunc (pa *astruct) PRcvr(x int) string {\n\treturn fmt.Sprintf(\"%d - %d = %d\", x, pa.X, x-pa.X)\n}\n\ntype PRcvrable interface {\n\tPRcvr(int) string\n}\n\ntype VRcvrable interface {\n\tVRcvr(int) string\n}\n\nvar zero = 0\n\nfunc makeclos(pa *astruct) func(int) string {\n\ti := 0\n\treturn func(x int) string {\n\t\ti++\n\t\treturn fmt.Sprintf(\"%d + %d + %d = %d\", i, pa.X, x, i+pa.X+x)\n\t}\n}\n\nvar ga astruct\nvar globalPA2 *a2struct\n\nfunc escapeArg(pa2 *a2struct) {\n\tglobalPA2 = pa2\n}\n\nfunc square(x int) int {\n\treturn x * x\n}\n\nfunc intcallpanic(a int) int {\n\tif a == 0 {\n\t\tpanic(\"panic requested\")\n\t}\n\treturn a\n}\n\nfunc onetwothree(n int) []int {\n\treturn []int{n + 1, n + 2, n + 3}\n}\n\nfunc curriedAdd(n int) func(int) int {\n\treturn func(m int) int {\n\t\treturn n + m\n\t}\n}\n\nfunc getAStruct(n int) astruct {\n\treturn astruct{X: n}\n}\n\nfunc getAStructPtr(n int) *astruct {\n\treturn &astruct{X: n}\n}\n\nfunc getVRcvrableFromAStruct(n int) VRcvrable {\n\treturn astruct{X: n}\n}\n\nfunc getPRcvrableFromAStructPtr(n int) PRcvrable {\n\treturn &astruct{X: n}\n}\n\nfunc getVRcvrableFromAStructPtr(n int) VRcvrable {\n\treturn &astruct{X: n}\n}\n\nfunc noreturncall(n int) {\n\treturn\n}\n\ntype Base struct {\n\ty int\n}\n\ntype Derived struct {\n\tx int\n\tBase\n}\n\nfunc (b *Base) Method() int {\n\treturn b.y\n}\n\ntype X int\n\nfunc (_ X) CallMe() {\n\tprintln(\"foo\")\n}\n\ntype X2 int\n\nfunc (_ X2) CallMe(i int) int {\n\treturn i * i\n}\n\nfunc regabistacktest(s1, s2, s3, s4, s5 string, n uint8) (string, string, string, string, string, uint8) {\n\treturn s1 + s2, s2 + s3, s3 + s4, s4 + s5, s5 + s1, 2 * n\n}\n\nfunc regabistacktest2(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10 int) (int, int, int, int, int, int, int, int, int, int) {\n\treturn n1 + n2, n2 + n3, n3 + n4, n4 + n5, n5 + n6, n6 + n7, n7 + n8, n8 + n9, n9 + n10, n10 + n1\n}\n\nfunc regabistacktest3(sargs [10]string, n uint8) (r [10]string, m uint8) {\n\tfor i := range sargs {\n\t\tr[i] = sargs[i] + sargs[(i+1)%len(sargs)]\n\t}\n\tm = n * 3\n\treturn\n}\n\nfunc floatsum(a, b float64) float64 {\n\treturn a + b\n}\n\ntype Issue2698 struct {\n\ta uint32\n\tb uint8\n\tc uint8\n\td uintptr\n}\n\nfunc (i Issue2698) String() string {\n\treturn fmt.Sprintf(\"%d %d %d %d\", i.a, i.b, i.c, i.d)\n}\n\ntype Issue3364 struct {\n\ta int\n\tb uint32\n}\n\nfunc (i Issue3364) String() string {\n\treturn fmt.Sprintf(\"%d %d\", i.a, i.b)\n}\n\ntype intpair struct {\n\tX, Y int\n}\n\nvar m = map[intpair]string{\n\t{1, 1}: \"one,one\",\n\t{1, 2}: \"one,two\",\n\t{3, 1}: \"three,one\",\n}\n\nfunc main() {\n\tone, two := 1, 2\n\tintslice := []int{1, 2, 3}\n\tstringslice := []string{\"one\", \"two\", \"three\"}\n\tcomma := \",\"\n\ta := astruct{X: 3}\n\tpa := &astruct{X: 6}\n\ta2 := a2struct{Y: 7}\n\tvar pa2 *astruct\n\tvar str string = \"old string value\"\n\tlongstrs := []string{\"very long string 0123456789a0123456789b0123456789c0123456789d0123456789e0123456789f0123456789g012345678h90123456789i0123456789j0123456789\"}\n\trast3 := [10]string{\"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"height\", \"nine\", \"ten\"}\n\tvar vable_a VRcvrable = a\n\tvar vable_pa VRcvrable = pa\n\tvar pable_pa PRcvrable = pa\n\tvar x X = 2\n\tvar x2 X2 = 2\n\tissue2698 := Issue2698{\n\t\ta: 1,\n\t\tb: 2,\n\t\tc: 3,\n\t\td: 4,\n\t}\n\tissue3364 := Issue3364{\n\t\ta: 1,\n\t\tb: 2,\n\t}\n\n\tfn2clos := makeclos(pa)\n\tfn2glob := call1\n\tfn2valmeth := pa.VRcvr\n\tfn2ptrmeth := pa.PRcvr\n\tvar fn2nil func()\n\n\td := &Derived{3, Base{4}}\n\n\tvar ref strings.Builder\n\tfmt.Fprintf(&ref, \"blah\")\n\n\tvar nilptrtostruct *astruct\n\n\truntime.Breakpoint() // breakpoint here\n\tcall1(one, two)\n\tfn2clos(2)\n\tstrings.LastIndexByte(stringslice[1], 'w')\n\td.Method()\n\td.Base.Method()\n\tx.CallMe()\n\tfmt.Println(one, two, zero, call, call0, call2, callexit, callpanic, callbreak, callstacktrace, stringsJoin, intslice, stringslice, comma, a.VRcvr, a.PRcvr, pa, vable_a, vable_pa, pable_pa, fn2clos, fn2glob, fn2valmeth, fn2ptrmeth, fn2nil, ga, escapeArg, a2, square, intcallpanic, onetwothree, curriedAdd, getAStruct, getAStructPtr, getVRcvrableFromAStruct, getPRcvrableFromAStructPtr, getVRcvrableFromAStructPtr, pa2, noreturncall, str, d, x, x2.CallMe(5), longstrs, regabistacktest, regabistacktest2, issue2698.String(), issue3364.String(), regabistacktest3, rast3, floatsum, ref, mul2, mul2ptr, m, nilptrtostruct)\n}\n"
  },
  {
    "path": "_fixtures/fputest/fputest.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\t\"runtime\"\n)\n\nfunc fputestsetup(f64a, f64b, f64c, f64d float64, f32a, f32b, f32c, f32d float32, avx2, avx512, dobreak bool)\nfunc getCPUID70() (ebx, ecx uint32)\n\nfunc main() {\n\tvar f64a float64 = 1.1\n\tvar f64b float64 = 1.2\n\tvar f64c float64 = 1.3\n\tvar f64d float64 = 1.4\n\tvar f32a float32 = 1.5\n\tvar f32b float32 = 1.6\n\tvar f32c float32 = 1.7\n\tvar f32d float32 = 1.8\n\n\tebx, _ := getCPUID70()\n\tavx2 := ebx&(1<<5) != 0\n\tavx512 := ebx&(1<<16) != 0\n\n\tfputestsetup(f64a, f64b, f64c, f64d, f32a, f32b, f32c, f32d, avx2, avx512, len(os.Args) < 2 || os.Args[1] != \"panic\")\n\tif len(os.Args) < 2 || os.Args[1] != \"panic\" {\n\t\truntime.Breakpoint()\n\t} else {\n\t\tpanic(\"boom!\")\n\t}\n}\n"
  },
  {
    "path": "_fixtures/fputest/fputest_amd64.s",
    "content": "TEXT ·fputestsetup(SB),$0-50\n\t// setup x87 stack\n\tFMOVD f64a+0(FP), F0\n\tFMOVD f64b+8(FP), F0\n\tFMOVD f64c+16(FP), F0\n\tFMOVD f64d+24(FP), F0\n\t\n\tFMOVF f32a+32(FP), F0\n\tFMOVF f32b+36(FP), F0\n\tFMOVF f32c+40(FP), F0\n\tFMOVF f32d+44(FP), F0\n\t\n\t// setup SSE registers\n\t// XMM0 = { f64b, f64a } = { 1.2, 1.1 }\n\tMOVLPS f64a+0(FP), X0\n\tMOVHPS f64b+8(FP), X0\n\t\n\t// XMM1 = { f64d, f64c } = { 1.4, 1.3 }\n\tMOVLPS f64c+16(FP), X1\n\tMOVHPS f64d+24(FP), X1\n\t\n\t// XMM2 = { f32d, f32c, f32b, f32a } = { 1.8, 1.7, 1.6, 1.5 }\n\tMOVQ f32a+32(FP), AX\n\tMOVQ AX, X2\n\tMOVQ f32c+40(FP), AX\n\tMOVQ AX, X3\n\tPUNPCKLQDQ X3, X2\n\t\n\t// XMM3 = { f64a, f64b } = { 1.1, 1.2 }\n\tMOVLPS f64b+8(FP), X3\n\tMOVHPS f64a+0(FP), X3\n\t\n\t// XMM4 = { f64c, f64d } = { 1.3, 1.4 }\n\tMOVLPS f64d+24(FP), X4\n\tMOVHPS f64c+16(FP), X4\n\t\n\t// XMM5 = { f32b, f32a, f32d, f32c } = { 1.6, 1.5, 1.8, 1.7 }\n\tMOVQ f32c+40(FP), AX\n\tMOVQ AX, X5\n\tMOVQ f32a+32(FP), AX\n\tMOVQ AX, X6\n\tPUNPCKLQDQ X6, X5\n\t\n\t// XMM6 = XMM0 + XMM1 = { f64b+f64d, f64a+f64c } = { 2.6, 2.4 }\n\tMOVAPS X0,X6\n\tADDPD X1, X6\n\t\n\t// XMM7 = XMM0 + XMM3 = { f64b+f64a, f64a+f64b } = { 2.3, 2.3 }\n\tMOVAPS X0, X7\n\tADDPD X3, X7\n\t\n\t// XMM8 = XMM2 + XMM5 = { f32d+f32b, f32c+f32a, f32b+f32d, f32a+f32c } = { 3.4, 3.2, 3.4, 3.2 }\n\tMOVAPS X2, X8\n\tADDPS X5, X8\n\n\tMOVAPS X1, X9\n\tMOVAPS X2, X10\n\t\n\tMOVQ $42, AX\n\t\n\tCMPB avx2+48(FP), $0x0\n\tJE done\n\t//copy XMM1 to both halves of YMM11\n\tVPERMQ $0x44, Y1, Y11\n\t\n\tCMPB avx512+49(FP), $0x0\n\tJE done\n\t//copy YMM11 to both halves of ZMM12\n\tVSHUFF64X2 $0x44, Z11, Z11, Z12\n\ndone:\n\tCMPB dobreak+50(FP), $0x0\n\tJE return\n\tBYTE $0xcc // INT 3\n\t\nreturn:\n\tRET\n\nTEXT ·getCPUID70(SB),$0\n\tMOVQ $7, AX\n\tMOVQ $0, CX\n\tCPUID\n\tMOVD BX, ret+0(FP)\n\tMOVD CX, ret+4(FP)\n\tRET\n"
  },
  {
    "path": "_fixtures/genericbp.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc testfn[T any](arg T) {\n\tfmt.Println(arg)\n}\n\nfunc main() {\n\ttestfn[uint16](1)\n\ttestfn[float64](2.1)\n}\n"
  },
  {
    "path": "_fixtures/genericintoiface.go",
    "content": "package main\n\nimport \"fmt\"\n\ntype Blah[T any] struct {\n\tx T\n}\n\nfunc (b *Blah[T]) F(y T) {\n\tb.x = y\n}\n\ntype BlahInt interface {\n\tF(int)\n}\n\nfunc callf(b BlahInt) {\n\tb.F(2)\n\tfmt.Println(b)\n}\n\nfunc main() {\n\tb := &Blah[int]{10}\n\tcallf(b)\n}\n"
  },
  {
    "path": "_fixtures/godlopen/golib/golib.go",
    "content": "package main\n\nimport \"C\"\n\n//export GoFunction\nfunc GoFunction() int32 {\n\treturn 42\n}\n\nfunc main() {}\n"
  },
  {
    "path": "_fixtures/godlopen/main.c",
    "content": "#include <dlfcn.h>\n#include <stdio.h>\n#include <stdlib.h>\n\nint main(int argc, char **argv) {\n    if (argc < 2) {\n        fprintf(stderr, \"usage: %s <path-to-go-shared-lib>\\n\", argv[0]);\n        return 1;\n    }\n\n    void *handle = dlopen(argv[1], RTLD_NOW);\n    if (!handle) {\n        fprintf(stderr, \"dlopen failed: %s\\n\", dlerror());\n        return 1;\n    }\n\n    int (*goFunc)() = (int (*)())dlsym(handle, \"GoFunction\");\n    if (!goFunc) {\n        fprintf(stderr, \"dlsym failed: %s\\n\", dlerror());\n        dlclose(handle);\n        return 1;\n    }\n\n    int result = goFunc();\n    printf(\"result: %d\\n\", result);\n\n    dlclose(handle);\n    return 0;\n}\n"
  },
  {
    "path": "_fixtures/goroutineLabels.go",
    "content": "package main\n\nimport (\n\t\"context\"\n\t\"runtime\"\n\t\"runtime/pprof\"\n)\n\nfunc main() {\n\tctx := context.Background()\n\tlabels := pprof.Labels(\"k1\", \"v1\", \"k2\", \"v2\")\n\truntime.Breakpoint()\n\tpprof.Do(ctx, labels, f)\n}\n\nvar dummy int\n\nfunc f(ctx context.Context) {\n\ta := dummy\n\truntime.Breakpoint()\n\tdummy++\n\tdummy = a\n}"
  },
  {
    "path": "_fixtures/goroutine_start_line.star",
    "content": "def command_goroutine_start_line(args):\n\t\"prints the line of source code that started each currently running goroutine\"\n\tgs = goroutines().Goroutines\n\tfor g in gs:\n\t\tif g.StartLoc.File != \"\":\n\t\t\tline = read_file(g.StartLoc.File).splitlines()[g.StartLoc.Line-1].strip()\n\t\telse:\n\t\t\tline = \"<nothing>\"\n\t\tprint(g.ID, \"\\t\", g.StartLoc.File + \":\" + str(g.StartLoc.Line), \"\\t\", line)\n\ndef main():\n\tdlv_command(\"config alias goroutine_start_line gsl\")\n"
  },
  {
    "path": "_fixtures/goroutinebreak.go",
    "content": "package main\n\nimport \"runtime\"\n\nconst N = 10\n\nfunc agoroutine(started chan<- struct{}, done chan<- struct{}, i int) {\n\tstarted <- struct{}{}\n\tdone <- struct{}{}\n}\n\nfunc main() {\n\tdone := make(chan struct{})\n\tstarted := make(chan struct{})\n\tfor i := 0; i < N; i++ {\n\t\truntime.Breakpoint()\n\t\tgo agoroutine(started, done, i)\n\t}\n\tfor i := 0; i < N; i++ {\n\t\t<-started\n\t}\n\truntime.Gosched()\n\tfor i := 0; i < N; i++ {\n\t\t<-done\n\t}\n}\n"
  },
  {
    "path": "_fixtures/goroutinegroup.go",
    "content": "package main\n\nimport (\n\t\"context\"\n\t\"runtime\"\n\t\"runtime/pprof\"\n\t\"sync\"\n\t\"time\"\n)\n\nfunc sleepyfunc(wg *sync.WaitGroup, lbl string) {\n\tdefer wg.Done()\n\tpprof.SetGoroutineLabels(pprof.WithLabels(context.Background(), pprof.Labels(\"name\", lbl)))\n\ttime.Sleep(10 * 60 * time.Second)\n}\n\nfunc gopoint1(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) {\n\tgo f(wg, lbl)\n}\n\nfunc gopoint2(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) {\n\tgo f(wg, lbl)\n}\n\nfunc gopoint3(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) {\n\tgo f(wg, lbl)\n}\n\nfunc gopoint4(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) {\n\tgo f(wg, lbl)\n}\n\nfunc gopoint5(wg *sync.WaitGroup, lbl string, f func(*sync.WaitGroup, string)) {\n\tgo f(wg, lbl)\n}\n\nfunc startpoint1(wg *sync.WaitGroup, lbl string) {\n\tsleepyfunc(wg, lbl)\n}\n\nfunc startpoint2(wg *sync.WaitGroup, lbl string) {\n\tsleepyfunc(wg, lbl)\n}\n\nfunc startpoint3(wg *sync.WaitGroup, lbl string) {\n\tsleepyfunc(wg, lbl)\n}\n\nfunc startpoint4(wg *sync.WaitGroup, lbl string) {\n\tsleepyfunc(wg, lbl)\n}\n\nfunc startpoint5(wg *sync.WaitGroup, lbl string) {\n\tsleepyfunc(wg, lbl)\n}\n\nfunc main() {\n\tvar wg sync.WaitGroup\n\n\tfor _, lbl := range []string{\"one\", \"two\", \"three\", \"four\", \"five\"} {\n\t\tfor _, f := range []func(*sync.WaitGroup, string){startpoint1, startpoint2, startpoint3, startpoint4, startpoint5} {\n\t\t\tfor i := 0; i < 10; i++ {\n\t\t\t\twg.Add(5)\n\t\t\t\tgopoint1(&wg, lbl, f)\n\t\t\t\tgopoint2(&wg, lbl, f)\n\t\t\t\tgopoint3(&wg, lbl, f)\n\t\t\t\tgopoint4(&wg, lbl, f)\n\t\t\t\tgopoint5(&wg, lbl, f)\n\t\t\t}\n\t\t}\n\t}\n\ttime.Sleep(10 * time.Millisecond)\n\truntime.Breakpoint()\n\twg.Wait()\n}\n"
  },
  {
    "path": "_fixtures/goroutines-trace.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n)\n\nfunc callme(i int, s string) int {\n\tfmt.Println(s)\n\treturn i * i\n}\n\nfunc dostuff(wg *sync.WaitGroup, lbl string) {\n\tdefer wg.Done()\n\tvar j int\n\tfor i := 0; i < 10; i++ {\n\t\tj += callme(i, lbl)\n\t}\n\tprintln(lbl, j)\n}\n\nfunc main() {\n\tvar wg sync.WaitGroup\n\n\tfor _, lbl := range []string{\"one\", \"two\", \"three\", \"four\", \"five\"} {\n\t\tfor i := 0; i < 10; i++ {\n\t\t\twg.Add(1)\n\t\t\tgo dostuff(&wg, lbl)\n\t\t}\n\t}\n\twg.Wait()\n}\n"
  },
  {
    "path": "_fixtures/goroutinestackprog.go",
    "content": "package main\n\nimport \"runtime\"\n\nconst N = 10\n\nfunc agoroutine(started chan<- struct{}, done chan<- struct{}, i int) {\n\tstarted <- struct{}{}\n\tdone <- struct{}{}\n}\n\nvar dummy int\n\nfunc stacktraceme() {\n\tdummy++\n\treturn\n}\n\nfunc main() {\n\tdone := make(chan struct{})\n\tstarted := make(chan struct{})\n\tfor i := 0; i < N; i++ {\n\t\tgo agoroutine(started, done, i)\n\t}\n\tfor i := 0; i < N; i++ {\n\t\t<-started\n\t}\n\truntime.Gosched()\n\tstacktraceme()\n\tfor i := 0; i < N; i++ {\n\t\t<-done\n\t}\n\tn := 0\n\tfunc1(n + 1)\n}\n\nfunc func1(n int) {\n\tfunc2(n + 1)\n}\n\nfunc func2(n int) {\n\tfunc3(n + 1)\n}\n\nfunc func3(n int) {\n\tstacktraceme()\n}\n"
  },
  {
    "path": "_fixtures/hcbpcountstest.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"runtime\"\n\t\"sync\"\n\t\"time\"\n)\n\nfunc demo(id int, wait *sync.WaitGroup) {\n\tfor i := 0; i < 100; i++ {\n\t\tsleep := rand.Intn(10) + 1\n\t\truntime.Breakpoint()\n\t\tfmt.Printf(\"id: %d step: %d sleeping %d\\n\", id, i, sleep)\n\t\ttime.Sleep(time.Duration(sleep) * time.Millisecond)\n\t}\n\n\twait.Done()\n}\n\nfunc main() {\n\twait := new(sync.WaitGroup)\n\twait.Add(1)\n\twait.Add(1)\n\tgo demo(1, wait)\n\tgo demo(2, wait)\n\n\twait.Wait()\n}\n"
  },
  {
    "path": "_fixtures/http_server.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n)\n\nfunc main() {\n\thttp.HandleFunc(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tfmt.Fprintf(w, \"hello world\")\n\t})\n\thttp.ListenAndServe(\":0\", nil)\n}\n"
  },
  {
    "path": "_fixtures/ifaceembcall.go",
    "content": "package main\n\nimport \"fmt\"\n\ntype A struct {\n\ta int\n}\n\ntype B struct {\n\t*A\n}\n\ntype Iface interface {\n\tPtrReceiver() string\n\tNonPtrReceiver() string\n}\n\nfunc (*A) PtrReceiver() string {\n\treturn \"blah\"\n}\n\nfunc (A) NonPtrReceiver() string {\n\treturn \"blah\"\n}\n\nfunc main() {\n\tvar iface Iface = &B{&A{1}}\n\ts := iface.PtrReceiver()\n\ts = iface.NonPtrReceiver()\n\tfmt.Printf(\"%s\\n\", s)\n}\n"
  },
  {
    "path": "_fixtures/increment.go",
    "content": "package main\n\nimport \"fmt\"\n\n// Increment Natural number y\nfunc Increment(y uint) uint {\n\tif y == 0 {\n\t\treturn 1\n\t}\n\tif y%2 == 1 {\n\t\treturn (2 * Increment(y/2))\n\t}\n\treturn y + 1\n}\n\nfunc main() {\n\tfmt.Printf(\"%d\\n\", Increment(3))\n}\n"
  },
  {
    "path": "_fixtures/inlinestripped.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc callme(i int) int {\n\treturn i * i\n}\n\nfunc main() {\n\tj := 0\n\tj += callme(2)\n\tfmt.Println(j)\n\tfmt.Println(j + 1)\n\tfmt.Println(j + 2)\n}\n"
  },
  {
    "path": "_fixtures/integrationprog.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc sayhi() {\n\tfmt.Println(\"hi\")\n}\n\nfunc main() {\n\ttime.Sleep(1 * time.Second)\n\tfor i := 0; i < 3; i++ {\n\t\tsayhi()\n\t\ttime.Sleep(1 * time.Second)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/internal/dir.io/dir.go",
    "content": "package dirio\n\ntype SomeType struct {\n\tX int\n}\n\nvar A string = \"something\"\n\nfunc SomeFunction() {\n\tprintln(\"hello world\")\n}\n"
  },
  {
    "path": "_fixtures/internal/dir.io/io.io/io.go",
    "content": "package ioio\n\ntype SomeOtherType struct {\n\tY int\n}\n"
  },
  {
    "path": "_fixtures/internal/dir0/pkg/main.go",
    "content": "package pkg\n\nvar A = 0\n\ntype SomeType struct {\n\tX float64\n}\n\nfunc (s *SomeType) AMethod(x int) int {\n\treturn x + 3\n}\n\nfunc (s *SomeType) AnotherMethod(x int) int {\n\treturn x + 4\n}\n\nvar SomeVar SomeType\n\nconst (\n\tSomeConst int = 2\n)\n"
  },
  {
    "path": "_fixtures/internal/dir0/renamedpackage/main.go",
    "content": "package realname\n\ntype SomeType struct {\n\tA bool\n}\n"
  },
  {
    "path": "_fixtures/internal/dir1/pkg/main.go",
    "content": "package pkg\n\nvar A = 1\n\ntype SomeType struct {\n\tX int\n\tY int\n}\n"
  },
  {
    "path": "_fixtures/internal/pluginsupport/pluginsupport.go",
    "content": "package pluginsupport\n\ntype Something interface {\n\tCallback(int) int\n}\n\ntype SomethingElse interface {\n\tCallback2(int, int) float64\n}\n"
  },
  {
    "path": "_fixtures/is sue239.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n)\n\nfunc fibonacci(n int, c chan int) {\n\tx, y := 0, 1\n\tfor i := 0; i < n; i++ {\n\t\tc <- x\n\t\tx, y = y, x+y\n\t}\n\tclose(c)\n}\n\nfunc main() {\n\ta := struct { // set breakpoint here\n\t\tA string\n\t\tB int\n\t}{A: \"demo\", B: 10}\n\tfmt.Printf(\"%#v\\n\", a)\n\n\tc := make(chan int, 10)\n\tgo fibonacci(cap(c), c)\n\tfor i := range c {\n\t\tfmt.Println(i)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/issue1101.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\t\"sync\"\n)\n\nvar wg sync.WaitGroup\n\nfunc f(from string) {\n\tdefer wg.Done()\n\treturn\n}\n\nfunc main() {\n\twg.Add(1)\n\tgo f(\"goroutine\")\n\twg.Wait()\n\tos.Exit(2)\n}\n"
  },
  {
    "path": "_fixtures/issue1264.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tfor i := 0; i < 4; i++ {\n\t\tequalsTwo := i == 2\n\t\tfmt.Printf(\"i: %d -> equalsTwo: %t \\n\", i, equalsTwo) // :8\n\t}\n}\n"
  },
  {
    "path": "_fixtures/issue1374.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\ti := getNum()\n\tfmt.Println(i)\n}\n\nfunc getNum() int {\n\treturn 0\n}\n"
  },
  {
    "path": "_fixtures/issue1432.go",
    "content": "package main\n\nimport \"runtime\"\n\ntype s struct {\n\ti int64\n}\n\nfunc main() {\n\ti := 1\n\tp := &i\n\ts := s{i: 1}\n\t_ = s\n\truntime.Breakpoint()\n\tprintln(i, p)\n}\n"
  },
  {
    "path": "_fixtures/issue1469.go",
    "content": "package main\n\nimport \"time\"\n\nfunc main() {\n\tfor i := 0; i < 5; i++ {\n\t\tgo func() {\n\t\t\ttime.Sleep(11 * time.Millisecond)\n\t\t}()\n\t}\n\n\tx := 255\n\tprintln(x) //break\n}\n"
  },
  {
    "path": "_fixtures/issue1531.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\ntype W struct {\n\tx int\n\ty int\n}\n\nfunc main() {\n\ttestMaps()\n}\n\nfunc testMaps() {\n\n\tm := make(map[string]W)\n\n\tm[\"t\"] = W{}\n\tm[\"s\"] = W{}\n\tm[\"r\"] = W{}\n\tm[\"v\"] = W{}\n\n\tmm := map[string]W{\n\t\t\"r\": {},\n\t\t\"s\": {},\n\t\t\"t\": {},\n\t\t\"v\": {},\n\t}\n\n\tdelete(mm, \"s\")\n\tdelete(m, \"t\")\n\truntime.Breakpoint()\n\tfmt.Println(m, mm)\n}\n"
  },
  {
    "path": "_fixtures/issue1549.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc main() {\n\tsum := int64(0)\n\tstart := time.Now()\n\tfor value := int64(0); value < 10000; value++ {\n\t\tsum += value\n\t}\n\telapsed := time.Since(start)\n\tfmt.Printf(\"Sum: %d\\nTook %s\\n\", sum, elapsed)\n}\n"
  },
  {
    "path": "_fixtures/issue1598.go",
    "content": "package main\n\nfunc main() {\n\ta := x()\n\tprintln(a) //break here\n}\n\nfunc x() string {\n\treturn `Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut \nlabore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut \naliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum \ndolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui \nofficia deserunt mollit anim id est laborum.`\n}\n"
  },
  {
    "path": "_fixtures/issue1601.go",
    "content": "package main\n\nimport (\n\t\"runtime\"\n)\n\n/*\ntypedef struct Qst Q1;\ntypedef const Q1 Q;\nstruct Qst {\n\tQ *q;\n};\n\nconst Q1 globalq;\n*/\nimport \"C\"\n\nfunc main() {\n\truntime.Breakpoint()\n}\n"
  },
  {
    "path": "_fixtures/issue1615.go",
    "content": "package main\n\nvar strings = []string{\n\t\"one\",\n\t\"two\",\n\t\"three\",\n\t\"four\",\n\t\"projects/my-gcp-project-id-string/locations/us-central1/queues/my-task-queue-name\",\n\t\"five\",\n\t\"six\",\n}\n\nfunc f(s string) {\n\t// ...\n}\n\nfunc main() {\n\tfor _, s := range strings {\n\t\tf(s)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/issue1656/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n)\n\nvar g int = 0\n\nfunc compromised(n int64)\n\n//go:nosplit\nfunc skipped() {\n\tg++\n}\n\nfunc main() {\n\tcompromised(1)\n\tfmt.Printf(\"%d\\n\", g)\n}\n"
  },
  {
    "path": "_fixtures/issue1656/main.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·compromised(SB),NOSPLIT,$0-8\n\tCMPQ n+0(FP), $0\n\tJNZ notzero\n\tRET\nnotzero:\n\tMOVQ $0, AX\n\tMOVQ $1, AX\n\tCALL main·skipped(SB)\n\tRET\n\t"
  },
  {
    "path": "_fixtures/issue1795.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"runtime\"\n)\n\nfunc main() {\n\tr := regexp.MustCompile(\"ab\")\n\truntime.Breakpoint()\n\tout := r.MatchString(\"blah\")\n\tfmt.Printf(\"%v\\n\", out)\n}\n"
  },
  {
    "path": "_fixtures/issue1817.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"unsafe\"\n)\n\nfunc main() {\n\tl := int(51)\n\tbs := make([]byte, l)\n\tfor i := 0; i < l; i++ {\n\t\tbs[i] = byte(i + int(10))\n\t}\n\n\tp := uintptr(unsafe.Pointer(&bs))\n\n\tfmt.Println(p)\n\n\tbs[0] = 254\n\n\truntime.KeepAlive(bs)\n}\n"
  },
  {
    "path": "_fixtures/issue2023.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc A() {\n\tfmt.Printf(\"hello delve\\n\")\n}\n\nfunc main() {\n\tcount := 0\n\tfor {\n\t\tA()\n\t\ttime.Sleep(time.Millisecond * time.Duration(100))\n\t\tif count >= 30 {\n\t\t\tbreak\n\t\t}\n\t\tcount++\n\t}\n}\n"
  },
  {
    "path": "_fixtures/issue2078.go",
    "content": "package main\n\nfunc main() {\n\tf(nil) //break\n\tprintln(\"ok\")\n}\n\nfunc f(x *int) {\n\tprintln(*x)\n}\n"
  },
  {
    "path": "_fixtures/issue2086.go",
    "content": "package main\n\nimport (\n\t\"runtime\"\n)\n\nvar i int\n\ntype T struct{}\n\nfunc (t T) m() { stop() }\n\nfunc stop() {\n\truntime.Breakpoint()\n\ti++\n}\n\nfunc main() { T{}.m() }\n"
  },
  {
    "path": "_fixtures/issue2113.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"sync\"\n)\n\nfunc coroutine(i int, start, finish *sync.WaitGroup) {\n\tdefer finish.Done()\n\n\tj := i * 2\n\n\tif i == 99 {\n\t\truntime.Breakpoint()\n\t\tstart.Done()\n\t} else {\n\t\tstart.Wait()\n\t}\n\n\tfmt.Println(\"hello \", i, j)\n\tfmt.Println(\"goodbye\", i, j)\n}\n\nfunc main() {\n\ti := 0\n\tvar start, finish sync.WaitGroup\n\tstart.Add(1)\n\tfor ; i < 100; i++ {\n\t\tfinish.Add(1)\n\t\tgo coroutine(i, &start, &finish)\n\t}\n\tfinish.Wait()\n\tprintln(i)\n}\n"
  },
  {
    "path": "_fixtures/issue2138.go",
    "content": "package main\n\nimport (\n\t\"time\"\n)\n\nfunc main() {\n\ttime.Sleep(time.Hour)\n\tprintln(\"ok\")\n}\n"
  },
  {
    "path": "_fixtures/issue2162.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Println(\"test dlv\")\n}\n"
  },
  {
    "path": "_fixtures/issue2319/README.txt",
    "content": "\nNote:\n-----\n\ncfile-linux-amd64.syso was generated from the C source file that appears below.\n\nBuild with Clang version 10:\n\n $ clang-10 -O -gdwarf-5 -c cfile.c -o cfile.syso\n\nThe DWARF of interest is for the function \"qtop\". Triggering the bug\nrequires that the source file in question appears as the first item\nin the DWARF line table file section, e.g.\n\n$ llvm-dwarfdump-10 --debug-line cfile.syso\n....\nstandard_opcode_lengths[DW_LNS_set_epilogue_begin] = 0\nstandard_opcode_lengths[DW_LNS_set_isa] = 1\ninclude_directories[  0] = \"/ssd2/go1/src/tmp/dlvbug\"\nfile_names[  0]:\n           name: \"cfile.c\"\n      dir_index: 0\n   md5_checksum: ...\n\n\n// ------------------------begin source code for cfile.c----------------\n\n#include <stdlib.h>\n#include <string.h>\n\nint glob = 99;\n\ninline int qleaf(int lx, int ly, int *lv)\n{\n  lv[lx&3] += 3;\n  return lv[ly&3];\n}\n\nint qmid(int mx, int my, int *lv, int *mv)\n{\n  mv[mx&3] += qleaf(mx, my, lv);\n  return mv[my&3];\n}\n\nint qtop(int mx, int my)\n{\n  int mv[64], lv[66], n = (mx < 64 ? 64 : mx);\n\n  memset(&mv[0], 9, sizeof(mv));\n  memset(&lv[0], 11, sizeof(mv));\n  return qmid(mx, my, lv, mv) + qleaf(mx, my, lv);\n}\n\nvoid Cfunc(int x) {\n  glob += qtop(x, 43);\n}\n\n"
  },
  {
    "path": "_fixtures/issue2319/asm-linux-amd64.s",
    "content": "\n#include \"textflag.h\"\n\nTEXT ·cfunc(SB),$0\n        JMP Cfunc(SB)\n"
  },
  {
    "path": "_fixtures/issue2319/main.go",
    "content": "package main\n\nfunc cfunc()\n\nfunc main() {\n\tcfunc()\n}\n"
  },
  {
    "path": "_fixtures/issue262.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc typicalFunction() (res int) {\n\tdefer func() {\n\t\tres = 2\n\t\treturn\n\t}()\n\tres = 10\n\treturn // setup breakpoint here\n}\n\nfunc main() {\n\tfmt.Println(typicalFunction())\n}\n"
  },
  {
    "path": "_fixtures/issue2896.go",
    "content": "package main\n\n// Vehicle defines the vehicle behavior\ntype Vehicle interface {\n\t// Run vehicle can run in a speed\n\tRun()\n}\n\n// BMWS1000RR defines the motorcycle bmw s1000rr\ntype BMWS1000RR struct {\n}\n\n// Run bwm s1000rr run\nfunc (a *BMWS1000RR) Run() {\n\tprintln(\"I can run at 300km/h\")\n}\n\nfunc main() {\n\tvar vehicle Vehicle = &BMWS1000RR{}\n\tvehicle.Run()\n}\n"
  },
  {
    "path": "_fixtures/issue305.go",
    "content": "package main\n\nfunc main() {\n\tfor i := 0; i < 10; i++ {\n\t\tprintln(i)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/issue3194.go",
    "content": "package main\n\n/*\n#cgo LDFLAGS: -framework CoreFoundation\n#cgo LDFLAGS: -framework CFNetwork\n#include <CFNetwork/CFProxySupport.h>\n*/\nimport \"C\"\nimport \"fmt\"\n\nfunc main() {\n\tf() // break here\n}\n\nfunc f() {\n\tfmt.Println(\"ok\")\n}\n"
  },
  {
    "path": "_fixtures/issue3310.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\nvar i = 2\nvar val = reflect.ValueOf(i)\n\nfunc reflectFunc(value reflect.Value) {\n\tfmt.Printf(\"%s\\n\", value.Type().Name())\n}\n\nfunc main() {\n\treflectFunc(val)\n\tfmt.Println(&i)\n}\n"
  },
  {
    "path": "_fixtures/issue332.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tm := make([]string, 1, 25)\n\tfmt.Println(m) // [ ]\n\tchangeMe(m)\n\tfmt.Println(m) // [Todd]\n}\n\nfunc changeMe(z []string) {\n\tz[0] = \"Todd\"\n\tfmt.Println(z) // [Todd]\n}\n"
  },
  {
    "path": "_fixtures/issue3548.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n)\n\ntype Thing struct {\n\tstr string\n}\n\nfunc (d *Thing) Test() bool {\n\treturn d != nil\n}\n\nfunc callit(f func()) {\n\tf()\n}\n\nfunc main() {\n\tcases := []struct {\n\t\tname  string\n\t\tthing Thing\n\t}{\n\t\t{\n\t\t\tname:  \"Success\",\n\t\t\tthing: Thing{str: \"hello\"},\n\t\t},\n\t}\n\n\tfor _, c := range cases {\n\t\tcallit(func() {\n\t\t\tfmt.Println(\"hello\", c.thing.Test())\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "_fixtures/issue384.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\nfunc main() {\n\ttype S struct {\n\t\tF string `species:\"gopher\" color:\"blue\"`\n\t}\n\n\ts := S{}\n\tst := reflect.TypeOf(s)\n\tfield := st.Field(0)\n\tfmt.Println(field.Tag.Get(\"color\"), field.Tag.Get(\"species\"))\n}\n"
  },
  {
    "path": "_fixtures/issue387.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n)\n\nfunc dostuff(id int, wg *sync.WaitGroup) {\n\tfmt.Println(\"goroutine:\", id)\n\tfmt.Println(\"goroutine:\", id)\n\twg.Done()\n}\n\nfunc main() {\n\tvar wg sync.WaitGroup\n\twg.Add(10)\n\tfor i := 0; i < 10; i++ {\n\t\tgo dostuff(i, &wg)\n\t}\n\twg.Wait()\n}\n"
  },
  {
    "path": "_fixtures/issue4000.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tvar test = \"a string\"\n\tvar f = func() {\n\t\ttest = \"another string\"\n\t\tfmt.Println(\"test\", test)\n\t}\n\tfmt.Println(test)\n\tf()\n\tfmt.Println(test)\n}\n"
  },
  {
    "path": "_fixtures/issue4051.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nvar os = func() func() {\n\ta := 1\n\treturn func() {\n\t\tfmt.Println(a)\n\t\ta++\n\t}\n}()\n\nfunc Hello(name string) string {\n\tmsg := \"Hello, \" + name\n\tfmt.Println(msg)\n\treturn msg\n}\n\nfunc f(i int) func() {\n\treturn func() {\n\t\tfmt.Println(\"Function f called with:\", i)\n\t}\n}\n\nfunc main() {\n\tfmt.Println(\"Program started\")\n\tfmt.Println(\"Ready for Delve call\")\n\truntime.Breakpoint()\n\n\ttype m struct {\n\t\tHello string\n\t}\n\tmain := m{\n\t\tHello: \"World\",\n\t}\n\tfmt.Println(main.Hello)\n\tfn := f(42)\n\truntime.Breakpoint()\n\tfn()\n\n\tos()\n}\n"
  },
  {
    "path": "_fixtures/issue406.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"regexp\"\n\t\"strings\"\n\n\t//\t\"golang.org/x/crypto/ssh/terminal\"\n)\n\n// Blacklist type is a map of Nodes with string keys\ntype Blacklist map[string]*Node\n\n// Source type is a map of Srcs with string keys\ntype Source map[string]*Src\n\n// Node configuration record\ntype Node struct {\n\tDisable          bool\n\tIP               string\n\tInclude, Exclude []string\n\tSource\n}\n\n// Src record, struct for Source map\ntype Src struct {\n\tDisable bool\n\tDesc    string\n\tPrfx    string\n\tURL     string\n}\n\n// String returns pretty print for the Blacklist struct\nfunc (b Blacklist) String() (result string) {\n\t//\tcols, _, _ := terminal.GetSize(int(os.Stdout.Fd()))\n\tcols := 20\n\tfor pkey := range b {\n\t\tresult += fmt.Sprintf(\"Node: %v\\n\\tDisabled: %v\\n\", pkey, b[pkey].Disable)\n\t\tresult += fmt.Sprintf(\"\\tRedirect IP: %v\\n\\tExclude(s):\\n\", b[pkey].IP)\n\t\tfor _, exclude := range b[pkey].Exclude {\n\t\t\tresult += fmt.Sprintf(\"\\t\\t%v\\n\", exclude)\n\t\t}\n\t\tresult += fmt.Sprintf(\"\\tInclude(s):\\n\")\n\t\tfor _, include := range b[pkey].Include {\n\t\t\tresult += fmt.Sprintf(\"\\t\\t%v\\n\", include)\n\t\t}\n\t\tfor skey, src := range b[pkey].Source {\n\t\t\tresult += fmt.Sprintf(\"\\tSource: %v\\n\\t\\tDisabled: %v\\n\", skey, src.Disable)\n\t\t\tresult += fmt.Sprintf(\"\\t\\tDescription: %v\\n\", b[pkey].Source[skey].Desc)\n\t\t\tresult += fmt.Sprintf(\"\\t\\tPrefix: %v\\n\\t\\tURL: %v\\n\", b[pkey].Source[skey].Prfx, b[pkey].Source[skey].URL)\n\t\t}\n\t\tresult += fmt.Sprintln(strings.Repeat(\"-\", cols/2))\n\t}\n\treturn result\n}\n\n// ToBool converts a string (\"true\" or \"false\") to its boolean equivalent\nfunc ToBool(s string) (b bool) {\n\tif len(s) == 0 {\n\t\tlog.Fatal(\"ERROR: variable empty, cannot convert to boolean\")\n\t}\n\tswitch s {\n\tcase \"false\":\n\t\tb = false\n\tcase \"true\":\n\t\tb = true\n\t}\n\treturn b\n}\n\n// Get extracts nodes from a EdgeOS/VyOS configuration structure\nfunc Get(cfg string) {\n\ttype re struct {\n\t\tbrkt, cmnt, desc, dsbl, leaf, misc, mlti, mpty, name, node *regexp.Regexp\n\t}\n\n\trx := &re{}\n\trx.brkt = regexp.MustCompile(`[}]`)\n\trx.cmnt = regexp.MustCompile(`^([\\/*]+).*([*\\/]+)$`)\n\trx.desc = regexp.MustCompile(`^(?:description)+\\s\"?([^\"]+)?\"?$`)\n\trx.dsbl = regexp.MustCompile(`^(disabled)+\\s([\\S]+)$`)\n\trx.leaf = regexp.MustCompile(`^(source)+\\s([\\S]+)\\s[{]{1}$`)\n\trx.misc = regexp.MustCompile(`^([\\w-]+)$`)\n\trx.mlti = regexp.MustCompile(`^((?:include|exclude)+)\\s([\\S]+)$`)\n\trx.mpty = regexp.MustCompile(`^$`)\n\trx.name = regexp.MustCompile(`^([\\w-]+)\\s([\\S]+)$`)\n\trx.node = regexp.MustCompile(`^([\\w-]+)\\s[{]{1}$`)\n\n\tcfgtree := make(map[string]*Node)\n\n\tvar tnode string\n\tvar leaf string\n\n\tfor _, line := range strings.Split(cfg, \"\\n\") {\n\t\tline = strings.TrimSpace(line)\n\t\tswitch {\n\t\tcase rx.mlti.MatchString(line):\n\t\t\t{\n\t\t\t\tIncExc := rx.mlti.FindStringSubmatch(line)\n\t\t\t\tswitch IncExc[1] {\n\t\t\t\tcase \"exclude\":\n\t\t\t\t\tcfgtree[tnode].Exclude = append(cfgtree[tnode].Exclude, IncExc[2])\n\t\t\t\tcase \"include\":\n\t\t\t\t\tcfgtree[tnode].Include = append(cfgtree[tnode].Include, IncExc[2])\n\t\t\t\t}\n\t\t\t}\n\t\tcase rx.node.MatchString(line):\n\t\t\t{\n\t\t\t\tnode := rx.node.FindStringSubmatch(line)\n\t\t\t\ttnode = node[1]\n\t\t\t\tcfgtree[tnode] = &Node{}\n\t\t\t\tcfgtree[tnode].Source = make(map[string]*Src)\n\t\t\t}\n\t\tcase rx.leaf.MatchString(line):\n\t\t\tsrc := rx.leaf.FindStringSubmatch(line)\n\t\t\tleaf = src[2]\n\n\t\t\tif src[1] == \"source\" {\n\t\t\t\tcfgtree[tnode].Source[leaf] = &Src{}\n\t\t\t}\n\t\tcase rx.dsbl.MatchString(line):\n\t\t\t{\n\t\t\t\tdisabled := rx.dsbl.FindStringSubmatch(line)\n\t\t\t\tcfgtree[tnode].Disable = ToBool(disabled[1])\n\t\t\t}\n\t\tcase rx.name.MatchString(line):\n\t\t\t{\n\t\t\t\tname := rx.name.FindStringSubmatch(line)\n\t\t\t\tswitch name[1] {\n\t\t\t\tcase \"prefix\":\n\t\t\t\t\tcfgtree[tnode].Source[leaf].Prfx = name[2]\n\t\t\t\tcase \"url\":\n\t\t\t\t\tcfgtree[tnode].Source[leaf].URL = name[2]\n\t\t\t\tcase \"description\":\n\t\t\t\t\tcfgtree[tnode].Source[leaf].Desc = name[2]\n\t\t\t\tcase \"dns-redirect-ip\":\n\t\t\t\t\tcfgtree[tnode].IP = name[2]\n\t\t\t\t}\n\t\t\t}\n\t\tcase rx.desc.MatchString(line) || rx.cmnt.MatchString(line) || rx.misc.MatchString(line):\n\t\t\tbreak\n\t\t}\n\t\t// fmt.Printf(\"%s\\n\", line)\n\t}\n\tfmt.Println(cfgtree)\n}\n\nfunc main() {\n\tcfgtree := make(Blacklist)\n\tfor _, k := range []string{\"root\", \"hosts\", \"domains\"} {\n\t\tcfgtree[k] = &Node{}\n\t\tcfgtree[k].Source = make(Source)\n\t}\n\tcfgtree[\"hosts\"].Exclude = append(cfgtree[\"hosts\"].Exclude, \"rackcdn.com\", \"schema.org\")\n\tcfgtree[\"hosts\"].Include = append(cfgtree[\"hosts\"].Include, \"msdn.com\", \"badgits.org\")\n\tcfgtree[\"hosts\"].IP = \"192.168.168.1\"\n\tcfgtree[\"hosts\"].Source[\"hpHosts\"] = &Src{URL: \"http://www.bonzon.com\", Prfx: \"127.0.0.0\"}\n\tfmt.Println(cfgtree)\n\tfmt.Println(cfgtree[\"hosts\"])\n\tGet(testdata)\n}\n\nvar testdata = `blacklist {\n\t\t\tdisabled false\n\t\t\tdns-redirect-ip 0.0.0.0\n\t\t\tdomains {\n\t\t\t\t\tinclude adsrvr.org\n\t\t\t\t\tinclude adtechus.net\n\t\t\t\t\tinclude advertising.com\n\t\t\t\t\tinclude centade.com\n\t\t\t\t\tinclude doubleclick.net\n\t\t\t\t\tinclude free-counter.co.uk\n\t\t\t\t\tinclude intellitxt.com\n\t\t\t\t\tinclude kiosked.com\n\t\t\t\t\tsource malc0de {\n\t\t\t\t\t\t\tdescription \"List of zones serving malicious executables observed by malc0de.com/database/\"\n\t\t\t\t\t\t\tprefix \"zone \"\n\t\t\t\t\t\t\turl http://malc0de.com/bl/ZONES\n\t\t\t\t\t}\n\t\t\t}\n\t\t\texclude 122.2o7.net\n\t\t\texclude 1e100.net\n\t\t\texclude adobedtm.com\n\t\t\texclude akamai.net\n\t\t\texclude amazon.com\n\t\t\texclude amazonaws.com\n\t\t\texclude apple.com\n\t\t\texclude ask.com\n\t\t\texclude avast.com\n\t\t\texclude bitdefender.com\n\t\t\texclude cdn.visiblemeasures.com\n\t\t\texclude cloudfront.net\n\t\t\texclude coremetrics.com\n\t\t\texclude edgesuite.net\n\t\t\texclude freedns.afraid.org\n\t\t\texclude github.com\n\t\t\texclude githubusercontent.com\n\t\t\texclude google.com\n\t\t\texclude googleadservices.com\n\t\t\texclude googleapis.com\n\t\t\texclude googleusercontent.com\n\t\t\texclude gstatic.com\n\t\t\texclude gvt1.com\n\t\t\texclude gvt1.net\n\t\t\texclude hb.disney.go.com\n\t\t\texclude hp.com\n\t\t\texclude hulu.com\n\t\t\texclude images-amazon.com\n\t\t\texclude msdn.com\n\t\t\texclude paypal.com\n\t\t\texclude rackcdn.com\n\t\t\texclude schema.org\n\t\t\texclude skype.com\n\t\t\texclude smacargo.com\n\t\t\texclude sourceforge.net\n\t\t\texclude ssl-on9.com\n\t\t\texclude ssl-on9.net\n\t\t\texclude static.chartbeat.com\n\t\t\texclude storage.googleapis.com\n\t\t\texclude windows.net\n\t\t\texclude yimg.com\n\t\t\texclude ytimg.com\n\t\t\thosts {\n\t\t\t\t\tinclude beap.gemini.yahoo.com\n\t\t\t\t\tsource adaway {\n\t\t\t\t\t\t\tdescription \"Blocking mobile ad providers and some analytics providers\"\n\t\t\t\t\t\t\tprefix \"127.0.0.1 \"\n\t\t\t\t\t\t\turl http://adaway.org/hosts.txt\n\t\t\t\t\t}\n\t\t\t\t\tsource malwaredomainlist {\n\t\t\t\t\t\t\tdescription \"127.0.0.1 based host and domain list\"\n\t\t\t\t\t\t\tprefix \"127.0.0.1 \"\n\t\t\t\t\t\t\turl http://www.malwaredomainlist.com/hostslist/hosts.txt\n\t\t\t\t\t}\n\t\t\t\t\tsource openphish {\n\t\t\t\t\t\t\tdescription \"OpenPhish automatic phishing detection\"\n\t\t\t\t\t\t\tprefix http\n\t\t\t\t\t\t\turl https://openphish.com/feed.txt\n\t\t\t\t\t}\n\t\t\t\t\tsource someonewhocares {\n\t\t\t\t\t\t\tdescription \"Zero based host and domain list\"\n\t\t\t\t\t\t\tprefix 0.0.0.0\n\t\t\t\t\t\t\turl http://someonewhocares.org/hosts/zero/\n\t\t\t\t\t}\n\t\t\t\t\tsource volkerschatz {\n\t\t\t\t\t\t\tdescription \"Ad server blacklists\"\n\t\t\t\t\t\t\tprefix http\n\t\t\t\t\t\t\turl http://www.volkerschatz.com/net/adpaths\n\t\t\t\t\t}\n\t\t\t\t\tsource winhelp2002 {\n\t\t\t\t\t\t\tdescription \"Zero based host and domain list\"\n\t\t\t\t\t\t\tprefix \"0.0.0.0 \"\n\t\t\t\t\t\t\turl http://winhelp2002.mvps.org/hosts.txt\n\t\t\t\t\t}\n\t\t\t\t\tsource yoyo {\n\t\t\t\t\t\t\tdescription \"Fully Qualified Domain Names only - no prefix to strip\"\n\t\t\t\t\t\t\tprefix \"\"\n\t\t\t\t\t\t\turl http://pgl.yoyo.org/as/serverlist.php?hostformat=nohtml&showintro=1&mimetype=plaintext\n\t\t\t\t\t}\n\t\t\t}\n\t}`\n"
  },
  {
    "path": "_fixtures/issue4116.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\ntype A struct {\n}\n\nfunc (a *A) Model() string {\n\treturn \"A\"\n}\n\ntype B struct {\n\t*A\n\tModel string\n}\n\ntype A1 struct {\n\tX int\n}\n\ntype B1 struct {\n\t*A1\n}\n\nfunc (*B1) X() {}\n\ntype A2 struct {\n\tX int\n}\n\ntype B2 struct {\n\t*A2\n}\n\nfunc (*B2) X() {}\n\ntype C2 struct {\n\t*B2\n}\n\ntype A3 struct {\n\tX int\n}\n\ntype B3 struct {\n\t*A3\n}\n\nfunc (b *B3) X() {}\n\ntype C3 struct {\n\t*B3\n}\n\ntype TestX interface {\n\tX()\n}\n\ntype A4 struct {\n}\n\nfunc (a *A4) X() {}\n\ntype B4 struct {\n\tTestX\n}\n\ntype XFunc = func() string\n\ntype A5 struct {\n\tX XFunc\n}\n\ntype B5 struct {\n\tA5\n}\n\ntype C5 struct {\n\t*B5\n\tX int\n}\n\ntype Chan = chan struct{}\n\ntype A6 struct {\n\tChan\n}\n\ntype B7 struct {\n}\n\nfunc (b *B7) X() {}\n\ntype A7 struct {\n\t*B7\n}\n\ntype TestX1 interface {\n\tX()\n}\n\ntype B8 struct {\n}\n\nfunc (*B8) X() {}\n\ntype A8 struct {\n\tTestX\n}\n\ntype B9 struct {\n}\n\nfunc (*B9) X() {}\n\ntype A9 struct {\n\tV TestX\n}\n\ntype B10 struct {\n\tX int\n}\n\ntype A10 struct {\n\tB10\n}\n\nfunc main() {\n\tv := &B{Model: \"B\", A: &A{}}\n\tfmt.Println(v.Model, v.A.Model)\n\n\tv1 := &B1{A1: &A1{}}\n\tfmt.Println(v1.X, v1.A1.X)\n\n\tv2 := &C2{B2: &B2{A2: &A2{}}}\n\tfmt.Println(v2.X, v2.B2.X, v2.B2.A2.X, v2.A2.X)\n\n\tv3 := &C3{B3: &B3{A3: &A3{}}}\n\tfmt.Println(v3.X, v3.A3.X, v3.B3.X, v3.B3.A3.X)\n\n\tv4 := &B4{TestX: &A4{}}\n\tfmt.Println(v4.X, v4.TestX.X)\n\n\tv5 := C5{B5: &B5{A5: A5{X: func() string { return \"anonymous func\" }}}}\n\tfmt.Println(v5.X, v5.B5.X, v5.B5.A5.X, v5.A5.X)\n\n\tch := make(chan int)\n\tfmt.Println(ch)\n\n\tv6 := A6{Chan: make(chan struct{})}\n\tfmt.Println(v6.Chan)\n\n\tv7 := A7{}\n\tfmt.Print(v7.X, v7.B7.X)\n\n\tvar x TestX\n\tx = &A7{}\n\tfmt.Println(x.X, x.(*A7).X, x.(*A7).B7.X)\n\n\tvar x1 TestX\n\n\tfmt.Println(x1)\n\n\tvar (\n\t\tx2 TestX\n\t\tx3 TestX1\n\t)\n\n\tx3 = &A7{}\n\tx2 = x3\n\tfmt.Println(x2.X, x3.X)\n\n\tv8 := A8{TestX: &B8{}}\n\tfmt.Println(v8)\n\n\tv9 := A9{V: &B9{}}\n\tfmt.Println(v9.V.X)\n\n\ta := struct {\n\t\tTestX\n\t}{\n\t\tTestX: TestX(v8),\n\t}\n\n\tfmt.Println(a.X)\n\n\tb := struct {\n\t\tTestX\n\t}{\n\t\tTestX: TestX(nil),\n\t}\n\n\tfmt.Println(b)\n\n\tc := struct {\n\t\tA10\n\t\tTestX\n\t}{\n\t\tA10:   A10{B10{X: 1}},\n\t\tTestX: TestX(&v8),\n\t}\n\n\tfmt.Println(c.X)\n\n\td := struct {\n\t\tA10\n\t\tTestX\n\t}{\n\t\tA10:   A10{B10{X: 1}},\n\t\tTestX: TestX(nil),\n\t}\n\n\tfmt.Println(d)\n\n\truntime.Breakpoint() // breakpoint here\n}\n"
  },
  {
    "path": "_fixtures/issue419.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/signal\"\n)\n\nfunc main() {\n\n\tfmt.Println(\"Start\")\n\n\tsc := make(chan os.Signal, 1)\n\n\t//os.Interrupt, os.Kill\n\tsignal.Notify(sc, os.Interrupt, os.Kill)\n\n\tquit := <-sc\n\n\tfmt.Printf(\"Receive signal %s \\n\", quit.String())\n\n\tfmt.Println(\"End\")\n\n}\n"
  },
  {
    "path": "_fixtures/issue528.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/go-delve/liner\"\n)\n\nfunc main() {\n\tline := liner.NewLiner()\n\tline.Close()\n\tfmt.Printf(\"test\\n\")\n}\n"
  },
  {
    "path": "_fixtures/issue561.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc testfunction() {\n\tfmt.Printf(\"here!\\n\")\n}\n\nfunc main() {\n\ttestfunction()\n}\n"
  },
  {
    "path": "_fixtures/issue573.go",
    "content": "package main\n\n// A debugger test.\n//   dlv debug\n//   b main.foo\n//   c\n//   s\n//   s\n// Expect to be stopped in fmt.Printf or runtime.duffzero\n// In bug, s #2 runs to the process exit because the call\n// to duffzero enters duffzero well after the nominal entry\n// and skips the internal breakpoint placed by Step().\nimport \"fmt\"\n\nvar v int = 99\n\nfunc foo(x, y int) (z int) { // c stops here\n\tfmt.Printf(\"x=%d, y=%d, z=%d\\n\", x, y, z) // s #1 stops here; s #2 is supposed to stop in Printf or duffzero.\n\tz = x + y\n\treturn\n}\n\nfunc main() {\n\tx := v\n\ty := x * x\n\tz := foo(x, y)\n\tfmt.Printf(\"z=%d\\n\", z)\n}\n"
  },
  {
    "path": "_fixtures/issue594.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc dontsegfault() {\n\tvar p *int\n\tfunc() int {\n\t\tdefer func() {\n\t\t\trecover()\n\t\t}()\n\t\treturn *p\n\t}()\n}\n\nfunc main() {\n\tdontsegfault()\n\truntime.Breakpoint()\n\tfmt.Println(\"should stop here\")\n}\n"
  },
  {
    "path": "_fixtures/issue664.go",
    "content": "package main\n\nfunc asdfasdf() {\n\tfor i := 0; i < 5; i++ {\n\t\tfor i := 0; i < 5; i++ {\n\t\t\t//...\n\t\t}\n\t\t//...\n\t}\n}\n\nfunc main() {\n\tasdfasdf()\n}\n"
  },
  {
    "path": "_fixtures/issue683.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Println(\"adssd\") // put a breakpoint here\n}\n"
  },
  {
    "path": "_fixtures/issue871.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc main() {\n\ta := [3]int{1, 2, 3}\n\tb := &a\n\truntime.Breakpoint()\n\tfmt.Println(b, *b) // set breakpoint here\n}\n"
  },
  {
    "path": "_fixtures/issue877.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n)\n\nfunc main() {\n\tdyldenv := os.Getenv(\"DYLD_LIBRARY_PATH\")\n\truntime.Breakpoint()\n\tfmt.Println(dyldenv)\n}\n"
  },
  {
    "path": "_fixtures/issue951.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc main() {\n\tshadow(42)\n}\n\nfunc shadow(i int) {\n\tfor i := 0; i < 5; i++ {\n\t\tfor i := 20; i < 25; i++ {\n\t\t\truntime.Breakpoint()\n\t\t\tfmt.Println(\"another shadow\", i)\n\t\t}\n\t\tfmt.Println(\"shadow\", i)\n\t}\n\tfmt.Println(\"arg\", i)\n}\n"
  },
  {
    "path": "_fixtures/leaf4.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc D(i int) int {\n\treturn i * i * i\n}\nfunc C(i int) int {\n\n\treturn i + 20\n}\nfunc B(i int) int {\n\td := C(i) + 40\n\treturn d + D(i)\n}\nfunc A(i int) int {\n\treturn 10 + B(i)\n}\nfunc main() {\n\tj := 0\n\tj += A(2)\n\tfmt.Println(j)\n}\n"
  },
  {
    "path": "_fixtures/leafcommon.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc D(i int) int {\n\treturn i * i * i\n}\nfunc C(i int) int {\n\n\treturn D(i+10) + 20\n}\nfunc B(i int) int {\n\treturn i * D(i)\n}\nfunc A(i int) int {\n\td := 10 + B(i)\n\treturn d + C(i)\n}\nfunc main() {\n\tj := 0\n\tj += A(2)\n\tfmt.Println(j)\n}\n"
  },
  {
    "path": "_fixtures/leafindrec.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc B(i int) int {\n\tif i > 0 {\n\t\treturn A(i - 1)\n\t} else {\n\t\treturn 0\n\t}\n}\nfunc A(n int) int {\n\tif n <= 1 {\n\t\treturn n\n\t} else {\n\t\treturn B(n - 3)\n\t}\n}\nfunc main() {\n\tj := 0\n\tj += B(12)\n\tfmt.Println(j)\n}\n"
  },
  {
    "path": "_fixtures/leafrec.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc A(i int, n int) int {\n\tif n == 1 {\n\t\treturn i\n\t} else {\n\t\tn--\n\t\treturn (i * A(i-1, n))\n\t}\n}\nfunc main() {\n\tj := 0\n\tj += A(5, 5)\n\tfmt.Println(j)\n}\n"
  },
  {
    "path": "_fixtures/leafregex.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc callmed(i int) int {\n\treturn i * i * i\n}\nfunc callmee(i int) int {\n\n\treturn i + 20\n}\nfunc callme2(i int) int {\n\td := callmee(i) + 40\n\treturn d + callmed(i)\n}\nfunc callme(i int) int {\n\treturn 10 + callme2(i)\n}\nfunc main() {\n\tj := 0\n\tj += callme(2)\n\tfmt.Println(j)\n}\n"
  },
  {
    "path": "_fixtures/linked_list.star",
    "content": "def command_linked_list(args):\n\t\"\"\"Prints the contents of a linked list.\n\t\n\tlinked_list <var_name> <next_field_name> <max_depth>\n\nPrints up to max_depth elements of the linked list variable 'var_name' using 'next_field_name' as the name of the link field.\n\"\"\"\n\tvar_name, next_field_name, max_depth = args.split(\" \")\n\tmax_depth = int(max_depth)\n\tnext_name = var_name\n\tv = eval(None, var_name).Variable.Value\n\tfor i in range(0, max_depth):\n\t\tprint(str(i)+\":\",v)\n\t\tif v[0] == None:\n\t\t\tbreak\n\t\tv = v[next_field_name]\n"
  },
  {
    "path": "_fixtures/livetestprog.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"time\"\n)\n\nfunc printPid(pid int) {\n\tfmt.Println(pid)\n}\n\nfunc sayhi() {\n\tfmt.Println(\"hi\")\n}\n\nfunc main() {\n\truntime.LockOSThread()\n\tpid := os.Getpid()\n\tprintPid(pid)\n\ttime.Sleep(10 * time.Second)\n\n\tfor {\n\t\tprintPid(pid)\n\t\tsayhi()\n\t}\n}\n"
  },
  {
    "path": "_fixtures/locationsUpperCase.go",
    "content": "package main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"test\")\r\n}\r\n"
  },
  {
    "path": "_fixtures/locationsprog.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n)\n\ntype SomeType struct {\n}\n\ntype OtherType struct {\n}\n\nfunc (a *SomeType) String() string {\n\treturn \"SomeTypeObject\"\n}\n\nfunc (a *OtherType) String() string {\n\treturn \"OtherTypeObject\"\n}\n\nfunc (a *SomeType) SomeFunction() {\n\tfmt.Printf(\"SomeFunction called\\n\")\n}\n\nfunc anotherFunction() {\n\tfmt.Printf(\"anotherFunction called\\n\")\n}\n\nfunc main() {\n\tvar a SomeType\n\tvar b OtherType\n\ti := 10\n\tfmt.Printf(\"%s %s %v\\n\", a.String(), b.String(), i)\n\ta.SomeFunction()\n\tanotherFunction()\n\tioutil.ReadFile(\"nonexistent.file.txt\")\n}\n\nvar amap map[string]func()\n\nfunc init() {\n\tamap = map[string]func(){\n\t\t\"k\": func() {\n\t\t\tfmt.Printf(\"hello world\")\n\t\t},\n\t}\n}\n"
  },
  {
    "path": "_fixtures/locationsprog2.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc afunction(s string) {\n\tfmt.Println(s)\n}\n\ntype someStruct struct {\n\ts string\n}\n\nfunc (o *someStruct) structfunc(s2 string) {\n\tfmt.Println(o.s, s2)\n}\n\nfunc main() {\n\tfn1 := afunction\n\tvar o someStruct\n\tfn2 := o.structfunc\n\tfn3 := func(s string) {\n\t\tfmt.Println(\"inline\", s)\n\t}\n\truntime.Breakpoint()\n\tfn1(\"test\")\n\tafunction(\"test\")\n\tfmt.Println(fn1, fn2, fn3, o)\n}\n"
  },
  {
    "path": "_fixtures/locationsprog3.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"math/rand\"\n\t\"runtime\"\n)\n\nfunc main() {\n\truntime.Breakpoint()\n\tfmt.Println(rand.Intn(10))\n}\n"
  },
  {
    "path": "_fixtures/locationsprog_generic.go",
    "content": "package main\n\nimport \"fmt\"\n\ntype ParamReceiver[T any] struct {\n\tfield T\n}\n\nfunc (r *ParamReceiver[T]) Amethod() {\n\tfmt.Printf(\"%v\\n\", r.field)\n}\n\nfunc ParamFunc[T any](arg T) {\n\tfmt.Printf(\"%v\\n\", arg)\n}\n\nfunc main() {\n\tvar x ParamReceiver[int]\n\tvar y ParamReceiver[float64]\n\tx.Amethod()\n\ty.Amethod()\n\tParamFunc[int](2)\n\tParamFunc[float32](2)\n}\n"
  },
  {
    "path": "_fixtures/longstrings.go",
    "content": "package main\n\nimport (\n\t\"runtime\"\n)\n\nfunc buildString(length int) string {\n\ts := \"\"\n\tfor i := 0; i < length; i++ {\n\t\ts = s + \"x\"\n\t}\n\treturn s\n}\n\nfunc main() {\n\ts513 := buildString(513)\n\ts1025 := buildString(1025)\n\ts4097 := buildString(4097)\n\tnested := map[int]string{513: s513, 1025: s1025, 4097: s4097}\n\truntime.Breakpoint()\n\t_ = nested\n}\n"
  },
  {
    "path": "_fixtures/loopprog.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc loop() {\n\ti := 0\n\tfor {\n\t\ti++\n\t\tif (i % 1000000) == 0 {\n\t\t\tfmt.Println(i)\n\t\t}\n\t}\n\tfmt.Println(i)\n}\n\nfunc main() {\n\tfmt.Println(\"past main\")\n\tloop()\n}\n"
  },
  {
    "path": "_fixtures/math.go",
    "content": "package main\n\nimport \"math\"\n\nvar f = 1.5\n\nfunc main() {\n\tfloatvar1 := math.Floor(f)\n\tfloatvar2 := float64(int(f))\n\t_ = floatvar1\n\t_ = floatvar2\n}\n"
  },
  {
    "path": "_fixtures/morestringarg.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc f(s, q string) {\n\tfmt.Println(s)\n}\n\nfunc main() {\n\tf(\"very long string 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789X\", \"very long string B 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789X2\")\n}\n"
  },
  {
    "path": "_fixtures/multinamedreturns.go",
    "content": "package main\n\nimport \"fmt\"\n\n//go:noinline\nfunc ManyArgsWithNamedReturns(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p int) (sum int, product int) {\n\tsum = a + b + c + d + e + f + g + h\n\tproduct = 1\n\n\ttemp1 := i * j\n\ttemp2 := k * l\n\ttemp3 := m * n\n\ttemp4 := o * p\n\n\tsum += temp1 + temp2 + temp3 + temp4\n\n\tproduct = (a + 1) * (b + 1) * (c + 1) * (d + 1)\n\tproduct += (e + f) * (g + h) * (i + j) * (k + l)\n\tproduct += (m + n) * (o + p)\n\n\tsum = sum * 2\n\tproduct = product / 2\n\n\treturn sum, product\n}\n\nfunc main() {\n\tsum, product := ManyArgsWithNamedReturns(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)\n\tfmt.Println(sum, product)\n}\n"
  },
  {
    "path": "_fixtures/nestedbp.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Println(\"start\")\n\ta()\n\tfmt.Println(\"end\")\n}\n\nfunc a() {\n\tfmt.Println(\"in a\")\n\tb()\n\tfmt.Println(\"done a\")\n}\n\nfunc b() {\n\tfmt.Println(\"in b\")\n\tfmt.Println(\"done b\")\n}\n"
  },
  {
    "path": "_fixtures/nextcond.go",
    "content": "package main\n\nvar n = 10\n\nfunc f1(x int) {\n}\n\nfunc main() {\n\tf1(n)\n\tf1(n)\n\tf1(n)\n}\n"
  },
  {
    "path": "_fixtures/nilptr.go",
    "content": "package main\n\nfunc main() {\n\tvar p_value *int = nil\n\t*p_value = 1\n}\n"
  },
  {
    "path": "_fixtures/nodisasm/main.go",
    "content": "package main\n\nfunc asmFunc()\n\nfunc main() {\n\tasmFunc()\n}\n"
  },
  {
    "path": "_fixtures/nodisasm/nodisasm_amd64.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·asmFunc(SB),0,$0-0\n\tMOVQ AX, AX\n\tMOVQ AX, AX\n\tMOVQ AX, AX\n\tMOVSS (AX), X2\n\tVBROADCASTSS X2, X2\n\tVMOVDQU (AX), X3\n\tMOVSS (AX), X1\n\tPUNPCKLBW X0, X1\n\tVPUNPCKLWD X0, X1, X1\n\tMOVQ AX, AX\n\tMOVQ AX, AX\n\tMOVQ AX, AX\n\tRET\n"
  },
  {
    "path": "_fixtures/nomaindir/file.go",
    "content": "package nomaindir\n\nfunc AFunction() {\n}\n"
  },
  {
    "path": "_fixtures/nongochild/child.bat",
    "content": "@echo off\necho Hello World\n"
  },
  {
    "path": "_fixtures/nongochild/child.sh",
    "content": "#!/bin/sh\necho \"Hello World\"\n"
  },
  {
    "path": "_fixtures/nongochild/main.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n)\n\nfunc main() {\n\tfile := \"child.sh\"\n\tif runtime.GOOS == \"windows\" {\n\t\t// This path is not actually exercised currently because prog_windows.go\n\t\t// doesn't handle ErrBadBinaryInfo.\n\t\tfile = \"child.bat\"\n\t}\n\tfile, err := filepath.Abs(file)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\toutput, err := exec.Command(file).Output()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tos.Stdout.Write(output)\n}\n"
  },
  {
    "path": "_fixtures/nopbreakpoint/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n)\n\nvar g int = 0\n\nfunc compromised()\n\nfunc skipped() {\n\tg++\n}\n\nfunc main() {\n\tcompromised()\n\tfmt.Printf(\"%d\\n\", g)\n}\n"
  },
  {
    "path": "_fixtures/nopbreakpoint/main.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·compromised(SB),NOSPLIT,$0-0\n\tBYTE\t $0x90   // The assembler strips NOP, this is a hardcoded NOP instruction\n\tCALL main·skipped(SB)\n\tRET\n"
  },
  {
    "path": "_fixtures/notify-v2.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"sync\"\n)\n\nfunc main() {\n\thttp.HandleFunc(\"/test\", func(w http.ResponseWriter, req *http.Request) {\n\t\tgo func() {\n\t\t\t// I know this is wrong, it is just to simulate a deadlocked goroutine\n\t\t\tfmt.Println(\"locking...\")\n\t\t\tmtx := &sync.Mutex{}\n\t\t\tmtx.Lock()\n\t\t\tmtx.Lock()\n\t\t\tfmt.Println(\"will never print this\")\n\t\t}()\n\t})\n\n\tlog.Fatalln(http.ListenAndServe(\"127.0.0.1:8888\", nil))\n}\n"
  },
  {
    "path": "_fixtures/out_redirect.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nfunc main() {\n\tfmt.Println(\"hello world!\")\n\tfmt.Fprintf(os.Stdout, \"hello world!\")\n\tfmt.Fprintf(os.Stderr, \"hello world!\\n\")\n\tfmt.Fprintf(os.Stderr, \"hello world! error!\")\n}\n"
  },
  {
    "path": "_fixtures/panic.go",
    "content": "package main\n\nfunc main() {\n\tmsg := \"BOOM!\"\n\tpanic(msg)\n}\n"
  },
  {
    "path": "_fixtures/panicex.go",
    "content": "package main\n\n        func F0() {\n                defer func() {\n                        recover()\n                }()\n                F1()\n        }\n\n        func F1() {\n                F2()\n        }\n\n        func F2() {\n                F3()\n        }\n\n        func F3() {\n                F4()\n        }\n\n        func F4() {\n                panic(\"blah\")\n        }\n\n        func main() {\n                F0()\n        }\n"
  },
  {
    "path": "_fixtures/panicline.go",
    "content": "package main\n\nimport \"os\"\n\nfunc main() {\n\tfi, _ := os.Lstat(\"/this/path/does/not/exist\")\n\tfi.Size()\n}\n"
  },
  {
    "path": "_fixtures/parallel_next.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n)\n\nfunc sayhi(n int, wg *sync.WaitGroup) {\n\tfmt.Println(\"hi\", n)\n\tfmt.Println(\"hi\", n)\n\twg.Done()\n}\n\nfunc main() {\n\tvar wg sync.WaitGroup\n\twg.Add(10)\n\tfor i := 0; i < 10; i++ {\n\t\tgo sayhi(i, &wg)\n\t}\n\twg.Wait()\n}\n"
  },
  {
    "path": "_fixtures/pkgrenames.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"runtime\"\n\n\tpkg1 \"go/ast\"\n\tpkg2 \"net/http\"\n\n\t\"github.com/go-delve/delve/_fixtures/internal/dir.io\"\n\t\"github.com/go-delve/delve/_fixtures/internal/dir0/pkg\"\n\t\"github.com/go-delve/delve/_fixtures/internal/dir0/renamedpackage\"\n\tdir1pkg \"github.com/go-delve/delve/_fixtures/internal/dir1/pkg\"\n)\n\nfunc main() {\n\tvar badexpr interface{} = &pkg1.BadExpr{1, 2}\n\tvar req interface{} = &pkg2.Request{Method: \"amethod\"}\n\tvar amap interface{} = map[pkg1.BadExpr]pkg2.Request{pkg1.BadExpr{2, 3}: pkg2.Request{Method: \"othermethod\"}}\n\tvar amap2 interface{} = &map[pkg1.BadExpr]pkg2.Request{pkg1.BadExpr{2, 3}: pkg2.Request{Method: \"othermethod\"}}\n\tvar dir0someType interface{} = &pkg.SomeType{3}\n\tvar dir1someType interface{} = dir1pkg.SomeType{1, 2}\n\tvar amap3 interface{} = map[pkg.SomeType]dir1pkg.SomeType{pkg.SomeType{4}: dir1pkg.SomeType{5, 6}}\n\tvar anarray interface{} = [2]pkg.SomeType{pkg.SomeType{1}, pkg.SomeType{2}}\n\tvar achan interface{} = make(chan pkg.SomeType)\n\tvar aslice interface{} = []pkg.SomeType{pkg.SomeType{3}, pkg.SomeType{4}}\n\tvar afunc interface{} = func(a pkg.SomeType, b dir1pkg.SomeType) {}\n\tvar astruct interface{} = &struct {\n\t\tA dir1pkg.SomeType\n\t\tB pkg.SomeType\n\t}{\n\t\tA: dir1pkg.SomeType{1, 2},\n\t\tB: pkg.SomeType{3},\n\t}\n\tvar astruct2 interface{} = &struct {\n\t\tdir1pkg.SomeType\n\t\tX int\n\t}{\n\t\tSomeType: dir1pkg.SomeType{1, 2},\n\t\tX:        10,\n\t}\n\tvar iface interface {\n\t\tAMethod(x int) int\n\t\tAnotherMethod(x int) int\n\t} = &pkg.SomeType{4}\n\tvar iface2iface interface{} = &iface\n\tvar iface3 interface{} = &realname.SomeType{A: true}\n\n\truntime.Breakpoint()\n\tt := reflect.ValueOf(iface2iface).Elem().Type()\n\tm := t.Method(0)\n\tfmt.Println(m.Type.In(0))\n\tfmt.Println(m.Type.String())\n\tfmt.Println(badexpr, req, amap, amap2, dir0someType, dir1someType, amap3, anarray, achan, aslice, afunc, astruct, astruct2, iface2iface, iface3, pkg.SomeVar, pkg.A, dir1pkg.A, dirio.A, dirio.SomeFunction)\n}\n"
  },
  {
    "path": "_fixtures/plugin1/plugin1.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc Fn1() string {\n\treturn \"hello\"\n}\n\nfunc HelloFn(n int) string {\n\tn++\n\ts := fmt.Sprintf(\"hello%d\", n)\n\treturn s\n}\n"
  },
  {
    "path": "_fixtures/plugin2/plugin2.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/go-delve/delve/_fixtures/internal/pluginsupport\"\n)\n\nfunc Fn2() string {\n\treturn \"world\"\n}\n\ntype asomethingelse struct {\n\tx, y float64\n}\n\nfunc (a *asomethingelse) Callback2(n, m int) float64 {\n\tr := a.x + 2*a.y\n\tr += float64(n) / float64(m)\n\treturn r\n}\n\nfunc TypesTest(s pluginsupport.Something) pluginsupport.SomethingElse {\n\tif A != nil {\n\t\taIsNotNil(fmt.Sprintf(\"%s\", A))\n\t}\n\treturn &asomethingelse{1.0, float64(s.Callback(2))}\n}\n\nvar A interface{}\n\nfunc aIsNotNil(str string) {\n\t// nothing here\n}\n"
  },
  {
    "path": "_fixtures/plugintest.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"plugin\"\n\t\"runtime\"\n)\n\nfunc must(err error) {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc main() {\n\tplug1, err := plugin.Open(os.Args[1])\n\tmust(err)\n\n\truntime.Breakpoint()\n\n\tplug2, err := plugin.Open(os.Args[2])\n\tmust(err)\n\n\truntime.Breakpoint()\n\n\tfn1, err := plug1.Lookup(\"Fn1\")\n\tmust(err)\n\tfn2, err := plug2.Lookup(\"Fn2\")\n\tmust(err)\n\n\ta := fn1.(func() string)()\n\tb := fn2.(func() string)()\n\n\tfmt.Println(plug1, plug2, fn1, fn2, a, b)\n}\n"
  },
  {
    "path": "_fixtures/plugintest2.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"github.com/go-delve/delve/_fixtures/internal/pluginsupport\"\n\t\"os\"\n\t\"plugin\"\n)\n\ntype asomething struct {\n\tn int\n}\n\nfunc (a *asomething) Callback(n int) int {\n\treturn a.n + n\n}\n\nfunc (a *asomething) String() string {\n\treturn \"success\"\n}\n\nvar ExeGlobal = &asomething{2}\n\nfunc must(err error) {\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc main() {\n\tplug1, err := plugin.Open(os.Args[1])\n\tmust(err)\n\tplug2, err := plugin.Open(os.Args[2])\n\tmust(err)\n\tfn1iface, err := plug1.Lookup(\"HelloFn\")\n\tmust(err)\n\tfn2iface, err := plug2.Lookup(\"TypesTest\")\n\tmust(err)\n\tfn1 := fn1iface.(func(int) string)\n\tfn2 := fn2iface.(func(pluginsupport.Something) pluginsupport.SomethingElse)\n\ta := fn1(3)\n\tb := fn2(&asomething{2})\n\tfmt.Println(a, b, ExeGlobal)\n}\n"
  },
  {
    "path": "_fixtures/pr1055.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"go/ast\"\n\t\"os\"\n)\n\nfunc main() {\n\ta := &ast.CompositeLit{}\n\tfmt.Println(\"demo\", a) // set breakpoint here and use next twice\n\tos.Exit(2)\n}\n"
  },
  {
    "path": "_fixtures/rangeoverfunc.go",
    "content": "package main\n\n// The tests here are adapted from $GOROOT/src/cmd/compile/internal/rangefunc/rangefunc_test.go\n\nimport (\n\t\"fmt\"\n)\n\n/*\n\n\n\nTHESE\nLINES\nINTENTIONALLY\nLEFT\nBLANK\n\n\n\n\n*/\n\nfunc TestTrickyIterAll() {\n\ttrickItAll := TrickyIterator{}\n\ti := 0\n\tfor _, x := range trickItAll.iterAll([]int{30, 7, 8, 9, 10}) {\n\t\ti += x\n\t\tif i >= 36 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfmt.Println(\"Got i = \", i)\n}\n\nfunc TestTrickyIterAll2() {\n\ttrickItAll := TrickyIterator{}\n\ti := 0\n\tfor _, x := range trickItAll.iterAll([]int{42, 47}) {\n\t\ti += x\n\t}\n\tfmt.Println(i)\n}\n\nfunc TestBreak1() {\n\tvar result []int\n\tfor _, x := range OfSliceIndex([]int{-1, -2, -4}) {\n\t\tif x == -4 {\n\t\t\tbreak\n\t\t}\n\t\tfor _, y := range OfSliceIndex([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) {\n\t\t\tif y == 3 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tresult = append(result, y)\n\t\t}\n\t\tresult = append(result, x)\n\t}\n\tfmt.Println(result)\n}\n\nfunc TestBreak2() {\n\tvar result []int\nouter:\n\tfor _, x := range OfSliceIndex([]int{-1, -2, -4}) {\n\t\tfor _, y := range OfSliceIndex([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) {\n\t\t\tif y == 3 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif x == -4 {\n\t\t\t\tbreak outer\n\t\t\t}\n\t\t\tresult = append(result, y)\n\t\t}\n\t\tresult = append(result, x)\n\t}\n\tfmt.Println(result)\n}\n\nfunc TestMultiCont0() {\n\tvar result []int = make([]int, 0, 10)\n\nW:\n\tfor _, w := range OfSliceIndex([]int{1000, 2000}) {\n\t\tresult = append(result, w)\n\t\tif w == 2000 {\n\t\t\tbreak\n\t\t}\n\t\tfor _, x := range OfSliceIndex([]int{100, 200, 300, 400}) {\n\t\t\tfor _, y := range OfSliceIndex([]int{10, 20, 30, 40}) {\n\t\t\t\tresult = append(result, y)\n\t\t\t\tfor _, z := range OfSliceIndex([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) {\n\t\t\t\t\tif z&1 == 1 {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tresult = append(result, z)\n\t\t\t\t\tif z >= 4 {\n\t\t\t\t\t\tcontinue W // modified to be multilevel\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult = append(result, -y) // should never be executed\n\t\t\t}\n\t\t\tresult = append(result, x)\n\t\t}\n\t}\n\tfmt.Println(result)\n}\n\nfunc TestPanickyIterator1() {\n\tvar result []int\n\tdefer func() {\n\t\tr := recover()\n\t\tfmt.Println(\"Recovering\", r)\n\t}()\n\tfor _, z := range PanickyOfSliceIndex([]int{1, 2, 3, 4}) {\n\t\tresult = append(result, z)\n\t\tif z == 4 {\n\t\t\tbreak\n\t\t}\n\t}\n\tfmt.Println(result)\n}\n\nfunc TestPanickyIterator2() {\n\tvar result []int\n\tdefer func() {\n\t\tr := recover()\n\t\tfmt.Println(\"Recovering \", r)\n\t}()\n\tfor _, x := range OfSliceIndex([]int{100, 200}) {\n\t\tresult = append(result, x)\n\tY:\n\t\t// swallows panics and iterates to end BUT `break Y` disables the body, so--> 10, 1, 2\n\t\tfor _, y := range VeryBadOfSliceIndex([]int{10, 20}) {\n\t\t\tresult = append(result, y)\n\n\t\t\t// converts early exit into a panic --> 1, 2\n\t\t\tfor k, z := range PanickyOfSliceIndex([]int{1, 2}) { // iterator panics\n\t\t\t\tresult = append(result, z)\n\t\t\t\tif k == 1 {\n\t\t\t\t\tbreak Y\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestPanickyIteratorWithNewDefer() {\n\tvar result []int\n\tdefer func() {\n\t\tr := recover()\n\t\tfmt.Println(\"Recovering \", r)\n\t}()\n\tfor _, x := range OfSliceIndex([]int{100, 200}) {\n\t\tresult = append(result, x)\n\tY:\n\t\t// swallows panics and iterates to end BUT `break Y` disables the body, so--> 10, 1, 2\n\t\tfor _, y := range VeryBadOfSliceIndex([]int{10, 20}) {\n\t\t\tdefer func() { // This defer will be set on TestPanickyIteratorWithNewDefer from TestPanickyIteratorWithNewDefer-range2\n\t\t\t\tfmt.Println(\"y loop defer\")\n\t\t\t}()\n\t\t\tresult = append(result, y)\n\n\t\t\t// converts early exit into a panic --> 1, 2\n\t\t\tfor k, z := range PanickyOfSliceIndex([]int{1, 2}) { // iterator panics\n\t\t\t\tresult = append(result, z)\n\t\t\t\tif k == 1 {\n\t\t\t\t\tbreak Y\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestLongReturnWrapper() {\n\tTestLongReturn()\n\tfmt.Println(\"returned\")\n}\n\nfunc TestLongReturn() {\n\tfor _, x := range OfSliceIndex([]int{1, 2, 3}) {\n\t\tfor _, y := range OfSliceIndex([]int{10, 20, 30}) {\n\t\t\tif y == 10 {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tfmt.Println(x)\n\t}\n}\n\nfunc TestGotoA1() {\n\tresult := []int{}\n\tfor _, x := range OfSliceIndex([]int{-1, -4, -5}) {\n\t\tresult = append(result, x)\n\t\tif x == -4 {\n\t\t\tbreak\n\t\t}\n\t\tfor _, y := range OfSliceIndex([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) {\n\t\t\tif y == 3 {\n\t\t\t\tgoto A\n\t\t\t}\n\t\t\tresult = append(result, y)\n\t\t}\n\tA:\n\t\tresult = append(result, x)\n\t}\n\tfmt.Println(result)\n}\n\nfunc TestGotoB1() {\n\tresult := []int{}\n\tfor _, x := range OfSliceIndex([]int{-1, -2, -3, -4, -5}) {\n\t\tresult = append(result, x)\n\t\tif x == -4 {\n\t\t\tbreak\n\t\t}\n\t\tfor _, y := range OfSliceIndex([]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}) {\n\t\t\tif y == 3 {\n\t\t\t\tgoto B\n\t\t\t}\n\t\t\tresult = append(result, y)\n\t\t}\n\t\tresult = append(result, x)\n\t}\nB:\n\tresult = append(result, 999)\n\tfmt.Println(result)\n}\n\nfunc TestRecur(n int) {\n\tresult := []int{}\n\tif n > 0 {\n\t\tTestRecur(n - 1)\n\t}\n\tfor _, x := range OfSliceIndex([]int{10, 20, 30}) {\n\t\tresult = append(result, x)\n\t\tif n == 3 {\n\t\t\tTestRecur(0)\n\t\t}\n\t}\n\tfmt.Println(result)\n}\n\nfunc main() {\n\tTestTrickyIterAll()\n\tTestTrickyIterAll2()\n\tTestBreak1()\n\tTestBreak2()\n\tTestMultiCont0()\n\tTestPanickyIterator1()\n\tTestPanickyIterator2()\n\tTestPanickyIteratorWithNewDefer()\n\tTestLongReturnWrapper()\n\tTestGotoA1()\n\tTestGotoB1()\n\tTestRecur(3)\n}\n\ntype Seq[T any] func(yield func(T) bool)\ntype Seq2[T1, T2 any] func(yield func(T1, T2) bool)\n\ntype TrickyIterator struct {\n\tyield func()\n}\n\nfunc (ti *TrickyIterator) iterAll(s []int) Seq2[int, int] {\n\treturn func(yield func(int, int) bool) {\n\t\t// NOTE: storing the yield func in the iterator has been removed because\n\t\t// it make the closure escape to the heap which breaks the .closureptr\n\t\t// heuristic. Eventually we will need to figure out what to do when that\n\t\t// happens.\n\t\t// ti.yield = yield // Save yield for future abuse\n\t\tfor i, v := range s {\n\t\t\tif !yield(i, v) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n}\n\n// OfSliceIndex returns a Seq2 over the elements of s. It is equivalent\n// to range s.\nfunc OfSliceIndex[T any, S ~[]T](s S) Seq2[int, T] {\n\treturn func(yield func(int, T) bool) {\n\t\tfor i, v := range s {\n\t\t\tif !yield(i, v) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n}\n\n// PanickyOfSliceIndex iterates the slice but panics if it exits the loop early\nfunc PanickyOfSliceIndex[T any, S ~[]T](s S) Seq2[int, T] {\n\treturn func(yield func(int, T) bool) {\n\t\tfor i, v := range s {\n\t\t\tif !yield(i, v) {\n\t\t\t\tpanic(fmt.Errorf(\"Panicky iterator panicking\"))\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n}\n\n// VeryBadOfSliceIndex is \"very bad\" because it ignores the return value from yield\n// and just keeps on iterating, and also wraps that call in a defer-recover so it can\n// keep on trying after the first panic.\nfunc VeryBadOfSliceIndex[T any, S ~[]T](s S) Seq2[int, T] {\n\treturn func(yield func(int, T) bool) {\n\t\tfor i, v := range s {\n\t\t\tfunc() {\n\t\t\t\tdefer func() {\n\t\t\t\t\trecover()\n\t\t\t\t}()\n\t\t\t\tyield(i, v)\n\t\t\t}()\n\t\t}\n\t\treturn\n\t}\n}\n"
  },
  {
    "path": "_fixtures/readmem_json.go",
    "content": "package main\n\nimport (\n\t\"crypto/sha256\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// Long json for MemoryReference\nfunc main() {\n\truntime.Breakpoint()\n\n\tpayload := strings.Repeat(\"AB\", 2500)\n\n\tb, _ := json.Marshal(struct {\n\t\tData string `json:\"data\"`\n\t}{Data: payload})\n\n\tbytesString := []byte(\"this\\nis\\nit\")\n\tnonprint := []byte{242, 243, 244, 245}\n\tmaps := map[string]string{\"some\": \"non\"}\n\n\tjsonString := string(b)\n\n\thashed := sha256.Sum256(b)\n\tjsonHash := hex.EncodeToString(hashed[:]) // used to validate fullness of a string\n\n\tptr := unsafe.StringData(jsonString)\n\tjsonAddr := fmt.Sprintf(\"%p\", ptr) // used to validate string address\n\n\truntime.Breakpoint()\n\n\tfmt.Println(jsonString)\n\tfmt.Println(jsonHash)\n\tfmt.Println(jsonAddr)\n\tfmt.Println(bytesString)\n\tfmt.Println(nonprint)\n\tfmt.Println(maps)\n}\n"
  },
  {
    "path": "_fixtures/redirect-input.txt",
    "content": "Redirect test"
  },
  {
    "path": "_fixtures/redirect.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"time\"\n)\n\nfunc main() {\n\tbuf, _ := ioutil.ReadAll(os.Stdin)\n\tfmt.Fprintf(os.Stdout, \"%s %v\\n\", buf, time.Now())\n}\n"
  },
  {
    "path": "_fixtures/reflecttypefncall.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n)\n\nfunc reflectFunc(value reflect.Value) {\n\tfmt.Printf(\"%s\\n\", value.Type().Name())\n}\n\nfunc main() {\n\ti := 2\n\tval := reflect.ValueOf(i)\n\treflectFunc(val)\n}\n"
  },
  {
    "path": "_fixtures/restartargs.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nvar args []string\n\nfunc printArgs(){\n\tfmt.Printf(\"Args2: %#v\\n\", args)\n}\n\nfunc main() {\n\targs = os.Args[1:]\n\tprintArgs()\n}\n"
  },
  {
    "path": "_fixtures/retstack.go",
    "content": "package main\n\nimport \"runtime\"\nimport \"fmt\"\n\nfunc f() {\n\truntime.Breakpoint()\n}\n\nfunc g() int {\n\truntime.Breakpoint()\n\treturn 3\n}\n\nfunc main() {\n\tf()\n\tn := g() + 1\n\tfmt.Println(n)\n}\n"
  },
  {
    "path": "_fixtures/scopeescapevareval.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc main() {\n\ta := 2\n\t{\n\t\ta := 3\n\t\tp := &a\n\t\truntime.Breakpoint()\n\t\tfmt.Println(a, p)\n\t}\n\tfmt.Println(a)\n}\n"
  },
  {
    "path": "_fixtures/scopetest.go",
    "content": "package main\n\nfunc f1(x int) {}\nfunc f2(x int) {}\nfunc f3(x int) {}\nfunc f4(x int) {}\nfunc f5(x int) {}\nfunc f6(x int) {}\nfunc gret1(x int) int {\n\treturn x - 1\n}\n\nvar boolvar = true\n\nfunc gretbool() bool {\n\tx := boolvar\n\tboolvar = !boolvar\n\treturn x\n}\nfunc gret3() (int, int, int) { return 0, 1, 2 }\n\nvar v = []int{0, 1, 2}\nvar ch = make(chan int, 1)\nvar floatch = make(chan float64, 1)\nvar iface interface{} = 13\n\nfunc TestNestedFor() {\n\ta := 0\n\tf1(a) // a int = 0\n\tfor i := 0; i < 5; i++ {\n\t\tf2(i) // a int = 0, i int\n\t\tfor i := 1; i < 5; i++ {\n\t\t\tf3(i) // a int = 0, i int = 0, i int = 1\n\t\t\ti++\n\t\t\tf3(i)\n\t\t}\n\t\tf4(i) // a int = 0, i int = 0\n\t}\n\tf5(a)\n}\nfunc TestOas2() {\n\tif a, b, c := gret3(); a != 1 {\n\t\tf1(a) // a int = 0, b int = 1, c int = 2\n\t\tf1(b) // a int = 0, b int = 1, c int = 2\n\t\tf1(c) // a int = 0, b int = 1, c int = 2\n\t}\n\tfor i, x := range v {\n\t\tf1(i) // i int = 0, x int = 0\n\t\tf1(x) // i int = 0, x int = 0\n\t}\n\tif a, ok := <-ch; ok {\n\t\tf1(a) // a int = 12, ok bool = true\n\t}\n\tif a, ok := iface.(int); ok {\n\t\tf1(a) // a int = 13, ok bool = true\n\t}\n}\nfunc TestIfElse(x int) {\n\tif x := gret1(x); x != 0 {\n\t\ta := 0\n\t\tf1(a) // x int = 2, x int = 1, a int = 0\n\t\tf1(x)\n\t} else {\n\t\tb := 1\n\t\tf1(b) // x int = 1, x int = 0, b int = 1\n\t\tf1(x + 1)\n\t}\n}\nfunc TestSwitch(in int) {\n\tswitch x := gret1(in); x {\n\tcase 0:\n\t\ti := x + 5\n\t\tf1(x) // in int = 1, x int = 0, i int  = 5\n\t\tf1(i)\n\tcase 1:\n\t\tj := x + 10\n\t\tf1(x)\n\t\tf1(j) // in int = 2, x int = 1, j int = 11\n\tcase 2:\n\t\tk := x + 2\n\t\tf1(x)\n\t\tf1(k) // in int = 3, x int = 2, k int = 4\n\t}\n}\nfunc TestTypeSwitch(iface interface{}) {\n\tswitch x := iface.(type) {\n\tcase int:\n\t\tf1(x) // iface interface{}, x int = 1\n\tcase uint8:\n\t\tf1(int(x)) // iface interface{}, x uint8 = 2\n\tcase float64:\n\t\tf1(int(x) + 1) // iface interface{}, x float64 = 3.0\n\t}\n}\nfunc TestSelectScope() {\n\tselect {\n\tcase i := <-ch:\n\t\tf1(i) // i int = 13\n\tcase f := <-floatch:\n\t\tf1(int(f)) // f float64 = 14.0\n\t}\n}\nfunc TestBlock() {\n\ta := 1\n\tf1(a) // a int = 1\n\t{\n\t\tb := 2\n\t\ta := 3\n\t\tf1(b) // a int = 1, a int = 3, b int = 2\n\t\tf1(a) // a int = 1, a int = 3, b int = 2\n\t}\n}\nfunc TestDiscontiguousRanges() {\n\ta := 0\n\tf1(a) // a int = 0\n\t{\n\t\tb := 0\n\t\tf2(b) // a int = 0, b int = 0\n\t\tif gretbool() {\n\t\t\tc := 0\n\t\t\tf3(c) // a int = 0, b int = 0, c int = 0\n\t\t} else {\n\t\t\tc := 1.1\n\t\t\tf4(int(c)) // a int = 0, b int = 0, c float64 = 1.1\n\t\t}\n\t\tf5(b) // a int = 0, b int  = 0\n\t}\n\tf6(a) // a int = 0\n}\nfunc TestClosureScope() {\n\ta := 1\n\tb := 1\n\tf := func(c int) {\n\t\td := 3\n\t\tf1(a) // a int = 1, c int = 3, d int = 3\n\t\tf1(c)\n\t\tf1(d)\n\t\tif e := 3; e != 0 {\n\t\t\tf1(e) // a int = 1, c int = 3, d int = 3, e int = 3\n\t\t}\n\t}\n\tf(3)\n\tf1(b)\n}\nfunc TestClosureShadow() {\n\tv := 1\n\tclosure := func() {\n\t\tf1(v) // v int = 1\n\t\tv := 2\n\t\tf1(v) // v int = 1, v int = 2\n\t\tfor i := 0; i < 1; i++ {\n\t\t\tf1(v) // v int = 1, v int = 2, i int = 0\n\t\t}\n\t}\n\tclosure()\n}\nfunc main() {\n\tch <- 12\n\tTestNestedFor()\n\tTestOas2()\n\tTestIfElse(2)\n\tTestIfElse(1)\n\tTestSwitch(3)\n\tTestSwitch(2)\n\tTestSwitch(1)\n\tTestTypeSwitch(1)\n\tTestTypeSwitch(uint8(2))\n\tTestTypeSwitch(float64(3.0))\n\tch <- 13\n\tTestSelectScope()\n\tfloatch <- 14.0\n\tTestSelectScope()\n\tTestBlock()\n\tTestDiscontiguousRanges()\n\tTestDiscontiguousRanges()\n\tTestClosureScope()\n\tTestClosureShadow()\n}\n"
  },
  {
    "path": "_fixtures/setiterator.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"iter\"\n\t\"strconv\"\n\t\"time\"\n)\n\nfunc main() {\n\tset := New[string]()\n\tfor i := 10; i < 100; i++ {\n\t\tset.Add(strconv.Itoa(i))\n\t}\n\tPrintAllElements[string](set)\n}\n\n// Set holds a set of elements.\ntype Set[E comparable] struct {\n\tm map[E]struct{}\n}\n\n// New returns a new [Set].\nfunc New[E comparable]() *Set[E] {\n\treturn &Set[E]{m: make(map[E]struct{})}\n}\n\n// All is an iterator over the elements of s.\nfunc (s *Set[E]) All() iter.Seq[E] {\n\treturn func(yield func(E) bool) {\n\t\tfor v := range s.m {\n\t\t\ttmp := make([]byte, 1024)\n\t\t\tstr := string(tmp)\n\t\t\tif !yield(v) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgo func() { println(str) }()\n\t\t}\n\t}\n}\n\nfunc (s *Set[E]) Add(v E) {\n\ts.m[v] = struct{}{}\n}\n\nfunc PrintAllElements[E comparable](s *Set[E]) {\n\tfor v := range s.All() {\n\t\ttime.Sleep(100 * time.Second)\n\t\tfmt.Println(v)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/setymmreg/main.go",
    "content": "package main\n\nfunc asmFunc()\n\nfunc main() {\n\tasmFunc()\n}\n"
  },
  {
    "path": "_fixtures/setymmreg/setymmreg_amd64.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·asmFunc(SB),0,$0-0\n\tXORQ AX, AX\n\tXORQ AX, AX\n\tXORQ AX, AX\n\tXORQ AX, AX\n\tXORQ AX, AX\n\tRET\n"
  },
  {
    "path": "_fixtures/sigchldprog.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"log\"\n\t\"os/exec\"\n)\n\nfunc main() {\n\tcmd := exec.Command(\"date\")\n\treader, err := cmd.StdoutPipe()\n\tif err != nil {\n\t\tlog.Fatalln(err)\n\t}\n\tdefer reader.Close()\n\n\tscanner := bufio.NewScanner(reader)\n\tgo func() {\n\t\tfor scanner.Scan() {\n\t\t\tfmt.Println(scanner.Text())\n\t\t}\n\t}()\n\tcmd.Start()\n\tcmd.Wait()\n}\n"
  },
  {
    "path": "_fixtures/sleep.go",
    "content": "package main\n\nimport (\n\t\"os\"\n\t\"time\"\n)\n\nfunc f() {\n\tfor {\n\t\ttime.Sleep(10 * time.Second)\n\t\tif len(os.Args) > 1 {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc main() {\n\tf()\n}\n"
  },
  {
    "path": "_fixtures/spawn.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"time\"\n)\n\nfunc traceme1() {\n\tfmt.Printf(\"parent starting\\n\")\n}\n\nfunc traceme2(n string) {\n\tfmt.Printf(\"hello from %s\\n\", n)\n}\n\nfunc traceme3() {\n\tfmt.Printf(\"done\\n\")\n}\n\nfunc main() {\n\texe, _ := os.Executable()\n\tswitch os.Args[1] {\n\tcase \"spawn\":\n\t\ttraceme1()\n\t\tn, _ := strconv.Atoi(os.Args[2])\n\t\tcmds := []*exec.Cmd{}\n\t\tfor i := 0; i < n; i++ {\n\t\t\tcmd := exec.Command(exe, \"child\", fmt.Sprintf(\"C%d\", i))\n\t\t\tcmd.Stdout = os.Stdout\n\t\t\tcmd.Start()\n\t\t\tcmds = append(cmds, cmd)\n\t\t}\n\n\t\tfor _, cmd := range cmds {\n\t\t\tcmd.Wait()\n\t\t}\n\n\t\ttime.Sleep(1 * time.Second)\n\t\ttraceme3()\n\n\tcase \"child\":\n\t\ttraceme2(os.Args[2])\n\n\tcase \"spawn2\":\n\t\tcmd := exec.Command(os.Args[2])\n\t\tcmd.Stdout = os.Stdout\n\t\tcmd.Start()\n\t\tcmd.Wait()\n\n\t}\n}\n"
  },
  {
    "path": "_fixtures/spawnchild.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc traceme5() {\n\tfmt.Println(\"hello world\")\n}\n\nfunc main() {\n\tfor i := 0; i < 3; i++ {\n\t\tprintln(i) // b spawnchild.go:11 if i == 1\n\t}\n\ttraceme5()\n}\n"
  },
  {
    "path": "_fixtures/stacktraceprog.go",
    "content": "package main\n\nfunc stacktraceme() {\n\treturn\n}\n\nfunc func1() {\n\tstacktraceme()\n}\n\nfunc func2(f func()) {\n\tf()\n}\n\nfunc main() {\n\tfunc1()\n\tfunc2(func1)\n}\n"
  },
  {
    "path": "_fixtures/stackwatchbug.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n)\n\nfunc multiRound() {\n\tvars := []int{0, 1, 2, 3, 4, 5}\n\tfor i := range vars { // line 9: set watchpoints\n\t\tif i > 0 {\n\t\t\tvars[i] = vars[i-1]\n\t\t\tfmt.Println() // line 12: watchpoints hit\n\t\t}\n\t}\n}\n\nfunc main() {\n\tmultiRound() // line 18: after restart, last watchpoint out of scope\n\treturn       // line 19: all watchpoints should go out of scope\n}\n"
  },
  {
    "path": "_fixtures/starlark_map_iteration.star",
    "content": "v = eval(None, \"m1\").Variable\nn = 0\nd = {}\nfor k in v.Value:\n        if not d.get(k):\n\t\tn = n + 1\n\t\td[k] = True\nprint(\"values=\", n, sep=\"\")\n"
  },
  {
    "path": "_fixtures/stepintobug.go",
    "content": "package main\n\ntype T struct {\n}\n\nfunc main() {\n\tt := T{}\n\tf1 := t.m1\n\tprintln(f1(1)) //break\n}\n\nfunc (t T) m1(x int) int {\n\treturn x + 1\n}\n"
  },
  {
    "path": "_fixtures/stepoutret.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc stepout(n int) (str string, num int) {\n\treturn fmt.Sprintf(\"return %d\", n), n + 1\n}\n\nfunc main() {\n\tstepout(47)\n}\n"
  },
  {
    "path": "_fixtures/stepshadow.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n)\n\nfunc main() {\n\tvar wg sync.WaitGroup\n\twg.Add(1)\n\tgo goroutineA(&wg)\n\tf := stacktraceme1\n\tfor i := 0; i < 100; i++ {\n\t\tfmt.Printf(\"main %d\\n\", i)\n\t\tf()\n\t}\n\twg.Wait()\n}\n\nfunc goroutineA(wg *sync.WaitGroup) {\n\tdefer wg.Done()\n\tfor i := 0; i < 100; i++ {\n\t\tstacktraceme2()\n\t}\n}\n\nfunc stacktraceme1() {\n}\n\nfunc stacktraceme2() {\n}\n"
  },
  {
    "path": "_fixtures/switch_to_main_goroutine.star",
    "content": "def command_switch_to_main_goroutine(args):\n\tfor g in goroutines().Goroutines:\n\t\tif g.CurrentLoc.Function != None and g.CurrentLoc.Function.Name_.startswith(\"main.\"):\n\t\t\tprint(\"switching to:\", g.ID)\n\t\t\traw_command(\"switchGoroutine\", GoroutineID=g.ID)\n\t\t\tbreak\n"
  },
  {
    "path": "_fixtures/test if path/main.go",
    "content": "package main\n\nfunc main() {\n\tprintln(\"here\")\n}\n"
  },
  {
    "path": "_fixtures/test.c",
    "content": "#include <stdio.h>\n\nint main(void) {\n\tprintf(\"hello world!\");\n}\n"
  },
  {
    "path": "_fixtures/testRestartRequestRebuildFailFixture.go",
    "content": "package main\n\nimport \"math\"\n\nvar f = 1.5\n\nfunc main() {\n\tfloatvar1 := math.Floor(f)\n\tfloatvar2 := float64(int(f))\n\t_ = floatvar1\n\t_ = floatvar2\n}\n"
  },
  {
    "path": "_fixtures/test_allow_on.star",
    "content": "# Test fixture for custom commands with on prefix\n# All custom starlark commands automatically allow the on prefix\n\ndef command_test_on_allowed(args):\n\t\"\"\"Test command for on prefix functionality.\"\"\"\n\tprint(\"test_on_allowed called with:\", args)\n"
  },
  {
    "path": "_fixtures/test_custom_cmd_continue.star",
    "content": "# Test fixture for custom commands that trigger continue\n\ndef command_test_cmd_before_continue(args):\n\t\"\"\"Test command that runs before continue.\"\"\"\n\tprint(\"BEFORE_CONTINUE\")\n\ndef command_test_continue_cmd(args):\n\t\"\"\"Test command that calls continue.\"\"\"\n\tprint(\"CONTINUE_CMD\")\n\n\tdlv_command(\"continue\")\n\ndef command_test_cmd_after_continue(args):\n\t\"\"\"Test command that runs after continue (should not run).\"\"\"\n\tprint(\"AFTER_CONTINUE\")\n"
  },
  {
    "path": "_fixtures/test_custom_cmd_nested.star",
    "content": "def command_test_bp1_before_continue(args):\n\t\"\"\"Test command on BP1 before continue.\"\"\"\n\tprint(\"BP1_BEFORE_CONTINUE\")\n\ndef command_test_bp1_continue_cmd(args):\n\t\"\"\"Test command on BP1 that calls continue to hit BP2.\"\"\"\n\tprint(\"BP1_CONTINUE_CMD\")\n\tdlv_command(\"continue\")\n\ndef command_test_bp1_after_continue(args):\n\t\"\"\"Test command on BP1 after continue (should not run).\"\"\"\n\tprint(\"BP1_AFTER_CONTINUE\")\n\ndef command_test_bp2_cmd(args):\n\t\"\"\"Test command on BP2 (should not run because BP1 invalidated state).\"\"\"\n\tprint(\"BP2_CMD_EXECUTED\")\n\ndef command_test_bp3_cmd(args):\n\t\"\"\"Test command on BP3.\"\"\"\n\tprint(\"BP3_CMD_EXECUTED\")\n"
  },
  {
    "path": "_fixtures/testargs.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nfunc main() {\n\t// this test expects AT LEAST 1 argument, and the first one needs to be \"test\".\n\t// second one is optional but if given, it should be \"-passFlag\"\n\tfmt.Printf(\"received args %#v\\n\", os.Args)\n\tif len(os.Args) < 2 {\n\t\tpanic(\"os.args too short!\")\n\t} else if os.Args[1] != \"test\" {\n\t\tpanic(\"os.args[1] is not test!\")\n\t}\n\tif len(os.Args) >= 3 && os.Args[2] != \"pass flag\" {\n\t\tpanic(\"os.args[2] is not \\\"pass flag\\\"!\")\n\t}\n}\n"
  },
  {
    "path": "_fixtures/testdeadlock.go",
    "content": "package main\n\nfunc main() {\n\tch1 := make(chan string)\n\tch2 := make(chan string)\n\tgo func() {\n\t\t<-ch1\n\t\tch2 <- \"done\"\n\t}()\n\t<-ch2\n\tch1 <- \"done\"\n}\n"
  },
  {
    "path": "_fixtures/testenv.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n)\n\nfunc main() {\n\tx, y := os.LookupEnv(\"SOMEVAR\")\n\truntime.Breakpoint()\n\tfmt.Printf(\"SOMEVAR=%s\\n%v\", x, y)\n}\n"
  },
  {
    "path": "_fixtures/testenv2.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n)\n\nfunc main() {\n\tx, y := os.LookupEnv(\"SOMEVAR\")\n\truntime.Breakpoint()\n\tfmt.Printf(\"SOMEVAR=%s\\n%v\", x, y)\n}\n"
  },
  {
    "path": "_fixtures/testfnpos1.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc f1() {\n\tfmt.Printf(\"f1\\n\")\n}\n\nfunc f2() {\n\tfmt.Printf(\"f2\\n\")\n}\n\nfunc main() {\n\tf1()\n\tf2()\n}\n"
  },
  {
    "path": "_fixtures/testfnpos2.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc f2() {\n\tfmt.Printf(\"f2\\n\")\n}\n\nfunc f1() {\n\tfmt.Printf(\"f1\\n\")\n}\n\nfunc main() {\n\tf1()\n\tf2()\n}\n"
  },
  {
    "path": "_fixtures/testinline.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc inlineThis(a int) int {\n\tz := a * a\n\treturn f(z + a)\n}\n\nfunc initialize(a, b *int) {\n\t*a = 3\n\t*b = 4\n}\n\nfunc main() {\n\tvar a, b int\n\tinitialize(&a, &b)\n\ta = inlineThis(a)\n\tb = inlineThis(b)\n\tfmt.Printf(\"%d %d\\n\", a, b)\n}\n\n//go:noinline\nfunc f(x int) int {\n\treturn x\n}\n"
  },
  {
    "path": "_fixtures/testnextdefer.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc main() {\n\tdefer func() {\n\t\tfmt.Println(\"hi\")\n\t}()\n\tfmt.Println(\"bye\")\n}\n"
  },
  {
    "path": "_fixtures/testnextnethttp.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n)\nfunc main() {\n\thttp.HandleFunc(\"/\", func(w http.ResponseWriter, req *http.Request) {\n\t\truntime.Breakpoint()\n\t\tmsg := \"hello, world!\"\n\t\theader := w.Header().Get(\"Content-Type\")\n\t\tw.Write([]byte(msg + header))\n\t})\n\thttp.HandleFunc(\"/nobp\", func(w http.ResponseWriter, req *http.Request) {\n\t\tmsg := \"hello, world!\"\n\t\theader := w.Header().Get(\"Content-Type\")\n\t\tw.Write([]byte(msg + header))\n\t})\n\tlistener, err := net.Listen(\"tcp\", \":0\")\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tport := listener.Addr().(*net.TCPAddr).Port\n\tfmt.Printf(\"LISTENING:%d\\n\", port)\n\n\t// Also write port to a file for tests that can't capture stdout\n\t// Include PID in filename to avoid conflicts when tests run in parallel\n\ttmpdir := os.TempDir()\n\tportFile := filepath.Join(tmpdir, fmt.Sprintf(\"testnextnethttp_port_%d\", os.Getpid()))\n\tos.WriteFile(portFile, []byte(fmt.Sprintf(\"%d\", port)), 0644)\n\n\t// Clean up port file when program exits\n\tdefer os.Remove(portFile)\n\n\terr = http.Serve(listener, nil)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/testnextprog.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"time\"\n)\n\nfunc sleepytime() {\n\ttime.Sleep(5 * time.Millisecond)\n}\n\nfunc helloworld() {\n\tfmt.Println(\"Hello, World!\")\n}\n\nfunc testnext() {\n\tvar (\n\t\tj = 1\n\t\tf = 2\n\t)\n\n\tfor i := 0; i <= 5; i++ {\n\t\tj += j * (j ^ 3) / 100\n\n\t\tif i == f {\n\t\t\tfmt.Println(\"foo\")\n\t\t\tbreak\n\t\t}\n\n\t\tsleepytime()\n\t}\n\n\thelloworld()\n}\n\nfunc main() {\n\td := make(chan int)\n\ttestnext()\n\tgo testgoroutine(9, d)\n\t<-d\n\tfmt.Println(\"done\")\n}\n\n// fix line\nfunc testgoroutine(foo int, d chan int) {\n\td <- foo\n}\n\nfunc init() {\n\truntime.LockOSThread()\n\truntime.GOMAXPROCS(4)\n}\n"
  },
  {
    "path": "_fixtures/testprog.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"time\"\n)\n\nfunc helloworld() {\n\tfmt.Println(\"Hello, World!\")\n}\n\nfunc sleepytime() {\n\ttime.Sleep(time.Millisecond)\n}\n\nfunc main() {\n\tfor i := 0; i < 500; i++ {\n\t\tsleepytime()\n\t\thelloworld()\n\t}\n}\n\nfunc init() {\n\truntime.LockOSThread()\n}\n"
  },
  {
    "path": "_fixtures/testrerecord.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\nfunc main() {\n\tt := time.Now().Unix()\n\tfmt.Println(t)\n}\n"
  },
  {
    "path": "_fixtures/testreturnaddress.go",
    "content": "package main\n\nimport \"sync\"\n\nfunc doSomething(wg *sync.WaitGroup) {\n\twg.Done()\n}\n\nfunc main() {\n\tvar wg sync.WaitGroup\n\twg.Add(2)\n\tgo doSomething(&wg)\n\tgo doSomething(&wg)\n\twg.Wait()\n}\n"
  },
  {
    "path": "_fixtures/testruntimebreakpoint.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc main() {\n\truntime.Breakpoint()\n\tfmt.Println(\"broke\")\n}\n"
  },
  {
    "path": "_fixtures/testshadow.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc main() {\n\ta := 0\n\t{\n\t\ta := 1\n\t\truntime.Breakpoint()\n\t\tfmt.Println(a)\n\t}\n\tfmt.Println(a)\n}\n"
  },
  {
    "path": "_fixtures/teststep.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc callme() {\n\tfmt.Println(\"hi\")\n}\n\nfunc main() {\n\truntime.Breakpoint()\n\tcallme()\n}\n"
  },
  {
    "path": "_fixtures/teststepconcurrent.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"time\"\n\t\"sync\"\n)\n\nvar v int = 99\nvar wg sync.WaitGroup\nvar s string\n\nfunc Foo(x, y int) (z int) {\n\t//s = fmt.Sprintf(\"x=%d, y=%d, z=%d\\n\", x, y, z)\n\tz = x + y\n\treturn\n}\n\nfunc Threads(fn func(x, y int) int) {\n\tfor j := 0; j < 100; j++ {\n\t\twg.Add(1)\n\t\tgo func() {\n\t\t\tfor k := 0; k < 100; k++ {\n\t\t\t\tfn(1, 2)\n\t\t\t\ttime.Sleep(10 * time.Millisecond)\n\t\t\t}\n\t\t\twg.Done()\n\t\t}()\n\t}\n}\n\nfunc main() {\n\tx := v\n\ty := x * x\n\tvar z int\n\tThreads(Foo)\n\tfor i := 0; i < 100; i++ {\n\t\tz = Foo(x, y)\n\t}\n\tfmt.Printf(\"z=%d\\n\", z)\n\twg.Wait()\n}\n"
  },
  {
    "path": "_fixtures/teststepprog.go",
    "content": "package main\n\nvar n = 0\n\nfunc CallFn2(x int) {\n\tn++\n}\n\nfunc CallFn(x int, fn func(x int)) {\n\tfn(x + 1)\n}\n\nfunc CallEface(eface interface{}) {\n\tif eface != nil {\n\t\tn++\n\t}\n}\n\nfunc main() {\n\tCallFn(0, CallFn2)\n\tCallEface(n)\n}\n"
  },
  {
    "path": "_fixtures/testthreads.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n)\n\nfunc anotherthread(wg *sync.WaitGroup) {\n\ti := 1 * 5 / 39020\n\tfmt.Println(i)\n\twg.Done()\n}\n\nfunc main() {\n\tvar wg sync.WaitGroup\n\tfor i := 0; i < 10; i++ {\n\t\twg.Add(1)\n\t\tgo anotherthread(&wg)\n\t}\n\twg.Wait()\n}\n"
  },
  {
    "path": "_fixtures/testtoggle.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n)\n\nfunc lineOne() {\n\tfmt.Println(\"lineOne function\")\n}\n\nfunc lineTwo() {\n\tfmt.Println(\"lineTwo function\")\n}\n\nfunc lineThree() {\n\tfmt.Println(\"lineThree function\")\n}\n\nfunc main() {\n\tlineOne()\n\tlineTwo()\n\tlineThree()\n}\n"
  },
  {
    "path": "_fixtures/testtracefns.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc D(i int) int {\n\treturn i * i * i\n}\nfunc C(i int) int {\n\n\treturn D(i+10) + 20\n}\nfunc B(i int) int {\n\treturn i * D(i)\n}\nfunc A(i int) int {\n\td := 10 + B(i)\n\treturn d + C(i)\n}\nfunc second(i int) int {\n\tif i > 0 {\n\t\treturn first(i - 1)\n\t} else {\n\t\treturn 0\n\t}\n}\nfunc first(n int) int {\n\tif n <= 1 {\n\t\treturn n\n\t} else {\n\t\treturn second(n - 3)\n\t}\n}\n\nfunc callmed(i int) int {\n\treturn i * i * i\n}\nfunc callmee(i int) int {\n\n\treturn i + 20\n}\nfunc callme2(i int) int {\n\td := callmee(i) + 40\n\treturn d + callmed(i)\n}\nfunc callme(i int) int {\n\treturn 10 + callme2(i)\n}\n\nfunc F0() {\n\tdefer func() {\n\t\trecover()\n\t}()\n\tF1()\n}\n\nfunc F1() {\n\tF2()\n}\n\nfunc F2() {\n\tF3()\n}\n\nfunc F3() {\n\tF4()\n}\n\nfunc F4() {\n\tpanic(\"blah\")\n}\n\nvar intc, intd int\n\nfunc swap() {\n\tdefer func() {\n\t\tintc += 100\n\t}()\n\ttemp := intc\n\tintc = intd\n\tintd = temp\n}\n\nfunc unnamedDefer() {\n\tintc = -100\n\tintd = 100\n\tswap()\n\tfmt.Println(intc, intd)\n}\nfunc formula(op string) func(int, int) int {\n\tvar calc func(int, int) int\n\tif op == \"add\" {\n\t\tcalc = func(m int, n int) int {\n\t\t\tres := m + n\n\t\t\treturn res\n\t\t}\n\t} else if op == \"mul\" {\n\t\tcalc = func(m int, n int) int {\n\t\t\tres := m * n\n\t\t\treturn res\n\t\t}\n\t}\n\treturn calc\n}\n\nfunc op() int {\n\tcalc := formula(\"add\")\n\tres := calc(10, 20)\n\treturn res\n}\n\nfunc assign(bar func()) {\n\tbar()\n}\nfunc testfunc() {\n\tintc = 10\n\tintd = 20\n}\n\nfunc dyn() {\n\tintc = 0\n\tintd = 0\n\tassign(testfunc)\n}\n\nfunc outer() {\n\tintc = 40\n        defer swap()\n}\nfunc nestDefer() {\n        defer outer()\n}\n\nfunc namedDeferLoop(n int) {\n        for i := 0; i < n; i++ {\n                defer testfunc()\n        }\n        temp := intc\n        intc = intd\n        intd = temp\n}\nfunc main() {\n\tj := 0\n\tj += A(2)\n\n\tj += first(6)\n\tj += callme(2)\n\tfmt.Println(j)\n\tunnamedDefer()\n\tnestDefer()\n\tnamedDeferLoop(2)\n\tF0()\n\tans := op()\n\tfmt.Println(ans)\n\tdyn()\n\n}\n"
  },
  {
    "path": "_fixtures/testunsafepointers.go",
    "content": "package main\n\nimport (\n\t\"runtime\"\n\t\"unsafe\"\n)\n\nfunc main() {\n\t// We're going to produce a pointer with a bad address.\n\tbadAddr := uintptr(0x42)\n\tunsafeDanglingPtrPtr := unsafe.Pointer(badAddr)\n\t// We produce a **int, instead of more simply a *int, in order for the test\n\t// program to test more complex Delve behavior.\n\tdanglingPtrPtr := (**int)(unsafeDanglingPtrPtr)\n\t_ = danglingPtrPtr\n\truntime.Breakpoint()\n}\n"
  },
  {
    "path": "_fixtures/testvariables.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\ntype FooBar struct {\n\tBaz int\n\tBur string\n}\n\n// same member names, different order / types\ntype FooBar2 struct {\n\tBur int\n\tBaz string\n}\n\ntype Nest struct {\n\tLevel int\n\tNest  *Nest\n}\n\nfunc barfoo() {\n\ta1 := \"bur\"\n\truntime.Breakpoint()\n\tfmt.Println(a1)\n}\n\nfunc foobar(baz string, bar FooBar) {\n\tvar (\n\t\ta1   = \"foofoofoofoofoofoo\"\n\t\ta2   = 6\n\t\ta3   = 7.23\n\t\ta4   = [2]int{1, 2}\n\t\ta5   = []int{1, 2, 3, 4, 5}\n\t\ta6   = FooBar{Baz: 8, Bur: \"word\"}\n\t\ta7   = &FooBar{Baz: 5, Bur: \"strum\"}\n\t\ta8   = FooBar2{Bur: 10, Baz: \"feh\"}\n\t\ta9   = (*FooBar)(nil)\n\t\ta10  = a1[2:5]\n\t\ta11  = [3]FooBar{{1, \"a\"}, {2, \"b\"}, {3, \"c\"}}\n\t\ta12  = []FooBar{{4, \"d\"}, {5, \"e\"}}\n\t\ta13  = []*FooBar{{6, \"f\"}, {7, \"g\"}, {8, \"h\"}}\n\t\tb1   = true\n\t\tb2   = false\n\t\tneg  = -1\n\t\ti8   = int8(1)\n\t\tu8   = uint8(255)\n\t\tu16  = uint16(65535)\n\t\tu32  = uint32(4294967295)\n\t\tu64  = uint64(18446744073709551615)\n\t\tup   = uintptr(5)\n\t\tf32  = float32(1.2)\n\t\tc64  = complex(float32(1), float32(2))\n\t\tc128 = complex(float64(2), float64(3))\n\t\ti32  = [2]int32{1, 2}\n\t\tf    = barfoo\n\t\tms   = Nest{0, &Nest{1, &Nest{2, &Nest{3, &Nest{4, nil}}}}} // Test recursion capping on structs\n\t\tni   = []interface{}([]interface{}{[]interface{}{123}})     // Test recursion capping on interfaces\n\t\tba   = make([]int, 200, 200)                                // Test array size capping\n\t\tmp   = map[int]interface{}{1: 42, 2: 43}\n\t)\n\n\truntime.Breakpoint()\n\tbarfoo()\n\tfmt.Println(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, b1, b2, baz, neg, i8, u8, u16, u32, u64, up, f32, c64, c128, i32, bar, f, ms, ni, ba, p1, mp)\n}\n\nvar p1 = 10\n\nfunc main() {\n\tfoobar(\"bazburzum\", FooBar{Baz: 10, Bur: \"lorem\"})\n}\n"
  },
  {
    "path": "_fixtures/testvariables2.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"go/constant\"\n\t\"math\"\n\t\"os\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"time\"\n\t\"unsafe\"\n)\n\ntype (\n\tByte    byte\n\tString  string\n\tUint32  uint32\n\tInt64   int64\n\tBool    bool\n\tFloat64 float64\n)\n\nconst (\n\tByteConst   Byte    = 255\n\tStringConst String  = \"hi\"\n\tUintConst   Uint32  = 42\n\tIntConst    Int64   = 9001\n\tBoolConst   Bool    = true\n\tFloatConst  Float64 = 3.14\n)\n\ntype astruct struct {\n\tA int\n\tB int\n}\n\ntype largestruct struct {\n\tname string\n\tv    [256]byte\n}\n\ntype astructName1 astruct\ntype astructName2 astruct\n\ntype bstruct struct {\n\ta astruct\n}\n\ntype cstruct struct {\n\tpb *bstruct\n\tsa []*astruct\n}\n\ntype a struct {\n\taas []a\n}\n\ntype A struct {\n\tval int\n}\n\ntype C struct {\n\ts string\n}\n\ntype B struct {\n\tA\n\t*C\n\ta   A\n\tptr *A\n}\n\ntype D struct {\n\tu1, u2, u3, u4, u5, u6 uint32\n}\n\nfunc afunc(x int) int {\n\treturn x + 2\n}\n\nfunc afunc1(x int) {\n}\n\nfunc afunc2() int {\n\treturn 0\n}\n\ntype functype func(int) int\n\nfunc (a *astruct) Error() string {\n\treturn \"not an error\"\n}\n\nfunc (a astruct) NonPointerReceiverMethod() {\n\treturn\n}\n\nfunc (b *bstruct) Error() string {\n\treturn \"not an error\"\n}\n\ntype dstruct struct {\n\tx interface{}\n}\n\ntype maptype map[string]interface{}\n\ntype benchstruct struct {\n\ta [64]byte\n\tb [64]byte\n}\n\ntype Item struct {\n\tName   string\n\tRoute  string\n\tActive int\n}\n\ntype Menu []Item\n\ntype truncatedMap struct {\n\tv []map[string]astruct\n}\n\ntype Cache struct {\n\tblocks [2000]Block\n}\n\ntype Block struct {\n\tcache *Cache\n}\n\ntype List struct {\n\tN    int\n\tNext *List\n}\n\ntype T struct {\n\tF string\n}\n\ntype W1 struct {\n\tT\n}\n\nfunc (*W1) M() {}\n\ntype I interface{ M() }\n\ntype W2 struct {\n\tW1\n\tT\n}\n\ntype W3 struct {\n\tI\n\tT\n}\n\ntype W4 struct {\n\tI\n}\n\ntype W5 struct {\n\t*W5\n}\n\ntype ThreeInts struct {\n\ta, b, c int\n}\n\ntype OnlyUsedInInterface struct {\n\ts string\n}\n\ntype Message []byte\n\nvar _ I = (*W2)(nil)\n\ntype pptr *pptr\n\nfunc main() {\n\ti1 := 1\n\ti2 := 2\n\tf1 := 3.0\n\ti3 := 3\n\tp1 := &i1\n\tpp1 := &p1\n\ts1 := []string{\"one\", \"two\", \"three\", \"four\", \"five\"}\n\ts3 := make([]int, 0, 6)\n\ta0 := [0]int{}\n\ta1 := [5]string{\"one\", \"two\", \"three\", \"four\", \"five\"}\n\tc1 := cstruct{&bstruct{astruct{1, 2}}, []*astruct{&astruct{1, 2}, &astruct{2, 3}, &astruct{4, 5}}}\n\ts2 := []astruct{{1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}, {11, 12}, {13, 14}, {15, 16}}\n\tp2 := &(c1.sa[2].B)\n\tas1 := astruct{1, 1}\n\tvar p3 *int\n\tstr1 := \"01234567890\"\n\tvar fn1 functype = afunc\n\tvar fn2 functype = nil\n\tvar nilslice []int = nil\n\tvar nilptr *int = nil\n\tch1 := make(chan int, 11)\n\tch1 <- 1\n\tch1 <- 4\n\tch1 <- 3\n\tch1 <- 2\n\tvar chnil chan int = nil\n\tm1 := map[string]astruct{\n\t\t\"Malone\":          astruct{2, 3},\n\t\t\"Adenauer\":        astruct{},\n\t\t\"squadrons\":       astruct{},\n\t\t\"quintuplets\":     astruct{},\n\t\t\"parasite\":        astruct{},\n\t\t\"wristwatches\":    astruct{},\n\t\t\"flashgun\":        astruct{},\n\t\t\"equivocally\":     astruct{},\n\t\t\"sweetbrier\":      astruct{},\n\t\t\"idealism\":        astruct{},\n\t\t\"tangos\":          astruct{},\n\t\t\"alterable\":       astruct{},\n\t\t\"quaffing\":        astruct{},\n\t\t\"arsenic\":         astruct{},\n\t\t\"coincidentally\":  astruct{},\n\t\t\"hindrances\":      astruct{},\n\t\t\"zoning\":          astruct{},\n\t\t\"egging\":          astruct{},\n\t\t\"inserts\":         astruct{},\n\t\t\"adaptive\":        astruct{},\n\t\t\"orientations\":    astruct{},\n\t\t\"periling\":        astruct{},\n\t\t\"lip\":             astruct{},\n\t\t\"chant\":           astruct{},\n\t\t\"availing\":        astruct{},\n\t\t\"fern\":            astruct{},\n\t\t\"flummoxes\":       astruct{},\n\t\t\"meanders\":        astruct{},\n\t\t\"ravenously\":      astruct{},\n\t\t\"reminisce\":       astruct{},\n\t\t\"snorkel\":         astruct{},\n\t\t\"gutters\":         astruct{},\n\t\t\"jibbed\":          astruct{},\n\t\t\"tiara\":           astruct{},\n\t\t\"takers\":          astruct{},\n\t\t\"animates\":        astruct{},\n\t\t\"Zubenelgenubi\":   astruct{},\n\t\t\"bantering\":       astruct{},\n\t\t\"tumblers\":        astruct{},\n\t\t\"horticulturists\": astruct{},\n\t\t\"thallium\":        astruct{},\n\t\t\"capital\":         astruct{},\n\t\t\"paramese\":        astruct{},\n\t\t\"vaccinationist\":  astruct{},\n\t\t\"shadrach\":        astruct{},\n\t\t\"unsincereness\":   astruct{},\n\t\t\"undazzled\":       astruct{},\n\t\t\"heautomorphism\":  astruct{},\n\t\t\"undermeasure\":    astruct{},\n\t\t\"intentionally\":   astruct{},\n\t\t\"glycine\":         astruct{},\n\t\t\"basiliscine\":     astruct{},\n\t\t\"preinvolvement\":  astruct{},\n\t\t\"adversaria\":      astruct{},\n\t\t\"capocchia\":       astruct{},\n\t\t\"annunciable\":     astruct{},\n\t\t\"unguidableness\":  astruct{},\n\t\t\"prankster\":       astruct{},\n\t\t\"jagless\":         astruct{},\n\t\t\"hormonal\":        astruct{},\n\t\t\"crenature\":       astruct{},\n\t\t\"unfluttering\":    astruct{},\n\t\t\"councilmanic\":    astruct{},\n\t\t\"Micraster\":       astruct{},\n\t\t\"raphidiferous\":   astruct{},\n\t\t\"groomer\":         astruct{},\n\t}\n\tvar mnil map[string]astruct = nil\n\tm2 := map[int]*astruct{1: &astruct{10, 11}}\n\tm3 := map[astruct]int{{1, 1}: 42, {2, 2}: 43}\n\tm4 := map[astruct]astruct{{1, 1}: {11, 11}, {2, 2}: {22, 22}}\n\tmlarge := map[largestruct]largestruct{largestruct{name: \"one\"}: largestruct{name: \"oneval\"}}\n\tupnil := unsafe.Pointer(nil)\n\tup1 := unsafe.Pointer(&i1)\n\ti4 := 800\n\ti5 := -3\n\ti6 := -500\n\tvar err1 error = c1.sa[0]\n\tvar err2 error = c1.pb\n\tvar errnil error = nil\n\tvar psa *astruct = nil\n\tvar errtypednil error = psa\n\tvar iface1 interface{} = c1.sa[0]\n\tvar iface2 interface{} = \"test\"\n\tvar iface3 interface{} = map[string]constant.Value{}\n\tvar iface4 interface{} = []constant.Value{constant.MakeInt64(4)}\n\tvar ifacenil interface{} = nil\n\tarr1 := [4]int{0, 1, 2, 3}\n\tparr := &arr1\n\tcpx1 := complex(1, 2)\n\tconst1 := constant.MakeInt64(3)\n\trecursive1 := dstruct{}\n\trecursive1.x = &recursive1\n\tvar iface5 interface{} = &recursive1\n\tvar iface2fn1 interface{} = afunc1\n\tvar iface2fn2 interface{} = afunc2\n\tvar mapinf maptype = map[string]interface{}{}\n\tmapinf[\"inf\"] = mapinf\n\tvar bencharr [64]benchstruct\n\tvar benchparr [64]*benchstruct\n\tvar issue1578 Block\n\tmainMenu := Menu{\n\t\t{Name: \"home\", Route: \"/\", Active: 1},\n\t\t{Name: \"About\", Route: \"/about\", Active: 1},\n\t\t{Name: \"Login\", Route: \"/login\", Active: 1},\n\t}\n\tvar aas = []a{{nil}}\n\taas[0].aas = aas\n\tb := B{A: A{-314}, C: &C{\"hello\"}, a: A{42}, ptr: &A{1337}}\n\tb2 := B{A: A{42}, a: A{47}}\n\tvar sd D\n\n\tifacearr := []error{&astruct{}, nil}\n\tefacearr := []interface{}{&astruct{}, \"test\", nil}\n\n\tvar mapanonstruct1 map[string]struct{}\n\tvar anonstruct1 struct{ val constant.Value }\n\tvar anonstruct2 struct{ i, j int }\n\tvar anoniface1 interface {\n\t\tSomeFunction(struct{ val constant.Value })\n\t\tOtherFunction(i, j int)\n\t}\n\tvar anonfunc func(a struct{ i int }, b interface{}, c struct{ val constant.Value })\n\n\tfor i := range benchparr {\n\t\tbenchparr[i] = &benchstruct{}\n\t}\n\n\tni8 := int8(-5)\n\tni16 := int16(-5)\n\tni32 := int32(-5)\n\tni64 := int64(-5)\n\n\tpinf := math.Inf(+1)\n\tninf := math.Inf(-1)\n\tnan := math.NaN()\n\n\tvar iface6 interface{}\n\tvar ptrinf *interface{}\n\tiface6 = &ptrinf\n\tptrinf = &iface6\n\n\tsliceinf := make([]interface{}, 1)\n\tsliceinf[0] = sliceinf\n\n\tzsvar := struct{}{}\n\tzsslice := make([]struct{}, 3)\n\tzsvmap := map[string]struct{}{\"testkey\": struct{}{}}\n\tvar tm truncatedMap\n\ttm.v = []map[string]astruct{m1}\n\tvar rettm = func() truncatedMap { return tm }\n\n\temptyslice := []string{}\n\temptymap := make(map[string]string)\n\n\tbyteslice := []byte{116, 195, 168, 115, 116}\n\tbytestypeslice := []Byte{116, 195, 168, 115, 116}\n\truneslice := []rune{116, 232, 115, 116}\n\n\tbytearray := [5]byte{116, 195, 168, 115, 116}\n\tbytetypearray := [5]Byte{116, 195, 168, 115, 116}\n\trunearray := [4]rune{116, 232, 115, 116}\n\n\tlongstr := \"very long string 0123456789a0123456789b0123456789c0123456789d0123456789e0123456789f0123456789g012345678h90123456789i0123456789j0123456789\"\n\tlongbyteslice := []byte(longstr)\n\tm5 := map[C]int{{longstr}: 1}\n\tm6 := map[string]int{longstr: 123}\n\tm7 := map[C]C{{longstr}: {\"hello\"}}\n\tcl := C{s: longstr}\n\tvar nilstruct *astruct = nil\n\n\tval := A{val: 1} // val vs val.val\n\tvar as2 astruct\n\ts4 := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}\n\n\tvar iface2map interface{} = map[string]interface{}{\n\t\t\"a\": map[string]interface{}{\n\t\t\t\"1\": map[string]interface{}{\n\t\t\t\t\"x\": 1,\n\t\t\t\t\"y\": 2,\n\t\t\t},\n\t\t},\n\t}\n\n\tll := &List{0, &List{1, &List{2, &List{3, &List{4, nil}}}}}\n\tunread := (*int)(unsafe.Pointer(uintptr(12345)))\n\n\tw2 := &W2{W1{T{\"T-inside-W1\"}}, T{\"T-inside-W2\"}}\n\tw3 := &W3{&W1{T{\"T-inside-W1\"}}, T{\"T-inside-W3\"}}\n\tw4 := &W4{&W1{T{\"T-inside-W1\"}}}\n\tw5 := &W5{nil}\n\tw5.W5 = w5\n\n\tos.Setenv(\"TZ\", \"UTC\")\n\ttim1 := time.Unix(233431200, 0).UTC()\n\tloc, _ := time.LoadLocation(\"America/Mazatlan\")\n\ttim2, _ := time.ParseInLocation(\"2006-01-02 15:04:05\", \"2022-06-07 02:03:04\", loc)\n\ttypedstringvar := String(\"blah\")\n\tnamedA1 := astructName1{12, 45}\n\tnamedA2 := astructName2{13, 46}\n\n\tbadslice := []int{1, 2, 3}\n\th := (*reflect.SliceHeader)(unsafe.Pointer(&badslice))\n\th.Data = 0\n\ttim3 := time.Date(300000, 1, 1, 0, 0, 0, 0, time.Local)\n\n\tint3chan := make(chan ThreeInts, 5)\n\tint3chan <- ThreeInts{a: 1}\n\tint3chan <- ThreeInts{a: 2}\n\tint3chan <- ThreeInts{a: 3}\n\n\tvar ptrinf2 pptr\n\tptrinf2 = &ptrinf2\n\n\tenum1 := ByteConst\n\tenum2 := StringConst\n\tenum3 := UintConst\n\tenum4 := IntConst\n\tenum5 := BoolConst\n\tenum6 := FloatConst\n\tvar zeropoint4 float64 = 0.4\n\n\tvar messageVar Message = Message{1, 2, 3, 4, 5}\n\n\tvar iface7 interface{} = OnlyUsedInInterface{\"test\"}\n\tissue4072 := []byte{116, 121, 112, 101, 32, 84, 32, 115, 116, 114, 117, 99, 116, 32, 123, 12, 12, 9, 255, 102, 108, 100, 99, 111, 109, 255}\n\n\tvar amb1 = 1\n\truntime.Breakpoint()\n\tfor amb1 := 0; amb1 < 10; amb1++ {\n\t\tfmt.Println(amb1)\n\t}\n\n\tlongarr := [100]int{}\n\tlongslice := make([]int, 100, 100)\n\n\truntime.Breakpoint()\n\tfmt.Println(i1, i2, i3, p1, pp1, amb1, s1, s3, a0, a1, p2, p3, s2, as1, str1, f1, fn1, fn2, nilslice, nilptr, ch1, chnil, m1, mnil, m2, m3, m4, m5, upnil, up1, i4, i5, i6, err1, err2, errnil, iface1, iface2, ifacenil, arr1, parr, cpx1, const1, iface3, iface4, recursive1, recursive1.x, iface5, iface2fn1, iface2fn2, bencharr, benchparr, mapinf, mainMenu, b, b2, sd, anonstruct1, anonstruct2, anoniface1, anonfunc, mapanonstruct1, ifacearr, efacearr, ni8, ni16, ni32, ni64, pinf, ninf, nan, zsvmap, zsslice, zsvar, tm, rettm, errtypednil, emptyslice, emptymap, byteslice, bytestypeslice, runeslice, bytearray, bytetypearray, runearray, longstr, nilstruct, as2, as2.NonPointerReceiverMethod, s4, iface2map, issue1578, ll, unread, w2, w3, w4, w5, longarr, longslice, val, m6, m7, cl, tim1, tim2, typedstringvar, namedA1, namedA2, astructName1(namedA2), badslice, tim3, int3chan, longbyteslice, enum1, enum2, enum3, enum4, enum5, enum6, zeropoint4, mlarge, messageVar, iface7, issue4072)\n}\n"
  },
  {
    "path": "_fixtures/testvariables_generic.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n)\n\ntype astruct struct {\n\tx, y int\n}\n\nfunc testfn[T any, K comparable](arg1 T, arg2 K) {\n\tm := make(map[K]T)\n\tm[arg2] = arg1\n\truntime.Breakpoint()\n\tfmt.Println(arg1, arg2, m)\n}\n\nfunc main() {\n\ttestfn[int, float32](3, 2.1)\n\ttestfn(&astruct{0, 1}, astruct{2, 3})\n}\n"
  },
  {
    "path": "_fixtures/testvariables_pointers_not_loaded.go",
    "content": "package main\n\nimport \"runtime\"\n\nfunc main() {\n\ttype StructWithInterface struct {\n\t\tVal any\n\t}\n\tvar i int\n\tvar ba = StructWithInterface{}\n\tba.Val = &i\n\n\tvar ptrPtr **int\n\t_ = ptrPtr\n\n\truntime.Breakpoint()\n}\n"
  },
  {
    "path": "_fixtures/testvariablescgo/test.c",
    "content": "#include <stdlib.h>\n#include <string.h>\n#include <stdio.h>\n\n#ifdef __amd64__\n#define BREAKPOINT asm(\"int3;\")\n#elif __i386__\n#define BREAKPOINT asm(\"int3;\")\n#elif __aarch64__\n#ifdef WIN32\n#define BREAKPOINT asm(\"brk 0xF000;\")\n#else\n#define BREAKPOINT asm(\"brk 0;\")\n#endif\n#elif __riscv\n#define BREAKPOINT asm(\"ebreak;\")\n#elif __loongarch__\n#define BREAKPOINT asm(\"break 0;\")\n#endif\n\n#define N 100\n\nstruct align_check {\n\tint a;\n\tchar b;\n};\n\nvoid testfn(void) {\n\tconst char *s0 = \"a string\";\n\tconst char *longstring = \"averylongstring0123456789a0123456789b0123456789c0123456789d0123456789e0123456789f0123456789g0123456789h0123456789\";\n\tint *v = malloc(sizeof(int) * N);\n\tstruct align_check *v_align_check = malloc(sizeof(struct align_check) * N);\n\n\tfor (int i = 0; i < N; i++) {\n\t\tv[i] = i;\n\t\tv_align_check[i].a = i;\n\t\tv_align_check[i].b = i;\n\t}\n\n\tchar *s = malloc(strlen(s0) + 1);\n\tstrcpy(s, s0);\n\n\tBREAKPOINT;\n\n\tprintf(\"%s %s %p %p\\n\", s, longstring, v, v_align_check);\n}\n"
  },
  {
    "path": "_fixtures/testvariablescgo/testvariablescgo.go",
    "content": "package main\n\n// #cgo CFLAGS: -g -Wall -O0 -std=gnu99\n/*\nextern void testfn(void);\n*/\nimport \"C\"\n\nfunc main() {\n\tC.testfn()\n}\n"
  },
  {
    "path": "_fixtures/trace_backend_parity.go",
    "content": "package main\n\nimport \"fmt\"\n\n//go:noinline\nfunc allTypes(i int64, u uint64, b bool, s string) int {\n\tfmt.Printf(\"i=%d u=%d b=%v s=%s\\n\", i, u, b, s)\n\treturn len(s)\n}\n\nfunc main() {\n\tresult := allTypes(42, 100, true, \"hello\")\n\tfmt.Printf(\"result=%d\\n\", result)\n}\n"
  },
  {
    "path": "_fixtures/traceperf.go",
    "content": "package main\n\nfunc PerfCheck(i, a, b, c int) {\n\tx := a - b - c\n\t_ = x\n}\n\nfunc main() {\n\ta := 1\n\tb := 1\n\tc := 1\n\tfor i := 0; true; i++ {\n\t\ta = a * 2\n\t\tb = -b + i\n\t\tc = i * b\n\t\tPerfCheck(i, a, b, c)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/traceprog.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc callme(i int) int {\n\treturn i * i\n}\n\nfunc main() {\n\tj := 0\n\tj += callme(2)\n\tfmt.Println(j)\n}\n"
  },
  {
    "path": "_fixtures/traceret.go",
    "content": "package main\n\nimport \"fmt\"\n\nfunc fncall1() int {\n\treturn 1\n}\n\nfunc fncall2() int {\n\treturn 2\n}\n\nfunc main() {\n\tfmt.Println(fncall1())\n\tfmt.Println(fncall2())\n}\n"
  },
  {
    "path": "_fixtures/waitfordebugger.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/go-delve/delve/pkg/debugdetect\"\n)\n\nfunc main() {\n\terr := debugdetect.WaitForDebugger()\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"ERROR: %v\\n\", err)\n\t\tos.Exit(2)\n\t}\n\tfmt.Println(\"DEBUGGER_FOUND\")\n}\n"
  },
  {
    "path": "_fixtures/watchpointInterface.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"runtime\"\n)\n\nfunc main() {\n\tvar err error = errors.New(\"test error\")\n\tfmt.Println(\"Error created:\", err)\n\terr = errors.New(\"modified error\")\n\tfmt.Println(\"Error modified:\", err)\n\truntime.Breakpoint()\n}\n"
  },
  {
    "path": "_fixtures/watchpointInterfaceNil.go",
    "content": "package main\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\nfunc main() {\n\tvar err error\n\tfmt.Println(\"Error created:\", err)\n\terr = errors.New(\"modified error\")\n\tfmt.Println(\"Error modified:\", err)\n\terr = errors.New(\"final modified error\")\n\tfmt.Println(\"Error modified final:\", err)\n}\n"
  },
  {
    "path": "_fixtures/workdir.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nfunc main() {\n\tpwd, err := os.Getwd()\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\tos.Exit(1)\n\t}\n\tfmt.Println(pwd)\n}\n"
  },
  {
    "path": "_fixtures/xmm0print/main.go",
    "content": "package main\n\nimport \"fmt\"\n\n//go:noescape\nfunc VPSLLQ36(src, dst *[4]uint64)\n\nfunc main() {\n\tsrc := [4]uint64{0: 0x38180a06, 1: 0x38180a06, 2: 0x18080200, 3: 0x18080200}\n\tdst := [4]uint64{}\n\tVPSLLQ36(&src, &dst)\n\n\tfor _, qword := range dst {\n\t\tfmt.Printf(\"%064b\\n\", qword)\n\t}\n}\n"
  },
  {
    "path": "_fixtures/xmm0print/main.s",
    "content": "#include \"textflag.h\"\n\nTEXT ·VPSLLQ36(SB), NOSPLIT, $0-16\n    MOVQ src+0(FP), AX\n    MOVQ dst+8(FP), BX\n    VMOVDQU (AX), Y0\n    VPSLLQ $36, Y0, Y0\n    VMOVDQU Y0, (BX)\n    RET\n"
  },
  {
    "path": "_scripts/capslock.sh",
    "content": "#!/bin/bash\ncl() {\n\techo $1/$2\n\tcapslock -goos $1 -goarch $2 -packages ./cmd/dlv > _scripts/capslock_$1_$2-output.txt\n}\ncl darwin amd64\ncl darwin arm64\ncl linux 386\ncl linux amd64\ncl linux arm64\ncl linux ppc64le\ncl linux riscv64\ncl windows amd64\ncl windows arm64\n"
  },
  {
    "path": "_scripts/capslock_darwin_amd64-output.txt",
    "content": "Capslock is an experimental tool for static analysis of Go packages.\nShare feedback and file bugs at https://github.com/google/capslock.\nFor additional debugging signals, use verbose mode with -output=verbose\nTo get machine-readable full analysis output, use -output=json\n\nAnalyzed packages:\n  github.com/cilium/ebpf v0.11.0\n  github.com/cosiner/argv v0.1.0\n  github.com/cpuguy83/go-md2man/v2 v2.0.6\n  github.com/derekparker/trie/v3 v3.2.0\n  github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n  github.com/google/go-dap v0.12.0\n  github.com/mattn/go-isatty v0.0.20\n  github.com/mattn/go-runewidth v0.0.13\n  github.com/rivo/uniseg v0.2.0\n  github.com/russross/blackfriday/v2 v2.1.0\n  github.com/spf13/cobra v1.10.2\n  github.com/spf13/pflag v1.0.9\n  go.starlark.net v0.0.0-20231101134539-556fd59b42f6\n  go.yaml.in/yaml/v3 v3.0.4\n  golang.org/x/arch v0.11.0\n  golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2\n  golang.org/x/sync v0.8.0\n  golang.org/x/sys v0.26.0\n  golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n\nARBITRARY_EXECUTION: 1 references\nEXEC: 2 references\nFILES: 2 references\nMODIFY_SYSTEM_STATE/CHDIR: 1 references\nMODIFY_SYSTEM_STATE/ENV: 1 references\nMODIFY_SYSTEM_STATE/LOGGING: 1 references\nMODIFY_SYSTEM_STATE/SIGNALS: 1 references\nNETWORK: 1 references\nOPERATING_SYSTEM: 1 references\nREAD_SYSTEM_STATE: 2 references\nREFLECT: 2 references\nRUNTIME: 1 references\nSYSTEM_CALLS: 2 references\nUNANALYZED: 1 references\nUNSAFE_POINTER: 2 references\n\n"
  },
  {
    "path": "_scripts/capslock_darwin_arm64-output.txt",
    "content": "Capslock is an experimental tool for static analysis of Go packages.\nShare feedback and file bugs at https://github.com/google/capslock.\nFor additional debugging signals, use verbose mode with -output=verbose\nTo get machine-readable full analysis output, use -output=json\n\nAnalyzed packages:\n  github.com/cosiner/argv v0.1.0\n  github.com/cpuguy83/go-md2man/v2 v2.0.6\n  github.com/derekparker/trie/v3 v3.2.0\n  github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n  github.com/google/go-dap v0.12.0\n  github.com/mattn/go-isatty v0.0.20\n  github.com/mattn/go-runewidth v0.0.13\n  github.com/rivo/uniseg v0.2.0\n  github.com/russross/blackfriday/v2 v2.1.0\n  github.com/spf13/cobra v1.10.2\n  github.com/spf13/pflag v1.0.9\n  go.starlark.net v0.0.0-20231101134539-556fd59b42f6\n  go.yaml.in/yaml/v3 v3.0.4\n  golang.org/x/arch v0.11.0\n  golang.org/x/sync v0.8.0\n  golang.org/x/sys v0.26.0\n  golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n\nARBITRARY_EXECUTION: 1 references\nEXEC: 2 references\nFILES: 2 references\nMODIFY_SYSTEM_STATE/CHDIR: 1 references\nMODIFY_SYSTEM_STATE/ENV: 1 references\nMODIFY_SYSTEM_STATE/LOGGING: 1 references\nMODIFY_SYSTEM_STATE/SIGNALS: 1 references\nNETWORK: 1 references\nOPERATING_SYSTEM: 1 references\nREAD_SYSTEM_STATE: 2 references\nREFLECT: 2 references\nRUNTIME: 1 references\nSYSTEM_CALLS: 2 references\nUNANALYZED: 1 references\nUNSAFE_POINTER: 2 references\n\n"
  },
  {
    "path": "_scripts/capslock_linux_386-output.txt",
    "content": "Capslock is an experimental tool for static analysis of Go packages.\nShare feedback and file bugs at https://github.com/google/capslock.\nFor additional debugging signals, use verbose mode with -output=verbose\nTo get machine-readable full analysis output, use -output=json\n\nAnalyzed packages:\n  github.com/cilium/ebpf v0.11.0\n  github.com/cosiner/argv v0.1.0\n  github.com/cpuguy83/go-md2man/v2 v2.0.6\n  github.com/derekparker/trie/v3 v3.2.0\n  github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n  github.com/google/go-dap v0.12.0\n  github.com/mattn/go-isatty v0.0.20\n  github.com/mattn/go-runewidth v0.0.13\n  github.com/rivo/uniseg v0.2.0\n  github.com/russross/blackfriday/v2 v2.1.0\n  github.com/spf13/cobra v1.10.2\n  github.com/spf13/pflag v1.0.9\n  go.starlark.net v0.0.0-20231101134539-556fd59b42f6\n  go.yaml.in/yaml/v3 v3.0.4\n  golang.org/x/arch v0.11.0\n  golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2\n  golang.org/x/sync v0.8.0\n  golang.org/x/sys v0.26.0\n  golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n\nARBITRARY_EXECUTION: 1 references\nEXEC: 2 references\nFILES: 2 references\nMODIFY_SYSTEM_STATE/CHDIR: 1 references\nMODIFY_SYSTEM_STATE/ENV: 1 references\nMODIFY_SYSTEM_STATE/LOGGING: 1 references\nMODIFY_SYSTEM_STATE/SIGNALS: 1 references\nNETWORK: 1 references\nOPERATING_SYSTEM: 1 references\nREAD_SYSTEM_STATE: 2 references\nREFLECT: 2 references\nRUNTIME: 1 references\nSYSTEM_CALLS: 1 references\nUNANALYZED: 1 references\nUNSAFE_POINTER: 2 references\n\n"
  },
  {
    "path": "_scripts/capslock_linux_amd64-output.txt",
    "content": "Capslock is an experimental tool for static analysis of Go packages.\nShare feedback and file bugs at https://github.com/google/capslock.\nFor additional debugging signals, use verbose mode with -output=verbose\nTo get machine-readable full analysis output, use -output=json\n\nAnalyzed packages:\n  github.com/cilium/ebpf v0.11.0\n  github.com/cosiner/argv v0.1.0\n  github.com/cpuguy83/go-md2man/v2 v2.0.6\n  github.com/derekparker/trie/v3 v3.2.0\n  github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n  github.com/google/go-dap v0.12.0\n  github.com/mattn/go-isatty v0.0.20\n  github.com/mattn/go-runewidth v0.0.13\n  github.com/rivo/uniseg v0.2.0\n  github.com/russross/blackfriday/v2 v2.1.0\n  github.com/spf13/cobra v1.10.2\n  github.com/spf13/pflag v1.0.9\n  go.starlark.net v0.0.0-20231101134539-556fd59b42f6\n  go.yaml.in/yaml/v3 v3.0.4\n  golang.org/x/arch v0.11.0\n  golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2\n  golang.org/x/sync v0.8.0\n  golang.org/x/sys v0.26.0\n  golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n\nARBITRARY_EXECUTION: 1 references\nEXEC: 2 references\nFILES: 2 references\nMODIFY_SYSTEM_STATE/CHDIR: 1 references\nMODIFY_SYSTEM_STATE/ENV: 1 references\nMODIFY_SYSTEM_STATE/LOGGING: 1 references\nMODIFY_SYSTEM_STATE/SIGNALS: 1 references\nNETWORK: 1 references\nOPERATING_SYSTEM: 1 references\nREAD_SYSTEM_STATE: 2 references\nREFLECT: 2 references\nRUNTIME: 2 references\nSYSTEM_CALLS: 2 references\nUNANALYZED: 2 references\nUNSAFE_POINTER: 2 references\n\n"
  },
  {
    "path": "_scripts/capslock_linux_arm64-output.txt",
    "content": "Capslock is an experimental tool for static analysis of Go packages.\nShare feedback and file bugs at https://github.com/google/capslock.\nFor additional debugging signals, use verbose mode with -output=verbose\nTo get machine-readable full analysis output, use -output=json\n\nAnalyzed packages:\n  github.com/cosiner/argv v0.1.0\n  github.com/cpuguy83/go-md2man/v2 v2.0.6\n  github.com/derekparker/trie/v3 v3.2.0\n  github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n  github.com/google/go-dap v0.12.0\n  github.com/mattn/go-isatty v0.0.20\n  github.com/mattn/go-runewidth v0.0.13\n  github.com/rivo/uniseg v0.2.0\n  github.com/russross/blackfriday/v2 v2.1.0\n  github.com/spf13/cobra v1.10.2\n  github.com/spf13/pflag v1.0.9\n  go.starlark.net v0.0.0-20231101134539-556fd59b42f6\n  go.yaml.in/yaml/v3 v3.0.4\n  golang.org/x/arch v0.11.0\n  golang.org/x/sync v0.8.0\n  golang.org/x/sys v0.26.0\n  golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n\nARBITRARY_EXECUTION: 1 references\nEXEC: 2 references\nFILES: 2 references\nMODIFY_SYSTEM_STATE/CHDIR: 1 references\nMODIFY_SYSTEM_STATE/ENV: 1 references\nMODIFY_SYSTEM_STATE/LOGGING: 1 references\nMODIFY_SYSTEM_STATE/SIGNALS: 1 references\nNETWORK: 1 references\nOPERATING_SYSTEM: 1 references\nREAD_SYSTEM_STATE: 2 references\nREFLECT: 2 references\nRUNTIME: 1 references\nSYSTEM_CALLS: 2 references\nUNANALYZED: 1 references\nUNSAFE_POINTER: 2 references\n\n"
  },
  {
    "path": "_scripts/capslock_linux_ppc64le-output.txt",
    "content": "Capslock is an experimental tool for static analysis of Go packages.\nShare feedback and file bugs at https://github.com/google/capslock.\nFor additional debugging signals, use verbose mode with -output=verbose\nTo get machine-readable full analysis output, use -output=json\n\nAnalyzed packages:\n  github.com/cosiner/argv v0.1.0\n  github.com/cpuguy83/go-md2man/v2 v2.0.6\n  github.com/derekparker/trie/v3 v3.2.0\n  github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n  github.com/google/go-dap v0.12.0\n  github.com/mattn/go-isatty v0.0.20\n  github.com/mattn/go-runewidth v0.0.13\n  github.com/rivo/uniseg v0.2.0\n  github.com/russross/blackfriday/v2 v2.1.0\n  github.com/spf13/cobra v1.10.2\n  github.com/spf13/pflag v1.0.9\n  go.starlark.net v0.0.0-20231101134539-556fd59b42f6\n  go.yaml.in/yaml/v3 v3.0.4\n  golang.org/x/arch v0.11.0\n  golang.org/x/sync v0.8.0\n  golang.org/x/sys v0.26.0\n  golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n\nARBITRARY_EXECUTION: 1 references\nEXEC: 2 references\nFILES: 2 references\nMODIFY_SYSTEM_STATE/CHDIR: 1 references\nMODIFY_SYSTEM_STATE/ENV: 1 references\nMODIFY_SYSTEM_STATE/LOGGING: 1 references\nMODIFY_SYSTEM_STATE/SIGNALS: 1 references\nNETWORK: 1 references\nOPERATING_SYSTEM: 1 references\nREAD_SYSTEM_STATE: 2 references\nREFLECT: 2 references\nRUNTIME: 1 references\nSYSTEM_CALLS: 2 references\nUNANALYZED: 1 references\nUNSAFE_POINTER: 2 references\n\n"
  },
  {
    "path": "_scripts/capslock_linux_riscv64-output.txt",
    "content": "Capslock is an experimental tool for static analysis of Go packages.\nShare feedback and file bugs at https://github.com/google/capslock.\nFor additional debugging signals, use verbose mode with -output=verbose\nTo get machine-readable full analysis output, use -output=json\n\nAnalyzed packages:\n  github.com/cosiner/argv v0.1.0\n  github.com/cpuguy83/go-md2man/v2 v2.0.6\n  github.com/derekparker/trie/v3 v3.2.0\n  github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n  github.com/google/go-dap v0.12.0\n  github.com/mattn/go-isatty v0.0.20\n  github.com/mattn/go-runewidth v0.0.13\n  github.com/rivo/uniseg v0.2.0\n  github.com/russross/blackfriday/v2 v2.1.0\n  github.com/spf13/cobra v1.10.2\n  github.com/spf13/pflag v1.0.9\n  go.starlark.net v0.0.0-20231101134539-556fd59b42f6\n  go.yaml.in/yaml/v3 v3.0.4\n  golang.org/x/arch v0.11.0\n  golang.org/x/sync v0.8.0\n  golang.org/x/sys v0.26.0\n  golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n\nARBITRARY_EXECUTION: 1 references\nEXEC: 2 references\nFILES: 2 references\nMODIFY_SYSTEM_STATE/CHDIR: 1 references\nMODIFY_SYSTEM_STATE/ENV: 1 references\nMODIFY_SYSTEM_STATE/LOGGING: 1 references\nMODIFY_SYSTEM_STATE/SIGNALS: 1 references\nNETWORK: 1 references\nOPERATING_SYSTEM: 1 references\nREAD_SYSTEM_STATE: 2 references\nREFLECT: 2 references\nRUNTIME: 1 references\nSYSTEM_CALLS: 1 references\nUNANALYZED: 1 references\nUNSAFE_POINTER: 2 references\n\n"
  },
  {
    "path": "_scripts/capslock_windows_amd64-output.txt",
    "content": "Capslock is an experimental tool for static analysis of Go packages.\nShare feedback and file bugs at https://github.com/google/capslock.\nFor additional debugging signals, use verbose mode with -output=verbose\nTo get machine-readable full analysis output, use -output=json\n\nAnalyzed packages:\n  github.com/cilium/ebpf v0.11.0\n  github.com/cosiner/argv v0.1.0\n  github.com/cpuguy83/go-md2man/v2 v2.0.6\n  github.com/derekparker/trie/v3 v3.2.0\n  github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n  github.com/google/go-dap v0.12.0\n  github.com/inconshreveable/mousetrap v1.1.0\n  github.com/mattn/go-colorable v0.1.13\n  github.com/mattn/go-isatty v0.0.20\n  github.com/mattn/go-runewidth v0.0.13\n  github.com/rivo/uniseg v0.2.0\n  github.com/russross/blackfriday/v2 v2.1.0\n  github.com/spf13/cobra v1.10.2\n  github.com/spf13/pflag v1.0.9\n  go.starlark.net v0.0.0-20231101134539-556fd59b42f6\n  go.yaml.in/yaml/v3 v3.0.4\n  golang.org/x/arch v0.11.0\n  golang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2\n  golang.org/x/sync v0.8.0\n  golang.org/x/sys v0.26.0\n  golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n\nARBITRARY_EXECUTION: 2 references\nEXEC: 2 references\nFILES: 2 references\nMODIFY_SYSTEM_STATE/CHDIR: 1 references\nMODIFY_SYSTEM_STATE/ENV: 1 references\nMODIFY_SYSTEM_STATE/LOGGING: 1 references\nMODIFY_SYSTEM_STATE/SIGNALS: 1 references\nNETWORK: 1 references\nOPERATING_SYSTEM: 1 references\nREAD_SYSTEM_STATE: 2 references\nREFLECT: 2 references\nRUNTIME: 1 references\nSYSTEM_CALLS: 2 references\nUNANALYZED: 2 references\nUNSAFE_POINTER: 2 references\n\n"
  },
  {
    "path": "_scripts/capslock_windows_arm64-output.txt",
    "content": "Capslock is an experimental tool for static analysis of Go packages.\nShare feedback and file bugs at https://github.com/google/capslock.\nFor additional debugging signals, use verbose mode with -output=verbose\nTo get machine-readable full analysis output, use -output=json\n\nAnalyzed packages:\n  github.com/cosiner/argv v0.1.0\n  github.com/cpuguy83/go-md2man/v2 v2.0.6\n  github.com/derekparker/trie/v3 v3.2.0\n  github.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n  github.com/google/go-dap v0.12.0\n  github.com/inconshreveable/mousetrap v1.1.0\n  github.com/mattn/go-colorable v0.1.13\n  github.com/mattn/go-isatty v0.0.20\n  github.com/mattn/go-runewidth v0.0.13\n  github.com/rivo/uniseg v0.2.0\n  github.com/russross/blackfriday/v2 v2.1.0\n  github.com/spf13/cobra v1.10.2\n  github.com/spf13/pflag v1.0.9\n  go.starlark.net v0.0.0-20231101134539-556fd59b42f6\n  go.yaml.in/yaml/v3 v3.0.4\n  golang.org/x/arch v0.11.0\n  golang.org/x/sync v0.8.0\n  golang.org/x/sys v0.26.0\n  golang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n\nARBITRARY_EXECUTION: 2 references\nEXEC: 2 references\nFILES: 2 references\nMODIFY_SYSTEM_STATE/CHDIR: 1 references\nMODIFY_SYSTEM_STATE/ENV: 1 references\nMODIFY_SYSTEM_STATE/LOGGING: 1 references\nMODIFY_SYSTEM_STATE/SIGNALS: 1 references\nNETWORK: 1 references\nOPERATING_SYSTEM: 1 references\nREAD_SYSTEM_STATE: 2 references\nREFLECT: 2 references\nRUNTIME: 1 references\nSYSTEM_CALLS: 2 references\nUNANALYZED: 2 references\nUNSAFE_POINTER: 2 references\n\n"
  },
  {
    "path": "_scripts/gen-backend_test_health.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nfunc process(path string, skipped map[string]map[string]int) {\n\tf, err := parser.ParseFile(new(token.FileSet), path, nil, 0)\n\tif err != nil {\n\t\tlog.Fatalf(\"could not compile proc_test.go: %v\", err)\n\t}\n\tntests := 0\n\tast.Inspect(f, func(node ast.Node) bool {\n\t\tswitch node := node.(type) {\n\t\tcase *ast.File:\n\t\t\treturn true\n\t\tcase *ast.FuncDecl:\n\t\t\tif !strings.HasPrefix(node.Name.Name, \"Test\") {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tntests++\n\t\tstmtLoop:\n\t\t\tfor _, stmt := range node.Body.List {\n\t\t\t\texpr, isexpr := stmt.(*ast.ExprStmt)\n\t\t\t\tif !isexpr {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tcall, ok := expr.X.(*ast.CallExpr)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tfun, ok := call.Fun.(*ast.Ident)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tswitch fun.Name {\n\t\t\t\tcase \"skipOn\":\n\t\t\t\t\treason, conditions := skipOnArgs(call.Args)\n\t\t\t\t\tif reason == \"N/A\" {\n\t\t\t\t\t\tntests--\n\t\t\t\t\t\tbreak stmtLoop\n\t\t\t\t\t}\n\t\t\t\t\tif skipped[conditions] == nil {\n\t\t\t\t\t\tskipped[conditions] = make(map[string]int)\n\t\t\t\t\t}\n\t\t\t\t\tskipped[conditions][reason]++\n\t\t\t\tcase \"skipUnlessOn\":\n\t\t\t\t\tntests--\n\t\t\t\t\tbreak stmtLoop\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false\n\t})\n}\n\nfunc main() {\n\tskipped := make(map[string]map[string]int)\n\tprocess(\"pkg/proc/proc_test.go\", skipped)\n\tprocess(\"pkg/proc/stepping_test.go\", skipped)\n\tvar fh io.WriteCloser\n\tif len(os.Args) > 1 && os.Args[1] == \"-\" {\n\t\tfh = os.Stdout\n\t} else {\n\t\tvar err error\n\t\tfh, err = os.Create(\"./Documentation/backend_test_health.md\")\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"could not create backend_test_health.md: %v\", err)\n\t\t}\n\t}\n\tfmt.Fprintf(fh, \"Tests skipped by each supported backend:\\n\\n\")\n\tconds := []string{}\n\tfor cond := range skipped {\n\t\tconds = append(conds, cond)\n\t}\n\tsort.Strings(conds)\n\tfor _, cond := range conds {\n\t\ttot := 0\n\t\tfor _, v := range skipped[cond] {\n\t\t\ttot += v\n\t\t}\n\t\tfmt.Fprintf(fh, \"* %s skipped = %d\\n\", cond, tot)\n\t\treasons := []string{}\n\t\tfor reason := range skipped[cond] {\n\t\t\treasons = append(reasons, reason)\n\t\t}\n\t\tsort.Strings(reasons)\n\t\tfor _, reason := range reasons {\n\t\t\tfmt.Fprintf(fh, \"\\t* %d %s\\n\", skipped[cond][reason], reason)\n\t\t}\n\t}\n\terr := fh.Close()\n\tif err != nil {\n\t\tlog.Fatalf(\"could not close output file: %v\", err)\n\t}\n}\n\nfunc skipOnArgs(args []ast.Expr) (reason string, conditions string) {\n\treason, _ = strconv.Unquote(args[1].(*ast.BasicLit).Value)\n\tconds := []string{}\n\tfor _, arg := range args[2:] {\n\t\tcond, _ := strconv.Unquote(arg.(*ast.BasicLit).Value)\n\t\tconds = append(conds, cond)\n\t}\n\tconditions = strings.Join(conds, \"/\")\n\treturn reason, conditions\n}\n"
  },
  {
    "path": "_scripts/gen-capslock-all.go",
    "content": "//go:build ignore\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"sync\"\n)\n\ntype Platform struct {\n\tGOOS      string\n\tGOARCH    string\n\tBuildTags string\n}\n\n// All supported platforms (except freebsd)\nvar platforms = []Platform{\n\t{GOOS: \"linux\", GOARCH: \"amd64\"},\n\t{GOOS: \"linux\", GOARCH: \"386\"},\n\t{GOOS: \"linux\", GOARCH: \"arm64\"},\n\t{GOOS: \"linux\", GOARCH: \"riscv64\"},\n\t{GOOS: \"linux\", GOARCH: \"ppc64le\", BuildTags: \"exp.linuxppc64le\"},\n\t{GOOS: \"darwin\", GOARCH: \"amd64\"},\n\t{GOOS: \"darwin\", GOARCH: \"arm64\"},\n\t{GOOS: \"windows\", GOARCH: \"amd64\"},\n\t{GOOS: \"windows\", GOARCH: \"arm64\"},\n}\n\nconst (\n\tcolorRed    = \"\\033[0;31m\"\n\tcolorGreen  = \"\\033[0;32m\"\n\tcolorYellow = \"\\033[1;33m\"\n\tcolorReset  = \"\\033[0m\"\n)\n\nfunc main() {\n\t// Find the project root by looking for go.mod\n\tprojectRoot := findProjectRoot()\n\tif projectRoot == \"\" {\n\t\tlog.Fatal(\"Could not find project root (no go.mod found)\")\n\t}\n\n\t// Change to project root\n\tif err := os.Chdir(projectRoot); err != nil {\n\t\tlog.Fatalf(\"Failed to change to project root: %v\", err)\n\t}\n\n\tfmt.Println(\"Generating capslock output files for all supported platforms...\")\n\tfmt.Println(\"==================================================\")\n\n\tsuccessCount := 0\n\tfailureCount := 0\n\tvar failedPlatforms []string\n\n\tvar wg sync.WaitGroup\n\n\tfor _, platform := range platforms {\n\t\twg.Add(1)\n\t\tgo func() {\n\t\t\tdefer wg.Done()\n\t\t\tif err := generateCapslock(platform); err != nil {\n\t\t\t\tfailureCount++\n\t\t\t\tfailedPlatforms = append(failedPlatforms, fmt.Sprintf(\"%s/%s\", platform.GOOS, platform.GOARCH))\n\t\t\t\tfmt.Printf(\"Generating for %s/%s... %sFAILED%s\\n\", platform.GOOS, platform.GOARCH, colorRed, colorReset)\n\t\t\t\tfmt.Printf(\"  Error: %v\\n\", err)\n\t\t\t} else {\n\t\t\t\tsuccessCount++\n\t\t\t\tfmt.Printf(\"Generating for %s/%s... %sSUCCESS%s\\n\",\n\t\t\t\t\tplatform.GOOS, platform.GOARCH, colorGreen, colorReset)\n\t\t\t}\n\t\t}()\n\t}\n\twg.Wait()\n\n\tfmt.Println(\"==================================================\")\n\tfmt.Println(\"Generation complete!\")\n\tfmt.Printf(\"  %sSuccessful: %d%s\\n\", colorGreen, successCount, colorReset)\n\tfmt.Printf(\"  %sFailed: %d%s\\n\", colorRed, failureCount, colorReset)\n\n\tif len(failedPlatforms) > 0 {\n\t\tfmt.Println(\"\\nFailed platforms:\")\n\t\tfor _, platform := range failedPlatforms {\n\t\t\tfmt.Printf(\"  - %s\\n\", platform)\n\t\t}\n\t\tfmt.Println(\"\\nCheck the output files for error details.\")\n\t}\n\n\tfmt.Println(\"\\nGenerated files:\")\n\tmatches, _ := filepath.Glob(\"_scripts/capslock*.txt\")\n\tfor _, match := range matches {\n\t\tinfo, err := os.Stat(match)\n\t\tif err == nil {\n\t\t\tfmt.Printf(\"  %s (%d bytes)\\n\", match, info.Size())\n\t\t}\n\t}\n\n\tif failureCount > 0 {\n\t\tos.Exit(1)\n\t}\n}\n\nfunc generateCapslock(platform Platform) error {\n\toutputFile := fmt.Sprintf(\"_scripts/capslock_%s_%s-output.txt\", platform.GOOS, platform.GOARCH)\n\n\targs := []string{\"run\", \"github.com/google/capslock/cmd/capslock@latest\"}\n\tif platform.BuildTags != \"\" {\n\t\targs = append(args, \"-buildtags\", platform.BuildTags)\n\t}\n\targs = append(args, \"-packages\", \"./cmd/dlv\")\n\n\tcmd := exec.Command(\"go\", args...)\n\tcmd.Env = append(os.Environ(),\n\t\tfmt.Sprintf(\"GOOS=%s\", platform.GOOS),\n\t\tfmt.Sprintf(\"GOARCH=%s\", platform.GOARCH),\n\t)\n\n\toutput, err := cmd.CombinedOutput()\n\n\tif writeErr := os.WriteFile(outputFile, output, 0644); writeErr != nil {\n\t\treturn fmt.Errorf(\"failed to write output file: %w\", writeErr)\n\t}\n\n\tif err != nil {\n\t\treturn fmt.Errorf(\"capslock failed: %w\", err)\n\t}\n\n\treturn nil\n}\n\nfunc findProjectRoot() string {\n\tdir, err := os.Getwd()\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\n\tfor {\n\t\tif _, err := os.Stat(filepath.Join(dir, \"go.mod\")); err == nil {\n\t\t\treturn dir\n\t\t}\n\n\t\tparent := filepath.Dir(dir)\n\t\tif parent == dir {\n\t\t\tbreak\n\t\t}\n\t\tdir = parent\n\t}\n\n\treturn \"\"\n}\n"
  },
  {
    "path": "_scripts/gen-cli-docs.go",
    "content": "//go:build ignore\n\npackage main\n\nimport (\n\t\"bufio\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/go-delve/delve/pkg/config\"\n\t\"github.com/go-delve/delve/pkg/terminal\"\n)\n\nfunc main() {\n\t{\n\t\tfh, err := os.Create(\"./Documentation/cli/README.md\")\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"could not create README.md: %v\", err)\n\t\t}\n\t\tdefer fh.Close()\n\n\t\tw := bufio.NewWriter(fh)\n\t\tdefer w.Flush()\n\n\t\tcommands := terminal.DebugCommands(nil)\n\t\tcommands.WriteMarkdown(w)\n\t}\n\t{\n\t\tfh, err := os.Create(\"./Documentation/cli/config.md\")\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"could not create config.md: %v\", err)\n\t\t}\n\t\tdefer fh.Close()\n\n\t\tw := bufio.NewWriter(fh)\n\t\tdefer w.Flush()\n\t\tconfig.WriteConfigDocumentation(w)\n\t}\n\n}\n"
  },
  {
    "path": "_scripts/gen-faq-toc.go",
    "content": "package main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n)\n\nfunc must(err error, fmtstr string, args ...interface{}) {\n\tif err != nil {\n\t\tlog.Fatalf(fmtstr, args...)\n\t}\n}\n\nfunc usage() {\n\tos.Stderr.WriteString(\"gen-faq-to input-path output-path\")\n\tos.Exit(1)\n}\n\nvar anchor = regexp.MustCompile(`### <a name=\"(.*?)\"></a> (.*)`)\n\ntype tocentry struct {\n\tanchor, title string\n}\n\nconst (\n\tstartOfToc = \"<!-- BEGIN TOC -->\"\n\tendOfToc   = \"<!-- END TOC -->\"\n)\n\nfunc spliceDocs(docpath string, docs []byte, outpath string) {\n\tdocbuf, err := os.ReadFile(docpath)\n\tif err != nil {\n\t\tlog.Fatalf(\"could not read doc file: %v\", err)\n\t}\n\n\tv := strings.Split(string(docbuf), startOfToc)\n\tif len(v) != 2 {\n\t\tlog.Fatal(\"could not find start of mapping table\")\n\t}\n\theader := v[0]\n\tv = strings.Split(v[1], endOfToc)\n\tif len(v) != 2 {\n\t\tlog.Fatal(\"could not find end of mapping table\")\n\t}\n\tfooter := v[1]\n\n\toutbuf := bytes.NewBuffer(make([]byte, 0, len(header)+len(docs)+len(footer)+len(startOfToc)+len(endOfToc)+1))\n\toutbuf.WriteString(header)\n\toutbuf.WriteString(startOfToc)\n\toutbuf.WriteByte('\\n')\n\toutbuf.Write(docs)\n\toutbuf.WriteString(endOfToc)\n\toutbuf.WriteString(footer)\n\n\tif outpath != \"-\" {\n\t\terr = os.WriteFile(outpath, outbuf.Bytes(), 0o664)\n\t\tmust(err, \"could not write documentation file: %v\", err)\n\t} else {\n\t\tos.Stdout.Write(outbuf.Bytes())\n\t}\n}\n\nfunc readtoc(docpath string) []tocentry {\n\tinfh, err := os.Open(docpath)\n\tmust(err, \"could not open %s: %v\", docpath, err)\n\tdefer infh.Close()\n\tscan := bufio.NewScanner(infh)\n\ttocentries := []tocentry{}\n\tseenAnchors := map[string]bool{}\n\tfor scan.Scan() {\n\t\tline := scan.Text()\n\t\tif !strings.HasPrefix(line, \"### \") {\n\t\t\tcontinue\n\t\t}\n\t\tm := anchor.FindStringSubmatch(line)\n\t\tif len(m) != 3 {\n\t\t\tlog.Fatalf(\"entry %q does not have anchor\", line)\n\t\t}\n\t\tif seenAnchors[m[1]] {\n\t\t\tlog.Fatalf(\"duplicate anchor %q\", m[1])\n\t\t}\n\t\tanchor, title := m[1], m[2]\n\t\tseenAnchors[anchor] = true\n\t\ttocentries = append(tocentries, tocentry{anchor, title})\n\n\t}\n\tmust(scan.Err(), \"could not read %s: %v\", scan.Err())\n\treturn tocentries\n}\n\nfunc writetoc(tocentries []tocentry) []byte {\n\tb := new(bytes.Buffer)\n\tfor _, tocentry := range tocentries {\n\t\tfmt.Fprintf(b, \"* [%s](#%s)\\n\", tocentry.title, tocentry.anchor)\n\t}\n\treturn b.Bytes()\n}\n\nfunc main() {\n\tif len(os.Args) != 3 {\n\t\tusage()\n\t}\n\n\tdocpath, outpath := os.Args[1], os.Args[2]\n\n\ttocentries := readtoc(docpath)\n\n\tspliceDocs(docpath, []byte(writetoc(tocentries)), outpath)\n}\n"
  },
  {
    "path": "_scripts/gen-opcodes.go",
    "content": "//go:build ignore\n\npackage main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"go/format\"\n\t\"log\"\n\t\"os\"\n\t\"strings\"\n)\n\ntype Opcode struct {\n\tName string\n\tCode string\n\tArgs string\n\tFunc string\n}\n\nfunc usage() {\n\tos.Stderr.WriteString(\"gen-opcodes <opcodes-table-path> <opcodes-destination-path>\\n\\n\")\n\tos.Stderr.WriteString(\"Generates Go file <opcodes-destination-path> from the table file <opcodes-table-path>.\\n\\n\")\n\tos.Exit(1)\n}\n\nfunc main() {\n\tif len(os.Args) != 3 {\n\t\tusage()\n\t}\n\n\tfh, err := os.Open(os.Args[1])\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tdefer fh.Close()\n\n\toutfh := os.Stdout\n\tif os.Args[2] != \"-\" {\n\t\toutfh, err = os.Create(os.Args[2])\n\t\tif err != nil {\n\t\t\tlog.Fatal(err)\n\t\t}\n\t\tdefer outfh.Close()\n\t}\n\n\topcodes := []Opcode{}\n\ts := bufio.NewScanner(fh)\n\tfor s.Scan() {\n\t\tline := strings.TrimSpace(s.Text())\n\t\tif line == \"\" || strings.HasPrefix(line, \"//\") {\n\t\t\tcontinue\n\t\t}\n\t\tfields := strings.Split(line, \"\\t\")\n\t\topcode := Opcode{Name: fields[0], Code: fields[1], Args: fields[2]}\n\t\tif len(fields) > 3 {\n\t\t\topcode.Func = fields[3]\n\t\t}\n\t\topcodes = append(opcodes, opcode)\n\t}\n\n\tvar buf bytes.Buffer\n\n\tfmt.Fprintf(&buf, `// Code generated by gen-opcodes. DO NOT EDIT.\n// Edit opcodes.table instead.\n\npackage op\n`)\n\n\t// constants\n\tfmt.Fprintf(&buf, \"const (\\n\")\n\tfor _, opcode := range opcodes {\n\t\tfmt.Fprintf(&buf, \"%s Opcode = %s\\n\", opcode.Name, opcode.Code)\n\t}\n\tfmt.Fprintf(&buf, \")\\n\\n\")\n\n\t// name map\n\tfmt.Fprintf(&buf, \"var opcodeName = map[Opcode]string{\\n\")\n\tfor _, opcode := range opcodes {\n\t\tfmt.Fprintf(&buf, \"%s: %q,\\n\", opcode.Name, opcode.Name)\n\t}\n\tfmt.Fprintf(&buf, \"}\\n\")\n\n\t// arguments map\n\tfmt.Fprintf(&buf, \"var opcodeArgs = map[Opcode]string{\\n\")\n\tfor _, opcode := range opcodes {\n\t\tfmt.Fprintf(&buf, \"%s: %s,\\n\", opcode.Name, opcode.Args)\n\t}\n\tfmt.Fprintf(&buf, \"}\\n\")\n\n\t// function map\n\tfmt.Fprintf(&buf, \"var oplut = map[Opcode]stackfn{\\n\")\n\tfor _, opcode := range opcodes {\n\t\tif opcode.Func != \"\" {\n\t\t\tfmt.Fprintf(&buf, \"%s: %s,\\n\", opcode.Name, opcode.Func)\n\t\t}\n\t}\n\tfmt.Fprintf(&buf, \"}\\n\")\n\n\tsrc, err := format.Source(buf.Bytes())\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\toutfh.Write(src)\n}\n"
  },
  {
    "path": "_scripts/gen-travis.go",
    "content": "// Generates .travis.yml configuration using pkg/goversion/compat.go\n// Usage go run scripts/gen-travis.go > .travis.yml\n\npackage main\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"text/template\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n)\n\ntype arguments struct {\n\tGoVersions []goVersion\n}\n\ntype goVersion struct {\n\tMajor, Minor int\n}\n\nvar maxVersion = goVersion{Major: goversion.MaxSupportedVersionOfGoMajor, Minor: goversion.MaxSupportedVersionOfGoMinor}\nvar minVersion = goVersion{Major: goversion.MinSupportedVersionOfGoMajor, Minor: goversion.MinSupportedVersionOfGoMinor}\n\nfunc (v goVersion) dec() goVersion {\n\tv.Minor--\n\tif v.Minor < 0 {\n\t\tpanic(\"TODO: fill the maximum minor version number for v.Major here\")\n\t}\n\treturn v\n}\n\nfunc (v goVersion) MaxVersion() bool {\n\treturn v == maxVersion\n}\n\nfunc (v goVersion) DotX() string {\n\treturn fmt.Sprintf(\"%d.%d.x\", v.Major, v.Minor)\n}\n\nfunc (v goVersion) String() string {\n\treturn fmt.Sprintf(\"%d.%d\", v.Major, v.Minor)\n}\n\nfunc main() {\n\tvar args arguments\n\n\targs.GoVersions = append(args.GoVersions, maxVersion)\n\tfor {\n\t\tv := args.GoVersions[len(args.GoVersions)-1].dec()\n\t\targs.GoVersions = append(args.GoVersions, v)\n\t\tif v == minVersion {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tgithubfh, err := os.Create(\".github/workflows/test.yml\")\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"Could not create .github/test.yml: %v\", err)\n\t\tos.Exit(1)\n\t}\n\tout := bufio.NewWriter(githubfh)\n\terr = template.Must(template.New(\".github/workflows/test.yml\").Parse(`name: Delve CI\n\non: [push, pull_request]\n\njobs:\n  build:\n    runs-on: ${{\"{{\"}}matrix.os{{\"}}\"}}\n    strategy:\n      matrix:\n        include:\n          - go: {{index .GoVersions 0}}\n            os: macos-latest\n          - go: {{index .GoVersions 1}}\n            os: ubuntu-latest\n          - go: {{index .GoVersions 2}}\n            os: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-go@v1\n        with:\n          go-version: ${{\"{{\"}}matrix.go{{\"}}\"}}\n      - run: go run _scripts/make.go test\n`)).Execute(out, args)\n\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"Error executing template: %v\", err)\n\t\tos.Exit(1)\n\t}\n\n\t_ = out.Flush()\n\t_ = githubfh.Close()\n}\n"
  },
  {
    "path": "_scripts/gen-usage-docs.go",
    "content": "//go:build ignore\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/go-delve/delve/cmd/dlv/cmds\"\n\t\"github.com/go-delve/delve/cmd/dlv/cmds/helphelpers\"\n\t\"github.com/spf13/cobra/doc\"\n)\n\nconst defaultUsageDir = \"./Documentation/usage\"\n\nfunc main() {\n\tusageDir := defaultUsageDir\n\tif len(os.Args) > 1 {\n\t\tusageDir = os.Args[1]\n\t}\n\troot := cmds.New(true)\n\n\tcmdnames := []string{}\n\tfor _, subcmd := range root.Commands() {\n\t\tif !subcmd.Hidden {\n\t\t\tcmdnames = append(cmdnames, subcmd.Name())\n\t\t}\n\t}\n\thelphelpers.Prepare(root)\n\tdoc.GenMarkdownTree(root, usageDir)\n\troot = nil\n\t// GenMarkdownTree ignores additional help topic commands, so we have to do this manually\n\tfor _, cmdname := range cmdnames {\n\t\tcmd, _, _ := cmds.New(true).Find([]string{cmdname})\n\t\thelphelpers.Prepare(cmd)\n\t\tdoc.GenMarkdownTree(cmd, usageDir)\n\t}\n\tfh, err := os.OpenFile(filepath.Join(usageDir, \"dlv.md\"), os.O_APPEND|os.O_WRONLY, 0)\n\tif err != nil {\n\t\tlog.Fatalf(\"appending to dlv.md: %v\", err)\n\t}\n\tdefer fh.Close()\n\tfmt.Fprintln(fh, \"* [dlv log](dlv_log.md)\\t - Help about logging flags\")\n\tfmt.Fprintln(fh, \"* [dlv backend](dlv_backend.md)\\t - Help about the `--backend` flag\")\n}\n"
  },
  {
    "path": "_scripts/gencert.sh",
    "content": "#!/bin/bash\n\n# Check if the certificate is already present in the system keychain\nsecurity find-certificate -Z -p -c \"dlv-cert\" /Library/Keychains/System.keychain > /dev/null 2>&1\nEXIT_CODE=$?\nif [ $EXIT_CODE -eq 0 ]; then\n  # Certificate has already been generated and installed\n  exit 0\nfi\n\nCERT=\"dlv-cert\"\n\n# Create the certificate template\ncat <<EOF >$CERT.tmpl\n[ req ]\ndefault_bits       = 2048        # RSA key size\nencrypt_key        = no          # Protect private key\ndefault_md         = sha512      # MD to use\nprompt             = no          # Prompt for DN\ndistinguished_name = codesign_dn # DN template\n[ codesign_dn ]\ncommonName         = \"dlv-cert\"\n[ codesign_reqext ]\nkeyUsage           = critical,digitalSignature\nextendedKeyUsage   = critical,codeSigning\nEOF\n\n# Generate a new certificate\nopenssl req -new -newkey rsa:2048 -x509 -days 3650 -nodes -config $CERT.tmpl -extensions codesign_reqext -batch -out $CERT.cer -keyout $CERT.key > /dev/null 2>&1\nEXIT_CODE=$?\nif [ $EXIT_CODE -ne 0 ]; then\n  # Something went wrong when generating the certificate\n  exit 1\nfi\n\n# Install the certificate in the system keychain\nsudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain $CERT.cer > /dev/null 2>&1\nEXIT_CODE=$?\nif [ $EXIT_CODE -ne 0 ]; then\n  # Something went wrong when installing the certificate\n  exit 1\nfi\n\n# Install the key for the certificate in the system keychain\nsudo security import $CERT.key -A -k /Library/Keychains/System.keychain > /dev/null 2>&1\nEXIT_CODE=$?\nif [ $EXIT_CODE -ne 0 ]; then\n  # Something went wrong when installing the key\n  exit 1\nfi\n\n# Kill task_for_pid access control daemon\nsudo pkill -f /usr/libexec/taskgated > /dev/null 2>&1\n\n# Remove generated files\nrm $CERT.tmpl $CERT.cer $CERT.key > /dev/null 2>&1\n\n# Exit indicating the certificate is now generated and installed\nexit 0\n"
  },
  {
    "path": "_scripts/latestver.py",
    "content": "#!/usr/bin/python3\nimport json\nimport urllib.request\nimport sys\nimport re\n\ndef splitver(x):\n\tv = re.split(r'([^\\d]+)', x)\n\tv[0] = int(v[0])\n\tif len(v) > 2:\n\t\tv[2] = int(v[2])\n\tif len(v) > 4:\n\t\tv[4] = int(v[4])\n\t# make rc/beta versions sort before normal versions\n\tif len(v) > 3 and v[3] == '.':\n\t\tv[3] = '~' \n\telif len(v) == 3:\n\t\tv.append('~')\n\treturn v\n\nver = sys.argv[1]\nd = json.loads(urllib.request.urlopen('https://go.dev/dl/?mode=json&include=all').read())\nds = sorted(d, reverse=True, key=lambda it: splitver(it['version'][2:]))\nfor x in ds:\n\tif x['version'][:len(ver)] == ver:\n\t\tprint(x['version'])\n\t\texit(0)\n"
  },
  {
    "path": "_scripts/make.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/spf13/cobra\"\n)\n\nconst DelveMainPackagePath = \"github.com/go-delve/delve/cmd/dlv\"\n\nvar Verbose bool\nvar NOTimeout bool\nvar TestIncludePIE bool\nvar TestSet, TestRegex, TestBackend, TestBuildMode string\nvar Tags *[]string\nvar Architecture string\nvar OS string\nvar DisableGit bool\n\nfunc NewMakeCommands() *cobra.Command {\n\tRootCommand := &cobra.Command{\n\t\tUse:   \"make.go\",\n\t\tShort: \"make script for delve.\",\n\t}\n\n\tRootCommand.AddCommand(&cobra.Command{\n\t\tUse:   \"check-cert\",\n\t\tShort: \"Check certificate for macOS.\",\n\t\tRun:   checkCertCmd,\n\t})\n\n\tbuildCmd := &cobra.Command{\n\t\tUse:   \"build\",\n\t\tShort: \"Build delve\",\n\t\tRun: func(cmd *cobra.Command, args []string) {\n\t\t\tgoreleaserPath, _ := exec.LookPath(\"goreleaser\")\n\t\t\tif len(Architecture) > 0 || len(OS) > 0 || goreleaserPath == \"\" {\n\t\t\t\t// Explicit cross-compile target: fall back to direct go build.\n\t\t\t\tenvflags := []string{}\n\t\t\t\tif len(Architecture) > 0 {\n\t\t\t\t\tenvflags = append(envflags, \"GOARCH=\"+Architecture)\n\t\t\t\t}\n\t\t\t\tif len(OS) > 0 {\n\t\t\t\t\tenvflags = append(envflags, \"GOOS=\"+OS)\n\t\t\t\t}\n\t\t\t\texecuteEnv(envflags, \"go\", \"build\", \"-ldflags\", \"-extldflags -static\", tagFlags(false), buildFlags(), DelveMainPackagePath)\n\t\t\t} else {\n\t\t\t\t// Default: goreleaser for consistent local/release builds.\n\t\t\t\texecute(\"goreleaser\", \"build\", \"--single-target\", \"--snapshot\", \"--clean\", \"--output\", \"./dlv\")\n\t\t\t}\n\t\t\tif runtime.GOOS == \"darwin\" && os.Getenv(\"CERT\") != \"\" && canMacnative() && !isCodesigned(\"./dlv\") {\n\t\t\t\tcodesign(\"./dlv\")\n\t\t\t}\n\t\t},\n\t}\n\tTags = buildCmd.PersistentFlags().StringArray(\"tags\", []string{}, \"Build tags\")\n\tbuildCmd.PersistentFlags().BoolVarP(&DisableGit, \"no-git\", \"G\", false, \"Do not use git\")\n\tbuildCmd.PersistentFlags().StringVar(&Architecture, \"GOARCH\", \"\", \"Architecture to build for\")\n\tbuildCmd.PersistentFlags().StringVar(&OS, \"GOOS\", \"\", \"OS to build for\")\n\tRootCommand.AddCommand(buildCmd)\n\n\tRootCommand.AddCommand(&cobra.Command{\n\t\tUse:   \"install\",\n\t\tShort: \"Installs delve\",\n\t\tRun: func(cmd *cobra.Command, args []string) {\n\t\t\texecute(\"go\", \"install\", tagFlags(false), buildFlags(), DelveMainPackagePath)\n\t\t\tif runtime.GOOS == \"darwin\" && os.Getenv(\"CERT\") != \"\" && canMacnative() && !isCodesigned(installedExecutablePath()) {\n\t\t\t\tcodesign(installedExecutablePath())\n\t\t\t}\n\t\t},\n\t})\n\n\tRootCommand.AddCommand(&cobra.Command{\n\t\tUse:   \"uninstall\",\n\t\tShort: \"Uninstalls delve\",\n\t\tRun: func(cmd *cobra.Command, args []string) {\n\t\t\texecute(\"go\", \"clean\", \"-i\", DelveMainPackagePath)\n\t\t},\n\t})\n\n\ttest := &cobra.Command{\n\t\tUse:   \"test\",\n\t\tShort: \"Tests delve\",\n\t\tLong: `Tests delve.\n\nUse the flags -s, -r and -b to specify which tests to run. Specifying nothing will run all tests relevant for the current environment (see testStandard).\n`,\n\t\tRun: testCmd,\n\t}\n\ttest.PersistentFlags().BoolVarP(&Verbose, \"verbose\", \"v\", false, \"Verbose tests\")\n\ttest.PersistentFlags().BoolVarP(&NOTimeout, \"timeout\", \"t\", false, \"Set infinite timeouts\")\n\ttest.PersistentFlags().StringVarP(&TestSet, \"test-set\", \"s\", \"\", `Select the set of tests to run, one of either:\n\tall\t\ttests all packages\n\tbasic\t\ttests proc, integration and terminal\n\tintegration \ttests github.com/go-delve/delve/service/test\n\tpackage-name\ttest the specified package only\n`)\n\ttest.PersistentFlags().StringVarP(&TestRegex, \"test-run\", \"r\", \"\", `Only runs the tests matching the specified regex. This option can only be specified if testset is a single package`)\n\ttest.PersistentFlags().StringVarP(&TestBackend, \"test-backend\", \"b\", \"\", `Runs tests for the specified backend only, one of either:\n\tdefault\t\tthe default backend\n\tlldb\t\tlldb backend\n\trr\t\trr backend\n\nThis option can only be specified if testset is basic or a single package.`)\n\ttest.PersistentFlags().StringVarP(&TestBuildMode, \"test-build-mode\", \"m\", \"\", `Runs tests compiling with the specified build mode, one of either:\n\tnormal\t\tnormal buildmode (default)\n\tpie\t\tPIE buildmode\n\nThis option can only be specified if testset is basic or a single package.`)\n\ttest.PersistentFlags().BoolVarP(&TestIncludePIE, \"pie\", \"\", true, \"Standard testing should include PIE\")\n\n\tRootCommand.AddCommand(test)\n\n\tRootCommand.AddCommand(&cobra.Command{\n\t\tUse:   \"vendor\",\n\t\tShort: \"vendors dependencies\",\n\t\tRun: func(cmd *cobra.Command, args []string) {\n\t\t\texecute(\"go\", \"mod\", \"vendor\")\n\t\t},\n\t})\n\n\treturn RootCommand\n}\n\nfunc checkCert() bool {\n\tif os.Getenv(\"CI\") != \"\" {\n\t\treturn true\n\t}\n\tif os.Getenv(\"NOCERT\") != \"\" {\n\t\treturn false\n\t}\n\t// If we're on OSX make sure the proper CERT env var is set.\n\tif runtime.GOOS != \"darwin\" || os.Getenv(\"CERT\") != \"\" {\n\t\treturn true\n\t}\n\n\tx := exec.Command(\"_scripts/gencert.sh\")\n\tx.Stdout = os.Stdout\n\tx.Stderr = os.Stderr\n\tx.Env = os.Environ()\n\terr := x.Run()\n\tif x.ProcessState != nil && !x.ProcessState.Success() {\n\t\tfmt.Printf(\"An error occurred when generating and installing a new certificate\\n\")\n\t\treturn false\n\t}\n\tif err != nil {\n\t\tfmt.Printf(\"An error occurred when generating and installing a new certificate: %v\\n\", err)\n\t\treturn false\n\t}\n\tos.Setenv(\"CERT\", \"dlv-cert\")\n\treturn true\n}\n\nfunc checkCertCmd(cmd *cobra.Command, args []string) {\n\tif !checkCert() {\n\t\tos.Exit(1)\n\t}\n}\n\nfunc strflatten(v []interface{}) []string {\n\tr := []string{}\n\tfor _, s := range v {\n\t\tswitch s := s.(type) {\n\t\tcase []string:\n\t\t\tr = append(r, s...)\n\t\tcase string:\n\t\t\tif s != \"\" {\n\t\t\t\tr = append(r, s)\n\t\t\t}\n\t\t}\n\t}\n\treturn r\n}\n\nfunc executeq(env []string, cmd string, args ...interface{}) {\n\tx := exec.Command(cmd, strflatten(args)...)\n\tx.Stdout = os.Stdout\n\tx.Stderr = os.Stderr\n\tx.Env = os.Environ()\n\tfor _, e := range env {\n\t\tx.Env = append(x.Env, e)\n\t}\n\terr := x.Run()\n\tif x.ProcessState != nil && !x.ProcessState.Success() {\n\t\tos.Exit(1)\n\t}\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n\nfunc execute(cmd string, args ...interface{}) {\n\tfmt.Printf(\"%s %s\\n\", cmd, strings.Join(quotemaybe(strflatten(args)), \" \"))\n\tenv := []string{}\n\texecuteq(env, cmd, args...)\n}\n\nfunc executeEnv(env []string, cmd string, args ...interface{}) {\n\tfmt.Printf(\"%s %s %s\\n\", strings.Join(env, \" \"),\n\t\tcmd, strings.Join(quotemaybe(strflatten(args)), \" \"))\n\texecuteq(env, cmd, args...)\n}\n\nfunc quotemaybe(args []string) []string {\n\tfor i := range args {\n\t\tif strings.Index(args[i], \" \") >= 0 {\n\t\t\targs[i] = fmt.Sprintf(\"%q\", args[i])\n\t\t}\n\t}\n\treturn args\n}\n\nfunc getoutput(cmd string, args ...interface{}) string {\n\tx := exec.Command(cmd, strflatten(args)...)\n\tx.Env = os.Environ()\n\tout, err := x.Output()\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"Error executing %s %v\\n\", cmd, args)\n\t\tlog.Fatal(err)\n\t}\n\tif !x.ProcessState.Success() {\n\t\tfmt.Fprintf(os.Stderr, \"Error executing %s %v\\n\", cmd, args)\n\t\tos.Exit(1)\n\t}\n\treturn string(out)\n}\n\nfunc isCodesigned(path string) bool {\n\tx := exec.Command(\"codesign\", \"--verify\", path)\n\tx.Stdout = io.Discard\n\tx.Stderr = io.Discard\n\tx.Env = os.Environ()\n\terr := x.Run()\n\treturn err == nil && x.ProcessState != nil && x.ProcessState.Success()\n}\n\nfunc codesign(path string) {\n\texecute(\"codesign\", \"-s\", os.Getenv(\"CERT\"), path)\n}\n\nfunc installedExecutablePath() string {\n\tif gobin := os.Getenv(\"GOBIN\"); gobin != \"\" {\n\t\treturn filepath.Join(gobin, \"dlv\")\n\t}\n\tgopath := strings.Split(getoutput(\"go\", \"env\", \"GOPATH\"), \":\")\n\treturn filepath.Join(strings.TrimSpace(gopath[0]), \"bin\", \"dlv\")\n}\n\n// canMacnative returns true if we can build the native backend for macOS,\n// i.e. cgo enabled and the legacy SDK headers:\n// https://forums.developer.apple.com/thread/104296\nfunc canMacnative() bool {\n\tif !(runtime.GOOS == \"darwin\" && runtime.GOARCH == \"amd64\") {\n\t\treturn false\n\t}\n\tif strings.TrimSpace(getoutput(\"go\", \"env\", \"CGO_ENABLED\")) != \"1\" {\n\t\treturn false\n\t}\n\n\tmacOSVersion := strings.Split(strings.TrimSpace(getoutput(\"/usr/bin/sw_vers\", \"-productVersion\")), \".\")\n\n\tmajor, err := strconv.ParseInt(macOSVersion[0], 10, 64)\n\tif err != nil {\n\t\treturn false\n\t}\n\tminor, err := strconv.ParseInt(macOSVersion[1], 10, 64)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\ttypesHeader := \"/usr/include/sys/types.h\"\n\tif major >= 11 || (major == 10 && minor >= 15) {\n\t\tsdkpath := strings.TrimSpace(getoutput(\"xcrun\", \"--sdk\", \"macosx\", \"--show-sdk-path\"))\n\t\ttypesHeader = filepath.Join(sdkpath, \"usr\", \"include\", \"sys\", \"types.h\")\n\t}\n\t_, err = os.Stat(typesHeader)\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// prepareMacnative checks if we can build the native backend for macOS and\n// if we can checks the certificate and then returns the -tags flag.\nfunc prepareMacnative() string {\n\tif !canMacnative() {\n\t\treturn \"\"\n\t}\n\tif !checkCert() {\n\t\treturn \"\"\n\t}\n\treturn \"macnative\"\n}\n\nfunc tagFlags(isTest bool) string {\n\tvar tags []string\n\tif mactags := prepareMacnative(); mactags != \"\" {\n\t\ttags = append(tags, mactags)\n\t}\n\tif isTest {\n\t\tif runtime.GOOS == \"linux\" && runtime.GOARCH == \"ppc64le\" {\n\t\t\ttags = append(tags, \"exp.linuxppc64le\")\n\t\t}\n\t\tif runtime.GOOS == \"linux\" && runtime.GOARCH == \"riscv64\" {\n\t\t\ttags = append(tags, \"exp.linuxriscv64\")\n\t\t}\n\t\tif runtime.GOOS == \"linux\" && runtime.GOARCH == \"loong64\" {\n\t\t\ttags = append(tags, \"exp.linuxloong64\")\n\t\t}\n\t}\n\tif Tags != nil && len(*Tags) > 0 {\n\t\ttags = append(tags, *Tags...)\n\t}\n\tif len(tags) == 0 {\n\t\treturn \"\"\n\t}\n\treturn \"-tags=\" + strings.Join(tags, \",\")\n}\n\nfunc buildFlags() []string {\n\tvar ldFlags string\n\tbuildSHA, err := getBuildSHA()\n\tif err != nil {\n\t\tlog.Printf(\"error getting build SHA via git: %v\", err)\n\t} else {\n\t\tldFlags = \"-X main.Build=\" + buildSHA\n\t}\n\tif runtime.GOOS == \"darwin\" && os.Getenv(\"CERT\") != \"\" {\n\t\tldFlags = \"-s \" + ldFlags\n\t}\n\treturn []string{fmt.Sprintf(\"-ldflags=%s\", ldFlags)}\n}\n\nfunc testFlags() []string {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\ttestFlags := []string{\"-count\", \"1\", \"-p\", \"1\"}\n\tif Verbose {\n\t\ttestFlags = append(testFlags, \"-v\")\n\t}\n\tif NOTimeout {\n\t\ttestFlags = append(testFlags, \"-timeout\", \"0\")\n\t}\n\tif len(os.Getenv(\"TEAMCITY_VERSION\")) > 0 {\n\t\ttestFlags = append(testFlags, \"-json\")\n\t}\n\tif runtime.GOOS == \"darwin\" {\n\t\ttestFlags = append(testFlags, \"-exec=\"+wd+\"/_scripts/testsign\")\n\t}\n\treturn testFlags\n}\n\nfunc testCmd(cmd *cobra.Command, args []string) {\n\tcheckCertCmd(nil, nil)\n\n\tif TestSet == \"\" && TestBackend == \"\" && TestBuildMode == \"\" {\n\t\tif TestRegex != \"\" {\n\t\t\tfmt.Printf(\"Can not use --test-run without --test-set\\n\")\n\t\t\tos.Exit(1)\n\t\t}\n\n\t\ttestStandard()\n\t\treturn\n\t}\n\n\tif TestSet == \"\" {\n\t\tTestSet = \"all\"\n\t}\n\n\tif TestBackend == \"\" {\n\t\tTestBackend = \"default\"\n\t}\n\n\tif TestBuildMode == \"\" {\n\t\tTestBuildMode = \"normal\"\n\t}\n\n\ttestCmdIntl(TestSet, TestRegex, TestBackend, TestBuildMode)\n}\n\nfunc testStandard() {\n\tfmt.Println(\"Testing default backend\")\n\ttestCmdIntl(\"all\", \"\", \"default\", \"normal\")\n\tif inpath(\"lldb-server\") && !goversion.VersionAfterOrEqual(runtime.Version(), 1, 14) {\n\t\tfmt.Println(\"\\nTesting LLDB backend\")\n\t\ttestCmdIntl(\"basic\", \"\", \"lldb\", \"normal\")\n\t}\n\tif inpath(\"rr\") {\n\t\tfmt.Println(\"\\nTesting RR backend\")\n\t\ttestCmdIntl(\"basic\", \"\", \"rr\", \"normal\")\n\t}\n\tif TestIncludePIE {\n\t\tdopie := false\n\t\tswitch runtime.GOOS {\n\t\tcase \"linux\":\n\t\t\tif runtime.GOARCH != \"ppc64le\" {\n\t\t\t\tdopie = true\n\t\t\t}\n\t\tcase \"windows\":\n\t\t\t// windows/arm64 always uses pie buildmode, no need to test everything again.\n\t\t\t// only on Go 1.15 or later, with CGO_ENABLED and gcc found in path\n\t\t\tif runtime.GOARCH != \"arm64\" && goversion.VersionAfterOrEqual(runtime.Version(), 1, 15) {\n\t\t\t\tout, err := exec.Command(\"go\", \"env\", \"CGO_ENABLED\").CombinedOutput()\n\t\t\t\tif err != nil {\n\t\t\t\t\tpanic(err)\n\t\t\t\t}\n\t\t\t\tif strings.TrimSpace(string(out)) == \"1\" {\n\t\t\t\t\tif _, err = exec.LookPath(\"gcc\"); err == nil {\n\t\t\t\t\t\tdopie = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"darwin\":\n\t\t\tif runtime.GOARCH == \"amd64\" {\n\t\t\t\t// arm64 can only build in pie mode\n\t\t\t\tdopie = true\n\t\t\t}\n\t\t}\n\t\tif dopie {\n\t\t\tfmt.Println(\"\\nTesting PIE buildmode, default backend\")\n\t\t\ttestCmdIntl(\"basic\", \"\", \"default\", \"pie\")\n\t\t\ttestCmdIntl(\"core\", \"\", \"default\", \"pie\")\n\t\t}\n\t}\n\tif runtime.GOOS == \"linux\" && inpath(\"rr\") {\n\t\tfmt.Println(\"\\nTesting PIE buildmode, RR backend\")\n\t\ttestCmdIntl(\"basic\", \"\", \"rr\", \"pie\")\n\t}\n}\n\nfunc testCmdIntl(testSet, testRegex, testBackend, testBuildMode string) {\n\ttestPackages := testSetToPackages(testSet)\n\tif len(testPackages) == 0 {\n\t\tfmt.Printf(\"Unknown test set %q\\n\", testSet)\n\t\tos.Exit(1)\n\t}\n\n\tif testRegex != \"\" && len(testPackages) != 1 {\n\t\tfmt.Printf(\"Can not use test-run with test set %q\\n\", testSet)\n\t\tos.Exit(1)\n\t}\n\n\tbackendFlag := \"\"\n\tif testBackend != \"\" && testBackend != \"default\" {\n\t\tif testSet != \"basic\" && len(testPackages) != 1 {\n\t\t\tfmt.Printf(\"Can not use test-backend with test set %q\\n\", testSet)\n\t\t\tos.Exit(1)\n\t\t}\n\t\tbackendFlag = \"-backend=\" + testBackend\n\t}\n\n\tbuildModeFlag := \"\"\n\tif testBuildMode != \"\" && testBuildMode != \"normal\" {\n\t\tif testSet != \"basic\" && len(testPackages) != 1 {\n\t\t\tfmt.Printf(\"Can not use test-buildmode with test set %q\\n\", testSet)\n\t\t\tos.Exit(1)\n\t\t}\n\t\tbuildModeFlag = \"-test-buildmode=\" + testBuildMode\n\t}\n\n\tenv := []string{}\n\tif os.Getenv(\"CI\") != \"\" {\n\t\tenv = os.Environ()\n\t}\n\n\tif len(testPackages) > 3 {\n\t\texecuteq(env, \"go\", \"test\", testFlags(), buildFlags(), tagFlags(true), testPackages, backendFlag, buildModeFlag)\n\t} else if testRegex != \"\" {\n\t\texecuteq(env, \"go\", \"test\", testFlags(), buildFlags(), tagFlags(true), testPackages, \"-run=\"+testRegex, backendFlag, buildModeFlag)\n\t} else {\n\t\texecuteq(env, \"go\", \"test\", testFlags(), buildFlags(), tagFlags(true), testPackages, backendFlag, buildModeFlag)\n\t}\n}\n\nfunc testSetToPackages(testSet string) []string {\n\tswitch testSet {\n\tcase \"\", \"all\":\n\t\treturn allPackages()\n\n\tcase \"basic\":\n\t\treturn []string{\"github.com/go-delve/delve/pkg/proc\", \"github.com/go-delve/delve/service/test\", \"github.com/go-delve/delve/pkg/terminal\"}\n\n\tcase \"integration\":\n\t\treturn []string{\"github.com/go-delve/delve/service/test\"}\n\n\tdefault:\n\t\tfor _, pkg := range allPackages() {\n\t\t\tif pkg == testSet || strings.HasSuffix(pkg, \"/\"+testSet) {\n\t\t\t\treturn []string{pkg}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n}\n\nfunc defaultBackend() string {\n\tif runtime.GOOS == \"darwin\" {\n\t\treturn \"lldb\"\n\t}\n\treturn \"native\"\n}\n\nfunc inpath(exe string) bool {\n\tpath, _ := exec.LookPath(exe)\n\treturn path != \"\"\n}\n\nfunc allPackages() []string {\n\tr := []string{}\n\tfor _, dir := range strings.Split(getoutput(\"go\", \"list\", \"-mod=vendor\", tagFlags(true), \"./...\"), \"\\n\") {\n\t\tdir = strings.TrimSpace(dir)\n\t\tif dir == \"\" || strings.Contains(dir, \"/vendor/\") || strings.Contains(dir, \"/_scripts\") {\n\t\t\tcontinue\n\t\t}\n\t\tr = append(r, dir)\n\t}\n\tsort.Strings(r)\n\treturn r\n}\n\n// getBuildSHA will invoke git to return the current SHA of the commit at HEAD.\nfunc getBuildSHA() (string, error) {\n\tif DisableGit {\n\t\treturn \"\", nil\n\t}\n\tbuildSHA, err := exec.Command(\"git\", \"rev-parse\", \"HEAD\").CombinedOutput()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tshaStr := strings.TrimSpace(string(buildSHA))\n\treturn shaStr, nil\n}\n\nfunc main() {\n\tallPackages() // checks that vendor directory is synced as a side effect\n\tNewMakeCommands().Execute()\n}\n"
  },
  {
    "path": "_scripts/rtype-out.txt",
    "content": "var firstmoduledata moduledata\n\nvar debug anytype\n\ntype _defer struct {\n\tfn anytype\n\tpc uintptr\n\tsp uintptr\n\tsiz int32 (optional)\n\tlink *_defer\n}\n\ntype bmap struct {\n\ttophash [8]uint8\n}\n\ntype eface struct {\n\t_type *_type|*internal/abi.Type\n\tdata unsafe.Pointer\n}\n\ntype g struct {\n\tsched gobuf\n\tgoid int64|uint64\n\tgopc uintptr\n\tstartpc uintptr\n\twaitsince int64\n\twaitreason waitReason (optional)\n\tstack stack\n\tatomicstatus uint32|runtime/internal/atomic.Uint32|internal/runtime/atomic.Uint32\n}\n\ntype gobuf struct {\n\tpc uintptr\n\tsp uintptr\n\tbp uintptr (optional)\n\tlr uintptr (optional)\n}\n\ntype hmap struct {\n\tcount int\n\tB uint8\n\tbuckets unsafe.Pointer\n\toldbuckets unsafe.Pointer\n}\n\ntype iface struct {\n\ttab *itab|*internal/abi.ITab\n\tdata unsafe.Pointer\n}\n\ntype moduledata struct {\n\ttext uintptr\n\ttypes uintptr\n}\n\ntype stack struct {\n\thi uintptr\n\tlo uintptr\n}\n\nconst emptyOne = 1\n\nconst emptyRest = 0\n\nconst internal/runtime/maps.ctrlEmpty = 128\n\nconst kindDirectIface|internal/abi.KindDirectIface = 32\n\nconst minTopHash = 4\nor const minTopHash = 5\n\nconst tflagDirectIface|internal/abi.TFlagDirectIface = 32\n\n"
  },
  {
    "path": "_scripts/rtype.go",
    "content": "// This script checks that the Go runtime hasn't changed in ways that Delve\n// doesn't understand. It accomplishes this task by parsing the pkg/proc\n// package and extracting rules from all the comments starting with the\n// magic string '+rtype'.\n//\n// COMMAND LINE\n//\n// go run _scripts/rtype.go (report [output-file]|check)\n//\n// Invoked with the command 'report' it will extract rules from pkg/proc and\n// print them to stdout.\n// Invoked with the command 'check' it will actually check that the runtime\n// conforms to the rules in pkg/proc.\n//\n// RTYPE RULES\n//\n// // +rtype -var V T\n//\n// \tchecks that variable runtime.V exists and has type T\n//\n// // +rtype -field S.F T\n//\n// \tchecks that struct runtime.S has a field called F of type T\n//\n// const C1 = V // +rtype C2\n//\n// \tchecks that constant runtime.C2 exists and has value V\n//\n// case \"F\": // +rtype -fieldof S T\n//\n// \tchecks that struct runtime.S has a field called F of type T\n//\n// v := ... // +rtype T\n//\n// \tif v is declared as *proc.Variable it will assume that it has type\n// \truntime.T and it will then parse the enclosing function, searching for\n// \tall calls to:\n//\t\tv.loadFieldNamed\n//\t\tv.fieldVariable\n//\t\tv.structField\n//\tand check that type T has the specified fields.\n//\n// v.loadFieldNamed(\"F\") // +rtype T\n// v.loadFieldNamed(\"F\") // +rtype -opt T\n//\n// \tchecks that field F of the struct type declared for v has type T. Can\n// \talso be used for fieldVariable, structField and, inside parseG,\n// \tloadInt64Maybe.\n// \tThe -opt flag specifies that the field can be missing (but if it exists\n// \tit must have type T).\n//\n//\n// Anywhere a type is required the following expressions can be used:\n//\n//  - any builtin type\n//  - a type defined in the runtime package, without the 'runtime.' prefix\n//  - anytype to match all possible types\n//  - an expression of the form T1|T2 where both T1 and T2 can be arbitrary type expressions\n//\n// GO VERSION RESTRICTIONS\n//\n// A rtype comment of this form:\n//\n// // +rtype go1.24 ...\n//\n// Will only be applied to versions of Go following version 1.24.0\n\npackage main\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/constant\"\n\t\"go/printer\"\n\t\"go/token\"\n\t\"go/types\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"golang.org/x/tools/go/packages\"\n)\n\nconst magicCommentPrefix = \"+rtype\"\nconst gover = \"go1.\"\n\nvar fset = &token.FileSet{}\nvar checkVarTypeRules = []*checkVarType{}\nvar checkFieldTypeRules = map[string][]*checkFieldType{}\nvar checkConstValRules = map[string][]*checkConstVal{}\nvar showRuleOrigin = false\n\n// rtypeCmnt represents a +rtype comment\ntype rtypeCmnt struct {\n\tslash    token.Pos\n\ttxt      string\n\tnode     ast.Node // associated node\n\ttoplevel ast.Decl // toplevel declaration that contains the Slash of the comment\n\tstmt     ast.Stmt\n}\n\ntype checkVarType struct {\n\tV, T string // V must have type T\n\tpos  token.Pos\n\tfirstMinor\n}\n\nfunc (c *checkVarType) String() string {\n\tif showRuleOrigin {\n\t\tpos := fset.Position(c.pos)\n\t\treturn fmt.Sprintf(\"var %s %s // %s:%d\", c.V, c.T, relative(pos.Filename), pos.Line)\n\t}\n\treturn fmt.Sprintf(\"var %s %s\", c.V, c.T)\n}\n\ntype checkFieldType struct {\n\tS, F, T string // S.F must have type T\n\topt     bool\n\tpos     token.Pos\n\tfirstMinor\n}\n\nfunc (c *checkFieldType) String() string {\n\tpos := fset.Position(c.pos)\n\treturn fmt.Sprintf(\"field %s.%s %s // %s:%d\", c.S, c.F, c.T, relative(pos.Filename), pos.Line)\n}\n\ntype checkConstVal struct {\n\tC   string // const C = V\n\tV   constant.Value\n\tpos token.Pos\n\tfirstMinor\n}\n\ntype firstMinor int\n\nfunc (firstMinor firstMinor) versionOk(curminor int) bool {\n\treturn curminor >= int(firstMinor)\n}\n\nfunc (c *checkConstVal) String() string {\n\tif showRuleOrigin {\n\t\tpos := fset.Position(c.pos)\n\t\treturn fmt.Sprintf(\"const %s = %s // %s:%d\", c.C, c.V, relative(pos.Filename), pos.Line)\n\t}\n\treturn fmt.Sprintf(\"const %s = %s\", c.C, c.V)\n}\n\nfunc main() {\n\tif len(os.Args) < 2 {\n\t\tfmt.Fprintf(os.Stderr, \"Wrong number of arguments.\\n\\trtype (report [output-file]|check)\\n\")\n\t\tos.Exit(1)\n\t}\n\n\tcommand := os.Args[1]\n\n\tsetup()\n\n\tswitch command {\n\tcase \"report\":\n\t\tif len(os.Args) > 2 {\n\t\t\tfh, err := os.Create(os.Args[2])\n\t\t\tif err != nil {\n\t\t\t\tlog.Fatalf(\"error creating output file: %v\", err)\n\t\t\t}\n\t\t\tdefer fh.Close()\n\t\t\tos.Stdout = fh\n\t\t}\n\t\treport()\n\tcase \"check\":\n\t\tcheck()\n\tdefault:\n\t\tfmt.Fprintf(os.Stderr, \"Wrong argument %s\\n\", command)\n\t\tos.Exit(1)\n\t}\n}\n\n// setup parses the proc package, extracting all +rtype comments and\n// converting them into rules.\nfunc setup() {\n\tpkgs, err := packages.Load(&packages.Config{Mode: packages.LoadSyntax, Fset: fset}, \"github.com/go-delve/delve/pkg/proc\")\n\tif err != nil {\n\t\tlog.Fatalf(\"could not load proc package: %v\", err)\n\t}\n\n\tfor _, file := range pkgs[0].Syntax {\n\t\tcmntmap := ast.NewCommentMap(fset, file, file.Comments)\n\t\trtypeCmnts := getRtypeCmnts(file, cmntmap)\n\t\tfor _, rtcmnt := range rtypeCmnts {\n\t\t\tif rtcmnt == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocess(pkgs[0], rtcmnt, cmntmap, rtypeCmnts)\n\t\t}\n\t}\n}\n\n// getRtypeCmnts returns all +rtype comments inside 'file'. It also\n// decorates them with the toplevel declaration that contains them as well\n// as the statement they are associated with (where applicable).\nfunc getRtypeCmnts(file *ast.File, cmntmap ast.CommentMap) []*rtypeCmnt {\n\tr := []*rtypeCmnt{}\n\n\tfor n, cmntgrps := range cmntmap {\n\t\tfor _, cmntgrp := range cmntgrps {\n\t\t\tif len(cmntgrp.List) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfor _, cmnt := range cmntgrp.List {\n\t\t\t\ttxt := cleanupCommentText(cmnt.Text)\n\t\t\t\tif !strings.HasPrefix(txt, magicCommentPrefix) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tr = append(r, &rtypeCmnt{slash: cmnt.Slash, txt: txt, node: n})\n\t\t\t}\n\n\t\t}\n\t}\n\n\tsort.Slice(r, func(i, j int) bool { return r[i].slash < r[j].slash })\n\n\t// assign each comment to the toplevel declaration that contains it\n\tfor i, j := 0, 0; i < len(r) && j < len(file.Decls); {\n\t\tdecl := file.Decls[j]\n\t\tif decl.Pos() <= r[i].slash && r[i].slash < decl.End() {\n\t\t\tr[i].toplevel = decl\n\t\t\ti++\n\t\t} else {\n\t\t\tj++\n\t\t}\n\t}\n\n\t// for comments declared inside a function also find the statement that contains them.\n\tfor i := range r {\n\t\tfndecl, ok := r[i].toplevel.(*ast.FuncDecl)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar lastStmt ast.Stmt\n\t\tast.Inspect(fndecl, func(n ast.Node) bool {\n\t\t\tif stmt, _ := n.(ast.Stmt); stmt != nil {\n\t\t\t\tlastStmt = stmt\n\t\t\t}\n\t\t\tif n == r[i].node {\n\t\t\t\tr[i].stmt = lastStmt\n\t\t\t}\n\t\t\treturn true\n\t\t})\n\t}\n\n\treturn r\n}\n\nfunc cleanupCommentText(txt string) string {\n\tif strings.HasPrefix(txt, \"/*\") || strings.HasPrefix(txt, \"//\") {\n\t\ttxt = txt[2:]\n\t}\n\treturn strings.TrimSpace(strings.TrimSuffix(txt, \"*/\"))\n}\n\n// process processes a single +rtype comment, turning it into a rule.\n// If the +rtype comment is associated with a *proc.Variable declaration\n// then it also checks the containing function for all uses of that\n// variable.\nfunc process(pkg *packages.Package, rtcmnt *rtypeCmnt, cmntmap ast.CommentMap, rtcmnts []*rtypeCmnt) {\n\ttinfo := pkg.TypesInfo\n\tfields := strings.Split(rtcmnt.txt, \" \")\n\n\tfirstMinor := 0\n\n\tif strings.HasPrefix(fields[1], gover) {\n\t\tfirstMinor, _ = strconv.Atoi(fields[1][len(gover):])\n\t\tfields = fields[1:]\n\t}\n\n\tswitch fields[1] {\n\tcase \"-var\":\n\t\t// -var V T\n\t\t// requests that variable V is of type T\n\t\taddCheckVarType(fields[2], fields[3], rtcmnt.slash, firstMinor)\n\tcase \"-field\":\n\t\t// -field S.F T\n\t\t// requests that field F of type S is of type T\n\t\tv := strings.Split(fields[2], \".\")\n\t\taddCheckFieldType(v[0], v[1], fields[3], false, rtcmnt.slash, firstMinor)\n\tdefault:\n\t\tok := false\n\t\tif ident := isProcVariableDecl(rtcmnt.stmt, tinfo); ident != nil {\n\t\t\tif len(fields) == 2 {\n\t\t\t\tprocessProcVariableUses(rtcmnt.toplevel, tinfo, ident, cmntmap, rtcmnts, fields[1], firstMinor)\n\t\t\t\tok = true\n\t\t\t} else if len(fields) == 3 && fields[1] == \"-opt\" {\n\t\t\t\tprocessProcVariableUses(rtcmnt.toplevel, tinfo, ident, cmntmap, rtcmnts, fields[2], firstMinor)\n\t\t\t\tok = true\n\t\t\t}\n\t\t} else if ident := isConstDecl(rtcmnt.toplevel, rtcmnt.node); len(fields) == 2 && ident != nil {\n\t\t\taddCheckConstVal(fields[1], constValue(tinfo.Defs[ident]), rtcmnt.slash, firstMinor)\n\t\t\tok = true\n\t\t} else if F := isStringCaseClause(rtcmnt.stmt); F != \"\" && len(fields) == 4 && fields[1] == \"-fieldof\" {\n\t\t\taddCheckFieldType(fields[2], F, fields[3], false, rtcmnt.slash, firstMinor)\n\t\t\tok = true\n\t\t}\n\t\tif !ok {\n\t\t\tpos := fset.Position(rtcmnt.slash)\n\t\t\tlog.Fatalf(\"%s:%d: unrecognized +rtype comment\\n\", pos.Filename, pos.Line)\n\t\t}\n\t}\n}\n\n// isProcVariableDecl returns true if stmt is a declaration of a\n// *proc.Variable variable.\nfunc isProcVariableDecl(stmt ast.Stmt, tinfo *types.Info) *ast.Ident {\n\tass, _ := stmt.(*ast.AssignStmt)\n\tif ass == nil {\n\t\treturn nil\n\t}\n\tif len(ass.Lhs) == 0 {\n\t\treturn nil\n\t}\n\tident, _ := ass.Lhs[0].(*ast.Ident)\n\tif ident == nil {\n\t\treturn nil\n\t}\n\tvar typ types.Type\n\tif def := tinfo.Defs[ident]; def != nil {\n\t\ttyp = def.Type()\n\t}\n\tif tv, ok := tinfo.Types[ident]; ok {\n\t\ttyp = tv.Type\n\t}\n\tif typ == nil {\n\t\treturn nil\n\t}\n\tif typ == nil || typ.String() != \"*github.com/go-delve/delve/pkg/proc.Variable\" {\n\t\treturn nil\n\t}\n\treturn ident\n}\n\nfunc isConstDecl(toplevel ast.Decl, node ast.Node) *ast.Ident {\n\tgendecl, _ := toplevel.(*ast.GenDecl)\n\tif gendecl == nil {\n\t\treturn nil\n\t}\n\tif gendecl.Tok != token.CONST {\n\t\treturn nil\n\t}\n\tvalspec, _ := node.(*ast.ValueSpec)\n\tif valspec == nil {\n\t\treturn nil\n\t}\n\tif len(valspec.Names) != 1 {\n\t\treturn nil\n\t}\n\treturn valspec.Names[0]\n}\n\nfunc isStringCaseClause(stmt ast.Stmt) string {\n\tc, _ := stmt.(*ast.CaseClause)\n\tif c == nil {\n\t\treturn \"\"\n\t}\n\tif len(c.List) != 1 {\n\t\treturn \"\"\n\t}\n\tlit := c.List[0].(*ast.BasicLit)\n\tif lit == nil {\n\t\treturn \"\"\n\t}\n\tif lit.Kind != token.STRING {\n\t\treturn \"\"\n\t}\n\tr, _ := strconv.Unquote(lit.Value)\n\treturn r\n}\n\n// processProcVariableUses scans the body of the function declaration 'decl'\n// looking for uses of 'procVarIdent' which is assumed to be an identifier\n// for a *proc.Variable variable.\nfunc processProcVariableUses(decl ast.Node, tinfo *types.Info, procVarIdent *ast.Ident, cmntmap ast.CommentMap, rtcmnts []*rtypeCmnt, S string, firstMinor int) {\n\tif len(S) > 0 && S[0] == '*' {\n\t\tS = S[1:]\n\t}\n\tisParseG := false\n\tif fndecl, _ := decl.(*ast.FuncDecl); fndecl != nil {\n\t\tif fndecl.Name.Name == \"parseG\" {\n\t\t\tif procVarIdent.Name == \"v\" {\n\t\t\t\tisParseG = true\n\t\t\t}\n\t\t}\n\t}\n\tvar lastStmt ast.Stmt\n\tast.Inspect(decl, func(n ast.Node) bool {\n\t\tif stmt, _ := n.(ast.Stmt); stmt != nil {\n\t\t\tlastStmt = stmt\n\t\t}\n\n\t\tfncall, _ := n.(*ast.CallExpr)\n\t\tif fncall == nil {\n\t\t\treturn true\n\t\t}\n\t\tvar methodName string\n\t\tif isParseG {\n\t\t\tif xident, _ := fncall.Fun.(*ast.Ident); xident != nil && (xident.Name == \"loadInt64Maybe\" || xident.Name == \"loadUint64Maybe\") {\n\t\t\t\tmethodName = \"loadInt64Maybe\"\n\t\t\t}\n\t\t}\n\t\tif methodName == \"\" {\n\t\t\tsel, _ := fncall.Fun.(*ast.SelectorExpr)\n\t\t\tif sel == nil {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tmethodName = sel.Sel.Name\n\t\t\txident, _ := sel.X.(*ast.Ident)\n\t\t\tif xident == nil {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif xident.Obj != procVarIdent.Obj {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\tif len(fncall.Args) < 1 {\n\t\t\treturn true\n\t\t}\n\t\targ0, _ := fncall.Args[0].(*ast.BasicLit)\n\t\tif arg0 == nil {\n\t\t\treturn true\n\t\t}\n\t\tif arg0.Kind != token.STRING {\n\t\t\treturn true\n\t\t}\n\n\t\tswitch methodName {\n\t\tcase \"loadFieldNamed\", \"fieldVariable\", \"loadInt64Maybe\", \"structField\":\n\t\t\trtcmntIdx := -1\n\t\t\tif cmntgrps := cmntmap[lastStmt]; len(cmntgrps) > 0 && len(cmntgrps[0].List) > 0 {\n\t\t\t\trtcmntIdx = findComment(cmntgrps[0].List[0].Slash, rtcmnts)\n\t\t\t}\n\t\t\ttyp := \"anytype\"\n\t\t\topt := false\n\n\t\t\tif rtcmntIdx >= 0 {\n\t\t\t\tfields := strings.Split(rtcmnts[rtcmntIdx].txt, \" \")\n\t\t\t\tif len(fields) == 2 {\n\t\t\t\t\ttyp = fields[1]\n\t\t\t\t} else if len(fields) == 3 && fields[1] == \"-opt\" {\n\t\t\t\t\topt = true\n\t\t\t\t\ttyp = fields[2]\n\t\t\t\t}\n\t\t\t\tif isProcVariableDecl(lastStmt, tinfo) == nil {\n\t\t\t\t\t// remove it because we have already processed it\n\t\t\t\t\trtcmnts[rtcmntIdx] = nil\n\t\t\t\t}\n\t\t\t}\n\t\t\tF, _ := strconv.Unquote(arg0.Value)\n\t\t\taddCheckFieldType(S, F, typ, opt, fncall.Pos(), firstMinor)\n\t\t\t//printNode(fset, fncall)\n\t\tdefault:\n\t\t\tpos := fset.Position(n.Pos())\n\t\t\tlog.Fatalf(\"unknown node at %s:%d\", pos.Filename, pos.Line)\n\t\t}\n\t\treturn true\n\t})\n}\n\nfunc findComment(slash token.Pos, rtcmnts []*rtypeCmnt) int {\n\tfor i := range rtcmnts {\n\t\tif rtcmnts[i] != nil && rtcmnts[i].slash == slash {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\nfunc addCheckVarType(V, T string, pos token.Pos, firstMinor_ int) {\n\tcheckVarTypeRules = append(checkVarTypeRules, &checkVarType{V, T, pos, firstMinor(firstMinor_)})\n}\n\nfunc addCheckFieldType(S, F, T string, opt bool, pos token.Pos, firstMinor_ int) {\n\tif !strings.Contains(S, \"|\") {\n\t\tcheckFieldTypeRules[S] = append(checkFieldTypeRules[S], &checkFieldType{S, F, T, opt, pos, firstMinor(firstMinor_)})\n\t}\n}\n\nfunc addCheckConstVal(C string, V constant.Value, pos token.Pos, firstMinor_ int) {\n\tcheckConstValRules[C] = append(checkConstValRules[C], &checkConstVal{C, V, pos, firstMinor(firstMinor_)})\n}\n\n// report writes a report of all rules derived from the proc package to stdout.\nfunc report() {\n\tfor _, rule := range checkVarTypeRules {\n\t\tfmt.Printf(\"%s\\n\\n\", rule.String())\n\t}\n\n\tvar Ss []string\n\tfor S := range checkFieldTypeRules {\n\t\tSs = append(Ss, S)\n\t}\n\tsort.Strings(Ss)\n\tfor _, S := range Ss {\n\t\trules := checkFieldTypeRules[S]\n\t\tfmt.Printf(\"type %s struct {\\n\", S)\n\t\tfor _, rule := range rules {\n\t\t\tfmt.Printf(\"\\t%s %s\", rule.F, rule.T)\n\t\t\tif rule.opt {\n\t\t\t\tfmt.Printf(\" (optional)\")\n\t\t\t}\n\t\t\tpos := fset.Position(rule.pos)\n\t\t\tif showRuleOrigin {\n\t\t\t\tfmt.Printf(\"\\t// %s:%d\", relative(pos.Filename), pos.Line)\n\t\t\t}\n\t\t\tfmt.Printf(\"\\n\")\n\t\t}\n\t\tfmt.Printf(\"}\\n\\n\")\n\t}\n\n\tvar Cs []string\n\tfor C := range checkConstValRules {\n\t\tCs = append(Cs, C)\n\t}\n\tsort.Strings(Cs)\n\tfor _, C := range Cs {\n\t\trules := checkConstValRules[C]\n\t\tfor i, rule := range rules {\n\t\t\tif i == 0 {\n\t\t\t\tfmt.Printf(\"%s\\n\", rule.String())\n\t\t\t} else {\n\t\t\t\tfmt.Printf(\"or %s\\n\", rule.String())\n\t\t\t}\n\t\t}\n\t\tfmt.Printf(\"\\n\")\n\t}\n}\n\nfunc lookupPackage(pkgmap map[string]*packages.Package, name string) *packages.Package {\n\tif pkgmap[name] != nil {\n\t\treturn pkgmap[name]\n\t}\n\n\tpkgs, err := packages.Load(&packages.Config{Mode: packages.LoadSyntax, Fset: fset}, name)\n\tif err != nil {\n\t\tlog.Fatalf(\"could not load runtime package: %v\", err)\n\t}\n\tpackages.Visit(pkgs, func(pkg *packages.Package) bool {\n\t\tif pkgmap[pkg.ID] == nil {\n\t\t\tpkgmap[pkg.ID] = pkg\n\t\t}\n\t\treturn true\n\t}, nil)\n\n\treturn pkgmap[name]\n}\n\nfunc lookupTypeDef(pkgmap map[string]*packages.Package, typ string) types.Object {\n\tdot := strings.Index(typ, \".\")\n\tif dot < 0 {\n\t\treturn lookupPackage(pkgmap, \"runtime\").Types.Scope().Lookup(typ)\n\t}\n\n\treturn lookupPackage(pkgmap, typ[:dot]).Types.Scope().Lookup(typ[dot+1:])\n}\n\n// check parses the runtime package and checks that all the rules retrieved\n// from the 'proc' package pass.\nfunc check() {\n\tpkgmap := map[string]*packages.Package{}\n\tallok := true\n\n\tfor _, rule := range versionOkFilter(checkVarTypeRules) {\n\t\tpos := fset.Position(rule.pos)\n\t\tdef := lookupPackage(pkgmap, \"runtime\").Types.Scope().Lookup(rule.V)\n\t\tif def == nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"%s:%d: could not find variable %s\\n\", pos.Filename, pos.Line, rule.V)\n\t\t\tallok = false\n\t\t\tcontinue\n\t\t}\n\t\tif !matchType(def.Type(), rule.T) {\n\t\t\tfmt.Fprintf(os.Stderr, \"%s:%d: wrong type for variable %s, expected %s got %s\\n\", pos.Filename, pos.Line, rule.V, rule.T, typeStr(def.Type()))\n\t\t\tallok = false\n\t\t\tcontinue\n\t\t}\n\t}\n\n\tvar Ss []string\n\tfor S := range checkFieldTypeRules {\n\t\tSs = append(Ss, S)\n\t}\n\tsort.Strings(Ss)\n\tfor _, S := range Ss {\n\t\trules := versionOkFilter(checkFieldTypeRules[S])\n\t\tif len(rules) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tpos := fset.Position(rules[0].pos)\n\n\t\tdef := lookupTypeDef(pkgmap, S)\n\t\tif def == nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"%s:%d: could not find struct %s\\n\", pos.Filename, pos.Line, S)\n\t\t\tallok = false\n\t\t\tcontinue\n\t\t}\n\n\t\ttyp := def.Type()\n\t\tif typ == nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"%s:%d: could not find struct %s\\n\", pos.Filename, pos.Line, S)\n\t\t\tallok = false\n\t\t\tcontinue\n\t\t}\n\t\tstyp, _ := typ.Underlying().(*types.Struct)\n\t\tif styp == nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"%s:%d: could not find struct %s\\n\", pos.Filename, pos.Line, S)\n\t\t\tallok = false\n\t\t\tcontinue\n\t\t}\n\n\t\tfor _, rule := range rules {\n\t\t\tpos := fset.Position(rule.pos)\n\t\t\tfieldType := fieldTypeByName(styp, rule.F)\n\t\t\tif fieldType == nil {\n\t\t\t\tif rule.opt {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s:%d: could not find field %s.%s\\n\", pos.Filename, pos.Line, rule.S, rule.F)\n\t\t\t\tallok = false\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !matchType(fieldType, rule.T) {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%s:%d: wrong type for field %s.%s, expected %s got %s\\n\", pos.Filename, pos.Line, rule.S, rule.F, rule.T, typeStr(fieldType))\n\t\t\t\tallok = false\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t}\n\n\tvar Cs []string\n\tfor C := range checkConstValRules {\n\t\tCs = append(Cs, C)\n\t}\n\tsort.Strings(Cs)\n\tfor _, C := range Cs {\n\t\trules := versionOkFilter(checkConstValRules[C])\n\t\tif len(rules) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tpos := fset.Position(rules[0].pos)\n\t\tdef := findConst(pkgmap, C)\n\t\tif def == nil {\n\t\t\tfmt.Fprintf(os.Stderr, \"%s:%d: could not find constant %s\\n\", pos.Filename, pos.Line, C)\n\t\t\tallok = false\n\t\t\tcontinue\n\t\t}\n\n\t\tval := constValue(def)\n\t\tfound := false\n\t\tfor _, rule := range rules {\n\t\t\tif val == rule.V {\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tfmt.Fprintf(os.Stderr, \"%s:%d: wrong value for constant %s (%s)\\n\", pos.Filename, pos.Line, C, val.String())\n\t\t\tallok = false\n\t\t\tcontinue\n\t\t}\n\t}\n\n\tif !allok {\n\t\tos.Exit(1)\n\t}\n}\n\nfunc fieldTypeByName(typ *types.Struct, name string) types.Type {\n\tfor i := 0; i < typ.NumFields(); i++ {\n\t\tfield := typ.Field(i)\n\t\tif field.Name() == name {\n\t\t\treturn field.Type()\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc findConst(pkgmap map[string]*packages.Package, Cs string) types.Object {\n\tfor _, C := range strings.Split(Cs, \"|\") {\n\t\tpkg := lookupPackage(pkgmap, \"runtime\")\n\t\tif dot := strings.Index(C, \".\"); dot >= 0 {\n\t\t\tpkg = lookupPackage(pkgmap, C[:dot])\n\t\t\tC = C[dot+1:]\n\t\t}\n\t\tdef := pkg.Types.Scope().Lookup(C)\n\t\tif def != nil {\n\t\t\treturn def\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc matchType(typ types.Type, T string) bool {\n\tif T == \"anytype\" {\n\t\treturn true\n\t}\n\tif strings.Index(T, \"|\") > 0 {\n\t\tfor _, t1 := range strings.Split(T, \"|\") {\n\t\t\tif typeStr(typ) == t1 {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\treturn typeStr(typ) == T\n}\n\nfunc typeStr(typ types.Type) string {\n\treturn types.TypeString(typ, func(pkg *types.Package) string {\n\t\tif pkg.Path() == \"runtime\" {\n\t\t\treturn \"\"\n\t\t}\n\t\treturn pkg.Path()\n\t})\n}\n\nfunc constValue(obj types.Object) constant.Value {\n\treturn obj.(*types.Const).Val()\n}\n\nfunc printNode(fset *token.FileSet, n ast.Node) {\n\tast.Fprint(os.Stderr, fset, n, nil)\n}\n\nfunc exprToString(t ast.Expr) string {\n\tvar buf bytes.Buffer\n\tprinter.Fprint(&buf, token.NewFileSet(), t)\n\treturn buf.String()\n}\n\nfunc relative(s string) string {\n\twd, _ := os.Getwd()\n\tr, err := filepath.Rel(wd, s)\n\tif err != nil {\n\t\treturn s\n\t}\n\treturn r\n}\n\nfunc versionOkFilter[T interface{ versionOk(int) bool }](rules []T) []T {\n\tcurminor, _ := strconv.Atoi(strings.Split(runtime.Version()[len(gover):], \".\")[0])\n\tr := []T{}\n\tfor _, rule := range rules {\n\t\tif rule.versionOk(curminor) {\n\t\t\trules = append(rules, rule)\n\t\t}\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "_scripts/staticcheck-out.txt",
    "content": ""
  },
  {
    "path": "_scripts/test_linux.sh",
    "content": "#!/bin/bash\nset -e\nset -x\n\nversion=$1\narch=$2\n\napt-get -qq update\nif [ \"$arch\" = \"ppc64le\" ]; then\n\tapt-get install --no-upgrade -y wget jq\nelse\n\tapt-get install --no-upgrade -y gcc wget jq lsof\nfi\n\n\nif [ \"$arch\" != \"ppc64le\" ]; then\n\tapt-get install -y dwz\n\tdwz --version\nfi\n\nif [ \"$arch\" == \"riscv64\" ]; then\n\tapt-get install -y git\n\tgit --version\nfi\n\nfunction getgo {\n\texport GOROOT=/usr/local/go/$1\n\tif [ ! -d \"$GOROOT\" ]; then\n\t\twget -q https://dl.google.com/go/\"$1\".linux-\"${arch}\".tar.gz\n\t\tmkdir -p /usr/local/go\n\t\ttar -C /usr/local/go -xzf \"$1\".linux-\"${arch}\".tar.gz\n\t\tmv -f /usr/local/go/go \"$GOROOT\"\n\tfi\n}\n\nif [ \"$version\" = \"gotip\" ]; then\n\techo Building Go from tip\n\tgetgo $(wget -q -O - https://go.dev/VERSION?m=text | head -1)\n\texport GOROOT_BOOTSTRAP=$GOROOT\n\texport GOROOT=/usr/local/go/go-tip\n\tapt-get install -y git\n\tgit clone https://go.googlesource.com/go /usr/local/go/go-tip\n\tcd /usr/local/go/go-tip/src\n\t./make.bash\n\tcd -\nelse\n\techo Finding latest patch version for $version\n\techo \"Go $version on $arch\"\n\tversion=$(wget -q -O - 'https://go.dev/dl/?mode=json&include=all' | jq '.[].version' --raw-output | egrep ^$version'($|\\.|beta|rc)' | sort -rV | head -1)\n\tif [ \"x$version\" = \"x\" ]; then\n\t\tversion=$(wget -q -O - 'https://go.dev/dl/?mode=json&include=all' | jq '.[].version' --raw-output | egrep ^$version'($|\\.)' | sort -rV | head -1)\n\tfi\n\tgetgo $version\nfi\n\nGOPATH=$(pwd)/go\nexport GOPATH\nexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin\ngo version\nif [ \"$arch\" != \"ppc64le\" ]; then\n\tgo install honnef.co/go/tools/cmd/staticcheck@2025.1.1 || true\nfi\n\ngo install github.com/google/capslock/cmd/capslock@latest\n\nuname -a\necho \"$PATH\"\necho \"$GOROOT\"\necho \"$GOPATH\"\ncd delve\n\n# Starting with go1.18 'go build' and 'go run' will try to stamp the build\n# with the current VCS revision, which does not work with TeamCity\nif [ \"$version\" = \"gotip\" ]; then\n\texport GOFLAGS=-buildvcs=false\nelif [ ${version:4:2} -gt 17 ]; then\n\texport GOFLAGS=-buildvcs=false\nfi\n\nif [ \"$arch\" = \"386\" ]; then\n\tver=$(go version)\n\tif [ \"$ver\" = \"go version go1.19 linux/386\" ]; then\n\t\texport CGO_CFLAGS='-g -O0 -fno-stack-protector'\n\tfi\nfi\n\nset +e\ngo run _scripts/make.go test\nx=$?\nif [ \"$version\" = \"gotip\" ]; then\n\texit 0\nelse\n\texit $x\nfi\n"
  },
  {
    "path": "_scripts/test_mac.sh",
    "content": "#!/bin/bash\n\nset -x\nset -e\n\nGOVERSION=$1\nARCH=$2\nTMPDIR=$3\n\nif [ \"$GOVERSION\" = \"gotip\" ]; then\n    bootstrapver=$(curl https://go.dev/VERSION?m=text | head -1)\n    cd $TMPDIR\n    curl -sSL \"https://go.dev/dl/$bootstrapver.darwin-$ARCH.tar.gz\" | tar -xz\n    cd -\n    if [ -x $TMPDIR/go-tip ]; then\n    \tcd $TMPDIR/go-tip\n    \tgit pull origin\n    else\n    \tgit clone https://go.googlesource.com/go $TMPDIR/go-tip\n    fi\n    export GOROOT_BOOTSTRAP=$TMPDIR/go\n    export GOROOT=$TMPDIR/go-tip\n    cd $TMPDIR/go-tip/src\n    ./make.bash\n    cd -\nelse\n    echo Finding latest patch version for $GOVERSION\n    GOVERSION=$(python3 _scripts/latestver.py $GOVERSION)\n    echo Go $GOVERSION on $ARCH\n    cd $TMPDIR\n    curl -sSL \"https://go.dev/dl/$GOVERSION.darwin-$ARCH.tar.gz\" | tar -xz\n    cd -\n    export GOROOT=\"$TMPDIR/go\"\nfi\n\nmkdir -p $TMPDIR/gopath\n\ngo env\n\nexport GOPATH=\"$TMPDIR/gopath\"\nexport GOARCH=\"$ARCH\"\nexport PATH=\"$GOROOT/bin:$PATH\"\ngo version\n\ngo install github.com/google/capslock/cmd/capslock@latest\n\nset +e\nmake test\nx=$?\nif [ \"$GOVERSION\" = \"gotip\" ]; then\n\texit 0\nelse\n\texit $x\nfi\n"
  },
  {
    "path": "_scripts/test_windows.ps1",
    "content": "param (\n    [Parameter(Mandatory = $true)][string]$version,\n    [Parameter(Mandatory = $true)][string]$arch,\n    [Parameter(Mandatory = $false)][string]$binDir\n)\n\nif ($binDir -eq \"\") {\n    $binDir = Resolve-Path \"../../system\" # working directory\n}\n\n\nSet-MpPreference -DisableRealtimeMonitoring $true -ErrorAction SilentlyContinue\n\n# Install MinGW.\nif ($arch -eq \"amd64\")\n{\n    # Install Chocolatey\n    #Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))\n    choco install -y mingw\n} elseif ($arch -eq \"arm64\") {\n    $llvmVersion = \"20250924\"\n    $name = \"llvm-mingw-$llvmVersion-ucrt-aarch64\"\n    if (-Not(Test-Path \"$binDir\\llvm-mingw\\$name\"))\n    {\n        New-Item \"$binDir\\llvm-mingw\" -ItemType Directory -ErrorAction SilentlyContinue\n        $url = \"https://github.com/mstorsjo/llvm-mingw/releases/download/$llvmVersion/$name.zip\"\n        Invoke-WebRequest -UserAgent wget -Uri $url -OutFile \"$env:TEMP\\$name.zip\" -ErrorAction Stop\n        Expand-Archive -Force -LiteralPath \"$env:TEMP\\$name.zip\" -DestinationPath \"$binDir\\llvm-mingw\\\"\n    }\n    $env:PATH = \"$binDir\\llvm-mingw\\$name\\bin;$env:PATH\"\n} else {\n    Throw \"Unsupported architecture: $arch\"\n}\n\n# Install Procdump\nif (-Not(Test-Path \"$binDir\\procdump\"))\n{\n    New-Item \"$binDir\\procdump\" -ItemType Directory\n    Invoke-WebRequest -UserAgent wget -Uri \"https://download.sysinternals.com/files/Procdump.zip\" -OutFile \"$env:TEMP\\procdump.zip\"\n    Expand-Archive -Force -LiteralPath \"$env:TEMP\\procdump.zip\" -DestinationPath \"$binDir\\procdump\"\n}\n\n$env:PATH = \"$binDir\\procdump;$env:PATH\"\n\nfunction GetGo($version) {\n    $env:GOROOT = \"$binDir\\go\\$version\"\n    Write-Host \"Installing Go $version to $env:GOROOT\"\n    if (-Not(Test-Path $env:GOROOT))\n    {\n        $file = \"$version.windows-$arch.zip\"\n        $url = \"https://dl.google.com/go/$file\"\n        Invoke-WebRequest -UserAgent wget -Uri $url -OutFile \"$env:TEMP\\$file\" -ErrorAction Stop\n        Expand-Archive -Force -LiteralPath \"$env:TEMP\\$file\" -DestinationPath \"$env:TEMP\\$version\"\n        New-Item $env:GOROOT -ItemType Directory\n        Move-Item -Path \"$env:TEMP\\$version\\go\\*\" -Destination $env:GOROOT -Force\n    }\n}\n\nif ($version -eq \"gotip\") {\n    #Exit 0\n    $versions = Invoke-WebRequest -Uri \"https://go.dev/dl/?mode=json\" -UseBasicParsing | foreach {$_.Content} | ConvertFrom-Json -ErrorAction Stop\n    $latest = $versions[0].version\n    GetGo $latest\n    $env:GOROOT_BOOTSTRAP = $env:GOROOT\n    $env:GOROOT = \"$binDir\\go\\go-tip\"\n    Write-Host \"Building Go with GOROOT_BOOTSTRAP $env:GOROOT_BOOTSTRAP\"\n    if (-Not(Test-Path $env:GOROOT)) {\n        git clone \"https://go.googlesource.com/go\" \"$binDir\\go\\go-tip\"\n        Push-Location -Path \"$binDir\\go\\go-tip\\src\"\n    } else {\n        Push-Location -Path \"$binDir\\go\\go-tip\\src\"\n        git pull\n    }\n    .\\make.bat\n    Pop-Location\n} else {\n    # Install Go\n    Write-Host \"Finding latest patch version for $version\"\n    $versions = Invoke-WebRequest -Uri \"https://golang.org/dl/?mode=json&include=all\" -UseBasicParsing | foreach {$_.Content} | ConvertFrom-Json -ErrorAction Stop\n    $v = $versions | foreach {$_.version} | Select-String -Pattern \"^$version($|\\.)\" | Sort-Object -Descending | Select-Object -First 1\n    if ($v -eq $null) {\n      $v = $versions | foreach {$_.version} | Select-String -Pattern \"^$version(rc)\" | Sort-Object -Descending | Select-Object -First 1\n    }\n    if ($v -eq $null) {\n      $v = $versions | foreach {$_.version} | Select-String -Pattern \"^$version(beta)\" | Sort-Object -Descending | Select-Object -First 1\n    }\n    Write-Host \"Go $v on $arch\"\n    GetGo $v\n}\n\n$env:GOPATH = \"$binDir\\gopath\"\n$env:PATH = \"$env:GOROOT\\bin;$env:GOPATH\\bin;$env:PATH\"\nWrite-Host $env:PATH\nWrite-Host $env:GOROOT\nWrite-Host $env:GOPATH\n\nGet-Command go\n\ngo install github.com/google/capslock/cmd/capslock@latest\n\ngo version\ngo env\ngo run _scripts/make.go test -v\n$x = $LastExitCode\nif ($version -ne \"gotip\") {\n    Exit $x\n}\n"
  },
  {
    "path": "_scripts/testsign",
    "content": "#!/usr/bin/env bash\ncodesign -s $CERT $1\nexec \"$@\"\n"
  },
  {
    "path": "go.mod",
    "content": "module github.com/go-delve/delve\n\ngo 1.24\n\nrequire (\n\tgithub.com/cilium/ebpf v0.11.0\n\tgithub.com/cosiner/argv v0.1.0\n\tgithub.com/creack/pty v1.1.20\n\tgithub.com/derekparker/trie/v3 v3.2.0\n\tgithub.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62\n\tgithub.com/google/go-dap v0.12.0\n\tgithub.com/mattn/go-colorable v0.1.13\n\tgithub.com/mattn/go-isatty v0.0.20\n\tgithub.com/spf13/cobra v1.10.2\n\tgithub.com/spf13/pflag v1.0.9\n\tgo.starlark.net v0.0.0-20231101134539-556fd59b42f6\n\tgo.yaml.in/yaml/v3 v3.0.4\n\tgolang.org/x/arch v0.11.0\n\tgolang.org/x/sys v0.26.0\n\tgolang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5\n)\n\nrequire (\n\tgithub.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect\n\tgithub.com/inconshreveable/mousetrap v1.1.0 // indirect\n\tgithub.com/mattn/go-runewidth v0.0.13 // indirect\n\tgithub.com/rivo/uniseg v0.2.0 // indirect\n\tgithub.com/russross/blackfriday/v2 v2.1.0 // indirect\n\tgolang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 // indirect\n\tgolang.org/x/sync v0.8.0 // indirect\n)\n"
  },
  {
    "path": "go.sum",
    "content": "github.com/cilium/ebpf v0.11.0 h1:V8gS/bTCCjX9uUnkUFUpPsksM8n1lXBAvHcpiFk1X2Y=\ngithub.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs=\ngithub.com/cosiner/argv v0.1.0 h1:BVDiEL32lwHukgJKP87btEPenzrrHUjajs/8yzaqcXg=\ngithub.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0=\ngithub.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=\ngithub.com/creack/pty v1.1.20 h1:VIPb/a2s17qNeQgDnkfZC35RScx+blkKF8GV68n80J4=\ngithub.com/creack/pty v1.1.20/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=\ngithub.com/derekparker/trie/v3 v3.2.0 h1:fET3Qbp9xSB7yc7tz6Y2GKMNl0SycYFo3cmiRI3Gpf0=\ngithub.com/derekparker/trie/v3 v3.2.0/go.mod h1:P94lW0LPgiaMgKAEQD59IDZD2jMK9paKok8Nli/nQbE=\ngithub.com/frankban/quicktest v1.14.5 h1:dfYrrRyLtiqT9GyKXgdh+k4inNeTvmGbuSgZ3lx3GhA=\ngithub.com/frankban/quicktest v1.14.5/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=\ngithub.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62 h1:IGtvsNyIuRjl04XAOFGACozgUD7A82UffYxZt4DWbvA=\ngithub.com/go-delve/liner v1.2.3-0.20231231155935-4726ab1d7f62/go.mod h1:biJCRbqp51wS+I92HMqn5H8/A0PAhxn2vyOT+JqhiGI=\ngithub.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=\ngithub.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/go-dap v0.12.0 h1:rVcjv3SyMIrpaOoTAdFDyHs99CwVOItIJGKLQFQhNeM=\ngithub.com/google/go-dap v0.12.0/go.mod h1:tNjCASCm5cqePi/RVXXWEVqtnNLV1KTWtYOqu6rZNzc=\ngithub.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=\ngithub.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=\ngithub.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=\ngithub.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=\ngithub.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=\ngithub.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=\ngithub.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=\ngithub.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=\ngithub.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=\ngithub.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=\ngithub.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=\ngithub.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=\ngithub.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=\ngithub.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=\ngithub.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=\ngithub.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=\ngithub.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=\ngithub.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU=\ngithub.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4=\ngithub.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=\ngithub.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=\ngo.starlark.net v0.0.0-20231101134539-556fd59b42f6 h1:+eC0F/k4aBLC4szgOcjd7bDTEnpxADJyWJE0yowgM3E=\ngo.starlark.net v0.0.0-20231101134539-556fd59b42f6/go.mod h1:LcLNIzVOMp4oV+uusnpk+VU+SzXaJakUuBjoCSWH5dM=\ngo.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=\ngo.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=\ngolang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4=\ngolang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=\ngolang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2 h1:Jvc7gsqn21cJHCmAWx0LiimpP18LZmUxkT5Mp7EZ1mI=\ngolang.org/x/exp v0.0.0-20230224173230-c95f2b4c22f2/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc=\ngolang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=\ngolang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=\ngolang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=\ngolang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=\ngolang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=\ngolang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5 h1:TCDqnvbBsFapViksHcHySl/sW4+rTGNIAoJJesHRuMM=\ngolang.org/x/telemetry v0.0.0-20241106142447-58a1122356f5/go.mod h1:8nZWdGp9pq73ZI//QJyckMQab3yq7hoWi7SI0UIusVI=\ngoogle.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=\ngoogle.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\n"
  },
  {
    "path": "pkg/astutil/astutil.go",
    "content": "// This package contains utility functions used by pkg/proc to generate\n// ast.Expr expressions.\npackage astutil\n\nimport (\n\t\"bytes\"\n\t\"go/ast\"\n\t\"go/printer\"\n\t\"go/token\"\n\t\"strconv\"\n)\n\n// Eql returns an expression evaluating 'x == y'.\nfunc Eql(x, y ast.Expr) *ast.BinaryExpr {\n\treturn &ast.BinaryExpr{Op: token.EQL, X: x, Y: y}\n}\n\n// Sel returns an expression evaluating 'x.sel'.\nfunc Sel(x ast.Expr, sel string) *ast.SelectorExpr {\n\treturn &ast.SelectorExpr{X: x, Sel: &ast.Ident{Name: sel}}\n}\n\n// PkgVar returns an expression evaluating 'pkg.v'.\nfunc PkgVar(pkg, v string) *ast.SelectorExpr {\n\treturn &ast.SelectorExpr{X: &ast.Ident{Name: pkg}, Sel: &ast.Ident{Name: v}}\n}\n\n// Int returns an expression representing the integer 'n'.\nfunc Int(n int64) *ast.BasicLit {\n\treturn &ast.BasicLit{Kind: token.INT, Value: strconv.FormatInt(n, 10)}\n}\n\n// And returns an expression evaluating 'x && y'.\nfunc And(x, y ast.Expr) ast.Expr {\n\tif x == nil || y == nil {\n\t\treturn nil\n\t}\n\treturn &ast.BinaryExpr{Op: token.LAND, X: x, Y: y}\n}\n\n// Or returns an expression evaluating 'x || y'.\nfunc Or(x, y ast.Expr) ast.Expr {\n\tif x == nil || y == nil {\n\t\treturn nil\n\t}\n\treturn &ast.BinaryExpr{Op: token.LOR, X: x, Y: y}\n}\n\n// ExprToString uses go/printer to format an ast.Expr into a string.\nfunc ExprToString(t ast.Expr) string {\n\tvar buf bytes.Buffer\n\tprinter.Fprint(&buf, token.NewFileSet(), t)\n\treturn buf.String()\n}\n"
  },
  {
    "path": "pkg/config/config.go",
    "content": "package config\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"maps\"\n\t\"os\"\n\t\"os/user\"\n\t\"path\"\n\t\"runtime\"\n\t\"slices\"\n\n\t\"github.com/go-delve/delve/service/api\"\n\t\"go.yaml.in/yaml/v3\"\n)\n\nconst (\n\tconfigDir       string = \"dlv\"\n\tconfigDirHidden string = \".dlv\"\n\tconfigFile      string = \"config.yml\"\n\n\tPositionSource      = \"source\"\n\tPositionDisassembly = \"disassembly\"\n\tPositionDefault     = \"default\"\n)\n\n// SubstitutePathRule describes a rule for substitution of path to source code file.\ntype SubstitutePathRule struct {\n\t// Directory path will be substituted if it matches `From`.\n\tFrom string\n\t// Path to which substitution is performed.\n\tTo string\n}\n\n// SubstitutePathRules is a slice of source code path substitution rules.\ntype SubstitutePathRules []SubstitutePathRule\n\n// Config defines all configuration options available to be set through the config file.\ntype Config struct {\n\t// Commands aliases.\n\tAliases map[string][]string `yaml:\"aliases\"`\n\t// Source code path substitution rules.\n\tSubstitutePath SubstitutePathRules `yaml:\"substitute-path\"`\n\n\t// MaxStringLen is the maximum string length that the commands print,\n\t// locals, args and vars should read (in verbose mode).\n\tMaxStringLen *int `yaml:\"max-string-len,omitempty\"`\n\t// MaxArrayValues is the maximum number of array items that the commands\n\t// print, locals, args and vars should read (in verbose mode).\n\tMaxArrayValues *int `yaml:\"max-array-values,omitempty\"`\n\t// MaxVariableRecurse is output evaluation depth of nested struct members, array and\n\t// slice items and dereference pointers\n\tMaxVariableRecurse *int `yaml:\"max-variable-recurse,omitempty\"`\n\t// DisassembleFlavor allow user to specify output syntax flavor of assembly, one of\n\t// this list \"intel\"(default), \"gnu\", \"go\"\n\tDisassembleFlavor *string `yaml:\"disassemble-flavor,omitempty\"`\n\n\t// If ShowLocationExpr is true whatis will print the DWARF location\n\t// expression for its argument.\n\tShowLocationExpr bool `yaml:\"show-location-expr\"`\n\n\t// Source list line-number color, as a terminal escape sequence.\n\t// For historic reasons, this can also be an integer color code.\n\tSourceListLineColor any `yaml:\"source-list-line-color\"`\n\n\t// Source list arrow color, as a terminal escape sequence.\n\tSourceListArrowColor string `yaml:\"source-list-arrow-color\"`\n\n\t// Source list keyword color, as a terminal escape sequence.\n\tSourceListKeywordColor string `yaml:\"source-list-keyword-color\"`\n\n\t// Source list string color, as a terminal escape sequence.\n\tSourceListStringColor string `yaml:\"source-list-string-color\"`\n\n\t// Source list number color, as a terminal escape sequence.\n\tSourceListNumberColor string `yaml:\"source-list-number-color\"`\n\n\t// Source list comment color, as a terminal escape sequence.\n\tSourceListCommentColor string `yaml:\"source-list-comment-color\"`\n\n\t// Color for the prompt line.\n\tPromptColor string `yaml:\"prompt-color\"`\n\n\t// Source list tab color, as a terminal escape sequence.\n\tSourceListTabColor string `yaml:\"source-list-tab-color\"`\n\n\t// Color for function names in the stack trace.\n\tStackTraceFunctionColor string `yaml:\"stacktrace-function-color\"`\n\n\t// Color for the base name in paths in the stack trace.\n\tStackTraceBasenameColor string `yaml:\"stacktrace-basename-color\"`\n\n\t// number of lines to list above and below cursor when printfile() is\n\t// called (i.e. when execution stops, listCommand is used, etc)\n\tSourceListLineCount *int `yaml:\"source-list-line-count,omitempty\"`\n\n\t// DebugInfoDirectories is the list of directories Delve will use\n\t// in order to resolve external debug info files.\n\tDebugInfoDirectories []string `yaml:\"debug-info-directories\"`\n\n\t// Position controls how the current position in the program is displayed.\n\t// There are three possible values:\n\t//  - source: always show the current position in the program's source\n\t//    code.\n\t//  - disassembly: always should the current position by disassembling the\n\t//    current function.\n\t//  - default (or the empty string): use disassembly for step-instruction,\n\t//    source for everything else.\n\tPosition string `yaml:\"position\"`\n\n\t// Tab changes what is printed when a '\\t' is encountered in source code.\n\t// This can be used to shorten the tabstop (e.g. \"  \") or to print a more\n\t// visual indent (e.g. \">__ \").\n\tTab string `yaml:\"tab\"`\n\n\t// TraceShowTimestamp controls whether to show timestamp in the trace\n\t// output.\n\tTraceShowTimestamp bool `yaml:\"trace-show-timestamp\"`\n\n\t// Prompt is the string printed before each command. If empty, the\n\t// default prompt \"(dlv) \" is used.\n\tPrompt string `yaml:\"prompt,omitempty\"`\n}\n\nvar Documentation = map[string]string{\n\t\"aliases\": `Configures command aliases.\n\t\n\tconfig alias <command> <alias>\n\tconfig alias <alias>\n\nDefines <alias> as an alias to <command> or removes an alias.\n`,\n\n\t\"substitute-path\": `\tconfig substitute-path <from> <to>\n\tconfig substitute-path <from>\n\tconfig substitute-path -clear\n\tconfig substitute-path -guess\n\nAdds or removes a path substitution rule, if -clear is used all\nsubstitute-path rules are removed. Without arguments shows the current list\nof substitute-path rules.\nThe -guess option causes Delve to try to guess your substitute-path\nconfiguration automatically.\nSee also Documentation/cli/substitutepath.md for how the rules are applied.\n`,\n\n\t\"max-string-len\":            \"Maximum string length used when printing variables.\\n\",\n\t\"max-array-values\":          \"Maximum number of array values when printing variables.\\n\",\n\t\"max-variable-recurse\":      \"Maximum number of nested struct members when printing variables.\\n\",\n\t\"disassemble-flavor\":        \"Disassembler syntax. Can be 'intel', 'gun' or 'go'.\\n\",\n\t\"show-location-expr\":        \"If true the 'whatis' command will print the DWARF location expression of its argument.\\n\",\n\t\"source-list-line-color\":    \"Source list line-number color, as a terminal escape sequence.\\n\",\n\t\"source-list-arrow-color\":   \"Source list arrow color, as a terminal escape sequence.\\n\",\n\t\"source-list-keyword-color\": \"Source list keyword color, as a terminal escape sequence.\\n\",\n\t\"source-list-string-color\":  \"Source list string color, as a terminal escape sequence.\\n\",\n\t\"source-list-number-color\":  \"Source list number color, as a terminal escape sequence.\\n\",\n\t\"source-list-comment-color\": \"Source list comment color, as a terminal escape sequence.\\n\",\n\t\"prompt-color\":              \"Prompt color, as a terminal escape sequence.\\n\",\n\t\"source-list-tab-color\":     \"Source list tab color, as a terminal escape sequence.\\n\",\n\t\"stacktrace-function-color\": \"Color for function names in the stack trace, as a terminal escape sequence.\\n\",\n\t\"stacktrace-basename-color\": \"Color for the base name in paths in the stack trace, as a terminal escape sequence.\\n\",\n\t\"source-list-line-count\":    \"Number of lines to list above and below the cursor when printing source code.\\n\",\n\t\"tab\":                       \"Changes what is printed when a tab character is encountered in source code.\\n\",\n\t\"trace-show-timestamp\":      \"If true timestamps are shown in the trace output.\\n\",\n\n\t\"debug-info-directories\": `\tconfig debug-info-directories -add <path>\n\tconfig debug-info-directories -rm <path>\n\tconfig debug-info-directories -clear\n\nAdds, removes or clears debug-info-directories.\n`,\n\n\t\"position\": `Controls how the current position in the program is displayed. The possible values are:\n - 'source': always show the current position in the source code.\n - 'disassembly': always show the current position in the program disassembly.\n - 'default': show the current position in the disassembly after 'step-instruction', otherwise in source code.\n`,\n\n\t\"prompt\": `Changes Delve's prompt. This string can contain various escape codes:\n\n  $d\t\tinserts the current time in RFC3339 format\n  $d{fmt}\tinserts the current time formatted with fmt (using the time package syntax)\n  $f\t\tinserts the current frame number\n  $g\t\tinserts the current goroutine ID\n  $t\t\tinserts the current thread ID\n  $p\t\tinserts the current PID\n`,\n}\n\nfunc (c *Config) GetSourceListLineCount() int {\n\tn := 5 // default value\n\tlcp := c.SourceListLineCount\n\tif lcp != nil && *lcp >= 0 {\n\t\tn = *lcp\n\t}\n\treturn n\n}\n\nfunc (c *Config) GetDisassembleFlavour() api.AssemblyFlavour {\n\tif c == nil || c.DisassembleFlavor == nil {\n\t\treturn api.IntelFlavour\n\t}\n\tswitch *c.DisassembleFlavor {\n\tcase \"go\":\n\t\treturn api.GoFlavour\n\tcase \"gnu\":\n\t\treturn api.GNUFlavour\n\tdefault:\n\t\treturn api.IntelFlavour\n\t}\n}\n\n// LoadConfig attempts to populate a Config object from the config.yml file.\nfunc LoadConfig() (*Config, error) {\n\terr := createConfigPath()\n\tif err != nil {\n\t\treturn &Config{}, fmt.Errorf(\"could not create config directory: %v\", err)\n\t}\n\tfullConfigFile, err := GetConfigFilePath(configFile)\n\tif err != nil {\n\t\treturn &Config{}, fmt.Errorf(\"unable to get config file path: %v\", err)\n\t}\n\n\thasOldConfig, _ := hasOldConfig()\n\n\tif hasOldConfig {\n\t\tuserHomeDir := getUserHomeDir()\n\t\toldLocation := path.Join(userHomeDir, configDirHidden)\n\t\tif err := moveOldConfig(); err != nil {\n\t\t\treturn &Config{}, fmt.Errorf(\"unable to move old config: %v\", err)\n\t\t}\n\n\t\tif err := os.RemoveAll(oldLocation); err != nil {\n\t\t\treturn &Config{}, fmt.Errorf(\"unable to remove old config location: %v\", err)\n\t\t}\n\t\tfmt.Fprintf(os.Stderr, \"Successfully moved config from: %s to: %s\\n\", oldLocation, fullConfigFile)\n\t}\n\n\tf, err := os.Open(fullConfigFile)\n\tif err != nil {\n\t\tf, err = createDefaultConfig(fullConfigFile)\n\t\tif err != nil {\n\t\t\treturn &Config{}, fmt.Errorf(\"error creating default config file: %v\", err)\n\t\t}\n\t}\n\tdefer f.Close()\n\n\tdata, err := io.ReadAll(f)\n\tif err != nil {\n\t\treturn &Config{}, fmt.Errorf(\"unable to read config data: %v\", err)\n\t}\n\n\tvar c Config\n\terr = yaml.Unmarshal(data, &c)\n\tif err != nil {\n\t\treturn &Config{}, fmt.Errorf(\"unable to decode config file: %v\", err)\n\t}\n\n\tif len(c.DebugInfoDirectories) == 0 {\n\t\tc.DebugInfoDirectories = []string{\"/usr/lib/debug/.build-id\"}\n\t}\n\n\treturn &c, nil\n}\n\n// SaveConfig will marshal and save the config struct\n// to disk.\nfunc SaveConfig(conf *Config) error {\n\tfullConfigFile, err := GetConfigFilePath(configFile)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tout, err := yaml.Marshal(*conf)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tf, err := os.Create(fullConfigFile)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t_, err = f.Write(out)\n\treturn err\n}\n\n// moveOldConfig attempts to move config to new location\n// $HOME/.dlv to $XDG_CONFIG_HOME/dlv\nfunc moveOldConfig() error {\n\tif os.Getenv(\"XDG_CONFIG_HOME\") == \"\" && runtime.GOOS != \"linux\" {\n\t\treturn nil\n\t}\n\n\tuserHomeDir := getUserHomeDir()\n\n\tp := path.Join(userHomeDir, configDirHidden, configFile)\n\t_, err := os.Stat(p)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to read config file located at: %s\", p)\n\t}\n\n\tnewFile, err := GetConfigFilePath(configFile)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"unable to read config file located at: %s\", err)\n\t}\n\n\tif err := os.Rename(p, newFile); err != nil {\n\t\treturn fmt.Errorf(\"unable to move %s to %s\", p, newFile)\n\t}\n\treturn nil\n}\n\nfunc createDefaultConfig(path string) (*os.File, error) {\n\tf, err := os.Create(path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to create config file: %v\", err)\n\t}\n\terr = writeDefaultConfig(f)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to write default configuration: %v\", err)\n\t}\n\tf.Seek(0, io.SeekStart)\n\treturn f, nil\n}\n\nfunc writeDefaultConfig(f *os.File) error {\n\t_, err := f.WriteString(\n\t\t`# Configuration file for the delve debugger.\n\n# This is the default configuration file. Available options are provided, but disabled.\n# Delete the leading hash mark to enable an item.\n\n# Uncomment the following line and set your preferred ANSI color for source\n# line numbers in the (list) command. The default is 34 (dark blue). See\n# https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit\n# source-list-line-color: \"\\x1b[34m\"\n\n# Uncomment the following lines to change the colors used by syntax highlighting.\n# source-list-keyword-color: \"\\x1b[0m\"\n# source-list-string-color: \"\\x1b[92m\"\n# source-list-number-color: \"\\x1b[0m\"\n# source-list-comment-color: \"\\x1b[95m\"\n# source-list-arrow-color: \"\\x1b[93m\"\n# source-list-tab-color: \"\\x1b[90m\"\n\n# Uncomment to change what is printed instead of '\\t'.\n# tab: \"... \"\n\n# Uncomment to change the number of lines printed above and below cursor when\n# listing source code.\n# source-list-line-count: 5\n\n# Provided aliases will be added to the default aliases for a given command.\naliases:\n  # command: [\"alias1\", \"alias2\"]\n\n# Define sources path substitution rules. Can be used to rewrite a source path stored\n# in program's debug information, if the sources were moved to a different place\n# between compilation and debugging.\n# Note that substitution rules will not be used for paths passed to \"break\" and \"trace\"\n# commands.\n# See also Documentation/cli/substitutepath.md.\nsubstitute-path:\n  # - {from: path, to: path}\n  \n# Maximum number of elements loaded from an array.\n# max-array-values: 64\n\n# Maximum loaded string length.\n# max-string-len: 64\n\n# Output evaluation.\n# max-variable-recurse: 1\n\n# Uncomment the following line to make the whatis command also print the DWARF location expression of its argument.\n# show-location-expr: true\n\n# Allow user to specify output syntax flavor of assembly, one of this list \"intel\"(default), \"gnu\", \"go\".\n# disassemble-flavor: intel\n\n# List of directories to use when searching for separate debug info files.\ndebug-info-directories: [\"/usr/lib/debug/.build-id\"]\n\n# Uncomment to change how the current program position is displayed.\n# Possible options\n#  - 'source' always shows source code \n#  - 'disassembly' always show disassembly\n#  - 'default' show disassembly after step-instruction, source otherwise\n# position default\n\n# Uncomment to change Delve's default prompt.\n# The prompt string can contain various escape codes:\n#  $d\t\tinserts the current time in RFC3339 format\n#  $d{fmt}\tinserts the current time formatted with fmt (using the time package syntax)\n#  $f\t\tinserts the current frame number\n#  $g\t\tinserts the current goroutine ID\n#  $t\t\tinserts the current thread ID\n#  $p\t\tinserts the current PID\n`)\n\treturn err\n}\n\n// createConfigPath creates the directory structure at which all config files are saved.\nfunc createConfigPath() error {\n\tpath, err := GetConfigFilePath(\"\")\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn os.MkdirAll(path, 0700)\n}\n\n// GetConfigFilePath gets the full path to the given config file name.\nfunc GetConfigFilePath(file string) (string, error) {\n\tif configPath := os.Getenv(\"XDG_CONFIG_HOME\"); configPath != \"\" {\n\t\treturn path.Join(configPath, configDir, file), nil\n\t}\n\n\tuserHomeDir := getUserHomeDir()\n\n\tif runtime.GOOS == \"linux\" {\n\t\treturn path.Join(userHomeDir, \".config\", configDir, file), nil\n\t}\n\treturn path.Join(userHomeDir, configDirHidden, file), nil\n}\n\n// Checks if the user has a config at the old location: $HOME/.dlv\nfunc hasOldConfig() (bool, error) {\n\t// If you don't have XDG_CONFIG_HOME set and aren't on Linux you have nothing to move\n\tif os.Getenv(\"XDG_CONFIG_HOME\") == \"\" && runtime.GOOS != \"linux\" {\n\t\treturn false, nil\n\t}\n\n\tuserHomeDir := getUserHomeDir()\n\n\to := path.Join(userHomeDir, configDirHidden, configFile)\n\t_, err := os.Stat(o)\n\tif err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\treturn true, nil\n}\n\nfunc getUserHomeDir() string {\n\tuserHomeDir := \".\"\n\tusr, err := user.Current()\n\tif err == nil {\n\t\tuserHomeDir = usr.HomeDir\n\t}\n\treturn userHomeDir\n}\n\nfunc WriteConfigDocumentation(w io.Writer) {\n\tfmt.Fprint(w, \"# Configuration\\n\\n\")\n\tfmt.Fprint(w, \"The configuration file `config.yml` is found in `$XDG_CONFIG_HOME/dlv` if `$XDG_CONFIG_HOME` is set, if it isn't set it will be in `$HOME/.config/dlv` on Linux and `$HOME/.dlv` in other operating systems.\\n\\n\")\n\tfmt.Fprint(w, \"The following options are available:\\n\\n\")\n\tfmt.Fprint(w, \"Option | Description\\n\")\n\tfmt.Fprint(w, \"-------|------------\\n\")\n\tfor _, name := range slices.Sorted(maps.Keys(Documentation)) {\n\t\tswitch name {\n\t\tcase \"substitute-path\":\n\t\t\tfmt.Fprint(w, \"substitute-path | Path substitution rules, a list of `{ from: path, to: path }` pairs.\\n\")\n\t\tcase \"aliases\":\n\t\t\tfmt.Fprint(w, \"aliases | Map fo command aliases `command: [ \\\"alias1\\\", \\\"alias2\\\" ]`.\\n\")\n\t\tcase \"debug-info-directories\":\n\t\t\tfmt.Fprint(w, \"debug-info-directories | List of directories to use when searching for separate debug info files.\\n\")\n\t\tcase \"position\":\n\t\t\tfmt.Fprint(w, \"position | Controls how the current position in the program is displayed (source | disassembly | default).\\n\")\n\t\tcase \"prompt\":\n\t\t\tfmt.Fprint(w, \"prompt | Controls Delve's command line prompt. Use `help config prompt` for documentation on the available escape codes.\\n\")\n\t\tdefault:\n\t\t\tdoc := Documentation[name]\n\t\t\tif doc[len(doc)-1] == '\\n' {\n\t\t\t\tdoc = doc[:len(doc)-1]\n\t\t\t}\n\t\t\tfmt.Fprintf(w, \"%s | %s\\n\", name, doc)\n\t\t}\n\t}\n\tfmt.Fprint(w, \"\\n\")\n}\n"
  },
  {
    "path": "pkg/config/split.go",
    "content": "package config\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n)\n\n// SplitQuotedFields is like strings.Fields but ignores spaces inside areas surrounded\n// by the specified quote character.\n// To specify a single quote use backslash to escape it: \\'\nfunc SplitQuotedFields(in string, quote rune) []string {\n\ttype stateEnum int\n\tconst (\n\t\tinSpace stateEnum = iota\n\t\tinField\n\t\tinQuote\n\t\tinQuoteEscaped\n\t)\n\tstate := inSpace\n\tr := []string{}\n\tvar buf bytes.Buffer\n\n\tfor _, ch := range in {\n\t\tswitch state {\n\t\tcase inSpace:\n\t\t\tif ch == quote {\n\t\t\t\tstate = inQuote\n\t\t\t} else if !unicode.IsSpace(ch) {\n\t\t\t\tbuf.WriteRune(ch)\n\t\t\t\tstate = inField\n\t\t\t}\n\n\t\tcase inField:\n\t\t\tif ch == quote {\n\t\t\t\tstate = inQuote\n\t\t\t} else if unicode.IsSpace(ch) {\n\t\t\t\tr = append(r, buf.String())\n\t\t\t\tbuf.Reset()\n\t\t\t\tstate = inSpace\n\t\t\t} else {\n\t\t\t\tbuf.WriteRune(ch)\n\t\t\t}\n\n\t\tcase inQuote:\n\t\t\tswitch ch {\n\t\t\tcase quote:\n\t\t\t\tstate = inField\n\t\t\tcase '\\\\':\n\t\t\t\tstate = inQuoteEscaped\n\t\t\tdefault:\n\t\t\t\tbuf.WriteRune(ch)\n\t\t\t}\n\n\t\tcase inQuoteEscaped:\n\t\t\tbuf.WriteRune(ch)\n\t\t\tstate = inQuote\n\t\t}\n\t}\n\n\tif state == inField || buf.Len() != 0 {\n\t\tr = append(r, buf.String())\n\t}\n\n\treturn r\n}\n\nfunc ConfigureSetSimple(rest string, cfgname string, field reflect.Value) error {\n\tsimpleArg := func(typ reflect.Type) (reflect.Value, error) {\n\t\tswitch typ.Kind() {\n\t\tcase reflect.Int:\n\t\t\tn, err := strconv.Atoi(rest)\n\t\t\tif err != nil {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"argument to %q must be a number\", cfgname)\n\t\t\t}\n\t\t\tif n < 0 {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"argument to %q must be a number greater than zero\", cfgname)\n\t\t\t}\n\t\t\treturn reflect.ValueOf(&n), nil\n\t\tcase reflect.Bool:\n\t\t\tif rest != \"true\" && rest != \"false\" {\n\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"argument to %q must be true or false\", cfgname)\n\t\t\t}\n\t\t\tv := rest == \"true\"\n\t\t\treturn reflect.ValueOf(&v), nil\n\t\tcase reflect.String:\n\t\t\tunquoted, err := strconv.Unquote(rest)\n\t\t\tif err == nil {\n\t\t\t\trest = unquoted\n\t\t\t}\n\t\t\treturn reflect.ValueOf(&rest), nil\n\t\tcase reflect.Interface:\n\t\t\t// We special case this particular configuration key because historically we accept both a numerical value and a string value for it.\n\t\t\tif cfgname == \"source-list-line-color\" {\n\t\t\t\tn, err := strconv.Atoi(rest)\n\t\t\t\tif err == nil {\n\t\t\t\t\tif n < 0 {\n\t\t\t\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"argument to %q must be a number greater than zero\", cfgname)\n\t\t\t\t\t}\n\t\t\t\t\treturn reflect.ValueOf(&n), nil\n\t\t\t\t}\n\t\t\t\tunquoted, err := strconv.Unquote(rest)\n\t\t\t\tif err == nil {\n\t\t\t\t\trest = unquoted\n\t\t\t\t}\n\t\t\t\treturn reflect.ValueOf(&rest), nil\n\t\t\t}\n\t\t\tfallthrough\n\t\tdefault:\n\t\t\treturn reflect.ValueOf(nil), fmt.Errorf(\"unsupported type for configuration key %q\", cfgname)\n\t\t}\n\t}\n\n\tif field.Kind() == reflect.Ptr {\n\t\tval, err := simpleArg(field.Type().Elem())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfield.Set(val)\n\t} else {\n\t\tval, err := simpleArg(field.Type())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfield.Set(val.Elem())\n\t}\n\treturn nil\n}\n\nfunc ConfigureList(w io.Writer, config any, tag string) {\n\tit := IterateConfiguration(config, tag)\n\tfor it.Next() {\n\t\tfieldName, field := it.Field()\n\t\tif fieldName == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\twriteField(w, field, fieldName)\n\t}\n}\n\nfunc writeField(w io.Writer, field reflect.Value, fieldName string) {\n\tswitch field.Kind() {\n\tcase reflect.Interface:\n\t\tswitch field := field.Interface().(type) {\n\t\tcase string:\n\t\t\tfmt.Fprintf(w, \"%s\\t%q\\n\", fieldName, field)\n\t\tdefault:\n\t\t\tfmt.Fprintf(w, \"%s\\t%v\\n\", fieldName, field)\n\t\t}\n\tcase reflect.Ptr:\n\t\tif !field.IsNil() {\n\t\t\tfmt.Fprintf(w, \"%s\\t%v\\n\", fieldName, field.Elem())\n\t\t} else {\n\t\t\tfmt.Fprintf(w, \"%s\\t<not defined>\\n\", fieldName)\n\t\t}\n\tcase reflect.String:\n\t\tfmt.Fprintf(w, \"%s\\t%q\\n\", fieldName, field)\n\tdefault:\n\t\tfmt.Fprintf(w, \"%s\\t%v\\n\", fieldName, field)\n\t}\n}\n\ntype configureIterator struct {\n\tcfgValue reflect.Value\n\tcfgType  reflect.Type\n\ti        int\n\ttag      string\n}\n\nfunc IterateConfiguration(conf any, tag string) *configureIterator {\n\tcfgValue := reflect.ValueOf(conf).Elem()\n\tcfgType := cfgValue.Type()\n\n\treturn &configureIterator{cfgValue, cfgType, -1, tag}\n}\n\nfunc (it *configureIterator) Next() bool {\n\tit.i++\n\treturn it.i < it.cfgValue.NumField()\n}\n\nfunc (it *configureIterator) Field() (name string, field reflect.Value) {\n\tname = it.cfgType.Field(it.i).Tag.Get(it.tag)\n\tif comma := strings.Index(name, \",\"); comma >= 0 {\n\t\tname = name[:comma]\n\t}\n\tfield = it.cfgValue.Field(it.i)\n\treturn\n}\n\nfunc ConfigureListByName(conf any, name, tag string) string {\n\tif name == \"\" {\n\t\treturn \"\"\n\t}\n\tit := IterateConfiguration(conf, tag)\n\tfor it.Next() {\n\t\tfieldName, field := it.Field()\n\t\tif fieldName == name {\n\t\t\tvar buf bytes.Buffer\n\t\t\twriteField(&buf, field, fieldName)\n\t\t\treturn buf.String()\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc ConfigureFindFieldByName(conf any, name, tag string) reflect.Value {\n\tit := IterateConfiguration(conf, tag)\n\tfor it.Next() {\n\t\tfieldName, field := it.Field()\n\t\tif fieldName == name {\n\t\t\treturn field\n\t\t}\n\t}\n\treturn reflect.ValueOf(nil)\n}\n\nfunc Split2PartsBySpace(s string) []string {\n\tv := strings.SplitN(s, \" \", 2)\n\tfor i := range v {\n\t\tv[i] = strings.TrimSpace(v[i])\n\t}\n\treturn v\n}\n"
  },
  {
    "path": "pkg/config/split_test.go",
    "content": "package config\n\nimport (\n\t\"testing\"\n)\n\nfunc TestSplitQuotedFields(t *testing.T) {\n\tt.Parallel()\n\n\tin := `field'A' 'fieldB' fie'l\\'d'C fieldD 'another field' fieldE`\n\ttgt := []string{\"fieldA\", \"fieldB\", \"fiel'dC\", \"fieldD\", \"another field\", \"fieldE\"}\n\tout := SplitQuotedFields(in, '\\'')\n\n\tif len(tgt) != len(out) {\n\t\tt.Fatalf(\"expected %#v, got %#v (len mismatch)\", tgt, out)\n\t}\n\n\tfor i := range tgt {\n\t\tif tgt[i] != out[i] {\n\t\t\tt.Fatalf(\" expected %#v, got %#v (mismatch at %d)\", tgt, out, i)\n\t\t}\n\t}\n}\n\nfunc TestSplitDoubleQuotedFields(t *testing.T) {\n\ttests := []struct {\n\t\tname     string\n\t\tin       string\n\t\texpected []string\n\t}{\n\t\t{\n\t\t\tname:     \"generic test case\",\n\t\t\tin:       `field\"A\" \"fieldB\" fie\"l'd\"C \"field\\\"D\" \"yet another field\"`,\n\t\t\texpected: []string{\"fieldA\", \"fieldB\", \"fiel'dC\", \"field\\\"D\", \"yet another field\"},\n\t\t},\n\t\t{\n\t\t\tname:     \"with empty string in the end\",\n\t\t\tin:       `field\"A\" \"\" `,\n\t\t\texpected: []string{\"fieldA\", \"\"},\n\t\t},\n\t\t{\n\t\t\tname:     \"with empty string at the beginning\",\n\t\t\tin:       ` \"\" field\"A\"`,\n\t\t\texpected: []string{\"\", \"fieldA\"},\n\t\t},\n\t\t{\n\t\t\tname:     \"lots of spaces\",\n\t\t\tin:       `    field\"A\"   `,\n\t\t\texpected: []string{\"fieldA\"},\n\t\t},\n\t\t{\n\t\t\tname:     \"only empty string\",\n\t\t\tin:       ` \"\" \"\" \"\" \"\"\"\" \"\" `,\n\t\t\texpected: []string{\"\", \"\", \"\", \"\", \"\"},\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tin := tt.in\n\t\t\ttgt := tt.expected\n\t\t\tout := SplitQuotedFields(in, '\"')\n\t\t\tif len(tgt) != len(out) {\n\t\t\t\tt.Fatalf(\"expected %#v, got %#v (len mismatch)\", tgt, out)\n\t\t\t}\n\n\t\t\tfor i := range tgt {\n\t\t\t\tif tgt[i] != out[i] {\n\t\t\t\t\tt.Fatalf(\" expected %#v, got %#v (mismatch at %d)\", tgt, out, i)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestConfigureListByName(t *testing.T) {\n\tt.Parallel()\n\n\ttype testConfig struct {\n\t\tboolArg bool     `cfgName:\"bool-arg\"`\n\t\tlistArg []string `cfgName:\"list-arg\"`\n\t}\n\n\ttype args struct {\n\t\tsargs   *testConfig\n\t\tcfgname string\n\t}\n\ttests := []struct {\n\t\tname string\n\t\targs args\n\t\twant string\n\t}{\n\t\t{\n\t\t\tname: \"basic bool\",\n\t\t\targs: args{\n\t\t\t\tsargs: &testConfig{\n\t\t\t\t\tboolArg: true,\n\t\t\t\t\tlistArg: []string{},\n\t\t\t\t},\n\t\t\t\tcfgname: \"bool-arg\",\n\t\t\t},\n\t\t\twant: \"bool-arg\ttrue\\n\",\n\t\t},\n\t\t{\n\t\t\tname: \"list arg\",\n\t\t\targs: args{\n\t\t\t\tsargs: &testConfig{\n\t\t\t\t\tboolArg: true,\n\t\t\t\t\tlistArg: []string{\"item 1\", \"item 2\"},\n\t\t\t\t},\n\n\t\t\t\tcfgname: \"list-arg\",\n\t\t\t},\n\t\t\twant: \"list-arg\t[item 1 item 2]\\n\",\n\t\t},\n\t\t{\n\t\t\tname: \"empty\",\n\t\t\targs: args{\n\t\t\t\tsargs:   &testConfig{},\n\t\t\t\tcfgname: \"\",\n\t\t\t},\n\t\t\twant: \"\",\n\t\t},\n\t\t{\n\t\t\tname: \"invalid\",\n\t\t\targs: args{\n\t\t\t\tsargs:   &testConfig{},\n\t\t\t\tcfgname: \"nonexistent\",\n\t\t\t},\n\t\t\twant: \"\",\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tif got := ConfigureListByName(tt.args.sargs, tt.args.cfgname, \"cfgName\"); got != tt.want {\n\t\t\t\tt.Errorf(\"ConfigureListByName() = %v, want %v\", got, tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "pkg/debugdetect/detect.go",
    "content": "package debugdetect\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"time\"\n)\n\n// IsDebuggerAttached returns true if the current process is being debugged\n// by a ptrace-based debugger (Delve, gdb, lldb, etc.).\n//\n// Returns an error if the debugger state cannot be determined.\n// Supported platforms: linux, darwin, windows, freebsd\nfunc IsDebuggerAttached() (bool, error) {\n\tswitch runtime.GOOS {\n\tcase \"linux\", \"darwin\", \"windows\", \"freebsd\":\n\t\treturn detectDebuggerAttached()\n\tdefault:\n\t\treturn false, fmt.Errorf(\"debugger detection not supported on %s\", runtime.GOOS)\n\t}\n}\n\nfunc WaitForDebugger() error {\n\tfor {\n\t\tattached, err := IsDebuggerAttached()\n\t\tif attached || err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttime.Sleep(500 * time.Millisecond)\n\t}\n}\n"
  },
  {
    "path": "pkg/debugdetect/detect_darwin.go",
    "content": "package debugdetect\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\t// P_TRACED flag from sys/proc.h\n\tpTracedFlag = 0x00000800\n\n\t// sysctl constants from sys/sysctl.h\n\tkernProc    = 14 // KERN_PROC\n\tkernProcPID = 1  // KERN_PROC_PID\n)\n\nfunc detectDebuggerAttached() (bool, error) {\n\tvar info unix.KinfoProc\n\n\tmib := [4]int32{unix.CTL_KERN, kernProc, kernProcPID, int32(os.Getpid())}\n\n\tsize := uintptr(unsafe.Sizeof(info))\n\t_, _, errno := unix.Syscall6(\n\t\tunix.SYS___SYSCTL,\n\t\tuintptr(unsafe.Pointer(&mib[0])),\n\t\tuintptr(len(mib)),\n\t\tuintptr(unsafe.Pointer(&info)),\n\t\tuintptr(unsafe.Pointer(&size)),\n\t\t0,\n\t\t0,\n\t)\n\n\tif errno != 0 {\n\t\treturn false, fmt.Errorf(\"sysctl failed: %w\", errno)\n\t}\n\n\treturn (info.Proc.P_flag & pTracedFlag) != 0, nil\n}\n"
  },
  {
    "path": "pkg/debugdetect/detect_freebsd.go",
    "content": "package debugdetect\n\n/*\n#include <sys/types.h>\n#include <sys/sysctl.h>\n#include <sys/user.h>\n#include <libutil.h>\n#include <stdlib.h>\n#cgo LDFLAGS: -lutil\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"unsafe\"\n)\n\nconst (\n\t// P_TRACED flag from sys/proc.h\n\tpTracedFlag = 0x00000800\n)\n\nfunc detectDebuggerAttached() (bool, error) {\n\tkp, err := C.kinfo_getproc(C.int(os.Getpid()))\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"kinfo_getproc failed: %v\", err)\n\t}\n\tdefer C.free(unsafe.Pointer(kp))\n\n\treturn (int(kp.ki_flag) & pTracedFlag) != 0, nil\n}\n"
  },
  {
    "path": "pkg/debugdetect/detect_linux.go",
    "content": "//go:build linux\n\npackage debugdetect\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n)\n\nfunc detectDebuggerAttached() (bool, error) {\n\t// Read /proc/self/status and look for TracerPid field\n\tf, err := os.Open(\"/proc/self/status\")\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"failed to read /proc/self/status: %w\", err)\n\t}\n\tdefer f.Close()\n\n\tscanner := bufio.NewScanner(f)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\tif strings.HasPrefix(line, \"TracerPid:\") {\n\t\t\tfields := strings.Fields(line)\n\t\t\tif len(fields) < 2 {\n\t\t\t\treturn false, fmt.Errorf(\"malformed TracerPid line in /proc/self/status: %s\", line)\n\t\t\t}\n\t\t\tpid, err := strconv.Atoi(fields[1])\n\t\t\tif err != nil {\n\t\t\t\treturn false, fmt.Errorf(\"failed to parse TracerPid value: %w\", err)\n\t\t\t}\n\t\t\treturn pid != 0, nil\n\t\t}\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn false, fmt.Errorf(\"error reading /proc/self/status: %w\", err)\n\t}\n\n\treturn false, fmt.Errorf(\"TracerPid field not found in /proc/self/status\")\n}\n"
  },
  {
    "path": "pkg/debugdetect/detect_test.go",
    "content": "package debugdetect\n\nimport (\n\t\"bufio\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"testing\"\n\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n\t\"github.com/go-delve/delve/service/rpc2\"\n)\n\nfunc TestIntegration_NotAttached(t *testing.T) {\n\t// Build the fixture\n\tfixturesDir := protest.FindFixturesDir()\n\tfixtureSrc := filepath.Join(fixturesDir, \"debugdetect.go\")\n\tfixtureBin := filepath.Join(t.TempDir(), \"debugdetect\")\n\tif runtime.GOOS == \"windows\" {\n\t\tfixtureBin += \".exe\"\n\t}\n\n\tcmd := exec.Command(\"go\", \"build\", \"-o\", fixtureBin, fixtureSrc)\n\tif out, err := cmd.CombinedOutput(); err != nil {\n\t\tt.Fatalf(\"failed to build fixture: %v\\n%s\", err, out)\n\t}\n\n\t// Run the fixture (not under debugger)\n\tcmd = exec.Command(fixtureBin)\n\tout, err := cmd.CombinedOutput()\n\tif err != nil {\n\t\tt.Fatalf(\"fixture failed: %v\\n%s\", err, out)\n\t}\n\n\toutput := string(out)\n\tif !strings.Contains(output, \"NOT_ATTACHED\") {\n\t\tt.Errorf(\"expected 'NOT_ATTACHED' in output, got: %s\", output)\n\t}\n}\n\nfunc TestIntegration_WaitForDebugger(t *testing.T) {\n\t// This test verifies that WaitForDebugger() blocks until a debugger\n\t// attaches and then returns successfully by running the fixture\n\t// under Delve.\n\tprotest.AllowRecording(t)\n\n\tdlvbin := protest.GetDlvBinary(t)\n\tfixturesDir := protest.FindFixturesDir()\n\tfixtureSrc := filepath.Join(fixturesDir, \"waitfordebugger.go\")\n\n\tconst listenAddr = \"127.0.0.1:40581\"\n\tcmd := exec.Command(dlvbin, \"debug\", fixtureSrc, \"--headless\", \"--continue\", \"--accept-multiclient\", \"--listen\", listenAddr)\n\tstdout, err := cmd.StdoutPipe()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer stdout.Close()\n\n\tif err := cmd.Start(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// Read stdout until we see the program output\n\tscanner := bufio.NewScanner(stdout)\n\tfoundOutput := false\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\tt.Log(line)\n\t\tif strings.Contains(line, \"DEBUGGER_FOUND\") {\n\t\t\tfoundOutput = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Clean up - connect and detach\n\tclient := rpc2.NewClient(listenAddr)\n\tclient.Detach(true)\n\tcmd.Wait()\n\n\tif !foundOutput {\n\t\tt.Error(\"expected 'DEBUGGER_FOUND' in output when running under debugger\")\n\t}\n}\n\nfunc TestIntegration_Attached(t *testing.T) {\n\t// This test verifies that IsDebuggerAttached() returns true when\n\t// the process is actually running under a debugger by using\n\t// Delve to debug the fixture source file\n\tprotest.AllowRecording(t)\n\n\tdlvbin := protest.GetDlvBinary(t)\n\tfixturesDir := protest.FindFixturesDir()\n\tfixtureSrc := filepath.Join(fixturesDir, \"debugdetect.go\")\n\n\t// Run the fixture under dlv debug with --headless --continue\n\t// This will attach the debugger, compile and run the program\n\tconst listenAddr = \"127.0.0.1:40580\"\n\tcmd := exec.Command(dlvbin, \"debug\", fixtureSrc, \"--headless\", \"--continue\", \"--accept-multiclient\", \"--listen\", listenAddr)\n\tstdout, err := cmd.StdoutPipe()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer stdout.Close()\n\n\tif err := cmd.Start(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// Read stdout until we see the program output\n\tscanner := bufio.NewScanner(stdout)\n\tfoundOutput := false\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\tt.Log(line)\n\t\tif strings.Contains(line, \"ATTACHED\") {\n\t\t\tfoundOutput = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Clean up - connect and detach\n\tclient := rpc2.NewClient(listenAddr)\n\tclient.Detach(true)\n\tcmd.Wait()\n\n\tif !foundOutput {\n\t\tt.Error(\"expected 'ATTACHED' in output when running under debugger\")\n\t}\n}\n"
  },
  {
    "path": "pkg/debugdetect/detect_windows.go",
    "content": "package debugdetect\n\nimport (\n\t\"golang.org/x/sys/windows\"\n)\n\nvar (\n\tkernel32              = windows.NewLazySystemDLL(\"kernel32.dll\")\n\tprocIsDebuggerPresent = kernel32.NewProc(\"IsDebuggerPresent\")\n)\n\nfunc detectDebuggerAttached() (bool, error) {\n\t// Use IsDebuggerPresent from kernel32.dll\n\t// This checks the BeingDebugged flag in the PEB\n\tflag, _, _ := procIsDebuggerPresent.Call()\n\treturn flag != 0, nil\n}\n"
  },
  {
    "path": "pkg/debugdetect/doc.go",
    "content": "// Package debugdetect provides utilities for detecting if a program\n// is running under a debugger.\n//\n// This is useful for applications that need to modify their behavior\n// when being debugged, such as TUI applications that need to wait for\n// debugger attachment before continuing startup.\n//\n// Example usage:\n//\n//\tattached, err := debugdetect.IsDebuggerAttached()\n//\tif err != nil {\n//\t\tlog.Fatalf(\"Failed to detect debugger: %v\", err)\n//\t}\n//\tif !attached {\n//\t\tfmt.Println(\"Waiting for debugger...\")\n//\t\tfor {\n//\t\t\tif attached, _ := debugdetect.IsDebuggerAttached(); attached {\n//\t\t\t\tbreak\n//\t\t\t}\n//\t\t\ttime.Sleep(100 * time.Millisecond)\n//\t\t}\n//\t}\n//\n// Supported platforms: linux, darwin, windows, freebsd\n// Detects: ptrace-based debuggers (Delve, gdb, lldb, etc.)\npackage debugdetect\n"
  },
  {
    "path": "pkg/dwarf/dwarfbuilder/builder.go",
    "content": "// Package dwarfbuilder provides a way to build DWARF sections with\n// arbitrary contents.\npackage dwarfbuilder\n\nimport (\n\t\"bytes\"\n\t\"debug/dwarf\"\n\t\"encoding/binary\"\n\t\"fmt\"\n)\n\n// Builder dwarf builder\ntype Builder struct {\n\tinfo     bytes.Buffer\n\tloc      bytes.Buffer\n\tabbrevs  []tagDescr\n\ttagStack []*tagState\n}\n\n// New creates a new DWARF builder.\nfunc New() *Builder {\n\tb := &Builder{}\n\n\tb.info.Write([]byte{\n\t\t0x0, 0x0, 0x0, 0x0, // length\n\t\t0x4, 0x0, // version\n\t\t0x0, 0x0, 0x0, 0x0, // debug_abbrev_offset\n\t\t0x8, // address_size\n\t})\n\n\tb.TagOpen(dwarf.TagCompileUnit, \"go\")\n\tb.Attr(dwarf.AttrLanguage, uint8(22))\n\n\treturn b\n}\n\n// Build closes b and returns all the dwarf sections.\nfunc (b *Builder) Build() (abbrev, aranges, frame, info, line, pubnames, ranges, str, loc []byte, err error) {\n\tb.TagClose()\n\n\tif len(b.tagStack) > 0 {\n\t\terr = fmt.Errorf(\"unbalanced TagOpen/TagClose %d\", len(b.tagStack))\n\t\treturn\n\t}\n\n\tabbrev = b.makeAbbrevTable()\n\tinfo = b.info.Bytes()\n\tbinary.LittleEndian.PutUint32(info, uint32(len(info)-4))\n\tloc = b.loc.Bytes()\n\n\treturn\n}\n"
  },
  {
    "path": "pkg/dwarf/dwarfbuilder/info.go",
    "content": "package dwarfbuilder\n\nimport (\n\t\"bytes\"\n\t\"debug/dwarf\"\n\t\"encoding/binary\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\n// Form represents a DWARF form kind (see Figure 20, page 160 and following,\n// DWARF v4)\ntype Form uint16\n\nconst (\n\tDW_FORM_addr         Form = 0x01 // address\n\tDW_FORM_block2       Form = 0x03 // block\n\tDW_FORM_block4       Form = 0x04 // block\n\tDW_FORM_data2        Form = 0x05 // constant\n\tDW_FORM_data4        Form = 0x06 // constant\n\tDW_FORM_data8        Form = 0x07 // constant\n\tDW_FORM_string       Form = 0x08 // string\n\tDW_FORM_block        Form = 0x09 // block\n\tDW_FORM_block1       Form = 0x0a // block\n\tDW_FORM_data1        Form = 0x0b // constant\n\tDW_FORM_flag         Form = 0x0c // flag\n\tDW_FORM_sdata        Form = 0x0d // constant\n\tDW_FORM_strp         Form = 0x0e // string\n\tDW_FORM_udata        Form = 0x0f // constant\n\tDW_FORM_ref_addr     Form = 0x10 // reference\n\tDW_FORM_ref1         Form = 0x11 // reference\n\tDW_FORM_ref2         Form = 0x12 // reference\n\tDW_FORM_ref4         Form = 0x13 // reference\n\tDW_FORM_ref8         Form = 0x14 // reference\n\tDW_FORM_ref_udata    Form = 0x15 // reference\n\tDW_FORM_indirect     Form = 0x16 // (see Section 7.5.3)\n\tDW_FORM_sec_offset   Form = 0x17 // lineptr, loclistptr, macptr, rangelistptr\n\tDW_FORM_exprloc      Form = 0x18 // exprloc\n\tDW_FORM_flag_present Form = 0x19 // flag\n\tDW_FORM_ref_sig8     Form = 0x20 // reference\n)\n\n// Encoding represents a DWARF base type encoding (see section 7.8, page 168\n// and following, DWARF v4).\ntype Encoding uint16\n\nconst (\n\tDW_ATE_address         Encoding = 0x01\n\tDW_ATE_boolean         Encoding = 0x02\n\tDW_ATE_complex_float   Encoding = 0x03\n\tDW_ATE_float           Encoding = 0x04\n\tDW_ATE_signed          Encoding = 0x05\n\tDW_ATE_signed_char     Encoding = 0x06\n\tDW_ATE_unsigned        Encoding = 0x07\n\tDW_ATE_unsigned_char   Encoding = 0x08\n\tDW_ATE_imaginary_float Encoding = 0x09\n\tDW_ATE_packed_decimal  Encoding = 0x0a\n\tDW_ATE_numeric_string  Encoding = 0x0b\n\tDW_ATE_edited          Encoding = 0x0c\n\tDW_ATE_signed_fixed    Encoding = 0x0d\n\tDW_ATE_unsigned_fixed  Encoding = 0x0e\n\tDW_ATE_decimal_float   Encoding = 0x0f\n\tDW_ATE_UTF             Encoding = 0x10\n\tDW_ATE_lo_user         Encoding = 0x80\n\tDW_ATE_hi_user         Encoding = 0xff\n)\n\n// Address represents a machine address.\ntype Address uint64\n\ntype tagDescr struct {\n\ttag dwarf.Tag\n\n\tattr     []dwarf.Attr\n\tform     []Form\n\tchildren bool\n}\n\ntype tagState struct {\n\toff dwarf.Offset\n\ttagDescr\n}\n\n// TagOpen starts a new DIE, call TagClose after adding all attributes and\n// children elements.\nfunc (b *Builder) TagOpen(tag dwarf.Tag, name string) dwarf.Offset {\n\tif len(b.tagStack) > 0 {\n\t\tb.tagStack[len(b.tagStack)-1].children = true\n\t}\n\tts := &tagState{off: dwarf.Offset(b.info.Len())}\n\tts.tag = tag\n\tb.info.WriteByte(0)\n\tb.tagStack = append(b.tagStack, ts)\n\tif name != \"\" {\n\t\tb.Attr(dwarf.AttrName, name)\n\t}\n\n\treturn ts.off\n}\n\n// SetHasChildren sets the current DIE as having children (even if none are added).\nfunc (b *Builder) SetHasChildren() {\n\tif len(b.tagStack) == 0 {\n\t\tpanic(\"NoChildren with no open tags\")\n\t}\n\tb.tagStack[len(b.tagStack)-1].children = true\n}\n\n// TagClose closes the current DIE.\nfunc (b *Builder) TagClose() {\n\tif len(b.tagStack) == 0 {\n\t\tpanic(\"TagClose with no open tags\")\n\t}\n\ttag := b.tagStack[len(b.tagStack)-1]\n\tabbrev := b.abbrevFor(tag.tagDescr)\n\tb.info.Bytes()[tag.off] = abbrev\n\tif tag.children {\n\t\tb.info.WriteByte(0)\n\t}\n\tb.tagStack = b.tagStack[:len(b.tagStack)-1]\n}\n\n// Attr adds an attribute to the current DIE.\nfunc (b *Builder) Attr(attr dwarf.Attr, val any) dwarf.Offset {\n\tif len(b.tagStack) == 0 {\n\t\tpanic(\"Attr with no open tags\")\n\t}\n\toff := dwarf.Offset(b.info.Len())\n\ttag := b.tagStack[len(b.tagStack)-1]\n\tif tag.children {\n\t\tpanic(\"Can't add attributes after adding children\")\n\t}\n\n\ttag.attr = append(tag.attr, attr)\n\n\tswitch x := val.(type) {\n\tcase string:\n\t\ttag.form = append(tag.form, DW_FORM_string)\n\t\tb.info.WriteString(x)\n\t\tb.info.WriteByte(0)\n\tcase uint8:\n\t\ttag.form = append(tag.form, DW_FORM_data1)\n\t\tbinary.Write(&b.info, binary.LittleEndian, x)\n\tcase uint16:\n\t\ttag.form = append(tag.form, DW_FORM_data2)\n\t\tbinary.Write(&b.info, binary.LittleEndian, x)\n\tcase uint64:\n\t\ttag.form = append(tag.form, DW_FORM_data8)\n\t\tbinary.Write(&b.info, binary.LittleEndian, x)\n\tcase Address:\n\t\ttag.form = append(tag.form, DW_FORM_addr)\n\t\tbinary.Write(&b.info, binary.LittleEndian, x)\n\tcase dwarf.Offset:\n\t\ttag.form = append(tag.form, DW_FORM_ref_addr)\n\t\tbinary.Write(&b.info, binary.LittleEndian, x)\n\tcase []byte:\n\t\ttag.form = append(tag.form, DW_FORM_block4)\n\t\tbinary.Write(&b.info, binary.LittleEndian, uint32(len(x)))\n\t\tb.info.Write(x)\n\tcase []LocEntry:\n\t\ttag.form = append(tag.form, DW_FORM_sec_offset)\n\t\tbinary.Write(&b.info, binary.LittleEndian, uint32(b.loc.Len()))\n\n\t\t// base address\n\t\tbinary.Write(&b.loc, binary.LittleEndian, ^uint64(0))\n\t\tbinary.Write(&b.loc, binary.LittleEndian, uint64(0))\n\n\t\tfor _, locentry := range x {\n\t\t\tbinary.Write(&b.loc, binary.LittleEndian, locentry.Lowpc)\n\t\t\tbinary.Write(&b.loc, binary.LittleEndian, locentry.Highpc)\n\t\t\tbinary.Write(&b.loc, binary.LittleEndian, uint16(len(locentry.Loc)))\n\t\t\tb.loc.Write(locentry.Loc)\n\t\t}\n\n\t\t// end of loclist\n\t\tbinary.Write(&b.loc, binary.LittleEndian, uint64(0))\n\t\tbinary.Write(&b.loc, binary.LittleEndian, uint64(0))\n\tdefault:\n\t\tpanic(\"unknown value type\")\n\t}\n\n\treturn off\n}\n\n// PatchOffset writes the offset 'patch' at offset patchedOffset.\nfunc (b *Builder) PatchOffset(patchedOffset, patch dwarf.Offset) {\n\tinfoBytes := b.info.Bytes()\n\tbuf := new(bytes.Buffer)\n\tbinary.Write(buf, binary.LittleEndian, patch)\n\tcopy(infoBytes[patchedOffset:], buf.Bytes())\n}\n\nfunc sameTagDescr(a, b tagDescr) bool {\n\tif a.tag != b.tag {\n\t\treturn false\n\t}\n\tif len(a.attr) != len(b.attr) {\n\t\treturn false\n\t}\n\tif a.children != b.children {\n\t\treturn false\n\t}\n\tfor i := range a.attr {\n\t\tif a.attr[i] != b.attr[i] {\n\t\t\treturn false\n\t\t}\n\t\tif a.form[i] != b.form[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// abbrevFor returns an abbrev for the given entry description. If no abbrev\n// for tag already exist a new one is created.\nfunc (b *Builder) abbrevFor(tag tagDescr) byte {\n\tfor abbrev, descr := range b.abbrevs {\n\t\tif sameTagDescr(descr, tag) {\n\t\t\treturn byte(abbrev + 1)\n\t\t}\n\t}\n\n\tb.abbrevs = append(b.abbrevs, tag)\n\treturn byte(len(b.abbrevs))\n}\n\nfunc (b *Builder) makeAbbrevTable() []byte {\n\tvar abbrev bytes.Buffer\n\n\tfor i := range b.abbrevs {\n\t\tleb128.EncodeUnsigned(&abbrev, uint64(i+1))\n\t\tleb128.EncodeUnsigned(&abbrev, uint64(b.abbrevs[i].tag))\n\t\tif b.abbrevs[i].children {\n\t\t\tabbrev.WriteByte(0x01)\n\t\t} else {\n\t\t\tabbrev.WriteByte(0x00)\n\t\t}\n\t\tfor j := range b.abbrevs[i].attr {\n\t\t\tleb128.EncodeUnsigned(&abbrev, uint64(b.abbrevs[i].attr[j]))\n\t\t\tleb128.EncodeUnsigned(&abbrev, uint64(b.abbrevs[i].form[j]))\n\t\t}\n\t\tleb128.EncodeUnsigned(&abbrev, 0)\n\t\tleb128.EncodeUnsigned(&abbrev, 0)\n\t}\n\n\tleb128.EncodeUnsigned(&abbrev, uint64(0))\n\n\treturn abbrev.Bytes()\n}\n\nfunc (b *Builder) AddCompileUnit(name string, lowPC uint64) dwarf.Offset {\n\tr := b.TagOpen(dwarf.TagCompileUnit, name)\n\tb.Attr(dwarf.AttrLowpc, lowPC)\n\treturn r\n}\n\n// AddSubprogram adds a subprogram declaration to debug_info, must call\n// TagClose after adding all local variables and parameters.\n// Will write an abbrev corresponding to a DW_TAG_subprogram, followed by a\n// DW_AT_lowpc and a DW_AT_highpc.\nfunc (b *Builder) AddSubprogram(fnname string, lowpc, highpc uint64) dwarf.Offset {\n\tr := b.TagOpen(dwarf.TagSubprogram, fnname)\n\tb.Attr(dwarf.AttrLowpc, Address(lowpc))\n\tb.Attr(dwarf.AttrHighpc, Address(highpc))\n\treturn r\n}\n\n// AddVariable adds a new variable entry to debug_info.\n// Will write a DW_TAG_variable, followed by a DW_AT_type and a\n// DW_AT_location.\nfunc (b *Builder) AddVariable(varname string, typ dwarf.Offset, loc any) dwarf.Offset {\n\tr := b.TagOpen(dwarf.TagVariable, varname)\n\tb.Attr(dwarf.AttrType, typ)\n\tb.Attr(dwarf.AttrLocation, loc)\n\tb.TagClose()\n\treturn r\n}\n\n// AddBaseType adds a new base type entry to debug_info.\n// Will write a DW_TAG_base_type, followed by a DW_AT_encoding and a\n// DW_AT_byte_size.\nfunc (b *Builder) AddBaseType(typename string, encoding Encoding, byteSz uint16) dwarf.Offset {\n\tr := b.TagOpen(dwarf.TagBaseType, typename)\n\tb.Attr(dwarf.AttrEncoding, uint16(encoding))\n\tb.Attr(dwarf.AttrByteSize, byteSz)\n\tb.TagClose()\n\treturn r\n}\n\n// AddStructType adds a new structure type to debug_info. Call TagClose to\n// finish adding fields.\n// Will write a DW_TAG_struct_type, followed by a DW_AT_byte_size.\nfunc (b *Builder) AddStructType(typename string, byteSz uint16) dwarf.Offset {\n\tr := b.TagOpen(dwarf.TagStructType, typename)\n\tb.Attr(dwarf.AttrByteSize, byteSz)\n\treturn r\n}\n\n// AddMember adds a new member entry to debug_info.\n// Writes a DW_TAG_member followed by DW_AT_type and DW_AT_data_member_loc.\nfunc (b *Builder) AddMember(fieldname string, typ dwarf.Offset, memberLoc []byte) dwarf.Offset {\n\tr := b.TagOpen(dwarf.TagMember, fieldname)\n\tb.Attr(dwarf.AttrType, typ)\n\tb.Attr(dwarf.AttrDataMemberLoc, memberLoc)\n\tb.TagClose()\n\treturn r\n}\n\n// AddPointerType adds a new pointer type to debug_info.\nfunc (b *Builder) AddPointerType(typename string, typ dwarf.Offset) dwarf.Offset {\n\tr := b.TagOpen(dwarf.TagPointerType, typename)\n\tb.Attr(dwarf.AttrType, typ)\n\tb.Attr(godwarf.AttrGoKind, uint8(22))\n\tb.TagClose()\n\treturn r\n}\n"
  },
  {
    "path": "pkg/dwarf/dwarfbuilder/loc.go",
    "content": "package dwarfbuilder\n\nimport (\n\t\"bytes\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n)\n\n// LocEntry represents one entry of debug_loc.\ntype LocEntry struct {\n\tLowpc  uint64\n\tHighpc uint64\n\tLoc    []byte\n}\n\n// LocationBlock returns a DWARF expression corresponding to the list of\n// arguments.\nfunc LocationBlock(args ...any) []byte {\n\tvar buf bytes.Buffer\n\tfor _, arg := range args {\n\t\tswitch x := arg.(type) {\n\t\tcase op.Opcode:\n\t\t\tbuf.WriteByte(byte(x))\n\t\tcase int:\n\t\t\tleb128.EncodeSigned(&buf, int64(x))\n\t\tcase uint:\n\t\t\tleb128.EncodeUnsigned(&buf, uint64(x))\n\t\tdefault:\n\t\t\tpanic(\"unsupported value type\")\n\t\t}\n\t}\n\treturn buf.Bytes()\n}\n"
  },
  {
    "path": "pkg/dwarf/frame/entries.go",
    "content": "package frame\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"sort\"\n)\n\n// CommonInformationEntry represents a Common Information Entry in\n// the Dwarf .debug_frame section.\ntype CommonInformationEntry struct {\n\tLength                uint32\n\tCIE_id                uint32\n\tVersion               uint8\n\tAugmentation          string\n\tCodeAlignmentFactor   uint64\n\tDataAlignmentFactor   int64\n\tReturnAddressRegister uint64\n\tInitialInstructions   []byte\n\tstaticBase            uint64\n\n\t// eh_frame pointer encoding\n\tptrEncAddr ptrEnc\n}\n\n// FrameDescriptionEntry represents a Frame Descriptor Entry in the\n// Dwarf .debug_frame section.\ntype FrameDescriptionEntry struct {\n\tLength       uint32\n\tCIE          *CommonInformationEntry\n\tInstructions []byte\n\tbegin, size  uint64\n\torder        binary.ByteOrder\n}\n\n// Cover returns whether or not the given address is within the\n// bounds of this frame.\nfunc (fde *FrameDescriptionEntry) Cover(addr uint64) bool {\n\treturn (addr - fde.begin) < fde.size\n}\n\n// Begin returns address of first location for this frame.\nfunc (fde *FrameDescriptionEntry) Begin() uint64 {\n\treturn fde.begin\n}\n\n// End returns address of last location for this frame.\nfunc (fde *FrameDescriptionEntry) End() uint64 {\n\treturn fde.begin + fde.size\n}\n\n// Translate moves the beginning of fde forward by delta.\nfunc (fde *FrameDescriptionEntry) Translate(delta uint64) {\n\tfde.begin += delta\n}\n\n// EstablishFrame set up frame for the given PC.\nfunc (fde *FrameDescriptionEntry) EstablishFrame(pc uint64) (*FrameContext, error) {\n\tfctxt := executeDwarfProgramUntilPC(fde, pc)\n\tif fctxt.err != nil {\n\t\treturn nil, fctxt.err\n\t}\n\treturn fctxt, nil\n}\n\ntype FrameDescriptionEntries []*FrameDescriptionEntry\n\nfunc newFrameIndex() FrameDescriptionEntries {\n\treturn make(FrameDescriptionEntries, 0, 1000)\n}\n\n// ErrNoFDEForPC FDE for PC not found error\ntype ErrNoFDEForPC struct {\n\tPC uint64\n}\n\nfunc (err *ErrNoFDEForPC) Error() string {\n\treturn fmt.Sprintf(\"could not find FDE for PC %#v\", err.PC)\n}\n\n// FDEForPC returns the Frame Description Entry for the given PC.\nfunc (fdes FrameDescriptionEntries) FDEForPC(pc uint64) (*FrameDescriptionEntry, error) {\n\tidx := sort.Search(len(fdes), func(i int) bool {\n\t\treturn fdes[i].Cover(pc) || fdes[i].Begin() >= pc\n\t})\n\tif idx == len(fdes) || !fdes[idx].Cover(pc) {\n\t\treturn nil, &ErrNoFDEForPC{pc}\n\t}\n\treturn fdes[idx], nil\n}\n\n// Append appends otherFDEs to fdes and returns the result.\nfunc (fdes FrameDescriptionEntries) Append(otherFDEs FrameDescriptionEntries) FrameDescriptionEntries {\n\tr := append(fdes, otherFDEs...)\n\tsort.SliceStable(r, func(i, j int) bool {\n\t\treturn r[i].Begin() < r[j].Begin()\n\t})\n\tif len(r) < 2 { // fast path, no duplicates\n\t\treturn r\n\t}\n\n\t// remove duplicates\n\tslow := 1\n\tfor fast := 1; fast < len(r); fast++ {\n\t\tif r[fast].Begin() != r[fast-1].Begin() || r[fast].End() != r[fast-1].End() {\n\t\t\tif slow != fast {\n\t\t\t\tr[slow] = r[fast]\n\t\t\t}\n\t\t\tslow++\n\t\t}\n\t}\n\treturn r[:slow]\n}\n\n// ptrEnc represents a pointer encoding value, used during eh_frame decoding\n// to determine how pointers were encoded.\n// Least significant 4 (0xf) bytes encode the size  as well as its\n// signed-ness,  most significant 4 bytes (0xf0 == ptrEncFlagsMask) are flags\n// describing how the value should be interpreted (absolute, relative...)\n// See https://www.airs.com/blog/archives/460.\ntype ptrEnc uint8\n\nconst (\n\tptrEncAbs    ptrEnc = 0x00 // pointer-sized unsigned integer\n\tptrEncOmit   ptrEnc = 0xff // omitted\n\tptrEncUleb   ptrEnc = 0x01 // ULEB128\n\tptrEncUdata2 ptrEnc = 0x02 // 2 bytes\n\tptrEncUdata4 ptrEnc = 0x03 // 4 bytes\n\tptrEncUdata8 ptrEnc = 0x04 // 8 bytes\n\tptrEncSigned ptrEnc = 0x08 // pointer-sized signed integer\n\tptrEncSleb   ptrEnc = 0x09 // SLEB128\n\tptrEncSdata2 ptrEnc = 0x0a // 2 bytes, signed\n\tptrEncSdata4 ptrEnc = 0x0b // 4 bytes, signed\n\tptrEncSdata8 ptrEnc = 0x0c // 8 bytes, signed\n\n\tptrEncFlagsMask ptrEnc = 0xf0\n\n\tptrEncPCRel    ptrEnc = 0x10 // value is relative to the memory address where it appears\n\tptrEncTextRel  ptrEnc = 0x20 // value is relative to the address of the text section\n\tptrEncDataRel  ptrEnc = 0x30 // value is relative to the address of the data section\n\tptrEncFuncRel  ptrEnc = 0x40 // value is relative to the start of the function\n\tptrEncAligned  ptrEnc = 0x50 // value should be aligned\n\tptrEncIndirect ptrEnc = 0x80 // value is an address where the real value of the pointer is stored\n\n\tptrEncSupportedFlags = ptrEncPCRel\n)\n\n// Supported returns true if this pointer encoding is supported.\nfunc (ptrEnc ptrEnc) Supported() bool {\n\tif ptrEnc != ptrEncOmit {\n\t\tszenc := ptrEnc & 0x0f\n\t\tif ((szenc > ptrEncUdata8) && (szenc < ptrEncSigned)) || (szenc > ptrEncSdata8) {\n\t\t\t// These values aren't defined at the moment\n\t\t\treturn false\n\t\t}\n\t\tif (ptrEnc&ptrEncFlagsMask)&^ptrEncSupportedFlags != 0 {\n\t\t\t// Currently only the PC relative flag is supported\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "pkg/dwarf/frame/entries_test.go",
    "content": "package frame\n\nimport (\n\t\"encoding/binary\"\n\t\"io\"\n\t\"os\"\n\t\"testing\"\n\t\"unsafe\"\n)\n\nfunc ptrSizeByRuntimeArch() int {\n\treturn int(unsafe.Sizeof(uintptr(0)))\n}\n\nfunc TestFDEForPC(t *testing.T) {\n\tt.Parallel()\n\tframes := newFrameIndex()\n\tframes = append(frames,\n\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t&FrameDescriptionEntry{begin: 50, size: 50},\n\t\t&FrameDescriptionEntry{begin: 100, size: 100},\n\t\t&FrameDescriptionEntry{begin: 300, size: 10})\n\n\tfor _, test := range []struct {\n\t\tpc  uint64\n\t\tfde *FrameDescriptionEntry\n\t}{\n\t\t{0, nil},\n\t\t{9, nil},\n\t\t{10, frames[0]},\n\t\t{35, frames[0]},\n\t\t{49, frames[0]},\n\t\t{50, frames[1]},\n\t\t{75, frames[1]},\n\t\t{100, frames[2]},\n\t\t{199, frames[2]},\n\t\t{200, nil},\n\t\t{299, nil},\n\t\t{300, frames[3]},\n\t\t{309, frames[3]},\n\t\t{310, nil},\n\t\t{400, nil},\n\t} {\n\t\tout, err := frames.FDEForPC(test.pc)\n\t\tif test.fde != nil {\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t\tif out != test.fde {\n\t\t\t\tt.Errorf(\"[pc = %#x] got incorrect fde\\noutput:\\t%#v\\nexpected:\\t%#v\", test.pc, out, test.fde)\n\t\t\t}\n\t\t} else {\n\t\t\tif err == nil {\n\t\t\t\tt.Errorf(\"[pc = %#x] expected error got fde %#v\", test.pc, out)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestAppend(t *testing.T) {\n\tt.Parallel()\n\tequal := func(x, y FrameDescriptionEntries) bool {\n\t\tif len(x) != len(y) {\n\t\t\treturn false\n\t\t}\n\t\tfor i := range x {\n\t\t\tif x[i].Begin() != y[i].Begin() || x[i].End() != y[i].End() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}\n\tvar appendTests = []struct {\n\t\tname string\n\t\tf1   FrameDescriptionEntries\n\t\tf2   FrameDescriptionEntries\n\t\twant FrameDescriptionEntries\n\t}{\n\t\t{\n\t\t\tname: \"nil\",\n\t\t\tf1:   nil,\n\t\t\tf2:   nil,\n\t\t\twant: nil,\n\t\t},\n\n\t\t{\n\t\t\tname: \"one\",\n\t\t\tf1: FrameDescriptionEntries{\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t},\n\t\t\tf2: FrameDescriptionEntries{\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t},\n\t\t\twant: FrameDescriptionEntries{\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"1 item\",\n\t\t\tf1: FrameDescriptionEntries{\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t\t&FrameDescriptionEntry{begin: 50, size: 50},\n\t\t\t},\n\t\t\tf2: FrameDescriptionEntries{\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t\t&FrameDescriptionEntry{begin: 50, size: 50},\n\t\t\t},\n\t\t\twant: FrameDescriptionEntries{\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t\t&FrameDescriptionEntry{begin: 50, size: 50},\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"many\",\n\t\t\tf1: FrameDescriptionEntries{\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t\t&FrameDescriptionEntry{begin: 100, size: 100},\n\t\t\t\t&FrameDescriptionEntry{begin: 50, size: 50},\n\t\t\t\t&FrameDescriptionEntry{begin: 50, size: 50},\n\t\t\t\t&FrameDescriptionEntry{begin: 300, size: 10},\n\t\t\t\t&FrameDescriptionEntry{begin: 300, size: 10},\n\t\t\t},\n\t\t\tf2: FrameDescriptionEntries{\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t\t&FrameDescriptionEntry{begin: 100, size: 100},\n\t\t\t\t&FrameDescriptionEntry{begin: 100, size: 100},\n\t\t\t},\n\t\t\twant: FrameDescriptionEntries{\n\t\t\t\t&FrameDescriptionEntry{begin: 10, size: 40},\n\t\t\t\t&FrameDescriptionEntry{begin: 50, size: 50},\n\t\t\t\t&FrameDescriptionEntry{begin: 100, size: 100},\n\t\t\t\t&FrameDescriptionEntry{begin: 300, size: 10},\n\t\t\t},\n\t\t},\n\t}\n\tfor _, test := range appendTests {\n\t\tif got := test.f1.Append(test.f2); !equal(got, test.want) {\n\t\t\tt.Errorf(\"%v.Append(%v) = %v, want %v\", test.f1, test.f2, got, test.want)\n\t\t}\n\t}\n}\n\nfunc BenchmarkFDEForPC(b *testing.B) {\n\tf, err := os.Open(\"testdata/frame\")\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\tdefer f.Close()\n\n\tdata, err := io.ReadAll(f)\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\tfdes, _ := Parse(data, binary.BigEndian, 0, ptrSizeByRuntimeArch(), 0)\n\n\tfor b.Loop() {\n\t\t// bench worst case, exhaustive search\n\t\t_, _ = fdes.FDEForPC(0x455555555)\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/frame/parser.go",
    "content": "// Package frame contains data structures and\n// related functions for parsing and searching\n// through Dwarf .debug_frame data.\npackage frame\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\ntype parsefunc func(*parseContext) parsefunc\n\ntype parseContext struct {\n\tstaticBase uint64\n\n\tbuf         *bytes.Buffer\n\ttotalLen    int\n\tentries     FrameDescriptionEntries\n\tciemap      map[int]*CommonInformationEntry\n\tcommon      *CommonInformationEntry\n\tframe       *FrameDescriptionEntry\n\tlength      uint32\n\tptrSize     int\n\tehFrameAddr uint64\n\terr         error\n}\n\n// Parse takes in data (a byte slice) and returns FrameDescriptionEntries,\n// which is a slice of FrameDescriptionEntry. Each FrameDescriptionEntry\n// has a pointer to CommonInformationEntry.\n// If ehFrameAddr is not zero the .eh_frame format will be used, a minor variant of DWARF described at https://www.airs.com/blog/archives/460.\n// The value of ehFrameAddr will be used as the address at which eh_frame will be mapped into memory\nfunc Parse(data []byte, order binary.ByteOrder, staticBase uint64, ptrSize int, ehFrameAddr uint64) (FrameDescriptionEntries, error) {\n\tvar (\n\t\tbuf  = bytes.NewBuffer(data)\n\t\tpctx = &parseContext{buf: buf, totalLen: len(data), entries: newFrameIndex(), staticBase: staticBase, ptrSize: ptrSize, ehFrameAddr: ehFrameAddr, ciemap: map[int]*CommonInformationEntry{}}\n\t)\n\n\tfor fn := parselength; buf.Len() != 0; {\n\t\tfn = fn(pctx)\n\t\tif pctx.err != nil {\n\t\t\treturn nil, pctx.err\n\t\t}\n\t}\n\n\tfor i := range pctx.entries {\n\t\tpctx.entries[i].order = order\n\t}\n\n\treturn pctx.entries, nil\n}\n\nfunc (ctx *parseContext) parsingEHFrame() bool {\n\treturn ctx.ehFrameAddr > 0\n}\n\nfunc (ctx *parseContext) cieEntry(cieid uint32) bool {\n\tif ctx.parsingEHFrame() {\n\t\treturn cieid == 0x00\n\t}\n\treturn cieid == 0xffffffff\n}\n\nfunc (ctx *parseContext) offset() int {\n\treturn ctx.totalLen - ctx.buf.Len()\n}\n\nfunc parselength(ctx *parseContext) parsefunc {\n\tstart := ctx.offset()\n\tbinary.Read(ctx.buf, binary.LittleEndian, &ctx.length) //TODO(aarzilli): this does not support 64bit DWARF\n\n\tif ctx.length == 0 {\n\t\t// ZERO terminator\n\t\treturn parselength\n\t}\n\n\tvar cieid uint32\n\tbinary.Read(ctx.buf, binary.LittleEndian, &cieid)\n\n\tctx.length -= 4 // take off the length of the CIE id / CIE pointer.\n\n\tif ctx.cieEntry(cieid) {\n\t\tctx.common = &CommonInformationEntry{Length: ctx.length, staticBase: ctx.staticBase, CIE_id: cieid}\n\t\tctx.ciemap[start] = ctx.common\n\t\treturn parseCIE\n\t}\n\n\tif ctx.ehFrameAddr > 0 {\n\t\tcieid = uint32(start - int(cieid) + 4)\n\t}\n\n\tcommon := ctx.ciemap[int(cieid)]\n\n\tif common == nil {\n\t\tctx.err = fmt.Errorf(\"unknown CIE_id %#x at %#x\", cieid, start)\n\t}\n\n\tctx.frame = &FrameDescriptionEntry{Length: ctx.length, CIE: common}\n\treturn parseFDE\n}\n\nfunc parseFDE(ctx *parseContext) parsefunc {\n\tstartOff := ctx.offset()\n\tr := ctx.buf.Next(int(ctx.length))\n\n\treader := bytes.NewReader(r)\n\tnum := ctx.readEncodedPtr(addrSum(ctx.ehFrameAddr+uint64(startOff), reader), reader, ctx.frame.CIE.ptrEncAddr)\n\tctx.frame.begin = num + ctx.staticBase\n\n\t// For the size field in .eh_frame only the size encoding portion of the\n\t// address pointer encoding is considered.\n\t// See decode_frame_entry_1 in gdb/dwarf2-frame.c.\n\t// For .debug_frame ptrEncAddr is always ptrEncAbs and never has flags.\n\tsizePtrEnc := ctx.frame.CIE.ptrEncAddr & 0x0f\n\tctx.frame.size = ctx.readEncodedPtr(0, reader, sizePtrEnc)\n\n\t// Insert into the tree after setting address range begin\n\t// otherwise compares won't work.\n\tctx.entries = append(ctx.entries, ctx.frame)\n\n\tif ctx.parsingEHFrame() && len(ctx.frame.CIE.Augmentation) > 0 {\n\t\t// If we are parsing a .eh_frame and we saw an augmentation string then we\n\t\t// need to read the augmentation data, which are encoded as a ULEB128\n\t\t// size followed by 'size' bytes.\n\t\tn, _ := leb128.DecodeUnsigned(reader)\n\t\treader.Seek(int64(n), io.SeekCurrent)\n\t}\n\n\t// The rest of this entry consists of the instructions\n\t// so we can just grab all of the data from the buffer\n\t// cursor to length.\n\n\toff, _ := reader.Seek(0, io.SeekCurrent)\n\tctx.frame.Instructions = r[off:]\n\tctx.length = 0\n\n\treturn parselength\n}\n\nfunc addrSum(base uint64, buf *bytes.Reader) uint64 {\n\tn, _ := buf.Seek(0, io.SeekCurrent)\n\treturn base + uint64(n)\n}\n\nfunc parseCIE(ctx *parseContext) parsefunc {\n\tdata := ctx.buf.Next(int(ctx.length))\n\tbuf := bytes.NewBuffer(data)\n\t// parse version\n\tctx.common.Version, _ = buf.ReadByte()\n\n\t// parse augmentation\n\tctx.common.Augmentation, _ = dwarf.ReadString(buf)\n\n\tif ctx.parsingEHFrame() {\n\t\tif ctx.common.Augmentation == \"eh\" {\n\t\t\tctx.err = fmt.Errorf(\"unsupported 'eh' augmentation at %#x\", ctx.offset())\n\t\t}\n\t\tif len(ctx.common.Augmentation) > 0 && ctx.common.Augmentation[0] != 'z' {\n\t\t\tctx.err = fmt.Errorf(\"unsupported augmentation at %#x (does not start with 'z')\", ctx.offset())\n\t\t}\n\t}\n\n\t// parse code alignment factor\n\tctx.common.CodeAlignmentFactor, _ = leb128.DecodeUnsigned(buf)\n\n\t// parse data alignment factor\n\tctx.common.DataAlignmentFactor, _ = leb128.DecodeSigned(buf)\n\n\t// parse return address register\n\tif ctx.parsingEHFrame() && ctx.common.Version == 1 {\n\t\tb, _ := buf.ReadByte()\n\t\tctx.common.ReturnAddressRegister = uint64(b)\n\t} else {\n\t\tctx.common.ReturnAddressRegister, _ = leb128.DecodeUnsigned(buf)\n\t}\n\n\tctx.common.ptrEncAddr = ptrEncAbs\n\n\tif ctx.parsingEHFrame() && len(ctx.common.Augmentation) > 0 {\n\t\t_, _ = leb128.DecodeUnsigned(buf) // augmentation data length\n\t\tfor i := 1; i < len(ctx.common.Augmentation); i++ {\n\t\t\tswitch ctx.common.Augmentation[i] {\n\t\t\tcase 'L':\n\t\t\t\t_, _ = buf.ReadByte() // LSDA pointer encoding, we don't support this.\n\t\t\tcase 'R':\n\t\t\t\t// Pointer encoding, describes how begin and size fields of FDEs are encoded.\n\t\t\t\tb, _ := buf.ReadByte()\n\t\t\t\tctx.common.ptrEncAddr = ptrEnc(b)\n\t\t\t\tif !ctx.common.ptrEncAddr.Supported() {\n\t\t\t\t\tctx.err = fmt.Errorf(\"pointer encoding not supported %#x at %#x\", ctx.common.ptrEncAddr, ctx.offset())\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\tcase 'S':\n\t\t\t\t// Signal handler invocation frame, we don't support this but there is no associated data to read.\n\t\t\tcase 'P':\n\t\t\t\t// Personality function encoded as a pointer encoding byte followed by\n\t\t\t\t// the pointer to the personality function encoded as specified by the\n\t\t\t\t// pointer encoding.\n\t\t\t\t// We don't support this but have to read it anyway.\n\t\t\t\tb, _ := buf.ReadByte()\n\t\t\t\te := ptrEnc(b) &^ ptrEncIndirect\n\t\t\t\tif !e.Supported() {\n\t\t\t\t\tctx.err = fmt.Errorf(\"pointer encoding not supported %#x at %#x\", e, ctx.offset())\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\tctx.readEncodedPtr(0, buf, e)\n\t\t\tdefault:\n\t\t\t\tctx.err = fmt.Errorf(\"unsupported augmentation character %c at %#x\", ctx.common.Augmentation[i], ctx.offset())\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\n\t// parse initial instructions\n\t// The rest of this entry consists of the instructions\n\t// so we can just grab all of the data from the buffer\n\t// cursor to length.\n\tctx.common.InitialInstructions = buf.Bytes() //ctx.buf.Next(int(ctx.length))\n\tctx.length = 0\n\n\treturn parselength\n}\n\n// readEncodedPtr reads a pointer from buf encoded as specified by ptrEnc.\n// This function is used to read pointers from a .eh_frame section, when\n// used to parse a .debug_frame section ptrEnc will always be ptrEncAbs.\n// The parameter addr is the address that the current byte of 'buf' will be\n// mapped to when the executable file containing the eh_frame section being\n// parse is loaded in memory.\nfunc (ctx *parseContext) readEncodedPtr(addr uint64, buf leb128.Reader, ptrEnc ptrEnc) uint64 {\n\tif ptrEnc == ptrEncOmit {\n\t\treturn 0\n\t}\n\n\tvar ptr uint64\n\n\tswitch ptrEnc & 0xf {\n\tcase ptrEncAbs, ptrEncSigned:\n\t\tptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, ctx.ptrSize)\n\tcase ptrEncUleb:\n\t\tptr, _ = leb128.DecodeUnsigned(buf)\n\tcase ptrEncUdata2:\n\t\tptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 2)\n\tcase ptrEncSdata2:\n\t\tptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 2)\n\t\tptr = uint64(int16(ptr))\n\tcase ptrEncUdata4:\n\t\tptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 4)\n\tcase ptrEncSdata4:\n\t\tptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 4)\n\t\tptr = uint64(int32(ptr))\n\tcase ptrEncUdata8, ptrEncSdata8:\n\t\tptr, _ = dwarf.ReadUintRaw(buf, binary.LittleEndian, 8)\n\tcase ptrEncSleb:\n\t\tn, _ := leb128.DecodeSigned(buf)\n\t\tptr = uint64(n)\n\t}\n\n\tif ptrEnc&0xf0 == ptrEncPCRel {\n\t\tptr += addr\n\t}\n\n\treturn ptr\n}\n\n// DwarfEndian determines the endianness of the DWARF by using the version number field in the debug_info section\n// Trick borrowed from \"debug/dwarf\".New()\nfunc DwarfEndian(infoSec []byte) binary.ByteOrder {\n\tif len(infoSec) < 6 {\n\t\treturn binary.BigEndian\n\t}\n\tx, y := infoSec[4], infoSec[5]\n\tswitch {\n\tcase x == 0 && y == 0:\n\t\treturn binary.BigEndian\n\tcase x == 0:\n\t\treturn binary.BigEndian\n\tcase y == 0:\n\t\treturn binary.LittleEndian\n\tdefault:\n\t\treturn binary.BigEndian\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/frame/parser_test.go",
    "content": "package frame\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"io\"\n\t\"os\"\n\t\"testing\"\n)\n\nfunc TestParseCIE(t *testing.T) {\n\tt.Parallel()\n\tctx := &parseContext{\n\t\tbuf:    bytes.NewBuffer([]byte{3, 0, 1, 124, 16, 12, 7, 8, 5, 16, 2, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 16, 64, 0, 0, 0, 0, 0}),\n\t\tcommon: &CommonInformationEntry{Length: 12},\n\t\tlength: 12,\n\t}\n\tctx.totalLen = ctx.buf.Len()\n\t_ = parseCIE(ctx)\n\n\tcommon := ctx.common\n\n\tif common.Version != 3 {\n\t\tt.Fatalf(\"Expected Version 3, but get %d\", common.Version)\n\t}\n\tif common.Augmentation != \"\" {\n\t\tt.Fatalf(\"Expected Augmentation \\\"\\\", but get %s\", common.Augmentation)\n\t}\n\tif common.CodeAlignmentFactor != 1 {\n\t\tt.Fatalf(\"Expected CodeAlignmentFactor 1, but get %d\", common.CodeAlignmentFactor)\n\t}\n\tif common.DataAlignmentFactor != -4 {\n\t\tt.Fatalf(\"Expected DataAlignmentFactor -4, but get %d\", common.DataAlignmentFactor)\n\t}\n\tif common.ReturnAddressRegister != 16 {\n\t\tt.Fatalf(\"Expected ReturnAddressRegister 16, but get %d\", common.ReturnAddressRegister)\n\t}\n\tinitialInstructions := []byte{12, 7, 8, 5, 16, 2, 0}\n\tif !bytes.Equal(common.InitialInstructions, initialInstructions) {\n\t\tt.Fatalf(\"Expected InitialInstructions %v, but get %v\", initialInstructions, common.InitialInstructions)\n\t}\n}\n\nfunc BenchmarkParse(b *testing.B) {\n\tf, err := os.Open(\"testdata/frame\")\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\tdefer f.Close()\n\n\tdata, err := io.ReadAll(f)\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\n\tfor b.Loop() {\n\t\tParse(data, binary.BigEndian, 0, ptrSizeByRuntimeArch(), 0)\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/frame/table.go",
    "content": "package frame\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"maps\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\n// DWRule wrapper of rule defined for register values.\ntype DWRule struct {\n\tRule       Rule\n\tOffset     int64\n\tReg        uint64\n\tExpression []byte\n}\n\n// FrameContext wrapper of FDE context\ntype FrameContext struct {\n\tloc             uint64\n\torder           binary.ByteOrder\n\taddress         uint64\n\tCFA             DWRule\n\tRegs            map[uint64]DWRule\n\tinitialRegs     map[uint64]DWRule\n\tbuf             *bytes.Buffer\n\tcie             *CommonInformationEntry\n\tRetAddrReg      uint64\n\tcodeAlignment   uint64\n\tdataAlignment   int64\n\trememberedState *stateStack\n\terr             error\n}\n\ntype rowState struct {\n\tcfa  DWRule\n\tregs map[uint64]DWRule\n}\n\n// stateStack is a stack where `DW_CFA_remember_state` pushes\n// its CFA and registers state and `DW_CFA_restore_state`\n// pops them.\ntype stateStack struct {\n\titems []rowState\n}\n\nfunc newStateStack() *stateStack {\n\treturn &stateStack{\n\t\titems: make([]rowState, 0),\n\t}\n}\n\nfunc (stack *stateStack) push(state rowState) {\n\tstack.items = append(stack.items, state)\n}\n\nfunc (stack *stateStack) pop() rowState {\n\trestored := stack.items[len(stack.items)-1]\n\tstack.items = stack.items[0 : len(stack.items)-1]\n\treturn restored\n}\n\n// Instructions used to recreate the table from the .debug_frame data.\nconst (\n\tDW_CFA_nop                = 0x0        // No ops\n\tDW_CFA_set_loc            = 0x01       // op1: address\n\tDW_CFA_advance_loc1       = iota       // op1: 1-bytes delta\n\tDW_CFA_advance_loc2                    // op1: 2-byte delta\n\tDW_CFA_advance_loc4                    // op1: 4-byte delta\n\tDW_CFA_offset_extended                 // op1: ULEB128 register, op2: ULEB128 offset\n\tDW_CFA_restore_extended                // op1: ULEB128 register\n\tDW_CFA_undefined                       // op1: ULEB128 register\n\tDW_CFA_same_value                      // op1: ULEB128 register\n\tDW_CFA_register                        // op1: ULEB128 register, op2: ULEB128 register\n\tDW_CFA_remember_state                  // No ops\n\tDW_CFA_restore_state                   // No ops\n\tDW_CFA_def_cfa                         // op1: ULEB128 register, op2: ULEB128 offset\n\tDW_CFA_def_cfa_register                // op1: ULEB128 register\n\tDW_CFA_def_cfa_offset                  // op1: ULEB128 offset\n\tDW_CFA_def_cfa_expression              // op1: BLOCK\n\tDW_CFA_expression                      // op1: ULEB128 register, op2: BLOCK\n\tDW_CFA_offset_extended_sf              // op1: ULEB128 register, op2: SLEB128 BLOCK\n\tDW_CFA_def_cfa_sf                      // op1: ULEB128 register, op2: SLEB128 offset\n\tDW_CFA_def_cfa_offset_sf               // op1: SLEB128 offset\n\tDW_CFA_val_offset                      // op1: ULEB128, op2: ULEB128\n\tDW_CFA_val_offset_sf                   // op1: ULEB128, op2: SLEB128\n\tDW_CFA_val_expression                  // op1: ULEB128, op2: BLOCK\n\tDW_CFA_lo_user            = 0x1c       // op1: BLOCK\n\tDW_CFA_hi_user            = 0x3f       // op1: ULEB128 register, op2: BLOCK\n\tDW_CFA_advance_loc        = (0x1 << 6) // High 2 bits: 0x1, low 6: delta\n\tDW_CFA_offset             = (0x2 << 6) // High 2 bits: 0x2, low 6: register\n\tDW_CFA_restore            = (0x3 << 6) // High 2 bits: 0x3, low 6: register\n)\n\n// Rule rule defined for register values.\ntype Rule byte\n\nconst (\n\tRuleUndefined Rule = iota\n\tRuleSameVal\n\tRuleOffset\n\tRuleValOffset\n\tRuleRegister\n\tRuleExpression\n\tRuleValExpression\n\tRuleArchitectural\n\tRuleCFA          // Value is rule.Reg + rule.Offset\n\tRuleFramePointer // Value is stored at address rule.Reg + rule.Offset, but only if it's less than the current CFA, otherwise same value\n)\n\nconst low_6_offset = 0x3f\n\ntype instruction func(frame *FrameContext)\n\n// // Mapping from DWARF opcode to function.\nvar fnlookup = map[byte]instruction{\n\tDW_CFA_advance_loc:        advanceloc,\n\tDW_CFA_offset:             offset,\n\tDW_CFA_restore:            restore,\n\tDW_CFA_set_loc:            setloc,\n\tDW_CFA_advance_loc1:       advanceloc1,\n\tDW_CFA_advance_loc2:       advanceloc2,\n\tDW_CFA_advance_loc4:       advanceloc4,\n\tDW_CFA_offset_extended:    offsetextended,\n\tDW_CFA_restore_extended:   restoreextended,\n\tDW_CFA_undefined:          undefined,\n\tDW_CFA_same_value:         samevalue,\n\tDW_CFA_register:           register,\n\tDW_CFA_remember_state:     rememberstate,\n\tDW_CFA_restore_state:      restorestate,\n\tDW_CFA_def_cfa:            defcfa,\n\tDW_CFA_def_cfa_register:   defcfaregister,\n\tDW_CFA_def_cfa_offset:     defcfaoffset,\n\tDW_CFA_def_cfa_expression: defcfaexpression,\n\tDW_CFA_expression:         expression,\n\tDW_CFA_offset_extended_sf: offsetextendedsf,\n\tDW_CFA_def_cfa_sf:         defcfasf,\n\tDW_CFA_def_cfa_offset_sf:  defcfaoffsetsf,\n\tDW_CFA_val_offset:         valoffset,\n\tDW_CFA_val_offset_sf:      valoffsetsf,\n\tDW_CFA_val_expression:     valexpression,\n\tDW_CFA_lo_user:            louser,\n\tDW_CFA_hi_user:            hiuser,\n}\n\nfunc executeCIEInstructions(cie *CommonInformationEntry) *FrameContext {\n\tinitialInstructions := make([]byte, len(cie.InitialInstructions))\n\tcopy(initialInstructions, cie.InitialInstructions)\n\tframe := &FrameContext{\n\t\tcie:             cie,\n\t\tRegs:            make(map[uint64]DWRule),\n\t\tRetAddrReg:      cie.ReturnAddressRegister,\n\t\tinitialRegs:     make(map[uint64]DWRule),\n\t\tcodeAlignment:   cie.CodeAlignmentFactor,\n\t\tdataAlignment:   cie.DataAlignmentFactor,\n\t\tbuf:             bytes.NewBuffer(initialInstructions),\n\t\trememberedState: newStateStack(),\n\t}\n\n\tframe.executeDwarfProgram()\n\treturn frame\n}\n\n// Unwind the stack to find the return address register.\nfunc executeDwarfProgramUntilPC(fde *FrameDescriptionEntry, pc uint64) *FrameContext {\n\tframe := executeCIEInstructions(fde.CIE)\n\tframe.order = fde.order\n\tframe.loc = fde.Begin()\n\tframe.address = pc\n\tframe.ExecuteUntilPC(fde.Instructions)\n\n\treturn frame\n}\n\nfunc (frame *FrameContext) executeDwarfProgram() {\n\tfor frame.buf.Len() > 0 {\n\t\texecuteDwarfInstruction(frame)\n\t}\n}\n\n// ExecuteUntilPC execute dwarf instructions.\nfunc (frame *FrameContext) ExecuteUntilPC(instructions []byte) error {\n\tframe.buf.Truncate(0)\n\tframe.buf.Write(instructions)\n\n\t// We only need to execute the instructions until\n\t// ctx.loc > ctx.address (which is the address we\n\t// are currently at in the traced process).\n\tfor frame.address >= frame.loc && frame.buf.Len() > 0 {\n\t\texecuteDwarfInstruction(frame)\n\t}\n\treturn frame.err\n}\n\nfunc executeDwarfInstruction(frame *FrameContext) {\n\tif frame.err != nil {\n\t\treturn\n\t}\n\tinstruction, err := frame.buf.ReadByte()\n\tif err != nil {\n\t\tpanic(\"Could not read from instruction buffer\")\n\t}\n\n\tif instruction == DW_CFA_nop {\n\t\treturn\n\t}\n\n\tfn := lookupFunc(instruction, frame.buf)\n\n\tif fn == nil {\n\t\tframe.err = fmt.Errorf(\"encountered an unexpected DWARF CFA opcode: %#v\", instruction)\n\t\treturn\n\t}\n\n\tfn(frame)\n}\n\nfunc lookupFunc(instruction byte, buf *bytes.Buffer) instruction {\n\tconst high_2_bits = 0xc0\n\tvar restore bool\n\n\t// Special case the 3 opcodes that have their argument encoded in the opcode itself.\n\tswitch instruction & high_2_bits {\n\tcase DW_CFA_advance_loc:\n\t\tinstruction = DW_CFA_advance_loc\n\t\trestore = true\n\n\tcase DW_CFA_offset:\n\t\tinstruction = DW_CFA_offset\n\t\trestore = true\n\n\tcase DW_CFA_restore:\n\t\tinstruction = DW_CFA_restore\n\t\trestore = true\n\t}\n\n\tif restore {\n\t\t// Restore the last byte as it actually contains the argument for the opcode.\n\t\terr := buf.UnreadByte()\n\t\tif err != nil {\n\t\t\tpanic(\"Could not unread byte\")\n\t\t}\n\t}\n\n\treturn fnlookup[instruction]\n}\n\nfunc advanceloc(frame *FrameContext) {\n\tb, err := frame.buf.ReadByte()\n\tif err != nil {\n\t\tpanic(\"Could not read byte\")\n\t}\n\n\tdelta := b & low_6_offset\n\tframe.loc += uint64(delta) * frame.codeAlignment\n}\n\nfunc advanceloc1(frame *FrameContext) {\n\tdelta, err := frame.buf.ReadByte()\n\tif err != nil {\n\t\tpanic(\"Could not read byte\")\n\t}\n\n\tframe.loc += uint64(delta) * frame.codeAlignment\n}\n\nfunc advanceloc2(frame *FrameContext) {\n\tvar delta uint16\n\tbinary.Read(frame.buf, frame.order, &delta)\n\n\tframe.loc += uint64(delta) * frame.codeAlignment\n}\n\nfunc advanceloc4(frame *FrameContext) {\n\tvar delta uint32\n\tbinary.Read(frame.buf, frame.order, &delta)\n\n\tframe.loc += uint64(delta) * frame.codeAlignment\n}\n\nfunc offset(frame *FrameContext) {\n\tb, err := frame.buf.ReadByte()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tvar (\n\t\treg       = b & low_6_offset\n\t\toffset, _ = leb128.DecodeUnsigned(frame.buf)\n\t)\n\n\tframe.Regs[uint64(reg)] = DWRule{Offset: int64(offset) * frame.dataAlignment, Rule: RuleOffset}\n}\n\nfunc restore(frame *FrameContext) {\n\tb, err := frame.buf.ReadByte()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\treg := uint64(b & low_6_offset)\n\toldrule, ok := frame.initialRegs[reg]\n\tif ok {\n\t\tframe.Regs[reg] = DWRule{Offset: oldrule.Offset, Rule: RuleOffset}\n\t} else {\n\t\tframe.Regs[reg] = DWRule{Rule: RuleUndefined}\n\t}\n}\n\nfunc setloc(frame *FrameContext) {\n\tvar loc uint64\n\tbinary.Read(frame.buf, frame.order, &loc)\n\n\tframe.loc = loc + frame.cie.staticBase\n}\n\nfunc offsetextended(frame *FrameContext) {\n\tvar (\n\t\treg, _    = leb128.DecodeUnsigned(frame.buf)\n\t\toffset, _ = leb128.DecodeUnsigned(frame.buf)\n\t)\n\n\tframe.Regs[reg] = DWRule{Offset: int64(offset) * frame.dataAlignment, Rule: RuleOffset}\n}\n\nfunc undefined(frame *FrameContext) {\n\treg, _ := leb128.DecodeUnsigned(frame.buf)\n\tframe.Regs[reg] = DWRule{Rule: RuleUndefined}\n}\n\nfunc samevalue(frame *FrameContext) {\n\treg, _ := leb128.DecodeUnsigned(frame.buf)\n\tframe.Regs[reg] = DWRule{Rule: RuleSameVal}\n}\n\nfunc register(frame *FrameContext) {\n\treg1, _ := leb128.DecodeUnsigned(frame.buf)\n\treg2, _ := leb128.DecodeUnsigned(frame.buf)\n\tframe.Regs[reg1] = DWRule{Reg: reg2, Rule: RuleRegister}\n}\n\nfunc rememberstate(frame *FrameContext) {\n\tclonedRegs := maps.Clone(frame.Regs)\n\tframe.rememberedState.push(rowState{cfa: frame.CFA, regs: clonedRegs})\n}\n\nfunc restorestate(frame *FrameContext) {\n\trestored := frame.rememberedState.pop()\n\n\tframe.CFA = restored.cfa\n\tframe.Regs = restored.regs\n}\n\nfunc restoreextended(frame *FrameContext) {\n\treg, _ := leb128.DecodeUnsigned(frame.buf)\n\n\toldrule, ok := frame.initialRegs[reg]\n\tif ok {\n\t\tframe.Regs[reg] = DWRule{Offset: oldrule.Offset, Rule: RuleOffset}\n\t} else {\n\t\tframe.Regs[reg] = DWRule{Rule: RuleUndefined}\n\t}\n}\n\nfunc defcfa(frame *FrameContext) {\n\treg, _ := leb128.DecodeUnsigned(frame.buf)\n\toffset, _ := leb128.DecodeUnsigned(frame.buf)\n\n\tframe.CFA.Rule = RuleCFA\n\tframe.CFA.Reg = reg\n\tframe.CFA.Offset = int64(offset)\n}\n\nfunc defcfaregister(frame *FrameContext) {\n\treg, _ := leb128.DecodeUnsigned(frame.buf)\n\tframe.CFA.Reg = reg\n}\n\nfunc defcfaoffset(frame *FrameContext) {\n\toffset, _ := leb128.DecodeUnsigned(frame.buf)\n\tframe.CFA.Offset = int64(offset)\n}\n\nfunc defcfasf(frame *FrameContext) {\n\treg, _ := leb128.DecodeUnsigned(frame.buf)\n\toffset, _ := leb128.DecodeSigned(frame.buf)\n\n\tframe.CFA.Rule = RuleCFA\n\tframe.CFA.Reg = reg\n\tframe.CFA.Offset = offset * frame.dataAlignment\n}\n\nfunc defcfaoffsetsf(frame *FrameContext) {\n\toffset, _ := leb128.DecodeSigned(frame.buf)\n\toffset *= frame.dataAlignment\n\tframe.CFA.Offset = offset\n}\n\nfunc defcfaexpression(frame *FrameContext) {\n\tvar (\n\t\tl, _ = leb128.DecodeUnsigned(frame.buf)\n\t\texpr = frame.buf.Next(int(l))\n\t)\n\n\tframe.CFA.Expression = expr\n\tframe.CFA.Rule = RuleExpression\n}\n\nfunc expression(frame *FrameContext) {\n\tvar (\n\t\treg, _ = leb128.DecodeUnsigned(frame.buf)\n\t\tl, _   = leb128.DecodeUnsigned(frame.buf)\n\t\texpr   = frame.buf.Next(int(l))\n\t)\n\n\tframe.Regs[reg] = DWRule{Rule: RuleExpression, Expression: expr}\n}\n\nfunc offsetextendedsf(frame *FrameContext) {\n\tvar (\n\t\treg, _    = leb128.DecodeUnsigned(frame.buf)\n\t\toffset, _ = leb128.DecodeSigned(frame.buf)\n\t)\n\n\tframe.Regs[reg] = DWRule{Offset: offset * frame.dataAlignment, Rule: RuleOffset}\n}\n\nfunc valoffset(frame *FrameContext) {\n\tvar (\n\t\treg, _    = leb128.DecodeUnsigned(frame.buf)\n\t\toffset, _ = leb128.DecodeUnsigned(frame.buf)\n\t)\n\n\tframe.Regs[reg] = DWRule{Offset: int64(offset), Rule: RuleValOffset}\n}\n\nfunc valoffsetsf(frame *FrameContext) {\n\tvar (\n\t\treg, _    = leb128.DecodeUnsigned(frame.buf)\n\t\toffset, _ = leb128.DecodeSigned(frame.buf)\n\t)\n\n\tframe.Regs[reg] = DWRule{Offset: offset * frame.dataAlignment, Rule: RuleValOffset}\n}\n\nfunc valexpression(frame *FrameContext) {\n\tvar (\n\t\treg, _ = leb128.DecodeUnsigned(frame.buf)\n\t\tl, _   = leb128.DecodeUnsigned(frame.buf)\n\t\texpr   = frame.buf.Next(int(l))\n\t)\n\n\tframe.Regs[reg] = DWRule{Rule: RuleValExpression, Expression: expr}\n}\n\nfunc louser(frame *FrameContext) {\n\tframe.buf.Next(1)\n}\n\nfunc hiuser(frame *FrameContext) {\n\tframe.buf.Next(1)\n}\n"
  },
  {
    "path": "pkg/dwarf/godwarf/addr.go",
    "content": "package godwarf\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf\"\n)\n\n// DebugAddrSection represents the debug_addr section of DWARFv5.\n// See DWARFv5 section 7.27 page 241 and following.\ntype DebugAddrSection struct {\n\tbyteOrder binary.ByteOrder\n\tptrSz     int\n\tdata      []byte\n}\n\n// ParseAddr parses the header of a debug_addr section.\nfunc ParseAddr(data []byte) *DebugAddrSection {\n\tif len(data) == 0 {\n\t\treturn nil\n\t}\n\tr := &DebugAddrSection{data: data}\n\t_, dwarf64, _, byteOrder := dwarf.ReadDwarfLengthVersion(data)\n\tr.byteOrder = byteOrder\n\tdata = data[6:]\n\tif dwarf64 {\n\t\tdata = data[8:]\n\t}\n\n\taddrSz := data[0]\n\tsegSelSz := data[1]\n\tr.ptrSz = int(addrSz + segSelSz)\n\n\treturn r\n}\n\n// GetSubsection returns the subsection of debug_addr starting at addrBase\nfunc (addr *DebugAddrSection) GetSubsection(addrBase uint64) *DebugAddr {\n\tif addr == nil {\n\t\treturn nil\n\t}\n\treturn &DebugAddr{DebugAddrSection: addr, addrBase: addrBase}\n}\n\n// DebugAddr represents a subsection of the debug_addr section with a specific base address\ntype DebugAddr struct {\n\t*DebugAddrSection\n\taddrBase uint64\n}\n\n// Get returns the address at index idx starting from addrBase.\nfunc (addr *DebugAddr) Get(idx uint64) (uint64, error) {\n\tif addr == nil || addr.DebugAddrSection == nil {\n\t\treturn 0, errors.New(\"debug_addr section not present\")\n\t}\n\toff := idx*uint64(addr.ptrSz) + addr.addrBase\n\treturn dwarf.ReadUintRaw(bytes.NewReader(addr.data[off:]), addr.byteOrder, addr.ptrSz)\n}\n"
  },
  {
    "path": "pkg/dwarf/godwarf/buf.go",
    "content": "// Copyright 2009 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//lint:file-ignore ST1021 imported file\n\npackage godwarf\n\nimport (\n\t\"debug/dwarf\"\n\t\"fmt\"\n)\n\n// buf is data buffer being decoded.\ntype buf struct {\n\tdwarf  *dwarf.Data\n\tformat dataFormat\n\tname   string\n\toff    dwarf.Offset\n\tdata   []byte\n\tErr    error\n}\n\n// Data format, other than byte order. This affects the handling of\n// certain field formats.\ntype dataFormat interface {\n\t// DWARF version number.  Zero means unknown.\n\tversion() int\n\n\t// 64-bit DWARF format?\n\tdwarf64() (dwarf64 bool, isKnown bool)\n\n\t// Size of an address, in bytes.  Zero means unknown.\n\taddrsize() int\n}\n\n// unknownFormat is a struct for some parts of DWARF that have no data format, e.g., abbrevs.\ntype unknownFormat struct{}\n\nfunc (u unknownFormat) version() int {\n\treturn 0\n}\n\nfunc (u unknownFormat) dwarf64() (bool, bool) {\n\treturn false, false\n}\n\nfunc (u unknownFormat) addrsize() int {\n\treturn 0\n}\n\n// makeBuf creates buf for reading and decoding of DWARF data streams.\nfunc makeBuf(d *dwarf.Data, format dataFormat, name string, off dwarf.Offset, data []byte) buf {\n\treturn buf{d, format, name, off, data, nil}\n}\n\n// Uint8 reads an uint8.\nfunc (b *buf) Uint8() uint8 {\n\tif len(b.data) < 1 {\n\t\tb.error(\"underflow\")\n\t\treturn 0\n\t}\n\tval := b.data[0]\n\tb.data = b.data[1:]\n\tb.off++\n\treturn val\n}\n\n// Varint reads a varint, which is 7 bits per byte, little endian.\n// the 0x80 bit means read another byte.\nfunc (b *buf) Varint() (c uint64, bits uint) {\n\tfor i := 0; i < len(b.data); i++ {\n\t\tbyte := b.data[i]\n\t\tc |= uint64(byte&0x7F) << bits\n\t\tbits += 7\n\t\tif byte&0x80 == 0 {\n\t\t\tb.off += dwarf.Offset(i + 1)\n\t\t\tb.data = b.data[i+1:]\n\t\t\treturn c, bits\n\t\t}\n\t}\n\treturn 0, 0\n}\n\n// Uint is just a varint.\nfunc (b *buf) Uint() uint64 {\n\tx, _ := b.Varint()\n\treturn x\n}\n\n// Int is a sign-extended varint.\nfunc (b *buf) Int() int64 {\n\tux, bits := b.Varint()\n\tx := int64(ux)\n\tif x&(1<<(bits-1)) != 0 {\n\t\tx |= -1 << bits\n\t}\n\treturn x\n}\n\n// AssertEmpty checks that everything has been read from b.\nfunc (b *buf) AssertEmpty() {\n\tif len(b.data) == 0 {\n\t\treturn\n\t}\n\tif len(b.data) > 5 {\n\t\tb.error(fmt.Sprintf(\"unexpected extra data: %x...\", b.data[0:5]))\n\t}\n\tb.error(fmt.Sprintf(\"unexpected extra data: %x\", b.data))\n}\n\nfunc (b *buf) error(s string) {\n\tif b.Err == nil {\n\t\tb.data = nil\n\t\tb.Err = dwarf.DecodeError{Name: b.name, Offset: b.off, Err: s}\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/godwarf/fakes.go",
    "content": "package godwarf\n\nimport (\n\t\"fmt\"\n\t\"math/bits\"\n\t\"reflect\"\n)\n\n// FakeSliceType synthesizes a slice type with the given field type.\nfunc FakeSliceType(fieldType Type) Type {\n\treturn &SliceType{\n\t\tStructType: StructType{\n\t\t\tCommonType: CommonType{\n\t\t\t\tByteSize: 24,\n\t\t\t\tName:     \"\",\n\t\t\t},\n\t\t\tStructName: \"[]\" + fieldType.Common().Name,\n\t\t\tKind:       \"struct\",\n\t\t\tField:      nil,\n\t\t},\n\t\tElemType: fieldType,\n\t}\n}\n\n// FakeBasicType synthesizes a basic type numeric type (int8, uint16,\n// float32, etc)\nfunc FakeBasicType(name string, bitSize int) Type {\n\tbyteSize := bitSize / 8\n\tszr := bits.OnesCount64(uint64(byteSize^(byteSize-1))) - 1 // position of rightmost 1 bit, minus 1\n\n\tbasic := func(kind reflect.Kind) BasicType {\n\t\treturn BasicType{\n\t\t\tCommonType: CommonType{\n\t\t\t\tByteSize:    int64(byteSize),\n\t\t\t\tName:        fmt.Sprintf(\"%s%d\", name, bitSize),\n\t\t\t\tReflectKind: kind,\n\t\t\t},\n\t\t\tBitSize:   int64(bitSize),\n\t\t\tBitOffset: 0,\n\t\t}\n\t}\n\n\tswitch name {\n\tcase \"int\":\n\t\treturn &IntType{BasicType: basic(reflect.Int8 + reflect.Kind(szr))}\n\tcase \"uint\":\n\t\treturn &UintType{BasicType: basic(reflect.Uint8 + reflect.Kind(szr))}\n\tcase \"float\":\n\t\treturn &FloatType{BasicType: basic(reflect.Float32 + reflect.Kind(szr-2))}\n\tcase \"complex\":\n\t\treturn &ComplexType{BasicType: basic(reflect.Complex64 + reflect.Kind(szr-3))}\n\tdefault:\n\t\tpanic(\"unsupported\")\n\t}\n}\n\n// FakePointerType synthesizes a pointer type\nfunc FakePointerType(typ Type, ptrSize int64) *PtrType {\n\ttypename := \"*\" + typ.Common().Name\n\treturn &PtrType{CommonType: CommonType{ByteSize: ptrSize, Name: typename}, Type: typ}\n}\n"
  },
  {
    "path": "pkg/dwarf/godwarf/sections.go",
    "content": "package godwarf\n\nimport (\n\t\"bytes\"\n\t\"compress/zlib\"\n\t\"debug/elf\"\n\t\"debug/macho\"\n\t\"debug/pe\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// GetDebugSectionElf returns the data contents of the specified debug\n// section, decompressing it if it is compressed.\n// For example GetDebugSectionElf(\"line\") will return the contents of\n// .debug_line, if .debug_line doesn't exist it will try to return the\n// decompressed contents of .zdebug_line.\nfunc GetDebugSectionElf(f *elf.File, name string) ([]byte, error) {\n\tsec := f.Section(\".debug_\" + name)\n\tif sec != nil {\n\t\treturn sec.Data()\n\t}\n\tsec = f.Section(\".zdebug_\" + name)\n\tif sec == nil {\n\t\treturn nil, fmt.Errorf(\"could not find .debug_%s section\", name)\n\t}\n\tb, err := sec.Data()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn decompressMaybe(b)\n}\n\n// GetDebugSectionPE returns the data contents of the specified debug\n// section, decompressing it if it is compressed.\n// For example GetDebugSectionPE(\"line\") will return the contents of\n// .debug_line, if .debug_line doesn't exist it will try to return the\n// decompressed contents of .zdebug_line.\nfunc GetDebugSectionPE(f *pe.File, name string) ([]byte, error) {\n\tsec := f.Section(\".debug_\" + name)\n\tif sec != nil {\n\t\treturn peSectionData(sec)\n\t}\n\tsec = f.Section(\".zdebug_\" + name)\n\tif sec == nil {\n\t\treturn nil, fmt.Errorf(\"could not find .debug_%s section\", name)\n\t}\n\tb, err := peSectionData(sec)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn decompressMaybe(b)\n}\n\nfunc peSectionData(sec *pe.Section) ([]byte, error) {\n\tb, err := sec.Data()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif 0 < sec.VirtualSize && sec.VirtualSize < sec.Size {\n\t\tb = b[:sec.VirtualSize]\n\t}\n\treturn b, nil\n}\n\n// GetDebugSectionMacho returns the data contents of the specified debug\n// section, decompressing it if it is compressed.\n// For example GetDebugSectionMacho(\"line\") will return the contents of\n// __debug_line, if __debug_line doesn't exist it will try to return the\n// decompressed contents of __zdebug_line.\nfunc GetDebugSectionMacho(f *macho.File, name string) ([]byte, error) {\n\tsec := f.Section(\"__debug_\" + name)\n\tif sec != nil {\n\t\treturn sec.Data()\n\t}\n\tsec = f.Section(\"__zdebug_\" + name)\n\tif sec == nil {\n\t\treturn nil, fmt.Errorf(\"could not find .debug_%s section\", name)\n\t}\n\tb, err := sec.Data()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn decompressMaybe(b)\n}\n\nfunc decompressMaybe(b []byte) ([]byte, error) {\n\tif len(b) < 12 || string(b[:4]) != \"ZLIB\" {\n\t\t// not compressed\n\t\treturn b, nil\n\t}\n\n\tdlen := binary.BigEndian.Uint64(b[4:12])\n\tdbuf := make([]byte, dlen)\n\tr, err := zlib.NewReader(bytes.NewBuffer(b[12:]))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif _, err := io.ReadFull(r, dbuf); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := r.Close(); err != nil {\n\t\treturn nil, err\n\t}\n\treturn dbuf, nil\n}\n"
  },
  {
    "path": "pkg/dwarf/godwarf/tree.go",
    "content": "package godwarf\n\nimport (\n\t\"debug/dwarf\"\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n)\n\n// Entry represents a debug_info entry.\n// When calling Val, if the entry does not have the specified attribute, the\n// entry specified by DW_AT_abstract_origin will be searched recursively.\ntype Entry interface {\n\tVal(dwarf.Attr) any\n\tAttrField(dwarf.Attr) *dwarf.Field\n}\n\ntype compositeEntry []*dwarf.Entry\n\nfunc (ce compositeEntry) Val(attr dwarf.Attr) any {\n\tif f := ce.AttrField(attr); f != nil {\n\t\treturn f.Val\n\t}\n\treturn nil\n}\n\nfunc (ce compositeEntry) AttrField(a dwarf.Attr) *dwarf.Field {\n\tfor _, e := range ce {\n\t\tif f := e.AttrField(a); f != nil {\n\t\t\treturn f\n\t\t}\n\t}\n\treturn nil\n}\n\n// LoadAbstractOriginAndSpecification loads the entry corresponding to the\n// DW_AT_abstract_origin and/or DW_AT_specification of entry and returns a\n// combination of entry and its abstract origin. If a DIE has both a\n// specification and an abstract origin the specification will be ignored, the\n// DWARF standard is unclear on how this should be handled\nfunc LoadAbstractOriginAndSpecification(entry *dwarf.Entry, aordr *dwarf.Reader) (Entry, dwarf.Offset) {\n\tao, ok := getAbstractOriginOrSpecification(entry)\n\tif !ok || ao == entry.Offset {\n\t\treturn entry, entry.Offset\n\t}\n\n\tr := []*dwarf.Entry{entry}\n\n\tfor {\n\t\taordr.Seek(ao)\n\t\te, _ := aordr.Next()\n\t\tif e == nil {\n\t\t\tbreak\n\t\t}\n\t\tr = append(r, e)\n\n\t\tao, ok = getAbstractOriginOrSpecification(e)\n\t\tif !ok || ao == entry.Offset {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn compositeEntry(r), entry.Offset\n}\n\nfunc getAbstractOriginOrSpecification(e *dwarf.Entry) (dwarf.Offset, bool) {\n\tao, ok := e.Val(dwarf.AttrAbstractOrigin).(dwarf.Offset)\n\tif ok {\n\t\treturn ao, true\n\t}\n\tsp, ok := e.Val(dwarf.AttrSpecification).(dwarf.Offset)\n\tif ok {\n\t\treturn sp, true\n\t}\n\treturn dwarf.Offset(0), false\n}\n\n// Tree represents a tree of dwarf objects.\ntype Tree struct {\n\tEntry\n\ttyp      Type\n\tTag      dwarf.Tag\n\tOffset   dwarf.Offset\n\tRanges   [][2]uint64\n\tChildren []*Tree\n}\n\n// LoadTree returns the tree of DIE rooted at offset 'off'.\n// Abstract origins are automatically loaded, if present.\n// DIE ranges are bubbled up automatically, if the child of a DIE covers a\n// range of addresses that is not covered by its parent LoadTree will fix\n// the parent entry.\nfunc LoadTree(off dwarf.Offset, dw *dwarf.Data, staticBase uint64) (*Tree, error) {\n\tif dw == nil {\n\t\treturn nil, errors.New(\"unable to load DWARF tree: no DWARF information present\")\n\t}\n\trdr := dw.Reader()\n\trdr.Seek(off)\n\n\te, err := rdr.Next()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tr := entryToTreeInternal(e)\n\tr.Children, err = loadTreeChildren(e, rdr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = r.resolveRanges(dw, staticBase)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tr.resolveAbstractAndSpecificationEntries(rdr)\n\n\treturn r, nil\n}\n\n// EntryToTree converts a single entry, without children, to a *Tree object.\nfunc EntryToTree(entry *dwarf.Entry) *Tree {\n\tif entry.Children {\n\t\tpanic(fmt.Sprintf(\"EntryToTree called on entry with children; \"+\n\t\t\t\"LoadTree should have been used instead. entry: %+v\", entry))\n\t}\n\treturn entryToTreeInternal(entry)\n}\n\nfunc entryToTreeInternal(entry *dwarf.Entry) *Tree {\n\treturn &Tree{Entry: entry, Offset: entry.Offset, Tag: entry.Tag}\n}\n\nfunc loadTreeChildren(e *dwarf.Entry, rdr *dwarf.Reader) ([]*Tree, error) {\n\tif !e.Children {\n\t\treturn nil, nil\n\t}\n\tchildren := []*Tree{}\n\tfor {\n\t\te, err := rdr.Next()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif e.Tag == 0 {\n\t\t\tbreak\n\t\t}\n\t\tchild := entryToTreeInternal(e)\n\t\tchild.Children, err = loadTreeChildren(e, rdr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tchildren = append(children, child)\n\t}\n\treturn children, nil\n}\n\nfunc (n *Tree) resolveRanges(dw *dwarf.Data, staticBase uint64) error {\n\tvar err error\n\tn.Ranges, err = dw.Ranges(n.Entry.(*dwarf.Entry))\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor i := range n.Ranges {\n\t\tn.Ranges[i][0] += staticBase\n\t\tn.Ranges[i][1] += staticBase\n\t}\n\tn.Ranges = normalizeRanges(n.Ranges)\n\n\tfor _, child := range n.Children {\n\t\terr := child.resolveRanges(dw, staticBase)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tn.Ranges = fuseRanges(n.Ranges, child.Ranges)\n\t}\n\treturn nil\n}\n\n// normalizeRanges sorts rngs by starting point and fuses overlapping entries.\nfunc normalizeRanges(rngs [][2]uint64) [][2]uint64 {\n\tconst (\n\t\tstart = 0\n\t\tend   = 1\n\t)\n\n\tif len(rngs) == 0 {\n\t\treturn rngs\n\t}\n\n\tsort.Slice(rngs, func(i, j int) bool {\n\t\treturn rngs[i][start] <= rngs[j][start]\n\t})\n\n\t// eliminate invalid entries\n\tout := rngs[:0]\n\tfor i := range rngs {\n\t\tif rngs[i][start] < rngs[i][end] {\n\t\t\tout = append(out, rngs[i])\n\t\t}\n\t}\n\trngs = out\n\n\t// fuse overlapping entries\n\tout = rngs[:1]\n\tfor i := 1; i < len(rngs); i++ {\n\t\tcur := rngs[i]\n\t\tif cur[start] <= out[len(out)-1][end] {\n\t\t\tout[len(out)-1][end] = max(cur[end], out[len(out)-1][end])\n\t\t} else {\n\t\t\tout = append(out, cur)\n\t\t}\n\t}\n\treturn out\n}\n\n// fuseRanges fuses rngs2 into rngs1, it's the equivalent of\n//\n//\tnormalizeRanges(append(rngs1, rngs2))\n//\n// but more efficient.\nfunc fuseRanges(rngs1, rngs2 [][2]uint64) [][2]uint64 {\n\tif rangesContains(rngs1, rngs2) {\n\t\treturn rngs1\n\t}\n\n\treturn normalizeRanges(append(rngs1, rngs2...))\n}\n\n// rangesContains checks that rngs1 is a superset of rngs2.\nfunc rangesContains(rngs1, rngs2 [][2]uint64) bool {\n\ti, j := 0, 0\n\tfor {\n\t\tif i >= len(rngs1) {\n\t\t\treturn false\n\t\t}\n\t\tif j >= len(rngs2) {\n\t\t\treturn true\n\t\t}\n\t\tif rangeContains(rngs1[i], rngs2[j]) {\n\t\t\tj++\n\t\t} else {\n\t\t\ti++\n\t\t}\n\t}\n}\n\n// rangeContains checks that a contains b.\nfunc rangeContains(a, b [2]uint64) bool {\n\treturn a[0] <= b[0] && a[1] >= b[1]\n}\n\nfunc (n *Tree) resolveAbstractAndSpecificationEntries(rdr *dwarf.Reader) {\n\tn.Entry, n.Offset = LoadAbstractOriginAndSpecification(n.Entry.(*dwarf.Entry), rdr)\n\tfor _, child := range n.Children {\n\t\tchild.resolveAbstractAndSpecificationEntries(rdr)\n\t}\n}\n\n// ContainsPC returns true if the ranges of this DIE contains PC.\nfunc (n *Tree) ContainsPC(pc uint64) bool {\n\tfor _, rng := range n.Ranges {\n\t\tif rng[0] > pc {\n\t\t\treturn false\n\t\t}\n\t\tif rng[0] <= pc && pc < rng[1] {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (n *Tree) Type(dw *dwarf.Data, index int, typeCache map[dwarf.Offset]Type) (Type, error) {\n\tif n.typ == nil {\n\t\toffset, ok := n.Val(dwarf.AttrType).(dwarf.Offset)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"malformed variable DIE (offset)\")\n\t\t}\n\n\t\tvar err error\n\t\tn.typ, err = ReadType(dw, index, offset, typeCache)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn n.typ, nil\n}\n"
  },
  {
    "path": "pkg/dwarf/godwarf/tree_test.go",
    "content": "package godwarf\n\nimport (\n\t\"testing\"\n)\n\nfunc makeRanges(v ...uint64) [][2]uint64 {\n\tr := make([][2]uint64, 0, len(v)/2)\n\tfor i := 0; i < len(v); i += 2 {\n\t\tr = append(r, [2]uint64{v[i], v[i+1]})\n\t}\n\treturn r\n}\n\nfunc assertRanges(t *testing.T, out, tgt [][2]uint64) {\n\tif len(out) != len(tgt) {\n\t\tt.Errorf(\"\\nexpected:\\t%v\\ngot:\\t\\t%v\", tgt, out)\n\t}\n\tfor i := range out {\n\t\tif out[i] != tgt[i] {\n\t\t\tt.Errorf(\"\\nexpected:\\t%v\\ngot:\\t\\t%v\", tgt, out)\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc TestNormalizeRanges(t *testing.T) {\n\tt.Parallel()\n\tmr := makeRanges\n\t//assertRanges(t, normalizeRanges(mr(105, 103, 90, 95, 25, 20, 20, 23)), mr(20, 23, 90, 95))\n\tassertRanges(t, normalizeRanges(mr(10, 12, 12, 15)), mr(10, 15))\n\tassertRanges(t, normalizeRanges(mr(12, 15, 10, 12)), mr(10, 15))\n\tassertRanges(t, normalizeRanges(mr(4910012, 4910013, 4910013, 4910098, 4910124, 4910127)), mr(4910012, 4910098, 4910124, 4910127))\n}\n\nfunc TestRangeContains(t *testing.T) {\n\tt.Parallel()\n\tmr := func(start, end uint64) [2]uint64 {\n\t\treturn [2]uint64{start, end}\n\t}\n\ttcs := []struct {\n\t\ta, b [2]uint64\n\t\ttgt  bool\n\t}{\n\t\t{mr(1, 10), mr(1, 11), false},\n\t\t{mr(1, 10), mr(1, 1), true},\n\t\t{mr(1, 10), mr(10, 11), false},\n\t\t{mr(1, 10), mr(1, 10), true},\n\t\t{mr(1, 10), mr(2, 5), true},\n\t}\n\n\tfor _, tc := range tcs {\n\t\tif rangeContains(tc.a, tc.b) != tc.tgt {\n\t\t\tif tc.tgt {\n\t\t\t\tt.Errorf(\"range %v does not contain %v (but should)\", tc.a, tc.b)\n\t\t\t} else {\n\t\t\t\tt.Errorf(\"range %v does contain %v (but shouldn't)\", tc.a, tc.b)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestRangesContains(t *testing.T) {\n\tt.Parallel()\n\tmr := makeRanges\n\ttcs := []struct {\n\t\trngs1, rngs2 [][2]uint64\n\t\ttgt          bool\n\t}{\n\t\t{mr(1, 10), mr(1, 11), false},\n\t\t{mr(1, 10), mr(1, 1), true},\n\t\t{mr(1, 10), mr(10, 11), false},\n\t\t{mr(1, 10), mr(1, 10), true},\n\t\t{mr(1, 10), mr(2, 5), true},\n\n\t\t{mr(1, 10, 20, 30), mr(1, 11), false},\n\t\t{mr(1, 10, 20, 30), mr(1, 1, 20, 22), true},\n\t\t{mr(1, 10, 20, 30), mr(30, 31), false},\n\t\t{mr(1, 10, 20, 30), mr(15, 17), false},\n\t\t{mr(1, 10, 20, 30), mr(1, 5, 6, 9, 21, 24), true},\n\t\t{mr(1, 10, 20, 30), mr(0, 1), false},\n\t}\n\n\tfor _, tc := range tcs {\n\t\tif rangesContains(tc.rngs1, tc.rngs2) != tc.tgt {\n\t\t\tif tc.tgt {\n\t\t\t\tt.Errorf(\"ranges %v does not contain %v (but should)\", tc.rngs1, tc.rngs2)\n\t\t\t} else {\n\t\t\t\tt.Errorf(\"ranges %v does contain %v (but shouldn't)\", tc.rngs1, tc.rngs2)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestContainsPC(t *testing.T) {\n\tt.Parallel()\n\tmr := makeRanges\n\n\ttcs := []struct {\n\t\trngs [][2]uint64\n\t\tpc   uint64\n\t\ttgt  bool\n\t}{\n\t\t{mr(1, 10), 1, true},\n\t\t{mr(1, 10), 5, true},\n\t\t{mr(1, 10), 10, false},\n\t\t{mr(1, 10, 20, 30), 15, false},\n\t\t{mr(1, 10, 20, 30), 20, true},\n\t\t{mr(1, 10, 20, 30), 30, false},\n\t\t{mr(1, 10, 20, 30), 31, false},\n\t}\n\n\tfor _, tc := range tcs {\n\t\tn := &Tree{Ranges: tc.rngs}\n\t\tif n.ContainsPC(tc.pc) != tc.tgt {\n\t\t\tif tc.tgt {\n\t\t\t\tt.Errorf(\"ranges %v does not contain %d (but should)\", tc.rngs, tc.pc)\n\t\t\t} else {\n\t\t\t\tt.Errorf(\"ranges %v does contain %d (but shouldn't)\", tc.rngs, tc.pc)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/godwarf/type.go",
    "content": "// Copyright 2009 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// DWARF type information structures.\n// The format is heavily biased toward C, but for simplicity\n// the String methods use a pseudo-Go syntax.\n\n// Borrowed from golang.org/x/debug/dwarf/type.go\n\npackage godwarf\n\nimport (\n\t\"debug/dwarf\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n)\n\nconst (\n\tAttrGoKind          dwarf.Attr = 0x2900\n\tAttrGoKey           dwarf.Attr = 0x2901\n\tAttrGoElem          dwarf.Attr = 0x2902\n\tAttrGoEmbeddedField dwarf.Attr = 0x2903\n\tAttrGoRuntimeType   dwarf.Attr = 0x2904\n\tAttrGoPackageName   dwarf.Attr = 0x2905\n\tAttrGoDictIndex     dwarf.Attr = 0x2906\n\tAttrGoClosureOffset dwarf.Attr = 0x2907\n)\n\n// Basic type encodings -- the value for AttrEncoding in a TagBaseType Entry.\nconst (\n\tencAddress        = 0x01\n\tencBoolean        = 0x02\n\tencComplexFloat   = 0x03\n\tencFloat          = 0x04\n\tencSigned         = 0x05\n\tencSignedChar     = 0x06\n\tencUnsigned       = 0x07\n\tencUnsignedChar   = 0x08\n\tencImaginaryFloat = 0x09\n)\n\nconst cyclicalTypeStop = \"<cyclical>\" // guard value printed for types with a cyclical definition, to avoid infinite recursion in Type.String\n\ntype recCheck map[dwarf.Offset]struct{}\n\nfunc (recCheck recCheck) acquire(off dwarf.Offset) (release func()) {\n\tif _, rec := recCheck[off]; rec {\n\t\treturn nil\n\t}\n\trecCheck[off] = struct{}{}\n\treturn func() {\n\t\tdelete(recCheck, off)\n\t}\n}\n\nfunc sizeAlignToSize(sz, align int64) int64 {\n\treturn sz\n}\n\nfunc sizeAlignToAlign(sz, align int64) int64 {\n\treturn align\n}\n\n// A Type conventionally represents a pointer to any of the\n// specific Type structures (CharType, StructType, etc.).\ntype Type interface {\n\tCommon() *CommonType\n\tString() string\n\tSize() int64\n\tAlign() int64\n\n\tstringIntl(recCheck) string\n\tsizeAlignIntl(recCheck) (int64, int64)\n}\n\n// A CommonType holds fields common to multiple types.\n// If a field is not known or not applicable for a given type,\n// the zero value is used.\ntype CommonType struct {\n\tIndex       int          // index supplied by caller of ReadType\n\tByteSize    int64        // size of value of this type, in bytes\n\tName        string       // name that can be used to refer to type\n\tReflectKind reflect.Kind // the reflect kind of the type.\n\tOffset      dwarf.Offset // the offset at which this type was read\n}\n\nfunc (c *CommonType) Common() *CommonType { return c }\n\nfunc (c *CommonType) Size() int64                           { return c.ByteSize }\nfunc (c *CommonType) Align() int64                          { return c.ByteSize }\nfunc (c *CommonType) sizeAlignIntl(recCheck) (int64, int64) { return c.ByteSize, c.ByteSize }\n\n// Basic types\n\n// A BasicType holds fields common to all basic types.\ntype BasicType struct {\n\tCommonType\n\tBitSize   int64\n\tBitOffset int64\n}\n\nfunc (t *BasicType) Basic() *BasicType { return t }\n\nfunc (t *BasicType) String() string { return t.stringIntl(nil) }\n\nfunc (t *BasicType) stringIntl(recCheck) string {\n\tif t.Name != \"\" {\n\t\treturn t.Name\n\t}\n\treturn \"?\"\n}\n\nfunc (t *BasicType) Align() int64 { return t.CommonType.ByteSize }\n\n// A CharType represents a signed character type.\ntype CharType struct {\n\tBasicType\n}\n\n// A UcharType represents an unsigned character type.\ntype UcharType struct {\n\tBasicType\n}\n\n// An IntType represents a signed integer type.\ntype IntType struct {\n\tBasicType\n}\n\n// A UintType represents an unsigned integer type.\ntype UintType struct {\n\tBasicType\n}\n\n// A FloatType represents a floating point type.\ntype FloatType struct {\n\tBasicType\n}\n\n// A ComplexType represents a complex floating point type.\ntype ComplexType struct {\n\tBasicType\n}\n\n// A BoolType represents a boolean type.\ntype BoolType struct {\n\tBasicType\n}\n\n// An AddrType represents a machine address type.\ntype AddrType struct {\n\tBasicType\n}\n\n// An UnspecifiedType represents an implicit, unknown, ambiguous or nonexistent type.\ntype UnspecifiedType struct {\n\tBasicType\n}\n\n// qualifiers\n\n// A QualType represents a type that has the C/C++ \"const\", \"restrict\", or \"volatile\" qualifier.\ntype QualType struct {\n\tCommonType\n\tQual string\n\tType Type\n}\n\nfunc (t *QualType) String() string { return t.stringIntl(make(recCheck)) }\n\nfunc (t *QualType) stringIntl(recCheck recCheck) string {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn cyclicalTypeStop\n\t}\n\tdefer release()\n\treturn t.Qual + \" \" + t.Type.stringIntl(recCheck)\n}\n\nfunc (t *QualType) Size() int64  { return sizeAlignToSize(t.sizeAlignIntl(make(recCheck))) }\nfunc (t *QualType) Align() int64 { return sizeAlignToAlign(t.sizeAlignIntl(make(recCheck))) }\n\nfunc (t *QualType) sizeAlignIntl(recCheck recCheck) (int64, int64) {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn t.CommonType.ByteSize, t.CommonType.ByteSize\n\t}\n\tdefer release()\n\treturn t.Type.sizeAlignIntl(recCheck)\n}\n\n// An ArrayType represents a fixed size array type.\ntype ArrayType struct {\n\tCommonType\n\tType          Type\n\tStrideBitSize int64 // if > 0, number of bits to hold each element\n\tCount         int64 // if == -1, an incomplete array, like char x[].\n}\n\nfunc (t *ArrayType) String() string { return t.stringIntl(make(recCheck)) }\n\nfunc (t *ArrayType) stringIntl(recCheck recCheck) string {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn cyclicalTypeStop\n\t}\n\tdefer release()\n\treturn \"[\" + strconv.FormatInt(t.Count, 10) + \"]\" + t.Type.stringIntl(recCheck)\n}\n\nfunc (t *ArrayType) Size() int64  { return sizeAlignToSize(t.sizeAlignIntl(make(recCheck))) }\nfunc (t *ArrayType) Align() int64 { return sizeAlignToAlign(t.sizeAlignIntl(make(recCheck))) }\n\nfunc (t *ArrayType) sizeAlignIntl(recCheck recCheck) (int64, int64) {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn t.CommonType.ByteSize, 1\n\t}\n\tdefer release()\n\tsz, align := t.Type.sizeAlignIntl(recCheck)\n\tif t.CommonType.ByteSize != 0 {\n\t\treturn t.CommonType.ByteSize, align\n\t}\n\treturn sz * t.Count, align\n}\n\n// A VoidType represents the C void type.\ntype VoidType struct {\n\tCommonType\n}\n\nfunc (t *VoidType) String() string { return t.stringIntl(nil) }\n\nfunc (t *VoidType) stringIntl(recCheck) string { return \"void\" }\n\n// A PtrType represents a pointer type.\ntype PtrType struct {\n\tCommonType\n\tType Type\n}\n\nfunc (t *PtrType) String() string { return t.stringIntl(make(recCheck)) }\n\nfunc (t *PtrType) stringIntl(recCheck recCheck) string {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn cyclicalTypeStop\n\t}\n\tdefer release()\n\treturn \"*\" + t.Type.stringIntl(recCheck)\n}\n\n// A StructType represents a struct, union, or C++ class type.\ntype StructType struct {\n\tCommonType\n\tStructName string\n\tKind       string // \"struct\", \"union\", or \"class\".\n\tField      []*StructField\n\tIncomplete bool // if true, struct, union, class is declared but not defined\n}\n\n// A StructField represents a field in a struct, union, or C++ class type.\ntype StructField struct {\n\tName       string\n\tType       Type\n\tByteOffset int64\n\tByteSize   int64\n\tBitOffset  int64 // within the ByteSize bytes at ByteOffset\n\tBitSize    int64 // zero if not a bit field\n\tEmbedded   bool\n}\n\nfunc (t *StructType) String() string { return t.stringIntl(make(recCheck)) }\n\nfunc (t *StructType) stringIntl(recCheck recCheck) string {\n\tif t.StructName != \"\" {\n\t\treturn t.Kind + \" \" + t.StructName\n\t}\n\treturn t.Defn(recCheck)\n}\n\nfunc (t *StructType) Defn(recCheck recCheck) string {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn cyclicalTypeStop\n\t}\n\tdefer release()\n\ts := t.Kind\n\tif t.StructName != \"\" {\n\t\ts += \" \" + t.StructName\n\t}\n\tif t.Incomplete {\n\t\ts += \" /*incomplete*/\"\n\t\treturn s\n\t}\n\ts += \" {\"\n\tfor i, f := range t.Field {\n\t\tif i > 0 {\n\t\t\ts += \"; \"\n\t\t}\n\t\ts += f.Name + \" \" + f.Type.stringIntl(recCheck)\n\t\ts += \"@\" + strconv.FormatInt(f.ByteOffset, 10)\n\t\tif f.BitSize > 0 {\n\t\t\ts += \" : \" + strconv.FormatInt(f.BitSize, 10)\n\t\t\ts += \"@\" + strconv.FormatInt(f.BitOffset, 10)\n\t\t}\n\t}\n\ts += \"}\"\n\treturn s\n}\n\nfunc (t *StructType) Size() int64  { return sizeAlignToSize(t.sizeAlignIntl(make(recCheck))) }\nfunc (t *StructType) Align() int64 { return sizeAlignToAlign(t.sizeAlignIntl(make(recCheck))) }\n\nfunc (t *StructType) sizeAlignIntl(recCheck recCheck) (int64, int64) {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn t.CommonType.ByteSize, 1\n\t}\n\tdefer release()\n\tif len(t.Field) == 0 {\n\t\treturn t.CommonType.ByteSize, 1\n\t}\n\treturn t.CommonType.ByteSize, sizeAlignToAlign(t.Field[0].Type.sizeAlignIntl(recCheck))\n}\n\n// A SliceType represents a Go slice type. It looks like a StructType, describing\n// the runtime-internal structure, with extra fields.\ntype SliceType struct {\n\tStructType\n\tElemType Type\n}\n\nfunc (t *SliceType) String() string { return t.stringIntl(make(recCheck)) }\n\nfunc (t *SliceType) stringIntl(recCheck recCheck) string {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn cyclicalTypeStop\n\t}\n\tdefer release()\n\tif t.Name != \"\" {\n\t\treturn t.Name\n\t}\n\treturn \"[]\" + t.ElemType.stringIntl(recCheck)\n}\n\n// A StringType represents a Go string type. It looks like a StructType, describing\n// the runtime-internal structure, but we wrap it for neatness.\ntype StringType struct {\n\tStructType\n}\n\nfunc (t *StringType) String() string { return t.stringIntl(nil) }\n\nfunc (t *StringType) stringIntl(recCheck recCheck) string {\n\tif t.Name != \"\" {\n\t\treturn t.Name\n\t}\n\treturn \"string\"\n}\n\n// An InterfaceType represents a Go interface.\ntype InterfaceType struct {\n\tTypedefType\n}\n\nfunc (t *InterfaceType) String() string { return t.stringIntl(nil) }\n\nfunc (t *InterfaceType) stringIntl(recCheck recCheck) string {\n\tif t.Name != \"\" {\n\t\treturn t.Name\n\t}\n\treturn \"Interface\"\n}\n\n// An EnumType represents an enumerated type.\n// The only indication of its native integer type is its ByteSize\n// (inside CommonType).\ntype EnumType struct {\n\tCommonType\n\tEnumName string\n\tVal      []*EnumValue\n}\n\n// An EnumValue represents a single enumeration value.\ntype EnumValue struct {\n\tName string\n\tVal  int64\n}\n\nfunc (t *EnumType) String() string { return t.stringIntl(nil) }\n\nfunc (t *EnumType) stringIntl(recCheck recCheck) string {\n\tvar s strings.Builder\n\ts.WriteString(\"enum\")\n\tif t.EnumName != \"\" {\n\t\ts.WriteString(\" \" + t.EnumName)\n\t}\n\ts.WriteString(\" {\")\n\tfor i, v := range t.Val {\n\t\tif i > 0 {\n\t\t\ts.WriteString(\"; \")\n\t\t}\n\t\ts.WriteString(v.Name + \"=\" + strconv.FormatInt(v.Val, 10))\n\t}\n\ts.WriteString(\"}\")\n\treturn s.String()\n}\n\n// A FuncType represents a function type.\ntype FuncType struct {\n\tCommonType\n\tReturnType Type\n\tParamType  []Type\n}\n\nfunc (t *FuncType) String() string { return t.stringIntl(make(recCheck)) }\n\nfunc (t *FuncType) stringIntl(recCheck recCheck) string {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn cyclicalTypeStop\n\t}\n\tdefer release()\n\tvar s strings.Builder\n\ts.WriteString(\"func(\")\n\tfor i, t := range t.ParamType {\n\t\tif i > 0 {\n\t\t\ts.WriteString(\", \")\n\t\t}\n\t\ts.WriteString(t.stringIntl(recCheck))\n\t}\n\ts.WriteString(\")\")\n\tif t.ReturnType != nil {\n\t\ts.WriteString(\" \" + t.ReturnType.stringIntl(recCheck))\n\t}\n\treturn s.String()\n}\n\n// A DotDotDotType represents the variadic ... function parameter.\ntype DotDotDotType struct {\n\tCommonType\n}\n\nfunc (t *DotDotDotType) String() string { return t.stringIntl(nil) }\n\nfunc (t *DotDotDotType) stringIntl(recCheck recCheck) string { return \"...\" }\n\n// A TypedefType represents a named type.\ntype TypedefType struct {\n\tCommonType\n\tType Type\n}\n\nfunc (t *TypedefType) String() string { return t.stringIntl(nil) }\n\nfunc (t *TypedefType) stringIntl(recCheck recCheck) string { return t.Name }\n\nfunc (t *TypedefType) Size() int64  { return sizeAlignToSize(t.sizeAlignIntl(make(recCheck))) }\nfunc (t *TypedefType) Align() int64 { return sizeAlignToAlign(t.sizeAlignIntl(make(recCheck))) }\n\nfunc (t *TypedefType) sizeAlignIntl(recCheck recCheck) (int64, int64) {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn t.CommonType.ByteSize, t.CommonType.ByteSize\n\t}\n\tdefer release()\n\tif t.Type == nil {\n\t\treturn 0, 1\n\t}\n\treturn t.Type.sizeAlignIntl(recCheck)\n}\n\n// A MapType represents a Go map type. It looks like a TypedefType, describing\n// the runtime-internal structure, with extra fields.\ntype MapType struct {\n\tTypedefType\n\tKeyType  Type\n\tElemType Type\n}\n\nfunc (t *MapType) String() string { return t.stringIntl(make(recCheck)) }\n\nfunc (t *MapType) stringIntl(recCheck recCheck) string {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn cyclicalTypeStop\n\t}\n\tdefer release()\n\tif t.Name != \"\" {\n\t\treturn t.Name\n\t}\n\treturn \"map[\" + t.KeyType.String() + \"]\" + t.ElemType.String()\n}\n\n// A ChanType represents a Go channel type.\ntype ChanType struct {\n\tTypedefType\n\tElemType Type\n}\n\nfunc (t *ChanType) String() string { return t.stringIntl(make(recCheck)) }\n\nfunc (t *ChanType) stringIntl(recCheck recCheck) string {\n\trelease := recCheck.acquire(t.CommonType.Offset)\n\tif release == nil {\n\t\treturn cyclicalTypeStop\n\t}\n\tdefer release()\n\tif t.Name != \"\" {\n\t\treturn t.Name\n\t}\n\treturn \"chan \" + t.ElemType.String()\n}\n\ntype ParametricType struct {\n\tTypedefType\n\tDictIndex int64\n}\n\n// An UnsupportedType is a placeholder returned in situations where we\n// encounter a type that isn't supported.\ntype UnsupportedType struct {\n\tCommonType\n\tTag dwarf.Tag\n}\n\nfunc (t *UnsupportedType) stringIntl(recCheck) string {\n\tif t.Name != \"\" {\n\t\treturn t.Name\n\t}\n\treturn fmt.Sprintf(\"(unsupported type %s)\", t.Tag.String())\n}\n\nfunc (t *UnsupportedType) String() string { return t.stringIntl(nil) }\n\n// ReadType reads the type at off in the DWARF “info” section.\nfunc ReadType(d *dwarf.Data, index int, off dwarf.Offset, typeCache map[dwarf.Offset]Type) (Type, error) {\n\ttyp, err := readType(d, \"info\", d.Reader(), off, typeCache, nil)\n\tif typ != nil {\n\t\ttyp.Common().Index = index\n\t}\n\treturn typ, err\n}\n\nfunc getKind(e *dwarf.Entry) reflect.Kind {\n\tinteger, _ := e.Val(AttrGoKind).(int64)\n\treturn reflect.Kind(integer)\n}\n\ntype delayedSize struct {\n\tct *CommonType // type that needs its size computed from ut\n\tut Type        // underlying type\n}\n\n// readType reads a type from r at off of name using and updating a\n// type cache, callers should pass nil to delayedSize, it is used for recursion.\nfunc readType(d *dwarf.Data, name string, r *dwarf.Reader, off dwarf.Offset, typeCache map[dwarf.Offset]Type, delayedSizes *[]delayedSize) (Type, error) {\n\tif t, ok := typeCache[off]; ok {\n\t\treturn t, nil\n\t}\n\tr.Seek(off)\n\te, err := r.Next()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\taddressSize := r.AddressSize()\n\tif e == nil || e.Offset != off {\n\t\treturn nil, dwarf.DecodeError{Name: name, Offset: off, Err: \"no type at offset\"}\n\t}\n\n\t// If this is the root of the recursion, prepare to resolve typedef sizes\n\t// once the recursion is done. This must be done after the type graph is\n\t// constructed because it may need to resolve cycles in a different order\n\t// than readType encounters them.\n\tif delayedSizes == nil {\n\t\tvar delayedSizeList []delayedSize\n\t\tdefer func() {\n\t\t\tfor _, ds := range delayedSizeList {\n\t\t\t\tds.ct.ByteSize = ds.ut.Size()\n\t\t\t}\n\t\t}()\n\t\tdelayedSizes = &delayedSizeList\n\t}\n\n\t// Parse type from dwarf.Entry.\n\t// Must always set typeCache[off] before calling\n\t// d.readType recursively, to handle circular types correctly.\n\tvar typ Type\n\n\tnextDepth := 0\n\n\t// Get next child; set err if error happens.\n\tnext := func() *dwarf.Entry {\n\t\tif !e.Children {\n\t\t\treturn nil\n\t\t}\n\t\t// Only return direct children.\n\t\t// Skip over composite entries that happen to be nested\n\t\t// inside this one. Most DWARF generators wouldn't generate\n\t\t// such a thing, but clang does.\n\t\t// See golang.org/issue/6472.\n\t\tfor {\n\t\t\tkid, err1 := r.Next()\n\t\t\tif err1 != nil {\n\t\t\t\terr = err1\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tif kid.Tag == 0 {\n\t\t\t\tif nextDepth > 0 {\n\t\t\t\t\tnextDepth--\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tif kid.Children {\n\t\t\t\tnextDepth++\n\t\t\t}\n\t\t\tif nextDepth > 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn kid\n\t\t}\n\t}\n\n\t// Get Type referred to by dwarf.Entry's attr.\n\t// Set err if error happens.  Not having a type is an error.\n\ttypeOf := func(e *dwarf.Entry, attr dwarf.Attr) Type {\n\t\ttval := e.Val(attr)\n\t\tvar t Type\n\t\tswitch toff := tval.(type) {\n\t\tcase dwarf.Offset:\n\t\t\tif t, err = readType(d, name, d.Reader(), toff, typeCache, delayedSizes); err != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase uint64:\n\t\t\terr = dwarf.DecodeError{Name: name, Offset: e.Offset, Err: \"DWARFv4 section debug_types unsupported\"}\n\t\t\treturn nil\n\t\tdefault:\n\t\t\t// It appears that no Type means \"void\".\n\t\t\treturn new(VoidType)\n\t\t}\n\t\treturn t\n\t}\n\n\tswitch e.Tag {\n\tcase dwarf.TagArrayType:\n\t\t// Multi-dimensional array.  (DWARF v2 §5.4)\n\t\t// Attributes:\n\t\t//\tAttrType:subtype [required]\n\t\t//\tAttrStrideSize: distance in bits between each element of the array\n\t\t//\tAttrStride: distance in bytes between each element of the array\n\t\t//\tAttrByteSize: size of entire array\n\t\t// Children:\n\t\t//\tTagSubrangeType or TagEnumerationType giving one dimension.\n\t\t//\tdimensions are in left to right order.\n\t\tt := new(ArrayType)\n\t\tt.Name, _ = e.Val(dwarf.AttrName).(string)\n\t\tt.ReflectKind = getKind(e)\n\t\ttyp = t\n\t\ttypeCache[off] = t\n\t\tif t.Type = typeOf(e, dwarf.AttrType); err != nil {\n\t\t\tgoto Error\n\t\t}\n\t\tif bytes, ok := e.Val(dwarf.AttrStride).(int64); ok {\n\t\t\tt.StrideBitSize = 8 * bytes\n\t\t} else if bits, ok := e.Val(dwarf.AttrStrideSize).(int64); ok {\n\t\t\tt.StrideBitSize = bits\n\t\t} else {\n\t\t\t// If there's no stride specified, assume it's the size of the\n\t\t\t// array's element type.\n\t\t\tt.StrideBitSize = 8 * t.Type.Size()\n\t\t}\n\n\t\t// Accumulate dimensions,\n\t\tndim := 0\n\t\tfor kid := next(); kid != nil; kid = next() {\n\t\t\t// TODO(rsc): Can also be TagEnumerationType\n\t\t\t// but haven't seen that in the wild yet.\n\t\t\tswitch kid.Tag {\n\t\t\tcase dwarf.TagSubrangeType:\n\t\t\t\tcount, ok := kid.Val(dwarf.AttrCount).(int64)\n\t\t\t\tif !ok {\n\t\t\t\t\t// Old binaries may have an upper bound instead.\n\t\t\t\t\tcount, ok = kid.Val(dwarf.AttrUpperBound).(int64)\n\t\t\t\t\tif ok {\n\t\t\t\t\t\tcount++ // Length is one more than upper bound.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcount = -1 // As in x[].\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ndim == 0 {\n\t\t\t\t\tt.Count = count\n\t\t\t\t} else {\n\t\t\t\t\t// Multidimensional array.\n\t\t\t\t\t// Create new array type underneath this one.\n\t\t\t\t\tt.Type = &ArrayType{Type: t.Type, Count: count}\n\t\t\t\t}\n\t\t\t\tndim++\n\t\t\tcase dwarf.TagEnumerationType:\n\t\t\t\terr = dwarf.DecodeError{Name: name, Offset: kid.Offset, Err: \"cannot handle enumeration type as array bound\"}\n\t\t\t\tgoto Error\n\t\t\t}\n\t\t}\n\t\tif ndim == 0 {\n\t\t\t// LLVM generates this for x[].\n\t\t\tt.Count = -1\n\t\t}\n\n\tcase dwarf.TagBaseType:\n\t\t// Basic type.  (DWARF v2 §5.1)\n\t\t// Attributes:\n\t\t//\tAttrName: name of base type in programming language of the compilation unit [required]\n\t\t//\tAttrEncoding: encoding value for type (encFloat etc) [required]\n\t\t//\tAttrByteSize: size of type in bytes [required]\n\t\t//\tAttrBitOffset: for sub-byte types, size in bits\n\t\t//\tAttrBitSize: for sub-byte types, bit offset of high order bit in the AttrByteSize bytes\n\t\tname, _ := e.Val(dwarf.AttrName).(string)\n\t\tenc, ok := e.Val(dwarf.AttrEncoding).(int64)\n\t\tif !ok {\n\t\t\terr = dwarf.DecodeError{Name: name, Offset: e.Offset, Err: \"missing encoding attribute for \" + name}\n\t\t\tgoto Error\n\t\t}\n\t\tswitch enc {\n\t\tdefault:\n\t\t\terr = dwarf.DecodeError{Name: name, Offset: e.Offset, Err: \"unrecognized encoding attribute value\"}\n\t\t\tgoto Error\n\n\t\tcase encAddress:\n\t\t\ttyp = new(AddrType)\n\t\tcase encBoolean:\n\t\t\ttyp = new(BoolType)\n\t\tcase encComplexFloat:\n\t\t\ttyp = new(ComplexType)\n\t\t\tif name == \"complex\" {\n\t\t\t\t// clang writes out 'complex' instead of 'complex float' or 'complex double'.\n\t\t\t\t// clang also writes out a byte size that we can use to distinguish.\n\t\t\t\t// See issue 8694.\n\t\t\t\tswitch byteSize, _ := e.Val(dwarf.AttrByteSize).(int64); byteSize {\n\t\t\t\tcase 8:\n\t\t\t\t\tname = \"complex float\"\n\t\t\t\tcase 16:\n\t\t\t\t\tname = \"complex double\"\n\t\t\t\t}\n\t\t\t}\n\t\tcase encFloat:\n\t\t\ttyp = new(FloatType)\n\t\tcase encSigned:\n\t\t\ttyp = new(IntType)\n\t\tcase encUnsigned:\n\t\t\ttyp = new(UintType)\n\t\tcase encSignedChar:\n\t\t\ttyp = new(CharType)\n\t\tcase encUnsignedChar:\n\t\t\ttyp = new(UcharType)\n\t\t}\n\t\ttypeCache[off] = typ\n\t\tt := typ.(interface {\n\t\t\tBasic() *BasicType\n\t\t}).Basic()\n\t\tt.Name = name\n\t\tt.BitSize, _ = e.Val(dwarf.AttrBitSize).(int64)\n\t\tt.BitOffset, _ = e.Val(dwarf.AttrBitOffset).(int64)\n\t\tt.ReflectKind = getKind(e)\n\n\tcase dwarf.TagClassType, dwarf.TagStructType, dwarf.TagUnionType:\n\t\t// Structure, union, or class type.  (DWARF v2 §5.5)\n\t\t// Also Slices and Strings (Go-specific).\n\t\t// Attributes:\n\t\t//\tAttrName: name of struct, union, or class\n\t\t//\tAttrByteSize: byte size [required]\n\t\t//\tAttrDeclaration: if true, struct/union/class is incomplete\n\t\t// \tAttrGoElem: present for slices only.\n\t\t// Children:\n\t\t//\tTagMember to describe one member.\n\t\t//\t\tAttrName: name of member [required]\n\t\t//\t\tAttrType: type of member [required]\n\t\t//\t\tAttrByteSize: size in bytes\n\t\t//\t\tAttrBitOffset: bit offset within bytes for bit fields\n\t\t//\t\tAttrBitSize: bit size for bit fields\n\t\t//\t\tAttrDataMemberLoc: location within struct [required for struct, class]\n\t\t// There is much more to handle C++, all ignored for now.\n\t\tt := new(StructType)\n\t\tt.ReflectKind = getKind(e)\n\t\tswitch t.ReflectKind {\n\t\tcase reflect.Slice:\n\t\t\tslice := new(SliceType)\n\t\t\ttyp = slice\n\t\t\ttypeCache[off] = slice\n\t\t\tslice.ElemType = typeOf(e, AttrGoElem)\n\t\t\tt = &slice.StructType\n\t\tcase reflect.String:\n\t\t\tstr := new(StringType)\n\t\t\tt = &str.StructType\n\t\t\tstr.ReflectKind = reflect.String\n\t\t\ttyp = str\n\t\tdefault:\n\t\t\ttyp = t\n\t\t}\n\t\ttypeCache[off] = typ\n\t\tswitch e.Tag {\n\t\tcase dwarf.TagClassType:\n\t\t\tt.Kind = \"class\"\n\t\tcase dwarf.TagStructType:\n\t\t\tt.Kind = \"struct\"\n\t\tcase dwarf.TagUnionType:\n\t\t\tt.Kind = \"union\"\n\t\t}\n\t\tt.Name, _ = e.Val(dwarf.AttrName).(string)\n\t\tt.StructName, _ = e.Val(dwarf.AttrName).(string)\n\t\tt.Incomplete = e.Val(dwarf.AttrDeclaration) != nil\n\t\tt.Field = make([]*StructField, 0, 8)\n\t\tvar lastFieldType Type\n\t\tvar lastFieldBitOffset int64\n\t\tfor kid := next(); kid != nil; kid = next() {\n\t\t\tif kid.Tag == dwarf.TagMember {\n\t\t\t\tf := new(StructField)\n\t\t\t\tif f.Type = typeOf(kid, dwarf.AttrType); err != nil {\n\t\t\t\t\tgoto Error\n\t\t\t\t}\n\t\t\t\tswitch loc := kid.Val(dwarf.AttrDataMemberLoc).(type) {\n\t\t\t\tcase []byte:\n\t\t\t\t\t// TODO: Should have original compilation\n\t\t\t\t\t// unit here, not unknownFormat.\n\t\t\t\t\tif len(loc) == 0 {\n\t\t\t\t\t\t// Empty exprloc. f.ByteOffset=0.\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tb := makeBuf(d, unknownFormat{}, \"location\", 0, loc)\n\t\t\t\t\top_ := op.Opcode(b.Uint8())\n\t\t\t\t\tswitch op_ {\n\t\t\t\t\tcase op.DW_OP_plus_uconst:\n\t\t\t\t\t\t// Handle opcode sequence [DW_OP_plus_uconst <uleb128>]\n\t\t\t\t\t\tf.ByteOffset = int64(b.Uint())\n\t\t\t\t\t\tb.AssertEmpty()\n\t\t\t\t\tcase op.DW_OP_consts:\n\t\t\t\t\t\t// Handle opcode sequence [DW_OP_consts <sleb128> DW_OP_plus]\n\t\t\t\t\t\tf.ByteOffset = b.Int()\n\t\t\t\t\t\top_ = op.Opcode(b.Uint8())\n\t\t\t\t\t\tif op_ != op.DW_OP_plus {\n\t\t\t\t\t\t\terr = dwarf.DecodeError{Name: name, Offset: kid.Offset, Err: fmt.Sprintf(\"unexpected opcode 0x%x\", op_)}\n\t\t\t\t\t\t\tgoto Error\n\t\t\t\t\t\t}\n\t\t\t\t\t\tb.AssertEmpty()\n\t\t\t\t\tdefault:\n\t\t\t\t\t\terr = dwarf.DecodeError{Name: name, Offset: kid.Offset, Err: fmt.Sprintf(\"unexpected opcode 0x%x\", op_)}\n\t\t\t\t\t\tgoto Error\n\t\t\t\t\t}\n\t\t\t\t\tif b.Err != nil {\n\t\t\t\t\t\terr = b.Err\n\t\t\t\t\t\tgoto Error\n\t\t\t\t\t}\n\t\t\t\tcase int64:\n\t\t\t\t\tf.ByteOffset = loc\n\t\t\t\t}\n\n\t\t\t\thaveBitOffset := false\n\t\t\t\tf.Name, _ = kid.Val(dwarf.AttrName).(string)\n\t\t\t\tf.ByteSize, _ = kid.Val(dwarf.AttrByteSize).(int64)\n\t\t\t\tf.BitOffset, haveBitOffset = kid.Val(dwarf.AttrBitOffset).(int64)\n\t\t\t\tf.BitSize, _ = kid.Val(dwarf.AttrBitSize).(int64)\n\t\t\t\tf.Embedded, _ = kid.Val(AttrGoEmbeddedField).(bool)\n\t\t\t\tt.Field = append(t.Field, f)\n\n\t\t\t\tbito := f.BitOffset\n\t\t\t\tif !haveBitOffset {\n\t\t\t\t\tbito = f.ByteOffset * 8\n\t\t\t\t}\n\t\t\t\tif bito == lastFieldBitOffset && t.Kind != \"union\" {\n\t\t\t\t\t// Last field was zero width.  Fix array length.\n\t\t\t\t\t// (DWARF writes out 0-length arrays as if they were 1-length arrays.)\n\t\t\t\t\tzeroArray(lastFieldType)\n\t\t\t\t}\n\t\t\t\tlastFieldType = f.Type\n\t\t\t\tlastFieldBitOffset = bito\n\t\t\t}\n\t\t}\n\t\tif t.Kind != \"union\" {\n\t\t\tb, ok := e.Val(dwarf.AttrByteSize).(int64)\n\t\t\tif ok && b*8 == lastFieldBitOffset {\n\t\t\t\t// Final field must be zero width.  Fix array length.\n\t\t\t\tzeroArray(lastFieldType)\n\t\t\t}\n\t\t}\n\n\tcase dwarf.TagConstType, dwarf.TagVolatileType, dwarf.TagRestrictType:\n\t\t// Type modifier (DWARF v2 §5.2)\n\t\t// Attributes:\n\t\t//\tAttrType: subtype\n\t\tt := new(QualType)\n\t\tt.Name, _ = e.Val(dwarf.AttrName).(string)\n\t\tt.ReflectKind = getKind(e)\n\t\ttyp = t\n\t\ttypeCache[off] = t\n\t\tif t.Type = typeOf(e, dwarf.AttrType); err != nil {\n\t\t\tgoto Error\n\t\t}\n\t\tswitch e.Tag {\n\t\tcase dwarf.TagConstType:\n\t\t\tt.Qual = \"const\"\n\t\tcase dwarf.TagRestrictType:\n\t\t\tt.Qual = \"restrict\"\n\t\tcase dwarf.TagVolatileType:\n\t\t\tt.Qual = \"volatile\"\n\t\t}\n\n\tcase dwarf.TagEnumerationType:\n\t\t// Enumeration type (DWARF v2 §5.6)\n\t\t// Attributes:\n\t\t//\tAttrName: enum name if any\n\t\t//\tAttrByteSize: bytes required to represent largest value\n\t\t// Children:\n\t\t//\tTagEnumerator:\n\t\t//\t\tAttrName: name of constant\n\t\t//\t\tAttrConstValue: value of constant\n\t\tt := new(EnumType)\n\t\tt.ReflectKind = getKind(e)\n\t\ttyp = t\n\t\ttypeCache[off] = t\n\t\tt.Name, _ = e.Val(dwarf.AttrName).(string)\n\t\tt.EnumName, _ = e.Val(dwarf.AttrName).(string)\n\t\tt.Val = make([]*EnumValue, 0, 8)\n\t\tfor kid := next(); kid != nil; kid = next() {\n\t\t\tif kid.Tag == dwarf.TagEnumerator {\n\t\t\t\tf := new(EnumValue)\n\t\t\t\tf.Name, _ = kid.Val(dwarf.AttrName).(string)\n\t\t\t\tf.Val, _ = kid.Val(dwarf.AttrConstValue).(int64)\n\t\t\t\tn := len(t.Val)\n\t\t\t\tif n >= cap(t.Val) {\n\t\t\t\t\tval := make([]*EnumValue, n, n*2)\n\t\t\t\t\tcopy(val, t.Val)\n\t\t\t\t\tt.Val = val\n\t\t\t\t}\n\t\t\t\tt.Val = t.Val[0 : n+1]\n\t\t\t\tt.Val[n] = f\n\t\t\t}\n\t\t}\n\n\tcase dwarf.TagPointerType:\n\t\t// Type modifier (DWARF v2 §5.2)\n\t\t// Attributes:\n\t\t//\tAttrType: subtype [not required!  void* has no AttrType]\n\t\t//\tAttrAddrClass: address class [ignored]\n\t\tt := new(PtrType)\n\t\tt.Name, _ = e.Val(dwarf.AttrName).(string)\n\t\tt.ReflectKind = getKind(e)\n\t\ttyp = t\n\t\ttypeCache[off] = t\n\t\tif e.Val(dwarf.AttrType) == nil {\n\t\t\tt.Type = &VoidType{}\n\t\t\tbreak\n\t\t}\n\t\tt.Type = typeOf(e, dwarf.AttrType)\n\n\tcase dwarf.TagSubroutineType:\n\t\t// Subroutine type.  (DWARF v2 §5.7)\n\t\t// Attributes:\n\t\t//\tAttrType: type of return value if any\n\t\t//\tAttrName: possible name of type [ignored]\n\t\t//\tAttrPrototyped: whether used ANSI C prototype [ignored]\n\t\t// Children:\n\t\t//\tTagFormalParameter: typed parameter\n\t\t//\t\tAttrType: type of parameter\n\t\t//\tTagUnspecifiedParameter: final ...\n\t\tt := new(FuncType)\n\t\tt.Name, _ = e.Val(dwarf.AttrName).(string)\n\t\tt.ReflectKind = getKind(e)\n\t\ttyp = t\n\t\ttypeCache[off] = t\n\t\tif t.ReturnType = typeOf(e, dwarf.AttrType); err != nil {\n\t\t\tgoto Error\n\t\t}\n\t\tt.ParamType = make([]Type, 0, 8)\n\t\tfor kid := next(); kid != nil; kid = next() {\n\t\t\tvar tkid Type\n\t\t\tswitch kid.Tag {\n\t\t\tdefault:\n\t\t\t\tcontinue\n\t\t\tcase dwarf.TagFormalParameter:\n\t\t\t\tif tkid = typeOf(kid, dwarf.AttrType); err != nil {\n\t\t\t\t\tgoto Error\n\t\t\t\t}\n\t\t\tcase dwarf.TagUnspecifiedParameters:\n\t\t\t\ttkid = &DotDotDotType{}\n\t\t\t}\n\t\t\tt.ParamType = append(t.ParamType, tkid)\n\t\t}\n\n\tcase dwarf.TagTypedef:\n\t\t// Typedef (DWARF v2 §5.3)\n\t\t// Also maps and channels (Go-specific).\n\t\t// Attributes:\n\t\t//\tAttrName: name [required]\n\t\t//\tAttrType: type definition [required]\n\t\t//\tAttrGoKey: present for maps.\n\t\t//\tAttrGoElem: present for maps and channels.\n\t\tt := new(TypedefType)\n\t\tt.ReflectKind = getKind(e)\n\t\tswitch t.ReflectKind {\n\t\tcase reflect.Map:\n\t\t\tm := new(MapType)\n\t\t\ttyp = m\n\t\t\ttypeCache[off] = typ\n\t\t\tm.KeyType = typeOf(e, AttrGoKey)\n\t\t\tm.ElemType = typeOf(e, AttrGoElem)\n\t\t\tt = &m.TypedefType\n\t\tcase reflect.Chan:\n\t\t\tc := new(ChanType)\n\t\t\ttyp = c\n\t\t\ttypeCache[off] = typ\n\t\t\tc.ElemType = typeOf(e, AttrGoElem)\n\t\t\tt = &c.TypedefType\n\t\tcase reflect.Interface:\n\t\t\tit := new(InterfaceType)\n\t\t\ttyp = it\n\t\t\ttypeCache[off] = it\n\t\t\tt = &it.TypedefType\n\t\tdefault:\n\t\t\tif dictIndex, ok := e.Val(AttrGoDictIndex).(int64); ok {\n\t\t\t\tpt := new(ParametricType)\n\t\t\t\tpt.DictIndex = dictIndex\n\t\t\t\ttyp = pt\n\t\t\t\ttypeCache[off] = pt\n\t\t\t\tt = &pt.TypedefType\n\t\t\t} else {\n\t\t\t\ttyp = t\n\t\t\t}\n\t\t}\n\t\ttypeCache[off] = typ\n\t\tt.Name, _ = e.Val(dwarf.AttrName).(string)\n\t\tt.Type = typeOf(e, dwarf.AttrType)\n\n\tcase dwarf.TagUnspecifiedType:\n\t\t// Unspecified type (DWARF v3 §5.2)\n\t\t// Attributes:\n\t\t//      AttrName: name\n\t\tt := new(UnspecifiedType)\n\t\ttyp = t\n\t\ttypeCache[off] = t\n\t\tt.Name, _ = e.Val(dwarf.AttrName).(string)\n\n\tdefault:\n\t\t// This is some other type DIE that we're currently not\n\t\t// equipped to handle. Return an abstract \"unsupported type\"\n\t\t// object in such cases.\n\t\tt := new(UnsupportedType)\n\t\ttyp = t\n\t\ttypeCache[off] = t\n\t\tt.Tag = e.Tag\n\t\tt.Name, _ = e.Val(dwarf.AttrName).(string)\n\t}\n\n\tif err != nil {\n\t\tgoto Error\n\t}\n\n\ttyp.Common().Offset = off\n\n\t{\n\t\tb, ok := e.Val(dwarf.AttrByteSize).(int64)\n\t\tif !ok {\n\t\t\tb = -1\n\t\t\tswitch t := typ.(type) {\n\t\t\tcase *TypedefType:\n\t\t\t\t*delayedSizes = append(*delayedSizes, delayedSize{typ.Common(), t.Type})\n\t\t\tcase *MapType:\n\t\t\t\t*delayedSizes = append(*delayedSizes, delayedSize{typ.Common(), t.Type})\n\t\t\tcase *ChanType:\n\t\t\t\t*delayedSizes = append(*delayedSizes, delayedSize{typ.Common(), t.Type})\n\t\t\tcase *InterfaceType:\n\t\t\t\t*delayedSizes = append(*delayedSizes, delayedSize{typ.Common(), t.Type})\n\t\t\tcase *PtrType:\n\t\t\t\tb = int64(addressSize)\n\t\t\tcase *FuncType:\n\t\t\t\t// on Go < 1.10 function types do not have a DW_AT_byte_size attribute.\n\t\t\t\tb = int64(addressSize)\n\t\t\t}\n\t\t}\n\t\ttyp.Common().ByteSize = b\n\t}\n\treturn typ, nil\n\nError:\n\t// If the parse fails, take the type out of the cache\n\t// so that the next call with this offset doesn't hit\n\t// the cache and return success.\n\tdelete(typeCache, off)\n\treturn nil, err\n}\n\nfunc zeroArray(t Type) {\n\tfor {\n\t\tat, ok := t.(*ArrayType)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tat.Count = 0\n\t\tt = at.Type\n\t}\n}\n\n// ResolveTypedef returns the underlying type of a typedef or qualified type.\nfunc ResolveTypedef(typ Type) Type {\n\tfor {\n\t\tswitch tt := typ.(type) {\n\t\tcase *TypedefType:\n\t\t\ttyp = tt.Type\n\t\tcase *QualType:\n\t\t\ttyp = tt.Type\n\t\tdefault:\n\t\t\treturn typ\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/leb128/decode.go",
    "content": "package leb128\n\nimport (\n\t\"io\"\n)\n\n// Reader is a io.ByteReader with a Len method. This interface is\n// satisfied by both bytes.Buffer and bytes.Reader.\ntype Reader interface {\n\tio.ByteReader\n\tio.Reader\n\tLen() int\n}\n\n// DecodeUnsigned decodes an unsigned Little Endian Base 128\n// represented number.\nfunc DecodeUnsigned(buf Reader) (uint64, uint32) {\n\tvar (\n\t\tresult uint64\n\t\tshift  uint64\n\t\tlength uint32\n\t)\n\n\tif buf.Len() == 0 {\n\t\treturn 0, 0\n\t}\n\n\tfor {\n\t\tb, err := buf.ReadByte()\n\t\tif err != nil {\n\t\t\tpanic(\"Could not parse ULEB128 value\")\n\t\t}\n\t\tlength++\n\n\t\tresult |= uint64((uint(b) & 0x7f) << shift)\n\n\t\t// If high order bit is 1.\n\t\tif b&0x80 == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tshift += 7\n\t}\n\n\treturn result, length\n}\n\n// DecodeSigned decodes a signed Little Endian Base 128\n// represented number.\nfunc DecodeSigned(buf Reader) (int64, uint32) {\n\tvar (\n\t\tb      byte\n\t\terr    error\n\t\tresult int64\n\t\tshift  uint64\n\t\tlength uint32\n\t)\n\n\tif buf.Len() == 0 {\n\t\treturn 0, 0\n\t}\n\n\tfor {\n\t\tb, err = buf.ReadByte()\n\t\tif err != nil {\n\t\t\tpanic(\"Could not parse SLEB128 value\")\n\t\t}\n\t\tlength++\n\n\t\tresult |= (int64(b) & 0x7f) << shift\n\t\tshift += 7\n\t\tif b&0x80 == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif (shift < 8*uint64(length)) && (b&0x40 > 0) {\n\t\tresult |= -(1 << shift)\n\t}\n\n\treturn result, length\n}\n"
  },
  {
    "path": "pkg/dwarf/leb128/decode_test.go",
    "content": "package leb128\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n)\n\nfunc TestDecodeUnsigned(t *testing.T) {\n\tt.Parallel()\n\tleb128 := bytes.NewBuffer([]byte{0xE5, 0x8E, 0x26})\n\n\tn, c := DecodeUnsigned(leb128)\n\tif n != 624485 {\n\t\tt.Fatal(\"Number was not decoded properly, got: \", n, c)\n\t}\n\n\tif c != 3 {\n\t\tt.Fatal(\"Count not returned correctly\")\n\t}\n}\n\nfunc TestDecodeSigned(t *testing.T) {\n\tt.Parallel()\n\tsleb128 := bytes.NewBuffer([]byte{0x9b, 0xf1, 0x59})\n\n\tn, c := DecodeSigned(sleb128)\n\tif n != -624485 {\n\t\tt.Fatal(\"Number was not decoded properly, got: \", n, c)\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/leb128/doc.go",
    "content": "// Package leb128 provides encoders and decoders for The Little Endian Base 128 format.\n// The Little Endian Base 128 format is defined in the DWARF v4 standard,\n// section 7.6, page 161 and following.\npackage leb128\n"
  },
  {
    "path": "pkg/dwarf/leb128/encode.go",
    "content": "package leb128\n\nimport (\n\t\"io\"\n)\n\n// EncodeUnsigned encodes x to the unsigned Little Endian Base 128 format.\nfunc EncodeUnsigned(out io.ByteWriter, x uint64) {\n\tfor {\n\t\tb := byte(x & 0x7f)\n\t\tx = x >> 7\n\t\tif x != 0 {\n\t\t\tb = b | 0x80\n\t\t}\n\t\tout.WriteByte(b)\n\t\tif x == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// EncodeSigned encodes x to the signed Little Endian Base 128 format.\nfunc EncodeSigned(out io.ByteWriter, x int64) {\n\tfor {\n\t\tb := byte(x & 0x7f)\n\t\tx >>= 7\n\n\t\tsignb := b & 0x40\n\n\t\tlast := false\n\t\tif (x == 0 && signb == 0) || (x == -1 && signb != 0) {\n\t\t\tlast = true\n\t\t} else {\n\t\t\tb = b | 0x80\n\t\t}\n\t\tout.WriteByte(b)\n\n\t\tif last {\n\t\t\tbreak\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/leb128/encode_test.go",
    "content": "package leb128\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n)\n\nfunc TestEncodeUnsigned(t *testing.T) {\n\tt.Parallel()\n\ttc := []uint64{0x00, 0x7f, 0x80, 0x8f, 0xffff, 0xfffffff7}\n\tfor i := range tc {\n\t\tvar buf bytes.Buffer\n\t\tEncodeUnsigned(&buf, tc[i])\n\t\tenc := append([]byte{}, buf.Bytes()...)\n\t\tbuf.Write([]byte{0x1, 0x2, 0x3})\n\t\tout, c := DecodeUnsigned(&buf)\n\t\tt.Logf(\"input %x output %x encoded %x\", tc[i], out, enc)\n\t\tif c != uint32(len(enc)) {\n\t\t\tt.Errorf(\"wrong encode\")\n\t\t}\n\t\tif out != tc[i] {\n\t\t\tt.Errorf(\"wrong encode\")\n\t\t}\n\t}\n}\n\nfunc TestEncodeSigned(t *testing.T) {\n\tt.Parallel()\n\ttc := []int64{2, -2, 127, -127, 128, -128, 129, -129}\n\tfor i := range tc {\n\t\tvar buf bytes.Buffer\n\t\tEncodeSigned(&buf, tc[i])\n\t\tenc := append([]byte{}, buf.Bytes()...)\n\t\tbuf.Write([]byte{0x1, 0x2, 0x3})\n\t\tout, c := DecodeSigned(&buf)\n\t\tt.Logf(\"input %x output %x encoded %x\", tc[i], out, enc)\n\t\tif c != uint32(len(enc)) {\n\t\t\tt.Errorf(\"wrong encode\")\n\t\t}\n\t\tif out != tc[i] {\n\t\t\tt.Errorf(\"wrong encode\")\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/line/line_parser.go",
    "content": "package line\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"path\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\n// DebugLinePrologue prologue of .debug_line data.\ntype DebugLinePrologue struct {\n\tUnitLength     uint32\n\tVersion        uint16\n\tLength         uint32\n\tMinInstrLength uint8\n\tMaxOpPerInstr  uint8\n\tInitialIsStmt  uint8\n\tLineBase       int8\n\tLineRange      uint8\n\tOpcodeBase     uint8\n\tStdOpLengths   []uint8\n}\n\n// DebugLineInfo info of .debug_line data.\ntype DebugLineInfo struct {\n\tPrologue     *DebugLinePrologue\n\tIncludeDirs  []string\n\tFileNames    []*FileEntry\n\tInstructions []byte\n\tLookup       map[string]*FileEntry\n\n\tLogf func(string, ...any)\n\n\t// stateMachineCache[pc] is a state machine stopped at pc\n\tstateMachineCache map[uint64]*StateMachine\n\n\t// lastMachineCache[pc] is a state machine stopped at an address after pc\n\tlastMachineCache map[uint64]*StateMachine\n\n\t// debugLineStr is the contents of the .debug_line_str section.\n\tdebugLineStr []byte\n\n\t// staticBase is the address at which the executable is loaded, 0 for non-PIEs\n\tstaticBase uint64\n\n\t// if normalizeBackslash is true all backslashes (\\) will be converted into forward slashes (/)\n\tnormalizeBackslash bool\n\tptrSize            int\n\tendSeqIsValid      bool\n}\n\n// FileEntry file entry in File Name Table.\ntype FileEntry struct {\n\tPath        string\n\tDirIdx      uint64\n\tLastModTime uint64\n\tLength      uint64\n}\n\ntype DebugLines []*DebugLineInfo\n\n// ParseAll parses all debug_line segments found in data\nfunc ParseAll(data []byte, debugLineStr []byte, logfn func(string, ...any), staticBase uint64, normalizeBackslash bool, ptrSize int) DebugLines {\n\tvar (\n\t\tlines = make(DebugLines, 0)\n\t\tbuf   = bytes.NewBuffer(data)\n\t)\n\n\t// We have to parse multiple file name tables here.\n\tfor buf.Len() > 0 {\n\t\tlines = append(lines, Parse(\"\", buf, debugLineStr, logfn, staticBase, normalizeBackslash, ptrSize))\n\t}\n\n\treturn lines\n}\n\n// Parse parses a single debug_line segment from buf. Compdir is the\n// DW_AT_comp_dir attribute of the associated compile unit.\nfunc Parse(compdir string, buf *bytes.Buffer, debugLineStr []byte, logfn func(string, ...any), staticBase uint64, normalizeBackslash bool, ptrSize int) *DebugLineInfo {\n\tdbl := new(DebugLineInfo)\n\tdbl.Logf = logfn\n\tif logfn == nil {\n\t\tdbl.Logf = func(string, ...any) {}\n\t}\n\tdbl.staticBase = staticBase\n\tdbl.ptrSize = ptrSize\n\tdbl.Lookup = make(map[string]*FileEntry)\n\tdbl.IncludeDirs = append(dbl.IncludeDirs, compdir)\n\n\tdbl.stateMachineCache = make(map[uint64]*StateMachine)\n\tdbl.lastMachineCache = make(map[uint64]*StateMachine)\n\tdbl.normalizeBackslash = normalizeBackslash\n\tdbl.debugLineStr = debugLineStr\n\n\tparseDebugLinePrologue(dbl, buf)\n\tif dbl.Prologue.Version >= 5 {\n\t\tif !parseIncludeDirs5(dbl, buf) {\n\t\t\treturn nil\n\t\t}\n\t\tif !parseFileEntries5(dbl, buf) {\n\t\t\treturn nil\n\t\t}\n\t} else {\n\t\tif !parseIncludeDirs2(dbl, buf) {\n\t\t\treturn nil\n\t\t}\n\t\tif !parseFileEntries2(dbl, buf) {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// Instructions size calculation breakdown:\n\t//   - dbl.Prologue.UnitLength is the length of the entire unit, not including the 4 bytes to represent that length.\n\t//   - dbl.Prologue.Length is the length of the prologue not including unit length, version or prologue length itself.\n\t//   - So you have UnitLength - PrologueLength - (version_length_bytes(2) + prologue_length_bytes(4)).\n\tverDelta := uint32(6)\n\tif dbl.Prologue.Version >= 5 {\n\t\tverDelta = uint32(8)\n\t}\n\tdbl.Instructions = buf.Next(int(dbl.Prologue.UnitLength - dbl.Prologue.Length - verDelta))\n\n\treturn dbl\n}\n\nfunc parseDebugLinePrologue(dbl *DebugLineInfo, buf *bytes.Buffer) {\n\tp := new(DebugLinePrologue)\n\n\tp.UnitLength = binary.LittleEndian.Uint32(buf.Next(4))\n\tp.Version = binary.LittleEndian.Uint16(buf.Next(2))\n\tif p.Version >= 5 {\n\t\tdbl.ptrSize = int(buf.Next(1)[0])  // address_size\n\t\tdbl.ptrSize += int(buf.Next(1)[0]) // segment_selector_size\n\t}\n\n\tp.Length = binary.LittleEndian.Uint32(buf.Next(4))\n\tp.MinInstrLength = buf.Next(1)[0]\n\tif p.Version >= 4 {\n\t\tp.MaxOpPerInstr = buf.Next(1)[0]\n\t} else {\n\t\tp.MaxOpPerInstr = 1\n\t}\n\tp.InitialIsStmt = buf.Next(1)[0]\n\tp.LineBase = int8(buf.Next(1)[0])\n\tp.LineRange = buf.Next(1)[0]\n\tp.OpcodeBase = buf.Next(1)[0]\n\n\tp.StdOpLengths = make([]uint8, p.OpcodeBase-1)\n\tbinary.Read(buf, binary.LittleEndian, &p.StdOpLengths)\n\n\tdbl.Prologue = p\n}\n\n// parseIncludeDirs2 parses the directory table for DWARF version 2 through 4.\nfunc parseIncludeDirs2(info *DebugLineInfo, buf *bytes.Buffer) bool {\n\tfor {\n\t\tstr, err := dwarf.ReadString(buf)\n\t\tif err != nil {\n\t\t\tif info.Logf != nil {\n\t\t\t\tinfo.Logf(\"error reading string: %v\", err)\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t\tif str == \"\" {\n\t\t\tbreak\n\t\t}\n\n\t\tinfo.IncludeDirs = append(info.IncludeDirs, str)\n\t}\n\treturn true\n}\n\n// parseIncludeDirs5 parses the directory table for DWARF version 5.\nfunc parseIncludeDirs5(info *DebugLineInfo, buf *bytes.Buffer) bool {\n\tdirEntryFormReader := readEntryFormat(buf, info.Logf)\n\tif dirEntryFormReader == nil {\n\t\treturn false\n\t}\n\tdirCount, _ := leb128.DecodeUnsigned(buf)\n\tinfo.IncludeDirs = make([]string, 0, dirCount)\n\tfor range dirCount {\n\t\tdirEntryFormReader.reset()\n\t\tfor dirEntryFormReader.next(buf) {\n\t\t\tswitch dirEntryFormReader.contentType {\n\t\t\tcase _DW_LNCT_path:\n\t\t\t\tswitch dirEntryFormReader.formCode {\n\t\t\t\tcase _DW_FORM_string:\n\t\t\t\t\tinfo.IncludeDirs = append(info.IncludeDirs, dirEntryFormReader.str)\n\t\t\t\tcase _DW_FORM_line_strp:\n\t\t\t\t\tbuf := bytes.NewBuffer(info.debugLineStr[dirEntryFormReader.u64:])\n\t\t\t\t\tdir, _ := dwarf.ReadString(buf)\n\t\t\t\t\tinfo.IncludeDirs = append(info.IncludeDirs, dir)\n\t\t\t\tdefault:\n\t\t\t\t\tinfo.Logf(\"unsupported string form %#x\", dirEntryFormReader.formCode)\n\t\t\t\t}\n\t\t\tcase _DW_LNCT_directory_index:\n\t\t\tcase _DW_LNCT_timestamp:\n\t\t\tcase _DW_LNCT_size:\n\t\t\tcase _DW_LNCT_MD5:\n\t\t\t}\n\t\t}\n\t\tif dirEntryFormReader.err != nil {\n\t\t\tif info.Logf != nil {\n\t\t\t\tinfo.Logf(\"error reading directory entries table: %v\", dirEntryFormReader.err)\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// parseFileEntries2 parses the file table for DWARF 2 through 4\nfunc parseFileEntries2(info *DebugLineInfo, buf *bytes.Buffer) bool {\n\tfor {\n\t\tentry := readFileEntry(info, buf, true)\n\t\tif entry == nil {\n\t\t\treturn false\n\t\t}\n\t\tif entry.Path == \"\" {\n\t\t\tbreak\n\t\t}\n\n\t\tinfo.FileNames = append(info.FileNames, entry)\n\t\tinfo.Lookup[entry.Path] = entry\n\t}\n\treturn true\n}\n\nfunc readFileEntry(info *DebugLineInfo, buf *bytes.Buffer, exitOnEmptyPath bool) *FileEntry {\n\tentry := new(FileEntry)\n\n\tvar err error\n\tentry.Path, err = dwarf.ReadString(buf)\n\tif err != nil {\n\t\tif info.Logf != nil {\n\t\t\tinfo.Logf(\"error reading file entry: %v\", err)\n\t\t}\n\t\treturn nil\n\t}\n\tif entry.Path == \"\" && exitOnEmptyPath {\n\t\treturn entry\n\t}\n\n\tif info.normalizeBackslash {\n\t\tentry.Path = strings.ReplaceAll(entry.Path, \"\\\\\", \"/\")\n\t}\n\n\tentry.DirIdx, _ = leb128.DecodeUnsigned(buf)\n\tentry.LastModTime, _ = leb128.DecodeUnsigned(buf)\n\tentry.Length, _ = leb128.DecodeUnsigned(buf)\n\tif !pathIsAbs(entry.Path) {\n\t\tif entry.DirIdx < uint64(len(info.IncludeDirs)) {\n\t\t\tentry.Path = path.Join(info.IncludeDirs[entry.DirIdx], entry.Path)\n\t\t}\n\t}\n\n\treturn entry\n}\n\n// pathIsAbs returns true if this is an absolute path.\n// We can not use path.IsAbs because it will not recognize windows paths as\n// absolute. We also can not use filepath.Abs because we want this\n// processing to be independent of the host operating system (we could be\n// reading an executable file produced on windows on a unix machine or vice\n// versa).\nfunc pathIsAbs(s string) bool {\n\tif len(s) >= 1 && s[0] == '/' {\n\t\treturn true\n\t}\n\tif len(s) >= 2 && s[1] == ':' && (('a' <= s[0] && s[0] <= 'z') || ('A' <= s[0] && s[0] <= 'Z')) {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// parseFileEntries5 parses the file table for DWARF 5\nfunc parseFileEntries5(info *DebugLineInfo, buf *bytes.Buffer) bool {\n\tfileEntryFormReader := readEntryFormat(buf, info.Logf)\n\tif fileEntryFormReader == nil {\n\t\treturn false\n\t}\n\tfileCount, _ := leb128.DecodeUnsigned(buf)\n\tinfo.FileNames = make([]*FileEntry, 0, fileCount)\n\tfor i := 0; i < int(fileCount); i++ {\n\t\tvar (\n\t\t\tp      string\n\t\t\tdiridx int\n\n\t\t\tentry = new(FileEntry)\n\t\t)\n\n\t\tfileEntryFormReader.reset()\n\n\t\tfor fileEntryFormReader.next(buf) {\n\t\t\tdiridx = -1\n\n\t\t\tswitch fileEntryFormReader.contentType {\n\t\t\tcase _DW_LNCT_path:\n\t\t\t\tswitch fileEntryFormReader.formCode {\n\t\t\t\tcase _DW_FORM_string:\n\t\t\t\t\tp = fileEntryFormReader.str\n\t\t\t\tcase _DW_FORM_line_strp:\n\t\t\t\t\tbuf := bytes.NewBuffer(info.debugLineStr[fileEntryFormReader.u64:])\n\t\t\t\t\tp, _ = dwarf.ReadString(buf)\n\t\t\t\tdefault:\n\t\t\t\t\tinfo.Logf(\"unsupported string form %#x\", fileEntryFormReader.formCode)\n\t\t\t\t}\n\t\t\tcase _DW_LNCT_directory_index:\n\t\t\t\tdiridx = int(fileEntryFormReader.u64)\n\t\t\tcase _DW_LNCT_timestamp:\n\t\t\t\tentry.LastModTime = fileEntryFormReader.u64\n\t\t\tcase _DW_LNCT_size:\n\t\t\t\tentry.Length = fileEntryFormReader.u64\n\t\t\tcase _DW_LNCT_MD5:\n\t\t\t\t// not implemented\n\t\t\t}\n\t\t}\n\t\tif fileEntryFormReader.err != nil {\n\t\t\tif info.Logf != nil {\n\t\t\t\tinfo.Logf(\"error reading file entries table: %v\", fileEntryFormReader.err)\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\n\t\tif diridx >= 0 && diridx < len(info.IncludeDirs) {\n\t\t\tp = path.Join(info.IncludeDirs[diridx], p)\n\t\t}\n\t\tif info.normalizeBackslash {\n\t\t\tp = strings.ReplaceAll(p, \"\\\\\", \"/\")\n\t\t}\n\t\tentry.Path = p\n\t\tinfo.FileNames = append(info.FileNames, entry)\n\t\tinfo.Lookup[entry.Path] = entry\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "pkg/dwarf/line/line_parser_test.go",
    "content": "package line\n\nimport (\n\t\"compress/zlib\"\n\t\"debug/elf\"\n\t\"debug/macho\"\n\t\"debug/pe\"\n\t\"flag\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"slices\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n)\n\nvar userTestFile string\n\nfunc TestMain(m *testing.M) {\n\tflag.StringVar(&userTestFile, \"user\", \"\", \"runs line parsing test on one extra file\")\n\tflag.Parse()\n\tm.Run()\n}\n\nfunc grabDebugLineSection(p string, t *testing.T) []byte {\n\tf, err := os.Open(p)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer f.Close()\n\n\tef, err := elf.NewFile(f)\n\tif err == nil {\n\t\tdata, _ := godwarf.GetDebugSectionElf(ef, \"line\")\n\t\treturn data\n\t}\n\n\tpf, err := pe.NewFile(f)\n\tif err == nil {\n\t\tdata, _ := godwarf.GetDebugSectionPE(pf, \"line\")\n\t\treturn data\n\t}\n\n\tmf, err := macho.NewFile(f)\n\tif err == nil {\n\t\tdata, _ := godwarf.GetDebugSectionMacho(mf, \"line\")\n\t\treturn data\n\t}\n\n\treturn nil\n}\n\nconst (\n\tlineBaseGo14    int8   = -1\n\tlineBaseGo18    int8   = -4\n\tlineRangeGo14   uint8  = 4\n\tlineRangeGo18   uint8  = 10\n\tversionGo14     uint16 = 2\n\tversionGo111    uint16 = 3\n\tversionGo125    uint16 = 5\n\topcodeBaseGo14  uint8  = 10\n\topcodeBaseGo111 uint8  = 11\n)\n\nfunc ptrSizeByRuntimeArch() int {\n\treturn int(unsafe.Sizeof(uintptr(0)))\n}\n\nfunc testDebugLinePrologueParser(p string, t *testing.T) {\n\tdata := grabDebugLineSection(p, t)\n\tdebugLines := ParseAll(data, nil, nil, 0, true, ptrSizeByRuntimeArch())\n\tmainFileFound := false\n\n\tfor _, dbl := range debugLines {\n\t\tprologue := dbl.Prologue\n\n\t\tif prologue.Version != versionGo14 && prologue.Version != versionGo111 && prologue.Version != versionGo125 {\n\t\t\tt.Fatal(\"Version not parsed correctly\", prologue.Version)\n\t\t}\n\n\t\tif prologue.MinInstrLength != uint8(1) {\n\t\t\tt.Fatal(\"Minimum Instruction Length not parsed correctly\", prologue.MinInstrLength)\n\t\t}\n\n\t\tif prologue.InitialIsStmt != uint8(1) {\n\t\t\tt.Fatal(\"Initial value of 'is_stmt' not parsed correctly\", prologue.InitialIsStmt)\n\t\t}\n\n\t\tif prologue.LineBase != lineBaseGo14 && prologue.LineBase != lineBaseGo18 {\n\t\t\t// go < 1.8 uses -1\n\t\t\t// go >= 1.8 uses -4\n\t\t\tt.Fatal(\"Line base not parsed correctly\", prologue.LineBase)\n\t\t}\n\n\t\tif prologue.LineRange != lineRangeGo14 && prologue.LineRange != lineRangeGo18 {\n\t\t\t// go < 1.8 uses 4\n\t\t\t// go >= 1.8 uses 10\n\t\t\tt.Fatal(\"Line Range not parsed correctly\", prologue.LineRange)\n\t\t}\n\n\t\tif prologue.OpcodeBase != opcodeBaseGo14 && prologue.OpcodeBase != opcodeBaseGo111 {\n\t\t\tt.Fatal(\"Opcode Base not parsed correctly\", prologue.OpcodeBase)\n\t\t}\n\n\t\tlengths := []uint8{0, 1, 1, 1, 1, 0, 0, 0, 1, 0}\n\t\tfor i, l := range prologue.StdOpLengths {\n\t\t\tif l != lengths[i] {\n\t\t\t\tt.Fatal(\"Length not parsed correctly\", l)\n\t\t\t}\n\t\t}\n\n\t\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 16) {\n\t\t\tif len(dbl.IncludeDirs) != 1 {\n\t\t\t\tt.Fatal(\"Include dirs not parsed correctly\")\n\t\t\t}\n\t\t}\n\n\t\tfor _, ln := range dbl.Lookup {\n\t\t\tif ln.Path == \"<autogenerated>\" || ln.Path == \"?\" || strings.HasPrefix(ln.Path, \"<missing>_\") || ln.Path == \"_gomod_.go\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif _, err := os.Stat(ln.Path); err != nil {\n\t\t\t\tt.Fatalf(\"Invalid input path %s: %s\\n\", ln.Path, err)\n\t\t\t}\n\t\t}\n\n\t\tfor _, n := range dbl.FileNames {\n\t\t\tt.Logf(\"file %s\\n\", n.Path)\n\t\t\tif strings.Contains(n.Path, \"/_fixtures/testnextprog.go\") {\n\t\t\t\tmainFileFound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif !mainFileFound {\n\t\tt.Fatal(\"File names table not parsed correctly\")\n\t}\n}\n\nfunc TestUserFile(t *testing.T) {\n\tt.Parallel()\n\tif userTestFile == \"\" {\n\t\treturn\n\t}\n\tt.Logf(\"testing %q\", userTestFile)\n\ttestDebugLinePrologueParser(userTestFile, t)\n}\n\nfunc TestDebugLinePrologueParser(t *testing.T) {\n\tt.Parallel()\n\t// Test against known good values, from readelf --debug-dump=rawline _fixtures/testnextprog\n\tp, err := filepath.Abs(\"../../../_fixtures/testnextprog\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\terr = exec.Command(\"go\", \"build\", \"-gcflags=-N -l\", \"-o\", p, p+\".go\").Run()\n\tif err != nil {\n\t\tt.Fatal(\"Could not compile test file\", p, err)\n\t}\n\tdefer os.Remove(p)\n\ttestDebugLinePrologueParser(p, t)\n}\n\nfunc BenchmarkLineParser(b *testing.B) {\n\tp, err := filepath.Abs(\"../../../_fixtures/testnextprog\")\n\tif err != nil {\n\t\tb.Fatal(err)\n\t}\n\terr = exec.Command(\"go\", \"build\", \"-gcflags=-N -l\", \"-o\", p, p+\".go\").Run()\n\tif err != nil {\n\t\tb.Fatal(\"Could not compile test file\", p, err)\n\t}\n\tdefer os.Remove(p)\n\n\tdata := grabDebugLineSection(p, nil)\n\n\tfor b.Loop() {\n\t\t_ = ParseAll(data, nil, nil, 0, true, ptrSizeByRuntimeArch())\n\t}\n}\n\nfunc loadBenchmarkData(tb testing.TB) DebugLines {\n\tp, err := filepath.Abs(\"../../../_fixtures/debug_line_benchmark_data\")\n\tif err != nil {\n\t\ttb.Fatal(\"Could not find test data\", p, err)\n\t}\n\n\tdata, err := os.ReadFile(p)\n\tif err != nil {\n\t\ttb.Fatal(\"Could not read test data\", err)\n\t}\n\n\treturn ParseAll(data, nil, nil, 0, true, ptrSizeByRuntimeArch())\n}\n\nfunc BenchmarkStateMachine(b *testing.B) {\n\tlineInfos := loadBenchmarkData(b)\n\n\tfor b.Loop() {\n\t\tsm := newStateMachine(lineInfos[0], lineInfos[0].Instructions, ptrSizeByRuntimeArch())\n\n\t\tfor {\n\t\t\tif err := sm.next(); err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n}\n\ntype pctolineEntry struct {\n\tpc   uint64\n\tfile string\n\tline int\n}\n\nfunc (entry *pctolineEntry) match(file string, line int) bool {\n\tif entry.file == \"\" {\n\t\treturn true\n\t}\n\treturn entry.file == file && entry.line == line\n}\n\nfunc setupTestPCToLine(t testing.TB, lineInfos DebugLines) ([]pctolineEntry, []uint64) {\n\tentries := []pctolineEntry{}\n\tbasePCs := []uint64{}\n\n\tsm := newStateMachine(lineInfos[0], lineInfos[0].Instructions, ptrSizeByRuntimeArch())\n\tfor {\n\t\tif err := sm.next(); err != nil {\n\t\t\tbreak\n\t\t}\n\t\tif sm.valid {\n\t\t\tif len(entries) == 0 || entries[len(entries)-1].pc != sm.address {\n\t\t\t\tentries = append(entries, pctolineEntry{pc: sm.address, file: sm.file, line: sm.line})\n\t\t\t} else if len(entries) > 0 {\n\t\t\t\t// having two entries at the same PC address messes up the test\n\t\t\t\tentries[len(entries)-1].file = \"\"\n\t\t\t}\n\t\t\tif len(basePCs) == 0 || sm.address-basePCs[len(basePCs)-1] >= 0x1000 {\n\t\t\t\tbasePCs = append(basePCs, sm.address)\n\t\t\t}\n\t\t}\n\t}\n\n\tfor i := 1; i < len(entries); i++ {\n\t\tif entries[i].pc <= entries[i-1].pc {\n\t\t\tt.Fatalf(\"not monotonically increasing %d %x\", i, entries[i].pc)\n\t\t}\n\t}\n\n\treturn entries, basePCs\n}\n\nfunc runTestPCToLine(t testing.TB, lineInfos DebugLines, entries []pctolineEntry, basePCs []uint64, log bool, testSize uint64) {\n\tconst samples = 1000\n\tt0 := time.Now()\n\n\ti := 0\n\tbasePCIdx := 0\n\tfor pc := entries[0].pc; pc <= entries[0].pc+testSize; pc++ {\n\t\tif basePCIdx+1 < len(basePCs) && pc >= basePCs[basePCIdx+1] {\n\t\t\tbasePCIdx++\n\t\t}\n\t\tbasePC := basePCs[basePCIdx]\n\t\tfile, line := lineInfos[0].PCToLine(basePC, pc)\n\t\tif pc == entries[i].pc {\n\t\t\tif i%samples == 0 && log {\n\t\t\t\tt.Logf(\"match %x / %x (%v)\\n\", pc, entries[len(entries)-1].pc, time.Since(t0)/samples)\n\t\t\t\tt0 = time.Now()\n\t\t\t}\n\n\t\t\tif !entries[i].match(file, line) {\n\t\t\t\tt.Fatalf(\"Mismatch at PC %#x, expected %s:%d got %s:%d\", pc, entries[i].file, entries[i].line, file, line)\n\t\t\t}\n\t\t\ti++\n\t\t} else if !entries[i-1].match(file, line) {\n\t\t\tt.Fatalf(\"Mismatch at PC %#x, expected %s:%d (from previous valid entry) got %s:%d\", pc, entries[i-1].file, entries[i-1].line, file, line)\n\t\t}\n\t}\n}\n\nfunc TestPCToLine(t *testing.T) {\n\tt.Parallel()\n\tlineInfos := loadBenchmarkData(t)\n\n\tentries, basePCs := setupTestPCToLine(t, lineInfos)\n\trunTestPCToLine(t, lineInfos, entries, basePCs, true, 0x50000)\n\tt.Logf(\"restart form beginning\")\n\trunTestPCToLine(t, lineInfos, entries, basePCs, true, 0x10000)\n}\n\nfunc BenchmarkPCToLine(b *testing.B) {\n\tlineInfos := loadBenchmarkData(b)\n\n\tentries, basePCs := setupTestPCToLine(b, lineInfos)\n\n\tfor b.Loop() {\n\t\trunTestPCToLine(b, lineInfos, entries, basePCs, false, 0x10000)\n\t}\n}\n\nfunc TestDebugLineC(t *testing.T) {\n\tt.Parallel()\n\tp, err := filepath.Abs(\"../../../_fixtures/debug_line_c_data\")\n\tif err != nil {\n\t\tt.Fatal(\"Could not find test data\", p, err)\n\t}\n\n\tdata, err := os.ReadFile(p)\n\tif err != nil {\n\t\tt.Fatal(\"Could not read test data\", err)\n\t}\n\n\tparsed := ParseAll(data, nil, nil, 0, true, ptrSizeByRuntimeArch())\n\n\tif len(parsed) == 0 {\n\t\tt.Fatal(\"Parser result is empty\")\n\t}\n\n\tfile := []string{\"main.c\", \"/mnt/c/develop/delve/_fixtures/main.c\", \"/usr/lib/gcc/x86_64-linux-gnu/7/include/stddef.h\",\n\t\t\"/usr/include/x86_64-linux-gnu/bits/types.h\", \"/usr/include/x86_64-linux-gnu/bits/libio.h\", \"/usr/include/stdio.h\",\n\t\t\"/usr/include/x86_64-linux-gnu/bits/sys_errlist.h\"}\n\n\tfor _, ln := range parsed {\n\t\tif len(ln.FileNames) == 0 {\n\t\t\tt.Fatal(\"Parser could not parse Filenames\")\n\t\t}\n\t\tfor _, fn := range ln.FileNames {\n\t\t\tif !slices.Contains(file, filepath.ToSlash(fn.Path)) {\n\t\t\t\tt.Fatalf(\"Found %s does not appear in the filelist\\n\", fn.Path)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestDebugLineDwarf4(t *testing.T) {\n\tt.Parallel()\n\tp, err := filepath.Abs(\"../../../_fixtures/zdebug_line_dwarf4\")\n\tif err != nil {\n\t\tt.Fatal(\"Could not find test data\", p, err)\n\t}\n\tfh, err := os.Open(p)\n\tif err != nil {\n\t\tt.Fatal(\"Could not open test data\", err)\n\t}\n\tdefer fh.Close()\n\tfh.Seek(12, 0) // skip \"ZLIB\" magic signature and length\n\tr, err := zlib.NewReader(fh)\n\tif err != nil {\n\t\tt.Fatal(\"Could not open test data (zlib)\", err)\n\t}\n\tdata, err := io.ReadAll(r)\n\tif err != nil {\n\t\tt.Fatal(\"Could not read test data\", err)\n\t}\n\n\tdebugLines := ParseAll(data, nil, nil, 0, true, 8)\n\n\tfor _, dbl := range debugLines {\n\t\tif dbl.Prologue.Version == 4 {\n\t\t\tif dbl.Prologue.LineBase != -5 {\n\t\t\t\tt.Errorf(\"Wrong LineBase %d\\n\", dbl.Prologue.LineBase)\n\t\t\t}\n\t\t\tif dbl.Prologue.LineRange != 14 {\n\t\t\t\tt.Errorf(\"Wrong LineRange %d\\n\", dbl.Prologue.LineRange)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/line/parse_util.go",
    "content": "package line\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\nconst (\n\t_DW_FORM_block      = 0x09\n\t_DW_FORM_block1     = 0x0a\n\t_DW_FORM_block2     = 0x03\n\t_DW_FORM_block4     = 0x04\n\t_DW_FORM_data1      = 0x0b\n\t_DW_FORM_data2      = 0x05\n\t_DW_FORM_data4      = 0x06\n\t_DW_FORM_data8      = 0x07\n\t_DW_FORM_data16     = 0x1e\n\t_DW_FORM_flag       = 0x0c\n\t_DW_FORM_line_strp  = 0x1f\n\t_DW_FORM_sdata      = 0x0d\n\t_DW_FORM_sec_offset = 0x17\n\t_DW_FORM_string     = 0x08\n\t_DW_FORM_strp       = 0x0e\n\t_DW_FORM_strx       = 0x1a\n\t_DW_FORM_strx1      = 0x25\n\t_DW_FORM_strx2      = 0x26\n\t_DW_FORM_strx3      = 0x27\n\t_DW_FORM_strx4      = 0x28\n\t_DW_FORM_udata      = 0x0f\n)\n\nconst (\n\t_DW_LNCT_path = 0x1 + iota\n\t_DW_LNCT_directory_index\n\t_DW_LNCT_timestamp\n\t_DW_LNCT_size\n\t_DW_LNCT_MD5\n)\n\nvar ErrBufferUnderflow = errors.New(\"buffer underflow\")\n\ntype formReader struct {\n\tlogf         func(string, ...any)\n\tcontentTypes []uint64\n\tformCodes    []uint64\n\n\tcontentType uint64\n\tformCode    uint64\n\n\tblock []byte\n\tu64   uint64\n\ti64   int64\n\tstr   string\n\terr   error\n\n\tnexti int\n}\n\nfunc readEntryFormat(buf *bytes.Buffer, logf func(string, ...any)) *formReader {\n\tif buf.Len() < 1 {\n\t\treturn nil\n\t}\n\tcount := buf.Next(1)[0]\n\tr := &formReader{\n\t\tlogf:         logf,\n\t\tcontentTypes: make([]uint64, count),\n\t\tformCodes:    make([]uint64, count),\n\t}\n\tfor i := range r.contentTypes {\n\t\tr.contentTypes[i], _ = leb128.DecodeUnsigned(buf)\n\t\tr.formCodes[i], _ = leb128.DecodeUnsigned(buf)\n\t}\n\treturn r\n}\n\nfunc (rdr *formReader) reset() {\n\trdr.err = nil\n\trdr.nexti = 0\n}\n\nfunc (rdr *formReader) next(buf *bytes.Buffer) bool {\n\tif rdr.err != nil {\n\t\treturn false\n\t}\n\tif rdr.nexti >= len(rdr.contentTypes) {\n\t\treturn false\n\t}\n\n\trdr.contentType = rdr.contentTypes[rdr.nexti]\n\trdr.formCode = rdr.formCodes[rdr.nexti]\n\n\tswitch rdr.formCode {\n\tcase _DW_FORM_block:\n\t\tn, _ := leb128.DecodeUnsigned(buf)\n\t\trdr.readBlock(buf, n)\n\n\tcase _DW_FORM_block1:\n\t\tif buf.Len() < 1 {\n\t\t\trdr.err = ErrBufferUnderflow\n\t\t\treturn false\n\t\t}\n\t\trdr.readBlock(buf, uint64(buf.Next(1)[0]))\n\n\tcase _DW_FORM_block2:\n\t\tif buf.Len() < 2 {\n\t\t\trdr.err = ErrBufferUnderflow\n\t\t\treturn false\n\t\t}\n\t\trdr.readBlock(buf, uint64(binary.LittleEndian.Uint16(buf.Next(2))))\n\n\tcase _DW_FORM_block4:\n\t\tif buf.Len() < 4 {\n\t\t\trdr.err = ErrBufferUnderflow\n\t\t\treturn false\n\t\t}\n\t\trdr.readBlock(buf, uint64(binary.LittleEndian.Uint32(buf.Next(4))))\n\n\tcase _DW_FORM_data1, _DW_FORM_flag, _DW_FORM_strx1:\n\t\tif buf.Len() < 1 {\n\t\t\trdr.err = ErrBufferUnderflow\n\t\t\treturn false\n\t\t}\n\t\trdr.u64 = uint64(buf.Next(1)[0])\n\n\tcase _DW_FORM_data2, _DW_FORM_strx2:\n\t\tif buf.Len() < 2 {\n\t\t\trdr.err = ErrBufferUnderflow\n\t\t\treturn false\n\t\t}\n\t\trdr.u64 = uint64(binary.LittleEndian.Uint16(buf.Next(2)))\n\n\tcase _DW_FORM_data4, _DW_FORM_line_strp, _DW_FORM_sec_offset, _DW_FORM_strp, _DW_FORM_strx4:\n\t\tif buf.Len() < 4 {\n\t\t\trdr.err = ErrBufferUnderflow\n\t\t\treturn false\n\t\t}\n\t\trdr.u64 = uint64(binary.LittleEndian.Uint32(buf.Next(4)))\n\n\tcase _DW_FORM_data8:\n\t\tif buf.Len() < 8 {\n\t\t\trdr.err = ErrBufferUnderflow\n\t\t\treturn false\n\t\t}\n\t\trdr.u64 = binary.LittleEndian.Uint64(buf.Next(8))\n\n\tcase _DW_FORM_data16:\n\t\trdr.readBlock(buf, 16)\n\n\tcase _DW_FORM_sdata:\n\t\trdr.i64, _ = leb128.DecodeSigned(buf)\n\n\tcase _DW_FORM_udata, _DW_FORM_strx:\n\t\trdr.u64, _ = leb128.DecodeUnsigned(buf)\n\n\tcase _DW_FORM_string:\n\t\trdr.str, _ = dwarf.ReadString(buf)\n\n\tcase _DW_FORM_strx3:\n\t\tif buf.Len() < 3 {\n\t\t\trdr.err = ErrBufferUnderflow\n\t\t\treturn false\n\t\t}\n\t\trdr.u64 = uint64(binary.LittleEndian.Uint32(append(buf.Next(3), 0x0)))\n\n\tcase ^uint64(0):\n\t\t// do nothing\n\n\tdefault:\n\t\tif rdr.logf != nil {\n\t\t\trdr.logf(\"unknown form code %#x\", rdr.formCode)\n\t\t}\n\t\trdr.formCodes[rdr.nexti] = ^uint64(0) // only print error once\n\t}\n\n\trdr.nexti++\n\treturn true\n}\n\nfunc (rdr *formReader) readBlock(buf *bytes.Buffer, n uint64) {\n\tif uint64(buf.Len()) < n {\n\t\trdr.err = ErrBufferUnderflow\n\t\treturn\n\t}\n\tif cap(rdr.block) < int(n) {\n\t\trdr.block = make([]byte, 0, n)\n\t}\n\trdr.block = rdr.block[:n]\n\tbuf.Read(rdr.block)\n}\n"
  },
  {
    "path": "pkg/dwarf/line/state_machine.go",
    "content": "package line\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\ntype Location struct {\n\tFile    string\n\tLine    int\n\tAddress uint64\n\tDelta   int\n}\n\ntype StateMachine struct {\n\tdbl           *DebugLineInfo\n\tfile          string\n\tline          int\n\taddress       uint64\n\tcolumn        uint\n\tisStmt        bool\n\tisa           uint64 // instruction set architecture register (DWARFv4)\n\tbasicBlock    bool\n\tendSeq        bool\n\tlastDelta     int\n\tprologueEnd   bool\n\tepilogueBegin bool\n\t// valid is true if the current value of the state machine is the address of\n\t// an instruction (using the terminology used by DWARF spec the current\n\t// value of the state machine should be appended to the matrix representing\n\t// the compilation unit)\n\tvalid bool\n\n\tstarted bool\n\n\tbuf     *bytes.Buffer // remaining instructions\n\topcodes []opcodefn\n\n\tdefinedFiles []*FileEntry // files defined with DW_LINE_define_file\n\n\tlastAddress uint64\n\tlastFile    string\n\tlastLine    int\n\tptrSize     int\n}\n\ntype opcodefn func(*StateMachine, *bytes.Buffer)\n\n// Special opcodes\nconst (\n\tDW_LNS_copy             = 1\n\tDW_LNS_advance_pc       = 2\n\tDW_LNS_advance_line     = 3\n\tDW_LNS_set_file         = 4\n\tDW_LNS_set_column       = 5\n\tDW_LNS_negate_stmt      = 6\n\tDW_LNS_set_basic_block  = 7\n\tDW_LNS_const_add_pc     = 8\n\tDW_LNS_fixed_advance_pc = 9\n\tDW_LNS_prologue_end     = 10\n\tDW_LNS_epilogue_begin   = 11\n\tDW_LNS_set_isa          = 12\n)\n\n// Extended opcodes\nconst (\n\tDW_LINE_end_sequence      = 1\n\tDW_LINE_set_address       = 2\n\tDW_LINE_define_file       = 3\n\tDW_LINE_set_discriminator = 4\n)\n\nvar standardopcodes = map[byte]opcodefn{\n\tDW_LNS_copy:             copyfn,\n\tDW_LNS_advance_pc:       advancepc,\n\tDW_LNS_advance_line:     advanceline,\n\tDW_LNS_set_file:         setfile,\n\tDW_LNS_set_column:       setcolumn,\n\tDW_LNS_negate_stmt:      negatestmt,\n\tDW_LNS_set_basic_block:  setbasicblock,\n\tDW_LNS_const_add_pc:     constaddpc,\n\tDW_LNS_fixed_advance_pc: fixedadvancepc,\n\tDW_LNS_prologue_end:     prologueend,\n\tDW_LNS_epilogue_begin:   epiloguebegin,\n\tDW_LNS_set_isa:          setisa,\n}\n\nvar extendedopcodes = map[byte]opcodefn{\n\tDW_LINE_end_sequence:      endsequence,\n\tDW_LINE_set_address:       setaddress,\n\tDW_LINE_define_file:       definefile,\n\tDW_LINE_set_discriminator: setdiscriminator,\n}\n\nfunc newStateMachine(dbl *DebugLineInfo, instructions []byte, ptrSize int) *StateMachine {\n\topcodes := make([]opcodefn, len(standardopcodes)+1)\n\topcodes[0] = execExtendedOpcode\n\tfor op := range standardopcodes {\n\t\topcodes[op] = standardopcodes[op]\n\t}\n\tvar file string\n\tif len(dbl.FileNames) > 0 {\n\t\tfile = dbl.defaultFile()\n\t}\n\tdbl.endSeqIsValid = true\n\tsm := &StateMachine{\n\t\tdbl:         dbl,\n\t\tfile:        file,\n\t\tline:        1,\n\t\tbuf:         bytes.NewBuffer(instructions),\n\t\topcodes:     opcodes,\n\t\tisStmt:      dbl.Prologue.InitialIsStmt == uint8(1),\n\t\taddress:     dbl.staticBase,\n\t\tlastAddress: ^uint64(0),\n\t\tptrSize:     ptrSize,\n\t}\n\treturn sm\n}\n\nfunc (dbl *DebugLineInfo) defaultFile() string {\n\t// The default file is always file 1, however DWARFv5 starts numbering the\n\t// entries of the files table from 0 but prior versions started with 1\n\t// which means that for DWARFv4 and earlier the default file is the first\n\t// entry of the table where in DWARFv5 the default is the second entry.\n\t// See DWARFv4 and DWARFv5 section 6.2.4 at the end.\n\tif dbl.Prologue.Version < 5 {\n\t\treturn dbl.FileNames[0].Path\n\t}\n\tif len(dbl.FileNames) == 1 {\n\t\t// DWARFv5 doesn't say what should happen in this case.\n\t\treturn dbl.FileNames[0].Path\n\t}\n\treturn dbl.FileNames[1].Path\n}\n\n// AllPCsForFileLines Adds all PCs for a given file and set (domain of map) of lines\n// to the map value corresponding to each line.\nfunc (lineInfo *DebugLineInfo) AllPCsForFileLines(f string, m map[int][]uint64) {\n\tif lineInfo == nil {\n\t\treturn\n\t}\n\n\tvar (\n\t\tlastAddr uint64\n\t\tsm       = newStateMachine(lineInfo, lineInfo.Instructions, lineInfo.ptrSize)\n\t)\n\n\tfor {\n\t\tif err := sm.next(); err != nil {\n\t\t\tif lineInfo.Logf != nil {\n\t\t\t\tlineInfo.Logf(\"AllPCsForFileLine error: %v\", err)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif sm.address != lastAddr && sm.isStmt && sm.valid && sm.file == f {\n\t\t\tif pcs, ok := m[sm.line]; ok {\n\t\t\t\tpcs = append(pcs, sm.address)\n\t\t\t\tm[sm.line] = pcs\n\t\t\t\tlastAddr = sm.address\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar ErrNoSource = errors.New(\"no source available\")\n\n// AllPCsBetween returns all PC addresses between begin and end (including both begin and end)\n// that have the is_stmt flag set and do not belong to excludeFile:excludeLine.\nfunc (lineInfo *DebugLineInfo) AllPCsBetween(begin, end uint64, excludeFile string, excludeLine int) ([]uint64, error) {\n\tif lineInfo == nil {\n\t\treturn nil, ErrNoSource\n\t}\n\n\tvar (\n\t\tpcs      []uint64\n\t\tlastaddr uint64\n\t\tsm       = newStateMachine(lineInfo, lineInfo.Instructions, lineInfo.ptrSize)\n\t)\n\n\tfor {\n\t\tif err := sm.next(); err != nil {\n\t\t\tif lineInfo.Logf != nil {\n\t\t\t\tlineInfo.Logf(\"AllPCsBetween error: %v\", err)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif !sm.valid {\n\t\t\tcontinue\n\t\t}\n\t\tif (sm.address > end) && (end >= sm.lastAddress) {\n\t\t\tbreak\n\t\t}\n\t\tif sm.address >= begin && sm.address <= end && sm.address > lastaddr && sm.isStmt && !sm.endSeq && ((sm.file != excludeFile) || (sm.line != excludeLine)) {\n\t\t\tlastaddr = sm.address\n\t\t\tpcs = append(pcs, sm.address)\n\t\t}\n\t}\n\treturn pcs, nil\n}\n\n// copy returns a copy of this state machine, running the returned state\n// machine will not affect sm.\nfunc (sm *StateMachine) copy() *StateMachine {\n\tvar r StateMachine\n\tr = *sm\n\tr.buf = bytes.NewBuffer(sm.buf.Bytes())\n\treturn &r\n}\n\nfunc (lineInfo *DebugLineInfo) stateMachineForEntry(basePC uint64) (sm *StateMachine) {\n\tsm = lineInfo.stateMachineCache[basePC]\n\tif sm == nil {\n\t\tsm = newStateMachine(lineInfo, lineInfo.Instructions, lineInfo.ptrSize)\n\t\tsm.PCToLine(basePC)\n\t\tlineInfo.stateMachineCache[basePC] = sm\n\t}\n\tsm = sm.copy()\n\treturn\n}\n\n// PCToLine returns the filename and line number associated with pc.\n// If pc isn't found inside lineInfo's table it will return the filename and\n// line number associated with the closest PC address preceding pc.\n// basePC will be used for caching, it's normally the entry point for the\n// function containing pc.\nfunc (lineInfo *DebugLineInfo) PCToLine(basePC, pc uint64) (string, int) {\n\tif lineInfo == nil {\n\t\treturn \"\", 0\n\t}\n\tif basePC > pc {\n\t\tpanic(fmt.Errorf(\"basePC after pc %#x %#x\", basePC, pc))\n\t}\n\n\tsm := lineInfo.stateMachineFor(basePC, pc)\n\n\tfile, line, _ := sm.PCToLine(pc)\n\treturn file, line\n}\n\nfunc (lineInfo *DebugLineInfo) stateMachineFor(basePC, pc uint64) *StateMachine {\n\tvar sm *StateMachine\n\tif basePC == 0 {\n\t\tsm = newStateMachine(lineInfo, lineInfo.Instructions, lineInfo.ptrSize)\n\t} else {\n\t\t// Try to use the last state machine that we used for this function, if\n\t\t// there isn't one, or it's already past pc try to clone the cached state\n\t\t// machine stopped at the entry point of the function.\n\t\t// As a last resort start from the start of the debug_line section.\n\t\tsm = lineInfo.lastMachineCache[basePC]\n\t\tif sm == nil || sm.lastAddress >= pc {\n\t\t\tsm = lineInfo.stateMachineForEntry(basePC)\n\t\t\tlineInfo.lastMachineCache[basePC] = sm\n\t\t}\n\t}\n\treturn sm\n}\n\nfunc (sm *StateMachine) PCToLine(pc uint64) (string, int, bool) {\n\tif !sm.started {\n\t\tif err := sm.next(); err != nil {\n\t\t\tif sm.dbl.Logf != nil {\n\t\t\t\tsm.dbl.Logf(\"PCToLine error: %v\", err)\n\t\t\t}\n\t\t\treturn \"\", 0, false\n\t\t}\n\t}\n\tif sm.lastAddress > pc && sm.lastAddress != ^uint64(0) {\n\t\treturn \"\", 0, false\n\t}\n\tfor {\n\t\tif sm.valid {\n\t\t\tif (sm.address > pc) && (pc >= sm.lastAddress) {\n\t\t\t\treturn sm.lastFile, sm.lastLine, true\n\t\t\t}\n\t\t\tif sm.address == pc && !sm.endSeq {\n\t\t\t\treturn sm.file, sm.line, true\n\t\t\t}\n\t\t}\n\t\tif err := sm.next(); err != nil {\n\t\t\tif sm.dbl.Logf != nil {\n\t\t\t\tsm.dbl.Logf(\"PCToLine error: %v\", err)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\tif sm.valid && !sm.endSeq {\n\t\treturn sm.file, sm.line, true\n\t}\n\treturn \"\", 0, false\n}\n\n// PCStmt is a PC address with its is_stmt flag\ntype PCStmt struct {\n\tPC   uint64\n\tStmt bool\n}\n\n// LineToPCs returns all PCs associated with filename:lineno\nfunc (lineInfo *DebugLineInfo) LineToPCs(filename string, lineno int) []PCStmt {\n\tif lineInfo == nil {\n\t\treturn nil\n\t}\n\n\tsm := newStateMachine(lineInfo, lineInfo.Instructions, lineInfo.ptrSize)\n\n\tpcstmts := []PCStmt{}\n\n\tfor {\n\t\tif err := sm.next(); err != nil {\n\t\t\tif lineInfo.Logf != nil && err != io.EOF {\n\t\t\t\tlineInfo.Logf(\"LineToPCs error: %v\", err)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif sm.line == lineno && sm.file == filename && sm.valid && !sm.endSeq {\n\t\t\tpcstmts = append(pcstmts, PCStmt{sm.address, sm.isStmt})\n\t\t}\n\t}\n\n\treturn pcstmts\n}\n\n// PrologueEndPC returns the first PC address marked as prologue_end in the half open interval [start, end)\nfunc (lineInfo *DebugLineInfo) PrologueEndPC(start, end uint64) (pc uint64, file string, line int, ok bool) {\n\tif lineInfo == nil {\n\t\treturn 0, \"\", 0, false\n\t}\n\n\tsm := lineInfo.stateMachineForEntry(start)\n\tfor {\n\t\tif sm.valid {\n\t\t\tif sm.address >= end {\n\t\t\t\treturn 0, \"\", 0, false\n\t\t\t}\n\t\t\tif sm.address < start {\n\t\t\t\treturn 0, \"\", 0, false\n\t\t\t}\n\t\t\tif sm.prologueEnd {\n\t\t\t\treturn sm.address, sm.file, sm.line, true\n\t\t\t}\n\t\t}\n\t\tif err := sm.next(); err != nil {\n\t\t\tif lineInfo.Logf != nil {\n\t\t\t\tlineInfo.Logf(\"PrologueEnd error: %v\", err)\n\t\t\t}\n\t\t\treturn 0, \"\", 0, false\n\t\t}\n\t}\n}\n\n// FirstStmt looks in the half open interval [start, end) for the\n// first PC address marked as stmt.\nfunc (lineInfo *DebugLineInfo) FirstStmt(start, end uint64) (pc uint64, file string, line int, ok bool) {\n\tsm := lineInfo.stateMachineForEntry(start)\n\tfor {\n\t\tif sm.valid {\n\t\t\tif sm.address >= end {\n\t\t\t\treturn 0, \"\", 0, false\n\t\t\t}\n\t\t\tif sm.address < start {\n\t\t\t\treturn 0, \"\", 0, false\n\t\t\t}\n\t\t\tif sm.isStmt {\n\t\t\t\treturn sm.address, sm.file, sm.line, true\n\t\t\t}\n\t\t}\n\t\tif err := sm.next(); err != nil {\n\t\t\tif lineInfo.Logf != nil {\n\t\t\t\tlineInfo.Logf(\"FirstStmtForLine error: %v\", err)\n\t\t\t}\n\t\t\treturn 0, \"\", 0, false\n\t\t}\n\t}\n}\n\nfunc (lineInfo *DebugLineInfo) FirstFile() string {\n\tsm := newStateMachine(lineInfo, lineInfo.Instructions, lineInfo.ptrSize)\n\tfor {\n\t\tif sm.valid {\n\t\t\treturn sm.file\n\t\t}\n\t\tif err := sm.next(); err != nil {\n\t\t\tif lineInfo.Logf != nil {\n\t\t\t\tlineInfo.Logf(\"FirstFile error: %v\", err)\n\t\t\t}\n\t\t\treturn \"\"\n\t\t}\n\t}\n}\n\nfunc (sm *StateMachine) next() error {\n\tsm.started = true\n\tif sm.valid {\n\t\tsm.lastAddress, sm.lastFile, sm.lastLine = sm.address, sm.file, sm.line\n\n\t\t// valid is set by either a special opcode or a DW_LNS_copy, in both cases\n\t\t// we need to reset basic_block, prologue_end and epilogue_begin\n\t\tsm.basicBlock = false\n\t\tsm.prologueEnd = false\n\t\tsm.epilogueBegin = false\n\t}\n\tif sm.endSeq {\n\t\tsm.endSeq = false\n\t\tsm.file = sm.dbl.defaultFile()\n\t\tsm.line = 1\n\t\tsm.column = 0\n\t\tsm.isa = 0\n\t\tsm.isStmt = sm.dbl.Prologue.InitialIsStmt == uint8(1)\n\t\tsm.basicBlock = false\n\t\tsm.lastAddress = ^uint64(0)\n\t}\n\tb, err := sm.buf.ReadByte()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif b < sm.dbl.Prologue.OpcodeBase {\n\t\tif int(b) < len(sm.opcodes) {\n\t\t\tsm.valid = false\n\t\t\tsm.opcodes[b](sm, sm.buf)\n\t\t} else {\n\t\t\t// unimplemented standard opcode, read the number of arguments specified\n\t\t\t// in the prologue and do nothing with them\n\t\t\topnum := sm.dbl.Prologue.StdOpLengths[b-1]\n\t\t\tfor i := 0; i < int(opnum); i++ {\n\t\t\t\tleb128.DecodeSigned(sm.buf)\n\t\t\t}\n\t\t\tfmt.Printf(\"unknown opcode %d(0x%x), %d arguments, file %s, line %d, address 0x%x\\n\", b, b, opnum, sm.file, sm.line, sm.address)\n\t\t}\n\t} else {\n\t\texecSpecialOpcode(sm, b)\n\t}\n\treturn nil\n}\n\nfunc execSpecialOpcode(sm *StateMachine, instr byte) {\n\tvar (\n\t\topcode  = instr\n\t\tdecoded = opcode - sm.dbl.Prologue.OpcodeBase\n\t)\n\n\tsm.lastDelta = int(sm.dbl.Prologue.LineBase + int8(decoded%sm.dbl.Prologue.LineRange))\n\tsm.line += sm.lastDelta\n\tsm.address += uint64(decoded/sm.dbl.Prologue.LineRange) * uint64(sm.dbl.Prologue.MinInstrLength)\n\tsm.valid = true\n}\n\nfunc execExtendedOpcode(sm *StateMachine, buf *bytes.Buffer) {\n\t_, _ = leb128.DecodeUnsigned(buf)\n\tb, _ := buf.ReadByte()\n\tif fn, ok := extendedopcodes[b]; ok {\n\t\tfn(sm, buf)\n\t}\n}\n\nfunc copyfn(sm *StateMachine, buf *bytes.Buffer) {\n\tsm.valid = true\n}\n\nfunc advancepc(sm *StateMachine, buf *bytes.Buffer) {\n\taddr, _ := leb128.DecodeUnsigned(buf)\n\tsm.address += addr * uint64(sm.dbl.Prologue.MinInstrLength)\n}\n\nfunc advanceline(sm *StateMachine, buf *bytes.Buffer) {\n\tline, _ := leb128.DecodeSigned(buf)\n\tsm.line += int(line)\n\tsm.lastDelta = int(line)\n}\n\nfunc setfile(sm *StateMachine, buf *bytes.Buffer) {\n\ti, _ := leb128.DecodeUnsigned(buf)\n\tif sm.dbl.Prologue.Version < 5 {\n\t\t// in DWARF v5 files are indexed starting from 0, in v4 and prior the index starts at 1\n\t\ti--\n\t}\n\tif i < uint64(len(sm.dbl.FileNames)) {\n\t\tsm.file = sm.dbl.FileNames[i].Path\n\t} else {\n\t\tj := i - uint64(len(sm.dbl.FileNames))\n\t\tif j < uint64(len(sm.definedFiles)) {\n\t\t\tsm.file = sm.definedFiles[j].Path\n\t\t} else {\n\t\t\tsm.file = \"\"\n\t\t}\n\t}\n}\n\nfunc setcolumn(sm *StateMachine, buf *bytes.Buffer) {\n\tc, _ := leb128.DecodeUnsigned(buf)\n\tsm.column = uint(c)\n}\n\nfunc negatestmt(sm *StateMachine, buf *bytes.Buffer) {\n\tsm.isStmt = !sm.isStmt\n}\n\nfunc setbasicblock(sm *StateMachine, buf *bytes.Buffer) {\n\tsm.basicBlock = true\n}\n\nfunc constaddpc(sm *StateMachine, buf *bytes.Buffer) {\n\tsm.address += uint64((255-sm.dbl.Prologue.OpcodeBase)/sm.dbl.Prologue.LineRange) * uint64(sm.dbl.Prologue.MinInstrLength)\n}\n\nfunc fixedadvancepc(sm *StateMachine, buf *bytes.Buffer) {\n\tvar operand uint16\n\tbinary.Read(buf, binary.LittleEndian, &operand)\n\n\tsm.address += uint64(operand)\n}\n\nfunc endsequence(sm *StateMachine, buf *bytes.Buffer) {\n\tsm.endSeq = true\n\tsm.valid = sm.dbl.endSeqIsValid\n}\n\nfunc setaddress(sm *StateMachine, buf *bytes.Buffer) {\n\taddr, err := dwarf.ReadUintRaw(buf, binary.LittleEndian, sm.ptrSize)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tsm.address = addr + sm.dbl.staticBase\n}\n\nfunc setdiscriminator(sm *StateMachine, buf *bytes.Buffer) {\n\t_, _ = leb128.DecodeUnsigned(buf)\n}\n\nfunc definefile(sm *StateMachine, buf *bytes.Buffer) {\n\tif entry := readFileEntry(sm.dbl, sm.buf, false); entry != nil {\n\t\tsm.definedFiles = append(sm.definedFiles, entry)\n\t}\n}\n\nfunc prologueend(sm *StateMachine, buf *bytes.Buffer) {\n\tsm.prologueEnd = true\n}\n\nfunc epiloguebegin(sm *StateMachine, buf *bytes.Buffer) {\n\tsm.epilogueBegin = true\n}\n\nfunc setisa(sm *StateMachine, buf *bytes.Buffer) {\n\tc, _ := leb128.DecodeUnsigned(buf)\n\tsm.isa = c\n}\n"
  },
  {
    "path": "pkg/dwarf/line/state_machine_test.go",
    "content": "package line\n\nimport (\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"debug/dwarf\"\n\t\"debug/macho\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"testing\"\n\n\tpdwarf \"github.com/go-delve/delve/pkg/dwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\nfunc slurpGzip(path string) ([]byte, error) {\n\tfh, err := os.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer fh.Close()\n\tgzin, err := gzip.NewReader(fh)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer gzin.Close()\n\treturn io.ReadAll(gzin)\n}\n\nfunc TestGrafana(t *testing.T) {\n\tt.Parallel()\n\t// Compares a full execution of our state machine on the debug_line section\n\t// of grafana to the output generated using debug/dwarf.LineReader on the\n\t// same section.\n\n\tdebugBytes, err := slurpGzip(\"_testdata/debug.grafana.debug.gz\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\texe, err := macho.NewFile(bytes.NewReader(debugBytes))\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tsec := exe.Section(\"__debug_line\")\n\tdebugLineBytes, err := sec.Data()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tdata, err := exe.DWARF()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tdebugLineBuffer := bytes.NewBuffer(debugLineBytes)\n\trdr := data.Reader()\n\tfor {\n\t\te, err := rdr.Next()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif e == nil {\n\t\t\tbreak\n\t\t}\n\t\trdr.SkipChildren()\n\t\tif e.Tag != dwarf.TagCompileUnit {\n\t\t\tcontinue\n\t\t}\n\t\tcuname, _ := e.Val(dwarf.AttrName).(string)\n\n\t\tlineInfo := Parse(e.Val(dwarf.AttrCompDir).(string), debugLineBuffer, nil, t.Logf, 0, false, 8)\n\t\tlineInfo.endSeqIsValid = true\n\t\tsm := newStateMachine(lineInfo, lineInfo.Instructions, 8)\n\n\t\tlnrdr, err := data.LineReader(e)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\tcheckCompileUnit(t, cuname, lnrdr, sm)\n\t}\n}\n\nfunc checkCompileUnit(t *testing.T, cuname string, lnrdr *dwarf.LineReader, sm *StateMachine) {\n\tvar lne dwarf.LineEntry\n\tfor {\n\t\tif err := sm.next(); err != nil {\n\t\t\tif err != io.EOF {\n\t\t\t\tt.Fatalf(\"state machine next error: %v\", err)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tif !sm.valid {\n\t\t\tcontinue\n\t\t}\n\n\t\terr := lnrdr.Next(&lne)\n\t\tif err == io.EOF {\n\t\t\tt.Fatalf(\"line reader ended before our state machine for compile unit %s\", cuname)\n\t\t}\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\ttgt := fmt.Sprintf(\"%#x %s:%d isstmt:%v prologue_end:%v epilogue_begin:%v\", lne.Address, lne.File.Name, lne.Line, lne.IsStmt, lne.PrologueEnd, lne.EpilogueBegin)\n\n\t\tout := fmt.Sprintf(\"%#x %s:%d isstmt:%v prologue_end:%v epilogue_begin:%v\", sm.address, sm.file, sm.line, sm.isStmt, sm.prologueEnd, sm.epilogueBegin)\n\t\tif out != tgt {\n\t\t\tt.Errorf(\"mismatch:\\n\")\n\t\t\tt.Errorf(\"got:\\t%s\\n\", out)\n\t\t\tt.Errorf(\"expected:\\t%s\\n\", tgt)\n\t\t\tt.Fatal(\"previous error\")\n\t\t}\n\t}\n\n\terr := lnrdr.Next(&lne)\n\tif err != io.EOF {\n\t\tt.Fatalf(\"state machine ended before the line reader for compile unit %s\", cuname)\n\t}\n}\n\nfunc TestMultipleSequences(t *testing.T) {\n\tt.Parallel()\n\t// Check that our state machine (specifically PCToLine and AllPCsBetween)\n\t// are correct when dealing with units containing more than one sequence.\n\n\tconst thefile = \"thefile.go\"\n\n\tinstr := bytes.NewBuffer(nil)\n\tptrSize := ptrSizeByRuntimeArch()\n\n\twrite_DW_LNE_set_address := func(addr uint64) {\n\t\tinstr.WriteByte(0)\n\t\tleb128.EncodeUnsigned(instr, 9) // 1 + ptr_size\n\t\tinstr.WriteByte(DW_LINE_set_address)\n\t\tpdwarf.WriteUint(instr, binary.LittleEndian, ptrSize, addr)\n\t}\n\n\twrite_DW_LNS_copy := func() {\n\t\tinstr.WriteByte(DW_LNS_copy)\n\t}\n\n\twrite_DW_LNS_advance_pc := func(off uint64) {\n\t\tinstr.WriteByte(DW_LNS_advance_pc)\n\t\tleb128.EncodeUnsigned(instr, off)\n\t}\n\n\twrite_DW_LNS_advance_line := func(off int64) {\n\t\tinstr.WriteByte(DW_LNS_advance_line)\n\t\tleb128.EncodeSigned(instr, off)\n\t}\n\n\twrite_DW_LNS_prologue_end := func() {\n\t\tinstr.WriteByte(DW_LNS_prologue_end)\n\t}\n\n\twrite_DW_LNE_end_sequence := func() {\n\t\tinstr.WriteByte(0)\n\t\tleb128.EncodeUnsigned(instr, 1)\n\t\tinstr.WriteByte(DW_LINE_end_sequence)\n\t}\n\n\twrite_DW_LNE_set_address(0x400000)\n\twrite_DW_LNS_copy() // thefile.go:1 0x400000\n\twrite_DW_LNS_advance_pc(0x2)\n\twrite_DW_LNS_advance_line(1)\n\twrite_DW_LNS_copy() // thefile.go:2 0x400002\n\twrite_DW_LNS_advance_pc(0x2)\n\twrite_DW_LNS_advance_line(1)\n\twrite_DW_LNS_copy() // thefile.go:3 0x400004\n\twrite_DW_LNS_advance_pc(0x2)\n\twrite_DW_LNE_end_sequence() // thefile.go:3 ends the byte before 0x400006\n\n\twrite_DW_LNE_set_address(0x600000)\n\twrite_DW_LNS_advance_line(10)\n\twrite_DW_LNS_copy() // thefile.go:11 0x600000\n\twrite_DW_LNS_advance_pc(0x2)\n\twrite_DW_LNS_advance_line(1)\n\twrite_DW_LNS_copy() // thefile.go:12 0x600002\n\twrite_DW_LNS_advance_pc(0x2)\n\twrite_DW_LNS_advance_line(1)\n\twrite_DW_LNS_copy() // thefile.go:13 0x600004\n\twrite_DW_LNS_advance_pc(0x2)\n\twrite_DW_LNE_end_sequence() // thefile.go:13 ends the byte before 0x600006\n\n\twrite_DW_LNE_set_address(0x500000)\n\twrite_DW_LNS_advance_line(20)\n\twrite_DW_LNS_copy() // thefile.go:21 0x500000\n\twrite_DW_LNS_advance_pc(0x2)\n\twrite_DW_LNS_advance_line(1)\n\twrite_DW_LNS_prologue_end()\n\twrite_DW_LNS_copy() // thefile.go:22 0x500002\n\twrite_DW_LNS_advance_pc(0x2)\n\twrite_DW_LNS_advance_line(1)\n\twrite_DW_LNS_copy() // thefile.go:23 0x500004\n\twrite_DW_LNS_advance_pc(0x2)\n\twrite_DW_LNE_end_sequence() // thefile.go:23 ends the byte before 0x500006\n\n\tlines := &DebugLineInfo{\n\t\tPrologue: &DebugLinePrologue{\n\t\t\tUnitLength:     1,\n\t\t\tVersion:        2,\n\t\t\tMinInstrLength: 1,\n\t\t\tInitialIsStmt:  1,\n\t\t\tLineBase:       -3,\n\t\t\tLineRange:      12,\n\t\t\tOpcodeBase:     13,\n\t\t\tStdOpLengths:   []uint8{0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1},\n\t\t},\n\t\tIncludeDirs:       []string{},\n\t\tFileNames:         []*FileEntry{{Path: thefile}},\n\t\tInstructions:      instr.Bytes(),\n\t\tptrSize:           ptrSize,\n\t\tstateMachineCache: make(map[uint64]*StateMachine),\n\t}\n\n\t// Test that PCToLine is correct for all three sequences\n\n\tfor _, testCase := range []struct {\n\t\tpc   uint64\n\t\tline int\n\t}{\n\t\t{0x400000, 1},\n\t\t{0x400002, 2},\n\t\t{0x400004, 3},\n\n\t\t{0x500000, 21},\n\t\t{0x500002, 22},\n\t\t{0x500004, 23},\n\n\t\t{0x600000, 11},\n\t\t{0x600002, 12},\n\t\t{0x600004, 13},\n\t} {\n\t\tsm := newStateMachine(lines, lines.Instructions, lines.ptrSize)\n\t\tfile, curline, ok := sm.PCToLine(testCase.pc)\n\t\tif !ok {\n\t\t\tt.Fatalf(\"Could not find %#x\", testCase.pc)\n\t\t}\n\t\tif file != thefile {\n\t\t\tt.Fatalf(\"Wrong file returned for %#x %q\", testCase.pc, file)\n\t\t}\n\t\tif curline != testCase.line {\n\t\t\tt.Errorf(\"Wrong line returned for %#x: got %d expected %d\", testCase.pc, curline, testCase.line)\n\t\t}\n\t}\n\n\t// Test that AllPCsBetween is correct for all three sequences\n\tfor _, testCase := range []struct {\n\t\tstart, end uint64\n\t\ttgt        []uint64\n\t}{\n\t\t{0x400000, 0x400005, []uint64{0x400000, 0x400002, 0x400004}},\n\t\t{0x500000, 0x500005, []uint64{0x500000, 0x500002, 0x500004}},\n\t\t{0x600000, 0x600005, []uint64{0x600000, 0x600002, 0x600004}},\n\t} {\n\t\tout, err := lines.AllPCsBetween(testCase.start, testCase.end, \"\", -1)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"AllPCsBetween(%#x, %#x): %v\", testCase.start, testCase.end, err)\n\t\t}\n\n\t\tif len(out) != len(testCase.tgt) {\n\t\t\tt.Errorf(\"AllPCsBetween(%#x, %#x): expected: %#x got: %#x\", testCase.start, testCase.end, testCase.tgt, out)\n\t\t}\n\t}\n\n\t// Test that PrologueEndPC does not return a PC address before the start address (issue #4269)\n\tpc, _, _, ok := lines.PrologueEndPC(0x600000, 0x600008)\n\tif ok && pc < 0x600000 {\n\t\tt.Errorf(\"PrologueEndPC failed %x\", pc)\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/loclist/dwarf2_loclist.go",
    "content": "package loclist\n\nimport (\n\t\"encoding/binary\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n)\n\n// Reader represents a loclist reader.\ntype Reader interface {\n\tFind(off int, staticBase, base, pc uint64, debugAddr *godwarf.DebugAddr) (*Entry, error)\n\tEmpty() bool\n}\n\n// Dwarf2Reader parses and presents DWARF loclist information for DWARF versions 2 through 4.\ntype Dwarf2Reader struct {\n\tdata  []byte\n\tcur   int\n\tptrSz int\n}\n\n// NewDwarf2Reader returns an initialized loclist Reader for DWARF versions 2 through 4.\nfunc NewDwarf2Reader(data []byte, ptrSz int) *Dwarf2Reader {\n\treturn &Dwarf2Reader{data: data, ptrSz: ptrSz}\n}\n\n// Empty returns true if this reader has no data.\nfunc (rdr *Dwarf2Reader) Empty() bool {\n\treturn rdr.data == nil\n}\n\n// Seek moves the data pointer to the specified offset.\nfunc (rdr *Dwarf2Reader) Seek(off int) {\n\trdr.cur = off\n}\n\n// Next advances the reader to the next loclist entry, returning\n// the entry and true if successful, or nil, false if not.\nfunc (rdr *Dwarf2Reader) Next(e *Entry) bool {\n\te.LowPC = rdr.oneAddr()\n\te.HighPC = rdr.oneAddr()\n\n\tif e.LowPC == 0 && e.HighPC == 0 {\n\t\treturn false\n\t}\n\n\tif e.BaseAddressSelection() {\n\t\te.Instr = nil\n\t\treturn true\n\t}\n\n\tinstrlen := binary.LittleEndian.Uint16(rdr.read(2))\n\te.Instr = rdr.read(int(instrlen))\n\treturn true\n}\n\n// Find returns the loclist entry for the specified PC address, inside the\n// loclist stating at off. Base is the base address of the compile unit and\n// staticBase is the static base at which the image is loaded.\nfunc (rdr *Dwarf2Reader) Find(off int, staticBase, base, pc uint64, debugAddr *godwarf.DebugAddr) (*Entry, error) {\n\trdr.Seek(off)\n\tvar e Entry\n\tfor rdr.Next(&e) {\n\t\tif e.BaseAddressSelection() {\n\t\t\tbase = e.HighPC + staticBase\n\t\t\tcontinue\n\t\t}\n\t\tif pc >= e.LowPC+base && pc < e.HighPC+base {\n\t\t\treturn &e, nil\n\t\t}\n\t}\n\treturn nil, nil\n}\n\nfunc (rdr *Dwarf2Reader) read(sz int) []byte {\n\tr := rdr.data[rdr.cur : rdr.cur+sz]\n\trdr.cur += sz\n\treturn r\n}\n\nfunc (rdr *Dwarf2Reader) oneAddr() uint64 {\n\tswitch rdr.ptrSz {\n\tcase 4:\n\t\taddr := binary.LittleEndian.Uint32(rdr.read(rdr.ptrSz))\n\t\tif addr == ^uint32(0) {\n\t\t\treturn ^uint64(0)\n\t\t}\n\t\treturn uint64(addr)\n\tcase 8:\n\t\taddr := binary.LittleEndian.Uint64(rdr.read(rdr.ptrSz))\n\t\treturn addr\n\tdefault:\n\t\tpanic(\"bad address size\")\n\t}\n}\n\n// Entry represents a single entry in the loclist section.\ntype Entry struct {\n\tLowPC, HighPC uint64\n\tInstr         []byte\n}\n\n// BaseAddressSelection returns true if entry.highpc should\n// be used as the base address for subsequent entries.\nfunc (e *Entry) BaseAddressSelection() bool {\n\treturn e.LowPC == ^uint64(0)\n}\n"
  },
  {
    "path": "pkg/dwarf/loclist/dwarf5_loclist.go",
    "content": "package loclist\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\n// Dwarf5Reader parses and presents DWARF loclist information for DWARF version 5 and later.\n// See DWARFv5 section 7.29 page 243 and following.\ntype Dwarf5Reader struct {\n\tbyteOrder binary.ByteOrder\n\tptrSz     int\n\tdata      []byte\n}\n\nfunc NewDwarf5Reader(data []byte) *Dwarf5Reader {\n\tif len(data) == 0 {\n\t\treturn nil\n\t}\n\tr := &Dwarf5Reader{data: data}\n\n\t_, dwarf64, _, byteOrder := dwarf.ReadDwarfLengthVersion(data)\n\tr.byteOrder = byteOrder\n\n\tdata = data[6:]\n\tif dwarf64 {\n\t\tdata = data[8:]\n\t}\n\n\taddrSz := data[0]\n\tsegSelSz := data[1]\n\tr.ptrSz = int(addrSz + segSelSz)\n\n\t// Not read:\n\t// - offset_entry_count (4 bytes)\n\t// - offset table (offset_entry_count*4 or offset_entry_count*8 if dwarf64 is set)\n\n\treturn r\n}\n\nfunc (rdr *Dwarf5Reader) Empty() bool {\n\treturn rdr == nil\n}\n\n// Find returns the loclist entry for the specified PC address, inside the\n// loclist stating at off. Base is the base address of the compile unit and\n// staticBase is the static base at which the image is loaded.\nfunc (rdr *Dwarf5Reader) Find(off int, staticBase, base, pc uint64, debugAddr *godwarf.DebugAddr) (*Entry, error) {\n\tit := &loclistsIterator{rdr: rdr, debugAddr: debugAddr, buf: bytes.NewBuffer(rdr.data), base: base, staticBase: staticBase}\n\tit.buf.Next(off)\n\n\tfor it.next() {\n\t\tif !it.onRange {\n\t\t\tcontinue\n\t\t}\n\t\tif it.start <= pc && pc < it.end {\n\t\t\treturn &Entry{it.start, it.end, it.instr}, nil\n\t\t}\n\t}\n\n\tif it.err != nil {\n\t\treturn nil, it.err\n\t}\n\n\tif it.defaultInstr != nil {\n\t\treturn &Entry{pc, pc + 1, it.defaultInstr}, nil\n\t}\n\n\treturn nil, nil\n}\n\ntype loclistsIterator struct {\n\trdr        *Dwarf5Reader\n\tdebugAddr  *godwarf.DebugAddr\n\tbuf        *bytes.Buffer\n\tstaticBase uint64\n\tbase       uint64 // base for offsets in the list\n\n\tonRange      bool\n\tatEnd        bool\n\tstart, end   uint64\n\tinstr        []byte\n\tdefaultInstr []byte\n\terr          error\n}\n\nconst (\n\t_DW_LLE_end_of_list      uint8 = 0x0\n\t_DW_LLE_base_addressx    uint8 = 0x1\n\t_DW_LLE_startx_endx      uint8 = 0x2\n\t_DW_LLE_startx_length    uint8 = 0x3\n\t_DW_LLE_offset_pair      uint8 = 0x4\n\t_DW_LLE_default_location uint8 = 0x5\n\t_DW_LLE_base_address     uint8 = 0x6\n\t_DW_LLE_start_end        uint8 = 0x7\n\t_DW_LLE_start_length     uint8 = 0x8\n)\n\nfunc (it *loclistsIterator) next() bool {\n\tif it.err != nil || it.atEnd {\n\t\treturn false\n\t}\n\topcode, err := it.buf.ReadByte()\n\tif err != nil {\n\t\tit.err = err\n\t\treturn false\n\t}\n\tswitch opcode {\n\tcase _DW_LLE_end_of_list:\n\t\tit.atEnd = true\n\t\tit.onRange = false\n\t\treturn false\n\n\tcase _DW_LLE_base_addressx:\n\t\tbaseIdx, _ := leb128.DecodeUnsigned(it.buf)\n\t\tit.base, it.err = it.debugAddr.Get(baseIdx)\n\t\tit.base += it.staticBase\n\t\tit.onRange = false\n\n\tcase _DW_LLE_startx_endx:\n\t\tstartIdx, _ := leb128.DecodeUnsigned(it.buf)\n\t\tendIdx, _ := leb128.DecodeUnsigned(it.buf)\n\t\tit.readInstr()\n\n\t\tit.start, it.err = it.debugAddr.Get(startIdx)\n\t\tif it.err == nil {\n\t\t\tit.end, it.err = it.debugAddr.Get(endIdx)\n\t\t}\n\t\tit.onRange = true\n\n\tcase _DW_LLE_startx_length:\n\t\tstartIdx, _ := leb128.DecodeUnsigned(it.buf)\n\t\tlength, _ := leb128.DecodeUnsigned(it.buf)\n\t\tit.readInstr()\n\n\t\tit.start, it.err = it.debugAddr.Get(startIdx)\n\t\tit.end = it.start + length\n\t\tit.onRange = true\n\n\tcase _DW_LLE_offset_pair:\n\t\toff1, _ := leb128.DecodeUnsigned(it.buf)\n\t\toff2, _ := leb128.DecodeUnsigned(it.buf)\n\t\tit.readInstr()\n\n\t\tit.start = it.base + off1\n\t\tit.end = it.base + off2\n\t\tit.onRange = true\n\n\tcase _DW_LLE_default_location:\n\t\tit.readInstr()\n\t\tit.defaultInstr = it.instr\n\t\tit.onRange = false\n\n\tcase _DW_LLE_base_address:\n\t\tit.base, it.err = dwarf.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz)\n\t\tit.base += it.staticBase\n\t\tit.onRange = false\n\n\tcase _DW_LLE_start_end:\n\t\tit.start, it.err = dwarf.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz)\n\t\tit.end, it.err = dwarf.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz)\n\t\tit.readInstr()\n\t\tit.onRange = true\n\n\tcase _DW_LLE_start_length:\n\t\tit.start, it.err = dwarf.ReadUintRaw(it.buf, it.rdr.byteOrder, it.rdr.ptrSz)\n\t\tlength, _ := leb128.DecodeUnsigned(it.buf)\n\t\tit.readInstr()\n\t\tit.end = it.start + length\n\t\tit.onRange = true\n\n\tdefault:\n\t\tit.err = fmt.Errorf(\"unknown opcode %#x at %#x\", opcode, len(it.rdr.data)-it.buf.Len())\n\t\tit.onRange = false\n\t\tit.atEnd = true\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nfunc (it *loclistsIterator) readInstr() {\n\tlength, _ := leb128.DecodeUnsigned(it.buf)\n\tit.instr = it.buf.Next(int(length))\n}\n"
  },
  {
    "path": "pkg/dwarf/loclist/loclist5_test.go",
    "content": "package loclist\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\nfunc TestLoclist5(t *testing.T) {\n\tt.Parallel()\n\tbuf := new(bytes.Buffer)\n\n\tp32 := func(n uint32) { binary.Write(buf, binary.LittleEndian, n) }\n\tp16 := func(n uint16) { binary.Write(buf, binary.LittleEndian, n) }\n\tp8 := func(n uint8) { binary.Write(buf, binary.LittleEndian, n) }\n\tuleb := func(n uint64) { leb128.EncodeUnsigned(buf, n) }\n\n\tp32(0x0) // length (use 0 because it is ignored)\n\tp16(0x5) // version\n\tp8(4)    // address size\n\tp8(0)    // segment selector size\n\tp32(0)   // offset_entry_count\n\n\toff := buf.Len()\n\n\t// (offset) start_base+0x10200 .. start_base+0x10300: 0x2\n\tp8(_DW_LLE_offset_pair)\n\tuleb(0x10200)\n\tuleb(0x10300)\n\tuleb(4)\n\tp32(2)\n\n\t// base address -> 0x02000000\n\tp8(_DW_LLE_base_address)\n\tp32(0x02000000)\n\n\t// (offset) 0x02010400 .. 0x02010500: 3\n\tp8(_DW_LLE_offset_pair)\n\tuleb(0x10400)\n\tuleb(0x10500)\n\tuleb(4)\n\tp32(3)\n\n\t// (offset) 0x02010600 .. 0x02010600: 4\n\tp8(_DW_LLE_offset_pair)\n\tuleb(0x10600)\n\tuleb(0x10600)\n\tuleb(4)\n\tp32(4)\n\n\t// (offset) 0x02010800 .. 0x02010900: 5\n\tp8(_DW_LLE_offset_pair)\n\tuleb(0x10800)\n\tuleb(0x10900)\n\tuleb(4)\n\tp32(5)\n\n\t// (start end) 0x2010a00 .. 0x2010b00: 6\n\tp8(_DW_LLE_start_end)\n\tp32(0x2010a00)\n\tp32(0x2010b00)\n\tuleb(4)\n\tp32(6)\n\n\t// (start length) 0x2010c00 .. 0x2010d00: 7\n\tp8(_DW_LLE_start_length)\n\tp32(0x2010c00)\n\tuleb(0x100)\n\tuleb(4)\n\tp32(7)\n\n\t// (offset) 0x02000000 .. 0x02000001: 8\n\tp8(_DW_LLE_offset_pair)\n\tuleb(0)\n\tuleb(1)\n\tuleb(4)\n\tp32(8)\n\n\t// default location 10\n\tp8(_DW_LLE_default_location)\n\tuleb(4)\n\tp32(10)\n\n\t// loclist end\n\tp8(_DW_LLE_end_of_list)\n\n\ttype testCase struct {\n\t\tpc  uint64\n\t\ttgt Entry\n\t}\n\n\ttestCases := []testCase{\n\t\t{0x01000000, Entry{0x01000000, 0x01000001, []byte{10, 0, 0, 0}}}, // default entry\n\t\t{0x01010200, Entry{0x01010200, 0x01010300, []byte{2, 0, 0, 0}}},  // offset pair entry\n\t\t{0x01010210, Entry{0x01010200, 0x01010300, []byte{2, 0, 0, 0}}},  // offset pair entry\n\t\t{0x01010300, Entry{0x01010300, 0x01010301, []byte{10, 0, 0, 0}}}, // default entry (one past offset pair entry)\n\t\t{0x02010400, Entry{0x02010400, 0x02010500, []byte{3, 0, 0, 0}}},  // offset pair entry, after base address selection\n\t\t{0x02010600, Entry{0x02010600, 0x02010601, []byte{10, 0, 0, 0}}}, // default entry (beginning of empty offset pair entry)\n\t\t{0x02010800, Entry{0x02010800, 0x02010900, []byte{5, 0, 0, 0}}},  // offset pair entry after empty offset pair\n\t\t{0x02010a00, Entry{0x02010a00, 0x02010b00, []byte{6, 0, 0, 0}}},  // start end entry\n\t\t{0x02010c00, Entry{0x02010c00, 0x02010d00, []byte{7, 0, 0, 0}}},  // start length entry\n\t\t{0x02000000, Entry{0x02000000, 0x02000001, []byte{8, 0, 0, 0}}},  // out of order offset pair entry\n\t\t{0x02000001, Entry{0x02000001, 0x02000002, []byte{10, 0, 0, 0}}}, // default entry (after out of order offset pair)\n\t}\n\n\tll := NewDwarf5Reader(buf.Bytes())\n\n\tfor _, tc := range testCases {\n\t\te, err := ll.Find(off, 0x0, 0x01000000, tc.pc, nil)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"error returned for %#x: %v\", tc.pc, err)\n\t\t\tcontinue\n\t\t}\n\t\tif e.LowPC != tc.tgt.LowPC || e.HighPC != tc.tgt.HighPC || !bytes.Equal(e.Instr, tc.tgt.Instr) {\n\t\t\tt.Errorf(\"output mismatch for %#x,\\nexpected %#v,\\ngot     %#v\", tc.pc, tc.tgt, e)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/op/op.go",
    "content": "package op\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/leb128\"\n)\n\n// Opcode represent a DWARF stack program instruction.\n// See ./opcodes.go for a full list.\ntype Opcode byte\n\n//go:generate go run ../../../_scripts/gen-opcodes.go opcodes.table opcodes.go\n\ntype stackfn func(Opcode, *context) error\n\ntype ReadMemoryFunc func([]byte, uint64) (int, error)\n\ntype context struct {\n\tbuf     *bytes.Buffer\n\tprog    []byte\n\tstack   []int64\n\tpieces  []Piece\n\tptrSize int\n\n\tDwarfRegisters\n\treadMemory ReadMemoryFunc\n}\n\n// Piece is a piece of memory stored either at an address or in a register.\ntype Piece struct {\n\tSize  int\n\tKind  PieceKind\n\tVal   uint64\n\tBytes []byte\n}\n\n// PieceKind describes the kind of a piece.\ntype PieceKind uint8\n\nconst (\n\tAddrPiece PieceKind = iota // The piece is stored in memory, Val is the address\n\tRegPiece                   // The piece is stored in a register, Val is the register number\n\tImmPiece                   // The piece is an immediate value, Val or Bytes is the value\n)\n\nvar (\n\tErrStackUnderflow        = errors.New(\"DWARF stack underflow\")\n\tErrStackIndexOutOfBounds = errors.New(\"DWARF stack index out of bounds\")\n\tErrMemoryReadUnavailable = errors.New(\"memory read unavailable\")\n)\n\nconst arbitraryExecutionLimitFactor = 10\n\n// ExecuteStackProgram executes a DWARF location expression and returns\n// either an address (int64), or a slice of Pieces for location expressions\n// that don't evaluate to an address (such as register and composite expressions).\nfunc ExecuteStackProgram(regs DwarfRegisters, instructions []byte, ptrSize int, readMemory ReadMemoryFunc) (int64, []Piece, error) {\n\tctxt := &context{\n\t\tbuf:            bytes.NewBuffer(instructions),\n\t\tprog:           instructions,\n\t\tstack:          make([]int64, 0, 3),\n\t\tDwarfRegisters: regs,\n\t\tptrSize:        ptrSize,\n\t\treadMemory:     readMemory,\n\t}\n\n\tfor tick := 0; tick < len(instructions)*arbitraryExecutionLimitFactor; tick++ {\n\t\topcodeByte, err := ctxt.buf.ReadByte()\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\topcode := Opcode(opcodeByte)\n\t\tif opcode == DW_OP_nop {\n\t\t\tcontinue\n\t\t}\n\t\tfn, ok := oplut[opcode]\n\t\tif !ok {\n\t\t\treturn 0, nil, fmt.Errorf(\"invalid instruction %#v\", opcode)\n\t\t}\n\n\t\terr = fn(opcode, ctxt)\n\t\tif err != nil {\n\t\t\treturn 0, nil, err\n\t\t}\n\t}\n\n\tif ctxt.pieces != nil {\n\t\tif len(ctxt.pieces) == 1 && ctxt.pieces[0].Kind == RegPiece {\n\t\t\treturn int64(regs.Uint64Val(ctxt.pieces[0].Val)), ctxt.pieces, nil\n\t\t}\n\t\treturn 0, ctxt.pieces, nil\n\t}\n\n\tif len(ctxt.stack) == 0 {\n\t\treturn 0, nil, errors.New(\"empty OP stack\")\n\t}\n\n\treturn ctxt.stack[len(ctxt.stack)-1], nil, nil\n}\n\n// PrettyPrint prints the DWARF stack program instructions to `out`.\nfunc PrettyPrint(out io.Writer, instructions []byte, regnumToName func(uint64) string) {\n\tin := bytes.NewBuffer(instructions)\n\n\tfor {\n\t\topcode, err := in.ReadByte()\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\top := Opcode(opcode)\n\t\tif name, hasname := opcodeName[op]; hasname {\n\t\t\tio.WriteString(out, name)\n\t\t\tif regnumToName != nil {\n\t\t\t\tif op >= DW_OP_reg0 && op <= DW_OP_reg31 {\n\t\t\t\t\tfmt.Fprintf(out, \"(%s)\", regnumToName(uint64(op-DW_OP_reg0)))\n\t\t\t\t} else if op >= DW_OP_breg0 && op <= DW_OP_breg31 {\n\t\t\t\t\tfmt.Fprintf(out, \"(%s)\", regnumToName(uint64(op-DW_OP_breg0)))\n\t\t\t\t}\n\t\t\t}\n\t\t\tout.Write([]byte{' '})\n\t\t} else {\n\t\t\tfmt.Fprintf(out, \"%#x \", opcode)\n\t\t}\n\n\t\tfor i, arg := range opcodeArgs[Opcode(opcode)] {\n\t\t\tvar regnum uint64\n\t\t\tswitch arg {\n\t\t\tcase 's':\n\t\t\t\tn, _ := leb128.DecodeSigned(in)\n\t\t\t\tregnum = uint64(n)\n\t\t\t\tfmt.Fprintf(out, \"%#x \", n)\n\t\t\tcase 'u':\n\t\t\t\tn, _ := leb128.DecodeUnsigned(in)\n\t\t\t\tregnum = n\n\t\t\t\tfmt.Fprintf(out, \"%#x \", n)\n\t\t\tcase '1':\n\t\t\t\tvar x uint8\n\t\t\t\tbinary.Read(in, binary.LittleEndian, &x)\n\t\t\t\tfmt.Fprintf(out, \"%#x \", x)\n\t\t\tcase '2':\n\t\t\t\tvar x uint16\n\t\t\t\tbinary.Read(in, binary.LittleEndian, &x)\n\t\t\t\tfmt.Fprintf(out, \"%#x \", x)\n\t\t\tcase '4':\n\t\t\t\tvar x uint32\n\t\t\t\tbinary.Read(in, binary.LittleEndian, &x)\n\t\t\t\tfmt.Fprintf(out, \"%#x \", x)\n\t\t\tcase '8':\n\t\t\t\tvar x uint64\n\t\t\t\tbinary.Read(in, binary.LittleEndian, &x)\n\t\t\t\tfmt.Fprintf(out, \"%#x \", x)\n\t\t\tcase 'B':\n\t\t\t\tsz, _ := leb128.DecodeUnsigned(in)\n\t\t\t\tdata := make([]byte, sz)\n\t\t\t\tsz2, _ := in.Read(data)\n\t\t\t\tdata = data[:sz2]\n\t\t\t\tfmt.Fprintf(out, \"%d [%x] \", sz, data)\n\t\t\t}\n\t\t\tif regnumToName != nil && i == 0 && (op == DW_OP_regx || op == DW_OP_bregx) {\n\t\t\t\tfmt.Fprintf(out, \"(%s)\", regnumToName(regnum))\n\t\t\t}\n\t\t}\n\t}\n}\n\n// closeLoc is called by opcodes that can only appear at the end of a\n// location expression (DW_OP_regN, DW_OP_regx, DW_OP_stack_value...).\n// It checks that we are at the end of the program or that the following\n// opcode is DW_OP_piece or DW_OP_bit_piece and processes them.\nfunc (ctxt *context) closeLoc(opcode0 Opcode, piece Piece) error {\n\tif ctxt.buf.Len() == 0 {\n\t\tctxt.pieces = append(ctxt.pieces, piece)\n\t\treturn nil\n\t}\n\n\t// DWARF doesn't say what happens to the operand stack at the end of a\n\t// location expression, resetting it here.\n\tctxt.stack = ctxt.stack[:0]\n\n\tb, err := ctxt.buf.ReadByte()\n\tif err != nil {\n\t\treturn err\n\t}\n\topcode := Opcode(b)\n\n\tswitch opcode {\n\tcase DW_OP_piece:\n\t\tsz, _ := leb128.DecodeUnsigned(ctxt.buf)\n\t\tpiece.Size = int(sz)\n\t\tctxt.pieces = append(ctxt.pieces, piece)\n\t\treturn nil\n\n\tcase DW_OP_bit_piece:\n\t\t// not supported\n\t\treturn fmt.Errorf(\"invalid instruction %#v\", opcode)\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid instruction %#v after %#v\", opcode, opcode0)\n\t}\n}\n\nfunc callframecfa(opcode Opcode, ctxt *context) error {\n\tif ctxt.CFA == 0 {\n\t\treturn errors.New(\"could not retrieve CFA for current PC\")\n\t}\n\tctxt.stack = append(ctxt.stack, ctxt.CFA)\n\treturn nil\n}\n\nfunc addr(opcode Opcode, ctxt *context) error {\n\tbuf := ctxt.buf.Next(ctxt.ptrSize)\n\tstack, err := dwarf.ReadUintRaw(bytes.NewReader(buf), binary.LittleEndian, ctxt.ptrSize)\n\tif err != nil {\n\t\treturn err\n\t}\n\tctxt.stack = append(ctxt.stack, int64(stack+ctxt.StaticBase))\n\treturn nil\n}\n\nfunc plusuconsts(opcode Opcode, ctxt *context) error {\n\tslen := len(ctxt.stack)\n\tnum, _ := leb128.DecodeUnsigned(ctxt.buf)\n\tctxt.stack[slen-1] = ctxt.stack[slen-1] + int64(num)\n\treturn nil\n}\n\nfunc consts(opcode Opcode, ctxt *context) error {\n\tnum, _ := leb128.DecodeSigned(ctxt.buf)\n\tctxt.stack = append(ctxt.stack, num)\n\treturn nil\n}\n\nfunc framebase(opcode Opcode, ctxt *context) error {\n\tnum, _ := leb128.DecodeSigned(ctxt.buf)\n\tctxt.stack = append(ctxt.stack, ctxt.FrameBase+num)\n\treturn nil\n}\n\nfunc register(opcode Opcode, ctxt *context) error {\n\tvar regnum uint64\n\tif opcode == DW_OP_regx {\n\t\tregnum, _ = leb128.DecodeUnsigned(ctxt.buf)\n\t} else {\n\t\tregnum = uint64(opcode - DW_OP_reg0)\n\t}\n\treturn ctxt.closeLoc(opcode, Piece{Kind: RegPiece, Val: regnum})\n}\n\nfunc bregister(opcode Opcode, ctxt *context) error {\n\tvar regnum uint64\n\tif opcode == DW_OP_bregx {\n\t\tregnum, _ = leb128.DecodeUnsigned(ctxt.buf)\n\t} else {\n\t\tregnum = uint64(opcode - DW_OP_breg0)\n\t}\n\toffset, _ := leb128.DecodeSigned(ctxt.buf)\n\tif ctxt.Reg(regnum) == nil {\n\t\treturn fmt.Errorf(\"register %d not available\", regnum)\n\t}\n\tctxt.stack = append(ctxt.stack, int64(ctxt.Uint64Val(regnum))+offset)\n\treturn nil\n}\n\nfunc piece(opcode Opcode, ctxt *context) error {\n\tsz, _ := leb128.DecodeUnsigned(ctxt.buf)\n\n\tif len(ctxt.stack) == 0 {\n\t\t// nothing on the stack means this piece is unavailable (padding,\n\t\t// optimized away...), see DWARFv4 sec. 2.6.1.3 page 30.\n\t\tctxt.pieces = append(ctxt.pieces, Piece{Size: int(sz), Kind: ImmPiece, Val: 0})\n\t\treturn nil\n\t}\n\n\taddr := ctxt.stack[len(ctxt.stack)-1]\n\tctxt.pieces = append(ctxt.pieces, Piece{Size: int(sz), Kind: AddrPiece, Val: uint64(addr)})\n\tctxt.stack = ctxt.stack[:0]\n\treturn nil\n}\n\nfunc literal(opcode Opcode, ctxt *context) error {\n\tctxt.stack = append(ctxt.stack, int64(opcode-DW_OP_lit0))\n\treturn nil\n}\n\nfunc constnu(opcode Opcode, ctxt *context) error {\n\tvar (\n\t\tn   uint64\n\t\terr error\n\t)\n\tswitch opcode {\n\tcase DW_OP_const1u:\n\t\tvar b uint8\n\t\tb, err = ctxt.buf.ReadByte()\n\t\tn = uint64(b)\n\tcase DW_OP_const2u:\n\t\tn, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 2)\n\tcase DW_OP_const4u:\n\t\tn, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 4)\n\tcase DW_OP_const8u:\n\t\tn, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 8)\n\tdefault:\n\t\tpanic(\"internal error\")\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tctxt.stack = append(ctxt.stack, int64(n))\n\treturn nil\n}\n\nfunc constns(opcode Opcode, ctxt *context) error {\n\tvar (\n\t\tn   uint64\n\t\terr error\n\t)\n\tswitch opcode {\n\tcase DW_OP_const1s:\n\t\tvar b uint8\n\t\tb, err = ctxt.buf.ReadByte()\n\t\tn = uint64(int64(int8(b)))\n\tcase DW_OP_const2s:\n\t\tn, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 2)\n\t\tn = uint64(int64(int16(n)))\n\tcase DW_OP_const4s:\n\t\tn, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 4)\n\t\tn = uint64(int64(int32(n)))\n\tcase DW_OP_const8s:\n\t\tn, err = dwarf.ReadUintRaw(ctxt.buf, binary.LittleEndian, 8)\n\tdefault:\n\t\tpanic(\"internal error\")\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tctxt.stack = append(ctxt.stack, int64(n))\n\treturn nil\n}\n\nfunc constu(opcode Opcode, ctxt *context) error {\n\tnum, _ := leb128.DecodeUnsigned(ctxt.buf)\n\tctxt.stack = append(ctxt.stack, int64(num))\n\treturn nil\n}\n\nfunc dup(_ Opcode, ctxt *context) error {\n\tif len(ctxt.stack) == 0 {\n\t\treturn ErrStackUnderflow\n\t}\n\tctxt.stack = append(ctxt.stack, ctxt.stack[len(ctxt.stack)-1])\n\treturn nil\n}\n\nfunc drop(_ Opcode, ctxt *context) error {\n\tif len(ctxt.stack) == 0 {\n\t\treturn ErrStackUnderflow\n\t}\n\tctxt.stack = ctxt.stack[:len(ctxt.stack)-1]\n\treturn nil\n}\n\nfunc pick(opcode Opcode, ctxt *context) error {\n\tvar n byte\n\tswitch opcode {\n\tcase DW_OP_pick:\n\t\tn, _ = ctxt.buf.ReadByte()\n\tcase DW_OP_over:\n\t\tn = 1\n\tdefault:\n\t\tpanic(\"internal error\")\n\t}\n\tidx := len(ctxt.stack) - 1 - int(n)\n\tif idx < 0 || idx >= len(ctxt.stack) {\n\t\treturn ErrStackIndexOutOfBounds\n\t}\n\tctxt.stack = append(ctxt.stack, ctxt.stack[idx])\n\treturn nil\n}\n\nfunc swap(_ Opcode, ctxt *context) error {\n\tif len(ctxt.stack) < 2 {\n\t\treturn ErrStackUnderflow\n\t}\n\tctxt.stack[len(ctxt.stack)-1], ctxt.stack[len(ctxt.stack)-2] = ctxt.stack[len(ctxt.stack)-2], ctxt.stack[len(ctxt.stack)-1]\n\treturn nil\n}\n\nfunc rot(_ Opcode, ctxt *context) error {\n\tif len(ctxt.stack) < 3 {\n\t\treturn ErrStackUnderflow\n\t}\n\tctxt.stack[len(ctxt.stack)-1], ctxt.stack[len(ctxt.stack)-2], ctxt.stack[len(ctxt.stack)-3] = ctxt.stack[len(ctxt.stack)-2], ctxt.stack[len(ctxt.stack)-3], ctxt.stack[len(ctxt.stack)-1]\n\treturn nil\n}\n\nfunc unaryop(opcode Opcode, ctxt *context) error {\n\tif len(ctxt.stack) < 1 {\n\t\treturn ErrStackUnderflow\n\t}\n\toperand := ctxt.stack[len(ctxt.stack)-1]\n\tswitch opcode {\n\tcase DW_OP_abs:\n\t\tif operand < 0 {\n\t\t\toperand = -operand\n\t\t}\n\tcase DW_OP_neg:\n\t\toperand = -operand\n\tcase DW_OP_not:\n\t\toperand = ^operand\n\tdefault:\n\t\tpanic(\"internal error\")\n\t}\n\tctxt.stack[len(ctxt.stack)-1] = operand\n\treturn nil\n}\n\nfunc binaryop(opcode Opcode, ctxt *context) error {\n\tif len(ctxt.stack) < 2 {\n\t\treturn ErrStackUnderflow\n\t}\n\tsecond := ctxt.stack[len(ctxt.stack)-2]\n\ttop := ctxt.stack[len(ctxt.stack)-1]\n\tvar r int64\n\tctxt.stack = ctxt.stack[:len(ctxt.stack)-2]\n\tswitch opcode {\n\tcase DW_OP_and:\n\t\tr = second & top\n\tcase DW_OP_div:\n\t\tr = second / top\n\tcase DW_OP_minus:\n\t\tr = second - top\n\tcase DW_OP_mod:\n\t\tr = second % top\n\tcase DW_OP_mul:\n\t\tr = second * top\n\tcase DW_OP_or:\n\t\tr = second | top\n\tcase DW_OP_plus:\n\t\tr = second + top\n\tcase DW_OP_shl:\n\t\tr = second << uint64(top)\n\tcase DW_OP_shr:\n\t\tr = second >> uint64(top)\n\tcase DW_OP_shra:\n\t\tr = int64(uint64(second) >> uint64(top))\n\tcase DW_OP_xor:\n\t\tr = second ^ top\n\tcase DW_OP_le:\n\t\tr = bool2int(second <= top)\n\tcase DW_OP_ge:\n\t\tr = bool2int(second >= top)\n\tcase DW_OP_eq:\n\t\tr = bool2int(second == top)\n\tcase DW_OP_lt:\n\t\tr = bool2int(second < top)\n\tcase DW_OP_gt:\n\t\tr = bool2int(second > top)\n\tcase DW_OP_ne:\n\t\tr = bool2int(second != top)\n\tdefault:\n\t\tpanic(\"internal error\")\n\t}\n\tctxt.stack = append(ctxt.stack, r)\n\treturn nil\n}\n\nfunc bool2int(b bool) int64 {\n\tif b {\n\t\treturn 1\n\t}\n\treturn 0\n}\n\nfunc (ctxt *context) jump(n int16) error {\n\ti := len(ctxt.prog) - ctxt.buf.Len() + int(n)\n\tif i < 0 {\n\t\treturn ErrStackUnderflow\n\t}\n\tif i >= len(ctxt.prog) {\n\t\ti = len(ctxt.prog)\n\t}\n\tctxt.buf = bytes.NewBuffer(ctxt.prog[i:])\n\treturn nil\n}\n\nfunc skip(_ Opcode, ctxt *context) error {\n\tvar n int16\n\tbinary.Read(ctxt.buf, binary.LittleEndian, &n)\n\treturn ctxt.jump(n)\n}\n\nfunc bra(_ Opcode, ctxt *context) error {\n\tvar n int16\n\tbinary.Read(ctxt.buf, binary.LittleEndian, &n)\n\n\tif len(ctxt.stack) < 1 {\n\t\treturn ErrStackUnderflow\n\t}\n\ttop := ctxt.stack[len(ctxt.stack)-1]\n\tctxt.stack = ctxt.stack[:len(ctxt.stack)-1]\n\tif top != 0 {\n\t\treturn ctxt.jump(n)\n\t}\n\treturn nil\n}\n\nfunc stackvalue(_ Opcode, ctxt *context) error {\n\tif len(ctxt.stack) < 1 {\n\t\treturn ErrStackUnderflow\n\t}\n\tval := ctxt.stack[len(ctxt.stack)-1]\n\tctxt.stack = ctxt.stack[:len(ctxt.stack)-1]\n\treturn ctxt.closeLoc(DW_OP_stack_value, Piece{Kind: ImmPiece, Val: uint64(val)})\n}\n\nfunc implicitvalue(_ Opcode, ctxt *context) error {\n\tsz, _ := leb128.DecodeUnsigned(ctxt.buf)\n\tblock := make([]byte, sz)\n\tn, _ := ctxt.buf.Read(block)\n\tif uint64(n) != sz {\n\t\treturn fmt.Errorf(\"insufficient bytes read while reading DW_OP_implicit_value's block %d (expected: %d)\", n, sz)\n\t}\n\treturn ctxt.closeLoc(DW_OP_implicit_value, Piece{Kind: ImmPiece, Bytes: block, Size: int(sz)})\n}\n\nfunc deref(op Opcode, ctxt *context) error {\n\tif ctxt.readMemory == nil {\n\t\treturn ErrMemoryReadUnavailable\n\t}\n\n\tsz := ctxt.ptrSize\n\tif op == DW_OP_deref_size || op == DW_OP_xderef_size {\n\t\tn, err := ctxt.buf.ReadByte()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsz = int(n)\n\t}\n\n\tif len(ctxt.stack) == 0 {\n\t\treturn ErrStackUnderflow\n\t}\n\n\taddr := ctxt.stack[len(ctxt.stack)-1]\n\tctxt.stack = ctxt.stack[:len(ctxt.stack)-1]\n\n\tif op == DW_OP_xderef || op == DW_OP_xderef_size {\n\t\tif len(ctxt.stack) == 0 {\n\t\t\treturn ErrStackUnderflow\n\t\t}\n\t\t// the second element on the stack is the \"address space identifier\" which we don't do anything with\n\t\tctxt.stack = ctxt.stack[:len(ctxt.stack)-1]\n\t}\n\n\tbuf := make([]byte, sz)\n\t_, err := ctxt.readMemory(buf, uint64(addr))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tx, err := dwarf.ReadUintRaw(bytes.NewReader(buf), binary.LittleEndian, sz)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tctxt.stack = append(ctxt.stack, int64(x))\n\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/dwarf/op/op_test.go",
    "content": "package op\n\nimport (\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc assertExprResult(t *testing.T, expected int64, instructions []byte) {\n\tt.Helper()\n\tactual, _, err := ExecuteStackProgram(DwarfRegisters{}, instructions, 8, nil)\n\tif err != nil {\n\t\tt.Error(err)\n\t}\n\tif actual != expected {\n\t\tbuf := new(strings.Builder)\n\t\tPrettyPrint(buf, instructions, nil)\n\t\tt.Errorf(\"actual %d != expected %d (in %s)\", actual, expected, buf.String())\n\t}\n}\n\nfunc TestExecuteStackProgram(t *testing.T) {\n\tt.Parallel()\n\tassertExprResult(t, 56, []byte{byte(DW_OP_consts), 0x1c, byte(DW_OP_consts), 0x1c, byte(DW_OP_plus)})\n}\n\nfunc TestSignExtension(t *testing.T) {\n\tt.Parallel()\n\tvar tgt uint64 = 0xffffffffffffff88\n\tassertExprResult(t, int64(tgt), []byte{byte(DW_OP_const1s), 0x88})\n\ttgt = 0xffffffffffff8888\n\tassertExprResult(t, int64(tgt), []byte{byte(DW_OP_const2s), 0x88, 0x88})\n}\n\nfunc TestStackOps(t *testing.T) {\n\tt.Parallel()\n\tassertExprResult(t, 1, []byte{byte(DW_OP_lit1), byte(DW_OP_lit2), byte(DW_OP_drop)})\n\tassertExprResult(t, 0, []byte{byte(DW_OP_lit1), byte(DW_OP_lit0), byte(DW_OP_pick), 0})\n\tassertExprResult(t, 1, []byte{byte(DW_OP_lit1), byte(DW_OP_lit0), byte(DW_OP_pick), 1})\n}\n\nfunc TestBra(t *testing.T) {\n\tt.Parallel()\n\tassertExprResult(t, 32, []byte{\n\t\tbyte(DW_OP_lit1),\n\t\tbyte(DW_OP_lit5),\n\n\t\tbyte(DW_OP_dup),\n\t\tbyte(DW_OP_lit0),\n\t\tbyte(DW_OP_eq),\n\t\tbyte(DW_OP_bra), 9, 0x0,\n\n\t\tbyte(DW_OP_swap),\n\t\tbyte(DW_OP_dup),\n\t\tbyte(DW_OP_plus),\n\t\tbyte(DW_OP_swap),\n\t\tbyte(DW_OP_lit1),\n\t\tbyte(DW_OP_minus),\n\t\tbyte(DW_OP_skip), 0xf1, 0xff,\n\n\t\tbyte(DW_OP_drop),\n\t})\n}\n"
  },
  {
    "path": "pkg/dwarf/op/opcodes.go",
    "content": "// Code generated by gen-opcodes. DO NOT EDIT.\n// Edit opcodes.table instead.\n\npackage op\n\nconst (\n\tDW_OP_addr                Opcode = 0x03\n\tDW_OP_deref               Opcode = 0x06\n\tDW_OP_const1u             Opcode = 0x08\n\tDW_OP_const1s             Opcode = 0x09\n\tDW_OP_const2u             Opcode = 0x0a\n\tDW_OP_const2s             Opcode = 0x0b\n\tDW_OP_const4u             Opcode = 0x0c\n\tDW_OP_const4s             Opcode = 0x0d\n\tDW_OP_const8u             Opcode = 0x0e\n\tDW_OP_const8s             Opcode = 0x0f\n\tDW_OP_constu              Opcode = 0x10\n\tDW_OP_consts              Opcode = 0x11\n\tDW_OP_dup                 Opcode = 0x12\n\tDW_OP_drop                Opcode = 0x13\n\tDW_OP_over                Opcode = 0x14\n\tDW_OP_pick                Opcode = 0x15\n\tDW_OP_swap                Opcode = 0x16\n\tDW_OP_rot                 Opcode = 0x17\n\tDW_OP_xderef              Opcode = 0x18\n\tDW_OP_abs                 Opcode = 0x19\n\tDW_OP_and                 Opcode = 0x1a\n\tDW_OP_div                 Opcode = 0x1b\n\tDW_OP_minus               Opcode = 0x1c\n\tDW_OP_mod                 Opcode = 0x1d\n\tDW_OP_mul                 Opcode = 0x1e\n\tDW_OP_neg                 Opcode = 0x1f\n\tDW_OP_not                 Opcode = 0x20\n\tDW_OP_or                  Opcode = 0x21\n\tDW_OP_plus                Opcode = 0x22\n\tDW_OP_plus_uconst         Opcode = 0x23\n\tDW_OP_shl                 Opcode = 0x24\n\tDW_OP_shr                 Opcode = 0x25\n\tDW_OP_shra                Opcode = 0x26\n\tDW_OP_xor                 Opcode = 0x27\n\tDW_OP_bra                 Opcode = 0x28\n\tDW_OP_eq                  Opcode = 0x29\n\tDW_OP_ge                  Opcode = 0x2a\n\tDW_OP_gt                  Opcode = 0x2b\n\tDW_OP_le                  Opcode = 0x2c\n\tDW_OP_lt                  Opcode = 0x2d\n\tDW_OP_ne                  Opcode = 0x2e\n\tDW_OP_skip                Opcode = 0x2f\n\tDW_OP_lit0                Opcode = 0x30\n\tDW_OP_lit1                Opcode = 0x31\n\tDW_OP_lit2                Opcode = 0x32\n\tDW_OP_lit3                Opcode = 0x33\n\tDW_OP_lit4                Opcode = 0x34\n\tDW_OP_lit5                Opcode = 0x35\n\tDW_OP_lit6                Opcode = 0x36\n\tDW_OP_lit7                Opcode = 0x37\n\tDW_OP_lit8                Opcode = 0x38\n\tDW_OP_lit9                Opcode = 0x39\n\tDW_OP_lit10               Opcode = 0x3a\n\tDW_OP_lit11               Opcode = 0x3b\n\tDW_OP_lit12               Opcode = 0x3c\n\tDW_OP_lit13               Opcode = 0x3d\n\tDW_OP_lit14               Opcode = 0x3e\n\tDW_OP_lit15               Opcode = 0x3f\n\tDW_OP_lit16               Opcode = 0x40\n\tDW_OP_lit17               Opcode = 0x41\n\tDW_OP_lit18               Opcode = 0x42\n\tDW_OP_lit19               Opcode = 0x43\n\tDW_OP_lit20               Opcode = 0x44\n\tDW_OP_lit21               Opcode = 0x45\n\tDW_OP_lit22               Opcode = 0x46\n\tDW_OP_lit23               Opcode = 0x47\n\tDW_OP_lit24               Opcode = 0x48\n\tDW_OP_lit25               Opcode = 0x49\n\tDW_OP_lit26               Opcode = 0x4a\n\tDW_OP_lit27               Opcode = 0x4b\n\tDW_OP_lit28               Opcode = 0x4c\n\tDW_OP_lit29               Opcode = 0x4d\n\tDW_OP_lit30               Opcode = 0x4e\n\tDW_OP_lit31               Opcode = 0x4f\n\tDW_OP_reg0                Opcode = 0x50\n\tDW_OP_reg1                Opcode = 0x51\n\tDW_OP_reg2                Opcode = 0x52\n\tDW_OP_reg3                Opcode = 0x53\n\tDW_OP_reg4                Opcode = 0x54\n\tDW_OP_reg5                Opcode = 0x55\n\tDW_OP_reg6                Opcode = 0x56\n\tDW_OP_reg7                Opcode = 0x57\n\tDW_OP_reg8                Opcode = 0x58\n\tDW_OP_reg9                Opcode = 0x59\n\tDW_OP_reg10               Opcode = 0x5a\n\tDW_OP_reg11               Opcode = 0x5b\n\tDW_OP_reg12               Opcode = 0x5c\n\tDW_OP_reg13               Opcode = 0x5d\n\tDW_OP_reg14               Opcode = 0x5e\n\tDW_OP_reg15               Opcode = 0x5f\n\tDW_OP_reg16               Opcode = 0x60\n\tDW_OP_reg17               Opcode = 0x61\n\tDW_OP_reg18               Opcode = 0x62\n\tDW_OP_reg19               Opcode = 0x63\n\tDW_OP_reg20               Opcode = 0x64\n\tDW_OP_reg21               Opcode = 0x65\n\tDW_OP_reg22               Opcode = 0x66\n\tDW_OP_reg23               Opcode = 0x67\n\tDW_OP_reg24               Opcode = 0x68\n\tDW_OP_reg25               Opcode = 0x69\n\tDW_OP_reg26               Opcode = 0x6a\n\tDW_OP_reg27               Opcode = 0x6b\n\tDW_OP_reg28               Opcode = 0x6c\n\tDW_OP_reg29               Opcode = 0x6d\n\tDW_OP_reg30               Opcode = 0x6e\n\tDW_OP_reg31               Opcode = 0x6f\n\tDW_OP_breg0               Opcode = 0x70\n\tDW_OP_breg1               Opcode = 0x71\n\tDW_OP_breg2               Opcode = 0x72\n\tDW_OP_breg3               Opcode = 0x73\n\tDW_OP_breg4               Opcode = 0x74\n\tDW_OP_breg5               Opcode = 0x75\n\tDW_OP_breg6               Opcode = 0x76\n\tDW_OP_breg7               Opcode = 0x77\n\tDW_OP_breg8               Opcode = 0x78\n\tDW_OP_breg9               Opcode = 0x79\n\tDW_OP_breg10              Opcode = 0x7a\n\tDW_OP_breg11              Opcode = 0x7b\n\tDW_OP_breg12              Opcode = 0x7c\n\tDW_OP_breg13              Opcode = 0x7d\n\tDW_OP_breg14              Opcode = 0x7e\n\tDW_OP_breg15              Opcode = 0x7f\n\tDW_OP_breg16              Opcode = 0x80\n\tDW_OP_breg17              Opcode = 0x81\n\tDW_OP_breg18              Opcode = 0x82\n\tDW_OP_breg19              Opcode = 0x83\n\tDW_OP_breg20              Opcode = 0x84\n\tDW_OP_breg21              Opcode = 0x85\n\tDW_OP_breg22              Opcode = 0x86\n\tDW_OP_breg23              Opcode = 0x87\n\tDW_OP_breg24              Opcode = 0x88\n\tDW_OP_breg25              Opcode = 0x89\n\tDW_OP_breg26              Opcode = 0x8a\n\tDW_OP_breg27              Opcode = 0x8b\n\tDW_OP_breg28              Opcode = 0x8c\n\tDW_OP_breg29              Opcode = 0x8d\n\tDW_OP_breg30              Opcode = 0x8e\n\tDW_OP_breg31              Opcode = 0x8f\n\tDW_OP_regx                Opcode = 0x90\n\tDW_OP_fbreg               Opcode = 0x91\n\tDW_OP_bregx               Opcode = 0x92\n\tDW_OP_piece               Opcode = 0x93\n\tDW_OP_deref_size          Opcode = 0x94\n\tDW_OP_xderef_size         Opcode = 0x95\n\tDW_OP_nop                 Opcode = 0x96\n\tDW_OP_push_object_address Opcode = 0x97\n\tDW_OP_call2               Opcode = 0x98\n\tDW_OP_call4               Opcode = 0x99\n\tDW_OP_call_ref            Opcode = 0x9a\n\tDW_OP_form_tls_address    Opcode = 0x9b\n\tDW_OP_call_frame_cfa      Opcode = 0x9c\n\tDW_OP_bit_piece           Opcode = 0x9d\n\tDW_OP_implicit_value      Opcode = 0x9e\n\tDW_OP_stack_value         Opcode = 0x9f\n)\n\nvar opcodeName = map[Opcode]string{\n\tDW_OP_addr:                \"DW_OP_addr\",\n\tDW_OP_deref:               \"DW_OP_deref\",\n\tDW_OP_const1u:             \"DW_OP_const1u\",\n\tDW_OP_const1s:             \"DW_OP_const1s\",\n\tDW_OP_const2u:             \"DW_OP_const2u\",\n\tDW_OP_const2s:             \"DW_OP_const2s\",\n\tDW_OP_const4u:             \"DW_OP_const4u\",\n\tDW_OP_const4s:             \"DW_OP_const4s\",\n\tDW_OP_const8u:             \"DW_OP_const8u\",\n\tDW_OP_const8s:             \"DW_OP_const8s\",\n\tDW_OP_constu:              \"DW_OP_constu\",\n\tDW_OP_consts:              \"DW_OP_consts\",\n\tDW_OP_dup:                 \"DW_OP_dup\",\n\tDW_OP_drop:                \"DW_OP_drop\",\n\tDW_OP_over:                \"DW_OP_over\",\n\tDW_OP_pick:                \"DW_OP_pick\",\n\tDW_OP_swap:                \"DW_OP_swap\",\n\tDW_OP_rot:                 \"DW_OP_rot\",\n\tDW_OP_xderef:              \"DW_OP_xderef\",\n\tDW_OP_abs:                 \"DW_OP_abs\",\n\tDW_OP_and:                 \"DW_OP_and\",\n\tDW_OP_div:                 \"DW_OP_div\",\n\tDW_OP_minus:               \"DW_OP_minus\",\n\tDW_OP_mod:                 \"DW_OP_mod\",\n\tDW_OP_mul:                 \"DW_OP_mul\",\n\tDW_OP_neg:                 \"DW_OP_neg\",\n\tDW_OP_not:                 \"DW_OP_not\",\n\tDW_OP_or:                  \"DW_OP_or\",\n\tDW_OP_plus:                \"DW_OP_plus\",\n\tDW_OP_plus_uconst:         \"DW_OP_plus_uconst\",\n\tDW_OP_shl:                 \"DW_OP_shl\",\n\tDW_OP_shr:                 \"DW_OP_shr\",\n\tDW_OP_shra:                \"DW_OP_shra\",\n\tDW_OP_xor:                 \"DW_OP_xor\",\n\tDW_OP_bra:                 \"DW_OP_bra\",\n\tDW_OP_eq:                  \"DW_OP_eq\",\n\tDW_OP_ge:                  \"DW_OP_ge\",\n\tDW_OP_gt:                  \"DW_OP_gt\",\n\tDW_OP_le:                  \"DW_OP_le\",\n\tDW_OP_lt:                  \"DW_OP_lt\",\n\tDW_OP_ne:                  \"DW_OP_ne\",\n\tDW_OP_skip:                \"DW_OP_skip\",\n\tDW_OP_lit0:                \"DW_OP_lit0\",\n\tDW_OP_lit1:                \"DW_OP_lit1\",\n\tDW_OP_lit2:                \"DW_OP_lit2\",\n\tDW_OP_lit3:                \"DW_OP_lit3\",\n\tDW_OP_lit4:                \"DW_OP_lit4\",\n\tDW_OP_lit5:                \"DW_OP_lit5\",\n\tDW_OP_lit6:                \"DW_OP_lit6\",\n\tDW_OP_lit7:                \"DW_OP_lit7\",\n\tDW_OP_lit8:                \"DW_OP_lit8\",\n\tDW_OP_lit9:                \"DW_OP_lit9\",\n\tDW_OP_lit10:               \"DW_OP_lit10\",\n\tDW_OP_lit11:               \"DW_OP_lit11\",\n\tDW_OP_lit12:               \"DW_OP_lit12\",\n\tDW_OP_lit13:               \"DW_OP_lit13\",\n\tDW_OP_lit14:               \"DW_OP_lit14\",\n\tDW_OP_lit15:               \"DW_OP_lit15\",\n\tDW_OP_lit16:               \"DW_OP_lit16\",\n\tDW_OP_lit17:               \"DW_OP_lit17\",\n\tDW_OP_lit18:               \"DW_OP_lit18\",\n\tDW_OP_lit19:               \"DW_OP_lit19\",\n\tDW_OP_lit20:               \"DW_OP_lit20\",\n\tDW_OP_lit21:               \"DW_OP_lit21\",\n\tDW_OP_lit22:               \"DW_OP_lit22\",\n\tDW_OP_lit23:               \"DW_OP_lit23\",\n\tDW_OP_lit24:               \"DW_OP_lit24\",\n\tDW_OP_lit25:               \"DW_OP_lit25\",\n\tDW_OP_lit26:               \"DW_OP_lit26\",\n\tDW_OP_lit27:               \"DW_OP_lit27\",\n\tDW_OP_lit28:               \"DW_OP_lit28\",\n\tDW_OP_lit29:               \"DW_OP_lit29\",\n\tDW_OP_lit30:               \"DW_OP_lit30\",\n\tDW_OP_lit31:               \"DW_OP_lit31\",\n\tDW_OP_reg0:                \"DW_OP_reg0\",\n\tDW_OP_reg1:                \"DW_OP_reg1\",\n\tDW_OP_reg2:                \"DW_OP_reg2\",\n\tDW_OP_reg3:                \"DW_OP_reg3\",\n\tDW_OP_reg4:                \"DW_OP_reg4\",\n\tDW_OP_reg5:                \"DW_OP_reg5\",\n\tDW_OP_reg6:                \"DW_OP_reg6\",\n\tDW_OP_reg7:                \"DW_OP_reg7\",\n\tDW_OP_reg8:                \"DW_OP_reg8\",\n\tDW_OP_reg9:                \"DW_OP_reg9\",\n\tDW_OP_reg10:               \"DW_OP_reg10\",\n\tDW_OP_reg11:               \"DW_OP_reg11\",\n\tDW_OP_reg12:               \"DW_OP_reg12\",\n\tDW_OP_reg13:               \"DW_OP_reg13\",\n\tDW_OP_reg14:               \"DW_OP_reg14\",\n\tDW_OP_reg15:               \"DW_OP_reg15\",\n\tDW_OP_reg16:               \"DW_OP_reg16\",\n\tDW_OP_reg17:               \"DW_OP_reg17\",\n\tDW_OP_reg18:               \"DW_OP_reg18\",\n\tDW_OP_reg19:               \"DW_OP_reg19\",\n\tDW_OP_reg20:               \"DW_OP_reg20\",\n\tDW_OP_reg21:               \"DW_OP_reg21\",\n\tDW_OP_reg22:               \"DW_OP_reg22\",\n\tDW_OP_reg23:               \"DW_OP_reg23\",\n\tDW_OP_reg24:               \"DW_OP_reg24\",\n\tDW_OP_reg25:               \"DW_OP_reg25\",\n\tDW_OP_reg26:               \"DW_OP_reg26\",\n\tDW_OP_reg27:               \"DW_OP_reg27\",\n\tDW_OP_reg28:               \"DW_OP_reg28\",\n\tDW_OP_reg29:               \"DW_OP_reg29\",\n\tDW_OP_reg30:               \"DW_OP_reg30\",\n\tDW_OP_reg31:               \"DW_OP_reg31\",\n\tDW_OP_breg0:               \"DW_OP_breg0\",\n\tDW_OP_breg1:               \"DW_OP_breg1\",\n\tDW_OP_breg2:               \"DW_OP_breg2\",\n\tDW_OP_breg3:               \"DW_OP_breg3\",\n\tDW_OP_breg4:               \"DW_OP_breg4\",\n\tDW_OP_breg5:               \"DW_OP_breg5\",\n\tDW_OP_breg6:               \"DW_OP_breg6\",\n\tDW_OP_breg7:               \"DW_OP_breg7\",\n\tDW_OP_breg8:               \"DW_OP_breg8\",\n\tDW_OP_breg9:               \"DW_OP_breg9\",\n\tDW_OP_breg10:              \"DW_OP_breg10\",\n\tDW_OP_breg11:              \"DW_OP_breg11\",\n\tDW_OP_breg12:              \"DW_OP_breg12\",\n\tDW_OP_breg13:              \"DW_OP_breg13\",\n\tDW_OP_breg14:              \"DW_OP_breg14\",\n\tDW_OP_breg15:              \"DW_OP_breg15\",\n\tDW_OP_breg16:              \"DW_OP_breg16\",\n\tDW_OP_breg17:              \"DW_OP_breg17\",\n\tDW_OP_breg18:              \"DW_OP_breg18\",\n\tDW_OP_breg19:              \"DW_OP_breg19\",\n\tDW_OP_breg20:              \"DW_OP_breg20\",\n\tDW_OP_breg21:              \"DW_OP_breg21\",\n\tDW_OP_breg22:              \"DW_OP_breg22\",\n\tDW_OP_breg23:              \"DW_OP_breg23\",\n\tDW_OP_breg24:              \"DW_OP_breg24\",\n\tDW_OP_breg25:              \"DW_OP_breg25\",\n\tDW_OP_breg26:              \"DW_OP_breg26\",\n\tDW_OP_breg27:              \"DW_OP_breg27\",\n\tDW_OP_breg28:              \"DW_OP_breg28\",\n\tDW_OP_breg29:              \"DW_OP_breg29\",\n\tDW_OP_breg30:              \"DW_OP_breg30\",\n\tDW_OP_breg31:              \"DW_OP_breg31\",\n\tDW_OP_regx:                \"DW_OP_regx\",\n\tDW_OP_fbreg:               \"DW_OP_fbreg\",\n\tDW_OP_bregx:               \"DW_OP_bregx\",\n\tDW_OP_piece:               \"DW_OP_piece\",\n\tDW_OP_deref_size:          \"DW_OP_deref_size\",\n\tDW_OP_xderef_size:         \"DW_OP_xderef_size\",\n\tDW_OP_nop:                 \"DW_OP_nop\",\n\tDW_OP_push_object_address: \"DW_OP_push_object_address\",\n\tDW_OP_call2:               \"DW_OP_call2\",\n\tDW_OP_call4:               \"DW_OP_call4\",\n\tDW_OP_call_ref:            \"DW_OP_call_ref\",\n\tDW_OP_form_tls_address:    \"DW_OP_form_tls_address\",\n\tDW_OP_call_frame_cfa:      \"DW_OP_call_frame_cfa\",\n\tDW_OP_bit_piece:           \"DW_OP_bit_piece\",\n\tDW_OP_implicit_value:      \"DW_OP_implicit_value\",\n\tDW_OP_stack_value:         \"DW_OP_stack_value\",\n}\nvar opcodeArgs = map[Opcode]string{\n\tDW_OP_addr:                \"8\",\n\tDW_OP_deref:               \"\",\n\tDW_OP_const1u:             \"1\",\n\tDW_OP_const1s:             \"1\",\n\tDW_OP_const2u:             \"2\",\n\tDW_OP_const2s:             \"2\",\n\tDW_OP_const4u:             \"4\",\n\tDW_OP_const4s:             \"4\",\n\tDW_OP_const8u:             \"8\",\n\tDW_OP_const8s:             \"8\",\n\tDW_OP_constu:              \"u\",\n\tDW_OP_consts:              \"s\",\n\tDW_OP_dup:                 \"\",\n\tDW_OP_drop:                \"\",\n\tDW_OP_over:                \"\",\n\tDW_OP_pick:                \"\",\n\tDW_OP_swap:                \"\",\n\tDW_OP_rot:                 \"\",\n\tDW_OP_xderef:              \"\",\n\tDW_OP_abs:                 \"\",\n\tDW_OP_and:                 \"\",\n\tDW_OP_div:                 \"\",\n\tDW_OP_minus:               \"\",\n\tDW_OP_mod:                 \"\",\n\tDW_OP_mul:                 \"\",\n\tDW_OP_neg:                 \"\",\n\tDW_OP_not:                 \"\",\n\tDW_OP_or:                  \"\",\n\tDW_OP_plus:                \"\",\n\tDW_OP_plus_uconst:         \"u\",\n\tDW_OP_shl:                 \"\",\n\tDW_OP_shr:                 \"\",\n\tDW_OP_shra:                \"\",\n\tDW_OP_xor:                 \"\",\n\tDW_OP_bra:                 \"2\",\n\tDW_OP_eq:                  \"\",\n\tDW_OP_ge:                  \"\",\n\tDW_OP_gt:                  \"\",\n\tDW_OP_le:                  \"\",\n\tDW_OP_lt:                  \"\",\n\tDW_OP_ne:                  \"\",\n\tDW_OP_skip:                \"2\",\n\tDW_OP_lit0:                \"\",\n\tDW_OP_lit1:                \"\",\n\tDW_OP_lit2:                \"\",\n\tDW_OP_lit3:                \"\",\n\tDW_OP_lit4:                \"\",\n\tDW_OP_lit5:                \"\",\n\tDW_OP_lit6:                \"\",\n\tDW_OP_lit7:                \"\",\n\tDW_OP_lit8:                \"\",\n\tDW_OP_lit9:                \"\",\n\tDW_OP_lit10:               \"\",\n\tDW_OP_lit11:               \"\",\n\tDW_OP_lit12:               \"\",\n\tDW_OP_lit13:               \"\",\n\tDW_OP_lit14:               \"\",\n\tDW_OP_lit15:               \"\",\n\tDW_OP_lit16:               \"\",\n\tDW_OP_lit17:               \"\",\n\tDW_OP_lit18:               \"\",\n\tDW_OP_lit19:               \"\",\n\tDW_OP_lit20:               \"\",\n\tDW_OP_lit21:               \"\",\n\tDW_OP_lit22:               \"\",\n\tDW_OP_lit23:               \"\",\n\tDW_OP_lit24:               \"\",\n\tDW_OP_lit25:               \"\",\n\tDW_OP_lit26:               \"\",\n\tDW_OP_lit27:               \"\",\n\tDW_OP_lit28:               \"\",\n\tDW_OP_lit29:               \"\",\n\tDW_OP_lit30:               \"\",\n\tDW_OP_lit31:               \"\",\n\tDW_OP_reg0:                \"\",\n\tDW_OP_reg1:                \"\",\n\tDW_OP_reg2:                \"\",\n\tDW_OP_reg3:                \"\",\n\tDW_OP_reg4:                \"\",\n\tDW_OP_reg5:                \"\",\n\tDW_OP_reg6:                \"\",\n\tDW_OP_reg7:                \"\",\n\tDW_OP_reg8:                \"\",\n\tDW_OP_reg9:                \"\",\n\tDW_OP_reg10:               \"\",\n\tDW_OP_reg11:               \"\",\n\tDW_OP_reg12:               \"\",\n\tDW_OP_reg13:               \"\",\n\tDW_OP_reg14:               \"\",\n\tDW_OP_reg15:               \"\",\n\tDW_OP_reg16:               \"\",\n\tDW_OP_reg17:               \"\",\n\tDW_OP_reg18:               \"\",\n\tDW_OP_reg19:               \"\",\n\tDW_OP_reg20:               \"\",\n\tDW_OP_reg21:               \"\",\n\tDW_OP_reg22:               \"\",\n\tDW_OP_reg23:               \"\",\n\tDW_OP_reg24:               \"\",\n\tDW_OP_reg25:               \"\",\n\tDW_OP_reg26:               \"\",\n\tDW_OP_reg27:               \"\",\n\tDW_OP_reg28:               \"\",\n\tDW_OP_reg29:               \"\",\n\tDW_OP_reg30:               \"\",\n\tDW_OP_reg31:               \"\",\n\tDW_OP_breg0:               \"s\",\n\tDW_OP_breg1:               \"s\",\n\tDW_OP_breg2:               \"s\",\n\tDW_OP_breg3:               \"s\",\n\tDW_OP_breg4:               \"s\",\n\tDW_OP_breg5:               \"s\",\n\tDW_OP_breg6:               \"s\",\n\tDW_OP_breg7:               \"s\",\n\tDW_OP_breg8:               \"s\",\n\tDW_OP_breg9:               \"s\",\n\tDW_OP_breg10:              \"s\",\n\tDW_OP_breg11:              \"s\",\n\tDW_OP_breg12:              \"s\",\n\tDW_OP_breg13:              \"s\",\n\tDW_OP_breg14:              \"s\",\n\tDW_OP_breg15:              \"s\",\n\tDW_OP_breg16:              \"s\",\n\tDW_OP_breg17:              \"s\",\n\tDW_OP_breg18:              \"s\",\n\tDW_OP_breg19:              \"s\",\n\tDW_OP_breg20:              \"s\",\n\tDW_OP_breg21:              \"s\",\n\tDW_OP_breg22:              \"s\",\n\tDW_OP_breg23:              \"s\",\n\tDW_OP_breg24:              \"s\",\n\tDW_OP_breg25:              \"s\",\n\tDW_OP_breg26:              \"s\",\n\tDW_OP_breg27:              \"s\",\n\tDW_OP_breg28:              \"s\",\n\tDW_OP_breg29:              \"s\",\n\tDW_OP_breg30:              \"s\",\n\tDW_OP_breg31:              \"s\",\n\tDW_OP_regx:                \"s\",\n\tDW_OP_fbreg:               \"s\",\n\tDW_OP_bregx:               \"us\",\n\tDW_OP_piece:               \"u\",\n\tDW_OP_deref_size:          \"1\",\n\tDW_OP_xderef_size:         \"1\",\n\tDW_OP_nop:                 \"\",\n\tDW_OP_push_object_address: \"\",\n\tDW_OP_call2:               \"2\",\n\tDW_OP_call4:               \"4\",\n\tDW_OP_call_ref:            \"4\",\n\tDW_OP_form_tls_address:    \"\",\n\tDW_OP_call_frame_cfa:      \"\",\n\tDW_OP_bit_piece:           \"uu\",\n\tDW_OP_implicit_value:      \"B\",\n\tDW_OP_stack_value:         \"\",\n}\nvar oplut = map[Opcode]stackfn{\n\tDW_OP_addr:           addr,\n\tDW_OP_deref:          deref,\n\tDW_OP_const1u:        constnu,\n\tDW_OP_const1s:        constns,\n\tDW_OP_const2u:        constnu,\n\tDW_OP_const2s:        constns,\n\tDW_OP_const4u:        constnu,\n\tDW_OP_const4s:        constns,\n\tDW_OP_const8u:        constnu,\n\tDW_OP_const8s:        constns,\n\tDW_OP_constu:         constu,\n\tDW_OP_consts:         consts,\n\tDW_OP_dup:            dup,\n\tDW_OP_drop:           drop,\n\tDW_OP_over:           pick,\n\tDW_OP_pick:           pick,\n\tDW_OP_swap:           swap,\n\tDW_OP_rot:            rot,\n\tDW_OP_xderef:         deref,\n\tDW_OP_abs:            unaryop,\n\tDW_OP_and:            binaryop,\n\tDW_OP_div:            binaryop,\n\tDW_OP_minus:          binaryop,\n\tDW_OP_mod:            binaryop,\n\tDW_OP_mul:            binaryop,\n\tDW_OP_neg:            unaryop,\n\tDW_OP_not:            unaryop,\n\tDW_OP_or:             binaryop,\n\tDW_OP_plus:           binaryop,\n\tDW_OP_plus_uconst:    plusuconsts,\n\tDW_OP_shl:            binaryop,\n\tDW_OP_shr:            binaryop,\n\tDW_OP_shra:           binaryop,\n\tDW_OP_xor:            binaryop,\n\tDW_OP_bra:            bra,\n\tDW_OP_eq:             binaryop,\n\tDW_OP_ge:             binaryop,\n\tDW_OP_gt:             binaryop,\n\tDW_OP_le:             binaryop,\n\tDW_OP_lt:             binaryop,\n\tDW_OP_ne:             binaryop,\n\tDW_OP_skip:           skip,\n\tDW_OP_lit0:           literal,\n\tDW_OP_lit1:           literal,\n\tDW_OP_lit2:           literal,\n\tDW_OP_lit3:           literal,\n\tDW_OP_lit4:           literal,\n\tDW_OP_lit5:           literal,\n\tDW_OP_lit6:           literal,\n\tDW_OP_lit7:           literal,\n\tDW_OP_lit8:           literal,\n\tDW_OP_lit9:           literal,\n\tDW_OP_lit10:          literal,\n\tDW_OP_lit11:          literal,\n\tDW_OP_lit12:          literal,\n\tDW_OP_lit13:          literal,\n\tDW_OP_lit14:          literal,\n\tDW_OP_lit15:          literal,\n\tDW_OP_lit16:          literal,\n\tDW_OP_lit17:          literal,\n\tDW_OP_lit18:          literal,\n\tDW_OP_lit19:          literal,\n\tDW_OP_lit20:          literal,\n\tDW_OP_lit21:          literal,\n\tDW_OP_lit22:          literal,\n\tDW_OP_lit23:          literal,\n\tDW_OP_lit24:          literal,\n\tDW_OP_lit25:          literal,\n\tDW_OP_lit26:          literal,\n\tDW_OP_lit27:          literal,\n\tDW_OP_lit28:          literal,\n\tDW_OP_lit29:          literal,\n\tDW_OP_lit30:          literal,\n\tDW_OP_lit31:          literal,\n\tDW_OP_reg0:           register,\n\tDW_OP_reg1:           register,\n\tDW_OP_reg2:           register,\n\tDW_OP_reg3:           register,\n\tDW_OP_reg4:           register,\n\tDW_OP_reg5:           register,\n\tDW_OP_reg6:           register,\n\tDW_OP_reg7:           register,\n\tDW_OP_reg8:           register,\n\tDW_OP_reg9:           register,\n\tDW_OP_reg10:          register,\n\tDW_OP_reg11:          register,\n\tDW_OP_reg12:          register,\n\tDW_OP_reg13:          register,\n\tDW_OP_reg14:          register,\n\tDW_OP_reg15:          register,\n\tDW_OP_reg16:          register,\n\tDW_OP_reg17:          register,\n\tDW_OP_reg18:          register,\n\tDW_OP_reg19:          register,\n\tDW_OP_reg20:          register,\n\tDW_OP_reg21:          register,\n\tDW_OP_reg22:          register,\n\tDW_OP_reg23:          register,\n\tDW_OP_reg24:          register,\n\tDW_OP_reg25:          register,\n\tDW_OP_reg26:          register,\n\tDW_OP_reg27:          register,\n\tDW_OP_reg28:          register,\n\tDW_OP_reg29:          register,\n\tDW_OP_reg30:          register,\n\tDW_OP_reg31:          register,\n\tDW_OP_breg0:          bregister,\n\tDW_OP_breg1:          bregister,\n\tDW_OP_breg2:          bregister,\n\tDW_OP_breg3:          bregister,\n\tDW_OP_breg4:          bregister,\n\tDW_OP_breg5:          bregister,\n\tDW_OP_breg6:          bregister,\n\tDW_OP_breg7:          bregister,\n\tDW_OP_breg8:          bregister,\n\tDW_OP_breg9:          bregister,\n\tDW_OP_breg10:         bregister,\n\tDW_OP_breg11:         bregister,\n\tDW_OP_breg12:         bregister,\n\tDW_OP_breg13:         bregister,\n\tDW_OP_breg14:         bregister,\n\tDW_OP_breg15:         bregister,\n\tDW_OP_breg16:         bregister,\n\tDW_OP_breg17:         bregister,\n\tDW_OP_breg18:         bregister,\n\tDW_OP_breg19:         bregister,\n\tDW_OP_breg20:         bregister,\n\tDW_OP_breg21:         bregister,\n\tDW_OP_breg22:         bregister,\n\tDW_OP_breg23:         bregister,\n\tDW_OP_breg24:         bregister,\n\tDW_OP_breg25:         bregister,\n\tDW_OP_breg26:         bregister,\n\tDW_OP_breg27:         bregister,\n\tDW_OP_breg28:         bregister,\n\tDW_OP_breg29:         bregister,\n\tDW_OP_breg30:         bregister,\n\tDW_OP_breg31:         bregister,\n\tDW_OP_regx:           register,\n\tDW_OP_fbreg:          framebase,\n\tDW_OP_bregx:          bregister,\n\tDW_OP_piece:          piece,\n\tDW_OP_deref_size:     deref,\n\tDW_OP_xderef_size:    deref,\n\tDW_OP_call_frame_cfa: callframecfa,\n\tDW_OP_implicit_value: implicitvalue,\n\tDW_OP_stack_value:    stackvalue,\n}\n"
  },
  {
    "path": "pkg/dwarf/op/opcodes.table",
    "content": "// This file is used by _scripts/gen-opcodes.go to generate\n// pkg/dwarf/op/opcodes.go \n// Lines starting with // are comments and will be discarded.\n// Non empty lines contain the following tab separated fields:\n//\n//  <opcode name> <opcode code> <arguments> <function name>\n// \n// With the last column, <function name>, being optional.\n//\n// The arguments field should contain a string with one character for each\n// argument of the opcode:\n//\n//  s\t\tsigned variable length integer\n//  u\t\tunsigned variable length integer\n//  1\t\tone byte unsigned integer\n//  2\t\ttwo bytes unsigned integer\n//  4\t\tfour bytes unsigned integer\n//  8\t\teight bytes unsigned integer\n//  B\t\tan unsigned variable length integer 'n' followed by n a block of n bytes\n\n\nDW_OP_addr\t0x03\t\"8\"\taddr\nDW_OP_deref\t0x06\t\"\"\tderef\nDW_OP_const1u\t0x08\t\"1\"\tconstnu\nDW_OP_const1s\t0x09\t\"1\"\tconstns\nDW_OP_const2u\t0x0a\t\"2\"\tconstnu\nDW_OP_const2s\t0x0b\t\"2\"\tconstns\nDW_OP_const4u\t0x0c\t\"4\"\tconstnu\nDW_OP_const4s\t0x0d\t\"4\"\tconstns\nDW_OP_const8u\t0x0e\t\"8\"\tconstnu\nDW_OP_const8s\t0x0f\t\"8\"\tconstns\nDW_OP_constu\t0x10\t\"u\"\tconstu\nDW_OP_consts\t0x11\t\"s\"\tconsts\nDW_OP_dup\t0x12\t\"\"\tdup\nDW_OP_drop\t0x13\t\"\"\tdrop\nDW_OP_over\t0x14\t\"\"\tpick\nDW_OP_pick\t0x15\t\"\"\tpick\nDW_OP_swap\t0x16\t\"\"\tswap\nDW_OP_rot\t0x17\t\"\"\trot\nDW_OP_xderef\t0x18\t\"\"\tderef\nDW_OP_abs\t0x19\t\"\"\tunaryop\nDW_OP_and\t0x1a\t\"\"\tbinaryop\nDW_OP_div\t0x1b\t\"\"\tbinaryop\nDW_OP_minus\t0x1c\t\"\"\tbinaryop\nDW_OP_mod\t0x1d\t\"\"\tbinaryop\nDW_OP_mul\t0x1e\t\"\"\tbinaryop\nDW_OP_neg\t0x1f\t\"\"\tunaryop\nDW_OP_not\t0x20\t\"\"\tunaryop\nDW_OP_or\t0x21\t\"\"\tbinaryop\nDW_OP_plus\t0x22\t\"\"\tbinaryop\nDW_OP_plus_uconst\t0x23\t\"u\"\tplusuconsts\nDW_OP_shl\t0x24\t\"\"\tbinaryop\nDW_OP_shr\t0x25\t\"\"\tbinaryop\nDW_OP_shra\t0x26\t\"\"\tbinaryop\nDW_OP_xor\t0x27\t\"\"\tbinaryop\nDW_OP_bra\t0x28\t\"2\"\tbra\nDW_OP_eq\t0x29\t\"\"\tbinaryop\nDW_OP_ge\t0x2a\t\"\"\tbinaryop\nDW_OP_gt\t0x2b\t\"\"\tbinaryop\nDW_OP_le\t0x2c\t\"\"\tbinaryop\nDW_OP_lt\t0x2d\t\"\"\tbinaryop\nDW_OP_ne\t0x2e\t\"\"\tbinaryop\nDW_OP_skip\t0x2f\t\"2\"\tskip\nDW_OP_lit0\t0x30\t\"\"\tliteral\nDW_OP_lit1\t0x31\t\"\"\tliteral\nDW_OP_lit2\t0x32\t\"\"\tliteral\nDW_OP_lit3\t0x33\t\"\"\tliteral\nDW_OP_lit4\t0x34\t\"\"\tliteral\nDW_OP_lit5\t0x35\t\"\"\tliteral\nDW_OP_lit6\t0x36\t\"\"\tliteral\nDW_OP_lit7\t0x37\t\"\"\tliteral\nDW_OP_lit8\t0x38\t\"\"\tliteral\nDW_OP_lit9\t0x39\t\"\"\tliteral\nDW_OP_lit10\t0x3a\t\"\"\tliteral\nDW_OP_lit11\t0x3b\t\"\"\tliteral\nDW_OP_lit12\t0x3c\t\"\"\tliteral\nDW_OP_lit13\t0x3d\t\"\"\tliteral\nDW_OP_lit14\t0x3e\t\"\"\tliteral\nDW_OP_lit15\t0x3f\t\"\"\tliteral\nDW_OP_lit16\t0x40\t\"\"\tliteral\nDW_OP_lit17\t0x41\t\"\"\tliteral\nDW_OP_lit18\t0x42\t\"\"\tliteral\nDW_OP_lit19\t0x43\t\"\"\tliteral\nDW_OP_lit20\t0x44\t\"\"\tliteral\nDW_OP_lit21\t0x45\t\"\"\tliteral\nDW_OP_lit22\t0x46\t\"\"\tliteral\nDW_OP_lit23\t0x47\t\"\"\tliteral\nDW_OP_lit24\t0x48\t\"\"\tliteral\nDW_OP_lit25\t0x49\t\"\"\tliteral\nDW_OP_lit26\t0x4a\t\"\"\tliteral\nDW_OP_lit27\t0x4b\t\"\"\tliteral\nDW_OP_lit28\t0x4c\t\"\"\tliteral\nDW_OP_lit29\t0x4d\t\"\"\tliteral\nDW_OP_lit30\t0x4e\t\"\"\tliteral\nDW_OP_lit31\t0x4f\t\"\"\tliteral\nDW_OP_reg0\t0x50\t\"\"\tregister\nDW_OP_reg1\t0x51\t\"\"\tregister\nDW_OP_reg2\t0x52\t\"\"\tregister\nDW_OP_reg3\t0x53\t\"\"\tregister\nDW_OP_reg4\t0x54\t\"\"\tregister\nDW_OP_reg5\t0x55\t\"\"\tregister\nDW_OP_reg6\t0x56\t\"\"\tregister\nDW_OP_reg7\t0x57\t\"\"\tregister\nDW_OP_reg8\t0x58\t\"\"\tregister\nDW_OP_reg9\t0x59\t\"\"\tregister\nDW_OP_reg10\t0x5a\t\"\"\tregister\nDW_OP_reg11\t0x5b\t\"\"\tregister\nDW_OP_reg12\t0x5c\t\"\"\tregister\nDW_OP_reg13\t0x5d\t\"\"\tregister\nDW_OP_reg14\t0x5e\t\"\"\tregister\nDW_OP_reg15\t0x5f\t\"\"\tregister\nDW_OP_reg16\t0x60\t\"\"\tregister\nDW_OP_reg17\t0x61\t\"\"\tregister\nDW_OP_reg18\t0x62\t\"\"\tregister\nDW_OP_reg19\t0x63\t\"\"\tregister\nDW_OP_reg20\t0x64\t\"\"\tregister\nDW_OP_reg21\t0x65\t\"\"\tregister\nDW_OP_reg22\t0x66\t\"\"\tregister\nDW_OP_reg23\t0x67\t\"\"\tregister\nDW_OP_reg24\t0x68\t\"\"\tregister\nDW_OP_reg25\t0x69\t\"\"\tregister\nDW_OP_reg26\t0x6a\t\"\"\tregister\nDW_OP_reg27\t0x6b\t\"\"\tregister\nDW_OP_reg28\t0x6c\t\"\"\tregister\nDW_OP_reg29\t0x6d\t\"\"\tregister\nDW_OP_reg30\t0x6e\t\"\"\tregister\nDW_OP_reg31\t0x6f\t\"\"\tregister\nDW_OP_breg0\t0x70\t\"s\"\tbregister\nDW_OP_breg1\t0x71\t\"s\"\tbregister\nDW_OP_breg2\t0x72\t\"s\"\tbregister\nDW_OP_breg3\t0x73\t\"s\"\tbregister\nDW_OP_breg4\t0x74\t\"s\"\tbregister\nDW_OP_breg5\t0x75\t\"s\"\tbregister\nDW_OP_breg6\t0x76\t\"s\"\tbregister\nDW_OP_breg7\t0x77\t\"s\"\tbregister\nDW_OP_breg8\t0x78\t\"s\"\tbregister\nDW_OP_breg9\t0x79\t\"s\"\tbregister\nDW_OP_breg10\t0x7a\t\"s\"\tbregister\nDW_OP_breg11\t0x7b\t\"s\"\tbregister\nDW_OP_breg12\t0x7c\t\"s\"\tbregister\nDW_OP_breg13\t0x7d\t\"s\"\tbregister\nDW_OP_breg14\t0x7e\t\"s\"\tbregister\nDW_OP_breg15\t0x7f\t\"s\"\tbregister\nDW_OP_breg16\t0x80\t\"s\"\tbregister\nDW_OP_breg17\t0x81\t\"s\"\tbregister\nDW_OP_breg18\t0x82\t\"s\"\tbregister\nDW_OP_breg19\t0x83\t\"s\"\tbregister\nDW_OP_breg20\t0x84\t\"s\"\tbregister\nDW_OP_breg21\t0x85\t\"s\"\tbregister\nDW_OP_breg22\t0x86\t\"s\"\tbregister\nDW_OP_breg23\t0x87\t\"s\"\tbregister\nDW_OP_breg24\t0x88\t\"s\"\tbregister\nDW_OP_breg25\t0x89\t\"s\"\tbregister\nDW_OP_breg26\t0x8a\t\"s\"\tbregister\nDW_OP_breg27\t0x8b\t\"s\"\tbregister\nDW_OP_breg28\t0x8c\t\"s\"\tbregister\nDW_OP_breg29\t0x8d\t\"s\"\tbregister\nDW_OP_breg30\t0x8e\t\"s\"\tbregister\nDW_OP_breg31\t0x8f\t\"s\"\tbregister\nDW_OP_regx\t0x90\t\"s\"\tregister\nDW_OP_fbreg\t0x91\t\"s\"\tframebase\nDW_OP_bregx\t0x92\t\"us\"\tbregister\nDW_OP_piece\t0x93\t\"u\"\tpiece\nDW_OP_deref_size\t0x94\t\"1\"\tderef\nDW_OP_xderef_size\t0x95\t\"1\"\tderef\nDW_OP_nop\t0x96\t\"\"\nDW_OP_push_object_address\t0x97\t\"\"\nDW_OP_call2\t0x98\t\"2\"\nDW_OP_call4\t0x99\t\"4\"\nDW_OP_call_ref\t0x9a\t\"4\"\nDW_OP_form_tls_address\t0x9b\t\"\"\nDW_OP_call_frame_cfa\t0x9c\t\"\"\tcallframecfa\nDW_OP_bit_piece\t0x9d\t\"uu\"\nDW_OP_implicit_value\t0x9e\t\"B\"\timplicitvalue\nDW_OP_stack_value\t0x9f\t\"\"\tstackvalue\n"
  },
  {
    "path": "pkg/dwarf/op/regs.go",
    "content": "package op\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n)\n\n// DwarfRegisters holds the value of stack program registers.\ntype DwarfRegisters struct {\n\tStaticBase uint64\n\n\tCFA       int64\n\tFrameBase int64\n\tObjBase   int64\n\tregs      []*DwarfRegister\n\n\tByteOrder  binary.ByteOrder\n\tPCRegNum   uint64\n\tSPRegNum   uint64\n\tBPRegNum   uint64\n\tLRRegNum   uint64\n\tChangeFunc RegisterChangeFunc\n\n\tFloatLoadError   error // error produced when loading floating point registers\n\tloadMoreCallback func()\n}\n\ntype DwarfRegister struct {\n\tUint64Val uint64\n\tBytes     []byte\n}\n\ntype RegisterChangeFunc func(regNum uint64, reg *DwarfRegister) error\n\n// NewDwarfRegisters returns a new DwarfRegisters object.\nfunc NewDwarfRegisters(staticBase uint64, regs []*DwarfRegister, byteOrder binary.ByteOrder, pcRegNum, spRegNum, bpRegNum, lrRegNum uint64) *DwarfRegisters {\n\treturn &DwarfRegisters{\n\t\tStaticBase: staticBase,\n\t\tregs:       regs,\n\t\tByteOrder:  byteOrder,\n\t\tPCRegNum:   pcRegNum,\n\t\tSPRegNum:   spRegNum,\n\t\tBPRegNum:   bpRegNum,\n\t\tLRRegNum:   lrRegNum,\n\t}\n}\n\n// SetLoadMoreCallback sets a callback function that will be called the\n// first time the user of regs tries to access an undefined register.\nfunc (regs *DwarfRegisters) SetLoadMoreCallback(fn func()) {\n\tregs.loadMoreCallback = fn\n}\n\n// CurrentSize returns the current number of known registers. This number might be\n// wrong if loadMoreCallback has been set.\nfunc (regs *DwarfRegisters) CurrentSize() int {\n\treturn len(regs.regs)\n}\n\n// Uint64Val returns the uint64 value of register idx.\nfunc (regs *DwarfRegisters) Uint64Val(idx uint64) uint64 {\n\treg := regs.Reg(idx)\n\tif reg == nil {\n\t\treturn 0\n\t}\n\treturn regs.regs[idx].Uint64Val\n}\n\n// Bytes returns the bytes value of register idx, nil if the register is not\n// defined.\nfunc (regs *DwarfRegisters) Bytes(idx uint64) []byte {\n\treg := regs.Reg(idx)\n\tif reg == nil {\n\t\treturn nil\n\t}\n\tif reg.Bytes == nil {\n\t\tvar buf bytes.Buffer\n\t\tbinary.Write(&buf, regs.ByteOrder, reg.Uint64Val)\n\t\treg.Bytes = buf.Bytes()\n\t}\n\treturn reg.Bytes\n}\n\nfunc (regs *DwarfRegisters) loadMore() {\n\tif regs.loadMoreCallback == nil {\n\t\treturn\n\t}\n\tregs.loadMoreCallback()\n\tregs.loadMoreCallback = nil\n}\n\n// Reg returns register idx or nil if the register is not defined.\nfunc (regs *DwarfRegisters) Reg(idx uint64) *DwarfRegister {\n\tif idx >= uint64(len(regs.regs)) {\n\t\tregs.loadMore()\n\t\tif idx >= uint64(len(regs.regs)) {\n\t\t\treturn nil\n\t\t}\n\t}\n\tif regs.regs[idx] == nil {\n\t\tregs.loadMore()\n\t}\n\treturn regs.regs[idx]\n}\n\nfunc (regs *DwarfRegisters) PC() uint64 {\n\treturn regs.Uint64Val(regs.PCRegNum)\n}\n\nfunc (regs *DwarfRegisters) SP() uint64 {\n\treturn regs.Uint64Val(regs.SPRegNum)\n}\n\nfunc (regs *DwarfRegisters) BP() uint64 {\n\treturn regs.Uint64Val(regs.BPRegNum)\n}\n\n// AddReg adds register idx to regs.\nfunc (regs *DwarfRegisters) AddReg(idx uint64, reg *DwarfRegister) {\n\tif idx >= uint64(len(regs.regs)) {\n\t\tnewRegs := make([]*DwarfRegister, idx+1)\n\t\tcopy(newRegs, regs.regs)\n\t\tregs.regs = newRegs\n\t}\n\tregs.regs[idx] = reg\n}\n\n// ClearRegisters clears all registers.\nfunc (regs *DwarfRegisters) ClearRegisters() {\n\tregs.loadMoreCallback = nil\n\tfor regnum := range regs.regs {\n\t\tregs.regs[regnum] = nil\n\t}\n}\n\nfunc DwarfRegisterFromUint64(v uint64) *DwarfRegister {\n\treturn &DwarfRegister{Uint64Val: v}\n}\n\nfunc DwarfRegisterFromBytes(bytes []byte) *DwarfRegister {\n\tvar v uint64\n\tswitch len(bytes) {\n\tcase 1:\n\t\tv = uint64(bytes[0])\n\tcase 2:\n\t\tx := binary.LittleEndian.Uint16(bytes)\n\t\tv = uint64(x)\n\tcase 4:\n\t\tx := binary.LittleEndian.Uint32(bytes)\n\t\tv = uint64(x)\n\tdefault:\n\t\tif len(bytes) >= 8 {\n\t\t\tv = binary.LittleEndian.Uint64(bytes[:8])\n\t\t}\n\t}\n\treturn &DwarfRegister{Uint64Val: v, Bytes: bytes}\n}\n\n// FillBytes fills the Bytes slice of reg using Uint64Val.\nfunc (reg *DwarfRegister) FillBytes() {\n\tif reg.Bytes != nil {\n\t\treturn\n\t}\n\treg.Bytes = make([]byte, 8)\n\tbinary.LittleEndian.PutUint64(reg.Bytes, reg.Uint64Val)\n}\n\n// Overwrite takes the contents of reg and overwrites them with the contents\n// of reg2 in little-endian order, returning a new register. The new register\n// will always contain the complete contents of both registers, so if reg2 is\n// larger than reg, the final register will be reg2's size.\nfunc (reg *DwarfRegister) Overwrite(reg2 *DwarfRegister) *DwarfRegister {\n\treg.FillBytes()\n\treg2.FillBytes()\n\twidth := max(len(reg2.Bytes), len(reg.Bytes))\n\tb := make([]byte, width)\n\tcopy(b, reg.Bytes)\n\tcopy(b, reg2.Bytes)\n\treturn DwarfRegisterFromBytes(b)\n}\n"
  },
  {
    "path": "pkg/dwarf/parseutil.go",
    "content": "package dwarf\n\nimport (\n\t\"bytes\"\n\t\"debug/dwarf\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n)\n\n// ReadString reads a null-terminated string from data.\nfunc ReadString(data *bytes.Buffer) (string, error) {\n\tstr, err := data.ReadString(0x0)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn str[:len(str)-1], nil\n}\n\n// ReadUintRaw reads an integer of ptrSize bytes, with the specified byte order, from reader.\nfunc ReadUintRaw(reader io.Reader, order binary.ByteOrder, ptrSize int) (uint64, error) {\n\tswitch ptrSize {\n\tcase 2:\n\t\tvar n uint16\n\t\tif err := binary.Read(reader, order, &n); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn uint64(n), nil\n\tcase 4:\n\t\tvar n uint32\n\t\tif err := binary.Read(reader, order, &n); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn uint64(n), nil\n\tcase 8:\n\t\tvar n uint64\n\t\tif err := binary.Read(reader, order, &n); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn n, nil\n\t}\n\treturn 0, fmt.Errorf(\"pointer size %d not supported\", ptrSize)\n}\n\n// WriteUint writes an integer of ptrSize bytes to writer, in the specified byte order.\nfunc WriteUint(writer io.Writer, order binary.ByteOrder, ptrSize int, data uint64) error {\n\tswitch ptrSize {\n\tcase 4:\n\t\treturn binary.Write(writer, order, uint32(data))\n\tcase 8:\n\t\treturn binary.Write(writer, order, data)\n\t}\n\treturn fmt.Errorf(\"pointer size %d not supported\", ptrSize)\n}\n\n// ReadDwarfLengthVersion reads a DWARF length field followed by a version field\nfunc ReadDwarfLengthVersion(data []byte) (length uint64, dwarf64 bool, version uint8, byteOrder binary.ByteOrder) {\n\tif len(data) < 4 {\n\t\treturn 0, false, 0, binary.LittleEndian\n\t}\n\n\tlengthfield := binary.LittleEndian.Uint32(data)\n\tvoff := 4\n\tif lengthfield == ^uint32(0) {\n\t\tdwarf64 = true\n\t\tvoff = 12\n\t}\n\n\tif voff+1 >= len(data) {\n\t\treturn 0, false, 0, binary.LittleEndian\n\t}\n\n\tbyteOrder = binary.LittleEndian\n\tx, y := data[voff], data[voff+1]\n\tswitch {\n\tdefault:\n\t\tfallthrough\n\tcase x == 0 && y == 0:\n\t\tversion = 0\n\t\tbyteOrder = binary.LittleEndian\n\tcase x == 0:\n\t\tversion = y\n\t\tbyteOrder = binary.BigEndian\n\tcase y == 0:\n\t\tversion = x\n\t\tbyteOrder = binary.LittleEndian\n\t}\n\n\tif dwarf64 {\n\t\tlength = byteOrder.Uint64(data[4:])\n\t} else {\n\t\tlength = uint64(byteOrder.Uint32(data))\n\t}\n\n\treturn length, dwarf64, version, byteOrder\n}\n\nconst (\n\t_DW_UT_compile = 0x1 + iota\n\t_DW_UT_type\n\t_DW_UT_partial\n\t_DW_UT_skeleton\n\t_DW_UT_split_compile\n\t_DW_UT_split_type\n)\n\n// ReadUnitVersions reads the DWARF version of each unit in a debug_info section and returns them as a map.\nfunc ReadUnitVersions(data []byte) map[dwarf.Offset]uint8 {\n\tr := make(map[dwarf.Offset]uint8)\n\toff := dwarf.Offset(0)\n\tfor len(data) > 0 {\n\t\tlength, dwarf64, version, _ := ReadDwarfLengthVersion(data)\n\n\t\tdata = data[4:]\n\t\toff += 4\n\t\tsecoffsz := 4\n\t\tif dwarf64 {\n\t\t\toff += 8\n\t\t\tsecoffsz = 8\n\t\t\tdata = data[8:]\n\t\t}\n\n\t\tvar headerSize int\n\n\t\tswitch version {\n\t\tcase 2, 3, 4:\n\t\t\theaderSize = 3 + secoffsz\n\t\tdefault: // 5 and later?\n\t\t\tunitType := data[2]\n\n\t\t\tswitch unitType {\n\t\t\tcase _DW_UT_compile, _DW_UT_partial:\n\t\t\t\theaderSize = 4 + secoffsz\n\n\t\t\tcase _DW_UT_skeleton, _DW_UT_split_compile:\n\t\t\t\theaderSize = 4 + secoffsz + 8\n\n\t\t\tcase _DW_UT_type, _DW_UT_split_type:\n\t\t\t\theaderSize = 4 + secoffsz + 8 + secoffsz\n\t\t\t}\n\t\t}\n\n\t\tr[off+dwarf.Offset(headerSize)] = version\n\n\t\tdata = data[length:] // skip contents\n\t\toff += dwarf.Offset(length)\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "pkg/dwarf/parseutil_test.go",
    "content": "package dwarf_test\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf\"\n)\n\nfunc TestReadString(t *testing.T) {\n\tt.Parallel()\n\tbstr := bytes.NewBuffer([]byte{'h', 'i', 0x0, 0xFF, 0xCC})\n\tstr, _ := dwarf.ReadString(bstr)\n\n\tif str != \"hi\" {\n\t\tt.Fatalf(\"String was not parsed correctly %#v\", str)\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/reader/reader.go",
    "content": "package reader\n\nimport (\n\t\"debug/dwarf\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n)\n\ntype Reader struct {\n\t*dwarf.Reader\n\tdepth int\n}\n\n// New returns a reader for the specified dwarf data.\nfunc New(data *dwarf.Data) *Reader {\n\treturn &Reader{data.Reader(), 0}\n}\n\n// Seek moves the reader to an arbitrary offset.\nfunc (reader *Reader) Seek(off dwarf.Offset) {\n\treader.depth = 0\n\treader.Reader.Seek(off)\n}\n\n// SeekToEntry moves the reader to an arbitrary entry.\nfunc (reader *Reader) SeekToEntry(entry *dwarf.Entry) error {\n\treader.Seek(entry.Offset)\n\t// Consume the current entry so .Next works as intended\n\t_, err := reader.Next()\n\treturn err\n}\n\n// AddrFor returns the address for the named entry.\nfunc (reader *Reader) AddrFor(name string, staticBase uint64, ptrSize int) (uint64, error) {\n\tentry, err := reader.FindEntryNamed(name, false)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tinstructions, ok := entry.Val(dwarf.AttrLocation).([]byte)\n\tif !ok {\n\t\treturn 0, errors.New(\"type assertion failed\")\n\t}\n\taddr, _, err := op.ExecuteStackProgram(op.DwarfRegisters{StaticBase: staticBase}, instructions, ptrSize, nil)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint64(addr), nil\n}\n\nvar ErrTypeNotFound = errors.New(\"no type entry found, use 'types' for a list of valid types\")\n\n// SeekToType moves the reader to the type specified by the entry,\n// optionally resolving typedefs and pointer types. If the reader is set\n// to a struct type the NextMemberVariable call can be used to walk all member data.\nfunc (reader *Reader) SeekToType(entry *dwarf.Entry, resolveTypedefs bool, resolvePointerTypes bool) (*dwarf.Entry, error) {\n\toffset, ok := entry.Val(dwarf.AttrType).(dwarf.Offset)\n\tif !ok {\n\t\treturn nil, errors.New(\"entry does not have a type attribute\")\n\t}\n\n\t// Seek to the first type offset\n\treader.Seek(offset)\n\n\t// Walk the types to the base\n\tfor typeEntry, err := reader.Next(); typeEntry != nil; typeEntry, err = reader.Next() {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif typeEntry.Tag == dwarf.TagTypedef && !resolveTypedefs {\n\t\t\treturn typeEntry, nil\n\t\t}\n\n\t\tif typeEntry.Tag == dwarf.TagPointerType && !resolvePointerTypes {\n\t\t\treturn typeEntry, nil\n\t\t}\n\n\t\toffset, ok = typeEntry.Val(dwarf.AttrType).(dwarf.Offset)\n\t\tif !ok {\n\t\t\treturn typeEntry, nil\n\t\t}\n\n\t\treader.Seek(offset)\n\t}\n\n\treturn nil, ErrTypeNotFound\n}\n\nfunc (reader *Reader) NextType() (*dwarf.Entry, error) {\n\tfor entry, err := reader.Next(); entry != nil; entry, err = reader.Next() {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch entry.Tag {\n\t\tcase dwarf.TagArrayType, dwarf.TagBaseType, dwarf.TagClassType, dwarf.TagStructType, dwarf.TagUnionType, dwarf.TagConstType, dwarf.TagVolatileType, dwarf.TagRestrictType, dwarf.TagEnumerationType, dwarf.TagPointerType, dwarf.TagSubroutineType, dwarf.TagTypedef, dwarf.TagUnspecifiedType:\n\t\t\treturn entry, nil\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\n// SeekToTypeNamed moves the reader to the type specified by the name.\n// If the reader is set to a struct type the NextMemberVariable call\n// can be used to walk all member data.\nfunc (reader *Reader) SeekToTypeNamed(name string) (*dwarf.Entry, error) {\n\t// Walk the types to the base\n\tfor entry, err := reader.NextType(); entry != nil; entry, err = reader.NextType() {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tn, ok := entry.Val(dwarf.AttrName).(string)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif n == name {\n\t\t\treturn entry, nil\n\t\t}\n\t}\n\n\treturn nil, ErrTypeNotFound\n}\n\n// FindEntryNamed finds the entry for 'name'.\nfunc (reader *Reader) FindEntryNamed(name string, member bool) (*dwarf.Entry, error) {\n\tdepth := 1\n\tfor entry, err := reader.Next(); entry != nil; entry, err = reader.Next() {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif entry.Children {\n\t\t\tdepth++\n\t\t}\n\n\t\tif entry.Tag == 0 {\n\t\t\tdepth--\n\t\t\tif depth <= 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"could not find symbol value for %s\", name)\n\t\t\t}\n\t\t}\n\n\t\tif member {\n\t\t\tif entry.Tag != dwarf.TagMember {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t} else {\n\t\t\tif entry.Tag != dwarf.TagVariable && entry.Tag != dwarf.TagFormalParameter && entry.Tag != dwarf.TagStructType {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tn, ok := entry.Val(dwarf.AttrName).(string)\n\t\tif !ok || n != name {\n\t\t\tcontinue\n\t\t}\n\t\treturn entry, nil\n\t}\n\treturn nil, fmt.Errorf(\"could not find symbol value for %s\", name)\n}\n\nfunc (reader *Reader) InstructionsForEntryNamed(name string, member bool) ([]byte, error) {\n\tentry, err := reader.FindEntryNamed(name, member)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar attr dwarf.Attr\n\tif member {\n\t\tattr = dwarf.AttrDataMemberLoc\n\t} else {\n\t\tattr = dwarf.AttrLocation\n\t}\n\tinstr, ok := entry.Val(attr).([]byte)\n\tif !ok {\n\t\treturn nil, errors.New(\"invalid typecast for Dwarf instructions\")\n\t}\n\treturn instr, nil\n}\n\nfunc (reader *Reader) InstructionsForEntry(entry *dwarf.Entry) ([]byte, error) {\n\tif entry.Tag == dwarf.TagMember {\n\t\tinstructions, ok := entry.Val(dwarf.AttrDataMemberLoc).([]byte)\n\t\tif !ok {\n\t\t\treturn nil, errors.New(\"member data has no data member location attribute\")\n\t\t}\n\t\t// clone slice to prevent stomping on the dwarf data\n\t\treturn append([]byte{}, instructions...), nil\n\t}\n\n\t// non-member\n\tinstructions, ok := entry.Val(dwarf.AttrLocation).([]byte)\n\tif !ok {\n\t\treturn nil, errors.New(\"entry has no location attribute\")\n\t}\n\n\t// clone slice to prevent stomping on the dwarf data\n\treturn append([]byte{}, instructions...), nil\n}\n\n// NextMemberVariable moves the reader to the next debug entry that describes a member variable and returns the entry.\nfunc (reader *Reader) NextMemberVariable() (*dwarf.Entry, error) {\n\tfor entry, err := reader.Next(); entry != nil; entry, err = reader.Next() {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// All member variables will be at the same depth\n\t\treader.SkipChildren()\n\n\t\t// End of the current depth\n\t\tif entry.Tag == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\tif entry.Tag == dwarf.TagMember {\n\t\t\treturn entry, nil\n\t\t}\n\t}\n\n\t// No more items\n\treturn nil, nil\n}\n\n// NextPackageVariable moves the reader to the next debug entry that describes a package variable.\n// Any TagVariable entry that is not inside a sub program entry and is marked external is considered a package variable.\nfunc (reader *Reader) NextPackageVariable() (*dwarf.Entry, error) {\n\tfor entry, err := reader.Next(); entry != nil; entry, err = reader.Next() {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif entry.Tag == dwarf.TagVariable {\n\t\t\text, ok := entry.Val(dwarf.AttrExternal).(bool)\n\t\t\tif ok && ext {\n\t\t\t\treturn entry, nil\n\t\t\t}\n\t\t}\n\n\t\t// Ignore everything inside sub programs\n\t\tif entry.Tag == dwarf.TagSubprogram {\n\t\t\treader.SkipChildren()\n\t\t}\n\t}\n\n\t// No more items\n\treturn nil, nil\n}\n\nfunc (reader *Reader) NextCompileUnit() (*dwarf.Entry, error) {\n\tfor entry, err := reader.Next(); entry != nil; entry, err = reader.Next() {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif entry.Tag == dwarf.TagCompileUnit {\n\t\t\treturn entry, nil\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\n// InlineStack returns the stack of inlined calls for the specified function\n// and PC address.\n// If pc is 0 then all inlined calls will be returned.\nfunc InlineStack(root *godwarf.Tree, pc uint64) []*godwarf.Tree {\n\tv := []*godwarf.Tree{}\n\tfor _, child := range root.Children {\n\t\tv = inlineStackInternal(v, child, pc)\n\t}\n\treturn v\n}\n\n// inlineStackInternal precalculates the inlined call stack for pc\n// If pc == 0 then all inlined calls will be returned\n// Otherwise an inlined call will be returned if its range, or\n// the range of one of its child entries contains irdr.pc.\n// The recursive calculation of range inclusion is necessary because\n// sometimes when doing midstack inlining the Go compiler emits the toplevel\n// inlined call with ranges that do not cover the inlining of nested inlined\n// calls.\n// For example if a function A calls B which calls C and both the calls to\n// B and C are inlined the DW_AT_inlined_subroutine entry for A might have\n// ranges that do not cover the ranges of the inlined call to C.\n// This is probably a violation of the DWARF standard (it's unclear) but we\n// might as well support it as best as possible anyway.\nfunc inlineStackInternal(stack []*godwarf.Tree, n *godwarf.Tree, pc uint64) []*godwarf.Tree {\n\tswitch n.Tag {\n\tcase dwarf.TagSubprogram, dwarf.TagInlinedSubroutine, dwarf.TagLexDwarfBlock:\n\t\tif pc == 0 || n.ContainsPC(pc) {\n\t\t\tfor _, child := range n.Children {\n\t\t\t\tstack = inlineStackInternal(stack, child, pc)\n\t\t\t}\n\t\t\tif n.Tag == dwarf.TagInlinedSubroutine {\n\t\t\t\tstack = append(stack, n)\n\t\t\t}\n\t\t}\n\t}\n\treturn stack\n}\n"
  },
  {
    "path": "pkg/dwarf/reader/variables.go",
    "content": "package reader\n\nimport (\n\t\"debug/dwarf\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n)\n\ntype Variable struct {\n\t*godwarf.Tree\n\t// Depth represents the depth of the lexical block in which this variable\n\t// was declared, relative to a root scope (e.g. a function) passed to\n\t// Variables(). The depth is used to figure out if a variable is shadowed at\n\t// a particular pc by another one with the same name declared in an inner\n\t// block.\n\tDepth int\n}\n\n// VariablesFlags specifies some configuration flags for the Variables function.\ntype VariablesFlags uint8\n\nconst (\n\tVariablesOnlyVisible VariablesFlags = 1 << iota\n\tVariablesSkipInlinedSubroutines\n\tVariablesTrustDeclLine\n\tVariablesNoDeclLineCheck\n\tVariablesOnlyCaptured\n)\n\n// Variables returns a list of variables contained inside 'root'.\n//\n// If the VariablesOnlyVisible flag is set, only variables visible at 'pc' will be\n// returned. If the VariablesSkipInlinedSubroutines is set, variables from\n// inlined subroutines will be skipped.\nfunc Variables(root *godwarf.Tree, pc uint64, line int, flags VariablesFlags) []Variable {\n\treturn variablesInternal(nil, root, 0, pc, line, flags, true)\n}\n\n// variablesInternal appends to 'v' variables from 'root'. The function calls\n// itself with an incremented scope for all sub-blocks in 'root'.\nfunc variablesInternal(v []Variable, root *godwarf.Tree, depth int, pc uint64, line int, flags VariablesFlags, first bool) []Variable {\n\tswitch root.Tag {\n\tcase dwarf.TagInlinedSubroutine:\n\t\tif !first && flags&VariablesSkipInlinedSubroutines != 0 {\n\t\t\treturn v\n\t\t}\n\t\tfallthrough\n\tcase dwarf.TagLexDwarfBlock, dwarf.TagSubprogram:\n\t\t// Recurse into blocks and functions, if the respective block contains\n\t\t// pc (or if we don't care about visibility).\n\t\tif (flags&VariablesOnlyVisible == 0) || root.ContainsPC(pc) {\n\t\t\tfor _, child := range root.Children {\n\t\t\t\tv = variablesInternal(v, child, depth+1, pc, line, flags, false)\n\t\t\t}\n\t\t}\n\t\treturn v\n\tdefault:\n\t\t// Variables are considered to be visible starting on the line after the\n\t\t// line they are declared on. Function arguments are an exception - the line\n\t\t// they are declared on does not matter; they are considered to be\n\t\t// visible throughout the function.\n\t\tdeclLine, varHasDeclLine := root.Val(dwarf.AttrDeclLine).(int64)\n\n\t\tcheckDeclLine :=\n\t\t\troot.Tag != dwarf.TagFormalParameter && // var is not a function argument\n\t\t\t\tvarHasDeclLine && // we know the DeclLine\n\t\t\t\t(flags&VariablesNoDeclLineCheck == 0) // we were not explicitly instructed to ignore DeclLine\n\n\t\tvarVisible := true\n\t\tif checkDeclLine {\n\t\t\tvarIsCaptured := root.Val(godwarf.AttrGoClosureOffset) != nil\n\t\t\tif varIsCaptured {\n\t\t\t\tvarVisible = line >= int(declLine)\n\t\t\t} else {\n\t\t\t\tvarVisible = line >= int(declLine)+1 // +1 because visibility starts on the line after DeclLine\n\t\t\t}\n\t\t}\n\n\t\tif varVisible {\n\t\t\treturn append(v, Variable{root, depth})\n\t\t}\n\t\treturn v\n\t}\n}\n"
  },
  {
    "path": "pkg/dwarf/regnum/amd64.go",
    "content": "package regnum\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// The mapping between hardware registers and DWARF registers is specified\n// in the System V ABI AMD64 Architecture Processor Supplement v. 1.0 page 61,\n// figure 3.36\n// https://gitlab.com/x86-psABIs/x86-64-ABI/-/tree/master\n\nconst (\n\tAMD64_Rax     = 0\n\tAMD64_Rdx     = 1\n\tAMD64_Rcx     = 2\n\tAMD64_Rbx     = 3\n\tAMD64_Rsi     = 4\n\tAMD64_Rdi     = 5\n\tAMD64_Rbp     = 6\n\tAMD64_Rsp     = 7\n\tAMD64_R8      = 8\n\tAMD64_R9      = 9\n\tAMD64_R10     = 10\n\tAMD64_R11     = 11\n\tAMD64_R12     = 12\n\tAMD64_R13     = 13\n\tAMD64_R14     = 14\n\tAMD64_R15     = 15\n\tAMD64_Rip     = 16\n\tAMD64_XMM0    = 17 // XMM1 through XMM15 follow\n\tAMD64_ST0     = 33 // ST(1) through ST(7) follow\n\tAMD64_Rflags  = 49\n\tAMD64_Es      = 50\n\tAMD64_Cs      = 51\n\tAMD64_Ss      = 52\n\tAMD64_Ds      = 53\n\tAMD64_Fs      = 54\n\tAMD64_Gs      = 55\n\tAMD64_Fs_base = 58\n\tAMD64_Gs_base = 59\n\tAMD64_MXCSR   = 64\n\tAMD64_CW      = 65\n\tAMD64_SW      = 66\n\tAMD64_XMM16   = 67  // XMM17 through XMM31 follow\n\tAMD64_K0      = 118 // k1 through k7 follow\n)\n\nvar amd64DwarfToName = map[uint64]string{\n\tAMD64_Rax:        \"Rax\",\n\tAMD64_Rdx:        \"Rdx\",\n\tAMD64_Rcx:        \"Rcx\",\n\tAMD64_Rbx:        \"Rbx\",\n\tAMD64_Rsi:        \"Rsi\",\n\tAMD64_Rdi:        \"Rdi\",\n\tAMD64_Rbp:        \"Rbp\",\n\tAMD64_Rsp:        \"Rsp\",\n\tAMD64_R8:         \"R8\",\n\tAMD64_R9:         \"R9\",\n\tAMD64_R10:        \"R10\",\n\tAMD64_R11:        \"R11\",\n\tAMD64_R12:        \"R12\",\n\tAMD64_R13:        \"R13\",\n\tAMD64_R14:        \"R14\",\n\tAMD64_R15:        \"R15\",\n\tAMD64_Rip:        \"Rip\",\n\tAMD64_XMM0:       \"XMM0\",\n\tAMD64_XMM0 + 1:   \"XMM1\",\n\tAMD64_XMM0 + 2:   \"XMM2\",\n\tAMD64_XMM0 + 3:   \"XMM3\",\n\tAMD64_XMM0 + 4:   \"XMM4\",\n\tAMD64_XMM0 + 5:   \"XMM5\",\n\tAMD64_XMM0 + 6:   \"XMM6\",\n\tAMD64_XMM0 + 7:   \"XMM7\",\n\tAMD64_XMM0 + 8:   \"XMM8\",\n\tAMD64_XMM0 + 9:   \"XMM9\",\n\tAMD64_XMM0 + 10:  \"XMM10\",\n\tAMD64_XMM0 + 11:  \"XMM11\",\n\tAMD64_XMM0 + 12:  \"XMM12\",\n\tAMD64_XMM0 + 13:  \"XMM13\",\n\tAMD64_XMM0 + 14:  \"XMM14\",\n\tAMD64_XMM0 + 15:  \"XMM15\",\n\tAMD64_ST0:        \"ST(0)\",\n\tAMD64_ST0 + 1:    \"ST(1)\",\n\tAMD64_ST0 + 2:    \"ST(2)\",\n\tAMD64_ST0 + 3:    \"ST(3)\",\n\tAMD64_ST0 + 4:    \"ST(4)\",\n\tAMD64_ST0 + 5:    \"ST(5)\",\n\tAMD64_ST0 + 6:    \"ST(6)\",\n\tAMD64_ST0 + 7:    \"ST(7)\",\n\tAMD64_Rflags:     \"Rflags\",\n\tAMD64_Es:         \"Es\",\n\tAMD64_Cs:         \"Cs\",\n\tAMD64_Ss:         \"Ss\",\n\tAMD64_Ds:         \"Ds\",\n\tAMD64_Fs:         \"Fs\",\n\tAMD64_Gs:         \"Gs\",\n\tAMD64_Fs_base:    \"Fs_base\",\n\tAMD64_Gs_base:    \"Gs_base\",\n\tAMD64_MXCSR:      \"MXCSR\",\n\tAMD64_CW:         \"CW\",\n\tAMD64_SW:         \"SW\",\n\tAMD64_XMM16:      \"XMM16\",\n\tAMD64_XMM16 + 1:  \"XMM17\",\n\tAMD64_XMM16 + 2:  \"XMM18\",\n\tAMD64_XMM16 + 3:  \"XMM19\",\n\tAMD64_XMM16 + 4:  \"XMM20\",\n\tAMD64_XMM16 + 5:  \"XMM21\",\n\tAMD64_XMM16 + 6:  \"XMM22\",\n\tAMD64_XMM16 + 7:  \"XMM23\",\n\tAMD64_XMM16 + 8:  \"XMM24\",\n\tAMD64_XMM16 + 9:  \"XMM25\",\n\tAMD64_XMM16 + 10: \"XMM26\",\n\tAMD64_XMM16 + 11: \"XMM27\",\n\tAMD64_XMM16 + 12: \"XMM28\",\n\tAMD64_XMM16 + 13: \"XMM29\",\n\tAMD64_XMM16 + 14: \"XMM30\",\n\tAMD64_XMM16 + 15: \"XMM31\",\n\tAMD64_K0:         \"K0\",\n\tAMD64_K0 + 1:     \"K1\",\n\tAMD64_K0 + 2:     \"K2\",\n\tAMD64_K0 + 3:     \"K3\",\n\tAMD64_K0 + 4:     \"K4\",\n\tAMD64_K0 + 5:     \"K5\",\n\tAMD64_K0 + 6:     \"K6\",\n\tAMD64_K0 + 7:     \"K7\",\n}\n\nvar AMD64NameToDwarf = func() map[string]int {\n\tr := make(map[string]int)\n\tfor regNum, regName := range amd64DwarfToName {\n\t\tr[strings.ToLower(regName)] = int(regNum)\n\t}\n\tr[\"eflags\"] = 49\n\tr[\"st0\"] = 33\n\tr[\"st1\"] = 34\n\tr[\"st2\"] = 35\n\tr[\"st3\"] = 36\n\tr[\"st4\"] = 37\n\tr[\"st5\"] = 38\n\tr[\"st6\"] = 39\n\tr[\"st7\"] = 40\n\treturn r\n}()\n\nfunc AMD64MaxRegNum() uint64 {\n\tmax := uint64(AMD64_Rip)\n\tfor i := range amd64DwarfToName {\n\t\tif i > max {\n\t\t\tmax = i\n\t\t}\n\t}\n\treturn max\n}\n\nfunc AMD64ToName(num uint64) string {\n\tname, ok := amd64DwarfToName[num]\n\tif ok {\n\t\treturn name\n\t}\n\treturn fmt.Sprintf(\"unknown%d\", num)\n}\n"
  },
  {
    "path": "pkg/dwarf/regnum/arm64.go",
    "content": "package regnum\n\nimport (\n\t\"fmt\"\n)\n\n// The mapping between hardware registers and DWARF registers is specified\n// in the DWARF for the DWARF for the Arm® 64-bit Architecture (AArch64),\n// Section 4, Table 1\n// https://github.com/ARM-software/abi-aa/blob/main/aadwarf64/aadwarf64.rst#4arm-specific-dwarf-definitions\n\nconst (\n\tARM64_X0         = 0  // X1 through X30 follow\n\tARM64_BP         = 29 // also X29\n\tARM64_LR         = 30 // also X30\n\tARM64_SP         = 31\n\tARM64_PC         = 32\n\tARM64_V0         = 64 // V1 through V31 follow\n\t_ARM64_MaxRegNum = ARM64_V0 + 31\n)\n\nfunc ARM64ToName(num uint64) string {\n\tswitch {\n\tcase num <= 30:\n\t\treturn fmt.Sprintf(\"X%d\", num)\n\tcase num == ARM64_SP:\n\t\treturn \"SP\"\n\tcase num == ARM64_PC:\n\t\treturn \"PC\"\n\tcase num >= ARM64_V0 && num <= 95:\n\t\treturn fmt.Sprintf(\"V%d\", num-64)\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown%d\", num)\n\t}\n}\n\nfunc ARM64MaxRegNum() uint64 {\n\treturn _ARM64_MaxRegNum\n}\n\nvar ARM64NameToDwarf = func() map[string]int {\n\tr := make(map[string]int)\n\tfor i := 0; i <= 32; i++ {\n\t\tr[fmt.Sprintf(\"x%d\", i)] = ARM64_X0 + i\n\t}\n\tr[\"fp\"] = 29\n\tr[\"lr\"] = 30\n\tr[\"sp\"] = 31\n\tr[\"pc\"] = 32\n\n\tfor i := 0; i <= 31; i++ {\n\t\tr[fmt.Sprintf(\"v%d\", i)] = ARM64_V0 + i\n\t}\n\n\treturn r\n}()\n"
  },
  {
    "path": "pkg/dwarf/regnum/i386.go",
    "content": "package regnum\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// The mapping between hardware registers and DWARF registers is specified\n// in the System V ABI Intel386 Architecture Processor Supplement page 25,\n// table 2.14\n// https://www.uclibc.org/docs/psABI-i386.pdf\n\nconst (\n\tI386_Eax    = 0\n\tI386_Ecx    = 1\n\tI386_Edx    = 2\n\tI386_Ebx    = 3\n\tI386_Esp    = 4\n\tI386_Ebp    = 5\n\tI386_Esi    = 6\n\tI386_Edi    = 7\n\tI386_Eip    = 8\n\tI386_Eflags = 9\n\tI386_ST0    = 11 // ST(1) through ST(7) follow\n\tI386_XMM0   = 21 // XMM1 through XMM7 follow\n\tI386_Es     = 40\n\tI386_Cs     = 41\n\tI386_Ss     = 42\n\tI386_Ds     = 43\n\tI386_Fs     = 44\n\tI386_Gs     = 45\n)\n\nvar i386DwarfToName = map[int]string{\n\tI386_Eax:      \"Eax\",\n\tI386_Ecx:      \"Ecx\",\n\tI386_Edx:      \"Edx\",\n\tI386_Ebx:      \"Ebx\",\n\tI386_Esp:      \"Esp\",\n\tI386_Ebp:      \"Ebp\",\n\tI386_Esi:      \"Esi\",\n\tI386_Edi:      \"Edi\",\n\tI386_Eip:      \"Eip\",\n\tI386_Eflags:   \"Eflags\",\n\tI386_ST0:      \"ST(0)\",\n\tI386_ST0 + 1:  \"ST(1)\",\n\tI386_ST0 + 2:  \"ST(2)\",\n\tI386_ST0 + 3:  \"ST(3)\",\n\tI386_ST0 + 4:  \"ST(4)\",\n\tI386_ST0 + 5:  \"ST(5)\",\n\tI386_ST0 + 6:  \"ST(6)\",\n\tI386_ST0 + 7:  \"ST(7)\",\n\tI386_XMM0:     \"XMM0\",\n\tI386_XMM0 + 1: \"XMM1\",\n\tI386_XMM0 + 2: \"XMM2\",\n\tI386_XMM0 + 3: \"XMM3\",\n\tI386_XMM0 + 4: \"XMM4\",\n\tI386_XMM0 + 5: \"XMM5\",\n\tI386_XMM0 + 6: \"XMM6\",\n\tI386_XMM0 + 7: \"XMM7\",\n\tI386_Es:       \"Es\",\n\tI386_Cs:       \"Cs\",\n\tI386_Ss:       \"Ss\",\n\tI386_Ds:       \"Ds\",\n\tI386_Fs:       \"Fs\",\n\tI386_Gs:       \"Gs\",\n}\n\nvar I386NameToDwarf = func() map[string]int {\n\tr := make(map[string]int)\n\tfor regNum, regName := range i386DwarfToName {\n\t\tr[strings.ToLower(regName)] = regNum\n\t}\n\tr[\"eflags\"] = 9\n\tr[\"st0\"] = 11\n\tr[\"st1\"] = 12\n\tr[\"st2\"] = 13\n\tr[\"st3\"] = 14\n\tr[\"st4\"] = 15\n\tr[\"st5\"] = 16\n\tr[\"st6\"] = 17\n\tr[\"st7\"] = 18\n\treturn r\n}()\n\nfunc I386MaxRegNum() int {\n\tmax := int(I386_Eip)\n\tfor i := range i386DwarfToName {\n\t\tif i > max {\n\t\t\tmax = i\n\t\t}\n\t}\n\treturn max\n}\n\nfunc I386ToName(num uint64) string {\n\tname, ok := i386DwarfToName[int(num)]\n\tif ok {\n\t\treturn name\n\t}\n\treturn fmt.Sprintf(\"unknown%d\", num)\n}\n"
  },
  {
    "path": "pkg/dwarf/regnum/loong64.go",
    "content": "package regnum\n\nimport (\n\t\"fmt\"\n)\n\n// The mapping between hardware registers and DWARF registers, See\n// https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html\n// https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html\n\nconst (\n\t// General-purpose Register\n\tLOONG64_R0  = 0\n\tLOONG64_LR  = 1 // ra: address for subroutine\n\tLOONG64_SP  = 3 // sp: stack pointer\n\tLOONG64_R22 = 22\n\tLOONG64_FP  = LOONG64_R22 // fp: frame pointer\n\tLOONG64_R31 = 31\n\n\t// Floating-point Register\n\tLOONG64_F0  = 32\n\tLOONG64_F31 = 63\n\n\t// Floating condition flag register\n\tLOONG64_FCC0 = 64\n\tLOONG64_FCC7 = 71\n\n\tLOONG64_FCSR = 72\n\n\t// Extra, not defined in ELF-ABI specification\n\tLOONG64_ERA  = 73\n\tLOONG64_BADV = 74\n\n\t// See golang src/cmd/link/internal/loong64/l.go\n\tLOONG64_PC = LOONG64_ERA // era : exception program counter\n\n\t_LOONG64_MaxRegNum = LOONG64_BADV\n)\n\nfunc LOONG64ToName(num uint64) string {\n\tswitch {\n\tcase num <= LOONG64_R31:\n\t\treturn fmt.Sprintf(\"R%d\", num)\n\n\tcase num >= LOONG64_F0 && num <= LOONG64_F31:\n\t\treturn fmt.Sprintf(\"F%d\", num-32)\n\n\tcase num >= LOONG64_FCC0 && num <= LOONG64_FCC7:\n\t\treturn fmt.Sprintf(\"FCC%d\", num-64)\n\n\tcase num == LOONG64_FCSR:\n\t\treturn \"FCSR\"\n\n\tcase num == LOONG64_ERA:\n\t\treturn \"ERA\"\n\n\tcase num == LOONG64_BADV:\n\t\treturn \"BADV\"\n\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown%d\", num)\n\t}\n}\n\nfunc LOONG64MaxRegNum() uint64 {\n\treturn _LOONG64_MaxRegNum\n}\n\nvar LOONG64NameToDwarf = func() map[string]int {\n\tr := make(map[string]int)\n\tfor i := 0; i <= 31; i++ {\n\t\tr[fmt.Sprintf(\"r%d\", i)] = LOONG64_R0 + i\n\t}\n\tr[\"era\"] = LOONG64_ERA\n\tr[\"badv\"] = LOONG64_BADV\n\n\tfor i := 0; i <= 31; i++ {\n\t\tr[fmt.Sprintf(\"f%d\", i)] = LOONG64_F0 + i\n\t}\n\n\tfor i := 0; i <= 7; i++ {\n\t\tr[fmt.Sprintf(\"fcc%d\", i)] = LOONG64_FCC0 + i\n\t}\n\tr[\"fcsr\"] = LOONG64_FCSR\n\n\treturn r\n}()\n"
  },
  {
    "path": "pkg/dwarf/regnum/ppc64le.go",
    "content": "package regnum\n\nimport \"fmt\"\n\n// The mapping between hardware registers and DWARF registers is specified\n// in the 64-Bit ELF V2 ABI Specification of the Power Architecture in section\n// 2.4 DWARF Definition\n// https://openpowerfoundation.org/specifications/64bitelfabi/\n\nconst (\n\t// General Purpose Registers: from R0 to R31\n\tPPC64LE_FIRST_GPR = 0\n\tPPC64LE_R0        = PPC64LE_FIRST_GPR\n\tPPC64LE_LAST_GPR  = 31\n\t// Floating point registers: from F0 to F31\n\tPPC64LE_FIRST_FPR = 32\n\tPPC64LE_F0        = PPC64LE_FIRST_FPR\n\tPPC64LE_LAST_FPR  = 63\n\t// Vector (Altivec/VMX) registers: from V0 to V31\n\tPPC64LE_FIRST_VMX = 77\n\tPPC64LE_V0        = PPC64LE_FIRST_VMX\n\tPPC64LE_LAST_VMX  = 108\n\t// Vector Scalar (VSX) registers: from VS32 to VS63\n\t// On ppc64le these are mapped to F0 to F31\n\tPPC64LE_FIRST_VSX = 32\n\tPPC64LE_VS0       = PPC64LE_FIRST_VSX\n\tPPC64LE_LAST_VSX  = 63\n\t// Condition Registers: from CR0 to CR7\n\tPPC64LE_CR0 = 0\n\t// Special registers\n\tPPC64LE_SP = 1  // Stack frame pointer: Gpr[1]\n\tPPC64LE_PC = 12 // The documentation refers to this as the CIA (Current Instruction Address)\n\tPPC64LE_LR = 65 // Link register\n)\n\nfunc PPC64LEToName(num uint64) string {\n\tswitch {\n\tcase num == PPC64LE_SP:\n\t\treturn \"SP\"\n\tcase num == PPC64LE_PC:\n\t\treturn \"PC\"\n\tcase num == PPC64LE_LR:\n\t\treturn \"LR\"\n\tcase isGPR(num):\n\t\treturn fmt.Sprintf(\"r%d\", int(num-PPC64LE_FIRST_GPR))\n\tcase isFPR(num):\n\t\treturn fmt.Sprintf(\"f%d\", int(num-PPC64LE_FIRST_FPR))\n\tcase isVMX(num):\n\t\treturn fmt.Sprintf(\"v%d\", int(num-PPC64LE_FIRST_VMX))\n\tcase isVSX(num):\n\t\treturn fmt.Sprintf(\"vs%d\", int(num-PPC64LE_FIRST_VSX))\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown%d\", num)\n\t}\n}\n\n// PPC64LEMaxRegNum is 172 registers in total, across 4 categories:\n// General Purpose Registers or GPR (32 GPR + 9 special registers)\n// Floating Point Registers or FPR (32 FPR + 1 special register)\n// Altivec/VMX Registers or VMX (32 VMX + 2 special registers)\n// VSX Registers or VSX (64 VSX)\n// Documentation: https://lldb.llvm.org/cpp_reference/RegisterContextPOSIX__ppc64le_8cpp_source.html\nfunc PPC64LEMaxRegNum() uint64 {\n\treturn 172\n}\n\nfunc isGPR(num uint64) bool {\n\treturn num < PPC64LE_LAST_GPR\n}\n\nfunc isFPR(num uint64) bool {\n\treturn num >= PPC64LE_FIRST_FPR && num <= PPC64LE_LAST_FPR\n}\n\nfunc isVMX(num uint64) bool {\n\treturn num >= PPC64LE_FIRST_VMX && num <= PPC64LE_LAST_VMX\n}\n\nfunc isVSX(num uint64) bool {\n\treturn num >= PPC64LE_FIRST_VSX && num <= PPC64LE_LAST_VSX\n}\n\nvar PPC64LENameToDwarf = func() map[string]int {\n\tr := make(map[string]int)\n\n\tr[\"nip\"] = PPC64LE_PC\n\tr[\"sp\"] = PPC64LE_SP\n\tr[\"bp\"] = PPC64LE_SP\n\tr[\"link\"] = PPC64LE_LR\n\n\t// General Purpose Registers: from R0 to R31\n\tfor i := 0; i <= 31; i++ {\n\t\tr[fmt.Sprintf(\"r%d\", i)] = PPC64LE_R0 + i\n\t}\n\n\t// Floating point registers: from F0 to F31\n\tfor i := 0; i <= 31; i++ {\n\t\tr[fmt.Sprintf(\"f%d\", i)] = PPC64LE_F0 + i\n\t}\n\n\t// Vector (Altivec/VMX) registers: from V0 to V31\n\tfor i := 0; i <= 31; i++ {\n\t\tr[fmt.Sprintf(\"v%d\", i)] = PPC64LE_V0 + i\n\t}\n\n\t// Vector Scalar (VSX) registers: from VS0 to VS63\n\tfor i := 0; i <= 63; i++ {\n\t\tr[fmt.Sprintf(\"vs%d\", i)] = PPC64LE_VS0 + i\n\t}\n\n\t// Condition Registers: from CR0 to CR7\n\tfor i := 0; i <= 7; i++ {\n\t\tr[fmt.Sprintf(\"cr%d\", i)] = PPC64LE_CR0 + i\n\t}\n\treturn r\n}()\n"
  },
  {
    "path": "pkg/dwarf/regnum/riscv64.go",
    "content": "package regnum\n\nimport \"fmt\"\n\n// The mapping between hardware registers and DWARF registers, See\n// https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-dwarf.adoc\n\nconst (\n\t// Integer Registers\n\tRISCV64_X0 = 0\n\t// Link Register\n\tRISCV64_LR = 1\n\t// Stack Pointer\n\tRISCV64_SP = 2\n\tRISCV64_GP = 3\n\tRISCV64_TP = 4\n\tRISCV64_T0 = 5\n\tRISCV64_T1 = 6\n\tRISCV64_T2 = 7\n\tRISCV64_S0 = 8\n\t// Frame Pointer\n\tRISCV64_FP  = RISCV64_S0\n\tRISCV64_S1  = 9\n\tRISCV64_A0  = 10\n\tRISCV64_A1  = 11\n\tRISCV64_A2  = 12\n\tRISCV64_A3  = 13\n\tRISCV64_A4  = 14\n\tRISCV64_A5  = 15\n\tRISCV64_A6  = 16\n\tRISCV64_A7  = 17\n\tRISCV64_S2  = 18\n\tRISCV64_S3  = 19\n\tRISCV64_S4  = 20\n\tRISCV64_S5  = 21\n\tRISCV64_S6  = 22\n\tRISCV64_S7  = 23\n\tRISCV64_S8  = 24\n\tRISCV64_S9  = 25\n\tRISCV64_S10 = 26\n\t// G Register\n\tRISCV64_S11 = 27\n\tRISCV64_T3  = 28\n\tRISCV64_T4  = 29\n\tRISCV64_T5  = 30\n\tRISCV64_T6  = 31\n\n\tRISCV64_X31 = RISCV64_T6\n\n\t// Floating-point Registers\n\tRISCV64_F0  = 32\n\tRISCV64_F31 = 63\n\n\t// Not defined in DWARF specification\n\tRISCV64_PC = 65\n\n\t_RISC64_MaxRegNum = RISCV64_PC\n)\n\nfunc RISCV64ToName(num uint64) string {\n\tswitch {\n\tcase num <= RISCV64_X31:\n\t\treturn fmt.Sprintf(\"X%d\", num)\n\n\tcase num >= RISCV64_F0 && num <= RISCV64_F31:\n\t\treturn fmt.Sprintf(\"F%d\", num)\n\n\tcase num == RISCV64_PC:\n\t\treturn \"PC\"\n\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown%d\", num)\n\t}\n}\n\nfunc RISCV64MaxRegNum() uint64 {\n\treturn _RISC64_MaxRegNum\n}\n\nvar RISCV64NameToDwarf = func() map[string]int {\n\tr := make(map[string]int)\n\tfor i := 0; i <= 31; i++ {\n\t\tr[fmt.Sprintf(\"x%d\", i)] = RISCV64_X0 + i\n\t}\n\tr[\"pc\"] = RISCV64_PC\n\n\tfor i := 0; i <= 31; i++ {\n\t\tr[fmt.Sprintf(\"f%d\", i)] = RISCV64_F0 + i\n\t}\n\n\treturn r\n}()\n"
  },
  {
    "path": "pkg/elfwriter/delve_core_notes.go",
    "content": "package elfwriter\n\nconst (\n\tDelveHeaderNoteType = 0x444C5645 // DLVE\n\tDelveThreadNodeType = 0x444C5654 // DLVT\n\n\tDelveHeaderTargetPidPrefix  = \"Target Pid: \"\n\tDelveHeaderEntryPointPrefix = \"Entry Point: \"\n)\n\n//TODO(aarzilli): these constants probably need to be in a better place.\n"
  },
  {
    "path": "pkg/elfwriter/writer.go",
    "content": "// elfwriter is a package to write ELF files without having their entire\n// contents in memory at any one time.\n// This package is incomplete, only features needed to write core files are\n// implemented, notably missing:\n// - program headers at the beginning of the file\npackage elfwriter\n\nimport (\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"io\"\n)\n\n// WriteCloserSeeker is the union of io.Writer, io.Closer and io.Seeker.\ntype WriteCloserSeeker interface {\n\tio.Writer\n\tio.Seeker\n\tio.Closer\n}\n\n// Writer writes ELF files.\ntype Writer struct {\n\tw        WriteCloserSeeker\n\tErr      error\n\tProgs    []*elf.ProgHeader\n\tSections []*elf.SectionHeader\n\n\tseekProgHeader int64\n\tseekProgNum    int64\n\n\tseekSectionHeader int64\n\tseekSectionNum    int64\n\tseekShstrndx      int64\n}\n\ntype Note struct {\n\tType elf.NType\n\tName string\n\tData []byte\n}\n\n// New creates a new Writer.\nfunc New(w WriteCloserSeeker, fhdr *elf.FileHeader) *Writer {\n\tconst (\n\t\tehsize    = 64\n\t\tphentsize = 56\n\t\tshentsize = 64\n\t)\n\n\tif seek, _ := w.Seek(0, io.SeekCurrent); seek != 0 {\n\t\tpanic(\"can't write halfway through a file\")\n\t}\n\n\tr := &Writer{w: w}\n\n\tif fhdr.Class != elf.ELFCLASS64 {\n\t\tpanic(\"unsupported\")\n\t}\n\n\tif fhdr.Data != elf.ELFDATA2LSB {\n\t\tpanic(\"unsupported\")\n\t}\n\n\t// e_ident\n\tr.Write([]byte{0x7f, 'E', 'L', 'F', byte(fhdr.Class), byte(fhdr.Data), byte(fhdr.Version), byte(fhdr.OSABI), fhdr.ABIVersion, 0, 0, 0, 0, 0, 0, 0})\n\n\tr.u16(uint16(fhdr.Type))    // e_type\n\tr.u16(uint16(fhdr.Machine)) // e_machine\n\tr.u32(uint32(fhdr.Version)) // e_version\n\tr.u64(0)                    // e_entry\n\tr.seekProgHeader = r.Here()\n\tr.u64(0) // e_phoff\n\tr.seekSectionHeader = r.Here()\n\tr.u64(0)         // e_shoff\n\tr.u32(0)         // e_flags\n\tr.u16(ehsize)    // e_ehsize\n\tr.u16(phentsize) // e_phentsize\n\tr.seekProgNum = r.Here()\n\tr.u16(0)         // e_phnum\n\tr.u16(shentsize) // e_shentsize\n\tr.seekSectionNum = r.Here()\n\tr.u16(0) // e_shnum\n\tr.seekShstrndx = r.Here()\n\tr.u16(uint16(elf.SHN_UNDEF)) // e_shstrndx\n\n\t// Sanity check, size of file header should be the same as ehsize\n\tif sz, _ := w.Seek(0, io.SeekCurrent); sz != ehsize {\n\t\tpanic(\"internal error, ELF header size\")\n\t}\n\n\treturn r\n}\n\n// WriteNotes writes notes to the current location, returns a ProgHeader describing the\n// notes.\nfunc (w *Writer) WriteNotes(notes []Note) *elf.ProgHeader {\n\tif len(notes) == 0 {\n\t\treturn nil\n\t}\n\th := &elf.ProgHeader{\n\t\tType:  elf.PT_NOTE,\n\t\tAlign: 4,\n\t}\n\tfor i := range notes {\n\t\tnote := &notes[i]\n\t\tw.Align(4)\n\t\tif h.Off == 0 {\n\t\t\th.Off = uint64(w.Here())\n\t\t}\n\t\tw.u32(uint32(len(note.Name)))\n\t\tw.u32(uint32(len(note.Data)))\n\t\tw.u32(uint32(note.Type))\n\t\tw.Write([]byte(note.Name))\n\t\tw.Align(4)\n\t\tw.Write(note.Data)\n\t}\n\th.Filesz = uint64(w.Here()) - h.Off\n\treturn h\n}\n\n// WriteProgramHeaders writes the program headers at the current location\n// and patches the file header accordingly.\nfunc (w *Writer) WriteProgramHeaders() {\n\tphoff := w.Here()\n\n\t// Patch File Header\n\tw.w.Seek(w.seekProgHeader, io.SeekStart)\n\tw.u64(uint64(phoff))\n\tw.w.Seek(w.seekProgNum, io.SeekStart)\n\tw.u16(uint16(len(w.Progs)))\n\tw.w.Seek(0, io.SeekEnd)\n\n\tfor _, prog := range w.Progs {\n\t\tw.u32(uint32(prog.Type))\n\t\tw.u32(uint32(prog.Flags))\n\t\tw.u64(prog.Off)\n\t\tw.u64(prog.Vaddr)\n\t\tw.u64(prog.Paddr)\n\t\tw.u64(prog.Filesz)\n\t\tw.u64(prog.Memsz)\n\t\tw.u64(prog.Align)\n\t}\n}\n\n// WriteSectionHeaders writes the section headers at the current location\n// and patches the file header accordingly.\nfunc (w *Writer) WriteSectionHeaders() {\n\tshstrndx := len(w.Sections)\n\tstrtab := &elf.SectionHeader{\n\t\tName:      \".strtab\",\n\t\tType:      elf.SHT_STRTAB,\n\t\tOffset:    uint64(w.Here()),\n\t\tAddralign: 1,\n\t}\n\tw.Sections = append(w.Sections, strtab)\n\n\tstrtabStart := w.Here()\n\n\tstrToIndex := map[string]int64{}\n\n\tw.Write([]byte{0}) // first entry must be the NUL character\n\n\tfor _, sect := range w.Sections {\n\t\tif _, ok := strToIndex[sect.Name]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tstrToIndex[sect.Name] = w.Here() - strtabStart\n\t\tw.Write([]byte(sect.Name))\n\t\tw.Write([]byte{0})\n\t}\n\n\tstrtab.Size = uint64(w.Here() - strtabStart)\n\n\tshoff := w.Here()\n\n\t// Patch File Header\n\tw.w.Seek(w.seekSectionHeader, io.SeekStart)\n\tw.u64(uint64(shoff))\n\tw.w.Seek(w.seekSectionNum, io.SeekStart)\n\tw.u16(uint16(len(w.Sections)))\n\tw.w.Seek(w.seekShstrndx, io.SeekStart)\n\tw.u16(uint16(shstrndx))\n\tw.w.Seek(0, io.SeekEnd)\n\n\tfor _, sect := range w.Sections {\n\t\tw.u32(uint32(strToIndex[sect.Name]))\n\t\tw.u32(uint32(sect.Type))\n\t\tw.u64(uint64(sect.Flags))\n\t\tw.u64(sect.Addr)\n\t\tw.u64(sect.Offset)\n\t\tw.u64(sect.Size)\n\t\tw.u32(sect.Link)\n\t\tw.u32(sect.Info)\n\t\tw.u64(sect.Addralign)\n\t\tw.u64(sect.Entsize)\n\t}\n}\n\n// Here returns the current seek offset from the start of the file.\nfunc (w *Writer) Here() int64 {\n\tr, err := w.w.Seek(0, io.SeekCurrent)\n\tif err != nil && w.Err == nil {\n\t\tw.Err = err\n\t}\n\treturn r\n}\n\n// Align writes as many padding bytes as needed to make the current file\n// offset a multiple of align.\nfunc (w *Writer) Align(align int64) {\n\toff := w.Here()\n\talignOff := (off + (align - 1)) &^ (align - 1)\n\tif alignOff-off > 0 {\n\t\tw.Write(make([]byte, alignOff-off))\n\t}\n}\n\nfunc (w *Writer) Write(buf []byte) {\n\t_, err := w.w.Write(buf)\n\tif err != nil && w.Err == nil {\n\t\tw.Err = err\n\t}\n}\n\nfunc (w *Writer) u16(n uint16) {\n\terr := binary.Write(w.w, binary.LittleEndian, n)\n\tif err != nil && w.Err == nil {\n\t\tw.Err = err\n\t}\n}\n\nfunc (w *Writer) u32(n uint32) {\n\terr := binary.Write(w.w, binary.LittleEndian, n)\n\tif err != nil && w.Err == nil {\n\t\tw.Err = err\n\t}\n}\n\nfunc (w *Writer) u64(n uint64) {\n\terr := binary.Write(w.w, binary.LittleEndian, n)\n\tif err != nil && w.Err == nil {\n\t\tw.Err = err\n\t}\n}\n"
  },
  {
    "path": "pkg/gobuild/defaultexe.go",
    "content": "package gobuild\n\nimport (\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\n// DefaultDebugBinaryPath returns an unused file path in the current\n// directory named 'name' followed by a random string\nfunc DefaultDebugBinaryPath(name string) string {\n\tpattern := name\n\n\tif runtime.GOOS == \"windows\" {\n\t\tpattern += \".exe\"\n\t\t// Try to create the file atomically with O_EXCL to avoid race conditions\n\t\tf, err := os.OpenFile(pattern, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0644)\n\t\tif err == nil {\n\t\t\t// Successfully created the file\n\t\t\tr := f.Name()\n\t\t\tf.Close()\n\t\t\treturn r\n\t\t}\n\t\t// If file already exists or other error, fall back to CreateTemp\n\t\t// (we don't need to specifically check os.IsExist because CreateTemp will handle any case)\n\t}\n\n\tf, err := os.CreateTemp(\".\", pattern)\n\tif err != nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"could not create temporary file for build output: %v\", err)\n\t\tif runtime.GOOS == \"windows\" {\n\t\t\treturn name + \".exe\"\n\t\t}\n\t\treturn name\n\t}\n\tr := f.Name()\n\tf.Close()\n\treturn r\n}\n"
  },
  {
    "path": "pkg/gobuild/gobuild.go",
    "content": "// Package gobuild provides utilities for building programs and tests\n// for the debugging session.\npackage gobuild\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/config\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\n// Remove the file at path and issue a warning to stderr if this fails.\n// This can be used to remove the temporary binary generated for the session.\nfunc Remove(path string) {\n\tvar err error\n\tfor range 20 {\n\t\terr = os.Remove(path)\n\t\t// Open files can be removed on Unix, but not on Windows, where there also appears\n\t\t// to be a delay in releasing the binary when the process exits.\n\t\t// Leaving temporary files behind can be annoying to users, so we try again.\n\t\tif err == nil || runtime.GOOS != \"windows\" {\n\t\t\tbreak\n\t\t}\n\t\ttime.Sleep(1 * time.Millisecond)\n\t}\n\tif err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"could not remove %v: %v\\n\", path, err)\n\t}\n}\n\n// GoBuild builds non-test files in 'pkgs' with the specified 'buildflags'\n// and writes the output at 'debugname'.\nfunc GoBuild(debugname string, pkgs []string, buildflags any) error {\n\targs, _ := goBuildArgs2(debugname, pkgs, buildflags, false)\n\treturn gocommandRun(\"build\", args...)\n}\n\n// GoBuildCombinedOutput builds non-test files in 'pkgs' with the specified 'buildflags'\n// and writes the output at 'debugname'.\nfunc GoBuildCombinedOutput(debugname string, pkgs []string, buildflags any) (string, []byte, error) {\n\targs, err := goBuildArgs2(debugname, pkgs, buildflags, false)\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\treturn gocommandCombinedOutput(\"build\", args...)\n}\n\n// GoTestBuild builds test files 'pkgs' with the specified 'buildflags'\n// and writes the output at 'debugname'.\nfunc GoTestBuild(debugname string, pkgs []string, buildflags any) error {\n\targs, _ := goBuildArgs2(debugname, pkgs, buildflags, true)\n\treturn gocommandRun(\"test\", args...)\n}\n\n// GoTestBuildCombinedOutput builds test files 'pkgs' with the specified 'buildflags'\n// and writes the output at 'debugname'.\nfunc GoTestBuildCombinedOutput(debugname string, pkgs []string, buildflags any) (string, []byte, error) {\n\targs, err := goBuildArgs2(debugname, pkgs, buildflags, true)\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\treturn gocommandCombinedOutput(\"test\", args...)\n}\n\nfunc goBuildArgs(debugname string, pkgs []string, buildflags string, isTest bool) []string {\n\tvar args []string\n\n\tbfv := config.SplitQuotedFields(buildflags, '\\'')\n\tif len(bfv) >= 2 && bfv[0] == \"-C\" {\n\t\targs = append(args, bfv[:2]...)\n\t\tbfv = bfv[2:]\n\t} else if len(bfv) >= 1 && strings.HasPrefix(bfv[0], \"-C=\") {\n\t\targs = append(args, bfv[0])\n\t\tbfv = bfv[1:]\n\t}\n\n\targs = append(args, \"-o\", debugname)\n\tif isTest {\n\t\targs = append([]string{\"-c\"}, args...)\n\t}\n\targs = append(args, \"-gcflags\", \"all=-N -l\")\n\tif buildflags != \"\" {\n\t\targs = append(args, bfv...)\n\t}\n\targs = append(args, pkgs...)\n\treturn args\n}\n\n// goBuildArgs2 is like goBuildArgs, but takes either string or []string.\nfunc goBuildArgs2(debugname string, pkgs []string, buildflags any, isTest bool) ([]string, error) {\n\tvar args []string\n\tswitch buildflags := buildflags.(type) {\n\tcase string:\n\t\treturn goBuildArgs(debugname, pkgs, buildflags, isTest), nil\n\tcase nil:\n\tcase []string:\n\t\targs = append(args, buildflags...)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid buildflags type %T\", buildflags)\n\t}\n\n\targs = append(args, \"-o\", debugname)\n\tif isTest {\n\t\targs = append([]string{\"-c\"}, args...)\n\t}\n\targs = append(args, \"-gcflags\", \"all=-N -l\")\n\treturn append(args, pkgs...), nil\n}\n\nfunc gocommandRun(command string, args ...string) error {\n\t_, goBuild := gocommandExecCmd(command, args...)\n\tgoBuild.Stderr = os.Stdout\n\tgoBuild.Stdout = os.Stderr\n\treturn goBuild.Run()\n}\n\nfunc gocommandCombinedOutput(command string, args ...string) (string, []byte, error) {\n\tbuildCmd, goBuild := gocommandExecCmd(command, args...)\n\tout, err := goBuild.CombinedOutput()\n\treturn buildCmd, out, err\n}\n\nfunc gocommandExecCmd(command string, args ...string) (string, *exec.Cmd) {\n\tallargs := []string{command}\n\tallargs = append(allargs, args...)\n\tgoBuild := exec.Command(\"go\", allargs...)\n\tlogflags.DebuggerLogger().Debugf(\"gobuild args: %v\", allargs)\n\treturn strings.Join(append([]string{\"go\"}, allargs...), \" \"), goBuild\n}\n"
  },
  {
    "path": "pkg/gobuild/gobuild_test.go",
    "content": "package gobuild\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/config\"\n)\n\nfunc TestGoBuildArgsDashC(t *testing.T) {\n\ttestCases := []struct{ in, tgt string }{\n\t\t{\"-C somedir\", \"-C somedir -o debug -gcflags 'all=-N -l' pkg\"},\n\t\t{\"-C\", \"-o debug -gcflags 'all=-N -l' -C pkg\"},\n\t\t{\"-C=somedir\", \"-C=somedir -o debug -gcflags 'all=-N -l' pkg\"},\n\t\t{\"-C somedir -other -args\", \"-C somedir -o debug -gcflags 'all=-N -l' -other -args pkg\"},\n\t\t{\"-C=somedir -other -args\", \"-C=somedir -o debug -gcflags 'all=-N -l' -other -args pkg\"},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.in, func(t *testing.T) {\n\t\t\tt.Parallel()\n\n\t\t\tout := goBuildArgs(\"debug\", []string{\"pkg\"}, tc.in, false)\n\t\t\ttgt := config.SplitQuotedFields(tc.tgt, '\\'')\n\t\t\tt.Logf(\"%q -> %q\", tc.in, out)\n\t\t\tif !reflect.DeepEqual(out, tgt) {\n\t\t\t\tt.Errorf(\"output mismatch input %q\\noutput %q\\ntarget %q\", tc.in, out, tgt)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "pkg/goversion/compat.go",
    "content": "package goversion\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"runtime\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\n//lint:file-ignore ST1005 errors here can be capitalized\n\nvar (\n\tMinSupportedVersionOfGoMajor = 1\n\tMinSupportedVersionOfGoMinor = 24\n\tMaxSupportedVersionOfGoMajor = 1\n\tMaxSupportedVersionOfGoMinor = 26\n\tgoTooOldErr                  = fmt.Sprintf(\"Go version %%s is too old for this version of Delve (minimum supported version %d.%d, suppress this error with --check-go-version=false)\", MinSupportedVersionOfGoMajor, MinSupportedVersionOfGoMinor)\n\tgoTooOldWarn                 = fmt.Sprintf(\"WARNING: undefined behavior - Go version %%s is too old for this version of Delve (minimum supported version %d.%d)\", MinSupportedVersionOfGoMajor, MinSupportedVersionOfGoMinor)\n\tdlvTooOldErr                 = fmt.Sprintf(\"Version of Delve is too old for Go version %%s (maximum supported version %d.%d, suppress this error with --check-go-version=false)\", MaxSupportedVersionOfGoMajor, MaxSupportedVersionOfGoMinor)\n\tdlvTooOldWarn                = fmt.Sprintf(\"WARNING: undefined behavior - version of Delve is too old for Go version %%s (maximum supported version %d.%d)\", MaxSupportedVersionOfGoMajor, MaxSupportedVersionOfGoMinor)\n)\n\n// Compatible checks that the version specified in the producer string is compatible with\n// this version of delve.\nfunc Compatible(dwarfVer uint8, producer string, warnonly bool) error {\n\tver := ParseProducer(producer)\n\tif ver.IsOldDevel() {\n\t\treturn nil\n\t}\n\tif runtime.GOARCH == \"riscv64\" && !ver.AfterOrEqual(GoVersion{1, 24, versionedDevel, \"\", \"\"}) {\n\t\tif warnonly {\n\t\t\tlogflags.WriteError(fmt.Sprintf(goTooOldWarn, ver.String()))\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(goTooOldErr, ver.String())\n\t}\n\tif !ver.AfterOrEqual(GoVersion{MinSupportedVersionOfGoMajor, MinSupportedVersionOfGoMinor, betaRev(0), \"\", \"\"}) {\n\t\tif warnonly {\n\t\t\tlogflags.WriteError(fmt.Sprintf(goTooOldWarn, ver.String()))\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(goTooOldErr, ver.String())\n\t}\n\tif ver.AfterOrEqual(GoVersion{MaxSupportedVersionOfGoMajor, MaxSupportedVersionOfGoMinor + 1, betaRev(0), \"\", \"\"}) {\n\t\tif warnonly {\n\t\t\tlogflags.WriteError(fmt.Sprintf(dlvTooOldWarn, ver.String()))\n\t\t\treturn nil\n\t\t}\n\t\treturn fmt.Errorf(dlvTooOldErr, ver.String())\n\t}\n\tif dwarfVer >= 5 {\n\t\tif !VersionAfterOrEqual(runtime.Version(), 1, 25) {\n\t\t\tconst errstr = \"To debug executables using DWARFv5 or later Delve must be built with Go version 1.25.0 or later\"\n\t\t\tif warnonly {\n\t\t\t\tlogflags.WriteError(errstr)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn errors.New(errstr)\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/goversion/go_version.go",
    "content": "package goversion\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// GoVersion represents the Go version of\n// the Go compiler version used to compile\n// the target binary.\ntype GoVersion struct {\n\tMajor     int\n\tMinor     int\n\tRev       int // revision number or negative number for beta and rc releases\n\tProposal  string\n\tToolchain string\n}\n\nconst (\n\tbetaStart      = -1000\n\tbetaEnd        = -2000\n\tversionedDevel = -3000\n)\n\nfunc betaRev(beta int) int {\n\treturn beta + betaEnd\n}\n\nfunc rcRev(rc int) int {\n\treturn rc + betaStart\n}\n\nvar (\n\tGoVer18Beta = GoVersion{1, 8, betaRev(0), \"\", \"\"}\n)\n\n// Parse parses a go version string\nfunc Parse(ver string) (GoVersion, bool) {\n\tvar r GoVersion\n\tvar err1, err2, err3 error\n\n\tconst devel = \"devel\"\n\n\tif strings.HasPrefix(ver, devel) {\n\t\tver = strings.TrimSpace(ver[len(devel):])\n\t\tif !strings.HasPrefix(ver, \"go\") {\n\t\t\t// old development build: devel +COMMIT DATE ARCH\n\t\t\treturn GoVersion{-1, 0, 0, \"\", \"\"}, true\n\t\t}\n\n\t\t// go1.24 development build: devel goX.Y-COMMIT DATE ARCH\n\t\tver = strings.Split(ver[2:], \"-\")[0]\n\t\tv := strings.SplitN(ver, \".\", 2)\n\t\tif len(v) != 2 {\n\t\t\treturn GoVersion{-1, 0, 0, \"\", \"\"}, true\n\t\t}\n\t\tmajor, err1 := strconv.Atoi(v[0])\n\t\tminor, err2 := strconv.Atoi(v[1])\n\t\tif err1 != nil || err2 != nil {\n\t\t\treturn GoVersion{-1, 0, 0, \"\", \"\"}, true\n\t\t}\n\t\treturn GoVersion{major, minor, versionedDevel, \"\", \"\"}, true\n\t}\n\n\tif strings.HasPrefix(ver, \"go\") {\n\t\tver := strings.Split(ver, \" \")[0]\n\t\tv := strings.SplitN(ver[2:], \".\", 4)\n\t\tswitch len(v) {\n\t\tcase 2:\n\t\t\tr.Major, err1 = strconv.Atoi(v[0])\n\n\t\t\tvar minorstr, rest string\n\t\t\tvar found bool\n\n\t\t\tfor i, ch := range v[1] {\n\t\t\t\tif ch < '0' || ch > '9' {\n\t\t\t\t\tminorstr = v[1][:i]\n\t\t\t\t\trest = v[1][i:]\n\t\t\t\t\tfound = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !found {\n\t\t\t\tminorstr = v[1]\n\t\t\t}\n\n\t\t\tr.Minor, err2 = strconv.Atoi(minorstr)\n\t\t\tr.Proposal = \"\"\n\n\t\t\tif err1 != nil || err2 != nil {\n\t\t\t\treturn GoVersion{}, false\n\t\t\t}\n\n\t\t\tif rest == \"\" {\n\t\t\t\t// old major release: goX.Y\n\t\t\t\treturn r, true\n\t\t\t}\n\n\t\t\thasPrefix := func(pfx string) bool {\n\t\t\t\tif strings.HasPrefix(rest, pfx) {\n\t\t\t\t\trest = rest[len(pfx):]\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tswitch {\n\t\t\tcase hasPrefix(\"-devel_\"):\n\t\t\t\t// go1.25 development version: go1.25-devel_COMMIT DATE ARCH\n\t\t\t\tr.Rev = versionedDevel\n\t\t\tcase hasPrefix(\"beta\"):\n\t\t\t\t// old beta releases goX.YbetaZ\n\t\t\t\tvar beta int\n\t\t\t\tbeta, err3 = strconv.Atoi(rest)\n\t\t\t\tr.Rev = betaRev(beta)\n\t\t\tcase hasPrefix(\"b\"):\n\t\t\t\t// old boringcrypto version goX.YbZ\n\t\t\t\t_, err3 = strconv.Atoi(rest)\n\t\t\tcase hasPrefix(\"rc\"):\n\t\t\t\ti := 0\n\t\t\t\tfor i < len(rest) && rest[i] >= '0' && rest[i] <= '9' {\n\t\t\t\t\ti++\n\t\t\t\t}\n\t\t\t\tvar rc int\n\t\t\t\trc, err3 = strconv.Atoi(rest[:i])\n\t\t\t\tif err3 != nil || i == 0 {\n\t\t\t\t\treturn GoVersion{}, false\n\t\t\t\t}\n\t\t\t\tr.Rev = rcRev(rc)\n\t\t\tdefault:\n\t\t\t\t// what is this?\n\t\t\t\treturn GoVersion{}, false\n\t\t\t}\n\n\t\t\tif err3 != nil {\n\t\t\t\treturn GoVersion{}, false\n\t\t\t}\n\n\t\t\treturn r, true\n\n\t\tcase 3:\n\n\t\t\tr.Major, err1 = strconv.Atoi(v[0])\n\t\t\tr.Minor, err2 = strconv.Atoi(v[1])\n\n\t\t\tif vr := strings.SplitN(v[2], \"-\", 2); len(vr) == 2 {\n\t\t\t\t// minor version with toolchain modifier goX.Y.Z-anything\n\t\t\t\tr.Rev, err3 = strconv.Atoi(vr[0])\n\t\t\t\tr.Toolchain = vr[1]\n\t\t\t} else if vr := strings.SplitN(v[2], \"b\", 2); len(vr) == 2 {\n\t\t\t\t// old boringcrypto version goX.Y.ZbW\n\t\t\t\tr.Rev, err3 = strconv.Atoi(vr[0])\n\t\t\t} else {\n\t\t\t\t// minor version goX.Y.Z\n\t\t\t\tr.Rev, err3 = strconv.Atoi(v[2])\n\t\t\t}\n\n\t\t\tr.Proposal = \"\"\n\t\t\tif err1 != nil || err2 != nil || err3 != nil {\n\t\t\t\treturn GoVersion{}, false\n\t\t\t}\n\n\t\t\treturn r, true\n\n\t\tcase 4:\n\n\t\t\t// old proposal release goX.Y.Z.anything\n\n\t\t\tr.Major, err1 = strconv.Atoi(v[0])\n\t\t\tr.Minor, err2 = strconv.Atoi(v[1])\n\t\t\tr.Rev, err3 = strconv.Atoi(v[2])\n\t\t\tr.Proposal = v[3]\n\t\t\tif err1 != nil || err2 != nil || err3 != nil || r.Proposal == \"\" {\n\t\t\t\treturn GoVersion{}, false\n\t\t\t}\n\n\t\t\treturn r, true\n\n\t\tdefault:\n\t\t\treturn GoVersion{}, false\n\t\t}\n\t}\n\n\treturn GoVersion{}, false\n}\n\n// AfterOrEqual returns whether one GoVersion is after or\n// equal to the other.\nfunc (v *GoVersion) AfterOrEqual(b GoVersion) bool {\n\tif v.Major < b.Major {\n\t\treturn false\n\t} else if v.Major > b.Major {\n\t\treturn true\n\t}\n\n\tif v.Minor < b.Minor {\n\t\treturn false\n\t} else if v.Minor > b.Minor {\n\t\treturn true\n\t}\n\n\tif v.Rev < b.Rev {\n\t\treturn false\n\t} else if v.Rev > b.Rev {\n\t\treturn true\n\t}\n\n\treturn true\n}\n\n// IsOldDevel returns whether the GoVersion is an old-style development\n// build of Go, i.e. without an associated minor and major version.\nfunc (v *GoVersion) IsOldDevel() bool {\n\treturn v.Major < 0\n}\n\n// IsDevelBuild returns whether the GoVersion is a development build\nfunc (v *GoVersion) IsDevelBuild() bool {\n\treturn v.Major < 0 || v.Rev == versionedDevel\n}\n\nfunc (v *GoVersion) String() string {\n\tswitch {\n\tcase v.Rev < betaStart:\n\t\t// beta version\n\t\treturn fmt.Sprintf(\"go%d.%dbeta%d\", v.Major, v.Minor, v.Rev-betaEnd)\n\tcase v.Rev < 0:\n\t\t// rc version\n\t\treturn fmt.Sprintf(\"go%d.%drc%d\", v.Major, v.Minor, v.Rev-betaStart)\n\tcase v.Proposal != \"\":\n\t\t// with proposal\n\t\treturn fmt.Sprintf(\"go%d.%d.%d.%s\", v.Major, v.Minor, v.Rev, v.Proposal)\n\tcase v.Rev == 0 && v.Minor < 21:\n\t\t// old major version\n\t\treturn fmt.Sprintf(\"go%d.%d\", v.Major, v.Minor)\n\tcase v.Toolchain != \"\":\n\t\treturn fmt.Sprintf(\"go%d.%d.%d-%s\", v.Major, v.Minor, v.Rev, v.Toolchain)\n\tdefault:\n\t\t// post go1.21 major version or minor version\n\t\treturn fmt.Sprintf(\"go%d.%d.%d\", v.Major, v.Minor, v.Rev)\n\t}\n}\n\nconst goVersionPrefix = \"go version \"\n\n// Installed runs \"go version\" and parses the output\nfunc Installed() (GoVersion, bool) {\n\tout, err := exec.Command(\"go\", \"version\").CombinedOutput()\n\tif err != nil {\n\t\treturn GoVersion{}, false\n\t}\n\n\ts := string(out)\n\n\tif !strings.HasPrefix(s, goVersionPrefix) {\n\t\treturn GoVersion{}, false\n\t}\n\n\treturn Parse(s[len(goVersionPrefix):])\n}\n\n// VersionAfterOrEqual checks that version (as returned by runtime.Version()\n// or go version) is major.minor or a later version, or a development\n// version.\nfunc VersionAfterOrEqual(version string, major, minor int) bool {\n\treturn VersionAfterOrEqualRev(version, major, minor, versionedDevel)\n}\n\n// VersionAfterOrEqualRev checks that version (as returned by runtime.Version()\n// or go version) is major.minor or a later version, or a development\n// version.\nfunc VersionAfterOrEqualRev(version string, major, minor, rev int) bool {\n\tver, _ := Parse(version)\n\tif ver.IsOldDevel() {\n\t\treturn true\n\t}\n\treturn ver.AfterOrEqual(GoVersion{major, minor, rev, \"\", \"\"})\n}\n\nconst producerVersionPrefix = \"Go cmd/compile \"\n\n// ProducerAfterOrEqual checks that the DW_AT_producer version is\n// major.minor or a later version, or a development version.\nfunc ProducerAfterOrEqual(producer string, major, minor int) bool {\n\tver := ParseProducer(producer)\n\tif ver.IsOldDevel() {\n\t\treturn true\n\t}\n\treturn ver.AfterOrEqual(GoVersion{major, minor, versionedDevel, \"\", \"\"})\n}\n\nfunc ParseProducer(producer string) GoVersion {\n\tproducer = strings.TrimPrefix(producer, producerVersionPrefix)\n\tver, _ := Parse(producer)\n\treturn ver\n}\n"
  },
  {
    "path": "pkg/goversion/version_test.go",
    "content": "package goversion\n\nimport (\n\t\"runtime\"\n\t\"testing\"\n)\n\nfunc parseVer(t *testing.T, verStr string) GoVersion {\n\tpver, ok := Parse(verStr)\n\tif !ok {\n\t\tt.Fatalf(\"Could not parse version string <%s>\", verStr)\n\t}\n\treturn pver\n}\n\nfunc versionAfterOrEqual(t *testing.T, verStr string, ver GoVersion) {\n\tt.Helper()\n\tpver := parseVer(t, verStr)\n\tif !pver.AfterOrEqual(ver) {\n\t\tt.Fatalf(\"Version <%s> parsed as %v not after %v\", verStr, pver, ver)\n\t}\n\tt.Logf(\"version string <%s> → %v\", verStr, ver)\n}\n\nfunc versionAfterOrEqual2(t *testing.T, verStr1, verStr2 string) {\n\tt.Helper()\n\tpver1 := parseVer(t, verStr1)\n\tpver2 := parseVer(t, verStr2)\n\tif !pver1.AfterOrEqual(pver2) {\n\t\tt.Fatalf(\"Version <%s> %#v not after or equal to <%s> %#v\", verStr1, pver1, verStr2, pver2)\n\t}\n}\n\nfunc versionEqual(t *testing.T, verStr string, ver GoVersion) {\n\tt.Helper()\n\tpver := parseVer(t, verStr)\n\tif pver != ver {\n\t\tt.Fatalf(\"Version <%s> parsed as %v not equal to %v\", verStr, pver, ver)\n\t}\n\tt.Logf(\"version string <%s> → %v\", verStr, ver)\n}\n\nfunc TestParseVersionStringAfterOrEqual(t *testing.T) {\n\tt.Parallel()\n\tversionAfterOrEqual(t, \"go1.4\", GoVersion{1, 4, 0, \"\", \"\"})\n\tversionAfterOrEqual(t, \"go1.5.0\", GoVersion{1, 5, 0, \"\", \"\"})\n\tversionAfterOrEqual(t, \"go1.4.2\", GoVersion{1, 4, 2, \"\", \"\"})\n\tversionAfterOrEqual(t, \"go1.5beta2\", GoVersion{1, 5, betaRev(2), \"\", \"\"})\n\tversionAfterOrEqual(t, \"go1.5rc2\", GoVersion{1, 5, rcRev(2), \"\", \"\"})\n\tversionAfterOrEqual(t, \"go1.6.1 (appengine-1.9.37)\", GoVersion{1, 6, 1, \"\", \"\"})\n\tversionAfterOrEqual(t, \"go1.8.1.typealias\", GoVersion{1, 6, 1, \"\", \"\"})\n\tversionAfterOrEqual(t, \"go1.8b1\", GoVersion{1, 8, 0, \"\", \"\"})\n\tversionAfterOrEqual(t, \"go1.16.4b7\", GoVersion{1, 16, 4, \"\", \"\"})\n\tver, ok := Parse(\"devel +17efbfc Tue Jul 28 17:39:19 2015 +0000 linux/amd64\")\n\tif !ok {\n\t\tt.Fatalf(\"Could not parse devel version string\")\n\t}\n\tif !ver.IsOldDevel() {\n\t\tt.Fatalf(\"Devel version string not correctly recognized\")\n\t}\n\n\tversionAfterOrEqual2(t, \"go1.16\", \"go1.16b1\")\n\tversionAfterOrEqual2(t, \"go1.16\", \"go1.16rc1\")\n\tversionAfterOrEqual2(t, \"go1.16rc1\", \"go1.16beta1\")\n\tversionAfterOrEqual2(t, \"go1.16beta2\", \"go1.16beta1\")\n\tversionAfterOrEqual2(t, \"go1.16rc10\", \"go1.16rc8\")\n\tversionAfterOrEqual(t, \"go1.26rc1-X:nodwarf5 linux/amd64\", GoVersion{1, 26, rcRev(1), \"\", \"\"})\n}\n\nfunc TestParseVersionStringEqual(t *testing.T) {\n\tt.Parallel()\n\tversionEqual(t, \"go1.4\", GoVersion{1, 4, 0, \"\", \"\"})\n\tversionEqual(t, \"go1.5.0\", GoVersion{1, 5, 0, \"\", \"\"})\n\tversionEqual(t, \"go1.4.2\", GoVersion{1, 4, 2, \"\", \"\"})\n\tversionEqual(t, \"go1.5beta2\", GoVersion{1, 5, betaRev(2), \"\", \"\"})\n\tversionEqual(t, \"go1.5rc2\", GoVersion{1, 5, rcRev(2), \"\", \"\"})\n\tversionEqual(t, \"go1.6.1 (appengine-1.9.37)\", GoVersion{1, 6, 1, \"\", \"\"})\n\tversionEqual(t, \"go1.8.1.typealias\", GoVersion{1, 8, 1, \"typealias\", \"\"})\n\tversionEqual(t, \"go1.8b1\", GoVersion{1, 8, 0, \"\", \"\"})\n\tversionEqual(t, \"go1.16.4b7\", GoVersion{1, 16, 4, \"\", \"\"})\n\tversionEqual(t, \"go1.21.1-something\", GoVersion{1, 21, 1, \"\", \"something\"})\n\tversionEqual(t, \"devel +17efbfc Tue Jul 28 17:39:19 2015 +0000 linux/amd64\", GoVersion{Major: -1})\n\tversionEqual(t, \"devel go1.24-1bb6f19a25 Mon Oct 14 15:17:20 2024 -0400 linux/amd64\", GoVersion{1, 24, versionedDevel, \"\", \"\"})\n\tversionEqual(t, \"go1.25-devel_6953ef86cd Mon May 5 04:05:18 2025 -0700 linux/amd64\", GoVersion{1, 25, versionedDevel, \"\", \"\"})\n\tversionEqual(t, \"go1.26rc1-X:nodwarf5 linux/amd64\", GoVersion{1, 26, rcRev(1), \"\", \"\"})\n}\n\nfunc TestRoundtrip(t *testing.T) {\n\tt.Parallel()\n\tfor _, verStr := range []string{\n\t\t\"go1.4\",\n\t\t\"go1.4.2\",\n\t\t\"go1.5beta2\",\n\t\t\"go1.5rc2\",\n\t\t\"go1.8.1.typealias\",\n\t\t\"go1.21.1-something\",\n\t\t\"go1.21.0\",\n\t} {\n\t\tpver := parseVer(t, verStr)\n\t\tif pver.String() != verStr {\n\t\t\tt.Fatalf(\"roundtrip mismatch <%s> -> %#v -> <%s>\", verStr, pver, pver.String())\n\t\t}\n\t}\n}\n\nfunc TestInstalled(t *testing.T) {\n\tt.Parallel()\n\tinstalledVersion, ok := Installed()\n\tif !ok {\n\t\tt.Fatalf(\"could not parse output of go version\")\n\t}\n\truntimeVersion, ok := Parse(runtime.Version())\n\tif !ok {\n\t\tt.Fatalf(\"could not parse output of runtime.Version() %q\", runtime.Version())\n\t}\n\n\tt.Logf(\"installed: %v\", installedVersion)\n\tt.Logf(\"runtime: %v\", runtimeVersion)\n\n\tif installedVersion != runtimeVersion {\n\t\tt.Fatalf(\"version mismatch %#v %#v\", installedVersion, runtimeVersion)\n\t}\n}\n"
  },
  {
    "path": "pkg/internal/gosym/additions.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage gosym\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"regexp\"\n\t\"strings\"\n)\n\nconst (\n\tfuncSymNameGo119Lower string = \"go.func.*\"\n\tfuncSymNameGo120      string = \"go:func.*\"\n)\n\n// Additions to the original package from cmd/internal/objabi/funcdata.go\nconst (\n\tpcdata_InlTreeIndex = 2\n\tfuncdata_InlTree    = 3\n)\n\nvar (\n\t// Regexp for matching go tags. The groups are:\n\t// 1  the major.minor version\n\t// 2  the patch version, or empty if none\n\t// 3  the entire prerelease, if present\n\t// 4  the prerelease type (\"beta\" or \"rc\")\n\t// 5  the prerelease number\n\ttagRegexp = regexp.MustCompile(`^go(\\d+\\.\\d+)(\\.\\d+|)((beta|rc|-pre)(\\d+))?$`)\n)\n\n// parsed returns the parsed form of a semantic version string.\ntype parsed struct {\n\tmajor      string\n\tminor      string\n\tpatch      string\n\tshort      string\n\tprerelease string\n\tbuild      string\n}\n\nfunc parsePrerelease(v string) (t, rest string, ok bool) {\n\t// \"A pre-release version MAY be denoted by appending a hyphen and\n\t// a series of dot separated identifiers immediately following the patch version.\n\t// Identifiers MUST comprise only ASCII alphanumerics and hyphen [0-9A-Za-z-].\n\t// Identifiers MUST NOT be empty. Numeric identifiers MUST NOT include leading zeroes.\"\n\tif v == \"\" || v[0] != '-' {\n\t\treturn\n\t}\n\ti := 1\n\tstart := 1\n\tfor i < len(v) && v[i] != '+' {\n\t\tif !isIdentChar(v[i]) && v[i] != '.' {\n\t\t\treturn\n\t\t}\n\t\tif v[i] == '.' {\n\t\t\tif start == i || isBadNum(v[start:i]) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tstart = i + 1\n\t\t}\n\t\ti++\n\t}\n\tif start == i || isBadNum(v[start:i]) {\n\t\treturn\n\t}\n\treturn v[:i], v[i:], true\n}\n\n// GoTagToSemver is a modified copy of pkgsite/internal/stdlib:VersionForTag.\nfunc GoTagToSemver(tag string) string {\n\tif tag == \"\" {\n\t\treturn \"\"\n\t}\n\ttag = strings.Fields(tag)[0]\n\t// Special cases for go1.\n\tif tag == \"go1\" {\n\t\treturn \"v1.0.0\"\n\t}\n\tif tag == \"go1.0\" {\n\t\treturn \"\"\n\t}\n\tm := tagRegexp.FindStringSubmatch(tag)\n\tif m == nil {\n\t\treturn \"\"\n\t}\n\tversion := \"v\" + m[1]\n\tif m[2] != \"\" {\n\t\tversion += m[2]\n\t} else {\n\t\tversion += \".0\"\n\t}\n\tif m[3] != \"\" {\n\t\tif !strings.HasPrefix(m[4], \"-\") {\n\t\t\tversion += \"-\"\n\t\t}\n\t\tversion += m[4] + \".\" + m[5]\n\t}\n\treturn version\n}\n\nfunc parseBuild(v string) (t, rest string, ok bool) {\n\tif v == \"\" || v[0] != '+' {\n\t\treturn\n\t}\n\ti := 1\n\tstart := 1\n\tfor i < len(v) {\n\t\tif !isIdentChar(v[i]) && v[i] != '.' {\n\t\t\treturn\n\t\t}\n\t\tif v[i] == '.' {\n\t\t\tif start == i {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tstart = i + 1\n\t\t}\n\t\ti++\n\t}\n\tif start == i {\n\t\treturn\n\t}\n\treturn v[:i], v[i:], true\n}\nfunc parseInt(v string) (t, rest string, ok bool) {\n\tif v == \"\" {\n\t\treturn\n\t}\n\tif v[0] < '0' || '9' < v[0] {\n\t\treturn\n\t}\n\ti := 1\n\tfor i < len(v) && '0' <= v[i] && v[i] <= '9' {\n\t\ti++\n\t}\n\tif v[0] == '0' && i != 1 {\n\t\treturn\n\t}\n\treturn v[:i], v[i:], true\n}\nfunc isIdentChar(c byte) bool {\n\treturn 'A' <= c && c <= 'Z' || 'a' <= c && c <= 'z' || '0' <= c && c <= '9' || c == '-'\n}\n\nfunc parse(v string) (p parsed, ok bool) {\n\tif v == \"\" || v[0] != 'v' {\n\t\treturn\n\t}\n\tp.major, v, ok = parseInt(v[1:])\n\tif !ok {\n\t\treturn\n\t}\n\tif v == \"\" {\n\t\tp.minor = \"0\"\n\t\tp.patch = \"0\"\n\t\tp.short = \".0.0\"\n\t\treturn\n\t}\n\tif v[0] != '.' {\n\t\tok = false\n\t\treturn\n\t}\n\tp.minor, v, ok = parseInt(v[1:])\n\tif !ok {\n\t\treturn\n\t}\n\tif v == \"\" {\n\t\tp.patch = \"0\"\n\t\tp.short = \".0\"\n\t\treturn\n\t}\n\tif v[0] != '.' {\n\t\tok = false\n\t\treturn\n\t}\n\tp.patch, v, ok = parseInt(v[1:])\n\tif !ok {\n\t\treturn\n\t}\n\tif len(v) > 0 && v[0] == '-' {\n\t\tp.prerelease, v, ok = parsePrerelease(v)\n\t\tif !ok {\n\t\t\treturn\n\t\t}\n\t}\n\tif len(v) > 0 && v[0] == '+' {\n\t\tp.build, v, ok = parseBuild(v)\n\t\tif !ok {\n\t\t\treturn\n\t\t}\n\t}\n\tif v != \"\" {\n\t\tok = false\n\t\treturn\n\t}\n\tok = true\n\treturn\n}\n\nfunc isBadNum(v string) bool {\n\ti := 0\n\tfor i < len(v) && '0' <= v[i] && v[i] <= '9' {\n\t\ti++\n\t}\n\treturn i == len(v) && i > 1 && v[0] == '0'\n}\nfunc nextIdent(x string) (dx, rest string) {\n\ti := 0\n\tfor i < len(x) && x[i] != '.' {\n\t\ti++\n\t}\n\treturn x[:i], x[i:]\n}\nfunc isNum(v string) bool {\n\ti := 0\n\tfor i < len(v) && '0' <= v[i] && v[i] <= '9' {\n\t\ti++\n\t}\n\treturn i == len(v)\n}\n\n// MajorMinor returns the major.minor version prefix of the semantic version v.\n// For example, MajorMinor(\"v2.1.0\") == \"v2.1\".\n// If v is an invalid semantic version string, MajorMinor returns the empty string.\nfunc MajorMinor(v string) string {\n\tpv, ok := parse(v)\n\tif !ok {\n\t\treturn \"\"\n\t}\n\ti := 1 + len(pv.major)\n\tif j := i + 1 + len(pv.minor); j <= len(v) && v[i] == '.' && v[i+1:j] == pv.minor {\n\t\treturn v[:j]\n\t}\n\treturn v[:i] + \".\" + pv.minor\n}\n\nfunc compareInt(x, y string) int {\n\tif x == y {\n\t\treturn 0\n\t}\n\tif len(x) < len(y) {\n\t\treturn -1\n\t}\n\tif len(x) > len(y) {\n\t\treturn +1\n\t}\n\tif x < y {\n\t\treturn -1\n\t} else {\n\t\treturn +1\n\t}\n}\nfunc comparePrerelease(x, y string) int {\n\t// \"When major, minor, and patch are equal, a pre-release version has\n\t// lower precedence than a normal version.\n\t// Example: 1.0.0-alpha < 1.0.0.\n\t// Precedence for two pre-release versions with the same major, minor,\n\t// and patch version MUST be determined by comparing each dot separated\n\t// identifier from left to right until a difference is found as follows:\n\t// identifiers consisting of only digits are compared numerically and\n\t// identifiers with letters or hyphens are compared lexically in ASCII\n\t// sort order. Numeric identifiers always have lower precedence than\n\t// non-numeric identifiers. A larger set of pre-release fields has a\n\t// higher precedence than a smaller set, if all of the preceding\n\t// identifiers are equal.\n\t// Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta <\n\t// 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0.\"\n\tif x == y {\n\t\treturn 0\n\t}\n\tif x == \"\" {\n\t\treturn +1\n\t}\n\tif y == \"\" {\n\t\treturn -1\n\t}\n\tfor x != \"\" && y != \"\" {\n\t\tx = x[1:] // skip - or .\n\t\ty = y[1:] // skip - or .\n\t\tvar dx, dy string\n\t\tdx, x = nextIdent(x)\n\t\tdy, y = nextIdent(y)\n\t\tif dx != dy {\n\t\t\tix := isNum(dx)\n\t\t\tiy := isNum(dy)\n\t\t\tif ix != iy {\n\t\t\t\tif ix {\n\t\t\t\t\treturn -1\n\t\t\t\t} else {\n\t\t\t\t\treturn +1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ix {\n\t\t\t\tif len(dx) < len(dy) {\n\t\t\t\t\treturn -1\n\t\t\t\t}\n\t\t\t\tif len(dx) > len(dy) {\n\t\t\t\t\treturn +1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif dx < dy {\n\t\t\t\treturn -1\n\t\t\t} else {\n\t\t\t\treturn +1\n\t\t\t}\n\t\t}\n\t}\n\tif x == \"\" {\n\t\treturn -1\n\t} else {\n\t\treturn +1\n\t}\n}\n\n// Compare returns an integer comparing two versions according to\n// semantic version precedence.\n// The result will be 0 if v == w, -1 if v < w, or +1 if v > w.\n//\n// An invalid semantic version string is considered less than a valid one.\n// All invalid semantic version strings compare equal to each other.\nfunc Compare(v, w string) int {\n\tpv, ok1 := parse(v)\n\tpw, ok2 := parse(w)\n\tif !ok1 && !ok2 {\n\t\treturn 0\n\t}\n\tif !ok1 {\n\t\treturn -1\n\t}\n\tif !ok2 {\n\t\treturn +1\n\t}\n\tif c := compareInt(pv.major, pw.major); c != 0 {\n\t\treturn c\n\t}\n\tif c := compareInt(pv.minor, pw.minor); c != 0 {\n\t\treturn c\n\t}\n\tif c := compareInt(pv.patch, pw.patch); c != 0 {\n\t\treturn c\n\t}\n\treturn comparePrerelease(pv.prerelease, pw.prerelease)\n}\n\n// InlineTree returns the inline tree for Func f as a sequence of InlinedCalls.\n// goFuncValue is the value of the gosym.FuncSymName symbol.\n// baseAddr is the address of the memory region (ELF Prog) containing goFuncValue.\n// progReader is a ReaderAt positioned at the start of that region.\nfunc (t *LineTable) InlineTree(f *Func, goFuncValue, baseAddr uint64, progReader io.ReaderAt) ([]InlinedCall, error) {\n\tif f.inlineTreeCount == 0 {\n\t\treturn nil, nil\n\t}\n\tif f.inlineTreeOffset == ^uint32(0) {\n\t\treturn nil, nil\n\t}\n\tvar offset int64\n\tif t.version >= ver118 {\n\t\toffset = int64(goFuncValue - baseAddr + uint64(f.inlineTreeOffset))\n\t} else {\n\t\toffset = int64(uint64(f.inlineTreeOffset) - baseAddr)\n\t}\n\tr := io.NewSectionReader(progReader, offset, 1<<32) // pick a size larger than we need\n\tvar ics []InlinedCall\n\tfor i := 0; i < f.inlineTreeCount; i++ {\n\t\tif t.version >= ver120 {\n\t\t\tvar ric rawInlinedCall120\n\t\t\tif err := binary.Read(r, t.binary, &ric); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"error reading into rawInlinedCall: %#v\", err)\n\t\t\t}\n\t\t\tics = append(ics, InlinedCall{\n\t\t\t\tFuncID:   ric.FuncID,\n\t\t\t\tName:     t.funcName(uint32(ric.NameOff)),\n\t\t\t\tParentPC: ric.ParentPC,\n\t\t\t})\n\t\t} else {\n\t\t\tvar ric rawInlinedCall112\n\t\t\tif err := binary.Read(r, t.binary, &ric); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tics = append(ics, InlinedCall{\n\t\t\t\tFuncID:   ric.FuncID,\n\t\t\t\tName:     t.funcName(uint32(ric.Func_)),\n\t\t\t\tParentPC: ric.ParentPC,\n\t\t\t})\n\t\t}\n\t}\n\treturn ics, nil\n}\n\n// FuncSymName returns symbol name for Go functions used in binaries\n// based on Go version. Supported Go versions are 1.18 and greater.\n// If the go version is unreadable it assumes that it is a newer version\n// and returns the symbol name for go version 1.20 or greater.\nfunc FuncSymName(goVersion string) string {\n\t// Support devel goX.Y...\n\tv := strings.TrimPrefix(goVersion, \"devel \")\n\tv = GoTagToSemver(v)\n\tmm := MajorMinor(v)\n\tif Compare(mm, \"v1.20\") >= 0 || mm == \"\" {\n\t\treturn funcSymNameGo120\n\t} else if Compare(mm, \"v1.18\") >= 0 {\n\t\treturn funcSymNameGo119Lower\n\t}\n\treturn \"\"\n}\n\nfunc GetFuncSymName() string {\n\treturn funcSymNameGo120\n}\n\n// InlinedCall describes a call to an inlined function.\ntype InlinedCall struct {\n\tFuncID   uint8  // type of the called function\n\tName     string // name of called function\n\tParentPC int32  // position of an instruction whose source position is the call site (offset from entry)\n}\n\n// rawInlinedCall112 is the encoding of entries in the FUNCDATA_InlTree table\n// from Go 1.12 through 1.19. It is equivalent to runtime.inlinedCall.\ntype rawInlinedCall112 struct {\n\tParent   int16 // index of parent in the inltree, or < 0\n\tFuncID   uint8 // type of the called function\n\t_        byte\n\tFile     int32 // perCU file index for inlined call. See cmd/link:pcln.go\n\tLine     int32 // line number of the call site\n\tFunc_    int32 // offset into pclntab for name of called function\n\tParentPC int32 // position of an instruction whose source position is the call site (offset from entry)\n}\n\n// rawInlinedCall120 is the encoding of entries in the FUNCDATA_InlTree table\n// from Go 1.20. It is equivalent to runtime.inlinedCall.\ntype rawInlinedCall120 struct {\n\tFuncID    uint8 // type of the called function\n\t_         [3]byte\n\tNameOff   int32 // offset into pclntab for name of called function\n\tParentPC  int32 // position of an instruction whose source position is the call site (offset from entry)\n\tStartLine int32 // line number of start of function (func keyword/TEXT directive)\n}\n\nfunc (f funcData) npcdata() uint32 { return f.field(7) }\nfunc (f funcData) nfuncdata(numFuncFields uint32) uint32 {\n\treturn uint32(f.data[f.fieldOffset(numFuncFields-1)+3])\n}\n\nfunc (f funcData) funcdataOffset(i uint8, numFuncFields uint32) uint32 {\n\tif uint32(i) >= f.nfuncdata(numFuncFields) {\n\t\treturn ^uint32(0)\n\t}\n\tvar off uint32\n\tif f.t.version >= ver118 {\n\t\toff = f.fieldOffset(numFuncFields) + // skip fixed part of _func\n\t\t\tf.npcdata()*4 + // skip pcdata\n\t\t\tuint32(i)*4 // index of i'th FUNCDATA\n\t} else {\n\t\toff = f.fieldOffset(numFuncFields) + // skip fixed part of _func\n\t\t\tf.npcdata()*4\n\t\toff += uint32(i) * f.t.ptrsize\n\t}\n\treturn f.t.binary.Uint32(f.data[off:])\n}\n\nfunc (f funcData) fieldOffset(n uint32) uint32 {\n\t// In Go 1.18, the first field of _func changed\n\t// from a uintptr entry PC to a uint32 entry offset.\n\tsz0 := f.t.ptrsize\n\tif f.t.version >= ver118 {\n\t\tsz0 = 4\n\t}\n\treturn sz0 + (n-1)*4 // subsequent fields are 4 bytes each\n}\n\nfunc (f funcData) pcdataOffset(i uint8, numFuncFields uint32) uint32 {\n\tif uint32(i) >= f.npcdata() {\n\t\treturn ^uint32(0)\n\t}\n\toff := f.fieldOffset(numFuncFields) + // skip fixed part of _func\n\t\tuint32(i)*4 // index of i'th PCDATA\n\treturn f.t.binary.Uint32(f.data[off:])\n}\n\n// maxInlineTreeIndexValue returns the maximum value of the inline tree index\n// pc-value table in info. This is the only way to determine how many\n// IndexedCalls are in an inline tree, since the data of the tree itself is not\n// delimited in any way.\nfunc (t *LineTable) maxInlineTreeIndexValue(info funcData, numFuncFields uint32) int {\n\tif info.npcdata() <= pcdata_InlTreeIndex {\n\t\treturn -1\n\t}\n\toff := info.pcdataOffset(pcdata_InlTreeIndex, numFuncFields)\n\tp := t.pctab[off:]\n\tval := int32(-1)\n\tmax := int32(-1)\n\tvar pc uint64\n\tfor t.step(&p, &pc, &val, pc == 0) {\n\t\tif val > max {\n\t\t\tmax = val\n\t\t}\n\t}\n\treturn int(max)\n}\n\ntype inlTree struct {\n\tinlineTreeOffset uint32 // offset from go.func.* symbol\n\tinlineTreeCount  int    // number of entries in inline tree\n}\n"
  },
  {
    "path": "pkg/internal/gosym/pclntab.go",
    "content": "package gosym\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"sort\"\n\t\"sync\"\n)\n\n// version of the pclntab\ntype version int\n\nconst (\n\tverUnknown version = iota\n\tver11\n\tver12\n\tver116\n\tver118\n\tver120\n)\n\n// A LineTable is a data structure mapping program counters to line numbers.\n//\n// In Go 1.1 and earlier, each function (represented by a Func) had its own LineTable,\n// and the line number corresponded to a numbering of all source lines in the\n// program, across all files. That absolute line number would then have to be\n// converted separately to a file name and line number within the file.\n//\n// In Go 1.2, the format of the data changed so that there is a single LineTable\n// for the entire program, shared by all Funcs, and there are no absolute line\n// numbers, just line numbers within specific files.\n//\n// For the most part, LineTable's methods should be treated as an internal\n// detail of the package; callers should use the methods on Table instead.\ntype LineTable struct {\n\tData []byte\n\tPC   uint64\n\tLine int\n\t// This mutex is used to keep parsing of pclntab synchronous.\n\tmu sync.Mutex\n\t// Contains the version of the pclntab section.\n\tversion version\n\t// Go 1.2/1.16/1.18 state\n\tbinary      binary.ByteOrder\n\tquantum     uint32\n\tptrsize     uint32\n\ttextStart   uint64 // address of runtime.text symbol (1.18+)\n\tfuncnametab []byte\n\tcutab       []byte\n\tfuncdata    []byte\n\tfunctab     []byte\n\tnfunctab    uint32\n\tfiletab     []byte\n\tpctab       []byte // points to the pctables.\n\tnfiletab    uint32\n\tfuncNames   map[uint32]string // cache the function names\n\tstrings     map[uint32]string // interned substrings of Data, keyed by offset\n\t// fileMap varies depending on the version of the object file.\n\t// For ver12, it maps the name to the index in the file table.\n\t// For ver116, it maps the name to the offset in filetab.\n\tfileMap map[string]uint32\n}\n\n// NOTE(rsc): This is wrong for GOARCH=arm, which uses a quantum of 4,\n// but we have no idea whether we're using arm or not. This only\n// matters in the old (pre-Go 1.2) symbol table format, so it's not worth\n// fixing.\nconst oldQuantum = 1\n\nfunc (t *LineTable) parse(targetPC uint64, targetLine int) (b []byte, pc uint64, line int) {\n\t// The PC/line table can be thought of as a sequence of\n\t//  <pc update>* <line update>\n\t// batches. Each update batch results in a (pc, line) pair,\n\t// where line applies to every PC from pc up to but not\n\t// including the pc of the next pair.\n\t//\n\t// Here we process each update individually, which simplifies\n\t// the code, but makes the corner cases more confusing.\n\tb, pc, line = t.Data, t.PC, t.Line\n\tfor pc <= targetPC && line != targetLine && len(b) > 0 {\n\t\tcode := b[0]\n\t\tb = b[1:]\n\t\tswitch {\n\t\tcase code == 0:\n\t\t\tif len(b) < 4 {\n\t\t\t\tb = b[0:0]\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tval := binary.BigEndian.Uint32(b)\n\t\t\tb = b[4:]\n\t\t\tline += int(val)\n\t\tcase code <= 64:\n\t\t\tline += int(code)\n\t\tcase code <= 128:\n\t\t\tline -= int(code - 64)\n\t\tdefault:\n\t\t\tpc += oldQuantum * uint64(code-128)\n\t\t\tcontinue\n\t\t}\n\t\tpc += oldQuantum\n\t}\n\treturn b, pc, line\n}\nfunc (t *LineTable) slice(pc uint64) *LineTable {\n\tdata, pc, line := t.parse(pc, -1)\n\treturn &LineTable{Data: data, PC: pc, Line: line}\n}\n\n// PCToLine returns the line number for the given program counter.\n//\n// Deprecated: Use Table's PCToLine method instead.\nfunc (t *LineTable) PCToLine(pc uint64) int {\n\tif t.isGo12() {\n\t\treturn t.go12PCToLine(pc)\n\t}\n\t_, _, line := t.parse(pc, -1)\n\treturn line\n}\n\n// LineToPC returns the program counter for the given line number,\n// considering only program counters before maxpc.\n//\n// Deprecated: Use Table's LineToPC method instead.\nfunc (t *LineTable) LineToPC(line int, maxpc uint64) uint64 {\n\tif t.isGo12() {\n\t\treturn 0\n\t}\n\t_, pc, line1 := t.parse(maxpc, line)\n\tif line1 != line {\n\t\treturn 0\n\t}\n\t// Subtract quantum from PC to account for post-line increment\n\treturn pc - oldQuantum\n}\n\n// NewLineTable returns a new PC/line table\n// corresponding to the encoded data.\n// Text must be the start address of the\n// corresponding text segment.\nfunc NewLineTable(data []byte, text uint64) *LineTable {\n\treturn &LineTable{Data: data, PC: text, Line: 0, funcNames: make(map[uint32]string), strings: make(map[uint32]string)}\n}\n\n// Go 1.2 symbol table format.\n// See golang.org/s/go12symtab.\n//\n// A general note about the methods here: rather than try to avoid\n// index out of bounds errors, we trust Go to detect them, and then\n// we recover from the panics and treat them as indicative of a malformed\n// or incomplete table.\n//\n// The methods called by symtab.go, which begin with \"go12\" prefixes,\n// are expected to have that recovery logic.\n// isGo12 reports whether this is a Go 1.2 (or later) symbol table.\nfunc (t *LineTable) isGo12() bool {\n\tt.parsePclnTab()\n\treturn t.version >= ver12\n}\n\nconst (\n\tgo12magic  = 0xfffffffb\n\tgo116magic = 0xfffffffa\n\tgo118magic = 0xfffffff0\n\tgo120magic = 0xfffffff1\n)\n\n// uintptr returns the pointer-sized value encoded at b.\n// The pointer size is dictated by the table being read.\nfunc (t *LineTable) uintptr(b []byte) uint64 {\n\tif t.ptrsize == 4 {\n\t\treturn uint64(t.binary.Uint32(b))\n\t}\n\treturn t.binary.Uint64(b)\n}\n\n// parsePclnTab parses the pclntab, setting the version.\nfunc (t *LineTable) parsePclnTab() {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.version != verUnknown {\n\t\treturn\n\t}\n\t// Note that during this function, setting the version is the last thing we do.\n\t// If we set the version too early, and parsing failed (likely as a panic on\n\t// slice lookups), we'd have a mistaken version.\n\t//\n\t// Error paths through this code will default the version to 1.1.\n\tt.version = ver11\n\tif !disableRecover {\n\t\tdefer func() {\n\t\t\t// If we panic parsing, assume it's a Go 1.1 pclntab.\n\t\t\t_ = recover()\n\t\t}()\n\t}\n\t// Check header: 4-byte magic, two zeros, pc quantum, pointer size.\n\tif len(t.Data) < 16 || t.Data[4] != 0 || t.Data[5] != 0 ||\n\t\t(t.Data[6] != 1 && t.Data[6] != 2 && t.Data[6] != 4) || // pc quantum\n\t\t(t.Data[7] != 4 && t.Data[7] != 8) { // pointer size\n\t\treturn\n\t}\n\tvar possibleVersion version\n\tleMagic := binary.LittleEndian.Uint32(t.Data)\n\tbeMagic := binary.BigEndian.Uint32(t.Data)\n\tswitch {\n\tcase leMagic == go12magic:\n\t\tt.binary, possibleVersion = binary.LittleEndian, ver12\n\tcase beMagic == go12magic:\n\t\tt.binary, possibleVersion = binary.BigEndian, ver12\n\tcase leMagic == go116magic:\n\t\tt.binary, possibleVersion = binary.LittleEndian, ver116\n\tcase beMagic == go116magic:\n\t\tt.binary, possibleVersion = binary.BigEndian, ver116\n\tcase leMagic == go118magic:\n\t\tt.binary, possibleVersion = binary.LittleEndian, ver118\n\tcase beMagic == go118magic:\n\t\tt.binary, possibleVersion = binary.BigEndian, ver118\n\tcase leMagic == go120magic:\n\t\tt.binary, possibleVersion = binary.LittleEndian, ver120\n\tcase beMagic == go120magic:\n\t\tt.binary, possibleVersion = binary.BigEndian, ver120\n\tdefault:\n\t\treturn\n\t}\n\tt.version = possibleVersion\n\t// quantum and ptrSize are the same between 1.2, 1.16, and 1.18\n\tt.quantum = uint32(t.Data[6])\n\tt.ptrsize = uint32(t.Data[7])\n\toffset := func(word uint32) uint64 {\n\t\treturn t.uintptr(t.Data[8+word*t.ptrsize:])\n\t}\n\tdata := func(word uint32) []byte {\n\t\treturn t.Data[offset(word):]\n\t}\n\tswitch possibleVersion {\n\tcase ver118, ver120:\n\t\tt.nfunctab = uint32(offset(0))\n\t\tt.nfiletab = uint32(offset(1))\n\t\tt.textStart = t.PC // use the start PC instead of reading from the table, which may be unrelocated\n\t\tt.funcnametab = data(3)\n\t\tt.cutab = data(4)\n\t\tt.filetab = data(5)\n\t\tt.pctab = data(6)\n\t\tt.funcdata = data(7)\n\t\tt.functab = data(7)\n\t\tfunctabsize := (int(t.nfunctab)*2 + 1) * t.functabFieldSize()\n\t\tt.functab = t.functab[:functabsize]\n\tcase ver116:\n\t\tt.nfunctab = uint32(offset(0))\n\t\tt.nfiletab = uint32(offset(1))\n\t\tt.funcnametab = data(2)\n\t\tt.cutab = data(3)\n\t\tt.filetab = data(4)\n\t\tt.pctab = data(5)\n\t\tt.funcdata = data(6)\n\t\tt.functab = data(6)\n\t\tfunctabsize := (int(t.nfunctab)*2 + 1) * t.functabFieldSize()\n\t\tt.functab = t.functab[:functabsize]\n\tcase ver12:\n\t\tt.nfunctab = uint32(t.uintptr(t.Data[8:]))\n\t\tt.funcdata = t.Data\n\t\tt.funcnametab = t.Data\n\t\tt.functab = t.Data[8+t.ptrsize:]\n\t\tt.pctab = t.Data\n\t\tfunctabsize := (int(t.nfunctab)*2 + 1) * t.functabFieldSize()\n\t\tfileoff := t.binary.Uint32(t.functab[functabsize:])\n\t\tt.functab = t.functab[:functabsize]\n\t\tt.filetab = t.Data[fileoff:]\n\t\tt.nfiletab = t.binary.Uint32(t.filetab)\n\t\tt.filetab = t.filetab[:t.nfiletab*4]\n\tdefault:\n\t\tpanic(\"unreachable\")\n\t}\n}\n\n// go12Funcs returns a slice of Funcs derived from the Go 1.2+ pcln table.\nfunc (t *LineTable) go12Funcs() []Func {\n\t// Assume it is malformed and return nil on error.\n\tif !disableRecover {\n\t\tdefer func() {\n\t\t\t_ = recover()\n\t\t}()\n\t}\n\tft := t.funcTab()\n\tfuncs := make([]Func, ft.Count())\n\tsyms := make([]Sym, len(funcs))\n\tfor i := range funcs {\n\t\tf := &funcs[i]\n\t\tf.Entry = ft.pc(i)\n\t\tf.End = ft.pc(i + 1)\n\t\tinfo := t.funcData(uint32(i))\n\t\tf.LineTable = t\n\t\tf.FrameSize = int(info.deferreturn())\n\t\t// Additions:\n\t\t// numFuncField is the number of (32 bit) fields in _func (src/runtime/runtime2.go)\n\t\t// Note that the last 4 fields are 32 bits combined. This number is 11 for go1.20,\n\t\t// 10 for earlier versions down to go1.16, and 9 before that.\n\t\tvar numFuncFields uint32 = 11\n\t\tif t.version < ver116 {\n\t\t\tnumFuncFields = 9\n\t\t} else if t.version < ver120 {\n\t\t\tnumFuncFields = 10\n\t\t}\n\t\tf.inlineTreeOffset = info.funcdataOffset(funcdata_InlTree, numFuncFields)\n\t\tf.inlineTreeCount = 1 + t.maxInlineTreeIndexValue(info, numFuncFields)\n\t\tsyms[i] = Sym{\n\t\t\tValue:     f.Entry,\n\t\t\tType:      'T',\n\t\t\tName:      t.funcName(info.nameOff()),\n\t\t\tGoType:    0,\n\t\t\tFunc:      f,\n\t\t\tgoVersion: t.version,\n\t\t}\n\t\tf.Sym = &syms[i]\n\t}\n\treturn funcs\n}\n\n// findFunc returns the funcData corresponding to the given program counter.\nfunc (t *LineTable) findFunc(pc uint64) funcData {\n\tft := t.funcTab()\n\tif pc < ft.pc(0) || pc >= ft.pc(ft.Count()) {\n\t\treturn funcData{}\n\t}\n\tidx := sort.Search(int(t.nfunctab), func(i int) bool {\n\t\treturn ft.pc(i) > pc\n\t})\n\tidx--\n\treturn t.funcData(uint32(idx))\n}\n\n// readvarint reads, removes, and returns a varint from *pp.\nfunc (t *LineTable) readvarint(pp *[]byte) uint32 {\n\tvar v, shift uint32\n\tp := *pp\n\tfor shift = 0; ; shift += 7 {\n\t\tb := p[0]\n\t\tp = p[1:]\n\t\tv |= (uint32(b) & 0x7F) << shift\n\t\tif b&0x80 == 0 {\n\t\t\tbreak\n\t\t}\n\t}\n\t*pp = p\n\treturn v\n}\n\n// funcName returns the name of the function found at off.\nfunc (t *LineTable) funcName(off uint32) string {\n\tif s, ok := t.funcNames[off]; ok {\n\t\treturn s\n\t}\n\ti := bytes.IndexByte(t.funcnametab[off:], 0)\n\ts := string(t.funcnametab[off : off+uint32(i)])\n\tt.funcNames[off] = s\n\treturn s\n}\n\n// stringFrom returns a Go string found at off from a position.\nfunc (t *LineTable) stringFrom(arr []byte, off uint32) string {\n\tif s, ok := t.strings[off]; ok {\n\t\treturn s\n\t}\n\ti := bytes.IndexByte(arr[off:], 0)\n\ts := string(arr[off : off+uint32(i)])\n\tt.strings[off] = s\n\treturn s\n}\n\n// string returns a Go string found at off.\nfunc (t *LineTable) string(off uint32) string {\n\treturn t.stringFrom(t.funcdata, off)\n}\n\n// functabFieldSize returns the size in bytes of a single functab field.\nfunc (t *LineTable) functabFieldSize() int {\n\tif t.version >= ver118 {\n\t\treturn 4\n\t}\n\treturn int(t.ptrsize)\n}\n\n// funcTab returns t's funcTab.\nfunc (t *LineTable) funcTab() funcTab {\n\treturn funcTab{LineTable: t, sz: t.functabFieldSize()}\n}\n\n// funcTab is memory corresponding to a slice of functab structs, followed by an invalid PC.\n// A functab struct is a PC and a func offset.\ntype funcTab struct {\n\t*LineTable\n\tsz int // cached result of t.functabFieldSize\n}\n\n// Count returns the number of func entries in f.\nfunc (f funcTab) Count() int {\n\treturn int(f.nfunctab)\n}\n\n// pc returns the PC of the i'th func in f.\nfunc (f funcTab) pc(i int) uint64 {\n\tu := f.uint(f.functab[2*i*f.sz:])\n\tif f.version >= ver118 {\n\t\tu += f.textStart\n\t}\n\treturn u\n}\n\n// funcOff returns the funcdata offset of the i'th func in f.\nfunc (f funcTab) funcOff(i int) uint64 {\n\treturn f.uint(f.functab[(2*i+1)*f.sz:])\n}\n\n// uint returns the uint stored at b.\nfunc (f funcTab) uint(b []byte) uint64 {\n\tif f.sz == 4 {\n\t\treturn uint64(f.binary.Uint32(b))\n\t}\n\treturn f.binary.Uint64(b)\n}\n\n// funcData is memory corresponding to an _func struct.\ntype funcData struct {\n\tt    *LineTable // LineTable this data is a part of\n\tdata []byte     // raw memory for the function\n}\n\n// funcData returns the ith funcData in t.functab.\nfunc (t *LineTable) funcData(i uint32) funcData {\n\tdata := t.funcdata[t.funcTab().funcOff(int(i)):]\n\treturn funcData{t: t, data: data}\n}\n\n// IsZero reports whether f is the zero value.\nfunc (f funcData) IsZero() bool {\n\treturn f.t == nil && f.data == nil\n}\n\n// entryPC returns the func's entry PC.\nfunc (f *funcData) entryPC() uint64 {\n\t// In Go 1.18, the first field of _func changed\n\t// from a uintptr entry PC to a uint32 entry offset.\n\tif f.t.version >= ver118 {\n\t\t// TODO: support multiple text sections.\n\t\t// See runtime/symtab.go:(*moduledata).textAddr.\n\t\treturn uint64(f.t.binary.Uint32(f.data)) + f.t.textStart\n\t}\n\treturn f.t.uintptr(f.data)\n}\nfunc (f funcData) nameOff() uint32     { return f.field(1) }\nfunc (f funcData) deferreturn() uint32 { return f.field(3) }\nfunc (f funcData) pcfile() uint32      { return f.field(5) }\nfunc (f funcData) pcln() uint32        { return f.field(6) }\nfunc (f funcData) cuOffset() uint32    { return f.field(8) }\n\n// field returns the nth field of the _func struct.\n// It panics if n == 0 or n > 9; for n == 0, call f.entryPC.\n// Most callers should use a named field accessor (just above).\nfunc (f funcData) field(n uint32) uint32 {\n\tif n == 0 || n > 9 {\n\t\tpanic(\"bad funcdata field\")\n\t}\n\t// Addition: some code deleted here to support inlining.\n\toff := f.fieldOffset(n)\n\tdata := f.data[off:]\n\treturn f.t.binary.Uint32(data)\n}\n\n// step advances to the next pc, value pair in the encoded table.\nfunc (t *LineTable) step(p *[]byte, pc *uint64, val *int32, first bool) bool {\n\tuvdelta := t.readvarint(p)\n\tif uvdelta == 0 && !first {\n\t\treturn false\n\t}\n\tif uvdelta&1 != 0 {\n\t\tuvdelta = ^(uvdelta >> 1)\n\t} else {\n\t\tuvdelta >>= 1\n\t}\n\tvdelta := int32(uvdelta)\n\tpcdelta := t.readvarint(p) * t.quantum\n\t*pc += uint64(pcdelta)\n\t*val += vdelta\n\treturn true\n}\n\n// pcvalue reports the value associated with the target pc.\n// off is the offset to the beginning of the pc-value table,\n// and entry is the start PC for the corresponding function.\nfunc (t *LineTable) pcvalue(off uint32, entry, targetpc uint64) int32 {\n\tp := t.pctab[off:]\n\tval := int32(-1)\n\tpc := entry\n\tfor t.step(&p, &pc, &val, pc == entry) {\n\t\tif targetpc < pc {\n\t\t\treturn val\n\t\t}\n\t}\n\treturn -1\n}\n\n// findFileLine scans one function in the binary looking for a\n// program counter in the given file on the given line.\n// It does so by running the pc-value tables mapping program counter\n// to file number. Since most functions come from a single file, these\n// are usually short and quick to scan. If a file match is found, then the\n// code goes to the expense of looking for a simultaneous line number match.\nfunc (t *LineTable) findFileLine(entry uint64, filetab, linetab uint32, filenum, line int32, cutab []byte) uint64 {\n\tif filetab == 0 || linetab == 0 {\n\t\treturn 0\n\t}\n\tfp := t.pctab[filetab:]\n\tfl := t.pctab[linetab:]\n\tfileVal := int32(-1)\n\tfilePC := entry\n\tlineVal := int32(-1)\n\tlinePC := entry\n\tfileStartPC := filePC\n\tfor t.step(&fp, &filePC, &fileVal, filePC == entry) {\n\t\tfileIndex := fileVal\n\t\tif t.version == ver116 || t.version == ver118 || t.version == ver120 {\n\t\t\tfileIndex = int32(t.binary.Uint32(cutab[fileVal*4:]))\n\t\t}\n\t\tif fileIndex == filenum && fileStartPC < filePC {\n\t\t\t// fileIndex is in effect starting at fileStartPC up to\n\t\t\t// but not including filePC, and it's the file we want.\n\t\t\t// Run the PC table looking for a matching line number\n\t\t\t// or until we reach filePC.\n\t\t\tlineStartPC := linePC\n\t\t\tfor linePC < filePC && t.step(&fl, &linePC, &lineVal, linePC == entry) {\n\t\t\t\t// lineVal is in effect until linePC, and lineStartPC < filePC.\n\t\t\t\tif lineVal == line {\n\t\t\t\t\tif fileStartPC <= lineStartPC {\n\t\t\t\t\t\treturn lineStartPC\n\t\t\t\t\t}\n\t\t\t\t\tif fileStartPC < linePC {\n\t\t\t\t\t\treturn fileStartPC\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlineStartPC = linePC\n\t\t\t}\n\t\t}\n\t\tfileStartPC = filePC\n\t}\n\treturn 0\n}\n\n// go12PCToLine maps program counter to line number for the Go 1.2+ pcln table.\nfunc (t *LineTable) go12PCToLine(pc uint64) (line int) {\n\tdefer func() {\n\t\tif !disableRecover && recover() != nil {\n\t\t\tline = -1\n\t\t}\n\t}()\n\tf := t.findFunc(pc)\n\tif f.IsZero() {\n\t\treturn -1\n\t}\n\tentry := f.entryPC()\n\tlinetab := f.pcln()\n\treturn int(t.pcvalue(linetab, entry, pc))\n}\n\n// go12PCToFile maps program counter to file name for the Go 1.2+ pcln table.\nfunc (t *LineTable) go12PCToFile(pc uint64) (file string) {\n\tdefer func() {\n\t\tif !disableRecover && recover() != nil {\n\t\t\tfile = \"\"\n\t\t}\n\t}()\n\tf := t.findFunc(pc)\n\tif f.IsZero() {\n\t\treturn \"\"\n\t}\n\tentry := f.entryPC()\n\tfiletab := f.pcfile()\n\tfno := t.pcvalue(filetab, entry, pc)\n\tif t.version == ver12 {\n\t\tif fno <= 0 {\n\t\t\treturn \"\"\n\t\t}\n\t\treturn t.string(t.binary.Uint32(t.filetab[4*fno:]))\n\t}\n\t// Go ≥ 1.16\n\tif fno < 0 { // 0 is valid for ≥ 1.16\n\t\treturn \"\"\n\t}\n\tcuoff := f.cuOffset()\n\tif fnoff := t.binary.Uint32(t.cutab[(cuoff+uint32(fno))*4:]); fnoff != ^uint32(0) {\n\t\treturn t.stringFrom(t.filetab, fnoff)\n\t}\n\treturn \"\"\n}\n\n// go12LineToPC maps a (file, line) pair to a program counter for the Go 1.2+ pcln table.\nfunc (t *LineTable) go12LineToPC(file string, line int) (pc uint64) {\n\tdefer func() {\n\t\tif !disableRecover && recover() != nil {\n\t\t\tpc = 0\n\t\t}\n\t}()\n\tt.initFileMap()\n\tfilenum, ok := t.fileMap[file]\n\tif !ok {\n\t\treturn 0\n\t}\n\t// Scan all functions.\n\t// If this turns out to be a bottleneck, we could build a map[int32][]int32\n\t// mapping file number to a list of functions with code from that file.\n\tvar cutab []byte\n\tfor i := uint32(0); i < t.nfunctab; i++ {\n\t\tf := t.funcData(i)\n\t\tentry := f.entryPC()\n\t\tfiletab := f.pcfile()\n\t\tlinetab := f.pcln()\n\t\tif t.version == ver116 || t.version == ver118 || t.version == ver120 {\n\t\t\tif f.cuOffset() == ^uint32(0) {\n\t\t\t\t// skip functions without compilation unit (not real function, or linker generated)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcutab = t.cutab[f.cuOffset()*4:]\n\t\t}\n\t\tpc := t.findFileLine(entry, filetab, linetab, int32(filenum), int32(line), cutab)\n\t\tif pc != 0 {\n\t\t\treturn pc\n\t\t}\n\t}\n\treturn 0\n}\n\n// initFileMap initializes the map from file name to file number.\nfunc (t *LineTable) initFileMap() {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\tif t.fileMap != nil {\n\t\treturn\n\t}\n\tm := make(map[string]uint32)\n\tif t.version == ver12 {\n\t\tfor i := uint32(1); i < t.nfiletab; i++ {\n\t\t\ts := t.string(t.binary.Uint32(t.filetab[4*i:]))\n\t\t\tm[s] = i\n\t\t}\n\t} else {\n\t\tvar pos uint32\n\t\tfor i := uint32(0); i < t.nfiletab; i++ {\n\t\t\ts := t.stringFrom(t.filetab, pos)\n\t\t\tm[s] = pos\n\t\t\tpos += uint32(len(s) + 1)\n\t\t}\n\t}\n\tt.fileMap = m\n}\n\n// go12MapFiles adds to m a key for every file in the Go 1.2 LineTable.\n// Every key maps to obj. That's not a very interesting map, but it provides\n// a way for callers to obtain the list of files in the program.\nfunc (t *LineTable) go12MapFiles(m map[string]*Obj, obj *Obj) {\n\tif !disableRecover {\n\t\tdefer func() {\n\t\t\t_ = recover()\n\t\t}()\n\t}\n\tt.initFileMap()\n\tfor file := range t.fileMap {\n\t\tm[file] = obj\n\t}\n}\n\n// disableRecover causes this package not to swallow panics.\n// This is useful when making changes.\nconst disableRecover = true\n"
  },
  {
    "path": "pkg/internal/gosym/symtab.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n// Package gosym implements access to the Go symbol\n// and line number tables embedded in Go binaries generated\n// by the gc compilers.\npackage gosym\n\nimport (\n\t\"bytes\"\n\t\"debug/elf\"\n\t\"debug/macho\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// Sym represents a single symbol table entry.\ntype Sym struct {\n\tValue  uint64\n\tType   byte\n\tName   string\n\tGoType uint64\n\t// If this symbol is a function symbol, the corresponding Func\n\tFunc      *Func\n\tgoVersion version\n}\n\n// Static reports whether this symbol is static (not visible outside its file).\nfunc (s *Sym) Static() bool { return s.Type >= 'a' }\n\n// nameWithoutInst returns s.Name if s.Name has no brackets (does not reference an\n// instantiated type, function, or method). If s.Name contains brackets, then it\n// returns s.Name with all the contents between (and including) the outermost left\n// and right bracket removed. This is useful to ignore any extra slashes or dots\n// inside the brackets from the string searches below, where needed.\nfunc (s *Sym) nameWithoutInst() string {\n\tstart := strings.Index(s.Name, \"[\")\n\tif start < 0 {\n\t\treturn s.Name\n\t}\n\tend := strings.LastIndex(s.Name, \"]\")\n\tif end < 0 {\n\t\t// Malformed name, should contain closing bracket too.\n\t\treturn s.Name\n\t}\n\treturn s.Name[0:start] + s.Name[end+1:]\n}\n\n// PackageName returns the package part of the symbol name,\n// or the empty string if there is none.\nfunc (s *Sym) PackageName() string {\n\tname := s.nameWithoutInst()\n\t// Since go1.20, a prefix of \"type:\" and \"go:\" is a compiler-generated symbol,\n\t// they do not belong to any package.\n\t//\n\t// See cmd/compile/internal/base/link.go:ReservedImports variable.\n\tif s.goVersion >= ver120 && (strings.HasPrefix(name, \"go:\") || strings.HasPrefix(name, \"type:\")) {\n\t\treturn \"\"\n\t}\n\t// For go1.18 and below, the prefix are \"type.\" and \"go.\" instead.\n\tif s.goVersion <= ver118 && (strings.HasPrefix(name, \"go.\") || strings.HasPrefix(name, \"type.\")) {\n\t\treturn \"\"\n\t}\n\tpathend := max(strings.LastIndex(name, \"/\"), 0)\n\tif i := strings.Index(name[pathend:], \".\"); i != -1 {\n\t\treturn name[:pathend+i]\n\t}\n\treturn \"\"\n}\n\n// ReceiverName returns the receiver type name of this symbol,\n// or the empty string if there is none.  A receiver name is only detected in\n// the case that s.Name is fully-specified with a package name.\nfunc (s *Sym) ReceiverName() string {\n\tname := s.nameWithoutInst()\n\t// If we find a slash in name, it should precede any bracketed expression\n\t// that was removed, so pathend will apply correctly to name and s.Name.\n\tpathend := max(strings.LastIndex(name, \"/\"), 0)\n\t// Find the first dot after pathend (or from the beginning, if there was\n\t// no slash in name).\n\tl := strings.Index(name[pathend:], \".\")\n\t// Find the last dot after pathend (or the beginning).\n\tr := strings.LastIndex(name[pathend:], \".\")\n\tif l == -1 || r == -1 || l == r {\n\t\t// There is no receiver if we didn't find two distinct dots after pathend.\n\t\treturn \"\"\n\t}\n\t// Given there is a trailing '.' that is in name, find it now in s.Name.\n\t// pathend+l should apply to s.Name, because it should be the dot in the\n\t// package name.\n\tr = strings.LastIndex(s.Name[pathend:], \".\")\n\treturn s.Name[pathend+l+1 : pathend+r]\n}\n\n// BaseName returns the symbol name without the package or receiver name.\nfunc (s *Sym) BaseName() string {\n\tname := s.nameWithoutInst()\n\tif i := strings.LastIndex(name, \".\"); i != -1 {\n\t\tif s.Name != name {\n\t\t\tbrack := strings.Index(s.Name, \"[\")\n\t\t\tif i > brack {\n\t\t\t\t// BaseName is a method name after the brackets, so\n\t\t\t\t// recalculate for s.Name. Otherwise, i applies\n\t\t\t\t// correctly to s.Name, since it is before the\n\t\t\t\t// brackets.\n\t\t\t\ti = strings.LastIndex(s.Name, \".\")\n\t\t\t}\n\t\t}\n\t\treturn s.Name[i+1:]\n\t}\n\treturn s.Name\n}\n\n// A Func collects information about a single function.\ntype Func struct {\n\tEntry uint64\n\t*Sym\n\tEnd       uint64\n\tParams    []*Sym // nil for Go 1.3 and later binaries\n\tLocals    []*Sym // nil for Go 1.3 and later binaries\n\tFrameSize int\n\tLineTable *LineTable\n\tObj       *Obj\n\t// Addition: extra data to support inlining.\n\tinlTree\n}\n\nfunc (T *Table) GetInlineTree(f *Func, goFuncVal, baseaddr uint64, progReader io.ReaderAt) ([]InlinedCall, error) {\n\t//func (T *Table) GetInlineTree(f* Func, s *elf.Symbol, baseaddr uint64, progReader io.ReaderAt) ([]InlinedCall, error) {\n\t//strver := fmt.Sprint(s.goVersion)\n\t//goFuncValue := FuncSymName(strver)\n\t//return T.go12line.InlineTree(f,goFuncValue,baseaddr,progReader)\n\treturn T.go12line.InlineTree(f, goFuncVal, baseaddr, progReader)\n}\nfunc ProgContaining(elfFile *elf.File, addr uint64) *elf.Prog {\n\tfor _, p := range elfFile.Progs {\n\t\tif addr >= p.Vaddr && addr < p.Vaddr+p.Filesz {\n\t\t\treturn p\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc SegmentContaining(exe *macho.File, addr uint64) *macho.Segment {\n\tfor _, l := range exe.Loads {\n\t\tif s, ok := l.(*macho.Segment); ok && s.Addr <= addr && addr < s.Addr+s.Filesz {\n\t\t\treturn s\n\t\t}\n\t}\n\treturn nil\n}\n\n// An Obj represents a collection of functions in a symbol table.\n//\n// The exact method of division of a binary into separate Objs is an internal detail\n// of the symbol table format.\n//\n// In early versions of Go each source file became a different Obj.\n//\n// In Go 1 and Go 1.1, each package produced one Obj for all Go sources\n// and one Obj per C source file.\n//\n// In Go 1.2, there is a single Obj for the entire program.\ntype Obj struct {\n\t// Funcs is a list of functions in the Obj.\n\tFuncs []Func\n\t// In Go 1.1 and earlier, Paths is a list of symbols corresponding\n\t// to the source file names that produced the Obj.\n\t// In Go 1.2, Paths is nil.\n\t// Use the keys of Table.Files to obtain a list of source files.\n\tPaths []Sym // meta\n}\n\n// Table represents a Go symbol table. It stores all of the\n// symbols decoded from the program and provides methods to translate\n// between symbols, names, and addresses.\ntype Table struct {\n\tSyms     []Sym // nil for Go 1.3 and later binaries\n\tFuncs    []Func\n\tFiles    map[string]*Obj // for Go 1.2 and later all files map to one Obj\n\tObjs     []Obj           // for Go 1.2 and later only one Obj in slice\n\tgo12line *LineTable      // Go 1.2 line number table\n}\ntype sym struct {\n\tvalue  uint64\n\tgotype uint64\n\ttyp    byte\n\tname   []byte\n}\n\nvar (\n\tlittleEndianSymtab    = []byte{0xFD, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00}\n\tbigEndianSymtab       = []byte{0xFF, 0xFF, 0xFF, 0xFD, 0x00, 0x00, 0x00}\n\toldLittleEndianSymtab = []byte{0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0x00}\n)\n\nfunc walksymtab(data []byte, fn func(sym) error) error {\n\tif len(data) == 0 { // missing symtab is okay\n\t\treturn nil\n\t}\n\tvar order binary.ByteOrder = binary.BigEndian\n\tnewTable := false\n\tswitch {\n\tcase bytes.HasPrefix(data, oldLittleEndianSymtab):\n\t\t// Same as Go 1.0, but little endian.\n\t\t// Format was used during interim development between Go 1.0 and Go 1.1.\n\t\t// Should not be widespread, but easy to support.\n\t\tdata = data[6:]\n\t\torder = binary.LittleEndian\n\tcase bytes.HasPrefix(data, bigEndianSymtab):\n\t\tnewTable = true\n\tcase bytes.HasPrefix(data, littleEndianSymtab):\n\t\tnewTable = true\n\t\torder = binary.LittleEndian\n\t}\n\tvar ptrsz int\n\tif newTable {\n\t\tif len(data) < 8 {\n\t\t\t//return &DecodingError{len(data), \"unexpected EOF\", nil}\n\t\t\treturn &DecodingError{len(data), \"unexpected EOF\", 0}\n\t\t}\n\t\tptrsz = int(data[7])\n\t\tif ptrsz != 4 && ptrsz != 8 {\n\t\t\treturn &DecodingError{7, \"invalid pointer size\", ptrsz}\n\t\t}\n\t\tdata = data[8:]\n\t}\n\tvar s sym\n\tp := data\n\tfor len(p) >= 4 {\n\t\tvar typ byte\n\t\tif newTable {\n\t\t\t// Symbol type, value, Go type.\n\t\t\ttyp = p[0] & 0x3F\n\t\t\twideValue := p[0]&0x40 != 0\n\t\t\tgoType := p[0]&0x80 != 0\n\t\t\tif typ < 26 {\n\t\t\t\ttyp += 'A'\n\t\t\t} else {\n\t\t\t\ttyp += 'a' - 26\n\t\t\t}\n\t\t\ts.typ = typ\n\t\t\tp = p[1:]\n\t\t\tif wideValue {\n\t\t\t\tif len(p) < ptrsz {\n\t\t\t\t\t//return &DecodingError{len(data), \"unexpected EOF\", nil}\n\t\t\t\t\treturn &DecodingError{len(data), \"unexpected EOF\", 0}\n\t\t\t\t}\n\t\t\t\t// fixed-width value\n\t\t\t\tif ptrsz == 8 {\n\t\t\t\t\ts.value = order.Uint64(p[0:8])\n\t\t\t\t\tp = p[8:]\n\t\t\t\t} else {\n\t\t\t\t\ts.value = uint64(order.Uint32(p[0:4]))\n\t\t\t\t\tp = p[4:]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// varint value\n\t\t\t\ts.value = 0\n\t\t\t\tshift := uint(0)\n\t\t\t\tfor len(p) > 0 && p[0]&0x80 != 0 {\n\t\t\t\t\ts.value |= uint64(p[0]&0x7F) << shift\n\t\t\t\t\tshift += 7\n\t\t\t\t\tp = p[1:]\n\t\t\t\t}\n\t\t\t\tif len(p) == 0 {\n\t\t\t\t\t//return &DecodingError{len(data), \"unexpected EOF\", nil}\n\t\t\t\t\treturn &DecodingError{len(data), \"unexpected EOF\", 0}\n\t\t\t\t}\n\t\t\t\ts.value |= uint64(p[0]) << shift\n\t\t\t\tp = p[1:]\n\t\t\t}\n\t\t\tif goType {\n\t\t\t\tif len(p) < ptrsz {\n\t\t\t\t\t//return &DecodingError{len(data), \"unexpected EOF\", nil}\n\t\t\t\t\treturn &DecodingError{len(data), \"unexpected EOF\", 0}\n\t\t\t\t}\n\t\t\t\t// fixed-width go type\n\t\t\t\tif ptrsz == 8 {\n\t\t\t\t\ts.gotype = order.Uint64(p[0:8])\n\t\t\t\t\tp = p[8:]\n\t\t\t\t} else {\n\t\t\t\t\ts.gotype = uint64(order.Uint32(p[0:4]))\n\t\t\t\t\tp = p[4:]\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// Value, symbol type.\n\t\t\ts.value = uint64(order.Uint32(p[0:4]))\n\t\t\tif len(p) < 5 {\n\t\t\t\t//return &DecodingError{len(data), \"unexpected EOF\", nil}\n\t\t\t\treturn &DecodingError{len(data), \"unexpected EOF\", 0}\n\t\t\t}\n\t\t\ttyp = p[4]\n\t\t\tif typ&0x80 == 0 {\n\t\t\t\treturn &DecodingError{len(data) - len(p) + 4, \"bad symbol type\", int(typ)}\n\t\t\t}\n\t\t\ttyp &^= 0x80\n\t\t\ts.typ = typ\n\t\t\tp = p[5:]\n\t\t}\n\t\t// Name.\n\t\tvar i int\n\t\tvar nnul int\n\t\tfor i = 0; i < len(p); i++ {\n\t\t\tif p[i] == 0 {\n\t\t\t\tnnul = 1\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tswitch typ {\n\t\tcase 'z', 'Z':\n\t\t\tp = p[i+nnul:]\n\t\t\tfor i = 0; i+2 <= len(p); i += 2 {\n\t\t\t\tif p[i] == 0 && p[i+1] == 0 {\n\t\t\t\t\tnnul = 2\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif len(p) < i+nnul {\n\t\t\t//return &DecodingError{len(data), \"unexpected EOF\", nil}\n\t\t\treturn &DecodingError{len(data), \"unexpected EOF\", 0}\n\t\t}\n\t\ts.name = p[0:i]\n\t\ti += nnul\n\t\tp = p[i:]\n\t\tif !newTable {\n\t\t\tif len(p) < 4 {\n\t\t\t\t//return &DecodingError{len(data), \"unexpected EOF\", nil}\n\t\t\t\treturn &DecodingError{len(data), \"unexpected EOF\", 0}\n\t\t\t}\n\t\t\t// Go type.\n\t\t\ts.gotype = uint64(order.Uint32(p[:4]))\n\t\t\tp = p[4:]\n\t\t}\n\t\t_ = fn(s)\n\t}\n\treturn nil\n}\n\n// NewTable decodes the Go symbol table (the \".gosymtab\" section in ELF),\n// returning an in-memory representation.\n// Starting with Go 1.3, the Go symbol table no longer includes symbol data.\nfunc NewTable(symtab []byte, pcln *LineTable) (*Table, error) {\n\tvar n int\n\terr := walksymtab(symtab, func(s sym) error {\n\t\tn++\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar t Table\n\tif pcln.isGo12() {\n\t\tt.go12line = pcln\n\t}\n\tfname := make(map[uint16]string)\n\tt.Syms = make([]Sym, 0, n)\n\tnf := 0\n\tnz := 0\n\tlasttyp := uint8(0)\n\terr = walksymtab(symtab, func(s sym) error {\n\t\tn := len(t.Syms)\n\t\tt.Syms = t.Syms[0 : n+1]\n\t\tts := &t.Syms[n]\n\t\tts.Type = s.typ\n\t\tts.Value = s.value\n\t\tts.GoType = s.gotype\n\t\tts.goVersion = pcln.version\n\t\tswitch s.typ {\n\t\tdefault:\n\t\t\t// rewrite name to use . instead of · (c2 b7)\n\t\t\tw := 0\n\t\t\tb := s.name\n\t\t\tfor i := 0; i < len(b); i++ {\n\t\t\t\tif b[i] == 0xc2 && i+1 < len(b) && b[i+1] == 0xb7 {\n\t\t\t\t\ti++\n\t\t\t\t\tb[i] = '.'\n\t\t\t\t}\n\t\t\t\tb[w] = b[i]\n\t\t\t\tw++\n\t\t\t}\n\t\t\tts.Name = string(s.name[0:w])\n\t\tcase 'z', 'Z':\n\t\t\tif lasttyp != 'z' && lasttyp != 'Z' {\n\t\t\t\tnz++\n\t\t\t}\n\t\t\tfor i := 0; i < len(s.name); i += 2 {\n\t\t\t\teltIdx := binary.BigEndian.Uint16(s.name[i : i+2])\n\t\t\t\telt, ok := fname[eltIdx]\n\t\t\t\tif !ok {\n\t\t\t\t\treturn &DecodingError{-1, \"bad filename code\", int(eltIdx)}\n\t\t\t\t}\n\t\t\t\tif n := len(ts.Name); n > 0 && ts.Name[n-1] != '/' {\n\t\t\t\t\tts.Name += \"/\"\n\t\t\t\t}\n\t\t\t\tts.Name += elt\n\t\t\t}\n\t\t}\n\t\tswitch s.typ {\n\t\tcase 'T', 't', 'L', 'l':\n\t\t\tnf++\n\t\tcase 'f':\n\t\t\tfname[uint16(s.value)] = ts.Name\n\t\t}\n\t\tlasttyp = s.typ\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tt.Funcs = make([]Func, 0, nf)\n\tt.Files = make(map[string]*Obj)\n\tvar obj *Obj\n\tif t.go12line != nil {\n\t\t// Put all functions into one Obj.\n\t\tt.Objs = make([]Obj, 1)\n\t\tobj = &t.Objs[0]\n\t\tt.go12line.go12MapFiles(t.Files, obj)\n\t} else {\n\t\tt.Objs = make([]Obj, 0, nz)\n\t}\n\t// Count text symbols and attach frame sizes, parameters, and\n\t// locals to them. Also, find object file boundaries.\n\tlastf := 0\n\tfor i := 0; i < len(t.Syms); i++ {\n\t\tsym := &t.Syms[i]\n\t\tswitch sym.Type {\n\t\tcase 'Z', 'z': // path symbol\n\t\t\tif t.go12line != nil {\n\t\t\t\t// Go 1.2 binaries have the file information elsewhere. Ignore.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\t// Finish the current object\n\t\t\tif obj != nil {\n\t\t\t\tobj.Funcs = t.Funcs[lastf:]\n\t\t\t}\n\t\t\tlastf = len(t.Funcs)\n\t\t\t// Start new object\n\t\t\tn := len(t.Objs)\n\t\t\tt.Objs = t.Objs[0 : n+1]\n\t\t\tobj = &t.Objs[n]\n\t\t\t// Count & copy path symbols\n\t\t\tvar end int\n\t\t\tfor end = i + 1; end < len(t.Syms); end++ {\n\t\t\t\tif c := t.Syms[end].Type; c != 'Z' && c != 'z' {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tobj.Paths = t.Syms[i:end]\n\t\t\ti = end - 1 // loop will i++\n\t\t\t// Record file names\n\t\t\tdepth := 0\n\t\t\tfor j := range obj.Paths {\n\t\t\t\ts := &obj.Paths[j]\n\t\t\t\tif s.Name == \"\" {\n\t\t\t\t\tdepth--\n\t\t\t\t} else {\n\t\t\t\t\tif depth == 0 {\n\t\t\t\t\t\tt.Files[s.Name] = obj\n\t\t\t\t\t}\n\t\t\t\t\tdepth++\n\t\t\t\t}\n\t\t\t}\n\t\tcase 'T', 't', 'L', 'l': // text symbol\n\t\t\tif n := len(t.Funcs); n > 0 {\n\t\t\t\tt.Funcs[n-1].End = sym.Value\n\t\t\t}\n\t\t\tif sym.Name == \"runtime.etext\" || sym.Name == \"etext\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Count parameter and local (auto) syms\n\t\t\tvar np, na int\n\t\t\tvar end int\n\t\tcountloop:\n\t\t\tfor end = i + 1; end < len(t.Syms); end++ {\n\t\t\t\tswitch t.Syms[end].Type {\n\t\t\t\tcase 'T', 't', 'L', 'l', 'Z', 'z':\n\t\t\t\t\tbreak countloop\n\t\t\t\tcase 'p':\n\t\t\t\t\tnp++\n\t\t\t\tcase 'a':\n\t\t\t\t\tna++\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Fill in the function symbol\n\t\t\tn := len(t.Funcs)\n\t\t\tt.Funcs = t.Funcs[0 : n+1]\n\t\t\tfn := &t.Funcs[n]\n\t\t\tsym.Func = fn\n\t\t\tfn.Params = make([]*Sym, 0, np)\n\t\t\tfn.Locals = make([]*Sym, 0, na)\n\t\t\tfn.Sym = sym\n\t\t\tfn.Entry = sym.Value\n\t\t\tfn.Obj = obj\n\t\t\tif t.go12line != nil {\n\t\t\t\t// All functions share the same line table.\n\t\t\t\t// It knows how to narrow down to a specific\n\t\t\t\t// function quickly.\n\t\t\t\tfn.LineTable = t.go12line\n\t\t\t} else if pcln != nil {\n\t\t\t\tfn.LineTable = pcln.slice(fn.Entry)\n\t\t\t\tpcln = fn.LineTable\n\t\t\t}\n\t\t\tfor j := i; j < end; j++ {\n\t\t\t\ts := &t.Syms[j]\n\t\t\t\tswitch s.Type {\n\t\t\t\tcase 'm':\n\t\t\t\t\tfn.FrameSize = int(s.Value)\n\t\t\t\tcase 'p':\n\t\t\t\t\tn := len(fn.Params)\n\t\t\t\t\tfn.Params = fn.Params[0 : n+1]\n\t\t\t\t\tfn.Params[n] = s\n\t\t\t\tcase 'a':\n\t\t\t\t\tn := len(fn.Locals)\n\t\t\t\t\tfn.Locals = fn.Locals[0 : n+1]\n\t\t\t\t\tfn.Locals[n] = s\n\t\t\t\t}\n\t\t\t}\n\t\t\ti = end - 1 // loop will i++\n\t\t}\n\t}\n\tif t.go12line != nil && nf == 0 {\n\t\tt.Funcs = t.go12line.go12Funcs()\n\t}\n\tif obj != nil {\n\t\tobj.Funcs = t.Funcs[lastf:]\n\t}\n\treturn &t, nil\n}\n\n// PCToFunc returns the function containing the program counter pc,\n// or nil if there is no such function.\nfunc (t *Table) PCToFunc(pc uint64) *Func {\n\tfuncs := t.Funcs\n\tfor len(funcs) > 0 {\n\t\tm := len(funcs) / 2\n\t\tfn := &funcs[m]\n\t\tswitch {\n\t\tcase pc < fn.Entry:\n\t\t\tfuncs = funcs[0:m]\n\t\tcase fn.Entry <= pc && pc < fn.End:\n\t\t\treturn fn\n\t\tdefault:\n\t\t\tfuncs = funcs[m+1:]\n\t\t}\n\t}\n\treturn nil\n}\n\n// PCToLine looks up line number information for a program counter.\n// If there is no information, it returns fn == nil.\nfunc (t *Table) PCToLine(pc uint64) (file string, line int, fn *Func) {\n\tif fn = t.PCToFunc(pc); fn == nil {\n\t\treturn\n\t}\n\tif t.go12line != nil {\n\t\tfile = t.go12line.go12PCToFile(pc)\n\t\tline = t.go12line.go12PCToLine(pc)\n\t} else {\n\t\tfile, line = fn.Obj.lineFromAline(fn.LineTable.PCToLine(pc))\n\t}\n\treturn\n}\n\n// LineToPC looks up the first program counter on the given line in\n// the named file. It returns UnknownPathError or UnknownLineError if\n// there is an error looking up this line.\nfunc (t *Table) LineToPC(file string, line int) (pc uint64, fn *Func, err error) {\n\tobj, ok := t.Files[file]\n\tif !ok {\n\t\treturn 0, nil, UnknownFileError(file)\n\t}\n\tif t.go12line != nil {\n\t\tpc := t.go12line.go12LineToPC(file, line)\n\t\tif pc == 0 {\n\t\t\treturn 0, nil, &UnknownLineError{file, line}\n\t\t}\n\t\treturn pc, t.PCToFunc(pc), nil\n\t}\n\tabs, err := obj.alineFromLine(file, line)\n\tif err != nil {\n\t\treturn\n\t}\n\tfor i := range obj.Funcs {\n\t\tf := &obj.Funcs[i]\n\t\tpc := f.LineTable.LineToPC(abs, f.End)\n\t\tif pc != 0 {\n\t\t\treturn pc, f, nil\n\t\t}\n\t}\n\treturn 0, nil, &UnknownLineError{file, line}\n}\n\n// LookupSym returns the text, data, or bss symbol with the given name,\n// or nil if no such symbol is found.\nfunc (t *Table) LookupSym(name string) *Sym {\n\t// TODO(austin) Maybe make a map\n\tfor i := range t.Syms {\n\t\ts := &t.Syms[i]\n\t\tswitch s.Type {\n\t\tcase 'T', 't', 'L', 'l', 'D', 'd', 'B', 'b':\n\t\t\tif s.Name == name {\n\t\t\t\treturn s\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// LookupFunc returns the text, data, or bss symbol with the given name,\n// or nil if no such symbol is found.\nfunc (t *Table) LookupFunc(name string) *Func {\n\tfor i := range t.Funcs {\n\t\tf := &t.Funcs[i]\n\t\tif f.Sym.Name == name {\n\t\t\treturn f\n\t\t}\n\t}\n\treturn nil\n}\n\n// SymByAddr returns the text, data, or bss symbol starting at the given address.\nfunc (t *Table) SymByAddr(addr uint64) *Sym {\n\tfor i := range t.Syms {\n\t\ts := &t.Syms[i]\n\t\tswitch s.Type {\n\t\tcase 'T', 't', 'L', 'l', 'D', 'd', 'B', 'b':\n\t\t\tif s.Value == addr {\n\t\t\t\treturn s\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n/*\n * Object files\n */\n// This is legacy code for Go 1.1 and earlier, which used the\n// Plan 9 format for pc-line tables. This code was never quite\n// correct. It's probably very close, and it's usually correct, but\n// we never quite found all the corner cases.\n//\n// Go 1.2 and later use a simpler format, documented at golang.org/s/go12symtab.\nfunc (o *Obj) lineFromAline(aline int) (string, int) {\n\ttype stackEnt struct {\n\t\tpath   string\n\t\tstart  int\n\t\toffset int\n\t\tprev   *stackEnt\n\t}\n\tnoPath := &stackEnt{\"\", 0, 0, nil}\n\ttos := noPath\npathloop:\n\tfor _, s := range o.Paths {\n\t\tval := int(s.Value)\n\t\tswitch {\n\t\tcase val > aline:\n\t\t\tbreak pathloop\n\t\tcase val == 1:\n\t\t\t// Start a new stack\n\t\t\ttos = &stackEnt{s.Name, val, 0, noPath}\n\t\tcase s.Name == \"\":\n\t\t\t// Pop\n\t\t\tif tos == noPath {\n\t\t\t\treturn \"<malformed symbol table>\", 0\n\t\t\t}\n\t\t\ttos.prev.offset += val - tos.start\n\t\t\ttos = tos.prev\n\t\tdefault:\n\t\t\t// Push\n\t\t\ttos = &stackEnt{s.Name, val, 0, tos}\n\t\t}\n\t}\n\tif tos == noPath {\n\t\treturn \"\", 0\n\t}\n\treturn tos.path, aline - tos.start - tos.offset + 1\n}\nfunc (o *Obj) alineFromLine(path string, line int) (int, error) {\n\tif line < 1 {\n\t\treturn 0, &UnknownLineError{path, line}\n\t}\n\tfor i, s := range o.Paths {\n\t\t// Find this path\n\t\tif s.Name != path {\n\t\t\tcontinue\n\t\t}\n\t\t// Find this line at this stack level\n\t\tdepth := 0\n\t\tvar incstart int\n\t\tline += int(s.Value)\n\tpathloop:\n\t\tfor _, s := range o.Paths[i:] {\n\t\t\tval := int(s.Value)\n\t\t\tswitch {\n\t\t\tcase depth == 1 && val >= line:\n\t\t\t\treturn line - 1, nil\n\t\t\tcase s.Name == \"\":\n\t\t\t\tdepth--\n\t\t\t\tif depth == 0 {\n\t\t\t\t\tbreak pathloop\n\t\t\t\t} else if depth == 1 {\n\t\t\t\t\tline += val - incstart\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tif depth == 1 {\n\t\t\t\t\tincstart = val\n\t\t\t\t}\n\t\t\t\tdepth++\n\t\t\t}\n\t\t}\n\t\treturn 0, &UnknownLineError{path, line}\n\t}\n\treturn 0, UnknownFileError(path)\n}\n\n// UnknownFileError represents a failure to find the specific file in\n// the symbol table.\ntype UnknownFileError string\n\nfunc (e UnknownFileError) Error() string { return \"unknown file: \" + string(e) }\n\n// UnknownLineError represents a failure to map a line to a program\n// counter, either because the line is beyond the bounds of the file\n// or because there is no code on the given line.\ntype UnknownLineError struct {\n\tFile string\n\tLine int\n}\n\nfunc (e *UnknownLineError) Error() string {\n\treturn \"no code at \" + e.File + \":\" + strconv.Itoa(e.Line)\n}\n\n// DecodingError represents an error during the decoding of\n// the symbol table.\ntype DecodingError struct {\n\toff int\n\tmsg string\n\tval int\n}\n\nfunc (e *DecodingError) Error() string {\n\tmsg := e.msg\n\t//if e.val != nil {\n\tif e.val != 0 {\n\t\tmsg += fmt.Sprintf(\" '%v'\", e.val)\n\t}\n\tmsg += fmt.Sprintf(\" at byte %#x\", e.off)\n\treturn msg\n}\n"
  },
  {
    "path": "pkg/internal/lru/lru.go",
    "content": "package lru\n\nimport (\n\t\"container/list\"\n)\n\n// Cache is a simple LRU (Least Recently Used) cache implementation.\ntype Cache[K comparable, V any] struct {\n\tcapacity  int\n\titems     map[K]*list.Element\n\tevictList *list.List\n}\n\ntype entry[K comparable, V any] struct {\n\tkey   K\n\tvalue V\n}\n\n// NewCache creates a new LRU cache with the given capacity.\nfunc NewCache[K comparable, V any](capacity int) *Cache[K, V] {\n\treturn &Cache[K, V]{\n\t\tcapacity:  capacity,\n\t\titems:     make(map[K]*list.Element),\n\t\tevictList: list.New(),\n\t}\n}\n\n// Add adds a value to the cache. If the key already exists, it updates\n// the value and moves it to the front. If the cache is at capacity,\n// it evicts the least recently used item.\nfunc (c *Cache[K, V]) Add(key K, value V) {\n\t// Check if the key already exists.\n\tif elem, ok := c.items[key]; ok {\n\t\tc.evictList.MoveToFront(elem)\n\t\telem.Value.(*entry[K, V]).value = value\n\t\treturn\n\t}\n\n\t// Add new item.\n\tc.items[key] = c.evictList.PushFront(&entry[K, V]{key: key, value: value})\n\n\t// Evict oldest if we exceeded capacity.\n\tif c.evictList.Len() > c.capacity {\n\t\tif elem := c.evictList.Back(); elem != nil {\n\t\t\tc.evictList.Remove(elem)\n\t\t\tent := elem.Value.(*entry[K, V])\n\t\t\tdelete(c.items, ent.key)\n\t\t}\n\t}\n}\n\n// Get retrieves a value from the cache. If found, it moves the item\n// to the front (marking it as recently used) and returns (value, true).\n// If not found, returns (zero value, false).\nfunc (c *Cache[K, V]) Get(key K) (V, bool) {\n\tif elem, ok := c.items[key]; ok {\n\t\tc.evictList.MoveToFront(elem)\n\t\treturn elem.Value.(*entry[K, V]).value, true\n\t}\n\n\tvar zero V\n\treturn zero, false\n}\n"
  },
  {
    "path": "pkg/internal/lru/lru_test.go",
    "content": "package lru_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/internal/lru\"\n)\n\nfunc TestCache_ZeroCapacity(t *testing.T) {\n\tcache := lru.NewCache[int, string](0)\n\tcache.Add(1, \"one\")\n\n\t// With zero capacity, nothing should be stored\n\tif val, ok := cache.Get(1); ok {\n\t\tt.Errorf(\"Get(1) = %v, %v; want '', false (zero capacity)\", val, ok)\n\t}\n}\n\nfunc TestCacheNoEviction(t *testing.T) {\n\tcache := lru.NewCache[int, string](2)\n\n\t// Test adding items\n\tcache.Add(1, \"one\")\n\tcache.Add(2, \"two\")\n\n\t// Test getting existing items\n\tif val, ok := cache.Get(1); !ok || val != \"one\" {\n\t\tt.Errorf(\"Get(1) = %v, %v; want 'one', true\", val, ok)\n\t}\n\tif val, ok := cache.Get(2); !ok || val != \"two\" {\n\t\tt.Errorf(\"Get(2) = %v, %v; want 'two', true\", val, ok)\n\t}\n\n\t// Test getting non-existent item\n\tif val, ok := cache.Get(3); ok {\n\t\tt.Errorf(\"Get(3) = %v, %v; want '', false\", val, ok)\n\t}\n}\n\nfunc TestCacheEviction(t *testing.T) {\n\tcache := lru.NewCache[int, string](2)\n\n\t// Add items up to capacity\n\tcache.Add(1, \"one\")\n\tcache.Add(2, \"two\")\n\n\t// Add third item, should evict the least recently used (1)\n\tcache.Add(3, \"three\")\n\n\t// Item 1 should be evicted\n\tif val, ok := cache.Get(1); ok {\n\t\tt.Errorf(\"Get(1) = %v, %v; want '', false (should be evicted)\", val, ok)\n\t}\n\n\t// Items 2 and 3 should still exist\n\tif val, ok := cache.Get(2); !ok || val != \"two\" {\n\t\tt.Errorf(\"Get(2) = %v, %v; want 'two', true\", val, ok)\n\t}\n\tif val, ok := cache.Get(3); !ok || val != \"three\" {\n\t\tt.Errorf(\"Get(3) = %v, %v; want 'three', true\", val, ok)\n\t}\n}\n\nfunc TestCacheUpdate(t *testing.T) {\n\tcache := lru.NewCache[int, string](2)\n\n\tcache.Add(1, \"one\")\n\tcache.Add(1, \"ONE\") // Update existing key\n\n\tif val, ok := cache.Get(1); !ok || val != \"ONE\" {\n\t\tt.Errorf(\"Get(1) = %v, %v; want 'ONE', true\", val, ok)\n\t}\n}\n\nfunc TestCacheOrder(t *testing.T) {\n\tcache := lru.NewCache[int, string](2)\n\n\t// Add two items\n\tcache.Add(1, \"one\")\n\tcache.Add(2, \"two\")\n\n\t// Access item 1, making it more recently used\n\tcache.Get(1)\n\n\t// Add third item, should evict item 2 (least recently used)\n\tcache.Add(3, \"three\")\n\n\t// Item 2 should be evicted\n\tif val, ok := cache.Get(2); ok {\n\t\tt.Errorf(\"Get(2) = %v, %v; want '', false (should be evicted)\", val, ok)\n\t}\n\n\t// Items 1 and 3 should still exist\n\tif val, ok := cache.Get(1); !ok || val != \"one\" {\n\t\tt.Errorf(\"Get(1) = %v, %v; want 'one', true\", val, ok)\n\t}\n\tif val, ok := cache.Get(3); !ok || val != \"three\" {\n\t\tt.Errorf(\"Get(3) = %v, %v; want 'three', true\", val, ok)\n\t}\n}\n"
  },
  {
    "path": "pkg/locspec/doc.go",
    "content": "// Package locspec implements code to parse a string into a specific\n// location specification.\n//\n// Location spec examples:\n//\n//\tlocStr ::= <filename>:<line> | <function>[:<line>] | /<regex>/ | (+|-)<offset> | <line> | *<address>\n//\n//\t* <filename> can be the full path of a file or just a suffix\n//\t* <function> ::= <package>.<receiver type>.<name> | <package>.(*<receiver type>).<name> | <receiver type>.<name> | <package>.<name> | (*<receiver type>).<name> | <name>\n//\t  <function> must be unambiguous\n//\t* /<regex>/ will return a location for each function matched by regex\n//\t* +<offset> returns a location for the line that is <offset> lines after the current line\n//\t* -<offset> returns a location for the line that is <offset> lines before the current line\n//\t* <line> returns a location for a line in the current file\n//\t* *<address> returns the location corresponding to the specified address\npackage locspec\n"
  },
  {
    "path": "pkg/locspec/locations.go",
    "content": "package locspec\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\nconst maxFindLocationCandidates = 5\n\n// LocationSpec is an interface that represents a parsed location spec string.\ntype LocationSpec interface {\n\t// Find returns all locations that match the location spec.\n\tFind(t *proc.Target, processArgs []string, scope *proc.EvalScope, locStr string, includeNonExecutableLines bool, substitutePathRules [][2]string) ([]api.Location, string, error)\n}\n\n// ErrLocationNotFound indicates that the location was not found.\ntype ErrLocationNotFound struct {\n\tSpec string\n}\n\nfunc (err *ErrLocationNotFound) Error() string {\n\treturn fmt.Sprintf(\"location %q not found\", err.Spec)\n}\n\n// NormalLocationSpec represents a basic location spec.\n// This can be a file:line or func:line.\ntype NormalLocationSpec struct {\n\tBase       string\n\tFuncBase   *FuncLocationSpec\n\tLineOffset int\n}\n\n// RegexLocationSpec represents a regular expression\n// location expression such as /^myfunc$/.\ntype RegexLocationSpec struct {\n\tFuncRegex string\n}\n\n// AddrLocationSpec represents an address when used\n// as a location spec.\ntype AddrLocationSpec struct {\n\tAddrExpr string\n}\n\n// OffsetLocationSpec represents a location spec that\n// is an offset of the current location (file:line).\ntype OffsetLocationSpec struct {\n\tOffset int\n}\n\n// LineLocationSpec represents a line number in the current file.\ntype LineLocationSpec struct {\n\tLine int\n}\n\n// FuncLocationSpec represents a function in the target program.\ntype FuncLocationSpec struct {\n\tPackageName           string\n\tAbsolutePackage       bool\n\tReceiverName          string\n\tPackageOrReceiverName string\n\tBaseName              string\n}\n\n// Parse will turn locStr into a parsed LocationSpec.\nfunc Parse(locStr string) (LocationSpec, error) {\n\trest := locStr\n\n\tmalformed := func(reason string) error {\n\t\t//lint:ignore ST1005 backwards compatibility\n\t\treturn fmt.Errorf(\"Malformed breakpoint location %q at %d: %s\", locStr, len(locStr)-len(rest), reason)\n\t}\n\n\tif len(rest) == 0 {\n\t\treturn nil, malformed(\"empty string\")\n\t}\n\n\tswitch rest[0] {\n\tcase '+', '-':\n\t\toffset, err := strconv.Atoi(rest)\n\t\tif err != nil {\n\t\t\treturn nil, malformed(err.Error())\n\t\t}\n\t\treturn &OffsetLocationSpec{offset}, nil\n\n\tcase '/':\n\t\tif rest[len(rest)-1] == '/' {\n\t\t\trx, rest := readRegex(rest[1:])\n\t\t\tif len(rest) == 0 {\n\t\t\t\treturn nil, malformed(\"non-terminated regular expression\")\n\t\t\t}\n\t\t\tif len(rest) > 1 {\n\t\t\t\treturn nil, malformed(\"no line offset can be specified for regular expression locations\")\n\t\t\t}\n\t\t\treturn &RegexLocationSpec{rx}, nil\n\t\t} else {\n\t\t\treturn parseLocationSpecDefault(locStr, rest)\n\t\t}\n\n\tcase '*':\n\t\treturn &AddrLocationSpec{AddrExpr: rest[1:]}, nil\n\n\tdefault:\n\t\treturn parseLocationSpecDefault(locStr, rest)\n\t}\n}\n\nfunc parseLocationSpecDefault(locStr, rest string) (LocationSpec, error) {\n\tmalformed := func(reason string) error {\n\t\t//lint:ignore ST1005 backwards compatibility\n\t\treturn fmt.Errorf(\"Malformed breakpoint location %q at %d: %s\", locStr, len(locStr)-len(rest), reason)\n\t}\n\n\tv := strings.Split(rest, \":\")\n\tif len(v) > 2 {\n\t\t// On Windows, path may contain \":\", so split only on last \":\"\n\t\tv = []string{strings.Join(v[0:len(v)-1], \":\"), v[len(v)-1]}\n\t}\n\n\tif len(v) == 1 {\n\t\tn, err := strconv.ParseInt(v[0], 0, 64)\n\t\tif err == nil {\n\t\t\treturn &LineLocationSpec{int(n)}, nil\n\t\t}\n\t}\n\n\tspec := &NormalLocationSpec{}\n\n\tspec.Base = v[0]\n\tspec.FuncBase = parseFuncLocationSpec(spec.Base)\n\n\tif len(v) < 2 {\n\t\tspec.LineOffset = -1\n\t\treturn spec, nil\n\t}\n\n\trest = v[1]\n\n\tvar err error\n\tspec.LineOffset, err = strconv.Atoi(rest)\n\tif err != nil || spec.LineOffset < 0 {\n\t\treturn nil, malformed(\"line offset negative or not a number\")\n\t}\n\n\treturn spec, nil\n}\n\nfunc readRegex(in string) (rx string, rest string) {\n\tout := make([]rune, 0, len(in))\n\tescaped := false\n\tfor i, ch := range in {\n\t\tif escaped {\n\t\t\tif ch == '/' {\n\t\t\t\tout = append(out, '/')\n\t\t\t} else {\n\t\t\t\tout = append(out, '\\\\', ch)\n\t\t\t}\n\t\t\tescaped = false\n\t\t} else {\n\t\t\tswitch ch {\n\t\t\tcase '\\\\':\n\t\t\t\tescaped = true\n\t\t\tcase '/':\n\t\t\t\treturn string(out), in[i:]\n\t\t\tdefault:\n\t\t\t\tout = append(out, ch)\n\t\t\t}\n\t\t}\n\t}\n\treturn string(out), \"\"\n}\n\nfunc parseFuncLocationSpec(in string) *FuncLocationSpec {\n\tvar v []string\n\tpathend := strings.LastIndex(in, \"/\")\n\tif pathend < 0 {\n\t\tv = strings.Split(in, \".\")\n\t} else {\n\t\tv = strings.Split(in[pathend:], \".\")\n\t\tv[0] = in[:pathend] + v[0]\n\t}\n\n\tvar spec FuncLocationSpec\n\tswitch len(v) {\n\tcase 1:\n\t\tspec.BaseName = v[0]\n\n\tcase 2:\n\t\tspec.BaseName = v[1]\n\t\tr := stripReceiverDecoration(v[0])\n\t\tif r != v[0] {\n\t\t\tspec.ReceiverName = r\n\t\t} else if strings.Contains(r, \"/\") {\n\t\t\tspec.PackageName = r\n\t\t} else {\n\t\t\tspec.PackageOrReceiverName = r\n\t\t}\n\n\tcase 3:\n\t\tspec.BaseName = v[2]\n\t\tspec.ReceiverName = stripReceiverDecoration(v[1])\n\t\tspec.PackageName = v[0]\n\n\tdefault:\n\t\treturn nil\n\t}\n\n\tif strings.HasPrefix(spec.PackageName, \"/\") {\n\t\tspec.PackageName = spec.PackageName[1:]\n\t\tspec.AbsolutePackage = true\n\t}\n\n\tif strings.Contains(spec.BaseName, \"/\") || strings.Contains(spec.ReceiverName, \"/\") {\n\t\treturn nil\n\t}\n\n\treturn &spec\n}\n\nfunc stripReceiverDecoration(in string) string {\n\tif len(in) < 3 {\n\t\treturn in\n\t}\n\tif (in[0] != '(') || (in[1] != '*') || (in[len(in)-1] != ')') {\n\t\treturn in\n\t}\n\n\treturn in[2 : len(in)-1]\n}\n\n// Match will return whether the provided function matches the location spec.\nfunc (spec *FuncLocationSpec) Match(sym *proc.Function, packageMap map[string][]string) bool {\n\tif spec.BaseName != sym.BaseName() {\n\t\treturn false\n\t}\n\n\trecv := stripReceiverDecoration(sym.ReceiverName())\n\tif spec.ReceiverName != \"\" && spec.ReceiverName != recv {\n\t\treturn false\n\t}\n\tif spec.PackageName != \"\" {\n\t\tif spec.AbsolutePackage {\n\t\t\tif spec.PackageName != sym.PackageName() {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\tif !packageMatch(spec.PackageName, sym.PackageName(), packageMap) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\tif spec.PackageOrReceiverName != \"\" && !packageMatch(spec.PackageOrReceiverName, sym.PackageName(), packageMap) && spec.PackageOrReceiverName != recv {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc packageMatch(specPkg, symPkg string, packageMap map[string][]string) bool {\n\tfor _, pkg := range packageMap[specPkg] {\n\t\tif partialPackageMatch(pkg, symPkg) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn partialPackageMatch(specPkg, symPkg)\n}\n\n// Find will search all functions in the target program and filter them via the\n// regex location spec. Only functions matching the regex will be returned.\nfunc (loc *RegexLocationSpec) Find(t *proc.Target, _ []string, scope *proc.EvalScope, locStr string, includeNonExecutableLines bool, _ [][2]string) ([]api.Location, string, error) {\n\tif scope == nil {\n\t\t//TODO(aarzilli): this needs only the list of function we should make it work\n\t\treturn nil, \"\", errors.New(\"could not determine location (scope is nil)\")\n\t}\n\tfuncs := scope.BinInfo.Functions\n\tmatches, err := regexFilterFuncs(loc.FuncRegex, funcs)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tr := make([]api.Location, 0, len(matches))\n\tfor i := range matches {\n\t\taddrs, _ := proc.FindFunctionLocation(t, matches[i], 0)\n\t\tif len(addrs) > 0 {\n\t\t\tr = append(r, addressesToLocation(addrs))\n\t\t}\n\t}\n\treturn r, \"\", nil\n}\n\n// Find returns the locations specified via the address location spec.\nfunc (loc *AddrLocationSpec) Find(t *proc.Target, _ []string, scope *proc.EvalScope, locStr string, includeNonExecutableLines bool, _ [][2]string) ([]api.Location, string, error) {\n\tif scope == nil {\n\t\taddr, err := strconv.ParseInt(loc.AddrExpr, 0, 64)\n\t\tif err != nil {\n\t\t\treturn nil, \"\", errors.New(\"could not determine current location (scope is nil)\")\n\t\t}\n\t\treturn []api.Location{{PC: uint64(addr)}}, \"\", nil\n\t}\n\n\tv, err := scope.EvalExpression(loc.AddrExpr, proc.LoadConfig{FollowPointers: true})\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\tif v.Unreadable != nil {\n\t\treturn nil, \"\", v.Unreadable\n\t}\n\tswitch v.Kind {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\taddr, _ := constant.Uint64Val(v.Value)\n\t\treturn []api.Location{{PC: addr}}, \"\", nil\n\tcase reflect.Func:\n\t\tfn := scope.BinInfo.PCToFunc(v.Base)\n\t\tpc, err := proc.FirstPCAfterPrologue(t, fn, false)\n\t\tif err != nil {\n\t\t\treturn nil, \"\", err\n\t\t}\n\t\treturn []api.Location{{PC: pc}}, v.Name, nil\n\tdefault:\n\t\treturn nil, \"\", fmt.Errorf(\"wrong expression kind: %v\", v.Kind)\n\t}\n}\n\n// FileMatch is true if the path matches the location spec.\nfunc (loc *NormalLocationSpec) FileMatch(path string) bool {\n\treturn partialPathMatch(loc.Base, path)\n}\n\nfunc tryMatchRelativePathByProc(expr, debugname, file string) bool {\n\treturn len(expr) > 0 && expr[0] == '.' && file == path.Join(path.Dir(debugname), expr)\n}\n\nfunc partialPathMatch(expr, path string) bool {\n\tif runtime.GOOS == \"windows\" {\n\t\t// Accept `expr` which is case-insensitive and slash-insensitive match to `path`\n\t\texpr = strings.ToLower(filepath.ToSlash(expr))\n\t\tpath = strings.ToLower(filepath.ToSlash(path))\n\t}\n\treturn partialPackageMatch(expr, path)\n}\n\nfunc partialPackageMatch(expr, path string) bool {\n\tif len(expr) < len(path)-1 {\n\t\treturn strings.HasSuffix(path, expr) && (path[len(path)-len(expr)-1] == '/')\n\t}\n\treturn expr == path\n}\n\n// AmbiguousLocationError is returned when the location spec\n// should only return one location but returns multiple instead.\ntype AmbiguousLocationError struct {\n\tLocation           string\n\tCandidatesString   []string\n\tCandidatesLocation []api.Location\n}\n\nfunc (ale AmbiguousLocationError) Error() string {\n\tvar candidates []string\n\tif ale.CandidatesLocation != nil {\n\t\tfor i := range ale.CandidatesLocation {\n\t\t\tcandidates = append(candidates, ale.CandidatesLocation[i].Function.Name())\n\t\t}\n\t} else {\n\t\tcandidates = ale.CandidatesString\n\t}\n\treturn fmt.Sprintf(\"Location %q ambiguous: %s…\", ale.Location, strings.Join(candidates, \", \"))\n}\n\n// Find will return a list of locations that match the given location spec.\n// This matches each other location spec that does not already have its own spec\n// implemented (such as regex, or addr).\nfunc (loc *NormalLocationSpec) Find(t *proc.Target, processArgs []string, scope *proc.EvalScope, locStr string, includeNonExecutableLines bool, substitutePathRules [][2]string) ([]api.Location, string, error) {\n\tlimit := maxFindLocationCandidates\n\tvar candidateFiles []string\n\tfor _, sourceFile := range t.BinInfo().Sources {\n\t\tsubstFile := sourceFile\n\t\tif len(substitutePathRules) > 0 {\n\t\t\tsubstFile = SubstitutePath(sourceFile, substitutePathRules)\n\t\t}\n\t\tif loc.FileMatch(substFile) || (len(processArgs) >= 1 && tryMatchRelativePathByProc(loc.Base, processArgs[0], substFile)) {\n\t\t\tcandidateFiles = append(candidateFiles, sourceFile)\n\t\t\tif len(candidateFiles) >= limit {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tlimit -= len(candidateFiles)\n\n\tvar candidateFuncs []string\n\tif loc.FuncBase != nil && limit > 0 {\n\t\tcandidateFuncs = loc.findFuncCandidates(t.BinInfo(), limit)\n\t}\n\n\tif matching := len(candidateFiles) + len(candidateFuncs); matching == 0 {\n\t\tif scope == nil {\n\t\t\treturn nil, \"\", &ErrLocationNotFound{Spec: locStr}\n\t\t}\n\t\t// if no result was found this locations string could be an\n\t\t// expression that the user forgot to prefix with '*', try treating it as\n\t\t// such.\n\t\taddrSpec := &AddrLocationSpec{AddrExpr: locStr}\n\t\tlocs, subst, err := addrSpec.Find(t, processArgs, scope, locStr, includeNonExecutableLines, nil)\n\t\tif err != nil {\n\t\t\treturn nil, \"\", &ErrLocationNotFound{Spec: locStr}\n\t\t}\n\t\treturn locs, subst, nil\n\t} else if matching > 1 {\n\t\treturn nil, \"\", AmbiguousLocationError{Location: locStr, CandidatesString: append(candidateFiles, candidateFuncs...)}\n\t}\n\n\t// len(candidateFiles) + len(candidateFuncs) == 1\n\tvar addrs []uint64\n\tvar err error\n\tif len(candidateFiles) == 1 {\n\t\tif loc.LineOffset < 0 {\n\t\t\t//lint:ignore ST1005 backwards compatibility\n\t\t\treturn nil, \"\", errors.New(\"Malformed breakpoint location, no line offset specified\")\n\t\t}\n\t\taddrs, err = proc.FindFileLocation(t, candidateFiles[0], loc.LineOffset)\n\t\tif includeNonExecutableLines {\n\t\t\tif _, isCouldNotFindLine := err.(*proc.ErrCouldNotFindLine); isCouldNotFindLine {\n\t\t\t\treturn []api.Location{{File: candidateFiles[0], Line: loc.LineOffset}}, \"\", nil\n\t\t\t}\n\t\t}\n\t} else { // len(candidateFuncs) == 1\n\t\taddrs, err = proc.FindFunctionLocation(t, candidateFuncs[0], loc.LineOffset)\n\t}\n\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\treturn []api.Location{addressesToLocation(addrs)}, \"\", nil\n}\n\nfunc (loc *NormalLocationSpec) findFuncCandidates(bi *proc.BinaryInfo, limit int) []string {\n\tcandidateFuncs := map[string]struct{}{}\n\t// See if it matches generic functions first\n\tfor fname := range bi.LookupGenericFunc() {\n\t\tif len(candidateFuncs) >= limit {\n\t\t\tbreak\n\t\t}\n\t\tif !loc.FuncBase.Match(&proc.Function{Name: fname}, bi.PackageMap) {\n\t\t\tcontinue\n\t\t}\n\t\tif loc.Base == fname {\n\t\t\treturn []string{fname}\n\t\t}\n\t\tcandidateFuncs[fname] = struct{}{}\n\t}\n\tfor _, fns := range bi.LookupFunc() {\n\t\tf := fns[0]\n\t\tif len(candidateFuncs) >= limit {\n\t\t\tbreak\n\t\t}\n\t\tif !loc.FuncBase.Match(f, bi.PackageMap) {\n\t\t\tcontinue\n\t\t}\n\t\tif loc.Base == f.Name {\n\t\t\t// if an exact match for the function name is found use it\n\t\t\treturn []string{f.Name}\n\t\t}\n\t\t// If f is an instantiation of a generic function see if we should add its generic version instead.\n\t\tif gn := f.NameWithoutTypeParams(); gn != \"\" {\n\t\t\tif _, alreadyAdded := candidateFuncs[gn]; !alreadyAdded {\n\t\t\t\tcandidateFuncs[f.Name] = struct{}{}\n\t\t\t}\n\t\t} else {\n\t\t\tcandidateFuncs[f.Name] = struct{}{}\n\t\t}\n\t}\n\t// convert candidateFuncs map into an array of its keys\n\tr := make([]string, 0, len(candidateFuncs))\n\tfor s := range candidateFuncs {\n\t\tr = append(r, s)\n\t}\n\treturn r\n}\n\n// isAbs returns true if path looks like an absolute path.\nfunc isAbs(path string) bool {\n\t// Unix-like absolute path\n\tif strings.HasPrefix(path, \"/\") {\n\t\treturn true\n\t}\n\treturn windowsAbsPath(path)\n}\n\nfunc windowsAbsPath(path string) bool {\n\t// Windows UNC absolute path\n\tif strings.HasPrefix(path, `\\\\`) {\n\t\treturn true\n\t}\n\t// DOS absolute paths\n\tif len(path) < 3 || path[1] != ':' {\n\t\treturn false\n\t}\n\treturn path[2] == '/' || path[2] == '\\\\'\n}\n\nfunc hasPathSeparatorSuffix(path string) bool {\n\treturn strings.HasSuffix(path, \"/\") || strings.HasSuffix(path, \"\\\\\")\n}\n\nfunc hasPathSeparatorPrefix(path string) bool {\n\treturn strings.HasPrefix(path, \"/\") || strings.HasPrefix(path, \"\\\\\")\n}\n\nfunc pickSeparator(to string) string {\n\tvar sep byte\n\tfor i := range to {\n\t\tif to[i] == '/' || to[i] == '\\\\' {\n\t\t\tif sep == 0 {\n\t\t\t\tsep = to[i]\n\t\t\t} else if sep != to[i] {\n\t\t\t\treturn \"\"\n\t\t\t}\n\t\t}\n\t}\n\treturn string(sep)\n}\n\nfunc joinPath(to, rest string) string {\n\tsep := pickSeparator(to)\n\n\tswitch sep {\n\tcase \"/\":\n\t\trest = strings.ReplaceAll(rest, \"\\\\\", sep)\n\tcase \"\\\\\":\n\t\trest = strings.ReplaceAll(rest, \"/\", sep)\n\tdefault:\n\t\tsep = \"/\"\n\t}\n\n\ttoEndsWithSlash := hasPathSeparatorSuffix(to)\n\trestStartsWithSlash := hasPathSeparatorPrefix(rest)\n\n\tswitch {\n\tcase toEndsWithSlash && restStartsWithSlash:\n\t\treturn to[:len(to)-1] + rest\n\tcase toEndsWithSlash && !restStartsWithSlash:\n\t\treturn to + rest\n\tcase !toEndsWithSlash && restStartsWithSlash:\n\t\treturn to + rest\n\tcase !toEndsWithSlash && !restStartsWithSlash:\n\t\tfallthrough\n\tdefault:\n\t\treturn to + sep + rest\n\t}\n}\n\n// SubstitutePath applies the specified path substitution rules to path.\nfunc SubstitutePath(path string, rules [][2]string) string {\n\t// Look for evidence that we are dealing with windows somewhere, if we are use case-insensitive matching\n\tcaseInsensitive := windowsAbsPath(path)\n\tif !caseInsensitive {\n\t\tfor i := range rules {\n\t\t\tif windowsAbsPath(rules[i][0]) || windowsAbsPath(rules[i][1]) {\n\t\t\t\tcaseInsensitive = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tfor _, r := range rules {\n\t\tfrom, to := r[0], r[1]\n\n\t\t// if we have an exact match, use it directly.\n\t\tif path == from {\n\t\t\treturn to\n\t\t}\n\n\t\tmatch := false\n\t\tvar rest string\n\t\tif from == \"\" {\n\t\t\tmatch = !isAbs(path)\n\t\t\trest = path\n\t\t} else {\n\t\t\tif caseInsensitive {\n\t\t\t\tmatch = strings.HasPrefix(strings.ToLower(path), strings.ToLower(from))\n\t\t\t\tif match {\n\t\t\t\t\tpath = strings.ToLower(path)\n\t\t\t\t\tfrom = strings.ToLower(from)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tmatch = strings.HasPrefix(path, from)\n\t\t\t}\n\t\t\tif match {\n\t\t\t\t// make sure the match ends on something that looks like a path separator boundary\n\t\t\t\trest = path[len(from):]\n\t\t\t\tmatch = hasPathSeparatorSuffix(from) || hasPathSeparatorPrefix(rest)\n\t\t\t}\n\t\t}\n\n\t\tif match {\n\t\t\tif to == \"\" {\n\t\t\t\t// make sure we return a relative path, regardless of whether 'from' consumed a final / or not\n\t\t\t\tif hasPathSeparatorPrefix(rest) {\n\t\t\t\t\treturn rest[1:]\n\t\t\t\t}\n\t\t\t\treturn rest\n\t\t\t}\n\n\t\t\treturn joinPath(to, rest)\n\t\t}\n\t}\n\treturn path\n}\n\nfunc addressesToLocation(addrs []uint64) api.Location {\n\tif len(addrs) == 0 {\n\t\treturn api.Location{}\n\t}\n\treturn api.Location{PC: addrs[0], PCs: addrs}\n}\n\n// Find returns the location after adding the offset amount to the current line number.\nfunc (loc *OffsetLocationSpec) Find(t *proc.Target, _ []string, scope *proc.EvalScope, _ string, includeNonExecutableLines bool, _ [][2]string) ([]api.Location, string, error) {\n\tif scope == nil {\n\t\treturn nil, \"\", errors.New(\"could not determine current location (scope is nil)\")\n\t}\n\tfile, line, fn := scope.BinInfo.PCToLine(scope.PC)\n\tif loc.Offset == 0 {\n\t\tsubst := \"\"\n\t\tif fn != nil {\n\t\t\tsubst = fmt.Sprintf(\"%s:%d\", file, line)\n\t\t}\n\t\treturn []api.Location{{PC: scope.PC}}, subst, nil\n\t}\n\tif fn == nil {\n\t\treturn nil, \"\", errors.New(\"could not determine current location\")\n\t}\n\tsubst := fmt.Sprintf(\"%s:%d\", file, line+loc.Offset)\n\taddrs, err := proc.FindFileLocation(t, file, line+loc.Offset)\n\tif includeNonExecutableLines {\n\t\tif _, isCouldNotFindLine := err.(*proc.ErrCouldNotFindLine); isCouldNotFindLine {\n\t\t\treturn []api.Location{{File: file, Line: line + loc.Offset}}, subst, nil\n\t\t}\n\t}\n\treturn []api.Location{addressesToLocation(addrs)}, subst, err\n}\n\n// Find will return the location at the given line in the current file.\nfunc (loc *LineLocationSpec) Find(t *proc.Target, _ []string, scope *proc.EvalScope, _ string, includeNonExecutableLines bool, _ [][2]string) ([]api.Location, string, error) {\n\tif scope == nil {\n\t\treturn nil, \"\", errors.New(\"could not determine current location (scope is nil)\")\n\t}\n\tfile, _, fn := scope.BinInfo.PCToLine(scope.PC)\n\tif fn == nil {\n\t\treturn nil, \"\", errors.New(\"could not determine current location\")\n\t}\n\tsubst := fmt.Sprintf(\"%s:%d\", file, loc.Line)\n\taddrs, err := proc.FindFileLocation(t, file, loc.Line)\n\tif includeNonExecutableLines {\n\t\tif _, isCouldNotFindLine := err.(*proc.ErrCouldNotFindLine); isCouldNotFindLine {\n\t\t\treturn []api.Location{{File: file, Line: loc.Line}}, subst, nil\n\t\t}\n\t}\n\treturn []api.Location{addressesToLocation(addrs)}, subst, err\n}\n\nfunc regexFilterFuncs(filter string, allFuncs []proc.Function) ([]string, error) {\n\tregex, err := regexp.Compile(filter)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid filter argument: %s\", err.Error())\n\t}\n\n\tfuncs := []string{}\n\tfor _, f := range allFuncs {\n\t\tif regex.MatchString(f.Name) {\n\t\t\tfuncs = append(funcs, f.Name)\n\t\t}\n\t}\n\treturn funcs, nil\n}\n"
  },
  {
    "path": "pkg/locspec/locations_test.go",
    "content": "package locspec\n\nimport (\n\t\"testing\"\n)\n\nfunc parseLocationSpecNoError(t *testing.T, locstr string) LocationSpec {\n\tspec, err := Parse(locstr)\n\tif err != nil {\n\t\tt.Fatalf(\"Error parsing %q: %v\", locstr, err)\n\t}\n\treturn spec\n}\n\nfunc assertNormalLocationSpec(t *testing.T, locstr string, tgt NormalLocationSpec) {\n\tspec := parseLocationSpecNoError(t, locstr)\n\n\tnls, ok := spec.(*NormalLocationSpec)\n\tif !ok {\n\t\tt.Fatalf(\"Location %q: expected NormalLocationSpec got %#v\", locstr, spec)\n\t}\n\n\tif nls.Base != tgt.Base {\n\t\tt.Fatalf(\"Location %q: expected 'Base' %q got %q\", locstr, tgt.Base, nls.Base)\n\t}\n\n\tif nls.LineOffset != tgt.LineOffset {\n\t\tt.Fatalf(\"Location %q: expected 'LineOffset' %d got %d\", locstr, tgt.LineOffset, nls.LineOffset)\n\t}\n\n\tif tgt.FuncBase == nil {\n\t\treturn\n\t}\n\n\tif nls.FuncBase == nil {\n\t\tt.Fatalf(\"Location %q: expected non-nil 'FuncBase'\", locstr)\n\t}\n\n\tif *(tgt.FuncBase) != *(nls.FuncBase) {\n\t\tt.Fatalf(\"Location %q: expected 'FuncBase':\\n%#v\\ngot:\\n%#v\", locstr, tgt.FuncBase, nls.FuncBase)\n\t}\n}\n\nfunc TestFunctionLocationParsing(t *testing.T) {\n\tt.Parallel()\n\t// Function locations, simple package names, no line offset\n\tassertNormalLocationSpec(t, \"proc.(*Process).Continue\", NormalLocationSpec{\"proc.(*Process).Continue\", &FuncLocationSpec{PackageName: \"proc\", ReceiverName: \"Process\", BaseName: \"Continue\"}, -1})\n\tassertNormalLocationSpec(t, \"proc.Process.Continue\", NormalLocationSpec{\"proc.Process.Continue\", &FuncLocationSpec{PackageName: \"proc\", ReceiverName: \"Process\", BaseName: \"Continue\"}, -1})\n\tassertNormalLocationSpec(t, \"proc.Continue\", NormalLocationSpec{\"proc.Continue\", &FuncLocationSpec{PackageOrReceiverName: \"proc\", BaseName: \"Continue\"}, -1})\n\tassertNormalLocationSpec(t, \"(*Process).Continue\", NormalLocationSpec{\"(*Process).Continue\", &FuncLocationSpec{ReceiverName: \"Process\", BaseName: \"Continue\"}, -1})\n\tassertNormalLocationSpec(t, \"Continue\", NormalLocationSpec{\"Continue\", &FuncLocationSpec{BaseName: \"Continue\"}, -1})\n\n\t// Function locations, simple package names, line offsets\n\tassertNormalLocationSpec(t, \"proc.(*Process).Continue:10\", NormalLocationSpec{\"proc.(*Process).Continue\", &FuncLocationSpec{PackageName: \"proc\", ReceiverName: \"Process\", BaseName: \"Continue\"}, 10})\n\tassertNormalLocationSpec(t, \"proc.Process.Continue:10\", NormalLocationSpec{\"proc.Process.Continue\", &FuncLocationSpec{PackageName: \"proc\", ReceiverName: \"Process\", BaseName: \"Continue\"}, 10})\n\tassertNormalLocationSpec(t, \"proc.Continue:10\", NormalLocationSpec{\"proc.Continue\", &FuncLocationSpec{PackageOrReceiverName: \"proc\", BaseName: \"Continue\"}, 10})\n\tassertNormalLocationSpec(t, \"(*Process).Continue:10\", NormalLocationSpec{\"(*Process).Continue\", &FuncLocationSpec{ReceiverName: \"Process\", BaseName: \"Continue\"}, 10})\n\tassertNormalLocationSpec(t, \"Continue:10\", NormalLocationSpec{\"Continue\", &FuncLocationSpec{BaseName: \"Continue\"}, 10})\n\n\t// Function locations, package paths, no line offsets\n\tassertNormalLocationSpec(t, \"github.com/go-delve/delve/pkg/proc.(*Process).Continue\", NormalLocationSpec{\"github.com/go-delve/delve/pkg/proc.(*Process).Continue\", &FuncLocationSpec{PackageName: \"github.com/go-delve/delve/pkg/proc\", ReceiverName: \"Process\", BaseName: \"Continue\"}, -1})\n\tassertNormalLocationSpec(t, \"github.com/go-delve/delve/pkg/proc.Process.Continue\", NormalLocationSpec{\"github.com/go-delve/delve/pkg/proc.Process.Continue\", &FuncLocationSpec{PackageName: \"github.com/go-delve/delve/pkg/proc\", ReceiverName: \"Process\", BaseName: \"Continue\"}, -1})\n\tassertNormalLocationSpec(t, \"github.com/go-delve/delve/pkg/proc.Continue\", NormalLocationSpec{\"github.com/go-delve/delve/pkg/proc.Continue\", &FuncLocationSpec{PackageName: \"github.com/go-delve/delve/pkg/proc\", BaseName: \"Continue\"}, -1})\n\n\t// Function locations, package paths, line offsets\n\tassertNormalLocationSpec(t, \"github.com/go-delve/delve/pkg/proc.(*Process).Continue:10\", NormalLocationSpec{\"github.com/go-delve/delve/pkg/proc.(*Process).Continue\", &FuncLocationSpec{PackageName: \"github.com/go-delve/delve/pkg/proc\", ReceiverName: \"Process\", BaseName: \"Continue\"}, 10})\n\tassertNormalLocationSpec(t, \"github.com/go-delve/delve/pkg/proc.Process.Continue:10\", NormalLocationSpec{\"github.com/go-delve/delve/pkg/proc.Process.Continue\", &FuncLocationSpec{PackageName: \"github.com/go-delve/delve/pkg/proc\", ReceiverName: \"Process\", BaseName: \"Continue\"}, 10})\n\tassertNormalLocationSpec(t, \"github.com/go-delve/delve/pkg/proc.Continue:10\", NormalLocationSpec{\"github.com/go-delve/delve/pkg/proc.Continue\", &FuncLocationSpec{PackageName: \"github.com/go-delve/delve/pkg/proc\", BaseName: \"Continue\"}, 10})\n}\n\nfunc assertSubstitutePathEqual(t *testing.T, expected string, substituted string) {\n\tt.Helper()\n\tif expected != substituted {\n\t\tt.Errorf(\"Expected substitutedPath to be %s got %s instead\", expected, substituted)\n\t}\n}\n\nfunc TestSubstitutePathUnix(t *testing.T) {\n\tt.Parallel()\n\t// Relative paths mapping\n\tassertSubstitutePathEqual(t, \"/my/asb/folder/relative/path\", SubstitutePath(\"relative/path\", [][2]string{{\"\", \"/my/asb/folder/\"}}))\n\tassertSubstitutePathEqual(t, \"/already/abs/path\", SubstitutePath(\"/already/abs/path\", [][2]string{{\"\", \"/my/asb/folder/\"}}))\n\tassertSubstitutePathEqual(t, \"relative/path\", SubstitutePath(\"/my/asb/folder/relative/path\", [][2]string{{\"/my/asb/folder/\", \"\"}}))\n\tassertSubstitutePathEqual(t, \"/another/folder/relative/path\", SubstitutePath(\"/another/folder/relative/path\", [][2]string{{\"/my/asb/folder/\", \"\"}}))\n\tassertSubstitutePathEqual(t, \"my/path\", SubstitutePath(\"relative/path/my/path\", [][2]string{{\"relative/path\", \"\"}}))\n\tassertSubstitutePathEqual(t, \"/abs/my/path\", SubstitutePath(\"/abs/my/path\", [][2]string{{\"abs/my\", \"\"}}))\n\n\t// Absolute paths mapping\n\tassertSubstitutePathEqual(t, \"/new/mapping/path\", SubstitutePath(\"/original/path\", [][2]string{{\"/original\", \"/new/mapping\"}}))\n\tassertSubstitutePathEqual(t, \"/no/change/path\", SubstitutePath(\"/no/change/path\", [][2]string{{\"/original\", \"/new/mapping\"}}))\n\tassertSubstitutePathEqual(t, \"/folder/should_not_be_replaced/path\", SubstitutePath(\"/folder/should_not_be_replaced/path\", [][2]string{{\"should_not_be_replaced\", \"\"}}))\n\n\t// Mix absolute and relative mapping\n\tassertSubstitutePathEqual(t, \"/new/mapping/path\", SubstitutePath(\"/original/path\", [][2]string{{\"\", \"/my/asb/folder/\"}, {\"/my/asb/folder/\", \"\"}, {\"/original\", \"/new/mapping\"}}))\n\tassertSubstitutePathEqual(t, \"/my/asb/folder/path\", SubstitutePath(\"path\", [][2]string{{\"/original\", \"/new/mapping\"}, {\"\", \"/my/asb/folder/\"}, {\"/my/asb/folder/\", \"\"}}))\n\tassertSubstitutePathEqual(t, \"path\", SubstitutePath(\"/my/asb/folder/path\", [][2]string{{\"/original\", \"/new/mapping\"}, {\"/my/asb/folder/\", \"\"}, {\"\", \"/my/asb/folder/\"}}))\n}\n\nfunc TestSubstitutePathWindows(t *testing.T) {\n\tt.Parallel()\n\t// Relative paths mapping\n\tassertSubstitutePathEqual(t, \"c:\\\\my\\\\asb\\\\folder\\\\relative\\\\path\", SubstitutePath(\"relative\\\\path\", [][2]string{{\"\", \"c:\\\\my\\\\asb\\\\folder\\\\\"}}))\n\tassertSubstitutePathEqual(t, \"F:\\\\already\\\\abs\\\\path\", SubstitutePath(\"F:\\\\already\\\\abs\\\\path\", [][2]string{{\"\", \"c:\\\\my\\\\asb\\\\folder\\\\\"}}))\n\tassertSubstitutePathEqual(t, \"relative\\\\path\", SubstitutePath(\"C:\\\\my\\\\asb\\\\folder\\\\relative\\\\path\", [][2]string{{\"c:\\\\my\\\\asb\\\\folder\\\\\", \"\"}}))\n\tassertSubstitutePathEqual(t, \"F:\\\\another\\\\folder\\\\relative\\\\path\", SubstitutePath(\"F:\\\\another\\\\folder\\\\relative\\\\path\", [][2]string{{\"c:\\\\my\\\\asb\\\\folder\\\\\", \"\"}}))\n\tassertSubstitutePathEqual(t, \"my\\\\path\", SubstitutePath(\"relative\\\\path\\\\my\\\\path\", [][2]string{{\"relative\\\\path\", \"\"}}))\n\tassertSubstitutePathEqual(t, \"c:\\\\abs\\\\my\\\\path\", SubstitutePath(\"c:\\\\abs\\\\my\\\\path\", [][2]string{{\"abs\\\\my\", \"\"}}))\n\n\t// Absolute paths mapping\n\tassertSubstitutePathEqual(t, \"c:\\\\new\\\\mapping\\\\path\", SubstitutePath(\"D:\\\\original\\\\path\", [][2]string{{\"d:\\\\original\", \"c:\\\\new\\\\mapping\"}}))\n\tassertSubstitutePathEqual(t, \"F:\\\\no\\\\change\\\\path\", SubstitutePath(\"F:\\\\no\\\\change\\\\path\", [][2]string{{\"d:\\\\original\", \"c:\\\\new\\\\mapping\"}}))\n\tassertSubstitutePathEqual(t, \"c:\\\\folder\\\\should_not_be_replaced\\\\path\", SubstitutePath(\"c:\\\\folder\\\\should_not_be_replaced\\\\path\", [][2]string{{\"should_not_be_replaced\", \"\"}}))\n\n\t// Mix absolute and relative mapping\n\tassertSubstitutePathEqual(t, \"c:\\\\new\\\\mapping\\\\path\", SubstitutePath(\"D:\\\\original\\\\path\", [][2]string{{\"\", \"c:\\\\my\\\\asb\\\\folder\\\\\"}, {\"c:\\\\my\\\\asb\\\\folder\\\\\", \"\"}, {\"d:\\\\original\", \"c:\\\\new\\\\mapping\"}}))\n\tassertSubstitutePathEqual(t, \"c:\\\\my\\\\asb\\\\folder\\\\path\\\\\", SubstitutePath(\"path\\\\\", [][2]string{{\"d:\\\\original\", \"c:\\\\new\\\\mapping\"}, {\"\", \"c:\\\\my\\\\asb\\\\folder\\\\\"}, {\"c:\\\\my\\\\asb\\\\folder\\\\\", \"\"}}))\n\tassertSubstitutePathEqual(t, \"path\", SubstitutePath(\"C:\\\\my\\\\asb\\\\folder\\\\path\", [][2]string{{\"d:\\\\original\", \"c:\\\\new\\\\mapping\"}, {\"c:\\\\my\\\\asb\\\\folder\\\\\", \"\"}, {\"\", \"c:\\\\my\\\\asb\\\\folder\\\\\"}}))\n}\n\ntype tRule struct {\n\tfrom string\n\tto   string\n}\n\ntype tCase struct {\n\trules []tRule\n\tpath  string\n\tres   string\n}\n\nfunc platformCases() []tCase {\n\tcasesUnix := []tCase{\n\t\t// Should not depend on separator at the end of rule path\n\t\t{[]tRule{{\"/tmp/path\", \"/new/path2\"}}, \"/tmp/path/file.go\", \"/new/path2/file.go\"},\n\t\t{[]tRule{{\"/tmp/path/\", \"/new/path2/\"}}, \"/tmp/path/file.go\", \"/new/path2/file.go\"},\n\t\t{[]tRule{{\"/tmp/path/\", \"/new/path2\"}}, \"/tmp/path/file.go\", \"/new/path2/file.go\"},\n\t\t{[]tRule{{\"/tmp/path\", \"/new/path2/\"}}, \"/tmp/path/file.go\", \"/new/path2/file.go\"},\n\t\t// Should apply to directory prefixes\n\t\t{[]tRule{{\"/tmp/path\", \"/new/path2\"}}, \"/tmp/path-2/file.go\", \"/tmp/path-2/file.go\"},\n\t\t// Should apply to exact matches\n\t\t{[]tRule{{\"/tmp/path/file.go\", \"/new/path2/file2.go\"}}, \"/tmp/path/file.go\", \"/new/path2/file2.go\"},\n\t\t// First matched rule should be used\n\t\t{[]tRule{\n\t\t\t{\"/tmp/path1\", \"/new/path1\"},\n\t\t\t{\"/tmp/path2\", \"/new/path2\"},\n\t\t\t{\"/tmp/path2\", \"/new/path3\"}}, \"/tmp/path2/file.go\", \"/new/path2/file.go\"},\n\t}\n\tcasesLinux := []tCase{\n\t\t// Should be case-sensitive\n\t\t{[]tRule{{\"/tmp/path\", \"/new/path2\"}}, \"/TmP/path/file.go\", \"/TmP/path/file.go\"},\n\t}\n\tcasesFreebsd := []tCase{\n\t\t// Should be case-sensitive\n\t\t{[]tRule{{\"/tmp/path\", \"/new/path2\"}}, \"/TmP/path/file.go\", \"/TmP/path/file.go\"},\n\t}\n\tcasesDarwin := []tCase{\n\t\t// Can be either case-sensitive or case-insensitive depending on\n\t\t// filesystem settings, we always treat it as case-sensitive.\n\t\t{[]tRule{{\"/tmp/path\", \"/new/path2\"}}, \"/TmP/PaTh/file.go\", \"/TmP/PaTh/file.go\"},\n\t}\n\tcasesWindows := []tCase{\n\t\t// Should not depend on separator at the end of rule path\n\t\t{[]tRule{{`c:\\tmp\\path`, `d:\\new\\path2`}}, `c:\\tmp\\path\\file.go`, `d:\\new\\path2\\file.go`},\n\t\t{[]tRule{{`c:\\tmp\\path\\`, `d:\\new\\path2\\`}}, `c:\\tmp\\path\\file.go`, `d:\\new\\path2\\file.go`},\n\t\t{[]tRule{{`c:\\tmp\\path`, `d:\\new\\path2\\`}}, `c:\\tmp\\path\\file.go`, `d:\\new\\path2\\file.go`},\n\t\t{[]tRule{{`c:\\tmp\\path\\`, `d:\\new\\path2`}}, `c:\\tmp\\path\\file.go`, `d:\\new\\path2\\file.go`},\n\t\t// Should apply to directory prefixes\n\t\t{[]tRule{{`c:\\tmp\\path`, `d:\\new\\path2`}}, `c:\\tmp\\path-2\\file.go`, `c:\\tmp\\path-2\\file.go`},\n\t\t// Should apply to exact matches\n\t\t{[]tRule{{`c:\\tmp\\path\\file.go`, `d:\\new\\path2\\file2.go`}}, `c:\\tmp\\path\\file.go`, `d:\\new\\path2\\file2.go`},\n\t\t// Should be case-insensitive\n\t\t{[]tRule{{`c:\\tmp\\path`, `d:\\new\\path2`}}, `C:\\TmP\\PaTh\\file.go`, `d:\\new\\path2\\file.go`},\n\t}\n\tcasesCross := []tCase{\n\t\t{[]tRule{{\"C:\\\\some\\\\repo\", \"/go/src/github.com/some/repo/\"}}, `c:\\some\\repo\\folder\\file.go`, \"/go/src/github.com/some/repo/folder/file.go\"},\n\t}\n\n\tr := append(casesUnix, casesLinux...)\n\tr = append(r, casesFreebsd...)\n\tr = append(r, casesDarwin...)\n\tr = append(r, casesWindows...)\n\tr = append(r, casesCross...)\n\n\treturn r\n}\n\nfunc TestSubstitutePath(t *testing.T) {\n\tt.Parallel()\n\tfor _, c := range platformCases() {\n\t\tsubRules := [][2]string{}\n\t\tfor _, r := range c.rules {\n\t\t\tsubRules = append(subRules, [2]string{r.from, r.to})\n\t\t}\n\t\tres := SubstitutePath(c.path, subRules)\n\t\tif c.res != res {\n\t\t\tt.Errorf(\"terminal.SubstitutePath(%q) => %q, want %q\", c.path, res, c.res)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/logflags/logflags.go",
    "content": "package logflags\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"log/slog\"\n\t\"net\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"golang.org/x/telemetry/counter\"\n)\n\nvar any = false\nvar debugger = false\nvar gdbWire = false\nvar lldbServerOutput = false\nvar debugLineErrors = false\nvar rpc = false\nvar dap = false\nvar fnCall = false\nvar minidump = false\nvar stack = false\n\nvar logOut io.WriteCloser\n\nvar Bug = counter.NewStack(\"delve/bug\", 16)\n\nfunc makeLogger(flag bool, attrs ...interface{}) Logger {\n\tif lf := loggerFactory; lf != nil {\n\t\tfields := make(Fields)\n\t\tfor i := 0; i < len(attrs); i += 2 {\n\t\t\tfields[attrs[i].(string)] = attrs[i+1]\n\t\t}\n\t\treturn lf(flag, fields, logOut)\n\t}\n\n\tvar out io.WriteCloser = os.Stderr\n\tif logOut != nil {\n\t\tout = logOut\n\t}\n\tlevel := slog.LevelError\n\tif flag {\n\t\tlevel = slog.LevelDebug\n\t}\n\tlogger := slog.New(newTextHandler(out, &slog.HandlerOptions{Level: level})).With(attrs...)\n\treturn slogLogger{logger}\n}\n\n// Any returns true if any logging is enabled.\nfunc Any() bool {\n\treturn any\n}\n\n// GdbWire returns true if the gdbserial package should log all the packets\n// exchanged with the stub.\nfunc GdbWire() bool {\n\treturn gdbWire\n}\n\n// GdbWireLogger returns a configured logger for the gdbserial wire protocol.\nfunc GdbWireLogger() Logger {\n\treturn makeLogger(gdbWire, \"layer\", \"gdbconn\")\n}\n\n// Debugger returns true if the debugger package should log.\nfunc Debugger() bool {\n\treturn debugger\n}\n\n// DebuggerLogger returns a logger for the debugger package.\nfunc DebuggerLogger() Logger {\n\treturn makeLogger(debugger, \"layer\", \"debugger\")\n}\n\n// LLDBServerOutput returns true if the output of the LLDB server should be\n// redirected to standard output instead of suppressed.\nfunc LLDBServerOutput() bool {\n\treturn lldbServerOutput\n}\n\n// DebugLineErrors returns true if pkg/dwarf/line should log its recoverable\n// errors.\nfunc DebugLineErrors() bool {\n\treturn debugLineErrors\n}\n\n// DebugLineLogger returns a logger for the dwarf/line package.\nfunc DebugLineLogger() Logger {\n\treturn makeLogger(debugLineErrors, \"layer\", \"dwarf-line\")\n}\n\n// RPC returns true if RPC messages should be logged.\nfunc RPC() bool {\n\treturn rpc\n}\n\n// RPCLogger returns a logger for RPC messages.\nfunc RPCLogger() Logger {\n\treturn rpcLogger(rpc)\n}\n\n// rpcLogger returns a logger for RPC messages set to a specific minimal log level.\nfunc rpcLogger(flag bool) Logger {\n\treturn makeLogger(flag, \"layer\", \"rpc\")\n}\n\n// DAP returns true if dap package should log.\nfunc DAP() bool {\n\treturn dap\n}\n\n// DAPLogger returns a logger for dap package.\nfunc DAPLogger() Logger {\n\treturn makeLogger(dap, \"layer\", \"dap\")\n}\n\n// FnCall returns true if the function call protocol should be logged.\nfunc FnCall() bool {\n\treturn fnCall\n}\n\nfunc FnCallLogger() Logger {\n\treturn makeLogger(fnCall, \"layer\", \"proc\", \"kind\", \"fncall\")\n}\n\n// Minidump returns true if the minidump loader should be logged.\nfunc Minidump() bool {\n\treturn minidump\n}\n\nfunc MinidumpLogger() Logger {\n\treturn makeLogger(minidump, \"layer\", \"core\", \"kind\", \"minidump\")\n}\n\n// Stack returns true if the stacktracer should be logged.\nfunc Stack() bool {\n\treturn stack\n}\n\nfunc StackLogger() Logger {\n\treturn makeLogger(stack, \"layer\", \"core\", \"kind\", \"stack\")\n}\n\n// WriteDAPListeningMessage writes the \"DAP server listening\" message in dap mode.\nfunc WriteDAPListeningMessage(addr net.Addr) {\n\twriteListeningMessage(\"DAP\", addr)\n}\n\n// WriteAPIListeningMessage writes the \"API server listening\" message in headless mode.\nfunc WriteAPIListeningMessage(addr net.Addr) {\n\twriteListeningMessage(\"API\", addr)\n}\n\nfunc writeListeningMessage(server string, addr net.Addr) {\n\tmsg := fmt.Sprintf(\"%s server listening at: %s\", server, addr)\n\tif logOut != nil {\n\t\tfmt.Fprintln(logOut, msg)\n\t} else {\n\t\tfmt.Println(msg)\n\t}\n\ttcpAddr, _ := addr.(*net.TCPAddr)\n\tif tcpAddr == nil || tcpAddr.IP.IsLoopback() {\n\t\treturn\n\t}\n\tlogger := rpcLogger(true)\n\tlogger.Warnf(\"Listening for remote connections (connections are not authenticated nor encrypted)\")\n}\n\nfunc WriteError(msg string) {\n\tif logOut != nil {\n\t\tfmt.Fprintln(logOut, msg)\n\t} else {\n\t\tfmt.Fprintln(os.Stderr, msg)\n\t}\n}\n\nfunc WriteCgoFlagsWarning() {\n\tmakeLogger(true, \"layer\", \"dlv\").Warn(\"CGO_CFLAGS already set, Cgo code could be optimized.\")\n}\n\nvar errLogstrWithoutLog = errors.New(\"--log-output specified without --log\")\n\n// Setup sets debugger flags based on the contents of logstr.\n// If logDest is not empty logs will be redirected to the file descriptor or\n// file path specified by logDest.\nfunc Setup(logFlag bool, logstr, logDest string) error {\n\tif logDest != \"\" {\n\t\tn, err := strconv.Atoi(logDest)\n\t\tif err == nil {\n\t\t\tlogOut = os.NewFile(uintptr(n), \"delve-logs\")\n\t\t} else {\n\t\t\tfh, err := os.Create(logDest)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"could not create log file: %v\", err)\n\t\t\t}\n\t\t\tlogOut = fh\n\t\t}\n\t}\n\tlog.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)\n\tif !logFlag {\n\t\tlog.SetOutput(io.Discard)\n\t\tif logstr != \"\" {\n\t\t\treturn errLogstrWithoutLog\n\t\t}\n\t\treturn nil\n\t}\n\tif logstr == \"\" {\n\t\tlogstr = \"debugger\"\n\t}\n\tany = true\n\tv := strings.SplitSeq(logstr, \",\")\n\tfor logcmd := range v {\n\t\t// If adding another value, do make sure to\n\t\t// update \"Help about logging flags\" in commands.go.\n\t\tswitch logcmd {\n\t\tcase \"debugger\":\n\t\t\tdebugger = true\n\t\tcase \"gdbwire\":\n\t\t\tgdbWire = true\n\t\tcase \"lldbout\":\n\t\t\tlldbServerOutput = true\n\t\tcase \"debuglineerr\":\n\t\t\tdebugLineErrors = true\n\t\tcase \"rpc\":\n\t\t\trpc = true\n\t\tcase \"dap\":\n\t\t\tdap = true\n\t\tcase \"fncall\":\n\t\t\tfnCall = true\n\t\tcase \"minidump\":\n\t\t\tminidump = true\n\t\tcase \"stack\":\n\t\t\tstack = true\n\t\tdefault:\n\t\t\tfmt.Fprintf(os.Stderr, \"Warning: unknown log output value %q, run 'dlv help log' for usage.\\n\", logcmd)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Close closes the logger output.\nfunc Close() {\n\tif logOut != nil {\n\t\tlogOut.Close()\n\t}\n}\n\ntype textHandler struct {\n\tout               io.WriteCloser\n\topts              slog.HandlerOptions\n\tattrs             []slog.Attr\n\tpreformattedAttrs string // preformatted version of attrs for optimization purposes\n}\n\nfunc newTextHandler(out io.WriteCloser, opts *slog.HandlerOptions) *textHandler {\n\treturn &textHandler{\n\t\tout:  out,\n\t\topts: *opts,\n\t}\n}\n\nfunc (h *textHandler) Enabled(_ context.Context, l slog.Level) bool {\n\treturn l >= h.opts.Level.Level()\n}\n\nfunc (h *textHandler) WithAttrs(attrs []slog.Attr) slog.Handler {\n\th2 := *h\n\th2.attrs = append(h2.attrs, attrs...)\n\tm := map[string]slog.Value{}\n\tkeys := []string{}\n\tfor i := range attrs {\n\t\tm[attrs[i].Key] = attrs[i].Value\n\t\tkeys = append(keys, attrs[i].Key)\n\t}\n\tsort.Strings(keys)\n\tb := new(bytes.Buffer)\n\tfor _, key := range keys {\n\t\tappendAttr(b, key, m[key])\n\t}\n\tb.Truncate(b.Len() - 1)\n\th2.preformattedAttrs = b.String()\n\treturn &h2\n}\n\nfunc appendAttr(b *bytes.Buffer, key string, val slog.Value) {\n\tb.WriteString(key)\n\tb.WriteByte('=')\n\tstringVal := val.String()\n\tif needsQuoting(stringVal) {\n\t\tfmt.Fprintf(b, \"%q\", stringVal)\n\t} else {\n\t\tb.WriteString(stringVal)\n\t}\n\tb.WriteByte(',')\n}\n\nfunc (h *textHandler) WithGroup(group string) slog.Handler {\n\t// group not handled\n\treturn h\n}\n\nfunc (h *textHandler) Handle(_ context.Context, entry slog.Record) error {\n\tb := &bytes.Buffer{}\n\n\tb.WriteString(entry.Time.Format(time.RFC3339))\n\tb.WriteByte(' ')\n\tb.WriteString(strings.ToLower(entry.Level.String()))\n\tb.WriteByte(' ')\n\tb.WriteString(h.preformattedAttrs)\n\n\tif entry.NumAttrs() > 0 {\n\t\tif len(h.preformattedAttrs) > 0 {\n\t\t\tb.WriteByte(' ')\n\t\t}\n\t\tentry.Attrs(func(attr slog.Attr) bool {\n\t\t\tappendAttr(b, attr.Key, attr.Value)\n\t\t\treturn true\n\t\t})\n\t\tb.Truncate(b.Len() - 1)\n\t}\n\n\tif len(h.preformattedAttrs) > 0 || entry.NumAttrs() > 0 {\n\t\tb.WriteByte(' ')\n\t}\n\n\tb.WriteString(entry.Message)\n\tb.WriteByte('\\n')\n\t_, err := h.out.Write(b.Bytes())\n\treturn err\n}\n\nfunc needsQuoting(text string) bool {\n\tfor _, ch := range text {\n\t\tif !((ch >= 'a' && ch <= 'z') ||\n\t\t\t(ch >= 'A' && ch <= 'Z') ||\n\t\t\t(ch >= '0' && ch <= '9') ||\n\t\t\tch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '@' || ch == '^' || ch == '+') {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "pkg/logflags/logflags_test.go",
    "content": "package logflags\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"log/slog\"\n\t\"testing\"\n)\n\ntype dummyLogger struct {\n\tLogger\n}\n\nfunc TestMakeLogger_usingLoggerFactory(t *testing.T) {\n\tif loggerFactory != nil {\n\t\tt.Fatalf(\"expected loggerFactory to be nil; but was <%v>\", loggerFactory)\n\t}\n\tdefer func() {\n\t\tloggerFactory = nil\n\t}()\n\tif logOut != nil {\n\t\tt.Fatalf(\"expected logOut to be nil; but was <%v>\", logOut)\n\t}\n\tlogOut = &bufferWriter{}\n\tdefer func() {\n\t\tlogOut = nil\n\t}()\n\n\texpectedLogger := &dummyLogger{}\n\tSetLoggerFactory(func(flag bool, fields Fields, out io.Writer) Logger {\n\t\tif flag != true {\n\t\t\tt.Fatalf(\"expected flag to be <%v>; but was <%v>\", true, flag)\n\t\t}\n\t\tif len(fields) != 1 || fields[\"foo\"] != \"bar\" {\n\t\t\tt.Fatalf(\"expected fields to be {'foo':'bar'}; but was <%v>\", fields)\n\t\t}\n\t\tif out != logOut {\n\t\t\tt.Fatalf(\"expected out to be <%v>; but was <%v>\", logOut, out)\n\t\t}\n\t\treturn expectedLogger\n\t})\n\n\tactual := makeLogger(true, \"foo\", \"bar\")\n\tif actual != expectedLogger {\n\t\tt.Fatalf(\"expected actual to <%v>; but was <%v>\", expectedLogger, actual)\n\t}\n}\n\nfunc TestMakeLogger_usingDefaultBehavior(t *testing.T) {\n\tif loggerFactory != nil {\n\t\tt.Fatalf(\"expected loggerFactory to be nil; but was <%v>\", loggerFactory)\n\t}\n\tif logOut != nil {\n\t\tt.Fatalf(\"expected logOut to be nil; but was <%v>\", logOut)\n\t}\n\tlogOut = &bufferWriter{}\n\tdefer func() {\n\t\tlogOut = nil\n\t}()\n\n\tactual := makeLogger(false, \"foo\", \"bar\")\n\n\tactualEntry, expectedType := actual.(slogLogger)\n\tif !expectedType {\n\t\tt.Fatalf(\"expected actual to be of type slogLogger; but was %T\", actual)\n\t}\n\th, ok := actualEntry.s.Handler().(*textHandler)\n\tif !ok {\n\t\tt.Fatalf(\"expected handler to be *textHandler; but was %T\", actualEntry.s.Handler())\n\t}\n\tif lvl := h.opts.Level.Level(); lvl != slog.LevelError {\n\t\tt.Fatalf(\"expected level to be <%v>; but was <%v>\", slog.LevelError, lvl)\n\t}\n\tif h.out != logOut {\n\t\tt.Fatalf(\"expected output to be <%v>; but was <%v>\", logOut, h.out)\n\t}\n\tif len(h.attrs) != 1 || h.attrs[0].Key != \"foo\" || h.attrs[0].Value.String() != \"bar\" {\n\t\tt.Fatalf(\"expected attributes to be {'foo':'bar'}; but was <%v>\", h.attrs)\n\t}\n}\n\nfunc TestMakeLogger_usingDefaultBehaviorAndFlagged(t *testing.T) {\n\tif loggerFactory != nil {\n\t\tt.Fatalf(\"expected loggerFactory to be nil; but was <%v>\", loggerFactory)\n\t}\n\tif logOut != nil {\n\t\tt.Fatalf(\"expected logOut to be nil; but was <%v>\", logOut)\n\t}\n\tlogOut = &bufferWriter{}\n\tdefer func() {\n\t\tlogOut = nil\n\t}()\n\n\tactual := makeLogger(true, \"foo\", \"bar\")\n\n\tactualEntry, expectedType := actual.(slogLogger)\n\tif !expectedType {\n\t\tt.Fatalf(\"expected actual to be of type slogLogger; but was %T\", actual)\n\t}\n\th, ok := actualEntry.s.Handler().(*textHandler)\n\tif !ok {\n\t\tt.Fatalf(\"expected actualEntry.Entry.Logger.Formatter to be *textHandler; but was %T\", actualEntry.s.Handler())\n\t}\n\tif lvl := h.opts.Level.Level(); lvl != slog.LevelDebug {\n\t\tt.Fatalf(\"expected actualEntry.Entry.Logger.Level to be <%v>; but was <%v>\", slog.LevelError, lvl)\n\t}\n\tif h.out != logOut {\n\t\tt.Fatalf(\"expected actualEntry.Entry.Logger.Out to be <%v>; but was <%v>\", logOut, h.out)\n\t}\n\tif len(h.attrs) != 1 || h.attrs[0].Key != \"foo\" || h.attrs[0].Value.String() != \"bar\" {\n\t\tt.Fatalf(\"expected actualEntry.Entry.Data to be {'foo':'bar'}; but was <%v>\", h.attrs)\n\t}\n}\n\ntype bufferWriter struct {\n\tbytes.Buffer\n}\n\nfunc (bw bufferWriter) Close() error {\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/logflags/logger.go",
    "content": "package logflags\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"io\"\n\t\"log/slog\"\n\t\"runtime\"\n\t\"time\"\n)\n\n// Logger represents a generic interface for logging inside of\n// Delve codebase.\ntype Logger interface {\n\tDebugf(format string, args ...interface{})\n\tInfof(format string, args ...interface{})\n\tWarnf(format string, args ...interface{})\n\tErrorf(format string, args ...interface{})\n\n\tDebug(...interface{})\n\tInfo(...interface{})\n\tWarn(...interface{})\n\tError(...interface{})\n}\n\n// LoggerFactory is used to create new Logger instances.\n// SetLoggerFactory can be used to configure it.\n//\n// The given parameters fields and out can be both be nil.\ntype LoggerFactory func(flag bool, fields Fields, out io.Writer) Logger\n\nvar loggerFactory LoggerFactory\n\n// SetLoggerFactory will ensure that every Logger created by this package, will be now created\n// by the given LoggerFactory. Default behavior will be a slog based Logger instance using DefaultFormatter.\nfunc SetLoggerFactory(lf LoggerFactory) {\n\tloggerFactory = lf\n}\n\n// Fields type wraps many fields for Logger\ntype Fields map[string]interface{}\n\ntype slogLogger struct {\n\ts *slog.Logger\n}\n\nfunc sloglog(logger *slog.Logger, level slog.Level, thunk func() string) {\n\t// see the \"Wrapping\" example in the documentation of log/slog\n\tif !logger.Enabled(context.Background(), slog.LevelDebug) {\n\t\treturn\n\t}\n\tvar pcs [1]uintptr\n\truntime.Callers(3, pcs[:]) // skip [ runtime.Callers, sloglog, the caller of this function ]\n\tr := slog.NewRecord(time.Now(), level, thunk(), pcs[0])\n\t_ = logger.Handler().Handle(context.Background(), r)\n}\n\nfunc (s slogLogger) Debugf(format string, args ...interface{}) {\n\tsloglog(s.s, slog.LevelDebug, func() string {\n\t\treturn fmt.Sprintf(format, args...)\n\t})\n}\n\nfunc (s slogLogger) Infof(format string, args ...interface{}) {\n\tsloglog(s.s, slog.LevelInfo, func() string {\n\t\treturn fmt.Sprintf(format, args...)\n\t})\n}\n\nfunc (s slogLogger) Warnf(format string, args ...interface{}) {\n\tsloglog(s.s, slog.LevelWarn, func() string {\n\t\treturn fmt.Sprintf(format, args...)\n\t})\n}\n\nfunc (s slogLogger) Errorf(format string, args ...interface{}) {\n\tsloglog(s.s, slog.LevelError, func() string {\n\t\treturn fmt.Sprintf(format, args...)\n\t})\n}\n\nfunc (s slogLogger) Debug(args ...interface{}) {\n\tsloglog(s.s, slog.LevelDebug, func() string {\n\t\treturn fmt.Sprint(args...)\n\t})\n}\n\nfunc (s slogLogger) Info(args ...interface{}) {\n\tsloglog(s.s, slog.LevelInfo, func() string {\n\t\treturn fmt.Sprint(args...)\n\t})\n}\n\nfunc (s slogLogger) Warn(args ...interface{}) {\n\tsloglog(s.s, slog.LevelWarn, func() string {\n\t\treturn fmt.Sprint(args...)\n\t})\n}\n\nfunc (s slogLogger) Error(args ...interface{}) {\n\tsloglog(s.s, slog.LevelError, func() string {\n\t\treturn fmt.Sprint(args...)\n\t})\n}\n"
  },
  {
    "path": "pkg/proc/amd64_arch.go",
    "content": "package proc\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n)\n\nvar amd64BreakInstruction = []byte{0xCC}\n\n// AMD64Arch returns an initialized AMD64\n// struct.\nfunc AMD64Arch(goos string) *Arch {\n\treturn &Arch{\n\t\tName:                             \"amd64\",\n\t\tptrSize:                          8,\n\t\tmaxInstructionLength:             15,\n\t\tbreakpointInstruction:            amd64BreakInstruction,\n\t\tbreakInstrMovesPC:                true,\n\t\tderefTLS:                         goos == \"windows\",\n\t\tprologues:                        prologuesAMD64,\n\t\tfixFrameUnwindContext:            amd64FixFrameUnwindContext,\n\t\tswitchStack:                      amd64SwitchStack,\n\t\tregSize:                          amd64RegSize,\n\t\tRegistersToDwarfRegisters:        amd64RegistersToDwarfRegisters,\n\t\taddrAndStackRegsToDwarfRegisters: amd64AddrAndStackRegsToDwarfRegisters,\n\t\tDwarfRegisterToString:            amd64DwarfRegisterToString,\n\t\tinhibitStepInto:                  func(*BinaryInfo, uint64) bool { return false },\n\t\tasmDecode:                        amd64AsmDecode,\n\t\tPCRegNum:                         regnum.AMD64_Rip,\n\t\tSPRegNum:                         regnum.AMD64_Rsp,\n\t\tBPRegNum:                         regnum.AMD64_Rbp,\n\t\tContextRegNum:                    regnum.AMD64_Rdx,\n\t\tasmRegisters:                     amd64AsmRegisters,\n\t\tRegisterNameToDwarf:              nameToDwarfFunc(regnum.AMD64NameToDwarf),\n\t\tRegnumToString:                   regnum.AMD64ToName,\n\t\tdebugCallMinStackSize:            256,\n\t\tmaxRegArgBytes:                   9*8 + 15*8,\n\t\targumentRegs:                     []int{regnum.AMD64_Rax, regnum.AMD64_Rbx, regnum.AMD64_Rcx},\n\t}\n}\n\nfunc amd64FixFrameUnwindContext(fctxt *frame.FrameContext, pc uint64, bi *BinaryInfo) *frame.FrameContext {\n\ta := bi.Arch\n\tif a.sigreturnfn == nil {\n\t\ta.sigreturnfn = bi.lookupOneFunc(\"runtime.sigreturn\")\n\t}\n\n\tif fctxt == nil || (a.sigreturnfn != nil && pc >= a.sigreturnfn.Entry && pc < a.sigreturnfn.End) {\n\t\t// When there's no frame descriptor entry use BP (the frame pointer) instead\n\t\t// - return register is [bp + a.PtrSize()] (i.e. [cfa-a.PtrSize()])\n\t\t// - cfa is bp + a.PtrSize()*2\n\t\t// - bp is [bp] (i.e. [cfa-a.PtrSize()*2])\n\t\t// - sp is cfa\n\n\t\t// When the signal handler runs it will move the execution to the signal\n\t\t// handling stack (installed using the sigaltstack system call).\n\t\t// This isn't a proper stack switch: the pointer to g in TLS will still\n\t\t// refer to whatever g was executing on that thread before the signal was\n\t\t// received.\n\t\t// Since go did not execute a stack switch the previous value of sp, pc\n\t\t// and bp is not saved inside g.sched, as it normally would.\n\t\t// The only way to recover is to either read sp/pc from the signal context\n\t\t// parameter (the ucontext_t* parameter) or to unconditionally follow the\n\t\t// frame pointer when we get to runtime.sigreturn (which is what we do\n\t\t// here).\n\n\t\treturn &frame.FrameContext{\n\t\t\tRetAddrReg: regnum.AMD64_Rip,\n\t\t\tRegs: map[uint64]frame.DWRule{\n\t\t\t\tregnum.AMD64_Rip: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-a.PtrSize()),\n\t\t\t\t},\n\t\t\t\tregnum.AMD64_Rbp: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-2 * a.PtrSize()),\n\t\t\t\t},\n\t\t\t\tregnum.AMD64_Rsp: {\n\t\t\t\t\tRule:   frame.RuleValOffset,\n\t\t\t\t\tOffset: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\tCFA: frame.DWRule{\n\t\t\t\tRule:   frame.RuleCFA,\n\t\t\t\tReg:    regnum.AMD64_Rbp,\n\t\t\t\tOffset: int64(2 * a.PtrSize()),\n\t\t\t},\n\t\t}\n\t}\n\n\tif a.crosscall2fn == nil {\n\t\ta.crosscall2fn = bi.lookupOneFunc(\"crosscall2\")\n\t}\n\n\tif a.crosscall2fn != nil && pc >= a.crosscall2fn.Entry && pc < a.crosscall2fn.End {\n\t\trule := fctxt.CFA\n\t\tif rule.Offset == crosscall2SPOffsetBad {\n\t\t\tswitch bi.GOOS {\n\t\t\tcase \"windows\":\n\t\t\t\trule.Offset += crosscall2SPOffsetWindowsAMD64\n\t\t\tdefault:\n\t\t\t\trule.Offset += crosscall2SPOffset\n\t\t\t}\n\t\t}\n\t\tfctxt.CFA = rule\n\t}\n\n\t// We assume that RBP is the frame pointer, and we want to keep it updated,\n\t// so that we can use it to unwind the stack even when we encounter frames\n\t// without descriptor entries.\n\t// If there isn't a rule already we emit one.\n\tif fctxt.Regs[regnum.AMD64_Rbp].Rule == frame.RuleUndefined {\n\t\tfctxt.Regs[regnum.AMD64_Rbp] = frame.DWRule{\n\t\t\tRule:   frame.RuleFramePointer,\n\t\t\tReg:    regnum.AMD64_Rbp,\n\t\t\tOffset: 0,\n\t\t}\n\t}\n\n\treturn fctxt\n}\n\n// cgocallSPOffsetSaveSlot is the offset from systemstack.SP where\n// (goroutine.SP - StackHi) is saved in runtime.asmcgocall after the stack\n// switch happens.\nconst amd64cgocallSPOffsetSaveSlot = 0x28\n\nfunc amd64SwitchStack(it *stackIterator, _ *op.DwarfRegisters) bool {\n\tif it.frame.Current.Fn == nil {\n\t\tif it.systemstack && it.g != nil && it.top {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\tswitch it.frame.Current.Fn.Name {\n\tcase \"runtime.asmcgocall\":\n\t\tif it.top || !it.systemstack {\n\t\t\treturn false\n\t\t}\n\n\t\t// This function is called by a goroutine to execute a C function and\n\t\t// switches from the goroutine stack to the system stack.\n\t\t// Since we are unwinding the stack from callee to caller we have to switch\n\t\t// from the system stack to the goroutine stack.\n\t\toff, _ := readIntRaw(it.mem, it.regs.SP()+amd64cgocallSPOffsetSaveSlot, int64(it.bi.Arch.PtrSize())) // reads \"offset of SP from StackHi\" from where runtime.asmcgocall saved it\n\t\toldsp := it.regs.SP()\n\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = uint64(int64(it.stackhi) - off)\n\n\t\t// runtime.asmcgocall can also be called from inside the system stack,\n\t\t// in that case no stack switch actually happens\n\t\tif it.regs.SP() == oldsp {\n\t\t\treturn false\n\t\t}\n\t\tit.systemstack = false\n\n\t\t// advances to the next frame in the call stack\n\t\taddrret := uint64(int64(it.regs.SP()) + int64(it.bi.Arch.PtrSize()))\n\t\tit.frame.Ret, _ = readUintRaw(it.mem, addrret, int64(it.bi.Arch.PtrSize()))\n\t\tit.pc = it.frame.Ret\n\n\t\tit.top = false\n\t\treturn true\n\n\tcase \"runtime.cgocallback_gofunc\", \"runtime.cgocallback\":\n\t\t// For a detailed description of how this works read the long comment at\n\t\t// the start of $GOROOT/src/runtime/cgocall.go and the source code of\n\t\t// runtime.cgocallback_gofunc in $GOROOT/src/runtime/asm_amd64.s\n\t\t//\n\t\t// When a C functions calls back into go it will eventually call into\n\t\t// runtime.cgocallback_gofunc which is the function that does the stack\n\t\t// switch from the system stack back into the goroutine stack\n\t\t// Since we are going backwards on the stack here we see the transition\n\t\t// as goroutine stack -> system stack.\n\t\tif it.top || it.systemstack {\n\t\t\treturn false\n\t\t}\n\n\t\tit.loadG0SchedSP()\n\t\tif it.g0_sched_sp <= 0 {\n\t\t\treturn false\n\t\t}\n\t\t// entering the system stack\n\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = it.g0_sched_sp\n\t\t// reads the previous value of g0.sched.sp that runtime.cgocallback_gofunc saved on the stack\n\t\tit.g0_sched_sp, _ = readUintRaw(it.mem, it.regs.SP(), int64(it.bi.Arch.PtrSize()))\n\t\tit.top = false\n\t\tcallFrameRegs, ret, retaddr := it.advanceRegs()\n\t\tframeOnSystemStack := it.newStackframe(ret, retaddr)\n\t\tit.pc = frameOnSystemStack.Ret\n\t\tit.regs = callFrameRegs\n\t\tit.systemstack = true\n\n\t\treturn true\n\n\tcase \"runtime.goexit\", \"runtime.rt0_go\":\n\t\t// Look for \"top of stack\" functions.\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"runtime.mcall\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"runtime.mstart\":\n\t\t// Calls to runtime.systemstack will switch to the systemstack then:\n\t\t// 1. alter the goroutine stack so that it looks like systemstack_switch\n\t\t//    was called\n\t\t// 2. alter the system stack so that it looks like the bottom-most frame\n\t\t//    belongs to runtime.mstart\n\t\t// If we find a runtime.mstart frame on the system stack of a goroutine\n\t\t// parked on runtime.systemstack_switch we assume runtime.systemstack was\n\t\t// called and continue tracing from the parked position.\n\n\t\tif it.top || !it.systemstack || it.g == nil {\n\t\t\treturn false\n\t\t}\n\t\tif fn := it.bi.PCToFunc(it.g.PC); fn == nil || fn.Name != \"runtime.systemstack_switch\" {\n\t\t\treturn false\n\t\t}\n\n\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\tit.err = err\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\n\tcase \"runtime.newstack\", \"runtime.systemstack\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// amd64RegSize returns the size (in bytes) of register regnum.\n// The mapping between hardware registers and DWARF registers is specified\n// in the System V ABI AMD64 Architecture Processor Supplement page 57,\n// figure 3.36\n// https://www.uclibc.org/docs/psABI-x86_64.pdf\nfunc amd64RegSize(rn uint64) int {\n\t// XMM registers\n\tif rn > regnum.AMD64_Rip && rn <= 32 {\n\t\treturn 16\n\t}\n\t// x87 registers\n\tif rn >= 33 && rn <= 40 {\n\t\treturn 10\n\t}\n\treturn 8\n}\n\nfunc amd64RegistersToDwarfRegisters(staticBase uint64, regs Registers) *op.DwarfRegisters {\n\tdregs := initDwarfRegistersFromSlice(int(regnum.AMD64MaxRegNum()), regs, regnum.AMD64NameToDwarf)\n\tdr := op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.AMD64_Rip, regnum.AMD64_Rsp, regnum.AMD64_Rbp, 0)\n\tdr.SetLoadMoreCallback(loadMoreDwarfRegistersFromSliceFunc(dr, regs, regnum.AMD64NameToDwarf))\n\treturn dr\n}\n\nfunc initDwarfRegistersFromSlice(maxRegs int, regs Registers, nameToDwarf map[string]int) []*op.DwarfRegister {\n\tdregs := make([]*op.DwarfRegister, maxRegs+1)\n\tregslice, _ := regs.Slice(false)\n\tfor _, reg := range regslice {\n\t\tif dwarfReg, ok := nameToDwarf[strings.ToLower(reg.Name)]; ok {\n\t\t\tdregs[dwarfReg] = reg.Reg\n\t\t}\n\t}\n\treturn dregs\n}\n\nfunc loadMoreDwarfRegistersFromSliceFunc(dr *op.DwarfRegisters, regs Registers, nameToDwarf map[string]int) func() {\n\treturn func() {\n\t\tregslice, err := regs.Slice(true)\n\t\tdr.FloatLoadError = err\n\t\tfor _, reg := range regslice {\n\t\t\tname := strings.ToLower(reg.Name)\n\t\t\tif dwarfReg, ok := nameToDwarf[name]; ok {\n\t\t\t\tdr.AddReg(uint64(dwarfReg), reg.Reg)\n\t\t\t} else if reg.Reg.Bytes != nil && (strings.HasPrefix(name, \"ymm\") || strings.HasPrefix(name, \"zmm\")) {\n\t\t\t\txmmIdx, ok := nameToDwarf[\"x\"+name[1:]]\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\txmmReg := dr.Reg(uint64(xmmIdx))\n\t\t\t\tif xmmReg == nil || xmmReg.Bytes == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tnb := make([]byte, 0, len(xmmReg.Bytes)+len(reg.Reg.Bytes))\n\t\t\t\tnb = append(nb, xmmReg.Bytes...)\n\t\t\t\tnb = append(nb, reg.Reg.Bytes...)\n\t\t\t\txmmReg.Bytes = nb\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc amd64AddrAndStackRegsToDwarfRegisters(staticBase, pc, sp, bp, lr uint64) op.DwarfRegisters {\n\tdregs := make([]*op.DwarfRegister, regnum.AMD64_Rip+1)\n\tdregs[regnum.AMD64_Rip] = op.DwarfRegisterFromUint64(pc)\n\tdregs[regnum.AMD64_Rsp] = op.DwarfRegisterFromUint64(sp)\n\tdregs[regnum.AMD64_Rbp] = op.DwarfRegisterFromUint64(bp)\n\n\treturn *op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.AMD64_Rip, regnum.AMD64_Rsp, regnum.AMD64_Rbp, 0)\n}\n\nfunc amd64DwarfRegisterToString(i int, reg *op.DwarfRegister) (name string, floatingPoint bool, repr string) {\n\tname = regnum.AMD64ToName(uint64(i))\n\n\tif reg == nil {\n\t\treturn name, false, \"\"\n\t}\n\n\tswitch n := strings.ToLower(name); n {\n\tcase \"rflags\":\n\t\treturn name, false, eflagsDescription.Describe(reg.Uint64Val, 64)\n\n\tcase \"cw\", \"sw\", \"tw\", \"fop\":\n\t\treturn name, true, fmt.Sprintf(\"%#04x\", reg.Uint64Val)\n\n\tcase \"mxcsr_mask\":\n\t\treturn name, true, fmt.Sprintf(\"%#08x\", reg.Uint64Val)\n\n\tcase \"mxcsr\":\n\t\treturn name, true, mxcsrDescription.Describe(reg.Uint64Val, 32)\n\n\tdefault:\n\t\tif reg.Bytes != nil && strings.HasPrefix(n, \"xmm\") {\n\t\t\treturn name, true, formatSSEReg(name, reg.Bytes)\n\t\t} else if reg.Bytes != nil && strings.HasPrefix(n, \"st(\") {\n\t\t\treturn name, true, formatX87Reg(reg.Bytes)\n\t\t} else if reg.Bytes == nil || (reg.Bytes != nil && len(reg.Bytes) <= 8) {\n\t\t\treturn name, false, fmt.Sprintf(\"%#016x\", reg.Uint64Val)\n\t\t} else {\n\t\t\treturn name, false, fmt.Sprintf(\"%#x\", reg.Bytes)\n\t\t}\n\t}\n}\n\nfunc formatSSEReg(name string, reg []byte) string {\n\tout := new(bytes.Buffer)\n\tformatSSERegInternal(reg, out)\n\tif len(reg) < 32 {\n\t\treturn out.String()\n\t}\n\n\tfmt.Fprintf(out, \"\\n\\t[%sh] \", \"Y\"+name[1:])\n\tformatSSERegInternal(reg[16:], out)\n\n\tif len(reg) < 64 {\n\t\treturn out.String()\n\t}\n\n\tfmt.Fprintf(out, \"\\n\\t[%shl] \", \"Z\"+name[1:])\n\tformatSSERegInternal(reg[32:], out)\n\tfmt.Fprintf(out, \"\\n\\t[%shh] \", \"Z\"+name[1:])\n\tformatSSERegInternal(reg[48:], out)\n\n\treturn out.String()\n}\n\nfunc formatSSERegInternal(xmm []byte, out *bytes.Buffer) {\n\tbuf := bytes.NewReader(xmm)\n\n\tvar vi [16]uint8\n\tfor i := range vi {\n\t\tbinary.Read(buf, binary.LittleEndian, &vi[i])\n\t}\n\n\tfmt.Fprintf(out, \"0x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8], vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])\n\n\tfmt.Fprintf(out, \"\\tv2_int={ %02x%02x%02x%02x%02x%02x%02x%02x %02x%02x%02x%02x%02x%02x%02x%02x }\", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0], vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])\n\n\tfmt.Fprintf(out, \"\\tv4_int={ %02x%02x%02x%02x %02x%02x%02x%02x %02x%02x%02x%02x %02x%02x%02x%02x }\", vi[3], vi[2], vi[1], vi[0], vi[7], vi[6], vi[5], vi[4], vi[11], vi[10], vi[9], vi[8], vi[15], vi[14], vi[13], vi[12])\n\n\tfmt.Fprintf(out, \"\\tv8_int={ %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x %02x%02x }\", vi[1], vi[0], vi[3], vi[2], vi[5], vi[4], vi[7], vi[6], vi[9], vi[8], vi[11], vi[10], vi[13], vi[12], vi[15], vi[14])\n\n\tfmt.Fprintf(out, \"\\tv16_int={ %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x }\", vi[0], vi[1], vi[2], vi[3], vi[4], vi[5], vi[6], vi[7], vi[8], vi[9], vi[10], vi[11], vi[12], vi[13], vi[14], vi[15])\n\n\tbuf.Seek(0, io.SeekStart)\n\tvar v2 [2]float64\n\tfor i := range v2 {\n\t\tbinary.Read(buf, binary.LittleEndian, &v2[i])\n\t}\n\tfmt.Fprintf(out, \"\\tv2_float={ %g %g }\", v2[0], v2[1])\n\n\tbuf.Seek(0, io.SeekStart)\n\tvar v4 [4]float32\n\tfor i := range v4 {\n\t\tbinary.Read(buf, binary.LittleEndian, &v4[i])\n\t}\n\tfmt.Fprintf(out, \"\\tv4_float={ %g %g %g %g }\", v4[0], v4[1], v4[2], v4[3])\n}\n\nfunc formatX87Reg(b []byte) string {\n\tif len(b) < 10 {\n\t\treturn fmt.Sprintf(\"%#x\", b)\n\t}\n\tmantissa := binary.LittleEndian.Uint64(b[:8])\n\texponent := binary.LittleEndian.Uint16(b[8:])\n\n\tvar f float64\n\tfset := false\n\n\tconst (\n\t\t_SIGNBIT    = 1 << 15\n\t\t_EXP_BIAS   = (1 << 14) - 1 // 2^(n-1) - 1 = 16383\n\t\t_SPECIALEXP = (1 << 15) - 1 // all bits set\n\t\t_HIGHBIT    = 1 << 63\n\t\t_QUIETBIT   = 1 << 62\n\t)\n\n\tsign := 1.0\n\tif exponent&_SIGNBIT != 0 {\n\t\tsign = -1.0\n\t}\n\texponent &= ^uint16(_SIGNBIT)\n\n\tNaN := math.NaN()\n\tInf := math.Inf(+1)\n\n\tswitch exponent {\n\tcase 0:\n\t\tswitch {\n\t\tcase mantissa == 0:\n\t\t\tf = sign * 0.0\n\t\t\tfset = true\n\t\tcase mantissa&_HIGHBIT != 0:\n\t\t\tf = NaN\n\t\t\tfset = true\n\t\t}\n\tcase _SPECIALEXP:\n\t\tswitch {\n\t\tcase mantissa&_HIGHBIT == 0:\n\t\t\tf = sign * Inf\n\t\t\tfset = true\n\t\tdefault:\n\t\t\tf = NaN // signaling NaN\n\t\t\tfset = true\n\t\t}\n\tdefault:\n\t\tif mantissa&_HIGHBIT == 0 {\n\t\t\tf = NaN\n\t\t\tfset = true\n\t\t}\n\t}\n\n\tif !fset {\n\t\tsignificand := float64(mantissa) / (1 << 63)\n\t\tf = sign * math.Ldexp(significand, int(exponent-_EXP_BIAS))\n\t}\n\n\tvar buf bytes.Buffer\n\tbinary.Write(&buf, binary.LittleEndian, exponent)\n\tbinary.Write(&buf, binary.LittleEndian, mantissa)\n\n\treturn fmt.Sprintf(\"%#04x%016x\\t%g\", exponent, mantissa, f)\n}\n"
  },
  {
    "path": "pkg/proc/amd64_disasm.go",
    "content": "// TODO: disassembler support should be compiled in unconditionally,\n// instead of being decided by the build-target architecture, and be\n// part of the Arch object instead.\n\npackage proc\n\nimport (\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\n\t\"golang.org/x/arch/x86/x86asm\"\n)\n\nfunc amd64AsmDecode(asmInst *AsmInstruction, mem []byte, regs *op.DwarfRegisters, memrw MemoryReadWriter, bi *BinaryInfo) error {\n\treturn x86AsmDecode(asmInst, mem, regs, memrw, bi, 64)\n}\n\n// Possible stacksplit prologues are inserted by stacksplit in\n// $GOROOT/src/cmd/internal/obj/x86/obj6.go.\n// The stacksplit prologue will always begin with loading curg in CX, this\n// instruction is added by load_g_cx in the same file and is either 1 or 2\n// MOVs.\nvar prologuesAMD64 []opcodeSeq\n\nfunc init() {\n\tvar tinyStacksplit = opcodeSeq{uint64(x86asm.CMP), uint64(x86asm.JBE)}\n\tvar smallStacksplit = opcodeSeq{uint64(x86asm.LEA), uint64(x86asm.CMP), uint64(x86asm.JBE)}\n\tvar bigStacksplit = opcodeSeq{uint64(x86asm.MOV), uint64(x86asm.CMP), uint64(x86asm.JE), uint64(x86asm.LEA), uint64(x86asm.SUB), uint64(x86asm.CMP), uint64(x86asm.JBE)}\n\tvar unixGetG = opcodeSeq{uint64(x86asm.MOV)}\n\tvar windowsGetG = opcodeSeq{uint64(x86asm.MOV), uint64(x86asm.MOV)}\n\n\tprologuesAMD64 = make([]opcodeSeq, 0, 2*3)\n\tfor _, getG := range []opcodeSeq{unixGetG, windowsGetG} {\n\t\tfor _, stacksplit := range []opcodeSeq{tinyStacksplit, smallStacksplit, bigStacksplit} {\n\t\t\tprologue := make(opcodeSeq, 0, len(getG)+len(stacksplit))\n\t\t\tprologue = append(prologue, getG...)\n\t\t\tprologue = append(prologue, stacksplit...)\n\t\t\tprologuesAMD64 = append(prologuesAMD64, prologue)\n\t\t}\n\t}\n}\n\nvar amd64AsmRegisters = map[int]asmRegister{\n\t// 8-bit\n\tint(x86asm.AL):   {regnum.AMD64_Rax, 0, mask8},\n\tint(x86asm.CL):   {regnum.AMD64_Rcx, 0, mask8},\n\tint(x86asm.DL):   {regnum.AMD64_Rdx, 0, mask8},\n\tint(x86asm.BL):   {regnum.AMD64_Rbx, 0, mask8},\n\tint(x86asm.AH):   {regnum.AMD64_Rax, 8, mask8},\n\tint(x86asm.CH):   {regnum.AMD64_Rcx, 8, mask8},\n\tint(x86asm.DH):   {regnum.AMD64_Rdx, 8, mask8},\n\tint(x86asm.BH):   {regnum.AMD64_Rbx, 8, mask8},\n\tint(x86asm.SPB):  {regnum.AMD64_Rsp, 0, mask8},\n\tint(x86asm.BPB):  {regnum.AMD64_Rbp, 0, mask8},\n\tint(x86asm.SIB):  {regnum.AMD64_Rsi, 0, mask8},\n\tint(x86asm.DIB):  {regnum.AMD64_Rdi, 0, mask8},\n\tint(x86asm.R8B):  {regnum.AMD64_R8, 0, mask8},\n\tint(x86asm.R9B):  {regnum.AMD64_R9, 0, mask8},\n\tint(x86asm.R10B): {regnum.AMD64_R10, 0, mask8},\n\tint(x86asm.R11B): {regnum.AMD64_R11, 0, mask8},\n\tint(x86asm.R12B): {regnum.AMD64_R12, 0, mask8},\n\tint(x86asm.R13B): {regnum.AMD64_R13, 0, mask8},\n\tint(x86asm.R14B): {regnum.AMD64_R14, 0, mask8},\n\tint(x86asm.R15B): {regnum.AMD64_R15, 0, mask8},\n\n\t// 16-bit\n\tint(x86asm.AX):   {regnum.AMD64_Rax, 0, mask16},\n\tint(x86asm.CX):   {regnum.AMD64_Rcx, 0, mask16},\n\tint(x86asm.DX):   {regnum.AMD64_Rdx, 0, mask16},\n\tint(x86asm.BX):   {regnum.AMD64_Rbx, 0, mask16},\n\tint(x86asm.SP):   {regnum.AMD64_Rsp, 0, mask16},\n\tint(x86asm.BP):   {regnum.AMD64_Rbp, 0, mask16},\n\tint(x86asm.SI):   {regnum.AMD64_Rsi, 0, mask16},\n\tint(x86asm.DI):   {regnum.AMD64_Rdi, 0, mask16},\n\tint(x86asm.R8W):  {regnum.AMD64_R8, 0, mask16},\n\tint(x86asm.R9W):  {regnum.AMD64_R9, 0, mask16},\n\tint(x86asm.R10W): {regnum.AMD64_R10, 0, mask16},\n\tint(x86asm.R11W): {regnum.AMD64_R11, 0, mask16},\n\tint(x86asm.R12W): {regnum.AMD64_R12, 0, mask16},\n\tint(x86asm.R13W): {regnum.AMD64_R13, 0, mask16},\n\tint(x86asm.R14W): {regnum.AMD64_R14, 0, mask16},\n\tint(x86asm.R15W): {regnum.AMD64_R15, 0, mask16},\n\n\t// 32-bit\n\tint(x86asm.EAX):  {regnum.AMD64_Rax, 0, mask32},\n\tint(x86asm.ECX):  {regnum.AMD64_Rcx, 0, mask32},\n\tint(x86asm.EDX):  {regnum.AMD64_Rdx, 0, mask32},\n\tint(x86asm.EBX):  {regnum.AMD64_Rbx, 0, mask32},\n\tint(x86asm.ESP):  {regnum.AMD64_Rsp, 0, mask32},\n\tint(x86asm.EBP):  {regnum.AMD64_Rbp, 0, mask32},\n\tint(x86asm.ESI):  {regnum.AMD64_Rsi, 0, mask32},\n\tint(x86asm.EDI):  {regnum.AMD64_Rdi, 0, mask32},\n\tint(x86asm.R8L):  {regnum.AMD64_R8, 0, mask32},\n\tint(x86asm.R9L):  {regnum.AMD64_R9, 0, mask32},\n\tint(x86asm.R10L): {regnum.AMD64_R10, 0, mask32},\n\tint(x86asm.R11L): {regnum.AMD64_R11, 0, mask32},\n\tint(x86asm.R12L): {regnum.AMD64_R12, 0, mask32},\n\tint(x86asm.R13L): {regnum.AMD64_R13, 0, mask32},\n\tint(x86asm.R14L): {regnum.AMD64_R14, 0, mask32},\n\tint(x86asm.R15L): {regnum.AMD64_R15, 0, mask32},\n\n\t// 64-bit\n\tint(x86asm.RAX): {regnum.AMD64_Rax, 0, 0},\n\tint(x86asm.RCX): {regnum.AMD64_Rcx, 0, 0},\n\tint(x86asm.RDX): {regnum.AMD64_Rdx, 0, 0},\n\tint(x86asm.RBX): {regnum.AMD64_Rbx, 0, 0},\n\tint(x86asm.RSP): {regnum.AMD64_Rsp, 0, 0},\n\tint(x86asm.RBP): {regnum.AMD64_Rbp, 0, 0},\n\tint(x86asm.RSI): {regnum.AMD64_Rsi, 0, 0},\n\tint(x86asm.RDI): {regnum.AMD64_Rdi, 0, 0},\n\tint(x86asm.R8):  {regnum.AMD64_R8, 0, 0},\n\tint(x86asm.R9):  {regnum.AMD64_R9, 0, 0},\n\tint(x86asm.R10): {regnum.AMD64_R10, 0, 0},\n\tint(x86asm.R11): {regnum.AMD64_R11, 0, 0},\n\tint(x86asm.R12): {regnum.AMD64_R12, 0, 0},\n\tint(x86asm.R13): {regnum.AMD64_R13, 0, 0},\n\tint(x86asm.R14): {regnum.AMD64_R14, 0, 0},\n\tint(x86asm.R15): {regnum.AMD64_R15, 0, 0},\n}\n"
  },
  {
    "path": "pkg/proc/amd64util/debugregs.go",
    "content": "package amd64util\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// DebugRegisters represents x86 debug registers described in the Intel 64\n// and IA-32 Architectures Software Developer's Manual, Vol. 3B, section\n// 17.2\ntype DebugRegisters struct {\n\tpAddrs     [4]*uint64\n\tpDR6, pDR7 *uint64\n\tDirty      bool\n}\n\nfunc NewDebugRegisters(pDR0, pDR1, pDR2, pDR3, pDR6, pDR7 *uint64) *DebugRegisters {\n\treturn &DebugRegisters{\n\t\tpAddrs: [4]*uint64{pDR0, pDR1, pDR2, pDR3},\n\t\tpDR6:   pDR6,\n\t\tpDR7:   pDR7,\n\t\tDirty:  false,\n\t}\n}\n\nfunc lenrwBitsOffset(idx uint8) uint8 {\n\treturn 16 + idx*4\n}\n\nfunc enableBitOffset(idx uint8) uint8 {\n\treturn idx * 2\n}\n\nfunc (drs *DebugRegisters) breakpoint(idx uint8) (addr uint64, read, write bool, sz int) {\n\tenable := *(drs.pDR7) & (1 << enableBitOffset(idx))\n\tif enable == 0 {\n\t\treturn 0, false, false, 0\n\t}\n\n\taddr = *(drs.pAddrs[idx])\n\tlenrw := (*(drs.pDR7) >> lenrwBitsOffset(idx)) & 0xf\n\twrite = (lenrw & 0x1) != 0\n\tread = (lenrw & 0x2) != 0\n\tswitch lenrw >> 2 {\n\tcase 0x0:\n\t\tsz = 1\n\tcase 0x1:\n\t\tsz = 2\n\tcase 0x2:\n\t\tsz = 8 // sic\n\tcase 0x3:\n\t\tsz = 4\n\t}\n\treturn addr, read, write, sz\n}\n\n// SetBreakpoint sets hardware breakpoint at index 'idx' to the specified\n// address, read/write flags and size.\n// If the breakpoint is already in use but the parameters match it does\n// nothing.\nfunc (drs *DebugRegisters) SetBreakpoint(idx uint8, addr uint64, read, write bool, sz int) error {\n\tif int(idx) >= len(drs.pAddrs) {\n\t\treturn errors.New(\"hardware breakpoints exhausted\")\n\t}\n\tcuraddr, curread, curwrite, cursz := drs.breakpoint(idx)\n\tif curaddr != 0 {\n\t\tif (curaddr != addr) || (curread != read) || (curwrite != write) || (cursz != sz) {\n\t\t\treturn fmt.Errorf(\"hardware breakpoint %d already in use (address %#x)\", idx, curaddr)\n\t\t}\n\t\t// hardware breakpoint already set\n\t\treturn nil\n\t}\n\n\tif read && !write {\n\t\treturn errors.New(\"break on read only not supported\")\n\t}\n\n\t*(drs.pAddrs[idx]) = addr\n\tvar lenrw uint64\n\tif write {\n\t\tlenrw |= 0x1\n\t}\n\tif read {\n\t\tlenrw |= 0x2\n\t}\n\tswitch sz {\n\tcase 1:\n\t\t// already ok\n\tcase 2:\n\t\tlenrw |= 0x1 << 2\n\tcase 4:\n\t\tlenrw |= 0x3 << 2\n\tcase 8:\n\t\tlenrw |= 0x2 << 2\n\tdefault:\n\t\treturn fmt.Errorf(\"data breakpoint of size %d not supported\", sz)\n\t}\n\t*(drs.pDR7) &^= (0xf << lenrwBitsOffset(idx)) // clear old settings\n\t*(drs.pDR7) |= lenrw << lenrwBitsOffset(idx)\n\t*(drs.pDR7) |= 1 << enableBitOffset(idx) // enable\n\tdrs.Dirty = true\n\treturn nil\n}\n\n// ClearBreakpoint disables the hardware breakpoint at index 'idx'. If the\n// breakpoint was already disabled it does nothing.\nfunc (drs *DebugRegisters) ClearBreakpoint(idx uint8) {\n\tif *(drs.pDR7)&(1<<enableBitOffset(idx)) == 0 {\n\t\treturn\n\t}\n\t*(drs.pDR7) &^= (1 << enableBitOffset(idx))\n\tdrs.Dirty = true\n}\n\n// GetActiveBreakpoint returns the active hardware breakpoint and resets the\n// condition flags.\nfunc (drs *DebugRegisters) GetActiveBreakpoint() (ok bool, idx uint8) {\n\tfor idx := uint8(0); idx <= 3; idx++ {\n\t\tenable := *(drs.pDR7) & (1 << enableBitOffset(idx))\n\t\tif enable == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif *(drs.pDR6)&(1<<idx) != 0 {\n\t\t\t*drs.pDR6 &^= 0xf // it is our responsibility to clear the condition bits\n\t\t\tdrs.Dirty = true\n\t\t\treturn true, idx\n\t\t}\n\t}\n\treturn false, 0\n}\n"
  },
  {
    "path": "pkg/proc/amd64util/xsave.go",
    "content": "package amd64util\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// AMD64Xstate represents amd64 XSAVE area. See Section 13.1 (and\n// following) of Intel® 64 and IA-32 Architectures Software Developer’s\n// Manual, Volume 1: Basic Architecture.\ntype AMD64Xstate struct {\n\tAMD64PtraceFpRegs\n\tXsave       []byte // raw xsave area\n\tAvxState    bool   // contains AVX state\n\tYmmSpace    [256]byte\n\tAvx512State bool // contains AVX512 state\n\tZmmSpace    [512]byte\n\n\tzmmHi256offset int\n}\n\n// AMD64PtraceFpRegs tracks user_fpregs_struct in /usr/include/x86_64-linux-gnu/sys/user.h\ntype AMD64PtraceFpRegs struct {\n\tCwd      uint16\n\tSwd      uint16\n\tFtw      uint16\n\tFop      uint16\n\tRip      uint64\n\tRdp      uint64\n\tMxcsr    uint32\n\tMxcrMask uint32\n\tStSpace  [32]uint32\n\tXmmSpace [256]byte\n\tPadding  [24]uint32\n}\n\n// Decode decodes an XSAVE area to a list of name/value pairs of registers.\nfunc (xstate *AMD64Xstate) Decode() []proc.Register {\n\tvar regs []proc.Register\n\t// x87 registers\n\tregs = proc.AppendUint64Register(regs, \"CW\", uint64(xstate.Cwd))\n\tregs = proc.AppendUint64Register(regs, \"SW\", uint64(xstate.Swd))\n\tregs = proc.AppendUint64Register(regs, \"TW\", uint64(xstate.Ftw))\n\tregs = proc.AppendUint64Register(regs, \"FOP\", uint64(xstate.Fop))\n\tregs = proc.AppendUint64Register(regs, \"FIP\", xstate.Rip)\n\tregs = proc.AppendUint64Register(regs, \"FDP\", xstate.Rdp)\n\n\tfor i := 0; i < len(xstate.StSpace); i += 4 {\n\t\tvar buf bytes.Buffer\n\t\tbinary.Write(&buf, binary.LittleEndian, uint64(xstate.StSpace[i+1])<<32|uint64(xstate.StSpace[i]))\n\t\tbinary.Write(&buf, binary.LittleEndian, uint16(xstate.StSpace[i+2]))\n\t\tregs = proc.AppendBytesRegister(regs, fmt.Sprintf(\"ST(%d)\", i/4), buf.Bytes())\n\t}\n\n\t// SSE registers\n\tregs = proc.AppendUint64Register(regs, \"MXCSR\", uint64(xstate.Mxcsr))\n\tregs = proc.AppendUint64Register(regs, \"MXCSR_MASK\", uint64(xstate.MxcrMask))\n\n\tfor i := 0; i < len(xstate.XmmSpace); i += 16 {\n\t\tn := i / 16\n\t\tregs = proc.AppendBytesRegister(regs, fmt.Sprintf(\"XMM%d\", n), xstate.XmmSpace[i:i+16])\n\t\tif xstate.AvxState {\n\t\t\tregs = proc.AppendBytesRegister(regs, fmt.Sprintf(\"YMM%d\", n), xstate.YmmSpace[i:i+16])\n\t\t\tif xstate.Avx512State {\n\t\t\t\tregs = proc.AppendBytesRegister(regs, fmt.Sprintf(\"ZMM%d\", n), xstate.ZmmSpace[n*32:(n+1)*32])\n\t\t\t}\n\t\t}\n\t}\n\n\treturn regs\n}\n\nconst (\n\t_XSAVE_XMM_REGION_START       = 160\n\t_XSAVE_HEADER_START           = 512\n\t_XSAVE_HEADER_LEN             = 64\n\t_XSAVE_EXTENDED_REGION_START  = 576\n\t_XSAVE_SSE_REGION_LEN         = 416\n\t_I386_LINUX_XSAVE_XCR0_OFFSET = 464\n)\n\n// xstate_bv is a type representing the xcr0 and xstate_bv bitmaps as\n// described in section 13.1 and 13.3 of the Intel® 64 and IA-32 Architectures\n// Software Developer’s Manual, Volume 1\ntype xstate_bv uint64\n\nfunc (s xstate_bv) hasAVX() bool       { return s&(1<<2) != 0 }\nfunc (s xstate_bv) hasZMM_Hi256() bool { return s&(1<<6) != 0 }\nfunc (s xstate_bv) hasHi16_ZMM() bool  { return s&(1<<7) != 0 } //lint:ignore U1000 future use\nfunc (s xstate_bv) hasPKRU() bool      { return s&(1<<9) != 0 }\n\n// AMD64XstateRead reads a byte array containing an XSAVE area into regset.\n// If readLegacy is true regset.PtraceFpRegs will be filled with the\n// contents of the legacy region of the XSAVE area.\n// See Section 13.1 (and following) of Intel® 64 and IA-32 Architectures\n// Software Developer’s Manual, Volume 1: Basic Architecture.\n// If xstateZMMHi256Offset is zero, it will be guessed.\nfunc AMD64XstateRead(xstateargs []byte, readLegacy bool, regset *AMD64Xstate, xstateZMMHi256Offset int) error {\n\tif _XSAVE_HEADER_START+_XSAVE_HEADER_LEN >= len(xstateargs) {\n\t\treturn nil\n\t}\n\tif readLegacy {\n\t\trdr := bytes.NewReader(xstateargs[:_XSAVE_HEADER_START])\n\t\tif err := binary.Read(rdr, binary.LittleEndian, &regset.AMD64PtraceFpRegs); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\txcr0 := xstate_bv(binary.LittleEndian.Uint64(xstateargs[_I386_LINUX_XSAVE_XCR0_OFFSET:][:8]))\n\txsaveheader := xstateargs[_XSAVE_HEADER_START : _XSAVE_HEADER_START+_XSAVE_HEADER_LEN]\n\txstate_bv := xstate_bv(binary.LittleEndian.Uint64(xsaveheader[0:8]))\n\txcomp_bv := binary.LittleEndian.Uint64(xsaveheader[8:16])\n\n\tif xcomp_bv&(1<<63) != 0 {\n\t\t// compact format not supported\n\t\treturn nil\n\t}\n\n\tif !xstate_bv.hasAVX() {\n\t\treturn nil\n\t}\n\n\tavxstate := xstateargs[_XSAVE_EXTENDED_REGION_START:]\n\tregset.AvxState = true\n\tcopy(regset.YmmSpace[:], avxstate[:len(regset.YmmSpace)])\n\n\tif !xstate_bv.hasZMM_Hi256() {\n\t\treturn nil\n\t}\n\n\tif xstateZMMHi256Offset == 0 {\n\t\t// Guess ZMM_Hi256 component offset\n\t\t// ref: https://github.com/bminor/binutils-gdb/blob/df89bdf0baf106c3b0a9fae53e4e48607a7f3f87/gdb/i387-tdep.c#L916\n\t\tif xcr0.hasPKRU() && len(xstateargs) == 2440 {\n\t\t\t// AMD CPUs supporting PKRU\n\t\t\txstateZMMHi256Offset = 896\n\t\t} else {\n\t\t\t// Intel CPUs supporting AVX512\n\t\t\txstateZMMHi256Offset = 1152\n\t\t}\n\t}\n\n\tregset.zmmHi256offset = xstateZMMHi256Offset\n\n\tavx512state := xstateargs[xstateZMMHi256Offset:]\n\tregset.Avx512State = true\n\tcopy(regset.ZmmSpace[:], avx512state[:len(regset.ZmmSpace)])\n\n\t// TODO(aarzilli): if xstate_bv.hasHi16_ZMM() is set then xstateargs[1664:2688]\n\t// contains ZMM16 through ZMM31, those aren't just the higher 256bits, it's\n\t// the full register so each is 64 bytes (512bits)\n\n\treturn nil\n}\n\nfunc (xstate *AMD64Xstate) SetXmmRegister(n int, value []byte) error {\n\tif n >= 16 {\n\t\treturn fmt.Errorf(\"setting register XMM%d not supported\", n)\n\t}\n\tif len(value) > 64 {\n\t\treturn fmt.Errorf(\"value of register XMM%d too large (%d bytes)\", n, len(value))\n\t}\n\n\t// Copy least significant 16 bytes to Xsave area\n\n\txmmval := value\n\tif len(xmmval) > 16 {\n\t\txmmval = xmmval[:16]\n\t}\n\trest := value[len(xmmval):]\n\n\txmmpos := _XSAVE_XMM_REGION_START + (n * 16)\n\tif xmmpos >= len(xstate.Xsave) {\n\t\treturn fmt.Errorf(\"could not set XMM%d: not in XSAVE area\", n)\n\t}\n\n\tcopy(xstate.Xsave[xmmpos:], xmmval)\n\n\tif len(rest) == 0 {\n\t\treturn nil\n\t}\n\n\t// Copy bytes [16, 32) to Xsave area\n\n\tymmval := rest\n\tif len(ymmval) > 16 {\n\t\tymmval = ymmval[:16]\n\t}\n\trest = rest[len(ymmval):]\n\n\tymmpos := _XSAVE_EXTENDED_REGION_START + (n * 16)\n\tif ymmpos >= len(xstate.Xsave) {\n\t\treturn fmt.Errorf(\"could not set XMM%d: bytes 16..%d not in XSAVE area\", n, 16+len(ymmval))\n\t}\n\n\tcopy(xstate.Xsave[ymmpos:], ymmval)\n\n\tif len(rest) == 0 {\n\t\treturn nil\n\t}\n\n\t// Copy bytes [32, 64) to Xsave area\n\n\tzmmval := rest\n\tzmmpos := xstate.zmmHi256offset + (n * 32) //TODO: change this!!!\n\tif zmmpos >= len(xstate.Xsave) {\n\t\treturn fmt.Errorf(\"could not set XMM%d: bytes 32..%d not in XSAVE area\", n, 32+len(zmmval))\n\t}\n\n\tcopy(xstate.Xsave[zmmpos:], zmmval)\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/arch.go",
    "content": "package proc\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n)\n\n// Arch represents a CPU architecture.\ntype Arch struct {\n\tName string // architecture name\n\n\tptrSize                  int\n\tmaxInstructionLength     int\n\tprologues                []opcodeSeq\n\tbreakpointInstruction    []byte\n\taltBreakpointInstruction []byte\n\tbreakInstrMovesPC        bool\n\tderefTLS                 bool\n\tusesLR                   bool // architecture uses a link register, also called RA on some architectures\n\tPCRegNum                 uint64\n\tSPRegNum                 uint64\n\tBPRegNum                 uint64\n\tContextRegNum            uint64 // register used to pass a closure context when calling a function pointer\n\tLRRegNum                 uint64\n\n\t// asmDecode decodes the assembly instruction starting at mem[0:] into asmInst.\n\t// It assumes that the Loc and AtPC fields of asmInst have already been filled.\n\tasmDecode func(asmInst *AsmInstruction, mem []byte, regs *op.DwarfRegisters, memrw MemoryReadWriter, bi *BinaryInfo) error\n\t// fixFrameUnwindContext applies architecture specific rules for unwinding a stack frame\n\t// on the given arch.\n\tfixFrameUnwindContext func(*frame.FrameContext, uint64, *BinaryInfo) *frame.FrameContext\n\t// switchStack will use the current frame to determine if it's time to\n\t// switch between the system stack and the goroutine stack or vice versa.\n\tswitchStack func(it *stackIterator, callFrameRegs *op.DwarfRegisters) bool\n\t// regSize returns the size (in bytes) of register regnum.\n\tregSize func(uint64) int\n\t// RegistersToDwarfRegisters maps hardware registers to DWARF registers.\n\tRegistersToDwarfRegisters func(uint64, Registers) *op.DwarfRegisters\n\t// addrAndStackRegsToDwarfRegisters returns DWARF registers from the passed in\n\t// PC, SP, and BP registers in the format used by the DWARF expression interpreter.\n\taddrAndStackRegsToDwarfRegisters func(uint64, uint64, uint64, uint64, uint64) op.DwarfRegisters\n\t// DwarfRegisterToString returns the name and value representation of the\n\t// given register, the register value can be nil in which case only the\n\t// register name will be returned.\n\tDwarfRegisterToString DwarfRegisterToStringFunc\n\t// inhibitStepInto returns whether StepBreakpoint can be set at pc.\n\tinhibitStepInto     func(bi *BinaryInfo, pc uint64) bool\n\tRegisterNameToDwarf func(s string) (int, bool)\n\tRegnumToString      func(uint64) string\n\t// debugCallMinStackSize is the minimum stack size for call injection on this architecture.\n\tdebugCallMinStackSize uint64\n\t// maxRegArgBytes is extra padding for ABI1 call injections, equivalent to\n\t// the maximum space occupied by register arguments.\n\tmaxRegArgBytes int\n\t// argumentRegs are function call injection registers for runtimeOptimizedWorkaround\n\targumentRegs []int\n\n\t// asmRegisters maps assembly register numbers to dwarf registers.\n\tasmRegisters map[int]asmRegister\n\n\t// crosscall2fn is the DIE of crosscall2, a function used by the go runtime\n\t// to call C functions. This function in go 1.9 (and previous versions) had\n\t// a bad frame descriptor which needs to be fixed to generate good stack\n\t// traces.\n\tcrosscall2fn *Function\n\n\t// sigreturnfn is the DIE of runtime.sigreturn, the return trampoline for\n\t// the signal handler. See comment in FixFrameUnwindContext for a\n\t// description of why this is needed.\n\tsigreturnfn *Function\n}\n\ntype asmRegister struct {\n\tdwarfNum uint64\n\toffset   uint\n\tmask     uint64\n}\n\nconst (\n\tmask8  = 0x000000ff\n\tmask16 = 0x0000ffff\n\tmask32 = 0xffffffff\n)\n\ntype DwarfRegisterToStringFunc func(int, *op.DwarfRegister) (string, bool, string)\n\n// PtrSize returns the size of a pointer for the architecture.\nfunc (a *Arch) PtrSize() int {\n\treturn a.ptrSize\n}\n\n// MaxInstructionLength is the maximum size in bytes of an instruction.\nfunc (a *Arch) MaxInstructionLength() int {\n\treturn a.maxInstructionLength\n}\n\n// BreakpointInstruction is the instruction that will trigger a breakpoint trap for\n// the given architecture.\nfunc (a *Arch) BreakpointInstruction() []byte {\n\treturn a.breakpointInstruction\n}\n\n// AltBreakpointInstruction returns an alternate encoding for the breakpoint instruction.\nfunc (a *Arch) AltBreakpointInstruction() []byte {\n\treturn a.altBreakpointInstruction\n}\n\n// BreakInstrMovesPC is true if hitting the breakpoint instruction advances the\n// instruction counter by the size of the breakpoint instruction.\nfunc (a *Arch) BreakInstrMovesPC() bool {\n\treturn a.breakInstrMovesPC\n}\n\n// BreakpointSize is the size of the breakpoint instruction for the given architecture.\nfunc (a *Arch) BreakpointSize() int {\n\treturn len(a.breakpointInstruction)\n}\n\n// DerefTLS is true if the G struct stored in the TLS section is a pointer\n// and the address must be dereferenced to find to actual G struct.\nfunc (a *Arch) DerefTLS() bool {\n\treturn a.derefTLS\n}\n\n// getAsmRegister returns the value of the asm register asmreg using the asmRegisters table of arch.\n// The interpretation of asmreg is architecture specific and defined by the disassembler.\n// A mask value of 0 inside asmRegisters is equivalent to ^uint64(0).\nfunc (a *Arch) getAsmRegister(regs *op.DwarfRegisters, asmreg int) (uint64, error) {\n\thwreg, ok := a.asmRegisters[asmreg]\n\tif !ok {\n\t\treturn 0, ErrUnknownRegister\n\t}\n\treg := regs.Reg(hwreg.dwarfNum)\n\tif reg == nil {\n\t\treturn 0, fmt.Errorf(\"register %#x not found\", asmreg)\n\t}\n\tn := (reg.Uint64Val >> hwreg.offset)\n\tif hwreg.mask != 0 {\n\t\tn = n & hwreg.mask\n\t}\n\treturn n, nil\n}\n\nfunc nameToDwarfFunc(n2d map[string]int) func(string) (int, bool) {\n\treturn func(name string) (int, bool) {\n\t\tr, ok := n2d[strings.ToLower(name)]\n\t\treturn r, ok\n\t}\n}\n\n// crosscall2 is defined in $GOROOT/src/runtime/cgo/asm_amd64.s.\nconst (\n\tcrosscall2SPOffsetBad          = 0x8\n\tcrosscall2SPOffsetWindowsAMD64 = 0x118\n\tcrosscall2SPOffsetLinuxPPC64LE = 0x158\n\tcrosscall2SPOffset             = 0x58\n)\n"
  },
  {
    "path": "pkg/proc/arm64_arch.go",
    "content": "package proc\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"runtime\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n)\n\nvar arm64BreakInstruction = []byte{0x0, 0x0, 0x20, 0xd4}\n\n// Windows ARM64 expects a breakpoint to be compiled to the instruction BRK #0xF000.\n// See go.dev/issues/53837.\nvar arm64WindowsBreakInstruction = []byte{0x0, 0x0, 0x3e, 0xd4}\n\n// ARM64Arch returns an initialized ARM64\n// struct.\nfunc ARM64Arch(goos string) *Arch {\n\tvar brk []byte\n\tif goos == \"windows\" {\n\t\tbrk = arm64WindowsBreakInstruction\n\t} else {\n\t\tbrk = arm64BreakInstruction\n\t}\n\treturn &Arch{\n\t\tName:                             \"arm64\",\n\t\tptrSize:                          8,\n\t\tmaxInstructionLength:             4,\n\t\tbreakpointInstruction:            brk,\n\t\tbreakInstrMovesPC:                goos == \"windows\",\n\t\tderefTLS:                         false,\n\t\tprologues:                        prologuesARM64,\n\t\tfixFrameUnwindContext:            arm64FixFrameUnwindContext,\n\t\tswitchStack:                      arm64SwitchStack,\n\t\tregSize:                          arm64RegSize,\n\t\tRegistersToDwarfRegisters:        arm64RegistersToDwarfRegisters,\n\t\taddrAndStackRegsToDwarfRegisters: arm64AddrAndStackRegsToDwarfRegisters,\n\t\tDwarfRegisterToString:            arm64DwarfRegisterToString,\n\t\tinhibitStepInto:                  func(*BinaryInfo, uint64) bool { return false },\n\t\tasmDecode:                        arm64AsmDecode,\n\t\tusesLR:                           true,\n\t\tPCRegNum:                         regnum.ARM64_PC,\n\t\tSPRegNum:                         regnum.ARM64_SP,\n\t\tContextRegNum:                    regnum.ARM64_X0 + 26,\n\t\tLRRegNum:                         regnum.ARM64_LR,\n\t\tasmRegisters:                     arm64AsmRegisters,\n\t\tRegisterNameToDwarf:              nameToDwarfFunc(regnum.ARM64NameToDwarf),\n\t\tRegnumToString:                   regnum.ARM64ToName,\n\t\tdebugCallMinStackSize:            288,\n\t\tmaxRegArgBytes:                   16*8 + 16*8, // 16 int argument registers plus 16 float argument registers\n\t\targumentRegs:                     []int{regnum.ARM64_X0, regnum.ARM64_X0 + 1, regnum.ARM64_X0 + 2},\n\t}\n}\n\nfunc arm64FixFrameUnwindContext(fctxt *frame.FrameContext, pc uint64, bi *BinaryInfo) *frame.FrameContext {\n\ta := bi.Arch\n\tif a.sigreturnfn == nil {\n\t\ta.sigreturnfn = bi.lookupOneFunc(\"runtime.sigreturn\")\n\t}\n\n\tif fctxt == nil || (a.sigreturnfn != nil && pc >= a.sigreturnfn.Entry && pc < a.sigreturnfn.End) {\n\t\t// When there's no frame descriptor entry use BP (the frame pointer) instead\n\t\t// - return register is [bp + a.PtrSize()] (i.e. [cfa-a.PtrSize()])\n\t\t// - cfa is bp + a.PtrSize()*2\n\t\t// - bp is [bp] (i.e. [cfa-a.PtrSize()*2])\n\t\t// - sp is cfa\n\n\t\t// When the signal handler runs it will move the execution to the signal\n\t\t// handling stack (installed using the sigaltstack system call).\n\t\t// This isn't a proper stack switch: the pointer to g in TLS will still\n\t\t// refer to whatever g was executing on that thread before the signal was\n\t\t// received.\n\t\t// Since go did not execute a stack switch the previous value of sp, pc\n\t\t// and bp is not saved inside g.sched, as it normally would.\n\t\t// The only way to recover is to either read sp/pc from the signal context\n\t\t// parameter (the ucontext_t* parameter) or to unconditionally follow the\n\t\t// frame pointer when we get to runtime.sigreturn (which is what we do\n\t\t// here).\n\n\t\treturn &frame.FrameContext{\n\t\t\tRetAddrReg: regnum.ARM64_PC,\n\t\t\tRegs: map[uint64]frame.DWRule{\n\t\t\t\tregnum.ARM64_PC: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-a.PtrSize()),\n\t\t\t\t},\n\t\t\t\tregnum.ARM64_BP: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-2 * a.PtrSize()),\n\t\t\t\t},\n\t\t\t\tregnum.ARM64_SP: {\n\t\t\t\t\tRule:   frame.RuleValOffset,\n\t\t\t\t\tOffset: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\tCFA: frame.DWRule{\n\t\t\t\tRule:   frame.RuleCFA,\n\t\t\t\tReg:    regnum.ARM64_BP,\n\t\t\t\tOffset: int64(2 * a.PtrSize()),\n\t\t\t},\n\t\t}\n\t}\n\n\tif a.crosscall2fn == nil {\n\t\ta.crosscall2fn = bi.lookupOneFunc(\"crosscall2\")\n\t}\n\n\tif a.crosscall2fn != nil && pc >= a.crosscall2fn.Entry && pc < a.crosscall2fn.End {\n\t\trule := fctxt.CFA\n\t\tif rule.Offset == crosscall2SPOffsetBad {\n\t\t\trule.Offset += crosscall2SPOffset\n\t\t}\n\t\tfctxt.CFA = rule\n\t}\n\n\t// We assume that RBP is the frame pointer, and we want to keep it updated,\n\t// so that we can use it to unwind the stack even when we encounter frames\n\t// without descriptor entries.\n\t// If there isn't a rule already we emit one.\n\tif fctxt.Regs[regnum.ARM64_BP].Rule == frame.RuleUndefined {\n\t\tfctxt.Regs[regnum.ARM64_BP] = frame.DWRule{\n\t\t\tRule:   frame.RuleFramePointer,\n\t\t\tReg:    regnum.ARM64_BP,\n\t\t\tOffset: 0,\n\t\t}\n\t}\n\tif fctxt.Regs[regnum.ARM64_LR].Rule == frame.RuleUndefined {\n\t\tfctxt.Regs[regnum.ARM64_LR] = frame.DWRule{\n\t\t\tRule:   frame.RuleRegister,\n\t\t\tReg:    regnum.ARM64_LR,\n\t\t\tOffset: 0,\n\t\t}\n\t}\n\n\treturn fctxt\n}\n\nconst arm64cgocallSPOffsetSaveSlot = 0x8\nconst prevG0schedSPOffsetSaveSlot = 0x10\n\nfunc arm64SwitchStack(it *stackIterator, callFrameRegs *op.DwarfRegisters) bool {\n\tlinux := runtime.GOOS == \"linux\"\n\tif it.frame.Current.Fn == nil {\n\t\tif it.systemstack && it.g != nil && it.top {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\tswitch it.frame.Current.Fn.Name {\n\tcase \"runtime.cgocallback_gofunc\", \"runtime.cgocallback\":\n\t\tif linux {\n\t\t\t// For a detailed description of how this works read the long comment at\n\t\t\t// the start of $GOROOT/src/runtime/cgocall.go and the source code of\n\t\t\t// runtime.cgocallback_gofunc in $GOROOT/src/runtime/asm_arm64.s\n\t\t\t//\n\t\t\t// When a C function calls back into go it will eventually call into\n\t\t\t// runtime.cgocallback_gofunc which is the function that does the stack\n\t\t\t// switch from the system stack back into the goroutine stack\n\t\t\t// Since we are going backwards on the stack here we see the transition\n\t\t\t// as goroutine stack -> system stack.\n\t\t\tif it.top || it.systemstack {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tit.loadG0SchedSP()\n\t\t\tif it.g0_sched_sp <= 0 {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Entering the system stack.\n\t\t\tit.regs.Reg(callFrameRegs.SPRegNum).Uint64Val = it.g0_sched_sp\n\t\t\t// Reads the previous value of g0.sched.sp that runtime.cgocallback_gofunc saved on the stack.\n\t\t\tit.g0_sched_sp, _ = readUintRaw(it.mem, it.regs.SP()+prevG0schedSPOffsetSaveSlot, int64(it.bi.Arch.PtrSize()))\n\t\t\tit.top = false\n\t\t\tcallFrameRegs, ret, retaddr := it.advanceRegs()\n\t\t\tframeOnSystemStack := it.newStackframe(ret, retaddr)\n\t\t\tit.pc = frameOnSystemStack.Ret\n\t\t\tit.regs = callFrameRegs\n\t\t\tit.systemstack = true\n\n\t\t\treturn true\n\t\t}\n\n\tcase \"runtime.asmcgocall\":\n\t\tif linux {\n\t\t\tif it.top || !it.systemstack {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// This function is called by a goroutine to execute a C function and\n\t\t\t// switches from the goroutine stack to the system stack.\n\t\t\t// Since we are unwinding the stack from callee to caller we have to switch\n\t\t\t// from the system stack to the goroutine stack.\n\t\t\toff, _ := readIntRaw(it.mem, it.regs.SP()+arm64cgocallSPOffsetSaveSlot,\n\t\t\t\tint64(it.bi.Arch.PtrSize()))\n\t\t\toldsp := it.regs.SP()\n\t\t\tnewsp := uint64(int64(it.stackhi) - off)\n\n\t\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = uint64(int64(newsp))\n\t\t\t// runtime.asmcgocall can also be called from inside the system stack,\n\t\t\t// in that case no stack switch actually happens\n\t\t\tif it.regs.SP() == oldsp {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tit.top = false\n\t\t\tit.systemstack = false\n\t\t\t// The return value is stored in the LR register which is saved at 24(SP).\n\t\t\taddrret := uint64(int64(it.regs.SP()) + int64(it.bi.Arch.PtrSize()*3))\n\t\t\tit.frame.Ret, _ = readUintRaw(it.mem, addrret, int64(it.bi.Arch.PtrSize()))\n\t\t\tit.pc = it.frame.Ret\n\n\t\t\treturn true\n\t\t}\n\n\tcase \"runtime.goexit\", \"runtime.rt0_go\":\n\t\t// Look for \"top of stack\" functions.\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"runtime.mcall\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"crosscall2\":\n\t\t// The offsets get from runtime/cgo/asm_arm64.s:10\n\t\tbpoff := uint64(14)\n\t\tlroff := uint64(15)\n\t\tif producer := it.bi.Producer(); producer != \"\" && goversion.ProducerAfterOrEqual(producer, 1, 19) {\n\t\t\t// In Go 1.19 (specifically eee6f9f82) the order registers are saved was changed.\n\t\t\tbpoff = 22\n\t\t\tlroff = 23\n\t\t}\n\t\tnewsp, _ := readUintRaw(it.mem, it.regs.SP()+8*24, int64(it.bi.Arch.PtrSize()))\n\t\tnewbp, _ := readUintRaw(it.mem, it.regs.SP()+8*bpoff, int64(it.bi.Arch.PtrSize()))\n\t\tnewlr, _ := readUintRaw(it.mem, it.regs.SP()+8*lroff, int64(it.bi.Arch.PtrSize()))\n\t\tif it.regs.Reg(it.regs.BPRegNum) != nil {\n\t\t\tit.regs.Reg(it.regs.BPRegNum).Uint64Val = newbp\n\t\t} else {\n\t\t\treg, _ := it.readRegisterAt(it.regs.BPRegNum, it.regs.SP()+8*bpoff)\n\t\t\tit.regs.AddReg(it.regs.BPRegNum, reg)\n\t\t}\n\t\tit.regs.Reg(it.regs.LRRegNum).Uint64Val = newlr\n\t\tif linux {\n\t\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = newbp\n\t\t} else {\n\t\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = newsp\n\t\t}\n\t\tit.pc = newlr\n\t\treturn true\n\tcase \"runtime.mstart\":\n\t\tif linux {\n\t\t\t// Calls to runtime.systemstack will switch to the systemstack then:\n\t\t\t// 1. alter the goroutine stack so that it looks like systemstack_switch\n\t\t\t//    was called\n\t\t\t// 2. alter the system stack so that it looks like the bottom-most frame\n\t\t\t//    belongs to runtime.mstart\n\t\t\t// If we find a runtime.mstart frame on the system stack of a goroutine\n\t\t\t// parked on runtime.systemstack_switch we assume runtime.systemstack was\n\t\t\t// called and continue tracing from the parked position.\n\n\t\t\tif it.top || !it.systemstack || it.g == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif fn := it.bi.PCToFunc(it.g.PC); fn == nil || fn.Name != \"runtime.systemstack_switch\" {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\n\tcase \"runtime.newstack\", \"runtime.systemstack\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t}\n\n\tfn := it.bi.PCToFunc(it.frame.Ret)\n\tif fn == nil {\n\t\treturn false\n\t}\n\tswitch fn.Name {\n\tcase \"runtime.asmcgocall\":\n\t\tif !it.systemstack {\n\t\t\treturn false\n\t\t}\n\n\t\t// This function is called by a goroutine to execute a C function and\n\t\t// switches from the goroutine stack to the system stack.\n\t\t// Since we are unwinding the stack from callee to caller we have to switch\n\t\t// from the system stack to the goroutine stack.\n\t\toff, _ := readIntRaw(it.mem, callFrameRegs.SP()+arm64cgocallSPOffsetSaveSlot, int64(it.bi.Arch.PtrSize()))\n\t\toldsp := callFrameRegs.SP()\n\t\tnewsp := uint64(int64(it.stackhi) - off)\n\n\t\t// runtime.asmcgocall can also be called from inside the system stack,\n\t\t// in that case no stack switch actually happens\n\t\tif newsp == oldsp {\n\t\t\treturn false\n\t\t}\n\t\tit.systemstack = false\n\t\tcallFrameRegs.Reg(callFrameRegs.SPRegNum).Uint64Val = uint64(int64(newsp))\n\t\treturn false\n\n\tcase \"runtime.cgocallback_gofunc\", \"runtime.cgocallback\":\n\t\t// For a detailed description of how this works read the long comment at\n\t\t// the start of $GOROOT/src/runtime/cgocall.go and the source code of\n\t\t// runtime.cgocallback_gofunc in $GOROOT/src/runtime/asm_arm64.s\n\t\t//\n\t\t// When a C functions calls back into go it will eventually call into\n\t\t// runtime.cgocallback_gofunc which is the function that does the stack\n\t\t// switch from the system stack back into the goroutine stack\n\t\t// Since we are going backwards on the stack here we see the transition\n\t\t// as goroutine stack -> system stack.\n\t\tif it.systemstack {\n\t\t\treturn false\n\t\t}\n\n\t\tit.loadG0SchedSP()\n\t\tif it.g0_sched_sp <= 0 {\n\t\t\treturn false\n\t\t}\n\t\t// entering the system stack\n\t\tcallFrameRegs.Reg(callFrameRegs.SPRegNum).Uint64Val = it.g0_sched_sp\n\t\t// reads the previous value of g0.sched.sp that runtime.cgocallback_gofunc saved on the stack\n\n\t\tit.g0_sched_sp, _ = readUintRaw(it.mem, callFrameRegs.SP()+prevG0schedSPOffsetSaveSlot, int64(it.bi.Arch.PtrSize()))\n\t\tit.systemstack = true\n\t\treturn false\n\t}\n\n\treturn false\n}\n\nfunc arm64RegSize(regnum uint64) int {\n\t// fp registers\n\tif regnum >= 64 && regnum <= 95 {\n\t\treturn 16\n\t}\n\n\treturn 8 // general registers\n}\n\nvar arm64NameToDwarf = func() map[string]int {\n\tr := make(map[string]int)\n\tfor i := 0; i <= 30; i++ {\n\t\tr[fmt.Sprintf(\"x%d\", i)] = i\n\t}\n\tr[\"pc\"] = int(regnum.ARM64_PC)\n\tr[\"lr\"] = int(regnum.ARM64_LR)\n\tr[\"sp\"] = 31\n\tfor i := 0; i <= 31; i++ {\n\t\tr[fmt.Sprintf(\"v%d\", i)] = i + 64\n\t}\n\treturn r\n}()\n\nfunc arm64RegistersToDwarfRegisters(staticBase uint64, regs Registers) *op.DwarfRegisters {\n\tdregs := initDwarfRegistersFromSlice(int(regnum.ARM64MaxRegNum()), regs, regnum.ARM64NameToDwarf)\n\tdr := op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.ARM64_PC, regnum.ARM64_SP, regnum.ARM64_BP, regnum.ARM64_LR)\n\tdr.SetLoadMoreCallback(loadMoreDwarfRegistersFromSliceFunc(dr, regs, arm64NameToDwarf))\n\treturn dr\n}\n\nfunc arm64AddrAndStackRegsToDwarfRegisters(staticBase, pc, sp, bp, lr uint64) op.DwarfRegisters {\n\tdregs := make([]*op.DwarfRegister, regnum.ARM64_PC+1)\n\tdregs[regnum.ARM64_PC] = op.DwarfRegisterFromUint64(pc)\n\tdregs[regnum.ARM64_SP] = op.DwarfRegisterFromUint64(sp)\n\tdregs[regnum.ARM64_BP] = op.DwarfRegisterFromUint64(bp)\n\tdregs[regnum.ARM64_LR] = op.DwarfRegisterFromUint64(lr)\n\n\treturn *op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.ARM64_PC, regnum.ARM64_SP, regnum.ARM64_BP, regnum.ARM64_LR)\n}\n\nfunc arm64DwarfRegisterToString(i int, reg *op.DwarfRegister) (name string, floatingPoint bool, repr string) {\n\tname = regnum.ARM64ToName(uint64(i))\n\n\tif reg == nil {\n\t\treturn name, false, \"\"\n\t}\n\n\tif reg.Bytes != nil && name[0] == 'V' {\n\t\tbuf := bytes.NewReader(reg.Bytes)\n\n\t\tvar out bytes.Buffer\n\t\tvar vi [16]uint8\n\t\tfor i := range vi {\n\t\t\t_ = binary.Read(buf, binary.LittleEndian, &vi[i])\n\t\t}\n\t\t//D\n\t\tfmt.Fprintf(&out, \" {\\n\\tD = {u = {0x%02x%02x%02x%02x%02x%02x%02x%02x,\", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])\n\t\tfmt.Fprintf(&out, \" 0x%02x%02x%02x%02x%02x%02x%02x%02x},\", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])\n\t\tfmt.Fprintf(&out, \" s = {0x%02x%02x%02x%02x%02x%02x%02x%02x,\", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])\n\t\tfmt.Fprintf(&out, \" 0x%02x%02x%02x%02x%02x%02x%02x%02x}},\", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])\n\n\t\t//S\n\t\tfmt.Fprintf(&out, \" \\n\\tS = {u = {0x%02x%02x%02x%02x,0x%02x%02x%02x%02x,\", vi[3], vi[2], vi[1], vi[0], vi[7], vi[6], vi[5], vi[4])\n\t\tfmt.Fprintf(&out, \" 0x%02x%02x%02x%02x,0x%02x%02x%02x%02x},\", vi[11], vi[10], vi[9], vi[8], vi[15], vi[14], vi[13], vi[12])\n\t\tfmt.Fprintf(&out, \" s = {0x%02x%02x%02x%02x,0x%02x%02x%02x%02x,\", vi[3], vi[2], vi[1], vi[0], vi[7], vi[6], vi[5], vi[4])\n\t\tfmt.Fprintf(&out, \" 0x%02x%02x%02x%02x,0x%02x%02x%02x%02x}},\", vi[11], vi[10], vi[9], vi[8], vi[15], vi[14], vi[13], vi[12])\n\n\t\t//H\n\t\tfmt.Fprintf(&out, \" \\n\\tH = {u = {0x%02x%02x,0x%02x%02x,0x%02x%02x,0x%02x%02x,\", vi[1], vi[0], vi[3], vi[2], vi[5], vi[4], vi[7], vi[6])\n\t\tfmt.Fprintf(&out, \" 0x%02x%02x,0x%02x%02x,0x%02x%02x,0x%02x%02x},\", vi[9], vi[8], vi[11], vi[10], vi[13], vi[12], vi[15], vi[14])\n\t\tfmt.Fprintf(&out, \" s = {0x%02x%02x,0x%02x%02x,0x%02x%02x,0x%02x%02x,\", vi[1], vi[0], vi[3], vi[2], vi[5], vi[4], vi[7], vi[6])\n\t\tfmt.Fprintf(&out, \" 0x%02x%02x,0x%02x%02x,0x%02x%02x,0x%02x%02x}},\", vi[9], vi[8], vi[11], vi[10], vi[13], vi[12], vi[15], vi[14])\n\n\t\t//B\n\t\tfmt.Fprintf(&out, \" \\n\\tB = {u = {0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,\", vi[0], vi[1], vi[2], vi[3], vi[4], vi[5], vi[6], vi[7])\n\t\tfmt.Fprintf(&out, \" 0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x},\", vi[8], vi[9], vi[10], vi[11], vi[12], vi[13], vi[14], vi[15])\n\t\tfmt.Fprintf(&out, \" s = {0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,\", vi[0], vi[1], vi[2], vi[3], vi[4], vi[5], vi[6], vi[7])\n\t\tfmt.Fprintf(&out, \" 0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x}}\", vi[8], vi[9], vi[10], vi[11], vi[12], vi[13], vi[14], vi[15])\n\n\t\t//Q\n\t\tfmt.Fprintf(&out, \" \\n\\tQ = {u = {0x%02x%02x%02x%02x%02x%02x%02x%02x\", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])\n\t\tfmt.Fprintf(&out, \"%02x%02x%02x%02x%02x%02x%02x%02x},\", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])\n\t\tfmt.Fprintf(&out, \" s = {0x%02x%02x%02x%02x%02x%02x%02x%02x\", vi[15], vi[14], vi[13], vi[12], vi[11], vi[10], vi[9], vi[8])\n\t\tfmt.Fprintf(&out, \"%02x%02x%02x%02x%02x%02x%02x%02x}}\\n\\t}\", vi[7], vi[6], vi[5], vi[4], vi[3], vi[2], vi[1], vi[0])\n\t\treturn name, true, out.String()\n\t} else if reg.Bytes == nil || (reg.Bytes != nil && len(reg.Bytes) < 16) {\n\t\treturn name, false, fmt.Sprintf(\"%#016x\", reg.Uint64Val)\n\t}\n\treturn name, false, fmt.Sprintf(\"%#x\", reg.Bytes)\n}\n"
  },
  {
    "path": "pkg/proc/arm64_disasm.go",
    "content": "package proc\n\nimport (\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\n\t\"golang.org/x/arch/arm64/arm64asm\"\n)\n\nfunc arm64AsmDecode(asmInst *AsmInstruction, mem []byte, regs *op.DwarfRegisters, memrw MemoryReadWriter, bi *BinaryInfo) error {\n\tasmInst.Size = 4\n\tasmInst.Bytes = mem[:asmInst.Size]\n\n\tinst, err := arm64asm.Decode(mem)\n\tif err != nil {\n\t\tasmInst.Inst = (*arm64ArchInst)(nil)\n\t\treturn err\n\t}\n\n\tasmInst.Inst = (*arm64ArchInst)(&inst)\n\tasmInst.Kind = OtherInstruction\n\n\tswitch inst.Op {\n\tcase arm64asm.BL, arm64asm.BLR:\n\t\tasmInst.Kind = CallInstruction\n\tcase arm64asm.RET, arm64asm.ERET:\n\t\tasmInst.Kind = RetInstruction\n\tcase arm64asm.B, arm64asm.BR:\n\t\tasmInst.Kind = JmpInstruction\n\tcase arm64asm.BRK:\n\t\tasmInst.Kind = HardBreakInstruction\n\t}\n\n\tasmInst.DestLoc = resolveCallArgARM64(&inst, asmInst.Loc.PC, asmInst.AtPC, regs, memrw, bi)\n\n\treturn nil\n}\n\nfunc resolveCallArgARM64(inst *arm64asm.Inst, instAddr uint64, currentGoroutine bool, regs *op.DwarfRegisters, mem MemoryReadWriter, bininfo *BinaryInfo) *Location {\n\tswitch inst.Op {\n\tcase arm64asm.BL, arm64asm.BLR, arm64asm.B, arm64asm.BR:\n\t\t// ok\n\tdefault:\n\t\treturn nil\n\t}\n\n\tvar pc uint64\n\tvar err error\n\n\tswitch arg := inst.Args[0].(type) {\n\tcase arm64asm.Imm:\n\t\tpc = uint64(arg.Imm)\n\tcase arm64asm.Reg:\n\t\tif !currentGoroutine || regs == nil {\n\t\t\treturn nil\n\t\t}\n\t\tpc, err = bininfo.Arch.getAsmRegister(regs, int(arg))\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\tcase arm64asm.PCRel:\n\t\tpc = instAddr + uint64(arg)\n\tdefault:\n\t\treturn nil\n\t}\n\n\tfile, line, fn := bininfo.PCToLine(pc)\n\tif fn == nil {\n\t\treturn &Location{PC: pc}\n\t}\n\treturn &Location{PC: pc, File: file, Line: line, Fn: fn}\n}\n\n// Possible stacksplit prologues are inserted by stacksplit in\n// $GOROOT/src/cmd/internal/obj/arm64/obj7.go.\nvar prologuesARM64 []opcodeSeq\n\nfunc init() {\n\tvar tinyStacksplit = opcodeSeq{uint64(arm64asm.MOV), uint64(arm64asm.CMP), uint64(arm64asm.B)}\n\tvar smallStacksplit = opcodeSeq{uint64(arm64asm.SUB), uint64(arm64asm.CMP), uint64(arm64asm.B)}\n\tvar bigStacksplit = opcodeSeq{uint64(arm64asm.CMP), uint64(arm64asm.B), uint64(arm64asm.ADD), uint64(arm64asm.SUB), uint64(arm64asm.MOV), uint64(arm64asm.CMP), uint64(arm64asm.B)}\n\tvar unixGetG = opcodeSeq{uint64(arm64asm.LDR)}\n\n\tprologuesARM64 = make([]opcodeSeq, 0, 3)\n\tfor _, getG := range []opcodeSeq{unixGetG} {\n\t\tfor _, stacksplit := range []opcodeSeq{tinyStacksplit, smallStacksplit, bigStacksplit} {\n\t\t\tprologue := make(opcodeSeq, 0, len(getG)+len(stacksplit))\n\t\t\tprologue = append(prologue, getG...)\n\t\t\tprologue = append(prologue, stacksplit...)\n\t\t\tprologuesARM64 = append(prologuesARM64, prologue)\n\t\t}\n\t}\n}\n\ntype arm64ArchInst arm64asm.Inst\n\nfunc (inst *arm64ArchInst) Text(flavour AssemblyFlavour, pc uint64, symLookup func(uint64) (string, uint64)) string {\n\tif inst == nil {\n\t\treturn \"?\"\n\t}\n\n\tvar text string\n\n\tswitch flavour {\n\tcase GNUFlavour:\n\t\ttext = arm64asm.GNUSyntax(arm64asm.Inst(*inst))\n\tdefault:\n\t\ttext = arm64asm.GoSyntax(arm64asm.Inst(*inst), pc, symLookup, nil)\n\t}\n\n\treturn text\n}\n\nfunc (inst *arm64ArchInst) OpcodeEquals(op uint64) bool {\n\tif inst == nil {\n\t\treturn false\n\t}\n\treturn uint64(inst.Op) == op\n}\n\nvar arm64AsmRegisters = func() map[int]asmRegister {\n\tr := make(map[int]asmRegister)\n\tfor i := arm64asm.X0; i <= arm64asm.X30; i++ {\n\t\tr[int(i)] = asmRegister{regnum.ARM64_X0 + uint64(i-arm64asm.X0), 0, 0}\n\t}\n\treturn r\n}()\n"
  },
  {
    "path": "pkg/proc/bininfo.go",
    "content": "package proc\n\nimport (\n\t\"bytes\"\n\t\"cmp\"\n\t\"context\"\n\t\"debug/buildinfo\"\n\t\"debug/dwarf\"\n\t\"debug/elf\"\n\t\"debug/macho\"\n\t\"debug/pe\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/token\"\n\t\"hash/crc32\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"slices\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/astutil\"\n\tpdwarf \"github.com/go-delve/delve/pkg/dwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/line\"\n\t\"github.com/go-delve/delve/pkg/dwarf/loclist\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/reader\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/internal/gosym\"\n\t\"github.com/go-delve/delve/pkg/internal/lru\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc/debuginfod\"\n\t\"github.com/go-delve/delve/pkg/proc/evalop\"\n)\n\nconst (\n\tdwarfGoLanguage    = 22   // DW_LANG_Go (from DWARF v5, section 7.12, page 231)\n\tdwarfAttrAddrBase  = 0x73 // debug/dwarf.AttrAddrBase in Go 1.14, defined here for compatibility with Go < 1.14\n\tdwarfTreeCacheSize = 512  // size of the dwarfTree cache of each image\n)\n\n// BinaryInfo holds information on the binaries being executed (this\n// includes both the executable and also any loaded libraries).\ntype BinaryInfo struct {\n\t// Architecture of this binary.\n\tArch *Arch\n\n\t// GOOS operating system this binary is executing on.\n\tGOOS string\n\n\tDebugInfoDirectories []string\n\n\t// Functions is a list of all DW_TAG_subprogram entries in debug_info, sorted by entry point\n\tFunctions []Function\n\t// Sources is a list of all source files found in debug_line.\n\tSources []string\n\t// lookupFunc maps function names to a description of the function.\n\tlookupFunc map[string][]*Function\n\t// lookupGenericFunc maps function names, with their type parameters removed, to functions.\n\t// Functions that are not generic are not added to this map.\n\tlookupGenericFunc map[string][]*Function\n\n\t// SymNames maps addr to a description *elf.Symbol of this addr.\n\tSymNames map[uint64]*elf.Symbol\n\n\t// Images is a list of loaded shared libraries (also known as\n\t// shared objects on linux or DLLs on windows).\n\tImages []*Image\n\n\tElfDynamicSection ElfDynamicSection\n\n\tlastModified time.Time // Time the executable of this process was last modified\n\n\t// PackageMap maps package names to package paths, needed to lookup types inside DWARF info.\n\t// On Go1.12 this mapping is determined by using the last element of a package path, for example:\n\t//   github.com/go-delve/delve\n\t// will map to 'delve' because it ends in '/delve'.\n\t// Starting with Go1.13 debug_info will contain a special attribute\n\t// (godwarf.AttrGoPackageName) containing the canonical package name for\n\t// each package.\n\t// If multiple packages have the same name the map entry will have more\n\t// than one item in the slice.\n\tPackageMap map[string][]string\n\n\tframeEntries frame.FrameDescriptionEntries\n\n\ttypes       map[string]dwarfRef\n\tpackageVars []packageVar // packageVars is a list of all global/package variables in debug_info, sorted by address\n\n\tgStructOffset      uint64\n\tgStructOffsetIsPtr bool\n\n\t// consts[off] lists all the constants with the type defined at offset off.\n\tconsts constantsMap\n\n\t// inlinedCallLines maps a file:line pair, corresponding to the header line\n\t// of a function to a list of PC addresses where an inlined call to that\n\t// function starts.\n\tinlinedCallLines map[fileLine][]uint64\n\n\t// dwrapUnwrapCache caches unwrapping of defer wrapper functions (dwrap)\n\tdwrapUnwrapCache map[uint64]*Function\n\n\tmoduleDataCache []ModuleData\n\n\t// Go 1.17 register ABI is enabled.\n\tregabi bool\n\n\tdebugPinnerFn *Function\n\tlogger        logflags.Logger\n\teventsFn      func(*Event)\n\n\tcancelDownloadsMu sync.Mutex\n\tcancelDownloads   func()\n\tdownloadsCtx      context.Context\n}\n\nvar (\n\t// ErrCouldNotDetermineRelocation is an error returned when Delve could not determine the base address of a\n\t// position independent executable.\n\tErrCouldNotDetermineRelocation = errors.New(\"could not determine the base address of a PIE\")\n\n\t// ErrNoDebugInfoFound is returned when Delve cannot open the debug_info\n\t// section or find an external debug info file.\n\tErrNoDebugInfoFound = errors.New(\"could not open debug info\")\n)\n\nvar (\n\tsupportedLinuxArch = map[elf.Machine]bool{\n\t\telf.EM_X86_64:    true,\n\t\telf.EM_AARCH64:   true,\n\t\telf.EM_386:       true,\n\t\telf.EM_PPC64:     true,\n\t\telf.EM_RISCV:     true,\n\t\telf.EM_LOONGARCH: true,\n\t}\n\n\tsupportedWindowsArch = map[_PEMachine]bool{\n\t\t_IMAGE_FILE_MACHINE_AMD64: true,\n\t\t_IMAGE_FILE_MACHINE_ARM64: true,\n\t}\n\n\tsupportedDarwinArch = map[macho.Cpu]bool{\n\t\tmacho.CpuAmd64: true,\n\t\tmacho.CpuArm64: true,\n\t}\n)\n\n// ErrFunctionNotFound is returned when failing to find the\n// function named 'FuncName' within the binary.\ntype ErrFunctionNotFound struct {\n\tFuncName string\n}\n\nfunc (err *ErrFunctionNotFound) Error() string {\n\treturn fmt.Sprintf(\"could not find function %s\\n\", err.FuncName)\n}\n\n// FindFileLocation returns the PC for a given file:line.\n// Assumes that `file` is normalized to lower case and '/' on Windows.\nfunc FindFileLocation(p Process, filename string, lineno int) ([]uint64, error) {\n\t// A single file:line can appear in multiple concrete functions, because of\n\t// generics instantiation as well as multiple inlined calls into other\n\t// concrete functions.\n\n\t// 1. Find all instructions assigned in debug_line to filename:lineno.\n\n\tbi := p.BinInfo()\n\n\tfileFound := false\n\tpcs := []line.PCStmt{}\n\tfor _, image := range bi.Images {\n\t\tfor _, cu := range image.compileUnits {\n\t\t\tif cu.lineInfo == nil || cu.lineInfo.Lookup[filename] == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfileFound = true\n\t\t\tpcs = append(pcs, cu.lineInfo.LineToPCs(filename, lineno)...)\n\t\t}\n\t}\n\n\tif len(pcs) == 0 {\n\t\t// Check if the line contained a call to a function that was inlined, in\n\t\t// that case it's possible for the line itself to not appear in debug_line\n\t\t// at all, but it will still be in debug_info as the call site for an\n\t\t// inlined subroutine entry.\n\t\tfor _, pc := range bi.inlinedCallLines[fileLine{filename, lineno}] {\n\t\t\tpcs = append(pcs, line.PCStmt{PC: pc, Stmt: true})\n\t\t}\n\t}\n\n\tif len(pcs) == 0 {\n\t\tstripped := false\n\t\tfor _, image := range bi.Images {\n\t\t\tif image.Stripped() && image.symTable != nil && image.symTable.Files[filename] != nil {\n\t\t\t\tstripped = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn nil, &ErrCouldNotFindLine{fileFound, stripped, filename, lineno}\n\t}\n\n\t// 2. assign all occurrences of filename:lineno to their containing function\n\n\tpcByFunc := map[*Function][]line.PCStmt{}\n\tsort.Slice(pcs, func(i, j int) bool { return pcs[i].PC < pcs[j].PC })\n\tvar fn *Function\n\tfor _, pcstmt := range pcs {\n\t\tif fn == nil || (pcstmt.PC < fn.Entry) || (pcstmt.PC >= fn.End) {\n\t\t\tfn = p.BinInfo().PCToFunc(pcstmt.PC)\n\t\t}\n\t\tif fn != nil {\n\t\t\tpcByFunc[fn] = append(pcByFunc[fn], pcstmt)\n\t\t}\n\t}\n\n\tselectedPCs := []uint64{}\n\n\tfor fn, pcs := range pcByFunc {\n\t\t// 3. for each concrete function split instruction between the inlined functions it contains\n\n\t\tif strings.Contains(fn.Name, \"·dwrap·\") || fn.trampoline {\n\t\t\t// skip autogenerated functions\n\t\t\tcontinue\n\t\t}\n\n\t\tdwtree, err := fn.cu.image.getDwarfTree(fn.offset)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"loading DWARF for %s@%#x: %v\", fn.Name, fn.offset, err)\n\t\t}\n\t\tinlrngs := allInlineCallRanges(dwtree)\n\n\t\t// findInlRng returns the DWARF offset of the inlined call containing pc.\n\t\t// If multiple nested inlined calls contain pc the deepest one is returned\n\t\t// (since allInlineCallRanges returns inlined call by decreasing depth\n\t\t// this is the first matching entry of the slice).\n\t\tfindInlRng := func(pc uint64) dwarf.Offset {\n\t\t\tfor _, inlrng := range inlrngs {\n\t\t\t\tif inlrng.rng[0] <= pc && pc < inlrng.rng[1] {\n\t\t\t\t\treturn inlrng.off\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn fn.offset\n\t\t}\n\n\t\tpcsByOff := map[dwarf.Offset][]line.PCStmt{}\n\n\t\tfor _, pc := range pcs {\n\t\t\toff := findInlRng(pc.PC)\n\t\t\tpcsByOff[off] = append(pcsByOff[off], pc)\n\t\t}\n\n\t\t// 4. pick the first instruction with stmt set for each inlined call as\n\t\t//    well as the main body of the concrete function. If nothing has\n\t\t//    is_stmt set pick the first instruction instead.\n\n\t\tfor off, pcs := range pcsByOff {\n\t\t\tsort.Slice(pcs, func(i, j int) bool { return pcs[i].PC < pcs[j].PC })\n\n\t\t\tvar selectedPC uint64\n\t\t\tfor _, pc := range pcs {\n\t\t\t\tif pc.Stmt {\n\t\t\t\t\tselectedPC = pc.PC\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif selectedPC == 0 && len(pcs) > 0 {\n\t\t\t\tselectedPC = pcs[0].PC\n\t\t\t}\n\n\t\t\tif selectedPC == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// 5. if we picked the entry point of the function, skip it\n\n\t\t\tif off == fn.offset && fn.Entry == selectedPC {\n\t\t\t\tselectedPC, _ = FirstPCAfterPrologue(p, fn, true)\n\t\t\t}\n\n\t\t\tselectedPCs = append(selectedPCs, selectedPC)\n\t\t}\n\t}\n\n\tslices.Sort(selectedPCs)\n\n\treturn selectedPCs, nil\n}\n\n// inlRange is the range of an inlined call\ntype inlRange struct {\n\toff   dwarf.Offset\n\tdepth uint32\n\trng   [2]uint64\n}\n\n// allInlineCallRanges returns all inlined calls contained inside 'tree' in\n// reverse nesting order (i.e. the most nested calls are returned first).\n// Note that a single inlined call might not have a continuous range of\n// addresses and therefore appear multiple times in the returned slice.\nfunc allInlineCallRanges(tree *godwarf.Tree) []inlRange {\n\tr := []inlRange{}\n\n\tvar visit func(*godwarf.Tree, uint32)\n\tvisit = func(n *godwarf.Tree, depth uint32) {\n\t\tif n.Tag == dwarf.TagInlinedSubroutine {\n\t\t\tfor _, rng := range n.Ranges {\n\t\t\t\tr = append(r, inlRange{off: n.Offset, depth: depth, rng: rng})\n\t\t\t}\n\t\t}\n\t\tfor _, child := range n.Children {\n\t\t\tvisit(child, depth+1)\n\t\t}\n\t}\n\tvisit(tree, 0)\n\n\tsort.SliceStable(r, func(i, j int) bool { return r[i].depth > r[j].depth })\n\treturn r\n}\n\n// FindFunction returns the functions with name funcName.\nfunc (bi *BinaryInfo) FindFunction(funcName string) ([]*Function, error) {\n\tif fns := bi.LookupFunc()[funcName]; fns != nil {\n\t\treturn fns, nil\n\t}\n\tfns := bi.LookupGenericFunc()[funcName]\n\tif len(fns) == 0 {\n\t\treturn nil, &ErrFunctionNotFound{funcName}\n\t}\n\treturn fns, nil\n}\n\n// FindFunctionLocation finds address of a function's line\n// If lineOffset is passed FindFunctionLocation will return the address of that line\nfunc FindFunctionLocation(p Process, funcName string, lineOffset int) ([]uint64, error) {\n\tbi := p.BinInfo()\n\torigfns, err := bi.FindFunction(funcName)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif lineOffset > 0 {\n\t\tfn := origfns[0]\n\t\tfilename, lineno := bi.EntryLineForFunc(fn)\n\t\treturn FindFileLocation(p, filename, lineno+lineOffset)\n\t}\n\n\tr := make([]uint64, 0, len(origfns[0].InlinedCalls)+len(origfns))\n\n\tfor _, origfn := range origfns {\n\t\tif origfn.Entry > 0 {\n\t\t\t// add concrete implementation of the function\n\t\t\tpc, err := FirstPCAfterPrologue(p, origfn, false)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tr = append(r, pc)\n\t\t}\n\t\t// add inlined calls to the function\n\t\tfor _, call := range origfn.InlinedCalls {\n\t\t\tr = append(r, call.LowPC)\n\t\t}\n\t\tif len(r) == 0 {\n\t\t\treturn nil, &ErrFunctionNotFound{funcName}\n\t\t}\n\t}\n\tslices.Sort(r)\n\treturn r, nil\n}\n\n// FirstPCAfterPrologue returns the address of the first\n// instruction after the prologue for function fn.\n// If sameline is set FirstPCAfterPrologue will always return an\n// address associated with the same line as fn.Entry.\nfunc FirstPCAfterPrologue(p Process, fn *Function, sameline bool) (uint64, error) {\n\tif fn.cu.lineInfo != nil {\n\t\tpc, _, line, ok := fn.cu.lineInfo.PrologueEndPC(fn.Entry, fn.End)\n\t\tif ok {\n\t\t\tif !sameline {\n\t\t\t\treturn pc, nil\n\t\t\t}\n\t\t\t_, entryLine := p.BinInfo().EntryLineForFunc(fn)\n\t\t\tif entryLine == line {\n\t\t\t\treturn pc, nil\n\t\t\t}\n\t\t}\n\t}\n\n\tpc, err := firstPCAfterPrologueDisassembly(p, fn, sameline)\n\tif err != nil {\n\t\treturn fn.Entry, err\n\t}\n\n\tif pc == fn.Entry && fn.cu.lineInfo != nil {\n\t\t// Look for the first instruction with the stmt flag set, so that setting a\n\t\t// breakpoint with file:line and with the function name always result on\n\t\t// the same instruction being selected.\n\t\tif pc2, _, _, ok := fn.cu.lineInfo.FirstStmt(fn.Entry, fn.End); ok {\n\t\t\treturn pc2, nil\n\t\t}\n\t}\n\n\treturn pc, nil\n}\n\nfunc findRetPC(t *Target, name string) ([]uint64, error) {\n\tfn := t.BinInfo().lookupOneFunc(name)\n\tif fn == nil {\n\t\treturn nil, fmt.Errorf(\"could not find %s\", name)\n\t}\n\ttext, err := Disassemble(t.Memory(), nil, t.Breakpoints(), t.BinInfo(), fn.Entry, fn.End)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tr := []uint64{}\n\tfor _, instr := range text {\n\t\tif instr.IsRet() {\n\t\t\tr = append(r, instr.Loc.PC)\n\t\t}\n\t}\n\tif len(r) == 0 {\n\t\treturn nil, fmt.Errorf(\"could not find return instruction in %s\", name)\n\t}\n\treturn r, nil\n}\n\n// cpuArch is a stringer interface representing CPU architectures.\ntype cpuArch interface {\n\tString() string\n}\n\n// ErrUnsupportedArch is returned when attempting to debug a binary compiled for an unsupported architecture.\ntype ErrUnsupportedArch struct {\n\tos      string\n\tcpuArch cpuArch\n}\n\nfunc (e *ErrUnsupportedArch) Error() string {\n\tvar supportArchs []cpuArch\n\tswitch e.os {\n\tcase \"linux\":\n\t\tfor linuxArch := range supportedLinuxArch {\n\t\t\tsupportArchs = append(supportArchs, linuxArch)\n\t\t}\n\tcase \"windows\":\n\t\tfor windowArch := range supportedWindowsArch {\n\t\t\tsupportArchs = append(supportArchs, windowArch)\n\t\t}\n\tcase \"darwin\":\n\t\tfor darwinArch := range supportedDarwinArch {\n\t\t\tsupportArchs = append(supportArchs, darwinArch)\n\t\t}\n\t}\n\n\tvar errStr strings.Builder\n\terrStr.WriteString(\"unsupported architecture of \" + e.os + \"/\" + e.cpuArch.String())\n\terrStr.WriteString(\" - only\")\n\tfor _, arch := range supportArchs {\n\t\terrStr.WriteString(\" \" + e.os + \"/\" + arch.String() + \" \")\n\t}\n\tif len(supportArchs) == 1 {\n\t\terrStr.WriteString(\"is supported\")\n\t} else {\n\t\terrStr.WriteString(\"are supported\")\n\t}\n\n\treturn errStr.String()\n}\n\ntype compileUnit struct {\n\tname    string // univocal name for non-go compile units\n\tVersion uint8  // DWARF version of this compile unit\n\tlowPC   uint64\n\tranges  [][2]uint64\n\n\tentry     *dwarf.Entry        // debug_info entry describing this compile unit\n\tisgo      bool                // true if this is the go compile unit\n\tlineInfo  *line.DebugLineInfo // debug_line segment associated with this compile unit\n\toptimized optimizedFlags      // this compile unit is optimized\n\tproducer  string              // producer attribute\n\n\toffset dwarf.Offset // offset of the entry describing the compile unit\n\n\timage *Image // parent image of this compilation unit.\n}\n\ntype optimizedFlags uint8\n\nconst (\n\toptimizedInlined optimizedFlags = 1 << iota\n\toptimizedOptimized\n)\n\ntype fileLine struct {\n\tfile string\n\tline int\n}\n\n// dwarfRef is a reference to a Debug Info Entry inside a shared object.\ntype dwarfRef struct {\n\timageIndex int\n\toffset     dwarf.Offset\n}\n\n// InlinedCall represents a concrete inlined call to a function.\ntype InlinedCall struct {\n\tcu            *compileUnit\n\tLowPC, HighPC uint64 // Address range of the generated inlined instructions\n}\n\n// Function describes a function in the target program.\ntype Function struct {\n\tName       string\n\tEntry, End uint64 // same as DW_AT_lowpc and DW_AT_highpc\n\toffset     dwarf.Offset\n\tcu         *compileUnit\n\n\ttrampoline bool // DW_AT_trampoline attribute set to true\n\n\t// InlinedCalls lists all inlined calls to this function\n\tInlinedCalls         []InlinedCall\n\trangeParentNameCache int // see rangeParentName\n\t// extraCache contains information about this function that is only needed for\n\t// some operations and is expensive to compute or store for every function.\n\textraCache *functionExtra\n\t// rangeBodiesCache caches the list of range-over-func body closures for\n\t// this function. Only one of extraCache.rangeParent and rangeBodiesCache\n\t// should be set at any given time.\n\trangeBodiesCache []*Function\n}\n\ntype functionExtra struct {\n\t// closureStructType is the cached struct type for closures for this function\n\tclosureStructType *godwarf.StructType\n\t// rangeParent is set when this function is a range-over-func body closure\n\t// and points to the function that the closure was generated from.\n\trangeParent *Function\n}\n\n// instRange returns the indexes in fn.Name of the type parameter\n// instantiation, which is the position of the outermost '[' and ']'.\n// If fn is not an instantiated function both returned values will be len(fn.Name)\nfunc (fn *Function) instRange() [2]int {\n\td := len(fn.Name)\n\tinst := [2]int{d, d}\n\tif strings.HasPrefix(fn.Name, \"type..\") {\n\t\treturn inst\n\t}\n\tinst[0] = strings.Index(fn.Name, \"[\")\n\tif inst[0] < 0 {\n\t\tinst[0] = d\n\t\treturn inst\n\t}\n\tinst[1] = strings.LastIndex(fn.Name, \"]\")\n\tif inst[1] < 0 {\n\t\tinst[0] = d\n\t\tinst[1] = d\n\t\treturn inst\n\t}\n\treturn inst\n}\n\n// PackageName returns the package part of the symbol name,\n// or the empty string if there is none.\n// Borrowed from $GOROOT/debug/gosym/symtab.go\nfunc (fn *Function) PackageName() string {\n\tinst := fn.instRange()\n\treturn packageName(fn.Name[:inst[0]])\n}\n\nfunc packageName(name string) string {\n\tpathend := max(strings.LastIndex(name, \"/\"), 0)\n\n\tif i := strings.Index(name[pathend:], \".\"); i != -1 {\n\t\treturn name[:pathend+i]\n\t}\n\treturn \"\"\n}\n\n// ReceiverName returns the receiver type name of this symbol,\n// or the empty string if there is none.\n// Borrowed from $GOROOT/debug/gosym/symtab.go\nfunc (fn *Function) ReceiverName() string {\n\tinst := fn.instRange()\n\tpathend := max(strings.LastIndex(fn.Name[:inst[0]], \"/\"), 0)\n\tl := strings.Index(fn.Name[pathend:], \".\")\n\tif l == -1 {\n\t\treturn \"\"\n\t}\n\tif r := strings.LastIndex(fn.Name[inst[1]:], \".\"); r != -1 && pathend+l != inst[1]+r {\n\t\treturn fn.Name[pathend+l+1 : inst[1]+r]\n\t} else if r := strings.LastIndex(fn.Name[pathend:inst[0]], \".\"); r != -1 && l != r {\n\t\treturn fn.Name[pathend+l+1 : pathend+r]\n\t}\n\treturn \"\"\n}\n\n// BaseName returns the symbol name without the package or receiver name.\n// Borrowed from $GOROOT/debug/gosym/symtab.go\nfunc (fn *Function) BaseName() string {\n\tinst := fn.instRange()\n\tif i := strings.LastIndex(fn.Name[inst[1]:], \".\"); i != -1 {\n\t\treturn fn.Name[inst[1]+i+1:]\n\t} else if i := strings.LastIndex(fn.Name[:inst[0]], \".\"); i != -1 {\n\t\treturn fn.Name[i+1:]\n\t}\n\treturn fn.Name\n}\n\n// NameWithoutTypeParams returns the function name without instantiation parameters\nfunc (fn *Function) NameWithoutTypeParams() string {\n\tinst := fn.instRange()\n\tif inst[0] == inst[1] {\n\t\treturn fn.Name\n\t}\n\treturn fn.Name[:inst[0]] + fn.Name[inst[1]+1:]\n}\n\n// Optimized returns true if the function was optimized by the compiler.\nfunc (fn *Function) Optimized() bool {\n\treturn fn.cu.optimized != 0\n}\n\n// PrologueEndPC returns the PC just after the function prologue\nfunc (fn *Function) PrologueEndPC() uint64 {\n\tpc, _, _, ok := fn.cu.lineInfo.PrologueEndPC(fn.Entry, fn.End)\n\tif !ok {\n\t\treturn fn.Entry\n\t}\n\treturn pc\n}\n\nfunc (fn *Function) AllPCs(excludeFile string, excludeLine int) ([]uint64, error) {\n\tif !fn.cu.image.Stripped() {\n\t\treturn fn.cu.lineInfo.AllPCsBetween(fn.Entry, fn.End-1, excludeFile, excludeLine)\n\t}\n\tvar pcs []uint64\n\tfnFile, lastLine, _ := fn.cu.image.symTable.PCToLine(fn.Entry - fn.cu.image.StaticBase)\n\tfor pc := fn.Entry - fn.cu.image.StaticBase; pc < fn.End-fn.cu.image.StaticBase; pc++ {\n\t\tf, line, pcfn := fn.cu.image.symTable.PCToLine(pc)\n\t\tif pcfn == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif f == fnFile && line > lastLine {\n\t\t\tlastLine = line\n\t\t\tpcs = append(pcs, pc+fn.cu.image.StaticBase)\n\t\t}\n\t}\n\treturn pcs, nil\n}\n\n// From $GOROOT/src/runtime/traceback.go:597\n// exportedRuntime reports whether the function is an exported runtime function.\n// It is only for runtime functions, so ASCII A-Z is fine.\nfunc (fn *Function) exportedRuntime() bool {\n\tname := fn.Name\n\tconst n = len(\"runtime.\")\n\treturn len(name) > n && name[:n] == \"runtime.\" && 'A' <= name[n] && name[n] <= 'Z'\n}\n\n// unexportedRuntime reports whether the function is a private runtime function.\nfunc (fn *Function) privateRuntime() bool {\n\tname := fn.Name\n\tconst n = len(\"runtime.\")\n\treturn len(name) > n && name[:n] == \"runtime.\" && !('A' <= name[n] && name[n] <= 'Z')\n}\n\nfunc (fn *Function) CompilationUnitName() string {\n\tif fn.cu == nil {\n\t\treturn \"\"\n\t}\n\treturn fn.cu.name\n}\n\nfunc rangeParentName(fnname string) int {\n\tconst rangeSuffix = \"-range\"\n\tridx := strings.Index(fnname, rangeSuffix)\n\tif ridx <= 0 {\n\t\treturn -1\n\t}\n\tok := true\n\tfor i := ridx + len(rangeSuffix); i < len(fnname); i++ {\n\t\tif fnname[i] < '0' || fnname[i] > '9' {\n\t\t\tok = false\n\t\t\tbreak\n\t\t}\n\t}\n\tif !ok {\n\t\treturn -1\n\t}\n\treturn ridx\n}\n\n// rangeParentName, if this function is a range-over-func body closure\n// returns the name of the parent function, otherwise returns \"\"\nfunc (fn *Function) rangeParentName() string {\n\tif fn.rangeParentNameCache == 0 {\n\t\tridx := rangeParentName(fn.Name)\n\t\tfn.rangeParentNameCache = ridx\n\t}\n\tif fn.rangeParentNameCache < 0 {\n\t\treturn \"\"\n\t}\n\treturn fn.Name[:fn.rangeParentNameCache]\n}\n\n// extra loads information about fn that is expensive to compute and we\n// only need for a minority of the functions.\nfunc (fn *Function) extra(bi *BinaryInfo) *functionExtra {\n\tif fn == nil {\n\t\treturn &functionExtra{}\n\t}\n\tif fn.extraCache != nil {\n\t\treturn fn.extraCache\n\t}\n\n\tif fn.cu.image.Stripped() {\n\t\tfn.extraCache = &functionExtra{}\n\t\treturn fn.extraCache\n\t}\n\n\tfn.extraCache = &functionExtra{}\n\n\t// Calculate closureStructType\n\t{\n\t\tdwarfTree, err := fn.cu.image.getDwarfTree(fn.offset)\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\t\tst := &godwarf.StructType{\n\t\t\tKind: \"struct\",\n\t\t}\n\t\tvars := reader.Variables(dwarfTree, 0, 0, reader.VariablesNoDeclLineCheck|reader.VariablesSkipInlinedSubroutines)\n\t\tfor _, v := range vars {\n\t\t\toff, ok := v.Val(godwarf.AttrGoClosureOffset).(int64)\n\t\t\tif ok {\n\t\t\t\tn, _ := v.Val(dwarf.AttrName).(string)\n\t\t\t\ttyp, err := v.Type(fn.cu.image.dwarf, fn.cu.image.index, fn.cu.image.typeCache)\n\t\t\t\tif err == nil {\n\t\t\t\t\tsz := typ.Common().ByteSize\n\t\t\t\t\tst.Field = append(st.Field, &godwarf.StructField{\n\t\t\t\t\t\tName:       n,\n\t\t\t\t\t\tType:       typ,\n\t\t\t\t\t\tByteOffset: off,\n\t\t\t\t\t\tByteSize:   sz,\n\t\t\t\t\t\tBitOffset:  off * 8,\n\t\t\t\t\t\tBitSize:    sz * 8,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif len(st.Field) > 0 {\n\t\t\tlf := st.Field[len(st.Field)-1]\n\t\t\tst.ByteSize = lf.ByteOffset + lf.Type.Common().ByteSize\n\t\t}\n\t\tfn.extraCache.closureStructType = st\n\t}\n\n\t// Find rangeParent for this function (if it is a range-over-func body closure)\n\tif rangeParentName := fn.rangeParentName(); rangeParentName != \"\" {\n\t\tfn.extraCache.rangeParent = bi.lookupOneFunc(rangeParentName)\n\t}\n\n\treturn fn.extraCache\n}\n\n// rangeBodies returns the list of range-over-func body closures for this\n// function.\nfunc (fn *Function) rangeBodies(bi *BinaryInfo) []*Function {\n\tif fn == nil {\n\t\treturn nil\n\t}\n\tif fn.rangeBodiesCache != nil {\n\t\treturn fn.rangeBodiesCache\n\t}\n\textra := fn.extra(bi)\n\tif extra.rangeParent != nil {\n\t\treturn nil\n\t}\n\tfor i := range bi.Functions {\n\t\tfn2 := &bi.Functions[i]\n\t\tif strings.HasPrefix(fn2.Name, fn.Name) && fn2.rangeParentName() == fn.Name {\n\t\t\tfn.rangeBodiesCache = append(fn.rangeBodiesCache, fn2)\n\t\t}\n\t}\n\treturn fn.rangeBodiesCache\n}\n\ntype constantsMap map[dwarfRef]*constantType\n\ntype constantType struct {\n\tinitialized bool\n\tvalues      []constantValue\n}\n\ntype constantValue struct {\n\tname      string\n\tfullName  string\n\tvalue     int64\n\tsingleBit bool\n}\n\n// packageVar represents a package-level variable (or a C global variable).\n// If a global variable does not have an address (for example it's stored in\n// a register, or non-contiguously) addr will be 0.\ntype packageVar struct {\n\tname   string\n\tcu     *compileUnit\n\toffset dwarf.Offset\n\taddr   uint64\n}\n\ntype buildIDHeader struct {\n\tNamesz uint32\n\tDescsz uint32\n\tType   uint32\n}\n\n// ElfDynamicSection describes the .dynamic section of an ELF executable.\ntype ElfDynamicSection struct {\n\tAddr uint64 // relocated address of where the .dynamic section is mapped in memory\n\tSize uint64 // size of the .dynamic section of the executable\n}\n\n// NewBinaryInfo returns an initialized but unloaded BinaryInfo struct.\nfunc NewBinaryInfo(goos, goarch string) *BinaryInfo {\n\tr := &BinaryInfo{GOOS: goos, logger: logflags.DebuggerLogger()}\n\n\t// TODO: find better way to determine proc arch (perhaps use executable file info).\n\tswitch goarch {\n\tcase \"386\":\n\t\tr.Arch = I386Arch(goos)\n\tcase \"amd64\":\n\t\tr.Arch = AMD64Arch(goos)\n\tcase \"arm64\":\n\t\tr.Arch = ARM64Arch(goos)\n\tcase \"ppc64le\":\n\t\tr.Arch = PPC64LEArch(goos)\n\tcase \"riscv64\":\n\t\tr.Arch = RISCV64Arch(goos)\n\tcase \"loong64\":\n\t\tr.Arch = LOONG64Arch(goos)\n\t}\n\treturn r\n}\n\n// LoadBinaryInfo will load and store the information from the binary at 'path'.\nfunc (bi *BinaryInfo) LoadBinaryInfo(path string, entryPoint uint64, debugInfoDirs []string) error {\n\tfi, err := os.Stat(path)\n\tif err == nil {\n\t\tbi.lastModified = fi.ModTime()\n\t}\n\n\tbi.DebugInfoDirectories = debugInfoDirs\n\n\treturn bi.AddImage(path, entryPoint)\n}\n\nfunc loadBinaryInfo(bi *BinaryInfo, image *Image, path string, entryPoint uint64) error {\n\tvar wg sync.WaitGroup\n\tdefer wg.Wait()\n\n\tswitch bi.GOOS {\n\tcase \"linux\", \"freebsd\":\n\t\treturn loadBinaryInfoElf(bi, image, path, entryPoint, &wg)\n\tcase \"windows\":\n\t\treturn loadBinaryInfoPE(bi, image, path, entryPoint, &wg)\n\tcase \"darwin\":\n\t\treturn loadBinaryInfoMacho(bi, image, path, entryPoint, &wg)\n\t}\n\treturn errors.New(\"unsupported operating system\")\n}\n\n// GStructOffset returns the offset of the G\n// struct in thread local storage.\nfunc (bi *BinaryInfo) GStructOffset(mem MemoryReadWriter) (uint64, error) {\n\toffset := bi.gStructOffset\n\tif bi.gStructOffsetIsPtr {\n\t\t// The G struct offset from the TLS section is a pointer\n\t\t// and the address must be dereferenced to find to actual G struct offset.\n\t\tvar err error\n\t\toffset, err = readUintRaw(mem, offset, int64(bi.Arch.PtrSize()))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\treturn offset, nil\n}\n\n// LastModified returns the last modified time of the binary.\nfunc (bi *BinaryInfo) LastModified() time.Time {\n\treturn bi.lastModified\n}\n\n// DwarfReader returns a reader for the dwarf data\nfunc (so *Image) DwarfReader() *reader.Reader {\n\tif so.dwarf == nil {\n\t\treturn nil\n\t}\n\treturn reader.New(so.dwarf)\n}\n\n// Types returns list of types present in the debugged program.\nfunc (bi *BinaryInfo) Types() ([]string, error) {\n\ttypes := make([]string, 0, len(bi.types))\n\tfor k := range bi.types {\n\t\ttypes = append(types, k)\n\t}\n\treturn types, nil\n}\n\nfunc (bi *BinaryInfo) EntryLineForFunc(fn *Function) (string, int) {\n\treturn bi.pcToLine(fn, fn.Entry)\n}\n\nfunc (bi *BinaryInfo) pcToLine(fn *Function, pc uint64) (string, int) {\n\tif fn.cu.lineInfo == nil {\n\t\tf, l, _ := fn.cu.image.symTable.PCToLine(pc - fn.cu.image.StaticBase)\n\t\treturn f, l\n\t}\n\tf, l := fn.cu.lineInfo.PCToLine(fn.Entry, pc)\n\treturn f, l\n}\n\n// PCToLine converts an instruction address to a file/line/function.\nfunc (bi *BinaryInfo) PCToLine(pc uint64) (string, int, *Function) {\n\tfn := bi.PCToFunc(pc)\n\tif fn == nil {\n\t\treturn \"\", 0, nil\n\t}\n\tf, ln := bi.pcToLine(fn, pc)\n\treturn f, ln, fn\n}\n\ntype ErrCouldNotFindLine struct {\n\tfileFound, stripped bool\n\tfilename            string\n\tlineno              int\n}\n\nfunc (err *ErrCouldNotFindLine) Error() string {\n\tif err.fileFound {\n\t\tif err.stripped {\n\t\t\treturn fmt.Sprintf(\"could not find statement at %s:%d, binary is stripped\", err.filename, err.lineno)\n\t\t}\n\t\treturn fmt.Sprintf(\"could not find statement at %s:%d, please use a line with a statement\", err.filename, err.lineno)\n\t}\n\tif err.stripped {\n\t\treturn fmt.Sprintf(\"could not find file %s, binary is stripped\", err.filename)\n\t}\n\treturn fmt.Sprintf(\"could not find file %s\", err.filename)\n}\n\n// AllPCsForFileLines returns a map providing all PC addresses for filename and each line in linenos\nfunc (bi *BinaryInfo) AllPCsForFileLines(filename string, linenos []int) map[int][]uint64 {\n\tr := make(map[int][]uint64)\n\tfor _, line := range linenos {\n\t\tr[line] = make([]uint64, 0, 1)\n\t}\n\tfor _, image := range bi.Images {\n\t\tfor _, cu := range image.compileUnits {\n\t\t\tif cu.lineInfo != nil && cu.lineInfo.Lookup[filename] != nil {\n\t\t\t\tcu.lineInfo.AllPCsForFileLines(filename, r)\n\t\t\t}\n\t\t}\n\t}\n\treturn r\n}\n\n// PCToFunc returns the concrete function containing the given PC address.\n// If the PC address belongs to an inlined call it will return the containing function.\nfunc (bi *BinaryInfo) PCToFunc(pc uint64) *Function {\n\ti := sort.Search(len(bi.Functions), func(i int) bool {\n\t\tfn := bi.Functions[i]\n\t\treturn pc <= fn.Entry || (fn.Entry <= pc && pc < fn.End)\n\t})\n\tif i != len(bi.Functions) {\n\t\tfn := &bi.Functions[i]\n\t\tif fn.Entry <= pc && pc < fn.End {\n\t\t\treturn fn\n\t\t}\n\t}\n\treturn nil\n}\n\n// PCToImage returns the image containing the given PC address.\nfunc (bi *BinaryInfo) PCToImage(pc uint64) *Image {\n\tfn := bi.PCToFunc(pc)\n\treturn bi.funcToImage(fn)\n}\n\n// Image represents a loaded library file (shared object on linux, DLL on windows).\ntype Image struct {\n\tPath       string\n\tStaticBase uint64\n\tBuildID    string\n\taddr       uint64\n\n\tindex int // index of this object in BinaryInfo.SharedObjects\n\n\tcloser         io.Closer\n\tsepDebugCloser io.Closer\n\n\tdwarf        *dwarf.Data\n\tdwarfReader  *dwarf.Reader\n\tloclist2     *loclist.Dwarf2Reader\n\tloclist5     *loclist.Dwarf5Reader\n\tdebugAddr    *godwarf.DebugAddrSection\n\tdebugLineStr []byte\n\n\tsymTable *gosym.Table\n\tTrimpath bool // trimpath used\n\n\t// IsGo is true when the image has been confirmed to be a Go binary,\n\t// e.g. by checking for a Go producer string in DWARF compile units.\n\tIsGo bool\n\n\ttypeCache map[dwarf.Offset]godwarf.Type\n\n\tcompileUnits []*compileUnit // compileUnits is sorted by increasing DWARF offset\n\n\tdwarfTreeCache  *lru.Cache[dwarf.Offset, *godwarf.Tree]\n\tworkaroundCache map[dwarf.Offset]*godwarf.Tree\n\n\t// runtimeTypeToDIE maps between the offset of a runtime._type in\n\t// runtime.moduledata.types and the offset of the DIE in debug_info. This\n\t// map is filled by using the extended attribute godwarf.AttrGoRuntimeType\n\t// which was added in go 1.11.\n\truntimeTypeToDIE map[uint64]runtimeTypeDIE\n\n\tloadErrMu sync.Mutex\n\tloadErr   error\n}\n\nfunc (image *Image) registerRuntimeTypeToDIE(entry *dwarf.Entry, ardr *reader.Reader) {\n\tif off, ok := entry.Val(godwarf.AttrGoRuntimeType).(uint64); ok {\n\t\tif _, ok := image.runtimeTypeToDIE[off]; !ok {\n\t\t\timage.runtimeTypeToDIE[off] = runtimeTypeDIE{entry.Offset}\n\t\t}\n\t}\n}\n\nfunc (image *Image) Stripped() bool {\n\treturn image.dwarf == nil\n}\n\n// HasGoImage returns true if any loaded image is a Go binary with\n// successfully loaded debug info.\nfunc (bi *BinaryInfo) HasGoImage() bool {\n\tfor _, image := range bi.Images {\n\t\tif image.IsGo && image.loadErr == nil {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// AddImage adds the specified image to bi, loading data asynchronously.\n// Addr is the relocated entry point for the executable and staticBase (i.e.\n// the relocation offset) for all other images.\n// The first image added must be the executable file.\nfunc (bi *BinaryInfo) AddImage(path string, addr uint64) error {\n\t// Check if the image is already present.\n\tif len(bi.Images) > 0 && !strings.HasPrefix(path, \"/\") {\n\t\treturn nil\n\t}\n\tfor _, image := range bi.Images {\n\t\tif image.Path == path && image.addr == addr {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tif len(bi.Images) > 0 {\n\t\tbi.cancelDownloadsMu.Lock()\n\t\tif bi.cancelDownloads == nil {\n\t\t\tbi.downloadsCtx, bi.cancelDownloads = context.WithCancel(context.Background())\n\t\t}\n\t\tbi.cancelDownloadsMu.Unlock()\n\t}\n\n\t// Actually add the image.\n\timage := &Image{Path: path, addr: addr, typeCache: make(map[dwarf.Offset]godwarf.Type)}\n\timage.dwarfTreeCache = lru.NewCache[dwarf.Offset, *godwarf.Tree](dwarfTreeCacheSize)\n\n\t// add Image regardless of error so that we don't attempt to re-add it every time we stop\n\timage.index = len(bi.Images)\n\tbi.Images = append(bi.Images, image)\n\terr := loadBinaryInfo(bi, image, path, addr)\n\tif err != nil {\n\t\tbi.Images[len(bi.Images)-1].loadErr = err\n\t}\n\tbi.macOSDebugFrameBugWorkaround()\n\n\t// Detect trimpath\n\tbinfo, _ := buildinfo.ReadFile(path)\n\tif binfo != nil {\n\t\tfor _, s := range binfo.Settings {\n\t\t\tif s.Key == \"-trimpath\" && s.Value == \"true\" {\n\t\t\t\timage.Trimpath = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn err\n}\n\n// LoadImageBinaryInfoAgain loads the n-th image debug symbols if they weren't already loaded.\nfunc (bi *BinaryInfo) LoadImageBinaryInfoAgain(n int) error {\n\tif n < 0 || n >= len(bi.Images) || bi.Images[n].loadErr == nil {\n\t\treturn nil\n\t}\n\timage := bi.Images[n]\n\timage.loadErr = nil\n\terr := loadBinaryInfo(bi, image, image.Path, image.addr)\n\tif err != nil {\n\t\timage.loadErr = err\n\t}\n\tbi.macOSDebugFrameBugWorkaround()\n\treturn err\n}\n\n// moduleDataToImage finds the image corresponding to the given module data object.\nfunc (bi *BinaryInfo) moduleDataToImage(md *ModuleData) *Image {\n\tfn := bi.PCToFunc(md.text)\n\tif fn != nil {\n\t\treturn bi.funcToImage(fn)\n\t}\n\t// Try searching for the image with the closest address preceding md.text\n\tvar so *Image\n\tfor i := range bi.Images {\n\t\tif int64(bi.Images[i].StaticBase) > int64(md.text) {\n\t\t\tcontinue\n\t\t}\n\t\tif so == nil || int64(bi.Images[i].StaticBase) > int64(so.StaticBase) {\n\t\t\tso = bi.Images[i]\n\t\t}\n\t}\n\treturn so\n}\n\n// imageToModuleData finds the module data in mds corresponding to the given image.\nfunc (bi *BinaryInfo) imageToModuleData(image *Image, mds []ModuleData) *ModuleData {\n\tfor _, md := range mds {\n\t\tim2 := bi.moduleDataToImage(&md)\n\t\tif im2 != nil && im2.index == image.index {\n\t\t\treturn &md\n\t\t}\n\t}\n\treturn nil\n}\n\n// typeToImage returns the image containing the give type.\nfunc (bi *BinaryInfo) typeToImage(typ godwarf.Type) *Image {\n\treturn bi.Images[typ.Common().Index]\n}\n\nfunc (bi *BinaryInfo) runtimeTypeTypename() string {\n\tif goversion.ProducerAfterOrEqual(bi.Producer(), 1, 21) {\n\t\treturn \"internal/abi.Type\"\n\t}\n\treturn \"runtime._type\"\n}\n\nvar errBinaryInfoClose = errors.New(\"multiple errors closing executable files\")\n\n// Close closes all internal readers.\nfunc (bi *BinaryInfo) Close() error {\n\tvar errs []error\n\tfor _, image := range bi.Images {\n\t\tif err := image.Close(); err != nil {\n\t\t\terrs = append(errs, err)\n\t\t}\n\t}\n\tswitch len(errs) {\n\tcase 0:\n\t\treturn nil\n\tcase 1:\n\t\treturn errs[0]\n\tdefault:\n\t\treturn errBinaryInfoClose\n\t}\n}\n\nfunc (image *Image) Close() error {\n\tvar err1, err2 error\n\tif image.sepDebugCloser != nil {\n\t\terr := image.sepDebugCloser.Close()\n\t\tif err != nil {\n\t\t\terr1 = fmt.Errorf(\"closing shared object %q (split dwarf): %v\", image.Path, err)\n\t\t}\n\t}\n\tif image.closer != nil {\n\t\terr := image.closer.Close()\n\t\tif err != nil {\n\t\t\terr2 = fmt.Errorf(\"closing shared object %q: %v\", image.Path, err)\n\t\t}\n\t}\n\tif err1 != nil && err2 != nil {\n\t\treturn errBinaryInfoClose\n\t}\n\tif err1 != nil {\n\t\treturn err1\n\t}\n\treturn err2\n}\n\nfunc (image *Image) setLoadError(logger logflags.Logger, fmtstr string, args ...any) {\n\timage.loadErrMu.Lock()\n\timage.loadErr = fmt.Errorf(fmtstr, args...)\n\timage.loadErrMu.Unlock()\n\tif logger != nil {\n\t\tlogger.Errorf(\"error loading binary %q: %v\", image.Path, image.loadErr)\n\t}\n}\n\n// LoadError returns any error incurred while loading this image.\nfunc (image *Image) LoadError() error {\n\treturn image.loadErr\n}\n\nfunc (image *Image) getDwarfTree(off dwarf.Offset) (*godwarf.Tree, error) {\n\tif image.workaroundCache[off] != nil {\n\t\treturn image.workaroundCache[off], nil\n\t}\n\tif r, ok := image.dwarfTreeCache.Get(off); ok {\n\t\treturn r, nil\n\t}\n\tr, err := godwarf.LoadTree(off, image.dwarf, image.StaticBase)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\timage.dwarfTreeCache.Add(off, r)\n\treturn r, nil\n}\n\ntype nilCloser struct{}\n\nfunc (c *nilCloser) Close() error { return nil }\n\n// LoadImageFromData creates a new Image, using the specified data, and adds it to bi.\n// This is used for debugging BinaryInfo, you should use LoadBinary instead.\nfunc (bi *BinaryInfo) LoadImageFromData(dwdata *dwarf.Data, debugFrameBytes, debugLineBytes, debugLocBytes []byte) {\n\timage := &Image{}\n\timage.closer = (*nilCloser)(nil)\n\timage.sepDebugCloser = (*nilCloser)(nil)\n\timage.dwarf = dwdata\n\timage.typeCache = make(map[dwarf.Offset]godwarf.Type)\n\timage.dwarfTreeCache = lru.NewCache[dwarf.Offset, *godwarf.Tree](dwarfTreeCacheSize)\n\n\tif debugFrameBytes != nil {\n\t\tbi.frameEntries, _ = frame.Parse(debugFrameBytes, frame.DwarfEndian(debugFrameBytes), 0, bi.Arch.PtrSize(), 0)\n\t}\n\n\timage.loclist2 = loclist.NewDwarf2Reader(debugLocBytes, bi.Arch.PtrSize())\n\n\tbi.loadDebugInfoMaps(image, nil, debugLineBytes, nil, nil)\n\n\tbi.Images = append(bi.Images, image)\n}\n\nfunc (bi *BinaryInfo) locationExpr(entry godwarf.Entry, attr dwarf.Attr, pc uint64) ([]byte, *locationExpr, error) {\n\t//TODO(aarzilli): handle DW_FORM_loclistx attribute form new in DWARFv5\n\ta := entry.Val(attr)\n\tif a == nil {\n\t\treturn nil, nil, fmt.Errorf(\"no location attribute %s\", attr)\n\t}\n\tif instr, ok := a.([]byte); ok {\n\t\treturn instr, &locationExpr{isBlock: true, instr: instr, regnumToName: bi.Arch.RegnumToString}, nil\n\t}\n\toff, ok := a.(int64)\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"could not interpret location attribute %s\", attr)\n\t}\n\tinstr := bi.loclistEntry(off, pc)\n\tif instr == nil {\n\t\treturn nil, nil, fmt.Errorf(\"could not find loclist entry at %#x for address %#x\", off, pc)\n\t}\n\treturn instr, &locationExpr{pc: pc, off: off, instr: instr, regnumToName: bi.Arch.RegnumToString}, nil\n}\n\ntype locationExpr struct {\n\tisBlock   bool\n\tisEscaped bool\n\toff       int64\n\tpc        uint64\n\tinstr     []byte\n\n\tregnumToName func(uint64) string\n}\n\nfunc (le *locationExpr) String() string {\n\tif le == nil {\n\t\treturn \"\"\n\t}\n\tvar descr bytes.Buffer\n\n\tif le.isBlock {\n\t\tfmt.Fprintf(&descr, \"[block] \")\n\t\top.PrettyPrint(&descr, le.instr, le.regnumToName)\n\t} else {\n\t\tfmt.Fprintf(&descr, \"[%#x:%#x] \", le.off, le.pc)\n\t\top.PrettyPrint(&descr, le.instr, le.regnumToName)\n\t}\n\n\tif le.isEscaped {\n\t\tfmt.Fprintf(&descr, \" (escaped)\")\n\t}\n\treturn descr.String()\n}\n\n// LocationCovers returns the list of PC addresses that is covered by the\n// location attribute 'attr' of entry 'entry'.\nfunc (bi *BinaryInfo) LocationCovers(entry *dwarf.Entry, attr dwarf.Attr) ([][2]uint64, error) {\n\ta := entry.Val(attr)\n\tif a == nil {\n\t\treturn nil, fmt.Errorf(\"attribute %s not found\", attr)\n\t}\n\tif _, isblock := a.([]byte); isblock {\n\t\treturn [][2]uint64{{0, ^uint64(0)}}, nil\n\t}\n\n\toff, ok := a.(int64)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"attribute %s of unsupported type %T\", attr, a)\n\t}\n\tcu := bi.Images[0].findCompileUnitForOffset(entry.Offset)\n\tif cu == nil {\n\t\treturn nil, errors.New(\"could not find compile unit\")\n\t}\n\tif cu.Version >= 5 && cu.image.loclist5 != nil {\n\t\treturn nil, errors.New(\"LocationCovers does not support DWARFv5\")\n\t}\n\n\timage := cu.image\n\tbase := cu.lowPC\n\tif image == nil || image.loclist2.Empty() {\n\t\treturn nil, errors.New(\"malformed executable\")\n\t}\n\n\tr := [][2]uint64{}\n\tvar e loclist.Entry\n\timage.loclist2.Seek(int(off))\n\tfor image.loclist2.Next(&e) {\n\t\tif e.BaseAddressSelection() {\n\t\t\tbase = e.HighPC\n\t\t\tcontinue\n\t\t}\n\t\tr = append(r, [2]uint64{e.LowPC + base, e.HighPC + base})\n\t}\n\treturn r, nil\n}\n\n// Location returns the location described by attribute attr of entry.\n// This will either be an int64 address or a slice of Pieces for locations\n// that don't correspond to a single memory address (registers, composite\n// locations).\nfunc (bi *BinaryInfo) Location(entry godwarf.Entry, attr dwarf.Attr, pc uint64, regs op.DwarfRegisters, mem MemoryReadWriter) (int64, []op.Piece, *locationExpr, error) {\n\tinstr, descr, err := bi.locationExpr(entry, attr, pc)\n\tif err != nil {\n\t\treturn 0, nil, nil, err\n\t}\n\treadMemory := op.ReadMemoryFunc(nil)\n\tif mem != nil {\n\t\treadMemory = mem.ReadMemory\n\t}\n\taddr, pieces, err := op.ExecuteStackProgram(regs, instr, bi.Arch.PtrSize(), readMemory)\n\treturn addr, pieces, descr, err\n}\n\n// loclistEntry returns the loclist entry in the loclist starting at off,\n// for address pc.\nfunc (bi *BinaryInfo) loclistEntry(off int64, pc uint64) []byte {\n\tvar base uint64\n\timage := bi.Images[0]\n\tcu := bi.findCompileUnit(pc)\n\tif cu != nil {\n\t\tbase = cu.lowPC\n\t\timage = cu.image\n\t}\n\tif image == nil {\n\t\treturn nil\n\t}\n\n\tvar loclist loclist.Reader = image.loclist2\n\tvar debugAddr *godwarf.DebugAddr\n\tif cu != nil && cu.Version >= 5 && image.loclist5 != nil {\n\t\tloclist = image.loclist5\n\t\tif addrBase, ok := cu.entry.Val(dwarfAttrAddrBase).(int64); ok {\n\t\t\tdebugAddr = image.debugAddr.GetSubsection(uint64(addrBase))\n\t\t}\n\t}\n\n\tif loclist.Empty() {\n\t\treturn nil\n\t}\n\n\te, err := loclist.Find(int(off), image.StaticBase, base, pc, debugAddr)\n\tif err != nil {\n\t\tbi.logger.Errorf(\"error reading loclist section: %v\", err)\n\t\treturn nil\n\t}\n\tif e != nil {\n\t\treturn e.Instr\n\t}\n\n\treturn nil\n}\n\n// findCompileUnit returns the compile unit containing address pc.\nfunc (bi *BinaryInfo) findCompileUnit(pc uint64) *compileUnit {\n\tfor _, image := range bi.Images {\n\t\tfor _, cu := range image.compileUnits {\n\t\t\tfor _, rng := range cu.ranges {\n\t\t\t\tif pc >= rng[0] && pc < rng[1] {\n\t\t\t\t\treturn cu\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (bi *Image) findCompileUnitForOffset(off dwarf.Offset) *compileUnit {\n\tif len(bi.compileUnits) == 0 {\n\t\treturn nil\n\t}\n\ti := sort.Search(len(bi.compileUnits), func(i int) bool {\n\t\treturn bi.compileUnits[i].offset >= off\n\t})\n\tif i > 0 {\n\t\ti--\n\t}\n\treturn bi.compileUnits[i]\n}\n\n// Producer returns the value of DW_AT_producer.\nfunc (bi *BinaryInfo) Producer() string {\n\tfor _, cu := range bi.Images[0].compileUnits {\n\t\tif cu.isgo && cu.producer != \"\" {\n\t\t\treturn cu.producer\n\t\t}\n\t}\n\treturn \"\"\n}\n\n// DwarfVersion returns the maximum DWARF version in the executable.\nfunc (bi *BinaryInfo) DwarfVersion() uint8 {\n\tr := uint8(0)\n\tfor _, so := range bi.Images {\n\t\tfor _, cu := range so.compileUnits {\n\t\t\tif cu.isgo && cu.Version > r {\n\t\t\t\tr = cu.Version\n\t\t\t}\n\t\t}\n\t}\n\treturn r\n}\n\n// Type returns the Dwarf type entry at `offset`.\nfunc (image *Image) Type(offset dwarf.Offset) (godwarf.Type, error) {\n\treturn godwarf.ReadType(image.dwarf, image.index, offset, image.typeCache)\n}\n\n// funcToImage returns the Image containing function fn, or the\n// executable file as a fallback.\nfunc (bi *BinaryInfo) funcToImage(fn *Function) *Image {\n\tif fn == nil {\n\t\treturn bi.Images[0]\n\t}\n\treturn fn.cu.image\n}\n\n// parseDebugFrameGeneral parses a debug_frame and a eh_frame section.\n// At least one of the two must be present and parsed correctly, if\n// debug_frame is present it must be parsable correctly.\nfunc (bi *BinaryInfo) parseDebugFrameGeneral(image *Image, debugFrameBytes []byte, debugFrameName string, debugFrameErr error, ehFrameBytes []byte, ehFrameAddr uint64, ehFrameName string, byteOrder binary.ByteOrder) {\n\tif debugFrameBytes == nil && ehFrameBytes == nil {\n\t\timage.setLoadError(bi.logger, \"could not get %s section: %v\", debugFrameName, debugFrameErr)\n\t\treturn\n\t}\n\n\tif debugFrameBytes != nil {\n\t\tfe, err := frame.Parse(debugFrameBytes, byteOrder, image.StaticBase, bi.Arch.PtrSize(), 0)\n\t\tif err != nil {\n\t\t\timage.setLoadError(bi.logger, \"could not parse %s section: %v\", debugFrameName, err)\n\t\t\treturn\n\t\t}\n\t\tbi.frameEntries = bi.frameEntries.Append(fe)\n\t}\n\n\tif ehFrameBytes != nil && ehFrameAddr > 0 {\n\t\tfe, err := frame.Parse(ehFrameBytes, byteOrder, image.StaticBase, bi.Arch.PtrSize(), ehFrameAddr)\n\t\tif err != nil {\n\t\t\tif debugFrameBytes == nil {\n\t\t\t\timage.setLoadError(bi.logger, \"could not parse %s section: %v\", ehFrameName, err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tbi.logger.Warnf(\"could not parse %s section: %v\", ehFrameName, err)\n\t\t\treturn\n\t\t}\n\t\tbi.frameEntries = bi.frameEntries.Append(fe)\n\t}\n}\n\nfunc (bi *BinaryInfo) getModuleData(mem MemoryReadWriter) ([]ModuleData, error) {\n\tif bi.moduleDataCache == nil {\n\t\tvar err error\n\t\tbi.moduleDataCache, err = LoadModuleData(bi, mem)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error loading module data: %v\", err)\n\t\t}\n\t}\n\treturn bi.moduleDataCache, nil\n}\n\n// ELF ///////////////////////////////////////////////////////////////\n\n// openSeparateDebugInfo searches for a file containing the separate\n// debug info for the binary using the \"build ID\" method as described\n// in GDB's documentation [1], and if found returns two handles, one\n// for the bare file, and another for its corresponding elf.File.\n// [1] https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html\n//\n// Alternatively, if the debug file cannot be found be the build-id, Delve\n// will look in directories specified by the debug-info-directories config value.\nfunc (bi *BinaryInfo) openSeparateDebugInfo(image *Image, exe *elf.File, debugInfoDirectories []string) (*os.File, *elf.File, error) {\n\texePath := image.Path\n\texeName := filepath.Base(image.Path)\n\tif strings.HasPrefix(image.Path, \"/proc\") {\n\t\tvar err error\n\t\texePath, err = filepath.EvalSymlinks(image.Path)\n\t\tif err == nil {\n\t\t\texeName = filepath.Base(exePath)\n\t\t}\n\t}\n\n\tvar debugFilePath string\n\n\tcheck := func(potentialDebugFilePath string) bool {\n\t\t_, err := os.Stat(potentialDebugFilePath)\n\t\tif err == nil {\n\t\t\tdebugFilePath = potentialDebugFilePath\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\tfind := func(f func(string) bool, suffix string) {\n\t\tfor _, dir := range debugInfoDirectories {\n\t\t\tif f != nil && !f(dir) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif check(fmt.Sprintf(\"%s/%s\", dir, suffix)) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif debugFilePath == \"\" && len(image.BuildID) > 2 {\n\t\t// Build ID method: look for a file named .build-id/nn/nnnnnnnn.debug in\n\t\t// every debug info directory.\n\t\tfind(nil, fmt.Sprintf(\".build-id/%s/%s.debug\", image.BuildID[:2], image.BuildID[2:]))\n\t}\n\n\tif debugFilePath == \"\" {\n\t\t// Debug link: method if the executable contains a .gnu_debuglink section\n\t\t// it will look for the file named in the same directory of the\n\t\t// executable, then in a subdirectory named .debug and finally in each\n\t\t// debug info directory in a subdirectory with the same path as the\n\t\t// directory of the executable\n\t\tdebugLink, crc := bi.getDebugLink(exe)\n\n\t\tif debugLink != \"\" {\n\t\t\tcheck(filepath.Join(filepath.Dir(exePath), debugLink))\n\t\t\tif debugFilePath == \"\" {\n\t\t\t\tcheck(filepath.Join(filepath.Dir(exePath), \".debug\", debugLink))\n\t\t\t}\n\t\t\tif debugFilePath == \"\" {\n\t\t\t\tsuffix := filepath.Join(filepath.Dir(exePath)[1:], debugLink)\n\t\t\t\tfind(nil, suffix)\n\t\t\t}\n\t\t\tif debugFilePath == \"\" {\n\t\t\t\tbi.logger.Warnf(\"gnu_debuglink link %q not found in any debug info directory\", debugLink)\n\t\t\t}\n\t\t}\n\n\t\tif debugFilePath != \"\" {\n\t\t\t// CRC check\n\t\t\tbuf, err := os.ReadFile(debugFilePath)\n\t\t\tif err == nil {\n\t\t\t\tcomputedCRC := crc32.ChecksumIEEE(buf)\n\t\t\t\tif crc != computedCRC {\n\t\t\t\t\tbi.logger.Errorf(\"gnu_debuglink CRC check failed for %s (want %x got %x)\", debugFilePath, crc, computedCRC)\n\t\t\t\t\tdebugFilePath = \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif debugFilePath == \"\" && len(image.BuildID) > 2 {\n\t\t// Previous versions of delve looked for the build id in every debug info\n\t\t// directory that contained the build-id substring. This behavior deviates\n\t\t// from the ones specified by GDB but we keep it for backwards compatibility.\n\t\tfind(func(dir string) bool { return strings.Contains(dir, \"build-id\") }, fmt.Sprintf(\"%s/%s.debug\", image.BuildID[:2], image.BuildID[2:]))\n\t}\n\n\tif debugFilePath == \"\" {\n\t\t// Previous versions of delve looked for the executable filename (with\n\t\t// .debug extension) in every debug info directory.  This behavior also\n\t\t// deviates from the ones specified by GDB, but we keep it for backwards\n\t\t// compatibility.\n\t\tfind(func(dir string) bool { return !strings.Contains(dir, \"build-id\") }, fmt.Sprintf(\"%s.debug\", exeName))\n\t}\n\n\t// We cannot find the debug information locally on the system. Try and see if we're on a system that\n\t// has debuginfod so that we can use that in order to find any relevant debug information.\n\tif debugFilePath == \"\" {\n\t\tvar err error\n\t\tvar notify func(string)\n\t\tif bi.eventsFn != nil {\n\t\t\tnotify = func(s string) {\n\t\t\t\tbi.eventsFn(&Event{\n\t\t\t\t\tKind: EventBinaryInfoDownload,\n\t\t\t\t\tBinaryInfoDownloadEventDetails: &BinaryInfoDownloadEventDetails{\n\t\t\t\t\t\tImagePath: image.Path,\n\t\t\t\t\t\tProgress:  s,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tdebugFilePath, err = debuginfod.GetDebuginfo(bi.downloadsCtx, notify, image.BuildID)\n\t\tif err != nil {\n\t\t\treturn nil, nil, ErrNoDebugInfoFound\n\t\t}\n\t}\n\n\tsepFile, err := os.OpenFile(debugFilePath, 0, os.ModePerm)\n\tif err != nil {\n\t\treturn nil, nil, errors.New(\"can't open separate debug file: \" + err.Error())\n\t}\n\n\telfFile, err := elf.NewFile(sepFile)\n\tif err != nil {\n\t\tsepFile.Close()\n\t\treturn nil, nil, fmt.Errorf(\"can't open separate debug file %q: %v\", debugFilePath, err.Error())\n\t}\n\n\tif !supportedLinuxArch[elfFile.Machine] {\n\t\tsepFile.Close()\n\t\treturn nil, nil, fmt.Errorf(\"can't open separate debug file %q: %v\", debugFilePath, &ErrUnsupportedArch{os: \"linux\", cpuArch: elfFile.Machine})\n\t}\n\n\treturn sepFile, elfFile, nil\n}\n\n// loadBinaryInfoElf specifically loads information from an ELF binary.\nfunc loadBinaryInfoElf(bi *BinaryInfo, image *Image, path string, addr uint64, wg *sync.WaitGroup) error {\n\texe, err := os.OpenFile(path, 0, os.ModePerm)\n\tif err != nil {\n\t\treturn err\n\t}\n\timage.closer = exe\n\telfFile, err := elf.NewFile(exe)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !supportedLinuxArch[elfFile.Machine] {\n\t\treturn &ErrUnsupportedArch{os: \"linux\", cpuArch: elfFile.Machine}\n\t}\n\n\tif image.index == 0 {\n\t\t// adding executable file:\n\t\t// - addr is entryPoint therefore staticBase needs to be calculated by\n\t\t//   subtracting the entry point specified in the executable file from addr.\n\t\t// - memory address of the .dynamic section needs to be recorded in\n\t\t//   BinaryInfo so that we can find loaded libraries.\n\t\tif addr != 0 {\n\t\t\timage.StaticBase = addr - elfFile.Entry\n\t\t} else if elfFile.Type == elf.ET_DYN {\n\t\t\treturn ErrCouldNotDetermineRelocation\n\t\t}\n\t\tif dynsec := elfFile.Section(\".dynamic\"); dynsec != nil {\n\t\t\tbi.ElfDynamicSection.Addr = dynsec.Addr + image.StaticBase\n\t\t\tbi.ElfDynamicSection.Size = dynsec.Size\n\t\t}\n\t} else {\n\t\timage.StaticBase = addr\n\t}\n\n\tdwarfFile := elfFile\n\n\tbi.loadBuildID(image, elfFile)\n\tvar debugInfoBytes []byte\n\tvar dwerr error\n\timage.dwarf, dwerr = elfFile.DWARF()\n\tif dwerr != nil {\n\t\tvar sepFile *os.File\n\t\tvar serr error\n\t\tsepFile, dwarfFile, serr = bi.openSeparateDebugInfo(image, elfFile, bi.DebugInfoDirectories)\n\t\tif serr != nil {\n\t\t\tif len(bi.Images) <= 1 {\n\t\t\t\tfmt.Fprintln(os.Stderr, \"Warning: no debug info found, some functionality will be missing such as stack traces and variable evaluation.\")\n\t\t\t}\n\t\t\terr := loadBinaryInfoGoRuntimeElf(bi, image, path, elfFile)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"could not read debug info (%v) and could not read go symbol table (%v)\", dwerr, err)\n\t\t\t}\n\t\t\timage.IsGo = true\n\t\t\treturn nil\n\t\t}\n\t\timage.sepDebugCloser = sepFile\n\t\timage.dwarf, err = dwarfFile.DWARF()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tdebugInfoBytes, err = godwarf.GetDebugSectionElf(dwarfFile, \"info\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\timage.dwarfReader = image.dwarf.Reader()\n\n\tdebugLineBytes, err := godwarf.GetDebugSectionElf(dwarfFile, \"line\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdebugLocBytes, _ := godwarf.GetDebugSectionElf(dwarfFile, \"loc\")\n\timage.loclist2 = loclist.NewDwarf2Reader(debugLocBytes, bi.Arch.PtrSize())\n\tdebugLoclistBytes, _ := godwarf.GetDebugSectionElf(dwarfFile, \"loclists\")\n\timage.loclist5 = loclist.NewDwarf5Reader(debugLoclistBytes)\n\tdebugAddrBytes, _ := godwarf.GetDebugSectionElf(dwarfFile, \"addr\")\n\timage.debugAddr = godwarf.ParseAddr(debugAddrBytes)\n\tdebugLineStrBytes, _ := godwarf.GetDebugSectionElf(dwarfFile, \"line_str\")\n\timage.debugLineStr = debugLineStrBytes\n\n\twg.Add(3)\n\tgo bi.parseDebugFrameElf(image, dwarfFile, elfFile, debugInfoBytes, wg)\n\tgo bi.loadDebugInfoMaps(image, debugInfoBytes, debugLineBytes, wg, nil)\n\tgo bi.loadSymbolName(image, elfFile, wg)\n\tif image.index == 0 {\n\t\t// determine g struct offset only when loading the executable file\n\t\twg.Add(1)\n\t\tgo bi.setGStructOffsetElf(image, dwarfFile, wg)\n\t}\n\treturn nil\n}\n\nfunc findGoFuncVal(moduleData []byte, roDataAddr uint64, ptrsize int) (uint64, error) {\n\tbuf := new(bytes.Buffer)\n\terr := binary.Write(buf, binary.LittleEndian, &roDataAddr)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\t// Here we search for the value of `go.func.*` by searching through the raw bytes of the\n\t// runtime.moduledata structure. Since we don't know the value that we are looking for,\n\t// we use a known value, in this case the address of the .rodata section.\n\t// This is because in the layout of the struct, the rodata member is right next to\n\t// the value we need, making the math trivial once we find that member.\n\t// We use `bytes.LastIndex` specifically because the `types` struct member can also\n\t// contain the address of the .rodata section, so this pointer can appear multiple times\n\t// in the raw bytes.\n\t// Yes, this is very ill-advised low-level hackery but it works fine until\n\t// https://github.com/golang/go/issues/58474#issuecomment-1785681472 happens.\n\t// This code path also only runs in stripped binaries, so the whole implementation is\n\t// best effort anyways.\n\trodata := bytes.LastIndex(moduleData, buf.Bytes()[:ptrsize])\n\tif rodata == -1 {\n\t\treturn 0, errors.New(\"could not find rodata struct member\")\n\t}\n\t// Layout of struct members is:\n\t// type moduledata struct {\n\t// \t...\n\t// \trodata uintptr\n\t// \tgofunc uintptr\n\t// \t...\n\t// }\n\t// So do some pointer arithmetic to get the value we need.\n\tgofuncval := binary.LittleEndian.Uint64(moduleData[rodata+(1*ptrsize) : rodata+(2*ptrsize)])\n\treturn gofuncval, nil\n}\n\nfunc parseModuleData(dataSection []byte, tableAddr uint64) ([]byte, error) {\n\tbuf := new(bytes.Buffer)\n\terr := binary.Write(buf, binary.LittleEndian, &tableAddr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\toff := bytes.Index(dataSection, buf.Bytes()[:4])\n\tif off == -1 {\n\t\treturn nil, errors.New(\"could not find moduledata\")\n\t}\n\treturn dataSection[off : off+0x300], nil\n}\n\n// _STT_FUNC is a code object, see /usr/include/elf.h for a full definition.\nconst _STT_FUNC = 2\n\nfunc (bi *BinaryInfo) loadSymbolName(image *Image, file *elf.File, wg *sync.WaitGroup) {\n\tdefer wg.Done()\n\tif bi.SymNames == nil {\n\t\tbi.SymNames = make(map[uint64]*elf.Symbol)\n\t}\n\tsymSecs, _ := file.Symbols()\n\tfor _, symSec := range symSecs {\n\t\tif symSec.Info == _STT_FUNC { // TODO(chainhelen), need to parse others types.\n\t\t\ts := symSec\n\t\t\tbi.SymNames[symSec.Value+image.StaticBase] = &s\n\t\t}\n\t}\n}\n\nfunc (bi *BinaryInfo) loadBuildID(image *Image, file *elf.File) {\n\tbuildid := file.Section(\".note.gnu.build-id\")\n\tif buildid == nil {\n\t\treturn\n\t}\n\n\tbr := buildid.Open()\n\tbh := new(buildIDHeader)\n\tif err := binary.Read(br, binary.LittleEndian, bh); err != nil {\n\t\tbi.logger.Warnf(\"can't read build-id header: %v\", err)\n\t\treturn\n\t}\n\n\tname := make([]byte, bh.Namesz)\n\tif err := binary.Read(br, binary.LittleEndian, name); err != nil {\n\t\tbi.logger.Warnf(\"can't read build-id name: %v\", err)\n\t\treturn\n\t}\n\n\tif strings.TrimSpace(string(name)) != \"GNU\\x00\" {\n\t\tbi.logger.Warn(\"invalid build-id signature\")\n\t\treturn\n\t}\n\n\tdescBinary := make([]byte, bh.Descsz)\n\tif err := binary.Read(br, binary.LittleEndian, descBinary); err != nil {\n\t\tbi.logger.Warnf(\"can't read build-id desc: %v\", err)\n\t\treturn\n\t}\n\timage.BuildID = hex.EncodeToString(descBinary)\n}\n\nfunc (bi *BinaryInfo) getDebugLink(exe *elf.File) (debugLink string, crc uint32) {\n\tgnuDebugLink := exe.Section(\".gnu_debuglink\")\n\tif gnuDebugLink == nil {\n\t\treturn\n\t}\n\n\tbr := gnuDebugLink.Open()\n\tbuf, err := io.ReadAll(br)\n\tif err != nil {\n\t\tbi.logger.Warnf(\"can't read .gnu_debuglink: %v\", err)\n\t\treturn\n\t}\n\tzero := bytes.Index(buf, []byte{0})\n\tif zero <= 0 || len(buf[zero+1:]) < 4 {\n\t\tbi.logger.Warnf(\"wrong .gnu_debuglink format: %q\", buf)\n\t\treturn\n\t}\n\tdebugLink = string(buf[:zero])\n\tcrc = binary.LittleEndian.Uint32(buf[len(buf)-4:])\n\treturn\n}\n\nfunc (bi *BinaryInfo) parseDebugFrameElf(image *Image, dwarfFile, exeFile *elf.File, debugInfoBytes []byte, wg *sync.WaitGroup) {\n\tdefer wg.Done()\n\n\tdebugFrameData, debugFrameErr := godwarf.GetDebugSectionElf(dwarfFile, \"frame\")\n\tehFrameSection := exeFile.Section(\".eh_frame\")\n\tvar ehFrameData []byte\n\tvar ehFrameAddr uint64\n\tif ehFrameSection != nil {\n\t\tehFrameAddr = ehFrameSection.Addr\n\t\t// Workaround for go.dev/cl/429601\n\t\tif ehFrameSection.Type == elf.SHT_NOBITS {\n\t\t\tehFrameData = make([]byte, ehFrameSection.Size)\n\t\t} else {\n\t\t\tehFrameData, _ = ehFrameSection.Data()\n\t\t}\n\t}\n\n\tbi.parseDebugFrameGeneral(image, debugFrameData, \".debug_frame\", debugFrameErr, ehFrameData, ehFrameAddr, \".eh_frame\", frame.DwarfEndian(debugInfoBytes))\n}\n\nfunc (bi *BinaryInfo) setGStructOffsetElf(image *Image, exe *elf.File, wg *sync.WaitGroup) {\n\tdefer wg.Done()\n\n\t// This is a bit arcane. Essentially:\n\t// - If the program is pure Go, it can do whatever it wants, and puts the G\n\t//   pointer at %fs-8 on 64 bit.\n\t// - %Gs is the index of private storage in GDT on 32 bit, and puts the G\n\t//   pointer at -4(tls).\n\t// - Otherwise, Go asks the external linker to place the G pointer by\n\t//   emitting runtime.tlsg, a TLS symbol, which is relocated to the chosen\n\t//   offset in libc's TLS block.\n\t// - On ARM64 (but really, any architecture other than i386 and 86x64) the\n\t//   offset is calculated using runtime.tls_g and the formula is different.\n\n\tvar tls *elf.Prog\n\tfor _, prog := range exe.Progs {\n\t\tif prog.Type == elf.PT_TLS {\n\t\t\ttls = prog\n\t\t\tbreak\n\t\t}\n\t}\n\n\tswitch exe.Machine {\n\tcase elf.EM_X86_64, elf.EM_386:\n\t\ttlsg := getSymbol(image, bi.logger, exe, \"runtime.tlsg\")\n\t\tif tlsg == nil || tls == nil {\n\t\t\tbi.gStructOffset = ^uint64(bi.Arch.PtrSize()) + 1 //-ptrSize\n\t\t\treturn\n\t\t}\n\n\t\t// According to https://reviews.llvm.org/D61824, linkers must pad the actual\n\t\t// size of the TLS segment to ensure that (tlsoffset%align) == (vaddr%align).\n\t\t// This formula, copied from the lld code, matches that.\n\t\t// https://github.com/llvm-mirror/lld/blob/9aef969544981d76bea8e4d1961d3a6980980ef9/ELF/InputSection.cpp#L643\n\t\tmemsz := tls.Memsz + (-tls.Vaddr-tls.Memsz)&(tls.Align-1)\n\n\t\t// The TLS register points to the end of the TLS block, which is\n\t\t// tls.Memsz long. runtime.tlsg is an offset from the beginning of that block.\n\t\tbi.gStructOffset = ^(memsz) + 1 + tlsg.Value // -tls.Memsz + tlsg.Value\n\n\tcase elf.EM_AARCH64:\n\t\ttlsg := getSymbol(image, bi.logger, exe, \"runtime.tls_g\")\n\t\tif tlsg == nil || tls == nil {\n\t\t\tbi.gStructOffset = 2 * uint64(bi.Arch.PtrSize())\n\t\t\treturn\n\t\t}\n\n\t\tbi.gStructOffset = tlsg.Value + uint64(bi.Arch.PtrSize()*2) + ((tls.Vaddr - uint64(bi.Arch.PtrSize()*2)) & (tls.Align - 1))\n\n\tcase elf.EM_PPC64, elf.EM_RISCV, elf.EM_LOONGARCH:\n\t\t_ = getSymbol(image, bi.logger, exe, \"runtime.tls_g\")\n\n\tdefault:\n\t\t// we should never get here\n\t\tpanic(\"architecture not supported\")\n\t}\n}\n\nfunc getSymbol(image *Image, logger logflags.Logger, exe *elf.File, name string) *elf.Symbol {\n\tsymbols, err := exe.Symbols()\n\tif err != nil {\n\t\timage.setLoadError(logger, \"could not parse ELF symbols: %v\", err)\n\t\treturn nil\n\t}\n\n\tfor _, symbol := range symbols {\n\t\tif symbol.Name == name {\n\t\t\ts := symbol\n\t\t\treturn &s\n\t\t}\n\t}\n\treturn nil\n}\n\n// PE ////////////////////////////////////////////////////////////////\n\nconst _IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040\n\n// loadBinaryInfoPE specifically loads information from a PE binary.\nfunc loadBinaryInfoPE(bi *BinaryInfo, image *Image, path string, entryPoint uint64, wg *sync.WaitGroup) error {\n\tpeFile, closer, err := openExecutablePathPE(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\timage.closer = closer\n\tcpuArch := _PEMachine(peFile.Machine)\n\tif !supportedWindowsArch[cpuArch] {\n\t\treturn &ErrUnsupportedArch{os: \"windows\", cpuArch: cpuArch}\n\t}\n\timage.dwarf, err = peFile.DWARF()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdebugInfoBytes, err := godwarf.GetDebugSectionPE(peFile, \"info\")\n\tif err != nil {\n\t\treturn err\n\t}\n\topth := peFile.OptionalHeader.(*pe.OptionalHeader64)\n\tif entryPoint != 0 {\n\t\timage.StaticBase = entryPoint - opth.ImageBase\n\t} else {\n\t\tif opth.DllCharacteristics&_IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE != 0 {\n\t\t\treturn ErrCouldNotDetermineRelocation\n\t\t}\n\t}\n\n\timage.dwarfReader = image.dwarf.Reader()\n\n\tdebugLineBytes, err := godwarf.GetDebugSectionPE(peFile, \"line\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdebugLocBytes, _ := godwarf.GetDebugSectionPE(peFile, \"loc\")\n\timage.loclist2 = loclist.NewDwarf2Reader(debugLocBytes, bi.Arch.PtrSize())\n\tdebugLoclistBytes, _ := godwarf.GetDebugSectionPE(peFile, \"loclists\")\n\timage.loclist5 = loclist.NewDwarf5Reader(debugLoclistBytes)\n\tdebugAddrBytes, _ := godwarf.GetDebugSectionPE(peFile, \"addr\")\n\timage.debugAddr = godwarf.ParseAddr(debugAddrBytes)\n\tdebugLineStrBytes, _ := godwarf.GetDebugSectionPE(peFile, \"line_str\")\n\timage.debugLineStr = debugLineStrBytes\n\n\twg.Add(2)\n\tgo bi.parseDebugFramePE(image, peFile, debugInfoBytes, wg)\n\tgo bi.loadDebugInfoMaps(image, debugInfoBytes, debugLineBytes, wg, func() {\n\t\t// setGStructOffsetPE requires the image compile units to be loaded,\n\t\t// so it can't be called concurrently with loadDebugInfoMaps.\n\t\tif image.index == 0 {\n\t\t\t// determine g struct offset only when loading the executable file.\n\t\t\tbi.setGStructOffsetPE(entryPoint, peFile)\n\t\t}\n\t})\n\treturn nil\n}\n\nfunc (bi *BinaryInfo) setGStructOffsetPE(entryPoint uint64, peFile *pe.File) {\n\treadtls_g := func() uint64 {\n\t\tfor _, s := range peFile.Symbols {\n\t\t\tif s.Name == \"runtime.tls_g\" {\n\t\t\t\ti := int(s.SectionNumber) - 1\n\t\t\t\tif 0 <= i && i < len(peFile.Sections) {\n\t\t\t\t\tsect := peFile.Sections[i]\n\t\t\t\t\tif s.Value < sect.VirtualSize {\n\t\t\t\t\t\treturn entryPoint + uint64(sect.VirtualAddress) + uint64(s.Value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn 0\n\t}\n\tswitch _PEMachine(peFile.Machine) {\n\tcase _IMAGE_FILE_MACHINE_AMD64:\n\t\tproducer := bi.Producer()\n\t\tif producer != \"\" && goversion.ProducerAfterOrEqual(producer, 1, 20) {\n\t\t\t// Use runtime.tls_g as pointer to offset from GS to G struct:\n\t\t\t// https://go.dev/src/runtime/sys_windows_amd64.s\n\t\t\tbi.gStructOffset = readtls_g()\n\t\t\tbi.gStructOffsetIsPtr = true\n\t\t} else {\n\t\t\t// Use ArbitraryUserPointer (0x28) as pointer to pointer\n\t\t\t// to G struct per:\n\t\t\t// https://go.dev/src/runtime/cgo/gcc_windows_amd64.c\n\t\t\tbi.gStructOffset = 0x28\n\t\t}\n\tcase _IMAGE_FILE_MACHINE_ARM64:\n\t\t// Use runtime.tls_g as pointer to offset from R18 to G struct:\n\t\t// https://go.dev/src/runtime/sys_windows_arm64.s\n\t\tbi.gStructOffset = readtls_g()\n\t\tbi.gStructOffsetIsPtr = true\n\t}\n}\n\nfunc openExecutablePathPE(path string) (*pe.File, io.Closer, error) {\n\tf, err := os.OpenFile(path, 0, os.ModePerm)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tpeFile, err := pe.NewFile(f)\n\tif err != nil {\n\t\tf.Close()\n\t\treturn nil, nil, err\n\t}\n\treturn peFile, f, nil\n}\n\nfunc (bi *BinaryInfo) parseDebugFramePE(image *Image, exe *pe.File, debugInfoBytes []byte, wg *sync.WaitGroup) {\n\tdefer wg.Done()\n\n\tdebugFrameBytes, err := godwarf.GetDebugSectionPE(exe, \"frame\")\n\tbi.parseDebugFrameGeneral(image, debugFrameBytes, \".debug_frame\", err, nil, 0, \"\", frame.DwarfEndian(debugInfoBytes))\n}\n\n// MACH-O ////////////////////////////////////////////////////////////\n\n// loadBinaryInfoMacho specifically loads information from a Mach-O binary.\nfunc loadBinaryInfoMacho(bi *BinaryInfo, image *Image, path string, entryPoint uint64, wg *sync.WaitGroup) error {\n\texe, err := macho.Open(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif entryPoint != 0 {\n\t\tmachoOff := uint64(0x100000000)\n\t\tfor _, ld := range exe.Loads {\n\t\t\tif seg, _ := ld.(*macho.Segment); seg != nil {\n\t\t\t\tif seg.Name == \"__TEXT\" {\n\t\t\t\t\tmachoOff = seg.Addr\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlogflags.DebuggerLogger().Debugf(\"entryPoint %#x machoOff %#x\", entryPoint, machoOff)\n\t\timage.StaticBase = entryPoint - machoOff\n\t}\n\n\timage.closer = exe\n\tif !supportedDarwinArch[exe.Cpu] {\n\t\treturn &ErrUnsupportedArch{os: \"darwin\", cpuArch: exe.Cpu}\n\t}\n\tvar dwerr error\n\tmacOSShortSectionNamesWorkaround(exe)\n\timage.dwarf, dwerr = exe.DWARF()\n\tif dwerr != nil {\n\t\tif len(bi.Images) <= 1 {\n\t\t\tfmt.Fprintln(os.Stderr, \"Warning: no debug info found, some functionality will be missing such as stack traces and variable evaluation.\")\n\t\t}\n\t\terr := loadBinaryInfoGoRuntimeMacho(bi, image, path, exe)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"could not read debug info (%v) and could not read go symbol table (%v)\", dwerr, err)\n\t\t}\n\t\treturn nil\n\t}\n\tdebugInfoBytes, err := godwarf.GetDebugSectionMacho(exe, \"info\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\timage.dwarfReader = image.dwarf.Reader()\n\n\tdebugLineBytes, err := godwarf.GetDebugSectionMacho(exe, \"line\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdebugLocBytes, _ := godwarf.GetDebugSectionMacho(exe, \"loc\")\n\timage.loclist2 = loclist.NewDwarf2Reader(debugLocBytes, bi.Arch.PtrSize())\n\tdebugLoclistBytes, _ := godwarf.GetDebugSectionMacho(exe, \"loclists\")\n\timage.loclist5 = loclist.NewDwarf5Reader(debugLoclistBytes)\n\tdebugAddrBytes, _ := godwarf.GetDebugSectionMacho(exe, \"addr\")\n\timage.debugAddr = godwarf.ParseAddr(debugAddrBytes)\n\tdebugLineStrBytes, _ := godwarf.GetDebugSectionMacho(exe, \"line_str\")\n\timage.debugLineStr = debugLineStrBytes\n\n\twg.Add(2)\n\tgo bi.parseDebugFrameMacho(image, exe, debugInfoBytes, wg)\n\tgo bi.loadDebugInfoMaps(image, debugInfoBytes, debugLineBytes, wg, bi.setGStructOffsetMacho)\n\treturn nil\n}\n\nfunc (bi *BinaryInfo) setGStructOffsetMacho() {\n\t// In go1.11 it's 0x30, before 0x8a0, see:\n\t// https://github.com/golang/go/issues/23617\n\t// and go commit b3a854c733257c5249c3435ffcee194f8439676a\n\tproducer := bi.Producer()\n\tif producer != \"\" && goversion.ProducerAfterOrEqual(producer, 1, 11) {\n\t\tbi.gStructOffset = 0x30\n\t\treturn\n\t}\n\tbi.gStructOffset = 0x8a0\n}\n\nfunc (bi *BinaryInfo) parseDebugFrameMacho(image *Image, exe *macho.File, debugInfoBytes []byte, wg *sync.WaitGroup) {\n\tdefer wg.Done()\n\n\tdebugFrameBytes, debugFrameErr := godwarf.GetDebugSectionMacho(exe, \"frame\")\n\tehFrameSection := exe.Section(\"__eh_frame\")\n\tvar ehFrameBytes []byte\n\tvar ehFrameAddr uint64\n\tif ehFrameSection != nil {\n\t\tehFrameAddr = ehFrameSection.Addr\n\t\tehFrameBytes, _ = ehFrameSection.Data()\n\t}\n\n\tbi.parseDebugFrameGeneral(image, debugFrameBytes, \"__debug_frame\", debugFrameErr, ehFrameBytes, ehFrameAddr, \"__eh_frame\", frame.DwarfEndian(debugInfoBytes))\n}\n\n// macOSDebugFrameBugWorkaround applies a workaround for [golang/go#25841]\n//\n// It finds the Go function with the lowest entry point and the first\n// debug_frame FDE, calculates the difference between the start of the\n// function and the start of the FDE and sums it to all debug_frame FDEs.\n// A number of additional checks are performed to make sure we don't ruin\n// executables unaffected by this bug.\n//\n// [golang/go#25841]: https://github.com/golang/go/issues/25841\nfunc (bi *BinaryInfo) macOSDebugFrameBugWorkaround() {\n\tif bi.GOOS != \"darwin\" {\n\t\treturn\n\t}\n\tif len(bi.Images) > 1 {\n\t\t// Only do this for the first executable, but it might work for plugins as\n\t\t// well if we had a way to distinguish where entries in bi.frameEntries\n\t\t// come from\n\t\treturn\n\t}\n\texe, ok := bi.Images[0].closer.(*macho.File)\n\tif !ok {\n\t\treturn\n\t}\n\tif bi.Arch.Name == \"arm64\" {\n\t\tif exe.Flags&macho.FlagPIE == 0 {\n\t\t\tbi.logger.Infof(\"debug_frame workaround not needed: not a PIE (%#x)\", exe.Flags)\n\t\t\treturn\n\t\t}\n\t} else {\n\t\tprod := goversion.ParseProducer(bi.Producer())\n\t\tif !prod.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 19, Rev: 3}) && !prod.IsOldDevel() {\n\t\t\tbi.logger.Infof(\"debug_frame workaround not needed (version %q on %s)\", bi.Producer(), bi.Arch.Name)\n\t\t\treturn\n\t\t}\n\t\tfound := false\n\t\tfor i := range bi.frameEntries {\n\t\t\tif bi.frameEntries[i].CIE.CIE_id == ^uint32(0) && bi.frameEntries[i].Begin() < 0x4000000 {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tbi.logger.Infof(\"debug_frame workaround not needed (all FDEs above 0x4000000)\")\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Find first Go function (first = lowest entry point)\n\tvar fn *Function\n\tfor i := range bi.Functions {\n\t\tif bi.Functions[i].cu.isgo && bi.Functions[i].Entry > 0 {\n\t\t\tfn = &bi.Functions[i]\n\t\t\tbreak\n\t\t}\n\t}\n\tif fn == nil {\n\t\tbi.logger.Warn(\"debug_frame workaround not applied: could not find a Go function\")\n\t\treturn\n\t}\n\n\tif fde, _ := bi.frameEntries.FDEForPC(fn.Entry); fde != nil {\n\t\t// Function is covered, no need to apply workaround\n\t\tbi.logger.Warnf(\"debug_frame workaround not applied: function %s (at %#x) covered by %#x-%#x\", fn.Name, fn.Entry, fde.Begin(), fde.End())\n\t\treturn\n\t}\n\n\t// Find lowest FDE in debug_frame\n\tvar fde *frame.FrameDescriptionEntry\n\tfor i := range bi.frameEntries {\n\t\tif bi.frameEntries[i].CIE.CIE_id == ^uint32(0) {\n\t\t\tfde = bi.frameEntries[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif fde == nil {\n\t\tbi.logger.Warnf(\"debug_frame workaround not applied because there are no debug_frame entries (%d)\", len(bi.frameEntries))\n\t\treturn\n\t}\n\n\tfnsize := fn.End - fn.Entry\n\n\tif fde.End()-fde.Begin() != fnsize || fde.Begin() > fn.Entry {\n\t\tbi.logger.Warnf(\"debug_frame workaround not applied: function %s (at %#x-%#x) has a different size than the first FDE (%#x-%#x) (or the FDE starts after the function)\", fn.Name, fn.Entry, fn.End, fde.Begin(), fde.End())\n\t\treturn\n\t}\n\n\tdelta := fn.Entry - fde.Begin()\n\n\tbi.logger.Infof(\"applying debug_frame workaround +%#x: function %s (at %#x-%#x) and FDE %#x-%#x\", delta, fn.Name, fn.Entry, fn.End, fde.Begin(), fde.End())\n\n\tfor i := range bi.frameEntries {\n\t\tif bi.frameEntries[i].CIE.CIE_id == ^uint32(0) {\n\t\t\tbi.frameEntries[i].Translate(delta)\n\t\t}\n\t}\n}\n\n// macOSShortSectionNamesWorkaround works around a bug in Go 1.23 (and\n// earlier).\n// Section names in Macho-O executables are limited to 16 characters, which\n// means that some DWARF sections with long names will be truncated. Go 1.23\n// and prior do not take into account this making the DWARF info sometimes\n// unreadable.\n// This bug only manifests on macOS 15 because the C toolchain of prior\n// versions of the operating system did not emit problematic DWARF sections.\n// See also https://github.com/go-delve/delve/issues/3797\nfunc macOSShortSectionNamesWorkaround(exe *macho.File) {\n\tfor _, sec := range exe.Sections {\n\t\tif sec == nil {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, longname := range []string{\n\t\t\t\"__debug_str_offsets\",\n\t\t\t\"__zdebug_line_str\",\n\t\t\t\"__zdebug_loclists\",\n\t\t\t\"__zdebug_pubnames\",\n\t\t\t\"__zdebug_pubtypes\",\n\t\t\t\"__zdebug_rnglists\",\n\t\t\t\"__zdebug_str_offsets\",\n\t\t} {\n\t\t\tif sec.Name == longname[:16] {\n\t\t\t\tlogflags.DebuggerLogger().Debugf(\"expanding section name %q to %q\", sec.Name, longname)\n\t\t\t\tsec.Name = longname\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n}\n\n// GO RUNTIME INFO ////////////////////////////////////////////////////////////\n\n// loadBinaryInfoGoRuntimeElf loads information from the Go runtime sections\n// of an ELF binary, it is only called when debug info has been stripped.\nfunc loadBinaryInfoGoRuntimeElf(bi *BinaryInfo, image *Image, path string, elfFile *elf.File) (err error) {\n\t// This is a best-effort procedure, it can go wrong in unexpected ways, so\n\t// recover all panics.\n\tdefer func() {\n\t\tierr := recover()\n\t\tif ierr != nil {\n\t\t\tlogflags.Bug.Inc()\n\t\t\terr = fmt.Errorf(\"error loading binary info from Go runtime: %v\", ierr)\n\t\t}\n\t}()\n\n\tcu := &compileUnit{}\n\tcu.image = image\n\tsymTable, symTabAddr, err := readPcLnTableElf(elfFile, path)\n\tif err != nil {\n\t\treturn err\n\t}\n\timage.symTable = symTable\n\n\t// In Go 1.26+, moduledata is in the .go.module section.\n\t// In earlier versions, we need to search for it in .noptrdata.\n\tvar md []byte\n\tif goModuleSec := elfFile.Section(\".go.module\"); goModuleSec != nil {\n\t\t// Go 1.26+: .go.module section contains moduledata directly\n\t\tmd, err = goModuleSec.Data()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\t// Go 1.25 and earlier: search for moduledata in .noptrdata\n\t\tnoPtrSectionData, err := elfFile.Section(\".noptrdata\").Data()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmd, err = parseModuleData(noPtrSectionData, symTabAddr)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\troDataAddr := elfFile.Section(\".rodata\").Addr\n\tgoFuncVal, err := findGoFuncVal(md, roDataAddr, bi.Arch.ptrSize)\n\tif err != nil {\n\t\treturn err\n\t}\n\tprog := gosym.ProgContaining(elfFile, goFuncVal)\n\tvar progAddr uint64\n\tvar progReaderAt io.ReaderAt\n\tif prog != nil {\n\t\tprogAddr = prog.Vaddr\n\t\tprogReaderAt = prog.ReaderAt\n\t}\n\treturn loadBinaryInfoGoRuntimeCommon(bi, image, cu, goFuncVal, progAddr, progReaderAt)\n}\n\n// loadBinaryInfoGoRuntimeMacho loads information from the Go runtime sections\n// of an Macho-o binary, it is only called when debug info has been stripped.\nfunc loadBinaryInfoGoRuntimeMacho(bi *BinaryInfo, image *Image, path string, exe *macho.File) (err error) {\n\t// This is a best-effort procedure, it can go wrong in unexpected ways, so\n\t// recover all panics.\n\tdefer func() {\n\t\tierr := recover()\n\t\tif ierr != nil {\n\t\t\tlogflags.Bug.Inc()\n\t\t\terr = fmt.Errorf(\"error loading binary info from Go runtime: %v\", ierr)\n\t\t}\n\t}()\n\n\tcu := &compileUnit{}\n\tcu.image = image\n\tsymTable, symTabAddr, err := readPcLnTableMacho(exe, path)\n\tif err != nil {\n\t\treturn err\n\t}\n\timage.symTable = symTable\n\n\t// In Go 1.26+, moduledata is in the __go_module section.\n\t// In earlier versions, we need to search for it in __noptrdata.\n\tvar md []byte\n\tif goModuleSec := exe.Section(\"__go_module\"); goModuleSec != nil {\n\t\t// Go 1.26+: __go_module section contains moduledata directly\n\t\tmd, err = goModuleSec.Data()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\t// Go 1.25 and earlier: search for moduledata in __noptrdata\n\t\tnoPtrSectionData, err := exe.Section(\"__noptrdata\").Data()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmd, err = parseModuleData(noPtrSectionData, symTabAddr)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\troDataAddr := exe.Section(\"__rodata\").Addr\n\tgoFuncVal, err := findGoFuncVal(md, roDataAddr, bi.Arch.ptrSize)\n\tif err != nil {\n\t\treturn err\n\t}\n\tseg := gosym.SegmentContaining(exe, goFuncVal)\n\tvar segAddr uint64\n\tvar segReaderAt io.ReaderAt\n\tif seg != nil {\n\t\tsegAddr = seg.Addr\n\t\tsegReaderAt = seg.ReaderAt\n\t}\n\treturn loadBinaryInfoGoRuntimeCommon(bi, image, cu, goFuncVal, segAddr, segReaderAt)\n}\n\nfunc loadBinaryInfoGoRuntimeCommon(bi *BinaryInfo, image *Image, cu *compileUnit, goFuncVal uint64, goFuncSegAddr uint64, goFuncReader io.ReaderAt) error {\n\tinlFuncs := make(map[string]*Function)\n\tfor _, f := range image.symTable.Funcs {\n\t\tfnEntry := f.Entry + image.StaticBase\n\t\tif goFuncReader != nil {\n\t\t\tinlCalls, err := image.symTable.GetInlineTree(&f, goFuncVal, goFuncSegAddr, goFuncReader)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tfor _, inlfn := range inlCalls {\n\t\t\t\tnewInlinedCall := InlinedCall{cu: cu, LowPC: fnEntry + uint64(inlfn.ParentPC)}\n\t\t\t\tif fn, ok := inlFuncs[inlfn.Name]; ok {\n\t\t\t\t\tfn.InlinedCalls = append(fn.InlinedCalls, newInlinedCall)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tinlFuncs[inlfn.Name] = &Function{\n\t\t\t\t\tName:  inlfn.Name,\n\t\t\t\t\tEntry: 0, End: 0,\n\t\t\t\t\tcu: cu,\n\t\t\t\t\tInlinedCalls: []InlinedCall{\n\t\t\t\t\t\tnewInlinedCall,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfn := Function{Name: f.Name, Entry: fnEntry, End: f.End + image.StaticBase, cu: cu}\n\t\tbi.Functions = append(bi.Functions, fn)\n\t}\n\tfor i := range inlFuncs {\n\t\tbi.Functions = append(bi.Functions, *inlFuncs[i])\n\t}\n\tslices.SortFunc(bi.Functions, func(a, b Function) int { return cmp.Compare(a.Entry, b.Entry) })\n\tfor f := range image.symTable.Files {\n\t\tbi.Sources = append(bi.Sources, f)\n\t}\n\tsort.Strings(bi.Sources)\n\tbi.Sources = slices.Compact(bi.Sources)\n\treturn nil\n}\n\n// Do not call this function directly it isn't able to deal correctly with package paths\nfunc (bi *BinaryInfo) findType(name string) (godwarf.Type, error) {\n\tname = strings.ReplaceAll(name, \"interface{\", \"interface {\")\n\tname = strings.ReplaceAll(name, \"struct{\", \"struct {\")\n\tref, found := bi.types[name]\n\tif !found {\n\t\treturn nil, reader.ErrTypeNotFound\n\t}\n\timage := bi.Images[ref.imageIndex]\n\treturn godwarf.ReadType(image.dwarf, ref.imageIndex, ref.offset, image.typeCache)\n}\n\nfunc (bi *BinaryInfo) findTypeExpr(expr ast.Expr) (godwarf.Type, error) {\n\tif lit, islit := expr.(*ast.BasicLit); islit && lit.Kind == token.STRING {\n\t\t// Allow users to specify type names verbatim as quoted\n\t\t// string. Useful as a catch-all workaround for cases where we don't\n\t\t// parse/serialize types correctly or can not resolve package paths.\n\t\ttypn, _ := strconv.Unquote(lit.Value)\n\n\t\t// Check if the type in question is an array type, in which case we try to\n\t\t// fake it.\n\t\tif len(typn) > 0 && typn[0] == '[' {\n\t\t\tclosedBrace := strings.Index(typn, \"]\")\n\t\t\tif closedBrace > 1 {\n\t\t\t\tn, err := strconv.Atoi(typn[1:closedBrace])\n\t\t\t\tif err == nil {\n\t\t\t\t\treturn bi.findArrayType(n, typn[closedBrace+1:])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn bi.findType(typn)\n\t}\n\tbi.expandPackagesInType(expr)\n\tif snode, ok := expr.(*ast.StarExpr); ok {\n\t\t// Pointer types only appear in the dwarf information when\n\t\t// a pointer to the type is used in the target program, here\n\t\t// we create a pointer type on the fly so that the user can\n\t\t// specify a pointer to any variable used in the target program\n\t\tptyp, err := bi.findTypeExpr(snode.X)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn pointerTo(ptyp, bi.Arch), nil\n\t}\n\tif anode, ok := expr.(*ast.ArrayType); ok {\n\t\t// Array types (for example [N]byte) are only present in DWARF if they are\n\t\t// used by the program, but it's convenient to make all of them available\n\t\t// to the user for two reasons:\n\t\t// 1. to allow reading arbitrary memory byte-by-byte (by casting an\n\t\t//    address to an array of bytes).\n\t\t// 2. to read the contents of a channel's buffer (we create fake array\n\t\t//    types for them)\n\n\t\talen, litlen := anode.Len.(*ast.BasicLit)\n\t\tif litlen && alen.Kind == token.INT {\n\t\t\tn, _ := strconv.Atoi(alen.Value)\n\t\t\treturn bi.findArrayType(n, astutil.ExprToString(anode.Elt))\n\t\t}\n\t}\n\treturn bi.findType(astutil.ExprToString(expr))\n}\n\nfunc (bi *BinaryInfo) findArrayType(n int, etyp string) (godwarf.Type, error) {\n\tswitch etyp {\n\tcase \"byte\", \"uint8\":\n\t\tetyp = \"uint8\"\n\t\tfallthrough\n\tdefault:\n\t\tbtyp, err := bi.findType(etyp)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn fakeArrayType(uint64(n), btyp), nil\n\t}\n}\n\nfunc complexType(typename string) bool {\n\tfor _, ch := range typename {\n\t\tswitch ch {\n\t\tcase '*', '[', '<', '{', '(', ' ':\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (bi *BinaryInfo) registerTypeToPackageMap(entry *dwarf.Entry) {\n\tif entry.Tag != dwarf.TagTypedef && entry.Tag != dwarf.TagBaseType && entry.Tag != dwarf.TagClassType && entry.Tag != dwarf.TagStructType {\n\t\treturn\n\t}\n\n\ttypename, ok := entry.Val(dwarf.AttrName).(string)\n\tif !ok || complexType(typename) {\n\t\treturn\n\t}\n\n\tdot := strings.LastIndex(typename, \".\")\n\tif dot < 0 {\n\t\treturn\n\t}\n\tpath := typename[:dot]\n\tslash := strings.LastIndex(path, \"/\")\n\tif slash < 0 || slash+1 >= len(path) {\n\t\treturn\n\t}\n\tname := path[slash+1:]\n\tbi.PackageMap[name] = []string{path}\n}\n\nfunc (bi *BinaryInfo) loadDebugInfoMaps(image *Image, debugInfoBytes, debugLineBytes []byte, wg *sync.WaitGroup, cont func()) {\n\tif wg != nil {\n\t\tdefer wg.Done()\n\t}\n\n\tif bi.types == nil {\n\t\tbi.types = make(map[string]dwarfRef)\n\t}\n\tif bi.consts == nil {\n\t\tbi.consts = make(map[dwarfRef]*constantType)\n\t}\n\tif bi.PackageMap == nil {\n\t\tbi.PackageMap = make(map[string][]string)\n\t}\n\tif bi.inlinedCallLines == nil {\n\t\tbi.inlinedCallLines = make(map[fileLine][]uint64)\n\t}\n\tif bi.dwrapUnwrapCache == nil {\n\t\tbi.dwrapUnwrapCache = make(map[uint64]*Function)\n\t}\n\n\timage.runtimeTypeToDIE = make(map[uint64]runtimeTypeDIE)\n\n\tctxt := newLoadDebugInfoMapsContext(bi, image, pdwarf.ReadUnitVersions(debugInfoBytes))\n\n\treader := image.DwarfReader()\n\n\tfor {\n\t\tentry, err := reader.Next()\n\t\tif err != nil {\n\t\t\timage.setLoadError(bi.logger, \"error reading debug_info: %v\", err)\n\t\t\tbreak\n\t\t}\n\t\tif entry == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch entry.Tag {\n\t\tcase dwarf.TagCompileUnit:\n\t\t\tcu := &compileUnit{}\n\t\t\tcu.image = image\n\t\t\tcu.entry = entry\n\t\t\tcu.offset = entry.Offset\n\t\t\tcu.Version = ctxt.offsetToVersion[cu.offset]\n\t\t\tif lang, _ := entry.Val(dwarf.AttrLanguage).(int64); lang == dwarfGoLanguage {\n\t\t\t\tcu.isgo = true\n\t\t\t\timage.IsGo = true\n\t\t\t}\n\t\t\tcu.name, _ = entry.Val(dwarf.AttrName).(string)\n\t\t\tcompdir, _ := entry.Val(dwarf.AttrCompDir).(string)\n\t\t\tif compdir != \"\" {\n\t\t\t\tcu.name = filepath.Join(compdir, cu.name)\n\t\t\t}\n\t\t\tcu.ranges, _ = image.dwarf.Ranges(entry)\n\t\t\tfor i := range cu.ranges {\n\t\t\t\tcu.ranges[i][0] += image.StaticBase\n\t\t\t\tcu.ranges[i][1] += image.StaticBase\n\t\t\t}\n\t\t\tif len(cu.ranges) >= 1 {\n\t\t\t\tcu.lowPC = cu.ranges[0][0]\n\t\t\t}\n\t\t\tlineInfoOffset, hasLineInfo := entry.Val(dwarf.AttrStmtList).(int64)\n\t\t\tif hasLineInfo && lineInfoOffset >= 0 && lineInfoOffset < int64(len(debugLineBytes)) {\n\t\t\t\tvar logfn func(string, ...any)\n\t\t\t\tif logflags.DebugLineErrors() {\n\t\t\t\t\tlogfn = logflags.DebugLineLogger().Debugf\n\t\t\t\t}\n\t\t\t\tcu.lineInfo = line.Parse(compdir, bytes.NewBuffer(debugLineBytes[lineInfoOffset:]), image.debugLineStr, logfn, image.StaticBase, bi.GOOS == \"windows\", bi.Arch.PtrSize())\n\t\t\t}\n\t\t\tcu.producer, _ = entry.Val(dwarf.AttrProducer).(string)\n\t\t\tif cu.isgo && cu.producer != \"\" {\n\t\t\t\tsemicolon := strings.Index(cu.producer, \";\")\n\t\t\t\tif semicolon < 0 {\n\t\t\t\t\tcu.optimized = 0\n\t\t\t\t\tif goversion.ProducerAfterOrEqual(cu.producer, 1, 10) {\n\t\t\t\t\t\tcu.optimized = optimizedInlined | optimizedOptimized\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tcu.optimized = optimizedInlined | optimizedOptimized\n\t\t\t\t\tif strings.Contains(cu.producer[semicolon:], \"-N\") {\n\t\t\t\t\t\tcu.optimized &^= optimizedOptimized\n\t\t\t\t\t}\n\t\t\t\t\tif strings.Contains(cu.producer[semicolon:], \"-l\") {\n\t\t\t\t\t\tcu.optimized &^= optimizedInlined\n\t\t\t\t\t}\n\t\t\t\t\tconst regabi = \" regabi\"\n\t\t\t\t\tif i := strings.Index(cu.producer[semicolon:], regabi); i > 0 {\n\t\t\t\t\t\ti += semicolon\n\t\t\t\t\t\tif i+len(regabi) >= len(cu.producer) || cu.producer[i+len(regabi)] == ' ' {\n\t\t\t\t\t\t\tbi.regabi = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcu.producer = cu.producer[:semicolon]\n\t\t\t\t}\n\t\t\t}\n\t\t\tgopkg, _ := entry.Val(godwarf.AttrGoPackageName).(string)\n\t\t\tif cu.isgo && gopkg != \"\" {\n\t\t\t\tbi.PackageMap[gopkg] = append(bi.PackageMap[gopkg], escapePackagePath(strings.ReplaceAll(cu.name, \"\\\\\", \"/\")))\n\t\t\t}\n\t\t\timage.compileUnits = append(image.compileUnits, cu)\n\t\t\tif entry.Children {\n\t\t\t\tbi.loadDebugInfoMapsCompileUnit(ctxt, image, reader, cu)\n\t\t\t}\n\n\t\tcase dwarf.TagPartialUnit:\n\t\t\treader.SkipChildren()\n\n\t\tdefault:\n\t\t\t// ignore unknown tags\n\t\t\treader.SkipChildren()\n\t\t}\n\t}\n\n\tslices.SortFunc(image.compileUnits, func(a, b *compileUnit) int { return cmp.Compare(a.offset, b.offset) })\n\tslices.SortFunc(bi.Functions, func(a, b Function) int { return cmp.Compare(a.Entry, b.Entry) })\n\tslices.SortFunc(bi.packageVars, func(a, b packageVar) int { return cmp.Compare(a.addr, b.addr) })\n\n\tbi.lookupFunc = nil\n\tbi.lookupGenericFunc = nil\n\n\tfor _, cu := range image.compileUnits {\n\t\tif cu.lineInfo != nil {\n\t\t\tfor _, fileEntry := range cu.lineInfo.FileNames {\n\t\t\t\tbi.Sources = append(bi.Sources, fileEntry.Path)\n\t\t\t}\n\t\t}\n\t}\n\tsort.Strings(bi.Sources)\n\tbi.Sources = slices.Compact(bi.Sources)\n\n\tif cont != nil {\n\t\tcont()\n\t}\n}\n\n// LookupGenericFunc returns a map that allows searching for instantiations of generic function by specifying a function name without type parameters.\n// For example the key \"pkg.(*Receiver).Amethod\" will find all instantiations of Amethod:\n//   - pkg.(*Receiver[.shape.int]).Amethod\n//   - pkg.(*Receiver[.shape.*uint8]).Amethod\n//   - etc.\nfunc (bi *BinaryInfo) LookupGenericFunc() map[string][]*Function {\n\tif bi.lookupGenericFunc == nil {\n\t\tbi.lookupGenericFunc = make(map[string][]*Function)\n\t\tfor i := range bi.Functions {\n\t\t\tdn := bi.Functions[i].NameWithoutTypeParams()\n\t\t\tif dn != bi.Functions[i].Name {\n\t\t\t\tbi.lookupGenericFunc[dn] = append(bi.lookupGenericFunc[dn], &bi.Functions[i])\n\t\t\t}\n\t\t}\n\t}\n\treturn bi.lookupGenericFunc\n}\n\nfunc (bi *BinaryInfo) LookupFunc() map[string][]*Function {\n\tif bi.lookupFunc == nil {\n\t\tbi.lookupFunc = make(map[string][]*Function)\n\t\tfor i := range bi.Functions {\n\t\t\tname := bi.Functions[i].Name\n\t\t\tbi.lookupFunc[name] = append(bi.lookupFunc[name], &bi.Functions[i])\n\t\t}\n\t}\n\treturn bi.lookupFunc\n}\n\nfunc (bi *BinaryInfo) lookupOneFunc(name string) *Function {\n\tif name == evalop.DebugPinnerFunctionName && bi.debugPinnerFn != nil {\n\t\treturn bi.debugPinnerFn\n\t}\n\tfns := bi.LookupFunc()[name]\n\tif fns == nil {\n\t\treturn nil\n\t}\n\tif name == evalop.DebugPinnerFunctionName {\n\t\tbi.debugPinnerFn = fns[0]\n\t}\n\treturn fns[0]\n}\n\nfunc (bi *BinaryInfo) hasDebugPinner() bool {\n\treturn bi.lookupOneFunc(evalop.DebugPinnerFunctionName) != nil\n}\n\n// loadDebugInfoMapsCompileUnit loads entry from a single compile unit.\nfunc (bi *BinaryInfo) loadDebugInfoMapsCompileUnit(ctxt *loadDebugInfoMapsContext, image *Image, reader *reader.Reader, cu *compileUnit) {\n\thasAttrGoPkgName := goversion.ProducerAfterOrEqual(cu.producer, 1, 13)\n\n\tdepth := 0\n\n\tfor {\n\t\tentry, err := reader.Next()\n\t\tif err != nil {\n\t\t\timage.setLoadError(bi.logger, \"error reading debug_info: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tif entry == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch entry.Tag {\n\t\tcase 0:\n\t\t\tif depth == 0 {\n\t\t\t\treturn\n\t\t\t} else {\n\t\t\t\tdepth--\n\t\t\t}\n\t\tcase dwarf.TagImportedUnit:\n\t\t\tbi.loadDebugInfoMapsImportedUnit(entry, ctxt, image, cu)\n\t\t\treader.SkipChildren()\n\n\t\tcase dwarf.TagArrayType, dwarf.TagBaseType, dwarf.TagClassType, dwarf.TagStructType, dwarf.TagUnionType, dwarf.TagConstType, dwarf.TagVolatileType, dwarf.TagRestrictType, dwarf.TagEnumerationType, dwarf.TagPointerType, dwarf.TagSubroutineType, dwarf.TagTypedef, dwarf.TagUnspecifiedType:\n\t\t\tif name, ok := entry.Val(dwarf.AttrName).(string); ok {\n\t\t\t\tif !cu.isgo {\n\t\t\t\t\tname = \"C.\" + name\n\t\t\t\t}\n\t\t\t\tif _, exists := bi.types[name]; !exists {\n\t\t\t\t\tbi.types[name] = dwarfRef{image.index, entry.Offset}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif cu != nil && cu.isgo && !hasAttrGoPkgName {\n\t\t\t\tbi.registerTypeToPackageMap(entry)\n\t\t\t}\n\t\t\timage.registerRuntimeTypeToDIE(entry, ctxt.ardr)\n\t\t\treader.SkipChildren()\n\n\t\tcase dwarf.TagVariable:\n\t\t\tif n, ok := entry.Val(dwarf.AttrName).(string); ok {\n\t\t\t\tvar addr uint64\n\t\t\t\tif loc, ok := entry.Val(dwarf.AttrLocation).([]byte); ok {\n\t\t\t\t\tif len(loc) == bi.Arch.PtrSize()+1 && op.Opcode(loc[0]) == op.DW_OP_addr {\n\t\t\t\t\t\taddr, _ = pdwarf.ReadUintRaw(bytes.NewReader(loc[1:]), binary.LittleEndian, bi.Arch.PtrSize())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif !cu.isgo {\n\t\t\t\t\tn = \"C.\" + n\n\t\t\t\t}\n\t\t\t\tif _, known := ctxt.knownPackageVars[n]; !known {\n\t\t\t\t\tbi.packageVars = append(bi.packageVars, packageVar{n, cu, entry.Offset, addr + image.StaticBase})\n\t\t\t\t}\n\t\t\t}\n\t\t\treader.SkipChildren()\n\n\t\tcase dwarf.TagConstant:\n\t\t\tname, okName := entry.Val(dwarf.AttrName).(string)\n\t\t\ttyp, okType := entry.Val(dwarf.AttrType).(dwarf.Offset)\n\t\t\tval, okVal := entry.Val(dwarf.AttrConstValue).(int64)\n\t\t\tif okName && okType && okVal {\n\t\t\t\tif !cu.isgo {\n\t\t\t\t\tname = \"C.\" + name\n\t\t\t\t}\n\t\t\t\tct := bi.consts[dwarfRef{image.index, typ}]\n\t\t\t\tif ct == nil {\n\t\t\t\t\tct = &constantType{}\n\t\t\t\t\tbi.consts[dwarfRef{image.index, typ}] = ct\n\t\t\t\t}\n\t\t\t\tct.values = append(ct.values, constantValue{name: name, fullName: name, value: val})\n\t\t\t}\n\t\t\treader.SkipChildren()\n\n\t\tcase dwarf.TagSubprogram:\n\t\t\tinlined := false\n\t\t\tif inval, ok := entry.Val(dwarf.AttrInline).(int64); ok {\n\t\t\t\tinlined = inval >= 1\n\t\t\t}\n\n\t\t\tif inlined {\n\t\t\t\tbi.addAbstractSubprogram(entry, ctxt, reader, image, cu)\n\t\t\t} else {\n\t\t\t\toriginOffset, hasAbstractOrigin := entry.Val(dwarf.AttrAbstractOrigin).(dwarf.Offset)\n\t\t\t\tif hasAbstractOrigin {\n\t\t\t\t\tbi.addConcreteInlinedSubprogram(entry, originOffset, ctxt, reader, cu)\n\t\t\t\t} else {\n\t\t\t\t\tbi.addConcreteSubprogram(entry, ctxt, reader, cu)\n\t\t\t\t}\n\t\t\t}\n\n\t\tdefault:\n\t\t\tif entry.Children {\n\t\t\t\tdepth++\n\t\t\t}\n\t\t}\n\t}\n}\n\n// loadDebugInfoMapsImportedUnit loads entries into cu from the partial unit\n// referenced in a DW_TAG_imported_unit entry.\nfunc (bi *BinaryInfo) loadDebugInfoMapsImportedUnit(entry *dwarf.Entry, ctxt *loadDebugInfoMapsContext, image *Image, cu *compileUnit) {\n\toff, ok := entry.Val(dwarf.AttrImport).(dwarf.Offset)\n\tif !ok {\n\t\treturn\n\t}\n\treader := image.DwarfReader()\n\treader.Seek(off)\n\timentry, err := reader.Next()\n\tif err != nil {\n\t\treturn\n\t}\n\tif imentry.Tag != dwarf.TagPartialUnit {\n\t\treturn\n\t}\n\tbi.loadDebugInfoMapsCompileUnit(ctxt, image, reader, cu)\n}\n\n// addAbstractSubprogram adds the abstract entry for an inlined function.\nfunc (bi *BinaryInfo) addAbstractSubprogram(entry *dwarf.Entry, ctxt *loadDebugInfoMapsContext, reader *reader.Reader, image *Image, cu *compileUnit) {\n\tname, ok := subprogramEntryName(entry, cu)\n\tif !ok {\n\t\tbi.logger.Warnf(\"reading debug_info: abstract subprogram without name at %#x\", entry.Offset)\n\t\t// In some cases clang produces abstract subprograms that do not have a\n\t\t// name, but we should process them anyway.\n\t}\n\n\tif entry.Children {\n\t\tbi.loadDebugInfoMapsInlinedCalls(ctxt, reader, cu)\n\t}\n\n\toriginIdx := ctxt.lookupAbstractOrigin(bi, entry.Offset)\n\tfn := &bi.Functions[originIdx]\n\tfn.Name = name\n\tfn.offset = entry.Offset\n\tfn.cu = cu\n}\n\n// addConcreteInlinedSubprogram adds the concrete entry of a subprogram that was also inlined.\nfunc (bi *BinaryInfo) addConcreteInlinedSubprogram(entry *dwarf.Entry, originOffset dwarf.Offset, ctxt *loadDebugInfoMapsContext, reader *reader.Reader, cu *compileUnit) {\n\tlowpc, highpc, ok := subprogramEntryRange(entry, cu.image)\n\tif !ok {\n\t\tbi.logger.Warnf(\"reading debug_info: concrete inlined subprogram without address range at %#x\", entry.Offset)\n\t\tif entry.Children {\n\t\t\treader.SkipChildren()\n\t\t}\n\t\treturn\n\t}\n\n\toriginIdx := ctxt.lookupAbstractOrigin(bi, originOffset)\n\tfn := &bi.Functions[originIdx]\n\tfn.offset = entry.Offset\n\tfn.Entry = lowpc\n\tfn.End = highpc\n\tfn.cu = cu\n\n\tif entry.Children {\n\t\tbi.loadDebugInfoMapsInlinedCalls(ctxt, reader, cu)\n\t}\n}\n\n// addConcreteSubprogram adds a concrete subprogram (a normal subprogram\n// that doesn't have abstract or inlined entries)\nfunc (bi *BinaryInfo) addConcreteSubprogram(entry *dwarf.Entry, ctxt *loadDebugInfoMapsContext, reader *reader.Reader, cu *compileUnit) {\n\tlowpc, highpc, ok := subprogramEntryRange(entry, cu.image)\n\tif !ok {\n\t\tbi.logger.Warnf(\"reading debug_info: concrete subprogram without address range at %#x\", entry.Offset)\n\t\t// When clang inlines a function, in some cases, it produces a concrete\n\t\t// subprogram without address range and then inlined calls that reference\n\t\t// it, instead of producing an abstract subprogram.\n\t\t// It is unclear if this behavior is standard.\n\t}\n\n\tname, ok := subprogramEntryName(entry, cu)\n\tif !ok {\n\t\tbi.logger.Warnf(\"reading debug_info: concrete subprogram without name at %#x\", entry.Offset)\n\t}\n\n\ttrampoline, _ := entry.Val(dwarf.AttrTrampoline).(bool)\n\n\toriginIdx := ctxt.lookupAbstractOrigin(bi, entry.Offset)\n\tfn := &bi.Functions[originIdx]\n\n\tfn.Name = name\n\tfn.Entry = lowpc\n\tfn.End = highpc\n\tfn.offset = entry.Offset\n\tfn.cu = cu\n\tfn.trampoline = trampoline\n\n\tif entry.Children {\n\t\tbi.loadDebugInfoMapsInlinedCalls(ctxt, reader, cu)\n\t}\n}\n\nfunc subprogramEntryName(entry *dwarf.Entry, cu *compileUnit) (string, bool) {\n\tname, ok := entry.Val(dwarf.AttrName).(string)\n\tif !ok {\n\t\treturn \"\", false\n\t}\n\tif !cu.isgo {\n\t\tname = \"C.\" + name\n\t}\n\treturn name, true\n}\n\nfunc subprogramEntryRange(entry *dwarf.Entry, image *Image) (lowpc, highpc uint64, ok bool) {\n\tok = false\n\tif ranges, _ := image.dwarf.Ranges(entry); len(ranges) >= 1 {\n\t\tok = true\n\t\tlowpc = ranges[0][0] + image.StaticBase\n\t\thighpc = ranges[0][1] + image.StaticBase\n\t}\n\treturn lowpc, highpc, ok\n}\n\nfunc (bi *BinaryInfo) loadDebugInfoMapsInlinedCalls(ctxt *loadDebugInfoMapsContext, reader *reader.Reader, cu *compileUnit) {\n\tfor {\n\t\tentry, err := reader.Next()\n\t\tif err != nil {\n\t\t\tcu.image.setLoadError(bi.logger, \"error reading debug_info: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tswitch entry.Tag {\n\t\tcase 0:\n\t\t\treturn\n\t\tcase dwarf.TagInlinedSubroutine:\n\t\t\toriginOffset, ok := entry.Val(dwarf.AttrAbstractOrigin).(dwarf.Offset)\n\t\t\tif !ok {\n\t\t\t\tbi.logger.Warnf(\"reading debug_info: inlined call without origin offset at %#x\", entry.Offset)\n\t\t\t\treader.SkipChildren()\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tlowpc, highpc, ok := subprogramEntryRange(entry, cu.image)\n\t\t\tif !ok {\n\t\t\t\tbi.logger.Warnf(\"reading debug_info: inlined call without address range at %#x\", entry.Offset)\n\t\t\t\treader.SkipChildren()\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tcallfileidx, ok1 := entry.Val(dwarf.AttrCallFile).(int64)\n\t\t\tcallline, ok2 := entry.Val(dwarf.AttrCallLine).(int64)\n\t\t\tif !ok1 || !ok2 {\n\t\t\t\tbi.logger.Warnf(\"reading debug_info: inlined call without CallFile/CallLine at %#x\", entry.Offset)\n\t\t\t\treader.SkipChildren()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcallfile, cferr := cu.filePath(int(callfileidx), entry)\n\t\t\tif cferr != nil {\n\t\t\t\tbi.logger.Warnf(\"%v\", cferr)\n\t\t\t\treader.SkipChildren()\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\toriginIdx := ctxt.lookupAbstractOrigin(bi, originOffset)\n\t\t\tfn := &bi.Functions[originIdx]\n\n\t\t\tfn.InlinedCalls = append(fn.InlinedCalls, InlinedCall{\n\t\t\t\tcu:     cu,\n\t\t\t\tLowPC:  lowpc,\n\t\t\t\tHighPC: highpc,\n\t\t\t})\n\n\t\t\tif fn.cu == nil {\n\t\t\t\tfn.cu = cu\n\t\t\t}\n\n\t\t\tfl := fileLine{callfile, int(callline)}\n\t\t\tbi.inlinedCallLines[fl] = append(bi.inlinedCallLines[fl], lowpc)\n\n\t\t\tif entry.Children {\n\t\t\t\tbi.loadDebugInfoMapsInlinedCalls(ctxt, reader, cu)\n\t\t\t}\n\t\t}\n\t\treader.SkipChildren()\n\t}\n}\n\nfunc (bi *BinaryInfo) expandPackagesInType(expr ast.Expr) {\n\tswitch e := expr.(type) {\n\tcase *ast.ArrayType:\n\t\tbi.expandPackagesInType(e.Elt)\n\tcase *ast.ChanType:\n\t\tbi.expandPackagesInType(e.Value)\n\tcase *ast.FuncType:\n\t\tfor i := range e.Params.List {\n\t\t\tbi.expandPackagesInType(e.Params.List[i].Type)\n\t\t}\n\t\tif e.Results != nil {\n\t\t\tfor i := range e.Results.List {\n\t\t\t\tbi.expandPackagesInType(e.Results.List[i].Type)\n\t\t\t}\n\t\t}\n\tcase *ast.MapType:\n\t\tbi.expandPackagesInType(e.Key)\n\t\tbi.expandPackagesInType(e.Value)\n\tcase *ast.ParenExpr:\n\t\tbi.expandPackagesInType(e.X)\n\tcase *ast.SelectorExpr:\n\t\tswitch x := e.X.(type) {\n\t\tcase *ast.Ident:\n\t\t\tif len(bi.PackageMap[x.Name]) > 0 {\n\t\t\t\t// There's no particular reason to expect the first entry to be the\n\t\t\t\t// correct one if the package name is ambiguous, but trying all possible\n\t\t\t\t// expansions of all types mentioned in the expression is complicated\n\t\t\t\t// and, besides type assertions, users can always specify the type they\n\t\t\t\t// want exactly, using a string.\n\t\t\t\tx.Name = bi.PackageMap[x.Name][0]\n\t\t\t}\n\t\tdefault:\n\t\t\tbi.expandPackagesInType(e.X)\n\t\t}\n\tcase *ast.StarExpr:\n\t\tbi.expandPackagesInType(e.X)\n\tdefault:\n\t\t// nothing to do\n\t}\n}\n\n// escapePackagePath returns pkg with '.' replaced with '%2e' (in all\n// elements of the path except the first one) like Go does in variable and\n// type names.\nfunc escapePackagePath(pkg string) string {\n\tslash := max(strings.Index(pkg, \"/\"), 0)\n\treturn pkg[:slash] + strings.ReplaceAll(pkg[slash:], \".\", \"%2e\")\n}\n\n// Looks up symbol (either functions or global variables) at address addr.\n// Used by disassembly formatter.\nfunc (bi *BinaryInfo) symLookup(addr uint64) (string, uint64) {\n\tfn := bi.PCToFunc(addr)\n\tif fn != nil {\n\t\tif fn.Entry == addr {\n\t\t\t// only report the function name if it's the exact address because it's\n\t\t\t// easier to read the absolute address than function_name+offset.\n\t\t\treturn fn.Name, fn.Entry\n\t\t}\n\t\treturn \"\", 0\n\t}\n\tif sym, ok := bi.SymNames[addr]; ok {\n\t\treturn sym.Name, addr\n\t}\n\ti := sort.Search(len(bi.packageVars), func(i int) bool {\n\t\treturn bi.packageVars[i].addr >= addr\n\t})\n\tif i >= len(bi.packageVars) {\n\t\treturn \"\", 0\n\t}\n\tif bi.packageVars[i].addr > addr {\n\t\t// report previous variable + offset if i-th variable starts after addr\n\t\ti--\n\t}\n\tif i >= 0 && bi.packageVars[i].addr != 0 {\n\t\treturn bi.packageVars[i].name, bi.packageVars[i].addr\n\t}\n\treturn \"\", 0\n}\n\ntype PackageBuildInfo struct {\n\tImportPath    string\n\tDirectoryPath string\n\tFiles         map[string]struct{}\n}\n\n// ListPackagesBuildInfo returns the list of packages used by the program along with\n// the directory where each package was compiled and optionally the list of\n// files constituting the package.\nfunc (bi *BinaryInfo) ListPackagesBuildInfo(includeFiles bool) []*PackageBuildInfo {\n\tm := make(map[string]*PackageBuildInfo)\n\tfor _, cu := range bi.Images[0].compileUnits {\n\t\tif cu.image != bi.Images[0] || !cu.isgo || cu.lineInfo == nil {\n\t\t\t//TODO(aarzilli): what's the correct thing to do for plugins?\n\t\t\tcontinue\n\t\t}\n\n\t\tip := strings.ReplaceAll(cu.name, \"\\\\\", \"/\")\n\t\tif _, ok := m[ip]; !ok {\n\t\t\tpath := cu.lineInfo.FirstFile()\n\t\t\tif ext := filepath.Ext(path); ext != \".go\" && ext != \".s\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdp := filepath.Dir(path)\n\t\t\tm[ip] = &PackageBuildInfo{\n\t\t\t\tImportPath:    ip,\n\t\t\t\tDirectoryPath: dp,\n\t\t\t\tFiles:         make(map[string]struct{}),\n\t\t\t}\n\t\t}\n\n\t\tif includeFiles {\n\t\t\tpbi := m[ip]\n\n\t\t\tfor _, file := range cu.lineInfo.FileNames {\n\t\t\t\tpbi.Files[file.Path] = struct{}{}\n\t\t\t}\n\t\t}\n\t}\n\n\tr := make([]*PackageBuildInfo, 0, len(m))\n\tfor _, pbi := range m {\n\t\tr = append(r, pbi)\n\t}\n\n\tsort.Slice(r, func(i, j int) bool { return r[i].ImportPath < r[j].ImportPath })\n\treturn r\n}\n\n// cuFilePath takes a compilation unit \"cu\" and a file index reference\n// \"fileidx\" and returns the corresponding file name entry from the\n// DWARF line table associated with the unit; \"entry\" is the offset of\n// the attribute where the file reference originated, for logging\n// purposes. Return value is the file string and an error value; error\n// will be non-nil if the file could not be recovered, perhaps due to\n// malformed DWARF.\nfunc (cu *compileUnit) filePath(fileidx int, entry *dwarf.Entry) (string, error) {\n\tif cu.lineInfo == nil {\n\t\treturn \"\", fmt.Errorf(\"reading debug_info: file reference within a compilation unit without debug_line section at %#x\", entry.Offset)\n\t}\n\t// File numbering is slightly different before and after DWARF 5;\n\t// account for this here. See section 6.2.4 of the DWARF 5 spec.\n\tif cu.Version < 5 {\n\t\tfileidx--\n\t}\n\tif fileidx < 0 || fileidx >= len(cu.lineInfo.FileNames) {\n\t\treturn \"\", fmt.Errorf(\"reading debug_info: file index (%d) out of range in compile unit file table at %#x\", fileidx, entry.Offset)\n\t}\n\treturn cu.lineInfo.FileNames[fileidx].Path, nil\n}\n"
  },
  {
    "path": "pkg/proc/breakpoints.go",
    "content": "package proc\n\nimport (\n\t\"bytes\"\n\t\"debug/dwarf\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/constant\"\n\t\"go/parser\"\n\t\"go/printer\"\n\t\"go/token\"\n\t\"reflect\"\n\t\"strconv\"\n\n\t\"github.com/go-delve/delve/pkg/astutil\"\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/reader\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/proc/evalop\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n)\n\nconst (\n\t// UnrecoveredPanic is the name given to the unrecovered panic breakpoint.\n\tUnrecoveredPanic = \"unrecovered-panic\"\n\n\t// FatalThrow is the name given to the breakpoint triggered when the target\n\t// process dies because of a fatal runtime error.\n\tFatalThrow = \"runtime-fatal-throw\"\n\n\t// HardcodedBreakpoint is the name given to hardcoded breakpoints (for\n\t// example: calls to runtime.Breakpoint)\n\tHardcodedBreakpoint = \"hardcoded-breakpoint\"\n\n\tunrecoveredPanicID    = -1\n\tfatalThrowID          = -2\n\thardcodedBreakpointID = -3\n\n\tNoLogicalID = -1000 // Logical breakpoint ID for breakpoints internal breakpoints.\n)\n\n// Breakpoint represents a physical breakpoint. Stores information on the break\n// point including the byte of data that originally was stored at that\n// address.\ntype Breakpoint struct {\n\t// File & line information for printing.\n\tFunctionName string\n\tFile         string\n\tLine         int\n\n\tAddr         uint64 // Address breakpoint is set for.\n\tOriginalData []byte // If software breakpoint, the data we replace with breakpoint instruction.\n\n\tWatchExpr     string\n\tWatchType     WatchType\n\tHWBreakIndex  uint8 // hardware breakpoint index\n\twatchStackOff int64 // for watchpoints of stack variables, offset of the address from top of the stack\n\n\t// Breaklets is the list of overlapping breakpoints on this physical breakpoint.\n\t// There can be at most one UserBreakpoint in this list but multiple internal breakpoints are allowed.\n\tBreaklets []*Breaklet\n\n\t// Breakpoint information\n\tLogical *LogicalBreakpoint\n\n\t// ReturnInfo describes how to collect return variables when this\n\t// breakpoint is hit as a return breakpoint.\n\treturnInfo *returnBreakpointInfo\n\n\t// RootFuncName is the name of the root function from where tracing needs to be done\n\tRootFuncName string\n\t// TraceFollowCalls indicates the depth of tracing\n\tTraceFollowCalls int\n}\n\n// Breaklet represents one of multiple breakpoints that can overlap on a\n// single physical breakpoint.\ntype Breaklet struct {\n\t// Kind describes whether this is a stepping breakpoint (for next'ing or\n\t// stepping).\n\tKind BreakpointKind\n\n\tLogicalID int // ID of the logical breakpoint that owns this physical breakpoint\n\n\t// Cond: if not nil the breakpoint will be triggered only if evaluating Cond returns true\n\tCond ast.Expr\n\n\t// DeferReturns: when kind == NextDeferBreakpoint this breakpoint\n\t// will also check if the caller is runtime.gopanic or if the return\n\t// address is in the DeferReturns array.\n\t// Next uses NextDeferBreakpoints for the breakpoint it sets on the\n\t// deferred function, DeferReturns is populated with the\n\t// addresses of calls to runtime.deferreturn in the current\n\t// function. This ensures that the breakpoint on the deferred\n\t// function only triggers on panic or on the defer call to\n\t// the function, not when the function is called directly\n\tDeferReturns []uint64\n\n\t// checkPanicCall checks that the breakpoint happened while the function was\n\t// called by a panic. It is only checked for WatchOutOfScopeBreakpoint Kind.\n\tcheckPanicCall bool\n\n\t// callback is called if every other condition for this breaklet is met,\n\t// the return value will determine if the breaklet should be considered\n\t// active.\n\t// The callback can have side-effects.\n\tcallback func(th Thread, p *Target) (bool, error)\n\n\t// For WatchOutOfScopeBreakpoints and StackResizeBreakpoints the watchpoint\n\t// field contains the watchpoint related to this out of scope sentinel.\n\twatchpoint *Breakpoint\n}\n\n// SetCallback sets the call back field, this was primarily added to prevent exporting callback field\nfunc (b *Breaklet) SetCallback(callback func(th Thread, p *Target) (bool, error)) {\n\tb.callback = callback\n}\n\n// BreakpointKind determines the behavior of delve when the\n// breakpoint is reached.\ntype BreakpointKind uint16\n\nconst (\n\t// UserBreakpoint is a user set breakpoint\n\tUserBreakpoint BreakpointKind = (1 << iota)\n\t// NextBreakpoint is a breakpoint set by Next, Continue\n\t// will stop on it and delete it\n\tNextBreakpoint\n\t// NextDeferBreakpoint is a breakpoint set by Next on the\n\t// first deferred function. In addition to checking their condition\n\t// breakpoints of this kind will also check that the function has been\n\t// called by runtime.gopanic or through runtime.deferreturn.\n\tNextDeferBreakpoint\n\t// StepBreakpoint is a breakpoint set by Step on a CALL instruction,\n\t// Continue will set a new breakpoint (of NextBreakpoint kind) on the\n\t// destination of CALL, delete this breakpoint and then continue again\n\tStepBreakpoint\n\n\t// WatchOutOfScopeBreakpoint is a breakpoint used to detect when a watched\n\t// stack variable goes out of scope.\n\tWatchOutOfScopeBreakpoint\n\n\t// StackResizeBreakpoint is a breakpoint used to detect stack resizes to\n\t// adjust the watchpoint of stack variables.\n\tStackResizeBreakpoint\n\n\t// PluginOpenBreakpoint is a breakpoint used to detect that a plugin has\n\t// been loaded and we should try to enable suspended breakpoints.\n\tPluginOpenBreakpoint\n\n\t// StepIntoNewProc is a breakpoint used to step into a newly created\n\t// goroutine.\n\tStepIntoNewProcBreakpoint\n\n\t// NextInactivatedBreakpoint a NextBreakpoint that has been inactivated, see rangeFrameInactivateNextBreakpoints\n\tNextInactivatedBreakpoint\n\n\tStepIntoRangeOverFuncBodyBreakpoint\n\n\t// SharedLibBreakpoint is a breakpoint set at the dynamic linker's r_brk\n\t// notification function to detect shared library loading/unloading.\n\tSharedLibBreakpoint\n\n\tsteppingMask = NextBreakpoint | NextDeferBreakpoint | StepBreakpoint | StepIntoNewProcBreakpoint | NextInactivatedBreakpoint | StepIntoRangeOverFuncBodyBreakpoint\n)\n\n// WatchType is the watchpoint type\ntype WatchType uint8\n\nconst (\n\tWatchRead WatchType = 1 << iota\n\tWatchWrite\n)\n\n// Read returns true if the hardware breakpoint should trigger on memory reads.\nfunc (wtype WatchType) Read() bool {\n\treturn wtype&WatchRead != 0\n}\n\n// Write returns true if the hardware breakpoint should trigger on memory writes.\nfunc (wtype WatchType) Write() bool {\n\treturn wtype&WatchWrite != 0\n}\n\n// Size returns the size in bytes of the hardware breakpoint.\nfunc (wtype WatchType) Size() int {\n\treturn int(wtype >> 4)\n}\n\n// withSize returns a new HWBreakType with the size set to the specified value\nfunc (wtype WatchType) withSize(sz uint8) WatchType {\n\treturn WatchType((sz << 4) | uint8(wtype&0xf))\n}\n\nvar ErrHWBreakUnsupported = errors.New(\"hardware breakpoints not implemented\")\n\nfunc (bp *Breakpoint) String() string {\n\treturn fmt.Sprintf(\"Breakpoint %d at %#v %s:%d\", bp.LogicalID(), bp.Addr, bp.File, bp.Line)\n}\n\nfunc (bp *Breakpoint) LogicalID() int {\n\tfor _, breaklet := range bp.Breaklets {\n\t\tif breaklet.Kind == UserBreakpoint {\n\t\t\treturn breaklet.LogicalID\n\t\t}\n\t}\n\treturn NoLogicalID\n}\n\n// VerboseDescr returns a string describing parts of the breakpoint struct\n// that aren't otherwise user visible, for debugging purposes.\nfunc (bp *Breakpoint) VerboseDescr() []string {\n\tr := []string{}\n\n\tr = append(r, fmt.Sprintf(\"OriginalData=%#x\", bp.OriginalData))\n\n\tif bp.WatchType != 0 {\n\t\tr = append(r, fmt.Sprintf(\"HWBreakIndex=%#x watchStackOff=%#x\", bp.HWBreakIndex, bp.watchStackOff))\n\t}\n\n\tlbp := bp.Logical\n\n\tfor _, breaklet := range bp.Breaklets {\n\t\tswitch breaklet.Kind {\n\t\tcase UserBreakpoint:\n\t\t\tr = append(r, fmt.Sprintf(\"User Cond=%q HitCond=%v\", astutil.ExprToString(breaklet.Cond), lbp.HitCond()))\n\t\tcase NextBreakpoint:\n\t\t\tr = append(r, fmt.Sprintf(\"Next Cond=%q\", astutil.ExprToString(breaklet.Cond)))\n\t\tcase NextDeferBreakpoint:\n\t\t\tr = append(r, fmt.Sprintf(\"NextDefer Cond=%q DeferReturns=%#x\", astutil.ExprToString(breaklet.Cond), breaklet.DeferReturns))\n\t\tcase StepBreakpoint:\n\t\t\tr = append(r, fmt.Sprintf(\"Step Cond=%q\", astutil.ExprToString(breaklet.Cond)))\n\t\tcase WatchOutOfScopeBreakpoint:\n\t\t\tr = append(r, fmt.Sprintf(\"WatchOutOfScope Cond=%q checkPanicCall=%v\", astutil.ExprToString(breaklet.Cond), breaklet.checkPanicCall))\n\t\tcase StackResizeBreakpoint:\n\t\t\tr = append(r, fmt.Sprintf(\"StackResizeBreakpoint Cond=%q\", astutil.ExprToString(breaklet.Cond)))\n\t\tcase PluginOpenBreakpoint:\n\t\t\tr = append(r, \"PluginOpenBreakpoint\")\n\t\tcase StepIntoNewProcBreakpoint:\n\t\t\tr = append(r, \"StepIntoNewProcBreakpoint\")\n\t\tcase NextInactivatedBreakpoint:\n\t\t\tr = append(r, \"NextInactivatedBreakpoint\")\n\t\tcase StepIntoRangeOverFuncBodyBreakpoint:\n\t\t\tr = append(r, \"StepIntoRangeOverFuncBodyBreakpoint Cond=%q\", astutil.ExprToString(breaklet.Cond))\n\t\tcase SharedLibBreakpoint:\n\t\t\tr = append(r, \"SharedLibBreakpoint\")\n\t\tdefault:\n\t\t\tr = append(r, fmt.Sprintf(\"Unknown %d\", breaklet.Kind))\n\t\t}\n\t}\n\treturn r\n}\n\n// BreakpointExistsError is returned when trying to set a breakpoint at\n// an address that already has a breakpoint set for it.\ntype BreakpointExistsError struct {\n\tFile string\n\tLine int\n\tAddr uint64\n}\n\nfunc (bpe BreakpointExistsError) Error() string {\n\treturn fmt.Sprintf(\"Breakpoint exists at %s:%d at %x\", bpe.File, bpe.Line, bpe.Addr)\n}\n\n// InvalidAddressError represents the result of\n// attempting to set a breakpoint at an invalid address.\ntype InvalidAddressError struct {\n\tAddress uint64\n}\n\nfunc (iae InvalidAddressError) Error() string {\n\treturn fmt.Sprintf(\"Invalid address %#v\\n\", iae.Address)\n}\n\ntype returnBreakpointInfo struct {\n\tretFrameCond ast.Expr\n\tfn           *Function\n\tframeOffset  int64\n\tspOffset     int64\n}\n\n// CheckCondition evaluates bp's condition on thread.\nfunc (bp *Breakpoint) checkCondition(tgt *Target, thread Thread, bpstate *BreakpointState) {\n\t*bpstate = BreakpointState{Breakpoint: bp, Active: false, Stepping: false, SteppingInto: false, CondError: nil}\n\tfor _, breaklet := range bp.Breaklets {\n\t\tbpstate.checkCond(tgt, breaklet, thread)\n\t}\n}\n\nfunc (bpstate *BreakpointState) checkCond(tgt *Target, breaklet *Breaklet, thread Thread) {\n\tvar condErr error\n\tactive := true\n\tif breaklet.Cond != nil {\n\t\tactive, condErr = evalBreakpointCondition(tgt, thread, breaklet.Cond)\n\t}\n\n\tif condErr != nil && bpstate.CondError == nil {\n\t\tbpstate.CondError = condErr\n\t}\n\tif !active {\n\t\treturn\n\t}\n\n\tswitch breaklet.Kind {\n\tcase UserBreakpoint:\n\t\tvar goroutineID int64\n\t\tlbp := bpstate.Breakpoint.Logical\n\t\tif lbp != nil {\n\t\t\tif g, err := GetG(thread); err == nil {\n\t\t\t\tgoroutineID = g.ID\n\t\t\t\tlbp.HitCount[goroutineID]++\n\t\t\t}\n\t\t\tlbp.TotalHitCount++\n\t\t}\n\t\tactive = checkHitCond(lbp, goroutineID)\n\n\tcase StepBreakpoint, NextBreakpoint, NextDeferBreakpoint:\n\t\tnextDeferOk := true\n\t\tif breaklet.Kind&NextDeferBreakpoint != 0 {\n\t\t\tframes, err := ThreadStacktrace(tgt, thread, 2)\n\t\t\tif err == nil {\n\t\t\t\tnextDeferOk, _ = isPanicCall(frames)\n\t\t\t\tif !nextDeferOk {\n\t\t\t\t\tnextDeferOk, _ = isDeferReturnCall(frames, breaklet.DeferReturns)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tactive = active && nextDeferOk\n\n\tcase WatchOutOfScopeBreakpoint:\n\t\tif breaklet.checkPanicCall {\n\t\t\tframes, err := ThreadStacktrace(tgt, thread, 2)\n\t\t\tif err == nil {\n\t\t\t\tipc, _ := isPanicCall(frames)\n\t\t\t\tactive = active && ipc\n\t\t\t}\n\t\t}\n\n\tcase StackResizeBreakpoint, PluginOpenBreakpoint, StepIntoNewProcBreakpoint, StepIntoRangeOverFuncBodyBreakpoint, SharedLibBreakpoint:\n\t\t// no further checks\n\n\tcase NextInactivatedBreakpoint:\n\t\tactive = false\n\n\tdefault:\n\t\tbpstate.CondError = fmt.Errorf(\"internal error unknown breakpoint kind %v\", breaklet.Kind)\n\t}\n\n\tif active {\n\t\tif breaklet.callback != nil {\n\t\t\tvar err error\n\t\t\tactive, err = breaklet.callback(thread, tgt)\n\t\t\tif err != nil && bpstate.CondError == nil {\n\t\t\t\tbpstate.CondError = err\n\t\t\t}\n\t\t}\n\t\tbpstate.Active = active\n\t}\n\n\tif bpstate.Active {\n\t\tswitch breaklet.Kind {\n\t\tcase NextBreakpoint, NextDeferBreakpoint:\n\t\t\tbpstate.Stepping = true\n\t\tcase StepBreakpoint:\n\t\t\tbpstate.Stepping = true\n\t\t\tbpstate.SteppingInto = true\n\t\tcase StepIntoRangeOverFuncBodyBreakpoint:\n\t\t\tbpstate.Stepping = true\n\t\t\tbpstate.SteppingIntoRangeOverFuncBody = true\n\t\t}\n\t}\n}\n\n// checkHitCond evaluates bp's hit condition on thread.\nfunc checkHitCond(lbp *LogicalBreakpoint, goroutineID int64) bool {\n\tif lbp == nil || lbp.hitCond == nil {\n\t\treturn true\n\t}\n\thitCount := int(lbp.TotalHitCount)\n\tif lbp.HitCondPerG && goroutineID > 0 {\n\t\thitCount = int(lbp.HitCount[goroutineID])\n\t}\n\t// Evaluate the breakpoint condition.\n\tswitch lbp.hitCond.Op {\n\tcase token.EQL:\n\t\treturn hitCount == lbp.hitCond.Val\n\tcase token.NEQ:\n\t\treturn hitCount != lbp.hitCond.Val\n\tcase token.GTR:\n\t\treturn hitCount > lbp.hitCond.Val\n\tcase token.LSS:\n\t\treturn hitCount < lbp.hitCond.Val\n\tcase token.GEQ:\n\t\treturn hitCount >= lbp.hitCond.Val\n\tcase token.LEQ:\n\t\treturn hitCount <= lbp.hitCond.Val\n\tcase token.REM:\n\t\treturn hitCount%lbp.hitCond.Val == 0\n\t}\n\treturn false\n}\n\nfunc isPanicCall(frames []Stackframe) (bool, int) {\n\t// In Go prior to 1.17 the call stack for a panic is:\n\t//  0. deferred function call\n\t//  1. runtime.callN\n\t//  2. runtime.gopanic\n\t// in Go after 1.17 it is either:\n\t//  0. deferred function call\n\t//  1. deferred call wrapper\n\t//  2. runtime.gopanic\n\t// or:\n\t//  0. deferred function call\n\t//  1. runtime.gopanic\n\tif len(frames) >= 3 && frames[2].Current.Fn != nil && frames[2].Current.Fn.Name == \"runtime.gopanic\" {\n\t\treturn true, 2\n\t}\n\tif len(frames) >= 2 && frames[1].Current.Fn != nil && frames[1].Current.Fn.Name == \"runtime.gopanic\" {\n\t\treturn true, 1\n\t}\n\treturn false, 0\n}\n\nfunc isDeferReturnCall(frames []Stackframe, deferReturns []uint64) (bool, uint64) {\n\tif len(frames) >= 2 && (len(deferReturns) > 0) {\n\t\t// On Go 1.18 and later runtime.deferreturn doesn't use jmpdefer anymore,\n\t\t// it's a normal function making normal calls to deferred functions.\n\t\tif frames[1].Current.Fn != nil && frames[1].Current.Fn.Name == \"runtime.deferreturn\" {\n\t\t\treturn true, 0\n\t\t}\n\t}\n\tif len(frames) >= 1 {\n\t\tfor _, pc := range deferReturns {\n\t\t\tif frames[0].Ret == pc {\n\t\t\t\treturn true, pc\n\t\t\t}\n\t\t}\n\t}\n\treturn false, 0\n}\n\n// IsStepping returns true if bp is an stepping breakpoint.\n// User-set breakpoints can overlap with stepping breakpoints, in that case\n// both IsUser and IsStepping will be true.\nfunc (bp *Breakpoint) IsStepping() bool {\n\tfor _, breaklet := range bp.Breaklets {\n\t\tif breaklet.Kind&steppingMask != 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// IsUser returns true if bp is a user-set breakpoint.\n// User-set breakpoints can overlap with stepping breakpoints, in that case\n// both IsUser and IsStepping will be true.\nfunc (bp *Breakpoint) IsUser() bool {\n\tfor _, breaklet := range bp.Breaklets {\n\t\tif breaklet.Kind == UserBreakpoint {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// IsSharedLibBreakpoint returns true if this breakpoint has a SharedLibBreakpoint breaklet.\nfunc (bp *Breakpoint) IsSharedLibBreakpoint() bool {\n\tfor _, breaklet := range bp.Breaklets {\n\t\tif breaklet.Kind == SharedLibBreakpoint {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// UserBreaklet returns the user breaklet for this breakpoint, or nil if\n// none exist.\nfunc (bp *Breakpoint) UserBreaklet() *Breaklet {\n\tfor _, breaklet := range bp.Breaklets {\n\t\tif breaklet.Kind == UserBreakpoint {\n\t\t\treturn breaklet\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc evalBreakpointCondition(tgt *Target, thread Thread, cond ast.Expr) (bool, error) {\n\tif cond == nil {\n\t\treturn true, nil\n\t}\n\tscope, err := GoroutineScope(tgt, thread)\n\tif err != nil {\n\t\tscope, err = ThreadScope(tgt, thread)\n\t\tif err != nil {\n\t\t\treturn true, err\n\t\t}\n\t}\n\tflags := scope.evalopFlags()\n\tflags |= evalop.BreakpointCondition\n\tops, err := evalop.CompileAST(scopeToEvalLookup{scope}, cond, flags)\n\tif err != nil {\n\t\treturn true, err\n\t}\n\tstack := &evalStack{}\n\tstack.eval(scope, ops)\n\tv, err := stack.result(nil)\n\tif err != nil {\n\t\tif stack.disabledErrors {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn true, fmt.Errorf(\"error evaluating expression: %v\", err)\n\t}\n\tif v.Kind != reflect.Bool {\n\t\tif stack.disabledErrors {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn true, errors.New(\"condition expression not boolean\")\n\t}\n\tv.loadValue(loadFullValue)\n\tif v.Unreadable != nil {\n\t\tif stack.disabledErrors {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn true, fmt.Errorf(\"condition expression unreadable: %v\", v.Unreadable)\n\t}\n\treturn constant.BoolVal(v.Value), nil\n}\n\n// NoBreakpointError is returned when trying to\n// clear a breakpoint that does not exist.\ntype NoBreakpointError struct {\n\tAddr uint64\n}\n\nfunc (nbp NoBreakpointError) Error() string {\n\treturn fmt.Sprintf(\"no breakpoint at %#v\", nbp.Addr)\n}\n\n// BreakpointMap represents an (address, breakpoint) map.\ntype BreakpointMap struct {\n\tM map[uint64]*Breakpoint\n\n\t// Logical is a map of logical breakpoints.\n\tLogical map[int]*LogicalBreakpoint\n\n\t// WatchOutOfScope is the list of watchpoints that went out of scope during\n\t// the last resume operation\n\tWatchOutOfScope []*Breakpoint\n}\n\n// NewBreakpointMap creates a new BreakpointMap.\nfunc NewBreakpointMap() BreakpointMap {\n\treturn BreakpointMap{\n\t\tM: make(map[uint64]*Breakpoint),\n\t}\n}\n\n// SetBreakpoint sets a breakpoint at addr, and stores it in the process wide\n// break point table.\nfunc (t *Target) SetBreakpoint(logicalID int, addr uint64, kind BreakpointKind, cond ast.Expr) (*Breakpoint, error) {\n\treturn t.setBreakpointInternal(logicalID, addr, kind, 0, cond)\n}\n\n// SetEBPFTracepoint will attach a uprobe to the function\n// specified by 'fnName'.\nfunc (t *Target) SetEBPFTracepoint(fnName string) error {\n\t// Not every OS/arch that we support has support for eBPF,\n\t// so check early and return an error if this is called on an\n\t// unsupported system.\n\tif !t.proc.SupportsBPF() {\n\t\treturn errors.New(\"eBPF is not supported\")\n\t}\n\tfns, err := t.BinInfo().FindFunction(fnName)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Get information on the Goroutine so we can tell the\n\t// eBPF program where to find it in order to get the\n\t// goroutine ID.\n\trdr := t.BinInfo().Images[0].DwarfReader()\n\trdr.SeekToTypeNamed(\"runtime.g\")\n\ttyp, err := t.BinInfo().findType(\"runtime.g\")\n\tif err != nil {\n\t\treturn errors.New(\"could not find type for runtime.g\")\n\t}\n\tvar goidOffset int64\n\tswitch t := typ.(type) {\n\tcase *godwarf.StructType:\n\t\tfor _, field := range t.Field {\n\t\t\tif field.Name == \"goid\" {\n\t\t\t\tgoidOffset = field.ByteOffset\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, fn := range fns {\n\t\terr := t.setEBPFTracepointOnFunc(fn, goidOffset)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (t *Target) setEBPFTracepointOnFunc(fn *Function, goidOffset int64) error {\n\t// Start putting together the argument map. This will tell the eBPF program\n\t// all of the arguments we want to trace and how to find them.\n\n\t// Start looping through each argument / return parameter for the function we\n\t// are setting the uprobe on. Parse location information so that we can pass it\n\t// along to the eBPF program.\n\tdwarfTree, err := fn.cu.image.getDwarfTree(fn.offset)\n\tif err != nil {\n\t\treturn err\n\t}\n\tvariablesFlags := reader.VariablesOnlyVisible\n\tif t.BinInfo().Producer() != \"\" && goversion.ProducerAfterOrEqual(t.BinInfo().Producer(), 1, 15) {\n\t\tvariablesFlags |= reader.VariablesTrustDeclLine\n\t}\n\t_, l := t.BinInfo().EntryLineForFunc(fn)\n\n\tvar args []ebpf.UProbeArgMap\n\tvarEntries := reader.Variables(dwarfTree, fn.Entry, l, variablesFlags)\n\tfor _, entry := range varEntries {\n\t\t_, dt, err := readVarEntry(entry.Tree, fn.cu.image)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\toffset, pieces, _, err := t.BinInfo().Location(entry, dwarf.AttrLocation, fn.Entry, op.DwarfRegisters{}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tparamPieces := make([]int, 0, len(pieces))\n\t\tfor _, piece := range pieces {\n\t\t\tif piece.Kind == op.RegPiece {\n\t\t\t\tparamPieces = append(paramPieces, int(piece.Val))\n\t\t\t}\n\t\t}\n\t\tisret, _ := entry.Val(dwarf.AttrVarParam).(bool)\n\t\toffset += int64(t.BinInfo().Arch.PtrSize())\n\t\targs = append(args, ebpf.UProbeArgMap{\n\t\t\tOffset: offset,\n\t\t\tSize:   dt.Size(),\n\t\t\tKind:   dt.Common().ReflectKind,\n\t\t\tPieces: paramPieces,\n\t\t\tInReg:  len(pieces) > 0,\n\t\t\tRet:    isret,\n\t\t})\n\t}\n\n\t//TODO(aarzilli): inlined calls?\n\n\t// Finally, set the uprobe on the function.\n\treturn t.proc.SetUProbe(fn.Name, goidOffset, args)\n}\n\n// SetWatchpoint sets a data breakpoint at addr and stores it in the\n// process wide break point table.\nfunc (t *Target) SetWatchpoint(logicalID int, scope *EvalScope, expr string, wtype WatchType, cond ast.Expr) (*Breakpoint, error) {\n\tif (wtype&WatchWrite == 0) && (wtype&WatchRead == 0) {\n\t\treturn nil, errors.New(\"at least one of read and write must be set for watchpoint\")\n\t}\n\n\tn, err := parser.ParseExpr(expr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\txv, err := scope.evalAST(n)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif xv.Addr == 0 || xv.Flags&VariableFakeAddress != 0 || xv.DwarfType == nil {\n\t\treturn nil, fmt.Errorf(\"can not watch %q\", expr)\n\t}\n\tif xv.Unreadable != nil {\n\t\treturn nil, fmt.Errorf(\"expression %q is unreadable: %v\", expr, xv.Unreadable)\n\t}\n\tif xv.Kind == reflect.UnsafePointer || xv.Kind == reflect.Invalid {\n\t\treturn nil, fmt.Errorf(\"can not watch variable of type %s\", xv.Kind.String())\n\t}\n\n\t// Special handling for interface types\n\tif xv.Kind == reflect.Interface {\n\t\t// For interfaces, we want to watch the data they point to\n\t\t// Read the interface to get the data pointer\n\t\t_, data, _ := xv.readInterface()\n\t\tif xv.Unreadable != nil {\n\t\t\treturn nil, fmt.Errorf(\"error reading interface %q: %v\", expr, xv.Unreadable)\n\t\t}\n\t\tif data == nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid interface %q\", expr)\n\t\t}\n\n\t\t// Use the data field as our watch target\n\t\txv = data\n\t\texpr = expr + \" (interface data)\"\n\t}\n\n\tsz := xv.DwarfType.Size()\n\tif sz <= 0 || sz > int64(t.BinInfo().Arch.PtrSize()) {\n\t\t//TODO(aarzilli): it is reasonable to expect to be able to watch string\n\t\t//variables and we could support it by watching certain member fields here.\n\t\treturn nil, fmt.Errorf(\"can not watch variable of type %s\", xv.DwarfType.String())\n\t}\n\n\tstackWatch := scope.g != nil && !scope.g.SystemStack && xv.Addr >= scope.g.stack.lo && xv.Addr < scope.g.stack.hi\n\n\tif stackWatch && wtype&WatchRead != 0 {\n\t\t// In theory this would work except for the fact that the runtime will\n\t\t// read them randomly to resize stacks so it doesn't make sense to do\n\t\t// this.\n\t\treturn nil, errors.New(\"can not watch stack allocated variable for reads\")\n\t}\n\n\tbp, err := t.setBreakpointInternal(logicalID, xv.Addr, UserBreakpoint, wtype.withSize(uint8(sz)), cond)\n\tif err != nil {\n\t\treturn bp, err\n\t}\n\tbp.WatchExpr = expr\n\n\tif stackWatch {\n\t\tbp.watchStackOff = int64(bp.Addr) - int64(scope.g.stack.hi)\n\t\terr := t.setStackWatchBreakpoints(scope, bp)\n\t\tif err != nil {\n\t\t\treturn bp, err\n\t\t}\n\t}\n\n\treturn bp, nil\n}\n\nfunc (t *Target) setBreakpointInternal(logicalID int, addr uint64, kind BreakpointKind, wtype WatchType, cond ast.Expr) (*Breakpoint, error) {\n\tif valid, err := t.Valid(); !valid {\n\t\trecorded, _ := t.recman.Recorded()\n\t\tif !recorded {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tbpmap := t.Breakpoints()\n\tnewBreaklet := &Breaklet{Kind: kind, Cond: cond}\n\tif kind == UserBreakpoint {\n\t\tnewBreaklet.LogicalID = logicalID\n\t}\n\n\tsetLogicalBreakpoint := func(bp *Breakpoint) {\n\t\tif kind != UserBreakpoint || bp.Logical != nil {\n\t\t\treturn\n\t\t}\n\t\tif bpmap.Logical == nil {\n\t\t\tbpmap.Logical = make(map[int]*LogicalBreakpoint)\n\t\t}\n\t\tlbp := bpmap.Logical[logicalID]\n\t\tif lbp == nil {\n\t\t\tlbp = &LogicalBreakpoint{LogicalID: logicalID}\n\t\t\tlbp.HitCount = make(map[int64]uint64)\n\t\t\tlbp.enabled = true\n\t\t\tlbp.condSatisfiable = true\n\t\t\tbpmap.Logical[logicalID] = lbp\n\t\t}\n\t\tbp.Logical = lbp\n\t\tbreaklet := bp.UserBreaklet()\n\t\tif breaklet != nil && breaklet.Cond == nil {\n\t\t\tbreaklet.Cond = lbp.cond\n\t\t}\n\t\tif lbp.File == \"\" && lbp.Line == 0 {\n\t\t\tlbp.File = bp.File\n\t\t\tlbp.Line = bp.Line\n\t\t} else if bp.File != lbp.File || bp.Line != lbp.Line {\n\t\t\tlbp.File = \"<multiple locations>\"\n\t\t\tlbp.Line = 0\n\t\t}\n\t\tfn := t.BinInfo().PCToFunc(bp.Addr)\n\t\tif fn != nil {\n\t\t\tlbp.FunctionName = fn.NameWithoutTypeParams()\n\t\t}\n\t}\n\n\tif bp, ok := bpmap.M[addr]; ok {\n\t\tif !bp.canOverlap(kind) {\n\t\t\treturn bp, BreakpointExistsError{bp.File, bp.Line, bp.Addr}\n\t\t}\n\t\tbp.Breaklets = append(bp.Breaklets, newBreaklet)\n\t\tsetLogicalBreakpoint(bp)\n\t\treturn bp, nil\n\t}\n\n\tf, l, fn := t.BinInfo().PCToLine(addr)\n\n\tfnName := \"\"\n\tif fn != nil {\n\t\tfnName = fn.Name\n\t}\n\n\thwidx := uint8(0)\n\tif wtype != 0 {\n\t\tm := make(map[uint8]bool)\n\t\tfor _, bp := range bpmap.M {\n\t\t\tif bp.WatchType != 0 {\n\t\t\t\tm[bp.HWBreakIndex] = true\n\t\t\t}\n\t\t}\n\t\tfor hwidx = 0; true; hwidx++ {\n\t\t\tif !m[hwidx] {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tnewBreakpoint := &Breakpoint{\n\t\tFunctionName: fnName,\n\t\tWatchType:    wtype,\n\t\tHWBreakIndex: hwidx,\n\t\tFile:         f,\n\t\tLine:         l,\n\t\tAddr:         addr,\n\t}\n\n\terr := t.proc.WriteBreakpoint(newBreakpoint)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnewBreakpoint.Breaklets = append(newBreakpoint.Breaklets, newBreaklet)\n\tsetLogicalBreakpoint(newBreakpoint)\n\n\tbpmap.M[addr] = newBreakpoint\n\n\treturn newBreakpoint, nil\n}\n\n// canOverlap returns true if a breakpoint of kind can be overlapped to the\n// already existing breaklets in bp.\n// At most one user breakpoint can be set but multiple internal breakpoints are allowed.\n// All other internal breakpoints are allowed to overlap freely.\nfunc (bp *Breakpoint) canOverlap(kind BreakpointKind) bool {\n\tif kind == UserBreakpoint {\n\t\treturn !bp.IsUser()\n\t}\n\treturn true\n}\n\n// ClearBreakpoint clears the breakpoint at addr.\nfunc (t *Target) ClearBreakpoint(addr uint64) error {\n\tif valid, err := t.Valid(); !valid {\n\t\trecorded, _ := t.recman.Recorded()\n\t\tif !recorded {\n\t\t\treturn err\n\t\t}\n\t}\n\tbp, ok := t.Breakpoints().M[addr]\n\tif !ok {\n\t\treturn NoBreakpointError{Addr: addr}\n\t}\n\n\tfor i := range bp.Breaklets {\n\t\tif bp.Breaklets[i].Kind == UserBreakpoint {\n\t\t\tbp.Breaklets[i] = nil\n\t\t\tif bp.WatchExpr == \"\" {\n\t\t\t\tbp.Logical = nil\n\t\t\t}\n\t\t}\n\t}\n\n\t_, err := t.finishClearBreakpoint(bp)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif bp.WatchExpr != \"\" && bp.watchStackOff != 0 {\n\t\t// stack watchpoint, must remove all its WatchOutOfScopeBreakpoints/StackResizeBreakpoints\n\t\terr := t.clearStackWatchBreakpoints(bp)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// ClearSteppingBreakpoints removes all stepping breakpoints from the map,\n// calling clearBreakpoint on each one.\nfunc (t *Target) ClearSteppingBreakpoints() error {\n\tbpmap := t.Breakpoints()\n\tthreads := t.ThreadList()\n\tfor _, bp := range bpmap.M {\n\t\tfor i := range bp.Breaklets {\n\t\t\tif bp.Breaklets[i].Kind&steppingMask != 0 {\n\t\t\t\tbp.Breaklets[i] = nil\n\t\t\t}\n\t\t}\n\t\tcleared, err := t.finishClearBreakpoint(bp)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif cleared {\n\t\t\tfor _, thread := range threads {\n\t\t\t\tif thread.Breakpoint().Breakpoint == bp {\n\t\t\t\t\tthread.Breakpoint().Clear()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (t *Target) clearInactivatedSteppingBreakpoint() error {\n\tthreads := t.ThreadList()\n\tfor _, bp := range t.Breakpoints().M {\n\t\tfor i := range bp.Breaklets {\n\t\t\tif bp.Breaklets[i].Kind == NextInactivatedBreakpoint {\n\t\t\t\tbp.Breaklets[i] = nil\n\t\t\t}\n\t\t}\n\t\tcleared, err := t.finishClearBreakpoint(bp)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif cleared {\n\t\t\tfor _, thread := range threads {\n\t\t\t\tif thread.Breakpoint().Breakpoint == bp {\n\t\t\t\t\tthread.Breakpoint().Clear()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// finishClearBreakpoint clears nil breaklets from the breaklet list of bp\n// and if it is empty erases the breakpoint.\n// Returns true if the breakpoint was deleted\nfunc (t *Target) finishClearBreakpoint(bp *Breakpoint) (bool, error) {\n\toldBreaklets := bp.Breaklets\n\tbp.Breaklets = bp.Breaklets[:0]\n\tfor _, breaklet := range oldBreaklets {\n\t\tif breaklet != nil {\n\t\t\tbp.Breaklets = append(bp.Breaklets, breaklet)\n\t\t}\n\t}\n\tif len(bp.Breaklets) > 0 {\n\t\treturn false, nil\n\t}\n\tif err := t.proc.EraseBreakpoint(bp); err != nil {\n\t\treturn false, err\n\t}\n\n\tdelete(t.Breakpoints().M, bp.Addr)\n\tif bp.WatchExpr != \"\" && bp.Logical != nil {\n\t\tdelete(t.Breakpoints().Logical, bp.Logical.LogicalID)\n\t}\n\treturn true, nil\n}\n\n// HasSteppingBreakpoints returns true if bpmap has at least one stepping\n// breakpoint set.\nfunc (bpmap *BreakpointMap) HasSteppingBreakpoints() bool {\n\tfor _, bp := range bpmap.M {\n\t\tif bp.IsStepping() {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// HasHWBreakpoints returns true if there are hardware breakpoints.\nfunc (bpmap *BreakpointMap) HasHWBreakpoints() bool {\n\tfor _, bp := range bpmap.M {\n\t\tif bp.WatchType != 0 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc totalHitCountByName(lbpmap map[int]*LogicalBreakpoint, s string) (uint64, error) {\n\tfor _, bp := range lbpmap {\n\t\tif bp.Name == s {\n\t\t\treturn bp.TotalHitCount, nil\n\t\t}\n\t}\n\treturn 0, fmt.Errorf(\"could not find breakpoint named %q\", s)\n}\n\nfunc totalHitCountByID(lbpmap map[int]*LogicalBreakpoint, id int) (uint64, error) {\n\tfor _, bp := range lbpmap {\n\t\tif bp.LogicalID == int(id) {\n\t\t\treturn bp.TotalHitCount, nil\n\t\t}\n\t}\n\treturn 0, fmt.Errorf(\"could not find breakpoint with ID = %d\", id)\n}\n\n// BreakpointState describes the state of a breakpoint in a thread.\ntype BreakpointState struct {\n\t*Breakpoint\n\t// Active is true if the condition of any breaklet is met.\n\tActive bool\n\t// Stepping is true if one of the active breaklets is a stepping\n\t// breakpoint.\n\tStepping bool\n\t// SteppingInto is true if one of the active stepping breaklets has Kind ==\n\t// StepBreakpoint.\n\tSteppingInto                  bool\n\tSteppingIntoRangeOverFuncBody bool\n\t// CondError contains any error encountered while evaluating the\n\t// breakpoint's condition.\n\tCondError error\n}\n\n// Clear zeros the struct.\nfunc (bpstate *BreakpointState) Clear() {\n\tbpstate.Breakpoint = nil\n\tbpstate.Active = false\n\tbpstate.Stepping = false\n\tbpstate.SteppingInto = false\n\tbpstate.CondError = nil\n}\n\nfunc (bpstate *BreakpointState) String() string {\n\ts := bpstate.Breakpoint.String()\n\tif bpstate.Active {\n\t\ts += \" active\"\n\t}\n\tif bpstate.Stepping {\n\t\ts += \" stepping\"\n\t}\n\treturn s\n}\n\nfunc configureReturnBreakpoint(bi *BinaryInfo, bp *Breakpoint, topframe *Stackframe, retFrameCond ast.Expr) {\n\tif topframe.Current.Fn == nil {\n\t\treturn\n\t}\n\tbp.returnInfo = &returnBreakpointInfo{\n\t\tretFrameCond: retFrameCond,\n\t\tfn:           topframe.Current.Fn,\n\t\tframeOffset:  topframe.FrameOffset(),\n\t\tspOffset:     topframe.FrameOffset() - int64(bi.Arch.PtrSize()), // must be the value that SP had at the entry point of the function\n\t}\n}\n\nfunc (rbpi *returnBreakpointInfo) Collect(t *Target, thread Thread) []*Variable {\n\tif rbpi == nil {\n\t\treturn nil\n\t}\n\n\tg, err := GetG(thread)\n\tif err != nil {\n\t\treturn returnInfoError(\"could not get g\", err, thread.BinInfo(), thread.ProcessMemory())\n\t}\n\tscope, err := GoroutineScope(t, thread)\n\tif err != nil {\n\t\treturn returnInfoError(\"could not get scope\", err, thread.BinInfo(), thread.ProcessMemory())\n\t}\n\tv, err := scope.evalAST(rbpi.retFrameCond)\n\tif err != nil || v.Unreadable != nil || v.Kind != reflect.Bool {\n\t\t// This condition was evaluated as part of the breakpoint condition\n\t\t// evaluation, if the errors happen they will be reported as part of the\n\t\t// condition errors.\n\t\treturn nil\n\t}\n\tif !constant.BoolVal(v.Value) {\n\t\t// Breakpoint not hit as a return breakpoint.\n\t\treturn nil\n\t}\n\n\toldFrameOffset := rbpi.frameOffset + int64(g.stack.hi)\n\toldSP := uint64(rbpi.spOffset + int64(g.stack.hi))\n\terr = fakeFunctionEntryScope(scope, rbpi.fn, oldFrameOffset, oldSP)\n\tif err != nil {\n\t\treturn returnInfoError(\"could not read function entry\", err, thread.BinInfo(), thread.ProcessMemory())\n\t}\n\n\tvars, err := scope.Locals(localsFakeFunctionEntryScope, \"\")\n\tif err != nil {\n\t\treturn returnInfoError(\"could not evaluate return variables\", err, thread.BinInfo(), thread.ProcessMemory())\n\t}\n\tvars = filterVariables(vars, func(v *Variable) bool {\n\t\treturn (v.Flags & VariableReturnArgument) != 0\n\t})\n\n\treturn vars\n}\n\nfunc returnInfoError(descr string, err error, bi *BinaryInfo, mem MemoryReadWriter) []*Variable {\n\tv := newConstant(constant.MakeString(fmt.Sprintf(\"%s: %v\", descr, err.Error())), bi, mem)\n\tv.Name = \"return value read error\"\n\treturn []*Variable{v}\n}\n\n// LogicalBreakpoint represents a breakpoint set by a user.\n// A logical breakpoint can be associated with zero or many physical\n// breakpoints.\n// Where a physical breakpoint is associated with a specific instruction\n// address a logical breakpoint is associated with a source code location.\n// Therefore a logical breakpoint can be associated with zero or many\n// physical breakpoints.\n// It will have one or more physical breakpoints when source code has been\n// inlined (or in the case of type parametric code).\n// It will have zero physical breakpoints when it represents a deferred\n// breakpoint for code that will be loaded in the future.\ntype LogicalBreakpoint struct {\n\tLogicalID    int\n\tName         string\n\tFunctionName string\n\tFile         string\n\tLine         int\n\tenabled      bool\n\n\tSet SetBreakpoint\n\n\tTracepoint  bool // Tracepoint flag\n\tTraceReturn bool\n\tGoroutine   bool     // Retrieve goroutine information\n\tStacktrace  int      // Number of stack frames to retrieve\n\tVariables   []string // Variables to evaluate\n\tLoadArgs    *LoadConfig\n\tLoadLocals  *LoadConfig\n\n\tCustomCommands []string // Custom starlark commands to execute when the breakpoint is hit\n\n\tHitCount      map[int64]uint64 // Number of times a breakpoint has been reached in a certain goroutine\n\tTotalHitCount uint64           // Number of times a breakpoint has been reached\n\tHitCondPerG   bool             // Use per goroutine hitcount as HitCond operand, instead of total hitcount\n\n\t// hitCond: if not nil the breakpoint will be triggered only if the evaluated HitCond returns\n\t// true with the TotalHitCount.\n\thitCond *struct {\n\t\tOp  token.Token\n\t\tVal int\n\t}\n\n\t// cond: if not nil the breakpoint will be triggered only if evaluating Cond returns true\n\tcond ast.Expr\n\n\t// condSatisfiable is true when 'cond && hitCond' can potentially be true.\n\tcondSatisfiable bool\n\t// condUsesHitCounts is true when 'cond' uses breakpoint hitcounts\n\tcondUsesHitCounts bool\n\n\tUserData any // Any additional information about the breakpoint\n\t// Name of root function from where tracing needs to be done\n\tRootFuncName string\n\t// depth of tracing\n\tTraceFollowCalls int\n}\n\n// SetBreakpoint describes how a breakpoint should be set.\ntype SetBreakpoint struct {\n\tFunctionName string\n\tFile         string\n\tLine         int\n\tExpr         func(*Target) []uint64\n\tExprString   string\n\tPidAddrs     []PidAddr\n}\n\ntype PidAddr struct {\n\tPid  int\n\tAddr uint64\n}\n\n// Enabled returns true if the breakpoint is enabled.\nfunc (lbp *LogicalBreakpoint) Enabled() bool {\n\treturn lbp.enabled\n}\n\n// HitCond returns the hit condition.\nfunc (lbp *LogicalBreakpoint) HitCond() string {\n\tif lbp.hitCond == nil {\n\t\treturn \"\"\n\t}\n\treturn fmt.Sprintf(\"%s %d\", lbp.hitCond.Op.String(), lbp.hitCond.Val)\n}\n\nfunc (lbp *LogicalBreakpoint) Cond() string {\n\tvar buf bytes.Buffer\n\tprinter.Fprint(&buf, token.NewFileSet(), lbp.cond)\n\treturn buf.String()\n}\n\nfunc breakpointConditionSatisfiable(lbpmap map[int]*LogicalBreakpoint, lbp *LogicalBreakpoint) bool {\n\tif lbp.hitCond != nil && !lbp.HitCondPerG {\n\t\tswitch lbp.hitCond.Op {\n\t\tcase token.EQL, token.LEQ:\n\t\t\tif int(lbp.TotalHitCount) >= lbp.hitCond.Val {\n\t\t\t\treturn false\n\t\t\t}\n\t\tcase token.LSS:\n\t\t\tif int(lbp.TotalHitCount) >= lbp.hitCond.Val-1 {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\tif !lbp.condUsesHitCounts {\n\t\treturn true\n\t}\n\n\ttoint := func(x ast.Expr) (uint64, bool) {\n\t\tlit, ok := x.(*ast.BasicLit)\n\t\tif !ok || lit.Kind != token.INT {\n\t\t\treturn 0, false\n\t\t}\n\t\tn, err := strconv.Atoi(lit.Value)\n\t\treturn uint64(n), err == nil && n >= 0\n\t}\n\n\thitcountexpr := func(x ast.Expr) (uint64, bool) {\n\t\tidx, ok := x.(*ast.IndexExpr)\n\t\tif !ok {\n\t\t\treturn 0, false\n\t\t}\n\t\tselx, ok := idx.X.(*ast.SelectorExpr)\n\t\tif !ok {\n\t\t\treturn 0, false\n\t\t}\n\t\tident, ok := selx.X.(*ast.Ident)\n\t\tif !ok || ident.Name != evalop.DelvePackage || selx.Sel.Name != evalop.BreakpointHitCountVarName {\n\t\t\treturn 0, false\n\t\t}\n\t\tlit, ok := idx.Index.(*ast.BasicLit)\n\t\tif !ok {\n\t\t\treturn 0, false\n\t\t}\n\t\tswitch lit.Kind {\n\t\tcase token.INT:\n\t\t\tn, _ := strconv.Atoi(lit.Value)\n\t\t\tthc, err := totalHitCountByID(lbpmap, n)\n\t\t\treturn thc, err == nil\n\t\tcase token.STRING:\n\t\t\tv, _ := strconv.Unquote(lit.Value)\n\t\t\tthc, err := totalHitCountByName(lbpmap, v)\n\t\t\treturn thc, err == nil\n\t\tdefault:\n\t\t\treturn 0, false\n\t\t}\n\t}\n\n\tvar satisf func(n ast.Node) bool\n\tsatisf = func(n ast.Node) bool {\n\t\tparexpr, ok := n.(*ast.ParenExpr)\n\t\tif ok {\n\t\t\treturn satisf(parexpr.X)\n\t\t}\n\t\tbinexpr, ok := n.(*ast.BinaryExpr)\n\t\tif !ok {\n\t\t\treturn true\n\t\t}\n\t\tswitch binexpr.Op {\n\t\tcase token.AND:\n\t\t\treturn satisf(binexpr.X) && satisf(binexpr.Y)\n\t\tcase token.OR:\n\t\t\tif !satisf(binexpr.X) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !satisf(binexpr.Y) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\tcase token.EQL, token.LEQ, token.LSS, token.NEQ, token.GTR, token.GEQ:\n\t\tdefault:\n\t\t\treturn true\n\t\t}\n\n\t\thitcount, ok1 := hitcountexpr(binexpr.X)\n\t\tval, ok2 := toint(binexpr.Y)\n\t\tif !ok1 || !ok2 {\n\t\t\treturn true\n\t\t}\n\n\t\tswitch binexpr.Op {\n\t\tcase token.EQL:\n\t\t\treturn hitcount == val\n\t\tcase token.LEQ:\n\t\t\treturn hitcount <= val\n\t\tcase token.LSS:\n\t\t\treturn hitcount < val\n\t\tcase token.NEQ:\n\t\t\treturn hitcount != val\n\t\tcase token.GTR:\n\t\t\treturn hitcount > val\n\t\tcase token.GEQ:\n\t\t\treturn hitcount >= val\n\t\t}\n\t\treturn true\n\t}\n\n\treturn satisf(lbp.cond)\n}\n\nfunc breakpointConditionUsesHitCounts(lbp *LogicalBreakpoint) bool {\n\tif lbp.cond == nil {\n\t\treturn false\n\t}\n\tr := false\n\tast.Inspect(lbp.cond, func(n ast.Node) bool {\n\t\tif r {\n\t\t\treturn false\n\t\t}\n\t\tseln, ok := n.(*ast.SelectorExpr)\n\t\tif ok {\n\t\t\tident, ok := seln.X.(*ast.Ident)\n\t\t\tif ok {\n\t\t\t\tif ident.Name == evalop.DelvePackage && seln.Sel.Name == evalop.BreakpointHitCountVarName {\n\t\t\t\t\tr = true\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true\n\t})\n\treturn r\n}\n"
  },
  {
    "path": "pkg/proc/core/core.go",
    "content": "package core\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n)\n\n// ErrNoThreads core file did not contain any threads.\nvar ErrNoThreads = errors.New(\"no threads found in core file\")\n\n// A SplicedMemory represents a memory space formed from multiple regions,\n// each of which may override previously regions. For example, in the following\n// core, the program text was loaded at 0x400000:\n// Start               End                 Page Offset\n// 0x0000000000400000  0x000000000044f000  0x0000000000000000\n// but then it's partially overwritten with an RW mapping whose data is stored\n// in the core file:\n//\n//\tType           Offset             VirtAddr           PhysAddr\n//\t               FileSiz            MemSiz              Flags  Align\n//\tLOAD           0x0000000000004000 0x000000000049a000 0x0000000000000000\n//\t               0x0000000000002000 0x0000000000002000  RW     1000\n//\n// This can be represented in a SplicedMemory by adding the original region,\n// then putting the RW mapping on top of it.\ntype SplicedMemory struct {\n\treaders []readerEntry\n}\n\ntype readerEntry struct {\n\toffset uint64\n\tlength uint64\n\treader proc.MemoryReader\n}\n\n// Add adds a new region to the SplicedMemory, which may override existing regions.\nfunc (r *SplicedMemory) Add(reader proc.MemoryReader, off, length uint64) {\n\tif length == 0 {\n\t\treturn\n\t}\n\tend := off + length - 1\n\tnewReaders := make([]readerEntry, 0, len(r.readers))\n\tadd := func(e readerEntry) {\n\t\tif e.length == 0 {\n\t\t\treturn\n\t\t}\n\t\tnewReaders = append(newReaders, e)\n\t}\n\tinserted := false\n\t// Walk through the list of regions, fixing up any that overlap and inserting the new one.\n\tfor _, entry := range r.readers {\n\t\tentryEnd := entry.offset + entry.length - 1\n\t\tswitch {\n\t\tcase entryEnd < off:\n\t\t\t// Entry is completely before the new region.\n\t\t\tadd(entry)\n\t\tcase end < entry.offset:\n\t\t\t// Entry is completely after the new region.\n\t\t\tif !inserted {\n\t\t\t\tadd(readerEntry{off, length, reader})\n\t\t\t\tinserted = true\n\t\t\t}\n\t\t\tadd(entry)\n\t\tcase off <= entry.offset && entryEnd <= end:\n\t\t\t// Entry is completely overwritten by the new region. Drop.\n\t\tcase entry.offset < off && entryEnd <= end:\n\t\t\t// New region overwrites the end of the entry.\n\t\t\tentry.length = off - entry.offset\n\t\t\tadd(entry)\n\t\tcase off <= entry.offset && end < entryEnd:\n\t\t\t// New reader overwrites the beginning of the entry.\n\t\t\tif !inserted {\n\t\t\t\tadd(readerEntry{off, length, reader})\n\t\t\t\tinserted = true\n\t\t\t}\n\t\t\toverlap := entry.offset - off\n\t\t\tentry.offset += overlap\n\t\t\tentry.length -= overlap\n\t\t\tadd(entry)\n\t\tcase entry.offset < off && end < entryEnd:\n\t\t\t// New region punches a hole in the entry. Split it in two and put the new region in the middle.\n\t\t\tadd(readerEntry{entry.offset, off - entry.offset, entry.reader})\n\t\t\tadd(readerEntry{off, length, reader})\n\t\t\tadd(readerEntry{end + 1, entryEnd - end, entry.reader})\n\t\t\tinserted = true\n\t\tdefault:\n\t\t\tpanic(fmt.Sprintf(\"Unhandled case: existing entry is %v len %v, new is %v len %v\", entry.offset, entry.length, off, length))\n\t\t}\n\t}\n\tif !inserted {\n\t\tnewReaders = append(newReaders, readerEntry{off, length, reader})\n\t}\n\tr.readers = newReaders\n}\n\n// ReadMemory implements MemoryReader.ReadMemory.\nfunc (r *SplicedMemory) ReadMemory(buf []byte, addr uint64) (n int, err error) {\n\tstarted := false\n\tfor _, entry := range r.readers {\n\t\tif entry.offset+entry.length <= addr {\n\t\t\tif !started {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn n, fmt.Errorf(\"hit unmapped area at %v after %v bytes\", addr, n)\n\t\t}\n\n\t\t// The reading of the memory has been started after the first iteration\n\t\tstarted = true\n\n\t\t// Don't go past the region.\n\t\tpb := buf\n\t\tif addr+uint64(len(buf)) > entry.offset+entry.length {\n\t\t\tpb = pb[:entry.offset+entry.length-addr]\n\t\t}\n\t\tpn, err := entry.reader.ReadMemory(pb, addr)\n\t\tn += pn\n\t\tif err != nil {\n\t\t\treturn n, fmt.Errorf(\"error while reading spliced memory at %#x: %v\", addr, err)\n\t\t}\n\t\tif pn != len(pb) {\n\t\t\treturn n, nil\n\t\t}\n\t\tbuf = buf[pn:]\n\t\taddr += uint64(pn)\n\t\tif len(buf) == 0 {\n\t\t\t// Done, don't bother scanning the rest.\n\t\t\treturn n, nil\n\t\t}\n\t}\n\tif n == 0 {\n\t\treturn 0, fmt.Errorf(\"offset %v did not match any regions\", addr)\n\t}\n\treturn n, nil\n}\n\n// offsetReaderAt wraps a ReaderAt into a MemoryReader, subtracting a fixed\n// offset from the address. This is useful to represent a mapping in an address\n// space. For example, if program text is mapped in at 0x400000, an\n// OffsetReaderAt with offset 0x400000 can be wrapped around file.Open(program)\n// to return the results of a read in that part of the address space.\ntype offsetReaderAt struct {\n\treader io.ReaderAt\n\toffset uint64\n}\n\n// ReadMemory will read the memory at addr-offset.\nfunc (r *offsetReaderAt) ReadMemory(buf []byte, addr uint64) (n int, err error) {\n\treturn r.reader.ReadAt(buf, int64(addr-r.offset))\n}\n\n// process represents a core file.\ntype process struct {\n\tmem     proc.MemoryReader\n\tThreads map[int]*thread\n\tpid     int\n\n\tentryPoint uint64\n\n\tbi          *proc.BinaryInfo\n\tbreakpoints proc.BreakpointMap\n}\n\n// thread represents a thread in the core file being debugged.\ntype thread struct {\n\tosThread\n\tp      *process\n\tcommon proc.CommonThread\n}\n\ntype osThread interface {\n\tRegisters() (proc.Registers, error)\n\tThreadID() int\n}\n\nvar (\n\t// ErrWriteCore is returned when attempting to write to the core\n\t// process memory.\n\tErrWriteCore = errors.New(\"can not write to core process\")\n\n\t// ErrShortRead is returned on a short read.\n\tErrShortRead = errors.New(\"short read\")\n\n\t// ErrContinueCore is returned when trying to continue execution of a core process.\n\tErrContinueCore = errors.New(\"can not continue execution of core process\")\n\n\t// ErrChangeRegisterCore is returned when trying to change register values for core files.\n\tErrChangeRegisterCore = errors.New(\"can not change register values of core process\")\n)\n\ntype openFn func(string, string) (*process, proc.Thread, error)\n\nvar openFns = []openFn{readLinuxOrPlatformIndependentCore, readAMD64Minidump}\n\n// ErrUnrecognizedFormat is returned when the core file is not recognized as\n// any of the supported formats.\nvar ErrUnrecognizedFormat = errors.New(\"unrecognized core format\")\n\n// OpenCore will open the core file and return a *proc.TargetGroup.\n// If the DWARF information cannot be found in the binary, Delve will look\n// for external debug files in the directories passed in.\nfunc OpenCore(corePath, exePath string, debugInfoDirs []string) (*proc.TargetGroup, error) {\n\tvar p *process\n\tvar currentThread proc.Thread\n\tvar err error\n\tfor _, openFn := range openFns {\n\t\tp, currentThread, err = openFn(corePath, exePath)\n\t\tif err != ErrUnrecognizedFormat {\n\t\t\tbreak\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif currentThread == nil {\n\t\treturn nil, ErrNoThreads\n\t}\n\n\tgrp, addTarget := proc.NewGroup(p, proc.NewTargetGroupConfig{\n\t\tDebugInfoDirs:       debugInfoDirs,\n\t\tDisableAsyncPreempt: false,\n\t\tCanDump:             false,\n\t})\n\t_, err = addTarget(p, p.pid, currentThread, exePath, proc.StopAttached, \"\")\n\treturn grp, err\n}\n\n// BinInfo will return the binary info.\nfunc (p *process) BinInfo() *proc.BinaryInfo {\n\treturn p.bi\n}\n\n// EntryPoint will return the entry point address for this core file.\nfunc (p *process) EntryPoint() (uint64, error) {\n\treturn p.entryPoint, nil\n}\n\n// WriteBreakpoint is a noop function since you\n// cannot write breakpoints into core files.\nfunc (p *process) WriteBreakpoint(*proc.Breakpoint) error {\n\treturn errors.New(\"cannot write a breakpoint to a core file\")\n}\n\n// Recorded returns whether this is a live or recorded process. Always returns true for core files.\nfunc (p *process) Recorded() (bool, string) { return true, \"\" }\n\n// Restart will only return an error for core files, as they are not executing.\nfunc (p *process) Restart(*proc.ContinueOnceContext, string) (proc.Thread, error) {\n\treturn nil, ErrContinueCore\n}\n\n// ChangeDirection will only return an error as you cannot continue a core process.\nfunc (p *process) ChangeDirection(proc.Direction) error { return ErrContinueCore }\n\n// GetDirection will always return forward.\nfunc (p *process) GetDirection() proc.Direction { return proc.Forward }\n\n// When does not apply to core files, it is to support the Mozilla 'rr' backend.\nfunc (p *process) When() (string, error) { return \"\", nil }\n\n// Checkpoint for core files returns an error, there is no execution of a core file.\nfunc (p *process) Checkpoint(string) (int, error) { return -1, ErrContinueCore }\n\n// Checkpoints returns nil on core files, you cannot set checkpoints when debugging core files.\nfunc (p *process) Checkpoints() ([]proc.Checkpoint, error) { return nil, nil }\n\n// ClearCheckpoint clears a checkpoint, but will only return an error for core files.\nfunc (p *process) ClearCheckpoint(int) error { return errors.New(\"checkpoint not found\") }\n\nfunc (p *process) SupportsBPF() bool {\n\treturn false\n}\n\nfunc (p *process) SetUProbe(fnName string, goidOffset int64, args []ebpf.UProbeArgMap) error {\n\tpanic(\"not implemented\")\n}\n\n// StartCallInjection notifies the backend that we are about to inject a function call.\nfunc (p *process) StartCallInjection() (func(), error) { return func() {}, nil }\n\nfunc (p *process) EnableURetProbes() error {\n\tpanic(\"not implemented\")\n}\n\nfunc (p *process) DisableURetProbes() error {\n\tpanic(\"not implemented\")\n}\n\n// ReadMemory will return memory from the core file at the specified location and put the\n// read memory into `data`, returning the length read, and returning an error if\n// the length read is shorter than the length of the `data` buffer.\nfunc (p *process) ReadMemory(data []byte, addr uint64) (n int, err error) {\n\tn, err = p.mem.ReadMemory(data, addr)\n\tif err == nil && n != len(data) {\n\t\terr = ErrShortRead\n\t}\n\treturn n, err\n}\n\n// WriteMemory will only return an error for core files, you cannot write\n// to the memory of a core process.\nfunc (p *process) WriteMemory(addr uint64, data []byte) (int, error) {\n\treturn 0, ErrWriteCore\n}\n\n// FollowExec enables (or disables) follow exec mode\nfunc (p *process) FollowExec(bool) error {\n\treturn nil\n}\n\n// ProcessMemory returns the memory of this thread's process.\nfunc (t *thread) ProcessMemory() proc.MemoryReadWriter {\n\treturn t.p\n}\n\n// Breakpoint returns the current breakpoint this thread is stopped at.\n// For core files this always returns an empty BreakpointState struct, as\n// there are no breakpoints when debugging core files.\nfunc (t *thread) Breakpoint() *proc.BreakpointState {\n\treturn &proc.BreakpointState{}\n}\n\n// RestoreRegisters will only return an error for core files,\n// you cannot change register values for core files.\nfunc (t *thread) RestoreRegisters(proc.Registers) error {\n\treturn ErrChangeRegisterCore\n}\n\n// BinInfo returns information about the binary.\nfunc (t *thread) BinInfo() *proc.BinaryInfo {\n\treturn t.p.bi\n}\n\n// SetCurrentBreakpoint will always just return nil\n// for core files, as there are no breakpoints in core files.\nfunc (t *thread) SetCurrentBreakpoint(adjustPC bool) error {\n\treturn nil\n}\n\n// SoftExc returns true if this thread received a software exception during the last resume.\nfunc (t *thread) SoftExc() bool {\n\treturn false\n}\n\n// Common returns a struct containing common information\n// across thread implementations.\nfunc (t *thread) Common() *proc.CommonThread {\n\treturn &t.common\n}\n\n// SetPC will always return an error, you cannot\n// change register values when debugging core files.\nfunc (t *thread) SetPC(uint64) error {\n\treturn ErrChangeRegisterCore\n}\n\n// SetSP will always return an error, you cannot\n// change register values when debugging core files.\nfunc (t *thread) SetSP(uint64) error {\n\treturn ErrChangeRegisterCore\n}\n\n// SetDX will always return an error, you cannot\n// change register values when debugging core files.\nfunc (t *thread) SetDX(uint64) error {\n\treturn ErrChangeRegisterCore\n}\n\n// SetReg will always return an error, you cannot\n// change register values when debugging core files.\nfunc (t *thread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\treturn ErrChangeRegisterCore\n}\n\n// Breakpoints will return all breakpoints for the process.\nfunc (p *process) Breakpoints() *proc.BreakpointMap {\n\treturn &p.breakpoints\n}\n\n// EraseBreakpoint will always return an error as you cannot set or clear\n// breakpoints on core files.\nfunc (p *process) EraseBreakpoint(bp *proc.Breakpoint) error {\n\treturn proc.NoBreakpointError{Addr: bp.Addr}\n}\n\n// ClearInternalBreakpoints will always return nil and have no\n// effect since you cannot set breakpoints on core files.\nfunc (p *process) ClearInternalBreakpoints() error {\n\treturn nil\n}\n\nfunc (*process) ContinueOnce(cctx *proc.ContinueOnceContext) (proc.Thread, proc.StopReason, error) {\n\treturn nil, proc.StopUnknown, ErrContinueCore\n}\n\n// StepInstruction will always return an error\n// as you cannot control execution of a core file.\nfunc (p *process) StepInstruction(int) error {\n\treturn ErrContinueCore\n}\n\n// RequestManualStop will return nil and have no effect\n// as you cannot control execution of a core file.\nfunc (p *process) RequestManualStop(cctx *proc.ContinueOnceContext) error {\n\treturn nil\n}\n\n// CheckAndClearManualStopRequest will always return false and\n// have no effect since there are no manual stop requests as\n// there is no controlling execution of a core file.\nfunc (p *process) CheckAndClearManualStopRequest() bool {\n\treturn false\n}\n\n// Memory returns the process memory.\nfunc (p *process) Memory() proc.MemoryReadWriter {\n\treturn p\n}\n\n// Detach will always return nil and have no\n// effect as you cannot detach from a core file\n// and have it continue execution or exit.\nfunc (p *process) Detach(int, bool) error {\n\treturn nil\n}\n\nfunc (p *process) Close() error {\n\treturn nil\n}\n\n// Valid returns whether the process is active. Always returns true\n// for core files as it cannot exit or be otherwise detached from.\nfunc (p *process) Valid() (bool, error) {\n\treturn true, nil\n}\n\n// ResumeNotify is a no-op on core files as we cannot\n// control execution.\nfunc (p *process) ResumeNotify(chan<- struct{}) {\n}\n\n// ThreadList will return a list of all threads currently in the process.\nfunc (p *process) ThreadList() []proc.Thread {\n\tr := make([]proc.Thread, 0, len(p.Threads))\n\tfor _, v := range p.Threads {\n\t\tr = append(r, v)\n\t}\n\treturn r\n}\n\n// FindThread will return the thread with the corresponding thread ID.\nfunc (p *process) FindThread(threadID int) (proc.Thread, bool) {\n\tt, ok := p.Threads[threadID]\n\treturn t, ok\n}\n\nfunc (p *process) MemoryMap() ([]proc.MemoryMapEntry, error) {\n\treturn nil, proc.ErrMemoryMapNotSupported\n}\n\nfunc (p *process) DumpProcessNotes(notes []elfwriter.Note, threadDone func()) (threadsDone bool, out []elfwriter.Note, err error) {\n\treturn false, notes, nil\n}\n\nfunc (p *process) GetBufferedTracepoints() []ebpf.RawUProbeParams {\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/core/core_test.go",
    "content": "package core\n\nimport (\n\t\"bytes\"\n\t\"flag\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nvar buildMode string\n\nfunc TestMain(m *testing.M) {\n\tflag.StringVar(&buildMode, \"test-buildmode\", \"\", \"selects build mode\")\n\tflag.Parse()\n\tif buildMode != \"\" && buildMode != \"pie\" {\n\t\tfmt.Fprintf(os.Stderr, \"unknown build mode %q\", buildMode)\n\t\tos.Exit(1)\n\t}\n\ttest.RunTestsWithFixtures(m)\n}\n\nfunc assertNoError(err error, t testing.TB, s string) {\n\tif err != nil {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\tfname := filepath.Base(file)\n\t\tt.Fatalf(\"failed assertion at %s:%d: %s - %s\\n\", fname, line, s, err)\n\t}\n}\n\nfunc TestSplicedReader(t *testing.T) {\n\tdata := []byte{}\n\tdata2 := []byte{}\n\tfor i := range 100 {\n\t\tdata = append(data, byte(i))\n\t\tdata2 = append(data2, byte(i+100))\n\t}\n\n\ttype region struct {\n\t\tdata   []byte\n\t\toff    uint64\n\t\tlength uint64\n\t}\n\ttests := []struct {\n\t\tname     string\n\t\tregions  []region\n\t\treadAddr uint64\n\t\treadLen  int\n\t\twant     []byte\n\t}{\n\t\t{\n\t\t\t\"Insert after\",\n\t\t\t[]region{\n\t\t\t\t{data, 0, 1},\n\t\t\t\t{data2, 1, 1},\n\t\t\t},\n\t\t\t0,\n\t\t\t2,\n\t\t\t[]byte{0, 101},\n\t\t},\n\t\t{\n\t\t\t\"Insert before\",\n\t\t\t[]region{\n\t\t\t\t{data, 1, 1},\n\t\t\t\t{data2, 0, 1},\n\t\t\t},\n\t\t\t0,\n\t\t\t2,\n\t\t\t[]byte{100, 1},\n\t\t},\n\t\t{\n\t\t\t\"Completely overwrite\",\n\t\t\t[]region{\n\t\t\t\t{data, 1, 1},\n\t\t\t\t{data2, 0, 3},\n\t\t\t},\n\t\t\t0,\n\t\t\t3,\n\t\t\t[]byte{100, 101, 102},\n\t\t},\n\t\t{\n\t\t\t\"Overwrite end\",\n\t\t\t[]region{\n\t\t\t\t{data, 0, 2},\n\t\t\t\t{data2, 1, 2},\n\t\t\t},\n\t\t\t0,\n\t\t\t3,\n\t\t\t[]byte{0, 101, 102},\n\t\t},\n\t\t{\n\t\t\t\"Overwrite start\",\n\t\t\t[]region{\n\t\t\t\t{data, 0, 3},\n\t\t\t\t{data2, 0, 2},\n\t\t\t},\n\t\t\t0,\n\t\t\t3,\n\t\t\t[]byte{100, 101, 2},\n\t\t},\n\t\t{\n\t\t\t\"Punch hole\",\n\t\t\t[]region{\n\t\t\t\t{data, 0, 5},\n\t\t\t\t{data2, 1, 3},\n\t\t\t},\n\t\t\t0,\n\t\t\t5,\n\t\t\t[]byte{0, 101, 102, 103, 4},\n\t\t},\n\t\t{\n\t\t\t\"Overlap two\",\n\t\t\t[]region{\n\t\t\t\t{data, 10, 4},\n\t\t\t\t{data, 14, 4},\n\t\t\t\t{data2, 12, 4},\n\t\t\t},\n\t\t\t10,\n\t\t\t8,\n\t\t\t[]byte{10, 11, 112, 113, 114, 115, 16, 17},\n\t\t},\n\t}\n\tfor _, test := range tests {\n\t\tt.Run(test.name, func(t *testing.T) {\n\t\t\tt.Parallel()\n\t\t\tmem := &SplicedMemory{}\n\t\t\tfor _, region := range test.regions {\n\t\t\t\tr := bytes.NewReader(region.data)\n\t\t\t\tmem.Add(&offsetReaderAt{r, 0}, region.off, region.length)\n\t\t\t}\n\t\t\tgot := make([]byte, test.readLen)\n\t\t\tn, err := mem.ReadMemory(got, test.readAddr)\n\t\t\tif n != test.readLen || err != nil || !reflect.DeepEqual(got, test.want) {\n\t\t\t\tt.Errorf(\"ReadAt = %v, %v, %v, want %v, %v, %v\", n, err, got, test.readLen, nil, test.want)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Test some ReadMemory errors\n\n\tmem := &SplicedMemory{}\n\tfor _, region := range []region{\n\t\t{[]byte{0xa1, 0xa2, 0xa3, 0xa4}, 0x1000, 4},\n\t\t{[]byte{0xb1, 0xb2, 0xb3, 0xb4}, 0x1004, 4},\n\t\t{[]byte{0xc1, 0xc2, 0xc3, 0xc4}, 0x1010, 4},\n\t} {\n\t\tr := bytes.NewReader(region.data)\n\t\tmem.Add(&offsetReaderAt{r, region.off}, region.off, region.length)\n\t}\n\n\tgot := make([]byte, 4)\n\n\t// Read before the first mapping\n\t_, err := mem.ReadMemory(got, 0x900)\n\tif err == nil || !strings.HasPrefix(err.Error(), \"error while reading spliced memory at 0x900\") {\n\t\tt.Errorf(\"Read before the start of memory didn't fail (or wrong error): %v\", err)\n\t}\n\n\t// Read after the last mapping\n\t_, err = mem.ReadMemory(got, 0x1100)\n\tif err == nil || (err.Error() != \"offset 4352 did not match any regions\") {\n\t\tt.Errorf(\"Read after the end of memory didn't fail (or wrong error): %v\", err)\n\t}\n\n\t// Read at the start of the first entry\n\t_, err = mem.ReadMemory(got, 0x1000)\n\tif err != nil || !bytes.Equal(got, []byte{0xa1, 0xa2, 0xa3, 0xa4}) {\n\t\tt.Errorf(\"Reading at the start of the first entry: %v %#x\", err, got)\n\t}\n\n\t// Read at the start of the second entry\n\t_, err = mem.ReadMemory(got, 0x1004)\n\tif err != nil || !bytes.Equal(got, []byte{0xb1, 0xb2, 0xb3, 0xb4}) {\n\t\tt.Errorf(\"Reading at the start of the second entry: %v %#x\", err, got)\n\t}\n\n\t// Read straddling entries 1 and 2\n\t_, err = mem.ReadMemory(got, 0x1002)\n\tif err != nil || !bytes.Equal(got, []byte{0xa3, 0xa4, 0xb1, 0xb2}) {\n\t\tt.Errorf(\"Straddled read of the second entry: %v %#x\", err, got)\n\t}\n\n\t// Read past the end of the second entry\n\t_, err = mem.ReadMemory(got, 0x1007)\n\tif err == nil || !strings.HasPrefix(err.Error(), \"error while reading spliced memory at 0x1008\") {\n\t\tt.Errorf(\"Read into gap: %v\", err)\n\t}\n}\n\nfunc withCoreFile(t *testing.T, name, args string) *proc.TargetGroup {\n\t// This is all very fragile and won't work on hosts with non-default core patterns.\n\t// Might be better to check in the binary and core?\n\ttempDir := t.TempDir()\n\tvar buildFlags test.BuildFlags\n\tif buildMode == \"pie\" {\n\t\tbuildFlags = test.BuildModePIE\n\t}\n\tfix := test.BuildFixture(t, name, buildFlags)\n\tbashCmd := fmt.Sprintf(\"cd %v && ulimit -c unlimited && GOTRACEBACK=crash %v %s\", tempDir, fix.Path, args)\n\texec.Command(\"bash\", \"-c\", bashCmd).Run()\n\tcores, err := filepath.Glob(path.Join(tempDir, \"core*\"))\n\tswitch {\n\tcase err != nil || len(cores) > 1:\n\t\tt.Fatalf(\"Got %v, wanted one file named core* in %v\", cores, tempDir)\n\tcase len(cores) == 0:\n\t\tcores = []string{fix.Path + \".dump\"}\n\t\terr := exec.Command(\"coredumpctl\", \"--output=\"+cores[0], \"dump\", fix.Path).Run()\n\t\tif err != nil {\n\t\t\tt.Skipf(\"core file was not produced, could not run test, coredumpctl error: %v\", err)\n\t\t\treturn nil\n\t\t}\n\t\ttest.AddPathToRemove(cores[0])\n\t}\n\tcorePath := cores[0]\n\n\tp, err := OpenCore(corePath, fix.Path, []string{})\n\tif err != nil {\n\t\tt.Errorf(\"OpenCore(%q) failed: %v\", corePath, err)\n\t\tpat, err := os.ReadFile(\"/proc/sys/kernel/core_pattern\")\n\t\tt.Errorf(\"read core_pattern: %q, %v\", pat, err)\n\t\tapport, err := os.ReadFile(\"/var/log/apport.log\")\n\t\tt.Errorf(\"read apport log: %q, %v\", apport, err)\n\t\tt.Fatalf(\"previous errors\")\n\t}\n\treturn p\n}\n\nfunc logRegisters(t *testing.T, regs proc.Registers, arch *proc.Arch) {\n\tdregs := arch.RegistersToDwarfRegisters(0, regs)\n\tdregs.Reg(^uint64(0))\n\tfor i := 0; i < dregs.CurrentSize(); i++ {\n\t\treg := dregs.Reg(uint64(i))\n\t\tif reg == nil {\n\t\t\tcontinue\n\t\t}\n\t\tname, _, value := arch.DwarfRegisterToString(i, reg)\n\t\tt.Logf(\"%s = %s\", name, value)\n\t}\n}\n\nfunc TestCore(t *testing.T) {\n\tt.Parallel()\n\n\tmustSupportCore(t)\n\n\tgrp := withCoreFile(t, \"panic\", \"\")\n\tp := grp.Selected\n\n\trecorded, _ := grp.Recorded()\n\tif !recorded {\n\t\tt.Fatalf(\"expecting recorded to be true\")\n\t}\n\n\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\tif err != nil || len(gs) == 0 {\n\t\tt.Fatalf(\"GoroutinesInfo() = %v, %v; wanted at least one goroutine\", gs, err)\n\t}\n\n\tvar panicking *proc.G\n\tvar panickingStack []proc.Stackframe\n\tfor _, g := range gs {\n\t\tt.Logf(\"Goroutine %d\", g.ID)\n\t\tstack, err := proc.GoroutineStacktrace(p, g, 10, 0)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Stacktrace() on goroutine %v = %v\", g, err)\n\t\t}\n\t\tfor _, frame := range stack {\n\t\t\tfnname := \"\"\n\t\t\tif frame.Call.Fn != nil {\n\t\t\t\tfnname = frame.Call.Fn.Name\n\t\t\t}\n\t\t\tt.Logf(\"\\tframe %s:%d in %s %#x (systemstack: %v)\", frame.Call.File, frame.Call.Line, fnname, frame.Call.PC, frame.SystemStack)\n\t\t\tif frame.Current.Fn != nil && strings.Contains(frame.Current.Fn.Name, \"panic\") {\n\t\t\t\tpanicking = g\n\t\t\t\tpanickingStack = stack\n\t\t\t}\n\t\t}\n\t}\n\tif panicking == nil {\n\t\tt.Fatalf(\"Didn't find a call to panic in goroutine stacks: %v\", gs)\n\t}\n\n\tvar mainFrame *proc.Stackframe\n\t// Walk backward, because the current function seems to be main.main\n\t// in the actual call to panic().\n\tfor i := len(panickingStack) - 1; i >= 0; i-- {\n\t\tif panickingStack[i].Current.Fn != nil && panickingStack[i].Current.Fn.Name == \"main.main\" {\n\t\t\tmainFrame = &panickingStack[i]\n\t\t}\n\t}\n\tif mainFrame == nil {\n\t\tt.Fatalf(\"Couldn't find main in stack %v\", panickingStack)\n\t}\n\tmsg, err := proc.FrameToScope(p, p.Memory(), nil, p.CurrentThread().ThreadID(), *mainFrame).EvalExpression(\"msg\", proc.LoadConfig{MaxStringLen: 64})\n\tif err != nil {\n\t\tt.Fatalf(\"Couldn't EvalVariable(msg, ...): %v\", err)\n\t}\n\tif constant.StringVal(msg.Value) != \"BOOM!\" {\n\t\tt.Errorf(\"main.msg = %q, want %q\", msg.Value, \"BOOM!\")\n\t}\n\n\tregs, err := p.CurrentThread().Registers()\n\tif err != nil {\n\t\tt.Fatalf(\"Couldn't get current thread registers: %v\", err)\n\t}\n\tlogRegisters(t, regs, p.BinInfo().Arch)\n}\n\nfunc TestCoreFpRegisters(t *testing.T) {\n\tt.Parallel()\n\tif runtime.GOOS != \"linux\" || runtime.GOARCH == \"386\" {\n\t\tt.Skip(\"unsupported\")\n\t}\n\tif runtime.GOARCH != \"amd64\" {\n\t\tt.Skip(\"test requires amd64\")\n\t}\n\t// in go1.10 the crash is executed on a different thread and registers are\n\t// no longer available in the core dump.\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major < 0 || ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\tt.Skip(\"not supported in go1.10 and later\")\n\t}\n\n\tgrp := withCoreFile(t, \"fputest/\", \"panic\")\n\tp := grp.Selected\n\n\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\tif err != nil || len(gs) == 0 {\n\t\tt.Fatalf(\"GoroutinesInfo() = %v, %v; wanted at least one goroutine\", gs, err)\n\t}\n\n\tvar regs proc.Registers\n\tfor _, thread := range p.ThreadList() {\n\t\tframes, err := proc.ThreadStacktrace(p, thread, 10)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"ThreadStacktrace for %x = %v\", thread.ThreadID(), err)\n\t\t\tcontinue\n\t\t}\n\t\tfor i := range frames {\n\t\t\tif frames[i].Current.Fn == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif frames[i].Current.Fn.Name == \"main.main\" {\n\t\t\t\tregs, err = thread.Registers()\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"Could not get registers for thread %x, %v\", thread.ThreadID(), err)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif regs != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tregtests := []struct{ name, value string }{\n\t\t{\"ST(0)\", \"0x3fffe666660000000000\"},\n\t\t{\"ST(1)\", \"0x3fffd9999a0000000000\"},\n\t\t{\"ST(2)\", \"0x3fffcccccd0000000000\"},\n\t\t{\"ST(3)\", \"0x3fffc000000000000000\"},\n\t\t{\"ST(4)\", \"0x3fffb333333333333000\"},\n\t\t{\"ST(5)\", \"0x3fffa666666666666800\"},\n\t\t{\"ST(6)\", \"0x3fff9999999999999800\"},\n\t\t{\"ST(7)\", \"0x3fff8cccccccccccd000\"},\n\t\t// Unlike TestClientServer_FpRegisters in service/test/integration2_test\n\t\t// we can not test the value of XMM0, it probably has been reused by\n\t\t// something between the panic and the time we get the core dump.\n\t\t{\"XMM9\", \"0x3ff66666666666663ff4cccccccccccd\"},\n\t\t{\"XMM10\", \"0x3fe666663fd9999a3fcccccd3fc00000\"},\n\t\t{\"XMM3\", \"0x3ff199999999999a3ff3333333333333\"},\n\t\t{\"XMM4\", \"0x3ff4cccccccccccd3ff6666666666666\"},\n\t\t{\"XMM5\", \"0x3fcccccd3fc000003fe666663fd9999a\"},\n\t\t{\"XMM6\", \"0x4004cccccccccccc4003333333333334\"},\n\t\t{\"XMM7\", \"0x40026666666666664002666666666666\"},\n\t\t{\"XMM8\", \"0x4059999a404ccccd4059999a404ccccd\"},\n\t}\n\n\tarch := p.BinInfo().Arch\n\tlogRegisters(t, regs, arch)\n\tdregs := arch.RegistersToDwarfRegisters(0, regs)\n\n\tfor _, regtest := range regtests {\n\t\tfound := false\n\t\tdregs.Reg(^uint64(0))\n\t\tfor i := 0; i < dregs.CurrentSize(); i++ {\n\t\t\treg := dregs.Reg(uint64(i))\n\t\t\tregname, _, regval := arch.DwarfRegisterToString(i, reg)\n\t\t\tif reg != nil && regname == regtest.name {\n\t\t\t\tfound = true\n\t\t\t\tif !strings.HasPrefix(regval, regtest.value) {\n\t\t\t\t\tt.Fatalf(\"register %s expected %q got %q\", regname, regtest.value, regval)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatalf(\"register %s not found: %v\", regtest.name, regs)\n\t\t}\n\t}\n}\n\nfunc TestCoreWithEmptyString(t *testing.T) {\n\tt.Parallel()\n\tmustSupportCore(t)\n\n\tgrp := withCoreFile(t, \"coreemptystring\", \"\")\n\tp := grp.Selected\n\n\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\tassertNoError(err, t, \"GoroutinesInfo\")\n\n\tvar mainFrame *proc.Stackframe\nmainSearch:\n\tfor _, g := range gs {\n\t\tstack, err := proc.GoroutineStacktrace(p, g, 10, 0)\n\t\tassertNoError(err, t, \"Stacktrace()\")\n\t\tfor _, frame := range stack {\n\t\t\tif frame.Current.Fn != nil && frame.Current.Fn.Name == \"main.main\" {\n\t\t\t\tmainFrame = &frame\n\t\t\t\tbreak mainSearch\n\t\t\t}\n\t\t}\n\t}\n\n\tif mainFrame == nil {\n\t\tt.Fatal(\"could not find main.main frame\")\n\t}\n\n\tscope := proc.FrameToScope(p, p.Memory(), nil, p.CurrentThread().ThreadID(), *mainFrame)\n\tloadConfig := proc.LoadConfig{FollowPointers: true, MaxVariableRecurse: 1, MaxStringLen: 64, MaxArrayValues: 64, MaxStructFields: -1}\n\tv1, err := scope.EvalExpression(\"t\", loadConfig)\n\tassertNoError(err, t, \"EvalVariable(t)\")\n\tassertNoError(v1.Unreadable, t, \"unreadable variable 't'\")\n\tt.Logf(\"t = %#v\\n\", v1)\n\tv2, err := scope.EvalExpression(\"s\", loadConfig)\n\tassertNoError(err, t, \"EvalVariable(s)\")\n\tassertNoError(v2.Unreadable, t, \"unreadable variable 's'\")\n\tt.Logf(\"s = %#v\\n\", v2)\n}\n\nfunc TestMinidump(t *testing.T) {\n\tt.Parallel()\n\tif runtime.GOOS != \"windows\" || runtime.GOARCH != \"amd64\" {\n\t\tt.Skip(\"minidumps can only be produced on windows/amd64\")\n\t}\n\tvar buildFlags test.BuildFlags\n\tif buildMode == \"pie\" {\n\t\tbuildFlags = test.BuildModePIE\n\t}\n\tfix := test.BuildFixture(t, \"sleep\", buildFlags)\n\tmdmpPath := procdump(t, fix.Path)\n\n\tgrp, err := OpenCore(mdmpPath, fix.Path, []string{})\n\tif err != nil {\n\t\tt.Fatalf(\"OpenCore: %v\", err)\n\t}\n\tp := grp.Selected\n\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\tif err != nil || len(gs) == 0 {\n\t\tt.Fatalf(\"GoroutinesInfo() = %v, %v; wanted at least one goroutine\", gs, err)\n\t}\n\tt.Logf(\"%d goroutines\", len(gs))\n\tfoundMain, foundTime := false, false\n\tfor _, g := range gs {\n\t\tstack, err := proc.GoroutineStacktrace(p, g, 10, 0)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Stacktrace() on goroutine %v = %v\", g, err)\n\t\t}\n\t\tt.Logf(\"goroutine %d\", g.ID)\n\t\tfor _, frame := range stack {\n\t\t\tname := \"?\"\n\t\t\tif frame.Current.Fn != nil {\n\t\t\t\tname = frame.Current.Fn.Name\n\t\t\t}\n\t\t\tt.Logf(\"\\t%s:%d in %s %#x\", frame.Current.File, frame.Current.Line, name, frame.Current.PC)\n\t\t\tif frame.Current.Fn == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tswitch frame.Current.Fn.Name {\n\t\t\tcase \"main.main\":\n\t\t\t\tfoundMain = true\n\t\t\tcase \"time.Sleep\":\n\t\t\t\tfoundTime = true\n\t\t\t}\n\t\t}\n\t\tif foundMain != foundTime {\n\t\t\tt.Errorf(\"found main.main but no time.Sleep (or viceversa) %v %v\", foundMain, foundTime)\n\t\t}\n\t}\n\tif !foundMain {\n\t\tt.Fatalf(\"could not find main goroutine\")\n\t}\n}\n\nfunc procdump(t *testing.T, exePath string) string {\n\texeDir := filepath.Dir(exePath)\n\tcmd := exec.Command(\"procdump64\", \"-accepteula\", \"-ma\", \"-n\", \"1\", \"-s\", \"3\", \"-x\", exeDir, exePath, \"quit\")\n\tout, err := cmd.CombinedOutput() // procdump exits with non-zero status on success, so we have to ignore the error here\n\tif !strings.Contains(string(out), \"Dump count reached.\") {\n\t\tt.Fatalf(\"possible error running procdump64, output: %q, error: %v\", string(out), err)\n\t}\n\n\tfis, err := os.ReadDir(exeDir)\n\tif err != nil {\n\t\tt.Fatalf(\"could not read executable file directory %q: %v\", exeDir, err)\n\t}\n\tt.Logf(\"looking for dump file\")\n\texeName := filepath.Base(exePath)\n\tfor _, fi := range fis {\n\t\tname := fi.Name()\n\t\tt.Logf(\"\\t%s\", name)\n\t\tif strings.HasPrefix(name, exeName) && strings.HasSuffix(name, \".dmp\") {\n\t\t\tmdmpPath := filepath.Join(exeDir, name)\n\t\t\ttest.AddPathToRemove(mdmpPath)\n\t\t\treturn mdmpPath\n\t\t}\n\t}\n\n\tt.Fatalf(\"could not find dump file\")\n\treturn \"\"\n}\n\nfunc mustSupportCore(t *testing.T) {\n\tt.Helper()\n\n\tif runtime.GOOS != \"linux\" {\n\t\tt.Skip(\"test must be run on linux\")\n\t}\n\n\tswitch runtime.GOARCH {\n\tcase \"386\", \"ppc64le\":\n\t\tt.Skip(\"unsupported\")\n\t}\n\n\tif os.Getenv(\"CI\") == \"true\" && buildMode == \"pie\" {\n\t\tt.Skip(\"disabled on linux, Github Actions, with PIE buildmode\")\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/core/delve_core.go",
    "content": "package core\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\nfunc platformFromNotes(notes []*note) (goos, goarch string, err error) {\n\tfor _, note := range notes {\n\t\tif note.Type != elfwriter.DelveHeaderNoteType {\n\t\t\tcontinue\n\t\t}\n\t\tlines := strings.Split(string(note.Desc.([]byte)), \"\\n\")\n\t\tv := strings.Split(lines[0], \"/\")\n\t\tif len(v) != 2 {\n\t\t\treturn \"\", \"\", fmt.Errorf(\"malformed delve header note: %q\", string(note.Desc.([]byte)))\n\t\t}\n\t\treturn v[0], v[1], nil\n\t}\n\tpanic(\"internal error\")\n}\n\nfunc threadsFromDelveNotes(p *process, notes []*note) (proc.Thread, error) {\n\tvar currentThread proc.Thread\n\tfor _, note := range notes {\n\t\tif note.Type == elfwriter.DelveHeaderNoteType {\n\t\t\tbuf := bytes.NewBuffer(note.Desc.([]byte))\n\t\t\tfor {\n\t\t\t\tline, err := buf.ReadString('\\n')\n\t\t\t\tif err != nil {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif len(line) > 0 && line[len(line)-1] == '\\n' {\n\t\t\t\t\tline = line[:len(line)-1]\n\t\t\t\t}\n\t\t\t\tswitch {\n\t\t\t\tcase strings.HasPrefix(line, elfwriter.DelveHeaderTargetPidPrefix):\n\t\t\t\t\tpid, err := strconv.ParseUint(line[len(elfwriter.DelveHeaderTargetPidPrefix):], 10, 64)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"malformed delve header note (bad pid): %v\", err)\n\t\t\t\t\t}\n\t\t\t\t\tp.pid = int(pid)\n\t\t\t\tcase strings.HasPrefix(line, elfwriter.DelveHeaderEntryPointPrefix):\n\t\t\t\t\tentry, err := strconv.ParseUint(line[len(elfwriter.DelveHeaderEntryPointPrefix):], 0, 64)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"malformed delve header note (bad entry point): %v\", err)\n\t\t\t\t\t}\n\t\t\t\t\tp.entryPoint = entry\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif note.Type != elfwriter.DelveThreadNodeType {\n\t\t\tcontinue\n\t\t}\n\t\tbody := bytes.NewReader(note.Desc.([]byte))\n\t\tth := new(delveThread)\n\t\tth.regs = new(delveRegisters)\n\n\t\tvar readerr error\n\t\tread := func(out any) {\n\t\t\tif readerr != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\treaderr = binary.Read(body, binary.LittleEndian, out)\n\t\t}\n\n\t\tread(&th.id)\n\n\t\tread(&th.regs.pc)\n\t\tread(&th.regs.sp)\n\t\tread(&th.regs.bp)\n\t\tread(&th.regs.tls)\n\t\tread(&th.regs.hasGAddr)\n\t\tread(&th.regs.gaddr)\n\n\t\tvar n uint32\n\t\tread(&n)\n\n\t\tif readerr != nil {\n\t\t\treturn nil, fmt.Errorf(\"error reading thread note header for thread %d: %v\", th.id, readerr)\n\t\t}\n\n\t\tth.regs.slice = make([]proc.Register, n)\n\n\t\treadBytes := func(maxlen uint16, kind string) []byte {\n\t\t\tif readerr != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tvar len uint16\n\t\t\tread(&len)\n\t\t\tif maxlen > 0 && len > maxlen {\n\t\t\t\treaderr = fmt.Errorf(\"maximum len exceeded (%d) reading %s\", len, kind)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tif readerr != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tbuf := make([]byte, len)\n\t\t\t_, readerr = body.Read(buf)\n\t\t\treturn buf\n\t\t}\n\n\t\tfor i := 0; i < int(n); i++ {\n\t\t\tname := string(readBytes(20, \"register name\"))\n\t\t\tvalue := readBytes(2048, \"register value\")\n\t\t\tth.regs.slice[i] = proc.Register{Name: name, Reg: op.DwarfRegisterFromBytes(value)}\n\t\t\tif readerr != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"error reading thread note registers for thread %d: %v\", th.id, readerr)\n\t\t\t}\n\t\t}\n\n\t\tp.Threads[int(th.id)] = &thread{th, p, proc.CommonThread{}}\n\t\tif currentThread == nil {\n\t\t\tcurrentThread = p.Threads[int(th.id)]\n\t\t}\n\t}\n\treturn currentThread, nil\n}\n\ntype delveThread struct {\n\tid   uint64\n\tregs *delveRegisters\n}\n\nfunc (th *delveThread) ThreadID() int {\n\treturn int(th.id)\n}\n\nfunc (th *delveThread) Registers() (proc.Registers, error) {\n\treturn th.regs, nil\n}\n\ntype delveRegisters struct {\n\tpc, sp, bp, tls uint64\n\thasGAddr        bool\n\tgaddr           uint64\n\tslice           []proc.Register\n}\n\nfunc (regs *delveRegisters) PC() uint64            { return regs.pc }\nfunc (regs *delveRegisters) BP() uint64            { return regs.bp }\nfunc (regs *delveRegisters) SP() uint64            { return regs.sp }\nfunc (regs *delveRegisters) TLS() uint64           { return regs.tls }\nfunc (regs *delveRegisters) GAddr() (uint64, bool) { return regs.gaddr, regs.hasGAddr }\nfunc (regs *delveRegisters) LR() uint64            { return 0 }\n\nfunc (regs *delveRegisters) Copy() (proc.Registers, error) {\n\treturn regs, nil\n}\n\nfunc (regs *delveRegisters) Slice(bool) ([]proc.Register, error) {\n\treturn regs.slice, nil\n}\n"
  },
  {
    "path": "pkg/proc/core/linux_core.go",
    "content": "package core\n\nimport (\n\t\"bytes\"\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\n// Copied from golang.org/x/sys/unix.Timeval since it's not available on all\n// systems.\ntype linuxCoreTimeval struct {\n\tSec  int64\n\tUsec int64\n}\n\n// NT_FILE is file mapping information, e.g. program text mappings. Desc is a LinuxNTFile.\nconst _NT_FILE elf.NType = 0x46494c45 // \"FILE\".\n\n// NT_X86_XSTATE is other registers, including AVX and such.\nconst _NT_X86_XSTATE elf.NType = 0x202 // Note type for notes containing X86 XSAVE area.\n\n// NT_AUXV is the note type for notes containing a copy of the Auxv array\nconst _NT_AUXV elf.NType = 0x6\n\n// NT_FPREGSET is the note type for floating point registers.\nconst _NT_FPREGSET elf.NType = 0x2\n\n// Fetch architecture using exeELF.Machine from core file\n// Refer https://man7.org/linux/man-pages/man5/elf.5.html\nconst (\n\t_EM_AARCH64          = 183\n\t_EM_X86_64           = 62\n\t_EM_RISCV            = 243\n\t_EM_LOONGARCH        = 258\n\t_ARM_FP_HEADER_START = 512\n)\n\nconst elfErrorBadMagicNumber = \"bad magic number\"\n\nfunc linuxThreadsFromNotes(p *process, notes []*note, machineType elf.Machine) proc.Thread {\n\tvar currentThread proc.Thread\n\tvar lastThread osThread\n\n\tfor _, note := range notes {\n\t\tswitch note.Type {\n\t\tcase elf.NT_PRSTATUS:\n\t\t\tswitch machineType {\n\t\t\tcase _EM_X86_64:\n\t\t\t\tt := note.Desc.(*linuxPrStatusAMD64)\n\t\t\t\tlastThread = &linuxAMD64Thread{linutil.AMD64Registers{Regs: &t.Reg}, t}\n\t\t\tcase _EM_AARCH64:\n\t\t\t\tt := note.Desc.(*linuxPrStatusARM64)\n\t\t\t\tlastThread = &linuxARM64Thread{linutil.ARM64Registers{Regs: &t.Reg}, t}\n\t\t\tcase _EM_RISCV:\n\t\t\t\tt := note.Desc.(*linuxPrStatusRISCV64)\n\t\t\t\tlastThread = &linuxRISCV64Thread{linutil.RISCV64Registers{Regs: &t.Reg}, t}\n\t\t\tcase _EM_LOONGARCH:\n\t\t\t\tt := note.Desc.(*linuxPrStatusLOONG64)\n\t\t\t\tlastThread = &linuxLOONG64Thread{linutil.LOONG64Registers{Regs: &t.Reg}, t}\n\t\t\tdefault:\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tp.Threads[lastThread.ThreadID()] = &thread{lastThread, p, proc.CommonThread{}}\n\t\t\tif currentThread == nil {\n\t\t\t\tcurrentThread = p.Threads[lastThread.ThreadID()]\n\t\t\t}\n\t\tcase _NT_FPREGSET:\n\t\t\tswitch th := lastThread.(type) {\n\t\t\tcase *linuxARM64Thread:\n\t\t\t\tth.regs.Fpregs = note.Desc.(*linutil.ARM64PtraceFpRegs).Decode()\n\t\t\tcase *linuxRISCV64Thread:\n\t\t\t\tth.regs.Fpregs = note.Desc.(*linutil.RISCV64PtraceFpRegs).Decode()\n\t\t\tcase *linuxLOONG64Thread:\n\t\t\t\tth.regs.Fpregs = note.Desc.(*linutil.LOONG64PtraceFpRegs).Decode()\n\t\t\t}\n\t\tcase _NT_X86_XSTATE:\n\t\t\tif lastThread != nil {\n\t\t\t\tlastThread.(*linuxAMD64Thread).regs.Fpregs = note.Desc.(*amd64util.AMD64Xstate).Decode()\n\t\t\t}\n\t\tcase elf.NT_PRPSINFO:\n\t\t\tp.pid = int(note.Desc.(*linuxPrPsInfo).Pid)\n\t\t}\n\t}\n\treturn currentThread\n}\n\nvar supportedLinuxMachines = map[elf.Machine]string{\n\t_EM_X86_64:    \"amd64\",\n\t_EM_AARCH64:   \"arm64\",\n\t_EM_RISCV:     \"riscv64\",\n\t_EM_LOONGARCH: \"loong64\",\n}\n\n// readLinuxOrPlatformIndependentCore reads a core file from corePath\n// corresponding to the executable at exePath. For details on the Linux ELF\n// core format, see:\n// https://www.gabriel.urdhr.fr/2015/05/29/core-file/,\n// https://uhlo.blogspot.com/2012/05/brief-look-into-core-dumps.html,\n// elf_core_dump in https://elixir.bootlin.com/linux/v4.20.17/source/fs/binfmt_elf.c,\n// and, if absolutely desperate, readelf.c from the binutils source.\nfunc readLinuxOrPlatformIndependentCore(corePath, exePath string) (*process, proc.Thread, error) {\n\tcoreFile, err := elf.Open(corePath)\n\tif err != nil {\n\t\tif _, isfmterr := err.(*elf.FormatError); isfmterr && (strings.Contains(err.Error(), elfErrorBadMagicNumber) || strings.Contains(err.Error(), \" at offset 0x0: too short\")) {\n\t\t\t// Go >=1.11 and <1.11 produce different errors when reading a non-elf file.\n\t\t\treturn nil, nil, ErrUnrecognizedFormat\n\t\t}\n\t\treturn nil, nil, err\n\t}\n\n\tif coreFile.Type != elf.ET_CORE {\n\t\treturn nil, nil, fmt.Errorf(\"%v is not a core file\", coreFile)\n\t}\n\n\tmachineType := coreFile.Machine\n\tnotes, platformIndependentDelveCore, err := readNotes(coreFile, machineType)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\texe, err := os.Open(exePath)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\texeELF, err := elf.NewFile(exe)\n\tif err != nil {\n\t\tif !platformIndependentDelveCore {\n\t\t\treturn nil, nil, err\n\t\t}\n\t} else {\n\t\tif exeELF.Machine != machineType {\n\t\t\treturn nil, nil, fmt.Errorf(\"architecture mismatch between core file (%#x) and executable file (%#x)\", machineType, exeELF.Machine)\n\t\t}\n\t\tif exeELF.Type != elf.ET_EXEC && exeELF.Type != elf.ET_DYN {\n\t\t\treturn nil, nil, fmt.Errorf(\"%v is not an exe file\", exeELF)\n\t\t}\n\t}\n\n\tmemory := buildMemory(coreFile, exeELF, exe, notes)\n\n\t// TODO support 386\n\tvar bi *proc.BinaryInfo\n\tif platformIndependentDelveCore {\n\t\tgoos, goarch, err := platformFromNotes(notes)\n\t\tif err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t\tbi = proc.NewBinaryInfo(goos, goarch)\n\t} else if goarch, ok := supportedLinuxMachines[machineType]; ok {\n\t\tbi = proc.NewBinaryInfo(\"linux\", goarch)\n\t} else {\n\t\treturn nil, nil, errors.New(\"unsupported machine type\")\n\t}\n\n\tentryPoint := findEntryPoint(notes, bi.Arch.PtrSize())\n\n\tp := &process{\n\t\tmem:         memory,\n\t\tThreads:     map[int]*thread{},\n\t\tentryPoint:  entryPoint,\n\t\tbi:          bi,\n\t\tbreakpoints: proc.NewBreakpointMap(),\n\t}\n\n\tif platformIndependentDelveCore {\n\t\tcurrentThread, err := threadsFromDelveNotes(p, notes)\n\t\treturn p, currentThread, err\n\t}\n\n\tcurrentThread := linuxThreadsFromNotes(p, notes, machineType)\n\treturn p, currentThread, nil\n}\n\ntype linuxAMD64Thread struct {\n\tregs linutil.AMD64Registers\n\tt    *linuxPrStatusAMD64\n}\n\ntype linuxARM64Thread struct {\n\tregs linutil.ARM64Registers\n\tt    *linuxPrStatusARM64\n}\n\ntype linuxRISCV64Thread struct {\n\tregs linutil.RISCV64Registers\n\tt    *linuxPrStatusRISCV64\n}\n\ntype linuxLOONG64Thread struct {\n\tregs linutil.LOONG64Registers\n\tt    *linuxPrStatusLOONG64\n}\n\nfunc (t *linuxAMD64Thread) Registers() (proc.Registers, error) {\n\tvar r linutil.AMD64Registers\n\tr.Regs = t.regs.Regs\n\tr.Fpregs = t.regs.Fpregs\n\treturn &r, nil\n}\n\nfunc (t *linuxARM64Thread) Registers() (proc.Registers, error) {\n\tvar r linutil.ARM64Registers\n\tr.Regs = t.regs.Regs\n\tr.Fpregs = t.regs.Fpregs\n\treturn &r, nil\n}\n\nfunc (t *linuxRISCV64Thread) Registers() (proc.Registers, error) {\n\tvar r linutil.RISCV64Registers\n\tr.Regs = t.regs.Regs\n\tr.Fpregs = t.regs.Fpregs\n\treturn &r, nil\n}\n\nfunc (t *linuxLOONG64Thread) Registers() (proc.Registers, error) {\n\tvar r linutil.LOONG64Registers\n\tr.Regs = t.regs.Regs\n\tr.Fpregs = t.regs.Fpregs\n\treturn &r, nil\n}\n\nfunc (t *linuxAMD64Thread) ThreadID() int {\n\treturn int(t.t.Pid)\n}\n\nfunc (t *linuxARM64Thread) ThreadID() int {\n\treturn int(t.t.Pid)\n}\n\nfunc (t *linuxRISCV64Thread) ThreadID() int {\n\treturn int(t.t.Pid)\n}\n\nfunc (t *linuxLOONG64Thread) ThreadID() int {\n\treturn int(t.t.Pid)\n}\n\n// Note is a note from the PT_NOTE prog.\n// Relevant types:\n// - NT_FILE: File mapping information, e.g. program text mappings. Desc is a LinuxNTFile.\n// - NT_PRPSINFO: Information about a process, including PID and signal. Desc is a LinuxPrPsInfo.\n// - NT_PRSTATUS: Information about a thread, including base registers, state, etc. Desc is a LinuxPrStatus.\n// - NT_FPREGSET (Not implemented): x87 floating point registers.\n// - NT_X86_XSTATE: Other registers, including AVX and such.\ntype note struct {\n\tType elf.NType\n\tName string\n\tDesc any // Decoded Desc from the\n}\n\n// readNotes reads all the notes from the notes prog in core.\nfunc readNotes(core *elf.File, machineType elf.Machine) ([]*note, bool, error) {\n\tvar notesProg *elf.Prog\n\tfor _, prog := range core.Progs {\n\t\tif prog.Type == elf.PT_NOTE {\n\t\t\tnotesProg = prog\n\t\t\tbreak\n\t\t}\n\t}\n\n\tr := notesProg.Open()\n\thasDelveThread := false\n\thasDelveHeader := false\n\thasElfPrStatus := false\n\tnotes := []*note{}\n\tfor {\n\t\tnote, err := readNote(r, machineType)\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tswitch note.Type {\n\t\tcase elfwriter.DelveHeaderNoteType:\n\t\t\thasDelveHeader = true\n\t\tcase elfwriter.DelveThreadNodeType:\n\t\t\thasDelveThread = true\n\t\tcase elf.NT_PRSTATUS:\n\t\t\thasElfPrStatus = true\n\t\t}\n\t\tnotes = append(notes, note)\n\t}\n\n\treturn notes, hasDelveThread && hasDelveHeader && !hasElfPrStatus, nil\n}\n\n// readNote reads a single note from r, decoding the descriptor if possible.\nfunc readNote(r io.ReadSeeker, machineType elf.Machine) (*note, error) {\n\t// Notes are laid out as described in the SysV ABI:\n\t// https://www.sco.com/developers/gabi/latest/ch5.pheader.html#note_section\n\tnote := &note{}\n\thdr := &elfNotesHdr{}\n\n\terr := binary.Read(r, binary.LittleEndian, hdr)\n\tif err != nil {\n\t\treturn nil, err // don't wrap so readNotes sees EOF.\n\t}\n\tnote.Type = elf.NType(hdr.Type)\n\n\tname := make([]byte, hdr.Namesz)\n\tif _, err := r.Read(name); err != nil {\n\t\treturn nil, fmt.Errorf(\"reading name: %v\", err)\n\t}\n\tnote.Name = string(name)\n\tif err := skipPadding(r, 4); err != nil {\n\t\treturn nil, fmt.Errorf(\"aligning after name: %v\", err)\n\t}\n\tdesc := make([]byte, hdr.Descsz)\n\tif _, err := r.Read(desc); err != nil {\n\t\treturn nil, fmt.Errorf(\"reading desc: %v\", err)\n\t}\n\tdescReader := bytes.NewReader(desc)\n\tswitch note.Type {\n\tcase elf.NT_PRSTATUS:\n\t\tswitch machineType {\n\t\tcase _EM_X86_64:\n\t\t\tnote.Desc = &linuxPrStatusAMD64{}\n\t\tcase _EM_AARCH64:\n\t\t\tnote.Desc = &linuxPrStatusARM64{}\n\t\tcase _EM_RISCV:\n\t\t\tnote.Desc = &linuxPrStatusRISCV64{}\n\t\tcase _EM_LOONGARCH:\n\t\t\tnote.Desc = &linuxPrStatusLOONG64{}\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"unsupported machine type\")\n\t\t}\n\t\tif err := binary.Read(descReader, binary.LittleEndian, note.Desc); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"reading NT_PRSTATUS: %v\", err)\n\t\t}\n\tcase elf.NT_PRPSINFO:\n\t\tnote.Desc = &linuxPrPsInfo{}\n\t\tif err := binary.Read(descReader, binary.LittleEndian, note.Desc); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"reading NT_PRPSINFO: %v\", err)\n\t\t}\n\tcase _NT_FILE:\n\t\t// No good documentation reference, but the structure is\n\t\t// simply a header, including entry count, followed by that\n\t\t// many entries, and then the file name of each entry,\n\t\t// null-delimited. Not reading the names here.\n\t\tdata := &linuxNTFile{}\n\t\tif err := binary.Read(descReader, binary.LittleEndian, &data.linuxNTFileHdr); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"reading NT_FILE header: %v\", err)\n\t\t}\n\t\tfor i := 0; i < int(data.Count); i++ {\n\t\t\tentry := &linuxNTFileEntry{}\n\t\t\tif err := binary.Read(descReader, binary.LittleEndian, entry); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"reading NT_FILE entry %v: %v\", i, err)\n\t\t\t}\n\t\t\tdata.entries = append(data.entries, entry)\n\t\t}\n\t\tnote.Desc = data\n\tcase _NT_X86_XSTATE:\n\t\tif machineType == _EM_X86_64 {\n\t\t\tvar fpregs amd64util.AMD64Xstate\n\t\t\tif err := amd64util.AMD64XstateRead(desc, true, &fpregs, 0); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tnote.Desc = &fpregs\n\t\t}\n\tcase _NT_AUXV, elfwriter.DelveHeaderNoteType, elfwriter.DelveThreadNodeType:\n\t\tnote.Desc = desc\n\tcase _NT_FPREGSET:\n\t\tif machineType == _EM_AARCH64 {\n\t\t\terr = readFpregsetNote(note, &linutil.ARM64PtraceFpRegs{}, desc[:_ARM_FP_HEADER_START])\n\t\t} else if machineType == _EM_RISCV {\n\t\t\terr = readFpregsetNote(note, &linutil.RISCV64PtraceFpRegs{}, desc)\n\t\t} else if machineType == _EM_LOONGARCH {\n\t\t\terr = readFpregsetNote(note, &linutil.LOONG64PtraceFpRegs{}, desc)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif err := skipPadding(r, 4); err != nil {\n\t\treturn nil, fmt.Errorf(\"aligning after desc: %v\", err)\n\t}\n\treturn note, nil\n}\n\nfunc readFpregsetNote(note *note, fpregs interface{ Byte() []byte }, desc []byte) error {\n\trdr := bytes.NewReader(desc)\n\tif err := binary.Read(rdr, binary.LittleEndian, fpregs.Byte()); err != nil {\n\t\treturn err\n\t}\n\tnote.Desc = fpregs\n\treturn nil\n}\n\n// skipPadding moves r to the next multiple of pad.\nfunc skipPadding(r io.ReadSeeker, pad int64) error {\n\tpos, err := r.Seek(0, io.SeekCurrent)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif pos%pad == 0 {\n\t\treturn nil\n\t}\n\tif _, err := r.Seek(pad-(pos%pad), io.SeekCurrent); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc buildMemory(core, exeELF *elf.File, exe io.ReaderAt, notes []*note) proc.MemoryReader {\n\tmemory := &SplicedMemory{}\n\n\t// For now, assume all file mappings are to the exe.\n\tfor _, note := range notes {\n\t\tif note.Type == _NT_FILE {\n\t\t\tfileNote := note.Desc.(*linuxNTFile)\n\t\t\tfor _, entry := range fileNote.entries {\n\t\t\t\tr := &offsetReaderAt{\n\t\t\t\t\treader: exe,\n\t\t\t\t\toffset: entry.Start - (entry.FileOfs * fileNote.PageSize),\n\t\t\t\t}\n\t\t\t\tmemory.Add(r, entry.Start, entry.End-entry.Start)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Load memory segments from exe and then from the core file,\n\t// allowing the corefile to overwrite previously loaded segments\n\tfor _, elfFile := range []*elf.File{exeELF, core} {\n\t\tif elfFile == nil {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, prog := range elfFile.Progs {\n\t\t\tif prog.Type == elf.PT_LOAD {\n\t\t\t\tif prog.Filesz == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tr := &offsetReaderAt{\n\t\t\t\t\treader: prog.ReaderAt,\n\t\t\t\t\toffset: prog.Vaddr,\n\t\t\t\t}\n\t\t\t\tmemory.Add(r, prog.Vaddr, prog.Filesz)\n\t\t\t}\n\t\t}\n\t}\n\treturn memory\n}\n\nfunc findEntryPoint(notes []*note, ptrSize int) uint64 {\n\tfor _, note := range notes {\n\t\tif note.Type == _NT_AUXV {\n\t\t\treturn linutil.EntryPointFromAuxv(note.Desc.([]byte), ptrSize)\n\t\t}\n\t}\n\treturn 0\n}\n\n// LinuxPrPsInfo has various structures from the ELF spec and the Linux kernel.\n// AMD64 specific primarily because of unix.PtraceRegs, but also\n// because some of the fields are word sized.\n// See https://elixir.bootlin.com/linux/v4.20.17/source/include/uapi/linux/elfcore.h\ntype linuxPrPsInfo struct {\n\tState                uint8\n\tSname                int8\n\tZomb                 uint8\n\tNice                 int8\n\t_                    [4]uint8\n\tFlag                 uint64\n\tUid, Gid             uint32\n\tPid, Ppid, Pgrp, Sid int32\n\tFname                [16]uint8\n\tArgs                 [80]uint8\n}\n\n// LinuxPrStatusAMD64 is a copy of the prstatus kernel struct.\ntype linuxPrStatusAMD64 struct {\n\tSiginfo                      linuxSiginfo\n\tCursig                       uint16\n\t_                            [2]uint8\n\tSigpend                      uint64\n\tSighold                      uint64\n\tPid, Ppid, Pgrp, Sid         int32\n\tUtime, Stime, CUtime, CStime linuxCoreTimeval\n\tReg                          linutil.AMD64PtraceRegs\n\tFpvalid                      int32\n}\n\n// LinuxPrStatusARM64 is a copy of the prstatus kernel struct.\ntype linuxPrStatusARM64 struct {\n\tSiginfo                      linuxSiginfo\n\tCursig                       uint16\n\t_                            [2]uint8\n\tSigpend                      uint64\n\tSighold                      uint64\n\tPid, Ppid, Pgrp, Sid         int32\n\tUtime, Stime, CUtime, CStime linuxCoreTimeval\n\tReg                          linutil.ARM64PtraceRegs\n\tFpvalid                      int32\n}\n\n// LinuxPrStatusRISCV64 is a copy of the prstatus kernel struct.\ntype linuxPrStatusRISCV64 struct {\n\tSiginfo                      linuxSiginfo\n\tCursig                       uint16\n\t_                            [2]uint8\n\tSigpend                      uint64\n\tSighold                      uint64\n\tPid, Ppid, Pgrp, Sid         int32\n\tUtime, Stime, CUtime, CStime linuxCoreTimeval\n\tReg                          linutil.RISCV64PtraceRegs\n\tFpvalid                      int32\n}\n\n// LinuxPrStatusLOONG64 is a copy of the prstatus kernel struct.\ntype linuxPrStatusLOONG64 struct {\n\tSiginfo                      linuxSiginfo\n\tCursig                       uint16\n\t_                            [2]uint8\n\tSigpend                      uint64\n\tSighold                      uint64\n\tPid, Ppid, Pgrp, Sid         int32\n\tUtime, Stime, CUtime, CStime linuxCoreTimeval\n\tReg                          linutil.LOONG64PtraceRegs\n\tFpvalid                      int32\n}\n\n// LinuxSiginfo is a copy of the\n// siginfo kernel struct.\ntype linuxSiginfo struct {\n\tSigno int32\n\tCode  int32\n\tErrno int32\n}\n\n// LinuxNTFile contains information on mapped files.\ntype linuxNTFile struct {\n\tlinuxNTFileHdr\n\tentries []*linuxNTFileEntry\n}\n\n// LinuxNTFileHdr is a header struct for NTFile.\ntype linuxNTFileHdr struct {\n\tCount    uint64\n\tPageSize uint64\n}\n\n// LinuxNTFileEntry is an entry of an NT_FILE note.\ntype linuxNTFileEntry struct {\n\tStart   uint64\n\tEnd     uint64\n\tFileOfs uint64\n}\n\n// elfNotesHdr is the ELF Notes header.\n// Same size on 64 and 32-bit machines.\ntype elfNotesHdr struct {\n\tNamesz uint32\n\tDescsz uint32\n\tType   uint32\n}\n"
  },
  {
    "path": "pkg/proc/core/minidump/fileflags_string.go",
    "content": "// Code generated by \"stringer -type FileFlags,StreamType,Arch,MemoryState,MemoryType,MemoryProtection\"; DO NOT EDIT.\n\npackage minidump\n\nimport \"strconv\"\n\nconst _FileFlags_name = \"FileNormalFileWithDataSegsFileWithFullMemoryFileWithHandleDataFileFilterMemoryFileScanMemoryFileWithUnloadedModulesFileWithIncorrectlyReferencedMemoryFileFilterModulePathsFileWithProcessThreadDataFileWithPrivateReadWriteMemoryFileWithoutOptionalDataFileWithFullMemoryInfoFileWithThreadInfoFileWithCodeSegsFileWithoutAuxilliarySegsFileWithFullAuxilliaryStateFileWithPrivateCopyMemoryFileIgnoreInaccessibleMemoryFileWithTokenInformation\"\n\nvar _FileFlags_map = map[FileFlags]string{\n\t0:      _FileFlags_name[0:10],\n\t1:      _FileFlags_name[10:26],\n\t2:      _FileFlags_name[26:44],\n\t4:      _FileFlags_name[44:62],\n\t8:      _FileFlags_name[62:78],\n\t16:     _FileFlags_name[78:92],\n\t32:     _FileFlags_name[92:115],\n\t64:     _FileFlags_name[115:150],\n\t128:    _FileFlags_name[150:171],\n\t256:    _FileFlags_name[171:196],\n\t512:    _FileFlags_name[196:226],\n\t1024:   _FileFlags_name[226:249],\n\t2048:   _FileFlags_name[249:271],\n\t4096:   _FileFlags_name[271:289],\n\t8192:   _FileFlags_name[289:305],\n\t16384:  _FileFlags_name[305:330],\n\t32768:  _FileFlags_name[330:357],\n\t65536:  _FileFlags_name[357:382],\n\t131072: _FileFlags_name[382:410],\n\t262144: _FileFlags_name[410:434],\n}\n\nfunc (i FileFlags) String() string {\n\tif str, ok := _FileFlags_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"FileFlags(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n\nconst _StreamType_name = \"UnusedStreamReservedStream0ReservedStream1ThreadListStreamModuleListStreamMemoryListStreamExceptionStreamSystemInfoStreamThreadExListStreamMemory64ListStreamCommentStreamACommentStreamWHandleDataStreamFunctionTableStreamUnloadedModuleStreamMiscInfoStreamMemoryInfoListStreamThreadInfoListStreamHandleOperationListStreamTokenStreamJavascriptDataStreamSystemMemoryInfoStreamProcessVMCounterStream\"\n\nvar _StreamType_index = [...]uint16{0, 12, 27, 42, 58, 74, 90, 105, 121, 139, 157, 171, 185, 201, 220, 240, 254, 274, 294, 319, 330, 350, 372, 394}\n\nfunc (i StreamType) String() string {\n\tif i >= StreamType(len(_StreamType_index)-1) {\n\t\treturn \"StreamType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _StreamType_name[_StreamType_index[i]:_StreamType_index[i+1]]\n}\n\nconst (\n\t_Arch_name_0 = \"CpuArchitectureX86CpuArchitectureMipsCpuArchitectureAlphaCpuArchitecturePPCCpuArchitectureSHXCpuArchitectureARMCpuArchitectureIA64CpuArchitectureAlpha64CpuArchitectureMSILCpuArchitectureAMD64CpuArchitectureWoW64\"\n\t_Arch_name_1 = \"CpuArchitectureARM64\"\n\t_Arch_name_2 = \"CpuArchitectureUnknown\"\n)\n\nvar (\n\t_Arch_index_0 = [...]uint8{0, 18, 37, 57, 75, 93, 111, 130, 152, 171, 191, 211}\n)\n\nfunc (i Arch) String() string {\n\tswitch {\n\tcase i <= 10:\n\t\treturn _Arch_name_0[_Arch_index_0[i]:_Arch_index_0[i+1]]\n\tcase i == 12:\n\t\treturn _Arch_name_1\n\tcase i == 65535:\n\t\treturn _Arch_name_2\n\tdefault:\n\t\treturn \"Arch(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n\nconst (\n\t_MemoryState_name_0 = \"MemoryStateCommit\"\n\t_MemoryState_name_1 = \"MemoryStateReserve\"\n\t_MemoryState_name_2 = \"MemoryStateFree\"\n)\n\nfunc (i MemoryState) String() string {\n\tswitch {\n\tcase i == 4096:\n\t\treturn _MemoryState_name_0\n\tcase i == 8192:\n\t\treturn _MemoryState_name_1\n\tcase i == 65536:\n\t\treturn _MemoryState_name_2\n\tdefault:\n\t\treturn \"MemoryState(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n\nconst (\n\t_MemoryType_name_0 = \"MemoryTypePrivate\"\n\t_MemoryType_name_1 = \"MemoryTypeMapped\"\n\t_MemoryType_name_2 = \"MemoryTypeImage\"\n)\n\nfunc (i MemoryType) String() string {\n\tswitch {\n\tcase i == 131072:\n\t\treturn _MemoryType_name_0\n\tcase i == 262144:\n\t\treturn _MemoryType_name_1\n\tcase i == 16777216:\n\t\treturn _MemoryType_name_2\n\tdefault:\n\t\treturn \"MemoryType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n\nconst (\n\t_MemoryProtection_name_0 = \"MemoryProtectNoAccessMemoryProtectReadOnly\"\n\t_MemoryProtection_name_1 = \"MemoryProtectReadWrite\"\n\t_MemoryProtection_name_2 = \"MemoryProtectWriteCopy\"\n\t_MemoryProtection_name_3 = \"MemoryProtectExecute\"\n\t_MemoryProtection_name_4 = \"MemoryProtectExecuteRead\"\n\t_MemoryProtection_name_5 = \"MemoryProtectExecuteReadWrite\"\n\t_MemoryProtection_name_6 = \"MemoryProtectExecuteWriteCopy\"\n\t_MemoryProtection_name_7 = \"MemoryProtectPageGuard\"\n\t_MemoryProtection_name_8 = \"MemoryProtectNoCache\"\n\t_MemoryProtection_name_9 = \"MemoryProtectWriteCombine\"\n)\n\nvar (\n\t_MemoryProtection_index_0 = [...]uint8{0, 21, 42}\n)\n\nfunc (i MemoryProtection) String() string {\n\tswitch {\n\tcase 1 <= i && i <= 2:\n\t\ti -= 1\n\t\treturn _MemoryProtection_name_0[_MemoryProtection_index_0[i]:_MemoryProtection_index_0[i+1]]\n\tcase i == 4:\n\t\treturn _MemoryProtection_name_1\n\tcase i == 8:\n\t\treturn _MemoryProtection_name_2\n\tcase i == 16:\n\t\treturn _MemoryProtection_name_3\n\tcase i == 32:\n\t\treturn _MemoryProtection_name_4\n\tcase i == 64:\n\t\treturn _MemoryProtection_name_5\n\tcase i == 128:\n\t\treturn _MemoryProtection_name_6\n\tcase i == 256:\n\t\treturn _MemoryProtection_name_7\n\tcase i == 512:\n\t\treturn _MemoryProtection_name_8\n\tcase i == 1024:\n\t\treturn _MemoryProtection_name_9\n\tdefault:\n\t\treturn \"MemoryProtection(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/core/minidump/minidump.go",
    "content": "package minidump\n\n// Package minidump provides a loader for Windows Minidump files.\n// Minidump files are the Windows equivalent of unix core dumps.\n// They can be created by the kernel when a program crashes (however this is\n// disabled for Go programs) or programmatically using either WinDbg or the\n// ProcDump utility.\n//\n// The file format is described on MSDN starting at:\n//  https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ns-minidumpapiset-minidump_header\n// which is the structure found at offset 0 on a minidump file.\n//\n// Further information on the format can be found reading\n// chromium-breakpad's minidump loading code, specifically:\n//  https://chromium.googlesource.com/breakpad/breakpad/+/master/src/google_breakpad/common/minidump_cpu_amd64.h\n// and:\n//  https://chromium.googlesource.com/breakpad/breakpad/+/master/src/google_breakpad/common/minidump_format.h\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/proc/winutil\"\n)\n\ntype minidumpBuf struct {\n\tbuf  []byte\n\tkind string\n\toff  int\n\terr  error\n\tctx  string\n}\n\nfunc (buf *minidumpBuf) u16() uint16 {\n\tconst stride = 2\n\tif buf.err != nil {\n\t\treturn 0\n\t}\n\tif buf.off+stride >= len(buf.buf) {\n\t\tbuf.err = fmt.Errorf(\"minidump %s truncated at offset %#x while %s\", buf.kind, buf.off, buf.ctx)\n\t}\n\tr := binary.LittleEndian.Uint16(buf.buf[buf.off : buf.off+stride])\n\tbuf.off += stride\n\treturn r\n}\n\nfunc (buf *minidumpBuf) u32() uint32 {\n\tconst stride = 4\n\tif buf.err != nil {\n\t\treturn 0\n\t}\n\tif buf.off+stride >= len(buf.buf) {\n\t\tbuf.err = fmt.Errorf(\"minidump %s truncated at offset %#x while %s\", buf.kind, buf.off, buf.ctx)\n\t}\n\tr := binary.LittleEndian.Uint32(buf.buf[buf.off : buf.off+stride])\n\tbuf.off += stride\n\treturn r\n}\n\nfunc (buf *minidumpBuf) u64() uint64 {\n\tconst stride = 8\n\tif buf.err != nil {\n\t\treturn 0\n\t}\n\tif buf.off+stride >= len(buf.buf) {\n\t\tbuf.err = fmt.Errorf(\"minidump %s truncated at offset %#x while %s\", buf.kind, buf.off, buf.ctx)\n\t}\n\tr := binary.LittleEndian.Uint64(buf.buf[buf.off : buf.off+stride])\n\tbuf.off += stride\n\treturn r\n}\n\nfunc streamBuf(stream *Stream, buf *minidumpBuf, name string) *minidumpBuf {\n\treturn &minidumpBuf{\n\t\tbuf:  buf.buf,\n\t\tkind: \"stream\",\n\t\toff:  stream.Offset,\n\t\terr:  nil,\n\t\tctx:  fmt.Sprintf(\"reading %s stream at %#x\", name, stream.Offset),\n\t}\n}\n\n// ErrNotAMinidump is the error returned when the file being loaded is not a\n// minidump file.\ntype ErrNotAMinidump struct {\n\twhat string\n\tgot  uint32\n}\n\nfunc (err ErrNotAMinidump) Error() string {\n\treturn fmt.Sprintf(\"not a minidump, invalid %s %#x\", err.what, err.got)\n}\n\nconst (\n\tminidumpSignature = 0x504d444d // 'MDMP'\n\tminidumpVersion   = 0xa793\n)\n\n// Minidump represents a minidump file\ntype Minidump struct {\n\tTimestamp uint32\n\tFlags     FileFlags\n\n\tStreams []Stream\n\n\tThreads []Thread\n\tModules []Module\n\n\tPid uint32\n\n\tMemoryRanges []MemoryRange\n\tMemoryInfo   []MemoryInfo\n\n\tstreamNum uint32\n\tstreamOff uint32\n}\n\n// Stream represents one (uninterpreted) stream in a minidump file.\n// See: https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ns-minidumpapiset-minidump_directory\ntype Stream struct {\n\tType    StreamType\n\tOffset  int\n\tRawData []byte\n}\n\n// Thread represents an entry in the ThreadList stream.\n// See: https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ns-minidumpapiset-minidump_thread\ntype Thread struct {\n\tID            uint32\n\tSuspendCount  uint32\n\tPriorityClass uint32\n\tPriority      uint32\n\tTEB           uint64\n\tContext       winutil.AMD64CONTEXT\n}\n\n// Module represents an entry in the ModuleList stream.\n// See: https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ns-minidumpapiset-minidump_module\ntype Module struct {\n\tBaseOfImage   uint64\n\tSizeOfImage   uint32\n\tChecksum      uint32\n\tTimeDateStamp uint32\n\tName          string\n\tVersionInfo   VSFixedFileInfo\n\n\t// CVRecord stores a CodeView record and is populated when a module's debug information resides in a PDB file.  It identifies the PDB file.\n\tCVRecord []byte\n\n\t// MiscRecord is populated when a module's debug information resides in a DBG file.  It identifies the DBG file.  This field is effectively obsolete with modules built by recent toolchains.\n\tMiscRecord []byte\n}\n\n// VSFixedFileInfo  Visual Studio Fixed File Info.\n// See: https://docs.microsoft.com/en-us/windows/win32/api/verrsrc/ns-verrsrc-vs_fixedfileinfo\ntype VSFixedFileInfo struct {\n\tSignature        uint32\n\tStructVersion    uint32\n\tFileVersionHi    uint32\n\tFileVersionLo    uint32\n\tProductVersionHi uint32\n\tProductVersionLo uint32\n\tFileFlagsMask    uint32\n\tFileFlags        uint32\n\tFileOS           uint32\n\tFileType         uint32\n\tFileSubtype      uint32\n\tFileDateHi       uint32\n\tFileDateLo       uint32\n}\n\n// MemoryRange represents a region of memory saved to the core file, it's constructed after either:\n// 1. parsing an entry in the Memory64List stream.\n// 2. parsing the stack field of an entry in the ThreadList stream.\ntype MemoryRange struct {\n\tAddr uint64\n\tData []byte\n}\n\n// ReadMemory reads len(buf) bytes of memory starting at addr into buf from this memory region.\nfunc (m *MemoryRange) ReadMemory(buf []byte, addr uint64) (int, error) {\n\tif len(buf) == 0 {\n\t\treturn 0, nil\n\t}\n\tif (addr < m.Addr) || (addr+uint64(len(buf)) > m.Addr+uint64(len(m.Data))) {\n\t\treturn 0, io.EOF\n\t}\n\tcopy(buf, m.Data[addr-m.Addr:])\n\treturn len(buf), nil\n}\n\n// MemoryInfo represents an entry in the MemoryInfoList stream.\n// See: https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ns-minidumpapiset-minidump_memory_info_list\ntype MemoryInfo struct {\n\tAddr       uint64\n\tSize       uint64\n\tState      MemoryState\n\tProtection MemoryProtection\n\tType       MemoryType\n}\n\n//go:generate stringer -type FileFlags,StreamType,Arch,MemoryState,MemoryType,MemoryProtection\n\n// MemoryState is the type of the State field of MINIDUMP_MEMORY_INFO\ntype MemoryState uint32\n\nconst (\n\tMemoryStateCommit  MemoryState = 0x1000\n\tMemoryStateReserve MemoryState = 0x2000\n\tMemoryStateFree    MemoryState = 0x10000\n)\n\n// MemoryType is the type of the Type field of MINIDUMP_MEMORY_INFO\ntype MemoryType uint32\n\nconst (\n\tMemoryTypePrivate MemoryType = 0x20000\n\tMemoryTypeMapped  MemoryType = 0x40000\n\tMemoryTypeImage   MemoryType = 0x1000000\n)\n\n// MemoryProtection is the type of the Protection field of MINIDUMP_MEMORY_INFO\ntype MemoryProtection uint32\n\nconst (\n\tMemoryProtectNoAccess         MemoryProtection = 0x01 // PAGE_NOACCESS\n\tMemoryProtectReadOnly         MemoryProtection = 0x02 // PAGE_READONLY\n\tMemoryProtectReadWrite        MemoryProtection = 0x04 // PAGE_READWRITE\n\tMemoryProtectWriteCopy        MemoryProtection = 0x08 // PAGE_WRITECOPY\n\tMemoryProtectExecute          MemoryProtection = 0x10 // PAGE_EXECUTE\n\tMemoryProtectExecuteRead      MemoryProtection = 0x20 // PAGE_EXECUTE_READ\n\tMemoryProtectExecuteReadWrite MemoryProtection = 0x40 // PAGE_EXECUTE_READWRITE\n\tMemoryProtectExecuteWriteCopy MemoryProtection = 0x80 // PAGE_EXECUTE_WRITECOPY\n\t// These options can be combined with the previous flags\n\tMemoryProtectPageGuard    MemoryProtection = 0x100 // PAGE_GUARD\n\tMemoryProtectNoCache      MemoryProtection = 0x200 // PAGE_NOCACHE\n\tMemoryProtectWriteCombine MemoryProtection = 0x400 // PAGE_WRITECOMBINE\n\n)\n\n// FileFlags is the type of the Flags field of MINIDUMP_HEADER\ntype FileFlags uint64\n\nconst (\n\tFileNormal                          FileFlags = 0x00000000\n\tFileWithDataSegs                    FileFlags = 0x00000001\n\tFileWithFullMemory                  FileFlags = 0x00000002\n\tFileWithHandleData                  FileFlags = 0x00000004\n\tFileFilterMemory                    FileFlags = 0x00000008\n\tFileScanMemory                      FileFlags = 0x00000010\n\tFileWithUnloadedModules             FileFlags = 0x00000020\n\tFileWithIncorrectlyReferencedMemory FileFlags = 0x00000040\n\tFileFilterModulePaths               FileFlags = 0x00000080\n\tFileWithProcessThreadData           FileFlags = 0x00000100\n\tFileWithPrivateReadWriteMemory      FileFlags = 0x00000200\n\tFileWithoutOptionalData             FileFlags = 0x00000400\n\tFileWithFullMemoryInfo              FileFlags = 0x00000800\n\tFileWithThreadInfo                  FileFlags = 0x00001000\n\tFileWithCodeSegs                    FileFlags = 0x00002000\n\tFileWithoutAuxilliarySegs           FileFlags = 0x00004000\n\tFileWithFullAuxilliaryState         FileFlags = 0x00008000\n\tFileWithPrivateCopyMemory           FileFlags = 0x00010000\n\tFileIgnoreInaccessibleMemory        FileFlags = 0x00020000\n\tFileWithTokenInformation            FileFlags = 0x00040000\n)\n\n// StreamType is the type of the StreamType field of MINIDUMP_DIRECTORY\ntype StreamType uint32\n\nconst (\n\tUnusedStream              StreamType = 0\n\tReservedStream0           StreamType = 1\n\tReservedStream1           StreamType = 2\n\tThreadListStream          StreamType = 3\n\tModuleListStream          StreamType = 4\n\tMemoryListStream          StreamType = 5\n\tExceptionStream           StreamType = 6\n\tSystemInfoStream          StreamType = 7\n\tThreadExListStream        StreamType = 8\n\tMemory64ListStream        StreamType = 9\n\tCommentStreamA            StreamType = 10\n\tCommentStreamW            StreamType = 11\n\tHandleDataStream          StreamType = 12\n\tFunctionTableStream       StreamType = 13\n\tUnloadedModuleStream      StreamType = 14\n\tMiscInfoStream            StreamType = 15\n\tMemoryInfoListStream      StreamType = 16\n\tThreadInfoListStream      StreamType = 17\n\tHandleOperationListStream StreamType = 18\n\tTokenStream               StreamType = 19\n\tJavascriptDataStream      StreamType = 20\n\tSystemMemoryInfoStream    StreamType = 21\n\tProcessVMCounterStream    StreamType = 22\n)\n\n// Arch is the type of the ProcessorArchitecture field of MINIDUMP_SYSTEM_INFO.\ntype Arch uint16\n\nconst (\n\tCpuArchitectureX86     Arch = 0\n\tCpuArchitectureMips    Arch = 1\n\tCpuArchitectureAlpha   Arch = 2\n\tCpuArchitecturePPC     Arch = 3\n\tCpuArchitectureSHX     Arch = 4 // Super-H\n\tCpuArchitectureARM     Arch = 5\n\tCpuArchitectureIA64    Arch = 6\n\tCpuArchitectureAlpha64 Arch = 7\n\tCpuArchitectureMSIL    Arch = 8 // Microsoft Intermediate Language\n\tCpuArchitectureAMD64   Arch = 9\n\tCpuArchitectureWoW64   Arch = 10\n\tCpuArchitectureARM64   Arch = 12\n\tCpuArchitectureUnknown Arch = 0xffff\n)\n\n// Open reads the minidump file at path and returns it as a Minidump structure.\nfunc Open(path string, logfn func(fmt string, args ...any)) (*Minidump, error) {\n\trawbuf, err := os.ReadFile(path) //TODO(aarzilli): mmap?\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbuf := &minidumpBuf{buf: rawbuf, kind: \"file\"}\n\n\tvar mdmp Minidump\n\n\treadMinidumpHeader(&mdmp, buf)\n\tif buf.err != nil {\n\t\treturn nil, buf.err\n\t}\n\n\tif logfn != nil {\n\t\tlogfn(\"Minidump Header\")\n\t\tlogfn(\"Num Streams: %d\", mdmp.streamNum)\n\t\tlogfn(\"Streams offset: %#x\", mdmp.streamOff)\n\t\tlogfn(\"File flags: %s\", fileFlagsToString(mdmp.Flags))\n\t\tlogfn(\"Offset after header %#x\", buf.off)\n\t}\n\n\treadDirectory(&mdmp, buf)\n\tif buf.err != nil {\n\t\treturn nil, buf.err\n\t}\n\n\tfor i := range mdmp.Streams {\n\t\tstream := &mdmp.Streams[i]\n\t\tif stream.Type != SystemInfoStream {\n\t\t\tcontinue\n\t\t}\n\n\t\tsb := streamBuf(stream, buf, \"system info\")\n\t\tif buf.err != nil {\n\t\t\treturn nil, buf.err\n\t\t}\n\n\t\tarch := Arch(sb.u16())\n\n\t\tif logfn != nil {\n\t\t\tlogfn(\"Found processor architecture %s\", arch.String())\n\t\t}\n\n\t\tif arch != CpuArchitectureAMD64 {\n\t\t\treturn nil, fmt.Errorf(\"unsupported architecture %s\", arch.String())\n\t\t}\n\t}\n\n\tfor i := range mdmp.Streams {\n\t\tstream := &mdmp.Streams[i]\n\t\tif logfn != nil {\n\t\t\tlogfn(\"Stream %d: type:%s off:%#x size:%#x\", i, stream.Type, stream.Offset, len(stream.RawData))\n\t\t}\n\t\tswitch stream.Type {\n\t\tcase ThreadListStream:\n\t\t\treadThreadList(&mdmp, streamBuf(stream, buf, \"thread list\"))\n\t\t\tif logfn != nil {\n\t\t\t\tfor i := range mdmp.Threads {\n\t\t\t\t\tlogfn(\"\\tID:%#x TEB:%#x\", mdmp.Threads[i].ID, mdmp.Threads[i].TEB)\n\t\t\t\t}\n\t\t\t}\n\t\tcase ModuleListStream:\n\t\t\treadModuleList(&mdmp, streamBuf(stream, buf, \"module list\"))\n\t\t\tif logfn != nil {\n\t\t\t\tfor i := range mdmp.Modules {\n\t\t\t\t\tlogfn(\"\\tName:%q BaseOfImage:%#x SizeOfImage:%#x\", mdmp.Modules[i].Name, mdmp.Modules[i].BaseOfImage, mdmp.Modules[i].SizeOfImage)\n\t\t\t\t}\n\t\t\t}\n\t\tcase ExceptionStream:\n\t\t\t//TODO(aarzilli): this stream contains the exception that made the\n\t\t\t//process stop and caused the minidump to be taken. If we ever start\n\t\t\t//caring about this we should parse this.\n\t\tcase Memory64ListStream:\n\t\t\treadMemory64List(&mdmp, streamBuf(stream, buf, \"memory64 list\"), logfn)\n\t\tcase MemoryInfoListStream:\n\t\t\treadMemoryInfoList(&mdmp, streamBuf(stream, buf, \"memory info list\"), logfn)\n\t\tcase MiscInfoStream:\n\t\t\treadMiscInfo(&mdmp, streamBuf(stream, buf, \"misc info\"))\n\t\t\tif logfn != nil {\n\t\t\t\tlogfn(\"\\tPid: %#x\", mdmp.Pid)\n\t\t\t}\n\t\tcase CommentStreamW:\n\t\t\tif logfn != nil {\n\t\t\t\tlogfn(\"\\t%q\", decodeUTF16(stream.RawData))\n\t\t\t}\n\t\tcase CommentStreamA:\n\t\t\tif logfn != nil {\n\t\t\t\tlogfn(\"\\t%s\", string(stream.RawData))\n\t\t\t}\n\t\t}\n\t\tif buf.err != nil {\n\t\t\treturn nil, buf.err\n\t\t}\n\t}\n\n\treturn &mdmp, nil\n}\n\n// decodeUTF16 converts a NUL-terminated UTF16LE string to (non NUL-terminated) UTF8.\nfunc decodeUTF16(in []byte) string {\n\tutf16encoded := []uint16{}\n\tfor i := 0; i+1 < len(in); i += 2 {\n\t\tvar ch uint16\n\t\tch = uint16(in[i]) + uint16(in[i+1])<<8\n\t\tutf16encoded = append(utf16encoded, ch)\n\t}\n\ts := string(utf16.Decode(utf16encoded))\n\tif len(s) > 0 && s[len(s)-1] == 0 {\n\t\ts = s[:len(s)-1]\n\t}\n\treturn s\n}\n\nfunc fileFlagsToString(flags FileFlags) string {\n\tout := []byte{}\n\tfor i, name := range _FileFlags_map {\n\t\tif i == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif flags&i != 0 {\n\t\t\tif len(out) > 0 {\n\t\t\t\tout = append(out, '|')\n\t\t\t}\n\t\t\tout = append(out, name...)\n\t\t}\n\t}\n\tif len(out) == 0 {\n\t\treturn flags.String()\n\t}\n\treturn string(out)\n}\n\n// readMinidumpHeader reads the minidump file header\nfunc readMinidumpHeader(mdmp *Minidump, buf *minidumpBuf) {\n\tbuf.ctx = \"reading minidump header\"\n\n\tif sig := buf.u32(); sig != minidumpSignature {\n\t\tbuf.err = ErrNotAMinidump{\"signature\", sig}\n\t\treturn\n\t}\n\n\tif ver := buf.u16(); ver != minidumpVersion {\n\t\tbuf.err = ErrNotAMinidump{\"version\", uint32(ver)}\n\t\treturn\n\t}\n\n\tbuf.u16() // implementation specific version\n\tmdmp.streamNum = buf.u32()\n\tmdmp.streamOff = buf.u32()\n\tbuf.u32() // checksum, but it's always 0\n\tmdmp.Timestamp = buf.u32()\n\tmdmp.Flags = FileFlags(buf.u64())\n}\n\n// readDirectory reads the list of streams (i.e. the minidump \"directory\")\nfunc readDirectory(mdmp *Minidump, buf *minidumpBuf) {\n\tbuf.off = int(mdmp.streamOff)\n\n\tmdmp.Streams = make([]Stream, mdmp.streamNum)\n\tfor i := range mdmp.Streams {\n\t\tbuf.ctx = fmt.Sprintf(\"reading stream directory entry %d\", i)\n\t\tstream := &mdmp.Streams[i]\n\t\tstream.Type = StreamType(buf.u32())\n\t\tstream.Offset, stream.RawData = readLocationDescriptor(buf)\n\t\tif buf.err != nil {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// readLocationDescriptor reads a location descriptor structure (a structure\n// which describes a subregion of the file), and returns the destination\n// offset and a slice into the minidump file's buffer.\nfunc readLocationDescriptor(buf *minidumpBuf) (off int, rawData []byte) {\n\tsz := buf.u32()\n\toff = int(buf.u32())\n\tif buf.err != nil {\n\t\treturn off, nil\n\t}\n\tend := off + int(sz)\n\tif off >= len(buf.buf) || end > len(buf.buf) {\n\t\tbuf.err = fmt.Errorf(\"location starting at %#x of size %#x is past the end of file, while %s\", off, sz, buf.ctx)\n\t\treturn 0, nil\n\t}\n\trawData = buf.buf[off:end]\n\treturn\n}\n\nfunc readString(buf *minidumpBuf) string {\n\tstartOff := buf.off\n\tsz := buf.u32()\n\tif buf.err != nil {\n\t\treturn \"\"\n\t}\n\tend := buf.off + int(sz)\n\tif buf.off >= len(buf.buf) || end > len(buf.buf) {\n\t\tbuf.err = fmt.Errorf(\"string starting at %#x of size %#x is past the end of file, while %s\", startOff, sz, buf.ctx)\n\t\treturn \"\"\n\t}\n\treturn decodeUTF16(buf.buf[buf.off:end])\n}\n\n// readThreadList reads a thread list stream and adds the threads to the minidump.\nfunc readThreadList(mdmp *Minidump, buf *minidumpBuf) {\n\tthreadNum := buf.u32()\n\tif buf.err != nil {\n\t\treturn\n\t}\n\n\tmdmp.Threads = make([]Thread, threadNum)\n\n\tfor i := range mdmp.Threads {\n\t\tbuf.ctx = fmt.Sprintf(\"reading thread list entry %d\", i)\n\t\tthread := &mdmp.Threads[i]\n\n\t\tthread.ID = buf.u32()\n\t\tthread.SuspendCount = buf.u32()\n\t\tthread.PriorityClass = buf.u32()\n\t\tthread.Priority = buf.u32()\n\t\tthread.TEB = buf.u64()\n\t\tif buf.err != nil {\n\t\t\treturn\n\t\t}\n\n\t\treadMemoryDescriptor(mdmp, buf)                    // thread stack\n\t\t_, rawThreadContext := readLocationDescriptor(buf) // thread context\n\t\tthread.Context = *((*winutil.AMD64CONTEXT)(unsafe.Pointer(&rawThreadContext[0])))\n\t\tif buf.err != nil {\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// readModuleList reads a module list stream and adds the modules to the minidump.\nfunc readModuleList(mdmp *Minidump, buf *minidumpBuf) {\n\tmoduleNum := buf.u32()\n\tif buf.err != nil {\n\t\treturn\n\t}\n\n\tmdmp.Modules = make([]Module, moduleNum)\n\n\tfor i := range mdmp.Modules {\n\t\tbuf.ctx = fmt.Sprintf(\"reading module list entry %d\", i)\n\t\tmodule := &mdmp.Modules[i]\n\n\t\tmodule.BaseOfImage = buf.u64()\n\t\tmodule.SizeOfImage = buf.u32()\n\t\tmodule.Checksum = buf.u32()\n\t\tmodule.TimeDateStamp = buf.u32()\n\t\tnameOff := int(buf.u32())\n\n\t\tversionInfoVec := make([]uint32, unsafe.Sizeof(VSFixedFileInfo{})/unsafe.Sizeof(uint32(0)))\n\t\tfor j := range versionInfoVec {\n\t\t\tversionInfoVec[j] = buf.u32()\n\t\t}\n\n\t\tmodule.VersionInfo = *(*VSFixedFileInfo)(unsafe.Pointer(&versionInfoVec[0]))\n\n\t\t_, module.CVRecord = readLocationDescriptor(buf)\n\t\t_, module.MiscRecord = readLocationDescriptor(buf)\n\n\t\tif buf.err != nil {\n\t\t\treturn\n\t\t}\n\n\t\tnameBuf := minidumpBuf{buf: buf.buf, kind: \"file\", off: nameOff, err: nil, ctx: buf.ctx}\n\t\tmodule.Name = readString(&nameBuf)\n\t\tif nameBuf.err != nil {\n\t\t\tbuf.err = nameBuf.err\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// readMemory64List reads a _MINIDUMP_MEMORY64_LIST structure, containing\n// the description of the process memory.\n// See: https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ns-minidumpapiset-minidump_memory64_list\n// And: https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/ns-minidumpapiset-minidump_memory_descriptor\nfunc readMemory64List(mdmp *Minidump, buf *minidumpBuf, logfn func(fmt string, args ...any)) {\n\trangesNum := buf.u64()\n\tbaseOff := int(buf.u64())\n\tif buf.err != nil {\n\t\treturn\n\t}\n\n\tfor i := range rangesNum {\n\t\taddr := buf.u64()\n\t\tsz := buf.u64()\n\n\t\tend := baseOff + int(sz)\n\t\tif baseOff >= len(buf.buf) || end > len(buf.buf) {\n\t\t\tbuf.err = fmt.Errorf(\"memory range at %#x of size %#x is past the end of file, while %s\", baseOff, sz, buf.ctx)\n\t\t\treturn\n\t\t}\n\n\t\tmdmp.addMemory(addr, buf.buf[baseOff:end])\n\n\t\tif logfn != nil {\n\t\t\tlogfn(\"\\tMemory %d addr:%#x size:%#x FileOffset:%#x\", i, addr, sz, baseOff)\n\t\t}\n\n\t\tbaseOff = end\n\t}\n}\n\nfunc readMemoryInfoList(mdmp *Minidump, buf *minidumpBuf, logfn func(fmt string, args ...any)) {\n\tstartOff := buf.off\n\tsizeOfHeader := int(buf.u32())\n\tsizeOfEntry := int(buf.u32())\n\tnumEntries := buf.u64()\n\n\tbuf.off = startOff + sizeOfHeader\n\n\tmdmp.MemoryInfo = make([]MemoryInfo, numEntries)\n\n\tfor i := range mdmp.MemoryInfo {\n\t\tmemInfo := &mdmp.MemoryInfo[i]\n\t\tstartOff := buf.off\n\n\t\tmemInfo.Addr = buf.u64()\n\t\tbuf.u64() // allocation_base\n\n\t\tbuf.u32() // allocation_protection\n\t\tbuf.u32() // alignment\n\n\t\tmemInfo.Size = buf.u64()\n\n\t\tmemInfo.State = MemoryState(buf.u32())\n\t\tmemInfo.Protection = MemoryProtection(buf.u32())\n\t\tmemInfo.Type = MemoryType(buf.u32())\n\n\t\tif logfn != nil {\n\t\t\tlogfn(\"\\tMemoryInfo %d Addr:%#x Size:%#x %s %s %s\", i, memInfo.Addr, memInfo.Size, memInfo.State, memInfo.Protection, memInfo.Type)\n\t\t}\n\n\t\tbuf.off = startOff + sizeOfEntry\n\t}\n}\n\n// readMiscInfo reads the process_id from a MiscInfo stream.\nfunc readMiscInfo(mdmp *Minidump, buf *minidumpBuf) {\n\tbuf.u32() // size of info\n\tbuf.u32() // flags1\n\n\tmdmp.Pid = buf.u32() // process_id\n\t// there are more fields here, but we don't care about them\n}\n\n// readMemoryDescriptor reads a memory descriptor struct and adds it to the memory map of the minidump.\nfunc readMemoryDescriptor(mdmp *Minidump, buf *minidumpBuf) {\n\taddr := buf.u64()\n\tif buf.err != nil {\n\t\treturn\n\t}\n\t_, rawData := readLocationDescriptor(buf)\n\tif buf.err != nil {\n\t\treturn\n\t}\n\tmdmp.addMemory(addr, rawData)\n}\n\nfunc (mdmp *Minidump) addMemory(addr uint64, data []byte) {\n\tmdmp.MemoryRanges = append(mdmp.MemoryRanges, MemoryRange{addr, data})\n}\n"
  },
  {
    "path": "pkg/proc/core/windows_amd64_minidump.go",
    "content": "package core\n\nimport (\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/core/minidump\"\n\t\"github.com/go-delve/delve/pkg/proc/winutil\"\n)\n\nfunc readAMD64Minidump(minidumpPath, exePath string) (*process, proc.Thread, error) {\n\tvar logfn func(string, ...any)\n\tif logflags.Minidump() {\n\t\tlogfn = logflags.MinidumpLogger().Infof\n\t}\n\n\tmdmp, err := minidump.Open(minidumpPath, logfn)\n\tif err != nil {\n\t\tif _, isNotAMinidump := err.(minidump.ErrNotAMinidump); isNotAMinidump {\n\t\t\treturn nil, nil, ErrUnrecognizedFormat\n\t\t}\n\t\treturn nil, nil, err\n\t}\n\n\tmemory := &SplicedMemory{}\n\n\tfor i := range mdmp.MemoryRanges {\n\t\tm := &mdmp.MemoryRanges[i]\n\t\tmemory.Add(m, m.Addr, uint64(len(m.Data)))\n\t}\n\n\tentryPoint := uint64(0)\n\tif len(mdmp.Modules) > 0 {\n\t\tentryPoint = mdmp.Modules[0].BaseOfImage\n\t}\n\n\tp := &process{\n\t\tmem:         memory,\n\t\tThreads:     map[int]*thread{},\n\t\tbi:          proc.NewBinaryInfo(\"windows\", \"amd64\"),\n\t\tentryPoint:  entryPoint,\n\t\tbreakpoints: proc.NewBreakpointMap(),\n\t\tpid:         int(mdmp.Pid),\n\t}\n\n\tfor i := range mdmp.Threads {\n\t\tth := &mdmp.Threads[i]\n\t\tp.Threads[int(th.ID)] = &thread{&windowsAMD64Thread{th}, p, proc.CommonThread{}}\n\t}\n\tvar currentThread proc.Thread\n\tif len(mdmp.Threads) > 0 {\n\t\tcurrentThread = p.Threads[int(mdmp.Threads[0].ID)]\n\t}\n\treturn p, currentThread, nil\n}\n\ntype windowsAMD64Thread struct {\n\tth *minidump.Thread\n}\n\nfunc (th *windowsAMD64Thread) ThreadID() int {\n\treturn int(th.th.ID)\n}\n\nfunc (th *windowsAMD64Thread) Registers() (proc.Registers, error) {\n\treturn winutil.NewAMD64Registers(&th.th.Context, th.th.TEB), nil\n}\n"
  },
  {
    "path": "pkg/proc/debuginfod/debuginfod.go",
    "content": "package debuginfod\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"context\"\n\t\"os/exec\"\n\t\"slices\"\n\t\"strings\"\n\t\"time\"\n)\n\nconst debuginfodFind = \"debuginfod-find\"\nconst notificationThrottle time.Duration = 1 * time.Second\n\nfunc execFind(ctx context.Context, notify func(string), args ...string) (string, error) {\n\tif _, err := exec.LookPath(debuginfodFind); err != nil {\n\t\treturn \"\", err\n\t}\n\tif ctx == nil {\n\t\tctx = context.Background()\n\t}\n\tcmd := exec.CommandContext(ctx, debuginfodFind, args...)\n\tif notify != nil {\n\t\tcmd.Args = slices.Insert(cmd.Args, 1, \"--verbose\")\n\t\tstderr, err := cmd.StderrPipe()\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\ts := bufio.NewScanner(stderr)\n\t\ts.Split(func(data []byte, atEOF bool) (advance int, token []byte, err error) {\n\t\t\tif atEOF && len(data) == 0 {\n\t\t\t\treturn 0, nil, nil\n\t\t\t}\n\t\t\tif i := bytes.IndexAny(data, \"\\n\\r\"); i >= 0 {\n\t\t\t\treturn i + 1, dropCR(data[0:i]), nil\n\t\t\t}\n\t\t\tif atEOF {\n\t\t\t\treturn len(data), dropCR(data), nil\n\t\t\t}\n\t\t\treturn 0, nil, nil\n\t\t})\n\t\tgo func() {\n\t\t\tvar tlast time.Time\n\t\t\tfor s.Scan() {\n\t\t\t\tif time.Since(tlast) > notificationThrottle {\n\t\t\t\t\ttlast = time.Now()\n\t\t\t\t\tnotify(string(s.Text()))\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t}\n\tout, err := cmd.Output() // ignore stderr\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn strings.TrimSpace(string(out)), err\n}\n\nfunc dropCR(data []byte) []byte {\n\tr, _ := bytes.CutSuffix(data, []byte{'\\r'})\n\treturn r\n}\n\nfunc GetSource(buildid, filename string) (string, error) {\n\treturn execFind(context.Background(), nil, \"source\", buildid, filename)\n}\n\nfunc GetDebuginfo(ctx context.Context, notify func(string), buildid string) (string, error) {\n\treturn execFind(ctx, notify, \"debuginfo\", buildid)\n}\n"
  },
  {
    "path": "pkg/proc/disasm.go",
    "content": "package proc\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n)\n\n// AsmInstruction represents one assembly instruction.\ntype AsmInstruction struct {\n\tLoc        Location\n\tDestLoc    *Location\n\tBytes      []byte\n\tBreakpoint bool\n\tAtPC       bool\n\n\tSize int\n\tKind AsmInstructionKind\n\n\tInst archInst\n}\n\ntype AsmInstructionKind uint8\n\nconst (\n\tOtherInstruction AsmInstructionKind = iota\n\tCallInstruction\n\tRetInstruction\n\tJmpInstruction\n\tHardBreakInstruction\n)\n\n// IsCall is true if instr is a call instruction.\nfunc (instr *AsmInstruction) IsCall() bool {\n\treturn instr.Kind == CallInstruction\n}\n\n// IsRet is true if instr is a return instruction.\nfunc (instr *AsmInstruction) IsRet() bool {\n\treturn instr.Kind == RetInstruction\n}\n\n// IsJmp is true if instr is an unconditional jump instruction.\nfunc (instr *AsmInstruction) IsJmp() bool {\n\treturn instr.Kind == JmpInstruction\n}\n\n// IsHardBreak is true if instr is a hardcoded breakpoint instruction.\nfunc (instr *AsmInstruction) IsHardBreak() bool {\n\treturn instr.Kind == HardBreakInstruction\n}\n\ntype archInst interface {\n\tText(flavour AssemblyFlavour, pc uint64, symLookup func(uint64) (string, uint64)) string\n\tOpcodeEquals(op uint64) bool\n}\n\n// AssemblyFlavour is the assembly syntax to display.\ntype AssemblyFlavour int\n\nconst (\n\t// GNUFlavour will display GNU assembly syntax.\n\tGNUFlavour AssemblyFlavour = iota\n\t// IntelFlavour will display Intel assembly syntax.\n\tIntelFlavour\n\t// GoFlavour will display Go assembly syntax.\n\tGoFlavour\n)\n\ntype opcodeSeq []uint64\n\n// firstPCAfterPrologueDisassembly returns the address of the first\n// instruction after the prologue for function fn by disassembling fn and\n// matching the instructions against known split-stack prologue patterns.\n// If sameline is set firstPCAfterPrologueDisassembly will always return an\n// address associated with the same line as fn.Entry\nfunc firstPCAfterPrologueDisassembly(p Process, fn *Function, sameline bool) (uint64, error) {\n\tmem := p.Memory()\n\tbreakpoints := p.Breakpoints()\n\tbi := p.BinInfo()\n\ttext, err := disassemble(mem, nil, breakpoints, bi, fn.Entry, fn.End, false)\n\tif err != nil {\n\t\treturn fn.Entry, err\n\t}\n\n\tif len(text) == 0 {\n\t\treturn fn.Entry, nil\n\t}\n\n\tfor _, prologue := range p.BinInfo().Arch.prologues {\n\t\tif len(prologue) >= len(text) {\n\t\t\tcontinue\n\t\t}\n\t\tif checkPrologue(text, prologue) {\n\t\t\tr := &text[len(prologue)]\n\t\t\tif sameline {\n\t\t\t\tif r.Loc.Line != text[0].Loc.Line {\n\t\t\t\t\treturn fn.Entry, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn r.Loc.PC, nil\n\t\t}\n\t}\n\n\treturn fn.Entry, nil\n}\n\nfunc checkPrologue(s []AsmInstruction, prologuePattern opcodeSeq) bool {\n\tline := s[0].Loc.Line\n\tfor i, op := range prologuePattern {\n\t\tif !s[i].Inst.OpcodeEquals(op) || s[i].Loc.Line != line {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Disassemble disassembles target memory between startAddr and endAddr, marking\n// the current instruction being executed in goroutine g.\n// If currentGoroutine is set and thread is stopped at a CALL instruction Disassemble\n// will evaluate the argument of the CALL instruction using the thread's registers.\n// Be aware that the Bytes field of each returned instruction is a slice of a larger array of size startAddr - endAddr.\nfunc Disassemble(mem MemoryReadWriter, regs Registers, breakpoints *BreakpointMap, bi *BinaryInfo, startAddr, endAddr uint64) ([]AsmInstruction, error) {\n\tif startAddr > endAddr {\n\t\treturn nil, fmt.Errorf(\"start address(%x) should be less than end address(%x)\", startAddr, endAddr)\n\t}\n\treturn disassemble(mem, regs, breakpoints, bi, startAddr, endAddr, false)\n}\n\nfunc disassemble(memrw MemoryReadWriter, regs Registers, breakpoints *BreakpointMap, bi *BinaryInfo, startAddr, endAddr uint64, singleInstr bool) ([]AsmInstruction, error) {\n\tvar dregs *op.DwarfRegisters\n\tif regs != nil {\n\t\tdregs = bi.Arch.RegistersToDwarfRegisters(0, regs)\n\t}\n\n\tmem := make([]byte, int(endAddr-startAddr))\n\t_, err := memrw.ReadMemory(mem, startAddr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tr := make([]AsmInstruction, 0, len(mem)/bi.Arch.MaxInstructionLength())\n\tpc := startAddr\n\n\tvar curpc uint64\n\tif regs != nil {\n\t\tcurpc = regs.PC()\n\t}\n\n\tfor len(mem) > 0 {\n\t\tbp, atbp := breakpoints.M[pc]\n\t\tif atbp {\n\t\t\tcopy(mem, bp.OriginalData)\n\t\t}\n\n\t\tfile, line, fn := bi.PCToLine(pc)\n\n\t\tvar inst AsmInstruction\n\t\tinst.Loc = Location{PC: pc, File: file, Line: line, Fn: fn}\n\t\tinst.Breakpoint = atbp\n\t\tinst.AtPC = (regs != nil) && (curpc == pc)\n\n\t\tbi.Arch.asmDecode(&inst, mem, dregs, memrw, bi)\n\n\t\tr = append(r, inst)\n\n\t\tpc += uint64(inst.Size)\n\t\tmem = mem[inst.Size:]\n\n\t\tif singleInstr {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn r, nil\n}\n\n// Text will return the assembly instructions in human readable format according to\n// the flavour specified.\nfunc (instr *AsmInstruction) Text(flavour AssemblyFlavour, bi *BinaryInfo) string {\n\treturn instr.Inst.Text(flavour, instr.Loc.PC, bi.symLookup)\n}\n"
  },
  {
    "path": "pkg/proc/doc.go",
    "content": "// Package proc is a low-level package that provides methods to manipulate\n// the process we are debugging.\n//\n// proc implements all core functionality including:\n//\n//   - creating / attaching to a process\n//   - process manipulation (step, next, continue, halt)\n//   - methods to explore the memory of the process\npackage proc\n"
  },
  {
    "path": "pkg/proc/dump.go",
    "content": "package proc\n\nimport (\n\t\"bytes\"\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"sync\"\n\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/version\"\n)\n\nvar (\n\tErrMemoryMapNotSupported = errors.New(\"MemoryMap not supported\")\n)\n\n// DumpState represents the current state of a core dump in progress.\ntype DumpState struct {\n\tMutex sync.Mutex\n\n\tDumping  bool\n\tAllDone  bool\n\tCanceled bool\n\tDoneChan chan struct{}\n\n\tThreadsDone, ThreadsTotal int\n\tMemDone, MemTotal         uint64\n\n\tErr error\n}\n\n// DumpFlags is used to configure (*Target).Dump\ntype DumpFlags uint16\n\nconst (\n\tDumpPlatformIndependent DumpFlags = 1 << iota // always use platform-independent notes format\n)\n\n// MemoryMapEntry represent a memory mapping in the target process.\ntype MemoryMapEntry struct {\n\tAddr uint64\n\tSize uint64\n\n\tRead, Write, Exec bool\n\n\tFilename string\n\tOffset   uint64\n}\n\nfunc (state *DumpState) setErr(err error) {\n\tif err == nil {\n\t\treturn\n\t}\n\tstate.Mutex.Lock()\n\tif state.Err == nil {\n\t\tstate.Err = err\n\t}\n\tstate.Mutex.Unlock()\n}\n\nfunc (state *DumpState) setThreadsTotal(n int) {\n\tstate.Mutex.Lock()\n\tstate.ThreadsTotal = n\n\tstate.ThreadsDone = 0\n\tstate.Mutex.Unlock()\n}\n\nfunc (state *DumpState) threadDone() {\n\tstate.Mutex.Lock()\n\tstate.ThreadsDone++\n\tstate.Mutex.Unlock()\n}\n\nfunc (state *DumpState) setMemTotal(n uint64) {\n\tstate.Mutex.Lock()\n\tstate.MemTotal = n\n\tstate.Mutex.Unlock()\n}\n\nfunc (state *DumpState) memDone(delta uint64) {\n\tstate.Mutex.Lock()\n\tstate.MemDone += delta\n\tstate.Mutex.Unlock()\n}\n\nfunc (state *DumpState) isCanceled() bool {\n\tstate.Mutex.Lock()\n\tdefer state.Mutex.Unlock()\n\treturn state.Canceled\n}\n\n// Dump writes a core dump to out. State is updated as the core dump is written.\nfunc (t *Target) Dump(out elfwriter.WriteCloserSeeker, flags DumpFlags, state *DumpState) {\n\tdefer func() {\n\t\tstate.Mutex.Lock()\n\t\tif ierr := recover(); ierr != nil {\n\t\t\tstate.Err = newInternalError(ierr, 2)\n\t\t}\n\t\terr := out.Close()\n\t\tif state.Err == nil && err != nil {\n\t\t\tstate.Err = fmt.Errorf(\"error writing output file: %v\", err)\n\t\t}\n\t\tstate.Dumping = false\n\t\tstate.Mutex.Unlock()\n\t\tif state.DoneChan != nil {\n\t\t\tclose(state.DoneChan)\n\t\t}\n\t}()\n\n\tbi := t.BinInfo()\n\n\tvar fhdr elf.FileHeader\n\tfhdr.Class = elf.ELFCLASS64\n\tfhdr.Data = elf.ELFDATA2LSB\n\tfhdr.Version = elf.EV_CURRENT\n\n\tswitch bi.GOOS {\n\tcase \"linux\":\n\t\tfhdr.OSABI = elf.ELFOSABI_LINUX\n\tcase \"freebsd\":\n\t\tfhdr.OSABI = elf.ELFOSABI_FREEBSD\n\tdefault:\n\t\t// There is no OSABI value for windows or macOS because nobody generates ELF core dumps on those systems.\n\t\tfhdr.OSABI = 0xff\n\t}\n\n\tfhdr.Type = elf.ET_CORE\n\n\tswitch bi.Arch.Name {\n\tcase \"amd64\":\n\t\tfhdr.Machine = elf.EM_X86_64\n\tcase \"386\":\n\t\tfhdr.Machine = elf.EM_386\n\tcase \"arm64\":\n\t\tfhdr.Machine = elf.EM_AARCH64\n\tcase \"ppc64le\":\n\t\tfhdr.Machine = elf.EM_PPC64\n\tcase \"riscv64\":\n\t\tfhdr.Machine = elf.EM_RISCV\n\tcase \"loong64\":\n\t\tfhdr.Machine = elf.EM_LOONGARCH\n\tdefault:\n\t\tpanic(\"not implemented\")\n\t}\n\n\tfhdr.Entry = 0\n\n\tw := elfwriter.New(out, &fhdr)\n\n\tnotes := []elfwriter.Note{}\n\n\tentryPoint, err := t.EntryPoint()\n\tif err != nil {\n\t\tstate.setErr(err)\n\t\treturn\n\t}\n\n\tnotes = append(notes, elfwriter.Note{\n\t\tType: elfwriter.DelveHeaderNoteType,\n\t\tName: \"Delve Header\",\n\t\tData: fmt.Appendf(nil, \"%s/%s\\n%s\\n%s%d\\n%s%#x\\n\", bi.GOOS, bi.Arch.Name, version.DelveVersion.String(), elfwriter.DelveHeaderTargetPidPrefix, t.pid, elfwriter.DelveHeaderEntryPointPrefix, entryPoint),\n\t})\n\n\tthreads := t.ThreadList()\n\tstate.setThreadsTotal(len(threads))\n\n\tvar threadsDone bool\n\n\tif flags&DumpPlatformIndependent == 0 {\n\t\tthreadsDone, notes, err = t.proc.DumpProcessNotes(notes, state.threadDone)\n\t\tif err != nil {\n\t\t\tstate.setErr(err)\n\t\t\treturn\n\t\t}\n\t}\n\n\tif !threadsDone {\n\t\tfor _, th := range threads {\n\t\t\tif w.Err != nil {\n\t\t\t\tstate.setErr(fmt.Errorf(\"error writing to output file: %v\", w.Err))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif state.isCanceled() {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tnotes = t.dumpThreadNotes(notes, state, th)\n\t\t\tstate.threadDone()\n\t\t}\n\t}\n\n\tmemmap, err := t.proc.MemoryMap()\n\tif err != nil {\n\t\tstate.setErr(err)\n\t\treturn\n\t}\n\n\tmemmapFilter := make([]MemoryMapEntry, 0, len(memmap))\n\tmemtot := uint64(0)\n\tfor i := range memmap {\n\t\tmme := &memmap[i]\n\t\tif t.shouldDumpMemory(mme) {\n\t\t\tmemmapFilter = append(memmapFilter, *mme)\n\t\t\tmemtot += mme.Size\n\t\t}\n\t}\n\n\tstate.setMemTotal(memtot)\n\n\tfor i := range memmapFilter {\n\t\tmme := &memmapFilter[i]\n\t\tif w.Err != nil {\n\t\t\tstate.setErr(fmt.Errorf(\"error writing to output file: %v\", w.Err))\n\t\t\treturn\n\t\t}\n\t\tif state.isCanceled() {\n\t\t\treturn\n\t\t}\n\t\tt.dumpMemory(state, w, mme)\n\t}\n\n\tnotesProg := w.WriteNotes(notes)\n\tw.Progs = append(w.Progs, notesProg)\n\tw.WriteProgramHeaders()\n\tif w.Err != nil {\n\t\tstate.setErr(fmt.Errorf(\"error writing to output file: %v\", w.Err))\n\t}\n\tstate.Mutex.Lock()\n\tstate.AllDone = true\n\tstate.Mutex.Unlock()\n}\n\n// dumpThreadNotes appends notes describing a thread (thread id and its\n// registers) using a platform-independent format.\nfunc (t *Target) dumpThreadNotes(notes []elfwriter.Note, state *DumpState, th Thread) []elfwriter.Note {\n\t// If the backend doesn't provide a way to dump a thread we use a custom format for the note:\n\t// - thread_id (8 bytes)\n\t// - pc value (8 bytes)\n\t// - sp value (8 bytes)\n\t// - bp value (8 bytes)\n\t// - tls value (8 bytes)\n\t// - has_gaddr (1 byte)\n\t// - gaddr value (8 bytes)\n\t// - num_registers (4 bytes)\n\t// Followed by a list of num_register, each as follows:\n\t// - register_name_len (2 bytes)\n\t// - register_name (register_name_len bytes)\n\t// - register_data_len (2 bytes)\n\t// - register_data (register_data_len bytes)\n\n\tbuf := new(bytes.Buffer)\n\t_ = binary.Write(buf, binary.LittleEndian, uint64(th.ThreadID()))\n\n\tregs, err := th.Registers()\n\tif err != nil {\n\t\tstate.setErr(err)\n\t\treturn notes\n\t}\n\n\tfor _, specialReg := range []uint64{regs.PC(), regs.SP(), regs.BP(), regs.TLS()} {\n\t\tbinary.Write(buf, binary.LittleEndian, specialReg)\n\t}\n\n\tgaddr, hasGaddr := regs.GAddr()\n\tbinary.Write(buf, binary.LittleEndian, hasGaddr)\n\tbinary.Write(buf, binary.LittleEndian, gaddr)\n\n\tregsv, err := regs.Slice(true)\n\tif err != nil {\n\t\tstate.setErr(err)\n\t\treturn notes\n\t}\n\n\tbinary.Write(buf, binary.LittleEndian, uint32(len(regsv)))\n\n\tfor _, reg := range regsv {\n\t\tbinary.Write(buf, binary.LittleEndian, uint16(len(reg.Name)))\n\t\tbuf.WriteString(reg.Name)\n\t\tif reg.Reg.Bytes != nil {\n\t\t\tbinary.Write(buf, binary.LittleEndian, uint16(len(reg.Reg.Bytes)))\n\t\t\tbuf.Write(reg.Reg.Bytes)\n\t\t} else {\n\t\t\tbinary.Write(buf, binary.LittleEndian, uint16(8))\n\t\t\tbinary.Write(buf, binary.LittleEndian, reg.Reg.Uint64Val)\n\t\t}\n\t}\n\n\treturn append(notes, elfwriter.Note{\n\t\tType: elfwriter.DelveThreadNodeType,\n\t\tName: \"\",\n\t\tData: buf.Bytes(),\n\t})\n}\n\nfunc (t *Target) dumpMemory(state *DumpState, w *elfwriter.Writer, mme *MemoryMapEntry) {\n\tvar flags elf.ProgFlag\n\tif mme.Read {\n\t\tflags |= elf.PF_R\n\t}\n\tif mme.Write {\n\t\tflags |= elf.PF_W\n\t}\n\tif mme.Exec {\n\t\tflags |= elf.PF_X\n\t}\n\n\tw.Progs = append(w.Progs, &elf.ProgHeader{\n\t\tType:   elf.PT_LOAD,\n\t\tFlags:  flags,\n\t\tOff:    uint64(w.Here()),\n\t\tVaddr:  mme.Addr,\n\t\tPaddr:  0,\n\t\tFilesz: mme.Size,\n\t\tMemsz:  mme.Size,\n\t\tAlign:  0,\n\t})\n\n\tbuf := make([]byte, 1024*1024)\n\taddr := mme.Addr\n\tsz := mme.Size\n\tmem := t.Memory()\n\n\tfor sz > 0 {\n\t\tif w.Err != nil {\n\t\t\tstate.setErr(fmt.Errorf(\"error writing to output file: %v\", w.Err))\n\t\t\treturn\n\t\t}\n\t\tif state.isCanceled() {\n\t\t\treturn\n\t\t}\n\t\tchunk := buf\n\t\tif uint64(len(chunk)) > sz {\n\t\t\tchunk = chunk[:sz]\n\t\t}\n\t\tn, err := mem.ReadMemory(chunk, addr)\n\t\tfor i := n; i < len(chunk); i++ {\n\t\t\tchunk[i] = 0\n\t\t}\n\t\t// Errors and short reads are ignored, the most likely reason is that\n\t\t// (*ProcessInternal).MemoryMap gave us a bad mapping that can't be read\n\t\t// and the behavior that's maximally useful to the user is to generate an\n\t\t// incomplete dump.\n\t\tw.Write(chunk)\n\t\taddr += uint64(len(chunk))\n\t\tsz -= uint64(len(chunk))\n\t\tif err == nil {\n\t\t\tstate.memDone(uint64(len(chunk)))\n\t\t}\n\t}\n}\n\nfunc (t *Target) shouldDumpMemory(mme *MemoryMapEntry) bool {\n\tif !mme.Read {\n\t\treturn false\n\t}\n\texeimg := t.BinInfo().Images[0]\n\tif mme.Write || mme.Filename == \"\" || mme.Filename != exeimg.Path {\n\t\treturn true\n\t}\n\tisgo := false\n\tfor _, cu := range exeimg.compileUnits {\n\t\tif cu.isgo {\n\t\t\tisgo = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !isgo {\n\t\treturn true\n\t}\n\n\texe, err := elf.Open(exeimg.Path)\n\tif err != nil {\n\t\treturn true\n\t}\n\n\tif exe.Type != elf.ET_EXEC {\n\t\treturn true\n\t}\n\n\tfor _, prog := range exe.Progs {\n\t\tif prog.Type == elf.PT_LOAD && (prog.Flags&elf.PF_W == 0) && (prog.Flags&elf.PF_R != 0) && (prog.Vaddr == mme.Addr) && (prog.Memsz == mme.Size) && (prog.Off == mme.Offset) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\ntype internalError struct {\n\tErr   any\n\tStack []internalErrorFrame\n}\n\ntype internalErrorFrame struct {\n\tPc   uintptr\n\tFunc string\n\tFile string\n\tLine int\n}\n\nfunc newInternalError(ierr any, skip int) *internalError {\n\tr := &internalError{ierr, nil}\n\tfor i := skip; ; i++ {\n\t\tpc, file, line, ok := runtime.Caller(i)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tfname := \"<unknown>\"\n\t\tfn := runtime.FuncForPC(pc)\n\t\tif fn != nil {\n\t\t\tfname = fn.Name()\n\t\t}\n\t\tr.Stack = append(r.Stack, internalErrorFrame{pc, fname, file, line})\n\t}\n\treturn r\n}\n\nfunc (err *internalError) Error() string {\n\tvar out bytes.Buffer\n\tfmt.Fprintf(&out, \"Internal debugger error: %v\\n\", err.Err)\n\tfor _, frame := range err.Stack {\n\t\tfmt.Fprintf(&out, \"%s (%#x)\\n\\t%s:%d\\n\", frame.Func, frame.Pc, frame.File, frame.Line)\n\t}\n\treturn out.String()\n}\n"
  },
  {
    "path": "pkg/proc/dwarf_export_test.go",
    "content": "package proc\n\nimport (\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"golang.org/x/arch/x86/x86asm\"\n)\n\n// PackageVars returns bi.packageVars (for tests)\nfunc (bi *BinaryInfo) PackageVars() []packageVar {\n\treturn bi.packageVars\n}\n\nfunc NewCompositeMemory(p *Target, pieces []op.Piece, base uint64) (*compositeMemory, error) {\n\tregs, err := p.CurrentThread().Registers()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tarch := p.BinInfo().Arch\n\tdwarfregs := arch.RegistersToDwarfRegisters(0, regs)\n\tdwarfregs.ChangeFunc = p.CurrentThread().SetReg\n\n\tmem, err := newCompositeMemory(p.Memory(), arch, *dwarfregs, pieces, 0)\n\tif mem != nil {\n\t\tmem.base = base\n\t}\n\treturn mem, err\n}\n\nfunc IsJNZ(inst archInst) bool {\n\treturn inst.(*x86Inst).Op == x86asm.JNE\n}\n\n// HasDebugPinner returns true if the target has runtime.debugPinner.\nfunc (bi *BinaryInfo) HasDebugPinner() bool {\n\treturn bi.hasDebugPinner()\n}\n\n// DebugPinCount returns the number of addresses pinned during the last\n// function call injection.\nfunc DebugPinCount() int {\n\treturn debugPinCount\n}\n"
  },
  {
    "path": "pkg/proc/dwarf_expr_test.go",
    "content": "// Tests for loading variables that have complex location expressions. They\n// are only produced for optimized code (for both Go and C) therefore we can\n// not get the compiler to produce them reliably enough for tests.\n\npackage proc_test\n\nimport (\n\t\"bytes\"\n\t\"debug/dwarf\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"testing\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/dwarfbuilder\"\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\nfunc ptrSizeByRuntimeArch() int {\n\treturn int(unsafe.Sizeof(uintptr(0)))\n}\n\nfunc fakeCFA() uint64 {\n\tptrSize := ptrSizeByRuntimeArch()\n\tif ptrSize == 8 {\n\t\treturn 0xc420051d00\n\t}\n\tif ptrSize == 4 {\n\t\treturn 0xc4251d00\n\t}\n\tpanic(fmt.Errorf(\"not support ptr size %d\", ptrSize))\n}\n\nfunc fakeBinaryInfo(t *testing.T, dwb *dwarfbuilder.Builder) (*proc.BinaryInfo, *dwarf.Data) {\n\tabbrev, aranges, frame, info, line, pubnames, ranges, str, loc, err := dwb.Build()\n\tassertNoError(err, t, \"dwarfbuilder.Build\")\n\tdwdata, err := dwarf.New(abbrev, aranges, frame, info, line, pubnames, ranges, str)\n\tassertNoError(err, t, \"creating dwarf\")\n\n\tbi := proc.NewBinaryInfo(\"linux\", \"amd64\")\n\tbi.LoadImageFromData(dwdata, frame, line, loc)\n\n\treturn bi, dwdata\n}\n\n// fakeMemory implements proc.MemoryReadWriter by reading from a byte slice.\n// Byte 0 of \"data\"  is at address \"base\".\ntype fakeMemory struct {\n\tbase uint64\n\tdata []byte\n}\n\nfunc newFakeMemory(base uint64, contents ...any) *fakeMemory {\n\tmem := &fakeMemory{base: base}\n\tvar buf bytes.Buffer\n\tfor _, x := range contents {\n\t\tbinary.Write(&buf, binary.LittleEndian, x)\n\t}\n\tmem.data = buf.Bytes()\n\treturn mem\n}\n\nfunc (mem *fakeMemory) ReadMemory(data []byte, addr uint64) (int, error) {\n\tif addr < mem.base {\n\t\treturn 0, fmt.Errorf(\"read out of bounds %d %#x\", len(data), addr)\n\t}\n\tstart := addr - mem.base\n\tend := uint64(len(data)) + start\n\tif end > uint64(len(mem.data)) {\n\t\tpanic(fmt.Errorf(\"read out of bounds %d %#x\", len(data), addr))\n\t}\n\tcopy(data, mem.data[start:end])\n\treturn len(data), nil\n}\n\nfunc (mem *fakeMemory) WriteMemory(addr uint64, data []byte) (int, error) {\n\tif addr < mem.base {\n\t\treturn 0, fmt.Errorf(\"write out of bounds %d %#x\", len(data), addr)\n\t}\n\tstart := addr - mem.base\n\tend := uint64(len(data)) + start\n\tif end > uint64(len(mem.data)) {\n\t\tpanic(fmt.Errorf(\"write out of bounds %d %#x\", len(data), addr))\n\t}\n\tcopy(mem.data[start:end], data)\n\treturn len(data), nil\n}\n\nfunc uintExprCheck(t *testing.T, scope *proc.EvalScope, expr string, tgt uint64) {\n\tthevar, err := scope.EvalExpression(expr, normalLoadConfig)\n\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s)\", expr))\n\tif thevar.Unreadable != nil {\n\t\tt.Errorf(\"variable %q unreadable: %v\", expr, thevar.Unreadable)\n\t} else {\n\t\tif v, _ := constant.Uint64Val(thevar.Value); v != tgt {\n\t\t\tt.Errorf(\"expected value %x got %x for %q\", tgt, v, expr)\n\t\t}\n\t}\n}\n\nfunc fakeScope(mem proc.MemoryReadWriter, regs *op.DwarfRegisters, bi *proc.BinaryInfo, fn *proc.Function) *proc.EvalScope {\n\treturn &proc.EvalScope{Location: proc.Location{PC: 0x40100, Fn: fn}, Regs: *regs, Mem: mem, BinInfo: bi}\n}\n\nfunc dwarfExprCheck(t *testing.T, scope *proc.EvalScope, testCases map[string]uint16) {\n\tfor name, value := range testCases {\n\t\tuintExprCheck(t, scope, name, uint64(value))\n\t}\n}\n\nfunc exprToStringCheck(t *testing.T, scope *proc.EvalScope, exprToStringCheck map[string]string) {\n\tfor name, expr := range exprToStringCheck {\n\t\tthevar, err := scope.EvalExpression(name, normalLoadConfig)\n\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s)\", name))\n\t\tout := thevar.LocationExpr.String()\n\t\tt.Logf(\"%q -> %q\\n\", name, out)\n\t\tif out != expr {\n\t\t\tt.Errorf(\"%q expected expression: %q got %q\", name, expr, out)\n\t\t}\n\t}\n}\n\nfunc dwarfRegisters(bi *proc.BinaryInfo, regs *linutil.AMD64Registers) *op.DwarfRegisters {\n\ta := proc.AMD64Arch(\"linux\")\n\tso := bi.PCToImage(regs.PC())\n\tdwarfRegs := a.RegistersToDwarfRegisters(so.StaticBase, regs)\n\tdwarfRegs.CFA = int64(fakeCFA())\n\tdwarfRegs.FrameBase = int64(fakeCFA())\n\treturn dwarfRegs\n}\n\nfunc TestDwarfExprRegisters(t *testing.T) {\n\tt.Parallel()\n\n\ttestCases := map[string]uint16{\n\t\t\"a\": 0x1234,\n\t\t\"b\": 0x4321,\n\t\t\"c\": 0x2143,\n\t}\n\n\tdwb := dwarfbuilder.New()\n\n\tuint16off := dwb.AddBaseType(\"uint16\", dwarfbuilder.DW_ATE_unsigned, 2)\n\n\tdwb.AddSubprogram(\"main.main\", 0x40100, 0x41000)\n\tdwb.Attr(dwarf.AttrFrameBase, dwarfbuilder.LocationBlock(op.DW_OP_call_frame_cfa))\n\tdwb.AddVariable(\"a\", uint16off, dwarfbuilder.LocationBlock(op.DW_OP_reg0))\n\tdwb.AddVariable(\"b\", uint16off, dwarfbuilder.LocationBlock(op.DW_OP_fbreg, int(8)))\n\tdwb.AddVariable(\"c\", uint16off, dwarfbuilder.LocationBlock(op.DW_OP_regx, int(1)))\n\tdwb.TagClose()\n\n\tbi, _ := fakeBinaryInfo(t, dwb)\n\n\tmainfn := bi.LookupFunc()[\"main.main\"][0]\n\tmem := newFakeMemory(fakeCFA(), uint64(0), uint64(testCases[\"b\"]))\n\tregs := linutil.AMD64Registers{Regs: &linutil.AMD64PtraceRegs{}}\n\tregs.Regs.Rax = uint64(testCases[\"a\"])\n\tregs.Regs.Rdx = uint64(testCases[\"c\"])\n\n\tdwarfExprCheck(t, fakeScope(mem, dwarfRegisters(bi, &regs), bi, mainfn), testCases)\n}\n\nfunc TestDwarfExprComposite(t *testing.T) {\n\tt.Parallel()\n\ttestCases := map[string]uint16{\n\t\t\"pair.k\":  0x8765,\n\t\t\"pair.v\":  0x5678,\n\t\t\"n\":       42,\n\t\t\"pair2.k\": 0x8765,\n\t\t\"pair2.v\": 0,\n\t}\n\n\ttestCasesExprToString := map[string]string{\n\t\t\"pair\":  \"[block] DW_OP_reg2(Rcx) DW_OP_piece 0x2 DW_OP_call_frame_cfa DW_OP_consts 0x10 DW_OP_plus DW_OP_piece 0x2 \",\n\t\t\"n\":     \"[block] DW_OP_reg3(Rbx) \",\n\t\t\"pair2\": \"[block] DW_OP_reg2(Rcx) DW_OP_piece 0x2 DW_OP_piece 0x2 \",\n\t}\n\n\tconst stringVal = \"this is a string\"\n\n\tdwb := dwarfbuilder.New()\n\n\tuint16off := dwb.AddBaseType(\"uint16\", dwarfbuilder.DW_ATE_unsigned, 2)\n\tintoff := dwb.AddBaseType(\"int\", dwarfbuilder.DW_ATE_signed, 8)\n\n\tbyteoff := dwb.AddBaseType(\"uint8\", dwarfbuilder.DW_ATE_unsigned, 1)\n\n\tbyteptroff := dwb.AddPointerType(\"*uint8\", byteoff)\n\n\tpairoff := dwb.AddStructType(\"main.pair\", 4)\n\tdwb.Attr(godwarf.AttrGoKind, uint8(25))\n\tdwb.AddMember(\"k\", uint16off, dwarfbuilder.LocationBlock(op.DW_OP_plus_uconst, uint(0)))\n\tdwb.AddMember(\"v\", uint16off, dwarfbuilder.LocationBlock(op.DW_OP_plus_uconst, uint(2)))\n\tdwb.TagClose()\n\n\tstringoff := dwb.AddStructType(\"string\", 16)\n\tdwb.Attr(godwarf.AttrGoKind, uint8(24))\n\tdwb.AddMember(\"str\", byteptroff, dwarfbuilder.LocationBlock(op.DW_OP_plus_uconst, uint(0)))\n\tdwb.AddMember(\"len\", intoff, dwarfbuilder.LocationBlock(op.DW_OP_plus_uconst, uint(8)))\n\tdwb.TagClose()\n\n\tdwb.AddSubprogram(\"main.main\", 0x40100, 0x41000)\n\tdwb.AddVariable(\"pair\", pairoff, dwarfbuilder.LocationBlock(\n\t\top.DW_OP_reg2, op.DW_OP_piece, uint(2),\n\t\top.DW_OP_call_frame_cfa, op.DW_OP_consts, int(16), op.DW_OP_plus, op.DW_OP_piece, uint(2)))\n\tdwb.AddVariable(\"s\", stringoff, dwarfbuilder.LocationBlock(\n\t\top.DW_OP_reg1, op.DW_OP_piece, uint(8),\n\t\top.DW_OP_reg0, op.DW_OP_piece, uint(8)))\n\tdwb.AddVariable(\"n\", intoff, dwarfbuilder.LocationBlock(op.DW_OP_reg3))\n\tdwb.AddVariable(\"pair2\", pairoff, dwarfbuilder.LocationBlock(\n\t\top.DW_OP_reg2, op.DW_OP_piece, uint(2),\n\t\top.DW_OP_piece, uint(2)))\n\tdwb.TagClose()\n\n\tbi, _ := fakeBinaryInfo(t, dwb)\n\n\tmainfn := bi.LookupFunc()[\"main.main\"][0]\n\n\tmem := newFakeMemory(fakeCFA(), uint64(0), uint64(0), testCases[\"pair.v\"], []byte(stringVal))\n\tvar regs linutil.AMD64Registers\n\tregs.Regs = &linutil.AMD64PtraceRegs{}\n\tregs.Regs.Rax = uint64(len(stringVal))\n\tregs.Regs.Rdx = fakeCFA() + 18\n\tregs.Regs.Rcx = uint64(testCases[\"pair.k\"])\n\tregs.Regs.Rbx = uint64(testCases[\"n\"])\n\n\tdwarfRegs := dwarfRegisters(bi, &regs)\n\tvar changeCalls []string\n\tdwarfRegs.ChangeFunc = func(regNum uint64, reg *op.DwarfRegister) error {\n\t\tt.Logf(\"SetReg(%d, %x)\", regNum, reg.Bytes)\n\t\tchangeCalls = append(changeCalls, fmt.Sprintf(\"%d - %x\", regNum, reg.Bytes))\n\t\treturn nil\n\t}\n\n\tscope := fakeScope(mem, dwarfRegs, bi, mainfn)\n\n\tdwarfExprCheck(t, scope, testCases)\n\texprToStringCheck(t, scope, testCasesExprToString)\n\n\tthevar, err := scope.EvalExpression(\"s\", normalLoadConfig)\n\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s)\", \"s\"))\n\tif thevar.Unreadable != nil {\n\t\tt.Errorf(\"variable \\\"s\\\" unreadable: %v\", thevar.Unreadable)\n\t} else {\n\t\tif v := constant.StringVal(thevar.Value); v != stringVal {\n\t\t\tt.Errorf(\"expected value %q got %q\", stringVal, v)\n\t\t}\n\t}\n\n\t// Test writes to composite memory\n\n\tassertNoError(scope.SetVariable(\"n\", \"47\"), t, \"SetVariable(n, 47)\")\n\tassertNoError(scope.SetVariable(\"pair.k\", \"12\"), t, \"SetVariable(pair.k, 12)\")\n\tassertNoError(scope.SetVariable(\"pair.v\", \"13\"), t, \"SetVariable(pair.v, 13)\")\n\n\tfor i := range changeCalls {\n\t\tt.Logf(\"%q\\n\", changeCalls[i])\n\t}\n\n\tif len(changeCalls) != 2 {\n\t\tt.Errorf(\"wrong number of calls to SetReg\")\n\t}\n\tif changeCalls[0] != \"3 - 2f00000000000000\" {\n\t\tt.Errorf(\"wrong call to SetReg (Rbx)\")\n\t}\n\tif changeCalls[1] != \"2 - 0c00000000000000\" {\n\t\tt.Errorf(\"wrong call to SetReg (Rcx)\")\n\t}\n\tif mem.data[0x10] != 13 || mem.data[0x11] != 0x00 {\n\t\tt.Errorf(\"memory was not written %v\", mem.data[:2])\n\t}\n}\n\nfunc TestDwarfExprLoclist(t *testing.T) {\n\tt.Parallel()\n\tconst before = 0x1234\n\tconst after = 0x4321\n\n\tdwb := dwarfbuilder.New()\n\n\tuint16off := dwb.AddBaseType(\"uint16\", dwarfbuilder.DW_ATE_unsigned, 2)\n\n\tdwb.AddSubprogram(\"main.main\", 0x40100, 0x41000)\n\tdwb.AddVariable(\"a\", uint16off, []dwarfbuilder.LocEntry{\n\t\t{Lowpc: 0x40100, Highpc: 0x40700, Loc: dwarfbuilder.LocationBlock(op.DW_OP_call_frame_cfa)},\n\t\t{Lowpc: 0x40700, Highpc: 0x41000, Loc: dwarfbuilder.LocationBlock(op.DW_OP_call_frame_cfa, op.DW_OP_consts, int(2), op.DW_OP_plus)},\n\t})\n\tdwb.TagClose()\n\n\tbi, _ := fakeBinaryInfo(t, dwb)\n\n\tmainfn := bi.LookupFunc()[\"main.main\"][0]\n\n\tmem := newFakeMemory(fakeCFA(), uint16(before), uint16(after))\n\tconst PC = 0x40100\n\tregs := linutil.AMD64Registers{Regs: &linutil.AMD64PtraceRegs{Rip: PC}}\n\n\tscope := &proc.EvalScope{Location: proc.Location{PC: PC, Fn: mainfn}, Regs: *dwarfRegisters(bi, &regs), Mem: mem, BinInfo: bi}\n\n\tuintExprCheck(t, scope, \"a\", before)\n\tscope.PC = 0x40800\n\tscope.Regs.Reg(scope.Regs.PCRegNum).Uint64Val = scope.PC\n\tuintExprCheck(t, scope, \"a\", after)\n}\n\nfunc TestIssue1419(t *testing.T) {\n\tt.Parallel()\n\t// trying to read a slice variable with a location list that tries to read\n\t// from registers we don't have should not cause a panic.\n\n\tdwb := dwarfbuilder.New()\n\n\tuint64off := dwb.AddBaseType(\"uint64\", dwarfbuilder.DW_ATE_unsigned, 8)\n\tintoff := dwb.AddBaseType(\"int\", dwarfbuilder.DW_ATE_signed, 8)\n\tintptroff := dwb.AddPointerType(\"*int\", intoff)\n\n\tsliceoff := dwb.AddStructType(\"[]int\", 24)\n\tdwb.Attr(godwarf.AttrGoKind, uint8(23))\n\tdwb.AddMember(\"array\", intptroff, dwarfbuilder.LocationBlock(op.DW_OP_plus_uconst, uint(0)))\n\tdwb.AddMember(\"len\", uint64off, dwarfbuilder.LocationBlock(op.DW_OP_plus_uconst, uint(8)))\n\tdwb.AddMember(\"cap\", uint64off, dwarfbuilder.LocationBlock(op.DW_OP_plus_uconst, uint(16)))\n\tdwb.TagClose()\n\n\tdwb.AddSubprogram(\"main.main\", 0x40100, 0x41000)\n\tdwb.AddVariable(\"a\", sliceoff, dwarfbuilder.LocationBlock(op.DW_OP_reg2, op.DW_OP_piece, uint(8), op.DW_OP_reg2, op.DW_OP_piece, uint(8), op.DW_OP_reg2, op.DW_OP_piece, uint(8)))\n\tdwb.TagClose()\n\n\tbi, _ := fakeBinaryInfo(t, dwb)\n\n\tmainfn := bi.LookupFunc()[\"main.main\"][0]\n\n\tmem := newFakeMemory(fakeCFA())\n\n\tscope := &proc.EvalScope{Location: proc.Location{PC: 0x40100, Fn: mainfn}, Regs: op.DwarfRegisters{}, Mem: mem, BinInfo: bi}\n\n\tva, err := scope.EvalExpression(\"a\", normalLoadConfig)\n\tassertNoError(err, t, \"EvalExpression(a)\")\n\tt.Logf(\"%#x\\n\", va.Addr)\n\tt.Logf(\"%v\", va)\n\tif va.Unreadable == nil {\n\t\tt.Fatalf(\"expected 'a' to be unreadable but it wasn't\")\n\t}\n\tif va.Unreadable.Error() != \"could not read 8 bytes from register 2 (size: 0)\" {\n\t\tt.Fatalf(\"wrong unreadable reason for variable 'a': %v\", va.Unreadable)\n\t}\n}\n\nfunc TestLocationCovers(t *testing.T) {\n\tt.Parallel()\n\tdwb := dwarfbuilder.New()\n\n\tuint16off := dwb.AddBaseType(\"uint16\", dwarfbuilder.DW_ATE_unsigned, 2)\n\n\tdwb.AddCompileUnit(\"main\", 0x0)\n\tdwb.AddSubprogram(\"main.main\", 0x40100, 0x41000)\n\taOff := dwb.AddVariable(\"a\", uint16off, []dwarfbuilder.LocEntry{\n\t\t{Lowpc: 0x40100, Highpc: 0x40700, Loc: dwarfbuilder.LocationBlock(op.DW_OP_call_frame_cfa)},\n\t\t{Lowpc: 0x40700, Highpc: 0x41000, Loc: dwarfbuilder.LocationBlock(op.DW_OP_call_frame_cfa, op.DW_OP_consts, int(2), op.DW_OP_plus)},\n\t})\n\tdwb.TagClose()\n\tdwb.TagClose()\n\n\tbi, dwdata := fakeBinaryInfo(t, dwb)\n\n\tdwrdr := dwdata.Reader()\n\tdwrdr.Seek(aOff)\n\taEntry, err := dwrdr.Next()\n\tassertNoError(err, t, \"reading 'a' entry\")\n\tranges, err := bi.LocationCovers(aEntry, dwarf.AttrLocation)\n\tassertNoError(err, t, \"LocationCovers\")\n\tt.Logf(\"%x\", ranges)\n\tif fmt.Sprintf(\"%x\", ranges) != \"[[40100 40700] [40700 41000]]\" {\n\t\tt.Error(\"wrong value returned by LocationCover\")\n\t}\n}\n\nfunc TestIssue1636_InlineWithoutOrigin(t *testing.T) {\n\tt.Parallel()\n\t// Gcc (specifically GNU C++11 6.3.0) will emit DW_TAG_inlined_subroutine\n\t// without a DW_AT_abstract_origin or a name. What is an inlined subroutine\n\t// without a reference to an abstract origin or even a name? Regardless,\n\t// Delve shouldn't crash.\n\tdwb := dwarfbuilder.New()\n\tdwb.AddCompileUnit(\"main\", 0x0)\n\tdwb.AddSubprogram(\"main.main\", 0x40100, 0x41000)\n\tdwb.TagOpen(dwarf.TagInlinedSubroutine, \"\")\n\tdwb.TagClose()\n\tdwb.TagClose()\n\tdwb.TagClose()\n\tfakeBinaryInfo(t, dwb)\n}\n\nfunc TestUnsupportedType(t *testing.T) {\n\tt.Parallel()\n\t// Tests that reading an unsupported type does not cause an error\n\tdwb := dwarfbuilder.New()\n\tdwb.AddCompileUnit(\"main\", 0x0)\n\toff := dwb.TagOpen(dwarf.TagReferenceType, \"blah\")\n\tdwb.TagClose()\n\tdwb.TagClose()\n\t_, dw := fakeBinaryInfo(t, dwb)\n\t_, err := godwarf.ReadType(dw, 0, off, make(map[dwarf.Offset]godwarf.Type))\n\tif err != nil {\n\t\tt.Errorf(\"unexpected error reading unsupported type: %#v\", err)\n\t}\n}\n\nfunc TestNestedCompileUnts(t *testing.T) {\n\tt.Parallel()\n\t// Tests that a compile unit with a nested entry that we don't care about\n\t// (such as a DW_TAG_namespace) is read fully.\n\tdwb := dwarfbuilder.New()\n\tdwb.AddCompileUnit(\"main\", 0x0)\n\tdwb.TagOpen(dwarf.TagNamespace, \"namespace\")\n\tdwb.AddVariable(\"var1\", 0x0, uint64(0x0))\n\tdwb.TagClose()\n\tdwb.AddVariable(\"var2\", 0x0, uint64(0x0))\n\tdwb.TagClose()\n\tbi, _ := fakeBinaryInfo(t, dwb)\n\tif n := len(bi.PackageVars()); n != 2 {\n\t\tt.Errorf(\"expected 2 variables, got %d\", n)\n\t}\n}\n\nfunc TestAbstractOriginDefinedAfterUse(t *testing.T) {\n\tt.Parallel()\n\t// Tests that an abstract origin entry can appear after its uses.\n\tdwb := dwarfbuilder.New()\n\tdwb.AddCompileUnit(\"main\", 0x0)\n\n\t// Concrete implementation\n\tdwb.TagOpen(dwarf.TagSubprogram, \"\")\n\toriginRef1 := dwb.Attr(dwarf.AttrAbstractOrigin, dwarf.Offset(0))\n\tdwb.Attr(dwarf.AttrLowpc, dwarfbuilder.Address(0x40100))\n\tdwb.Attr(dwarf.AttrHighpc, dwarfbuilder.Address(0x41000))\n\tdwb.TagClose()\n\n\t// Inlined call\n\tdwb.AddSubprogram(\"callingFn\", 0x41100, 0x42000)\n\tdwb.TagOpen(dwarf.TagInlinedSubroutine, \"\")\n\toriginRef2 := dwb.Attr(dwarf.AttrAbstractOrigin, dwarf.Offset(0))\n\tdwb.Attr(dwarf.AttrLowpc, dwarfbuilder.Address(0x41150))\n\tdwb.Attr(dwarf.AttrHighpc, dwarfbuilder.Address(0x41155))\n\tdwb.Attr(dwarf.AttrCallFile, uint8(1))\n\tdwb.Attr(dwarf.AttrCallLine, uint8(1))\n\tdwb.TagClose()\n\tdwb.TagClose()\n\n\t// Abstract origin\n\tabstractOriginOff := dwb.TagOpen(dwarf.TagSubprogram, \"inlinedFn\")\n\tdwb.Attr(dwarf.AttrInline, uint8(1))\n\tdwb.TagClose()\n\n\tdwb.TagClose()\n\n\tdwb.PatchOffset(originRef1, abstractOriginOff)\n\tdwb.PatchOffset(originRef2, abstractOriginOff)\n\n\tbi, _ := fakeBinaryInfo(t, dwb)\n\tfn := bi.PCToFunc(0x40100)\n\tif fn == nil {\n\t\tt.Fatalf(\"could not find concrete instance of inlined function\")\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/eval.go",
    "content": "package proc\n\nimport (\n\t\"debug/dwarf\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/constant\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"reflect\"\n\t\"runtime/debug\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/astutil\"\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/reader\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc/evalop\"\n)\n\nvar errOperationOnSpecialFloat = errors.New(\"operations on non-finite floats not implemented\")\n\nconst (\n\tgoDictionaryName = \".dict\"\n\tgoClosurePtr     = \".closureptr\"\n)\n\n// EvalScope is the scope for variable evaluation. Contains the thread,\n// current location (PC), and canonical frame address.\ntype EvalScope struct {\n\tLocation\n\tRegs     op.DwarfRegisters\n\tMem      MemoryReadWriter // Target's memory\n\tg        *G\n\tthreadID int\n\tBinInfo  *BinaryInfo\n\ttarget   *Target\n\tloadCfg  *LoadConfig\n\n\tframeOffset int64\n\n\t// When the following pointer is not nil this EvalScope was created\n\t// by EvalExpressionWithCalls and function call injection are allowed.\n\t// See the top comment in fncall.go for a description of how the call\n\t// injection protocol is handled.\n\tcallCtx *callContext\n\n\tdictAddr uint64 // dictionary address for instantiated generic functions\n\n\tenclosingRangeScopes []*EvalScope\n\trangeFrames          []Stackframe\n}\n\ntype localsFlags uint8\n\nconst (\n\t// If localsTrustArgOrder is set function arguments that don't have an\n\t// address will have one assigned by looking at their position in the argument\n\t// list.\n\tlocalsTrustArgOrder localsFlags = 1 << iota\n\n\t// If localsNoDeclLineCheck the declaration line isn't checked at\n\t// all to determine if the variable is in scope.\n\tlocalsNoDeclLineCheck\n\n\t// If localsOnlyRangeBodyClosures is set simpleLocals only returns\n\t// variables containing the range body closure.\n\tlocalsOnlyRangeBodyClosures\n\n\t// If localsIsRangeBody is set DW_AT_formal_parameter variables will be\n\t// considered local variables.\n\tlocalsIsRangeBody\n\n\t// If localsFakeFunctionEntryScope is set the current scope was generated by fakeFunctionEntryScope\n\tlocalsFakeFunctionEntryScope\n)\n\n// ConvertEvalScope returns a new EvalScope in the context of the\n// specified goroutine ID and stack frame.\n// If deferCall is > 0 the eval scope will be relative to the specified deferred call.\nfunc ConvertEvalScope(dbp *Target, gid int64, frame, deferCall int) (*EvalScope, error) {\n\tif _, err := dbp.Valid(); err != nil {\n\t\treturn nil, err\n\t}\n\tct := dbp.CurrentThread()\n\tthreadID := ct.ThreadID()\n\tg, err := FindGoroutine(dbp, gid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar opts StacktraceOptions\n\tif deferCall > 0 {\n\t\topts = StacktraceReadDefers\n\t}\n\n\tvar locs []Stackframe\n\tif g != nil {\n\t\tif g.Thread != nil {\n\t\t\tthreadID = g.Thread.ThreadID()\n\t\t}\n\t\tlocs, err = GoroutineStacktrace(dbp, g, frame+1, opts)\n\t} else {\n\t\tlocs, err = ThreadStacktrace(dbp, ct, frame+1)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif frame >= len(locs) {\n\t\treturn nil, fmt.Errorf(\"Frame %d does not exist in goroutine %d\", frame, gid)\n\t}\n\n\tif deferCall > 0 {\n\t\tif deferCall-1 >= len(locs[frame].Defers) {\n\t\t\treturn nil, fmt.Errorf(\"Frame %d only has %d deferred calls\", frame, len(locs[frame].Defers))\n\t\t}\n\n\t\td := locs[frame].Defers[deferCall-1]\n\t\tif d.Unreadable != nil {\n\t\t\treturn nil, d.Unreadable\n\t\t}\n\n\t\treturn d.EvalScope(dbp, ct)\n\t}\n\n\treturn FrameToScope(dbp, dbp.Memory(), g, threadID, locs[frame:]...), nil\n}\n\n// FrameToScope returns a new EvalScope for frames[0].\n// If frames has at least two elements all memory between\n// frames[0].Regs.SP() and frames[1].Regs.CFA will be cached.\n// Otherwise all memory between frames[0].Regs.SP() and frames[0].Regs.CFA\n// will be cached.\nfunc FrameToScope(t *Target, thread MemoryReadWriter, g *G, threadID int, frames ...Stackframe) *EvalScope {\n\t// Creates a cacheMem that will preload the entire stack frame the first\n\t// time any local variable is read.\n\t// Remember that the stack grows downward in memory.\n\tminaddr := frames[0].Regs.SP()\n\tvar maxaddr uint64\n\tif len(frames) > 1 && frames[0].SystemStack == frames[1].SystemStack {\n\t\tmaxaddr = uint64(frames[1].Regs.CFA)\n\t} else {\n\t\tmaxaddr = uint64(frames[0].Regs.CFA)\n\t}\n\tif maxaddr > minaddr && maxaddr-minaddr < maxFramePrefetchSize {\n\t\tthread = cacheMemory(thread, minaddr, int(maxaddr-minaddr))\n\t}\n\n\ts := &EvalScope{Location: frames[0].Call, Regs: frames[0].Regs, Mem: thread, g: g, BinInfo: t.BinInfo(), target: t, frameOffset: frames[0].FrameOffset(), threadID: threadID}\n\ts.PC = frames[0].lastpc\n\treturn s\n}\n\n// ThreadScope returns an EvalScope for the given thread.\nfunc ThreadScope(t *Target, thread Thread) (*EvalScope, error) {\n\tlocations, err := ThreadStacktrace(t, thread, 1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(locations) < 1 {\n\t\treturn nil, errors.New(\"could not decode first frame\")\n\t}\n\treturn FrameToScope(t, thread.ProcessMemory(), nil, thread.ThreadID(), locations...), nil\n}\n\n// GoroutineScope returns an EvalScope for the goroutine running on the given thread.\nfunc GoroutineScope(t *Target, thread Thread) (*EvalScope, error) {\n\tlocations, err := ThreadStacktrace(t, thread, 1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif len(locations) < 1 {\n\t\treturn nil, errors.New(\"could not decode first frame\")\n\t}\n\tg, err := GetG(thread)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tthreadID := 0\n\tif g.Thread != nil {\n\t\tthreadID = g.Thread.ThreadID()\n\t}\n\treturn FrameToScope(t, thread.ProcessMemory(), g, threadID, locations...), nil\n}\n\nfunc (scope *EvalScope) evalopFlags() evalop.Flags {\n\tflags := evalop.Flags(0)\n\tif scope.BinInfo.hasDebugPinner() {\n\t\tflags |= evalop.HasDebugPinner\n\t}\n\treturn flags\n}\n\n// EvalExpression returns the value of the given expression.\nfunc (scope *EvalScope) EvalExpression(expr string, cfg LoadConfig) (*Variable, error) {\n\tops, err := evalop.Compile(scopeToEvalLookup{scope}, expr, scope.evalopFlags())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tstack := &evalStack{}\n\n\tscope.loadCfg = &cfg\n\tstack.eval(scope, ops)\n\tev, err := stack.result(&cfg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tev.loadValue(cfg)\n\tif ev.Name == \"\" {\n\t\tev.Name = expr\n\t}\n\treturn ev, nil\n}\n\ntype scopeToEvalLookup struct {\n\t*EvalScope\n}\n\nfunc (s scopeToEvalLookup) FindTypeExpr(expr ast.Expr) (godwarf.Type, error) {\n\treturn s.BinInfo.findTypeExpr(expr)\n}\n\nfunc (scope scopeToEvalLookup) HasBuiltin(name string) bool {\n\treturn supportedBuiltins[name] != nil\n}\n\nfunc (scope scopeToEvalLookup) PtrSize() int {\n\treturn scope.BinInfo.Arch.ptrSize\n}\n\n// ChanGoroutines returns the list of goroutines waiting to receive from or\n// send to the channel.\nfunc (scope *EvalScope) ChanGoroutines(expr string, start, count int) ([]int64, error) {\n\tt, err := parser.ParseExpr(expr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tv, err := scope.evalAST(t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif v.Kind != reflect.Chan {\n\t\treturn nil, nil\n\t}\n\n\tstructMemberMulti := func(v *Variable, names ...string) *Variable {\n\t\tfor _, name := range names {\n\t\t\tvar err error\n\t\t\tv, err = v.structField(name)\n\t\t\tif err != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\treturn v\n\t}\n\n\twaitqFirst := func(qname string) *Variable {\n\t\tqvar := structMemberMulti(v, qname, \"first\")\n\t\tif qvar == nil {\n\t\t\treturn nil\n\t\t}\n\t\treturn qvar.maybeDereference()\n\t}\n\n\tvar goids []int64\n\n\twaitqToGoIDSlice := func(qvar *Variable) error {\n\t\tif qvar == nil {\n\t\t\treturn nil\n\t\t}\n\t\tfor {\n\t\t\tif qvar.Addr == 0 {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tif len(goids) > count {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tgoidVar := structMemberMulti(qvar, \"g\", \"goid\")\n\t\t\tif goidVar == nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tgoidVar.loadValue(loadSingleValue)\n\t\t\tif goidVar.Unreadable != nil {\n\t\t\t\treturn goidVar.Unreadable\n\t\t\t}\n\t\t\tgoid, _ := constant.Int64Val(goidVar.Value)\n\t\t\tif start > 0 {\n\t\t\t\tstart--\n\t\t\t} else {\n\t\t\t\tgoids = append(goids, goid)\n\t\t\t}\n\n\t\t\tnextVar, err := qvar.structField(\"next\")\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tqvar = nextVar.maybeDereference()\n\t\t}\n\t}\n\n\trecvqVar := waitqFirst(\"recvq\")\n\terr = waitqToGoIDSlice(recvqVar)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsendqVar := waitqFirst(\"sendq\")\n\terr = waitqToGoIDSlice(sendqVar)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn goids, nil\n}\n\n// Locals returns all variables in 'scope' named wantedName, or all of them\n// if wantedName is \"\".\n// If scope is the scope for a range-over-func closure body it will merge in\n// the scopes of the enclosing functions.\nfunc (scope *EvalScope) Locals(flags localsFlags, wantedName string) ([]*Variable, error) {\n\tvar scopes [][]*Variable\n\tfilter := func(vars []*Variable) []*Variable {\n\t\tif wantedName == \"\" || vars == nil {\n\t\t\treturn vars\n\t\t}\n\t\tvars2 := []*Variable{}\n\t\tfor _, v := range vars {\n\t\t\tif v.Name == wantedName {\n\t\t\t\tvars2 = append(vars2, v)\n\t\t\t}\n\t\t}\n\t\treturn vars2\n\t}\n\n\trangeBodyFlags := localsFlags(0)\n\tif scope.Fn != nil && scope.Fn.rangeParentName() != \"\" {\n\t\trangeBodyFlags = localsFlags(localsIsRangeBody)\n\t}\n\n\tvars0, err := scope.simpleLocals(flags|rangeBodyFlags, wantedName)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvars0 = filter(vars0)\n\tif scope.Fn.extra(scope.BinInfo).rangeParent == nil || scope.target == nil || scope.g == nil {\n\t\treturn vars0, nil\n\t}\n\tif wantedName != \"\" && len(vars0) > 0 {\n\t\treturn vars0, nil\n\t}\n\n\tscopes = append(scopes, vars0)\n\n\tif scope.rangeFrames == nil {\n\t\terr := scope.setupRangeFrames()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tfor i, scope2 := range scope.enclosingRangeScopes {\n\t\tif scope2 == nil {\n\t\t\tscope2 = FrameToScope(scope.target, scope.target.Memory(), scope.g, scope.threadID, scope.rangeFrames[2*i:]...)\n\t\t\tscope.enclosingRangeScopes[i] = scope2\n\t\t}\n\t\trangeBodyFlags := localsFlags(localsIsRangeBody)\n\t\tif i == len(scope.enclosingRangeScopes)-1 {\n\t\t\trangeBodyFlags = 0\n\t\t}\n\t\tvars, err := scope2.simpleLocals(flags|rangeBodyFlags, wantedName)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvars = filter(vars)\n\t\tscopes = append(scopes, vars)\n\t\tif wantedName != \"\" && len(vars) > 0 {\n\t\t\treturn vars, nil\n\t\t}\n\t}\n\n\tvars := []*Variable{}\n\tfor i := len(scopes) - 1; i >= 0; i-- {\n\t\tvars = append(vars, scopes[i]...)\n\t}\n\n\t// Apply shadowning\n\tlvn := map[string]*Variable{}\n\tfor _, v := range vars {\n\t\tif otherv := lvn[v.Name]; otherv != nil {\n\t\t\totherv.Flags |= VariableShadowed\n\t\t}\n\t\tlvn[v.Name] = v\n\t}\n\treturn vars, nil\n}\n\nfunc (scope *EvalScope) setupRangeFrames() error {\n\tvar err error\n\tscope.rangeFrames, err = rangeFuncStackTrace(scope.target, scope.g)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(scope.rangeFrames) > 0 {\n\t\tscope.rangeFrames = scope.rangeFrames[2:] // skip the first frame and its return frame\n\t}\n\tscope.enclosingRangeScopes = make([]*EvalScope, len(scope.rangeFrames)/2)\n\treturn nil\n}\n\n// simpleLocals returns all local variables in 'scope'.\n// This function does not try to merge the scopes of range-over-func closure\n// bodies with their enclosing function, for that use (*EvalScope).Locals or\n// (*EvalScope).FindLocal instead.\n// If wantedName is specified only variables called wantedName or \"&\"+wantedName are returned.\nfunc (scope *EvalScope) simpleLocals(flags localsFlags, wantedName string) ([]*Variable, error) {\n\tif scope.Fn == nil {\n\t\treturn nil, errors.New(\"unable to find function context\")\n\t}\n\n\tif scope.image().Stripped() {\n\t\treturn nil, errors.New(\"unable to find locals: no debug information present in binary\")\n\t}\n\n\ttrustArgOrder := (flags&localsTrustArgOrder != 0) && scope.BinInfo.Producer() != \"\" && goversion.ProducerAfterOrEqual(scope.BinInfo.Producer(), 1, 12) && scope.Fn != nil && (scope.PC == scope.Fn.Entry)\n\n\tdwarfTree, err := scope.image().getDwarfTree(scope.Fn.offset)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvariablesFlags := reader.VariablesOnlyVisible | reader.VariablesSkipInlinedSubroutines\n\tif flags&localsNoDeclLineCheck != 0 {\n\t\tvariablesFlags = reader.VariablesNoDeclLineCheck\n\t}\n\tif scope.BinInfo.Producer() != \"\" && goversion.ProducerAfterOrEqual(scope.BinInfo.Producer(), 1, 15) {\n\t\tvariablesFlags |= reader.VariablesTrustDeclLine\n\t}\n\n\tvarEntries := reader.Variables(dwarfTree, scope.PC, scope.Line, variablesFlags)\n\n\t// look for dictionary entry\n\tif scope.dictAddr == 0 {\n\t\tscope.dictAddr = readLocalPtrVar(dwarfTree, goDictionaryName, scope.target, scope.BinInfo, scope.image(), scope.Regs, scope.Mem)\n\t}\n\n\tvar closureStruct *Variable\n\n\tvars := make([]*Variable, 0, len(varEntries))\n\tdepths := make([]int, 0, len(varEntries))\n\tfor _, entry := range varEntries {\n\t\tname, _ := entry.Val(dwarf.AttrName).(string)\n\t\tswitch {\n\t\tcase wantedName != \"\":\n\t\t\tif name != wantedName && name != \"&\"+wantedName {\n\t\t\t\tcontinue\n\t\t\t}\n\t\tcase flags&localsOnlyRangeBodyClosures != 0:\n\t\t\tif !strings.HasPrefix(name, \"#yield\") && !strings.HasPrefix(name, \"&#yield\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\tdefault:\n\t\t\tif name == goDictionaryName || name == goClosurePtr || strings.HasPrefix(name, \"#yield\") || strings.HasPrefix(name, \"&#yield\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tisCapturedVar := entry.Val(godwarf.AttrGoClosureOffset) != nil\n\t\tif scope.Fn.rangeParentName() != \"\" && (strings.HasPrefix(name, \"~\") || isCapturedVar) {\n\t\t\t// Skip unnamed parameters and closure variables for range-over-func closure bodies\n\t\t\tcontinue\n\t\t}\n\n\t\tval, err := extractVarInfoFromEntry(scope.target, scope.BinInfo, scope.image(), scope.Regs, scope.Mem, entry.Tree, scope.dictAddr)\n\t\tif err != nil {\n\t\t\t// skip variables that we can't parse yet\n\t\t\tcontinue\n\t\t}\n\n\t\tif trustArgOrder && ((val.Unreadable != nil && val.Addr == 0) || val.Flags&VariableFakeAddress != 0) && entry.Tag == dwarf.TagFormalParameter {\n\t\t\taddr := afterLastArgAddr(vars)\n\t\t\tif addr == 0 {\n\t\t\t\taddr = uint64(scope.Regs.CFA)\n\t\t\t}\n\t\t\taddr = uint64(alignAddr(int64(addr), val.DwarfType.Align()))\n\t\t\tval = newVariable(val.Name, addr, val.DwarfType, scope.BinInfo, scope.Mem)\n\t\t}\n\n\t\tif isCapturedVar && int(val.DeclLine) == scope.Line && scope.Fn != nil && entry.Tag == dwarf.TagVariable && (flags&localsFakeFunctionEntryScope == 0) {\n\t\t\t// For variables captured by closures if we are \"early\" in the function\n\t\t\t// read  the value from the closure struct instead of their location.\n\t\t\t// First check that we are actually between the entry point of the\n\t\t\t// function and the end of the prologue in case the code has not been\n\t\t\t// gofmt'd.\n\t\t\tfirstPCAfterPrologue := uint64(0)\n\t\t\tif scope.Fn.cu.lineInfo != nil {\n\t\t\t\tfn := scope.Fn\n\t\t\t\tfirstPCAfterPrologue, _, _, _ = fn.cu.lineInfo.PrologueEndPC(fn.Entry, fn.End)\n\t\t\t}\n\t\t\tif firstPCAfterPrologue < scope.Fn.Entry {\n\t\t\t\tfirstPCAfterPrologue = scope.Fn.Entry\n\t\t\t}\n\t\t\tif scope.PC >= scope.Fn.Entry && scope.PC <= firstPCAfterPrologue {\n\t\t\t\tcst := scope.Fn.extra(scope.BinInfo).closureStructType\n\t\t\t\tif closureStruct == nil {\n\t\t\t\t\tclosureStruct = newVariable(scope.Fn.Name, scope.Regs.Uint64Val(scope.BinInfo.Arch.ContextRegNum), cst, scope.BinInfo, scope.Mem)\n\t\t\t\t}\n\t\t\t\tfor i := range cst.Field {\n\t\t\t\t\tif cst.Field[i].Name == name {\n\t\t\t\t\t\tval2, _ := closureStruct.toField(cst.Field[i])\n\t\t\t\t\t\tif val2 != nil && val2.Unreadable == nil {\n\t\t\t\t\t\t\tval2.Name = name\n\t\t\t\t\t\t\tval = val2\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvars = append(vars, val)\n\t\tdepth := entry.Depth\n\t\tif (flags&localsIsRangeBody == 0) && (entry.Tag == dwarf.TagFormalParameter) {\n\t\t\tif depth <= 1 {\n\t\t\t\tdepth = 0\n\t\t\t}\n\t\t\tisret, _ := entry.Val(dwarf.AttrVarParam).(bool)\n\t\t\tif isret {\n\t\t\t\tval.Flags |= VariableReturnArgument\n\t\t\t} else {\n\t\t\t\tval.Flags |= VariableArgument\n\t\t\t}\n\t\t}\n\t\tdepths = append(depths, depth)\n\t}\n\n\tif len(vars) == 0 {\n\t\treturn vars, nil\n\t}\n\n\tsort.Stable(&variablesByDepthAndDeclLine{vars, depths})\n\n\tlvn := map[string]*Variable{} // lvn[n] is the last variable we saw named n\n\n\tfor i, v := range vars {\n\t\tif name := v.Name; len(name) > 1 && name[0] == '&' {\n\t\t\tlocationExpr := v.LocationExpr\n\t\t\tdeclLine := v.DeclLine\n\t\t\tv = v.maybeDereference()\n\t\t\tif v.Addr == 0 && v.Unreadable == nil {\n\t\t\t\tv.Unreadable = errors.New(\"no address for escaped variable\")\n\t\t\t}\n\t\t\tv.Name = name[1:]\n\t\t\tv.Flags |= VariableEscaped\n\t\t\t// See https://github.com/go-delve/delve/issues/2049 for details\n\t\t\tif locationExpr != nil {\n\t\t\t\tlocationExpr.isEscaped = true\n\t\t\t\tv.LocationExpr = locationExpr\n\t\t\t}\n\t\t\tv.DeclLine = declLine\n\t\t\tvars[i] = v\n\t\t}\n\t\tif otherv := lvn[v.Name]; otherv != nil {\n\t\t\totherv.Flags |= VariableShadowed\n\t\t}\n\t\tlvn[v.Name] = v\n\t}\n\n\treturn vars, nil\n}\n\nfunc afterLastArgAddr(vars []*Variable) uint64 {\n\tfor i := len(vars) - 1; i >= 0; i-- {\n\t\tv := vars[i]\n\t\tif (v.Flags&VariableArgument != 0) || (v.Flags&VariableReturnArgument != 0) {\n\t\t\treturn v.Addr + uint64(v.DwarfType.Size())\n\t\t}\n\t}\n\treturn 0\n}\n\n// readLocalPtrVar reads the value of the local pointer variable vname. This\n// is a low level helper function, it does not support nested scopes, range\n// resolution across range bodies, type parameters, &c...\nfunc readLocalPtrVar(dwarfTree *godwarf.Tree, vname string, tgt *Target, bi *BinaryInfo, image *Image, regs op.DwarfRegisters, mem MemoryReadWriter) uint64 {\n\tfor _, entry := range dwarfTree.Children {\n\t\tname, _ := entry.Val(dwarf.AttrName).(string)\n\t\tif name == vname {\n\t\t\tv, err := extractVarInfoFromEntry(tgt, bi, image, regs, mem, entry, 0)\n\t\t\tif err != nil {\n\t\t\t\tlogflags.DebuggerLogger().Errorf(\"could not load %s variable: %v\", name, err)\n\t\t\t} else if v.Unreadable != nil {\n\t\t\t\tlogflags.DebuggerLogger().Errorf(\"could not load %s variable: %v\", name, v.Unreadable)\n\t\t\t} else {\n\t\t\t\tr, err := readUintRaw(v.mem, v.Addr, int64(bi.Arch.PtrSize()))\n\t\t\t\tif err != nil {\n\t\t\t\t\tlogflags.DebuggerLogger().Errorf(\"could not load %s variable: %v\", name, err)\n\t\t\t\t}\n\t\t\t\treturn r\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\treturn 0\n}\n\n// setValue writes the value of srcv to dstv.\n//   - If srcv is a numerical literal constant and srcv is of a compatible type\n//     the necessary type conversion is performed.\n//   - If srcv is nil and dstv is of a nil'able type then dstv is nilled.\n//   - If srcv is the empty string and dstv is a string then dstv is set to the\n//     empty string.\n//   - If dstv is an \"interface {}\" and srcv is either an interface (possibly\n//     non-empty) or a pointer shaped type (map, channel, pointer or struct\n//     containing a single pointer field) the type conversion to \"interface {}\"\n//     is performed.\n//   - If srcv and dstv have the same type and are both addressable then the\n//     contents of srcv are copied byte-by-byte into dstv\nfunc (scope *EvalScope) setValue(dstv, srcv *Variable, srcExpr string) error {\n\tsrcv.loadValue(loadSingleValue)\n\n\ttyperr := srcv.isType(dstv.RealType, dstv.Kind)\n\tif _, isTypeConvErr := typerr.(*typeConvErr); isTypeConvErr {\n\t\t// attempt iface -> eface and ptr-shaped -> eface conversions.\n\t\treturn convertToEface(srcv, dstv)\n\t}\n\tif typerr != nil {\n\t\treturn typerr\n\t}\n\n\tif srcv.Unreadable != nil {\n\t\t//lint:ignore ST1005 backwards compatibility\n\t\treturn fmt.Errorf(\"Expression %q is unreadable: %v\", srcExpr, srcv.Unreadable)\n\t}\n\n\t// Numerical types\n\tswitch dstv.Kind {\n\tcase reflect.Float32, reflect.Float64:\n\t\tf, _ := constant.Float64Val(srcv.Value)\n\t\treturn dstv.writeFloatRaw(f, dstv.RealType.Size())\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tn, _ := constant.Int64Val(srcv.Value)\n\t\treturn dstv.writeUint(uint64(n), dstv.RealType.Size())\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\tn, _ := constant.Uint64Val(srcv.Value)\n\t\treturn dstv.writeUint(n, dstv.RealType.Size())\n\tcase reflect.Bool:\n\t\treturn dstv.writeBool(constant.BoolVal(srcv.Value))\n\tcase reflect.Complex64, reflect.Complex128:\n\t\treal, _ := constant.Float64Val(constant.Real(srcv.Value))\n\t\timag, _ := constant.Float64Val(constant.Imag(srcv.Value))\n\t\treturn dstv.writeComplex(real, imag, dstv.RealType.Size())\n\tcase reflect.Func:\n\t\tif dstv.RealType.Size() == 0 {\n\t\t\tif dstv.Name != \"\" {\n\t\t\t\treturn fmt.Errorf(\"can not assign to %s\", dstv.Name)\n\t\t\t}\n\t\t\treturn errors.New(\"can not assign to function expression\")\n\t\t}\n\t}\n\n\t// nilling nillable variables\n\tif srcv == nilVariable {\n\t\treturn dstv.writeZero()\n\t}\n\n\tif srcv.Kind == reflect.String {\n\t\tif srcv.Base == 0 && srcv.Len > 0 && srcv.Flags&VariableConstant != 0 {\n\t\t\treturn errFuncCallNotAllowedStrAlloc\n\t\t}\n\t\treturn dstv.writeString(uint64(srcv.Len), srcv.Base)\n\t}\n\n\t// slice assignment (this is not handled by the writeCopy below so that\n\t// results of a reslice operation can be used here).\n\tif srcv.Kind == reflect.Slice {\n\t\treturn dstv.writeSlice(srcv.Len, srcv.Cap, srcv.Base)\n\t}\n\n\t// allow any integer to be converted to any pointer\n\tif t, isptr := dstv.RealType.(*godwarf.PtrType); isptr {\n\t\treturn dstv.writeUint(srcv.Children[0].Addr, t.ByteSize)\n\t}\n\n\t// byte-by-byte copying for everything else, but the source must be addressable\n\tif srcv.Addr != 0 {\n\t\treturn dstv.writeCopy(srcv)\n\t}\n\n\treturn fmt.Errorf(\"can not set variables of type %s (not implemented)\", dstv.Kind.String())\n}\n\n// SetVariable sets the value of the named variable\nfunc (scope *EvalScope) SetVariable(name, value string) error {\n\tops, err := evalop.CompileSet(scopeToEvalLookup{scope}, name, value, scope.evalopFlags())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tstack := &evalStack{}\n\tstack.eval(scope, ops)\n\t_, err = stack.result(nil)\n\treturn err\n}\n\n// LocalVariables returns all local variables from the current function scope.\nfunc (scope *EvalScope) LocalVariables(cfg LoadConfig) ([]*Variable, error) {\n\tvars, err := scope.Locals(0, \"\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvars = filterVariables(vars, func(v *Variable) bool {\n\t\treturn (v.Flags & (VariableArgument | VariableReturnArgument)) == 0\n\t})\n\tcfg.MaxMapBuckets = maxMapBucketsFactor * cfg.MaxArrayValues\n\tloadValues(vars, cfg)\n\treturn vars, nil\n}\n\n// FunctionArguments returns the name, value, and type of all current function arguments.\nfunc (scope *EvalScope) FunctionArguments(cfg LoadConfig) ([]*Variable, error) {\n\tvars, err := scope.Locals(0, \"\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvars = filterVariables(vars, func(v *Variable) bool {\n\t\treturn (v.Flags & (VariableArgument | VariableReturnArgument)) != 0\n\t})\n\tcfg.MaxMapBuckets = maxMapBucketsFactor * cfg.MaxArrayValues\n\tloadValues(vars, cfg)\n\treturn vars, nil\n}\n\nfunc filterVariables(vars []*Variable, pred func(v *Variable) bool) []*Variable {\n\tr := make([]*Variable, 0, len(vars))\n\tfor i := range vars {\n\t\tif pred(vars[i]) {\n\t\t\tr = append(r, vars[i])\n\t\t}\n\t}\n\treturn r\n}\n\nfunc regsReplaceStaticBase(regs op.DwarfRegisters, image *Image) op.DwarfRegisters {\n\tregs.StaticBase = image.StaticBase\n\treturn regs\n}\n\n// PackageVariables returns the name, value, and type of all package variables in the application.\nfunc (scope *EvalScope) PackageVariables(cfg LoadConfig) ([]*Variable, error) {\n\tpkgvars := make([]packageVar, len(scope.BinInfo.packageVars))\n\tcopy(pkgvars, scope.BinInfo.packageVars)\n\tsort.Slice(pkgvars, func(i, j int) bool {\n\t\tif pkgvars[i].cu.image.addr == pkgvars[j].cu.image.addr {\n\t\t\treturn pkgvars[i].offset < pkgvars[j].offset\n\t\t}\n\t\treturn pkgvars[i].cu.image.addr < pkgvars[j].cu.image.addr\n\t})\n\tvars := make([]*Variable, 0, len(scope.BinInfo.packageVars))\n\tfor _, pkgvar := range pkgvars {\n\t\treader := pkgvar.cu.image.dwarfReader\n\t\treader.Seek(pkgvar.offset)\n\t\tentry, err := reader.Next()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Ignore errors trying to extract values\n\t\tval, err := extractVarInfoFromEntry(scope.target, scope.BinInfo, pkgvar.cu.image, regsReplaceStaticBase(scope.Regs, pkgvar.cu.image), scope.Mem, godwarf.EntryToTree(entry), 0)\n\t\tif val != nil && val.Kind == reflect.Invalid {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tval.loadValue(cfg)\n\t\tvars = append(vars, val)\n\t}\n\n\treturn vars, nil\n}\n\nfunc (scope *EvalScope) findGlobal(pkgName, varName string) (*Variable, error) {\n\tfor _, pkgPath := range scope.BinInfo.PackageMap[pkgName] {\n\t\tv, err := scope.findGlobalInternal(pkgPath + \".\" + varName)\n\t\tif err != nil || v != nil {\n\t\t\treturn v, err\n\t\t}\n\t}\n\tv, err := scope.findGlobalInternal(pkgName + \".\" + varName)\n\tif err != nil || v != nil {\n\t\treturn v, err\n\t}\n\treturn nil, &errCouldNotFindSymbol{fmt.Sprintf(\"%s.%s\", pkgName, varName)}\n}\n\ntype errCouldNotFindSymbol struct {\n\tname string\n}\n\nfunc (e *errCouldNotFindSymbol) Error() string {\n\treturn fmt.Sprintf(\"could not find symbol %s\", e.name)\n}\n\nfunc isSymbolNotFound(e error) bool {\n\tvar e2 *errCouldNotFindSymbol\n\treturn errors.As(e, &e2)\n}\n\nfunc (scope *EvalScope) findGlobalInternal(name string) (*Variable, error) {\n\tfor _, pkgvar := range scope.BinInfo.packageVars {\n\t\tif pkgvar.name == name || strings.HasSuffix(pkgvar.name, \"/\"+name) {\n\t\t\treader := pkgvar.cu.image.dwarfReader\n\t\t\treader.Seek(pkgvar.offset)\n\t\t\tentry, err := reader.Next()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn extractVarInfoFromEntry(scope.target, scope.BinInfo, pkgvar.cu.image, regsReplaceStaticBase(scope.Regs, pkgvar.cu.image), scope.Mem, godwarf.EntryToTree(entry), 0)\n\t\t}\n\t}\n\tfor _, fn := range scope.BinInfo.Functions {\n\t\tif fn.Name == name || strings.HasSuffix(fn.Name, \"/\"+name) {\n\t\t\t//TODO(aarzilli): convert function entry into a function type?\n\t\t\tr := newVariable(fn.Name, fn.Entry, &godwarf.FuncType{}, scope.BinInfo, scope.Mem)\n\t\t\tr.Value = constant.MakeString(fn.Name)\n\t\t\tr.Base = fn.Entry\n\t\t\tr.loaded = true\n\t\t\tif fn.Entry == 0 {\n\t\t\t\tr.Unreadable = fmt.Errorf(\"function %s is inlined\", fn.Name)\n\t\t\t}\n\t\t\treturn r, nil\n\t\t}\n\t}\n\tfor dwref, ctyp := range scope.BinInfo.consts {\n\t\tfor _, cval := range ctyp.values {\n\t\t\tif cval.fullName == name || strings.HasSuffix(cval.fullName, \"/\"+name) {\n\t\t\t\tt, err := scope.BinInfo.Images[dwref.imageIndex].Type(dwref.offset)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tv := newVariable(name, 0x0, t, scope.BinInfo, scope.Mem)\n\t\t\t\tswitch v.Kind {\n\t\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\t\tv.Value = constant.MakeInt64(cval.value)\n\t\t\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\t\t\tv.Value = constant.MakeUint64(uint64(cval.value))\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, fmt.Errorf(\"unsupported constant kind %v\", v.Kind)\n\t\t\t\t}\n\t\t\t\tv.Flags |= VariableConstant\n\t\t\t\tv.loaded = true\n\t\t\t\treturn v, nil\n\t\t\t}\n\t\t}\n\t}\n\treturn nil, nil\n}\n\n// image returns the image containing the current function.\nfunc (scope *EvalScope) image() *Image {\n\treturn scope.BinInfo.funcToImage(scope.Fn)\n}\n\n// evalStack stores the stack machine used to evaluate a program made of\n// evalop.Ops.\n// When an opcode sets callInjectionContinue execution of the program will be suspended\n// and the call injection protocol will be executed instead.\ntype evalStack struct {\n\tstack                 []*Variable          // current stack of Variable values\n\tfncalls               []*functionCallState // stack of call injections currently being executed\n\tops                   []evalop.Op          // program being executed\n\topidx                 int                  // program counter for the stack program\n\tcallInjectionContinue bool                 // when set program execution suspends and the call injection protocol is executed instead\n\terr                   error\n\n\tspoff, bpoff, fboff int64\n\tscope               *EvalScope\n\tcurthread           Thread\n\tlastRetiredFncall   *functionCallState\n\tdebugPinner         *Variable\n\tdisabledErrors      bool\n}\n\nfunc (s *evalStack) push(v *Variable) {\n\tif v == nil {\n\t\tpanic(errors.New(\"internal debugger error, nil pushed onto variables stack\"))\n\t}\n\ts.stack = append(s.stack, v)\n}\n\nfunc (s *evalStack) pop() *Variable {\n\tv := s.stack[len(s.stack)-1]\n\ts.stack = s.stack[:len(s.stack)-1]\n\treturn v\n}\n\nfunc (s *evalStack) peek() *Variable {\n\treturn s.stack[len(s.stack)-1]\n}\n\nfunc (s *evalStack) fncallPush(fncall *functionCallState) {\n\ts.fncalls = append(s.fncalls, fncall)\n}\n\nfunc (s *evalStack) fncallPop() *functionCallState {\n\tfncall := s.fncalls[len(s.fncalls)-1]\n\ts.fncalls = s.fncalls[:len(s.fncalls)-1]\n\treturn fncall\n}\n\nfunc (s *evalStack) fncallPeek() *functionCallState {\n\treturn s.fncalls[len(s.fncalls)-1]\n}\n\nfunc (s *evalStack) pushErr(v *Variable, err error) {\n\ts.err = err\n\ts.stack = append(s.stack, v)\n}\n\n// eval evaluates ops. When it returns if callInjectionContinue is set the\n// target program should be resumed to execute the call injection protocol.\n// Otherwise the result of the evaluation can be retrieved using\n// stack.result.\nfunc (stack *evalStack) eval(scope *EvalScope, ops []evalop.Op) {\n\tif logflags.FnCall() {\n\t\tfncallLog(\"eval program:\\n%s\", evalop.Listing(nil, ops))\n\t}\n\n\tstack.ops = ops\n\tstack.scope = scope\n\n\tif scope.g != nil {\n\t\tstack.spoff = int64(scope.Regs.Uint64Val(scope.Regs.SPRegNum)) - int64(scope.g.stack.hi)\n\t\tstack.bpoff = int64(scope.Regs.Uint64Val(scope.Regs.BPRegNum)) - int64(scope.g.stack.hi)\n\t\tstack.fboff = scope.Regs.FrameBase - int64(scope.g.stack.hi)\n\t}\n\n\tif scope.g != nil && scope.g.Thread != nil {\n\t\tstack.curthread = scope.g.Thread\n\t}\n\n\tstack.run()\n}\n\n// resume resumes evaluation of stack.ops. When it returns if\n// callInjectionContinue is set the target program should be resumed to\n// execute the call injection protocol. Otherwise the result of the\n// evaluation can be retrieved using stack.result.\nfunc (stack *evalStack) resume(g *G) {\n\tstack.callInjectionContinue = false\n\tscope := stack.scope\n\t// Go 1.15 will move call injection execution to a different goroutine,\n\t// but we want to keep evaluation on the original goroutine.\n\tif g.ID == scope.g.ID {\n\t\tscope.g = g\n\t} else {\n\t\t// We are in Go 1.15 and we switched to a new goroutine, the original\n\t\t// goroutine is now parked and therefore does not have a thread\n\t\t// associated.\n\t\tscope.g.Thread = nil\n\t\tscope.g.Status = Gwaiting\n\t\tscope.callCtx.injectionThread = g.Thread\n\t}\n\n\t// adjust the value of registers inside scope\n\tpcreg, bpreg, spreg := scope.Regs.Reg(scope.Regs.PCRegNum), scope.Regs.Reg(scope.Regs.BPRegNum), scope.Regs.Reg(scope.Regs.SPRegNum)\n\tscope.Regs.ClearRegisters()\n\tscope.Regs.AddReg(scope.Regs.PCRegNum, pcreg)\n\tscope.Regs.AddReg(scope.Regs.BPRegNum, bpreg)\n\tscope.Regs.AddReg(scope.Regs.SPRegNum, spreg)\n\tscope.Regs.Reg(scope.Regs.SPRegNum).Uint64Val = uint64(stack.spoff + int64(scope.g.stack.hi))\n\tscope.Regs.Reg(scope.Regs.BPRegNum).Uint64Val = uint64(stack.bpoff + int64(scope.g.stack.hi))\n\tscope.Regs.FrameBase = stack.fboff + int64(scope.g.stack.hi)\n\tscope.Regs.CFA = scope.frameOffset + int64(scope.g.stack.hi)\n\tstack.curthread = g.Thread\n\tscope.rangeFrames = nil\n\tscope.enclosingRangeScopes = nil\n\n\tfinished := funcCallStep(scope, stack, g.Thread)\n\tif finished {\n\t\tfuncCallFinish(scope, stack)\n\t}\n\tif stack.err == nil && len(stack.fncalls) > 0 {\n\t\tif fncall := stack.fncallPeek(); fncall.err != nil {\n\t\t\tstack.err = fncall.err\n\t\t}\n\t}\n\n\tif stack.callInjectionContinue {\n\t\t// not done with call injection, stay in this mode\n\t\tstack.scope.callCtx.injectionThread = nil\n\t\treturn\n\t}\n\n\t// call injection protocol suspended or concluded, resume normal opcode execution\n\tif len(stack.fncalls) == 0 && g.Thread != nil {\n\t\t// The function call protocol concluded, recover the thread's registers so\n\t\t// we can use them to evaluate variables.\n\t\tso := scope.image()\n\t\tif regs, err := g.Thread.Registers(); err == nil {\n\t\t\tcfa := scope.Regs.CFA\n\t\t\tframeBase := scope.Regs.FrameBase\n\t\t\tdwarfRegs := *(scope.BinInfo.Arch.RegistersToDwarfRegisters(so.StaticBase, regs))\n\t\t\tdwarfRegs.ChangeFunc = g.Thread.SetReg\n\t\t\tscope.Regs = dwarfRegs\n\t\t\tscope.Regs.CFA = cfa\n\t\t\tscope.Regs.FrameBase = frameBase\n\t\t}\n\t}\n\tstack.run()\n}\n\nfunc (stack *evalStack) run() {\n\tscope, curthread := stack.scope, stack.curthread\n\tfor stack.opidx < len(stack.ops) && stack.err == nil {\n\t\tstack.callInjectionContinue = false\n\t\tstack.executeOp()\n\t\t// If the instruction we just executed requests the call injection\n\t\t// protocol by setting callInjectionContinue we switch to it.\n\t\tif stack.callInjectionContinue && stack.err == nil {\n\t\t\tscope.callCtx.injectionThread = nil\n\t\t\treturn\n\t\t}\n\t}\n\n\tif stack.err == nil && len(stack.fncalls) > 0 {\n\t\tstack.err = fmt.Errorf(\"internal debugger error: eval program finished without error but %d call injections still active\", len(stack.fncalls))\n\t\treturn\n\t}\n\n\t// If there is an error we must undo all currently executing call\n\t// injections before returning.\n\n\tif len(stack.fncalls) > 0 {\n\t\tfncallLog(\"undoing calls (%v)\", stack.err)\n\t\tfncall := stack.fncallPeek()\n\t\tif fncall == stack.lastRetiredFncall {\n\t\t\tstack.err = fmt.Errorf(\"internal debugger error: could not undo injected call during error recovery, original error: %v\", stack.err)\n\t\t\treturn\n\t\t}\n\t\tif fncall.undoInjection != nil {\n\t\t\tif fncall.undoInjection.doComplete2 {\n\t\t\t\t// doComplete2 is set if CallInjectionComplete{DoPinning: true} has been\n\t\t\t\t// executed but CallInjectionComplete2 hasn't.\n\t\t\t\tregs, err := curthread.Registers()\n\t\t\t\tif err == nil {\n\t\t\t\t\tcallInjectionComplete2(scope, scope.BinInfo, fncall, regs, curthread)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// undoInjection is set if evalop.CallInjectionSetTarget has been\n\t\t\t\t// executed but evalop.CallInjectionComplete hasn't, we must undo the callOP\n\t\t\t\t// call in evalop.CallInjectionSetTarget before continuing.\n\t\t\t\tswitch scope.BinInfo.Arch.Name {\n\t\t\t\tcase \"amd64\":\n\t\t\t\t\tregs, _ := curthread.Registers()\n\t\t\t\t\tsetSP(curthread, regs.SP()+uint64(scope.BinInfo.Arch.PtrSize()))\n\t\t\t\t\tsetPC(curthread, fncall.undoInjection.oldpc)\n\t\t\t\tcase \"arm64\", \"ppc64le\", \"loong64\":\n\t\t\t\t\tsetLR(curthread, fncall.undoInjection.oldlr)\n\t\t\t\t\tsetPC(curthread, fncall.undoInjection.oldpc)\n\t\t\t\tdefault:\n\t\t\t\t\tpanic(\"not implemented\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstack.lastRetiredFncall = fncall\n\t\t// Resume target to undo one call\n\t\tstack.callInjectionContinue = true\n\t\tscope.callCtx.injectionThread = nil\n\t\treturn\n\t}\n}\n\nfunc (stack *evalStack) result(cfg *LoadConfig) (*Variable, error) {\n\tvar r *Variable\n\tswitch len(stack.stack) {\n\tcase 0:\n\t\t// ok\n\tcase 1:\n\t\tr = stack.peek()\n\tdefault:\n\t\tif stack.err == nil {\n\t\t\tstack.err = fmt.Errorf(\"internal debugger error: wrong stack size at end %d\", len(stack.stack))\n\t\t}\n\t}\n\tif r != nil && cfg != nil && stack.err == nil {\n\t\tr.loadValue(*cfg)\n\t}\n\treturn r, stack.err\n}\n\n// executeOp executes the opcode at stack.ops[stack.opidx] and increments stack.opidx.\nfunc (stack *evalStack) executeOp() {\n\tscope, ops, curthread := stack.scope, stack.ops, stack.curthread\n\tdefer func() {\n\t\terr := recover()\n\t\tif err != nil {\n\t\t\tlogflags.Bug.Inc()\n\t\t\tstack.err = fmt.Errorf(\"internal debugger error: %v (recovered)\\n%s\", err, string(debug.Stack()))\n\t\t}\n\t}()\n\tswitch op := ops[stack.opidx].(type) {\n\tcase *evalop.PushCurg:\n\t\tif scope.g != nil {\n\t\t\tstack.push(scope.g.variable.clone())\n\t\t} else {\n\t\t\ttyp, err := scope.BinInfo.findType(\"runtime.g\")\n\t\t\tif err != nil {\n\t\t\t\tstack.err = fmt.Errorf(\"could not find runtime.g: %v\", err)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgvar := newVariable(\"curg\", fakeAddressUnresolv, typ, scope.BinInfo, scope.Mem)\n\t\t\tgvar.loaded = true\n\t\t\tgvar.Flags = VariableFakeAddress\n\t\t\tgvar.Children = append(gvar.Children, *newConstant(constant.MakeInt64(0), scope.BinInfo, scope.Mem))\n\t\t\tgvar.Children[0].Name = \"goid\"\n\t\t\tstack.push(gvar)\n\t\t}\n\n\tcase *evalop.PushFrameoff:\n\t\tstack.push(newConstant(constant.MakeInt64(scope.frameOffset), scope.BinInfo, scope.Mem))\n\n\tcase *evalop.PushRangeParentOffset:\n\t\tif scope.rangeFrames == nil {\n\t\t\tstack.err = scope.setupRangeFrames()\n\t\t}\n\t\tif len(scope.rangeFrames) > 0 {\n\t\t\tstack.push(newConstant(constant.MakeInt64(scope.rangeFrames[len(scope.rangeFrames)-2].FrameOffset()), scope.BinInfo, scope.Mem))\n\t\t} else {\n\t\t\tstack.push(newConstant(constant.MakeInt64(0), scope.BinInfo, scope.Mem))\n\t\t}\n\n\tcase *evalop.PushThreadID:\n\t\tstack.push(newConstant(constant.MakeInt64(int64(scope.threadID)), scope.BinInfo, scope.Mem))\n\n\tcase *evalop.PushConst:\n\t\tstack.push(newConstant(op.Value, scope.BinInfo, scope.Mem))\n\n\tcase *evalop.PushLocal:\n\t\tfound := stack.pushLocal(scope, op.Name, op.Frame)\n\t\tif !found {\n\t\t\tstack.err = fmt.Errorf(\"could not find symbol value for %s\", op.Name)\n\t\t}\n\n\tcase *evalop.PushNil:\n\t\tstack.push(nilVariable)\n\n\tcase *evalop.PushPackageVarOrSelect:\n\t\tv, err := scope.findGlobal(op.Name, op.Sel)\n\t\tif err != nil && !isSymbolNotFound(err) {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tif v != nil {\n\t\t\tstack.push(v)\n\t\t} else {\n\t\t\tif op.NameIsString {\n\t\t\t\tstack.err = fmt.Errorf(\"%q (type string) is not a struct\", op.Name)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfound := stack.pushIdent(scope, op.Name)\n\t\t\tif stack.err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif found {\n\t\t\t\tscope.evalStructSelector(&evalop.Select{Name: op.Sel}, stack)\n\t\t\t} else {\n\t\t\t\tstack.err = fmt.Errorf(\"could not find symbol value for %s\", op.Name)\n\t\t\t}\n\t\t}\n\n\tcase *evalop.PushIdent:\n\t\tfound := stack.pushIdent(scope, op.Name)\n\t\tif !found {\n\t\t\tstack.err = fmt.Errorf(\"could not find symbol value for %s\", op.Name)\n\t\t}\n\n\tcase *evalop.PushLen:\n\t\tv := stack.peek()\n\t\tstack.push(newConstant(constant.MakeInt64(v.Len), scope.BinInfo, scope.Mem))\n\n\tcase *evalop.Select:\n\t\tscope.evalStructSelector(op, stack)\n\n\tcase *evalop.TypeAssert:\n\t\tscope.evalTypeAssert(op, stack)\n\n\tcase *evalop.PointerDeref:\n\t\tscope.evalPointerDeref(op, stack)\n\n\tcase *evalop.Unary:\n\t\tscope.evalUnary(op, stack)\n\n\tcase *evalop.AddrOf:\n\t\tscope.evalAddrOf(op, stack)\n\n\tcase *evalop.TypeCast:\n\t\tscope.evalTypeCast(op, stack)\n\n\tcase *evalop.Reslice:\n\t\tscope.evalReslice(op, stack)\n\n\tcase *evalop.Index:\n\t\tscope.evalIndex(op, stack)\n\n\tcase *evalop.Jump:\n\t\tscope.evalJump(op, stack)\n\n\tcase *evalop.Binary:\n\t\tscope.evalBinary(op, stack)\n\n\tcase *evalop.BoolToConst:\n\t\tx := stack.pop()\n\t\tif x.Kind != reflect.Bool {\n\t\t\tstack.err = errors.New(\"internal debugger error: expected boolean\")\n\t\t\treturn\n\t\t}\n\t\tx.loadValue(loadFullValue)\n\t\tstack.push(newConstant(x.Value, scope.BinInfo, scope.Mem))\n\n\tcase *evalop.Pop:\n\t\tstack.pop()\n\n\tcase *evalop.Roll:\n\t\trolled := stack.stack[len(stack.stack)-op.N-1]\n\t\tcopy(stack.stack[len(stack.stack)-op.N-1:], stack.stack[len(stack.stack)-op.N:])\n\t\tstack.stack[len(stack.stack)-1] = rolled\n\n\tcase *evalop.Dup:\n\t\tx := stack.stack[len(stack.stack)-1]\n\t\tstack.push(x)\n\n\tcase *evalop.BuiltinCall:\n\t\tvars := make([]*Variable, len(op.Args))\n\t\tfor i := len(op.Args) - 1; i >= 0; i-- {\n\t\t\tvars[i] = stack.pop()\n\t\t}\n\t\tstack.pushErr(supportedBuiltins[op.Name](vars, op.Args))\n\n\tcase *evalop.CallInjectionStart:\n\t\tscope.evalCallInjectionStart(op, stack)\n\n\tcase *evalop.CallInjectionSetTarget:\n\t\tscope.evalCallInjectionSetTarget(op, stack, curthread)\n\n\tcase *evalop.CallInjectionCopyArg:\n\t\tfncall := stack.fncallPeek()\n\t\tactualArg := stack.pop()\n\t\tif actualArg.Name == \"\" {\n\t\t\tactualArg.Name = astutil.ExprToString(op.ArgExpr)\n\t\t}\n\t\tstack.err = funcCallCopyOneArg(scope, fncall, actualArg, &fncall.formalArgs[op.ArgNum], curthread)\n\n\tcase *evalop.CallInjectionComplete:\n\t\tfncall := stack.fncallPeek()\n\t\tfncall.doPinning = op.DoPinning\n\t\tif op.DoPinning {\n\t\t\tfncall.undoInjection.doComplete2 = true\n\t\t} else {\n\t\t\tfncall.undoInjection = nil\n\t\t}\n\t\tstack.callInjectionContinue = true\n\n\tcase *evalop.CallInjectionComplete2:\n\t\tfncall := stack.fncallPeek()\n\t\tif len(fncall.addrsToPin) != 0 {\n\t\t\tstack.err = fmt.Errorf(\"internal debugger error: CallInjectionComplete2 called when there still are addresses to pin\")\n\t\t}\n\t\tfncall.undoInjection = nil\n\t\tregs, err := curthread.Registers()\n\t\tif err == nil {\n\t\t\tcallInjectionComplete2(scope, scope.BinInfo, fncall, regs, curthread)\n\t\t\tstack.callInjectionContinue = true\n\t\t} else {\n\t\t\tstack.err = err\n\t\t}\n\n\tcase *evalop.CallInjectionStartSpecial:\n\t\tstack.callInjectionContinue = scope.callInjectionStartSpecial(stack, op, curthread)\n\n\tcase *evalop.ConvertAllocToString:\n\t\tscope.convertAllocToString(stack)\n\n\tcase *evalop.SetValue:\n\t\tlhv := stack.pop()\n\t\trhv := stack.pop()\n\t\tstack.err = scope.setValue(lhv, rhv, astutil.ExprToString(op.Rhe))\n\n\tcase *evalop.PushPinAddress:\n\t\tdebugPinCount++\n\t\tfncall := stack.fncallPeek()\n\t\taddrToPin := fncall.addrsToPin[len(fncall.addrsToPin)-1]\n\t\tfncall.addrsToPin = fncall.addrsToPin[:len(fncall.addrsToPin)-1]\n\t\ttyp, err := scope.BinInfo.findType(\"unsafe.Pointer\")\n\t\tif ptyp, ok := typ.(*godwarf.PtrType); err == nil && ok {\n\t\t\tv := newVariable(\"\", 0, typ, scope.BinInfo, scope.Mem)\n\t\t\tv.Children = []Variable{*(newVariable(\"\", uint64(addrToPin), ptyp.Type, scope.BinInfo, scope.Mem))}\n\t\t\tstack.push(v)\n\t\t} else {\n\t\t\tstack.err = fmt.Errorf(\"can not pin address: %v\", err)\n\t\t}\n\n\tcase *evalop.SetDebugPinner:\n\t\tstack.debugPinner = stack.pop()\n\n\tcase *evalop.PushDebugPinner:\n\t\tstack.push(stack.debugPinner)\n\n\tcase *evalop.PushBreakpointHitCount:\n\t\tstack.push(newVariable(evalop.BreakpointHitCountVarNameQualified, fakeAddressUnresolv, godwarf.FakeSliceType(godwarf.FakeBasicType(\"uint\", 64)), scope.BinInfo, scope.Mem))\n\n\tcase *evalop.PushRuntimeType:\n\t\ttypeAddr, _, _, err := dwarfToRuntimeType(scope.BinInfo, scope.Mem, op.Type)\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\tbreak\n\t\t}\n\t\trttyp, err := scope.BinInfo.findType(scope.BinInfo.runtimeTypeTypename())\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\tbreak\n\t\t}\n\t\tv := newVariable(\"\", typeAddr, rttyp, scope.BinInfo, scope.Mem)\n\t\tstack.push(v.pointerToVariable())\n\n\tcase *evalop.PushNewFakeVariable:\n\t\tstack.pushNewFakeVariable(scope, op.Type)\n\n\tcase *evalop.DisableErrors:\n\t\tstack.disabledErrors = true\n\n\tdefault:\n\t\tstack.err = fmt.Errorf(\"internal debugger error: unknown eval opcode: %#v\", op)\n\t}\n\n\tstack.opidx++\n}\n\nfunc (stack *evalStack) pushLocal(scope *EvalScope, name string, frame int64) (found bool) {\n\tvar vars []*Variable\n\tvar err error\n\tif frame != 0 {\n\t\tframeScope, err2 := ConvertEvalScope(scope.target, -1, int(frame), 0)\n\t\tif err2 != nil {\n\t\t\tstack.err = err2\n\t\t\treturn\n\t\t}\n\t\tvars, err = frameScope.Locals(0, name)\n\t} else {\n\t\tvars, err = scope.Locals(0, name)\n\t}\n\tif err != nil {\n\t\tstack.err = err\n\t\treturn\n\t}\n\tfound = false\n\tfor i := range vars {\n\t\tif vars[i].Name == name && vars[i].Flags&VariableShadowed == 0 {\n\t\t\tstack.push(vars[i])\n\t\t\tfound = true\n\t\t\tbreak\n\t\t}\n\t}\n\treturn found\n}\n\nfunc (stack *evalStack) pushIdent(scope *EvalScope, name string) (found bool) {\n\tfound = stack.pushLocal(scope, name, 0)\n\tif found || stack.err != nil {\n\t\treturn found\n\t}\n\tv, err := scope.findGlobal(scope.Fn.PackageName(), name)\n\tif err != nil && !isSymbolNotFound(err) {\n\t\tstack.err = err\n\t\treturn false\n\t}\n\tif v != nil {\n\t\tv.Name = name\n\t\tstack.push(v)\n\t\treturn true\n\t}\n\n\tswitch name {\n\tcase \"true\", \"false\":\n\t\tstack.push(newConstant(constant.MakeBool(name == \"true\"), scope.BinInfo, scope.Mem))\n\t\treturn true\n\tcase \"nil\":\n\t\tstack.push(nilVariable)\n\t\treturn true\n\t}\n\n\tregname := validRegisterName(name)\n\tif regname == \"\" {\n\t\treturn false\n\t}\n\tregnum, ok := scope.BinInfo.Arch.RegisterNameToDwarf(regname)\n\tif !ok {\n\t\treturn false\n\t}\n\n\treg := scope.Regs.Reg(uint64(regnum))\n\tif reg == nil {\n\t\treturn\n\t}\n\treg.FillBytes()\n\n\tvar typ godwarf.Type\n\tif len(reg.Bytes) <= 8 {\n\t\ttyp = godwarf.FakeBasicType(\"uint\", 64)\n\t} else {\n\t\tvar err error\n\t\ttyp, err = scope.BinInfo.findType(\"string\")\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn false\n\t\t}\n\t}\n\n\tv = newVariable(regname, 0, typ, scope.BinInfo, scope.Mem)\n\tif v.Kind == reflect.String {\n\t\tv.Len = int64(len(reg.Bytes) * 2)\n\t\tv.Base = fakeAddressUnresolv\n\t}\n\tv.Addr = fakeAddressUnresolv\n\tv.Flags = VariableCPURegister\n\tv.reg = reg\n\tstack.push(v)\n\treturn true\n}\n\nfunc (stack *evalStack) pushNewFakeVariable(scope *EvalScope, typ godwarf.Type) {\n\tcm, err := CreateCompositeMemory(scope.Mem, scope.BinInfo.Arch, *new(op.DwarfRegisters), []op.Piece{{Kind: op.ImmPiece, Bytes: make([]byte, typ.Size()), Size: int(typ.Size())}}, typ.Size())\n\tif err != nil {\n\t\tstack.err = err\n\t\treturn\n\t}\n\tv := newVariable(\"\", cm.base, typ, scope.BinInfo, cm)\n\tv.Flags = VariableFakeAddress\n\tstack.push(v)\n}\n\nfunc (scope *EvalScope) evalAST(t ast.Expr) (*Variable, error) {\n\tops, err := evalop.CompileAST(scopeToEvalLookup{scope}, t, scope.evalopFlags())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstack := &evalStack{}\n\tstack.eval(scope, ops)\n\treturn stack.result(nil)\n}\n\nfunc (scope *EvalScope) evalJump(op *evalop.Jump, stack *evalStack) {\n\tvar x *Variable\n\n\tswitch op.When {\n\tcase evalop.JumpIfTrue, evalop.JumpIfFalse, evalop.JumpIfAllocStringChecksFail:\n\t\tx = stack.peek()\n\t\tif op.Pop {\n\t\t\tstack.pop()\n\t\t}\n\t}\n\n\tvar v bool\n\tswitch op.When {\n\tcase evalop.JumpIfTrue:\n\t\tv = true\n\tcase evalop.JumpIfFalse:\n\t\tv = false\n\tcase evalop.JumpIfAllocStringChecksFail:\n\t\tstringChecksFailed := x.Kind != reflect.String || x.Addr != 0 || x.Flags&VariableConstant == 0 || x.Len <= 0\n\t\tnilCallCtx := scope.callCtx == nil // do not complain here, setValue will if no other errors happen\n\t\tif stringChecksFailed || nilCallCtx {\n\t\t\tstack.opidx = op.Target - 1\n\t\t\treturn\n\t\t}\n\t\treturn\n\tcase evalop.JumpAlways:\n\t\tstack.opidx = op.Target - 1\n\t\treturn\n\tcase evalop.JumpIfPinningDone:\n\t\tfncall := stack.fncallPeek()\n\t\tif len(fncall.addrsToPin) == 0 {\n\t\t\tstack.opidx = op.Target - 1\n\t\t}\n\t\treturn\n\tdefault:\n\t\tpanic(\"internal error, bad jump condition\")\n\t}\n\n\tif x.Kind != reflect.Bool {\n\t\tif op.Node != nil {\n\t\t\tstack.err = fmt.Errorf(\"expression %q should be boolean not %s\", astutil.ExprToString(op.Node), x.Kind)\n\t\t} else {\n\t\t\tstack.err = errors.New(\"internal debugger error: expected boolean\")\n\t\t}\n\t\treturn\n\t}\n\tx.loadValue(loadFullValue)\n\tif x.Unreadable != nil {\n\t\tstack.err = x.Unreadable\n\t\treturn\n\t}\n\tif constant.BoolVal(x.Value) == v {\n\t\tstack.opidx = op.Target - 1\n\t}\n}\n\n// Eval type cast expressions\nfunc (scope *EvalScope) evalTypeCast(op *evalop.TypeCast, stack *evalStack) {\n\targv := stack.pop()\n\n\ttyp := godwarf.ResolveTypedef(op.DwarfType)\n\n\tconverr := fmt.Errorf(\"can not convert %q to %s\", astutil.ExprToString(op.Node.Args[0]), typ.String())\n\n\t// compatible underlying types\n\tif typeCastCompatibleTypes(argv.RealType, typ) {\n\t\tptyp, isptr := typ.(*godwarf.PtrType)\n\t\t_, isvoid := argv.DwarfType.(*godwarf.VoidType)\n\t\tif (argv.Kind == reflect.Ptr || isvoid) && argv.loaded && len(argv.Children) > 0 && isptr {\n\t\t\tcv := argv.Children[0]\n\t\t\targv.Children[0] = *newVariable(cv.Name, cv.Addr, ptyp.Type, cv.bi, cv.mem)\n\t\t\targv.Children[0].OnlyAddr = true\n\t\t}\n\t\targv.RealType = typ\n\t\targv.DwarfType = op.DwarfType\n\t\tif isptr {\n\t\t\targv.Kind = reflect.Ptr // could be converting from unsafe.Pointer\n\t\t}\n\t\tstack.push(argv)\n\t\treturn\n\t}\n\n\tv := newVariable(\"\", 0, op.DwarfType, scope.BinInfo, scope.Mem)\n\tv.loaded = true\n\n\tswitch ttyp := typ.(type) {\n\tcase *godwarf.PtrType:\n\t\tswitch argv.Kind {\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t// ok\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\t// ok\n\t\tdefault:\n\t\t\tstack.err = converr\n\t\t\treturn\n\t\t}\n\n\t\targv.loadValue(loadSingleValue)\n\t\tif argv.Unreadable != nil {\n\t\t\tstack.err = argv.Unreadable\n\t\t\treturn\n\t\t}\n\n\t\tn, _ := constant.Int64Val(argv.Value)\n\n\t\tmem := scope.Mem\n\t\tif scope.target != nil {\n\t\t\tif mem2 := scope.target.findFakeMemory(uint64(n)); mem2 != nil {\n\t\t\t\tmem = mem2\n\t\t\t}\n\t\t}\n\n\t\tv.Children = []Variable{*(newVariable(\"\", uint64(n), ttyp.Type, scope.BinInfo, mem))}\n\t\tv.Children[0].OnlyAddr = true\n\t\tstack.push(v)\n\t\treturn\n\n\tcase *godwarf.UintType:\n\t\targv.loadValue(loadSingleValue)\n\t\tif argv.Unreadable != nil {\n\t\t\tstack.err = argv.Unreadable\n\t\t\treturn\n\t\t}\n\t\tswitch argv.Kind {\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tn, _ := constant.Int64Val(argv.Value)\n\t\t\tv.Value = constant.MakeUint64(convertInt(uint64(n), false, ttyp.Size()))\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\tn, _ := constant.Uint64Val(argv.Value)\n\t\t\tv.Value = constant.MakeUint64(convertInt(n, false, ttyp.Size()))\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\tx, _ := constant.Float64Val(argv.Value)\n\t\t\tv.Value = constant.MakeUint64(uint64(x))\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\tcase reflect.Ptr:\n\t\t\tv.Value = constant.MakeUint64(argv.Children[0].Addr)\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\t}\n\tcase *godwarf.IntType:\n\t\targv.loadValue(loadSingleValue)\n\t\tif argv.Unreadable != nil {\n\t\t\tstack.err = argv.Unreadable\n\t\t\treturn\n\t\t}\n\t\tswitch argv.Kind {\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tn, _ := constant.Int64Val(argv.Value)\n\t\t\tv.Value = constant.MakeInt64(int64(convertInt(uint64(n), true, ttyp.Size())))\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\tn, _ := constant.Uint64Val(argv.Value)\n\t\t\tv.Value = constant.MakeInt64(int64(convertInt(n, true, ttyp.Size())))\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\tx, _ := constant.Float64Val(argv.Value)\n\t\t\tv.Value = constant.MakeInt64(int64(x))\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\t}\n\tcase *godwarf.FloatType:\n\t\targv.loadValue(loadSingleValue)\n\t\tif argv.Unreadable != nil {\n\t\t\tstack.err = argv.Unreadable\n\t\t\treturn\n\t\t}\n\t\tswitch argv.Kind {\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tfallthrough\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\tfallthrough\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\tv.Value = argv.Value\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\t}\n\tcase *godwarf.ComplexType:\n\t\targv.loadValue(loadSingleValue)\n\t\tif argv.Unreadable != nil {\n\t\t\tstack.err = argv.Unreadable\n\t\t\treturn\n\t\t}\n\t\tswitch argv.Kind {\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tfallthrough\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\tfallthrough\n\t\tcase reflect.Float32, reflect.Float64:\n\t\t\tv.Value = argv.Value\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\t}\n\t}\n\n\tcfg := loadFullValue\n\tif scope.loadCfg != nil {\n\t\tcfg = *scope.loadCfg\n\t}\n\n\tswitch ttyp := typ.(type) {\n\tcase *godwarf.SliceType:\n\t\tswitch ttyp.ElemType.Common().ReflectKind {\n\t\tcase reflect.Uint8:\n\t\t\t// string -> []uint8\n\t\t\tif argv.Kind != reflect.String {\n\t\t\t\tstack.err = converr\n\t\t\t\treturn\n\t\t\t}\n\t\t\tcfg.MaxStringLen = cfg.MaxArrayValues\n\t\t\targv.loadValue(cfg)\n\t\t\tif argv.Unreadable != nil {\n\t\t\t\tstack.err = argv.Unreadable\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfor i, ch := range []byte(constant.StringVal(argv.Value)) {\n\t\t\t\te := newVariable(\"\", argv.Addr+uint64(i), typ.(*godwarf.SliceType).ElemType, scope.BinInfo, argv.mem)\n\t\t\t\te.loaded = true\n\t\t\t\te.Value = constant.MakeInt64(int64(ch))\n\t\t\t\tv.Children = append(v.Children, *e)\n\t\t\t}\n\t\t\tv.Len = argv.Len\n\t\t\tv.Cap = v.Len\n\t\t\tstack.push(v)\n\t\t\treturn\n\n\t\tcase reflect.Int32:\n\t\t\t// string -> []rune\n\t\t\tif argv.Kind != reflect.String {\n\t\t\t\tstack.err = converr\n\t\t\t\treturn\n\t\t\t}\n\t\t\targv.loadValue(cfg)\n\t\t\tif argv.Unreadable != nil {\n\t\t\t\tstack.err = argv.Unreadable\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfor i, ch := range constant.StringVal(argv.Value) {\n\t\t\t\te := newVariable(\"\", argv.Addr+uint64(i), typ.(*godwarf.SliceType).ElemType, scope.BinInfo, argv.mem)\n\t\t\t\te.loaded = true\n\t\t\t\te.Value = constant.MakeInt64(int64(ch))\n\t\t\t\tv.Children = append(v.Children, *e)\n\t\t\t}\n\t\t\tv.Len = int64(len(v.Children))\n\t\t\tv.Cap = v.Len\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\t}\n\n\tcase *godwarf.StringType:\n\t\tswitch argv.Kind {\n\t\tcase reflect.String:\n\t\t\t// string -> string\n\t\t\targv.DwarfType = v.DwarfType\n\t\t\targv.RealType = v.RealType\n\t\t\tstack.push(argv)\n\t\t\treturn\n\t\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr:\n\t\t\t// integer -> string\n\t\t\targv.loadValue(cfg)\n\t\t\tif argv.Unreadable != nil {\n\t\t\t\tstack.err = argv.Unreadable\n\t\t\t\treturn\n\t\t\t}\n\t\t\tb, _ := constant.Int64Val(argv.Value)\n\t\t\ts := string(rune(b))\n\t\t\tv.Value = constant.MakeString(s)\n\t\t\tv.Len = int64(len(s))\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\tcase reflect.Slice, reflect.Array:\n\t\t\tvar elem godwarf.Type\n\t\t\tif argv.Kind == reflect.Slice {\n\t\t\t\telem = argv.RealType.(*godwarf.SliceType).ElemType\n\t\t\t} else {\n\t\t\t\telem = argv.RealType.(*godwarf.ArrayType).Type\n\t\t\t}\n\t\t\tswitch elemType := elem.(type) {\n\t\t\tcase *godwarf.UintType:\n\t\t\t\t// []uint8 -> string\n\t\t\t\tif elemType.Name != \"uint8\" && elemType.Name != \"byte\" {\n\t\t\t\t\tstack.err = converr\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcfg.MaxArrayValues = cfg.MaxStringLen\n\t\t\t\targv.loadValue(cfg)\n\t\t\t\tif argv.Unreadable != nil {\n\t\t\t\t\tstack.err = argv.Unreadable\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tbytes := make([]byte, len(argv.Children))\n\t\t\t\tfor i := range argv.Children {\n\t\t\t\t\tn, _ := constant.Int64Val(argv.Children[i].Value)\n\t\t\t\t\tbytes[i] = byte(n)\n\t\t\t\t}\n\t\t\t\tv.Value = constant.MakeString(string(bytes))\n\t\t\t\tv.Len = argv.Len\n\n\t\t\tcase *godwarf.IntType:\n\t\t\t\t// []rune -> string\n\t\t\t\tif elemType.Name != \"int32\" && elemType.Name != \"rune\" {\n\t\t\t\t\tstack.err = converr\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcfg.MaxArrayValues = cfg.MaxStringLen\n\t\t\t\targv.loadValue(cfg)\n\t\t\t\tif argv.Unreadable != nil {\n\t\t\t\t\tstack.err = argv.Unreadable\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\trunes := make([]rune, len(argv.Children))\n\t\t\t\tfor i := range argv.Children {\n\t\t\t\t\tn, _ := constant.Int64Val(argv.Children[i].Value)\n\t\t\t\t\trunes[i] = rune(n)\n\t\t\t\t}\n\t\t\t\tv.Value = constant.MakeString(string(runes))\n\t\t\t\t// The following line is wrong but the only way to get the correct value\n\t\t\t\t// would be to decode the entire slice.\n\t\t\t\tv.Len = int64(len(constant.StringVal(v.Value)))\n\n\t\t\tdefault:\n\t\t\t\tstack.err = converr\n\t\t\t\treturn\n\t\t\t}\n\t\t\tstack.push(v)\n\t\t\treturn\n\t\t}\n\t}\n\n\tstack.err = converr\n}\n\n// typeCastCompatibleTypes returns true if typ1 and typ2 are compatible for\n// a type cast where only the type of the variable is changed.\nfunc typeCastCompatibleTypes(typ1, typ2 godwarf.Type) bool {\n\tif typ1 == nil || typ2 == nil || typ1.Common().Size() != typ2.Common().Size() || typ1.Common().Align() != typ2.Common().Align() {\n\t\treturn false\n\t}\n\n\tif typ1.String() == typ2.String() {\n\t\treturn true\n\t}\n\n\tswitch ttyp1 := typ1.(type) {\n\tcase *godwarf.PtrType:\n\t\tif ttyp2, ok := typ2.(*godwarf.PtrType); ok {\n\t\t\t_, isvoid1 := ttyp1.Type.(*godwarf.VoidType)\n\t\t\t_, isvoid2 := ttyp2.Type.(*godwarf.VoidType)\n\t\t\tif isvoid1 || isvoid2 {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// pointer types are compatible if their element types are compatible\n\t\t\treturn typeCastCompatibleTypes(godwarf.ResolveTypedef(ttyp1.Type), godwarf.ResolveTypedef(ttyp2.Type))\n\t\t}\n\tcase *godwarf.StringType:\n\t\tif _, ok := typ2.(*godwarf.StringType); ok {\n\t\t\treturn true\n\t\t}\n\tcase *godwarf.StructType:\n\t\tif ttyp2, ok := typ2.(*godwarf.StructType); ok {\n\t\t\t// struct types are compatible if they have the same fields\n\t\t\tif len(ttyp1.Field) != len(ttyp2.Field) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tfor i := range ttyp1.Field {\n\t\t\t\tif *ttyp1.Field[i] != *ttyp2.Field[i] {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\tcase *godwarf.SliceType:\n\t\tif ttyp2, ok := typ2.(*godwarf.SliceType); ok {\n\t\t\treturn ttyp1.ElemType.String() == ttyp2.ElemType.String()\n\t\t}\n\tcase *godwarf.ComplexType:\n\t\tif _, ok := typ2.(*godwarf.ComplexType); ok {\n\t\t\t// size and alignment already checked above\n\t\t\treturn true\n\t\t}\n\tcase *godwarf.FloatType:\n\t\tif _, ok := typ2.(*godwarf.FloatType); ok {\n\t\t\t// size and alignment already checked above\n\t\t\treturn true\n\t\t}\n\tcase *godwarf.IntType:\n\t\tif _, ok := typ2.(*godwarf.IntType); ok {\n\t\t\t// size and alignment already checked above\n\t\t\treturn true\n\t\t}\n\tcase *godwarf.UintType:\n\t\tif _, ok := typ2.(*godwarf.UintType); ok {\n\t\t\t// size and alignment already checked above\n\t\t\treturn true\n\t\t}\n\tcase *godwarf.BoolType:\n\t\tif _, ok := typ2.(*godwarf.BoolType); ok {\n\t\t\t// size and alignment already checked above\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc convertInt(n uint64, signed bool, size int64) uint64 {\n\tbits := uint64(size) * 8\n\tmask := uint64((1 << bits) - 1)\n\tr := n & mask\n\tif signed && (r>>(bits-1)) != 0 {\n\t\t// sign extension\n\t\tr |= ^uint64(0) &^ mask\n\t}\n\treturn r\n}\n\nvar supportedBuiltins = map[string]func([]*Variable, []ast.Expr) (*Variable, error){\n\t\"cap\":     capBuiltin,\n\t\"len\":     lenBuiltin,\n\t\"complex\": complexBuiltin,\n\t\"imag\":    imagBuiltin,\n\t\"real\":    realBuiltin,\n\t\"min\":     minBuiltin,\n\t\"max\":     maxBuiltin,\n}\n\nfunc capBuiltin(args []*Variable, nodeargs []ast.Expr) (*Variable, error) {\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"wrong number of arguments to cap: %d\", len(args))\n\t}\n\n\targ := args[0]\n\tinvalidArgErr := fmt.Errorf(\"invalid argument %s (type %s) for cap\", astutil.ExprToString(nodeargs[0]), arg.TypeString())\n\n\tswitch arg.Kind {\n\tcase reflect.Ptr:\n\t\targ = arg.maybeDereference()\n\t\tif arg.Kind != reflect.Array {\n\t\t\treturn nil, invalidArgErr\n\t\t}\n\t\tfallthrough\n\tcase reflect.Array:\n\t\treturn newConstant(constant.MakeInt64(arg.Len), arg.bi, arg.mem), nil\n\tcase reflect.Slice:\n\t\treturn newConstant(constant.MakeInt64(arg.Cap), arg.bi, arg.mem), nil\n\tcase reflect.Chan:\n\t\targ.loadValue(loadFullValue)\n\t\tif arg.Unreadable != nil {\n\t\t\treturn nil, arg.Unreadable\n\t\t}\n\t\tif arg.Base == 0 {\n\t\t\treturn newConstant(constant.MakeInt64(0), arg.bi, arg.mem), nil\n\t\t}\n\t\treturn newConstant(arg.Children[1].Value, arg.bi, arg.mem), nil\n\tdefault:\n\t\treturn nil, invalidArgErr\n\t}\n}\n\nfunc lenBuiltin(args []*Variable, nodeargs []ast.Expr) (*Variable, error) {\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"wrong number of arguments to len: %d\", len(args))\n\t}\n\targ := args[0]\n\tinvalidArgErr := fmt.Errorf(\"invalid argument %s (type %s) for len\", astutil.ExprToString(nodeargs[0]), arg.TypeString())\n\n\tswitch arg.Kind {\n\tcase reflect.Ptr:\n\t\targ = arg.maybeDereference()\n\t\tif arg.Kind != reflect.Array {\n\t\t\treturn nil, invalidArgErr\n\t\t}\n\t\tfallthrough\n\tcase reflect.Array, reflect.Slice, reflect.String:\n\t\tif arg.Unreadable != nil {\n\t\t\treturn nil, arg.Unreadable\n\t\t}\n\t\treturn newConstant(constant.MakeInt64(arg.Len), arg.bi, arg.mem), nil\n\tcase reflect.Chan:\n\t\targ.loadValue(loadFullValue)\n\t\tif arg.Unreadable != nil {\n\t\t\treturn nil, arg.Unreadable\n\t\t}\n\t\tif arg.Base == 0 {\n\t\t\treturn newConstant(constant.MakeInt64(0), arg.bi, arg.mem), nil\n\t\t}\n\t\treturn newConstant(arg.Children[0].Value, arg.bi, arg.mem), nil\n\tcase reflect.Map:\n\t\tit := arg.mapIterator(0)\n\t\tif arg.Unreadable != nil {\n\t\t\treturn nil, arg.Unreadable\n\t\t}\n\t\tif it == nil {\n\t\t\treturn newConstant(constant.MakeInt64(0), arg.bi, arg.mem), nil\n\t\t}\n\t\treturn newConstant(constant.MakeInt64(arg.Len), arg.bi, arg.mem), nil\n\tdefault:\n\t\treturn nil, invalidArgErr\n\t}\n}\n\nfunc complexBuiltin(args []*Variable, nodeargs []ast.Expr) (*Variable, error) {\n\tif len(args) != 2 {\n\t\treturn nil, fmt.Errorf(\"wrong number of arguments to complex: %d\", len(args))\n\t}\n\n\trealev := args[0]\n\timagev := args[1]\n\n\trealev.loadValue(loadSingleValue)\n\timagev.loadValue(loadSingleValue)\n\n\tif realev.Unreadable != nil {\n\t\treturn nil, realev.Unreadable\n\t}\n\n\tif imagev.Unreadable != nil {\n\t\treturn nil, imagev.Unreadable\n\t}\n\n\tif realev.Value == nil || ((realev.Value.Kind() != constant.Int) && (realev.Value.Kind() != constant.Float)) {\n\t\treturn nil, fmt.Errorf(\"invalid argument 1 %s (type %s) to complex\", astutil.ExprToString(nodeargs[0]), realev.TypeString())\n\t}\n\n\tif imagev.Value == nil || ((imagev.Value.Kind() != constant.Int) && (imagev.Value.Kind() != constant.Float)) {\n\t\treturn nil, fmt.Errorf(\"invalid argument 2 %s (type %s) to complex\", astutil.ExprToString(nodeargs[1]), imagev.TypeString())\n\t}\n\n\tsz := int64(0)\n\tif realev.RealType != nil {\n\t\tsz = realev.RealType.(*godwarf.FloatType).Size()\n\t}\n\tif imagev.RealType != nil {\n\t\tisz := imagev.RealType.(*godwarf.FloatType).Size()\n\t\tif isz > sz {\n\t\t\tsz = isz\n\t\t}\n\t}\n\n\tif sz == 0 {\n\t\tsz = 128\n\t}\n\n\ttyp := godwarf.FakeBasicType(\"complex\", int(sz))\n\n\tr := realev.newVariable(\"\", 0, typ, nil)\n\tr.Value = constant.BinaryOp(realev.Value, token.ADD, constant.MakeImag(imagev.Value))\n\treturn r, nil\n}\n\nfunc imagBuiltin(args []*Variable, nodeargs []ast.Expr) (*Variable, error) {\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"wrong number of arguments to imag: %d\", len(args))\n\t}\n\n\targ := args[0]\n\targ.loadValue(loadSingleValue)\n\n\tif arg.Unreadable != nil {\n\t\treturn nil, arg.Unreadable\n\t}\n\n\tif arg.Kind != reflect.Complex64 && arg.Kind != reflect.Complex128 {\n\t\treturn nil, fmt.Errorf(\"invalid argument %s (type %s) to imag\", astutil.ExprToString(nodeargs[0]), arg.TypeString())\n\t}\n\n\treturn newConstant(constant.Imag(arg.Value), arg.bi, arg.mem), nil\n}\n\nfunc realBuiltin(args []*Variable, nodeargs []ast.Expr) (*Variable, error) {\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"wrong number of arguments to real: %d\", len(args))\n\t}\n\n\targ := args[0]\n\targ.loadValue(loadSingleValue)\n\n\tif arg.Unreadable != nil {\n\t\treturn nil, arg.Unreadable\n\t}\n\n\tif arg.Value == nil || ((arg.Value.Kind() != constant.Int) && (arg.Value.Kind() != constant.Float) && (arg.Value.Kind() != constant.Complex)) {\n\t\treturn nil, fmt.Errorf(\"invalid argument %s (type %s) to real\", astutil.ExprToString(nodeargs[0]), arg.TypeString())\n\t}\n\n\treturn newConstant(constant.Real(arg.Value), arg.bi, arg.mem), nil\n}\n\nfunc minBuiltin(args []*Variable, nodeargs []ast.Expr) (*Variable, error) {\n\treturn minmaxBuiltin(\"min\", token.LSS, args, nodeargs)\n}\n\nfunc maxBuiltin(args []*Variable, nodeargs []ast.Expr) (*Variable, error) {\n\treturn minmaxBuiltin(\"max\", token.GTR, args, nodeargs)\n}\n\nfunc minmaxBuiltin(name string, op token.Token, args []*Variable, nodeargs []ast.Expr) (*Variable, error) {\n\tvar best *Variable\n\n\tfor i := range args {\n\t\tif args[i].Kind == reflect.String {\n\t\t\targs[i].loadValue(loadFullValueLongerStrings)\n\t\t} else {\n\t\t\targs[i].loadValue(loadFullValue)\n\t\t}\n\n\t\tif args[i].Unreadable != nil {\n\t\t\treturn nil, fmt.Errorf(\"could not load %q: %v\", astutil.ExprToString(nodeargs[i]), args[i].Unreadable)\n\t\t}\n\t\tif args[i].FloatSpecial != 0 {\n\t\t\treturn nil, errOperationOnSpecialFloat\n\t\t}\n\n\t\tif best == nil {\n\t\t\tbest = args[i]\n\t\t\tcontinue\n\t\t}\n\n\t\t_, err := negotiateType(op, args[i], best)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tv, err := compareOp(op, args[i], best)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif v {\n\t\t\tbest = args[i]\n\t\t}\n\t}\n\n\tif best == nil {\n\t\treturn nil, fmt.Errorf(\"not enough arguments to %s\", name)\n\t}\n\treturn best, nil\n}\n\n// Evaluates expressions <subexpr>.<field name> where subexpr is not a package name\nfunc (scope *EvalScope) evalStructSelector(op *evalop.Select, stack *evalStack) {\n\txv := stack.pop()\n\t// Prevent abuse, attempting to call \"nil.member\" directly.\n\tif xv.Addr == 0 && xv.Name == \"nil\" {\n\t\tstack.err = fmt.Errorf(\"%s (type %s) is not a struct\", xv.Name, xv.TypeString())\n\t\treturn\n\t}\n\t// Prevent abuse, attempting to call \"\\\"fake\\\".member\" directly.\n\tif xv.Addr == 0 && xv.Name == \"\" && xv.DwarfType == nil && xv.RealType == nil {\n\t\tstack.err = fmt.Errorf(\"%s (type %s) is not a struct\", xv.Value, xv.TypeString())\n\t\treturn\n\t}\n\t// Special type conversions for CPU register variables (REGNAME.int8, etc)\n\tif xv.Flags&VariableCPURegister != 0 && !xv.loaded {\n\t\tstack.pushErr(xv.registerVariableTypeConv(op.Name))\n\t\treturn\n\t}\n\n\tstack.pushErr(xv.findStructMemberOrMethod(op.Name, true))\n}\n\n// Evaluates expressions <subexpr>.(<type>)\nfunc (scope *EvalScope) evalTypeAssert(op *evalop.TypeAssert, stack *evalStack) {\n\txv := stack.pop()\n\tif xv.Kind != reflect.Interface {\n\t\tstack.err = fmt.Errorf(\"expression %q not an interface\", astutil.ExprToString(op.Node.X))\n\t\treturn\n\t}\n\txv.loadInterface(0, false, loadFullValue)\n\tif xv.Unreadable != nil {\n\t\tstack.err = xv.Unreadable\n\t\treturn\n\t}\n\tif xv.Children[0].Unreadable != nil {\n\t\tstack.err = xv.Children[0].Unreadable\n\t\treturn\n\t}\n\tif xv.Children[0].Addr == 0 {\n\t\tstack.err = fmt.Errorf(\"interface conversion: %s is nil, not %s\", xv.DwarfType.String(), astutil.ExprToString(op.Node.Type))\n\t\treturn\n\t}\n\ttyp := op.DwarfType\n\tif typ != nil && xv.Children[0].DwarfType.Common().Name != typ.Common().Name {\n\t\tstack.err = fmt.Errorf(\"interface conversion: %s is %s, not %s\", xv.DwarfType.Common().Name, xv.Children[0].TypeString(), typ.Common().Name)\n\t\treturn\n\t}\n\t// loadInterface will set OnlyAddr for the data member since here we are\n\t// passing false to loadData, however returning the variable with OnlyAddr\n\t// set here would be wrong since, once the expression evaluation\n\t// terminates, the value of this variable will be loaded.\n\txv.Children[0].OnlyAddr = false\n\tstack.push(&xv.Children[0])\n}\n\n// Evaluates expressions <subexpr>[<subexpr>] (subscript access to arrays, slices and maps)\nfunc (scope *EvalScope) evalIndex(op *evalop.Index, stack *evalStack) {\n\tidxev := stack.pop()\n\txev := stack.pop()\n\tif xev.Unreadable != nil {\n\t\tstack.err = xev.Unreadable\n\t\treturn\n\t}\n\n\tif xev.Name == evalop.BreakpointHitCountVarNameQualified {\n\t\tif idxev.Kind == reflect.String {\n\t\t\ts := constant.StringVal(idxev.Value)\n\t\t\tthc, err := totalHitCountByName(scope.target.Breakpoints().Logical, s)\n\t\t\tif err == nil {\n\t\t\t\tstack.push(newConstant(constant.MakeUint64(thc), scope.BinInfo, scope.Mem))\n\t\t\t}\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tn, err := idxev.asInt()\n\t\tif err != nil {\n\t\t\tn2, err := idxev.asUint()\n\t\t\tif err != nil {\n\t\t\t\tstack.err = fmt.Errorf(\"can not index %s with %s\", xev.Name, astutil.ExprToString(op.Node.Index))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tn = int64(n2)\n\t\t}\n\t\tthc, err := totalHitCountByID(scope.target.Breakpoints().Logical, int(n))\n\t\tif err == nil {\n\t\t\tstack.push(newConstant(constant.MakeUint64(thc), scope.BinInfo, scope.Mem))\n\t\t}\n\t\tstack.err = err\n\t\treturn\n\t}\n\n\tif xev.Flags&VariableCPtr == 0 {\n\t\txev = xev.maybeDereference()\n\t}\n\n\tcantindex := fmt.Errorf(\"expression %q (%s) does not support indexing\", astutil.ExprToString(op.Node.X), xev.TypeString())\n\n\tswitch xev.Kind {\n\tcase reflect.Ptr:\n\t\tif xev == nilVariable {\n\t\t\tstack.err = cantindex\n\t\t\treturn\n\t\t}\n\t\tif xev.Flags&VariableCPtr == 0 {\n\t\t\t_, isarrptr := xev.RealType.(*godwarf.PtrType).Type.(*godwarf.ArrayType)\n\t\t\tif !isarrptr {\n\t\t\t\tstack.err = cantindex\n\t\t\t\treturn\n\t\t\t}\n\t\t\txev = xev.maybeDereference()\n\t\t}\n\t\tfallthrough\n\n\tcase reflect.Slice, reflect.Array, reflect.String:\n\t\tif xev.Base == 0 {\n\t\t\tstack.err = fmt.Errorf(\"can not index %q\", astutil.ExprToString(op.Node.X))\n\t\t\treturn\n\t\t}\n\t\tn, err := idxev.asInt()\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tstack.pushErr(xev.sliceAccess(int(n)))\n\t\treturn\n\n\tcase reflect.Map:\n\t\tidxev.loadValue(loadFullValue)\n\t\tif idxev.Unreadable != nil {\n\t\t\tstack.err = idxev.Unreadable\n\t\t\treturn\n\t\t}\n\t\tstack.pushErr(xev.mapAccess(idxev))\n\t\treturn\n\tdefault:\n\t\tstack.err = cantindex\n\t\treturn\n\t}\n}\n\n// Evaluates expressions <subexpr>[<subexpr>:<subexpr>]\n// HACK: slicing a map expression with [0:0] will return the whole map\nfunc (scope *EvalScope) evalReslice(op *evalop.Reslice, stack *evalStack) {\n\tlow, err := stack.pop().asInt()\n\tif err != nil {\n\t\tstack.err = err\n\t\treturn\n\t}\n\tvar high int64\n\tif op.HasHigh {\n\t\thigh, err = stack.pop().asInt()\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t}\n\txev := stack.pop()\n\tif xev.Unreadable != nil {\n\t\tstack.err = xev.Unreadable\n\t\treturn\n\t}\n\tif !op.HasHigh {\n\t\thigh = xev.Len\n\t}\n\n\tswitch xev.Kind {\n\tcase reflect.Slice, reflect.Array, reflect.String:\n\t\tif xev.Base == 0 {\n\t\t\tstack.err = fmt.Errorf(\"can not slice %q\", astutil.ExprToString(op.Node.X))\n\t\t\treturn\n\t\t}\n\t\tstack.pushErr(xev.reslice(low, high, op.TrustLen))\n\t\treturn\n\tcase reflect.Map:\n\t\tif op.Node.High != nil {\n\t\t\tstack.err = errors.New(\"second slice argument must be empty for maps\")\n\t\t\treturn\n\t\t}\n\t\txev.mapSkip += int(low)\n\t\txev.mapIterator(0) // reads map length\n\t\tif int64(xev.mapSkip) >= xev.Len {\n\t\t\tstack.err = errors.New(\"map index out of bounds\")\n\t\t\treturn\n\t\t}\n\t\tstack.push(xev)\n\t\treturn\n\tcase reflect.Ptr:\n\t\tif xev.Flags&VariableCPtr != 0 {\n\t\t\tstack.pushErr(xev.reslice(low, high, op.TrustLen))\n\t\t\treturn\n\t\t}\n\t\tfallthrough\n\tdefault:\n\t\tstack.err = fmt.Errorf(\"can not slice %q (type %s)\", astutil.ExprToString(op.Node.X), xev.TypeString())\n\t\treturn\n\t}\n}\n\n// Evaluates a pointer dereference expression: *<subexpr>\nfunc (scope *EvalScope) evalPointerDeref(op *evalop.PointerDeref, stack *evalStack) {\n\txev := stack.pop()\n\n\tif xev.Kind != reflect.Ptr {\n\t\tstack.err = fmt.Errorf(\"expression %q (%s) can not be dereferenced\", astutil.ExprToString(op.Node.X), xev.TypeString())\n\t\treturn\n\t}\n\n\tif xev == nilVariable {\n\t\tstack.err = errors.New(\"nil can not be dereferenced\")\n\t\treturn\n\t}\n\n\tif len(xev.Children) == 1 {\n\t\t// this branch is here to support pointers constructed with typecasts from ints\n\t\txev.Children[0].OnlyAddr = false\n\t\tstack.push(&(xev.Children[0]))\n\t\treturn\n\t}\n\txev.loadPtr()\n\tif xev.Unreadable != nil {\n\t\tval, ok := constant.Uint64Val(xev.Value)\n\t\tif ok && val == 0 {\n\t\t\tstack.err = fmt.Errorf(\"couldn't read pointer: %w\", xev.Unreadable)\n\t\t\treturn\n\t\t}\n\t}\n\trv := &xev.Children[0]\n\tif rv.Addr == 0 {\n\t\tstack.err = errors.New(\"nil pointer dereference\")\n\t\treturn\n\t}\n\tstack.push(rv)\n}\n\n// Evaluates expressions &<subexpr>\nfunc (scope *EvalScope) evalAddrOf(op *evalop.AddrOf, stack *evalStack) {\n\txev := stack.pop()\n\tif xev.Addr == 0 || xev.DwarfType == nil {\n\t\tstack.err = fmt.Errorf(\"can not take address of %q\", astutil.ExprToString(op.Node.X))\n\t\treturn\n\t}\n\n\tstack.push(xev.pointerToVariable())\n}\n\nfunc (v *Variable) pointerToVariable() *Variable {\n\tv.OnlyAddr = true\n\n\trv := v.newVariable(\"\", 0, godwarf.FakePointerType(v.DwarfType, int64(v.bi.Arch.PtrSize())), v.mem)\n\trv.Children = []Variable{*v}\n\trv.loaded = true\n\n\treturn rv\n}\n\nfunc constantUnaryOp(op token.Token, y constant.Value) (r constant.Value, err error) {\n\tdefer func() {\n\t\tif ierr := recover(); ierr != nil {\n\t\t\terr = fmt.Errorf(\"%v\", ierr)\n\t\t}\n\t}()\n\tr = constant.UnaryOp(op, y, 0)\n\treturn\n}\n\nfunc constantBinaryOp(op token.Token, x, y constant.Value) (r constant.Value, err error) {\n\tdefer func() {\n\t\tif ierr := recover(); ierr != nil {\n\t\t\terr = fmt.Errorf(\"%v\", ierr)\n\t\t}\n\t}()\n\tswitch op {\n\tcase token.SHL, token.SHR:\n\t\tn, _ := constant.Uint64Val(y)\n\t\tr = constant.Shift(x, op, uint(n))\n\tdefault:\n\t\tr = constant.BinaryOp(x, op, y)\n\t}\n\treturn\n}\n\nfunc constantCompare(op token.Token, x, y constant.Value) (r bool, err error) {\n\tdefer func() {\n\t\tif ierr := recover(); ierr != nil {\n\t\t\terr = fmt.Errorf(\"%v\", ierr)\n\t\t}\n\t}()\n\tr = constant.Compare(x, op, y)\n\treturn\n}\n\n// Evaluates expressions: -<subexpr> and +<subexpr>\nfunc (scope *EvalScope) evalUnary(op *evalop.Unary, stack *evalStack) {\n\txv := stack.pop()\n\n\txv.loadValue(loadSingleValue)\n\tif xv.Unreadable != nil {\n\t\tstack.err = xv.Unreadable\n\t\treturn\n\t}\n\tif xv.FloatSpecial != 0 {\n\t\tstack.err = errOperationOnSpecialFloat\n\t\treturn\n\t}\n\tif xv.Value == nil {\n\t\tstack.err = fmt.Errorf(\"operator %s can not be applied to %q\", op.Node.Op.String(), astutil.ExprToString(op.Node.X))\n\t\treturn\n\t}\n\trc, err := constantUnaryOp(op.Node.Op, xv.Value)\n\tif err != nil {\n\t\tstack.err = err\n\t\treturn\n\t}\n\tif xv.DwarfType != nil {\n\t\tr := xv.newVariable(\"\", 0, xv.DwarfType, scope.Mem)\n\t\tr.Value = rc\n\t\tstack.push(r)\n\t\treturn\n\t}\n\tstack.push(newConstant(rc, xv.bi, xv.mem))\n}\n\nfunc negotiateType(op token.Token, xv, yv *Variable) (godwarf.Type, error) {\n\tif xv == nilVariable {\n\t\treturn nil, negotiateTypeNil(op, yv)\n\t}\n\n\tif yv == nilVariable {\n\t\treturn nil, negotiateTypeNil(op, xv)\n\t}\n\n\tif op == token.SHR || op == token.SHL {\n\t\tif xv.Value == nil || xv.Value.Kind() != constant.Int {\n\t\t\treturn nil, fmt.Errorf(\"shift of type %s\", xv.Kind)\n\t\t}\n\n\t\tswitch yv.Kind {\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\t// ok\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tif constant.Sign(yv.Value) < 0 {\n\t\t\t\treturn nil, errors.New(\"shift count must not be negative\")\n\t\t\t}\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"shift count type %s, must be unsigned integer\", yv.Kind.String())\n\t\t}\n\n\t\treturn xv.DwarfType, nil\n\t}\n\n\tif xv.DwarfType == nil && yv.DwarfType == nil {\n\t\treturn nil, nil\n\t}\n\n\tif xv.DwarfType != nil && yv.DwarfType != nil {\n\t\tif xv.DwarfType.String() != yv.DwarfType.String() {\n\t\t\treturn nil, fmt.Errorf(\"mismatched types %q and %q\", xv.DwarfType.String(), yv.DwarfType.String())\n\t\t}\n\t\treturn xv.DwarfType, nil\n\t} else if xv.DwarfType != nil && yv.DwarfType == nil {\n\t\tif err := yv.isType(xv.DwarfType, xv.Kind); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn xv.DwarfType, nil\n\t} else if xv.DwarfType == nil && yv.DwarfType != nil {\n\t\tif err := xv.isType(yv.DwarfType, yv.Kind); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn yv.DwarfType, nil\n\t}\n\n\tpanic(\"unreachable\")\n}\n\nfunc negotiateTypeNil(op token.Token, v *Variable) error {\n\tif op != token.EQL && op != token.NEQ {\n\t\treturn fmt.Errorf(\"operator %s can not be applied to \\\"nil\\\"\", op.String())\n\t}\n\tswitch v.Kind {\n\tcase reflect.Ptr, reflect.UnsafePointer, reflect.Chan, reflect.Map, reflect.Interface, reflect.Slice, reflect.Func:\n\t\treturn nil\n\tdefault:\n\t\treturn fmt.Errorf(\"can not compare %s to nil\", v.Kind.String())\n\t}\n}\n\nfunc (scope *EvalScope) evalBinary(binop *evalop.Binary, stack *evalStack) {\n\tnode := binop.Node\n\n\tyv := stack.pop()\n\txv := stack.pop()\n\n\tif xv.Kind != reflect.String { // delay loading strings until we use them\n\t\txv.loadValue(loadFullValue)\n\t}\n\tif xv.Unreadable != nil {\n\t\tstack.err = xv.Unreadable\n\t\treturn\n\t}\n\tif yv.Kind != reflect.String { // delay loading strings until we use them\n\t\tyv.loadValue(loadFullValue)\n\t}\n\tif yv.Unreadable != nil {\n\t\tstack.err = yv.Unreadable\n\t\treturn\n\t}\n\n\tif xv.FloatSpecial != 0 || yv.FloatSpecial != 0 {\n\t\tstack.err = errOperationOnSpecialFloat\n\t\treturn\n\t}\n\n\ttyp, err := negotiateType(node.Op, xv, yv)\n\tif err != nil {\n\t\tstack.err = err\n\t\treturn\n\t}\n\n\top := node.Op\n\tif op == token.QUO {\n\t\tif typ != nil {\n\t\t\t_, isint := typ.(*godwarf.IntType)\n\t\t\t_, isuint := typ.(*godwarf.UintType)\n\t\t\tif isint || isuint {\n\t\t\t\t// forces integer division if the result type is integer\n\t\t\t\top = token.QUO_ASSIGN\n\t\t\t}\n\t\t} else {\n\t\t\tif xv.Value != nil && yv.Value != nil && xv.Value.Kind() == constant.Int && yv.Value.Kind() == constant.Int {\n\t\t\t\t// See issue #3793 and the specification at https://go.dev/ref/spec#Constant_expressions\n\t\t\t\t// in particular:\n\t\t\t\t//\n\t\t\t\t// \"If the untyped operands of a binary operation (other than a shift)\n\t\t\t\t// are of different kinds, the result is of the operand's kind that\n\t\t\t\t// appears later in this list: integer, rune, floating-point, complex\"\n\t\t\t\t//\n\t\t\t\t// However the go/constant package says that to get an integer result\n\t\t\t\t// from a division token.QUO_ASSIGN must be used.\n\t\t\t\top = token.QUO_ASSIGN\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch op {\n\tcase token.EQL, token.LSS, token.GTR, token.NEQ, token.LEQ, token.GEQ:\n\t\tv, err := compareOp(op, xv, yv)\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tstack.push(newConstant(constant.MakeBool(v), xv.bi, xv.mem))\n\n\tdefault:\n\t\tif xv.Kind == reflect.String {\n\t\t\txv.loadValue(loadFullValueLongerStrings)\n\t\t}\n\t\tif yv.Kind == reflect.String {\n\t\t\tyv.loadValue(loadFullValueLongerStrings)\n\t\t}\n\t\tif xv.Value == nil {\n\t\t\tstack.err = fmt.Errorf(\"operator %s can not be applied to %q\", node.Op.String(), astutil.ExprToString(node.X))\n\t\t\treturn\n\t\t}\n\n\t\tif yv.Value == nil {\n\t\t\tstack.err = fmt.Errorf(\"operator %s can not be applied to %q\", node.Op.String(), astutil.ExprToString(node.Y))\n\t\t\treturn\n\t\t}\n\n\t\trc, err := constantBinaryOp(op, xv.Value, yv.Value)\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\n\t\tif typ == nil {\n\t\t\tstack.push(newConstant(rc, xv.bi, xv.mem))\n\t\t\treturn\n\t\t}\n\n\t\tr := xv.newVariable(\"\", 0, typ, scope.Mem)\n\t\tr.Value = rc\n\t\tswitch r.Kind {\n\t\tcase reflect.String:\n\t\t\tr.Len = xv.Len + yv.Len\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tn, _ := constant.Int64Val(r.Value)\n\t\t\tr.Value = constant.MakeInt64(int64(convertInt(uint64(n), true, typ.Size())))\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:\n\t\t\tn, _ := constant.Uint64Val(r.Value)\n\t\t\tr.Value = constant.MakeUint64(convertInt(n, false, typ.Size()))\n\t\t}\n\t\tstack.push(r)\n\t}\n}\n\n// Compares xv to yv using operator op\n// Both xv and yv must be loaded and have a compatible type (as determined by negotiateType)\nfunc compareOp(op token.Token, xv *Variable, yv *Variable) (bool, error) {\n\tswitch xv.Kind {\n\tcase reflect.Bool:\n\t\tfallthrough\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tfallthrough\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tfallthrough\n\tcase reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128:\n\t\treturn constantCompare(op, xv.Value, yv.Value)\n\tcase reflect.String:\n\t\tif xv.Len != yv.Len {\n\t\t\tswitch op {\n\t\t\tcase token.EQL:\n\t\t\t\treturn false, nil\n\t\t\tcase token.NEQ:\n\t\t\t\treturn true, nil\n\t\t\t}\n\t\t}\n\t\tif xv.Kind == reflect.String {\n\t\t\txv.loadValue(loadFullValueLongerStrings)\n\t\t}\n\t\tif yv.Kind == reflect.String {\n\t\t\tyv.loadValue(loadFullValueLongerStrings)\n\t\t}\n\t\tif int64(len(constant.StringVal(xv.Value))) != xv.Len || int64(len(constant.StringVal(yv.Value))) != yv.Len {\n\t\t\treturn false, errors.New(\"string too long for comparison\")\n\t\t}\n\t\treturn constantCompare(op, xv.Value, yv.Value)\n\t}\n\n\tif op != token.EQL && op != token.NEQ {\n\t\treturn false, fmt.Errorf(\"operator %s not defined on %s\", op.String(), xv.Kind.String())\n\t}\n\n\tvar eql bool\n\tvar err error\n\n\tif xv == nilVariable {\n\t\tswitch op {\n\t\tcase token.EQL:\n\t\t\treturn yv.isNil(), nil\n\t\tcase token.NEQ:\n\t\t\treturn !yv.isNil(), nil\n\t\t}\n\t}\n\n\tif yv == nilVariable {\n\t\tswitch op {\n\t\tcase token.EQL:\n\t\t\treturn xv.isNil(), nil\n\t\tcase token.NEQ:\n\t\t\treturn !xv.isNil(), nil\n\t\t}\n\t}\n\n\tswitch xv.Kind {\n\tcase reflect.Ptr:\n\t\teql = xv.Children[0].Addr == yv.Children[0].Addr\n\tcase reflect.Array:\n\t\tif int64(len(xv.Children)) != xv.Len || int64(len(yv.Children)) != yv.Len {\n\t\t\treturn false, errors.New(\"array too long for comparison\")\n\t\t}\n\t\teql, err = equalChildren(xv, yv, true)\n\tcase reflect.Struct:\n\t\tif len(xv.Children) != len(yv.Children) {\n\t\t\treturn false, nil\n\t\t}\n\t\tif int64(len(xv.Children)) != xv.Len || int64(len(yv.Children)) != yv.Len {\n\t\t\treturn false, errors.New(\"structure too deep for comparison\")\n\t\t}\n\t\teql, err = equalChildren(xv, yv, false)\n\tcase reflect.Slice, reflect.Map, reflect.Func, reflect.Chan:\n\t\treturn false, fmt.Errorf(\"can not compare %s variables\", xv.Kind.String())\n\tcase reflect.Interface:\n\t\tif xv.Children[0].RealType.String() != yv.Children[0].RealType.String() {\n\t\t\teql = false\n\t\t} else {\n\t\t\teql, err = compareOp(token.EQL, &xv.Children[0], &yv.Children[0])\n\t\t}\n\tdefault:\n\t\treturn false, fmt.Errorf(\"unimplemented comparison of %s variables\", xv.Kind.String())\n\t}\n\n\tif op == token.NEQ {\n\t\treturn !eql, err\n\t}\n\treturn eql, err\n}\n\nfunc (v *Variable) isNil() bool {\n\tswitch v.Kind {\n\tcase reflect.Ptr:\n\t\treturn v.Children[0].Addr == 0\n\tcase reflect.Interface:\n\t\treturn v.Children[0].Addr == 0 && v.Children[0].Kind == reflect.Invalid\n\tcase reflect.Slice, reflect.Map, reflect.Func, reflect.Chan:\n\t\treturn v.Base == 0\n\t}\n\treturn false\n}\n\nfunc equalChildren(xv, yv *Variable, shortcircuit bool) (bool, error) {\n\tr := true\n\tfor i := range xv.Children {\n\t\teql, err := compareOp(token.EQL, &xv.Children[i], &yv.Children[i])\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tr = r && eql\n\t\tif !r && shortcircuit {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\treturn r, nil\n}\n\nfunc (v *Variable) asInt() (int64, error) {\n\tif v.DwarfType == nil {\n\t\tif v.Value.Kind() != constant.Int {\n\t\t\treturn 0, fmt.Errorf(\"can not convert constant %s to int\", v.Value)\n\t\t}\n\t} else {\n\t\tv.loadValue(loadSingleValue)\n\t\tif v.Unreadable != nil {\n\t\t\treturn 0, v.Unreadable\n\t\t}\n\t\tif _, ok := v.DwarfType.(*godwarf.IntType); !ok {\n\t\t\treturn 0, fmt.Errorf(\"can not convert value of type %s to int\", v.DwarfType.String())\n\t\t}\n\t}\n\tn, _ := constant.Int64Val(v.Value)\n\treturn n, nil\n}\n\nfunc (v *Variable) asUint() (uint64, error) {\n\tif v.DwarfType == nil {\n\t\tif v.Value.Kind() != constant.Int {\n\t\t\treturn 0, fmt.Errorf(\"can not convert constant %s to uint\", v.Value)\n\t\t}\n\t} else {\n\t\tv.loadValue(loadSingleValue)\n\t\tif v.Unreadable != nil {\n\t\t\treturn 0, v.Unreadable\n\t\t}\n\t\tif _, ok := v.DwarfType.(*godwarf.UintType); !ok {\n\t\t\treturn 0, fmt.Errorf(\"can not convert value of type %s to uint\", v.DwarfType.String())\n\t\t}\n\t}\n\tn, _ := constant.Uint64Val(v.Value)\n\treturn n, nil\n}\n\ntype typeConvErr struct {\n\tsrcType, dstType godwarf.Type\n}\n\nfunc (err *typeConvErr) Error() string {\n\treturn fmt.Sprintf(\"can not convert value of type %s to %s\", err.srcType.String(), err.dstType.String())\n}\n\nfunc (v *Variable) isType(typ godwarf.Type, kind reflect.Kind) error {\n\tif v.DwarfType != nil {\n\t\tif typ == nil || !sameType(typ, v.RealType) {\n\t\t\treturn &typeConvErr{v.DwarfType, typ}\n\t\t}\n\t\treturn nil\n\t}\n\n\tif typ == nil {\n\t\treturn nil\n\t}\n\n\tif v == nilVariable {\n\t\tswitch kind {\n\t\tcase reflect.Slice, reflect.Map, reflect.Func, reflect.Ptr, reflect.Chan, reflect.Interface:\n\t\t\treturn nil\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"mismatched types nil and %s\", typ.String())\n\t\t}\n\t}\n\n\tconverr := fmt.Errorf(\"can not convert %s constant to %s\", v.Value, typ.String())\n\n\tif v.Value == nil {\n\t\treturn converr\n\t}\n\n\tswitch typ.(type) {\n\tcase *godwarf.IntType:\n\t\tif v.Value.Kind() != constant.Int {\n\t\t\treturn converr\n\t\t}\n\tcase *godwarf.UintType:\n\t\tif v.Value.Kind() != constant.Int {\n\t\t\treturn converr\n\t\t}\n\tcase *godwarf.FloatType:\n\t\tif (v.Value.Kind() != constant.Int) && (v.Value.Kind() != constant.Float) {\n\t\t\treturn converr\n\t\t}\n\tcase *godwarf.BoolType:\n\t\tif v.Value.Kind() != constant.Bool {\n\t\t\treturn converr\n\t\t}\n\tcase *godwarf.StringType:\n\t\tif v.Value.Kind() != constant.String {\n\t\t\treturn converr\n\t\t}\n\tcase *godwarf.ComplexType:\n\t\tif v.Value.Kind() != constant.Complex && v.Value.Kind() != constant.Float && v.Value.Kind() != constant.Int {\n\t\t\treturn converr\n\t\t}\n\tdefault:\n\t\treturn converr\n\t}\n\n\treturn nil\n}\n\nfunc sameType(t1, t2 godwarf.Type) bool {\n\t// Because of a bug in the go linker a type that refers to another type\n\t// (for example a pointer type) will usually use the typedef but rarely use\n\t// the non-typedef entry directly.\n\t// For types that we read directly from go this is fine because it's\n\t// consistent, however we also synthesize some types ourselves\n\t// (specifically pointers and slices) and we always use a reference through\n\t// a typedef.\n\tt1 = godwarf.ResolveTypedef(t1)\n\tt2 = godwarf.ResolveTypedef(t2)\n\n\tif tt1, isptr1 := t1.(*godwarf.PtrType); isptr1 {\n\t\ttt2, isptr2 := t2.(*godwarf.PtrType)\n\t\tif !isptr2 {\n\t\t\treturn false\n\t\t}\n\t\treturn sameType(tt1.Type, tt2.Type)\n\t}\n\tif tt1, isslice1 := t1.(*godwarf.SliceType); isslice1 {\n\t\ttt2, isslice2 := t2.(*godwarf.SliceType)\n\t\tif !isslice2 {\n\t\t\treturn false\n\t\t}\n\t\treturn sameType(tt1.ElemType, tt2.ElemType)\n\t}\n\treturn t1.String() == t2.String()\n}\n\nfunc (v *Variable) sliceAccess(idx int) (*Variable, error) {\n\twrong := false\n\tif v.Flags&VariableCPtr == 0 {\n\t\twrong = idx < 0 || int64(idx) >= v.Len\n\t} else {\n\t\twrong = idx < 0\n\t}\n\tif wrong {\n\t\treturn nil, errors.New(\"index out of bounds\")\n\t}\n\tif v.loaded {\n\t\tif v.Kind == reflect.String {\n\t\t\ts := constant.StringVal(v.Value)\n\t\t\tif idx >= len(s) {\n\t\t\t\treturn nil, errors.New(\"index out of bounds\")\n\t\t\t}\n\t\t\tr := v.newVariable(\"\", v.Base+uint64(int64(idx)*v.stride), v.fieldType, v.mem)\n\t\t\tr.loaded = true\n\t\t\tr.Value = constant.MakeInt64(int64(s[idx]))\n\t\t\treturn r, nil\n\t\t} else {\n\t\t\tif idx >= len(v.Children) {\n\t\t\t\treturn nil, errors.New(\"index out of bounds\")\n\t\t\t}\n\t\t\treturn &v.Children[idx], nil\n\t\t}\n\t}\n\tmem := v.mem\n\tif v.Kind != reflect.Array {\n\t\tmem = DereferenceMemory(mem)\n\t}\n\treturn v.newVariable(\"\", v.Base+uint64(int64(idx)*v.stride), v.fieldType, mem), nil\n}\n\nfunc (v *Variable) mapAccess(idx *Variable) (*Variable, error) {\n\tit := v.mapIterator(0)\n\tif it == nil {\n\t\treturn nil, fmt.Errorf(\"can not access unreadable map: %v\", v.Unreadable)\n\t}\n\n\tlcfg := loadFullValue\n\tif idx.Kind == reflect.String && int64(len(constant.StringVal(idx.Value))) == idx.Len && idx.Len > int64(lcfg.MaxStringLen) {\n\t\t// If the index is a string load as much of the keys to at least match the length of the index.\n\t\t//TODO(aarzilli): when struct literals are implemented this needs to be\n\t\t//done recursively for literal struct fields.\n\t\tlcfg.MaxStringLen = int(idx.Len)\n\t}\n\n\tfirst := true\n\tfor it.next() {\n\t\tkey := it.key()\n\t\tkey.loadValue(lcfg)\n\t\tif key.Unreadable != nil {\n\t\t\treturn nil, fmt.Errorf(\"can not access unreadable map: %v\", key.Unreadable)\n\t\t}\n\t\tif first {\n\t\t\tfirst = false\n\t\t\tif err := idx.isType(key.RealType, key.Kind); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\teql, err := compareOp(token.EQL, key, idx)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif eql {\n\t\t\treturn it.value(), nil\n\t\t}\n\t}\n\tif v.Unreadable != nil {\n\t\treturn nil, v.Unreadable\n\t}\n\t// go would return zero for the map value type here, we do not have the ability to create zeroes\n\treturn nil, errors.New(\"key not found\")\n}\n\n// LoadResliced returns a new array, slice or map that starts at index start and contains\n// up to cfg.MaxArrayValues children.\nfunc (v *Variable) LoadResliced(start int, cfg LoadConfig) (newV *Variable, err error) {\n\tswitch v.Kind {\n\tcase reflect.Array, reflect.Slice:\n\t\tlow, high := int64(start), int64(start+cfg.MaxArrayValues)\n\t\tif high > v.Len {\n\t\t\thigh = v.Len\n\t\t}\n\t\tnewV, err = v.reslice(low, high, false)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase reflect.Map:\n\t\tnewV = v.clone()\n\t\tnewV.Children = nil\n\t\tnewV.loaded = false\n\t\tnewV.mapSkip = start\n\tdefault:\n\t\treturn nil, errors.New(\"variable to reslice is not an array, slice, or map\")\n\t}\n\tnewV.loadValue(cfg)\n\treturn newV, nil\n}\n\nfunc (v *Variable) reslice(low int64, high int64, trustLen bool) (*Variable, error) {\n\twrong := false\n\tcptrNeedsFakeSlice := false\n\tif v.Flags&VariableCPtr == 0 {\n\t\tif v.Kind == reflect.Slice {\n\t\t\twrong = low < 0 || low > v.Cap || high < 0 || high > v.Cap\n\t\t} else {\n\t\t\twrong = low < 0 || low > v.Len || high < 0 || high > v.Len\n\t\t}\n\t} else {\n\t\twrong = low < 0 || high < 0\n\t\tif high == 0 {\n\t\t\thigh = low\n\t\t}\n\t\tcptrNeedsFakeSlice = v.Kind != reflect.String\n\t}\n\tif wrong {\n\t\treturn nil, errors.New(\"index out of bounds\")\n\t}\n\n\tbase := v.Base + uint64(low*v.stride)\n\tlen := high - low\n\n\tif high-low < 0 {\n\t\treturn nil, errors.New(\"index out of bounds\")\n\t}\n\n\ttyp := v.DwarfType\n\tif _, isarr := v.DwarfType.(*godwarf.ArrayType); isarr || cptrNeedsFakeSlice {\n\t\ttyp = godwarf.FakeSliceType(v.fieldType)\n\t}\n\n\tmem := v.mem\n\tif v.Kind != reflect.Array {\n\t\tmem = DereferenceMemory(mem)\n\t}\n\n\tr := v.newVariable(\"\", 0, typ, mem)\n\tif v.Flags&VariableCPtr == 0 {\n\t\tr.Cap = v.Cap - low\n\t} else {\n\t\tr.Cap = len\n\t}\n\tr.Len = len\n\tr.Base = base\n\tr.stride = v.stride\n\tr.fieldType = v.fieldType\n\tr.Flags = v.Flags\n\tif trustLen {\n\t\tr.Flags |= variableTrustLen\n\t}\n\tr.reg = v.reg\n\n\treturn r, nil\n}\n\n// findStructMemberOrMethod finds struct member or method name in the type of variable v\nfunc (v *Variable) findStructMemberOrMethod(name string, includeStructMember bool) (*Variable, error) {\n\tif v.Unreadable != nil {\n\t\treturn v.clone(), nil\n\t}\n\tvname := v.Name\n\tif v.Name == \"\" {\n\t\tvname = v.DwarfType.String()\n\t}\n\tif v.loaded && (v.Flags&VariableFakeAddress) != 0 {\n\t\tfor i := range v.Children {\n\t\t\tif v.Children[i].Name == name {\n\t\t\t\treturn &v.Children[i], nil\n\t\t\t}\n\t\t}\n\t\treturn nil, fmt.Errorf(\"%s has no member %s\", vname, name)\n\t}\n\tclosure := false\n\tswitch v.Kind {\n\tcase reflect.Chan:\n\t\tv = v.clone()\n\t\tv.RealType = godwarf.ResolveTypedef(&(v.RealType.(*godwarf.ChanType).TypedefType))\n\tcase reflect.Interface:\n\t\tv.loadInterface(0, false, LoadConfig{})\n\t\tif len(v.Children) > 0 {\n\t\t\tv = &v.Children[0]\n\t\t}\n\tcase reflect.Func:\n\t\tfn := v.bi.PCToFunc(v.Base)\n\t\tv.loadFunctionPtr(0, LoadConfig{MaxVariableRecurse: -1})\n\t\tif v.Unreadable != nil {\n\t\t\tcst := fn.extra(v.bi).closureStructType\n\t\t\tif cst == nil || cst.ByteSize == 0 {\n\t\t\t\t// Not a closure, normal function\n\t\t\t\tif _, ok := v.bi.PackageMap[vname]; ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"package %s has no function %s\", vname, name)\n\t\t\t\t}\n\t\t\t\treturn nil, fmt.Errorf(\"%s has no member %s\", vname, name)\n\t\t\t}\n\t\t\treturn nil, v.Unreadable\n\t\t}\n\t\tif v.closureAddr != 0 {\n\t\t\tfn = v.bi.PCToFunc(v.Base)\n\t\t\tif fn != nil {\n\t\t\t\tcst := fn.extra(v.bi).closureStructType\n\t\t\t\tv = v.newVariable(v.Name, v.closureAddr, cst, v.mem)\n\t\t\t\tclosure = true\n\t\t\t}\n\t\t}\n\t}\n\n\tqueue := []*Variable{v}\n\tseen := map[string]struct{}{}\n\tfirst := true\n\n\tfor len(queue) > 0 {\n\t\tv := queue[0]\n\t\tqueue = append(queue[:0], queue[1:]...)\n\t\tif _, isseen := seen[v.RealType.String()]; isseen {\n\t\t\tcontinue\n\t\t}\n\t\tseen[v.RealType.String()] = struct{}{}\n\n\t\ttyp := v.DwarfType\n\t\tptyp, isptr := typ.(*godwarf.PtrType)\n\t\tif isptr {\n\t\t\ttyp = ptyp.Type\n\t\t}\n\n\t\tvar pkg, receiver string\n\t\ttypePath := typ.Common().Name\n\t\tdot := strings.LastIndex(typePath, \".\")\n\t\tif dot >= 0 {\n\t\t\tpkg, receiver = typePath[:dot], typePath[dot+1:]\n\t\t}\n\n\t\tif len(pkg) > 0 && len(receiver) > 0 {\n\t\t\trv, err := lookupMethod(v, isptr, pkg, receiver, name)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t} else if rv != nil {\n\t\t\t\treturn rv, nil\n\t\t\t}\n\t\t}\n\n\t\t// queue embedded fields for search\n\t\tstructVar := v.maybeDereference()\n\t\tstructVar.Name = v.Name\n\t\tif structVar.Unreadable != nil {\n\t\t\treturn structVar, nil\n\t\t}\n\t\tswitch t := structVar.RealType.(type) {\n\t\tcase *godwarf.StructType:\n\t\t\tfor _, field := range t.Field {\n\t\t\t\tif !includeStructMember {\n\t\t\t\t\tif !field.Embedded {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tembeddedVar, err := structVar.toField(field)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t\tqueue = append(queue, embeddedVar)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif field.Name == name {\n\t\t\t\t\treturn structVar.toField(field)\n\t\t\t\t}\n\t\t\t\tif len(queue) == 0 && field.Name == \"&\"+name && closure {\n\t\t\t\t\tf, err := structVar.toField(field)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t\treturn f.maybeDereference(), nil\n\t\t\t\t}\n\t\t\t\tif !field.Embedded {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tembeddedVar, err := structVar.toField(field)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\t// Check for embedded field referenced by type name\n\t\t\t\tparts := strings.Split(field.Name, \".\")\n\t\t\t\tif includeStructMember && len(parts) > 1 && parts[1] == name {\n\t\t\t\t\treturn embeddedVar, nil\n\t\t\t\t}\n\t\t\t\tembeddedVar.Name = structVar.Name\n\t\t\t\tqueue = append(queue, embeddedVar)\n\t\t\t}\n\t\tcase *godwarf.InterfaceType:\n\t\t\tv.loadInterface(0, false, LoadConfig{})\n\t\t\tif len(v.Children) > 0 {\n\t\t\t\tif rv, _ := v.Children[0].findStructMemberOrMethod(name, false); rv != nil {\n\t\t\t\t\treturn rv, nil\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tif first {\n\t\t\t\treturn nil, fmt.Errorf(\"%s (type %s) has no member %s\", vname, structVar.TypeString(), name)\n\t\t\t}\n\t\t}\n\t\tfirst = false\n\t}\n\n\treturn nil, fmt.Errorf(\"%s has no member %s\", vname, name)\n}\n\nfunc lookupMethod(v *Variable, isptr bool, pkg, receiver, name string) (*Variable, error) {\n\tchecks := []struct {\n\t\tfmt     string\n\t\tptrRecv bool\n\t}{\n\t\t{\"%s.(*%s).%s\", true},\n\t\t{\"%s.%s.%s\", false},\n\t}\n\tif !isptr {\n\t\tchecks[0], checks[1] = checks[1], checks[0]\n\t}\n\n\tfor _, check := range checks {\n\t\tif fns := v.bi.LookupFunc()[fmt.Sprintf(check.fmt, pkg, receiver, name)]; len(fns) == 1 {\n\t\t\tr, err := functionToVariable(fns[0], v.bi, v.mem)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tswitch {\n\t\t\tcase isptr == check.ptrRecv:\n\t\t\t\tr.Children = append(r.Children, *v)\n\t\t\tcase isptr && !check.ptrRecv:\n\t\t\t\tr.Children = append(r.Children, *(v.maybeDereference()))\n\t\t\tcase !isptr && check.ptrRecv:\n\t\t\t\tr.Children = append(r.Children, *(v.pointerToVariable()))\n\t\t\t}\n\t\t\treturn r, nil\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\nfunc functionToVariable(fn *Function, bi *BinaryInfo, mem MemoryReadWriter) (*Variable, error) {\n\ttyp, err := fn.fakeType(bi, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tv := newVariable(fn.Name, 0, typ, bi, mem)\n\tv.Value = constant.MakeString(fn.Name)\n\tv.loaded = true\n\tv.Base = fn.Entry\n\treturn v, nil\n}\n\nfunc fakeArrayType(n uint64, fieldType godwarf.Type) godwarf.Type {\n\tstride := alignAddr(fieldType.Common().ByteSize, fieldType.Align())\n\treturn &godwarf.ArrayType{\n\t\tCommonType: godwarf.CommonType{\n\t\t\tReflectKind: reflect.Array,\n\t\t\tByteSize:    int64(n) * stride,\n\t\t\tName:        fmt.Sprintf(\"[%d]%s\", n, fieldType.String())},\n\t\tType:          fieldType,\n\t\tStrideBitSize: stride * 8,\n\t\tCount:         int64(n)}\n}\n\nvar errMethodEvalUnsupported = errors.New(\"evaluating methods not supported on this version of Go\")\n\nfunc (fn *Function) fakeType(bi *BinaryInfo, removeReceiver bool) (*godwarf.FuncType, error) {\n\tif producer := bi.Producer(); producer == \"\" || !goversion.ProducerAfterOrEqual(producer, 1, 10) {\n\t\t// versions of Go prior to 1.10 do not distinguish between parameters and\n\t\t// return values, therefore we can't use a subprogram DIE to derive a\n\t\t// function type.\n\t\treturn nil, errMethodEvalUnsupported\n\t}\n\t_, formalArgs, err := funcCallArgs(fn, bi, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Only try and remove the receiver if it is actually being passed in as a formal argument.\n\t// In the case of:\n\t//\n\t// func (_ X) Method() { ... }\n\t//\n\t// that would not be true, the receiver is not used and thus\n\t// not being passed in as a formal argument.\n\t//\n\t// TODO(derekparker) This, I think, creates a new bug where\n\t// if the receiver is not passed in as a formal argument but\n\t// there are other arguments, such as:\n\t//\n\t// func (_ X) Method(i int) { ... }\n\t//\n\t// The first argument 'i int' will be removed. We must actually detect\n\t// here if the receiver is being used. While this is a bug, it's not a\n\t// functional bug, it only affects the string representation of the fake\n\t// function type we create. It's not really easy to tell here if we use\n\t// the receiver or not. Perhaps we should not perform this manipulation at all?\n\tif removeReceiver && len(formalArgs) > 0 {\n\t\tformalArgs = formalArgs[1:]\n\t}\n\n\targs := make([]string, 0, len(formalArgs))\n\trets := make([]string, 0, len(formalArgs))\n\n\tfor _, formalArg := range formalArgs {\n\t\tvar s string\n\t\tif strings.HasPrefix(formalArg.name, \"~\") {\n\t\t\ts = formalArg.typ.String()\n\t\t} else {\n\t\t\ts = fmt.Sprintf(\"%s %s\", formalArg.name, formalArg.typ.String())\n\t\t}\n\t\tif formalArg.isret {\n\t\t\trets = append(rets, s)\n\t\t} else {\n\t\t\targs = append(args, s)\n\t\t}\n\t}\n\n\targstr := strings.Join(args, \", \")\n\tvar retstr string\n\tswitch len(rets) {\n\tcase 0:\n\t\tretstr = \"\"\n\tcase 1:\n\t\tretstr = \" \" + rets[0]\n\tdefault:\n\t\tretstr = \" (\" + strings.Join(rets, \", \") + \")\"\n\t}\n\treturn &godwarf.FuncType{\n\t\tCommonType: godwarf.CommonType{\n\t\t\tName:        \"func(\" + argstr + \")\" + retstr,\n\t\t\tReflectKind: reflect.Func,\n\t\t},\n\t\t//TODO(aarzilli): at the moment we aren't using the ParamType and\n\t\t// ReturnType fields of FuncType anywhere (when this is returned to the\n\t\t// client it's first converted to a string and the function calling code\n\t\t// reads the subroutine entry because it needs to know the stack offsets).\n\t\t// If we start using them they should be filled here.\n\t}, nil\n}\n\nfunc validRegisterName(s string) string {\n\tfor len(s) > 0 && s[0] == '_' {\n\t\ts = s[1:]\n\t}\n\tfor i := range s {\n\t\tif (s[i] < '0' || s[i] > '9') && (s[i] < 'A' || s[i] > 'Z') {\n\t\t\treturn \"\"\n\t\t}\n\t}\n\treturn s\n}\n"
  },
  {
    "path": "pkg/proc/evalop/evalcompile.go",
    "content": "package evalop\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/constant\"\n\t\"go/parser\"\n\t\"go/scanner\"\n\t\"go/token\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/astutil\"\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/reader\"\n)\n\nvar (\n\tErrFuncCallNotAllowed         = errors.New(\"function calls not allowed without using 'call'\")\n\terrFuncCallNotAllowedLitAlloc = errors.New(\"literal can not be allocated because function calls are not allowed without using 'call'\")\n)\n\nconst (\n\tDelvePackage                       = \"delve\"\n\tBreakpointHitCountVarName          = \"bphitcount\"\n\tBreakpointHitCountVarNameQualified = DelvePackage + \".\" + BreakpointHitCountVarName\n\tDebugPinnerFunctionName            = \"runtime.debugPinnerV1\"\n)\n\ntype compileCtx struct {\n\tevalLookup\n\tops        []Op\n\tallowCalls bool\n\tcurCall    int\n\tflags      Flags\n\tpinnerUsed bool\n\thasCalls   bool\n}\n\ntype evalLookup interface {\n\tFindTypeExpr(ast.Expr) (godwarf.Type, error)\n\tHasBuiltin(string) bool\n\tPtrSize() int\n}\n\n// Flags describes flags used to control Compile and CompileAST\ntype Flags uint8\n\nconst (\n\tCanSet              Flags = 1 << iota // Assignment is allowed\n\tHasDebugPinner                        // runtime.debugPinner is available\n\tBreakpointCondition                   // This expression is used as a breakpoint condition\n)\n\n// CompileAST compiles the expression t into a list of instructions.\nfunc CompileAST(lookup evalLookup, t ast.Expr, flags Flags) ([]Op, error) {\n\tctx := &compileCtx{evalLookup: lookup, allowCalls: true, flags: flags}\n\terr := ctx.compileAST(t, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.compileDebugPinnerSetupTeardown()\n\n\terr = ctx.depthCheck(1)\n\tif err != nil {\n\t\treturn ctx.ops, err\n\t}\n\treturn ctx.ops, nil\n}\n\n// Compile compiles the expression expr into a list of instructions.\n// If canSet is true expressions like \"x = y\" are also accepted.\nfunc Compile(lookup evalLookup, expr string, flags Flags) ([]Op, error) {\n\tt, err := parser.ParseExpr(expr)\n\tif err != nil {\n\t\tif flags&CanSet != 0 {\n\t\t\teqOff, isAs := isAssignment(err)\n\t\t\tif isAs {\n\t\t\t\treturn CompileSet(lookup, expr[:eqOff], expr[eqOff+1:], flags)\n\t\t\t}\n\t\t}\n\t\treturn nil, err\n\t}\n\treturn CompileAST(lookup, t, flags)\n}\n\nfunc isAssignment(err error) (int, bool) {\n\tel, isScannerErr := err.(scanner.ErrorList)\n\tif isScannerErr && el[0].Msg == \"expected '==', found '='\" {\n\t\treturn el[0].Pos.Offset, true\n\t}\n\treturn 0, false\n}\n\n// CompileSet compiles the expression setting lhexpr to rhexpr into a list of\n// instructions.\nfunc CompileSet(lookup evalLookup, lhexpr, rhexpr string, flags Flags) ([]Op, error) {\n\tlhe, err := parser.ParseExpr(lhexpr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\trhe, err := parser.ParseExpr(rhexpr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx := &compileCtx{evalLookup: lookup, allowCalls: true, flags: flags}\n\terr = ctx.compileAST(rhe, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = ctx.maybeMaterialize(rhe)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = ctx.compileAST(lhe, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.pushOp(&SetValue{lhe: lhe, Rhe: rhe})\n\n\tctx.compileDebugPinnerSetupTeardown()\n\n\terr = ctx.depthCheck(0)\n\tif err != nil {\n\t\treturn ctx.ops, err\n\t}\n\treturn ctx.ops, nil\n}\n\nfunc (ctx *compileCtx) compileAllocLiteralString() {\n\tjmp := &Jump{When: JumpIfAllocStringChecksFail}\n\tctx.pushOp(jmp)\n\n\tctx.compileSpecialCall(\"runtime.mallocgc\", []ast.Expr{\n\t\t&ast.BasicLit{Kind: token.INT, Value: \"0\"},\n\t\t&ast.Ident{Name: \"nil\"},\n\t\t&ast.Ident{Name: \"false\"},\n\t}, []Op{\n\t\t&PushLen{},\n\t\t&PushNil{},\n\t\t&PushConst{constant.MakeBool(false)},\n\t}, specialCallDoPinning|specialCallIsStringAlloc)\n\n\tctx.pushOp(&ConvertAllocToString{})\n\tjmp.Target = len(ctx.ops)\n}\n\ntype specialCallFlags uint8\n\nconst (\n\tspecialCallDoPinning specialCallFlags = 1 << iota\n\tspecialCallIsStringAlloc\n\tspecialCallComplainAboutStringAlloc\n)\n\nfunc (ctx *compileCtx) compileSpecialCall(fnname string, argAst []ast.Expr, args []Op, flags specialCallFlags) {\n\tdoPinning := flags&specialCallDoPinning != 0\n\n\tid := ctx.curCall\n\tctx.curCall++\n\tctx.pushOp(&CallInjectionStartSpecial{\n\t\tid:     id,\n\t\tFnName: fnname,\n\t\tArgAst: argAst,\n\n\t\tComplainAboutStringAlloc: flags&specialCallComplainAboutStringAlloc != 0})\n\tctx.pushOp(&CallInjectionSetTarget{id: id})\n\n\tfor i := range args {\n\t\tif args[i] != nil {\n\t\t\tctx.pushOp(args[i])\n\t\t}\n\t\tctx.pushOp(&CallInjectionCopyArg{id: id, ArgNum: i})\n\t}\n\n\tdoPinning = doPinning && (ctx.flags&HasDebugPinner != 0)\n\n\tif doPinning {\n\t\tctx.pinnerUsed = true\n\t\tif flags&specialCallIsStringAlloc == 0 {\n\t\t\tctx.hasCalls = true\n\t\t}\n\t}\n\n\tctx.pushOp(&CallInjectionComplete{id: id, DoPinning: doPinning})\n\n\tif doPinning {\n\t\tctx.compilePinningLoop(id)\n\t}\n}\n\nfunc (ctx *compileCtx) compileDebugPinnerSetupTeardown() {\n\tif !ctx.pinnerUsed {\n\t\treturn\n\t}\n\n\t// Prepend debug pinner allocation\n\tmainops := ctx.ops\n\tctx.ops = []Op{}\n\tflags := specialCallFlags(0)\n\tif !ctx.hasCalls {\n\t\tflags = specialCallComplainAboutStringAlloc\n\t}\n\tctx.compileSpecialCall(DebugPinnerFunctionName, []ast.Expr{}, []Op{}, flags)\n\tctx.pushOp(&SetDebugPinner{})\n\n\t// Adjust jump destinations\n\tfor _, op := range mainops {\n\t\tswitch op := op.(type) {\n\t\tcase *Jump:\n\t\t\top.Target += len(ctx.ops)\n\t\t}\n\t}\n\n\tctx.ops = append(ctx.ops, mainops...)\n\n\t// Append debug pinner deallocation\n\tctx.compileSpecialCall(\"runtime.(*Pinner).Unpin\", []ast.Expr{\n\t\t&ast.Ident{Name: \"debugPinner\"},\n\t}, []Op{\n\t\t&PushDebugPinner{},\n\t}, 0)\n\tctx.pushOp(&Pop{})\n\tctx.pushOp(&PushNil{})\n\tctx.pushOp(&SetDebugPinner{})\n}\n\nfunc (ctx *compileCtx) pushOp(op Op) {\n\tctx.ops = append(ctx.ops, op)\n}\n\n// depthCheck validates the list of instructions produced by Compile and\n// CompileSet by performing a stack depth check.\n// It calculates the depth of the stack at every instruction in ctx.ops and\n// checks that they have enough arguments to execute. For instructions that\n// can be reached through multiple paths (because of a jump) it checks that\n// all paths reach the instruction with the same stack depth.\n// Finally it checks that the stack depth after all instructions have\n// executed is equal to endDepth.\nfunc (ctx *compileCtx) depthCheck(endDepth int) error {\n\tdepth := make([]int, len(ctx.ops)+1) // depth[i] is the depth of the stack before i-th instruction\n\tfor i := range depth {\n\t\tdepth[i] = -1\n\t}\n\tdepth[0] = 0\n\n\tvar err error\n\tcheckAndSet := func(j, d int) { // sets depth[j] to d after checking that we can\n\t\tif depth[j] < 0 {\n\t\t\tdepth[j] = d\n\t\t}\n\t\tif d != depth[j] {\n\t\t\terr = fmt.Errorf(\"internal debugger error: depth check error at instruction %d: expected depth %d have %d (jump target)\\n%s\", j, d, depth[j], Listing(depth, ctx.ops))\n\t\t}\n\t}\n\n\tdebugPinnerSeen := false\n\n\tfor i, op := range ctx.ops {\n\t\tnpop, npush := op.depthCheck()\n\t\tif depth[i] < npop {\n\t\t\treturn fmt.Errorf(\"internal debugger error: depth check error at instruction %d: expected at least %d have %d\\n%s\", i, npop, depth[i], Listing(depth, ctx.ops))\n\t\t}\n\t\td := depth[i] - npop + npush\n\t\tcheckAndSet(i+1, d)\n\t\tswitch op := op.(type) {\n\t\tcase *Jump:\n\t\t\tcheckAndSet(op.Target, d)\n\t\tcase *CallInjectionStartSpecial:\n\t\t\tdebugPinnerSeen = true\n\t\tcase *CallInjectionComplete:\n\t\t\tif op.DoPinning && !debugPinnerSeen {\n\t\t\t\terr = fmt.Errorf(\"internal debugger error: pinning call injection seen before call to %s at instruction %d\", DebugPinnerFunctionName, i)\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif depth[len(ctx.ops)] != endDepth {\n\t\treturn fmt.Errorf(\"internal debugger error: depth check failed: depth at the end is not %d (got %d)\\n%s\", depth[len(ctx.ops)], endDepth, Listing(depth, ctx.ops))\n\t}\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compileAST(t ast.Expr, toplevel bool) error {\n\tswitch node := t.(type) {\n\tcase *ast.CallExpr:\n\t\tif f, ok := node.Fun.(*ast.SelectorExpr); ok && ctx.flags&BreakpointCondition != 0 {\n\t\t\tconst catch = \"catch\"\n\t\t\tif ident, ok := f.X.(*ast.Ident); ok && ident.Name == DelvePackage && f.Sel.Name == catch {\n\t\t\t\tif !toplevel {\n\t\t\t\t\treturn fmt.Errorf(\"%s.%s can only be used at toplevel\", DelvePackage, catch)\n\t\t\t\t}\n\t\t\t\tif len(node.Args) != 1 {\n\t\t\t\t\treturn fmt.Errorf(\"wrong number of arguments for %s.%s\", DelvePackage, catch)\n\t\t\t\t}\n\t\t\t\tctx.pushOp(&DisableErrors{})\n\t\t\t\treturn ctx.compileAST(node.Args[0], false)\n\t\t\t}\n\t\t}\n\t\treturn ctx.compileTypeCastOrFuncCall(node, toplevel)\n\n\tcase *ast.Ident:\n\t\treturn ctx.compileIdent(node)\n\n\tcase *ast.ParenExpr:\n\t\t// otherwise just eval recursively\n\t\treturn ctx.compileAST(node.X, false)\n\n\tcase *ast.SelectorExpr: // <expression>.<identifier>\n\t\tswitch x := node.X.(type) {\n\t\tcase *ast.Ident:\n\t\t\tswitch {\n\t\t\tcase x.Name == \"runtime\" && node.Sel.Name == \"curg\":\n\t\t\t\tctx.pushOp(&PushCurg{})\n\n\t\t\tcase x.Name == \"runtime\" && node.Sel.Name == \"frameoff\":\n\t\t\t\tctx.pushOp(&PushFrameoff{})\n\n\t\t\tcase x.Name == \"runtime\" && node.Sel.Name == \"threadid\":\n\t\t\t\tctx.pushOp(&PushThreadID{})\n\n\t\t\tcase x.Name == \"runtime\" && node.Sel.Name == \"rangeParentOffset\":\n\t\t\t\tctx.pushOp(&PushRangeParentOffset{})\n\n\t\t\tcase x.Name == DelvePackage && node.Sel.Name == BreakpointHitCountVarName:\n\t\t\t\tctx.pushOp(&PushBreakpointHitCount{})\n\n\t\t\tdefault:\n\t\t\t\tctx.pushOp(&PushPackageVarOrSelect{Name: x.Name, Sel: node.Sel.Name})\n\t\t\t}\n\n\t\tcase *ast.CallExpr:\n\t\t\tident, ok := x.Fun.(*ast.SelectorExpr)\n\t\t\tif ok {\n\t\t\t\tf, ok := ident.X.(*ast.Ident)\n\t\t\t\tif ok && f.Name == \"runtime\" && ident.Sel.Name == \"frame\" {\n\t\t\t\t\tif len(x.Args) != 1 {\n\t\t\t\t\t\treturn fmt.Errorf(\"wrong number of arguments for runtime.frame\")\n\t\t\t\t\t}\n\t\t\t\t\tswitch arg := x.Args[0].(type) {\n\t\t\t\t\tcase *ast.BasicLit:\n\t\t\t\t\t\tfr, err := strconv.ParseInt(arg.Value, 10, 8)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn err\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Push local onto the stack to be evaluated in the new frame context.\n\t\t\t\t\t\tctx.pushOp(&PushLocal{Name: node.Sel.Name, Frame: fr})\n\t\t\t\t\t\treturn nil\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn fmt.Errorf(\"expected integer value for frame, got %v\", arg)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn ctx.compileUnary(node.X, &Select{node.Sel.Name})\n\n\t\tcase *ast.BasicLit: // try to accept \"package/path\".varname syntax for package variables\n\t\t\ts, err := strconv.Unquote(x.Value)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tctx.pushOp(&PushPackageVarOrSelect{Name: s, Sel: node.Sel.Name, NameIsString: true})\n\n\t\tdefault:\n\t\t\treturn ctx.compileUnary(node.X, &Select{node.Sel.Name})\n\t\t}\n\n\tcase *ast.TypeAssertExpr: // <expression>.(<type>)\n\t\treturn ctx.compileTypeAssert(node)\n\n\tcase *ast.IndexExpr:\n\t\treturn ctx.compileBinary(node.X, node.Index, nil, &Index{node})\n\n\tcase *ast.SliceExpr:\n\t\tif node.Slice3 {\n\t\t\treturn errors.New(\"3-index slice expressions not supported\")\n\t\t}\n\t\treturn ctx.compileReslice(node)\n\n\tcase *ast.StarExpr:\n\t\t// pointer dereferencing *<expression>\n\t\treturn ctx.compileUnary(node.X, &PointerDeref{node})\n\n\tcase *ast.UnaryExpr:\n\t\t// The unary operators we support are +, - and & (note that unary * is parsed as ast.StarExpr)\n\t\tswitch node.Op {\n\t\tcase token.AND:\n\t\t\treturn ctx.compileUnary(node.X, &AddrOf{node})\n\t\tdefault:\n\t\t\treturn ctx.compileUnary(node.X, &Unary{node})\n\t\t}\n\n\tcase *ast.BinaryExpr:\n\t\tswitch node.Op {\n\t\tcase token.INC, token.DEC, token.ARROW:\n\t\t\treturn fmt.Errorf(\"operator %s not supported\", node.Op.String())\n\t\t}\n\t\t// short circuits logical operators\n\t\tvar sop *Jump\n\t\tswitch node.Op {\n\t\tcase token.LAND:\n\t\t\tsop = &Jump{When: JumpIfFalse, Node: node.X}\n\t\tcase token.LOR:\n\t\t\tsop = &Jump{When: JumpIfTrue, Node: node.X}\n\t\t}\n\t\terr := ctx.compileBinary(node.X, node.Y, sop, &Binary{node})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif sop != nil {\n\t\t\tsop.Target = len(ctx.ops)\n\t\t\tctx.pushOp(&BoolToConst{})\n\t\t}\n\n\tcase *ast.BasicLit:\n\t\tctx.pushOp(&PushConst{constant.MakeFromLiteral(node.Value, node.Kind, 0)})\n\n\tcase *ast.CompositeLit:\n\t\tnotimplerr := fmt.Errorf(\"expression %T not implemented\", t)\n\t\tif ctx.flags&HasDebugPinner == 0 {\n\t\t\treturn notimplerr\n\t\t}\n\t\tdtyp, err := ctx.FindTypeExpr(node.Type)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttyp := godwarf.ResolveTypedef(dtyp)\n\t\tswitch typ := typ.(type) {\n\t\tcase *godwarf.StructType:\n\t\t\tif !ctx.allowCalls {\n\t\t\t\treturn errFuncCallNotAllowedLitAlloc\n\t\t\t}\n\n\t\t\tctx.pushOp(&PushNewFakeVariable{Type: dtyp})\n\n\t\t\tfor i, elt := range node.Elts {\n\t\t\t\tctx.pushOp(&Dup{})\n\n\t\t\t\tvar rhe ast.Expr\n\t\t\t\tswitch elt := elt.(type) {\n\t\t\t\tcase *ast.KeyValueExpr:\n\t\t\t\t\tctx.pushOp(&Select{Name: elt.Key.(*ast.Ident).Name})\n\t\t\t\t\trhe = elt.Value\n\t\t\t\t\terr := ctx.compileAST(elt.Value, false)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\terr = ctx.maybeMaterialize(elt.Value)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tctx.pushOp(&Select{Name: typ.Field[i].Name})\n\t\t\t\t\trhe = elt\n\t\t\t\t\terr := ctx.compileAST(elt, false)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\terr = ctx.maybeMaterialize(elt)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tctx.pushOp(&Roll{1})\n\t\t\t\tctx.pushOp(&SetValue{Rhe: rhe})\n\t\t\t}\n\n\t\tcase *godwarf.SliceType:\n\t\t\treturn notimplerr\n\n\t\tcase *godwarf.MapType:\n\t\t\treturn notimplerr\n\n\t\tcase *godwarf.ArrayType:\n\t\t\treturn notimplerr\n\n\t\tdefault:\n\t\t\treturn notimplerr\n\t\t}\n\n\tdefault:\n\t\treturn fmt.Errorf(\"expression %T not implemented\", t)\n\t}\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compileTypeCastOrFuncCall(node *ast.CallExpr, toplevel bool) error {\n\tif len(node.Args) != 1 {\n\t\t// Things that have more or less than one argument are always function calls.\n\t\treturn ctx.compileFunctionCall(node, toplevel)\n\t}\n\n\tambiguous := func() error {\n\t\t// Ambiguous, could be a function call or a type cast, if node.Fun can be\n\t\t// evaluated then try to treat it as a function call, otherwise try the\n\t\t// type cast.\n\t\tctx2 := &compileCtx{evalLookup: ctx.evalLookup}\n\t\terr0 := ctx2.compileAST(node.Fun, false)\n\t\tif err0 == nil {\n\t\t\treturn ctx.compileFunctionCall(node, toplevel)\n\t\t}\n\t\treturn ctx.compileTypeCast(node, err0)\n\t}\n\n\tfnnode := node.Fun\n\tfor {\n\t\tfnnode = removeParen(fnnode)\n\t\tn, _ := fnnode.(*ast.StarExpr)\n\t\tif n == nil {\n\t\t\tbreak\n\t\t}\n\t\tfnnode = n.X\n\t}\n\n\tswitch n := fnnode.(type) {\n\tcase *ast.BasicLit:\n\t\t// It can only be a (\"type string\")(x) type cast\n\t\treturn ctx.compileTypeCast(node, nil)\n\tcase *ast.ArrayType, *ast.StructType, *ast.FuncType, *ast.InterfaceType, *ast.MapType, *ast.ChanType:\n\t\treturn ctx.compileTypeCast(node, nil)\n\tcase *ast.SelectorExpr:\n\t\tif _, isident := n.X.(*ast.Ident); isident {\n\t\t\tif typ, _ := ctx.FindTypeExpr(n); typ != nil {\n\t\t\t\treturn ctx.compileTypeCast(node, nil)\n\t\t\t}\n\t\t\treturn ambiguous()\n\t\t}\n\t\treturn ctx.compileFunctionCall(node, toplevel)\n\tcase *ast.Ident:\n\t\tif typ, _ := ctx.FindTypeExpr(n); typ != nil {\n\t\t\treturn ctx.compileTypeCast(node, fmt.Errorf(\"could not find symbol value for %s\", n.Name))\n\t\t}\n\t\treturn ctx.compileFunctionCall(node, toplevel)\n\tcase *ast.IndexExpr:\n\t\t// Ambiguous, could be a parametric type\n\t\tswitch n.X.(type) {\n\t\tcase *ast.Ident, *ast.SelectorExpr:\n\t\t\t// Do the type-cast first since evaluating node.Fun could be expensive.\n\t\t\terr := ctx.compileTypeCast(node, nil)\n\t\t\tif err == nil || err != reader.ErrTypeNotFound {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn ctx.compileFunctionCall(node, toplevel)\n\t\tdefault:\n\t\t\treturn ctx.compileFunctionCall(node, toplevel)\n\t\t}\n\tcase *ast.IndexListExpr:\n\t\treturn ctx.compileTypeCast(node, nil)\n\tdefault:\n\t\t// All other expressions must be function calls\n\t\treturn ctx.compileFunctionCall(node, toplevel)\n\t}\n}\n\nfunc (ctx *compileCtx) compileTypeCast(node *ast.CallExpr, ambiguousErr error) error {\n\terr := ctx.compileAST(node.Args[0], false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfnnode := node.Fun\n\n\t// remove all enclosing parenthesis from the type name\n\tfnnode = removeParen(fnnode)\n\n\ttargetTypeStr := astutil.ExprToString(removeParen(node.Fun))\n\tstyp, err := ctx.FindTypeExpr(fnnode)\n\tif err != nil {\n\t\tswitch targetTypeStr {\n\t\tcase \"[]byte\", \"[]uint8\":\n\t\t\tstyp = godwarf.FakeSliceType(godwarf.FakeBasicType(\"uint\", 8))\n\t\tcase \"[]int32\", \"[]rune\":\n\t\t\tstyp = godwarf.FakeSliceType(godwarf.FakeBasicType(\"int\", 32))\n\t\tdefault:\n\t\t\tif ambiguousErr != nil && err == reader.ErrTypeNotFound {\n\t\t\t\treturn fmt.Errorf(\"could not evaluate function or type %s: %v\", astutil.ExprToString(node.Fun), ambiguousErr)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tctx.pushOp(&TypeCast{DwarfType: styp, Node: node})\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compileBuiltinCall(builtin string, args []ast.Expr) error {\n\tfor _, arg := range args {\n\t\terr := ctx.compileAST(arg, false)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tctx.pushOp(&BuiltinCall{builtin, args})\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compileIdent(node *ast.Ident) error {\n\tctx.pushOp(&PushIdent{node.Name})\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compileUnary(expr ast.Expr, op Op) error {\n\terr := ctx.compileAST(expr, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\tctx.pushOp(op)\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compileTypeAssert(node *ast.TypeAssertExpr) error {\n\terr := ctx.compileAST(node.X, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\t// Accept .(data) as a type assertion that always succeeds, so that users\n\t// can access the data field of an interface without actually having to\n\t// type the concrete type.\n\tif idtyp, isident := node.Type.(*ast.Ident); !isident || idtyp.Name != \"data\" {\n\t\ttyp, err := ctx.FindTypeExpr(node.Type)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.pushOp(&TypeAssert{typ, node})\n\t\treturn nil\n\t}\n\tctx.pushOp(&TypeAssert{nil, node})\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compileBinary(a, b ast.Expr, sop *Jump, op Op) error {\n\terr := ctx.compileAST(a, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif sop != nil {\n\t\tctx.pushOp(sop)\n\t}\n\terr = ctx.compileAST(b, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\tctx.pushOp(op)\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compileReslice(node *ast.SliceExpr) error {\n\terr := ctx.compileAST(node.X, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttrustLen := true\n\thasHigh := false\n\tif node.High != nil {\n\t\thasHigh = true\n\t\terr = ctx.compileAST(node.High, false)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, isbasiclit := node.High.(*ast.BasicLit)\n\t\ttrustLen = trustLen && isbasiclit\n\t} else {\n\t\ttrustLen = false\n\t}\n\n\tif node.Low != nil {\n\t\terr = ctx.compileAST(node.Low, false)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, isbasiclit := node.Low.(*ast.BasicLit)\n\t\ttrustLen = trustLen && isbasiclit\n\t} else {\n\t\tctx.pushOp(&PushConst{constant.MakeInt64(0)})\n\t}\n\n\tctx.pushOp(&Reslice{Node: node, HasHigh: hasHigh, TrustLen: trustLen})\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compileFunctionCall(node *ast.CallExpr, toplevel bool) error {\n\tif fnnode, ok := node.Fun.(*ast.Ident); ok {\n\t\tif ctx.HasBuiltin(fnnode.Name) {\n\t\t\treturn ctx.compileBuiltinCall(fnnode.Name, node.Args)\n\t\t}\n\t}\n\tif !ctx.allowCalls {\n\t\treturn ErrFuncCallNotAllowed\n\t}\n\n\tid := ctx.curCall\n\tctx.curCall++\n\n\tif ctx.flags&HasDebugPinner != 0 {\n\t\treturn ctx.compileFunctionCallWithPinning(node, id, toplevel)\n\t}\n\n\treturn ctx.compileFunctionCallNoPinning(node, id)\n}\n\n// compileFunctionCallNoPinning compiles a function call when runtime.debugPinner is\n// not available in the target.\nfunc (ctx *compileCtx) compileFunctionCallNoPinning(node *ast.CallExpr, id int) error {\n\toldAllowCalls := ctx.allowCalls\n\toldOps := ctx.ops\n\tctx.allowCalls = false\n\terr := ctx.compileAST(node.Fun, false)\n\tctx.allowCalls = oldAllowCalls\n\thasFunc := false\n\tif err != nil {\n\t\tctx.ops = oldOps\n\t\tif err != ErrFuncCallNotAllowed {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\thasFunc = true\n\t}\n\tctx.pushOp(&CallInjectionStart{HasFunc: hasFunc, id: id, Node: node})\n\n\t// CallInjectionStart pushes true on the stack if it needs the function argument re-evaluated\n\tvar jmpif *Jump\n\tif hasFunc {\n\t\tjmpif = &Jump{When: JumpIfFalse, Pop: true}\n\t\tctx.pushOp(jmpif)\n\t}\n\tctx.pushOp(&Pop{})\n\terr = ctx.compileAST(node.Fun, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif jmpif != nil {\n\t\tjmpif.Target = len(ctx.ops)\n\t}\n\n\tctx.pushOp(&CallInjectionSetTarget{id: id})\n\n\tfor i, arg := range node.Args {\n\t\terr := ctx.compileAST(arg, false)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error evaluating %q as argument %d in function %s: %v\", astutil.ExprToString(arg), i+1, astutil.ExprToString(node.Fun), err)\n\t\t}\n\t\terr = ctx.maybeMaterialize(arg)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.pushOp(&CallInjectionCopyArg{id: id, ArgNum: i, ArgExpr: arg})\n\t}\n\n\tctx.pushOp(&CallInjectionComplete{id: id})\n\n\treturn nil\n}\n\n// compileFunctionCallWithPinning compiles a function call when runtime.debugPinner\n// is available in the target.\nfunc (ctx *compileCtx) compileFunctionCallWithPinning(node *ast.CallExpr, id int, toplevel bool) error {\n\tif !toplevel {\n\t\tctx.pinnerUsed = true\n\t}\n\tctx.hasCalls = true\n\n\terr := ctx.compileAST(node.Fun, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor i, arg := range node.Args {\n\t\terr := ctx.compileAST(arg, false)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error evaluating %q as argument %d in function %s: %v\", astutil.ExprToString(arg), i+1, astutil.ExprToString(node.Fun), err)\n\t\t}\n\t\terr = ctx.maybeMaterialize(arg)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tctx.pushOp(&Roll{len(node.Args)})\n\tctx.pushOp(&CallInjectionStart{HasFunc: true, id: id, Node: node})\n\tctx.pushOp(&Pop{})\n\tctx.pushOp(&CallInjectionSetTarget{id: id})\n\n\tfor i := len(node.Args) - 1; i >= 0; i-- {\n\t\targ := node.Args[i]\n\t\tctx.pushOp(&CallInjectionCopyArg{id: id, ArgNum: i, ArgExpr: arg})\n\t}\n\n\tctx.pushOp(&CallInjectionComplete{id: id, DoPinning: !toplevel})\n\n\tif !toplevel {\n\t\tctx.compilePinningLoop(id)\n\t}\n\n\treturn nil\n}\n\nfunc (ctx *compileCtx) compilePinningLoop(id int) {\n\tloopStart := len(ctx.ops)\n\tjmp := &Jump{When: JumpIfPinningDone}\n\tctx.pushOp(jmp)\n\tctx.pushOp(&PushPinAddress{})\n\tctx.compileSpecialCall(\"runtime.(*Pinner).Pin\", []ast.Expr{\n\t\t&ast.Ident{Name: \"debugPinner\"},\n\t\t&ast.Ident{Name: \"pinAddress\"},\n\t}, []Op{\n\t\t&PushDebugPinner{},\n\t\tnil,\n\t}, 0)\n\tctx.pushOp(&Pop{})\n\tctx.pushOp(&Jump{When: JumpAlways, Target: loopStart})\n\tjmp.Target = len(ctx.ops)\n\tctx.pushOp(&CallInjectionComplete2{id: id})\n}\n\n// If expr will produce a string literal or a pointer to a literal allocate\n// it into the target program's address space.\nfunc (ctx *compileCtx) maybeMaterialize(expr ast.Expr) error {\n\tif isStringLiteralThatNeedsAlloc(expr) {\n\t\tctx.compileAllocLiteralString()\n\t\treturn nil\n\t}\n\n\texpr = removeParen(expr)\n\taddrof, isunary := expr.(*ast.UnaryExpr)\n\tif !isunary || addrof.Op != token.AND {\n\t\treturn nil\n\t}\n\tlit, iscomplit := addrof.X.(*ast.CompositeLit)\n\tif !iscomplit {\n\t\treturn nil\n\t}\n\n\tdtyp, err := ctx.FindTypeExpr(lit.Type)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch godwarf.ResolveTypedef(dtyp).(type) {\n\tcase *godwarf.StructType, *godwarf.ArrayType:\n\t\tif _, isaddrof := ctx.ops[len(ctx.ops)-1].(*AddrOf); isaddrof {\n\t\t\tctx.ops = ctx.ops[:len(ctx.ops)-1]\n\t\t} else {\n\t\t\tctx.pushOp(&PointerDeref{&ast.StarExpr{X: &ast.Ident{Name: \"unallocated-literal\"}}})\n\t\t}\n\n\t\tctx.compileSpecialCall(\"runtime.mallocgc\", []ast.Expr{\n\t\t\t&ast.BasicLit{Kind: token.INT, Value: \"1\"},\n\t\t\tlit.Type,\n\t\t\t&ast.Ident{Name: \"true\"},\n\t\t}, []Op{\n\t\t\t&PushConst{Value: constant.MakeInt64(1)},\n\t\t\t&PushRuntimeType{dtyp},\n\t\t\t&PushConst{Value: constant.MakeBool(true)},\n\t\t}, specialCallDoPinning)\n\t\tctx.pushOp(&TypeCast{\n\t\t\tDwarfType: godwarf.FakePointerType(dtyp, int64(ctx.PtrSize())),\n\t\t\tNode: &ast.CallExpr{\n\t\t\t\tFun:  lit.Type,\n\t\t\t\tArgs: []ast.Expr{&ast.Ident{Name: \"new allocation\"}}}})\n\n\t\txderef := &ast.StarExpr{X: &ast.Ident{Name: \"new-allocation\"}}\n\t\txset := &ast.Ident{Name: \"literal-allocation\"}\n\n\t\tctx.pushOp(&Dup{})                // stack after: [ ptrToRealLiteral, ptrToRealLiteral, fakeLiteral ]\n\t\tctx.pushOp(&PointerDeref{xderef}) // stack after: [ realLiteral, ptrToRealLiteral, fakeLiteral ]\n\t\tctx.pushOp(&Roll{2})              // stack after: [ fakeLiteral, realLiteral, ptrToRealLiteral ]\n\t\tctx.pushOp(&Roll{1})              // stack after: [ realLiteral, fakeLiteral, ptrToRealLiteral ]\n\t\tctx.pushOp(&SetValue{Rhe: xset})  // stack after: [ ptrToRealLiteral ]\n\t\treturn nil\n\n\tdefault:\n\t\t// either *godwarf.MapType, *godwarf.SliceType or *godwarf.FuncType\n\t\treturn fmt.Errorf(\"allocating a literal of type %s not implemented\", dtyp.String())\n\t}\n\n}\n\nfunc Listing(depth []int, ops []Op) string {\n\tif depth == nil {\n\t\tdepth = make([]int, len(ops)+1)\n\t}\n\tbuf := new(strings.Builder)\n\tfor i, op := range ops {\n\t\tfmt.Fprintf(buf, \" %3d  (%2d->%2d) %#v\\n\", i, depth[i], depth[i+1], op)\n\t}\n\treturn buf.String()\n}\n\nfunc isStringLiteralThatNeedsAlloc(expr ast.Expr) bool {\n\tswitch expr := expr.(type) {\n\tcase *ast.BasicLit:\n\t\treturn expr.Kind == token.STRING && expr.Value != `\"\"`\n\tcase *ast.BinaryExpr:\n\t\tif expr.Op == token.ADD {\n\t\t\treturn isStringLiteralThatNeedsAlloc(expr.X) && isStringLiteralThatNeedsAlloc(expr.Y)\n\t\t}\n\tcase *ast.ParenExpr:\n\t\treturn isStringLiteralThatNeedsAlloc(expr.X)\n\t}\n\treturn false\n}\n\nfunc removeParen(n ast.Expr) ast.Expr {\n\tfor {\n\t\tp, ok := n.(*ast.ParenExpr)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tn = p.X\n\t}\n\treturn n\n}\n"
  },
  {
    "path": "pkg/proc/evalop/evalop_test.go",
    "content": "package evalop\n\nimport (\n\t\"go/ast\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"testing\"\n)\n\nfunc assertNoError(err error, t testing.TB, s string) {\n\tt.Helper()\n\tif err != nil {\n\t\tt.Fatalf(\"failed assertion %s: %s\\n\", s, err)\n\t}\n}\n\nfunc TestEvalSwitchExhaustiveness(t *testing.T) {\n\t// Checks that the switch statement in (*EvalScope).executeOp of\n\t// pkg/proc/eval.go exhaustively covers all implementations of the\n\t// evalop.Op interface.\n\n\tops := make(map[string]bool)\n\n\tvar fset, fset2 token.FileSet\n\tf, err := parser.ParseFile(&fset, \"ops.go\", nil, 0)\n\tassertNoError(err, t, \"ParseFile\")\n\tfor _, decl := range f.Decls {\n\t\tdecl, _ := decl.(*ast.FuncDecl)\n\t\tif decl == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif decl.Name.Name != \"depthCheck\" {\n\t\t\tcontinue\n\t\t}\n\t\tops[decl.Recv.List[0].Type.(*ast.StarExpr).X.(*ast.Ident).Name] = false\n\t}\n\n\tf, err = parser.ParseFile(&fset2, \"../eval.go\", nil, 0)\n\tassertNoError(err, t, \"ParseFile\")\n\tfor _, decl := range f.Decls {\n\t\tdecl, _ := decl.(*ast.FuncDecl)\n\t\tif decl == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif decl.Name.Name != \"executeOp\" {\n\t\t\tcontinue\n\t\t}\n\t\tast.Inspect(decl, func(n ast.Node) bool {\n\t\t\tsw, _ := n.(*ast.TypeSwitchStmt)\n\t\t\tif sw == nil {\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tfor _, c := range sw.Body.List {\n\t\t\t\tif len(c.(*ast.CaseClause).List) == 0 {\n\t\t\t\t\t// default clause\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tsel := c.(*ast.CaseClause).List[0].(*ast.StarExpr).X.(*ast.SelectorExpr)\n\t\t\t\tif sel.X.(*ast.Ident).Name != \"evalop\" {\n\t\t\t\t\tt.Fatalf(\"wrong case statement at: %v\", fset2.Position(sel.Pos()))\n\t\t\t\t}\n\n\t\t\t\tops[sel.Sel.Name] = true\n\t\t\t}\n\t\t\treturn false\n\t\t})\n\t}\n\n\tfor op := range ops {\n\t\tif !ops[op] {\n\t\t\tt.Errorf(\"evalop.Op %s not used in executeOp\", op)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/evalop/ops.go",
    "content": "package evalop\n\nimport (\n\t\"go/ast\"\n\t\"go/constant\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n)\n\n// Op is a stack machine opcode\ntype Op interface {\n\tdepthCheck() (npop, npush int)\n}\n\n// PushCurg pushes the current goroutine on the stack.\ntype PushCurg struct {\n}\n\nfunc (*PushCurg) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushFrameoff pushes the frame offset for the current frame on the stack.\ntype PushFrameoff struct {\n}\n\nfunc (*PushFrameoff) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushThreadID pushes the ID of the current thread on the stack.\ntype PushThreadID struct {\n}\n\nfunc (*PushThreadID) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushRangeParentOffset pushes the frame offset of the range-over-func closure body parent.\ntype PushRangeParentOffset struct {\n}\n\nfunc (*PushRangeParentOffset) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushConst pushes a constant on the stack.\ntype PushConst struct {\n\tValue constant.Value\n}\n\nfunc (*PushConst) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushLocal pushes the local variable with the given name on the stack.\ntype PushLocal struct {\n\tName  string\n\tFrame int64\n}\n\nfunc (*PushLocal) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushIdent pushes a local or global variable or a predefined identifier\n// (true, false, etc) or the value of a register on the stack.\ntype PushIdent struct {\n\tName string\n}\n\nfunc (*PushIdent) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushPackageVarOrSelect pushes the value of Name.Sel on the stack, which\n// could either be a global variable (with the package name specified), or a\n// field of a local variable.\ntype PushPackageVarOrSelect struct {\n\tName, Sel    string\n\tNameIsString bool\n}\n\nfunc (*PushPackageVarOrSelect) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushNil pushes an untyped nil on the stack.\ntype PushNil struct {\n}\n\nfunc (*PushNil) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushLen pushes the length of the variable at the top of the stack into\n// the stack.\ntype PushLen struct {\n}\n\nfunc (*PushLen) depthCheck() (npop, npush int) { return 1, 2 }\n\n// Select replaces the topmost stack variable v with v.Name.\ntype Select struct {\n\tName string\n}\n\nfunc (*Select) depthCheck() (npop, npush int) { return 1, 1 }\n\n// TypeAssert replaces the topmost stack variable v with v.(DwarfType).\ntype TypeAssert struct {\n\tDwarfType godwarf.Type\n\tNode      *ast.TypeAssertExpr\n}\n\nfunc (*TypeAssert) depthCheck() (npop, npush int) { return 1, 1 }\n\n// PointerDeref replaces the topmost stack variable v with *v.\ntype PointerDeref struct {\n\tNode *ast.StarExpr\n}\n\nfunc (*PointerDeref) depthCheck() (npop, npush int) { return 1, 1 }\n\n// Unary applies the given unary operator to the topmost stack variable.\ntype Unary struct {\n\tNode *ast.UnaryExpr\n}\n\nfunc (*Unary) depthCheck() (npop, npush int) { return 1, 1 }\n\n// AddrOf replaces the topmost stack variable v with &v.\ntype AddrOf struct {\n\tNode *ast.UnaryExpr\n}\n\nfunc (*AddrOf) depthCheck() (npop, npush int) { return 1, 1 }\n\n// TypeCast replaces the topmost stack variable v with (DwarfType)(v).\ntype TypeCast struct {\n\tDwarfType godwarf.Type\n\tNode      *ast.CallExpr\n}\n\nfunc (*TypeCast) depthCheck() (npop, npush int) { return 1, 1 }\n\n// Reslice implements a reslice operation.\n// If HasHigh is set it pops three variables, low, high and v, and pushes\n// v[low:high].\n// Otherwise it pops two variables, low and v, and pushes v[low:].\n// If TrustLen is set when the variable resulting from the reslice is loaded it will be fully loaded.\ntype Reslice struct {\n\tHasHigh  bool\n\tTrustLen bool\n\tNode     *ast.SliceExpr\n}\n\nfunc (op *Reslice) depthCheck() (npop, npush int) {\n\tif op.HasHigh {\n\t\treturn 3, 1\n\t} else {\n\t\treturn 2, 1\n\t}\n}\n\n// Index pops two variables, idx and v, and pushes v[idx].\ntype Index struct {\n\tNode *ast.IndexExpr\n}\n\nfunc (*Index) depthCheck() (npop, npush int) { return 2, 1 }\n\n// Jump looks at the topmost stack variable and if it satisfies the\n// condition specified by When it jumps to the stack machine instruction at\n// Target+1.\n// If Pop is set the topmost stack variable is also popped.\ntype Jump struct {\n\tWhen   JumpCond\n\tPop    bool\n\tTarget int\n\tNode   ast.Expr\n}\n\nfunc (jmpif *Jump) depthCheck() (npop, npush int) {\n\tswitch jmpif.When {\n\tcase JumpIfTrue, JumpIfFalse, JumpIfAllocStringChecksFail:\n\t\tif jmpif.Pop {\n\t\t\treturn 1, 0\n\t\t} else {\n\t\t\treturn 1, 1\n\t\t}\n\t}\n\treturn 0, 0\n}\n\n// JumpCond specifies a condition for the Jump instruction.\ntype JumpCond uint8\n\nconst (\n\tJumpIfFalse JumpCond = iota\n\tJumpIfTrue\n\tJumpIfAllocStringChecksFail\n\tJumpAlways\n\tJumpIfPinningDone\n)\n\n// Binary pops two variables from the stack, applies the specified binary\n// operator to them and pushes the result back on the stack.\ntype Binary struct {\n\tNode *ast.BinaryExpr\n}\n\nfunc (*Binary) depthCheck() (npop, npush int) { return 2, 1 }\n\n// BoolToConst pops the topmost variable from the stack, which must be a\n// boolean variable, and converts it to a constant.\ntype BoolToConst struct {\n}\n\nfunc (*BoolToConst) depthCheck() (npop, npush int) { return 1, 1 }\n\n// Pop removes the topmost variable from the stack.\ntype Pop struct {\n}\n\nfunc (*Pop) depthCheck() (npop, npush int) { return 1, 0 }\n\n// Roll removes the n-th element of the stack and pushes it back in at the top\ntype Roll struct {\n\tN int\n}\n\nfunc (*Roll) depthCheck() (npop, npush int) { return 1, 1 }\n\n// Dup duplicates the topmost stack entry\ntype Dup struct {\n}\n\nfunc (*Dup) depthCheck() (npop, npush int) { return 1, 2 }\n\n// BuiltinCall pops len(Args) argument from the stack, calls the specified\n// builtin on them and pushes the result back on the stack.\ntype BuiltinCall struct {\n\tName string\n\tArgs []ast.Expr\n}\n\nfunc (bc *BuiltinCall) depthCheck() (npop, npush int) {\n\treturn len(bc.Args), 1\n}\n\n// CallInjectionStart starts call injection by calling\n// runtime.debugCallVn.\ntype CallInjectionStart struct {\n\tid      int  // identifier for all the call injection instructions that belong to the same sequence, this only exists to make reading listings easier\n\tHasFunc bool // target function already pushed on the stack\n\tNode    *ast.CallExpr\n}\n\nfunc (*CallInjectionStart) depthCheck() (npop, npush int) { return 0, 1 }\n\n// CallInjectionSetTarget starts the call injection, after\n// runtime.debugCallVn set up the stack for us, by copying the entry point\n// of the function, setting the closure register and copying the receiver.\ntype CallInjectionSetTarget struct {\n\tid int\n}\n\nfunc (*CallInjectionSetTarget) depthCheck() (npop, npush int) { return 1, 0 }\n\n// CallInjectionCopyArg copies one argument for call injection.\ntype CallInjectionCopyArg struct {\n\tid      int\n\tArgNum  int\n\tArgExpr ast.Expr\n}\n\nfunc (*CallInjectionCopyArg) depthCheck() (npop, npush int) { return 1, 0 }\n\n// CallInjectionComplete resumes target execution so that the injected call can run.\n// If DoPinning is true it stops after the call is completed without undoing\n// the call injection frames so that address pinning for the return value\n// can be performed, see CallInjectionComplete2.\ntype CallInjectionComplete struct {\n\tid        int\n\tDoPinning bool\n}\n\nfunc (op *CallInjectionComplete) depthCheck() (npop, npush int) {\n\tif op.DoPinning {\n\t\treturn 0, 0\n\t} else {\n\t\treturn 0, 1\n\t}\n}\n\n// CallInjectionComplete2 if DoPinning was passed to CallInjectionComplete\n// this will finish the call injection protocol and push the evaluation\n// result on the stack.\ntype CallInjectionComplete2 struct {\n\tid int\n}\n\nfunc (*CallInjectionComplete2) depthCheck() (npop, npush int) { return 0, 1 }\n\n// CallInjectionStartSpecial starts call injection for a function with a\n// name and arguments known at compile time.\ntype CallInjectionStartSpecial struct {\n\tid     int\n\tFnName string\n\tArgAst []ast.Expr\n\n\tComplainAboutStringAlloc bool // if this call injection can not be made complain specifically about string allocation\n}\n\nfunc (*CallInjectionStartSpecial) depthCheck() (npop, npush int) { return 0, 1 }\n\n// ConvertAllocToString pops two variables from the stack, a constant string\n// and the return value of runtime.mallocgc (mallocv), copies the contents\n// of the string at the address in mallocv and pushes on the stack a new\n// string value that uses the backing storage of mallocv.\ntype ConvertAllocToString struct {\n}\n\nfunc (*ConvertAllocToString) depthCheck() (npop, npush int) { return 2, 1 }\n\n// SetValue pops to variables from the stack, lhv and rhv, and sets lhv to\n// rhv.\ntype SetValue struct {\n\tlhe, Rhe ast.Expr\n}\n\nfunc (*SetValue) depthCheck() (npop, npush int) { return 2, 0 }\n\n// SetDebugPinner pops one variable from the stack and uses it as the saved debug pinner.\ntype SetDebugPinner struct {\n}\n\nfunc (*SetDebugPinner) depthCheck() (npop, npush int) { return 1, 0 }\n\n// PushDebugPinner pushes the debug pinner on the stack.\ntype PushDebugPinner struct {\n}\n\nfunc (*PushDebugPinner) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushPinAddress pushes an address to pin on the stack (as an\n// unsafe.Pointer) and removes it from the list of addresses to pin.\ntype PushPinAddress struct {\n}\n\nfunc (*PushPinAddress) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushBreakpointHitCount pushes a special array containing the hit counts\n// of breakpoints.\ntype PushBreakpointHitCount struct {\n}\n\nfunc (*PushBreakpointHitCount) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushRuntimeType pushes the *runtime._type corresponding to the\n// godwarf.Type.\ntype PushRuntimeType struct {\n\tType godwarf.Type\n}\n\nfunc (*PushRuntimeType) depthCheck() (npop, npush int) { return 0, 1 }\n\n// PushNewFakeVariable pushes a new debugger-allocated variable on to the\n// stack with the given type.\ntype PushNewFakeVariable struct {\n\tType godwarf.Type\n}\n\nfunc (*PushNewFakeVariable) depthCheck() (npop, npush int) { return 0, 1 }\n\n// DisableErrors disables error reporing for the rest of the execution\ntype DisableErrors struct {\n}\n\nfunc (*DisableErrors) depthCheck() (npop, npush int) { return 0, 0 }\n"
  },
  {
    "path": "pkg/proc/fbsdutil/regs.go",
    "content": "package fbsdutil\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n)\n\n// AMD64Registers implements the proc.Registers interface for the native/freebsd\n// backend and core/freebsd backends, on AMD64.\ntype AMD64Registers struct {\n\tRegs     *AMD64PtraceRegs\n\tFpregs   []proc.Register\n\tFpregset *amd64util.AMD64Xstate\n\tFsbase   uint64\n\n\tloadFpRegs func(*AMD64Registers) error\n}\n\nfunc NewAMD64Registers(regs *AMD64PtraceRegs, fsbase uint64, loadFpRegs func(*AMD64Registers) error) *AMD64Registers {\n\treturn &AMD64Registers{Regs: regs, Fsbase: fsbase, loadFpRegs: loadFpRegs}\n}\n\n// AMD64PtraceRegs is the struct used by the freebsd kernel to return the\n// general purpose registers for AMD64 CPUs.\n// source: sys/x86/include/reg.h\ntype AMD64PtraceRegs struct {\n\tR15    int64\n\tR14    int64\n\tR13    int64\n\tR12    int64\n\tR11    int64\n\tR10    int64\n\tR9     int64\n\tR8     int64\n\tRdi    int64\n\tRsi    int64\n\tRbp    int64\n\tRbx    int64\n\tRdx    int64\n\tRcx    int64\n\tRax    int64\n\tTrapno uint32\n\tFs     uint16\n\tGs     uint16\n\tErr    uint32\n\tEs     uint16\n\tDs     uint16\n\tRip    int64\n\tCs     int64\n\tRflags int64\n\tRsp    int64\n\tSs     int64\n}\n\n// Slice returns the registers as a list of (name, value) pairs.\nfunc (r *AMD64Registers) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tvar regs64 = []struct {\n\t\tk string\n\t\tv int64\n\t}{\n\t\t{\"R15\", r.Regs.R15},\n\t\t{\"R14\", r.Regs.R14},\n\t\t{\"R13\", r.Regs.R13},\n\t\t{\"R12\", r.Regs.R12},\n\t\t{\"R11\", r.Regs.R11},\n\t\t{\"R10\", r.Regs.R10},\n\t\t{\"R9\", r.Regs.R9},\n\t\t{\"R8\", r.Regs.R8},\n\t\t{\"Rdi\", r.Regs.Rdi},\n\t\t{\"Rsi\", r.Regs.Rsi},\n\t\t{\"Rbp\", r.Regs.Rbp},\n\t\t{\"Rbx\", r.Regs.Rbx},\n\t\t{\"Rdx\", r.Regs.Rdx},\n\t\t{\"Rcx\", r.Regs.Rcx},\n\t\t{\"Rax\", r.Regs.Rax},\n\t\t{\"Rip\", r.Regs.Rip},\n\t\t{\"Cs\", r.Regs.Cs},\n\t\t{\"Rflags\", r.Regs.Rflags},\n\t\t{\"Rsp\", r.Regs.Rsp},\n\t\t{\"Ss\", r.Regs.Ss},\n\t}\n\tvar regs32 = []struct {\n\t\tk string\n\t\tv uint32\n\t}{\n\t\t{\"Trapno\", r.Regs.Trapno},\n\t\t{\"Err\", r.Regs.Err},\n\t}\n\tvar regs16 = []struct {\n\t\tk string\n\t\tv uint16\n\t}{\n\t\t{\"Fs\", r.Regs.Fs},\n\t\t{\"Gs\", r.Regs.Gs},\n\t\t{\"Es\", r.Regs.Es},\n\t\t{\"Ds\", r.Regs.Ds},\n\t}\n\tout := make([]proc.Register, 0,\n\t\tlen(regs64)+\n\t\t\tlen(regs32)+\n\t\t\tlen(regs16)+\n\t\t\t1+ // for Rflags\n\t\t\tlen(r.Fpregs))\n\tfor _, reg := range regs64 {\n\t\t// FreeBSD defines the registers as signed, but Linux defines\n\t\t// them as unsigned.  Of course, a register doesn't really have\n\t\t// a concept of signedness.  Cast to what Delve expects.\n\t\tout = proc.AppendUint64Register(out, reg.k, uint64(reg.v))\n\t}\n\tfor _, reg := range regs32 {\n\t\tout = proc.AppendUint64Register(out, reg.k, uint64(reg.v))\n\t}\n\tfor _, reg := range regs16 {\n\t\tout = proc.AppendUint64Register(out, reg.k, uint64(reg.v))\n\t}\n\t// x86 called this register \"Eflags\".  amd64 extended it and renamed it\n\t// \"Rflags\", but Linux still uses the old name.\n\tout = proc.AppendUint64Register(out, \"Rflags\", uint64(r.Regs.Rflags))\n\tvar floatLoadError error\n\tif floatingPoint {\n\t\tif r.loadFpRegs != nil {\n\t\t\tfloatLoadError = r.loadFpRegs(r)\n\t\t\tr.loadFpRegs = nil\n\t\t}\n\t\tout = append(out, r.Fpregs...)\n\t}\n\treturn out, floatLoadError\n}\n\n// PC returns the value of RIP register.\nfunc (r *AMD64Registers) PC() uint64 {\n\treturn uint64(r.Regs.Rip)\n}\n\n// SP returns the value of RSP register.\nfunc (r *AMD64Registers) SP() uint64 {\n\treturn uint64(r.Regs.Rsp)\n}\n\nfunc (r *AMD64Registers) BP() uint64 {\n\treturn uint64(r.Regs.Rbp)\n}\n\nfunc (r *AMD64Registers) LR() uint64 {\n\treturn 0\n}\n\n// TLS returns the address of the thread local storage memory segment.\nfunc (r *AMD64Registers) TLS() uint64 {\n\treturn r.Fsbase\n}\n\n// GAddr returns the address of the G variable if it is known, 0 and false\n// otherwise.\nfunc (r *AMD64Registers) GAddr() (uint64, bool) {\n\treturn 0, false\n}\n\n// Copy returns a copy of these registers that is guaranteed not to change.\nfunc (r *AMD64Registers) Copy() (proc.Registers, error) {\n\tif r.loadFpRegs != nil {\n\t\terr := r.loadFpRegs(r)\n\t\tr.loadFpRegs = nil\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tvar rr AMD64Registers\n\trr.Regs = &AMD64PtraceRegs{}\n\trr.Fpregset = &amd64util.AMD64Xstate{}\n\t*(rr.Regs) = *(r.Regs)\n\tif r.Fpregset != nil {\n\t\t*(rr.Fpregset) = *(r.Fpregset)\n\t}\n\tif r.Fpregs != nil {\n\t\trr.Fpregs = make([]proc.Register, len(r.Fpregs))\n\t\tcopy(rr.Fpregs, r.Fpregs)\n\t}\n\treturn &rr, nil\n}\n\nfunc (r *AMD64Registers) SetReg(regNum uint64, reg *op.DwarfRegister) (bool, error) {\n\tvar p *int64\n\tswitch regNum {\n\tcase regnum.AMD64_Rax:\n\t\tp = &r.Regs.Rax\n\tcase regnum.AMD64_Rbx:\n\t\tp = &r.Regs.Rbx\n\tcase regnum.AMD64_Rcx:\n\t\tp = &r.Regs.Rcx\n\tcase regnum.AMD64_Rdx:\n\t\tp = &r.Regs.Rdx\n\tcase regnum.AMD64_Rsi:\n\t\tp = &r.Regs.Rsi\n\tcase regnum.AMD64_Rdi:\n\t\tp = &r.Regs.Rdi\n\tcase regnum.AMD64_Rbp:\n\t\tp = &r.Regs.Rbp\n\tcase regnum.AMD64_Rsp:\n\t\tp = &r.Regs.Rsp\n\tcase regnum.AMD64_R8:\n\t\tp = &r.Regs.R8\n\tcase regnum.AMD64_R9:\n\t\tp = &r.Regs.R9\n\tcase regnum.AMD64_R10:\n\t\tp = &r.Regs.R10\n\tcase regnum.AMD64_R11:\n\t\tp = &r.Regs.R11\n\tcase regnum.AMD64_R12:\n\t\tp = &r.Regs.R12\n\tcase regnum.AMD64_R13:\n\t\tp = &r.Regs.R13\n\tcase regnum.AMD64_R14:\n\t\tp = &r.Regs.R14\n\tcase regnum.AMD64_R15:\n\t\tp = &r.Regs.R15\n\tcase regnum.AMD64_Rip:\n\t\tp = &r.Regs.Rip\n\tcase regnum.AMD64_Rflags:\n\t\tp = &r.Regs.Rflags\n\t}\n\n\tif p != nil {\n\t\tif reg.Bytes != nil && len(reg.Bytes) != 8 {\n\t\t\treturn false, fmt.Errorf(\"wrong number of bytes for register %s (%d)\", regnum.AMD64ToName(regNum), len(reg.Bytes))\n\t\t}\n\t\t*p = int64(reg.Uint64Val)\n\t\treturn false, nil\n\t}\n\n\tif r.loadFpRegs != nil {\n\t\tif err := r.loadFpRegs(r); err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tr.loadFpRegs = nil\n\t}\n\n\tif regNum < regnum.AMD64_XMM0 || regNum > regnum.AMD64_XMM0+15 {\n\t\treturn false, fmt.Errorf(\"can not set %s\", regnum.AMD64ToName(regNum))\n\t}\n\n\treg.FillBytes()\n\n\tif err := r.Fpregset.SetXmmRegister(int(regNum-regnum.AMD64_XMM0), reg.Bytes); err != nil {\n\t\treturn false, err\n\t}\n\treturn true, nil\n}\n"
  },
  {
    "path": "pkg/proc/fncall.go",
    "content": "package proc\n\nimport (\n\t\"debug/dwarf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/constant\"\n\t\"reflect\"\n\t\"slices\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/astutil\"\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/reader\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc/evalop\"\n)\n\n// This file implements the function call injection introduced in go1.11.\n//\n// The protocol is described in $GOROOT/src/runtime/asm_amd64.s in the\n// comments for function runtime·debugCallVn.\n//\n// The main entry point is EvalExpressionWithCalls which will set up an\n// evalStack object to evaluate the provided expression.\n// This object can either finish immediately, if no function calls were\n// needed, or return with callInjectionContinue set. When this happens\n// EvalExpressionWithCalls will call Continue and return.\n//\n// The Continue loop will call evalStack.resume when it hits a breakpoint in\n// the call injection protocol.\n//\n// The work of setting up the function call and executing the protocol is\n// done by:\n//\n//  - evalop.CallInjectionStart\n//  - evalop.CallInjectionSetTarget\n//  - evalCallInjectionCopyArg\n//  - evalCallInjectionComplete\n//\n// When the target has runtime.debugPinner then evalCallInjectionPinPointer\n// must be also called in a loop until it returns false.\n\nconst (\n\tdebugCallFunctionNamePrefix1 = \"debugCall\"\n\tdebugCallFunctionNamePrefix2 = \"runtime.debugCall\"\n\tmaxDebugCallVersion          = 2\n\tmaxArgFrameSize              = 65535\n)\n\nvar (\n\terrFuncCallUnsupported        = errors.New(\"function calls not supported by this version of Go\")\n\terrFuncCallUnsupportedBackend = errors.New(\"backend does not support function calls\")\n\terrFuncCallInProgress         = errors.New(\"cannot call function while another function call is already in progress\")\n\terrNoGoroutine                = errors.New(\"no goroutine selected\")\n\terrGoroutineNotRunning        = errors.New(\"selected goroutine not running\")\n\terrNotEnoughStack             = errors.New(\"not enough stack space\")\n\terrTooManyArguments           = errors.New(\"too many arguments\")\n\terrNotEnoughArguments         = errors.New(\"not enough arguments\")\n\terrNotAGoFunction             = errors.New(\"not a Go function\")\n\terrFuncCallNotAllowedStrAlloc = errors.New(\"literal string can not be allocated because function calls are not allowed without using 'call'\")\n)\n\ntype functionCallState struct {\n\t// savedRegs contains the saved registers\n\tsavedRegs Registers\n\t// err contains a saved error\n\terr error\n\t// expr is the expression being evaluated\n\texpr *ast.CallExpr\n\t// fn is the function that is being called\n\tfn *Function\n\t// receiver is the receiver argument for the function\n\treceiver *Variable\n\t// closureAddr is the address of the closure being called\n\tclosureAddr uint64\n\t// formalArgs are the formal arguments of fn\n\tformalArgs []funcCallArg\n\t// argFrameSize contains the size of the arguments\n\targFrameSize int64\n\t// retvars contains the return variables after the function call terminates without panic'ing\n\tretvars []*Variable\n\t// panicvar is a variable used to store the value of the panic, if the\n\t// called function panics.\n\tpanicvar *Variable\n\t// undoInjection is set after evalop.CallInjectionSetTarget runs and cleared by evalCallInjectionComplete\n\t// it contains information on how to undo a function call injection without running it\n\tundoInjection *undoInjection\n\n\t// hasDebugPinner is true if the target has runtime.debugPinner\n\thasDebugPinner bool\n\t// doPinning is true if this call injection should pin the results\n\tdoPinning bool\n\t// addrsToPin addresses from return variables that should be pinned\n\taddrsToPin []uint64\n\n\tprotocolReg   uint64\n\tdebugCallName string\n}\n\ntype undoInjection struct {\n\toldpc, oldlr uint64\n\tdoComplete2  bool\n}\n\ntype callContext struct {\n\tgrp *TargetGroup\n\tp   *Target\n\n\t// checkEscape is true if the escape check should be performed.\n\t// See service/api.DebuggerCommand.UnsafeCall in service/api/types.go.\n\tcheckEscape bool\n\n\t// retLoadCfg is the load configuration used to load return values\n\tretLoadCfg LoadConfig\n\n\t// injectionThread is the thread to use for nested call injections if the\n\t// original injection goroutine isn't running (because we are in Go 1.15)\n\tinjectionThread Thread\n\n\t// stacks is a slice of known goroutine stacks used to check for\n\t// inappropriate escapes\n\tstacks []stack\n}\n\ntype callInjection struct {\n\tevalStack        *evalStack\n\tstartThreadID    int\n\tendCallInjection func()\n}\n\n//lint:ignore U1000 this variable is only used by tests\nvar debugPinCount int\n\n// EvalExpressionWithCalls is like EvalExpression but allows function calls in 'expr'.\n// Because this can only be done in the current goroutine, unlike\n// EvalExpression, EvalExpressionWithCalls is not a method of EvalScope.\nfunc EvalExpressionWithCalls(grp *TargetGroup, g *G, expr string, retLoadCfg LoadConfig, checkEscape bool) error {\n\tdebugPinCount = 0\n\tt := grp.Selected\n\tbi := t.BinInfo()\n\tif !t.SupportsFunctionCalls() {\n\t\treturn errFuncCallUnsupportedBackend\n\t}\n\tproducer := bi.Producer()\n\tif producer == \"\" || !goversion.ProducerAfterOrEqual(bi.Producer(), 1, 12) {\n\t\treturn errFuncCallUnsupported\n\t}\n\n\t// check that the target goroutine is running\n\tif g == nil {\n\t\treturn errNoGoroutine\n\t}\n\tif g.Status != Grunning || g.Thread == nil {\n\t\treturn errGoroutineNotRunning\n\t}\n\n\tif callinj := t.fncallForG[g.ID]; callinj != nil && callinj.evalStack != nil {\n\t\treturn errFuncCallInProgress\n\t}\n\n\tdbgcallfn, _ := debugCallFunction(bi)\n\tif dbgcallfn == nil {\n\t\treturn errFuncCallUnsupported\n\t}\n\n\tscope, err := GoroutineScope(t, g.Thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tscope.callCtx = &callContext{\n\t\tgrp:         grp,\n\t\tp:           t,\n\t\tcheckEscape: checkEscape,\n\t\tretLoadCfg:  retLoadCfg,\n\t}\n\tscope.loadCfg = &retLoadCfg\n\n\tendCallInjection, err := t.proc.StartCallInjection()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tops, err := evalop.Compile(scopeToEvalLookup{scope}, expr, scope.evalopFlags()|evalop.CanSet)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tstack := &evalStack{}\n\n\tt.fncallForG[g.ID] = &callInjection{\n\t\tevalStack:        stack,\n\t\tstartThreadID:    0,\n\t\tendCallInjection: endCallInjection,\n\t}\n\n\tstack.eval(scope, ops)\n\tif stack.callInjectionContinue && stack.err == nil {\n\t\treturn grp.Continue()\n\t}\n\n\treturn finishEvalExpressionWithCalls(t, g, stack)\n}\n\nfunc finishEvalExpressionWithCalls(t *Target, g *G, stack *evalStack) error {\n\tfncallLog(\"stashing return values for %d in thread=%d\", g.ID, g.Thread.ThreadID())\n\tg.Thread.Common().CallReturn = true\n\tret, err := stack.result(&stack.scope.callCtx.retLoadCfg)\n\tif err != nil {\n\t\tif fpe, ispanic := stack.err.(fncallPanicErr); ispanic {\n\t\t\terr = nil\n\t\t\tg.Thread.Common().returnValues = []*Variable{fpe.panicVar}\n\t\t}\n\t} else if ret == nil {\n\t\tg.Thread.Common().returnValues = nil\n\t} else if ret.Addr == 0 && ret.DwarfType == nil && ret.Kind == reflect.Invalid {\n\t\t// this is a variable returned by a function call with multiple return values\n\t\tr := make([]*Variable, len(ret.Children))\n\t\tfor i := range ret.Children {\n\t\t\tr[i] = &ret.Children[i]\n\t\t}\n\t\tg.Thread.Common().returnValues = r\n\t} else {\n\t\tg.Thread.Common().returnValues = []*Variable{ret}\n\t}\n\n\tcallinj := t.fncallForG[g.ID]\n\tfor goid := range t.fncallForG {\n\t\tif t.fncallForG[goid] == callinj {\n\t\t\tdelete(t.fncallForG, goid)\n\t\t}\n\t}\n\tcallinj.evalStack = nil\n\tcallinj.endCallInjection()\n\treturn err\n}\n\nfunc (scope *EvalScope) evalCallInjectionStart(op *evalop.CallInjectionStart, stack *evalStack) {\n\tif scope.callCtx == nil {\n\t\tstack.err = evalop.ErrFuncCallNotAllowed\n\t\treturn\n\t}\n\tthread := scope.g.Thread\n\tstacklo := scope.g.stack.lo\n\tif thread == nil {\n\t\t// We are doing a nested function call and using Go 1.15, the original\n\t\t// injection goroutine was suspended and now we are using a different\n\t\t// goroutine, evaluation still happened on the original goroutine but we\n\t\t// need to use a different thread to do the nested call injection.\n\t\tthread = scope.callCtx.injectionThread\n\t\tg2, err := GetG(thread)\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tstacklo = g2.stack.lo\n\t}\n\tif thread == nil {\n\t\tstack.err = errGoroutineNotRunning\n\t\treturn\n\t}\n\n\tp := scope.callCtx.p\n\tbi := scope.BinInfo\n\tif !p.SupportsFunctionCalls() {\n\t\tstack.err = errFuncCallUnsupportedBackend\n\t\treturn\n\t}\n\n\tdbgcallfn, dbgcallversion := debugCallFunction(bi)\n\tif dbgcallfn == nil {\n\t\tstack.err = errFuncCallUnsupported\n\t\treturn\n\t}\n\n\t// check that there are at least 256 bytes free on the stack\n\tregs, err := thread.Registers()\n\tif err != nil {\n\t\tstack.err = err\n\t\treturn\n\t}\n\tregs, err = regs.Copy()\n\tif err != nil {\n\t\tstack.err = err\n\t\treturn\n\t}\n\tif regs.SP()-bi.Arch.debugCallMinStackSize <= stacklo {\n\t\tstack.err = errNotEnoughStack\n\t\treturn\n\t}\n\tprotocolReg, ok := debugCallProtocolReg(bi.Arch.Name, dbgcallversion)\n\tif !ok {\n\t\tstack.err = errFuncCallUnsupported\n\t\treturn\n\t}\n\tif bi.Arch.RegistersToDwarfRegisters(0, regs).Reg(protocolReg) == nil {\n\t\tstack.err = errFuncCallUnsupportedBackend\n\t\treturn\n\t}\n\n\tfor _, v := range stack.stack {\n\t\tif v.Flags&(VariableFakeAddress|VariableCPURegister|variableSaved) != 0 || v.Unreadable != nil || v.DwarfType == nil || v.RealType == nil || v.Addr == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tsaveVariable(v)\n\t}\n\n\tfncall := functionCallState{\n\t\texpr:           op.Node,\n\t\tsavedRegs:      regs,\n\t\tprotocolReg:    protocolReg,\n\t\tdebugCallName:  dbgcallfn.Name,\n\t\thasDebugPinner: scope.BinInfo.hasDebugPinner(),\n\t}\n\n\tif op.HasFunc {\n\t\terr = funcCallEvalFuncExpr(scope, stack, &fncall)\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t}\n\n\tswitch bi.Arch.Name {\n\tcase \"amd64\":\n\t\tif err := callOP(bi, thread, regs, dbgcallfn.Entry); err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\t// write the desired argument frame size at SP-(2*pointer_size) (the extra pointer is the saved PC)\n\t\tif err := writePointer(bi, scope.Mem, regs.SP()-3*uint64(bi.Arch.PtrSize()), uint64(fncall.argFrameSize)); err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\tcase \"arm64\", \"ppc64le\", \"loong64\":\n\t\t// debugCallV2 on arm64 needs a special call sequence, callOP can not be used\n\t\tsp := regs.SP()\n\t\tvar spOffset uint64\n\t\tswitch bi.Arch.Name {\n\t\tcase \"arm64\":\n\t\t\tspOffset = 2 * uint64(bi.Arch.PtrSize())\n\t\tcase \"ppc64le\":\n\t\t\tspOffset = 4 * uint64(bi.Arch.PtrSize())\n\t\tcase \"loong64\":\n\t\t\tspOffset = 1 * uint64(bi.Arch.PtrSize())\n\t\t}\n\t\tsp -= spOffset\n\t\tif err := setSP(thread, sp); err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tif err := writePointer(bi, scope.Mem, sp, regs.LR()); err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tif err := setLR(thread, regs.PC()); err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tif err := writePointer(bi, scope.Mem, sp-spOffset, uint64(fncall.argFrameSize)); err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tregs, err = thread.Registers()\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tregs, err = regs.Copy()\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t\tfncall.savedRegs = regs\n\t\terr = setPC(thread, dbgcallfn.Entry)\n\t\tif err != nil {\n\t\t\tstack.err = err\n\t\t\treturn\n\t\t}\n\t}\n\n\tfncallLog(\"function call initiated %v frame size %d goroutine %d (thread %d)\", fncall.fn, fncall.argFrameSize, scope.g.ID, thread.ThreadID())\n\n\tthread.Breakpoint().Clear() // since we moved address in PC the thread is no longer stopped at a breakpoint, leaving the breakpoint set will confuse Continue\n\tp.fncallForG[scope.g.ID].startThreadID = thread.ThreadID()\n\n\tstack.fncallPush(&fncall)\n\tstack.push(newConstant(constant.MakeBool(!fncall.hasDebugPinner && (fncall.fn == nil || fncall.receiver != nil || fncall.closureAddr != 0)), scope.BinInfo, scope.Mem))\n\tstack.callInjectionContinue = true\n}\n\nfunc saveVariable(v *Variable) {\n\tv.mem = cacheMemory(v.mem, v.Addr, int(v.RealType.Size()))\n\tv.Flags |= variableSaved\n\tif cachemem, ok := v.mem.(*memCache); ok {\n\t\tv.Unreadable = cachemem.load()\n\t}\n}\n\nfunc funcCallFinish(scope *EvalScope, stack *evalStack) {\n\tfncall := stack.fncallPop()\n\tif fncall.err != nil {\n\t\tif stack.err == nil {\n\t\t\tstack.err = fncall.err\n\t\t} else {\n\t\t\tfncallLog(\"additional fncall error: %v\", fncall.err)\n\t\t}\n\t\treturn\n\t}\n\n\tif fncall.panicvar != nil {\n\t\tif stack.err == nil {\n\t\t\tstack.err = fncallPanicErr{fncall.panicvar}\n\t\t} else {\n\t\t\tfncallLog(\"additional fncall panic: %v\", fncall.panicvar)\n\t\t}\n\t\treturn\n\t}\n\tswitch len(fncall.retvars) {\n\tcase 0:\n\t\tr := newVariable(\"\", 0, nil, scope.BinInfo, nil)\n\t\tr.loaded = true\n\t\tr.Unreadable = errors.New(\"no return values\")\n\t\tstack.push(r)\n\tcase 1:\n\t\tstack.push(fncall.retvars[0])\n\tdefault:\n\t\t// create a fake variable without address or type to return multiple values\n\t\tr := newVariable(\"\", 0, nil, scope.BinInfo, nil)\n\t\tr.loaded = true\n\t\tr.Children = make([]Variable, len(fncall.retvars))\n\t\tfor i := range fncall.retvars {\n\t\t\tr.Children[i] = *fncall.retvars[i]\n\t\t}\n\t\tstack.push(r)\n\t}\n}\n\n// fncallPanicErr is the error returned if a called function panics\ntype fncallPanicErr struct {\n\tpanicVar *Variable\n}\n\nfunc (err fncallPanicErr) Error() string {\n\treturn \"panic calling a function\"\n}\n\nfunc fncallLog(fmtstr string, args ...any) {\n\tlogflags.FnCallLogger().Infof(fmtstr, args...)\n}\n\n// writePointer writes val as an architecture pointer at addr in mem.\nfunc writePointer(bi *BinaryInfo, mem MemoryReadWriter, addr, val uint64) error {\n\tptrbuf := make([]byte, bi.Arch.PtrSize())\n\n\t// TODO: use target architecture endianness instead of LittleEndian\n\tswitch len(ptrbuf) {\n\tcase 4:\n\t\tbinary.LittleEndian.PutUint32(ptrbuf, uint32(val))\n\tcase 8:\n\t\tbinary.LittleEndian.PutUint64(ptrbuf, val)\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unsupported pointer size %d\", len(ptrbuf)))\n\t}\n\t_, err := mem.WriteMemory(addr, ptrbuf)\n\treturn err\n}\n\n// callOP simulates a call instruction on the given thread:\n// * pushes the current value of PC on the stack (adjusting SP)\n// * changes the value of PC to callAddr\n// Note: regs are NOT updated!\nfunc callOP(bi *BinaryInfo, thread Thread, regs Registers, callAddr uint64) error {\n\tswitch bi.Arch.Name {\n\tcase \"amd64\":\n\t\tsp := regs.SP()\n\t\t// push PC on the stack\n\t\tsp -= uint64(bi.Arch.PtrSize())\n\t\tif err := setSP(thread, sp); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := writePointer(bi, thread.ProcessMemory(), sp, regs.PC()); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn setPC(thread, callAddr)\n\tcase \"arm64\", \"ppc64le\", \"loong64\":\n\t\tif err := setLR(thread, regs.PC()); err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn setPC(thread, callAddr)\n\n\tdefault:\n\t\tpanic(\"not implemented\")\n\t}\n}\n\n// funcCallEvalFuncExpr evaluates expr.Fun and returns the function that we're trying to call.\n// If allowCalls is false function calls will be disabled even if scope.callCtx != nil\nfunc funcCallEvalFuncExpr(scope *EvalScope, stack *evalStack, fncall *functionCallState) error {\n\tbi := scope.BinInfo\n\n\tfnvar := stack.peek()\n\tif fnvar.Kind != reflect.Func {\n\t\treturn fmt.Errorf(\"expression %q is not a function\", astutil.ExprToString(fncall.expr.Fun))\n\t}\n\tfnvar.loadValue(LoadConfig{false, 0, 0, 0, 0, 0})\n\tif fnvar.Unreadable != nil {\n\t\treturn fnvar.Unreadable\n\t}\n\tif fnvar.Base == 0 {\n\t\treturn errors.New(\"nil pointer dereference\")\n\t}\n\tfncall.fn = bi.PCToFunc(fnvar.Base)\n\tif fncall.fn == nil {\n\t\treturn fmt.Errorf(\"could not find DIE for function %q\", astutil.ExprToString(fncall.expr.Fun))\n\t}\n\tif !fncall.fn.cu.isgo {\n\t\treturn errNotAGoFunction\n\t}\n\tfncall.closureAddr = fnvar.closureAddr\n\n\tvar err error\n\tfncall.argFrameSize, fncall.formalArgs, err = funcCallArgs(fncall.fn, bi, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\targnum := len(fncall.expr.Args)\n\n\t// If the function variable has a child then that child is the method\n\t// receiver. However, if the method receiver is not being used (e.g.\n\t// func (_ X) Foo()) then it will not actually be listed as a formal\n\t// argument. Ensure that we are really off by 1 to add the receiver to\n\t// the function call.\n\tif len(fnvar.Children) > 0 && argnum == (len(fncall.formalArgs)-1) {\n\t\targnum++\n\t\tfncall.receiver = &fnvar.Children[0]\n\t\t_, isptr := fncall.receiver.DwarfType.(*godwarf.PtrType)\n\t\tif fncall.receiver.Addr == 0 && !isptr {\n\t\t\treturn errors.New(\"nil pointer dereference\")\n\t\t}\n\t\tfncall.receiver.Name = astutil.ExprToString(fncall.expr.Fun)\n\t}\n\n\tif argnum > len(fncall.formalArgs) {\n\t\treturn errTooManyArguments\n\t}\n\tif argnum < len(fncall.formalArgs) {\n\t\treturn errNotEnoughArguments\n\t}\n\n\treturn nil\n}\n\ntype funcCallArg struct {\n\tname       string\n\ttyp        godwarf.Type\n\toff        int64\n\tdwarfEntry *godwarf.Tree // non-nil if Go 1.17+\n\tisret      bool\n}\n\nfunc funcCallCopyOneArg(scope *EvalScope, fncall *functionCallState, actualArg *Variable, formalArg *funcCallArg, thread Thread) error {\n\tif scope.callCtx.checkEscape {\n\t\t//TODO(aarzilli): only apply the escapeCheck to leaking parameters.\n\t\terr := allPointers(actualArg, formalArg.name, func(addr uint64, name string) error {\n\t\t\tif !pointerEscapes(addr, scope.g.stack, scope.callCtx.stacks) {\n\t\t\t\treturn fmt.Errorf(\"cannot use %s as argument %s in function %s: stack object passed to escaping pointer: %s\", actualArg.Name, formalArg.name, fncall.fn.Name, name)\n\t\t\t}\n\t\t\treturn nil\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t//TODO(aarzilli): automatic wrapping in interfaces for cases not handled\n\t// by convertToEface.\n\n\tformalScope, err := GoroutineScope(scope.target, thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar formalArgVar *Variable\n\tif formalArg.dwarfEntry != nil {\n\t\tvar err error\n\t\tformalArgVar, err = extractVarInfoFromEntry(scope.target, formalScope.BinInfo, formalScope.image(), formalScope.Regs, formalScope.Mem, formalArg.dwarfEntry, 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\tformalArgVar = newVariable(formalArg.name, uint64(formalArg.off+formalScope.Regs.CFA), formalArg.typ, scope.BinInfo, scope.Mem)\n\t}\n\tif err := scope.setValue(formalArgVar, actualArg, actualArg.Name); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc funcCallArgs(fn *Function, bi *BinaryInfo, includeRet bool) (argFrameSize int64, formalArgs []funcCallArg, err error) {\n\tdwarfTree, err := fn.cu.image.getDwarfTree(fn.offset)\n\tif err != nil {\n\t\treturn 0, nil, fmt.Errorf(\"DWARF read error: %v\", err)\n\t}\n\n\tif bi.regabi && fn.Optimized() {\n\t\tif runtimeWhitelist[fn.Name] {\n\t\t\truntimeOptimizedWorkaround(bi, fn.cu.image, dwarfTree)\n\t\t} else {\n\t\t\t// Debug info for function arguments on optimized functions is currently\n\t\t\t// too incomplete to attempt injecting calls to arbitrary optimized\n\t\t\t// functions.\n\t\t\t// Prior to regabi we could do this because the ABI was simple enough to\n\t\t\t// manually encode it in Delve.\n\t\t\t// Runtime.mallocgc is an exception, we specifically patch it's DIE to be\n\t\t\t// correct for call injection purposes.\n\t\t\treturn 0, nil, fmt.Errorf(\"can not call optimized function %s when regabi is in use\", fn.Name)\n\t\t}\n\t}\n\n\tvarEntries := reader.Variables(dwarfTree, fn.Entry, int(^uint(0)>>1), reader.VariablesSkipInlinedSubroutines)\n\n\t// typechecks arguments, calculates argument frame size\n\tfor _, entry := range varEntries {\n\t\tif entry.Tag != dwarf.TagFormalParameter {\n\t\t\tcontinue\n\t\t}\n\t\targname, typ, err := readVarEntry(entry.Tree, fn.cu.image)\n\t\tif err != nil {\n\t\t\treturn 0, nil, err\n\t\t}\n\t\ttyp = godwarf.ResolveTypedef(typ)\n\n\t\tvar formalArg *funcCallArg\n\t\tif bi.regabi {\n\t\t\tformalArg, err = funcCallArgRegABI(fn, bi, entry, argname, typ, &argFrameSize)\n\t\t} else {\n\t\t\tformalArg, err = funcCallArgOldABI(fn, bi, entry, argname, typ, &argFrameSize)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn 0, nil, err\n\t\t}\n\t\tif !formalArg.isret || includeRet {\n\t\t\tformalArgs = append(formalArgs, *formalArg)\n\t\t}\n\t}\n\n\tif bi.regabi {\n\t\t// The argument frame size is computed conservatively, assuming that\n\t\t// there's space for each argument on the stack even if its passed in\n\t\t// registers. Unfortunately this isn't quite enough because the register\n\t\t// assignment algorithm Go uses can result in an amount of additional\n\t\t// space used due to alignment requirements, bounded by the number of argument registers.\n\t\t// Because we currently don't have an easy way to obtain the frame size,\n\t\t// let's be even more conservative.\n\t\t// A safe lower-bound on the size of the argument frame includes space for\n\t\t// each argument plus the total bytes of register arguments.\n\t\t// This is derived from worst-case alignment padding of up to\n\t\t// (pointer-word-bytes - 1) per argument passed in registers.\n\t\t// See: https://github.com/go-delve/delve/pull/2451#discussion_r665761531\n\t\t// TODO: Make this generic for other platforms.\n\t\targFrameSize = alignAddr(argFrameSize, 8)\n\t\targFrameSize += int64(bi.Arch.maxRegArgBytes)\n\t}\n\n\tsort.Slice(formalArgs, func(i, j int) bool {\n\t\treturn formalArgs[i].off < formalArgs[j].off\n\t})\n\n\treturn argFrameSize, formalArgs, nil\n}\n\nfunc funcCallArgOldABI(fn *Function, bi *BinaryInfo, entry reader.Variable, argname string, typ godwarf.Type, pargFrameSize *int64) (*funcCallArg, error) {\n\tconst CFA = 0x1000\n\tvar off int64\n\n\tlocprog, _, err := bi.locationExpr(entry, dwarf.AttrLocation, fn.Entry)\n\tif err != nil {\n\t\terr = fmt.Errorf(\"could not get argument location of %s: %v\", argname, err)\n\t} else {\n\t\tvar pieces []op.Piece\n\t\toff, pieces, err = op.ExecuteStackProgram(op.DwarfRegisters{CFA: CFA, FrameBase: CFA}, locprog, bi.Arch.PtrSize(), nil)\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"unsupported location expression for argument %s: %v\", argname, err)\n\t\t}\n\t\tif pieces != nil {\n\t\t\terr = fmt.Errorf(\"unsupported location expression for argument %s (uses DW_OP_piece)\", argname)\n\t\t}\n\t\toff -= CFA\n\t}\n\tif err != nil {\n\t\t// With Go version 1.12 or later we can trust that the arguments appear\n\t\t// in the same order as declared, which means we can calculate their\n\t\t// address automatically.\n\t\t// With this we can call optimized functions (which sometimes do not have\n\t\t// an argument address, due to a compiler bug) as well as runtime\n\t\t// functions (which are always optimized).\n\t\toff = *pargFrameSize\n\t\toff = alignAddr(off, typ.Align())\n\t}\n\n\tif e := off + typ.Size(); e > *pargFrameSize {\n\t\t*pargFrameSize = e\n\t}\n\n\tisret, _ := entry.Val(dwarf.AttrVarParam).(bool)\n\treturn &funcCallArg{name: argname, typ: typ, off: off, isret: isret}, nil\n}\n\nfunc funcCallArgRegABI(fn *Function, bi *BinaryInfo, entry reader.Variable, argname string, typ godwarf.Type, pargFrameSize *int64) (*funcCallArg, error) {\n\t// Conservatively calculate the full stack argument space for ABI0.\n\t*pargFrameSize = alignAddr(*pargFrameSize, typ.Align())\n\t*pargFrameSize += typ.Size()\n\n\tisret, _ := entry.Val(dwarf.AttrVarParam).(bool)\n\treturn &funcCallArg{name: argname, typ: typ, dwarfEntry: entry.Tree, isret: isret}, nil\n}\n\n// alignAddr rounds up addr to a multiple of align. Align must be a power of 2.\nfunc alignAddr(addr, align int64) int64 {\n\treturn (addr + align - 1) &^ (align - 1)\n}\n\n// allPointers calls f on every pointer contained in v\nfunc allPointers(v *Variable, name string, f func(addr uint64, name string) error) error {\n\tif v.Unreadable != nil {\n\t\treturn fmt.Errorf(\"escape check for %s failed, variable unreadable: %v\", name, v.Unreadable)\n\t}\n\tswitch v.Kind {\n\tcase reflect.Ptr, reflect.UnsafePointer:\n\t\tvar w *Variable\n\t\tif len(v.Children) == 1 {\n\t\t\t// this branch is here to support pointers constructed with typecasts from ints or the '&' operator\n\t\t\tw = &v.Children[0]\n\t\t} else {\n\t\t\tw = v.maybeDereference()\n\t\t}\n\t\treturn f(w.Addr, name)\n\tcase reflect.Chan, reflect.String, reflect.Slice:\n\t\treturn f(v.Base, name)\n\tcase reflect.Map:\n\t\tsv := v.clone()\n\t\tsv.RealType = godwarf.ResolveTypedef(&(v.RealType.(*godwarf.MapType).TypedefType))\n\t\tsv = sv.maybeDereference()\n\t\treturn f(sv.Addr, name)\n\tcase reflect.Interface:\n\t\tsv := v.clone()\n\t\tsv.RealType = godwarf.ResolveTypedef(&(v.RealType.(*godwarf.InterfaceType).TypedefType))\n\t\tsv = sv.maybeDereference()\n\t\tsv.Kind = reflect.Struct\n\t\treturn allPointers(sv, name, f)\n\tcase reflect.Struct:\n\t\tt := v.RealType.(*godwarf.StructType)\n\t\tfor _, field := range t.Field {\n\t\t\tfv, _ := v.toField(field)\n\t\t\tif err := allPointers(fv, fmt.Sprintf(\"%s.%s\", name, field.Name), f); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\tcase reflect.Array:\n\t\tfor i := int64(0); i < v.Len; i++ {\n\t\t\tsv, _ := v.sliceAccess(int(i))\n\t\t\tif err := allPointers(sv, fmt.Sprintf(\"%s[%d]\", name, i), f); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\tcase reflect.Func:\n\t\tif err := f(v.funcvalAddr(), name); err != nil {\n\t\t\treturn err\n\t\t}\n\tcase reflect.Complex64, reflect.Complex128, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, reflect.Bool, reflect.Float32, reflect.Float64:\n\t\t// nothing to do\n\tdefault:\n\t\tpanic(fmt.Errorf(\"not implemented: %s\", v.Kind))\n\t}\n\n\treturn nil\n}\n\nfunc pointerEscapes(addr uint64, stack stack, stacks []stack) bool {\n\tif addr >= stack.lo && addr < stack.hi {\n\t\treturn false\n\t}\n\tfor _, stack := range stacks {\n\t\tif addr >= stack.lo && addr < stack.hi {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nconst (\n\tdebugCallRegPrecheckFailed   = 8\n\tdebugCallRegCompleteCall     = 0\n\tdebugCallRegReadReturn       = 1\n\tdebugCallRegReadPanic        = 2\n\tdebugCallRegRestoreRegisters = 16\n)\n\n// funcCallStep executes one step of the function call injection protocol.\nfunc funcCallStep(callScope *EvalScope, stack *evalStack, thread Thread) bool {\n\tp := callScope.callCtx.p\n\tbi := p.BinInfo()\n\tfncall := stack.fncallPeek()\n\n\tregs, err := thread.Registers()\n\tif err != nil {\n\t\tfncall.err = err\n\t\treturn false\n\t}\n\n\tregval := bi.Arch.RegistersToDwarfRegisters(0, regs).Uint64Val(fncall.protocolReg)\n\n\tif logflags.FnCall() {\n\t\tloc, _ := ThreadLocation(thread)\n\t\tvar pc uint64\n\t\tvar fnname string\n\t\tif loc != nil {\n\t\t\tpc = loc.PC\n\t\t\tif loc.Fn != nil {\n\t\t\t\tfnname = loc.Fn.Name\n\t\t\t}\n\t\t}\n\t\tfncallLog(\"function call interrupt gid=%d (original) thread=%d regval=%#x (PC=%#x in %s %s:%d)\", callScope.g.ID, thread.ThreadID(), regval, pc, fnname, loc.File, loc.Line)\n\t}\n\n\tswitch regval {\n\tcase debugCallRegPrecheckFailed: // 8\n\t\tstack.callInjectionContinue = true\n\t\tarchoff := uint64(0)\n\t\tif bi.Arch.Name == \"arm64\" || bi.Arch.Name == \"loong64\" {\n\t\t\tarchoff = 8\n\t\t} else if bi.Arch.Name == \"ppc64le\" {\n\t\t\tarchoff = 40\n\t\t}\n\t\t// get error from top of the stack and return it to user\n\t\terrvar, err := readStackVariable(p, thread, regs, archoff, \"string\", loadFullValue)\n\t\tif err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not get precheck error reason: %v\", err)\n\t\t\tbreak\n\t\t}\n\t\terrvar.Name = \"err\"\n\t\tfncall.err = fmt.Errorf(\"%v\", constant.StringVal(errvar.Value))\n\n\tcase debugCallRegCompleteCall: // 0\n\t\tp.fncallForG[callScope.g.ID].startThreadID = 0\n\n\tcase debugCallRegRestoreRegisters: // 16\n\t\t// runtime requests that we restore the registers (all except pc and sp),\n\t\t// this is also the last step of the function call protocol.\n\t\tpc, sp := regs.PC(), regs.SP()\n\t\tif err := thread.RestoreRegisters(fncall.savedRegs); err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not restore registers: %v\", err)\n\t\t}\n\t\tif err := setPC(thread, pc); err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not restore PC: %v\", err)\n\t\t}\n\t\tif err := setSP(thread, sp); err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not restore SP: %v\", err)\n\t\t}\n\t\tfncallLog(\"stepping thread %d\", thread.ThreadID())\n\t\tif err := stepInstructionOut(callScope.callCtx.grp, p, thread, fncall.debugCallName, fncall.debugCallName); err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not step out of %s: %v\", fncall.debugCallName, err)\n\t\t}\n\t\tif bi.Arch.Name == \"amd64\" {\n\t\t\t// The tail of debugCallV2 corrupts the state of RFLAGS, we must restore\n\t\t\t// it one extra time after stepping out of it.\n\t\t\t// See https://github.com/go-delve/delve/issues/2985 and\n\t\t\t// TestCallInjectionFlagCorruption\n\t\t\trflags := bi.Arch.RegistersToDwarfRegisters(0, fncall.savedRegs).Uint64Val(regnum.AMD64_Rflags)\n\t\t\terr := thread.SetReg(regnum.AMD64_Rflags, op.DwarfRegisterFromUint64(rflags))\n\t\t\tif err != nil {\n\t\t\t\tfncall.err = fmt.Errorf(\"could not restore RFLAGS register: %v\", err)\n\t\t\t}\n\t\t}\n\t\treturn true\n\n\tcase debugCallRegReadReturn: // 1\n\t\t// read return arguments from stack\n\t\tstack.callInjectionContinue = true\n\t\tif fncall.panicvar != nil || fncall.err != nil {\n\t\t\tbreak\n\t\t}\n\t\tretScope, err := ThreadScope(p, thread)\n\t\tif err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not get return values: %v\", err)\n\t\t\tbreak\n\t\t}\n\n\t\t// pretend we are still inside the function we called\n\t\tfakeFunctionEntryScope(retScope, fncall.fn, int64(regs.SP()), regs.SP()-uint64(bi.Arch.PtrSize()))\n\t\tvar flags localsFlags\n\t\tflags |= localsNoDeclLineCheck | localsFakeFunctionEntryScope // if the function we are calling is an autogenerated stub then declaration lines have no meaning\n\t\tif !bi.regabi {\n\t\t\tflags |= localsTrustArgOrder\n\t\t}\n\n\t\tfncall.retvars, err = retScope.Locals(flags, \"\")\n\t\tif err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not get return values: %v\", err)\n\t\t\tbreak\n\t\t}\n\t\tfncall.retvars = filterVariables(fncall.retvars, func(v *Variable) bool {\n\t\t\treturn (v.Flags & VariableReturnArgument) != 0\n\t\t})\n\n\t\tif !fncall.doPinning {\n\t\t\tloadValues(fncall.retvars, callScope.callCtx.retLoadCfg)\n\t\t}\n\t\tfor _, v := range fncall.retvars {\n\t\t\tv.Flags |= VariableFakeAddress\n\t\t}\n\n\t\tif fncall.doPinning {\n\t\t\tstack.callInjectionContinue = false\n\t\t\tfor _, v := range fncall.retvars {\n\t\t\t\tsaveVariable(v)\n\t\t\t\tallPointers(v, \"\", func(addr uint64, _ string) error {\n\t\t\t\t\tif addr != 0 && pointerEscapes(addr, callScope.g.stack, callScope.callCtx.stacks) {\n\t\t\t\t\t\tfncall.addrsToPin = append(fncall.addrsToPin, addr)\n\t\t\t\t\t}\n\t\t\t\t\treturn nil\n\t\t\t\t})\n\t\t\t}\n\t\t\tslices.Sort(fncall.addrsToPin)\n\t\t\tfncall.addrsToPin = slices.Compact(fncall.addrsToPin)\n\n\t\t\treturn false // will continue with evalop.CallInjectionComplete2\n\t\t}\n\n\t\tcallInjectionComplete2(callScope, bi, fncall, regs, thread)\n\n\tcase debugCallRegReadPanic: // 2\n\t\t// read panic value from stack\n\t\tstack.callInjectionContinue = true\n\t\tarchoff := uint64(0)\n\t\tif bi.Arch.Name == \"arm64\" || bi.Arch.Name == \"loong64\" {\n\t\t\tarchoff = 8\n\t\t} else if bi.Arch.Name == \"ppc64le\" {\n\t\t\tarchoff = 32\n\t\t}\n\t\tfncall.panicvar, err = readStackVariable(p, thread, regs, archoff, \"interface {}\", callScope.callCtx.retLoadCfg)\n\t\tif err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not get panic: %v\", err)\n\t\t\tbreak\n\t\t}\n\t\tfncall.panicvar.Name = \"~panic\"\n\n\tdefault:\n\t\t// Got an unknown protocol register value, this is probably bad but the safest thing\n\t\t// possible is to ignore it and hope it didn't matter.\n\t\tstack.callInjectionContinue = true\n\t\tfncallLog(\"unknown value of protocol register %#x\", regval)\n\t}\n\n\treturn false\n}\n\nfunc callInjectionComplete2(callScope *EvalScope, bi *BinaryInfo, fncall *functionCallState, regs Registers, thread Thread) {\n\t// Store the stack span of the currently running goroutine (which in Go >=\n\t// 1.15 might be different from the original injection goroutine) so that\n\t// later on we can use it to perform the escapeCheck\n\tif threadg, _ := GetG(thread); threadg != nil {\n\t\tcallScope.callCtx.stacks = append(callScope.callCtx.stacks, threadg.stack)\n\t}\n\tif bi.Arch.Name == \"arm64\" || bi.Arch.Name == \"ppc64le\" || bi.Arch.Name == \"loong64\" {\n\t\toldlr, err := readUintRaw(thread.ProcessMemory(), regs.SP(), int64(bi.Arch.PtrSize()))\n\t\tif err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not restore LR: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tif err = setLR(thread, oldlr); err != nil {\n\t\t\tfncall.err = fmt.Errorf(\"could not restore LR: %v\", err)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (scope *EvalScope) evalCallInjectionSetTarget(op *evalop.CallInjectionSetTarget, stack *evalStack, thread Thread) {\n\tfncall := stack.fncallPeek()\n\tif !fncall.hasDebugPinner && (fncall.fn == nil || fncall.receiver != nil || fncall.closureAddr != 0) {\n\t\tstack.err = funcCallEvalFuncExpr(scope, stack, fncall)\n\t\tif stack.err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\tstack.pop() // target function, consumed by funcCallEvalFuncExpr either above or in evalop.CallInjectionStart\n\n\tregs, err := thread.Registers()\n\tif err != nil {\n\t\tstack.err = err\n\t\treturn\n\t}\n\n\tif fncall.closureAddr != 0 {\n\t\t// When calling a function pointer we must set the DX register to the\n\t\t// address of the function pointer itself.\n\t\tsetClosureReg(thread, fncall.closureAddr)\n\t}\n\n\tundo := new(undoInjection)\n\tundo.oldpc = regs.PC()\n\tif scope.BinInfo.Arch.Name == \"arm64\" || scope.BinInfo.Arch.Name == \"ppc64le\" || scope.BinInfo.Arch.Name == \"loong64\" {\n\t\tundo.oldlr = regs.LR()\n\t}\n\tcallOP(scope.BinInfo, thread, regs, fncall.fn.Entry)\n\n\tfncall.undoInjection = undo\n\n\tif fncall.receiver != nil {\n\t\terr := funcCallCopyOneArg(scope, fncall, fncall.receiver, &fncall.formalArgs[0], thread)\n\t\tif err != nil {\n\t\t\tstack.err = fmt.Errorf(\"could not set call receiver: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tfncall.formalArgs = fncall.formalArgs[1:]\n\t}\n}\n\nfunc readStackVariable(t *Target, thread Thread, regs Registers, off uint64, typename string, loadCfg LoadConfig) (*Variable, error) {\n\tbi := thread.BinInfo()\n\tscope, err := ThreadScope(t, thread)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ttyp, err := bi.findType(typename)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tv := newVariable(\"\", regs.SP()+off, typ, scope.BinInfo, scope.Mem)\n\tv.loadValue(loadCfg)\n\tif v.Unreadable != nil {\n\t\treturn nil, v.Unreadable\n\t}\n\tv.Flags |= VariableFakeAddress\n\treturn v, nil\n}\n\n// fakeFunctionEntryScope alters scope to pretend that we are at the entry point of\n// fn and CFA and SP are the ones passed as argument.\n// This function is used to create a scope for a call frame that doesn't\n// exist anymore, to read the return variables of an injected function call,\n// or after a stepout command.\nfunc fakeFunctionEntryScope(scope *EvalScope, fn *Function, cfa int64, sp uint64) error {\n\tscope.PC = fn.Entry\n\tscope.Fn = fn\n\tscope.File, scope.Line = scope.BinInfo.EntryLineForFunc(fn)\n\tscope.Regs.CFA = cfa\n\tscope.Regs.Reg(scope.Regs.SPRegNum).Uint64Val = sp\n\tscope.Regs.Reg(scope.Regs.PCRegNum).Uint64Val = fn.Entry\n\n\tfn.cu.image.dwarfReader.Seek(fn.offset)\n\te, err := fn.cu.image.dwarfReader.Next()\n\tif err != nil {\n\t\treturn err\n\t}\n\tscope.Regs.FrameBase, _, _, _ = scope.BinInfo.Location(e, dwarf.AttrFrameBase, scope.PC, scope.Regs, nil)\n\treturn nil\n}\n\nfunc (scope *EvalScope) callInjectionStartSpecial(stack *evalStack, op *evalop.CallInjectionStartSpecial, curthread Thread) bool {\n\tif op.ComplainAboutStringAlloc && scope.callCtx == nil {\n\t\tstack.err = errFuncCallNotAllowedStrAlloc\n\t\treturn false\n\t}\n\tfnv, err := scope.findGlobalInternal(op.FnName)\n\tif fnv == nil {\n\t\tif err == nil {\n\t\t\tif op.ComplainAboutStringAlloc {\n\t\t\t\terr = errFuncCallNotAllowedStrAlloc\n\t\t\t} else {\n\t\t\t\terr = fmt.Errorf(\"function %s not found\", op.FnName)\n\t\t\t}\n\t\t}\n\t\tstack.err = err\n\t\treturn false\n\t}\n\tstack.push(fnv)\n\tscope.evalCallInjectionStart(&evalop.CallInjectionStart{HasFunc: true, Node: &ast.CallExpr{\n\t\tFun:  &ast.Ident{Name: op.FnName},\n\t\tArgs: op.ArgAst,\n\t}}, stack)\n\tif stack.err == nil {\n\t\tstack.pop() // return value of evalop.CallInjectionStart\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (scope *EvalScope) convertAllocToString(stack *evalStack) {\n\tmallocv := stack.pop()\n\tv := stack.pop()\n\n\tmallocv.loadValue(loadFullValue)\n\n\tif mallocv.Unreadable != nil {\n\t\tstack.err = mallocv.Unreadable\n\t\treturn\n\t}\n\n\tif mallocv.DwarfType.String() != \"*void\" {\n\t\tstack.err = fmt.Errorf(\"unexpected return type for mallocgc call: %v\", mallocv.DwarfType.String())\n\t\treturn\n\t}\n\n\tif len(mallocv.Children) != 1 {\n\t\tstack.err = errors.New(\"internal error, could not interpret return value of mallocgc call\")\n\t\treturn\n\t}\n\n\tv.Base = mallocv.Children[0].Addr\n\t_, stack.err = scope.Mem.WriteMemory(v.Base, []byte(constant.StringVal(v.Value)))\n\tstack.push(v)\n}\n\nfunc isCallInjectionStop(t *Target, thread Thread, loc *Location) bool {\n\tif loc.Fn == nil {\n\t\treturn false\n\t}\n\tif !strings.HasPrefix(loc.Fn.Name, debugCallFunctionNamePrefix1) && !strings.HasPrefix(loc.Fn.Name, debugCallFunctionNamePrefix2) {\n\t\treturn false\n\t}\n\tif loc.PC == loc.Fn.Entry {\n\t\t// call injection just started, did not make any progress before being interrupted by a concurrent breakpoint.\n\t\treturn false\n\t}\n\toff := int64(0)\n\tif thread.BinInfo().Arch.breakInstrMovesPC {\n\t\toff = -int64(len(thread.BinInfo().Arch.breakpointInstruction))\n\t}\n\ttext, err := disassembleCurrentInstruction(t, thread, off)\n\tif err != nil || len(text) == 0 {\n\t\treturn false\n\t}\n\treturn text[0].IsHardBreak()\n}\n\n// callInjectionProtocol is the function called from Continue to progress\n// the injection protocol for all threads.\n// Returns true if a call injection terminated\nfunc callInjectionProtocol(t *Target, trapthread Thread, threads []Thread) (done bool, err error) {\n\tif len(t.fncallForG) == 0 {\n\t\t// we aren't injecting any calls, no need to check the threads.\n\t\treturn false, nil\n\t}\n\tcurrentThread := t.currentThread\n\tdefer func() {\n\t\tt.currentThread = currentThread\n\t}()\n\tfor _, thread := range threads {\n\t\tloc, err := ThreadLocation(thread)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif (thread.ThreadID() != trapthread.ThreadID()) && !thread.SoftExc() {\n\t\t\tcontinue\n\t\t}\n\t\tif !isCallInjectionStop(t, thread, loc) {\n\t\t\tcontinue\n\t\t}\n\n\t\tregs, _ := thread.Registers()\n\t\tfncallLog(\"call injection found thread=%d %s %s:%d PC=%#x SP=%#x\", thread.ThreadID(), loc.Fn.Name, loc.File, loc.Line, regs.PC(), regs.SP())\n\n\t\tg, callinj, err := findCallInjectionStateForThread(t, thread)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\n\t\tarch := thread.BinInfo().Arch\n\t\tif !arch.breakInstrMovesPC {\n\t\t\tsetPC(thread, loc.PC+uint64(len(arch.breakpointInstruction)))\n\t\t}\n\n\t\tfncallLog(\"step for injection on goroutine %d (current) thread=%d (location %s)\", g.ID, thread.ThreadID(), loc.Fn.Name)\n\t\tt.currentThread = thread\n\t\tcallinj.evalStack.resume(g)\n\t\tif !callinj.evalStack.callInjectionContinue {\n\t\t\terr := finishEvalExpressionWithCalls(t, g, callinj.evalStack)\n\t\t\tif err != nil {\n\t\t\t\treturn done, err\n\t\t\t}\n\t\t\tdone = true\n\t\t}\n\t}\n\treturn done, nil\n}\n\nfunc findCallInjectionStateForThread(t *Target, thread Thread) (*G, *callInjection, error) {\n\tg, err := GetG(thread)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"could not determine running goroutine for thread %#x currently executing the function call injection protocol: %v\", thread.ThreadID(), err)\n\t}\n\tfncallLog(\"findCallInjectionStateForThread thread=%d goroutine=%d\", thread.ThreadID(), g.ID)\n\tnotfound := func() error {\n\t\treturn fmt.Errorf(\"could not recover call injection state for goroutine %d (thread %d)\", g.ID, thread.ThreadID())\n\t}\n\tcallinj := t.fncallForG[g.ID]\n\tif callinj != nil {\n\t\tif callinj.evalStack == nil {\n\t\t\treturn nil, nil, notfound()\n\t\t}\n\t\treturn g, callinj, nil\n\t}\n\n\t// In Go 1.15 and later the call injection protocol will switch to a\n\t// different goroutine.\n\t// Here we try to recover the injection goroutine by checking the injection\n\t// thread.\n\n\tfor goid, callinj := range t.fncallForG {\n\t\tif callinj != nil && callinj.evalStack != nil && callinj.startThreadID != 0 && callinj.startThreadID == thread.ThreadID() {\n\t\t\tt.fncallForG[g.ID] = callinj\n\t\t\tfncallLog(\"goroutine %d is the goroutine executing the call injection started in goroutine %d\", g.ID, goid)\n\t\t\treturn g, callinj, nil\n\t\t}\n\t}\n\n\treturn nil, nil, notfound()\n}\n\n// debugCallFunction searches for the debug call function in the binary and\n// uses this search to detect the debug call version.\n// Returns the debug call function and its version as an integer (the lowest\n// valid version is 1) or nil and zero.\nfunc debugCallFunction(bi *BinaryInfo) (*Function, int) {\n\tfor version := maxDebugCallVersion; version >= 1; version-- {\n\t\tname := debugCallFunctionNamePrefix2 + \"V\" + strconv.Itoa(version)\n\t\tfn := bi.lookupOneFunc(name)\n\t\tif fn != nil {\n\t\t\treturn fn, version\n\t\t}\n\t}\n\treturn nil, 0\n}\n\n// debugCallProtocolReg returns the register ID (as defined in pkg/dwarf/regnum)\n// of the register used in the debug call protocol, given the debug call version.\n// Also returns a bool indicating whether the version is supported.\nfunc debugCallProtocolReg(archName string, version int) (uint64, bool) {\n\tswitch archName {\n\tcase \"amd64\":\n\t\tvar protocolReg uint64\n\t\tswitch version {\n\t\tcase 1:\n\t\t\tprotocolReg = regnum.AMD64_Rax\n\t\tcase 2:\n\t\t\tprotocolReg = regnum.AMD64_R12\n\t\tdefault:\n\t\t\treturn 0, false\n\t\t}\n\t\treturn protocolReg, true\n\tcase \"arm64\", \"ppc64le\":\n\t\tif version == 2 {\n\t\t\treturn regnum.ARM64_X0 + 20, true\n\t\t}\n\t\treturn 0, false\n\tcase \"loong64\":\n\t\tif version == 2 {\n\t\t\treturn regnum.LOONG64_R0 + 19, true\n\t\t}\n\t\treturn 0, false\n\tdefault:\n\t\treturn 0, false\n\t}\n}\n\n// runtimeWhitelist is a list of functions in the runtime that we can call\n// (through call injection) even if they are optimized.\nvar runtimeWhitelist = map[string]bool{\n\t\"runtime.mallocgc\":             true,\n\tevalop.DebugPinnerFunctionName: true,\n\t\"runtime.(*Pinner).Unpin\":      true,\n\t\"runtime.(*Pinner).Pin\":        true,\n}\n\n// runtimeOptimizedWorkaround modifies the input DIE so that arguments and\n// return variables have the appropriate registers for call injection.\n// This function can not be called on arbitrary DIEs, it is only valid for\n// the functions specified in runtimeWhitelist.\n// In particular this will fail if any of the arguments of the function\n// passed in input does not fit in an integer CPU register.\nfunc runtimeOptimizedWorkaround(bi *BinaryInfo, image *Image, in *godwarf.Tree) {\n\tif image.workaroundCache == nil {\n\t\timage.workaroundCache = make(map[dwarf.Offset]*godwarf.Tree)\n\t}\n\tif image.workaroundCache[in.Offset] == in {\n\t\treturn\n\t}\n\timage.workaroundCache[in.Offset] = in\n\n\tcurArg, curRet := 0, 0\n\tfor _, child := range in.Children {\n\t\tif child.Tag == dwarf.TagFormalParameter {\n\t\t\tchildEntry, ok := child.Entry.(*dwarf.Entry)\n\t\t\tif !ok {\n\t\t\t\tpanic(\"internal error: bad DIE for runtimeOptimizedWorkaround\")\n\t\t\t}\n\t\t\tisret, _ := child.Entry.Val(dwarf.AttrVarParam).(bool)\n\n\t\t\tvar reg int\n\t\t\tif isret {\n\t\t\t\treg = bi.Arch.argumentRegs[curRet]\n\t\t\t\tcurRet++\n\t\t\t} else {\n\t\t\t\treg = bi.Arch.argumentRegs[curArg]\n\t\t\t\tcurArg++\n\t\t\t}\n\n\t\t\tnewlocfield := dwarf.Field{Attr: dwarf.AttrLocation, Val: []byte{byte(op.DW_OP_reg0) + byte(reg)}, Class: dwarf.ClassBlock}\n\n\t\t\tlocfield := childEntry.AttrField(dwarf.AttrLocation)\n\t\t\tif locfield != nil {\n\t\t\t\t*locfield = newlocfield\n\t\t\t} else {\n\t\t\t\tchildEntry.Field = append(childEntry.Field, newlocfield)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/gdbserial/gdbserver.go",
    "content": "// This file and its companion gdbserver_conn implement a target.Interface\n// backed by a connection to a debugger speaking the \"Gdb Remote Serial\n// Protocol\".\n//\n// The \"Gdb Remote Serial Protocol\" is a low level debugging protocol\n// originally designed so that gdb could be used to debug programs running\n// in embedded environments but it was later extended to support programs\n// running on any environment and a variety of debuggers support it:\n// gdbserver, lldb-server, macOS's debugserver and rr.\n//\n// The protocol is specified at:\n//   https://sourceware.org/gdb/onlinedocs/gdb/Remote-Protocol.html\n// with additional documentation for lldb specific extensions described at:\n//   https://github.com/llvm/llvm-project/blob/main/lldb/docs/resources/lldbgdbremote.md\n//\n// Terminology:\n//  * inferior: the program we are trying to debug\n//  * stub: the debugger on the other side of the protocol's connection (for\n//    example lldb-server)\n//  * gdbserver: stub version of gdb\n//  * lldb-server: stub version of lldb\n//  * debugserver: a different stub version of lldb, installed with lldb on\n//    macOS.\n//  * mozilla rr: a stub that records the full execution of a program\n//    and can then play it back.\n//\n// Implementations of the protocol vary wildly between stubs, while there is\n// a command to query the stub about supported features (qSupported) this\n// only covers *some* of the more recent additions to the protocol and most\n// of the older packets are optional and *not* implemented by all stubs.\n// For example gdbserver implements 'g' (read all registers) but not 'p'\n// (read single register) while lldb-server implements 'p' but not 'g'.\n//\n// The protocol is also underspecified with regards to how the stub should\n// handle a multithreaded inferior. Its default mode of operation is\n// \"all-stop mode\", when a thread hits a breakpoint all other threads are\n// also stopped. But the protocol doesn't say what happens if a second\n// thread hits a breakpoint while the stub is in the process of stopping all\n// other threads.\n//\n// In practice the stub is allowed to swallow the second breakpoint hit or\n// to return it at a later time. If the stub chooses the latter behavior\n// (like gdbserver does) it is allowed to return delayed events on *any*\n// vCont packet. This is incredibly inconvenient since if we get notified\n// about a delayed breakpoint while we are trying to singlestep another\n// thread it's impossible to know when the singlestep we requested ended.\n//\n// What this means is that gdbserver can only be supported for multithreaded\n// inferiors by selecting non-stop mode, which behaves in a markedly\n// different way from all-stop mode and isn't supported by anything except\n// gdbserver.\n//\n// lldb-server/debugserver takes a different approach, only the first stop\n// event is reported, if any other event happens \"simultaneously\" they are\n// suppressed by the stub and the debugger can query for them using\n// qThreadStopInfo. This is much easier for us to implement and the\n// implementation gracefully degrades to the case where qThreadStopInfo is\n// unavailable but the inferior is run in single threaded mode.\n//\n// Therefore the following code will assume lldb-server-like behavior.\n\npackage gdbserial\n\nimport (\n\t\"bytes\"\n\t\"debug/macho\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\tisatty \"github.com/mattn/go-isatty\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n\t\"github.com/go-delve/delve/pkg/proc/macutil\"\n)\n\nconst (\n\tgdbWireFullStopPacket = false\n\tgdbWireMaxLen         = 120\n\n\tmaxTransmitAttempts    = 3    // number of retransmission attempts on failed checksum\n\tinitialInputBufferSize = 2048 // size of the input buffer for gdbConn\n\n\tdebugServerEnvVar = \"DELVE_DEBUGSERVER_PATH\" // use this environment variable to override the path to debugserver used by Launch/Attach\n)\n\nconst heartbeatInterval = 10 * time.Second\n\n// Relative to $(xcode-select --print-path)/../\n// xcode-select typically returns the path to the Developer directory, which is a sibling to SharedFrameworks.\nvar debugserverXcodeRelativeExecutablePath = \"SharedFrameworks/LLDB.framework/Versions/A/Resources/debugserver\"\n\nvar debugserverExecutablePaths = []string{\n\t\"debugserver\",\n\t\"/Library/Developer/CommandLineTools/Library/PrivateFrameworks/LLDB.framework/Versions/A/Resources/debugserver\",\n\t// Function returns the active developer directory provided by xcode-select to compute a debugserver path.\n\tfunc() string {\n\t\tif _, err := exec.LookPath(\"xcode-select\"); err != nil {\n\t\t\treturn \"\"\n\t\t}\n\n\t\tstdout, err := exec.Command(\"xcode-select\", \"--print-path\").Output()\n\t\tif err != nil {\n\t\t\treturn \"\"\n\t\t}\n\n\t\txcodePath := strings.TrimSpace(string(stdout))\n\t\tif xcodePath == \"\" {\n\t\t\treturn \"\"\n\t\t}\n\n\t\t// xcode-select prints the path to the active Developer directory, which is typically a sibling to SharedFrameworks.\n\t\treturn filepath.Join(xcodePath, \"..\", debugserverXcodeRelativeExecutablePath)\n\t}(),\n}\n\n// ErrDirChange is returned when trying to change execution direction\n// while there are still internal breakpoints set.\nvar ErrDirChange = errors.New(\"direction change with internal breakpoints\")\n\n// ErrStartCallInjectionBackwards is returned when trying to start a call\n// injection while the recording is being run backwards.\nvar ErrStartCallInjectionBackwards = errors.New(\"can not start a call injection while running backwards\")\n\nvar checkCanUnmaskSignalsOnce sync.Once\nvar canUnmaskSignalsCached bool\n\n// gdbProcess implements proc.Process using a connection to a debugger stub\n// that understands Gdb Remote Serial Protocol.\ntype gdbProcess struct {\n\tbi       *proc.BinaryInfo\n\tregnames *gdbRegnames\n\tconn     gdbConn\n\n\tthreads       map[int]*gdbThread\n\tcurrentThread *gdbThread\n\n\texited, detached bool\n\talmostExited     bool // true if 'rr' has sent its synthetic SIGKILL\n\tctrlC            bool // ctrl-c was sent to stop inferior\n\n\tbreakpoints proc.BreakpointMap\n\n\tgcmdok         bool   // true if the stub supports g and (maybe) G commands\n\t_Gcmdok        bool   // true if the stub supports G command\n\tthreadStopInfo bool   // true if the stub supports qThreadStopInfo\n\ttracedir       string // if attached to rr the path to the trace directory\n\n\tloadGInstrAddr uint64 // address of the g loading instruction, zero if we couldn't allocate it\n\n\tbreakpointKind int // breakpoint kind to pass to 'z' and 'Z' when creating software breakpoints\n\n\tprocess  *os.Process\n\twaitChan chan *os.ProcessState\n\n\tonDetach func() // called after a successful detach\n}\n\nvar _ proc.RecordingManipulationInternal = &gdbProcess{}\n\n// gdbThread represents an operating system thread.\ntype gdbThread struct {\n\tID                int\n\tstrID             string\n\tregs              gdbRegisters\n\tCurrentBreakpoint proc.BreakpointState\n\tp                 *gdbProcess\n\tsig               uint8  // signal received by thread after last stop\n\tsetbp             bool   // thread was stopped because of a breakpoint\n\twatchAddr         uint64 // if > 0 this is the watchpoint address\n\twatchReg          int    // if < 0 there are no active watchpoints returned\n\tcommon            proc.CommonThread\n}\n\n// ErrBackendUnavailable is returned when the stub program can not be found.\ntype ErrBackendUnavailable struct{}\n\nfunc (err *ErrBackendUnavailable) Error() string {\n\treturn \"backend unavailable\"\n}\n\n// gdbRegisters represents the current value of the registers of a thread.\n// The storage space for all the registers is allocated as a single memory\n// block in buf, the value field inside an individual gdbRegister will be a\n// slice of the global buf field.\ntype gdbRegisters struct {\n\tregs     map[string]gdbRegister\n\tregsInfo []gdbRegisterInfo\n\tloaded   []bool\n\ttls      uint64\n\tgaddr    uint64\n\thasgaddr bool\n\tbuf      []byte\n\tarch     *proc.Arch\n\tregnames *gdbRegnames\n}\n\ntype gdbRegister struct {\n\tvalue  []byte\n\tregnum int\n\n\tignoreOnWrite bool\n}\n\n// gdbRegname records names of important CPU registers\ntype gdbRegnames struct {\n\tPC, SP, BP, CX, FsBase string\n}\n\n// newProcess creates a new Process instance.\n// If process is not nil it is the stub's process and will be killed after\n// Detach.\n// Use Listen, Dial or Connect to complete connection.\nfunc newProcess(process *os.Process) *gdbProcess {\n\tlogger := logflags.GdbWireLogger()\n\tp := &gdbProcess{\n\t\tconn: gdbConn{\n\t\t\tmaxTransmitAttempts: maxTransmitAttempts,\n\t\t\tinbuf:               make([]byte, 0, initialInputBufferSize),\n\t\t\tdirection:           proc.Forward,\n\t\t\tlog:                 logger,\n\t\t\tgoarch:              runtime.GOARCH,\n\t\t\tgoos:                runtime.GOOS,\n\t\t},\n\t\tthreads:        make(map[int]*gdbThread),\n\t\tbi:             proc.NewBinaryInfo(runtime.GOOS, runtime.GOARCH),\n\t\tregnames:       new(gdbRegnames),\n\t\tbreakpoints:    proc.NewBreakpointMap(),\n\t\tgcmdok:         true,\n\t\tthreadStopInfo: true,\n\t\tprocess:        process,\n\t}\n\n\tswitch p.bi.Arch.Name {\n\tdefault:\n\t\tfallthrough\n\tcase \"amd64\":\n\t\tp.breakpointKind = 1\n\tcase \"arm64\":\n\t\tp.breakpointKind = 4\n\t}\n\n\tp.regnames.PC = registerName(p.bi.Arch, p.bi.Arch.PCRegNum)\n\tp.regnames.SP = registerName(p.bi.Arch, p.bi.Arch.SPRegNum)\n\tp.regnames.BP = registerName(p.bi.Arch, p.bi.Arch.BPRegNum)\n\n\tswitch p.bi.Arch.Name {\n\tcase \"arm64\":\n\t\tp.regnames.BP = \"fp\"\n\t\tp.regnames.CX = \"x0\"\n\tcase \"amd64\":\n\t\tp.regnames.CX = \"rcx\"\n\t\tp.regnames.FsBase = \"fs_base\"\n\tdefault:\n\t\tpanic(\"not implemented\")\n\t}\n\n\tif process != nil {\n\t\tp.waitChan = make(chan *os.ProcessState)\n\t\tgo func() {\n\t\t\tstate, _ := process.Wait()\n\t\t\tp.waitChan <- state\n\t\t}()\n\t}\n\n\treturn p\n}\n\n// Listen waits for a connection from the stub.\nfunc (p *gdbProcess) Listen(listener net.Listener, path, cmdline string, pid int, debugInfoDirs []string, stopReason proc.StopReason) (*proc.TargetGroup, error) {\n\tacceptChan := make(chan net.Conn)\n\n\tgo func() {\n\t\tconn, _ := listener.Accept()\n\t\tacceptChan <- conn\n\t}()\n\n\tselect {\n\tcase conn := <-acceptChan:\n\t\tlistener.Close()\n\t\tif conn == nil {\n\t\t\treturn nil, errors.New(\"could not connect\")\n\t\t}\n\t\treturn p.Connect(conn, path, cmdline, pid, debugInfoDirs, stopReason)\n\tcase status := <-p.waitChan:\n\t\tlistener.Close()\n\t\tif err := checkRosettaExpensive(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn nil, fmt.Errorf(\"stub exited while waiting for connection: %v\", status)\n\t}\n}\n\n// Dial attempts to connect to the stub.\nfunc (p *gdbProcess) Dial(addr string, path, cmdline string, pid int, debugInfoDirs []string, stopReason proc.StopReason) (*proc.TargetGroup, error) {\n\tfor {\n\t\tconn, err := net.Dial(\"tcp\", addr)\n\t\tif err == nil {\n\t\t\treturn p.Connect(conn, path, cmdline, pid, debugInfoDirs, stopReason)\n\t\t}\n\t\tselect {\n\t\tcase status := <-p.waitChan:\n\t\t\tif err := checkRosettaExpensive(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"stub exited while attempting to connect: %v\", status)\n\t\tdefault:\n\t\t}\n\t\ttime.Sleep(time.Second)\n\t}\n}\n\n// Connect connects to a stub and performs a handshake.\n//\n// Path and pid are, respectively, the path to the executable of the target\n// program and the PID of the target process, both are optional, however\n// some stubs do not provide ways to determine path and pid automatically\n// and Connect will be unable to function without knowing them.\nfunc (p *gdbProcess) Connect(conn net.Conn, path, cmdline string, pid int, debugInfoDirs []string, stopReason proc.StopReason) (*proc.TargetGroup, error) {\n\tp.conn.conn = conn\n\tp.conn.pid = pid\n\terr := p.conn.handshake(p.regnames)\n\tif err != nil {\n\t\tconn.Close()\n\t\treturn nil, err\n\t}\n\n\tif p.conn.isDebugserver {\n\t\t// There are multiple problems with the 'g'/'G' commands on debugserver.\n\t\t// On version 902 it used to crash the server completely (https://bugs.llvm.org/show_bug.cgi?id=36968),\n\t\t// on arm64 it results in E74 being returned (https://bugs.llvm.org/show_bug.cgi?id=50169)\n\t\t// and on systems where AVX-512 is used it returns the floating point\n\t\t// registers scrambled and sometimes causes the mask registers to be\n\t\t// zeroed out (https://github.com/go-delve/delve/pull/2498).\n\t\t// All of these bugs stem from the fact that the main consumer of\n\t\t// debugserver, lldb, never uses 'g' or 'G' which would make Delve the\n\t\t// sole tester of those codepaths.\n\t\t// Therefore we disable it here. The associated code is kept around to be\n\t\t// used with Mozilla RR.\n\t\tp.gcmdok = false\n\t}\n\n\ttgt, err := p.initialize(path, cmdline, debugInfoDirs, stopReason)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif p.bi.Arch.Name != \"arm64\" {\n\t\t// None of the stubs we support returns the value of fs_base or gs_base\n\t\t// along with the registers, therefore we have to resort to executing a MOV\n\t\t// instruction on the inferior to find out where the G struct of a given\n\t\t// thread is located.\n\t\t// Here we try to allocate some memory on the inferior which we will use to\n\t\t// store the MOV instruction.\n\t\t// If the stub doesn't support memory allocation reloadRegisters will\n\t\t// overwrite some existing memory to store the MOV.\n\t\tif ginstr, err := p.loadGInstr(); err == nil {\n\t\t\tif addr, err := p.conn.allocMemory(256); err == nil {\n\t\t\t\tif _, err := p.conn.writeMemory(addr, ginstr); err == nil {\n\t\t\t\t\tp.loadGInstrAddr = addr\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tgt, nil\n}\n\nfunc (p *gdbProcess) SupportsBPF() bool {\n\treturn false\n}\n\nfunc (p *gdbProcess) GetBufferedTracepoints() []ebpf.RawUProbeParams {\n\treturn nil\n}\n\nfunc (p *gdbProcess) SetUProbe(fnName string, goidOffset int64, args []ebpf.UProbeArgMap) error {\n\tpanic(\"not implemented\")\n}\n\n// unusedPort returns an unused tcp port\n// This is a hack and subject to a race condition with other running\n// programs, but most (all?) OS will cycle through all ephemeral ports\n// before reassigning one port they just assigned, unless there's heavy\n// churn in the ephemeral range this should work.\nfunc unusedPort() string {\n\tlistener, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tif err != nil {\n\t\treturn \":8081\"\n\t}\n\tport := listener.Addr().(*net.TCPAddr).Port\n\tlistener.Close()\n\treturn fmt.Sprintf(\":%d\", port)\n}\n\n// getDebugServerAbsolutePath returns a string of the absolute path to the debugserver binary IFF it is\n// found in the system path ($PATH), the Xcode bundle or the standalone CLT location.\nfunc getDebugServerAbsolutePath() string {\n\tif path := os.Getenv(debugServerEnvVar); path != \"\" {\n\t\treturn path\n\t}\n\tfor _, debugServerPath := range debugserverExecutablePaths {\n\t\tif debugServerPath == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif _, err := exec.LookPath(debugServerPath); err == nil {\n\t\t\treturn debugServerPath\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc canUnmaskSignals(debugServerExecutable string) bool {\n\tcheckCanUnmaskSignalsOnce.Do(func() {\n\t\tbuf, _ := exec.Command(debugServerExecutable, \"--unmask-signals\").CombinedOutput()\n\t\tcanUnmaskSignalsCached = !strings.Contains(string(buf), \"unrecognized option\")\n\t})\n\treturn canUnmaskSignalsCached\n}\n\n// commandLogger is a wrapper around the exec.Command() function to log the arguments prior to\n// starting the process\nfunc commandLogger(binary string, arguments ...string) *exec.Cmd {\n\tlogflags.GdbWireLogger().Debugf(\"executing %s %v\", binary, arguments)\n\treturn exec.Command(binary, arguments...)\n}\n\n// ErrUnsupportedOS is returned when trying to use the lldb backend on Windows.\nvar ErrUnsupportedOS = errors.New(\"lldb backend not supported on Windows\")\n\nfunc getLdEnvVars() []string {\n\tvar result []string\n\n\tenviron := os.Environ()\n\tfor i := range environ {\n\t\tif strings.HasPrefix(environ[i], \"LD_\") ||\n\t\t\tstrings.HasPrefix(environ[i], \"DYLD_\") {\n\t\t\tresult = append(result, \"-e\", environ[i])\n\t\t}\n\t}\n\n\treturn result\n}\n\n// LLDBLaunch starts an instance of lldb-server and connects to it, asking\n// it to launch the specified target program with the specified arguments\n// (cmd) on the specified directory wd.\nfunc LLDBLaunch(cmd []string, wd string, flags proc.LaunchFlags, debugInfoDirs []string, tty string, redirects [3]string) (*proc.TargetGroup, error) {\n\tif runtime.GOOS == \"windows\" {\n\t\treturn nil, ErrUnsupportedOS\n\t}\n\tif err := macutil.CheckRosetta(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tforeground := flags&proc.LaunchForeground != 0\n\n\tvar (\n\t\tisDebugserver bool\n\t\tlistener      net.Listener\n\t\tport          string\n\t\tprocess       *exec.Cmd\n\t\terr           error\n\t\thasRedirects  bool\n\t)\n\n\tif debugserverExecutable := getDebugServerAbsolutePath(); debugserverExecutable != \"\" {\n\t\tlistener, err = net.Listen(\"tcp\", \"127.0.0.1:0\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tldEnvVars := getLdEnvVars()\n\t\targs := make([]string, 0, len(cmd)+4+len(ldEnvVars))\n\t\targs = append(args, ldEnvVars...)\n\n\t\tif tty != \"\" {\n\t\t\targs = append(args, \"--stdio-path\", tty)\n\t\t} else {\n\t\t\tfound := [3]bool{}\n\t\t\tnames := [3]string{\"stdin\", \"stdout\", \"stderr\"}\n\t\t\tfor i := range redirects {\n\t\t\t\tif redirects[i] != \"\" {\n\t\t\t\t\tfound[i] = true\n\t\t\t\t\thasRedirects = true\n\t\t\t\t\targs = append(args, fmt.Sprintf(\"--%s-path\", names[i]), redirects[i])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif foreground || hasRedirects {\n\t\t\t\tfor i := range found {\n\t\t\t\t\tif !found[i] {\n\t\t\t\t\t\targs = append(args, fmt.Sprintf(\"--%s-path\", names[i]), \"/dev/\"+names[i])\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif logflags.LLDBServerOutput() {\n\t\t\targs = append(args, \"-g\", \"-l\", \"stdout\")\n\t\t}\n\t\tif flags&proc.LaunchDisableASLR != 0 {\n\t\t\targs = append(args, \"-D\")\n\t\t}\n\t\tif canUnmaskSignals(debugserverExecutable) {\n\t\t\targs = append(args, \"--unmask-signals\")\n\t\t}\n\t\targs = append(args, \"-F\", \"-R\", fmt.Sprintf(\"127.0.0.1:%d\", listener.Addr().(*net.TCPAddr).Port), \"--\")\n\t\targs = append(args, cmd...)\n\n\t\tisDebugserver = true\n\n\t\tprocess = commandLogger(debugserverExecutable, args...)\n\t} else {\n\t\tif _, err = exec.LookPath(\"lldb-server\"); err != nil {\n\t\t\treturn nil, &ErrBackendUnavailable{}\n\t\t}\n\t\tport = unusedPort()\n\t\targs := make([]string, 0, len(cmd)+3)\n\t\targs = append(args, \"gdbserver\", port, \"--\")\n\t\targs = append(args, cmd...)\n\n\t\tprocess = commandLogger(\"lldb-server\", args...)\n\t}\n\n\tif logflags.LLDBServerOutput() || logflags.GdbWire() || foreground || hasRedirects {\n\t\tprocess.Stdout = os.Stdout\n\t\tprocess.Stderr = os.Stderr\n\t}\n\tif foreground || hasRedirects {\n\t\tif isatty.IsTerminal(os.Stdin.Fd()) {\n\t\t\tforegroundSignalsIgnore()\n\t\t}\n\t\tprocess.Stdin = os.Stdin\n\t}\n\tif wd != \"\" {\n\t\tprocess.Dir = wd\n\t}\n\n\tif isatty.IsTerminal(os.Stdin.Fd()) {\n\t\tprocess.SysProcAttr = sysProcAttr(foreground)\n\t}\n\n\tif runtime.GOOS == \"darwin\" {\n\t\tprocess.Env = proc.DisableAsyncPreemptEnv()\n\t\t// Filter out DYLD_INSERT_LIBRARIES on Darwin.\n\t\t// This is needed since macOS Ventura, loading custom dylib into debugserver\n\t\t// using DYLD_INSERT_LIBRARIES leads to a crash.\n\t\t// This is unlike other protected processes, where they just strip it out.\n\t\tenv := make([]string, 0, len(process.Env))\n\t\tfor _, v := range process.Env {\n\t\t\tif !strings.HasPrefix(v, \"DYLD_INSERT_LIBRARIES\") {\n\t\t\t\tenv = append(env, v)\n\t\t\t}\n\t\t}\n\t\tprocess.Env = env\n\t}\n\n\tif err = process.Start(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tp := newProcess(process.Process)\n\tp.conn.isDebugserver = isDebugserver\n\n\tvar grp *proc.TargetGroup\n\tif listener != nil {\n\t\tgrp, err = p.Listen(listener, cmd[0], strings.Join(cmd, \" \"), 0, debugInfoDirs, proc.StopLaunched)\n\t} else {\n\t\tgrp, err = p.Dial(port, cmd[0], strings.Join(cmd, \" \"), 0, debugInfoDirs, proc.StopLaunched)\n\t}\n\tif p.conn.pid != 0 && foreground && isatty.IsTerminal(os.Stdin.Fd()) {\n\t\t// Make the target process the controlling process of the tty if it is a foreground process.\n\t\terr := tcsetpgrp(os.Stdin.Fd(), p.conn.pid)\n\t\tif err != nil {\n\t\t\tlogflags.DebuggerLogger().Errorf(\"could not set controlling process: %v\", err)\n\t\t}\n\t}\n\treturn grp, err\n}\n\n// LLDBAttach starts an instance of lldb-server and connects to it, asking\n// it to attach to the specified pid.\n// Path is path to the target's executable, path only needs to be specified\n// for some stubs that do not provide an automated way of determining it\n// (for example debugserver).\nfunc LLDBAttach(pid int, path string, waitFor *proc.WaitFor, debugInfoDirs []string) (*proc.TargetGroup, error) {\n\tif runtime.GOOS == \"windows\" {\n\t\treturn nil, ErrUnsupportedOS\n\t}\n\tif err := macutil.CheckRosetta(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar (\n\t\tisDebugserver bool\n\t\tprocess       *exec.Cmd\n\t\tlistener      net.Listener\n\t\tport          string\n\t\terr           error\n\t)\n\tif debugserverExecutable := getDebugServerAbsolutePath(); debugserverExecutable != \"\" {\n\t\tisDebugserver = true\n\t\tlistener, err = net.Listen(\"tcp\", \"127.0.0.1:0\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\targs := []string{\"-R\", fmt.Sprintf(\"127.0.0.1:%d\", listener.Addr().(*net.TCPAddr).Port)}\n\n\t\tif waitFor.Valid() {\n\t\t\tduration := int(waitFor.Duration.Seconds())\n\t\t\tif duration == 0 && waitFor.Duration != 0 {\n\t\t\t\t// If duration is below the (second) resolution of debugserver pass 1\n\t\t\t\t// second (0 means infinite).\n\t\t\t\tduration = 1\n\t\t\t}\n\t\t\targs = append(args, \"--waitfor=\"+waitFor.Name, fmt.Sprintf(\"--waitfor-interval=%d\", waitFor.Interval.Microseconds()), fmt.Sprintf(\"--waitfor-duration=%d\", duration))\n\t\t} else {\n\t\t\targs = append(args, \"--attach=\"+strconv.Itoa(pid))\n\t\t}\n\n\t\tif canUnmaskSignals(debugserverExecutable) {\n\t\t\targs = append(args, \"--unmask-signals\")\n\t\t}\n\t\tprocess = commandLogger(debugserverExecutable, args...)\n\t} else {\n\t\tif waitFor.Valid() {\n\t\t\treturn nil, proc.ErrWaitForNotImplemented\n\t\t}\n\t\tif _, err = exec.LookPath(\"lldb-server\"); err != nil {\n\t\t\treturn nil, &ErrBackendUnavailable{}\n\t\t}\n\t\tport = unusedPort()\n\t\tprocess = commandLogger(\"lldb-server\", \"gdbserver\", \"--attach\", strconv.Itoa(pid), port)\n\t}\n\n\tprocess.Stdout = os.Stdout\n\tprocess.Stderr = os.Stderr\n\tprocess.SysProcAttr = sysProcAttr(false)\n\n\tif err = process.Start(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tp := newProcess(process.Process)\n\tp.conn.isDebugserver = isDebugserver\n\n\tvar grp *proc.TargetGroup\n\tif listener != nil {\n\t\tgrp, err = p.Listen(listener, path, \"\", pid, debugInfoDirs, proc.StopAttached)\n\t} else {\n\t\tgrp, err = p.Dial(port, path, \"\", pid, debugInfoDirs, proc.StopAttached)\n\t}\n\treturn grp, err\n}\n\n// EntryPoint will return the process entry point address, useful for\n// debugging PIEs.\nfunc (p *gdbProcess) EntryPoint() (uint64, error) {\n\tvar entryPoint uint64\n\tif p.bi.GOOS == \"darwin\" {\n\t\t// There is no auxv on darwin, however, we can get the location of the mach-o\n\t\t// header from the debugserver by going through the loaded libraries, which includes\n\t\t// the exe itself\n\t\timages, _ := p.conn.getLoadedDynamicLibraries()\n\t\tfor _, image := range images {\n\t\t\tif image.MachHeader.FileType == macho.TypeExec {\n\t\t\t\t// This is a bit hacky. This is technically not the entrypoint,\n\t\t\t\t// but rather we use the variable to points at the mach-o header,\n\t\t\t\t// so we can get the offset in bininfo\n\t\t\t\tentryPoint = image.LoadAddress\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t} else if auxv, err := p.conn.readAuxv(); err == nil {\n\t\t// If we can't read the auxiliary vector it just means it's not supported\n\t\t// by the OS or by the stub. If we are debugging a PIE and the entry point\n\t\t// is needed proc.LoadBinaryInfo will complain about it.\n\t\tentryPoint = linutil.EntryPointFromAuxv(auxv, p.BinInfo().Arch.PtrSize())\n\t}\n\n\treturn entryPoint, nil\n}\n\n// initialize uses qProcessInfo to load the inferior's PID and\n// executable path. This command is not supported by all stubs and not all\n// stubs will report both the PID and executable path.\nfunc (p *gdbProcess) initialize(path, cmdline string, debugInfoDirs []string, stopReason proc.StopReason) (*proc.TargetGroup, error) {\n\tvar err error\n\tif path == \"\" {\n\t\t// If we are attaching to a running process and the user didn't specify\n\t\t// the executable file manually we must ask the stub for it.\n\t\t// We support both qXfer:exec-file:read:: (the gdb way) and calling\n\t\t// qProcessInfo (the lldb way).\n\t\t// Unfortunately debugserver on macOS supports neither.\n\t\tpath, err = p.conn.readExecFile()\n\t\tif err != nil {\n\t\t\tif isProtocolErrorUnsupported(err) {\n\t\t\t\t_, path, err = queryProcessInfo(p, p.Pid())\n\t\t\t\tif err != nil {\n\t\t\t\t\tp.conn.conn.Close()\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tp.conn.conn.Close()\n\t\t\t\treturn nil, fmt.Errorf(\"could not determine executable path: %v\", err)\n\t\t\t}\n\t\t}\n\t}\n\n\tif path == \"\" {\n\t\t// try using jGetLoadedDynamicLibrariesInfos which is the only way to do\n\t\t// this supported on debugserver (but only on macOS >= 12.10)\n\t\timages, _ := p.conn.getLoadedDynamicLibraries()\n\t\tfor _, image := range images {\n\t\t\tif image.MachHeader.FileType == macho.TypeExec {\n\t\t\t\tpath = image.Pathname\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\terr = p.updateThreadList(&threadUpdater{p: p}, nil)\n\tif err != nil {\n\t\tp.conn.conn.Close()\n\t\tp.bi.Close()\n\t\treturn nil, err\n\t}\n\tp.clearThreadSignals()\n\n\tif p.conn.pid <= 0 {\n\t\tp.conn.pid, _, err = queryProcessInfo(p, 0)\n\t\tif err != nil && !isProtocolErrorUnsupported(err) {\n\t\t\tp.conn.conn.Close()\n\t\t\tp.bi.Close()\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tgrp, addTarget := proc.NewGroup(p, proc.NewTargetGroupConfig{\n\t\tDebugInfoDirs:       debugInfoDirs,\n\t\tDisableAsyncPreempt: runtime.GOOS == \"darwin\",\n\t\tStopReason:          stopReason,\n\t\tCanDump:             runtime.GOOS == \"darwin\",\n\t})\n\t_, err = addTarget(p, p.conn.pid, p.currentThread, path, stopReason, cmdline)\n\tif err != nil {\n\t\tp.Detach(p.conn.pid, true)\n\t\treturn nil, err\n\t}\n\treturn grp, nil\n}\n\nfunc queryProcessInfo(p *gdbProcess, pid int) (int, string, error) {\n\tpi, err := p.conn.queryProcessInfo(pid)\n\tif err != nil {\n\t\treturn 0, \"\", err\n\t}\n\tif pid == 0 {\n\t\tn, _ := strconv.ParseUint(pi[\"pid\"], 16, 64)\n\t\tpid = int(n)\n\t}\n\treturn pid, pi[\"name\"], nil\n}\n\n// BinInfo returns information on the binary.\nfunc (p *gdbProcess) BinInfo() *proc.BinaryInfo {\n\treturn p.bi\n}\n\n// Recorded returns whether or not we are debugging\n// a recorded \"traced\" program.\nfunc (p *gdbProcess) Recorded() (bool, string) {\n\treturn p.tracedir != \"\", p.tracedir\n}\n\n// Pid returns the process ID.\nfunc (p *gdbProcess) Pid() int {\n\treturn p.conn.pid\n}\n\n// Valid returns true if we are not detached\n// and the process has not exited.\nfunc (p *gdbProcess) Valid() (bool, error) {\n\tif p.detached {\n\t\treturn false, proc.ErrProcessDetached\n\t}\n\tif p.exited {\n\t\treturn false, proc.ErrProcessExited{Pid: p.Pid()}\n\t}\n\tif p.almostExited && p.conn.direction == proc.Forward {\n\t\treturn false, proc.ErrProcessExited{Pid: p.Pid()}\n\t}\n\treturn true, nil\n}\n\n// FindThread returns the thread with the given ID.\nfunc (p *gdbProcess) FindThread(threadID int) (proc.Thread, bool) {\n\tthread, ok := p.threads[threadID]\n\treturn thread, ok\n}\n\n// ThreadList returns all threads in the process.\nfunc (p *gdbProcess) ThreadList() []proc.Thread {\n\tr := make([]proc.Thread, 0, len(p.threads))\n\tfor _, thread := range p.threads {\n\t\tr = append(r, thread)\n\t}\n\treturn r\n}\n\n// Memory returns the process memory.\nfunc (p *gdbProcess) Memory() proc.MemoryReadWriter {\n\treturn p\n}\n\nconst (\n\tinterruptSignal  = 0x2\n\tbreakpointSignal = 0x5\n\tfaultSignal      = 0xb\n\tchildSignal      = 0x11\n\tstopSignal       = 0x13\n\n\t_SIGILL  = 0x4\n\t_SIGFPE  = 0x8\n\t_SIGKILL = 0x9\n\n\tdebugServerTargetExcBadAccess      = 0x91\n\tdebugServerTargetExcBadInstruction = 0x92\n\tdebugServerTargetExcArithmetic     = 0x93\n\tdebugServerTargetExcEmulation      = 0x94\n\tdebugServerTargetExcSoftware       = 0x95\n\tdebugServerTargetExcBreakpoint     = 0x96\n)\n\nfunc (p *gdbProcess) ContinueOnce(cctx *proc.ContinueOnceContext) (proc.Thread, proc.StopReason, error) {\n\tif p.exited {\n\t\treturn nil, proc.StopExited, proc.ErrProcessExited{Pid: p.conn.pid}\n\t}\n\tif p.almostExited {\n\t\tif p.conn.direction == proc.Forward {\n\t\t\treturn nil, proc.StopExited, proc.ErrProcessExited{Pid: p.conn.pid}\n\t\t}\n\t\tp.almostExited = false\n\t}\n\n\tif p.conn.direction == proc.Forward {\n\t\t// step threads stopped at any breakpoint over their breakpoint\n\t\tfor _, thread := range p.threads {\n\t\t\t// Do not single step over a breakpoint if it is a watchpoint. The PC will already have advanced and we\n\t\t\t// won't experience the same stutter effect as with a breakpoint. Also, there is a bug in certain versions\n\t\t\t// of the MacOS mach kernel where single stepping when we have hardware watchpoints set will cause the\n\t\t\t// kernel to send a spurious mach exception.\n\t\t\t// See: https://github.com/llvm/llvm-project/blob/b9f2c16b50f68c978e90190f46a7c0db3f39e98c/lldb/source/Plugins/Process/Utility/StopInfoMachException.cpp#L814\n\t\t\t// TODO(deparker): We can skip single stepping in the case of thread.BinInfo().Arch.BreakInstrMovesPC().\n\t\t\tif thread.CurrentBreakpoint.Breakpoint != nil && thread.CurrentBreakpoint.WatchType == 0 {\n\t\t\t\tif err := thread.stepInstruction(); err != nil {\n\t\t\t\t\treturn nil, proc.StopUnknown, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, th := range p.threads {\n\t\tth.clearBreakpointState()\n\t}\n\n\tp.setCtrlC(cctx, false)\n\n\t// resume all threads\n\tvar threadID string\n\tvar trapthread *gdbThread\n\tvar tu = threadUpdater{p: p}\n\tvar atstart bool\n\tvar trapThreadRegs map[uint64]uint64\ncontinueLoop:\n\tfor {\n\t\ttu.Reset()\n\t\tsp, err := p.conn.resume(cctx, p.threads, &tu)\n\t\tthreadID = sp.threadID\n\t\tif err != nil {\n\t\t\tif _, exited := err.(proc.ErrProcessExited); exited {\n\t\t\t\tp.exited = true\n\t\t\t\treturn nil, proc.StopExited, err\n\t\t\t}\n\t\t\treturn nil, proc.StopUnknown, err\n\t\t}\n\n\t\t// For stubs that support qThreadStopInfo updateThreadList will\n\t\t// find out the reason why each thread stopped.\n\t\t// NOTE: because debugserver will sometimes send two stop packets after a\n\t\t// continue it is important that this is the very first thing we do after\n\t\t// resume(). See comment in threadStopInfo for an explanation.\n\t\tp.updateThreadList(&tu, sp.jstopInfo)\n\n\t\ttrapthread = p.findThreadByStrID(threadID)\n\t\tif trapthread != nil && !p.threadStopInfo {\n\t\t\t// For stubs that do not support qThreadStopInfo we manually set the\n\t\t\t// reason the thread returned by resume() stopped.\n\t\t\ttrapthread.sig = sp.sig\n\t\t\ttrapthread.watchAddr = sp.watchAddr\n\t\t\ttrapthread.watchReg = sp.watchReg\n\t\t}\n\n\t\tvar shouldStop, shouldExitErr bool\n\t\ttrapthread, atstart, shouldStop, shouldExitErr = p.handleThreadSignals(cctx, trapthread)\n\t\tif shouldExitErr {\n\t\t\tp.almostExited = true\n\t\t\treturn nil, proc.StopExited, proc.ErrProcessExited{Pid: p.conn.pid}\n\t\t}\n\t\tif shouldStop {\n\t\t\ttrapThreadRegs = sp.regs\n\t\t\tbreak continueLoop\n\t\t}\n\t}\n\n\tp.clearThreadRegisters()\n\t// TODO(deparker): Can we support this optimization for the RR backend?\n\tif p.conn.isDebugserver {\n\t\ttrapthread.reloadRegisters(trapThreadRegs)\n\t}\n\n\tstopReason := proc.StopUnknown\n\tif atstart {\n\t\tstopReason = proc.StopLaunched\n\t}\n\n\tif p.BinInfo().GOOS == \"linux\" {\n\t\tif err := linutil.ElfUpdateSharedObjects(p); err != nil {\n\t\t\treturn nil, stopReason, err\n\t\t}\n\t}\n\n\tif err := p.setCurrentBreakpoints(); err != nil {\n\t\treturn nil, stopReason, err\n\t}\n\n\tif trapthread == nil {\n\t\treturn nil, stopReason, fmt.Errorf(\"could not find thread %s\", threadID)\n\t}\n\n\terr := machTargetExcToError(trapthread.sig)\n\tif err != nil {\n\t\t// the signals that are reported here can not be propagated back to the target process.\n\t\ttrapthread.sig = 0\n\t}\n\tp.currentThread = trapthread\n\treturn trapthread, stopReason, err\n}\n\nfunc (p *gdbProcess) findThreadByStrID(threadID string) *gdbThread {\n\tfor _, thread := range p.threads {\n\t\tif thread.strID == threadID {\n\t\t\treturn thread\n\t\t}\n\t}\n\treturn nil\n}\n\n// handleThreadSignals looks at the signals received by each thread and\n// decides which ones to mask and which ones to propagate back to the target\n// and returns true if we should stop execution in response to one of the\n// signals and return control to the user.\n// Adjusts trapthread to a thread that we actually want to stop at.\nfunc (p *gdbProcess) handleThreadSignals(cctx *proc.ContinueOnceContext, trapthread *gdbThread) (trapthreadOut *gdbThread, atstart, shouldStop, shouldExitErr bool) {\n\tvar trapthreadCandidate *gdbThread\n\n\tfor _, th := range p.threads {\n\t\tisStopSignal := false\n\n\t\t// 0x5 is always a breakpoint, a manual stop either manifests as 0x13\n\t\t// (lldb), 0x11 (debugserver) or 0x2 (gdbserver).\n\t\t// Since 0x2 could also be produced by the user\n\t\t// pressing ^C (in which case it should be passed to the inferior) we need\n\t\t// the ctrlC flag to know that we are the originators.\n\t\tswitch th.sig {\n\t\tcase interruptSignal: // interrupt\n\t\t\tif p.getCtrlC(cctx) {\n\t\t\t\tisStopSignal = true\n\t\t\t}\n\t\tcase breakpointSignal: // breakpoint\n\t\t\tisStopSignal = true\n\t\tcase childSignal: // stop on debugserver but SIGCHLD on lldb-server/linux\n\t\t\tif p.conn.isDebugserver {\n\t\t\t\tisStopSignal = true\n\t\t\t}\n\t\tcase stopSignal: // stop\n\t\t\tisStopSignal = true\n\n\t\tcase _SIGKILL:\n\t\t\tif p.tracedir != \"\" {\n\t\t\t\t// RR will send a synthetic SIGKILL packet right before the program\n\t\t\t\t// exits, even if the program exited normally.\n\t\t\t\t// Treat this signal as if the process had exited because right after\n\t\t\t\t// this it is still possible to set breakpoints and rewind the process.\n\t\t\t\tshouldExitErr = true\n\t\t\t\tisStopSignal = true\n\t\t\t}\n\n\t\t// The following are fake BSD-style signals sent by debugserver\n\t\t// Unfortunately debugserver can not convert them into signals for the\n\t\t// process so we must stop here.\n\t\tcase debugServerTargetExcBadAccess, debugServerTargetExcBadInstruction, debugServerTargetExcArithmetic, debugServerTargetExcEmulation, debugServerTargetExcSoftware, debugServerTargetExcBreakpoint:\n\t\t\ttrapthreadCandidate = th\n\t\t\tshouldStop = true\n\n\t\t// Signal 0 is returned by rr when it reaches the start of the process\n\t\t// in backward continue mode.\n\t\tcase 0:\n\t\t\tif p.conn.direction == proc.Backward && th == trapthread {\n\t\t\t\tisStopSignal = true\n\t\t\t\tatstart = true\n\t\t\t}\n\n\t\tdefault:\n\t\t\t// any other signal is always propagated to inferior\n\t\t}\n\n\t\tif isStopSignal {\n\t\t\tif trapthreadCandidate == nil {\n\t\t\t\ttrapthreadCandidate = th\n\t\t\t}\n\t\t\tth.sig = 0\n\t\t\tshouldStop = true\n\t\t}\n\t}\n\n\tif (trapthread == nil || trapthread.sig != 0) && trapthreadCandidate != nil {\n\t\t// proc.Continue wants us to return one of the threads that we should stop\n\t\t// at, if the thread returned by vCont received a signal that we want to\n\t\t// propagate back to the target thread but there were also other threads\n\t\t// that we wish to stop at we should pick one of those.\n\t\ttrapthread = trapthreadCandidate\n\t}\n\n\tif p.getCtrlC(cctx) || cctx.GetManualStopRequested() {\n\t\t// If we request an interrupt and a target thread simultaneously receives\n\t\t// an unrelated signal debugserver will discard our interrupt request and\n\t\t// report the signal but we should stop anyway.\n\t\tshouldStop = true\n\t}\n\n\treturn trapthread, atstart, shouldStop, shouldExitErr\n}\n\n// RequestManualStop will attempt to stop the process\n// without a breakpoint or signal having been received.\nfunc (p *gdbProcess) RequestManualStop(cctx *proc.ContinueOnceContext) error {\n\tif !p.conn.running {\n\t\treturn nil\n\t}\n\tp.ctrlC = true\n\treturn p.conn.sendCtrlC()\n}\n\nfunc (p *gdbProcess) setCtrlC(cctx *proc.ContinueOnceContext, v bool) {\n\tcctx.StopMu.Lock()\n\tp.ctrlC = v\n\tcctx.StopMu.Unlock()\n}\n\nfunc (p *gdbProcess) getCtrlC(cctx *proc.ContinueOnceContext) bool {\n\tcctx.StopMu.Lock()\n\tdefer cctx.StopMu.Unlock()\n\treturn p.ctrlC\n}\n\n// Detach will detach from the target process,\n// if 'kill' is true it will also kill the process.\n// The _pid argument is unused as follow exec\n// mode is not implemented with this backend.\nfunc (p *gdbProcess) Detach(_pid int, kill bool) error {\n\tif kill && !p.exited {\n\t\terr := p.conn.kill()\n\t\tif err != nil {\n\t\t\tif _, exited := err.(proc.ErrProcessExited); !exited {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tp.exited = true\n\t\t}\n\t}\n\tif !p.exited {\n\t\tif err := p.conn.detach(); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tp.detached = true\n\t}\n\tif p.process != nil {\n\t\tp.process.Kill()\n\t\t<-p.waitChan\n\t\tp.process = nil\n\t}\n\treturn nil\n}\n\nfunc (p *gdbProcess) Close() error {\n\tif p.onDetach != nil {\n\t\tp.onDetach()\n\t}\n\treturn p.bi.Close()\n}\n\n// Restart will restart the process from the given position.\nfunc (p *gdbProcess) Restart(cctx *proc.ContinueOnceContext, pos string) (proc.Thread, error) {\n\tif p.tracedir == \"\" {\n\t\treturn nil, proc.ErrNotRecorded\n\t}\n\n\tp.exited = false\n\tp.almostExited = false\n\n\tfor _, th := range p.threads {\n\t\tth.clearBreakpointState()\n\t}\n\n\tp.ctrlC = false\n\n\terr := p.conn.restart(pos)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// for some reason we have to send a vCont;c after a vRun to make rr behave\n\t// properly, because that's what gdb does.\n\t_, err = p.conn.resume(cctx, nil, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = p.updateThreadList(&threadUpdater{p: p}, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp.clearThreadSignals()\n\tp.clearThreadRegisters()\n\n\tfor _, bp := range p.breakpoints.M {\n\t\tp.WriteBreakpoint(bp)\n\t}\n\n\treturn p.currentThread, p.setCurrentBreakpoints()\n}\n\n// When executes the 'when' command for the Mozilla RR backend.\n// This command will return rr's internal event number.\nfunc (p *gdbProcess) When() (string, error) {\n\tif p.tracedir == \"\" {\n\t\treturn \"\", proc.ErrNotRecorded\n\t}\n\tevent, err := p.conn.qRRCmd(\"when\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn strings.TrimSpace(event), nil\n}\n\nconst (\n\tcheckpointPrefix = \"Checkpoint \"\n)\n\n// Checkpoint creates a checkpoint from which you can restart the program.\nfunc (p *gdbProcess) Checkpoint(where string) (int, error) {\n\tif p.tracedir == \"\" {\n\t\treturn -1, proc.ErrNotRecorded\n\t}\n\tresp, err := p.conn.qRRCmd(\"checkpoint\", where)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\tif !strings.HasPrefix(resp, checkpointPrefix) {\n\t\treturn -1, fmt.Errorf(\"can not parse checkpoint response %q\", resp)\n\t}\n\n\tidstr := resp[len(checkpointPrefix):]\n\tspace := strings.Index(idstr, \" \")\n\tif space < 0 {\n\t\treturn -1, fmt.Errorf(\"can not parse checkpoint response %q\", resp)\n\t}\n\tidstr = idstr[:space]\n\n\tcpid, err := strconv.Atoi(idstr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\treturn cpid, nil\n}\n\n// Checkpoints returns a list of all checkpoints set.\nfunc (p *gdbProcess) Checkpoints() ([]proc.Checkpoint, error) {\n\tif p.tracedir == \"\" {\n\t\treturn nil, proc.ErrNotRecorded\n\t}\n\tresp, err := p.conn.qRRCmd(\"info checkpoints\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlines := strings.Split(resp, \"\\n\")\n\tr := make([]proc.Checkpoint, 0, len(lines)-1)\n\tfor _, line := range lines[1:] {\n\t\tif line == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tfields := strings.Split(line, \"\\t\")\n\t\tif len(fields) != 3 {\n\t\t\treturn nil, fmt.Errorf(\"can not parse \\\"info checkpoints\\\" output line %q\", line)\n\t\t}\n\t\tcpid, err := strconv.Atoi(fields[0])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can not parse \\\"info checkpoints\\\" output line %q: %v\", line, err)\n\t\t}\n\t\tr = append(r, proc.Checkpoint{ID: cpid, When: fields[1], Where: fields[2]})\n\t}\n\treturn r, nil\n}\n\nconst deleteCheckpointPrefix = \"Deleted checkpoint \"\n\n// ClearCheckpoint clears the checkpoint for the given ID.\nfunc (p *gdbProcess) ClearCheckpoint(id int) error {\n\tif p.tracedir == \"\" {\n\t\treturn proc.ErrNotRecorded\n\t}\n\tresp, err := p.conn.qRRCmd(\"delete checkpoint\", strconv.Itoa(id))\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !strings.HasPrefix(resp, deleteCheckpointPrefix) {\n\t\treturn errors.New(resp)\n\t}\n\treturn nil\n}\n\n// ChangeDirection sets whether to run the program forwards or in reverse execution.\nfunc (p *gdbProcess) ChangeDirection(dir proc.Direction) error {\n\tif p.tracedir == \"\" {\n\t\tif dir != proc.Forward {\n\t\t\treturn proc.ErrNotRecorded\n\t\t}\n\t\treturn nil\n\t}\n\tif p.conn.conn == nil {\n\t\treturn proc.ErrProcessExited{Pid: p.conn.pid}\n\t}\n\tif p.conn.direction == dir {\n\t\treturn nil\n\t}\n\tif p.Breakpoints().HasSteppingBreakpoints() {\n\t\treturn ErrDirChange\n\t}\n\tp.conn.direction = dir\n\treturn nil\n}\n\n// StartCallInjection notifies the backend that we are about to inject a function call.\nfunc (p *gdbProcess) StartCallInjection() (func(), error) {\n\tif p.tracedir == \"\" {\n\t\treturn func() {}, nil\n\t}\n\tif p.conn.conn == nil {\n\t\treturn nil, proc.ErrProcessExited{Pid: p.conn.pid}\n\t}\n\tif p.conn.direction != proc.Forward {\n\t\treturn nil, ErrStartCallInjectionBackwards\n\t}\n\n\t// Normally it's impossible to inject function calls in a recorded target\n\t// because the sequence of instructions that the target will execute is\n\t// predetermined.\n\t// RR however allows this in a \"diversion\". When a diversion is started rr\n\t// takes the current state of the process and runs it forward as a normal\n\t// process, not following the recording.\n\t// The gdb serial protocol does not have a way to start a diversion and gdb\n\t// (the main frontend of rr) does not know how to do it. Instead a\n\t// diversion is started by reading siginfo, because that's the first\n\t// request gdb does when starting a function call injection.\n\n\t_, err := p.conn.qXfer(\"siginfo\", \"\", true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn func() {\n\t\t_ = p.conn.qXferWrite(\"siginfo\", \"\") // rr always returns an error for qXfer:siginfo:write... even though it works\n\t}, nil\n}\n\n// GetDirection returns the current direction of execution.\nfunc (p *gdbProcess) GetDirection() proc.Direction {\n\treturn p.conn.direction\n}\n\n// Breakpoints returns the list of breakpoints currently set.\nfunc (p *gdbProcess) Breakpoints() *proc.BreakpointMap {\n\treturn &p.breakpoints\n}\n\n// FindBreakpoint returns the breakpoint at the given address.\nfunc (p *gdbProcess) FindBreakpoint(pc uint64) (*proc.Breakpoint, bool) {\n\t// Directly use addr to lookup breakpoint.\n\tif bp, ok := p.breakpoints.M[pc]; ok {\n\t\treturn bp, true\n\t}\n\treturn nil, false\n}\n\nfunc watchTypeToBreakpointType(wtype proc.WatchType) breakpointType {\n\tswitch {\n\tcase wtype.Read() && wtype.Write():\n\t\treturn accessWatchpoint\n\tcase wtype.Write():\n\t\treturn writeWatchpoint\n\tcase wtype.Read():\n\t\treturn readWatchpoint\n\tdefault:\n\t\treturn swBreakpoint\n\t}\n}\n\nfunc (p *gdbProcess) WriteBreakpoint(bp *proc.Breakpoint) error {\n\tkind := p.breakpointKind\n\tif bp.WatchType != 0 {\n\t\tkind = bp.WatchType.Size()\n\t}\n\treturn p.conn.setBreakpoint(bp.Addr, watchTypeToBreakpointType(bp.WatchType), kind)\n}\n\nfunc (p *gdbProcess) EraseBreakpoint(bp *proc.Breakpoint) error {\n\tkind := p.breakpointKind\n\tif bp.WatchType != 0 {\n\t\tkind = bp.WatchType.Size()\n\t}\n\treturn p.conn.clearBreakpoint(bp.Addr, watchTypeToBreakpointType(bp.WatchType), kind)\n}\n\n// FollowExec enables (or disables) follow exec mode\nfunc (p *gdbProcess) FollowExec(bool) error {\n\treturn errors.New(\"follow exec not supported\")\n}\n\ntype threadUpdater struct {\n\tp    *gdbProcess\n\tseen map[int]bool\n\tdone bool\n}\n\nfunc (tu *threadUpdater) Reset() {\n\ttu.done = false\n\ttu.seen = nil\n}\n\nfunc (tu *threadUpdater) Add(threads []string) error {\n\tif tu.done {\n\t\tpanic(\"threadUpdater: Add after Finish\")\n\t}\n\tif tu.seen == nil {\n\t\ttu.seen = map[int]bool{}\n\t}\n\tfor _, threadID := range threads {\n\t\tb := threadID\n\t\tif period := strings.Index(b, \".\"); period >= 0 {\n\t\t\tb = b[period+1:]\n\t\t}\n\t\tn, err := strconv.ParseUint(b, 16, 32)\n\t\tif err != nil {\n\t\t\treturn &GdbMalformedThreadIDError{threadID}\n\t\t}\n\t\ttid := int(n)\n\t\ttu.seen[tid] = true\n\t\tif _, found := tu.p.threads[tid]; !found {\n\t\t\ttu.p.threads[tid] = &gdbThread{ID: tid, strID: threadID, p: tu.p}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (tu *threadUpdater) Finish() {\n\ttu.done = true\n\tfor threadID := range tu.p.threads {\n\t\t_, threadSeen := tu.seen[threadID]\n\t\tif threadSeen {\n\t\t\tcontinue\n\t\t}\n\t\tdelete(tu.p.threads, threadID)\n\t\tif tu.p.currentThread != nil && tu.p.currentThread.ID == threadID {\n\t\t\ttu.p.currentThread = nil\n\t\t}\n\t}\n\tif tu.p.currentThread != nil {\n\t\tif _, exists := tu.p.threads[tu.p.currentThread.ID]; !exists {\n\t\t\t// current thread was removed\n\t\t\ttu.p.currentThread = nil\n\t\t}\n\t}\n\tif tu.p.currentThread == nil {\n\t\tfor _, thread := range tu.p.threads {\n\t\t\ttu.p.currentThread = thread\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// updateThreadList retrieves the list of inferior threads from\n// the stub and passes it to threadUpdater.\n// Some stubs will return the list of running threads in the stop packet, if\n// this happens the threadUpdater will know that we have already updated the\n// thread list and the first step of updateThreadList will be skipped.\nfunc (p *gdbProcess) updateThreadList(tu *threadUpdater, jstopInfo map[int]stopPacket) error {\n\tif !tu.done {\n\t\tfirst := true\n\t\tfor {\n\t\t\tthreads, err := p.conn.queryThreads(first)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif len(threads) == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfirst = false\n\t\t\tif err := tu.Add(threads); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\ttu.Finish()\n\t}\n\n\tfor _, th := range p.threads {\n\t\tqueryThreadInfo := true\n\t\tif jstopInfo != nil {\n\t\t\t// TODO(derekparker): Use jstopInfo directly, if present, instead of\n\t\t\t// issuing another stop info request.\n\t\t\t_, queryThreadInfo = jstopInfo[th.ID]\n\t\t}\n\t\tif p.threadStopInfo && queryThreadInfo {\n\t\t\tsp, err := p.conn.threadStopInfo(th.strID)\n\t\t\tif err != nil {\n\t\t\t\tif isProtocolErrorUnsupported(err) {\n\t\t\t\t\tp.threadStopInfo = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tth.setbp = (sp.reason == \"breakpoint\" || (sp.reason == \"\" && sp.sig == breakpointSignal) || (sp.watchAddr > 0) || (sp.watchReg >= 0))\n\t\t\tth.sig = sp.sig\n\t\t\tth.watchAddr = sp.watchAddr\n\t\t\tth.watchReg = sp.watchReg\n\t\t} else {\n\t\t\tth.clearBreakpointState()\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// clearThreadRegisters clears the memoized thread register state.\nfunc (p *gdbProcess) clearThreadRegisters() {\n\tfor _, thread := range p.threads {\n\t\tthread.regs.regs = nil\n\t}\n}\n\nfunc (p *gdbProcess) clearThreadSignals() {\n\tfor _, th := range p.threads {\n\t\tth.sig = 0\n\t}\n}\n\nfunc (p *gdbProcess) setCurrentBreakpoints() error {\n\tif p.threadStopInfo {\n\t\tfor _, th := range p.threads {\n\t\t\tif th.setbp {\n\t\t\t\terr := th.SetCurrentBreakpoint(true)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif !p.threadStopInfo {\n\t\tfor _, th := range p.threads {\n\t\t\tif th.CurrentBreakpoint.Breakpoint == nil {\n\t\t\t\terr := th.SetCurrentBreakpoint(true)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// ReadMemory will read into 'data' memory at the address provided.\nfunc (p *gdbProcess) ReadMemory(data []byte, addr uint64) (n int, err error) {\n\terr = p.conn.readMemory(data, addr)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn len(data), nil\n}\n\n// WriteMemory will write into the memory at 'addr' the data provided.\nfunc (p *gdbProcess) WriteMemory(addr uint64, data []byte) (written int, err error) {\n\treturn p.conn.writeMemory(addr, data)\n}\n\nfunc (p *gdbProcess) StepInstruction(threadID int) error {\n\treturn p.threads[threadID].stepInstruction()\n}\n\nfunc (t *gdbThread) ProcessMemory() proc.MemoryReadWriter {\n\treturn t.p\n}\n\n// Breakpoint returns the current active breakpoint for this thread.\nfunc (t *gdbThread) Breakpoint() *proc.BreakpointState {\n\treturn &t.CurrentBreakpoint\n}\n\n// ThreadID returns this threads ID.\nfunc (t *gdbThread) ThreadID() int {\n\treturn t.ID\n}\n\n// Registers returns the CPU registers for this thread.\nfunc (t *gdbThread) Registers() (proc.Registers, error) {\n\tif t.regs.regs == nil {\n\t\tif err := t.reloadRegisters(nil); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn &t.regs, nil\n}\n\n// RestoreRegisters will set the CPU registers the value of those provided.\nfunc (t *gdbThread) RestoreRegisters(savedRegs proc.Registers) error {\n\tcopy(t.regs.buf, savedRegs.(*gdbRegisters).buf)\n\treturn t.writeRegisters()\n}\n\n// BinInfo will return information on the binary being debugged.\nfunc (t *gdbThread) BinInfo() *proc.BinaryInfo {\n\treturn t.p.bi\n}\n\n// Common returns common information across Process implementations.\nfunc (t *gdbThread) Common() *proc.CommonThread {\n\treturn &t.common\n}\n\n// StepInstruction will step exactly 1 CPU instruction.\nfunc (t *gdbThread) stepInstruction() error {\n\tpc := t.regs.PC()\n\tif bp, atbp := t.p.breakpoints.M[pc]; atbp && bp.WatchType == 0 {\n\t\terr := t.p.conn.clearBreakpoint(pc, swBreakpoint, t.p.breakpointKind)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer t.p.conn.setBreakpoint(pc, swBreakpoint, t.p.breakpointKind)\n\t}\n\t// Reset thread registers so the next call to\n\t// Thread.Registers will not be cached.\n\tt.regs.regs = nil\n\treturn t.p.conn.step(t, &threadUpdater{p: t.p}, false)\n}\n\n// SoftExc returns true if this thread received a software exception during the last resume.\nfunc (t *gdbThread) SoftExc() bool {\n\treturn t.setbp\n}\n\n// Blocked returns true if the thread is blocked in runtime or kernel code.\nfunc (t *gdbThread) Blocked() bool {\n\tregs, err := t.Registers()\n\tif err != nil {\n\t\treturn false\n\t}\n\tpc := regs.PC()\n\tf, ln, fn := t.BinInfo().PCToLine(pc)\n\tif fn == nil {\n\t\tif f == \"\" && ln == 0 {\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\tswitch fn.Name {\n\tcase \"runtime.futex\", \"runtime.usleep\", \"runtime.clone\":\n\t\treturn true\n\tcase \"runtime.kevent\":\n\t\treturn true\n\tcase \"runtime.mach_semaphore_wait\", \"runtime.mach_semaphore_timedwait\":\n\t\treturn true\n\tdefault:\n\t\treturn strings.HasPrefix(fn.Name, \"syscall.Syscall\") || strings.HasPrefix(fn.Name, \"syscall.RawSyscall\")\n\t}\n}\n\n// loadGInstr returns the correct MOV instruction for the current\n// OS/architecture that can be executed to load the address of G from an\n// inferior's thread.\nfunc (p *gdbProcess) loadGInstr() ([]byte, error) {\n\tvar op []byte\n\tswitch p.bi.GOOS {\n\tcase \"windows\", \"darwin\", \"freebsd\":\n\t\t// mov rcx, QWORD PTR gs:{uint32(off)}\n\t\top = []byte{0x65, 0x48, 0x8b, 0x0c, 0x25}\n\tcase \"linux\":\n\t\t// mov rcx,QWORD PTR fs:{uint32(off)}\n\t\top = []byte{0x64, 0x48, 0x8B, 0x0C, 0x25}\n\tdefault:\n\t\tpanic(\"unsupported operating system attempting to find Goroutine on Thread\")\n\t}\n\toffset, err := p.bi.GStructOffset(p.Memory())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbuf := &bytes.Buffer{}\n\tbuf.Write(op)\n\tbinary.Write(buf, binary.LittleEndian, uint32(offset))\n\treturn buf.Bytes(), nil\n}\n\nfunc (p *gdbProcess) MemoryMap() ([]proc.MemoryMapEntry, error) {\n\tr := []proc.MemoryMapEntry{}\n\taddr := uint64(0)\n\tfor addr != ^uint64(0) {\n\t\tmri, err := p.conn.memoryRegionInfo(addr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif addr+mri.size <= addr {\n\t\t\treturn nil, errors.New(\"qMemoryRegionInfo response wrapped around the address space or stuck\")\n\t\t}\n\t\tif mri.permissions != \"\" {\n\t\t\tvar mme proc.MemoryMapEntry\n\n\t\t\tmme.Addr = addr\n\t\t\tmme.Size = mri.size\n\t\t\tmme.Read = strings.Contains(mri.permissions, \"r\")\n\t\t\tmme.Write = strings.Contains(mri.permissions, \"w\")\n\t\t\tmme.Exec = strings.Contains(mri.permissions, \"x\")\n\n\t\t\tr = append(r, mme)\n\t\t}\n\t\taddr += mri.size\n\t}\n\treturn r, nil\n}\n\nfunc (p *gdbProcess) DumpProcessNotes(notes []elfwriter.Note, threadDone func()) (threadsDone bool, out []elfwriter.Note, err error) {\n\treturn false, notes, nil\n}\n\nfunc (regs *gdbRegisters) init(regsInfo []gdbRegisterInfo, arch *proc.Arch, regnames *gdbRegnames) {\n\tregs.arch = arch\n\tregs.regnames = regnames\n\tregs.regs = make(map[string]gdbRegister)\n\tregs.regsInfo = regsInfo\n\tregs.loaded = make([]bool, len(regsInfo))\n\n\tregsz := 0\n\tfor _, reginfo := range regsInfo {\n\t\tif endoff := reginfo.Offset + (reginfo.Bitsize / 8); endoff > regsz {\n\t\t\tregsz = endoff\n\t\t}\n\t}\n\tregs.buf = make([]byte, regsz)\n\tfor _, reginfo := range regsInfo {\n\t\tregs.regs[reginfo.Name] = regs.gdbRegisterNew(&reginfo)\n\t}\n}\n\nfunc (regs *gdbRegisters) gdbRegisterNew(reginfo *gdbRegisterInfo) gdbRegister {\n\treturn gdbRegister{regnum: reginfo.Regnum, value: regs.buf[reginfo.Offset : reginfo.Offset+reginfo.Bitsize/8], ignoreOnWrite: reginfo.ignoreOnWrite}\n}\n\n// reloadRegisters loads the current value of the thread's registers.\n// It will also load the address of the thread's G.\n// Loading the address of G can be done in one of two ways reloadGAlloc, if\n// the stub can allocate memory, or reloadGAtPC, if the stub can't.\nfunc (t *gdbThread) reloadRegisters(regs map[uint64]uint64) error {\n\tif t.regs.regs == nil {\n\t\tt.regs.init(t.p.conn.regsInfo, t.p.bi.Arch, t.p.regnames)\n\t}\n\n\tif regs == nil {\n\t\tif t.p.gcmdok {\n\t\t\tif err := t.p.conn.readRegisters(t.strID, t.regs.buf); err != nil {\n\t\t\t\tgdberr, isProt := err.(*GdbProtocolError)\n\t\t\t\tif isProtocolErrorUnsupported(err) || (t.p.conn.isDebugserver && isProt && gdberr.code == \"E74\") {\n\t\t\t\t\tt.p.gcmdok = false\n\t\t\t\t} else {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor i := range t.regs.loaded {\n\t\t\t\t\tt.regs.loaded[i] = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif !t.p.gcmdok {\n\t\t\tfor i, reginfo := range t.p.conn.regsInfo {\n\t\t\t\tt.regs.loaded[i] = true\n\t\t\t\tif err := t.p.conn.readRegister(t.strID, reginfo.Regnum, t.regs.regs[reginfo.Name].value); err != nil {\n\t\t\t\t\tlogflags.DebuggerLogger().Errorf(\"Could not read register %s: %v\\n\", reginfo.Name, err)\n\t\t\t\t\tfor i := range t.regs.regs[reginfo.Name].value {\n\t\t\t\t\t\tt.regs.regs[reginfo.Name].value[i] = 0\n\t\t\t\t\t}\n\t\t\t\t\tt.regs.loaded[i] = false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor i, r := range t.p.conn.regsInfo {\n\t\t\tt.regs.loaded[i] = true\n\t\t\tif val, ok := regs[uint64(r.Regnum)]; ok {\n\t\t\t\tswitch r.Bitsize / 8 {\n\t\t\t\tcase 8:\n\t\t\t\t\tbinary.BigEndian.PutUint64(t.regs.regs[r.Name].value, val)\n\t\t\t\tcase 4:\n\t\t\t\t\tbinary.BigEndian.PutUint32(t.regs.regs[r.Name].value, uint32(val))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif err := t.p.conn.readRegister(t.strID, r.Regnum, t.regs.regs[r.Name].value); err != nil {\n\t\t\t\t\tlogflags.DebuggerLogger().Errorf(\"Could not read register %s: %v\\n\", r.Name, err)\n\t\t\t\t\tfor i := range t.regs.regs[r.Name].value {\n\t\t\t\t\t\tt.regs.regs[r.Name].value[i] = 0\n\t\t\t\t\t}\n\t\t\t\t\tt.regs.loaded[i] = false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif t.p.bi.GOOS == \"linux\" {\n\t\tif reg, hasFsBase := t.regs.regs[t.p.regnames.FsBase]; hasFsBase {\n\t\t\tt.regs.gaddr = 0\n\t\t\tt.regs.tls = binary.LittleEndian.Uint64(reg.value)\n\t\t\tt.regs.hasgaddr = false\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tif t.p.bi.Arch.Name == \"arm64\" {\n\t\t// no need to play around with the GInstr on ARM64 because\n\t\t// the G addr is stored in a register\n\n\t\tt.regs.gaddr = t.regs.byName(\"x28\")\n\t\tt.regs.hasgaddr = true\n\t\tt.regs.tls = 0\n\t} else {\n\t\tif t.p.loadGInstrAddr > 0 {\n\t\t\treturn t.reloadGAlloc()\n\t\t}\n\t\treturn t.reloadGAtPC()\n\t}\n\n\treturn nil\n}\n\nfunc (t *gdbThread) writeSomeRegisters(regNames ...string) error {\n\tif t.p.gcmdok {\n\t\treturn t.p.conn.writeRegisters(t.strID, t.regs.buf)\n\t}\n\tfor _, regName := range regNames {\n\t\tif err := t.p.conn.writeRegister(t.strID, t.regs.regs[regName].regnum, t.regs.regs[regName].value); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (t *gdbThread) writeRegisters() error {\n\tif t.p.gcmdok && t.p._Gcmdok {\n\t\terr := t.p.conn.writeRegisters(t.strID, t.regs.buf)\n\t\tif isProtocolErrorUnsupported(err) {\n\t\t\tt.p._Gcmdok = false\n\t\t} else {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor i, reginfo := range t.regs.regsInfo {\n\t\tr := t.regs.regs[reginfo.Name]\n\t\tif r.ignoreOnWrite || !t.regs.loaded[i] {\n\t\t\tcontinue\n\t\t}\n\t\tif err := t.p.conn.writeRegister(t.strID, r.regnum, r.value); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (t *gdbThread) readSomeRegisters(regNames ...string) error {\n\tif t.p.gcmdok {\n\t\treturn t.p.conn.readRegisters(t.strID, t.regs.buf)\n\t}\n\tfor _, regName := range regNames {\n\t\terr := t.p.conn.readRegister(t.strID, t.regs.regs[regName].regnum, t.regs.regs[regName].value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// reloadGAtPC overwrites the instruction that the thread is stopped at with\n// the MOV instruction used to load current G, executes this single\n// instruction and then puts everything back the way it was.\nfunc (t *gdbThread) reloadGAtPC() error {\n\tmovinstr, err := t.p.loadGInstr()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif t.Blocked() {\n\t\tt.regs.tls = 0\n\t\tt.regs.gaddr = 0\n\t\tt.regs.hasgaddr = true\n\t\treturn nil\n\t}\n\n\tcx := t.regs.CX()\n\tpc := t.regs.PC()\n\n\t// We are partially replicating the code of GdbserverThread.stepInstruction\n\t// here.\n\t// The reason is that lldb-server has a bug with writing to memory and\n\t// setting/clearing breakpoints to that same memory which we must work\n\t// around by clearing and re-setting the breakpoint in a specific sequence\n\t// with the memory writes.\n\t// Additionally all breakpoints in [pc, pc+len(movinstr)] need to be removed\n\tfor addr, bp := range t.p.breakpoints.M {\n\t\tif bp.WatchType != 0 {\n\t\t\tcontinue\n\t\t}\n\t\tif addr >= pc && addr <= pc+uint64(len(movinstr)) {\n\t\t\terr := t.p.conn.clearBreakpoint(addr, swBreakpoint, t.p.breakpointKind)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tdefer t.p.conn.setBreakpoint(addr, swBreakpoint, t.p.breakpointKind)\n\t\t}\n\t}\n\n\tsavedcode := make([]byte, len(movinstr))\n\t_, err = t.p.ReadMemory(savedcode, pc)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t_, err = t.p.WriteMemory(pc, movinstr)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdefer func() {\n\t\t_, err0 := t.p.WriteMemory(pc, savedcode)\n\t\tif err == nil {\n\t\t\terr = err0\n\t\t}\n\t\tt.regs.setPC(pc)\n\t\tt.regs.setCX(cx)\n\t\terr1 := t.writeSomeRegisters(t.p.regnames.PC, t.p.regnames.CX)\n\t\tif err == nil {\n\t\t\terr = err1\n\t\t}\n\t}()\n\n\terr = t.p.conn.step(t, nil, true)\n\tif err != nil {\n\t\tif err == errThreadBlocked {\n\t\t\tt.regs.tls = 0\n\t\t\tt.regs.gaddr = 0\n\t\t\tt.regs.hasgaddr = true\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\n\tif err := t.readSomeRegisters(t.p.regnames.PC, t.p.regnames.CX); err != nil {\n\t\treturn err\n\t}\n\n\tt.regs.gaddr = t.regs.CX()\n\tt.regs.hasgaddr = true\n\n\treturn err\n}\n\n// reloadGAlloc makes the specified thread execute one instruction stored at\n// t.p.loadGInstrAddr then restores the value of the thread's registers.\n// t.p.loadGInstrAddr must point to valid memory on the inferior, containing\n// a MOV instruction that loads the address of the current G in the RCX\n// register.\nfunc (t *gdbThread) reloadGAlloc() error {\n\tif t.Blocked() {\n\t\tt.regs.tls = 0\n\t\tt.regs.gaddr = 0\n\t\tt.regs.hasgaddr = true\n\t\treturn nil\n\t}\n\n\tcx := t.regs.CX()\n\tpc := t.regs.PC()\n\n\tt.regs.setPC(t.p.loadGInstrAddr)\n\tif err := t.writeSomeRegisters(t.p.regnames.PC); err != nil {\n\t\treturn err\n\t}\n\n\tvar err error\n\n\tdefer func() {\n\t\tt.regs.setPC(pc)\n\t\tt.regs.setCX(cx)\n\t\terr1 := t.writeSomeRegisters(t.p.regnames.PC, t.p.regnames.CX)\n\t\tif err == nil {\n\t\t\terr = err1\n\t\t}\n\t}()\n\n\terr = t.p.conn.step(t, nil, true)\n\tif err != nil {\n\t\tif err == errThreadBlocked {\n\t\t\tt.regs.tls = 0\n\t\t\tt.regs.gaddr = 0\n\t\t\tt.regs.hasgaddr = true\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\n\tif err := t.readSomeRegisters(t.p.regnames.CX); err != nil {\n\t\treturn err\n\t}\n\n\tt.regs.gaddr = t.regs.CX()\n\tt.regs.hasgaddr = true\n\n\treturn err\n}\n\nfunc (t *gdbThread) clearBreakpointState() {\n\tt.setbp = false\n\tt.watchAddr = 0\n\tt.watchReg = -1\n\tt.CurrentBreakpoint.Clear()\n}\n\n// SetCurrentBreakpoint will find and set the threads current breakpoint.\nfunc (t *gdbThread) SetCurrentBreakpoint(adjustPC bool) error {\n\t// adjustPC is ignored, it is the stub's responsibility to set the PC\n\t// address correctly after hitting a breakpoint.\n\tt.CurrentBreakpoint.Clear()\n\t// t.watchAddr on certain mach kernel versions could contain the address of a\n\t// software breakpoint, hardcoded breakpoint (e.g. runtime.Breakpoint) or a\n\t// hardware watchpoint. The mach exception produced by the kernel *should* disambiguate\n\t// but it doesn't.\n\tif t.watchAddr > 0 {\n\t\tt.CurrentBreakpoint.Breakpoint = t.p.Breakpoints().M[t.watchAddr]\n\t\tif t.CurrentBreakpoint.Breakpoint == nil {\n\t\t\tbuf := make([]byte, t.BinInfo().Arch.BreakpointSize())\n\t\t\t_, err := t.p.ReadMemory(buf, t.watchAddr)\n\t\t\tisHardcodedBreakpoint := err == nil && (bytes.Equal(t.BinInfo().Arch.BreakpointInstruction(), buf) || bytes.Equal(t.BinInfo().Arch.AltBreakpointInstruction(), buf))\n\t\t\tif isHardcodedBreakpoint {\n\t\t\t\t// This is a hardcoded breakpoint, ignore.\n\t\t\t\t// TODO(deparker): There's an optimization here since we will do this\n\t\t\t\t// again at a higher level to determine if we've stopped at a hardcoded breakpoint.\n\t\t\t\t// We could set some state here so that we don't do extra work later.\n\t\t\t\tt.watchAddr = 0\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"could not find watchpoint at address %#x\", t.watchAddr)\n\t\t}\n\t\treturn nil\n\t}\n\tif t.watchReg >= 0 {\n\t\tfor _, bp := range t.p.Breakpoints().M {\n\t\t\tif bp.WatchType != 0 && bp.HWBreakIndex == uint8(t.watchReg) {\n\t\t\t\tt.CurrentBreakpoint.Breakpoint = bp\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\tregs, err := t.Registers()\n\tif err != nil {\n\t\treturn err\n\t}\n\tpc := regs.PC()\n\tif bp, ok := t.p.FindBreakpoint(pc); ok {\n\t\tif t.regs.PC() != bp.Addr {\n\t\t\tif err := t.setPC(bp.Addr); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tt.CurrentBreakpoint.Breakpoint = bp\n\t}\n\treturn nil\n}\n\nfunc (regs *gdbRegisters) PC() uint64 {\n\treturn binary.LittleEndian.Uint64(regs.regs[regs.regnames.PC].value)\n}\n\nfunc (regs *gdbRegisters) setPC(value uint64) {\n\tbinary.LittleEndian.PutUint64(regs.regs[regs.regnames.PC].value, value)\n}\n\nfunc (regs *gdbRegisters) SP() uint64 {\n\treturn binary.LittleEndian.Uint64(regs.regs[regs.regnames.SP].value)\n}\n\nfunc (regs *gdbRegisters) BP() uint64 {\n\treturn binary.LittleEndian.Uint64(regs.regs[regs.regnames.BP].value)\n}\n\nfunc (regs *gdbRegisters) CX() uint64 {\n\treturn binary.LittleEndian.Uint64(regs.regs[regs.regnames.CX].value)\n}\n\nfunc (regs *gdbRegisters) setCX(value uint64) {\n\tbinary.LittleEndian.PutUint64(regs.regs[regs.regnames.CX].value, value)\n}\n\nfunc (regs *gdbRegisters) TLS() uint64 {\n\treturn regs.tls\n}\n\nfunc (regs *gdbRegisters) GAddr() (uint64, bool) {\n\treturn regs.gaddr, regs.hasgaddr\n}\n\nfunc (regs *gdbRegisters) LR() uint64 {\n\treturn binary.LittleEndian.Uint64(regs.regs[\"lr\"].value)\n}\n\nfunc (regs *gdbRegisters) byName(name string) uint64 {\n\treg, ok := regs.regs[name]\n\tif !ok {\n\t\treturn 0\n\t}\n\treturn binary.LittleEndian.Uint64(reg.value)\n}\n\nfunc (regs *gdbRegisters) FloatLoadError() error {\n\treturn nil\n}\n\n// SetPC will set the value of the PC register to the given value.\nfunc (t *gdbThread) setPC(pc uint64) error {\n\t_, _ = t.Registers() // Registers must be loaded first\n\tt.regs.setPC(pc)\n\tif t.p.gcmdok {\n\t\treturn t.p.conn.writeRegisters(t.strID, t.regs.buf)\n\t}\n\treg := t.regs.regs[t.regs.regnames.PC]\n\treturn t.p.conn.writeRegister(t.strID, reg.regnum, reg.value)\n}\n\n// SetReg will change the value of a list of registers\nfunc (t *gdbThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tregName := registerName(t.p.bi.Arch, regNum)\n\t_, _ = t.Registers() // Registers must be loaded first\n\tgdbreg, ok := t.regs.regs[regName]\n\tif !ok && strings.HasPrefix(regName, \"xmm\") {\n\t\t// XMMn and YMMn are the same amd64 register (in different sizes), if we\n\t\t// don't find XMMn try YMMn or ZMMn instead.\n\t\tgdbreg, ok = t.regs.regs[\"y\"+regName[1:]]\n\t\tif !ok {\n\t\t\tgdbreg, ok = t.regs.regs[\"z\"+regName[1:]]\n\t\t}\n\t}\n\tif !ok && t.p.bi.Arch.Name == \"arm64\" && regName == \"x30\" {\n\t\tgdbreg, ok = t.regs.regs[\"lr\"]\n\t}\n\tif !ok && regName == \"rflags\" {\n\t\t// rr has eflags instead of rflags\n\t\tregName = \"eflags\"\n\t\tgdbreg, ok = t.regs.regs[regName]\n\t\tif ok {\n\t\t\treg.FillBytes()\n\t\t\treg.Bytes = reg.Bytes[:4]\n\t\t}\n\t}\n\tif !ok {\n\t\treturn fmt.Errorf(\"could not set register %s: not found\", regName)\n\t}\n\treg.FillBytes()\n\n\twrongSizeErr := func(n int) error {\n\t\treturn fmt.Errorf(\"could not set register %s: wrong size, expected %d got %d\", regName, n, len(reg.Bytes))\n\t}\n\n\tif len(reg.Bytes) == len(gdbreg.value) {\n\t\tcopy(gdbreg.value, reg.Bytes)\n\t\terr := t.p.conn.writeRegister(t.strID, gdbreg.regnum, gdbreg.value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif t.p.conn.workaroundReg != nil && len(gdbreg.value) > 16 {\n\t\t\t// This is a workaround for a bug in debugserver where register writes (P\n\t\t\t// packet) on AVX-2 and AVX-512 registers are ignored unless they are\n\t\t\t// followed by a write to an AVX register.\n\t\t\t// See:\n\t\t\t//  Issue #2767\n\t\t\t//  https://bugs.llvm.org/show_bug.cgi?id=52362\n\t\t\treg := t.regs.gdbRegisterNew(t.p.conn.workaroundReg)\n\t\t\treturn t.p.conn.writeRegister(t.strID, reg.regnum, reg.value)\n\t\t}\n\t} else if len(reg.Bytes) == 2*len(gdbreg.value) && strings.HasPrefix(regName, \"xmm\") {\n\t\t// rr uses xmmN for the low part of the register and ymmNh for the high part\n\t\tgdbregh, ok := t.regs.regs[\"y\"+regName[1:]+\"h\"]\n\t\tif !ok {\n\t\t\treturn wrongSizeErr(len(gdbreg.value))\n\t\t}\n\t\tif len(reg.Bytes) != len(gdbreg.value)+len(gdbregh.value) {\n\t\t\treturn wrongSizeErr(len(gdbreg.value) + len(gdbregh.value))\n\t\t}\n\t\tcopy(gdbreg.value, reg.Bytes[:len(gdbreg.value)])\n\t\tcopy(gdbregh.value, reg.Bytes[len(gdbreg.value):])\n\t\terr := t.p.conn.writeRegister(t.strID, gdbreg.regnum, gdbreg.value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = t.p.conn.writeRegister(t.strID, gdbregh.regnum, gdbregh.value)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\treturn wrongSizeErr(len(gdbreg.value))\n\t}\n\treturn nil\n}\n\nfunc (regs *gdbRegisters) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tr := make([]proc.Register, 0, len(regs.regsInfo))\n\tfor _, reginfo := range regs.regsInfo {\n\t\tif reginfo.Group == \"float\" && !floatingPoint {\n\t\t\tcontinue\n\t\t}\n\t\tswitch {\n\t\tcase reginfo.Name == \"eflags\":\n\t\t\tr = proc.AppendBytesRegister(r, \"Rflags\", regs.regs[reginfo.Name].value)\n\t\tcase reginfo.Name == \"mxcsr\":\n\t\t\tr = proc.AppendBytesRegister(r, reginfo.Name, regs.regs[reginfo.Name].value)\n\t\tcase reginfo.Bitsize == 16:\n\t\t\tr = proc.AppendBytesRegister(r, reginfo.Name, regs.regs[reginfo.Name].value)\n\t\tcase reginfo.Bitsize == 32:\n\t\t\tr = proc.AppendBytesRegister(r, reginfo.Name, regs.regs[reginfo.Name].value)\n\t\tcase reginfo.Bitsize == 64:\n\t\t\tr = proc.AppendBytesRegister(r, reginfo.Name, regs.regs[reginfo.Name].value)\n\t\tcase reginfo.Bitsize == 80:\n\t\t\tif !floatingPoint {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tidx := 0\n\t\t\tfor _, stprefix := range []string{\"stmm\", \"st\"} {\n\t\t\t\tif strings.HasPrefix(reginfo.Name, stprefix) {\n\t\t\t\t\tidx, _ = strconv.Atoi(reginfo.Name[len(stprefix):])\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tr = proc.AppendBytesRegister(r, fmt.Sprintf(\"ST(%d)\", idx), regs.regs[reginfo.Name].value)\n\n\t\tcase reginfo.Bitsize == 128:\n\t\t\tif floatingPoint {\n\t\t\t\tname := reginfo.Name\n\t\t\t\tif last := name[len(name)-1]; last == 'h' || last == 'H' {\n\t\t\t\t\tname = name[:len(name)-1]\n\t\t\t\t}\n\t\t\t\tr = proc.AppendBytesRegister(r, strings.ToUpper(name), regs.regs[reginfo.Name].value)\n\t\t\t}\n\n\t\tcase reginfo.Bitsize == 256:\n\t\t\tif !strings.HasPrefix(strings.ToLower(reginfo.Name), \"ymm\") || !floatingPoint {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvalue := regs.regs[reginfo.Name].value\n\t\t\txmmName := \"x\" + reginfo.Name[1:]\n\t\t\tr = proc.AppendBytesRegister(r, strings.ToUpper(xmmName), value)\n\n\t\tcase reginfo.Bitsize == 512:\n\t\t\tif !strings.HasPrefix(strings.ToLower(reginfo.Name), \"zmm\") || !floatingPoint {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvalue := regs.regs[reginfo.Name].value\n\t\t\txmmName := \"x\" + reginfo.Name[1:]\n\t\t\tr = proc.AppendBytesRegister(r, strings.ToUpper(xmmName), value)\n\t\t}\n\t}\n\treturn r, nil\n}\n\nfunc (regs *gdbRegisters) Copy() (proc.Registers, error) {\n\tsavedRegs := &gdbRegisters{}\n\tsavedRegs.init(regs.regsInfo, regs.arch, regs.regnames)\n\tcopy(savedRegs.buf, regs.buf)\n\tcopy(savedRegs.loaded, regs.loaded)\n\treturn savedRegs, nil\n}\n\nfunc registerName(arch *proc.Arch, regNum uint64) string {\n\tregName, _, _ := arch.DwarfRegisterToString(int(regNum), nil)\n\treturn strings.ToLower(regName)\n}\n\nfunc machTargetExcToError(sig uint8) error {\n\tswitch sig {\n\tcase 0x91:\n\t\treturn errors.New(\"bad access\")\n\tcase 0x92:\n\t\treturn errors.New(\"bad instruction\")\n\tcase 0x93:\n\t\treturn errors.New(\"arithmetic exception\")\n\tcase 0x94:\n\t\treturn errors.New(\"emulation exception\")\n\tcase 0x95:\n\t\treturn errors.New(\"software exception\")\n\tcase 0x96:\n\t\treturn errors.New(\"breakpoint exception\")\n\t}\n\treturn nil\n}\n\nfunc checkRosettaExpensive() error {\n\tif runtime.GOOS != \"darwin\" {\n\t\treturn nil\n\t}\n\tif runtime.GOARCH != \"arm64\" {\n\t\treturn nil\n\t}\n\n\t// Additionally check the output of 'uname -m' if it's x86_64 it means that\n\t// the shell we are running on is being emulated by Rosetta even though our\n\t// process isn't. In this condition debugserver will crash.\n\tout, err := exec.Command(\"uname\", \"-m\").Output()\n\tif err != nil {\n\t\treturn nil\n\t}\n\ts := strings.TrimSpace(string(out))\n\tif s == \"x86_64\" {\n\t\treturn errors.New(\"can not run under Rosetta, check that the terminal/shell in use is right for your CPU architecture\")\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/gdbserial/gdbserver_conn.go",
    "content": "package gdbserial\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"debug/macho\"\n\t\"encoding/hex\"\n\t\"encoding/json\"\n\t\"encoding/xml\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\ntype gdbConn struct {\n\tconn net.Conn\n\trdr  *bufio.Reader\n\n\tinbuf  []byte\n\toutbuf bytes.Buffer\n\n\trunning bool\n\n\tdirection proc.Direction // direction of execution\n\n\tpacketSize int               // maximum packet size supported by stub\n\tregsInfo   []gdbRegisterInfo // list of registers\n\n\tworkaroundReg *gdbRegisterInfo // used to work-around a register setting bug in debugserver, see use in gdbserver.go\n\n\tpid int // cache process id\n\n\tack                   bool // when ack is true acknowledgment packets are enabled\n\tmultiprocess          bool // multiprocess extensions are active\n\tmaxTransmitAttempts   int  // maximum number of transmit or receive attempts when bad checksums are read\n\tthreadSuffixSupported bool // thread suffix supported by stub\n\tisDebugserver         bool // true if the stub is debugserver\n\txcmdok                bool // x command can be used to transfer memory\n\tgoarch                string\n\tgoos                  string\n\n\tuseXcmd       bool // forces writeMemory to use the 'X' command\n\tnewRRCmdStyle bool // forces qRRCmd to use the post-5.8.0 style always\n\n\tlog logflags.Logger\n}\n\nvar ErrTooManyAttempts = errors.New(\"too many transmit attempts\")\n\n// GdbProtocolError is an error response (Exx) of Gdb Remote Serial Protocol\n// or an \"unsupported command\" response (empty packet).\ntype GdbProtocolError struct {\n\tcontext string\n\tcmd     string\n\tcode    string\n}\n\nfunc (err *GdbProtocolError) Error() string {\n\tcmd := err.cmd\n\tif len(cmd) > 20 {\n\t\tcmd = cmd[:20] + \"...\"\n\t}\n\tif err.code == \"\" {\n\t\treturn fmt.Sprintf(\"unsupported packet %s during %s\", cmd, err.context)\n\t}\n\treturn fmt.Sprintf(\"protocol error %s during %s for packet %s\", err.code, err.context, cmd)\n}\n\nfunc isProtocolErrorUnsupported(err error) bool {\n\tgdberr, ok := err.(*GdbProtocolError)\n\tif !ok {\n\t\treturn false\n\t}\n\treturn gdberr.code == \"\"\n}\n\n// GdbMalformedThreadIDError is returned when the stub responds with a\n// thread ID that does not conform with the Gdb Remote Serial Protocol\n// specification.\ntype GdbMalformedThreadIDError struct {\n\ttid string\n}\n\nfunc (err *GdbMalformedThreadIDError) Error() string {\n\treturn fmt.Sprintf(\"malformed thread ID %q\", err.tid)\n}\n\nconst (\n\tqSupportedSimple       = \"$qSupported:swbreak+;hwbreak+;no-resumed+;xmlRegisters=i386\"\n\tqSupportedMultiprocess = \"$qSupported:multiprocess+;swbreak+;hwbreak+;no-resumed+;xmlRegisters=i386\"\n)\n\nfunc (conn *gdbConn) handshake(regnames *gdbRegnames) error {\n\tconn.ack = true\n\tconn.packetSize = 256\n\tconn.rdr = bufio.NewReader(conn.conn)\n\n\t// This first ack packet is needed to start up the connection\n\tconn.sendack('+')\n\n\tconn.disableAck()\n\n\t// Try to enable thread suffixes for the command 'g' and 'p'\n\tif _, err := conn.exec([]byte(\"$QThreadSuffixSupported\"), \"init\"); err != nil {\n\t\tif isProtocolErrorUnsupported(err) {\n\t\t\tconn.threadSuffixSupported = false\n\t\t} else {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\tconn.threadSuffixSupported = true\n\t}\n\n\tif !conn.threadSuffixSupported {\n\t\tfeatures, err := conn.qSupported(true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconn.multiprocess = features[\"multiprocess\"]\n\n\t\t// for some reason gdbserver won't let us read target.xml unless first we\n\t\t// select a thread.\n\t\tif conn.multiprocess {\n\t\t\tconn.exec([]byte(\"$Hgp0.0\"), \"init\")\n\t\t} else {\n\t\t\tconn.exec([]byte(\"$Hgp0\"), \"init\")\n\t\t}\n\t} else {\n\t\t// execute qSupported with the multiprocess feature disabled (the\n\t\t// interaction of thread suffixes and multiprocess is not documented), we\n\t\t// only need this call to configure conn.packetSize.\n\t\tif _, err := conn.qSupported(false); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Attempt to figure out the name of the processor register.\n\t// We either need qXfer:features:read (gdbserver/rr) or qRegisterInfo (lldb)\n\tregFound := map[string]bool{\n\t\tregnames.PC: false,\n\t\tregnames.SP: false,\n\t\tregnames.BP: false,\n\t\tregnames.CX: false,\n\t}\n\tif err := conn.readRegisterInfo(regFound); err != nil {\n\t\tif isProtocolErrorUnsupported(err) {\n\t\t\tif err := conn.readTargetXml(regFound); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor n := range regFound {\n\t\tif n == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tif !regFound[n] {\n\t\t\treturn fmt.Errorf(\"could not find %s register\", n)\n\t\t}\n\t}\n\n\t// We either need:\n\t//  * QListThreadsInStopReply + qThreadStopInfo (i.e. lldb-server/debugserver),\n\t//  * or a stub that runs the inferior in single threaded mode (i.e. rr).\n\t// Otherwise we'll have problems handling breakpoints in multithreaded programs.\n\tif _, err := conn.exec([]byte(\"$QListThreadsInStopReply\"), \"init\"); err != nil {\n\t\tgdberr, ok := err.(*GdbProtocolError)\n\t\tif !ok {\n\t\t\treturn err\n\t\t}\n\t\tif gdberr.code != \"\" {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif resp, err := conn.exec([]byte(\"$x0,0\"), \"init\"); err == nil && string(resp) == \"OK\" {\n\t\tconn.xcmdok = true\n\t}\n\n\treturn nil\n}\n\n// qSupported interprets qSupported responses.\nfunc (conn *gdbConn) qSupported(multiprocess bool) (features map[string]bool, err error) {\n\tq := qSupportedSimple\n\tif multiprocess {\n\t\tq = qSupportedMultiprocess\n\t}\n\trespBuf, err := conn.exec([]byte(q), \"init/qSupported\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tresp := strings.Split(string(respBuf), \";\")\n\tfeatures = make(map[string]bool)\n\tfor _, stubfeature := range resp {\n\t\tif len(stubfeature) == 0 {\n\t\t\tcontinue\n\t\t} else if before, after, ok := strings.Cut(stubfeature, \"=\"); ok {\n\t\t\tif before == \"PacketSize\" {\n\t\t\t\tif n, err := strconv.ParseInt(after, 16, 64); err == nil {\n\t\t\t\t\tconn.packetSize = int(n)\n\t\t\t\t}\n\t\t\t}\n\t\t} else if stubfeature[len(stubfeature)-1] == '+' {\n\t\t\tfeatures[stubfeature[:len(stubfeature)-1]] = true\n\t\t}\n\t}\n\treturn features, nil\n}\n\n// disableAck disables protocol acks.\nfunc (conn *gdbConn) disableAck() error {\n\t_, err := conn.exec([]byte(\"$QStartNoAckMode\"), \"init/disableAck\")\n\tif err == nil {\n\t\tconn.ack = false\n\t}\n\treturn err\n}\n\n// gdbTarget is a struct type used to parse target.xml\ntype gdbTarget struct {\n\tIncludes  []gdbTargetInclude `xml:\"xi include\"`\n\tRegisters []gdbRegisterInfo  `xml:\"reg\"`\n}\n\ntype gdbTargetInclude struct {\n\tHref string `xml:\"href,attr\"`\n}\n\ntype gdbRegisterInfo struct {\n\tName    string `xml:\"name,attr\"`\n\tBitsize int    `xml:\"bitsize,attr\"`\n\tOffset  int\n\tRegnum  int    `xml:\"regnum,attr\"`\n\tGroup   string `xml:\"group,attr\"`\n\n\tignoreOnWrite bool\n}\n\nfunc setRegFound(regFound map[string]bool, name string) {\n\tfor n := range regFound {\n\t\tif name == n {\n\t\t\tregFound[n] = true\n\t\t}\n\t}\n}\n\n// readTargetXml reads target.xml file from stub using qXfer:features:read,\n// then parses it requesting any additional files.\n// The schema of target.xml is described by:\n//\n//\thttps://github.com/bminor/binutils-gdb/blob/61baf725eca99af2569262d10aca03dcde2698f6/gdb/features/gdb-target.dtd\nfunc (conn *gdbConn) readTargetXml(regFound map[string]bool) (err error) {\n\tconn.regsInfo, err = conn.readAnnex(\"target.xml\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar offset int\n\tregnum := 0\n\tfor i := range conn.regsInfo {\n\t\tif conn.regsInfo[i].Regnum == 0 {\n\t\t\tconn.regsInfo[i].Regnum = regnum\n\t\t} else {\n\t\t\tregnum = conn.regsInfo[i].Regnum\n\t\t}\n\t\tconn.regsInfo[i].Offset = offset\n\t\toffset += conn.regsInfo[i].Bitsize / 8\n\n\t\tsetRegFound(regFound, conn.regsInfo[i].Name)\n\t\tregnum++\n\t}\n\n\treturn nil\n}\n\n// readRegisterInfo uses qRegisterInfo to read register information (used\n// when qXfer:feature:read is not supported).\nfunc (conn *gdbConn) readRegisterInfo(regFound map[string]bool) (err error) {\n\tregnum := 0\n\tfor {\n\t\tconn.outbuf.Reset()\n\t\tfmt.Fprintf(&conn.outbuf, \"$qRegisterInfo%x\", regnum)\n\t\trespbytes, err := conn.exec(conn.outbuf.Bytes(), \"register info\")\n\t\tif err != nil {\n\t\t\tif regnum == 0 {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tvar regname string\n\t\tvar offset int\n\t\tvar bitsize int\n\t\tvar contained bool\n\t\tvar ignoreOnWrite bool\n\n\t\tresp := string(respbytes)\n\t\tfor {\n\t\t\tsemicolon := strings.Index(resp, \";\")\n\t\t\tkeyval := resp\n\t\t\tif semicolon >= 0 {\n\t\t\t\tkeyval = resp[:semicolon]\n\t\t\t}\n\n\t\t\tbefore, after, ok := strings.Cut(keyval, \":\")\n\t\t\tif ok {\n\t\t\t\tname := before\n\t\t\t\tvalue := after\n\n\t\t\t\tswitch name {\n\t\t\t\tcase \"name\":\n\t\t\t\t\tregname = value\n\t\t\t\tcase \"offset\":\n\t\t\t\t\toffset, _ = strconv.Atoi(value)\n\t\t\t\tcase \"bitsize\":\n\t\t\t\t\tbitsize, _ = strconv.Atoi(value)\n\t\t\t\tcase \"container-regs\":\n\t\t\t\t\tcontained = true\n\t\t\t\tcase \"set\":\n\t\t\t\t\tif value == \"Exception State Registers\" || value == \"AMX Registers\" {\n\t\t\t\t\t\t// debugserver doesn't like it if we try to write these\n\t\t\t\t\t\tignoreOnWrite = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif semicolon < 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tresp = resp[semicolon+1:]\n\t\t}\n\n\t\tif contained {\n\t\t\tif regname == \"xmm0\" {\n\t\t\t\tconn.workaroundReg = &gdbRegisterInfo{Regnum: regnum, Name: regname, Bitsize: bitsize, Offset: offset, ignoreOnWrite: ignoreOnWrite}\n\t\t\t}\n\t\t\tregnum++\n\t\t\tcontinue\n\t\t}\n\n\t\tsetRegFound(regFound, regname)\n\n\t\tconn.regsInfo = append(conn.regsInfo, gdbRegisterInfo{Regnum: regnum, Name: regname, Bitsize: bitsize, Offset: offset, ignoreOnWrite: ignoreOnWrite})\n\n\t\tregnum++\n\t}\n\n\treturn nil\n}\n\nfunc (conn *gdbConn) readAnnex(annex string) ([]gdbRegisterInfo, error) {\n\ttgtbuf, err := conn.qXfer(\"features\", annex, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar tgt gdbTarget\n\tif err := xml.Unmarshal(tgtbuf, &tgt); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, incl := range tgt.Includes {\n\t\tregs, err := conn.readAnnex(incl.Href)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttgt.Registers = append(tgt.Registers, regs...)\n\t}\n\treturn tgt.Registers, nil\n}\n\nfunc (conn *gdbConn) readExecFile() (string, error) {\n\toutbuf, err := conn.qXfer(\"exec-file\", \"\", true)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(outbuf), nil\n}\n\nfunc (conn *gdbConn) readAuxv() ([]byte, error) {\n\treturn conn.qXfer(\"auxv\", \"\", true)\n}\n\n// qXfer executes a 'qXfer' read with the specified kind (i.e. feature,\n// exec-file, etc...) and annex.\nfunc (conn *gdbConn) qXfer(kind, annex string, binary bool) ([]byte, error) {\n\tout := []byte{}\n\tfor {\n\t\tcmd := fmt.Appendf(nil, \"$qXfer:%s:read:%s:%x,fff\", kind, annex, len(out))\n\t\terr := conn.send(cmd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tbuf, err := conn.recv(cmd, \"target features transfer\", binary)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tout = append(out, buf[1:]...)\n\t\tif buf[0] == 'l' {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn out, nil\n}\n\n// qXferWrite executes a 'qXfer' write with the specified kind and annex.\nfunc (conn *gdbConn) qXferWrite(kind, annex string) error {\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$qXfer:%s:write:%s:0:\", kind, annex)\n\t//TODO(aarzilli): if we ever actually need to write something with qXfer,\n\t//this will need to be implemented properly. At the moment it is only used\n\t//for a fake write to the siginfo kind, to end a diversion in 'rr'.\n\t_, err := conn.exec(conn.outbuf.Bytes(), \"qXfer\")\n\treturn err\n}\n\ntype breakpointType uint8\n\nconst (\n\tswBreakpoint     breakpointType = 0\n\thwBreakpoint     breakpointType = 1\n\twriteWatchpoint  breakpointType = 2\n\treadWatchpoint   breakpointType = 3\n\taccessWatchpoint breakpointType = 4\n)\n\n// setBreakpoint executes a 'Z' (insert breakpoint) command of type '0' and kind '1' or '4'\nfunc (conn *gdbConn) setBreakpoint(addr uint64, typ breakpointType, kind int) error {\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$Z%d,%x,%d\", typ, addr, kind)\n\t_, err := conn.exec(conn.outbuf.Bytes(), \"set breakpoint\")\n\treturn err\n}\n\n// clearBreakpoint executes a 'z' (remove breakpoint) command of type '0' and kind '1' or '4'\nfunc (conn *gdbConn) clearBreakpoint(addr uint64, typ breakpointType, kind int) error {\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$z%d,%x,%d\", typ, addr, kind)\n\t_, err := conn.exec(conn.outbuf.Bytes(), \"clear breakpoint\")\n\treturn err\n}\n\n// kill executes a 'k' (kill) command.\nfunc (conn *gdbConn) kill() error {\n\tresp, err := conn.exec([]byte{'$', 'k'}, \"kill\")\n\tif err == io.EOF {\n\t\t// The stub is allowed to shut the connection on us immediately after a\n\t\t// kill. This is not an error.\n\t\tconn.conn.Close()\n\t\tconn.conn = nil\n\t\treturn proc.ErrProcessExited{Pid: conn.pid}\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, err = conn.parseStopPacket(resp, \"\", nil)\n\treturn err\n}\n\n// detach executes a 'D' (detach) command.\nfunc (conn *gdbConn) detach() error {\n\tif conn.conn == nil {\n\t\t// Already detached\n\t\treturn nil\n\t}\n\t_, err := conn.exec([]byte{'$', 'D'}, \"detach\")\n\tconn.conn.Close()\n\tconn.conn = nil\n\treturn err\n}\n\n// readRegisters executes a 'g' (read registers) command.\nfunc (conn *gdbConn) readRegisters(threadID string, data []byte) error {\n\tif !conn.threadSuffixSupported {\n\t\tif err := conn.selectThread('g', threadID, \"registers read\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tconn.outbuf.Reset()\n\tconn.outbuf.WriteString(\"$g\")\n\tconn.appendThreadSelector(threadID)\n\tresp, err := conn.exec(conn.outbuf.Bytes(), \"registers read\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor i := 0; i < len(resp); i += 2 {\n\t\tn, _ := strconv.ParseUint(string(resp[i:i+2]), 16, 8)\n\t\tdata[i/2] = uint8(n)\n\t}\n\n\treturn nil\n}\n\n// writeRegisters executes a 'G' (write registers) command.\nfunc (conn *gdbConn) writeRegisters(threadID string, data []byte) error {\n\tif !conn.threadSuffixSupported {\n\t\tif err := conn.selectThread('g', threadID, \"registers write\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tconn.outbuf.Reset()\n\tconn.outbuf.WriteString(\"$G\")\n\n\tfor _, b := range data {\n\t\tfmt.Fprintf(&conn.outbuf, \"%02x\", b)\n\t}\n\tconn.appendThreadSelector(threadID)\n\t_, err := conn.exec(conn.outbuf.Bytes(), \"registers write\")\n\treturn err\n}\n\n// readRegister executes 'p' (read register) command.\nfunc (conn *gdbConn) readRegister(threadID string, regnum int, data []byte) error {\n\tif !conn.threadSuffixSupported {\n\t\tif err := conn.selectThread('g', threadID, \"registers write\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$p%x\", regnum)\n\tconn.appendThreadSelector(threadID)\n\tresp, err := conn.exec(conn.outbuf.Bytes(), \"register read\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif len(resp) > len(data)*2 {\n\t\treturn fmt.Errorf(\"wrong response length, expected %d got %d\", len(data)*2, len(resp))\n\t}\n\n\tfor i := 0; i < len(resp); i += 2 {\n\t\tn, _ := strconv.ParseUint(string(resp[i:i+2]), 16, 8)\n\t\tdata[i/2] = uint8(n)\n\t}\n\n\treturn nil\n}\n\n// writeRegister executes 'P' (write register) command.\nfunc (conn *gdbConn) writeRegister(threadID string, regnum int, data []byte) error {\n\tif !conn.threadSuffixSupported {\n\t\tif err := conn.selectThread('g', threadID, \"registers write\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$P%x=\", regnum)\n\tfor _, b := range data {\n\t\tfmt.Fprintf(&conn.outbuf, \"%02x\", b)\n\t}\n\tconn.appendThreadSelector(threadID)\n\t_, err := conn.exec(conn.outbuf.Bytes(), \"register write\")\n\treturn err\n}\n\n// resume execution of the target process.\n// If the current direction is proc.Backward this is done with the 'bc' command.\n// If the current direction is proc.Forward this is done with the vCont command.\n// The threads argument will be used to determine which signal to use to\n// resume each thread. If a thread has sig == 0 the 'c' action will be used,\n// otherwise the 'C' action will be used and the value of sig will be passed\n// to it.\nfunc (conn *gdbConn) resume(cctx *proc.ContinueOnceContext, threads map[int]*gdbThread, tu *threadUpdater) (stopPacket, error) {\n\tif conn.direction == proc.Forward {\n\t\tconn.outbuf.Reset()\n\t\tfmt.Fprintf(&conn.outbuf, \"$vCont\")\n\t\tfor _, th := range threads {\n\t\t\tif th.sig != 0 {\n\t\t\t\tfmt.Fprintf(&conn.outbuf, \";C%02x:%s\", th.sig, th.strID)\n\t\t\t}\n\t\t}\n\t\tfmt.Fprintf(&conn.outbuf, \";c\")\n\t} else {\n\t\tif err := conn.selectThread('c', \"p-1.-1\", \"resume\"); err != nil {\n\t\t\treturn stopPacket{}, err\n\t\t}\n\t\tconn.outbuf.Reset()\n\t\tfmt.Fprint(&conn.outbuf, \"$bc\")\n\t}\n\tcctx.StopMu.Lock()\n\tif err := conn.send(conn.outbuf.Bytes()); err != nil {\n\t\tcctx.StopMu.Unlock()\n\t\treturn stopPacket{}, err\n\t}\n\tconn.running = true\n\tcctx.StopMu.Unlock()\n\tdefer func() {\n\t\tcctx.StopMu.Lock()\n\t\tconn.running = false\n\t\tcctx.StopMu.Unlock()\n\t}()\n\tif cctx.ResumeChan != nil {\n\t\tclose(cctx.ResumeChan)\n\t\tcctx.ResumeChan = nil\n\t}\n\treturn conn.waitForvContStop(\"resume\", \"-1\", tu)\n}\n\n// step executes a 'vCont' command on the specified thread with 's' action.\nfunc (conn *gdbConn) step(th *gdbThread, tu *threadUpdater, ignoreFaultSignal bool) error {\n\tthreadID := th.strID\n\tif conn.direction != proc.Forward {\n\t\tif err := conn.selectThread('c', threadID, \"step\"); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconn.outbuf.Reset()\n\t\tfmt.Fprint(&conn.outbuf, \"$bs\")\n\t\tif err := conn.send(conn.outbuf.Bytes()); err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err := conn.waitForvContStop(\"singlestep\", threadID, tu)\n\t\treturn err\n\t}\n\n\tvar _SIGBUS uint8\n\tswitch conn.goos {\n\tcase \"linux\":\n\t\t_SIGBUS = 0x7\n\tcase \"darwin\":\n\t\t_SIGBUS = 0xa\n\tdefault:\n\t\tpanic(fmt.Errorf(\"unknown GOOS %s\", conn.goos))\n\t}\n\n\tvar sig uint8 = 0\n\tfor {\n\t\tconn.outbuf.Reset()\n\t\tif sig == 0 {\n\t\t\tfmt.Fprintf(&conn.outbuf, \"$vCont;s:%s\", threadID)\n\t\t} else {\n\t\t\tfmt.Fprintf(&conn.outbuf, \"$vCont;S%02x:%s\", sig, threadID)\n\t\t}\n\t\tif err := conn.send(conn.outbuf.Bytes()); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif tu != nil {\n\t\t\ttu.Reset()\n\t\t}\n\t\tsp, err := conn.waitForvContStop(\"singlestep\", threadID, tu)\n\t\tsig = sp.sig\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tswitch sig {\n\t\tcase faultSignal:\n\t\t\tif ignoreFaultSignal { // we attempting to read the TLS, a fault here should be ignored\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tif conn.isDebugserver {\n\t\t\t\t// For some reason trying to deliver a signal in vCont step makes\n\t\t\t\t// debugserver lockup (no errors, it just gets stuck), store the signal\n\t\t\t\t// to deliver it later with the vCont;c\n\t\t\t\tth.sig = sig\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase _SIGILL, _SIGBUS, _SIGFPE:\n\t\t\tif conn.isDebugserver {\n\t\t\t\t// See comment above\n\t\t\t\tth.sig = sig\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\t// otherwise propagate these signals to inferior immediately\n\t\tcase interruptSignal, breakpointSignal, stopSignal:\n\t\t\treturn nil\n\t\tcase childSignal: // stop on debugserver but SIGCHLD on lldb-server/linux\n\t\t\tif conn.isDebugserver {\n\t\t\t\treturn nil\n\t\t\t}\n\t\tcase debugServerTargetExcBadAccess, debugServerTargetExcBadInstruction, debugServerTargetExcArithmetic, debugServerTargetExcEmulation, debugServerTargetExcSoftware, debugServerTargetExcBreakpoint:\n\t\t\tif ignoreFaultSignal {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn machTargetExcToError(sig)\n\t\tdefault:\n\t\t\t// delay propagation of any other signal to until after the stepping is done\n\t\t\tth.sig = sig\n\t\t\tsig = 0\n\t\t}\n\t}\n}\n\nvar errThreadBlocked = errors.New(\"thread blocked\")\n\nfunc (conn *gdbConn) waitForvContStop(context, threadID string, tu *threadUpdater) (stopPacket, error) {\n\tcount := 0\n\tfailed := false\n\tfor {\n\t\tconn.conn.SetReadDeadline(time.Now().Add(heartbeatInterval))\n\t\tresp, err := conn.recv(nil, context, false)\n\t\tconn.conn.SetReadDeadline(time.Time{})\n\t\tif neterr, isneterr := err.(net.Error); isneterr && neterr.Timeout() {\n\t\t\t// Debugserver sometimes forgets to inform us that inferior stopped,\n\t\t\t// sending this status request after a timeout helps us get unstuck.\n\t\t\t// Debugserver will not respond to this request unless inferior is\n\t\t\t// already stopped.\n\t\t\tif conn.isDebugserver {\n\t\t\t\tconn.send([]byte(\"$?\"))\n\t\t\t}\n\t\t\tif count > 1 && context == \"singlestep\" {\n\t\t\t\tfailed = true\n\t\t\t\tconn.sendCtrlC()\n\t\t\t}\n\t\t\tcount++\n\t\t} else if failed {\n\t\t\treturn stopPacket{}, errThreadBlocked\n\t\t} else if err != nil {\n\t\t\treturn stopPacket{}, err\n\t\t} else {\n\t\t\trepeat, sp, err := conn.parseStopPacket(resp, threadID, tu)\n\t\t\tif !repeat {\n\t\t\t\treturn sp, err\n\t\t\t}\n\t\t}\n\t}\n}\n\ntype stopPacket struct {\n\tthreadID  string\n\tsig       uint8\n\treason    string\n\twatchAddr uint64\n\twatchReg  int\n\tjstopInfo map[int]stopPacket\n\tregs      map[uint64]uint64\n}\n\ntype jsonStopPacket struct {\n\tTid    int      `json:\"tid\"`\n\tSignal int      `json:\"signal\"`\n\tMetype int      `json:\"metype\"`\n\tMedata []uint64 `json:\"medata\"`\n\tReason string   `json:\"reason\"`\n}\n\n// Mach exception codes used to decode metype/medata keys in stop packets (necessary to support watchpoints with debugserver).\n// See:\n//\n//\thttps://opensource.apple.com/source/xnu/xnu-4570.1.46/osfmk/mach/exception_types.h.auto.html\n//\thttps://opensource.apple.com/source/xnu/xnu-4570.1.46/osfmk/mach/i386/exception.h.auto.html\n//\thttps://opensource.apple.com/source/xnu/xnu-4570.1.46/osfmk/mach/arm/exception.h.auto.html\nconst (\n\t_EXC_BREAKPOINT     = 6     // mach exception type for hardware breakpoints\n\t_EXC_I386_SGL       = 1     // mach exception code for single step on x86, for some reason this is also used for watchpoints\n\t_EXC_ARM_DA_DEBUG   = 0x102 // mach exception code for debug fault on arm/arm64\n\t_EXC_ARM_BREAKPOINT = 1     // mach exception code for breakpoint on arm/arm64\n)\n\n// executes 'vCont' (continue/step) command\nfunc (conn *gdbConn) parseStopPacket(resp []byte, threadID string, tu *threadUpdater) (repeat bool, sp stopPacket, err error) {\n\tswitch resp[0] {\n\tcase 'T':\n\t\tif len(resp) < 3 {\n\t\t\treturn false, stopPacket{}, fmt.Errorf(\"malformed response for vCont %s\", string(resp))\n\t\t}\n\n\t\tsig, err := strconv.ParseUint(string(resp[1:3]), 16, 8)\n\t\tif err != nil {\n\t\t\treturn false, stopPacket{}, fmt.Errorf(\"malformed stop packet: %s\", string(resp))\n\t\t}\n\t\tsp.sig = uint8(sig)\n\t\tsp.watchReg = -1\n\t\tsp.regs = make(map[uint64]uint64)\n\n\t\tif logflags.GdbWire() && gdbWireFullStopPacket {\n\t\t\tconn.log.Debugf(\"full stop packet: %s\", string(resp))\n\t\t}\n\n\t\tvar metype int\n\t\tmedata := make([]uint64, 0, 10)\n\n\t\tparseMachException := func(sp *stopPacket, metype int, medata []uint64) {\n\t\t\t// Debugserver does not report watchpoint stops in the standard way preferring\n\t\t\t// instead the semi-undocumented metype/medata keys.\n\t\t\t// These values also have different meanings depending on the CPU architecture.\n\t\t\tswitch conn.goarch {\n\t\t\tcase \"amd64\":\n\t\t\t\tif metype == _EXC_BREAKPOINT && len(medata) >= 2 && medata[0] == _EXC_I386_SGL {\n\t\t\t\t\tsp.watchAddr = medata[1] // this should be zero if this is really a single step stop and non-zero for watchpoints\n\t\t\t\t}\n\t\t\tcase \"arm64\":\n\t\t\t\tif metype == _EXC_BREAKPOINT && len(medata) >= 2 && (medata[0] == _EXC_ARM_DA_DEBUG || medata[0] == _EXC_ARM_BREAKPOINT) {\n\t\t\t\t\t// The arm64 specification allows for up to 16 debug registers.\n\t\t\t\t\t// The registers are zero indexed, thus a value less than 16 will\n\t\t\t\t\t// be a hardware breakpoint register index.\n\t\t\t\t\t// See: https://developer.arm.com/documentation/102120/0101/Debug-exceptions\n\t\t\t\t\t// TODO(deparker): we can ask debugserver for the number of hardware breakpoints\n\t\t\t\t\t// directly.\n\t\t\t\t\tif medata[1] < 16 {\n\t\t\t\t\t\tsp.watchReg = int(medata[1])\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsp.watchAddr = medata[1]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcsp := colonSemicolonParser{buf: resp[3:]}\n\t\tfor csp.next() {\n\t\t\tkey, value := csp.key, csp.value\n\n\t\t\tif reg, err := strconv.ParseUint(string(key), 16, 64); err == nil {\n\t\t\t\t// This is a register.\n\t\t\t\tv, err := strconv.ParseUint(string(value), 16, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, stopPacket{}, fmt.Errorf(\"malformed stop packet: %s\", string(resp))\n\t\t\t\t}\n\t\t\t\tsp.regs[reg] = v\n\t\t\t}\n\n\t\t\tswitch string(key) {\n\t\t\tcase \"thread\":\n\t\t\t\tsp.threadID = string(value)\n\t\t\tcase \"threads\":\n\t\t\t\tif tu != nil {\n\t\t\t\t\ttu.Add(strings.Split(string(value), \",\"))\n\t\t\t\t\ttu.Finish()\n\t\t\t\t}\n\t\t\tcase \"reason\":\n\t\t\t\tsp.reason = string(value)\n\t\t\tcase \"watch\", \"awatch\", \"rwatch\":\n\t\t\t\tsp.watchAddr, err = strconv.ParseUint(string(value), 16, 64)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, stopPacket{}, fmt.Errorf(\"malformed stop packet: %s (wrong watch address)\", string(resp))\n\t\t\t\t}\n\t\t\tcase \"metype\":\n\t\t\t\t// mach exception type (debugserver extension)\n\t\t\t\tmetype, _ = strconv.Atoi(string(value))\n\t\t\tcase \"medata\":\n\t\t\t\t// mach exception data (debugserver extension)\n\t\t\t\td, _ := strconv.ParseUint(string(value), 16, 64)\n\t\t\t\tmedata = append(medata, d)\n\t\t\tcase \"jstopinfo\":\n\t\t\t\tjstopinfo, err := hex.DecodeString(string(value))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, stopPacket{}, fmt.Errorf(\"malformed stop packet: %s (wrong jstopinfo)\", string(resp))\n\t\t\t\t}\n\t\t\t\tparsedJstopInfo := []jsonStopPacket{}\n\t\t\t\tif err := json.Unmarshal(jstopinfo, &parsedJstopInfo); err != nil {\n\t\t\t\t\treturn false, stopPacket{}, fmt.Errorf(\"malformed stop packet: %s (wrong jstopinfo)\", string(resp))\n\t\t\t\t}\n\t\t\t\tsp.jstopInfo = make(map[int]stopPacket)\n\t\t\t\tfor _, jsp := range parsedJstopInfo {\n\t\t\t\t\tthreadID := fmt.Sprintf(\"%d\", jsp.Tid)\n\t\t\t\t\tnewStopPacket := stopPacket{\n\t\t\t\t\t\tthreadID: threadID,\n\t\t\t\t\t\treason:   jsp.Reason,\n\t\t\t\t\t\tsig:      uint8(jsp.Signal),\n\t\t\t\t\t}\n\t\t\t\t\tparseMachException(&newStopPacket, jsp.Metype, jsp.Medata)\n\t\t\t\t\tsp.jstopInfo[jsp.Tid] = newStopPacket\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tparseMachException(&sp, metype, medata)\n\n\t\treturn false, sp, nil\n\n\tcase 'W', 'X':\n\t\t// process exited, next two character are exit code\n\t\tsemicolon := bytes.Index(resp, []byte{';'})\n\t\tif semicolon < 0 {\n\t\t\tsemicolon = len(resp)\n\t\t}\n\t\tstatus, _ := strconv.ParseUint(string(resp[1:semicolon]), 16, 8)\n\t\treturn false, stopPacket{}, proc.ErrProcessExited{Pid: conn.pid, Status: int(status)}\n\n\tcase 'N':\n\t\t// we were singlestepping the thread and the thread exited\n\t\tsp.threadID = threadID\n\t\treturn false, sp, nil\n\n\tcase 'O':\n\t\tdata := make([]byte, 0, len(resp[1:])/2)\n\t\tfor i := 1; i < len(resp); i += 2 {\n\t\t\tn, _ := strconv.ParseUint(string(resp[i:i+2]), 16, 8)\n\t\t\tdata = append(data, uint8(n))\n\t\t}\n\t\tos.Stdout.Write(data)\n\t\treturn true, sp, nil\n\n\tdefault:\n\t\treturn false, sp, fmt.Errorf(\"unexpected response for vCont %c\", resp[0])\n\t}\n}\n\nconst ctrlC = 0x03 // the ASCII character for ^C\n\n// executes a ctrl-C on the line\nfunc (conn *gdbConn) sendCtrlC() error {\n\tconn.log.Debug(\"<- interrupt\")\n\t_, err := conn.conn.Write([]byte{ctrlC})\n\treturn err\n}\n\n// queryProcessInfo executes a qProcessInfoPID (if pid != 0) or a qProcessInfo (if pid == 0)\nfunc (conn *gdbConn) queryProcessInfo(pid int) (map[string]string, error) {\n\tconn.outbuf.Reset()\n\tif pid != 0 {\n\t\tfmt.Fprintf(&conn.outbuf, \"$qProcessInfoPID:%d\", pid)\n\t} else {\n\t\tfmt.Fprint(&conn.outbuf, \"$qProcessInfo\")\n\t}\n\tresp, err := conn.exec(conn.outbuf.Bytes(), \"process info for pid\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpi := make(map[string]string)\n\n\tcsp := colonSemicolonParser{buf: resp}\n\tfor csp.next() {\n\t\tkey, value := string(csp.key), string(csp.value)\n\n\t\tswitch key {\n\t\tcase \"name\":\n\t\t\tname := make([]byte, len(value)/2)\n\t\t\tfor i := 0; i < len(value); i += 2 {\n\t\t\t\tn, _ := strconv.ParseUint(value[i:i+2], 16, 8)\n\t\t\t\tname[i/2] = byte(n)\n\t\t\t}\n\t\t\tpi[key] = string(name)\n\n\t\tdefault:\n\t\t\tpi[key] = value\n\t\t}\n\t}\n\treturn pi, nil\n}\n\n// executes qfThreadInfo/qsThreadInfo commands\nfunc (conn *gdbConn) queryThreads(first bool) (threads []string, err error) {\n\t// https://sourceware.org/gdb/onlinedocs/gdb/General-Query-Packets.html\n\tconn.outbuf.Reset()\n\tif first {\n\t\tconn.outbuf.WriteString(\"$qfThreadInfo\")\n\t} else {\n\t\tconn.outbuf.WriteString(\"$qsThreadInfo\")\n\t}\n\n\tresp, err := conn.exec(conn.outbuf.Bytes(), \"thread info\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch resp[0] {\n\tcase 'l':\n\t\treturn nil, nil\n\tcase 'm':\n\t\t// parse list...\n\tdefault:\n\t\treturn nil, errors.New(\"malformed qfThreadInfo response\")\n\t}\n\n\tvar pid int\n\tresp = resp[1:]\n\tfor {\n\t\ttidbuf := resp\n\t\tcomma := bytes.Index(tidbuf, []byte{','})\n\t\tif comma >= 0 {\n\t\t\ttidbuf = tidbuf[:comma]\n\t\t}\n\t\tif conn.multiprocess && pid == 0 {\n\t\t\tdot := bytes.Index(tidbuf, []byte{'.'})\n\t\t\tif dot >= 0 {\n\t\t\t\tpid, _ = strconv.Atoi(string(tidbuf[1:dot]))\n\t\t\t}\n\t\t}\n\t\tthreads = append(threads, string(tidbuf))\n\t\tif comma < 0 {\n\t\t\tbreak\n\t\t}\n\t\tresp = resp[comma+1:]\n\t}\n\n\tif conn.multiprocess && pid > 0 {\n\t\tconn.pid = pid\n\t}\n\treturn threads, nil\n}\n\nfunc (conn *gdbConn) selectThread(kind byte, threadID string, context string) error {\n\tif conn.threadSuffixSupported && kind != 'c' {\n\t\t// kind == 'c' is still allowed because 'rr' is weird about it's support\n\t\t// for thread suffixes and the specification for it doesn't really say how\n\t\t// it should be used with packets 'bc' and 'bs'.\n\t\tpanic(\"selectThread when thread suffix is supported\")\n\t}\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$H%c%s\", kind, threadID)\n\t_, err := conn.exec(conn.outbuf.Bytes(), context)\n\treturn err\n}\n\nfunc (conn *gdbConn) appendThreadSelector(threadID string) {\n\tif !conn.threadSuffixSupported {\n\t\treturn\n\t}\n\tfmt.Fprintf(&conn.outbuf, \";thread:%s;\", threadID)\n}\n\nfunc (conn *gdbConn) readMemory(data []byte, addr uint64) error {\n\tif conn.xcmdok && len(data) > conn.packetSize {\n\t\treturn conn.readMemoryBinary(data, addr)\n\t}\n\treturn conn.readMemoryHex(data, addr)\n}\n\n// executes 'm' (read memory) command\nfunc (conn *gdbConn) readMemoryHex(data []byte, addr uint64) error {\n\tsize := len(data)\n\tdata = data[:0]\n\n\tfor size > 0 {\n\t\tconn.outbuf.Reset()\n\n\t\t// gdbserver will crash if we ask too many bytes... not return an error, actually crash\n\t\tsz := size\n\t\tif dataSize := (conn.packetSize - 4) / 2; sz > dataSize {\n\t\t\tsz = dataSize\n\t\t}\n\t\tsize = size - sz\n\n\t\tfmt.Fprintf(&conn.outbuf, \"$m%x,%x\", addr+uint64(len(data)), sz)\n\t\tresp, err := conn.exec(conn.outbuf.Bytes(), \"memory read\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfor i := 0; i < len(resp); i += 2 {\n\t\t\tn, _ := strconv.ParseUint(string(resp[i:i+2]), 16, 8)\n\t\t\tdata = append(data, uint8(n))\n\t\t}\n\t}\n\treturn nil\n}\n\n// executes 'x' (binary read memory) command\nfunc (conn *gdbConn) readMemoryBinary(data []byte, addr uint64) error {\n\tsize := len(data)\n\tdata = data[:0]\n\n\tfor len(data) < size {\n\t\tconn.outbuf.Reset()\n\n\t\tsz := size - len(data)\n\n\t\tfmt.Fprintf(&conn.outbuf, \"$x%x,%x\", addr+uint64(len(data)), sz)\n\t\tif err := conn.send(conn.outbuf.Bytes()); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tresp, err := conn.recv(conn.outbuf.Bytes(), \"binary memory read\", true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdata = append(data, resp...)\n\t}\n\treturn nil\n}\n\nfunc writeAsciiBytes(w io.Writer, data []byte) {\n\tfor _, b := range data {\n\t\tfmt.Fprintf(w, \"%02x\", b)\n\t}\n}\n\n// writeMemory writes memory using either 'M' or 'X'\nfunc (conn *gdbConn) writeMemory(addr uint64, data []byte) (written int, err error) {\n\tif conn.useXcmd {\n\t\treturn conn.writeMemoryBinary(addr, data)\n\t}\n\treturn conn.writeMemoryHex(addr, data)\n}\n\n// executes 'M' (write memory) command\nfunc (conn *gdbConn) writeMemoryHex(addr uint64, data []byte) (written int, err error) {\n\tif len(data) == 0 {\n\t\t// LLDB can't parse requests for 0-length writes and hangs if we emit them\n\t\treturn 0, nil\n\t}\n\tconn.outbuf.Reset()\n\t//TODO(aarzilli): do not send packets larger than conn.PacketSize\n\tfmt.Fprintf(&conn.outbuf, \"$M%x,%x:\", addr, len(data))\n\n\twriteAsciiBytes(&conn.outbuf, data)\n\n\t_, err = conn.exec(conn.outbuf.Bytes(), \"memory write\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn len(data), nil\n}\n\nfunc (conn *gdbConn) writeMemoryBinary(addr uint64, data []byte) (written int, err error) {\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$X%x,%x:\", addr, len(data))\n\n\tfor _, b := range data {\n\t\tswitch b {\n\t\tcase '#', '$', '}':\n\t\t\tconn.outbuf.WriteByte('}')\n\t\t\tconn.outbuf.WriteByte(b ^ escapeXor)\n\t\tdefault:\n\t\t\tconn.outbuf.WriteByte(b)\n\t\t}\n\t}\n\n\t_, err = conn.exec(conn.outbuf.Bytes(), \"memory write\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn len(data), nil\n}\n\nfunc (conn *gdbConn) allocMemory(sz uint64) (uint64, error) {\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$_M%x,rwx\", sz)\n\tresp, err := conn.exec(conn.outbuf.Bytes(), \"memory allocation\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn strconv.ParseUint(string(resp), 16, 64)\n}\n\n// threadStopInfo executes a 'qThreadStopInfo' and returns the reason the\n// thread stopped.\nfunc (conn *gdbConn) threadStopInfo(threadID string) (sp stopPacket, err error) {\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$qThreadStopInfo%s\", threadID)\n\tresp, err := conn.exec(conn.outbuf.Bytes(), \"thread stop info\")\n\tif err != nil {\n\t\treturn stopPacket{}, err\n\t}\n\t_, sp, err = conn.parseStopPacket(resp, \"\", nil)\n\tif err != nil {\n\t\treturn stopPacket{}, err\n\t}\n\tif sp.threadID != threadID {\n\t\t// When we send a ^C (manual stop request) and the process is close to\n\t\t// stopping anyway, sometimes, debugserver will send back two stop\n\t\t// packets. We need to ignore this spurious stop packet. Because the first\n\t\t// thing we do after the stop is updateThreadList, which calls this\n\t\t// function, this is relatively painless. We simply need to check that the\n\t\t// stop packet we receive is for the thread we requested, if it isn't we\n\t\t// can assume it is the spurious extra stop packet and simply ignore it.\n\t\t// An example of a problematic interaction is in the commit message for\n\t\t// this change.\n\t\t// See https://github.com/go-delve/delve/issues/3013.\n\n\t\tconn.conn.SetReadDeadline(time.Now().Add(10 * time.Millisecond))\n\t\tresp, err = conn.recv(conn.outbuf.Bytes(), \"thread stop info\", false)\n\t\tconn.conn.SetReadDeadline(time.Time{})\n\t\tif err != nil {\n\t\t\tif neterr, isneterr := err.(net.Error); isneterr && neterr.Timeout() {\n\t\t\t\treturn stopPacket{}, fmt.Errorf(\"qThreadStopInfo mismatch, requested %s got %s\", sp.threadID, threadID)\n\t\t\t}\n\t\t\treturn stopPacket{}, err\n\t\t}\n\t\t_, sp, err = conn.parseStopPacket(resp, \"\", nil)\n\t\tif err != nil {\n\t\t\treturn stopPacket{}, err\n\t\t}\n\t\tif sp.threadID != threadID {\n\t\t\treturn stopPacket{}, fmt.Errorf(\"qThreadStopInfo mismatch, requested %s got %s\", sp.threadID, threadID)\n\t\t}\n\t}\n\n\treturn sp, nil\n}\n\n// restart executes a 'vRun' command.\nfunc (conn *gdbConn) restart(pos string) error {\n\tconn.outbuf.Reset()\n\tfmt.Fprint(&conn.outbuf, \"$vRun;\")\n\tif pos != \"\" {\n\t\tfmt.Fprint(&conn.outbuf, \";\")\n\t\twriteAsciiBytes(&conn.outbuf, []byte(pos))\n\t}\n\t_, err := conn.exec(conn.outbuf.Bytes(), \"restart\")\n\treturn err\n}\n\n// qRRCmd executes a qRRCmd command\nfunc (conn *gdbConn) qRRCmd(args ...string) (string, error) {\n\tif len(args) == 0 {\n\t\tpanic(\"must specify at least one argument for qRRCmd\")\n\t}\n\tconn.outbuf.Reset()\n\tfmt.Fprint(&conn.outbuf, \"$qRRCmd\")\n\tfor i, arg := range args {\n\t\tfmt.Fprint(&conn.outbuf, \":\")\n\t\tif i == 0 && (conn.newRRCmdStyle || conn.threadSuffixSupported) {\n\t\t\t// newer versions of RR require the command to be followed by a thread id\n\t\t\t// and the command name to be unescaped.\n\t\t\tfmt.Fprintf(&conn.outbuf, \"%s:-1\", arg)\n\t\t} else {\n\t\t\twriteAsciiBytes(&conn.outbuf, []byte(arg))\n\t\t}\n\t}\n\tresp, err := conn.exec(conn.outbuf.Bytes(), \"qRRCmd\")\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdata := make([]byte, 0, len(resp)/2)\n\tfor i := 0; i < len(resp); i += 2 {\n\t\tn, _ := strconv.ParseUint(string(resp[i:i+2]), 16, 8)\n\t\tdata = append(data, uint8(n))\n\t}\n\treturn string(data), nil\n}\n\ntype imageList struct {\n\tImages []imageDescription `json:\"images\"`\n}\n\ntype imageDescription struct {\n\tLoadAddress uint64     `json:\"load_address\"`\n\tPathname    string     `json:\"pathname\"`\n\tMachHeader  machHeader `json:\"mach_header\"`\n}\n\ntype machHeader struct {\n\tFileType macho.Type `json:\"filetype\"`\n}\n\n// getLoadedDynamicLibraries executes jGetLoadedDynamicLibrariesInfos which\n// returns the list of loaded dynamic libraries\nfunc (conn *gdbConn) getLoadedDynamicLibraries() ([]imageDescription, error) {\n\tcmd := []byte(\"$jGetLoadedDynamicLibrariesInfos:{\\\"fetch_all_solibs\\\":true}\")\n\tif err := conn.send(cmd); err != nil {\n\t\treturn nil, err\n\t}\n\tresp, err := conn.recv(cmd, \"get dynamic libraries\", true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar images imageList\n\terr = json.Unmarshal(resp, &images)\n\treturn images.Images, err\n}\n\ntype memoryRegionInfo struct {\n\tstart       uint64\n\tsize        uint64\n\tpermissions string\n\tname        string\n}\n\nfunc decodeHexString(in []byte) (string, bool) {\n\tout := make([]byte, 0, len(in)/2)\n\tfor i := 0; i < len(in); i += 2 {\n\t\tv, err := strconv.ParseUint(string(in[i:i+2]), 16, 8)\n\t\tif err != nil {\n\t\t\treturn \"\", false\n\t\t}\n\t\tout = append(out, byte(v))\n\t}\n\treturn string(out), true\n}\n\nfunc (conn *gdbConn) memoryRegionInfo(addr uint64) (*memoryRegionInfo, error) {\n\tconn.outbuf.Reset()\n\tfmt.Fprintf(&conn.outbuf, \"$qMemoryRegionInfo:%x\", addr)\n\tresp, err := conn.exec(conn.outbuf.Bytes(), \"qMemoryRegionInfo\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tmri := &memoryRegionInfo{}\n\n\tcsp := colonSemicolonParser{buf: resp}\n\tfor csp.next() {\n\t\tkey, value := csp.key, csp.value\n\n\t\tswitch string(key) {\n\t\tcase \"start\":\n\t\t\tstart, err := strconv.ParseUint(string(value), 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"malformed qMemoryRegionInfo response packet (start): %v in %s\", err, string(resp))\n\t\t\t}\n\t\t\tmri.start = start\n\t\tcase \"size\":\n\t\t\tsize, err := strconv.ParseUint(string(value), 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"malformed qMemoryRegionInfo response packet (size): %v in %s\", err, string(resp))\n\t\t\t}\n\t\t\tmri.size = size\n\t\tcase \"permissions\":\n\t\t\tmri.permissions = string(value)\n\t\tcase \"name\":\n\t\t\tnamestr, ok := decodeHexString(value)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"malformed qMemoryRegionInfo response packet (name): %s\", string(resp))\n\t\t\t}\n\t\t\tmri.name = namestr\n\t\tcase \"error\":\n\t\t\terrstr, ok := decodeHexString(value)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"malformed qMemoryRegionInfo response packet (error): %s\", string(resp))\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"qMemoryRegionInfo error: %s\", errstr)\n\t\t}\n\t}\n\n\treturn mri, nil\n}\n\n// exec executes a message to the stub and reads a response.\n// The details of the wire protocol are described here:\n//\n//\thttps://sourceware.org/gdb/onlinedocs/gdb/Overview.html#Overview\nfunc (conn *gdbConn) exec(cmd []byte, context string) ([]byte, error) {\n\tif err := conn.send(cmd); err != nil {\n\t\treturn nil, err\n\t}\n\treturn conn.recv(cmd, context, false)\n}\n\nconst hexdigit = \"0123456789abcdef\"\n\nfunc (conn *gdbConn) send(cmd []byte) error {\n\tif len(cmd) == 0 || cmd[0] != '$' {\n\t\tpanic(\"gdb protocol error: command doesn't start with '$'\")\n\t}\n\n\t// append checksum to packet\n\tcmd = append(cmd, '#')\n\tsum := checksum(cmd)\n\tcmd = append(cmd, hexdigit[sum>>4], hexdigit[sum&0xf])\n\n\tattempt := 0\n\tfor {\n\t\tif logflags.GdbWire() {\n\t\t\tif len(cmd) > gdbWireMaxLen {\n\t\t\t\tconn.log.Debugf(\"<- %s...\", string(cmd[:gdbWireMaxLen]))\n\t\t\t} else {\n\t\t\t\tconn.log.Debugf(\"<- %s\", string(cmd))\n\t\t\t}\n\t\t}\n\t\t_, err := conn.conn.Write(cmd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif !conn.ack {\n\t\t\tbreak\n\t\t}\n\n\t\tif conn.readack() {\n\t\t\tbreak\n\t\t}\n\t\tif attempt > conn.maxTransmitAttempts {\n\t\t\treturn ErrTooManyAttempts\n\t\t}\n\t\tattempt++\n\t}\n\treturn nil\n}\n\nfunc (conn *gdbConn) recv(cmd []byte, context string, binary bool) (resp []byte, err error) {\n\tattempt := 0\n\tfor {\n\t\tvar err error\n\t\tresp, err = conn.rdr.ReadBytes('#')\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// read checksum\n\t\t_, err = io.ReadFull(conn.rdr, conn.inbuf[:2])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif logflags.GdbWire() {\n\t\t\tout := resp\n\t\t\tpartial := false\n\t\t\tif !binary {\n\t\t\t\tif idx := bytes.Index(out, []byte{'\\n'}); idx >= 0 {\n\t\t\t\t\tout = resp[:idx]\n\t\t\t\t\tpartial = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(out) > gdbWireMaxLen {\n\t\t\t\tout = out[:gdbWireMaxLen]\n\t\t\t\tpartial = true\n\t\t\t}\n\t\t\tif !partial {\n\t\t\t\tif binary {\n\t\t\t\t\tconn.log.Debugf(\"-> %q%s\", string(resp), string(conn.inbuf[:2]))\n\t\t\t\t} else {\n\t\t\t\t\tconn.log.Debugf(\"-> %s%s\", string(resp), string(conn.inbuf[:2]))\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif binary {\n\t\t\t\t\tconn.log.Debugf(\"-> %q...\", string(out))\n\t\t\t\t} else {\n\t\t\t\t\tconn.log.Debugf(\"-> %s...\", string(out))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif !conn.ack {\n\t\t\tbreak\n\t\t}\n\n\t\tif resp[0] == '%' {\n\t\t\t// If the first character is a % (instead of $) the stub sent us a\n\t\t\t// notification packet, this is weird since we specifically claimed that\n\t\t\t// we don't support notifications of any kind, but it should be safe to\n\t\t\t// ignore regardless.\n\t\t\tcontinue\n\t\t}\n\n\t\tif checksumok(resp, conn.inbuf[:2]) {\n\t\t\tconn.sendack('+')\n\t\t\tbreak\n\t\t}\n\t\tif attempt > conn.maxTransmitAttempts {\n\t\t\tconn.sendack('+')\n\t\t\treturn nil, ErrTooManyAttempts\n\t\t}\n\t\tattempt++\n\t\tconn.sendack('-')\n\t}\n\n\tif binary {\n\t\tconn.inbuf, resp = binarywiredecode(resp, conn.inbuf)\n\t} else {\n\t\tconn.inbuf, resp = wiredecode(resp, conn.inbuf)\n\t}\n\n\tif len(resp) == 0 || (resp[0] == 'E' && !binary) || (resp[0] == 'E' && len(resp) == 3) {\n\t\tcmdstr := \"\"\n\t\tif cmd != nil {\n\t\t\tcmdstr = string(cmd)\n\t\t}\n\t\treturn nil, &GdbProtocolError{context, cmdstr, string(resp)}\n\t}\n\n\treturn resp, nil\n}\n\n// Readack reads one byte from stub, returns true if the byte is '+'\nfunc (conn *gdbConn) readack() bool {\n\tb, err := conn.rdr.ReadByte()\n\tif err != nil {\n\t\treturn false\n\t}\n\tconn.log.Debugf(\"-> %s\", string(b))\n\treturn b == '+'\n}\n\n// Sendack executes an ack character, c must be either '+' or '-'\nfunc (conn *gdbConn) sendack(c byte) {\n\tif c != '+' && c != '-' {\n\t\tpanic(fmt.Errorf(\"sendack(%c)\", c))\n\t}\n\tconn.conn.Write([]byte{c})\n\tconn.log.Debugf(\"<- %s\", string(c))\n}\n\n// escapeXor is the value mandated by the specification to escape characters\nconst escapeXor byte = 0x20\n\n// wiredecode decodes the contents of in into buf.\n// If buf is nil it will be allocated ex-novo, if the size of buf is not\n// enough to hold the decoded contents it will be grown.\n// Returns the newly allocated buffer as newbuf and the message contents as\n// msg.\nfunc wiredecode(in, buf []byte) (newbuf, msg []byte) {\n\tif buf != nil {\n\t\tbuf = buf[:0]\n\t} else {\n\t\tbuf = make([]byte, 0, 256)\n\t}\n\n\tstart := 1\n\n\tfor i := 0; i < len(in); i++ {\n\t\tswitch ch := in[i]; ch {\n\t\tcase '{': // escape\n\t\t\tif i+1 >= len(in) {\n\t\t\t\tbuf = append(buf, ch)\n\t\t\t} else {\n\t\t\t\tbuf = append(buf, in[i+1]^escapeXor)\n\t\t\t\ti++\n\t\t\t}\n\t\tcase ':':\n\t\t\tbuf = append(buf, ch)\n\t\t\tif i == 3 {\n\t\t\t\t// we just read the sequence identifier\n\t\t\t\tstart = i + 1\n\t\t\t}\n\t\tcase '#': // end of packet\n\t\t\treturn buf, buf[start:]\n\t\tcase '*': // runlength encoding marker\n\t\t\tif i+1 >= len(in) || i == 0 {\n\t\t\t\tbuf = append(buf, ch)\n\t\t\t} else {\n\t\t\t\tn := in[i+1] - 29\n\t\t\t\tr := buf[len(buf)-1]\n\t\t\t\tfor range n {\n\t\t\t\t\tbuf = append(buf, r)\n\t\t\t\t}\n\t\t\t\ti++\n\t\t\t}\n\t\tdefault:\n\t\t\tbuf = append(buf, ch)\n\t\t}\n\t}\n\treturn buf, buf[start:]\n}\n\n// binarywiredecode is like wiredecode but decodes the wire encoding for\n// binary packets, such as the 'x' and 'X' packets as well as all the json\n// packets used by lldb/debugserver.\nfunc binarywiredecode(in, buf []byte) (newbuf, msg []byte) {\n\tif buf != nil {\n\t\tbuf = buf[:0]\n\t} else {\n\t\tbuf = make([]byte, 0, 256)\n\t}\n\n\tstart := 1\n\n\tfor i := 0; i < len(in); i++ {\n\t\tswitch ch := in[i]; ch {\n\t\tcase '}': // escape\n\t\t\tif i+1 >= len(in) {\n\t\t\t\tbuf = append(buf, ch)\n\t\t\t} else {\n\t\t\t\tbuf = append(buf, in[i+1]^escapeXor)\n\t\t\t\ti++\n\t\t\t}\n\t\tcase '#': // end of packet\n\t\t\treturn buf, buf[start:]\n\t\tdefault:\n\t\t\tbuf = append(buf, ch)\n\t\t}\n\t}\n\treturn buf, buf[start:]\n}\n\n// checksumok checks that checksum is a valid checksum for packet.\nfunc checksumok(packet, checksumBuf []byte) bool {\n\tif packet[0] != '$' {\n\t\treturn false\n\t}\n\n\tsum := checksum(packet)\n\ttgt, err := strconv.ParseUint(string(checksumBuf), 16, 8)\n\tif err != nil {\n\t\treturn false\n\t}\n\n\ttgt8 := uint8(tgt)\n\n\treturn sum == tgt8\n}\n\nfunc checksum(packet []byte) (sum uint8) {\n\tfor i := 1; i < len(packet); i++ {\n\t\tif packet[i] == '#' {\n\t\t\treturn sum\n\t\t}\n\t\tsum += packet[i]\n\t}\n\treturn sum\n}\n\n// colonSemicolonParser parses a string in the form:\n//\n//\tkey1:value1;key2:value2;...;keyN:valueN\ntype colonSemicolonParser struct {\n\tbuf        []byte\n\tkey, value []byte\n}\n\nfunc (csp *colonSemicolonParser) next() bool {\n\tif len(csp.buf) == 0 {\n\t\treturn false\n\t}\n\tcolon := bytes.IndexByte(csp.buf, ':')\n\tif colon < 0 {\n\t\treturn false\n\t}\n\tcsp.key = csp.buf[:colon]\n\tcsp.buf = csp.buf[colon+1:]\n\n\tsemicolon := bytes.IndexByte(csp.buf, ';')\n\tif semicolon < 0 {\n\t\tcsp.value = csp.buf\n\t\tcsp.buf = nil\n\t} else {\n\t\tcsp.value = csp.buf[:semicolon]\n\t\tcsp.buf = csp.buf[semicolon+1:]\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "pkg/proc/gdbserial/gdbserver_unix.go",
    "content": "//go:build linux || darwin || freebsd\n\npackage gdbserial\n\nimport (\n\t\"os/signal\"\n\t\"syscall\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc sysProcAttr(foreground bool) *syscall.SysProcAttr {\n\treturn &syscall.SysProcAttr{Setpgid: true, Pgid: 0, Foreground: foreground}\n}\n\nfunc foregroundSignalsIgnore() {\n\tsignal.Ignore(syscall.SIGTTOU, syscall.SIGTTIN)\n}\n\nfunc tcsetpgrp(fd uintptr, pid int) error {\n\tpgid, _ := syscall.Getpgid(pid)\n\tif pid == pgid {\n\t\treturn unix.IoctlSetPointerInt(int(fd), unix.TIOCSPGRP, pid)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/gdbserial/gdbserver_windows.go",
    "content": "package gdbserial\n\nimport \"syscall\"\n\nfunc sysProcAttr(foreground bool) *syscall.SysProcAttr {\n\treturn nil\n}\n\nfunc foregroundSignalsIgnore() {\n}\n\nfunc tcsetpgrp(fd uintptr, pid int) error {\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/gdbserial/rr.go",
    "content": "package gdbserial\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/go-delve/delve/pkg/config\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\nconst (\n\tdelveRecordFlagsEnvVar = \"DELVE_RR_RECORD_FLAGS\"\n\tdelveReplayFlagsEnvVar = \"DELVE_RR_REPLAY_FLAGS\"\n)\n\n// RecordAsync configures rr to record the execution of the specified\n// program. Returns a run function which will actually record the program, a\n// stop function which will prematurely terminate the recording of the\n// program.\nfunc RecordAsync(cmd []string, wd string, quiet bool, stdin string, stdout proc.OutputRedirect, stderr proc.OutputRedirect) (run func() (string, error), stop func() error, err error) {\n\tif err := checkRRAvailable(); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\trfd, wfd, err := os.Pipe()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\targs := make([]string, 0, len(cmd)+2)\n\targs = append(args, \"record\", \"--print-trace-dir=3\")\n\targs = append(args, config.SplitQuotedFields(os.Getenv(delveRecordFlagsEnvVar), '\"')...)\n\targs = append(args, cmd...)\n\trrcmd := exec.Command(\"rr\", args...)\n\tvar closefn func()\n\trrcmd.Stdin, rrcmd.Stdout, rrcmd.Stderr, closefn, err = openRedirects(stdin, stdout, stderr, quiet)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\trrcmd.ExtraFiles = []*os.File{wfd}\n\trrcmd.Dir = wd\n\n\ttracedirChan := make(chan string)\n\tgo func() {\n\t\tbs, _ := io.ReadAll(rfd)\n\t\ttracedirChan <- strings.TrimSpace(string(bs))\n\t}()\n\n\trun = func() (string, error) {\n\t\terr := rrcmd.Run()\n\t\tclosefn()\n\t\t_ = wfd.Close()\n\t\ttracedir := <-tracedirChan\n\t\treturn tracedir, err\n\t}\n\n\tstop = func() error {\n\t\treturn rrcmd.Process.Signal(syscall.SIGTERM)\n\t}\n\n\treturn run, stop, nil\n}\n\nfunc openRedirects(stdinPath string, stdoutOR proc.OutputRedirect, stderrOR proc.OutputRedirect, quiet bool) (stdin, stdout, stderr *os.File, closefn func(), err error) {\n\ttoclose := []*os.File{}\n\n\tif stdinPath != \"\" {\n\t\tstdin, err = os.Open(stdinPath)\n\t\tif err != nil {\n\t\t\treturn nil, nil, nil, nil, err\n\t\t}\n\t\ttoclose = append(toclose, stdin)\n\t} else {\n\t\tstdin = os.Stdin\n\t}\n\n\tcreate := func(redirect proc.OutputRedirect, dflt *os.File) (f *os.File) {\n\t\tif redirect.Path != \"\" {\n\t\t\tf, err = os.Create(redirect.Path)\n\t\t\tif f != nil {\n\t\t\t\ttoclose = append(toclose, f)\n\t\t\t}\n\n\t\t\treturn f\n\t\t} else if redirect.File != nil {\n\t\t\ttoclose = append(toclose, redirect.File)\n\n\t\t\treturn redirect.File\n\t\t}\n\n\t\tif quiet {\n\t\t\treturn nil\n\t\t}\n\n\t\treturn dflt\n\t}\n\n\tstdout = create(stdoutOR, os.Stdout)\n\tif err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\n\tstderr = create(stderrOR, os.Stderr)\n\tif err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\n\tclosefn = func() {\n\t\tfor _, f := range toclose {\n\t\t\t_ = f.Close()\n\t\t}\n\t}\n\n\treturn stdin, stdout, stderr, closefn, nil\n}\n\n// Record uses rr to record the execution of the specified program and\n// returns the trace directory's path.\nfunc Record(cmd []string, wd string, quiet bool, stdin string, stdout proc.OutputRedirect, stderr proc.OutputRedirect) (tracedir string, err error) {\n\trun, _, err := RecordAsync(cmd, wd, quiet, stdin, stdout, stderr)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\t// ignore run errors, it could be the program crashing\n\treturn run()\n}\n\n// Replay starts an instance of rr in replay mode, with the specified trace\n// directory, and connects to it.\nfunc Replay(tracedir string, quiet, deleteOnDetach bool, debugInfoDirs []string, rrOnProcessPid int, cmdline string) (*proc.TargetGroup, error) {\n\tif err := checkRRAvailable(); err != nil {\n\t\treturn nil, err\n\t}\n\trrVersion := getRRVersion()\n\n\targs := []string{\n\t\t\"replay\",\n\t\t\"--dbgport=0\",\n\t}\n\tif rrOnProcessPid != 0 {\n\t\targs = append(args, fmt.Sprintf(\"--onprocess=%d\", rrOnProcessPid))\n\t}\n\targs = append(args, config.SplitQuotedFields(os.Getenv(delveReplayFlagsEnvVar), '\\'')...)\n\targs = append(args, tracedir)\n\n\trrcmd := exec.Command(\"rr\", args...)\n\trrcmd.Stdout = os.Stdout\n\tstderr, err := rrcmd.StderrPipe()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\trrcmd.SysProcAttr = sysProcAttr(false)\n\n\tinitch := make(chan rrInit)\n\tgo rrStderrParser(stderr, initch, quiet)\n\n\terr = rrcmd.Start()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinit := <-initch\n\tif init.err != nil {\n\t\trrcmd.Process.Kill()\n\t\treturn nil, init.err\n\t}\n\n\tp := newProcess(rrcmd.Process)\n\tp.tracedir = tracedir\n\tp.conn.useXcmd = true // 'rr' does not support the 'M' command which is what we would usually use to write memory, this is only important during function calls, in any other situation writing memory will fail anyway.\n\tp.conn.newRRCmdStyle = rrVersion.AfterOrEqual(goversion.GoVersion{Major: 5, Minor: 8, Rev: 0})\n\tif deleteOnDetach {\n\t\tp.onDetach = func() {\n\t\t\tsafeRemoveAll(p.tracedir)\n\t\t}\n\t}\n\ttgt, err := p.Dial(init.port, init.exe, cmdline, 0, debugInfoDirs, proc.StopLaunched)\n\tif err != nil {\n\t\trrcmd.Process.Kill()\n\t\treturn nil, err\n\t}\n\n\treturn tgt, nil\n}\n\n// ErrPerfEventParanoid is the error returned by Reply and Record if\n// /proc/sys/kernel/perf_event_paranoid is greater than 1.\ntype ErrPerfEventParanoid struct {\n\tactual int\n}\n\nfunc (err ErrPerfEventParanoid) Error() string {\n\treturn fmt.Sprintf(\"rr needs /proc/sys/kernel/perf_event_paranoid <= 1, but it is %d\", err.actual)\n}\n\nfunc checkRRAvailable() error {\n\tif _, err := exec.LookPath(\"rr\"); err != nil {\n\t\treturn &ErrBackendUnavailable{}\n\t}\n\n\t// Check that /proc/sys/kernel/perf_event_paranoid doesn't exist or is <= 1.\n\tbuf, err := os.ReadFile(\"/proc/sys/kernel/perf_event_paranoid\")\n\tif err == nil {\n\t\tperfEventParanoid, _ := strconv.Atoi(strings.TrimSpace(string(buf)))\n\t\tif perfEventParanoid > 1 {\n\t\t\treturn ErrPerfEventParanoid{perfEventParanoid}\n\t\t}\n\t}\n\n\treturn nil\n}\n\ntype rrInit struct {\n\tport string\n\texe  string\n\terr  error\n}\n\nconst (\n\trrGdbCommandLegacyPrefix = \"  gdb \"\n\trrGdbCommandPrefix       = \"  'gdb' \"\n\trrGdbLaunchLegacyPrefix  = \"Launch gdb with\"\n\trrGdbLaunchPrefix        = \"Launch debugger with\"\n\ttargetCmd                = \"target extended-remote \"\n)\n\nfunc rrStderrParser(stderr io.ReadCloser, initch chan<- rrInit, quiet bool) {\n\trd := bufio.NewReader(stderr)\n\tdefer stderr.Close()\n\n\tfor {\n\t\tline, err := rd.ReadString('\\n')\n\t\tif err != nil {\n\t\t\tinitch <- rrInit{\"\", \"\", err}\n\t\t\tclose(initch)\n\t\t\treturn\n\t\t}\n\n\t\tvar flags string\n\t\tvar foundPrefix bool\n\t\tif flags, foundPrefix = strings.CutPrefix(line, rrGdbCommandPrefix); !foundPrefix {\n\t\t\tflags, foundPrefix = strings.CutPrefix(line, rrGdbCommandLegacyPrefix)\n\t\t}\n\t\tif foundPrefix {\n\t\t\tinitch <- rrParseGdbCommand(flags)\n\t\t\tclose(initch)\n\t\t\tbreak\n\t\t}\n\n\t\tif strings.HasPrefix(line, rrGdbLaunchPrefix) || strings.HasPrefix(line, rrGdbLaunchLegacyPrefix) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !quiet {\n\t\t\tos.Stderr.WriteString(line)\n\t\t}\n\t}\n\n\tio.Copy(os.Stderr, rd)\n}\n\ntype ErrMalformedRRGdbCommand struct {\n\tline, reason string\n}\n\nfunc (err *ErrMalformedRRGdbCommand) Error() string {\n\treturn fmt.Sprintf(\"malformed gdb command %q: %s\", err.line, err.reason)\n}\n\nfunc rrParseGdbCommand(line string) rrInit {\n\tport := \"\"\n\tfields := config.SplitQuotedFields(line, '\\'')\n\tfor i := 0; i < len(fields); i++ {\n\t\tswitch fields[i] {\n\t\tcase \"-ex\":\n\t\t\tif i+1 >= len(fields) {\n\t\t\t\treturn rrInit{err: &ErrMalformedRRGdbCommand{line, \"-ex not followed by an argument\"}}\n\t\t\t}\n\t\t\targ := fields[i+1]\n\n\t\t\tif !strings.HasPrefix(arg, targetCmd) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tport = arg[len(targetCmd):]\n\t\t\ti++\n\n\t\tcase \"-l\":\n\t\t\t// skip argument\n\t\t\ti++\n\t\t}\n\t}\n\n\tif port == \"\" {\n\t\treturn rrInit{err: &ErrMalformedRRGdbCommand{line, \"could not find -ex argument\"}}\n\t}\n\n\texe := fields[len(fields)-1]\n\n\treturn rrInit{port: port, exe: exe}\n}\n\n// RecordAndReplay acts like calling Record and then Replay.\nfunc RecordAndReplay(cmd []string, wd string, quiet bool, rrCleanup bool, debugInfoDirs []string, stdin string, stdout proc.OutputRedirect, stderr proc.OutputRedirect) (*proc.TargetGroup, string, error) {\n\ttracedir, err := Record(cmd, wd, quiet, stdin, stdout, stderr)\n\tif tracedir == \"\" {\n\t\treturn nil, \"\", err\n\t}\n\tt, err := Replay(tracedir, quiet, rrCleanup, debugInfoDirs, 0, strings.Join(cmd, \" \"))\n\treturn t, tracedir, err\n}\n\n// safeRemoveAll removes dir and its contents but only as long as dir does\n// not contain directories.\nfunc safeRemoveAll(dir string) {\n\tfis, err := os.ReadDir(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\tfor _, fi := range fis {\n\t\tif fi.IsDir() {\n\t\t\treturn\n\t\t}\n\t}\n\tfor _, fi := range fis {\n\t\tif err := os.Remove(filepath.Join(dir, fi.Name())); err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\tos.Remove(dir)\n}\n\nfunc getRRVersion() goversion.GoVersion {\n\tconst rrVersionStringPrefix = \"rr version \"\n\tbuf, err := exec.Command(\"rr\", \"--version\").CombinedOutput()\n\tif err != nil {\n\t\treturn goversion.GoVersion{}\n\t}\n\trest, ok := strings.CutPrefix(string(buf), rrVersionStringPrefix)\n\tif !ok {\n\t\tlogflags.GdbWireLogger().Errorf(\"error reading rr version, prefix not found in %q\", string(buf))\n\t\treturn goversion.GoVersion{}\n\t}\n\trest = strings.TrimSpace(rest)\n\tv := strings.Split(rest, \".\")\n\tif len(v) < 3 {\n\t\tlogflags.GdbWireLogger().Errorf(\"error reading rr version, not long enough %q\", string(buf))\n\t\treturn goversion.GoVersion{}\n\t}\n\tmajor, majorerr := strconv.Atoi(v[0])\n\tminor, minorerr := strconv.Atoi(v[1])\n\tpatch, patcherr := strconv.Atoi(v[2])\n\tif majorerr != nil || minorerr != nil || patcherr != nil {\n\t\tlogflags.GdbWireLogger().Errorf(\"error reading rr version %v %v %v\", majorerr, minorerr, patcherr)\n\t\treturn goversion.GoVersion{}\n\t}\n\treturn goversion.GoVersion{Major: major, Minor: minor, Rev: patch}\n}\n"
  },
  {
    "path": "pkg/proc/gdbserial/rr_test.go",
    "content": "package gdbserial_test\n\nimport (\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/gdbserial\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nfunc TestMain(m *testing.M) {\n\tvar logConf string\n\tflag.StringVar(&logConf, \"log\", \"\", \"configures logging\")\n\tflag.Parse()\n\tlogflags.Setup(logConf != \"\", logConf, \"\")\n\tprotest.RunTestsWithFixtures(m)\n}\n\nfunc withTestRecording(name string, t testing.TB, fn func(grp *proc.TargetGroup, fixture protest.Fixture)) {\n\tfixture := protest.BuildFixture(t, name, 0)\n\tprotest.MustHaveRecordingAllowed(t)\n\tif path, _ := exec.LookPath(\"rr\"); path == \"\" {\n\t\tt.Skip(\"test skipped, rr not found\")\n\t}\n\tt.Log(\"recording\")\n\tgrp, tracedir, err := gdbserial.RecordAndReplay([]string{fixture.Path}, \".\", true, true, []string{}, \"\", proc.OutputRedirect{}, proc.OutputRedirect{})\n\tif err != nil {\n\t\tt.Fatal(\"Launch():\", err)\n\t}\n\tt.Logf(\"replaying %q\", tracedir)\n\n\tdefer grp.Detach(true)\n\n\tfn(grp, fixture)\n}\n\nfunc assertNoError(err error, t testing.TB, s string) {\n\tif err != nil {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\tfname := filepath.Base(file)\n\t\tt.Fatalf(\"failed assertion at %s:%d: %s - %s\\n\", fname, line, s, err)\n\t}\n}\n\nfunc setFunctionBreakpoint(p *proc.Target, t *testing.T, fname string) *proc.Breakpoint {\n\t_, f, l, _ := runtime.Caller(1)\n\tf = filepath.Base(f)\n\n\taddrs, err := proc.FindFunctionLocation(p, fname, 0)\n\tif err != nil {\n\t\tt.Fatalf(\"%s:%d: FindFunctionLocation(%s): %v\", f, l, fname, err)\n\t}\n\tif len(addrs) != 1 {\n\t\tt.Fatalf(\"%s:%d: setFunctionBreakpoint(%s): too many results %v\", f, l, fname, addrs)\n\t}\n\tbp, err := p.SetBreakpoint(0, addrs[0], proc.UserBreakpoint, nil)\n\tif err != nil {\n\t\tt.Fatalf(\"%s:%d: FindFunctionLocation(%s): %v\", f, l, fname, err)\n\t}\n\treturn bp\n}\n\nfunc TestTraceDirCleanup(t *testing.T) {\n\tprotest.AllowRecording(t)\n\tprotest.MustHaveRecordingAllowed(t)\n\n\toldFlags := os.Getenv(\"DELVE_RR_RECORD_FLAGS\")\n\tdefer func() {\n\t\tif oldFlags == \"\" {\n\t\t\tos.Unsetenv(\"DELVE_RR_RECORD_FLAGS\")\n\t\t} else {\n\t\t\tos.Setenv(\"DELVE_RR_RECORD_FLAGS\", oldFlags)\n\t\t}\n\t}()\n\n\ttmpDir := filepath.Join(os.TempDir(), \"dlvrecord\")\n\tif _, err := os.Stat(tmpDir); err == nil {\n\t\tt.Logf(\"removing leftover directory %s\", tmpDir)\n\t\tprotest.SafeRemoveAll(tmpDir)\n\t}\n\tdirname := \"--output-trace-dir \" + tmpDir\n\tos.Setenv(\"DELVE_RR_RECORD_FLAGS\", dirname)\n\n\tfixture := protest.BuildFixture(t, \"testnextprog\", 0)\n\tif path, _ := exec.LookPath(\"rr\"); path == \"\" {\n\t\tt.Skip(\"test skipped, rr not found\")\n\t}\n\tt.Log(\"recording\")\n\tgrp, tracedir, err := gdbserial.RecordAndReplay([]string{fixture.Path}, \".\", true, false, []string{}, \"\", proc.OutputRedirect{}, proc.OutputRedirect{})\n\tif err != nil {\n\t\tt.Fatal(\"Launch():\", err)\n\t}\n\tt.Logf(\"trace directory %q\", tracedir)\n\n\tgrp.Continue()\n\tgrp.Detach(true)\n\tif _, err = os.ReadDir(tracedir); err != nil {\n\t\tt.Fatal(\"Trace directory does not exist! Flag rr-cleanup failed: \", err)\n\t}\n\n\tprotest.SafeRemoveAll(tracedir)\n}\n\nfunc TestRestartAfterExit(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestRecording(\"testnextprog\", t, func(grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tp := grp.Selected\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tloc, err := proc.ThreadLocation(p.CurrentThread())\n\t\tassertNoError(err, t, \"CurrentThread().Location()\")\n\t\terr = grp.Continue()\n\t\tif !errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\tt.Fatalf(\"program did not exit: %v\", err)\n\t\t}\n\n\t\tassertNoError(grp.Restart(\"\"), t, \"Restart\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue (after restart)\")\n\t\tloc2, err := proc.ThreadLocation(p.CurrentThread())\n\t\tassertNoError(err, t, \"CurrentThread().Location() (after restart)\")\n\t\tif loc2.Line != loc.Line {\n\t\t\tt.Fatalf(\"stopped at %d (expected %d)\", loc2.Line, loc.Line)\n\t\t}\n\t\terr = grp.Continue()\n\t\tif !errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\tt.Fatalf(\"program did not exit (after exit): %v\", err)\n\t\t}\n\t})\n}\n\nfunc TestRestartDuringStop(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestRecording(\"testnextprog\", t, func(grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tp := grp.Selected\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tloc, err := proc.ThreadLocation(p.CurrentThread())\n\t\tassertNoError(err, t, \"CurrentThread().Location()\")\n\n\t\tassertNoError(grp.Restart(\"\"), t, \"Restart\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue (after restart)\")\n\t\tloc2, err := proc.ThreadLocation(p.CurrentThread())\n\t\tassertNoError(err, t, \"CurrentThread().Location() (after restart)\")\n\t\tif loc2.Line != loc.Line {\n\t\t\tt.Fatalf(\"stopped at %d (expected %d)\", loc2.Line, loc.Line)\n\t\t}\n\t\terr = grp.Continue()\n\t\tif !errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\tt.Fatalf(\"program did not exit (after exit): %v\", err)\n\t\t}\n\t})\n}\n\nfunc setFileBreakpoint(p *proc.Target, t *testing.T, fixture protest.Fixture, lineno int) *proc.Breakpoint {\n\t_, f, l, _ := runtime.Caller(1)\n\tf = filepath.Base(f)\n\n\taddrs, err := proc.FindFileLocation(p, fixture.Source, lineno)\n\tif err != nil {\n\t\tt.Fatalf(\"%s:%d: FindFileLocation(%s, %d): %v\", f, l, fixture.Source, lineno, err)\n\t}\n\tif len(addrs) != 1 {\n\t\tt.Fatalf(\"%s:%d: setFileLineBreakpoint(%s, %d): too many results %v\", f, l, fixture.Source, lineno, addrs)\n\t}\n\tbp, err := p.SetBreakpoint(int(addrs[0]), addrs[0], proc.UserBreakpoint, nil)\n\tif err != nil {\n\t\tt.Fatalf(\"%s:%d: SetBreakpoint: %v\", f, l, err)\n\t}\n\treturn bp\n}\n\nfunc TestReverseBreakpointCounts(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestRecording(\"bpcountstest\", t, func(grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tp := grp.Selected\n\t\tendbp := setFileBreakpoint(p, t, fixture, 28)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tloc, _ := proc.ThreadLocation(p.CurrentThread())\n\t\tif loc.PC != endbp.Addr {\n\t\t\tt.Fatalf(\"did not reach end of main.main function: %s:%d (%#x)\", loc.File, loc.Line, loc.PC)\n\t\t}\n\n\t\tp.ClearBreakpoint(endbp.Addr)\n\t\tassertNoError(grp.ChangeDirection(proc.Backward), t, \"Switching to backward direction\")\n\t\tbp := setFileBreakpoint(p, t, fixture, 12)\n\t\tstartbp := setFileBreakpoint(p, t, fixture, 20)\n\n\tcountLoop:\n\t\tfor {\n\t\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\t\tloc, _ := proc.ThreadLocation(p.CurrentThread())\n\t\t\tswitch loc.PC {\n\t\t\tcase startbp.Addr:\n\t\t\t\tbreak countLoop\n\t\t\tcase bp.Addr:\n\t\t\t\t// ok\n\t\t\tdefault:\n\t\t\t\tt.Fatalf(\"unexpected stop location %s:%d %#x\", loc.File, loc.Line, loc.PC)\n\t\t\t}\n\t\t}\n\n\t\tt.Logf(\"TotalHitCount: %d\", bp.Logical.TotalHitCount)\n\t\tif bp.Logical.TotalHitCount != 200 {\n\t\t\tt.Fatalf(\"Wrong TotalHitCount for the breakpoint (%d)\", bp.Logical.TotalHitCount)\n\t\t}\n\n\t\tif len(bp.Logical.HitCount) != 2 {\n\t\t\tt.Fatalf(\"Wrong number of goroutines for breakpoint (%d)\", len(bp.Logical.HitCount))\n\t\t}\n\n\t\tfor _, v := range bp.Logical.HitCount {\n\t\t\tif v != 100 {\n\t\t\t\tt.Fatalf(\"Wrong HitCount for breakpoint (%v)\", bp.Logical.HitCount)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc getPosition(grp *proc.TargetGroup, t *testing.T) (when string, loc *proc.Location) {\n\tvar err error\n\twhen, err = grp.When()\n\tassertNoError(err, t, \"When\")\n\tloc, err = proc.ThreadLocation(grp.Selected.CurrentThread())\n\tassertNoError(err, t, \"Location\")\n\treturn\n}\n\nfunc TestCheckpoints(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestRecording(\"continuetestprog\", t, func(grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tp := grp.Selected\n\t\t// Continues until start of main.main, record output of 'when'\n\t\tbp := setFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\twhen0, loc0 := getPosition(grp, t)\n\t\tt.Logf(\"when0: %q (%#x) %x\", when0, loc0.PC, p.CurrentThread().ThreadID())\n\n\t\t// Create a checkpoint and check that the list of checkpoints reflects this\n\t\tcpid, err := grp.Checkpoint(\"checkpoint1\")\n\t\tif cpid != 1 {\n\t\t\tt.Errorf(\"unexpected checkpoint id %d\", cpid)\n\t\t}\n\t\tassertNoError(err, t, \"Checkpoint\")\n\t\tcheckpoints, err := grp.Checkpoints()\n\t\tassertNoError(err, t, \"Checkpoints\")\n\t\tif len(checkpoints) != 1 {\n\t\t\tt.Fatalf(\"wrong number of checkpoints %v (one expected)\", checkpoints)\n\t\t}\n\n\t\t// Move forward with next, check that the output of 'when' changes\n\t\tassertNoError(grp.Next(), t, \"First Next\")\n\t\tassertNoError(grp.Next(), t, \"Second Next\")\n\t\twhen1, loc1 := getPosition(grp, t)\n\t\tt.Logf(\"when1: %q (%#x) %x\", when1, loc1.PC, p.CurrentThread().ThreadID())\n\t\tif loc0.PC == loc1.PC {\n\t\t\tt.Fatalf(\"next did not move process %#x\", loc0.PC)\n\t\t}\n\t\tif when0 == when1 {\n\t\t\tt.Fatalf(\"output of when did not change after next: %q\", when0)\n\t\t}\n\n\t\t// Move back to checkpoint, check that the output of 'when' is the same as\n\t\t// what it was when we set the breakpoint\n\t\tgrp.Restart(fmt.Sprintf(\"c%d\", cpid))\n\t\tg, _ := proc.FindGoroutine(p, 1)\n\t\tp.SwitchGoroutine(g)\n\t\twhen2, loc2 := getPosition(grp, t)\n\t\tt.Logf(\"when2: %q (%#x) %x\", when2, loc2.PC, p.CurrentThread().ThreadID())\n\t\tif loc2.PC != loc0.PC {\n\t\t\tt.Fatalf(\"PC address mismatch %#x != %#x\", loc0.PC, loc2.PC)\n\t\t}\n\t\tif when0 != when2 {\n\t\t\tt.Fatalf(\"output of when mismatched %q != %q\", when0, when2)\n\t\t}\n\n\t\t// Move forward with next again, check that the output of 'when' matches\n\t\tassertNoError(grp.Next(), t, \"First Next\")\n\t\tassertNoError(grp.Next(), t, \"Second Next\")\n\t\twhen3, loc3 := getPosition(grp, t)\n\t\tt.Logf(\"when3: %q (%#x)\", when3, loc3.PC)\n\t\tif loc3.PC != loc1.PC {\n\t\t\tt.Fatalf(\"PC address mismatch %#x != %#x\", loc1.PC, loc3.PC)\n\t\t}\n\t\tif when3 != when1 {\n\t\t\tt.Fatalf(\"when output mismatch %q != %q\", when1, when3)\n\t\t}\n\n\t\t// Delete breakpoint, move back to checkpoint then next twice and check\n\t\t// output of 'when' again\n\t\terr = p.ClearBreakpoint(bp.Addr)\n\t\tassertNoError(err, t, \"ClearBreakpoint\")\n\t\tgrp.Restart(fmt.Sprintf(\"c%d\", cpid))\n\t\tg, _ = proc.FindGoroutine(p, 1)\n\t\tp.SwitchGoroutine(g)\n\t\tassertNoError(grp.Next(), t, \"First Next\")\n\t\tassertNoError(grp.Next(), t, \"Second Next\")\n\t\twhen4, loc4 := getPosition(grp, t)\n\t\tt.Logf(\"when4: %q (%#x)\", when4, loc4.PC)\n\t\tif loc4.PC != loc1.PC {\n\t\t\tt.Fatalf(\"PC address mismatch %#x != %#x\", loc1.PC, loc4.PC)\n\t\t}\n\t\tif when4 != when1 {\n\t\t\tt.Fatalf(\"when output mismatch %q != %q\", when1, when4)\n\t\t}\n\n\t\t// Delete checkpoint, check that the list of checkpoints is updated\n\t\tassertNoError(grp.ClearCheckpoint(cpid), t, \"ClearCheckpoint\")\n\t\tcheckpoints, err = grp.Checkpoints()\n\t\tassertNoError(err, t, \"Checkpoints\")\n\t\tif len(checkpoints) != 0 {\n\t\t\tt.Fatalf(\"wrong number of checkpoints %v (zero expected)\", checkpoints)\n\t\t}\n\t})\n}\n\nfunc TestIssue1376(t *testing.T) {\n\t// Backward Continue should terminate when it encounters the start of the process.\n\tprotest.AllowRecording(t)\n\twithTestRecording(\"continuetestprog\", t, func(grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tp := grp.Selected\n\t\tbp := setFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue (forward)\")\n\t\terr := p.ClearBreakpoint(bp.Addr)\n\t\tassertNoError(err, t, \"ClearBreakpoint\")\n\t\tassertNoError(grp.ChangeDirection(proc.Backward), t, \"Switching to backward direction\")\n\t\tassertNoError(grp.Continue(), t, \"Continue (backward)\")\n\t})\n}\n"
  },
  {
    "path": "pkg/proc/goroutine_cache.go",
    "content": "package proc\n\ntype goroutineCache struct {\n\tpartialGCache map[int64]*G\n\tallGCache     []*G\n\n\tallgentryAddr, allglenAddr uint64\n}\n\nfunc (gcache *goroutineCache) init(bi *BinaryInfo) {\n\tvar err error\n\n\texeimage := bi.Images[0]\n\trdr := exeimage.DwarfReader()\n\tif rdr == nil {\n\t\treturn\n\t}\n\n\tgcache.allglenAddr, _ = rdr.AddrFor(\"runtime.allglen\", exeimage.StaticBase, bi.Arch.PtrSize())\n\n\trdr.Seek(0)\n\tgcache.allgentryAddr, err = rdr.AddrFor(\"runtime.allgs\", exeimage.StaticBase, bi.Arch.PtrSize())\n\tif err != nil {\n\t\t// try old name (pre Go 1.6)\n\t\tgcache.allgentryAddr, _ = rdr.AddrFor(\"runtime.allg\", exeimage.StaticBase, bi.Arch.PtrSize())\n\t}\n}\n\nfunc (gcache *goroutineCache) getRuntimeAllg(bi *BinaryInfo, mem MemoryReadWriter) (uint64, uint64, error) {\n\tif gcache.allglenAddr == 0 || gcache.allgentryAddr == 0 {\n\t\treturn 0, 0, ErrNoRuntimeAllG\n\t}\n\tallglen, err := readUintRaw(mem, gcache.allglenAddr, int64(bi.Arch.PtrSize()))\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\tallgptr, err := readUintRaw(mem, gcache.allgentryAddr, int64(bi.Arch.PtrSize()))\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\treturn allgptr, allglen, nil\n}\n\nfunc (gcache *goroutineCache) addGoroutine(g *G) {\n\tif gcache.partialGCache == nil {\n\t\tgcache.partialGCache = make(map[int64]*G)\n\t}\n\tgcache.partialGCache[g.ID] = g\n}\n\n// Clear clears the cached contents of the cache for runtime.allgs.\nfunc (gcache *goroutineCache) Clear() {\n\tgcache.partialGCache = nil\n\tgcache.allGCache = nil\n}\n"
  },
  {
    "path": "pkg/proc/i386_arch.go",
    "content": "package proc\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n)\n\nvar i386BreakInstruction = []byte{0xCC}\n\n// I386Arch returns an initialized I386Arch\n// struct.\nfunc I386Arch(goos string) *Arch {\n\treturn &Arch{\n\t\tName:                             \"386\",\n\t\tptrSize:                          4,\n\t\tmaxInstructionLength:             15,\n\t\tbreakpointInstruction:            i386BreakInstruction,\n\t\taltBreakpointInstruction:         []byte{0xcd, 0x03},\n\t\tbreakInstrMovesPC:                true,\n\t\tderefTLS:                         false,\n\t\tprologues:                        prologuesI386,\n\t\tfixFrameUnwindContext:            i386FixFrameUnwindContext,\n\t\tswitchStack:                      i386SwitchStack,\n\t\tregSize:                          i386RegSize,\n\t\tRegistersToDwarfRegisters:        i386RegistersToDwarfRegisters,\n\t\taddrAndStackRegsToDwarfRegisters: i386AddrAndStackRegsToDwarfRegisters,\n\t\tDwarfRegisterToString:            i386DwarfRegisterToString,\n\t\tinhibitStepInto:                  i386InhibitStepInto,\n\t\tasmDecode:                        i386AsmDecode,\n\t\tPCRegNum:                         regnum.I386_Eip,\n\t\tSPRegNum:                         regnum.I386_Esp,\n\t\tasmRegisters:                     i386AsmRegisters,\n\t\tRegisterNameToDwarf:              nameToDwarfFunc(regnum.I386NameToDwarf),\n\t\tRegnumToString:                   regnum.I386ToName,\n\t}\n}\n\nfunc i386FixFrameUnwindContext(fctxt *frame.FrameContext, pc uint64, bi *BinaryInfo) *frame.FrameContext {\n\ti := bi.Arch\n\tif i.sigreturnfn == nil {\n\t\ti.sigreturnfn = bi.lookupOneFunc(\"runtime.sigreturn\")\n\t}\n\n\tif fctxt == nil || (i.sigreturnfn != nil && pc >= i.sigreturnfn.Entry && pc < i.sigreturnfn.End) {\n\t\t// When there's no frame descriptor entry use BP (the frame pointer) instead\n\t\t// - return register is [bp + i.PtrSize()] (i.e. [cfa-i.PtrSize()])\n\t\t// - cfa is bp + i.PtrSize()*2\n\t\t// - bp is [bp] (i.e. [cfa-i.PtrSize()*2])\n\t\t// - sp is cfa\n\n\t\t// When the signal handler runs it will move the execution to the signal\n\t\t// handling stack (installed using the sigaltstack system call).\n\t\t// This isn't i proper stack switch: the pointer to g in TLS will still\n\t\t// refer to whatever g was executing on that thread before the signal was\n\t\t// received.\n\t\t// Since go did not execute i stack switch the previous value of sp, pc\n\t\t// and bp is not saved inside g.sched, as it normally would.\n\t\t// The only way to recover is to either read sp/pc from the signal context\n\t\t// parameter (the ucontext_t* parameter) or to unconditionally follow the\n\t\t// frame pointer when we get to runtime.sigreturn (which is what we do\n\t\t// here).\n\n\t\treturn &frame.FrameContext{\n\t\t\tRetAddrReg: regnum.I386_Eip,\n\t\t\tRegs: map[uint64]frame.DWRule{\n\t\t\t\tregnum.I386_Eip: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-i.PtrSize()),\n\t\t\t\t},\n\t\t\t\tregnum.I386_Ebp: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-2 * i.PtrSize()),\n\t\t\t\t},\n\t\t\t\tregnum.I386_Esp: {\n\t\t\t\t\tRule:   frame.RuleValOffset,\n\t\t\t\t\tOffset: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\tCFA: frame.DWRule{\n\t\t\t\tRule:   frame.RuleCFA,\n\t\t\t\tReg:    regnum.I386_Ebp,\n\t\t\t\tOffset: int64(2 * i.PtrSize()),\n\t\t\t},\n\t\t}\n\t}\n\n\tif i.crosscall2fn == nil {\n\t\ti.crosscall2fn = bi.lookupOneFunc(\"crosscall2\")\n\t}\n\n\t// TODO(chainhelen), need to check whether there is a bad frame descriptor like amd64.\n\t// crosscall2 is defined in $GOROOT/src/runtime/cgo/asm_386.s.\n\tif i.crosscall2fn != nil && pc >= i.crosscall2fn.Entry && pc < i.crosscall2fn.End {\n\t\trule := fctxt.CFA\n\t\tfctxt.CFA = rule\n\t}\n\n\t// We assume that EBP is the frame pointer and we want to keep it updated,\n\t// so that we can use it to unwind the stack even when we encounter frames\n\t// without descriptor entries.\n\t// If there isn't i rule already we emit one.\n\tif fctxt.Regs[regnum.I386_Ebp].Rule == frame.RuleUndefined {\n\t\tfctxt.Regs[regnum.I386_Ebp] = frame.DWRule{\n\t\t\tRule:   frame.RuleFramePointer,\n\t\t\tReg:    regnum.I386_Ebp,\n\t\t\tOffset: 0,\n\t\t}\n\t}\n\n\treturn fctxt\n}\n\n// SwitchStack will use the current frame to determine if it's time to\nfunc i386SwitchStack(it *stackIterator, _ *op.DwarfRegisters) bool {\n\tif it.frame.Current.Fn == nil {\n\t\tif it.systemstack && it.g != nil && it.top {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\tswitch it.frame.Current.Fn.Name {\n\tcase \"runtime.asmcgocall\", \"runtime.cgocallback_gofunc\": // TODO(chainhelen), need to support cgo stacktraces.\n\t\treturn false\n\tcase \"runtime.goexit\", \"runtime.rt0_go\":\n\t\t// Look for \"top of stack\" functions.\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"runtime.mcall\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"runtime.mstart\":\n\t\t// Calls to runtime.systemstack will switch to the systemstack then:\n\t\t// 1. alter the goroutine stack so that it looks like systemstack_switch\n\t\t//    was called\n\t\t// 2. alter the system stack so that it looks like the bottom-most frame\n\t\t//    belongs to runtime.mstart\n\t\t// If we find a runtime.mstart frame on the system stack of a goroutine\n\t\t// parked on runtime.systemstack_switch we assume runtime.systemstack was\n\t\t// called and continue tracing from the parked position.\n\n\t\tif it.top || !it.systemstack || it.g == nil {\n\t\t\treturn false\n\t\t}\n\t\tif fn := it.bi.PCToFunc(it.g.PC); fn == nil || fn.Name != \"runtime.systemstack_switch\" {\n\t\t\treturn false\n\t\t}\n\n\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\tit.err = err\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\n\tcase \"runtime.newstack\", \"runtime.systemstack\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// RegSize returns the size (in bytes) of register regnum.\n// The mapping between hardware registers and DWARF registers is specified\n// in the System V ABI Intel386 Architecture Processor Supplement page 25,\n// table 2.14\n// https://www.uclibc.org/docs/psABI-i386.pdf\nfunc i386RegSize(regnum uint64) int {\n\t// XMM registers\n\tif regnum >= 21 && regnum <= 36 {\n\t\treturn 16\n\t}\n\t// x87 registers\n\tif regnum >= 11 && regnum <= 18 {\n\t\treturn 10\n\t}\n\treturn 4\n}\n\nfunc i386RegistersToDwarfRegisters(staticBase uint64, regs Registers) *op.DwarfRegisters {\n\tdregs := initDwarfRegistersFromSlice(regnum.I386MaxRegNum(), regs, regnum.I386NameToDwarf)\n\tdr := op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.I386_Eip, regnum.I386_Esp, regnum.I386_Ebp, 0)\n\tdr.SetLoadMoreCallback(loadMoreDwarfRegistersFromSliceFunc(dr, regs, regnum.I386NameToDwarf))\n\n\treturn dr\n}\n\nfunc i386AddrAndStackRegsToDwarfRegisters(staticBase, pc, sp, bp, lr uint64) op.DwarfRegisters {\n\tdregs := make([]*op.DwarfRegister, regnum.I386_Eip+1)\n\tdregs[regnum.I386_Eip] = op.DwarfRegisterFromUint64(pc)\n\tdregs[regnum.I386_Esp] = op.DwarfRegisterFromUint64(sp)\n\tdregs[regnum.I386_Ebp] = op.DwarfRegisterFromUint64(bp)\n\n\treturn *op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.I386_Eip, regnum.I386_Esp, regnum.I386_Ebp, 0)\n}\n\nfunc i386DwarfRegisterToString(j int, reg *op.DwarfRegister) (name string, floatingPoint bool, repr string) {\n\tname = regnum.I386ToName(uint64(j))\n\n\tif reg == nil {\n\t\treturn name, false, \"\"\n\t}\n\n\tswitch n := strings.ToLower(name); n {\n\tcase \"eflags\":\n\t\treturn name, false, eflagsDescription.Describe(reg.Uint64Val, 32)\n\n\tcase \"tw\", \"fop\":\n\t\treturn name, true, fmt.Sprintf(\"%#04x\", reg.Uint64Val)\n\n\tdefault:\n\t\tif reg.Bytes != nil && strings.HasPrefix(n, \"xmm\") {\n\t\t\treturn name, true, formatSSEReg(name, reg.Bytes)\n\t\t} else if reg.Bytes != nil && strings.HasPrefix(n, \"st(\") {\n\t\t\treturn name, true, formatX87Reg(reg.Bytes)\n\t\t} else if reg.Bytes == nil || (reg.Bytes != nil && len(reg.Bytes) <= 8) {\n\t\t\treturn name, false, fmt.Sprintf(\"%#016x\", reg.Uint64Val)\n\t\t} else {\n\t\t\treturn name, false, fmt.Sprintf(\"%#x\", reg.Bytes)\n\t\t}\n\t}\n}\n\n// i386InhibitStepInto returns whether StepBreakpoint can be set at pc.\n// When cgo or pie on 386 linux, compiler will insert more instructions (ex: call __x86.get_pc_thunk.).\n// StepBreakpoint shouldn't be set on __x86.get_pc_thunk and skip it.\n// See comments on stacksplit in $GOROOT/src/cmd/internal/obj/x86/obj6.go for generated instructions details.\nfunc i386InhibitStepInto(bi *BinaryInfo, pc uint64) bool {\n\tif bi.SymNames != nil && bi.SymNames[pc] != nil &&\n\t\tstrings.HasPrefix(bi.SymNames[pc].Name, \"__x86.get_pc_thunk.\") {\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "pkg/proc/i386_disasm.go",
    "content": "// TODO: disassembler support should be compiled in unconditionally,\n// instead of being decided by the build-target architecture, and be\n// part of the Arch object instead.\n\npackage proc\n\nimport (\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\n\t\"golang.org/x/arch/x86/x86asm\"\n)\n\nfunc i386AsmDecode(asmInst *AsmInstruction, mem []byte, regs *op.DwarfRegisters, memrw MemoryReadWriter, bi *BinaryInfo) error {\n\treturn x86AsmDecode(asmInst, mem, regs, memrw, bi, 32)\n}\n\n// Possible stacksplit prologues are inserted by stacksplit in\n// $GOROOT/src/cmd/internal/obj/x86/obj6.go.\n// If 386 on linux when pie, the stacksplit prologue begin with `call __x86.get_pc_thunk.` sometime.\nvar prologuesI386 []opcodeSeq\n\nfunc init() {\n\tvar i386GetPcIns = opcodeSeq{uint64(x86asm.CALL)}\n\tvar tinyStacksplit = opcodeSeq{uint64(x86asm.CMP), uint64(x86asm.JBE)}\n\tvar smallStacksplit = opcodeSeq{uint64(x86asm.LEA), uint64(x86asm.CMP), uint64(x86asm.JBE)}\n\tvar bigStacksplit = opcodeSeq{uint64(x86asm.MOV), uint64(x86asm.CMP), uint64(x86asm.JE), uint64(x86asm.LEA), uint64(x86asm.SUB), uint64(x86asm.CMP), uint64(x86asm.JBE)}\n\tvar unixGetG = opcodeSeq{uint64(x86asm.MOV), uint64(x86asm.MOV)}\n\n\tprologuesI386 = make([]opcodeSeq, 0, 2*3)\n\tfor _, getPcIns := range []opcodeSeq{{}, i386GetPcIns} {\n\t\tfor _, getG := range []opcodeSeq{unixGetG} { // TODO(chainhelen), need to support other OSs.\n\t\t\tfor _, stacksplit := range []opcodeSeq{tinyStacksplit, smallStacksplit, bigStacksplit} {\n\t\t\t\tprologue := make(opcodeSeq, 0, len(getPcIns)+len(getG)+len(stacksplit))\n\t\t\t\tprologue = append(prologue, getPcIns...)\n\t\t\t\tprologue = append(prologue, getG...)\n\t\t\t\tprologue = append(prologue, stacksplit...)\n\t\t\t\tprologuesI386 = append(prologuesI386, prologue)\n\t\t\t}\n\t\t}\n\t}\n}\n\nvar i386AsmRegisters = map[int]asmRegister{\n\t// 8-bit\n\tint(x86asm.AL):  {regnum.I386_Eax, 0, mask8},\n\tint(x86asm.CL):  {regnum.I386_Ecx, 0, mask8},\n\tint(x86asm.DL):  {regnum.I386_Edx, 0, mask8},\n\tint(x86asm.BL):  {regnum.I386_Ebx, 0, mask8},\n\tint(x86asm.AH):  {regnum.I386_Eax, 8, mask8},\n\tint(x86asm.CH):  {regnum.I386_Ecx, 8, mask8},\n\tint(x86asm.DH):  {regnum.I386_Edx, 8, mask8},\n\tint(x86asm.BH):  {regnum.I386_Ebx, 8, mask8},\n\tint(x86asm.SPB): {regnum.I386_Esp, 0, mask8},\n\tint(x86asm.BPB): {regnum.I386_Ebp, 0, mask8},\n\tint(x86asm.SIB): {regnum.I386_Esi, 0, mask8},\n\tint(x86asm.DIB): {regnum.I386_Edi, 0, mask8},\n\n\t// 16-bit\n\tint(x86asm.AX): {regnum.I386_Eax, 0, mask16},\n\tint(x86asm.CX): {regnum.I386_Ecx, 0, mask16},\n\tint(x86asm.DX): {regnum.I386_Edx, 0, mask16},\n\tint(x86asm.BX): {regnum.I386_Ebx, 0, mask16},\n\tint(x86asm.SP): {regnum.I386_Esp, 0, mask16},\n\tint(x86asm.BP): {regnum.I386_Ebp, 0, mask16},\n\tint(x86asm.SI): {regnum.I386_Esi, 0, mask16},\n\tint(x86asm.DI): {regnum.I386_Edi, 0, mask16},\n\n\t// 32-bit\n\tint(x86asm.EAX): {regnum.I386_Eax, 0, mask32},\n\tint(x86asm.ECX): {regnum.I386_Ecx, 0, mask32},\n\tint(x86asm.EDX): {regnum.I386_Edx, 0, mask32},\n\tint(x86asm.EBX): {regnum.I386_Ebx, 0, mask32},\n\tint(x86asm.ESP): {regnum.I386_Esp, 0, mask32},\n\tint(x86asm.EBP): {regnum.I386_Ebp, 0, mask32},\n\tint(x86asm.ESI): {regnum.I386_Esi, 0, mask32},\n\tint(x86asm.EDI): {regnum.I386_Edi, 0, mask32},\n}\n"
  },
  {
    "path": "pkg/proc/interface.go",
    "content": "package proc\n\nimport (\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n)\n\n// ProcessGroup is a group of processes that are resumed at the same time.\ntype ProcessGroup interface {\n\tContinueOnce(*ContinueOnceContext) (Thread, StopReason, error)\n\tStepInstruction(int) error\n\tDetach(int, bool) error\n\tClose() error\n}\n\n// Process represents the target of the debugger. This\n// target could be a system process, core file, etc.\n//\n// Implementations of Process are not required to be thread safe and users\n// of Process should not assume they are.\n// There is one exception to this rule: it is safe to call RequestManualStop\n// concurrently with ContinueOnce.\ntype Process interface {\n\tBinInfo() *BinaryInfo\n\tEntryPoint() (uint64, error)\n\n\tFindThread(threadID int) (Thread, bool)\n\tThreadList() []Thread\n\n\tBreakpoints() *BreakpointMap\n\n\t// Memory returns a memory read/writer for this process's memory.\n\tMemory() MemoryReadWriter\n}\n\n// ProcessInternal holds a set of methods that need to be implemented by a\n// Delve backend. Methods in the Process interface are safe to be called by\n// clients of the 'proc' library, while all other methods are only called\n// directly within 'proc'.\ntype ProcessInternal interface {\n\tProcess\n\t// Valid returns true if this Process can be used. When it returns false it\n\t// also returns an error describing why the Process is invalid (either\n\t// ErrProcessExited or ErrProcessDetached).\n\tValid() (bool, error)\n\n\t// RequestManualStop attempts to stop all the process' threads.\n\tRequestManualStop(cctx *ContinueOnceContext) error\n\n\tWriteBreakpoint(*Breakpoint) error\n\tEraseBreakpoint(*Breakpoint) error\n\n\tSupportsBPF() bool\n\tSetUProbe(string, int64, []ebpf.UProbeArgMap) error\n\tGetBufferedTracepoints() []ebpf.RawUProbeParams\n\n\t// DumpProcessNotes returns ELF core notes describing the process and its threads.\n\t// Implementing this method is optional.\n\tDumpProcessNotes(notes []elfwriter.Note, threadDone func()) (bool, []elfwriter.Note, error)\n\t// MemoryMap returns the memory map of the target process. This method must be implemented if CanDump is true.\n\tMemoryMap() ([]MemoryMapEntry, error)\n\n\t// StartCallInjection notifies the backend that we are about to inject a function call.\n\tStartCallInjection() (func(), error)\n\n\t// FollowExec enables (or disables) follow exec mode\n\tFollowExec(bool) error\n}\n\n// RecordingManipulation is an interface for manipulating process recordings.\ntype RecordingManipulation interface {\n\t// Recorded returns true if the current process is a recording and the path\n\t// to the trace directory.\n\tRecorded() (recorded bool, tracedir string)\n\t// ChangeDirection changes execution direction.\n\tChangeDirection(Direction) error\n\t// GetDirection returns the current direction of execution.\n\tGetDirection() Direction\n\t// When returns current recording position.\n\tWhen() (string, error)\n\t// Checkpoint sets a checkpoint at the current position.\n\tCheckpoint(where string) (id int, err error)\n\t// Checkpoints returns the list of currently set checkpoint.\n\tCheckpoints() ([]Checkpoint, error)\n\t// ClearCheckpoint removes a checkpoint.\n\tClearCheckpoint(id int) error\n}\n\n// RecordingManipulationInternal is an interface that a Delve backend can\n// implement if it is a recording.\ntype RecordingManipulationInternal interface {\n\tRecordingManipulation\n\n\t// Restart restarts the recording from the specified position, or from the\n\t// last checkpoint if pos == \"\".\n\t// If pos starts with 'c' it's a checkpoint ID, otherwise it's an event\n\t// number.\n\t// Returns the new current thread after the restart has completed.\n\tRestart(cctx *ContinueOnceContext, pos string) (Thread, error)\n}\n\n// Direction is the direction of execution for the target process.\ntype Direction int8\n\nconst (\n\t// Forward direction executes the target normally.\n\tForward Direction = 0\n\t// Backward direction executes the target in reverse.\n\tBackward Direction = 1\n)\n\n// Checkpoint is a checkpoint\ntype Checkpoint struct {\n\tID    int\n\tWhen  string\n\tWhere string\n}\n\n// ContinueOnceContext is an object passed to ContinueOnce that the backend\n// can use to communicate with the target layer.\ntype ContinueOnceContext struct {\n\tResumeChan chan<- struct{}\n\tStopMu     sync.Mutex\n\t// manualStopRequested is set if all the threads in the process were\n\t// signalled to stop as a result of a Halt API call. Used to disambiguate\n\t// why a thread is found to have stopped.\n\tmanualStopRequested bool\n}\n\n// CheckAndClearManualStopRequest will check for a manual\n// stop and then clear that state.\nfunc (cctx *ContinueOnceContext) CheckAndClearManualStopRequest() bool {\n\tcctx.StopMu.Lock()\n\tdefer cctx.StopMu.Unlock()\n\tmsr := cctx.manualStopRequested\n\tcctx.manualStopRequested = false\n\treturn msr\n}\n\nfunc (cctx *ContinueOnceContext) GetManualStopRequested() bool {\n\tcctx.StopMu.Lock()\n\tdefer cctx.StopMu.Unlock()\n\treturn cctx.manualStopRequested\n}\n\n// WaitFor is passed to native.Attach and gdbserver.LLDBAttach to wait for a\n// process to start before attaching.\ntype WaitFor struct {\n\tName               string\n\tInterval, Duration time.Duration\n}\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/bpf/dummy.go",
    "content": "//go:build dummy\n\npackage ebpf\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/bpf/include/dummy.go",
    "content": "//go:build dummy\n\npackage ebpf\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/bpf/include/function_vals.bpf.h",
    "content": "// function_parameter stores information about a single parameter to a function.\ntypedef struct function_parameter {\n    // Type of the parameter as defined by the reflect.Kind enum.\n    unsigned int kind;\n    // Size of the variable in bytes.\n    unsigned int size;\n\n    // Offset from stack pointer. This should only be set from the Go side.\n    int offset;\n\n    // If true, the parameter is passed in a register.\n    bool in_reg;\n    // The number of register pieces the parameter is passed in.\n    int n_pieces;\n    // If in_reg is true, this represents the registers that the parameter is passed in.\n    // This is an array because the number of registers may vary and the parameter may be\n    // passed in multiple registers.\n    int reg_nums[6];\n\n    // The following are filled in by the eBPF program.\n    size_t daddr;   // Data address.\n    char val[0x30];       // Value of the parameter.\n    char deref_val[0x30]; // Dereference value of the parameter.\n} function_parameter_t;\n\n// function_parameter_list holds info about the function parameters and\n// stores information on up to 6 parameters.\ntypedef struct function_parameter_list {\n    unsigned int goid_offset; // Offset of the `goid` struct member.\n    long long g_addr_offset;  // Offset of the Goroutine struct from the TLS segment.\n    int goroutine_id;\n\n    unsigned long long int fn_addr;\n    bool is_ret;\n\n    unsigned int n_parameters;          // number of parameters.\n    function_parameter_t params[6];     // list of parameters.\n\n    unsigned int n_ret_parameters;      // number of return parameters.\n    function_parameter_t ret_params[6]; // list of return parameters.\n} function_parameter_list_t;\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/bpf/include/trace.bpf.h",
    "content": "#include \"vmlinux.h\"\n#include \"function_vals.bpf.h\"\n#include <bpf/bpf_core_read.h>\n#include <bpf/bpf_helpers.h>\n#include <bpf/bpf_tracing.h>\n\n#define BPF_MAX_VAR_SIZ\t(1 << 29)\n\n// Ring buffer to handle communication of variable values back to userspace.\nstruct {\n    __uint(type, BPF_MAP_TYPE_RINGBUF);\n    __uint(max_entries, BPF_MAX_VAR_SIZ);\n} events SEC(\".maps\");\n\n// Map which uses instruction address as key and function parameter info as the value.\nstruct {\n    __uint(max_entries, 42);\n    __uint(type, BPF_MAP_TYPE_HASH);\n    __type(key, u64);\n    __type(value, function_parameter_list_t);\n} arg_map SEC(\".maps\");\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/bpf/include/vmlinux.h",
    "content": "#ifndef __VMLINUX_H__\n#define __VMLINUX_H__\n\n#ifndef BPF_NO_PRESERVE_ACCESS_INDEX\n#pragma clang attribute push (__attribute__((preserve_access_index)), apply_to = record)\n#endif\n\ntypedef unsigned char __u8;\n\ntypedef short int __s16;\n\ntypedef short unsigned int __u16;\n\ntypedef int __s32;\n\ntypedef unsigned int __u32;\n\ntypedef long long int __s64;\n\ntypedef long long unsigned int __u64;\n\ntypedef __u8 u8;\n\ntypedef __s16 s16;\n\ntypedef __u16 u16;\n\ntypedef __s32 s32;\n\ntypedef __u32 u32;\n\ntypedef __s64 s64;\n\ntypedef __u64 u64;\n\nenum {\n\tfalse = 0,\n\ttrue = 1,\n};\n\ntypedef long int __kernel_long_t;\n\ntypedef long unsigned int __kernel_ulong_t;\n\ntypedef int __kernel_pid_t;\n\ntypedef unsigned int __kernel_uid32_t;\n\ntypedef unsigned int __kernel_gid32_t;\n\ntypedef __kernel_ulong_t __kernel_size_t;\n\ntypedef __kernel_long_t __kernel_ssize_t;\n\ntypedef long long int __kernel_loff_t;\n\ntypedef long long int __kernel_time64_t;\n\ntypedef __kernel_long_t __kernel_clock_t;\n\ntypedef int __kernel_timer_t;\n\ntypedef int __kernel_clockid_t;\n\ntypedef unsigned int __poll_t;\n\ntypedef u32 __kernel_dev_t;\n\ntypedef __kernel_dev_t dev_t;\n\ntypedef short unsigned int umode_t;\n\ntypedef __kernel_pid_t pid_t;\n\ntypedef __kernel_clockid_t clockid_t;\n\ntypedef _Bool bool;\n\ntypedef __kernel_uid32_t uid_t;\n\ntypedef __kernel_gid32_t gid_t;\n\ntypedef __kernel_loff_t loff_t;\n\ntypedef __kernel_size_t size_t;\n\ntypedef __kernel_ssize_t ssize_t;\n\ntypedef s32 int32_t;\n\ntypedef u32 uint32_t;\n\ntypedef u64 sector_t;\n\ntypedef u64 blkcnt_t;\n\ntypedef u64 dma_addr_t;\n\ntypedef unsigned int gfp_t;\n\ntypedef unsigned int fmode_t;\n\ntypedef u64 phys_addr_t;\n\ntypedef struct {\n\tint counter;\n} atomic_t;\n\ntypedef struct {\n\ts64 counter;\n} atomic64_t;\n\nstruct list_head {\n\tstruct list_head *next;\n\tstruct list_head *prev;\n};\n\nstruct hlist_node;\n\nstruct hlist_head {\n\tstruct hlist_node *first;\n};\n\nstruct hlist_node {\n\tstruct hlist_node *next;\n\tstruct hlist_node **pprev;\n};\n\nstruct callback_head {\n\tstruct callback_head *next;\n\tvoid (*func)(struct callback_head *);\n};\n\nstruct lock_class_key {};\n\nstruct fs_context;\n\nstruct fs_parameter_spec;\n\nstruct dentry;\n\nstruct super_block;\n\nstruct module;\n\nstruct file_system_type {\n\tconst char *name;\n\tint fs_flags;\n\tint (*init_fs_context)(struct fs_context *);\n\tconst struct fs_parameter_spec *parameters;\n\tstruct dentry * (*mount)(struct file_system_type *, int, const char *, void *);\n\tvoid (*kill_sb)(struct super_block *);\n\tstruct module *owner;\n\tstruct file_system_type *next;\n\tstruct hlist_head fs_supers;\n\tstruct lock_class_key s_lock_key;\n\tstruct lock_class_key s_umount_key;\n\tstruct lock_class_key s_vfs_rename_key;\n\tstruct lock_class_key s_writers_key[3];\n\tstruct lock_class_key i_lock_key;\n\tstruct lock_class_key i_mutex_key;\n\tstruct lock_class_key i_mutex_dir_key;\n};\n\nstruct qspinlock {\n\tunion {\n\t\tatomic_t val;\n\t\tstruct {\n\t\t\tu8 locked;\n\t\t\tu8 pending;\n\t\t};\n\t\tstruct {\n\t\t\tu16 locked_pending;\n\t\t\tu16 tail;\n\t\t};\n\t};\n};\n\ntypedef struct qspinlock arch_spinlock_t;\n\nstruct qrwlock {\n\tunion {\n\t\tatomic_t cnts;\n\t\tstruct {\n\t\t\tu8 wlocked;\n\t\t\tu8 __lstate[3];\n\t\t};\n\t};\n\tarch_spinlock_t wait_lock;\n};\n\ntypedef struct qrwlock arch_rwlock_t;\n\nstruct raw_spinlock {\n\tarch_spinlock_t raw_lock;\n};\n\ntypedef struct raw_spinlock raw_spinlock_t;\n\nstruct spinlock {\n\tunion {\n\t\tstruct raw_spinlock rlock;\n\t};\n};\n\ntypedef struct spinlock spinlock_t;\n\ntypedef struct {\n\tarch_rwlock_t raw_lock;\n} rwlock_t;\n\nstruct ratelimit_state {\n\traw_spinlock_t lock;\n\tint interval;\n\tint burst;\n\tint printed;\n\tint missed;\n\tlong unsigned int begin;\n\tlong unsigned int flags;\n};\n\ntypedef void *fl_owner_t;\n\nstruct file;\n\nstruct kiocb;\n\nstruct iov_iter;\n\nstruct dir_context;\n\nstruct poll_table_struct;\n\nstruct vm_area_struct;\n\nstruct inode;\n\nstruct file_lock;\n\nstruct page;\n\nstruct pipe_inode_info;\n\nstruct seq_file;\n\nstruct file_operations {\n\tstruct module *owner;\n\tloff_t (*llseek)(struct file *, loff_t, int);\n\tssize_t (*read)(struct file *, char *, size_t, loff_t *);\n\tssize_t (*write)(struct file *, const char *, size_t, loff_t *);\n\tssize_t (*read_iter)(struct kiocb *, struct iov_iter *);\n\tssize_t (*write_iter)(struct kiocb *, struct iov_iter *);\n\tint (*iopoll)(struct kiocb *, bool);\n\tint (*iterate)(struct file *, struct dir_context *);\n\tint (*iterate_shared)(struct file *, struct dir_context *);\n\t__poll_t (*poll)(struct file *, struct poll_table_struct *);\n\tlong int (*unlocked_ioctl)(struct file *, unsigned int, long unsigned int);\n\tlong int (*compat_ioctl)(struct file *, unsigned int, long unsigned int);\n\tint (*mmap)(struct file *, struct vm_area_struct *);\n\tlong unsigned int mmap_supported_flags;\n\tint (*open)(struct inode *, struct file *);\n\tint (*flush)(struct file *, fl_owner_t);\n\tint (*release)(struct inode *, struct file *);\n\tint (*fsync)(struct file *, loff_t, loff_t, int);\n\tint (*fasync)(int, struct file *, int);\n\tint (*lock)(struct file *, int, struct file_lock *);\n\tssize_t (*sendpage)(struct file *, struct page *, int, size_t, loff_t *, int);\n\tlong unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);\n\tint (*check_flags)(int);\n\tint (*flock)(struct file *, int, struct file_lock *);\n\tssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);\n\tssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);\n\tint (*setlease)(struct file *, long int, struct file_lock **, void **);\n\tlong int (*fallocate)(struct file *, int, loff_t, loff_t);\n\tvoid (*show_fdinfo)(struct seq_file *, struct file *);\n\tssize_t (*copy_file_range)(struct file *, loff_t, struct file *, loff_t, size_t, unsigned int);\n\tloff_t (*remap_file_range)(struct file *, loff_t, struct file *, loff_t, loff_t, unsigned int);\n\tint (*fadvise)(struct file *, loff_t, loff_t, int);\n};\n\ntypedef __s64 time64_t;\n\nstruct __kernel_timespec {\n\t__kernel_time64_t tv_sec;\n\tlong long int tv_nsec;\n};\n\nstruct timespec64 {\n\ttime64_t tv_sec;\n\tlong int tv_nsec;\n};\n\nenum timespec_type {\n\tTT_NONE = 0,\n\tTT_NATIVE = 1,\n\tTT_COMPAT = 2,\n};\n\ntypedef s32 old_time32_t;\n\nstruct old_timespec32 {\n\told_time32_t tv_sec;\n\ts32 tv_nsec;\n};\n\nstruct pollfd;\n\nstruct restart_block {\n\tlong int (*fn)(struct restart_block *);\n\tunion {\n\t\tstruct {\n\t\t\tu32 *uaddr;\n\t\t\tu32 val;\n\t\t\tu32 flags;\n\t\t\tu32 bitset;\n\t\t\tu64 time;\n\t\t\tu32 *uaddr2;\n\t\t} futex;\n\t\tstruct {\n\t\t\tclockid_t clockid;\n\t\t\tenum timespec_type type;\n\t\t\tunion {\n\t\t\t\tstruct __kernel_timespec *rmtp;\n\t\t\t\tstruct old_timespec32 *compat_rmtp;\n\t\t\t};\n\t\t\tu64 expires;\n\t\t} nanosleep;\n\t\tstruct {\n\t\t\tstruct pollfd *ufds;\n\t\t\tint nfds;\n\t\t\tint has_timeout;\n\t\t\tlong unsigned int tv_sec;\n\t\t\tlong unsigned int tv_nsec;\n\t\t} poll;\n\t};\n};\n\nstruct thread_info {\n\tlong unsigned int flags;\n\tlong unsigned int syscall_work;\n\tu32 status;\n};\n\nstruct refcount_struct {\n\tatomic_t refs;\n};\n\ntypedef struct refcount_struct refcount_t;\n\nstruct llist_node {\n\tstruct llist_node *next;\n};\n\nstruct __call_single_node {\n\tstruct llist_node llist;\n\tunion {\n\t\tunsigned int u_flags;\n\t\tatomic_t a_flags;\n\t};\n\tu16 src;\n\tu16 dst;\n};\n\nstruct load_weight {\n\tlong unsigned int weight;\n\tu32 inv_weight;\n};\n\nstruct rb_node {\n\tlong unsigned int __rb_parent_color;\n\tstruct rb_node *rb_right;\n\tstruct rb_node *rb_left;\n};\n\nstruct sched_statistics {\n\tu64 wait_start;\n\tu64 wait_max;\n\tu64 wait_count;\n\tu64 wait_sum;\n\tu64 iowait_count;\n\tu64 iowait_sum;\n\tu64 sleep_start;\n\tu64 sleep_max;\n\ts64 sum_sleep_runtime;\n\tu64 block_start;\n\tu64 block_max;\n\tu64 exec_max;\n\tu64 slice_max;\n\tu64 nr_migrations_cold;\n\tu64 nr_failed_migrations_affine;\n\tu64 nr_failed_migrations_running;\n\tu64 nr_failed_migrations_hot;\n\tu64 nr_forced_migrations;\n\tu64 nr_wakeups;\n\tu64 nr_wakeups_sync;\n\tu64 nr_wakeups_migrate;\n\tu64 nr_wakeups_local;\n\tu64 nr_wakeups_remote;\n\tu64 nr_wakeups_affine;\n\tu64 nr_wakeups_affine_attempts;\n\tu64 nr_wakeups_passive;\n\tu64 nr_wakeups_idle;\n};\n\nstruct util_est {\n\tunsigned int enqueued;\n\tunsigned int ewma;\n};\n\nstruct sched_avg {\n\tu64 last_update_time;\n\tu64 load_sum;\n\tu64 runnable_sum;\n\tu32 util_sum;\n\tu32 period_contrib;\n\tlong unsigned int load_avg;\n\tlong unsigned int runnable_avg;\n\tlong unsigned int util_avg;\n\tstruct util_est util_est;\n};\n\nstruct cfs_rq;\n\nstruct sched_entity {\n\tstruct load_weight load;\n\tstruct rb_node run_node;\n\tstruct list_head group_node;\n\tunsigned int on_rq;\n\tu64 exec_start;\n\tu64 sum_exec_runtime;\n\tu64 vruntime;\n\tu64 prev_sum_exec_runtime;\n\tu64 nr_migrations;\n\tstruct sched_statistics statistics;\n\tint depth;\n\tstruct sched_entity *parent;\n\tstruct cfs_rq *cfs_rq;\n\tstruct cfs_rq *my_q;\n\tlong unsigned int runnable_weight;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct sched_avg avg;\n};\n\nstruct sched_rt_entity {\n\tstruct list_head run_list;\n\tlong unsigned int timeout;\n\tlong unsigned int watchdog_stamp;\n\tunsigned int time_slice;\n\tshort unsigned int on_rq;\n\tshort unsigned int on_list;\n\tstruct sched_rt_entity *back;\n};\n\ntypedef s64 ktime_t;\n\nstruct timerqueue_node {\n\tstruct rb_node node;\n\tktime_t expires;\n};\n\nenum hrtimer_restart {\n\tHRTIMER_NORESTART = 0,\n\tHRTIMER_RESTART = 1,\n};\n\nstruct hrtimer_clock_base;\n\nstruct hrtimer {\n\tstruct timerqueue_node node;\n\tktime_t _softexpires;\n\tenum hrtimer_restart (*function)(struct hrtimer *);\n\tstruct hrtimer_clock_base *base;\n\tu8 state;\n\tu8 is_rel;\n\tu8 is_soft;\n\tu8 is_hard;\n};\n\nstruct sched_dl_entity {\n\tstruct rb_node rb_node;\n\tu64 dl_runtime;\n\tu64 dl_deadline;\n\tu64 dl_period;\n\tu64 dl_bw;\n\tu64 dl_density;\n\ts64 runtime;\n\tu64 deadline;\n\tunsigned int flags;\n\tunsigned int dl_throttled: 1;\n\tunsigned int dl_yielded: 1;\n\tunsigned int dl_non_contending: 1;\n\tunsigned int dl_overrun: 1;\n\tstruct hrtimer dl_timer;\n\tstruct hrtimer inactive_timer;\n\tstruct sched_dl_entity *pi_se;\n};\n\nstruct cpumask {\n\tlong unsigned int bits[128];\n};\n\ntypedef struct cpumask cpumask_t;\n\nunion rcu_special {\n\tstruct {\n\t\tu8 blocked;\n\t\tu8 need_qs;\n\t\tu8 exp_hint;\n\t\tu8 need_mb;\n\t} b;\n\tu32 s;\n};\n\nstruct sched_info {\n\tlong unsigned int pcount;\n\tlong long unsigned int run_delay;\n\tlong long unsigned int last_arrival;\n\tlong long unsigned int last_queued;\n};\n\nstruct plist_node {\n\tint prio;\n\tstruct list_head prio_list;\n\tstruct list_head node_list;\n};\n\nstruct vmacache {\n\tu64 seqnum;\n\tstruct vm_area_struct *vmas[4];\n};\n\nstruct task_rss_stat {\n\tint events;\n\tint count[4];\n};\n\nstruct prev_cputime {\n\tu64 utime;\n\tu64 stime;\n\traw_spinlock_t lock;\n};\n\nstruct seqcount {\n\tunsigned int sequence;\n};\n\ntypedef struct seqcount seqcount_t;\n\nenum vtime_state {\n\tVTIME_INACTIVE = 0,\n\tVTIME_IDLE = 1,\n\tVTIME_SYS = 2,\n\tVTIME_USER = 3,\n\tVTIME_GUEST = 4,\n};\n\nstruct vtime {\n\tseqcount_t seqcount;\n\tlong long unsigned int starttime;\n\tenum vtime_state state;\n\tunsigned int cpu;\n\tu64 utime;\n\tu64 stime;\n\tu64 gtime;\n};\n\nstruct rb_root {\n\tstruct rb_node *rb_node;\n};\n\nstruct rb_root_cached {\n\tstruct rb_root rb_root;\n\tstruct rb_node *rb_leftmost;\n};\n\nstruct timerqueue_head {\n\tstruct rb_root_cached rb_root;\n};\n\nstruct posix_cputimer_base {\n\tu64 nextevt;\n\tstruct timerqueue_head tqhead;\n};\n\nstruct posix_cputimers {\n\tstruct posix_cputimer_base bases[3];\n\tunsigned int timers_active;\n\tunsigned int expiry_active;\n};\n\nstruct posix_cputimers_work {\n\tstruct callback_head work;\n\tunsigned int scheduled;\n};\n\nstruct sem_undo_list;\n\nstruct sysv_sem {\n\tstruct sem_undo_list *undo_list;\n};\n\nstruct sysv_shm {\n\tstruct list_head shm_clist;\n};\n\ntypedef struct {\n\tlong unsigned int sig[1];\n} sigset_t;\n\nstruct sigpending {\n\tstruct list_head list;\n\tsigset_t signal;\n};\n\ntypedef struct {\n\tuid_t val;\n} kuid_t;\n\nstruct seccomp_filter;\n\nstruct seccomp {\n\tint mode;\n\tatomic_t filter_count;\n\tstruct seccomp_filter *filter;\n};\n\nstruct syscall_user_dispatch {\n\tchar *selector;\n\tlong unsigned int offset;\n\tlong unsigned int len;\n\tbool on_dispatch;\n};\n\nstruct wake_q_node {\n\tstruct wake_q_node *next;\n};\n\nstruct task_io_accounting {\n\tu64 rchar;\n\tu64 wchar;\n\tu64 syscr;\n\tu64 syscw;\n\tu64 read_bytes;\n\tu64 write_bytes;\n\tu64 cancelled_write_bytes;\n};\n\ntypedef struct {\n\tlong unsigned int bits[16];\n} nodemask_t;\n\nstruct seqcount_spinlock {\n\tseqcount_t seqcount;\n};\n\ntypedef struct seqcount_spinlock seqcount_spinlock_t;\n\ntypedef atomic64_t atomic_long_t;\n\nstruct optimistic_spin_queue {\n\tatomic_t tail;\n};\n\nstruct mutex {\n\tatomic_long_t owner;\n\tspinlock_t wait_lock;\n\tstruct optimistic_spin_queue osq;\n\tstruct list_head wait_list;\n};\n\nstruct arch_tlbflush_unmap_batch {\n\tstruct cpumask cpumask;\n};\n\nstruct tlbflush_unmap_batch {\n\tstruct arch_tlbflush_unmap_batch arch;\n\tbool flush_required;\n\tbool writable;\n};\n\nstruct page_frag {\n\tstruct page *page;\n\t__u32 offset;\n\t__u32 size;\n};\n\nstruct latency_record {\n\tlong unsigned int backtrace[12];\n\tunsigned int count;\n\tlong unsigned int time;\n\tlong unsigned int max;\n};\n\nstruct kmap_ctrl {};\n\nstruct llist_head {\n\tstruct llist_node *first;\n};\n\nstruct desc_struct {\n\tu16 limit0;\n\tu16 base0;\n\tu16 base1: 8;\n\tu16 type: 4;\n\tu16 s: 1;\n\tu16 dpl: 2;\n\tu16 p: 1;\n\tu16 limit1: 4;\n\tu16 avl: 1;\n\tu16 l: 1;\n\tu16 d: 1;\n\tu16 g: 1;\n\tu16 base2: 8;\n};\n\nstruct fregs_state {\n\tu32 cwd;\n\tu32 swd;\n\tu32 twd;\n\tu32 fip;\n\tu32 fcs;\n\tu32 foo;\n\tu32 fos;\n\tu32 st_space[20];\n\tu32 status;\n};\n\nstruct fxregs_state {\n\tu16 cwd;\n\tu16 swd;\n\tu16 twd;\n\tu16 fop;\n\tunion {\n\t\tstruct {\n\t\t\tu64 rip;\n\t\t\tu64 rdp;\n\t\t};\n\t\tstruct {\n\t\t\tu32 fip;\n\t\t\tu32 fcs;\n\t\t\tu32 foo;\n\t\t\tu32 fos;\n\t\t};\n\t};\n\tu32 mxcsr;\n\tu32 mxcsr_mask;\n\tu32 st_space[32];\n\tu32 xmm_space[64];\n\tu32 padding[12];\n\tunion {\n\t\tu32 padding1[12];\n\t\tu32 sw_reserved[12];\n\t};\n};\n\nstruct math_emu_info;\n\nstruct swregs_state {\n\tu32 cwd;\n\tu32 swd;\n\tu32 twd;\n\tu32 fip;\n\tu32 fcs;\n\tu32 foo;\n\tu32 fos;\n\tu32 st_space[20];\n\tu8 ftop;\n\tu8 changed;\n\tu8 lookahead;\n\tu8 no_update;\n\tu8 rm;\n\tu8 alimit;\n\tstruct math_emu_info *info;\n\tu32 entry_eip;\n};\n\nstruct xstate_header {\n\tu64 xfeatures;\n\tu64 xcomp_bv;\n\tu64 reserved[6];\n};\n\nstruct xregs_state {\n\tstruct fxregs_state i387;\n\tstruct xstate_header header;\n\tu8 extended_state_area[0];\n};\n\nunion fpregs_state {\n\tstruct fregs_state fsave;\n\tstruct fxregs_state fxsave;\n\tstruct swregs_state soft;\n\tstruct xregs_state xsave;\n\tu8 __padding[4096];\n};\n\nstruct fpu {\n\tunsigned int last_cpu;\n\tlong unsigned int avx512_timestamp;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tunion fpregs_state state;\n};\n\nstruct perf_event;\n\nstruct io_bitmap;\n\nstruct thread_struct {\n\tstruct desc_struct tls_array[3];\n\tlong unsigned int sp;\n\tshort unsigned int es;\n\tshort unsigned int ds;\n\tshort unsigned int fsindex;\n\tshort unsigned int gsindex;\n\tlong unsigned int fsbase;\n\tlong unsigned int gsbase;\n\tstruct perf_event *ptrace_bps[4];\n\tlong unsigned int virtual_dr6;\n\tlong unsigned int ptrace_dr7;\n\tlong unsigned int cr2;\n\tlong unsigned int trap_nr;\n\tlong unsigned int error_code;\n\tstruct io_bitmap *io_bitmap;\n\tlong unsigned int iopl_emul;\n\tunsigned int sig_on_uaccess_err: 1;\n\tlong: 63;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct fpu fpu;\n};\n\nstruct sched_class;\n\nstruct task_group;\n\nstruct mm_struct;\n\nstruct pid;\n\nstruct completion;\n\nstruct cred;\n\nstruct key;\n\nstruct nameidata;\n\nstruct fs_struct;\n\nstruct files_struct;\n\nstruct io_uring_task;\n\nstruct nsproxy;\n\nstruct signal_struct;\n\nstruct sighand_struct;\n\nstruct audit_context;\n\nstruct rt_mutex_waiter;\n\nstruct bio_list;\n\nstruct blk_plug;\n\nstruct reclaim_state;\n\nstruct backing_dev_info;\n\nstruct io_context;\n\nstruct capture_control;\n\nstruct kernel_siginfo;\n\ntypedef struct kernel_siginfo kernel_siginfo_t;\n\nstruct css_set;\n\nstruct robust_list_head;\n\nstruct compat_robust_list_head;\n\nstruct futex_pi_state;\n\nstruct perf_event_context;\n\nstruct mempolicy;\n\nstruct numa_group;\n\nstruct rseq;\n\nstruct task_delay_info;\n\nstruct ftrace_ret_stack;\n\nstruct mem_cgroup;\n\nstruct request_queue;\n\nstruct uprobe_task;\n\nstruct vm_struct;\n\nstruct task_struct {\n\tstruct thread_info thread_info;\n\tvolatile long int state;\n\tvoid *stack;\n\trefcount_t usage;\n\tunsigned int flags;\n\tunsigned int ptrace;\n\tint on_cpu;\n\tstruct __call_single_node wake_entry;\n\tunsigned int cpu;\n\tunsigned int wakee_flips;\n\tlong unsigned int wakee_flip_decay_ts;\n\tstruct task_struct *last_wakee;\n\tint recent_used_cpu;\n\tint wake_cpu;\n\tint on_rq;\n\tint prio;\n\tint static_prio;\n\tint normal_prio;\n\tunsigned int rt_priority;\n\tconst struct sched_class *sched_class;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct sched_entity se;\n\tstruct sched_rt_entity rt;\n\tstruct task_group *sched_task_group;\n\tstruct sched_dl_entity dl;\n\tstruct hlist_head preempt_notifiers;\n\tunsigned int btrace_seq;\n\tunsigned int policy;\n\tint nr_cpus_allowed;\n\tconst cpumask_t *cpus_ptr;\n\tcpumask_t cpus_mask;\n\tvoid *migration_pending;\n\tshort unsigned int migration_disabled;\n\tshort unsigned int migration_flags;\n\tlong unsigned int rcu_tasks_nvcsw;\n\tu8 rcu_tasks_holdout;\n\tu8 rcu_tasks_idx;\n\tint rcu_tasks_idle_cpu;\n\tstruct list_head rcu_tasks_holdout_list;\n\tint trc_reader_nesting;\n\tint trc_ipi_to_cpu;\n\tunion rcu_special trc_reader_special;\n\tbool trc_reader_checked;\n\tstruct list_head trc_holdout_list;\n\tstruct sched_info sched_info;\n\tstruct list_head tasks;\n\tstruct plist_node pushable_tasks;\n\tstruct rb_node pushable_dl_tasks;\n\tstruct mm_struct *mm;\n\tstruct mm_struct *active_mm;\n\tstruct vmacache vmacache;\n\tstruct task_rss_stat rss_stat;\n\tint exit_state;\n\tint exit_code;\n\tint exit_signal;\n\tint pdeath_signal;\n\tlong unsigned int jobctl;\n\tunsigned int personality;\n\tunsigned int sched_reset_on_fork: 1;\n\tunsigned int sched_contributes_to_load: 1;\n\tunsigned int sched_migrated: 1;\n\tunsigned int sched_psi_wake_requeue: 1;\n\tint: 28;\n\tunsigned int sched_remote_wakeup: 1;\n\tunsigned int in_execve: 1;\n\tunsigned int in_iowait: 1;\n\tunsigned int restore_sigmask: 1;\n\tunsigned int in_user_fault: 1;\n\tunsigned int no_cgroup_migration: 1;\n\tunsigned int frozen: 1;\n\tunsigned int use_memdelay: 1;\n\tunsigned int in_memstall: 1;\n\tlong unsigned int atomic_flags;\n\tstruct restart_block restart_block;\n\tpid_t pid;\n\tpid_t tgid;\n\tlong unsigned int stack_canary;\n\tstruct task_struct *real_parent;\n\tstruct task_struct *parent;\n\tstruct list_head children;\n\tstruct list_head sibling;\n\tstruct task_struct *group_leader;\n\tstruct list_head ptraced;\n\tstruct list_head ptrace_entry;\n\tstruct pid *thread_pid;\n\tstruct hlist_node pid_links[4];\n\tstruct list_head thread_group;\n\tstruct list_head thread_node;\n\tstruct completion *vfork_done;\n\tint *set_child_tid;\n\tint *clear_child_tid;\n\tu64 utime;\n\tu64 stime;\n\tu64 gtime;\n\tstruct prev_cputime prev_cputime;\n\tstruct vtime vtime;\n\tatomic_t tick_dep_mask;\n\tlong unsigned int nvcsw;\n\tlong unsigned int nivcsw;\n\tu64 start_time;\n\tu64 start_boottime;\n\tlong unsigned int min_flt;\n\tlong unsigned int maj_flt;\n\tstruct posix_cputimers posix_cputimers;\n\tstruct posix_cputimers_work posix_cputimers_work;\n\tconst struct cred *ptracer_cred;\n\tconst struct cred *real_cred;\n\tconst struct cred *cred;\n\tstruct key *cached_requested_key;\n\tchar comm[16];\n\tstruct nameidata *nameidata;\n\tstruct sysv_sem sysvsem;\n\tstruct sysv_shm sysvshm;\n\tstruct fs_struct *fs;\n\tstruct files_struct *files;\n\tstruct io_uring_task *io_uring;\n\tstruct nsproxy *nsproxy;\n\tstruct signal_struct *signal;\n\tstruct sighand_struct *sighand;\n\tsigset_t blocked;\n\tsigset_t real_blocked;\n\tsigset_t saved_sigmask;\n\tstruct sigpending pending;\n\tlong unsigned int sas_ss_sp;\n\tsize_t sas_ss_size;\n\tunsigned int sas_ss_flags;\n\tstruct callback_head *task_works;\n\tstruct audit_context *audit_context;\n\tkuid_t loginuid;\n\tunsigned int sessionid;\n\tstruct seccomp seccomp;\n\tstruct syscall_user_dispatch syscall_dispatch;\n\tu64 parent_exec_id;\n\tu64 self_exec_id;\n\tspinlock_t alloc_lock;\n\traw_spinlock_t pi_lock;\n\tstruct wake_q_node wake_q;\n\tstruct rb_root_cached pi_waiters;\n\tstruct task_struct *pi_top_task;\n\tstruct rt_mutex_waiter *pi_blocked_on;\n\tvoid *journal_info;\n\tstruct bio_list *bio_list;\n\tstruct blk_plug *plug;\n\tstruct reclaim_state *reclaim_state;\n\tstruct backing_dev_info *backing_dev_info;\n\tstruct io_context *io_context;\n\tstruct capture_control *capture_control;\n\tlong unsigned int ptrace_message;\n\tkernel_siginfo_t *last_siginfo;\n\tstruct task_io_accounting ioac;\n\tunsigned int psi_flags;\n\tu64 acct_rss_mem1;\n\tu64 acct_vm_mem1;\n\tu64 acct_timexpd;\n\tnodemask_t mems_allowed;\n\tseqcount_spinlock_t mems_allowed_seq;\n\tint cpuset_mem_spread_rotor;\n\tint cpuset_slab_spread_rotor;\n\tstruct css_set *cgroups;\n\tstruct list_head cg_list;\n\tu32 closid;\n\tu32 rmid;\n\tstruct robust_list_head *robust_list;\n\tstruct compat_robust_list_head *compat_robust_list;\n\tstruct list_head pi_state_list;\n\tstruct futex_pi_state *pi_state_cache;\n\tstruct mutex futex_exit_mutex;\n\tunsigned int futex_state;\n\tstruct perf_event_context *perf_event_ctxp[2];\n\tstruct mutex perf_event_mutex;\n\tstruct list_head perf_event_list;\n\tstruct mempolicy *mempolicy;\n\tshort int il_prev;\n\tshort int pref_node_fork;\n\tint numa_scan_seq;\n\tunsigned int numa_scan_period;\n\tunsigned int numa_scan_period_max;\n\tint numa_preferred_nid;\n\tlong unsigned int numa_migrate_retry;\n\tu64 node_stamp;\n\tu64 last_task_numa_placement;\n\tu64 last_sum_exec_runtime;\n\tstruct callback_head numa_work;\n\tstruct numa_group *numa_group;\n\tlong unsigned int *numa_faults;\n\tlong unsigned int total_numa_faults;\n\tlong unsigned int numa_faults_locality[3];\n\tlong unsigned int numa_pages_migrated;\n\tstruct rseq *rseq;\n\tu32 rseq_sig;\n\tlong unsigned int rseq_event_mask;\n\tstruct tlbflush_unmap_batch tlb_ubc;\n\tunion {\n\t\trefcount_t rcu_users;\n\t\tstruct callback_head rcu;\n\t};\n\tstruct pipe_inode_info *splice_pipe;\n\tstruct page_frag task_frag;\n\tstruct task_delay_info *delays;\n\tint nr_dirtied;\n\tint nr_dirtied_pause;\n\tlong unsigned int dirty_paused_when;\n\tint latency_record_count;\n\tstruct latency_record latency_record[32];\n\tu64 timer_slack_ns;\n\tu64 default_timer_slack_ns;\n\tint curr_ret_stack;\n\tint curr_ret_depth;\n\tstruct ftrace_ret_stack *ret_stack;\n\tlong long unsigned int ftrace_timestamp;\n\tatomic_t trace_overrun;\n\tatomic_t tracing_graph_pause;\n\tlong unsigned int trace;\n\tlong unsigned int trace_recursion;\n\tstruct mem_cgroup *memcg_in_oom;\n\tgfp_t memcg_oom_gfp_mask;\n\tint memcg_oom_order;\n\tunsigned int memcg_nr_pages_over_high;\n\tstruct mem_cgroup *active_memcg;\n\tstruct request_queue *throttle_queue;\n\tstruct uprobe_task *utask;\n\tunsigned int sequential_io;\n\tunsigned int sequential_io_avg;\n\tstruct kmap_ctrl kmap_ctrl;\n\tint pagefault_disabled;\n\tstruct task_struct *oom_reaper_list;\n\tstruct vm_struct *stack_vm_area;\n\trefcount_t stack_refcount;\n\tint patch_state;\n\tvoid *security;\n\tvoid *mce_vaddr;\n\t__u64 mce_kflags;\n\tu64 mce_addr;\n\t__u64 mce_ripv: 1;\n\t__u64 mce_whole_page: 1;\n\t__u64 __mce_reserved: 62;\n\tstruct callback_head mce_kill_me;\n\tstruct llist_head kretprobe_instances;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct thread_struct thread;\n};\n\nstruct screen_info {\n\t__u8 orig_x;\n\t__u8 orig_y;\n\t__u16 ext_mem_k;\n\t__u16 orig_video_page;\n\t__u8 orig_video_mode;\n\t__u8 orig_video_cols;\n\t__u8 flags;\n\t__u8 unused2;\n\t__u16 orig_video_ega_bx;\n\t__u16 unused3;\n\t__u8 orig_video_lines;\n\t__u8 orig_video_isVGA;\n\t__u16 orig_video_points;\n\t__u16 lfb_width;\n\t__u16 lfb_height;\n\t__u16 lfb_depth;\n\t__u32 lfb_base;\n\t__u32 lfb_size;\n\t__u16 cl_magic;\n\t__u16 cl_offset;\n\t__u16 lfb_linelength;\n\t__u8 red_size;\n\t__u8 red_pos;\n\t__u8 green_size;\n\t__u8 green_pos;\n\t__u8 blue_size;\n\t__u8 blue_pos;\n\t__u8 rsvd_size;\n\t__u8 rsvd_pos;\n\t__u16 vesapm_seg;\n\t__u16 vesapm_off;\n\t__u16 pages;\n\t__u16 vesa_attributes;\n\t__u32 capabilities;\n\t__u32 ext_lfb_base;\n\t__u8 _reserved[2];\n} __attribute__((packed));\n\nstruct apm_bios_info {\n\t__u16 version;\n\t__u16 cseg;\n\t__u32 offset;\n\t__u16 cseg_16;\n\t__u16 dseg;\n\t__u16 flags;\n\t__u16 cseg_len;\n\t__u16 cseg_16_len;\n\t__u16 dseg_len;\n};\n\nstruct edd_device_params {\n\t__u16 length;\n\t__u16 info_flags;\n\t__u32 num_default_cylinders;\n\t__u32 num_default_heads;\n\t__u32 sectors_per_track;\n\t__u64 number_of_sectors;\n\t__u16 bytes_per_sector;\n\t__u32 dpte_ptr;\n\t__u16 key;\n\t__u8 device_path_info_length;\n\t__u8 reserved2;\n\t__u16 reserved3;\n\t__u8 host_bus_type[4];\n\t__u8 interface_type[8];\n\tunion {\n\t\tstruct {\n\t\t\t__u16 base_address;\n\t\t\t__u16 reserved1;\n\t\t\t__u32 reserved2;\n\t\t} isa;\n\t\tstruct {\n\t\t\t__u8 bus;\n\t\t\t__u8 slot;\n\t\t\t__u8 function;\n\t\t\t__u8 channel;\n\t\t\t__u32 reserved;\n\t\t} pci;\n\t\tstruct {\n\t\t\t__u64 reserved;\n\t\t} ibnd;\n\t\tstruct {\n\t\t\t__u64 reserved;\n\t\t} xprs;\n\t\tstruct {\n\t\t\t__u64 reserved;\n\t\t} htpt;\n\t\tstruct {\n\t\t\t__u64 reserved;\n\t\t} unknown;\n\t} interface_path;\n\tunion {\n\t\tstruct {\n\t\t\t__u8 device;\n\t\t\t__u8 reserved1;\n\t\t\t__u16 reserved2;\n\t\t\t__u32 reserved3;\n\t\t\t__u64 reserved4;\n\t\t} ata;\n\t\tstruct {\n\t\t\t__u8 device;\n\t\t\t__u8 lun;\n\t\t\t__u8 reserved1;\n\t\t\t__u8 reserved2;\n\t\t\t__u32 reserved3;\n\t\t\t__u64 reserved4;\n\t\t} atapi;\n\t\tstruct {\n\t\t\t__u16 id;\n\t\t\t__u64 lun;\n\t\t\t__u16 reserved1;\n\t\t\t__u32 reserved2;\n\t\t} __attribute__((packed)) scsi;\n\t\tstruct {\n\t\t\t__u64 serial_number;\n\t\t\t__u64 reserved;\n\t\t} usb;\n\t\tstruct {\n\t\t\t__u64 eui;\n\t\t\t__u64 reserved;\n\t\t} i1394;\n\t\tstruct {\n\t\t\t__u64 wwid;\n\t\t\t__u64 lun;\n\t\t} fibre;\n\t\tstruct {\n\t\t\t__u64 identity_tag;\n\t\t\t__u64 reserved;\n\t\t} i2o;\n\t\tstruct {\n\t\t\t__u32 array_number;\n\t\t\t__u32 reserved1;\n\t\t\t__u64 reserved2;\n\t\t} raid;\n\t\tstruct {\n\t\t\t__u8 device;\n\t\t\t__u8 reserved1;\n\t\t\t__u16 reserved2;\n\t\t\t__u32 reserved3;\n\t\t\t__u64 reserved4;\n\t\t} sata;\n\t\tstruct {\n\t\t\t__u64 reserved1;\n\t\t\t__u64 reserved2;\n\t\t} unknown;\n\t} device_path;\n\t__u8 reserved4;\n\t__u8 checksum;\n} __attribute__((packed));\n\nstruct edd_info {\n\t__u8 device;\n\t__u8 version;\n\t__u16 interface_support;\n\t__u16 legacy_max_cylinder;\n\t__u8 legacy_max_head;\n\t__u8 legacy_sectors_per_track;\n\tstruct edd_device_params params;\n} __attribute__((packed));\n\nstruct ist_info {\n\t__u32 signature;\n\t__u32 command;\n\t__u32 event;\n\t__u32 perf_level;\n};\n\nstruct edid_info {\n\tunsigned char dummy[128];\n};\n\nstruct setup_header {\n\t__u8 setup_sects;\n\t__u16 root_flags;\n\t__u32 syssize;\n\t__u16 ram_size;\n\t__u16 vid_mode;\n\t__u16 root_dev;\n\t__u16 boot_flag;\n\t__u16 jump;\n\t__u32 header;\n\t__u16 version;\n\t__u32 realmode_swtch;\n\t__u16 start_sys_seg;\n\t__u16 kernel_version;\n\t__u8 type_of_loader;\n\t__u8 loadflags;\n\t__u16 setup_move_size;\n\t__u32 code32_start;\n\t__u32 ramdisk_image;\n\t__u32 ramdisk_size;\n\t__u32 bootsect_kludge;\n\t__u16 heap_end_ptr;\n\t__u8 ext_loader_ver;\n\t__u8 ext_loader_type;\n\t__u32 cmd_line_ptr;\n\t__u32 initrd_addr_max;\n\t__u32 kernel_alignment;\n\t__u8 relocatable_kernel;\n\t__u8 min_alignment;\n\t__u16 xloadflags;\n\t__u32 cmdline_size;\n\t__u32 hardware_subarch;\n\t__u64 hardware_subarch_data;\n\t__u32 payload_offset;\n\t__u32 payload_length;\n\t__u64 setup_data;\n\t__u64 pref_address;\n\t__u32 init_size;\n\t__u32 handover_offset;\n\t__u32 kernel_info_offset;\n} __attribute__((packed));\n\nstruct sys_desc_table {\n\t__u16 length;\n\t__u8 table[14];\n};\n\nstruct olpc_ofw_header {\n\t__u32 ofw_magic;\n\t__u32 ofw_version;\n\t__u32 cif_handler;\n\t__u32 irq_desc_table;\n};\n\nstruct efi_info {\n\t__u32 efi_loader_signature;\n\t__u32 efi_systab;\n\t__u32 efi_memdesc_size;\n\t__u32 efi_memdesc_version;\n\t__u32 efi_memmap;\n\t__u32 efi_memmap_size;\n\t__u32 efi_systab_hi;\n\t__u32 efi_memmap_hi;\n};\n\nstruct boot_e820_entry {\n\t__u64 addr;\n\t__u64 size;\n\t__u32 type;\n} __attribute__((packed));\n\nstruct boot_params {\n\tstruct screen_info screen_info;\n\tstruct apm_bios_info apm_bios_info;\n\t__u8 _pad2[4];\n\t__u64 tboot_addr;\n\tstruct ist_info ist_info;\n\t__u64 acpi_rsdp_addr;\n\t__u8 _pad3[8];\n\t__u8 hd0_info[16];\n\t__u8 hd1_info[16];\n\tstruct sys_desc_table sys_desc_table;\n\tstruct olpc_ofw_header olpc_ofw_header;\n\t__u32 ext_ramdisk_image;\n\t__u32 ext_ramdisk_size;\n\t__u32 ext_cmd_line_ptr;\n\t__u8 _pad4[116];\n\tstruct edid_info edid_info;\n\tstruct efi_info efi_info;\n\t__u32 alt_mem_k;\n\t__u32 scratch;\n\t__u8 e820_entries;\n\t__u8 eddbuf_entries;\n\t__u8 edd_mbr_sig_buf_entries;\n\t__u8 kbd_status;\n\t__u8 secure_boot;\n\t__u8 _pad5[2];\n\t__u8 sentinel;\n\t__u8 _pad6[1];\n\tstruct setup_header hdr;\n\t__u8 _pad7[36];\n\t__u32 edd_mbr_sig_buffer[16];\n\tstruct boot_e820_entry e820_table[128];\n\t__u8 _pad8[48];\n\tstruct edd_info eddbuf[6];\n\t__u8 _pad9[276];\n} __attribute__((packed));\n\nenum x86_hardware_subarch {\n\tX86_SUBARCH_PC = 0,\n\tX86_SUBARCH_LGUEST = 1,\n\tX86_SUBARCH_XEN = 2,\n\tX86_SUBARCH_INTEL_MID = 3,\n\tX86_SUBARCH_CE4100 = 4,\n\tX86_NR_SUBARCHS = 5,\n};\n\nstruct range {\n\tu64 start;\n\tu64 end;\n};\n\nstruct pt_regs {\n\tlong unsigned int r15;\n\tlong unsigned int r14;\n\tlong unsigned int r13;\n\tlong unsigned int r12;\n\tlong unsigned int bp;\n\tlong unsigned int bx;\n\tlong unsigned int r11;\n\tlong unsigned int r10;\n\tlong unsigned int r9;\n\tlong unsigned int r8;\n\tlong unsigned int ax;\n\tlong unsigned int cx;\n\tlong unsigned int dx;\n\tlong unsigned int si;\n\tlong unsigned int di;\n\tlong unsigned int orig_ax;\n\tlong unsigned int ip;\n\tlong unsigned int cs;\n\tlong unsigned int flags;\n\tlong unsigned int sp;\n\tlong unsigned int ss;\n};\n\nenum {\n\tGATE_INTERRUPT = 14,\n\tGATE_TRAP = 15,\n\tGATE_CALL = 12,\n\tGATE_TASK = 5,\n};\n\nstruct idt_bits {\n\tu16 ist: 3;\n\tu16 zero: 5;\n\tu16 type: 5;\n\tu16 dpl: 2;\n\tu16 p: 1;\n};\n\nstruct idt_data {\n\tunsigned int vector;\n\tunsigned int segment;\n\tstruct idt_bits bits;\n\tconst void *addr;\n};\n\nstruct gate_struct {\n\tu16 offset_low;\n\tu16 segment;\n\tstruct idt_bits bits;\n\tu16 offset_middle;\n\tu32 offset_high;\n\tu32 reserved;\n};\n\ntypedef struct gate_struct gate_desc;\n\nstruct desc_ptr {\n\tshort unsigned int size;\n\tlong unsigned int address;\n} __attribute__((packed));\n\ntypedef long unsigned int pteval_t;\n\ntypedef long unsigned int pmdval_t;\n\ntypedef long unsigned int pudval_t;\n\ntypedef long unsigned int p4dval_t;\n\ntypedef long unsigned int pgdval_t;\n\ntypedef long unsigned int pgprotval_t;\n\ntypedef struct {\n\tpteval_t pte;\n} pte_t;\n\nstruct pgprot {\n\tpgprotval_t pgprot;\n};\n\ntypedef struct pgprot pgprot_t;\n\ntypedef struct {\n\tpgdval_t pgd;\n} pgd_t;\n\ntypedef struct {\n\tp4dval_t p4d;\n} p4d_t;\n\ntypedef struct {\n\tpudval_t pud;\n} pud_t;\n\ntypedef struct {\n\tpmdval_t pmd;\n} pmd_t;\n\ntypedef struct page *pgtable_t;\n\nstruct address_space;\n\nstruct kmem_cache;\n\nstruct dev_pagemap;\n\nstruct page {\n\tlong unsigned int flags;\n\tunion {\n\t\tstruct {\n\t\t\tstruct list_head lru;\n\t\t\tstruct address_space *mapping;\n\t\t\tlong unsigned int index;\n\t\t\tlong unsigned int private;\n\t\t};\n\t\tstruct {\n\t\t\tdma_addr_t dma_addr;\n\t\t};\n\t\tstruct {\n\t\t\tunion {\n\t\t\t\tstruct list_head slab_list;\n\t\t\t\tstruct {\n\t\t\t\t\tstruct page *next;\n\t\t\t\t\tint pages;\n\t\t\t\t\tint pobjects;\n\t\t\t\t};\n\t\t\t};\n\t\t\tstruct kmem_cache *slab_cache;\n\t\t\tvoid *freelist;\n\t\t\tunion {\n\t\t\t\tvoid *s_mem;\n\t\t\t\tlong unsigned int counters;\n\t\t\t\tstruct {\n\t\t\t\t\tunsigned int inuse: 16;\n\t\t\t\t\tunsigned int objects: 15;\n\t\t\t\t\tunsigned int frozen: 1;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\tstruct {\n\t\t\tlong unsigned int compound_head;\n\t\t\tunsigned char compound_dtor;\n\t\t\tunsigned char compound_order;\n\t\t\tatomic_t compound_mapcount;\n\t\t\tunsigned int compound_nr;\n\t\t};\n\t\tstruct {\n\t\t\tlong unsigned int _compound_pad_1;\n\t\t\tatomic_t hpage_pinned_refcount;\n\t\t\tstruct list_head deferred_list;\n\t\t};\n\t\tstruct {\n\t\t\tlong unsigned int _pt_pad_1;\n\t\t\tpgtable_t pmd_huge_pte;\n\t\t\tlong unsigned int _pt_pad_2;\n\t\t\tunion {\n\t\t\t\tstruct mm_struct *pt_mm;\n\t\t\t\tatomic_t pt_frag_refcount;\n\t\t\t};\n\t\t\tspinlock_t ptl;\n\t\t};\n\t\tstruct {\n\t\t\tstruct dev_pagemap *pgmap;\n\t\t\tvoid *zone_device_data;\n\t\t};\n\t\tstruct callback_head callback_head;\n\t};\n\tunion {\n\t\tatomic_t _mapcount;\n\t\tunsigned int page_type;\n\t\tunsigned int active;\n\t\tint units;\n\t};\n\tatomic_t _refcount;\n\tlong unsigned int memcg_data;\n};\n\nstruct paravirt_callee_save {\n\tvoid *func;\n};\n\nstruct pv_init_ops {\n\tunsigned int (*patch)(u8, void *, long unsigned int, unsigned int);\n};\n\nstruct pv_lazy_ops {\n\tvoid (*enter)();\n\tvoid (*leave)();\n\tvoid (*flush)();\n};\n\nstruct pv_time_ops {\n\tlong long unsigned int (*sched_clock)();\n\tlong long unsigned int (*steal_clock)(int);\n};\n\nstruct pv_cpu_ops {\n\tvoid (*io_delay)();\n\tlong unsigned int (*get_debugreg)(int);\n\tvoid (*set_debugreg)(int, long unsigned int);\n\tlong unsigned int (*read_cr0)();\n\tvoid (*write_cr0)(long unsigned int);\n\tvoid (*write_cr4)(long unsigned int);\n\tvoid (*load_tr_desc)();\n\tvoid (*load_gdt)(const struct desc_ptr *);\n\tvoid (*load_idt)(const struct desc_ptr *);\n\tvoid (*set_ldt)(const void *, unsigned int);\n\tlong unsigned int (*store_tr)();\n\tvoid (*load_tls)(struct thread_struct *, unsigned int);\n\tvoid (*load_gs_index)(unsigned int);\n\tvoid (*write_ldt_entry)(struct desc_struct *, int, const void *);\n\tvoid (*write_gdt_entry)(struct desc_struct *, int, const void *, int);\n\tvoid (*write_idt_entry)(gate_desc *, int, const gate_desc *);\n\tvoid (*alloc_ldt)(struct desc_struct *, unsigned int);\n\tvoid (*free_ldt)(struct desc_struct *, unsigned int);\n\tvoid (*load_sp0)(long unsigned int);\n\tvoid (*invalidate_io_bitmap)();\n\tvoid (*update_io_bitmap)();\n\tvoid (*wbinvd)();\n\tvoid (*cpuid)(unsigned int *, unsigned int *, unsigned int *, unsigned int *);\n\tu64 (*read_msr)(unsigned int);\n\tvoid (*write_msr)(unsigned int, unsigned int, unsigned int);\n\tu64 (*read_msr_safe)(unsigned int, int *);\n\tint (*write_msr_safe)(unsigned int, unsigned int, unsigned int);\n\tu64 (*read_pmc)(int);\n\tvoid (*usergs_sysret64)();\n\tvoid (*iret)();\n\tvoid (*swapgs)();\n\tvoid (*start_context_switch)(struct task_struct *);\n\tvoid (*end_context_switch)(struct task_struct *);\n};\n\nstruct pv_irq_ops {\n\tstruct paravirt_callee_save save_fl;\n\tstruct paravirt_callee_save restore_fl;\n\tstruct paravirt_callee_save irq_disable;\n\tstruct paravirt_callee_save irq_enable;\n\tvoid (*safe_halt)();\n\tvoid (*halt)();\n};\n\nstruct flush_tlb_info;\n\nstruct mmu_gather;\n\nstruct pv_mmu_ops {\n\tvoid (*flush_tlb_user)();\n\tvoid (*flush_tlb_kernel)();\n\tvoid (*flush_tlb_one_user)(long unsigned int);\n\tvoid (*flush_tlb_others)(const struct cpumask *, const struct flush_tlb_info *);\n\tvoid (*tlb_remove_table)(struct mmu_gather *, void *);\n\tvoid (*exit_mmap)(struct mm_struct *);\n\tstruct paravirt_callee_save read_cr2;\n\tvoid (*write_cr2)(long unsigned int);\n\tlong unsigned int (*read_cr3)();\n\tvoid (*write_cr3)(long unsigned int);\n\tvoid (*activate_mm)(struct mm_struct *, struct mm_struct *);\n\tvoid (*dup_mmap)(struct mm_struct *, struct mm_struct *);\n\tint (*pgd_alloc)(struct mm_struct *);\n\tvoid (*pgd_free)(struct mm_struct *, pgd_t *);\n\tvoid (*alloc_pte)(struct mm_struct *, long unsigned int);\n\tvoid (*alloc_pmd)(struct mm_struct *, long unsigned int);\n\tvoid (*alloc_pud)(struct mm_struct *, long unsigned int);\n\tvoid (*alloc_p4d)(struct mm_struct *, long unsigned int);\n\tvoid (*release_pte)(long unsigned int);\n\tvoid (*release_pmd)(long unsigned int);\n\tvoid (*release_pud)(long unsigned int);\n\tvoid (*release_p4d)(long unsigned int);\n\tvoid (*set_pte)(pte_t *, pte_t);\n\tvoid (*set_pmd)(pmd_t *, pmd_t);\n\tpte_t (*ptep_modify_prot_start)(struct vm_area_struct *, long unsigned int, pte_t *);\n\tvoid (*ptep_modify_prot_commit)(struct vm_area_struct *, long unsigned int, pte_t *, pte_t);\n\tstruct paravirt_callee_save pte_val;\n\tstruct paravirt_callee_save make_pte;\n\tstruct paravirt_callee_save pgd_val;\n\tstruct paravirt_callee_save make_pgd;\n\tvoid (*set_pud)(pud_t *, pud_t);\n\tstruct paravirt_callee_save pmd_val;\n\tstruct paravirt_callee_save make_pmd;\n\tstruct paravirt_callee_save pud_val;\n\tstruct paravirt_callee_save make_pud;\n\tvoid (*set_p4d)(p4d_t *, p4d_t);\n\tstruct paravirt_callee_save p4d_val;\n\tstruct paravirt_callee_save make_p4d;\n\tvoid (*set_pgd)(pgd_t *, pgd_t);\n\tstruct pv_lazy_ops lazy_mode;\n\tvoid (*set_fixmap)(unsigned int, phys_addr_t, pgprot_t);\n};\n\nstruct flush_tlb_info {\n\tstruct mm_struct *mm;\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tu64 new_tlb_gen;\n\tunsigned int stride_shift;\n\tbool freed_tables;\n};\n\nstruct rw_semaphore {\n\tatomic_long_t count;\n\tatomic_long_t owner;\n\tstruct optimistic_spin_queue osq;\n\traw_spinlock_t wait_lock;\n\tstruct list_head wait_list;\n};\n\nstruct mm_rss_stat {\n\tatomic_long_t count[4];\n};\n\nstruct ldt_struct;\n\nstruct vdso_image;\n\ntypedef struct {\n\tu64 ctx_id;\n\tatomic64_t tlb_gen;\n\tstruct rw_semaphore ldt_usr_sem;\n\tstruct ldt_struct *ldt;\n\tshort unsigned int flags;\n\tstruct mutex lock;\n\tvoid *vdso;\n\tconst struct vdso_image *vdso_image;\n\tatomic_t perf_rdpmc_allowed;\n\tu16 pkey_allocation_map;\n\ts16 execute_only_pkey;\n} mm_context_t;\n\nstruct xol_area;\n\nstruct uprobes_state {\n\tstruct xol_area *xol_area;\n};\n\nstruct work_struct;\n\ntypedef void (*work_func_t)(struct work_struct *);\n\nstruct work_struct {\n\tatomic_long_t data;\n\tstruct list_head entry;\n\twork_func_t func;\n};\n\nstruct linux_binfmt;\n\nstruct core_state;\n\nstruct kioctx_table;\n\nstruct user_namespace;\n\nstruct mmu_notifier_subscriptions;\n\nstruct mm_struct {\n\tstruct {\n\t\tstruct vm_area_struct *mmap;\n\t\tstruct rb_root mm_rb;\n\t\tu64 vmacache_seqnum;\n\t\tlong unsigned int (*get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);\n\t\tlong unsigned int mmap_base;\n\t\tlong unsigned int mmap_legacy_base;\n\t\tlong unsigned int mmap_compat_base;\n\t\tlong unsigned int mmap_compat_legacy_base;\n\t\tlong unsigned int task_size;\n\t\tlong unsigned int highest_vm_end;\n\t\tpgd_t *pgd;\n\t\tatomic_t membarrier_state;\n\t\tatomic_t mm_users;\n\t\tatomic_t mm_count;\n\t\tatomic_t has_pinned;\n\t\tseqcount_t write_protect_seq;\n\t\tatomic_long_t pgtables_bytes;\n\t\tint map_count;\n\t\tspinlock_t page_table_lock;\n\t\tstruct rw_semaphore mmap_lock;\n\t\tstruct list_head mmlist;\n\t\tlong unsigned int hiwater_rss;\n\t\tlong unsigned int hiwater_vm;\n\t\tlong unsigned int total_vm;\n\t\tlong unsigned int locked_vm;\n\t\tatomic64_t pinned_vm;\n\t\tlong unsigned int data_vm;\n\t\tlong unsigned int exec_vm;\n\t\tlong unsigned int stack_vm;\n\t\tlong unsigned int def_flags;\n\t\tspinlock_t arg_lock;\n\t\tlong unsigned int start_code;\n\t\tlong unsigned int end_code;\n\t\tlong unsigned int start_data;\n\t\tlong unsigned int end_data;\n\t\tlong unsigned int start_brk;\n\t\tlong unsigned int brk;\n\t\tlong unsigned int start_stack;\n\t\tlong unsigned int arg_start;\n\t\tlong unsigned int arg_end;\n\t\tlong unsigned int env_start;\n\t\tlong unsigned int env_end;\n\t\tlong unsigned int saved_auxv[46];\n\t\tstruct mm_rss_stat rss_stat;\n\t\tstruct linux_binfmt *binfmt;\n\t\tmm_context_t context;\n\t\tlong unsigned int flags;\n\t\tstruct core_state *core_state;\n\t\tspinlock_t ioctx_lock;\n\t\tstruct kioctx_table *ioctx_table;\n\t\tstruct task_struct *owner;\n\t\tstruct user_namespace *user_ns;\n\t\tstruct file *exe_file;\n\t\tstruct mmu_notifier_subscriptions *notifier_subscriptions;\n\t\tlong unsigned int numa_next_scan;\n\t\tlong unsigned int numa_scan_offset;\n\t\tint numa_scan_seq;\n\t\tatomic_t tlb_flush_pending;\n\t\tbool tlb_flush_batched;\n\t\tstruct uprobes_state uprobes_state;\n\t\tatomic_long_t hugetlb_usage;\n\t\tstruct work_struct async_put_work;\n\t\tu32 pasid;\n\t};\n\tlong unsigned int cpu_bitmap[0];\n};\n\nstruct userfaultfd_ctx;\n\nstruct vm_userfaultfd_ctx {\n\tstruct userfaultfd_ctx *ctx;\n};\n\nstruct anon_vma;\n\nstruct vm_operations_struct;\n\nstruct vm_area_struct {\n\tlong unsigned int vm_start;\n\tlong unsigned int vm_end;\n\tstruct vm_area_struct *vm_next;\n\tstruct vm_area_struct *vm_prev;\n\tstruct rb_node vm_rb;\n\tlong unsigned int rb_subtree_gap;\n\tstruct mm_struct *vm_mm;\n\tpgprot_t vm_page_prot;\n\tlong unsigned int vm_flags;\n\tstruct {\n\t\tstruct rb_node rb;\n\t\tlong unsigned int rb_subtree_last;\n\t} shared;\n\tstruct list_head anon_vma_chain;\n\tstruct anon_vma *anon_vma;\n\tconst struct vm_operations_struct *vm_ops;\n\tlong unsigned int vm_pgoff;\n\tstruct file *vm_file;\n\tvoid *vm_private_data;\n\tatomic_long_t swap_readahead_info;\n\tstruct mempolicy *vm_policy;\n\tstruct vm_userfaultfd_ctx vm_userfaultfd_ctx;\n};\n\nstruct pv_lock_ops {\n\tvoid (*queued_spin_lock_slowpath)(struct qspinlock *, u32);\n\tstruct paravirt_callee_save queued_spin_unlock;\n\tvoid (*wait)(u8 *, u8);\n\tvoid (*kick)(int);\n\tstruct paravirt_callee_save vcpu_is_preempted;\n};\n\nstruct paravirt_patch_template {\n\tstruct pv_init_ops init;\n\tstruct pv_time_ops time;\n\tstruct pv_cpu_ops cpu;\n\tstruct pv_irq_ops irq;\n\tstruct pv_mmu_ops mmu;\n\tstruct pv_lock_ops lock;\n};\n\nstruct math_emu_info {\n\tlong int ___orig_eip;\n\tstruct pt_regs *regs;\n};\n\nenum {\n\tUNAME26 = 131072,\n\tADDR_NO_RANDOMIZE = 262144,\n\tFDPIC_FUNCPTRS = 524288,\n\tMMAP_PAGE_ZERO = 1048576,\n\tADDR_COMPAT_LAYOUT = 2097152,\n\tREAD_IMPLIES_EXEC = 4194304,\n\tADDR_LIMIT_32BIT = 8388608,\n\tSHORT_INODE = 16777216,\n\tWHOLE_SECONDS = 33554432,\n\tSTICKY_TIMEOUTS = 67108864,\n\tADDR_LIMIT_3GB = 134217728,\n};\n\nenum tlb_infos {\n\tENTRIES = 0,\n\tNR_INFO = 1,\n};\n\nenum pcpu_fc {\n\tPCPU_FC_AUTO = 0,\n\tPCPU_FC_EMBED = 1,\n\tPCPU_FC_PAGE = 2,\n\tPCPU_FC_NR = 3,\n};\n\nstruct vm_struct {\n\tstruct vm_struct *next;\n\tvoid *addr;\n\tlong unsigned int size;\n\tlong unsigned int flags;\n\tstruct page **pages;\n\tunsigned int nr_pages;\n\tphys_addr_t phys_addr;\n\tconst void *caller;\n};\n\nstruct wait_queue_head {\n\tspinlock_t lock;\n\tstruct list_head head;\n};\n\ntypedef struct wait_queue_head wait_queue_head_t;\n\nstruct seqcount_raw_spinlock {\n\tseqcount_t seqcount;\n};\n\ntypedef struct seqcount_raw_spinlock seqcount_raw_spinlock_t;\n\ntypedef struct {\n\tseqcount_spinlock_t seqcount;\n\tspinlock_t lock;\n} seqlock_t;\n\nenum node_states {\n\tN_POSSIBLE = 0,\n\tN_ONLINE = 1,\n\tN_NORMAL_MEMORY = 2,\n\tN_HIGH_MEMORY = 2,\n\tN_MEMORY = 3,\n\tN_CPU = 4,\n\tN_GENERIC_INITIATOR = 5,\n\tNR_NODE_STATES = 6,\n};\n\nenum {\n\tMM_FILEPAGES = 0,\n\tMM_ANONPAGES = 1,\n\tMM_SWAPENTS = 2,\n\tMM_SHMEMPAGES = 3,\n\tNR_MM_COUNTERS = 4,\n};\n\nstruct swait_queue_head {\n\traw_spinlock_t lock;\n\tstruct list_head task_list;\n};\n\nstruct completion {\n\tunsigned int done;\n\tstruct swait_queue_head wait;\n};\n\nstruct arch_uprobe_task {\n\tlong unsigned int saved_scratch_register;\n\tunsigned int saved_trap_nr;\n\tunsigned int saved_tf;\n};\n\nenum uprobe_task_state {\n\tUTASK_RUNNING = 0,\n\tUTASK_SSTEP = 1,\n\tUTASK_SSTEP_ACK = 2,\n\tUTASK_SSTEP_TRAPPED = 3,\n};\n\nstruct uprobe;\n\nstruct return_instance;\n\nstruct uprobe_task {\n\tenum uprobe_task_state state;\n\tunion {\n\t\tstruct {\n\t\t\tstruct arch_uprobe_task autask;\n\t\t\tlong unsigned int vaddr;\n\t\t};\n\t\tstruct {\n\t\t\tstruct callback_head dup_xol_work;\n\t\t\tlong unsigned int dup_xol_addr;\n\t\t};\n\t};\n\tstruct uprobe *active_uprobe;\n\tlong unsigned int xol_vaddr;\n\tstruct return_instance *return_instances;\n\tunsigned int depth;\n};\n\nstruct return_instance {\n\tstruct uprobe *uprobe;\n\tlong unsigned int func;\n\tlong unsigned int stack;\n\tlong unsigned int orig_ret_vaddr;\n\tbool chained;\n\tstruct return_instance *next;\n};\n\nstruct vdso_image {\n\tvoid *data;\n\tlong unsigned int size;\n\tlong unsigned int alt;\n\tlong unsigned int alt_len;\n\tlong unsigned int extable_base;\n\tlong unsigned int extable_len;\n\tconst void *extable;\n\tlong int sym_vvar_start;\n\tlong int sym_vvar_page;\n\tlong int sym_pvclock_page;\n\tlong int sym_hvclock_page;\n\tlong int sym_timens_page;\n\tlong int sym_VDSO32_NOTE_MASK;\n\tlong int sym___kernel_sigreturn;\n\tlong int sym___kernel_rt_sigreturn;\n\tlong int sym___kernel_vsyscall;\n\tlong int sym_int80_landing_pad;\n\tlong int sym_vdso32_sigreturn_landing_pad;\n\tlong int sym_vdso32_rt_sigreturn_landing_pad;\n};\n\nstruct xarray {\n\tspinlock_t xa_lock;\n\tgfp_t xa_flags;\n\tvoid *xa_head;\n};\n\ntypedef u32 errseq_t;\n\nstruct address_space_operations;\n\nstruct address_space {\n\tstruct inode *host;\n\tstruct xarray i_pages;\n\tgfp_t gfp_mask;\n\tatomic_t i_mmap_writable;\n\tstruct rb_root_cached i_mmap;\n\tstruct rw_semaphore i_mmap_rwsem;\n\tlong unsigned int nrpages;\n\tlong unsigned int nrexceptional;\n\tlong unsigned int writeback_index;\n\tconst struct address_space_operations *a_ops;\n\tlong unsigned int flags;\n\terrseq_t wb_err;\n\tspinlock_t private_lock;\n\tstruct list_head private_list;\n\tvoid *private_data;\n};\n\nstruct vmem_altmap {\n\tconst long unsigned int base_pfn;\n\tconst long unsigned int end_pfn;\n\tconst long unsigned int reserve;\n\tlong unsigned int free;\n\tlong unsigned int align;\n\tlong unsigned int alloc;\n};\n\nstruct percpu_ref_data;\n\nstruct percpu_ref {\n\tlong unsigned int percpu_count_ptr;\n\tstruct percpu_ref_data *data;\n};\n\nenum memory_type {\n\tMEMORY_DEVICE_PRIVATE = 1,\n\tMEMORY_DEVICE_FS_DAX = 2,\n\tMEMORY_DEVICE_GENERIC = 3,\n\tMEMORY_DEVICE_PCI_P2PDMA = 4,\n};\n\nstruct dev_pagemap_ops;\n\nstruct dev_pagemap {\n\tstruct vmem_altmap altmap;\n\tstruct percpu_ref *ref;\n\tstruct percpu_ref internal_ref;\n\tstruct completion done;\n\tenum memory_type type;\n\tunsigned int flags;\n\tconst struct dev_pagemap_ops *ops;\n\tvoid *owner;\n\tint nr_range;\n\tunion {\n\t\tstruct range range;\n\t\tstruct range ranges[0];\n\t};\n};\n\nstruct vfsmount;\n\nstruct path {\n\tstruct vfsmount *mnt;\n\tstruct dentry *dentry;\n};\n\nenum rw_hint {\n\tWRITE_LIFE_NOT_SET = 0,\n\tWRITE_LIFE_NONE = 1,\n\tWRITE_LIFE_SHORT = 2,\n\tWRITE_LIFE_MEDIUM = 3,\n\tWRITE_LIFE_LONG = 4,\n\tWRITE_LIFE_EXTREME = 5,\n};\n\nenum pid_type {\n\tPIDTYPE_PID = 0,\n\tPIDTYPE_TGID = 1,\n\tPIDTYPE_PGID = 2,\n\tPIDTYPE_SID = 3,\n\tPIDTYPE_MAX = 4,\n};\n\nstruct fown_struct {\n\trwlock_t lock;\n\tstruct pid *pid;\n\tenum pid_type pid_type;\n\tkuid_t uid;\n\tkuid_t euid;\n\tint signum;\n};\n\nstruct file_ra_state {\n\tlong unsigned int start;\n\tunsigned int size;\n\tunsigned int async_size;\n\tunsigned int ra_pages;\n\tunsigned int mmap_miss;\n\tloff_t prev_pos;\n};\n\nstruct file {\n\tunion {\n\t\tstruct llist_node fu_llist;\n\t\tstruct callback_head fu_rcuhead;\n\t} f_u;\n\tstruct path f_path;\n\tstruct inode *f_inode;\n\tconst struct file_operations *f_op;\n\tspinlock_t f_lock;\n\tenum rw_hint f_write_hint;\n\tatomic_long_t f_count;\n\tunsigned int f_flags;\n\tfmode_t f_mode;\n\tstruct mutex f_pos_lock;\n\tloff_t f_pos;\n\tstruct fown_struct f_owner;\n\tconst struct cred *f_cred;\n\tstruct file_ra_state f_ra;\n\tu64 f_version;\n\tvoid *f_security;\n\tvoid *private_data;\n\tstruct hlist_head *f_ep;\n\tstruct address_space *f_mapping;\n\terrseq_t f_wb_err;\n\terrseq_t f_sb_err;\n};\n\ntypedef unsigned int vm_fault_t;\n\nenum page_entry_size {\n\tPE_SIZE_PTE = 0,\n\tPE_SIZE_PMD = 1,\n\tPE_SIZE_PUD = 2,\n};\n\nstruct vm_fault;\n\nstruct vm_operations_struct {\n\tvoid (*open)(struct vm_area_struct *);\n\tvoid (*close)(struct vm_area_struct *);\n\tint (*may_split)(struct vm_area_struct *, long unsigned int);\n\tint (*mremap)(struct vm_area_struct *, long unsigned int);\n\tint (*mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int, long unsigned int);\n\tvm_fault_t (*fault)(struct vm_fault *);\n\tvm_fault_t (*huge_fault)(struct vm_fault *, enum page_entry_size);\n\tvoid (*map_pages)(struct vm_fault *, long unsigned int, long unsigned int);\n\tlong unsigned int (*pagesize)(struct vm_area_struct *);\n\tvm_fault_t (*page_mkwrite)(struct vm_fault *);\n\tvm_fault_t (*pfn_mkwrite)(struct vm_fault *);\n\tint (*access)(struct vm_area_struct *, long unsigned int, void *, int, int);\n\tconst char * (*name)(struct vm_area_struct *);\n\tint (*set_policy)(struct vm_area_struct *, struct mempolicy *);\n\tstruct mempolicy * (*get_policy)(struct vm_area_struct *, long unsigned int);\n\tstruct page * (*find_special_page)(struct vm_area_struct *, long unsigned int);\n};\n\nstruct core_thread {\n\tstruct task_struct *task;\n\tstruct core_thread *next;\n};\n\nstruct core_state {\n\tatomic_t nr_threads;\n\tstruct core_thread dumper;\n\tstruct completion startup;\n};\n\nstruct vm_fault {\n\tstruct vm_area_struct *vma;\n\tunsigned int flags;\n\tgfp_t gfp_mask;\n\tlong unsigned int pgoff;\n\tlong unsigned int address;\n\tpmd_t *pmd;\n\tpud_t *pud;\n\tpte_t orig_pte;\n\tstruct page *cow_page;\n\tstruct page *page;\n\tpte_t *pte;\n\tspinlock_t *ptl;\n\tpgtable_t prealloc_pte;\n};\n\nenum migratetype {\n\tMIGRATE_UNMOVABLE = 0,\n\tMIGRATE_MOVABLE = 1,\n\tMIGRATE_RECLAIMABLE = 2,\n\tMIGRATE_PCPTYPES = 3,\n\tMIGRATE_HIGHATOMIC = 3,\n\tMIGRATE_CMA = 4,\n\tMIGRATE_ISOLATE = 5,\n\tMIGRATE_TYPES = 6,\n};\n\nenum numa_stat_item {\n\tNUMA_HIT = 0,\n\tNUMA_MISS = 1,\n\tNUMA_FOREIGN = 2,\n\tNUMA_INTERLEAVE_HIT = 3,\n\tNUMA_LOCAL = 4,\n\tNUMA_OTHER = 5,\n\tNR_VM_NUMA_STAT_ITEMS = 6,\n};\n\nenum zone_stat_item {\n\tNR_FREE_PAGES = 0,\n\tNR_ZONE_LRU_BASE = 1,\n\tNR_ZONE_INACTIVE_ANON = 1,\n\tNR_ZONE_ACTIVE_ANON = 2,\n\tNR_ZONE_INACTIVE_FILE = 3,\n\tNR_ZONE_ACTIVE_FILE = 4,\n\tNR_ZONE_UNEVICTABLE = 5,\n\tNR_ZONE_WRITE_PENDING = 6,\n\tNR_MLOCK = 7,\n\tNR_BOUNCE = 8,\n\tNR_ZSPAGES = 9,\n\tNR_FREE_CMA_PAGES = 10,\n\tNR_VM_ZONE_STAT_ITEMS = 11,\n};\n\nenum node_stat_item {\n\tNR_LRU_BASE = 0,\n\tNR_INACTIVE_ANON = 0,\n\tNR_ACTIVE_ANON = 1,\n\tNR_INACTIVE_FILE = 2,\n\tNR_ACTIVE_FILE = 3,\n\tNR_UNEVICTABLE = 4,\n\tNR_SLAB_RECLAIMABLE_B = 5,\n\tNR_SLAB_UNRECLAIMABLE_B = 6,\n\tNR_ISOLATED_ANON = 7,\n\tNR_ISOLATED_FILE = 8,\n\tWORKINGSET_NODES = 9,\n\tWORKINGSET_REFAULT_BASE = 10,\n\tWORKINGSET_REFAULT_ANON = 10,\n\tWORKINGSET_REFAULT_FILE = 11,\n\tWORKINGSET_ACTIVATE_BASE = 12,\n\tWORKINGSET_ACTIVATE_ANON = 12,\n\tWORKINGSET_ACTIVATE_FILE = 13,\n\tWORKINGSET_RESTORE_BASE = 14,\n\tWORKINGSET_RESTORE_ANON = 14,\n\tWORKINGSET_RESTORE_FILE = 15,\n\tWORKINGSET_NODERECLAIM = 16,\n\tNR_ANON_MAPPED = 17,\n\tNR_FILE_MAPPED = 18,\n\tNR_FILE_PAGES = 19,\n\tNR_FILE_DIRTY = 20,\n\tNR_WRITEBACK = 21,\n\tNR_WRITEBACK_TEMP = 22,\n\tNR_SHMEM = 23,\n\tNR_SHMEM_THPS = 24,\n\tNR_SHMEM_PMDMAPPED = 25,\n\tNR_FILE_THPS = 26,\n\tNR_FILE_PMDMAPPED = 27,\n\tNR_ANON_THPS = 28,\n\tNR_VMSCAN_WRITE = 29,\n\tNR_VMSCAN_IMMEDIATE = 30,\n\tNR_DIRTIED = 31,\n\tNR_WRITTEN = 32,\n\tNR_KERNEL_MISC_RECLAIMABLE = 33,\n\tNR_FOLL_PIN_ACQUIRED = 34,\n\tNR_FOLL_PIN_RELEASED = 35,\n\tNR_KERNEL_STACK_KB = 36,\n\tNR_PAGETABLE = 37,\n\tNR_VM_NODE_STAT_ITEMS = 38,\n};\n\nenum lru_list {\n\tLRU_INACTIVE_ANON = 0,\n\tLRU_ACTIVE_ANON = 1,\n\tLRU_INACTIVE_FILE = 2,\n\tLRU_ACTIVE_FILE = 3,\n\tLRU_UNEVICTABLE = 4,\n\tNR_LRU_LISTS = 5,\n};\n\ntypedef unsigned int isolate_mode_t;\n\nenum zone_watermarks {\n\tWMARK_MIN = 0,\n\tWMARK_LOW = 1,\n\tWMARK_HIGH = 2,\n\tNR_WMARK = 3,\n};\n\nenum {\n\tZONELIST_FALLBACK = 0,\n\tZONELIST_NOFALLBACK = 1,\n\tMAX_ZONELISTS = 2,\n};\n\ntypedef void percpu_ref_func_t(struct percpu_ref *);\n\nstruct percpu_ref_data {\n\tatomic_long_t count;\n\tpercpu_ref_func_t *release;\n\tpercpu_ref_func_t *confirm_switch;\n\tbool force_atomic: 1;\n\tbool allow_reinit: 1;\n\tstruct callback_head rcu;\n\tstruct percpu_ref *ref;\n};\n\nstruct shrink_control {\n\tgfp_t gfp_mask;\n\tint nid;\n\tlong unsigned int nr_to_scan;\n\tlong unsigned int nr_scanned;\n\tstruct mem_cgroup *memcg;\n};\n\nstruct shrinker {\n\tlong unsigned int (*count_objects)(struct shrinker *, struct shrink_control *);\n\tlong unsigned int (*scan_objects)(struct shrinker *, struct shrink_control *);\n\tlong int batch;\n\tint seeks;\n\tunsigned int flags;\n\tstruct list_head list;\n\tint id;\n\tatomic_long_t *nr_deferred;\n};\n\nstruct rlimit {\n\t__kernel_ulong_t rlim_cur;\n\t__kernel_ulong_t rlim_max;\n};\n\nstruct dev_pagemap_ops {\n\tvoid (*page_free)(struct page *);\n\tvoid (*kill)(struct dev_pagemap *);\n\tvoid (*cleanup)(struct dev_pagemap *);\n\tvm_fault_t (*migrate_to_ram)(struct vm_fault *);\n};\n\nstruct pid_namespace;\n\nstruct upid {\n\tint nr;\n\tstruct pid_namespace *ns;\n};\n\nstruct pid {\n\trefcount_t count;\n\tunsigned int level;\n\tspinlock_t lock;\n\tstruct hlist_head tasks[4];\n\tstruct hlist_head inodes;\n\twait_queue_head_t wait_pidfd;\n\tstruct callback_head rcu;\n\tstruct upid numbers[1];\n};\n\ntypedef struct {\n\tgid_t val;\n} kgid_t;\n\nstruct hrtimer_cpu_base;\n\nstruct hrtimer_clock_base {\n\tstruct hrtimer_cpu_base *cpu_base;\n\tunsigned int index;\n\tclockid_t clockid;\n\tseqcount_raw_spinlock_t seq;\n\tstruct hrtimer *running;\n\tstruct timerqueue_head active;\n\tktime_t (*get_time)();\n\tktime_t offset;\n};\n\nstruct hrtimer_cpu_base {\n\traw_spinlock_t lock;\n\tunsigned int cpu;\n\tunsigned int active_bases;\n\tunsigned int clock_was_set_seq;\n\tunsigned int hres_active: 1;\n\tunsigned int in_hrtirq: 1;\n\tunsigned int hang_detected: 1;\n\tunsigned int softirq_activated: 1;\n\tunsigned int nr_events;\n\tshort unsigned int nr_retries;\n\tshort unsigned int nr_hangs;\n\tunsigned int max_hang_time;\n\tktime_t expires_next;\n\tstruct hrtimer *next_timer;\n\tktime_t softirq_expires_next;\n\tstruct hrtimer *softirq_next_timer;\n\tstruct hrtimer_clock_base clock_base[8];\n};\n\nenum hrtimer_base_type {\n\tHRTIMER_BASE_MONOTONIC = 0,\n\tHRTIMER_BASE_REALTIME = 1,\n\tHRTIMER_BASE_BOOTTIME = 2,\n\tHRTIMER_BASE_TAI = 3,\n\tHRTIMER_BASE_MONOTONIC_SOFT = 4,\n\tHRTIMER_BASE_REALTIME_SOFT = 5,\n\tHRTIMER_BASE_BOOTTIME_SOFT = 6,\n\tHRTIMER_BASE_TAI_SOFT = 7,\n\tHRTIMER_MAX_CLOCK_BASES = 8,\n};\n\ntypedef void __signalfn_t(int);\n\ntypedef __signalfn_t *__sighandler_t;\n\ntypedef void __restorefn_t();\n\ntypedef __restorefn_t *__sigrestore_t;\n\nunion sigval {\n\tint sival_int;\n\tvoid *sival_ptr;\n};\n\ntypedef union sigval sigval_t;\n\nunion __sifields {\n\tstruct {\n\t\t__kernel_pid_t _pid;\n\t\t__kernel_uid32_t _uid;\n\t} _kill;\n\tstruct {\n\t\t__kernel_timer_t _tid;\n\t\tint _overrun;\n\t\tsigval_t _sigval;\n\t\tint _sys_private;\n\t} _timer;\n\tstruct {\n\t\t__kernel_pid_t _pid;\n\t\t__kernel_uid32_t _uid;\n\t\tsigval_t _sigval;\n\t} _rt;\n\tstruct {\n\t\t__kernel_pid_t _pid;\n\t\t__kernel_uid32_t _uid;\n\t\tint _status;\n\t\t__kernel_clock_t _utime;\n\t\t__kernel_clock_t _stime;\n\t} _sigchld;\n\tstruct {\n\t\tvoid *_addr;\n\t\tunion {\n\t\t\tshort int _addr_lsb;\n\t\t\tstruct {\n\t\t\t\tchar _dummy_bnd[8];\n\t\t\t\tvoid *_lower;\n\t\t\t\tvoid *_upper;\n\t\t\t} _addr_bnd;\n\t\t\tstruct {\n\t\t\t\tchar _dummy_pkey[8];\n\t\t\t\t__u32 _pkey;\n\t\t\t} _addr_pkey;\n\t\t};\n\t} _sigfault;\n\tstruct {\n\t\tlong int _band;\n\t\tint _fd;\n\t} _sigpoll;\n\tstruct {\n\t\tvoid *_call_addr;\n\t\tint _syscall;\n\t\tunsigned int _arch;\n\t} _sigsys;\n};\n\nstruct kernel_siginfo {\n\tstruct {\n\t\tint si_signo;\n\t\tint si_errno;\n\t\tint si_code;\n\t\tunion __sifields _sifields;\n\t};\n};\n\nstruct user_struct {\n\trefcount_t __count;\n\tatomic_t processes;\n\tatomic_t sigpending;\n\tatomic_t fanotify_listeners;\n\tatomic_long_t epoll_watches;\n\tlong unsigned int mq_bytes;\n\tlong unsigned int locked_shm;\n\tlong unsigned int unix_inflight;\n\tatomic_long_t pipe_bufs;\n\tstruct hlist_node uidhash_node;\n\tkuid_t uid;\n\tatomic_long_t locked_vm;\n\tatomic_t nr_watches;\n\tstruct ratelimit_state ratelimit;\n};\n\nstruct sigaction {\n\t__sighandler_t sa_handler;\n\tlong unsigned int sa_flags;\n\t__sigrestore_t sa_restorer;\n\tsigset_t sa_mask;\n};\n\nstruct k_sigaction {\n\tstruct sigaction sa;\n};\n\nstruct cpu_itimer {\n\tu64 expires;\n\tu64 incr;\n};\n\nstruct task_cputime_atomic {\n\tatomic64_t utime;\n\tatomic64_t stime;\n\tatomic64_t sum_exec_runtime;\n};\n\nstruct thread_group_cputimer {\n\tstruct task_cputime_atomic cputime_atomic;\n};\n\nstruct pacct_struct {\n\tint ac_flag;\n\tlong int ac_exitcode;\n\tlong unsigned int ac_mem;\n\tu64 ac_utime;\n\tu64 ac_stime;\n\tlong unsigned int ac_minflt;\n\tlong unsigned int ac_majflt;\n};\n\nstruct tty_struct;\n\nstruct autogroup;\n\nstruct taskstats;\n\nstruct tty_audit_buf;\n\nstruct signal_struct {\n\trefcount_t sigcnt;\n\tatomic_t live;\n\tint nr_threads;\n\tstruct list_head thread_head;\n\twait_queue_head_t wait_chldexit;\n\tstruct task_struct *curr_target;\n\tstruct sigpending shared_pending;\n\tstruct hlist_head multiprocess;\n\tint group_exit_code;\n\tint notify_count;\n\tstruct task_struct *group_exit_task;\n\tint group_stop_count;\n\tunsigned int flags;\n\tunsigned int is_child_subreaper: 1;\n\tunsigned int has_child_subreaper: 1;\n\tint posix_timer_id;\n\tstruct list_head posix_timers;\n\tstruct hrtimer real_timer;\n\tktime_t it_real_incr;\n\tstruct cpu_itimer it[2];\n\tstruct thread_group_cputimer cputimer;\n\tstruct posix_cputimers posix_cputimers;\n\tstruct pid *pids[4];\n\tatomic_t tick_dep_mask;\n\tstruct pid *tty_old_pgrp;\n\tint leader;\n\tstruct tty_struct *tty;\n\tstruct autogroup *autogroup;\n\tseqlock_t stats_lock;\n\tu64 utime;\n\tu64 stime;\n\tu64 cutime;\n\tu64 cstime;\n\tu64 gtime;\n\tu64 cgtime;\n\tstruct prev_cputime prev_cputime;\n\tlong unsigned int nvcsw;\n\tlong unsigned int nivcsw;\n\tlong unsigned int cnvcsw;\n\tlong unsigned int cnivcsw;\n\tlong unsigned int min_flt;\n\tlong unsigned int maj_flt;\n\tlong unsigned int cmin_flt;\n\tlong unsigned int cmaj_flt;\n\tlong unsigned int inblock;\n\tlong unsigned int oublock;\n\tlong unsigned int cinblock;\n\tlong unsigned int coublock;\n\tlong unsigned int maxrss;\n\tlong unsigned int cmaxrss;\n\tstruct task_io_accounting ioac;\n\tlong long unsigned int sum_sched_runtime;\n\tstruct rlimit rlim[16];\n\tstruct pacct_struct pacct;\n\tstruct taskstats *stats;\n\tunsigned int audit_tty;\n\tstruct tty_audit_buf *tty_audit_buf;\n\tbool oom_flag_origin;\n\tshort int oom_score_adj;\n\tshort int oom_score_adj_min;\n\tstruct mm_struct *oom_mm;\n\tstruct mutex cred_guard_mutex;\n\tstruct rw_semaphore exec_update_lock;\n};\n\nenum rseq_cs_flags_bit {\n\tRSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT = 0,\n\tRSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT = 1,\n\tRSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT = 2,\n};\n\nstruct rseq {\n\t__u32 cpu_id_start;\n\t__u32 cpu_id;\n\tunion {\n\t\t__u64 ptr64;\n\t\t__u64 ptr;\n\t} rseq_cs;\n\t__u32 flags;\n\tlong: 32;\n\tlong: 64;\n};\n\nenum perf_event_task_context {\n\tperf_invalid_context = 4294967295,\n\tperf_hw_context = 0,\n\tperf_sw_context = 1,\n\tperf_nr_task_contexts = 2,\n};\n\nstruct rq;\n\nstruct rq_flags;\n\nstruct sched_class {\n\tvoid (*enqueue_task)(struct rq *, struct task_struct *, int);\n\tvoid (*dequeue_task)(struct rq *, struct task_struct *, int);\n\tvoid (*yield_task)(struct rq *);\n\tbool (*yield_to_task)(struct rq *, struct task_struct *);\n\tvoid (*check_preempt_curr)(struct rq *, struct task_struct *, int);\n\tstruct task_struct * (*pick_next_task)(struct rq *);\n\tvoid (*put_prev_task)(struct rq *, struct task_struct *);\n\tvoid (*set_next_task)(struct rq *, struct task_struct *, bool);\n\tint (*balance)(struct rq *, struct task_struct *, struct rq_flags *);\n\tint (*select_task_rq)(struct task_struct *, int, int);\n\tvoid (*migrate_task_rq)(struct task_struct *, int);\n\tvoid (*task_woken)(struct rq *, struct task_struct *);\n\tvoid (*set_cpus_allowed)(struct task_struct *, const struct cpumask *, u32);\n\tvoid (*rq_online)(struct rq *);\n\tvoid (*rq_offline)(struct rq *);\n\tstruct rq * (*find_lock_rq)(struct task_struct *, struct rq *);\n\tvoid (*task_tick)(struct rq *, struct task_struct *, int);\n\tvoid (*task_fork)(struct task_struct *);\n\tvoid (*task_dead)(struct task_struct *);\n\tvoid (*switched_from)(struct rq *, struct task_struct *);\n\tvoid (*switched_to)(struct rq *, struct task_struct *);\n\tvoid (*prio_changed)(struct rq *, struct task_struct *, int);\n\tunsigned int (*get_rr_interval)(struct rq *, struct task_struct *);\n\tvoid (*update_curr)(struct rq *);\n\tvoid (*task_change_group)(struct task_struct *, int);\n};\n\nstruct kernel_cap_struct {\n\t__u32 cap[2];\n};\n\ntypedef struct kernel_cap_struct kernel_cap_t;\n\nstruct group_info;\n\nstruct cred {\n\tatomic_t usage;\n\tkuid_t uid;\n\tkgid_t gid;\n\tkuid_t suid;\n\tkgid_t sgid;\n\tkuid_t euid;\n\tkgid_t egid;\n\tkuid_t fsuid;\n\tkgid_t fsgid;\n\tunsigned int securebits;\n\tkernel_cap_t cap_inheritable;\n\tkernel_cap_t cap_permitted;\n\tkernel_cap_t cap_effective;\n\tkernel_cap_t cap_bset;\n\tkernel_cap_t cap_ambient;\n\tunsigned char jit_keyring;\n\tstruct key *session_keyring;\n\tstruct key *process_keyring;\n\tstruct key *thread_keyring;\n\tstruct key *request_key_auth;\n\tvoid *security;\n\tstruct user_struct *user;\n\tstruct user_namespace *user_ns;\n\tstruct group_info *group_info;\n\tunion {\n\t\tint non_rcu;\n\t\tstruct callback_head rcu;\n\t};\n};\n\ntypedef int32_t key_serial_t;\n\ntypedef uint32_t key_perm_t;\n\nstruct key_type;\n\nstruct key_tag;\n\nstruct keyring_index_key {\n\tlong unsigned int hash;\n\tunion {\n\t\tstruct {\n\t\t\tu16 desc_len;\n\t\t\tchar desc[6];\n\t\t};\n\t\tlong unsigned int x;\n\t};\n\tstruct key_type *type;\n\tstruct key_tag *domain_tag;\n\tconst char *description;\n};\n\nunion key_payload {\n\tvoid *rcu_data0;\n\tvoid *data[4];\n};\n\nstruct assoc_array_ptr;\n\nstruct assoc_array {\n\tstruct assoc_array_ptr *root;\n\tlong unsigned int nr_leaves_on_tree;\n};\n\nstruct watch_list;\n\nstruct key_user;\n\nstruct key_restriction;\n\nstruct key {\n\trefcount_t usage;\n\tkey_serial_t serial;\n\tunion {\n\t\tstruct list_head graveyard_link;\n\t\tstruct rb_node serial_node;\n\t};\n\tstruct watch_list *watchers;\n\tstruct rw_semaphore sem;\n\tstruct key_user *user;\n\tvoid *security;\n\tunion {\n\t\ttime64_t expiry;\n\t\ttime64_t revoked_at;\n\t};\n\ttime64_t last_used_at;\n\tkuid_t uid;\n\tkgid_t gid;\n\tkey_perm_t perm;\n\tshort unsigned int quotalen;\n\tshort unsigned int datalen;\n\tshort int state;\n\tlong unsigned int flags;\n\tunion {\n\t\tstruct keyring_index_key index_key;\n\t\tstruct {\n\t\t\tlong unsigned int hash;\n\t\t\tlong unsigned int len_desc;\n\t\t\tstruct key_type *type;\n\t\t\tstruct key_tag *domain_tag;\n\t\t\tchar *description;\n\t\t};\n\t};\n\tunion {\n\t\tunion key_payload payload;\n\t\tstruct {\n\t\t\tstruct list_head name_link;\n\t\t\tstruct assoc_array keys;\n\t\t};\n\t};\n\tstruct key_restriction *restrict_link;\n};\n\nstruct sighand_struct {\n\tspinlock_t siglock;\n\trefcount_t count;\n\twait_queue_head_t signalfd_wqh;\n\tstruct k_sigaction action[64];\n};\n\nstruct io_cq;\n\nstruct io_context {\n\tatomic_long_t refcount;\n\tatomic_t active_ref;\n\tatomic_t nr_tasks;\n\tspinlock_t lock;\n\tshort unsigned int ioprio;\n\tstruct xarray icq_tree;\n\tstruct io_cq *icq_hint;\n\tstruct hlist_head icq_list;\n\tstruct work_struct release_work;\n};\n\nenum rseq_event_mask_bits {\n\tRSEQ_EVENT_PREEMPT_BIT = 0,\n\tRSEQ_EVENT_SIGNAL_BIT = 1,\n\tRSEQ_EVENT_MIGRATE_BIT = 2,\n};\n\nenum fixed_addresses {\n\tVSYSCALL_PAGE = 511,\n\tFIX_DBGP_BASE = 512,\n\tFIX_EARLYCON_MEM_BASE = 513,\n\tFIX_OHCI1394_BASE = 514,\n\tFIX_APIC_BASE = 515,\n\tFIX_IO_APIC_BASE_0 = 516,\n\tFIX_IO_APIC_BASE_END = 643,\n\tFIX_PARAVIRT_BOOTMAP = 644,\n\tFIX_APEI_GHES_IRQ = 645,\n\tFIX_APEI_GHES_NMI = 646,\n\t__end_of_permanent_fixed_addresses = 647,\n\tFIX_BTMAP_END = 1024,\n\tFIX_BTMAP_BEGIN = 1535,\n\tFIX_TBOOT_BASE = 1536,\n\t__end_of_fixed_addresses = 1537,\n};\n\nstruct hlist_bl_node;\n\nstruct hlist_bl_head {\n\tstruct hlist_bl_node *first;\n};\n\nstruct hlist_bl_node {\n\tstruct hlist_bl_node *next;\n\tstruct hlist_bl_node **pprev;\n};\n\nstruct lockref {\n\tunion {\n\t\t__u64 lock_count;\n\t\tstruct {\n\t\t\tspinlock_t lock;\n\t\t\tint count;\n\t\t};\n\t};\n};\n\nstruct qstr {\n\tunion {\n\t\tstruct {\n\t\t\tu32 hash;\n\t\t\tu32 len;\n\t\t};\n\t\tu64 hash_len;\n\t};\n\tconst unsigned char *name;\n};\n\nstruct dentry_operations;\n\nstruct dentry {\n\tunsigned int d_flags;\n\tseqcount_spinlock_t d_seq;\n\tstruct hlist_bl_node d_hash;\n\tstruct dentry *d_parent;\n\tstruct qstr d_name;\n\tstruct inode *d_inode;\n\tunsigned char d_iname[32];\n\tstruct lockref d_lockref;\n\tconst struct dentry_operations *d_op;\n\tstruct super_block *d_sb;\n\tlong unsigned int d_time;\n\tvoid *d_fsdata;\n\tunion {\n\t\tstruct list_head d_lru;\n\t\twait_queue_head_t *d_wait;\n\t};\n\tstruct list_head d_child;\n\tstruct list_head d_subdirs;\n\tunion {\n\t\tstruct hlist_node d_alias;\n\t\tstruct hlist_bl_node d_in_lookup_hash;\n\t\tstruct callback_head d_rcu;\n\t} d_u;\n};\n\nstruct posix_acl;\n\nstruct inode_operations;\n\nstruct bdi_writeback;\n\nstruct file_lock_context;\n\nstruct cdev;\n\nstruct fsnotify_mark_connector;\n\nstruct fscrypt_info;\n\nstruct fsverity_info;\n\nstruct inode {\n\tumode_t i_mode;\n\tshort unsigned int i_opflags;\n\tkuid_t i_uid;\n\tkgid_t i_gid;\n\tunsigned int i_flags;\n\tstruct posix_acl *i_acl;\n\tstruct posix_acl *i_default_acl;\n\tconst struct inode_operations *i_op;\n\tstruct super_block *i_sb;\n\tstruct address_space *i_mapping;\n\tvoid *i_security;\n\tlong unsigned int i_ino;\n\tunion {\n\t\tconst unsigned int i_nlink;\n\t\tunsigned int __i_nlink;\n\t};\n\tdev_t i_rdev;\n\tloff_t i_size;\n\tstruct timespec64 i_atime;\n\tstruct timespec64 i_mtime;\n\tstruct timespec64 i_ctime;\n\tspinlock_t i_lock;\n\tshort unsigned int i_bytes;\n\tu8 i_blkbits;\n\tu8 i_write_hint;\n\tblkcnt_t i_blocks;\n\tlong unsigned int i_state;\n\tstruct rw_semaphore i_rwsem;\n\tlong unsigned int dirtied_when;\n\tlong unsigned int dirtied_time_when;\n\tstruct hlist_node i_hash;\n\tstruct list_head i_io_list;\n\tstruct bdi_writeback *i_wb;\n\tint i_wb_frn_winner;\n\tu16 i_wb_frn_avg_time;\n\tu16 i_wb_frn_history;\n\tstruct list_head i_lru;\n\tstruct list_head i_sb_list;\n\tstruct list_head i_wb_list;\n\tunion {\n\t\tstruct hlist_head i_dentry;\n\t\tstruct callback_head i_rcu;\n\t};\n\tatomic64_t i_version;\n\tatomic64_t i_sequence;\n\tatomic_t i_count;\n\tatomic_t i_dio_count;\n\tatomic_t i_writecount;\n\tatomic_t i_readcount;\n\tunion {\n\t\tconst struct file_operations *i_fop;\n\t\tvoid (*free_inode)(struct inode *);\n\t};\n\tstruct file_lock_context *i_flctx;\n\tstruct address_space i_data;\n\tstruct list_head i_devices;\n\tunion {\n\t\tstruct pipe_inode_info *i_pipe;\n\t\tstruct cdev *i_cdev;\n\t\tchar *i_link;\n\t\tunsigned int i_dir_seq;\n\t};\n\t__u32 i_generation;\n\t__u32 i_fsnotify_mask;\n\tstruct fsnotify_mark_connector *i_fsnotify_marks;\n\tstruct fscrypt_info *i_crypt_info;\n\tstruct fsverity_info *i_verity_info;\n\tvoid *i_private;\n};\n\nstruct dentry_operations {\n\tint (*d_revalidate)(struct dentry *, unsigned int);\n\tint (*d_weak_revalidate)(struct dentry *, unsigned int);\n\tint (*d_hash)(const struct dentry *, struct qstr *);\n\tint (*d_compare)(const struct dentry *, unsigned int, const char *, const struct qstr *);\n\tint (*d_delete)(const struct dentry *);\n\tint (*d_init)(struct dentry *);\n\tvoid (*d_release)(struct dentry *);\n\tvoid (*d_prune)(struct dentry *);\n\tvoid (*d_iput)(struct dentry *, struct inode *);\n\tchar * (*d_dname)(struct dentry *, char *, int);\n\tstruct vfsmount * (*d_automount)(struct path *);\n\tint (*d_manage)(const struct path *, bool);\n\tstruct dentry * (*d_real)(struct dentry *, const struct inode *);\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct mtd_info;\n\ntypedef long long int qsize_t;\n\nstruct quota_format_type;\n\nstruct mem_dqinfo {\n\tstruct quota_format_type *dqi_format;\n\tint dqi_fmt_id;\n\tstruct list_head dqi_dirty_list;\n\tlong unsigned int dqi_flags;\n\tunsigned int dqi_bgrace;\n\tunsigned int dqi_igrace;\n\tqsize_t dqi_max_spc_limit;\n\tqsize_t dqi_max_ino_limit;\n\tvoid *dqi_priv;\n};\n\nstruct quota_format_ops;\n\nstruct quota_info {\n\tunsigned int flags;\n\tstruct rw_semaphore dqio_sem;\n\tstruct inode *files[3];\n\tstruct mem_dqinfo info[3];\n\tconst struct quota_format_ops *ops[3];\n};\n\nstruct rcu_sync {\n\tint gp_state;\n\tint gp_count;\n\twait_queue_head_t gp_wait;\n\tstruct callback_head cb_head;\n};\n\nstruct rcuwait {\n\tstruct task_struct *task;\n};\n\nstruct percpu_rw_semaphore {\n\tstruct rcu_sync rss;\n\tunsigned int *read_count;\n\tstruct rcuwait writer;\n\twait_queue_head_t waiters;\n\tatomic_t block;\n};\n\nstruct sb_writers {\n\tint frozen;\n\twait_queue_head_t wait_unfrozen;\n\tstruct percpu_rw_semaphore rw_sem[3];\n};\n\ntypedef struct {\n\t__u8 b[16];\n} uuid_t;\n\nstruct list_lru_node;\n\nstruct list_lru {\n\tstruct list_lru_node *node;\n\tstruct list_head list;\n\tint shrinker_id;\n\tbool memcg_aware;\n};\n\nstruct super_operations;\n\nstruct dquot_operations;\n\nstruct quotactl_ops;\n\nstruct export_operations;\n\nstruct xattr_handler;\n\nstruct fscrypt_operations;\n\nstruct fsverity_operations;\n\nstruct unicode_map;\n\nstruct block_device;\n\nstruct workqueue_struct;\n\nstruct super_block {\n\tstruct list_head s_list;\n\tdev_t s_dev;\n\tunsigned char s_blocksize_bits;\n\tlong unsigned int s_blocksize;\n\tloff_t s_maxbytes;\n\tstruct file_system_type *s_type;\n\tconst struct super_operations *s_op;\n\tconst struct dquot_operations *dq_op;\n\tconst struct quotactl_ops *s_qcop;\n\tconst struct export_operations *s_export_op;\n\tlong unsigned int s_flags;\n\tlong unsigned int s_iflags;\n\tlong unsigned int s_magic;\n\tstruct dentry *s_root;\n\tstruct rw_semaphore s_umount;\n\tint s_count;\n\tatomic_t s_active;\n\tvoid *s_security;\n\tconst struct xattr_handler **s_xattr;\n\tconst struct fscrypt_operations *s_cop;\n\tstruct key *s_master_keys;\n\tconst struct fsverity_operations *s_vop;\n\tstruct unicode_map *s_encoding;\n\t__u16 s_encoding_flags;\n\tstruct hlist_bl_head s_roots;\n\tstruct list_head s_mounts;\n\tstruct block_device *s_bdev;\n\tstruct backing_dev_info *s_bdi;\n\tstruct mtd_info *s_mtd;\n\tstruct hlist_node s_instances;\n\tunsigned int s_quota_types;\n\tstruct quota_info s_dquot;\n\tstruct sb_writers s_writers;\n\tvoid *s_fs_info;\n\tu32 s_time_gran;\n\ttime64_t s_time_min;\n\ttime64_t s_time_max;\n\t__u32 s_fsnotify_mask;\n\tstruct fsnotify_mark_connector *s_fsnotify_marks;\n\tchar s_id[32];\n\tuuid_t s_uuid;\n\tunsigned int s_max_links;\n\tfmode_t s_mode;\n\tstruct mutex s_vfs_rename_mutex;\n\tconst char *s_subtype;\n\tconst struct dentry_operations *s_d_op;\n\tint cleancache_poolid;\n\tstruct shrinker s_shrink;\n\tatomic_long_t s_remove_count;\n\tatomic_long_t s_fsnotify_inode_refs;\n\tint s_readonly_remount;\n\terrseq_t s_wb_err;\n\tstruct workqueue_struct *s_dio_done_wq;\n\tstruct hlist_head s_pins;\n\tstruct user_namespace *s_user_ns;\n\tstruct list_lru s_dentry_lru;\n\tstruct list_lru s_inode_lru;\n\tstruct callback_head rcu;\n\tstruct work_struct destroy_work;\n\tstruct mutex s_sync_lock;\n\tint s_stack_depth;\n\tint: 32;\n\tspinlock_t s_inode_list_lock;\n\tstruct list_head s_inodes;\n\tspinlock_t s_inode_wblist_lock;\n\tstruct list_head s_inodes_wb;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct kstat {\n\tu32 result_mask;\n\tumode_t mode;\n\tunsigned int nlink;\n\tuint32_t blksize;\n\tu64 attributes;\n\tu64 attributes_mask;\n\tu64 ino;\n\tdev_t dev;\n\tdev_t rdev;\n\tkuid_t uid;\n\tkgid_t gid;\n\tloff_t size;\n\tstruct timespec64 atime;\n\tstruct timespec64 mtime;\n\tstruct timespec64 ctime;\n\tstruct timespec64 btime;\n\tu64 blocks;\n\tu64 mnt_id;\n};\n\nstruct list_lru_one {\n\tstruct list_head list;\n\tlong int nr_items;\n};\n\nstruct list_lru_memcg {\n\tstruct callback_head rcu;\n\tstruct list_lru_one *lru[0];\n};\n\nstruct list_lru_node {\n\tspinlock_t lock;\n\tstruct list_lru_one lru;\n\tstruct list_lru_memcg *memcg_lrus;\n\tlong int nr_items;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum migrate_mode {\n\tMIGRATE_ASYNC = 0,\n\tMIGRATE_SYNC_LIGHT = 1,\n\tMIGRATE_SYNC = 2,\n\tMIGRATE_SYNC_NO_COPY = 3,\n};\n\nstruct key_tag {\n\tstruct callback_head rcu;\n\trefcount_t usage;\n\tbool removed;\n};\n\ntypedef int (*request_key_actor_t)(struct key *, void *);\n\nstruct key_preparsed_payload;\n\nstruct key_match_data;\n\nstruct kernel_pkey_params;\n\nstruct kernel_pkey_query;\n\nstruct key_type {\n\tconst char *name;\n\tsize_t def_datalen;\n\tunsigned int flags;\n\tint (*vet_description)(const char *);\n\tint (*preparse)(struct key_preparsed_payload *);\n\tvoid (*free_preparse)(struct key_preparsed_payload *);\n\tint (*instantiate)(struct key *, struct key_preparsed_payload *);\n\tint (*update)(struct key *, struct key_preparsed_payload *);\n\tint (*match_preparse)(struct key_match_data *);\n\tvoid (*match_free)(struct key_match_data *);\n\tvoid (*revoke)(struct key *);\n\tvoid (*destroy)(struct key *);\n\tvoid (*describe)(const struct key *, struct seq_file *);\n\tlong int (*read)(const struct key *, char *, size_t);\n\trequest_key_actor_t request_key;\n\tstruct key_restriction * (*lookup_restriction)(const char *);\n\tint (*asym_query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);\n\tint (*asym_eds_op)(struct kernel_pkey_params *, const void *, void *);\n\tint (*asym_verify_signature)(struct kernel_pkey_params *, const void *, const void *);\n\tstruct list_head link;\n\tstruct lock_class_key lock_class;\n};\n\ntypedef int (*key_restrict_link_func_t)(struct key *, const struct key_type *, const union key_payload *, struct key *);\n\nstruct key_restriction {\n\tkey_restrict_link_func_t check;\n\tstruct key *key;\n\tstruct key_type *keytype;\n};\n\nstruct group_info {\n\tatomic_t usage;\n\tint ngroups;\n\tkgid_t gid[0];\n};\n\nstruct delayed_call {\n\tvoid (*fn)(void *);\n\tvoid *arg;\n};\n\nstruct io_cq {\n\tstruct request_queue *q;\n\tstruct io_context *ioc;\n\tunion {\n\t\tstruct list_head q_node;\n\t\tstruct kmem_cache *__rcu_icq_cache;\n\t};\n\tunion {\n\t\tstruct hlist_node ioc_node;\n\t\tstruct callback_head __rcu_head;\n\t};\n\tunsigned int flags;\n};\n\nstruct wait_page_queue;\n\nstruct kiocb {\n\tstruct file *ki_filp;\n\tloff_t ki_pos;\n\tvoid (*ki_complete)(struct kiocb *, long int, long int);\n\tvoid *private;\n\tint ki_flags;\n\tu16 ki_hint;\n\tu16 ki_ioprio;\n\tunion {\n\t\tunsigned int ki_cookie;\n\t\tstruct wait_page_queue *ki_waitq;\n\t};\n};\n\nstruct iattr {\n\tunsigned int ia_valid;\n\tumode_t ia_mode;\n\tkuid_t ia_uid;\n\tkgid_t ia_gid;\n\tloff_t ia_size;\n\tstruct timespec64 ia_atime;\n\tstruct timespec64 ia_mtime;\n\tstruct timespec64 ia_ctime;\n\tstruct file *ia_file;\n};\n\ntypedef __kernel_uid32_t projid_t;\n\ntypedef struct {\n\tprojid_t val;\n} kprojid_t;\n\nenum quota_type {\n\tUSRQUOTA = 0,\n\tGRPQUOTA = 1,\n\tPRJQUOTA = 2,\n};\n\nstruct kqid {\n\tunion {\n\t\tkuid_t uid;\n\t\tkgid_t gid;\n\t\tkprojid_t projid;\n\t};\n\tenum quota_type type;\n};\n\nstruct mem_dqblk {\n\tqsize_t dqb_bhardlimit;\n\tqsize_t dqb_bsoftlimit;\n\tqsize_t dqb_curspace;\n\tqsize_t dqb_rsvspace;\n\tqsize_t dqb_ihardlimit;\n\tqsize_t dqb_isoftlimit;\n\tqsize_t dqb_curinodes;\n\ttime64_t dqb_btime;\n\ttime64_t dqb_itime;\n};\n\nstruct dquot {\n\tstruct hlist_node dq_hash;\n\tstruct list_head dq_inuse;\n\tstruct list_head dq_free;\n\tstruct list_head dq_dirty;\n\tstruct mutex dq_lock;\n\tspinlock_t dq_dqb_lock;\n\tatomic_t dq_count;\n\tstruct super_block *dq_sb;\n\tstruct kqid dq_id;\n\tloff_t dq_off;\n\tlong unsigned int dq_flags;\n\tstruct mem_dqblk dq_dqb;\n};\n\nenum {\n\tDQF_ROOT_SQUASH_B = 0,\n\tDQF_SYS_FILE_B = 16,\n\tDQF_PRIVATE = 17,\n};\n\nstruct quota_format_type {\n\tint qf_fmt_id;\n\tconst struct quota_format_ops *qf_ops;\n\tstruct module *qf_owner;\n\tstruct quota_format_type *qf_next;\n};\n\nenum {\n\tDQST_LOOKUPS = 0,\n\tDQST_DROPS = 1,\n\tDQST_READS = 2,\n\tDQST_WRITES = 3,\n\tDQST_CACHE_HITS = 4,\n\tDQST_ALLOC_DQUOTS = 5,\n\tDQST_FREE_DQUOTS = 6,\n\tDQST_SYNCS = 7,\n\t_DQST_DQSTAT_LAST = 8,\n};\n\nstruct quota_format_ops {\n\tint (*check_quota_file)(struct super_block *, int);\n\tint (*read_file_info)(struct super_block *, int);\n\tint (*write_file_info)(struct super_block *, int);\n\tint (*free_file_info)(struct super_block *, int);\n\tint (*read_dqblk)(struct dquot *);\n\tint (*commit_dqblk)(struct dquot *);\n\tint (*release_dqblk)(struct dquot *);\n\tint (*get_next_id)(struct super_block *, struct kqid *);\n};\n\nstruct dquot_operations {\n\tint (*write_dquot)(struct dquot *);\n\tstruct dquot * (*alloc_dquot)(struct super_block *, int);\n\tvoid (*destroy_dquot)(struct dquot *);\n\tint (*acquire_dquot)(struct dquot *);\n\tint (*release_dquot)(struct dquot *);\n\tint (*mark_dirty)(struct dquot *);\n\tint (*write_info)(struct super_block *, int);\n\tqsize_t * (*get_reserved_space)(struct inode *);\n\tint (*get_projid)(struct inode *, kprojid_t *);\n\tint (*get_inode_usage)(struct inode *, qsize_t *);\n\tint (*get_next_id)(struct super_block *, struct kqid *);\n};\n\nstruct qc_dqblk {\n\tint d_fieldmask;\n\tu64 d_spc_hardlimit;\n\tu64 d_spc_softlimit;\n\tu64 d_ino_hardlimit;\n\tu64 d_ino_softlimit;\n\tu64 d_space;\n\tu64 d_ino_count;\n\ts64 d_ino_timer;\n\ts64 d_spc_timer;\n\tint d_ino_warns;\n\tint d_spc_warns;\n\tu64 d_rt_spc_hardlimit;\n\tu64 d_rt_spc_softlimit;\n\tu64 d_rt_space;\n\ts64 d_rt_spc_timer;\n\tint d_rt_spc_warns;\n};\n\nstruct qc_type_state {\n\tunsigned int flags;\n\tunsigned int spc_timelimit;\n\tunsigned int ino_timelimit;\n\tunsigned int rt_spc_timelimit;\n\tunsigned int spc_warnlimit;\n\tunsigned int ino_warnlimit;\n\tunsigned int rt_spc_warnlimit;\n\tlong long unsigned int ino;\n\tblkcnt_t blocks;\n\tblkcnt_t nextents;\n};\n\nstruct qc_state {\n\tunsigned int s_incoredqs;\n\tstruct qc_type_state s_state[3];\n};\n\nstruct qc_info {\n\tint i_fieldmask;\n\tunsigned int i_flags;\n\tunsigned int i_spc_timelimit;\n\tunsigned int i_ino_timelimit;\n\tunsigned int i_rt_spc_timelimit;\n\tunsigned int i_spc_warnlimit;\n\tunsigned int i_ino_warnlimit;\n\tunsigned int i_rt_spc_warnlimit;\n};\n\nstruct quotactl_ops {\n\tint (*quota_on)(struct super_block *, int, int, const struct path *);\n\tint (*quota_off)(struct super_block *, int);\n\tint (*quota_enable)(struct super_block *, unsigned int);\n\tint (*quota_disable)(struct super_block *, unsigned int);\n\tint (*quota_sync)(struct super_block *, int);\n\tint (*set_info)(struct super_block *, int, struct qc_info *);\n\tint (*get_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);\n\tint (*get_nextdqblk)(struct super_block *, struct kqid *, struct qc_dqblk *);\n\tint (*set_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);\n\tint (*get_state)(struct super_block *, struct qc_state *);\n\tint (*rm_xquota)(struct super_block *, unsigned int);\n};\n\nstruct writeback_control;\n\nstruct readahead_control;\n\nstruct swap_info_struct;\n\nstruct address_space_operations {\n\tint (*writepage)(struct page *, struct writeback_control *);\n\tint (*readpage)(struct file *, struct page *);\n\tint (*writepages)(struct address_space *, struct writeback_control *);\n\tint (*set_page_dirty)(struct page *);\n\tint (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int);\n\tvoid (*readahead)(struct readahead_control *);\n\tint (*write_begin)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page **, void **);\n\tint (*write_end)(struct file *, struct address_space *, loff_t, unsigned int, unsigned int, struct page *, void *);\n\tsector_t (*bmap)(struct address_space *, sector_t);\n\tvoid (*invalidatepage)(struct page *, unsigned int, unsigned int);\n\tint (*releasepage)(struct page *, gfp_t);\n\tvoid (*freepage)(struct page *);\n\tssize_t (*direct_IO)(struct kiocb *, struct iov_iter *);\n\tint (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode);\n\tbool (*isolate_page)(struct page *, isolate_mode_t);\n\tvoid (*putback_page)(struct page *);\n\tint (*launder_page)(struct page *);\n\tint (*is_partially_uptodate)(struct page *, long unsigned int, long unsigned int);\n\tvoid (*is_dirty_writeback)(struct page *, bool *, bool *);\n\tint (*error_remove_page)(struct address_space *, struct page *);\n\tint (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *);\n\tvoid (*swap_deactivate)(struct file *);\n};\n\nstruct fiemap_extent_info;\n\nstruct inode_operations {\n\tstruct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int);\n\tconst char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *);\n\tint (*permission)(struct inode *, int);\n\tstruct posix_acl * (*get_acl)(struct inode *, int);\n\tint (*readlink)(struct dentry *, char *, int);\n\tint (*create)(struct inode *, struct dentry *, umode_t, bool);\n\tint (*link)(struct dentry *, struct inode *, struct dentry *);\n\tint (*unlink)(struct inode *, struct dentry *);\n\tint (*symlink)(struct inode *, struct dentry *, const char *);\n\tint (*mkdir)(struct inode *, struct dentry *, umode_t);\n\tint (*rmdir)(struct inode *, struct dentry *);\n\tint (*mknod)(struct inode *, struct dentry *, umode_t, dev_t);\n\tint (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int);\n\tint (*setattr)(struct dentry *, struct iattr *);\n\tint (*getattr)(const struct path *, struct kstat *, u32, unsigned int);\n\tssize_t (*listxattr)(struct dentry *, char *, size_t);\n\tint (*fiemap)(struct inode *, struct fiemap_extent_info *, u64, u64);\n\tint (*update_time)(struct inode *, struct timespec64 *, int);\n\tint (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t);\n\tint (*tmpfile)(struct inode *, struct dentry *, umode_t);\n\tint (*set_acl)(struct inode *, struct posix_acl *, int);\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct file_lock_context {\n\tspinlock_t flc_lock;\n\tstruct list_head flc_flock;\n\tstruct list_head flc_posix;\n\tstruct list_head flc_lease;\n};\n\nstruct file_lock_operations {\n\tvoid (*fl_copy_lock)(struct file_lock *, struct file_lock *);\n\tvoid (*fl_release_private)(struct file_lock *);\n};\n\nstruct nlm_lockowner;\n\nstruct nfs_lock_info {\n\tu32 state;\n\tstruct nlm_lockowner *owner;\n\tstruct list_head list;\n};\n\nstruct nfs4_lock_state;\n\nstruct nfs4_lock_info {\n\tstruct nfs4_lock_state *owner;\n};\n\nstruct fasync_struct;\n\nstruct lock_manager_operations;\n\nstruct file_lock {\n\tstruct file_lock *fl_blocker;\n\tstruct list_head fl_list;\n\tstruct hlist_node fl_link;\n\tstruct list_head fl_blocked_requests;\n\tstruct list_head fl_blocked_member;\n\tfl_owner_t fl_owner;\n\tunsigned int fl_flags;\n\tunsigned char fl_type;\n\tunsigned int fl_pid;\n\tint fl_link_cpu;\n\twait_queue_head_t fl_wait;\n\tstruct file *fl_file;\n\tloff_t fl_start;\n\tloff_t fl_end;\n\tstruct fasync_struct *fl_fasync;\n\tlong unsigned int fl_break_time;\n\tlong unsigned int fl_downgrade_time;\n\tconst struct file_lock_operations *fl_ops;\n\tconst struct lock_manager_operations *fl_lmops;\n\tunion {\n\t\tstruct nfs_lock_info nfs_fl;\n\t\tstruct nfs4_lock_info nfs4_fl;\n\t\tstruct {\n\t\t\tstruct list_head link;\n\t\t\tint state;\n\t\t\tunsigned int debug_id;\n\t\t} afs;\n\t} fl_u;\n};\n\nstruct lock_manager_operations {\n\tfl_owner_t (*lm_get_owner)(fl_owner_t);\n\tvoid (*lm_put_owner)(fl_owner_t);\n\tvoid (*lm_notify)(struct file_lock *);\n\tint (*lm_grant)(struct file_lock *, int);\n\tbool (*lm_break)(struct file_lock *);\n\tint (*lm_change)(struct file_lock *, int, struct list_head *);\n\tvoid (*lm_setup)(struct file_lock *, void **);\n\tbool (*lm_breaker_owns_lease)(struct file_lock *);\n};\n\nstruct fasync_struct {\n\trwlock_t fa_lock;\n\tint magic;\n\tint fa_fd;\n\tstruct fasync_struct *fa_next;\n\tstruct file *fa_file;\n\tstruct callback_head fa_rcu;\n};\n\nenum {\n\tSB_UNFROZEN = 0,\n\tSB_FREEZE_WRITE = 1,\n\tSB_FREEZE_PAGEFAULT = 2,\n\tSB_FREEZE_FS = 3,\n\tSB_FREEZE_COMPLETE = 4,\n};\n\nstruct kstatfs;\n\nstruct super_operations {\n\tstruct inode * (*alloc_inode)(struct super_block *);\n\tvoid (*destroy_inode)(struct inode *);\n\tvoid (*free_inode)(struct inode *);\n\tvoid (*dirty_inode)(struct inode *, int);\n\tint (*write_inode)(struct inode *, struct writeback_control *);\n\tint (*drop_inode)(struct inode *);\n\tvoid (*evict_inode)(struct inode *);\n\tvoid (*put_super)(struct super_block *);\n\tint (*sync_fs)(struct super_block *, int);\n\tint (*freeze_super)(struct super_block *);\n\tint (*freeze_fs)(struct super_block *);\n\tint (*thaw_super)(struct super_block *);\n\tint (*unfreeze_fs)(struct super_block *);\n\tint (*statfs)(struct dentry *, struct kstatfs *);\n\tint (*remount_fs)(struct super_block *, int *, char *);\n\tvoid (*umount_begin)(struct super_block *);\n\tint (*show_options)(struct seq_file *, struct dentry *);\n\tint (*show_devname)(struct seq_file *, struct dentry *);\n\tint (*show_path)(struct seq_file *, struct dentry *);\n\tint (*show_stats)(struct seq_file *, struct dentry *);\n\tssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);\n\tssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);\n\tstruct dquot ** (*get_dquots)(struct inode *);\n\tint (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t);\n\tlong int (*nr_cached_objects)(struct super_block *, struct shrink_control *);\n\tlong int (*free_cached_objects)(struct super_block *, struct shrink_control *);\n};\n\nstruct fid;\n\nstruct iomap;\n\nstruct export_operations {\n\tint (*encode_fh)(struct inode *, __u32 *, int *, struct inode *);\n\tstruct dentry * (*fh_to_dentry)(struct super_block *, struct fid *, int, int);\n\tstruct dentry * (*fh_to_parent)(struct super_block *, struct fid *, int, int);\n\tint (*get_name)(struct dentry *, char *, struct dentry *);\n\tstruct dentry * (*get_parent)(struct dentry *);\n\tint (*commit_metadata)(struct inode *);\n\tint (*get_uuid)(struct super_block *, u8 *, u32 *, u64 *);\n\tint (*map_blocks)(struct inode *, loff_t, u64, struct iomap *, bool, u32 *);\n\tint (*commit_blocks)(struct inode *, struct iomap *, int, struct iattr *);\n\tlong unsigned int flags;\n};\n\nstruct xattr_handler {\n\tconst char *name;\n\tconst char *prefix;\n\tint flags;\n\tbool (*list)(struct dentry *);\n\tint (*get)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, void *, size_t);\n\tint (*set)(const struct xattr_handler *, struct dentry *, struct inode *, const char *, const void *, size_t, int);\n};\n\nunion fscrypt_policy;\n\nstruct fscrypt_operations {\n\tunsigned int flags;\n\tconst char *key_prefix;\n\tint (*get_context)(struct inode *, void *, size_t);\n\tint (*set_context)(struct inode *, const void *, size_t, void *);\n\tconst union fscrypt_policy * (*get_dummy_policy)(struct super_block *);\n\tbool (*empty_dir)(struct inode *);\n\tunsigned int max_namelen;\n\tbool (*has_stable_inodes)(struct super_block *);\n\tvoid (*get_ino_and_lblk_bits)(struct super_block *, int *, int *);\n\tint (*get_num_devices)(struct super_block *);\n\tvoid (*get_devices)(struct super_block *, struct request_queue **);\n};\n\nstruct fsverity_operations {\n\tint (*begin_enable_verity)(struct file *);\n\tint (*end_enable_verity)(struct file *, const void *, size_t, u64);\n\tint (*get_verity_descriptor)(struct inode *, void *, size_t);\n\tstruct page * (*read_merkle_tree_page)(struct inode *, long unsigned int, long unsigned int);\n\tint (*write_merkle_tree_block)(struct inode *, const void *, u64, int);\n};\n\ntypedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, unsigned int);\n\nstruct dir_context {\n\tfilldir_t actor;\n\tloff_t pos;\n};\n\nstruct p_log;\n\nstruct fs_parameter;\n\nstruct fs_parse_result;\n\ntypedef int fs_param_type(struct p_log *, const struct fs_parameter_spec *, struct fs_parameter *, struct fs_parse_result *);\n\nstruct fs_parameter_spec {\n\tconst char *name;\n\tfs_param_type *type;\n\tu8 opt;\n\tshort unsigned int flags;\n\tconst void *data;\n};\n\nenum compound_dtor_id {\n\tNULL_COMPOUND_DTOR = 0,\n\tCOMPOUND_PAGE_DTOR = 1,\n\tHUGETLB_PAGE_DTOR = 2,\n\tTRANSHUGE_PAGE_DTOR = 3,\n\tNR_COMPOUND_DTORS = 4,\n};\n\nenum vm_event_item {\n\tPGPGIN = 0,\n\tPGPGOUT = 1,\n\tPSWPIN = 2,\n\tPSWPOUT = 3,\n\tPGALLOC_DMA = 4,\n\tPGALLOC_DMA32 = 5,\n\tPGALLOC_NORMAL = 6,\n\tPGALLOC_MOVABLE = 7,\n\tALLOCSTALL_DMA = 8,\n\tALLOCSTALL_DMA32 = 9,\n\tALLOCSTALL_NORMAL = 10,\n\tALLOCSTALL_MOVABLE = 11,\n\tPGSCAN_SKIP_DMA = 12,\n\tPGSCAN_SKIP_DMA32 = 13,\n\tPGSCAN_SKIP_NORMAL = 14,\n\tPGSCAN_SKIP_MOVABLE = 15,\n\tPGFREE = 16,\n\tPGACTIVATE = 17,\n\tPGDEACTIVATE = 18,\n\tPGLAZYFREE = 19,\n\tPGFAULT = 20,\n\tPGMAJFAULT = 21,\n\tPGLAZYFREED = 22,\n\tPGREFILL = 23,\n\tPGREUSE = 24,\n\tPGSTEAL_KSWAPD = 25,\n\tPGSTEAL_DIRECT = 26,\n\tPGSCAN_KSWAPD = 27,\n\tPGSCAN_DIRECT = 28,\n\tPGSCAN_DIRECT_THROTTLE = 29,\n\tPGSCAN_ANON = 30,\n\tPGSCAN_FILE = 31,\n\tPGSTEAL_ANON = 32,\n\tPGSTEAL_FILE = 33,\n\tPGSCAN_ZONE_RECLAIM_FAILED = 34,\n\tPGINODESTEAL = 35,\n\tSLABS_SCANNED = 36,\n\tKSWAPD_INODESTEAL = 37,\n\tKSWAPD_LOW_WMARK_HIT_QUICKLY = 38,\n\tKSWAPD_HIGH_WMARK_HIT_QUICKLY = 39,\n\tPAGEOUTRUN = 40,\n\tPGROTATED = 41,\n\tDROP_PAGECACHE = 42,\n\tDROP_SLAB = 43,\n\tOOM_KILL = 44,\n\tNUMA_PTE_UPDATES = 45,\n\tNUMA_HUGE_PTE_UPDATES = 46,\n\tNUMA_HINT_FAULTS = 47,\n\tNUMA_HINT_FAULTS_LOCAL = 48,\n\tNUMA_PAGE_MIGRATE = 49,\n\tPGMIGRATE_SUCCESS = 50,\n\tPGMIGRATE_FAIL = 51,\n\tTHP_MIGRATION_SUCCESS = 52,\n\tTHP_MIGRATION_FAIL = 53,\n\tTHP_MIGRATION_SPLIT = 54,\n\tCOMPACTMIGRATE_SCANNED = 55,\n\tCOMPACTFREE_SCANNED = 56,\n\tCOMPACTISOLATED = 57,\n\tCOMPACTSTALL = 58,\n\tCOMPACTFAIL = 59,\n\tCOMPACTSUCCESS = 60,\n\tKCOMPACTD_WAKE = 61,\n\tKCOMPACTD_MIGRATE_SCANNED = 62,\n\tKCOMPACTD_FREE_SCANNED = 63,\n\tHTLB_BUDDY_PGALLOC = 64,\n\tHTLB_BUDDY_PGALLOC_FAIL = 65,\n\tUNEVICTABLE_PGCULLED = 66,\n\tUNEVICTABLE_PGSCANNED = 67,\n\tUNEVICTABLE_PGRESCUED = 68,\n\tUNEVICTABLE_PGMLOCKED = 69,\n\tUNEVICTABLE_PGMUNLOCKED = 70,\n\tUNEVICTABLE_PGCLEARED = 71,\n\tUNEVICTABLE_PGSTRANDED = 72,\n\tTHP_FAULT_ALLOC = 73,\n\tTHP_FAULT_FALLBACK = 74,\n\tTHP_FAULT_FALLBACK_CHARGE = 75,\n\tTHP_COLLAPSE_ALLOC = 76,\n\tTHP_COLLAPSE_ALLOC_FAILED = 77,\n\tTHP_FILE_ALLOC = 78,\n\tTHP_FILE_FALLBACK = 79,\n\tTHP_FILE_FALLBACK_CHARGE = 80,\n\tTHP_FILE_MAPPED = 81,\n\tTHP_SPLIT_PAGE = 82,\n\tTHP_SPLIT_PAGE_FAILED = 83,\n\tTHP_DEFERRED_SPLIT_PAGE = 84,\n\tTHP_SPLIT_PMD = 85,\n\tTHP_SPLIT_PUD = 86,\n\tTHP_ZERO_PAGE_ALLOC = 87,\n\tTHP_ZERO_PAGE_ALLOC_FAILED = 88,\n\tTHP_SWPOUT = 89,\n\tTHP_SWPOUT_FALLBACK = 90,\n\tBALLOON_INFLATE = 91,\n\tBALLOON_DEFLATE = 92,\n\tBALLOON_MIGRATE = 93,\n\tSWAP_RA = 94,\n\tSWAP_RA_HIT = 95,\n\tNR_VM_EVENT_ITEMS = 96,\n};\n\nstruct tlb_context {\n\tu64 ctx_id;\n\tu64 tlb_gen;\n};\n\nstruct tlb_state {\n\tstruct mm_struct *loaded_mm;\n\tunion {\n\t\tstruct mm_struct *last_user_mm;\n\t\tlong unsigned int last_user_mm_ibpb;\n\t};\n\tu16 loaded_mm_asid;\n\tu16 next_asid;\n\tbool is_lazy;\n\tbool invalidate_other;\n\tshort unsigned int user_pcid_flush_mask;\n\tlong unsigned int cr4;\n\tstruct tlb_context ctxs[6];\n};\n\nstruct boot_params_to_save {\n\tunsigned int start;\n\tunsigned int len;\n};\n\nenum cpu_idle_type {\n\tCPU_IDLE = 0,\n\tCPU_NOT_IDLE = 1,\n\tCPU_NEWLY_IDLE = 2,\n\tCPU_MAX_IDLE_TYPES = 3,\n};\n\nenum {\n\t__SD_BALANCE_NEWIDLE = 0,\n\t__SD_BALANCE_EXEC = 1,\n\t__SD_BALANCE_FORK = 2,\n\t__SD_BALANCE_WAKE = 3,\n\t__SD_WAKE_AFFINE = 4,\n\t__SD_ASYM_CPUCAPACITY = 5,\n\t__SD_SHARE_CPUCAPACITY = 6,\n\t__SD_SHARE_PKG_RESOURCES = 7,\n\t__SD_SERIALIZE = 8,\n\t__SD_ASYM_PACKING = 9,\n\t__SD_PREFER_SIBLING = 10,\n\t__SD_OVERLAP = 11,\n\t__SD_NUMA = 12,\n\t__SD_FLAG_CNT = 13,\n};\n\nstruct x86_legacy_devices {\n\tint pnpbios;\n};\n\nenum x86_legacy_i8042_state {\n\tX86_LEGACY_I8042_PLATFORM_ABSENT = 0,\n\tX86_LEGACY_I8042_FIRMWARE_ABSENT = 1,\n\tX86_LEGACY_I8042_EXPECTED_PRESENT = 2,\n};\n\nstruct x86_legacy_features {\n\tenum x86_legacy_i8042_state i8042;\n\tint rtc;\n\tint warm_reset;\n\tint no_vga;\n\tint reserve_bios_regions;\n\tstruct x86_legacy_devices devices;\n};\n\nstruct ghcb;\n\nstruct x86_hyper_runtime {\n\tvoid (*pin_vcpu)(int);\n\tvoid (*sev_es_hcall_prepare)(struct ghcb *, struct pt_regs *);\n\tbool (*sev_es_hcall_finish)(struct ghcb *, struct pt_regs *);\n};\n\nstruct x86_platform_ops {\n\tlong unsigned int (*calibrate_cpu)();\n\tlong unsigned int (*calibrate_tsc)();\n\tvoid (*get_wallclock)(struct timespec64 *);\n\tint (*set_wallclock)(const struct timespec64 *);\n\tvoid (*iommu_shutdown)();\n\tbool (*is_untracked_pat_range)(u64, u64);\n\tvoid (*nmi_init)();\n\tunsigned char (*get_nmi_reason)();\n\tvoid (*save_sched_clock_state)();\n\tvoid (*restore_sched_clock_state)();\n\tvoid (*apic_post_init)();\n\tstruct x86_legacy_features legacy;\n\tvoid (*set_legacy_features)();\n\tstruct x86_hyper_runtime hyper;\n};\n\ntypedef signed char __s8;\n\ntypedef __s8 s8;\n\ntypedef __u32 __le32;\n\ntypedef long unsigned int irq_hw_number_t;\n\nstruct kernel_symbol {\n\tint value_offset;\n\tint name_offset;\n\tint namespace_offset;\n};\n\ntypedef int (*initcall_t)();\n\ntypedef int initcall_entry_t;\n\nstruct obs_kernel_param {\n\tconst char *str;\n\tint (*setup_func)(char *);\n\tint early;\n};\n\nstruct lockdep_map {};\n\nstruct jump_entry {\n\ts32 code;\n\ts32 target;\n\tlong int key;\n};\n\nstruct static_key_mod;\n\nstruct static_key {\n\tatomic_t enabled;\n\tunion {\n\t\tlong unsigned int type;\n\t\tstruct jump_entry *entries;\n\t\tstruct static_key_mod *next;\n\t};\n};\n\nstruct static_key_true {\n\tstruct static_key key;\n};\n\nstruct static_key_false {\n\tstruct static_key key;\n};\n\nstruct _ddebug {\n\tconst char *modname;\n\tconst char *function;\n\tconst char *filename;\n\tconst char *format;\n\tunsigned int lineno: 18;\n\tunsigned int flags: 8;\n\tunion {\n\t\tstruct static_key_true dd_key_true;\n\t\tstruct static_key_false dd_key_false;\n\t} key;\n};\n\nenum system_states {\n\tSYSTEM_BOOTING = 0,\n\tSYSTEM_SCHEDULING = 1,\n\tSYSTEM_RUNNING = 2,\n\tSYSTEM_HALT = 3,\n\tSYSTEM_POWER_OFF = 4,\n\tSYSTEM_RESTART = 5,\n\tSYSTEM_SUSPEND = 6,\n};\n\nstruct orc_entry {\n\ts16 sp_offset;\n\ts16 bp_offset;\n\tunsigned int sp_reg: 4;\n\tunsigned int bp_reg: 4;\n\tunsigned int type: 2;\n\tunsigned int end: 1;\n} __attribute__((packed));\n\nstruct bug_entry {\n\tint bug_addr_disp;\n\tint file_disp;\n\tshort unsigned int line;\n\tshort unsigned int flags;\n};\n\ntypedef struct cpumask *cpumask_var_t;\n\nstruct tracepoint_func {\n\tvoid *func;\n\tvoid *data;\n\tint prio;\n};\n\nstruct static_call_key;\n\nstruct tracepoint {\n\tconst char *name;\n\tstruct static_key key;\n\tstruct static_call_key *static_call_key;\n\tvoid *static_call_tramp;\n\tvoid *iterator;\n\tint (*regfunc)();\n\tvoid (*unregfunc)();\n\tstruct tracepoint_func *funcs;\n};\n\nstruct static_call_mod;\n\nstruct static_call_site;\n\nstruct static_call_key {\n\tvoid *func;\n\tunion {\n\t\tlong unsigned int type;\n\t\tstruct static_call_mod *mods;\n\t\tstruct static_call_site *sites;\n\t};\n};\n\ntypedef const int tracepoint_ptr_t;\n\nstruct bpf_raw_event_map {\n\tstruct tracepoint *tp;\n\tvoid *bpf_func;\n\tu32 num_args;\n\tu32 writable_size;\n\tlong: 64;\n};\n\nstruct seq_operations {\n\tvoid * (*start)(struct seq_file *, loff_t *);\n\tvoid (*stop)(struct seq_file *, void *);\n\tvoid * (*next)(struct seq_file *, void *, loff_t *);\n\tint (*show)(struct seq_file *, void *);\n};\n\nstruct fixed_percpu_data {\n\tchar gs_base[40];\n\tlong unsigned int stack_canary;\n};\n\nenum perf_event_state {\n\tPERF_EVENT_STATE_DEAD = 4294967292,\n\tPERF_EVENT_STATE_EXIT = 4294967293,\n\tPERF_EVENT_STATE_ERROR = 4294967294,\n\tPERF_EVENT_STATE_OFF = 4294967295,\n\tPERF_EVENT_STATE_INACTIVE = 0,\n\tPERF_EVENT_STATE_ACTIVE = 1,\n};\n\ntypedef struct {\n\tatomic_long_t a;\n} local_t;\n\ntypedef struct {\n\tlocal_t a;\n} local64_t;\n\nstruct perf_event_attr {\n\t__u32 type;\n\t__u32 size;\n\t__u64 config;\n\tunion {\n\t\t__u64 sample_period;\n\t\t__u64 sample_freq;\n\t};\n\t__u64 sample_type;\n\t__u64 read_format;\n\t__u64 disabled: 1;\n\t__u64 inherit: 1;\n\t__u64 pinned: 1;\n\t__u64 exclusive: 1;\n\t__u64 exclude_user: 1;\n\t__u64 exclude_kernel: 1;\n\t__u64 exclude_hv: 1;\n\t__u64 exclude_idle: 1;\n\t__u64 mmap: 1;\n\t__u64 comm: 1;\n\t__u64 freq: 1;\n\t__u64 inherit_stat: 1;\n\t__u64 enable_on_exec: 1;\n\t__u64 task: 1;\n\t__u64 watermark: 1;\n\t__u64 precise_ip: 2;\n\t__u64 mmap_data: 1;\n\t__u64 sample_id_all: 1;\n\t__u64 exclude_host: 1;\n\t__u64 exclude_guest: 1;\n\t__u64 exclude_callchain_kernel: 1;\n\t__u64 exclude_callchain_user: 1;\n\t__u64 mmap2: 1;\n\t__u64 comm_exec: 1;\n\t__u64 use_clockid: 1;\n\t__u64 context_switch: 1;\n\t__u64 write_backward: 1;\n\t__u64 namespaces: 1;\n\t__u64 ksymbol: 1;\n\t__u64 bpf_event: 1;\n\t__u64 aux_output: 1;\n\t__u64 cgroup: 1;\n\t__u64 text_poke: 1;\n\t__u64 __reserved_1: 30;\n\tunion {\n\t\t__u32 wakeup_events;\n\t\t__u32 wakeup_watermark;\n\t};\n\t__u32 bp_type;\n\tunion {\n\t\t__u64 bp_addr;\n\t\t__u64 kprobe_func;\n\t\t__u64 uprobe_path;\n\t\t__u64 config1;\n\t};\n\tunion {\n\t\t__u64 bp_len;\n\t\t__u64 kprobe_addr;\n\t\t__u64 probe_offset;\n\t\t__u64 config2;\n\t};\n\t__u64 branch_sample_type;\n\t__u64 sample_regs_user;\n\t__u32 sample_stack_user;\n\t__s32 clockid;\n\t__u64 sample_regs_intr;\n\t__u32 aux_watermark;\n\t__u16 sample_max_stack;\n\t__u16 __reserved_2;\n\t__u32 aux_sample_size;\n\t__u32 __reserved_3;\n};\n\nstruct hw_perf_event_extra {\n\tu64 config;\n\tunsigned int reg;\n\tint alloc;\n\tint idx;\n};\n\nstruct arch_hw_breakpoint {\n\tlong unsigned int address;\n\tlong unsigned int mask;\n\tu8 len;\n\tu8 type;\n};\n\nstruct hw_perf_event {\n\tunion {\n\t\tstruct {\n\t\t\tu64 config;\n\t\t\tu64 last_tag;\n\t\t\tlong unsigned int config_base;\n\t\t\tlong unsigned int event_base;\n\t\t\tint event_base_rdpmc;\n\t\t\tint idx;\n\t\t\tint last_cpu;\n\t\t\tint flags;\n\t\t\tstruct hw_perf_event_extra extra_reg;\n\t\t\tstruct hw_perf_event_extra branch_reg;\n\t\t};\n\t\tstruct {\n\t\t\tstruct hrtimer hrtimer;\n\t\t};\n\t\tstruct {\n\t\t\tstruct list_head tp_list;\n\t\t};\n\t\tstruct {\n\t\t\tu64 pwr_acc;\n\t\t\tu64 ptsc;\n\t\t};\n\t\tstruct {\n\t\t\tstruct arch_hw_breakpoint info;\n\t\t\tstruct list_head bp_list;\n\t\t};\n\t\tstruct {\n\t\t\tu8 iommu_bank;\n\t\t\tu8 iommu_cntr;\n\t\t\tu16 padding;\n\t\t\tu64 conf;\n\t\t\tu64 conf1;\n\t\t};\n\t};\n\tstruct task_struct *target;\n\tvoid *addr_filters;\n\tlong unsigned int addr_filters_gen;\n\tint state;\n\tlocal64_t prev_count;\n\tu64 sample_period;\n\tunion {\n\t\tstruct {\n\t\t\tu64 last_period;\n\t\t\tlocal64_t period_left;\n\t\t};\n\t\tstruct {\n\t\t\tu64 saved_metric;\n\t\t\tu64 saved_slots;\n\t\t};\n\t};\n\tu64 interrupts_seq;\n\tu64 interrupts;\n\tu64 freq_time_stamp;\n\tu64 freq_count_stamp;\n};\n\nstruct irq_work {\n\tstruct __call_single_node node;\n\tvoid (*func)(struct irq_work *);\n};\n\nstruct perf_addr_filters_head {\n\tstruct list_head list;\n\traw_spinlock_t lock;\n\tunsigned int nr_file_filters;\n};\n\nstruct perf_sample_data;\n\ntypedef void (*perf_overflow_handler_t)(struct perf_event *, struct perf_sample_data *, struct pt_regs *);\n\nstruct ftrace_ops;\n\nstruct ftrace_regs;\n\ntypedef void (*ftrace_func_t)(long unsigned int, long unsigned int, struct ftrace_ops *, struct ftrace_regs *);\n\nstruct ftrace_hash;\n\nstruct ftrace_ops_hash {\n\tstruct ftrace_hash *notrace_hash;\n\tstruct ftrace_hash *filter_hash;\n\tstruct mutex regex_lock;\n};\n\nstruct ftrace_ops {\n\tftrace_func_t func;\n\tstruct ftrace_ops *next;\n\tlong unsigned int flags;\n\tvoid *private;\n\tftrace_func_t saved_func;\n\tstruct ftrace_ops_hash local_hash;\n\tstruct ftrace_ops_hash *func_hash;\n\tstruct ftrace_ops_hash old_hash;\n\tlong unsigned int trampoline;\n\tlong unsigned int trampoline_size;\n\tstruct list_head list;\n};\n\nstruct pmu;\n\nstruct perf_buffer;\n\nstruct perf_addr_filter_range;\n\nstruct bpf_prog;\n\nstruct trace_event_call;\n\nstruct event_filter;\n\nstruct perf_cgroup;\n\nstruct perf_event {\n\tstruct list_head event_entry;\n\tstruct list_head sibling_list;\n\tstruct list_head active_list;\n\tstruct rb_node group_node;\n\tu64 group_index;\n\tstruct list_head migrate_entry;\n\tstruct hlist_node hlist_entry;\n\tstruct list_head active_entry;\n\tint nr_siblings;\n\tint event_caps;\n\tint group_caps;\n\tstruct perf_event *group_leader;\n\tstruct pmu *pmu;\n\tvoid *pmu_private;\n\tenum perf_event_state state;\n\tunsigned int attach_state;\n\tlocal64_t count;\n\tatomic64_t child_count;\n\tu64 total_time_enabled;\n\tu64 total_time_running;\n\tu64 tstamp;\n\tu64 shadow_ctx_time;\n\tstruct perf_event_attr attr;\n\tu16 header_size;\n\tu16 id_header_size;\n\tu16 read_size;\n\tstruct hw_perf_event hw;\n\tstruct perf_event_context *ctx;\n\tatomic_long_t refcount;\n\tatomic64_t child_total_time_enabled;\n\tatomic64_t child_total_time_running;\n\tstruct mutex child_mutex;\n\tstruct list_head child_list;\n\tstruct perf_event *parent;\n\tint oncpu;\n\tint cpu;\n\tstruct list_head owner_entry;\n\tstruct task_struct *owner;\n\tstruct mutex mmap_mutex;\n\tatomic_t mmap_count;\n\tstruct perf_buffer *rb;\n\tstruct list_head rb_entry;\n\tlong unsigned int rcu_batches;\n\tint rcu_pending;\n\twait_queue_head_t waitq;\n\tstruct fasync_struct *fasync;\n\tint pending_wakeup;\n\tint pending_kill;\n\tint pending_disable;\n\tstruct irq_work pending;\n\tatomic_t event_limit;\n\tstruct perf_addr_filters_head addr_filters;\n\tstruct perf_addr_filter_range *addr_filter_ranges;\n\tlong unsigned int addr_filters_gen;\n\tstruct perf_event *aux_event;\n\tvoid (*destroy)(struct perf_event *);\n\tstruct callback_head callback_head;\n\tstruct pid_namespace *ns;\n\tu64 id;\n\tu64 (*clock)();\n\tperf_overflow_handler_t overflow_handler;\n\tvoid *overflow_handler_context;\n\tperf_overflow_handler_t orig_overflow_handler;\n\tstruct bpf_prog *prog;\n\tstruct trace_event_call *tp_event;\n\tstruct event_filter *filter;\n\tstruct ftrace_ops ftrace_ops;\n\tstruct perf_cgroup *cgrp;\n\tvoid *security;\n\tstruct list_head sb_list;\n};\n\nstruct uid_gid_extent {\n\tu32 first;\n\tu32 lower_first;\n\tu32 count;\n};\n\nstruct uid_gid_map {\n\tu32 nr_extents;\n\tunion {\n\t\tstruct uid_gid_extent extent[5];\n\t\tstruct {\n\t\t\tstruct uid_gid_extent *forward;\n\t\t\tstruct uid_gid_extent *reverse;\n\t\t};\n\t};\n};\n\nstruct proc_ns_operations;\n\nstruct ns_common {\n\tatomic_long_t stashed;\n\tconst struct proc_ns_operations *ops;\n\tunsigned int inum;\n\trefcount_t count;\n};\n\nstruct ctl_table;\n\nstruct ctl_table_root;\n\nstruct ctl_table_set;\n\nstruct ctl_dir;\n\nstruct ctl_node;\n\nstruct ctl_table_header {\n\tunion {\n\t\tstruct {\n\t\t\tstruct ctl_table *ctl_table;\n\t\t\tint used;\n\t\t\tint count;\n\t\t\tint nreg;\n\t\t};\n\t\tstruct callback_head rcu;\n\t};\n\tstruct completion *unregistering;\n\tstruct ctl_table *ctl_table_arg;\n\tstruct ctl_table_root *root;\n\tstruct ctl_table_set *set;\n\tstruct ctl_dir *parent;\n\tstruct ctl_node *node;\n\tstruct hlist_head inodes;\n};\n\nstruct ctl_dir {\n\tstruct ctl_table_header header;\n\tstruct rb_root root;\n};\n\nstruct ctl_table_set {\n\tint (*is_seen)(struct ctl_table_set *);\n\tstruct ctl_dir dir;\n};\n\nstruct ucounts;\n\nstruct user_namespace {\n\tstruct uid_gid_map uid_map;\n\tstruct uid_gid_map gid_map;\n\tstruct uid_gid_map projid_map;\n\tstruct user_namespace *parent;\n\tint level;\n\tkuid_t owner;\n\tkgid_t group;\n\tstruct ns_common ns;\n\tlong unsigned int flags;\n\tstruct list_head keyring_name_list;\n\tstruct key *user_keyring_register;\n\tstruct rw_semaphore keyring_sem;\n\tstruct key *persistent_keyring_register;\n\tstruct work_struct work;\n\tstruct ctl_table_set set;\n\tstruct ctl_table_header *sysctls;\n\tstruct ucounts *ucounts;\n\tint ucount_max[10];\n};\n\nstruct pollfd {\n\tint fd;\n\tshort int events;\n\tshort int revents;\n};\n\ntypedef void (*smp_call_func_t)(void *);\n\nstruct __call_single_data {\n\tstruct __call_single_node node;\n\tsmp_call_func_t func;\n\tvoid *info;\n};\n\nstruct smp_ops {\n\tvoid (*smp_prepare_boot_cpu)();\n\tvoid (*smp_prepare_cpus)(unsigned int);\n\tvoid (*smp_cpus_done)(unsigned int);\n\tvoid (*stop_other_cpus)(int);\n\tvoid (*crash_stop_other_cpus)();\n\tvoid (*smp_send_reschedule)(int);\n\tint (*cpu_up)(unsigned int, struct task_struct *);\n\tint (*cpu_disable)();\n\tvoid (*cpu_die)(unsigned int);\n\tvoid (*play_dead)();\n\tvoid (*send_call_func_ipi)(const struct cpumask *);\n\tvoid (*send_call_func_single_ipi)(int);\n};\n\nstruct wait_queue_entry;\n\ntypedef int (*wait_queue_func_t)(struct wait_queue_entry *, unsigned int, int, void *);\n\nstruct wait_queue_entry {\n\tunsigned int flags;\n\tvoid *private;\n\twait_queue_func_t func;\n\tstruct list_head entry;\n};\n\ntypedef struct wait_queue_entry wait_queue_entry_t;\n\nstruct timer_list {\n\tstruct hlist_node entry;\n\tlong unsigned int expires;\n\tvoid (*function)(struct timer_list *);\n\tu32 flags;\n};\n\nstruct delayed_work {\n\tstruct work_struct work;\n\tstruct timer_list timer;\n\tstruct workqueue_struct *wq;\n\tint cpu;\n};\n\nstruct rcu_work {\n\tstruct work_struct work;\n\tstruct callback_head rcu;\n\tstruct workqueue_struct *wq;\n};\n\nstruct rcu_segcblist {\n\tstruct callback_head *head;\n\tstruct callback_head **tails[4];\n\tlong unsigned int gp_seq[4];\n\tatomic_long_t len;\n\tu8 enabled;\n\tu8 offloaded;\n};\n\nstruct srcu_node;\n\nstruct srcu_struct;\n\nstruct srcu_data {\n\tlong unsigned int srcu_lock_count[2];\n\tlong unsigned int srcu_unlock_count[2];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tspinlock_t lock;\n\tstruct rcu_segcblist srcu_cblist;\n\tlong unsigned int srcu_gp_seq_needed;\n\tlong unsigned int srcu_gp_seq_needed_exp;\n\tbool srcu_cblist_invoking;\n\tstruct timer_list delay_work;\n\tstruct work_struct work;\n\tstruct callback_head srcu_barrier_head;\n\tstruct srcu_node *mynode;\n\tlong unsigned int grpmask;\n\tint cpu;\n\tstruct srcu_struct *ssp;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct srcu_node {\n\tspinlock_t lock;\n\tlong unsigned int srcu_have_cbs[4];\n\tlong unsigned int srcu_data_have_cbs[4];\n\tlong unsigned int srcu_gp_seq_needed_exp;\n\tstruct srcu_node *srcu_parent;\n\tint grplo;\n\tint grphi;\n};\n\nstruct srcu_struct {\n\tstruct srcu_node node[521];\n\tstruct srcu_node *level[4];\n\tstruct mutex srcu_cb_mutex;\n\tspinlock_t lock;\n\tstruct mutex srcu_gp_mutex;\n\tunsigned int srcu_idx;\n\tlong unsigned int srcu_gp_seq;\n\tlong unsigned int srcu_gp_seq_needed;\n\tlong unsigned int srcu_gp_seq_needed_exp;\n\tlong unsigned int srcu_last_gp_end;\n\tstruct srcu_data *sda;\n\tlong unsigned int srcu_barrier_seq;\n\tstruct mutex srcu_barrier_mutex;\n\tstruct completion srcu_barrier_completion;\n\tatomic_t srcu_barrier_cpu_cnt;\n\tstruct delayed_work work;\n};\n\nstruct anon_vma {\n\tstruct anon_vma *root;\n\tstruct rw_semaphore rwsem;\n\tatomic_t refcount;\n\tunsigned int degree;\n\tstruct anon_vma *parent;\n\tstruct rb_root_cached rb_root;\n};\n\nstruct mempolicy {\n\tatomic_t refcnt;\n\tshort unsigned int mode;\n\tshort unsigned int flags;\n\tunion {\n\t\tshort int preferred_node;\n\t\tnodemask_t nodes;\n\t} v;\n\tunion {\n\t\tnodemask_t cpuset_mems_allowed;\n\t\tnodemask_t user_nodemask;\n\t} w;\n};\n\nstruct linux_binprm;\n\nstruct coredump_params;\n\nstruct linux_binfmt {\n\tstruct list_head lh;\n\tstruct module *module;\n\tint (*load_binary)(struct linux_binprm *);\n\tint (*load_shlib)(struct file *);\n\tint (*core_dump)(struct coredump_params *);\n\tlong unsigned int min_coredump;\n};\n\nstruct free_area {\n\tstruct list_head free_list[6];\n\tlong unsigned int nr_free;\n};\n\nstruct zone_padding {\n\tchar x[0];\n};\n\nstruct pglist_data;\n\nstruct lruvec {\n\tstruct list_head lists[5];\n\tspinlock_t lru_lock;\n\tlong unsigned int anon_cost;\n\tlong unsigned int file_cost;\n\tatomic_long_t nonresident_age;\n\tlong unsigned int refaults[2];\n\tlong unsigned int flags;\n\tstruct pglist_data *pgdat;\n};\n\nstruct per_cpu_pageset;\n\nstruct zone {\n\tlong unsigned int _watermark[3];\n\tlong unsigned int watermark_boost;\n\tlong unsigned int nr_reserved_highatomic;\n\tlong int lowmem_reserve[5];\n\tint node;\n\tstruct pglist_data *zone_pgdat;\n\tstruct per_cpu_pageset *pageset;\n\tint pageset_high;\n\tint pageset_batch;\n\tlong unsigned int zone_start_pfn;\n\tatomic_long_t managed_pages;\n\tlong unsigned int spanned_pages;\n\tlong unsigned int present_pages;\n\tconst char *name;\n\tlong unsigned int nr_isolate_pageblock;\n\tseqlock_t span_seqlock;\n\tint initialized;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tstruct zone_padding _pad1_;\n\tstruct free_area free_area[11];\n\tlong unsigned int flags;\n\tspinlock_t lock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct zone_padding _pad2_;\n\tlong unsigned int percpu_drift_mark;\n\tlong unsigned int compact_cached_free_pfn;\n\tlong unsigned int compact_cached_migrate_pfn[2];\n\tlong unsigned int compact_init_migrate_pfn;\n\tlong unsigned int compact_init_free_pfn;\n\tunsigned int compact_considered;\n\tunsigned int compact_defer_shift;\n\tint compact_order_failed;\n\tbool compact_blockskip_flush;\n\tbool contiguous;\n\tshort: 16;\n\tstruct zone_padding _pad3_;\n\tatomic_long_t vm_stat[11];\n\tatomic_long_t vm_numa_stat[6];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct zoneref {\n\tstruct zone *zone;\n\tint zone_idx;\n};\n\nstruct zonelist {\n\tstruct zoneref _zonerefs[5121];\n};\n\nenum zone_type {\n\tZONE_DMA = 0,\n\tZONE_DMA32 = 1,\n\tZONE_NORMAL = 2,\n\tZONE_MOVABLE = 3,\n\tZONE_DEVICE = 4,\n\t__MAX_NR_ZONES = 5,\n};\n\nstruct deferred_split {\n\tspinlock_t split_queue_lock;\n\tstruct list_head split_queue;\n\tlong unsigned int split_queue_len;\n};\n\nstruct per_cpu_nodestat;\n\nstruct pglist_data {\n\tstruct zone node_zones[5];\n\tstruct zonelist node_zonelists[2];\n\tint nr_zones;\n\tspinlock_t node_size_lock;\n\tlong unsigned int node_start_pfn;\n\tlong unsigned int node_present_pages;\n\tlong unsigned int node_spanned_pages;\n\tint node_id;\n\twait_queue_head_t kswapd_wait;\n\twait_queue_head_t pfmemalloc_wait;\n\tstruct task_struct *kswapd;\n\tint kswapd_order;\n\tenum zone_type kswapd_highest_zoneidx;\n\tint kswapd_failures;\n\tint kcompactd_max_order;\n\tenum zone_type kcompactd_highest_zoneidx;\n\twait_queue_head_t kcompactd_wait;\n\tstruct task_struct *kcompactd;\n\tlong unsigned int totalreserve_pages;\n\tlong unsigned int min_unmapped_pages;\n\tlong unsigned int min_slab_pages;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct zone_padding _pad1_;\n\tstruct deferred_split deferred_split_queue;\n\tstruct lruvec __lruvec;\n\tlong unsigned int flags;\n\tlong: 64;\n\tstruct zone_padding _pad2_;\n\tstruct per_cpu_nodestat *per_cpu_nodestats;\n\tatomic_long_t vm_stat[38];\n\tlong: 64;\n};\n\nstruct per_cpu_pages {\n\tint count;\n\tint high;\n\tint batch;\n\tstruct list_head lists[3];\n};\n\nstruct per_cpu_pageset {\n\tstruct per_cpu_pages pcp;\n\ts8 expire;\n\tu16 vm_numa_stat_diff[6];\n\ts8 stat_threshold;\n\ts8 vm_stat_diff[11];\n};\n\nstruct per_cpu_nodestat {\n\ts8 stat_threshold;\n\ts8 vm_node_stat_diff[38];\n};\n\ntypedef struct pglist_data pg_data_t;\n\nenum irq_domain_bus_token {\n\tDOMAIN_BUS_ANY = 0,\n\tDOMAIN_BUS_WIRED = 1,\n\tDOMAIN_BUS_GENERIC_MSI = 2,\n\tDOMAIN_BUS_PCI_MSI = 3,\n\tDOMAIN_BUS_PLATFORM_MSI = 4,\n\tDOMAIN_BUS_NEXUS = 5,\n\tDOMAIN_BUS_IPI = 6,\n\tDOMAIN_BUS_FSL_MC_MSI = 7,\n\tDOMAIN_BUS_TI_SCI_INTA_MSI = 8,\n\tDOMAIN_BUS_WAKEUP = 9,\n\tDOMAIN_BUS_VMD_MSI = 10,\n};\n\nstruct irq_domain_ops;\n\nstruct fwnode_handle;\n\nstruct irq_domain_chip_generic;\n\nstruct irq_domain {\n\tstruct list_head link;\n\tconst char *name;\n\tconst struct irq_domain_ops *ops;\n\tvoid *host_data;\n\tunsigned int flags;\n\tunsigned int mapcount;\n\tstruct fwnode_handle *fwnode;\n\tenum irq_domain_bus_token bus_token;\n\tstruct irq_domain_chip_generic *gc;\n\tstruct irq_domain *parent;\n\tirq_hw_number_t hwirq_max;\n\tunsigned int revmap_direct_max_irq;\n\tunsigned int revmap_size;\n\tstruct xarray revmap_tree;\n\tstruct mutex revmap_tree_mutex;\n\tunsigned int linear_revmap[0];\n};\n\ntypedef int proc_handler(struct ctl_table *, int, void *, size_t *, loff_t *);\n\nstruct ctl_table_poll;\n\nstruct ctl_table {\n\tconst char *procname;\n\tvoid *data;\n\tint maxlen;\n\tumode_t mode;\n\tstruct ctl_table *child;\n\tproc_handler *proc_handler;\n\tstruct ctl_table_poll *poll;\n\tvoid *extra1;\n\tvoid *extra2;\n};\n\nstruct ctl_table_poll {\n\tatomic_t event;\n\twait_queue_head_t wait;\n};\n\nstruct ctl_node {\n\tstruct rb_node node;\n\tstruct ctl_table_header *header;\n};\n\nstruct ctl_table_root {\n\tstruct ctl_table_set default_set;\n\tstruct ctl_table_set * (*lookup)(struct ctl_table_root *);\n\tvoid (*set_ownership)(struct ctl_table_header *, struct ctl_table *, kuid_t *, kgid_t *);\n\tint (*permissions)(struct ctl_table_header *, struct ctl_table *);\n};\n\nenum umh_disable_depth {\n\tUMH_ENABLED = 0,\n\tUMH_FREEZING = 1,\n\tUMH_DISABLED = 2,\n};\n\ntypedef __u64 Elf64_Addr;\n\ntypedef __u16 Elf64_Half;\n\ntypedef __u64 Elf64_Off;\n\ntypedef __u32 Elf64_Word;\n\ntypedef __u64 Elf64_Xword;\n\nstruct elf64_sym {\n\tElf64_Word st_name;\n\tunsigned char st_info;\n\tunsigned char st_other;\n\tElf64_Half st_shndx;\n\tElf64_Addr st_value;\n\tElf64_Xword st_size;\n};\n\ntypedef struct elf64_sym Elf64_Sym;\n\nstruct elf64_hdr {\n\tunsigned char e_ident[16];\n\tElf64_Half e_type;\n\tElf64_Half e_machine;\n\tElf64_Word e_version;\n\tElf64_Addr e_entry;\n\tElf64_Off e_phoff;\n\tElf64_Off e_shoff;\n\tElf64_Word e_flags;\n\tElf64_Half e_ehsize;\n\tElf64_Half e_phentsize;\n\tElf64_Half e_phnum;\n\tElf64_Half e_shentsize;\n\tElf64_Half e_shnum;\n\tElf64_Half e_shstrndx;\n};\n\ntypedef struct elf64_hdr Elf64_Ehdr;\n\nstruct elf64_shdr {\n\tElf64_Word sh_name;\n\tElf64_Word sh_type;\n\tElf64_Xword sh_flags;\n\tElf64_Addr sh_addr;\n\tElf64_Off sh_offset;\n\tElf64_Xword sh_size;\n\tElf64_Word sh_link;\n\tElf64_Word sh_info;\n\tElf64_Xword sh_addralign;\n\tElf64_Xword sh_entsize;\n};\n\ntypedef struct elf64_shdr Elf64_Shdr;\n\nstruct idr {\n\tstruct xarray idr_rt;\n\tunsigned int idr_base;\n\tunsigned int idr_next;\n};\n\nstruct kernfs_root;\n\nstruct kernfs_elem_dir {\n\tlong unsigned int subdirs;\n\tstruct rb_root children;\n\tstruct kernfs_root *root;\n};\n\nstruct kernfs_node;\n\nstruct kernfs_syscall_ops;\n\nstruct kernfs_root {\n\tstruct kernfs_node *kn;\n\tunsigned int flags;\n\tstruct idr ino_idr;\n\tu32 last_id_lowbits;\n\tu32 id_highbits;\n\tstruct kernfs_syscall_ops *syscall_ops;\n\tstruct list_head supers;\n\twait_queue_head_t deactivate_waitq;\n};\n\nstruct kernfs_elem_symlink {\n\tstruct kernfs_node *target_kn;\n};\n\nstruct kernfs_ops;\n\nstruct kernfs_open_node;\n\nstruct kernfs_elem_attr {\n\tconst struct kernfs_ops *ops;\n\tstruct kernfs_open_node *open;\n\tloff_t size;\n\tstruct kernfs_node *notify_next;\n};\n\nstruct kernfs_iattrs;\n\nstruct kernfs_node {\n\tatomic_t count;\n\tatomic_t active;\n\tstruct kernfs_node *parent;\n\tconst char *name;\n\tstruct rb_node rb;\n\tconst void *ns;\n\tunsigned int hash;\n\tunion {\n\t\tstruct kernfs_elem_dir dir;\n\t\tstruct kernfs_elem_symlink symlink;\n\t\tstruct kernfs_elem_attr attr;\n\t};\n\tvoid *priv;\n\tu64 id;\n\tshort unsigned int flags;\n\tumode_t mode;\n\tstruct kernfs_iattrs *iattr;\n};\n\nstruct kernfs_open_file;\n\nstruct kernfs_ops {\n\tint (*open)(struct kernfs_open_file *);\n\tvoid (*release)(struct kernfs_open_file *);\n\tint (*seq_show)(struct seq_file *, void *);\n\tvoid * (*seq_start)(struct seq_file *, loff_t *);\n\tvoid * (*seq_next)(struct seq_file *, void *, loff_t *);\n\tvoid (*seq_stop)(struct seq_file *, void *);\n\tssize_t (*read)(struct kernfs_open_file *, char *, size_t, loff_t);\n\tsize_t atomic_write_len;\n\tbool prealloc;\n\tssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);\n\t__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);\n\tint (*mmap)(struct kernfs_open_file *, struct vm_area_struct *);\n};\n\nstruct kernfs_syscall_ops {\n\tint (*show_options)(struct seq_file *, struct kernfs_root *);\n\tint (*mkdir)(struct kernfs_node *, const char *, umode_t);\n\tint (*rmdir)(struct kernfs_node *);\n\tint (*rename)(struct kernfs_node *, struct kernfs_node *, const char *);\n\tint (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *);\n};\n\nstruct seq_file {\n\tchar *buf;\n\tsize_t size;\n\tsize_t from;\n\tsize_t count;\n\tsize_t pad_until;\n\tloff_t index;\n\tloff_t read_pos;\n\tstruct mutex lock;\n\tconst struct seq_operations *op;\n\tint poll_event;\n\tconst struct file *file;\n\tvoid *private;\n};\n\nstruct kernfs_open_file {\n\tstruct kernfs_node *kn;\n\tstruct file *file;\n\tstruct seq_file *seq_file;\n\tvoid *priv;\n\tstruct mutex mutex;\n\tstruct mutex prealloc_mutex;\n\tint event;\n\tstruct list_head list;\n\tchar *prealloc_buf;\n\tsize_t atomic_write_len;\n\tbool mmapped: 1;\n\tbool released: 1;\n\tconst struct vm_operations_struct *vm_ops;\n};\n\ntypedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);\n\nstruct poll_table_struct {\n\tpoll_queue_proc _qproc;\n\t__poll_t _key;\n};\n\nenum kobj_ns_type {\n\tKOBJ_NS_TYPE_NONE = 0,\n\tKOBJ_NS_TYPE_NET = 1,\n\tKOBJ_NS_TYPES = 2,\n};\n\nstruct sock;\n\nstruct kobj_ns_type_operations {\n\tenum kobj_ns_type type;\n\tbool (*current_may_mount)();\n\tvoid * (*grab_current_ns)();\n\tconst void * (*netlink_ns)(struct sock *);\n\tconst void * (*initial_ns)();\n\tvoid (*drop_ns)(void *);\n};\n\nstruct attribute {\n\tconst char *name;\n\tumode_t mode;\n};\n\nstruct kobject;\n\nstruct bin_attribute;\n\nstruct attribute_group {\n\tconst char *name;\n\tumode_t (*is_visible)(struct kobject *, struct attribute *, int);\n\tumode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int);\n\tstruct attribute **attrs;\n\tstruct bin_attribute **bin_attrs;\n};\n\nstruct kref {\n\trefcount_t refcount;\n};\n\nstruct kset;\n\nstruct kobj_type;\n\nstruct kobject {\n\tconst char *name;\n\tstruct list_head entry;\n\tstruct kobject *parent;\n\tstruct kset *kset;\n\tstruct kobj_type *ktype;\n\tstruct kernfs_node *sd;\n\tstruct kref kref;\n\tunsigned int state_initialized: 1;\n\tunsigned int state_in_sysfs: 1;\n\tunsigned int state_add_uevent_sent: 1;\n\tunsigned int state_remove_uevent_sent: 1;\n\tunsigned int uevent_suppress: 1;\n};\n\nstruct bin_attribute {\n\tstruct attribute attr;\n\tsize_t size;\n\tvoid *private;\n\tssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);\n\tssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t, size_t);\n\tint (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *);\n};\n\nstruct sysfs_ops {\n\tssize_t (*show)(struct kobject *, struct attribute *, char *);\n\tssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);\n};\n\nstruct kset_uevent_ops;\n\nstruct kset {\n\tstruct list_head list;\n\tspinlock_t list_lock;\n\tstruct kobject kobj;\n\tconst struct kset_uevent_ops *uevent_ops;\n};\n\nstruct kobj_type {\n\tvoid (*release)(struct kobject *);\n\tconst struct sysfs_ops *sysfs_ops;\n\tstruct attribute **default_attrs;\n\tconst struct attribute_group **default_groups;\n\tconst struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *);\n\tconst void * (*namespace)(struct kobject *);\n\tvoid (*get_ownership)(struct kobject *, kuid_t *, kgid_t *);\n};\n\nstruct kobj_uevent_env {\n\tchar *argv[3];\n\tchar *envp[64];\n\tint envp_idx;\n\tchar buf[2048];\n\tint buflen;\n};\n\nstruct kset_uevent_ops {\n\tint (* const filter)(struct kset *, struct kobject *);\n\tconst char * (* const name)(struct kset *, struct kobject *);\n\tint (* const uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *);\n};\n\nstruct kernel_param;\n\nstruct kernel_param_ops {\n\tunsigned int flags;\n\tint (*set)(const char *, const struct kernel_param *);\n\tint (*get)(char *, const struct kernel_param *);\n\tvoid (*free)(void *);\n};\n\nstruct kparam_string;\n\nstruct kparam_array;\n\nstruct kernel_param {\n\tconst char *name;\n\tstruct module *mod;\n\tconst struct kernel_param_ops *ops;\n\tconst u16 perm;\n\ts8 level;\n\tu8 flags;\n\tunion {\n\t\tvoid *arg;\n\t\tconst struct kparam_string *str;\n\t\tconst struct kparam_array *arr;\n\t};\n};\n\nstruct kparam_string {\n\tunsigned int maxlen;\n\tchar *string;\n};\n\nstruct kparam_array {\n\tunsigned int max;\n\tunsigned int elemsize;\n\tunsigned int *num;\n\tconst struct kernel_param_ops *ops;\n\tvoid *elem;\n};\n\nenum module_state {\n\tMODULE_STATE_LIVE = 0,\n\tMODULE_STATE_COMING = 1,\n\tMODULE_STATE_GOING = 2,\n\tMODULE_STATE_UNFORMED = 3,\n};\n\nstruct module_param_attrs;\n\nstruct module_kobject {\n\tstruct kobject kobj;\n\tstruct module *mod;\n\tstruct kobject *drivers_dir;\n\tstruct module_param_attrs *mp;\n\tstruct completion *kobj_completion;\n};\n\nstruct latch_tree_node {\n\tstruct rb_node node[2];\n};\n\nstruct mod_tree_node {\n\tstruct module *mod;\n\tstruct latch_tree_node node;\n};\n\nstruct module_layout {\n\tvoid *base;\n\tunsigned int size;\n\tunsigned int text_size;\n\tunsigned int ro_size;\n\tunsigned int ro_after_init_size;\n\tstruct mod_tree_node mtn;\n};\n\nstruct mod_arch_specific {\n\tunsigned int num_orcs;\n\tint *orc_unwind_ip;\n\tstruct orc_entry *orc_unwind;\n};\n\nstruct mod_kallsyms {\n\tElf64_Sym *symtab;\n\tunsigned int num_symtab;\n\tchar *strtab;\n\tchar *typetab;\n};\n\nstruct module_attribute;\n\nstruct exception_table_entry;\n\nstruct module_sect_attrs;\n\nstruct module_notes_attrs;\n\nstruct trace_eval_map;\n\nstruct klp_modinfo;\n\nstruct error_injection_entry;\n\nstruct module {\n\tenum module_state state;\n\tstruct list_head list;\n\tchar name[56];\n\tstruct module_kobject mkobj;\n\tstruct module_attribute *modinfo_attrs;\n\tconst char *version;\n\tconst char *srcversion;\n\tstruct kobject *holders_dir;\n\tconst struct kernel_symbol *syms;\n\tconst s32 *crcs;\n\tunsigned int num_syms;\n\tstruct mutex param_lock;\n\tstruct kernel_param *kp;\n\tunsigned int num_kp;\n\tunsigned int num_gpl_syms;\n\tconst struct kernel_symbol *gpl_syms;\n\tconst s32 *gpl_crcs;\n\tbool using_gplonly_symbols;\n\tconst struct kernel_symbol *unused_syms;\n\tconst s32 *unused_crcs;\n\tunsigned int num_unused_syms;\n\tunsigned int num_unused_gpl_syms;\n\tconst struct kernel_symbol *unused_gpl_syms;\n\tconst s32 *unused_gpl_crcs;\n\tbool sig_ok;\n\tbool async_probe_requested;\n\tconst struct kernel_symbol *gpl_future_syms;\n\tconst s32 *gpl_future_crcs;\n\tunsigned int num_gpl_future_syms;\n\tunsigned int num_exentries;\n\tstruct exception_table_entry *extable;\n\tint (*init)();\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct module_layout core_layout;\n\tstruct module_layout init_layout;\n\tstruct mod_arch_specific arch;\n\tlong unsigned int taints;\n\tunsigned int num_bugs;\n\tstruct list_head bug_list;\n\tstruct bug_entry *bug_table;\n\tstruct mod_kallsyms *kallsyms;\n\tstruct mod_kallsyms core_kallsyms;\n\tstruct module_sect_attrs *sect_attrs;\n\tstruct module_notes_attrs *notes_attrs;\n\tchar *args;\n\tvoid *percpu;\n\tunsigned int percpu_size;\n\tvoid *noinstr_text_start;\n\tunsigned int noinstr_text_size;\n\tunsigned int num_tracepoints;\n\ttracepoint_ptr_t *tracepoints_ptrs;\n\tunsigned int num_srcu_structs;\n\tstruct srcu_struct **srcu_struct_ptrs;\n\tunsigned int num_bpf_raw_events;\n\tstruct bpf_raw_event_map *bpf_raw_events;\n\tunsigned int btf_data_size;\n\tvoid *btf_data;\n\tstruct jump_entry *jump_entries;\n\tunsigned int num_jump_entries;\n\tunsigned int num_trace_bprintk_fmt;\n\tconst char **trace_bprintk_fmt_start;\n\tstruct trace_event_call **trace_events;\n\tunsigned int num_trace_events;\n\tstruct trace_eval_map **trace_evals;\n\tunsigned int num_trace_evals;\n\tunsigned int num_ftrace_callsites;\n\tlong unsigned int *ftrace_callsites;\n\tvoid *kprobes_text_start;\n\tunsigned int kprobes_text_size;\n\tlong unsigned int *kprobe_blacklist;\n\tunsigned int num_kprobe_blacklist;\n\tint num_static_call_sites;\n\tstruct static_call_site *static_call_sites;\n\tbool klp;\n\tbool klp_alive;\n\tstruct klp_modinfo *klp_info;\n\tstruct list_head source_list;\n\tstruct list_head target_list;\n\tvoid (*exit)();\n\tatomic_t refcnt;\n\tstruct error_injection_entry *ei_funcs;\n\tunsigned int num_ei_funcs;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct error_injection_entry {\n\tlong unsigned int addr;\n\tint etype;\n};\n\nstruct static_call_site {\n\ts32 addr;\n\ts32 key;\n};\n\nstruct module_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct module_attribute *, struct module_kobject *, char *);\n\tssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t);\n\tvoid (*setup)(struct module *, const char *);\n\tint (*test)(struct module *);\n\tvoid (*free)(struct module *);\n};\n\nstruct klp_modinfo {\n\tElf64_Ehdr hdr;\n\tElf64_Shdr *sechdrs;\n\tchar *secstrings;\n\tunsigned int symndx;\n};\n\nstruct exception_table_entry {\n\tint insn;\n\tint fixup;\n\tint handler;\n};\n\nstruct trace_event_functions;\n\nstruct trace_event {\n\tstruct hlist_node node;\n\tstruct list_head list;\n\tint type;\n\tstruct trace_event_functions *funcs;\n};\n\nstruct trace_event_class;\n\nstruct bpf_prog_array;\n\nstruct trace_event_call {\n\tstruct list_head list;\n\tstruct trace_event_class *class;\n\tunion {\n\t\tchar *name;\n\t\tstruct tracepoint *tp;\n\t};\n\tstruct trace_event event;\n\tchar *print_fmt;\n\tstruct event_filter *filter;\n\tvoid *mod;\n\tvoid *data;\n\tint flags;\n\tint perf_refcount;\n\tstruct hlist_head *perf_events;\n\tstruct bpf_prog_array *prog_array;\n\tint (*perf_perm)(struct trace_event_call *, struct perf_event *);\n};\n\nstruct trace_eval_map {\n\tconst char *system;\n\tconst char *eval_string;\n\tlong unsigned int eval_value;\n};\n\nstruct cgroup;\n\nstruct cgroup_subsys;\n\nstruct cgroup_subsys_state {\n\tstruct cgroup *cgroup;\n\tstruct cgroup_subsys *ss;\n\tstruct percpu_ref refcnt;\n\tstruct list_head sibling;\n\tstruct list_head children;\n\tstruct list_head rstat_css_node;\n\tint id;\n\tunsigned int flags;\n\tu64 serial_nr;\n\tatomic_t online_cnt;\n\tstruct work_struct destroy_work;\n\tstruct rcu_work destroy_rwork;\n\tstruct cgroup_subsys_state *parent;\n};\n\nstruct mem_cgroup_id {\n\tint id;\n\trefcount_t ref;\n};\n\nstruct page_counter {\n\tatomic_long_t usage;\n\tlong unsigned int min;\n\tlong unsigned int low;\n\tlong unsigned int high;\n\tlong unsigned int max;\n\tstruct page_counter *parent;\n\tlong unsigned int emin;\n\tatomic_long_t min_usage;\n\tatomic_long_t children_min_usage;\n\tlong unsigned int elow;\n\tatomic_long_t low_usage;\n\tatomic_long_t children_low_usage;\n\tlong unsigned int watermark;\n\tlong unsigned int failcnt;\n};\n\nstruct vmpressure {\n\tlong unsigned int scanned;\n\tlong unsigned int reclaimed;\n\tlong unsigned int tree_scanned;\n\tlong unsigned int tree_reclaimed;\n\tspinlock_t sr_lock;\n\tstruct list_head events;\n\tstruct mutex events_lock;\n\tstruct work_struct work;\n};\n\nstruct cgroup_file {\n\tstruct kernfs_node *kn;\n\tlong unsigned int notified_at;\n\tstruct timer_list notify_timer;\n};\n\nstruct mem_cgroup_threshold_ary;\n\nstruct mem_cgroup_thresholds {\n\tstruct mem_cgroup_threshold_ary *primary;\n\tstruct mem_cgroup_threshold_ary *spare;\n};\n\nstruct memcg_padding {\n\tchar x[0];\n};\n\nenum memcg_kmem_state {\n\tKMEM_NONE = 0,\n\tKMEM_ALLOCATED = 1,\n\tKMEM_ONLINE = 2,\n};\n\nstruct percpu_counter {\n\traw_spinlock_t lock;\n\ts64 count;\n\tstruct list_head list;\n\ts32 *counters;\n};\n\nstruct fprop_global {\n\tstruct percpu_counter events;\n\tunsigned int period;\n\tseqcount_t sequence;\n};\n\nstruct wb_domain {\n\tspinlock_t lock;\n\tstruct fprop_global completions;\n\tstruct timer_list period_timer;\n\tlong unsigned int period_time;\n\tlong unsigned int dirty_limit_tstamp;\n\tlong unsigned int dirty_limit;\n};\n\nstruct wb_completion {\n\tatomic_t cnt;\n\twait_queue_head_t *waitq;\n};\n\nstruct memcg_cgwb_frn {\n\tu64 bdi_id;\n\tint memcg_id;\n\tu64 at;\n\tstruct wb_completion done;\n};\n\nstruct obj_cgroup;\n\nstruct memcg_vmstats_percpu;\n\nstruct mem_cgroup_per_node;\n\nstruct mem_cgroup {\n\tstruct cgroup_subsys_state css;\n\tstruct mem_cgroup_id id;\n\tstruct page_counter memory;\n\tunion {\n\t\tstruct page_counter swap;\n\t\tstruct page_counter memsw;\n\t};\n\tstruct page_counter kmem;\n\tstruct page_counter tcpmem;\n\tstruct work_struct high_work;\n\tlong unsigned int soft_limit;\n\tstruct vmpressure vmpressure;\n\tbool oom_group;\n\tbool oom_lock;\n\tint under_oom;\n\tint swappiness;\n\tint oom_kill_disable;\n\tstruct cgroup_file events_file;\n\tstruct cgroup_file events_local_file;\n\tstruct cgroup_file swap_events_file;\n\tstruct mutex thresholds_lock;\n\tstruct mem_cgroup_thresholds thresholds;\n\tstruct mem_cgroup_thresholds memsw_thresholds;\n\tstruct list_head oom_notify;\n\tlong unsigned int move_charge_at_immigrate;\n\tspinlock_t move_lock;\n\tlong unsigned int move_lock_flags;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct memcg_padding _pad1_;\n\tatomic_long_t vmstats[41];\n\tatomic_long_t vmevents[96];\n\tatomic_long_t memory_events[8];\n\tatomic_long_t memory_events_local[8];\n\tlong unsigned int socket_pressure;\n\tbool tcpmem_active;\n\tint tcpmem_pressure;\n\tint kmemcg_id;\n\tenum memcg_kmem_state kmem_state;\n\tstruct obj_cgroup *objcg;\n\tstruct list_head objcg_list;\n\tlong: 64;\n\tstruct memcg_padding _pad2_;\n\tatomic_t moving_account;\n\tstruct task_struct *move_lock_task;\n\tstruct memcg_vmstats_percpu *vmstats_local;\n\tstruct memcg_vmstats_percpu *vmstats_percpu;\n\tstruct list_head cgwb_list;\n\tstruct wb_domain cgwb_domain;\n\tstruct memcg_cgwb_frn cgwb_frn[4];\n\tstruct list_head event_list;\n\tspinlock_t event_list_lock;\n\tstruct deferred_split deferred_split_queue;\n\tstruct mem_cgroup_per_node *nodeinfo[0];\n};\n\nstruct fs_pin;\n\nstruct pid_namespace {\n\tstruct idr idr;\n\tstruct callback_head rcu;\n\tunsigned int pid_allocated;\n\tstruct task_struct *child_reaper;\n\tstruct kmem_cache *pid_cachep;\n\tunsigned int level;\n\tstruct pid_namespace *parent;\n\tstruct fs_pin *bacct;\n\tstruct user_namespace *user_ns;\n\tstruct ucounts *ucounts;\n\tint reboot;\n\tstruct ns_common ns;\n};\n\nstruct task_cputime {\n\tu64 stime;\n\tu64 utime;\n\tlong long unsigned int sum_exec_runtime;\n};\n\nstruct uts_namespace;\n\nstruct ipc_namespace;\n\nstruct mnt_namespace;\n\nstruct net;\n\nstruct time_namespace;\n\nstruct cgroup_namespace;\n\nstruct nsproxy {\n\tatomic_t count;\n\tstruct uts_namespace *uts_ns;\n\tstruct ipc_namespace *ipc_ns;\n\tstruct mnt_namespace *mnt_ns;\n\tstruct pid_namespace *pid_ns_for_children;\n\tstruct net *net_ns;\n\tstruct time_namespace *time_ns;\n\tstruct time_namespace *time_ns_for_children;\n\tstruct cgroup_namespace *cgroup_ns;\n};\n\nstruct bio;\n\nstruct bio_list {\n\tstruct bio *head;\n\tstruct bio *tail;\n};\n\nstruct blk_plug {\n\tstruct list_head mq_list;\n\tstruct list_head cb_list;\n\tshort unsigned int rq_count;\n\tbool multiple_queues;\n\tbool nowait;\n};\n\nstruct reclaim_state {\n\tlong unsigned int reclaimed_slab;\n};\n\nstruct fprop_local_percpu {\n\tstruct percpu_counter events;\n\tunsigned int period;\n\traw_spinlock_t lock;\n};\n\nenum wb_reason {\n\tWB_REASON_BACKGROUND = 0,\n\tWB_REASON_VMSCAN = 1,\n\tWB_REASON_SYNC = 2,\n\tWB_REASON_PERIODIC = 3,\n\tWB_REASON_LAPTOP_TIMER = 4,\n\tWB_REASON_FS_FREE_SPACE = 5,\n\tWB_REASON_FORKER_THREAD = 6,\n\tWB_REASON_FOREIGN_FLUSH = 7,\n\tWB_REASON_MAX = 8,\n};\n\nstruct bdi_writeback {\n\tstruct backing_dev_info *bdi;\n\tlong unsigned int state;\n\tlong unsigned int last_old_flush;\n\tstruct list_head b_dirty;\n\tstruct list_head b_io;\n\tstruct list_head b_more_io;\n\tstruct list_head b_dirty_time;\n\tspinlock_t list_lock;\n\tstruct percpu_counter stat[4];\n\tlong unsigned int congested;\n\tlong unsigned int bw_time_stamp;\n\tlong unsigned int dirtied_stamp;\n\tlong unsigned int written_stamp;\n\tlong unsigned int write_bandwidth;\n\tlong unsigned int avg_write_bandwidth;\n\tlong unsigned int dirty_ratelimit;\n\tlong unsigned int balanced_dirty_ratelimit;\n\tstruct fprop_local_percpu completions;\n\tint dirty_exceeded;\n\tenum wb_reason start_all_reason;\n\tspinlock_t work_lock;\n\tstruct list_head work_list;\n\tstruct delayed_work dwork;\n\tlong unsigned int dirty_sleep;\n\tstruct list_head bdi_node;\n\tstruct percpu_ref refcnt;\n\tstruct fprop_local_percpu memcg_completions;\n\tstruct cgroup_subsys_state *memcg_css;\n\tstruct cgroup_subsys_state *blkcg_css;\n\tstruct list_head memcg_node;\n\tstruct list_head blkcg_node;\n\tunion {\n\t\tstruct work_struct release_work;\n\t\tstruct callback_head rcu;\n\t};\n};\n\nstruct device;\n\nstruct backing_dev_info {\n\tu64 id;\n\tstruct rb_node rb_node;\n\tstruct list_head bdi_list;\n\tlong unsigned int ra_pages;\n\tlong unsigned int io_pages;\n\tstruct kref refcnt;\n\tunsigned int capabilities;\n\tunsigned int min_ratio;\n\tunsigned int max_ratio;\n\tunsigned int max_prop_frac;\n\tatomic_long_t tot_write_bandwidth;\n\tstruct bdi_writeback wb;\n\tstruct list_head wb_list;\n\tstruct xarray cgwb_tree;\n\tstruct mutex cgwb_release_mutex;\n\tstruct rw_semaphore wb_switch_rwsem;\n\twait_queue_head_t wb_waitq;\n\tstruct device *dev;\n\tchar dev_name[64];\n\tstruct device *owner;\n\tstruct timer_list laptop_mode_wb_timer;\n\tstruct dentry *debug_dir;\n};\n\nstruct css_set {\n\tstruct cgroup_subsys_state *subsys[12];\n\trefcount_t refcount;\n\tstruct css_set *dom_cset;\n\tstruct cgroup *dfl_cgrp;\n\tint nr_tasks;\n\tstruct list_head tasks;\n\tstruct list_head mg_tasks;\n\tstruct list_head dying_tasks;\n\tstruct list_head task_iters;\n\tstruct list_head e_cset_node[12];\n\tstruct list_head threaded_csets;\n\tstruct list_head threaded_csets_node;\n\tstruct hlist_node hlist;\n\tstruct list_head cgrp_links;\n\tstruct list_head mg_preload_node;\n\tstruct list_head mg_node;\n\tstruct cgroup *mg_src_cgrp;\n\tstruct cgroup *mg_dst_cgrp;\n\tstruct css_set *mg_dst_cset;\n\tbool dead;\n\tstruct callback_head callback_head;\n};\n\ntypedef u32 compat_uptr_t;\n\nstruct compat_robust_list {\n\tcompat_uptr_t next;\n};\n\ntypedef s32 compat_long_t;\n\nstruct compat_robust_list_head {\n\tstruct compat_robust_list list;\n\tcompat_long_t futex_offset;\n\tcompat_uptr_t list_op_pending;\n};\n\nstruct perf_event_groups {\n\tstruct rb_root tree;\n\tu64 index;\n};\n\nstruct perf_event_context {\n\tstruct pmu *pmu;\n\traw_spinlock_t lock;\n\tstruct mutex mutex;\n\tstruct list_head active_ctx_list;\n\tstruct perf_event_groups pinned_groups;\n\tstruct perf_event_groups flexible_groups;\n\tstruct list_head event_list;\n\tstruct list_head pinned_active;\n\tstruct list_head flexible_active;\n\tint nr_events;\n\tint nr_active;\n\tint is_active;\n\tint nr_stat;\n\tint nr_freq;\n\tint rotate_disable;\n\tint rotate_necessary;\n\trefcount_t refcount;\n\tstruct task_struct *task;\n\tu64 time;\n\tu64 timestamp;\n\tstruct perf_event_context *parent_ctx;\n\tu64 parent_gen;\n\tu64 generation;\n\tint pin_count;\n\tint nr_cgroups;\n\tvoid *task_ctx_data;\n\tstruct callback_head callback_head;\n};\n\nstruct task_delay_info {\n\traw_spinlock_t lock;\n\tunsigned int flags;\n\tu64 blkio_start;\n\tu64 blkio_delay;\n\tu64 swapin_delay;\n\tu32 blkio_count;\n\tu32 swapin_count;\n\tu64 freepages_start;\n\tu64 freepages_delay;\n\tu64 thrashing_start;\n\tu64 thrashing_delay;\n\tu32 freepages_count;\n\tu32 thrashing_count;\n};\n\nstruct ftrace_ret_stack {\n\tlong unsigned int ret;\n\tlong unsigned int func;\n\tlong long unsigned int calltime;\n\tlong long unsigned int subtime;\n\tlong unsigned int *retp;\n};\n\nstruct blk_integrity_profile;\n\nstruct blk_integrity {\n\tconst struct blk_integrity_profile *profile;\n\tunsigned char flags;\n\tunsigned char tuple_size;\n\tunsigned char interval_exp;\n\tunsigned char tag_size;\n};\n\nenum rpm_status {\n\tRPM_ACTIVE = 0,\n\tRPM_RESUMING = 1,\n\tRPM_SUSPENDED = 2,\n\tRPM_SUSPENDING = 3,\n};\n\nstruct blk_rq_stat {\n\tu64 mean;\n\tu64 min;\n\tu64 max;\n\tu32 nr_samples;\n\tu64 batch;\n};\n\nenum blk_zoned_model {\n\tBLK_ZONED_NONE = 0,\n\tBLK_ZONED_HA = 1,\n\tBLK_ZONED_HM = 2,\n};\n\nstruct queue_limits {\n\tlong unsigned int bounce_pfn;\n\tlong unsigned int seg_boundary_mask;\n\tlong unsigned int virt_boundary_mask;\n\tunsigned int max_hw_sectors;\n\tunsigned int max_dev_sectors;\n\tunsigned int chunk_sectors;\n\tunsigned int max_sectors;\n\tunsigned int max_segment_size;\n\tunsigned int physical_block_size;\n\tunsigned int logical_block_size;\n\tunsigned int alignment_offset;\n\tunsigned int io_min;\n\tunsigned int io_opt;\n\tunsigned int max_discard_sectors;\n\tunsigned int max_hw_discard_sectors;\n\tunsigned int max_write_same_sectors;\n\tunsigned int max_write_zeroes_sectors;\n\tunsigned int max_zone_append_sectors;\n\tunsigned int discard_granularity;\n\tunsigned int discard_alignment;\n\tshort unsigned int max_segments;\n\tshort unsigned int max_integrity_segments;\n\tshort unsigned int max_discard_segments;\n\tunsigned char misaligned;\n\tunsigned char discard_misaligned;\n\tunsigned char raid_partial_stripes_expensive;\n\tenum blk_zoned_model zoned;\n};\n\nstruct bsg_ops;\n\nstruct bsg_class_device {\n\tstruct device *class_dev;\n\tint minor;\n\tstruct request_queue *queue;\n\tconst struct bsg_ops *ops;\n};\n\ntypedef void *mempool_alloc_t(gfp_t, void *);\n\ntypedef void mempool_free_t(void *, void *);\n\nstruct mempool_s {\n\tspinlock_t lock;\n\tint min_nr;\n\tint curr_nr;\n\tvoid **elements;\n\tvoid *pool_data;\n\tmempool_alloc_t *alloc;\n\tmempool_free_t *free;\n\twait_queue_head_t wait;\n};\n\ntypedef struct mempool_s mempool_t;\n\nstruct bio_set {\n\tstruct kmem_cache *bio_slab;\n\tunsigned int front_pad;\n\tmempool_t bio_pool;\n\tmempool_t bvec_pool;\n\tmempool_t bio_integrity_pool;\n\tmempool_t bvec_integrity_pool;\n\tspinlock_t rescue_lock;\n\tstruct bio_list rescue_list;\n\tstruct work_struct rescue_work;\n\tstruct workqueue_struct *rescue_workqueue;\n};\n\nstruct request;\n\nstruct elevator_queue;\n\nstruct blk_queue_stats;\n\nstruct rq_qos;\n\nstruct blk_mq_ops;\n\nstruct blk_mq_ctx;\n\nstruct blk_mq_hw_ctx;\n\nstruct blk_keyslot_manager;\n\nstruct blk_stat_callback;\n\nstruct blkcg_gq;\n\nstruct blk_trace;\n\nstruct blk_flush_queue;\n\nstruct throtl_data;\n\nstruct blk_mq_tag_set;\n\nstruct request_queue {\n\tstruct request *last_merge;\n\tstruct elevator_queue *elevator;\n\tstruct percpu_ref q_usage_counter;\n\tstruct blk_queue_stats *stats;\n\tstruct rq_qos *rq_qos;\n\tconst struct blk_mq_ops *mq_ops;\n\tstruct blk_mq_ctx *queue_ctx;\n\tunsigned int queue_depth;\n\tstruct blk_mq_hw_ctx **queue_hw_ctx;\n\tunsigned int nr_hw_queues;\n\tstruct backing_dev_info *backing_dev_info;\n\tvoid *queuedata;\n\tlong unsigned int queue_flags;\n\tatomic_t pm_only;\n\tint id;\n\tgfp_t bounce_gfp;\n\tspinlock_t queue_lock;\n\tstruct kobject kobj;\n\tstruct kobject *mq_kobj;\n\tstruct blk_integrity integrity;\n\tstruct device *dev;\n\tenum rpm_status rpm_status;\n\tunsigned int nr_pending;\n\tlong unsigned int nr_requests;\n\tunsigned int dma_pad_mask;\n\tunsigned int dma_alignment;\n\tstruct blk_keyslot_manager *ksm;\n\tunsigned int rq_timeout;\n\tint poll_nsec;\n\tstruct blk_stat_callback *poll_cb;\n\tstruct blk_rq_stat poll_stat[16];\n\tstruct timer_list timeout;\n\tstruct work_struct timeout_work;\n\tatomic_t nr_active_requests_shared_sbitmap;\n\tstruct list_head icq_list;\n\tlong unsigned int blkcg_pols[1];\n\tstruct blkcg_gq *root_blkg;\n\tstruct list_head blkg_list;\n\tstruct queue_limits limits;\n\tunsigned int required_elevator_features;\n\tunsigned int nr_zones;\n\tlong unsigned int *conv_zones_bitmap;\n\tlong unsigned int *seq_zones_wlock;\n\tunsigned int max_open_zones;\n\tunsigned int max_active_zones;\n\tunsigned int sg_timeout;\n\tunsigned int sg_reserved_size;\n\tint node;\n\tstruct mutex debugfs_mutex;\n\tstruct blk_trace *blk_trace;\n\tstruct blk_flush_queue *fq;\n\tstruct list_head requeue_list;\n\tspinlock_t requeue_lock;\n\tstruct delayed_work requeue_work;\n\tstruct mutex sysfs_lock;\n\tstruct mutex sysfs_dir_lock;\n\tstruct list_head unused_hctx_list;\n\tspinlock_t unused_hctx_lock;\n\tint mq_freeze_depth;\n\tstruct bsg_class_device bsg_dev;\n\tstruct throtl_data *td;\n\tstruct callback_head callback_head;\n\twait_queue_head_t mq_freeze_wq;\n\tstruct mutex mq_freeze_lock;\n\tstruct blk_mq_tag_set *tag_set;\n\tstruct list_head tag_set_list;\n\tstruct bio_set bio_split;\n\tstruct dentry *debugfs_dir;\n\tstruct dentry *sched_debugfs_dir;\n\tstruct dentry *rqos_debugfs_dir;\n\tbool mq_sysfs_init_done;\n\tsize_t cmd_size;\n\tu64 write_hints[5];\n};\n\nstruct cgroup_base_stat {\n\tstruct task_cputime cputime;\n};\n\nstruct psi_group_cpu;\n\nstruct psi_group {\n\tstruct mutex avgs_lock;\n\tstruct psi_group_cpu *pcpu;\n\tu64 avg_total[5];\n\tu64 avg_last_update;\n\tu64 avg_next_update;\n\tstruct delayed_work avgs_work;\n\tu64 total[10];\n\tlong unsigned int avg[15];\n\tstruct task_struct *poll_task;\n\tstruct timer_list poll_timer;\n\twait_queue_head_t poll_wait;\n\tatomic_t poll_wakeup;\n\tstruct mutex trigger_lock;\n\tstruct list_head triggers;\n\tu32 nr_triggers[5];\n\tu32 poll_states;\n\tu64 poll_min_period;\n\tu64 polling_total[5];\n\tu64 polling_next_update;\n\tu64 polling_until;\n};\n\nstruct cgroup_bpf {\n\tstruct bpf_prog_array *effective[38];\n\tstruct list_head progs[38];\n\tu32 flags[38];\n\tstruct list_head storages;\n\tstruct bpf_prog_array *inactive;\n\tstruct percpu_ref refcnt;\n\tstruct work_struct release_work;\n};\n\nstruct cgroup_freezer_state {\n\tbool freeze;\n\tint e_freeze;\n\tint nr_frozen_descendants;\n\tint nr_frozen_tasks;\n};\n\nstruct cgroup_root;\n\nstruct cgroup_rstat_cpu;\n\nstruct cgroup {\n\tstruct cgroup_subsys_state self;\n\tlong unsigned int flags;\n\tint level;\n\tint max_depth;\n\tint nr_descendants;\n\tint nr_dying_descendants;\n\tint max_descendants;\n\tint nr_populated_csets;\n\tint nr_populated_domain_children;\n\tint nr_populated_threaded_children;\n\tint nr_threaded_children;\n\tstruct kernfs_node *kn;\n\tstruct cgroup_file procs_file;\n\tstruct cgroup_file events_file;\n\tu16 subtree_control;\n\tu16 subtree_ss_mask;\n\tu16 old_subtree_control;\n\tu16 old_subtree_ss_mask;\n\tstruct cgroup_subsys_state *subsys[12];\n\tstruct cgroup_root *root;\n\tstruct list_head cset_links;\n\tstruct list_head e_csets[12];\n\tstruct cgroup *dom_cgrp;\n\tstruct cgroup *old_dom_cgrp;\n\tstruct cgroup_rstat_cpu *rstat_cpu;\n\tstruct list_head rstat_css_list;\n\tstruct cgroup_base_stat last_bstat;\n\tstruct cgroup_base_stat bstat;\n\tstruct prev_cputime prev_cputime;\n\tstruct list_head pidlists;\n\tstruct mutex pidlist_mutex;\n\twait_queue_head_t offline_waitq;\n\tstruct work_struct release_agent_work;\n\tstruct psi_group psi;\n\tstruct cgroup_bpf bpf;\n\tatomic_t congestion_count;\n\tstruct cgroup_freezer_state freezer;\n\tu64 ancestor_ids[0];\n};\n\nstruct taskstats {\n\t__u16 version;\n\t__u32 ac_exitcode;\n\t__u8 ac_flag;\n\t__u8 ac_nice;\n\t__u64 cpu_count;\n\t__u64 cpu_delay_total;\n\t__u64 blkio_count;\n\t__u64 blkio_delay_total;\n\t__u64 swapin_count;\n\t__u64 swapin_delay_total;\n\t__u64 cpu_run_real_total;\n\t__u64 cpu_run_virtual_total;\n\tchar ac_comm[32];\n\t__u8 ac_sched;\n\t__u8 ac_pad[3];\n\tint: 32;\n\t__u32 ac_uid;\n\t__u32 ac_gid;\n\t__u32 ac_pid;\n\t__u32 ac_ppid;\n\t__u32 ac_btime;\n\t__u64 ac_etime;\n\t__u64 ac_utime;\n\t__u64 ac_stime;\n\t__u64 ac_minflt;\n\t__u64 ac_majflt;\n\t__u64 coremem;\n\t__u64 virtmem;\n\t__u64 hiwater_rss;\n\t__u64 hiwater_vm;\n\t__u64 read_char;\n\t__u64 write_char;\n\t__u64 read_syscalls;\n\t__u64 write_syscalls;\n\t__u64 read_bytes;\n\t__u64 write_bytes;\n\t__u64 cancelled_write_bytes;\n\t__u64 nvcsw;\n\t__u64 nivcsw;\n\t__u64 ac_utimescaled;\n\t__u64 ac_stimescaled;\n\t__u64 cpu_scaled_run_real_total;\n\t__u64 freepages_count;\n\t__u64 freepages_delay_total;\n\t__u64 thrashing_count;\n\t__u64 thrashing_delay_total;\n\t__u64 ac_btime64;\n};\n\ntypedef struct {\n\t__u8 b[16];\n} guid_t;\n\nstruct wait_page_queue {\n\tstruct page *page;\n\tint bit_nr;\n\twait_queue_entry_t wait;\n};\n\nenum writeback_sync_modes {\n\tWB_SYNC_NONE = 0,\n\tWB_SYNC_ALL = 1,\n};\n\nstruct writeback_control {\n\tlong int nr_to_write;\n\tlong int pages_skipped;\n\tloff_t range_start;\n\tloff_t range_end;\n\tenum writeback_sync_modes sync_mode;\n\tunsigned int for_kupdate: 1;\n\tunsigned int for_background: 1;\n\tunsigned int tagged_writepages: 1;\n\tunsigned int for_reclaim: 1;\n\tunsigned int range_cyclic: 1;\n\tunsigned int for_sync: 1;\n\tunsigned int no_cgroup_owner: 1;\n\tunsigned int punt_to_cgroup: 1;\n\tstruct bdi_writeback *wb;\n\tstruct inode *inode;\n\tint wb_id;\n\tint wb_lcand_id;\n\tint wb_tcand_id;\n\tsize_t wb_bytes;\n\tsize_t wb_lcand_bytes;\n\tsize_t wb_tcand_bytes;\n};\n\nstruct readahead_control {\n\tstruct file *file;\n\tstruct address_space *mapping;\n\tlong unsigned int _index;\n\tunsigned int _nr_pages;\n\tunsigned int _batch_count;\n};\n\nstruct iovec;\n\nstruct kvec;\n\nstruct bio_vec;\n\nstruct iov_iter {\n\tunsigned int type;\n\tsize_t iov_offset;\n\tsize_t count;\n\tunion {\n\t\tconst struct iovec *iov;\n\t\tconst struct kvec *kvec;\n\t\tconst struct bio_vec *bvec;\n\t\tstruct pipe_inode_info *pipe;\n\t};\n\tunion {\n\t\tlong unsigned int nr_segs;\n\t\tstruct {\n\t\t\tunsigned int head;\n\t\t\tunsigned int start_head;\n\t\t};\n\t};\n};\n\nstruct swap_cluster_info {\n\tspinlock_t lock;\n\tunsigned int data: 24;\n\tunsigned int flags: 8;\n};\n\nstruct swap_cluster_list {\n\tstruct swap_cluster_info head;\n\tstruct swap_cluster_info tail;\n};\n\nstruct percpu_cluster;\n\nstruct swap_info_struct {\n\tlong unsigned int flags;\n\tshort int prio;\n\tstruct plist_node list;\n\tsigned char type;\n\tunsigned int max;\n\tunsigned char *swap_map;\n\tstruct swap_cluster_info *cluster_info;\n\tstruct swap_cluster_list free_clusters;\n\tunsigned int lowest_bit;\n\tunsigned int highest_bit;\n\tunsigned int pages;\n\tunsigned int inuse_pages;\n\tunsigned int cluster_next;\n\tunsigned int cluster_nr;\n\tunsigned int *cluster_next_cpu;\n\tstruct percpu_cluster *percpu_cluster;\n\tstruct rb_root swap_extent_root;\n\tstruct block_device *bdev;\n\tstruct file *swap_file;\n\tunsigned int old_block_size;\n\tlong unsigned int *frontswap_map;\n\tatomic_t frontswap_pages;\n\tspinlock_t lock;\n\tspinlock_t cont_lock;\n\tstruct work_struct discard_work;\n\tstruct swap_cluster_list discard_clusters;\n\tstruct plist_node avail_lists[0];\n};\n\nstruct cdev {\n\tstruct kobject kobj;\n\tstruct module *owner;\n\tconst struct file_operations *ops;\n\tstruct list_head list;\n\tdev_t dev;\n\tunsigned int count;\n};\n\nenum dl_dev_state {\n\tDL_DEV_NO_DRIVER = 0,\n\tDL_DEV_PROBING = 1,\n\tDL_DEV_DRIVER_BOUND = 2,\n\tDL_DEV_UNBINDING = 3,\n};\n\nstruct dev_links_info {\n\tstruct list_head suppliers;\n\tstruct list_head consumers;\n\tstruct list_head defer_sync;\n\tenum dl_dev_state status;\n};\n\nstruct pm_message {\n\tint event;\n};\n\ntypedef struct pm_message pm_message_t;\n\nenum rpm_request {\n\tRPM_REQ_NONE = 0,\n\tRPM_REQ_IDLE = 1,\n\tRPM_REQ_SUSPEND = 2,\n\tRPM_REQ_AUTOSUSPEND = 3,\n\tRPM_REQ_RESUME = 4,\n};\n\nstruct wakeup_source;\n\nstruct wake_irq;\n\nstruct pm_subsys_data;\n\nstruct dev_pm_qos;\n\nstruct dev_pm_info {\n\tpm_message_t power_state;\n\tunsigned int can_wakeup: 1;\n\tunsigned int async_suspend: 1;\n\tbool in_dpm_list: 1;\n\tbool is_prepared: 1;\n\tbool is_suspended: 1;\n\tbool is_noirq_suspended: 1;\n\tbool is_late_suspended: 1;\n\tbool no_pm: 1;\n\tbool early_init: 1;\n\tbool direct_complete: 1;\n\tu32 driver_flags;\n\tspinlock_t lock;\n\tstruct list_head entry;\n\tstruct completion completion;\n\tstruct wakeup_source *wakeup;\n\tbool wakeup_path: 1;\n\tbool syscore: 1;\n\tbool no_pm_callbacks: 1;\n\tunsigned int must_resume: 1;\n\tunsigned int may_skip_resume: 1;\n\tstruct hrtimer suspend_timer;\n\tu64 timer_expires;\n\tstruct work_struct work;\n\twait_queue_head_t wait_queue;\n\tstruct wake_irq *wakeirq;\n\tatomic_t usage_count;\n\tatomic_t child_count;\n\tunsigned int disable_depth: 3;\n\tunsigned int idle_notification: 1;\n\tunsigned int request_pending: 1;\n\tunsigned int deferred_resume: 1;\n\tunsigned int runtime_auto: 1;\n\tbool ignore_children: 1;\n\tunsigned int no_callbacks: 1;\n\tunsigned int irq_safe: 1;\n\tunsigned int use_autosuspend: 1;\n\tunsigned int timer_autosuspends: 1;\n\tunsigned int memalloc_noio: 1;\n\tunsigned int links_count;\n\tenum rpm_request request;\n\tenum rpm_status runtime_status;\n\tint runtime_error;\n\tint autosuspend_delay;\n\tu64 last_busy;\n\tu64 active_time;\n\tu64 suspended_time;\n\tu64 accounting_timestamp;\n\tstruct pm_subsys_data *subsys_data;\n\tvoid (*set_latency_tolerance)(struct device *, s32);\n\tstruct dev_pm_qos *qos;\n};\n\nstruct dev_archdata {};\n\nstruct device_private;\n\nstruct device_type;\n\nstruct bus_type;\n\nstruct device_driver;\n\nstruct dev_pm_domain;\n\nstruct em_perf_domain;\n\nstruct dev_pin_info;\n\nstruct dma_map_ops;\n\nstruct bus_dma_region;\n\nstruct device_dma_parameters;\n\nstruct cma;\n\nstruct device_node;\n\nstruct class;\n\nstruct iommu_group;\n\nstruct dev_iommu;\n\nstruct device {\n\tstruct kobject kobj;\n\tstruct device *parent;\n\tstruct device_private *p;\n\tconst char *init_name;\n\tconst struct device_type *type;\n\tstruct bus_type *bus;\n\tstruct device_driver *driver;\n\tvoid *platform_data;\n\tvoid *driver_data;\n\tstruct mutex mutex;\n\tstruct dev_links_info links;\n\tstruct dev_pm_info power;\n\tstruct dev_pm_domain *pm_domain;\n\tstruct em_perf_domain *em_pd;\n\tstruct irq_domain *msi_domain;\n\tstruct dev_pin_info *pins;\n\tstruct list_head msi_list;\n\tconst struct dma_map_ops *dma_ops;\n\tu64 *dma_mask;\n\tu64 coherent_dma_mask;\n\tu64 bus_dma_limit;\n\tconst struct bus_dma_region *dma_range_map;\n\tstruct device_dma_parameters *dma_parms;\n\tstruct list_head dma_pools;\n\tstruct cma *cma_area;\n\tstruct dev_archdata archdata;\n\tstruct device_node *of_node;\n\tstruct fwnode_handle *fwnode;\n\tint numa_node;\n\tdev_t devt;\n\tu32 id;\n\tspinlock_t devres_lock;\n\tstruct list_head devres_head;\n\tstruct class *class;\n\tconst struct attribute_group **groups;\n\tvoid (*release)(struct device *);\n\tstruct iommu_group *iommu_group;\n\tstruct dev_iommu *iommu;\n\tbool offline_disabled: 1;\n\tbool offline: 1;\n\tbool of_node_reused: 1;\n\tbool state_synced: 1;\n};\n\nstruct disk_stats;\n\nstruct gendisk;\n\nstruct partition_meta_info;\n\nstruct block_device {\n\tsector_t bd_start_sect;\n\tstruct disk_stats *bd_stats;\n\tlong unsigned int bd_stamp;\n\tbool bd_read_only;\n\tdev_t bd_dev;\n\tint bd_openers;\n\tstruct inode *bd_inode;\n\tstruct super_block *bd_super;\n\tstruct mutex bd_mutex;\n\tvoid *bd_claiming;\n\tstruct device bd_device;\n\tvoid *bd_holder;\n\tint bd_holders;\n\tbool bd_write_holder;\n\tstruct list_head bd_holder_disks;\n\tstruct kobject *bd_holder_dir;\n\tu8 bd_partno;\n\tunsigned int bd_part_count;\n\tspinlock_t bd_size_lock;\n\tstruct gendisk *bd_disk;\n\tstruct backing_dev_info *bd_bdi;\n\tint bd_fsfreeze_count;\n\tstruct mutex bd_fsfreeze_mutex;\n\tstruct super_block *bd_fsfreeze_sb;\n\tstruct partition_meta_info *bd_meta_info;\n};\n\nstruct fc_log;\n\nstruct p_log {\n\tconst char *prefix;\n\tstruct fc_log *log;\n};\n\nenum fs_context_purpose {\n\tFS_CONTEXT_FOR_MOUNT = 0,\n\tFS_CONTEXT_FOR_SUBMOUNT = 1,\n\tFS_CONTEXT_FOR_RECONFIGURE = 2,\n};\n\nenum fs_context_phase {\n\tFS_CONTEXT_CREATE_PARAMS = 0,\n\tFS_CONTEXT_CREATING = 1,\n\tFS_CONTEXT_AWAITING_MOUNT = 2,\n\tFS_CONTEXT_AWAITING_RECONF = 3,\n\tFS_CONTEXT_RECONF_PARAMS = 4,\n\tFS_CONTEXT_RECONFIGURING = 5,\n\tFS_CONTEXT_FAILED = 6,\n};\n\nstruct fs_context_operations;\n\nstruct fs_context {\n\tconst struct fs_context_operations *ops;\n\tstruct mutex uapi_mutex;\n\tstruct file_system_type *fs_type;\n\tvoid *fs_private;\n\tvoid *sget_key;\n\tstruct dentry *root;\n\tstruct user_namespace *user_ns;\n\tstruct net *net_ns;\n\tconst struct cred *cred;\n\tstruct p_log log;\n\tconst char *source;\n\tvoid *security;\n\tvoid *s_fs_info;\n\tunsigned int sb_flags;\n\tunsigned int sb_flags_mask;\n\tunsigned int s_iflags;\n\tunsigned int lsm_flags;\n\tenum fs_context_purpose purpose: 8;\n\tenum fs_context_phase phase: 8;\n\tbool need_free: 1;\n\tbool global: 1;\n\tbool oldapi: 1;\n};\n\nstruct audit_names;\n\nstruct filename {\n\tconst char *name;\n\tconst char *uptr;\n\tint refcnt;\n\tstruct audit_names *aname;\n\tconst char iname[0];\n};\n\ntypedef u8 blk_status_t;\n\nstruct bvec_iter {\n\tsector_t bi_sector;\n\tunsigned int bi_size;\n\tunsigned int bi_idx;\n\tunsigned int bi_bvec_done;\n};\n\ntypedef void bio_end_io_t(struct bio *);\n\nstruct bio_issue {\n\tu64 value;\n};\n\nstruct bio_vec {\n\tstruct page *bv_page;\n\tunsigned int bv_len;\n\tunsigned int bv_offset;\n};\n\nstruct bio_crypt_ctx;\n\nstruct bio_integrity_payload;\n\nstruct bio {\n\tstruct bio *bi_next;\n\tstruct gendisk *bi_disk;\n\tunsigned int bi_opf;\n\tshort unsigned int bi_flags;\n\tshort unsigned int bi_ioprio;\n\tshort unsigned int bi_write_hint;\n\tblk_status_t bi_status;\n\tu8 bi_partno;\n\tatomic_t __bi_remaining;\n\tstruct bvec_iter bi_iter;\n\tbio_end_io_t *bi_end_io;\n\tvoid *bi_private;\n\tstruct blkcg_gq *bi_blkg;\n\tstruct bio_issue bi_issue;\n\tu64 bi_iocost_cost;\n\tstruct bio_crypt_ctx *bi_crypt_context;\n\tunion {\n\t\tstruct bio_integrity_payload *bi_integrity;\n\t};\n\tshort unsigned int bi_vcnt;\n\tshort unsigned int bi_max_vecs;\n\tatomic_t __bi_cnt;\n\tstruct bio_vec *bi_io_vec;\n\tstruct bio_set *bi_pool;\n\tstruct bio_vec bi_inline_vecs[0];\n};\n\nstruct linux_binprm {\n\tstruct vm_area_struct *vma;\n\tlong unsigned int vma_pages;\n\tstruct mm_struct *mm;\n\tlong unsigned int p;\n\tlong unsigned int argmin;\n\tunsigned int have_execfd: 1;\n\tunsigned int execfd_creds: 1;\n\tunsigned int secureexec: 1;\n\tunsigned int point_of_no_return: 1;\n\tstruct file *executable;\n\tstruct file *interpreter;\n\tstruct file *file;\n\tstruct cred *cred;\n\tint unsafe;\n\tunsigned int per_clear;\n\tint argc;\n\tint envc;\n\tconst char *filename;\n\tconst char *interp;\n\tconst char *fdpath;\n\tunsigned int interp_flags;\n\tint execfd;\n\tlong unsigned int loader;\n\tlong unsigned int exec;\n\tstruct rlimit rlim_stack;\n\tchar buf[256];\n};\n\nstruct coredump_params {\n\tconst kernel_siginfo_t *siginfo;\n\tstruct pt_regs *regs;\n\tstruct file *file;\n\tlong unsigned int limit;\n\tlong unsigned int mm_flags;\n\tloff_t written;\n\tloff_t pos;\n};\n\nstruct em_perf_state {\n\tlong unsigned int frequency;\n\tlong unsigned int power;\n\tlong unsigned int cost;\n};\n\nstruct em_perf_domain {\n\tstruct em_perf_state *table;\n\tint nr_perf_states;\n\tint milliwatts;\n\tlong unsigned int cpus[0];\n};\n\nstruct dev_pm_ops {\n\tint (*prepare)(struct device *);\n\tvoid (*complete)(struct device *);\n\tint (*suspend)(struct device *);\n\tint (*resume)(struct device *);\n\tint (*freeze)(struct device *);\n\tint (*thaw)(struct device *);\n\tint (*poweroff)(struct device *);\n\tint (*restore)(struct device *);\n\tint (*suspend_late)(struct device *);\n\tint (*resume_early)(struct device *);\n\tint (*freeze_late)(struct device *);\n\tint (*thaw_early)(struct device *);\n\tint (*poweroff_late)(struct device *);\n\tint (*restore_early)(struct device *);\n\tint (*suspend_noirq)(struct device *);\n\tint (*resume_noirq)(struct device *);\n\tint (*freeze_noirq)(struct device *);\n\tint (*thaw_noirq)(struct device *);\n\tint (*poweroff_noirq)(struct device *);\n\tint (*restore_noirq)(struct device *);\n\tint (*runtime_suspend)(struct device *);\n\tint (*runtime_resume)(struct device *);\n\tint (*runtime_idle)(struct device *);\n};\n\nstruct pm_domain_data;\n\nstruct pm_subsys_data {\n\tspinlock_t lock;\n\tunsigned int refcount;\n\tstruct list_head clock_list;\n\tstruct pm_domain_data *domain_data;\n};\n\nstruct wakeup_source {\n\tconst char *name;\n\tint id;\n\tstruct list_head entry;\n\tspinlock_t lock;\n\tstruct wake_irq *wakeirq;\n\tstruct timer_list timer;\n\tlong unsigned int timer_expires;\n\tktime_t total_time;\n\tktime_t max_time;\n\tktime_t last_time;\n\tktime_t start_prevent_time;\n\tktime_t prevent_sleep_time;\n\tlong unsigned int event_count;\n\tlong unsigned int active_count;\n\tlong unsigned int relax_count;\n\tlong unsigned int expire_count;\n\tlong unsigned int wakeup_count;\n\tstruct device *dev;\n\tbool active: 1;\n\tbool autosleep_enabled: 1;\n};\n\nstruct dev_pm_domain {\n\tstruct dev_pm_ops ops;\n\tint (*start)(struct device *);\n\tvoid (*detach)(struct device *, bool);\n\tint (*activate)(struct device *);\n\tvoid (*sync)(struct device *);\n\tvoid (*dismiss)(struct device *);\n};\n\nstruct iommu_ops;\n\nstruct subsys_private;\n\nstruct bus_type {\n\tconst char *name;\n\tconst char *dev_name;\n\tstruct device *dev_root;\n\tconst struct attribute_group **bus_groups;\n\tconst struct attribute_group **dev_groups;\n\tconst struct attribute_group **drv_groups;\n\tint (*match)(struct device *, struct device_driver *);\n\tint (*uevent)(struct device *, struct kobj_uevent_env *);\n\tint (*probe)(struct device *);\n\tvoid (*sync_state)(struct device *);\n\tint (*remove)(struct device *);\n\tvoid (*shutdown)(struct device *);\n\tint (*online)(struct device *);\n\tint (*offline)(struct device *);\n\tint (*suspend)(struct device *, pm_message_t);\n\tint (*resume)(struct device *);\n\tint (*num_vf)(struct device *);\n\tint (*dma_configure)(struct device *);\n\tconst struct dev_pm_ops *pm;\n\tconst struct iommu_ops *iommu_ops;\n\tstruct subsys_private *p;\n\tstruct lock_class_key lock_key;\n\tbool need_parent_lock;\n};\n\nenum probe_type {\n\tPROBE_DEFAULT_STRATEGY = 0,\n\tPROBE_PREFER_ASYNCHRONOUS = 1,\n\tPROBE_FORCE_SYNCHRONOUS = 2,\n};\n\nstruct of_device_id;\n\nstruct acpi_device_id;\n\nstruct driver_private;\n\nstruct device_driver {\n\tconst char *name;\n\tstruct bus_type *bus;\n\tstruct module *owner;\n\tconst char *mod_name;\n\tbool suppress_bind_attrs;\n\tenum probe_type probe_type;\n\tconst struct of_device_id *of_match_table;\n\tconst struct acpi_device_id *acpi_match_table;\n\tint (*probe)(struct device *);\n\tvoid (*sync_state)(struct device *);\n\tint (*remove)(struct device *);\n\tvoid (*shutdown)(struct device *);\n\tint (*suspend)(struct device *, pm_message_t);\n\tint (*resume)(struct device *);\n\tconst struct attribute_group **groups;\n\tconst struct attribute_group **dev_groups;\n\tconst struct dev_pm_ops *pm;\n\tvoid (*coredump)(struct device *);\n\tstruct driver_private *p;\n};\n\nenum iommu_cap {\n\tIOMMU_CAP_CACHE_COHERENCY = 0,\n\tIOMMU_CAP_INTR_REMAP = 1,\n\tIOMMU_CAP_NOEXEC = 2,\n};\n\nenum iommu_attr {\n\tDOMAIN_ATTR_GEOMETRY = 0,\n\tDOMAIN_ATTR_PAGING = 1,\n\tDOMAIN_ATTR_WINDOWS = 2,\n\tDOMAIN_ATTR_FSL_PAMU_STASH = 3,\n\tDOMAIN_ATTR_FSL_PAMU_ENABLE = 4,\n\tDOMAIN_ATTR_FSL_PAMUV1 = 5,\n\tDOMAIN_ATTR_NESTING = 6,\n\tDOMAIN_ATTR_DMA_USE_FLUSH_QUEUE = 7,\n\tDOMAIN_ATTR_IO_PGTABLE_CFG = 8,\n\tDOMAIN_ATTR_MAX = 9,\n};\n\nenum iommu_dev_features {\n\tIOMMU_DEV_FEAT_AUX = 0,\n\tIOMMU_DEV_FEAT_SVA = 1,\n};\n\nstruct iommu_domain;\n\nstruct iommu_iotlb_gather;\n\nstruct iommu_device;\n\nstruct iommu_resv_region;\n\nstruct of_phandle_args;\n\nstruct iommu_sva;\n\nstruct iommu_fault_event;\n\nstruct iommu_page_response;\n\nstruct iommu_cache_invalidate_info;\n\nstruct iommu_gpasid_bind_data;\n\nstruct iommu_ops {\n\tbool (*capable)(enum iommu_cap);\n\tstruct iommu_domain * (*domain_alloc)(unsigned int);\n\tvoid (*domain_free)(struct iommu_domain *);\n\tint (*attach_dev)(struct iommu_domain *, struct device *);\n\tvoid (*detach_dev)(struct iommu_domain *, struct device *);\n\tint (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);\n\tsize_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);\n\tvoid (*flush_iotlb_all)(struct iommu_domain *);\n\tvoid (*iotlb_sync_map)(struct iommu_domain *);\n\tvoid (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);\n\tphys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);\n\tstruct iommu_device * (*probe_device)(struct device *);\n\tvoid (*release_device)(struct device *);\n\tvoid (*probe_finalize)(struct device *);\n\tstruct iommu_group * (*device_group)(struct device *);\n\tint (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);\n\tint (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);\n\tvoid (*get_resv_regions)(struct device *, struct list_head *);\n\tvoid (*put_resv_regions)(struct device *, struct list_head *);\n\tvoid (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);\n\tint (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);\n\tvoid (*domain_window_disable)(struct iommu_domain *, u32);\n\tint (*of_xlate)(struct device *, struct of_phandle_args *);\n\tbool (*is_attach_deferred)(struct iommu_domain *, struct device *);\n\tbool (*dev_has_feat)(struct device *, enum iommu_dev_features);\n\tbool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);\n\tint (*dev_enable_feat)(struct device *, enum iommu_dev_features);\n\tint (*dev_disable_feat)(struct device *, enum iommu_dev_features);\n\tint (*aux_attach_dev)(struct iommu_domain *, struct device *);\n\tvoid (*aux_detach_dev)(struct iommu_domain *, struct device *);\n\tint (*aux_get_pasid)(struct iommu_domain *, struct device *);\n\tstruct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);\n\tvoid (*sva_unbind)(struct iommu_sva *);\n\tu32 (*sva_get_pasid)(struct iommu_sva *);\n\tint (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);\n\tint (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);\n\tint (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);\n\tint (*sva_unbind_gpasid)(struct device *, u32);\n\tint (*def_domain_type)(struct device *);\n\tlong unsigned int pgsize_bitmap;\n\tstruct module *owner;\n};\n\nstruct device_type {\n\tconst char *name;\n\tconst struct attribute_group **groups;\n\tint (*uevent)(struct device *, struct kobj_uevent_env *);\n\tchar * (*devnode)(struct device *, umode_t *, kuid_t *, kgid_t *);\n\tvoid (*release)(struct device *);\n\tconst struct dev_pm_ops *pm;\n};\n\nstruct class {\n\tconst char *name;\n\tstruct module *owner;\n\tconst struct attribute_group **class_groups;\n\tconst struct attribute_group **dev_groups;\n\tstruct kobject *dev_kobj;\n\tint (*dev_uevent)(struct device *, struct kobj_uevent_env *);\n\tchar * (*devnode)(struct device *, umode_t *);\n\tvoid (*class_release)(struct class *);\n\tvoid (*dev_release)(struct device *);\n\tint (*shutdown_pre)(struct device *);\n\tconst struct kobj_ns_type_operations *ns_type;\n\tconst void * (*namespace)(struct device *);\n\tvoid (*get_ownership)(struct device *, kuid_t *, kgid_t *);\n\tconst struct dev_pm_ops *pm;\n\tstruct subsys_private *p;\n};\n\nstruct of_device_id {\n\tchar name[32];\n\tchar type[32];\n\tchar compatible[128];\n\tconst void *data;\n};\n\ntypedef long unsigned int kernel_ulong_t;\n\nstruct acpi_device_id {\n\t__u8 id[9];\n\tkernel_ulong_t driver_data;\n\t__u32 cls;\n\t__u32 cls_msk;\n};\n\nstruct device_dma_parameters {\n\tunsigned int max_segment_size;\n\tlong unsigned int segment_boundary_mask;\n};\n\nenum dma_data_direction {\n\tDMA_BIDIRECTIONAL = 0,\n\tDMA_TO_DEVICE = 1,\n\tDMA_FROM_DEVICE = 2,\n\tDMA_NONE = 3,\n};\n\nstruct sg_table;\n\nstruct scatterlist;\n\nstruct dma_map_ops {\n\tvoid * (*alloc)(struct device *, size_t, dma_addr_t *, gfp_t, long unsigned int);\n\tvoid (*free)(struct device *, size_t, void *, dma_addr_t, long unsigned int);\n\tstruct page * (*alloc_pages)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);\n\tvoid (*free_pages)(struct device *, size_t, struct page *, dma_addr_t, enum dma_data_direction);\n\tvoid * (*alloc_noncoherent)(struct device *, size_t, dma_addr_t *, enum dma_data_direction, gfp_t);\n\tvoid (*free_noncoherent)(struct device *, size_t, void *, dma_addr_t, enum dma_data_direction);\n\tint (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t, size_t, long unsigned int);\n\tint (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t, size_t, long unsigned int);\n\tdma_addr_t (*map_page)(struct device *, struct page *, long unsigned int, size_t, enum dma_data_direction, long unsigned int);\n\tvoid (*unmap_page)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);\n\tint (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);\n\tvoid (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction, long unsigned int);\n\tdma_addr_t (*map_resource)(struct device *, phys_addr_t, size_t, enum dma_data_direction, long unsigned int);\n\tvoid (*unmap_resource)(struct device *, dma_addr_t, size_t, enum dma_data_direction, long unsigned int);\n\tvoid (*sync_single_for_cpu)(struct device *, dma_addr_t, size_t, enum dma_data_direction);\n\tvoid (*sync_single_for_device)(struct device *, dma_addr_t, size_t, enum dma_data_direction);\n\tvoid (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction);\n\tvoid (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction);\n\tvoid (*cache_sync)(struct device *, void *, size_t, enum dma_data_direction);\n\tint (*dma_supported)(struct device *, u64);\n\tu64 (*get_required_mask)(struct device *);\n\tsize_t (*max_mapping_size)(struct device *);\n\tlong unsigned int (*get_merge_boundary)(struct device *);\n};\n\nstruct bus_dma_region {\n\tphys_addr_t cpu_start;\n\tdma_addr_t dma_start;\n\tu64 size;\n\tu64 offset;\n};\n\ntypedef u32 phandle;\n\nstruct fwnode_operations;\n\nstruct fwnode_handle {\n\tstruct fwnode_handle *secondary;\n\tconst struct fwnode_operations *ops;\n\tstruct device *dev;\n\tstruct list_head suppliers;\n\tstruct list_head consumers;\n\tu8 flags;\n};\n\nstruct property;\n\nstruct device_node {\n\tconst char *name;\n\tphandle phandle;\n\tconst char *full_name;\n\tstruct fwnode_handle fwnode;\n\tstruct property *properties;\n\tstruct property *deadprops;\n\tstruct device_node *parent;\n\tstruct device_node *child;\n\tstruct device_node *sibling;\n\tlong unsigned int _flags;\n\tvoid *data;\n};\n\nenum cpuhp_state {\n\tCPUHP_INVALID = 4294967295,\n\tCPUHP_OFFLINE = 0,\n\tCPUHP_CREATE_THREADS = 1,\n\tCPUHP_PERF_PREPARE = 2,\n\tCPUHP_PERF_X86_PREPARE = 3,\n\tCPUHP_PERF_X86_AMD_UNCORE_PREP = 4,\n\tCPUHP_PERF_POWER = 5,\n\tCPUHP_PERF_SUPERH = 6,\n\tCPUHP_X86_HPET_DEAD = 7,\n\tCPUHP_X86_APB_DEAD = 8,\n\tCPUHP_X86_MCE_DEAD = 9,\n\tCPUHP_VIRT_NET_DEAD = 10,\n\tCPUHP_SLUB_DEAD = 11,\n\tCPUHP_DEBUG_OBJ_DEAD = 12,\n\tCPUHP_MM_WRITEBACK_DEAD = 13,\n\tCPUHP_MM_VMSTAT_DEAD = 14,\n\tCPUHP_SOFTIRQ_DEAD = 15,\n\tCPUHP_NET_MVNETA_DEAD = 16,\n\tCPUHP_CPUIDLE_DEAD = 17,\n\tCPUHP_ARM64_FPSIMD_DEAD = 18,\n\tCPUHP_ARM_OMAP_WAKE_DEAD = 19,\n\tCPUHP_IRQ_POLL_DEAD = 20,\n\tCPUHP_BLOCK_SOFTIRQ_DEAD = 21,\n\tCPUHP_ACPI_CPUDRV_DEAD = 22,\n\tCPUHP_S390_PFAULT_DEAD = 23,\n\tCPUHP_BLK_MQ_DEAD = 24,\n\tCPUHP_FS_BUFF_DEAD = 25,\n\tCPUHP_PRINTK_DEAD = 26,\n\tCPUHP_MM_MEMCQ_DEAD = 27,\n\tCPUHP_PERCPU_CNT_DEAD = 28,\n\tCPUHP_RADIX_DEAD = 29,\n\tCPUHP_PAGE_ALLOC_DEAD = 30,\n\tCPUHP_NET_DEV_DEAD = 31,\n\tCPUHP_PCI_XGENE_DEAD = 32,\n\tCPUHP_IOMMU_INTEL_DEAD = 33,\n\tCPUHP_LUSTRE_CFS_DEAD = 34,\n\tCPUHP_AP_ARM_CACHE_B15_RAC_DEAD = 35,\n\tCPUHP_PADATA_DEAD = 36,\n\tCPUHP_WORKQUEUE_PREP = 37,\n\tCPUHP_POWER_NUMA_PREPARE = 38,\n\tCPUHP_HRTIMERS_PREPARE = 39,\n\tCPUHP_PROFILE_PREPARE = 40,\n\tCPUHP_X2APIC_PREPARE = 41,\n\tCPUHP_SMPCFD_PREPARE = 42,\n\tCPUHP_RELAY_PREPARE = 43,\n\tCPUHP_SLAB_PREPARE = 44,\n\tCPUHP_MD_RAID5_PREPARE = 45,\n\tCPUHP_RCUTREE_PREP = 46,\n\tCPUHP_CPUIDLE_COUPLED_PREPARE = 47,\n\tCPUHP_POWERPC_PMAC_PREPARE = 48,\n\tCPUHP_POWERPC_MMU_CTX_PREPARE = 49,\n\tCPUHP_XEN_PREPARE = 50,\n\tCPUHP_XEN_EVTCHN_PREPARE = 51,\n\tCPUHP_ARM_SHMOBILE_SCU_PREPARE = 52,\n\tCPUHP_SH_SH3X_PREPARE = 53,\n\tCPUHP_NET_FLOW_PREPARE = 54,\n\tCPUHP_TOPOLOGY_PREPARE = 55,\n\tCPUHP_NET_IUCV_PREPARE = 56,\n\tCPUHP_ARM_BL_PREPARE = 57,\n\tCPUHP_TRACE_RB_PREPARE = 58,\n\tCPUHP_MM_ZS_PREPARE = 59,\n\tCPUHP_MM_ZSWP_MEM_PREPARE = 60,\n\tCPUHP_MM_ZSWP_POOL_PREPARE = 61,\n\tCPUHP_KVM_PPC_BOOK3S_PREPARE = 62,\n\tCPUHP_ZCOMP_PREPARE = 63,\n\tCPUHP_TIMERS_PREPARE = 64,\n\tCPUHP_MIPS_SOC_PREPARE = 65,\n\tCPUHP_BP_PREPARE_DYN = 66,\n\tCPUHP_BP_PREPARE_DYN_END = 86,\n\tCPUHP_BRINGUP_CPU = 87,\n\tCPUHP_AP_IDLE_DEAD = 88,\n\tCPUHP_AP_OFFLINE = 89,\n\tCPUHP_AP_SCHED_STARTING = 90,\n\tCPUHP_AP_RCUTREE_DYING = 91,\n\tCPUHP_AP_CPU_PM_STARTING = 92,\n\tCPUHP_AP_IRQ_GIC_STARTING = 93,\n\tCPUHP_AP_IRQ_HIP04_STARTING = 94,\n\tCPUHP_AP_IRQ_ARMADA_XP_STARTING = 95,\n\tCPUHP_AP_IRQ_BCM2836_STARTING = 96,\n\tCPUHP_AP_IRQ_MIPS_GIC_STARTING = 97,\n\tCPUHP_AP_IRQ_RISCV_STARTING = 98,\n\tCPUHP_AP_IRQ_SIFIVE_PLIC_STARTING = 99,\n\tCPUHP_AP_ARM_MVEBU_COHERENCY = 100,\n\tCPUHP_AP_MICROCODE_LOADER = 101,\n\tCPUHP_AP_PERF_X86_AMD_UNCORE_STARTING = 102,\n\tCPUHP_AP_PERF_X86_STARTING = 103,\n\tCPUHP_AP_PERF_X86_AMD_IBS_STARTING = 104,\n\tCPUHP_AP_PERF_X86_CQM_STARTING = 105,\n\tCPUHP_AP_PERF_X86_CSTATE_STARTING = 106,\n\tCPUHP_AP_PERF_XTENSA_STARTING = 107,\n\tCPUHP_AP_MIPS_OP_LOONGSON3_STARTING = 108,\n\tCPUHP_AP_ARM_SDEI_STARTING = 109,\n\tCPUHP_AP_ARM_VFP_STARTING = 110,\n\tCPUHP_AP_ARM64_DEBUG_MONITORS_STARTING = 111,\n\tCPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING = 112,\n\tCPUHP_AP_PERF_ARM_ACPI_STARTING = 113,\n\tCPUHP_AP_PERF_ARM_STARTING = 114,\n\tCPUHP_AP_ARM_L2X0_STARTING = 115,\n\tCPUHP_AP_EXYNOS4_MCT_TIMER_STARTING = 116,\n\tCPUHP_AP_ARM_ARCH_TIMER_STARTING = 117,\n\tCPUHP_AP_ARM_GLOBAL_TIMER_STARTING = 118,\n\tCPUHP_AP_JCORE_TIMER_STARTING = 119,\n\tCPUHP_AP_ARM_TWD_STARTING = 120,\n\tCPUHP_AP_QCOM_TIMER_STARTING = 121,\n\tCPUHP_AP_TEGRA_TIMER_STARTING = 122,\n\tCPUHP_AP_ARMADA_TIMER_STARTING = 123,\n\tCPUHP_AP_MARCO_TIMER_STARTING = 124,\n\tCPUHP_AP_MIPS_GIC_TIMER_STARTING = 125,\n\tCPUHP_AP_ARC_TIMER_STARTING = 126,\n\tCPUHP_AP_RISCV_TIMER_STARTING = 127,\n\tCPUHP_AP_CLINT_TIMER_STARTING = 128,\n\tCPUHP_AP_CSKY_TIMER_STARTING = 129,\n\tCPUHP_AP_HYPERV_TIMER_STARTING = 130,\n\tCPUHP_AP_KVM_STARTING = 131,\n\tCPUHP_AP_KVM_ARM_VGIC_INIT_STARTING = 132,\n\tCPUHP_AP_KVM_ARM_VGIC_STARTING = 133,\n\tCPUHP_AP_KVM_ARM_TIMER_STARTING = 134,\n\tCPUHP_AP_DUMMY_TIMER_STARTING = 135,\n\tCPUHP_AP_ARM_XEN_STARTING = 136,\n\tCPUHP_AP_ARM_CORESIGHT_STARTING = 137,\n\tCPUHP_AP_ARM_CORESIGHT_CTI_STARTING = 138,\n\tCPUHP_AP_ARM64_ISNDEP_STARTING = 139,\n\tCPUHP_AP_SMPCFD_DYING = 140,\n\tCPUHP_AP_X86_TBOOT_DYING = 141,\n\tCPUHP_AP_ARM_CACHE_B15_RAC_DYING = 142,\n\tCPUHP_AP_ONLINE = 143,\n\tCPUHP_TEARDOWN_CPU = 144,\n\tCPUHP_AP_ONLINE_IDLE = 145,\n\tCPUHP_AP_SCHED_WAIT_EMPTY = 146,\n\tCPUHP_AP_SMPBOOT_THREADS = 147,\n\tCPUHP_AP_X86_VDSO_VMA_ONLINE = 148,\n\tCPUHP_AP_IRQ_AFFINITY_ONLINE = 149,\n\tCPUHP_AP_BLK_MQ_ONLINE = 150,\n\tCPUHP_AP_ARM_MVEBU_SYNC_CLOCKS = 151,\n\tCPUHP_AP_X86_INTEL_EPB_ONLINE = 152,\n\tCPUHP_AP_PERF_ONLINE = 153,\n\tCPUHP_AP_PERF_X86_ONLINE = 154,\n\tCPUHP_AP_PERF_X86_UNCORE_ONLINE = 155,\n\tCPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE = 156,\n\tCPUHP_AP_PERF_X86_AMD_POWER_ONLINE = 157,\n\tCPUHP_AP_PERF_X86_RAPL_ONLINE = 158,\n\tCPUHP_AP_PERF_X86_CQM_ONLINE = 159,\n\tCPUHP_AP_PERF_X86_CSTATE_ONLINE = 160,\n\tCPUHP_AP_PERF_S390_CF_ONLINE = 161,\n\tCPUHP_AP_PERF_S390_SF_ONLINE = 162,\n\tCPUHP_AP_PERF_ARM_CCI_ONLINE = 163,\n\tCPUHP_AP_PERF_ARM_CCN_ONLINE = 164,\n\tCPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE = 165,\n\tCPUHP_AP_PERF_ARM_HISI_HHA_ONLINE = 166,\n\tCPUHP_AP_PERF_ARM_HISI_L3_ONLINE = 167,\n\tCPUHP_AP_PERF_ARM_L2X0_ONLINE = 168,\n\tCPUHP_AP_PERF_ARM_QCOM_L2_ONLINE = 169,\n\tCPUHP_AP_PERF_ARM_QCOM_L3_ONLINE = 170,\n\tCPUHP_AP_PERF_ARM_APM_XGENE_ONLINE = 171,\n\tCPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE = 172,\n\tCPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE = 173,\n\tCPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE = 174,\n\tCPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE = 175,\n\tCPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE = 176,\n\tCPUHP_AP_PERF_POWERPC_HV_24x7_ONLINE = 177,\n\tCPUHP_AP_PERF_POWERPC_HV_GPCI_ONLINE = 178,\n\tCPUHP_AP_WATCHDOG_ONLINE = 179,\n\tCPUHP_AP_WORKQUEUE_ONLINE = 180,\n\tCPUHP_AP_RCUTREE_ONLINE = 181,\n\tCPUHP_AP_BASE_CACHEINFO_ONLINE = 182,\n\tCPUHP_AP_ONLINE_DYN = 183,\n\tCPUHP_AP_ONLINE_DYN_END = 213,\n\tCPUHP_AP_X86_HPET_ONLINE = 214,\n\tCPUHP_AP_X86_KVM_CLK_ONLINE = 215,\n\tCPUHP_AP_ACTIVE = 216,\n\tCPUHP_ONLINE = 217,\n};\n\nstruct static_call_mod {\n\tstruct static_call_mod *next;\n\tstruct module *mod;\n\tstruct static_call_site *sites;\n};\n\nstruct ring_buffer_event {\n\tu32 type_len: 5;\n\tu32 time_delta: 27;\n\tu32 array[0];\n};\n\nstruct seq_buf {\n\tchar *buffer;\n\tsize_t size;\n\tsize_t len;\n\tloff_t readpos;\n};\n\nstruct trace_seq {\n\tchar buffer[4096];\n\tstruct seq_buf seq;\n\tint full;\n};\n\nenum perf_sw_ids {\n\tPERF_COUNT_SW_CPU_CLOCK = 0,\n\tPERF_COUNT_SW_TASK_CLOCK = 1,\n\tPERF_COUNT_SW_PAGE_FAULTS = 2,\n\tPERF_COUNT_SW_CONTEXT_SWITCHES = 3,\n\tPERF_COUNT_SW_CPU_MIGRATIONS = 4,\n\tPERF_COUNT_SW_PAGE_FAULTS_MIN = 5,\n\tPERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,\n\tPERF_COUNT_SW_ALIGNMENT_FAULTS = 7,\n\tPERF_COUNT_SW_EMULATION_FAULTS = 8,\n\tPERF_COUNT_SW_DUMMY = 9,\n\tPERF_COUNT_SW_BPF_OUTPUT = 10,\n\tPERF_COUNT_SW_MAX = 11,\n};\n\nunion perf_mem_data_src {\n\t__u64 val;\n\tstruct {\n\t\t__u64 mem_op: 5;\n\t\t__u64 mem_lvl: 14;\n\t\t__u64 mem_snoop: 5;\n\t\t__u64 mem_lock: 2;\n\t\t__u64 mem_dtlb: 7;\n\t\t__u64 mem_lvl_num: 4;\n\t\t__u64 mem_remote: 1;\n\t\t__u64 mem_snoopx: 2;\n\t\t__u64 mem_rsvd: 24;\n\t};\n};\n\nstruct perf_branch_entry {\n\t__u64 from;\n\t__u64 to;\n\t__u64 mispred: 1;\n\t__u64 predicted: 1;\n\t__u64 in_tx: 1;\n\t__u64 abort: 1;\n\t__u64 cycles: 16;\n\t__u64 type: 4;\n\t__u64 reserved: 40;\n};\n\nstruct new_utsname {\n\tchar sysname[65];\n\tchar nodename[65];\n\tchar release[65];\n\tchar version[65];\n\tchar machine[65];\n\tchar domainname[65];\n};\n\nstruct uts_namespace {\n\tstruct new_utsname name;\n\tstruct user_namespace *user_ns;\n\tstruct ucounts *ucounts;\n\tstruct ns_common ns;\n};\n\nstruct cgroup_namespace {\n\tstruct ns_common ns;\n\tstruct user_namespace *user_ns;\n\tstruct ucounts *ucounts;\n\tstruct css_set *root_cset;\n};\n\nstruct nsset {\n\tunsigned int flags;\n\tstruct nsproxy *nsproxy;\n\tstruct fs_struct *fs;\n\tconst struct cred *cred;\n};\n\nstruct proc_ns_operations {\n\tconst char *name;\n\tconst char *real_ns_name;\n\tint type;\n\tstruct ns_common * (*get)(struct task_struct *);\n\tvoid (*put)(struct ns_common *);\n\tint (*install)(struct nsset *, struct ns_common *);\n\tstruct user_namespace * (*owner)(struct ns_common *);\n\tstruct ns_common * (*get_parent)(struct ns_common *);\n};\n\nstruct ucounts {\n\tstruct hlist_node node;\n\tstruct user_namespace *ns;\n\tkuid_t uid;\n\tint count;\n\tatomic_t ucount[10];\n};\n\nstruct perf_cpu_context;\n\nstruct perf_output_handle;\n\nstruct pmu {\n\tstruct list_head entry;\n\tstruct module *module;\n\tstruct device *dev;\n\tconst struct attribute_group **attr_groups;\n\tconst struct attribute_group **attr_update;\n\tconst char *name;\n\tint type;\n\tint capabilities;\n\tint *pmu_disable_count;\n\tstruct perf_cpu_context *pmu_cpu_context;\n\tatomic_t exclusive_cnt;\n\tint task_ctx_nr;\n\tint hrtimer_interval_ms;\n\tunsigned int nr_addr_filters;\n\tvoid (*pmu_enable)(struct pmu *);\n\tvoid (*pmu_disable)(struct pmu *);\n\tint (*event_init)(struct perf_event *);\n\tvoid (*event_mapped)(struct perf_event *, struct mm_struct *);\n\tvoid (*event_unmapped)(struct perf_event *, struct mm_struct *);\n\tint (*add)(struct perf_event *, int);\n\tvoid (*del)(struct perf_event *, int);\n\tvoid (*start)(struct perf_event *, int);\n\tvoid (*stop)(struct perf_event *, int);\n\tvoid (*read)(struct perf_event *);\n\tvoid (*start_txn)(struct pmu *, unsigned int);\n\tint (*commit_txn)(struct pmu *);\n\tvoid (*cancel_txn)(struct pmu *);\n\tint (*event_idx)(struct perf_event *);\n\tvoid (*sched_task)(struct perf_event_context *, bool);\n\tstruct kmem_cache *task_ctx_cache;\n\tvoid (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);\n\tvoid * (*setup_aux)(struct perf_event *, void **, int, bool);\n\tvoid (*free_aux)(void *);\n\tlong int (*snapshot_aux)(struct perf_event *, struct perf_output_handle *, long unsigned int);\n\tint (*addr_filters_validate)(struct list_head *);\n\tvoid (*addr_filters_sync)(struct perf_event *);\n\tint (*aux_output_match)(struct perf_event *);\n\tint (*filter_match)(struct perf_event *);\n\tint (*check_period)(struct perf_event *, u64);\n};\n\nstruct ftrace_regs {\n\tstruct pt_regs regs;\n};\n\nstruct iovec {\n\tvoid *iov_base;\n\t__kernel_size_t iov_len;\n};\n\nstruct kvec {\n\tvoid *iov_base;\n\tsize_t iov_len;\n};\n\nstruct perf_regs {\n\t__u64 abi;\n\tstruct pt_regs *regs;\n};\n\nstruct u64_stats_sync {};\n\nstruct bpf_cgroup_storage_key {\n\t__u64 cgroup_inode_id;\n\t__u32 attach_type;\n};\n\nenum kmalloc_cache_type {\n\tKMALLOC_NORMAL = 0,\n\tKMALLOC_RECLAIM = 1,\n\tKMALLOC_DMA = 2,\n\tNR_KMALLOC_TYPES = 3,\n};\n\nstruct bpf_cgroup_storage;\n\nstruct bpf_prog_array_item {\n\tstruct bpf_prog *prog;\n\tstruct bpf_cgroup_storage *cgroup_storage[2];\n};\n\nstruct bpf_storage_buffer;\n\nstruct bpf_cgroup_storage_map;\n\nstruct bpf_cgroup_storage {\n\tunion {\n\t\tstruct bpf_storage_buffer *buf;\n\t\tvoid *percpu_buf;\n\t};\n\tstruct bpf_cgroup_storage_map *map;\n\tstruct bpf_cgroup_storage_key key;\n\tstruct list_head list_map;\n\tstruct list_head list_cg;\n\tstruct rb_node node;\n\tstruct callback_head rcu;\n};\n\nstruct bpf_prog_array {\n\tstruct callback_head rcu;\n\tstruct bpf_prog_array_item items[0];\n};\n\nstruct bpf_storage_buffer {\n\tstruct callback_head rcu;\n\tchar data[0];\n};\n\nstruct psi_group_cpu {\n\tseqcount_t seq;\n\tunsigned int tasks[4];\n\tu32 state_mask;\n\tu32 times[6];\n\tu64 state_start;\n\tlong: 64;\n\tu32 times_prev[12];\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct cgroup_taskset;\n\nstruct cftype;\n\nstruct cgroup_subsys {\n\tstruct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *);\n\tint (*css_online)(struct cgroup_subsys_state *);\n\tvoid (*css_offline)(struct cgroup_subsys_state *);\n\tvoid (*css_released)(struct cgroup_subsys_state *);\n\tvoid (*css_free)(struct cgroup_subsys_state *);\n\tvoid (*css_reset)(struct cgroup_subsys_state *);\n\tvoid (*css_rstat_flush)(struct cgroup_subsys_state *, int);\n\tint (*css_extra_stat_show)(struct seq_file *, struct cgroup_subsys_state *);\n\tint (*can_attach)(struct cgroup_taskset *);\n\tvoid (*cancel_attach)(struct cgroup_taskset *);\n\tvoid (*attach)(struct cgroup_taskset *);\n\tvoid (*post_attach)();\n\tint (*can_fork)(struct task_struct *, struct css_set *);\n\tvoid (*cancel_fork)(struct task_struct *, struct css_set *);\n\tvoid (*fork)(struct task_struct *);\n\tvoid (*exit)(struct task_struct *);\n\tvoid (*release)(struct task_struct *);\n\tvoid (*bind)(struct cgroup_subsys_state *);\n\tbool early_init: 1;\n\tbool implicit_on_dfl: 1;\n\tbool threaded: 1;\n\tint id;\n\tconst char *name;\n\tconst char *legacy_name;\n\tstruct cgroup_root *root;\n\tstruct idr css_idr;\n\tstruct list_head cfts;\n\tstruct cftype *dfl_cftypes;\n\tstruct cftype *legacy_cftypes;\n\tunsigned int depends_on;\n};\n\nstruct cgroup_rstat_cpu {\n\tstruct u64_stats_sync bsync;\n\tstruct cgroup_base_stat bstat;\n\tstruct cgroup_base_stat last_bstat;\n\tstruct cgroup *updated_children;\n\tstruct cgroup *updated_next;\n};\n\nstruct cgroup_root {\n\tstruct kernfs_root *kf_root;\n\tunsigned int subsys_mask;\n\tint hierarchy_id;\n\tstruct cgroup cgrp;\n\tu64 cgrp_ancestor_id_storage;\n\tatomic_t nr_cgrps;\n\tstruct list_head root_list;\n\tunsigned int flags;\n\tchar release_agent_path[4096];\n\tchar name[64];\n};\n\nstruct cftype {\n\tchar name[64];\n\tlong unsigned int private;\n\tsize_t max_write_len;\n\tunsigned int flags;\n\tunsigned int file_offset;\n\tstruct cgroup_subsys *ss;\n\tstruct list_head node;\n\tstruct kernfs_ops *kf_ops;\n\tint (*open)(struct kernfs_open_file *);\n\tvoid (*release)(struct kernfs_open_file *);\n\tu64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *);\n\ts64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *);\n\tint (*seq_show)(struct seq_file *, void *);\n\tvoid * (*seq_start)(struct seq_file *, loff_t *);\n\tvoid * (*seq_next)(struct seq_file *, void *, loff_t *);\n\tvoid (*seq_stop)(struct seq_file *, void *);\n\tint (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64);\n\tint (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64);\n\tssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);\n\t__poll_t (*poll)(struct kernfs_open_file *, struct poll_table_struct *);\n};\n\nstruct perf_callchain_entry {\n\t__u64 nr;\n\t__u64 ip[0];\n};\n\ntypedef long unsigned int (*perf_copy_f)(void *, const void *, long unsigned int, long unsigned int);\n\nstruct perf_raw_frag {\n\tunion {\n\t\tstruct perf_raw_frag *next;\n\t\tlong unsigned int pad;\n\t};\n\tperf_copy_f copy;\n\tvoid *data;\n\tu32 size;\n} __attribute__((packed));\n\nstruct perf_raw_record {\n\tstruct perf_raw_frag frag;\n\tu32 size;\n};\n\nstruct perf_branch_stack {\n\t__u64 nr;\n\t__u64 hw_idx;\n\tstruct perf_branch_entry entries[0];\n};\n\nstruct perf_cpu_context {\n\tstruct perf_event_context ctx;\n\tstruct perf_event_context *task_ctx;\n\tint active_oncpu;\n\tint exclusive;\n\traw_spinlock_t hrtimer_lock;\n\tstruct hrtimer hrtimer;\n\tktime_t hrtimer_interval;\n\tunsigned int hrtimer_active;\n\tstruct perf_cgroup *cgrp;\n\tstruct list_head cgrp_cpuctx_entry;\n\tstruct list_head sched_cb_entry;\n\tint sched_cb_usage;\n\tint online;\n\tint heap_size;\n\tstruct perf_event **heap;\n\tstruct perf_event *heap_default[2];\n};\n\nstruct perf_output_handle {\n\tstruct perf_event *event;\n\tstruct perf_buffer *rb;\n\tlong unsigned int wakeup;\n\tlong unsigned int size;\n\tu64 aux_flags;\n\tunion {\n\t\tvoid *addr;\n\t\tlong unsigned int head;\n\t};\n\tint page;\n};\n\nstruct perf_addr_filter_range {\n\tlong unsigned int start;\n\tlong unsigned int size;\n};\n\nstruct perf_sample_data {\n\tu64 addr;\n\tstruct perf_raw_record *raw;\n\tstruct perf_branch_stack *br_stack;\n\tu64 period;\n\tu64 weight;\n\tu64 txn;\n\tunion perf_mem_data_src data_src;\n\tu64 type;\n\tu64 ip;\n\tstruct {\n\t\tu32 pid;\n\t\tu32 tid;\n\t} tid_entry;\n\tu64 time;\n\tu64 id;\n\tu64 stream_id;\n\tstruct {\n\t\tu32 cpu;\n\t\tu32 reserved;\n\t} cpu_entry;\n\tstruct perf_callchain_entry *callchain;\n\tu64 aux_size;\n\tstruct perf_regs regs_user;\n\tstruct perf_regs regs_intr;\n\tu64 stack_user_size;\n\tu64 phys_addr;\n\tu64 cgroup;\n\tu64 data_page_size;\n\tu64 code_page_size;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct perf_cgroup_info;\n\nstruct perf_cgroup {\n\tstruct cgroup_subsys_state css;\n\tstruct perf_cgroup_info *info;\n};\n\nstruct perf_cgroup_info {\n\tu64 time;\n\tu64 timestamp;\n};\n\nstruct trace_entry {\n\tshort unsigned int type;\n\tunsigned char flags;\n\tunsigned char preempt_count;\n\tint pid;\n};\n\nstruct trace_array;\n\nstruct tracer;\n\nstruct array_buffer;\n\nstruct ring_buffer_iter;\n\nstruct trace_iterator {\n\tstruct trace_array *tr;\n\tstruct tracer *trace;\n\tstruct array_buffer *array_buffer;\n\tvoid *private;\n\tint cpu_file;\n\tstruct mutex mutex;\n\tstruct ring_buffer_iter **buffer_iter;\n\tlong unsigned int iter_flags;\n\tvoid *temp;\n\tunsigned int temp_size;\n\tstruct trace_seq tmp_seq;\n\tcpumask_var_t started;\n\tbool snapshot;\n\tstruct trace_seq seq;\n\tstruct trace_entry *ent;\n\tlong unsigned int lost_events;\n\tint leftover;\n\tint ent_size;\n\tint cpu;\n\tu64 ts;\n\tloff_t pos;\n\tlong int idx;\n};\n\nenum print_line_t {\n\tTRACE_TYPE_PARTIAL_LINE = 0,\n\tTRACE_TYPE_HANDLED = 1,\n\tTRACE_TYPE_UNHANDLED = 2,\n\tTRACE_TYPE_NO_CONSUME = 3,\n};\n\ntypedef enum print_line_t (*trace_print_func)(struct trace_iterator *, int, struct trace_event *);\n\nstruct trace_event_functions {\n\ttrace_print_func trace;\n\ttrace_print_func raw;\n\ttrace_print_func hex;\n\ttrace_print_func binary;\n};\n\nenum trace_reg {\n\tTRACE_REG_REGISTER = 0,\n\tTRACE_REG_UNREGISTER = 1,\n\tTRACE_REG_PERF_REGISTER = 2,\n\tTRACE_REG_PERF_UNREGISTER = 3,\n\tTRACE_REG_PERF_OPEN = 4,\n\tTRACE_REG_PERF_CLOSE = 5,\n\tTRACE_REG_PERF_ADD = 6,\n\tTRACE_REG_PERF_DEL = 7,\n};\n\nstruct trace_event_fields {\n\tconst char *type;\n\tunion {\n\t\tstruct {\n\t\t\tconst char *name;\n\t\t\tconst int size;\n\t\t\tconst int align;\n\t\t\tconst int is_signed;\n\t\t\tconst int filter_type;\n\t\t};\n\t\tint (*define_fields)(struct trace_event_call *);\n\t};\n};\n\nstruct trace_event_class {\n\tconst char *system;\n\tvoid *probe;\n\tvoid *perf_probe;\n\tint (*reg)(struct trace_event_call *, enum trace_reg, void *);\n\tstruct trace_event_fields *fields_array;\n\tstruct list_head * (*get_fields)(struct trace_event_call *);\n\tstruct list_head fields;\n\tint (*raw_init)(struct trace_event_call *);\n};\n\nstruct trace_buffer;\n\nstruct trace_event_file;\n\nstruct trace_event_buffer {\n\tstruct trace_buffer *buffer;\n\tstruct ring_buffer_event *event;\n\tstruct trace_event_file *trace_file;\n\tvoid *entry;\n\tlong unsigned int flags;\n\tint pc;\n\tstruct pt_regs *regs;\n};\n\nstruct trace_subsystem_dir;\n\nstruct trace_event_file {\n\tstruct list_head list;\n\tstruct trace_event_call *event_call;\n\tstruct event_filter *filter;\n\tstruct dentry *dir;\n\tstruct trace_array *tr;\n\tstruct trace_subsystem_dir *system;\n\tstruct list_head triggers;\n\tlong unsigned int flags;\n\tatomic_t sm_ref;\n\tatomic_t tm_ref;\n};\n\nenum {\n\tTRACE_EVENT_FL_FILTERED_BIT = 0,\n\tTRACE_EVENT_FL_CAP_ANY_BIT = 1,\n\tTRACE_EVENT_FL_NO_SET_FILTER_BIT = 2,\n\tTRACE_EVENT_FL_IGNORE_ENABLE_BIT = 3,\n\tTRACE_EVENT_FL_TRACEPOINT_BIT = 4,\n\tTRACE_EVENT_FL_KPROBE_BIT = 5,\n\tTRACE_EVENT_FL_UPROBE_BIT = 6,\n};\n\nenum {\n\tTRACE_EVENT_FL_FILTERED = 1,\n\tTRACE_EVENT_FL_CAP_ANY = 2,\n\tTRACE_EVENT_FL_NO_SET_FILTER = 4,\n\tTRACE_EVENT_FL_IGNORE_ENABLE = 8,\n\tTRACE_EVENT_FL_TRACEPOINT = 16,\n\tTRACE_EVENT_FL_KPROBE = 32,\n\tTRACE_EVENT_FL_UPROBE = 64,\n};\n\nenum {\n\tEVENT_FILE_FL_ENABLED_BIT = 0,\n\tEVENT_FILE_FL_RECORDED_CMD_BIT = 1,\n\tEVENT_FILE_FL_RECORDED_TGID_BIT = 2,\n\tEVENT_FILE_FL_FILTERED_BIT = 3,\n\tEVENT_FILE_FL_NO_SET_FILTER_BIT = 4,\n\tEVENT_FILE_FL_SOFT_MODE_BIT = 5,\n\tEVENT_FILE_FL_SOFT_DISABLED_BIT = 6,\n\tEVENT_FILE_FL_TRIGGER_MODE_BIT = 7,\n\tEVENT_FILE_FL_TRIGGER_COND_BIT = 8,\n\tEVENT_FILE_FL_PID_FILTER_BIT = 9,\n\tEVENT_FILE_FL_WAS_ENABLED_BIT = 10,\n};\n\nenum {\n\tEVENT_FILE_FL_ENABLED = 1,\n\tEVENT_FILE_FL_RECORDED_CMD = 2,\n\tEVENT_FILE_FL_RECORDED_TGID = 4,\n\tEVENT_FILE_FL_FILTERED = 8,\n\tEVENT_FILE_FL_NO_SET_FILTER = 16,\n\tEVENT_FILE_FL_SOFT_MODE = 32,\n\tEVENT_FILE_FL_SOFT_DISABLED = 64,\n\tEVENT_FILE_FL_TRIGGER_MODE = 128,\n\tEVENT_FILE_FL_TRIGGER_COND = 256,\n\tEVENT_FILE_FL_PID_FILTER = 512,\n\tEVENT_FILE_FL_WAS_ENABLED = 1024,\n};\n\nenum event_trigger_type {\n\tETT_NONE = 0,\n\tETT_TRACE_ONOFF = 1,\n\tETT_SNAPSHOT = 2,\n\tETT_STACKTRACE = 4,\n\tETT_EVENT_ENABLE = 8,\n\tETT_EVENT_HIST = 16,\n\tETT_HIST_ENABLE = 32,\n};\n\nenum {\n\tFILTER_OTHER = 0,\n\tFILTER_STATIC_STRING = 1,\n\tFILTER_DYN_STRING = 2,\n\tFILTER_PTR_STRING = 3,\n\tFILTER_TRACE_FN = 4,\n\tFILTER_COMM = 5,\n\tFILTER_CPU = 6,\n};\n\nstruct fwnode_reference_args;\n\nstruct fwnode_endpoint;\n\nstruct fwnode_operations {\n\tstruct fwnode_handle * (*get)(struct fwnode_handle *);\n\tvoid (*put)(struct fwnode_handle *);\n\tbool (*device_is_available)(const struct fwnode_handle *);\n\tconst void * (*device_get_match_data)(const struct fwnode_handle *, const struct device *);\n\tbool (*property_present)(const struct fwnode_handle *, const char *);\n\tint (*property_read_int_array)(const struct fwnode_handle *, const char *, unsigned int, void *, size_t);\n\tint (*property_read_string_array)(const struct fwnode_handle *, const char *, const char **, size_t);\n\tconst char * (*get_name)(const struct fwnode_handle *);\n\tconst char * (*get_name_prefix)(const struct fwnode_handle *);\n\tstruct fwnode_handle * (*get_parent)(const struct fwnode_handle *);\n\tstruct fwnode_handle * (*get_next_child_node)(const struct fwnode_handle *, struct fwnode_handle *);\n\tstruct fwnode_handle * (*get_named_child_node)(const struct fwnode_handle *, const char *);\n\tint (*get_reference_args)(const struct fwnode_handle *, const char *, const char *, unsigned int, unsigned int, struct fwnode_reference_args *);\n\tstruct fwnode_handle * (*graph_get_next_endpoint)(const struct fwnode_handle *, struct fwnode_handle *);\n\tstruct fwnode_handle * (*graph_get_remote_endpoint)(const struct fwnode_handle *);\n\tstruct fwnode_handle * (*graph_get_port_parent)(struct fwnode_handle *);\n\tint (*graph_parse_endpoint)(const struct fwnode_handle *, struct fwnode_endpoint *);\n\tint (*add_links)(struct fwnode_handle *);\n};\n\nstruct fwnode_endpoint {\n\tunsigned int port;\n\tunsigned int id;\n\tconst struct fwnode_handle *local_fwnode;\n};\n\nstruct fwnode_reference_args {\n\tstruct fwnode_handle *fwnode;\n\tunsigned int nargs;\n\tu64 args[8];\n};\n\nstruct property {\n\tchar *name;\n\tint length;\n\tvoid *value;\n\tstruct property *next;\n};\n\nstruct irq_fwspec {\n\tstruct fwnode_handle *fwnode;\n\tint param_count;\n\tu32 param[16];\n};\n\nstruct irq_data;\n\nstruct irq_domain_ops {\n\tint (*match)(struct irq_domain *, struct device_node *, enum irq_domain_bus_token);\n\tint (*select)(struct irq_domain *, struct irq_fwspec *, enum irq_domain_bus_token);\n\tint (*map)(struct irq_domain *, unsigned int, irq_hw_number_t);\n\tvoid (*unmap)(struct irq_domain *, unsigned int);\n\tint (*xlate)(struct irq_domain *, struct device_node *, const u32 *, unsigned int, long unsigned int *, unsigned int *);\n\tint (*alloc)(struct irq_domain *, unsigned int, unsigned int, void *);\n\tvoid (*free)(struct irq_domain *, unsigned int, unsigned int);\n\tint (*activate)(struct irq_domain *, struct irq_data *, bool);\n\tvoid (*deactivate)(struct irq_domain *, struct irq_data *);\n\tint (*translate)(struct irq_domain *, struct irq_fwspec *, long unsigned int *, unsigned int *);\n};\n\nstruct xbc_node {\n\tu16 next;\n\tu16 child;\n\tu16 parent;\n\tu16 data;\n};\n\nenum wb_stat_item {\n\tWB_RECLAIMABLE = 0,\n\tWB_WRITEBACK = 1,\n\tWB_DIRTIED = 2,\n\tWB_WRITTEN = 3,\n\tNR_WB_STAT_ITEMS = 4,\n};\n\nstruct disk_part_tbl;\n\nstruct block_device_operations;\n\nstruct timer_rand_state;\n\nstruct disk_events;\n\nstruct cdrom_device_info;\n\nstruct badblocks;\n\nstruct gendisk {\n\tint major;\n\tint first_minor;\n\tint minors;\n\tchar disk_name[32];\n\tshort unsigned int events;\n\tshort unsigned int event_flags;\n\tstruct disk_part_tbl *part_tbl;\n\tstruct block_device *part0;\n\tconst struct block_device_operations *fops;\n\tstruct request_queue *queue;\n\tvoid *private_data;\n\tint flags;\n\tlong unsigned int state;\n\tstruct kobject *slave_dir;\n\tstruct timer_rand_state *random;\n\tatomic_t sync_io;\n\tstruct disk_events *ev;\n\tstruct kobject integrity_kobj;\n\tstruct cdrom_device_info *cdi;\n\tint node_id;\n\tstruct badblocks *bb;\n\tstruct lockdep_map lockdep_map;\n};\n\nstruct partition_meta_info {\n\tchar uuid[37];\n\tu8 volname[64];\n};\n\nstruct bio_integrity_payload {\n\tstruct bio *bip_bio;\n\tstruct bvec_iter bip_iter;\n\tshort unsigned int bip_slab;\n\tshort unsigned int bip_vcnt;\n\tshort unsigned int bip_max_vcnt;\n\tshort unsigned int bip_flags;\n\tstruct bvec_iter bio_iter;\n\tstruct work_struct bip_work;\n\tstruct bio_vec *bip_vec;\n\tstruct bio_vec bip_inline_vecs[0];\n};\n\nstruct blkg_iostat {\n\tu64 bytes[3];\n\tu64 ios[3];\n};\n\nstruct blkg_iostat_set {\n\tstruct u64_stats_sync sync;\n\tstruct blkg_iostat cur;\n\tstruct blkg_iostat last;\n};\n\nstruct blkcg;\n\nstruct blkg_policy_data;\n\nstruct blkcg_gq {\n\tstruct request_queue *q;\n\tstruct list_head q_node;\n\tstruct hlist_node blkcg_node;\n\tstruct blkcg *blkcg;\n\tstruct blkcg_gq *parent;\n\tstruct percpu_ref refcnt;\n\tbool online;\n\tstruct blkg_iostat_set *iostat_cpu;\n\tstruct blkg_iostat_set iostat;\n\tstruct blkg_policy_data *pd[5];\n\tspinlock_t async_bio_lock;\n\tstruct bio_list async_bios;\n\tstruct work_struct async_bio_work;\n\tatomic_t use_delay;\n\tatomic64_t delay_nsec;\n\tatomic64_t delay_start;\n\tu64 last_delay;\n\tint last_use;\n\tstruct callback_head callback_head;\n};\n\ntypedef unsigned int blk_qc_t;\n\nstruct disk_part_tbl {\n\tstruct callback_head callback_head;\n\tint len;\n\tstruct block_device *last_lookup;\n\tstruct block_device *part[0];\n};\n\nstruct blk_integrity_iter;\n\ntypedef blk_status_t integrity_processing_fn(struct blk_integrity_iter *);\n\ntypedef void integrity_prepare_fn(struct request *);\n\ntypedef void integrity_complete_fn(struct request *, unsigned int);\n\nstruct blk_integrity_profile {\n\tintegrity_processing_fn *generate_fn;\n\tintegrity_processing_fn *verify_fn;\n\tintegrity_prepare_fn *prepare_fn;\n\tintegrity_complete_fn *complete_fn;\n\tconst char *name;\n};\n\nstruct blk_zone;\n\ntypedef int (*report_zones_cb)(struct blk_zone *, unsigned int, void *);\n\nstruct hd_geometry;\n\nstruct pr_ops;\n\nstruct block_device_operations {\n\tblk_qc_t (*submit_bio)(struct bio *);\n\tint (*open)(struct block_device *, fmode_t);\n\tvoid (*release)(struct gendisk *, fmode_t);\n\tint (*rw_page)(struct block_device *, sector_t, struct page *, unsigned int);\n\tint (*ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);\n\tint (*compat_ioctl)(struct block_device *, fmode_t, unsigned int, long unsigned int);\n\tunsigned int (*check_events)(struct gendisk *, unsigned int);\n\tvoid (*unlock_native_capacity)(struct gendisk *);\n\tint (*revalidate_disk)(struct gendisk *);\n\tint (*getgeo)(struct block_device *, struct hd_geometry *);\n\tint (*set_read_only)(struct block_device *, bool);\n\tvoid (*swap_slot_free_notify)(struct block_device *, long unsigned int);\n\tint (*report_zones)(struct gendisk *, sector_t, unsigned int, report_zones_cb, void *);\n\tchar * (*devnode)(struct gendisk *, umode_t *);\n\tstruct module *owner;\n\tconst struct pr_ops *pr_ops;\n};\n\nstruct sg_io_v4 {\n\t__s32 guard;\n\t__u32 protocol;\n\t__u32 subprotocol;\n\t__u32 request_len;\n\t__u64 request;\n\t__u64 request_tag;\n\t__u32 request_attr;\n\t__u32 request_priority;\n\t__u32 request_extra;\n\t__u32 max_response_len;\n\t__u64 response;\n\t__u32 dout_iovec_count;\n\t__u32 dout_xfer_len;\n\t__u32 din_iovec_count;\n\t__u32 din_xfer_len;\n\t__u64 dout_xferp;\n\t__u64 din_xferp;\n\t__u32 timeout;\n\t__u32 flags;\n\t__u64 usr_ptr;\n\t__u32 spare_in;\n\t__u32 driver_status;\n\t__u32 transport_status;\n\t__u32 device_status;\n\t__u32 retry_delay;\n\t__u32 info;\n\t__u32 duration;\n\t__u32 response_len;\n\t__s32 din_resid;\n\t__s32 dout_resid;\n\t__u64 generated_tag;\n\t__u32 spare_out;\n\t__u32 padding;\n};\n\nstruct bsg_ops {\n\tint (*check_proto)(struct sg_io_v4 *);\n\tint (*fill_hdr)(struct request *, struct sg_io_v4 *, fmode_t);\n\tint (*complete_rq)(struct request *, struct sg_io_v4 *);\n\tvoid (*free_rq)(struct request *);\n};\n\ntypedef __u32 req_flags_t;\n\ntypedef void rq_end_io_fn(struct request *, blk_status_t);\n\nenum mq_rq_state {\n\tMQ_RQ_IDLE = 0,\n\tMQ_RQ_IN_FLIGHT = 1,\n\tMQ_RQ_COMPLETE = 2,\n};\n\nstruct blk_ksm_keyslot;\n\nstruct request {\n\tstruct request_queue *q;\n\tstruct blk_mq_ctx *mq_ctx;\n\tstruct blk_mq_hw_ctx *mq_hctx;\n\tunsigned int cmd_flags;\n\treq_flags_t rq_flags;\n\tint tag;\n\tint internal_tag;\n\tunsigned int __data_len;\n\tsector_t __sector;\n\tstruct bio *bio;\n\tstruct bio *biotail;\n\tstruct list_head queuelist;\n\tunion {\n\t\tstruct hlist_node hash;\n\t\tstruct list_head ipi_list;\n\t};\n\tunion {\n\t\tstruct rb_node rb_node;\n\t\tstruct bio_vec special_vec;\n\t\tvoid *completion_data;\n\t\tint error_count;\n\t};\n\tunion {\n\t\tstruct {\n\t\t\tstruct io_cq *icq;\n\t\t\tvoid *priv[2];\n\t\t} elv;\n\t\tstruct {\n\t\t\tunsigned int seq;\n\t\t\tstruct list_head list;\n\t\t\trq_end_io_fn *saved_end_io;\n\t\t} flush;\n\t};\n\tstruct gendisk *rq_disk;\n\tstruct block_device *part;\n\tu64 alloc_time_ns;\n\tu64 start_time_ns;\n\tu64 io_start_time_ns;\n\tshort unsigned int wbt_flags;\n\tshort unsigned int stats_sectors;\n\tshort unsigned int nr_phys_segments;\n\tshort unsigned int nr_integrity_segments;\n\tstruct bio_crypt_ctx *crypt_ctx;\n\tstruct blk_ksm_keyslot *crypt_keyslot;\n\tshort unsigned int write_hint;\n\tshort unsigned int ioprio;\n\tenum mq_rq_state state;\n\trefcount_t ref;\n\tunsigned int timeout;\n\tlong unsigned int deadline;\n\tunion {\n\t\tstruct __call_single_data csd;\n\t\tu64 fifo_time;\n\t};\n\trq_end_io_fn *end_io;\n\tvoid *end_io_data;\n};\n\nstruct blk_zone {\n\t__u64 start;\n\t__u64 len;\n\t__u64 wp;\n\t__u8 type;\n\t__u8 cond;\n\t__u8 non_seq;\n\t__u8 reset;\n\t__u8 resv[4];\n\t__u64 capacity;\n\t__u8 reserved[24];\n};\n\nenum elv_merge {\n\tELEVATOR_NO_MERGE = 0,\n\tELEVATOR_FRONT_MERGE = 1,\n\tELEVATOR_BACK_MERGE = 2,\n\tELEVATOR_DISCARD_MERGE = 3,\n};\n\nstruct elevator_type;\n\nstruct blk_mq_alloc_data;\n\nstruct elevator_mq_ops {\n\tint (*init_sched)(struct request_queue *, struct elevator_type *);\n\tvoid (*exit_sched)(struct elevator_queue *);\n\tint (*init_hctx)(struct blk_mq_hw_ctx *, unsigned int);\n\tvoid (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);\n\tvoid (*depth_updated)(struct blk_mq_hw_ctx *);\n\tbool (*allow_merge)(struct request_queue *, struct request *, struct bio *);\n\tbool (*bio_merge)(struct blk_mq_hw_ctx *, struct bio *, unsigned int);\n\tint (*request_merge)(struct request_queue *, struct request **, struct bio *);\n\tvoid (*request_merged)(struct request_queue *, struct request *, enum elv_merge);\n\tvoid (*requests_merged)(struct request_queue *, struct request *, struct request *);\n\tvoid (*limit_depth)(unsigned int, struct blk_mq_alloc_data *);\n\tvoid (*prepare_request)(struct request *);\n\tvoid (*finish_request)(struct request *);\n\tvoid (*insert_requests)(struct blk_mq_hw_ctx *, struct list_head *, bool);\n\tstruct request * (*dispatch_request)(struct blk_mq_hw_ctx *);\n\tbool (*has_work)(struct blk_mq_hw_ctx *);\n\tvoid (*completed_request)(struct request *, u64);\n\tvoid (*requeue_request)(struct request *);\n\tstruct request * (*former_request)(struct request_queue *, struct request *);\n\tstruct request * (*next_request)(struct request_queue *, struct request *);\n\tvoid (*init_icq)(struct io_cq *);\n\tvoid (*exit_icq)(struct io_cq *);\n};\n\nstruct elv_fs_entry;\n\nstruct blk_mq_debugfs_attr;\n\nstruct elevator_type {\n\tstruct kmem_cache *icq_cache;\n\tstruct elevator_mq_ops ops;\n\tsize_t icq_size;\n\tsize_t icq_align;\n\tstruct elv_fs_entry *elevator_attrs;\n\tconst char *elevator_name;\n\tconst char *elevator_alias;\n\tconst unsigned int elevator_features;\n\tstruct module *elevator_owner;\n\tconst struct blk_mq_debugfs_attr *queue_debugfs_attrs;\n\tconst struct blk_mq_debugfs_attr *hctx_debugfs_attrs;\n\tchar icq_cache_name[22];\n\tstruct list_head list;\n};\n\nstruct elevator_queue {\n\tstruct elevator_type *type;\n\tvoid *elevator_data;\n\tstruct kobject kobj;\n\tstruct mutex sysfs_lock;\n\tunsigned int registered: 1;\n\tstruct hlist_head hash[64];\n};\n\nstruct elv_fs_entry {\n\tstruct attribute attr;\n\tssize_t (*show)(struct elevator_queue *, char *);\n\tssize_t (*store)(struct elevator_queue *, const char *, size_t);\n};\n\nstruct blk_mq_debugfs_attr {\n\tconst char *name;\n\tumode_t mode;\n\tint (*show)(void *, struct seq_file *);\n\tssize_t (*write)(void *, const char *, size_t, loff_t *);\n\tconst struct seq_operations *seq_ops;\n};\n\nenum blk_eh_timer_return {\n\tBLK_EH_DONE = 0,\n\tBLK_EH_RESET_TIMER = 1,\n};\n\nstruct blk_mq_queue_data;\n\nstruct blk_mq_ops {\n\tblk_status_t (*queue_rq)(struct blk_mq_hw_ctx *, const struct blk_mq_queue_data *);\n\tvoid (*commit_rqs)(struct blk_mq_hw_ctx *);\n\tbool (*get_budget)(struct request_queue *);\n\tvoid (*put_budget)(struct request_queue *);\n\tenum blk_eh_timer_return (*timeout)(struct request *, bool);\n\tint (*poll)(struct blk_mq_hw_ctx *);\n\tvoid (*complete)(struct request *);\n\tint (*init_hctx)(struct blk_mq_hw_ctx *, void *, unsigned int);\n\tvoid (*exit_hctx)(struct blk_mq_hw_ctx *, unsigned int);\n\tint (*init_request)(struct blk_mq_tag_set *, struct request *, unsigned int, unsigned int);\n\tvoid (*exit_request)(struct blk_mq_tag_set *, struct request *, unsigned int);\n\tvoid (*initialize_rq_fn)(struct request *);\n\tvoid (*cleanup_rq)(struct request *);\n\tbool (*busy)(struct request_queue *);\n\tint (*map_queues)(struct blk_mq_tag_set *);\n\tvoid (*show_rq)(struct seq_file *, struct request *);\n};\n\nstruct blk_integrity_iter {\n\tvoid *prot_buf;\n\tvoid *data_buf;\n\tsector_t seed;\n\tunsigned int data_size;\n\tshort unsigned int interval;\n\tconst char *disk_name;\n};\n\nenum pr_type {\n\tPR_WRITE_EXCLUSIVE = 1,\n\tPR_EXCLUSIVE_ACCESS = 2,\n\tPR_WRITE_EXCLUSIVE_REG_ONLY = 3,\n\tPR_EXCLUSIVE_ACCESS_REG_ONLY = 4,\n\tPR_WRITE_EXCLUSIVE_ALL_REGS = 5,\n\tPR_EXCLUSIVE_ACCESS_ALL_REGS = 6,\n};\n\nstruct pr_ops {\n\tint (*pr_register)(struct block_device *, u64, u64, u32);\n\tint (*pr_reserve)(struct block_device *, u64, enum pr_type, u32);\n\tint (*pr_release)(struct block_device *, u64, enum pr_type);\n\tint (*pr_preempt)(struct block_device *, u64, u64, enum pr_type, bool);\n\tint (*pr_clear)(struct block_device *, u64);\n};\n\nenum blkg_iostat_type {\n\tBLKG_IOSTAT_READ = 0,\n\tBLKG_IOSTAT_WRITE = 1,\n\tBLKG_IOSTAT_DISCARD = 2,\n\tBLKG_IOSTAT_NR = 3,\n};\n\nstruct blkcg_policy_data;\n\nstruct blkcg {\n\tstruct cgroup_subsys_state css;\n\tspinlock_t lock;\n\trefcount_t online_pin;\n\tstruct xarray blkg_tree;\n\tstruct blkcg_gq *blkg_hint;\n\tstruct hlist_head blkg_list;\n\tstruct blkcg_policy_data *cpd[5];\n\tstruct list_head all_blkcgs_node;\n\tstruct list_head cgwb_list;\n};\n\nstruct blkcg_policy_data {\n\tstruct blkcg *blkcg;\n\tint plid;\n};\n\nstruct blkg_policy_data {\n\tstruct blkcg_gq *blkg;\n\tint plid;\n};\n\ntypedef long unsigned int efi_status_t;\n\ntypedef u8 efi_bool_t;\n\ntypedef u16 efi_char16_t;\n\ntypedef guid_t efi_guid_t;\n\ntypedef struct {\n\tu64 signature;\n\tu32 revision;\n\tu32 headersize;\n\tu32 crc32;\n\tu32 reserved;\n} efi_table_hdr_t;\n\ntypedef struct {\n\tu32 type;\n\tu32 pad;\n\tu64 phys_addr;\n\tu64 virt_addr;\n\tu64 num_pages;\n\tu64 attribute;\n} efi_memory_desc_t;\n\ntypedef struct {\n\tefi_guid_t guid;\n\tu32 headersize;\n\tu32 flags;\n\tu32 imagesize;\n} efi_capsule_header_t;\n\ntypedef struct {\n\tu16 year;\n\tu8 month;\n\tu8 day;\n\tu8 hour;\n\tu8 minute;\n\tu8 second;\n\tu8 pad1;\n\tu32 nanosecond;\n\ts16 timezone;\n\tu8 daylight;\n\tu8 pad2;\n} efi_time_t;\n\ntypedef struct {\n\tu32 resolution;\n\tu32 accuracy;\n\tu8 sets_to_zero;\n} efi_time_cap_t;\n\ntypedef struct {\n\tefi_table_hdr_t hdr;\n\tu32 get_time;\n\tu32 set_time;\n\tu32 get_wakeup_time;\n\tu32 set_wakeup_time;\n\tu32 set_virtual_address_map;\n\tu32 convert_pointer;\n\tu32 get_variable;\n\tu32 get_next_variable;\n\tu32 set_variable;\n\tu32 get_next_high_mono_count;\n\tu32 reset_system;\n\tu32 update_capsule;\n\tu32 query_capsule_caps;\n\tu32 query_variable_info;\n} efi_runtime_services_32_t;\n\ntypedef efi_status_t efi_get_time_t(efi_time_t *, efi_time_cap_t *);\n\ntypedef efi_status_t efi_set_time_t(efi_time_t *);\n\ntypedef efi_status_t efi_get_wakeup_time_t(efi_bool_t *, efi_bool_t *, efi_time_t *);\n\ntypedef efi_status_t efi_set_wakeup_time_t(efi_bool_t, efi_time_t *);\n\ntypedef efi_status_t efi_get_variable_t(efi_char16_t *, efi_guid_t *, u32 *, long unsigned int *, void *);\n\ntypedef efi_status_t efi_get_next_variable_t(long unsigned int *, efi_char16_t *, efi_guid_t *);\n\ntypedef efi_status_t efi_set_variable_t(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *);\n\ntypedef efi_status_t efi_get_next_high_mono_count_t(u32 *);\n\ntypedef void efi_reset_system_t(int, efi_status_t, long unsigned int, efi_char16_t *);\n\ntypedef efi_status_t efi_query_variable_info_t(u32, u64 *, u64 *, u64 *);\n\ntypedef efi_status_t efi_update_capsule_t(efi_capsule_header_t **, long unsigned int, long unsigned int);\n\ntypedef efi_status_t efi_query_capsule_caps_t(efi_capsule_header_t **, long unsigned int, u64 *, int *);\n\ntypedef union {\n\tstruct {\n\t\tefi_table_hdr_t hdr;\n\t\tefi_status_t (*get_time)(efi_time_t *, efi_time_cap_t *);\n\t\tefi_status_t (*set_time)(efi_time_t *);\n\t\tefi_status_t (*get_wakeup_time)(efi_bool_t *, efi_bool_t *, efi_time_t *);\n\t\tefi_status_t (*set_wakeup_time)(efi_bool_t, efi_time_t *);\n\t\tefi_status_t (*set_virtual_address_map)(long unsigned int, long unsigned int, u32, efi_memory_desc_t *);\n\t\tvoid *convert_pointer;\n\t\tefi_status_t (*get_variable)(efi_char16_t *, efi_guid_t *, u32 *, long unsigned int *, void *);\n\t\tefi_status_t (*get_next_variable)(long unsigned int *, efi_char16_t *, efi_guid_t *);\n\t\tefi_status_t (*set_variable)(efi_char16_t *, efi_guid_t *, u32, long unsigned int, void *);\n\t\tefi_status_t (*get_next_high_mono_count)(u32 *);\n\t\tvoid (*reset_system)(int, efi_status_t, long unsigned int, efi_char16_t *);\n\t\tefi_status_t (*update_capsule)(efi_capsule_header_t **, long unsigned int, long unsigned int);\n\t\tefi_status_t (*query_capsule_caps)(efi_capsule_header_t **, long unsigned int, u64 *, int *);\n\t\tefi_status_t (*query_variable_info)(u32, u64 *, u64 *, u64 *);\n\t};\n\tefi_runtime_services_32_t mixed_mode;\n} efi_runtime_services_t;\n\nstruct efi_memory_map {\n\tphys_addr_t phys_map;\n\tvoid *map;\n\tvoid *map_end;\n\tint nr_map;\n\tlong unsigned int desc_version;\n\tlong unsigned int desc_size;\n\tlong unsigned int flags;\n};\n\nstruct efi {\n\tconst efi_runtime_services_t *runtime;\n\tunsigned int runtime_version;\n\tunsigned int runtime_supported_mask;\n\tlong unsigned int acpi;\n\tlong unsigned int acpi20;\n\tlong unsigned int smbios;\n\tlong unsigned int smbios3;\n\tlong unsigned int esrt;\n\tlong unsigned int tpm_log;\n\tlong unsigned int tpm_final_log;\n\tlong unsigned int mokvar_table;\n\tefi_get_time_t *get_time;\n\tefi_set_time_t *set_time;\n\tefi_get_wakeup_time_t *get_wakeup_time;\n\tefi_set_wakeup_time_t *set_wakeup_time;\n\tefi_get_variable_t *get_variable;\n\tefi_get_next_variable_t *get_next_variable;\n\tefi_set_variable_t *set_variable;\n\tefi_set_variable_t *set_variable_nonblocking;\n\tefi_query_variable_info_t *query_variable_info;\n\tefi_query_variable_info_t *query_variable_info_nonblocking;\n\tefi_update_capsule_t *update_capsule;\n\tefi_query_capsule_caps_t *query_capsule_caps;\n\tefi_get_next_high_mono_count_t *get_next_high_mono_count;\n\tefi_reset_system_t *reset_system;\n\tstruct efi_memory_map memmap;\n\tlong unsigned int flags;\n};\n\nenum memcg_stat_item {\n\tMEMCG_SWAP = 38,\n\tMEMCG_SOCK = 39,\n\tMEMCG_PERCPU_B = 40,\n\tMEMCG_NR_STAT = 41,\n};\n\nenum memcg_memory_event {\n\tMEMCG_LOW = 0,\n\tMEMCG_HIGH = 1,\n\tMEMCG_MAX = 2,\n\tMEMCG_OOM = 3,\n\tMEMCG_OOM_KILL = 4,\n\tMEMCG_SWAP_HIGH = 5,\n\tMEMCG_SWAP_MAX = 6,\n\tMEMCG_SWAP_FAIL = 7,\n\tMEMCG_NR_MEMORY_EVENTS = 8,\n};\n\nenum mem_cgroup_events_target {\n\tMEM_CGROUP_TARGET_THRESH = 0,\n\tMEM_CGROUP_TARGET_SOFTLIMIT = 1,\n\tMEM_CGROUP_NTARGETS = 2,\n};\n\nstruct memcg_vmstats_percpu {\n\tlong int stat[41];\n\tlong unsigned int events[96];\n\tlong unsigned int nr_page_events;\n\tlong unsigned int targets[2];\n};\n\nstruct mem_cgroup_reclaim_iter {\n\tstruct mem_cgroup *position;\n\tunsigned int generation;\n};\n\nstruct lruvec_stat {\n\tlong int count[38];\n};\n\nstruct memcg_shrinker_map {\n\tstruct callback_head rcu;\n\tlong unsigned int map[0];\n};\n\nstruct mem_cgroup_per_node {\n\tstruct lruvec lruvec;\n\tstruct lruvec_stat *lruvec_stat_local;\n\tstruct lruvec_stat *lruvec_stat_cpu;\n\tatomic_long_t lruvec_stat[38];\n\tlong unsigned int lru_zone_size[25];\n\tstruct mem_cgroup_reclaim_iter iter;\n\tstruct memcg_shrinker_map *shrinker_map;\n\tstruct rb_node tree_node;\n\tlong unsigned int usage_in_excess;\n\tbool on_tree;\n\tstruct mem_cgroup *memcg;\n};\n\nstruct eventfd_ctx;\n\nstruct mem_cgroup_threshold {\n\tstruct eventfd_ctx *eventfd;\n\tlong unsigned int threshold;\n};\n\nstruct mem_cgroup_threshold_ary {\n\tint current_threshold;\n\tunsigned int size;\n\tstruct mem_cgroup_threshold entries[0];\n};\n\nstruct obj_cgroup {\n\tstruct percpu_ref refcnt;\n\tstruct mem_cgroup *memcg;\n\tatomic_t nr_charged_bytes;\n\tunion {\n\t\tstruct list_head list;\n\t\tstruct callback_head rcu;\n\t};\n};\n\nstruct percpu_cluster {\n\tstruct swap_cluster_info index;\n\tunsigned int next;\n};\n\nenum fs_value_type {\n\tfs_value_is_undefined = 0,\n\tfs_value_is_flag = 1,\n\tfs_value_is_string = 2,\n\tfs_value_is_blob = 3,\n\tfs_value_is_filename = 4,\n\tfs_value_is_file = 5,\n};\n\nstruct fs_parameter {\n\tconst char *key;\n\tenum fs_value_type type: 8;\n\tunion {\n\t\tchar *string;\n\t\tvoid *blob;\n\t\tstruct filename *name;\n\t\tstruct file *file;\n\t};\n\tsize_t size;\n\tint dirfd;\n};\n\nstruct fc_log {\n\trefcount_t usage;\n\tu8 head;\n\tu8 tail;\n\tu8 need_free;\n\tstruct module *owner;\n\tchar *buffer[8];\n};\n\nstruct fs_context_operations {\n\tvoid (*free)(struct fs_context *);\n\tint (*dup)(struct fs_context *, struct fs_context *);\n\tint (*parse_param)(struct fs_context *, struct fs_parameter *);\n\tint (*parse_monolithic)(struct fs_context *, void *);\n\tint (*get_tree)(struct fs_context *);\n\tint (*reconfigure)(struct fs_context *);\n};\n\nstruct fs_parse_result {\n\tbool negated;\n\tunion {\n\t\tbool boolean;\n\t\tint int_32;\n\t\tunsigned int uint_32;\n\t\tu64 uint_64;\n\t};\n};\n\nstruct trace_event_raw_initcall_level {\n\tstruct trace_entry ent;\n\tu32 __data_loc_level;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_initcall_start {\n\tstruct trace_entry ent;\n\tinitcall_t func;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_initcall_finish {\n\tstruct trace_entry ent;\n\tinitcall_t func;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_initcall_level {\n\tu32 level;\n};\n\nstruct trace_event_data_offsets_initcall_start {};\n\nstruct trace_event_data_offsets_initcall_finish {};\n\ntypedef void (*btf_trace_initcall_level)(void *, const char *);\n\ntypedef void (*btf_trace_initcall_start)(void *, initcall_t);\n\ntypedef void (*btf_trace_initcall_finish)(void *, initcall_t, int);\n\nstruct blacklist_entry {\n\tstruct list_head next;\n\tchar *buf;\n};\n\ntypedef __u32 Elf32_Word;\n\nstruct elf32_note {\n\tElf32_Word n_namesz;\n\tElf32_Word n_descsz;\n\tElf32_Word n_type;\n};\n\nenum {\n\tPROC_ROOT_INO = 1,\n\tPROC_IPC_INIT_INO = 4026531839,\n\tPROC_UTS_INIT_INO = 4026531838,\n\tPROC_USER_INIT_INO = 4026531837,\n\tPROC_PID_INIT_INO = 4026531836,\n\tPROC_CGROUP_INIT_INO = 4026531835,\n\tPROC_TIME_INIT_INO = 4026531834,\n};\n\ntypedef __u16 __le16;\n\ntypedef __u16 __be16;\n\ntypedef __u32 __be32;\n\ntypedef __u64 __be64;\n\ntypedef __u32 __wsum;\n\ntypedef unsigned int slab_flags_t;\n\nstruct notifier_block;\n\ntypedef int (*notifier_fn_t)(struct notifier_block *, long unsigned int, void *);\n\nstruct notifier_block {\n\tnotifier_fn_t notifier_call;\n\tstruct notifier_block *next;\n\tint priority;\n};\n\nstruct blocking_notifier_head {\n\tstruct rw_semaphore rwsem;\n\tstruct notifier_block *head;\n};\n\nstruct raw_notifier_head {\n\tstruct notifier_block *head;\n};\n\ntypedef __u64 __addrpair;\n\ntypedef __u32 __portpair;\n\ntypedef struct {\n\tstruct net *net;\n} possible_net_t;\n\nstruct in6_addr {\n\tunion {\n\t\t__u8 u6_addr8[16];\n\t\t__be16 u6_addr16[8];\n\t\t__be32 u6_addr32[4];\n\t} in6_u;\n};\n\nstruct hlist_nulls_node {\n\tstruct hlist_nulls_node *next;\n\tstruct hlist_nulls_node **pprev;\n};\n\nstruct proto;\n\nstruct inet_timewait_death_row;\n\nstruct sock_common {\n\tunion {\n\t\t__addrpair skc_addrpair;\n\t\tstruct {\n\t\t\t__be32 skc_daddr;\n\t\t\t__be32 skc_rcv_saddr;\n\t\t};\n\t};\n\tunion {\n\t\tunsigned int skc_hash;\n\t\t__u16 skc_u16hashes[2];\n\t};\n\tunion {\n\t\t__portpair skc_portpair;\n\t\tstruct {\n\t\t\t__be16 skc_dport;\n\t\t\t__u16 skc_num;\n\t\t};\n\t};\n\tshort unsigned int skc_family;\n\tvolatile unsigned char skc_state;\n\tunsigned char skc_reuse: 4;\n\tunsigned char skc_reuseport: 1;\n\tunsigned char skc_ipv6only: 1;\n\tunsigned char skc_net_refcnt: 1;\n\tint skc_bound_dev_if;\n\tunion {\n\t\tstruct hlist_node skc_bind_node;\n\t\tstruct hlist_node skc_portaddr_node;\n\t};\n\tstruct proto *skc_prot;\n\tpossible_net_t skc_net;\n\tstruct in6_addr skc_v6_daddr;\n\tstruct in6_addr skc_v6_rcv_saddr;\n\tatomic64_t skc_cookie;\n\tunion {\n\t\tlong unsigned int skc_flags;\n\t\tstruct sock *skc_listener;\n\t\tstruct inet_timewait_death_row *skc_tw_dr;\n\t};\n\tint skc_dontcopy_begin[0];\n\tunion {\n\t\tstruct hlist_node skc_node;\n\t\tstruct hlist_nulls_node skc_nulls_node;\n\t};\n\tshort unsigned int skc_tx_queue_mapping;\n\tshort unsigned int skc_rx_queue_mapping;\n\tunion {\n\t\tint skc_incoming_cpu;\n\t\tu32 skc_rcv_wnd;\n\t\tu32 skc_tw_rcv_nxt;\n\t};\n\trefcount_t skc_refcnt;\n\tint skc_dontcopy_end[0];\n\tunion {\n\t\tu32 skc_rxhash;\n\t\tu32 skc_window_clamp;\n\t\tu32 skc_tw_snd_nxt;\n\t};\n};\n\ntypedef struct {\n\tspinlock_t slock;\n\tint owned;\n\twait_queue_head_t wq;\n} socket_lock_t;\n\nstruct sk_buff;\n\nstruct sk_buff_head {\n\tstruct sk_buff *next;\n\tstruct sk_buff *prev;\n\t__u32 qlen;\n\tspinlock_t lock;\n};\n\ntypedef u64 netdev_features_t;\n\nstruct sock_cgroup_data {\n\tunion {\n\t\tstruct {\n\t\t\tu8 is_data: 1;\n\t\t\tu8 no_refcnt: 1;\n\t\t\tu8 unused: 6;\n\t\t\tu8 padding;\n\t\t\tu16 prioidx;\n\t\t\tu32 classid;\n\t\t};\n\t\tu64 val;\n\t};\n};\n\nstruct sk_filter;\n\nstruct socket_wq;\n\nstruct xfrm_policy;\n\nstruct dst_entry;\n\nstruct socket;\n\nstruct net_device;\n\nstruct sock_reuseport;\n\nstruct bpf_local_storage;\n\nstruct sock {\n\tstruct sock_common __sk_common;\n\tsocket_lock_t sk_lock;\n\tatomic_t sk_drops;\n\tint sk_rcvlowat;\n\tstruct sk_buff_head sk_error_queue;\n\tstruct sk_buff *sk_rx_skb_cache;\n\tstruct sk_buff_head sk_receive_queue;\n\tstruct {\n\t\tatomic_t rmem_alloc;\n\t\tint len;\n\t\tstruct sk_buff *head;\n\t\tstruct sk_buff *tail;\n\t} sk_backlog;\n\tint sk_forward_alloc;\n\tunsigned int sk_ll_usec;\n\tunsigned int sk_napi_id;\n\tint sk_rcvbuf;\n\tstruct sk_filter *sk_filter;\n\tunion {\n\t\tstruct socket_wq *sk_wq;\n\t\tstruct socket_wq *sk_wq_raw;\n\t};\n\tstruct xfrm_policy *sk_policy[2];\n\tstruct dst_entry *sk_rx_dst;\n\tstruct dst_entry *sk_dst_cache;\n\tatomic_t sk_omem_alloc;\n\tint sk_sndbuf;\n\tint sk_wmem_queued;\n\trefcount_t sk_wmem_alloc;\n\tlong unsigned int sk_tsq_flags;\n\tunion {\n\t\tstruct sk_buff *sk_send_head;\n\t\tstruct rb_root tcp_rtx_queue;\n\t};\n\tstruct sk_buff *sk_tx_skb_cache;\n\tstruct sk_buff_head sk_write_queue;\n\t__s32 sk_peek_off;\n\tint sk_write_pending;\n\t__u32 sk_dst_pending_confirm;\n\tu32 sk_pacing_status;\n\tlong int sk_sndtimeo;\n\tstruct timer_list sk_timer;\n\t__u32 sk_priority;\n\t__u32 sk_mark;\n\tlong unsigned int sk_pacing_rate;\n\tlong unsigned int sk_max_pacing_rate;\n\tstruct page_frag sk_frag;\n\tnetdev_features_t sk_route_caps;\n\tnetdev_features_t sk_route_nocaps;\n\tnetdev_features_t sk_route_forced_caps;\n\tint sk_gso_type;\n\tunsigned int sk_gso_max_size;\n\tgfp_t sk_allocation;\n\t__u32 sk_txhash;\n\tu8 sk_padding: 1;\n\tu8 sk_kern_sock: 1;\n\tu8 sk_no_check_tx: 1;\n\tu8 sk_no_check_rx: 1;\n\tu8 sk_userlocks: 4;\n\tu8 sk_pacing_shift;\n\tu16 sk_type;\n\tu16 sk_protocol;\n\tu16 sk_gso_max_segs;\n\tlong unsigned int sk_lingertime;\n\tstruct proto *sk_prot_creator;\n\trwlock_t sk_callback_lock;\n\tint sk_err;\n\tint sk_err_soft;\n\tu32 sk_ack_backlog;\n\tu32 sk_max_ack_backlog;\n\tkuid_t sk_uid;\n\tu8 sk_prefer_busy_poll;\n\tu16 sk_busy_poll_budget;\n\tstruct pid *sk_peer_pid;\n\tconst struct cred *sk_peer_cred;\n\tlong int sk_rcvtimeo;\n\tktime_t sk_stamp;\n\tu16 sk_tsflags;\n\tu8 sk_shutdown;\n\tu32 sk_tskey;\n\tatomic_t sk_zckey;\n\tu8 sk_clockid;\n\tu8 sk_txtime_deadline_mode: 1;\n\tu8 sk_txtime_report_errors: 1;\n\tu8 sk_txtime_unused: 6;\n\tstruct socket *sk_socket;\n\tvoid *sk_user_data;\n\tvoid *sk_security;\n\tstruct sock_cgroup_data sk_cgrp_data;\n\tstruct mem_cgroup *sk_memcg;\n\tvoid (*sk_state_change)(struct sock *);\n\tvoid (*sk_data_ready)(struct sock *);\n\tvoid (*sk_write_space)(struct sock *);\n\tvoid (*sk_error_report)(struct sock *);\n\tint (*sk_backlog_rcv)(struct sock *, struct sk_buff *);\n\tstruct sk_buff * (*sk_validate_xmit_skb)(struct sock *, struct net_device *, struct sk_buff *);\n\tvoid (*sk_destruct)(struct sock *);\n\tstruct sock_reuseport *sk_reuseport_cb;\n\tstruct bpf_local_storage *sk_bpf_storage;\n\tstruct callback_head sk_rcu;\n};\n\nstruct rhash_head {\n\tstruct rhash_head *next;\n};\n\nstruct rhashtable;\n\nstruct rhashtable_compare_arg {\n\tstruct rhashtable *ht;\n\tconst void *key;\n};\n\ntypedef u32 (*rht_hashfn_t)(const void *, u32, u32);\n\ntypedef u32 (*rht_obj_hashfn_t)(const void *, u32, u32);\n\ntypedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *, const void *);\n\nstruct rhashtable_params {\n\tu16 nelem_hint;\n\tu16 key_len;\n\tu16 key_offset;\n\tu16 head_offset;\n\tunsigned int max_size;\n\tu16 min_size;\n\tbool automatic_shrinking;\n\trht_hashfn_t hashfn;\n\trht_obj_hashfn_t obj_hashfn;\n\trht_obj_cmpfn_t obj_cmpfn;\n};\n\nstruct bucket_table;\n\nstruct rhashtable {\n\tstruct bucket_table *tbl;\n\tunsigned int key_len;\n\tunsigned int max_elems;\n\tstruct rhashtable_params p;\n\tbool rhlist;\n\tstruct work_struct run_work;\n\tstruct mutex mutex;\n\tspinlock_t lock;\n\tatomic_t nelems;\n};\n\nstruct fs_struct {\n\tint users;\n\tspinlock_t lock;\n\tseqcount_spinlock_t seq;\n\tint umask;\n\tint in_exec;\n\tstruct path root;\n\tstruct path pwd;\n};\n\nstruct pipe_buffer;\n\nstruct watch_queue;\n\nstruct pipe_inode_info {\n\tstruct mutex mutex;\n\twait_queue_head_t rd_wait;\n\twait_queue_head_t wr_wait;\n\tunsigned int head;\n\tunsigned int tail;\n\tunsigned int max_usage;\n\tunsigned int ring_size;\n\tbool note_loss;\n\tunsigned int nr_accounted;\n\tunsigned int readers;\n\tunsigned int writers;\n\tunsigned int files;\n\tunsigned int r_counter;\n\tunsigned int w_counter;\n\tstruct page *tmp_page;\n\tstruct fasync_struct *fasync_readers;\n\tstruct fasync_struct *fasync_writers;\n\tstruct pipe_buffer *bufs;\n\tstruct user_struct *user;\n\tstruct watch_queue *watch_queue;\n};\n\ntypedef short unsigned int __kernel_sa_family_t;\n\ntypedef __kernel_sa_family_t sa_family_t;\n\nstruct sockaddr {\n\tsa_family_t sa_family;\n\tchar sa_data[14];\n};\n\nstruct msghdr {\n\tvoid *msg_name;\n\tint msg_namelen;\n\tstruct iov_iter msg_iter;\n\tunion {\n\t\tvoid *msg_control;\n\t\tvoid *msg_control_user;\n\t};\n\tbool msg_control_is_user: 1;\n\t__kernel_size_t msg_controllen;\n\tunsigned int msg_flags;\n\tstruct kiocb *msg_iocb;\n};\n\ntypedef struct {\n\tunsigned int clock_rate;\n\tunsigned int clock_type;\n\tshort unsigned int loopback;\n} sync_serial_settings;\n\ntypedef struct {\n\tunsigned int clock_rate;\n\tunsigned int clock_type;\n\tshort unsigned int loopback;\n\tunsigned int slot_map;\n} te1_settings;\n\ntypedef struct {\n\tshort unsigned int encoding;\n\tshort unsigned int parity;\n} raw_hdlc_proto;\n\ntypedef struct {\n\tunsigned int t391;\n\tunsigned int t392;\n\tunsigned int n391;\n\tunsigned int n392;\n\tunsigned int n393;\n\tshort unsigned int lmi;\n\tshort unsigned int dce;\n} fr_proto;\n\ntypedef struct {\n\tunsigned int dlci;\n} fr_proto_pvc;\n\ntypedef struct {\n\tunsigned int dlci;\n\tchar master[16];\n} fr_proto_pvc_info;\n\ntypedef struct {\n\tunsigned int interval;\n\tunsigned int timeout;\n} cisco_proto;\n\ntypedef struct {\n\tshort unsigned int dce;\n\tunsigned int modulo;\n\tunsigned int window;\n\tunsigned int t1;\n\tunsigned int t2;\n\tunsigned int n2;\n} x25_hdlc_proto;\n\nstruct ifmap {\n\tlong unsigned int mem_start;\n\tlong unsigned int mem_end;\n\tshort unsigned int base_addr;\n\tunsigned char irq;\n\tunsigned char dma;\n\tunsigned char port;\n};\n\nstruct if_settings {\n\tunsigned int type;\n\tunsigned int size;\n\tunion {\n\t\traw_hdlc_proto *raw_hdlc;\n\t\tcisco_proto *cisco;\n\t\tfr_proto *fr;\n\t\tfr_proto_pvc *fr_pvc;\n\t\tfr_proto_pvc_info *fr_pvc_info;\n\t\tx25_hdlc_proto *x25;\n\t\tsync_serial_settings *sync;\n\t\tte1_settings *te1;\n\t} ifs_ifsu;\n};\n\nstruct ifreq {\n\tunion {\n\t\tchar ifrn_name[16];\n\t} ifr_ifrn;\n\tunion {\n\t\tstruct sockaddr ifru_addr;\n\t\tstruct sockaddr ifru_dstaddr;\n\t\tstruct sockaddr ifru_broadaddr;\n\t\tstruct sockaddr ifru_netmask;\n\t\tstruct sockaddr ifru_hwaddr;\n\t\tshort int ifru_flags;\n\t\tint ifru_ivalue;\n\t\tint ifru_mtu;\n\t\tstruct ifmap ifru_map;\n\t\tchar ifru_slave[16];\n\t\tchar ifru_newname[16];\n\t\tvoid *ifru_data;\n\t\tstruct if_settings ifru_settings;\n\t} ifr_ifru;\n};\n\nstruct vfsmount {\n\tstruct dentry *mnt_root;\n\tstruct super_block *mnt_sb;\n\tint mnt_flags;\n};\n\nstruct ld_semaphore {\n\tatomic_long_t count;\n\traw_spinlock_t wait_lock;\n\tunsigned int wait_readers;\n\tstruct list_head read_wait;\n\tstruct list_head write_wait;\n};\n\ntypedef unsigned int tcflag_t;\n\ntypedef unsigned char cc_t;\n\ntypedef unsigned int speed_t;\n\nstruct ktermios {\n\ttcflag_t c_iflag;\n\ttcflag_t c_oflag;\n\ttcflag_t c_cflag;\n\ttcflag_t c_lflag;\n\tcc_t c_line;\n\tcc_t c_cc[19];\n\tspeed_t c_ispeed;\n\tspeed_t c_ospeed;\n};\n\nstruct winsize {\n\tshort unsigned int ws_row;\n\tshort unsigned int ws_col;\n\tshort unsigned int ws_xpixel;\n\tshort unsigned int ws_ypixel;\n};\n\nstruct tty_driver;\n\nstruct tty_operations;\n\nstruct tty_ldisc;\n\nstruct tty_port;\n\nstruct tty_struct {\n\tint magic;\n\tstruct kref kref;\n\tstruct device *dev;\n\tstruct tty_driver *driver;\n\tconst struct tty_operations *ops;\n\tint index;\n\tstruct ld_semaphore ldisc_sem;\n\tstruct tty_ldisc *ldisc;\n\tstruct mutex atomic_write_lock;\n\tstruct mutex legacy_mutex;\n\tstruct mutex throttle_mutex;\n\tstruct rw_semaphore termios_rwsem;\n\tstruct mutex winsize_mutex;\n\tspinlock_t ctrl_lock;\n\tspinlock_t flow_lock;\n\tstruct ktermios termios;\n\tstruct ktermios termios_locked;\n\tchar name[64];\n\tstruct pid *pgrp;\n\tstruct pid *session;\n\tlong unsigned int flags;\n\tint count;\n\tstruct winsize winsize;\n\tlong unsigned int stopped: 1;\n\tlong unsigned int flow_stopped: 1;\n\tint: 30;\n\tlong unsigned int unused: 62;\n\tint hw_stopped;\n\tlong unsigned int ctrl_status: 8;\n\tlong unsigned int packet: 1;\n\tint: 23;\n\tlong unsigned int unused_ctrl: 55;\n\tunsigned int receive_room;\n\tint flow_change;\n\tstruct tty_struct *link;\n\tstruct fasync_struct *fasync;\n\twait_queue_head_t write_wait;\n\twait_queue_head_t read_wait;\n\tstruct work_struct hangup_work;\n\tvoid *disc_data;\n\tvoid *driver_data;\n\tspinlock_t files_lock;\n\tstruct list_head tty_files;\n\tint closing;\n\tunsigned char *write_buf;\n\tint write_cnt;\n\tstruct work_struct SAK_work;\n\tstruct tty_port *port;\n};\n\ntypedef struct {\n\tsize_t written;\n\tsize_t count;\n\tunion {\n\t\tchar *buf;\n\t\tvoid *data;\n\t} arg;\n\tint error;\n} read_descriptor_t;\n\nstruct posix_acl_entry {\n\tshort int e_tag;\n\tshort unsigned int e_perm;\n\tunion {\n\t\tkuid_t e_uid;\n\t\tkgid_t e_gid;\n\t};\n};\n\nstruct posix_acl {\n\trefcount_t a_refcount;\n\tstruct callback_head a_rcu;\n\tunsigned int a_count;\n\tstruct posix_acl_entry a_entries[0];\n};\n\nstruct serial_icounter_struct;\n\nstruct serial_struct;\n\nstruct tty_operations {\n\tstruct tty_struct * (*lookup)(struct tty_driver *, struct file *, int);\n\tint (*install)(struct tty_driver *, struct tty_struct *);\n\tvoid (*remove)(struct tty_driver *, struct tty_struct *);\n\tint (*open)(struct tty_struct *, struct file *);\n\tvoid (*close)(struct tty_struct *, struct file *);\n\tvoid (*shutdown)(struct tty_struct *);\n\tvoid (*cleanup)(struct tty_struct *);\n\tint (*write)(struct tty_struct *, const unsigned char *, int);\n\tint (*put_char)(struct tty_struct *, unsigned char);\n\tvoid (*flush_chars)(struct tty_struct *);\n\tint (*write_room)(struct tty_struct *);\n\tint (*chars_in_buffer)(struct tty_struct *);\n\tint (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);\n\tlong int (*compat_ioctl)(struct tty_struct *, unsigned int, long unsigned int);\n\tvoid (*set_termios)(struct tty_struct *, struct ktermios *);\n\tvoid (*throttle)(struct tty_struct *);\n\tvoid (*unthrottle)(struct tty_struct *);\n\tvoid (*stop)(struct tty_struct *);\n\tvoid (*start)(struct tty_struct *);\n\tvoid (*hangup)(struct tty_struct *);\n\tint (*break_ctl)(struct tty_struct *, int);\n\tvoid (*flush_buffer)(struct tty_struct *);\n\tvoid (*set_ldisc)(struct tty_struct *);\n\tvoid (*wait_until_sent)(struct tty_struct *, int);\n\tvoid (*send_xchar)(struct tty_struct *, char);\n\tint (*tiocmget)(struct tty_struct *);\n\tint (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);\n\tint (*resize)(struct tty_struct *, struct winsize *);\n\tint (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);\n\tint (*get_serial)(struct tty_struct *, struct serial_struct *);\n\tint (*set_serial)(struct tty_struct *, struct serial_struct *);\n\tvoid (*show_fdinfo)(struct tty_struct *, struct seq_file *);\n\tint (*poll_init)(struct tty_driver *, int, char *);\n\tint (*poll_get_char)(struct tty_driver *, int);\n\tvoid (*poll_put_char)(struct tty_driver *, int, char);\n\tint (*proc_show)(struct seq_file *, void *);\n};\n\nstruct proc_dir_entry;\n\nstruct tty_driver {\n\tint magic;\n\tstruct kref kref;\n\tstruct cdev **cdevs;\n\tstruct module *owner;\n\tconst char *driver_name;\n\tconst char *name;\n\tint name_base;\n\tint major;\n\tint minor_start;\n\tunsigned int num;\n\tshort int type;\n\tshort int subtype;\n\tstruct ktermios init_termios;\n\tlong unsigned int flags;\n\tstruct proc_dir_entry *proc_entry;\n\tstruct tty_driver *other;\n\tstruct tty_struct **ttys;\n\tstruct tty_port **ports;\n\tstruct ktermios **termios;\n\tvoid *driver_state;\n\tconst struct tty_operations *ops;\n\tstruct list_head tty_drivers;\n};\n\nstruct tty_buffer {\n\tunion {\n\t\tstruct tty_buffer *next;\n\t\tstruct llist_node free;\n\t};\n\tint used;\n\tint size;\n\tint commit;\n\tint read;\n\tint flags;\n\tlong unsigned int data[0];\n};\n\nstruct tty_bufhead {\n\tstruct tty_buffer *head;\n\tstruct work_struct work;\n\tstruct mutex lock;\n\tatomic_t priority;\n\tstruct tty_buffer sentinel;\n\tstruct llist_head free;\n\tatomic_t mem_used;\n\tint mem_limit;\n\tstruct tty_buffer *tail;\n};\n\nstruct tty_port_operations;\n\nstruct tty_port_client_operations;\n\nstruct tty_port {\n\tstruct tty_bufhead buf;\n\tstruct tty_struct *tty;\n\tstruct tty_struct *itty;\n\tconst struct tty_port_operations *ops;\n\tconst struct tty_port_client_operations *client_ops;\n\tspinlock_t lock;\n\tint blocked_open;\n\tint count;\n\twait_queue_head_t open_wait;\n\twait_queue_head_t delta_msr_wait;\n\tlong unsigned int flags;\n\tlong unsigned int iflags;\n\tunsigned char console: 1;\n\tunsigned char low_latency: 1;\n\tstruct mutex mutex;\n\tstruct mutex buf_mutex;\n\tunsigned char *xmit_buf;\n\tunsigned int close_delay;\n\tunsigned int closing_wait;\n\tint drain_delay;\n\tstruct kref kref;\n\tvoid *client_data;\n};\n\nstruct tty_ldisc_ops {\n\tint magic;\n\tchar *name;\n\tint num;\n\tint flags;\n\tint (*open)(struct tty_struct *);\n\tvoid (*close)(struct tty_struct *);\n\tvoid (*flush_buffer)(struct tty_struct *);\n\tssize_t (*read)(struct tty_struct *, struct file *, unsigned char *, size_t, void **, long unsigned int);\n\tssize_t (*write)(struct tty_struct *, struct file *, const unsigned char *, size_t);\n\tint (*ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);\n\tint (*compat_ioctl)(struct tty_struct *, struct file *, unsigned int, long unsigned int);\n\tvoid (*set_termios)(struct tty_struct *, struct ktermios *);\n\t__poll_t (*poll)(struct tty_struct *, struct file *, struct poll_table_struct *);\n\tint (*hangup)(struct tty_struct *);\n\tvoid (*receive_buf)(struct tty_struct *, const unsigned char *, char *, int);\n\tvoid (*write_wakeup)(struct tty_struct *);\n\tvoid (*dcd_change)(struct tty_struct *, unsigned int);\n\tint (*receive_buf2)(struct tty_struct *, const unsigned char *, char *, int);\n\tstruct module *owner;\n\tint refcount;\n};\n\nstruct tty_ldisc {\n\tstruct tty_ldisc_ops *ops;\n\tstruct tty_struct *tty;\n};\n\nstruct tty_port_operations {\n\tint (*carrier_raised)(struct tty_port *);\n\tvoid (*dtr_rts)(struct tty_port *, int);\n\tvoid (*shutdown)(struct tty_port *);\n\tint (*activate)(struct tty_port *, struct tty_struct *);\n\tvoid (*destruct)(struct tty_port *);\n};\n\nstruct tty_port_client_operations {\n\tint (*receive_buf)(struct tty_port *, const unsigned char *, const unsigned char *, size_t);\n\tvoid (*write_wakeup)(struct tty_port *);\n};\n\nstruct prot_inuse;\n\nstruct netns_core {\n\tstruct ctl_table_header *sysctl_hdr;\n\tint sysctl_somaxconn;\n\tint *sock_inuse;\n\tstruct prot_inuse *prot_inuse;\n};\n\nstruct tcp_mib;\n\nstruct ipstats_mib;\n\nstruct linux_mib;\n\nstruct udp_mib;\n\nstruct icmp_mib;\n\nstruct icmpmsg_mib;\n\nstruct icmpv6_mib;\n\nstruct icmpv6msg_mib;\n\nstruct linux_xfrm_mib;\n\nstruct linux_tls_mib;\n\nstruct mptcp_mib;\n\nstruct netns_mib {\n\tstruct tcp_mib *tcp_statistics;\n\tstruct ipstats_mib *ip_statistics;\n\tstruct linux_mib *net_statistics;\n\tstruct udp_mib *udp_statistics;\n\tstruct udp_mib *udplite_statistics;\n\tstruct icmp_mib *icmp_statistics;\n\tstruct icmpmsg_mib *icmpmsg_statistics;\n\tstruct proc_dir_entry *proc_net_devsnmp6;\n\tstruct udp_mib *udp_stats_in6;\n\tstruct udp_mib *udplite_stats_in6;\n\tstruct ipstats_mib *ipv6_statistics;\n\tstruct icmpv6_mib *icmpv6_statistics;\n\tstruct icmpv6msg_mib *icmpv6msg_statistics;\n\tstruct linux_xfrm_mib *xfrm_statistics;\n\tstruct linux_tls_mib *tls_statistics;\n\tstruct mptcp_mib *mptcp_statistics;\n};\n\nstruct netns_packet {\n\tstruct mutex sklist_lock;\n\tstruct hlist_head sklist;\n};\n\nstruct netns_unix {\n\tint sysctl_max_dgram_qlen;\n\tstruct ctl_table_header *ctl;\n};\n\nstruct netns_nexthop {\n\tstruct rb_root rb_root;\n\tstruct hlist_head *devhash;\n\tunsigned int seq;\n\tu32 last_id_allocated;\n\tstruct blocking_notifier_head notifier_chain;\n};\n\nstruct local_ports {\n\tseqlock_t lock;\n\tint range[2];\n\tbool warned;\n};\n\nstruct inet_hashinfo;\n\nstruct inet_timewait_death_row {\n\tatomic_t tw_count;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct inet_hashinfo *hashinfo;\n\tint sysctl_max_tw_buckets;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct ping_group_range {\n\tseqlock_t lock;\n\tkgid_t range[2];\n};\n\ntypedef struct {\n\tu64 key[2];\n} siphash_key_t;\n\nstruct ipv4_devconf;\n\nstruct ip_ra_chain;\n\nstruct fib_rules_ops;\n\nstruct fib_table;\n\nstruct inet_peer_base;\n\nstruct fqdir;\n\nstruct xt_table;\n\nstruct tcp_congestion_ops;\n\nstruct tcp_fastopen_context;\n\nstruct fib_notifier_ops;\n\nstruct netns_ipv4 {\n\tstruct ctl_table_header *forw_hdr;\n\tstruct ctl_table_header *frags_hdr;\n\tstruct ctl_table_header *ipv4_hdr;\n\tstruct ctl_table_header *route_hdr;\n\tstruct ctl_table_header *xfrm4_hdr;\n\tstruct ipv4_devconf *devconf_all;\n\tstruct ipv4_devconf *devconf_dflt;\n\tstruct ip_ra_chain *ra_chain;\n\tstruct mutex ra_mutex;\n\tstruct fib_rules_ops *rules_ops;\n\tbool fib_has_custom_rules;\n\tunsigned int fib_rules_require_fldissect;\n\tstruct fib_table *fib_main;\n\tstruct fib_table *fib_default;\n\tbool fib_has_custom_local_routes;\n\tint fib_num_tclassid_users;\n\tstruct hlist_head *fib_table_hash;\n\tbool fib_offload_disabled;\n\tstruct sock *fibnl;\n\tstruct sock **icmp_sk;\n\tstruct sock *mc_autojoin_sk;\n\tstruct inet_peer_base *peers;\n\tstruct sock **tcp_sk;\n\tstruct fqdir *fqdir;\n\tstruct xt_table *iptable_filter;\n\tstruct xt_table *iptable_mangle;\n\tstruct xt_table *iptable_raw;\n\tstruct xt_table *arptable_filter;\n\tstruct xt_table *iptable_security;\n\tstruct xt_table *nat_table;\n\tint sysctl_icmp_echo_ignore_all;\n\tint sysctl_icmp_echo_ignore_broadcasts;\n\tint sysctl_icmp_ignore_bogus_error_responses;\n\tint sysctl_icmp_ratelimit;\n\tint sysctl_icmp_ratemask;\n\tint sysctl_icmp_errors_use_inbound_ifaddr;\n\tstruct local_ports ip_local_ports;\n\tint sysctl_tcp_ecn;\n\tint sysctl_tcp_ecn_fallback;\n\tint sysctl_ip_default_ttl;\n\tint sysctl_ip_no_pmtu_disc;\n\tint sysctl_ip_fwd_use_pmtu;\n\tint sysctl_ip_fwd_update_priority;\n\tint sysctl_ip_nonlocal_bind;\n\tint sysctl_ip_autobind_reuse;\n\tint sysctl_ip_dynaddr;\n\tint sysctl_ip_early_demux;\n\tint sysctl_raw_l3mdev_accept;\n\tint sysctl_tcp_early_demux;\n\tint sysctl_udp_early_demux;\n\tint sysctl_nexthop_compat_mode;\n\tint sysctl_fwmark_reflect;\n\tint sysctl_tcp_fwmark_accept;\n\tint sysctl_tcp_l3mdev_accept;\n\tint sysctl_tcp_mtu_probing;\n\tint sysctl_tcp_mtu_probe_floor;\n\tint sysctl_tcp_base_mss;\n\tint sysctl_tcp_min_snd_mss;\n\tint sysctl_tcp_probe_threshold;\n\tu32 sysctl_tcp_probe_interval;\n\tint sysctl_tcp_keepalive_time;\n\tint sysctl_tcp_keepalive_probes;\n\tint sysctl_tcp_keepalive_intvl;\n\tint sysctl_tcp_syn_retries;\n\tint sysctl_tcp_synack_retries;\n\tint sysctl_tcp_syncookies;\n\tint sysctl_tcp_reordering;\n\tint sysctl_tcp_retries1;\n\tint sysctl_tcp_retries2;\n\tint sysctl_tcp_orphan_retries;\n\tint sysctl_tcp_fin_timeout;\n\tunsigned int sysctl_tcp_notsent_lowat;\n\tint sysctl_tcp_tw_reuse;\n\tint sysctl_tcp_sack;\n\tint sysctl_tcp_window_scaling;\n\tint sysctl_tcp_timestamps;\n\tint sysctl_tcp_early_retrans;\n\tint sysctl_tcp_recovery;\n\tint sysctl_tcp_thin_linear_timeouts;\n\tint sysctl_tcp_slow_start_after_idle;\n\tint sysctl_tcp_retrans_collapse;\n\tint sysctl_tcp_stdurg;\n\tint sysctl_tcp_rfc1337;\n\tint sysctl_tcp_abort_on_overflow;\n\tint sysctl_tcp_fack;\n\tint sysctl_tcp_max_reordering;\n\tint sysctl_tcp_dsack;\n\tint sysctl_tcp_app_win;\n\tint sysctl_tcp_adv_win_scale;\n\tint sysctl_tcp_frto;\n\tint sysctl_tcp_nometrics_save;\n\tint sysctl_tcp_no_ssthresh_metrics_save;\n\tint sysctl_tcp_moderate_rcvbuf;\n\tint sysctl_tcp_tso_win_divisor;\n\tint sysctl_tcp_workaround_signed_windows;\n\tint sysctl_tcp_limit_output_bytes;\n\tint sysctl_tcp_challenge_ack_limit;\n\tint sysctl_tcp_min_tso_segs;\n\tint sysctl_tcp_min_rtt_wlen;\n\tint sysctl_tcp_autocorking;\n\tint sysctl_tcp_invalid_ratelimit;\n\tint sysctl_tcp_pacing_ss_ratio;\n\tint sysctl_tcp_pacing_ca_ratio;\n\tint sysctl_tcp_wmem[3];\n\tint sysctl_tcp_rmem[3];\n\tint sysctl_tcp_comp_sack_nr;\n\tlong unsigned int sysctl_tcp_comp_sack_delay_ns;\n\tlong unsigned int sysctl_tcp_comp_sack_slack_ns;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct inet_timewait_death_row tcp_death_row;\n\tint sysctl_max_syn_backlog;\n\tint sysctl_tcp_fastopen;\n\tconst struct tcp_congestion_ops *tcp_congestion_control;\n\tstruct tcp_fastopen_context *tcp_fastopen_ctx;\n\tspinlock_t tcp_fastopen_ctx_lock;\n\tunsigned int sysctl_tcp_fastopen_blackhole_timeout;\n\tatomic_t tfo_active_disable_times;\n\tlong unsigned int tfo_active_disable_stamp;\n\tint sysctl_tcp_reflect_tos;\n\tint sysctl_udp_wmem_min;\n\tint sysctl_udp_rmem_min;\n\tint sysctl_udp_l3mdev_accept;\n\tint sysctl_igmp_max_memberships;\n\tint sysctl_igmp_max_msf;\n\tint sysctl_igmp_llm_reports;\n\tint sysctl_igmp_qrv;\n\tstruct ping_group_range ping_group_range;\n\tatomic_t dev_addr_genid;\n\tlong unsigned int *sysctl_local_reserved_ports;\n\tint sysctl_ip_prot_sock;\n\tstruct list_head mr_tables;\n\tstruct fib_rules_ops *mr_rules_ops;\n\tint sysctl_fib_multipath_use_neigh;\n\tint sysctl_fib_multipath_hash_policy;\n\tstruct fib_notifier_ops *notifier_ops;\n\tunsigned int fib_seq;\n\tstruct fib_notifier_ops *ipmr_notifier_ops;\n\tunsigned int ipmr_seq;\n\tatomic_t rt_genid;\n\tsiphash_key_t ip_id_key;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct netns_sysctl_ipv6 {\n\tstruct ctl_table_header *hdr;\n\tstruct ctl_table_header *route_hdr;\n\tstruct ctl_table_header *icmp_hdr;\n\tstruct ctl_table_header *frags_hdr;\n\tstruct ctl_table_header *xfrm6_hdr;\n\tint bindv6only;\n\tint flush_delay;\n\tint ip6_rt_max_size;\n\tint ip6_rt_gc_min_interval;\n\tint ip6_rt_gc_timeout;\n\tint ip6_rt_gc_interval;\n\tint ip6_rt_gc_elasticity;\n\tint ip6_rt_mtu_expires;\n\tint ip6_rt_min_advmss;\n\tint multipath_hash_policy;\n\tint flowlabel_consistency;\n\tint auto_flowlabels;\n\tint icmpv6_time;\n\tint icmpv6_echo_ignore_all;\n\tint icmpv6_echo_ignore_multicast;\n\tint icmpv6_echo_ignore_anycast;\n\tlong unsigned int icmpv6_ratemask[4];\n\tlong unsigned int *icmpv6_ratemask_ptr;\n\tint anycast_src_echo_reply;\n\tint ip_nonlocal_bind;\n\tint fwmark_reflect;\n\tint idgen_retries;\n\tint idgen_delay;\n\tint flowlabel_state_ranges;\n\tint flowlabel_reflect;\n\tint max_dst_opts_cnt;\n\tint max_hbh_opts_cnt;\n\tint max_dst_opts_len;\n\tint max_hbh_opts_len;\n\tint seg6_flowlabel;\n\tbool skip_notify_on_dev_down;\n};\n\nstruct neighbour;\n\nstruct dst_ops {\n\tshort unsigned int family;\n\tunsigned int gc_thresh;\n\tint (*gc)(struct dst_ops *);\n\tstruct dst_entry * (*check)(struct dst_entry *, __u32);\n\tunsigned int (*default_advmss)(const struct dst_entry *);\n\tunsigned int (*mtu)(const struct dst_entry *);\n\tu32 * (*cow_metrics)(struct dst_entry *, long unsigned int);\n\tvoid (*destroy)(struct dst_entry *);\n\tvoid (*ifdown)(struct dst_entry *, struct net_device *, int);\n\tstruct dst_entry * (*negative_advice)(struct dst_entry *);\n\tvoid (*link_failure)(struct sk_buff *);\n\tvoid (*update_pmtu)(struct dst_entry *, struct sock *, struct sk_buff *, u32, bool);\n\tvoid (*redirect)(struct dst_entry *, struct sock *, struct sk_buff *);\n\tint (*local_out)(struct net *, struct sock *, struct sk_buff *);\n\tstruct neighbour * (*neigh_lookup)(const struct dst_entry *, struct sk_buff *, const void *);\n\tvoid (*confirm_neigh)(const struct dst_entry *, const void *);\n\tstruct kmem_cache *kmem_cachep;\n\tstruct percpu_counter pcpuc_entries;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct ipv6_devconf;\n\nstruct fib6_info;\n\nstruct rt6_info;\n\nstruct rt6_statistics;\n\nstruct fib6_table;\n\nstruct seg6_pernet_data;\n\nstruct netns_ipv6 {\n\tstruct netns_sysctl_ipv6 sysctl;\n\tstruct ipv6_devconf *devconf_all;\n\tstruct ipv6_devconf *devconf_dflt;\n\tstruct inet_peer_base *peers;\n\tstruct fqdir *fqdir;\n\tstruct xt_table *ip6table_filter;\n\tstruct xt_table *ip6table_mangle;\n\tstruct xt_table *ip6table_raw;\n\tstruct xt_table *ip6table_security;\n\tstruct xt_table *ip6table_nat;\n\tstruct fib6_info *fib6_null_entry;\n\tstruct rt6_info *ip6_null_entry;\n\tstruct rt6_statistics *rt6_stats;\n\tstruct timer_list ip6_fib_timer;\n\tstruct hlist_head *fib_table_hash;\n\tstruct fib6_table *fib6_main_tbl;\n\tstruct list_head fib6_walkers;\n\tlong: 64;\n\tlong: 64;\n\tstruct dst_ops ip6_dst_ops;\n\trwlock_t fib6_walker_lock;\n\tspinlock_t fib6_gc_lock;\n\tunsigned int ip6_rt_gc_expire;\n\tlong unsigned int ip6_rt_last_gc;\n\tunsigned int fib6_rules_require_fldissect;\n\tbool fib6_has_custom_rules;\n\tunsigned int fib6_routes_require_src;\n\tstruct rt6_info *ip6_prohibit_entry;\n\tstruct rt6_info *ip6_blk_hole_entry;\n\tstruct fib6_table *fib6_local_tbl;\n\tstruct fib_rules_ops *fib6_rules_ops;\n\tstruct sock **icmp_sk;\n\tstruct sock *ndisc_sk;\n\tstruct sock *tcp_sk;\n\tstruct sock *igmp_sk;\n\tstruct sock *mc_autojoin_sk;\n\tstruct list_head mr6_tables;\n\tstruct fib_rules_ops *mr6_rules_ops;\n\tatomic_t dev_addr_genid;\n\tatomic_t fib6_sernum;\n\tstruct seg6_pernet_data *seg6_data;\n\tstruct fib_notifier_ops *notifier_ops;\n\tstruct fib_notifier_ops *ip6mr_notifier_ops;\n\tunsigned int ipmr_seq;\n\tstruct {\n\t\tstruct hlist_head head;\n\t\tspinlock_t lock;\n\t\tu32 seq;\n\t} ip6addrlbl_table;\n};\n\nstruct netns_sysctl_lowpan {\n\tstruct ctl_table_header *frags_hdr;\n};\n\nstruct netns_ieee802154_lowpan {\n\tstruct netns_sysctl_lowpan sysctl;\n\tstruct fqdir *fqdir;\n};\n\nstruct sctp_mib;\n\nstruct netns_sctp {\n\tstruct sctp_mib *sctp_statistics;\n\tstruct proc_dir_entry *proc_net_sctp;\n\tstruct ctl_table_header *sysctl_header;\n\tstruct sock *ctl_sock;\n\tstruct sock *udp4_sock;\n\tstruct sock *udp6_sock;\n\tint udp_port;\n\tint encap_port;\n\tstruct list_head local_addr_list;\n\tstruct list_head addr_waitq;\n\tstruct timer_list addr_wq_timer;\n\tstruct list_head auto_asconf_splist;\n\tspinlock_t addr_wq_lock;\n\tspinlock_t local_addr_lock;\n\tunsigned int rto_initial;\n\tunsigned int rto_min;\n\tunsigned int rto_max;\n\tint rto_alpha;\n\tint rto_beta;\n\tint max_burst;\n\tint cookie_preserve_enable;\n\tchar *sctp_hmac_alg;\n\tunsigned int valid_cookie_life;\n\tunsigned int sack_timeout;\n\tunsigned int hb_interval;\n\tint max_retrans_association;\n\tint max_retrans_path;\n\tint max_retrans_init;\n\tint pf_retrans;\n\tint ps_retrans;\n\tint pf_enable;\n\tint pf_expose;\n\tint sndbuf_policy;\n\tint rcvbuf_policy;\n\tint default_auto_asconf;\n\tint addip_enable;\n\tint addip_noauth;\n\tint prsctp_enable;\n\tint reconf_enable;\n\tint auth_enable;\n\tint intl_enable;\n\tint ecn_enable;\n\tint scope_policy;\n\tint rwnd_upd_shift;\n\tlong unsigned int max_autoclose;\n};\n\nstruct nf_queue_handler;\n\nstruct nf_logger;\n\nstruct nf_hook_entries;\n\nstruct netns_nf {\n\tstruct proc_dir_entry *proc_netfilter;\n\tconst struct nf_queue_handler *queue_handler;\n\tconst struct nf_logger *nf_loggers[13];\n\tstruct ctl_table_header *nf_log_dir_header;\n\tstruct nf_hook_entries *hooks_ipv4[5];\n\tstruct nf_hook_entries *hooks_ipv6[5];\n\tstruct nf_hook_entries *hooks_arp[3];\n\tstruct nf_hook_entries *hooks_bridge[5];\n\tbool defrag_ipv4;\n\tbool defrag_ipv6;\n};\n\nstruct ebt_table;\n\nstruct netns_xt {\n\tstruct list_head tables[13];\n\tbool notrack_deprecated_warning;\n\tbool clusterip_deprecated_warning;\n\tstruct ebt_table *broute_table;\n\tstruct ebt_table *frame_filter;\n\tstruct ebt_table *frame_nat;\n};\n\nstruct nf_generic_net {\n\tunsigned int timeout;\n};\n\nstruct nf_tcp_net {\n\tunsigned int timeouts[14];\n\tint tcp_loose;\n\tint tcp_be_liberal;\n\tint tcp_max_retrans;\n};\n\nstruct nf_udp_net {\n\tunsigned int timeouts[2];\n};\n\nstruct nf_icmp_net {\n\tunsigned int timeout;\n};\n\nstruct nf_dccp_net {\n\tint dccp_loose;\n\tunsigned int dccp_timeout[10];\n};\n\nstruct nf_sctp_net {\n\tunsigned int timeouts[10];\n};\n\nstruct nf_gre_net {\n\tstruct list_head keymap_list;\n\tunsigned int timeouts[2];\n};\n\nstruct nf_ip_net {\n\tstruct nf_generic_net generic;\n\tstruct nf_tcp_net tcp;\n\tstruct nf_udp_net udp;\n\tstruct nf_icmp_net icmp;\n\tstruct nf_icmp_net icmpv6;\n\tstruct nf_dccp_net dccp;\n\tstruct nf_sctp_net sctp;\n\tstruct nf_gre_net gre;\n};\n\nstruct ct_pcpu;\n\nstruct ip_conntrack_stat;\n\nstruct nf_ct_event_notifier;\n\nstruct nf_exp_event_notifier;\n\nstruct netns_ct {\n\tatomic_t count;\n\tunsigned int expect_count;\n\tstruct delayed_work ecache_dwork;\n\tbool ecache_dwork_pending;\n\tbool auto_assign_helper_warned;\n\tstruct ctl_table_header *sysctl_header;\n\tunsigned int sysctl_log_invalid;\n\tint sysctl_events;\n\tint sysctl_acct;\n\tint sysctl_auto_assign_helper;\n\tint sysctl_tstamp;\n\tint sysctl_checksum;\n\tstruct ct_pcpu *pcpu_lists;\n\tstruct ip_conntrack_stat *stat;\n\tstruct nf_ct_event_notifier *nf_conntrack_event_cb;\n\tstruct nf_exp_event_notifier *nf_expect_event_cb;\n\tstruct nf_ip_net nf_ct_proto;\n\tunsigned int labels_used;\n};\n\nstruct netns_nftables {\n\tstruct list_head tables;\n\tstruct list_head commit_list;\n\tstruct list_head module_list;\n\tstruct list_head notify_list;\n\tstruct mutex commit_mutex;\n\tunsigned int base_seq;\n\tu8 gencursor;\n\tu8 validate_state;\n};\n\nstruct netns_nf_frag {\n\tstruct fqdir *fqdir;\n};\n\nstruct netns_bpf {\n\tstruct bpf_prog_array *run_array[2];\n\tstruct bpf_prog *progs[2];\n\tstruct list_head links[2];\n};\n\nstruct xfrm_policy_hash {\n\tstruct hlist_head *table;\n\tunsigned int hmask;\n\tu8 dbits4;\n\tu8 sbits4;\n\tu8 dbits6;\n\tu8 sbits6;\n};\n\nstruct xfrm_policy_hthresh {\n\tstruct work_struct work;\n\tseqlock_t lock;\n\tu8 lbits4;\n\tu8 rbits4;\n\tu8 lbits6;\n\tu8 rbits6;\n};\n\nstruct netns_xfrm {\n\tstruct list_head state_all;\n\tstruct hlist_head *state_bydst;\n\tstruct hlist_head *state_bysrc;\n\tstruct hlist_head *state_byspi;\n\tunsigned int state_hmask;\n\tunsigned int state_num;\n\tstruct work_struct state_hash_work;\n\tstruct list_head policy_all;\n\tstruct hlist_head *policy_byidx;\n\tunsigned int policy_idx_hmask;\n\tstruct hlist_head policy_inexact[3];\n\tstruct xfrm_policy_hash policy_bydst[3];\n\tunsigned int policy_count[6];\n\tstruct work_struct policy_hash_work;\n\tstruct xfrm_policy_hthresh policy_hthresh;\n\tstruct list_head inexact_bins;\n\tstruct sock *nlsk;\n\tstruct sock *nlsk_stash;\n\tu32 sysctl_aevent_etime;\n\tu32 sysctl_aevent_rseqth;\n\tint sysctl_larval_drop;\n\tu32 sysctl_acq_expires;\n\tstruct ctl_table_header *sysctl_hdr;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct dst_ops xfrm4_dst_ops;\n\tstruct dst_ops xfrm6_dst_ops;\n\tspinlock_t xfrm_state_lock;\n\tseqcount_t xfrm_state_hash_generation;\n\tspinlock_t xfrm_policy_lock;\n\tstruct mutex xfrm_cfg_mutex;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct netns_ipvs;\n\nstruct mpls_route;\n\nstruct netns_mpls {\n\tint ip_ttl_propagate;\n\tint default_ttl;\n\tsize_t platform_labels;\n\tstruct mpls_route **platform_label;\n\tstruct ctl_table_header *ctl;\n};\n\nstruct can_dev_rcv_lists;\n\nstruct can_pkg_stats;\n\nstruct can_rcv_lists_stats;\n\nstruct netns_can {\n\tstruct proc_dir_entry *proc_dir;\n\tstruct proc_dir_entry *pde_stats;\n\tstruct proc_dir_entry *pde_reset_stats;\n\tstruct proc_dir_entry *pde_rcvlist_all;\n\tstruct proc_dir_entry *pde_rcvlist_fil;\n\tstruct proc_dir_entry *pde_rcvlist_inv;\n\tstruct proc_dir_entry *pde_rcvlist_sff;\n\tstruct proc_dir_entry *pde_rcvlist_eff;\n\tstruct proc_dir_entry *pde_rcvlist_err;\n\tstruct proc_dir_entry *bcmproc_dir;\n\tstruct can_dev_rcv_lists *rx_alldev_list;\n\tspinlock_t rcvlists_lock;\n\tstruct timer_list stattimer;\n\tstruct can_pkg_stats *pkg_stats;\n\tstruct can_rcv_lists_stats *rcv_lists_stats;\n\tstruct hlist_head cgw_list;\n};\n\nstruct netns_xdp {\n\tstruct mutex lock;\n\tstruct hlist_head list;\n};\n\nstruct uevent_sock;\n\nstruct net_generic;\n\nstruct net {\n\trefcount_t passive;\n\tspinlock_t rules_mod_lock;\n\tunsigned int dev_unreg_count;\n\tunsigned int dev_base_seq;\n\tint ifindex;\n\tspinlock_t nsid_lock;\n\tatomic_t fnhe_genid;\n\tstruct list_head list;\n\tstruct list_head exit_list;\n\tstruct llist_node cleanup_list;\n\tstruct key_tag *key_domain;\n\tstruct user_namespace *user_ns;\n\tstruct ucounts *ucounts;\n\tstruct idr netns_ids;\n\tstruct ns_common ns;\n\tstruct list_head dev_base_head;\n\tstruct proc_dir_entry *proc_net;\n\tstruct proc_dir_entry *proc_net_stat;\n\tstruct ctl_table_set sysctls;\n\tstruct sock *rtnl;\n\tstruct sock *genl_sock;\n\tstruct uevent_sock *uevent_sock;\n\tstruct hlist_head *dev_name_head;\n\tstruct hlist_head *dev_index_head;\n\tstruct raw_notifier_head netdev_chain;\n\tu32 hash_mix;\n\tstruct net_device *loopback_dev;\n\tstruct list_head rules_ops;\n\tstruct netns_core core;\n\tstruct netns_mib mib;\n\tstruct netns_packet packet;\n\tstruct netns_unix unx;\n\tstruct netns_nexthop nexthop;\n\tstruct netns_ipv4 ipv4;\n\tstruct netns_ipv6 ipv6;\n\tstruct netns_ieee802154_lowpan ieee802154_lowpan;\n\tstruct netns_sctp sctp;\n\tstruct netns_nf nf;\n\tstruct netns_xt xt;\n\tstruct netns_ct ct;\n\tstruct netns_nftables nft;\n\tstruct netns_nf_frag nf_frag;\n\tstruct ctl_table_header *nf_frag_frags_hdr;\n\tstruct sock *nfnl;\n\tstruct sock *nfnl_stash;\n\tstruct sk_buff_head wext_nlevents;\n\tstruct net_generic *gen;\n\tstruct netns_bpf bpf;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct netns_xfrm xfrm;\n\tatomic64_t net_cookie;\n\tstruct netns_ipvs *ipvs;\n\tstruct netns_mpls mpls;\n\tstruct netns_can can;\n\tstruct netns_xdp xdp;\n\tstruct sock *crypto_nlsk;\n\tstruct sock *diag_nlsk;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\ntypedef struct {\n\tlocal64_t v;\n} u64_stats_t;\n\nstruct bpf_insn {\n\t__u8 code;\n\t__u8 dst_reg: 4;\n\t__u8 src_reg: 4;\n\t__s16 off;\n\t__s32 imm;\n};\n\nenum bpf_map_type {\n\tBPF_MAP_TYPE_UNSPEC = 0,\n\tBPF_MAP_TYPE_HASH = 1,\n\tBPF_MAP_TYPE_ARRAY = 2,\n\tBPF_MAP_TYPE_PROG_ARRAY = 3,\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY = 4,\n\tBPF_MAP_TYPE_PERCPU_HASH = 5,\n\tBPF_MAP_TYPE_PERCPU_ARRAY = 6,\n\tBPF_MAP_TYPE_STACK_TRACE = 7,\n\tBPF_MAP_TYPE_CGROUP_ARRAY = 8,\n\tBPF_MAP_TYPE_LRU_HASH = 9,\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH = 10,\n\tBPF_MAP_TYPE_LPM_TRIE = 11,\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS = 12,\n\tBPF_MAP_TYPE_HASH_OF_MAPS = 13,\n\tBPF_MAP_TYPE_DEVMAP = 14,\n\tBPF_MAP_TYPE_SOCKMAP = 15,\n\tBPF_MAP_TYPE_CPUMAP = 16,\n\tBPF_MAP_TYPE_XSKMAP = 17,\n\tBPF_MAP_TYPE_SOCKHASH = 18,\n\tBPF_MAP_TYPE_CGROUP_STORAGE = 19,\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY = 20,\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE = 21,\n\tBPF_MAP_TYPE_QUEUE = 22,\n\tBPF_MAP_TYPE_STACK = 23,\n\tBPF_MAP_TYPE_SK_STORAGE = 24,\n\tBPF_MAP_TYPE_DEVMAP_HASH = 25,\n\tBPF_MAP_TYPE_STRUCT_OPS = 26,\n\tBPF_MAP_TYPE_RINGBUF = 27,\n\tBPF_MAP_TYPE_INODE_STORAGE = 28,\n\tBPF_MAP_TYPE_TASK_STORAGE = 29,\n};\n\nenum bpf_prog_type {\n\tBPF_PROG_TYPE_UNSPEC = 0,\n\tBPF_PROG_TYPE_SOCKET_FILTER = 1,\n\tBPF_PROG_TYPE_KPROBE = 2,\n\tBPF_PROG_TYPE_SCHED_CLS = 3,\n\tBPF_PROG_TYPE_SCHED_ACT = 4,\n\tBPF_PROG_TYPE_TRACEPOINT = 5,\n\tBPF_PROG_TYPE_XDP = 6,\n\tBPF_PROG_TYPE_PERF_EVENT = 7,\n\tBPF_PROG_TYPE_CGROUP_SKB = 8,\n\tBPF_PROG_TYPE_CGROUP_SOCK = 9,\n\tBPF_PROG_TYPE_LWT_IN = 10,\n\tBPF_PROG_TYPE_LWT_OUT = 11,\n\tBPF_PROG_TYPE_LWT_XMIT = 12,\n\tBPF_PROG_TYPE_SOCK_OPS = 13,\n\tBPF_PROG_TYPE_SK_SKB = 14,\n\tBPF_PROG_TYPE_CGROUP_DEVICE = 15,\n\tBPF_PROG_TYPE_SK_MSG = 16,\n\tBPF_PROG_TYPE_RAW_TRACEPOINT = 17,\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 18,\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL = 19,\n\tBPF_PROG_TYPE_LIRC_MODE2 = 20,\n\tBPF_PROG_TYPE_SK_REUSEPORT = 21,\n\tBPF_PROG_TYPE_FLOW_DISSECTOR = 22,\n\tBPF_PROG_TYPE_CGROUP_SYSCTL = 23,\n\tBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 24,\n\tBPF_PROG_TYPE_CGROUP_SOCKOPT = 25,\n\tBPF_PROG_TYPE_TRACING = 26,\n\tBPF_PROG_TYPE_STRUCT_OPS = 27,\n\tBPF_PROG_TYPE_EXT = 28,\n\tBPF_PROG_TYPE_LSM = 29,\n\tBPF_PROG_TYPE_SK_LOOKUP = 30,\n};\n\nenum bpf_attach_type {\n\tBPF_CGROUP_INET_INGRESS = 0,\n\tBPF_CGROUP_INET_EGRESS = 1,\n\tBPF_CGROUP_INET_SOCK_CREATE = 2,\n\tBPF_CGROUP_SOCK_OPS = 3,\n\tBPF_SK_SKB_STREAM_PARSER = 4,\n\tBPF_SK_SKB_STREAM_VERDICT = 5,\n\tBPF_CGROUP_DEVICE = 6,\n\tBPF_SK_MSG_VERDICT = 7,\n\tBPF_CGROUP_INET4_BIND = 8,\n\tBPF_CGROUP_INET6_BIND = 9,\n\tBPF_CGROUP_INET4_CONNECT = 10,\n\tBPF_CGROUP_INET6_CONNECT = 11,\n\tBPF_CGROUP_INET4_POST_BIND = 12,\n\tBPF_CGROUP_INET6_POST_BIND = 13,\n\tBPF_CGROUP_UDP4_SENDMSG = 14,\n\tBPF_CGROUP_UDP6_SENDMSG = 15,\n\tBPF_LIRC_MODE2 = 16,\n\tBPF_FLOW_DISSECTOR = 17,\n\tBPF_CGROUP_SYSCTL = 18,\n\tBPF_CGROUP_UDP4_RECVMSG = 19,\n\tBPF_CGROUP_UDP6_RECVMSG = 20,\n\tBPF_CGROUP_GETSOCKOPT = 21,\n\tBPF_CGROUP_SETSOCKOPT = 22,\n\tBPF_TRACE_RAW_TP = 23,\n\tBPF_TRACE_FENTRY = 24,\n\tBPF_TRACE_FEXIT = 25,\n\tBPF_MODIFY_RETURN = 26,\n\tBPF_LSM_MAC = 27,\n\tBPF_TRACE_ITER = 28,\n\tBPF_CGROUP_INET4_GETPEERNAME = 29,\n\tBPF_CGROUP_INET6_GETPEERNAME = 30,\n\tBPF_CGROUP_INET4_GETSOCKNAME = 31,\n\tBPF_CGROUP_INET6_GETSOCKNAME = 32,\n\tBPF_XDP_DEVMAP = 33,\n\tBPF_CGROUP_INET_SOCK_RELEASE = 34,\n\tBPF_XDP_CPUMAP = 35,\n\tBPF_SK_LOOKUP = 36,\n\tBPF_XDP = 37,\n\t__MAX_BPF_ATTACH_TYPE = 38,\n};\n\nunion bpf_attr {\n\tstruct {\n\t\t__u32 map_type;\n\t\t__u32 key_size;\n\t\t__u32 value_size;\n\t\t__u32 max_entries;\n\t\t__u32 map_flags;\n\t\t__u32 inner_map_fd;\n\t\t__u32 numa_node;\n\t\tchar map_name[16];\n\t\t__u32 map_ifindex;\n\t\t__u32 btf_fd;\n\t\t__u32 btf_key_type_id;\n\t\t__u32 btf_value_type_id;\n\t\t__u32 btf_vmlinux_value_type_id;\n\t};\n\tstruct {\n\t\t__u32 map_fd;\n\t\t__u64 key;\n\t\tunion {\n\t\t\t__u64 value;\n\t\t\t__u64 next_key;\n\t\t};\n\t\t__u64 flags;\n\t};\n\tstruct {\n\t\t__u64 in_batch;\n\t\t__u64 out_batch;\n\t\t__u64 keys;\n\t\t__u64 values;\n\t\t__u32 count;\n\t\t__u32 map_fd;\n\t\t__u64 elem_flags;\n\t\t__u64 flags;\n\t} batch;\n\tstruct {\n\t\t__u32 prog_type;\n\t\t__u32 insn_cnt;\n\t\t__u64 insns;\n\t\t__u64 license;\n\t\t__u32 log_level;\n\t\t__u32 log_size;\n\t\t__u64 log_buf;\n\t\t__u32 kern_version;\n\t\t__u32 prog_flags;\n\t\tchar prog_name[16];\n\t\t__u32 prog_ifindex;\n\t\t__u32 expected_attach_type;\n\t\t__u32 prog_btf_fd;\n\t\t__u32 func_info_rec_size;\n\t\t__u64 func_info;\n\t\t__u32 func_info_cnt;\n\t\t__u32 line_info_rec_size;\n\t\t__u64 line_info;\n\t\t__u32 line_info_cnt;\n\t\t__u32 attach_btf_id;\n\t\tunion {\n\t\t\t__u32 attach_prog_fd;\n\t\t\t__u32 attach_btf_obj_fd;\n\t\t};\n\t};\n\tstruct {\n\t\t__u64 pathname;\n\t\t__u32 bpf_fd;\n\t\t__u32 file_flags;\n\t};\n\tstruct {\n\t\t__u32 target_fd;\n\t\t__u32 attach_bpf_fd;\n\t\t__u32 attach_type;\n\t\t__u32 attach_flags;\n\t\t__u32 replace_bpf_fd;\n\t};\n\tstruct {\n\t\t__u32 prog_fd;\n\t\t__u32 retval;\n\t\t__u32 data_size_in;\n\t\t__u32 data_size_out;\n\t\t__u64 data_in;\n\t\t__u64 data_out;\n\t\t__u32 repeat;\n\t\t__u32 duration;\n\t\t__u32 ctx_size_in;\n\t\t__u32 ctx_size_out;\n\t\t__u64 ctx_in;\n\t\t__u64 ctx_out;\n\t\t__u32 flags;\n\t\t__u32 cpu;\n\t} test;\n\tstruct {\n\t\tunion {\n\t\t\t__u32 start_id;\n\t\t\t__u32 prog_id;\n\t\t\t__u32 map_id;\n\t\t\t__u32 btf_id;\n\t\t\t__u32 link_id;\n\t\t};\n\t\t__u32 next_id;\n\t\t__u32 open_flags;\n\t};\n\tstruct {\n\t\t__u32 bpf_fd;\n\t\t__u32 info_len;\n\t\t__u64 info;\n\t} info;\n\tstruct {\n\t\t__u32 target_fd;\n\t\t__u32 attach_type;\n\t\t__u32 query_flags;\n\t\t__u32 attach_flags;\n\t\t__u64 prog_ids;\n\t\t__u32 prog_cnt;\n\t} query;\n\tstruct {\n\t\t__u64 name;\n\t\t__u32 prog_fd;\n\t} raw_tracepoint;\n\tstruct {\n\t\t__u64 btf;\n\t\t__u64 btf_log_buf;\n\t\t__u32 btf_size;\n\t\t__u32 btf_log_size;\n\t\t__u32 btf_log_level;\n\t};\n\tstruct {\n\t\t__u32 pid;\n\t\t__u32 fd;\n\t\t__u32 flags;\n\t\t__u32 buf_len;\n\t\t__u64 buf;\n\t\t__u32 prog_id;\n\t\t__u32 fd_type;\n\t\t__u64 probe_offset;\n\t\t__u64 probe_addr;\n\t} task_fd_query;\n\tstruct {\n\t\t__u32 prog_fd;\n\t\tunion {\n\t\t\t__u32 target_fd;\n\t\t\t__u32 target_ifindex;\n\t\t};\n\t\t__u32 attach_type;\n\t\t__u32 flags;\n\t\tunion {\n\t\t\t__u32 target_btf_id;\n\t\t\tstruct {\n\t\t\t\t__u64 iter_info;\n\t\t\t\t__u32 iter_info_len;\n\t\t\t};\n\t\t};\n\t} link_create;\n\tstruct {\n\t\t__u32 link_fd;\n\t\t__u32 new_prog_fd;\n\t\t__u32 flags;\n\t\t__u32 old_prog_fd;\n\t} link_update;\n\tstruct {\n\t\t__u32 link_fd;\n\t} link_detach;\n\tstruct {\n\t\t__u32 type;\n\t} enable_stats;\n\tstruct {\n\t\t__u32 link_fd;\n\t\t__u32 flags;\n\t} iter_create;\n\tstruct {\n\t\t__u32 prog_fd;\n\t\t__u32 map_fd;\n\t\t__u32 flags;\n\t} prog_bind_map;\n};\n\nstruct bpf_func_info {\n\t__u32 insn_off;\n\t__u32 type_id;\n};\n\nstruct bpf_line_info {\n\t__u32 insn_off;\n\t__u32 file_name_off;\n\t__u32 line_off;\n\t__u32 line_col;\n};\n\nstruct bpf_iter_aux_info;\n\ntypedef int (*bpf_iter_init_seq_priv_t)(void *, struct bpf_iter_aux_info *);\n\nstruct bpf_map;\n\nstruct bpf_iter_aux_info {\n\tstruct bpf_map *map;\n};\n\ntypedef void (*bpf_iter_fini_seq_priv_t)(void *);\n\nstruct bpf_iter_seq_info {\n\tconst struct seq_operations *seq_ops;\n\tbpf_iter_init_seq_priv_t init_seq_private;\n\tbpf_iter_fini_seq_priv_t fini_seq_private;\n\tu32 seq_priv_size;\n};\n\nstruct btf;\n\nstruct btf_type;\n\nstruct bpf_prog_aux;\n\nstruct bpf_local_storage_map;\n\nstruct bpf_map_ops {\n\tint (*map_alloc_check)(union bpf_attr *);\n\tstruct bpf_map * (*map_alloc)(union bpf_attr *);\n\tvoid (*map_release)(struct bpf_map *, struct file *);\n\tvoid (*map_free)(struct bpf_map *);\n\tint (*map_get_next_key)(struct bpf_map *, void *, void *);\n\tvoid (*map_release_uref)(struct bpf_map *);\n\tvoid * (*map_lookup_elem_sys_only)(struct bpf_map *, void *);\n\tint (*map_lookup_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);\n\tint (*map_lookup_and_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);\n\tint (*map_update_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);\n\tint (*map_delete_batch)(struct bpf_map *, const union bpf_attr *, union bpf_attr *);\n\tvoid * (*map_lookup_elem)(struct bpf_map *, void *);\n\tint (*map_update_elem)(struct bpf_map *, void *, void *, u64);\n\tint (*map_delete_elem)(struct bpf_map *, void *);\n\tint (*map_push_elem)(struct bpf_map *, void *, u64);\n\tint (*map_pop_elem)(struct bpf_map *, void *);\n\tint (*map_peek_elem)(struct bpf_map *, void *);\n\tvoid * (*map_fd_get_ptr)(struct bpf_map *, struct file *, int);\n\tvoid (*map_fd_put_ptr)(void *);\n\tint (*map_gen_lookup)(struct bpf_map *, struct bpf_insn *);\n\tu32 (*map_fd_sys_lookup_elem)(void *);\n\tvoid (*map_seq_show_elem)(struct bpf_map *, void *, struct seq_file *);\n\tint (*map_check_btf)(const struct bpf_map *, const struct btf *, const struct btf_type *, const struct btf_type *);\n\tint (*map_poke_track)(struct bpf_map *, struct bpf_prog_aux *);\n\tvoid (*map_poke_untrack)(struct bpf_map *, struct bpf_prog_aux *);\n\tvoid (*map_poke_run)(struct bpf_map *, u32, struct bpf_prog *, struct bpf_prog *);\n\tint (*map_direct_value_addr)(const struct bpf_map *, u64 *, u32);\n\tint (*map_direct_value_meta)(const struct bpf_map *, u64, u32 *);\n\tint (*map_mmap)(struct bpf_map *, struct vm_area_struct *);\n\t__poll_t (*map_poll)(struct bpf_map *, struct file *, struct poll_table_struct *);\n\tint (*map_local_storage_charge)(struct bpf_local_storage_map *, void *, u32);\n\tvoid (*map_local_storage_uncharge)(struct bpf_local_storage_map *, void *, u32);\n\tstruct bpf_local_storage ** (*map_owner_storage_ptr)(void *);\n\tbool (*map_meta_equal)(const struct bpf_map *, const struct bpf_map *);\n\tconst char * const map_btf_name;\n\tint *map_btf_id;\n\tconst struct bpf_iter_seq_info *iter_seq_info;\n};\n\nstruct bpf_map {\n\tconst struct bpf_map_ops *ops;\n\tstruct bpf_map *inner_map_meta;\n\tvoid *security;\n\tenum bpf_map_type map_type;\n\tu32 key_size;\n\tu32 value_size;\n\tu32 max_entries;\n\tu32 map_flags;\n\tint spin_lock_off;\n\tu32 id;\n\tint numa_node;\n\tu32 btf_key_type_id;\n\tu32 btf_value_type_id;\n\tstruct btf *btf;\n\tstruct mem_cgroup *memcg;\n\tchar name[16];\n\tu32 btf_vmlinux_value_type_id;\n\tbool bypass_spec_v1;\n\tbool frozen;\n\tlong: 16;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tatomic64_t refcnt;\n\tatomic64_t usercnt;\n\tstruct work_struct work;\n\tstruct mutex freeze_mutex;\n\tu64 writecnt;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct btf_header {\n\t__u16 magic;\n\t__u8 version;\n\t__u8 flags;\n\t__u32 hdr_len;\n\t__u32 type_off;\n\t__u32 type_len;\n\t__u32 str_off;\n\t__u32 str_len;\n};\n\nstruct btf {\n\tvoid *data;\n\tstruct btf_type **types;\n\tu32 *resolved_ids;\n\tu32 *resolved_sizes;\n\tconst char *strings;\n\tvoid *nohdr_data;\n\tstruct btf_header hdr;\n\tu32 nr_types;\n\tu32 types_size;\n\tu32 data_size;\n\trefcount_t refcnt;\n\tu32 id;\n\tstruct callback_head rcu;\n\tstruct btf *base_btf;\n\tu32 start_id;\n\tu32 start_str_off;\n\tchar name[56];\n\tbool kernel_btf;\n};\n\nstruct btf_type {\n\t__u32 name_off;\n\t__u32 info;\n\tunion {\n\t\t__u32 size;\n\t\t__u32 type;\n\t};\n};\n\nstruct bpf_ksym {\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tchar name[128];\n\tstruct list_head lnode;\n\tstruct latch_tree_node tnode;\n\tbool prog;\n};\n\nstruct bpf_ctx_arg_aux;\n\nstruct bpf_trampoline;\n\nstruct bpf_jit_poke_descriptor;\n\nstruct bpf_prog_ops;\n\nstruct bpf_prog_offload;\n\nstruct bpf_func_info_aux;\n\nstruct bpf_prog_stats;\n\nstruct bpf_prog_aux {\n\tatomic64_t refcnt;\n\tu32 used_map_cnt;\n\tu32 max_ctx_offset;\n\tu32 max_pkt_offset;\n\tu32 max_tp_access;\n\tu32 stack_depth;\n\tu32 id;\n\tu32 func_cnt;\n\tu32 func_idx;\n\tu32 attach_btf_id;\n\tu32 ctx_arg_info_size;\n\tu32 max_rdonly_access;\n\tu32 max_rdwr_access;\n\tstruct btf *attach_btf;\n\tconst struct bpf_ctx_arg_aux *ctx_arg_info;\n\tstruct mutex dst_mutex;\n\tstruct bpf_prog *dst_prog;\n\tstruct bpf_trampoline *dst_trampoline;\n\tenum bpf_prog_type saved_dst_prog_type;\n\tenum bpf_attach_type saved_dst_attach_type;\n\tbool verifier_zext;\n\tbool offload_requested;\n\tbool attach_btf_trace;\n\tbool func_proto_unreliable;\n\tbool sleepable;\n\tbool tail_call_reachable;\n\tstruct hlist_node tramp_hlist;\n\tconst struct btf_type *attach_func_proto;\n\tconst char *attach_func_name;\n\tstruct bpf_prog **func;\n\tvoid *jit_data;\n\tstruct bpf_jit_poke_descriptor *poke_tab;\n\tu32 size_poke_tab;\n\tstruct bpf_ksym ksym;\n\tconst struct bpf_prog_ops *ops;\n\tstruct bpf_map **used_maps;\n\tstruct mutex used_maps_mutex;\n\tstruct bpf_prog *prog;\n\tstruct user_struct *user;\n\tu64 load_time;\n\tstruct bpf_map *cgroup_storage[2];\n\tchar name[16];\n\tvoid *security;\n\tstruct bpf_prog_offload *offload;\n\tstruct btf *btf;\n\tstruct bpf_func_info *func_info;\n\tstruct bpf_func_info_aux *func_info_aux;\n\tstruct bpf_line_info *linfo;\n\tvoid **jited_linfo;\n\tu32 func_info_cnt;\n\tu32 nr_linfo;\n\tu32 linfo_idx;\n\tu32 num_exentries;\n\tstruct exception_table_entry *extable;\n\tstruct bpf_prog_stats *stats;\n\tunion {\n\t\tstruct work_struct work;\n\t\tstruct callback_head rcu;\n\t};\n};\n\nstruct sock_filter {\n\t__u16 code;\n\t__u8 jt;\n\t__u8 jf;\n\t__u32 k;\n};\n\nstruct sock_fprog_kern;\n\nstruct bpf_prog {\n\tu16 pages;\n\tu16 jited: 1;\n\tu16 jit_requested: 1;\n\tu16 gpl_compatible: 1;\n\tu16 cb_access: 1;\n\tu16 dst_needed: 1;\n\tu16 blinded: 1;\n\tu16 is_func: 1;\n\tu16 kprobe_override: 1;\n\tu16 has_callchain_buf: 1;\n\tu16 enforce_expected_attach_type: 1;\n\tu16 call_get_stack: 1;\n\tenum bpf_prog_type type;\n\tenum bpf_attach_type expected_attach_type;\n\tu32 len;\n\tu32 jited_len;\n\tu8 tag[8];\n\tstruct bpf_prog_aux *aux;\n\tstruct sock_fprog_kern *orig_prog;\n\tunsigned int (*bpf_func)(const void *, const struct bpf_insn *);\n\tstruct sock_filter insns[0];\n\tstruct bpf_insn insnsi[0];\n};\n\nstruct bpf_offloaded_map;\n\nstruct bpf_map_dev_ops {\n\tint (*map_get_next_key)(struct bpf_offloaded_map *, void *, void *);\n\tint (*map_lookup_elem)(struct bpf_offloaded_map *, void *, void *);\n\tint (*map_update_elem)(struct bpf_offloaded_map *, void *, void *, u64);\n\tint (*map_delete_elem)(struct bpf_offloaded_map *, void *);\n};\n\nstruct bpf_offloaded_map {\n\tstruct bpf_map map;\n\tstruct net_device *netdev;\n\tconst struct bpf_map_dev_ops *dev_ops;\n\tvoid *dev_priv;\n\tstruct list_head offloads;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct net_device_stats {\n\tlong unsigned int rx_packets;\n\tlong unsigned int tx_packets;\n\tlong unsigned int rx_bytes;\n\tlong unsigned int tx_bytes;\n\tlong unsigned int rx_errors;\n\tlong unsigned int tx_errors;\n\tlong unsigned int rx_dropped;\n\tlong unsigned int tx_dropped;\n\tlong unsigned int multicast;\n\tlong unsigned int collisions;\n\tlong unsigned int rx_length_errors;\n\tlong unsigned int rx_over_errors;\n\tlong unsigned int rx_crc_errors;\n\tlong unsigned int rx_frame_errors;\n\tlong unsigned int rx_fifo_errors;\n\tlong unsigned int rx_missed_errors;\n\tlong unsigned int tx_aborted_errors;\n\tlong unsigned int tx_carrier_errors;\n\tlong unsigned int tx_fifo_errors;\n\tlong unsigned int tx_heartbeat_errors;\n\tlong unsigned int tx_window_errors;\n\tlong unsigned int rx_compressed;\n\tlong unsigned int tx_compressed;\n};\n\nstruct netdev_hw_addr_list {\n\tstruct list_head list;\n\tint count;\n};\n\nstruct tipc_bearer;\n\nstruct mpls_dev;\n\nenum rx_handler_result {\n\tRX_HANDLER_CONSUMED = 0,\n\tRX_HANDLER_ANOTHER = 1,\n\tRX_HANDLER_EXACT = 2,\n\tRX_HANDLER_PASS = 3,\n};\n\ntypedef enum rx_handler_result rx_handler_result_t;\n\ntypedef rx_handler_result_t rx_handler_func_t(struct sk_buff **);\n\nenum netdev_ml_priv_type {\n\tML_PRIV_NONE = 0,\n\tML_PRIV_CAN = 1,\n};\n\nstruct pcpu_dstats;\n\nstruct garp_port;\n\nstruct mrp_port;\n\nstruct netdev_tc_txq {\n\tu16 count;\n\tu16 offset;\n};\n\nstruct macsec_ops;\n\nstruct udp_tunnel_nic;\n\nstruct bpf_xdp_link;\n\nstruct bpf_xdp_entity {\n\tstruct bpf_prog *prog;\n\tstruct bpf_xdp_link *link;\n};\n\nstruct netdev_name_node;\n\nstruct dev_ifalias;\n\nstruct iw_handler_def;\n\nstruct iw_public_data;\n\nstruct net_device_ops;\n\nstruct ethtool_ops;\n\nstruct l3mdev_ops;\n\nstruct ndisc_ops;\n\nstruct xfrmdev_ops;\n\nstruct tlsdev_ops;\n\nstruct header_ops;\n\nstruct vlan_info;\n\nstruct dsa_port;\n\nstruct in_device;\n\nstruct inet6_dev;\n\nstruct wireless_dev;\n\nstruct wpan_dev;\n\nstruct netdev_rx_queue;\n\nstruct mini_Qdisc;\n\nstruct netdev_queue;\n\nstruct cpu_rmap;\n\nstruct Qdisc;\n\nstruct xdp_dev_bulk_queue;\n\nstruct xps_dev_maps;\n\nstruct netpoll_info;\n\nstruct pcpu_lstats;\n\nstruct pcpu_sw_netstats;\n\nstruct rtnl_link_ops;\n\nstruct dcbnl_rtnl_ops;\n\nstruct netprio_map;\n\nstruct phy_device;\n\nstruct sfp_bus;\n\nstruct udp_tunnel_nic_info;\n\nstruct net_device {\n\tchar name[16];\n\tstruct netdev_name_node *name_node;\n\tstruct dev_ifalias *ifalias;\n\tlong unsigned int mem_end;\n\tlong unsigned int mem_start;\n\tlong unsigned int base_addr;\n\tint irq;\n\tlong unsigned int state;\n\tstruct list_head dev_list;\n\tstruct list_head napi_list;\n\tstruct list_head unreg_list;\n\tstruct list_head close_list;\n\tstruct list_head ptype_all;\n\tstruct list_head ptype_specific;\n\tstruct {\n\t\tstruct list_head upper;\n\t\tstruct list_head lower;\n\t} adj_list;\n\tnetdev_features_t features;\n\tnetdev_features_t hw_features;\n\tnetdev_features_t wanted_features;\n\tnetdev_features_t vlan_features;\n\tnetdev_features_t hw_enc_features;\n\tnetdev_features_t mpls_features;\n\tnetdev_features_t gso_partial_features;\n\tint ifindex;\n\tint group;\n\tstruct net_device_stats stats;\n\tatomic_long_t rx_dropped;\n\tatomic_long_t tx_dropped;\n\tatomic_long_t rx_nohandler;\n\tatomic_t carrier_up_count;\n\tatomic_t carrier_down_count;\n\tconst struct iw_handler_def *wireless_handlers;\n\tstruct iw_public_data *wireless_data;\n\tconst struct net_device_ops *netdev_ops;\n\tconst struct ethtool_ops *ethtool_ops;\n\tconst struct l3mdev_ops *l3mdev_ops;\n\tconst struct ndisc_ops *ndisc_ops;\n\tconst struct xfrmdev_ops *xfrmdev_ops;\n\tconst struct tlsdev_ops *tlsdev_ops;\n\tconst struct header_ops *header_ops;\n\tunsigned int flags;\n\tunsigned int priv_flags;\n\tshort unsigned int gflags;\n\tshort unsigned int padded;\n\tunsigned char operstate;\n\tunsigned char link_mode;\n\tunsigned char if_port;\n\tunsigned char dma;\n\tunsigned int mtu;\n\tunsigned int min_mtu;\n\tunsigned int max_mtu;\n\tshort unsigned int type;\n\tshort unsigned int hard_header_len;\n\tunsigned char min_header_len;\n\tunsigned char name_assign_type;\n\tshort unsigned int needed_headroom;\n\tshort unsigned int needed_tailroom;\n\tunsigned char perm_addr[32];\n\tunsigned char addr_assign_type;\n\tunsigned char addr_len;\n\tunsigned char upper_level;\n\tunsigned char lower_level;\n\tshort unsigned int neigh_priv_len;\n\tshort unsigned int dev_id;\n\tshort unsigned int dev_port;\n\tspinlock_t addr_list_lock;\n\tstruct netdev_hw_addr_list uc;\n\tstruct netdev_hw_addr_list mc;\n\tstruct netdev_hw_addr_list dev_addrs;\n\tstruct kset *queues_kset;\n\tunsigned int promiscuity;\n\tunsigned int allmulti;\n\tbool uc_promisc;\n\tstruct vlan_info *vlan_info;\n\tstruct dsa_port *dsa_ptr;\n\tstruct tipc_bearer *tipc_ptr;\n\tvoid *atalk_ptr;\n\tstruct in_device *ip_ptr;\n\tstruct inet6_dev *ip6_ptr;\n\tvoid *ax25_ptr;\n\tstruct wireless_dev *ieee80211_ptr;\n\tstruct wpan_dev *ieee802154_ptr;\n\tstruct mpls_dev *mpls_ptr;\n\tunsigned char *dev_addr;\n\tstruct netdev_rx_queue *_rx;\n\tunsigned int num_rx_queues;\n\tunsigned int real_num_rx_queues;\n\tstruct bpf_prog *xdp_prog;\n\tlong unsigned int gro_flush_timeout;\n\tint napi_defer_hard_irqs;\n\trx_handler_func_t *rx_handler;\n\tvoid *rx_handler_data;\n\tstruct mini_Qdisc *miniq_ingress;\n\tstruct netdev_queue *ingress_queue;\n\tstruct nf_hook_entries *nf_hooks_ingress;\n\tunsigned char broadcast[32];\n\tstruct cpu_rmap *rx_cpu_rmap;\n\tstruct hlist_node index_hlist;\n\tstruct netdev_queue *_tx;\n\tunsigned int num_tx_queues;\n\tunsigned int real_num_tx_queues;\n\tstruct Qdisc *qdisc;\n\tunsigned int tx_queue_len;\n\tspinlock_t tx_global_lock;\n\tstruct xdp_dev_bulk_queue *xdp_bulkq;\n\tstruct xps_dev_maps *xps_cpus_map;\n\tstruct xps_dev_maps *xps_rxqs_map;\n\tstruct mini_Qdisc *miniq_egress;\n\tstruct hlist_head qdisc_hash[16];\n\tstruct timer_list watchdog_timer;\n\tint watchdog_timeo;\n\tu32 proto_down_reason;\n\tstruct list_head todo_list;\n\tint *pcpu_refcnt;\n\tstruct list_head link_watch_list;\n\tenum {\n\t\tNETREG_UNINITIALIZED = 0,\n\t\tNETREG_REGISTERED = 1,\n\t\tNETREG_UNREGISTERING = 2,\n\t\tNETREG_UNREGISTERED = 3,\n\t\tNETREG_RELEASED = 4,\n\t\tNETREG_DUMMY = 5,\n\t} reg_state: 8;\n\tbool dismantle;\n\tenum {\n\t\tRTNL_LINK_INITIALIZED = 0,\n\t\tRTNL_LINK_INITIALIZING = 1,\n\t} rtnl_link_state: 16;\n\tbool needs_free_netdev;\n\tvoid (*priv_destructor)(struct net_device *);\n\tstruct netpoll_info *npinfo;\n\tpossible_net_t nd_net;\n\tvoid *ml_priv;\n\tenum netdev_ml_priv_type ml_priv_type;\n\tunion {\n\t\tstruct pcpu_lstats *lstats;\n\t\tstruct pcpu_sw_netstats *tstats;\n\t\tstruct pcpu_dstats *dstats;\n\t};\n\tstruct garp_port *garp_port;\n\tstruct mrp_port *mrp_port;\n\tstruct device dev;\n\tconst struct attribute_group *sysfs_groups[4];\n\tconst struct attribute_group *sysfs_rx_queue_group;\n\tconst struct rtnl_link_ops *rtnl_link_ops;\n\tunsigned int gso_max_size;\n\tu16 gso_max_segs;\n\tconst struct dcbnl_rtnl_ops *dcbnl_ops;\n\ts16 num_tc;\n\tstruct netdev_tc_txq tc_to_txq[16];\n\tu8 prio_tc_map[16];\n\tunsigned int fcoe_ddp_xid;\n\tstruct netprio_map *priomap;\n\tstruct phy_device *phydev;\n\tstruct sfp_bus *sfp_bus;\n\tstruct lock_class_key *qdisc_tx_busylock;\n\tstruct lock_class_key *qdisc_running_key;\n\tbool proto_down;\n\tunsigned int wol_enabled: 1;\n\tstruct list_head net_notifier_list;\n\tconst struct macsec_ops *macsec_ops;\n\tconst struct udp_tunnel_nic_info *udp_tunnel_nic_info;\n\tstruct udp_tunnel_nic *udp_tunnel_nic;\n\tstruct bpf_xdp_entity xdp_state[3];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum bpf_reg_type {\n\tNOT_INIT = 0,\n\tSCALAR_VALUE = 1,\n\tPTR_TO_CTX = 2,\n\tCONST_PTR_TO_MAP = 3,\n\tPTR_TO_MAP_VALUE = 4,\n\tPTR_TO_MAP_VALUE_OR_NULL = 5,\n\tPTR_TO_STACK = 6,\n\tPTR_TO_PACKET_META = 7,\n\tPTR_TO_PACKET = 8,\n\tPTR_TO_PACKET_END = 9,\n\tPTR_TO_FLOW_KEYS = 10,\n\tPTR_TO_SOCKET = 11,\n\tPTR_TO_SOCKET_OR_NULL = 12,\n\tPTR_TO_SOCK_COMMON = 13,\n\tPTR_TO_SOCK_COMMON_OR_NULL = 14,\n\tPTR_TO_TCP_SOCK = 15,\n\tPTR_TO_TCP_SOCK_OR_NULL = 16,\n\tPTR_TO_TP_BUFFER = 17,\n\tPTR_TO_XDP_SOCK = 18,\n\tPTR_TO_BTF_ID = 19,\n\tPTR_TO_BTF_ID_OR_NULL = 20,\n\tPTR_TO_MEM = 21,\n\tPTR_TO_MEM_OR_NULL = 22,\n\tPTR_TO_RDONLY_BUF = 23,\n\tPTR_TO_RDONLY_BUF_OR_NULL = 24,\n\tPTR_TO_RDWR_BUF = 25,\n\tPTR_TO_RDWR_BUF_OR_NULL = 26,\n\tPTR_TO_PERCPU_BTF_ID = 27,\n};\n\nstruct bpf_prog_ops {\n\tint (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);\n};\n\nstruct bpf_offload_dev;\n\nstruct bpf_prog_offload {\n\tstruct bpf_prog *prog;\n\tstruct net_device *netdev;\n\tstruct bpf_offload_dev *offdev;\n\tvoid *dev_priv;\n\tstruct list_head offloads;\n\tbool dev_state;\n\tbool opt_failed;\n\tvoid *jited_image;\n\tu32 jited_len;\n};\n\nstruct bpf_prog_stats {\n\tu64 cnt;\n\tu64 nsecs;\n\tstruct u64_stats_sync syncp;\n};\n\nstruct btf_func_model {\n\tu8 ret_size;\n\tu8 nr_args;\n\tu8 arg_size[12];\n};\n\nstruct bpf_tramp_image {\n\tvoid *image;\n\tstruct bpf_ksym ksym;\n\tstruct percpu_ref pcref;\n\tvoid *ip_after_call;\n\tvoid *ip_epilogue;\n\tunion {\n\t\tstruct callback_head rcu;\n\t\tstruct work_struct work;\n\t};\n};\n\nstruct bpf_trampoline {\n\tstruct hlist_node hlist;\n\tstruct mutex mutex;\n\trefcount_t refcnt;\n\tu64 key;\n\tstruct {\n\t\tstruct btf_func_model model;\n\t\tvoid *addr;\n\t\tbool ftrace_managed;\n\t} func;\n\tstruct bpf_prog *extension_prog;\n\tstruct hlist_head progs_hlist[3];\n\tint progs_cnt[3];\n\tstruct bpf_tramp_image *cur_image;\n\tu64 selector;\n\tstruct module *mod;\n};\n\nstruct bpf_func_info_aux {\n\tu16 linkage;\n\tbool unreliable;\n};\n\nstruct bpf_jit_poke_descriptor {\n\tvoid *tailcall_target;\n\tvoid *tailcall_bypass;\n\tvoid *bypass_addr;\n\tunion {\n\t\tstruct {\n\t\t\tstruct bpf_map *map;\n\t\t\tu32 key;\n\t\t} tail_call;\n\t};\n\tbool tailcall_target_stable;\n\tu8 adj_off;\n\tu16 reason;\n\tu32 insn_idx;\n};\n\nstruct bpf_ctx_arg_aux {\n\tu32 offset;\n\tenum bpf_reg_type reg_type;\n\tu32 btf_id;\n};\n\ntypedef unsigned int sk_buff_data_t;\n\nstruct skb_ext;\n\nstruct sk_buff {\n\tunion {\n\t\tstruct {\n\t\t\tstruct sk_buff *next;\n\t\t\tstruct sk_buff *prev;\n\t\t\tunion {\n\t\t\t\tstruct net_device *dev;\n\t\t\t\tlong unsigned int dev_scratch;\n\t\t\t};\n\t\t};\n\t\tstruct rb_node rbnode;\n\t\tstruct list_head list;\n\t};\n\tunion {\n\t\tstruct sock *sk;\n\t\tint ip_defrag_offset;\n\t};\n\tunion {\n\t\tktime_t tstamp;\n\t\tu64 skb_mstamp_ns;\n\t};\n\tchar cb[48];\n\tunion {\n\t\tstruct {\n\t\t\tlong unsigned int _skb_refdst;\n\t\t\tvoid (*destructor)(struct sk_buff *);\n\t\t};\n\t\tstruct list_head tcp_tsorted_anchor;\n\t};\n\tlong unsigned int _nfct;\n\tunsigned int len;\n\tunsigned int data_len;\n\t__u16 mac_len;\n\t__u16 hdr_len;\n\t__u16 queue_mapping;\n\t__u8 __cloned_offset[0];\n\t__u8 cloned: 1;\n\t__u8 nohdr: 1;\n\t__u8 fclone: 2;\n\t__u8 peeked: 1;\n\t__u8 head_frag: 1;\n\t__u8 pfmemalloc: 1;\n\t__u8 active_extensions;\n\t__u32 headers_start[0];\n\t__u8 __pkt_type_offset[0];\n\t__u8 pkt_type: 3;\n\t__u8 ignore_df: 1;\n\t__u8 nf_trace: 1;\n\t__u8 ip_summed: 2;\n\t__u8 ooo_okay: 1;\n\t__u8 l4_hash: 1;\n\t__u8 sw_hash: 1;\n\t__u8 wifi_acked_valid: 1;\n\t__u8 wifi_acked: 1;\n\t__u8 no_fcs: 1;\n\t__u8 encapsulation: 1;\n\t__u8 encap_hdr_csum: 1;\n\t__u8 csum_valid: 1;\n\t__u8 __pkt_vlan_present_offset[0];\n\t__u8 vlan_present: 1;\n\t__u8 csum_complete_sw: 1;\n\t__u8 csum_level: 2;\n\t__u8 csum_not_inet: 1;\n\t__u8 dst_pending_confirm: 1;\n\t__u8 ndisc_nodetype: 2;\n\t__u8 ipvs_property: 1;\n\t__u8 inner_protocol_type: 1;\n\t__u8 remcsum_offload: 1;\n\t__u8 offload_fwd_mark: 1;\n\t__u8 offload_l3_fwd_mark: 1;\n\t__u8 tc_skip_classify: 1;\n\t__u8 tc_at_ingress: 1;\n\t__u8 redirected: 1;\n\t__u8 from_ingress: 1;\n\t__u8 decrypted: 1;\n\t__u16 tc_index;\n\tunion {\n\t\t__wsum csum;\n\t\tstruct {\n\t\t\t__u16 csum_start;\n\t\t\t__u16 csum_offset;\n\t\t};\n\t};\n\t__u32 priority;\n\tint skb_iif;\n\t__u32 hash;\n\t__be16 vlan_proto;\n\t__u16 vlan_tci;\n\tunion {\n\t\tunsigned int napi_id;\n\t\tunsigned int sender_cpu;\n\t};\n\t__u32 secmark;\n\tunion {\n\t\t__u32 mark;\n\t\t__u32 reserved_tailroom;\n\t};\n\tunion {\n\t\t__be16 inner_protocol;\n\t\t__u8 inner_ipproto;\n\t};\n\t__u16 inner_transport_header;\n\t__u16 inner_network_header;\n\t__u16 inner_mac_header;\n\t__be16 protocol;\n\t__u16 transport_header;\n\t__u16 network_header;\n\t__u16 mac_header;\n\t__u32 headers_end[0];\n\tsk_buff_data_t tail;\n\tsk_buff_data_t end;\n\tunsigned char *head;\n\tunsigned char *data;\n\tunsigned int truesize;\n\trefcount_t users;\n\tstruct skb_ext *extensions;\n};\n\nstruct scatterlist {\n\tlong unsigned int page_link;\n\tunsigned int offset;\n\tunsigned int length;\n\tdma_addr_t dma_address;\n\tunsigned int dma_length;\n};\n\nenum {\n\tRoot_NFS = 255,\n\tRoot_CIFS = 254,\n\tRoot_RAM0 = 1048576,\n\tRoot_RAM1 = 1048577,\n\tRoot_FD0 = 2097152,\n\tRoot_HDA1 = 3145729,\n\tRoot_HDA2 = 3145730,\n\tRoot_SDA1 = 8388609,\n\tRoot_SDA2 = 8388610,\n\tRoot_HDC1 = 23068673,\n\tRoot_SR0 = 11534336,\n};\n\nstruct flowi_tunnel {\n\t__be64 tun_id;\n};\n\nstruct flowi_common {\n\tint flowic_oif;\n\tint flowic_iif;\n\t__u32 flowic_mark;\n\t__u8 flowic_tos;\n\t__u8 flowic_scope;\n\t__u8 flowic_proto;\n\t__u8 flowic_flags;\n\t__u32 flowic_secid;\n\tkuid_t flowic_uid;\n\tstruct flowi_tunnel flowic_tun_key;\n\t__u32 flowic_multipath_hash;\n};\n\nunion flowi_uli {\n\tstruct {\n\t\t__be16 dport;\n\t\t__be16 sport;\n\t} ports;\n\tstruct {\n\t\t__u8 type;\n\t\t__u8 code;\n\t} icmpt;\n\tstruct {\n\t\t__le16 dport;\n\t\t__le16 sport;\n\t} dnports;\n\t__be32 spi;\n\t__be32 gre_key;\n\tstruct {\n\t\t__u8 type;\n\t} mht;\n};\n\nstruct flowi4 {\n\tstruct flowi_common __fl_common;\n\t__be32 saddr;\n\t__be32 daddr;\n\tunion flowi_uli uli;\n};\n\nstruct flowi6 {\n\tstruct flowi_common __fl_common;\n\tstruct in6_addr daddr;\n\tstruct in6_addr saddr;\n\t__be32 flowlabel;\n\tunion flowi_uli uli;\n\t__u32 mp_hash;\n};\n\nstruct flowidn {\n\tstruct flowi_common __fl_common;\n\t__le16 daddr;\n\t__le16 saddr;\n\tunion flowi_uli uli;\n};\n\nstruct flowi {\n\tunion {\n\t\tstruct flowi_common __fl_common;\n\t\tstruct flowi4 ip4;\n\t\tstruct flowi6 ip6;\n\t\tstruct flowidn dn;\n\t} u;\n};\n\nstruct ipstats_mib {\n\tu64 mibs[37];\n\tstruct u64_stats_sync syncp;\n};\n\nstruct icmp_mib {\n\tlong unsigned int mibs[28];\n};\n\nstruct icmpmsg_mib {\n\tatomic_long_t mibs[512];\n};\n\nstruct icmpv6_mib {\n\tlong unsigned int mibs[6];\n};\n\nstruct icmpv6_mib_device {\n\tatomic_long_t mibs[6];\n};\n\nstruct icmpv6msg_mib {\n\tatomic_long_t mibs[512];\n};\n\nstruct icmpv6msg_mib_device {\n\tatomic_long_t mibs[512];\n};\n\nstruct tcp_mib {\n\tlong unsigned int mibs[16];\n};\n\nstruct udp_mib {\n\tlong unsigned int mibs[10];\n};\n\nstruct linux_mib {\n\tlong unsigned int mibs[124];\n};\n\nstruct linux_xfrm_mib {\n\tlong unsigned int mibs[29];\n};\n\nstruct linux_tls_mib {\n\tlong unsigned int mibs[11];\n};\n\nstruct inet_frags;\n\nstruct fqdir {\n\tlong int high_thresh;\n\tlong int low_thresh;\n\tint timeout;\n\tint max_dist;\n\tstruct inet_frags *f;\n\tstruct net *net;\n\tbool dead;\n\tlong: 56;\n\tlong: 64;\n\tlong: 64;\n\tstruct rhashtable rhashtable;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tatomic_long_t mem;\n\tstruct work_struct destroy_work;\n\tstruct llist_node free_list;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct inet_frag_queue;\n\nstruct inet_frags {\n\tunsigned int qsize;\n\tvoid (*constructor)(struct inet_frag_queue *, const void *);\n\tvoid (*destructor)(struct inet_frag_queue *);\n\tvoid (*frag_expire)(struct timer_list *);\n\tstruct kmem_cache *frags_cachep;\n\tconst char *frags_cache_name;\n\tstruct rhashtable_params rhash_params;\n\trefcount_t refcnt;\n\tstruct completion completion;\n};\n\nstruct frag_v4_compare_key {\n\t__be32 saddr;\n\t__be32 daddr;\n\tu32 user;\n\tu32 vif;\n\t__be16 id;\n\tu16 protocol;\n};\n\nstruct frag_v6_compare_key {\n\tstruct in6_addr saddr;\n\tstruct in6_addr daddr;\n\tu32 user;\n\t__be32 id;\n\tu32 iif;\n};\n\nstruct inet_frag_queue {\n\tstruct rhash_head node;\n\tunion {\n\t\tstruct frag_v4_compare_key v4;\n\t\tstruct frag_v6_compare_key v6;\n\t} key;\n\tstruct timer_list timer;\n\tspinlock_t lock;\n\trefcount_t refcnt;\n\tstruct rb_root rb_fragments;\n\tstruct sk_buff *fragments_tail;\n\tstruct sk_buff *last_run_head;\n\tktime_t stamp;\n\tint len;\n\tint meat;\n\t__u8 flags;\n\tu16 max_size;\n\tstruct fqdir *fqdir;\n\tstruct callback_head rcu;\n};\n\nstruct fib_rule;\n\nstruct fib_lookup_arg;\n\nstruct fib_rule_hdr;\n\nstruct nlattr;\n\nstruct netlink_ext_ack;\n\nstruct nla_policy;\n\nstruct fib_rules_ops {\n\tint family;\n\tstruct list_head list;\n\tint rule_size;\n\tint addr_size;\n\tint unresolved_rules;\n\tint nr_goto_rules;\n\tunsigned int fib_rules_seq;\n\tint (*action)(struct fib_rule *, struct flowi *, int, struct fib_lookup_arg *);\n\tbool (*suppress)(struct fib_rule *, struct fib_lookup_arg *);\n\tint (*match)(struct fib_rule *, struct flowi *, int);\n\tint (*configure)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *, struct nlattr **, struct netlink_ext_ack *);\n\tint (*delete)(struct fib_rule *);\n\tint (*compare)(struct fib_rule *, struct fib_rule_hdr *, struct nlattr **);\n\tint (*fill)(struct fib_rule *, struct sk_buff *, struct fib_rule_hdr *);\n\tsize_t (*nlmsg_payload)(struct fib_rule *);\n\tvoid (*flush_cache)(struct fib_rules_ops *);\n\tint nlgroup;\n\tconst struct nla_policy *policy;\n\tstruct list_head rules_list;\n\tstruct module *owner;\n\tstruct net *fro_net;\n\tstruct callback_head rcu;\n};\n\nenum tcp_ca_event {\n\tCA_EVENT_TX_START = 0,\n\tCA_EVENT_CWND_RESTART = 1,\n\tCA_EVENT_COMPLETE_CWR = 2,\n\tCA_EVENT_LOSS = 3,\n\tCA_EVENT_ECN_NO_CE = 4,\n\tCA_EVENT_ECN_IS_CE = 5,\n};\n\nstruct ack_sample;\n\nstruct rate_sample;\n\nunion tcp_cc_info;\n\nstruct tcp_congestion_ops {\n\tstruct list_head list;\n\tu32 key;\n\tu32 flags;\n\tvoid (*init)(struct sock *);\n\tvoid (*release)(struct sock *);\n\tu32 (*ssthresh)(struct sock *);\n\tvoid (*cong_avoid)(struct sock *, u32, u32);\n\tvoid (*set_state)(struct sock *, u8);\n\tvoid (*cwnd_event)(struct sock *, enum tcp_ca_event);\n\tvoid (*in_ack_event)(struct sock *, u32);\n\tu32 (*undo_cwnd)(struct sock *);\n\tvoid (*pkts_acked)(struct sock *, const struct ack_sample *);\n\tu32 (*min_tso_segs)(struct sock *);\n\tu32 (*sndbuf_expand)(struct sock *);\n\tvoid (*cong_control)(struct sock *, const struct rate_sample *);\n\tsize_t (*get_info)(struct sock *, u32, int *, union tcp_cc_info *);\n\tchar name[16];\n\tstruct module *owner;\n};\n\nstruct fib_notifier_ops {\n\tint family;\n\tstruct list_head list;\n\tunsigned int (*fib_seq_read)(struct net *);\n\tint (*fib_dump)(struct net *, struct notifier_block *, struct netlink_ext_ack *);\n\tstruct module *owner;\n\tstruct callback_head rcu;\n};\n\nstruct xfrm_state;\n\nstruct lwtunnel_state;\n\nstruct dst_entry {\n\tstruct net_device *dev;\n\tstruct dst_ops *ops;\n\tlong unsigned int _metrics;\n\tlong unsigned int expires;\n\tstruct xfrm_state *xfrm;\n\tint (*input)(struct sk_buff *);\n\tint (*output)(struct net *, struct sock *, struct sk_buff *);\n\tshort unsigned int flags;\n\tshort int obsolete;\n\tshort unsigned int header_len;\n\tshort unsigned int trailer_len;\n\tatomic_t __refcnt;\n\tint __use;\n\tlong unsigned int lastuse;\n\tstruct lwtunnel_state *lwtstate;\n\tstruct callback_head callback_head;\n\tshort int error;\n\tshort int __pad;\n\t__u32 tclassid;\n};\n\nstruct hh_cache {\n\tunsigned int hh_len;\n\tseqlock_t hh_lock;\n\tlong unsigned int hh_data[16];\n};\n\nstruct neigh_table;\n\nstruct neigh_parms;\n\nstruct neigh_ops;\n\nstruct neighbour {\n\tstruct neighbour *next;\n\tstruct neigh_table *tbl;\n\tstruct neigh_parms *parms;\n\tlong unsigned int confirmed;\n\tlong unsigned int updated;\n\trwlock_t lock;\n\trefcount_t refcnt;\n\tunsigned int arp_queue_len_bytes;\n\tstruct sk_buff_head arp_queue;\n\tstruct timer_list timer;\n\tlong unsigned int used;\n\tatomic_t probes;\n\t__u8 flags;\n\t__u8 nud_state;\n\t__u8 type;\n\t__u8 dead;\n\tu8 protocol;\n\tseqlock_t ha_lock;\n\tint: 32;\n\tunsigned char ha[32];\n\tstruct hh_cache hh;\n\tint (*output)(struct neighbour *, struct sk_buff *);\n\tconst struct neigh_ops *ops;\n\tstruct list_head gc_list;\n\tstruct callback_head rcu;\n\tstruct net_device *dev;\n\tu8 primary_key[0];\n};\n\nstruct ipv6_stable_secret {\n\tbool initialized;\n\tstruct in6_addr secret;\n};\n\nstruct ipv6_devconf {\n\t__s32 forwarding;\n\t__s32 hop_limit;\n\t__s32 mtu6;\n\t__s32 accept_ra;\n\t__s32 accept_redirects;\n\t__s32 autoconf;\n\t__s32 dad_transmits;\n\t__s32 rtr_solicits;\n\t__s32 rtr_solicit_interval;\n\t__s32 rtr_solicit_max_interval;\n\t__s32 rtr_solicit_delay;\n\t__s32 force_mld_version;\n\t__s32 mldv1_unsolicited_report_interval;\n\t__s32 mldv2_unsolicited_report_interval;\n\t__s32 use_tempaddr;\n\t__s32 temp_valid_lft;\n\t__s32 temp_prefered_lft;\n\t__s32 regen_max_retry;\n\t__s32 max_desync_factor;\n\t__s32 max_addresses;\n\t__s32 accept_ra_defrtr;\n\t__s32 accept_ra_min_hop_limit;\n\t__s32 accept_ra_pinfo;\n\t__s32 ignore_routes_with_linkdown;\n\t__s32 accept_ra_rtr_pref;\n\t__s32 rtr_probe_interval;\n\t__s32 accept_ra_rt_info_min_plen;\n\t__s32 accept_ra_rt_info_max_plen;\n\t__s32 proxy_ndp;\n\t__s32 accept_source_route;\n\t__s32 accept_ra_from_local;\n\t__s32 optimistic_dad;\n\t__s32 use_optimistic;\n\t__s32 mc_forwarding;\n\t__s32 disable_ipv6;\n\t__s32 drop_unicast_in_l2_multicast;\n\t__s32 accept_dad;\n\t__s32 force_tllao;\n\t__s32 ndisc_notify;\n\t__s32 suppress_frag_ndisc;\n\t__s32 accept_ra_mtu;\n\t__s32 drop_unsolicited_na;\n\tstruct ipv6_stable_secret stable_secret;\n\t__s32 use_oif_addrs_only;\n\t__s32 keep_addr_on_down;\n\t__s32 seg6_enabled;\n\t__s32 seg6_require_hmac;\n\t__u32 enhanced_dad;\n\t__u32 addr_gen_mode;\n\t__s32 disable_policy;\n\t__s32 ndisc_tclass;\n\t__s32 rpl_seg_enabled;\n\tstruct ctl_table_header *sysctl_header;\n};\n\nstruct nf_queue_entry;\n\nstruct nf_queue_handler {\n\tint (*outfn)(struct nf_queue_entry *, unsigned int);\n\tvoid (*nf_hook_drop)(struct net *);\n};\n\nenum nf_log_type {\n\tNF_LOG_TYPE_LOG = 0,\n\tNF_LOG_TYPE_ULOG = 1,\n\tNF_LOG_TYPE_MAX = 2,\n};\n\ntypedef u8 u_int8_t;\n\nstruct nf_loginfo;\n\ntypedef void nf_logfn(struct net *, u_int8_t, unsigned int, const struct sk_buff *, const struct net_device *, const struct net_device *, const struct nf_loginfo *, const char *);\n\nstruct nf_logger {\n\tchar *name;\n\tenum nf_log_type type;\n\tnf_logfn *logfn;\n\tstruct module *me;\n};\n\nstruct hlist_nulls_head {\n\tstruct hlist_nulls_node *first;\n};\n\nstruct ip_conntrack_stat {\n\tunsigned int found;\n\tunsigned int invalid;\n\tunsigned int insert;\n\tunsigned int insert_failed;\n\tunsigned int clash_resolve;\n\tunsigned int drop;\n\tunsigned int early_drop;\n\tunsigned int error;\n\tunsigned int expect_new;\n\tunsigned int expect_create;\n\tunsigned int expect_delete;\n\tunsigned int search_restart;\n};\n\nstruct ct_pcpu {\n\tspinlock_t lock;\n\tstruct hlist_nulls_head unconfirmed;\n\tstruct hlist_nulls_head dying;\n};\n\ntypedef struct {\n\tunion {\n\t\tvoid *kernel;\n\t\tvoid *user;\n\t};\n\tbool is_kernel: 1;\n} sockptr_t;\n\ntypedef enum {\n\tSS_FREE = 0,\n\tSS_UNCONNECTED = 1,\n\tSS_CONNECTING = 2,\n\tSS_CONNECTED = 3,\n\tSS_DISCONNECTING = 4,\n} socket_state;\n\nstruct socket_wq {\n\twait_queue_head_t wait;\n\tstruct fasync_struct *fasync_list;\n\tlong unsigned int flags;\n\tstruct callback_head rcu;\n\tlong: 64;\n};\n\nstruct proto_ops;\n\nstruct socket {\n\tsocket_state state;\n\tshort int type;\n\tlong unsigned int flags;\n\tstruct file *file;\n\tstruct sock *sk;\n\tconst struct proto_ops *ops;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct socket_wq wq;\n};\n\ntypedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, unsigned int, size_t);\n\nstruct proto_ops {\n\tint family;\n\tunsigned int flags;\n\tstruct module *owner;\n\tint (*release)(struct socket *);\n\tint (*bind)(struct socket *, struct sockaddr *, int);\n\tint (*connect)(struct socket *, struct sockaddr *, int, int);\n\tint (*socketpair)(struct socket *, struct socket *);\n\tint (*accept)(struct socket *, struct socket *, int, bool);\n\tint (*getname)(struct socket *, struct sockaddr *, int);\n\t__poll_t (*poll)(struct file *, struct socket *, struct poll_table_struct *);\n\tint (*ioctl)(struct socket *, unsigned int, long unsigned int);\n\tint (*compat_ioctl)(struct socket *, unsigned int, long unsigned int);\n\tint (*gettstamp)(struct socket *, void *, bool, bool);\n\tint (*listen)(struct socket *, int);\n\tint (*shutdown)(struct socket *, int);\n\tint (*setsockopt)(struct socket *, int, int, sockptr_t, unsigned int);\n\tint (*getsockopt)(struct socket *, int, int, char *, int *);\n\tvoid (*show_fdinfo)(struct seq_file *, struct socket *);\n\tint (*sendmsg)(struct socket *, struct msghdr *, size_t);\n\tint (*recvmsg)(struct socket *, struct msghdr *, size_t, int);\n\tint (*mmap)(struct file *, struct socket *, struct vm_area_struct *);\n\tssize_t (*sendpage)(struct socket *, struct page *, int, size_t, int);\n\tssize_t (*splice_read)(struct socket *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);\n\tint (*set_peek_off)(struct sock *, int);\n\tint (*peek_len)(struct socket *);\n\tint (*read_sock)(struct sock *, read_descriptor_t *, sk_read_actor_t);\n\tint (*sendpage_locked)(struct sock *, struct page *, int, size_t, int);\n\tint (*sendmsg_locked)(struct sock *, struct msghdr *, size_t);\n\tint (*set_rcvlowat)(struct sock *, int);\n};\n\nstruct pipe_buf_operations;\n\nstruct pipe_buffer {\n\tstruct page *page;\n\tunsigned int offset;\n\tunsigned int len;\n\tconst struct pipe_buf_operations *ops;\n\tunsigned int flags;\n\tlong unsigned int private;\n};\n\nstruct pipe_buf_operations {\n\tint (*confirm)(struct pipe_inode_info *, struct pipe_buffer *);\n\tvoid (*release)(struct pipe_inode_info *, struct pipe_buffer *);\n\tbool (*try_steal)(struct pipe_inode_info *, struct pipe_buffer *);\n\tbool (*get)(struct pipe_inode_info *, struct pipe_buffer *);\n};\n\nstruct skb_ext {\n\trefcount_t refcnt;\n\tu8 offset[4];\n\tu8 chunks;\n\tlong: 56;\n\tchar data[0];\n};\n\nstruct dql {\n\tunsigned int num_queued;\n\tunsigned int adj_limit;\n\tunsigned int last_obj_cnt;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tunsigned int limit;\n\tunsigned int num_completed;\n\tunsigned int prev_ovlimit;\n\tunsigned int prev_num_queued;\n\tunsigned int prev_last_obj_cnt;\n\tunsigned int lowest_slack;\n\tlong unsigned int slack_start_time;\n\tunsigned int max_limit;\n\tunsigned int min_limit;\n\tunsigned int slack_hold_time;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct ieee_ets {\n\t__u8 willing;\n\t__u8 ets_cap;\n\t__u8 cbs;\n\t__u8 tc_tx_bw[8];\n\t__u8 tc_rx_bw[8];\n\t__u8 tc_tsa[8];\n\t__u8 prio_tc[8];\n\t__u8 tc_reco_bw[8];\n\t__u8 tc_reco_tsa[8];\n\t__u8 reco_prio_tc[8];\n};\n\nstruct ieee_maxrate {\n\t__u64 tc_maxrate[8];\n};\n\nstruct ieee_qcn {\n\t__u8 rpg_enable[8];\n\t__u32 rppp_max_rps[8];\n\t__u32 rpg_time_reset[8];\n\t__u32 rpg_byte_reset[8];\n\t__u32 rpg_threshold[8];\n\t__u32 rpg_max_rate[8];\n\t__u32 rpg_ai_rate[8];\n\t__u32 rpg_hai_rate[8];\n\t__u32 rpg_gd[8];\n\t__u32 rpg_min_dec_fac[8];\n\t__u32 rpg_min_rate[8];\n\t__u32 cndd_state_machine[8];\n};\n\nstruct ieee_qcn_stats {\n\t__u64 rppp_rp_centiseconds[8];\n\t__u32 rppp_created_rps[8];\n};\n\nstruct ieee_pfc {\n\t__u8 pfc_cap;\n\t__u8 pfc_en;\n\t__u8 mbc;\n\t__u16 delay;\n\t__u64 requests[8];\n\t__u64 indications[8];\n};\n\nstruct dcbnl_buffer {\n\t__u8 prio2buffer[8];\n\t__u32 buffer_size[8];\n\t__u32 total_size;\n};\n\nstruct cee_pg {\n\t__u8 willing;\n\t__u8 error;\n\t__u8 pg_en;\n\t__u8 tcs_supported;\n\t__u8 pg_bw[8];\n\t__u8 prio_pg[8];\n};\n\nstruct cee_pfc {\n\t__u8 willing;\n\t__u8 error;\n\t__u8 pfc_en;\n\t__u8 tcs_supported;\n};\n\nstruct dcb_app {\n\t__u8 selector;\n\t__u8 priority;\n\t__u16 protocol;\n};\n\nstruct dcb_peer_app_info {\n\t__u8 willing;\n\t__u8 error;\n};\n\nstruct dcbnl_rtnl_ops {\n\tint (*ieee_getets)(struct net_device *, struct ieee_ets *);\n\tint (*ieee_setets)(struct net_device *, struct ieee_ets *);\n\tint (*ieee_getmaxrate)(struct net_device *, struct ieee_maxrate *);\n\tint (*ieee_setmaxrate)(struct net_device *, struct ieee_maxrate *);\n\tint (*ieee_getqcn)(struct net_device *, struct ieee_qcn *);\n\tint (*ieee_setqcn)(struct net_device *, struct ieee_qcn *);\n\tint (*ieee_getqcnstats)(struct net_device *, struct ieee_qcn_stats *);\n\tint (*ieee_getpfc)(struct net_device *, struct ieee_pfc *);\n\tint (*ieee_setpfc)(struct net_device *, struct ieee_pfc *);\n\tint (*ieee_getapp)(struct net_device *, struct dcb_app *);\n\tint (*ieee_setapp)(struct net_device *, struct dcb_app *);\n\tint (*ieee_delapp)(struct net_device *, struct dcb_app *);\n\tint (*ieee_peer_getets)(struct net_device *, struct ieee_ets *);\n\tint (*ieee_peer_getpfc)(struct net_device *, struct ieee_pfc *);\n\tu8 (*getstate)(struct net_device *);\n\tu8 (*setstate)(struct net_device *, u8);\n\tvoid (*getpermhwaddr)(struct net_device *, u8 *);\n\tvoid (*setpgtccfgtx)(struct net_device *, int, u8, u8, u8, u8);\n\tvoid (*setpgbwgcfgtx)(struct net_device *, int, u8);\n\tvoid (*setpgtccfgrx)(struct net_device *, int, u8, u8, u8, u8);\n\tvoid (*setpgbwgcfgrx)(struct net_device *, int, u8);\n\tvoid (*getpgtccfgtx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);\n\tvoid (*getpgbwgcfgtx)(struct net_device *, int, u8 *);\n\tvoid (*getpgtccfgrx)(struct net_device *, int, u8 *, u8 *, u8 *, u8 *);\n\tvoid (*getpgbwgcfgrx)(struct net_device *, int, u8 *);\n\tvoid (*setpfccfg)(struct net_device *, int, u8);\n\tvoid (*getpfccfg)(struct net_device *, int, u8 *);\n\tu8 (*setall)(struct net_device *);\n\tu8 (*getcap)(struct net_device *, int, u8 *);\n\tint (*getnumtcs)(struct net_device *, int, u8 *);\n\tint (*setnumtcs)(struct net_device *, int, u8);\n\tu8 (*getpfcstate)(struct net_device *);\n\tvoid (*setpfcstate)(struct net_device *, u8);\n\tvoid (*getbcncfg)(struct net_device *, int, u32 *);\n\tvoid (*setbcncfg)(struct net_device *, int, u32);\n\tvoid (*getbcnrp)(struct net_device *, int, u8 *);\n\tvoid (*setbcnrp)(struct net_device *, int, u8);\n\tint (*setapp)(struct net_device *, u8, u16, u8);\n\tint (*getapp)(struct net_device *, u8, u16);\n\tu8 (*getfeatcfg)(struct net_device *, int, u8 *);\n\tu8 (*setfeatcfg)(struct net_device *, int, u8);\n\tu8 (*getdcbx)(struct net_device *);\n\tu8 (*setdcbx)(struct net_device *, u8);\n\tint (*peer_getappinfo)(struct net_device *, struct dcb_peer_app_info *, u16 *);\n\tint (*peer_getapptable)(struct net_device *, struct dcb_app *);\n\tint (*cee_peer_getpg)(struct net_device *, struct cee_pg *);\n\tint (*cee_peer_getpfc)(struct net_device *, struct cee_pfc *);\n\tint (*dcbnl_getbuffer)(struct net_device *, struct dcbnl_buffer *);\n\tint (*dcbnl_setbuffer)(struct net_device *, struct dcbnl_buffer *);\n};\n\nstruct netprio_map {\n\tstruct callback_head rcu;\n\tu32 priomap_len;\n\tu32 priomap[0];\n};\n\nstruct xdp_mem_info {\n\tu32 type;\n\tu32 id;\n};\n\nstruct xdp_rxq_info {\n\tstruct net_device *dev;\n\tu32 queue_index;\n\tu32 reg_state;\n\tstruct xdp_mem_info mem;\n\tunsigned int napi_id;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct xdp_frame {\n\tvoid *data;\n\tu16 len;\n\tu16 headroom;\n\tu32 metasize: 8;\n\tu32 frame_sz: 24;\n\tstruct xdp_mem_info mem;\n\tstruct net_device *dev_rx;\n};\n\nstruct nlmsghdr {\n\t__u32 nlmsg_len;\n\t__u16 nlmsg_type;\n\t__u16 nlmsg_flags;\n\t__u32 nlmsg_seq;\n\t__u32 nlmsg_pid;\n};\n\nstruct nlattr {\n\t__u16 nla_len;\n\t__u16 nla_type;\n};\n\nstruct netlink_ext_ack {\n\tconst char *_msg;\n\tconst struct nlattr *bad_attr;\n\tconst struct nla_policy *policy;\n\tu8 cookie[20];\n\tu8 cookie_len;\n};\n\nstruct netlink_range_validation;\n\nstruct netlink_range_validation_signed;\n\nstruct nla_policy {\n\tu8 type;\n\tu8 validation_type;\n\tu16 len;\n\tunion {\n\t\tconst u32 bitfield32_valid;\n\t\tconst u32 mask;\n\t\tconst char *reject_message;\n\t\tconst struct nla_policy *nested_policy;\n\t\tstruct netlink_range_validation *range;\n\t\tstruct netlink_range_validation_signed *range_signed;\n\t\tstruct {\n\t\t\ts16 min;\n\t\t\ts16 max;\n\t\t};\n\t\tint (*validate)(const struct nlattr *, struct netlink_ext_ack *);\n\t\tu16 strict_start_type;\n\t};\n};\n\nstruct netlink_callback {\n\tstruct sk_buff *skb;\n\tconst struct nlmsghdr *nlh;\n\tint (*dump)(struct sk_buff *, struct netlink_callback *);\n\tint (*done)(struct netlink_callback *);\n\tvoid *data;\n\tstruct module *module;\n\tstruct netlink_ext_ack *extack;\n\tu16 family;\n\tu16 answer_flags;\n\tu32 min_dump_alloc;\n\tunsigned int prev_seq;\n\tunsigned int seq;\n\tbool strict_check;\n\tunion {\n\t\tu8 ctx[48];\n\t\tlong int args[6];\n\t};\n};\n\nstruct ndmsg {\n\t__u8 ndm_family;\n\t__u8 ndm_pad1;\n\t__u16 ndm_pad2;\n\t__s32 ndm_ifindex;\n\t__u16 ndm_state;\n\t__u8 ndm_flags;\n\t__u8 ndm_type;\n};\n\nstruct rtnl_link_stats64 {\n\t__u64 rx_packets;\n\t__u64 tx_packets;\n\t__u64 rx_bytes;\n\t__u64 tx_bytes;\n\t__u64 rx_errors;\n\t__u64 tx_errors;\n\t__u64 rx_dropped;\n\t__u64 tx_dropped;\n\t__u64 multicast;\n\t__u64 collisions;\n\t__u64 rx_length_errors;\n\t__u64 rx_over_errors;\n\t__u64 rx_crc_errors;\n\t__u64 rx_frame_errors;\n\t__u64 rx_fifo_errors;\n\t__u64 rx_missed_errors;\n\t__u64 tx_aborted_errors;\n\t__u64 tx_carrier_errors;\n\t__u64 tx_fifo_errors;\n\t__u64 tx_heartbeat_errors;\n\t__u64 tx_window_errors;\n\t__u64 rx_compressed;\n\t__u64 tx_compressed;\n\t__u64 rx_nohandler;\n};\n\nstruct ifla_vf_guid {\n\t__u32 vf;\n\t__u64 guid;\n};\n\nstruct ifla_vf_stats {\n\t__u64 rx_packets;\n\t__u64 tx_packets;\n\t__u64 rx_bytes;\n\t__u64 tx_bytes;\n\t__u64 broadcast;\n\t__u64 multicast;\n\t__u64 rx_dropped;\n\t__u64 tx_dropped;\n};\n\nstruct ifla_vf_info {\n\t__u32 vf;\n\t__u8 mac[32];\n\t__u32 vlan;\n\t__u32 qos;\n\t__u32 spoofchk;\n\t__u32 linkstate;\n\t__u32 min_tx_rate;\n\t__u32 max_tx_rate;\n\t__u32 rss_query_en;\n\t__u32 trusted;\n\t__be16 vlan_proto;\n};\n\nstruct tc_stats {\n\t__u64 bytes;\n\t__u32 packets;\n\t__u32 drops;\n\t__u32 overlimits;\n\t__u32 bps;\n\t__u32 pps;\n\t__u32 qlen;\n\t__u32 backlog;\n};\n\nstruct tc_sizespec {\n\tunsigned char cell_log;\n\tunsigned char size_log;\n\tshort int cell_align;\n\tint overhead;\n\tunsigned int linklayer;\n\tunsigned int mpu;\n\tunsigned int mtu;\n\tunsigned int tsize;\n};\n\nenum netdev_tx {\n\t__NETDEV_TX_MIN = 2147483648,\n\tNETDEV_TX_OK = 0,\n\tNETDEV_TX_BUSY = 16,\n};\n\ntypedef enum netdev_tx netdev_tx_t;\n\nstruct header_ops {\n\tint (*create)(struct sk_buff *, struct net_device *, short unsigned int, const void *, const void *, unsigned int);\n\tint (*parse)(const struct sk_buff *, unsigned char *);\n\tint (*cache)(const struct neighbour *, struct hh_cache *, __be16);\n\tvoid (*cache_update)(struct hh_cache *, const struct net_device *, const unsigned char *);\n\tbool (*validate)(const char *, unsigned int);\n\t__be16 (*parse_protocol)(const struct sk_buff *);\n};\n\nstruct xsk_buff_pool;\n\nstruct netdev_queue {\n\tstruct net_device *dev;\n\tstruct Qdisc *qdisc;\n\tstruct Qdisc *qdisc_sleeping;\n\tstruct kobject kobj;\n\tint numa_node;\n\tlong unsigned int tx_maxrate;\n\tlong unsigned int trans_timeout;\n\tstruct net_device *sb_dev;\n\tstruct xsk_buff_pool *pool;\n\tspinlock_t _xmit_lock;\n\tint xmit_lock_owner;\n\tlong unsigned int trans_start;\n\tlong unsigned int state;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct dql dql;\n};\n\nstruct qdisc_skb_head {\n\tstruct sk_buff *head;\n\tstruct sk_buff *tail;\n\t__u32 qlen;\n\tspinlock_t lock;\n};\n\nstruct gnet_stats_basic_packed {\n\t__u64 bytes;\n\t__u64 packets;\n};\n\nstruct gnet_stats_queue {\n\t__u32 qlen;\n\t__u32 backlog;\n\t__u32 drops;\n\t__u32 requeues;\n\t__u32 overlimits;\n};\n\nstruct Qdisc_ops;\n\nstruct qdisc_size_table;\n\nstruct net_rate_estimator;\n\nstruct gnet_stats_basic_cpu;\n\nstruct Qdisc {\n\tint (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);\n\tstruct sk_buff * (*dequeue)(struct Qdisc *);\n\tunsigned int flags;\n\tu32 limit;\n\tconst struct Qdisc_ops *ops;\n\tstruct qdisc_size_table *stab;\n\tstruct hlist_node hash;\n\tu32 handle;\n\tu32 parent;\n\tstruct netdev_queue *dev_queue;\n\tstruct net_rate_estimator *rate_est;\n\tstruct gnet_stats_basic_cpu *cpu_bstats;\n\tstruct gnet_stats_queue *cpu_qstats;\n\tint pad;\n\trefcount_t refcnt;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct sk_buff_head gso_skb;\n\tstruct qdisc_skb_head q;\n\tstruct gnet_stats_basic_packed bstats;\n\tseqcount_t running;\n\tstruct gnet_stats_queue qstats;\n\tlong unsigned int state;\n\tstruct Qdisc *next_sched;\n\tstruct sk_buff_head skb_bad_txq;\n\tspinlock_t busylock;\n\tspinlock_t seqlock;\n\tbool empty;\n\tstruct callback_head rcu;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong int privdata[0];\n};\n\nstruct rps_map {\n\tunsigned int len;\n\tstruct callback_head rcu;\n\tu16 cpus[0];\n};\n\nstruct rps_dev_flow {\n\tu16 cpu;\n\tu16 filter;\n\tunsigned int last_qtail;\n};\n\nstruct rps_dev_flow_table {\n\tunsigned int mask;\n\tstruct callback_head rcu;\n\tstruct rps_dev_flow flows[0];\n};\n\nstruct netdev_rx_queue {\n\tstruct rps_map *rps_map;\n\tstruct rps_dev_flow_table *rps_flow_table;\n\tstruct kobject kobj;\n\tstruct net_device *dev;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct xdp_rxq_info xdp_rxq;\n\tstruct xsk_buff_pool *pool;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct xps_map {\n\tunsigned int len;\n\tunsigned int alloc_len;\n\tstruct callback_head rcu;\n\tu16 queues[0];\n};\n\nstruct xps_dev_maps {\n\tstruct callback_head rcu;\n\tstruct xps_map *attr_map[0];\n};\n\nstruct netdev_fcoe_hbainfo {\n\tchar manufacturer[64];\n\tchar serial_number[64];\n\tchar hardware_version[64];\n\tchar driver_version[64];\n\tchar optionrom_version[64];\n\tchar firmware_version[64];\n\tchar model[256];\n\tchar model_description[256];\n};\n\nstruct netdev_phys_item_id {\n\tunsigned char id[32];\n\tunsigned char id_len;\n};\n\nenum tc_setup_type {\n\tTC_SETUP_QDISC_MQPRIO = 0,\n\tTC_SETUP_CLSU32 = 1,\n\tTC_SETUP_CLSFLOWER = 2,\n\tTC_SETUP_CLSMATCHALL = 3,\n\tTC_SETUP_CLSBPF = 4,\n\tTC_SETUP_BLOCK = 5,\n\tTC_SETUP_QDISC_CBS = 6,\n\tTC_SETUP_QDISC_RED = 7,\n\tTC_SETUP_QDISC_PRIO = 8,\n\tTC_SETUP_QDISC_MQ = 9,\n\tTC_SETUP_QDISC_ETF = 10,\n\tTC_SETUP_ROOT_QDISC = 11,\n\tTC_SETUP_QDISC_GRED = 12,\n\tTC_SETUP_QDISC_TAPRIO = 13,\n\tTC_SETUP_FT = 14,\n\tTC_SETUP_QDISC_ETS = 15,\n\tTC_SETUP_QDISC_TBF = 16,\n\tTC_SETUP_QDISC_FIFO = 17,\n};\n\nenum bpf_netdev_command {\n\tXDP_SETUP_PROG = 0,\n\tXDP_SETUP_PROG_HW = 1,\n\tBPF_OFFLOAD_MAP_ALLOC = 2,\n\tBPF_OFFLOAD_MAP_FREE = 3,\n\tXDP_SETUP_XSK_POOL = 4,\n};\n\nstruct netdev_bpf {\n\tenum bpf_netdev_command command;\n\tunion {\n\t\tstruct {\n\t\t\tu32 flags;\n\t\t\tstruct bpf_prog *prog;\n\t\t\tstruct netlink_ext_ack *extack;\n\t\t};\n\t\tstruct {\n\t\t\tstruct bpf_offloaded_map *offmap;\n\t\t};\n\t\tstruct {\n\t\t\tstruct xsk_buff_pool *pool;\n\t\t\tu16 queue_id;\n\t\t} xsk;\n\t};\n};\n\nstruct xfrmdev_ops {\n\tint (*xdo_dev_state_add)(struct xfrm_state *);\n\tvoid (*xdo_dev_state_delete)(struct xfrm_state *);\n\tvoid (*xdo_dev_state_free)(struct xfrm_state *);\n\tbool (*xdo_dev_offload_ok)(struct sk_buff *, struct xfrm_state *);\n\tvoid (*xdo_dev_state_advance_esn)(struct xfrm_state *);\n};\n\nstruct dev_ifalias {\n\tstruct callback_head rcuhead;\n\tchar ifalias[0];\n};\n\nstruct netdev_name_node {\n\tstruct hlist_node hlist;\n\tstruct list_head list;\n\tstruct net_device *dev;\n\tconst char *name;\n};\n\nstruct udp_tunnel_info;\n\nstruct devlink_port;\n\nstruct ip_tunnel_parm;\n\nstruct net_device_ops {\n\tint (*ndo_init)(struct net_device *);\n\tvoid (*ndo_uninit)(struct net_device *);\n\tint (*ndo_open)(struct net_device *);\n\tint (*ndo_stop)(struct net_device *);\n\tnetdev_tx_t (*ndo_start_xmit)(struct sk_buff *, struct net_device *);\n\tnetdev_features_t (*ndo_features_check)(struct sk_buff *, struct net_device *, netdev_features_t);\n\tu16 (*ndo_select_queue)(struct net_device *, struct sk_buff *, struct net_device *);\n\tvoid (*ndo_change_rx_flags)(struct net_device *, int);\n\tvoid (*ndo_set_rx_mode)(struct net_device *);\n\tint (*ndo_set_mac_address)(struct net_device *, void *);\n\tint (*ndo_validate_addr)(struct net_device *);\n\tint (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);\n\tint (*ndo_set_config)(struct net_device *, struct ifmap *);\n\tint (*ndo_change_mtu)(struct net_device *, int);\n\tint (*ndo_neigh_setup)(struct net_device *, struct neigh_parms *);\n\tvoid (*ndo_tx_timeout)(struct net_device *, unsigned int);\n\tvoid (*ndo_get_stats64)(struct net_device *, struct rtnl_link_stats64 *);\n\tbool (*ndo_has_offload_stats)(const struct net_device *, int);\n\tint (*ndo_get_offload_stats)(int, const struct net_device *, void *);\n\tstruct net_device_stats * (*ndo_get_stats)(struct net_device *);\n\tint (*ndo_vlan_rx_add_vid)(struct net_device *, __be16, u16);\n\tint (*ndo_vlan_rx_kill_vid)(struct net_device *, __be16, u16);\n\tvoid (*ndo_poll_controller)(struct net_device *);\n\tint (*ndo_netpoll_setup)(struct net_device *, struct netpoll_info *);\n\tvoid (*ndo_netpoll_cleanup)(struct net_device *);\n\tint (*ndo_set_vf_mac)(struct net_device *, int, u8 *);\n\tint (*ndo_set_vf_vlan)(struct net_device *, int, u16, u8, __be16);\n\tint (*ndo_set_vf_rate)(struct net_device *, int, int, int);\n\tint (*ndo_set_vf_spoofchk)(struct net_device *, int, bool);\n\tint (*ndo_set_vf_trust)(struct net_device *, int, bool);\n\tint (*ndo_get_vf_config)(struct net_device *, int, struct ifla_vf_info *);\n\tint (*ndo_set_vf_link_state)(struct net_device *, int, int);\n\tint (*ndo_get_vf_stats)(struct net_device *, int, struct ifla_vf_stats *);\n\tint (*ndo_set_vf_port)(struct net_device *, int, struct nlattr **);\n\tint (*ndo_get_vf_port)(struct net_device *, int, struct sk_buff *);\n\tint (*ndo_get_vf_guid)(struct net_device *, int, struct ifla_vf_guid *, struct ifla_vf_guid *);\n\tint (*ndo_set_vf_guid)(struct net_device *, int, u64, int);\n\tint (*ndo_set_vf_rss_query_en)(struct net_device *, int, bool);\n\tint (*ndo_setup_tc)(struct net_device *, enum tc_setup_type, void *);\n\tint (*ndo_fcoe_enable)(struct net_device *);\n\tint (*ndo_fcoe_disable)(struct net_device *);\n\tint (*ndo_fcoe_ddp_setup)(struct net_device *, u16, struct scatterlist *, unsigned int);\n\tint (*ndo_fcoe_ddp_done)(struct net_device *, u16);\n\tint (*ndo_fcoe_ddp_target)(struct net_device *, u16, struct scatterlist *, unsigned int);\n\tint (*ndo_fcoe_get_hbainfo)(struct net_device *, struct netdev_fcoe_hbainfo *);\n\tint (*ndo_fcoe_get_wwn)(struct net_device *, u64 *, int);\n\tint (*ndo_rx_flow_steer)(struct net_device *, const struct sk_buff *, u16, u32);\n\tint (*ndo_add_slave)(struct net_device *, struct net_device *, struct netlink_ext_ack *);\n\tint (*ndo_del_slave)(struct net_device *, struct net_device *);\n\tstruct net_device * (*ndo_get_xmit_slave)(struct net_device *, struct sk_buff *, bool);\n\tnetdev_features_t (*ndo_fix_features)(struct net_device *, netdev_features_t);\n\tint (*ndo_set_features)(struct net_device *, netdev_features_t);\n\tint (*ndo_neigh_construct)(struct net_device *, struct neighbour *);\n\tvoid (*ndo_neigh_destroy)(struct net_device *, struct neighbour *);\n\tint (*ndo_fdb_add)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16, u16, struct netlink_ext_ack *);\n\tint (*ndo_fdb_del)(struct ndmsg *, struct nlattr **, struct net_device *, const unsigned char *, u16);\n\tint (*ndo_fdb_dump)(struct sk_buff *, struct netlink_callback *, struct net_device *, struct net_device *, int *);\n\tint (*ndo_fdb_get)(struct sk_buff *, struct nlattr **, struct net_device *, const unsigned char *, u16, u32, u32, struct netlink_ext_ack *);\n\tint (*ndo_bridge_setlink)(struct net_device *, struct nlmsghdr *, u16, struct netlink_ext_ack *);\n\tint (*ndo_bridge_getlink)(struct sk_buff *, u32, u32, struct net_device *, u32, int);\n\tint (*ndo_bridge_dellink)(struct net_device *, struct nlmsghdr *, u16);\n\tint (*ndo_change_carrier)(struct net_device *, bool);\n\tint (*ndo_get_phys_port_id)(struct net_device *, struct netdev_phys_item_id *);\n\tint (*ndo_get_port_parent_id)(struct net_device *, struct netdev_phys_item_id *);\n\tint (*ndo_get_phys_port_name)(struct net_device *, char *, size_t);\n\tvoid (*ndo_udp_tunnel_add)(struct net_device *, struct udp_tunnel_info *);\n\tvoid (*ndo_udp_tunnel_del)(struct net_device *, struct udp_tunnel_info *);\n\tvoid * (*ndo_dfwd_add_station)(struct net_device *, struct net_device *);\n\tvoid (*ndo_dfwd_del_station)(struct net_device *, void *);\n\tint (*ndo_set_tx_maxrate)(struct net_device *, int, u32);\n\tint (*ndo_get_iflink)(const struct net_device *);\n\tint (*ndo_change_proto_down)(struct net_device *, bool);\n\tint (*ndo_fill_metadata_dst)(struct net_device *, struct sk_buff *);\n\tvoid (*ndo_set_rx_headroom)(struct net_device *, int);\n\tint (*ndo_bpf)(struct net_device *, struct netdev_bpf *);\n\tint (*ndo_xdp_xmit)(struct net_device *, int, struct xdp_frame **, u32);\n\tint (*ndo_xsk_wakeup)(struct net_device *, u32, u32);\n\tstruct devlink_port * (*ndo_get_devlink_port)(struct net_device *);\n\tint (*ndo_tunnel_ctl)(struct net_device *, struct ip_tunnel_parm *, int);\n\tstruct net_device * (*ndo_get_peer_dev)(struct net_device *);\n};\n\nstruct neigh_parms {\n\tpossible_net_t net;\n\tstruct net_device *dev;\n\tstruct list_head list;\n\tint (*neigh_setup)(struct neighbour *);\n\tstruct neigh_table *tbl;\n\tvoid *sysctl_table;\n\tint dead;\n\trefcount_t refcnt;\n\tstruct callback_head callback_head;\n\tint reachable_time;\n\tint data[13];\n\tlong unsigned int data_state[1];\n};\n\nstruct pcpu_lstats {\n\tu64_stats_t packets;\n\tu64_stats_t bytes;\n\tstruct u64_stats_sync syncp;\n};\n\nstruct pcpu_sw_netstats {\n\tu64 rx_packets;\n\tu64 rx_bytes;\n\tu64 tx_packets;\n\tu64 tx_bytes;\n\tstruct u64_stats_sync syncp;\n};\n\nstruct iw_request_info;\n\nunion iwreq_data;\n\ntypedef int (*iw_handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, char *);\n\nstruct iw_priv_args;\n\nstruct iw_statistics;\n\nstruct iw_handler_def {\n\tconst iw_handler *standard;\n\t__u16 num_standard;\n\t__u16 num_private;\n\t__u16 num_private_args;\n\tconst iw_handler *private;\n\tconst struct iw_priv_args *private_args;\n\tstruct iw_statistics * (*get_wireless_stats)(struct net_device *);\n};\n\nenum ethtool_phys_id_state {\n\tETHTOOL_ID_INACTIVE = 0,\n\tETHTOOL_ID_ACTIVE = 1,\n\tETHTOOL_ID_ON = 2,\n\tETHTOOL_ID_OFF = 3,\n};\n\nstruct ethtool_drvinfo;\n\nstruct ethtool_regs;\n\nstruct ethtool_wolinfo;\n\nstruct ethtool_link_ext_state_info;\n\nstruct ethtool_eeprom;\n\nstruct ethtool_coalesce;\n\nstruct ethtool_ringparam;\n\nstruct ethtool_pause_stats;\n\nstruct ethtool_pauseparam;\n\nstruct ethtool_test;\n\nstruct ethtool_stats;\n\nstruct ethtool_rxnfc;\n\nstruct ethtool_flash;\n\nstruct ethtool_channels;\n\nstruct ethtool_dump;\n\nstruct ethtool_ts_info;\n\nstruct ethtool_modinfo;\n\nstruct ethtool_eee;\n\nstruct ethtool_tunable;\n\nstruct ethtool_link_ksettings;\n\nstruct ethtool_fecparam;\n\nstruct ethtool_ops {\n\tu32 supported_coalesce_params;\n\tvoid (*get_drvinfo)(struct net_device *, struct ethtool_drvinfo *);\n\tint (*get_regs_len)(struct net_device *);\n\tvoid (*get_regs)(struct net_device *, struct ethtool_regs *, void *);\n\tvoid (*get_wol)(struct net_device *, struct ethtool_wolinfo *);\n\tint (*set_wol)(struct net_device *, struct ethtool_wolinfo *);\n\tu32 (*get_msglevel)(struct net_device *);\n\tvoid (*set_msglevel)(struct net_device *, u32);\n\tint (*nway_reset)(struct net_device *);\n\tu32 (*get_link)(struct net_device *);\n\tint (*get_link_ext_state)(struct net_device *, struct ethtool_link_ext_state_info *);\n\tint (*get_eeprom_len)(struct net_device *);\n\tint (*get_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);\n\tint (*set_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);\n\tint (*get_coalesce)(struct net_device *, struct ethtool_coalesce *);\n\tint (*set_coalesce)(struct net_device *, struct ethtool_coalesce *);\n\tvoid (*get_ringparam)(struct net_device *, struct ethtool_ringparam *);\n\tint (*set_ringparam)(struct net_device *, struct ethtool_ringparam *);\n\tvoid (*get_pause_stats)(struct net_device *, struct ethtool_pause_stats *);\n\tvoid (*get_pauseparam)(struct net_device *, struct ethtool_pauseparam *);\n\tint (*set_pauseparam)(struct net_device *, struct ethtool_pauseparam *);\n\tvoid (*self_test)(struct net_device *, struct ethtool_test *, u64 *);\n\tvoid (*get_strings)(struct net_device *, u32, u8 *);\n\tint (*set_phys_id)(struct net_device *, enum ethtool_phys_id_state);\n\tvoid (*get_ethtool_stats)(struct net_device *, struct ethtool_stats *, u64 *);\n\tint (*begin)(struct net_device *);\n\tvoid (*complete)(struct net_device *);\n\tu32 (*get_priv_flags)(struct net_device *);\n\tint (*set_priv_flags)(struct net_device *, u32);\n\tint (*get_sset_count)(struct net_device *, int);\n\tint (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, u32 *);\n\tint (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);\n\tint (*flash_device)(struct net_device *, struct ethtool_flash *);\n\tint (*reset)(struct net_device *, u32 *);\n\tu32 (*get_rxfh_key_size)(struct net_device *);\n\tu32 (*get_rxfh_indir_size)(struct net_device *);\n\tint (*get_rxfh)(struct net_device *, u32 *, u8 *, u8 *);\n\tint (*set_rxfh)(struct net_device *, const u32 *, const u8 *, const u8);\n\tint (*get_rxfh_context)(struct net_device *, u32 *, u8 *, u8 *, u32);\n\tint (*set_rxfh_context)(struct net_device *, const u32 *, const u8 *, const u8, u32 *, bool);\n\tvoid (*get_channels)(struct net_device *, struct ethtool_channels *);\n\tint (*set_channels)(struct net_device *, struct ethtool_channels *);\n\tint (*get_dump_flag)(struct net_device *, struct ethtool_dump *);\n\tint (*get_dump_data)(struct net_device *, struct ethtool_dump *, void *);\n\tint (*set_dump)(struct net_device *, struct ethtool_dump *);\n\tint (*get_ts_info)(struct net_device *, struct ethtool_ts_info *);\n\tint (*get_module_info)(struct net_device *, struct ethtool_modinfo *);\n\tint (*get_module_eeprom)(struct net_device *, struct ethtool_eeprom *, u8 *);\n\tint (*get_eee)(struct net_device *, struct ethtool_eee *);\n\tint (*set_eee)(struct net_device *, struct ethtool_eee *);\n\tint (*get_tunable)(struct net_device *, const struct ethtool_tunable *, void *);\n\tint (*set_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);\n\tint (*get_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);\n\tint (*set_per_queue_coalesce)(struct net_device *, u32, struct ethtool_coalesce *);\n\tint (*get_link_ksettings)(struct net_device *, struct ethtool_link_ksettings *);\n\tint (*set_link_ksettings)(struct net_device *, const struct ethtool_link_ksettings *);\n\tint (*get_fecparam)(struct net_device *, struct ethtool_fecparam *);\n\tint (*set_fecparam)(struct net_device *, struct ethtool_fecparam *);\n\tvoid (*get_ethtool_phy_stats)(struct net_device *, struct ethtool_stats *, u64 *);\n\tint (*get_phy_tunable)(struct net_device *, const struct ethtool_tunable *, void *);\n\tint (*set_phy_tunable)(struct net_device *, const struct ethtool_tunable *, const void *);\n};\n\nstruct l3mdev_ops {\n\tu32 (*l3mdev_fib_table)(const struct net_device *);\n\tstruct sk_buff * (*l3mdev_l3_rcv)(struct net_device *, struct sk_buff *, u16);\n\tstruct sk_buff * (*l3mdev_l3_out)(struct net_device *, struct sock *, struct sk_buff *, u16);\n\tstruct dst_entry * (*l3mdev_link_scope_lookup)(const struct net_device *, struct flowi6 *);\n};\n\nstruct nd_opt_hdr;\n\nstruct ndisc_options;\n\nstruct prefix_info;\n\nstruct ndisc_ops {\n\tint (*is_useropt)(u8);\n\tint (*parse_options)(const struct net_device *, struct nd_opt_hdr *, struct ndisc_options *);\n\tvoid (*update)(const struct net_device *, struct neighbour *, u32, u8, const struct ndisc_options *);\n\tint (*opt_addr_space)(const struct net_device *, u8, struct neighbour *, u8 *, u8 **);\n\tvoid (*fill_addr_option)(const struct net_device *, struct sk_buff *, u8, const u8 *);\n\tvoid (*prefix_rcv_add_addr)(struct net *, struct net_device *, const struct prefix_info *, struct inet6_dev *, struct in6_addr *, int, u32, bool, bool, __u32, u32, bool);\n};\n\nenum tls_offload_ctx_dir {\n\tTLS_OFFLOAD_CTX_DIR_RX = 0,\n\tTLS_OFFLOAD_CTX_DIR_TX = 1,\n};\n\nstruct tls_crypto_info;\n\nstruct tls_context;\n\nstruct tlsdev_ops {\n\tint (*tls_dev_add)(struct net_device *, struct sock *, enum tls_offload_ctx_dir, struct tls_crypto_info *, u32);\n\tvoid (*tls_dev_del)(struct net_device *, struct tls_context *, enum tls_offload_ctx_dir);\n\tint (*tls_dev_resync)(struct net_device *, struct sock *, u32, u8 *, enum tls_offload_ctx_dir);\n};\n\nstruct ipv6_devstat {\n\tstruct proc_dir_entry *proc_dir_entry;\n\tstruct ipstats_mib *ipv6;\n\tstruct icmpv6_mib_device *icmpv6dev;\n\tstruct icmpv6msg_mib_device *icmpv6msgdev;\n};\n\nstruct ifmcaddr6;\n\nstruct ifacaddr6;\n\nstruct inet6_dev {\n\tstruct net_device *dev;\n\tstruct list_head addr_list;\n\tstruct ifmcaddr6 *mc_list;\n\tstruct ifmcaddr6 *mc_tomb;\n\tspinlock_t mc_lock;\n\tunsigned char mc_qrv;\n\tunsigned char mc_gq_running;\n\tunsigned char mc_ifc_count;\n\tunsigned char mc_dad_count;\n\tlong unsigned int mc_v1_seen;\n\tlong unsigned int mc_qi;\n\tlong unsigned int mc_qri;\n\tlong unsigned int mc_maxdelay;\n\tstruct timer_list mc_gq_timer;\n\tstruct timer_list mc_ifc_timer;\n\tstruct timer_list mc_dad_timer;\n\tstruct ifacaddr6 *ac_list;\n\trwlock_t lock;\n\trefcount_t refcnt;\n\t__u32 if_flags;\n\tint dead;\n\tu32 desync_factor;\n\tstruct list_head tempaddr_list;\n\tstruct in6_addr token;\n\tstruct neigh_parms *nd_parms;\n\tstruct ipv6_devconf cnf;\n\tstruct ipv6_devstat stats;\n\tstruct timer_list rs_timer;\n\t__s32 rs_interval;\n\t__u8 rs_probes;\n\tlong unsigned int tstamp;\n\tstruct callback_head rcu;\n};\n\nstruct tcf_proto;\n\nstruct tcf_block;\n\nstruct mini_Qdisc {\n\tstruct tcf_proto *filter_list;\n\tstruct tcf_block *block;\n\tstruct gnet_stats_basic_cpu *cpu_bstats;\n\tstruct gnet_stats_queue *cpu_qstats;\n\tstruct callback_head rcu;\n};\n\nstruct rtnl_link_ops {\n\tstruct list_head list;\n\tconst char *kind;\n\tsize_t priv_size;\n\tvoid (*setup)(struct net_device *);\n\tbool netns_refund;\n\tunsigned int maxtype;\n\tconst struct nla_policy *policy;\n\tint (*validate)(struct nlattr **, struct nlattr **, struct netlink_ext_ack *);\n\tint (*newlink)(struct net *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);\n\tint (*changelink)(struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);\n\tvoid (*dellink)(struct net_device *, struct list_head *);\n\tsize_t (*get_size)(const struct net_device *);\n\tint (*fill_info)(struct sk_buff *, const struct net_device *);\n\tsize_t (*get_xstats_size)(const struct net_device *);\n\tint (*fill_xstats)(struct sk_buff *, const struct net_device *);\n\tunsigned int (*get_num_tx_queues)();\n\tunsigned int (*get_num_rx_queues)();\n\tunsigned int slave_maxtype;\n\tconst struct nla_policy *slave_policy;\n\tint (*slave_changelink)(struct net_device *, struct net_device *, struct nlattr **, struct nlattr **, struct netlink_ext_ack *);\n\tsize_t (*get_slave_size)(const struct net_device *, const struct net_device *);\n\tint (*fill_slave_info)(struct sk_buff *, const struct net_device *, const struct net_device *);\n\tstruct net * (*get_link_net)(const struct net_device *);\n\tsize_t (*get_linkxstats_size)(const struct net_device *, int);\n\tint (*fill_linkxstats)(struct sk_buff *, const struct net_device *, int *, int);\n};\n\nstruct udp_tunnel_nic_table_info {\n\tunsigned int n_entries;\n\tunsigned int tunnel_types;\n};\n\nstruct udp_tunnel_nic_shared;\n\nstruct udp_tunnel_nic_info {\n\tint (*set_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);\n\tint (*unset_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);\n\tint (*sync_table)(struct net_device *, unsigned int);\n\tstruct udp_tunnel_nic_shared *shared;\n\tunsigned int flags;\n\tstruct udp_tunnel_nic_table_info tables[4];\n};\n\nenum {\n\tRTAX_UNSPEC = 0,\n\tRTAX_LOCK = 1,\n\tRTAX_MTU = 2,\n\tRTAX_WINDOW = 3,\n\tRTAX_RTT = 4,\n\tRTAX_RTTVAR = 5,\n\tRTAX_SSTHRESH = 6,\n\tRTAX_CWND = 7,\n\tRTAX_ADVMSS = 8,\n\tRTAX_REORDERING = 9,\n\tRTAX_HOPLIMIT = 10,\n\tRTAX_INITCWND = 11,\n\tRTAX_FEATURES = 12,\n\tRTAX_RTO_MIN = 13,\n\tRTAX_INITRWND = 14,\n\tRTAX_QUICKACK = 15,\n\tRTAX_CC_ALGO = 16,\n\tRTAX_FASTOPEN_NO_COOKIE = 17,\n\t__RTAX_MAX = 18,\n};\n\nstruct tcmsg {\n\tunsigned char tcm_family;\n\tunsigned char tcm__pad1;\n\tshort unsigned int tcm__pad2;\n\tint tcm_ifindex;\n\t__u32 tcm_handle;\n\t__u32 tcm_parent;\n\t__u32 tcm_info;\n};\n\nstruct gnet_stats_basic_cpu {\n\tstruct gnet_stats_basic_packed bstats;\n\tstruct u64_stats_sync syncp;\n};\n\nstruct gnet_dump {\n\tspinlock_t *lock;\n\tstruct sk_buff *skb;\n\tstruct nlattr *tail;\n\tint compat_tc_stats;\n\tint compat_xstats;\n\tint padattr;\n\tvoid *xstats;\n\tint xstats_len;\n\tstruct tc_stats tc_stats;\n};\n\nstruct netlink_range_validation {\n\tu64 min;\n\tu64 max;\n};\n\nstruct netlink_range_validation_signed {\n\ts64 min;\n\ts64 max;\n};\n\nenum flow_action_hw_stats_bit {\n\tFLOW_ACTION_HW_STATS_IMMEDIATE_BIT = 0,\n\tFLOW_ACTION_HW_STATS_DELAYED_BIT = 1,\n\tFLOW_ACTION_HW_STATS_DISABLED_BIT = 2,\n\tFLOW_ACTION_HW_STATS_NUM_BITS = 3,\n};\n\nstruct flow_block {\n\tstruct list_head cb_list;\n};\n\ntypedef int flow_setup_cb_t(enum tc_setup_type, void *, void *);\n\nstruct qdisc_size_table {\n\tstruct callback_head rcu;\n\tstruct list_head list;\n\tstruct tc_sizespec szopts;\n\tint refcnt;\n\tu16 data[0];\n};\n\nstruct Qdisc_class_ops;\n\nstruct Qdisc_ops {\n\tstruct Qdisc_ops *next;\n\tconst struct Qdisc_class_ops *cl_ops;\n\tchar id[16];\n\tint priv_size;\n\tunsigned int static_flags;\n\tint (*enqueue)(struct sk_buff *, struct Qdisc *, struct sk_buff **);\n\tstruct sk_buff * (*dequeue)(struct Qdisc *);\n\tstruct sk_buff * (*peek)(struct Qdisc *);\n\tint (*init)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);\n\tvoid (*reset)(struct Qdisc *);\n\tvoid (*destroy)(struct Qdisc *);\n\tint (*change)(struct Qdisc *, struct nlattr *, struct netlink_ext_ack *);\n\tvoid (*attach)(struct Qdisc *);\n\tint (*change_tx_queue_len)(struct Qdisc *, unsigned int);\n\tint (*dump)(struct Qdisc *, struct sk_buff *);\n\tint (*dump_stats)(struct Qdisc *, struct gnet_dump *);\n\tvoid (*ingress_block_set)(struct Qdisc *, u32);\n\tvoid (*egress_block_set)(struct Qdisc *, u32);\n\tu32 (*ingress_block_get)(struct Qdisc *);\n\tu32 (*egress_block_get)(struct Qdisc *);\n\tstruct module *owner;\n};\n\nstruct qdisc_walker;\n\nstruct Qdisc_class_ops {\n\tunsigned int flags;\n\tstruct netdev_queue * (*select_queue)(struct Qdisc *, struct tcmsg *);\n\tint (*graft)(struct Qdisc *, long unsigned int, struct Qdisc *, struct Qdisc **, struct netlink_ext_ack *);\n\tstruct Qdisc * (*leaf)(struct Qdisc *, long unsigned int);\n\tvoid (*qlen_notify)(struct Qdisc *, long unsigned int);\n\tlong unsigned int (*find)(struct Qdisc *, u32);\n\tint (*change)(struct Qdisc *, u32, u32, struct nlattr **, long unsigned int *, struct netlink_ext_ack *);\n\tint (*delete)(struct Qdisc *, long unsigned int);\n\tvoid (*walk)(struct Qdisc *, struct qdisc_walker *);\n\tstruct tcf_block * (*tcf_block)(struct Qdisc *, long unsigned int, struct netlink_ext_ack *);\n\tlong unsigned int (*bind_tcf)(struct Qdisc *, long unsigned int, u32);\n\tvoid (*unbind_tcf)(struct Qdisc *, long unsigned int);\n\tint (*dump)(struct Qdisc *, long unsigned int, struct sk_buff *, struct tcmsg *);\n\tint (*dump_stats)(struct Qdisc *, long unsigned int, struct gnet_dump *);\n};\n\nstruct tcf_chain;\n\nstruct tcf_block {\n\tstruct mutex lock;\n\tstruct list_head chain_list;\n\tu32 index;\n\tu32 classid;\n\trefcount_t refcnt;\n\tstruct net *net;\n\tstruct Qdisc *q;\n\tstruct rw_semaphore cb_lock;\n\tstruct flow_block flow_block;\n\tstruct list_head owner_list;\n\tbool keep_dst;\n\tatomic_t offloadcnt;\n\tunsigned int nooffloaddevcnt;\n\tunsigned int lockeddevcnt;\n\tstruct {\n\t\tstruct tcf_chain *chain;\n\t\tstruct list_head filter_chain_list;\n\t} chain0;\n\tstruct callback_head rcu;\n\tstruct hlist_head proto_destroy_ht[128];\n\tstruct mutex proto_destroy_lock;\n};\n\nstruct tcf_result;\n\nstruct tcf_proto_ops;\n\nstruct tcf_proto {\n\tstruct tcf_proto *next;\n\tvoid *root;\n\tint (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);\n\t__be16 protocol;\n\tu32 prio;\n\tvoid *data;\n\tconst struct tcf_proto_ops *ops;\n\tstruct tcf_chain *chain;\n\tspinlock_t lock;\n\tbool deleting;\n\trefcount_t refcnt;\n\tstruct callback_head rcu;\n\tstruct hlist_node destroy_ht_node;\n};\n\nstruct tcf_result {\n\tunion {\n\t\tstruct {\n\t\t\tlong unsigned int class;\n\t\t\tu32 classid;\n\t\t};\n\t\tconst struct tcf_proto *goto_tp;\n\t\tstruct {\n\t\t\tbool ingress;\n\t\t\tstruct gnet_stats_queue *qstats;\n\t\t};\n\t};\n};\n\nstruct tcf_walker;\n\nstruct tcf_proto_ops {\n\tstruct list_head head;\n\tchar kind[16];\n\tint (*classify)(struct sk_buff *, const struct tcf_proto *, struct tcf_result *);\n\tint (*init)(struct tcf_proto *);\n\tvoid (*destroy)(struct tcf_proto *, bool, struct netlink_ext_ack *);\n\tvoid * (*get)(struct tcf_proto *, u32);\n\tvoid (*put)(struct tcf_proto *, void *);\n\tint (*change)(struct net *, struct sk_buff *, struct tcf_proto *, long unsigned int, u32, struct nlattr **, void **, bool, bool, struct netlink_ext_ack *);\n\tint (*delete)(struct tcf_proto *, void *, bool *, bool, struct netlink_ext_ack *);\n\tbool (*delete_empty)(struct tcf_proto *);\n\tvoid (*walk)(struct tcf_proto *, struct tcf_walker *, bool);\n\tint (*reoffload)(struct tcf_proto *, bool, flow_setup_cb_t *, void *, struct netlink_ext_ack *);\n\tvoid (*hw_add)(struct tcf_proto *, void *);\n\tvoid (*hw_del)(struct tcf_proto *, void *);\n\tvoid (*bind_class)(void *, u32, long unsigned int, void *, long unsigned int);\n\tvoid * (*tmplt_create)(struct net *, struct tcf_chain *, struct nlattr **, struct netlink_ext_ack *);\n\tvoid (*tmplt_destroy)(void *);\n\tint (*dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);\n\tint (*terse_dump)(struct net *, struct tcf_proto *, void *, struct sk_buff *, struct tcmsg *, bool);\n\tint (*tmplt_dump)(struct sk_buff *, struct net *, void *);\n\tstruct module *owner;\n\tint flags;\n};\n\nstruct tcf_chain {\n\tstruct mutex filter_chain_lock;\n\tstruct tcf_proto *filter_chain;\n\tstruct list_head list;\n\tstruct tcf_block *block;\n\tu32 index;\n\tunsigned int refcnt;\n\tunsigned int action_refcnt;\n\tbool explicitly_created;\n\tbool flushing;\n\tconst struct tcf_proto_ops *tmplt_ops;\n\tvoid *tmplt_priv;\n\tstruct callback_head rcu;\n};\n\nstruct sock_fprog_kern {\n\tu16 len;\n\tstruct sock_filter *filter;\n};\n\nstruct sk_filter {\n\trefcount_t refcnt;\n\tstruct callback_head rcu;\n\tstruct bpf_prog *prog;\n};\n\nenum {\n\tNEIGH_VAR_MCAST_PROBES = 0,\n\tNEIGH_VAR_UCAST_PROBES = 1,\n\tNEIGH_VAR_APP_PROBES = 2,\n\tNEIGH_VAR_MCAST_REPROBES = 3,\n\tNEIGH_VAR_RETRANS_TIME = 4,\n\tNEIGH_VAR_BASE_REACHABLE_TIME = 5,\n\tNEIGH_VAR_DELAY_PROBE_TIME = 6,\n\tNEIGH_VAR_GC_STALETIME = 7,\n\tNEIGH_VAR_QUEUE_LEN_BYTES = 8,\n\tNEIGH_VAR_PROXY_QLEN = 9,\n\tNEIGH_VAR_ANYCAST_DELAY = 10,\n\tNEIGH_VAR_PROXY_DELAY = 11,\n\tNEIGH_VAR_LOCKTIME = 12,\n\tNEIGH_VAR_QUEUE_LEN = 13,\n\tNEIGH_VAR_RETRANS_TIME_MS = 14,\n\tNEIGH_VAR_BASE_REACHABLE_TIME_MS = 15,\n\tNEIGH_VAR_GC_INTERVAL = 16,\n\tNEIGH_VAR_GC_THRESH1 = 17,\n\tNEIGH_VAR_GC_THRESH2 = 18,\n\tNEIGH_VAR_GC_THRESH3 = 19,\n\tNEIGH_VAR_MAX = 20,\n};\n\nstruct pneigh_entry;\n\nstruct neigh_statistics;\n\nstruct neigh_hash_table;\n\nstruct neigh_table {\n\tint family;\n\tunsigned int entry_size;\n\tunsigned int key_len;\n\t__be16 protocol;\n\t__u32 (*hash)(const void *, const struct net_device *, __u32 *);\n\tbool (*key_eq)(const struct neighbour *, const void *);\n\tint (*constructor)(struct neighbour *);\n\tint (*pconstructor)(struct pneigh_entry *);\n\tvoid (*pdestructor)(struct pneigh_entry *);\n\tvoid (*proxy_redo)(struct sk_buff *);\n\tint (*is_multicast)(const void *);\n\tbool (*allow_add)(const struct net_device *, struct netlink_ext_ack *);\n\tchar *id;\n\tstruct neigh_parms parms;\n\tstruct list_head parms_list;\n\tint gc_interval;\n\tint gc_thresh1;\n\tint gc_thresh2;\n\tint gc_thresh3;\n\tlong unsigned int last_flush;\n\tstruct delayed_work gc_work;\n\tstruct timer_list proxy_timer;\n\tstruct sk_buff_head proxy_queue;\n\tatomic_t entries;\n\tatomic_t gc_entries;\n\tstruct list_head gc_list;\n\trwlock_t lock;\n\tlong unsigned int last_rand;\n\tstruct neigh_statistics *stats;\n\tstruct neigh_hash_table *nht;\n\tstruct pneigh_entry **phash_buckets;\n};\n\nstruct neigh_statistics {\n\tlong unsigned int allocs;\n\tlong unsigned int destroys;\n\tlong unsigned int hash_grows;\n\tlong unsigned int res_failed;\n\tlong unsigned int lookups;\n\tlong unsigned int hits;\n\tlong unsigned int rcv_probes_mcast;\n\tlong unsigned int rcv_probes_ucast;\n\tlong unsigned int periodic_gc_runs;\n\tlong unsigned int forced_gc_runs;\n\tlong unsigned int unres_discards;\n\tlong unsigned int table_fulls;\n};\n\nstruct neigh_ops {\n\tint family;\n\tvoid (*solicit)(struct neighbour *, struct sk_buff *);\n\tvoid (*error_report)(struct neighbour *, struct sk_buff *);\n\tint (*output)(struct neighbour *, struct sk_buff *);\n\tint (*connected_output)(struct neighbour *, struct sk_buff *);\n};\n\nstruct pneigh_entry {\n\tstruct pneigh_entry *next;\n\tpossible_net_t net;\n\tstruct net_device *dev;\n\tu8 flags;\n\tu8 protocol;\n\tu8 key[0];\n};\n\nstruct neigh_hash_table {\n\tstruct neighbour **hash_buckets;\n\tunsigned int hash_shift;\n\t__u32 hash_rnd[4];\n\tstruct callback_head rcu;\n};\n\nenum {\n\tTCP_ESTABLISHED = 1,\n\tTCP_SYN_SENT = 2,\n\tTCP_SYN_RECV = 3,\n\tTCP_FIN_WAIT1 = 4,\n\tTCP_FIN_WAIT2 = 5,\n\tTCP_TIME_WAIT = 6,\n\tTCP_CLOSE = 7,\n\tTCP_CLOSE_WAIT = 8,\n\tTCP_LAST_ACK = 9,\n\tTCP_LISTEN = 10,\n\tTCP_CLOSING = 11,\n\tTCP_NEW_SYN_RECV = 12,\n\tTCP_MAX_STATES = 13,\n};\n\nstruct fib_rule_hdr {\n\t__u8 family;\n\t__u8 dst_len;\n\t__u8 src_len;\n\t__u8 tos;\n\t__u8 table;\n\t__u8 res1;\n\t__u8 res2;\n\t__u8 action;\n\t__u32 flags;\n};\n\nstruct fib_rule_port_range {\n\t__u16 start;\n\t__u16 end;\n};\n\nstruct fib_kuid_range {\n\tkuid_t start;\n\tkuid_t end;\n};\n\nstruct fib_rule {\n\tstruct list_head list;\n\tint iifindex;\n\tint oifindex;\n\tu32 mark;\n\tu32 mark_mask;\n\tu32 flags;\n\tu32 table;\n\tu8 action;\n\tu8 l3mdev;\n\tu8 proto;\n\tu8 ip_proto;\n\tu32 target;\n\t__be64 tun_id;\n\tstruct fib_rule *ctarget;\n\tstruct net *fr_net;\n\trefcount_t refcnt;\n\tu32 pref;\n\tint suppress_ifgroup;\n\tint suppress_prefixlen;\n\tchar iifname[16];\n\tchar oifname[16];\n\tstruct fib_kuid_range uid_range;\n\tstruct fib_rule_port_range sport_range;\n\tstruct fib_rule_port_range dport_range;\n\tstruct callback_head rcu;\n};\n\nstruct fib_lookup_arg {\n\tvoid *lookup_ptr;\n\tconst void *lookup_data;\n\tvoid *result;\n\tstruct fib_rule *rule;\n\tu32 table;\n\tint flags;\n};\n\nstruct smc_hashinfo;\n\nstruct request_sock_ops;\n\nstruct timewait_sock_ops;\n\nstruct udp_table;\n\nstruct raw_hashinfo;\n\nstruct proto {\n\tvoid (*close)(struct sock *, long int);\n\tint (*pre_connect)(struct sock *, struct sockaddr *, int);\n\tint (*connect)(struct sock *, struct sockaddr *, int);\n\tint (*disconnect)(struct sock *, int);\n\tstruct sock * (*accept)(struct sock *, int, int *, bool);\n\tint (*ioctl)(struct sock *, int, long unsigned int);\n\tint (*init)(struct sock *);\n\tvoid (*destroy)(struct sock *);\n\tvoid (*shutdown)(struct sock *, int);\n\tint (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);\n\tint (*getsockopt)(struct sock *, int, int, char *, int *);\n\tvoid (*keepalive)(struct sock *, int);\n\tint (*compat_ioctl)(struct sock *, unsigned int, long unsigned int);\n\tint (*sendmsg)(struct sock *, struct msghdr *, size_t);\n\tint (*recvmsg)(struct sock *, struct msghdr *, size_t, int, int, int *);\n\tint (*sendpage)(struct sock *, struct page *, int, size_t, int);\n\tint (*bind)(struct sock *, struct sockaddr *, int);\n\tint (*bind_add)(struct sock *, struct sockaddr *, int);\n\tint (*backlog_rcv)(struct sock *, struct sk_buff *);\n\tvoid (*release_cb)(struct sock *);\n\tint (*hash)(struct sock *);\n\tvoid (*unhash)(struct sock *);\n\tvoid (*rehash)(struct sock *);\n\tint (*get_port)(struct sock *, short unsigned int);\n\tunsigned int inuse_idx;\n\tbool (*stream_memory_free)(const struct sock *, int);\n\tbool (*stream_memory_read)(const struct sock *);\n\tvoid (*enter_memory_pressure)(struct sock *);\n\tvoid (*leave_memory_pressure)(struct sock *);\n\tatomic_long_t *memory_allocated;\n\tstruct percpu_counter *sockets_allocated;\n\tlong unsigned int *memory_pressure;\n\tlong int *sysctl_mem;\n\tint *sysctl_wmem;\n\tint *sysctl_rmem;\n\tu32 sysctl_wmem_offset;\n\tu32 sysctl_rmem_offset;\n\tint max_header;\n\tbool no_autobind;\n\tstruct kmem_cache *slab;\n\tunsigned int obj_size;\n\tslab_flags_t slab_flags;\n\tunsigned int useroffset;\n\tunsigned int usersize;\n\tstruct percpu_counter *orphan_count;\n\tstruct request_sock_ops *rsk_prot;\n\tstruct timewait_sock_ops *twsk_prot;\n\tunion {\n\t\tstruct inet_hashinfo *hashinfo;\n\t\tstruct udp_table *udp_table;\n\t\tstruct raw_hashinfo *raw_hash;\n\t\tstruct smc_hashinfo *smc_hash;\n\t} h;\n\tstruct module *owner;\n\tchar name[32];\n\tstruct list_head node;\n\tint (*diag_destroy)(struct sock *, int);\n};\n\nstruct request_sock;\n\nstruct request_sock_ops {\n\tint family;\n\tunsigned int obj_size;\n\tstruct kmem_cache *slab;\n\tchar *slab_name;\n\tint (*rtx_syn_ack)(const struct sock *, struct request_sock *);\n\tvoid (*send_ack)(const struct sock *, struct sk_buff *, struct request_sock *);\n\tvoid (*send_reset)(const struct sock *, struct sk_buff *);\n\tvoid (*destructor)(struct request_sock *);\n\tvoid (*syn_ack_timeout)(const struct request_sock *);\n};\n\nstruct timewait_sock_ops {\n\tstruct kmem_cache *twsk_slab;\n\tchar *twsk_slab_name;\n\tunsigned int twsk_obj_size;\n\tint (*twsk_unique)(struct sock *, struct sock *, void *);\n\tvoid (*twsk_destructor)(struct sock *);\n};\n\nstruct saved_syn;\n\nstruct request_sock {\n\tstruct sock_common __req_common;\n\tstruct request_sock *dl_next;\n\tu16 mss;\n\tu8 num_retrans;\n\tu8 syncookie: 1;\n\tu8 num_timeout: 7;\n\tu32 ts_recent;\n\tstruct timer_list rsk_timer;\n\tconst struct request_sock_ops *rsk_ops;\n\tstruct sock *sk;\n\tstruct saved_syn *saved_syn;\n\tu32 secid;\n\tu32 peer_secid;\n};\n\nstruct saved_syn {\n\tu32 mac_hdrlen;\n\tu32 network_hdrlen;\n\tu32 tcp_hdrlen;\n\tu8 data[0];\n};\n\nenum tsq_enum {\n\tTSQ_THROTTLED = 0,\n\tTSQ_QUEUED = 1,\n\tTCP_TSQ_DEFERRED = 2,\n\tTCP_WRITE_TIMER_DEFERRED = 3,\n\tTCP_DELACK_TIMER_DEFERRED = 4,\n\tTCP_MTU_REDUCED_DEFERRED = 5,\n};\n\nstruct ip6_sf_list {\n\tstruct ip6_sf_list *sf_next;\n\tstruct in6_addr sf_addr;\n\tlong unsigned int sf_count[2];\n\tunsigned char sf_gsresp;\n\tunsigned char sf_oldin;\n\tunsigned char sf_crcount;\n};\n\nstruct ifmcaddr6 {\n\tstruct in6_addr mca_addr;\n\tstruct inet6_dev *idev;\n\tstruct ifmcaddr6 *next;\n\tstruct ip6_sf_list *mca_sources;\n\tstruct ip6_sf_list *mca_tomb;\n\tunsigned int mca_sfmode;\n\tunsigned char mca_crcount;\n\tlong unsigned int mca_sfcount[2];\n\tstruct timer_list mca_timer;\n\tunsigned int mca_flags;\n\tint mca_users;\n\trefcount_t mca_refcnt;\n\tspinlock_t mca_lock;\n\tlong unsigned int mca_cstamp;\n\tlong unsigned int mca_tstamp;\n};\n\nstruct ifacaddr6 {\n\tstruct in6_addr aca_addr;\n\tstruct fib6_info *aca_rt;\n\tstruct ifacaddr6 *aca_next;\n\tstruct hlist_node aca_addr_lst;\n\tint aca_users;\n\trefcount_t aca_refcnt;\n\tlong unsigned int aca_cstamp;\n\tlong unsigned int aca_tstamp;\n\tstruct callback_head rcu;\n};\n\nenum {\n\t__ND_OPT_PREFIX_INFO_END = 0,\n\tND_OPT_SOURCE_LL_ADDR = 1,\n\tND_OPT_TARGET_LL_ADDR = 2,\n\tND_OPT_PREFIX_INFO = 3,\n\tND_OPT_REDIRECT_HDR = 4,\n\tND_OPT_MTU = 5,\n\tND_OPT_NONCE = 14,\n\t__ND_OPT_ARRAY_MAX = 15,\n\tND_OPT_ROUTE_INFO = 24,\n\tND_OPT_RDNSS = 25,\n\tND_OPT_DNSSL = 31,\n\tND_OPT_6CO = 34,\n\tND_OPT_CAPTIVE_PORTAL = 37,\n\tND_OPT_PREF64 = 38,\n\t__ND_OPT_MAX = 39,\n};\n\nstruct nd_opt_hdr {\n\t__u8 nd_opt_type;\n\t__u8 nd_opt_len;\n};\n\nstruct ndisc_options {\n\tstruct nd_opt_hdr *nd_opt_array[15];\n\tstruct nd_opt_hdr *nd_opts_ri;\n\tstruct nd_opt_hdr *nd_opts_ri_end;\n\tstruct nd_opt_hdr *nd_useropts;\n\tstruct nd_opt_hdr *nd_useropts_end;\n\tstruct nd_opt_hdr *nd_802154_opt_array[3];\n};\n\nstruct prefix_info {\n\t__u8 type;\n\t__u8 length;\n\t__u8 prefix_len;\n\t__u8 reserved: 6;\n\t__u8 autoconf: 1;\n\t__u8 onlink: 1;\n\t__be32 valid;\n\t__be32 prefered;\n\t__be32 reserved2;\n\tstruct in6_addr prefix;\n};\n\nenum nfs_opnum4 {\n\tOP_ACCESS = 3,\n\tOP_CLOSE = 4,\n\tOP_COMMIT = 5,\n\tOP_CREATE = 6,\n\tOP_DELEGPURGE = 7,\n\tOP_DELEGRETURN = 8,\n\tOP_GETATTR = 9,\n\tOP_GETFH = 10,\n\tOP_LINK = 11,\n\tOP_LOCK = 12,\n\tOP_LOCKT = 13,\n\tOP_LOCKU = 14,\n\tOP_LOOKUP = 15,\n\tOP_LOOKUPP = 16,\n\tOP_NVERIFY = 17,\n\tOP_OPEN = 18,\n\tOP_OPENATTR = 19,\n\tOP_OPEN_CONFIRM = 20,\n\tOP_OPEN_DOWNGRADE = 21,\n\tOP_PUTFH = 22,\n\tOP_PUTPUBFH = 23,\n\tOP_PUTROOTFH = 24,\n\tOP_READ = 25,\n\tOP_READDIR = 26,\n\tOP_READLINK = 27,\n\tOP_REMOVE = 28,\n\tOP_RENAME = 29,\n\tOP_RENEW = 30,\n\tOP_RESTOREFH = 31,\n\tOP_SAVEFH = 32,\n\tOP_SECINFO = 33,\n\tOP_SETATTR = 34,\n\tOP_SETCLIENTID = 35,\n\tOP_SETCLIENTID_CONFIRM = 36,\n\tOP_VERIFY = 37,\n\tOP_WRITE = 38,\n\tOP_RELEASE_LOCKOWNER = 39,\n\tOP_BACKCHANNEL_CTL = 40,\n\tOP_BIND_CONN_TO_SESSION = 41,\n\tOP_EXCHANGE_ID = 42,\n\tOP_CREATE_SESSION = 43,\n\tOP_DESTROY_SESSION = 44,\n\tOP_FREE_STATEID = 45,\n\tOP_GET_DIR_DELEGATION = 46,\n\tOP_GETDEVICEINFO = 47,\n\tOP_GETDEVICELIST = 48,\n\tOP_LAYOUTCOMMIT = 49,\n\tOP_LAYOUTGET = 50,\n\tOP_LAYOUTRETURN = 51,\n\tOP_SECINFO_NO_NAME = 52,\n\tOP_SEQUENCE = 53,\n\tOP_SET_SSV = 54,\n\tOP_TEST_STATEID = 55,\n\tOP_WANT_DELEGATION = 56,\n\tOP_DESTROY_CLIENTID = 57,\n\tOP_RECLAIM_COMPLETE = 58,\n\tOP_ALLOCATE = 59,\n\tOP_COPY = 60,\n\tOP_COPY_NOTIFY = 61,\n\tOP_DEALLOCATE = 62,\n\tOP_IO_ADVISE = 63,\n\tOP_LAYOUTERROR = 64,\n\tOP_LAYOUTSTATS = 65,\n\tOP_OFFLOAD_CANCEL = 66,\n\tOP_OFFLOAD_STATUS = 67,\n\tOP_READ_PLUS = 68,\n\tOP_SEEK = 69,\n\tOP_WRITE_SAME = 70,\n\tOP_CLONE = 71,\n\tOP_GETXATTR = 72,\n\tOP_SETXATTR = 73,\n\tOP_LISTXATTRS = 74,\n\tOP_REMOVEXATTR = 75,\n\tOP_ILLEGAL = 10044,\n};\n\nenum perf_branch_sample_type_shift {\n\tPERF_SAMPLE_BRANCH_USER_SHIFT = 0,\n\tPERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1,\n\tPERF_SAMPLE_BRANCH_HV_SHIFT = 2,\n\tPERF_SAMPLE_BRANCH_ANY_SHIFT = 3,\n\tPERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4,\n\tPERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5,\n\tPERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6,\n\tPERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7,\n\tPERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8,\n\tPERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9,\n\tPERF_SAMPLE_BRANCH_COND_SHIFT = 10,\n\tPERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11,\n\tPERF_SAMPLE_BRANCH_IND_JUMP_SHIFT = 12,\n\tPERF_SAMPLE_BRANCH_CALL_SHIFT = 13,\n\tPERF_SAMPLE_BRANCH_NO_FLAGS_SHIFT = 14,\n\tPERF_SAMPLE_BRANCH_NO_CYCLES_SHIFT = 15,\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE_SHIFT = 16,\n\tPERF_SAMPLE_BRANCH_HW_INDEX_SHIFT = 17,\n\tPERF_SAMPLE_BRANCH_MAX_SHIFT = 18,\n};\n\nenum exception_stack_ordering {\n\tESTACK_DF = 0,\n\tESTACK_NMI = 1,\n\tESTACK_DB = 2,\n\tESTACK_MCE = 3,\n\tESTACK_VC = 4,\n\tESTACK_VC2 = 5,\n\tN_EXCEPTION_STACKS = 6,\n};\n\nenum {\n\tTSK_TRACE_FL_TRACE_BIT = 0,\n\tTSK_TRACE_FL_GRAPH_BIT = 1,\n};\n\nstruct uuidcmp {\n\tconst char *uuid;\n\tint len;\n};\n\nstruct subprocess_info {\n\tstruct work_struct work;\n\tstruct completion *complete;\n\tconst char *path;\n\tchar **argv;\n\tchar **envp;\n\tint wait;\n\tint retval;\n\tint (*init)(struct subprocess_info *, struct cred *);\n\tvoid (*cleanup)(struct subprocess_info *);\n\tvoid *data;\n};\n\ntypedef phys_addr_t resource_size_t;\n\nstruct resource {\n\tresource_size_t start;\n\tresource_size_t end;\n\tconst char *name;\n\tlong unsigned int flags;\n\tlong unsigned int desc;\n\tstruct resource *parent;\n\tstruct resource *sibling;\n\tstruct resource *child;\n};\n\nstruct hash {\n\tint ino;\n\tint minor;\n\tint major;\n\tumode_t mode;\n\tstruct hash *next;\n\tchar name[4098];\n};\n\nstruct dir_entry {\n\tstruct list_head list;\n\tchar *name;\n\ttime64_t mtime;\n};\n\nenum state {\n\tStart = 0,\n\tCollect = 1,\n\tGotHeader = 2,\n\tSkipIt = 3,\n\tGotName = 4,\n\tCopyFile = 5,\n\tGotSymlink = 6,\n\tReset = 7,\n};\n\ntypedef int (*decompress_fn)(unsigned char *, long int, long int (*)(void *, long unsigned int), long int (*)(void *, long unsigned int), unsigned char *, long int *, void (*)(char *));\n\nenum {\n\tHI_SOFTIRQ = 0,\n\tTIMER_SOFTIRQ = 1,\n\tNET_TX_SOFTIRQ = 2,\n\tNET_RX_SOFTIRQ = 3,\n\tBLOCK_SOFTIRQ = 4,\n\tIRQ_POLL_SOFTIRQ = 5,\n\tTASKLET_SOFTIRQ = 6,\n\tSCHED_SOFTIRQ = 7,\n\tHRTIMER_SOFTIRQ = 8,\n\tRCU_SOFTIRQ = 9,\n\tNR_SOFTIRQS = 10,\n};\n\nenum ucount_type {\n\tUCOUNT_USER_NAMESPACES = 0,\n\tUCOUNT_PID_NAMESPACES = 1,\n\tUCOUNT_UTS_NAMESPACES = 2,\n\tUCOUNT_IPC_NAMESPACES = 3,\n\tUCOUNT_NET_NAMESPACES = 4,\n\tUCOUNT_MNT_NAMESPACES = 5,\n\tUCOUNT_CGROUP_NAMESPACES = 6,\n\tUCOUNT_TIME_NAMESPACES = 7,\n\tUCOUNT_INOTIFY_INSTANCES = 8,\n\tUCOUNT_INOTIFY_WATCHES = 9,\n\tUCOUNT_COUNTS = 10,\n};\n\nenum flow_dissector_key_id {\n\tFLOW_DISSECTOR_KEY_CONTROL = 0,\n\tFLOW_DISSECTOR_KEY_BASIC = 1,\n\tFLOW_DISSECTOR_KEY_IPV4_ADDRS = 2,\n\tFLOW_DISSECTOR_KEY_IPV6_ADDRS = 3,\n\tFLOW_DISSECTOR_KEY_PORTS = 4,\n\tFLOW_DISSECTOR_KEY_PORTS_RANGE = 5,\n\tFLOW_DISSECTOR_KEY_ICMP = 6,\n\tFLOW_DISSECTOR_KEY_ETH_ADDRS = 7,\n\tFLOW_DISSECTOR_KEY_TIPC = 8,\n\tFLOW_DISSECTOR_KEY_ARP = 9,\n\tFLOW_DISSECTOR_KEY_VLAN = 10,\n\tFLOW_DISSECTOR_KEY_FLOW_LABEL = 11,\n\tFLOW_DISSECTOR_KEY_GRE_KEYID = 12,\n\tFLOW_DISSECTOR_KEY_MPLS_ENTROPY = 13,\n\tFLOW_DISSECTOR_KEY_ENC_KEYID = 14,\n\tFLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS = 15,\n\tFLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS = 16,\n\tFLOW_DISSECTOR_KEY_ENC_CONTROL = 17,\n\tFLOW_DISSECTOR_KEY_ENC_PORTS = 18,\n\tFLOW_DISSECTOR_KEY_MPLS = 19,\n\tFLOW_DISSECTOR_KEY_TCP = 20,\n\tFLOW_DISSECTOR_KEY_IP = 21,\n\tFLOW_DISSECTOR_KEY_CVLAN = 22,\n\tFLOW_DISSECTOR_KEY_ENC_IP = 23,\n\tFLOW_DISSECTOR_KEY_ENC_OPTS = 24,\n\tFLOW_DISSECTOR_KEY_META = 25,\n\tFLOW_DISSECTOR_KEY_CT = 26,\n\tFLOW_DISSECTOR_KEY_HASH = 27,\n\tFLOW_DISSECTOR_KEY_MAX = 28,\n};\n\nenum {\n\tIPSTATS_MIB_NUM = 0,\n\tIPSTATS_MIB_INPKTS = 1,\n\tIPSTATS_MIB_INOCTETS = 2,\n\tIPSTATS_MIB_INDELIVERS = 3,\n\tIPSTATS_MIB_OUTFORWDATAGRAMS = 4,\n\tIPSTATS_MIB_OUTPKTS = 5,\n\tIPSTATS_MIB_OUTOCTETS = 6,\n\tIPSTATS_MIB_INHDRERRORS = 7,\n\tIPSTATS_MIB_INTOOBIGERRORS = 8,\n\tIPSTATS_MIB_INNOROUTES = 9,\n\tIPSTATS_MIB_INADDRERRORS = 10,\n\tIPSTATS_MIB_INUNKNOWNPROTOS = 11,\n\tIPSTATS_MIB_INTRUNCATEDPKTS = 12,\n\tIPSTATS_MIB_INDISCARDS = 13,\n\tIPSTATS_MIB_OUTDISCARDS = 14,\n\tIPSTATS_MIB_OUTNOROUTES = 15,\n\tIPSTATS_MIB_REASMTIMEOUT = 16,\n\tIPSTATS_MIB_REASMREQDS = 17,\n\tIPSTATS_MIB_REASMOKS = 18,\n\tIPSTATS_MIB_REASMFAILS = 19,\n\tIPSTATS_MIB_FRAGOKS = 20,\n\tIPSTATS_MIB_FRAGFAILS = 21,\n\tIPSTATS_MIB_FRAGCREATES = 22,\n\tIPSTATS_MIB_INMCASTPKTS = 23,\n\tIPSTATS_MIB_OUTMCASTPKTS = 24,\n\tIPSTATS_MIB_INBCASTPKTS = 25,\n\tIPSTATS_MIB_OUTBCASTPKTS = 26,\n\tIPSTATS_MIB_INMCASTOCTETS = 27,\n\tIPSTATS_MIB_OUTMCASTOCTETS = 28,\n\tIPSTATS_MIB_INBCASTOCTETS = 29,\n\tIPSTATS_MIB_OUTBCASTOCTETS = 30,\n\tIPSTATS_MIB_CSUMERRORS = 31,\n\tIPSTATS_MIB_NOECTPKTS = 32,\n\tIPSTATS_MIB_ECT1PKTS = 33,\n\tIPSTATS_MIB_ECT0PKTS = 34,\n\tIPSTATS_MIB_CEPKTS = 35,\n\tIPSTATS_MIB_REASM_OVERLAPS = 36,\n\t__IPSTATS_MIB_MAX = 37,\n};\n\nenum {\n\tICMP_MIB_NUM = 0,\n\tICMP_MIB_INMSGS = 1,\n\tICMP_MIB_INERRORS = 2,\n\tICMP_MIB_INDESTUNREACHS = 3,\n\tICMP_MIB_INTIMEEXCDS = 4,\n\tICMP_MIB_INPARMPROBS = 5,\n\tICMP_MIB_INSRCQUENCHS = 6,\n\tICMP_MIB_INREDIRECTS = 7,\n\tICMP_MIB_INECHOS = 8,\n\tICMP_MIB_INECHOREPS = 9,\n\tICMP_MIB_INTIMESTAMPS = 10,\n\tICMP_MIB_INTIMESTAMPREPS = 11,\n\tICMP_MIB_INADDRMASKS = 12,\n\tICMP_MIB_INADDRMASKREPS = 13,\n\tICMP_MIB_OUTMSGS = 14,\n\tICMP_MIB_OUTERRORS = 15,\n\tICMP_MIB_OUTDESTUNREACHS = 16,\n\tICMP_MIB_OUTTIMEEXCDS = 17,\n\tICMP_MIB_OUTPARMPROBS = 18,\n\tICMP_MIB_OUTSRCQUENCHS = 19,\n\tICMP_MIB_OUTREDIRECTS = 20,\n\tICMP_MIB_OUTECHOS = 21,\n\tICMP_MIB_OUTECHOREPS = 22,\n\tICMP_MIB_OUTTIMESTAMPS = 23,\n\tICMP_MIB_OUTTIMESTAMPREPS = 24,\n\tICMP_MIB_OUTADDRMASKS = 25,\n\tICMP_MIB_OUTADDRMASKREPS = 26,\n\tICMP_MIB_CSUMERRORS = 27,\n\t__ICMP_MIB_MAX = 28,\n};\n\nenum {\n\tICMP6_MIB_NUM = 0,\n\tICMP6_MIB_INMSGS = 1,\n\tICMP6_MIB_INERRORS = 2,\n\tICMP6_MIB_OUTMSGS = 3,\n\tICMP6_MIB_OUTERRORS = 4,\n\tICMP6_MIB_CSUMERRORS = 5,\n\t__ICMP6_MIB_MAX = 6,\n};\n\nenum {\n\tTCP_MIB_NUM = 0,\n\tTCP_MIB_RTOALGORITHM = 1,\n\tTCP_MIB_RTOMIN = 2,\n\tTCP_MIB_RTOMAX = 3,\n\tTCP_MIB_MAXCONN = 4,\n\tTCP_MIB_ACTIVEOPENS = 5,\n\tTCP_MIB_PASSIVEOPENS = 6,\n\tTCP_MIB_ATTEMPTFAILS = 7,\n\tTCP_MIB_ESTABRESETS = 8,\n\tTCP_MIB_CURRESTAB = 9,\n\tTCP_MIB_INSEGS = 10,\n\tTCP_MIB_OUTSEGS = 11,\n\tTCP_MIB_RETRANSSEGS = 12,\n\tTCP_MIB_INERRS = 13,\n\tTCP_MIB_OUTRSTS = 14,\n\tTCP_MIB_CSUMERRORS = 15,\n\t__TCP_MIB_MAX = 16,\n};\n\nenum {\n\tUDP_MIB_NUM = 0,\n\tUDP_MIB_INDATAGRAMS = 1,\n\tUDP_MIB_NOPORTS = 2,\n\tUDP_MIB_INERRORS = 3,\n\tUDP_MIB_OUTDATAGRAMS = 4,\n\tUDP_MIB_RCVBUFERRORS = 5,\n\tUDP_MIB_SNDBUFERRORS = 6,\n\tUDP_MIB_CSUMERRORS = 7,\n\tUDP_MIB_IGNOREDMULTI = 8,\n\tUDP_MIB_MEMERRORS = 9,\n\t__UDP_MIB_MAX = 10,\n};\n\nenum {\n\tLINUX_MIB_NUM = 0,\n\tLINUX_MIB_SYNCOOKIESSENT = 1,\n\tLINUX_MIB_SYNCOOKIESRECV = 2,\n\tLINUX_MIB_SYNCOOKIESFAILED = 3,\n\tLINUX_MIB_EMBRYONICRSTS = 4,\n\tLINUX_MIB_PRUNECALLED = 5,\n\tLINUX_MIB_RCVPRUNED = 6,\n\tLINUX_MIB_OFOPRUNED = 7,\n\tLINUX_MIB_OUTOFWINDOWICMPS = 8,\n\tLINUX_MIB_LOCKDROPPEDICMPS = 9,\n\tLINUX_MIB_ARPFILTER = 10,\n\tLINUX_MIB_TIMEWAITED = 11,\n\tLINUX_MIB_TIMEWAITRECYCLED = 12,\n\tLINUX_MIB_TIMEWAITKILLED = 13,\n\tLINUX_MIB_PAWSACTIVEREJECTED = 14,\n\tLINUX_MIB_PAWSESTABREJECTED = 15,\n\tLINUX_MIB_DELAYEDACKS = 16,\n\tLINUX_MIB_DELAYEDACKLOCKED = 17,\n\tLINUX_MIB_DELAYEDACKLOST = 18,\n\tLINUX_MIB_LISTENOVERFLOWS = 19,\n\tLINUX_MIB_LISTENDROPS = 20,\n\tLINUX_MIB_TCPHPHITS = 21,\n\tLINUX_MIB_TCPPUREACKS = 22,\n\tLINUX_MIB_TCPHPACKS = 23,\n\tLINUX_MIB_TCPRENORECOVERY = 24,\n\tLINUX_MIB_TCPSACKRECOVERY = 25,\n\tLINUX_MIB_TCPSACKRENEGING = 26,\n\tLINUX_MIB_TCPSACKREORDER = 27,\n\tLINUX_MIB_TCPRENOREORDER = 28,\n\tLINUX_MIB_TCPTSREORDER = 29,\n\tLINUX_MIB_TCPFULLUNDO = 30,\n\tLINUX_MIB_TCPPARTIALUNDO = 31,\n\tLINUX_MIB_TCPDSACKUNDO = 32,\n\tLINUX_MIB_TCPLOSSUNDO = 33,\n\tLINUX_MIB_TCPLOSTRETRANSMIT = 34,\n\tLINUX_MIB_TCPRENOFAILURES = 35,\n\tLINUX_MIB_TCPSACKFAILURES = 36,\n\tLINUX_MIB_TCPLOSSFAILURES = 37,\n\tLINUX_MIB_TCPFASTRETRANS = 38,\n\tLINUX_MIB_TCPSLOWSTARTRETRANS = 39,\n\tLINUX_MIB_TCPTIMEOUTS = 40,\n\tLINUX_MIB_TCPLOSSPROBES = 41,\n\tLINUX_MIB_TCPLOSSPROBERECOVERY = 42,\n\tLINUX_MIB_TCPRENORECOVERYFAIL = 43,\n\tLINUX_MIB_TCPSACKRECOVERYFAIL = 44,\n\tLINUX_MIB_TCPRCVCOLLAPSED = 45,\n\tLINUX_MIB_TCPDSACKOLDSENT = 46,\n\tLINUX_MIB_TCPDSACKOFOSENT = 47,\n\tLINUX_MIB_TCPDSACKRECV = 48,\n\tLINUX_MIB_TCPDSACKOFORECV = 49,\n\tLINUX_MIB_TCPABORTONDATA = 50,\n\tLINUX_MIB_TCPABORTONCLOSE = 51,\n\tLINUX_MIB_TCPABORTONMEMORY = 52,\n\tLINUX_MIB_TCPABORTONTIMEOUT = 53,\n\tLINUX_MIB_TCPABORTONLINGER = 54,\n\tLINUX_MIB_TCPABORTFAILED = 55,\n\tLINUX_MIB_TCPMEMORYPRESSURES = 56,\n\tLINUX_MIB_TCPMEMORYPRESSURESCHRONO = 57,\n\tLINUX_MIB_TCPSACKDISCARD = 58,\n\tLINUX_MIB_TCPDSACKIGNOREDOLD = 59,\n\tLINUX_MIB_TCPDSACKIGNOREDNOUNDO = 60,\n\tLINUX_MIB_TCPSPURIOUSRTOS = 61,\n\tLINUX_MIB_TCPMD5NOTFOUND = 62,\n\tLINUX_MIB_TCPMD5UNEXPECTED = 63,\n\tLINUX_MIB_TCPMD5FAILURE = 64,\n\tLINUX_MIB_SACKSHIFTED = 65,\n\tLINUX_MIB_SACKMERGED = 66,\n\tLINUX_MIB_SACKSHIFTFALLBACK = 67,\n\tLINUX_MIB_TCPBACKLOGDROP = 68,\n\tLINUX_MIB_PFMEMALLOCDROP = 69,\n\tLINUX_MIB_TCPMINTTLDROP = 70,\n\tLINUX_MIB_TCPDEFERACCEPTDROP = 71,\n\tLINUX_MIB_IPRPFILTER = 72,\n\tLINUX_MIB_TCPTIMEWAITOVERFLOW = 73,\n\tLINUX_MIB_TCPREQQFULLDOCOOKIES = 74,\n\tLINUX_MIB_TCPREQQFULLDROP = 75,\n\tLINUX_MIB_TCPRETRANSFAIL = 76,\n\tLINUX_MIB_TCPRCVCOALESCE = 77,\n\tLINUX_MIB_TCPBACKLOGCOALESCE = 78,\n\tLINUX_MIB_TCPOFOQUEUE = 79,\n\tLINUX_MIB_TCPOFODROP = 80,\n\tLINUX_MIB_TCPOFOMERGE = 81,\n\tLINUX_MIB_TCPCHALLENGEACK = 82,\n\tLINUX_MIB_TCPSYNCHALLENGE = 83,\n\tLINUX_MIB_TCPFASTOPENACTIVE = 84,\n\tLINUX_MIB_TCPFASTOPENACTIVEFAIL = 85,\n\tLINUX_MIB_TCPFASTOPENPASSIVE = 86,\n\tLINUX_MIB_TCPFASTOPENPASSIVEFAIL = 87,\n\tLINUX_MIB_TCPFASTOPENLISTENOVERFLOW = 88,\n\tLINUX_MIB_TCPFASTOPENCOOKIEREQD = 89,\n\tLINUX_MIB_TCPFASTOPENBLACKHOLE = 90,\n\tLINUX_MIB_TCPSPURIOUS_RTX_HOSTQUEUES = 91,\n\tLINUX_MIB_BUSYPOLLRXPACKETS = 92,\n\tLINUX_MIB_TCPAUTOCORKING = 93,\n\tLINUX_MIB_TCPFROMZEROWINDOWADV = 94,\n\tLINUX_MIB_TCPTOZEROWINDOWADV = 95,\n\tLINUX_MIB_TCPWANTZEROWINDOWADV = 96,\n\tLINUX_MIB_TCPSYNRETRANS = 97,\n\tLINUX_MIB_TCPORIGDATASENT = 98,\n\tLINUX_MIB_TCPHYSTARTTRAINDETECT = 99,\n\tLINUX_MIB_TCPHYSTARTTRAINCWND = 100,\n\tLINUX_MIB_TCPHYSTARTDELAYDETECT = 101,\n\tLINUX_MIB_TCPHYSTARTDELAYCWND = 102,\n\tLINUX_MIB_TCPACKSKIPPEDSYNRECV = 103,\n\tLINUX_MIB_TCPACKSKIPPEDPAWS = 104,\n\tLINUX_MIB_TCPACKSKIPPEDSEQ = 105,\n\tLINUX_MIB_TCPACKSKIPPEDFINWAIT2 = 106,\n\tLINUX_MIB_TCPACKSKIPPEDTIMEWAIT = 107,\n\tLINUX_MIB_TCPACKSKIPPEDCHALLENGE = 108,\n\tLINUX_MIB_TCPWINPROBE = 109,\n\tLINUX_MIB_TCPKEEPALIVE = 110,\n\tLINUX_MIB_TCPMTUPFAIL = 111,\n\tLINUX_MIB_TCPMTUPSUCCESS = 112,\n\tLINUX_MIB_TCPDELIVERED = 113,\n\tLINUX_MIB_TCPDELIVEREDCE = 114,\n\tLINUX_MIB_TCPACKCOMPRESSED = 115,\n\tLINUX_MIB_TCPZEROWINDOWDROP = 116,\n\tLINUX_MIB_TCPRCVQDROP = 117,\n\tLINUX_MIB_TCPWQUEUETOOBIG = 118,\n\tLINUX_MIB_TCPFASTOPENPASSIVEALTKEY = 119,\n\tLINUX_MIB_TCPTIMEOUTREHASH = 120,\n\tLINUX_MIB_TCPDUPLICATEDATAREHASH = 121,\n\tLINUX_MIB_TCPDSACKRECVSEGS = 122,\n\tLINUX_MIB_TCPDSACKIGNOREDDUBIOUS = 123,\n\t__LINUX_MIB_MAX = 124,\n};\n\nenum {\n\tLINUX_MIB_XFRMNUM = 0,\n\tLINUX_MIB_XFRMINERROR = 1,\n\tLINUX_MIB_XFRMINBUFFERERROR = 2,\n\tLINUX_MIB_XFRMINHDRERROR = 3,\n\tLINUX_MIB_XFRMINNOSTATES = 4,\n\tLINUX_MIB_XFRMINSTATEPROTOERROR = 5,\n\tLINUX_MIB_XFRMINSTATEMODEERROR = 6,\n\tLINUX_MIB_XFRMINSTATESEQERROR = 7,\n\tLINUX_MIB_XFRMINSTATEEXPIRED = 8,\n\tLINUX_MIB_XFRMINSTATEMISMATCH = 9,\n\tLINUX_MIB_XFRMINSTATEINVALID = 10,\n\tLINUX_MIB_XFRMINTMPLMISMATCH = 11,\n\tLINUX_MIB_XFRMINNOPOLS = 12,\n\tLINUX_MIB_XFRMINPOLBLOCK = 13,\n\tLINUX_MIB_XFRMINPOLERROR = 14,\n\tLINUX_MIB_XFRMOUTERROR = 15,\n\tLINUX_MIB_XFRMOUTBUNDLEGENERROR = 16,\n\tLINUX_MIB_XFRMOUTBUNDLECHECKERROR = 17,\n\tLINUX_MIB_XFRMOUTNOSTATES = 18,\n\tLINUX_MIB_XFRMOUTSTATEPROTOERROR = 19,\n\tLINUX_MIB_XFRMOUTSTATEMODEERROR = 20,\n\tLINUX_MIB_XFRMOUTSTATESEQERROR = 21,\n\tLINUX_MIB_XFRMOUTSTATEEXPIRED = 22,\n\tLINUX_MIB_XFRMOUTPOLBLOCK = 23,\n\tLINUX_MIB_XFRMOUTPOLDEAD = 24,\n\tLINUX_MIB_XFRMOUTPOLERROR = 25,\n\tLINUX_MIB_XFRMFWDHDRERROR = 26,\n\tLINUX_MIB_XFRMOUTSTATEINVALID = 27,\n\tLINUX_MIB_XFRMACQUIREERROR = 28,\n\t__LINUX_MIB_XFRMMAX = 29,\n};\n\nenum {\n\tLINUX_MIB_TLSNUM = 0,\n\tLINUX_MIB_TLSCURRTXSW = 1,\n\tLINUX_MIB_TLSCURRRXSW = 2,\n\tLINUX_MIB_TLSCURRTXDEVICE = 3,\n\tLINUX_MIB_TLSCURRRXDEVICE = 4,\n\tLINUX_MIB_TLSTXSW = 5,\n\tLINUX_MIB_TLSRXSW = 6,\n\tLINUX_MIB_TLSTXDEVICE = 7,\n\tLINUX_MIB_TLSRXDEVICE = 8,\n\tLINUX_MIB_TLSDECRYPTERROR = 9,\n\tLINUX_MIB_TLSRXDEVICERESYNC = 10,\n\t__LINUX_MIB_TLSMAX = 11,\n};\n\nenum nf_inet_hooks {\n\tNF_INET_PRE_ROUTING = 0,\n\tNF_INET_LOCAL_IN = 1,\n\tNF_INET_FORWARD = 2,\n\tNF_INET_LOCAL_OUT = 3,\n\tNF_INET_POST_ROUTING = 4,\n\tNF_INET_NUMHOOKS = 5,\n\tNF_INET_INGRESS = 5,\n};\n\nenum {\n\tNFPROTO_UNSPEC = 0,\n\tNFPROTO_INET = 1,\n\tNFPROTO_IPV4 = 2,\n\tNFPROTO_ARP = 3,\n\tNFPROTO_NETDEV = 5,\n\tNFPROTO_BRIDGE = 7,\n\tNFPROTO_IPV6 = 10,\n\tNFPROTO_DECNET = 12,\n\tNFPROTO_NUMPROTO = 13,\n};\n\nenum tcp_conntrack {\n\tTCP_CONNTRACK_NONE = 0,\n\tTCP_CONNTRACK_SYN_SENT = 1,\n\tTCP_CONNTRACK_SYN_RECV = 2,\n\tTCP_CONNTRACK_ESTABLISHED = 3,\n\tTCP_CONNTRACK_FIN_WAIT = 4,\n\tTCP_CONNTRACK_CLOSE_WAIT = 5,\n\tTCP_CONNTRACK_LAST_ACK = 6,\n\tTCP_CONNTRACK_TIME_WAIT = 7,\n\tTCP_CONNTRACK_CLOSE = 8,\n\tTCP_CONNTRACK_LISTEN = 9,\n\tTCP_CONNTRACK_MAX = 10,\n\tTCP_CONNTRACK_IGNORE = 11,\n\tTCP_CONNTRACK_RETRANS = 12,\n\tTCP_CONNTRACK_UNACK = 13,\n\tTCP_CONNTRACK_TIMEOUT_MAX = 14,\n};\n\nenum ct_dccp_states {\n\tCT_DCCP_NONE = 0,\n\tCT_DCCP_REQUEST = 1,\n\tCT_DCCP_RESPOND = 2,\n\tCT_DCCP_PARTOPEN = 3,\n\tCT_DCCP_OPEN = 4,\n\tCT_DCCP_CLOSEREQ = 5,\n\tCT_DCCP_CLOSING = 6,\n\tCT_DCCP_TIMEWAIT = 7,\n\tCT_DCCP_IGNORE = 8,\n\tCT_DCCP_INVALID = 9,\n\t__CT_DCCP_MAX = 10,\n};\n\nenum ip_conntrack_dir {\n\tIP_CT_DIR_ORIGINAL = 0,\n\tIP_CT_DIR_REPLY = 1,\n\tIP_CT_DIR_MAX = 2,\n};\n\nenum sctp_conntrack {\n\tSCTP_CONNTRACK_NONE = 0,\n\tSCTP_CONNTRACK_CLOSED = 1,\n\tSCTP_CONNTRACK_COOKIE_WAIT = 2,\n\tSCTP_CONNTRACK_COOKIE_ECHOED = 3,\n\tSCTP_CONNTRACK_ESTABLISHED = 4,\n\tSCTP_CONNTRACK_SHUTDOWN_SENT = 5,\n\tSCTP_CONNTRACK_SHUTDOWN_RECD = 6,\n\tSCTP_CONNTRACK_SHUTDOWN_ACK_SENT = 7,\n\tSCTP_CONNTRACK_HEARTBEAT_SENT = 8,\n\tSCTP_CONNTRACK_HEARTBEAT_ACKED = 9,\n\tSCTP_CONNTRACK_MAX = 10,\n};\n\nenum udp_conntrack {\n\tUDP_CT_UNREPLIED = 0,\n\tUDP_CT_REPLIED = 1,\n\tUDP_CT_MAX = 2,\n};\n\nenum gre_conntrack {\n\tGRE_CT_UNREPLIED = 0,\n\tGRE_CT_REPLIED = 1,\n\tGRE_CT_MAX = 2,\n};\n\nenum {\n\tXFRM_POLICY_IN = 0,\n\tXFRM_POLICY_OUT = 1,\n\tXFRM_POLICY_FWD = 2,\n\tXFRM_POLICY_MASK = 3,\n\tXFRM_POLICY_MAX = 3,\n};\n\nenum netns_bpf_attach_type {\n\tNETNS_BPF_INVALID = 4294967295,\n\tNETNS_BPF_FLOW_DISSECTOR = 0,\n\tNETNS_BPF_SK_LOOKUP = 1,\n\tMAX_NETNS_BPF_ATTACH_TYPE = 2,\n};\n\nenum skb_ext_id {\n\tSKB_EXT_BRIDGE_NF = 0,\n\tSKB_EXT_SEC_PATH = 1,\n\tTC_SKB_EXT = 2,\n\tSKB_EXT_MPTCP = 3,\n\tSKB_EXT_NUM = 4,\n};\n\nenum audit_ntp_type {\n\tAUDIT_NTP_OFFSET = 0,\n\tAUDIT_NTP_FREQ = 1,\n\tAUDIT_NTP_STATUS = 2,\n\tAUDIT_NTP_TAI = 3,\n\tAUDIT_NTP_TICK = 4,\n\tAUDIT_NTP_ADJUST = 5,\n\tAUDIT_NTP_NVALS = 6,\n};\n\ntypedef long int (*sys_call_ptr_t)(const struct pt_regs *);\n\nstruct irq_stack {\n\tchar stack[16384];\n};\n\nstruct io_bitmap {\n\tu64 sequence;\n\trefcount_t refcnt;\n\tunsigned int max;\n\tlong unsigned int bitmap[1024];\n};\n\nenum irqreturn {\n\tIRQ_NONE = 0,\n\tIRQ_HANDLED = 1,\n\tIRQ_WAKE_THREAD = 2,\n};\n\ntypedef enum irqreturn irqreturn_t;\n\ntypedef struct {\n\tu16 __softirq_pending;\n\tu8 kvm_cpu_l1tf_flush_l1d;\n\tunsigned int __nmi_count;\n\tunsigned int apic_timer_irqs;\n\tunsigned int irq_spurious_count;\n\tunsigned int icr_read_retry_count;\n\tunsigned int kvm_posted_intr_ipis;\n\tunsigned int kvm_posted_intr_wakeup_ipis;\n\tunsigned int kvm_posted_intr_nested_ipis;\n\tunsigned int x86_platform_ipis;\n\tunsigned int apic_perf_irqs;\n\tunsigned int apic_irq_work_irqs;\n\tunsigned int irq_resched_count;\n\tunsigned int irq_call_count;\n\tunsigned int irq_tlb_count;\n\tunsigned int irq_thermal_count;\n\tunsigned int irq_threshold_count;\n\tunsigned int irq_deferred_error_count;\n\tunsigned int irq_hv_callback_count;\n\tunsigned int irq_hv_reenlightenment_count;\n\tunsigned int hyperv_stimer0_count;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n} irq_cpustat_t;\n\ntypedef irqreturn_t (*irq_handler_t)(int, void *);\n\nstruct irqaction {\n\tirq_handler_t handler;\n\tvoid *dev_id;\n\tvoid *percpu_dev_id;\n\tstruct irqaction *next;\n\tirq_handler_t thread_fn;\n\tstruct task_struct *thread;\n\tstruct irqaction *secondary;\n\tunsigned int irq;\n\tunsigned int flags;\n\tlong unsigned int thread_flags;\n\tlong unsigned int thread_mask;\n\tconst char *name;\n\tstruct proc_dir_entry *dir;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct irq_affinity_notify {\n\tunsigned int irq;\n\tstruct kref kref;\n\tstruct work_struct work;\n\tvoid (*notify)(struct irq_affinity_notify *, const cpumask_t *);\n\tvoid (*release)(struct kref *);\n};\n\nstruct irq_affinity_desc {\n\tstruct cpumask mask;\n\tunsigned int is_managed: 1;\n};\n\nenum irqchip_irq_state {\n\tIRQCHIP_STATE_PENDING = 0,\n\tIRQCHIP_STATE_ACTIVE = 1,\n\tIRQCHIP_STATE_MASKED = 2,\n\tIRQCHIP_STATE_LINE_LEVEL = 3,\n};\n\nenum {\n\tEI_ETYPE_NONE = 0,\n\tEI_ETYPE_NULL = 1,\n\tEI_ETYPE_ERRNO = 2,\n\tEI_ETYPE_ERRNO_NULL = 3,\n\tEI_ETYPE_TRUE = 4,\n};\n\nstruct syscall_metadata {\n\tconst char *name;\n\tint syscall_nr;\n\tint nb_args;\n\tconst char **types;\n\tconst char **args;\n\tstruct list_head enter_fields;\n\tstruct trace_event_call *enter_event;\n\tstruct trace_event_call *exit_event;\n};\n\nstruct irqentry_state {\n\tunion {\n\t\tbool exit_rcu;\n\t\tbool lockdep;\n\t};\n};\n\ntypedef struct irqentry_state irqentry_state_t;\n\nstruct irq_desc;\n\ntypedef void (*irq_flow_handler_t)(struct irq_desc *);\n\nstruct msi_desc;\n\nstruct irq_common_data {\n\tunsigned int state_use_accessors;\n\tunsigned int node;\n\tvoid *handler_data;\n\tstruct msi_desc *msi_desc;\n\tcpumask_var_t affinity;\n\tcpumask_var_t effective_affinity;\n};\n\nstruct irq_chip;\n\nstruct irq_data {\n\tu32 mask;\n\tunsigned int irq;\n\tlong unsigned int hwirq;\n\tstruct irq_common_data *common;\n\tstruct irq_chip *chip;\n\tstruct irq_domain *domain;\n\tstruct irq_data *parent_data;\n\tvoid *chip_data;\n};\n\nstruct irq_desc {\n\tstruct irq_common_data irq_common_data;\n\tstruct irq_data irq_data;\n\tunsigned int *kstat_irqs;\n\tirq_flow_handler_t handle_irq;\n\tstruct irqaction *action;\n\tunsigned int status_use_accessors;\n\tunsigned int core_internal_state__do_not_mess_with_it;\n\tunsigned int depth;\n\tunsigned int wake_depth;\n\tunsigned int tot_count;\n\tunsigned int irq_count;\n\tlong unsigned int last_unhandled;\n\tunsigned int irqs_unhandled;\n\tatomic_t threads_handled;\n\tint threads_handled_last;\n\traw_spinlock_t lock;\n\tstruct cpumask *percpu_enabled;\n\tconst struct cpumask *percpu_affinity;\n\tconst struct cpumask *affinity_hint;\n\tstruct irq_affinity_notify *affinity_notify;\n\tcpumask_var_t pending_mask;\n\tlong unsigned int threads_oneshot;\n\tatomic_t threads_active;\n\twait_queue_head_t wait_for_threads;\n\tunsigned int nr_actions;\n\tunsigned int no_suspend_depth;\n\tunsigned int cond_suspend_depth;\n\tunsigned int force_resume_depth;\n\tstruct proc_dir_entry *dir;\n\tstruct callback_head rcu;\n\tstruct kobject kobj;\n\tstruct mutex request_mutex;\n\tint parent_irq;\n\tstruct module *owner;\n\tconst char *name;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct x86_msi_addr_lo {\n\tunion {\n\t\tstruct {\n\t\t\tu32 reserved_0: 2;\n\t\t\tu32 dest_mode_logical: 1;\n\t\t\tu32 redirect_hint: 1;\n\t\t\tu32 reserved_1: 1;\n\t\t\tu32 virt_destid_8_14: 7;\n\t\t\tu32 destid_0_7: 8;\n\t\t\tu32 base_address: 12;\n\t\t};\n\t\tstruct {\n\t\t\tu32 dmar_reserved_0: 2;\n\t\t\tu32 dmar_index_15: 1;\n\t\t\tu32 dmar_subhandle_valid: 1;\n\t\t\tu32 dmar_format: 1;\n\t\t\tu32 dmar_index_0_14: 15;\n\t\t\tu32 dmar_base_address: 12;\n\t\t};\n\t};\n};\n\ntypedef struct x86_msi_addr_lo arch_msi_msg_addr_lo_t;\n\nstruct x86_msi_addr_hi {\n\tu32 reserved: 8;\n\tu32 destid_8_31: 24;\n};\n\ntypedef struct x86_msi_addr_hi arch_msi_msg_addr_hi_t;\n\nstruct x86_msi_data {\n\tu32 vector: 8;\n\tu32 delivery_mode: 3;\n\tu32 dest_mode_logical: 1;\n\tu32 reserved: 2;\n\tu32 active_low: 1;\n\tu32 is_level: 1;\n\tu32 dmar_subhandle;\n} __attribute__((packed));\n\ntypedef struct x86_msi_data arch_msi_msg_data_t;\n\nstruct msi_msg {\n\tunion {\n\t\tu32 address_lo;\n\t\tarch_msi_msg_addr_lo_t arch_addr_lo;\n\t};\n\tunion {\n\t\tu32 address_hi;\n\t\tarch_msi_msg_addr_hi_t arch_addr_hi;\n\t};\n\tunion {\n\t\tu32 data;\n\t\tarch_msi_msg_data_t arch_data;\n\t};\n};\n\nstruct platform_msi_priv_data;\n\nstruct platform_msi_desc {\n\tstruct platform_msi_priv_data *msi_priv_data;\n\tu16 msi_index;\n};\n\nstruct fsl_mc_msi_desc {\n\tu16 msi_index;\n};\n\nstruct ti_sci_inta_msi_desc {\n\tu16 dev_index;\n};\n\nstruct msi_desc {\n\tstruct list_head list;\n\tunsigned int irq;\n\tunsigned int nvec_used;\n\tstruct device *dev;\n\tstruct msi_msg msg;\n\tstruct irq_affinity_desc *affinity;\n\tconst void *iommu_cookie;\n\tvoid (*write_msi_msg)(struct msi_desc *, void *);\n\tvoid *write_msi_msg_data;\n\tunion {\n\t\tstruct {\n\t\t\tu32 masked;\n\t\t\tstruct {\n\t\t\t\tu8 is_msix: 1;\n\t\t\t\tu8 multiple: 3;\n\t\t\t\tu8 multi_cap: 3;\n\t\t\t\tu8 maskbit: 1;\n\t\t\t\tu8 is_64: 1;\n\t\t\t\tu8 is_virtual: 1;\n\t\t\t\tu16 entry_nr;\n\t\t\t\tunsigned int default_irq;\n\t\t\t} msi_attrib;\n\t\t\tunion {\n\t\t\t\tu8 mask_pos;\n\t\t\t\tvoid *mask_base;\n\t\t\t};\n\t\t};\n\t\tstruct platform_msi_desc platform;\n\t\tstruct fsl_mc_msi_desc fsl_mc;\n\t\tstruct ti_sci_inta_msi_desc inta;\n\t};\n};\n\nstruct irq_chip {\n\tstruct device *parent_device;\n\tconst char *name;\n\tunsigned int (*irq_startup)(struct irq_data *);\n\tvoid (*irq_shutdown)(struct irq_data *);\n\tvoid (*irq_enable)(struct irq_data *);\n\tvoid (*irq_disable)(struct irq_data *);\n\tvoid (*irq_ack)(struct irq_data *);\n\tvoid (*irq_mask)(struct irq_data *);\n\tvoid (*irq_mask_ack)(struct irq_data *);\n\tvoid (*irq_unmask)(struct irq_data *);\n\tvoid (*irq_eoi)(struct irq_data *);\n\tint (*irq_set_affinity)(struct irq_data *, const struct cpumask *, bool);\n\tint (*irq_retrigger)(struct irq_data *);\n\tint (*irq_set_type)(struct irq_data *, unsigned int);\n\tint (*irq_set_wake)(struct irq_data *, unsigned int);\n\tvoid (*irq_bus_lock)(struct irq_data *);\n\tvoid (*irq_bus_sync_unlock)(struct irq_data *);\n\tvoid (*irq_cpu_online)(struct irq_data *);\n\tvoid (*irq_cpu_offline)(struct irq_data *);\n\tvoid (*irq_suspend)(struct irq_data *);\n\tvoid (*irq_resume)(struct irq_data *);\n\tvoid (*irq_pm_shutdown)(struct irq_data *);\n\tvoid (*irq_calc_mask)(struct irq_data *);\n\tvoid (*irq_print_chip)(struct irq_data *, struct seq_file *);\n\tint (*irq_request_resources)(struct irq_data *);\n\tvoid (*irq_release_resources)(struct irq_data *);\n\tvoid (*irq_compose_msi_msg)(struct irq_data *, struct msi_msg *);\n\tvoid (*irq_write_msi_msg)(struct irq_data *, struct msi_msg *);\n\tint (*irq_get_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool *);\n\tint (*irq_set_irqchip_state)(struct irq_data *, enum irqchip_irq_state, bool);\n\tint (*irq_set_vcpu_affinity)(struct irq_data *, void *);\n\tvoid (*ipi_send_single)(struct irq_data *, unsigned int);\n\tvoid (*ipi_send_mask)(struct irq_data *, const struct cpumask *);\n\tint (*irq_nmi_setup)(struct irq_data *);\n\tvoid (*irq_nmi_teardown)(struct irq_data *);\n\tlong unsigned int flags;\n};\n\nstruct irq_chip_regs {\n\tlong unsigned int enable;\n\tlong unsigned int disable;\n\tlong unsigned int mask;\n\tlong unsigned int ack;\n\tlong unsigned int eoi;\n\tlong unsigned int type;\n\tlong unsigned int polarity;\n};\n\nstruct irq_chip_type {\n\tstruct irq_chip chip;\n\tstruct irq_chip_regs regs;\n\tirq_flow_handler_t handler;\n\tu32 type;\n\tu32 mask_cache_priv;\n\tu32 *mask_cache;\n};\n\nstruct irq_chip_generic {\n\traw_spinlock_t lock;\n\tvoid *reg_base;\n\tu32 (*reg_readl)(void *);\n\tvoid (*reg_writel)(u32, void *);\n\tvoid (*suspend)(struct irq_chip_generic *);\n\tvoid (*resume)(struct irq_chip_generic *);\n\tunsigned int irq_base;\n\tunsigned int irq_cnt;\n\tu32 mask_cache;\n\tu32 type_cache;\n\tu32 polarity_cache;\n\tu32 wake_enabled;\n\tu32 wake_active;\n\tunsigned int num_ct;\n\tvoid *private;\n\tlong unsigned int installed;\n\tlong unsigned int unused;\n\tstruct irq_domain *domain;\n\tstruct list_head list;\n\tstruct irq_chip_type chip_types[0];\n};\n\nenum irq_gc_flags {\n\tIRQ_GC_INIT_MASK_CACHE = 1,\n\tIRQ_GC_INIT_NESTED_LOCK = 2,\n\tIRQ_GC_MASK_CACHE_PER_TYPE = 4,\n\tIRQ_GC_NO_MASK = 8,\n\tIRQ_GC_BE_IO = 16,\n};\n\nstruct irq_domain_chip_generic {\n\tunsigned int irqs_per_chip;\n\tunsigned int num_chips;\n\tunsigned int irq_flags_to_clear;\n\tunsigned int irq_flags_to_set;\n\tenum irq_gc_flags gc_flags;\n\tstruct irq_chip_generic *gc[0];\n};\n\nstruct alt_instr {\n\ts32 instr_offset;\n\ts32 repl_offset;\n\tu16 cpuid;\n\tu8 instrlen;\n\tu8 replacementlen;\n\tu8 padlen;\n} __attribute__((packed));\n\nstruct cpuinfo_x86 {\n\t__u8 x86;\n\t__u8 x86_vendor;\n\t__u8 x86_model;\n\t__u8 x86_stepping;\n\tint x86_tlbsize;\n\t__u32 vmx_capability[3];\n\t__u8 x86_virt_bits;\n\t__u8 x86_phys_bits;\n\t__u8 x86_coreid_bits;\n\t__u8 cu_id;\n\t__u32 extended_cpuid_level;\n\tint cpuid_level;\n\tunion {\n\t\t__u32 x86_capability[20];\n\t\tlong unsigned int x86_capability_alignment;\n\t};\n\tchar x86_vendor_id[16];\n\tchar x86_model_id[64];\n\tunsigned int x86_cache_size;\n\tint x86_cache_alignment;\n\tint x86_cache_max_rmid;\n\tint x86_cache_occ_scale;\n\tint x86_cache_mbm_width_offset;\n\tint x86_power;\n\tlong unsigned int loops_per_jiffy;\n\tu16 x86_max_cores;\n\tu16 apicid;\n\tu16 initial_apicid;\n\tu16 x86_clflush_size;\n\tu16 booted_cores;\n\tu16 phys_proc_id;\n\tu16 logical_proc_id;\n\tu16 cpu_core_id;\n\tu16 cpu_die_id;\n\tu16 logical_die_id;\n\tu16 cpu_index;\n\tu32 microcode;\n\tu8 x86_cache_bits;\n\tunsigned int initialized: 1;\n};\n\nstruct timens_offset {\n\ts64 sec;\n\tu64 nsec;\n};\n\nenum vm_fault_reason {\n\tVM_FAULT_OOM = 1,\n\tVM_FAULT_SIGBUS = 2,\n\tVM_FAULT_MAJOR = 4,\n\tVM_FAULT_WRITE = 8,\n\tVM_FAULT_HWPOISON = 16,\n\tVM_FAULT_HWPOISON_LARGE = 32,\n\tVM_FAULT_SIGSEGV = 64,\n\tVM_FAULT_NOPAGE = 256,\n\tVM_FAULT_LOCKED = 512,\n\tVM_FAULT_RETRY = 1024,\n\tVM_FAULT_FALLBACK = 2048,\n\tVM_FAULT_DONE_COW = 4096,\n\tVM_FAULT_NEEDDSYNC = 8192,\n\tVM_FAULT_HINDEX_MASK = 983040,\n};\n\nstruct vm_special_mapping {\n\tconst char *name;\n\tstruct page **pages;\n\tvm_fault_t (*fault)(const struct vm_special_mapping *, struct vm_area_struct *, struct vm_fault *);\n\tint (*mremap)(const struct vm_special_mapping *, struct vm_area_struct *);\n};\n\nstruct timens_offsets {\n\tstruct timespec64 monotonic;\n\tstruct timespec64 boottime;\n};\n\nstruct time_namespace {\n\tstruct user_namespace *user_ns;\n\tstruct ucounts *ucounts;\n\tstruct ns_common ns;\n\tstruct timens_offsets offsets;\n\tstruct page *vvar_page;\n\tbool frozen_offsets;\n};\n\nstruct pvclock_vcpu_time_info {\n\tu32 version;\n\tu32 pad0;\n\tu64 tsc_timestamp;\n\tu64 system_time;\n\tu32 tsc_to_system_mul;\n\ts8 tsc_shift;\n\tu8 flags;\n\tu8 pad[2];\n};\n\nstruct pvclock_vsyscall_time_info {\n\tstruct pvclock_vcpu_time_info pvti;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum vdso_clock_mode {\n\tVDSO_CLOCKMODE_NONE = 0,\n\tVDSO_CLOCKMODE_TSC = 1,\n\tVDSO_CLOCKMODE_PVCLOCK = 2,\n\tVDSO_CLOCKMODE_HVCLOCK = 3,\n\tVDSO_CLOCKMODE_MAX = 4,\n\tVDSO_CLOCKMODE_TIMENS = 2147483647,\n};\n\nstruct arch_vdso_data {};\n\nstruct vdso_timestamp {\n\tu64 sec;\n\tu64 nsec;\n};\n\nstruct vdso_data {\n\tu32 seq;\n\ts32 clock_mode;\n\tu64 cycle_last;\n\tu64 mask;\n\tu32 mult;\n\tu32 shift;\n\tunion {\n\t\tstruct vdso_timestamp basetime[12];\n\t\tstruct timens_offset offset[12];\n\t};\n\ts32 tz_minuteswest;\n\ts32 tz_dsttime;\n\tu32 hrtimer_res;\n\tu32 __unused;\n\tstruct arch_vdso_data arch_data;\n};\n\nstruct ms_hyperv_tsc_page {\n\tvolatile u32 tsc_sequence;\n\tu32 reserved1;\n\tvolatile u64 tsc_scale;\n\tvolatile s64 tsc_offset;\n};\n\nenum {\n\tTASKSTATS_CMD_UNSPEC = 0,\n\tTASKSTATS_CMD_GET = 1,\n\tTASKSTATS_CMD_NEW = 2,\n\t__TASKSTATS_CMD_MAX = 3,\n};\n\nenum cpu_usage_stat {\n\tCPUTIME_USER = 0,\n\tCPUTIME_NICE = 1,\n\tCPUTIME_SYSTEM = 2,\n\tCPUTIME_SOFTIRQ = 3,\n\tCPUTIME_IRQ = 4,\n\tCPUTIME_IDLE = 5,\n\tCPUTIME_IOWAIT = 6,\n\tCPUTIME_STEAL = 7,\n\tCPUTIME_GUEST = 8,\n\tCPUTIME_GUEST_NICE = 9,\n\tNR_STATS = 10,\n};\n\nenum bpf_cgroup_storage_type {\n\tBPF_CGROUP_STORAGE_SHARED = 0,\n\tBPF_CGROUP_STORAGE_PERCPU = 1,\n\t__BPF_CGROUP_STORAGE_MAX = 2,\n};\n\nenum bpf_tramp_prog_type {\n\tBPF_TRAMP_FENTRY = 0,\n\tBPF_TRAMP_FEXIT = 1,\n\tBPF_TRAMP_MODIFY_RETURN = 2,\n\tBPF_TRAMP_MAX = 3,\n\tBPF_TRAMP_REPLACE = 4,\n};\n\nenum psi_task_count {\n\tNR_IOWAIT = 0,\n\tNR_MEMSTALL = 1,\n\tNR_RUNNING = 2,\n\tNR_ONCPU = 3,\n\tNR_PSI_TASK_COUNTS = 4,\n};\n\nenum psi_states {\n\tPSI_IO_SOME = 0,\n\tPSI_IO_FULL = 1,\n\tPSI_MEM_SOME = 2,\n\tPSI_MEM_FULL = 3,\n\tPSI_CPU_SOME = 4,\n\tPSI_NONIDLE = 5,\n\tNR_PSI_STATES = 6,\n};\n\nenum psi_aggregators {\n\tPSI_AVGS = 0,\n\tPSI_POLL = 1,\n\tNR_PSI_AGGREGATORS = 2,\n};\n\nenum cgroup_subsys_id {\n\tcpuset_cgrp_id = 0,\n\tcpu_cgrp_id = 1,\n\tcpuacct_cgrp_id = 2,\n\tio_cgrp_id = 3,\n\tmemory_cgrp_id = 4,\n\tdevices_cgrp_id = 5,\n\tfreezer_cgrp_id = 6,\n\tnet_cls_cgrp_id = 7,\n\tperf_event_cgrp_id = 8,\n\tnet_prio_cgrp_id = 9,\n\thugetlb_cgrp_id = 10,\n\tpids_cgrp_id = 11,\n\tCGROUP_SUBSYS_COUNT = 12,\n};\n\nstruct vdso_exception_table_entry {\n\tint insn;\n\tint fixup;\n};\n\nenum syscall_work_bit {\n\tSYSCALL_WORK_BIT_SECCOMP = 0,\n\tSYSCALL_WORK_BIT_SYSCALL_TRACEPOINT = 1,\n\tSYSCALL_WORK_BIT_SYSCALL_TRACE = 2,\n\tSYSCALL_WORK_BIT_SYSCALL_EMU = 3,\n\tSYSCALL_WORK_BIT_SYSCALL_AUDIT = 4,\n\tSYSCALL_WORK_BIT_SYSCALL_USER_DISPATCH = 5,\n\tSYSCALL_WORK_BIT_SYSCALL_EXIT_TRAP = 6,\n};\n\nstruct seccomp_data {\n\tint nr;\n\t__u32 arch;\n\t__u64 instruction_pointer;\n\t__u64 args[6];\n};\n\nenum x86_pf_error_code {\n\tX86_PF_PROT = 1,\n\tX86_PF_WRITE = 2,\n\tX86_PF_USER = 4,\n\tX86_PF_RSVD = 8,\n\tX86_PF_INSTR = 16,\n\tX86_PF_PK = 32,\n\tX86_PF_SGX = 32768,\n};\n\nstruct trace_event_raw_emulate_vsyscall {\n\tstruct trace_entry ent;\n\tint nr;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_emulate_vsyscall {};\n\ntypedef void (*btf_trace_emulate_vsyscall)(void *, int);\n\nenum {\n\tEMULATE = 0,\n\tXONLY = 1,\n\tNONE = 2,\n};\n\nenum perf_type_id {\n\tPERF_TYPE_HARDWARE = 0,\n\tPERF_TYPE_SOFTWARE = 1,\n\tPERF_TYPE_TRACEPOINT = 2,\n\tPERF_TYPE_HW_CACHE = 3,\n\tPERF_TYPE_RAW = 4,\n\tPERF_TYPE_BREAKPOINT = 5,\n\tPERF_TYPE_MAX = 6,\n};\n\nenum perf_hw_id {\n\tPERF_COUNT_HW_CPU_CYCLES = 0,\n\tPERF_COUNT_HW_INSTRUCTIONS = 1,\n\tPERF_COUNT_HW_CACHE_REFERENCES = 2,\n\tPERF_COUNT_HW_CACHE_MISSES = 3,\n\tPERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,\n\tPERF_COUNT_HW_BRANCH_MISSES = 5,\n\tPERF_COUNT_HW_BUS_CYCLES = 6,\n\tPERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,\n\tPERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,\n\tPERF_COUNT_HW_REF_CPU_CYCLES = 9,\n\tPERF_COUNT_HW_MAX = 10,\n};\n\nenum perf_hw_cache_id {\n\tPERF_COUNT_HW_CACHE_L1D = 0,\n\tPERF_COUNT_HW_CACHE_L1I = 1,\n\tPERF_COUNT_HW_CACHE_LL = 2,\n\tPERF_COUNT_HW_CACHE_DTLB = 3,\n\tPERF_COUNT_HW_CACHE_ITLB = 4,\n\tPERF_COUNT_HW_CACHE_BPU = 5,\n\tPERF_COUNT_HW_CACHE_NODE = 6,\n\tPERF_COUNT_HW_CACHE_MAX = 7,\n};\n\nenum perf_hw_cache_op_id {\n\tPERF_COUNT_HW_CACHE_OP_READ = 0,\n\tPERF_COUNT_HW_CACHE_OP_WRITE = 1,\n\tPERF_COUNT_HW_CACHE_OP_PREFETCH = 2,\n\tPERF_COUNT_HW_CACHE_OP_MAX = 3,\n};\n\nenum perf_hw_cache_op_result_id {\n\tPERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,\n\tPERF_COUNT_HW_CACHE_RESULT_MISS = 1,\n\tPERF_COUNT_HW_CACHE_RESULT_MAX = 2,\n};\n\nenum perf_event_sample_format {\n\tPERF_SAMPLE_IP = 1,\n\tPERF_SAMPLE_TID = 2,\n\tPERF_SAMPLE_TIME = 4,\n\tPERF_SAMPLE_ADDR = 8,\n\tPERF_SAMPLE_READ = 16,\n\tPERF_SAMPLE_CALLCHAIN = 32,\n\tPERF_SAMPLE_ID = 64,\n\tPERF_SAMPLE_CPU = 128,\n\tPERF_SAMPLE_PERIOD = 256,\n\tPERF_SAMPLE_STREAM_ID = 512,\n\tPERF_SAMPLE_RAW = 1024,\n\tPERF_SAMPLE_BRANCH_STACK = 2048,\n\tPERF_SAMPLE_REGS_USER = 4096,\n\tPERF_SAMPLE_STACK_USER = 8192,\n\tPERF_SAMPLE_WEIGHT = 16384,\n\tPERF_SAMPLE_DATA_SRC = 32768,\n\tPERF_SAMPLE_IDENTIFIER = 65536,\n\tPERF_SAMPLE_TRANSACTION = 131072,\n\tPERF_SAMPLE_REGS_INTR = 262144,\n\tPERF_SAMPLE_PHYS_ADDR = 524288,\n\tPERF_SAMPLE_AUX = 1048576,\n\tPERF_SAMPLE_CGROUP = 2097152,\n\tPERF_SAMPLE_DATA_PAGE_SIZE = 4194304,\n\tPERF_SAMPLE_CODE_PAGE_SIZE = 8388608,\n\tPERF_SAMPLE_MAX = 16777216,\n\t__PERF_SAMPLE_CALLCHAIN_EARLY = 0,\n};\n\nenum perf_branch_sample_type {\n\tPERF_SAMPLE_BRANCH_USER = 1,\n\tPERF_SAMPLE_BRANCH_KERNEL = 2,\n\tPERF_SAMPLE_BRANCH_HV = 4,\n\tPERF_SAMPLE_BRANCH_ANY = 8,\n\tPERF_SAMPLE_BRANCH_ANY_CALL = 16,\n\tPERF_SAMPLE_BRANCH_ANY_RETURN = 32,\n\tPERF_SAMPLE_BRANCH_IND_CALL = 64,\n\tPERF_SAMPLE_BRANCH_ABORT_TX = 128,\n\tPERF_SAMPLE_BRANCH_IN_TX = 256,\n\tPERF_SAMPLE_BRANCH_NO_TX = 512,\n\tPERF_SAMPLE_BRANCH_COND = 1024,\n\tPERF_SAMPLE_BRANCH_CALL_STACK = 2048,\n\tPERF_SAMPLE_BRANCH_IND_JUMP = 4096,\n\tPERF_SAMPLE_BRANCH_CALL = 8192,\n\tPERF_SAMPLE_BRANCH_NO_FLAGS = 16384,\n\tPERF_SAMPLE_BRANCH_NO_CYCLES = 32768,\n\tPERF_SAMPLE_BRANCH_TYPE_SAVE = 65536,\n\tPERF_SAMPLE_BRANCH_HW_INDEX = 131072,\n\tPERF_SAMPLE_BRANCH_MAX = 262144,\n};\n\nstruct perf_event_mmap_page {\n\t__u32 version;\n\t__u32 compat_version;\n\t__u32 lock;\n\t__u32 index;\n\t__s64 offset;\n\t__u64 time_enabled;\n\t__u64 time_running;\n\tunion {\n\t\t__u64 capabilities;\n\t\tstruct {\n\t\t\t__u64 cap_bit0: 1;\n\t\t\t__u64 cap_bit0_is_deprecated: 1;\n\t\t\t__u64 cap_user_rdpmc: 1;\n\t\t\t__u64 cap_user_time: 1;\n\t\t\t__u64 cap_user_time_zero: 1;\n\t\t\t__u64 cap_user_time_short: 1;\n\t\t\t__u64 cap_____res: 58;\n\t\t};\n\t};\n\t__u16 pmc_width;\n\t__u16 time_shift;\n\t__u32 time_mult;\n\t__u64 time_offset;\n\t__u64 time_zero;\n\t__u32 size;\n\t__u32 __reserved_1;\n\t__u64 time_cycles;\n\t__u64 time_mask;\n\t__u8 __reserved[928];\n\t__u64 data_head;\n\t__u64 data_tail;\n\t__u64 data_offset;\n\t__u64 data_size;\n\t__u64 aux_head;\n\t__u64 aux_tail;\n\t__u64 aux_offset;\n\t__u64 aux_size;\n};\n\nstruct pv_info {\n\tu16 extra_user_64bit_cs;\n\tconst char *name;\n};\n\nstruct ldt_struct {\n\tstruct desc_struct *entries;\n\tunsigned int nr_entries;\n\tint slot;\n};\n\nenum apic_delivery_modes {\n\tAPIC_DELIVERY_MODE_FIXED = 0,\n\tAPIC_DELIVERY_MODE_LOWESTPRIO = 1,\n\tAPIC_DELIVERY_MODE_SMI = 2,\n\tAPIC_DELIVERY_MODE_NMI = 4,\n\tAPIC_DELIVERY_MODE_INIT = 5,\n\tAPIC_DELIVERY_MODE_EXTINT = 7,\n};\n\nstruct physid_mask {\n\tlong unsigned int mask[512];\n};\n\ntypedef struct physid_mask physid_mask_t;\n\nstruct x86_pmu_capability {\n\tint version;\n\tint num_counters_gp;\n\tint num_counters_fixed;\n\tint bit_width_gp;\n\tint bit_width_fixed;\n\tunsigned int events_mask;\n\tint events_mask_len;\n};\n\nstruct debug_store {\n\tu64 bts_buffer_base;\n\tu64 bts_index;\n\tu64 bts_absolute_maximum;\n\tu64 bts_interrupt_threshold;\n\tu64 pebs_buffer_base;\n\tu64 pebs_index;\n\tu64 pebs_absolute_maximum;\n\tu64 pebs_interrupt_threshold;\n\tu64 pebs_event_reset[12];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum stack_type {\n\tSTACK_TYPE_UNKNOWN = 0,\n\tSTACK_TYPE_TASK = 1,\n\tSTACK_TYPE_IRQ = 2,\n\tSTACK_TYPE_SOFTIRQ = 3,\n\tSTACK_TYPE_ENTRY = 4,\n\tSTACK_TYPE_EXCEPTION = 5,\n\tSTACK_TYPE_EXCEPTION_LAST = 10,\n};\n\nstruct stack_info {\n\tenum stack_type type;\n\tlong unsigned int *begin;\n\tlong unsigned int *end;\n\tlong unsigned int *next_sp;\n};\n\nstruct stack_frame {\n\tstruct stack_frame *next_frame;\n\tlong unsigned int return_address;\n};\n\nstruct stack_frame_ia32 {\n\tu32 next_frame;\n\tu32 return_address;\n};\n\nstruct perf_guest_switch_msr {\n\tunsigned int msr;\n\tu64 host;\n\tu64 guest;\n};\n\nstruct perf_guest_info_callbacks {\n\tint (*is_in_guest)();\n\tint (*is_user_mode)();\n\tlong unsigned int (*get_guest_ip)();\n\tvoid (*handle_intel_pt_intr)();\n};\n\nstruct device_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct device *, struct device_attribute *, char *);\n\tssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t);\n};\n\nenum perf_event_x86_regs {\n\tPERF_REG_X86_AX = 0,\n\tPERF_REG_X86_BX = 1,\n\tPERF_REG_X86_CX = 2,\n\tPERF_REG_X86_DX = 3,\n\tPERF_REG_X86_SI = 4,\n\tPERF_REG_X86_DI = 5,\n\tPERF_REG_X86_BP = 6,\n\tPERF_REG_X86_SP = 7,\n\tPERF_REG_X86_IP = 8,\n\tPERF_REG_X86_FLAGS = 9,\n\tPERF_REG_X86_CS = 10,\n\tPERF_REG_X86_SS = 11,\n\tPERF_REG_X86_DS = 12,\n\tPERF_REG_X86_ES = 13,\n\tPERF_REG_X86_FS = 14,\n\tPERF_REG_X86_GS = 15,\n\tPERF_REG_X86_R8 = 16,\n\tPERF_REG_X86_R9 = 17,\n\tPERF_REG_X86_R10 = 18,\n\tPERF_REG_X86_R11 = 19,\n\tPERF_REG_X86_R12 = 20,\n\tPERF_REG_X86_R13 = 21,\n\tPERF_REG_X86_R14 = 22,\n\tPERF_REG_X86_R15 = 23,\n\tPERF_REG_X86_32_MAX = 16,\n\tPERF_REG_X86_64_MAX = 24,\n\tPERF_REG_X86_XMM0 = 32,\n\tPERF_REG_X86_XMM1 = 34,\n\tPERF_REG_X86_XMM2 = 36,\n\tPERF_REG_X86_XMM3 = 38,\n\tPERF_REG_X86_XMM4 = 40,\n\tPERF_REG_X86_XMM5 = 42,\n\tPERF_REG_X86_XMM6 = 44,\n\tPERF_REG_X86_XMM7 = 46,\n\tPERF_REG_X86_XMM8 = 48,\n\tPERF_REG_X86_XMM9 = 50,\n\tPERF_REG_X86_XMM10 = 52,\n\tPERF_REG_X86_XMM11 = 54,\n\tPERF_REG_X86_XMM12 = 56,\n\tPERF_REG_X86_XMM13 = 58,\n\tPERF_REG_X86_XMM14 = 60,\n\tPERF_REG_X86_XMM15 = 62,\n\tPERF_REG_X86_XMM_MAX = 64,\n};\n\nstruct perf_callchain_entry_ctx {\n\tstruct perf_callchain_entry *entry;\n\tu32 max_stack;\n\tu32 nr;\n\tshort int contexts;\n\tbool contexts_maxed;\n};\n\nstruct perf_pmu_events_attr {\n\tstruct device_attribute attr;\n\tu64 id;\n\tconst char *event_str;\n};\n\nstruct perf_pmu_events_ht_attr {\n\tstruct device_attribute attr;\n\tu64 id;\n\tconst char *event_str_ht;\n\tconst char *event_str_noht;\n};\n\nstruct apic {\n\tvoid (*eoi_write)(u32, u32);\n\tvoid (*native_eoi_write)(u32, u32);\n\tvoid (*write)(u32, u32);\n\tu32 (*read)(u32);\n\tvoid (*wait_icr_idle)();\n\tu32 (*safe_wait_icr_idle)();\n\tvoid (*send_IPI)(int, int);\n\tvoid (*send_IPI_mask)(const struct cpumask *, int);\n\tvoid (*send_IPI_mask_allbutself)(const struct cpumask *, int);\n\tvoid (*send_IPI_allbutself)(int);\n\tvoid (*send_IPI_all)(int);\n\tvoid (*send_IPI_self)(int);\n\tu32 disable_esr;\n\tenum apic_delivery_modes delivery_mode;\n\tbool dest_mode_logical;\n\tu32 (*calc_dest_apicid)(unsigned int);\n\tu64 (*icr_read)();\n\tvoid (*icr_write)(u32, u32);\n\tint (*probe)();\n\tint (*acpi_madt_oem_check)(char *, char *);\n\tint (*apic_id_valid)(u32);\n\tint (*apic_id_registered)();\n\tbool (*check_apicid_used)(physid_mask_t *, int);\n\tvoid (*init_apic_ldr)();\n\tvoid (*ioapic_phys_id_map)(physid_mask_t *, physid_mask_t *);\n\tvoid (*setup_apic_routing)();\n\tint (*cpu_present_to_apicid)(int);\n\tvoid (*apicid_to_cpu_present)(int, physid_mask_t *);\n\tint (*check_phys_apicid_present)(int);\n\tint (*phys_pkg_id)(int, int);\n\tu32 (*get_apic_id)(long unsigned int);\n\tu32 (*set_apic_id)(unsigned int);\n\tint (*wakeup_secondary_cpu)(int, long unsigned int);\n\tvoid (*inquire_remote_apic)(int);\n\tchar *name;\n};\n\nenum {\n\tNMI_LOCAL = 0,\n\tNMI_UNKNOWN = 1,\n\tNMI_SERR = 2,\n\tNMI_IO_CHECK = 3,\n\tNMI_MAX = 4,\n};\n\ntypedef int (*nmi_handler_t)(unsigned int, struct pt_regs *);\n\nstruct nmiaction {\n\tstruct list_head list;\n\tnmi_handler_t handler;\n\tu64 max_duration;\n\tlong unsigned int flags;\n\tconst char *name;\n};\n\nstruct gdt_page {\n\tstruct desc_struct gdt[16];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct cyc2ns_data {\n\tu32 cyc2ns_mul;\n\tu32 cyc2ns_shift;\n\tu64 cyc2ns_offset;\n};\n\nstruct unwind_state {\n\tstruct stack_info stack_info;\n\tlong unsigned int stack_mask;\n\tstruct task_struct *task;\n\tint graph_idx;\n\tbool error;\n\tbool signal;\n\tbool full_regs;\n\tlong unsigned int sp;\n\tlong unsigned int bp;\n\tlong unsigned int ip;\n\tstruct pt_regs *regs;\n\tstruct pt_regs *prev_regs;\n};\n\nenum extra_reg_type {\n\tEXTRA_REG_NONE = 4294967295,\n\tEXTRA_REG_RSP_0 = 0,\n\tEXTRA_REG_RSP_1 = 1,\n\tEXTRA_REG_LBR = 2,\n\tEXTRA_REG_LDLAT = 3,\n\tEXTRA_REG_FE = 4,\n\tEXTRA_REG_MAX = 5,\n};\n\nstruct event_constraint {\n\tunion {\n\t\tlong unsigned int idxmsk[1];\n\t\tu64 idxmsk64;\n\t};\n\tu64 code;\n\tu64 cmask;\n\tint weight;\n\tint overlap;\n\tint flags;\n\tunsigned int size;\n};\n\nstruct amd_nb {\n\tint nb_id;\n\tint refcnt;\n\tstruct perf_event *owners[64];\n\tstruct event_constraint event_constraints[64];\n};\n\nstruct er_account {\n\traw_spinlock_t lock;\n\tu64 config;\n\tu64 reg;\n\tatomic_t ref;\n};\n\nstruct intel_shared_regs {\n\tstruct er_account regs[5];\n\tint refcnt;\n\tunsigned int core_id;\n};\n\nenum intel_excl_state_type {\n\tINTEL_EXCL_UNUSED = 0,\n\tINTEL_EXCL_SHARED = 1,\n\tINTEL_EXCL_EXCLUSIVE = 2,\n};\n\nstruct intel_excl_states {\n\tenum intel_excl_state_type state[64];\n\tbool sched_started;\n};\n\nstruct intel_excl_cntrs {\n\traw_spinlock_t lock;\n\tstruct intel_excl_states states[2];\n\tunion {\n\t\tu16 has_exclusive[2];\n\t\tu32 exclusive_present;\n\t};\n\tint refcnt;\n\tunsigned int core_id;\n};\n\nenum {\n\tX86_PERF_KFREE_SHARED = 0,\n\tX86_PERF_KFREE_EXCL = 1,\n\tX86_PERF_KFREE_MAX = 2,\n};\n\nstruct cpu_hw_events {\n\tstruct perf_event *events[64];\n\tlong unsigned int active_mask[1];\n\tlong unsigned int running[1];\n\tint enabled;\n\tint n_events;\n\tint n_added;\n\tint n_txn;\n\tint n_txn_pair;\n\tint n_txn_metric;\n\tint assign[64];\n\tu64 tags[64];\n\tstruct perf_event *event_list[64];\n\tstruct event_constraint *event_constraint[64];\n\tint n_excl;\n\tunsigned int txn_flags;\n\tint is_fake;\n\tstruct debug_store *ds;\n\tvoid *ds_pebs_vaddr;\n\tvoid *ds_bts_vaddr;\n\tu64 pebs_enabled;\n\tint n_pebs;\n\tint n_large_pebs;\n\tint n_pebs_via_pt;\n\tint pebs_output;\n\tu64 pebs_data_cfg;\n\tu64 active_pebs_data_cfg;\n\tint pebs_record_size;\n\tint lbr_users;\n\tint lbr_pebs_users;\n\tstruct perf_branch_stack lbr_stack;\n\tstruct perf_branch_entry lbr_entries[32];\n\tunion {\n\t\tstruct er_account *lbr_sel;\n\t\tstruct er_account *lbr_ctl;\n\t};\n\tu64 br_sel;\n\tvoid *last_task_ctx;\n\tint last_log_id;\n\tint lbr_select;\n\tvoid *lbr_xsave;\n\tu64 intel_ctrl_guest_mask;\n\tu64 intel_ctrl_host_mask;\n\tstruct perf_guest_switch_msr guest_switch_msrs[64];\n\tu64 intel_cp_status;\n\tstruct intel_shared_regs *shared_regs;\n\tstruct event_constraint *constraint_list;\n\tstruct intel_excl_cntrs *excl_cntrs;\n\tint excl_thread_id;\n\tu64 tfa_shadow;\n\tint n_metric;\n\tstruct amd_nb *amd_nb;\n\tu64 perf_ctr_virt_mask;\n\tint n_pair;\n\tvoid *kfree_on_online[2];\n};\n\nstruct extra_reg {\n\tunsigned int event;\n\tunsigned int msr;\n\tu64 config_mask;\n\tu64 valid_mask;\n\tint idx;\n\tbool extra_msr_access;\n};\n\nunion perf_capabilities {\n\tstruct {\n\t\tu64 lbr_format: 6;\n\t\tu64 pebs_trap: 1;\n\t\tu64 pebs_arch_reg: 1;\n\t\tu64 pebs_format: 4;\n\t\tu64 smm_freeze: 1;\n\t\tu64 full_width_write: 1;\n\t\tu64 pebs_baseline: 1;\n\t\tu64 perf_metrics: 1;\n\t\tu64 pebs_output_pt_available: 1;\n\t\tu64 anythread_deprecated: 1;\n\t};\n\tu64 capabilities;\n};\n\nstruct x86_pmu_quirk {\n\tstruct x86_pmu_quirk *next;\n\tvoid (*func)();\n};\n\nenum {\n\tx86_lbr_exclusive_lbr = 0,\n\tx86_lbr_exclusive_bts = 1,\n\tx86_lbr_exclusive_pt = 2,\n\tx86_lbr_exclusive_max = 3,\n};\n\nstruct x86_pmu {\n\tconst char *name;\n\tint version;\n\tint (*handle_irq)(struct pt_regs *);\n\tvoid (*disable_all)();\n\tvoid (*enable_all)(int);\n\tvoid (*enable)(struct perf_event *);\n\tvoid (*disable)(struct perf_event *);\n\tvoid (*add)(struct perf_event *);\n\tvoid (*del)(struct perf_event *);\n\tvoid (*read)(struct perf_event *);\n\tint (*hw_config)(struct perf_event *);\n\tint (*schedule_events)(struct cpu_hw_events *, int, int *);\n\tunsigned int eventsel;\n\tunsigned int perfctr;\n\tint (*addr_offset)(int, bool);\n\tint (*rdpmc_index)(int);\n\tu64 (*event_map)(int);\n\tint max_events;\n\tint num_counters;\n\tint num_counters_fixed;\n\tint cntval_bits;\n\tu64 cntval_mask;\n\tunion {\n\t\tlong unsigned int events_maskl;\n\t\tlong unsigned int events_mask[1];\n\t};\n\tint events_mask_len;\n\tint apic;\n\tu64 max_period;\n\tstruct event_constraint * (*get_event_constraints)(struct cpu_hw_events *, int, struct perf_event *);\n\tvoid (*put_event_constraints)(struct cpu_hw_events *, struct perf_event *);\n\tvoid (*start_scheduling)(struct cpu_hw_events *);\n\tvoid (*commit_scheduling)(struct cpu_hw_events *, int, int);\n\tvoid (*stop_scheduling)(struct cpu_hw_events *);\n\tstruct event_constraint *event_constraints;\n\tstruct x86_pmu_quirk *quirks;\n\tint perfctr_second_write;\n\tu64 (*limit_period)(struct perf_event *, u64);\n\tunsigned int late_ack: 1;\n\tunsigned int enabled_ack: 1;\n\tunsigned int counter_freezing: 1;\n\tint attr_rdpmc_broken;\n\tint attr_rdpmc;\n\tstruct attribute **format_attrs;\n\tssize_t (*events_sysfs_show)(char *, u64);\n\tconst struct attribute_group **attr_update;\n\tlong unsigned int attr_freeze_on_smi;\n\tint (*cpu_prepare)(int);\n\tvoid (*cpu_starting)(int);\n\tvoid (*cpu_dying)(int);\n\tvoid (*cpu_dead)(int);\n\tvoid (*check_microcode)();\n\tvoid (*sched_task)(struct perf_event_context *, bool);\n\tu64 intel_ctrl;\n\tunion perf_capabilities intel_cap;\n\tunsigned int bts: 1;\n\tunsigned int bts_active: 1;\n\tunsigned int pebs: 1;\n\tunsigned int pebs_active: 1;\n\tunsigned int pebs_broken: 1;\n\tunsigned int pebs_prec_dist: 1;\n\tunsigned int pebs_no_tlb: 1;\n\tunsigned int pebs_no_isolation: 1;\n\tint pebs_record_size;\n\tint pebs_buffer_size;\n\tint max_pebs_events;\n\tvoid (*drain_pebs)(struct pt_regs *, struct perf_sample_data *);\n\tstruct event_constraint *pebs_constraints;\n\tvoid (*pebs_aliases)(struct perf_event *);\n\tlong unsigned int large_pebs_flags;\n\tu64 rtm_abort_event;\n\tunsigned int lbr_tos;\n\tunsigned int lbr_from;\n\tunsigned int lbr_to;\n\tunsigned int lbr_info;\n\tunsigned int lbr_nr;\n\tunion {\n\t\tu64 lbr_sel_mask;\n\t\tu64 lbr_ctl_mask;\n\t};\n\tunion {\n\t\tconst int *lbr_sel_map;\n\t\tint *lbr_ctl_map;\n\t};\n\tbool lbr_double_abort;\n\tbool lbr_pt_coexist;\n\tunsigned int lbr_depth_mask: 8;\n\tunsigned int lbr_deep_c_reset: 1;\n\tunsigned int lbr_lip: 1;\n\tunsigned int lbr_cpl: 1;\n\tunsigned int lbr_filter: 1;\n\tunsigned int lbr_call_stack: 1;\n\tunsigned int lbr_mispred: 1;\n\tunsigned int lbr_timed_lbr: 1;\n\tunsigned int lbr_br_type: 1;\n\tvoid (*lbr_reset)();\n\tvoid (*lbr_read)(struct cpu_hw_events *);\n\tvoid (*lbr_save)(void *);\n\tvoid (*lbr_restore)(void *);\n\tatomic_t lbr_exclusive[3];\n\tu64 (*update_topdown_event)(struct perf_event *);\n\tint (*set_topdown_event_period)(struct perf_event *);\n\tvoid (*swap_task_ctx)(struct perf_event_context *, struct perf_event_context *);\n\tunsigned int amd_nb_constraints: 1;\n\tu64 perf_ctr_pair_en;\n\tstruct extra_reg *extra_regs;\n\tunsigned int flags;\n\tstruct perf_guest_switch_msr * (*guest_get_msrs)(int *);\n\tint (*check_period)(struct perf_event *, u64);\n\tint (*aux_output_match)(struct perf_event *);\n};\n\nstruct sched_state {\n\tint weight;\n\tint event;\n\tint counter;\n\tint unassigned;\n\tint nr_gp;\n\tu64 used;\n};\n\nstruct perf_sched {\n\tint max_weight;\n\tint max_events;\n\tint max_gp;\n\tint saved_states;\n\tstruct event_constraint **constraints;\n\tstruct sched_state state;\n\tstruct sched_state saved[2];\n};\n\nstruct perf_msr {\n\tu64 msr;\n\tstruct attribute_group *grp;\n\tbool (*test)(int, void *);\n\tbool no_check;\n};\n\nstruct kobj_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct kobject *, struct kobj_attribute *, char *);\n\tssize_t (*store)(struct kobject *, struct kobj_attribute *, const char *, size_t);\n};\n\nstruct amd_uncore {\n\tint id;\n\tint refcnt;\n\tint cpu;\n\tint num_counters;\n\tint rdpmc_base;\n\tu32 msr_base;\n\tcpumask_t *active_mask;\n\tstruct pmu *pmu;\n\tstruct perf_event *events[6];\n\tstruct hlist_node node;\n};\n\ntypedef int pci_power_t;\n\ntypedef unsigned int pci_channel_state_t;\n\ntypedef short unsigned int pci_dev_flags_t;\n\nstruct pci_bus;\n\nstruct pci_slot;\n\nstruct aer_stats;\n\nstruct rcec_ea;\n\nstruct pci_driver;\n\nstruct pcie_link_state;\n\nstruct pci_vpd;\n\nstruct pci_sriov;\n\nstruct pci_p2pdma;\n\nstruct pci_dev {\n\tstruct list_head bus_list;\n\tstruct pci_bus *bus;\n\tstruct pci_bus *subordinate;\n\tvoid *sysdata;\n\tstruct proc_dir_entry *procent;\n\tstruct pci_slot *slot;\n\tunsigned int devfn;\n\tshort unsigned int vendor;\n\tshort unsigned int device;\n\tshort unsigned int subsystem_vendor;\n\tshort unsigned int subsystem_device;\n\tunsigned int class;\n\tu8 revision;\n\tu8 hdr_type;\n\tu16 aer_cap;\n\tstruct aer_stats *aer_stats;\n\tstruct rcec_ea *rcec_ea;\n\tstruct pci_dev *rcec;\n\tu8 pcie_cap;\n\tu8 msi_cap;\n\tu8 msix_cap;\n\tu8 pcie_mpss: 3;\n\tu8 rom_base_reg;\n\tu8 pin;\n\tu16 pcie_flags_reg;\n\tlong unsigned int *dma_alias_mask;\n\tstruct pci_driver *driver;\n\tu64 dma_mask;\n\tstruct device_dma_parameters dma_parms;\n\tpci_power_t current_state;\n\tunsigned int imm_ready: 1;\n\tu8 pm_cap;\n\tunsigned int pme_support: 5;\n\tunsigned int pme_poll: 1;\n\tunsigned int d1_support: 1;\n\tunsigned int d2_support: 1;\n\tunsigned int no_d1d2: 1;\n\tunsigned int no_d3cold: 1;\n\tunsigned int bridge_d3: 1;\n\tunsigned int d3cold_allowed: 1;\n\tunsigned int mmio_always_on: 1;\n\tunsigned int wakeup_prepared: 1;\n\tunsigned int runtime_d3cold: 1;\n\tunsigned int skip_bus_pm: 1;\n\tunsigned int ignore_hotplug: 1;\n\tunsigned int hotplug_user_indicators: 1;\n\tunsigned int clear_retrain_link: 1;\n\tunsigned int d3hot_delay;\n\tunsigned int d3cold_delay;\n\tstruct pcie_link_state *link_state;\n\tunsigned int ltr_path: 1;\n\tu16 l1ss;\n\tunsigned int eetlp_prefix_path: 1;\n\tpci_channel_state_t error_state;\n\tstruct device dev;\n\tint cfg_size;\n\tunsigned int irq;\n\tstruct resource resource[17];\n\tbool match_driver;\n\tunsigned int transparent: 1;\n\tunsigned int io_window: 1;\n\tunsigned int pref_window: 1;\n\tunsigned int pref_64_window: 1;\n\tunsigned int multifunction: 1;\n\tunsigned int is_busmaster: 1;\n\tunsigned int no_msi: 1;\n\tunsigned int no_64bit_msi: 1;\n\tunsigned int block_cfg_access: 1;\n\tunsigned int broken_parity_status: 1;\n\tunsigned int irq_reroute_variant: 2;\n\tunsigned int msi_enabled: 1;\n\tunsigned int msix_enabled: 1;\n\tunsigned int ari_enabled: 1;\n\tunsigned int ats_enabled: 1;\n\tunsigned int pasid_enabled: 1;\n\tunsigned int pri_enabled: 1;\n\tunsigned int is_managed: 1;\n\tunsigned int needs_freset: 1;\n\tunsigned int state_saved: 1;\n\tunsigned int is_physfn: 1;\n\tunsigned int is_virtfn: 1;\n\tunsigned int reset_fn: 1;\n\tunsigned int is_hotplug_bridge: 1;\n\tunsigned int shpc_managed: 1;\n\tunsigned int is_thunderbolt: 1;\n\tunsigned int untrusted: 1;\n\tunsigned int external_facing: 1;\n\tunsigned int broken_intx_masking: 1;\n\tunsigned int io_window_1k: 1;\n\tunsigned int irq_managed: 1;\n\tunsigned int non_compliant_bars: 1;\n\tunsigned int is_probed: 1;\n\tunsigned int link_active_reporting: 1;\n\tunsigned int no_vf_scan: 1;\n\tunsigned int no_command_memory: 1;\n\tpci_dev_flags_t dev_flags;\n\tatomic_t enable_cnt;\n\tu32 saved_config_space[16];\n\tstruct hlist_head saved_cap_space;\n\tstruct bin_attribute *rom_attr;\n\tint rom_attr_enabled;\n\tstruct bin_attribute *res_attr[17];\n\tstruct bin_attribute *res_attr_wc[17];\n\tunsigned int broken_cmd_compl: 1;\n\tunsigned int ptm_root: 1;\n\tunsigned int ptm_enabled: 1;\n\tu8 ptm_granularity;\n\tconst struct attribute_group **msi_irq_groups;\n\tstruct pci_vpd *vpd;\n\tu16 dpc_cap;\n\tunsigned int dpc_rp_extensions: 1;\n\tu8 dpc_rp_log_size;\n\tunion {\n\t\tstruct pci_sriov *sriov;\n\t\tstruct pci_dev *physfn;\n\t};\n\tu16 ats_cap;\n\tu8 ats_stu;\n\tu16 pri_cap;\n\tu32 pri_reqs_alloc;\n\tunsigned int pasid_required: 1;\n\tu16 pasid_cap;\n\tu16 pasid_features;\n\tstruct pci_p2pdma *p2pdma;\n\tu16 acs_cap;\n\tphys_addr_t rom;\n\tsize_t romlen;\n\tchar *driver_override;\n\tlong unsigned int priv_flags;\n};\n\nstruct pci_device_id {\n\t__u32 vendor;\n\t__u32 device;\n\t__u32 subvendor;\n\t__u32 subdevice;\n\t__u32 class;\n\t__u32 class_mask;\n\tkernel_ulong_t driver_data;\n};\n\nstruct hotplug_slot;\n\nstruct pci_slot {\n\tstruct pci_bus *bus;\n\tstruct list_head list;\n\tstruct hotplug_slot *hotplug;\n\tunsigned char number;\n\tstruct kobject kobj;\n};\n\ntypedef short unsigned int pci_bus_flags_t;\n\nstruct pci_ops;\n\nstruct msi_controller;\n\nstruct pci_bus {\n\tstruct list_head node;\n\tstruct pci_bus *parent;\n\tstruct list_head children;\n\tstruct list_head devices;\n\tstruct pci_dev *self;\n\tstruct list_head slots;\n\tstruct resource *resource[4];\n\tstruct list_head resources;\n\tstruct resource busn_res;\n\tstruct pci_ops *ops;\n\tstruct msi_controller *msi;\n\tvoid *sysdata;\n\tstruct proc_dir_entry *procdir;\n\tunsigned char number;\n\tunsigned char primary;\n\tunsigned char max_bus_speed;\n\tunsigned char cur_bus_speed;\n\tchar name[48];\n\tshort unsigned int bridge_ctl;\n\tpci_bus_flags_t bus_flags;\n\tstruct device *bridge;\n\tstruct device dev;\n\tstruct bin_attribute *legacy_io;\n\tstruct bin_attribute *legacy_mem;\n\tunsigned int is_added: 1;\n};\n\nenum {\n\tPCI_STD_RESOURCES = 0,\n\tPCI_STD_RESOURCE_END = 5,\n\tPCI_ROM_RESOURCE = 6,\n\tPCI_IOV_RESOURCES = 7,\n\tPCI_IOV_RESOURCE_END = 12,\n\tPCI_BRIDGE_RESOURCES = 13,\n\tPCI_BRIDGE_RESOURCE_END = 16,\n\tPCI_NUM_RESOURCES = 17,\n\tDEVICE_COUNT_RESOURCE = 17,\n};\n\ntypedef unsigned int pcie_reset_state_t;\n\nstruct pci_dynids {\n\tspinlock_t lock;\n\tstruct list_head list;\n};\n\nstruct pci_error_handlers;\n\nstruct pci_driver {\n\tstruct list_head node;\n\tconst char *name;\n\tconst struct pci_device_id *id_table;\n\tint (*probe)(struct pci_dev *, const struct pci_device_id *);\n\tvoid (*remove)(struct pci_dev *);\n\tint (*suspend)(struct pci_dev *, pm_message_t);\n\tint (*resume)(struct pci_dev *);\n\tvoid (*shutdown)(struct pci_dev *);\n\tint (*sriov_configure)(struct pci_dev *, int);\n\tconst struct pci_error_handlers *err_handler;\n\tconst struct attribute_group **groups;\n\tstruct device_driver driver;\n\tstruct pci_dynids dynids;\n};\n\nstruct pci_ops {\n\tint (*add_bus)(struct pci_bus *);\n\tvoid (*remove_bus)(struct pci_bus *);\n\tvoid * (*map_bus)(struct pci_bus *, unsigned int, int);\n\tint (*read)(struct pci_bus *, unsigned int, int, int, u32 *);\n\tint (*write)(struct pci_bus *, unsigned int, int, int, u32);\n};\n\ntypedef unsigned int pci_ers_result_t;\n\nstruct pci_error_handlers {\n\tpci_ers_result_t (*error_detected)(struct pci_dev *, pci_channel_state_t);\n\tpci_ers_result_t (*mmio_enabled)(struct pci_dev *);\n\tpci_ers_result_t (*slot_reset)(struct pci_dev *);\n\tvoid (*reset_prepare)(struct pci_dev *);\n\tvoid (*reset_done)(struct pci_dev *);\n\tvoid (*resume)(struct pci_dev *);\n};\n\nstruct syscore_ops {\n\tstruct list_head node;\n\tint (*suspend)();\n\tvoid (*resume)();\n\tvoid (*shutdown)();\n};\n\nenum ibs_states {\n\tIBS_ENABLED = 0,\n\tIBS_STARTED = 1,\n\tIBS_STOPPING = 2,\n\tIBS_STOPPED = 3,\n\tIBS_MAX_STATES = 4,\n};\n\nstruct cpu_perf_ibs {\n\tstruct perf_event *event;\n\tlong unsigned int state[1];\n};\n\nstruct perf_ibs {\n\tstruct pmu pmu;\n\tunsigned int msr;\n\tu64 config_mask;\n\tu64 cnt_mask;\n\tu64 enable_mask;\n\tu64 valid_mask;\n\tu64 max_period;\n\tlong unsigned int offset_mask[1];\n\tint offset_max;\n\tunsigned int fetch_count_reset_broken: 1;\n\tstruct cpu_perf_ibs *pcpu;\n\tstruct attribute **format_attrs;\n\tstruct attribute_group format_group;\n\tconst struct attribute_group *attr_groups[2];\n\tu64 (*get_count)(u64);\n};\n\nstruct perf_ibs_data {\n\tu32 size;\n\tunion {\n\t\tu32 data[0];\n\t\tu32 caps;\n\t};\n\tu64 regs[8];\n};\n\nstruct amd_iommu;\n\nstruct perf_amd_iommu {\n\tstruct list_head list;\n\tstruct pmu pmu;\n\tstruct amd_iommu *iommu;\n\tchar name[16];\n\tu8 max_banks;\n\tu8 max_counters;\n\tu64 cntr_assign_mask;\n\traw_spinlock_t lock;\n};\n\nstruct amd_iommu_event_desc {\n\tstruct kobj_attribute attr;\n\tconst char *event;\n};\n\nenum perf_msr_id {\n\tPERF_MSR_TSC = 0,\n\tPERF_MSR_APERF = 1,\n\tPERF_MSR_MPERF = 2,\n\tPERF_MSR_PPERF = 3,\n\tPERF_MSR_SMI = 4,\n\tPERF_MSR_PTSC = 5,\n\tPERF_MSR_IRPERF = 6,\n\tPERF_MSR_THERM = 7,\n\tPERF_MSR_EVENT_MAX = 8,\n};\n\nstruct x86_cpu_desc {\n\tu8 x86_family;\n\tu8 x86_vendor;\n\tu8 x86_model;\n\tu8 x86_stepping;\n\tu32 x86_microcode_rev;\n};\n\nunion cpuid10_eax {\n\tstruct {\n\t\tunsigned int version_id: 8;\n\t\tunsigned int num_counters: 8;\n\t\tunsigned int bit_width: 8;\n\t\tunsigned int mask_length: 8;\n\t} split;\n\tunsigned int full;\n};\n\nunion cpuid10_ebx {\n\tstruct {\n\t\tunsigned int no_unhalted_core_cycles: 1;\n\t\tunsigned int no_instructions_retired: 1;\n\t\tunsigned int no_unhalted_reference_cycles: 1;\n\t\tunsigned int no_llc_reference: 1;\n\t\tunsigned int no_llc_misses: 1;\n\t\tunsigned int no_branch_instruction_retired: 1;\n\t\tunsigned int no_branch_misses_retired: 1;\n\t} split;\n\tunsigned int full;\n};\n\nunion cpuid10_edx {\n\tstruct {\n\t\tunsigned int num_counters_fixed: 5;\n\t\tunsigned int bit_width_fixed: 8;\n\t\tunsigned int reserved1: 2;\n\t\tunsigned int anythread_deprecated: 1;\n\t\tunsigned int reserved2: 16;\n\t} split;\n\tunsigned int full;\n};\n\nenum {\n\tLBR_FORMAT_32 = 0,\n\tLBR_FORMAT_LIP = 1,\n\tLBR_FORMAT_EIP = 2,\n\tLBR_FORMAT_EIP_FLAGS = 3,\n\tLBR_FORMAT_EIP_FLAGS2 = 4,\n\tLBR_FORMAT_INFO = 5,\n\tLBR_FORMAT_TIME = 6,\n\tLBR_FORMAT_MAX_KNOWN = 6,\n};\n\nunion x86_pmu_config {\n\tstruct {\n\t\tu64 event: 8;\n\t\tu64 umask: 8;\n\t\tu64 usr: 1;\n\t\tu64 os: 1;\n\t\tu64 edge: 1;\n\t\tu64 pc: 1;\n\t\tu64 interrupt: 1;\n\t\tu64 __reserved1: 1;\n\t\tu64 en: 1;\n\t\tu64 inv: 1;\n\t\tu64 cmask: 8;\n\t\tu64 event2: 4;\n\t\tu64 __reserved2: 4;\n\t\tu64 go: 1;\n\t\tu64 ho: 1;\n\t} bits;\n\tu64 value;\n};\n\nenum pageflags {\n\tPG_locked = 0,\n\tPG_referenced = 1,\n\tPG_uptodate = 2,\n\tPG_dirty = 3,\n\tPG_lru = 4,\n\tPG_active = 5,\n\tPG_workingset = 6,\n\tPG_waiters = 7,\n\tPG_error = 8,\n\tPG_slab = 9,\n\tPG_owner_priv_1 = 10,\n\tPG_arch_1 = 11,\n\tPG_reserved = 12,\n\tPG_private = 13,\n\tPG_private_2 = 14,\n\tPG_writeback = 15,\n\tPG_head = 16,\n\tPG_mappedtodisk = 17,\n\tPG_reclaim = 18,\n\tPG_swapbacked = 19,\n\tPG_unevictable = 20,\n\tPG_mlocked = 21,\n\tPG_uncached = 22,\n\tPG_hwpoison = 23,\n\tPG_arch_2 = 24,\n\t__NR_PAGEFLAGS = 25,\n\tPG_checked = 10,\n\tPG_swapcache = 10,\n\tPG_fscache = 14,\n\tPG_pinned = 10,\n\tPG_savepinned = 3,\n\tPG_foreign = 10,\n\tPG_xen_remapped = 10,\n\tPG_slob_free = 13,\n\tPG_double_map = 6,\n\tPG_isolated = 18,\n\tPG_reported = 2,\n};\n\nstruct bts_ctx {\n\tstruct perf_output_handle handle;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct debug_store ds_back;\n\tint state;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum {\n\tBTS_STATE_STOPPED = 0,\n\tBTS_STATE_INACTIVE = 1,\n\tBTS_STATE_ACTIVE = 2,\n};\n\nstruct bts_phys {\n\tstruct page *page;\n\tlong unsigned int size;\n\tlong unsigned int offset;\n\tlong unsigned int displacement;\n};\n\nstruct bts_buffer {\n\tsize_t real_size;\n\tunsigned int nr_pages;\n\tunsigned int nr_bufs;\n\tunsigned int cur_buf;\n\tbool snapshot;\n\tlocal_t data_size;\n\tlocal_t head;\n\tlong unsigned int end;\n\tvoid **data_pages;\n\tstruct bts_phys buf[0];\n};\n\nstruct lbr_entry {\n\tu64 from;\n\tu64 to;\n\tu64 info;\n};\n\nstruct x86_hw_tss {\n\tu32 reserved1;\n\tu64 sp0;\n\tu64 sp1;\n\tu64 sp2;\n\tu64 reserved2;\n\tu64 ist[7];\n\tu32 reserved3;\n\tu32 reserved4;\n\tu16 reserved5;\n\tu16 io_bitmap_base;\n} __attribute__((packed));\n\nstruct entry_stack {\n\tchar stack[4096];\n};\n\nstruct entry_stack_page {\n\tstruct entry_stack stack;\n};\n\nstruct x86_io_bitmap {\n\tu64 prev_sequence;\n\tunsigned int prev_max;\n\tlong unsigned int bitmap[1025];\n\tlong unsigned int mapall[1025];\n};\n\nstruct tss_struct {\n\tstruct x86_hw_tss x86_tss;\n\tstruct x86_io_bitmap io_bitmap;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct debug_store_buffers {\n\tchar bts_buffer[65536];\n\tchar pebs_buffer[65536];\n};\n\nstruct cea_exception_stacks {\n\tchar DF_stack_guard[4096];\n\tchar DF_stack[4096];\n\tchar NMI_stack_guard[4096];\n\tchar NMI_stack[4096];\n\tchar DB_stack_guard[4096];\n\tchar DB_stack[4096];\n\tchar MCE_stack_guard[4096];\n\tchar MCE_stack[4096];\n\tchar VC_stack_guard[4096];\n\tchar VC_stack[4096];\n\tchar VC2_stack_guard[4096];\n\tchar VC2_stack[4096];\n\tchar IST_top_guard[4096];\n};\n\nstruct cpu_entry_area {\n\tchar gdt[4096];\n\tstruct entry_stack_page entry_stack_page;\n\tstruct tss_struct tss;\n\tstruct cea_exception_stacks estacks;\n\tstruct debug_store cpu_debug_store;\n\tstruct debug_store_buffers cpu_debug_buffers;\n};\n\nstruct pebs_basic {\n\tu64 format_size;\n\tu64 ip;\n\tu64 applicable_counters;\n\tu64 tsc;\n};\n\nstruct pebs_meminfo {\n\tu64 address;\n\tu64 aux;\n\tu64 latency;\n\tu64 tsx_tuning;\n};\n\nstruct pebs_gprs {\n\tu64 flags;\n\tu64 ip;\n\tu64 ax;\n\tu64 cx;\n\tu64 dx;\n\tu64 bx;\n\tu64 sp;\n\tu64 bp;\n\tu64 si;\n\tu64 di;\n\tu64 r8;\n\tu64 r9;\n\tu64 r10;\n\tu64 r11;\n\tu64 r12;\n\tu64 r13;\n\tu64 r14;\n\tu64 r15;\n};\n\nstruct pebs_xmm {\n\tu64 xmm[32];\n};\n\nstruct x86_perf_regs {\n\tstruct pt_regs regs;\n\tu64 *xmm_regs;\n};\n\ntypedef unsigned int insn_attr_t;\n\ntypedef unsigned char insn_byte_t;\n\ntypedef int insn_value_t;\n\nstruct insn_field {\n\tunion {\n\t\tinsn_value_t value;\n\t\tinsn_byte_t bytes[4];\n\t};\n\tunsigned char got;\n\tunsigned char nbytes;\n};\n\nstruct insn {\n\tstruct insn_field prefixes;\n\tstruct insn_field rex_prefix;\n\tstruct insn_field vex_prefix;\n\tstruct insn_field opcode;\n\tstruct insn_field modrm;\n\tstruct insn_field sib;\n\tstruct insn_field displacement;\n\tunion {\n\t\tstruct insn_field immediate;\n\t\tstruct insn_field moffset1;\n\t\tstruct insn_field immediate1;\n\t};\n\tunion {\n\t\tstruct insn_field moffset2;\n\t\tstruct insn_field immediate2;\n\t};\n\tint emulate_prefix_size;\n\tinsn_attr_t attr;\n\tunsigned char opnd_bytes;\n\tunsigned char addr_bytes;\n\tunsigned char length;\n\tunsigned char x86_64;\n\tconst insn_byte_t *kaddr;\n\tconst insn_byte_t *end_kaddr;\n\tconst insn_byte_t *next_byte;\n};\n\nenum {\n\tPERF_TXN_ELISION = 1,\n\tPERF_TXN_TRANSACTION = 2,\n\tPERF_TXN_SYNC = 4,\n\tPERF_TXN_ASYNC = 8,\n\tPERF_TXN_RETRY = 16,\n\tPERF_TXN_CONFLICT = 32,\n\tPERF_TXN_CAPACITY_WRITE = 64,\n\tPERF_TXN_CAPACITY_READ = 128,\n\tPERF_TXN_MAX = 256,\n\tPERF_TXN_ABORT_MASK = 0,\n\tPERF_TXN_ABORT_SHIFT = 32,\n};\n\nstruct perf_event_header {\n\t__u32 type;\n\t__u16 misc;\n\t__u16 size;\n};\n\nunion intel_x86_pebs_dse {\n\tu64 val;\n\tstruct {\n\t\tunsigned int ld_dse: 4;\n\t\tunsigned int ld_stlb_miss: 1;\n\t\tunsigned int ld_locked: 1;\n\t\tunsigned int ld_reserved: 26;\n\t};\n\tstruct {\n\t\tunsigned int st_l1d_hit: 1;\n\t\tunsigned int st_reserved1: 3;\n\t\tunsigned int st_stlb_miss: 1;\n\t\tunsigned int st_locked: 1;\n\t\tunsigned int st_reserved2: 26;\n\t};\n};\n\nstruct pebs_record_core {\n\tu64 flags;\n\tu64 ip;\n\tu64 ax;\n\tu64 bx;\n\tu64 cx;\n\tu64 dx;\n\tu64 si;\n\tu64 di;\n\tu64 bp;\n\tu64 sp;\n\tu64 r8;\n\tu64 r9;\n\tu64 r10;\n\tu64 r11;\n\tu64 r12;\n\tu64 r13;\n\tu64 r14;\n\tu64 r15;\n};\n\nstruct pebs_record_nhm {\n\tu64 flags;\n\tu64 ip;\n\tu64 ax;\n\tu64 bx;\n\tu64 cx;\n\tu64 dx;\n\tu64 si;\n\tu64 di;\n\tu64 bp;\n\tu64 sp;\n\tu64 r8;\n\tu64 r9;\n\tu64 r10;\n\tu64 r11;\n\tu64 r12;\n\tu64 r13;\n\tu64 r14;\n\tu64 r15;\n\tu64 status;\n\tu64 dla;\n\tu64 dse;\n\tu64 lat;\n};\n\nunion hsw_tsx_tuning {\n\tstruct {\n\t\tu32 cycles_last_block: 32;\n\t\tu32 hle_abort: 1;\n\t\tu32 rtm_abort: 1;\n\t\tu32 instruction_abort: 1;\n\t\tu32 non_instruction_abort: 1;\n\t\tu32 retry: 1;\n\t\tu32 data_conflict: 1;\n\t\tu32 capacity_writes: 1;\n\t\tu32 capacity_reads: 1;\n\t};\n\tu64 value;\n};\n\nstruct pebs_record_skl {\n\tu64 flags;\n\tu64 ip;\n\tu64 ax;\n\tu64 bx;\n\tu64 cx;\n\tu64 dx;\n\tu64 si;\n\tu64 di;\n\tu64 bp;\n\tu64 sp;\n\tu64 r8;\n\tu64 r9;\n\tu64 r10;\n\tu64 r11;\n\tu64 r12;\n\tu64 r13;\n\tu64 r14;\n\tu64 r15;\n\tu64 status;\n\tu64 dla;\n\tu64 dse;\n\tu64 lat;\n\tu64 real_ip;\n\tu64 tsx_tuning;\n\tu64 tsc;\n};\n\nstruct bts_record {\n\tu64 from;\n\tu64 to;\n\tu64 flags;\n};\n\nenum {\n\tPERF_BR_UNKNOWN = 0,\n\tPERF_BR_COND = 1,\n\tPERF_BR_UNCOND = 2,\n\tPERF_BR_IND = 3,\n\tPERF_BR_CALL = 4,\n\tPERF_BR_IND_CALL = 5,\n\tPERF_BR_RET = 6,\n\tPERF_BR_SYSCALL = 7,\n\tPERF_BR_SYSRET = 8,\n\tPERF_BR_COND_CALL = 9,\n\tPERF_BR_COND_RET = 10,\n\tPERF_BR_MAX = 11,\n};\n\nenum xfeature {\n\tXFEATURE_FP = 0,\n\tXFEATURE_SSE = 1,\n\tXFEATURE_YMM = 2,\n\tXFEATURE_BNDREGS = 3,\n\tXFEATURE_BNDCSR = 4,\n\tXFEATURE_OPMASK = 5,\n\tXFEATURE_ZMM_Hi256 = 6,\n\tXFEATURE_Hi16_ZMM = 7,\n\tXFEATURE_PT_UNIMPLEMENTED_SO_FAR = 8,\n\tXFEATURE_PKRU = 9,\n\tXFEATURE_PASID = 10,\n\tXFEATURE_RSRVD_COMP_11 = 11,\n\tXFEATURE_RSRVD_COMP_12 = 12,\n\tXFEATURE_RSRVD_COMP_13 = 13,\n\tXFEATURE_RSRVD_COMP_14 = 14,\n\tXFEATURE_LBR = 15,\n\tXFEATURE_MAX = 16,\n};\n\nstruct arch_lbr_state {\n\tu64 lbr_ctl;\n\tu64 lbr_depth;\n\tu64 ler_from;\n\tu64 ler_to;\n\tu64 ler_info;\n\tstruct lbr_entry entries[0];\n};\n\nunion cpuid28_eax {\n\tstruct {\n\t\tunsigned int lbr_depth_mask: 8;\n\t\tunsigned int reserved: 22;\n\t\tunsigned int lbr_deep_c_reset: 1;\n\t\tunsigned int lbr_lip: 1;\n\t} split;\n\tunsigned int full;\n};\n\nunion cpuid28_ebx {\n\tstruct {\n\t\tunsigned int lbr_cpl: 1;\n\t\tunsigned int lbr_filter: 1;\n\t\tunsigned int lbr_call_stack: 1;\n\t} split;\n\tunsigned int full;\n};\n\nunion cpuid28_ecx {\n\tstruct {\n\t\tunsigned int lbr_mispred: 1;\n\t\tunsigned int lbr_timed_lbr: 1;\n\t\tunsigned int lbr_br_type: 1;\n\t} split;\n\tunsigned int full;\n};\n\nstruct x86_pmu_lbr {\n\tunsigned int nr;\n\tunsigned int from;\n\tunsigned int to;\n\tunsigned int info;\n};\n\nstruct x86_perf_task_context_opt {\n\tint lbr_callstack_users;\n\tint lbr_stack_state;\n\tint log_id;\n};\n\nstruct x86_perf_task_context {\n\tu64 lbr_sel;\n\tint tos;\n\tint valid_lbrs;\n\tstruct x86_perf_task_context_opt opt;\n\tstruct lbr_entry lbr[32];\n};\n\nstruct x86_perf_task_context_arch_lbr {\n\tstruct x86_perf_task_context_opt opt;\n\tstruct lbr_entry entries[0];\n};\n\nstruct x86_perf_task_context_arch_lbr_xsave {\n\tstruct x86_perf_task_context_opt opt;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tunion {\n\t\tstruct xregs_state xsave;\n\t\tstruct {\n\t\t\tstruct fxregs_state i387;\n\t\t\tstruct xstate_header header;\n\t\t\tstruct arch_lbr_state lbr;\n\t\t\tlong: 64;\n\t\t\tlong: 64;\n\t\t\tlong: 64;\n\t\t};\n\t};\n};\n\nenum {\n\tX86_BR_NONE = 0,\n\tX86_BR_USER = 1,\n\tX86_BR_KERNEL = 2,\n\tX86_BR_CALL = 4,\n\tX86_BR_RET = 8,\n\tX86_BR_SYSCALL = 16,\n\tX86_BR_SYSRET = 32,\n\tX86_BR_INT = 64,\n\tX86_BR_IRET = 128,\n\tX86_BR_JCC = 256,\n\tX86_BR_JMP = 512,\n\tX86_BR_IRQ = 1024,\n\tX86_BR_IND_CALL = 2048,\n\tX86_BR_ABORT = 4096,\n\tX86_BR_IN_TX = 8192,\n\tX86_BR_NO_TX = 16384,\n\tX86_BR_ZERO_CALL = 32768,\n\tX86_BR_CALL_STACK = 65536,\n\tX86_BR_IND_JMP = 131072,\n\tX86_BR_TYPE_SAVE = 262144,\n};\n\nenum {\n\tLBR_NONE = 0,\n\tLBR_VALID = 1,\n};\n\nenum {\n\tARCH_LBR_BR_TYPE_JCC = 0,\n\tARCH_LBR_BR_TYPE_NEAR_IND_JMP = 1,\n\tARCH_LBR_BR_TYPE_NEAR_REL_JMP = 2,\n\tARCH_LBR_BR_TYPE_NEAR_IND_CALL = 3,\n\tARCH_LBR_BR_TYPE_NEAR_REL_CALL = 4,\n\tARCH_LBR_BR_TYPE_NEAR_RET = 5,\n\tARCH_LBR_BR_TYPE_KNOWN_MAX = 5,\n\tARCH_LBR_BR_TYPE_MAP_MAX = 16,\n};\n\nenum P4_EVENTS {\n\tP4_EVENT_TC_DELIVER_MODE = 0,\n\tP4_EVENT_BPU_FETCH_REQUEST = 1,\n\tP4_EVENT_ITLB_REFERENCE = 2,\n\tP4_EVENT_MEMORY_CANCEL = 3,\n\tP4_EVENT_MEMORY_COMPLETE = 4,\n\tP4_EVENT_LOAD_PORT_REPLAY = 5,\n\tP4_EVENT_STORE_PORT_REPLAY = 6,\n\tP4_EVENT_MOB_LOAD_REPLAY = 7,\n\tP4_EVENT_PAGE_WALK_TYPE = 8,\n\tP4_EVENT_BSQ_CACHE_REFERENCE = 9,\n\tP4_EVENT_IOQ_ALLOCATION = 10,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES = 11,\n\tP4_EVENT_FSB_DATA_ACTIVITY = 12,\n\tP4_EVENT_BSQ_ALLOCATION = 13,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES = 14,\n\tP4_EVENT_SSE_INPUT_ASSIST = 15,\n\tP4_EVENT_PACKED_SP_UOP = 16,\n\tP4_EVENT_PACKED_DP_UOP = 17,\n\tP4_EVENT_SCALAR_SP_UOP = 18,\n\tP4_EVENT_SCALAR_DP_UOP = 19,\n\tP4_EVENT_64BIT_MMX_UOP = 20,\n\tP4_EVENT_128BIT_MMX_UOP = 21,\n\tP4_EVENT_X87_FP_UOP = 22,\n\tP4_EVENT_TC_MISC = 23,\n\tP4_EVENT_GLOBAL_POWER_EVENTS = 24,\n\tP4_EVENT_TC_MS_XFER = 25,\n\tP4_EVENT_UOP_QUEUE_WRITES = 26,\n\tP4_EVENT_RETIRED_MISPRED_BRANCH_TYPE = 27,\n\tP4_EVENT_RETIRED_BRANCH_TYPE = 28,\n\tP4_EVENT_RESOURCE_STALL = 29,\n\tP4_EVENT_WC_BUFFER = 30,\n\tP4_EVENT_B2B_CYCLES = 31,\n\tP4_EVENT_BNR = 32,\n\tP4_EVENT_SNOOP = 33,\n\tP4_EVENT_RESPONSE = 34,\n\tP4_EVENT_FRONT_END_EVENT = 35,\n\tP4_EVENT_EXECUTION_EVENT = 36,\n\tP4_EVENT_REPLAY_EVENT = 37,\n\tP4_EVENT_INSTR_RETIRED = 38,\n\tP4_EVENT_UOPS_RETIRED = 39,\n\tP4_EVENT_UOP_TYPE = 40,\n\tP4_EVENT_BRANCH_RETIRED = 41,\n\tP4_EVENT_MISPRED_BRANCH_RETIRED = 42,\n\tP4_EVENT_X87_ASSIST = 43,\n\tP4_EVENT_MACHINE_CLEAR = 44,\n\tP4_EVENT_INSTR_COMPLETED = 45,\n};\n\nenum P4_EVENT_OPCODES {\n\tP4_EVENT_TC_DELIVER_MODE_OPCODE = 257,\n\tP4_EVENT_BPU_FETCH_REQUEST_OPCODE = 768,\n\tP4_EVENT_ITLB_REFERENCE_OPCODE = 6147,\n\tP4_EVENT_MEMORY_CANCEL_OPCODE = 517,\n\tP4_EVENT_MEMORY_COMPLETE_OPCODE = 2050,\n\tP4_EVENT_LOAD_PORT_REPLAY_OPCODE = 1026,\n\tP4_EVENT_STORE_PORT_REPLAY_OPCODE = 1282,\n\tP4_EVENT_MOB_LOAD_REPLAY_OPCODE = 770,\n\tP4_EVENT_PAGE_WALK_TYPE_OPCODE = 260,\n\tP4_EVENT_BSQ_CACHE_REFERENCE_OPCODE = 3079,\n\tP4_EVENT_IOQ_ALLOCATION_OPCODE = 774,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES_OPCODE = 6662,\n\tP4_EVENT_FSB_DATA_ACTIVITY_OPCODE = 5894,\n\tP4_EVENT_BSQ_ALLOCATION_OPCODE = 1287,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES_OPCODE = 1543,\n\tP4_EVENT_SSE_INPUT_ASSIST_OPCODE = 13313,\n\tP4_EVENT_PACKED_SP_UOP_OPCODE = 2049,\n\tP4_EVENT_PACKED_DP_UOP_OPCODE = 3073,\n\tP4_EVENT_SCALAR_SP_UOP_OPCODE = 2561,\n\tP4_EVENT_SCALAR_DP_UOP_OPCODE = 3585,\n\tP4_EVENT_64BIT_MMX_UOP_OPCODE = 513,\n\tP4_EVENT_128BIT_MMX_UOP_OPCODE = 6657,\n\tP4_EVENT_X87_FP_UOP_OPCODE = 1025,\n\tP4_EVENT_TC_MISC_OPCODE = 1537,\n\tP4_EVENT_GLOBAL_POWER_EVENTS_OPCODE = 4870,\n\tP4_EVENT_TC_MS_XFER_OPCODE = 1280,\n\tP4_EVENT_UOP_QUEUE_WRITES_OPCODE = 2304,\n\tP4_EVENT_RETIRED_MISPRED_BRANCH_TYPE_OPCODE = 1282,\n\tP4_EVENT_RETIRED_BRANCH_TYPE_OPCODE = 1026,\n\tP4_EVENT_RESOURCE_STALL_OPCODE = 257,\n\tP4_EVENT_WC_BUFFER_OPCODE = 1285,\n\tP4_EVENT_B2B_CYCLES_OPCODE = 5635,\n\tP4_EVENT_BNR_OPCODE = 2051,\n\tP4_EVENT_SNOOP_OPCODE = 1539,\n\tP4_EVENT_RESPONSE_OPCODE = 1027,\n\tP4_EVENT_FRONT_END_EVENT_OPCODE = 2053,\n\tP4_EVENT_EXECUTION_EVENT_OPCODE = 3077,\n\tP4_EVENT_REPLAY_EVENT_OPCODE = 2309,\n\tP4_EVENT_INSTR_RETIRED_OPCODE = 516,\n\tP4_EVENT_UOPS_RETIRED_OPCODE = 260,\n\tP4_EVENT_UOP_TYPE_OPCODE = 514,\n\tP4_EVENT_BRANCH_RETIRED_OPCODE = 1541,\n\tP4_EVENT_MISPRED_BRANCH_RETIRED_OPCODE = 772,\n\tP4_EVENT_X87_ASSIST_OPCODE = 773,\n\tP4_EVENT_MACHINE_CLEAR_OPCODE = 517,\n\tP4_EVENT_INSTR_COMPLETED_OPCODE = 1796,\n};\n\nenum P4_ESCR_EMASKS {\n\tP4_EVENT_TC_DELIVER_MODE__DD = 512,\n\tP4_EVENT_TC_DELIVER_MODE__DB = 1024,\n\tP4_EVENT_TC_DELIVER_MODE__DI = 2048,\n\tP4_EVENT_TC_DELIVER_MODE__BD = 4096,\n\tP4_EVENT_TC_DELIVER_MODE__BB = 8192,\n\tP4_EVENT_TC_DELIVER_MODE__BI = 16384,\n\tP4_EVENT_TC_DELIVER_MODE__ID = 32768,\n\tP4_EVENT_BPU_FETCH_REQUEST__TCMISS = 512,\n\tP4_EVENT_ITLB_REFERENCE__HIT = 512,\n\tP4_EVENT_ITLB_REFERENCE__MISS = 1024,\n\tP4_EVENT_ITLB_REFERENCE__HIT_UK = 2048,\n\tP4_EVENT_MEMORY_CANCEL__ST_RB_FULL = 2048,\n\tP4_EVENT_MEMORY_CANCEL__64K_CONF = 4096,\n\tP4_EVENT_MEMORY_COMPLETE__LSC = 512,\n\tP4_EVENT_MEMORY_COMPLETE__SSC = 1024,\n\tP4_EVENT_LOAD_PORT_REPLAY__SPLIT_LD = 1024,\n\tP4_EVENT_STORE_PORT_REPLAY__SPLIT_ST = 1024,\n\tP4_EVENT_MOB_LOAD_REPLAY__NO_STA = 1024,\n\tP4_EVENT_MOB_LOAD_REPLAY__NO_STD = 4096,\n\tP4_EVENT_MOB_LOAD_REPLAY__PARTIAL_DATA = 8192,\n\tP4_EVENT_MOB_LOAD_REPLAY__UNALGN_ADDR = 16384,\n\tP4_EVENT_PAGE_WALK_TYPE__DTMISS = 512,\n\tP4_EVENT_PAGE_WALK_TYPE__ITMISS = 1024,\n\tP4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITS = 512,\n\tP4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITE = 1024,\n\tP4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_HITM = 2048,\n\tP4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITS = 4096,\n\tP4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITE = 8192,\n\tP4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_HITM = 16384,\n\tP4_EVENT_BSQ_CACHE_REFERENCE__RD_2ndL_MISS = 131072,\n\tP4_EVENT_BSQ_CACHE_REFERENCE__RD_3rdL_MISS = 262144,\n\tP4_EVENT_BSQ_CACHE_REFERENCE__WR_2ndL_MISS = 524288,\n\tP4_EVENT_IOQ_ALLOCATION__DEFAULT = 512,\n\tP4_EVENT_IOQ_ALLOCATION__ALL_READ = 16384,\n\tP4_EVENT_IOQ_ALLOCATION__ALL_WRITE = 32768,\n\tP4_EVENT_IOQ_ALLOCATION__MEM_UC = 65536,\n\tP4_EVENT_IOQ_ALLOCATION__MEM_WC = 131072,\n\tP4_EVENT_IOQ_ALLOCATION__MEM_WT = 262144,\n\tP4_EVENT_IOQ_ALLOCATION__MEM_WP = 524288,\n\tP4_EVENT_IOQ_ALLOCATION__MEM_WB = 1048576,\n\tP4_EVENT_IOQ_ALLOCATION__OWN = 4194304,\n\tP4_EVENT_IOQ_ALLOCATION__OTHER = 8388608,\n\tP4_EVENT_IOQ_ALLOCATION__PREFETCH = 16777216,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__DEFAULT = 512,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__ALL_READ = 16384,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__ALL_WRITE = 32768,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_UC = 65536,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WC = 131072,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WT = 262144,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WP = 524288,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__MEM_WB = 1048576,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__OWN = 4194304,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__OTHER = 8388608,\n\tP4_EVENT_IOQ_ACTIVE_ENTRIES__PREFETCH = 16777216,\n\tP4_EVENT_FSB_DATA_ACTIVITY__DRDY_DRV = 512,\n\tP4_EVENT_FSB_DATA_ACTIVITY__DRDY_OWN = 1024,\n\tP4_EVENT_FSB_DATA_ACTIVITY__DRDY_OTHER = 2048,\n\tP4_EVENT_FSB_DATA_ACTIVITY__DBSY_DRV = 4096,\n\tP4_EVENT_FSB_DATA_ACTIVITY__DBSY_OWN = 8192,\n\tP4_EVENT_FSB_DATA_ACTIVITY__DBSY_OTHER = 16384,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_TYPE0 = 512,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_TYPE1 = 1024,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_LEN0 = 2048,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_LEN1 = 4096,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_IO_TYPE = 16384,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_LOCK_TYPE = 32768,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_CACHE_TYPE = 65536,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_SPLIT_TYPE = 131072,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_DEM_TYPE = 262144,\n\tP4_EVENT_BSQ_ALLOCATION__REQ_ORD_TYPE = 524288,\n\tP4_EVENT_BSQ_ALLOCATION__MEM_TYPE0 = 1048576,\n\tP4_EVENT_BSQ_ALLOCATION__MEM_TYPE1 = 2097152,\n\tP4_EVENT_BSQ_ALLOCATION__MEM_TYPE2 = 4194304,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_TYPE0 = 512,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_TYPE1 = 1024,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LEN0 = 2048,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LEN1 = 4096,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_IO_TYPE = 16384,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_LOCK_TYPE = 32768,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_CACHE_TYPE = 65536,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_SPLIT_TYPE = 131072,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_DEM_TYPE = 262144,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__REQ_ORD_TYPE = 524288,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE0 = 1048576,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE1 = 2097152,\n\tP4_EVENT_BSQ_ACTIVE_ENTRIES__MEM_TYPE2 = 4194304,\n\tP4_EVENT_SSE_INPUT_ASSIST__ALL = 16777216,\n\tP4_EVENT_PACKED_SP_UOP__ALL = 16777216,\n\tP4_EVENT_PACKED_DP_UOP__ALL = 16777216,\n\tP4_EVENT_SCALAR_SP_UOP__ALL = 16777216,\n\tP4_EVENT_SCALAR_DP_UOP__ALL = 16777216,\n\tP4_EVENT_64BIT_MMX_UOP__ALL = 16777216,\n\tP4_EVENT_128BIT_MMX_UOP__ALL = 16777216,\n\tP4_EVENT_X87_FP_UOP__ALL = 16777216,\n\tP4_EVENT_TC_MISC__FLUSH = 8192,\n\tP4_EVENT_GLOBAL_POWER_EVENTS__RUNNING = 512,\n\tP4_EVENT_TC_MS_XFER__CISC = 512,\n\tP4_EVENT_UOP_QUEUE_WRITES__FROM_TC_BUILD = 512,\n\tP4_EVENT_UOP_QUEUE_WRITES__FROM_TC_DELIVER = 1024,\n\tP4_EVENT_UOP_QUEUE_WRITES__FROM_ROM = 2048,\n\tP4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__CONDITIONAL = 1024,\n\tP4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__CALL = 2048,\n\tP4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__RETURN = 4096,\n\tP4_EVENT_RETIRED_MISPRED_BRANCH_TYPE__INDIRECT = 8192,\n\tP4_EVENT_RETIRED_BRANCH_TYPE__CONDITIONAL = 1024,\n\tP4_EVENT_RETIRED_BRANCH_TYPE__CALL = 2048,\n\tP4_EVENT_RETIRED_BRANCH_TYPE__RETURN = 4096,\n\tP4_EVENT_RETIRED_BRANCH_TYPE__INDIRECT = 8192,\n\tP4_EVENT_RESOURCE_STALL__SBFULL = 16384,\n\tP4_EVENT_WC_BUFFER__WCB_EVICTS = 512,\n\tP4_EVENT_WC_BUFFER__WCB_FULL_EVICTS = 1024,\n\tP4_EVENT_FRONT_END_EVENT__NBOGUS = 512,\n\tP4_EVENT_FRONT_END_EVENT__BOGUS = 1024,\n\tP4_EVENT_EXECUTION_EVENT__NBOGUS0 = 512,\n\tP4_EVENT_EXECUTION_EVENT__NBOGUS1 = 1024,\n\tP4_EVENT_EXECUTION_EVENT__NBOGUS2 = 2048,\n\tP4_EVENT_EXECUTION_EVENT__NBOGUS3 = 4096,\n\tP4_EVENT_EXECUTION_EVENT__BOGUS0 = 8192,\n\tP4_EVENT_EXECUTION_EVENT__BOGUS1 = 16384,\n\tP4_EVENT_EXECUTION_EVENT__BOGUS2 = 32768,\n\tP4_EVENT_EXECUTION_EVENT__BOGUS3 = 65536,\n\tP4_EVENT_REPLAY_EVENT__NBOGUS = 512,\n\tP4_EVENT_REPLAY_EVENT__BOGUS = 1024,\n\tP4_EVENT_INSTR_RETIRED__NBOGUSNTAG = 512,\n\tP4_EVENT_INSTR_RETIRED__NBOGUSTAG = 1024,\n\tP4_EVENT_INSTR_RETIRED__BOGUSNTAG = 2048,\n\tP4_EVENT_INSTR_RETIRED__BOGUSTAG = 4096,\n\tP4_EVENT_UOPS_RETIRED__NBOGUS = 512,\n\tP4_EVENT_UOPS_RETIRED__BOGUS = 1024,\n\tP4_EVENT_UOP_TYPE__TAGLOADS = 1024,\n\tP4_EVENT_UOP_TYPE__TAGSTORES = 2048,\n\tP4_EVENT_BRANCH_RETIRED__MMNP = 512,\n\tP4_EVENT_BRANCH_RETIRED__MMNM = 1024,\n\tP4_EVENT_BRANCH_RETIRED__MMTP = 2048,\n\tP4_EVENT_BRANCH_RETIRED__MMTM = 4096,\n\tP4_EVENT_MISPRED_BRANCH_RETIRED__NBOGUS = 512,\n\tP4_EVENT_X87_ASSIST__FPSU = 512,\n\tP4_EVENT_X87_ASSIST__FPSO = 1024,\n\tP4_EVENT_X87_ASSIST__POAO = 2048,\n\tP4_EVENT_X87_ASSIST__POAU = 4096,\n\tP4_EVENT_X87_ASSIST__PREA = 8192,\n\tP4_EVENT_MACHINE_CLEAR__CLEAR = 512,\n\tP4_EVENT_MACHINE_CLEAR__MOCLEAR = 1024,\n\tP4_EVENT_MACHINE_CLEAR__SMCLEAR = 2048,\n\tP4_EVENT_INSTR_COMPLETED__NBOGUS = 512,\n\tP4_EVENT_INSTR_COMPLETED__BOGUS = 1024,\n};\n\nenum P4_PEBS_METRIC {\n\tP4_PEBS_METRIC__none = 0,\n\tP4_PEBS_METRIC__1stl_cache_load_miss_retired = 1,\n\tP4_PEBS_METRIC__2ndl_cache_load_miss_retired = 2,\n\tP4_PEBS_METRIC__dtlb_load_miss_retired = 3,\n\tP4_PEBS_METRIC__dtlb_store_miss_retired = 4,\n\tP4_PEBS_METRIC__dtlb_all_miss_retired = 5,\n\tP4_PEBS_METRIC__tagged_mispred_branch = 6,\n\tP4_PEBS_METRIC__mob_load_replay_retired = 7,\n\tP4_PEBS_METRIC__split_load_retired = 8,\n\tP4_PEBS_METRIC__split_store_retired = 9,\n\tP4_PEBS_METRIC__max = 10,\n};\n\nstruct p4_event_bind {\n\tunsigned int opcode;\n\tunsigned int escr_msr[2];\n\tunsigned int escr_emask;\n\tunsigned int shared;\n\tchar cntr[6];\n};\n\nstruct p4_pebs_bind {\n\tunsigned int metric_pebs;\n\tunsigned int metric_vert;\n};\n\nstruct p4_event_alias {\n\tu64 original;\n\tu64 alternative;\n};\n\nenum cpuid_regs_idx {\n\tCPUID_EAX = 0,\n\tCPUID_EBX = 1,\n\tCPUID_ECX = 2,\n\tCPUID_EDX = 3,\n};\n\nstruct dev_ext_attribute {\n\tstruct device_attribute attr;\n\tvoid *var;\n};\n\nenum pt_capabilities {\n\tPT_CAP_max_subleaf = 0,\n\tPT_CAP_cr3_filtering = 1,\n\tPT_CAP_psb_cyc = 2,\n\tPT_CAP_ip_filtering = 3,\n\tPT_CAP_mtc = 4,\n\tPT_CAP_ptwrite = 5,\n\tPT_CAP_power_event_trace = 6,\n\tPT_CAP_topa_output = 7,\n\tPT_CAP_topa_multiple_entries = 8,\n\tPT_CAP_single_range_output = 9,\n\tPT_CAP_output_subsys = 10,\n\tPT_CAP_payloads_lip = 11,\n\tPT_CAP_num_address_ranges = 12,\n\tPT_CAP_mtc_periods = 13,\n\tPT_CAP_cycle_thresholds = 14,\n\tPT_CAP_psb_periods = 15,\n};\n\nenum perf_addr_filter_action_t {\n\tPERF_ADDR_FILTER_ACTION_STOP = 0,\n\tPERF_ADDR_FILTER_ACTION_START = 1,\n\tPERF_ADDR_FILTER_ACTION_FILTER = 2,\n};\n\nstruct perf_addr_filter {\n\tstruct list_head entry;\n\tstruct path path;\n\tlong unsigned int offset;\n\tlong unsigned int size;\n\tenum perf_addr_filter_action_t action;\n};\n\nstruct topa_entry {\n\tu64 end: 1;\n\tu64 rsvd0: 1;\n\tu64 intr: 1;\n\tu64 rsvd1: 1;\n\tu64 stop: 1;\n\tu64 rsvd2: 1;\n\tu64 size: 4;\n\tu64 rsvd3: 2;\n\tu64 base: 36;\n\tu64 rsvd4: 16;\n};\n\nstruct pt_pmu {\n\tstruct pmu pmu;\n\tu32 caps[8];\n\tbool vmx;\n\tbool branch_en_always_on;\n\tlong unsigned int max_nonturbo_ratio;\n\tunsigned int tsc_art_num;\n\tunsigned int tsc_art_den;\n};\n\nstruct topa;\n\nstruct pt_buffer {\n\tstruct list_head tables;\n\tstruct topa *first;\n\tstruct topa *last;\n\tstruct topa *cur;\n\tunsigned int cur_idx;\n\tsize_t output_off;\n\tlong unsigned int nr_pages;\n\tlocal_t data_size;\n\tlocal64_t head;\n\tbool snapshot;\n\tbool single;\n\tlong int stop_pos;\n\tlong int intr_pos;\n\tstruct topa_entry *stop_te;\n\tstruct topa_entry *intr_te;\n\tvoid **data_pages;\n};\n\nstruct topa {\n\tstruct list_head list;\n\tu64 offset;\n\tsize_t size;\n\tint last;\n\tunsigned int z_count;\n};\n\nstruct pt_filter {\n\tlong unsigned int msr_a;\n\tlong unsigned int msr_b;\n\tlong unsigned int config;\n};\n\nstruct pt_filters {\n\tstruct pt_filter filter[4];\n\tunsigned int nr_filters;\n};\n\nstruct pt {\n\tstruct perf_output_handle handle;\n\tstruct pt_filters filters;\n\tint handle_nmi;\n\tint vmx_on;\n\tu64 output_base;\n\tu64 output_mask;\n};\n\nstruct pt_cap_desc {\n\tconst char *name;\n\tu32 leaf;\n\tu8 reg;\n\tu32 mask;\n};\n\nstruct pt_address_range {\n\tlong unsigned int msr_a;\n\tlong unsigned int msr_b;\n\tunsigned int reg_off;\n};\n\nstruct topa_page {\n\tstruct topa_entry table[507];\n\tstruct topa topa;\n};\n\ntypedef s8 int8_t;\n\ntypedef u8 uint8_t;\n\ntypedef u64 uint64_t;\n\nstruct atomic_notifier_head {\n\tspinlock_t lock;\n\tstruct notifier_block *head;\n};\n\nenum xen_domain_type {\n\tXEN_NATIVE = 0,\n\tXEN_PV_DOMAIN = 1,\n\tXEN_HVM_DOMAIN = 2,\n};\n\ntypedef long unsigned int xen_pfn_t;\n\ntypedef long unsigned int xen_ulong_t;\n\nstruct arch_shared_info {\n\tlong unsigned int max_pfn;\n\txen_pfn_t pfn_to_mfn_frame_list_list;\n\tlong unsigned int nmi_reason;\n\tlong unsigned int p2m_cr3;\n\tlong unsigned int p2m_vaddr;\n\tlong unsigned int p2m_generation;\n};\n\nstruct arch_vcpu_info {\n\tlong unsigned int cr2;\n\tlong unsigned int pad;\n};\n\nstruct pvclock_wall_clock {\n\tu32 version;\n\tu32 sec;\n\tu32 nsec;\n};\n\nstruct vcpu_info {\n\tuint8_t evtchn_upcall_pending;\n\tuint8_t evtchn_upcall_mask;\n\txen_ulong_t evtchn_pending_sel;\n\tstruct arch_vcpu_info arch;\n\tstruct pvclock_vcpu_time_info time;\n};\n\nstruct shared_info {\n\tstruct vcpu_info vcpu_info[32];\n\txen_ulong_t evtchn_pending[64];\n\txen_ulong_t evtchn_mask[64];\n\tstruct pvclock_wall_clock wc;\n\tstruct arch_shared_info arch;\n};\n\nstruct start_info {\n\tchar magic[32];\n\tlong unsigned int nr_pages;\n\tlong unsigned int shared_info;\n\tuint32_t flags;\n\txen_pfn_t store_mfn;\n\tuint32_t store_evtchn;\n\tunion {\n\t\tstruct {\n\t\t\txen_pfn_t mfn;\n\t\t\tuint32_t evtchn;\n\t\t} domU;\n\t\tstruct {\n\t\t\tuint32_t info_off;\n\t\t\tuint32_t info_size;\n\t\t} dom0;\n\t} console;\n\tlong unsigned int pt_base;\n\tlong unsigned int nr_pt_frames;\n\tlong unsigned int mfn_list;\n\tlong unsigned int mod_start;\n\tlong unsigned int mod_len;\n\tint8_t cmd_line[1024];\n\tlong unsigned int first_p2m_pfn;\n\tlong unsigned int nr_p2m_frames;\n};\n\nstruct sched_shutdown {\n\tunsigned int reason;\n};\n\nstruct sched_pin_override {\n\tint32_t pcpu;\n};\n\nstruct vcpu_register_vcpu_info {\n\tuint64_t mfn;\n\tuint32_t offset;\n\tuint32_t rsvd;\n};\n\nstruct xmaddr {\n\tphys_addr_t maddr;\n};\n\ntypedef struct xmaddr xmaddr_t;\n\nstruct xpaddr {\n\tphys_addr_t paddr;\n};\n\ntypedef struct xpaddr xpaddr_t;\n\ntypedef s16 int16_t;\n\ntypedef u16 uint16_t;\n\nstruct clocksource {\n\tu64 (*read)(struct clocksource *);\n\tu64 mask;\n\tu32 mult;\n\tu32 shift;\n\tu64 max_idle_ns;\n\tu32 maxadj;\n\tu64 max_cycles;\n\tconst char *name;\n\tstruct list_head list;\n\tint rating;\n\tenum vdso_clock_mode vdso_clock_mode;\n\tlong unsigned int flags;\n\tint (*enable)(struct clocksource *);\n\tvoid (*disable)(struct clocksource *);\n\tvoid (*suspend)(struct clocksource *);\n\tvoid (*resume)(struct clocksource *);\n\tvoid (*mark_unstable)(struct clocksource *);\n\tvoid (*tick_stable)(struct clocksource *);\n\tstruct list_head wd_list;\n\tu64 cs_last;\n\tu64 wd_last;\n\tstruct module *owner;\n};\n\nstruct x86_init_mpparse {\n\tvoid (*setup_ioapic_ids)();\n\tvoid (*find_smp_config)();\n\tvoid (*get_smp_config)(unsigned int);\n};\n\nstruct x86_init_resources {\n\tvoid (*probe_roms)();\n\tvoid (*reserve_resources)();\n\tchar * (*memory_setup)();\n};\n\nstruct x86_init_irqs {\n\tvoid (*pre_vector_init)();\n\tvoid (*intr_init)();\n\tvoid (*intr_mode_select)();\n\tvoid (*intr_mode_init)();\n\tstruct irq_domain * (*create_pci_msi_domain)();\n};\n\nstruct x86_init_oem {\n\tvoid (*arch_setup)();\n\tvoid (*banner)();\n};\n\nstruct x86_init_paging {\n\tvoid (*pagetable_init)();\n};\n\nstruct x86_init_timers {\n\tvoid (*setup_percpu_clockev)();\n\tvoid (*timer_init)();\n\tvoid (*wallclock_init)();\n};\n\nstruct x86_init_iommu {\n\tint (*iommu_init)();\n};\n\nstruct x86_init_pci {\n\tint (*arch_init)();\n\tint (*init)();\n\tvoid (*init_irq)();\n\tvoid (*fixup_irqs)();\n};\n\nstruct x86_hyper_init {\n\tvoid (*init_platform)();\n\tvoid (*guest_late_init)();\n\tbool (*x2apic_available)();\n\tbool (*msi_ext_dest_id)();\n\tvoid (*init_mem_mapping)();\n\tvoid (*init_after_bootmem)();\n};\n\nstruct x86_init_acpi {\n\tvoid (*set_root_pointer)(u64);\n\tu64 (*get_root_pointer)();\n\tvoid (*reduced_hw_early_init)();\n};\n\nstruct x86_init_ops {\n\tstruct x86_init_resources resources;\n\tstruct x86_init_mpparse mpparse;\n\tstruct x86_init_irqs irqs;\n\tstruct x86_init_oem oem;\n\tstruct x86_init_paging paging;\n\tstruct x86_init_timers timers;\n\tstruct x86_init_iommu iommu;\n\tstruct x86_init_pci pci;\n\tstruct x86_hyper_init hyper;\n\tstruct x86_init_acpi acpi;\n};\n\nstruct x86_cpuinit_ops {\n\tvoid (*setup_percpu_clockev)();\n\tvoid (*early_percpu_clock_init)();\n\tvoid (*fixup_cpu_id)(struct cpuinfo_x86 *, int);\n};\n\nenum clock_event_state {\n\tCLOCK_EVT_STATE_DETACHED = 0,\n\tCLOCK_EVT_STATE_SHUTDOWN = 1,\n\tCLOCK_EVT_STATE_PERIODIC = 2,\n\tCLOCK_EVT_STATE_ONESHOT = 3,\n\tCLOCK_EVT_STATE_ONESHOT_STOPPED = 4,\n};\n\nstruct clock_event_device {\n\tvoid (*event_handler)(struct clock_event_device *);\n\tint (*set_next_event)(long unsigned int, struct clock_event_device *);\n\tint (*set_next_ktime)(ktime_t, struct clock_event_device *);\n\tktime_t next_event;\n\tu64 max_delta_ns;\n\tu64 min_delta_ns;\n\tu32 mult;\n\tu32 shift;\n\tenum clock_event_state state_use_accessors;\n\tunsigned int features;\n\tlong unsigned int retries;\n\tint (*set_state_periodic)(struct clock_event_device *);\n\tint (*set_state_oneshot)(struct clock_event_device *);\n\tint (*set_state_oneshot_stopped)(struct clock_event_device *);\n\tint (*set_state_shutdown)(struct clock_event_device *);\n\tint (*tick_resume)(struct clock_event_device *);\n\tvoid (*broadcast)(const struct cpumask *);\n\tvoid (*suspend)(struct clock_event_device *);\n\tvoid (*resume)(struct clock_event_device *);\n\tlong unsigned int min_delta_ticks;\n\tlong unsigned int max_delta_ticks;\n\tconst char *name;\n\tint rating;\n\tint irq;\n\tint bound_on;\n\tconst struct cpumask *cpumask;\n\tstruct list_head list;\n\tstruct module *owner;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct tk_read_base {\n\tstruct clocksource *clock;\n\tu64 mask;\n\tu64 cycle_last;\n\tu32 mult;\n\tu32 shift;\n\tu64 xtime_nsec;\n\tktime_t base;\n\tu64 base_real;\n};\n\nstruct timekeeper {\n\tstruct tk_read_base tkr_mono;\n\tstruct tk_read_base tkr_raw;\n\tu64 xtime_sec;\n\tlong unsigned int ktime_sec;\n\tstruct timespec64 wall_to_monotonic;\n\tktime_t offs_real;\n\tktime_t offs_boot;\n\tktime_t offs_tai;\n\ts32 tai_offset;\n\tunsigned int clock_was_set_seq;\n\tu8 cs_was_changed_seq;\n\tktime_t next_leap_ktime;\n\tu64 raw_sec;\n\tstruct timespec64 monotonic_to_boot;\n\tu64 cycle_interval;\n\tu64 xtime_interval;\n\ts64 xtime_remainder;\n\tu64 raw_interval;\n\tu64 ntp_tick;\n\ts64 ntp_error;\n\tu32 ntp_error_shift;\n\tu32 ntp_err_mult;\n\tu32 skip_second_overflow;\n};\n\ntypedef unsigned char *__guest_handle_uchar;\n\ntypedef char *__guest_handle_char;\n\ntypedef void *__guest_handle_void;\n\ntypedef uint64_t *__guest_handle_uint64_t;\n\ntypedef uint32_t *__guest_handle_uint32_t;\n\nstruct vcpu_time_info {\n\tuint32_t version;\n\tuint32_t pad0;\n\tuint64_t tsc_timestamp;\n\tuint64_t system_time;\n\tuint32_t tsc_to_system_mul;\n\tint8_t tsc_shift;\n\tint8_t pad1[3];\n};\n\nstruct xenpf_settime32 {\n\tuint32_t secs;\n\tuint32_t nsecs;\n\tuint64_t system_time;\n};\n\nstruct xenpf_settime64 {\n\tuint64_t secs;\n\tuint32_t nsecs;\n\tuint32_t mbz;\n\tuint64_t system_time;\n};\n\nstruct xenpf_add_memtype {\n\txen_pfn_t mfn;\n\tuint64_t nr_mfns;\n\tuint32_t type;\n\tuint32_t handle;\n\tuint32_t reg;\n};\n\nstruct xenpf_del_memtype {\n\tuint32_t handle;\n\tuint32_t reg;\n};\n\nstruct xenpf_read_memtype {\n\tuint32_t reg;\n\txen_pfn_t mfn;\n\tuint64_t nr_mfns;\n\tuint32_t type;\n};\n\nstruct xenpf_microcode_update {\n\t__guest_handle_void data;\n\tuint32_t length;\n};\n\nstruct xenpf_platform_quirk {\n\tuint32_t quirk_id;\n};\n\nstruct xenpf_efi_time {\n\tuint16_t year;\n\tuint8_t month;\n\tuint8_t day;\n\tuint8_t hour;\n\tuint8_t min;\n\tuint8_t sec;\n\tuint32_t ns;\n\tint16_t tz;\n\tuint8_t daylight;\n};\n\nstruct xenpf_efi_guid {\n\tuint32_t data1;\n\tuint16_t data2;\n\tuint16_t data3;\n\tuint8_t data4[8];\n};\n\nstruct xenpf_efi_runtime_call {\n\tuint32_t function;\n\tuint32_t misc;\n\txen_ulong_t status;\n\tunion {\n\t\tstruct {\n\t\t\tstruct xenpf_efi_time time;\n\t\t\tuint32_t resolution;\n\t\t\tuint32_t accuracy;\n\t\t} get_time;\n\t\tstruct xenpf_efi_time set_time;\n\t\tstruct xenpf_efi_time get_wakeup_time;\n\t\tstruct xenpf_efi_time set_wakeup_time;\n\t\tstruct {\n\t\t\t__guest_handle_void name;\n\t\t\txen_ulong_t size;\n\t\t\t__guest_handle_void data;\n\t\t\tstruct xenpf_efi_guid vendor_guid;\n\t\t} get_variable;\n\t\tstruct {\n\t\t\t__guest_handle_void name;\n\t\t\txen_ulong_t size;\n\t\t\t__guest_handle_void data;\n\t\t\tstruct xenpf_efi_guid vendor_guid;\n\t\t} set_variable;\n\t\tstruct {\n\t\t\txen_ulong_t size;\n\t\t\t__guest_handle_void name;\n\t\t\tstruct xenpf_efi_guid vendor_guid;\n\t\t} get_next_variable_name;\n\t\tstruct {\n\t\t\tuint32_t attr;\n\t\t\tuint64_t max_store_size;\n\t\t\tuint64_t remain_store_size;\n\t\t\tuint64_t max_size;\n\t\t} query_variable_info;\n\t\tstruct {\n\t\t\t__guest_handle_void capsule_header_array;\n\t\t\txen_ulong_t capsule_count;\n\t\t\tuint64_t max_capsule_size;\n\t\t\tuint32_t reset_type;\n\t\t} query_capsule_capabilities;\n\t\tstruct {\n\t\t\t__guest_handle_void capsule_header_array;\n\t\t\txen_ulong_t capsule_count;\n\t\t\tuint64_t sg_list;\n\t\t} update_capsule;\n\t} u;\n};\n\nunion xenpf_efi_info {\n\tuint32_t version;\n\tstruct {\n\t\tuint64_t addr;\n\t\tuint32_t nent;\n\t} cfg;\n\tstruct {\n\t\tuint32_t revision;\n\t\tuint32_t bufsz;\n\t\t__guest_handle_void name;\n\t} vendor;\n\tstruct {\n\t\tuint64_t addr;\n\t\tuint64_t size;\n\t\tuint64_t attr;\n\t\tuint32_t type;\n\t} mem;\n};\n\nstruct xenpf_firmware_info {\n\tuint32_t type;\n\tuint32_t index;\n\tunion {\n\t\tstruct {\n\t\t\tuint8_t device;\n\t\t\tuint8_t version;\n\t\t\tuint16_t interface_support;\n\t\t\tuint16_t legacy_max_cylinder;\n\t\t\tuint8_t legacy_max_head;\n\t\t\tuint8_t legacy_sectors_per_track;\n\t\t\t__guest_handle_void edd_params;\n\t\t} disk_info;\n\t\tstruct {\n\t\t\tuint8_t device;\n\t\t\tuint32_t mbr_signature;\n\t\t} disk_mbr_signature;\n\t\tstruct {\n\t\t\tuint8_t capabilities;\n\t\t\tuint8_t edid_transfer_time;\n\t\t\t__guest_handle_uchar edid;\n\t\t} vbeddc_info;\n\t\tunion xenpf_efi_info efi_info;\n\t\tuint8_t kbd_shift_flags;\n\t} u;\n};\n\nstruct xenpf_enter_acpi_sleep {\n\tuint16_t val_a;\n\tuint16_t val_b;\n\tuint32_t sleep_state;\n\tuint32_t flags;\n};\n\nstruct xenpf_change_freq {\n\tuint32_t flags;\n\tuint32_t cpu;\n\tuint64_t freq;\n};\n\nstruct xenpf_getidletime {\n\t__guest_handle_uchar cpumap_bitmap;\n\tuint32_t cpumap_nr_cpus;\n\t__guest_handle_uint64_t idletime;\n\tuint64_t now;\n};\n\nstruct xen_power_register {\n\tuint32_t space_id;\n\tuint32_t bit_width;\n\tuint32_t bit_offset;\n\tuint32_t access_size;\n\tuint64_t address;\n};\n\nstruct xen_processor_csd {\n\tuint32_t domain;\n\tuint32_t coord_type;\n\tuint32_t num;\n};\n\ntypedef struct xen_processor_csd *__guest_handle_xen_processor_csd;\n\nstruct xen_processor_cx {\n\tstruct xen_power_register reg;\n\tuint8_t type;\n\tuint32_t latency;\n\tuint32_t power;\n\tuint32_t dpcnt;\n\t__guest_handle_xen_processor_csd dp;\n};\n\ntypedef struct xen_processor_cx *__guest_handle_xen_processor_cx;\n\nstruct xen_processor_flags {\n\tuint32_t bm_control: 1;\n\tuint32_t bm_check: 1;\n\tuint32_t has_cst: 1;\n\tuint32_t power_setup_done: 1;\n\tuint32_t bm_rld_set: 1;\n};\n\nstruct xen_processor_power {\n\tuint32_t count;\n\tstruct xen_processor_flags flags;\n\t__guest_handle_xen_processor_cx states;\n};\n\nstruct xen_pct_register {\n\tuint8_t descriptor;\n\tuint16_t length;\n\tuint8_t space_id;\n\tuint8_t bit_width;\n\tuint8_t bit_offset;\n\tuint8_t reserved;\n\tuint64_t address;\n};\n\nstruct xen_processor_px {\n\tuint64_t core_frequency;\n\tuint64_t power;\n\tuint64_t transition_latency;\n\tuint64_t bus_master_latency;\n\tuint64_t control;\n\tuint64_t status;\n};\n\ntypedef struct xen_processor_px *__guest_handle_xen_processor_px;\n\nstruct xen_psd_package {\n\tuint64_t num_entries;\n\tuint64_t revision;\n\tuint64_t domain;\n\tuint64_t coord_type;\n\tuint64_t num_processors;\n};\n\nstruct xen_processor_performance {\n\tuint32_t flags;\n\tuint32_t platform_limit;\n\tstruct xen_pct_register control_register;\n\tstruct xen_pct_register status_register;\n\tuint32_t state_count;\n\t__guest_handle_xen_processor_px states;\n\tstruct xen_psd_package domain_info;\n\tuint32_t shared_type;\n};\n\nstruct xenpf_set_processor_pminfo {\n\tuint32_t id;\n\tuint32_t type;\n\tunion {\n\t\tstruct xen_processor_power power;\n\t\tstruct xen_processor_performance perf;\n\t\t__guest_handle_uint32_t pdc;\n\t};\n};\n\nstruct xenpf_pcpuinfo {\n\tuint32_t xen_cpuid;\n\tuint32_t max_present;\n\tuint32_t flags;\n\tuint32_t apic_id;\n\tuint32_t acpi_id;\n};\n\nstruct xenpf_cpu_ol {\n\tuint32_t cpuid;\n};\n\nstruct xenpf_cpu_hotadd {\n\tuint32_t apic_id;\n\tuint32_t acpi_id;\n\tuint32_t pxm;\n};\n\nstruct xenpf_mem_hotadd {\n\tuint64_t spfn;\n\tuint64_t epfn;\n\tuint32_t pxm;\n\tuint32_t flags;\n};\n\nstruct xenpf_core_parking {\n\tuint32_t type;\n\tuint32_t idle_nums;\n};\n\nstruct xenpf_symdata {\n\tuint32_t namelen;\n\tuint32_t symnum;\n\t__guest_handle_char name;\n\tuint64_t address;\n\tchar type;\n};\n\nstruct xen_platform_op {\n\tuint32_t cmd;\n\tuint32_t interface_version;\n\tunion {\n\t\tstruct xenpf_settime32 settime32;\n\t\tstruct xenpf_settime64 settime64;\n\t\tstruct xenpf_add_memtype add_memtype;\n\t\tstruct xenpf_del_memtype del_memtype;\n\t\tstruct xenpf_read_memtype read_memtype;\n\t\tstruct xenpf_microcode_update microcode;\n\t\tstruct xenpf_platform_quirk platform_quirk;\n\t\tstruct xenpf_efi_runtime_call efi_runtime_call;\n\t\tstruct xenpf_firmware_info firmware_info;\n\t\tstruct xenpf_enter_acpi_sleep enter_acpi_sleep;\n\t\tstruct xenpf_change_freq change_freq;\n\t\tstruct xenpf_getidletime getidletime;\n\t\tstruct xenpf_set_processor_pminfo set_pminfo;\n\t\tstruct xenpf_pcpuinfo pcpu_info;\n\t\tstruct xenpf_cpu_ol cpu_ol;\n\t\tstruct xenpf_cpu_hotadd cpu_add;\n\t\tstruct xenpf_mem_hotadd mem_add;\n\t\tstruct xenpf_core_parking core_parking;\n\t\tstruct xenpf_symdata symdata;\n\t\tuint8_t pad[128];\n\t} u;\n};\n\nstruct vcpu_set_singleshot_timer {\n\tuint64_t timeout_abs_ns;\n\tuint32_t flags;\n};\n\ntypedef struct vcpu_time_info *__guest_handle_vcpu_time_info;\n\nstruct vcpu_register_time_memory_area {\n\tunion {\n\t\t__guest_handle_vcpu_time_info h;\n\t\tstruct pvclock_vcpu_time_info *v;\n\t\tuint64_t p;\n\t} addr;\n};\n\nstruct xen_clock_event_device {\n\tstruct clock_event_device evt;\n\tchar name[16];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\ntypedef int (*pte_fn_t)(pte_t *, long unsigned int, void *);\n\ntypedef uint16_t grant_status_t;\n\nstruct grant_frames {\n\txen_pfn_t *pfn;\n\tunsigned int count;\n\tvoid *vaddr;\n};\n\nstruct gnttab_vm_area {\n\tstruct vm_struct *area;\n\tpte_t **ptes;\n\tint idx;\n};\n\nenum acpi_irq_model_id {\n\tACPI_IRQ_MODEL_PIC = 0,\n\tACPI_IRQ_MODEL_IOAPIC = 1,\n\tACPI_IRQ_MODEL_IOSAPIC = 2,\n\tACPI_IRQ_MODEL_PLATFORM = 3,\n\tACPI_IRQ_MODEL_GIC = 4,\n\tACPI_IRQ_MODEL_COUNT = 5,\n};\n\ntypedef uint16_t domid_t;\n\nstruct xen_add_to_physmap {\n\tdomid_t domid;\n\tuint16_t size;\n\tunsigned int space;\n\txen_ulong_t idx;\n\txen_pfn_t gpfn;\n};\n\nstruct machine_ops {\n\tvoid (*restart)(char *);\n\tvoid (*halt)();\n\tvoid (*power_off)();\n\tvoid (*shutdown)();\n\tvoid (*crash_shutdown)(struct pt_regs *);\n\tvoid (*emergency_restart)();\n};\n\nenum x86_hypervisor_type {\n\tX86_HYPER_NATIVE = 0,\n\tX86_HYPER_VMWARE = 1,\n\tX86_HYPER_MS_HYPERV = 2,\n\tX86_HYPER_XEN_PV = 3,\n\tX86_HYPER_XEN_HVM = 4,\n\tX86_HYPER_KVM = 5,\n\tX86_HYPER_JAILHOUSE = 6,\n\tX86_HYPER_ACRN = 7,\n};\n\nstruct hypervisor_x86 {\n\tconst char *name;\n\tuint32_t (*detect)();\n\tenum x86_hypervisor_type type;\n\tstruct x86_hyper_init init;\n\tstruct x86_hyper_runtime runtime;\n\tbool ignore_nopv;\n};\n\nenum e820_type {\n\tE820_TYPE_RAM = 1,\n\tE820_TYPE_RESERVED = 2,\n\tE820_TYPE_ACPI = 3,\n\tE820_TYPE_NVS = 4,\n\tE820_TYPE_UNUSABLE = 5,\n\tE820_TYPE_PMEM = 7,\n\tE820_TYPE_PRAM = 12,\n\tE820_TYPE_SOFT_RESERVED = 4026531839,\n\tE820_TYPE_RESERVED_KERN = 128,\n};\n\nstruct xen_hvm_pagetable_dying {\n\tdomid_t domid;\n\t__u64 gpa;\n};\n\nenum hvmmem_type_t {\n\tHVMMEM_ram_rw = 0,\n\tHVMMEM_ram_ro = 1,\n\tHVMMEM_mmio_dm = 2,\n};\n\nstruct xen_hvm_get_mem_type {\n\tdomid_t domid;\n\tuint16_t mem_type;\n\tuint16_t pad[2];\n\tuint64_t pfn;\n};\n\nstruct e820_entry {\n\tu64 addr;\n\tu64 size;\n\tenum e820_type type;\n} __attribute__((packed));\n\nstruct e820_table {\n\t__u32 nr_entries;\n\tstruct e820_entry entries[3200];\n} __attribute__((packed));\n\ntypedef xen_pfn_t *__guest_handle_xen_pfn_t;\n\ntypedef long unsigned int xen_callback_t;\n\nstruct mmu_update {\n\tuint64_t ptr;\n\tuint64_t val;\n};\n\nstruct xen_memory_region {\n\tlong unsigned int start_pfn;\n\tlong unsigned int n_pfns;\n};\n\nstruct callback_register {\n\tuint16_t type;\n\tuint16_t flags;\n\txen_callback_t address;\n};\n\nstruct xen_memory_reservation {\n\t__guest_handle_xen_pfn_t extent_start;\n\txen_ulong_t nr_extents;\n\tunsigned int extent_order;\n\tunsigned int address_bits;\n\tdomid_t domid;\n};\n\nstruct xen_memory_map {\n\tunsigned int nr_entries;\n\t__guest_handle_void buffer;\n};\n\nstruct x86_apic_ops {\n\tunsigned int (*io_apic_read)(unsigned int, unsigned int);\n\tvoid (*restore)();\n};\n\nstruct physdev_apic {\n\tlong unsigned int apic_physbase;\n\tuint32_t reg;\n\tuint32_t value;\n};\n\ntypedef long unsigned int uintptr_t;\n\nstruct xen_pmu_amd_ctxt {\n\tuint32_t counters;\n\tuint32_t ctrls;\n\tuint64_t regs[0];\n};\n\nstruct xen_pmu_cntr_pair {\n\tuint64_t counter;\n\tuint64_t control;\n};\n\nstruct xen_pmu_intel_ctxt {\n\tuint32_t fixed_counters;\n\tuint32_t arch_counters;\n\tuint64_t global_ctrl;\n\tuint64_t global_ovf_ctrl;\n\tuint64_t global_status;\n\tuint64_t fixed_ctrl;\n\tuint64_t ds_area;\n\tuint64_t pebs_enable;\n\tuint64_t debugctl;\n\tuint64_t regs[0];\n};\n\nstruct xen_pmu_regs {\n\tuint64_t ip;\n\tuint64_t sp;\n\tuint64_t flags;\n\tuint16_t cs;\n\tuint16_t ss;\n\tuint8_t cpl;\n\tuint8_t pad[3];\n};\n\nstruct xen_pmu_arch {\n\tunion {\n\t\tstruct xen_pmu_regs regs;\n\t\tuint8_t pad[64];\n\t} r;\n\tuint64_t pmu_flags;\n\tunion {\n\t\tuint32_t lapic_lvtpc;\n\t\tuint64_t pad;\n\t} l;\n\tunion {\n\t\tstruct xen_pmu_amd_ctxt amd;\n\t\tstruct xen_pmu_intel_ctxt intel;\n\t\tuint8_t pad[128];\n\t} c;\n};\n\nstruct xen_pmu_params {\n\tstruct {\n\t\tuint32_t maj;\n\t\tuint32_t min;\n\t} version;\n\tuint64_t val;\n\tuint32_t vcpu;\n\tuint32_t pad;\n};\n\nstruct xen_pmu_data {\n\tuint32_t vcpu_id;\n\tuint32_t pcpu_id;\n\tdomid_t domain_id;\n\tuint8_t pad[6];\n\tstruct xen_pmu_arch pmu;\n};\n\nstruct xenpmu {\n\tstruct xen_pmu_data *xenpmu_data;\n\tuint8_t flags;\n};\n\nenum pg_level {\n\tPG_LEVEL_NONE = 0,\n\tPG_LEVEL_4K = 1,\n\tPG_LEVEL_2M = 2,\n\tPG_LEVEL_1G = 3,\n\tPG_LEVEL_512G = 4,\n\tPG_LEVEL_NUM = 5,\n};\n\ntypedef uint32_t grant_ref_t;\n\ntypedef uint32_t grant_handle_t;\n\nstruct gnttab_map_grant_ref {\n\tuint64_t host_addr;\n\tuint32_t flags;\n\tgrant_ref_t ref;\n\tdomid_t dom;\n\tint16_t status;\n\tgrant_handle_t handle;\n\tuint64_t dev_bus_addr;\n};\n\nstruct gnttab_unmap_grant_ref {\n\tuint64_t host_addr;\n\tuint64_t dev_bus_addr;\n\tgrant_handle_t handle;\n\tint16_t status;\n};\n\nenum {\n\tDESC_TSS = 9,\n\tDESC_LDT = 2,\n\tDESCTYPE_S = 16,\n};\n\nenum paravirt_lazy_mode {\n\tPARAVIRT_LAZY_NONE = 0,\n\tPARAVIRT_LAZY_MMU = 1,\n\tPARAVIRT_LAZY_CPU = 2,\n};\n\nstruct plist_head {\n\tstruct list_head node_list;\n};\n\nenum pm_qos_type {\n\tPM_QOS_UNITIALIZED = 0,\n\tPM_QOS_MAX = 1,\n\tPM_QOS_MIN = 2,\n};\n\nstruct pm_qos_constraints {\n\tstruct plist_head list;\n\ts32 target_value;\n\ts32 default_value;\n\ts32 no_constraint_value;\n\tenum pm_qos_type type;\n\tstruct blocking_notifier_head *notifiers;\n};\n\nstruct freq_constraints {\n\tstruct pm_qos_constraints min_freq;\n\tstruct blocking_notifier_head min_freq_notifiers;\n\tstruct pm_qos_constraints max_freq;\n\tstruct blocking_notifier_head max_freq_notifiers;\n};\n\nstruct pm_qos_flags {\n\tstruct list_head list;\n\ts32 effective_flags;\n};\n\nstruct dev_pm_qos_request;\n\nstruct dev_pm_qos {\n\tstruct pm_qos_constraints resume_latency;\n\tstruct pm_qos_constraints latency_tolerance;\n\tstruct freq_constraints freq;\n\tstruct pm_qos_flags flags;\n\tstruct dev_pm_qos_request *resume_latency_req;\n\tstruct dev_pm_qos_request *latency_tolerance_req;\n\tstruct dev_pm_qos_request *flags_req;\n};\n\ntypedef long int xen_long_t;\n\nstruct trap_info {\n\tuint8_t vector;\n\tuint8_t flags;\n\tuint16_t cs;\n\tlong unsigned int address;\n};\n\nstruct mmuext_op {\n\tunsigned int cmd;\n\tunion {\n\t\txen_pfn_t mfn;\n\t\tlong unsigned int linear_addr;\n\t} arg1;\n\tunion {\n\t\tunsigned int nr_ents;\n\t\tvoid *vcpumask;\n\t\txen_pfn_t src_mfn;\n\t} arg2;\n};\n\nstruct multicall_entry {\n\txen_ulong_t op;\n\txen_long_t result;\n\txen_ulong_t args[6];\n};\n\nstruct dom0_vga_console_info {\n\tuint8_t video_type;\n\tunion {\n\t\tstruct {\n\t\t\tuint16_t font_height;\n\t\t\tuint16_t cursor_x;\n\t\t\tuint16_t cursor_y;\n\t\t\tuint16_t rows;\n\t\t\tuint16_t columns;\n\t\t} text_mode_3;\n\t\tstruct {\n\t\t\tuint16_t width;\n\t\t\tuint16_t height;\n\t\t\tuint16_t bytes_per_line;\n\t\t\tuint16_t bits_per_pixel;\n\t\t\tuint32_t lfb_base;\n\t\t\tuint32_t lfb_size;\n\t\t\tuint8_t red_pos;\n\t\t\tuint8_t red_size;\n\t\t\tuint8_t green_pos;\n\t\t\tuint8_t green_size;\n\t\t\tuint8_t blue_pos;\n\t\t\tuint8_t blue_size;\n\t\t\tuint8_t rsvd_pos;\n\t\t\tuint8_t rsvd_size;\n\t\t\tuint32_t gbl_caps;\n\t\t\tuint16_t mode_attrs;\n\t\t} vesa_lfb;\n\t} u;\n};\n\nstruct physdev_set_iopl {\n\tuint32_t iopl;\n};\n\nstruct physdev_set_iobitmap {\n\tuint8_t *bitmap;\n\tuint32_t nr_ports;\n};\n\nstruct xen_extraversion {\n\tchar extraversion[16];\n};\n\ntypedef u32 acpi_status;\n\nstruct pm_qos_flags_request {\n\tstruct list_head node;\n\ts32 flags;\n};\n\nenum freq_qos_req_type {\n\tFREQ_QOS_MIN = 1,\n\tFREQ_QOS_MAX = 2,\n};\n\nstruct freq_qos_request {\n\tenum freq_qos_req_type type;\n\tstruct plist_node pnode;\n\tstruct freq_constraints *qos;\n};\n\nenum dev_pm_qos_req_type {\n\tDEV_PM_QOS_RESUME_LATENCY = 1,\n\tDEV_PM_QOS_LATENCY_TOLERANCE = 2,\n\tDEV_PM_QOS_MIN_FREQUENCY = 3,\n\tDEV_PM_QOS_MAX_FREQUENCY = 4,\n\tDEV_PM_QOS_FLAGS = 5,\n};\n\nstruct dev_pm_qos_request {\n\tenum dev_pm_qos_req_type type;\n\tunion {\n\t\tstruct plist_node pnode;\n\t\tstruct pm_qos_flags_request flr;\n\t\tstruct freq_qos_request freq;\n\t} data;\n\tstruct device *dev;\n};\n\nstruct multicall_space {\n\tstruct multicall_entry *mc;\n\tvoid *args;\n};\n\nstruct tls_descs {\n\tstruct desc_struct desc[3];\n};\n\nstruct trap_array_entry {\n\tvoid (*orig)();\n\tvoid (*xen)();\n\tbool ist_okay;\n};\n\nstruct mmu_gather_batch {\n\tstruct mmu_gather_batch *next;\n\tunsigned int nr;\n\tunsigned int max;\n\tstruct page *pages[0];\n};\n\nstruct mmu_table_batch;\n\nstruct mmu_gather {\n\tstruct mm_struct *mm;\n\tstruct mmu_table_batch *batch;\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tunsigned int fullmm: 1;\n\tunsigned int need_flush_all: 1;\n\tunsigned int freed_tables: 1;\n\tunsigned int cleared_ptes: 1;\n\tunsigned int cleared_pmds: 1;\n\tunsigned int cleared_puds: 1;\n\tunsigned int cleared_p4ds: 1;\n\tunsigned int vma_exec: 1;\n\tunsigned int vma_huge: 1;\n\tunsigned int batch_count;\n\tstruct mmu_gather_batch *active;\n\tstruct mmu_gather_batch local;\n\tstruct page *__pages[8];\n};\n\nstruct mmu_table_batch {\n\tstruct callback_head rcu;\n\tunsigned int nr;\n\tvoid *tables[0];\n};\n\nstruct xen_memory_exchange {\n\tstruct xen_memory_reservation in;\n\tstruct xen_memory_reservation out;\n\txen_ulong_t nr_exchanged;\n};\n\nstruct xen_machphys_mapping {\n\txen_ulong_t v_start;\n\txen_ulong_t v_end;\n\txen_ulong_t max_mfn;\n};\n\nenum pt_level {\n\tPT_PGD = 0,\n\tPT_P4D = 1,\n\tPT_PUD = 2,\n\tPT_PMD = 3,\n\tPT_PTE = 4,\n};\n\nstruct remap_data {\n\txen_pfn_t *pfn;\n\tbool contiguous;\n\tbool no_translate;\n\tpgprot_t prot;\n\tstruct mmu_update *mmu_update;\n};\n\nenum xen_mc_flush_reason {\n\tXEN_MC_FL_NONE = 0,\n\tXEN_MC_FL_BATCH = 1,\n\tXEN_MC_FL_ARGS = 2,\n\tXEN_MC_FL_CALLBACK = 3,\n};\n\nenum xen_mc_extend_args {\n\tXEN_MC_XE_OK = 0,\n\tXEN_MC_XE_BAD_OP = 1,\n\tXEN_MC_XE_NO_SPACE = 2,\n};\n\ntypedef void (*xen_mc_callback_fn_t)(void *);\n\nstruct callback {\n\tvoid (*fn)(void *);\n\tvoid *data;\n};\n\nstruct mc_buffer {\n\tunsigned int mcidx;\n\tunsigned int argidx;\n\tunsigned int cbidx;\n\tstruct multicall_entry entries[32];\n\tunsigned char args[512];\n\tstruct callback callbacks[32];\n};\n\nstruct hvm_start_info {\n\tuint32_t magic;\n\tuint32_t version;\n\tuint32_t flags;\n\tuint32_t nr_modules;\n\tuint64_t modlist_paddr;\n\tuint64_t cmdline_paddr;\n\tuint64_t rsdp_paddr;\n\tuint64_t memmap_paddr;\n\tuint32_t memmap_entries;\n\tuint32_t reserved;\n};\n\nstruct trace_event_raw_xen_mc__batch {\n\tstruct trace_entry ent;\n\tenum paravirt_lazy_mode mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mc_entry {\n\tstruct trace_entry ent;\n\tunsigned int op;\n\tunsigned int nargs;\n\tlong unsigned int args[6];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mc_entry_alloc {\n\tstruct trace_entry ent;\n\tsize_t args;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mc_callback {\n\tstruct trace_entry ent;\n\txen_mc_callback_fn_t fn;\n\tvoid *data;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mc_flush_reason {\n\tstruct trace_entry ent;\n\tenum xen_mc_flush_reason reason;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mc_flush {\n\tstruct trace_entry ent;\n\tunsigned int mcidx;\n\tunsigned int argidx;\n\tunsigned int cbidx;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mc_extend_args {\n\tstruct trace_entry ent;\n\tunsigned int op;\n\tsize_t args;\n\tenum xen_mc_extend_args res;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu__set_pte {\n\tstruct trace_entry ent;\n\tpte_t *ptep;\n\tpteval_t pteval;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_set_pmd {\n\tstruct trace_entry ent;\n\tpmd_t *pmdp;\n\tpmdval_t pmdval;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_set_pud {\n\tstruct trace_entry ent;\n\tpud_t *pudp;\n\tpudval_t pudval;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_set_p4d {\n\tstruct trace_entry ent;\n\tp4d_t *p4dp;\n\tp4d_t *user_p4dp;\n\tp4dval_t p4dval;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_ptep_modify_prot {\n\tstruct trace_entry ent;\n\tstruct mm_struct *mm;\n\tlong unsigned int addr;\n\tpte_t *ptep;\n\tpteval_t pteval;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_alloc_ptpage {\n\tstruct trace_entry ent;\n\tstruct mm_struct *mm;\n\tlong unsigned int pfn;\n\tunsigned int level;\n\tbool pinned;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_release_ptpage {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tunsigned int level;\n\tbool pinned;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_pgd {\n\tstruct trace_entry ent;\n\tstruct mm_struct *mm;\n\tpgd_t *pgd;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_flush_tlb_one_user {\n\tstruct trace_entry ent;\n\tlong unsigned int addr;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_flush_tlb_others {\n\tstruct trace_entry ent;\n\tunsigned int ncpus;\n\tstruct mm_struct *mm;\n\tlong unsigned int addr;\n\tlong unsigned int end;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_mmu_write_cr3 {\n\tstruct trace_entry ent;\n\tbool kernel;\n\tlong unsigned int cr3;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_cpu_write_ldt_entry {\n\tstruct trace_entry ent;\n\tstruct desc_struct *dt;\n\tint entrynum;\n\tu64 desc;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_cpu_write_idt_entry {\n\tstruct trace_entry ent;\n\tgate_desc *dt;\n\tint entrynum;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_cpu_load_idt {\n\tstruct trace_entry ent;\n\tlong unsigned int addr;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_cpu_write_gdt_entry {\n\tstruct trace_entry ent;\n\tu64 desc;\n\tstruct desc_struct *dt;\n\tint entrynum;\n\tint type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xen_cpu_set_ldt {\n\tstruct trace_entry ent;\n\tconst void *addr;\n\tunsigned int entries;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_xen_mc__batch {};\n\nstruct trace_event_data_offsets_xen_mc_entry {};\n\nstruct trace_event_data_offsets_xen_mc_entry_alloc {};\n\nstruct trace_event_data_offsets_xen_mc_callback {};\n\nstruct trace_event_data_offsets_xen_mc_flush_reason {};\n\nstruct trace_event_data_offsets_xen_mc_flush {};\n\nstruct trace_event_data_offsets_xen_mc_extend_args {};\n\nstruct trace_event_data_offsets_xen_mmu__set_pte {};\n\nstruct trace_event_data_offsets_xen_mmu_set_pmd {};\n\nstruct trace_event_data_offsets_xen_mmu_set_pud {};\n\nstruct trace_event_data_offsets_xen_mmu_set_p4d {};\n\nstruct trace_event_data_offsets_xen_mmu_ptep_modify_prot {};\n\nstruct trace_event_data_offsets_xen_mmu_alloc_ptpage {};\n\nstruct trace_event_data_offsets_xen_mmu_release_ptpage {};\n\nstruct trace_event_data_offsets_xen_mmu_pgd {};\n\nstruct trace_event_data_offsets_xen_mmu_flush_tlb_one_user {};\n\nstruct trace_event_data_offsets_xen_mmu_flush_tlb_others {};\n\nstruct trace_event_data_offsets_xen_mmu_write_cr3 {};\n\nstruct trace_event_data_offsets_xen_cpu_write_ldt_entry {};\n\nstruct trace_event_data_offsets_xen_cpu_write_idt_entry {};\n\nstruct trace_event_data_offsets_xen_cpu_load_idt {};\n\nstruct trace_event_data_offsets_xen_cpu_write_gdt_entry {};\n\nstruct trace_event_data_offsets_xen_cpu_set_ldt {};\n\ntypedef void (*btf_trace_xen_mc_batch)(void *, enum paravirt_lazy_mode);\n\ntypedef void (*btf_trace_xen_mc_issue)(void *, enum paravirt_lazy_mode);\n\ntypedef void (*btf_trace_xen_mc_entry)(void *, struct multicall_entry *, unsigned int);\n\ntypedef void (*btf_trace_xen_mc_entry_alloc)(void *, size_t);\n\ntypedef void (*btf_trace_xen_mc_callback)(void *, xen_mc_callback_fn_t, void *);\n\ntypedef void (*btf_trace_xen_mc_flush_reason)(void *, enum xen_mc_flush_reason);\n\ntypedef void (*btf_trace_xen_mc_flush)(void *, unsigned int, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_xen_mc_extend_args)(void *, long unsigned int, size_t, enum xen_mc_extend_args);\n\ntypedef void (*btf_trace_xen_mmu_set_pte)(void *, pte_t *, pte_t);\n\ntypedef void (*btf_trace_xen_mmu_set_pmd)(void *, pmd_t *, pmd_t);\n\ntypedef void (*btf_trace_xen_mmu_set_pud)(void *, pud_t *, pud_t);\n\ntypedef void (*btf_trace_xen_mmu_set_p4d)(void *, p4d_t *, p4d_t *, p4d_t);\n\ntypedef void (*btf_trace_xen_mmu_ptep_modify_prot_start)(void *, struct mm_struct *, long unsigned int, pte_t *, pte_t);\n\ntypedef void (*btf_trace_xen_mmu_ptep_modify_prot_commit)(void *, struct mm_struct *, long unsigned int, pte_t *, pte_t);\n\ntypedef void (*btf_trace_xen_mmu_alloc_ptpage)(void *, struct mm_struct *, long unsigned int, unsigned int, bool);\n\ntypedef void (*btf_trace_xen_mmu_release_ptpage)(void *, long unsigned int, unsigned int, bool);\n\ntypedef void (*btf_trace_xen_mmu_pgd_pin)(void *, struct mm_struct *, pgd_t *);\n\ntypedef void (*btf_trace_xen_mmu_pgd_unpin)(void *, struct mm_struct *, pgd_t *);\n\ntypedef void (*btf_trace_xen_mmu_flush_tlb_one_user)(void *, long unsigned int);\n\ntypedef void (*btf_trace_xen_mmu_flush_tlb_others)(void *, const struct cpumask *, struct mm_struct *, long unsigned int, long unsigned int);\n\ntypedef void (*btf_trace_xen_mmu_write_cr3)(void *, bool, long unsigned int);\n\ntypedef void (*btf_trace_xen_cpu_write_ldt_entry)(void *, struct desc_struct *, int, u64);\n\ntypedef void (*btf_trace_xen_cpu_write_idt_entry)(void *, gate_desc *, int, const gate_desc *);\n\ntypedef void (*btf_trace_xen_cpu_load_idt)(void *, const struct desc_ptr *);\n\ntypedef void (*btf_trace_xen_cpu_write_gdt_entry)(void *, struct desc_struct *, int, const void *, int);\n\ntypedef void (*btf_trace_xen_cpu_set_ldt)(void *, const void *, unsigned int);\n\nenum ipi_vector {\n\tXEN_RESCHEDULE_VECTOR = 0,\n\tXEN_CALL_FUNCTION_VECTOR = 1,\n\tXEN_CALL_FUNCTION_SINGLE_VECTOR = 2,\n\tXEN_SPIN_UNLOCK_VECTOR = 3,\n\tXEN_IRQ_WORK_VECTOR = 4,\n\tXEN_NMI_VECTOR = 5,\n\tXEN_NR_IPIS = 6,\n};\n\nstruct xen_common_irq {\n\tint irq;\n\tchar *name;\n};\n\nstruct cpu_user_regs {\n\tuint64_t r15;\n\tuint64_t r14;\n\tuint64_t r13;\n\tuint64_t r12;\n\tunion {\n\t\tuint64_t rbp;\n\t\tuint64_t ebp;\n\t\tuint32_t _ebp;\n\t};\n\tunion {\n\t\tuint64_t rbx;\n\t\tuint64_t ebx;\n\t\tuint32_t _ebx;\n\t};\n\tuint64_t r11;\n\tuint64_t r10;\n\tuint64_t r9;\n\tuint64_t r8;\n\tunion {\n\t\tuint64_t rax;\n\t\tuint64_t eax;\n\t\tuint32_t _eax;\n\t};\n\tunion {\n\t\tuint64_t rcx;\n\t\tuint64_t ecx;\n\t\tuint32_t _ecx;\n\t};\n\tunion {\n\t\tuint64_t rdx;\n\t\tuint64_t edx;\n\t\tuint32_t _edx;\n\t};\n\tunion {\n\t\tuint64_t rsi;\n\t\tuint64_t esi;\n\t\tuint32_t _esi;\n\t};\n\tunion {\n\t\tuint64_t rdi;\n\t\tuint64_t edi;\n\t\tuint32_t _edi;\n\t};\n\tuint32_t error_code;\n\tuint32_t entry_vector;\n\tunion {\n\t\tuint64_t rip;\n\t\tuint64_t eip;\n\t\tuint32_t _eip;\n\t};\n\tuint16_t cs;\n\tuint16_t _pad0[1];\n\tuint8_t saved_upcall_mask;\n\tuint8_t _pad1[3];\n\tunion {\n\t\tuint64_t rflags;\n\t\tuint64_t eflags;\n\t\tuint32_t _eflags;\n\t};\n\tunion {\n\t\tuint64_t rsp;\n\t\tuint64_t esp;\n\t\tuint32_t _esp;\n\t};\n\tuint16_t ss;\n\tuint16_t _pad2[3];\n\tuint16_t es;\n\tuint16_t _pad3[3];\n\tuint16_t ds;\n\tuint16_t _pad4[3];\n\tuint16_t fs;\n\tuint16_t _pad5[3];\n\tuint16_t gs;\n\tuint16_t _pad6[3];\n};\n\nstruct vcpu_guest_context {\n\tstruct {\n\t\tchar x[512];\n\t} fpu_ctxt;\n\tlong unsigned int flags;\n\tstruct cpu_user_regs user_regs;\n\tstruct trap_info trap_ctxt[256];\n\tlong unsigned int ldt_base;\n\tlong unsigned int ldt_ents;\n\tlong unsigned int gdt_frames[16];\n\tlong unsigned int gdt_ents;\n\tlong unsigned int kernel_ss;\n\tlong unsigned int kernel_sp;\n\tlong unsigned int ctrlreg[8];\n\tlong unsigned int debugreg[8];\n\tlong unsigned int event_callback_eip;\n\tlong unsigned int failsafe_callback_eip;\n\tlong unsigned int syscall_callback_eip;\n\tlong unsigned int vm_assist;\n\tuint64_t fs_base;\n\tuint64_t gs_base_kernel;\n\tuint64_t gs_base_user;\n};\n\nstruct sg_table {\n\tstruct scatterlist *sgl;\n\tunsigned int nents;\n\tunsigned int orig_nents;\n};\n\nenum swiotlb_force {\n\tSWIOTLB_NORMAL = 0,\n\tSWIOTLB_FORCE = 1,\n\tSWIOTLB_NO_FORCE = 2,\n};\n\nstruct iommu_table_entry {\n\tinitcall_t detect;\n\tinitcall_t depend;\n\tvoid (*early_init)();\n\tvoid (*late_init)();\n\tint flags;\n};\n\nunion efi_boot_services;\n\ntypedef union efi_boot_services efi_boot_services_t;\n\ntypedef struct {\n\tefi_table_hdr_t hdr;\n\tu32 fw_vendor;\n\tu32 fw_revision;\n\tu32 con_in_handle;\n\tu32 con_in;\n\tu32 con_out_handle;\n\tu32 con_out;\n\tu32 stderr_handle;\n\tu32 stderr;\n\tu32 runtime;\n\tu32 boottime;\n\tu32 nr_tables;\n\tu32 tables;\n} efi_system_table_32_t;\n\nunion efi_simple_text_input_protocol;\n\ntypedef union efi_simple_text_input_protocol efi_simple_text_input_protocol_t;\n\nunion efi_simple_text_output_protocol;\n\ntypedef union efi_simple_text_output_protocol efi_simple_text_output_protocol_t;\n\ntypedef union {\n\tstruct {\n\t\tefi_table_hdr_t hdr;\n\t\tlong unsigned int fw_vendor;\n\t\tu32 fw_revision;\n\t\tlong unsigned int con_in_handle;\n\t\tefi_simple_text_input_protocol_t *con_in;\n\t\tlong unsigned int con_out_handle;\n\t\tefi_simple_text_output_protocol_t *con_out;\n\t\tlong unsigned int stderr_handle;\n\t\tlong unsigned int stderr;\n\t\tefi_runtime_services_t *runtime;\n\t\tefi_boot_services_t *boottime;\n\t\tlong unsigned int nr_tables;\n\t\tlong unsigned int tables;\n\t};\n\tefi_system_table_32_t mixed_mode;\n} efi_system_table_t;\n\nenum efi_secureboot_mode {\n\tefi_secureboot_mode_unset = 0,\n\tefi_secureboot_mode_unknown = 1,\n\tefi_secureboot_mode_disabled = 2,\n\tefi_secureboot_mode_enabled = 3,\n};\n\nstruct hvm_modlist_entry {\n\tuint64_t paddr;\n\tuint64_t size;\n\tuint64_t cmdline_paddr;\n\tuint64_t reserved;\n};\n\nstruct hvm_memmap_table_entry {\n\tuint64_t addr;\n\tuint64_t size;\n\tuint32_t type;\n\tuint32_t reserved;\n};\n\nenum {\n\tWORK_STRUCT_PENDING_BIT = 0,\n\tWORK_STRUCT_DELAYED_BIT = 1,\n\tWORK_STRUCT_PWQ_BIT = 2,\n\tWORK_STRUCT_LINKED_BIT = 3,\n\tWORK_STRUCT_COLOR_SHIFT = 4,\n\tWORK_STRUCT_COLOR_BITS = 4,\n\tWORK_STRUCT_PENDING = 1,\n\tWORK_STRUCT_DELAYED = 2,\n\tWORK_STRUCT_PWQ = 4,\n\tWORK_STRUCT_LINKED = 8,\n\tWORK_STRUCT_STATIC = 0,\n\tWORK_NR_COLORS = 15,\n\tWORK_NO_COLOR = 15,\n\tWORK_CPU_UNBOUND = 8192,\n\tWORK_STRUCT_FLAG_BITS = 8,\n\tWORK_OFFQ_FLAG_BASE = 4,\n\t__WORK_OFFQ_CANCELING = 4,\n\tWORK_OFFQ_CANCELING = 16,\n\tWORK_OFFQ_FLAG_BITS = 1,\n\tWORK_OFFQ_POOL_SHIFT = 5,\n\tWORK_OFFQ_LEFT = 59,\n\tWORK_OFFQ_POOL_BITS = 31,\n\tWORK_OFFQ_POOL_NONE = 2147483647,\n\tWORK_STRUCT_FLAG_MASK = 255,\n\tWORK_STRUCT_WQ_DATA_MASK = 4294967040,\n\tWORK_STRUCT_NO_POOL = 4294967264,\n\tWORK_BUSY_PENDING = 1,\n\tWORK_BUSY_RUNNING = 2,\n\tWORKER_DESC_LEN = 24,\n};\n\nunion hv_x64_msr_hypercall_contents {\n\tu64 as_uint64;\n\tstruct {\n\t\tu64 enable: 1;\n\t\tu64 reserved: 11;\n\t\tu64 guest_physical_address: 52;\n\t};\n};\n\nstruct hv_reenlightenment_control {\n\t__u64 vector: 8;\n\t__u64 reserved1: 8;\n\t__u64 enabled: 1;\n\t__u64 reserved2: 15;\n\t__u64 target_vp: 32;\n};\n\nstruct hv_tsc_emulation_control {\n\t__u64 enabled: 1;\n\t__u64 reserved: 63;\n};\n\nstruct hv_tsc_emulation_status {\n\t__u64 inprogress: 1;\n\t__u64 reserved: 63;\n};\n\nstruct hv_nested_enlightenments_control {\n\tstruct {\n\t\t__u32 directhypercall: 1;\n\t\t__u32 reserved: 31;\n\t} features;\n\tstruct {\n\t\t__u32 reserved;\n\t} hypercallControls;\n};\n\nstruct hv_vp_assist_page {\n\t__u32 apic_assist;\n\t__u32 reserved1;\n\t__u64 vtl_control[3];\n\tstruct hv_nested_enlightenments_control nested_control;\n\t__u8 enlighten_vmentry;\n\t__u8 reserved2[7];\n\t__u64 current_nested_vmcs;\n};\n\nstruct ms_hyperv_info {\n\tu32 features;\n\tu32 misc_features;\n\tu32 hints;\n\tu32 nested_features;\n\tu32 max_vp_index;\n\tu32 max_lp_index;\n};\n\nenum HV_GENERIC_SET_FORMAT {\n\tHV_GENERIC_SET_SPARSE_4K = 0,\n\tHV_GENERIC_SET_ALL = 1,\n};\n\nstruct hv_vpset {\n\tu64 format;\n\tu64 valid_bank_mask;\n\tu64 bank_contents[0];\n};\n\nstruct hv_tlb_flush {\n\tu64 address_space;\n\tu64 flags;\n\tu64 processor_mask;\n\tu64 gva_list[0];\n};\n\nstruct hv_tlb_flush_ex {\n\tu64 address_space;\n\tu64 flags;\n\tstruct hv_vpset hv_vp_set;\n\tu64 gva_list[0];\n};\n\nstruct trace_event_raw_hyperv_mmu_flush_tlb_others {\n\tstruct trace_entry ent;\n\tunsigned int ncpus;\n\tstruct mm_struct *mm;\n\tlong unsigned int addr;\n\tlong unsigned int end;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_hyperv_nested_flush_guest_mapping {\n\tstruct trace_entry ent;\n\tu64 as;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_hyperv_nested_flush_guest_mapping_range {\n\tstruct trace_entry ent;\n\tu64 as;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_hyperv_send_ipi_mask {\n\tstruct trace_entry ent;\n\tunsigned int ncpus;\n\tint vector;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_hyperv_send_ipi_one {\n\tstruct trace_entry ent;\n\tint cpu;\n\tint vector;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_hyperv_mmu_flush_tlb_others {};\n\nstruct trace_event_data_offsets_hyperv_nested_flush_guest_mapping {};\n\nstruct trace_event_data_offsets_hyperv_nested_flush_guest_mapping_range {};\n\nstruct trace_event_data_offsets_hyperv_send_ipi_mask {};\n\nstruct trace_event_data_offsets_hyperv_send_ipi_one {};\n\ntypedef void (*btf_trace_hyperv_mmu_flush_tlb_others)(void *, const struct cpumask *, const struct flush_tlb_info *);\n\ntypedef void (*btf_trace_hyperv_nested_flush_guest_mapping)(void *, u64, int);\n\ntypedef void (*btf_trace_hyperv_nested_flush_guest_mapping_range)(void *, u64, int);\n\ntypedef void (*btf_trace_hyperv_send_ipi_mask)(void *, const struct cpumask *, int);\n\ntypedef void (*btf_trace_hyperv_send_ipi_one)(void *, int, int);\n\nstruct hv_guest_mapping_flush {\n\tu64 address_space;\n\tu64 flags;\n};\n\nunion hv_gpa_page_range {\n\tu64 address_space;\n\tstruct {\n\t\tu64 additional_pages: 11;\n\t\tu64 largepage: 1;\n\t\tu64 basepfn: 52;\n\t} page;\n};\n\nstruct hv_guest_mapping_flush_list {\n\tu64 address_space;\n\tu64 flags;\n\tunion hv_gpa_page_range gpa_list[510];\n};\n\ntypedef int (*hyperv_fill_flush_list_func)(struct hv_guest_mapping_flush_list *, void *);\n\nstruct hv_send_ipi {\n\tu32 vector;\n\tu32 reserved;\n\tu64 cpu_mask;\n};\n\nstruct hv_send_ipi_ex {\n\tu32 vector;\n\tu32 reserved;\n\tstruct hv_vpset vp_set;\n};\n\nstruct real_mode_header {\n\tu32 text_start;\n\tu32 ro_end;\n\tu32 trampoline_start;\n\tu32 trampoline_header;\n\tu32 sev_es_trampoline_start;\n\tu32 trampoline_pgd;\n\tu32 wakeup_start;\n\tu32 wakeup_header;\n\tu32 machine_real_restart_asm;\n\tu32 machine_real_restart_seg;\n};\n\nstruct trampoline_header {\n\tu64 start;\n\tu64 efer;\n\tu32 cr4;\n\tu32 flags;\n};\n\nstruct pkru_state {\n\tu32 pkru;\n\tu32 pad;\n};\n\nenum show_regs_mode {\n\tSHOW_REGS_SHORT = 0,\n\tSHOW_REGS_USER = 1,\n\tSHOW_REGS_ALL = 2,\n};\n\nstruct resctrl_pqr_state {\n\tu32 cur_rmid;\n\tu32 cur_closid;\n\tu32 default_rmid;\n\tu32 default_closid;\n};\n\nenum which_selector {\n\tFS = 0,\n\tGS = 1,\n};\n\nstruct sigcontext_64 {\n\t__u64 r8;\n\t__u64 r9;\n\t__u64 r10;\n\t__u64 r11;\n\t__u64 r12;\n\t__u64 r13;\n\t__u64 r14;\n\t__u64 r15;\n\t__u64 di;\n\t__u64 si;\n\t__u64 bp;\n\t__u64 bx;\n\t__u64 dx;\n\t__u64 ax;\n\t__u64 cx;\n\t__u64 sp;\n\t__u64 ip;\n\t__u64 flags;\n\t__u16 cs;\n\t__u16 gs;\n\t__u16 fs;\n\t__u16 ss;\n\t__u64 err;\n\t__u64 trapno;\n\t__u64 oldmask;\n\t__u64 cr2;\n\t__u64 fpstate;\n\t__u64 reserved1[8];\n};\n\nstruct sigaltstack {\n\tvoid *ss_sp;\n\tint ss_flags;\n\tsize_t ss_size;\n};\n\ntypedef struct sigaltstack stack_t;\n\nstruct siginfo {\n\tunion {\n\t\tstruct {\n\t\t\tint si_signo;\n\t\t\tint si_errno;\n\t\t\tint si_code;\n\t\t\tunion __sifields _sifields;\n\t\t};\n\t\tint _si_pad[32];\n\t};\n};\n\ntypedef struct siginfo siginfo_t;\n\nstruct ksignal {\n\tstruct k_sigaction ka;\n\tkernel_siginfo_t info;\n\tint sig;\n};\n\nstruct __large_struct {\n\tlong unsigned int buf[100];\n};\n\ntypedef u32 compat_sigset_word;\n\ntypedef struct {\n\tcompat_sigset_word sig[2];\n} compat_sigset_t;\n\nstruct ucontext {\n\tlong unsigned int uc_flags;\n\tstruct ucontext *uc_link;\n\tstack_t uc_stack;\n\tstruct sigcontext_64 uc_mcontext;\n\tsigset_t uc_sigmask;\n};\n\nstruct kernel_vm86_regs {\n\tstruct pt_regs pt;\n\tshort unsigned int es;\n\tshort unsigned int __esh;\n\tshort unsigned int ds;\n\tshort unsigned int __dsh;\n\tshort unsigned int fs;\n\tshort unsigned int __fsh;\n\tshort unsigned int gs;\n\tshort unsigned int __gsh;\n};\n\nstruct rt_sigframe {\n\tchar *pretcode;\n\tstruct ucontext uc;\n\tstruct siginfo info;\n};\n\ntypedef s32 compat_clock_t;\n\ntypedef s32 compat_pid_t;\n\ntypedef s32 compat_timer_t;\n\ntypedef s32 compat_int_t;\n\ntypedef u32 __compat_uid32_t;\n\nunion compat_sigval {\n\tcompat_int_t sival_int;\n\tcompat_uptr_t sival_ptr;\n};\n\ntypedef union compat_sigval compat_sigval_t;\n\nstruct compat_siginfo {\n\tint si_signo;\n\tint si_errno;\n\tint si_code;\n\tunion {\n\t\tint _pad[29];\n\t\tstruct {\n\t\t\tcompat_pid_t _pid;\n\t\t\t__compat_uid32_t _uid;\n\t\t} _kill;\n\t\tstruct {\n\t\t\tcompat_timer_t _tid;\n\t\t\tint _overrun;\n\t\t\tcompat_sigval_t _sigval;\n\t\t} _timer;\n\t\tstruct {\n\t\t\tcompat_pid_t _pid;\n\t\t\t__compat_uid32_t _uid;\n\t\t\tcompat_sigval_t _sigval;\n\t\t} _rt;\n\t\tstruct {\n\t\t\tcompat_pid_t _pid;\n\t\t\t__compat_uid32_t _uid;\n\t\t\tint _status;\n\t\t\tcompat_clock_t _utime;\n\t\t\tcompat_clock_t _stime;\n\t\t} _sigchld;\n\t\tstruct {\n\t\t\tcompat_uptr_t _addr;\n\t\t\tunion {\n\t\t\t\tshort int _addr_lsb;\n\t\t\t\tstruct {\n\t\t\t\t\tchar _dummy_bnd[4];\n\t\t\t\t\tcompat_uptr_t _lower;\n\t\t\t\t\tcompat_uptr_t _upper;\n\t\t\t\t} _addr_bnd;\n\t\t\t\tstruct {\n\t\t\t\t\tchar _dummy_pkey[4];\n\t\t\t\t\tu32 _pkey;\n\t\t\t\t} _addr_pkey;\n\t\t\t};\n\t\t} _sigfault;\n\t\tstruct {\n\t\t\tcompat_long_t _band;\n\t\t\tint _fd;\n\t\t} _sigpoll;\n\t\tstruct {\n\t\t\tcompat_uptr_t _call_addr;\n\t\t\tint _syscall;\n\t\t\tunsigned int _arch;\n\t\t} _sigsys;\n\t} _sifields;\n};\n\ntypedef struct compat_siginfo compat_siginfo_t;\n\nenum bug_trap_type {\n\tBUG_TRAP_TYPE_NONE = 0,\n\tBUG_TRAP_TYPE_WARN = 1,\n\tBUG_TRAP_TYPE_BUG = 2,\n};\n\ntypedef u8 kprobe_opcode_t;\n\nstruct arch_specific_insn {\n\tkprobe_opcode_t *insn;\n\tbool boostable;\n\tbool if_modifier;\n\tint tp_len;\n};\n\nstruct kprobe;\n\ntypedef int (*kprobe_pre_handler_t)(struct kprobe *, struct pt_regs *);\n\ntypedef void (*kprobe_post_handler_t)(struct kprobe *, struct pt_regs *, long unsigned int);\n\ntypedef int (*kprobe_fault_handler_t)(struct kprobe *, struct pt_regs *, int);\n\nstruct kprobe {\n\tstruct hlist_node hlist;\n\tstruct list_head list;\n\tlong unsigned int nmissed;\n\tkprobe_opcode_t *addr;\n\tconst char *symbol_name;\n\tunsigned int offset;\n\tkprobe_pre_handler_t pre_handler;\n\tkprobe_post_handler_t post_handler;\n\tkprobe_fault_handler_t fault_handler;\n\tkprobe_opcode_t opcode;\n\tstruct arch_specific_insn ainsn;\n\tu32 flags;\n};\n\nenum die_val {\n\tDIE_OOPS = 1,\n\tDIE_INT3 = 2,\n\tDIE_DEBUG = 3,\n\tDIE_PANIC = 4,\n\tDIE_NMI = 5,\n\tDIE_DIE = 6,\n\tDIE_KERNELDEBUG = 7,\n\tDIE_TRAP = 8,\n\tDIE_GPF = 9,\n\tDIE_CALL = 10,\n\tDIE_PAGE_FAULT = 11,\n\tDIE_NMIUNKNOWN = 12,\n};\n\nenum kernel_gp_hint {\n\tGP_NO_HINT = 0,\n\tGP_NON_CANONICAL = 1,\n\tGP_CANONICAL = 2,\n};\n\nstruct bad_iret_stack {\n\tvoid *error_entry_ret;\n\tstruct pt_regs regs;\n};\n\ntypedef struct irq_desc *vector_irq_t[256];\n\nstruct trace_event_raw_x86_irq_vector {\n\tstruct trace_entry ent;\n\tint vector;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_vector_config {\n\tstruct trace_entry ent;\n\tunsigned int irq;\n\tunsigned int vector;\n\tunsigned int cpu;\n\tunsigned int apicdest;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_vector_mod {\n\tstruct trace_entry ent;\n\tunsigned int irq;\n\tunsigned int vector;\n\tunsigned int cpu;\n\tunsigned int prev_vector;\n\tunsigned int prev_cpu;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_vector_reserve {\n\tstruct trace_entry ent;\n\tunsigned int irq;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_vector_alloc {\n\tstruct trace_entry ent;\n\tunsigned int irq;\n\tunsigned int vector;\n\tbool reserved;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_vector_alloc_managed {\n\tstruct trace_entry ent;\n\tunsigned int irq;\n\tunsigned int vector;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_vector_activate {\n\tstruct trace_entry ent;\n\tunsigned int irq;\n\tbool is_managed;\n\tbool can_reserve;\n\tbool reserve;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_vector_teardown {\n\tstruct trace_entry ent;\n\tunsigned int irq;\n\tbool is_managed;\n\tbool has_reserved;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_vector_setup {\n\tstruct trace_entry ent;\n\tunsigned int irq;\n\tbool is_legacy;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_vector_free_moved {\n\tstruct trace_entry ent;\n\tunsigned int irq;\n\tunsigned int cpu;\n\tunsigned int vector;\n\tbool is_managed;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_x86_irq_vector {};\n\nstruct trace_event_data_offsets_vector_config {};\n\nstruct trace_event_data_offsets_vector_mod {};\n\nstruct trace_event_data_offsets_vector_reserve {};\n\nstruct trace_event_data_offsets_vector_alloc {};\n\nstruct trace_event_data_offsets_vector_alloc_managed {};\n\nstruct trace_event_data_offsets_vector_activate {};\n\nstruct trace_event_data_offsets_vector_teardown {};\n\nstruct trace_event_data_offsets_vector_setup {};\n\nstruct trace_event_data_offsets_vector_free_moved {};\n\ntypedef void (*btf_trace_local_timer_entry)(void *, int);\n\ntypedef void (*btf_trace_local_timer_exit)(void *, int);\n\ntypedef void (*btf_trace_spurious_apic_entry)(void *, int);\n\ntypedef void (*btf_trace_spurious_apic_exit)(void *, int);\n\ntypedef void (*btf_trace_error_apic_entry)(void *, int);\n\ntypedef void (*btf_trace_error_apic_exit)(void *, int);\n\ntypedef void (*btf_trace_x86_platform_ipi_entry)(void *, int);\n\ntypedef void (*btf_trace_x86_platform_ipi_exit)(void *, int);\n\ntypedef void (*btf_trace_irq_work_entry)(void *, int);\n\ntypedef void (*btf_trace_irq_work_exit)(void *, int);\n\ntypedef void (*btf_trace_reschedule_entry)(void *, int);\n\ntypedef void (*btf_trace_reschedule_exit)(void *, int);\n\ntypedef void (*btf_trace_call_function_entry)(void *, int);\n\ntypedef void (*btf_trace_call_function_exit)(void *, int);\n\ntypedef void (*btf_trace_call_function_single_entry)(void *, int);\n\ntypedef void (*btf_trace_call_function_single_exit)(void *, int);\n\ntypedef void (*btf_trace_threshold_apic_entry)(void *, int);\n\ntypedef void (*btf_trace_threshold_apic_exit)(void *, int);\n\ntypedef void (*btf_trace_deferred_error_apic_entry)(void *, int);\n\ntypedef void (*btf_trace_deferred_error_apic_exit)(void *, int);\n\ntypedef void (*btf_trace_thermal_apic_entry)(void *, int);\n\ntypedef void (*btf_trace_thermal_apic_exit)(void *, int);\n\ntypedef void (*btf_trace_vector_config)(void *, unsigned int, unsigned int, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_vector_update)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_vector_clear)(void *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_vector_reserve_managed)(void *, unsigned int, int);\n\ntypedef void (*btf_trace_vector_reserve)(void *, unsigned int, int);\n\ntypedef void (*btf_trace_vector_alloc)(void *, unsigned int, unsigned int, bool, int);\n\ntypedef void (*btf_trace_vector_alloc_managed)(void *, unsigned int, unsigned int, int);\n\ntypedef void (*btf_trace_vector_activate)(void *, unsigned int, bool, bool, bool);\n\ntypedef void (*btf_trace_vector_deactivate)(void *, unsigned int, bool, bool, bool);\n\ntypedef void (*btf_trace_vector_teardown)(void *, unsigned int, bool, bool);\n\ntypedef void (*btf_trace_vector_setup)(void *, unsigned int, bool, int);\n\ntypedef void (*btf_trace_vector_free_moved)(void *, unsigned int, unsigned int, unsigned int, bool);\n\nstruct estack_pages {\n\tu32 offs;\n\tu16 size;\n\tu16 type;\n};\n\nenum refcount_saturation_type {\n\tREFCOUNT_ADD_NOT_ZERO_OVF = 0,\n\tREFCOUNT_ADD_OVF = 1,\n\tREFCOUNT_ADD_UAF = 2,\n\tREFCOUNT_SUB_UAF = 3,\n\tREFCOUNT_DEC_LEAK = 4,\n};\n\nenum lockdown_reason {\n\tLOCKDOWN_NONE = 0,\n\tLOCKDOWN_MODULE_SIGNATURE = 1,\n\tLOCKDOWN_DEV_MEM = 2,\n\tLOCKDOWN_EFI_TEST = 3,\n\tLOCKDOWN_KEXEC = 4,\n\tLOCKDOWN_HIBERNATION = 5,\n\tLOCKDOWN_PCI_ACCESS = 6,\n\tLOCKDOWN_IOPORT = 7,\n\tLOCKDOWN_MSR = 8,\n\tLOCKDOWN_ACPI_TABLES = 9,\n\tLOCKDOWN_PCMCIA_CIS = 10,\n\tLOCKDOWN_TIOCSSERIAL = 11,\n\tLOCKDOWN_MODULE_PARAMETERS = 12,\n\tLOCKDOWN_MMIOTRACE = 13,\n\tLOCKDOWN_DEBUGFS = 14,\n\tLOCKDOWN_XMON_WR = 15,\n\tLOCKDOWN_INTEGRITY_MAX = 16,\n\tLOCKDOWN_KCORE = 17,\n\tLOCKDOWN_KPROBES = 18,\n\tLOCKDOWN_BPF_READ = 19,\n\tLOCKDOWN_PERF = 20,\n\tLOCKDOWN_TRACEFS = 21,\n\tLOCKDOWN_XMON_RW = 22,\n\tLOCKDOWN_XFRM_SECRET = 23,\n\tLOCKDOWN_CONFIDENTIALITY_MAX = 24,\n};\n\nenum lockdep_ok {\n\tLOCKDEP_STILL_OK = 0,\n\tLOCKDEP_NOW_UNRELIABLE = 1,\n};\n\nstruct trace_event_raw_nmi_handler {\n\tstruct trace_entry ent;\n\tvoid *handler;\n\ts64 delta_ns;\n\tint handled;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_nmi_handler {};\n\ntypedef void (*btf_trace_nmi_handler)(void *, void *, s64, int);\n\nstruct nmi_desc {\n\traw_spinlock_t lock;\n\tstruct list_head head;\n};\n\nstruct nmi_stats {\n\tunsigned int normal;\n\tunsigned int unknown;\n\tunsigned int external;\n\tunsigned int swallow;\n};\n\nenum nmi_states {\n\tNMI_NOT_RUNNING = 0,\n\tNMI_EXECUTING = 1,\n\tNMI_LATCHED = 2,\n};\n\nstruct user_desc {\n\tunsigned int entry_number;\n\tunsigned int base_addr;\n\tunsigned int limit;\n\tunsigned int seg_32bit: 1;\n\tunsigned int contents: 2;\n\tunsigned int read_exec_only: 1;\n\tunsigned int limit_in_pages: 1;\n\tunsigned int seg_not_present: 1;\n\tunsigned int useable: 1;\n\tunsigned int lm: 1;\n};\n\nenum con_scroll {\n\tSM_UP = 0,\n\tSM_DOWN = 1,\n};\n\nenum vc_intensity {\n\tVCI_HALF_BRIGHT = 0,\n\tVCI_NORMAL = 1,\n\tVCI_BOLD = 2,\n\tVCI_MASK = 3,\n};\n\nstruct vc_data;\n\nstruct console_font;\n\nstruct consw {\n\tstruct module *owner;\n\tconst char * (*con_startup)();\n\tvoid (*con_init)(struct vc_data *, int);\n\tvoid (*con_deinit)(struct vc_data *);\n\tvoid (*con_clear)(struct vc_data *, int, int, int, int);\n\tvoid (*con_putc)(struct vc_data *, int, int, int);\n\tvoid (*con_putcs)(struct vc_data *, const short unsigned int *, int, int, int);\n\tvoid (*con_cursor)(struct vc_data *, int);\n\tbool (*con_scroll)(struct vc_data *, unsigned int, unsigned int, enum con_scroll, unsigned int);\n\tint (*con_switch)(struct vc_data *);\n\tint (*con_blank)(struct vc_data *, int, int);\n\tint (*con_font_set)(struct vc_data *, struct console_font *, unsigned int);\n\tint (*con_font_get)(struct vc_data *, struct console_font *);\n\tint (*con_font_default)(struct vc_data *, struct console_font *, char *);\n\tint (*con_resize)(struct vc_data *, unsigned int, unsigned int, unsigned int);\n\tvoid (*con_set_palette)(struct vc_data *, const unsigned char *);\n\tvoid (*con_scrolldelta)(struct vc_data *, int);\n\tint (*con_set_origin)(struct vc_data *);\n\tvoid (*con_save_screen)(struct vc_data *);\n\tu8 (*con_build_attr)(struct vc_data *, u8, enum vc_intensity, bool, bool, bool, bool);\n\tvoid (*con_invert_region)(struct vc_data *, u16 *, int);\n\tu16 * (*con_screen_pos)(const struct vc_data *, int);\n\tlong unsigned int (*con_getxy)(struct vc_data *, long unsigned int, int *, int *);\n\tvoid (*con_flush_scrollback)(struct vc_data *);\n\tint (*con_debug_enter)(struct vc_data *);\n\tint (*con_debug_leave)(struct vc_data *);\n};\n\nstruct vc_state {\n\tunsigned int x;\n\tunsigned int y;\n\tunsigned char color;\n\tunsigned char Gx_charset[2];\n\tunsigned int charset: 1;\n\tenum vc_intensity intensity;\n\tbool italic;\n\tbool underline;\n\tbool blink;\n\tbool reverse;\n};\n\nstruct console_font {\n\tunsigned int width;\n\tunsigned int height;\n\tunsigned int charcount;\n\tunsigned char *data;\n};\n\nstruct vt_mode {\n\tchar mode;\n\tchar waitv;\n\tshort int relsig;\n\tshort int acqsig;\n\tshort int frsig;\n};\n\nstruct uni_pagedir;\n\nstruct uni_screen;\n\nstruct vc_data {\n\tstruct tty_port port;\n\tstruct vc_state state;\n\tstruct vc_state saved_state;\n\tshort unsigned int vc_num;\n\tunsigned int vc_cols;\n\tunsigned int vc_rows;\n\tunsigned int vc_size_row;\n\tunsigned int vc_scan_lines;\n\tlong unsigned int vc_origin;\n\tlong unsigned int vc_scr_end;\n\tlong unsigned int vc_visible_origin;\n\tunsigned int vc_top;\n\tunsigned int vc_bottom;\n\tconst struct consw *vc_sw;\n\tshort unsigned int *vc_screenbuf;\n\tunsigned int vc_screenbuf_size;\n\tunsigned char vc_mode;\n\tunsigned char vc_attr;\n\tunsigned char vc_def_color;\n\tunsigned char vc_ulcolor;\n\tunsigned char vc_itcolor;\n\tunsigned char vc_halfcolor;\n\tunsigned int vc_cursor_type;\n\tshort unsigned int vc_complement_mask;\n\tshort unsigned int vc_s_complement_mask;\n\tlong unsigned int vc_pos;\n\tshort unsigned int vc_hi_font_mask;\n\tstruct console_font vc_font;\n\tshort unsigned int vc_video_erase_char;\n\tunsigned int vc_state;\n\tunsigned int vc_npar;\n\tunsigned int vc_par[16];\n\tstruct vt_mode vt_mode;\n\tstruct pid *vt_pid;\n\tint vt_newvt;\n\twait_queue_head_t paste_wait;\n\tunsigned int vc_disp_ctrl: 1;\n\tunsigned int vc_toggle_meta: 1;\n\tunsigned int vc_decscnm: 1;\n\tunsigned int vc_decom: 1;\n\tunsigned int vc_decawm: 1;\n\tunsigned int vc_deccm: 1;\n\tunsigned int vc_decim: 1;\n\tunsigned int vc_priv: 3;\n\tunsigned int vc_need_wrap: 1;\n\tunsigned int vc_can_do_color: 1;\n\tunsigned int vc_report_mouse: 2;\n\tunsigned char vc_utf: 1;\n\tunsigned char vc_utf_count;\n\tint vc_utf_char;\n\tlong unsigned int vc_tab_stop[4];\n\tunsigned char vc_palette[48];\n\tshort unsigned int *vc_translate;\n\tunsigned int vc_resize_user;\n\tunsigned int vc_bell_pitch;\n\tunsigned int vc_bell_duration;\n\tshort unsigned int vc_cur_blink_ms;\n\tstruct vc_data **vc_display_fg;\n\tstruct uni_pagedir *vc_uni_pagedir;\n\tstruct uni_pagedir **vc_uni_pagedir_loc;\n\tstruct uni_screen *vc_uni_screen;\n};\n\nstruct edd {\n\tunsigned int mbr_signature[16];\n\tstruct edd_info edd_info[6];\n\tunsigned char mbr_signature_nr;\n\tunsigned char edd_info_nr;\n};\n\nstruct setup_data {\n\t__u64 next;\n\t__u32 type;\n\t__u32 len;\n\t__u8 data[0];\n};\n\nstruct setup_indirect {\n\t__u32 type;\n\t__u32 reserved;\n\t__u64 len;\n\t__u64 addr;\n};\n\nenum memblock_flags {\n\tMEMBLOCK_NONE = 0,\n\tMEMBLOCK_HOTPLUG = 1,\n\tMEMBLOCK_MIRROR = 2,\n\tMEMBLOCK_NOMAP = 4,\n};\n\nstruct memblock_region {\n\tphys_addr_t base;\n\tphys_addr_t size;\n\tenum memblock_flags flags;\n\tint nid;\n};\n\nstruct memblock_type {\n\tlong unsigned int cnt;\n\tlong unsigned int max;\n\tphys_addr_t total_size;\n\tstruct memblock_region *regions;\n\tchar *name;\n};\n\nstruct memblock {\n\tbool bottom_up;\n\tphys_addr_t current_limit;\n\tstruct memblock_type memory;\n\tstruct memblock_type reserved;\n};\n\nstruct x86_msi_ops {\n\tvoid (*restore_msi_irqs)(struct pci_dev *);\n};\n\nstruct msi_controller {\n\tstruct module *owner;\n\tstruct device *dev;\n\tstruct device_node *of_node;\n\tstruct list_head list;\n\tint (*setup_irq)(struct msi_controller *, struct pci_dev *, struct msi_desc *);\n\tint (*setup_irqs)(struct msi_controller *, struct pci_dev *, int, int);\n\tvoid (*teardown_irq)(struct msi_controller *, unsigned int);\n};\n\nstruct legacy_pic {\n\tint nr_legacy_irqs;\n\tstruct irq_chip *chip;\n\tvoid (*mask)(unsigned int);\n\tvoid (*unmask)(unsigned int);\n\tvoid (*mask_all)();\n\tvoid (*restore_mask)();\n\tvoid (*init)(int);\n\tint (*probe)();\n\tint (*irq_pending)(unsigned int);\n\tvoid (*make_irq)(unsigned int);\n};\n\nenum jump_label_type {\n\tJUMP_LABEL_NOP = 0,\n\tJUMP_LABEL_JMP = 1,\n};\n\nunion text_poke_insn {\n\tu8 text[5];\n\tstruct {\n\t\tu8 opcode;\n\t\ts32 disp;\n\t} __attribute__((packed));\n};\n\nenum {\n\tJL_STATE_START = 0,\n\tJL_STATE_NO_UPDATE = 1,\n\tJL_STATE_UPDATE = 2,\n};\n\ntypedef short unsigned int __kernel_old_uid_t;\n\ntypedef short unsigned int __kernel_old_gid_t;\n\ntypedef struct {\n\tint val[2];\n} __kernel_fsid_t;\n\ntypedef __kernel_old_uid_t old_uid_t;\n\ntypedef __kernel_old_gid_t old_gid_t;\n\nstruct kernel_clone_args {\n\tu64 flags;\n\tint *pidfd;\n\tint *child_tid;\n\tint *parent_tid;\n\tint exit_signal;\n\tlong unsigned int stack;\n\tlong unsigned int stack_size;\n\tlong unsigned int tls;\n\tpid_t *set_tid;\n\tsize_t set_tid_size;\n\tint cgroup;\n\tstruct cgroup *cgrp;\n\tstruct css_set *cset;\n};\n\nstruct kstatfs {\n\tlong int f_type;\n\tlong int f_bsize;\n\tu64 f_blocks;\n\tu64 f_bfree;\n\tu64 f_bavail;\n\tu64 f_files;\n\tu64 f_ffree;\n\t__kernel_fsid_t f_fsid;\n\tlong int f_namelen;\n\tlong int f_frsize;\n\tlong int f_flags;\n\tlong int f_spare[4];\n};\n\nstruct stat64 {\n\tlong long unsigned int st_dev;\n\tunsigned char __pad0[4];\n\tunsigned int __st_ino;\n\tunsigned int st_mode;\n\tunsigned int st_nlink;\n\tunsigned int st_uid;\n\tunsigned int st_gid;\n\tlong long unsigned int st_rdev;\n\tunsigned char __pad3[4];\n\tlong long int st_size;\n\tunsigned int st_blksize;\n\tlong long int st_blocks;\n\tunsigned int st_atime;\n\tunsigned int st_atime_nsec;\n\tunsigned int st_mtime;\n\tunsigned int st_mtime_nsec;\n\tunsigned int st_ctime;\n\tunsigned int st_ctime_nsec;\n\tlong long unsigned int st_ino;\n} __attribute__((packed));\n\nstruct mmap_arg_struct32 {\n\tunsigned int addr;\n\tunsigned int len;\n\tunsigned int prot;\n\tunsigned int flags;\n\tunsigned int fd;\n\tunsigned int offset;\n};\n\nstruct vm_unmapped_area_info {\n\tlong unsigned int flags;\n\tlong unsigned int length;\n\tlong unsigned int low_limit;\n\tlong unsigned int high_limit;\n\tlong unsigned int align_mask;\n\tlong unsigned int align_offset;\n};\n\nenum align_flags {\n\tALIGN_VA_32 = 1,\n\tALIGN_VA_64 = 2,\n};\n\nstruct va_alignment {\n\tint flags;\n\tlong unsigned int mask;\n\tlong unsigned int bits;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum {\n\tMEMREMAP_WB = 1,\n\tMEMREMAP_WT = 2,\n\tMEMREMAP_WC = 4,\n\tMEMREMAP_ENC = 8,\n\tMEMREMAP_DEC = 16,\n};\n\ntypedef void (*swap_func_t)(void *, void *, int);\n\ntypedef int (*cmp_func_t)(const void *, const void *);\n\nenum {\n\tIORES_DESC_NONE = 0,\n\tIORES_DESC_CRASH_KERNEL = 1,\n\tIORES_DESC_ACPI_TABLES = 2,\n\tIORES_DESC_ACPI_NV_STORAGE = 3,\n\tIORES_DESC_PERSISTENT_MEMORY = 4,\n\tIORES_DESC_PERSISTENT_MEMORY_LEGACY = 5,\n\tIORES_DESC_DEVICE_PRIVATE_MEMORY = 6,\n\tIORES_DESC_RESERVED = 7,\n\tIORES_DESC_SOFT_RESERVED = 8,\n};\n\nstruct change_member {\n\tstruct e820_entry *entry;\n\tlong long unsigned int addr;\n};\n\nstruct iommu_fault_param;\n\nstruct iommu_fwspec;\n\nstruct dev_iommu {\n\tstruct mutex lock;\n\tstruct iommu_fault_param *fault_param;\n\tstruct iommu_fwspec *fwspec;\n\tstruct iommu_device *iommu_dev;\n\tvoid *priv;\n};\n\nstruct of_phandle_args {\n\tstruct device_node *np;\n\tint args_count;\n\tuint32_t args[16];\n};\n\nstruct iommu_fault_unrecoverable {\n\t__u32 reason;\n\t__u32 flags;\n\t__u32 pasid;\n\t__u32 perm;\n\t__u64 addr;\n\t__u64 fetch_addr;\n};\n\nstruct iommu_fault_page_request {\n\t__u32 flags;\n\t__u32 pasid;\n\t__u32 grpid;\n\t__u32 perm;\n\t__u64 addr;\n\t__u64 private_data[2];\n};\n\nstruct iommu_fault {\n\t__u32 type;\n\t__u32 padding;\n\tunion {\n\t\tstruct iommu_fault_unrecoverable event;\n\t\tstruct iommu_fault_page_request prm;\n\t\t__u8 padding2[56];\n\t};\n};\n\nstruct iommu_page_response {\n\t__u32 argsz;\n\t__u32 version;\n\t__u32 flags;\n\t__u32 pasid;\n\t__u32 grpid;\n\t__u32 code;\n};\n\nstruct iommu_inv_addr_info {\n\t__u32 flags;\n\t__u32 archid;\n\t__u64 pasid;\n\t__u64 addr;\n\t__u64 granule_size;\n\t__u64 nb_granules;\n};\n\nstruct iommu_inv_pasid_info {\n\t__u32 flags;\n\t__u32 archid;\n\t__u64 pasid;\n};\n\nstruct iommu_cache_invalidate_info {\n\t__u32 argsz;\n\t__u32 version;\n\t__u8 cache;\n\t__u8 granularity;\n\t__u8 padding[6];\n\tunion {\n\t\tstruct iommu_inv_pasid_info pasid_info;\n\t\tstruct iommu_inv_addr_info addr_info;\n\t} granu;\n};\n\nstruct iommu_gpasid_bind_data_vtd {\n\t__u64 flags;\n\t__u32 pat;\n\t__u32 emt;\n};\n\nstruct iommu_gpasid_bind_data {\n\t__u32 argsz;\n\t__u32 version;\n\t__u32 format;\n\t__u32 addr_width;\n\t__u64 flags;\n\t__u64 gpgd;\n\t__u64 hpasid;\n\t__u64 gpasid;\n\t__u8 padding[8];\n\tunion {\n\t\tstruct iommu_gpasid_bind_data_vtd vtd;\n\t} vendor;\n};\n\ntypedef int (*iommu_fault_handler_t)(struct iommu_domain *, struct device *, long unsigned int, int, void *);\n\nstruct iommu_domain_geometry {\n\tdma_addr_t aperture_start;\n\tdma_addr_t aperture_end;\n\tbool force_aperture;\n};\n\nstruct iommu_domain {\n\tunsigned int type;\n\tconst struct iommu_ops *ops;\n\tlong unsigned int pgsize_bitmap;\n\tiommu_fault_handler_t handler;\n\tvoid *handler_token;\n\tstruct iommu_domain_geometry geometry;\n\tvoid *iova_cookie;\n};\n\ntypedef int (*iommu_dev_fault_handler_t)(struct iommu_fault *, void *);\n\nenum iommu_resv_type {\n\tIOMMU_RESV_DIRECT = 0,\n\tIOMMU_RESV_DIRECT_RELAXABLE = 1,\n\tIOMMU_RESV_RESERVED = 2,\n\tIOMMU_RESV_MSI = 3,\n\tIOMMU_RESV_SW_MSI = 4,\n};\n\nstruct iommu_resv_region {\n\tstruct list_head list;\n\tphys_addr_t start;\n\tsize_t length;\n\tint prot;\n\tenum iommu_resv_type type;\n};\n\nstruct iommu_iotlb_gather {\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tsize_t pgsize;\n\tstruct page *freelist;\n};\n\nstruct iommu_device {\n\tstruct list_head list;\n\tconst struct iommu_ops *ops;\n\tstruct fwnode_handle *fwnode;\n\tstruct device *dev;\n};\n\nstruct iommu_sva {\n\tstruct device *dev;\n};\n\nstruct iommu_fault_event {\n\tstruct iommu_fault fault;\n\tstruct list_head list;\n};\n\nstruct iommu_fault_param {\n\tiommu_dev_fault_handler_t handler;\n\tvoid *data;\n\tstruct list_head faults;\n\tstruct mutex lock;\n};\n\nstruct iommu_fwspec {\n\tconst struct iommu_ops *ops;\n\tstruct fwnode_handle *iommu_fwnode;\n\tu32 flags;\n\tu32 num_pasid_bits;\n\tunsigned int num_ids;\n\tu32 ids[0];\n};\n\nenum dmi_field {\n\tDMI_NONE = 0,\n\tDMI_BIOS_VENDOR = 1,\n\tDMI_BIOS_VERSION = 2,\n\tDMI_BIOS_DATE = 3,\n\tDMI_BIOS_RELEASE = 4,\n\tDMI_EC_FIRMWARE_RELEASE = 5,\n\tDMI_SYS_VENDOR = 6,\n\tDMI_PRODUCT_NAME = 7,\n\tDMI_PRODUCT_VERSION = 8,\n\tDMI_PRODUCT_SERIAL = 9,\n\tDMI_PRODUCT_UUID = 10,\n\tDMI_PRODUCT_SKU = 11,\n\tDMI_PRODUCT_FAMILY = 12,\n\tDMI_BOARD_VENDOR = 13,\n\tDMI_BOARD_NAME = 14,\n\tDMI_BOARD_VERSION = 15,\n\tDMI_BOARD_SERIAL = 16,\n\tDMI_BOARD_ASSET_TAG = 17,\n\tDMI_CHASSIS_VENDOR = 18,\n\tDMI_CHASSIS_TYPE = 19,\n\tDMI_CHASSIS_VERSION = 20,\n\tDMI_CHASSIS_SERIAL = 21,\n\tDMI_CHASSIS_ASSET_TAG = 22,\n\tDMI_STRING_MAX = 23,\n\tDMI_OEM_STRING = 24,\n};\n\nstruct acpi_device;\n\nstruct pci_sysdata {\n\tint domain;\n\tint node;\n\tstruct acpi_device *companion;\n\tvoid *iommu;\n\tvoid *fwnode;\n\tstruct pci_dev *vmd_dev;\n};\n\nenum {\n\tNONE_FORCE_HPET_RESUME = 0,\n\tOLD_ICH_FORCE_HPET_RESUME = 1,\n\tICH_FORCE_HPET_RESUME = 2,\n\tVT8237_FORCE_HPET_RESUME = 3,\n\tNVIDIA_FORCE_HPET_RESUME = 4,\n\tATI_FORCE_HPET_RESUME = 5,\n};\n\nenum meminit_context {\n\tMEMINIT_EARLY = 0,\n\tMEMINIT_HOTPLUG = 1,\n};\n\nstruct cpu {\n\tint node_id;\n\tint hotpluggable;\n\tstruct device dev;\n};\n\nstruct x86_cpu {\n\tstruct cpu cpu;\n};\n\nstruct debugfs_blob_wrapper {\n\tvoid *data;\n\tlong unsigned int size;\n};\n\nstruct setup_data_node {\n\tu64 paddr;\n\tu32 type;\n\tu32 len;\n};\n\nstruct paravirt_patch_site {\n\tu8 *instr;\n\tu8 type;\n\tu8 len;\n};\n\nstruct die_args {\n\tstruct pt_regs *regs;\n\tconst char *str;\n\tlong int err;\n\tint trapnr;\n\tint signr;\n};\n\nstruct smp_alt_module {\n\tstruct module *mod;\n\tchar *name;\n\tconst s32 *locks;\n\tconst s32 *locks_end;\n\tu8 *text;\n\tu8 *text_end;\n\tstruct list_head next;\n};\n\ntypedef struct {\n\tstruct mm_struct *mm;\n} temp_mm_state_t;\n\nstruct text_poke_loc {\n\ts32 rel_addr;\n\ts32 rel32;\n\tu8 opcode;\n\tconst u8 text[5];\n\tu8 old;\n};\n\nstruct bp_patching_desc {\n\tstruct text_poke_loc *vec;\n\tint nr_entries;\n\tatomic_t refs;\n};\n\nenum {\n\tHW_BREAKPOINT_LEN_1 = 1,\n\tHW_BREAKPOINT_LEN_2 = 2,\n\tHW_BREAKPOINT_LEN_3 = 3,\n\tHW_BREAKPOINT_LEN_4 = 4,\n\tHW_BREAKPOINT_LEN_5 = 5,\n\tHW_BREAKPOINT_LEN_6 = 6,\n\tHW_BREAKPOINT_LEN_7 = 7,\n\tHW_BREAKPOINT_LEN_8 = 8,\n};\n\nenum {\n\tHW_BREAKPOINT_EMPTY = 0,\n\tHW_BREAKPOINT_R = 1,\n\tHW_BREAKPOINT_W = 2,\n\tHW_BREAKPOINT_RW = 3,\n\tHW_BREAKPOINT_X = 4,\n\tHW_BREAKPOINT_INVALID = 7,\n};\n\ntypedef unsigned int u_int;\n\ntypedef long long unsigned int cycles_t;\n\nstruct system_counterval_t {\n\tu64 cycles;\n\tstruct clocksource *cs;\n};\n\ntypedef struct {\n\tseqcount_t seqcount;\n} seqcount_latch_t;\n\nenum cpufreq_table_sorting {\n\tCPUFREQ_TABLE_UNSORTED = 0,\n\tCPUFREQ_TABLE_SORTED_ASCENDING = 1,\n\tCPUFREQ_TABLE_SORTED_DESCENDING = 2,\n};\n\nstruct cpufreq_cpuinfo {\n\tunsigned int max_freq;\n\tunsigned int min_freq;\n\tunsigned int transition_latency;\n};\n\nstruct clk;\n\nstruct cpufreq_governor;\n\nstruct cpufreq_frequency_table;\n\nstruct cpufreq_stats;\n\nstruct thermal_cooling_device;\n\nstruct cpufreq_policy {\n\tcpumask_var_t cpus;\n\tcpumask_var_t related_cpus;\n\tcpumask_var_t real_cpus;\n\tunsigned int shared_type;\n\tunsigned int cpu;\n\tstruct clk *clk;\n\tstruct cpufreq_cpuinfo cpuinfo;\n\tunsigned int min;\n\tunsigned int max;\n\tunsigned int cur;\n\tunsigned int suspend_freq;\n\tunsigned int policy;\n\tunsigned int last_policy;\n\tstruct cpufreq_governor *governor;\n\tvoid *governor_data;\n\tchar last_governor[16];\n\tstruct work_struct update;\n\tstruct freq_constraints constraints;\n\tstruct freq_qos_request *min_freq_req;\n\tstruct freq_qos_request *max_freq_req;\n\tstruct cpufreq_frequency_table *freq_table;\n\tenum cpufreq_table_sorting freq_table_sorted;\n\tstruct list_head policy_list;\n\tstruct kobject kobj;\n\tstruct completion kobj_unregister;\n\tstruct rw_semaphore rwsem;\n\tbool fast_switch_possible;\n\tbool fast_switch_enabled;\n\tbool strict_target;\n\tunsigned int transition_delay_us;\n\tbool dvfs_possible_from_any_cpu;\n\tunsigned int cached_target_freq;\n\tunsigned int cached_resolved_idx;\n\tbool transition_ongoing;\n\tspinlock_t transition_lock;\n\twait_queue_head_t transition_wait;\n\tstruct task_struct *transition_task;\n\tstruct cpufreq_stats *stats;\n\tvoid *driver_data;\n\tstruct thermal_cooling_device *cdev;\n\tstruct notifier_block nb_min;\n\tstruct notifier_block nb_max;\n};\n\nstruct cpufreq_governor {\n\tchar name[16];\n\tint (*init)(struct cpufreq_policy *);\n\tvoid (*exit)(struct cpufreq_policy *);\n\tint (*start)(struct cpufreq_policy *);\n\tvoid (*stop)(struct cpufreq_policy *);\n\tvoid (*limits)(struct cpufreq_policy *);\n\tssize_t (*show_setspeed)(struct cpufreq_policy *, char *);\n\tint (*store_setspeed)(struct cpufreq_policy *, unsigned int);\n\tstruct list_head governor_list;\n\tstruct module *owner;\n\tu8 flags;\n};\n\nstruct cpufreq_frequency_table {\n\tunsigned int flags;\n\tunsigned int driver_data;\n\tunsigned int frequency;\n};\n\nstruct cpufreq_freqs {\n\tstruct cpufreq_policy *policy;\n\tunsigned int old;\n\tunsigned int new;\n\tu8 flags;\n};\n\nstruct cyc2ns {\n\tstruct cyc2ns_data data[2];\n\tseqcount_latch_t seq;\n};\n\nstruct x86_cpu_id {\n\t__u16 vendor;\n\t__u16 family;\n\t__u16 model;\n\t__u16 steppings;\n\t__u16 feature;\n\tkernel_ulong_t driver_data;\n};\n\nstruct muldiv {\n\tu32 multiplier;\n\tu32 divider;\n};\n\nstruct freq_desc {\n\tbool use_msr_plat;\n\tstruct muldiv muldiv[16];\n\tu32 freqs[16];\n\tu32 mask;\n};\n\nstruct dmi_strmatch {\n\tunsigned char slot: 7;\n\tunsigned char exact_match: 1;\n\tchar substr[79];\n};\n\nstruct dmi_system_id {\n\tint (*callback)(const struct dmi_system_id *);\n\tconst char *ident;\n\tstruct dmi_strmatch matches[4];\n\tvoid *driver_data;\n};\n\nstruct pdev_archdata {};\n\nstruct platform_device_id;\n\nstruct mfd_cell;\n\nstruct platform_device {\n\tconst char *name;\n\tint id;\n\tbool id_auto;\n\tstruct device dev;\n\tu64 platform_dma_mask;\n\tstruct device_dma_parameters dma_parms;\n\tu32 num_resources;\n\tstruct resource *resource;\n\tconst struct platform_device_id *id_entry;\n\tchar *driver_override;\n\tstruct mfd_cell *mfd_cell;\n\tstruct pdev_archdata archdata;\n};\n\nstruct platform_device_id {\n\tchar name[20];\n\tkernel_ulong_t driver_data;\n};\n\nstruct rtc_time {\n\tint tm_sec;\n\tint tm_min;\n\tint tm_hour;\n\tint tm_mday;\n\tint tm_mon;\n\tint tm_year;\n\tint tm_wday;\n\tint tm_yday;\n\tint tm_isdst;\n};\n\nstruct pnp_device_id {\n\t__u8 id[8];\n\tkernel_ulong_t driver_data;\n};\n\nstruct pnp_card_device_id {\n\t__u8 id[8];\n\tkernel_ulong_t driver_data;\n\tstruct {\n\t\t__u8 id[8];\n\t} devs[8];\n};\n\nstruct acpi_table_header {\n\tchar signature[4];\n\tu32 length;\n\tu8 revision;\n\tu8 checksum;\n\tchar oem_id[6];\n\tchar oem_table_id[8];\n\tu32 oem_revision;\n\tchar asl_compiler_id[4];\n\tu32 asl_compiler_revision;\n};\n\nstruct acpi_generic_address {\n\tu8 space_id;\n\tu8 bit_width;\n\tu8 bit_offset;\n\tu8 access_width;\n\tu64 address;\n} __attribute__((packed));\n\nstruct acpi_table_fadt {\n\tstruct acpi_table_header header;\n\tu32 facs;\n\tu32 dsdt;\n\tu8 model;\n\tu8 preferred_profile;\n\tu16 sci_interrupt;\n\tu32 smi_command;\n\tu8 acpi_enable;\n\tu8 acpi_disable;\n\tu8 s4_bios_request;\n\tu8 pstate_control;\n\tu32 pm1a_event_block;\n\tu32 pm1b_event_block;\n\tu32 pm1a_control_block;\n\tu32 pm1b_control_block;\n\tu32 pm2_control_block;\n\tu32 pm_timer_block;\n\tu32 gpe0_block;\n\tu32 gpe1_block;\n\tu8 pm1_event_length;\n\tu8 pm1_control_length;\n\tu8 pm2_control_length;\n\tu8 pm_timer_length;\n\tu8 gpe0_block_length;\n\tu8 gpe1_block_length;\n\tu8 gpe1_base;\n\tu8 cst_control;\n\tu16 c2_latency;\n\tu16 c3_latency;\n\tu16 flush_size;\n\tu16 flush_stride;\n\tu8 duty_offset;\n\tu8 duty_width;\n\tu8 day_alarm;\n\tu8 month_alarm;\n\tu8 century;\n\tu16 boot_flags;\n\tu8 reserved;\n\tu32 flags;\n\tstruct acpi_generic_address reset_register;\n\tu8 reset_value;\n\tu16 arm_boot_flags;\n\tu8 minor_revision;\n\tu64 Xfacs;\n\tu64 Xdsdt;\n\tstruct acpi_generic_address xpm1a_event_block;\n\tstruct acpi_generic_address xpm1b_event_block;\n\tstruct acpi_generic_address xpm1a_control_block;\n\tstruct acpi_generic_address xpm1b_control_block;\n\tstruct acpi_generic_address xpm2_control_block;\n\tstruct acpi_generic_address xpm_timer_block;\n\tstruct acpi_generic_address xgpe0_block;\n\tstruct acpi_generic_address xgpe1_block;\n\tstruct acpi_generic_address sleep_control;\n\tstruct acpi_generic_address sleep_status;\n\tu64 hypervisor_id;\n} __attribute__((packed));\n\nstruct pnp_protocol;\n\nstruct pnp_id;\n\nstruct pnp_card {\n\tstruct device dev;\n\tunsigned char number;\n\tstruct list_head global_list;\n\tstruct list_head protocol_list;\n\tstruct list_head devices;\n\tstruct pnp_protocol *protocol;\n\tstruct pnp_id *id;\n\tchar name[50];\n\tunsigned char pnpver;\n\tunsigned char productver;\n\tunsigned int serial;\n\tunsigned char checksum;\n\tstruct proc_dir_entry *procdir;\n};\n\nstruct pnp_dev;\n\nstruct pnp_protocol {\n\tstruct list_head protocol_list;\n\tchar *name;\n\tint (*get)(struct pnp_dev *);\n\tint (*set)(struct pnp_dev *);\n\tint (*disable)(struct pnp_dev *);\n\tbool (*can_wakeup)(struct pnp_dev *);\n\tint (*suspend)(struct pnp_dev *, pm_message_t);\n\tint (*resume)(struct pnp_dev *);\n\tunsigned char number;\n\tstruct device dev;\n\tstruct list_head cards;\n\tstruct list_head devices;\n};\n\nstruct pnp_id {\n\tchar id[8];\n\tstruct pnp_id *next;\n};\n\nstruct pnp_card_driver;\n\nstruct pnp_card_link {\n\tstruct pnp_card *card;\n\tstruct pnp_card_driver *driver;\n\tvoid *driver_data;\n\tpm_message_t pm_state;\n};\n\nstruct pnp_driver {\n\tconst char *name;\n\tconst struct pnp_device_id *id_table;\n\tunsigned int flags;\n\tint (*probe)(struct pnp_dev *, const struct pnp_device_id *);\n\tvoid (*remove)(struct pnp_dev *);\n\tvoid (*shutdown)(struct pnp_dev *);\n\tint (*suspend)(struct pnp_dev *, pm_message_t);\n\tint (*resume)(struct pnp_dev *);\n\tstruct device_driver driver;\n};\n\nstruct pnp_card_driver {\n\tstruct list_head global_list;\n\tchar *name;\n\tconst struct pnp_card_device_id *id_table;\n\tunsigned int flags;\n\tint (*probe)(struct pnp_card_link *, const struct pnp_card_device_id *);\n\tvoid (*remove)(struct pnp_card_link *);\n\tint (*suspend)(struct pnp_card_link *, pm_message_t);\n\tint (*resume)(struct pnp_card_link *);\n\tstruct pnp_driver link;\n};\n\nstruct pnp_dev {\n\tstruct device dev;\n\tu64 dma_mask;\n\tunsigned int number;\n\tint status;\n\tstruct list_head global_list;\n\tstruct list_head protocol_list;\n\tstruct list_head card_list;\n\tstruct list_head rdev_list;\n\tstruct pnp_protocol *protocol;\n\tstruct pnp_card *card;\n\tstruct pnp_driver *driver;\n\tstruct pnp_card_link *card_link;\n\tstruct pnp_id *id;\n\tint active;\n\tint capabilities;\n\tunsigned int num_dependent_sets;\n\tstruct list_head resources;\n\tstruct list_head options;\n\tchar name[50];\n\tint flags;\n\tstruct proc_dir_entry *procent;\n\tvoid *data;\n};\n\nenum insn_type {\n\tCALL = 0,\n\tNOP = 1,\n\tJMP = 2,\n\tRET = 3,\n};\n\nstruct ldttss_desc {\n\tu16 limit0;\n\tu16 base0;\n\tu16 base1: 8;\n\tu16 type: 5;\n\tu16 dpl: 2;\n\tu16 p: 1;\n\tu16 limit1: 4;\n\tu16 zero0: 3;\n\tu16 g: 1;\n\tu16 base2: 8;\n\tu32 base3;\n\tu32 zero1;\n};\n\ntypedef struct ldttss_desc tss_desc;\n\nenum idle_boot_override {\n\tIDLE_NO_OVERRIDE = 0,\n\tIDLE_HALT = 1,\n\tIDLE_NOMWAIT = 2,\n\tIDLE_POLL = 3,\n};\n\nenum tick_broadcast_mode {\n\tTICK_BROADCAST_OFF = 0,\n\tTICK_BROADCAST_ON = 1,\n\tTICK_BROADCAST_FORCE = 2,\n};\n\nenum tick_broadcast_state {\n\tTICK_BROADCAST_EXIT = 0,\n\tTICK_BROADCAST_ENTER = 1,\n};\n\nstruct inactive_task_frame {\n\tlong unsigned int r15;\n\tlong unsigned int r14;\n\tlong unsigned int r13;\n\tlong unsigned int r12;\n\tlong unsigned int bx;\n\tlong unsigned int bp;\n\tlong unsigned int ret_addr;\n};\n\nstruct fork_frame {\n\tstruct inactive_task_frame frame;\n\tstruct pt_regs regs;\n};\n\nstruct ssb_state {\n\tstruct ssb_state *shared_state;\n\traw_spinlock_t lock;\n\tunsigned int disable_state;\n\tlong unsigned int local_state;\n};\n\nstruct trace_event_raw_x86_fpu {\n\tstruct trace_entry ent;\n\tstruct fpu *fpu;\n\tbool load_fpu;\n\tu64 xfeatures;\n\tu64 xcomp_bv;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_x86_fpu {};\n\ntypedef void (*btf_trace_x86_fpu_before_save)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_after_save)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_before_restore)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_after_restore)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_regs_activated)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_regs_deactivated)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_init_state)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_dropped)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_copy_src)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_copy_dst)(void *, struct fpu *);\n\ntypedef void (*btf_trace_x86_fpu_xstate_check_failed)(void *, struct fpu *);\n\nstruct _fpreg {\n\t__u16 significand[4];\n\t__u16 exponent;\n};\n\nstruct _fpxreg {\n\t__u16 significand[4];\n\t__u16 exponent;\n\t__u16 padding[3];\n};\n\nstruct user_i387_ia32_struct {\n\tu32 cwd;\n\tu32 swd;\n\tu32 twd;\n\tu32 fip;\n\tu32 fcs;\n\tu32 foo;\n\tu32 fos;\n\tu32 st_space[20];\n};\n\nstruct membuf {\n\tvoid *p;\n\tsize_t left;\n};\n\nstruct user_regset;\n\ntypedef int user_regset_active_fn(struct task_struct *, const struct user_regset *);\n\ntypedef int user_regset_get2_fn(struct task_struct *, const struct user_regset *, struct membuf);\n\ntypedef int user_regset_set_fn(struct task_struct *, const struct user_regset *, unsigned int, unsigned int, const void *, const void *);\n\ntypedef int user_regset_writeback_fn(struct task_struct *, const struct user_regset *, int);\n\nstruct user_regset {\n\tuser_regset_get2_fn *regset_get;\n\tuser_regset_set_fn *set;\n\tuser_regset_active_fn *active;\n\tuser_regset_writeback_fn *writeback;\n\tunsigned int n;\n\tunsigned int size;\n\tunsigned int align;\n\tunsigned int bias;\n\tunsigned int core_note_type;\n};\n\nstruct _fpx_sw_bytes {\n\t__u32 magic1;\n\t__u32 extended_size;\n\t__u64 xfeatures;\n\t__u32 xstate_size;\n\t__u32 padding[7];\n};\n\nstruct _xmmreg {\n\t__u32 element[4];\n};\n\nstruct _fpstate_32 {\n\t__u32 cw;\n\t__u32 sw;\n\t__u32 tag;\n\t__u32 ipoff;\n\t__u32 cssel;\n\t__u32 dataoff;\n\t__u32 datasel;\n\tstruct _fpreg _st[8];\n\t__u16 status;\n\t__u16 magic;\n\t__u32 _fxsr_env[6];\n\t__u32 mxcsr;\n\t__u32 reserved;\n\tstruct _fpxreg _fxsr_st[8];\n\tstruct _xmmreg _xmm[8];\n\tunion {\n\t\t__u32 padding1[44];\n\t\t__u32 padding[44];\n\t};\n\tunion {\n\t\t__u32 padding2[12];\n\t\tstruct _fpx_sw_bytes sw_reserved;\n\t};\n};\n\nstruct ia32_pasid_state {\n\tu64 pasid;\n};\n\ntypedef u32 compat_ulong_t;\n\nstruct user_regset_view {\n\tconst char *name;\n\tconst struct user_regset *regsets;\n\tunsigned int n;\n\tu32 e_flags;\n\tu16 e_machine;\n\tu8 ei_osabi;\n};\n\nenum x86_regset {\n\tREGSET_GENERAL = 0,\n\tREGSET_FP = 1,\n\tREGSET_XFP = 2,\n\tREGSET_IOPERM64 = 2,\n\tREGSET_XSTATE = 3,\n\tREGSET_TLS = 4,\n\tREGSET_IOPERM32 = 5,\n};\n\nstruct pt_regs_offset {\n\tconst char *name;\n\tint offset;\n};\n\nenum {\n\tTB_SHUTDOWN_REBOOT = 0,\n\tTB_SHUTDOWN_S5 = 1,\n\tTB_SHUTDOWN_S4 = 2,\n\tTB_SHUTDOWN_S3 = 3,\n\tTB_SHUTDOWN_HALT = 4,\n\tTB_SHUTDOWN_WFS = 5,\n};\n\nstruct tboot_mac_region {\n\tu64 start;\n\tu32 size;\n} __attribute__((packed));\n\nstruct tboot_acpi_generic_address {\n\tu8 space_id;\n\tu8 bit_width;\n\tu8 bit_offset;\n\tu8 access_width;\n\tu64 address;\n} __attribute__((packed));\n\nstruct tboot_acpi_sleep_info {\n\tstruct tboot_acpi_generic_address pm1a_cnt_blk;\n\tstruct tboot_acpi_generic_address pm1b_cnt_blk;\n\tstruct tboot_acpi_generic_address pm1a_evt_blk;\n\tstruct tboot_acpi_generic_address pm1b_evt_blk;\n\tu16 pm1a_cnt_val;\n\tu16 pm1b_cnt_val;\n\tu64 wakeup_vector;\n\tu32 vector_width;\n\tu64 kernel_s3_resume_vector;\n} __attribute__((packed));\n\nstruct tboot {\n\tu8 uuid[16];\n\tu32 version;\n\tu32 log_addr;\n\tu32 shutdown_entry;\n\tu32 shutdown_type;\n\tstruct tboot_acpi_sleep_info acpi_sinfo;\n\tu32 tboot_base;\n\tu32 tboot_size;\n\tu8 num_mac_regions;\n\tstruct tboot_mac_region mac_regions[32];\n\tu8 s3_key[64];\n\tu8 reserved_align[3];\n\tu32 num_in_wfs;\n} __attribute__((packed));\n\nstruct sha1_hash {\n\tu8 hash[20];\n};\n\nstruct sinit_mle_data {\n\tu32 version;\n\tstruct sha1_hash bios_acm_id;\n\tu32 edx_senter_flags;\n\tu64 mseg_valid;\n\tstruct sha1_hash sinit_hash;\n\tstruct sha1_hash mle_hash;\n\tstruct sha1_hash stm_hash;\n\tstruct sha1_hash lcp_policy_hash;\n\tu32 lcp_policy_control;\n\tu32 rlp_wakeup_addr;\n\tu32 reserved;\n\tu32 num_mdrs;\n\tu32 mdrs_off;\n\tu32 num_vtd_dmars;\n\tu32 vtd_dmars_off;\n} __attribute__((packed));\n\ntypedef bool (*stack_trace_consume_fn)(void *, long unsigned int);\n\nstruct stack_frame_user {\n\tconst void *next_fp;\n\tlong unsigned int ret_addr;\n};\n\nenum cache_type {\n\tCACHE_TYPE_NOCACHE = 0,\n\tCACHE_TYPE_INST = 1,\n\tCACHE_TYPE_DATA = 2,\n\tCACHE_TYPE_SEPARATE = 3,\n\tCACHE_TYPE_UNIFIED = 4,\n};\n\nstruct cacheinfo {\n\tunsigned int id;\n\tenum cache_type type;\n\tunsigned int level;\n\tunsigned int coherency_line_size;\n\tunsigned int number_of_sets;\n\tunsigned int ways_of_associativity;\n\tunsigned int physical_line_partition;\n\tunsigned int size;\n\tcpumask_t shared_cpu_map;\n\tunsigned int attributes;\n\tvoid *fw_token;\n\tbool disable_sysfs;\n\tvoid *priv;\n};\n\nstruct cpu_cacheinfo {\n\tstruct cacheinfo *info_list;\n\tunsigned int num_levels;\n\tunsigned int num_leaves;\n\tbool cpu_map_populated;\n};\n\nstruct amd_l3_cache {\n\tunsigned int indices;\n\tu8 subcaches[4];\n};\n\nstruct threshold_block {\n\tunsigned int block;\n\tunsigned int bank;\n\tunsigned int cpu;\n\tu32 address;\n\tu16 interrupt_enable;\n\tbool interrupt_capable;\n\tu16 threshold_limit;\n\tstruct kobject kobj;\n\tstruct list_head miscj;\n};\n\nstruct threshold_bank {\n\tstruct kobject *kobj;\n\tstruct threshold_block *blocks;\n\trefcount_t cpus;\n\tunsigned int shared;\n};\n\nstruct amd_northbridge {\n\tstruct pci_dev *root;\n\tstruct pci_dev *misc;\n\tstruct pci_dev *link;\n\tstruct amd_l3_cache l3_cache;\n\tstruct threshold_bank *bank4;\n};\n\nstruct _cache_table {\n\tunsigned char descriptor;\n\tchar cache_type;\n\tshort int size;\n};\n\nenum _cache_type {\n\tCTYPE_NULL = 0,\n\tCTYPE_DATA = 1,\n\tCTYPE_INST = 2,\n\tCTYPE_UNIFIED = 3,\n};\n\nunion _cpuid4_leaf_eax {\n\tstruct {\n\t\tenum _cache_type type: 5;\n\t\tunsigned int level: 3;\n\t\tunsigned int is_self_initializing: 1;\n\t\tunsigned int is_fully_associative: 1;\n\t\tunsigned int reserved: 4;\n\t\tunsigned int num_threads_sharing: 12;\n\t\tunsigned int num_cores_on_die: 6;\n\t} split;\n\tu32 full;\n};\n\nunion _cpuid4_leaf_ebx {\n\tstruct {\n\t\tunsigned int coherency_line_size: 12;\n\t\tunsigned int physical_line_partition: 10;\n\t\tunsigned int ways_of_associativity: 10;\n\t} split;\n\tu32 full;\n};\n\nunion _cpuid4_leaf_ecx {\n\tstruct {\n\t\tunsigned int number_of_sets: 32;\n\t} split;\n\tu32 full;\n};\n\nstruct _cpuid4_info_regs {\n\tunion _cpuid4_leaf_eax eax;\n\tunion _cpuid4_leaf_ebx ebx;\n\tunion _cpuid4_leaf_ecx ecx;\n\tunsigned int id;\n\tlong unsigned int size;\n\tstruct amd_northbridge *nb;\n};\n\nunion l1_cache {\n\tstruct {\n\t\tunsigned int line_size: 8;\n\t\tunsigned int lines_per_tag: 8;\n\t\tunsigned int assoc: 8;\n\t\tunsigned int size_in_kb: 8;\n\t};\n\tunsigned int val;\n};\n\nunion l2_cache {\n\tstruct {\n\t\tunsigned int line_size: 8;\n\t\tunsigned int lines_per_tag: 4;\n\t\tunsigned int assoc: 4;\n\t\tunsigned int size_in_kb: 16;\n\t};\n\tunsigned int val;\n};\n\nunion l3_cache {\n\tstruct {\n\t\tunsigned int line_size: 8;\n\t\tunsigned int lines_per_tag: 4;\n\t\tunsigned int assoc: 4;\n\t\tunsigned int res: 2;\n\t\tunsigned int size_encoded: 14;\n\t};\n\tunsigned int val;\n};\n\nstruct cpuid_bit {\n\tu16 feature;\n\tu8 reg;\n\tu8 bit;\n\tu32 level;\n\tu32 sub_leaf;\n};\n\nenum cpuid_leafs {\n\tCPUID_1_EDX = 0,\n\tCPUID_8000_0001_EDX = 1,\n\tCPUID_8086_0001_EDX = 2,\n\tCPUID_LNX_1 = 3,\n\tCPUID_1_ECX = 4,\n\tCPUID_C000_0001_EDX = 5,\n\tCPUID_8000_0001_ECX = 6,\n\tCPUID_LNX_2 = 7,\n\tCPUID_LNX_3 = 8,\n\tCPUID_7_0_EBX = 9,\n\tCPUID_D_1_EAX = 10,\n\tCPUID_LNX_4 = 11,\n\tCPUID_7_1_EAX = 12,\n\tCPUID_8000_0008_EBX = 13,\n\tCPUID_6_EAX = 14,\n\tCPUID_8000_000A_EDX = 15,\n\tCPUID_7_ECX = 16,\n\tCPUID_8000_0007_EBX = 17,\n\tCPUID_7_EDX = 18,\n};\n\nenum kgdb_bptype {\n\tBP_BREAKPOINT = 0,\n\tBP_HARDWARE_BREAKPOINT = 1,\n\tBP_WRITE_WATCHPOINT = 2,\n\tBP_READ_WATCHPOINT = 3,\n\tBP_ACCESS_WATCHPOINT = 4,\n\tBP_POKE_BREAKPOINT = 5,\n};\n\nstruct kgdb_arch {\n\tunsigned char gdb_bpt_instr[1];\n\tlong unsigned int flags;\n\tint (*set_breakpoint)(long unsigned int, char *);\n\tint (*remove_breakpoint)(long unsigned int, char *);\n\tint (*set_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);\n\tint (*remove_hw_breakpoint)(long unsigned int, int, enum kgdb_bptype);\n\tvoid (*disable_hw_break)(struct pt_regs *);\n\tvoid (*remove_all_hw_break)();\n\tvoid (*correct_hw_break)();\n\tvoid (*enable_nmi)(bool);\n};\n\nstruct cpu_dev {\n\tconst char *c_vendor;\n\tconst char *c_ident[2];\n\tvoid (*c_early_init)(struct cpuinfo_x86 *);\n\tvoid (*c_bsp_init)(struct cpuinfo_x86 *);\n\tvoid (*c_init)(struct cpuinfo_x86 *);\n\tvoid (*c_identify)(struct cpuinfo_x86 *);\n\tvoid (*c_detect_tlb)(struct cpuinfo_x86 *);\n\tint c_x86_vendor;\n};\n\nstruct cpuid_dependent_feature {\n\tu32 feature;\n\tu32 level;\n};\n\nenum spectre_v2_mitigation {\n\tSPECTRE_V2_NONE = 0,\n\tSPECTRE_V2_RETPOLINE_GENERIC = 1,\n\tSPECTRE_V2_RETPOLINE_AMD = 2,\n\tSPECTRE_V2_IBRS_ENHANCED = 3,\n};\n\nenum spectre_v2_user_mitigation {\n\tSPECTRE_V2_USER_NONE = 0,\n\tSPECTRE_V2_USER_STRICT = 1,\n\tSPECTRE_V2_USER_STRICT_PREFERRED = 2,\n\tSPECTRE_V2_USER_PRCTL = 3,\n\tSPECTRE_V2_USER_SECCOMP = 4,\n};\n\nenum ssb_mitigation {\n\tSPEC_STORE_BYPASS_NONE = 0,\n\tSPEC_STORE_BYPASS_DISABLE = 1,\n\tSPEC_STORE_BYPASS_PRCTL = 2,\n\tSPEC_STORE_BYPASS_SECCOMP = 3,\n};\n\nenum l1tf_mitigations {\n\tL1TF_MITIGATION_OFF = 0,\n\tL1TF_MITIGATION_FLUSH_NOWARN = 1,\n\tL1TF_MITIGATION_FLUSH = 2,\n\tL1TF_MITIGATION_FLUSH_NOSMT = 3,\n\tL1TF_MITIGATION_FULL = 4,\n\tL1TF_MITIGATION_FULL_FORCE = 5,\n};\n\nenum mds_mitigations {\n\tMDS_MITIGATION_OFF = 0,\n\tMDS_MITIGATION_FULL = 1,\n\tMDS_MITIGATION_VMWERV = 2,\n};\n\nenum cpuhp_smt_control {\n\tCPU_SMT_ENABLED = 0,\n\tCPU_SMT_DISABLED = 1,\n\tCPU_SMT_FORCE_DISABLED = 2,\n\tCPU_SMT_NOT_SUPPORTED = 3,\n\tCPU_SMT_NOT_IMPLEMENTED = 4,\n};\n\nenum vmx_l1d_flush_state {\n\tVMENTER_L1D_FLUSH_AUTO = 0,\n\tVMENTER_L1D_FLUSH_NEVER = 1,\n\tVMENTER_L1D_FLUSH_COND = 2,\n\tVMENTER_L1D_FLUSH_ALWAYS = 3,\n\tVMENTER_L1D_FLUSH_EPT_DISABLED = 4,\n\tVMENTER_L1D_FLUSH_NOT_REQUIRED = 5,\n};\n\nenum taa_mitigations {\n\tTAA_MITIGATION_OFF = 0,\n\tTAA_MITIGATION_UCODE_NEEDED = 1,\n\tTAA_MITIGATION_VERW = 2,\n\tTAA_MITIGATION_TSX_DISABLED = 3,\n};\n\nenum srbds_mitigations {\n\tSRBDS_MITIGATION_OFF = 0,\n\tSRBDS_MITIGATION_UCODE_NEEDED = 1,\n\tSRBDS_MITIGATION_FULL = 2,\n\tSRBDS_MITIGATION_TSX_OFF = 3,\n\tSRBDS_MITIGATION_HYPERVISOR = 4,\n};\n\nenum spectre_v1_mitigation {\n\tSPECTRE_V1_MITIGATION_NONE = 0,\n\tSPECTRE_V1_MITIGATION_AUTO = 1,\n};\n\nenum spectre_v2_mitigation_cmd {\n\tSPECTRE_V2_CMD_NONE = 0,\n\tSPECTRE_V2_CMD_AUTO = 1,\n\tSPECTRE_V2_CMD_FORCE = 2,\n\tSPECTRE_V2_CMD_RETPOLINE = 3,\n\tSPECTRE_V2_CMD_RETPOLINE_GENERIC = 4,\n\tSPECTRE_V2_CMD_RETPOLINE_AMD = 5,\n};\n\nenum spectre_v2_user_cmd {\n\tSPECTRE_V2_USER_CMD_NONE = 0,\n\tSPECTRE_V2_USER_CMD_AUTO = 1,\n\tSPECTRE_V2_USER_CMD_FORCE = 2,\n\tSPECTRE_V2_USER_CMD_PRCTL = 3,\n\tSPECTRE_V2_USER_CMD_PRCTL_IBPB = 4,\n\tSPECTRE_V2_USER_CMD_SECCOMP = 5,\n\tSPECTRE_V2_USER_CMD_SECCOMP_IBPB = 6,\n};\n\nenum ssb_mitigation_cmd {\n\tSPEC_STORE_BYPASS_CMD_NONE = 0,\n\tSPEC_STORE_BYPASS_CMD_AUTO = 1,\n\tSPEC_STORE_BYPASS_CMD_ON = 2,\n\tSPEC_STORE_BYPASS_CMD_PRCTL = 3,\n\tSPEC_STORE_BYPASS_CMD_SECCOMP = 4,\n};\n\nenum hk_flags {\n\tHK_FLAG_TIMER = 1,\n\tHK_FLAG_RCU = 2,\n\tHK_FLAG_MISC = 4,\n\tHK_FLAG_SCHED = 8,\n\tHK_FLAG_TICK = 16,\n\tHK_FLAG_DOMAIN = 32,\n\tHK_FLAG_WQ = 64,\n\tHK_FLAG_MANAGED_IRQ = 128,\n\tHK_FLAG_KTHREAD = 256,\n};\n\nstruct aperfmperf_sample {\n\tunsigned int khz;\n\tatomic_t scfpending;\n\tktime_t time;\n\tu64 aperf;\n\tu64 mperf;\n};\n\nstruct cpuid_dep {\n\tunsigned int feature;\n\tunsigned int depends;\n};\n\nenum vmx_feature_leafs {\n\tMISC_FEATURES = 0,\n\tPRIMARY_CTLS = 1,\n\tSECONDARY_CTLS = 2,\n\tNR_VMX_FEATURE_WORDS = 3,\n};\n\nstruct _tlb_table {\n\tunsigned char descriptor;\n\tchar tlb_type;\n\tunsigned int entries;\n\tchar info[128];\n};\n\nenum tsx_ctrl_states {\n\tTSX_CTRL_ENABLE = 0,\n\tTSX_CTRL_DISABLE = 1,\n\tTSX_CTRL_NOT_SUPPORTED = 2,\n};\n\nenum split_lock_detect_state {\n\tsld_off = 0,\n\tsld_warn = 1,\n\tsld_fatal = 2,\n};\n\nstruct sku_microcode {\n\tu8 model;\n\tu8 stepping;\n\tu32 microcode;\n};\n\nstruct cpuid_regs {\n\tu32 eax;\n\tu32 ebx;\n\tu32 ecx;\n\tu32 edx;\n};\n\nenum pconfig_target {\n\tINVALID_TARGET = 0,\n\tMKTME_TARGET = 1,\n\tPCONFIG_TARGET_NR = 2,\n};\n\nenum {\n\tPCONFIG_CPUID_SUBLEAF_INVALID = 0,\n\tPCONFIG_CPUID_SUBLEAF_TARGETID = 1,\n};\n\nenum task_work_notify_mode {\n\tTWA_NONE = 0,\n\tTWA_RESUME = 1,\n\tTWA_SIGNAL = 2,\n};\n\nenum mf_flags {\n\tMF_COUNT_INCREASED = 1,\n\tMF_ACTION_REQUIRED = 2,\n\tMF_MUST_KILL = 4,\n\tMF_SOFT_OFFLINE = 8,\n};\n\nstruct mce {\n\t__u64 status;\n\t__u64 misc;\n\t__u64 addr;\n\t__u64 mcgstatus;\n\t__u64 ip;\n\t__u64 tsc;\n\t__u64 time;\n\t__u8 cpuvendor;\n\t__u8 inject_flags;\n\t__u8 severity;\n\t__u8 pad;\n\t__u32 cpuid;\n\t__u8 cs;\n\t__u8 bank;\n\t__u8 cpu;\n\t__u8 finished;\n\t__u32 extcpu;\n\t__u32 socketid;\n\t__u32 apicid;\n\t__u64 mcgcap;\n\t__u64 synd;\n\t__u64 ipid;\n\t__u64 ppin;\n\t__u32 microcode;\n\t__u64 kflags;\n};\n\nenum mce_notifier_prios {\n\tMCE_PRIO_LOWEST = 0,\n\tMCE_PRIO_MCELOG = 1,\n\tMCE_PRIO_EDAC = 2,\n\tMCE_PRIO_NFIT = 3,\n\tMCE_PRIO_EXTLOG = 4,\n\tMCE_PRIO_UC = 5,\n\tMCE_PRIO_EARLY = 6,\n\tMCE_PRIO_CEC = 7,\n\tMCE_PRIO_HIGHEST = 7,\n};\n\ntypedef long unsigned int mce_banks_t[1];\n\nenum mcp_flags {\n\tMCP_TIMESTAMP = 1,\n\tMCP_UC = 2,\n\tMCP_DONTLOG = 4,\n};\n\nenum severity_level {\n\tMCE_NO_SEVERITY = 0,\n\tMCE_DEFERRED_SEVERITY = 1,\n\tMCE_UCNA_SEVERITY = 1,\n\tMCE_KEEP_SEVERITY = 2,\n\tMCE_SOME_SEVERITY = 3,\n\tMCE_AO_SEVERITY = 4,\n\tMCE_UC_SEVERITY = 5,\n\tMCE_AR_SEVERITY = 6,\n\tMCE_PANIC_SEVERITY = 7,\n};\n\nstruct mce_evt_llist {\n\tstruct llist_node llnode;\n\tstruct mce mce;\n};\n\nstruct mca_config {\n\tbool dont_log_ce;\n\tbool cmci_disabled;\n\tbool ignore_ce;\n\tbool print_all;\n\t__u64 lmce_disabled: 1;\n\t__u64 disabled: 1;\n\t__u64 ser: 1;\n\t__u64 recovery: 1;\n\t__u64 bios_cmci_threshold: 1;\n\tint: 27;\n\t__u64 __reserved: 59;\n\ts8 bootlog;\n\tint tolerant;\n\tint monarch_timeout;\n\tint panic_timeout;\n\tu32 rip_msr;\n};\n\nstruct mce_vendor_flags {\n\t__u64 overflow_recov: 1;\n\t__u64 succor: 1;\n\t__u64 smca: 1;\n\t__u64 amd_threshold: 1;\n\t__u64 __reserved_0: 60;\n};\n\nstruct mca_msr_regs {\n\tu32 (*ctl)(int);\n\tu32 (*status)(int);\n\tu32 (*addr)(int);\n\tu32 (*misc)(int);\n};\n\nstruct trace_event_raw_mce_record {\n\tstruct trace_entry ent;\n\tu64 mcgcap;\n\tu64 mcgstatus;\n\tu64 status;\n\tu64 addr;\n\tu64 misc;\n\tu64 synd;\n\tu64 ipid;\n\tu64 ip;\n\tu64 tsc;\n\tu64 walltime;\n\tu32 cpu;\n\tu32 cpuid;\n\tu32 apicid;\n\tu32 socketid;\n\tu8 cs;\n\tu8 bank;\n\tu8 cpuvendor;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mce_record {};\n\ntypedef void (*btf_trace_mce_record)(void *, struct mce *);\n\nstruct mce_bank {\n\tu64 ctl;\n\tbool init;\n};\n\nstruct mce_bank_dev {\n\tstruct device_attribute attr;\n\tchar attrname[16];\n\tu8 bank;\n};\n\nenum handler_type {\n\tEX_HANDLER_NONE = 0,\n\tEX_HANDLER_FAULT = 1,\n\tEX_HANDLER_UACCESS = 2,\n\tEX_HANDLER_OTHER = 3,\n};\n\nenum context {\n\tIN_KERNEL = 1,\n\tIN_USER = 2,\n\tIN_KERNEL_RECOV = 3,\n};\n\nenum ser {\n\tSER_REQUIRED = 1,\n\tNO_SER = 2,\n};\n\nenum exception {\n\tEXCP_CONTEXT = 1,\n\tNO_EXCP = 2,\n};\n\nstruct severity {\n\tu64 mask;\n\tu64 result;\n\tunsigned char sev;\n\tunsigned char mcgmask;\n\tunsigned char mcgres;\n\tunsigned char ser;\n\tunsigned char context;\n\tunsigned char excp;\n\tunsigned char covered;\n\tunsigned char cpu_model;\n\tunsigned char cpu_minstepping;\n\tunsigned char bank_lo;\n\tunsigned char bank_hi;\n\tchar *msg;\n};\n\nstruct gen_pool;\n\ntypedef long unsigned int (*genpool_algo_t)(long unsigned int *, long unsigned int, long unsigned int, unsigned int, void *, struct gen_pool *, long unsigned int);\n\nstruct gen_pool {\n\tspinlock_t lock;\n\tstruct list_head chunks;\n\tint min_alloc_order;\n\tgenpool_algo_t algo;\n\tvoid *data;\n\tconst char *name;\n};\n\nenum {\n\tCMCI_STORM_NONE = 0,\n\tCMCI_STORM_ACTIVE = 1,\n\tCMCI_STORM_SUBSIDED = 2,\n};\n\nenum kobject_action {\n\tKOBJ_ADD = 0,\n\tKOBJ_REMOVE = 1,\n\tKOBJ_CHANGE = 2,\n\tKOBJ_MOVE = 3,\n\tKOBJ_ONLINE = 4,\n\tKOBJ_OFFLINE = 5,\n\tKOBJ_BIND = 6,\n\tKOBJ_UNBIND = 7,\n};\n\nenum smca_bank_types {\n\tSMCA_LS = 0,\n\tSMCA_LS_V2 = 1,\n\tSMCA_IF = 2,\n\tSMCA_L2_CACHE = 3,\n\tSMCA_DE = 4,\n\tSMCA_RESERVED = 5,\n\tSMCA_EX = 6,\n\tSMCA_FP = 7,\n\tSMCA_L3_CACHE = 8,\n\tSMCA_CS = 9,\n\tSMCA_CS_V2 = 10,\n\tSMCA_PIE = 11,\n\tSMCA_UMC = 12,\n\tSMCA_PB = 13,\n\tSMCA_PSP = 14,\n\tSMCA_PSP_V2 = 15,\n\tSMCA_SMU = 16,\n\tSMCA_SMU_V2 = 17,\n\tSMCA_MP5 = 18,\n\tSMCA_NBIO = 19,\n\tSMCA_PCIE = 20,\n\tN_SMCA_BANK_TYPES = 21,\n};\n\nstruct smca_hwid {\n\tunsigned int bank_type;\n\tu32 hwid_mcatype;\n\tu8 count;\n};\n\nstruct smca_bank {\n\tstruct smca_hwid *hwid;\n\tu32 id;\n\tu8 sysfs_id;\n};\n\nstruct smca_bank_name {\n\tconst char *name;\n\tconst char *long_name;\n};\n\nstruct thresh_restart {\n\tstruct threshold_block *b;\n\tint reset;\n\tint set_lvt_off;\n\tint lvt_off;\n\tu16 old_limit;\n};\n\nstruct threshold_attr {\n\tstruct attribute attr;\n\tssize_t (*show)(struct threshold_block *, char *);\n\tssize_t (*store)(struct threshold_block *, const char *, size_t);\n};\n\nstruct _thermal_state {\n\tu64 next_check;\n\tu64 last_interrupt_time;\n\tstruct delayed_work therm_work;\n\tlong unsigned int count;\n\tlong unsigned int last_count;\n\tlong unsigned int max_time_ms;\n\tlong unsigned int total_time_ms;\n\tbool rate_control_active;\n\tbool new_event;\n\tu8 level;\n\tu8 sample_index;\n\tu8 sample_count;\n\tu8 average;\n\tu8 baseline_temp;\n\tu8 temp_samples[3];\n};\n\nstruct thermal_state {\n\tstruct _thermal_state core_throttle;\n\tstruct _thermal_state core_power_limit;\n\tstruct _thermal_state package_throttle;\n\tstruct _thermal_state package_power_limit;\n\tstruct _thermal_state core_thresh0;\n\tstruct _thermal_state core_thresh1;\n\tstruct _thermal_state pkg_thresh0;\n\tstruct _thermal_state pkg_thresh1;\n};\n\nenum {\n\tCPER_SEV_RECOVERABLE = 0,\n\tCPER_SEV_FATAL = 1,\n\tCPER_SEV_CORRECTED = 2,\n\tCPER_SEV_INFORMATIONAL = 3,\n};\n\nstruct cper_record_header {\n\tchar signature[4];\n\tu16 revision;\n\tu32 signature_end;\n\tu16 section_count;\n\tu32 error_severity;\n\tu32 validation_bits;\n\tu32 record_length;\n\tu64 timestamp;\n\tguid_t platform_id;\n\tguid_t partition_id;\n\tguid_t creator_id;\n\tguid_t notification_type;\n\tu64 record_id;\n\tu32 flags;\n\tu64 persistence_information;\n\tu8 reserved[12];\n} __attribute__((packed));\n\nstruct cper_section_descriptor {\n\tu32 section_offset;\n\tu32 section_length;\n\tu16 revision;\n\tu8 validation_bits;\n\tu8 reserved;\n\tu32 flags;\n\tguid_t section_type;\n\tguid_t fru_id;\n\tu32 section_severity;\n\tu8 fru_text[20];\n};\n\nstruct cper_ia_proc_ctx {\n\tu16 reg_ctx_type;\n\tu16 reg_arr_size;\n\tu32 msr_addr;\n\tu64 mm_reg_addr;\n};\n\nstruct cper_sec_mem_err {\n\tu64 validation_bits;\n\tu64 error_status;\n\tu64 physical_addr;\n\tu64 physical_addr_mask;\n\tu16 node;\n\tu16 card;\n\tu16 module;\n\tu16 bank;\n\tu16 device;\n\tu16 row;\n\tu16 column;\n\tu16 bit_pos;\n\tu64 requestor_id;\n\tu64 responder_id;\n\tu64 target_id;\n\tu8 error_type;\n\tu8 extended;\n\tu16 rank;\n\tu16 mem_array_handle;\n\tu16 mem_dev_handle;\n};\n\nenum {\n\tGHES_SEV_NO = 0,\n\tGHES_SEV_CORRECTED = 1,\n\tGHES_SEV_RECOVERABLE = 2,\n\tGHES_SEV_PANIC = 3,\n};\n\nstruct cper_mce_record {\n\tstruct cper_record_header hdr;\n\tstruct cper_section_descriptor sec_hdr;\n\tstruct mce mce;\n};\n\nstruct miscdevice {\n\tint minor;\n\tconst char *name;\n\tconst struct file_operations *fops;\n\tstruct list_head list;\n\tstruct device *parent;\n\tstruct device *this_device;\n\tconst struct attribute_group **groups;\n\tconst char *nodename;\n\tumode_t mode;\n};\n\ntypedef struct poll_table_struct poll_table;\n\nstruct mce_log_buffer {\n\tchar signature[12];\n\tunsigned int len;\n\tunsigned int next;\n\tunsigned int flags;\n\tunsigned int recordlen;\n\tstruct mce entry[0];\n};\n\ntypedef int (*cpu_stop_fn_t)(void *);\n\ntypedef __u8 mtrr_type;\n\nstruct mtrr_ops {\n\tu32 vendor;\n\tu32 use_intel_if;\n\tvoid (*set)(unsigned int, long unsigned int, long unsigned int, mtrr_type);\n\tvoid (*set_all)();\n\tvoid (*get)(unsigned int, long unsigned int *, long unsigned int *, mtrr_type *);\n\tint (*get_free_region)(long unsigned int, long unsigned int, int);\n\tint (*validate_add_page)(long unsigned int, long unsigned int, unsigned int);\n\tint (*have_wrcomb)();\n};\n\nstruct set_mtrr_data {\n\tlong unsigned int smp_base;\n\tlong unsigned int smp_size;\n\tunsigned int smp_reg;\n\tmtrr_type smp_type;\n};\n\nstruct mtrr_value {\n\tmtrr_type ltype;\n\tlong unsigned int lbase;\n\tlong unsigned int lsize;\n};\n\nstruct proc_ops {\n\tunsigned int proc_flags;\n\tint (*proc_open)(struct inode *, struct file *);\n\tssize_t (*proc_read)(struct file *, char *, size_t, loff_t *);\n\tssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);\n\tssize_t (*proc_write)(struct file *, const char *, size_t, loff_t *);\n\tloff_t (*proc_lseek)(struct file *, loff_t, int);\n\tint (*proc_release)(struct inode *, struct file *);\n\t__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);\n\tlong int (*proc_ioctl)(struct file *, unsigned int, long unsigned int);\n\tlong int (*proc_compat_ioctl)(struct file *, unsigned int, long unsigned int);\n\tint (*proc_mmap)(struct file *, struct vm_area_struct *);\n\tlong unsigned int (*proc_get_unmapped_area)(struct file *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);\n};\n\nstruct mtrr_sentry {\n\t__u64 base;\n\t__u32 size;\n\t__u32 type;\n};\n\nstruct mtrr_gentry {\n\t__u64 base;\n\t__u32 size;\n\t__u32 regnum;\n\t__u32 type;\n\t__u32 _pad;\n};\n\ntypedef u32 compat_uint_t;\n\nstruct mtrr_sentry32 {\n\tcompat_ulong_t base;\n\tcompat_uint_t size;\n\tcompat_uint_t type;\n};\n\nstruct mtrr_gentry32 {\n\tcompat_ulong_t regnum;\n\tcompat_uint_t base;\n\tcompat_uint_t size;\n\tcompat_uint_t type;\n};\n\nstruct mtrr_var_range {\n\t__u32 base_lo;\n\t__u32 base_hi;\n\t__u32 mask_lo;\n\t__u32 mask_hi;\n};\n\nstruct mtrr_state_type {\n\tstruct mtrr_var_range var_ranges[256];\n\tmtrr_type fixed_ranges[88];\n\tunsigned char enabled;\n\tunsigned char have_fixed;\n\tmtrr_type def_type;\n};\n\nstruct fixed_range_block {\n\tint base_msr;\n\tint ranges;\n};\n\nstruct var_mtrr_range_state {\n\tlong unsigned int base_pfn;\n\tlong unsigned int size_pfn;\n\tmtrr_type type;\n};\n\nstruct var_mtrr_state {\n\tlong unsigned int range_startk;\n\tlong unsigned int range_sizek;\n\tlong unsigned int chunk_sizek;\n\tlong unsigned int gran_sizek;\n\tunsigned int reg;\n};\n\nstruct mtrr_cleanup_result {\n\tlong unsigned int gran_sizek;\n\tlong unsigned int chunk_sizek;\n\tlong unsigned int lose_cover_sizek;\n\tunsigned int num_reg;\n\tint bad;\n};\n\nstruct subsys_interface {\n\tconst char *name;\n\tstruct bus_type *subsys;\n\tstruct list_head node;\n\tint (*add_dev)(struct device *, struct subsys_interface *);\n\tvoid (*remove_dev)(struct device *, struct subsys_interface *);\n};\n\nstruct property_entry;\n\nstruct platform_device_info {\n\tstruct device *parent;\n\tstruct fwnode_handle *fwnode;\n\tbool of_node_reused;\n\tconst char *name;\n\tint id;\n\tconst struct resource *res;\n\tunsigned int num_res;\n\tconst void *data;\n\tsize_t size_data;\n\tu64 dma_mask;\n\tconst struct property_entry *properties;\n};\n\nenum dev_prop_type {\n\tDEV_PROP_U8 = 0,\n\tDEV_PROP_U16 = 1,\n\tDEV_PROP_U32 = 2,\n\tDEV_PROP_U64 = 3,\n\tDEV_PROP_STRING = 4,\n\tDEV_PROP_REF = 5,\n};\n\nstruct property_entry {\n\tconst char *name;\n\tsize_t length;\n\tbool is_inline;\n\tenum dev_prop_type type;\n\tunion {\n\t\tconst void *pointer;\n\t\tunion {\n\t\t\tu8 u8_data[8];\n\t\t\tu16 u16_data[4];\n\t\t\tu32 u32_data[2];\n\t\t\tu64 u64_data[1];\n\t\t\tconst char *str[1];\n\t\t} value;\n\t};\n};\n\nstruct builtin_fw {\n\tchar *name;\n\tvoid *data;\n\tlong unsigned int size;\n};\n\nstruct cpio_data {\n\tvoid *data;\n\tsize_t size;\n\tchar name[18];\n};\n\nstruct cpu_signature {\n\tunsigned int sig;\n\tunsigned int pf;\n\tunsigned int rev;\n};\n\nenum ucode_state {\n\tUCODE_OK = 0,\n\tUCODE_NEW = 1,\n\tUCODE_UPDATED = 2,\n\tUCODE_NFOUND = 3,\n\tUCODE_ERROR = 4,\n};\n\nstruct microcode_ops {\n\tenum ucode_state (*request_microcode_user)(int, const void *, size_t);\n\tenum ucode_state (*request_microcode_fw)(int, struct device *, bool);\n\tvoid (*microcode_fini_cpu)(int);\n\tenum ucode_state (*apply_microcode)(int);\n\tint (*collect_cpu_info)(int, struct cpu_signature *);\n};\n\nstruct ucode_cpu_info {\n\tstruct cpu_signature cpu_sig;\n\tint valid;\n\tvoid *mc;\n};\n\nstruct cpu_info_ctx {\n\tstruct cpu_signature *cpu_sig;\n\tint err;\n};\n\nstruct firmware {\n\tsize_t size;\n\tconst u8 *data;\n\tvoid *priv;\n};\n\nstruct ucode_patch {\n\tstruct list_head plist;\n\tvoid *data;\n\tu32 patch_id;\n\tu16 equiv_cpu;\n};\n\nstruct microcode_header_intel {\n\tunsigned int hdrver;\n\tunsigned int rev;\n\tunsigned int date;\n\tunsigned int sig;\n\tunsigned int cksum;\n\tunsigned int ldrver;\n\tunsigned int pf;\n\tunsigned int datasize;\n\tunsigned int totalsize;\n\tunsigned int reserved[3];\n};\n\nstruct microcode_intel {\n\tstruct microcode_header_intel hdr;\n\tunsigned int bits[0];\n};\n\nstruct extended_signature {\n\tunsigned int sig;\n\tunsigned int pf;\n\tunsigned int cksum;\n};\n\nstruct extended_sigtable {\n\tunsigned int count;\n\tunsigned int cksum;\n\tunsigned int reserved[3];\n\tstruct extended_signature sigs[0];\n};\n\nstruct equiv_cpu_entry {\n\tu32 installed_cpu;\n\tu32 fixed_errata_mask;\n\tu32 fixed_errata_compare;\n\tu16 equiv_cpu;\n\tu16 res;\n};\n\nstruct microcode_header_amd {\n\tu32 data_code;\n\tu32 patch_id;\n\tu16 mc_patch_data_id;\n\tu8 mc_patch_data_len;\n\tu8 init_flag;\n\tu32 mc_patch_data_checksum;\n\tu32 nb_dev_id;\n\tu32 sb_dev_id;\n\tu16 processor_rev_id;\n\tu8 nb_rev_id;\n\tu8 sb_rev_id;\n\tu8 bios_api_rev;\n\tu8 reserved1[3];\n\tu32 match_reg[8];\n};\n\nstruct microcode_amd {\n\tstruct microcode_header_amd hdr;\n\tunsigned int mpb[0];\n};\n\nstruct equiv_cpu_table {\n\tunsigned int num_entries;\n\tstruct equiv_cpu_entry *entry;\n};\n\nstruct cont_desc {\n\tstruct microcode_amd *mc;\n\tu32 cpuid_1_eax;\n\tu32 psize;\n\tu8 *data;\n\tsize_t size;\n};\n\ntypedef void (*exitcall_t)();\n\nenum rdt_group_type {\n\tRDTCTRL_GROUP = 0,\n\tRDTMON_GROUP = 1,\n\tRDT_NUM_GROUP = 2,\n};\n\nstruct rdtgroup;\n\nstruct mongroup {\n\tstruct kernfs_node *mon_data_kn;\n\tstruct rdtgroup *parent;\n\tstruct list_head crdtgrp_list;\n\tu32 rmid;\n};\n\nenum rdtgrp_mode {\n\tRDT_MODE_SHAREABLE = 0,\n\tRDT_MODE_EXCLUSIVE = 1,\n\tRDT_MODE_PSEUDO_LOCKSETUP = 2,\n\tRDT_MODE_PSEUDO_LOCKED = 3,\n\tRDT_NUM_MODES = 4,\n};\n\nstruct pseudo_lock_region;\n\nstruct rdtgroup {\n\tstruct kernfs_node *kn;\n\tstruct list_head rdtgroup_list;\n\tu32 closid;\n\tstruct cpumask cpu_mask;\n\tint flags;\n\tatomic_t waitcount;\n\tenum rdt_group_type type;\n\tstruct mongroup mon;\n\tenum rdtgrp_mode mode;\n\tstruct pseudo_lock_region *plr;\n};\n\nstruct rdt_cache {\n\tunsigned int cbm_len;\n\tunsigned int min_cbm_bits;\n\tunsigned int cbm_idx_mult;\n\tunsigned int cbm_idx_offset;\n\tunsigned int shareable_bits;\n\tbool arch_has_sparse_bitmaps;\n\tbool arch_has_empty_bitmaps;\n\tbool arch_has_per_cpu_cfg;\n};\n\nenum membw_throttle_mode {\n\tTHREAD_THROTTLE_UNDEFINED = 0,\n\tTHREAD_THROTTLE_MAX = 1,\n\tTHREAD_THROTTLE_PER_THREAD = 2,\n};\n\nstruct rdt_membw {\n\tu32 min_bw;\n\tu32 bw_gran;\n\tu32 delay_linear;\n\tbool arch_needs_linear;\n\tenum membw_throttle_mode throttle_mode;\n\tbool mba_sc;\n\tu32 *mb_map;\n};\n\nstruct rdt_domain;\n\nstruct msr_param;\n\nstruct rdt_parse_data;\n\nstruct rdt_resource {\n\tint rid;\n\tbool alloc_enabled;\n\tbool mon_enabled;\n\tbool alloc_capable;\n\tbool mon_capable;\n\tchar *name;\n\tint num_closid;\n\tint cache_level;\n\tu32 default_ctrl;\n\tunsigned int msr_base;\n\tvoid (*msr_update)(struct rdt_domain *, struct msr_param *, struct rdt_resource *);\n\tint data_width;\n\tstruct list_head domains;\n\tstruct rdt_cache cache;\n\tstruct rdt_membw membw;\n\tconst char *format_str;\n\tint (*parse_ctrlval)(struct rdt_parse_data *, struct rdt_resource *, struct rdt_domain *);\n\tstruct list_head evt_list;\n\tint num_rmid;\n\tunsigned int mon_scale;\n\tunsigned int mbm_width;\n\tlong unsigned int fflags;\n};\n\nstruct mbm_state;\n\nstruct rdt_domain {\n\tstruct list_head list;\n\tint id;\n\tstruct cpumask cpu_mask;\n\tlong unsigned int *rmid_busy_llc;\n\tstruct mbm_state *mbm_total;\n\tstruct mbm_state *mbm_local;\n\tstruct delayed_work mbm_over;\n\tstruct delayed_work cqm_limbo;\n\tint mbm_work_cpu;\n\tint cqm_work_cpu;\n\tu32 *ctrl_val;\n\tu32 *mbps_val;\n\tu32 new_ctrl;\n\tbool have_new_ctrl;\n\tstruct pseudo_lock_region *plr;\n};\n\nstruct pseudo_lock_region {\n\tstruct rdt_resource *r;\n\tstruct rdt_domain *d;\n\tu32 cbm;\n\twait_queue_head_t lock_thread_wq;\n\tint thread_done;\n\tint cpu;\n\tunsigned int line_size;\n\tunsigned int size;\n\tvoid *kmem;\n\tunsigned int minor;\n\tstruct dentry *debugfs_dir;\n\tstruct list_head pm_reqs;\n};\n\nstruct mbm_state {\n\tu64 chunks;\n\tu64 prev_msr;\n\tu64 prev_bw_msr;\n\tu32 prev_bw;\n\tu32 delta_bw;\n\tbool delta_comp;\n};\n\nstruct msr_param {\n\tstruct rdt_resource *res;\n\tint low;\n\tint high;\n};\n\nstruct rdt_parse_data {\n\tstruct rdtgroup *rdtgrp;\n\tchar *buf;\n};\n\nenum {\n\tRDT_RESOURCE_L3 = 0,\n\tRDT_RESOURCE_L3DATA = 1,\n\tRDT_RESOURCE_L3CODE = 2,\n\tRDT_RESOURCE_L2 = 3,\n\tRDT_RESOURCE_L2DATA = 4,\n\tRDT_RESOURCE_L2CODE = 5,\n\tRDT_RESOURCE_MBA = 6,\n\tRDT_NUM_RESOURCES = 7,\n};\n\nunion cpuid_0x10_1_eax {\n\tstruct {\n\t\tunsigned int cbm_len: 5;\n\t} split;\n\tunsigned int full;\n};\n\nunion cpuid_0x10_3_eax {\n\tstruct {\n\t\tunsigned int max_delay: 12;\n\t} split;\n\tunsigned int full;\n};\n\nunion cpuid_0x10_x_edx {\n\tstruct {\n\t\tunsigned int cos_max: 16;\n\t} split;\n\tunsigned int full;\n};\n\nenum {\n\tRDT_FLAG_CMT = 0,\n\tRDT_FLAG_MBM_TOTAL = 1,\n\tRDT_FLAG_MBM_LOCAL = 2,\n\tRDT_FLAG_L3_CAT = 3,\n\tRDT_FLAG_L3_CDP = 4,\n\tRDT_FLAG_L2_CAT = 5,\n\tRDT_FLAG_L2_CDP = 6,\n\tRDT_FLAG_MBA = 7,\n};\n\nstruct rdt_options {\n\tchar *name;\n\tint flag;\n\tbool force_off;\n\tbool force_on;\n};\n\ntypedef unsigned int uint;\n\nstruct __va_list_tag {\n\tunsigned int gp_offset;\n\tunsigned int fp_offset;\n\tvoid *overflow_arg_area;\n\tvoid *reg_save_area;\n};\n\ntypedef __builtin_va_list __gnuc_va_list;\n\ntypedef __gnuc_va_list va_list;\n\nenum kernfs_node_type {\n\tKERNFS_DIR = 1,\n\tKERNFS_FILE = 2,\n\tKERNFS_LINK = 4,\n};\n\nenum kernfs_root_flag {\n\tKERNFS_ROOT_CREATE_DEACTIVATED = 1,\n\tKERNFS_ROOT_EXTRA_OPEN_PERM_CHECK = 2,\n\tKERNFS_ROOT_SUPPORT_EXPORTOP = 4,\n\tKERNFS_ROOT_SUPPORT_USER_XATTR = 8,\n};\n\nstruct kernfs_fs_context {\n\tstruct kernfs_root *root;\n\tvoid *ns_tag;\n\tlong unsigned int magic;\n\tbool new_sb_created;\n};\n\nstruct rdt_fs_context {\n\tstruct kernfs_fs_context kfc;\n\tbool enable_cdpl2;\n\tbool enable_cdpl3;\n\tbool enable_mba_mbps;\n};\n\nstruct mon_evt {\n\tu32 evtid;\n\tchar *name;\n\tstruct list_head list;\n};\n\nunion mon_data_bits {\n\tvoid *priv;\n\tstruct {\n\t\tunsigned int rid: 10;\n\t\tunsigned int evtid: 8;\n\t\tunsigned int domid: 14;\n\t} u;\n};\n\nstruct rmid_read {\n\tstruct rdtgroup *rgrp;\n\tstruct rdt_resource *r;\n\tstruct rdt_domain *d;\n\tint evtid;\n\tbool first;\n\tu64 val;\n};\n\nstruct rftype {\n\tchar *name;\n\tumode_t mode;\n\tconst struct kernfs_ops *kf_ops;\n\tlong unsigned int flags;\n\tlong unsigned int fflags;\n\tint (*seq_show)(struct kernfs_open_file *, struct seq_file *, void *);\n\tssize_t (*write)(struct kernfs_open_file *, char *, size_t, loff_t);\n};\n\nenum rdt_param {\n\tOpt_cdp = 0,\n\tOpt_cdpl2 = 1,\n\tOpt_mba_mbps = 2,\n\tnr__rdt_params = 3,\n};\n\nstruct rmid_entry {\n\tu32 rmid;\n\tint busy;\n\tstruct list_head list;\n};\n\nstruct mbm_correction_factor_table {\n\tu32 rmidthreshold;\n\tu64 cf;\n};\n\nstruct trace_event_raw_pseudo_lock_mem_latency {\n\tstruct trace_entry ent;\n\tu32 latency;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_pseudo_lock_l2 {\n\tstruct trace_entry ent;\n\tu64 l2_hits;\n\tu64 l2_miss;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_pseudo_lock_l3 {\n\tstruct trace_entry ent;\n\tu64 l3_hits;\n\tu64 l3_miss;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_pseudo_lock_mem_latency {};\n\nstruct trace_event_data_offsets_pseudo_lock_l2 {};\n\nstruct trace_event_data_offsets_pseudo_lock_l3 {};\n\ntypedef void (*btf_trace_pseudo_lock_mem_latency)(void *, u32);\n\ntypedef void (*btf_trace_pseudo_lock_l2)(void *, u64, u64);\n\ntypedef void (*btf_trace_pseudo_lock_l3)(void *, u64, u64);\n\nstruct pseudo_lock_pm_req {\n\tstruct list_head list;\n\tstruct dev_pm_qos_request req;\n};\n\nstruct residency_counts {\n\tu64 miss_before;\n\tu64 hits_before;\n\tu64 miss_after;\n\tu64 hits_after;\n};\n\nenum mmu_notifier_event {\n\tMMU_NOTIFY_UNMAP = 0,\n\tMMU_NOTIFY_CLEAR = 1,\n\tMMU_NOTIFY_PROTECTION_VMA = 2,\n\tMMU_NOTIFY_PROTECTION_PAGE = 3,\n\tMMU_NOTIFY_SOFT_DIRTY = 4,\n\tMMU_NOTIFY_RELEASE = 5,\n\tMMU_NOTIFY_MIGRATE = 6,\n};\n\nstruct mmu_notifier;\n\nstruct mmu_notifier_range;\n\nstruct mmu_notifier_ops {\n\tvoid (*release)(struct mmu_notifier *, struct mm_struct *);\n\tint (*clear_flush_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);\n\tint (*clear_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);\n\tint (*test_young)(struct mmu_notifier *, struct mm_struct *, long unsigned int);\n\tvoid (*change_pte)(struct mmu_notifier *, struct mm_struct *, long unsigned int, pte_t);\n\tint (*invalidate_range_start)(struct mmu_notifier *, const struct mmu_notifier_range *);\n\tvoid (*invalidate_range_end)(struct mmu_notifier *, const struct mmu_notifier_range *);\n\tvoid (*invalidate_range)(struct mmu_notifier *, struct mm_struct *, long unsigned int, long unsigned int);\n\tstruct mmu_notifier * (*alloc_notifier)(struct mm_struct *);\n\tvoid (*free_notifier)(struct mmu_notifier *);\n};\n\nstruct mmu_notifier {\n\tstruct hlist_node hlist;\n\tconst struct mmu_notifier_ops *ops;\n\tstruct mm_struct *mm;\n\tstruct callback_head rcu;\n\tunsigned int users;\n};\n\nstruct mmu_notifier_range {\n\tstruct vm_area_struct *vma;\n\tstruct mm_struct *mm;\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tunsigned int flags;\n\tenum mmu_notifier_event event;\n\tvoid *migrate_pgmap_owner;\n};\n\nenum sgx_page_type {\n\tSGX_PAGE_TYPE_SECS = 0,\n\tSGX_PAGE_TYPE_TCS = 1,\n\tSGX_PAGE_TYPE_REG = 2,\n\tSGX_PAGE_TYPE_VA = 3,\n\tSGX_PAGE_TYPE_TRIM = 4,\n};\n\nstruct sgx_encl_page;\n\nstruct sgx_epc_page {\n\tunsigned int section;\n\tunsigned int flags;\n\tstruct sgx_encl_page *owner;\n\tstruct list_head list;\n};\n\nstruct sgx_encl;\n\nstruct sgx_va_page;\n\nstruct sgx_encl_page {\n\tlong unsigned int desc;\n\tlong unsigned int vm_max_prot_bits;\n\tstruct sgx_epc_page *epc_page;\n\tstruct sgx_encl *encl;\n\tstruct sgx_va_page *va_page;\n};\n\nstruct sgx_encl {\n\tlong unsigned int base;\n\tlong unsigned int size;\n\tlong unsigned int flags;\n\tunsigned int page_cnt;\n\tunsigned int secs_child_cnt;\n\tstruct mutex lock;\n\tstruct xarray page_array;\n\tstruct sgx_encl_page secs;\n\tlong unsigned int attributes;\n\tlong unsigned int attributes_mask;\n\tcpumask_t cpumask;\n\tstruct file *backing;\n\tstruct kref refcount;\n\tstruct list_head va_pages;\n\tlong unsigned int mm_list_version;\n\tstruct list_head mm_list;\n\tspinlock_t mm_lock;\n\tstruct srcu_struct srcu;\n};\n\nstruct sgx_va_page {\n\tstruct sgx_epc_page *epc_page;\n\tlong unsigned int slots[8];\n\tstruct list_head list;\n};\n\nstruct sgx_encl_mm {\n\tstruct sgx_encl *encl;\n\tstruct mm_struct *mm;\n\tstruct list_head list;\n\tstruct mmu_notifier mmu_notifier;\n};\n\ntypedef unsigned int xa_mark_t;\n\nstruct xa_node {\n\tunsigned char shift;\n\tunsigned char offset;\n\tunsigned char count;\n\tunsigned char nr_values;\n\tstruct xa_node *parent;\n\tstruct xarray *array;\n\tunion {\n\t\tstruct list_head private_list;\n\t\tstruct callback_head callback_head;\n\t};\n\tvoid *slots[64];\n\tunion {\n\t\tlong unsigned int tags[3];\n\t\tlong unsigned int marks[3];\n\t};\n};\n\ntypedef void (*xa_update_node_t)(struct xa_node *);\n\nstruct xa_state {\n\tstruct xarray *xa;\n\tlong unsigned int xa_index;\n\tunsigned char xa_shift;\n\tunsigned char xa_sibs;\n\tunsigned char xa_offset;\n\tunsigned char xa_pad;\n\tstruct xa_node *xa_node;\n\tstruct xa_node *xa_alloc;\n\txa_update_node_t xa_update;\n};\n\nenum {\n\tXA_CHECK_SCHED = 4096,\n};\n\nstruct sgx_pageinfo {\n\tu64 addr;\n\tu64 contents;\n\tu64 metadata;\n\tu64 secs;\n};\n\nstruct sgx_epc_section {\n\tlong unsigned int phys_addr;\n\tvoid *virt_addr;\n\tstruct sgx_epc_page *pages;\n\tspinlock_t lock;\n\tstruct list_head page_list;\n\tlong unsigned int free_cnt;\n\tstruct list_head init_laundry_list;\n};\n\nenum sgx_encl_flags {\n\tSGX_ENCL_IOCTL = 1,\n\tSGX_ENCL_DEBUG = 2,\n\tSGX_ENCL_CREATED = 4,\n\tSGX_ENCL_INITIALIZED = 8,\n};\n\nstruct sgx_backing {\n\tlong unsigned int page_index;\n\tstruct page *contents;\n\tstruct page *pcmd;\n\tlong unsigned int pcmd_offset;\n};\n\nenum sgx_encls_function {\n\tECREATE = 0,\n\tEADD = 1,\n\tEINIT = 2,\n\tEREMOVE = 3,\n\tEDGBRD = 4,\n\tEDGBWR = 5,\n\tEEXTEND = 6,\n\tELDU = 8,\n\tEBLOCK = 9,\n\tEPA = 10,\n\tEWB = 11,\n\tETRACK = 12,\n};\n\nstruct crypto_alg;\n\nstruct crypto_tfm {\n\tu32 crt_flags;\n\tint node;\n\tvoid (*exit)(struct crypto_tfm *);\n\tstruct crypto_alg *__crt_alg;\n\tvoid *__crt_ctx[0];\n};\n\nstruct cipher_alg {\n\tunsigned int cia_min_keysize;\n\tunsigned int cia_max_keysize;\n\tint (*cia_setkey)(struct crypto_tfm *, const u8 *, unsigned int);\n\tvoid (*cia_encrypt)(struct crypto_tfm *, u8 *, const u8 *);\n\tvoid (*cia_decrypt)(struct crypto_tfm *, u8 *, const u8 *);\n};\n\nstruct compress_alg {\n\tint (*coa_compress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);\n\tint (*coa_decompress)(struct crypto_tfm *, const u8 *, unsigned int, u8 *, unsigned int *);\n};\n\nstruct crypto_istat_aead {\n\tatomic64_t encrypt_cnt;\n\tatomic64_t encrypt_tlen;\n\tatomic64_t decrypt_cnt;\n\tatomic64_t decrypt_tlen;\n\tatomic64_t err_cnt;\n};\n\nstruct crypto_istat_akcipher {\n\tatomic64_t encrypt_cnt;\n\tatomic64_t encrypt_tlen;\n\tatomic64_t decrypt_cnt;\n\tatomic64_t decrypt_tlen;\n\tatomic64_t verify_cnt;\n\tatomic64_t sign_cnt;\n\tatomic64_t err_cnt;\n};\n\nstruct crypto_istat_cipher {\n\tatomic64_t encrypt_cnt;\n\tatomic64_t encrypt_tlen;\n\tatomic64_t decrypt_cnt;\n\tatomic64_t decrypt_tlen;\n\tatomic64_t err_cnt;\n};\n\nstruct crypto_istat_compress {\n\tatomic64_t compress_cnt;\n\tatomic64_t compress_tlen;\n\tatomic64_t decompress_cnt;\n\tatomic64_t decompress_tlen;\n\tatomic64_t err_cnt;\n};\n\nstruct crypto_istat_hash {\n\tatomic64_t hash_cnt;\n\tatomic64_t hash_tlen;\n\tatomic64_t err_cnt;\n};\n\nstruct crypto_istat_kpp {\n\tatomic64_t setsecret_cnt;\n\tatomic64_t generate_public_key_cnt;\n\tatomic64_t compute_shared_secret_cnt;\n\tatomic64_t err_cnt;\n};\n\nstruct crypto_istat_rng {\n\tatomic64_t generate_cnt;\n\tatomic64_t generate_tlen;\n\tatomic64_t seed_cnt;\n\tatomic64_t err_cnt;\n};\n\nstruct crypto_type;\n\nstruct crypto_alg {\n\tstruct list_head cra_list;\n\tstruct list_head cra_users;\n\tu32 cra_flags;\n\tunsigned int cra_blocksize;\n\tunsigned int cra_ctxsize;\n\tunsigned int cra_alignmask;\n\tint cra_priority;\n\trefcount_t cra_refcnt;\n\tchar cra_name[128];\n\tchar cra_driver_name[128];\n\tconst struct crypto_type *cra_type;\n\tunion {\n\t\tstruct cipher_alg cipher;\n\t\tstruct compress_alg compress;\n\t} cra_u;\n\tint (*cra_init)(struct crypto_tfm *);\n\tvoid (*cra_exit)(struct crypto_tfm *);\n\tvoid (*cra_destroy)(struct crypto_alg *);\n\tstruct module *cra_module;\n\tunion {\n\t\tstruct crypto_istat_aead aead;\n\t\tstruct crypto_istat_akcipher akcipher;\n\t\tstruct crypto_istat_cipher cipher;\n\t\tstruct crypto_istat_compress compress;\n\t\tstruct crypto_istat_hash hash;\n\t\tstruct crypto_istat_rng rng;\n\t\tstruct crypto_istat_kpp kpp;\n\t} stats;\n};\n\nstruct crypto_instance;\n\nstruct crypto_type {\n\tunsigned int (*ctxsize)(struct crypto_alg *, u32, u32);\n\tunsigned int (*extsize)(struct crypto_alg *);\n\tint (*init)(struct crypto_tfm *, u32, u32);\n\tint (*init_tfm)(struct crypto_tfm *);\n\tvoid (*show)(struct seq_file *, struct crypto_alg *);\n\tint (*report)(struct sk_buff *, struct crypto_alg *);\n\tvoid (*free)(struct crypto_instance *);\n\tunsigned int type;\n\tunsigned int maskclear;\n\tunsigned int maskset;\n\tunsigned int tfmsize;\n};\n\nstruct crypto_shash;\n\nstruct shash_desc {\n\tstruct crypto_shash *tfm;\n\tvoid *__ctx[0];\n};\n\nstruct crypto_shash {\n\tunsigned int descsize;\n\tstruct crypto_tfm base;\n};\n\nenum sgx_page_flags {\n\tSGX_PAGE_MEASURE = 1,\n};\n\nstruct sgx_enclave_create {\n\t__u64 src;\n};\n\nstruct sgx_enclave_add_pages {\n\t__u64 src;\n\t__u64 offset;\n\t__u64 length;\n\t__u64 secinfo;\n\t__u64 flags;\n\t__u64 count;\n};\n\nstruct sgx_enclave_init {\n\t__u64 sigstruct;\n};\n\nstruct sgx_enclave_provision {\n\t__u64 fd;\n};\n\nenum sgx_return_code {\n\tSGX_NOT_TRACKED = 11,\n\tSGX_INVALID_EINITTOKEN = 16,\n\tSGX_UNMASKED_EVENT = 128,\n};\n\nenum sgx_attribute {\n\tSGX_ATTR_INIT = 1,\n\tSGX_ATTR_DEBUG = 2,\n\tSGX_ATTR_MODE64BIT = 4,\n\tSGX_ATTR_PROVISIONKEY = 16,\n\tSGX_ATTR_EINITTOKENKEY = 32,\n\tSGX_ATTR_KSS = 128,\n};\n\nstruct sgx_secs {\n\tu64 size;\n\tu64 base;\n\tu32 ssa_frame_size;\n\tu32 miscselect;\n\tu8 reserved1[24];\n\tu64 attributes;\n\tu64 xfrm;\n\tu32 mrenclave[8];\n\tu8 reserved2[32];\n\tu32 mrsigner[8];\n\tu8 reserved3[32];\n\tu32 config_id[16];\n\tu16 isv_prod_id;\n\tu16 isv_svn;\n\tu16 config_svn;\n\tu8 reserved4[3834];\n};\n\nenum sgx_secinfo_flags {\n\tSGX_SECINFO_R = 1,\n\tSGX_SECINFO_W = 2,\n\tSGX_SECINFO_X = 4,\n\tSGX_SECINFO_SECS = 0,\n\tSGX_SECINFO_TCS = 256,\n\tSGX_SECINFO_REG = 512,\n\tSGX_SECINFO_VA = 768,\n\tSGX_SECINFO_TRIM = 1024,\n};\n\nstruct sgx_secinfo {\n\tu64 flags;\n\tu8 reserved[56];\n};\n\nstruct sgx_sigstruct_header {\n\tu64 header1[2];\n\tu32 vendor;\n\tu32 date;\n\tu64 header2[2];\n\tu32 swdefined;\n\tu8 reserved1[84];\n};\n\nstruct sgx_sigstruct_body {\n\tu32 miscselect;\n\tu32 misc_mask;\n\tu8 reserved2[20];\n\tu64 attributes;\n\tu64 xfrm;\n\tu64 attributes_mask;\n\tu64 xfrm_mask;\n\tu8 mrenclave[32];\n\tu8 reserved3[32];\n\tu16 isvprodid;\n\tu16 isvsvn;\n} __attribute__((packed));\n\nstruct sgx_sigstruct {\n\tstruct sgx_sigstruct_header header;\n\tu8 modulus[384];\n\tu32 exponent;\n\tu8 signature[384];\n\tstruct sgx_sigstruct_body body;\n\tu8 reserved4[12];\n\tu8 q1[384];\n\tu8 q2[384];\n} __attribute__((packed));\n\nstruct vmcb_seg {\n\tu16 selector;\n\tu16 attrib;\n\tu32 limit;\n\tu64 base;\n};\n\nstruct vmcb_save_area {\n\tstruct vmcb_seg es;\n\tstruct vmcb_seg cs;\n\tstruct vmcb_seg ss;\n\tstruct vmcb_seg ds;\n\tstruct vmcb_seg fs;\n\tstruct vmcb_seg gs;\n\tstruct vmcb_seg gdtr;\n\tstruct vmcb_seg ldtr;\n\tstruct vmcb_seg idtr;\n\tstruct vmcb_seg tr;\n\tu8 reserved_1[43];\n\tu8 cpl;\n\tu8 reserved_2[4];\n\tu64 efer;\n\tu8 reserved_3[104];\n\tu64 xss;\n\tu64 cr4;\n\tu64 cr3;\n\tu64 cr0;\n\tu64 dr7;\n\tu64 dr6;\n\tu64 rflags;\n\tu64 rip;\n\tu8 reserved_4[88];\n\tu64 rsp;\n\tu8 reserved_5[24];\n\tu64 rax;\n\tu64 star;\n\tu64 lstar;\n\tu64 cstar;\n\tu64 sfmask;\n\tu64 kernel_gs_base;\n\tu64 sysenter_cs;\n\tu64 sysenter_esp;\n\tu64 sysenter_eip;\n\tu64 cr2;\n\tu8 reserved_6[32];\n\tu64 g_pat;\n\tu64 dbgctl;\n\tu64 br_from;\n\tu64 br_to;\n\tu64 last_excp_from;\n\tu64 last_excp_to;\n\tu8 reserved_7[80];\n\tu32 pkru;\n\tu8 reserved_7a[20];\n\tu64 reserved_8;\n\tu64 rcx;\n\tu64 rdx;\n\tu64 rbx;\n\tu64 reserved_9;\n\tu64 rbp;\n\tu64 rsi;\n\tu64 rdi;\n\tu64 r8;\n\tu64 r9;\n\tu64 r10;\n\tu64 r11;\n\tu64 r12;\n\tu64 r13;\n\tu64 r14;\n\tu64 r15;\n\tu8 reserved_10[16];\n\tu64 sw_exit_code;\n\tu64 sw_exit_info_1;\n\tu64 sw_exit_info_2;\n\tu64 sw_scratch;\n\tu8 reserved_11[56];\n\tu64 xcr0;\n\tu8 valid_bitmap[16];\n\tu64 x87_state_gpa;\n};\n\nstruct ghcb {\n\tstruct vmcb_save_area save;\n\tu8 reserved_save[1016];\n\tu8 shared_buffer[2032];\n\tu8 reserved_1[10];\n\tu16 protocol_version;\n\tu32 ghcb_usage;\n};\n\nenum intercept_words {\n\tINTERCEPT_CR = 0,\n\tINTERCEPT_DR = 1,\n\tINTERCEPT_EXCEPTION = 2,\n\tINTERCEPT_WORD3 = 3,\n\tINTERCEPT_WORD4 = 4,\n\tINTERCEPT_WORD5 = 5,\n\tMAX_INTERCEPT = 6,\n};\n\nstruct vmware_steal_time {\n\tunion {\n\t\tuint64_t clock;\n\t\tstruct {\n\t\t\tuint32_t clock_low;\n\t\t\tuint32_t clock_high;\n\t\t};\n\t};\n\tuint64_t reserved[7];\n};\n\nstruct mpc_intsrc {\n\tunsigned char type;\n\tunsigned char irqtype;\n\tshort unsigned int irqflag;\n\tunsigned char srcbus;\n\tunsigned char srcbusirq;\n\tunsigned char dstapic;\n\tunsigned char dstirq;\n};\n\nenum mp_irq_source_types {\n\tmp_INT = 0,\n\tmp_NMI = 1,\n\tmp_SMI = 2,\n\tmp_ExtINT = 3,\n};\n\ntypedef u64 acpi_io_address;\n\ntypedef u64 acpi_physical_address;\n\ntypedef char *acpi_string;\n\ntypedef void *acpi_handle;\n\ntypedef u32 acpi_object_type;\n\ntypedef u8 acpi_adr_space_type;\n\nunion acpi_object {\n\tacpi_object_type type;\n\tstruct {\n\t\tacpi_object_type type;\n\t\tu64 value;\n\t} integer;\n\tstruct {\n\t\tacpi_object_type type;\n\t\tu32 length;\n\t\tchar *pointer;\n\t} string;\n\tstruct {\n\t\tacpi_object_type type;\n\t\tu32 length;\n\t\tu8 *pointer;\n\t} buffer;\n\tstruct {\n\t\tacpi_object_type type;\n\t\tu32 count;\n\t\tunion acpi_object *elements;\n\t} package;\n\tstruct {\n\t\tacpi_object_type type;\n\t\tacpi_object_type actual_type;\n\t\tacpi_handle handle;\n\t} reference;\n\tstruct {\n\t\tacpi_object_type type;\n\t\tu32 proc_id;\n\t\tacpi_io_address pblk_address;\n\t\tu32 pblk_length;\n\t} processor;\n\tstruct {\n\t\tacpi_object_type type;\n\t\tu32 system_level;\n\t\tu32 resource_order;\n\t} power_resource;\n};\n\nstruct acpi_object_list {\n\tu32 count;\n\tunion acpi_object *pointer;\n};\n\nstruct acpi_subtable_header {\n\tu8 type;\n\tu8 length;\n};\n\nstruct acpi_table_boot {\n\tstruct acpi_table_header header;\n\tu8 cmos_index;\n\tu8 reserved[3];\n};\n\nstruct acpi_hmat_structure {\n\tu16 type;\n\tu16 reserved;\n\tu32 length;\n};\n\nstruct acpi_table_hpet {\n\tstruct acpi_table_header header;\n\tu32 id;\n\tstruct acpi_generic_address address;\n\tu8 sequence;\n\tu16 minimum_tick;\n\tu8 flags;\n} __attribute__((packed));\n\nstruct acpi_table_madt {\n\tstruct acpi_table_header header;\n\tu32 address;\n\tu32 flags;\n};\n\nenum acpi_madt_type {\n\tACPI_MADT_TYPE_LOCAL_APIC = 0,\n\tACPI_MADT_TYPE_IO_APIC = 1,\n\tACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,\n\tACPI_MADT_TYPE_NMI_SOURCE = 3,\n\tACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,\n\tACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,\n\tACPI_MADT_TYPE_IO_SAPIC = 6,\n\tACPI_MADT_TYPE_LOCAL_SAPIC = 7,\n\tACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,\n\tACPI_MADT_TYPE_LOCAL_X2APIC = 9,\n\tACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,\n\tACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,\n\tACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,\n\tACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,\n\tACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,\n\tACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,\n\tACPI_MADT_TYPE_RESERVED = 16,\n};\n\nstruct acpi_madt_local_apic {\n\tstruct acpi_subtable_header header;\n\tu8 processor_id;\n\tu8 id;\n\tu32 lapic_flags;\n};\n\nstruct acpi_madt_io_apic {\n\tstruct acpi_subtable_header header;\n\tu8 id;\n\tu8 reserved;\n\tu32 address;\n\tu32 global_irq_base;\n};\n\nstruct acpi_madt_interrupt_override {\n\tstruct acpi_subtable_header header;\n\tu8 bus;\n\tu8 source_irq;\n\tu32 global_irq;\n\tu16 inti_flags;\n} __attribute__((packed));\n\nstruct acpi_madt_nmi_source {\n\tstruct acpi_subtable_header header;\n\tu16 inti_flags;\n\tu32 global_irq;\n};\n\nstruct acpi_madt_local_apic_nmi {\n\tstruct acpi_subtable_header header;\n\tu8 processor_id;\n\tu16 inti_flags;\n\tu8 lint;\n} __attribute__((packed));\n\nstruct acpi_madt_local_apic_override {\n\tstruct acpi_subtable_header header;\n\tu16 reserved;\n\tu64 address;\n} __attribute__((packed));\n\nstruct acpi_madt_local_sapic {\n\tstruct acpi_subtable_header header;\n\tu8 processor_id;\n\tu8 id;\n\tu8 eid;\n\tu8 reserved[3];\n\tu32 lapic_flags;\n\tu32 uid;\n\tchar uid_string[1];\n} __attribute__((packed));\n\nstruct acpi_madt_local_x2apic {\n\tstruct acpi_subtable_header header;\n\tu16 reserved;\n\tu32 local_apic_id;\n\tu32 lapic_flags;\n\tu32 uid;\n};\n\nstruct acpi_madt_local_x2apic_nmi {\n\tstruct acpi_subtable_header header;\n\tu16 inti_flags;\n\tu32 uid;\n\tu8 lint;\n\tu8 reserved[3];\n};\n\nunion acpi_subtable_headers {\n\tstruct acpi_subtable_header common;\n\tstruct acpi_hmat_structure hmat;\n};\n\ntypedef int (*acpi_tbl_table_handler)(struct acpi_table_header *);\n\ntypedef int (*acpi_tbl_entry_handler)(union acpi_subtable_headers *, const long unsigned int);\n\nstruct acpi_subtable_proc {\n\tint id;\n\tacpi_tbl_entry_handler handler;\n\tint count;\n};\n\ntypedef u32 phys_cpuid_t;\n\nenum irq_alloc_type {\n\tX86_IRQ_ALLOC_TYPE_IOAPIC = 1,\n\tX86_IRQ_ALLOC_TYPE_HPET = 2,\n\tX86_IRQ_ALLOC_TYPE_PCI_MSI = 3,\n\tX86_IRQ_ALLOC_TYPE_PCI_MSIX = 4,\n\tX86_IRQ_ALLOC_TYPE_DMAR = 5,\n\tX86_IRQ_ALLOC_TYPE_AMDVI = 6,\n\tX86_IRQ_ALLOC_TYPE_UV = 7,\n};\n\nstruct ioapic_alloc_info {\n\tint pin;\n\tint node;\n\tu32 is_level: 1;\n\tu32 active_low: 1;\n\tu32 valid: 1;\n};\n\nstruct uv_alloc_info {\n\tint limit;\n\tint blade;\n\tlong unsigned int offset;\n\tchar *name;\n};\n\nstruct irq_alloc_info {\n\tenum irq_alloc_type type;\n\tu32 flags;\n\tu32 devid;\n\tirq_hw_number_t hwirq;\n\tconst struct cpumask *mask;\n\tstruct msi_desc *desc;\n\tvoid *data;\n\tunion {\n\t\tstruct ioapic_alloc_info ioapic;\n\t\tstruct uv_alloc_info uv;\n\t};\n};\n\nstruct serial_icounter_struct {\n\tint cts;\n\tint dsr;\n\tint rng;\n\tint dcd;\n\tint rx;\n\tint tx;\n\tint frame;\n\tint overrun;\n\tint parity;\n\tint brk;\n\tint buf_overrun;\n\tint reserved[9];\n};\n\nstruct serial_struct {\n\tint type;\n\tint line;\n\tunsigned int port;\n\tint irq;\n\tint flags;\n\tint xmit_fifo_size;\n\tint custom_divisor;\n\tint baud_base;\n\tshort unsigned int close_delay;\n\tchar io_type;\n\tchar reserved_char[1];\n\tint hub6;\n\tshort unsigned int closing_wait;\n\tshort unsigned int closing_wait2;\n\tunsigned char *iomem_base;\n\tshort unsigned int iomem_reg_shift;\n\tunsigned int port_high;\n\tlong unsigned int iomap_base;\n};\n\nenum ioapic_domain_type {\n\tIOAPIC_DOMAIN_INVALID = 0,\n\tIOAPIC_DOMAIN_LEGACY = 1,\n\tIOAPIC_DOMAIN_STRICT = 2,\n\tIOAPIC_DOMAIN_DYNAMIC = 3,\n};\n\nstruct ioapic_domain_cfg {\n\tenum ioapic_domain_type type;\n\tconst struct irq_domain_ops *ops;\n\tstruct device_node *dev;\n};\n\nstruct wakeup_header {\n\tu16 video_mode;\n\tu32 pmode_entry;\n\tu16 pmode_cs;\n\tu32 pmode_cr0;\n\tu32 pmode_cr3;\n\tu32 pmode_cr4;\n\tu32 pmode_efer_low;\n\tu32 pmode_efer_high;\n\tu64 pmode_gdt;\n\tu32 pmode_misc_en_low;\n\tu32 pmode_misc_en_high;\n\tu32 pmode_behavior;\n\tu32 realmode_flags;\n\tu32 real_magic;\n\tu32 signature;\n} __attribute__((packed));\n\nstruct acpi_hest_header {\n\tu16 type;\n\tu16 source_id;\n};\n\nstruct acpi_hest_ia_error_bank {\n\tu8 bank_number;\n\tu8 clear_status_on_init;\n\tu8 status_format;\n\tu8 reserved;\n\tu32 control_register;\n\tu64 control_data;\n\tu32 status_register;\n\tu32 address_register;\n\tu32 misc_register;\n} __attribute__((packed));\n\nstruct acpi_hest_notify {\n\tu8 type;\n\tu8 length;\n\tu16 config_write_enable;\n\tu32 poll_interval;\n\tu32 vector;\n\tu32 polling_threshold_value;\n\tu32 polling_threshold_window;\n\tu32 error_threshold_value;\n\tu32 error_threshold_window;\n};\n\nstruct acpi_hest_ia_corrected {\n\tstruct acpi_hest_header header;\n\tu16 reserved1;\n\tu8 flags;\n\tu8 enabled;\n\tu32 records_to_preallocate;\n\tu32 max_sections_per_record;\n\tstruct acpi_hest_notify notify;\n\tu8 num_hardware_banks;\n\tu8 reserved2[3];\n};\n\nstruct cpc_reg {\n\tu8 descriptor;\n\tu16 length;\n\tu8 space_id;\n\tu8 bit_width;\n\tu8 bit_offset;\n\tu8 access_width;\n\tu64 address;\n} __attribute__((packed));\n\nstruct acpi_power_register {\n\tu8 descriptor;\n\tu16 length;\n\tu8 space_id;\n\tu8 bit_width;\n\tu8 bit_offset;\n\tu8 access_size;\n\tu64 address;\n} __attribute__((packed));\n\nstruct acpi_processor_cx {\n\tu8 valid;\n\tu8 type;\n\tu32 address;\n\tu8 entry_method;\n\tu8 index;\n\tu32 latency;\n\tu8 bm_sts_skip;\n\tchar desc[32];\n};\n\nstruct acpi_processor_flags {\n\tu8 power: 1;\n\tu8 performance: 1;\n\tu8 throttling: 1;\n\tu8 limit: 1;\n\tu8 bm_control: 1;\n\tu8 bm_check: 1;\n\tu8 has_cst: 1;\n\tu8 has_lpi: 1;\n\tu8 power_setup_done: 1;\n\tu8 bm_rld_set: 1;\n\tu8 need_hotplug_init: 1;\n};\n\nstruct cstate_entry {\n\tstruct {\n\t\tunsigned int eax;\n\t\tunsigned int ecx;\n\t} states[8];\n};\n\nenum reboot_mode {\n\tREBOOT_UNDEFINED = 4294967295,\n\tREBOOT_COLD = 0,\n\tREBOOT_WARM = 1,\n\tREBOOT_HARD = 2,\n\tREBOOT_SOFT = 3,\n\tREBOOT_GPIO = 4,\n};\n\nenum reboot_type {\n\tBOOT_TRIPLE = 116,\n\tBOOT_KBD = 107,\n\tBOOT_BIOS = 98,\n\tBOOT_ACPI = 97,\n\tBOOT_EFI = 101,\n\tBOOT_CF9_FORCE = 112,\n\tBOOT_CF9_SAFE = 113,\n};\n\ntypedef void (*nmi_shootdown_cb)(int, struct pt_regs *);\n\nenum allow_write_msrs {\n\tMSR_WRITES_ON = 0,\n\tMSR_WRITES_OFF = 1,\n\tMSR_WRITES_DEFAULT = 2,\n};\n\ntypedef struct __call_single_data call_single_data_t;\n\nstruct cpuid_regs_done {\n\tstruct cpuid_regs regs;\n\tstruct completion done;\n};\n\nstruct intel_early_ops {\n\tresource_size_t (*stolen_size)(int, int, int);\n\tresource_size_t (*stolen_base)(int, int, int, resource_size_t);\n};\n\nstruct chipset {\n\tu32 vendor;\n\tu32 device;\n\tu32 class;\n\tu32 class_mask;\n\tu32 flags;\n\tvoid (*f)(int, int, int);\n};\n\nenum {\n\tSD_BALANCE_NEWIDLE = 1,\n\tSD_BALANCE_EXEC = 2,\n\tSD_BALANCE_FORK = 4,\n\tSD_BALANCE_WAKE = 8,\n\tSD_WAKE_AFFINE = 16,\n\tSD_ASYM_CPUCAPACITY = 32,\n\tSD_SHARE_CPUCAPACITY = 64,\n\tSD_SHARE_PKG_RESOURCES = 128,\n\tSD_SERIALIZE = 256,\n\tSD_ASYM_PACKING = 512,\n\tSD_PREFER_SIBLING = 1024,\n\tSD_OVERLAP = 2048,\n\tSD_NUMA = 4096,\n};\n\nstruct sched_domain_shared {\n\tatomic_t ref;\n\tatomic_t nr_busy_cpus;\n\tint has_idle_cores;\n};\n\nstruct sched_group;\n\nstruct sched_domain {\n\tstruct sched_domain *parent;\n\tstruct sched_domain *child;\n\tstruct sched_group *groups;\n\tlong unsigned int min_interval;\n\tlong unsigned int max_interval;\n\tunsigned int busy_factor;\n\tunsigned int imbalance_pct;\n\tunsigned int cache_nice_tries;\n\tint nohz_idle;\n\tint flags;\n\tint level;\n\tlong unsigned int last_balance;\n\tunsigned int balance_interval;\n\tunsigned int nr_balance_failed;\n\tu64 max_newidle_lb_cost;\n\tlong unsigned int next_decay_max_lb_cost;\n\tu64 avg_scan_cost;\n\tunsigned int lb_count[3];\n\tunsigned int lb_failed[3];\n\tunsigned int lb_balanced[3];\n\tunsigned int lb_imbalance[3];\n\tunsigned int lb_gained[3];\n\tunsigned int lb_hot_gained[3];\n\tunsigned int lb_nobusyg[3];\n\tunsigned int lb_nobusyq[3];\n\tunsigned int alb_count;\n\tunsigned int alb_failed;\n\tunsigned int alb_pushed;\n\tunsigned int sbe_count;\n\tunsigned int sbe_balanced;\n\tunsigned int sbe_pushed;\n\tunsigned int sbf_count;\n\tunsigned int sbf_balanced;\n\tunsigned int sbf_pushed;\n\tunsigned int ttwu_wake_remote;\n\tunsigned int ttwu_move_affine;\n\tunsigned int ttwu_move_balance;\n\tchar *name;\n\tunion {\n\t\tvoid *private;\n\t\tstruct callback_head rcu;\n\t};\n\tstruct sched_domain_shared *shared;\n\tunsigned int span_weight;\n\tlong unsigned int span[0];\n};\n\ntypedef const struct cpumask * (*sched_domain_mask_f)(int);\n\ntypedef int (*sched_domain_flags_f)();\n\nstruct sched_group_capacity;\n\nstruct sd_data {\n\tstruct sched_domain **sd;\n\tstruct sched_domain_shared **sds;\n\tstruct sched_group **sg;\n\tstruct sched_group_capacity **sgc;\n};\n\nstruct sched_domain_topology_level {\n\tsched_domain_mask_f mask;\n\tsched_domain_flags_f sd_flags;\n\tint flags;\n\tint numa_level;\n\tstruct sd_data data;\n\tchar *name;\n};\n\nenum apic_intr_mode_id {\n\tAPIC_PIC = 0,\n\tAPIC_VIRTUAL_WIRE = 1,\n\tAPIC_VIRTUAL_WIRE_NO_CONFIG = 2,\n\tAPIC_SYMMETRIC_IO = 3,\n\tAPIC_SYMMETRIC_IO_NO_ROUTING = 4,\n};\n\nstruct cppc_perf_caps {\n\tu32 guaranteed_perf;\n\tu32 highest_perf;\n\tu32 nominal_perf;\n\tu32 lowest_perf;\n\tu32 lowest_nonlinear_perf;\n\tu32 lowest_freq;\n\tu32 nominal_freq;\n};\n\nstruct tsc_adjust {\n\ts64 bootval;\n\ts64 adjusted;\n\tlong unsigned int nextcheck;\n\tbool warned;\n};\n\ntypedef void * (*pcpu_fc_alloc_fn_t)(unsigned int, size_t, size_t);\n\ntypedef void (*pcpu_fc_free_fn_t)(void *, size_t);\n\ntypedef void (*pcpu_fc_populate_pte_fn_t)(long unsigned int);\n\ntypedef int pcpu_fc_cpu_distance_fn_t(unsigned int, unsigned int);\n\nenum {\n\tDUMP_PREFIX_NONE = 0,\n\tDUMP_PREFIX_ADDRESS = 1,\n\tDUMP_PREFIX_OFFSET = 2,\n};\n\nstruct mpf_intel {\n\tchar signature[4];\n\tunsigned int physptr;\n\tunsigned char length;\n\tunsigned char specification;\n\tunsigned char checksum;\n\tunsigned char feature1;\n\tunsigned char feature2;\n\tunsigned char feature3;\n\tunsigned char feature4;\n\tunsigned char feature5;\n};\n\nstruct mpc_table {\n\tchar signature[4];\n\tshort unsigned int length;\n\tchar spec;\n\tchar checksum;\n\tchar oem[8];\n\tchar productid[12];\n\tunsigned int oemptr;\n\tshort unsigned int oemsize;\n\tshort unsigned int oemcount;\n\tunsigned int lapic;\n\tunsigned int reserved;\n};\n\nstruct mpc_cpu {\n\tunsigned char type;\n\tunsigned char apicid;\n\tunsigned char apicver;\n\tunsigned char cpuflag;\n\tunsigned int cpufeature;\n\tunsigned int featureflag;\n\tunsigned int reserved[2];\n};\n\nstruct mpc_bus {\n\tunsigned char type;\n\tunsigned char busid;\n\tunsigned char bustype[6];\n};\n\nstruct mpc_ioapic {\n\tunsigned char type;\n\tunsigned char apicid;\n\tunsigned char apicver;\n\tunsigned char flags;\n\tunsigned int apicaddr;\n};\n\nstruct mpc_lintsrc {\n\tunsigned char type;\n\tunsigned char irqtype;\n\tshort unsigned int irqflag;\n\tunsigned char srcbusid;\n\tunsigned char srcbusirq;\n\tunsigned char destapic;\n\tunsigned char destapiclint;\n};\n\nenum page_cache_mode {\n\t_PAGE_CACHE_MODE_WB = 0,\n\t_PAGE_CACHE_MODE_WC = 1,\n\t_PAGE_CACHE_MODE_UC_MINUS = 2,\n\t_PAGE_CACHE_MODE_UC = 3,\n\t_PAGE_CACHE_MODE_WT = 4,\n\t_PAGE_CACHE_MODE_WP = 5,\n\t_PAGE_CACHE_MODE_NUM = 8,\n};\n\nstruct irq_cfg {\n\tunsigned int dest_apicid;\n\tunsigned int vector;\n};\n\nenum {\n\tIRQ_REMAP_XAPIC_MODE = 0,\n\tIRQ_REMAP_X2APIC_MODE = 1,\n};\n\nunion apic_ir {\n\tlong unsigned int map[4];\n\tu32 regs[8];\n};\n\nenum {\n\tX2APIC_OFF = 0,\n\tX2APIC_ON = 1,\n\tX2APIC_DISABLED = 2,\n};\n\nenum {\n\tIRQ_SET_MASK_OK = 0,\n\tIRQ_SET_MASK_OK_NOCOPY = 1,\n\tIRQ_SET_MASK_OK_DONE = 2,\n};\n\nenum {\n\tIRQD_TRIGGER_MASK = 15,\n\tIRQD_SETAFFINITY_PENDING = 256,\n\tIRQD_ACTIVATED = 512,\n\tIRQD_NO_BALANCING = 1024,\n\tIRQD_PER_CPU = 2048,\n\tIRQD_AFFINITY_SET = 4096,\n\tIRQD_LEVEL = 8192,\n\tIRQD_WAKEUP_STATE = 16384,\n\tIRQD_MOVE_PCNTXT = 32768,\n\tIRQD_IRQ_DISABLED = 65536,\n\tIRQD_IRQ_MASKED = 131072,\n\tIRQD_IRQ_INPROGRESS = 262144,\n\tIRQD_WAKEUP_ARMED = 524288,\n\tIRQD_FORWARDED_TO_VCPU = 1048576,\n\tIRQD_AFFINITY_MANAGED = 2097152,\n\tIRQD_IRQ_STARTED = 4194304,\n\tIRQD_MANAGED_SHUTDOWN = 8388608,\n\tIRQD_SINGLE_TARGET = 16777216,\n\tIRQD_DEFAULT_TRIGGER_SET = 33554432,\n\tIRQD_CAN_RESERVE = 67108864,\n\tIRQD_MSI_NOMASK_QUIRK = 134217728,\n\tIRQD_HANDLE_ENFORCE_IRQCTX = 268435456,\n\tIRQD_AFFINITY_ON_ACTIVATE = 536870912,\n\tIRQD_IRQ_ENABLED_ON_SUSPEND = 1073741824,\n};\n\nenum {\n\tIRQCHIP_FWNODE_REAL = 0,\n\tIRQCHIP_FWNODE_NAMED = 1,\n\tIRQCHIP_FWNODE_NAMED_ID = 2,\n};\n\nenum {\n\tX86_IRQ_ALLOC_CONTIGUOUS_VECTORS = 1,\n\tX86_IRQ_ALLOC_LEGACY = 2,\n};\n\nstruct apic_chip_data {\n\tstruct irq_cfg hw_irq_cfg;\n\tunsigned int vector;\n\tunsigned int prev_vector;\n\tunsigned int cpu;\n\tunsigned int prev_cpu;\n\tunsigned int irq;\n\tstruct hlist_node clist;\n\tunsigned int move_in_progress: 1;\n\tunsigned int is_managed: 1;\n\tunsigned int can_reserve: 1;\n\tunsigned int has_reserved: 1;\n};\n\nstruct irq_matrix;\n\nenum {\n\tIRQ_TYPE_NONE = 0,\n\tIRQ_TYPE_EDGE_RISING = 1,\n\tIRQ_TYPE_EDGE_FALLING = 2,\n\tIRQ_TYPE_EDGE_BOTH = 3,\n\tIRQ_TYPE_LEVEL_HIGH = 4,\n\tIRQ_TYPE_LEVEL_LOW = 8,\n\tIRQ_TYPE_LEVEL_MASK = 12,\n\tIRQ_TYPE_SENSE_MASK = 15,\n\tIRQ_TYPE_DEFAULT = 15,\n\tIRQ_TYPE_PROBE = 16,\n\tIRQ_LEVEL = 256,\n\tIRQ_PER_CPU = 512,\n\tIRQ_NOPROBE = 1024,\n\tIRQ_NOREQUEST = 2048,\n\tIRQ_NOAUTOEN = 4096,\n\tIRQ_NO_BALANCING = 8192,\n\tIRQ_MOVE_PCNTXT = 16384,\n\tIRQ_NESTED_THREAD = 32768,\n\tIRQ_NOTHREAD = 65536,\n\tIRQ_PER_CPU_DEVID = 131072,\n\tIRQ_IS_POLLED = 262144,\n\tIRQ_DISABLE_UNLAZY = 524288,\n\tIRQ_HIDDEN = 1048576,\n};\n\nenum {\n\tIRQCHIP_SET_TYPE_MASKED = 1,\n\tIRQCHIP_EOI_IF_HANDLED = 2,\n\tIRQCHIP_MASK_ON_SUSPEND = 4,\n\tIRQCHIP_ONOFFLINE_ENABLED = 8,\n\tIRQCHIP_SKIP_SET_WAKE = 16,\n\tIRQCHIP_ONESHOT_SAFE = 32,\n\tIRQCHIP_EOI_THREADED = 64,\n\tIRQCHIP_SUPPORTS_LEVEL_MSI = 128,\n\tIRQCHIP_SUPPORTS_NMI = 256,\n\tIRQCHIP_ENABLE_WAKEUP_ON_SUSPEND = 512,\n};\n\nstruct clock_event_device___2;\n\nunion IO_APIC_reg_00 {\n\tu32 raw;\n\tstruct {\n\t\tu32 __reserved_2: 14;\n\t\tu32 LTS: 1;\n\t\tu32 delivery_type: 1;\n\t\tu32 __reserved_1: 8;\n\t\tu32 ID: 8;\n\t} bits;\n};\n\nunion IO_APIC_reg_01 {\n\tu32 raw;\n\tstruct {\n\t\tu32 version: 8;\n\t\tu32 __reserved_2: 7;\n\t\tu32 PRQ: 1;\n\t\tu32 entries: 8;\n\t\tu32 __reserved_1: 8;\n\t} bits;\n};\n\nunion IO_APIC_reg_02 {\n\tu32 raw;\n\tstruct {\n\t\tu32 __reserved_2: 24;\n\t\tu32 arbitration: 4;\n\t\tu32 __reserved_1: 4;\n\t} bits;\n};\n\nunion IO_APIC_reg_03 {\n\tu32 raw;\n\tstruct {\n\t\tu32 boot_DT: 1;\n\t\tu32 __reserved_1: 31;\n\t} bits;\n};\n\nstruct IO_APIC_route_entry {\n\tunion {\n\t\tstruct {\n\t\t\tu64 vector: 8;\n\t\t\tu64 delivery_mode: 3;\n\t\t\tu64 dest_mode_logical: 1;\n\t\t\tu64 delivery_status: 1;\n\t\t\tu64 active_low: 1;\n\t\t\tu64 irr: 1;\n\t\t\tu64 is_level: 1;\n\t\t\tu64 masked: 1;\n\t\t\tu64 reserved_0: 15;\n\t\t\tu64 reserved_1: 17;\n\t\t\tu64 virt_destid_8_14: 7;\n\t\t\tu64 destid_0_7: 8;\n\t\t};\n\t\tstruct {\n\t\t\tu64 ir_shared_0: 8;\n\t\t\tu64 ir_zero: 3;\n\t\t\tu64 ir_index_15: 1;\n\t\t\tu64 ir_shared_1: 5;\n\t\t\tu64 ir_reserved_0: 31;\n\t\t\tu64 ir_format: 1;\n\t\t\tu64 ir_index_0_14: 15;\n\t\t};\n\t\tstruct {\n\t\t\tu64 w1: 32;\n\t\t\tu64 w2: 32;\n\t\t};\n\t};\n};\n\nstruct irq_pin_list {\n\tstruct list_head list;\n\tint apic;\n\tint pin;\n};\n\nstruct mp_chip_data {\n\tstruct list_head irq_2_pin;\n\tstruct IO_APIC_route_entry entry;\n\tbool is_level;\n\tbool active_low;\n\tbool isa_irq;\n\tu32 count;\n};\n\nstruct mp_ioapic_gsi {\n\tu32 gsi_base;\n\tu32 gsi_end;\n};\n\nstruct ioapic {\n\tint nr_registers;\n\tstruct IO_APIC_route_entry *saved_registers;\n\tstruct mpc_ioapic mp_config;\n\tstruct mp_ioapic_gsi gsi_config;\n\tstruct ioapic_domain_cfg irqdomain_cfg;\n\tstruct irq_domain *irqdomain;\n\tstruct resource *iomem_res;\n};\n\nstruct io_apic {\n\tunsigned int index;\n\tunsigned int unused[3];\n\tunsigned int data;\n\tunsigned int unused2[11];\n\tunsigned int eoi;\n};\n\nenum {\n\tIRQ_DOMAIN_FLAG_HIERARCHY = 1,\n\tIRQ_DOMAIN_NAME_ALLOCATED = 2,\n\tIRQ_DOMAIN_FLAG_IPI_PER_CPU = 4,\n\tIRQ_DOMAIN_FLAG_IPI_SINGLE = 8,\n\tIRQ_DOMAIN_FLAG_MSI = 16,\n\tIRQ_DOMAIN_FLAG_MSI_REMAP = 32,\n\tIRQ_DOMAIN_MSI_NOMASK_QUIRK = 64,\n\tIRQ_DOMAIN_FLAG_NONCORE = 65536,\n};\n\ntypedef struct irq_alloc_info msi_alloc_info_t;\n\nstruct msi_domain_info;\n\nstruct msi_domain_ops {\n\tirq_hw_number_t (*get_hwirq)(struct msi_domain_info *, msi_alloc_info_t *);\n\tint (*msi_init)(struct irq_domain *, struct msi_domain_info *, unsigned int, irq_hw_number_t, msi_alloc_info_t *);\n\tvoid (*msi_free)(struct irq_domain *, struct msi_domain_info *, unsigned int);\n\tint (*msi_check)(struct irq_domain *, struct msi_domain_info *, struct device *);\n\tint (*msi_prepare)(struct irq_domain *, struct device *, int, msi_alloc_info_t *);\n\tvoid (*msi_finish)(msi_alloc_info_t *, int);\n\tvoid (*set_desc)(msi_alloc_info_t *, struct msi_desc *);\n\tint (*handle_error)(struct irq_domain *, struct msi_desc *, int);\n\tint (*domain_alloc_irqs)(struct irq_domain *, struct device *, int);\n\tvoid (*domain_free_irqs)(struct irq_domain *, struct device *);\n};\n\nstruct msi_domain_info {\n\tu32 flags;\n\tstruct msi_domain_ops *ops;\n\tstruct irq_chip *chip;\n\tvoid *chip_data;\n\tirq_flow_handler_t handler;\n\tvoid *handler_data;\n\tconst char *handler_name;\n\tvoid *data;\n};\n\nenum {\n\tMSI_FLAG_USE_DEF_DOM_OPS = 1,\n\tMSI_FLAG_USE_DEF_CHIP_OPS = 2,\n\tMSI_FLAG_MULTI_PCI_MSI = 4,\n\tMSI_FLAG_PCI_MSIX = 8,\n\tMSI_FLAG_ACTIVATE_EARLY = 16,\n\tMSI_FLAG_MUST_REACTIVATE = 32,\n\tMSI_FLAG_LEVEL_CAPABLE = 64,\n};\n\ntypedef int (*arch_set_vga_state_t)(struct pci_dev *, bool, unsigned int, u32);\n\nstruct acpi_device_status {\n\tu32 present: 1;\n\tu32 enabled: 1;\n\tu32 show_in_ui: 1;\n\tu32 functional: 1;\n\tu32 battery_present: 1;\n\tu32 reserved: 27;\n};\n\nstruct acpi_device_flags {\n\tu32 dynamic_status: 1;\n\tu32 removable: 1;\n\tu32 ejectable: 1;\n\tu32 power_manageable: 1;\n\tu32 match_driver: 1;\n\tu32 initialized: 1;\n\tu32 visited: 1;\n\tu32 hotplug_notify: 1;\n\tu32 is_dock_station: 1;\n\tu32 of_compatible_ok: 1;\n\tu32 coherent_dma: 1;\n\tu32 cca_seen: 1;\n\tu32 enumeration_by_parent: 1;\n\tu32 reserved: 19;\n};\n\ntypedef char acpi_bus_id[8];\n\nstruct acpi_pnp_type {\n\tu32 hardware_id: 1;\n\tu32 bus_address: 1;\n\tu32 platform_id: 1;\n\tu32 reserved: 29;\n};\n\ntypedef u64 acpi_bus_address;\n\ntypedef char acpi_device_name[40];\n\ntypedef char acpi_device_class[20];\n\nstruct acpi_device_pnp {\n\tacpi_bus_id bus_id;\n\tint instance_no;\n\tstruct acpi_pnp_type type;\n\tacpi_bus_address bus_address;\n\tchar *unique_id;\n\tstruct list_head ids;\n\tacpi_device_name device_name;\n\tacpi_device_class device_class;\n\tunion acpi_object *str_obj;\n};\n\nstruct acpi_device_power_flags {\n\tu32 explicit_get: 1;\n\tu32 power_resources: 1;\n\tu32 inrush_current: 1;\n\tu32 power_removed: 1;\n\tu32 ignore_parent: 1;\n\tu32 dsw_present: 1;\n\tu32 reserved: 26;\n};\n\nstruct acpi_device_power_state {\n\tstruct {\n\t\tu8 valid: 1;\n\t\tu8 explicit_set: 1;\n\t\tu8 reserved: 6;\n\t} flags;\n\tint power;\n\tint latency;\n\tstruct list_head resources;\n};\n\nstruct acpi_device_power {\n\tint state;\n\tstruct acpi_device_power_flags flags;\n\tstruct acpi_device_power_state states[5];\n};\n\nstruct acpi_device_wakeup_flags {\n\tu8 valid: 1;\n\tu8 notifier_present: 1;\n};\n\nstruct acpi_device_wakeup_context {\n\tvoid (*func)(struct acpi_device_wakeup_context *);\n\tstruct device *dev;\n};\n\nstruct acpi_device_wakeup {\n\tacpi_handle gpe_device;\n\tu64 gpe_number;\n\tu64 sleep_state;\n\tstruct list_head resources;\n\tstruct acpi_device_wakeup_flags flags;\n\tstruct acpi_device_wakeup_context context;\n\tstruct wakeup_source *ws;\n\tint prepare_count;\n\tint enable_count;\n};\n\nstruct acpi_device_perf_flags {\n\tu8 reserved: 8;\n};\n\nstruct acpi_device_perf_state;\n\nstruct acpi_device_perf {\n\tint state;\n\tstruct acpi_device_perf_flags flags;\n\tint state_count;\n\tstruct acpi_device_perf_state *states;\n};\n\nstruct acpi_device_dir {\n\tstruct proc_dir_entry *entry;\n};\n\nstruct acpi_device_data {\n\tconst union acpi_object *pointer;\n\tstruct list_head properties;\n\tconst union acpi_object *of_compatible;\n\tstruct list_head subnodes;\n};\n\nstruct acpi_scan_handler;\n\nstruct acpi_hotplug_context;\n\nstruct acpi_driver;\n\nstruct acpi_gpio_mapping;\n\nstruct acpi_device {\n\tint device_type;\n\tacpi_handle handle;\n\tstruct fwnode_handle fwnode;\n\tstruct acpi_device *parent;\n\tstruct list_head children;\n\tstruct list_head node;\n\tstruct list_head wakeup_list;\n\tstruct list_head del_list;\n\tstruct acpi_device_status status;\n\tstruct acpi_device_flags flags;\n\tstruct acpi_device_pnp pnp;\n\tstruct acpi_device_power power;\n\tstruct acpi_device_wakeup wakeup;\n\tstruct acpi_device_perf performance;\n\tstruct acpi_device_dir dir;\n\tstruct acpi_device_data data;\n\tstruct acpi_scan_handler *handler;\n\tstruct acpi_hotplug_context *hp;\n\tstruct acpi_driver *driver;\n\tconst struct acpi_gpio_mapping *driver_gpios;\n\tvoid *driver_data;\n\tstruct device dev;\n\tunsigned int physical_node_count;\n\tunsigned int dep_unmet;\n\tstruct list_head physical_node_list;\n\tstruct mutex physical_node_lock;\n\tvoid (*remove)(struct acpi_device *);\n};\n\nstruct acpi_hotplug_profile {\n\tstruct kobject kobj;\n\tint (*scan_dependent)(struct acpi_device *);\n\tvoid (*notify_online)(struct acpi_device *);\n\tbool enabled: 1;\n\tbool demand_offline: 1;\n};\n\nstruct acpi_scan_handler {\n\tconst struct acpi_device_id *ids;\n\tstruct list_head list_node;\n\tbool (*match)(const char *, const struct acpi_device_id **);\n\tint (*attach)(struct acpi_device *, const struct acpi_device_id *);\n\tvoid (*detach)(struct acpi_device *);\n\tvoid (*bind)(struct device *);\n\tvoid (*unbind)(struct device *);\n\tstruct acpi_hotplug_profile hotplug;\n};\n\nstruct acpi_hotplug_context {\n\tstruct acpi_device *self;\n\tint (*notify)(struct acpi_device *, u32);\n\tvoid (*uevent)(struct acpi_device *, u32);\n\tvoid (*fixup)(struct acpi_device *);\n};\n\ntypedef int (*acpi_op_add)(struct acpi_device *);\n\ntypedef int (*acpi_op_remove)(struct acpi_device *);\n\ntypedef void (*acpi_op_notify)(struct acpi_device *, u32);\n\nstruct acpi_device_ops {\n\tacpi_op_add add;\n\tacpi_op_remove remove;\n\tacpi_op_notify notify;\n};\n\nstruct acpi_driver {\n\tchar name[80];\n\tchar class[80];\n\tconst struct acpi_device_id *ids;\n\tunsigned int flags;\n\tstruct acpi_device_ops ops;\n\tstruct device_driver drv;\n\tstruct module *owner;\n};\n\nstruct acpi_device_perf_state {\n\tstruct {\n\t\tu8 valid: 1;\n\t\tu8 reserved: 7;\n\t} flags;\n\tu8 power;\n\tu8 performance;\n\tint latency;\n};\n\nstruct acpi_gpio_params;\n\nstruct acpi_gpio_mapping {\n\tconst char *name;\n\tconst struct acpi_gpio_params *data;\n\tunsigned int size;\n\tunsigned int quirks;\n};\n\nstruct acpi_gpio_params {\n\tunsigned int crs_entry_index;\n\tunsigned int line_index;\n\tbool active_low;\n};\n\nstruct uvyh_gr0_gam_gr_config_s {\n\tlong unsigned int rsvd_0_9: 10;\n\tlong unsigned int subspace: 1;\n\tlong unsigned int rsvd_11_63: 53;\n};\n\nstruct uv5h_gr0_gam_gr_config_s {\n\tlong unsigned int rsvd_0_9: 10;\n\tlong unsigned int subspace: 1;\n\tlong unsigned int rsvd_11_63: 53;\n};\n\nstruct uv4h_gr0_gam_gr_config_s {\n\tlong unsigned int rsvd_0_9: 10;\n\tlong unsigned int subspace: 1;\n\tlong unsigned int rsvd_11_63: 53;\n};\n\nstruct uv3h_gr0_gam_gr_config_s {\n\tlong unsigned int m_skt: 6;\n\tlong unsigned int undef_6_9: 4;\n\tlong unsigned int subspace: 1;\n\tlong unsigned int reserved: 53;\n};\n\nstruct uv2h_gr0_gam_gr_config_s {\n\tlong unsigned int n_gr: 4;\n\tlong unsigned int reserved: 60;\n};\n\nunion uvyh_gr0_gam_gr_config_u {\n\tlong unsigned int v;\n\tstruct uvyh_gr0_gam_gr_config_s sy;\n\tstruct uv5h_gr0_gam_gr_config_s s5;\n\tstruct uv4h_gr0_gam_gr_config_s s4;\n\tstruct uv3h_gr0_gam_gr_config_s s3;\n\tstruct uv2h_gr0_gam_gr_config_s s2;\n};\n\nstruct uvh_node_id_s {\n\tlong unsigned int force1: 1;\n\tlong unsigned int manufacturer: 11;\n\tlong unsigned int part_number: 16;\n\tlong unsigned int revision: 4;\n\tlong unsigned int rsvd_32_63: 32;\n};\n\nstruct uvxh_node_id_s {\n\tlong unsigned int force1: 1;\n\tlong unsigned int manufacturer: 11;\n\tlong unsigned int part_number: 16;\n\tlong unsigned int revision: 4;\n\tlong unsigned int node_id: 15;\n\tlong unsigned int rsvd_47_49: 3;\n\tlong unsigned int nodes_per_bit: 7;\n\tlong unsigned int ni_port: 5;\n\tlong unsigned int rsvd_62_63: 2;\n};\n\nstruct uvyh_node_id_s {\n\tlong unsigned int force1: 1;\n\tlong unsigned int manufacturer: 11;\n\tlong unsigned int part_number: 16;\n\tlong unsigned int revision: 4;\n\tlong unsigned int node_id: 7;\n\tlong unsigned int rsvd_39_56: 18;\n\tlong unsigned int ni_port: 6;\n\tlong unsigned int rsvd_63: 1;\n};\n\nstruct uv5h_node_id_s {\n\tlong unsigned int force1: 1;\n\tlong unsigned int manufacturer: 11;\n\tlong unsigned int part_number: 16;\n\tlong unsigned int revision: 4;\n\tlong unsigned int node_id: 7;\n\tlong unsigned int rsvd_39_56: 18;\n\tlong unsigned int ni_port: 6;\n\tlong unsigned int rsvd_63: 1;\n};\n\nstruct uv4h_node_id_s {\n\tlong unsigned int force1: 1;\n\tlong unsigned int manufacturer: 11;\n\tlong unsigned int part_number: 16;\n\tlong unsigned int revision: 4;\n\tlong unsigned int node_id: 15;\n\tlong unsigned int rsvd_47: 1;\n\tlong unsigned int router_select: 1;\n\tlong unsigned int rsvd_49: 1;\n\tlong unsigned int nodes_per_bit: 7;\n\tlong unsigned int ni_port: 5;\n\tlong unsigned int rsvd_62_63: 2;\n};\n\nstruct uv3h_node_id_s {\n\tlong unsigned int force1: 1;\n\tlong unsigned int manufacturer: 11;\n\tlong unsigned int part_number: 16;\n\tlong unsigned int revision: 4;\n\tlong unsigned int node_id: 15;\n\tlong unsigned int rsvd_47: 1;\n\tlong unsigned int router_select: 1;\n\tlong unsigned int rsvd_49: 1;\n\tlong unsigned int nodes_per_bit: 7;\n\tlong unsigned int ni_port: 5;\n\tlong unsigned int rsvd_62_63: 2;\n};\n\nstruct uv2h_node_id_s {\n\tlong unsigned int force1: 1;\n\tlong unsigned int manufacturer: 11;\n\tlong unsigned int part_number: 16;\n\tlong unsigned int revision: 4;\n\tlong unsigned int node_id: 15;\n\tlong unsigned int rsvd_47_49: 3;\n\tlong unsigned int nodes_per_bit: 7;\n\tlong unsigned int ni_port: 5;\n\tlong unsigned int rsvd_62_63: 2;\n};\n\nunion uvh_node_id_u {\n\tlong unsigned int v;\n\tstruct uvh_node_id_s s;\n\tstruct uvxh_node_id_s sx;\n\tstruct uvyh_node_id_s sy;\n\tstruct uv5h_node_id_s s5;\n\tstruct uv4h_node_id_s s4;\n\tstruct uv3h_node_id_s s3;\n\tstruct uv2h_node_id_s s2;\n};\n\nstruct uvh_rh10_gam_addr_map_config_s {\n\tlong unsigned int undef_0_5: 6;\n\tlong unsigned int n_skt: 3;\n\tlong unsigned int undef_9_11: 3;\n\tlong unsigned int ls_enable: 1;\n\tlong unsigned int undef_13_15: 3;\n\tlong unsigned int mk_tme_keyid_bits: 4;\n\tlong unsigned int rsvd_20_63: 44;\n};\n\nstruct uvyh_rh10_gam_addr_map_config_s {\n\tlong unsigned int undef_0_5: 6;\n\tlong unsigned int n_skt: 3;\n\tlong unsigned int undef_9_11: 3;\n\tlong unsigned int ls_enable: 1;\n\tlong unsigned int undef_13_15: 3;\n\tlong unsigned int mk_tme_keyid_bits: 4;\n\tlong unsigned int rsvd_20_63: 44;\n};\n\nstruct uv5h_rh10_gam_addr_map_config_s {\n\tlong unsigned int undef_0_5: 6;\n\tlong unsigned int n_skt: 3;\n\tlong unsigned int undef_9_11: 3;\n\tlong unsigned int ls_enable: 1;\n\tlong unsigned int undef_13_15: 3;\n\tlong unsigned int mk_tme_keyid_bits: 4;\n};\n\nunion uvh_rh10_gam_addr_map_config_u {\n\tlong unsigned int v;\n\tstruct uvh_rh10_gam_addr_map_config_s s;\n\tstruct uvyh_rh10_gam_addr_map_config_s sy;\n\tstruct uv5h_rh10_gam_addr_map_config_s s5;\n};\n\nstruct uvh_rh10_gam_mmioh_overlay_config0_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 26;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int undef_62: 1;\n\tlong unsigned int enable: 1;\n};\n\nstruct uvyh_rh10_gam_mmioh_overlay_config0_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 26;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int undef_62: 1;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv5h_rh10_gam_mmioh_overlay_config0_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 26;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int undef_62: 1;\n\tlong unsigned int enable: 1;\n};\n\nunion uvh_rh10_gam_mmioh_overlay_config0_u {\n\tlong unsigned int v;\n\tstruct uvh_rh10_gam_mmioh_overlay_config0_s s;\n\tstruct uvyh_rh10_gam_mmioh_overlay_config0_s sy;\n\tstruct uv5h_rh10_gam_mmioh_overlay_config0_s s5;\n};\n\nstruct uvh_rh10_gam_mmioh_overlay_config1_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 26;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int undef_62: 1;\n\tlong unsigned int enable: 1;\n};\n\nstruct uvyh_rh10_gam_mmioh_overlay_config1_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 26;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int undef_62: 1;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv5h_rh10_gam_mmioh_overlay_config1_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 26;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int undef_62: 1;\n\tlong unsigned int enable: 1;\n};\n\nunion uvh_rh10_gam_mmioh_overlay_config1_u {\n\tlong unsigned int v;\n\tstruct uvh_rh10_gam_mmioh_overlay_config1_s s;\n\tstruct uvyh_rh10_gam_mmioh_overlay_config1_s sy;\n\tstruct uv5h_rh10_gam_mmioh_overlay_config1_s s5;\n};\n\nstruct uvh_rh10_gam_mmr_overlay_config_s {\n\tlong unsigned int undef_0_24: 25;\n\tlong unsigned int base: 27;\n\tlong unsigned int undef_52_62: 11;\n\tlong unsigned int enable: 1;\n};\n\nstruct uvyh_rh10_gam_mmr_overlay_config_s {\n\tlong unsigned int undef_0_24: 25;\n\tlong unsigned int base: 27;\n\tlong unsigned int undef_52_62: 11;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv5h_rh10_gam_mmr_overlay_config_s {\n\tlong unsigned int undef_0_24: 25;\n\tlong unsigned int base: 27;\n\tlong unsigned int undef_52_62: 11;\n\tlong unsigned int enable: 1;\n};\n\nunion uvh_rh10_gam_mmr_overlay_config_u {\n\tlong unsigned int v;\n\tstruct uvh_rh10_gam_mmr_overlay_config_s s;\n\tstruct uvyh_rh10_gam_mmr_overlay_config_s sy;\n\tstruct uv5h_rh10_gam_mmr_overlay_config_s s5;\n};\n\nstruct uvh_rh_gam_addr_map_config_s {\n\tlong unsigned int rsvd_0_5: 6;\n\tlong unsigned int n_skt: 4;\n\tlong unsigned int rsvd_10_63: 54;\n};\n\nstruct uvxh_rh_gam_addr_map_config_s {\n\tlong unsigned int rsvd_0_5: 6;\n\tlong unsigned int n_skt: 4;\n\tlong unsigned int rsvd_10_63: 54;\n};\n\nstruct uv4h_rh_gam_addr_map_config_s {\n\tlong unsigned int rsvd_0_5: 6;\n\tlong unsigned int n_skt: 4;\n\tlong unsigned int rsvd_10_63: 54;\n};\n\nstruct uv3h_rh_gam_addr_map_config_s {\n\tlong unsigned int m_skt: 6;\n\tlong unsigned int n_skt: 4;\n\tlong unsigned int rsvd_10_63: 54;\n};\n\nstruct uv2h_rh_gam_addr_map_config_s {\n\tlong unsigned int m_skt: 6;\n\tlong unsigned int n_skt: 4;\n\tlong unsigned int rsvd_10_63: 54;\n};\n\nunion uvh_rh_gam_addr_map_config_u {\n\tlong unsigned int v;\n\tstruct uvh_rh_gam_addr_map_config_s s;\n\tstruct uvxh_rh_gam_addr_map_config_s sx;\n\tstruct uv4h_rh_gam_addr_map_config_s s4;\n\tstruct uv3h_rh_gam_addr_map_config_s s3;\n\tstruct uv2h_rh_gam_addr_map_config_s s2;\n};\n\nstruct uvh_rh_gam_alias_2_overlay_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int base: 8;\n\tlong unsigned int rsvd_32_47: 16;\n\tlong unsigned int m_alias: 5;\n\tlong unsigned int rsvd_53_62: 10;\n\tlong unsigned int enable: 1;\n};\n\nstruct uvxh_rh_gam_alias_2_overlay_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int base: 8;\n\tlong unsigned int rsvd_32_47: 16;\n\tlong unsigned int m_alias: 5;\n\tlong unsigned int rsvd_53_62: 10;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv4h_rh_gam_alias_2_overlay_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int base: 8;\n\tlong unsigned int rsvd_32_47: 16;\n\tlong unsigned int m_alias: 5;\n\tlong unsigned int rsvd_53_62: 10;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv3h_rh_gam_alias_2_overlay_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int base: 8;\n\tlong unsigned int rsvd_32_47: 16;\n\tlong unsigned int m_alias: 5;\n\tlong unsigned int rsvd_53_62: 10;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv2h_rh_gam_alias_2_overlay_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int base: 8;\n\tlong unsigned int rsvd_32_47: 16;\n\tlong unsigned int m_alias: 5;\n\tlong unsigned int rsvd_53_62: 10;\n\tlong unsigned int enable: 1;\n};\n\nunion uvh_rh_gam_alias_2_overlay_config_u {\n\tlong unsigned int v;\n\tstruct uvh_rh_gam_alias_2_overlay_config_s s;\n\tstruct uvxh_rh_gam_alias_2_overlay_config_s sx;\n\tstruct uv4h_rh_gam_alias_2_overlay_config_s s4;\n\tstruct uv3h_rh_gam_alias_2_overlay_config_s s3;\n\tstruct uv2h_rh_gam_alias_2_overlay_config_s s2;\n};\n\nstruct uvh_rh_gam_alias_2_redirect_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int dest_base: 22;\n\tlong unsigned int rsvd_46_63: 18;\n};\n\nstruct uvxh_rh_gam_alias_2_redirect_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int dest_base: 22;\n\tlong unsigned int rsvd_46_63: 18;\n};\n\nstruct uv4h_rh_gam_alias_2_redirect_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int dest_base: 22;\n\tlong unsigned int rsvd_46_63: 18;\n};\n\nstruct uv3h_rh_gam_alias_2_redirect_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int dest_base: 22;\n\tlong unsigned int rsvd_46_63: 18;\n};\n\nstruct uv2h_rh_gam_alias_2_redirect_config_s {\n\tlong unsigned int rsvd_0_23: 24;\n\tlong unsigned int dest_base: 22;\n\tlong unsigned int rsvd_46_63: 18;\n};\n\nunion uvh_rh_gam_alias_2_redirect_config_u {\n\tlong unsigned int v;\n\tstruct uvh_rh_gam_alias_2_redirect_config_s s;\n\tstruct uvxh_rh_gam_alias_2_redirect_config_s sx;\n\tstruct uv4h_rh_gam_alias_2_redirect_config_s s4;\n\tstruct uv3h_rh_gam_alias_2_redirect_config_s s3;\n\tstruct uv2h_rh_gam_alias_2_redirect_config_s s2;\n};\n\nstruct uvh_rh_gam_gru_overlay_config_s {\n\tlong unsigned int rsvd_0_45: 46;\n\tlong unsigned int rsvd_46_51: 6;\n\tlong unsigned int n_gru: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uvxh_rh_gam_gru_overlay_config_s {\n\tlong unsigned int rsvd_0_45: 46;\n\tlong unsigned int rsvd_46_51: 6;\n\tlong unsigned int n_gru: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv4ah_rh_gam_gru_overlay_config_s {\n\tlong unsigned int rsvd_0_24: 25;\n\tlong unsigned int undef_25: 1;\n\tlong unsigned int base: 26;\n\tlong unsigned int n_gru: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv4h_rh_gam_gru_overlay_config_s {\n\tlong unsigned int rsvd_0_24: 25;\n\tlong unsigned int undef_25: 1;\n\tlong unsigned int base: 20;\n\tlong unsigned int rsvd_46_51: 6;\n\tlong unsigned int n_gru: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv3h_rh_gam_gru_overlay_config_s {\n\tlong unsigned int rsvd_0_27: 28;\n\tlong unsigned int base: 18;\n\tlong unsigned int rsvd_46_51: 6;\n\tlong unsigned int n_gru: 4;\n\tlong unsigned int rsvd_56_61: 6;\n\tlong unsigned int mode: 1;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv2h_rh_gam_gru_overlay_config_s {\n\tlong unsigned int rsvd_0_27: 28;\n\tlong unsigned int base: 18;\n\tlong unsigned int rsvd_46_51: 6;\n\tlong unsigned int n_gru: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nunion uvh_rh_gam_gru_overlay_config_u {\n\tlong unsigned int v;\n\tstruct uvh_rh_gam_gru_overlay_config_s s;\n\tstruct uvxh_rh_gam_gru_overlay_config_s sx;\n\tstruct uv4ah_rh_gam_gru_overlay_config_s s4a;\n\tstruct uv4h_rh_gam_gru_overlay_config_s s4;\n\tstruct uv3h_rh_gam_gru_overlay_config_s s3;\n\tstruct uv2h_rh_gam_gru_overlay_config_s s2;\n};\n\nstruct uvh_rh_gam_mmioh_overlay_config_s {\n\tlong unsigned int rsvd_0_26: 27;\n\tlong unsigned int base: 19;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uvxh_rh_gam_mmioh_overlay_config_s {\n\tlong unsigned int rsvd_0_26: 27;\n\tlong unsigned int base: 19;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv2h_rh_gam_mmioh_overlay_config_s {\n\tlong unsigned int rsvd_0_26: 27;\n\tlong unsigned int base: 19;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nunion uvh_rh_gam_mmioh_overlay_config_u {\n\tlong unsigned int v;\n\tstruct uvh_rh_gam_mmioh_overlay_config_s s;\n\tstruct uvxh_rh_gam_mmioh_overlay_config_s sx;\n\tstruct uv2h_rh_gam_mmioh_overlay_config_s s2;\n};\n\nstruct uvh_rh_gam_mmioh_overlay_config0_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uvxh_rh_gam_mmioh_overlay_config0_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv4ah_rh_gam_mmioh_overlay_config0_mmr_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 26;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int undef_62: 1;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv4h_rh_gam_mmioh_overlay_config0_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv3h_rh_gam_mmioh_overlay_config0_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nunion uvh_rh_gam_mmioh_overlay_config0_u {\n\tlong unsigned int v;\n\tstruct uvh_rh_gam_mmioh_overlay_config0_s s;\n\tstruct uvxh_rh_gam_mmioh_overlay_config0_s sx;\n\tstruct uv4ah_rh_gam_mmioh_overlay_config0_mmr_s s4a;\n\tstruct uv4h_rh_gam_mmioh_overlay_config0_s s4;\n\tstruct uv3h_rh_gam_mmioh_overlay_config0_s s3;\n};\n\nstruct uvh_rh_gam_mmioh_overlay_config1_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uvxh_rh_gam_mmioh_overlay_config1_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv4ah_rh_gam_mmioh_overlay_config1_mmr_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 26;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int undef_62: 1;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv4h_rh_gam_mmioh_overlay_config1_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv3h_rh_gam_mmioh_overlay_config1_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int m_io: 6;\n\tlong unsigned int n_io: 4;\n\tlong unsigned int rsvd_56_62: 7;\n\tlong unsigned int enable: 1;\n};\n\nunion uvh_rh_gam_mmioh_overlay_config1_u {\n\tlong unsigned int v;\n\tstruct uvh_rh_gam_mmioh_overlay_config1_s s;\n\tstruct uvxh_rh_gam_mmioh_overlay_config1_s sx;\n\tstruct uv4ah_rh_gam_mmioh_overlay_config1_mmr_s s4a;\n\tstruct uv4h_rh_gam_mmioh_overlay_config1_s s4;\n\tstruct uv3h_rh_gam_mmioh_overlay_config1_s s3;\n};\n\nstruct uvh_rh_gam_mmr_overlay_config_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int rsvd_46_62: 17;\n\tlong unsigned int enable: 1;\n};\n\nstruct uvxh_rh_gam_mmr_overlay_config_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int rsvd_46_62: 17;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv4h_rh_gam_mmr_overlay_config_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int rsvd_46_62: 17;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv3h_rh_gam_mmr_overlay_config_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int rsvd_46_62: 17;\n\tlong unsigned int enable: 1;\n};\n\nstruct uv2h_rh_gam_mmr_overlay_config_s {\n\tlong unsigned int rsvd_0_25: 26;\n\tlong unsigned int base: 20;\n\tlong unsigned int rsvd_46_62: 17;\n\tlong unsigned int enable: 1;\n};\n\nunion uvh_rh_gam_mmr_overlay_config_u {\n\tlong unsigned int v;\n\tstruct uvh_rh_gam_mmr_overlay_config_s s;\n\tstruct uvxh_rh_gam_mmr_overlay_config_s sx;\n\tstruct uv4h_rh_gam_mmr_overlay_config_s s4;\n\tstruct uv3h_rh_gam_mmr_overlay_config_s s3;\n\tstruct uv2h_rh_gam_mmr_overlay_config_s s2;\n};\n\nenum uv_system_type {\n\tUV_NONE = 0,\n\tUV_LEGACY_APIC = 1,\n\tUV_X2APIC = 2,\n};\n\nenum {\n\tBIOS_STATUS_MORE_PASSES = 1,\n\tBIOS_STATUS_SUCCESS = 0,\n\tBIOS_STATUS_UNIMPLEMENTED = 4294967258,\n\tBIOS_STATUS_EINVAL = 4294967274,\n\tBIOS_STATUS_UNAVAIL = 4294967280,\n\tBIOS_STATUS_ABORT = 4294967292,\n};\n\nstruct uv_gam_parameters {\n\tu64 mmr_base;\n\tu64 gru_base;\n\tu8 mmr_shift;\n\tu8 gru_shift;\n\tu8 gpa_shift;\n\tu8 unused1;\n};\n\nstruct uv_gam_range_entry {\n\tchar type;\n\tchar unused1;\n\tu16 nasid;\n\tu16 sockid;\n\tu16 pnode;\n\tu32 unused2;\n\tu32 limit;\n};\n\nstruct uv_arch_type_entry {\n\tchar archtype[8];\n};\n\nstruct uv_systab {\n\tchar signature[4];\n\tu32 revision;\n\tu64 function;\n\tu32 size;\n\tstruct {\n\t\tu32 type: 8;\n\t\tu32 offset: 24;\n\t} entry[1];\n};\n\nenum {\n\tBIOS_FREQ_BASE_PLATFORM = 0,\n\tBIOS_FREQ_BASE_INTERVAL_TIMER = 1,\n\tBIOS_FREQ_BASE_REALTIME_CLOCK = 2,\n};\n\nstruct uv_gam_range_s {\n\tu32 limit;\n\tu16 nasid;\n\ts8 base;\n\tu8 reserved;\n};\n\nstruct uv_hub_info_s {\n\tunsigned int hub_type;\n\tunsigned char hub_revision;\n\tlong unsigned int global_mmr_base;\n\tlong unsigned int global_mmr_shift;\n\tlong unsigned int gpa_mask;\n\tshort unsigned int *socket_to_node;\n\tshort unsigned int *socket_to_pnode;\n\tshort unsigned int *pnode_to_socket;\n\tstruct uv_gam_range_s *gr_table;\n\tshort unsigned int min_socket;\n\tshort unsigned int min_pnode;\n\tunsigned char m_val;\n\tunsigned char n_val;\n\tunsigned char gr_table_len;\n\tunsigned char apic_pnode_shift;\n\tunsigned char gpa_shift;\n\tunsigned char nasid_shift;\n\tunsigned char m_shift;\n\tunsigned char n_lshift;\n\tunsigned int gnode_extra;\n\tlong unsigned int gnode_upper;\n\tlong unsigned int lowmem_remap_top;\n\tlong unsigned int lowmem_remap_base;\n\tlong unsigned int global_gru_base;\n\tlong unsigned int global_gru_shift;\n\tshort unsigned int pnode;\n\tshort unsigned int pnode_mask;\n\tshort unsigned int coherency_domain_number;\n\tshort unsigned int numa_blade_id;\n\tshort unsigned int nr_possible_cpus;\n\tshort unsigned int nr_online_cpus;\n\tshort int memory_nid;\n};\n\nstruct uv_cpu_info_s {\n\tvoid *p_uv_hub_info;\n\tunsigned char blade_cpu_id;\n\tvoid *reserved;\n};\n\nstruct uvh_apicid_s {\n\tlong unsigned int local_apic_mask: 24;\n\tlong unsigned int local_apic_shift: 5;\n\tlong unsigned int unused1: 3;\n\tlong unsigned int pnode_mask: 24;\n\tlong unsigned int pnode_shift: 5;\n\tlong unsigned int unused2: 3;\n};\n\nunion uvh_apicid {\n\tlong unsigned int v;\n\tstruct uvh_apicid_s s;\n};\n\nenum map_type {\n\tmap_wb = 0,\n\tmap_uc = 1,\n};\n\nenum mmioh_arch {\n\tUV2_MMIOH = 4294967295,\n\tUVY_MMIOH0 = 0,\n\tUVY_MMIOH1 = 1,\n\tUVX_MMIOH0 = 2,\n\tUVX_MMIOH1 = 3,\n};\n\nstruct mn {\n\tunsigned char m_val;\n\tunsigned char n_val;\n\tunsigned char m_shift;\n\tunsigned char n_lshift;\n};\n\nstruct cluster_mask {\n\tunsigned int clusterid;\n\tint node;\n\tstruct cpumask mask;\n};\n\nstruct dyn_arch_ftrace {};\n\nenum {\n\tFTRACE_OPS_FL_ENABLED = 1,\n\tFTRACE_OPS_FL_DYNAMIC = 2,\n\tFTRACE_OPS_FL_SAVE_REGS = 4,\n\tFTRACE_OPS_FL_SAVE_REGS_IF_SUPPORTED = 8,\n\tFTRACE_OPS_FL_RECURSION = 16,\n\tFTRACE_OPS_FL_STUB = 32,\n\tFTRACE_OPS_FL_INITIALIZED = 64,\n\tFTRACE_OPS_FL_DELETED = 128,\n\tFTRACE_OPS_FL_ADDING = 256,\n\tFTRACE_OPS_FL_REMOVING = 512,\n\tFTRACE_OPS_FL_MODIFYING = 1024,\n\tFTRACE_OPS_FL_ALLOC_TRAMP = 2048,\n\tFTRACE_OPS_FL_IPMODIFY = 4096,\n\tFTRACE_OPS_FL_PID = 8192,\n\tFTRACE_OPS_FL_RCU = 16384,\n\tFTRACE_OPS_FL_TRACE_ARRAY = 32768,\n\tFTRACE_OPS_FL_PERMANENT = 65536,\n\tFTRACE_OPS_FL_DIRECT = 131072,\n};\n\nenum {\n\tFTRACE_FL_ENABLED = 2147483648,\n\tFTRACE_FL_REGS = 1073741824,\n\tFTRACE_FL_REGS_EN = 536870912,\n\tFTRACE_FL_TRAMP = 268435456,\n\tFTRACE_FL_TRAMP_EN = 134217728,\n\tFTRACE_FL_IPMODIFY = 67108864,\n\tFTRACE_FL_DISABLED = 33554432,\n\tFTRACE_FL_DIRECT = 16777216,\n\tFTRACE_FL_DIRECT_EN = 8388608,\n};\n\nstruct dyn_ftrace {\n\tlong unsigned int ip;\n\tlong unsigned int flags;\n\tstruct dyn_arch_ftrace arch;\n};\n\nenum {\n\tFTRACE_UPDATE_IGNORE = 0,\n\tFTRACE_UPDATE_MAKE_CALL = 1,\n\tFTRACE_UPDATE_MODIFY_CALL = 2,\n\tFTRACE_UPDATE_MAKE_NOP = 3,\n};\n\nunion ftrace_op_code_union {\n\tchar code[7];\n\tstruct {\n\t\tchar op[3];\n\t\tint offset;\n\t} __attribute__((packed));\n};\n\nstruct ftrace_rec_iter;\n\ntypedef __s64 Elf64_Sxword;\n\nstruct elf64_rela {\n\tElf64_Addr r_offset;\n\tElf64_Xword r_info;\n\tElf64_Sxword r_addend;\n};\n\ntypedef struct elf64_rela Elf64_Rela;\n\nstruct kimage_arch {\n\tp4d_t *p4d;\n\tpud_t *pud;\n\tpmd_t *pmd;\n\tpte_t *pte;\n\tvoid *elf_headers;\n\tlong unsigned int elf_headers_sz;\n\tlong unsigned int elf_load_addr;\n};\n\ntypedef long unsigned int kimage_entry_t;\n\nstruct kexec_segment {\n\tunion {\n\t\tvoid *buf;\n\t\tvoid *kbuf;\n\t};\n\tsize_t bufsz;\n\tlong unsigned int mem;\n\tsize_t memsz;\n};\n\nstruct purgatory_info {\n\tconst Elf64_Ehdr *ehdr;\n\tElf64_Shdr *sechdrs;\n\tvoid *purgatory_buf;\n};\n\ntypedef int kexec_probe_t(const char *, long unsigned int);\n\nstruct kimage;\n\ntypedef void *kexec_load_t(struct kimage *, char *, long unsigned int, char *, long unsigned int, char *, long unsigned int);\n\nstruct kexec_file_ops;\n\nstruct kimage {\n\tkimage_entry_t head;\n\tkimage_entry_t *entry;\n\tkimage_entry_t *last_entry;\n\tlong unsigned int start;\n\tstruct page *control_code_page;\n\tstruct page *swap_page;\n\tvoid *vmcoreinfo_data_copy;\n\tlong unsigned int nr_segments;\n\tstruct kexec_segment segment[16];\n\tstruct list_head control_pages;\n\tstruct list_head dest_pages;\n\tstruct list_head unusable_pages;\n\tlong unsigned int control_page;\n\tunsigned int type: 1;\n\tunsigned int preserve_context: 1;\n\tunsigned int file_mode: 1;\n\tstruct kimage_arch arch;\n\tvoid *kernel_buf;\n\tlong unsigned int kernel_buf_len;\n\tvoid *initrd_buf;\n\tlong unsigned int initrd_buf_len;\n\tchar *cmdline_buf;\n\tlong unsigned int cmdline_buf_len;\n\tconst struct kexec_file_ops *fops;\n\tvoid *image_loader_data;\n\tstruct purgatory_info purgatory_info;\n};\n\ntypedef int kexec_cleanup_t(void *);\n\ntypedef int kexec_verify_sig_t(const char *, long unsigned int);\n\nstruct kexec_file_ops {\n\tkexec_probe_t *probe;\n\tkexec_load_t *load;\n\tkexec_cleanup_t *cleanup;\n\tkexec_verify_sig_t *verify_sig;\n};\n\nstruct x86_mapping_info {\n\tvoid * (*alloc_pgt_page)(void *);\n\tvoid *context;\n\tlong unsigned int page_flag;\n\tlong unsigned int offset;\n\tbool direct_gbpages;\n\tlong unsigned int kernpg_flag;\n};\n\nstruct init_pgtable_data {\n\tstruct x86_mapping_info *info;\n\tpgd_t *level4p;\n};\n\ntypedef void crash_vmclear_fn();\n\nstruct kexec_buf {\n\tstruct kimage *image;\n\tvoid *buffer;\n\tlong unsigned int bufsz;\n\tlong unsigned int mem;\n\tlong unsigned int memsz;\n\tlong unsigned int buf_align;\n\tlong unsigned int buf_min;\n\tlong unsigned int buf_max;\n\tbool top_down;\n};\n\nstruct crash_mem_range {\n\tu64 start;\n\tu64 end;\n};\n\nstruct crash_mem {\n\tunsigned int max_nr_ranges;\n\tunsigned int nr_ranges;\n\tstruct crash_mem_range ranges[0];\n};\n\nstruct crash_memmap_data {\n\tstruct boot_params *params;\n\tunsigned int type;\n};\n\nstruct kexec_entry64_regs {\n\tuint64_t rax;\n\tuint64_t rcx;\n\tuint64_t rdx;\n\tuint64_t rbx;\n\tuint64_t rsp;\n\tuint64_t rbp;\n\tuint64_t rsi;\n\tuint64_t rdi;\n\tuint64_t r8;\n\tuint64_t r9;\n\tuint64_t r10;\n\tuint64_t r11;\n\tuint64_t r12;\n\tuint64_t r13;\n\tuint64_t r14;\n\tuint64_t r15;\n\tuint64_t rip;\n};\n\nenum key_being_used_for {\n\tVERIFYING_MODULE_SIGNATURE = 0,\n\tVERIFYING_FIRMWARE_SIGNATURE = 1,\n\tVERIFYING_KEXEC_PE_SIGNATURE = 2,\n\tVERIFYING_KEY_SIGNATURE = 3,\n\tVERIFYING_KEY_SELF_SIGNATURE = 4,\n\tVERIFYING_UNSPECIFIED_SIGNATURE = 5,\n\tNR__KEY_BEING_USED_FOR = 6,\n};\n\nstruct efi_setup_data {\n\tu64 fw_vendor;\n\tu64 __unused;\n\tu64 tables;\n\tu64 smbios;\n\tu64 reserved[8];\n};\n\nstruct bzimage64_data {\n\tvoid *bootparams_buf;\n};\n\nstruct freelist_node {\n\tatomic_t refs;\n\tstruct freelist_node *next;\n};\n\nstruct freelist_head {\n\tstruct freelist_node *head;\n};\n\nstruct prev_kprobe {\n\tstruct kprobe *kp;\n\tlong unsigned int status;\n\tlong unsigned int old_flags;\n\tlong unsigned int saved_flags;\n};\n\nstruct kprobe_ctlblk {\n\tlong unsigned int kprobe_status;\n\tlong unsigned int kprobe_old_flags;\n\tlong unsigned int kprobe_saved_flags;\n\tstruct prev_kprobe prev_kprobe;\n};\n\nstruct kretprobe_instance;\n\ntypedef int (*kretprobe_handler_t)(struct kretprobe_instance *, struct pt_regs *);\n\nstruct kretprobe_holder;\n\nstruct kretprobe_instance {\n\tunion {\n\t\tstruct freelist_node freelist;\n\t\tstruct callback_head rcu;\n\t};\n\tstruct llist_node llist;\n\tstruct kretprobe_holder *rph;\n\tkprobe_opcode_t *ret_addr;\n\tvoid *fp;\n\tchar data[0];\n};\n\nstruct kretprobe;\n\nstruct kretprobe_holder {\n\tstruct kretprobe *rp;\n\trefcount_t ref;\n};\n\nstruct kretprobe {\n\tstruct kprobe kp;\n\tkretprobe_handler_t handler;\n\tkretprobe_handler_t entry_handler;\n\tint maxactive;\n\tint nmissed;\n\tsize_t data_size;\n\tstruct freelist_head freelist;\n\tstruct kretprobe_holder *rph;\n};\n\nstruct kretprobe_blackpoint {\n\tconst char *name;\n\tvoid *addr;\n};\n\nstruct kprobe_insn_cache {\n\tstruct mutex mutex;\n\tvoid * (*alloc)();\n\tvoid (*free)(void *);\n\tconst char *sym;\n\tstruct list_head pages;\n\tsize_t insn_size;\n\tint nr_garbage;\n};\n\nstruct __arch_relative_insn {\n\tu8 op;\n\ts32 raddr;\n} __attribute__((packed));\n\nstruct arch_optimized_insn {\n\tkprobe_opcode_t copied_insn[4];\n\tkprobe_opcode_t *insn;\n\tsize_t size;\n};\n\nstruct optimized_kprobe {\n\tstruct kprobe kp;\n\tstruct list_head list;\n\tstruct arch_optimized_insn optinsn;\n};\n\nenum {\n\tTRACE_FTRACE_BIT = 0,\n\tTRACE_FTRACE_NMI_BIT = 1,\n\tTRACE_FTRACE_IRQ_BIT = 2,\n\tTRACE_FTRACE_SIRQ_BIT = 3,\n\tTRACE_INTERNAL_BIT = 4,\n\tTRACE_INTERNAL_NMI_BIT = 5,\n\tTRACE_INTERNAL_IRQ_BIT = 6,\n\tTRACE_INTERNAL_SIRQ_BIT = 7,\n\tTRACE_BRANCH_BIT = 8,\n\tTRACE_IRQ_BIT = 9,\n\tTRACE_GRAPH_BIT = 10,\n\tTRACE_GRAPH_DEPTH_START_BIT = 11,\n\tTRACE_GRAPH_DEPTH_END_BIT = 12,\n\tTRACE_GRAPH_NOTRACE_BIT = 13,\n\tTRACE_TRANSITION_BIT = 14,\n\tTRACE_RECORD_RECURSION_BIT = 15,\n};\n\nenum {\n\tTRACE_CTX_NMI = 0,\n\tTRACE_CTX_IRQ = 1,\n\tTRACE_CTX_SOFTIRQ = 2,\n\tTRACE_CTX_NORMAL = 3,\n};\n\nenum regnames {\n\tGDB_AX = 0,\n\tGDB_BX = 1,\n\tGDB_CX = 2,\n\tGDB_DX = 3,\n\tGDB_SI = 4,\n\tGDB_DI = 5,\n\tGDB_BP = 6,\n\tGDB_SP = 7,\n\tGDB_R8 = 8,\n\tGDB_R9 = 9,\n\tGDB_R10 = 10,\n\tGDB_R11 = 11,\n\tGDB_R12 = 12,\n\tGDB_R13 = 13,\n\tGDB_R14 = 14,\n\tGDB_R15 = 15,\n\tGDB_PC = 16,\n\tGDB_PS = 17,\n\tGDB_CS = 18,\n\tGDB_SS = 19,\n\tGDB_DS = 20,\n\tGDB_ES = 21,\n\tGDB_FS = 22,\n\tGDB_GS = 23,\n};\n\nenum kgdb_bpstate {\n\tBP_UNDEFINED = 0,\n\tBP_REMOVED = 1,\n\tBP_SET = 2,\n\tBP_ACTIVE = 3,\n};\n\nstruct kgdb_bkpt {\n\tlong unsigned int bpt_addr;\n\tunsigned char saved_instr[1];\n\tenum kgdb_bptype type;\n\tenum kgdb_bpstate state;\n};\n\nstruct dbg_reg_def_t {\n\tchar *name;\n\tint size;\n\tint offset;\n};\n\nstruct hw_breakpoint {\n\tunsigned int enabled;\n\tlong unsigned int addr;\n\tint len;\n\tint type;\n\tstruct perf_event **pev;\n};\n\nstruct console {\n\tchar name[16];\n\tvoid (*write)(struct console *, const char *, unsigned int);\n\tint (*read)(struct console *, char *, unsigned int);\n\tstruct tty_driver * (*device)(struct console *, int *);\n\tvoid (*unblank)();\n\tint (*setup)(struct console *, char *);\n\tint (*exit)(struct console *);\n\tint (*match)(struct console *, char *, int, char *);\n\tshort int flags;\n\tshort int index;\n\tint cflag;\n\tvoid *data;\n\tstruct console *next;\n};\n\nstruct hpet_data {\n\tlong unsigned int hd_phys_address;\n\tvoid *hd_address;\n\tshort unsigned int hd_nirqs;\n\tunsigned int hd_state;\n\tunsigned int hd_irq[32];\n};\n\ntypedef irqreturn_t (*rtc_irq_handler)(int, void *);\n\nenum hpet_mode {\n\tHPET_MODE_UNUSED = 0,\n\tHPET_MODE_LEGACY = 1,\n\tHPET_MODE_CLOCKEVT = 2,\n\tHPET_MODE_DEVICE = 3,\n};\n\nstruct hpet_channel {\n\tstruct clock_event_device evt;\n\tunsigned int num;\n\tunsigned int cpu;\n\tunsigned int irq;\n\tunsigned int in_use;\n\tenum hpet_mode mode;\n\tunsigned int boot_cfg;\n\tchar name[10];\n\tlong: 48;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct hpet_base {\n\tunsigned int nr_channels;\n\tunsigned int nr_clockevents;\n\tunsigned int boot_cfg;\n\tstruct hpet_channel *channels;\n};\n\nunion hpet_lock {\n\tstruct {\n\t\tarch_spinlock_t lock;\n\t\tu32 value;\n\t};\n\tu64 lockval;\n};\n\nstruct amd_nb_bus_dev_range {\n\tu8 bus;\n\tu8 dev_base;\n\tu8 dev_limit;\n};\n\nstruct amd_northbridge_info {\n\tu16 num;\n\tu64 flags;\n\tstruct amd_northbridge *nb;\n};\n\nstruct swait_queue {\n\tstruct task_struct *task;\n\tstruct list_head task_list;\n};\n\nstruct kvm_steal_time {\n\t__u64 steal;\n\t__u32 version;\n\t__u32 flags;\n\t__u8 preempted;\n\t__u8 u8_pad[3];\n\t__u32 pad[11];\n};\n\nstruct kvm_vcpu_pv_apf_data {\n\t__u32 flags;\n\t__u32 token;\n\t__u8 pad[56];\n\t__u32 enabled;\n};\n\nstruct kvm_task_sleep_node {\n\tstruct hlist_node link;\n\tstruct swait_queue_head wq;\n\tu32 token;\n\tint cpu;\n};\n\nstruct kvm_task_sleep_head {\n\traw_spinlock_t lock;\n\tstruct hlist_head list;\n};\n\ntypedef struct ldttss_desc ldt_desc;\n\nstruct branch {\n\tunsigned char opcode;\n\tu32 delta;\n} __attribute__((packed));\n\nstruct patch_xxl {\n\tconst unsigned char irq_irq_disable[1];\n\tconst unsigned char irq_irq_enable[1];\n\tconst unsigned char irq_save_fl[2];\n\tconst unsigned char mmu_read_cr2[3];\n\tconst unsigned char mmu_read_cr3[3];\n\tconst unsigned char mmu_write_cr3[3];\n\tconst unsigned char irq_restore_fl[2];\n\tconst unsigned char cpu_wbinvd[2];\n\tconst unsigned char cpu_usergs_sysret64[6];\n\tconst unsigned char cpu_swapgs[3];\n\tconst unsigned char mov64[3];\n};\n\nstruct patch_lock {\n\tunsigned char queued_spin_unlock[3];\n\tunsigned char vcpu_is_preempted[2];\n};\n\ntypedef long unsigned int ulong;\n\nstruct scan_area {\n\tu64 addr;\n\tu64 size;\n};\n\nstruct uprobe_xol_ops;\n\nstruct arch_uprobe {\n\tunion {\n\t\tu8 insn[16];\n\t\tu8 ixol[16];\n\t};\n\tconst struct uprobe_xol_ops *ops;\n\tunion {\n\t\tstruct {\n\t\t\ts32 offs;\n\t\t\tu8 ilen;\n\t\t\tu8 opc1;\n\t\t} branch;\n\t\tstruct {\n\t\t\tu8 fixups;\n\t\t\tu8 ilen;\n\t\t} defparam;\n\t\tstruct {\n\t\t\tu8 reg_offset;\n\t\t\tu8 ilen;\n\t\t} push;\n\t};\n};\n\nstruct uprobe_xol_ops {\n\tbool (*emulate)(struct arch_uprobe *, struct pt_regs *);\n\tint (*pre_xol)(struct arch_uprobe *, struct pt_regs *);\n\tint (*post_xol)(struct arch_uprobe *, struct pt_regs *);\n\tvoid (*abort)(struct arch_uprobe *, struct pt_regs *);\n};\n\nenum rp_check {\n\tRP_CHECK_CALL = 0,\n\tRP_CHECK_CHAIN_CALL = 1,\n\tRP_CHECK_RET = 2,\n};\n\nstruct simplefb_platform_data {\n\tu32 width;\n\tu32 height;\n\tu32 stride;\n\tconst char *format;\n};\n\nenum {\n\tM_I17 = 0,\n\tM_I20 = 1,\n\tM_I20_SR = 2,\n\tM_I24 = 3,\n\tM_I24_8_1 = 4,\n\tM_I24_10_1 = 5,\n\tM_I27_11_1 = 6,\n\tM_MINI = 7,\n\tM_MINI_3_1 = 8,\n\tM_MINI_4_1 = 9,\n\tM_MB = 10,\n\tM_MB_2 = 11,\n\tM_MB_3 = 12,\n\tM_MB_5_1 = 13,\n\tM_MB_6_1 = 14,\n\tM_MB_7_1 = 15,\n\tM_MB_SR = 16,\n\tM_MBA = 17,\n\tM_MBA_3 = 18,\n\tM_MBP = 19,\n\tM_MBP_2 = 20,\n\tM_MBP_2_2 = 21,\n\tM_MBP_SR = 22,\n\tM_MBP_4 = 23,\n\tM_MBP_5_1 = 24,\n\tM_MBP_5_2 = 25,\n\tM_MBP_5_3 = 26,\n\tM_MBP_6_1 = 27,\n\tM_MBP_6_2 = 28,\n\tM_MBP_7_1 = 29,\n\tM_MBP_8_2 = 30,\n\tM_UNKNOWN = 31,\n};\n\nstruct efifb_dmi_info {\n\tchar *optname;\n\tlong unsigned int base;\n\tint stride;\n\tint width;\n\tint height;\n\tint flags;\n};\n\nenum {\n\tOVERRIDE_NONE = 0,\n\tOVERRIDE_BASE = 1,\n\tOVERRIDE_STRIDE = 2,\n\tOVERRIDE_HEIGHT = 4,\n\tOVERRIDE_WIDTH = 8,\n};\n\nenum perf_sample_regs_abi {\n\tPERF_SAMPLE_REGS_ABI_NONE = 0,\n\tPERF_SAMPLE_REGS_ABI_32 = 1,\n\tPERF_SAMPLE_REGS_ABI_64 = 2,\n};\n\nstruct va_format {\n\tconst char *fmt;\n\tva_list *va;\n};\n\nenum es_result {\n\tES_OK = 0,\n\tES_UNSUPPORTED = 1,\n\tES_VMM_ERROR = 2,\n\tES_DECODE_FAILED = 3,\n\tES_EXCEPTION = 4,\n\tES_RETRY = 5,\n};\n\nstruct es_fault_info {\n\tlong unsigned int vector;\n\tlong unsigned int error_code;\n\tlong unsigned int cr2;\n};\n\nstruct es_em_ctxt {\n\tstruct pt_regs *regs;\n\tstruct insn insn;\n\tstruct es_fault_info fi;\n};\n\nstruct sev_es_runtime_data {\n\tstruct ghcb ghcb_page;\n\tchar ist_stack[4096];\n\tchar fallback_stack[4096];\n\tstruct ghcb backup_ghcb;\n\tbool ghcb_active;\n\tbool backup_ghcb_active;\n\tlong unsigned int dr7;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct ghcb_state {\n\tstruct ghcb *ghcb;\n};\n\nstruct pci_hostbridge_probe {\n\tu32 bus;\n\tu32 slot;\n\tu32 vendor;\n\tu32 device;\n};\n\nstruct trace_print_flags {\n\tlong unsigned int mask;\n\tconst char *name;\n};\n\nenum tlb_flush_reason {\n\tTLB_FLUSH_ON_TASK_SWITCH = 0,\n\tTLB_REMOTE_SHOOTDOWN = 1,\n\tTLB_LOCAL_SHOOTDOWN = 2,\n\tTLB_LOCAL_MM_SHOOTDOWN = 3,\n\tTLB_REMOTE_SEND_IPI = 4,\n\tNR_TLB_FLUSH_REASONS = 5,\n};\n\nenum {\n\tREGION_INTERSECTS = 0,\n\tREGION_DISJOINT = 1,\n\tREGION_MIXED = 2,\n};\n\nstruct trace_event_raw_tlb_flush {\n\tstruct trace_entry ent;\n\tint reason;\n\tlong unsigned int pages;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_tlb_flush {};\n\ntypedef void (*btf_trace_tlb_flush)(void *, int, long unsigned int);\n\nstruct map_range {\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tunsigned int page_size_mask;\n};\n\nenum {\n\tMEMORY_HOTPLUG_MIN_BOOTMEM_TYPE = 12,\n\tSECTION_INFO = 12,\n\tMIX_SECTION_INFO = 13,\n\tNODE_INFO = 14,\n\tMEMORY_HOTPLUG_MAX_BOOTMEM_TYPE = 14,\n};\n\nstruct mhp_params {\n\tstruct vmem_altmap *altmap;\n\tpgprot_t pgprot;\n};\n\nstruct mem_section_usage {\n\tlong unsigned int subsection_map[1];\n\tlong unsigned int pageblock_flags[0];\n};\n\nstruct mem_section {\n\tlong unsigned int section_mem_map;\n\tstruct mem_section_usage *usage;\n};\n\nenum kcore_type {\n\tKCORE_TEXT = 0,\n\tKCORE_VMALLOC = 1,\n\tKCORE_RAM = 2,\n\tKCORE_VMEMMAP = 3,\n\tKCORE_USER = 4,\n\tKCORE_OTHER = 5,\n\tKCORE_REMAP = 6,\n};\n\nstruct kcore_list {\n\tstruct list_head list;\n\tlong unsigned int addr;\n\tlong unsigned int vaddr;\n\tsize_t size;\n\tint type;\n};\n\nstruct hstate {\n\tint next_nid_to_alloc;\n\tint next_nid_to_free;\n\tunsigned int order;\n\tlong unsigned int mask;\n\tlong unsigned int max_huge_pages;\n\tlong unsigned int nr_huge_pages;\n\tlong unsigned int free_huge_pages;\n\tlong unsigned int resv_huge_pages;\n\tlong unsigned int surplus_huge_pages;\n\tlong unsigned int nr_overcommit_huge_pages;\n\tstruct list_head hugepage_activelist;\n\tstruct list_head hugepage_freelists[1024];\n\tunsigned int nr_huge_pages_node[1024];\n\tunsigned int free_huge_pages_node[1024];\n\tunsigned int surplus_huge_pages_node[1024];\n\tstruct cftype cgroup_files_dfl[7];\n\tstruct cftype cgroup_files_legacy[9];\n\tchar name[32];\n};\n\nstruct trace_event_raw_x86_exceptions {\n\tstruct trace_entry ent;\n\tlong unsigned int address;\n\tlong unsigned int ip;\n\tlong unsigned int error_code;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_x86_exceptions {};\n\ntypedef void (*btf_trace_page_fault_user)(void *, long unsigned int, struct pt_regs *, long unsigned int);\n\ntypedef void (*btf_trace_page_fault_kernel)(void *, long unsigned int, struct pt_regs *, long unsigned int);\n\nenum {\n\tIORES_MAP_SYSTEM_RAM = 1,\n\tIORES_MAP_ENCRYPTED = 2,\n};\n\nstruct ioremap_desc {\n\tunsigned int flags;\n};\n\ntypedef bool (*ex_handler_t)(const struct exception_table_entry *, struct pt_regs *, int, long unsigned int, long unsigned int);\n\nstruct hugepage_subpool {\n\tspinlock_t lock;\n\tlong int count;\n\tlong int max_hpages;\n\tlong int used_hpages;\n\tstruct hstate *hstate;\n\tlong int min_hpages;\n\tlong int rsv_hpages;\n};\n\nstruct hugetlbfs_sb_info {\n\tlong int max_inodes;\n\tlong int free_inodes;\n\tspinlock_t stat_lock;\n\tstruct hstate *hstate;\n\tstruct hugepage_subpool *spool;\n\tkuid_t uid;\n\tkgid_t gid;\n\tumode_t mode;\n};\n\ntypedef bool (*smp_cond_func_t)(int, void *);\n\nstruct exception_stacks {\n\tchar DF_stack_guard[0];\n\tchar DF_stack[4096];\n\tchar NMI_stack_guard[0];\n\tchar NMI_stack[4096];\n\tchar DB_stack_guard[0];\n\tchar DB_stack[4096];\n\tchar MCE_stack_guard[0];\n\tchar MCE_stack[4096];\n\tchar VC_stack_guard[0];\n\tchar VC_stack[0];\n\tchar VC2_stack_guard[0];\n\tchar VC2_stack[0];\n\tchar IST_top_guard[0];\n};\n\nstruct cpa_data {\n\tlong unsigned int *vaddr;\n\tpgd_t *pgd;\n\tpgprot_t mask_set;\n\tpgprot_t mask_clr;\n\tlong unsigned int numpages;\n\tlong unsigned int curpage;\n\tlong unsigned int pfn;\n\tunsigned int flags;\n\tunsigned int force_split: 1;\n\tunsigned int force_static_prot: 1;\n\tunsigned int force_flush_all: 1;\n\tstruct page **pages;\n};\n\nenum cpa_warn {\n\tCPA_CONFLICT = 0,\n\tCPA_PROTECT = 1,\n\tCPA_DETECT = 2,\n};\n\ntypedef struct {\n\tu64 val;\n} pfn_t;\n\nstruct memtype {\n\tu64 start;\n\tu64 end;\n\tu64 subtree_max_end;\n\tenum page_cache_mode type;\n\tstruct rb_node rb;\n};\n\nenum {\n\tPAT_UC = 0,\n\tPAT_WC = 1,\n\tPAT_WT = 4,\n\tPAT_WP = 5,\n\tPAT_WB = 6,\n\tPAT_UC_MINUS = 7,\n};\n\nstruct pagerange_state {\n\tlong unsigned int cur_pfn;\n\tint ram;\n\tint not_ram;\n};\n\nstruct rb_augment_callbacks {\n\tvoid (*propagate)(struct rb_node *, struct rb_node *);\n\tvoid (*copy)(struct rb_node *, struct rb_node *);\n\tvoid (*rotate)(struct rb_node *, struct rb_node *);\n};\n\nenum {\n\tMEMTYPE_EXACT_MATCH = 0,\n\tMEMTYPE_END_MATCH = 1,\n};\n\nstruct ptdump_range {\n\tlong unsigned int start;\n\tlong unsigned int end;\n};\n\nstruct ptdump_state {\n\tvoid (*note_page)(struct ptdump_state *, long unsigned int, int, u64);\n\tvoid (*effective_prot)(struct ptdump_state *, int, u64);\n\tconst struct ptdump_range *range;\n};\n\nstruct addr_marker;\n\nstruct pg_state {\n\tstruct ptdump_state ptdump;\n\tint level;\n\tpgprotval_t current_prot;\n\tpgprotval_t effective_prot;\n\tpgprotval_t prot_levels[5];\n\tlong unsigned int start_address;\n\tconst struct addr_marker *marker;\n\tlong unsigned int lines;\n\tbool to_dmesg;\n\tbool check_wx;\n\tlong unsigned int wx_pages;\n\tstruct seq_file *seq;\n};\n\nstruct addr_marker {\n\tlong unsigned int start_address;\n\tconst char *name;\n\tlong unsigned int max_lines;\n};\n\nenum address_markers_idx {\n\tUSER_SPACE_NR = 0,\n\tKERNEL_SPACE_NR = 1,\n\tLDT_NR = 2,\n\tLOW_KERNEL_NR = 3,\n\tVMALLOC_START_NR = 4,\n\tVMEMMAP_START_NR = 5,\n\tCPU_ENTRY_AREA_NR = 6,\n\tESPFIX_START_NR = 7,\n\tEFI_END_NR = 8,\n\tHIGH_KERNEL_NR = 9,\n\tMODULES_VADDR_NR = 10,\n\tMODULES_END_NR = 11,\n\tFIXADDR_START_NR = 12,\n\tEND_OF_SPACE_NR = 13,\n};\n\ntypedef void (*rcu_callback_t)(struct callback_head *);\n\nstruct kmmio_probe;\n\ntypedef void (*kmmio_pre_handler_t)(struct kmmio_probe *, struct pt_regs *, long unsigned int);\n\ntypedef void (*kmmio_post_handler_t)(struct kmmio_probe *, long unsigned int, struct pt_regs *);\n\nstruct kmmio_probe {\n\tstruct list_head list;\n\tlong unsigned int addr;\n\tlong unsigned int len;\n\tkmmio_pre_handler_t pre_handler;\n\tkmmio_post_handler_t post_handler;\n\tvoid *private;\n};\n\nstruct kmmio_fault_page {\n\tstruct list_head list;\n\tstruct kmmio_fault_page *release_next;\n\tlong unsigned int addr;\n\tpteval_t old_presence;\n\tbool armed;\n\tint count;\n\tbool scheduled_for_release;\n};\n\nstruct kmmio_delayed_release {\n\tstruct callback_head rcu;\n\tstruct kmmio_fault_page *release_list;\n};\n\nstruct kmmio_context {\n\tstruct kmmio_fault_page *fpage;\n\tstruct kmmio_probe *probe;\n\tlong unsigned int saved_flags;\n\tlong unsigned int addr;\n\tint active;\n};\n\nenum reason_type {\n\tNOT_ME = 0,\n\tNOTHING = 1,\n\tREG_READ = 2,\n\tREG_WRITE = 3,\n\tIMM_WRITE = 4,\n\tOTHERS = 5,\n};\n\nstruct prefix_bits {\n\tunsigned int shorted: 1;\n\tunsigned int enlarged: 1;\n\tunsigned int rexr: 1;\n\tunsigned int rex: 1;\n};\n\nenum {\n\targ_AL = 0,\n\targ_CL = 1,\n\targ_DL = 2,\n\targ_BL = 3,\n\targ_AH = 4,\n\targ_CH = 5,\n\targ_DH = 6,\n\targ_BH = 7,\n\targ_AX = 0,\n\targ_CX = 1,\n\targ_DX = 2,\n\targ_BX = 3,\n\targ_SP = 4,\n\targ_BP = 5,\n\targ_SI = 6,\n\targ_DI = 7,\n\targ_R8 = 8,\n\targ_R9 = 9,\n\targ_R10 = 10,\n\targ_R11 = 11,\n\targ_R12 = 12,\n\targ_R13 = 13,\n\targ_R14 = 14,\n\targ_R15 = 15,\n};\n\nenum mm_io_opcode {\n\tMMIO_READ = 1,\n\tMMIO_WRITE = 2,\n\tMMIO_PROBE = 3,\n\tMMIO_UNPROBE = 4,\n\tMMIO_UNKNOWN_OP = 5,\n};\n\nstruct mmiotrace_rw {\n\tresource_size_t phys;\n\tlong unsigned int value;\n\tlong unsigned int pc;\n\tint map_id;\n\tunsigned char opcode;\n\tunsigned char width;\n};\n\nstruct mmiotrace_map {\n\tresource_size_t phys;\n\tlong unsigned int virt;\n\tlong unsigned int len;\n\tint map_id;\n\tunsigned char opcode;\n};\n\nstruct trap_reason {\n\tlong unsigned int addr;\n\tlong unsigned int ip;\n\tenum reason_type type;\n\tint active_traces;\n};\n\nstruct remap_trace {\n\tstruct list_head list;\n\tstruct kmmio_probe probe;\n\tresource_size_t phys;\n\tlong unsigned int id;\n};\n\nstruct numa_memblk {\n\tu64 start;\n\tu64 end;\n\tint nid;\n};\n\nstruct numa_meminfo {\n\tint nr_blks;\n\tstruct numa_memblk blk[2048];\n};\n\nstruct acpi_srat_cpu_affinity {\n\tstruct acpi_subtable_header header;\n\tu8 proximity_domain_lo;\n\tu8 apic_id;\n\tu32 flags;\n\tu8 local_sapic_eid;\n\tu8 proximity_domain_hi[3];\n\tu32 clock_domain;\n};\n\nstruct acpi_srat_x2apic_cpu_affinity {\n\tstruct acpi_subtable_header header;\n\tu16 reserved;\n\tu32 proximity_domain;\n\tu32 apic_id;\n\tu32 flags;\n\tu32 clock_domain;\n\tu32 reserved2;\n};\n\nstruct rnd_state {\n\t__u32 s1;\n\t__u32 s2;\n\t__u32 s3;\n\t__u32 s4;\n};\n\nstruct kaslr_memory_region {\n\tlong unsigned int *base;\n\tlong unsigned int size_tb;\n};\n\nenum pti_mode {\n\tPTI_AUTO = 0,\n\tPTI_FORCE_OFF = 1,\n\tPTI_FORCE_ON = 2,\n};\n\nenum pti_clone_level {\n\tPTI_CLONE_PMD = 0,\n\tPTI_CLONE_PTE = 1,\n};\n\nstruct sme_populate_pgd_data {\n\tvoid *pgtable_area;\n\tpgd_t *pgd;\n\tpmdval_t pmd_flags;\n\tpteval_t pte_flags;\n\tlong unsigned int paddr;\n\tlong unsigned int vaddr;\n\tlong unsigned int vaddr_end;\n};\n\ntypedef __u64 __le64;\n\ntypedef struct {\n\tu64 a;\n\tu64 b;\n} u128;\n\ntypedef struct {\n\t__be64 a;\n\t__be64 b;\n} be128;\n\ntypedef struct {\n\t__le64 b;\n\t__le64 a;\n} le128;\n\nstruct crypto_async_request;\n\ntypedef void (*crypto_completion_t)(struct crypto_async_request *, int);\n\nstruct crypto_async_request {\n\tstruct list_head list;\n\tcrypto_completion_t complete;\n\tvoid *data;\n\tstruct crypto_tfm *tfm;\n\tu32 flags;\n};\n\nstruct crypto_template;\n\nstruct crypto_spawn;\n\nstruct crypto_instance {\n\tstruct crypto_alg alg;\n\tstruct crypto_template *tmpl;\n\tunion {\n\t\tstruct hlist_node list;\n\t\tstruct crypto_spawn *spawns;\n\t};\n\tvoid *__ctx[0];\n};\n\nstruct crypto_spawn {\n\tstruct list_head list;\n\tstruct crypto_alg *alg;\n\tunion {\n\t\tstruct crypto_instance *inst;\n\t\tstruct crypto_spawn *next;\n\t};\n\tconst struct crypto_type *frontend;\n\tu32 mask;\n\tbool dead;\n\tbool registered;\n};\n\nstruct rtattr;\n\nstruct crypto_template {\n\tstruct list_head list;\n\tstruct hlist_head instances;\n\tstruct module *module;\n\tint (*create)(struct crypto_template *, struct rtattr **);\n\tchar name[128];\n};\n\nstruct scatter_walk {\n\tstruct scatterlist *sg;\n\tunsigned int offset;\n};\n\nstruct skcipher_request {\n\tunsigned int cryptlen;\n\tu8 *iv;\n\tstruct scatterlist *src;\n\tstruct scatterlist *dst;\n\tstruct crypto_async_request base;\n\tvoid *__ctx[0];\n};\n\nstruct crypto_skcipher {\n\tunsigned int reqsize;\n\tstruct crypto_tfm base;\n};\n\nstruct skcipher_walk {\n\tunion {\n\t\tstruct {\n\t\t\tstruct page *page;\n\t\t\tlong unsigned int offset;\n\t\t} phys;\n\t\tstruct {\n\t\t\tu8 *page;\n\t\t\tvoid *addr;\n\t\t} virt;\n\t} src;\n\tunion {\n\t\tstruct {\n\t\t\tstruct page *page;\n\t\t\tlong unsigned int offset;\n\t\t} phys;\n\t\tstruct {\n\t\t\tu8 *page;\n\t\t\tvoid *addr;\n\t\t} virt;\n\t} dst;\n\tstruct scatter_walk in;\n\tunsigned int nbytes;\n\tstruct scatter_walk out;\n\tunsigned int total;\n\tstruct list_head buffers;\n\tu8 *page;\n\tu8 *buffer;\n\tu8 *oiv;\n\tvoid *iv;\n\tunsigned int ivsize;\n\tint flags;\n\tunsigned int blocksize;\n\tunsigned int stride;\n\tunsigned int alignmask;\n};\n\ntypedef void (*common_glue_func_t)(const void *, u8 *, const u8 *);\n\ntypedef void (*common_glue_cbc_func_t)(const void *, u8 *, const u8 *);\n\ntypedef void (*common_glue_ctr_func_t)(const void *, u8 *, const u8 *, le128 *);\n\ntypedef void (*common_glue_xts_func_t)(const void *, u8 *, const u8 *, le128 *);\n\nstruct common_glue_func_entry {\n\tunsigned int num_blocks;\n\tunion {\n\t\tcommon_glue_func_t ecb;\n\t\tcommon_glue_cbc_func_t cbc;\n\t\tcommon_glue_ctr_func_t ctr;\n\t\tcommon_glue_xts_func_t xts;\n\t} fn_u;\n};\n\nstruct common_glue_ctx {\n\tunsigned int num_funcs;\n\tint fpu_blocks_limit;\n\tstruct common_glue_func_entry funcs[0];\n};\n\nstruct crypto_aes_ctx {\n\tu32 key_enc[60];\n\tu32 key_dec[60];\n\tu32 key_length;\n};\n\nstruct skcipher_alg {\n\tint (*setkey)(struct crypto_skcipher *, const u8 *, unsigned int);\n\tint (*encrypt)(struct skcipher_request *);\n\tint (*decrypt)(struct skcipher_request *);\n\tint (*init)(struct crypto_skcipher *);\n\tvoid (*exit)(struct crypto_skcipher *);\n\tunsigned int min_keysize;\n\tunsigned int max_keysize;\n\tunsigned int ivsize;\n\tunsigned int chunksize;\n\tunsigned int walksize;\n\tstruct crypto_alg base;\n};\n\nstruct aead_request {\n\tstruct crypto_async_request base;\n\tunsigned int assoclen;\n\tunsigned int cryptlen;\n\tu8 *iv;\n\tstruct scatterlist *src;\n\tstruct scatterlist *dst;\n\tvoid *__ctx[0];\n};\n\nstruct crypto_aead;\n\nstruct aead_alg {\n\tint (*setkey)(struct crypto_aead *, const u8 *, unsigned int);\n\tint (*setauthsize)(struct crypto_aead *, unsigned int);\n\tint (*encrypt)(struct aead_request *);\n\tint (*decrypt)(struct aead_request *);\n\tint (*init)(struct crypto_aead *);\n\tvoid (*exit)(struct crypto_aead *);\n\tunsigned int ivsize;\n\tunsigned int maxauthsize;\n\tunsigned int chunksize;\n\tstruct crypto_alg base;\n};\n\nstruct crypto_aead {\n\tunsigned int authsize;\n\tunsigned int reqsize;\n\tstruct crypto_tfm base;\n};\n\nstruct aesni_rfc4106_gcm_ctx {\n\tu8 hash_subkey[16];\n\tstruct crypto_aes_ctx aes_key_expanded;\n\tu8 nonce[4];\n\tlong: 64;\n};\n\nstruct generic_gcmaes_ctx {\n\tu8 hash_subkey[16];\n\tstruct crypto_aes_ctx aes_key_expanded;\n\tlong: 32;\n\tlong: 64;\n};\n\nstruct aesni_xts_ctx {\n\tu8 raw_tweak_ctx[484];\n\tlong: 32;\n\tlong: 64;\n\tu8 raw_crypt_ctx[484];\n\tlong: 32;\n\tlong: 64;\n};\n\nstruct gcm_context_data {\n\tu8 aad_hash[16];\n\tu64 aad_length;\n\tu64 in_length;\n\tu8 partial_block_enc_key[16];\n\tu8 orig_IV[16];\n\tu8 current_counter[16];\n\tu64 partial_block_len;\n\tu64 unused;\n\tu8 hash_keys[256];\n};\n\nstruct aesni_gcm_tfm_s {\n\tvoid (*init)(void *, struct gcm_context_data *, u8 *, u8 *, const u8 *, long unsigned int);\n\tvoid (*enc_update)(void *, struct gcm_context_data *, u8 *, const u8 *, long unsigned int);\n\tvoid (*dec_update)(void *, struct gcm_context_data *, u8 *, const u8 *, long unsigned int);\n\tvoid (*finalize)(void *, struct gcm_context_data *, u8 *, long unsigned int);\n};\n\nstruct simd_skcipher_alg;\n\nstruct simd_aead_alg;\n\nstruct sigcontext_32 {\n\t__u16 gs;\n\t__u16 __gsh;\n\t__u16 fs;\n\t__u16 __fsh;\n\t__u16 es;\n\t__u16 __esh;\n\t__u16 ds;\n\t__u16 __dsh;\n\t__u32 di;\n\t__u32 si;\n\t__u32 bp;\n\t__u32 sp;\n\t__u32 bx;\n\t__u32 dx;\n\t__u32 cx;\n\t__u32 ax;\n\t__u32 trapno;\n\t__u32 err;\n\t__u32 ip;\n\t__u16 cs;\n\t__u16 __csh;\n\t__u32 flags;\n\t__u32 sp_at_signal;\n\t__u16 ss;\n\t__u16 __ssh;\n\t__u32 fpstate;\n\t__u32 oldmask;\n\t__u32 cr2;\n};\n\ntypedef u32 compat_size_t;\n\nstruct compat_sigaltstack {\n\tcompat_uptr_t ss_sp;\n\tint ss_flags;\n\tcompat_size_t ss_size;\n};\n\ntypedef struct compat_sigaltstack compat_stack_t;\n\nstruct ucontext_ia32 {\n\tunsigned int uc_flags;\n\tunsigned int uc_link;\n\tcompat_stack_t uc_stack;\n\tstruct sigcontext_32 uc_mcontext;\n\tcompat_sigset_t uc_sigmask;\n};\n\nstruct sigframe_ia32 {\n\tu32 pretcode;\n\tint sig;\n\tstruct sigcontext_32 sc;\n\tstruct _fpstate_32 fpstate_unused;\n\tunsigned int extramask[1];\n\tchar retcode[8];\n};\n\nstruct rt_sigframe_ia32 {\n\tu32 pretcode;\n\tint sig;\n\tu32 pinfo;\n\tu32 puc;\n\tcompat_siginfo_t info;\n\tstruct ucontext_ia32 uc;\n\tchar retcode[8];\n};\n\ntypedef struct {\n\tefi_guid_t guid;\n\tu64 table;\n} efi_config_table_64_t;\n\nstruct efi_memory_map_data {\n\tphys_addr_t phys_map;\n\tlong unsigned int size;\n\tlong unsigned int desc_version;\n\tlong unsigned int desc_size;\n\tlong unsigned int flags;\n};\n\nstruct efi_mem_range {\n\tstruct range range;\n\tu64 attribute;\n};\n\nenum efi_rts_ids {\n\tEFI_NONE = 0,\n\tEFI_GET_TIME = 1,\n\tEFI_SET_TIME = 2,\n\tEFI_GET_WAKEUP_TIME = 3,\n\tEFI_SET_WAKEUP_TIME = 4,\n\tEFI_GET_VARIABLE = 5,\n\tEFI_GET_NEXT_VARIABLE = 6,\n\tEFI_SET_VARIABLE = 7,\n\tEFI_QUERY_VARIABLE_INFO = 8,\n\tEFI_GET_NEXT_HIGH_MONO_COUNT = 9,\n\tEFI_RESET_SYSTEM = 10,\n\tEFI_UPDATE_CAPSULE = 11,\n\tEFI_QUERY_CAPSULE_CAPS = 12,\n};\n\nstruct efi_runtime_work {\n\tvoid *arg1;\n\tvoid *arg2;\n\tvoid *arg3;\n\tvoid *arg4;\n\tvoid *arg5;\n\tefi_status_t status;\n\tstruct work_struct work;\n\tenum efi_rts_ids efi_rts_id;\n\tstruct completion efi_rts_comp;\n};\n\nstruct efi_scratch {\n\tu64 phys_stack;\n\tstruct mm_struct *prev_mm;\n};\n\ntypedef struct {\n\tefi_guid_t guid;\n\tu32 table;\n} efi_config_table_32_t;\n\ntypedef union {\n\tstruct {\n\t\tefi_guid_t guid;\n\t\tvoid *table;\n\t};\n\tefi_config_table_32_t mixed_mode;\n} efi_config_table_t;\n\ntypedef struct {\n\tefi_guid_t guid;\n\tlong unsigned int *ptr;\n\tconst char name[16];\n} efi_config_table_type_t;\n\ntypedef struct {\n\tefi_table_hdr_t hdr;\n\tu64 fw_vendor;\n\tu32 fw_revision;\n\tu32 __pad1;\n\tu64 con_in_handle;\n\tu64 con_in;\n\tu64 con_out_handle;\n\tu64 con_out;\n\tu64 stderr_handle;\n\tu64 stderr;\n\tu64 runtime;\n\tu64 boottime;\n\tu32 nr_tables;\n\tu32 __pad2;\n\tu64 tables;\n} efi_system_table_64_t;\n\ntypedef struct {\n\tu32 version;\n\tu32 length;\n\tu64 memory_protection_attribute;\n} efi_properties_table_t;\n\ntypedef int (*efi_memattr_perm_setter)(struct mm_struct *, efi_memory_desc_t *);\n\ntypedef u16 ucs2_char_t;\n\nstruct pm_qos_request {\n\tstruct plist_node node;\n\tstruct pm_qos_constraints *qos;\n};\n\nstruct semaphore {\n\traw_spinlock_t lock;\n\tunsigned int count;\n\tstruct list_head wait_list;\n};\n\nenum uv_bios_cmd {\n\tUV_BIOS_COMMON = 0,\n\tUV_BIOS_GET_SN_INFO = 1,\n\tUV_BIOS_FREQ_BASE = 2,\n\tUV_BIOS_WATCHLIST_ALLOC = 3,\n\tUV_BIOS_WATCHLIST_FREE = 4,\n\tUV_BIOS_MEMPROTECT = 5,\n\tUV_BIOS_GET_PARTITION_ADDR = 6,\n\tUV_BIOS_SET_LEGACY_VGA_TARGET = 7,\n};\n\nunion partition_info_u {\n\tu64 val;\n\tstruct {\n\t\tu64 hub_version: 8;\n\t\tu64 partition_id: 16;\n\t\tu64 coherence_id: 16;\n\t\tu64 region_size: 24;\n\t};\n};\n\nenum uv_memprotect {\n\tUV_MEMPROT_RESTRICT_ACCESS = 0,\n\tUV_MEMPROT_ALLOW_AMO = 1,\n\tUV_MEMPROT_ALLOW_RW = 2,\n};\n\nstruct uv_IO_APIC_route_entry {\n\t__u64 vector: 8;\n\t__u64 delivery_mode: 3;\n\t__u64 dest_mode: 1;\n\t__u64 delivery_status: 1;\n\t__u64 polarity: 1;\n\t__u64 __reserved_1: 1;\n\t__u64 trigger: 1;\n\t__u64 mask: 1;\n\t__u64 __reserved_2: 15;\n\t__u64 dest: 32;\n};\n\nenum {\n\tUV_AFFINITY_ALL = 0,\n\tUV_AFFINITY_NODE = 1,\n\tUV_AFFINITY_CPU = 2,\n};\n\nstruct uv_irq_2_mmr_pnode {\n\tlong unsigned int offset;\n\tint pnode;\n};\n\nstruct uv_rtc_timer_head {\n\tspinlock_t lock;\n\tint next_cpu;\n\tint ncpus;\n\tstruct {\n\t\tint lcpu;\n\t\tu64 expires;\n\t} cpu[0];\n};\n\nstruct uv_hub_nmi_s {\n\traw_spinlock_t nmi_lock;\n\tatomic_t in_nmi;\n\tatomic_t cpu_owner;\n\tatomic_t read_mmr_count;\n\tatomic_t nmi_count;\n\tlong unsigned int nmi_value;\n\tbool hub_present;\n\tbool pch_owner;\n};\n\nstruct uv_cpu_nmi_s {\n\tstruct uv_hub_nmi_s *hub;\n\tint state;\n\tint pinging;\n\tint queries;\n\tint pings;\n};\n\nstruct nmi_action {\n\tchar *action;\n\tchar *desc;\n};\n\ntypedef char action_t[16];\n\nstruct init_nmi {\n\tunsigned int offset;\n\tunsigned int mask;\n\tunsigned int data;\n};\n\nenum {\n\tBPF_REG_0 = 0,\n\tBPF_REG_1 = 1,\n\tBPF_REG_2 = 2,\n\tBPF_REG_3 = 3,\n\tBPF_REG_4 = 4,\n\tBPF_REG_5 = 5,\n\tBPF_REG_6 = 6,\n\tBPF_REG_7 = 7,\n\tBPF_REG_8 = 8,\n\tBPF_REG_9 = 9,\n\tBPF_REG_10 = 10,\n\t__MAX_BPF_REG = 11,\n};\n\nstruct bpf_tramp_progs {\n\tstruct bpf_prog *progs[40];\n\tint nr_progs;\n};\n\nenum bpf_jit_poke_reason {\n\tBPF_POKE_REASON_TAIL_CALL = 0,\n};\n\nstruct bpf_array_aux {\n\tenum bpf_prog_type type;\n\tbool jited;\n\tstruct list_head poke_progs;\n\tstruct bpf_map *map;\n\tstruct mutex poke_mutex;\n\tstruct work_struct work;\n};\n\nstruct bpf_array {\n\tstruct bpf_map map;\n\tu32 elem_size;\n\tu32 index_mask;\n\tstruct bpf_array_aux *aux;\n\tunion {\n\t\tchar value[0];\n\t\tvoid *ptrs[0];\n\t\tvoid *pptrs[0];\n\t};\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum bpf_text_poke_type {\n\tBPF_MOD_CALL = 0,\n\tBPF_MOD_JUMP = 1,\n};\n\nstruct bpf_binary_header {\n\tu32 pages;\n\tint: 32;\n\tu8 image[0];\n};\n\ntypedef void (*bpf_jit_fill_hole_t)(void *, unsigned int);\n\nstruct jit_context {\n\tint cleanup_addr;\n};\n\nstruct x64_jit_data {\n\tstruct bpf_binary_header *header;\n\tint *addrs;\n\tu8 *image;\n\tint proglen;\n\tstruct jit_context ctx;\n};\n\nenum tk_offsets {\n\tTK_OFFS_REAL = 0,\n\tTK_OFFS_BOOT = 1,\n\tTK_OFFS_TAI = 2,\n\tTK_OFFS_MAX = 3,\n};\n\ntypedef long unsigned int vm_flags_t;\n\nstruct clone_args {\n\t__u64 flags;\n\t__u64 pidfd;\n\t__u64 child_tid;\n\t__u64 parent_tid;\n\t__u64 exit_signal;\n\t__u64 stack;\n\t__u64 stack_size;\n\t__u64 tls;\n\t__u64 set_tid;\n\t__u64 set_tid_size;\n\t__u64 cgroup;\n};\n\nenum hrtimer_mode {\n\tHRTIMER_MODE_ABS = 0,\n\tHRTIMER_MODE_REL = 1,\n\tHRTIMER_MODE_PINNED = 2,\n\tHRTIMER_MODE_SOFT = 4,\n\tHRTIMER_MODE_HARD = 8,\n\tHRTIMER_MODE_ABS_PINNED = 2,\n\tHRTIMER_MODE_REL_PINNED = 3,\n\tHRTIMER_MODE_ABS_SOFT = 4,\n\tHRTIMER_MODE_REL_SOFT = 5,\n\tHRTIMER_MODE_ABS_PINNED_SOFT = 6,\n\tHRTIMER_MODE_REL_PINNED_SOFT = 7,\n\tHRTIMER_MODE_ABS_HARD = 8,\n\tHRTIMER_MODE_REL_HARD = 9,\n\tHRTIMER_MODE_ABS_PINNED_HARD = 10,\n\tHRTIMER_MODE_REL_PINNED_HARD = 11,\n};\n\nstruct fdtable {\n\tunsigned int max_fds;\n\tstruct file **fd;\n\tlong unsigned int *close_on_exec;\n\tlong unsigned int *open_fds;\n\tlong unsigned int *full_fds_bits;\n\tstruct callback_head rcu;\n};\n\nstruct files_struct {\n\tatomic_t count;\n\tbool resize_in_progress;\n\twait_queue_head_t resize_wait;\n\tstruct fdtable *fdt;\n\tstruct fdtable fdtab;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tspinlock_t file_lock;\n\tunsigned int next_fd;\n\tlong unsigned int close_on_exec_init[1];\n\tlong unsigned int open_fds_init[1];\n\tlong unsigned int full_fds_bits_init[1];\n\tstruct file *fd_array[64];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct io_identity {\n\tstruct files_struct *files;\n\tstruct mm_struct *mm;\n\tstruct cgroup_subsys_state *blkcg_css;\n\tconst struct cred *creds;\n\tstruct nsproxy *nsproxy;\n\tstruct fs_struct *fs;\n\tlong unsigned int fsize;\n\tkuid_t loginuid;\n\tunsigned int sessionid;\n\trefcount_t count;\n};\n\nstruct io_uring_task {\n\tstruct xarray xa;\n\tstruct wait_queue_head wait;\n\tstruct file *last;\n\tstruct percpu_counter inflight;\n\tstruct io_identity __identity;\n\tstruct io_identity *identity;\n\tatomic_t in_idle;\n\tbool sqpoll;\n};\n\nstruct robust_list {\n\tstruct robust_list *next;\n};\n\nstruct robust_list_head {\n\tstruct robust_list list;\n\tlong int futex_offset;\n\tstruct robust_list *list_op_pending;\n};\n\nstruct multiprocess_signals {\n\tsigset_t signal;\n\tstruct hlist_node node;\n};\n\ntypedef int (*proc_visitor)(struct task_struct *, void *);\n\nenum {\n\tIOPRIO_CLASS_NONE = 0,\n\tIOPRIO_CLASS_RT = 1,\n\tIOPRIO_CLASS_BE = 2,\n\tIOPRIO_CLASS_IDLE = 3,\n};\n\nenum {\n\tFUTEX_STATE_OK = 0,\n\tFUTEX_STATE_EXITING = 1,\n\tFUTEX_STATE_DEAD = 2,\n};\n\nenum proc_hidepid {\n\tHIDEPID_OFF = 0,\n\tHIDEPID_NO_ACCESS = 1,\n\tHIDEPID_INVISIBLE = 2,\n\tHIDEPID_NOT_PTRACEABLE = 4,\n};\n\nenum proc_pidonly {\n\tPROC_PIDONLY_OFF = 0,\n\tPROC_PIDONLY_ON = 1,\n};\n\nstruct proc_fs_info {\n\tstruct pid_namespace *pid_ns;\n\tstruct dentry *proc_self;\n\tstruct dentry *proc_thread_self;\n\tkgid_t pid_gid;\n\tenum proc_hidepid hide_pid;\n\tenum proc_pidonly pidonly;\n};\n\nstruct trace_event_raw_task_newtask {\n\tstruct trace_entry ent;\n\tpid_t pid;\n\tchar comm[16];\n\tlong unsigned int clone_flags;\n\tshort int oom_score_adj;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_task_rename {\n\tstruct trace_entry ent;\n\tpid_t pid;\n\tchar oldcomm[16];\n\tchar newcomm[16];\n\tshort int oom_score_adj;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_task_newtask {};\n\nstruct trace_event_data_offsets_task_rename {};\n\ntypedef void (*btf_trace_task_newtask)(void *, struct task_struct *, long unsigned int);\n\ntypedef void (*btf_trace_task_rename)(void *, struct task_struct *, const char *);\n\nstruct taint_flag {\n\tchar c_true;\n\tchar c_false;\n\tbool module;\n};\n\nenum ftrace_dump_mode {\n\tDUMP_NONE = 0,\n\tDUMP_ALL = 1,\n\tDUMP_ORIG = 2,\n};\n\nenum kmsg_dump_reason {\n\tKMSG_DUMP_UNDEF = 0,\n\tKMSG_DUMP_PANIC = 1,\n\tKMSG_DUMP_OOPS = 2,\n\tKMSG_DUMP_EMERG = 3,\n\tKMSG_DUMP_SHUTDOWN = 4,\n\tKMSG_DUMP_MAX = 5,\n};\n\nenum con_flush_mode {\n\tCONSOLE_FLUSH_PENDING = 0,\n\tCONSOLE_REPLAY_ALL = 1,\n};\n\nstruct warn_args {\n\tconst char *fmt;\n\tva_list args;\n};\n\nstruct smp_hotplug_thread {\n\tstruct task_struct **store;\n\tstruct list_head list;\n\tint (*thread_should_run)(unsigned int);\n\tvoid (*thread_fn)(unsigned int);\n\tvoid (*create)(unsigned int);\n\tvoid (*setup)(unsigned int);\n\tvoid (*cleanup)(unsigned int, bool);\n\tvoid (*park)(unsigned int);\n\tvoid (*unpark)(unsigned int);\n\tbool selfparking;\n\tconst char *thread_comm;\n};\n\nstruct trace_event_raw_cpuhp_enter {\n\tstruct trace_entry ent;\n\tunsigned int cpu;\n\tint target;\n\tint idx;\n\tvoid *fun;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_cpuhp_multi_enter {\n\tstruct trace_entry ent;\n\tunsigned int cpu;\n\tint target;\n\tint idx;\n\tvoid *fun;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_cpuhp_exit {\n\tstruct trace_entry ent;\n\tunsigned int cpu;\n\tint state;\n\tint idx;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_cpuhp_enter {};\n\nstruct trace_event_data_offsets_cpuhp_multi_enter {};\n\nstruct trace_event_data_offsets_cpuhp_exit {};\n\ntypedef void (*btf_trace_cpuhp_enter)(void *, unsigned int, int, int, int (*)(unsigned int));\n\ntypedef void (*btf_trace_cpuhp_multi_enter)(void *, unsigned int, int, int, int (*)(unsigned int, struct hlist_node *), struct hlist_node *);\n\ntypedef void (*btf_trace_cpuhp_exit)(void *, unsigned int, int, int, int);\n\nstruct cpuhp_cpu_state {\n\tenum cpuhp_state state;\n\tenum cpuhp_state target;\n\tenum cpuhp_state fail;\n\tstruct task_struct *thread;\n\tbool should_run;\n\tbool rollback;\n\tbool single;\n\tbool bringup;\n\tstruct hlist_node *node;\n\tstruct hlist_node *last;\n\tenum cpuhp_state cb_state;\n\tint result;\n\tstruct completion done_up;\n\tstruct completion done_down;\n};\n\nstruct cpuhp_step {\n\tconst char *name;\n\tunion {\n\t\tint (*single)(unsigned int);\n\t\tint (*multi)(unsigned int, struct hlist_node *);\n\t} startup;\n\tunion {\n\t\tint (*single)(unsigned int);\n\t\tint (*multi)(unsigned int, struct hlist_node *);\n\t} teardown;\n\tstruct hlist_head list;\n\tbool cant_stop;\n\tbool multi_instance;\n};\n\nenum cpu_mitigations {\n\tCPU_MITIGATIONS_OFF = 0,\n\tCPU_MITIGATIONS_AUTO = 1,\n\tCPU_MITIGATIONS_AUTO_NOSMT = 2,\n};\n\nstruct __kernel_old_timeval {\n\t__kernel_long_t tv_sec;\n\t__kernel_long_t tv_usec;\n};\n\nstruct old_timeval32 {\n\told_time32_t tv_sec;\n\ts32 tv_usec;\n};\n\nstruct rusage {\n\tstruct __kernel_old_timeval ru_utime;\n\tstruct __kernel_old_timeval ru_stime;\n\t__kernel_long_t ru_maxrss;\n\t__kernel_long_t ru_ixrss;\n\t__kernel_long_t ru_idrss;\n\t__kernel_long_t ru_isrss;\n\t__kernel_long_t ru_minflt;\n\t__kernel_long_t ru_majflt;\n\t__kernel_long_t ru_nswap;\n\t__kernel_long_t ru_inblock;\n\t__kernel_long_t ru_oublock;\n\t__kernel_long_t ru_msgsnd;\n\t__kernel_long_t ru_msgrcv;\n\t__kernel_long_t ru_nsignals;\n\t__kernel_long_t ru_nvcsw;\n\t__kernel_long_t ru_nivcsw;\n};\n\ntypedef struct {} mm_segment_t;\n\nstruct compat_rusage {\n\tstruct old_timeval32 ru_utime;\n\tstruct old_timeval32 ru_stime;\n\tcompat_long_t ru_maxrss;\n\tcompat_long_t ru_ixrss;\n\tcompat_long_t ru_idrss;\n\tcompat_long_t ru_isrss;\n\tcompat_long_t ru_minflt;\n\tcompat_long_t ru_majflt;\n\tcompat_long_t ru_nswap;\n\tcompat_long_t ru_inblock;\n\tcompat_long_t ru_oublock;\n\tcompat_long_t ru_msgsnd;\n\tcompat_long_t ru_msgrcv;\n\tcompat_long_t ru_nsignals;\n\tcompat_long_t ru_nvcsw;\n\tcompat_long_t ru_nivcsw;\n};\n\nstruct waitid_info {\n\tpid_t pid;\n\tuid_t uid;\n\tint status;\n\tint cause;\n};\n\nstruct wait_opts {\n\tenum pid_type wo_type;\n\tint wo_flags;\n\tstruct pid *wo_pid;\n\tstruct waitid_info *wo_info;\n\tint wo_stat;\n\tstruct rusage *wo_rusage;\n\twait_queue_entry_t child_wait;\n\tint notask_error;\n};\n\nstruct softirq_action {\n\tvoid (*action)(struct softirq_action *);\n};\n\nstruct tasklet_struct {\n\tstruct tasklet_struct *next;\n\tlong unsigned int state;\n\tatomic_t count;\n\tbool use_callback;\n\tunion {\n\t\tvoid (*func)(long unsigned int);\n\t\tvoid (*callback)(struct tasklet_struct *);\n\t};\n\tlong unsigned int data;\n};\n\nenum {\n\tTASKLET_STATE_SCHED = 0,\n\tTASKLET_STATE_RUN = 1,\n};\n\nstruct kernel_stat {\n\tlong unsigned int irqs_sum;\n\tunsigned int softirqs[10];\n};\n\nstruct trace_event_raw_irq_handler_entry {\n\tstruct trace_entry ent;\n\tint irq;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_irq_handler_exit {\n\tstruct trace_entry ent;\n\tint irq;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_softirq {\n\tstruct trace_entry ent;\n\tunsigned int vec;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_irq_handler_entry {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_irq_handler_exit {};\n\nstruct trace_event_data_offsets_softirq {};\n\ntypedef void (*btf_trace_irq_handler_entry)(void *, int, struct irqaction *);\n\ntypedef void (*btf_trace_irq_handler_exit)(void *, int, struct irqaction *, int);\n\ntypedef void (*btf_trace_softirq_entry)(void *, unsigned int);\n\ntypedef void (*btf_trace_softirq_exit)(void *, unsigned int);\n\ntypedef void (*btf_trace_softirq_raise)(void *, unsigned int);\n\nstruct tasklet_head {\n\tstruct tasklet_struct *head;\n\tstruct tasklet_struct **tail;\n};\n\ntypedef void (*dr_release_t)(struct device *, void *);\n\ntypedef int (*dr_match_t)(struct device *, void *, void *);\n\nstruct resource_entry {\n\tstruct list_head node;\n\tstruct resource *res;\n\tresource_size_t offset;\n\tstruct resource __res;\n};\n\nstruct resource_constraint {\n\tresource_size_t min;\n\tresource_size_t max;\n\tresource_size_t align;\n\tresource_size_t (*alignf)(void *, const struct resource *, resource_size_t, resource_size_t);\n\tvoid *alignf_data;\n};\n\nenum {\n\tMAX_IORES_LEVEL = 5,\n};\n\nstruct region_devres {\n\tstruct resource *parent;\n\tresource_size_t start;\n\tresource_size_t n;\n};\n\ntypedef __kernel_clock_t clock_t;\n\nstruct dentry_stat_t {\n\tlong int nr_dentry;\n\tlong int nr_unused;\n\tlong int age_limit;\n\tlong int want_pages;\n\tlong int nr_negative;\n\tlong int dummy;\n};\n\nstruct files_stat_struct {\n\tlong unsigned int nr_files;\n\tlong unsigned int nr_free_files;\n\tlong unsigned int max_files;\n};\n\nstruct inodes_stat_t {\n\tlong int nr_inodes;\n\tlong int nr_unused;\n\tlong int dummy[5];\n};\n\nenum sched_tunable_scaling {\n\tSCHED_TUNABLESCALING_NONE = 0,\n\tSCHED_TUNABLESCALING_LOG = 1,\n\tSCHED_TUNABLESCALING_LINEAR = 2,\n\tSCHED_TUNABLESCALING_END = 3,\n};\n\nenum sysctl_writes_mode {\n\tSYSCTL_WRITES_LEGACY = 4294967295,\n\tSYSCTL_WRITES_WARN = 0,\n\tSYSCTL_WRITES_STRICT = 1,\n};\n\nstruct do_proc_dointvec_minmax_conv_param {\n\tint *min;\n\tint *max;\n};\n\nstruct do_proc_douintvec_minmax_conv_param {\n\tunsigned int *min;\n\tunsigned int *max;\n};\n\nstruct __user_cap_header_struct {\n\t__u32 version;\n\tint pid;\n};\n\ntypedef struct __user_cap_header_struct *cap_user_header_t;\n\nstruct __user_cap_data_struct {\n\t__u32 effective;\n\t__u32 permitted;\n\t__u32 inheritable;\n};\n\ntypedef struct __user_cap_data_struct *cap_user_data_t;\n\nstruct sigqueue {\n\tstruct list_head list;\n\tint flags;\n\tkernel_siginfo_t info;\n\tstruct user_struct *user;\n};\n\nstruct wait_bit_key {\n\tvoid *flags;\n\tint bit_nr;\n\tlong unsigned int timeout;\n};\n\ntypedef int wait_bit_action_f(struct wait_bit_key *, int);\n\nstruct ptrace_peeksiginfo_args {\n\t__u64 off;\n\t__u32 flags;\n\t__s32 nr;\n};\n\nstruct ptrace_syscall_info {\n\t__u8 op;\n\t__u8 pad[3];\n\t__u32 arch;\n\t__u64 instruction_pointer;\n\t__u64 stack_pointer;\n\tunion {\n\t\tstruct {\n\t\t\t__u64 nr;\n\t\t\t__u64 args[6];\n\t\t} entry;\n\t\tstruct {\n\t\t\t__s64 rval;\n\t\t\t__u8 is_error;\n\t\t} exit;\n\t\tstruct {\n\t\t\t__u64 nr;\n\t\t\t__u64 args[6];\n\t\t\t__u32 ret_data;\n\t\t} seccomp;\n\t};\n};\n\nstruct compat_iovec {\n\tcompat_uptr_t iov_base;\n\tcompat_size_t iov_len;\n};\n\ntypedef long unsigned int old_sigset_t;\n\nenum siginfo_layout {\n\tSIL_KILL = 0,\n\tSIL_TIMER = 1,\n\tSIL_POLL = 2,\n\tSIL_FAULT = 3,\n\tSIL_FAULT_MCEERR = 4,\n\tSIL_FAULT_BNDERR = 5,\n\tSIL_FAULT_PKUERR = 6,\n\tSIL_CHLD = 7,\n\tSIL_RT = 8,\n\tSIL_SYS = 9,\n};\n\nstruct fd {\n\tstruct file *file;\n\tunsigned int flags;\n};\n\ntypedef u32 compat_old_sigset_t;\n\nstruct compat_sigaction {\n\tcompat_uptr_t sa_handler;\n\tcompat_ulong_t sa_flags;\n\tcompat_uptr_t sa_restorer;\n\tcompat_sigset_t sa_mask;\n};\n\nstruct compat_old_sigaction {\n\tcompat_uptr_t sa_handler;\n\tcompat_old_sigset_t sa_mask;\n\tcompat_ulong_t sa_flags;\n\tcompat_uptr_t sa_restorer;\n};\n\nenum {\n\tTRACE_SIGNAL_DELIVERED = 0,\n\tTRACE_SIGNAL_IGNORED = 1,\n\tTRACE_SIGNAL_ALREADY_PENDING = 2,\n\tTRACE_SIGNAL_OVERFLOW_FAIL = 3,\n\tTRACE_SIGNAL_LOSE_INFO = 4,\n};\n\nstruct trace_event_raw_signal_generate {\n\tstruct trace_entry ent;\n\tint sig;\n\tint errno;\n\tint code;\n\tchar comm[16];\n\tpid_t pid;\n\tint group;\n\tint result;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_signal_deliver {\n\tstruct trace_entry ent;\n\tint sig;\n\tint errno;\n\tint code;\n\tlong unsigned int sa_handler;\n\tlong unsigned int sa_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_signal_generate {};\n\nstruct trace_event_data_offsets_signal_deliver {};\n\ntypedef void (*btf_trace_signal_generate)(void *, int, struct kernel_siginfo *, struct task_struct *, int, int);\n\ntypedef void (*btf_trace_signal_deliver)(void *, int, struct kernel_siginfo *, struct k_sigaction *);\n\nstruct sysinfo {\n\t__kernel_long_t uptime;\n\t__kernel_ulong_t loads[3];\n\t__kernel_ulong_t totalram;\n\t__kernel_ulong_t freeram;\n\t__kernel_ulong_t sharedram;\n\t__kernel_ulong_t bufferram;\n\t__kernel_ulong_t totalswap;\n\t__kernel_ulong_t freeswap;\n\t__u16 procs;\n\t__u16 pad;\n\t__kernel_ulong_t totalhigh;\n\t__kernel_ulong_t freehigh;\n\t__u32 mem_unit;\n\tchar _f[0];\n};\n\nenum {\n\tPER_LINUX = 0,\n\tPER_LINUX_32BIT = 8388608,\n\tPER_LINUX_FDPIC = 524288,\n\tPER_SVR4 = 68157441,\n\tPER_SVR3 = 83886082,\n\tPER_SCOSVR3 = 117440515,\n\tPER_OSR5 = 100663299,\n\tPER_WYSEV386 = 83886084,\n\tPER_ISCR4 = 67108869,\n\tPER_BSD = 6,\n\tPER_SUNOS = 67108870,\n\tPER_XENIX = 83886087,\n\tPER_LINUX32 = 8,\n\tPER_LINUX32_3GB = 134217736,\n\tPER_IRIX32 = 67108873,\n\tPER_IRIXN32 = 67108874,\n\tPER_IRIX64 = 67108875,\n\tPER_RISCOS = 12,\n\tPER_SOLARIS = 67108877,\n\tPER_UW7 = 68157454,\n\tPER_OSF4 = 15,\n\tPER_HPUX = 16,\n\tPER_MASK = 255,\n};\n\nstruct rlimit64 {\n\t__u64 rlim_cur;\n\t__u64 rlim_max;\n};\n\nstruct oldold_utsname {\n\tchar sysname[9];\n\tchar nodename[9];\n\tchar release[9];\n\tchar version[9];\n\tchar machine[9];\n};\n\nstruct old_utsname {\n\tchar sysname[65];\n\tchar nodename[65];\n\tchar release[65];\n\tchar version[65];\n\tchar machine[65];\n};\n\nenum uts_proc {\n\tUTS_PROC_OSTYPE = 0,\n\tUTS_PROC_OSRELEASE = 1,\n\tUTS_PROC_VERSION = 2,\n\tUTS_PROC_HOSTNAME = 3,\n\tUTS_PROC_DOMAINNAME = 4,\n};\n\nstruct prctl_mm_map {\n\t__u64 start_code;\n\t__u64 end_code;\n\t__u64 start_data;\n\t__u64 end_data;\n\t__u64 start_brk;\n\t__u64 brk;\n\t__u64 start_stack;\n\t__u64 arg_start;\n\t__u64 arg_end;\n\t__u64 env_start;\n\t__u64 env_end;\n\t__u64 *auxv;\n\t__u32 auxv_size;\n\t__u32 exe_fd;\n};\n\nstruct compat_tms {\n\tcompat_clock_t tms_utime;\n\tcompat_clock_t tms_stime;\n\tcompat_clock_t tms_cutime;\n\tcompat_clock_t tms_cstime;\n};\n\nstruct compat_rlimit {\n\tcompat_ulong_t rlim_cur;\n\tcompat_ulong_t rlim_max;\n};\n\nstruct tms {\n\t__kernel_clock_t tms_utime;\n\t__kernel_clock_t tms_stime;\n\t__kernel_clock_t tms_cutime;\n\t__kernel_clock_t tms_cstime;\n};\n\nstruct getcpu_cache {\n\tlong unsigned int blob[16];\n};\n\nstruct compat_sysinfo {\n\ts32 uptime;\n\tu32 loads[3];\n\tu32 totalram;\n\tu32 freeram;\n\tu32 sharedram;\n\tu32 bufferram;\n\tu32 totalswap;\n\tu32 freeswap;\n\tu16 procs;\n\tu16 pad;\n\tu32 totalhigh;\n\tu32 freehigh;\n\tu32 mem_unit;\n\tchar _f[8];\n};\n\nstruct wq_flusher;\n\nstruct worker;\n\nstruct workqueue_attrs;\n\nstruct pool_workqueue;\n\nstruct wq_device;\n\nstruct workqueue_struct {\n\tstruct list_head pwqs;\n\tstruct list_head list;\n\tstruct mutex mutex;\n\tint work_color;\n\tint flush_color;\n\tatomic_t nr_pwqs_to_flush;\n\tstruct wq_flusher *first_flusher;\n\tstruct list_head flusher_queue;\n\tstruct list_head flusher_overflow;\n\tstruct list_head maydays;\n\tstruct worker *rescuer;\n\tint nr_drainers;\n\tint saved_max_active;\n\tstruct workqueue_attrs *unbound_attrs;\n\tstruct pool_workqueue *dfl_pwq;\n\tstruct wq_device *wq_dev;\n\tchar name[24];\n\tstruct callback_head rcu;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tunsigned int flags;\n\tstruct pool_workqueue *cpu_pwqs;\n\tstruct pool_workqueue *numa_pwq_tbl[0];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct workqueue_attrs {\n\tint nice;\n\tcpumask_var_t cpumask;\n\tbool no_numa;\n};\n\nstruct execute_work {\n\tstruct work_struct work;\n};\n\nenum {\n\tWQ_UNBOUND = 2,\n\tWQ_FREEZABLE = 4,\n\tWQ_MEM_RECLAIM = 8,\n\tWQ_HIGHPRI = 16,\n\tWQ_CPU_INTENSIVE = 32,\n\tWQ_SYSFS = 64,\n\tWQ_POWER_EFFICIENT = 128,\n\t__WQ_DRAINING = 65536,\n\t__WQ_ORDERED = 131072,\n\t__WQ_LEGACY = 262144,\n\t__WQ_ORDERED_EXPLICIT = 524288,\n\tWQ_MAX_ACTIVE = 512,\n\tWQ_MAX_UNBOUND_PER_CPU = 4,\n\tWQ_DFL_ACTIVE = 256,\n};\n\nenum xa_lock_type {\n\tXA_LOCK_IRQ = 1,\n\tXA_LOCK_BH = 2,\n};\n\nstruct ida {\n\tstruct xarray xa;\n};\n\nstruct __una_u32 {\n\tu32 x;\n};\n\nstruct worker_pool;\n\nstruct worker {\n\tunion {\n\t\tstruct list_head entry;\n\t\tstruct hlist_node hentry;\n\t};\n\tstruct work_struct *current_work;\n\twork_func_t current_func;\n\tstruct pool_workqueue *current_pwq;\n\tstruct list_head scheduled;\n\tstruct task_struct *task;\n\tstruct worker_pool *pool;\n\tstruct list_head node;\n\tlong unsigned int last_active;\n\tunsigned int flags;\n\tint id;\n\tint sleeping;\n\tchar desc[24];\n\tstruct workqueue_struct *rescue_wq;\n\twork_func_t last_func;\n};\n\nstruct pool_workqueue {\n\tstruct worker_pool *pool;\n\tstruct workqueue_struct *wq;\n\tint work_color;\n\tint flush_color;\n\tint refcnt;\n\tint nr_in_flight[15];\n\tint nr_active;\n\tint max_active;\n\tstruct list_head delayed_works;\n\tstruct list_head pwqs_node;\n\tstruct list_head mayday_node;\n\tstruct work_struct unbound_release_work;\n\tstruct callback_head rcu;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct worker_pool {\n\traw_spinlock_t lock;\n\tint cpu;\n\tint node;\n\tint id;\n\tunsigned int flags;\n\tlong unsigned int watchdog_ts;\n\tstruct list_head worklist;\n\tint nr_workers;\n\tint nr_idle;\n\tstruct list_head idle_list;\n\tstruct timer_list idle_timer;\n\tstruct timer_list mayday_timer;\n\tstruct hlist_head busy_hash[64];\n\tstruct worker *manager;\n\tstruct list_head workers;\n\tstruct completion *detach_completion;\n\tstruct ida worker_ida;\n\tstruct workqueue_attrs *attrs;\n\tstruct hlist_node hash_node;\n\tint refcnt;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tatomic_t nr_running;\n\tstruct callback_head rcu;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum {\n\tPOOL_MANAGER_ACTIVE = 1,\n\tPOOL_DISASSOCIATED = 4,\n\tWORKER_DIE = 2,\n\tWORKER_IDLE = 4,\n\tWORKER_PREP = 8,\n\tWORKER_CPU_INTENSIVE = 64,\n\tWORKER_UNBOUND = 128,\n\tWORKER_REBOUND = 256,\n\tWORKER_NOT_RUNNING = 456,\n\tNR_STD_WORKER_POOLS = 2,\n\tUNBOUND_POOL_HASH_ORDER = 6,\n\tBUSY_WORKER_HASH_ORDER = 6,\n\tMAX_IDLE_WORKERS_RATIO = 4,\n\tIDLE_WORKER_TIMEOUT = 300000,\n\tMAYDAY_INITIAL_TIMEOUT = 10,\n\tMAYDAY_INTERVAL = 100,\n\tCREATE_COOLDOWN = 1000,\n\tRESCUER_NICE_LEVEL = 4294967276,\n\tHIGHPRI_NICE_LEVEL = 4294967276,\n\tWQ_NAME_LEN = 24,\n};\n\nstruct wq_flusher {\n\tstruct list_head list;\n\tint flush_color;\n\tstruct completion done;\n};\n\nstruct wq_device {\n\tstruct workqueue_struct *wq;\n\tstruct device dev;\n};\n\nstruct trace_event_raw_workqueue_queue_work {\n\tstruct trace_entry ent;\n\tvoid *work;\n\tvoid *function;\n\tvoid *workqueue;\n\tunsigned int req_cpu;\n\tunsigned int cpu;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_workqueue_activate_work {\n\tstruct trace_entry ent;\n\tvoid *work;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_workqueue_execute_start {\n\tstruct trace_entry ent;\n\tvoid *work;\n\tvoid *function;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_workqueue_execute_end {\n\tstruct trace_entry ent;\n\tvoid *work;\n\tvoid *function;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_workqueue_queue_work {};\n\nstruct trace_event_data_offsets_workqueue_activate_work {};\n\nstruct trace_event_data_offsets_workqueue_execute_start {};\n\nstruct trace_event_data_offsets_workqueue_execute_end {};\n\ntypedef void (*btf_trace_workqueue_queue_work)(void *, unsigned int, struct pool_workqueue *, struct work_struct *);\n\ntypedef void (*btf_trace_workqueue_activate_work)(void *, struct work_struct *);\n\ntypedef void (*btf_trace_workqueue_execute_start)(void *, struct work_struct *);\n\ntypedef void (*btf_trace_workqueue_execute_end)(void *, struct work_struct *, work_func_t);\n\nstruct wq_barrier {\n\tstruct work_struct work;\n\tstruct completion done;\n\tstruct task_struct *task;\n};\n\nstruct cwt_wait {\n\twait_queue_entry_t wait;\n\tstruct work_struct *work;\n};\n\nstruct apply_wqattrs_ctx {\n\tstruct workqueue_struct *wq;\n\tstruct workqueue_attrs *attrs;\n\tstruct list_head list;\n\tstruct pool_workqueue *dfl_pwq;\n\tstruct pool_workqueue *pwq_tbl[0];\n};\n\nstruct work_for_cpu {\n\tstruct work_struct work;\n\tlong int (*fn)(void *);\n\tvoid *arg;\n\tlong int ret;\n};\n\ntypedef struct {} local_lock_t;\n\nstruct radix_tree_preload {\n\tlocal_lock_t lock;\n\tunsigned int nr;\n\tstruct xa_node *nodes;\n};\n\ntypedef void (*task_work_func_t)(struct callback_head *);\n\nenum {\n\tKERNEL_PARAM_OPS_FL_NOARG = 1,\n};\n\nenum {\n\tKERNEL_PARAM_FL_UNSAFE = 1,\n\tKERNEL_PARAM_FL_HWPARAM = 2,\n};\n\nstruct param_attribute {\n\tstruct module_attribute mattr;\n\tconst struct kernel_param *param;\n};\n\nstruct module_param_attrs {\n\tunsigned int num;\n\tstruct attribute_group grp;\n\tstruct param_attribute attrs[0];\n};\n\nstruct module_version_attribute {\n\tstruct module_attribute mattr;\n\tconst char *module_name;\n\tconst char *version;\n};\n\nstruct kmalloced_param {\n\tstruct list_head list;\n\tchar val[0];\n};\n\nstruct sched_param {\n\tint sched_priority;\n};\n\nenum {\n\t__PERCPU_REF_ATOMIC = 1,\n\t__PERCPU_REF_DEAD = 2,\n\t__PERCPU_REF_ATOMIC_DEAD = 3,\n\t__PERCPU_REF_FLAG_BITS = 2,\n};\n\nstruct kthread_work;\n\ntypedef void (*kthread_work_func_t)(struct kthread_work *);\n\nstruct kthread_worker;\n\nstruct kthread_work {\n\tstruct list_head node;\n\tkthread_work_func_t func;\n\tstruct kthread_worker *worker;\n\tint canceling;\n};\n\nenum {\n\tKTW_FREEZABLE = 1,\n};\n\nstruct kthread_worker {\n\tunsigned int flags;\n\traw_spinlock_t lock;\n\tstruct list_head work_list;\n\tstruct list_head delayed_work_list;\n\tstruct task_struct *task;\n\tstruct kthread_work *current_work;\n};\n\nstruct kthread_delayed_work {\n\tstruct kthread_work work;\n\tstruct timer_list timer;\n};\n\nenum {\n\tCSS_NO_REF = 1,\n\tCSS_ONLINE = 2,\n\tCSS_RELEASED = 4,\n\tCSS_VISIBLE = 8,\n\tCSS_DYING = 16,\n};\n\nstruct kthread_create_info {\n\tint (*threadfn)(void *);\n\tvoid *data;\n\tint node;\n\tstruct task_struct *result;\n\tstruct completion *done;\n\tstruct list_head list;\n};\n\nstruct kthread {\n\tlong unsigned int flags;\n\tunsigned int cpu;\n\tint (*threadfn)(void *);\n\tvoid *data;\n\tmm_segment_t oldfs;\n\tstruct completion parked;\n\tstruct completion exited;\n\tstruct cgroup_subsys_state *blkcg_css;\n};\n\nenum KTHREAD_BITS {\n\tKTHREAD_IS_PER_CPU = 0,\n\tKTHREAD_SHOULD_STOP = 1,\n\tKTHREAD_SHOULD_PARK = 2,\n};\n\nstruct kthread_flush_work {\n\tstruct kthread_work work;\n\tstruct completion done;\n};\n\nstruct pt_regs___2;\n\nstruct ipc_ids {\n\tint in_use;\n\tshort unsigned int seq;\n\tstruct rw_semaphore rwsem;\n\tstruct idr ipcs_idr;\n\tint max_idx;\n\tint last_idx;\n\tint next_id;\n\tstruct rhashtable key_ht;\n};\n\nstruct ipc_namespace {\n\tstruct ipc_ids ids[3];\n\tint sem_ctls[4];\n\tint used_sems;\n\tunsigned int msg_ctlmax;\n\tunsigned int msg_ctlmnb;\n\tunsigned int msg_ctlmni;\n\tatomic_t msg_bytes;\n\tatomic_t msg_hdrs;\n\tsize_t shm_ctlmax;\n\tsize_t shm_ctlall;\n\tlong unsigned int shm_tot;\n\tint shm_ctlmni;\n\tint shm_rmid_forced;\n\tstruct notifier_block ipcns_nb;\n\tstruct vfsmount *mq_mnt;\n\tunsigned int mq_queues_count;\n\tunsigned int mq_queues_max;\n\tunsigned int mq_msg_max;\n\tunsigned int mq_msgsize_max;\n\tunsigned int mq_msg_default;\n\tunsigned int mq_msgsize_default;\n\tstruct user_namespace *user_ns;\n\tstruct ucounts *ucounts;\n\tstruct llist_node mnt_llist;\n\tstruct ns_common ns;\n};\n\nstruct srcu_notifier_head {\n\tstruct mutex mutex;\n\tstruct srcu_struct srcu;\n\tstruct notifier_block *head;\n};\n\nenum what {\n\tPROC_EVENT_NONE = 0,\n\tPROC_EVENT_FORK = 1,\n\tPROC_EVENT_EXEC = 2,\n\tPROC_EVENT_UID = 4,\n\tPROC_EVENT_GID = 64,\n\tPROC_EVENT_SID = 128,\n\tPROC_EVENT_PTRACE = 256,\n\tPROC_EVENT_COMM = 512,\n\tPROC_EVENT_COREDUMP = 1073741824,\n\tPROC_EVENT_EXIT = 2147483648,\n};\n\ntypedef u64 async_cookie_t;\n\ntypedef void (*async_func_t)(void *, async_cookie_t);\n\nstruct async_domain {\n\tstruct list_head pending;\n\tunsigned int registered: 1;\n};\n\nstruct async_entry {\n\tstruct list_head domain_list;\n\tstruct list_head global_list;\n\tstruct work_struct work;\n\tasync_cookie_t cookie;\n\tasync_func_t func;\n\tvoid *data;\n\tstruct async_domain *domain;\n};\n\nstruct smpboot_thread_data {\n\tunsigned int cpu;\n\tunsigned int status;\n\tstruct smp_hotplug_thread *ht;\n};\n\nenum {\n\tHP_THREAD_NONE = 0,\n\tHP_THREAD_ACTIVE = 1,\n\tHP_THREAD_PARKED = 2,\n};\n\nstruct umd_info {\n\tconst char *driver_name;\n\tstruct file *pipe_to_umh;\n\tstruct file *pipe_from_umh;\n\tstruct path wd;\n\tstruct pid *tgid;\n};\n\nstruct pin_cookie {};\n\nstruct preempt_notifier;\n\nstruct preempt_ops {\n\tvoid (*sched_in)(struct preempt_notifier *, int);\n\tvoid (*sched_out)(struct preempt_notifier *, struct task_struct *);\n};\n\nstruct preempt_notifier {\n\tstruct hlist_node link;\n\tstruct preempt_ops *ops;\n};\n\nenum {\n\tCSD_FLAG_LOCK = 1,\n\tIRQ_WORK_PENDING = 1,\n\tIRQ_WORK_BUSY = 2,\n\tIRQ_WORK_LAZY = 4,\n\tIRQ_WORK_HARD_IRQ = 8,\n\tIRQ_WORK_CLAIMED = 3,\n\tCSD_TYPE_ASYNC = 0,\n\tCSD_TYPE_SYNC = 16,\n\tCSD_TYPE_IRQ_WORK = 32,\n\tCSD_TYPE_TTWU = 48,\n\tCSD_FLAG_TYPE_MASK = 240,\n};\n\nstruct dl_bw {\n\traw_spinlock_t lock;\n\tu64 bw;\n\tu64 total_bw;\n};\n\nstruct cpudl_item;\n\nstruct cpudl {\n\traw_spinlock_t lock;\n\tint size;\n\tcpumask_var_t free_cpus;\n\tstruct cpudl_item *elements;\n};\n\nstruct cpupri_vec {\n\tatomic_t count;\n\tcpumask_var_t mask;\n};\n\nstruct cpupri {\n\tstruct cpupri_vec pri_to_cpu[101];\n\tint *cpu_to_pri;\n};\n\nstruct perf_domain;\n\nstruct root_domain {\n\tatomic_t refcount;\n\tatomic_t rto_count;\n\tstruct callback_head rcu;\n\tcpumask_var_t span;\n\tcpumask_var_t online;\n\tint overload;\n\tint overutilized;\n\tcpumask_var_t dlo_mask;\n\tatomic_t dlo_count;\n\tstruct dl_bw dl_bw;\n\tstruct cpudl cpudl;\n\tu64 visit_gen;\n\tstruct irq_work rto_push_work;\n\traw_spinlock_t rto_lock;\n\tint rto_loop;\n\tint rto_cpu;\n\tatomic_t rto_loop_next;\n\tatomic_t rto_loop_start;\n\tcpumask_var_t rto_mask;\n\tstruct cpupri cpupri;\n\tlong unsigned int max_cpu_capacity;\n\tstruct perf_domain *pd;\n};\n\nstruct cfs_rq {\n\tstruct load_weight load;\n\tunsigned int nr_running;\n\tunsigned int h_nr_running;\n\tunsigned int idle_h_nr_running;\n\tu64 exec_clock;\n\tu64 min_vruntime;\n\tstruct rb_root_cached tasks_timeline;\n\tstruct sched_entity *curr;\n\tstruct sched_entity *next;\n\tstruct sched_entity *last;\n\tstruct sched_entity *skip;\n\tunsigned int nr_spread_over;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct sched_avg avg;\n\tstruct {\n\t\traw_spinlock_t lock;\n\t\tint nr;\n\t\tlong unsigned int load_avg;\n\t\tlong unsigned int util_avg;\n\t\tlong unsigned int runnable_avg;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t} removed;\n\tlong unsigned int tg_load_avg_contrib;\n\tlong int propagate;\n\tlong int prop_runnable_sum;\n\tlong unsigned int h_load;\n\tu64 last_h_load_update;\n\tstruct sched_entity *h_load_next;\n\tstruct rq *rq;\n\tint on_list;\n\tstruct list_head leaf_cfs_rq_list;\n\tstruct task_group *tg;\n\tint runtime_enabled;\n\ts64 runtime_remaining;\n\tu64 throttled_clock;\n\tu64 throttled_clock_task;\n\tu64 throttled_clock_task_time;\n\tint throttled;\n\tint throttle_count;\n\tstruct list_head throttled_list;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct cfs_bandwidth {\n\traw_spinlock_t lock;\n\tktime_t period;\n\tu64 quota;\n\tu64 runtime;\n\ts64 hierarchical_quota;\n\tu8 idle;\n\tu8 period_active;\n\tu8 slack_started;\n\tstruct hrtimer period_timer;\n\tstruct hrtimer slack_timer;\n\tstruct list_head throttled_cfs_rq;\n\tint nr_periods;\n\tint nr_throttled;\n\tu64 throttled_time;\n};\n\nstruct task_group {\n\tstruct cgroup_subsys_state css;\n\tstruct sched_entity **se;\n\tstruct cfs_rq **cfs_rq;\n\tlong unsigned int shares;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tatomic_long_t load_avg;\n\tstruct callback_head rcu;\n\tstruct list_head list;\n\tstruct task_group *parent;\n\tstruct list_head siblings;\n\tstruct list_head children;\n\tstruct autogroup *autogroup;\n\tstruct cfs_bandwidth cfs_bandwidth;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct sched_domain_attr {\n\tint relax_domain_level;\n};\n\nstruct sched_group {\n\tstruct sched_group *next;\n\tatomic_t ref;\n\tunsigned int group_weight;\n\tstruct sched_group_capacity *sgc;\n\tint asym_prefer_cpu;\n\tlong unsigned int cpumask[0];\n};\n\nstruct sched_group_capacity {\n\tatomic_t ref;\n\tlong unsigned int capacity;\n\tlong unsigned int min_capacity;\n\tlong unsigned int max_capacity;\n\tlong unsigned int next_update;\n\tint imbalance;\n\tint id;\n\tlong unsigned int cpumask[0];\n};\n\nstruct wait_bit_queue_entry {\n\tstruct wait_bit_key key;\n\tstruct wait_queue_entry wq_entry;\n};\n\nstruct autogroup {\n\tstruct kref kref;\n\tstruct task_group *tg;\n\tstruct rw_semaphore lock;\n\tlong unsigned int id;\n\tint nice;\n};\n\nenum ctx_state {\n\tCONTEXT_DISABLED = 4294967295,\n\tCONTEXT_KERNEL = 0,\n\tCONTEXT_USER = 1,\n\tCONTEXT_GUEST = 2,\n};\n\nstruct context_tracking {\n\tbool active;\n\tint recursion;\n\tenum ctx_state state;\n};\n\nstruct kernel_cpustat {\n\tu64 cpustat[10];\n};\n\nenum {\n\tMEMBARRIER_STATE_PRIVATE_EXPEDITED_READY = 1,\n\tMEMBARRIER_STATE_PRIVATE_EXPEDITED = 2,\n\tMEMBARRIER_STATE_GLOBAL_EXPEDITED_READY = 4,\n\tMEMBARRIER_STATE_GLOBAL_EXPEDITED = 8,\n\tMEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE_READY = 16,\n\tMEMBARRIER_STATE_PRIVATE_EXPEDITED_SYNC_CORE = 32,\n\tMEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ_READY = 64,\n\tMEMBARRIER_STATE_PRIVATE_EXPEDITED_RSEQ = 128,\n};\n\nenum {\n\tCFTYPE_ONLY_ON_ROOT = 1,\n\tCFTYPE_NOT_ON_ROOT = 2,\n\tCFTYPE_NS_DELEGATABLE = 4,\n\tCFTYPE_NO_PREFIX = 8,\n\tCFTYPE_WORLD_WRITABLE = 16,\n\tCFTYPE_DEBUG = 32,\n\t__CFTYPE_ONLY_ON_DFL = 65536,\n\t__CFTYPE_NOT_ON_DFL = 131072,\n};\n\nstruct trace_event_raw_sched_kthread_stop {\n\tstruct trace_entry ent;\n\tchar comm[16];\n\tpid_t pid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_kthread_stop_ret {\n\tstruct trace_entry ent;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_kthread_work_queue_work {\n\tstruct trace_entry ent;\n\tvoid *work;\n\tvoid *function;\n\tvoid *worker;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_kthread_work_execute_start {\n\tstruct trace_entry ent;\n\tvoid *work;\n\tvoid *function;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_kthread_work_execute_end {\n\tstruct trace_entry ent;\n\tvoid *work;\n\tvoid *function;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_wakeup_template {\n\tstruct trace_entry ent;\n\tchar comm[16];\n\tpid_t pid;\n\tint prio;\n\tint success;\n\tint target_cpu;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_switch {\n\tstruct trace_entry ent;\n\tchar prev_comm[16];\n\tpid_t prev_pid;\n\tint prev_prio;\n\tlong int prev_state;\n\tchar next_comm[16];\n\tpid_t next_pid;\n\tint next_prio;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_migrate_task {\n\tstruct trace_entry ent;\n\tchar comm[16];\n\tpid_t pid;\n\tint prio;\n\tint orig_cpu;\n\tint dest_cpu;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_process_template {\n\tstruct trace_entry ent;\n\tchar comm[16];\n\tpid_t pid;\n\tint prio;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_process_wait {\n\tstruct trace_entry ent;\n\tchar comm[16];\n\tpid_t pid;\n\tint prio;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_process_fork {\n\tstruct trace_entry ent;\n\tchar parent_comm[16];\n\tpid_t parent_pid;\n\tchar child_comm[16];\n\tpid_t child_pid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_process_exec {\n\tstruct trace_entry ent;\n\tu32 __data_loc_filename;\n\tpid_t pid;\n\tpid_t old_pid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_stat_template {\n\tstruct trace_entry ent;\n\tchar comm[16];\n\tpid_t pid;\n\tu64 delay;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_stat_runtime {\n\tstruct trace_entry ent;\n\tchar comm[16];\n\tpid_t pid;\n\tu64 runtime;\n\tu64 vruntime;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_pi_setprio {\n\tstruct trace_entry ent;\n\tchar comm[16];\n\tpid_t pid;\n\tint oldprio;\n\tint newprio;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_move_numa {\n\tstruct trace_entry ent;\n\tpid_t pid;\n\tpid_t tgid;\n\tpid_t ngid;\n\tint src_cpu;\n\tint src_nid;\n\tint dst_cpu;\n\tint dst_nid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_numa_pair_template {\n\tstruct trace_entry ent;\n\tpid_t src_pid;\n\tpid_t src_tgid;\n\tpid_t src_ngid;\n\tint src_cpu;\n\tint src_nid;\n\tpid_t dst_pid;\n\tpid_t dst_tgid;\n\tpid_t dst_ngid;\n\tint dst_cpu;\n\tint dst_nid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sched_wake_idle_without_ipi {\n\tstruct trace_entry ent;\n\tint cpu;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_sched_kthread_stop {};\n\nstruct trace_event_data_offsets_sched_kthread_stop_ret {};\n\nstruct trace_event_data_offsets_sched_kthread_work_queue_work {};\n\nstruct trace_event_data_offsets_sched_kthread_work_execute_start {};\n\nstruct trace_event_data_offsets_sched_kthread_work_execute_end {};\n\nstruct trace_event_data_offsets_sched_wakeup_template {};\n\nstruct trace_event_data_offsets_sched_switch {};\n\nstruct trace_event_data_offsets_sched_migrate_task {};\n\nstruct trace_event_data_offsets_sched_process_template {};\n\nstruct trace_event_data_offsets_sched_process_wait {};\n\nstruct trace_event_data_offsets_sched_process_fork {};\n\nstruct trace_event_data_offsets_sched_process_exec {\n\tu32 filename;\n};\n\nstruct trace_event_data_offsets_sched_stat_template {};\n\nstruct trace_event_data_offsets_sched_stat_runtime {};\n\nstruct trace_event_data_offsets_sched_pi_setprio {};\n\nstruct trace_event_data_offsets_sched_move_numa {};\n\nstruct trace_event_data_offsets_sched_numa_pair_template {};\n\nstruct trace_event_data_offsets_sched_wake_idle_without_ipi {};\n\ntypedef void (*btf_trace_sched_kthread_stop)(void *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_kthread_stop_ret)(void *, int);\n\ntypedef void (*btf_trace_sched_kthread_work_queue_work)(void *, struct kthread_worker *, struct kthread_work *);\n\ntypedef void (*btf_trace_sched_kthread_work_execute_start)(void *, struct kthread_work *);\n\ntypedef void (*btf_trace_sched_kthread_work_execute_end)(void *, struct kthread_work *, kthread_work_func_t);\n\ntypedef void (*btf_trace_sched_waking)(void *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_wakeup)(void *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_wakeup_new)(void *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_switch)(void *, bool, struct task_struct *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_migrate_task)(void *, struct task_struct *, int);\n\ntypedef void (*btf_trace_sched_process_free)(void *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_process_exit)(void *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_wait_task)(void *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_process_wait)(void *, struct pid *);\n\ntypedef void (*btf_trace_sched_process_fork)(void *, struct task_struct *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_process_exec)(void *, struct task_struct *, pid_t, struct linux_binprm *);\n\ntypedef void (*btf_trace_sched_stat_wait)(void *, struct task_struct *, u64);\n\ntypedef void (*btf_trace_sched_stat_sleep)(void *, struct task_struct *, u64);\n\ntypedef void (*btf_trace_sched_stat_iowait)(void *, struct task_struct *, u64);\n\ntypedef void (*btf_trace_sched_stat_blocked)(void *, struct task_struct *, u64);\n\ntypedef void (*btf_trace_sched_stat_runtime)(void *, struct task_struct *, u64, u64);\n\ntypedef void (*btf_trace_sched_pi_setprio)(void *, struct task_struct *, struct task_struct *);\n\ntypedef void (*btf_trace_sched_move_numa)(void *, struct task_struct *, int, int);\n\ntypedef void (*btf_trace_sched_stick_numa)(void *, struct task_struct *, int, struct task_struct *, int);\n\ntypedef void (*btf_trace_sched_swap_numa)(void *, struct task_struct *, int, struct task_struct *, int);\n\ntypedef void (*btf_trace_sched_wake_idle_without_ipi)(void *, int);\n\nstruct wake_q_head {\n\tstruct wake_q_node *first;\n\tstruct wake_q_node **lastp;\n};\n\nstruct sched_attr {\n\t__u32 size;\n\t__u32 sched_policy;\n\t__u64 sched_flags;\n\t__s32 sched_nice;\n\t__u32 sched_priority;\n\t__u64 sched_runtime;\n\t__u64 sched_deadline;\n\t__u64 sched_period;\n\t__u32 sched_util_min;\n\t__u32 sched_util_max;\n};\n\nstruct cpuidle_state_usage {\n\tlong long unsigned int disable;\n\tlong long unsigned int usage;\n\tu64 time_ns;\n\tlong long unsigned int above;\n\tlong long unsigned int below;\n\tlong long unsigned int rejected;\n\tlong long unsigned int s2idle_usage;\n\tlong long unsigned int s2idle_time;\n};\n\nstruct cpuidle_device;\n\nstruct cpuidle_driver;\n\nstruct cpuidle_state {\n\tchar name[16];\n\tchar desc[32];\n\tu64 exit_latency_ns;\n\tu64 target_residency_ns;\n\tunsigned int flags;\n\tunsigned int exit_latency;\n\tint power_usage;\n\tunsigned int target_residency;\n\tint (*enter)(struct cpuidle_device *, struct cpuidle_driver *, int);\n\tint (*enter_dead)(struct cpuidle_device *, int);\n\tint (*enter_s2idle)(struct cpuidle_device *, struct cpuidle_driver *, int);\n};\n\nstruct cpuidle_driver_kobj;\n\nstruct cpuidle_state_kobj;\n\nstruct cpuidle_device_kobj;\n\nstruct cpuidle_device {\n\tunsigned int registered: 1;\n\tunsigned int enabled: 1;\n\tunsigned int poll_time_limit: 1;\n\tunsigned int cpu;\n\tktime_t next_hrtimer;\n\tint last_state_idx;\n\tu64 last_residency_ns;\n\tu64 poll_limit_ns;\n\tu64 forced_idle_latency_limit_ns;\n\tstruct cpuidle_state_usage states_usage[10];\n\tstruct cpuidle_state_kobj *kobjs[10];\n\tstruct cpuidle_driver_kobj *kobj_driver;\n\tstruct cpuidle_device_kobj *kobj_dev;\n\tstruct list_head device_list;\n};\n\nstruct cpuidle_driver {\n\tconst char *name;\n\tstruct module *owner;\n\tunsigned int bctimer: 1;\n\tstruct cpuidle_state states[10];\n\tint state_count;\n\tint safe_state_index;\n\tstruct cpumask *cpumask;\n\tconst char *governor;\n};\n\nstruct cpu_stop_done;\n\nstruct cpu_stop_work {\n\tstruct list_head list;\n\tcpu_stop_fn_t fn;\n\tlong unsigned int caller;\n\tvoid *arg;\n\tstruct cpu_stop_done *done;\n};\n\nstruct cpudl_item {\n\tu64 dl;\n\tint cpu;\n\tint idx;\n};\n\nstruct rt_prio_array {\n\tlong unsigned int bitmap[2];\n\tstruct list_head queue[100];\n};\n\nstruct rt_bandwidth {\n\traw_spinlock_t rt_runtime_lock;\n\tktime_t rt_period;\n\tu64 rt_runtime;\n\tstruct hrtimer rt_period_timer;\n\tunsigned int rt_period_active;\n};\n\nstruct dl_bandwidth {\n\traw_spinlock_t dl_runtime_lock;\n\tu64 dl_runtime;\n\tu64 dl_period;\n};\n\ntypedef int (*tg_visitor)(struct task_group *, void *);\n\nstruct rt_rq {\n\tstruct rt_prio_array active;\n\tunsigned int rt_nr_running;\n\tunsigned int rr_nr_running;\n\tstruct {\n\t\tint curr;\n\t\tint next;\n\t} highest_prio;\n\tlong unsigned int rt_nr_migratory;\n\tlong unsigned int rt_nr_total;\n\tint overloaded;\n\tstruct plist_head pushable_tasks;\n\tint rt_queued;\n\tint rt_throttled;\n\tu64 rt_time;\n\tu64 rt_runtime;\n\traw_spinlock_t rt_runtime_lock;\n};\n\nstruct dl_rq {\n\tstruct rb_root_cached root;\n\tlong unsigned int dl_nr_running;\n\tstruct {\n\t\tu64 curr;\n\t\tu64 next;\n\t} earliest_dl;\n\tlong unsigned int dl_nr_migratory;\n\tint overloaded;\n\tstruct rb_root_cached pushable_dl_tasks_root;\n\tu64 running_bw;\n\tu64 this_bw;\n\tu64 extra_bw;\n\tu64 bw_ratio;\n};\n\nstruct rq {\n\traw_spinlock_t lock;\n\tunsigned int nr_running;\n\tunsigned int nr_numa_running;\n\tunsigned int nr_preferred_running;\n\tunsigned int numa_migrate_on;\n\tlong unsigned int last_blocked_load_update_tick;\n\tunsigned int has_blocked_load;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tcall_single_data_t nohz_csd;\n\tunsigned int nohz_tick_stopped;\n\tatomic_t nohz_flags;\n\tunsigned int ttwu_pending;\n\tu64 nr_switches;\n\tlong: 64;\n\tstruct cfs_rq cfs;\n\tstruct rt_rq rt;\n\tstruct dl_rq dl;\n\tstruct list_head leaf_cfs_rq_list;\n\tstruct list_head *tmp_alone_branch;\n\tlong unsigned int nr_uninterruptible;\n\tstruct task_struct *curr;\n\tstruct task_struct *idle;\n\tstruct task_struct *stop;\n\tlong unsigned int next_balance;\n\tstruct mm_struct *prev_mm;\n\tunsigned int clock_update_flags;\n\tu64 clock;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tu64 clock_task;\n\tu64 clock_pelt;\n\tlong unsigned int lost_idle_time;\n\tatomic_t nr_iowait;\n\tint membarrier_state;\n\tstruct root_domain *rd;\n\tstruct sched_domain *sd;\n\tlong unsigned int cpu_capacity;\n\tlong unsigned int cpu_capacity_orig;\n\tstruct callback_head *balance_callback;\n\tunsigned char balance_push;\n\tunsigned char nohz_idle_balance;\n\tunsigned char idle_balance;\n\tlong unsigned int misfit_task_load;\n\tint active_balance;\n\tint push_cpu;\n\tstruct cpu_stop_work active_balance_work;\n\tint cpu;\n\tint online;\n\tstruct list_head cfs_tasks;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct sched_avg avg_rt;\n\tstruct sched_avg avg_dl;\n\tstruct sched_avg avg_irq;\n\tu64 idle_stamp;\n\tu64 avg_idle;\n\tu64 max_idle_balance_cost;\n\tstruct rcuwait hotplug_wait;\n\tu64 prev_irq_time;\n\tu64 prev_steal_time;\n\tu64 prev_steal_time_rq;\n\tlong unsigned int calc_load_update;\n\tlong int calc_load_active;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tcall_single_data_t hrtick_csd;\n\tstruct hrtimer hrtick_timer;\n\tktime_t hrtick_time;\n\tstruct sched_info rq_sched_info;\n\tlong long unsigned int rq_cpu_time;\n\tunsigned int yld_count;\n\tunsigned int sched_count;\n\tunsigned int sched_goidle;\n\tunsigned int ttwu_count;\n\tunsigned int ttwu_local;\n\tstruct cpuidle_state *idle_state;\n\tunsigned int nr_pinned;\n\tunsigned int push_busy;\n\tstruct cpu_stop_work push_work;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct perf_domain {\n\tstruct em_perf_domain *em_pd;\n\tstruct perf_domain *next;\n\tstruct callback_head rcu;\n};\n\nstruct rq_flags {\n\tlong unsigned int flags;\n\tstruct pin_cookie cookie;\n\tunsigned int clock_update_flags;\n};\n\nenum {\n\t__SCHED_FEAT_GENTLE_FAIR_SLEEPERS = 0,\n\t__SCHED_FEAT_START_DEBIT = 1,\n\t__SCHED_FEAT_NEXT_BUDDY = 2,\n\t__SCHED_FEAT_LAST_BUDDY = 3,\n\t__SCHED_FEAT_CACHE_HOT_BUDDY = 4,\n\t__SCHED_FEAT_WAKEUP_PREEMPTION = 5,\n\t__SCHED_FEAT_HRTICK = 6,\n\t__SCHED_FEAT_DOUBLE_TICK = 7,\n\t__SCHED_FEAT_NONTASK_CAPACITY = 8,\n\t__SCHED_FEAT_TTWU_QUEUE = 9,\n\t__SCHED_FEAT_SIS_AVG_CPU = 10,\n\t__SCHED_FEAT_SIS_PROP = 11,\n\t__SCHED_FEAT_WARN_DOUBLE_CLOCK = 12,\n\t__SCHED_FEAT_RT_PUSH_IPI = 13,\n\t__SCHED_FEAT_RT_RUNTIME_SHARE = 14,\n\t__SCHED_FEAT_LB_MIN = 15,\n\t__SCHED_FEAT_ATTACH_AGE_LOAD = 16,\n\t__SCHED_FEAT_WA_IDLE = 17,\n\t__SCHED_FEAT_WA_WEIGHT = 18,\n\t__SCHED_FEAT_WA_BIAS = 19,\n\t__SCHED_FEAT_UTIL_EST = 20,\n\t__SCHED_FEAT_UTIL_EST_FASTUP = 21,\n\t__SCHED_FEAT_NR = 22,\n};\n\nstruct irqtime {\n\tu64 total;\n\tu64 tick_delta;\n\tu64 irq_start_time;\n\tstruct u64_stats_sync sync;\n};\n\nstruct set_affinity_pending;\n\nstruct migration_arg {\n\tstruct task_struct *task;\n\tint dest_cpu;\n\tstruct set_affinity_pending *pending;\n};\n\nstruct set_affinity_pending {\n\trefcount_t refs;\n\tunsigned int stop_pending;\n\tstruct completion done;\n\tstruct cpu_stop_work stop_work;\n\tstruct migration_arg arg;\n};\n\nstruct migration_swap_arg {\n\tstruct task_struct *src_task;\n\tstruct task_struct *dst_task;\n\tint src_cpu;\n\tint dst_cpu;\n};\n\nstruct tick_work {\n\tint cpu;\n\tatomic_t state;\n\tstruct delayed_work work;\n};\n\nstruct cfs_schedulable_data {\n\tstruct task_group *tg;\n\tu64 period;\n\tu64 quota;\n};\n\nenum {\n\tcpuset = 0,\n\tpossible = 1,\n\tfail = 2,\n};\n\nenum tick_dep_bits {\n\tTICK_DEP_BIT_POSIX_TIMER = 0,\n\tTICK_DEP_BIT_PERF_EVENTS = 1,\n\tTICK_DEP_BIT_SCHED = 2,\n\tTICK_DEP_BIT_CLOCK_UNSTABLE = 3,\n\tTICK_DEP_BIT_RCU = 4,\n\tTICK_DEP_BIT_RCU_EXP = 5,\n};\n\nstruct sched_clock_data {\n\tu64 tick_raw;\n\tu64 tick_gtod;\n\tu64 clock;\n};\n\nenum s2idle_states {\n\tS2IDLE_STATE_NONE = 0,\n\tS2IDLE_STATE_ENTER = 1,\n\tS2IDLE_STATE_WAKE = 2,\n};\n\nstruct idle_timer {\n\tstruct hrtimer timer;\n\tint done;\n};\n\nstruct numa_group {\n\trefcount_t refcount;\n\tspinlock_t lock;\n\tint nr_tasks;\n\tpid_t gid;\n\tint active_nodes;\n\tstruct callback_head rcu;\n\tlong unsigned int total_faults;\n\tlong unsigned int max_faults_cpu;\n\tlong unsigned int *faults_cpu;\n\tlong unsigned int faults[0];\n};\n\nstruct update_util_data {\n\tvoid (*func)(struct update_util_data *, u64, unsigned int);\n};\n\nenum numa_topology_type {\n\tNUMA_DIRECT = 0,\n\tNUMA_GLUELESS_MESH = 1,\n\tNUMA_BACKPLANE = 2,\n};\n\nenum numa_faults_stats {\n\tNUMA_MEM = 0,\n\tNUMA_CPU = 1,\n\tNUMA_MEMBUF = 2,\n\tNUMA_CPUBUF = 3,\n};\n\nenum schedutil_type {\n\tFREQUENCY_UTIL = 0,\n\tENERGY_UTIL = 1,\n};\n\nenum numa_type {\n\tnode_has_spare = 0,\n\tnode_fully_busy = 1,\n\tnode_overloaded = 2,\n};\n\nstruct numa_stats {\n\tlong unsigned int load;\n\tlong unsigned int runnable;\n\tlong unsigned int util;\n\tlong unsigned int compute_capacity;\n\tunsigned int nr_running;\n\tunsigned int weight;\n\tenum numa_type node_type;\n\tint idle_cpu;\n};\n\nstruct task_numa_env {\n\tstruct task_struct *p;\n\tint src_cpu;\n\tint src_nid;\n\tint dst_cpu;\n\tint dst_nid;\n\tstruct numa_stats src_stats;\n\tstruct numa_stats dst_stats;\n\tint imbalance_pct;\n\tint dist;\n\tstruct task_struct *best_task;\n\tlong int best_imp;\n\tint best_cpu;\n};\n\nenum fbq_type {\n\tregular = 0,\n\tremote = 1,\n\tall = 2,\n};\n\nenum group_type {\n\tgroup_has_spare = 0,\n\tgroup_fully_busy = 1,\n\tgroup_misfit_task = 2,\n\tgroup_asym_packing = 3,\n\tgroup_imbalanced = 4,\n\tgroup_overloaded = 5,\n};\n\nenum migration_type {\n\tmigrate_load = 0,\n\tmigrate_util = 1,\n\tmigrate_task = 2,\n\tmigrate_misfit = 3,\n};\n\nstruct lb_env {\n\tstruct sched_domain *sd;\n\tstruct rq *src_rq;\n\tint src_cpu;\n\tint dst_cpu;\n\tstruct rq *dst_rq;\n\tstruct cpumask *dst_grpmask;\n\tint new_dst_cpu;\n\tenum cpu_idle_type idle;\n\tlong int imbalance;\n\tstruct cpumask *cpus;\n\tunsigned int flags;\n\tunsigned int loop;\n\tunsigned int loop_break;\n\tunsigned int loop_max;\n\tenum fbq_type fbq_type;\n\tenum migration_type migration_type;\n\tstruct list_head tasks;\n};\n\nstruct sg_lb_stats {\n\tlong unsigned int avg_load;\n\tlong unsigned int group_load;\n\tlong unsigned int group_capacity;\n\tlong unsigned int group_util;\n\tlong unsigned int group_runnable;\n\tunsigned int sum_nr_running;\n\tunsigned int sum_h_nr_running;\n\tunsigned int idle_cpus;\n\tunsigned int group_weight;\n\tenum group_type group_type;\n\tunsigned int group_asym_packing;\n\tlong unsigned int group_misfit_task_load;\n\tunsigned int nr_numa_running;\n\tunsigned int nr_preferred_running;\n};\n\nstruct sd_lb_stats {\n\tstruct sched_group *busiest;\n\tstruct sched_group *local;\n\tlong unsigned int total_load;\n\tlong unsigned int total_capacity;\n\tlong unsigned int avg_load;\n\tunsigned int prefer_sibling;\n\tstruct sg_lb_stats busiest_stat;\n\tstruct sg_lb_stats local_stat;\n};\n\ntypedef struct rt_rq *rt_rq_iter_t;\n\nstruct sd_flag_debug {\n\tunsigned int meta_flags;\n\tchar *name;\n};\n\nstruct s_data {\n\tstruct sched_domain **sd;\n\tstruct root_domain *rd;\n};\n\nenum s_alloc {\n\tsa_rootdomain = 0,\n\tsa_sd = 1,\n\tsa_sd_storage = 2,\n\tsa_none = 3,\n};\n\nenum cpuacct_stat_index {\n\tCPUACCT_STAT_USER = 0,\n\tCPUACCT_STAT_SYSTEM = 1,\n\tCPUACCT_STAT_NSTATS = 2,\n};\n\nstruct cpuacct_usage {\n\tu64 usages[2];\n};\n\nstruct cpuacct {\n\tstruct cgroup_subsys_state css;\n\tstruct cpuacct_usage *cpuusage;\n\tstruct kernel_cpustat *cpustat;\n};\n\nstruct gov_attr_set {\n\tstruct kobject kobj;\n\tstruct list_head policy_list;\n\tstruct mutex update_lock;\n\tint usage_count;\n};\n\nstruct governor_attr {\n\tstruct attribute attr;\n\tssize_t (*show)(struct gov_attr_set *, char *);\n\tssize_t (*store)(struct gov_attr_set *, const char *, size_t);\n};\n\nstruct sugov_tunables {\n\tstruct gov_attr_set attr_set;\n\tunsigned int rate_limit_us;\n};\n\nstruct sugov_policy {\n\tstruct cpufreq_policy *policy;\n\tstruct sugov_tunables *tunables;\n\tstruct list_head tunables_hook;\n\traw_spinlock_t update_lock;\n\tu64 last_freq_update_time;\n\ts64 freq_update_delay_ns;\n\tunsigned int next_freq;\n\tunsigned int cached_raw_freq;\n\tstruct irq_work irq_work;\n\tstruct kthread_work work;\n\tstruct mutex work_lock;\n\tstruct kthread_worker worker;\n\tstruct task_struct *thread;\n\tbool work_in_progress;\n\tbool limits_changed;\n\tbool need_freq_update;\n};\n\nstruct sugov_cpu {\n\tstruct update_util_data update_util;\n\tstruct sugov_policy *sg_policy;\n\tunsigned int cpu;\n\tbool iowait_boost_pending;\n\tunsigned int iowait_boost;\n\tu64 last_update;\n\tlong unsigned int util;\n\tlong unsigned int bw_dl;\n\tlong unsigned int max;\n\tlong unsigned int saved_idle_calls;\n};\n\nenum {\n\tMEMBARRIER_FLAG_SYNC_CORE = 1,\n\tMEMBARRIER_FLAG_RSEQ = 2,\n};\n\nenum membarrier_cmd {\n\tMEMBARRIER_CMD_QUERY = 0,\n\tMEMBARRIER_CMD_GLOBAL = 1,\n\tMEMBARRIER_CMD_GLOBAL_EXPEDITED = 2,\n\tMEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = 4,\n\tMEMBARRIER_CMD_PRIVATE_EXPEDITED = 8,\n\tMEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = 16,\n\tMEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = 32,\n\tMEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = 64,\n\tMEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ = 128,\n\tMEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ = 256,\n\tMEMBARRIER_CMD_SHARED = 1,\n};\n\nenum membarrier_cmd_flag {\n\tMEMBARRIER_CMD_FLAG_CPU = 1,\n};\n\nenum psi_res {\n\tPSI_IO = 0,\n\tPSI_MEM = 1,\n\tPSI_CPU = 2,\n\tNR_PSI_RESOURCES = 3,\n};\n\nstruct psi_window {\n\tu64 size;\n\tu64 start_time;\n\tu64 start_value;\n\tu64 prev_growth;\n};\n\nstruct psi_trigger {\n\tenum psi_states state;\n\tu64 threshold;\n\tstruct list_head node;\n\tstruct psi_group *group;\n\twait_queue_head_t event_wait;\n\tint event;\n\tstruct psi_window win;\n\tu64 last_event_time;\n\tstruct kref refcount;\n};\n\nstruct ww_acquire_ctx;\n\nstruct ww_mutex {\n\tstruct mutex base;\n\tstruct ww_acquire_ctx *ctx;\n};\n\nstruct ww_acquire_ctx {\n\tstruct task_struct *task;\n\tlong unsigned int stamp;\n\tunsigned int acquired;\n\tshort unsigned int wounded;\n\tshort unsigned int is_wait_die;\n};\n\nstruct mutex_waiter {\n\tstruct list_head list;\n\tstruct task_struct *task;\n\tstruct ww_acquire_ctx *ww_ctx;\n};\n\nenum mutex_trylock_recursive_enum {\n\tMUTEX_TRYLOCK_FAILED = 0,\n\tMUTEX_TRYLOCK_SUCCESS = 1,\n\tMUTEX_TRYLOCK_RECURSIVE = 2,\n};\n\nstruct semaphore_waiter {\n\tstruct list_head list;\n\tstruct task_struct *task;\n\tbool up;\n};\n\nenum rwsem_waiter_type {\n\tRWSEM_WAITING_FOR_WRITE = 0,\n\tRWSEM_WAITING_FOR_READ = 1,\n};\n\nstruct rwsem_waiter {\n\tstruct list_head list;\n\tstruct task_struct *task;\n\tenum rwsem_waiter_type type;\n\tlong unsigned int timeout;\n};\n\nenum rwsem_wake_type {\n\tRWSEM_WAKE_ANY = 0,\n\tRWSEM_WAKE_READERS = 1,\n\tRWSEM_WAKE_READ_OWNED = 2,\n};\n\nenum writer_wait_state {\n\tWRITER_NOT_FIRST = 0,\n\tWRITER_FIRST = 1,\n\tWRITER_HANDOFF = 2,\n};\n\nenum owner_state {\n\tOWNER_NULL = 1,\n\tOWNER_WRITER = 2,\n\tOWNER_READER = 4,\n\tOWNER_NONSPINNABLE = 8,\n};\n\nstruct optimistic_spin_node {\n\tstruct optimistic_spin_node *next;\n\tstruct optimistic_spin_node *prev;\n\tint locked;\n\tint cpu;\n};\n\nstruct mcs_spinlock {\n\tstruct mcs_spinlock *next;\n\tint locked;\n\tint count;\n};\n\nstruct qnode {\n\tstruct mcs_spinlock mcs;\n\tlong int reserved[2];\n};\n\nenum vcpu_state {\n\tvcpu_running = 0,\n\tvcpu_halted = 1,\n\tvcpu_hashed = 2,\n};\n\nstruct pv_node {\n\tstruct mcs_spinlock mcs;\n\tint cpu;\n\tu8 state;\n};\n\nstruct pv_hash_entry {\n\tstruct qspinlock *lock;\n\tstruct pv_node *node;\n};\n\nstruct hrtimer_sleeper {\n\tstruct hrtimer timer;\n\tstruct task_struct *task;\n};\n\nstruct rt_mutex;\n\nstruct rt_mutex_waiter {\n\tstruct rb_node tree_entry;\n\tstruct rb_node pi_tree_entry;\n\tstruct task_struct *task;\n\tstruct rt_mutex *lock;\n\tint prio;\n\tu64 deadline;\n};\n\nstruct rt_mutex {\n\traw_spinlock_t wait_lock;\n\tstruct rb_root_cached waiters;\n\tstruct task_struct *owner;\n};\n\nenum rtmutex_chainwalk {\n\tRT_MUTEX_MIN_CHAINWALK = 0,\n\tRT_MUTEX_FULL_CHAINWALK = 1,\n};\n\nenum pm_qos_req_action {\n\tPM_QOS_ADD_REQ = 0,\n\tPM_QOS_UPDATE_REQ = 1,\n\tPM_QOS_REMOVE_REQ = 2,\n};\n\ntypedef int suspend_state_t;\n\nenum suspend_stat_step {\n\tSUSPEND_FREEZE = 1,\n\tSUSPEND_PREPARE = 2,\n\tSUSPEND_SUSPEND = 3,\n\tSUSPEND_SUSPEND_LATE = 4,\n\tSUSPEND_SUSPEND_NOIRQ = 5,\n\tSUSPEND_RESUME_NOIRQ = 6,\n\tSUSPEND_RESUME_EARLY = 7,\n\tSUSPEND_RESUME = 8,\n};\n\nstruct suspend_stats {\n\tint success;\n\tint fail;\n\tint failed_freeze;\n\tint failed_prepare;\n\tint failed_suspend;\n\tint failed_suspend_late;\n\tint failed_suspend_noirq;\n\tint failed_resume;\n\tint failed_resume_early;\n\tint failed_resume_noirq;\n\tint last_failed_dev;\n\tchar failed_devs[80];\n\tint last_failed_errno;\n\tint errno[2];\n\tint last_failed_step;\n\tenum suspend_stat_step failed_steps[2];\n};\n\nenum {\n\tTEST_NONE = 0,\n\tTEST_CORE = 1,\n\tTEST_CPUS = 2,\n\tTEST_PLATFORM = 3,\n\tTEST_DEVICES = 4,\n\tTEST_FREEZER = 5,\n\t__TEST_AFTER_LAST = 6,\n};\n\nstruct pm_vt_switch {\n\tstruct list_head head;\n\tstruct device *dev;\n\tbool required;\n};\n\nstruct platform_suspend_ops {\n\tint (*valid)(suspend_state_t);\n\tint (*begin)(suspend_state_t);\n\tint (*prepare)();\n\tint (*prepare_late)();\n\tint (*enter)(suspend_state_t);\n\tvoid (*wake)();\n\tvoid (*finish)();\n\tbool (*suspend_again)();\n\tvoid (*end)();\n\tvoid (*recover)();\n};\n\nstruct platform_s2idle_ops {\n\tint (*begin)();\n\tint (*prepare)();\n\tint (*prepare_late)();\n\tbool (*wake)();\n\tvoid (*restore_early)();\n\tvoid (*restore)();\n\tvoid (*end)();\n};\n\ntypedef __u64 timeu64_t;\n\nstruct rtc_wkalrm {\n\tunsigned char enabled;\n\tunsigned char pending;\n\tstruct rtc_time time;\n};\n\nstruct rtc_class_ops {\n\tint (*ioctl)(struct device *, unsigned int, long unsigned int);\n\tint (*read_time)(struct device *, struct rtc_time *);\n\tint (*set_time)(struct device *, struct rtc_time *);\n\tint (*read_alarm)(struct device *, struct rtc_wkalrm *);\n\tint (*set_alarm)(struct device *, struct rtc_wkalrm *);\n\tint (*proc)(struct device *, struct seq_file *);\n\tint (*alarm_irq_enable)(struct device *, unsigned int);\n\tint (*read_offset)(struct device *, long int *);\n\tint (*set_offset)(struct device *, long int);\n};\n\nstruct rtc_device;\n\nstruct rtc_timer {\n\tstruct timerqueue_node node;\n\tktime_t period;\n\tvoid (*func)(struct rtc_device *);\n\tstruct rtc_device *rtc;\n\tint enabled;\n};\n\nstruct rtc_device {\n\tstruct device dev;\n\tstruct module *owner;\n\tint id;\n\tconst struct rtc_class_ops *ops;\n\tstruct mutex ops_lock;\n\tstruct cdev char_dev;\n\tlong unsigned int flags;\n\tlong unsigned int irq_data;\n\tspinlock_t irq_lock;\n\twait_queue_head_t irq_queue;\n\tstruct fasync_struct *async_queue;\n\tint irq_freq;\n\tint max_user_freq;\n\tstruct timerqueue_head timerqueue;\n\tstruct rtc_timer aie_timer;\n\tstruct rtc_timer uie_rtctimer;\n\tstruct hrtimer pie_timer;\n\tint pie_enabled;\n\tstruct work_struct irqwork;\n\tint uie_unsupported;\n\tlong unsigned int set_offset_nsec;\n\ttime64_t range_min;\n\ttimeu64_t range_max;\n\ttime64_t start_secs;\n\ttime64_t offset_secs;\n\tbool set_start_time;\n};\n\nstruct platform_hibernation_ops {\n\tint (*begin)(pm_message_t);\n\tvoid (*end)();\n\tint (*pre_snapshot)();\n\tvoid (*finish)();\n\tint (*prepare)();\n\tint (*enter)();\n\tvoid (*leave)();\n\tint (*pre_restore)();\n\tvoid (*restore_cleanup)();\n\tvoid (*recover)();\n};\n\nenum {\n\tHIBERNATION_INVALID = 0,\n\tHIBERNATION_PLATFORM = 1,\n\tHIBERNATION_SHUTDOWN = 2,\n\tHIBERNATION_REBOOT = 3,\n\tHIBERNATION_SUSPEND = 4,\n\tHIBERNATION_TEST_RESUME = 5,\n\t__HIBERNATION_AFTER_LAST = 6,\n};\n\nstruct pbe {\n\tvoid *address;\n\tvoid *orig_address;\n\tstruct pbe *next;\n};\n\nstruct swsusp_info {\n\tstruct new_utsname uts;\n\tu32 version_code;\n\tlong unsigned int num_physpages;\n\tint cpus;\n\tlong unsigned int image_pages;\n\tlong unsigned int pages;\n\tlong unsigned int size;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct snapshot_handle {\n\tunsigned int cur;\n\tvoid *buffer;\n\tint sync_read;\n};\n\nstruct linked_page {\n\tstruct linked_page *next;\n\tchar data[4088];\n};\n\nstruct chain_allocator {\n\tstruct linked_page *chain;\n\tunsigned int used_space;\n\tgfp_t gfp_mask;\n\tint safe_needed;\n};\n\nstruct rtree_node {\n\tstruct list_head list;\n\tlong unsigned int *data;\n};\n\nstruct mem_zone_bm_rtree {\n\tstruct list_head list;\n\tstruct list_head nodes;\n\tstruct list_head leaves;\n\tlong unsigned int start_pfn;\n\tlong unsigned int end_pfn;\n\tstruct rtree_node *rtree;\n\tint levels;\n\tunsigned int blocks;\n};\n\nstruct bm_position {\n\tstruct mem_zone_bm_rtree *zone;\n\tstruct rtree_node *node;\n\tlong unsigned int node_pfn;\n\tint node_bit;\n};\n\nstruct memory_bitmap {\n\tstruct list_head zones;\n\tstruct linked_page *p_list;\n\tstruct bm_position cur;\n};\n\nstruct mem_extent {\n\tstruct list_head hook;\n\tlong unsigned int start;\n\tlong unsigned int end;\n};\n\nstruct nosave_region {\n\tstruct list_head list;\n\tlong unsigned int start_pfn;\n\tlong unsigned int end_pfn;\n};\n\ntypedef struct {\n\tlong unsigned int val;\n} swp_entry_t;\n\nenum {\n\tBIO_NO_PAGE_REF = 0,\n\tBIO_CLONED = 1,\n\tBIO_BOUNCED = 2,\n\tBIO_WORKINGSET = 3,\n\tBIO_QUIET = 4,\n\tBIO_CHAIN = 5,\n\tBIO_REFFED = 6,\n\tBIO_THROTTLED = 7,\n\tBIO_TRACE_COMPLETION = 8,\n\tBIO_CGROUP_ACCT = 9,\n\tBIO_TRACKED = 10,\n\tBIO_FLAG_LAST = 11,\n};\n\nenum req_opf {\n\tREQ_OP_READ = 0,\n\tREQ_OP_WRITE = 1,\n\tREQ_OP_FLUSH = 2,\n\tREQ_OP_DISCARD = 3,\n\tREQ_OP_SECURE_ERASE = 5,\n\tREQ_OP_WRITE_SAME = 7,\n\tREQ_OP_WRITE_ZEROES = 9,\n\tREQ_OP_ZONE_OPEN = 10,\n\tREQ_OP_ZONE_CLOSE = 11,\n\tREQ_OP_ZONE_FINISH = 12,\n\tREQ_OP_ZONE_APPEND = 13,\n\tREQ_OP_ZONE_RESET = 15,\n\tREQ_OP_ZONE_RESET_ALL = 17,\n\tREQ_OP_SCSI_IN = 32,\n\tREQ_OP_SCSI_OUT = 33,\n\tREQ_OP_DRV_IN = 34,\n\tREQ_OP_DRV_OUT = 35,\n\tREQ_OP_LAST = 36,\n};\n\nenum req_flag_bits {\n\t__REQ_FAILFAST_DEV = 8,\n\t__REQ_FAILFAST_TRANSPORT = 9,\n\t__REQ_FAILFAST_DRIVER = 10,\n\t__REQ_SYNC = 11,\n\t__REQ_META = 12,\n\t__REQ_PRIO = 13,\n\t__REQ_NOMERGE = 14,\n\t__REQ_IDLE = 15,\n\t__REQ_INTEGRITY = 16,\n\t__REQ_FUA = 17,\n\t__REQ_PREFLUSH = 18,\n\t__REQ_RAHEAD = 19,\n\t__REQ_BACKGROUND = 20,\n\t__REQ_NOWAIT = 21,\n\t__REQ_CGROUP_PUNT = 22,\n\t__REQ_NOUNMAP = 23,\n\t__REQ_HIPRI = 24,\n\t__REQ_DRV = 25,\n\t__REQ_SWAP = 26,\n\t__REQ_NR_BITS = 27,\n};\n\nstruct swap_map_page {\n\tsector_t entries[511];\n\tsector_t next_swap;\n};\n\nstruct swap_map_page_list {\n\tstruct swap_map_page *map;\n\tstruct swap_map_page_list *next;\n};\n\nstruct swap_map_handle {\n\tstruct swap_map_page *cur;\n\tstruct swap_map_page_list *maps;\n\tsector_t cur_swap;\n\tsector_t first_sector;\n\tunsigned int k;\n\tlong unsigned int reqd_free_pages;\n\tu32 crc32;\n};\n\nstruct swsusp_header {\n\tchar reserved[4060];\n\tu32 crc32;\n\tsector_t image;\n\tunsigned int flags;\n\tchar orig_sig[10];\n\tchar sig[10];\n};\n\nstruct swsusp_extent {\n\tstruct rb_node node;\n\tlong unsigned int start;\n\tlong unsigned int end;\n};\n\nstruct hib_bio_batch {\n\tatomic_t count;\n\twait_queue_head_t wait;\n\tblk_status_t error;\n\tstruct blk_plug plug;\n};\n\nstruct crc_data {\n\tstruct task_struct *thr;\n\tatomic_t ready;\n\tatomic_t stop;\n\tunsigned int run_threads;\n\twait_queue_head_t go;\n\twait_queue_head_t done;\n\tu32 *crc32;\n\tsize_t *unc_len[3];\n\tunsigned char *unc[3];\n};\n\nstruct cmp_data {\n\tstruct task_struct *thr;\n\tatomic_t ready;\n\tatomic_t stop;\n\tint ret;\n\twait_queue_head_t go;\n\twait_queue_head_t done;\n\tsize_t unc_len;\n\tsize_t cmp_len;\n\tunsigned char unc[131072];\n\tunsigned char cmp[143360];\n\tunsigned char wrk[16384];\n};\n\nstruct dec_data {\n\tstruct task_struct *thr;\n\tatomic_t ready;\n\tatomic_t stop;\n\tint ret;\n\twait_queue_head_t go;\n\twait_queue_head_t done;\n\tsize_t unc_len;\n\tsize_t cmp_len;\n\tunsigned char unc[131072];\n\tunsigned char cmp[143360];\n};\n\ntypedef s64 compat_loff_t;\n\nstruct resume_swap_area {\n\t__kernel_loff_t offset;\n\t__u32 dev;\n} __attribute__((packed));\n\nstruct snapshot_data {\n\tstruct snapshot_handle handle;\n\tint swap;\n\tint mode;\n\tbool frozen;\n\tbool ready;\n\tbool platform_support;\n\tbool free_bitmaps;\n\tdev_t dev;\n};\n\nstruct compat_resume_swap_area {\n\tcompat_loff_t offset;\n\tu32 dev;\n} __attribute__((packed));\n\nstruct sysrq_key_op {\n\tvoid (* const handler)(int);\n\tconst char * const help_msg;\n\tconst char * const action_msg;\n\tconst int enable_mask;\n};\n\nstruct em_data_callback {\n\tint (*active_power)(long unsigned int *, long unsigned int *, struct device *);\n};\n\nstruct dev_printk_info {\n\tchar subsystem[16];\n\tchar device[48];\n};\n\nstruct kmsg_dumper {\n\tstruct list_head list;\n\tvoid (*dump)(struct kmsg_dumper *, enum kmsg_dump_reason);\n\tenum kmsg_dump_reason max_reason;\n\tbool active;\n\tbool registered;\n\tu32 cur_idx;\n\tu32 next_idx;\n\tu64 cur_seq;\n\tu64 next_seq;\n};\n\nstruct trace_event_raw_console {\n\tstruct trace_entry ent;\n\tu32 __data_loc_msg;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_console {\n\tu32 msg;\n};\n\ntypedef void (*btf_trace_console)(void *, const char *, size_t);\n\nstruct printk_info {\n\tu64 seq;\n\tu64 ts_nsec;\n\tu16 text_len;\n\tu8 facility;\n\tu8 flags: 5;\n\tu8 level: 3;\n\tu32 caller_id;\n\tstruct dev_printk_info dev_info;\n};\n\nstruct printk_record {\n\tstruct printk_info *info;\n\tchar *text_buf;\n\tunsigned int text_buf_size;\n};\n\nstruct prb_data_blk_lpos {\n\tlong unsigned int begin;\n\tlong unsigned int next;\n};\n\nstruct prb_desc {\n\tatomic_long_t state_var;\n\tstruct prb_data_blk_lpos text_blk_lpos;\n};\n\nstruct prb_data_ring {\n\tunsigned int size_bits;\n\tchar *data;\n\tatomic_long_t head_lpos;\n\tatomic_long_t tail_lpos;\n};\n\nstruct prb_desc_ring {\n\tunsigned int count_bits;\n\tstruct prb_desc *descs;\n\tstruct printk_info *infos;\n\tatomic_long_t head_id;\n\tatomic_long_t tail_id;\n};\n\nstruct printk_ringbuffer {\n\tstruct prb_desc_ring desc_ring;\n\tstruct prb_data_ring text_data_ring;\n\tatomic_long_t fail;\n};\n\nstruct prb_reserved_entry {\n\tstruct printk_ringbuffer *rb;\n\tlong unsigned int irqflags;\n\tlong unsigned int id;\n\tunsigned int text_space;\n};\n\nenum desc_state {\n\tdesc_miss = 4294967295,\n\tdesc_reserved = 0,\n\tdesc_committed = 1,\n\tdesc_finalized = 2,\n\tdesc_reusable = 3,\n};\n\nstruct console_cmdline {\n\tchar name[16];\n\tint index;\n\tbool user_specified;\n\tchar *options;\n\tchar *brl_options;\n};\n\nenum devkmsg_log_bits {\n\t__DEVKMSG_LOG_BIT_ON = 0,\n\t__DEVKMSG_LOG_BIT_OFF = 1,\n\t__DEVKMSG_LOG_BIT_LOCK = 2,\n};\n\nenum devkmsg_log_masks {\n\tDEVKMSG_LOG_MASK_ON = 1,\n\tDEVKMSG_LOG_MASK_OFF = 2,\n\tDEVKMSG_LOG_MASK_LOCK = 4,\n};\n\nenum con_msg_format_flags {\n\tMSG_FORMAT_DEFAULT = 0,\n\tMSG_FORMAT_SYSLOG = 1,\n};\n\nenum log_flags {\n\tLOG_NEWLINE = 2,\n\tLOG_CONT = 8,\n};\n\nstruct devkmsg_user {\n\tu64 seq;\n\tstruct ratelimit_state rs;\n\tstruct mutex lock;\n\tchar buf[8192];\n\tstruct printk_info info;\n\tchar text_buf[8192];\n\tstruct printk_record record;\n};\n\nstruct printk_safe_seq_buf {\n\tatomic_t len;\n\tatomic_t message_lost;\n\tstruct irq_work work;\n\tunsigned char buffer[4064];\n};\n\nstruct dev_printk_info___2;\n\nstruct prb_data_block {\n\tlong unsigned int id;\n\tchar data[0];\n};\n\nenum {\n\tIRQS_AUTODETECT = 1,\n\tIRQS_SPURIOUS_DISABLED = 2,\n\tIRQS_POLL_INPROGRESS = 8,\n\tIRQS_ONESHOT = 32,\n\tIRQS_REPLAY = 64,\n\tIRQS_WAITING = 128,\n\tIRQS_PENDING = 512,\n\tIRQS_SUSPENDED = 2048,\n\tIRQS_TIMINGS = 4096,\n\tIRQS_NMI = 8192,\n};\n\nenum {\n\t_IRQ_DEFAULT_INIT_FLAGS = 0,\n\t_IRQ_PER_CPU = 512,\n\t_IRQ_LEVEL = 256,\n\t_IRQ_NOPROBE = 1024,\n\t_IRQ_NOREQUEST = 2048,\n\t_IRQ_NOTHREAD = 65536,\n\t_IRQ_NOAUTOEN = 4096,\n\t_IRQ_MOVE_PCNTXT = 16384,\n\t_IRQ_NO_BALANCING = 8192,\n\t_IRQ_NESTED_THREAD = 32768,\n\t_IRQ_PER_CPU_DEVID = 131072,\n\t_IRQ_IS_POLLED = 262144,\n\t_IRQ_DISABLE_UNLAZY = 524288,\n\t_IRQ_HIDDEN = 1048576,\n\t_IRQF_MODIFY_MASK = 2096911,\n};\n\nenum {\n\tIRQTF_RUNTHREAD = 0,\n\tIRQTF_WARNED = 1,\n\tIRQTF_AFFINITY = 2,\n\tIRQTF_FORCED_THREAD = 3,\n};\n\nenum {\n\tIRQC_IS_HARDIRQ = 0,\n\tIRQC_IS_NESTED = 1,\n};\n\nenum {\n\tIRQ_STARTUP_NORMAL = 0,\n\tIRQ_STARTUP_MANAGED = 1,\n\tIRQ_STARTUP_ABORT = 2,\n};\n\nstruct irq_devres {\n\tunsigned int irq;\n\tvoid *dev_id;\n};\n\nstruct irq_desc_devres {\n\tunsigned int from;\n\tunsigned int cnt;\n};\n\nstruct irqchip_fwid {\n\tstruct fwnode_handle fwnode;\n\tunsigned int type;\n\tchar *name;\n\tphys_addr_t *pa;\n};\n\nenum {\n\tAFFINITY = 0,\n\tAFFINITY_LIST = 1,\n\tEFFECTIVE = 2,\n\tEFFECTIVE_LIST = 3,\n};\n\nstruct irq_affinity {\n\tunsigned int pre_vectors;\n\tunsigned int post_vectors;\n\tunsigned int nr_sets;\n\tunsigned int set_size[4];\n\tvoid (*calc_sets)(struct irq_affinity *, unsigned int);\n\tvoid *priv;\n};\n\nstruct node_vectors {\n\tunsigned int id;\n\tunion {\n\t\tunsigned int nvectors;\n\t\tunsigned int ncpus;\n\t};\n};\n\nstruct cpumap {\n\tunsigned int available;\n\tunsigned int allocated;\n\tunsigned int managed;\n\tunsigned int managed_allocated;\n\tbool initialized;\n\tbool online;\n\tlong unsigned int alloc_map[4];\n\tlong unsigned int managed_map[4];\n};\n\nstruct irq_matrix___2 {\n\tunsigned int matrix_bits;\n\tunsigned int alloc_start;\n\tunsigned int alloc_end;\n\tunsigned int alloc_size;\n\tunsigned int global_available;\n\tunsigned int global_reserved;\n\tunsigned int systembits_inalloc;\n\tunsigned int total_allocated;\n\tunsigned int online_maps;\n\tstruct cpumap *maps;\n\tlong unsigned int scratch_map[4];\n\tlong unsigned int system_map[4];\n};\n\nstruct trace_event_raw_irq_matrix_global {\n\tstruct trace_entry ent;\n\tunsigned int online_maps;\n\tunsigned int global_available;\n\tunsigned int global_reserved;\n\tunsigned int total_allocated;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_irq_matrix_global_update {\n\tstruct trace_entry ent;\n\tint bit;\n\tunsigned int online_maps;\n\tunsigned int global_available;\n\tunsigned int global_reserved;\n\tunsigned int total_allocated;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_irq_matrix_cpu {\n\tstruct trace_entry ent;\n\tint bit;\n\tunsigned int cpu;\n\tbool online;\n\tunsigned int available;\n\tunsigned int allocated;\n\tunsigned int managed;\n\tunsigned int online_maps;\n\tunsigned int global_available;\n\tunsigned int global_reserved;\n\tunsigned int total_allocated;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_irq_matrix_global {};\n\nstruct trace_event_data_offsets_irq_matrix_global_update {};\n\nstruct trace_event_data_offsets_irq_matrix_cpu {};\n\ntypedef void (*btf_trace_irq_matrix_online)(void *, struct irq_matrix___2 *);\n\ntypedef void (*btf_trace_irq_matrix_offline)(void *, struct irq_matrix___2 *);\n\ntypedef void (*btf_trace_irq_matrix_reserve)(void *, struct irq_matrix___2 *);\n\ntypedef void (*btf_trace_irq_matrix_remove_reserved)(void *, struct irq_matrix___2 *);\n\ntypedef void (*btf_trace_irq_matrix_assign_system)(void *, int, struct irq_matrix___2 *);\n\ntypedef void (*btf_trace_irq_matrix_alloc_reserved)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);\n\ntypedef void (*btf_trace_irq_matrix_reserve_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);\n\ntypedef void (*btf_trace_irq_matrix_remove_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);\n\ntypedef void (*btf_trace_irq_matrix_alloc_managed)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);\n\ntypedef void (*btf_trace_irq_matrix_assign)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);\n\ntypedef void (*btf_trace_irq_matrix_alloc)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);\n\ntypedef void (*btf_trace_irq_matrix_free)(void *, int, unsigned int, struct irq_matrix___2 *, struct cpumap *);\n\ntypedef void (*call_rcu_func_t)(struct callback_head *, rcu_callback_t);\n\nstruct rcu_synchronize {\n\tstruct callback_head head;\n\tstruct completion completion;\n};\n\nstruct trace_event_raw_rcu_utilization {\n\tstruct trace_entry ent;\n\tconst char *s;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_rcu_utilization {};\n\ntypedef void (*btf_trace_rcu_utilization)(void *, const char *);\n\nstruct rcu_tasks;\n\ntypedef void (*rcu_tasks_gp_func_t)(struct rcu_tasks *);\n\ntypedef void (*pregp_func_t)();\n\ntypedef void (*pertask_func_t)(struct task_struct *, struct list_head *);\n\ntypedef void (*postscan_func_t)(struct list_head *);\n\ntypedef void (*holdouts_func_t)(struct list_head *, bool, bool *);\n\ntypedef void (*postgp_func_t)(struct rcu_tasks *);\n\nstruct rcu_tasks {\n\tstruct callback_head *cbs_head;\n\tstruct callback_head **cbs_tail;\n\tstruct wait_queue_head cbs_wq;\n\traw_spinlock_t cbs_lock;\n\tint gp_state;\n\tint gp_sleep;\n\tint init_fract;\n\tlong unsigned int gp_jiffies;\n\tlong unsigned int gp_start;\n\tlong unsigned int n_gps;\n\tlong unsigned int n_ipis;\n\tlong unsigned int n_ipis_fails;\n\tstruct task_struct *kthread_ptr;\n\trcu_tasks_gp_func_t gp_func;\n\tpregp_func_t pregp_func;\n\tpertask_func_t pertask_func;\n\tpostscan_func_t postscan_func;\n\tholdouts_func_t holdouts_func;\n\tpostgp_func_t postgp_func;\n\tcall_rcu_func_t call_func;\n\tchar *name;\n\tchar *kname;\n};\n\nenum {\n\tGP_IDLE = 0,\n\tGP_ENTER = 1,\n\tGP_PASSED = 2,\n\tGP_EXIT = 3,\n\tGP_REPLAY = 4,\n};\n\nstruct rcu_cblist {\n\tstruct callback_head *head;\n\tstruct callback_head **tail;\n\tlong int len;\n};\n\nenum rcutorture_type {\n\tRCU_FLAVOR = 0,\n\tRCU_TASKS_FLAVOR = 1,\n\tRCU_TASKS_RUDE_FLAVOR = 2,\n\tRCU_TASKS_TRACING_FLAVOR = 3,\n\tRCU_TRIVIAL_FLAVOR = 4,\n\tSRCU_FLAVOR = 5,\n\tINVALID_RCU_FLAVOR = 6,\n};\n\nstruct rcu_exp_work {\n\tlong unsigned int rew_s;\n\tstruct work_struct rew_work;\n};\n\nstruct rcu_node {\n\traw_spinlock_t lock;\n\tlong unsigned int gp_seq;\n\tlong unsigned int gp_seq_needed;\n\tlong unsigned int completedqs;\n\tlong unsigned int qsmask;\n\tlong unsigned int rcu_gp_init_mask;\n\tlong unsigned int qsmaskinit;\n\tlong unsigned int qsmaskinitnext;\n\tlong unsigned int ofl_seq;\n\tlong unsigned int expmask;\n\tlong unsigned int expmaskinit;\n\tlong unsigned int expmaskinitnext;\n\tlong unsigned int cbovldmask;\n\tlong unsigned int ffmask;\n\tlong unsigned int grpmask;\n\tint grplo;\n\tint grphi;\n\tu8 grpnum;\n\tu8 level;\n\tbool wait_blkd_tasks;\n\tstruct rcu_node *parent;\n\tstruct list_head blkd_tasks;\n\tstruct list_head *gp_tasks;\n\tstruct list_head *exp_tasks;\n\tstruct list_head *boost_tasks;\n\tstruct rt_mutex boost_mtx;\n\tlong unsigned int boost_time;\n\tstruct task_struct *boost_kthread_task;\n\tunsigned int boost_kthread_status;\n\tstruct swait_queue_head nocb_gp_wq[2];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\traw_spinlock_t fqslock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tspinlock_t exp_lock;\n\tlong unsigned int exp_seq_rq;\n\twait_queue_head_t exp_wq[4];\n\tstruct rcu_exp_work rew;\n\tbool exp_need_flush;\n\tlong: 56;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nunion rcu_noqs {\n\tstruct {\n\t\tu8 norm;\n\t\tu8 exp;\n\t} b;\n\tu16 s;\n};\n\nstruct rcu_data {\n\tlong unsigned int gp_seq;\n\tlong unsigned int gp_seq_needed;\n\tunion rcu_noqs cpu_no_qs;\n\tbool core_needs_qs;\n\tbool beenonline;\n\tbool gpwrap;\n\tbool exp_deferred_qs;\n\tbool cpu_started;\n\tstruct rcu_node *mynode;\n\tlong unsigned int grpmask;\n\tlong unsigned int ticks_this_gp;\n\tstruct irq_work defer_qs_iw;\n\tbool defer_qs_iw_pending;\n\tstruct work_struct strict_work;\n\tstruct rcu_segcblist cblist;\n\tlong int qlen_last_fqs_check;\n\tlong unsigned int n_cbs_invoked;\n\tlong unsigned int n_force_qs_snap;\n\tlong int blimit;\n\tint dynticks_snap;\n\tlong int dynticks_nesting;\n\tlong int dynticks_nmi_nesting;\n\tatomic_t dynticks;\n\tbool rcu_need_heavy_qs;\n\tbool rcu_urgent_qs;\n\tbool rcu_forced_tick;\n\tbool rcu_forced_tick_exp;\n\tstruct callback_head barrier_head;\n\tint exp_dynticks_snap;\n\tstruct swait_queue_head nocb_cb_wq;\n\tstruct task_struct *nocb_gp_kthread;\n\traw_spinlock_t nocb_lock;\n\tatomic_t nocb_lock_contended;\n\tint nocb_defer_wakeup;\n\tstruct timer_list nocb_timer;\n\tlong unsigned int nocb_gp_adv_time;\n\traw_spinlock_t nocb_bypass_lock;\n\tstruct rcu_cblist nocb_bypass;\n\tlong unsigned int nocb_bypass_first;\n\tlong unsigned int nocb_nobypass_last;\n\tint nocb_nobypass_count;\n\tlong: 32;\n\tlong: 64;\n\traw_spinlock_t nocb_gp_lock;\n\tstruct timer_list nocb_bypass_timer;\n\tu8 nocb_gp_sleep;\n\tu8 nocb_gp_bypass;\n\tu8 nocb_gp_gp;\n\tlong unsigned int nocb_gp_seq;\n\tlong unsigned int nocb_gp_loops;\n\tstruct swait_queue_head nocb_gp_wq;\n\tbool nocb_cb_sleep;\n\tstruct task_struct *nocb_cb_kthread;\n\tstruct rcu_data *nocb_next_cb_rdp;\n\tlong: 64;\n\tstruct rcu_data *nocb_gp_rdp;\n\tstruct task_struct *rcu_cpu_kthread_task;\n\tunsigned int rcu_cpu_kthread_status;\n\tchar rcu_cpu_has_work;\n\tunsigned int softirq_snap;\n\tstruct irq_work rcu_iw;\n\tbool rcu_iw_pending;\n\tlong unsigned int rcu_iw_gp_seq;\n\tlong unsigned int rcu_ofl_gp_seq;\n\tshort int rcu_ofl_gp_flags;\n\tlong unsigned int rcu_onl_gp_seq;\n\tshort int rcu_onl_gp_flags;\n\tlong unsigned int last_fqs_resched;\n\tint cpu;\n\tlong: 32;\n\tlong: 64;\n};\n\nstruct rcu_state {\n\tstruct rcu_node node[521];\n\tstruct rcu_node *level[4];\n\tint ncpus;\n\tint n_online_cpus;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tu8 boost;\n\tlong unsigned int gp_seq;\n\tlong unsigned int gp_max;\n\tstruct task_struct *gp_kthread;\n\tstruct swait_queue_head gp_wq;\n\tshort int gp_flags;\n\tshort int gp_state;\n\tlong unsigned int gp_wake_time;\n\tlong unsigned int gp_wake_seq;\n\tstruct mutex barrier_mutex;\n\tatomic_t barrier_cpu_count;\n\tstruct completion barrier_completion;\n\tlong unsigned int barrier_sequence;\n\tstruct mutex exp_mutex;\n\tstruct mutex exp_wake_mutex;\n\tlong unsigned int expedited_sequence;\n\tatomic_t expedited_need_qs;\n\tstruct swait_queue_head expedited_wq;\n\tint ncpus_snap;\n\tu8 cbovld;\n\tu8 cbovldnext;\n\tlong unsigned int jiffies_force_qs;\n\tlong unsigned int jiffies_kick_kthreads;\n\tlong unsigned int n_force_qs;\n\tlong unsigned int gp_start;\n\tlong unsigned int gp_end;\n\tlong unsigned int gp_activity;\n\tlong unsigned int gp_req_activity;\n\tlong unsigned int jiffies_stall;\n\tlong unsigned int jiffies_resched;\n\tlong unsigned int n_force_qs_gpstart;\n\tconst char *name;\n\tchar abbr;\n\tlong: 56;\n\tlong: 64;\n\tlong: 64;\n\traw_spinlock_t ofl_lock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct kvfree_rcu_bulk_data {\n\tlong unsigned int nr_records;\n\tstruct kvfree_rcu_bulk_data *next;\n\tvoid *records[0];\n};\n\nstruct kfree_rcu_cpu;\n\nstruct kfree_rcu_cpu_work {\n\tstruct rcu_work rcu_work;\n\tstruct callback_head *head_free;\n\tstruct kvfree_rcu_bulk_data *bkvhead_free[2];\n\tstruct kfree_rcu_cpu *krcp;\n};\n\nstruct kfree_rcu_cpu {\n\tstruct callback_head *head;\n\tstruct kvfree_rcu_bulk_data *bkvhead[2];\n\tstruct kfree_rcu_cpu_work krw_arr[2];\n\traw_spinlock_t lock;\n\tstruct delayed_work monitor_work;\n\tbool monitor_todo;\n\tbool initialized;\n\tint count;\n\tstruct work_struct page_cache_work;\n\tatomic_t work_in_progress;\n\tstruct hrtimer hrtimer;\n\tstruct llist_head bkvcache;\n\tint nr_bkv_objs;\n};\n\nstruct klp_func {\n\tconst char *old_name;\n\tvoid *new_func;\n\tlong unsigned int old_sympos;\n\tvoid *old_func;\n\tstruct kobject kobj;\n\tstruct list_head node;\n\tstruct list_head stack_node;\n\tlong unsigned int old_size;\n\tlong unsigned int new_size;\n\tbool nop;\n\tbool patched;\n\tbool transition;\n};\n\nstruct klp_object;\n\nstruct klp_callbacks {\n\tint (*pre_patch)(struct klp_object *);\n\tvoid (*post_patch)(struct klp_object *);\n\tvoid (*pre_unpatch)(struct klp_object *);\n\tvoid (*post_unpatch)(struct klp_object *);\n\tbool post_unpatch_enabled;\n};\n\nstruct klp_object {\n\tconst char *name;\n\tstruct klp_func *funcs;\n\tstruct klp_callbacks callbacks;\n\tstruct kobject kobj;\n\tstruct list_head func_list;\n\tstruct list_head node;\n\tstruct module *mod;\n\tbool dynamic;\n\tbool patched;\n};\n\nstruct klp_state {\n\tlong unsigned int id;\n\tunsigned int version;\n\tvoid *data;\n};\n\nstruct klp_patch {\n\tstruct module *mod;\n\tstruct klp_object *objs;\n\tstruct klp_state *states;\n\tbool replace;\n\tstruct list_head list;\n\tstruct kobject kobj;\n\tstruct list_head obj_list;\n\tbool enabled;\n\tbool forced;\n\tstruct work_struct free_work;\n\tstruct completion finish;\n};\n\nstruct klp_find_arg {\n\tconst char *objname;\n\tconst char *name;\n\tlong unsigned int addr;\n\tlong unsigned int count;\n\tlong unsigned int pos;\n};\n\nstruct klp_ops {\n\tstruct list_head node;\n\tstruct list_head func_stack;\n\tstruct ftrace_ops fops;\n};\n\ntypedef int (*klp_shadow_ctor_t)(void *, void *, void *);\n\ntypedef void (*klp_shadow_dtor_t)(void *, void *);\n\nstruct klp_shadow {\n\tstruct hlist_node node;\n\tstruct callback_head callback_head;\n\tvoid *obj;\n\tlong unsigned int id;\n\tchar data[0];\n};\n\nenum dma_sync_target {\n\tSYNC_FOR_CPU = 0,\n\tSYNC_FOR_DEVICE = 1,\n};\n\nstruct dma_devres {\n\tsize_t size;\n\tvoid *vaddr;\n\tdma_addr_t dma_handle;\n\tlong unsigned int attrs;\n};\n\nstruct cma {\n\tlong unsigned int base_pfn;\n\tlong unsigned int count;\n\tlong unsigned int *bitmap;\n\tunsigned int order_per_bit;\n\tstruct mutex lock;\n\tchar name[64];\n};\n\nstruct trace_event_raw_swiotlb_bounced {\n\tstruct trace_entry ent;\n\tu32 __data_loc_dev_name;\n\tu64 dma_mask;\n\tdma_addr_t dev_addr;\n\tsize_t size;\n\tenum swiotlb_force swiotlb_force;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_swiotlb_bounced {\n\tu32 dev_name;\n};\n\ntypedef void (*btf_trace_swiotlb_bounced)(void *, struct device *, dma_addr_t, size_t, enum swiotlb_force);\n\nstruct trace_event_raw_sys_enter {\n\tstruct trace_entry ent;\n\tlong int id;\n\tlong unsigned int args[6];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sys_exit {\n\tstruct trace_entry ent;\n\tlong int id;\n\tlong int ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_sys_enter {};\n\nstruct trace_event_data_offsets_sys_exit {};\n\ntypedef void (*btf_trace_sys_enter)(void *, struct pt_regs *, long int);\n\ntypedef void (*btf_trace_sys_exit)(void *, struct pt_regs *, long int);\n\nstruct kvm_regs {\n\t__u64 rax;\n\t__u64 rbx;\n\t__u64 rcx;\n\t__u64 rdx;\n\t__u64 rsi;\n\t__u64 rdi;\n\t__u64 rsp;\n\t__u64 rbp;\n\t__u64 r8;\n\t__u64 r9;\n\t__u64 r10;\n\t__u64 r11;\n\t__u64 r12;\n\t__u64 r13;\n\t__u64 r14;\n\t__u64 r15;\n\t__u64 rip;\n\t__u64 rflags;\n};\n\nstruct kvm_segment {\n\t__u64 base;\n\t__u32 limit;\n\t__u16 selector;\n\t__u8 type;\n\t__u8 present;\n\t__u8 dpl;\n\t__u8 db;\n\t__u8 s;\n\t__u8 l;\n\t__u8 g;\n\t__u8 avl;\n\t__u8 unusable;\n\t__u8 padding;\n};\n\nstruct kvm_dtable {\n\t__u64 base;\n\t__u16 limit;\n\t__u16 padding[3];\n};\n\nstruct kvm_sregs {\n\tstruct kvm_segment cs;\n\tstruct kvm_segment ds;\n\tstruct kvm_segment es;\n\tstruct kvm_segment fs;\n\tstruct kvm_segment gs;\n\tstruct kvm_segment ss;\n\tstruct kvm_segment tr;\n\tstruct kvm_segment ldt;\n\tstruct kvm_dtable gdt;\n\tstruct kvm_dtable idt;\n\t__u64 cr0;\n\t__u64 cr2;\n\t__u64 cr3;\n\t__u64 cr4;\n\t__u64 cr8;\n\t__u64 efer;\n\t__u64 apic_base;\n\t__u64 interrupt_bitmap[4];\n};\n\nstruct kvm_cpuid_entry2 {\n\t__u32 function;\n\t__u32 index;\n\t__u32 flags;\n\t__u32 eax;\n\t__u32 ebx;\n\t__u32 ecx;\n\t__u32 edx;\n\t__u32 padding[3];\n};\n\nstruct kvm_debug_exit_arch {\n\t__u32 exception;\n\t__u32 pad;\n\t__u64 pc;\n\t__u64 dr6;\n\t__u64 dr7;\n};\n\nstruct kvm_vcpu_events {\n\tstruct {\n\t\t__u8 injected;\n\t\t__u8 nr;\n\t\t__u8 has_error_code;\n\t\t__u8 pending;\n\t\t__u32 error_code;\n\t} exception;\n\tstruct {\n\t\t__u8 injected;\n\t\t__u8 nr;\n\t\t__u8 soft;\n\t\t__u8 shadow;\n\t} interrupt;\n\tstruct {\n\t\t__u8 injected;\n\t\t__u8 pending;\n\t\t__u8 masked;\n\t\t__u8 pad;\n\t} nmi;\n\t__u32 sipi_vector;\n\t__u32 flags;\n\tstruct {\n\t\t__u8 smm;\n\t\t__u8 pending;\n\t\t__u8 smm_inside_nmi;\n\t\t__u8 latched_init;\n\t} smi;\n\t__u8 reserved[27];\n\t__u8 exception_has_payload;\n\t__u64 exception_payload;\n};\n\nstruct kvm_sync_regs {\n\tstruct kvm_regs regs;\n\tstruct kvm_sregs sregs;\n\tstruct kvm_vcpu_events events;\n};\n\nstruct kvm_pmu_event_filter {\n\t__u32 action;\n\t__u32 nevents;\n\t__u32 fixed_counter_bitmap;\n\t__u32 flags;\n\t__u32 pad[4];\n\t__u64 events[0];\n};\n\nstruct kvm_hyperv_exit {\n\t__u32 type;\n\t__u32 pad1;\n\tunion {\n\t\tstruct {\n\t\t\t__u32 msr;\n\t\t\t__u32 pad2;\n\t\t\t__u64 control;\n\t\t\t__u64 evt_page;\n\t\t\t__u64 msg_page;\n\t\t} synic;\n\t\tstruct {\n\t\t\t__u64 input;\n\t\t\t__u64 result;\n\t\t\t__u64 params[2];\n\t\t} hcall;\n\t\tstruct {\n\t\t\t__u32 msr;\n\t\t\t__u32 pad2;\n\t\t\t__u64 control;\n\t\t\t__u64 status;\n\t\t\t__u64 send_page;\n\t\t\t__u64 recv_page;\n\t\t\t__u64 pending_page;\n\t\t} syndbg;\n\t} u;\n};\n\nstruct kvm_run {\n\t__u8 request_interrupt_window;\n\t__u8 immediate_exit;\n\t__u8 padding1[6];\n\t__u32 exit_reason;\n\t__u8 ready_for_interrupt_injection;\n\t__u8 if_flag;\n\t__u16 flags;\n\t__u64 cr8;\n\t__u64 apic_base;\n\tunion {\n\t\tstruct {\n\t\t\t__u64 hardware_exit_reason;\n\t\t} hw;\n\t\tstruct {\n\t\t\t__u64 hardware_entry_failure_reason;\n\t\t\t__u32 cpu;\n\t\t} fail_entry;\n\t\tstruct {\n\t\t\t__u32 exception;\n\t\t\t__u32 error_code;\n\t\t} ex;\n\t\tstruct {\n\t\t\t__u8 direction;\n\t\t\t__u8 size;\n\t\t\t__u16 port;\n\t\t\t__u32 count;\n\t\t\t__u64 data_offset;\n\t\t} io;\n\t\tstruct {\n\t\t\tstruct kvm_debug_exit_arch arch;\n\t\t} debug;\n\t\tstruct {\n\t\t\t__u64 phys_addr;\n\t\t\t__u8 data[8];\n\t\t\t__u32 len;\n\t\t\t__u8 is_write;\n\t\t} mmio;\n\t\tstruct {\n\t\t\t__u64 nr;\n\t\t\t__u64 args[6];\n\t\t\t__u64 ret;\n\t\t\t__u32 longmode;\n\t\t\t__u32 pad;\n\t\t} hypercall;\n\t\tstruct {\n\t\t\t__u64 rip;\n\t\t\t__u32 is_write;\n\t\t\t__u32 pad;\n\t\t} tpr_access;\n\t\tstruct {\n\t\t\t__u8 icptcode;\n\t\t\t__u16 ipa;\n\t\t\t__u32 ipb;\n\t\t} s390_sieic;\n\t\t__u64 s390_reset_flags;\n\t\tstruct {\n\t\t\t__u64 trans_exc_code;\n\t\t\t__u32 pgm_code;\n\t\t} s390_ucontrol;\n\t\tstruct {\n\t\t\t__u32 dcrn;\n\t\t\t__u32 data;\n\t\t\t__u8 is_write;\n\t\t} dcr;\n\t\tstruct {\n\t\t\t__u32 suberror;\n\t\t\t__u32 ndata;\n\t\t\t__u64 data[16];\n\t\t} internal;\n\t\tstruct {\n\t\t\t__u64 gprs[32];\n\t\t} osi;\n\t\tstruct {\n\t\t\t__u64 nr;\n\t\t\t__u64 ret;\n\t\t\t__u64 args[9];\n\t\t} papr_hcall;\n\t\tstruct {\n\t\t\t__u16 subchannel_id;\n\t\t\t__u16 subchannel_nr;\n\t\t\t__u32 io_int_parm;\n\t\t\t__u32 io_int_word;\n\t\t\t__u32 ipb;\n\t\t\t__u8 dequeued;\n\t\t} s390_tsch;\n\t\tstruct {\n\t\t\t__u32 epr;\n\t\t} epr;\n\t\tstruct {\n\t\t\t__u32 type;\n\t\t\t__u64 flags;\n\t\t} system_event;\n\t\tstruct {\n\t\t\t__u64 addr;\n\t\t\t__u8 ar;\n\t\t\t__u8 reserved;\n\t\t\t__u8 fc;\n\t\t\t__u8 sel1;\n\t\t\t__u16 sel2;\n\t\t} s390_stsi;\n\t\tstruct {\n\t\t\t__u8 vector;\n\t\t} eoi;\n\t\tstruct kvm_hyperv_exit hyperv;\n\t\tstruct {\n\t\t\t__u64 esr_iss;\n\t\t\t__u64 fault_ipa;\n\t\t} arm_nisv;\n\t\tstruct {\n\t\t\t__u8 error;\n\t\t\t__u8 pad[7];\n\t\t\t__u32 reason;\n\t\t\t__u32 index;\n\t\t\t__u64 data;\n\t\t} msr;\n\t\tchar padding[256];\n\t};\n\t__u64 kvm_valid_regs;\n\t__u64 kvm_dirty_regs;\n\tunion {\n\t\tstruct kvm_sync_regs regs;\n\t\tchar padding[2048];\n\t} s;\n};\n\nstruct kvm_coalesced_mmio {\n\t__u64 phys_addr;\n\t__u32 len;\n\tunion {\n\t\t__u32 pad;\n\t\t__u32 pio;\n\t};\n\t__u8 data[8];\n};\n\nstruct kvm_coalesced_mmio_ring {\n\t__u32 first;\n\t__u32 last;\n\tstruct kvm_coalesced_mmio coalesced_mmio[0];\n};\n\nstruct kvm_xen_hvm_config {\n\t__u32 flags;\n\t__u32 msr;\n\t__u64 blob_addr_32;\n\t__u64 blob_addr_64;\n\t__u8 blob_size_32;\n\t__u8 blob_size_64;\n\t__u8 pad2[30];\n};\n\nstruct kvm_dirty_gfn {\n\t__u32 flags;\n\t__u32 slot;\n\t__u64 offset;\n};\n\ntypedef long unsigned int gva_t;\n\ntypedef u64 gpa_t;\n\ntypedef u64 gfn_t;\n\ntypedef u64 hpa_t;\n\ntypedef u64 hfn_t;\n\ntypedef hfn_t kvm_pfn_t;\n\nstruct kvm_memory_slot;\n\nstruct gfn_to_hva_cache {\n\tu64 generation;\n\tgpa_t gpa;\n\tlong unsigned int hva;\n\tlong unsigned int len;\n\tstruct kvm_memory_slot *memslot;\n};\n\nstruct kvm_rmap_head;\n\nstruct kvm_lpage_info;\n\nstruct kvm_arch_memory_slot {\n\tstruct kvm_rmap_head *rmap[3];\n\tstruct kvm_lpage_info *lpage_info[2];\n\tshort unsigned int *gfn_track[1];\n};\n\nstruct kvm_memory_slot {\n\tgfn_t base_gfn;\n\tlong unsigned int npages;\n\tlong unsigned int *dirty_bitmap;\n\tstruct kvm_arch_memory_slot arch;\n\tlong unsigned int userspace_addr;\n\tu32 flags;\n\tshort int id;\n\tu16 as_id;\n};\n\nstruct gfn_to_pfn_cache {\n\tu64 generation;\n\tgfn_t gfn;\n\tkvm_pfn_t pfn;\n\tbool dirty;\n};\n\nstruct kvm_mmu_memory_cache {\n\tint nobjs;\n\tgfp_t gfp_zero;\n\tstruct kmem_cache *kmem_cache;\n\tvoid *objects[40];\n};\n\nstruct hv_partition_assist_pg {\n\tu32 tlb_lock_count;\n};\n\nunion hv_message_flags {\n\t__u8 asu8;\n\tstruct {\n\t\t__u8 msg_pending: 1;\n\t\t__u8 reserved: 7;\n\t};\n};\n\nunion hv_port_id {\n\t__u32 asu32;\n\tstruct {\n\t\t__u32 id: 24;\n\t\t__u32 reserved: 8;\n\t} u;\n};\n\nstruct hv_message_header {\n\t__u32 message_type;\n\t__u8 payload_size;\n\tunion hv_message_flags message_flags;\n\t__u8 reserved[2];\n\tunion {\n\t\t__u64 sender;\n\t\tunion hv_port_id port;\n\t};\n};\n\nstruct hv_message {\n\tstruct hv_message_header header;\n\tunion {\n\t\t__u64 payload[30];\n\t} u;\n};\n\nunion hv_stimer_config {\n\tu64 as_uint64;\n\tstruct {\n\t\tu64 enable: 1;\n\t\tu64 periodic: 1;\n\t\tu64 lazy: 1;\n\t\tu64 auto_enable: 1;\n\t\tu64 apic_vector: 8;\n\t\tu64 direct_mode: 1;\n\t\tu64 reserved_z0: 3;\n\t\tu64 sintx: 4;\n\t\tu64 reserved_z1: 44;\n\t};\n};\n\nenum kvm_page_track_mode {\n\tKVM_PAGE_TRACK_WRITE = 0,\n\tKVM_PAGE_TRACK_MAX = 1,\n};\n\nstruct kvm_page_track_notifier_head {\n\tstruct srcu_struct track_srcu;\n\tstruct hlist_head track_notifier_list;\n};\n\nstruct kvm_vcpu;\n\nstruct kvm;\n\nstruct kvm_page_track_notifier_node {\n\tstruct hlist_node node;\n\tvoid (*track_write)(struct kvm_vcpu *, gpa_t, const u8 *, int, struct kvm_page_track_notifier_node *);\n\tvoid (*track_flush_slot)(struct kvm *, struct kvm_memory_slot *, struct kvm_page_track_notifier_node *);\n};\n\nstruct kvm_vcpu_stat {\n\tu64 pf_fixed;\n\tu64 pf_guest;\n\tu64 tlb_flush;\n\tu64 invlpg;\n\tu64 exits;\n\tu64 io_exits;\n\tu64 mmio_exits;\n\tu64 signal_exits;\n\tu64 irq_window_exits;\n\tu64 nmi_window_exits;\n\tu64 l1d_flush;\n\tu64 halt_exits;\n\tu64 halt_successful_poll;\n\tu64 halt_attempted_poll;\n\tu64 halt_poll_invalid;\n\tu64 halt_wakeup;\n\tu64 request_irq_exits;\n\tu64 irq_exits;\n\tu64 host_state_reload;\n\tu64 fpu_reload;\n\tu64 insn_emulation;\n\tu64 insn_emulation_fail;\n\tu64 hypercalls;\n\tu64 irq_injections;\n\tu64 nmi_injections;\n\tu64 req_event;\n\tu64 halt_poll_success_ns;\n\tu64 halt_poll_fail_ns;\n};\n\nstruct kvm_mmio_fragment {\n\tgpa_t gpa;\n\tvoid *data;\n\tunsigned int len;\n};\n\nstruct kvm_lapic;\n\nstruct x86_exception;\n\nstruct kvm_mmu_page;\n\nunion kvm_mmu_page_role {\n\tu32 word;\n\tstruct {\n\t\tunsigned int level: 4;\n\t\tunsigned int gpte_is_8_bytes: 1;\n\t\tunsigned int quadrant: 2;\n\t\tunsigned int direct: 1;\n\t\tunsigned int access: 3;\n\t\tunsigned int invalid: 1;\n\t\tunsigned int nxe: 1;\n\t\tunsigned int cr0_wp: 1;\n\t\tunsigned int smep_andnot_wp: 1;\n\t\tunsigned int smap_andnot_wp: 1;\n\t\tunsigned int ad_disabled: 1;\n\t\tunsigned int guest_mode: 1;\n\t\tchar: 6;\n\t\tunsigned int smm: 8;\n\t};\n};\n\nunion kvm_mmu_extended_role {\n\tu32 word;\n\tstruct {\n\t\tunsigned int valid: 1;\n\t\tunsigned int execonly: 1;\n\t\tunsigned int cr0_pg: 1;\n\t\tunsigned int cr4_pae: 1;\n\t\tunsigned int cr4_pse: 1;\n\t\tunsigned int cr4_pke: 1;\n\t\tunsigned int cr4_smap: 1;\n\t\tunsigned int cr4_smep: 1;\n\t\tunsigned int maxphyaddr: 6;\n\t};\n};\n\nunion kvm_mmu_role {\n\tu64 as_u64;\n\tstruct {\n\t\tunion kvm_mmu_page_role base;\n\t\tunion kvm_mmu_extended_role ext;\n\t};\n};\n\nstruct kvm_mmu_root_info {\n\tgpa_t pgd;\n\thpa_t hpa;\n};\n\nstruct rsvd_bits_validate {\n\tu64 rsvd_bits_mask[10];\n\tu64 bad_mt_xwr;\n};\n\nstruct kvm_mmu {\n\tlong unsigned int (*get_guest_pgd)(struct kvm_vcpu *);\n\tu64 (*get_pdptr)(struct kvm_vcpu *, int);\n\tint (*page_fault)(struct kvm_vcpu *, gpa_t, u32, bool);\n\tvoid (*inject_page_fault)(struct kvm_vcpu *, struct x86_exception *);\n\tgpa_t (*gva_to_gpa)(struct kvm_vcpu *, gpa_t, u32, struct x86_exception *);\n\tgpa_t (*translate_gpa)(struct kvm_vcpu *, gpa_t, u32, struct x86_exception *);\n\tint (*sync_page)(struct kvm_vcpu *, struct kvm_mmu_page *);\n\tvoid (*invlpg)(struct kvm_vcpu *, gva_t, hpa_t);\n\tvoid (*update_pte)(struct kvm_vcpu *, struct kvm_mmu_page *, u64 *, const void *);\n\thpa_t root_hpa;\n\tgpa_t root_pgd;\n\tunion kvm_mmu_role mmu_role;\n\tu8 root_level;\n\tu8 shadow_root_level;\n\tu8 ept_ad;\n\tbool direct_map;\n\tstruct kvm_mmu_root_info prev_roots[3];\n\tu8 permissions[16];\n\tu32 pkru_mask;\n\tu64 *pae_root;\n\tu64 *lm_root;\n\tstruct rsvd_bits_validate shadow_zero_check;\n\tstruct rsvd_bits_validate guest_rsvd_check;\n\tu8 last_nonleaf_level;\n\tbool nx;\n\tu64 pdptrs[4];\n};\n\nstruct kvm_pio_request {\n\tlong unsigned int linear_rip;\n\tlong unsigned int count;\n\tint in;\n\tint port;\n\tint size;\n};\n\nstruct kvm_queued_exception {\n\tbool pending;\n\tbool injected;\n\tbool has_error_code;\n\tu8 nr;\n\tu32 error_code;\n\tlong unsigned int payload;\n\tbool has_payload;\n\tu8 nested_apf;\n};\n\nstruct kvm_queued_interrupt {\n\tbool injected;\n\tbool soft;\n\tu8 nr;\n};\n\nstruct x86_emulate_ctxt;\n\nstruct kvm_mtrr_range {\n\tu64 base;\n\tu64 mask;\n\tstruct list_head node;\n};\n\nstruct kvm_mtrr {\n\tstruct kvm_mtrr_range var_ranges[8];\n\tmtrr_type fixed_ranges[88];\n\tu64 deftype;\n\tstruct list_head head;\n};\n\nenum pmc_type {\n\tKVM_PMC_GP = 0,\n\tKVM_PMC_FIXED = 1,\n};\n\nstruct kvm_pmc {\n\tenum pmc_type type;\n\tu8 idx;\n\tu64 counter;\n\tu64 eventsel;\n\tstruct perf_event *perf_event;\n\tstruct kvm_vcpu *vcpu;\n\tu64 current_config;\n};\n\nstruct kvm_pmu {\n\tunsigned int nr_arch_gp_counters;\n\tunsigned int nr_arch_fixed_counters;\n\tunsigned int available_event_types;\n\tu64 fixed_ctr_ctrl;\n\tu64 global_ctrl;\n\tu64 global_status;\n\tu64 global_ovf_ctrl;\n\tu64 counter_bitmask[2];\n\tu64 global_ctrl_mask;\n\tu64 global_ovf_ctrl_mask;\n\tu64 reserved_bits;\n\tu8 version;\n\tstruct kvm_pmc gp_counters[32];\n\tstruct kvm_pmc fixed_counters[4];\n\tstruct irq_work irq_work;\n\tlong unsigned int reprogram_pmi[1];\n\tlong unsigned int all_valid_pmc_idx[1];\n\tlong unsigned int pmc_in_use[1];\n\tbool need_cleanup;\n\tu8 event_count;\n};\n\nstruct kvm_vcpu_hv_synic {\n\tu64 version;\n\tu64 control;\n\tu64 msg_page;\n\tu64 evt_page;\n\tatomic64_t sint[16];\n\tatomic_t sint_to_gsi[16];\n\tlong unsigned int auto_eoi_bitmap[4];\n\tlong unsigned int vec_bitmap[4];\n\tbool active;\n\tbool dont_zero_synic_pages;\n};\n\nstruct kvm_vcpu_hv_stimer {\n\tstruct hrtimer timer;\n\tint index;\n\tunion hv_stimer_config config;\n\tu64 count;\n\tu64 exp_time;\n\tstruct hv_message msg;\n\tbool msg_pending;\n};\n\nstruct kvm_vcpu_hv {\n\tu32 vp_index;\n\tu64 hv_vapic;\n\ts64 runtime_offset;\n\tstruct kvm_vcpu_hv_synic synic;\n\tstruct kvm_hyperv_exit exit;\n\tstruct kvm_vcpu_hv_stimer stimer[4];\n\tlong unsigned int stimer_pending_bitmap[1];\n\tcpumask_t tlb_flush;\n};\n\nstruct kvm_vcpu_arch {\n\tlong unsigned int regs[17];\n\tu32 regs_avail;\n\tu32 regs_dirty;\n\tlong unsigned int cr0;\n\tlong unsigned int cr0_guest_owned_bits;\n\tlong unsigned int cr2;\n\tlong unsigned int cr3;\n\tlong unsigned int cr4;\n\tlong unsigned int cr4_guest_owned_bits;\n\tlong unsigned int cr4_guest_rsvd_bits;\n\tlong unsigned int cr8;\n\tu32 host_pkru;\n\tu32 pkru;\n\tu32 hflags;\n\tu64 efer;\n\tu64 apic_base;\n\tstruct kvm_lapic *apic;\n\tbool apicv_active;\n\tbool load_eoi_exitmap_pending;\n\tlong unsigned int ioapic_handled_vectors[4];\n\tlong unsigned int apic_attention;\n\tint32_t apic_arb_prio;\n\tint mp_state;\n\tu64 ia32_misc_enable_msr;\n\tu64 smbase;\n\tu64 smi_count;\n\tbool tpr_access_reporting;\n\tbool xsaves_enabled;\n\tu64 ia32_xss;\n\tu64 microcode_version;\n\tu64 arch_capabilities;\n\tu64 perf_capabilities;\n\tstruct kvm_mmu *mmu;\n\tstruct kvm_mmu root_mmu;\n\tstruct kvm_mmu guest_mmu;\n\tstruct kvm_mmu nested_mmu;\n\tstruct kvm_mmu *walk_mmu;\n\tstruct kvm_mmu_memory_cache mmu_pte_list_desc_cache;\n\tstruct kvm_mmu_memory_cache mmu_shadow_page_cache;\n\tstruct kvm_mmu_memory_cache mmu_gfn_array_cache;\n\tstruct kvm_mmu_memory_cache mmu_page_header_cache;\n\tstruct fpu *user_fpu;\n\tstruct fpu *guest_fpu;\n\tu64 xcr0;\n\tu64 guest_supported_xcr0;\n\tstruct kvm_pio_request pio;\n\tvoid *pio_data;\n\tvoid *guest_ins_data;\n\tu8 event_exit_inst_len;\n\tstruct kvm_queued_exception exception;\n\tstruct kvm_queued_interrupt interrupt;\n\tint halt_request;\n\tint cpuid_nent;\n\tstruct kvm_cpuid_entry2 *cpuid_entries;\n\tlong unsigned int cr3_lm_rsvd_bits;\n\tint maxphyaddr;\n\tint max_tdp_level;\n\tstruct x86_emulate_ctxt *emulate_ctxt;\n\tbool emulate_regs_need_sync_to_vcpu;\n\tbool emulate_regs_need_sync_from_vcpu;\n\tint (*complete_userspace_io)(struct kvm_vcpu *);\n\tgpa_t time;\n\tstruct pvclock_vcpu_time_info hv_clock;\n\tunsigned int hw_tsc_khz;\n\tstruct gfn_to_hva_cache pv_time;\n\tbool pv_time_enabled;\n\tbool pvclock_set_guest_stopped_request;\n\tstruct {\n\t\tu8 preempted;\n\t\tu64 msr_val;\n\t\tu64 last_steal;\n\t\tstruct gfn_to_pfn_cache cache;\n\t} st;\n\tu64 l1_tsc_offset;\n\tu64 tsc_offset;\n\tu64 last_guest_tsc;\n\tu64 last_host_tsc;\n\tu64 tsc_offset_adjustment;\n\tu64 this_tsc_nsec;\n\tu64 this_tsc_write;\n\tu64 this_tsc_generation;\n\tbool tsc_catchup;\n\tbool tsc_always_catchup;\n\ts8 virtual_tsc_shift;\n\tu32 virtual_tsc_mult;\n\tu32 virtual_tsc_khz;\n\ts64 ia32_tsc_adjust_msr;\n\tu64 msr_ia32_power_ctl;\n\tu64 tsc_scaling_ratio;\n\tatomic_t nmi_queued;\n\tunsigned int nmi_pending;\n\tbool nmi_injected;\n\tbool smi_pending;\n\tstruct kvm_mtrr mtrr_state;\n\tu64 pat;\n\tunsigned int switch_db_regs;\n\tlong unsigned int db[4];\n\tlong unsigned int dr6;\n\tlong unsigned int dr7;\n\tlong unsigned int eff_db[4];\n\tlong unsigned int guest_debug_dr7;\n\tu64 msr_platform_info;\n\tu64 msr_misc_features_enables;\n\tu64 mcg_cap;\n\tu64 mcg_status;\n\tu64 mcg_ctl;\n\tu64 mcg_ext_ctl;\n\tu64 *mce_banks;\n\tu64 mmio_gva;\n\tunsigned int mmio_access;\n\tgfn_t mmio_gfn;\n\tu64 mmio_gen;\n\tstruct kvm_pmu pmu;\n\tlong unsigned int singlestep_rip;\n\tstruct kvm_vcpu_hv hyperv;\n\tcpumask_var_t wbinvd_dirty_mask;\n\tlong unsigned int last_retry_eip;\n\tlong unsigned int last_retry_addr;\n\tstruct {\n\t\tbool halted;\n\t\tgfn_t gfns[64];\n\t\tstruct gfn_to_hva_cache data;\n\t\tu64 msr_en_val;\n\t\tu64 msr_int_val;\n\t\tu16 vec;\n\t\tu32 id;\n\t\tbool send_user_only;\n\t\tu32 host_apf_flags;\n\t\tlong unsigned int nested_apf_token;\n\t\tbool delivery_as_pf_vmexit;\n\t\tbool pageready_pending;\n\t} apf;\n\tstruct {\n\t\tu64 length;\n\t\tu64 status;\n\t} osvw;\n\tstruct {\n\t\tu64 msr_val;\n\t\tstruct gfn_to_hva_cache data;\n\t} pv_eoi;\n\tu64 msr_kvm_poll_control;\n\tbool write_fault_to_shadow_pgtable;\n\tlong unsigned int exit_qualification;\n\tstruct {\n\t\tbool pv_unhalted;\n\t} pv;\n\tint pending_ioapic_eoi;\n\tint pending_external_vector;\n\tbool preempted_in_kernel;\n\tbool l1tf_flush_l1d;\n\tunsigned int last_vmentry_cpu;\n\tu64 msr_hwcr;\n\tstruct {\n\t\tu32 features;\n\t\tbool enforce;\n\t} pv_cpuid;\n\tbool guest_state_protected;\n};\n\nstruct kvm_dirty_ring {\n\tu32 dirty_index;\n\tu32 reset_index;\n\tu32 size;\n\tu32 soft_limit;\n\tstruct kvm_dirty_gfn *dirty_gfns;\n\tint index;\n};\n\nstruct kvm_vcpu {\n\tstruct kvm *kvm;\n\tstruct preempt_notifier preempt_notifier;\n\tint cpu;\n\tint vcpu_id;\n\tint vcpu_idx;\n\tint srcu_idx;\n\tint mode;\n\tu64 requests;\n\tlong unsigned int guest_debug;\n\tint pre_pcpu;\n\tstruct list_head blocked_vcpu_list;\n\tstruct mutex mutex;\n\tstruct kvm_run *run;\n\tstruct rcuwait wait;\n\tstruct pid *pid;\n\tint sigset_active;\n\tsigset_t sigset;\n\tstruct kvm_vcpu_stat stat;\n\tunsigned int halt_poll_ns;\n\tbool valid_wakeup;\n\tint mmio_needed;\n\tint mmio_read_completed;\n\tint mmio_is_write;\n\tint mmio_cur_fragment;\n\tint mmio_nr_fragments;\n\tstruct kvm_mmio_fragment mmio_fragments[2];\n\tstruct {\n\t\tu32 queued;\n\t\tstruct list_head queue;\n\t\tstruct list_head done;\n\t\tspinlock_t lock;\n\t} async_pf;\n\tstruct {\n\t\tbool in_spin_loop;\n\t\tbool dy_eligible;\n\t} spin_loop;\n\tbool preempted;\n\tbool ready;\n\tstruct kvm_vcpu_arch arch;\n\tstruct kvm_dirty_ring dirty_ring;\n};\n\nstruct kvm_vm_stat {\n\tulong mmu_shadow_zapped;\n\tulong mmu_pte_write;\n\tulong mmu_pte_updated;\n\tulong mmu_pde_zapped;\n\tulong mmu_flooded;\n\tulong mmu_recycled;\n\tulong mmu_cache_miss;\n\tulong mmu_unsync;\n\tulong remote_tlb_flush;\n\tulong lpages;\n\tulong nx_lpage_splits;\n\tulong max_mmu_page_hash_collisions;\n};\n\nstruct kvm_pic;\n\nstruct kvm_ioapic;\n\nstruct kvm_pit;\n\nstruct kvm_hv_syndbg {\n\tstruct {\n\t\tu64 control;\n\t\tu64 status;\n\t\tu64 send_page;\n\t\tu64 recv_page;\n\t\tu64 pending_page;\n\t} control;\n\tu64 options;\n};\n\nstruct kvm_hv {\n\tstruct mutex hv_lock;\n\tu64 hv_guest_os_id;\n\tu64 hv_hypercall;\n\tu64 hv_tsc_page;\n\tu64 hv_crash_param[5];\n\tu64 hv_crash_ctl;\n\tstruct ms_hyperv_tsc_page tsc_ref;\n\tstruct idr conn_to_evt;\n\tu64 hv_reenlightenment_control;\n\tu64 hv_tsc_emulation_control;\n\tu64 hv_tsc_emulation_status;\n\tatomic_t num_mismatched_vp_indexes;\n\tstruct hv_partition_assist_pg *hv_pa_pg;\n\tstruct kvm_hv_syndbg hv_syndbg;\n};\n\nenum kvm_irqchip_mode {\n\tKVM_IRQCHIP_NONE = 0,\n\tKVM_IRQCHIP_KERNEL = 1,\n\tKVM_IRQCHIP_SPLIT = 2,\n};\n\nstruct kvm_apic_map;\n\nstruct kvm_x86_msr_filter;\n\nstruct kvm_arch {\n\tlong unsigned int n_used_mmu_pages;\n\tlong unsigned int n_requested_mmu_pages;\n\tlong unsigned int n_max_mmu_pages;\n\tunsigned int indirect_shadow_pages;\n\tu8 mmu_valid_gen;\n\tstruct hlist_head mmu_page_hash[4096];\n\tstruct list_head active_mmu_pages;\n\tstruct list_head zapped_obsolete_pages;\n\tstruct list_head lpage_disallowed_mmu_pages;\n\tstruct kvm_page_track_notifier_node mmu_sp_tracker;\n\tstruct kvm_page_track_notifier_head track_notifier_head;\n\tstruct list_head assigned_dev_head;\n\tstruct iommu_domain *iommu_domain;\n\tbool iommu_noncoherent;\n\tatomic_t noncoherent_dma_count;\n\tatomic_t assigned_device_count;\n\tstruct kvm_pic *vpic;\n\tstruct kvm_ioapic *vioapic;\n\tstruct kvm_pit *vpit;\n\tatomic_t vapics_in_nmi_mode;\n\tstruct mutex apic_map_lock;\n\tstruct kvm_apic_map *apic_map;\n\tatomic_t apic_map_dirty;\n\tbool apic_access_page_done;\n\tlong unsigned int apicv_inhibit_reasons;\n\tgpa_t wall_clock;\n\tbool mwait_in_guest;\n\tbool hlt_in_guest;\n\tbool pause_in_guest;\n\tbool cstate_in_guest;\n\tlong unsigned int irq_sources_bitmap;\n\ts64 kvmclock_offset;\n\traw_spinlock_t tsc_write_lock;\n\tu64 last_tsc_nsec;\n\tu64 last_tsc_write;\n\tu32 last_tsc_khz;\n\tu64 cur_tsc_nsec;\n\tu64 cur_tsc_write;\n\tu64 cur_tsc_offset;\n\tu64 cur_tsc_generation;\n\tint nr_vcpus_matched_tsc;\n\tspinlock_t pvclock_gtod_sync_lock;\n\tbool use_master_clock;\n\tu64 master_kernel_ns;\n\tu64 master_cycle_now;\n\tstruct delayed_work kvmclock_update_work;\n\tstruct delayed_work kvmclock_sync_work;\n\tstruct kvm_xen_hvm_config xen_hvm_config;\n\tstruct hlist_head mask_notifier_list;\n\tstruct kvm_hv hyperv;\n\tint audit_point;\n\tbool backwards_tsc_observed;\n\tbool boot_vcpu_runs_old_kvmclock;\n\tu32 bsp_vcpu_id;\n\tu64 disabled_quirks;\n\tenum kvm_irqchip_mode irqchip_mode;\n\tu8 nr_reserved_ioapic_pins;\n\tbool disabled_lapic_found;\n\tbool x2apic_format;\n\tbool x2apic_broadcast_quirk_disabled;\n\tbool guest_can_read_msr_platform_info;\n\tbool exception_payload_enabled;\n\tbool bus_lock_detection_enabled;\n\tu32 user_space_msr_mask;\n\tstruct kvm_x86_msr_filter *msr_filter;\n\tstruct kvm_pmu_event_filter *pmu_event_filter;\n\tstruct task_struct *nx_lpage_recovery_thread;\n\tbool tdp_mmu_enabled;\n\tstruct list_head tdp_mmu_roots;\n\tstruct list_head tdp_mmu_pages;\n};\n\nstruct kvm_memslots;\n\nstruct kvm_io_bus;\n\nstruct kvm_irq_routing_table;\n\nstruct kvm_stat_data;\n\nstruct kvm {\n\tspinlock_t mmu_lock;\n\tstruct mutex slots_lock;\n\tstruct mm_struct *mm;\n\tstruct kvm_memslots *memslots[2];\n\tstruct kvm_vcpu *vcpus[288];\n\tatomic_t online_vcpus;\n\tint created_vcpus;\n\tint last_boosted_vcpu;\n\tstruct list_head vm_list;\n\tstruct mutex lock;\n\tstruct kvm_io_bus *buses[4];\n\tstruct {\n\t\tspinlock_t lock;\n\t\tstruct list_head items;\n\t\tstruct list_head resampler_list;\n\t\tstruct mutex resampler_lock;\n\t} irqfds;\n\tstruct list_head ioeventfds;\n\tstruct kvm_vm_stat stat;\n\tstruct kvm_arch arch;\n\trefcount_t users_count;\n\tstruct kvm_coalesced_mmio_ring *coalesced_mmio_ring;\n\tspinlock_t ring_lock;\n\tstruct list_head coalesced_zones;\n\tstruct mutex irq_lock;\n\tstruct kvm_irq_routing_table *irq_routing;\n\tstruct hlist_head irq_ack_notifier_list;\n\tstruct mmu_notifier mmu_notifier;\n\tlong unsigned int mmu_notifier_seq;\n\tlong int mmu_notifier_count;\n\tlong int tlbs_dirty;\n\tstruct list_head devices;\n\tu64 manual_dirty_log_protect;\n\tstruct dentry *debugfs_dentry;\n\tstruct kvm_stat_data **debugfs_stat_data;\n\tstruct srcu_struct srcu;\n\tstruct srcu_struct irq_srcu;\n\tpid_t userspace_pid;\n\tunsigned int max_halt_poll_ns;\n\tu32 dirty_ring_size;\n};\n\nenum kvm_reg {\n\tVCPU_REGS_RAX = 0,\n\tVCPU_REGS_RCX = 1,\n\tVCPU_REGS_RDX = 2,\n\tVCPU_REGS_RBX = 3,\n\tVCPU_REGS_RSP = 4,\n\tVCPU_REGS_RBP = 5,\n\tVCPU_REGS_RSI = 6,\n\tVCPU_REGS_RDI = 7,\n\tVCPU_REGS_R8 = 8,\n\tVCPU_REGS_R9 = 9,\n\tVCPU_REGS_R10 = 10,\n\tVCPU_REGS_R11 = 11,\n\tVCPU_REGS_R12 = 12,\n\tVCPU_REGS_R13 = 13,\n\tVCPU_REGS_R14 = 14,\n\tVCPU_REGS_R15 = 15,\n\tVCPU_REGS_RIP = 16,\n\tNR_VCPU_REGS = 17,\n\tVCPU_EXREG_PDPTR = 17,\n\tVCPU_EXREG_CR0 = 18,\n\tVCPU_EXREG_CR3 = 19,\n\tVCPU_EXREG_CR4 = 20,\n\tVCPU_EXREG_RFLAGS = 21,\n\tVCPU_EXREG_SEGMENTS = 22,\n\tVCPU_EXREG_EXIT_INFO_1 = 23,\n\tVCPU_EXREG_EXIT_INFO_2 = 24,\n};\n\nstruct kvm_rmap_head {\n\tlong unsigned int val;\n};\n\nstruct kvm_lpage_info {\n\tint disallow_lpage;\n};\n\nstruct kvm_apic_map {\n\tstruct callback_head rcu;\n\tu8 mode;\n\tu32 max_apic_id;\n\tunion {\n\t\tstruct kvm_lapic *xapic_flat_map[8];\n\t\tstruct kvm_lapic *xapic_cluster_map[64];\n\t};\n\tstruct kvm_lapic *phys_map[0];\n};\n\nstruct msr_bitmap_range {\n\tu32 flags;\n\tu32 nmsrs;\n\tu32 base;\n\tlong unsigned int *bitmap;\n};\n\nstruct kvm_x86_msr_filter {\n\tu8 count;\n\tbool default_allow: 1;\n\tstruct msr_bitmap_range ranges[16];\n};\n\nstruct kvm_io_device;\n\nstruct kvm_io_range {\n\tgpa_t addr;\n\tint len;\n\tstruct kvm_io_device *dev;\n};\n\nstruct kvm_io_bus {\n\tint dev_count;\n\tint ioeventfd_count;\n\tstruct kvm_io_range range[0];\n};\n\nenum kvm_bus {\n\tKVM_MMIO_BUS = 0,\n\tKVM_PIO_BUS = 1,\n\tKVM_VIRTIO_CCW_NOTIFY_BUS = 2,\n\tKVM_FAST_MMIO_BUS = 3,\n\tKVM_NR_BUSES = 4,\n};\n\nstruct kvm_irq_routing_table {\n\tint chip[72];\n\tu32 nr_rt_entries;\n\tstruct hlist_head map[0];\n};\n\nstruct kvm_memslots {\n\tu64 generation;\n\tshort int id_to_index[512];\n\tatomic_t lru_slot;\n\tint used_slots;\n\tstruct kvm_memory_slot memslots[0];\n};\n\nstruct kvm_stats_debugfs_item;\n\nstruct kvm_stat_data {\n\tstruct kvm *kvm;\n\tstruct kvm_stats_debugfs_item *dbgfs_item;\n};\n\nenum kvm_stat_kind {\n\tKVM_STAT_VM = 0,\n\tKVM_STAT_VCPU = 1,\n};\n\nstruct kvm_stats_debugfs_item {\n\tconst char *name;\n\tint offset;\n\tenum kvm_stat_kind kind;\n\tint mode;\n};\n\nenum kcmp_type {\n\tKCMP_FILE = 0,\n\tKCMP_VM = 1,\n\tKCMP_FILES = 2,\n\tKCMP_FS = 3,\n\tKCMP_SIGHAND = 4,\n\tKCMP_IO = 5,\n\tKCMP_SYSVSEM = 6,\n\tKCMP_EPOLL_TFD = 7,\n\tKCMP_TYPES = 8,\n};\n\nstruct kcmp_epoll_slot {\n\t__u32 efd;\n\t__u32 tfd;\n\t__u32 toff;\n};\n\nenum profile_type {\n\tPROFILE_TASK_EXIT = 0,\n\tPROFILE_MUNMAP = 1,\n};\n\nstruct profile_hit {\n\tu32 pc;\n\tu32 hits;\n};\n\nstruct stacktrace_cookie {\n\tlong unsigned int *store;\n\tunsigned int size;\n\tunsigned int skip;\n\tunsigned int len;\n};\n\ntypedef __kernel_long_t __kernel_suseconds_t;\n\ntypedef __kernel_long_t __kernel_old_time_t;\n\ntypedef __kernel_suseconds_t suseconds_t;\n\nstruct __kernel_itimerspec {\n\tstruct __kernel_timespec it_interval;\n\tstruct __kernel_timespec it_value;\n};\n\nstruct timezone {\n\tint tz_minuteswest;\n\tint tz_dsttime;\n};\n\nstruct itimerspec64 {\n\tstruct timespec64 it_interval;\n\tstruct timespec64 it_value;\n};\n\nstruct old_itimerspec32 {\n\tstruct old_timespec32 it_interval;\n\tstruct old_timespec32 it_value;\n};\n\nstruct old_timex32 {\n\tu32 modes;\n\ts32 offset;\n\ts32 freq;\n\ts32 maxerror;\n\ts32 esterror;\n\ts32 status;\n\ts32 constant;\n\ts32 precision;\n\ts32 tolerance;\n\tstruct old_timeval32 time;\n\ts32 tick;\n\ts32 ppsfreq;\n\ts32 jitter;\n\ts32 shift;\n\ts32 stabil;\n\ts32 jitcnt;\n\ts32 calcnt;\n\ts32 errcnt;\n\ts32 stbcnt;\n\ts32 tai;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct __kernel_timex_timeval {\n\t__kernel_time64_t tv_sec;\n\tlong long int tv_usec;\n};\n\nstruct __kernel_timex {\n\tunsigned int modes;\n\tlong long int offset;\n\tlong long int freq;\n\tlong long int maxerror;\n\tlong long int esterror;\n\tint status;\n\tlong long int constant;\n\tlong long int precision;\n\tlong long int tolerance;\n\tstruct __kernel_timex_timeval time;\n\tlong long int tick;\n\tlong long int ppsfreq;\n\tlong long int jitter;\n\tint shift;\n\tlong long int stabil;\n\tlong long int jitcnt;\n\tlong long int calcnt;\n\tlong long int errcnt;\n\tlong long int stbcnt;\n\tint tai;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct trace_event_raw_timer_class {\n\tstruct trace_entry ent;\n\tvoid *timer;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_timer_start {\n\tstruct trace_entry ent;\n\tvoid *timer;\n\tvoid *function;\n\tlong unsigned int expires;\n\tlong unsigned int now;\n\tunsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_timer_expire_entry {\n\tstruct trace_entry ent;\n\tvoid *timer;\n\tlong unsigned int now;\n\tvoid *function;\n\tlong unsigned int baseclk;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_hrtimer_init {\n\tstruct trace_entry ent;\n\tvoid *hrtimer;\n\tclockid_t clockid;\n\tenum hrtimer_mode mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_hrtimer_start {\n\tstruct trace_entry ent;\n\tvoid *hrtimer;\n\tvoid *function;\n\ts64 expires;\n\ts64 softexpires;\n\tenum hrtimer_mode mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_hrtimer_expire_entry {\n\tstruct trace_entry ent;\n\tvoid *hrtimer;\n\ts64 now;\n\tvoid *function;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_hrtimer_class {\n\tstruct trace_entry ent;\n\tvoid *hrtimer;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_itimer_state {\n\tstruct trace_entry ent;\n\tint which;\n\tlong long unsigned int expires;\n\tlong int value_sec;\n\tlong int value_nsec;\n\tlong int interval_sec;\n\tlong int interval_nsec;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_itimer_expire {\n\tstruct trace_entry ent;\n\tint which;\n\tpid_t pid;\n\tlong long unsigned int now;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_tick_stop {\n\tstruct trace_entry ent;\n\tint success;\n\tint dependency;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_timer_class {};\n\nstruct trace_event_data_offsets_timer_start {};\n\nstruct trace_event_data_offsets_timer_expire_entry {};\n\nstruct trace_event_data_offsets_hrtimer_init {};\n\nstruct trace_event_data_offsets_hrtimer_start {};\n\nstruct trace_event_data_offsets_hrtimer_expire_entry {};\n\nstruct trace_event_data_offsets_hrtimer_class {};\n\nstruct trace_event_data_offsets_itimer_state {};\n\nstruct trace_event_data_offsets_itimer_expire {};\n\nstruct trace_event_data_offsets_tick_stop {};\n\ntypedef void (*btf_trace_timer_init)(void *, struct timer_list *);\n\ntypedef void (*btf_trace_timer_start)(void *, struct timer_list *, long unsigned int, unsigned int);\n\ntypedef void (*btf_trace_timer_expire_entry)(void *, struct timer_list *, long unsigned int);\n\ntypedef void (*btf_trace_timer_expire_exit)(void *, struct timer_list *);\n\ntypedef void (*btf_trace_timer_cancel)(void *, struct timer_list *);\n\ntypedef void (*btf_trace_hrtimer_init)(void *, struct hrtimer *, clockid_t, enum hrtimer_mode);\n\ntypedef void (*btf_trace_hrtimer_start)(void *, struct hrtimer *, enum hrtimer_mode);\n\ntypedef void (*btf_trace_hrtimer_expire_entry)(void *, struct hrtimer *, ktime_t *);\n\ntypedef void (*btf_trace_hrtimer_expire_exit)(void *, struct hrtimer *);\n\ntypedef void (*btf_trace_hrtimer_cancel)(void *, struct hrtimer *);\n\ntypedef void (*btf_trace_itimer_state)(void *, int, const struct itimerspec64 * const, long long unsigned int);\n\ntypedef void (*btf_trace_itimer_expire)(void *, int, struct pid *, long long unsigned int);\n\ntypedef void (*btf_trace_tick_stop)(void *, int, int);\n\nstruct timer_base {\n\traw_spinlock_t lock;\n\tstruct timer_list *running_timer;\n\tlong unsigned int clk;\n\tlong unsigned int next_expiry;\n\tunsigned int cpu;\n\tbool next_expiry_recalc;\n\tbool is_idle;\n\tlong unsigned int pending_map[9];\n\tstruct hlist_head vectors[576];\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct process_timer {\n\tstruct timer_list timer;\n\tstruct task_struct *task;\n};\n\nenum tick_device_mode {\n\tTICKDEV_MODE_PERIODIC = 0,\n\tTICKDEV_MODE_ONESHOT = 1,\n};\n\nstruct tick_device {\n\tstruct clock_event_device *evtdev;\n\tenum tick_device_mode mode;\n};\n\nstruct ktime_timestamps {\n\tu64 mono;\n\tu64 boot;\n\tu64 real;\n};\n\nstruct system_time_snapshot {\n\tu64 cycles;\n\tktime_t real;\n\tktime_t raw;\n\tunsigned int clock_was_set_seq;\n\tu8 cs_was_changed_seq;\n};\n\nstruct system_device_crosststamp {\n\tktime_t device;\n\tktime_t sys_realtime;\n\tktime_t sys_monoraw;\n};\n\nstruct audit_ntp_val {\n\tlong long int oldval;\n\tlong long int newval;\n};\n\nstruct audit_ntp_data {\n\tstruct audit_ntp_val vals[6];\n};\n\nenum timekeeping_adv_mode {\n\tTK_ADV_TICK = 0,\n\tTK_ADV_FREQ = 1,\n};\n\nstruct tk_fast {\n\tseqcount_latch_t seq;\n\tstruct tk_read_base base[2];\n};\n\ntypedef s64 int64_t;\n\nenum tick_nohz_mode {\n\tNOHZ_MODE_INACTIVE = 0,\n\tNOHZ_MODE_LOWRES = 1,\n\tNOHZ_MODE_HIGHRES = 2,\n};\n\nstruct tick_sched {\n\tstruct hrtimer sched_timer;\n\tlong unsigned int check_clocks;\n\tenum tick_nohz_mode nohz_mode;\n\tunsigned int inidle: 1;\n\tunsigned int tick_stopped: 1;\n\tunsigned int idle_active: 1;\n\tunsigned int do_timer_last: 1;\n\tunsigned int got_idle_tick: 1;\n\tktime_t last_tick;\n\tktime_t next_tick;\n\tlong unsigned int idle_jiffies;\n\tlong unsigned int idle_calls;\n\tlong unsigned int idle_sleeps;\n\tktime_t idle_entrytime;\n\tktime_t idle_waketime;\n\tktime_t idle_exittime;\n\tktime_t idle_sleeptime;\n\tktime_t iowait_sleeptime;\n\tlong unsigned int last_jiffies;\n\tu64 timer_expires;\n\tu64 timer_expires_base;\n\tu64 next_timer;\n\tktime_t idle_expires;\n\tatomic_t tick_dep_mask;\n};\n\nstruct timer_list_iter {\n\tint cpu;\n\tbool second_pass;\n\tu64 now;\n};\n\nstruct tm {\n\tint tm_sec;\n\tint tm_min;\n\tint tm_hour;\n\tint tm_mday;\n\tint tm_mon;\n\tlong int tm_year;\n\tint tm_wday;\n\tint tm_yday;\n};\n\nstruct cyclecounter {\n\tu64 (*read)(const struct cyclecounter *);\n\tu64 mask;\n\tu32 mult;\n\tu32 shift;\n};\n\nstruct timecounter {\n\tconst struct cyclecounter *cc;\n\tu64 cycle_last;\n\tu64 nsec;\n\tu64 mask;\n\tu64 frac;\n};\n\ntypedef __kernel_timer_t timer_t;\n\nenum alarmtimer_type {\n\tALARM_REALTIME = 0,\n\tALARM_BOOTTIME = 1,\n\tALARM_NUMTYPE = 2,\n\tALARM_REALTIME_FREEZER = 3,\n\tALARM_BOOTTIME_FREEZER = 4,\n};\n\nenum alarmtimer_restart {\n\tALARMTIMER_NORESTART = 0,\n\tALARMTIMER_RESTART = 1,\n};\n\nstruct alarm {\n\tstruct timerqueue_node node;\n\tstruct hrtimer timer;\n\tenum alarmtimer_restart (*function)(struct alarm *, ktime_t);\n\tenum alarmtimer_type type;\n\tint state;\n\tvoid *data;\n};\n\nstruct cpu_timer {\n\tstruct timerqueue_node node;\n\tstruct timerqueue_head *head;\n\tstruct pid *pid;\n\tstruct list_head elist;\n\tint firing;\n};\n\nstruct k_clock;\n\nstruct k_itimer {\n\tstruct list_head list;\n\tstruct hlist_node t_hash;\n\tspinlock_t it_lock;\n\tconst struct k_clock *kclock;\n\tclockid_t it_clock;\n\ttimer_t it_id;\n\tint it_active;\n\ts64 it_overrun;\n\ts64 it_overrun_last;\n\tint it_requeue_pending;\n\tint it_sigev_notify;\n\tktime_t it_interval;\n\tstruct signal_struct *it_signal;\n\tunion {\n\t\tstruct pid *it_pid;\n\t\tstruct task_struct *it_process;\n\t};\n\tstruct sigqueue *sigq;\n\tunion {\n\t\tstruct {\n\t\t\tstruct hrtimer timer;\n\t\t} real;\n\t\tstruct cpu_timer cpu;\n\t\tstruct {\n\t\t\tstruct alarm alarmtimer;\n\t\t} alarm;\n\t} it;\n\tstruct callback_head rcu;\n};\n\nstruct k_clock {\n\tint (*clock_getres)(const clockid_t, struct timespec64 *);\n\tint (*clock_set)(const clockid_t, const struct timespec64 *);\n\tint (*clock_get_timespec)(const clockid_t, struct timespec64 *);\n\tktime_t (*clock_get_ktime)(const clockid_t);\n\tint (*clock_adj)(const clockid_t, struct __kernel_timex *);\n\tint (*timer_create)(struct k_itimer *);\n\tint (*nsleep)(const clockid_t, int, const struct timespec64 *);\n\tint (*timer_set)(struct k_itimer *, int, struct itimerspec64 *, struct itimerspec64 *);\n\tint (*timer_del)(struct k_itimer *);\n\tvoid (*timer_get)(struct k_itimer *, struct itimerspec64 *);\n\tvoid (*timer_rearm)(struct k_itimer *);\n\ts64 (*timer_forward)(struct k_itimer *, ktime_t);\n\tktime_t (*timer_remaining)(struct k_itimer *, ktime_t);\n\tint (*timer_try_to_cancel)(struct k_itimer *);\n\tvoid (*timer_arm)(struct k_itimer *, ktime_t, bool, bool);\n\tvoid (*timer_wait_running)(struct k_itimer *);\n};\n\nstruct class_interface {\n\tstruct list_head node;\n\tstruct class *class;\n\tint (*add_dev)(struct device *, struct class_interface *);\n\tvoid (*remove_dev)(struct device *, struct class_interface *);\n};\n\nstruct platform_driver {\n\tint (*probe)(struct platform_device *);\n\tint (*remove)(struct platform_device *);\n\tvoid (*shutdown)(struct platform_device *);\n\tint (*suspend)(struct platform_device *, pm_message_t);\n\tint (*resume)(struct platform_device *);\n\tstruct device_driver driver;\n\tconst struct platform_device_id *id_table;\n\tbool prevent_deferred_probe;\n};\n\nstruct trace_event_raw_alarmtimer_suspend {\n\tstruct trace_entry ent;\n\ts64 expires;\n\tunsigned char alarm_type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_alarm_class {\n\tstruct trace_entry ent;\n\tvoid *alarm;\n\tunsigned char alarm_type;\n\ts64 expires;\n\ts64 now;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_alarmtimer_suspend {};\n\nstruct trace_event_data_offsets_alarm_class {};\n\ntypedef void (*btf_trace_alarmtimer_suspend)(void *, ktime_t, int);\n\ntypedef void (*btf_trace_alarmtimer_fired)(void *, struct alarm *, ktime_t);\n\ntypedef void (*btf_trace_alarmtimer_start)(void *, struct alarm *, ktime_t);\n\ntypedef void (*btf_trace_alarmtimer_cancel)(void *, struct alarm *, ktime_t);\n\nstruct alarm_base {\n\tspinlock_t lock;\n\tstruct timerqueue_head timerqueue;\n\tktime_t (*get_ktime)();\n\tvoid (*get_timespec)(struct timespec64 *);\n\tclockid_t base_clockid;\n};\n\nstruct sigevent {\n\tsigval_t sigev_value;\n\tint sigev_signo;\n\tint sigev_notify;\n\tunion {\n\t\tint _pad[12];\n\t\tint _tid;\n\t\tstruct {\n\t\t\tvoid (*_function)(sigval_t);\n\t\t\tvoid *_attribute;\n\t\t} _sigev_thread;\n\t} _sigev_un;\n};\n\ntypedef struct sigevent sigevent_t;\n\nstruct compat_sigevent {\n\tcompat_sigval_t sigev_value;\n\tcompat_int_t sigev_signo;\n\tcompat_int_t sigev_notify;\n\tunion {\n\t\tcompat_int_t _pad[13];\n\t\tcompat_int_t _tid;\n\t\tstruct {\n\t\t\tcompat_uptr_t _function;\n\t\t\tcompat_uptr_t _attribute;\n\t\t} _sigev_thread;\n\t} _sigev_un;\n};\n\nstruct posix_clock;\n\nstruct posix_clock_operations {\n\tstruct module *owner;\n\tint (*clock_adjtime)(struct posix_clock *, struct __kernel_timex *);\n\tint (*clock_gettime)(struct posix_clock *, struct timespec64 *);\n\tint (*clock_getres)(struct posix_clock *, struct timespec64 *);\n\tint (*clock_settime)(struct posix_clock *, const struct timespec64 *);\n\tlong int (*ioctl)(struct posix_clock *, unsigned int, long unsigned int);\n\tint (*open)(struct posix_clock *, fmode_t);\n\t__poll_t (*poll)(struct posix_clock *, struct file *, poll_table *);\n\tint (*release)(struct posix_clock *);\n\tssize_t (*read)(struct posix_clock *, uint, char *, size_t);\n};\n\nstruct posix_clock {\n\tstruct posix_clock_operations ops;\n\tstruct cdev cdev;\n\tstruct device *dev;\n\tstruct rw_semaphore rwsem;\n\tbool zombie;\n};\n\nstruct posix_clock_desc {\n\tstruct file *fp;\n\tstruct posix_clock *clk;\n};\n\nstruct __kernel_old_itimerval {\n\tstruct __kernel_old_timeval it_interval;\n\tstruct __kernel_old_timeval it_value;\n};\n\nstruct old_itimerval32 {\n\tstruct old_timeval32 it_interval;\n\tstruct old_timeval32 it_value;\n};\n\nstruct ce_unbind {\n\tstruct clock_event_device *ce;\n\tint res;\n};\n\nstruct proc_timens_offset {\n\tint clockid;\n\tstruct timespec64 val;\n};\n\nunion futex_key {\n\tstruct {\n\t\tu64 i_seq;\n\t\tlong unsigned int pgoff;\n\t\tunsigned int offset;\n\t} shared;\n\tstruct {\n\t\tunion {\n\t\t\tstruct mm_struct *mm;\n\t\t\tu64 __tmp;\n\t\t};\n\t\tlong unsigned int address;\n\t\tunsigned int offset;\n\t} private;\n\tstruct {\n\t\tu64 ptr;\n\t\tlong unsigned int word;\n\t\tunsigned int offset;\n\t} both;\n};\n\nstruct futex_pi_state {\n\tstruct list_head list;\n\tstruct rt_mutex pi_mutex;\n\tstruct task_struct *owner;\n\trefcount_t refcount;\n\tunion futex_key key;\n};\n\nstruct futex_q {\n\tstruct plist_node list;\n\tstruct task_struct *task;\n\tspinlock_t *lock_ptr;\n\tunion futex_key key;\n\tstruct futex_pi_state *pi_state;\n\tstruct rt_mutex_waiter *rt_waiter;\n\tunion futex_key *requeue_pi_key;\n\tu32 bitset;\n};\n\nstruct futex_hash_bucket {\n\tatomic_t waiters;\n\tspinlock_t lock;\n\tstruct plist_head chain;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum futex_access {\n\tFUTEX_READ = 0,\n\tFUTEX_WRITE = 1,\n};\n\nstruct dma_chan {\n\tint lock;\n\tconst char *device_id;\n};\n\nstruct call_function_data {\n\tcall_single_data_t *csd;\n\tcpumask_var_t cpumask;\n\tcpumask_var_t cpumask_ipi;\n};\n\nstruct smp_call_on_cpu_struct {\n\tstruct work_struct work;\n\tstruct completion done;\n\tint (*func)(void *);\n\tvoid *data;\n\tint ret;\n\tint cpu;\n};\n\nstruct latch_tree_root {\n\tseqcount_latch_t seq;\n\tstruct rb_root tree[2];\n};\n\nstruct latch_tree_ops {\n\tbool (*less)(struct latch_tree_node *, struct latch_tree_node *);\n\tint (*comp)(void *, struct latch_tree_node *);\n};\n\nstruct module_use {\n\tstruct list_head source_list;\n\tstruct list_head target_list;\n\tstruct module *source;\n\tstruct module *target;\n};\n\nstruct module_sect_attr {\n\tstruct bin_attribute battr;\n\tlong unsigned int address;\n};\n\nstruct module_sect_attrs {\n\tstruct attribute_group grp;\n\tunsigned int nsections;\n\tstruct module_sect_attr attrs[0];\n};\n\nstruct module_notes_attrs {\n\tstruct kobject *dir;\n\tunsigned int notes;\n\tstruct bin_attribute attrs[0];\n};\n\nenum mod_license {\n\tNOT_GPL_ONLY = 0,\n\tGPL_ONLY = 1,\n\tWILL_BE_GPL_ONLY = 2,\n};\n\nstruct symsearch {\n\tconst struct kernel_symbol *start;\n\tconst struct kernel_symbol *stop;\n\tconst s32 *crcs;\n\tenum mod_license license;\n\tbool unused;\n};\n\nenum kernel_read_file_id {\n\tREADING_UNKNOWN = 0,\n\tREADING_FIRMWARE = 1,\n\tREADING_MODULE = 2,\n\tREADING_KEXEC_IMAGE = 3,\n\tREADING_KEXEC_INITRAMFS = 4,\n\tREADING_POLICY = 5,\n\tREADING_X509_CERTIFICATE = 6,\n\tREADING_MAX_ID = 7,\n};\n\nenum kernel_load_data_id {\n\tLOADING_UNKNOWN = 0,\n\tLOADING_FIRMWARE = 1,\n\tLOADING_MODULE = 2,\n\tLOADING_KEXEC_IMAGE = 3,\n\tLOADING_KEXEC_INITRAMFS = 4,\n\tLOADING_POLICY = 5,\n\tLOADING_X509_CERTIFICATE = 6,\n\tLOADING_MAX_ID = 7,\n};\n\nenum {\n\tPROC_ENTRY_PERMANENT = 1,\n};\n\nstruct load_info {\n\tconst char *name;\n\tstruct module *mod;\n\tElf64_Ehdr *hdr;\n\tlong unsigned int len;\n\tElf64_Shdr *sechdrs;\n\tchar *secstrings;\n\tchar *strtab;\n\tlong unsigned int symoffs;\n\tlong unsigned int stroffs;\n\tlong unsigned int init_typeoffs;\n\tlong unsigned int core_typeoffs;\n\tstruct _ddebug *debug;\n\tunsigned int num_debug;\n\tbool sig_ok;\n\tlong unsigned int mod_kallsyms_init_off;\n\tstruct {\n\t\tunsigned int sym;\n\t\tunsigned int str;\n\t\tunsigned int mod;\n\t\tunsigned int vers;\n\t\tunsigned int info;\n\t\tunsigned int pcpu;\n\t} index;\n};\n\nstruct trace_event_raw_module_load {\n\tstruct trace_entry ent;\n\tunsigned int taints;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_module_free {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_module_refcnt {\n\tstruct trace_entry ent;\n\tlong unsigned int ip;\n\tint refcnt;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_module_request {\n\tstruct trace_entry ent;\n\tlong unsigned int ip;\n\tbool wait;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_module_load {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_module_free {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_module_refcnt {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_module_request {\n\tu32 name;\n};\n\ntypedef void (*btf_trace_module_load)(void *, struct module *);\n\ntypedef void (*btf_trace_module_free)(void *, struct module *);\n\ntypedef void (*btf_trace_module_get)(void *, struct module *, long unsigned int);\n\ntypedef void (*btf_trace_module_put)(void *, struct module *, long unsigned int);\n\ntypedef void (*btf_trace_module_request)(void *, char *, bool, long unsigned int);\n\nstruct mod_tree_root {\n\tstruct latch_tree_root root;\n\tlong unsigned int addr_min;\n\tlong unsigned int addr_max;\n};\n\nstruct find_symbol_arg {\n\tconst char *name;\n\tbool gplok;\n\tbool warn;\n\tstruct module *owner;\n\tconst s32 *crc;\n\tconst struct kernel_symbol *sym;\n\tenum mod_license license;\n};\n\nstruct mod_initfree {\n\tstruct llist_node node;\n\tvoid *module_init;\n};\n\nstruct module_signature {\n\tu8 algo;\n\tu8 hash;\n\tu8 id_type;\n\tu8 signer_len;\n\tu8 key_id_len;\n\tu8 __pad[3];\n\t__be32 sig_len;\n};\n\nenum pkey_id_type {\n\tPKEY_ID_PGP = 0,\n\tPKEY_ID_X509 = 1,\n\tPKEY_ID_PKCS7 = 2,\n};\n\nstruct kallsym_iter {\n\tloff_t pos;\n\tloff_t pos_arch_end;\n\tloff_t pos_mod_end;\n\tloff_t pos_ftrace_mod_end;\n\tloff_t pos_bpf_end;\n\tlong unsigned int value;\n\tunsigned int nameoff;\n\tchar type;\n\tchar name[128];\n\tchar module_name[56];\n\tint exported;\n\tint show_value;\n};\n\ntypedef __u16 comp_t;\n\nstruct acct_v3 {\n\tchar ac_flag;\n\tchar ac_version;\n\t__u16 ac_tty;\n\t__u32 ac_exitcode;\n\t__u32 ac_uid;\n\t__u32 ac_gid;\n\t__u32 ac_pid;\n\t__u32 ac_ppid;\n\t__u32 ac_btime;\n\t__u32 ac_etime;\n\tcomp_t ac_utime;\n\tcomp_t ac_stime;\n\tcomp_t ac_mem;\n\tcomp_t ac_io;\n\tcomp_t ac_rw;\n\tcomp_t ac_minflt;\n\tcomp_t ac_majflt;\n\tcomp_t ac_swaps;\n\tchar ac_comm[16];\n};\n\ntypedef struct acct_v3 acct_t;\n\nstruct fs_pin {\n\twait_queue_head_t wait;\n\tint done;\n\tstruct hlist_node s_list;\n\tstruct hlist_node m_list;\n\tvoid (*kill)(struct fs_pin *);\n};\n\nstruct bsd_acct_struct {\n\tstruct fs_pin pin;\n\tatomic_long_t count;\n\tstruct callback_head rcu;\n\tstruct mutex lock;\n\tint active;\n\tlong unsigned int needcheck;\n\tstruct file *file;\n\tstruct pid_namespace *ns;\n\tstruct work_struct work;\n\tstruct completion done;\n};\n\nstruct elf64_note {\n\tElf64_Word n_namesz;\n\tElf64_Word n_descsz;\n\tElf64_Word n_type;\n};\n\nstruct elf_note_section {\n\tstruct elf64_note n_hdr;\n\tu8 n_data[0];\n};\n\ntypedef long unsigned int elf_greg_t;\n\ntypedef elf_greg_t elf_gregset_t[27];\n\nstruct elf_siginfo {\n\tint si_signo;\n\tint si_code;\n\tint si_errno;\n};\n\nstruct elf_prstatus {\n\tstruct elf_siginfo pr_info;\n\tshort int pr_cursig;\n\tlong unsigned int pr_sigpend;\n\tlong unsigned int pr_sighold;\n\tpid_t pr_pid;\n\tpid_t pr_ppid;\n\tpid_t pr_pgrp;\n\tpid_t pr_sid;\n\tstruct __kernel_old_timeval pr_utime;\n\tstruct __kernel_old_timeval pr_stime;\n\tstruct __kernel_old_timeval pr_cutime;\n\tstruct __kernel_old_timeval pr_cstime;\n\telf_gregset_t pr_reg;\n\tint pr_fpvalid;\n};\n\ntypedef u32 note_buf_t[92];\n\nstruct compat_kexec_segment {\n\tcompat_uptr_t buf;\n\tcompat_size_t bufsz;\n\tcompat_ulong_t mem;\n\tcompat_size_t memsz;\n};\n\nstruct elf64_phdr {\n\tElf64_Word p_type;\n\tElf64_Word p_flags;\n\tElf64_Off p_offset;\n\tElf64_Addr p_vaddr;\n\tElf64_Addr p_paddr;\n\tElf64_Xword p_filesz;\n\tElf64_Xword p_memsz;\n\tElf64_Xword p_align;\n};\n\ntypedef struct elf64_phdr Elf64_Phdr;\n\nstruct shash_alg {\n\tint (*init)(struct shash_desc *);\n\tint (*update)(struct shash_desc *, const u8 *, unsigned int);\n\tint (*final)(struct shash_desc *, u8 *);\n\tint (*finup)(struct shash_desc *, const u8 *, unsigned int, u8 *);\n\tint (*digest)(struct shash_desc *, const u8 *, unsigned int, u8 *);\n\tint (*export)(struct shash_desc *, void *);\n\tint (*import)(struct shash_desc *, const void *);\n\tint (*setkey)(struct crypto_shash *, const u8 *, unsigned int);\n\tint (*init_tfm)(struct crypto_shash *);\n\tvoid (*exit_tfm)(struct crypto_shash *);\n\tunsigned int descsize;\n\tint: 32;\n\tunsigned int digestsize;\n\tunsigned int statesize;\n\tstruct crypto_alg base;\n};\n\nstruct kexec_sha_region {\n\tlong unsigned int start;\n\tlong unsigned int len;\n};\n\nenum migrate_reason {\n\tMR_COMPACTION = 0,\n\tMR_MEMORY_FAILURE = 1,\n\tMR_MEMORY_HOTPLUG = 2,\n\tMR_SYSCALL = 3,\n\tMR_MEMPOLICY_MBIND = 4,\n\tMR_NUMA_MISPLACED = 5,\n\tMR_CONTIG_RANGE = 6,\n\tMR_TYPES = 7,\n};\n\ntypedef __kernel_ulong_t __kernel_ino_t;\n\ntypedef __kernel_ino_t ino_t;\n\nenum bpf_link_type {\n\tBPF_LINK_TYPE_UNSPEC = 0,\n\tBPF_LINK_TYPE_RAW_TRACEPOINT = 1,\n\tBPF_LINK_TYPE_TRACING = 2,\n\tBPF_LINK_TYPE_CGROUP = 3,\n\tBPF_LINK_TYPE_ITER = 4,\n\tBPF_LINK_TYPE_NETNS = 5,\n\tBPF_LINK_TYPE_XDP = 6,\n\tMAX_BPF_LINK_TYPE = 7,\n};\n\nstruct bpf_link_info {\n\t__u32 type;\n\t__u32 id;\n\t__u32 prog_id;\n\tunion {\n\t\tstruct {\n\t\t\t__u64 tp_name;\n\t\t\t__u32 tp_name_len;\n\t\t} raw_tracepoint;\n\t\tstruct {\n\t\t\t__u32 attach_type;\n\t\t} tracing;\n\t\tstruct {\n\t\t\t__u64 cgroup_id;\n\t\t\t__u32 attach_type;\n\t\t} cgroup;\n\t\tstruct {\n\t\t\t__u64 target_name;\n\t\t\t__u32 target_name_len;\n\t\t\tunion {\n\t\t\t\tstruct {\n\t\t\t\t\t__u32 map_id;\n\t\t\t\t} map;\n\t\t\t};\n\t\t} iter;\n\t\tstruct {\n\t\t\t__u32 netns_ino;\n\t\t\t__u32 attach_type;\n\t\t} netns;\n\t\tstruct {\n\t\t\t__u32 ifindex;\n\t\t} xdp;\n\t};\n};\n\nstruct bpf_link_ops;\n\nstruct bpf_link {\n\tatomic64_t refcnt;\n\tu32 id;\n\tenum bpf_link_type type;\n\tconst struct bpf_link_ops *ops;\n\tstruct bpf_prog *prog;\n\tstruct work_struct work;\n};\n\nstruct bpf_link_ops {\n\tvoid (*release)(struct bpf_link *);\n\tvoid (*dealloc)(struct bpf_link *);\n\tint (*detach)(struct bpf_link *);\n\tint (*update_prog)(struct bpf_link *, struct bpf_prog *, struct bpf_prog *);\n\tvoid (*show_fdinfo)(const struct bpf_link *, struct seq_file *);\n\tint (*fill_link_info)(const struct bpf_link *, struct bpf_link_info *);\n};\n\nstruct bpf_cgroup_link {\n\tstruct bpf_link link;\n\tstruct cgroup *cgroup;\n\tenum bpf_attach_type type;\n};\n\nenum {\n\tCGRP_NOTIFY_ON_RELEASE = 0,\n\tCGRP_CPUSET_CLONE_CHILDREN = 1,\n\tCGRP_FREEZE = 2,\n\tCGRP_FROZEN = 3,\n};\n\nenum {\n\tCGRP_ROOT_NOPREFIX = 2,\n\tCGRP_ROOT_XATTR = 4,\n\tCGRP_ROOT_NS_DELEGATE = 8,\n\tCGRP_ROOT_CPUSET_V2_MODE = 16,\n\tCGRP_ROOT_MEMORY_LOCAL_EVENTS = 32,\n\tCGRP_ROOT_MEMORY_RECURSIVE_PROT = 64,\n};\n\nstruct cgroup_taskset {\n\tstruct list_head src_csets;\n\tstruct list_head dst_csets;\n\tint nr_tasks;\n\tint ssid;\n\tstruct list_head *csets;\n\tstruct css_set *cur_cset;\n\tstruct task_struct *cur_task;\n};\n\nstruct css_task_iter {\n\tstruct cgroup_subsys *ss;\n\tunsigned int flags;\n\tstruct list_head *cset_pos;\n\tstruct list_head *cset_head;\n\tstruct list_head *tcset_pos;\n\tstruct list_head *tcset_head;\n\tstruct list_head *task_pos;\n\tstruct list_head *cur_tasks_head;\n\tstruct css_set *cur_cset;\n\tstruct css_set *cur_dcset;\n\tstruct task_struct *cur_task;\n\tstruct list_head iters_node;\n};\n\nstruct cgroup_fs_context {\n\tstruct kernfs_fs_context kfc;\n\tstruct cgroup_root *root;\n\tstruct cgroup_namespace *ns;\n\tunsigned int flags;\n\tbool cpuset_clone_children;\n\tbool none;\n\tbool all_ss;\n\tu16 subsys_mask;\n\tchar *name;\n\tchar *release_agent;\n};\n\nstruct cgrp_cset_link {\n\tstruct cgroup *cgrp;\n\tstruct css_set *cset;\n\tstruct list_head cset_link;\n\tstruct list_head cgrp_link;\n};\n\nstruct cgroup_mgctx {\n\tstruct list_head preloaded_src_csets;\n\tstruct list_head preloaded_dst_csets;\n\tstruct cgroup_taskset tset;\n\tu16 ss_mask;\n};\n\nstruct trace_event_raw_cgroup_root {\n\tstruct trace_entry ent;\n\tint root;\n\tu16 ss_mask;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_cgroup {\n\tstruct trace_entry ent;\n\tint root;\n\tint id;\n\tint level;\n\tu32 __data_loc_path;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_cgroup_migrate {\n\tstruct trace_entry ent;\n\tint dst_root;\n\tint dst_id;\n\tint dst_level;\n\tint pid;\n\tu32 __data_loc_dst_path;\n\tu32 __data_loc_comm;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_cgroup_event {\n\tstruct trace_entry ent;\n\tint root;\n\tint id;\n\tint level;\n\tu32 __data_loc_path;\n\tint val;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_cgroup_root {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_cgroup {\n\tu32 path;\n};\n\nstruct trace_event_data_offsets_cgroup_migrate {\n\tu32 dst_path;\n\tu32 comm;\n};\n\nstruct trace_event_data_offsets_cgroup_event {\n\tu32 path;\n};\n\ntypedef void (*btf_trace_cgroup_setup_root)(void *, struct cgroup_root *);\n\ntypedef void (*btf_trace_cgroup_destroy_root)(void *, struct cgroup_root *);\n\ntypedef void (*btf_trace_cgroup_remount)(void *, struct cgroup_root *);\n\ntypedef void (*btf_trace_cgroup_mkdir)(void *, struct cgroup *, const char *);\n\ntypedef void (*btf_trace_cgroup_rmdir)(void *, struct cgroup *, const char *);\n\ntypedef void (*btf_trace_cgroup_release)(void *, struct cgroup *, const char *);\n\ntypedef void (*btf_trace_cgroup_rename)(void *, struct cgroup *, const char *);\n\ntypedef void (*btf_trace_cgroup_freeze)(void *, struct cgroup *, const char *);\n\ntypedef void (*btf_trace_cgroup_unfreeze)(void *, struct cgroup *, const char *);\n\ntypedef void (*btf_trace_cgroup_attach_task)(void *, struct cgroup *, const char *, struct task_struct *, bool);\n\ntypedef void (*btf_trace_cgroup_transfer_tasks)(void *, struct cgroup *, const char *, struct task_struct *, bool);\n\ntypedef void (*btf_trace_cgroup_notify_populated)(void *, struct cgroup *, const char *, int);\n\ntypedef void (*btf_trace_cgroup_notify_frozen)(void *, struct cgroup *, const char *, int);\n\nenum cgroup2_param {\n\tOpt_nsdelegate = 0,\n\tOpt_memory_localevents = 1,\n\tOpt_memory_recursiveprot = 2,\n\tnr__cgroup2_params = 3,\n};\n\nstruct cgroupstats {\n\t__u64 nr_sleeping;\n\t__u64 nr_running;\n\t__u64 nr_stopped;\n\t__u64 nr_uninterruptible;\n\t__u64 nr_io_wait;\n};\n\nenum cgroup_filetype {\n\tCGROUP_FILE_PROCS = 0,\n\tCGROUP_FILE_TASKS = 1,\n};\n\nstruct cgroup_pidlist {\n\tstruct {\n\t\tenum cgroup_filetype type;\n\t\tstruct pid_namespace *ns;\n\t} key;\n\tpid_t *list;\n\tint length;\n\tstruct list_head links;\n\tstruct cgroup *owner;\n\tstruct delayed_work destroy_dwork;\n};\n\nenum cgroup1_param {\n\tOpt_all = 0,\n\tOpt_clone_children = 1,\n\tOpt_cpuset_v2_mode = 2,\n\tOpt_name = 3,\n\tOpt_none = 4,\n\tOpt_noprefix = 5,\n\tOpt_release_agent = 6,\n\tOpt_xattr = 7,\n};\n\nenum freezer_state_flags {\n\tCGROUP_FREEZER_ONLINE = 1,\n\tCGROUP_FREEZING_SELF = 2,\n\tCGROUP_FREEZING_PARENT = 4,\n\tCGROUP_FROZEN = 8,\n\tCGROUP_FREEZING = 6,\n};\n\nstruct freezer {\n\tstruct cgroup_subsys_state css;\n\tunsigned int state;\n};\n\nstruct pids_cgroup {\n\tstruct cgroup_subsys_state css;\n\tatomic64_t counter;\n\tatomic64_t limit;\n\tstruct cgroup_file events_file;\n\tatomic64_t events_limit;\n};\n\nstruct root_domain___2;\n\nstruct fmeter {\n\tint cnt;\n\tint val;\n\ttime64_t time;\n\tspinlock_t lock;\n};\n\nstruct cpuset {\n\tstruct cgroup_subsys_state css;\n\tlong unsigned int flags;\n\tcpumask_var_t cpus_allowed;\n\tnodemask_t mems_allowed;\n\tcpumask_var_t effective_cpus;\n\tnodemask_t effective_mems;\n\tcpumask_var_t subparts_cpus;\n\tnodemask_t old_mems_allowed;\n\tstruct fmeter fmeter;\n\tint attach_in_progress;\n\tint pn;\n\tint relax_domain_level;\n\tint nr_subparts_cpus;\n\tint partition_root_state;\n\tint use_parent_ecpus;\n\tint child_ecpus_count;\n};\n\nstruct tmpmasks {\n\tcpumask_var_t addmask;\n\tcpumask_var_t delmask;\n\tcpumask_var_t new_cpus;\n};\n\ntypedef enum {\n\tCS_ONLINE = 0,\n\tCS_CPU_EXCLUSIVE = 1,\n\tCS_MEM_EXCLUSIVE = 2,\n\tCS_MEM_HARDWALL = 3,\n\tCS_MEMORY_MIGRATE = 4,\n\tCS_SCHED_LOAD_BALANCE = 5,\n\tCS_SPREAD_PAGE = 6,\n\tCS_SPREAD_SLAB = 7,\n} cpuset_flagbits_t;\n\nenum subparts_cmd {\n\tpartcmd_enable = 0,\n\tpartcmd_disable = 1,\n\tpartcmd_update = 2,\n};\n\nstruct cpuset_migrate_mm_work {\n\tstruct work_struct work;\n\tstruct mm_struct *mm;\n\tnodemask_t from;\n\tnodemask_t to;\n};\n\ntypedef enum {\n\tFILE_MEMORY_MIGRATE = 0,\n\tFILE_CPULIST = 1,\n\tFILE_MEMLIST = 2,\n\tFILE_EFFECTIVE_CPULIST = 3,\n\tFILE_EFFECTIVE_MEMLIST = 4,\n\tFILE_SUBPARTS_CPULIST = 5,\n\tFILE_CPU_EXCLUSIVE = 6,\n\tFILE_MEM_EXCLUSIVE = 7,\n\tFILE_MEM_HARDWALL = 8,\n\tFILE_SCHED_LOAD_BALANCE = 9,\n\tFILE_PARTITION_ROOT = 10,\n\tFILE_SCHED_RELAX_DOMAIN_LEVEL = 11,\n\tFILE_MEMORY_PRESSURE_ENABLED = 12,\n\tFILE_MEMORY_PRESSURE = 13,\n\tFILE_SPREAD_PAGE = 14,\n\tFILE_SPREAD_SLAB = 15,\n} cpuset_filetype_t;\n\nstruct kernel_pkey_query {\n\t__u32 supported_ops;\n\t__u32 key_size;\n\t__u16 max_data_size;\n\t__u16 max_sig_size;\n\t__u16 max_enc_size;\n\t__u16 max_dec_size;\n};\n\nenum kernel_pkey_operation {\n\tkernel_pkey_encrypt = 0,\n\tkernel_pkey_decrypt = 1,\n\tkernel_pkey_sign = 2,\n\tkernel_pkey_verify = 3,\n};\n\nstruct kernel_pkey_params {\n\tstruct key *key;\n\tconst char *encoding;\n\tconst char *hash_algo;\n\tchar *info;\n\t__u32 in_len;\n\tunion {\n\t\t__u32 out_len;\n\t\t__u32 in2_len;\n\t};\n\tenum kernel_pkey_operation op: 8;\n};\n\nstruct key_preparsed_payload {\n\tconst char *orig_description;\n\tchar *description;\n\tunion key_payload payload;\n\tconst void *data;\n\tsize_t datalen;\n\tsize_t quotalen;\n\ttime64_t expiry;\n};\n\nstruct key_match_data {\n\tbool (*cmp)(const struct key *, const struct key_match_data *);\n\tconst void *raw_data;\n\tvoid *preparsed;\n\tunsigned int lookup_type;\n};\n\nstruct idmap_key {\n\tbool map_up;\n\tu32 id;\n\tu32 count;\n};\n\nstruct ctl_path {\n\tconst char *procname;\n};\n\nstruct cpu_stop_done {\n\tatomic_t nr_todo;\n\tint ret;\n\tstruct completion completion;\n};\n\nstruct cpu_stopper {\n\tstruct task_struct *thread;\n\traw_spinlock_t lock;\n\tbool enabled;\n\tstruct list_head works;\n\tstruct cpu_stop_work stop_work;\n\tlong unsigned int caller;\n\tcpu_stop_fn_t fn;\n};\n\nenum multi_stop_state {\n\tMULTI_STOP_NONE = 0,\n\tMULTI_STOP_PREPARE = 1,\n\tMULTI_STOP_DISABLE_IRQ = 2,\n\tMULTI_STOP_RUN = 3,\n\tMULTI_STOP_EXIT = 4,\n};\n\nstruct multi_stop_data {\n\tcpu_stop_fn_t fn;\n\tvoid *data;\n\tunsigned int num_threads;\n\tconst struct cpumask *active_cpus;\n\tenum multi_stop_state state;\n\tatomic_t thread_ack;\n};\n\ntypedef int __kernel_mqd_t;\n\ntypedef __kernel_mqd_t mqd_t;\n\nenum audit_state {\n\tAUDIT_DISABLED = 0,\n\tAUDIT_BUILD_CONTEXT = 1,\n\tAUDIT_RECORD_CONTEXT = 2,\n};\n\nstruct audit_cap_data {\n\tkernel_cap_t permitted;\n\tkernel_cap_t inheritable;\n\tunion {\n\t\tunsigned int fE;\n\t\tkernel_cap_t effective;\n\t};\n\tkernel_cap_t ambient;\n\tkuid_t rootid;\n};\n\nstruct audit_names {\n\tstruct list_head list;\n\tstruct filename *name;\n\tint name_len;\n\tbool hidden;\n\tlong unsigned int ino;\n\tdev_t dev;\n\tumode_t mode;\n\tkuid_t uid;\n\tkgid_t gid;\n\tdev_t rdev;\n\tu32 osid;\n\tstruct audit_cap_data fcap;\n\tunsigned int fcap_ver;\n\tunsigned char type;\n\tbool should_free;\n};\n\nstruct mq_attr {\n\t__kernel_long_t mq_flags;\n\t__kernel_long_t mq_maxmsg;\n\t__kernel_long_t mq_msgsize;\n\t__kernel_long_t mq_curmsgs;\n\t__kernel_long_t __reserved[4];\n};\n\nstruct audit_proctitle {\n\tint len;\n\tchar *value;\n};\n\nstruct audit_aux_data;\n\nstruct __kernel_sockaddr_storage;\n\nstruct audit_tree_refs;\n\nstruct audit_context {\n\tint dummy;\n\tint in_syscall;\n\tenum audit_state state;\n\tenum audit_state current_state;\n\tunsigned int serial;\n\tint major;\n\tstruct timespec64 ctime;\n\tlong unsigned int argv[4];\n\tlong int return_code;\n\tu64 prio;\n\tint return_valid;\n\tstruct audit_names preallocated_names[5];\n\tint name_count;\n\tstruct list_head names_list;\n\tchar *filterkey;\n\tstruct path pwd;\n\tstruct audit_aux_data *aux;\n\tstruct audit_aux_data *aux_pids;\n\tstruct __kernel_sockaddr_storage *sockaddr;\n\tsize_t sockaddr_len;\n\tpid_t pid;\n\tpid_t ppid;\n\tkuid_t uid;\n\tkuid_t euid;\n\tkuid_t suid;\n\tkuid_t fsuid;\n\tkgid_t gid;\n\tkgid_t egid;\n\tkgid_t sgid;\n\tkgid_t fsgid;\n\tlong unsigned int personality;\n\tint arch;\n\tpid_t target_pid;\n\tkuid_t target_auid;\n\tkuid_t target_uid;\n\tunsigned int target_sessionid;\n\tu32 target_sid;\n\tchar target_comm[16];\n\tstruct audit_tree_refs *trees;\n\tstruct audit_tree_refs *first_trees;\n\tstruct list_head killed_trees;\n\tint tree_count;\n\tint type;\n\tunion {\n\t\tstruct {\n\t\t\tint nargs;\n\t\t\tlong int args[6];\n\t\t} socketcall;\n\t\tstruct {\n\t\t\tkuid_t uid;\n\t\t\tkgid_t gid;\n\t\t\tumode_t mode;\n\t\t\tu32 osid;\n\t\t\tint has_perm;\n\t\t\tuid_t perm_uid;\n\t\t\tgid_t perm_gid;\n\t\t\tumode_t perm_mode;\n\t\t\tlong unsigned int qbytes;\n\t\t} ipc;\n\t\tstruct {\n\t\t\tmqd_t mqdes;\n\t\t\tstruct mq_attr mqstat;\n\t\t} mq_getsetattr;\n\t\tstruct {\n\t\t\tmqd_t mqdes;\n\t\t\tint sigev_signo;\n\t\t} mq_notify;\n\t\tstruct {\n\t\t\tmqd_t mqdes;\n\t\t\tsize_t msg_len;\n\t\t\tunsigned int msg_prio;\n\t\t\tstruct timespec64 abs_timeout;\n\t\t} mq_sendrecv;\n\t\tstruct {\n\t\t\tint oflag;\n\t\t\tumode_t mode;\n\t\t\tstruct mq_attr attr;\n\t\t} mq_open;\n\t\tstruct {\n\t\t\tpid_t pid;\n\t\t\tstruct audit_cap_data cap;\n\t\t} capset;\n\t\tstruct {\n\t\t\tint fd;\n\t\t\tint flags;\n\t\t} mmap;\n\t\tstruct {\n\t\t\tint argc;\n\t\t} execve;\n\t\tstruct {\n\t\t\tchar *name;\n\t\t} module;\n\t};\n\tint fds[2];\n\tstruct audit_proctitle proctitle;\n};\n\nstruct __kernel_sockaddr_storage {\n\tunion {\n\t\tstruct {\n\t\t\t__kernel_sa_family_t ss_family;\n\t\t\tchar __data[126];\n\t\t};\n\t\tvoid *__align;\n\t};\n};\n\nenum audit_nlgrps {\n\tAUDIT_NLGRP_NONE = 0,\n\tAUDIT_NLGRP_READLOG = 1,\n\t__AUDIT_NLGRP_MAX = 2,\n};\n\nstruct audit_status {\n\t__u32 mask;\n\t__u32 enabled;\n\t__u32 failure;\n\t__u32 pid;\n\t__u32 rate_limit;\n\t__u32 backlog_limit;\n\t__u32 lost;\n\t__u32 backlog;\n\tunion {\n\t\t__u32 version;\n\t\t__u32 feature_bitmap;\n\t};\n\t__u32 backlog_wait_time;\n\t__u32 backlog_wait_time_actual;\n};\n\nstruct audit_features {\n\t__u32 vers;\n\t__u32 mask;\n\t__u32 features;\n\t__u32 lock;\n};\n\nstruct audit_tty_status {\n\t__u32 enabled;\n\t__u32 log_passwd;\n};\n\nstruct audit_sig_info {\n\tuid_t uid;\n\tpid_t pid;\n\tchar ctx[0];\n};\n\nstruct net_generic {\n\tunion {\n\t\tstruct {\n\t\t\tunsigned int len;\n\t\t\tstruct callback_head rcu;\n\t\t} s;\n\t\tvoid *ptr[0];\n\t};\n};\n\nstruct pernet_operations {\n\tstruct list_head list;\n\tint (*init)(struct net *);\n\tvoid (*pre_exit)(struct net *);\n\tvoid (*exit)(struct net *);\n\tvoid (*exit_batch)(struct list_head *);\n\tunsigned int *id;\n\tsize_t size;\n};\n\nstruct scm_creds {\n\tu32 pid;\n\tkuid_t uid;\n\tkgid_t gid;\n};\n\nstruct netlink_skb_parms {\n\tstruct scm_creds creds;\n\t__u32 portid;\n\t__u32 dst_group;\n\t__u32 flags;\n\tstruct sock *sk;\n\tbool nsid_is_set;\n\tint nsid;\n};\n\nstruct netlink_kernel_cfg {\n\tunsigned int groups;\n\tunsigned int flags;\n\tvoid (*input)(struct sk_buff *);\n\tstruct mutex *cb_mutex;\n\tint (*bind)(struct net *, int);\n\tvoid (*unbind)(struct net *, int);\n\tbool (*compare)(struct net *, struct sock *);\n};\n\nstruct audit_netlink_list {\n\t__u32 portid;\n\tstruct net *net;\n\tstruct sk_buff_head q;\n};\n\nstruct audit_net {\n\tstruct sock *sk;\n};\n\nstruct auditd_connection {\n\tstruct pid *pid;\n\tu32 portid;\n\tstruct net *net;\n\tstruct callback_head rcu;\n};\n\nstruct audit_ctl_mutex {\n\tstruct mutex lock;\n\tvoid *owner;\n};\n\nstruct audit_buffer {\n\tstruct sk_buff *skb;\n\tstruct audit_context *ctx;\n\tgfp_t gfp_mask;\n};\n\nstruct audit_reply {\n\t__u32 portid;\n\tstruct net *net;\n\tstruct sk_buff *skb;\n};\n\nenum {\n\tAudit_equal = 0,\n\tAudit_not_equal = 1,\n\tAudit_bitmask = 2,\n\tAudit_bittest = 3,\n\tAudit_lt = 4,\n\tAudit_gt = 5,\n\tAudit_le = 6,\n\tAudit_ge = 7,\n\tAudit_bad = 8,\n};\n\nstruct audit_rule_data {\n\t__u32 flags;\n\t__u32 action;\n\t__u32 field_count;\n\t__u32 mask[64];\n\t__u32 fields[64];\n\t__u32 values[64];\n\t__u32 fieldflags[64];\n\t__u32 buflen;\n\tchar buf[0];\n};\n\nstruct audit_field;\n\nstruct audit_watch;\n\nstruct audit_tree;\n\nstruct audit_fsnotify_mark;\n\nstruct audit_krule {\n\tu32 pflags;\n\tu32 flags;\n\tu32 listnr;\n\tu32 action;\n\tu32 mask[64];\n\tu32 buflen;\n\tu32 field_count;\n\tchar *filterkey;\n\tstruct audit_field *fields;\n\tstruct audit_field *arch_f;\n\tstruct audit_field *inode_f;\n\tstruct audit_watch *watch;\n\tstruct audit_tree *tree;\n\tstruct audit_fsnotify_mark *exe;\n\tstruct list_head rlist;\n\tstruct list_head list;\n\tu64 prio;\n};\n\nstruct audit_field {\n\tu32 type;\n\tunion {\n\t\tu32 val;\n\t\tkuid_t uid;\n\t\tkgid_t gid;\n\t\tstruct {\n\t\t\tchar *lsm_str;\n\t\t\tvoid *lsm_rule;\n\t\t};\n\t};\n\tu32 op;\n};\n\nstruct audit_entry {\n\tstruct list_head list;\n\tstruct callback_head rcu;\n\tstruct audit_krule rule;\n};\n\nstruct audit_buffer___2;\n\ntypedef int __kernel_key_t;\n\ntypedef __kernel_key_t key_t;\n\nstruct cpu_vfs_cap_data {\n\t__u32 magic_etc;\n\tkernel_cap_t permitted;\n\tkernel_cap_t inheritable;\n\tkuid_t rootid;\n};\n\nstruct kern_ipc_perm {\n\tspinlock_t lock;\n\tbool deleted;\n\tint id;\n\tkey_t key;\n\tkuid_t uid;\n\tkgid_t gid;\n\tkuid_t cuid;\n\tkgid_t cgid;\n\tumode_t mode;\n\tlong unsigned int seq;\n\tvoid *security;\n\tstruct rhash_head khtnode;\n\tstruct callback_head rcu;\n\trefcount_t refcount;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\ntypedef struct fsnotify_mark_connector *fsnotify_connp_t;\n\nstruct fsnotify_mark_connector {\n\tspinlock_t lock;\n\tshort unsigned int type;\n\tshort unsigned int flags;\n\t__kernel_fsid_t fsid;\n\tunion {\n\t\tfsnotify_connp_t *obj;\n\t\tstruct fsnotify_mark_connector *destroy_next;\n\t};\n\tstruct hlist_head list;\n};\n\nenum audit_nfcfgop {\n\tAUDIT_XT_OP_REGISTER = 0,\n\tAUDIT_XT_OP_REPLACE = 1,\n\tAUDIT_XT_OP_UNREGISTER = 2,\n\tAUDIT_NFT_OP_TABLE_REGISTER = 3,\n\tAUDIT_NFT_OP_TABLE_UNREGISTER = 4,\n\tAUDIT_NFT_OP_CHAIN_REGISTER = 5,\n\tAUDIT_NFT_OP_CHAIN_UNREGISTER = 6,\n\tAUDIT_NFT_OP_RULE_REGISTER = 7,\n\tAUDIT_NFT_OP_RULE_UNREGISTER = 8,\n\tAUDIT_NFT_OP_SET_REGISTER = 9,\n\tAUDIT_NFT_OP_SET_UNREGISTER = 10,\n\tAUDIT_NFT_OP_SETELEM_REGISTER = 11,\n\tAUDIT_NFT_OP_SETELEM_UNREGISTER = 12,\n\tAUDIT_NFT_OP_GEN_REGISTER = 13,\n\tAUDIT_NFT_OP_OBJ_REGISTER = 14,\n\tAUDIT_NFT_OP_OBJ_UNREGISTER = 15,\n\tAUDIT_NFT_OP_OBJ_RESET = 16,\n\tAUDIT_NFT_OP_FLOWTABLE_REGISTER = 17,\n\tAUDIT_NFT_OP_FLOWTABLE_UNREGISTER = 18,\n\tAUDIT_NFT_OP_INVALID = 19,\n};\n\nenum fsnotify_obj_type {\n\tFSNOTIFY_OBJ_TYPE_INODE = 0,\n\tFSNOTIFY_OBJ_TYPE_PARENT = 1,\n\tFSNOTIFY_OBJ_TYPE_VFSMOUNT = 2,\n\tFSNOTIFY_OBJ_TYPE_SB = 3,\n\tFSNOTIFY_OBJ_TYPE_COUNT = 4,\n\tFSNOTIFY_OBJ_TYPE_DETACHED = 4,\n};\n\nstruct audit_aux_data {\n\tstruct audit_aux_data *next;\n\tint type;\n};\n\nstruct audit_chunk;\n\nstruct audit_tree_refs {\n\tstruct audit_tree_refs *next;\n\tstruct audit_chunk *c[31];\n};\n\nstruct audit_aux_data_pids {\n\tstruct audit_aux_data d;\n\tpid_t target_pid[16];\n\tkuid_t target_auid[16];\n\tkuid_t target_uid[16];\n\tunsigned int target_sessionid[16];\n\tu32 target_sid[16];\n\tchar target_comm[256];\n\tint pid_count;\n};\n\nstruct audit_aux_data_bprm_fcaps {\n\tstruct audit_aux_data d;\n\tstruct audit_cap_data fcap;\n\tunsigned int fcap_ver;\n\tstruct audit_cap_data old_pcap;\n\tstruct audit_cap_data new_pcap;\n};\n\nstruct audit_nfcfgop_tab {\n\tenum audit_nfcfgop op;\n\tconst char *s;\n};\n\nstruct audit_parent;\n\nstruct audit_watch {\n\trefcount_t count;\n\tdev_t dev;\n\tchar *path;\n\tlong unsigned int ino;\n\tstruct audit_parent *parent;\n\tstruct list_head wlist;\n\tstruct list_head rules;\n};\n\nstruct fsnotify_group;\n\nstruct fsnotify_iter_info;\n\nstruct fsnotify_mark;\n\nstruct fsnotify_event;\n\nstruct fsnotify_ops {\n\tint (*handle_event)(struct fsnotify_group *, u32, const void *, int, struct inode *, const struct qstr *, u32, struct fsnotify_iter_info *);\n\tint (*handle_inode_event)(struct fsnotify_mark *, u32, struct inode *, struct inode *, const struct qstr *, u32);\n\tvoid (*free_group_priv)(struct fsnotify_group *);\n\tvoid (*freeing_mark)(struct fsnotify_mark *, struct fsnotify_group *);\n\tvoid (*free_event)(struct fsnotify_event *);\n\tvoid (*free_mark)(struct fsnotify_mark *);\n};\n\nstruct inotify_group_private_data {\n\tspinlock_t idr_lock;\n\tstruct idr idr;\n\tstruct ucounts *ucounts;\n};\n\nstruct fanotify_group_private_data {\n\tstruct list_head access_list;\n\twait_queue_head_t access_waitq;\n\tint flags;\n\tint f_flags;\n\tunsigned int max_marks;\n\tstruct user_struct *user;\n};\n\nstruct fsnotify_group {\n\tconst struct fsnotify_ops *ops;\n\trefcount_t refcnt;\n\tspinlock_t notification_lock;\n\tstruct list_head notification_list;\n\twait_queue_head_t notification_waitq;\n\tunsigned int q_len;\n\tunsigned int max_events;\n\tunsigned int priority;\n\tbool shutdown;\n\tstruct mutex mark_mutex;\n\tatomic_t num_marks;\n\tatomic_t user_waits;\n\tstruct list_head marks_list;\n\tstruct fasync_struct *fsn_fa;\n\tstruct fsnotify_event *overflow_event;\n\tstruct mem_cgroup *memcg;\n\tunion {\n\t\tvoid *private;\n\t\tstruct inotify_group_private_data inotify_data;\n\t\tstruct fanotify_group_private_data fanotify_data;\n\t};\n};\n\nstruct fsnotify_iter_info {\n\tstruct fsnotify_mark *marks[4];\n\tunsigned int report_mask;\n\tint srcu_idx;\n};\n\nstruct fsnotify_mark {\n\t__u32 mask;\n\trefcount_t refcnt;\n\tstruct fsnotify_group *group;\n\tstruct list_head g_list;\n\tspinlock_t lock;\n\tstruct hlist_node obj_list;\n\tstruct fsnotify_mark_connector *connector;\n\t__u32 ignored_mask;\n\tunsigned int flags;\n};\n\nstruct fsnotify_event {\n\tstruct list_head list;\n\tlong unsigned int objectid;\n};\n\nstruct audit_parent {\n\tstruct list_head watches;\n\tstruct fsnotify_mark mark;\n};\n\nstruct audit_fsnotify_mark {\n\tdev_t dev;\n\tlong unsigned int ino;\n\tchar *path;\n\tstruct fsnotify_mark mark;\n\tstruct audit_krule *rule;\n};\n\nstruct audit_chunk___2;\n\nstruct audit_tree {\n\trefcount_t count;\n\tint goner;\n\tstruct audit_chunk___2 *root;\n\tstruct list_head chunks;\n\tstruct list_head rules;\n\tstruct list_head list;\n\tstruct list_head same_root;\n\tstruct callback_head head;\n\tchar pathname[0];\n};\n\nstruct node {\n\tstruct list_head list;\n\tstruct audit_tree *owner;\n\tunsigned int index;\n};\n\nstruct audit_chunk___2 {\n\tstruct list_head hash;\n\tlong unsigned int key;\n\tstruct fsnotify_mark *mark;\n\tstruct list_head trees;\n\tint count;\n\tatomic_long_t refs;\n\tstruct callback_head head;\n\tstruct node owners[0];\n};\n\nstruct audit_tree_mark {\n\tstruct fsnotify_mark mark;\n\tstruct audit_chunk___2 *chunk;\n};\n\nenum {\n\tHASH_SIZE = 128,\n};\n\nstruct kprobe_blacklist_entry {\n\tstruct list_head list;\n\tlong unsigned int start_addr;\n\tlong unsigned int end_addr;\n};\n\nenum perf_record_ksymbol_type {\n\tPERF_RECORD_KSYMBOL_TYPE_UNKNOWN = 0,\n\tPERF_RECORD_KSYMBOL_TYPE_BPF = 1,\n\tPERF_RECORD_KSYMBOL_TYPE_OOL = 2,\n\tPERF_RECORD_KSYMBOL_TYPE_MAX = 3,\n};\n\nstruct kprobe_insn_page {\n\tstruct list_head list;\n\tkprobe_opcode_t *insns;\n\tstruct kprobe_insn_cache *cache;\n\tint nused;\n\tint ngarbage;\n\tchar slot_used[0];\n};\n\nenum kprobe_slot_state {\n\tSLOT_CLEAN = 0,\n\tSLOT_DIRTY = 1,\n\tSLOT_USED = 2,\n};\n\nstruct kgdb_io {\n\tconst char *name;\n\tint (*read_char)();\n\tvoid (*write_char)(u8);\n\tvoid (*flush)();\n\tint (*init)();\n\tvoid (*deinit)();\n\tvoid (*pre_exception)();\n\tvoid (*post_exception)();\n\tstruct console *cons;\n};\n\nenum {\n\tKDB_NOT_INITIALIZED = 0,\n\tKDB_INIT_EARLY = 1,\n\tKDB_INIT_FULL = 2,\n};\n\nstruct kgdb_state {\n\tint ex_vector;\n\tint signo;\n\tint err_code;\n\tint cpu;\n\tint pass_exception;\n\tlong unsigned int thr_query;\n\tlong unsigned int threadid;\n\tlong int kgdb_usethreadid;\n\tstruct pt_regs *linux_regs;\n\tatomic_t *send_ready;\n};\n\nstruct debuggerinfo_struct {\n\tvoid *debuggerinfo;\n\tstruct task_struct *task;\n\tint exception_state;\n\tint ret_state;\n\tint irq_depth;\n\tint enter_kgdb;\n\tbool rounding_up;\n};\n\nstruct seccomp_notif_sizes {\n\t__u16 seccomp_notif;\n\t__u16 seccomp_notif_resp;\n\t__u16 seccomp_data;\n};\n\nstruct seccomp_notif {\n\t__u64 id;\n\t__u32 pid;\n\t__u32 flags;\n\tstruct seccomp_data data;\n};\n\nstruct seccomp_notif_resp {\n\t__u64 id;\n\t__s64 val;\n\t__s32 error;\n\t__u32 flags;\n};\n\nstruct seccomp_notif_addfd {\n\t__u64 id;\n\t__u32 flags;\n\t__u32 srcfd;\n\t__u32 newfd;\n\t__u32 newfd_flags;\n};\n\nstruct action_cache {\n\tlong unsigned int allow_native[7];\n\tlong unsigned int allow_compat[7];\n};\n\nstruct notification;\n\nstruct seccomp_filter {\n\trefcount_t refs;\n\trefcount_t users;\n\tbool log;\n\tstruct action_cache cache;\n\tstruct seccomp_filter *prev;\n\tstruct bpf_prog *prog;\n\tstruct notification *notif;\n\tstruct mutex notify_lock;\n\twait_queue_head_t wqh;\n};\n\nstruct seccomp_metadata {\n\t__u64 filter_off;\n\t__u64 flags;\n};\n\nstruct sock_fprog {\n\tshort unsigned int len;\n\tstruct sock_filter *filter;\n};\n\nstruct compat_sock_fprog {\n\tu16 len;\n\tcompat_uptr_t filter;\n};\n\ntypedef int (*bpf_aux_classic_check_t)(struct sock_filter *, unsigned int);\n\nenum notify_state {\n\tSECCOMP_NOTIFY_INIT = 0,\n\tSECCOMP_NOTIFY_SENT = 1,\n\tSECCOMP_NOTIFY_REPLIED = 2,\n};\n\nstruct seccomp_knotif {\n\tstruct task_struct *task;\n\tu64 id;\n\tconst struct seccomp_data *data;\n\tenum notify_state state;\n\tint error;\n\tlong int val;\n\tu32 flags;\n\tstruct completion ready;\n\tstruct list_head list;\n\tstruct list_head addfd;\n};\n\nstruct seccomp_kaddfd {\n\tstruct file *file;\n\tint fd;\n\tunsigned int flags;\n\tint ret;\n\tstruct completion completion;\n\tstruct list_head list;\n};\n\nstruct notification {\n\tstruct semaphore request;\n\tu64 next_id;\n\tstruct list_head notifications;\n};\n\nstruct seccomp_log_name {\n\tu32 log;\n\tconst char *name;\n};\n\nstruct rchan;\n\nstruct rchan_buf {\n\tvoid *start;\n\tvoid *data;\n\tsize_t offset;\n\tsize_t subbufs_produced;\n\tsize_t subbufs_consumed;\n\tstruct rchan *chan;\n\twait_queue_head_t read_wait;\n\tstruct irq_work wakeup_work;\n\tstruct dentry *dentry;\n\tstruct kref kref;\n\tstruct page **page_array;\n\tunsigned int page_count;\n\tunsigned int finalized;\n\tsize_t *padding;\n\tsize_t prev_padding;\n\tsize_t bytes_consumed;\n\tsize_t early_bytes;\n\tunsigned int cpu;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct rchan_callbacks;\n\nstruct rchan {\n\tu32 version;\n\tsize_t subbuf_size;\n\tsize_t n_subbufs;\n\tsize_t alloc_size;\n\tconst struct rchan_callbacks *cb;\n\tstruct kref kref;\n\tvoid *private_data;\n\tsize_t last_toobig;\n\tstruct rchan_buf **buf;\n\tint is_global;\n\tstruct list_head list;\n\tstruct dentry *parent;\n\tint has_base_filename;\n\tchar base_filename[255];\n};\n\nstruct rchan_callbacks {\n\tint (*subbuf_start)(struct rchan_buf *, void *, void *, size_t);\n\tstruct dentry * (*create_buf_file)(const char *, struct dentry *, umode_t, struct rchan_buf *, int *);\n\tint (*remove_buf_file)(struct dentry *);\n};\n\nstruct partial_page {\n\tunsigned int offset;\n\tunsigned int len;\n\tlong unsigned int private;\n};\n\nstruct splice_pipe_desc {\n\tstruct page **pages;\n\tstruct partial_page *partial;\n\tint nr_pages;\n\tunsigned int nr_pages_max;\n\tconst struct pipe_buf_operations *ops;\n\tvoid (*spd_release)(struct splice_pipe_desc *, unsigned int);\n};\n\nstruct rchan_percpu_buf_dispatcher {\n\tstruct rchan_buf *buf;\n\tstruct dentry *dentry;\n};\n\nenum {\n\tTASKSTATS_TYPE_UNSPEC = 0,\n\tTASKSTATS_TYPE_PID = 1,\n\tTASKSTATS_TYPE_TGID = 2,\n\tTASKSTATS_TYPE_STATS = 3,\n\tTASKSTATS_TYPE_AGGR_PID = 4,\n\tTASKSTATS_TYPE_AGGR_TGID = 5,\n\tTASKSTATS_TYPE_NULL = 6,\n\t__TASKSTATS_TYPE_MAX = 7,\n};\n\nenum {\n\tTASKSTATS_CMD_ATTR_UNSPEC = 0,\n\tTASKSTATS_CMD_ATTR_PID = 1,\n\tTASKSTATS_CMD_ATTR_TGID = 2,\n\tTASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 3,\n\tTASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 4,\n\t__TASKSTATS_CMD_ATTR_MAX = 5,\n};\n\nenum {\n\tCGROUPSTATS_CMD_UNSPEC = 3,\n\tCGROUPSTATS_CMD_GET = 4,\n\tCGROUPSTATS_CMD_NEW = 5,\n\t__CGROUPSTATS_CMD_MAX = 6,\n};\n\nenum {\n\tCGROUPSTATS_TYPE_UNSPEC = 0,\n\tCGROUPSTATS_TYPE_CGROUP_STATS = 1,\n\t__CGROUPSTATS_TYPE_MAX = 2,\n};\n\nenum {\n\tCGROUPSTATS_CMD_ATTR_UNSPEC = 0,\n\tCGROUPSTATS_CMD_ATTR_FD = 1,\n\t__CGROUPSTATS_CMD_ATTR_MAX = 2,\n};\n\nstruct genlmsghdr {\n\t__u8 cmd;\n\t__u8 version;\n\t__u16 reserved;\n};\n\nenum {\n\tNLA_UNSPEC = 0,\n\tNLA_U8 = 1,\n\tNLA_U16 = 2,\n\tNLA_U32 = 3,\n\tNLA_U64 = 4,\n\tNLA_STRING = 5,\n\tNLA_FLAG = 6,\n\tNLA_MSECS = 7,\n\tNLA_NESTED = 8,\n\tNLA_NESTED_ARRAY = 9,\n\tNLA_NUL_STRING = 10,\n\tNLA_BINARY = 11,\n\tNLA_S8 = 12,\n\tNLA_S16 = 13,\n\tNLA_S32 = 14,\n\tNLA_S64 = 15,\n\tNLA_BITFIELD32 = 16,\n\tNLA_REJECT = 17,\n\t__NLA_TYPE_MAX = 18,\n};\n\nstruct genl_multicast_group {\n\tchar name[16];\n};\n\nstruct genl_ops;\n\nstruct genl_info;\n\nstruct genl_small_ops;\n\nstruct genl_family {\n\tint id;\n\tunsigned int hdrsize;\n\tchar name[16];\n\tunsigned int version;\n\tunsigned int maxattr;\n\tunsigned int mcgrp_offset;\n\tu8 netnsok: 1;\n\tu8 parallel_ops: 1;\n\tu8 n_ops;\n\tu8 n_small_ops;\n\tu8 n_mcgrps;\n\tconst struct nla_policy *policy;\n\tint (*pre_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);\n\tvoid (*post_doit)(const struct genl_ops *, struct sk_buff *, struct genl_info *);\n\tconst struct genl_ops *ops;\n\tconst struct genl_small_ops *small_ops;\n\tconst struct genl_multicast_group *mcgrps;\n\tstruct module *module;\n};\n\nstruct genl_ops {\n\tint (*doit)(struct sk_buff *, struct genl_info *);\n\tint (*start)(struct netlink_callback *);\n\tint (*dumpit)(struct sk_buff *, struct netlink_callback *);\n\tint (*done)(struct netlink_callback *);\n\tconst struct nla_policy *policy;\n\tunsigned int maxattr;\n\tu8 cmd;\n\tu8 internal_flags;\n\tu8 flags;\n\tu8 validate;\n};\n\nstruct genl_info {\n\tu32 snd_seq;\n\tu32 snd_portid;\n\tstruct nlmsghdr *nlhdr;\n\tstruct genlmsghdr *genlhdr;\n\tvoid *userhdr;\n\tstruct nlattr **attrs;\n\tpossible_net_t _net;\n\tvoid *user_ptr[2];\n\tstruct netlink_ext_ack *extack;\n};\n\nstruct genl_small_ops {\n\tint (*doit)(struct sk_buff *, struct genl_info *);\n\tint (*dumpit)(struct sk_buff *, struct netlink_callback *);\n\tu8 cmd;\n\tu8 internal_flags;\n\tu8 flags;\n\tu8 validate;\n};\n\nenum genl_validate_flags {\n\tGENL_DONT_VALIDATE_STRICT = 1,\n\tGENL_DONT_VALIDATE_DUMP = 2,\n\tGENL_DONT_VALIDATE_DUMP_STRICT = 4,\n};\n\nstruct listener {\n\tstruct list_head list;\n\tpid_t pid;\n\tchar valid;\n};\n\nstruct listener_list {\n\tstruct rw_semaphore sem;\n\tstruct list_head list;\n};\n\nenum actions {\n\tREGISTER = 0,\n\tDEREGISTER = 1,\n\tCPU_DONT_CARE = 2,\n};\n\nstruct tp_module {\n\tstruct list_head list;\n\tstruct module *mod;\n};\n\nstruct tp_probes {\n\tstruct callback_head rcu;\n\tstruct tracepoint_func probes[0];\n};\n\nstruct ftrace_hash {\n\tlong unsigned int size_bits;\n\tstruct hlist_head *buckets;\n\tlong unsigned int count;\n\tlong unsigned int flags;\n\tstruct callback_head rcu;\n};\n\nstruct ftrace_func_entry {\n\tstruct hlist_node hlist;\n\tlong unsigned int ip;\n\tlong unsigned int direct;\n};\n\nenum ftrace_bug_type {\n\tFTRACE_BUG_UNKNOWN = 0,\n\tFTRACE_BUG_INIT = 1,\n\tFTRACE_BUG_NOP = 2,\n\tFTRACE_BUG_CALL = 3,\n\tFTRACE_BUG_UPDATE = 4,\n};\n\nenum {\n\tFTRACE_UPDATE_CALLS = 1,\n\tFTRACE_DISABLE_CALLS = 2,\n\tFTRACE_UPDATE_TRACE_FUNC = 4,\n\tFTRACE_START_FUNC_RET = 8,\n\tFTRACE_STOP_FUNC_RET = 16,\n\tFTRACE_MAY_SLEEP = 32,\n};\n\nenum {\n\tFTRACE_ITER_FILTER = 1,\n\tFTRACE_ITER_NOTRACE = 2,\n\tFTRACE_ITER_PRINTALL = 4,\n\tFTRACE_ITER_DO_PROBES = 8,\n\tFTRACE_ITER_PROBE = 16,\n\tFTRACE_ITER_MOD = 32,\n\tFTRACE_ITER_ENABLED = 64,\n};\n\nstruct ftrace_graph_ent {\n\tlong unsigned int func;\n\tint depth;\n} __attribute__((packed));\n\nstruct ftrace_graph_ret {\n\tlong unsigned int func;\n\tint depth;\n\tunsigned int overrun;\n\tlong long unsigned int calltime;\n\tlong long unsigned int rettime;\n};\n\ntypedef void (*trace_func_graph_ret_t)(struct ftrace_graph_ret *);\n\ntypedef int (*trace_func_graph_ent_t)(struct ftrace_graph_ent *);\n\nstruct fgraph_ops {\n\ttrace_func_graph_ent_t entryfunc;\n\ttrace_func_graph_ret_t retfunc;\n};\n\nstruct prog_entry;\n\nstruct event_filter {\n\tstruct prog_entry *prog;\n\tchar *filter_string;\n};\n\nstruct trace_array_cpu;\n\nstruct array_buffer {\n\tstruct trace_array *tr;\n\tstruct trace_buffer *buffer;\n\tstruct trace_array_cpu *data;\n\tu64 time_start;\n\tint cpu;\n};\n\nstruct trace_pid_list;\n\nstruct trace_options;\n\nstruct cond_snapshot;\n\nstruct trace_array {\n\tstruct list_head list;\n\tchar *name;\n\tstruct array_buffer array_buffer;\n\tstruct array_buffer max_buffer;\n\tbool allocated_snapshot;\n\tlong unsigned int max_latency;\n\tstruct dentry *d_max_latency;\n\tstruct work_struct fsnotify_work;\n\tstruct irq_work fsnotify_irqwork;\n\tstruct trace_pid_list *filtered_pids;\n\tstruct trace_pid_list *filtered_no_pids;\n\tarch_spinlock_t max_lock;\n\tint buffer_disabled;\n\tint sys_refcount_enter;\n\tint sys_refcount_exit;\n\tstruct trace_event_file *enter_syscall_files[442];\n\tstruct trace_event_file *exit_syscall_files[442];\n\tint stop_count;\n\tint clock_id;\n\tint nr_topts;\n\tbool clear_trace;\n\tint buffer_percent;\n\tunsigned int n_err_log_entries;\n\tstruct tracer *current_trace;\n\tunsigned int trace_flags;\n\tunsigned char trace_flags_index[32];\n\tunsigned int flags;\n\traw_spinlock_t start_lock;\n\tstruct list_head err_log;\n\tstruct dentry *dir;\n\tstruct dentry *options;\n\tstruct dentry *percpu_dir;\n\tstruct dentry *event_dir;\n\tstruct trace_options *topts;\n\tstruct list_head systems;\n\tstruct list_head events;\n\tstruct trace_event_file *trace_marker_file;\n\tcpumask_var_t tracing_cpumask;\n\tint ref;\n\tint trace_ref;\n\tstruct ftrace_ops *ops;\n\tstruct trace_pid_list *function_pids;\n\tstruct trace_pid_list *function_no_pids;\n\tstruct list_head func_probes;\n\tstruct list_head mod_trace;\n\tstruct list_head mod_notrace;\n\tint function_enabled;\n\tint time_stamp_abs_ref;\n\tstruct list_head hist_vars;\n\tstruct cond_snapshot *cond_snapshot;\n};\n\nstruct tracer_flags;\n\nstruct tracer {\n\tconst char *name;\n\tint (*init)(struct trace_array *);\n\tvoid (*reset)(struct trace_array *);\n\tvoid (*start)(struct trace_array *);\n\tvoid (*stop)(struct trace_array *);\n\tint (*update_thresh)(struct trace_array *);\n\tvoid (*open)(struct trace_iterator *);\n\tvoid (*pipe_open)(struct trace_iterator *);\n\tvoid (*close)(struct trace_iterator *);\n\tvoid (*pipe_close)(struct trace_iterator *);\n\tssize_t (*read)(struct trace_iterator *, struct file *, char *, size_t, loff_t *);\n\tssize_t (*splice_read)(struct trace_iterator *, struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);\n\tvoid (*print_header)(struct seq_file *);\n\tenum print_line_t (*print_line)(struct trace_iterator *);\n\tint (*set_flag)(struct trace_array *, u32, u32, int);\n\tint (*flag_changed)(struct trace_array *, u32, int);\n\tstruct tracer *next;\n\tstruct tracer_flags *flags;\n\tint enabled;\n\tbool print_max;\n\tbool allow_instances;\n\tbool use_max_tr;\n\tbool noboot;\n};\n\nstruct event_subsystem;\n\nstruct trace_subsystem_dir {\n\tstruct list_head list;\n\tstruct event_subsystem *subsystem;\n\tstruct trace_array *tr;\n\tstruct dentry *entry;\n\tint ref_count;\n\tint nr_events;\n};\n\nstruct trace_array_cpu {\n\tatomic_t disabled;\n\tvoid *buffer_page;\n\tlong unsigned int entries;\n\tlong unsigned int saved_latency;\n\tlong unsigned int critical_start;\n\tlong unsigned int critical_end;\n\tlong unsigned int critical_sequence;\n\tlong unsigned int nice;\n\tlong unsigned int policy;\n\tlong unsigned int rt_priority;\n\tlong unsigned int skipped_entries;\n\tu64 preempt_timestamp;\n\tpid_t pid;\n\tkuid_t uid;\n\tchar comm[16];\n\tint ftrace_ignore_pid;\n\tbool ignore_pid;\n};\n\nstruct trace_option_dentry;\n\nstruct trace_options {\n\tstruct tracer *tracer;\n\tstruct trace_option_dentry *topts;\n};\n\nstruct tracer_opt;\n\nstruct trace_option_dentry {\n\tstruct tracer_opt *opt;\n\tstruct tracer_flags *flags;\n\tstruct trace_array *tr;\n\tstruct dentry *entry;\n};\n\nstruct trace_pid_list {\n\tint pid_max;\n\tlong unsigned int *pids;\n};\n\nenum {\n\tTRACE_PIDS = 1,\n\tTRACE_NO_PIDS = 2,\n};\n\ntypedef bool (*cond_update_fn_t)(struct trace_array *, void *);\n\nstruct cond_snapshot {\n\tvoid *cond_data;\n\tcond_update_fn_t update;\n};\n\nenum {\n\tTRACE_ARRAY_FL_GLOBAL = 1,\n};\n\nstruct tracer_opt {\n\tconst char *name;\n\tu32 bit;\n};\n\nstruct tracer_flags {\n\tu32 val;\n\tstruct tracer_opt *opts;\n\tstruct tracer *trace;\n};\n\nstruct ftrace_mod_load {\n\tstruct list_head list;\n\tchar *func;\n\tchar *module;\n\tint enable;\n};\n\nenum {\n\tFTRACE_HASH_FL_MOD = 1,\n};\n\nstruct ftrace_func_command {\n\tstruct list_head list;\n\tchar *name;\n\tint (*func)(struct trace_array *, struct ftrace_hash *, char *, char *, char *, int);\n};\n\nstruct ftrace_probe_ops {\n\tvoid (*func)(long unsigned int, long unsigned int, struct trace_array *, struct ftrace_probe_ops *, void *);\n\tint (*init)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *, void **);\n\tvoid (*free)(struct ftrace_probe_ops *, struct trace_array *, long unsigned int, void *);\n\tint (*print)(struct seq_file *, long unsigned int, struct ftrace_probe_ops *, void *);\n};\n\ntypedef int (*ftrace_mapper_func)(void *);\n\nstruct trace_parser {\n\tbool cont;\n\tchar *buffer;\n\tunsigned int idx;\n\tunsigned int size;\n};\n\nenum trace_iterator_bits {\n\tTRACE_ITER_PRINT_PARENT_BIT = 0,\n\tTRACE_ITER_SYM_OFFSET_BIT = 1,\n\tTRACE_ITER_SYM_ADDR_BIT = 2,\n\tTRACE_ITER_VERBOSE_BIT = 3,\n\tTRACE_ITER_RAW_BIT = 4,\n\tTRACE_ITER_HEX_BIT = 5,\n\tTRACE_ITER_BIN_BIT = 6,\n\tTRACE_ITER_BLOCK_BIT = 7,\n\tTRACE_ITER_PRINTK_BIT = 8,\n\tTRACE_ITER_ANNOTATE_BIT = 9,\n\tTRACE_ITER_USERSTACKTRACE_BIT = 10,\n\tTRACE_ITER_SYM_USEROBJ_BIT = 11,\n\tTRACE_ITER_PRINTK_MSGONLY_BIT = 12,\n\tTRACE_ITER_CONTEXT_INFO_BIT = 13,\n\tTRACE_ITER_LATENCY_FMT_BIT = 14,\n\tTRACE_ITER_RECORD_CMD_BIT = 15,\n\tTRACE_ITER_RECORD_TGID_BIT = 16,\n\tTRACE_ITER_OVERWRITE_BIT = 17,\n\tTRACE_ITER_STOP_ON_FREE_BIT = 18,\n\tTRACE_ITER_IRQ_INFO_BIT = 19,\n\tTRACE_ITER_MARKERS_BIT = 20,\n\tTRACE_ITER_EVENT_FORK_BIT = 21,\n\tTRACE_ITER_PAUSE_ON_TRACE_BIT = 22,\n\tTRACE_ITER_FUNCTION_BIT = 23,\n\tTRACE_ITER_FUNC_FORK_BIT = 24,\n\tTRACE_ITER_DISPLAY_GRAPH_BIT = 25,\n\tTRACE_ITER_STACKTRACE_BIT = 26,\n\tTRACE_ITER_LAST_BIT = 27,\n};\n\nstruct event_subsystem {\n\tstruct list_head list;\n\tconst char *name;\n\tstruct event_filter *filter;\n\tint ref_count;\n};\n\nenum regex_type {\n\tMATCH_FULL = 0,\n\tMATCH_FRONT_ONLY = 1,\n\tMATCH_MIDDLE_ONLY = 2,\n\tMATCH_END_ONLY = 3,\n\tMATCH_GLOB = 4,\n\tMATCH_INDEX = 5,\n};\n\nstruct tracer_stat {\n\tconst char *name;\n\tvoid * (*stat_start)(struct tracer_stat *);\n\tvoid * (*stat_next)(void *, int);\n\tcmp_func_t stat_cmp;\n\tint (*stat_show)(struct seq_file *, void *);\n\tvoid (*stat_release)(void *);\n\tint (*stat_headers)(struct seq_file *);\n};\n\nenum {\n\tFTRACE_MODIFY_ENABLE_FL = 1,\n\tFTRACE_MODIFY_MAY_SLEEP_FL = 2,\n};\n\nstruct ftrace_profile {\n\tstruct hlist_node node;\n\tlong unsigned int ip;\n\tlong unsigned int counter;\n\tlong long unsigned int time;\n\tlong long unsigned int time_squared;\n};\n\nstruct ftrace_profile_page {\n\tstruct ftrace_profile_page *next;\n\tlong unsigned int index;\n\tstruct ftrace_profile records[0];\n};\n\nstruct ftrace_profile_stat {\n\tatomic_t disabled;\n\tstruct hlist_head *hash;\n\tstruct ftrace_profile_page *pages;\n\tstruct ftrace_profile_page *start;\n\tstruct tracer_stat stat;\n};\n\nstruct ftrace_func_probe {\n\tstruct ftrace_probe_ops *probe_ops;\n\tstruct ftrace_ops ops;\n\tstruct trace_array *tr;\n\tstruct list_head list;\n\tvoid *data;\n\tint ref;\n};\n\nstruct ftrace_page {\n\tstruct ftrace_page *next;\n\tstruct dyn_ftrace *records;\n\tint index;\n\tint size;\n};\n\nstruct ftrace_rec_iter___2 {\n\tstruct ftrace_page *pg;\n\tint index;\n};\n\nstruct ftrace_iterator {\n\tloff_t pos;\n\tloff_t func_pos;\n\tloff_t mod_pos;\n\tstruct ftrace_page *pg;\n\tstruct dyn_ftrace *func;\n\tstruct ftrace_func_probe *probe;\n\tstruct ftrace_func_entry *probe_entry;\n\tstruct trace_parser parser;\n\tstruct ftrace_hash *hash;\n\tstruct ftrace_ops *ops;\n\tstruct trace_array *tr;\n\tstruct list_head *mod_list;\n\tint pidx;\n\tint idx;\n\tunsigned int flags;\n};\n\nstruct ftrace_glob {\n\tchar *search;\n\tunsigned int len;\n\tint type;\n};\n\nstruct ftrace_func_map {\n\tstruct ftrace_func_entry entry;\n\tvoid *data;\n};\n\nstruct ftrace_func_mapper {\n\tstruct ftrace_hash hash;\n};\n\nstruct ftrace_direct_func {\n\tstruct list_head next;\n\tlong unsigned int addr;\n\tint count;\n};\n\nenum graph_filter_type {\n\tGRAPH_FILTER_NOTRACE = 0,\n\tGRAPH_FILTER_FUNCTION = 1,\n};\n\nstruct ftrace_graph_data {\n\tstruct ftrace_hash *hash;\n\tstruct ftrace_func_entry *entry;\n\tint idx;\n\tenum graph_filter_type type;\n\tstruct ftrace_hash *new_hash;\n\tconst struct seq_operations *seq_ops;\n\tstruct trace_parser parser;\n};\n\nstruct ftrace_mod_func {\n\tstruct list_head list;\n\tchar *name;\n\tlong unsigned int ip;\n\tunsigned int size;\n};\n\nstruct ftrace_mod_map {\n\tstruct callback_head rcu;\n\tstruct list_head list;\n\tstruct module *mod;\n\tlong unsigned int start_addr;\n\tlong unsigned int end_addr;\n\tstruct list_head funcs;\n\tunsigned int num_funcs;\n};\n\nstruct ftrace_init_func {\n\tstruct list_head list;\n\tlong unsigned int ip;\n};\n\nenum ring_buffer_type {\n\tRINGBUF_TYPE_DATA_TYPE_LEN_MAX = 28,\n\tRINGBUF_TYPE_PADDING = 29,\n\tRINGBUF_TYPE_TIME_EXTEND = 30,\n\tRINGBUF_TYPE_TIME_STAMP = 31,\n};\n\nenum ring_buffer_flags {\n\tRB_FL_OVERWRITE = 1,\n};\n\nstruct ring_buffer_per_cpu;\n\nstruct buffer_page;\n\nstruct ring_buffer_iter {\n\tstruct ring_buffer_per_cpu *cpu_buffer;\n\tlong unsigned int head;\n\tlong unsigned int next_event;\n\tstruct buffer_page *head_page;\n\tstruct buffer_page *cache_reader_page;\n\tlong unsigned int cache_read;\n\tu64 read_stamp;\n\tu64 page_stamp;\n\tstruct ring_buffer_event *event;\n\tint missed_events;\n};\n\nstruct rb_irq_work {\n\tstruct irq_work work;\n\twait_queue_head_t waiters;\n\twait_queue_head_t full_waiters;\n\tbool waiters_pending;\n\tbool full_waiters_pending;\n\tbool wakeup_full;\n};\n\nstruct trace_buffer___2 {\n\tunsigned int flags;\n\tint cpus;\n\tatomic_t record_disabled;\n\tcpumask_var_t cpumask;\n\tstruct lock_class_key *reader_lock_key;\n\tstruct mutex mutex;\n\tstruct ring_buffer_per_cpu **buffers;\n\tstruct hlist_node node;\n\tu64 (*clock)();\n\tstruct rb_irq_work irq_work;\n\tbool time_stamp_abs;\n};\n\nenum {\n\tRB_LEN_TIME_EXTEND = 8,\n\tRB_LEN_TIME_STAMP = 8,\n};\n\nstruct buffer_data_page {\n\tu64 time_stamp;\n\tlocal_t commit;\n\tunsigned char data[0];\n};\n\nstruct buffer_page {\n\tstruct list_head list;\n\tlocal_t write;\n\tunsigned int read;\n\tlocal_t entries;\n\tlong unsigned int real_end;\n\tstruct buffer_data_page *page;\n};\n\nstruct rb_event_info {\n\tu64 ts;\n\tu64 delta;\n\tu64 before;\n\tu64 after;\n\tlong unsigned int length;\n\tstruct buffer_page *tail_page;\n\tint add_timestamp;\n};\n\nenum {\n\tRB_ADD_STAMP_NONE = 0,\n\tRB_ADD_STAMP_EXTEND = 2,\n\tRB_ADD_STAMP_ABSOLUTE = 4,\n\tRB_ADD_STAMP_FORCE = 8,\n};\n\nenum {\n\tRB_CTX_TRANSITION = 0,\n\tRB_CTX_NMI = 1,\n\tRB_CTX_IRQ = 2,\n\tRB_CTX_SOFTIRQ = 3,\n\tRB_CTX_NORMAL = 4,\n\tRB_CTX_MAX = 5,\n};\n\nstruct rb_time_struct {\n\tlocal64_t time;\n};\n\ntypedef struct rb_time_struct rb_time_t;\n\nstruct ring_buffer_per_cpu {\n\tint cpu;\n\tatomic_t record_disabled;\n\tatomic_t resize_disabled;\n\tstruct trace_buffer___2 *buffer;\n\traw_spinlock_t reader_lock;\n\tarch_spinlock_t lock;\n\tstruct lock_class_key lock_key;\n\tstruct buffer_data_page *free_page;\n\tlong unsigned int nr_pages;\n\tunsigned int current_context;\n\tstruct list_head *pages;\n\tstruct buffer_page *head_page;\n\tstruct buffer_page *tail_page;\n\tstruct buffer_page *commit_page;\n\tstruct buffer_page *reader_page;\n\tlong unsigned int lost_events;\n\tlong unsigned int last_overrun;\n\tlong unsigned int nest;\n\tlocal_t entries_bytes;\n\tlocal_t entries;\n\tlocal_t overrun;\n\tlocal_t commit_overrun;\n\tlocal_t dropped_events;\n\tlocal_t committing;\n\tlocal_t commits;\n\tlocal_t pages_touched;\n\tlocal_t pages_read;\n\tlong int last_pages_touch;\n\tsize_t shortest_full;\n\tlong unsigned int read;\n\tlong unsigned int read_bytes;\n\trb_time_t write_stamp;\n\trb_time_t before_stamp;\n\tu64 read_stamp;\n\tlong int nr_pages_to_update;\n\tstruct list_head new_pages;\n\tstruct work_struct update_pages_work;\n\tstruct completion update_done;\n\tstruct rb_irq_work irq_work;\n};\n\ntypedef struct vfsmount * (*debugfs_automount_t)(struct dentry *, void *);\n\nstruct trace_export {\n\tstruct trace_export *next;\n\tvoid (*write)(struct trace_export *, const void *, unsigned int);\n\tint flags;\n};\n\nenum fsnotify_data_type {\n\tFSNOTIFY_EVENT_NONE = 0,\n\tFSNOTIFY_EVENT_PATH = 1,\n\tFSNOTIFY_EVENT_INODE = 2,\n};\n\nenum trace_iter_flags {\n\tTRACE_FILE_LAT_FMT = 1,\n\tTRACE_FILE_ANNOTATE = 2,\n\tTRACE_FILE_TIME_IN_NS = 4,\n};\n\nenum trace_type {\n\t__TRACE_FIRST_TYPE = 0,\n\tTRACE_FN = 1,\n\tTRACE_CTX = 2,\n\tTRACE_WAKE = 3,\n\tTRACE_STACK = 4,\n\tTRACE_PRINT = 5,\n\tTRACE_BPRINT = 6,\n\tTRACE_MMIO_RW = 7,\n\tTRACE_MMIO_MAP = 8,\n\tTRACE_BRANCH = 9,\n\tTRACE_GRAPH_RET = 10,\n\tTRACE_GRAPH_ENT = 11,\n\tTRACE_USER_STACK = 12,\n\tTRACE_BLK = 13,\n\tTRACE_BPUTS = 14,\n\tTRACE_HWLAT = 15,\n\tTRACE_RAW_DATA = 16,\n\t__TRACE_LAST_TYPE = 17,\n};\n\nstruct ftrace_entry {\n\tstruct trace_entry ent;\n\tlong unsigned int ip;\n\tlong unsigned int parent_ip;\n};\n\nstruct stack_entry {\n\tstruct trace_entry ent;\n\tint size;\n\tlong unsigned int caller[8];\n};\n\nstruct userstack_entry {\n\tstruct trace_entry ent;\n\tunsigned int tgid;\n\tlong unsigned int caller[8];\n};\n\nstruct bprint_entry {\n\tstruct trace_entry ent;\n\tlong unsigned int ip;\n\tconst char *fmt;\n\tu32 buf[0];\n};\n\nstruct print_entry {\n\tstruct trace_entry ent;\n\tlong unsigned int ip;\n\tchar buf[0];\n};\n\nstruct raw_data_entry {\n\tstruct trace_entry ent;\n\tunsigned int id;\n\tchar buf[0];\n};\n\nstruct bputs_entry {\n\tstruct trace_entry ent;\n\tlong unsigned int ip;\n\tconst char *str;\n};\n\nenum trace_flag_type {\n\tTRACE_FLAG_IRQS_OFF = 1,\n\tTRACE_FLAG_IRQS_NOSUPPORT = 2,\n\tTRACE_FLAG_NEED_RESCHED = 4,\n\tTRACE_FLAG_HARDIRQ = 8,\n\tTRACE_FLAG_SOFTIRQ = 16,\n\tTRACE_FLAG_PREEMPT_RESCHED = 32,\n\tTRACE_FLAG_NMI = 64,\n};\n\nenum trace_iterator_flags {\n\tTRACE_ITER_PRINT_PARENT = 1,\n\tTRACE_ITER_SYM_OFFSET = 2,\n\tTRACE_ITER_SYM_ADDR = 4,\n\tTRACE_ITER_VERBOSE = 8,\n\tTRACE_ITER_RAW = 16,\n\tTRACE_ITER_HEX = 32,\n\tTRACE_ITER_BIN = 64,\n\tTRACE_ITER_BLOCK = 128,\n\tTRACE_ITER_PRINTK = 256,\n\tTRACE_ITER_ANNOTATE = 512,\n\tTRACE_ITER_USERSTACKTRACE = 1024,\n\tTRACE_ITER_SYM_USEROBJ = 2048,\n\tTRACE_ITER_PRINTK_MSGONLY = 4096,\n\tTRACE_ITER_CONTEXT_INFO = 8192,\n\tTRACE_ITER_LATENCY_FMT = 16384,\n\tTRACE_ITER_RECORD_CMD = 32768,\n\tTRACE_ITER_RECORD_TGID = 65536,\n\tTRACE_ITER_OVERWRITE = 131072,\n\tTRACE_ITER_STOP_ON_FREE = 262144,\n\tTRACE_ITER_IRQ_INFO = 524288,\n\tTRACE_ITER_MARKERS = 1048576,\n\tTRACE_ITER_EVENT_FORK = 2097152,\n\tTRACE_ITER_PAUSE_ON_TRACE = 4194304,\n\tTRACE_ITER_FUNCTION = 8388608,\n\tTRACE_ITER_FUNC_FORK = 16777216,\n\tTRACE_ITER_DISPLAY_GRAPH = 33554432,\n\tTRACE_ITER_STACKTRACE = 67108864,\n};\n\nstruct trace_eval_map_head {\n\tstruct module *mod;\n\tlong unsigned int length;\n};\n\nunion trace_eval_map_item;\n\nstruct trace_eval_map_tail {\n\tunion trace_eval_map_item *next;\n\tconst char *end;\n};\n\nunion trace_eval_map_item {\n\tstruct trace_eval_map map;\n\tstruct trace_eval_map_head head;\n\tstruct trace_eval_map_tail tail;\n};\n\nstruct saved_cmdlines_buffer {\n\tunsigned int map_pid_to_cmdline[32769];\n\tunsigned int *map_cmdline_to_pid;\n\tunsigned int cmdline_num;\n\tint cmdline_idx;\n\tchar *saved_cmdlines;\n};\n\nstruct ftrace_stack {\n\tlong unsigned int calls[1024];\n};\n\nstruct ftrace_stacks {\n\tstruct ftrace_stack stacks[4];\n};\n\nstruct trace_buffer_struct {\n\tint nesting;\n\tchar buffer[4096];\n};\n\nstruct ftrace_buffer_info {\n\tstruct trace_iterator iter;\n\tvoid *spare;\n\tunsigned int spare_cpu;\n\tunsigned int read;\n};\n\nstruct err_info {\n\tconst char **errs;\n\tu8 type;\n\tu8 pos;\n\tu64 ts;\n};\n\nstruct tracing_log_err {\n\tstruct list_head list;\n\tstruct err_info info;\n\tchar loc[128];\n\tchar cmd[256];\n};\n\nstruct buffer_ref {\n\tstruct trace_buffer *buffer;\n\tvoid *page;\n\tint cpu;\n\trefcount_t refcount;\n};\n\nstruct ftrace_func_mapper___2;\n\nstruct ctx_switch_entry {\n\tstruct trace_entry ent;\n\tunsigned int prev_pid;\n\tunsigned int next_pid;\n\tunsigned int next_cpu;\n\tunsigned char prev_prio;\n\tunsigned char prev_state;\n\tunsigned char next_prio;\n\tunsigned char next_state;\n};\n\nstruct hwlat_entry {\n\tstruct trace_entry ent;\n\tu64 duration;\n\tu64 outer_duration;\n\tu64 nmi_total_ts;\n\tstruct timespec64 timestamp;\n\tunsigned int nmi_count;\n\tunsigned int seqnum;\n\tunsigned int count;\n};\n\nstruct trace_mark {\n\tlong long unsigned int val;\n\tchar sym;\n};\n\nstruct stat_node {\n\tstruct rb_node node;\n\tvoid *stat;\n};\n\nstruct stat_session {\n\tstruct list_head session_list;\n\tstruct tracer_stat *ts;\n\tstruct rb_root stat_root;\n\tstruct mutex stat_mutex;\n\tstruct dentry *file;\n};\n\nstruct trace_bprintk_fmt {\n\tstruct list_head list;\n\tconst char *fmt;\n};\n\ntypedef int (*tracing_map_cmp_fn_t)(void *, void *);\n\nstruct tracing_map_field {\n\ttracing_map_cmp_fn_t cmp_fn;\n\tunion {\n\t\tatomic64_t sum;\n\t\tunsigned int offset;\n\t};\n};\n\nstruct tracing_map;\n\nstruct tracing_map_elt {\n\tstruct tracing_map *map;\n\tstruct tracing_map_field *fields;\n\tatomic64_t *vars;\n\tbool *var_set;\n\tvoid *key;\n\tvoid *private_data;\n};\n\nstruct tracing_map_sort_key {\n\tunsigned int field_idx;\n\tbool descending;\n};\n\nstruct tracing_map_array;\n\nstruct tracing_map_ops;\n\nstruct tracing_map {\n\tunsigned int key_size;\n\tunsigned int map_bits;\n\tunsigned int map_size;\n\tunsigned int max_elts;\n\tatomic_t next_elt;\n\tstruct tracing_map_array *elts;\n\tstruct tracing_map_array *map;\n\tconst struct tracing_map_ops *ops;\n\tvoid *private_data;\n\tstruct tracing_map_field fields[6];\n\tunsigned int n_fields;\n\tint key_idx[3];\n\tunsigned int n_keys;\n\tstruct tracing_map_sort_key sort_key;\n\tunsigned int n_vars;\n\tatomic64_t hits;\n\tatomic64_t drops;\n};\n\nstruct tracing_map_entry {\n\tu32 key;\n\tstruct tracing_map_elt *val;\n};\n\nstruct tracing_map_sort_entry {\n\tvoid *key;\n\tstruct tracing_map_elt *elt;\n\tbool elt_copied;\n\tbool dup;\n};\n\nstruct tracing_map_array {\n\tunsigned int entries_per_page;\n\tunsigned int entry_size_shift;\n\tunsigned int entry_shift;\n\tunsigned int entry_mask;\n\tunsigned int n_pages;\n\tvoid **pages;\n};\n\nstruct tracing_map_ops {\n\tint (*elt_alloc)(struct tracing_map_elt *);\n\tvoid (*elt_free)(struct tracing_map_elt *);\n\tvoid (*elt_clear)(struct tracing_map_elt *);\n\tvoid (*elt_init)(struct tracing_map_elt *);\n};\n\nenum {\n\tTRACE_FUNC_OPT_STACK = 1,\n};\n\nstruct hwlat_sample {\n\tu64 seqnum;\n\tu64 duration;\n\tu64 outer_duration;\n\tu64 nmi_total_ts;\n\tstruct timespec64 timestamp;\n\tint nmi_count;\n\tint count;\n};\n\nstruct hwlat_data {\n\tstruct mutex lock;\n\tu64 count;\n\tu64 sample_window;\n\tu64 sample_width;\n};\n\nenum {\n\tTRACE_NOP_OPT_ACCEPT = 1,\n\tTRACE_NOP_OPT_REFUSE = 2,\n};\n\nstruct trace_mmiotrace_rw {\n\tstruct trace_entry ent;\n\tstruct mmiotrace_rw rw;\n};\n\nstruct trace_mmiotrace_map {\n\tstruct trace_entry ent;\n\tstruct mmiotrace_map map;\n};\n\nstruct header_iter {\n\tstruct pci_dev *dev;\n};\n\nstruct ftrace_graph_ent_entry {\n\tstruct trace_entry ent;\n\tstruct ftrace_graph_ent graph_ent;\n} __attribute__((packed));\n\nstruct ftrace_graph_ret_entry {\n\tstruct trace_entry ent;\n\tstruct ftrace_graph_ret ret;\n};\n\nstruct fgraph_cpu_data {\n\tpid_t last_pid;\n\tint depth;\n\tint depth_irq;\n\tint ignore;\n\tlong unsigned int enter_funcs[50];\n};\n\nstruct fgraph_data {\n\tstruct fgraph_cpu_data *cpu_data;\n\tstruct ftrace_graph_ent_entry ent;\n\tstruct ftrace_graph_ret_entry ret;\n\tint failed;\n\tint cpu;\n\tint: 32;\n} __attribute__((packed));\n\nenum {\n\tFLAGS_FILL_FULL = 268435456,\n\tFLAGS_FILL_START = 536870912,\n\tFLAGS_FILL_END = 805306368,\n};\n\nstruct disk_stats {\n\tu64 nsecs[4];\n\tlong unsigned int sectors[4];\n\tlong unsigned int ios[4];\n\tlong unsigned int merges[4];\n\tlong unsigned int io_ticks;\n\tlocal_t in_flight[2];\n};\n\nstruct blk_crypto_key;\n\nstruct bio_crypt_ctx {\n\tconst struct blk_crypto_key *bc_key;\n\tu64 bc_dun[4];\n};\n\ntypedef __u32 blk_mq_req_flags_t;\n\nstruct blk_mq_ctxs;\n\nstruct blk_mq_ctx {\n\tstruct {\n\t\tspinlock_t lock;\n\t\tstruct list_head rq_lists[3];\n\t\tlong: 64;\n\t};\n\tunsigned int cpu;\n\tshort unsigned int index_hw[3];\n\tstruct blk_mq_hw_ctx *hctxs[3];\n\tlong unsigned int rq_dispatched[2];\n\tlong unsigned int rq_merged;\n\tlong unsigned int rq_completed[2];\n\tstruct request_queue *queue;\n\tstruct blk_mq_ctxs *ctxs;\n\tstruct kobject kobj;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct sbitmap_word;\n\nstruct sbitmap {\n\tunsigned int depth;\n\tunsigned int shift;\n\tunsigned int map_nr;\n\tstruct sbitmap_word *map;\n};\n\nstruct blk_mq_tags;\n\nstruct blk_mq_hw_ctx {\n\tstruct {\n\t\tspinlock_t lock;\n\t\tstruct list_head dispatch;\n\t\tlong unsigned int state;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t};\n\tstruct delayed_work run_work;\n\tcpumask_var_t cpumask;\n\tint next_cpu;\n\tint next_cpu_batch;\n\tlong unsigned int flags;\n\tvoid *sched_data;\n\tstruct request_queue *queue;\n\tstruct blk_flush_queue *fq;\n\tvoid *driver_data;\n\tstruct sbitmap ctx_map;\n\tstruct blk_mq_ctx *dispatch_from;\n\tunsigned int dispatch_busy;\n\tshort unsigned int type;\n\tshort unsigned int nr_ctx;\n\tstruct blk_mq_ctx **ctxs;\n\tspinlock_t dispatch_wait_lock;\n\twait_queue_entry_t dispatch_wait;\n\tatomic_t wait_index;\n\tstruct blk_mq_tags *tags;\n\tstruct blk_mq_tags *sched_tags;\n\tlong unsigned int queued;\n\tlong unsigned int run;\n\tlong unsigned int dispatched[7];\n\tunsigned int numa_node;\n\tunsigned int queue_num;\n\tatomic_t nr_active;\n\tatomic_t elevator_queued;\n\tstruct hlist_node cpuhp_online;\n\tstruct hlist_node cpuhp_dead;\n\tstruct kobject kobj;\n\tlong unsigned int poll_considered;\n\tlong unsigned int poll_invoked;\n\tlong unsigned int poll_success;\n\tstruct dentry *debugfs_dir;\n\tstruct dentry *sched_debugfs_dir;\n\tstruct list_head hctx_list;\n\tstruct srcu_struct srcu[0];\n\tlong: 64;\n};\n\nstruct blk_mq_alloc_data {\n\tstruct request_queue *q;\n\tblk_mq_req_flags_t flags;\n\tunsigned int shallow_depth;\n\tunsigned int cmd_flags;\n\tstruct blk_mq_ctx *ctx;\n\tstruct blk_mq_hw_ctx *hctx;\n};\n\nstruct blk_stat_callback {\n\tstruct list_head list;\n\tstruct timer_list timer;\n\tstruct blk_rq_stat *cpu_stat;\n\tint (*bucket_fn)(const struct request *);\n\tunsigned int buckets;\n\tstruct blk_rq_stat *stat;\n\tvoid (*timer_fn)(struct blk_stat_callback *);\n\tvoid *data;\n\tstruct callback_head rcu;\n};\n\nstruct blk_trace {\n\tint trace_state;\n\tstruct rchan *rchan;\n\tlong unsigned int *sequence;\n\tunsigned char *msg_data;\n\tu16 act_mask;\n\tu64 start_lba;\n\tu64 end_lba;\n\tu32 pid;\n\tu32 dev;\n\tstruct dentry *dir;\n\tstruct dentry *dropped_file;\n\tstruct dentry *msg_file;\n\tstruct list_head running_list;\n\tatomic_t dropped;\n};\n\nstruct blk_flush_queue {\n\tunsigned int flush_pending_idx: 1;\n\tunsigned int flush_running_idx: 1;\n\tblk_status_t rq_status;\n\tlong unsigned int flush_pending_since;\n\tstruct list_head flush_queue[2];\n\tstruct list_head flush_data_in_flight;\n\tstruct request *flush_rq;\n\tspinlock_t mq_flush_lock;\n};\n\nstruct blk_mq_queue_map {\n\tunsigned int *mq_map;\n\tunsigned int nr_queues;\n\tunsigned int queue_offset;\n};\n\nstruct sbq_wait_state;\n\nstruct sbitmap_queue {\n\tstruct sbitmap sb;\n\tunsigned int *alloc_hint;\n\tunsigned int wake_batch;\n\tatomic_t wake_index;\n\tstruct sbq_wait_state *ws;\n\tatomic_t ws_active;\n\tbool round_robin;\n\tunsigned int min_shallow_depth;\n};\n\nstruct blk_mq_tag_set {\n\tstruct blk_mq_queue_map map[3];\n\tunsigned int nr_maps;\n\tconst struct blk_mq_ops *ops;\n\tunsigned int nr_hw_queues;\n\tunsigned int queue_depth;\n\tunsigned int reserved_tags;\n\tunsigned int cmd_size;\n\tint numa_node;\n\tunsigned int timeout;\n\tunsigned int flags;\n\tvoid *driver_data;\n\tatomic_t active_queues_shared_sbitmap;\n\tstruct sbitmap_queue __bitmap_tags;\n\tstruct sbitmap_queue __breserved_tags;\n\tstruct blk_mq_tags **tags;\n\tstruct mutex tag_list_lock;\n\tstruct list_head tag_list;\n};\n\ntypedef u64 compat_u64;\n\nenum blktrace_cat {\n\tBLK_TC_READ = 1,\n\tBLK_TC_WRITE = 2,\n\tBLK_TC_FLUSH = 4,\n\tBLK_TC_SYNC = 8,\n\tBLK_TC_SYNCIO = 8,\n\tBLK_TC_QUEUE = 16,\n\tBLK_TC_REQUEUE = 32,\n\tBLK_TC_ISSUE = 64,\n\tBLK_TC_COMPLETE = 128,\n\tBLK_TC_FS = 256,\n\tBLK_TC_PC = 512,\n\tBLK_TC_NOTIFY = 1024,\n\tBLK_TC_AHEAD = 2048,\n\tBLK_TC_META = 4096,\n\tBLK_TC_DISCARD = 8192,\n\tBLK_TC_DRV_DATA = 16384,\n\tBLK_TC_FUA = 32768,\n\tBLK_TC_END = 32768,\n};\n\nenum blktrace_act {\n\t__BLK_TA_QUEUE = 1,\n\t__BLK_TA_BACKMERGE = 2,\n\t__BLK_TA_FRONTMERGE = 3,\n\t__BLK_TA_GETRQ = 4,\n\t__BLK_TA_SLEEPRQ = 5,\n\t__BLK_TA_REQUEUE = 6,\n\t__BLK_TA_ISSUE = 7,\n\t__BLK_TA_COMPLETE = 8,\n\t__BLK_TA_PLUG = 9,\n\t__BLK_TA_UNPLUG_IO = 10,\n\t__BLK_TA_UNPLUG_TIMER = 11,\n\t__BLK_TA_INSERT = 12,\n\t__BLK_TA_SPLIT = 13,\n\t__BLK_TA_BOUNCE = 14,\n\t__BLK_TA_REMAP = 15,\n\t__BLK_TA_ABORT = 16,\n\t__BLK_TA_DRV_DATA = 17,\n\t__BLK_TA_CGROUP = 256,\n};\n\nenum blktrace_notify {\n\t__BLK_TN_PROCESS = 0,\n\t__BLK_TN_TIMESTAMP = 1,\n\t__BLK_TN_MESSAGE = 2,\n\t__BLK_TN_CGROUP = 256,\n};\n\nstruct blk_io_trace {\n\t__u32 magic;\n\t__u32 sequence;\n\t__u64 time;\n\t__u64 sector;\n\t__u32 bytes;\n\t__u32 action;\n\t__u32 pid;\n\t__u32 device;\n\t__u32 cpu;\n\t__u16 error;\n\t__u16 pdu_len;\n};\n\nstruct blk_io_trace_remap {\n\t__be32 device_from;\n\t__be32 device_to;\n\t__be64 sector_from;\n};\n\nenum {\n\tBlktrace_setup = 1,\n\tBlktrace_running = 2,\n\tBlktrace_stopped = 3,\n};\n\nstruct blk_user_trace_setup {\n\tchar name[32];\n\t__u16 act_mask;\n\t__u32 buf_size;\n\t__u32 buf_nr;\n\t__u64 start_lba;\n\t__u64 end_lba;\n\t__u32 pid;\n};\n\nstruct compat_blk_user_trace_setup {\n\tchar name[32];\n\tu16 act_mask;\n\tshort: 16;\n\tu32 buf_size;\n\tu32 buf_nr;\n\tcompat_u64 start_lba;\n\tcompat_u64 end_lba;\n\tu32 pid;\n} __attribute__((packed));\n\nstruct sbitmap_word {\n\tlong unsigned int depth;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong unsigned int word;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong unsigned int cleared;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct sbq_wait_state {\n\tatomic_t wait_cnt;\n\twait_queue_head_t wait;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct blk_mq_tags {\n\tunsigned int nr_tags;\n\tunsigned int nr_reserved_tags;\n\tatomic_t active_queues;\n\tstruct sbitmap_queue *bitmap_tags;\n\tstruct sbitmap_queue *breserved_tags;\n\tstruct sbitmap_queue __bitmap_tags;\n\tstruct sbitmap_queue __breserved_tags;\n\tstruct request **rqs;\n\tstruct request **static_rqs;\n\tstruct list_head page_list;\n};\n\nstruct blk_mq_queue_data {\n\tstruct request *rq;\n\tbool last;\n};\n\nenum blk_crypto_mode_num {\n\tBLK_ENCRYPTION_MODE_INVALID = 0,\n\tBLK_ENCRYPTION_MODE_AES_256_XTS = 1,\n\tBLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV = 2,\n\tBLK_ENCRYPTION_MODE_ADIANTUM = 3,\n\tBLK_ENCRYPTION_MODE_MAX = 4,\n};\n\nstruct blk_crypto_config {\n\tenum blk_crypto_mode_num crypto_mode;\n\tunsigned int data_unit_size;\n\tunsigned int dun_bytes;\n};\n\nstruct blk_crypto_key {\n\tstruct blk_crypto_config crypto_cfg;\n\tunsigned int data_unit_size_bits;\n\tunsigned int size;\n\tu8 raw[64];\n};\n\nstruct blk_mq_ctxs {\n\tstruct kobject kobj;\n\tstruct blk_mq_ctx *queue_ctx;\n};\n\ntypedef void blk_log_action_t(struct trace_iterator *, const char *, bool);\n\nstruct ftrace_event_field {\n\tstruct list_head link;\n\tconst char *name;\n\tconst char *type;\n\tint filter_type;\n\tint offset;\n\tint size;\n\tint is_signed;\n};\n\nenum {\n\tFORMAT_HEADER = 1,\n\tFORMAT_FIELD_SEPERATOR = 2,\n\tFORMAT_PRINTFMT = 3,\n};\n\nstruct event_probe_data {\n\tstruct trace_event_file *file;\n\tlong unsigned int count;\n\tint ref;\n\tbool enable;\n};\n\nstruct syscall_trace_enter {\n\tstruct trace_entry ent;\n\tint nr;\n\tlong unsigned int args[0];\n};\n\nstruct syscall_trace_exit {\n\tstruct trace_entry ent;\n\tint nr;\n\tlong int ret;\n};\n\nstruct syscall_tp_t {\n\tlong long unsigned int regs;\n\tlong unsigned int syscall_nr;\n\tlong unsigned int ret;\n};\n\nstruct syscall_tp_t___2 {\n\tlong long unsigned int regs;\n\tlong unsigned int syscall_nr;\n\tlong unsigned int args[6];\n};\n\ntypedef long unsigned int perf_trace_t[256];\n\nstruct filter_pred;\n\nstruct prog_entry {\n\tint target;\n\tint when_to_branch;\n\tstruct filter_pred *pred;\n};\n\ntypedef int (*filter_pred_fn_t)(struct filter_pred *, void *);\n\nstruct regex;\n\ntypedef int (*regex_match_func)(char *, struct regex *, int);\n\nstruct regex {\n\tchar pattern[256];\n\tint len;\n\tint field_len;\n\tregex_match_func match;\n};\n\nstruct filter_pred {\n\tfilter_pred_fn_t fn;\n\tu64 val;\n\tstruct regex regex;\n\tshort unsigned int *ops;\n\tstruct ftrace_event_field *field;\n\tint offset;\n\tint not;\n\tint op;\n};\n\nenum filter_op_ids {\n\tOP_GLOB = 0,\n\tOP_NE = 1,\n\tOP_EQ = 2,\n\tOP_LE = 3,\n\tOP_LT = 4,\n\tOP_GE = 5,\n\tOP_GT = 6,\n\tOP_BAND = 7,\n\tOP_MAX = 8,\n};\n\nenum {\n\tFILT_ERR_NONE = 0,\n\tFILT_ERR_INVALID_OP = 1,\n\tFILT_ERR_TOO_MANY_OPEN = 2,\n\tFILT_ERR_TOO_MANY_CLOSE = 3,\n\tFILT_ERR_MISSING_QUOTE = 4,\n\tFILT_ERR_OPERAND_TOO_LONG = 5,\n\tFILT_ERR_EXPECT_STRING = 6,\n\tFILT_ERR_EXPECT_DIGIT = 7,\n\tFILT_ERR_ILLEGAL_FIELD_OP = 8,\n\tFILT_ERR_FIELD_NOT_FOUND = 9,\n\tFILT_ERR_ILLEGAL_INTVAL = 10,\n\tFILT_ERR_BAD_SUBSYS_FILTER = 11,\n\tFILT_ERR_TOO_MANY_PREDS = 12,\n\tFILT_ERR_INVALID_FILTER = 13,\n\tFILT_ERR_IP_FIELD_ONLY = 14,\n\tFILT_ERR_INVALID_VALUE = 15,\n\tFILT_ERR_ERRNO = 16,\n\tFILT_ERR_NO_FILTER = 17,\n};\n\nstruct filter_parse_error {\n\tint lasterr;\n\tint lasterr_pos;\n};\n\ntypedef int (*parse_pred_fn)(const char *, void *, int, struct filter_parse_error *, struct filter_pred **);\n\nenum {\n\tINVERT = 1,\n\tPROCESS_AND = 2,\n\tPROCESS_OR = 4,\n};\n\nenum {\n\tTOO_MANY_CLOSE = 4294967295,\n\tTOO_MANY_OPEN = 4294967294,\n\tMISSING_QUOTE = 4294967293,\n};\n\nstruct filter_list {\n\tstruct list_head list;\n\tstruct event_filter *filter;\n};\n\nstruct function_filter_data {\n\tstruct ftrace_ops *ops;\n\tint first_filter;\n\tint first_notrace;\n};\n\nstruct event_trigger_ops;\n\nstruct event_command;\n\nstruct event_trigger_data {\n\tlong unsigned int count;\n\tint ref;\n\tstruct event_trigger_ops *ops;\n\tstruct event_command *cmd_ops;\n\tstruct event_filter *filter;\n\tchar *filter_str;\n\tvoid *private_data;\n\tbool paused;\n\tbool paused_tmp;\n\tstruct list_head list;\n\tchar *name;\n\tstruct list_head named_list;\n\tstruct event_trigger_data *named_data;\n};\n\nstruct event_trigger_ops {\n\tvoid (*func)(struct event_trigger_data *, void *, struct ring_buffer_event *);\n\tint (*init)(struct event_trigger_ops *, struct event_trigger_data *);\n\tvoid (*free)(struct event_trigger_ops *, struct event_trigger_data *);\n\tint (*print)(struct seq_file *, struct event_trigger_ops *, struct event_trigger_data *);\n};\n\nstruct event_command {\n\tstruct list_head list;\n\tchar *name;\n\tenum event_trigger_type trigger_type;\n\tint flags;\n\tint (*func)(struct event_command *, struct trace_event_file *, char *, char *, char *);\n\tint (*reg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);\n\tvoid (*unreg)(char *, struct event_trigger_ops *, struct event_trigger_data *, struct trace_event_file *);\n\tvoid (*unreg_all)(struct trace_event_file *);\n\tint (*set_filter)(char *, struct event_trigger_data *, struct trace_event_file *);\n\tstruct event_trigger_ops * (*get_trigger_ops)(char *, char *);\n};\n\nstruct enable_trigger_data {\n\tstruct trace_event_file *file;\n\tbool enable;\n\tbool hist;\n};\n\nenum event_command_flags {\n\tEVENT_CMD_FL_POST_TRIGGER = 1,\n\tEVENT_CMD_FL_NEEDS_REC = 2,\n};\n\nenum dynevent_type {\n\tDYNEVENT_TYPE_SYNTH = 1,\n\tDYNEVENT_TYPE_KPROBE = 2,\n\tDYNEVENT_TYPE_NONE = 3,\n};\n\nstruct dynevent_cmd;\n\ntypedef int (*dynevent_create_fn_t)(struct dynevent_cmd *);\n\nstruct dynevent_cmd {\n\tstruct seq_buf seq;\n\tconst char *event_name;\n\tunsigned int n_fields;\n\tenum dynevent_type type;\n\tdynevent_create_fn_t run_command;\n\tvoid *private_data;\n};\n\nstruct synth_field_desc {\n\tconst char *type;\n\tconst char *name;\n};\n\nstruct synth_trace_event;\n\nstruct synth_event;\n\nstruct synth_event_trace_state {\n\tstruct trace_event_buffer fbuffer;\n\tstruct synth_trace_event *entry;\n\tstruct trace_buffer *buffer;\n\tstruct synth_event *event;\n\tunsigned int cur_field;\n\tunsigned int n_u64;\n\tbool disabled;\n\tbool add_next;\n\tbool add_name;\n};\n\nstruct synth_trace_event {\n\tstruct trace_entry ent;\n\tu64 fields[0];\n};\n\nstruct dyn_event_operations;\n\nstruct dyn_event {\n\tstruct list_head list;\n\tstruct dyn_event_operations *ops;\n};\n\nstruct synth_field;\n\nstruct synth_event {\n\tstruct dyn_event devent;\n\tint ref;\n\tchar *name;\n\tstruct synth_field **fields;\n\tunsigned int n_fields;\n\tstruct synth_field **dynamic_fields;\n\tunsigned int n_dynamic_fields;\n\tunsigned int n_u64;\n\tstruct trace_event_class class;\n\tstruct trace_event_call call;\n\tstruct tracepoint *tp;\n\tstruct module *mod;\n};\n\nstruct dyn_event_operations {\n\tstruct list_head list;\n\tint (*create)(int, const char **);\n\tint (*show)(struct seq_file *, struct dyn_event *);\n\tbool (*is_busy)(struct dyn_event *);\n\tint (*free)(struct dyn_event *);\n\tbool (*match)(const char *, const char *, int, const char **, struct dyn_event *);\n};\n\ntypedef int (*dynevent_check_arg_fn_t)(void *);\n\nstruct dynevent_arg {\n\tconst char *str;\n\tchar separator;\n};\n\nstruct dynevent_arg_pair {\n\tconst char *lhs;\n\tconst char *rhs;\n\tchar operator;\n\tchar separator;\n};\n\nstruct synth_field {\n\tchar *type;\n\tchar *name;\n\tsize_t size;\n\tunsigned int offset;\n\tbool is_signed;\n\tbool is_string;\n\tbool is_dynamic;\n\tbool field_pos;\n};\n\nenum {\n\tSYNTH_ERR_BAD_NAME = 0,\n\tSYNTH_ERR_CMD_INCOMPLETE = 1,\n\tSYNTH_ERR_EVENT_EXISTS = 2,\n\tSYNTH_ERR_TOO_MANY_FIELDS = 3,\n\tSYNTH_ERR_INCOMPLETE_TYPE = 4,\n\tSYNTH_ERR_INVALID_TYPE = 5,\n\tSYNTH_ERR_INVALID_FIELD = 6,\n\tSYNTH_ERR_CMD_TOO_LONG = 7,\n};\n\nenum {\n\tHIST_ERR_NONE = 0,\n\tHIST_ERR_DUPLICATE_VAR = 1,\n\tHIST_ERR_VAR_NOT_UNIQUE = 2,\n\tHIST_ERR_TOO_MANY_VARS = 3,\n\tHIST_ERR_MALFORMED_ASSIGNMENT = 4,\n\tHIST_ERR_NAMED_MISMATCH = 5,\n\tHIST_ERR_TRIGGER_EEXIST = 6,\n\tHIST_ERR_TRIGGER_ENOENT_CLEAR = 7,\n\tHIST_ERR_SET_CLOCK_FAIL = 8,\n\tHIST_ERR_BAD_FIELD_MODIFIER = 9,\n\tHIST_ERR_TOO_MANY_SUBEXPR = 10,\n\tHIST_ERR_TIMESTAMP_MISMATCH = 11,\n\tHIST_ERR_TOO_MANY_FIELD_VARS = 12,\n\tHIST_ERR_EVENT_FILE_NOT_FOUND = 13,\n\tHIST_ERR_HIST_NOT_FOUND = 14,\n\tHIST_ERR_HIST_CREATE_FAIL = 15,\n\tHIST_ERR_SYNTH_VAR_NOT_FOUND = 16,\n\tHIST_ERR_SYNTH_EVENT_NOT_FOUND = 17,\n\tHIST_ERR_SYNTH_TYPE_MISMATCH = 18,\n\tHIST_ERR_SYNTH_COUNT_MISMATCH = 19,\n\tHIST_ERR_FIELD_VAR_PARSE_FAIL = 20,\n\tHIST_ERR_VAR_CREATE_FIND_FAIL = 21,\n\tHIST_ERR_ONX_NOT_VAR = 22,\n\tHIST_ERR_ONX_VAR_NOT_FOUND = 23,\n\tHIST_ERR_ONX_VAR_CREATE_FAIL = 24,\n\tHIST_ERR_FIELD_VAR_CREATE_FAIL = 25,\n\tHIST_ERR_TOO_MANY_PARAMS = 26,\n\tHIST_ERR_PARAM_NOT_FOUND = 27,\n\tHIST_ERR_INVALID_PARAM = 28,\n\tHIST_ERR_ACTION_NOT_FOUND = 29,\n\tHIST_ERR_NO_SAVE_PARAMS = 30,\n\tHIST_ERR_TOO_MANY_SAVE_ACTIONS = 31,\n\tHIST_ERR_ACTION_MISMATCH = 32,\n\tHIST_ERR_NO_CLOSING_PAREN = 33,\n\tHIST_ERR_SUBSYS_NOT_FOUND = 34,\n\tHIST_ERR_INVALID_SUBSYS_EVENT = 35,\n\tHIST_ERR_INVALID_REF_KEY = 36,\n\tHIST_ERR_VAR_NOT_FOUND = 37,\n\tHIST_ERR_FIELD_NOT_FOUND = 38,\n\tHIST_ERR_EMPTY_ASSIGNMENT = 39,\n\tHIST_ERR_INVALID_SORT_MODIFIER = 40,\n\tHIST_ERR_EMPTY_SORT_FIELD = 41,\n\tHIST_ERR_TOO_MANY_SORT_FIELDS = 42,\n\tHIST_ERR_INVALID_SORT_FIELD = 43,\n};\n\nstruct hist_field;\n\ntypedef u64 (*hist_field_fn_t)(struct hist_field *, struct tracing_map_elt *, struct ring_buffer_event *, void *);\n\nstruct hist_trigger_data;\n\nstruct hist_var {\n\tchar *name;\n\tstruct hist_trigger_data *hist_data;\n\tunsigned int idx;\n};\n\nenum field_op_id {\n\tFIELD_OP_NONE = 0,\n\tFIELD_OP_PLUS = 1,\n\tFIELD_OP_MINUS = 2,\n\tFIELD_OP_UNARY_MINUS = 3,\n};\n\nstruct hist_field {\n\tstruct ftrace_event_field *field;\n\tlong unsigned int flags;\n\thist_field_fn_t fn;\n\tunsigned int ref;\n\tunsigned int size;\n\tunsigned int offset;\n\tunsigned int is_signed;\n\tconst char *type;\n\tstruct hist_field *operands[2];\n\tstruct hist_trigger_data *hist_data;\n\tstruct hist_var var;\n\tenum field_op_id operator;\n\tchar *system;\n\tchar *event_name;\n\tchar *name;\n\tunsigned int var_ref_idx;\n\tbool read_once;\n\tunsigned int var_str_idx;\n};\n\nstruct hist_trigger_attrs;\n\nstruct action_data;\n\nstruct field_var;\n\nstruct field_var_hist;\n\nstruct hist_trigger_data {\n\tstruct hist_field *fields[22];\n\tunsigned int n_vals;\n\tunsigned int n_keys;\n\tunsigned int n_fields;\n\tunsigned int n_vars;\n\tunsigned int n_var_str;\n\tunsigned int key_size;\n\tstruct tracing_map_sort_key sort_keys[2];\n\tunsigned int n_sort_keys;\n\tstruct trace_event_file *event_file;\n\tstruct hist_trigger_attrs *attrs;\n\tstruct tracing_map *map;\n\tbool enable_timestamps;\n\tbool remove;\n\tstruct hist_field *var_refs[16];\n\tunsigned int n_var_refs;\n\tstruct action_data *actions[8];\n\tunsigned int n_actions;\n\tstruct field_var *field_vars[32];\n\tunsigned int n_field_vars;\n\tunsigned int n_field_var_str;\n\tstruct field_var_hist *field_var_hists[32];\n\tunsigned int n_field_var_hists;\n\tstruct field_var *save_vars[32];\n\tunsigned int n_save_vars;\n\tunsigned int n_save_var_str;\n};\n\nenum hist_field_flags {\n\tHIST_FIELD_FL_HITCOUNT = 1,\n\tHIST_FIELD_FL_KEY = 2,\n\tHIST_FIELD_FL_STRING = 4,\n\tHIST_FIELD_FL_HEX = 8,\n\tHIST_FIELD_FL_SYM = 16,\n\tHIST_FIELD_FL_SYM_OFFSET = 32,\n\tHIST_FIELD_FL_EXECNAME = 64,\n\tHIST_FIELD_FL_SYSCALL = 128,\n\tHIST_FIELD_FL_STACKTRACE = 256,\n\tHIST_FIELD_FL_LOG2 = 512,\n\tHIST_FIELD_FL_TIMESTAMP = 1024,\n\tHIST_FIELD_FL_TIMESTAMP_USECS = 2048,\n\tHIST_FIELD_FL_VAR = 4096,\n\tHIST_FIELD_FL_EXPR = 8192,\n\tHIST_FIELD_FL_VAR_REF = 16384,\n\tHIST_FIELD_FL_CPU = 32768,\n\tHIST_FIELD_FL_ALIAS = 65536,\n};\n\nstruct var_defs {\n\tunsigned int n_vars;\n\tchar *name[16];\n\tchar *expr[16];\n};\n\nstruct hist_trigger_attrs {\n\tchar *keys_str;\n\tchar *vals_str;\n\tchar *sort_key_str;\n\tchar *name;\n\tchar *clock;\n\tbool pause;\n\tbool cont;\n\tbool clear;\n\tbool ts_in_usecs;\n\tunsigned int map_bits;\n\tchar *assignment_str[16];\n\tunsigned int n_assignments;\n\tchar *action_str[8];\n\tunsigned int n_actions;\n\tstruct var_defs var_defs;\n};\n\nstruct field_var {\n\tstruct hist_field *var;\n\tstruct hist_field *val;\n};\n\nstruct field_var_hist {\n\tstruct hist_trigger_data *hist_data;\n\tchar *cmd;\n};\n\nenum handler_id {\n\tHANDLER_ONMATCH = 1,\n\tHANDLER_ONMAX = 2,\n\tHANDLER_ONCHANGE = 3,\n};\n\nenum action_id {\n\tACTION_SAVE = 1,\n\tACTION_TRACE = 2,\n\tACTION_SNAPSHOT = 3,\n};\n\ntypedef void (*action_fn_t)(struct hist_trigger_data *, struct tracing_map_elt *, void *, struct ring_buffer_event *, void *, struct action_data *, u64 *);\n\ntypedef bool (*check_track_val_fn_t)(u64, u64);\n\nstruct action_data {\n\tenum handler_id handler;\n\tenum action_id action;\n\tchar *action_name;\n\taction_fn_t fn;\n\tunsigned int n_params;\n\tchar *params[32];\n\tunsigned int var_ref_idx[16];\n\tstruct synth_event *synth_event;\n\tbool use_trace_keyword;\n\tchar *synth_event_name;\n\tunion {\n\t\tstruct {\n\t\t\tchar *event;\n\t\t\tchar *event_system;\n\t\t} match_data;\n\t\tstruct {\n\t\t\tchar *var_str;\n\t\t\tstruct hist_field *var_ref;\n\t\t\tstruct hist_field *track_var;\n\t\t\tcheck_track_val_fn_t check_val;\n\t\t\taction_fn_t save_data;\n\t\t} track_data;\n\t};\n};\n\nstruct track_data {\n\tu64 track_val;\n\tbool updated;\n\tunsigned int key_len;\n\tvoid *key;\n\tstruct tracing_map_elt elt;\n\tstruct action_data *action_data;\n\tstruct hist_trigger_data *hist_data;\n};\n\nstruct hist_elt_data {\n\tchar *comm;\n\tu64 *var_ref_vals;\n\tchar *field_var_str[32];\n};\n\nstruct snapshot_context {\n\tstruct tracing_map_elt *elt;\n\tvoid *key;\n};\n\ntypedef void (*synth_probe_func_t)(void *, u64 *, unsigned int *);\n\nstruct hist_var_data {\n\tstruct list_head list;\n\tstruct hist_trigger_data *hist_data;\n};\n\nenum bpf_func_id {\n\tBPF_FUNC_unspec = 0,\n\tBPF_FUNC_map_lookup_elem = 1,\n\tBPF_FUNC_map_update_elem = 2,\n\tBPF_FUNC_map_delete_elem = 3,\n\tBPF_FUNC_probe_read = 4,\n\tBPF_FUNC_ktime_get_ns = 5,\n\tBPF_FUNC_trace_printk = 6,\n\tBPF_FUNC_get_prandom_u32 = 7,\n\tBPF_FUNC_get_smp_processor_id = 8,\n\tBPF_FUNC_skb_store_bytes = 9,\n\tBPF_FUNC_l3_csum_replace = 10,\n\tBPF_FUNC_l4_csum_replace = 11,\n\tBPF_FUNC_tail_call = 12,\n\tBPF_FUNC_clone_redirect = 13,\n\tBPF_FUNC_get_current_pid_tgid = 14,\n\tBPF_FUNC_get_current_uid_gid = 15,\n\tBPF_FUNC_get_current_comm = 16,\n\tBPF_FUNC_get_cgroup_classid = 17,\n\tBPF_FUNC_skb_vlan_push = 18,\n\tBPF_FUNC_skb_vlan_pop = 19,\n\tBPF_FUNC_skb_get_tunnel_key = 20,\n\tBPF_FUNC_skb_set_tunnel_key = 21,\n\tBPF_FUNC_perf_event_read = 22,\n\tBPF_FUNC_redirect = 23,\n\tBPF_FUNC_get_route_realm = 24,\n\tBPF_FUNC_perf_event_output = 25,\n\tBPF_FUNC_skb_load_bytes = 26,\n\tBPF_FUNC_get_stackid = 27,\n\tBPF_FUNC_csum_diff = 28,\n\tBPF_FUNC_skb_get_tunnel_opt = 29,\n\tBPF_FUNC_skb_set_tunnel_opt = 30,\n\tBPF_FUNC_skb_change_proto = 31,\n\tBPF_FUNC_skb_change_type = 32,\n\tBPF_FUNC_skb_under_cgroup = 33,\n\tBPF_FUNC_get_hash_recalc = 34,\n\tBPF_FUNC_get_current_task = 35,\n\tBPF_FUNC_probe_write_user = 36,\n\tBPF_FUNC_current_task_under_cgroup = 37,\n\tBPF_FUNC_skb_change_tail = 38,\n\tBPF_FUNC_skb_pull_data = 39,\n\tBPF_FUNC_csum_update = 40,\n\tBPF_FUNC_set_hash_invalid = 41,\n\tBPF_FUNC_get_numa_node_id = 42,\n\tBPF_FUNC_skb_change_head = 43,\n\tBPF_FUNC_xdp_adjust_head = 44,\n\tBPF_FUNC_probe_read_str = 45,\n\tBPF_FUNC_get_socket_cookie = 46,\n\tBPF_FUNC_get_socket_uid = 47,\n\tBPF_FUNC_set_hash = 48,\n\tBPF_FUNC_setsockopt = 49,\n\tBPF_FUNC_skb_adjust_room = 50,\n\tBPF_FUNC_redirect_map = 51,\n\tBPF_FUNC_sk_redirect_map = 52,\n\tBPF_FUNC_sock_map_update = 53,\n\tBPF_FUNC_xdp_adjust_meta = 54,\n\tBPF_FUNC_perf_event_read_value = 55,\n\tBPF_FUNC_perf_prog_read_value = 56,\n\tBPF_FUNC_getsockopt = 57,\n\tBPF_FUNC_override_return = 58,\n\tBPF_FUNC_sock_ops_cb_flags_set = 59,\n\tBPF_FUNC_msg_redirect_map = 60,\n\tBPF_FUNC_msg_apply_bytes = 61,\n\tBPF_FUNC_msg_cork_bytes = 62,\n\tBPF_FUNC_msg_pull_data = 63,\n\tBPF_FUNC_bind = 64,\n\tBPF_FUNC_xdp_adjust_tail = 65,\n\tBPF_FUNC_skb_get_xfrm_state = 66,\n\tBPF_FUNC_get_stack = 67,\n\tBPF_FUNC_skb_load_bytes_relative = 68,\n\tBPF_FUNC_fib_lookup = 69,\n\tBPF_FUNC_sock_hash_update = 70,\n\tBPF_FUNC_msg_redirect_hash = 71,\n\tBPF_FUNC_sk_redirect_hash = 72,\n\tBPF_FUNC_lwt_push_encap = 73,\n\tBPF_FUNC_lwt_seg6_store_bytes = 74,\n\tBPF_FUNC_lwt_seg6_adjust_srh = 75,\n\tBPF_FUNC_lwt_seg6_action = 76,\n\tBPF_FUNC_rc_repeat = 77,\n\tBPF_FUNC_rc_keydown = 78,\n\tBPF_FUNC_skb_cgroup_id = 79,\n\tBPF_FUNC_get_current_cgroup_id = 80,\n\tBPF_FUNC_get_local_storage = 81,\n\tBPF_FUNC_sk_select_reuseport = 82,\n\tBPF_FUNC_skb_ancestor_cgroup_id = 83,\n\tBPF_FUNC_sk_lookup_tcp = 84,\n\tBPF_FUNC_sk_lookup_udp = 85,\n\tBPF_FUNC_sk_release = 86,\n\tBPF_FUNC_map_push_elem = 87,\n\tBPF_FUNC_map_pop_elem = 88,\n\tBPF_FUNC_map_peek_elem = 89,\n\tBPF_FUNC_msg_push_data = 90,\n\tBPF_FUNC_msg_pop_data = 91,\n\tBPF_FUNC_rc_pointer_rel = 92,\n\tBPF_FUNC_spin_lock = 93,\n\tBPF_FUNC_spin_unlock = 94,\n\tBPF_FUNC_sk_fullsock = 95,\n\tBPF_FUNC_tcp_sock = 96,\n\tBPF_FUNC_skb_ecn_set_ce = 97,\n\tBPF_FUNC_get_listener_sock = 98,\n\tBPF_FUNC_skc_lookup_tcp = 99,\n\tBPF_FUNC_tcp_check_syncookie = 100,\n\tBPF_FUNC_sysctl_get_name = 101,\n\tBPF_FUNC_sysctl_get_current_value = 102,\n\tBPF_FUNC_sysctl_get_new_value = 103,\n\tBPF_FUNC_sysctl_set_new_value = 104,\n\tBPF_FUNC_strtol = 105,\n\tBPF_FUNC_strtoul = 106,\n\tBPF_FUNC_sk_storage_get = 107,\n\tBPF_FUNC_sk_storage_delete = 108,\n\tBPF_FUNC_send_signal = 109,\n\tBPF_FUNC_tcp_gen_syncookie = 110,\n\tBPF_FUNC_skb_output = 111,\n\tBPF_FUNC_probe_read_user = 112,\n\tBPF_FUNC_probe_read_kernel = 113,\n\tBPF_FUNC_probe_read_user_str = 114,\n\tBPF_FUNC_probe_read_kernel_str = 115,\n\tBPF_FUNC_tcp_send_ack = 116,\n\tBPF_FUNC_send_signal_thread = 117,\n\tBPF_FUNC_jiffies64 = 118,\n\tBPF_FUNC_read_branch_records = 119,\n\tBPF_FUNC_get_ns_current_pid_tgid = 120,\n\tBPF_FUNC_xdp_output = 121,\n\tBPF_FUNC_get_netns_cookie = 122,\n\tBPF_FUNC_get_current_ancestor_cgroup_id = 123,\n\tBPF_FUNC_sk_assign = 124,\n\tBPF_FUNC_ktime_get_boot_ns = 125,\n\tBPF_FUNC_seq_printf = 126,\n\tBPF_FUNC_seq_write = 127,\n\tBPF_FUNC_sk_cgroup_id = 128,\n\tBPF_FUNC_sk_ancestor_cgroup_id = 129,\n\tBPF_FUNC_ringbuf_output = 130,\n\tBPF_FUNC_ringbuf_reserve = 131,\n\tBPF_FUNC_ringbuf_submit = 132,\n\tBPF_FUNC_ringbuf_discard = 133,\n\tBPF_FUNC_ringbuf_query = 134,\n\tBPF_FUNC_csum_level = 135,\n\tBPF_FUNC_skc_to_tcp6_sock = 136,\n\tBPF_FUNC_skc_to_tcp_sock = 137,\n\tBPF_FUNC_skc_to_tcp_timewait_sock = 138,\n\tBPF_FUNC_skc_to_tcp_request_sock = 139,\n\tBPF_FUNC_skc_to_udp6_sock = 140,\n\tBPF_FUNC_get_task_stack = 141,\n\tBPF_FUNC_load_hdr_opt = 142,\n\tBPF_FUNC_store_hdr_opt = 143,\n\tBPF_FUNC_reserve_hdr_opt = 144,\n\tBPF_FUNC_inode_storage_get = 145,\n\tBPF_FUNC_inode_storage_delete = 146,\n\tBPF_FUNC_d_path = 147,\n\tBPF_FUNC_copy_from_user = 148,\n\tBPF_FUNC_snprintf_btf = 149,\n\tBPF_FUNC_seq_printf_btf = 150,\n\tBPF_FUNC_skb_cgroup_classid = 151,\n\tBPF_FUNC_redirect_neigh = 152,\n\tBPF_FUNC_per_cpu_ptr = 153,\n\tBPF_FUNC_this_cpu_ptr = 154,\n\tBPF_FUNC_redirect_peer = 155,\n\tBPF_FUNC_task_storage_get = 156,\n\tBPF_FUNC_task_storage_delete = 157,\n\tBPF_FUNC_get_current_task_btf = 158,\n\tBPF_FUNC_bprm_opts_set = 159,\n\tBPF_FUNC_ktime_get_coarse_ns = 160,\n\tBPF_FUNC_ima_inode_hash = 161,\n\tBPF_FUNC_sock_from_file = 162,\n\t__BPF_FUNC_MAX_ID = 163,\n};\n\nenum {\n\tBPF_F_INDEX_MASK = 4294967295,\n\tBPF_F_CURRENT_CPU = 4294967295,\n\tBPF_F_CTXLEN_MASK = 0,\n};\n\nenum {\n\tBPF_F_GET_BRANCH_RECORDS_SIZE = 1,\n};\n\nstruct bpf_perf_event_value {\n\t__u64 counter;\n\t__u64 enabled;\n\t__u64 running;\n};\n\nstruct bpf_raw_tracepoint_args {\n\t__u64 args[0];\n};\n\nenum bpf_task_fd_type {\n\tBPF_FD_TYPE_RAW_TRACEPOINT = 0,\n\tBPF_FD_TYPE_TRACEPOINT = 1,\n\tBPF_FD_TYPE_KPROBE = 2,\n\tBPF_FD_TYPE_KRETPROBE = 3,\n\tBPF_FD_TYPE_UPROBE = 4,\n\tBPF_FD_TYPE_URETPROBE = 5,\n};\n\nstruct btf_ptr {\n\tvoid *ptr;\n\t__u32 type_id;\n\t__u32 flags;\n};\n\nenum {\n\tBTF_F_COMPACT = 1,\n\tBTF_F_NONAME = 2,\n\tBTF_F_PTR_RAW = 4,\n\tBTF_F_ZERO = 8,\n};\n\nstruct bpf_local_storage_map_bucket;\n\nstruct bpf_local_storage_map {\n\tstruct bpf_map map;\n\tstruct bpf_local_storage_map_bucket *buckets;\n\tu32 bucket_log;\n\tu16 elem_size;\n\tu16 cache_idx;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct bpf_local_storage_data;\n\nstruct bpf_local_storage {\n\tstruct bpf_local_storage_data *cache[16];\n\tstruct hlist_head list;\n\tvoid *owner;\n\tstruct callback_head rcu;\n\traw_spinlock_t lock;\n};\n\nenum bpf_arg_type {\n\tARG_DONTCARE = 0,\n\tARG_CONST_MAP_PTR = 1,\n\tARG_PTR_TO_MAP_KEY = 2,\n\tARG_PTR_TO_MAP_VALUE = 3,\n\tARG_PTR_TO_UNINIT_MAP_VALUE = 4,\n\tARG_PTR_TO_MAP_VALUE_OR_NULL = 5,\n\tARG_PTR_TO_MEM = 6,\n\tARG_PTR_TO_MEM_OR_NULL = 7,\n\tARG_PTR_TO_UNINIT_MEM = 8,\n\tARG_CONST_SIZE = 9,\n\tARG_CONST_SIZE_OR_ZERO = 10,\n\tARG_PTR_TO_CTX = 11,\n\tARG_PTR_TO_CTX_OR_NULL = 12,\n\tARG_ANYTHING = 13,\n\tARG_PTR_TO_SPIN_LOCK = 14,\n\tARG_PTR_TO_SOCK_COMMON = 15,\n\tARG_PTR_TO_INT = 16,\n\tARG_PTR_TO_LONG = 17,\n\tARG_PTR_TO_SOCKET = 18,\n\tARG_PTR_TO_SOCKET_OR_NULL = 19,\n\tARG_PTR_TO_BTF_ID = 20,\n\tARG_PTR_TO_ALLOC_MEM = 21,\n\tARG_PTR_TO_ALLOC_MEM_OR_NULL = 22,\n\tARG_CONST_ALLOC_SIZE_OR_ZERO = 23,\n\tARG_PTR_TO_BTF_ID_SOCK_COMMON = 24,\n\tARG_PTR_TO_PERCPU_BTF_ID = 25,\n\t__BPF_ARG_TYPE_MAX = 26,\n};\n\nenum bpf_return_type {\n\tRET_INTEGER = 0,\n\tRET_VOID = 1,\n\tRET_PTR_TO_MAP_VALUE = 2,\n\tRET_PTR_TO_MAP_VALUE_OR_NULL = 3,\n\tRET_PTR_TO_SOCKET_OR_NULL = 4,\n\tRET_PTR_TO_TCP_SOCK_OR_NULL = 5,\n\tRET_PTR_TO_SOCK_COMMON_OR_NULL = 6,\n\tRET_PTR_TO_ALLOC_MEM_OR_NULL = 7,\n\tRET_PTR_TO_BTF_ID_OR_NULL = 8,\n\tRET_PTR_TO_MEM_OR_BTF_ID_OR_NULL = 9,\n\tRET_PTR_TO_MEM_OR_BTF_ID = 10,\n\tRET_PTR_TO_BTF_ID = 11,\n};\n\nstruct bpf_func_proto {\n\tu64 (*func)(u64, u64, u64, u64, u64);\n\tbool gpl_only;\n\tbool pkt_access;\n\tenum bpf_return_type ret_type;\n\tunion {\n\t\tstruct {\n\t\t\tenum bpf_arg_type arg1_type;\n\t\t\tenum bpf_arg_type arg2_type;\n\t\t\tenum bpf_arg_type arg3_type;\n\t\t\tenum bpf_arg_type arg4_type;\n\t\t\tenum bpf_arg_type arg5_type;\n\t\t};\n\t\tenum bpf_arg_type arg_type[5];\n\t};\n\tunion {\n\t\tstruct {\n\t\t\tu32 *arg1_btf_id;\n\t\t\tu32 *arg2_btf_id;\n\t\t\tu32 *arg3_btf_id;\n\t\t\tu32 *arg4_btf_id;\n\t\t\tu32 *arg5_btf_id;\n\t\t};\n\t\tu32 *arg_btf_id[5];\n\t};\n\tint *ret_btf_id;\n\tbool (*allowed)(const struct bpf_prog *);\n};\n\nenum bpf_access_type {\n\tBPF_READ = 1,\n\tBPF_WRITE = 2,\n};\n\nstruct bpf_verifier_log;\n\nstruct bpf_insn_access_aux {\n\tenum bpf_reg_type reg_type;\n\tunion {\n\t\tint ctx_field_size;\n\t\tstruct {\n\t\t\tstruct btf *btf;\n\t\t\tu32 btf_id;\n\t\t};\n\t};\n\tstruct bpf_verifier_log *log;\n};\n\nstruct bpf_verifier_ops {\n\tconst struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);\n\tbool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);\n\tint (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);\n\tint (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);\n\tu32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);\n\tint (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *);\n};\n\nstruct bpf_event_entry {\n\tstruct perf_event *event;\n\tstruct file *perf_file;\n\tstruct file *map_file;\n\tstruct callback_head rcu;\n};\n\ntypedef long unsigned int (*bpf_ctx_copy_t)(void *, const void *, long unsigned int, long unsigned int);\n\ntypedef struct pt_regs bpf_user_pt_regs_t;\n\nstruct bpf_perf_event_data {\n\tbpf_user_pt_regs_t regs;\n\t__u64 sample_period;\n\t__u64 addr;\n};\n\nstruct perf_event_query_bpf {\n\t__u32 ids_len;\n\t__u32 prog_cnt;\n\t__u32 ids[0];\n};\n\nstruct bpf_perf_event_data_kern {\n\tbpf_user_pt_regs_t *regs;\n\tstruct perf_sample_data *data;\n\tstruct perf_event *event;\n};\n\nstruct btf_id_set {\n\tu32 cnt;\n\tu32 ids[0];\n};\n\nstruct bpf_local_storage_map_bucket {\n\tstruct hlist_head list;\n\traw_spinlock_t lock;\n};\n\nstruct bpf_local_storage_data {\n\tstruct bpf_local_storage_map *smap;\n\tu8 data[0];\n};\n\nstruct trace_event_raw_bpf_trace_printk {\n\tstruct trace_entry ent;\n\tu32 __data_loc_bpf_string;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_bpf_trace_printk {\n\tu32 bpf_string;\n};\n\ntypedef void (*btf_trace_bpf_trace_printk)(void *, const char *);\n\nstruct bpf_trace_module {\n\tstruct module *module;\n\tstruct list_head list;\n};\n\ntypedef u64 (*btf_bpf_probe_read_user)(void *, u32, const void *);\n\ntypedef u64 (*btf_bpf_probe_read_user_str)(void *, u32, const void *);\n\ntypedef u64 (*btf_bpf_probe_read_kernel)(void *, u32, const void *);\n\ntypedef u64 (*btf_bpf_probe_read_kernel_str)(void *, u32, const void *);\n\ntypedef u64 (*btf_bpf_probe_read_compat)(void *, u32, const void *);\n\ntypedef u64 (*btf_bpf_probe_read_compat_str)(void *, u32, const void *);\n\ntypedef u64 (*btf_bpf_probe_write_user)(void *, const void *, u32);\n\ntypedef u64 (*btf_bpf_trace_printk)(char *, u32, u64, u64, u64);\n\nstruct bpf_seq_printf_buf {\n\tchar buf[768];\n};\n\ntypedef u64 (*btf_bpf_seq_printf)(struct seq_file *, char *, u32, const void *, u32);\n\ntypedef u64 (*btf_bpf_seq_write)(struct seq_file *, const void *, u32);\n\ntypedef u64 (*btf_bpf_seq_printf_btf)(struct seq_file *, struct btf_ptr *, u32, u64);\n\ntypedef u64 (*btf_bpf_perf_event_read)(struct bpf_map *, u64);\n\ntypedef u64 (*btf_bpf_perf_event_read_value)(struct bpf_map *, u64, struct bpf_perf_event_value *, u32);\n\nstruct bpf_trace_sample_data {\n\tstruct perf_sample_data sds[3];\n};\n\ntypedef u64 (*btf_bpf_perf_event_output)(struct pt_regs *, struct bpf_map *, u64, void *, u64);\n\nstruct bpf_nested_pt_regs {\n\tstruct pt_regs regs[3];\n};\n\ntypedef u64 (*btf_bpf_get_current_task)();\n\ntypedef u64 (*btf_bpf_get_current_task_btf)();\n\ntypedef u64 (*btf_bpf_current_task_under_cgroup)(struct bpf_map *, u32);\n\nstruct send_signal_irq_work {\n\tstruct irq_work irq_work;\n\tstruct task_struct *task;\n\tu32 sig;\n\tenum pid_type type;\n};\n\ntypedef u64 (*btf_bpf_send_signal)(u32);\n\ntypedef u64 (*btf_bpf_send_signal_thread)(u32);\n\ntypedef u64 (*btf_bpf_d_path)(struct path *, char *, u32);\n\ntypedef u64 (*btf_bpf_snprintf_btf)(char *, u32, struct btf_ptr *, u32, u64);\n\ntypedef u64 (*btf_bpf_perf_event_output_tp)(void *, struct bpf_map *, u64, void *, u64);\n\ntypedef u64 (*btf_bpf_get_stackid_tp)(void *, struct bpf_map *, u64);\n\ntypedef u64 (*btf_bpf_get_stack_tp)(void *, void *, u32, u64);\n\ntypedef u64 (*btf_bpf_perf_prog_read_value)(struct bpf_perf_event_data_kern *, struct bpf_perf_event_value *, u32);\n\ntypedef u64 (*btf_bpf_read_branch_records)(struct bpf_perf_event_data_kern *, void *, u32, u64);\n\nstruct bpf_raw_tp_regs {\n\tstruct pt_regs regs[3];\n};\n\ntypedef u64 (*btf_bpf_perf_event_output_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64, void *, u64);\n\ntypedef u64 (*btf_bpf_get_stackid_raw_tp)(struct bpf_raw_tracepoint_args *, struct bpf_map *, u64);\n\ntypedef u64 (*btf_bpf_get_stack_raw_tp)(struct bpf_raw_tracepoint_args *, void *, u32, u64);\n\nstruct kprobe_trace_entry_head {\n\tstruct trace_entry ent;\n\tlong unsigned int ip;\n};\n\nstruct kretprobe_trace_entry_head {\n\tstruct trace_entry ent;\n\tlong unsigned int func;\n\tlong unsigned int ret_ip;\n};\n\ntypedef int (*print_type_func_t)(struct trace_seq *, void *, void *);\n\nenum fetch_op {\n\tFETCH_OP_NOP = 0,\n\tFETCH_OP_REG = 1,\n\tFETCH_OP_STACK = 2,\n\tFETCH_OP_STACKP = 3,\n\tFETCH_OP_RETVAL = 4,\n\tFETCH_OP_IMM = 5,\n\tFETCH_OP_COMM = 6,\n\tFETCH_OP_ARG = 7,\n\tFETCH_OP_FOFFS = 8,\n\tFETCH_OP_DATA = 9,\n\tFETCH_OP_DEREF = 10,\n\tFETCH_OP_UDEREF = 11,\n\tFETCH_OP_ST_RAW = 12,\n\tFETCH_OP_ST_MEM = 13,\n\tFETCH_OP_ST_UMEM = 14,\n\tFETCH_OP_ST_STRING = 15,\n\tFETCH_OP_ST_USTRING = 16,\n\tFETCH_OP_MOD_BF = 17,\n\tFETCH_OP_LP_ARRAY = 18,\n\tFETCH_OP_END = 19,\n\tFETCH_NOP_SYMBOL = 20,\n};\n\nstruct fetch_insn {\n\tenum fetch_op op;\n\tunion {\n\t\tunsigned int param;\n\t\tstruct {\n\t\t\tunsigned int size;\n\t\t\tint offset;\n\t\t};\n\t\tstruct {\n\t\t\tunsigned char basesize;\n\t\t\tunsigned char lshift;\n\t\t\tunsigned char rshift;\n\t\t};\n\t\tlong unsigned int immediate;\n\t\tvoid *data;\n\t};\n};\n\nstruct fetch_type {\n\tconst char *name;\n\tsize_t size;\n\tint is_signed;\n\tprint_type_func_t print;\n\tconst char *fmt;\n\tconst char *fmttype;\n};\n\nstruct probe_arg {\n\tstruct fetch_insn *code;\n\tbool dynamic;\n\tunsigned int offset;\n\tunsigned int count;\n\tconst char *name;\n\tconst char *comm;\n\tchar *fmt;\n\tconst struct fetch_type *type;\n};\n\nstruct trace_uprobe_filter {\n\trwlock_t rwlock;\n\tint nr_systemwide;\n\tstruct list_head perf_events;\n};\n\nstruct trace_probe_event {\n\tunsigned int flags;\n\tstruct trace_event_class class;\n\tstruct trace_event_call call;\n\tstruct list_head files;\n\tstruct list_head probes;\n\tstruct trace_uprobe_filter filter[0];\n};\n\nstruct trace_probe {\n\tstruct list_head list;\n\tstruct trace_probe_event *event;\n\tssize_t size;\n\tunsigned int nr_args;\n\tstruct probe_arg args[0];\n};\n\nstruct event_file_link {\n\tstruct trace_event_file *file;\n\tstruct list_head list;\n};\n\nenum {\n\tTP_ERR_FILE_NOT_FOUND = 0,\n\tTP_ERR_NO_REGULAR_FILE = 1,\n\tTP_ERR_BAD_REFCNT = 2,\n\tTP_ERR_REFCNT_OPEN_BRACE = 3,\n\tTP_ERR_BAD_REFCNT_SUFFIX = 4,\n\tTP_ERR_BAD_UPROBE_OFFS = 5,\n\tTP_ERR_MAXACT_NO_KPROBE = 6,\n\tTP_ERR_BAD_MAXACT = 7,\n\tTP_ERR_MAXACT_TOO_BIG = 8,\n\tTP_ERR_BAD_PROBE_ADDR = 9,\n\tTP_ERR_BAD_RETPROBE = 10,\n\tTP_ERR_BAD_ADDR_SUFFIX = 11,\n\tTP_ERR_NO_GROUP_NAME = 12,\n\tTP_ERR_GROUP_TOO_LONG = 13,\n\tTP_ERR_BAD_GROUP_NAME = 14,\n\tTP_ERR_NO_EVENT_NAME = 15,\n\tTP_ERR_EVENT_TOO_LONG = 16,\n\tTP_ERR_BAD_EVENT_NAME = 17,\n\tTP_ERR_RETVAL_ON_PROBE = 18,\n\tTP_ERR_BAD_STACK_NUM = 19,\n\tTP_ERR_BAD_ARG_NUM = 20,\n\tTP_ERR_BAD_VAR = 21,\n\tTP_ERR_BAD_REG_NAME = 22,\n\tTP_ERR_BAD_MEM_ADDR = 23,\n\tTP_ERR_BAD_IMM = 24,\n\tTP_ERR_IMMSTR_NO_CLOSE = 25,\n\tTP_ERR_FILE_ON_KPROBE = 26,\n\tTP_ERR_BAD_FILE_OFFS = 27,\n\tTP_ERR_SYM_ON_UPROBE = 28,\n\tTP_ERR_TOO_MANY_OPS = 29,\n\tTP_ERR_DEREF_NEED_BRACE = 30,\n\tTP_ERR_BAD_DEREF_OFFS = 31,\n\tTP_ERR_DEREF_OPEN_BRACE = 32,\n\tTP_ERR_COMM_CANT_DEREF = 33,\n\tTP_ERR_BAD_FETCH_ARG = 34,\n\tTP_ERR_ARRAY_NO_CLOSE = 35,\n\tTP_ERR_BAD_ARRAY_SUFFIX = 36,\n\tTP_ERR_BAD_ARRAY_NUM = 37,\n\tTP_ERR_ARRAY_TOO_BIG = 38,\n\tTP_ERR_BAD_TYPE = 39,\n\tTP_ERR_BAD_STRING = 40,\n\tTP_ERR_BAD_BITFIELD = 41,\n\tTP_ERR_ARG_NAME_TOO_LONG = 42,\n\tTP_ERR_NO_ARG_NAME = 43,\n\tTP_ERR_BAD_ARG_NAME = 44,\n\tTP_ERR_USED_ARG_NAME = 45,\n\tTP_ERR_ARG_TOO_LONG = 46,\n\tTP_ERR_NO_ARG_BODY = 47,\n\tTP_ERR_BAD_INSN_BNDRY = 48,\n\tTP_ERR_FAIL_REG_PROBE = 49,\n\tTP_ERR_DIFF_PROBE_TYPE = 50,\n\tTP_ERR_DIFF_ARG_TYPE = 51,\n\tTP_ERR_SAME_PROBE = 52,\n};\n\nstruct trace_kprobe {\n\tstruct dyn_event devent;\n\tstruct kretprobe rp;\n\tlong unsigned int *nhit;\n\tconst char *symbol;\n\tstruct trace_probe tp;\n};\n\nstruct trace_event_raw_cpu {\n\tstruct trace_entry ent;\n\tu32 state;\n\tu32 cpu_id;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_powernv_throttle {\n\tstruct trace_entry ent;\n\tint chip_id;\n\tu32 __data_loc_reason;\n\tint pmax;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_pstate_sample {\n\tstruct trace_entry ent;\n\tu32 core_busy;\n\tu32 scaled_busy;\n\tu32 from;\n\tu32 to;\n\tu64 mperf;\n\tu64 aperf;\n\tu64 tsc;\n\tu32 freq;\n\tu32 io_boost;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_cpu_frequency_limits {\n\tstruct trace_entry ent;\n\tu32 min_freq;\n\tu32 max_freq;\n\tu32 cpu_id;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_device_pm_callback_start {\n\tstruct trace_entry ent;\n\tu32 __data_loc_device;\n\tu32 __data_loc_driver;\n\tu32 __data_loc_parent;\n\tu32 __data_loc_pm_ops;\n\tint event;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_device_pm_callback_end {\n\tstruct trace_entry ent;\n\tu32 __data_loc_device;\n\tu32 __data_loc_driver;\n\tint error;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_suspend_resume {\n\tstruct trace_entry ent;\n\tconst char *action;\n\tint val;\n\tbool start;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_wakeup_source {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tu64 state;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_clock {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tu64 state;\n\tu64 cpu_id;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_power_domain {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tu64 state;\n\tu64 cpu_id;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_cpu_latency_qos_request {\n\tstruct trace_entry ent;\n\ts32 value;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_pm_qos_update {\n\tstruct trace_entry ent;\n\tenum pm_qos_req_action action;\n\tint prev_value;\n\tint curr_value;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_dev_pm_qos_request {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tenum dev_pm_qos_req_type type;\n\ts32 new_value;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_cpu {};\n\nstruct trace_event_data_offsets_powernv_throttle {\n\tu32 reason;\n};\n\nstruct trace_event_data_offsets_pstate_sample {};\n\nstruct trace_event_data_offsets_cpu_frequency_limits {};\n\nstruct trace_event_data_offsets_device_pm_callback_start {\n\tu32 device;\n\tu32 driver;\n\tu32 parent;\n\tu32 pm_ops;\n};\n\nstruct trace_event_data_offsets_device_pm_callback_end {\n\tu32 device;\n\tu32 driver;\n};\n\nstruct trace_event_data_offsets_suspend_resume {};\n\nstruct trace_event_data_offsets_wakeup_source {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_clock {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_power_domain {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_cpu_latency_qos_request {};\n\nstruct trace_event_data_offsets_pm_qos_update {};\n\nstruct trace_event_data_offsets_dev_pm_qos_request {\n\tu32 name;\n};\n\ntypedef void (*btf_trace_cpu_idle)(void *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_powernv_throttle)(void *, int, const char *, int);\n\ntypedef void (*btf_trace_pstate_sample)(void *, u32, u32, u32, u32, u64, u64, u64, u32, u32);\n\ntypedef void (*btf_trace_cpu_frequency)(void *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_cpu_frequency_limits)(void *, struct cpufreq_policy *);\n\ntypedef void (*btf_trace_device_pm_callback_start)(void *, struct device *, const char *, int);\n\ntypedef void (*btf_trace_device_pm_callback_end)(void *, struct device *, int);\n\ntypedef void (*btf_trace_suspend_resume)(void *, const char *, int, bool);\n\ntypedef void (*btf_trace_wakeup_source_activate)(void *, const char *, unsigned int);\n\ntypedef void (*btf_trace_wakeup_source_deactivate)(void *, const char *, unsigned int);\n\ntypedef void (*btf_trace_clock_enable)(void *, const char *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_clock_disable)(void *, const char *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_clock_set_rate)(void *, const char *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_power_domain_target)(void *, const char *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_pm_qos_add_request)(void *, s32);\n\ntypedef void (*btf_trace_pm_qos_update_request)(void *, s32);\n\ntypedef void (*btf_trace_pm_qos_remove_request)(void *, s32);\n\ntypedef void (*btf_trace_pm_qos_update_target)(void *, enum pm_qos_req_action, int, int);\n\ntypedef void (*btf_trace_pm_qos_update_flags)(void *, enum pm_qos_req_action, int, int);\n\ntypedef void (*btf_trace_dev_pm_qos_add_request)(void *, const char *, enum dev_pm_qos_req_type, s32);\n\ntypedef void (*btf_trace_dev_pm_qos_update_request)(void *, const char *, enum dev_pm_qos_req_type, s32);\n\ntypedef void (*btf_trace_dev_pm_qos_remove_request)(void *, const char *, enum dev_pm_qos_req_type, s32);\n\nstruct trace_event_raw_rpm_internal {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tint flags;\n\tint usage_count;\n\tint disable_depth;\n\tint runtime_auto;\n\tint request_pending;\n\tint irq_safe;\n\tint child_count;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_rpm_return_int {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tlong unsigned int ip;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_rpm_internal {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_rpm_return_int {\n\tu32 name;\n};\n\ntypedef void (*btf_trace_rpm_suspend)(void *, struct device *, int);\n\ntypedef void (*btf_trace_rpm_resume)(void *, struct device *, int);\n\ntypedef void (*btf_trace_rpm_idle)(void *, struct device *, int);\n\ntypedef void (*btf_trace_rpm_usage)(void *, struct device *, int);\n\ntypedef void (*btf_trace_rpm_return_int)(void *, struct device *, long unsigned int, int);\n\nstruct trace_probe_log {\n\tconst char *subsystem;\n\tconst char **argv;\n\tint argc;\n\tint index;\n};\n\nenum uprobe_filter_ctx {\n\tUPROBE_FILTER_REGISTER = 0,\n\tUPROBE_FILTER_UNREGISTER = 1,\n\tUPROBE_FILTER_MMAP = 2,\n};\n\nstruct uprobe_consumer {\n\tint (*handler)(struct uprobe_consumer *, struct pt_regs *);\n\tint (*ret_handler)(struct uprobe_consumer *, long unsigned int, struct pt_regs *);\n\tbool (*filter)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);\n\tstruct uprobe_consumer *next;\n};\n\nstruct uprobe_trace_entry_head {\n\tstruct trace_entry ent;\n\tlong unsigned int vaddr[0];\n};\n\nstruct trace_uprobe {\n\tstruct dyn_event devent;\n\tstruct uprobe_consumer consumer;\n\tstruct path path;\n\tstruct inode *inode;\n\tchar *filename;\n\tlong unsigned int offset;\n\tlong unsigned int ref_ctr_offset;\n\tlong unsigned int nhit;\n\tstruct trace_probe tp;\n};\n\nstruct uprobe_dispatch_data {\n\tstruct trace_uprobe *tu;\n\tlong unsigned int bp_addr;\n};\n\nstruct uprobe_cpu_buffer {\n\tstruct mutex mutex;\n\tvoid *buf;\n};\n\ntypedef bool (*filter_func_t)(struct uprobe_consumer *, enum uprobe_filter_ctx, struct mm_struct *);\n\nstruct rhash_lock_head;\n\nstruct bucket_table {\n\tunsigned int size;\n\tunsigned int nest;\n\tu32 hash_rnd;\n\tstruct list_head walkers;\n\tstruct callback_head rcu;\n\tstruct bucket_table *future_tbl;\n\tstruct lockdep_map dep_map;\n\tlong: 64;\n\tstruct rhash_lock_head *buckets[0];\n};\n\nenum xdp_action {\n\tXDP_ABORTED = 0,\n\tXDP_DROP = 1,\n\tXDP_PASS = 2,\n\tXDP_TX = 3,\n\tXDP_REDIRECT = 4,\n};\n\nenum xdp_mem_type {\n\tMEM_TYPE_PAGE_SHARED = 0,\n\tMEM_TYPE_PAGE_ORDER0 = 1,\n\tMEM_TYPE_PAGE_POOL = 2,\n\tMEM_TYPE_XSK_BUFF_POOL = 3,\n\tMEM_TYPE_MAX = 4,\n};\n\nstruct xdp_cpumap_stats {\n\tunsigned int redirect;\n\tunsigned int pass;\n\tunsigned int drop;\n};\n\nstruct bpf_prog_dummy {\n\tstruct bpf_prog prog;\n};\n\ntypedef u64 (*btf_bpf_user_rnd_u32)();\n\ntypedef u64 (*btf_bpf_get_raw_cpu_id)();\n\nstruct _bpf_dtab_netdev {\n\tstruct net_device *dev;\n};\n\nstruct rhash_lock_head {};\n\nstruct zero_copy_allocator;\n\nstruct page_pool;\n\nstruct xdp_mem_allocator {\n\tstruct xdp_mem_info mem;\n\tunion {\n\t\tvoid *allocator;\n\t\tstruct page_pool *page_pool;\n\t\tstruct zero_copy_allocator *zc_alloc;\n\t};\n\tstruct rhash_head node;\n\tstruct callback_head rcu;\n};\n\nstruct trace_event_raw_xdp_exception {\n\tstruct trace_entry ent;\n\tint prog_id;\n\tu32 act;\n\tint ifindex;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xdp_bulk_tx {\n\tstruct trace_entry ent;\n\tint ifindex;\n\tu32 act;\n\tint drops;\n\tint sent;\n\tint err;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xdp_redirect_template {\n\tstruct trace_entry ent;\n\tint prog_id;\n\tu32 act;\n\tint ifindex;\n\tint err;\n\tint to_ifindex;\n\tu32 map_id;\n\tint map_index;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xdp_cpumap_kthread {\n\tstruct trace_entry ent;\n\tint map_id;\n\tu32 act;\n\tint cpu;\n\tunsigned int drops;\n\tunsigned int processed;\n\tint sched;\n\tunsigned int xdp_pass;\n\tunsigned int xdp_drop;\n\tunsigned int xdp_redirect;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xdp_cpumap_enqueue {\n\tstruct trace_entry ent;\n\tint map_id;\n\tu32 act;\n\tint cpu;\n\tunsigned int drops;\n\tunsigned int processed;\n\tint to_cpu;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xdp_devmap_xmit {\n\tstruct trace_entry ent;\n\tint from_ifindex;\n\tu32 act;\n\tint to_ifindex;\n\tint drops;\n\tint sent;\n\tint err;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mem_disconnect {\n\tstruct trace_entry ent;\n\tconst struct xdp_mem_allocator *xa;\n\tu32 mem_id;\n\tu32 mem_type;\n\tconst void *allocator;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mem_connect {\n\tstruct trace_entry ent;\n\tconst struct xdp_mem_allocator *xa;\n\tu32 mem_id;\n\tu32 mem_type;\n\tconst void *allocator;\n\tconst struct xdp_rxq_info *rxq;\n\tint ifindex;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mem_return_failed {\n\tstruct trace_entry ent;\n\tconst struct page *page;\n\tu32 mem_id;\n\tu32 mem_type;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_xdp_exception {};\n\nstruct trace_event_data_offsets_xdp_bulk_tx {};\n\nstruct trace_event_data_offsets_xdp_redirect_template {};\n\nstruct trace_event_data_offsets_xdp_cpumap_kthread {};\n\nstruct trace_event_data_offsets_xdp_cpumap_enqueue {};\n\nstruct trace_event_data_offsets_xdp_devmap_xmit {};\n\nstruct trace_event_data_offsets_mem_disconnect {};\n\nstruct trace_event_data_offsets_mem_connect {};\n\nstruct trace_event_data_offsets_mem_return_failed {};\n\ntypedef void (*btf_trace_xdp_exception)(void *, const struct net_device *, const struct bpf_prog *, u32);\n\ntypedef void (*btf_trace_xdp_bulk_tx)(void *, const struct net_device *, int, int, int);\n\ntypedef void (*btf_trace_xdp_redirect)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);\n\ntypedef void (*btf_trace_xdp_redirect_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);\n\ntypedef void (*btf_trace_xdp_redirect_map)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);\n\ntypedef void (*btf_trace_xdp_redirect_map_err)(void *, const struct net_device *, const struct bpf_prog *, const void *, int, const struct bpf_map *, u32);\n\ntypedef void (*btf_trace_xdp_cpumap_kthread)(void *, int, unsigned int, unsigned int, int, struct xdp_cpumap_stats *);\n\ntypedef void (*btf_trace_xdp_cpumap_enqueue)(void *, int, unsigned int, unsigned int, int);\n\ntypedef void (*btf_trace_xdp_devmap_xmit)(void *, const struct net_device *, const struct net_device *, int, int, int);\n\ntypedef void (*btf_trace_mem_disconnect)(void *, const struct xdp_mem_allocator *);\n\ntypedef void (*btf_trace_mem_connect)(void *, const struct xdp_mem_allocator *, const struct xdp_rxq_info *);\n\ntypedef void (*btf_trace_mem_return_failed)(void *, const struct xdp_mem_info *, const struct page *);\n\nenum bpf_cmd {\n\tBPF_MAP_CREATE = 0,\n\tBPF_MAP_LOOKUP_ELEM = 1,\n\tBPF_MAP_UPDATE_ELEM = 2,\n\tBPF_MAP_DELETE_ELEM = 3,\n\tBPF_MAP_GET_NEXT_KEY = 4,\n\tBPF_PROG_LOAD = 5,\n\tBPF_OBJ_PIN = 6,\n\tBPF_OBJ_GET = 7,\n\tBPF_PROG_ATTACH = 8,\n\tBPF_PROG_DETACH = 9,\n\tBPF_PROG_TEST_RUN = 10,\n\tBPF_PROG_GET_NEXT_ID = 11,\n\tBPF_MAP_GET_NEXT_ID = 12,\n\tBPF_PROG_GET_FD_BY_ID = 13,\n\tBPF_MAP_GET_FD_BY_ID = 14,\n\tBPF_OBJ_GET_INFO_BY_FD = 15,\n\tBPF_PROG_QUERY = 16,\n\tBPF_RAW_TRACEPOINT_OPEN = 17,\n\tBPF_BTF_LOAD = 18,\n\tBPF_BTF_GET_FD_BY_ID = 19,\n\tBPF_TASK_FD_QUERY = 20,\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM = 21,\n\tBPF_MAP_FREEZE = 22,\n\tBPF_BTF_GET_NEXT_ID = 23,\n\tBPF_MAP_LOOKUP_BATCH = 24,\n\tBPF_MAP_LOOKUP_AND_DELETE_BATCH = 25,\n\tBPF_MAP_UPDATE_BATCH = 26,\n\tBPF_MAP_DELETE_BATCH = 27,\n\tBPF_LINK_CREATE = 28,\n\tBPF_LINK_UPDATE = 29,\n\tBPF_LINK_GET_FD_BY_ID = 30,\n\tBPF_LINK_GET_NEXT_ID = 31,\n\tBPF_ENABLE_STATS = 32,\n\tBPF_ITER_CREATE = 33,\n\tBPF_LINK_DETACH = 34,\n\tBPF_PROG_BIND_MAP = 35,\n};\n\nenum {\n\tBPF_ANY = 0,\n\tBPF_NOEXIST = 1,\n\tBPF_EXIST = 2,\n\tBPF_F_LOCK = 4,\n};\n\nenum {\n\tBPF_F_NO_PREALLOC = 1,\n\tBPF_F_NO_COMMON_LRU = 2,\n\tBPF_F_NUMA_NODE = 4,\n\tBPF_F_RDONLY = 8,\n\tBPF_F_WRONLY = 16,\n\tBPF_F_STACK_BUILD_ID = 32,\n\tBPF_F_ZERO_SEED = 64,\n\tBPF_F_RDONLY_PROG = 128,\n\tBPF_F_WRONLY_PROG = 256,\n\tBPF_F_CLONE = 512,\n\tBPF_F_MMAPABLE = 1024,\n\tBPF_F_PRESERVE_ELEMS = 2048,\n\tBPF_F_INNER_MAP = 4096,\n};\n\nenum bpf_stats_type {\n\tBPF_STATS_RUN_TIME = 0,\n};\n\nstruct bpf_prog_info {\n\t__u32 type;\n\t__u32 id;\n\t__u8 tag[8];\n\t__u32 jited_prog_len;\n\t__u32 xlated_prog_len;\n\t__u64 jited_prog_insns;\n\t__u64 xlated_prog_insns;\n\t__u64 load_time;\n\t__u32 created_by_uid;\n\t__u32 nr_map_ids;\n\t__u64 map_ids;\n\tchar name[16];\n\t__u32 ifindex;\n\t__u32 gpl_compatible: 1;\n\t__u64 netns_dev;\n\t__u64 netns_ino;\n\t__u32 nr_jited_ksyms;\n\t__u32 nr_jited_func_lens;\n\t__u64 jited_ksyms;\n\t__u64 jited_func_lens;\n\t__u32 btf_id;\n\t__u32 func_info_rec_size;\n\t__u64 func_info;\n\t__u32 nr_func_info;\n\t__u32 nr_line_info;\n\t__u64 line_info;\n\t__u64 jited_line_info;\n\t__u32 nr_jited_line_info;\n\t__u32 line_info_rec_size;\n\t__u32 jited_line_info_rec_size;\n\t__u32 nr_prog_tags;\n\t__u64 prog_tags;\n\t__u64 run_time_ns;\n\t__u64 run_cnt;\n};\n\nstruct bpf_map_info {\n\t__u32 type;\n\t__u32 id;\n\t__u32 key_size;\n\t__u32 value_size;\n\t__u32 max_entries;\n\t__u32 map_flags;\n\tchar name[16];\n\t__u32 ifindex;\n\t__u32 btf_vmlinux_value_type_id;\n\t__u64 netns_dev;\n\t__u64 netns_ino;\n\t__u32 btf_id;\n\t__u32 btf_key_type_id;\n\t__u32 btf_value_type_id;\n};\n\nstruct bpf_btf_info {\n\t__u64 btf;\n\t__u32 btf_size;\n\t__u32 id;\n\t__u64 name;\n\t__u32 name_len;\n\t__u32 kernel_btf;\n};\n\nstruct bpf_spin_lock {\n\t__u32 val;\n};\n\nstruct bpf_verifier_log {\n\tu32 level;\n\tchar kbuf[1024];\n\tchar *ubuf;\n\tu32 len_used;\n\tu32 len_total;\n};\n\nstruct bpf_attach_target_info {\n\tstruct btf_func_model fmodel;\n\tlong int tgt_addr;\n\tconst char *tgt_name;\n\tconst struct btf_type *tgt_type;\n};\n\nstruct bpf_link_primer {\n\tstruct bpf_link *link;\n\tstruct file *file;\n\tint fd;\n\tu32 id;\n};\n\nenum perf_bpf_event_type {\n\tPERF_BPF_EVENT_UNKNOWN = 0,\n\tPERF_BPF_EVENT_PROG_LOAD = 1,\n\tPERF_BPF_EVENT_PROG_UNLOAD = 2,\n\tPERF_BPF_EVENT_MAX = 3,\n};\n\nenum bpf_audit {\n\tBPF_AUDIT_LOAD = 0,\n\tBPF_AUDIT_UNLOAD = 1,\n\tBPF_AUDIT_MAX = 2,\n};\n\nstruct bpf_tracing_link {\n\tstruct bpf_link link;\n\tenum bpf_attach_type attach_type;\n\tstruct bpf_trampoline *trampoline;\n\tstruct bpf_prog *tgt_prog;\n};\n\nstruct bpf_raw_tp_link {\n\tstruct bpf_link link;\n\tstruct bpf_raw_event_map *btp;\n};\n\nstruct btf_member {\n\t__u32 name_off;\n\t__u32 type;\n\t__u32 offset;\n};\n\nenum btf_func_linkage {\n\tBTF_FUNC_STATIC = 0,\n\tBTF_FUNC_GLOBAL = 1,\n\tBTF_FUNC_EXTERN = 2,\n};\n\nstruct btf_var_secinfo {\n\t__u32 type;\n\t__u32 offset;\n\t__u32 size;\n};\n\nenum sk_action {\n\tSK_DROP = 0,\n\tSK_PASS = 1,\n};\n\nstruct bpf_subprog_info {\n\tu32 start;\n\tu32 linfo_idx;\n\tu16 stack_depth;\n\tbool has_tail_call;\n\tbool tail_call_reachable;\n\tbool has_ld_abs;\n};\n\nstruct bpf_verifier_stack_elem;\n\nstruct bpf_verifier_state;\n\nstruct bpf_verifier_state_list;\n\nstruct bpf_insn_aux_data;\n\nstruct bpf_verifier_env {\n\tu32 insn_idx;\n\tu32 prev_insn_idx;\n\tstruct bpf_prog *prog;\n\tconst struct bpf_verifier_ops *ops;\n\tstruct bpf_verifier_stack_elem *head;\n\tint stack_size;\n\tbool strict_alignment;\n\tbool test_state_freq;\n\tstruct bpf_verifier_state *cur_state;\n\tstruct bpf_verifier_state_list **explored_states;\n\tstruct bpf_verifier_state_list *free_list;\n\tstruct bpf_map *used_maps[64];\n\tu32 used_map_cnt;\n\tu32 id_gen;\n\tbool allow_ptr_leaks;\n\tbool allow_uninit_stack;\n\tbool allow_ptr_to_map_access;\n\tbool bpf_capable;\n\tbool bypass_spec_v1;\n\tbool bypass_spec_v4;\n\tbool seen_direct_write;\n\tstruct bpf_insn_aux_data *insn_aux_data;\n\tconst struct bpf_line_info *prev_linfo;\n\tstruct bpf_verifier_log log;\n\tstruct bpf_subprog_info subprog_info[257];\n\tstruct {\n\t\tint *insn_state;\n\t\tint *insn_stack;\n\t\tint cur_stack;\n\t} cfg;\n\tu32 pass_cnt;\n\tu32 subprog_cnt;\n\tu32 prev_insn_processed;\n\tu32 insn_processed;\n\tu32 prev_jmps_processed;\n\tu32 jmps_processed;\n\tu64 verification_time;\n\tu32 max_states_per_insn;\n\tu32 total_states;\n\tu32 peak_states;\n\tu32 longest_mark_read_walk;\n};\n\nstruct bpf_struct_ops {\n\tconst struct bpf_verifier_ops *verifier_ops;\n\tint (*init)(struct btf *);\n\tint (*check_member)(const struct btf_type *, const struct btf_member *);\n\tint (*init_member)(const struct btf_type *, const struct btf_member *, void *, const void *);\n\tint (*reg)(void *);\n\tvoid (*unreg)(void *);\n\tconst struct btf_type *type;\n\tconst struct btf_type *value_type;\n\tconst char *name;\n\tstruct btf_func_model func_models[64];\n\tu32 type_id;\n\tu32 value_id;\n};\n\ntypedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);\n\nstruct tnum {\n\tu64 value;\n\tu64 mask;\n};\n\nenum bpf_reg_liveness {\n\tREG_LIVE_NONE = 0,\n\tREG_LIVE_READ32 = 1,\n\tREG_LIVE_READ64 = 2,\n\tREG_LIVE_READ = 3,\n\tREG_LIVE_WRITTEN = 4,\n\tREG_LIVE_DONE = 8,\n};\n\nstruct bpf_reg_state {\n\tenum bpf_reg_type type;\n\ts32 off;\n\tunion {\n\t\tint range;\n\t\tstruct bpf_map *map_ptr;\n\t\tstruct {\n\t\t\tstruct btf *btf;\n\t\t\tu32 btf_id;\n\t\t};\n\t\tu32 mem_size;\n\t\tstruct {\n\t\t\tlong unsigned int raw1;\n\t\t\tlong unsigned int raw2;\n\t\t} raw;\n\t};\n\tu32 id;\n\tu32 ref_obj_id;\n\tstruct tnum var_off;\n\ts64 smin_value;\n\ts64 smax_value;\n\tu64 umin_value;\n\tu64 umax_value;\n\ts32 s32_min_value;\n\ts32 s32_max_value;\n\tu32 u32_min_value;\n\tu32 u32_max_value;\n\tstruct bpf_reg_state *parent;\n\tu32 frameno;\n\ts32 subreg_def;\n\tenum bpf_reg_liveness live;\n\tbool precise;\n};\n\nenum bpf_stack_slot_type {\n\tSTACK_INVALID = 0,\n\tSTACK_SPILL = 1,\n\tSTACK_MISC = 2,\n\tSTACK_ZERO = 3,\n};\n\nstruct bpf_stack_state {\n\tstruct bpf_reg_state spilled_ptr;\n\tu8 slot_type[8];\n};\n\nstruct bpf_reference_state {\n\tint id;\n\tint insn_idx;\n};\n\nstruct bpf_func_state {\n\tstruct bpf_reg_state regs[11];\n\tint callsite;\n\tu32 frameno;\n\tu32 subprogno;\n\tint acquired_refs;\n\tstruct bpf_reference_state *refs;\n\tint allocated_stack;\n\tstruct bpf_stack_state *stack;\n};\n\nstruct bpf_idx_pair {\n\tu32 prev_idx;\n\tu32 idx;\n};\n\nstruct bpf_verifier_state {\n\tstruct bpf_func_state *frame[8];\n\tstruct bpf_verifier_state *parent;\n\tu32 branches;\n\tu32 insn_idx;\n\tu32 curframe;\n\tu32 active_spin_lock;\n\tbool speculative;\n\tu32 first_insn_idx;\n\tu32 last_insn_idx;\n\tstruct bpf_idx_pair *jmp_history;\n\tu32 jmp_history_cnt;\n};\n\nstruct bpf_verifier_state_list {\n\tstruct bpf_verifier_state state;\n\tstruct bpf_verifier_state_list *next;\n\tint miss_cnt;\n\tint hit_cnt;\n};\n\nstruct bpf_insn_aux_data {\n\tunion {\n\t\tenum bpf_reg_type ptr_type;\n\t\tlong unsigned int map_ptr_state;\n\t\ts32 call_imm;\n\t\tu32 alu_limit;\n\t\tstruct {\n\t\t\tu32 map_index;\n\t\t\tu32 map_off;\n\t\t};\n\t\tstruct {\n\t\t\tenum bpf_reg_type reg_type;\n\t\t\tunion {\n\t\t\t\tstruct {\n\t\t\t\t\tstruct btf *btf;\n\t\t\t\t\tu32 btf_id;\n\t\t\t\t};\n\t\t\t\tu32 mem_size;\n\t\t\t};\n\t\t} btf_var;\n\t};\n\tu64 map_key_state;\n\tint ctx_field_size;\n\tint sanitize_stack_off;\n\tu32 seen;\n\tbool zext_dst;\n\tu8 alu_state;\n\tunsigned int orig_idx;\n\tbool prune_point;\n};\n\nstruct bpf_verifier_stack_elem {\n\tstruct bpf_verifier_state st;\n\tint insn_idx;\n\tint prev_insn_idx;\n\tstruct bpf_verifier_stack_elem *next;\n\tu32 log_pos;\n};\n\nenum {\n\tBTF_SOCK_TYPE_INET = 0,\n\tBTF_SOCK_TYPE_INET_CONN = 1,\n\tBTF_SOCK_TYPE_INET_REQ = 2,\n\tBTF_SOCK_TYPE_INET_TW = 3,\n\tBTF_SOCK_TYPE_REQ = 4,\n\tBTF_SOCK_TYPE_SOCK = 5,\n\tBTF_SOCK_TYPE_SOCK_COMMON = 6,\n\tBTF_SOCK_TYPE_TCP = 7,\n\tBTF_SOCK_TYPE_TCP_REQ = 8,\n\tBTF_SOCK_TYPE_TCP_TW = 9,\n\tBTF_SOCK_TYPE_TCP6 = 10,\n\tBTF_SOCK_TYPE_UDP = 11,\n\tBTF_SOCK_TYPE_UDP6 = 12,\n\tMAX_BTF_SOCK_TYPE = 13,\n};\n\ntypedef void (*bpf_insn_print_t)(void *, const char *, ...);\n\ntypedef const char * (*bpf_insn_revmap_call_t)(void *, const struct bpf_insn *);\n\ntypedef const char * (*bpf_insn_print_imm_t)(void *, const struct bpf_insn *, __u64);\n\nstruct bpf_insn_cbs {\n\tbpf_insn_print_t cb_print;\n\tbpf_insn_revmap_call_t cb_call;\n\tbpf_insn_print_imm_t cb_imm;\n\tvoid *private_data;\n};\n\nstruct bpf_call_arg_meta {\n\tstruct bpf_map *map_ptr;\n\tbool raw_mode;\n\tbool pkt_access;\n\tint regno;\n\tint access_size;\n\tint mem_size;\n\tu64 msize_max_value;\n\tint ref_obj_id;\n\tint func_id;\n\tstruct btf *btf;\n\tu32 btf_id;\n\tstruct btf *ret_btf;\n\tu32 ret_btf_id;\n};\n\nenum reg_arg_type {\n\tSRC_OP = 0,\n\tDST_OP = 1,\n\tDST_OP_NO_MARK = 2,\n};\n\nenum stack_access_src {\n\tACCESS_DIRECT = 1,\n\tACCESS_HELPER = 2,\n};\n\nstruct bpf_reg_types {\n\tconst enum bpf_reg_type types[10];\n\tu32 *btf_id;\n};\n\nenum {\n\tAT_PKT_END = 4294967295,\n\tBEYOND_PKT_END = 4294967294,\n};\n\nenum {\n\tREASON_BOUNDS = 4294967295,\n\tREASON_TYPE = 4294967294,\n\tREASON_PATHS = 4294967293,\n\tREASON_LIMIT = 4294967292,\n\tREASON_STACK = 4294967291,\n};\n\nenum {\n\tDISCOVERED = 16,\n\tEXPLORED = 32,\n\tFALLTHROUGH = 1,\n\tBRANCH = 2,\n};\n\nenum {\n\tDONE_EXPLORING = 0,\n\tKEEP_EXPLORING = 1,\n};\n\nstruct idpair {\n\tu32 old;\n\tu32 cur;\n};\n\nstruct tree_descr {\n\tconst char *name;\n\tconst struct file_operations *ops;\n\tint mode;\n};\n\nstruct bpf_preload_info {\n\tchar link_name[16];\n\tint link_id;\n};\n\nstruct bpf_preload_ops {\n\tstruct umd_info info;\n\tint (*preload)(struct bpf_preload_info *);\n\tint (*finish)();\n\tstruct module *owner;\n};\n\nenum bpf_type {\n\tBPF_TYPE_UNSPEC = 0,\n\tBPF_TYPE_PROG = 1,\n\tBPF_TYPE_MAP = 2,\n\tBPF_TYPE_LINK = 3,\n};\n\nstruct map_iter {\n\tvoid *key;\n\tbool done;\n};\n\nenum {\n\tOPT_MODE = 0,\n};\n\nstruct bpf_mount_opts {\n\tumode_t mode;\n};\n\nstruct bpf_pidns_info {\n\t__u32 pid;\n\t__u32 tgid;\n};\n\ntypedef u64 (*btf_bpf_map_lookup_elem)(struct bpf_map *, void *);\n\ntypedef u64 (*btf_bpf_map_update_elem)(struct bpf_map *, void *, void *, u64);\n\ntypedef u64 (*btf_bpf_map_delete_elem)(struct bpf_map *, void *);\n\ntypedef u64 (*btf_bpf_map_push_elem)(struct bpf_map *, void *, u64);\n\ntypedef u64 (*btf_bpf_map_pop_elem)(struct bpf_map *, void *);\n\ntypedef u64 (*btf_bpf_map_peek_elem)(struct bpf_map *, void *);\n\ntypedef u64 (*btf_bpf_get_smp_processor_id)();\n\ntypedef u64 (*btf_bpf_get_numa_node_id)();\n\ntypedef u64 (*btf_bpf_ktime_get_ns)();\n\ntypedef u64 (*btf_bpf_ktime_get_boot_ns)();\n\ntypedef u64 (*btf_bpf_ktime_get_coarse_ns)();\n\ntypedef u64 (*btf_bpf_get_current_pid_tgid)();\n\ntypedef u64 (*btf_bpf_get_current_uid_gid)();\n\ntypedef u64 (*btf_bpf_get_current_comm)(char *, u32);\n\ntypedef u64 (*btf_bpf_spin_lock)(struct bpf_spin_lock *);\n\ntypedef u64 (*btf_bpf_spin_unlock)(struct bpf_spin_lock *);\n\ntypedef u64 (*btf_bpf_jiffies64)();\n\ntypedef u64 (*btf_bpf_get_current_cgroup_id)();\n\ntypedef u64 (*btf_bpf_get_current_ancestor_cgroup_id)(int);\n\ntypedef u64 (*btf_bpf_get_local_storage)(struct bpf_map *, u64);\n\ntypedef u64 (*btf_bpf_strtol)(const char *, size_t, u64, long int *);\n\ntypedef u64 (*btf_bpf_strtoul)(const char *, size_t, u64, long unsigned int *);\n\ntypedef u64 (*btf_bpf_get_ns_current_pid_tgid)(u64, u64, struct bpf_pidns_info *, u32);\n\ntypedef u64 (*btf_bpf_event_output_data)(void *, struct bpf_map *, u64, void *, u64);\n\ntypedef u64 (*btf_bpf_copy_from_user)(void *, u32, const void *);\n\ntypedef u64 (*btf_bpf_per_cpu_ptr)(const void *, u32);\n\ntypedef u64 (*btf_bpf_this_cpu_ptr)(const void *);\n\nunion bpf_iter_link_info {\n\tstruct {\n\t\t__u32 map_fd;\n\t} map;\n};\n\ntypedef int (*bpf_iter_attach_target_t)(struct bpf_prog *, union bpf_iter_link_info *, struct bpf_iter_aux_info *);\n\ntypedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *);\n\ntypedef void (*bpf_iter_show_fdinfo_t)(const struct bpf_iter_aux_info *, struct seq_file *);\n\ntypedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *, struct bpf_link_info *);\n\nenum bpf_iter_feature {\n\tBPF_ITER_RESCHED = 1,\n};\n\nstruct bpf_iter_reg {\n\tconst char *target;\n\tbpf_iter_attach_target_t attach_target;\n\tbpf_iter_detach_target_t detach_target;\n\tbpf_iter_show_fdinfo_t show_fdinfo;\n\tbpf_iter_fill_link_info_t fill_link_info;\n\tu32 ctx_arg_info_size;\n\tu32 feature;\n\tstruct bpf_ctx_arg_aux ctx_arg_info[2];\n\tconst struct bpf_iter_seq_info *seq_info;\n};\n\nstruct bpf_iter_meta {\n\tunion {\n\t\tstruct seq_file *seq;\n\t};\n\tu64 session_id;\n\tu64 seq_num;\n};\n\nstruct bpf_iter_target_info {\n\tstruct list_head list;\n\tconst struct bpf_iter_reg *reg_info;\n\tu32 btf_id;\n};\n\nstruct bpf_iter_link {\n\tstruct bpf_link link;\n\tstruct bpf_iter_aux_info aux;\n\tstruct bpf_iter_target_info *tinfo;\n};\n\nstruct bpf_iter_priv_data {\n\tstruct bpf_iter_target_info *tinfo;\n\tconst struct bpf_iter_seq_info *seq_info;\n\tstruct bpf_prog *prog;\n\tu64 session_id;\n\tu64 seq_num;\n\tbool done_stop;\n\tlong: 56;\n\tu8 target_private[0];\n};\n\nstruct bpf_iter_seq_map_info {\n\tu32 map_id;\n};\n\nstruct bpf_iter__bpf_map {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct bpf_map *map;\n\t};\n};\n\nstruct bpf_iter_seq_task_common {\n\tstruct pid_namespace *ns;\n};\n\nstruct bpf_iter_seq_task_info {\n\tstruct bpf_iter_seq_task_common common;\n\tu32 tid;\n};\n\nstruct bpf_iter__task {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct task_struct *task;\n\t};\n};\n\nstruct bpf_iter_seq_task_file_info {\n\tstruct bpf_iter_seq_task_common common;\n\tstruct task_struct *task;\n\tu32 tid;\n\tu32 fd;\n};\n\nstruct bpf_iter__task_file {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct task_struct *task;\n\t};\n\tu32 fd;\n\tunion {\n\t\tstruct file *file;\n\t};\n};\n\nstruct bpf_iter_seq_prog_info {\n\tu32 prog_id;\n};\n\nstruct bpf_iter__bpf_prog {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct bpf_prog *prog;\n\t};\n};\n\nstruct bpf_iter__bpf_map_elem {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct bpf_map *map;\n\t};\n\tunion {\n\t\tvoid *key;\n\t};\n\tunion {\n\t\tvoid *value;\n\t};\n};\n\nstruct pcpu_freelist_node;\n\nstruct pcpu_freelist_head {\n\tstruct pcpu_freelist_node *first;\n\traw_spinlock_t lock;\n};\n\nstruct pcpu_freelist_node {\n\tstruct pcpu_freelist_node *next;\n};\n\nstruct pcpu_freelist {\n\tstruct pcpu_freelist_head *freelist;\n\tstruct pcpu_freelist_head extralist;\n};\n\nstruct bpf_lru_node {\n\tstruct list_head list;\n\tu16 cpu;\n\tu8 type;\n\tu8 ref;\n};\n\nstruct bpf_lru_list {\n\tstruct list_head lists[3];\n\tunsigned int counts[2];\n\tstruct list_head *next_inactive_rotation;\n\traw_spinlock_t lock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct bpf_lru_locallist {\n\tstruct list_head lists[2];\n\tu16 next_steal;\n\traw_spinlock_t lock;\n};\n\nstruct bpf_common_lru {\n\tstruct bpf_lru_list lru_list;\n\tstruct bpf_lru_locallist *local_list;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\ntypedef bool (*del_from_htab_func)(void *, struct bpf_lru_node *);\n\nstruct bpf_lru {\n\tunion {\n\t\tstruct bpf_common_lru common_lru;\n\t\tstruct bpf_lru_list *percpu_lru;\n\t};\n\tdel_from_htab_func del_from_htab;\n\tvoid *del_arg;\n\tunsigned int hash_offset;\n\tunsigned int nr_scans;\n\tbool percpu;\n\tlong: 56;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct bucket {\n\tstruct hlist_nulls_head head;\n\tunion {\n\t\traw_spinlock_t raw_lock;\n\t\tspinlock_t lock;\n\t};\n};\n\nstruct htab_elem;\n\nstruct bpf_htab {\n\tstruct bpf_map map;\n\tstruct bucket *buckets;\n\tvoid *elems;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tunion {\n\t\tstruct pcpu_freelist freelist;\n\t\tstruct bpf_lru lru;\n\t};\n\tstruct htab_elem **extra_elems;\n\tatomic_t count;\n\tu32 n_buckets;\n\tu32 elem_size;\n\tu32 hashrnd;\n\tstruct lock_class_key lockdep_key;\n\tint *map_locked[8];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct htab_elem {\n\tunion {\n\t\tstruct hlist_nulls_node hash_node;\n\t\tstruct {\n\t\t\tvoid *padding;\n\t\t\tunion {\n\t\t\t\tstruct bpf_htab *htab;\n\t\t\t\tstruct pcpu_freelist_node fnode;\n\t\t\t\tstruct htab_elem *batch_flink;\n\t\t\t};\n\t\t};\n\t};\n\tunion {\n\t\tstruct callback_head rcu;\n\t\tstruct bpf_lru_node lru_node;\n\t};\n\tu32 hash;\n\tint: 32;\n\tchar key[0];\n};\n\nstruct bpf_iter_seq_hash_map_info {\n\tstruct bpf_map *map;\n\tstruct bpf_htab *htab;\n\tvoid *percpu_value_buf;\n\tu32 bucket_id;\n\tu32 skip_elems;\n};\n\nstruct bpf_iter_seq_array_map_info {\n\tstruct bpf_map *map;\n\tvoid *percpu_value_buf;\n\tu32 index;\n};\n\nstruct prog_poke_elem {\n\tstruct list_head list;\n\tstruct bpf_prog_aux *aux;\n};\n\nenum bpf_lru_list_type {\n\tBPF_LRU_LIST_T_ACTIVE = 0,\n\tBPF_LRU_LIST_T_INACTIVE = 1,\n\tBPF_LRU_LIST_T_FREE = 2,\n\tBPF_LRU_LOCAL_LIST_T_FREE = 3,\n\tBPF_LRU_LOCAL_LIST_T_PENDING = 4,\n};\n\nstruct bpf_lpm_trie_key {\n\t__u32 prefixlen;\n\t__u8 data[0];\n};\n\nstruct lpm_trie_node {\n\tstruct callback_head rcu;\n\tstruct lpm_trie_node *child[2];\n\tu32 prefixlen;\n\tu32 flags;\n\tu8 data[0];\n};\n\nstruct lpm_trie {\n\tstruct bpf_map map;\n\tstruct lpm_trie_node *root;\n\tsize_t n_entries;\n\tsize_t max_prefixlen;\n\tsize_t data_size;\n\tspinlock_t lock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct bpf_cgroup_storage_map {\n\tstruct bpf_map map;\n\tspinlock_t lock;\n\tstruct rb_root root;\n\tstruct list_head list;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct bpf_queue_stack {\n\tstruct bpf_map map;\n\traw_spinlock_t lock;\n\tu32 head;\n\tu32 tail;\n\tu32 size;\n\tchar elements[0];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum {\n\tBPF_RB_NO_WAKEUP = 1,\n\tBPF_RB_FORCE_WAKEUP = 2,\n};\n\nenum {\n\tBPF_RB_AVAIL_DATA = 0,\n\tBPF_RB_RING_SIZE = 1,\n\tBPF_RB_CONS_POS = 2,\n\tBPF_RB_PROD_POS = 3,\n};\n\nenum {\n\tBPF_RINGBUF_BUSY_BIT = 2147483648,\n\tBPF_RINGBUF_DISCARD_BIT = 1073741824,\n\tBPF_RINGBUF_HDR_SZ = 8,\n};\n\nstruct bpf_ringbuf {\n\twait_queue_head_t waitq;\n\tstruct irq_work work;\n\tu64 mask;\n\tstruct page **pages;\n\tint nr_pages;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tspinlock_t spinlock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong unsigned int consumer_pos;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong unsigned int producer_pos;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tchar data[0];\n};\n\nstruct bpf_ringbuf_map {\n\tstruct bpf_map map;\n\tstruct bpf_ringbuf *rb;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct bpf_ringbuf_hdr {\n\tu32 len;\n\tu32 pg_off;\n};\n\ntypedef u64 (*btf_bpf_ringbuf_reserve)(struct bpf_map *, u64, u64);\n\ntypedef u64 (*btf_bpf_ringbuf_submit)(void *, u64);\n\ntypedef u64 (*btf_bpf_ringbuf_discard)(void *, u64);\n\ntypedef u64 (*btf_bpf_ringbuf_output)(struct bpf_map *, void *, u64, u64);\n\ntypedef u64 (*btf_bpf_ringbuf_query)(struct bpf_map *, u64);\n\nenum {\n\tBPF_LOCAL_STORAGE_GET_F_CREATE = 1,\n\tBPF_SK_STORAGE_GET_F_CREATE = 1,\n};\n\nstruct bpf_local_storage_elem {\n\tstruct hlist_node map_node;\n\tstruct hlist_node snode;\n\tstruct bpf_local_storage *local_storage;\n\tstruct callback_head rcu;\n\tlong: 64;\n\tstruct bpf_local_storage_data sdata;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct bpf_local_storage_cache {\n\tspinlock_t idx_lock;\n\tu64 idx_usage_counts[16];\n};\n\nstruct lsm_blob_sizes {\n\tint lbs_cred;\n\tint lbs_file;\n\tint lbs_inode;\n\tint lbs_ipc;\n\tint lbs_msg_msg;\n\tint lbs_task;\n};\n\nstruct bpf_storage_blob {\n\tstruct bpf_local_storage *storage;\n};\n\ntypedef u64 (*btf_bpf_inode_storage_get)(struct bpf_map *, struct inode *, void *, u64);\n\ntypedef u64 (*btf_bpf_inode_storage_delete)(struct bpf_map *, struct inode *);\n\ntypedef u64 (*btf_bpf_task_storage_get)(struct bpf_map *, struct task_struct *, void *, u64);\n\ntypedef u64 (*btf_bpf_task_storage_delete)(struct bpf_map *, struct task_struct *);\n\nstruct btf_enum {\n\t__u32 name_off;\n\t__s32 val;\n};\n\nstruct btf_array {\n\t__u32 type;\n\t__u32 index_type;\n\t__u32 nelems;\n};\n\nstruct btf_param {\n\t__u32 name_off;\n\t__u32 type;\n};\n\nenum {\n\tBTF_VAR_STATIC = 0,\n\tBTF_VAR_GLOBAL_ALLOCATED = 1,\n\tBTF_VAR_GLOBAL_EXTERN = 2,\n};\n\nstruct btf_var {\n\t__u32 linkage;\n};\n\nstruct bpf_flow_keys {\n\t__u16 nhoff;\n\t__u16 thoff;\n\t__u16 addr_proto;\n\t__u8 is_frag;\n\t__u8 is_first_frag;\n\t__u8 is_encap;\n\t__u8 ip_proto;\n\t__be16 n_proto;\n\t__be16 sport;\n\t__be16 dport;\n\tunion {\n\t\tstruct {\n\t\t\t__be32 ipv4_src;\n\t\t\t__be32 ipv4_dst;\n\t\t};\n\t\tstruct {\n\t\t\t__u32 ipv6_src[4];\n\t\t\t__u32 ipv6_dst[4];\n\t\t};\n\t};\n\t__u32 flags;\n\t__be32 flow_label;\n};\n\nstruct bpf_sock {\n\t__u32 bound_dev_if;\n\t__u32 family;\n\t__u32 type;\n\t__u32 protocol;\n\t__u32 mark;\n\t__u32 priority;\n\t__u32 src_ip4;\n\t__u32 src_ip6[4];\n\t__u32 src_port;\n\t__u32 dst_port;\n\t__u32 dst_ip4;\n\t__u32 dst_ip6[4];\n\t__u32 state;\n\t__s32 rx_queue_mapping;\n};\n\nstruct __sk_buff {\n\t__u32 len;\n\t__u32 pkt_type;\n\t__u32 mark;\n\t__u32 queue_mapping;\n\t__u32 protocol;\n\t__u32 vlan_present;\n\t__u32 vlan_tci;\n\t__u32 vlan_proto;\n\t__u32 priority;\n\t__u32 ingress_ifindex;\n\t__u32 ifindex;\n\t__u32 tc_index;\n\t__u32 cb[5];\n\t__u32 hash;\n\t__u32 tc_classid;\n\t__u32 data;\n\t__u32 data_end;\n\t__u32 napi_id;\n\t__u32 family;\n\t__u32 remote_ip4;\n\t__u32 local_ip4;\n\t__u32 remote_ip6[4];\n\t__u32 local_ip6[4];\n\t__u32 remote_port;\n\t__u32 local_port;\n\t__u32 data_meta;\n\tunion {\n\t\tstruct bpf_flow_keys *flow_keys;\n\t};\n\t__u64 tstamp;\n\t__u32 wire_len;\n\t__u32 gso_segs;\n\tunion {\n\t\tstruct bpf_sock *sk;\n\t};\n\t__u32 gso_size;\n};\n\nstruct xdp_md {\n\t__u32 data;\n\t__u32 data_end;\n\t__u32 data_meta;\n\t__u32 ingress_ifindex;\n\t__u32 rx_queue_index;\n\t__u32 egress_ifindex;\n};\n\nstruct sk_msg_md {\n\tunion {\n\t\tvoid *data;\n\t};\n\tunion {\n\t\tvoid *data_end;\n\t};\n\t__u32 family;\n\t__u32 remote_ip4;\n\t__u32 local_ip4;\n\t__u32 remote_ip6[4];\n\t__u32 local_ip6[4];\n\t__u32 remote_port;\n\t__u32 local_port;\n\t__u32 size;\n\tunion {\n\t\tstruct bpf_sock *sk;\n\t};\n};\n\nstruct sk_reuseport_md {\n\tunion {\n\t\tvoid *data;\n\t};\n\tunion {\n\t\tvoid *data_end;\n\t};\n\t__u32 len;\n\t__u32 eth_protocol;\n\t__u32 ip_protocol;\n\t__u32 bind_inany;\n\t__u32 hash;\n};\n\nstruct bpf_sock_addr {\n\t__u32 user_family;\n\t__u32 user_ip4;\n\t__u32 user_ip6[4];\n\t__u32 user_port;\n\t__u32 family;\n\t__u32 type;\n\t__u32 protocol;\n\t__u32 msg_src_ip4;\n\t__u32 msg_src_ip6[4];\n\tunion {\n\t\tstruct bpf_sock *sk;\n\t};\n};\n\nstruct bpf_sock_ops {\n\t__u32 op;\n\tunion {\n\t\t__u32 args[4];\n\t\t__u32 reply;\n\t\t__u32 replylong[4];\n\t};\n\t__u32 family;\n\t__u32 remote_ip4;\n\t__u32 local_ip4;\n\t__u32 remote_ip6[4];\n\t__u32 local_ip6[4];\n\t__u32 remote_port;\n\t__u32 local_port;\n\t__u32 is_fullsock;\n\t__u32 snd_cwnd;\n\t__u32 srtt_us;\n\t__u32 bpf_sock_ops_cb_flags;\n\t__u32 state;\n\t__u32 rtt_min;\n\t__u32 snd_ssthresh;\n\t__u32 rcv_nxt;\n\t__u32 snd_nxt;\n\t__u32 snd_una;\n\t__u32 mss_cache;\n\t__u32 ecn_flags;\n\t__u32 rate_delivered;\n\t__u32 rate_interval_us;\n\t__u32 packets_out;\n\t__u32 retrans_out;\n\t__u32 total_retrans;\n\t__u32 segs_in;\n\t__u32 data_segs_in;\n\t__u32 segs_out;\n\t__u32 data_segs_out;\n\t__u32 lost_out;\n\t__u32 sacked_out;\n\t__u32 sk_txhash;\n\t__u64 bytes_received;\n\t__u64 bytes_acked;\n\tunion {\n\t\tstruct bpf_sock *sk;\n\t};\n\tunion {\n\t\tvoid *skb_data;\n\t};\n\tunion {\n\t\tvoid *skb_data_end;\n\t};\n\t__u32 skb_len;\n\t__u32 skb_tcp_flags;\n};\n\nstruct bpf_cgroup_dev_ctx {\n\t__u32 access_type;\n\t__u32 major;\n\t__u32 minor;\n};\n\nstruct bpf_sysctl {\n\t__u32 write;\n\t__u32 file_pos;\n};\n\nstruct bpf_sockopt {\n\tunion {\n\t\tstruct bpf_sock *sk;\n\t};\n\tunion {\n\t\tvoid *optval;\n\t};\n\tunion {\n\t\tvoid *optval_end;\n\t};\n\t__s32 level;\n\t__s32 optname;\n\t__s32 optlen;\n\t__s32 retval;\n};\n\nstruct bpf_sk_lookup {\n\tunion {\n\t\tstruct bpf_sock *sk;\n\t};\n\t__u32 family;\n\t__u32 protocol;\n\t__u32 remote_ip4;\n\t__u32 remote_ip6[4];\n\t__u32 remote_port;\n\t__u32 local_ip4;\n\t__u32 local_ip6[4];\n\t__u32 local_port;\n};\n\nstruct sk_reuseport_kern {\n\tstruct sk_buff *skb;\n\tstruct sock *sk;\n\tstruct sock *selected_sk;\n\tvoid *data_end;\n\tu32 hash;\n\tu32 reuseport_id;\n\tbool bind_inany;\n};\n\nstruct bpf_flow_dissector {\n\tstruct bpf_flow_keys *flow_keys;\n\tconst struct sk_buff *skb;\n\tvoid *data;\n\tvoid *data_end;\n};\n\nstruct inet_listen_hashbucket {\n\tspinlock_t lock;\n\tunsigned int count;\n\tunion {\n\t\tstruct hlist_head head;\n\t\tstruct hlist_nulls_head nulls_head;\n\t};\n};\n\nstruct inet_ehash_bucket;\n\nstruct inet_bind_hashbucket;\n\nstruct inet_hashinfo {\n\tstruct inet_ehash_bucket *ehash;\n\tspinlock_t *ehash_locks;\n\tunsigned int ehash_mask;\n\tunsigned int ehash_locks_mask;\n\tstruct kmem_cache *bind_bucket_cachep;\n\tstruct inet_bind_hashbucket *bhash;\n\tunsigned int bhash_size;\n\tunsigned int lhash2_mask;\n\tstruct inet_listen_hashbucket *lhash2;\n\tlong: 64;\n\tstruct inet_listen_hashbucket listening_hash[32];\n};\n\nstruct ip_ra_chain {\n\tstruct ip_ra_chain *next;\n\tstruct sock *sk;\n\tunion {\n\t\tvoid (*destructor)(struct sock *);\n\t\tstruct sock *saved_sk;\n\t};\n\tstruct callback_head rcu;\n};\n\nstruct fib_table {\n\tstruct hlist_node tb_hlist;\n\tu32 tb_id;\n\tint tb_num_default;\n\tstruct callback_head rcu;\n\tlong unsigned int *tb_data;\n\tlong unsigned int __data[0];\n};\n\nstruct inet_peer_base {\n\tstruct rb_root rb_root;\n\tseqlock_t lock;\n\tint total;\n};\n\nstruct tcp_fastopen_context {\n\tsiphash_key_t key[2];\n\tint num;\n\tstruct callback_head rcu;\n};\n\nstruct xdp_txq_info {\n\tstruct net_device *dev;\n};\n\nstruct xdp_buff {\n\tvoid *data;\n\tvoid *data_end;\n\tvoid *data_meta;\n\tvoid *data_hard_start;\n\tstruct xdp_rxq_info *rxq;\n\tstruct xdp_txq_info *txq;\n\tu32 frame_sz;\n};\n\nstruct bpf_sock_addr_kern {\n\tstruct sock *sk;\n\tstruct sockaddr *uaddr;\n\tu64 tmp_reg;\n\tvoid *t_ctx;\n};\n\nstruct bpf_sock_ops_kern {\n\tstruct sock *sk;\n\tunion {\n\t\tu32 args[4];\n\t\tu32 reply;\n\t\tu32 replylong[4];\n\t};\n\tstruct sk_buff *syn_skb;\n\tstruct sk_buff *skb;\n\tvoid *skb_data_end;\n\tu8 op;\n\tu8 is_fullsock;\n\tu8 remaining_opt_len;\n\tu64 temp;\n};\n\nstruct bpf_sysctl_kern {\n\tstruct ctl_table_header *head;\n\tstruct ctl_table *table;\n\tvoid *cur_val;\n\tsize_t cur_len;\n\tvoid *new_val;\n\tsize_t new_len;\n\tint new_updated;\n\tint write;\n\tloff_t *ppos;\n\tu64 tmp_reg;\n};\n\nstruct bpf_sockopt_kern {\n\tstruct sock *sk;\n\tu8 *optval;\n\tu8 *optval_end;\n\ts32 level;\n\ts32 optname;\n\ts32 optlen;\n\ts32 retval;\n};\n\nstruct bpf_sk_lookup_kern {\n\tu16 family;\n\tu16 protocol;\n\t__be16 sport;\n\tu16 dport;\n\tstruct {\n\t\t__be32 saddr;\n\t\t__be32 daddr;\n\t} v4;\n\tstruct {\n\t\tconst struct in6_addr *saddr;\n\t\tconst struct in6_addr *daddr;\n\t} v6;\n\tstruct sock *selected_sk;\n\tbool no_reuseport;\n};\n\nstruct sock_reuseport {\n\tstruct callback_head rcu;\n\tu16 max_socks;\n\tu16 num_socks;\n\tunsigned int synq_overflow_ts;\n\tunsigned int reuseport_id;\n\tunsigned int bind_inany: 1;\n\tunsigned int has_conns: 1;\n\tstruct bpf_prog *prog;\n\tstruct sock *socks[0];\n};\n\nstruct inet_ehash_bucket {\n\tstruct hlist_nulls_head chain;\n};\n\nstruct inet_bind_hashbucket {\n\tspinlock_t lock;\n\tstruct hlist_head chain;\n};\n\nstruct ack_sample {\n\tu32 pkts_acked;\n\ts32 rtt_us;\n\tu32 in_flight;\n};\n\nstruct rate_sample {\n\tu64 prior_mstamp;\n\tu32 prior_delivered;\n\ts32 delivered;\n\tlong int interval_us;\n\tu32 snd_interval_us;\n\tu32 rcv_interval_us;\n\tlong int rtt_us;\n\tint losses;\n\tu32 acked_sacked;\n\tu32 prior_in_flight;\n\tbool is_app_limited;\n\tbool is_retrans;\n\tbool is_ack_delayed;\n};\n\nstruct sk_msg_sg {\n\tu32 start;\n\tu32 curr;\n\tu32 end;\n\tu32 size;\n\tu32 copybreak;\n\tlong unsigned int copy;\n\tstruct scatterlist data[19];\n};\n\nstruct sk_msg {\n\tstruct sk_msg_sg sg;\n\tvoid *data;\n\tvoid *data_end;\n\tu32 apply_bytes;\n\tu32 cork_bytes;\n\tu32 flags;\n\tstruct sk_buff *skb;\n\tstruct sock *sk_redir;\n\tstruct sock *sk;\n\tstruct list_head list;\n};\n\nenum verifier_phase {\n\tCHECK_META = 0,\n\tCHECK_TYPE = 1,\n};\n\nstruct resolve_vertex {\n\tconst struct btf_type *t;\n\tu32 type_id;\n\tu16 next_member;\n};\n\nenum visit_state {\n\tNOT_VISITED = 0,\n\tVISITED = 1,\n\tRESOLVED = 2,\n};\n\nenum resolve_mode {\n\tRESOLVE_TBD = 0,\n\tRESOLVE_PTR = 1,\n\tRESOLVE_STRUCT_OR_ARRAY = 2,\n};\n\nstruct btf_sec_info {\n\tu32 off;\n\tu32 len;\n};\n\nstruct btf_verifier_env {\n\tstruct btf *btf;\n\tu8 *visit_states;\n\tstruct resolve_vertex stack[32];\n\tstruct bpf_verifier_log log;\n\tu32 log_type_id;\n\tu32 top_stack;\n\tenum verifier_phase phase;\n\tenum resolve_mode resolve_mode;\n};\n\nstruct btf_show {\n\tu64 flags;\n\tvoid *target;\n\tvoid (*showfn)(struct btf_show *, const char *, struct __va_list_tag *);\n\tconst struct btf *btf;\n\tstruct {\n\t\tu8 depth;\n\t\tu8 depth_to_show;\n\t\tu8 depth_check;\n\t\tu8 array_member: 1;\n\t\tu8 array_terminated: 1;\n\t\tu16 array_encoding;\n\t\tu32 type_id;\n\t\tint status;\n\t\tconst struct btf_type *type;\n\t\tconst struct btf_member *member;\n\t\tchar name[80];\n\t} state;\n\tstruct {\n\t\tu32 size;\n\t\tvoid *head;\n\t\tvoid *data;\n\t\tu8 safe[32];\n\t} obj;\n};\n\nstruct btf_kind_operations {\n\ts32 (*check_meta)(struct btf_verifier_env *, const struct btf_type *, u32);\n\tint (*resolve)(struct btf_verifier_env *, const struct resolve_vertex *);\n\tint (*check_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);\n\tint (*check_kflag_member)(struct btf_verifier_env *, const struct btf_type *, const struct btf_member *, const struct btf_type *);\n\tvoid (*log_details)(struct btf_verifier_env *, const struct btf_type *);\n\tvoid (*show)(const struct btf *, const struct btf_type *, u32, void *, u8, struct btf_show *);\n};\n\nstruct bpf_ctx_convert {\n\tstruct __sk_buff BPF_PROG_TYPE_SOCKET_FILTER_prog;\n\tstruct sk_buff BPF_PROG_TYPE_SOCKET_FILTER_kern;\n\tstruct __sk_buff BPF_PROG_TYPE_SCHED_CLS_prog;\n\tstruct sk_buff BPF_PROG_TYPE_SCHED_CLS_kern;\n\tstruct __sk_buff BPF_PROG_TYPE_SCHED_ACT_prog;\n\tstruct sk_buff BPF_PROG_TYPE_SCHED_ACT_kern;\n\tstruct xdp_md BPF_PROG_TYPE_XDP_prog;\n\tstruct xdp_buff BPF_PROG_TYPE_XDP_kern;\n\tstruct __sk_buff BPF_PROG_TYPE_CGROUP_SKB_prog;\n\tstruct sk_buff BPF_PROG_TYPE_CGROUP_SKB_kern;\n\tstruct bpf_sock BPF_PROG_TYPE_CGROUP_SOCK_prog;\n\tstruct sock BPF_PROG_TYPE_CGROUP_SOCK_kern;\n\tstruct bpf_sock_addr BPF_PROG_TYPE_CGROUP_SOCK_ADDR_prog;\n\tstruct bpf_sock_addr_kern BPF_PROG_TYPE_CGROUP_SOCK_ADDR_kern;\n\tstruct __sk_buff BPF_PROG_TYPE_LWT_IN_prog;\n\tstruct sk_buff BPF_PROG_TYPE_LWT_IN_kern;\n\tstruct __sk_buff BPF_PROG_TYPE_LWT_OUT_prog;\n\tstruct sk_buff BPF_PROG_TYPE_LWT_OUT_kern;\n\tstruct __sk_buff BPF_PROG_TYPE_LWT_XMIT_prog;\n\tstruct sk_buff BPF_PROG_TYPE_LWT_XMIT_kern;\n\tstruct __sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_prog;\n\tstruct sk_buff BPF_PROG_TYPE_LWT_SEG6LOCAL_kern;\n\tstruct bpf_sock_ops BPF_PROG_TYPE_SOCK_OPS_prog;\n\tstruct bpf_sock_ops_kern BPF_PROG_TYPE_SOCK_OPS_kern;\n\tstruct __sk_buff BPF_PROG_TYPE_SK_SKB_prog;\n\tstruct sk_buff BPF_PROG_TYPE_SK_SKB_kern;\n\tstruct sk_msg_md BPF_PROG_TYPE_SK_MSG_prog;\n\tstruct sk_msg BPF_PROG_TYPE_SK_MSG_kern;\n\tstruct __sk_buff BPF_PROG_TYPE_FLOW_DISSECTOR_prog;\n\tstruct bpf_flow_dissector BPF_PROG_TYPE_FLOW_DISSECTOR_kern;\n\tbpf_user_pt_regs_t BPF_PROG_TYPE_KPROBE_prog;\n\tstruct pt_regs BPF_PROG_TYPE_KPROBE_kern;\n\t__u64 BPF_PROG_TYPE_TRACEPOINT_prog;\n\tu64 BPF_PROG_TYPE_TRACEPOINT_kern;\n\tstruct bpf_perf_event_data BPF_PROG_TYPE_PERF_EVENT_prog;\n\tstruct bpf_perf_event_data_kern BPF_PROG_TYPE_PERF_EVENT_kern;\n\tstruct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_prog;\n\tu64 BPF_PROG_TYPE_RAW_TRACEPOINT_kern;\n\tstruct bpf_raw_tracepoint_args BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_prog;\n\tu64 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE_kern;\n\tvoid *BPF_PROG_TYPE_TRACING_prog;\n\tvoid *BPF_PROG_TYPE_TRACING_kern;\n\tstruct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_prog;\n\tstruct bpf_cgroup_dev_ctx BPF_PROG_TYPE_CGROUP_DEVICE_kern;\n\tstruct bpf_sysctl BPF_PROG_TYPE_CGROUP_SYSCTL_prog;\n\tstruct bpf_sysctl_kern BPF_PROG_TYPE_CGROUP_SYSCTL_kern;\n\tstruct bpf_sockopt BPF_PROG_TYPE_CGROUP_SOCKOPT_prog;\n\tstruct bpf_sockopt_kern BPF_PROG_TYPE_CGROUP_SOCKOPT_kern;\n\t__u32 BPF_PROG_TYPE_LIRC_MODE2_prog;\n\tu32 BPF_PROG_TYPE_LIRC_MODE2_kern;\n\tstruct sk_reuseport_md BPF_PROG_TYPE_SK_REUSEPORT_prog;\n\tstruct sk_reuseport_kern BPF_PROG_TYPE_SK_REUSEPORT_kern;\n\tstruct bpf_sk_lookup BPF_PROG_TYPE_SK_LOOKUP_prog;\n\tstruct bpf_sk_lookup_kern BPF_PROG_TYPE_SK_LOOKUP_kern;\n\tvoid *BPF_PROG_TYPE_STRUCT_OPS_prog;\n\tvoid *BPF_PROG_TYPE_STRUCT_OPS_kern;\n\tvoid *BPF_PROG_TYPE_EXT_prog;\n\tvoid *BPF_PROG_TYPE_EXT_kern;\n\tvoid *BPF_PROG_TYPE_LSM_prog;\n\tvoid *BPF_PROG_TYPE_LSM_kern;\n};\n\nenum {\n\t__ctx_convertBPF_PROG_TYPE_SOCKET_FILTER = 0,\n\t__ctx_convertBPF_PROG_TYPE_SCHED_CLS = 1,\n\t__ctx_convertBPF_PROG_TYPE_SCHED_ACT = 2,\n\t__ctx_convertBPF_PROG_TYPE_XDP = 3,\n\t__ctx_convertBPF_PROG_TYPE_CGROUP_SKB = 4,\n\t__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK = 5,\n\t__ctx_convertBPF_PROG_TYPE_CGROUP_SOCK_ADDR = 6,\n\t__ctx_convertBPF_PROG_TYPE_LWT_IN = 7,\n\t__ctx_convertBPF_PROG_TYPE_LWT_OUT = 8,\n\t__ctx_convertBPF_PROG_TYPE_LWT_XMIT = 9,\n\t__ctx_convertBPF_PROG_TYPE_LWT_SEG6LOCAL = 10,\n\t__ctx_convertBPF_PROG_TYPE_SOCK_OPS = 11,\n\t__ctx_convertBPF_PROG_TYPE_SK_SKB = 12,\n\t__ctx_convertBPF_PROG_TYPE_SK_MSG = 13,\n\t__ctx_convertBPF_PROG_TYPE_FLOW_DISSECTOR = 14,\n\t__ctx_convertBPF_PROG_TYPE_KPROBE = 15,\n\t__ctx_convertBPF_PROG_TYPE_TRACEPOINT = 16,\n\t__ctx_convertBPF_PROG_TYPE_PERF_EVENT = 17,\n\t__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT = 18,\n\t__ctx_convertBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE = 19,\n\t__ctx_convertBPF_PROG_TYPE_TRACING = 20,\n\t__ctx_convertBPF_PROG_TYPE_CGROUP_DEVICE = 21,\n\t__ctx_convertBPF_PROG_TYPE_CGROUP_SYSCTL = 22,\n\t__ctx_convertBPF_PROG_TYPE_CGROUP_SOCKOPT = 23,\n\t__ctx_convertBPF_PROG_TYPE_LIRC_MODE2 = 24,\n\t__ctx_convertBPF_PROG_TYPE_SK_REUSEPORT = 25,\n\t__ctx_convertBPF_PROG_TYPE_SK_LOOKUP = 26,\n\t__ctx_convertBPF_PROG_TYPE_STRUCT_OPS = 27,\n\t__ctx_convertBPF_PROG_TYPE_EXT = 28,\n\t__ctx_convertBPF_PROG_TYPE_LSM = 29,\n\t__ctx_convert_unused = 30,\n};\n\nenum bpf_struct_walk_result {\n\tWALK_SCALAR = 0,\n\tWALK_PTR = 1,\n\tWALK_STRUCT = 2,\n};\n\nstruct btf_show_snprintf {\n\tstruct btf_show show;\n\tint len_left;\n\tint len;\n};\n\nstruct btf_module {\n\tstruct list_head list;\n\tstruct module *module;\n\tstruct btf *btf;\n\tstruct bin_attribute *sysfs_attr;\n};\n\nstruct bpf_dispatcher_prog {\n\tstruct bpf_prog *prog;\n\trefcount_t users;\n};\n\nstruct bpf_dispatcher {\n\tstruct mutex mutex;\n\tvoid *func;\n\tstruct bpf_dispatcher_prog progs[48];\n\tint num_progs;\n\tvoid *image;\n\tu32 image_off;\n\tstruct bpf_ksym ksym;\n};\n\nstruct bpf_devmap_val {\n\t__u32 ifindex;\n\tunion {\n\t\tint fd;\n\t\t__u32 id;\n\t} bpf_prog;\n};\n\nenum net_device_flags {\n\tIFF_UP = 1,\n\tIFF_BROADCAST = 2,\n\tIFF_DEBUG = 4,\n\tIFF_LOOPBACK = 8,\n\tIFF_POINTOPOINT = 16,\n\tIFF_NOTRAILERS = 32,\n\tIFF_RUNNING = 64,\n\tIFF_NOARP = 128,\n\tIFF_PROMISC = 256,\n\tIFF_ALLMULTI = 512,\n\tIFF_MASTER = 1024,\n\tIFF_SLAVE = 2048,\n\tIFF_MULTICAST = 4096,\n\tIFF_PORTSEL = 8192,\n\tIFF_AUTOMEDIA = 16384,\n\tIFF_DYNAMIC = 32768,\n\tIFF_LOWER_UP = 65536,\n\tIFF_DORMANT = 131072,\n\tIFF_ECHO = 262144,\n};\n\nstruct xdp_dev_bulk_queue {\n\tstruct xdp_frame *q[16];\n\tstruct list_head flush_node;\n\tstruct net_device *dev;\n\tstruct net_device *dev_rx;\n\tunsigned int count;\n};\n\nenum netdev_cmd {\n\tNETDEV_UP = 1,\n\tNETDEV_DOWN = 2,\n\tNETDEV_REBOOT = 3,\n\tNETDEV_CHANGE = 4,\n\tNETDEV_REGISTER = 5,\n\tNETDEV_UNREGISTER = 6,\n\tNETDEV_CHANGEMTU = 7,\n\tNETDEV_CHANGEADDR = 8,\n\tNETDEV_PRE_CHANGEADDR = 9,\n\tNETDEV_GOING_DOWN = 10,\n\tNETDEV_CHANGENAME = 11,\n\tNETDEV_FEAT_CHANGE = 12,\n\tNETDEV_BONDING_FAILOVER = 13,\n\tNETDEV_PRE_UP = 14,\n\tNETDEV_PRE_TYPE_CHANGE = 15,\n\tNETDEV_POST_TYPE_CHANGE = 16,\n\tNETDEV_POST_INIT = 17,\n\tNETDEV_RELEASE = 18,\n\tNETDEV_NOTIFY_PEERS = 19,\n\tNETDEV_JOIN = 20,\n\tNETDEV_CHANGEUPPER = 21,\n\tNETDEV_RESEND_IGMP = 22,\n\tNETDEV_PRECHANGEMTU = 23,\n\tNETDEV_CHANGEINFODATA = 24,\n\tNETDEV_BONDING_INFO = 25,\n\tNETDEV_PRECHANGEUPPER = 26,\n\tNETDEV_CHANGELOWERSTATE = 27,\n\tNETDEV_UDP_TUNNEL_PUSH_INFO = 28,\n\tNETDEV_UDP_TUNNEL_DROP_INFO = 29,\n\tNETDEV_CHANGE_TX_QUEUE_LEN = 30,\n\tNETDEV_CVLAN_FILTER_PUSH_INFO = 31,\n\tNETDEV_CVLAN_FILTER_DROP_INFO = 32,\n\tNETDEV_SVLAN_FILTER_PUSH_INFO = 33,\n\tNETDEV_SVLAN_FILTER_DROP_INFO = 34,\n};\n\nstruct netdev_notifier_info {\n\tstruct net_device *dev;\n\tstruct netlink_ext_ack *extack;\n};\n\nstruct bpf_dtab;\n\nstruct bpf_dtab_netdev {\n\tstruct net_device *dev;\n\tstruct hlist_node index_hlist;\n\tstruct bpf_dtab *dtab;\n\tstruct bpf_prog *xdp_prog;\n\tstruct callback_head rcu;\n\tunsigned int idx;\n\tstruct bpf_devmap_val val;\n};\n\nstruct bpf_dtab {\n\tstruct bpf_map map;\n\tstruct bpf_dtab_netdev **netdev_map;\n\tstruct list_head list;\n\tstruct hlist_head *dev_index_head;\n\tspinlock_t index_lock;\n\tunsigned int items;\n\tu32 n_buckets;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct bpf_cpumap_val {\n\t__u32 qsize;\n\tunion {\n\t\tint fd;\n\t\t__u32 id;\n\t} bpf_prog;\n};\n\ntypedef struct bio_vec skb_frag_t;\n\nstruct skb_shared_hwtstamps {\n\tktime_t hwtstamp;\n};\n\nstruct skb_shared_info {\n\t__u8 __unused;\n\t__u8 meta_len;\n\t__u8 nr_frags;\n\t__u8 tx_flags;\n\tshort unsigned int gso_size;\n\tshort unsigned int gso_segs;\n\tstruct sk_buff *frag_list;\n\tstruct skb_shared_hwtstamps hwtstamps;\n\tunsigned int gso_type;\n\tu32 tskey;\n\tatomic_t dataref;\n\tvoid *destructor_arg;\n\tskb_frag_t frags[17];\n};\n\nstruct bpf_nh_params {\n\tu32 nh_family;\n\tunion {\n\t\tu32 ipv4_nh;\n\t\tstruct in6_addr ipv6_nh;\n\t};\n};\n\nstruct bpf_redirect_info {\n\tu32 flags;\n\tu32 tgt_index;\n\tvoid *tgt_value;\n\tstruct bpf_map *map;\n\tu32 kern_flags;\n\tstruct bpf_nh_params nh;\n};\n\nstruct ptr_ring {\n\tint producer;\n\tspinlock_t producer_lock;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tint consumer_head;\n\tint consumer_tail;\n\tspinlock_t consumer_lock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tint size;\n\tint batch;\n\tvoid **queue;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct bpf_cpu_map_entry;\n\nstruct xdp_bulk_queue {\n\tvoid *q[8];\n\tstruct list_head flush_node;\n\tstruct bpf_cpu_map_entry *obj;\n\tunsigned int count;\n};\n\nstruct bpf_cpu_map;\n\nstruct bpf_cpu_map_entry {\n\tu32 cpu;\n\tint map_id;\n\tstruct xdp_bulk_queue *bulkq;\n\tstruct bpf_cpu_map *cmap;\n\tstruct ptr_ring *queue;\n\tstruct task_struct *kthread;\n\tstruct bpf_cpumap_val value;\n\tstruct bpf_prog *prog;\n\tatomic_t refcnt;\n\tstruct callback_head rcu;\n\tstruct work_struct kthread_stop_wq;\n};\n\nstruct bpf_cpu_map {\n\tstruct bpf_map map;\n\tstruct bpf_cpu_map_entry **cpu_map;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct rhlist_head {\n\tstruct rhash_head rhead;\n\tstruct rhlist_head *next;\n};\n\nstruct bpf_prog_offload_ops {\n\tint (*insn_hook)(struct bpf_verifier_env *, int, int);\n\tint (*finalize)(struct bpf_verifier_env *);\n\tint (*replace_insn)(struct bpf_verifier_env *, u32, struct bpf_insn *);\n\tint (*remove_insns)(struct bpf_verifier_env *, u32, u32);\n\tint (*prepare)(struct bpf_prog *);\n\tint (*translate)(struct bpf_prog *);\n\tvoid (*destroy)(struct bpf_prog *);\n};\n\nstruct bpf_offload_dev {\n\tconst struct bpf_prog_offload_ops *ops;\n\tstruct list_head netdevs;\n\tvoid *priv;\n};\n\ntypedef struct ns_common *ns_get_path_helper_t(void *);\n\nstruct bpf_offload_netdev {\n\tstruct rhash_head l;\n\tstruct net_device *netdev;\n\tstruct bpf_offload_dev *offdev;\n\tstruct list_head progs;\n\tstruct list_head maps;\n\tstruct list_head offdev_netdevs;\n};\n\nstruct ns_get_path_bpf_prog_args {\n\tstruct bpf_prog *prog;\n\tstruct bpf_prog_info *info;\n};\n\nstruct ns_get_path_bpf_map_args {\n\tstruct bpf_offloaded_map *offmap;\n\tstruct bpf_map_info *info;\n};\n\nstruct bpf_netns_link {\n\tstruct bpf_link link;\n\tenum bpf_attach_type type;\n\tenum netns_bpf_attach_type netns_type;\n\tstruct net *net;\n\tstruct list_head node;\n};\n\nenum bpf_stack_build_id_status {\n\tBPF_STACK_BUILD_ID_EMPTY = 0,\n\tBPF_STACK_BUILD_ID_VALID = 1,\n\tBPF_STACK_BUILD_ID_IP = 2,\n};\n\nstruct bpf_stack_build_id {\n\t__s32 status;\n\tunsigned char build_id[20];\n\tunion {\n\t\t__u64 offset;\n\t\t__u64 ip;\n\t};\n};\n\nenum {\n\tBPF_F_SKIP_FIELD_MASK = 255,\n\tBPF_F_USER_STACK = 256,\n\tBPF_F_FAST_STACK_CMP = 512,\n\tBPF_F_REUSE_STACKID = 1024,\n\tBPF_F_USER_BUILD_ID = 2048,\n};\n\ntypedef __u32 Elf32_Addr;\n\ntypedef __u16 Elf32_Half;\n\ntypedef __u32 Elf32_Off;\n\nstruct elf32_hdr {\n\tunsigned char e_ident[16];\n\tElf32_Half e_type;\n\tElf32_Half e_machine;\n\tElf32_Word e_version;\n\tElf32_Addr e_entry;\n\tElf32_Off e_phoff;\n\tElf32_Off e_shoff;\n\tElf32_Word e_flags;\n\tElf32_Half e_ehsize;\n\tElf32_Half e_phentsize;\n\tElf32_Half e_phnum;\n\tElf32_Half e_shentsize;\n\tElf32_Half e_shnum;\n\tElf32_Half e_shstrndx;\n};\n\ntypedef struct elf32_hdr Elf32_Ehdr;\n\nstruct elf32_phdr {\n\tElf32_Word p_type;\n\tElf32_Off p_offset;\n\tElf32_Addr p_vaddr;\n\tElf32_Addr p_paddr;\n\tElf32_Word p_filesz;\n\tElf32_Word p_memsz;\n\tElf32_Word p_flags;\n\tElf32_Word p_align;\n};\n\ntypedef struct elf32_phdr Elf32_Phdr;\n\ntypedef struct elf32_note Elf32_Nhdr;\n\nenum perf_callchain_context {\n\tPERF_CONTEXT_HV = 4294967264,\n\tPERF_CONTEXT_KERNEL = 4294967168,\n\tPERF_CONTEXT_USER = 4294966784,\n\tPERF_CONTEXT_GUEST = 4294965248,\n\tPERF_CONTEXT_GUEST_KERNEL = 4294965120,\n\tPERF_CONTEXT_GUEST_USER = 4294964736,\n\tPERF_CONTEXT_MAX = 4294963201,\n};\n\nstruct stack_map_bucket {\n\tstruct pcpu_freelist_node fnode;\n\tu32 hash;\n\tu32 nr;\n\tu64 data[0];\n};\n\nstruct bpf_stack_map {\n\tstruct bpf_map map;\n\tvoid *elems;\n\tstruct pcpu_freelist freelist;\n\tu32 n_buckets;\n\tstruct stack_map_bucket *buckets[0];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct stack_map_irq_work {\n\tstruct irq_work irq_work;\n\tstruct mm_struct *mm;\n};\n\ntypedef u64 (*btf_bpf_get_stackid)(struct pt_regs *, struct bpf_map *, u64);\n\ntypedef u64 (*btf_bpf_get_stackid_pe)(struct bpf_perf_event_data_kern *, struct bpf_map *, u64);\n\ntypedef u64 (*btf_bpf_get_stack)(struct pt_regs *, void *, u32, u64);\n\ntypedef u64 (*btf_bpf_get_task_stack)(struct task_struct *, void *, u32, u64);\n\ntypedef u64 (*btf_bpf_get_stack_pe)(struct bpf_perf_event_data_kern *, void *, u32, u64);\n\nenum {\n\tBPF_F_SYSCTL_BASE_NAME = 1,\n};\n\nstruct bpf_prog_list {\n\tstruct list_head node;\n\tstruct bpf_prog *prog;\n\tstruct bpf_cgroup_link *link;\n\tstruct bpf_cgroup_storage *storage[2];\n};\n\nstruct qdisc_skb_cb {\n\tstruct {\n\t\tunsigned int pkt_len;\n\t\tu16 slave_dev_queue_mapping;\n\t\tu16 tc_classid;\n\t};\n\tunsigned char data[20];\n\tu16 mru;\n};\n\nstruct bpf_skb_data_end {\n\tstruct qdisc_skb_cb qdisc_cb;\n\tvoid *data_meta;\n\tvoid *data_end;\n};\n\nenum {\n\tTCPF_ESTABLISHED = 2,\n\tTCPF_SYN_SENT = 4,\n\tTCPF_SYN_RECV = 8,\n\tTCPF_FIN_WAIT1 = 16,\n\tTCPF_FIN_WAIT2 = 32,\n\tTCPF_TIME_WAIT = 64,\n\tTCPF_CLOSE = 128,\n\tTCPF_CLOSE_WAIT = 256,\n\tTCPF_LAST_ACK = 512,\n\tTCPF_LISTEN = 1024,\n\tTCPF_CLOSING = 2048,\n\tTCPF_NEW_SYN_RECV = 4096,\n};\n\ntypedef u64 (*btf_bpf_sysctl_get_name)(struct bpf_sysctl_kern *, char *, size_t, u64);\n\ntypedef u64 (*btf_bpf_sysctl_get_current_value)(struct bpf_sysctl_kern *, char *, size_t);\n\ntypedef u64 (*btf_bpf_sysctl_get_new_value)(struct bpf_sysctl_kern *, char *, size_t);\n\ntypedef u64 (*btf_bpf_sysctl_set_new_value)(struct bpf_sysctl_kern *, const char *, size_t);\n\nenum sock_type {\n\tSOCK_STREAM = 1,\n\tSOCK_DGRAM = 2,\n\tSOCK_RAW = 3,\n\tSOCK_RDM = 4,\n\tSOCK_SEQPACKET = 5,\n\tSOCK_DCCP = 6,\n\tSOCK_PACKET = 10,\n};\n\nenum {\n\tIPPROTO_IP = 0,\n\tIPPROTO_ICMP = 1,\n\tIPPROTO_IGMP = 2,\n\tIPPROTO_IPIP = 4,\n\tIPPROTO_TCP = 6,\n\tIPPROTO_EGP = 8,\n\tIPPROTO_PUP = 12,\n\tIPPROTO_UDP = 17,\n\tIPPROTO_IDP = 22,\n\tIPPROTO_TP = 29,\n\tIPPROTO_DCCP = 33,\n\tIPPROTO_IPV6 = 41,\n\tIPPROTO_RSVP = 46,\n\tIPPROTO_GRE = 47,\n\tIPPROTO_ESP = 50,\n\tIPPROTO_AH = 51,\n\tIPPROTO_MTP = 92,\n\tIPPROTO_BEETPH = 94,\n\tIPPROTO_ENCAP = 98,\n\tIPPROTO_PIM = 103,\n\tIPPROTO_COMP = 108,\n\tIPPROTO_SCTP = 132,\n\tIPPROTO_UDPLITE = 136,\n\tIPPROTO_MPLS = 137,\n\tIPPROTO_ETHERNET = 143,\n\tIPPROTO_RAW = 255,\n\tIPPROTO_MPTCP = 262,\n\tIPPROTO_MAX = 263,\n};\n\nenum sock_flags {\n\tSOCK_DEAD = 0,\n\tSOCK_DONE = 1,\n\tSOCK_URGINLINE = 2,\n\tSOCK_KEEPOPEN = 3,\n\tSOCK_LINGER = 4,\n\tSOCK_DESTROY = 5,\n\tSOCK_BROADCAST = 6,\n\tSOCK_TIMESTAMP = 7,\n\tSOCK_ZAPPED = 8,\n\tSOCK_USE_WRITE_QUEUE = 9,\n\tSOCK_DBG = 10,\n\tSOCK_RCVTSTAMP = 11,\n\tSOCK_RCVTSTAMPNS = 12,\n\tSOCK_LOCALROUTE = 13,\n\tSOCK_MEMALLOC = 14,\n\tSOCK_TIMESTAMPING_RX_SOFTWARE = 15,\n\tSOCK_FASYNC = 16,\n\tSOCK_RXQ_OVFL = 17,\n\tSOCK_ZEROCOPY = 18,\n\tSOCK_WIFI_STATUS = 19,\n\tSOCK_NOFCS = 20,\n\tSOCK_FILTER_LOCKED = 21,\n\tSOCK_SELECT_ERR_QUEUE = 22,\n\tSOCK_RCU_FREE = 23,\n\tSOCK_TXTIME = 24,\n\tSOCK_XDP = 25,\n\tSOCK_TSTAMP_NEW = 26,\n};\n\nstruct reuseport_array {\n\tstruct bpf_map map;\n\tstruct sock *ptrs[0];\n};\n\nenum bpf_struct_ops_state {\n\tBPF_STRUCT_OPS_STATE_INIT = 0,\n\tBPF_STRUCT_OPS_STATE_INUSE = 1,\n\tBPF_STRUCT_OPS_STATE_TOBEFREE = 2,\n};\n\nstruct bpf_struct_ops_value {\n\trefcount_t refcnt;\n\tenum bpf_struct_ops_state state;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tchar data[0];\n};\n\nstruct bpf_struct_ops_map {\n\tstruct bpf_map map;\n\tconst struct bpf_struct_ops *st_ops;\n\tstruct mutex lock;\n\tstruct bpf_prog **progs;\n\tvoid *image;\n\tstruct bpf_struct_ops_value *uvalue;\n\tstruct bpf_struct_ops_value kvalue;\n};\n\nstruct bpf_struct_ops_tcp_congestion_ops {\n\trefcount_t refcnt;\n\tenum bpf_struct_ops_state state;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct tcp_congestion_ops data;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct sembuf {\n\tshort unsigned int sem_num;\n\tshort int sem_op;\n\tshort int sem_flg;\n};\n\nenum key_need_perm {\n\tKEY_NEED_UNSPECIFIED = 0,\n\tKEY_NEED_VIEW = 1,\n\tKEY_NEED_READ = 2,\n\tKEY_NEED_WRITE = 3,\n\tKEY_NEED_SEARCH = 4,\n\tKEY_NEED_LINK = 5,\n\tKEY_NEED_SETATTR = 6,\n\tKEY_NEED_UNLINK = 7,\n\tKEY_SYSADMIN_OVERRIDE = 8,\n\tKEY_AUTHTOKEN_OVERRIDE = 9,\n\tKEY_DEFER_PERM_CHECK = 10,\n};\n\nstruct __key_reference_with_attributes;\n\ntypedef struct __key_reference_with_attributes *key_ref_t;\n\nstruct xfrm_sec_ctx {\n\t__u8 ctx_doi;\n\t__u8 ctx_alg;\n\t__u16 ctx_len;\n\t__u32 ctx_sid;\n\tchar ctx_str[0];\n};\n\nstruct xfrm_user_sec_ctx {\n\t__u16 len;\n\t__u16 exttype;\n\t__u8 ctx_alg;\n\t__u8 ctx_doi;\n\t__u16 ctx_len;\n};\n\nenum {\n\tBPF_F_BPRM_SECUREEXEC = 1,\n};\n\nstruct watch_notification;\n\ntypedef u64 (*btf_bpf_bprm_opts_set)(struct linux_binprm *, u64);\n\ntypedef u64 (*btf_bpf_ima_inode_hash)(struct inode *, void *, u32);\n\nstruct static_call_tramp_key {\n\ts32 tramp;\n\ts32 key;\n};\n\nenum perf_event_read_format {\n\tPERF_FORMAT_TOTAL_TIME_ENABLED = 1,\n\tPERF_FORMAT_TOTAL_TIME_RUNNING = 2,\n\tPERF_FORMAT_ID = 4,\n\tPERF_FORMAT_GROUP = 8,\n\tPERF_FORMAT_MAX = 16,\n};\n\nenum perf_event_ioc_flags {\n\tPERF_IOC_FLAG_GROUP = 1,\n};\n\nstruct perf_ns_link_info {\n\t__u64 dev;\n\t__u64 ino;\n};\n\nenum {\n\tNET_NS_INDEX = 0,\n\tUTS_NS_INDEX = 1,\n\tIPC_NS_INDEX = 2,\n\tPID_NS_INDEX = 3,\n\tUSER_NS_INDEX = 4,\n\tMNT_NS_INDEX = 5,\n\tCGROUP_NS_INDEX = 6,\n\tNR_NAMESPACES = 7,\n};\n\nenum perf_event_type {\n\tPERF_RECORD_MMAP = 1,\n\tPERF_RECORD_LOST = 2,\n\tPERF_RECORD_COMM = 3,\n\tPERF_RECORD_EXIT = 4,\n\tPERF_RECORD_THROTTLE = 5,\n\tPERF_RECORD_UNTHROTTLE = 6,\n\tPERF_RECORD_FORK = 7,\n\tPERF_RECORD_READ = 8,\n\tPERF_RECORD_SAMPLE = 9,\n\tPERF_RECORD_MMAP2 = 10,\n\tPERF_RECORD_AUX = 11,\n\tPERF_RECORD_ITRACE_START = 12,\n\tPERF_RECORD_LOST_SAMPLES = 13,\n\tPERF_RECORD_SWITCH = 14,\n\tPERF_RECORD_SWITCH_CPU_WIDE = 15,\n\tPERF_RECORD_NAMESPACES = 16,\n\tPERF_RECORD_KSYMBOL = 17,\n\tPERF_RECORD_BPF_EVENT = 18,\n\tPERF_RECORD_CGROUP = 19,\n\tPERF_RECORD_TEXT_POKE = 20,\n\tPERF_RECORD_MAX = 21,\n};\n\nstruct swevent_hlist {\n\tstruct hlist_head heads[256];\n\tstruct callback_head callback_head;\n};\n\nstruct pmu_event_list {\n\traw_spinlock_t lock;\n\tstruct list_head list;\n};\n\nstruct perf_buffer {\n\trefcount_t refcount;\n\tstruct callback_head callback_head;\n\tint nr_pages;\n\tint overwrite;\n\tint paused;\n\tatomic_t poll;\n\tlocal_t head;\n\tunsigned int nest;\n\tlocal_t events;\n\tlocal_t wakeup;\n\tlocal_t lost;\n\tlong int watermark;\n\tlong int aux_watermark;\n\tspinlock_t event_lock;\n\tstruct list_head event_list;\n\tatomic_t mmap_count;\n\tlong unsigned int mmap_locked;\n\tstruct user_struct *mmap_user;\n\tlong int aux_head;\n\tunsigned int aux_nest;\n\tlong int aux_wakeup;\n\tlong unsigned int aux_pgoff;\n\tint aux_nr_pages;\n\tint aux_overwrite;\n\tatomic_t aux_mmap_count;\n\tlong unsigned int aux_mmap_locked;\n\tvoid (*free_aux)(void *);\n\trefcount_t aux_refcount;\n\tint aux_in_sampling;\n\tvoid **aux_pages;\n\tvoid *aux_priv;\n\tstruct perf_event_mmap_page *user_page;\n\tvoid *data_pages[0];\n};\n\nstruct match_token {\n\tint token;\n\tconst char *pattern;\n};\n\nenum {\n\tMAX_OPT_ARGS = 3,\n};\n\ntypedef struct {\n\tchar *from;\n\tchar *to;\n} substring_t;\n\nstruct min_heap {\n\tvoid *data;\n\tint nr;\n\tint size;\n};\n\nstruct min_heap_callbacks {\n\tint elem_size;\n\tbool (*less)(const void *, const void *);\n\tvoid (*swp)(void *, void *);\n};\n\ntypedef int (*remote_function_f)(void *);\n\nstruct remote_function_call {\n\tstruct task_struct *p;\n\tremote_function_f func;\n\tvoid *info;\n\tint ret;\n};\n\ntypedef void (*event_f)(struct perf_event *, struct perf_cpu_context *, struct perf_event_context *, void *);\n\nstruct event_function_struct {\n\tstruct perf_event *event;\n\tevent_f func;\n\tvoid *data;\n};\n\nenum event_type_t {\n\tEVENT_FLEXIBLE = 1,\n\tEVENT_PINNED = 2,\n\tEVENT_TIME = 4,\n\tEVENT_CPU = 8,\n\tEVENT_ALL = 3,\n};\n\nstruct stop_event_data {\n\tstruct perf_event *event;\n\tunsigned int restart;\n};\n\nstruct perf_read_data {\n\tstruct perf_event *event;\n\tbool group;\n\tint ret;\n};\n\nstruct perf_read_event {\n\tstruct perf_event_header header;\n\tu32 pid;\n\tu32 tid;\n};\n\ntypedef void perf_iterate_f(struct perf_event *, void *);\n\nstruct remote_output {\n\tstruct perf_buffer *rb;\n\tint err;\n};\n\nstruct perf_task_event {\n\tstruct task_struct *task;\n\tstruct perf_event_context *task_ctx;\n\tstruct {\n\t\tstruct perf_event_header header;\n\t\tu32 pid;\n\t\tu32 ppid;\n\t\tu32 tid;\n\t\tu32 ptid;\n\t\tu64 time;\n\t} event_id;\n};\n\nstruct perf_comm_event {\n\tstruct task_struct *task;\n\tchar *comm;\n\tint comm_size;\n\tstruct {\n\t\tstruct perf_event_header header;\n\t\tu32 pid;\n\t\tu32 tid;\n\t} event_id;\n};\n\nstruct perf_namespaces_event {\n\tstruct task_struct *task;\n\tstruct {\n\t\tstruct perf_event_header header;\n\t\tu32 pid;\n\t\tu32 tid;\n\t\tu64 nr_namespaces;\n\t\tstruct perf_ns_link_info link_info[7];\n\t} event_id;\n};\n\nstruct perf_cgroup_event {\n\tchar *path;\n\tint path_size;\n\tstruct {\n\t\tstruct perf_event_header header;\n\t\tu64 id;\n\t\tchar path[0];\n\t} event_id;\n};\n\nstruct perf_mmap_event {\n\tstruct vm_area_struct *vma;\n\tconst char *file_name;\n\tint file_size;\n\tint maj;\n\tint min;\n\tu64 ino;\n\tu64 ino_generation;\n\tu32 prot;\n\tu32 flags;\n\tstruct {\n\t\tstruct perf_event_header header;\n\t\tu32 pid;\n\t\tu32 tid;\n\t\tu64 start;\n\t\tu64 len;\n\t\tu64 pgoff;\n\t} event_id;\n};\n\nstruct perf_switch_event {\n\tstruct task_struct *task;\n\tstruct task_struct *next_prev;\n\tstruct {\n\t\tstruct perf_event_header header;\n\t\tu32 next_prev_pid;\n\t\tu32 next_prev_tid;\n\t} event_id;\n};\n\nstruct perf_ksymbol_event {\n\tconst char *name;\n\tint name_len;\n\tstruct {\n\t\tstruct perf_event_header header;\n\t\tu64 addr;\n\t\tu32 len;\n\t\tu16 ksym_type;\n\t\tu16 flags;\n\t} event_id;\n};\n\nstruct perf_bpf_event {\n\tstruct bpf_prog *prog;\n\tstruct {\n\t\tstruct perf_event_header header;\n\t\tu16 type;\n\t\tu16 flags;\n\t\tu32 id;\n\t\tu8 tag[8];\n\t} event_id;\n};\n\nstruct perf_text_poke_event {\n\tconst void *old_bytes;\n\tconst void *new_bytes;\n\tsize_t pad;\n\tu16 old_len;\n\tu16 new_len;\n\tstruct {\n\t\tstruct perf_event_header header;\n\t\tu64 addr;\n\t} event_id;\n};\n\nstruct swevent_htable {\n\tstruct swevent_hlist *swevent_hlist;\n\tstruct mutex hlist_mutex;\n\tint hlist_refcount;\n\tint recursion[4];\n};\n\nenum perf_probe_config {\n\tPERF_PROBE_CONFIG_IS_RETPROBE = 1,\n\tPERF_UPROBE_REF_CTR_OFFSET_BITS = 32,\n\tPERF_UPROBE_REF_CTR_OFFSET_SHIFT = 32,\n};\n\nenum {\n\tIF_ACT_NONE = 4294967295,\n\tIF_ACT_FILTER = 0,\n\tIF_ACT_START = 1,\n\tIF_ACT_STOP = 2,\n\tIF_SRC_FILE = 3,\n\tIF_SRC_KERNEL = 4,\n\tIF_SRC_FILEADDR = 5,\n\tIF_SRC_KERNELADDR = 6,\n};\n\nenum {\n\tIF_STATE_ACTION = 0,\n\tIF_STATE_SOURCE = 1,\n\tIF_STATE_END = 2,\n};\n\nstruct perf_aux_event {\n\tstruct perf_event_header header;\n\tu32 pid;\n\tu32 tid;\n};\n\nstruct perf_aux_event___2 {\n\tstruct perf_event_header header;\n\tu64 offset;\n\tu64 size;\n\tu64 flags;\n};\n\nstruct callchain_cpus_entries {\n\tstruct callback_head callback_head;\n\tstruct perf_callchain_entry *cpu_entries[0];\n};\n\nenum bp_type_idx {\n\tTYPE_INST = 0,\n\tTYPE_DATA = 0,\n\tTYPE_MAX = 1,\n};\n\nstruct bp_cpuinfo {\n\tunsigned int cpu_pinned;\n\tunsigned int *tsk_pinned;\n\tunsigned int flexible;\n};\n\nstruct bp_busy_slots {\n\tunsigned int pinned;\n\tunsigned int flexible;\n};\n\ntypedef u8 uprobe_opcode_t;\n\nstruct uprobe {\n\tstruct rb_node rb_node;\n\trefcount_t ref;\n\tstruct rw_semaphore register_rwsem;\n\tstruct rw_semaphore consumer_rwsem;\n\tstruct list_head pending_list;\n\tstruct uprobe_consumer *consumers;\n\tstruct inode *inode;\n\tloff_t offset;\n\tloff_t ref_ctr_offset;\n\tlong unsigned int flags;\n\tstruct arch_uprobe arch;\n};\n\nstruct xol_area {\n\twait_queue_head_t wq;\n\tatomic_t slot_count;\n\tlong unsigned int *bitmap;\n\tstruct vm_special_mapping xol_mapping;\n\tstruct page *pages[2];\n\tlong unsigned int vaddr;\n};\n\nstruct compact_control;\n\nstruct capture_control {\n\tstruct compact_control *cc;\n\tstruct page *page;\n};\n\ntypedef int filler_t(void *, struct page *);\n\nstruct page_vma_mapped_walk {\n\tstruct page *page;\n\tstruct vm_area_struct *vma;\n\tlong unsigned int address;\n\tpmd_t *pmd;\n\tpte_t *pte;\n\tspinlock_t *ptl;\n\tunsigned int flags;\n};\n\nstruct compact_control {\n\tstruct list_head freepages;\n\tstruct list_head migratepages;\n\tunsigned int nr_freepages;\n\tunsigned int nr_migratepages;\n\tlong unsigned int free_pfn;\n\tlong unsigned int migrate_pfn;\n\tlong unsigned int fast_start_pfn;\n\tstruct zone *zone;\n\tlong unsigned int total_migrate_scanned;\n\tlong unsigned int total_free_scanned;\n\tshort unsigned int fast_search_fail;\n\tshort int search_order;\n\tconst gfp_t gfp_mask;\n\tint order;\n\tint migratetype;\n\tconst unsigned int alloc_flags;\n\tconst int highest_zoneidx;\n\tenum migrate_mode mode;\n\tbool ignore_skip_hint;\n\tbool no_set_skip_hint;\n\tbool ignore_block_suitable;\n\tbool direct_compaction;\n\tbool proactive_compaction;\n\tbool whole_zone;\n\tbool contended;\n\tbool rescan;\n\tbool alloc_contig;\n};\n\nstruct delayed_uprobe {\n\tstruct list_head list;\n\tstruct uprobe *uprobe;\n\tstruct mm_struct *mm;\n};\n\nstruct map_info {\n\tstruct map_info *next;\n\tstruct mm_struct *mm;\n\tlong unsigned int vaddr;\n};\n\nstruct user_return_notifier {\n\tvoid (*on_user_return)(struct user_return_notifier *);\n\tstruct hlist_node link;\n};\n\nstruct parallel_data;\n\nstruct padata_priv {\n\tstruct list_head list;\n\tstruct parallel_data *pd;\n\tint cb_cpu;\n\tunsigned int seq_nr;\n\tint info;\n\tvoid (*parallel)(struct padata_priv *);\n\tvoid (*serial)(struct padata_priv *);\n};\n\nstruct padata_cpumask {\n\tcpumask_var_t pcpu;\n\tcpumask_var_t cbcpu;\n};\n\nstruct padata_shell;\n\nstruct padata_list;\n\nstruct padata_serial_queue;\n\nstruct parallel_data {\n\tstruct padata_shell *ps;\n\tstruct padata_list *reorder_list;\n\tstruct padata_serial_queue *squeue;\n\tatomic_t refcnt;\n\tunsigned int seq_nr;\n\tunsigned int processed;\n\tint cpu;\n\tstruct padata_cpumask cpumask;\n\tstruct work_struct reorder_work;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tspinlock_t lock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct padata_list {\n\tstruct list_head list;\n\tspinlock_t lock;\n};\n\nstruct padata_serial_queue {\n\tstruct padata_list serial;\n\tstruct work_struct work;\n\tstruct parallel_data *pd;\n};\n\nstruct padata_instance;\n\nstruct padata_shell {\n\tstruct padata_instance *pinst;\n\tstruct parallel_data *pd;\n\tstruct parallel_data *opd;\n\tstruct list_head list;\n};\n\nstruct padata_instance {\n\tstruct hlist_node cpu_online_node;\n\tstruct hlist_node cpu_dead_node;\n\tstruct workqueue_struct *parallel_wq;\n\tstruct workqueue_struct *serial_wq;\n\tstruct list_head pslist;\n\tstruct padata_cpumask cpumask;\n\tstruct kobject kobj;\n\tstruct mutex lock;\n\tu8 flags;\n};\n\nstruct padata_mt_job {\n\tvoid (*thread_fn)(long unsigned int, long unsigned int, void *);\n\tvoid *fn_arg;\n\tlong unsigned int start;\n\tlong unsigned int size;\n\tlong unsigned int align;\n\tlong unsigned int min_chunk;\n\tint max_threads;\n};\n\nstruct padata_work {\n\tstruct work_struct pw_work;\n\tstruct list_head pw_list;\n\tvoid *pw_data;\n};\n\nstruct padata_mt_job_state {\n\tspinlock_t lock;\n\tstruct completion completion;\n\tstruct padata_mt_job *job;\n\tint nworks;\n\tint nworks_fini;\n\tlong unsigned int chunk_size;\n};\n\nstruct padata_sysfs_entry {\n\tstruct attribute attr;\n\tssize_t (*show)(struct padata_instance *, struct attribute *, char *);\n\tssize_t (*store)(struct padata_instance *, struct attribute *, const char *, size_t);\n};\n\nstruct static_key_mod {\n\tstruct static_key_mod *next;\n\tstruct jump_entry *entries;\n\tstruct module *mod;\n};\n\nstruct static_key_deferred {\n\tstruct static_key key;\n\tlong unsigned int timeout;\n\tstruct delayed_work work;\n};\n\nstruct trace_event_raw_context_tracking_user {\n\tstruct trace_entry ent;\n\tint dummy;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_context_tracking_user {};\n\ntypedef void (*btf_trace_user_enter)(void *, int);\n\ntypedef void (*btf_trace_user_exit)(void *, int);\n\nenum rseq_cpu_id_state {\n\tRSEQ_CPU_ID_UNINITIALIZED = 4294967295,\n\tRSEQ_CPU_ID_REGISTRATION_FAILED = 4294967294,\n};\n\nenum rseq_flags {\n\tRSEQ_FLAG_UNREGISTER = 1,\n};\n\nenum rseq_cs_flags {\n\tRSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT = 1,\n\tRSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL = 2,\n\tRSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE = 4,\n};\n\nstruct rseq_cs {\n\t__u32 version;\n\t__u32 flags;\n\t__u64 start_ip;\n\t__u64 post_commit_offset;\n\t__u64 abort_ip;\n};\n\nstruct trace_event_raw_rseq_update {\n\tstruct trace_entry ent;\n\ts32 cpu_id;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_rseq_ip_fixup {\n\tstruct trace_entry ent;\n\tlong unsigned int regs_ip;\n\tlong unsigned int start_ip;\n\tlong unsigned int post_commit_offset;\n\tlong unsigned int abort_ip;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_rseq_update {};\n\nstruct trace_event_data_offsets_rseq_ip_fixup {};\n\ntypedef void (*btf_trace_rseq_update)(void *, struct task_struct *);\n\ntypedef void (*btf_trace_rseq_ip_fixup)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);\n\nstruct watch;\n\nstruct watch_list {\n\tstruct callback_head rcu;\n\tstruct hlist_head watchers;\n\tvoid (*release_watch)(struct watch *);\n\tspinlock_t lock;\n};\n\nenum watch_notification_type {\n\tWATCH_TYPE_META = 0,\n\tWATCH_TYPE_KEY_NOTIFY = 1,\n\tWATCH_TYPE__NR = 2,\n};\n\nenum watch_meta_notification_subtype {\n\tWATCH_META_REMOVAL_NOTIFICATION = 0,\n\tWATCH_META_LOSS_NOTIFICATION = 1,\n};\n\nstruct watch_notification___2 {\n\t__u32 type: 24;\n\t__u32 subtype: 8;\n\t__u32 info;\n};\n\nstruct watch_notification_type_filter {\n\t__u32 type;\n\t__u32 info_filter;\n\t__u32 info_mask;\n\t__u32 subtype_filter[8];\n};\n\nstruct watch_notification_filter {\n\t__u32 nr_filters;\n\t__u32 __reserved;\n\tstruct watch_notification_type_filter filters[0];\n};\n\nstruct watch_notification_removal {\n\tstruct watch_notification___2 watch;\n\t__u64 id;\n};\n\nstruct watch_type_filter {\n\tenum watch_notification_type type;\n\t__u32 subtype_filter[1];\n\t__u32 info_filter;\n\t__u32 info_mask;\n};\n\nstruct watch_filter {\n\tunion {\n\t\tstruct callback_head rcu;\n\t\tlong unsigned int type_filter[2];\n\t};\n\tu32 nr_filters;\n\tstruct watch_type_filter filters[0];\n};\n\nstruct watch_queue {\n\tstruct callback_head rcu;\n\tstruct watch_filter *filter;\n\tstruct pipe_inode_info *pipe;\n\tstruct hlist_head watches;\n\tstruct page **notes;\n\tlong unsigned int *notes_bitmap;\n\tstruct kref usage;\n\tspinlock_t lock;\n\tunsigned int nr_notes;\n\tunsigned int nr_pages;\n\tbool defunct;\n};\n\nstruct watch {\n\tunion {\n\t\tstruct callback_head rcu;\n\t\tu32 info_id;\n\t};\n\tstruct watch_queue *queue;\n\tstruct hlist_node queue_node;\n\tstruct watch_list *watch_list;\n\tstruct hlist_node list_node;\n\tconst struct cred *cred;\n\tvoid *private;\n\tu64 id;\n\tstruct kref usage;\n};\n\nstruct pkcs7_message;\n\ntypedef int __kernel_rwf_t;\n\nenum positive_aop_returns {\n\tAOP_WRITEPAGE_ACTIVATE = 524288,\n\tAOP_TRUNCATED_PAGE = 524289,\n};\n\nstruct vm_event_state {\n\tlong unsigned int event[96];\n};\n\nenum mapping_flags {\n\tAS_EIO = 0,\n\tAS_ENOSPC = 1,\n\tAS_MM_ALL_LOCKS = 2,\n\tAS_UNEVICTABLE = 3,\n\tAS_EXITING = 4,\n\tAS_NO_WRITEBACK_TAGS = 5,\n\tAS_THP_SUPPORT = 6,\n};\n\nstruct wait_page_key {\n\tstruct page *page;\n\tint bit_nr;\n\tint page_match;\n};\n\nenum iter_type {\n\tITER_IOVEC = 4,\n\tITER_KVEC = 8,\n\tITER_BVEC = 16,\n\tITER_PIPE = 32,\n\tITER_DISCARD = 64,\n};\n\nstruct pagevec {\n\tunsigned char nr;\n\tbool percpu_pvec_drained;\n\tstruct page *pages[15];\n};\n\nstruct fid {\n\tunion {\n\t\tstruct {\n\t\t\tu32 ino;\n\t\t\tu32 gen;\n\t\t\tu32 parent_ino;\n\t\t\tu32 parent_gen;\n\t\t} i32;\n\t\tstruct {\n\t\t\tu32 block;\n\t\t\tu16 partref;\n\t\t\tu16 parent_partref;\n\t\t\tu32 generation;\n\t\t\tu32 parent_block;\n\t\t\tu32 parent_generation;\n\t\t} udf;\n\t\t__u32 raw[0];\n\t};\n};\n\nstruct trace_event_raw_mm_filemap_op_page_cache {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tlong unsigned int i_ino;\n\tlong unsigned int index;\n\tdev_t s_dev;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_filemap_set_wb_err {\n\tstruct trace_entry ent;\n\tlong unsigned int i_ino;\n\tdev_t s_dev;\n\terrseq_t errseq;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_file_check_and_advance_wb_err {\n\tstruct trace_entry ent;\n\tstruct file *file;\n\tlong unsigned int i_ino;\n\tdev_t s_dev;\n\terrseq_t old;\n\terrseq_t new;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mm_filemap_op_page_cache {};\n\nstruct trace_event_data_offsets_filemap_set_wb_err {};\n\nstruct trace_event_data_offsets_file_check_and_advance_wb_err {};\n\ntypedef void (*btf_trace_mm_filemap_delete_from_page_cache)(void *, struct page *);\n\ntypedef void (*btf_trace_mm_filemap_add_to_page_cache)(void *, struct page *);\n\ntypedef void (*btf_trace_filemap_set_wb_err)(void *, struct address_space *, errseq_t);\n\ntypedef void (*btf_trace_file_check_and_advance_wb_err)(void *, struct file *, errseq_t);\n\nenum behavior {\n\tEXCLUSIVE = 0,\n\tSHARED = 1,\n\tDROP = 2,\n};\n\nstruct reciprocal_value {\n\tu32 m;\n\tu8 sh1;\n\tu8 sh2;\n};\n\nstruct kmem_cache_order_objects {\n\tunsigned int x;\n};\n\nstruct kmem_cache_cpu;\n\nstruct kmem_cache_node;\n\nstruct kmem_cache {\n\tstruct kmem_cache_cpu *cpu_slab;\n\tslab_flags_t flags;\n\tlong unsigned int min_partial;\n\tunsigned int size;\n\tunsigned int object_size;\n\tstruct reciprocal_value reciprocal_size;\n\tunsigned int offset;\n\tunsigned int cpu_partial;\n\tstruct kmem_cache_order_objects oo;\n\tstruct kmem_cache_order_objects max;\n\tstruct kmem_cache_order_objects min;\n\tgfp_t allocflags;\n\tint refcount;\n\tvoid (*ctor)(void *);\n\tunsigned int inuse;\n\tunsigned int align;\n\tunsigned int red_left_pad;\n\tconst char *name;\n\tstruct list_head list;\n\tstruct kobject kobj;\n\tlong unsigned int random;\n\tunsigned int remote_node_defrag_ratio;\n\tunsigned int *random_seq;\n\tunsigned int useroffset;\n\tunsigned int usersize;\n\tstruct kmem_cache_node *node[1024];\n};\n\nstruct kmem_cache_cpu {\n\tvoid **freelist;\n\tlong unsigned int tid;\n\tstruct page *page;\n\tstruct page *partial;\n};\n\nstruct kmem_cache_node {\n\tspinlock_t list_lock;\n\tlong unsigned int nr_partial;\n\tstruct list_head partial;\n\tatomic_long_t nr_slabs;\n\tatomic_long_t total_objects;\n\tstruct list_head full;\n};\n\nstruct zap_details {\n\tstruct address_space *check_mapping;\n\tlong unsigned int first_index;\n\tlong unsigned int last_index;\n};\n\nenum oom_constraint {\n\tCONSTRAINT_NONE = 0,\n\tCONSTRAINT_CPUSET = 1,\n\tCONSTRAINT_MEMORY_POLICY = 2,\n\tCONSTRAINT_MEMCG = 3,\n};\n\nstruct oom_control {\n\tstruct zonelist *zonelist;\n\tnodemask_t *nodemask;\n\tstruct mem_cgroup *memcg;\n\tconst gfp_t gfp_mask;\n\tconst int order;\n\tlong unsigned int totalpages;\n\tstruct task_struct *chosen;\n\tlong int chosen_points;\n\tenum oom_constraint constraint;\n};\n\nenum compact_priority {\n\tCOMPACT_PRIO_SYNC_FULL = 0,\n\tMIN_COMPACT_PRIORITY = 0,\n\tCOMPACT_PRIO_SYNC_LIGHT = 1,\n\tMIN_COMPACT_COSTLY_PRIORITY = 1,\n\tDEF_COMPACT_PRIORITY = 1,\n\tCOMPACT_PRIO_ASYNC = 2,\n\tINIT_COMPACT_PRIORITY = 2,\n};\n\nenum compact_result {\n\tCOMPACT_NOT_SUITABLE_ZONE = 0,\n\tCOMPACT_SKIPPED = 1,\n\tCOMPACT_DEFERRED = 2,\n\tCOMPACT_NO_SUITABLE_PAGE = 3,\n\tCOMPACT_CONTINUE = 4,\n\tCOMPACT_COMPLETE = 5,\n\tCOMPACT_PARTIAL_SKIPPED = 6,\n\tCOMPACT_CONTENDED = 7,\n\tCOMPACT_SUCCESS = 8,\n};\n\nstruct trace_event_raw_oom_score_adj_update {\n\tstruct trace_entry ent;\n\tpid_t pid;\n\tchar comm[16];\n\tshort int oom_score_adj;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_reclaim_retry_zone {\n\tstruct trace_entry ent;\n\tint node;\n\tint zone_idx;\n\tint order;\n\tlong unsigned int reclaimable;\n\tlong unsigned int available;\n\tlong unsigned int min_wmark;\n\tint no_progress_loops;\n\tbool wmark_check;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mark_victim {\n\tstruct trace_entry ent;\n\tint pid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_wake_reaper {\n\tstruct trace_entry ent;\n\tint pid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_start_task_reaping {\n\tstruct trace_entry ent;\n\tint pid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_finish_task_reaping {\n\tstruct trace_entry ent;\n\tint pid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_skip_task_reaping {\n\tstruct trace_entry ent;\n\tint pid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_compact_retry {\n\tstruct trace_entry ent;\n\tint order;\n\tint priority;\n\tint result;\n\tint retries;\n\tint max_retries;\n\tbool ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_oom_score_adj_update {};\n\nstruct trace_event_data_offsets_reclaim_retry_zone {};\n\nstruct trace_event_data_offsets_mark_victim {};\n\nstruct trace_event_data_offsets_wake_reaper {};\n\nstruct trace_event_data_offsets_start_task_reaping {};\n\nstruct trace_event_data_offsets_finish_task_reaping {};\n\nstruct trace_event_data_offsets_skip_task_reaping {};\n\nstruct trace_event_data_offsets_compact_retry {};\n\ntypedef void (*btf_trace_oom_score_adj_update)(void *, struct task_struct *);\n\ntypedef void (*btf_trace_reclaim_retry_zone)(void *, struct zoneref *, int, long unsigned int, long unsigned int, long unsigned int, int, bool);\n\ntypedef void (*btf_trace_mark_victim)(void *, int);\n\ntypedef void (*btf_trace_wake_reaper)(void *, int);\n\ntypedef void (*btf_trace_start_task_reaping)(void *, int);\n\ntypedef void (*btf_trace_finish_task_reaping)(void *, int);\n\ntypedef void (*btf_trace_skip_task_reaping)(void *, int);\n\ntypedef void (*btf_trace_compact_retry)(void *, int, enum compact_priority, enum compact_result, int, int, bool);\n\nenum wb_congested_state {\n\tWB_async_congested = 0,\n\tWB_sync_congested = 1,\n};\n\nenum wb_state {\n\tWB_registered = 0,\n\tWB_writeback_running = 1,\n\tWB_has_dirty_io = 2,\n\tWB_start_all = 3,\n};\n\nenum {\n\tBLK_RW_ASYNC = 0,\n\tBLK_RW_SYNC = 1,\n};\n\nstruct wb_lock_cookie {\n\tbool locked;\n\tlong unsigned int flags;\n};\n\ntypedef int (*writepage_t)(struct page *, struct writeback_control *, void *);\n\nenum page_memcg_data_flags {\n\tMEMCG_DATA_OBJCGS = 1,\n\tMEMCG_DATA_KMEM = 2,\n\t__NR_MEMCG_DATA_FLAGS = 4,\n};\n\nstruct dirty_throttle_control {\n\tstruct wb_domain *dom;\n\tstruct dirty_throttle_control *gdtc;\n\tstruct bdi_writeback *wb;\n\tstruct fprop_local_percpu *wb_completions;\n\tlong unsigned int avail;\n\tlong unsigned int dirty;\n\tlong unsigned int thresh;\n\tlong unsigned int bg_thresh;\n\tlong unsigned int wb_dirty;\n\tlong unsigned int wb_thresh;\n\tlong unsigned int wb_bg_thresh;\n\tlong unsigned int pos_ratio;\n};\n\ntypedef void compound_page_dtor(struct page *);\n\nstruct trace_event_raw_mm_lru_insertion {\n\tstruct trace_entry ent;\n\tstruct page *page;\n\tlong unsigned int pfn;\n\tint lru;\n\tlong unsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_lru_activate {\n\tstruct trace_entry ent;\n\tstruct page *page;\n\tlong unsigned int pfn;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mm_lru_insertion {};\n\nstruct trace_event_data_offsets_mm_lru_activate {};\n\ntypedef void (*btf_trace_mm_lru_insertion)(void *, struct page *, int);\n\ntypedef void (*btf_trace_mm_lru_activate)(void *, struct page *);\n\nstruct lru_rotate {\n\tlocal_lock_t lock;\n\tstruct pagevec pvec;\n};\n\nstruct lru_pvecs {\n\tlocal_lock_t lock;\n\tstruct pagevec lru_add;\n\tstruct pagevec lru_deactivate_file;\n\tstruct pagevec lru_deactivate;\n\tstruct pagevec lru_lazyfree;\n\tstruct pagevec activate_page;\n};\n\nenum lruvec_flags {\n\tLRUVEC_CONGESTED = 0,\n};\n\nenum pgdat_flags {\n\tPGDAT_DIRTY = 0,\n\tPGDAT_WRITEBACK = 1,\n\tPGDAT_RECLAIM_LOCKED = 2,\n};\n\nstruct reclaim_stat {\n\tunsigned int nr_dirty;\n\tunsigned int nr_unqueued_dirty;\n\tunsigned int nr_congested;\n\tunsigned int nr_writeback;\n\tunsigned int nr_immediate;\n\tunsigned int nr_pageout;\n\tunsigned int nr_activate[2];\n\tunsigned int nr_ref_keep;\n\tunsigned int nr_unmap_fail;\n\tunsigned int nr_lazyfree_fail;\n};\n\nstruct mem_cgroup_reclaim_cookie {\n\tpg_data_t *pgdat;\n\tunsigned int generation;\n};\n\nenum ttu_flags {\n\tTTU_MIGRATION = 1,\n\tTTU_MUNLOCK = 2,\n\tTTU_SPLIT_HUGE_PMD = 4,\n\tTTU_IGNORE_MLOCK = 8,\n\tTTU_IGNORE_HWPOISON = 32,\n\tTTU_BATCH_FLUSH = 64,\n\tTTU_RMAP_LOCKED = 128,\n\tTTU_SPLIT_FREEZE = 256,\n};\n\nstruct trace_event_raw_mm_vmscan_kswapd_sleep {\n\tstruct trace_entry ent;\n\tint nid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_kswapd_wake {\n\tstruct trace_entry ent;\n\tint nid;\n\tint zid;\n\tint order;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_wakeup_kswapd {\n\tstruct trace_entry ent;\n\tint nid;\n\tint zid;\n\tint order;\n\tgfp_t gfp_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_direct_reclaim_begin_template {\n\tstruct trace_entry ent;\n\tint order;\n\tgfp_t gfp_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_direct_reclaim_end_template {\n\tstruct trace_entry ent;\n\tlong unsigned int nr_reclaimed;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_shrink_slab_start {\n\tstruct trace_entry ent;\n\tstruct shrinker *shr;\n\tvoid *shrink;\n\tint nid;\n\tlong int nr_objects_to_shrink;\n\tgfp_t gfp_flags;\n\tlong unsigned int cache_items;\n\tlong long unsigned int delta;\n\tlong unsigned int total_scan;\n\tint priority;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_shrink_slab_end {\n\tstruct trace_entry ent;\n\tstruct shrinker *shr;\n\tint nid;\n\tvoid *shrink;\n\tlong int unused_scan;\n\tlong int new_scan;\n\tint retval;\n\tlong int total_scan;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_lru_isolate {\n\tstruct trace_entry ent;\n\tint highest_zoneidx;\n\tint order;\n\tlong unsigned int nr_requested;\n\tlong unsigned int nr_scanned;\n\tlong unsigned int nr_skipped;\n\tlong unsigned int nr_taken;\n\tisolate_mode_t isolate_mode;\n\tint lru;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_writepage {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tint reclaim_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_lru_shrink_inactive {\n\tstruct trace_entry ent;\n\tint nid;\n\tlong unsigned int nr_scanned;\n\tlong unsigned int nr_reclaimed;\n\tlong unsigned int nr_dirty;\n\tlong unsigned int nr_writeback;\n\tlong unsigned int nr_congested;\n\tlong unsigned int nr_immediate;\n\tunsigned int nr_activate0;\n\tunsigned int nr_activate1;\n\tlong unsigned int nr_ref_keep;\n\tlong unsigned int nr_unmap_fail;\n\tint priority;\n\tint reclaim_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_lru_shrink_active {\n\tstruct trace_entry ent;\n\tint nid;\n\tlong unsigned int nr_taken;\n\tlong unsigned int nr_active;\n\tlong unsigned int nr_deactivated;\n\tlong unsigned int nr_referenced;\n\tint priority;\n\tint reclaim_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_inactive_list_is_low {\n\tstruct trace_entry ent;\n\tint nid;\n\tint reclaim_idx;\n\tlong unsigned int total_inactive;\n\tlong unsigned int inactive;\n\tlong unsigned int total_active;\n\tlong unsigned int active;\n\tlong unsigned int ratio;\n\tint reclaim_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_vmscan_node_reclaim_begin {\n\tstruct trace_entry ent;\n\tint nid;\n\tint order;\n\tgfp_t gfp_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mm_vmscan_kswapd_sleep {};\n\nstruct trace_event_data_offsets_mm_vmscan_kswapd_wake {};\n\nstruct trace_event_data_offsets_mm_vmscan_wakeup_kswapd {};\n\nstruct trace_event_data_offsets_mm_vmscan_direct_reclaim_begin_template {};\n\nstruct trace_event_data_offsets_mm_vmscan_direct_reclaim_end_template {};\n\nstruct trace_event_data_offsets_mm_shrink_slab_start {};\n\nstruct trace_event_data_offsets_mm_shrink_slab_end {};\n\nstruct trace_event_data_offsets_mm_vmscan_lru_isolate {};\n\nstruct trace_event_data_offsets_mm_vmscan_writepage {};\n\nstruct trace_event_data_offsets_mm_vmscan_lru_shrink_inactive {};\n\nstruct trace_event_data_offsets_mm_vmscan_lru_shrink_active {};\n\nstruct trace_event_data_offsets_mm_vmscan_inactive_list_is_low {};\n\nstruct trace_event_data_offsets_mm_vmscan_node_reclaim_begin {};\n\ntypedef void (*btf_trace_mm_vmscan_kswapd_sleep)(void *, int);\n\ntypedef void (*btf_trace_mm_vmscan_kswapd_wake)(void *, int, int, int);\n\ntypedef void (*btf_trace_mm_vmscan_wakeup_kswapd)(void *, int, int, int, gfp_t);\n\ntypedef void (*btf_trace_mm_vmscan_direct_reclaim_begin)(void *, int, gfp_t);\n\ntypedef void (*btf_trace_mm_vmscan_memcg_reclaim_begin)(void *, int, gfp_t);\n\ntypedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_begin)(void *, int, gfp_t);\n\ntypedef void (*btf_trace_mm_vmscan_direct_reclaim_end)(void *, long unsigned int);\n\ntypedef void (*btf_trace_mm_vmscan_memcg_reclaim_end)(void *, long unsigned int);\n\ntypedef void (*btf_trace_mm_vmscan_memcg_softlimit_reclaim_end)(void *, long unsigned int);\n\ntypedef void (*btf_trace_mm_shrink_slab_start)(void *, struct shrinker *, struct shrink_control *, long int, long unsigned int, long long unsigned int, long unsigned int, int);\n\ntypedef void (*btf_trace_mm_shrink_slab_end)(void *, struct shrinker *, int, int, long int, long int, long int);\n\ntypedef void (*btf_trace_mm_vmscan_lru_isolate)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, isolate_mode_t, int);\n\ntypedef void (*btf_trace_mm_vmscan_writepage)(void *, struct page *);\n\ntypedef void (*btf_trace_mm_vmscan_lru_shrink_inactive)(void *, int, long unsigned int, long unsigned int, struct reclaim_stat *, int, int);\n\ntypedef void (*btf_trace_mm_vmscan_lru_shrink_active)(void *, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int, int);\n\ntypedef void (*btf_trace_mm_vmscan_inactive_list_is_low)(void *, int, int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, int);\n\ntypedef void (*btf_trace_mm_vmscan_node_reclaim_begin)(void *, int, int, gfp_t);\n\ntypedef void (*btf_trace_mm_vmscan_node_reclaim_end)(void *, long unsigned int);\n\nstruct scan_control {\n\tlong unsigned int nr_to_reclaim;\n\tnodemask_t *nodemask;\n\tstruct mem_cgroup *target_mem_cgroup;\n\tlong unsigned int anon_cost;\n\tlong unsigned int file_cost;\n\tunsigned int may_deactivate: 2;\n\tunsigned int force_deactivate: 1;\n\tunsigned int skipped_deactivate: 1;\n\tunsigned int may_writepage: 1;\n\tunsigned int may_unmap: 1;\n\tunsigned int may_swap: 1;\n\tunsigned int memcg_low_reclaim: 1;\n\tunsigned int memcg_low_skipped: 1;\n\tunsigned int hibernation_mode: 1;\n\tunsigned int compaction_ready: 1;\n\tunsigned int cache_trim_mode: 1;\n\tunsigned int file_is_tiny: 1;\n\ts8 order;\n\ts8 priority;\n\ts8 reclaim_idx;\n\tgfp_t gfp_mask;\n\tlong unsigned int nr_scanned;\n\tlong unsigned int nr_reclaimed;\n\tstruct {\n\t\tunsigned int dirty;\n\t\tunsigned int unqueued_dirty;\n\t\tunsigned int congested;\n\t\tunsigned int writeback;\n\t\tunsigned int immediate;\n\t\tunsigned int file_taken;\n\t\tunsigned int taken;\n\t} nr;\n\tstruct reclaim_state reclaim_state;\n};\n\ntypedef enum {\n\tPAGE_KEEP = 0,\n\tPAGE_ACTIVATE = 1,\n\tPAGE_SUCCESS = 2,\n\tPAGE_CLEAN = 3,\n} pageout_t;\n\nenum page_references {\n\tPAGEREF_RECLAIM = 0,\n\tPAGEREF_RECLAIM_CLEAN = 1,\n\tPAGEREF_KEEP = 2,\n\tPAGEREF_ACTIVATE = 3,\n};\n\nenum scan_balance {\n\tSCAN_EQUAL = 0,\n\tSCAN_FRACT = 1,\n\tSCAN_ANON = 2,\n\tSCAN_FILE = 3,\n};\n\nenum transparent_hugepage_flag {\n\tTRANSPARENT_HUGEPAGE_FLAG = 0,\n\tTRANSPARENT_HUGEPAGE_REQ_MADV_FLAG = 1,\n\tTRANSPARENT_HUGEPAGE_DEFRAG_DIRECT_FLAG = 2,\n\tTRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_FLAG = 3,\n\tTRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG = 4,\n\tTRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG = 5,\n\tTRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG = 6,\n\tTRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG = 7,\n\tTRANSPARENT_HUGEPAGE_DEBUG_COW_FLAG = 8,\n};\n\nstruct xattr;\n\ntypedef int (*initxattrs)(struct inode *, const struct xattr *, void *);\n\nstruct xattr {\n\tconst char *name;\n\tvoid *value;\n\tsize_t value_len;\n};\n\nstruct constant_table {\n\tconst char *name;\n\tint value;\n};\n\nenum {\n\tMPOL_DEFAULT = 0,\n\tMPOL_PREFERRED = 1,\n\tMPOL_BIND = 2,\n\tMPOL_INTERLEAVE = 3,\n\tMPOL_LOCAL = 4,\n\tMPOL_MAX = 5,\n};\n\nstruct shared_policy {\n\tstruct rb_root root;\n\trwlock_t lock;\n};\n\nstruct simple_xattrs {\n\tstruct list_head head;\n\tspinlock_t lock;\n};\n\nstruct simple_xattr {\n\tstruct list_head list;\n\tchar *name;\n\tsize_t size;\n\tchar value[0];\n};\n\nstruct shmem_inode_info {\n\tspinlock_t lock;\n\tunsigned int seals;\n\tlong unsigned int flags;\n\tlong unsigned int alloced;\n\tlong unsigned int swapped;\n\tstruct list_head shrinklist;\n\tstruct list_head swaplist;\n\tstruct shared_policy policy;\n\tstruct simple_xattrs xattrs;\n\tatomic_t stop_eviction;\n\tstruct inode vfs_inode;\n};\n\nstruct shmem_sb_info {\n\tlong unsigned int max_blocks;\n\tstruct percpu_counter used_blocks;\n\tlong unsigned int max_inodes;\n\tlong unsigned int free_inodes;\n\tspinlock_t stat_lock;\n\tumode_t mode;\n\tunsigned char huge;\n\tkuid_t uid;\n\tkgid_t gid;\n\tbool full_inums;\n\tino_t next_ino;\n\tino_t *ino_batch;\n\tstruct mempolicy *mpol;\n\tspinlock_t shrinklist_lock;\n\tstruct list_head shrinklist;\n\tlong unsigned int shrinklist_len;\n};\n\nenum sgp_type {\n\tSGP_READ = 0,\n\tSGP_CACHE = 1,\n\tSGP_NOHUGE = 2,\n\tSGP_HUGE = 3,\n\tSGP_WRITE = 4,\n\tSGP_FALLOC = 5,\n};\n\nenum fid_type {\n\tFILEID_ROOT = 0,\n\tFILEID_INO32_GEN = 1,\n\tFILEID_INO32_GEN_PARENT = 2,\n\tFILEID_BTRFS_WITHOUT_PARENT = 77,\n\tFILEID_BTRFS_WITH_PARENT = 78,\n\tFILEID_BTRFS_WITH_PARENT_ROOT = 79,\n\tFILEID_UDF_WITHOUT_PARENT = 81,\n\tFILEID_UDF_WITH_PARENT = 82,\n\tFILEID_NILFS_WITHOUT_PARENT = 97,\n\tFILEID_NILFS_WITH_PARENT = 98,\n\tFILEID_FAT_WITHOUT_PARENT = 113,\n\tFILEID_FAT_WITH_PARENT = 114,\n\tFILEID_LUSTRE = 151,\n\tFILEID_KERNFS = 254,\n\tFILEID_INVALID = 255,\n};\n\nstruct shmem_falloc {\n\twait_queue_head_t *waitq;\n\tlong unsigned int start;\n\tlong unsigned int next;\n\tlong unsigned int nr_falloced;\n\tlong unsigned int nr_unswapped;\n};\n\nstruct shmem_options {\n\tlong long unsigned int blocks;\n\tlong long unsigned int inodes;\n\tstruct mempolicy *mpol;\n\tkuid_t uid;\n\tkgid_t gid;\n\tumode_t mode;\n\tbool full_inums;\n\tint huge;\n\tint seen;\n};\n\nenum shmem_param {\n\tOpt_gid = 0,\n\tOpt_huge = 1,\n\tOpt_mode = 2,\n\tOpt_mpol = 3,\n\tOpt_nr_blocks = 4,\n\tOpt_nr_inodes = 5,\n\tOpt_size = 6,\n\tOpt_uid = 7,\n\tOpt_inode32 = 8,\n\tOpt_inode64 = 9,\n};\n\nenum writeback_stat_item {\n\tNR_DIRTY_THRESHOLD = 0,\n\tNR_DIRTY_BG_THRESHOLD = 1,\n\tNR_VM_WRITEBACK_STAT_ITEMS = 2,\n};\n\nstruct contig_page_info {\n\tlong unsigned int free_pages;\n\tlong unsigned int free_blocks_total;\n\tlong unsigned int free_blocks_suitable;\n};\n\nstruct radix_tree_iter {\n\tlong unsigned int index;\n\tlong unsigned int next_index;\n\tlong unsigned int tags;\n\tstruct xa_node *node;\n};\n\nenum {\n\tRADIX_TREE_ITER_TAG_MASK = 15,\n\tRADIX_TREE_ITER_TAGGED = 16,\n\tRADIX_TREE_ITER_CONTIG = 32,\n};\n\nenum mminit_level {\n\tMMINIT_WARNING = 0,\n\tMMINIT_VERIFY = 1,\n\tMMINIT_TRACE = 2,\n};\n\nstruct pcpu_group_info {\n\tint nr_units;\n\tlong unsigned int base_offset;\n\tunsigned int *cpu_map;\n};\n\nstruct pcpu_alloc_info {\n\tsize_t static_size;\n\tsize_t reserved_size;\n\tsize_t dyn_size;\n\tsize_t unit_size;\n\tsize_t atom_size;\n\tsize_t alloc_size;\n\tsize_t __ai_size;\n\tint nr_groups;\n\tstruct pcpu_group_info groups[0];\n};\n\nstruct trace_event_raw_percpu_alloc_percpu {\n\tstruct trace_entry ent;\n\tbool reserved;\n\tbool is_atomic;\n\tsize_t size;\n\tsize_t align;\n\tvoid *base_addr;\n\tint off;\n\tvoid *ptr;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_percpu_free_percpu {\n\tstruct trace_entry ent;\n\tvoid *base_addr;\n\tint off;\n\tvoid *ptr;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_percpu_alloc_percpu_fail {\n\tstruct trace_entry ent;\n\tbool reserved;\n\tbool is_atomic;\n\tsize_t size;\n\tsize_t align;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_percpu_create_chunk {\n\tstruct trace_entry ent;\n\tvoid *base_addr;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_percpu_destroy_chunk {\n\tstruct trace_entry ent;\n\tvoid *base_addr;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_percpu_alloc_percpu {};\n\nstruct trace_event_data_offsets_percpu_free_percpu {};\n\nstruct trace_event_data_offsets_percpu_alloc_percpu_fail {};\n\nstruct trace_event_data_offsets_percpu_create_chunk {};\n\nstruct trace_event_data_offsets_percpu_destroy_chunk {};\n\ntypedef void (*btf_trace_percpu_alloc_percpu)(void *, bool, bool, size_t, size_t, void *, int, void *);\n\ntypedef void (*btf_trace_percpu_free_percpu)(void *, void *, int, void *);\n\ntypedef void (*btf_trace_percpu_alloc_percpu_fail)(void *, bool, bool, size_t, size_t);\n\ntypedef void (*btf_trace_percpu_create_chunk)(void *, void *);\n\ntypedef void (*btf_trace_percpu_destroy_chunk)(void *, void *);\n\nenum pcpu_chunk_type {\n\tPCPU_CHUNK_ROOT = 0,\n\tPCPU_CHUNK_MEMCG = 1,\n\tPCPU_NR_CHUNK_TYPES = 2,\n\tPCPU_FAIL_ALLOC = 2,\n};\n\nstruct pcpu_block_md {\n\tint scan_hint;\n\tint scan_hint_start;\n\tint contig_hint;\n\tint contig_hint_start;\n\tint left_free;\n\tint right_free;\n\tint first_free;\n\tint nr_bits;\n};\n\nstruct pcpu_chunk {\n\tstruct list_head list;\n\tint free_bytes;\n\tstruct pcpu_block_md chunk_md;\n\tvoid *base_addr;\n\tlong unsigned int *alloc_map;\n\tlong unsigned int *bound_map;\n\tstruct pcpu_block_md *md_blocks;\n\tvoid *data;\n\tbool immutable;\n\tint start_offset;\n\tint end_offset;\n\tstruct obj_cgroup **obj_cgroups;\n\tint nr_pages;\n\tint nr_populated;\n\tint nr_empty_pop_pages;\n\tlong unsigned int populated[0];\n};\n\nstruct trace_event_raw_kmem_alloc {\n\tstruct trace_entry ent;\n\tlong unsigned int call_site;\n\tconst void *ptr;\n\tsize_t bytes_req;\n\tsize_t bytes_alloc;\n\tgfp_t gfp_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_kmem_alloc_node {\n\tstruct trace_entry ent;\n\tlong unsigned int call_site;\n\tconst void *ptr;\n\tsize_t bytes_req;\n\tsize_t bytes_alloc;\n\tgfp_t gfp_flags;\n\tint node;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_kmem_free {\n\tstruct trace_entry ent;\n\tlong unsigned int call_site;\n\tconst void *ptr;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_page_free {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tunsigned int order;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_page_free_batched {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_page_alloc {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tunsigned int order;\n\tgfp_t gfp_flags;\n\tint migratetype;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_page {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tunsigned int order;\n\tint migratetype;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_page_pcpu_drain {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tunsigned int order;\n\tint migratetype;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_page_alloc_extfrag {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tint alloc_order;\n\tint fallback_order;\n\tint alloc_migratetype;\n\tint fallback_migratetype;\n\tint change_ownership;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_rss_stat {\n\tstruct trace_entry ent;\n\tunsigned int mm_id;\n\tunsigned int curr;\n\tint member;\n\tlong int size;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_kmem_alloc {};\n\nstruct trace_event_data_offsets_kmem_alloc_node {};\n\nstruct trace_event_data_offsets_kmem_free {};\n\nstruct trace_event_data_offsets_mm_page_free {};\n\nstruct trace_event_data_offsets_mm_page_free_batched {};\n\nstruct trace_event_data_offsets_mm_page_alloc {};\n\nstruct trace_event_data_offsets_mm_page {};\n\nstruct trace_event_data_offsets_mm_page_pcpu_drain {};\n\nstruct trace_event_data_offsets_mm_page_alloc_extfrag {};\n\nstruct trace_event_data_offsets_rss_stat {};\n\ntypedef void (*btf_trace_kmalloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);\n\ntypedef void (*btf_trace_kmem_cache_alloc)(void *, long unsigned int, const void *, size_t, size_t, gfp_t);\n\ntypedef void (*btf_trace_kmalloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);\n\ntypedef void (*btf_trace_kmem_cache_alloc_node)(void *, long unsigned int, const void *, size_t, size_t, gfp_t, int);\n\ntypedef void (*btf_trace_kfree)(void *, long unsigned int, const void *);\n\ntypedef void (*btf_trace_kmem_cache_free)(void *, long unsigned int, const void *);\n\ntypedef void (*btf_trace_mm_page_free)(void *, struct page *, unsigned int);\n\ntypedef void (*btf_trace_mm_page_free_batched)(void *, struct page *);\n\ntypedef void (*btf_trace_mm_page_alloc)(void *, struct page *, unsigned int, gfp_t, int);\n\ntypedef void (*btf_trace_mm_page_alloc_zone_locked)(void *, struct page *, unsigned int, int);\n\ntypedef void (*btf_trace_mm_page_pcpu_drain)(void *, struct page *, unsigned int, int);\n\ntypedef void (*btf_trace_mm_page_alloc_extfrag)(void *, struct page *, int, int, int, int);\n\ntypedef void (*btf_trace_rss_stat)(void *, struct mm_struct *, int, long int);\n\nenum slab_state {\n\tDOWN = 0,\n\tPARTIAL = 1,\n\tPARTIAL_NODE = 2,\n\tUP = 3,\n\tFULL = 4,\n};\n\nstruct kmalloc_info_struct {\n\tconst char *name[3];\n\tunsigned int size;\n};\n\nstruct slabinfo {\n\tlong unsigned int active_objs;\n\tlong unsigned int num_objs;\n\tlong unsigned int active_slabs;\n\tlong unsigned int num_slabs;\n\tlong unsigned int shared_avail;\n\tunsigned int limit;\n\tunsigned int batchcount;\n\tunsigned int shared;\n\tunsigned int objects_per_slab;\n\tunsigned int cache_order;\n};\n\nenum pageblock_bits {\n\tPB_migrate = 0,\n\tPB_migrate_end = 2,\n\tPB_migrate_skip = 3,\n\tNR_PAGEBLOCK_BITS = 4,\n};\n\nstruct node___2 {\n\tstruct device dev;\n\tstruct list_head access_list;\n\tstruct work_struct node_work;\n\tstruct list_head cache_attrs;\n\tstruct device *cache_dev;\n};\n\ntypedef struct page *new_page_t(struct page *, long unsigned int);\n\ntypedef void free_page_t(struct page *, long unsigned int);\n\nstruct alloc_context {\n\tstruct zonelist *zonelist;\n\tnodemask_t *nodemask;\n\tstruct zoneref *preferred_zoneref;\n\tint migratetype;\n\tenum zone_type highest_zoneidx;\n\tbool spread_dirty_pages;\n};\n\nstruct trace_event_raw_mm_compaction_isolate_template {\n\tstruct trace_entry ent;\n\tlong unsigned int start_pfn;\n\tlong unsigned int end_pfn;\n\tlong unsigned int nr_scanned;\n\tlong unsigned int nr_taken;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_compaction_migratepages {\n\tstruct trace_entry ent;\n\tlong unsigned int nr_migrated;\n\tlong unsigned int nr_failed;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_compaction_begin {\n\tstruct trace_entry ent;\n\tlong unsigned int zone_start;\n\tlong unsigned int migrate_pfn;\n\tlong unsigned int free_pfn;\n\tlong unsigned int zone_end;\n\tbool sync;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_compaction_end {\n\tstruct trace_entry ent;\n\tlong unsigned int zone_start;\n\tlong unsigned int migrate_pfn;\n\tlong unsigned int free_pfn;\n\tlong unsigned int zone_end;\n\tbool sync;\n\tint status;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_compaction_try_to_compact_pages {\n\tstruct trace_entry ent;\n\tint order;\n\tgfp_t gfp_mask;\n\tint prio;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_compaction_suitable_template {\n\tstruct trace_entry ent;\n\tint nid;\n\tenum zone_type idx;\n\tint order;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_compaction_defer_template {\n\tstruct trace_entry ent;\n\tint nid;\n\tenum zone_type idx;\n\tint order;\n\tunsigned int considered;\n\tunsigned int defer_shift;\n\tint order_failed;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_compaction_kcompactd_sleep {\n\tstruct trace_entry ent;\n\tint nid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_kcompactd_wake_template {\n\tstruct trace_entry ent;\n\tint nid;\n\tint order;\n\tenum zone_type highest_zoneidx;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mm_compaction_isolate_template {};\n\nstruct trace_event_data_offsets_mm_compaction_migratepages {};\n\nstruct trace_event_data_offsets_mm_compaction_begin {};\n\nstruct trace_event_data_offsets_mm_compaction_end {};\n\nstruct trace_event_data_offsets_mm_compaction_try_to_compact_pages {};\n\nstruct trace_event_data_offsets_mm_compaction_suitable_template {};\n\nstruct trace_event_data_offsets_mm_compaction_defer_template {};\n\nstruct trace_event_data_offsets_mm_compaction_kcompactd_sleep {};\n\nstruct trace_event_data_offsets_kcompactd_wake_template {};\n\ntypedef void (*btf_trace_mm_compaction_isolate_migratepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);\n\ntypedef void (*btf_trace_mm_compaction_isolate_freepages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int);\n\ntypedef void (*btf_trace_mm_compaction_migratepages)(void *, long unsigned int, int, struct list_head *);\n\ntypedef void (*btf_trace_mm_compaction_begin)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool);\n\ntypedef void (*btf_trace_mm_compaction_end)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, bool, int);\n\ntypedef void (*btf_trace_mm_compaction_try_to_compact_pages)(void *, int, gfp_t, int);\n\ntypedef void (*btf_trace_mm_compaction_finished)(void *, struct zone *, int, int);\n\ntypedef void (*btf_trace_mm_compaction_suitable)(void *, struct zone *, int, int);\n\ntypedef void (*btf_trace_mm_compaction_deferred)(void *, struct zone *, int);\n\ntypedef void (*btf_trace_mm_compaction_defer_compaction)(void *, struct zone *, int);\n\ntypedef void (*btf_trace_mm_compaction_defer_reset)(void *, struct zone *, int);\n\ntypedef void (*btf_trace_mm_compaction_kcompactd_sleep)(void *, int);\n\ntypedef void (*btf_trace_mm_compaction_wakeup_kcompactd)(void *, int, int, enum zone_type);\n\ntypedef void (*btf_trace_mm_compaction_kcompactd_wake)(void *, int, int, enum zone_type);\n\ntypedef enum {\n\tISOLATE_ABORT = 0,\n\tISOLATE_NONE = 1,\n\tISOLATE_SUCCESS = 2,\n} isolate_migrate_t;\n\nstruct anon_vma_chain {\n\tstruct vm_area_struct *vma;\n\tstruct anon_vma *anon_vma;\n\tstruct list_head same_vma;\n\tstruct rb_node rb;\n\tlong unsigned int rb_subtree_last;\n};\n\nenum lru_status {\n\tLRU_REMOVED = 0,\n\tLRU_REMOVED_RETRY = 1,\n\tLRU_ROTATE = 2,\n\tLRU_SKIP = 3,\n\tLRU_RETRY = 4,\n};\n\ntypedef enum lru_status (*list_lru_walk_cb)(struct list_head *, struct list_lru_one *, spinlock_t *, void *);\n\ntypedef struct {\n\tlong unsigned int pd;\n} hugepd_t;\n\nstruct migration_target_control {\n\tint nid;\n\tnodemask_t *nmask;\n\tgfp_t gfp_mask;\n};\n\nstruct follow_page_context {\n\tstruct dev_pagemap *pgmap;\n\tunsigned int page_mask;\n};\n\nstruct trace_event_raw_mmap_lock_start_locking {\n\tstruct trace_entry ent;\n\tstruct mm_struct *mm;\n\tu32 __data_loc_memcg_path;\n\tbool write;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mmap_lock_acquire_returned {\n\tstruct trace_entry ent;\n\tstruct mm_struct *mm;\n\tu32 __data_loc_memcg_path;\n\tbool write;\n\tbool success;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mmap_lock_released {\n\tstruct trace_entry ent;\n\tstruct mm_struct *mm;\n\tu32 __data_loc_memcg_path;\n\tbool write;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mmap_lock_start_locking {\n\tu32 memcg_path;\n};\n\nstruct trace_event_data_offsets_mmap_lock_acquire_returned {\n\tu32 memcg_path;\n};\n\nstruct trace_event_data_offsets_mmap_lock_released {\n\tu32 memcg_path;\n};\n\ntypedef void (*btf_trace_mmap_lock_start_locking)(void *, struct mm_struct *, const char *, bool);\n\ntypedef void (*btf_trace_mmap_lock_acquire_returned)(void *, struct mm_struct *, const char *, bool, bool);\n\ntypedef void (*btf_trace_mmap_lock_released)(void *, struct mm_struct *, const char *, bool);\n\ntypedef unsigned int pgtbl_mod_mask;\n\nenum {\n\tSWP_USED = 1,\n\tSWP_WRITEOK = 2,\n\tSWP_DISCARDABLE = 4,\n\tSWP_DISCARDING = 8,\n\tSWP_SOLIDSTATE = 16,\n\tSWP_CONTINUED = 32,\n\tSWP_BLKDEV = 64,\n\tSWP_ACTIVATED = 128,\n\tSWP_FS_OPS = 256,\n\tSWP_AREA_DISCARD = 512,\n\tSWP_PAGE_DISCARD = 1024,\n\tSWP_STABLE_WRITES = 2048,\n\tSWP_SYNCHRONOUS_IO = 4096,\n\tSWP_VALID = 8192,\n\tSWP_SCANNING = 16384,\n};\n\nstruct copy_subpage_arg {\n\tstruct page *dst;\n\tstruct page *src;\n\tstruct vm_area_struct *vma;\n};\n\nstruct mm_walk;\n\nstruct mm_walk_ops {\n\tint (*pgd_entry)(pgd_t *, long unsigned int, long unsigned int, struct mm_walk *);\n\tint (*p4d_entry)(p4d_t *, long unsigned int, long unsigned int, struct mm_walk *);\n\tint (*pud_entry)(pud_t *, long unsigned int, long unsigned int, struct mm_walk *);\n\tint (*pmd_entry)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *);\n\tint (*pte_entry)(pte_t *, long unsigned int, long unsigned int, struct mm_walk *);\n\tint (*pte_hole)(long unsigned int, long unsigned int, int, struct mm_walk *);\n\tint (*hugetlb_entry)(pte_t *, long unsigned int, long unsigned int, long unsigned int, struct mm_walk *);\n\tint (*test_walk)(long unsigned int, long unsigned int, struct mm_walk *);\n\tint (*pre_vma)(long unsigned int, long unsigned int, struct mm_walk *);\n\tvoid (*post_vma)(struct mm_walk *);\n};\n\nenum page_walk_action {\n\tACTION_SUBTREE = 0,\n\tACTION_CONTINUE = 1,\n\tACTION_AGAIN = 2,\n};\n\nstruct mm_walk {\n\tconst struct mm_walk_ops *ops;\n\tstruct mm_struct *mm;\n\tpgd_t *pgd;\n\tstruct vm_area_struct *vma;\n\tenum page_walk_action action;\n\tbool no_vma;\n\tvoid *private;\n};\n\nenum {\n\tHUGETLB_SHMFS_INODE = 1,\n\tHUGETLB_ANONHUGE_INODE = 2,\n};\n\nstruct trace_event_raw_vm_unmapped_area {\n\tstruct trace_entry ent;\n\tlong unsigned int addr;\n\tlong unsigned int total_vm;\n\tlong unsigned int flags;\n\tlong unsigned int length;\n\tlong unsigned int low_limit;\n\tlong unsigned int high_limit;\n\tlong unsigned int align_mask;\n\tlong unsigned int align_offset;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_vm_unmapped_area {};\n\ntypedef void (*btf_trace_vm_unmapped_area)(void *, long unsigned int, struct vm_unmapped_area_info *);\n\nenum pgt_entry {\n\tNORMAL_PMD = 0,\n\tHPAGE_PMD = 1,\n\tNORMAL_PUD = 2,\n};\n\nstruct rmap_walk_control {\n\tvoid *arg;\n\tbool (*rmap_one)(struct page *, struct vm_area_struct *, long unsigned int, void *);\n\tint (*done)(struct page *);\n\tstruct anon_vma * (*anon_lock)(struct page *);\n\tbool (*invalid_vma)(struct vm_area_struct *, void *);\n};\n\nstruct page_referenced_arg {\n\tint mapcount;\n\tint referenced;\n\tlong unsigned int vm_flags;\n\tstruct mem_cgroup *memcg;\n};\n\nstruct vmap_area {\n\tlong unsigned int va_start;\n\tlong unsigned int va_end;\n\tstruct rb_node rb_node;\n\tstruct list_head list;\n\tunion {\n\t\tlong unsigned int subtree_max_size;\n\t\tstruct vm_struct *vm;\n\t};\n};\n\nstruct vfree_deferred {\n\tstruct llist_head list;\n\tstruct work_struct wq;\n};\n\nenum fit_type {\n\tNOTHING_FIT = 0,\n\tFL_FIT_TYPE = 1,\n\tLE_FIT_TYPE = 2,\n\tRE_FIT_TYPE = 3,\n\tNE_FIT_TYPE = 4,\n};\n\nstruct vmap_block_queue {\n\tspinlock_t lock;\n\tstruct list_head free;\n};\n\nstruct vmap_block {\n\tspinlock_t lock;\n\tstruct vmap_area *va;\n\tlong unsigned int free;\n\tlong unsigned int dirty;\n\tlong unsigned int dirty_min;\n\tlong unsigned int dirty_max;\n\tstruct list_head free_list;\n\tstruct callback_head callback_head;\n\tstruct list_head purge;\n};\n\nstruct vmap_pfn_data {\n\tlong unsigned int *pfns;\n\tpgprot_t prot;\n\tunsigned int idx;\n};\n\nstruct page_frag_cache {\n\tvoid *va;\n\t__u16 offset;\n\t__u16 size;\n\tunsigned int pagecnt_bias;\n\tbool pfmemalloc;\n};\n\nenum zone_flags {\n\tZONE_BOOSTED_WATERMARK = 0,\n};\n\ntypedef int fpi_t;\n\nstruct pcpu_drain {\n\tstruct zone *zone;\n\tstruct work_struct work;\n};\n\nstruct mminit_pfnnid_cache {\n\tlong unsigned int last_start;\n\tlong unsigned int last_end;\n\tint last_nid;\n};\n\nstruct madvise_walk_private {\n\tstruct mmu_gather *tlb;\n\tbool pageout;\n};\n\nstruct vma_swap_readahead {\n\tshort unsigned int win;\n\tshort unsigned int offset;\n\tshort unsigned int nr_pte;\n\tpte_t *ptes;\n};\n\nunion swap_header {\n\tstruct {\n\t\tchar reserved[4086];\n\t\tchar magic[10];\n\t} magic;\n\tstruct {\n\t\tchar bootbits[1024];\n\t\t__u32 version;\n\t\t__u32 last_page;\n\t\t__u32 nr_badpages;\n\t\tunsigned char sws_uuid[16];\n\t\tunsigned char sws_volume[16];\n\t\t__u32 padding[117];\n\t\t__u32 badpages[1];\n\t} info;\n};\n\nstruct swap_extent {\n\tstruct rb_node rb_node;\n\tlong unsigned int start_page;\n\tlong unsigned int nr_pages;\n\tsector_t start_block;\n};\n\nstruct swap_slots_cache {\n\tbool lock_initialized;\n\tstruct mutex alloc_lock;\n\tswp_entry_t *slots;\n\tint nr;\n\tint cur;\n\tspinlock_t free_lock;\n\tswp_entry_t *slots_ret;\n\tint n_ret;\n};\n\nstruct frontswap_ops {\n\tvoid (*init)(unsigned int);\n\tint (*store)(unsigned int, long unsigned int, struct page *);\n\tint (*load)(unsigned int, long unsigned int, struct page *);\n\tvoid (*invalidate_page)(unsigned int, long unsigned int);\n\tvoid (*invalidate_area)(unsigned int);\n\tstruct frontswap_ops *next;\n};\n\nstruct crypto_wait {\n\tstruct completion completion;\n\tint err;\n};\n\nstruct zpool;\n\nstruct zpool_ops {\n\tint (*evict)(struct zpool *, long unsigned int);\n};\n\nenum zpool_mapmode {\n\tZPOOL_MM_RW = 0,\n\tZPOOL_MM_RO = 1,\n\tZPOOL_MM_WO = 2,\n\tZPOOL_MM_DEFAULT = 0,\n};\n\nstruct acomp_req {\n\tstruct crypto_async_request base;\n\tstruct scatterlist *src;\n\tstruct scatterlist *dst;\n\tunsigned int slen;\n\tunsigned int dlen;\n\tu32 flags;\n\tvoid *__ctx[0];\n};\n\nstruct crypto_acomp {\n\tint (*compress)(struct acomp_req *);\n\tint (*decompress)(struct acomp_req *);\n\tvoid (*dst_free)(struct scatterlist *);\n\tunsigned int reqsize;\n\tstruct crypto_tfm base;\n};\n\nstruct crypto_acomp_ctx {\n\tstruct crypto_acomp *acomp;\n\tstruct acomp_req *req;\n\tstruct crypto_wait wait;\n\tu8 *dstmem;\n\tstruct mutex *mutex;\n};\n\nstruct zswap_pool {\n\tstruct zpool *zpool;\n\tstruct crypto_acomp_ctx *acomp_ctx;\n\tstruct kref kref;\n\tstruct list_head list;\n\tstruct work_struct release_work;\n\tstruct work_struct shrink_work;\n\tstruct hlist_node node;\n\tchar tfm_name[128];\n};\n\nstruct zswap_entry {\n\tstruct rb_node rbnode;\n\tlong unsigned int offset;\n\tint refcount;\n\tunsigned int length;\n\tstruct zswap_pool *pool;\n\tunion {\n\t\tlong unsigned int handle;\n\t\tlong unsigned int value;\n\t};\n};\n\nstruct zswap_header {\n\tswp_entry_t swpentry;\n};\n\nstruct zswap_tree {\n\tstruct rb_root rbroot;\n\tspinlock_t lock;\n};\n\nenum zswap_get_swap_ret {\n\tZSWAP_SWAPCACHE_NEW = 0,\n\tZSWAP_SWAPCACHE_EXIST = 1,\n\tZSWAP_SWAPCACHE_FAIL = 2,\n};\n\nstruct dma_pool {\n\tstruct list_head page_list;\n\tspinlock_t lock;\n\tsize_t size;\n\tstruct device *dev;\n\tsize_t allocation;\n\tsize_t boundary;\n\tchar name[32];\n\tstruct list_head pools;\n};\n\nstruct dma_page {\n\tstruct list_head page_list;\n\tvoid *vaddr;\n\tdma_addr_t dma;\n\tunsigned int in_use;\n\tunsigned int offset;\n};\n\nenum string_size_units {\n\tSTRING_UNITS_10 = 0,\n\tSTRING_UNITS_2 = 1,\n};\n\ntypedef void (*node_registration_func_t)(struct node___2 *);\n\nstruct resv_map {\n\tstruct kref refs;\n\tspinlock_t lock;\n\tstruct list_head regions;\n\tlong int adds_in_progress;\n\tstruct list_head region_cache;\n\tlong int region_cache_count;\n\tstruct page_counter *reservation_counter;\n\tlong unsigned int pages_per_hpage;\n\tstruct cgroup_subsys_state *css;\n};\n\nstruct file_region {\n\tstruct list_head link;\n\tlong int from;\n\tlong int to;\n\tstruct page_counter *reservation_counter;\n\tstruct cgroup_subsys_state *css;\n};\n\nstruct huge_bootmem_page {\n\tstruct list_head list;\n\tstruct hstate *hstate;\n};\n\nenum hugetlb_memory_event {\n\tHUGETLB_MAX = 0,\n\tHUGETLB_NR_MEMORY_EVENTS = 1,\n};\n\nstruct hugetlb_cgroup {\n\tstruct cgroup_subsys_state css;\n\tstruct page_counter hugepage[2];\n\tstruct page_counter rsvd_hugepage[2];\n\tatomic_long_t events[2];\n\tatomic_long_t events_local[2];\n\tstruct cgroup_file events_file[2];\n\tstruct cgroup_file events_local_file[2];\n};\n\nenum vma_resv_mode {\n\tVMA_NEEDS_RESV = 0,\n\tVMA_COMMIT_RESV = 1,\n\tVMA_END_RESV = 2,\n\tVMA_ADD_RESV = 3,\n};\n\nstruct node_hstate {\n\tstruct kobject *hugepages_kobj;\n\tstruct kobject *hstate_kobjs[2];\n};\n\nstruct nodemask_scratch {\n\tnodemask_t mask1;\n\tnodemask_t mask2;\n};\n\nstruct sp_node {\n\tstruct rb_node nd;\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tstruct mempolicy *policy;\n};\n\nstruct mempolicy_operations {\n\tint (*create)(struct mempolicy *, const nodemask_t *);\n\tvoid (*rebind)(struct mempolicy *, const nodemask_t *);\n};\n\nstruct queue_pages {\n\tstruct list_head *pagelist;\n\tlong unsigned int flags;\n\tnodemask_t *nmask;\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tstruct vm_area_struct *first;\n};\n\nstruct mmu_notifier_subscriptions {\n\tstruct hlist_head list;\n\tbool has_itree;\n\tspinlock_t lock;\n\tlong unsigned int invalidate_seq;\n\tlong unsigned int active_invalidate_ranges;\n\tstruct rb_root_cached itree;\n\twait_queue_head_t wq;\n\tstruct hlist_head deferred_list;\n};\n\nstruct interval_tree_node {\n\tstruct rb_node rb;\n\tlong unsigned int start;\n\tlong unsigned int last;\n\tlong unsigned int __subtree_last;\n};\n\nstruct mmu_interval_notifier;\n\nstruct mmu_interval_notifier_ops {\n\tbool (*invalidate)(struct mmu_interval_notifier *, const struct mmu_notifier_range *, long unsigned int);\n};\n\nstruct mmu_interval_notifier {\n\tstruct interval_tree_node interval_tree;\n\tconst struct mmu_interval_notifier_ops *ops;\n\tstruct mm_struct *mm;\n\tstruct hlist_node deferred_item;\n\tlong unsigned int invalidate_seq;\n};\n\nstruct memory_notify {\n\tlong unsigned int start_pfn;\n\tlong unsigned int nr_pages;\n\tint status_change_nid_normal;\n\tint status_change_nid_high;\n\tint status_change_nid;\n};\n\nstruct rmap_item;\n\nstruct mm_slot {\n\tstruct hlist_node link;\n\tstruct list_head mm_list;\n\tstruct rmap_item *rmap_list;\n\tstruct mm_struct *mm;\n};\n\nstruct stable_node;\n\nstruct rmap_item {\n\tstruct rmap_item *rmap_list;\n\tunion {\n\t\tstruct anon_vma *anon_vma;\n\t\tint nid;\n\t};\n\tstruct mm_struct *mm;\n\tlong unsigned int address;\n\tunsigned int oldchecksum;\n\tunion {\n\t\tstruct rb_node node;\n\t\tstruct {\n\t\t\tstruct stable_node *head;\n\t\t\tstruct hlist_node hlist;\n\t\t};\n\t};\n};\n\nstruct ksm_scan {\n\tstruct mm_slot *mm_slot;\n\tlong unsigned int address;\n\tstruct rmap_item **rmap_list;\n\tlong unsigned int seqnr;\n};\n\nstruct stable_node {\n\tunion {\n\t\tstruct rb_node node;\n\t\tstruct {\n\t\t\tstruct list_head *head;\n\t\t\tstruct {\n\t\t\t\tstruct hlist_node hlist_dup;\n\t\t\t\tstruct list_head list;\n\t\t\t};\n\t\t};\n\t};\n\tstruct hlist_head hlist;\n\tunion {\n\t\tlong unsigned int kpfn;\n\t\tlong unsigned int chain_prune_time;\n\t};\n\tint rmap_hlist_len;\n\tint nid;\n};\n\nenum get_ksm_page_flags {\n\tGET_KSM_PAGE_NOLOCK = 0,\n\tGET_KSM_PAGE_LOCK = 1,\n\tGET_KSM_PAGE_TRYLOCK = 2,\n};\n\nenum stat_item {\n\tALLOC_FASTPATH = 0,\n\tALLOC_SLOWPATH = 1,\n\tFREE_FASTPATH = 2,\n\tFREE_SLOWPATH = 3,\n\tFREE_FROZEN = 4,\n\tFREE_ADD_PARTIAL = 5,\n\tFREE_REMOVE_PARTIAL = 6,\n\tALLOC_FROM_PARTIAL = 7,\n\tALLOC_SLAB = 8,\n\tALLOC_REFILL = 9,\n\tALLOC_NODE_MISMATCH = 10,\n\tFREE_SLAB = 11,\n\tCPUSLAB_FLUSH = 12,\n\tDEACTIVATE_FULL = 13,\n\tDEACTIVATE_EMPTY = 14,\n\tDEACTIVATE_TO_HEAD = 15,\n\tDEACTIVATE_TO_TAIL = 16,\n\tDEACTIVATE_REMOTE_FREES = 17,\n\tDEACTIVATE_BYPASS = 18,\n\tORDER_FALLBACK = 19,\n\tCMPXCHG_DOUBLE_CPU_FAIL = 20,\n\tCMPXCHG_DOUBLE_FAIL = 21,\n\tCPU_PARTIAL_ALLOC = 22,\n\tCPU_PARTIAL_FREE = 23,\n\tCPU_PARTIAL_NODE = 24,\n\tCPU_PARTIAL_DRAIN = 25,\n\tNR_SLUB_STAT_ITEMS = 26,\n};\n\nstruct track {\n\tlong unsigned int addr;\n\tlong unsigned int addrs[16];\n\tint cpu;\n\tint pid;\n\tlong unsigned int when;\n};\n\nenum track_item {\n\tTRACK_ALLOC = 0,\n\tTRACK_FREE = 1,\n};\n\nstruct detached_freelist {\n\tstruct page *page;\n\tvoid *tail;\n\tvoid *freelist;\n\tint cnt;\n\tstruct kmem_cache *s;\n};\n\nstruct location {\n\tlong unsigned int count;\n\tlong unsigned int addr;\n\tlong long int sum_time;\n\tlong int min_time;\n\tlong int max_time;\n\tlong int min_pid;\n\tlong int max_pid;\n\tlong unsigned int cpus[128];\n\tnodemask_t nodes;\n};\n\nstruct loc_track {\n\tlong unsigned int max;\n\tlong unsigned int count;\n\tstruct location *loc;\n};\n\nenum slab_stat_type {\n\tSL_ALL = 0,\n\tSL_PARTIAL = 1,\n\tSL_CPU = 2,\n\tSL_OBJECTS = 3,\n\tSL_TOTAL = 4,\n};\n\nstruct slab_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct kmem_cache *, char *);\n\tssize_t (*store)(struct kmem_cache *, const char *, size_t);\n};\n\nstruct saved_alias {\n\tstruct kmem_cache *s;\n\tconst char *name;\n\tstruct saved_alias *next;\n};\n\nenum slab_modes {\n\tM_NONE = 0,\n\tM_PARTIAL = 1,\n\tM_FULL = 2,\n\tM_FREE = 3,\n};\n\nenum {\n\tMMOP_OFFLINE = 0,\n\tMMOP_ONLINE = 1,\n\tMMOP_ONLINE_KERNEL = 2,\n\tMMOP_ONLINE_MOVABLE = 3,\n};\n\ntypedef int mhp_t;\n\ntypedef void (*online_page_callback_t)(struct page *, unsigned int);\n\nstruct memory_block {\n\tlong unsigned int start_section_nr;\n\tlong unsigned int state;\n\tint online_type;\n\tint nid;\n\tstruct device dev;\n};\n\ntypedef int (*walk_memory_blocks_func_t)(struct memory_block *, void *);\n\nstruct buffer_head;\n\ntypedef void bh_end_io_t(struct buffer_head *, int);\n\nstruct buffer_head {\n\tlong unsigned int b_state;\n\tstruct buffer_head *b_this_page;\n\tstruct page *b_page;\n\tsector_t b_blocknr;\n\tsize_t b_size;\n\tchar *b_data;\n\tstruct block_device *b_bdev;\n\tbh_end_io_t *b_end_io;\n\tvoid *b_private;\n\tstruct list_head b_assoc_buffers;\n\tstruct address_space *b_assoc_map;\n\tatomic_t b_count;\n\tspinlock_t b_uptodate_lock;\n};\n\nenum migrate_vma_direction {\n\tMIGRATE_VMA_SELECT_SYSTEM = 1,\n\tMIGRATE_VMA_SELECT_DEVICE_PRIVATE = 2,\n};\n\nstruct migrate_vma {\n\tstruct vm_area_struct *vma;\n\tlong unsigned int *dst;\n\tlong unsigned int *src;\n\tlong unsigned int cpages;\n\tlong unsigned int npages;\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tvoid *pgmap_owner;\n\tlong unsigned int flags;\n};\n\nenum bh_state_bits {\n\tBH_Uptodate = 0,\n\tBH_Dirty = 1,\n\tBH_Lock = 2,\n\tBH_Req = 3,\n\tBH_Mapped = 4,\n\tBH_New = 5,\n\tBH_Async_Read = 6,\n\tBH_Async_Write = 7,\n\tBH_Delay = 8,\n\tBH_Boundary = 9,\n\tBH_Write_EIO = 10,\n\tBH_Unwritten = 11,\n\tBH_Quiet = 12,\n\tBH_Meta = 13,\n\tBH_Prio = 14,\n\tBH_Defer_Completion = 15,\n\tBH_PrivateStart = 16,\n};\n\nstruct trace_event_raw_mm_migrate_pages {\n\tstruct trace_entry ent;\n\tlong unsigned int succeeded;\n\tlong unsigned int failed;\n\tlong unsigned int thp_succeeded;\n\tlong unsigned int thp_failed;\n\tlong unsigned int thp_split;\n\tenum migrate_mode mode;\n\tint reason;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mm_migrate_pages {};\n\ntypedef void (*btf_trace_mm_migrate_pages)(void *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, enum migrate_mode, int);\n\nenum scan_result {\n\tSCAN_FAIL = 0,\n\tSCAN_SUCCEED = 1,\n\tSCAN_PMD_NULL = 2,\n\tSCAN_EXCEED_NONE_PTE = 3,\n\tSCAN_EXCEED_SWAP_PTE = 4,\n\tSCAN_EXCEED_SHARED_PTE = 5,\n\tSCAN_PTE_NON_PRESENT = 6,\n\tSCAN_PTE_UFFD_WP = 7,\n\tSCAN_PAGE_RO = 8,\n\tSCAN_LACK_REFERENCED_PAGE = 9,\n\tSCAN_PAGE_NULL = 10,\n\tSCAN_SCAN_ABORT = 11,\n\tSCAN_PAGE_COUNT = 12,\n\tSCAN_PAGE_LRU = 13,\n\tSCAN_PAGE_LOCK = 14,\n\tSCAN_PAGE_ANON = 15,\n\tSCAN_PAGE_COMPOUND = 16,\n\tSCAN_ANY_PROCESS = 17,\n\tSCAN_VMA_NULL = 18,\n\tSCAN_VMA_CHECK = 19,\n\tSCAN_ADDRESS_RANGE = 20,\n\tSCAN_SWAP_CACHE_PAGE = 21,\n\tSCAN_DEL_PAGE_LRU = 22,\n\tSCAN_ALLOC_HUGE_PAGE_FAIL = 23,\n\tSCAN_CGROUP_CHARGE_FAIL = 24,\n\tSCAN_TRUNCATED = 25,\n\tSCAN_PAGE_HAS_PRIVATE = 26,\n};\n\nstruct trace_event_raw_mm_khugepaged_scan_pmd {\n\tstruct trace_entry ent;\n\tstruct mm_struct *mm;\n\tlong unsigned int pfn;\n\tbool writable;\n\tint referenced;\n\tint none_or_zero;\n\tint status;\n\tint unmapped;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_collapse_huge_page {\n\tstruct trace_entry ent;\n\tstruct mm_struct *mm;\n\tint isolated;\n\tint status;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_collapse_huge_page_isolate {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tint none_or_zero;\n\tint referenced;\n\tbool writable;\n\tint status;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_mm_collapse_huge_page_swapin {\n\tstruct trace_entry ent;\n\tstruct mm_struct *mm;\n\tint swapped_in;\n\tint referenced;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mm_khugepaged_scan_pmd {};\n\nstruct trace_event_data_offsets_mm_collapse_huge_page {};\n\nstruct trace_event_data_offsets_mm_collapse_huge_page_isolate {};\n\nstruct trace_event_data_offsets_mm_collapse_huge_page_swapin {};\n\ntypedef void (*btf_trace_mm_khugepaged_scan_pmd)(void *, struct mm_struct *, struct page *, bool, int, int, int, int);\n\ntypedef void (*btf_trace_mm_collapse_huge_page)(void *, struct mm_struct *, int, int);\n\ntypedef void (*btf_trace_mm_collapse_huge_page_isolate)(void *, struct page *, int, int, bool, int);\n\ntypedef void (*btf_trace_mm_collapse_huge_page_swapin)(void *, struct mm_struct *, int, int, int);\n\nstruct mm_slot___2 {\n\tstruct hlist_node hash;\n\tstruct list_head mm_node;\n\tstruct mm_struct *mm;\n\tint nr_pte_mapped_thp;\n\tlong unsigned int pte_mapped_thp[8];\n};\n\nstruct khugepaged_scan {\n\tstruct list_head mm_head;\n\tstruct mm_slot___2 *mm_slot;\n\tlong unsigned int address;\n};\n\nstruct mem_cgroup_tree_per_node {\n\tstruct rb_root rb_root;\n\tstruct rb_node *rb_rightmost;\n\tspinlock_t lock;\n};\n\nstruct mem_cgroup_tree {\n\tstruct mem_cgroup_tree_per_node *rb_tree_per_node[1024];\n};\n\nstruct mem_cgroup_eventfd_list {\n\tstruct list_head list;\n\tstruct eventfd_ctx *eventfd;\n};\n\nstruct mem_cgroup_event {\n\tstruct mem_cgroup *memcg;\n\tstruct eventfd_ctx *eventfd;\n\tstruct list_head list;\n\tint (*register_event)(struct mem_cgroup *, struct eventfd_ctx *, const char *);\n\tvoid (*unregister_event)(struct mem_cgroup *, struct eventfd_ctx *);\n\tpoll_table pt;\n\twait_queue_head_t *wqh;\n\twait_queue_entry_t wait;\n\tstruct work_struct remove;\n};\n\nstruct move_charge_struct {\n\tspinlock_t lock;\n\tstruct mm_struct *mm;\n\tstruct mem_cgroup *from;\n\tstruct mem_cgroup *to;\n\tlong unsigned int flags;\n\tlong unsigned int precharge;\n\tlong unsigned int moved_charge;\n\tlong unsigned int moved_swap;\n\tstruct task_struct *moving_task;\n\twait_queue_head_t waitq;\n};\n\nenum res_type {\n\t_MEM = 0,\n\t_MEMSWAP = 1,\n\t_OOM_TYPE = 2,\n\t_KMEM = 3,\n\t_TCP = 4,\n};\n\nstruct memory_stat {\n\tconst char *name;\n\tunsigned int ratio;\n\tunsigned int idx;\n};\n\nstruct oom_wait_info {\n\tstruct mem_cgroup *memcg;\n\twait_queue_entry_t wait;\n};\n\nenum oom_status {\n\tOOM_SUCCESS = 0,\n\tOOM_FAILED = 1,\n\tOOM_ASYNC = 2,\n\tOOM_SKIPPED = 3,\n};\n\nstruct memcg_stock_pcp {\n\tstruct mem_cgroup *cached;\n\tunsigned int nr_pages;\n\tstruct obj_cgroup *cached_objcg;\n\tunsigned int nr_bytes;\n\tstruct work_struct work;\n\tlong unsigned int flags;\n};\n\nenum {\n\tRES_USAGE = 0,\n\tRES_LIMIT = 1,\n\tRES_MAX_USAGE = 2,\n\tRES_FAILCNT = 3,\n\tRES_SOFT_LIMIT = 4,\n};\n\nunion mc_target {\n\tstruct page *page;\n\tswp_entry_t ent;\n};\n\nenum mc_target_type {\n\tMC_TARGET_NONE = 0,\n\tMC_TARGET_PAGE = 1,\n\tMC_TARGET_SWAP = 2,\n\tMC_TARGET_DEVICE = 3,\n};\n\nstruct uncharge_gather {\n\tstruct mem_cgroup *memcg;\n\tlong unsigned int nr_pages;\n\tlong unsigned int pgpgout;\n\tlong unsigned int nr_kmem;\n\tstruct page *dummy_page;\n};\n\nstruct numa_stat {\n\tconst char *name;\n\tunsigned int lru_mask;\n};\n\nenum vmpressure_levels {\n\tVMPRESSURE_LOW = 0,\n\tVMPRESSURE_MEDIUM = 1,\n\tVMPRESSURE_CRITICAL = 2,\n\tVMPRESSURE_NUM_LEVELS = 3,\n};\n\nenum vmpressure_modes {\n\tVMPRESSURE_NO_PASSTHROUGH = 0,\n\tVMPRESSURE_HIERARCHY = 1,\n\tVMPRESSURE_LOCAL = 2,\n\tVMPRESSURE_NUM_MODES = 3,\n};\n\nstruct vmpressure_event {\n\tstruct eventfd_ctx *efd;\n\tenum vmpressure_levels level;\n\tenum vmpressure_modes mode;\n\tstruct list_head node;\n};\n\nstruct swap_cgroup_ctrl {\n\tstruct page **map;\n\tlong unsigned int length;\n\tspinlock_t lock;\n};\n\nstruct swap_cgroup {\n\tshort unsigned int id;\n};\n\nenum {\n\tRES_USAGE___2 = 0,\n\tRES_RSVD_USAGE = 1,\n\tRES_LIMIT___2 = 2,\n\tRES_RSVD_LIMIT = 3,\n\tRES_MAX_USAGE___2 = 4,\n\tRES_RSVD_MAX_USAGE = 5,\n\tRES_FAILCNT___2 = 6,\n\tRES_RSVD_FAILCNT = 7,\n};\n\nenum mf_result {\n\tMF_IGNORED = 0,\n\tMF_FAILED = 1,\n\tMF_DELAYED = 2,\n\tMF_RECOVERED = 3,\n};\n\nenum mf_action_page_type {\n\tMF_MSG_KERNEL = 0,\n\tMF_MSG_KERNEL_HIGH_ORDER = 1,\n\tMF_MSG_SLAB = 2,\n\tMF_MSG_DIFFERENT_COMPOUND = 3,\n\tMF_MSG_POISONED_HUGE = 4,\n\tMF_MSG_HUGE = 5,\n\tMF_MSG_FREE_HUGE = 6,\n\tMF_MSG_NON_PMD_HUGE = 7,\n\tMF_MSG_UNMAP_FAILED = 8,\n\tMF_MSG_DIRTY_SWAPCACHE = 9,\n\tMF_MSG_CLEAN_SWAPCACHE = 10,\n\tMF_MSG_DIRTY_MLOCKED_LRU = 11,\n\tMF_MSG_CLEAN_MLOCKED_LRU = 12,\n\tMF_MSG_DIRTY_UNEVICTABLE_LRU = 13,\n\tMF_MSG_CLEAN_UNEVICTABLE_LRU = 14,\n\tMF_MSG_DIRTY_LRU = 15,\n\tMF_MSG_CLEAN_LRU = 16,\n\tMF_MSG_TRUNCATED_LRU = 17,\n\tMF_MSG_BUDDY = 18,\n\tMF_MSG_BUDDY_2ND = 19,\n\tMF_MSG_DAX = 20,\n\tMF_MSG_UNSPLIT_THP = 21,\n\tMF_MSG_UNKNOWN = 22,\n};\n\ntypedef long unsigned int dax_entry_t;\n\nstruct __kfifo {\n\tunsigned int in;\n\tunsigned int out;\n\tunsigned int mask;\n\tunsigned int esize;\n\tvoid *data;\n};\n\nstruct to_kill {\n\tstruct list_head nd;\n\tstruct task_struct *tsk;\n\tlong unsigned int addr;\n\tshort int size_shift;\n};\n\nstruct page_state {\n\tlong unsigned int mask;\n\tlong unsigned int res;\n\tenum mf_action_page_type type;\n\tint (*action)(struct page *, long unsigned int);\n};\n\nstruct memory_failure_entry {\n\tlong unsigned int pfn;\n\tint flags;\n};\n\nstruct memory_failure_cpu {\n\tstruct {\n\t\tunion {\n\t\t\tstruct __kfifo kfifo;\n\t\t\tstruct memory_failure_entry *type;\n\t\t\tconst struct memory_failure_entry *const_type;\n\t\t\tchar (*rectype)[0];\n\t\t\tstruct memory_failure_entry *ptr;\n\t\t\tconst struct memory_failure_entry *ptr_const;\n\t\t};\n\t\tstruct memory_failure_entry buf[16];\n\t} fifo;\n\tspinlock_t lock;\n\tstruct work_struct work;\n};\n\nstruct cleancache_filekey {\n\tunion {\n\t\tino_t ino;\n\t\t__u32 fh[6];\n\t\tu32 key[6];\n\t} u;\n};\n\nstruct cleancache_ops {\n\tint (*init_fs)(size_t);\n\tint (*init_shared_fs)(uuid_t *, size_t);\n\tint (*get_page)(int, struct cleancache_filekey, long unsigned int, struct page *);\n\tvoid (*put_page)(int, struct cleancache_filekey, long unsigned int, struct page *);\n\tvoid (*invalidate_page)(int, struct cleancache_filekey, long unsigned int);\n\tvoid (*invalidate_inode)(int, struct cleancache_filekey);\n\tvoid (*invalidate_fs)(int);\n};\n\nstruct trace_event_raw_test_pages_isolated {\n\tstruct trace_entry ent;\n\tlong unsigned int start_pfn;\n\tlong unsigned int end_pfn;\n\tlong unsigned int fin_pfn;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_test_pages_isolated {};\n\ntypedef void (*btf_trace_test_pages_isolated)(void *, long unsigned int, long unsigned int, long unsigned int);\n\nstruct zpool_driver;\n\nstruct zpool {\n\tstruct zpool_driver *driver;\n\tvoid *pool;\n\tconst struct zpool_ops *ops;\n\tbool evictable;\n\tstruct list_head list;\n};\n\nstruct zpool_driver {\n\tchar *type;\n\tstruct module *owner;\n\tatomic_t refcount;\n\tstruct list_head list;\n\tvoid * (*create)(const char *, gfp_t, const struct zpool_ops *, struct zpool *);\n\tvoid (*destroy)(void *);\n\tbool malloc_support_movable;\n\tint (*malloc)(void *, size_t, gfp_t, long unsigned int *);\n\tvoid (*free)(void *, long unsigned int);\n\tint (*shrink)(void *, unsigned int, unsigned int *);\n\tvoid * (*map)(void *, long unsigned int, enum zpool_mapmode);\n\tvoid (*unmap)(void *, long unsigned int);\n\tu64 (*total_size)(void *);\n};\n\nstruct zbud_pool;\n\nstruct zbud_ops {\n\tint (*evict)(struct zbud_pool *, long unsigned int);\n};\n\nstruct zbud_pool {\n\tspinlock_t lock;\n\tstruct list_head unbuddied[63];\n\tstruct list_head buddied;\n\tstruct list_head lru;\n\tu64 pages_nr;\n\tconst struct zbud_ops *ops;\n\tstruct zpool *zpool;\n\tconst struct zpool_ops *zpool_ops;\n};\n\nstruct zbud_header {\n\tstruct list_head buddy;\n\tstruct list_head lru;\n\tunsigned int first_chunks;\n\tunsigned int last_chunks;\n\tbool under_reclaim;\n};\n\nenum buddy {\n\tFIRST = 0,\n\tLAST = 1,\n};\n\nenum zs_mapmode {\n\tZS_MM_RW = 0,\n\tZS_MM_RO = 1,\n\tZS_MM_WO = 2,\n};\n\nstruct zs_pool_stats {\n\tatomic_long_t pages_compacted;\n};\n\nstruct pseudo_fs_context {\n\tconst struct super_operations *ops;\n\tconst struct xattr_handler **xattr;\n\tconst struct dentry_operations *dops;\n\tlong unsigned int magic;\n};\n\nenum fullness_group {\n\tZS_EMPTY = 0,\n\tZS_ALMOST_EMPTY = 1,\n\tZS_ALMOST_FULL = 2,\n\tZS_FULL = 3,\n\tNR_ZS_FULLNESS = 4,\n};\n\nenum zs_stat_type {\n\tCLASS_EMPTY = 0,\n\tCLASS_ALMOST_EMPTY = 1,\n\tCLASS_ALMOST_FULL = 2,\n\tCLASS_FULL = 3,\n\tOBJ_ALLOCATED = 4,\n\tOBJ_USED = 5,\n\tNR_ZS_STAT_TYPE = 6,\n};\n\nstruct zs_size_stat {\n\tlong unsigned int objs[6];\n};\n\nstruct size_class {\n\tspinlock_t lock;\n\tstruct list_head fullness_list[4];\n\tint size;\n\tint objs_per_zspage;\n\tint pages_per_zspage;\n\tunsigned int index;\n\tstruct zs_size_stat stats;\n};\n\nstruct link_free {\n\tunion {\n\t\tlong unsigned int next;\n\t\tlong unsigned int handle;\n\t};\n};\n\nstruct zs_pool {\n\tconst char *name;\n\tstruct size_class *size_class[255];\n\tstruct kmem_cache *handle_cachep;\n\tstruct kmem_cache *zspage_cachep;\n\tatomic_long_t pages_allocated;\n\tstruct zs_pool_stats stats;\n\tstruct shrinker shrinker;\n\tstruct inode *inode;\n\tstruct work_struct free_work;\n\tstruct wait_queue_head migration_wait;\n\tatomic_long_t isolated_pages;\n\tbool destroying;\n};\n\nstruct zspage {\n\tstruct {\n\t\tunsigned int fullness: 2;\n\t\tunsigned int class: 9;\n\t\tunsigned int isolated: 3;\n\t\tunsigned int magic: 8;\n\t};\n\tunsigned int inuse;\n\tunsigned int freeobj;\n\tstruct page *first_page;\n\tstruct list_head list;\n\trwlock_t lock;\n};\n\nstruct mapping_area {\n\tchar *vm_buf;\n\tchar *vm_addr;\n\tenum zs_mapmode vm_mm;\n};\n\nstruct zs_compact_control {\n\tstruct page *s_page;\n\tstruct page *d_page;\n\tint obj_idx;\n};\n\nstruct z3fold_pool;\n\nstruct z3fold_ops {\n\tint (*evict)(struct z3fold_pool *, long unsigned int);\n};\n\nstruct z3fold_pool {\n\tconst char *name;\n\tspinlock_t lock;\n\tspinlock_t stale_lock;\n\tstruct list_head *unbuddied;\n\tstruct list_head lru;\n\tstruct list_head stale;\n\tatomic64_t pages_nr;\n\tstruct kmem_cache *c_handle;\n\tconst struct z3fold_ops *ops;\n\tstruct zpool *zpool;\n\tconst struct zpool_ops *zpool_ops;\n\tstruct workqueue_struct *compact_wq;\n\tstruct workqueue_struct *release_wq;\n\tstruct work_struct work;\n\tstruct inode *inode;\n};\n\nenum buddy___2 {\n\tHEADLESS = 0,\n\tFIRST___2 = 1,\n\tMIDDLE = 2,\n\tLAST___2 = 3,\n\tBUDDIES_MAX = 3,\n};\n\nstruct z3fold_buddy_slots {\n\tlong unsigned int slot[4];\n\tlong unsigned int pool;\n\trwlock_t lock;\n};\n\nstruct z3fold_header {\n\tstruct list_head buddy;\n\tspinlock_t page_lock;\n\tstruct kref refcount;\n\tstruct work_struct work;\n\tstruct z3fold_buddy_slots *slots;\n\tstruct z3fold_pool *pool;\n\tshort int cpu;\n\tshort unsigned int first_chunks;\n\tshort unsigned int middle_chunks;\n\tshort unsigned int last_chunks;\n\tshort unsigned int start_middle;\n\tshort unsigned int first_num: 2;\n\tshort unsigned int mapped_count: 2;\n\tshort unsigned int foreign_handles: 2;\n};\n\nenum z3fold_page_flags {\n\tPAGE_HEADLESS = 0,\n\tMIDDLE_CHUNK_MAPPED = 1,\n\tNEEDS_COMPACTING = 2,\n\tPAGE_STALE = 3,\n\tPAGE_CLAIMED = 4,\n};\n\nenum z3fold_handle_flags {\n\tHANDLES_NOFREE = 0,\n};\n\nstruct trace_event_raw_cma_alloc {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tconst struct page *page;\n\tunsigned int count;\n\tunsigned int align;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_cma_release {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tconst struct page *page;\n\tunsigned int count;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_cma_alloc {};\n\nstruct trace_event_data_offsets_cma_release {};\n\ntypedef void (*btf_trace_cma_alloc)(void *, long unsigned int, const struct page *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_cma_release)(void *, long unsigned int, const struct page *, unsigned int);\n\nstruct balloon_dev_info {\n\tlong unsigned int isolated_pages;\n\tspinlock_t pages_lock;\n\tstruct list_head pages;\n\tint (*migratepage)(struct balloon_dev_info *, struct page *, struct page *, enum migrate_mode);\n\tstruct inode *inode;\n};\n\nstruct frame_vector {\n\tunsigned int nr_allocated;\n\tunsigned int nr_frames;\n\tbool got_ref;\n\tbool is_pfns;\n\tvoid *ptrs[0];\n};\n\nenum {\n\tBAD_STACK = 4294967295,\n\tNOT_STACK = 0,\n\tGOOD_FRAME = 1,\n\tGOOD_STACK = 2,\n};\n\nenum hmm_pfn_flags {\n\tHMM_PFN_VALID = 0,\n\tHMM_PFN_WRITE = 0,\n\tHMM_PFN_ERROR = 0,\n\tHMM_PFN_ORDER_SHIFT = 56,\n\tHMM_PFN_REQ_FAULT = 0,\n\tHMM_PFN_REQ_WRITE = 0,\n\tHMM_PFN_FLAGS = 0,\n};\n\nstruct hmm_range {\n\tstruct mmu_interval_notifier *notifier;\n\tlong unsigned int notifier_seq;\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tlong unsigned int *hmm_pfns;\n\tlong unsigned int default_flags;\n\tlong unsigned int pfn_flags_mask;\n\tvoid *dev_private_owner;\n};\n\nstruct hmm_vma_walk {\n\tstruct hmm_range *range;\n\tlong unsigned int last;\n};\n\nenum {\n\tHMM_NEED_FAULT = 1,\n\tHMM_NEED_WRITE_FAULT = 2,\n\tHMM_NEED_ALL_BITS = 3,\n};\n\nstruct hugetlbfs_inode_info {\n\tstruct shared_policy policy;\n\tstruct inode vfs_inode;\n\tunsigned int seals;\n};\n\nstruct wp_walk {\n\tstruct mmu_notifier_range range;\n\tlong unsigned int tlbflush_start;\n\tlong unsigned int tlbflush_end;\n\tlong unsigned int total;\n};\n\nstruct clean_walk {\n\tstruct wp_walk base;\n\tlong unsigned int bitmap_pgoff;\n\tlong unsigned int *bitmap;\n\tlong unsigned int start;\n\tlong unsigned int end;\n};\n\nstruct page_reporting_dev_info {\n\tint (*report)(struct page_reporting_dev_info *, struct scatterlist *, unsigned int);\n\tstruct delayed_work work;\n\tatomic_t state;\n};\n\nenum {\n\tPAGE_REPORTING_IDLE = 0,\n\tPAGE_REPORTING_REQUESTED = 1,\n\tPAGE_REPORTING_ACTIVE = 2,\n};\n\nstruct open_how {\n\t__u64 flags;\n\t__u64 mode;\n\t__u64 resolve;\n};\n\ntypedef s32 compat_off_t;\n\nstruct open_flags {\n\tint open_flag;\n\tumode_t mode;\n\tint acc_mode;\n\tint intent;\n\tint lookup_flags;\n};\n\ntypedef __kernel_long_t __kernel_off_t;\n\ntypedef __kernel_off_t off_t;\n\ntypedef __kernel_rwf_t rwf_t;\n\nstruct fscrypt_policy_v1 {\n\t__u8 version;\n\t__u8 contents_encryption_mode;\n\t__u8 filenames_encryption_mode;\n\t__u8 flags;\n\t__u8 master_key_descriptor[8];\n};\n\nstruct fscrypt_policy_v2 {\n\t__u8 version;\n\t__u8 contents_encryption_mode;\n\t__u8 filenames_encryption_mode;\n\t__u8 flags;\n\t__u8 __reserved[4];\n\t__u8 master_key_identifier[16];\n};\n\nunion fscrypt_policy {\n\tu8 version;\n\tstruct fscrypt_policy_v1 v1;\n\tstruct fscrypt_policy_v2 v2;\n};\n\nenum vfs_get_super_keying {\n\tvfs_get_single_super = 0,\n\tvfs_get_single_reconf_super = 1,\n\tvfs_get_keyed_super = 2,\n\tvfs_get_independent_super = 3,\n};\n\ntypedef struct kobject *kobj_probe_t(dev_t, int *, void *);\n\nstruct kobj_map;\n\nstruct char_device_struct {\n\tstruct char_device_struct *next;\n\tunsigned int major;\n\tunsigned int baseminor;\n\tint minorct;\n\tchar name[64];\n\tstruct cdev *cdev;\n};\n\nstruct stat {\n\t__kernel_ulong_t st_dev;\n\t__kernel_ulong_t st_ino;\n\t__kernel_ulong_t st_nlink;\n\tunsigned int st_mode;\n\tunsigned int st_uid;\n\tunsigned int st_gid;\n\tunsigned int __pad0;\n\t__kernel_ulong_t st_rdev;\n\t__kernel_long_t st_size;\n\t__kernel_long_t st_blksize;\n\t__kernel_long_t st_blocks;\n\t__kernel_ulong_t st_atime;\n\t__kernel_ulong_t st_atime_nsec;\n\t__kernel_ulong_t st_mtime;\n\t__kernel_ulong_t st_mtime_nsec;\n\t__kernel_ulong_t st_ctime;\n\t__kernel_ulong_t st_ctime_nsec;\n\t__kernel_long_t __unused[3];\n};\n\nstruct __old_kernel_stat {\n\tshort unsigned int st_dev;\n\tshort unsigned int st_ino;\n\tshort unsigned int st_mode;\n\tshort unsigned int st_nlink;\n\tshort unsigned int st_uid;\n\tshort unsigned int st_gid;\n\tshort unsigned int st_rdev;\n\tunsigned int st_size;\n\tunsigned int st_atime;\n\tunsigned int st_mtime;\n\tunsigned int st_ctime;\n};\n\nstruct statx_timestamp {\n\t__s64 tv_sec;\n\t__u32 tv_nsec;\n\t__s32 __reserved;\n};\n\nstruct statx {\n\t__u32 stx_mask;\n\t__u32 stx_blksize;\n\t__u64 stx_attributes;\n\t__u32 stx_nlink;\n\t__u32 stx_uid;\n\t__u32 stx_gid;\n\t__u16 stx_mode;\n\t__u16 __spare0[1];\n\t__u64 stx_ino;\n\t__u64 stx_size;\n\t__u64 stx_blocks;\n\t__u64 stx_attributes_mask;\n\tstruct statx_timestamp stx_atime;\n\tstruct statx_timestamp stx_btime;\n\tstruct statx_timestamp stx_ctime;\n\tstruct statx_timestamp stx_mtime;\n\t__u32 stx_rdev_major;\n\t__u32 stx_rdev_minor;\n\t__u32 stx_dev_major;\n\t__u32 stx_dev_minor;\n\t__u64 stx_mnt_id;\n\t__u64 __spare2;\n\t__u64 __spare3[12];\n};\n\nstruct mount;\n\nstruct mnt_namespace {\n\tstruct ns_common ns;\n\tstruct mount *root;\n\tstruct list_head list;\n\tspinlock_t ns_lock;\n\tstruct user_namespace *user_ns;\n\tstruct ucounts *ucounts;\n\tu64 seq;\n\twait_queue_head_t poll;\n\tu64 event;\n\tunsigned int mounts;\n\tunsigned int pending_mounts;\n};\n\ntypedef u32 compat_ino_t;\n\ntypedef u16 __compat_uid_t;\n\ntypedef u16 __compat_gid_t;\n\ntypedef u16 compat_mode_t;\n\ntypedef u16 compat_dev_t;\n\ntypedef u16 compat_nlink_t;\n\nstruct compat_stat {\n\tcompat_dev_t st_dev;\n\tu16 __pad1;\n\tcompat_ino_t st_ino;\n\tcompat_mode_t st_mode;\n\tcompat_nlink_t st_nlink;\n\t__compat_uid_t st_uid;\n\t__compat_gid_t st_gid;\n\tcompat_dev_t st_rdev;\n\tu16 __pad2;\n\tu32 st_size;\n\tu32 st_blksize;\n\tu32 st_blocks;\n\tu32 st_atime;\n\tu32 st_atime_nsec;\n\tu32 st_mtime;\n\tu32 st_mtime_nsec;\n\tu32 st_ctime;\n\tu32 st_ctime_nsec;\n\tu32 __unused4;\n\tu32 __unused5;\n};\n\nstruct mnt_pcp;\n\nstruct mountpoint;\n\nstruct mount {\n\tstruct hlist_node mnt_hash;\n\tstruct mount *mnt_parent;\n\tstruct dentry *mnt_mountpoint;\n\tstruct vfsmount mnt;\n\tunion {\n\t\tstruct callback_head mnt_rcu;\n\t\tstruct llist_node mnt_llist;\n\t};\n\tstruct mnt_pcp *mnt_pcp;\n\tstruct list_head mnt_mounts;\n\tstruct list_head mnt_child;\n\tstruct list_head mnt_instance;\n\tconst char *mnt_devname;\n\tstruct list_head mnt_list;\n\tstruct list_head mnt_expire;\n\tstruct list_head mnt_share;\n\tstruct list_head mnt_slave_list;\n\tstruct list_head mnt_slave;\n\tstruct mount *mnt_master;\n\tstruct mnt_namespace *mnt_ns;\n\tstruct mountpoint *mnt_mp;\n\tunion {\n\t\tstruct hlist_node mnt_mp_list;\n\t\tstruct hlist_node mnt_umount;\n\t};\n\tstruct list_head mnt_umounting;\n\tstruct fsnotify_mark_connector *mnt_fsnotify_marks;\n\t__u32 mnt_fsnotify_mask;\n\tint mnt_id;\n\tint mnt_group_id;\n\tint mnt_expiry_mark;\n\tstruct hlist_head mnt_pins;\n\tstruct hlist_head mnt_stuck_children;\n};\n\nstruct mnt_pcp {\n\tint mnt_count;\n\tint mnt_writers;\n};\n\nstruct mountpoint {\n\tstruct hlist_node m_hash;\n\tstruct dentry *m_dentry;\n\tstruct hlist_head m_list;\n\tint m_count;\n};\n\ntypedef short unsigned int ushort;\n\nstruct user_arg_ptr {\n\tbool is_compat;\n\tunion {\n\t\tconst char * const *native;\n\t\tconst compat_uptr_t *compat;\n\t} ptr;\n};\n\nenum inode_i_mutex_lock_class {\n\tI_MUTEX_NORMAL = 0,\n\tI_MUTEX_PARENT = 1,\n\tI_MUTEX_CHILD = 2,\n\tI_MUTEX_XATTR = 3,\n\tI_MUTEX_NONDIR2 = 4,\n\tI_MUTEX_PARENT2 = 5,\n};\n\nstruct name_snapshot {\n\tstruct qstr name;\n\tunsigned char inline_name[32];\n};\n\nstruct saved {\n\tstruct path link;\n\tstruct delayed_call done;\n\tconst char *name;\n\tunsigned int seq;\n};\n\nstruct nameidata {\n\tstruct path path;\n\tstruct qstr last;\n\tstruct path root;\n\tstruct inode *inode;\n\tunsigned int flags;\n\tunsigned int seq;\n\tunsigned int m_seq;\n\tunsigned int r_seq;\n\tint last_type;\n\tunsigned int depth;\n\tint total_link_count;\n\tstruct saved *stack;\n\tstruct saved internal[2];\n\tstruct filename *name;\n\tstruct nameidata *saved;\n\tunsigned int root_seq;\n\tint dfd;\n\tkuid_t dir_uid;\n\tumode_t dir_mode;\n};\n\nenum {\n\tLAST_NORM = 0,\n\tLAST_ROOT = 1,\n\tLAST_DOT = 2,\n\tLAST_DOTDOT = 3,\n};\n\nenum {\n\tWALK_TRAILING = 1,\n\tWALK_MORE = 2,\n\tWALK_NOFOLLOW = 4,\n};\n\nstruct word_at_a_time {\n\tconst long unsigned int one_bits;\n\tconst long unsigned int high_bits;\n};\n\nstruct f_owner_ex {\n\tint type;\n\t__kernel_pid_t pid;\n};\n\nstruct flock {\n\tshort int l_type;\n\tshort int l_whence;\n\t__kernel_off_t l_start;\n\t__kernel_off_t l_len;\n\t__kernel_pid_t l_pid;\n};\n\nstruct compat_flock {\n\tshort int l_type;\n\tshort int l_whence;\n\tcompat_off_t l_start;\n\tcompat_off_t l_len;\n\tcompat_pid_t l_pid;\n};\n\nstruct compat_flock64 {\n\tshort int l_type;\n\tshort int l_whence;\n\tcompat_loff_t l_start;\n\tcompat_loff_t l_len;\n\tcompat_pid_t l_pid;\n} __attribute__((packed));\n\nstruct file_clone_range {\n\t__s64 src_fd;\n\t__u64 src_offset;\n\t__u64 src_length;\n\t__u64 dest_offset;\n};\n\nstruct file_dedupe_range_info {\n\t__s64 dest_fd;\n\t__u64 dest_offset;\n\t__u64 bytes_deduped;\n\t__s32 status;\n\t__u32 reserved;\n};\n\nstruct file_dedupe_range {\n\t__u64 src_offset;\n\t__u64 src_length;\n\t__u16 dest_count;\n\t__u16 reserved1;\n\t__u32 reserved2;\n\tstruct file_dedupe_range_info info[0];\n};\n\ntypedef int get_block_t(struct inode *, sector_t, struct buffer_head *, int);\n\nstruct fiemap_extent;\n\nstruct fiemap_extent_info {\n\tunsigned int fi_flags;\n\tunsigned int fi_extents_mapped;\n\tunsigned int fi_extents_max;\n\tstruct fiemap_extent *fi_extents_start;\n};\n\nstruct space_resv {\n\t__s16 l_type;\n\t__s16 l_whence;\n\t__s64 l_start;\n\t__s64 l_len;\n\t__s32 l_sysid;\n\t__u32 l_pid;\n\t__s32 l_pad[4];\n};\n\nstruct space_resv_32 {\n\t__s16 l_type;\n\t__s16 l_whence;\n\t__s64 l_start;\n\t__s64 l_len;\n\t__s32 l_sysid;\n\t__u32 l_pid;\n\t__s32 l_pad[4];\n} __attribute__((packed));\n\nstruct fiemap_extent {\n\t__u64 fe_logical;\n\t__u64 fe_physical;\n\t__u64 fe_length;\n\t__u64 fe_reserved64[2];\n\t__u32 fe_flags;\n\t__u32 fe_reserved[3];\n};\n\nstruct fiemap {\n\t__u64 fm_start;\n\t__u64 fm_length;\n\t__u32 fm_flags;\n\t__u32 fm_mapped_extents;\n\t__u32 fm_extent_count;\n\t__u32 fm_reserved;\n\tstruct fiemap_extent fm_extents[0];\n};\n\nstruct linux_dirent64 {\n\tu64 d_ino;\n\ts64 d_off;\n\tshort unsigned int d_reclen;\n\tunsigned char d_type;\n\tchar d_name[0];\n};\n\nstruct old_linux_dirent {\n\tlong unsigned int d_ino;\n\tlong unsigned int d_offset;\n\tshort unsigned int d_namlen;\n\tchar d_name[1];\n};\n\nstruct readdir_callback {\n\tstruct dir_context ctx;\n\tstruct old_linux_dirent *dirent;\n\tint result;\n};\n\nstruct linux_dirent {\n\tlong unsigned int d_ino;\n\tlong unsigned int d_off;\n\tshort unsigned int d_reclen;\n\tchar d_name[1];\n};\n\nstruct getdents_callback {\n\tstruct dir_context ctx;\n\tstruct linux_dirent *current_dir;\n\tint prev_reclen;\n\tint count;\n\tint error;\n};\n\nstruct getdents_callback64 {\n\tstruct dir_context ctx;\n\tstruct linux_dirent64 *current_dir;\n\tint prev_reclen;\n\tint count;\n\tint error;\n};\n\nstruct compat_old_linux_dirent {\n\tcompat_ulong_t d_ino;\n\tcompat_ulong_t d_offset;\n\tshort unsigned int d_namlen;\n\tchar d_name[1];\n};\n\nstruct compat_readdir_callback {\n\tstruct dir_context ctx;\n\tstruct compat_old_linux_dirent *dirent;\n\tint result;\n};\n\nstruct compat_linux_dirent {\n\tcompat_ulong_t d_ino;\n\tcompat_ulong_t d_off;\n\tshort unsigned int d_reclen;\n\tchar d_name[1];\n};\n\nstruct compat_getdents_callback {\n\tstruct dir_context ctx;\n\tstruct compat_linux_dirent *current_dir;\n\tint prev_reclen;\n\tint count;\n\tint error;\n};\n\ntypedef struct {\n\tlong unsigned int fds_bits[16];\n} __kernel_fd_set;\n\ntypedef __kernel_fd_set fd_set;\n\nstruct poll_table_entry {\n\tstruct file *filp;\n\t__poll_t key;\n\twait_queue_entry_t wait;\n\twait_queue_head_t *wait_address;\n};\n\nstruct poll_table_page;\n\nstruct poll_wqueues {\n\tpoll_table pt;\n\tstruct poll_table_page *table;\n\tstruct task_struct *polling_task;\n\tint triggered;\n\tint error;\n\tint inline_index;\n\tstruct poll_table_entry inline_entries[9];\n};\n\nstruct poll_table_page {\n\tstruct poll_table_page *next;\n\tstruct poll_table_entry *entry;\n\tstruct poll_table_entry entries[0];\n};\n\nenum poll_time_type {\n\tPT_TIMEVAL = 0,\n\tPT_OLD_TIMEVAL = 1,\n\tPT_TIMESPEC = 2,\n\tPT_OLD_TIMESPEC = 3,\n};\n\ntypedef struct {\n\tlong unsigned int *in;\n\tlong unsigned int *out;\n\tlong unsigned int *ex;\n\tlong unsigned int *res_in;\n\tlong unsigned int *res_out;\n\tlong unsigned int *res_ex;\n} fd_set_bits;\n\nstruct sigset_argpack {\n\tsigset_t *p;\n\tsize_t size;\n};\n\nstruct poll_list {\n\tstruct poll_list *next;\n\tint len;\n\tstruct pollfd entries[0];\n};\n\nstruct compat_sel_arg_struct {\n\tcompat_ulong_t n;\n\tcompat_uptr_t inp;\n\tcompat_uptr_t outp;\n\tcompat_uptr_t exp;\n\tcompat_uptr_t tvp;\n};\n\nstruct compat_sigset_argpack {\n\tcompat_uptr_t p;\n\tcompat_size_t size;\n};\n\nenum dentry_d_lock_class {\n\tDENTRY_D_LOCK_NORMAL = 0,\n\tDENTRY_D_LOCK_NESTED = 1,\n};\n\nstruct external_name {\n\tunion {\n\t\tatomic_t count;\n\t\tstruct callback_head head;\n\t} u;\n\tunsigned char name[0];\n};\n\nenum d_walk_ret {\n\tD_WALK_CONTINUE = 0,\n\tD_WALK_QUIT = 1,\n\tD_WALK_NORETRY = 2,\n\tD_WALK_SKIP = 3,\n};\n\nstruct check_mount {\n\tstruct vfsmount *mnt;\n\tunsigned int mounted;\n};\n\nstruct select_data {\n\tstruct dentry *start;\n\tunion {\n\t\tlong int found;\n\t\tstruct dentry *victim;\n\t};\n\tstruct list_head dispose;\n};\n\nstruct fsxattr {\n\t__u32 fsx_xflags;\n\t__u32 fsx_extsize;\n\t__u32 fsx_nextents;\n\t__u32 fsx_projid;\n\t__u32 fsx_cowextsize;\n\tunsigned char fsx_pad[8];\n};\n\nenum file_time_flags {\n\tS_ATIME = 1,\n\tS_MTIME = 2,\n\tS_CTIME = 4,\n\tS_VERSION = 8,\n};\n\nstruct proc_mounts {\n\tstruct mnt_namespace *ns;\n\tstruct path root;\n\tint (*show)(struct seq_file *, struct vfsmount *);\n\tstruct mount cursor;\n};\n\nenum umount_tree_flags {\n\tUMOUNT_SYNC = 1,\n\tUMOUNT_PROPAGATE = 2,\n\tUMOUNT_CONNECTED = 4,\n};\n\nstruct unicode_map {\n\tconst char *charset;\n\tint version;\n};\n\nstruct simple_transaction_argresp {\n\tssize_t size;\n\tchar data[0];\n};\n\nstruct simple_attr {\n\tint (*get)(void *, u64 *);\n\tint (*set)(void *, u64);\n\tchar get_buf[24];\n\tchar set_buf[24];\n\tvoid *data;\n\tconst char *fmt;\n\tstruct mutex mutex;\n};\n\nstruct wb_writeback_work {\n\tlong int nr_pages;\n\tstruct super_block *sb;\n\tenum writeback_sync_modes sync_mode;\n\tunsigned int tagged_writepages: 1;\n\tunsigned int for_kupdate: 1;\n\tunsigned int range_cyclic: 1;\n\tunsigned int for_background: 1;\n\tunsigned int for_sync: 1;\n\tunsigned int auto_free: 1;\n\tenum wb_reason reason;\n\tstruct list_head list;\n\tstruct wb_completion *done;\n};\n\nstruct trace_event_raw_writeback_page_template {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tino_t ino;\n\tlong unsigned int index;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_dirty_inode_template {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tino_t ino;\n\tlong unsigned int state;\n\tlong unsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_inode_foreign_history {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tino_t ino;\n\tino_t cgroup_ino;\n\tunsigned int history;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_inode_switch_wbs {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tino_t ino;\n\tino_t old_cgroup_ino;\n\tino_t new_cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_track_foreign_dirty {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tu64 bdi_id;\n\tino_t ino;\n\tunsigned int memcg_id;\n\tino_t cgroup_ino;\n\tino_t page_cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_flush_foreign {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tino_t cgroup_ino;\n\tunsigned int frn_bdi_id;\n\tunsigned int frn_memcg_id;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_write_inode_template {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tino_t ino;\n\tint sync_mode;\n\tino_t cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_work_class {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tlong int nr_pages;\n\tdev_t sb_dev;\n\tint sync_mode;\n\tint for_kupdate;\n\tint range_cyclic;\n\tint for_background;\n\tint reason;\n\tino_t cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_pages_written {\n\tstruct trace_entry ent;\n\tlong int pages;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_class {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tino_t cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_bdi_register {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_wbc_class {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tlong int nr_to_write;\n\tlong int pages_skipped;\n\tint sync_mode;\n\tint for_kupdate;\n\tint for_background;\n\tint for_reclaim;\n\tint range_cyclic;\n\tlong int range_start;\n\tlong int range_end;\n\tino_t cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_queue_io {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tlong unsigned int older;\n\tlong int age;\n\tint moved;\n\tint reason;\n\tino_t cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_global_dirty_state {\n\tstruct trace_entry ent;\n\tlong unsigned int nr_dirty;\n\tlong unsigned int nr_writeback;\n\tlong unsigned int background_thresh;\n\tlong unsigned int dirty_thresh;\n\tlong unsigned int dirty_limit;\n\tlong unsigned int nr_dirtied;\n\tlong unsigned int nr_written;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_bdi_dirty_ratelimit {\n\tstruct trace_entry ent;\n\tchar bdi[32];\n\tlong unsigned int write_bw;\n\tlong unsigned int avg_write_bw;\n\tlong unsigned int dirty_rate;\n\tlong unsigned int dirty_ratelimit;\n\tlong unsigned int task_ratelimit;\n\tlong unsigned int balanced_dirty_ratelimit;\n\tino_t cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_balance_dirty_pages {\n\tstruct trace_entry ent;\n\tchar bdi[32];\n\tlong unsigned int limit;\n\tlong unsigned int setpoint;\n\tlong unsigned int dirty;\n\tlong unsigned int bdi_setpoint;\n\tlong unsigned int bdi_dirty;\n\tlong unsigned int dirty_ratelimit;\n\tlong unsigned int task_ratelimit;\n\tunsigned int dirtied;\n\tunsigned int dirtied_pause;\n\tlong unsigned int paused;\n\tlong int pause;\n\tlong unsigned int period;\n\tlong int think;\n\tino_t cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_sb_inodes_requeue {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tino_t ino;\n\tlong unsigned int state;\n\tlong unsigned int dirtied_when;\n\tino_t cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_congest_waited_template {\n\tstruct trace_entry ent;\n\tunsigned int usec_timeout;\n\tunsigned int usec_delayed;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_single_inode_template {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tino_t ino;\n\tlong unsigned int state;\n\tlong unsigned int dirtied_when;\n\tlong unsigned int writeback_index;\n\tlong int nr_to_write;\n\tlong unsigned int wrote;\n\tino_t cgroup_ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_writeback_inode_template {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tlong unsigned int state;\n\t__u16 mode;\n\tlong unsigned int dirtied_when;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_writeback_page_template {};\n\nstruct trace_event_data_offsets_writeback_dirty_inode_template {};\n\nstruct trace_event_data_offsets_inode_foreign_history {};\n\nstruct trace_event_data_offsets_inode_switch_wbs {};\n\nstruct trace_event_data_offsets_track_foreign_dirty {};\n\nstruct trace_event_data_offsets_flush_foreign {};\n\nstruct trace_event_data_offsets_writeback_write_inode_template {};\n\nstruct trace_event_data_offsets_writeback_work_class {};\n\nstruct trace_event_data_offsets_writeback_pages_written {};\n\nstruct trace_event_data_offsets_writeback_class {};\n\nstruct trace_event_data_offsets_writeback_bdi_register {};\n\nstruct trace_event_data_offsets_wbc_class {};\n\nstruct trace_event_data_offsets_writeback_queue_io {};\n\nstruct trace_event_data_offsets_global_dirty_state {};\n\nstruct trace_event_data_offsets_bdi_dirty_ratelimit {};\n\nstruct trace_event_data_offsets_balance_dirty_pages {};\n\nstruct trace_event_data_offsets_writeback_sb_inodes_requeue {};\n\nstruct trace_event_data_offsets_writeback_congest_waited_template {};\n\nstruct trace_event_data_offsets_writeback_single_inode_template {};\n\nstruct trace_event_data_offsets_writeback_inode_template {};\n\ntypedef void (*btf_trace_writeback_dirty_page)(void *, struct page *, struct address_space *);\n\ntypedef void (*btf_trace_wait_on_page_writeback)(void *, struct page *, struct address_space *);\n\ntypedef void (*btf_trace_writeback_mark_inode_dirty)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_writeback_dirty_inode_start)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_writeback_dirty_inode)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_inode_foreign_history)(void *, struct inode *, struct writeback_control *, unsigned int);\n\ntypedef void (*btf_trace_inode_switch_wbs)(void *, struct inode *, struct bdi_writeback *, struct bdi_writeback *);\n\ntypedef void (*btf_trace_track_foreign_dirty)(void *, struct page *, struct bdi_writeback *);\n\ntypedef void (*btf_trace_flush_foreign)(void *, struct bdi_writeback *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_writeback_write_inode_start)(void *, struct inode *, struct writeback_control *);\n\ntypedef void (*btf_trace_writeback_write_inode)(void *, struct inode *, struct writeback_control *);\n\ntypedef void (*btf_trace_writeback_queue)(void *, struct bdi_writeback *, struct wb_writeback_work *);\n\ntypedef void (*btf_trace_writeback_exec)(void *, struct bdi_writeback *, struct wb_writeback_work *);\n\ntypedef void (*btf_trace_writeback_start)(void *, struct bdi_writeback *, struct wb_writeback_work *);\n\ntypedef void (*btf_trace_writeback_written)(void *, struct bdi_writeback *, struct wb_writeback_work *);\n\ntypedef void (*btf_trace_writeback_wait)(void *, struct bdi_writeback *, struct wb_writeback_work *);\n\ntypedef void (*btf_trace_writeback_pages_written)(void *, long int);\n\ntypedef void (*btf_trace_writeback_wake_background)(void *, struct bdi_writeback *);\n\ntypedef void (*btf_trace_writeback_bdi_register)(void *, struct backing_dev_info *);\n\ntypedef void (*btf_trace_wbc_writepage)(void *, struct writeback_control *, struct backing_dev_info *);\n\ntypedef void (*btf_trace_writeback_queue_io)(void *, struct bdi_writeback *, struct wb_writeback_work *, long unsigned int, int);\n\ntypedef void (*btf_trace_global_dirty_state)(void *, long unsigned int, long unsigned int);\n\ntypedef void (*btf_trace_bdi_dirty_ratelimit)(void *, struct bdi_writeback *, long unsigned int, long unsigned int);\n\ntypedef void (*btf_trace_balance_dirty_pages)(void *, struct bdi_writeback *, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long unsigned int, long int, long unsigned int);\n\ntypedef void (*btf_trace_writeback_sb_inodes_requeue)(void *, struct inode *);\n\ntypedef void (*btf_trace_writeback_congestion_wait)(void *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_writeback_wait_iff_congested)(void *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_writeback_single_inode_start)(void *, struct inode *, struct writeback_control *, long unsigned int);\n\ntypedef void (*btf_trace_writeback_single_inode)(void *, struct inode *, struct writeback_control *, long unsigned int);\n\ntypedef void (*btf_trace_writeback_lazytime)(void *, struct inode *);\n\ntypedef void (*btf_trace_writeback_lazytime_iput)(void *, struct inode *);\n\ntypedef void (*btf_trace_writeback_dirty_inode_enqueue)(void *, struct inode *);\n\ntypedef void (*btf_trace_sb_mark_inode_writeback)(void *, struct inode *);\n\ntypedef void (*btf_trace_sb_clear_inode_writeback)(void *, struct inode *);\n\nstruct inode_switch_wbs_context {\n\tstruct inode *inode;\n\tstruct bdi_writeback *new_wb;\n\tstruct callback_head callback_head;\n\tstruct work_struct work;\n};\n\nstruct splice_desc {\n\tsize_t total_len;\n\tunsigned int len;\n\tunsigned int flags;\n\tunion {\n\t\tvoid *userptr;\n\t\tstruct file *file;\n\t\tvoid *data;\n\t} u;\n\tloff_t pos;\n\tloff_t *opos;\n\tsize_t num_spliced;\n\tbool need_wakeup;\n};\n\ntypedef int splice_actor(struct pipe_inode_info *, struct pipe_buffer *, struct splice_desc *);\n\ntypedef int splice_direct_actor(struct pipe_inode_info *, struct splice_desc *);\n\nstruct old_utimbuf32 {\n\told_time32_t actime;\n\told_time32_t modtime;\n};\n\nstruct utimbuf {\n\t__kernel_old_time_t actime;\n\t__kernel_old_time_t modtime;\n};\n\ntypedef int __kernel_daddr_t;\n\nstruct ustat {\n\t__kernel_daddr_t f_tfree;\n\t__kernel_ino_t f_tinode;\n\tchar f_fname[6];\n\tchar f_fpack[6];\n};\n\ntypedef s32 compat_daddr_t;\n\ntypedef __kernel_fsid_t compat_fsid_t;\n\nstruct compat_statfs {\n\tint f_type;\n\tint f_bsize;\n\tint f_blocks;\n\tint f_bfree;\n\tint f_bavail;\n\tint f_files;\n\tint f_ffree;\n\tcompat_fsid_t f_fsid;\n\tint f_namelen;\n\tint f_frsize;\n\tint f_flags;\n\tint f_spare[4];\n};\n\nstruct compat_ustat {\n\tcompat_daddr_t f_tfree;\n\tcompat_ino_t f_tinode;\n\tchar f_fname[6];\n\tchar f_fpack[6];\n};\n\nstruct statfs {\n\t__kernel_long_t f_type;\n\t__kernel_long_t f_bsize;\n\t__kernel_long_t f_blocks;\n\t__kernel_long_t f_bfree;\n\t__kernel_long_t f_bavail;\n\t__kernel_long_t f_files;\n\t__kernel_long_t f_ffree;\n\t__kernel_fsid_t f_fsid;\n\t__kernel_long_t f_namelen;\n\t__kernel_long_t f_frsize;\n\t__kernel_long_t f_flags;\n\t__kernel_long_t f_spare[4];\n};\n\nstruct statfs64 {\n\t__kernel_long_t f_type;\n\t__kernel_long_t f_bsize;\n\t__u64 f_blocks;\n\t__u64 f_bfree;\n\t__u64 f_bavail;\n\t__u64 f_files;\n\t__u64 f_ffree;\n\t__kernel_fsid_t f_fsid;\n\t__kernel_long_t f_namelen;\n\t__kernel_long_t f_frsize;\n\t__kernel_long_t f_flags;\n\t__kernel_long_t f_spare[4];\n};\n\nstruct compat_statfs64 {\n\t__u32 f_type;\n\t__u32 f_bsize;\n\t__u64 f_blocks;\n\t__u64 f_bfree;\n\t__u64 f_bavail;\n\t__u64 f_files;\n\t__u64 f_ffree;\n\t__kernel_fsid_t f_fsid;\n\t__u32 f_namelen;\n\t__u32 f_frsize;\n\t__u32 f_flags;\n\t__u32 f_spare[4];\n} __attribute__((packed));\n\nstruct ns_get_path_task_args {\n\tconst struct proc_ns_operations *ns_ops;\n\tstruct task_struct *task;\n};\n\nenum legacy_fs_param {\n\tLEGACY_FS_UNSET_PARAMS = 0,\n\tLEGACY_FS_MONOLITHIC_PARAMS = 1,\n\tLEGACY_FS_INDIVIDUAL_PARAMS = 2,\n};\n\nstruct legacy_fs_context {\n\tchar *legacy_data;\n\tsize_t data_size;\n\tenum legacy_fs_param param_type;\n};\n\nenum fsconfig_command {\n\tFSCONFIG_SET_FLAG = 0,\n\tFSCONFIG_SET_STRING = 1,\n\tFSCONFIG_SET_BINARY = 2,\n\tFSCONFIG_SET_PATH = 3,\n\tFSCONFIG_SET_PATH_EMPTY = 4,\n\tFSCONFIG_SET_FD = 5,\n\tFSCONFIG_CMD_CREATE = 6,\n\tFSCONFIG_CMD_RECONFIGURE = 7,\n};\n\nstruct dax_device;\n\nstruct iomap_page_ops;\n\nstruct iomap {\n\tu64 addr;\n\tloff_t offset;\n\tu64 length;\n\tu16 type;\n\tu16 flags;\n\tstruct block_device *bdev;\n\tstruct dax_device *dax_dev;\n\tvoid *inline_data;\n\tvoid *private;\n\tconst struct iomap_page_ops *page_ops;\n};\n\nstruct iomap_page_ops {\n\tint (*page_prepare)(struct inode *, loff_t, unsigned int, struct iomap *);\n\tvoid (*page_done)(struct inode *, loff_t, unsigned int, struct page *, struct iomap *);\n};\n\nstruct decrypt_bh_ctx {\n\tstruct work_struct work;\n\tstruct buffer_head *bh;\n};\n\nstruct bh_lru {\n\tstruct buffer_head *bhs[16];\n};\n\nstruct bh_accounting {\n\tint nr;\n\tint ratelimit;\n};\n\nenum stat_group {\n\tSTAT_READ = 0,\n\tSTAT_WRITE = 1,\n\tSTAT_DISCARD = 2,\n\tSTAT_FLUSH = 3,\n\tNR_STAT_GROUPS = 4,\n};\n\nenum {\n\tDISK_EVENT_MEDIA_CHANGE = 1,\n\tDISK_EVENT_EJECT_REQUEST = 2,\n};\n\nenum {\n\tBIOSET_NEED_BVECS = 1,\n\tBIOSET_NEED_RESCUER = 2,\n};\n\nstruct bdev_inode {\n\tstruct block_device bdev;\n\tstruct inode vfs_inode;\n};\n\nstruct blkdev_dio {\n\tunion {\n\t\tstruct kiocb *iocb;\n\t\tstruct task_struct *waiter;\n\t};\n\tsize_t size;\n\tatomic_t ref;\n\tbool multi_bio: 1;\n\tbool should_dirty: 1;\n\tbool is_sync: 1;\n\tstruct bio bio;\n};\n\nstruct bd_holder_disk {\n\tstruct list_head list;\n\tstruct gendisk *disk;\n\tint refcnt;\n};\n\ntypedef int dio_iodone_t(struct kiocb *, loff_t, ssize_t, void *);\n\ntypedef void dio_submit_t(struct bio *, struct inode *, loff_t);\n\nenum {\n\tDIO_LOCKING = 1,\n\tDIO_SKIP_HOLES = 2,\n};\n\nstruct dio_submit {\n\tstruct bio *bio;\n\tunsigned int blkbits;\n\tunsigned int blkfactor;\n\tunsigned int start_zero_done;\n\tint pages_in_io;\n\tsector_t block_in_file;\n\tunsigned int blocks_available;\n\tint reap_counter;\n\tsector_t final_block_in_request;\n\tint boundary;\n\tget_block_t *get_block;\n\tdio_submit_t *submit_io;\n\tloff_t logical_offset_in_bio;\n\tsector_t final_block_in_bio;\n\tsector_t next_block_for_io;\n\tstruct page *cur_page;\n\tunsigned int cur_page_offset;\n\tunsigned int cur_page_len;\n\tsector_t cur_page_block;\n\tloff_t cur_page_fs_offset;\n\tstruct iov_iter *iter;\n\tunsigned int head;\n\tunsigned int tail;\n\tsize_t from;\n\tsize_t to;\n};\n\nstruct dio {\n\tint flags;\n\tint op;\n\tint op_flags;\n\tblk_qc_t bio_cookie;\n\tstruct gendisk *bio_disk;\n\tstruct inode *inode;\n\tloff_t i_size;\n\tdio_iodone_t *end_io;\n\tvoid *private;\n\tspinlock_t bio_lock;\n\tint page_errors;\n\tint is_async;\n\tbool defer_completion;\n\tbool should_dirty;\n\tint io_error;\n\tlong unsigned int refcount;\n\tstruct bio *bio_list;\n\tstruct task_struct *waiter;\n\tstruct kiocb *iocb;\n\tssize_t result;\n\tunion {\n\t\tstruct page *pages[64];\n\t\tstruct work_struct complete_work;\n\t};\n\tlong: 64;\n};\n\nstruct bvec_iter_all {\n\tstruct bio_vec bv;\n\tint idx;\n\tunsigned int done;\n};\n\nstruct mpage_readpage_args {\n\tstruct bio *bio;\n\tstruct page *page;\n\tunsigned int nr_pages;\n\tbool is_readahead;\n\tsector_t last_block_in_bio;\n\tstruct buffer_head map_bh;\n\tlong unsigned int first_logical_block;\n\tget_block_t *get_block;\n};\n\nstruct mpage_data {\n\tstruct bio *bio;\n\tsector_t last_block_in_bio;\n\tget_block_t *get_block;\n\tunsigned int use_writepage;\n};\n\ntypedef u32 nlink_t;\n\ntypedef int (*proc_write_t)(struct file *, char *, size_t);\n\nstruct proc_dir_entry {\n\tatomic_t in_use;\n\trefcount_t refcnt;\n\tstruct list_head pde_openers;\n\tspinlock_t pde_unload_lock;\n\tstruct completion *pde_unload_completion;\n\tconst struct inode_operations *proc_iops;\n\tunion {\n\t\tconst struct proc_ops *proc_ops;\n\t\tconst struct file_operations *proc_dir_ops;\n\t};\n\tconst struct dentry_operations *proc_dops;\n\tunion {\n\t\tconst struct seq_operations *seq_ops;\n\t\tint (*single_show)(struct seq_file *, void *);\n\t};\n\tproc_write_t write;\n\tvoid *data;\n\tunsigned int state_size;\n\tunsigned int low_ino;\n\tnlink_t nlink;\n\tkuid_t uid;\n\tkgid_t gid;\n\tloff_t size;\n\tstruct proc_dir_entry *parent;\n\tstruct rb_root subdir;\n\tstruct rb_node subdir_node;\n\tchar *name;\n\tumode_t mode;\n\tu8 flags;\n\tu8 namelen;\n\tchar inline_name[0];\n};\n\nunion proc_op {\n\tint (*proc_get_link)(struct dentry *, struct path *);\n\tint (*proc_show)(struct seq_file *, struct pid_namespace *, struct pid *, struct task_struct *);\n\tconst char *lsm;\n};\n\nstruct proc_inode {\n\tstruct pid *pid;\n\tunsigned int fd;\n\tunion proc_op op;\n\tstruct proc_dir_entry *pde;\n\tstruct ctl_table_header *sysctl;\n\tstruct ctl_table *sysctl_entry;\n\tstruct hlist_node sibling_inodes;\n\tconst struct proc_ns_operations *ns_ops;\n\tstruct inode vfs_inode;\n};\n\nstruct proc_fs_opts {\n\tint flag;\n\tconst char *str;\n};\n\nstruct file_handle {\n\t__u32 handle_bytes;\n\tint handle_type;\n\tunsigned char f_handle[0];\n};\n\nstruct inotify_inode_mark {\n\tstruct fsnotify_mark fsn_mark;\n\tint wd;\n};\n\nstruct dnotify_struct {\n\tstruct dnotify_struct *dn_next;\n\t__u32 dn_mask;\n\tint dn_fd;\n\tstruct file *dn_filp;\n\tfl_owner_t dn_owner;\n};\n\nstruct dnotify_mark {\n\tstruct fsnotify_mark fsn_mark;\n\tstruct dnotify_struct *dn;\n};\n\nstruct inotify_event_info {\n\tstruct fsnotify_event fse;\n\tu32 mask;\n\tint wd;\n\tu32 sync_cookie;\n\tint name_len;\n\tchar name[0];\n};\n\nstruct inotify_event {\n\t__s32 wd;\n\t__u32 mask;\n\t__u32 cookie;\n\t__u32 len;\n\tchar name[0];\n};\n\nenum {\n\tFAN_EVENT_INIT = 0,\n\tFAN_EVENT_REPORTED = 1,\n\tFAN_EVENT_ANSWERED = 2,\n\tFAN_EVENT_CANCELED = 3,\n};\n\nstruct fanotify_fh {\n\tu8 type;\n\tu8 len;\n\tu8 flags;\n\tu8 pad;\n\tunsigned char buf[0];\n};\n\nstruct fanotify_info {\n\tu8 dir_fh_totlen;\n\tu8 file_fh_totlen;\n\tu8 name_len;\n\tu8 pad;\n\tunsigned char buf[0];\n};\n\nenum fanotify_event_type {\n\tFANOTIFY_EVENT_TYPE_FID = 0,\n\tFANOTIFY_EVENT_TYPE_FID_NAME = 1,\n\tFANOTIFY_EVENT_TYPE_PATH = 2,\n\tFANOTIFY_EVENT_TYPE_PATH_PERM = 3,\n\tFANOTIFY_EVENT_TYPE_OVERFLOW = 4,\n};\n\nstruct fanotify_event {\n\tstruct fsnotify_event fse;\n\tu32 mask;\n\tenum fanotify_event_type type;\n\tstruct pid *pid;\n};\n\nstruct fanotify_fid_event {\n\tstruct fanotify_event fae;\n\t__kernel_fsid_t fsid;\n\tstruct fanotify_fh object_fh;\n\tunsigned char _inline_fh_buf[12];\n};\n\nstruct fanotify_name_event {\n\tstruct fanotify_event fae;\n\t__kernel_fsid_t fsid;\n\tstruct fanotify_info info;\n};\n\nstruct fanotify_path_event {\n\tstruct fanotify_event fae;\n\tstruct path path;\n};\n\nstruct fanotify_perm_event {\n\tstruct fanotify_event fae;\n\tstruct path path;\n\tshort unsigned int response;\n\tshort unsigned int state;\n\tint fd;\n};\n\nstruct fanotify_event_metadata {\n\t__u32 event_len;\n\t__u8 vers;\n\t__u8 reserved;\n\t__u16 metadata_len;\n\t__u64 mask;\n\t__s32 fd;\n\t__s32 pid;\n};\n\nstruct fanotify_event_info_header {\n\t__u8 info_type;\n\t__u8 pad;\n\t__u16 len;\n};\n\nstruct fanotify_event_info_fid {\n\tstruct fanotify_event_info_header hdr;\n\t__kernel_fsid_t fsid;\n\tunsigned char handle[0];\n};\n\nstruct fanotify_response {\n\t__s32 fd;\n\t__u32 response;\n};\n\nstruct epoll_event {\n\t__poll_t events;\n\t__u64 data;\n} __attribute__((packed));\n\nstruct epoll_filefd {\n\tstruct file *file;\n\tint fd;\n} __attribute__((packed));\n\nstruct epitem;\n\nstruct eppoll_entry {\n\tstruct eppoll_entry *next;\n\tstruct epitem *base;\n\twait_queue_entry_t wait;\n\twait_queue_head_t *whead;\n};\n\nstruct eventpoll;\n\nstruct epitem {\n\tunion {\n\t\tstruct rb_node rbn;\n\t\tstruct callback_head rcu;\n\t};\n\tstruct list_head rdllink;\n\tstruct epitem *next;\n\tstruct epoll_filefd ffd;\n\tstruct eppoll_entry *pwqlist;\n\tstruct eventpoll *ep;\n\tstruct hlist_node fllink;\n\tstruct wakeup_source *ws;\n\tstruct epoll_event event;\n};\n\nstruct eventpoll {\n\tstruct mutex mtx;\n\twait_queue_head_t wq;\n\twait_queue_head_t poll_wait;\n\tstruct list_head rdllist;\n\trwlock_t lock;\n\tstruct rb_root_cached rbr;\n\tstruct epitem *ovflist;\n\tstruct wakeup_source *ws;\n\tstruct user_struct *user;\n\tstruct file *file;\n\tu64 gen;\n\tstruct hlist_head refs;\n\tunsigned int napi_id;\n};\n\nstruct ep_pqueue {\n\tpoll_table pt;\n\tstruct epitem *epi;\n};\n\nstruct epitems_head {\n\tstruct hlist_head epitems;\n\tstruct epitems_head *next;\n};\n\nstruct signalfd_siginfo {\n\t__u32 ssi_signo;\n\t__s32 ssi_errno;\n\t__s32 ssi_code;\n\t__u32 ssi_pid;\n\t__u32 ssi_uid;\n\t__s32 ssi_fd;\n\t__u32 ssi_tid;\n\t__u32 ssi_band;\n\t__u32 ssi_overrun;\n\t__u32 ssi_trapno;\n\t__s32 ssi_status;\n\t__s32 ssi_int;\n\t__u64 ssi_ptr;\n\t__u64 ssi_utime;\n\t__u64 ssi_stime;\n\t__u64 ssi_addr;\n\t__u16 ssi_addr_lsb;\n\t__u16 __pad2;\n\t__s32 ssi_syscall;\n\t__u64 ssi_call_addr;\n\t__u32 ssi_arch;\n\t__u8 __pad[28];\n};\n\nstruct signalfd_ctx {\n\tsigset_t sigmask;\n};\n\nstruct timerfd_ctx {\n\tunion {\n\t\tstruct hrtimer tmr;\n\t\tstruct alarm alarm;\n\t} t;\n\tktime_t tintv;\n\tktime_t moffs;\n\twait_queue_head_t wqh;\n\tu64 ticks;\n\tint clockid;\n\tshort unsigned int expired;\n\tshort unsigned int settime_flags;\n\tstruct callback_head rcu;\n\tstruct list_head clist;\n\tspinlock_t cancel_lock;\n\tbool might_cancel;\n};\n\nstruct eventfd_ctx___2 {\n\tstruct kref kref;\n\twait_queue_head_t wqh;\n\t__u64 count;\n\tunsigned int flags;\n\tint id;\n};\n\nenum userfaultfd_state {\n\tUFFD_STATE_WAIT_API = 0,\n\tUFFD_STATE_RUNNING = 1,\n};\n\nstruct userfaultfd_ctx {\n\twait_queue_head_t fault_pending_wqh;\n\twait_queue_head_t fault_wqh;\n\twait_queue_head_t fd_wqh;\n\twait_queue_head_t event_wqh;\n\tseqcount_spinlock_t refile_seq;\n\trefcount_t refcount;\n\tunsigned int flags;\n\tunsigned int features;\n\tenum userfaultfd_state state;\n\tbool released;\n\tbool mmap_changing;\n\tstruct mm_struct *mm;\n};\n\nstruct uffd_msg {\n\t__u8 event;\n\t__u8 reserved1;\n\t__u16 reserved2;\n\t__u32 reserved3;\n\tunion {\n\t\tstruct {\n\t\t\t__u64 flags;\n\t\t\t__u64 address;\n\t\t\tunion {\n\t\t\t\t__u32 ptid;\n\t\t\t} feat;\n\t\t} pagefault;\n\t\tstruct {\n\t\t\t__u32 ufd;\n\t\t} fork;\n\t\tstruct {\n\t\t\t__u64 from;\n\t\t\t__u64 to;\n\t\t\t__u64 len;\n\t\t} remap;\n\t\tstruct {\n\t\t\t__u64 start;\n\t\t\t__u64 end;\n\t\t} remove;\n\t\tstruct {\n\t\t\t__u64 reserved1;\n\t\t\t__u64 reserved2;\n\t\t\t__u64 reserved3;\n\t\t} reserved;\n\t} arg;\n};\n\nstruct uffdio_api {\n\t__u64 api;\n\t__u64 features;\n\t__u64 ioctls;\n};\n\nstruct uffdio_range {\n\t__u64 start;\n\t__u64 len;\n};\n\nstruct uffdio_register {\n\tstruct uffdio_range range;\n\t__u64 mode;\n\t__u64 ioctls;\n};\n\nstruct uffdio_copy {\n\t__u64 dst;\n\t__u64 src;\n\t__u64 len;\n\t__u64 mode;\n\t__s64 copy;\n};\n\nstruct uffdio_zeropage {\n\tstruct uffdio_range range;\n\t__u64 mode;\n\t__s64 zeropage;\n};\n\nstruct uffdio_writeprotect {\n\tstruct uffdio_range range;\n\t__u64 mode;\n};\n\nstruct userfaultfd_fork_ctx {\n\tstruct userfaultfd_ctx *orig;\n\tstruct userfaultfd_ctx *new;\n\tstruct list_head list;\n};\n\nstruct userfaultfd_unmap_ctx {\n\tstruct userfaultfd_ctx *ctx;\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tstruct list_head list;\n};\n\nstruct userfaultfd_wait_queue {\n\tstruct uffd_msg msg;\n\twait_queue_entry_t wq;\n\tstruct userfaultfd_ctx *ctx;\n\tbool waken;\n};\n\nstruct userfaultfd_wake_range {\n\tlong unsigned int start;\n\tlong unsigned int len;\n};\n\nstruct kioctx;\n\nstruct kioctx_table {\n\tstruct callback_head rcu;\n\tunsigned int nr;\n\tstruct kioctx *table[0];\n};\n\ntypedef __kernel_ulong_t aio_context_t;\n\nenum {\n\tIOCB_CMD_PREAD = 0,\n\tIOCB_CMD_PWRITE = 1,\n\tIOCB_CMD_FSYNC = 2,\n\tIOCB_CMD_FDSYNC = 3,\n\tIOCB_CMD_POLL = 5,\n\tIOCB_CMD_NOOP = 6,\n\tIOCB_CMD_PREADV = 7,\n\tIOCB_CMD_PWRITEV = 8,\n};\n\nstruct io_event {\n\t__u64 data;\n\t__u64 obj;\n\t__s64 res;\n\t__s64 res2;\n};\n\nstruct iocb {\n\t__u64 aio_data;\n\t__u32 aio_key;\n\t__kernel_rwf_t aio_rw_flags;\n\t__u16 aio_lio_opcode;\n\t__s16 aio_reqprio;\n\t__u32 aio_fildes;\n\t__u64 aio_buf;\n\t__u64 aio_nbytes;\n\t__s64 aio_offset;\n\t__u64 aio_reserved2;\n\t__u32 aio_flags;\n\t__u32 aio_resfd;\n};\n\ntypedef u32 compat_aio_context_t;\n\ntypedef int kiocb_cancel_fn(struct kiocb *);\n\nstruct aio_ring {\n\tunsigned int id;\n\tunsigned int nr;\n\tunsigned int head;\n\tunsigned int tail;\n\tunsigned int magic;\n\tunsigned int compat_features;\n\tunsigned int incompat_features;\n\tunsigned int header_length;\n\tstruct io_event io_events[0];\n};\n\nstruct kioctx_cpu;\n\nstruct ctx_rq_wait;\n\nstruct kioctx {\n\tstruct percpu_ref users;\n\tatomic_t dead;\n\tstruct percpu_ref reqs;\n\tlong unsigned int user_id;\n\tstruct kioctx_cpu *cpu;\n\tunsigned int req_batch;\n\tunsigned int max_reqs;\n\tunsigned int nr_events;\n\tlong unsigned int mmap_base;\n\tlong unsigned int mmap_size;\n\tstruct page **ring_pages;\n\tlong int nr_pages;\n\tstruct rcu_work free_rwork;\n\tstruct ctx_rq_wait *rq_wait;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct {\n\t\tatomic_t reqs_available;\n\t\tlong: 32;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t};\n\tstruct {\n\t\tspinlock_t ctx_lock;\n\t\tstruct list_head active_reqs;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t};\n\tstruct {\n\t\tstruct mutex ring_lock;\n\t\twait_queue_head_t wait;\n\t\tlong: 64;\n\t};\n\tstruct {\n\t\tunsigned int tail;\n\t\tunsigned int completed_events;\n\t\tspinlock_t completion_lock;\n\t\tlong: 32;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t};\n\tstruct page *internal_pages[8];\n\tstruct file *aio_ring_file;\n\tunsigned int id;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct kioctx_cpu {\n\tunsigned int reqs_available;\n};\n\nstruct ctx_rq_wait {\n\tstruct completion comp;\n\tatomic_t count;\n};\n\nstruct fsync_iocb {\n\tstruct file *file;\n\tstruct work_struct work;\n\tbool datasync;\n\tstruct cred *creds;\n};\n\nstruct poll_iocb {\n\tstruct file *file;\n\tstruct wait_queue_head *head;\n\t__poll_t events;\n\tbool done;\n\tbool cancelled;\n\tstruct wait_queue_entry wait;\n\tstruct work_struct work;\n};\n\nstruct aio_kiocb {\n\tunion {\n\t\tstruct file *ki_filp;\n\t\tstruct kiocb rw;\n\t\tstruct fsync_iocb fsync;\n\t\tstruct poll_iocb poll;\n\t};\n\tstruct kioctx *ki_ctx;\n\tkiocb_cancel_fn *ki_cancel;\n\tstruct io_event ki_res;\n\tstruct list_head ki_list;\n\trefcount_t ki_refcnt;\n\tstruct eventfd_ctx *ki_eventfd;\n};\n\nstruct aio_poll_table {\n\tstruct poll_table_struct pt;\n\tstruct aio_kiocb *iocb;\n\tint error;\n};\n\nstruct __aio_sigset {\n\tconst sigset_t *sigmask;\n\tsize_t sigsetsize;\n};\n\nstruct __compat_aio_sigset {\n\tcompat_uptr_t sigmask;\n\tcompat_size_t sigsetsize;\n};\n\nenum {\n\tPERCPU_REF_INIT_ATOMIC = 1,\n\tPERCPU_REF_INIT_DEAD = 2,\n\tPERCPU_REF_ALLOW_REINIT = 4,\n};\n\nstruct user_msghdr {\n\tvoid *msg_name;\n\tint msg_namelen;\n\tstruct iovec *msg_iov;\n\t__kernel_size_t msg_iovlen;\n\tvoid *msg_control;\n\t__kernel_size_t msg_controllen;\n\tunsigned int msg_flags;\n};\n\ntypedef s32 compat_ssize_t;\n\nstruct compat_msghdr {\n\tcompat_uptr_t msg_name;\n\tcompat_int_t msg_namelen;\n\tcompat_uptr_t msg_iov;\n\tcompat_size_t msg_iovlen;\n\tcompat_uptr_t msg_control;\n\tcompat_size_t msg_controllen;\n\tcompat_uint_t msg_flags;\n};\n\nstruct scm_fp_list {\n\tshort int count;\n\tshort int max;\n\tstruct user_struct *user;\n\tstruct file *fp[253];\n};\n\nstruct unix_skb_parms {\n\tstruct pid *pid;\n\tkuid_t uid;\n\tkgid_t gid;\n\tstruct scm_fp_list *fp;\n\tu32 secid;\n\tu32 consumed;\n};\n\nstruct trace_event_raw_io_uring_create {\n\tstruct trace_entry ent;\n\tint fd;\n\tvoid *ctx;\n\tu32 sq_entries;\n\tu32 cq_entries;\n\tu32 flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_register {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tunsigned int opcode;\n\tunsigned int nr_files;\n\tunsigned int nr_bufs;\n\tbool eventfd;\n\tlong int ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_file_get {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tint fd;\n\tchar __data[0];\n};\n\nstruct io_wq_work;\n\nstruct trace_event_raw_io_uring_queue_async_work {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tint rw;\n\tvoid *req;\n\tstruct io_wq_work *work;\n\tunsigned int flags;\n\tchar __data[0];\n};\n\nstruct io_wq_work_node {\n\tstruct io_wq_work_node *next;\n};\n\nstruct io_wq_work {\n\tstruct io_wq_work_node list;\n\tstruct io_identity *identity;\n\tunsigned int flags;\n};\n\nstruct trace_event_raw_io_uring_defer {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tvoid *req;\n\tlong long unsigned int data;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_link {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tvoid *req;\n\tvoid *target_req;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_cqring_wait {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tint min_events;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_fail_link {\n\tstruct trace_entry ent;\n\tvoid *req;\n\tvoid *link;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_complete {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tu64 user_data;\n\tlong int res;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_submit_sqe {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tu8 opcode;\n\tu64 user_data;\n\tbool force_nonblock;\n\tbool sq_thread;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_poll_arm {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tu8 opcode;\n\tu64 user_data;\n\tint mask;\n\tint events;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_poll_wake {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tu8 opcode;\n\tu64 user_data;\n\tint mask;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_task_add {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tu8 opcode;\n\tu64 user_data;\n\tint mask;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_io_uring_task_run {\n\tstruct trace_entry ent;\n\tvoid *ctx;\n\tu8 opcode;\n\tu64 user_data;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_io_uring_create {};\n\nstruct trace_event_data_offsets_io_uring_register {};\n\nstruct trace_event_data_offsets_io_uring_file_get {};\n\nstruct trace_event_data_offsets_io_uring_queue_async_work {};\n\nstruct trace_event_data_offsets_io_uring_defer {};\n\nstruct trace_event_data_offsets_io_uring_link {};\n\nstruct trace_event_data_offsets_io_uring_cqring_wait {};\n\nstruct trace_event_data_offsets_io_uring_fail_link {};\n\nstruct trace_event_data_offsets_io_uring_complete {};\n\nstruct trace_event_data_offsets_io_uring_submit_sqe {};\n\nstruct trace_event_data_offsets_io_uring_poll_arm {};\n\nstruct trace_event_data_offsets_io_uring_poll_wake {};\n\nstruct trace_event_data_offsets_io_uring_task_add {};\n\nstruct trace_event_data_offsets_io_uring_task_run {};\n\ntypedef void (*btf_trace_io_uring_create)(void *, int, void *, u32, u32, u32);\n\ntypedef void (*btf_trace_io_uring_register)(void *, void *, unsigned int, unsigned int, unsigned int, bool, long int);\n\ntypedef void (*btf_trace_io_uring_file_get)(void *, void *, int);\n\ntypedef void (*btf_trace_io_uring_queue_async_work)(void *, void *, int, void *, struct io_wq_work *, unsigned int);\n\ntypedef void (*btf_trace_io_uring_defer)(void *, void *, void *, long long unsigned int);\n\ntypedef void (*btf_trace_io_uring_link)(void *, void *, void *, void *);\n\ntypedef void (*btf_trace_io_uring_cqring_wait)(void *, void *, int);\n\ntypedef void (*btf_trace_io_uring_fail_link)(void *, void *, void *);\n\ntypedef void (*btf_trace_io_uring_complete)(void *, void *, u64, long int);\n\ntypedef void (*btf_trace_io_uring_submit_sqe)(void *, void *, u8, u64, bool, bool);\n\ntypedef void (*btf_trace_io_uring_poll_arm)(void *, void *, u8, u64, int, int);\n\ntypedef void (*btf_trace_io_uring_poll_wake)(void *, void *, u8, u64, int);\n\ntypedef void (*btf_trace_io_uring_task_add)(void *, void *, u8, u64, int);\n\ntypedef void (*btf_trace_io_uring_task_run)(void *, void *, u8, u64);\n\nstruct io_uring_sqe {\n\t__u8 opcode;\n\t__u8 flags;\n\t__u16 ioprio;\n\t__s32 fd;\n\tunion {\n\t\t__u64 off;\n\t\t__u64 addr2;\n\t};\n\tunion {\n\t\t__u64 addr;\n\t\t__u64 splice_off_in;\n\t};\n\t__u32 len;\n\tunion {\n\t\t__kernel_rwf_t rw_flags;\n\t\t__u32 fsync_flags;\n\t\t__u16 poll_events;\n\t\t__u32 poll32_events;\n\t\t__u32 sync_range_flags;\n\t\t__u32 msg_flags;\n\t\t__u32 timeout_flags;\n\t\t__u32 accept_flags;\n\t\t__u32 cancel_flags;\n\t\t__u32 open_flags;\n\t\t__u32 statx_flags;\n\t\t__u32 fadvise_advice;\n\t\t__u32 splice_flags;\n\t\t__u32 rename_flags;\n\t\t__u32 unlink_flags;\n\t};\n\t__u64 user_data;\n\tunion {\n\t\tstruct {\n\t\t\tunion {\n\t\t\t\t__u16 buf_index;\n\t\t\t\t__u16 buf_group;\n\t\t\t};\n\t\t\t__u16 personality;\n\t\t\t__s32 splice_fd_in;\n\t\t};\n\t\t__u64 __pad2[3];\n\t};\n};\n\nenum {\n\tIOSQE_FIXED_FILE_BIT = 0,\n\tIOSQE_IO_DRAIN_BIT = 1,\n\tIOSQE_IO_LINK_BIT = 2,\n\tIOSQE_IO_HARDLINK_BIT = 3,\n\tIOSQE_ASYNC_BIT = 4,\n\tIOSQE_BUFFER_SELECT_BIT = 5,\n};\n\nenum {\n\tIORING_OP_NOP = 0,\n\tIORING_OP_READV = 1,\n\tIORING_OP_WRITEV = 2,\n\tIORING_OP_FSYNC = 3,\n\tIORING_OP_READ_FIXED = 4,\n\tIORING_OP_WRITE_FIXED = 5,\n\tIORING_OP_POLL_ADD = 6,\n\tIORING_OP_POLL_REMOVE = 7,\n\tIORING_OP_SYNC_FILE_RANGE = 8,\n\tIORING_OP_SENDMSG = 9,\n\tIORING_OP_RECVMSG = 10,\n\tIORING_OP_TIMEOUT = 11,\n\tIORING_OP_TIMEOUT_REMOVE = 12,\n\tIORING_OP_ACCEPT = 13,\n\tIORING_OP_ASYNC_CANCEL = 14,\n\tIORING_OP_LINK_TIMEOUT = 15,\n\tIORING_OP_CONNECT = 16,\n\tIORING_OP_FALLOCATE = 17,\n\tIORING_OP_OPENAT = 18,\n\tIORING_OP_CLOSE = 19,\n\tIORING_OP_FILES_UPDATE = 20,\n\tIORING_OP_STATX = 21,\n\tIORING_OP_READ = 22,\n\tIORING_OP_WRITE = 23,\n\tIORING_OP_FADVISE = 24,\n\tIORING_OP_MADVISE = 25,\n\tIORING_OP_SEND = 26,\n\tIORING_OP_RECV = 27,\n\tIORING_OP_OPENAT2 = 28,\n\tIORING_OP_EPOLL_CTL = 29,\n\tIORING_OP_SPLICE = 30,\n\tIORING_OP_PROVIDE_BUFFERS = 31,\n\tIORING_OP_REMOVE_BUFFERS = 32,\n\tIORING_OP_TEE = 33,\n\tIORING_OP_SHUTDOWN = 34,\n\tIORING_OP_RENAMEAT = 35,\n\tIORING_OP_UNLINKAT = 36,\n\tIORING_OP_LAST = 37,\n};\n\nstruct io_uring_cqe {\n\t__u64 user_data;\n\t__s32 res;\n\t__u32 flags;\n};\n\nenum {\n\tIORING_CQE_BUFFER_SHIFT = 16,\n};\n\nstruct io_sqring_offsets {\n\t__u32 head;\n\t__u32 tail;\n\t__u32 ring_mask;\n\t__u32 ring_entries;\n\t__u32 flags;\n\t__u32 dropped;\n\t__u32 array;\n\t__u32 resv1;\n\t__u64 resv2;\n};\n\nstruct io_cqring_offsets {\n\t__u32 head;\n\t__u32 tail;\n\t__u32 ring_mask;\n\t__u32 ring_entries;\n\t__u32 overflow;\n\t__u32 cqes;\n\t__u32 flags;\n\t__u32 resv1;\n\t__u64 resv2;\n};\n\nstruct io_uring_params {\n\t__u32 sq_entries;\n\t__u32 cq_entries;\n\t__u32 flags;\n\t__u32 sq_thread_cpu;\n\t__u32 sq_thread_idle;\n\t__u32 features;\n\t__u32 wq_fd;\n\t__u32 resv[3];\n\tstruct io_sqring_offsets sq_off;\n\tstruct io_cqring_offsets cq_off;\n};\n\nenum {\n\tIORING_REGISTER_BUFFERS = 0,\n\tIORING_UNREGISTER_BUFFERS = 1,\n\tIORING_REGISTER_FILES = 2,\n\tIORING_UNREGISTER_FILES = 3,\n\tIORING_REGISTER_EVENTFD = 4,\n\tIORING_UNREGISTER_EVENTFD = 5,\n\tIORING_REGISTER_FILES_UPDATE = 6,\n\tIORING_REGISTER_EVENTFD_ASYNC = 7,\n\tIORING_REGISTER_PROBE = 8,\n\tIORING_REGISTER_PERSONALITY = 9,\n\tIORING_UNREGISTER_PERSONALITY = 10,\n\tIORING_REGISTER_RESTRICTIONS = 11,\n\tIORING_REGISTER_ENABLE_RINGS = 12,\n\tIORING_REGISTER_LAST = 13,\n};\n\nstruct io_uring_files_update {\n\t__u32 offset;\n\t__u32 resv;\n\t__u64 fds;\n};\n\nstruct io_uring_probe_op {\n\t__u8 op;\n\t__u8 resv;\n\t__u16 flags;\n\t__u32 resv2;\n};\n\nstruct io_uring_probe {\n\t__u8 last_op;\n\t__u8 ops_len;\n\t__u16 resv;\n\t__u32 resv2[3];\n\tstruct io_uring_probe_op ops[0];\n};\n\nstruct io_uring_restriction {\n\t__u16 opcode;\n\tunion {\n\t\t__u8 register_op;\n\t\t__u8 sqe_op;\n\t\t__u8 sqe_flags;\n\t};\n\t__u8 resv;\n\t__u32 resv2[3];\n};\n\nenum {\n\tIORING_RESTRICTION_REGISTER_OP = 0,\n\tIORING_RESTRICTION_SQE_OP = 1,\n\tIORING_RESTRICTION_SQE_FLAGS_ALLOWED = 2,\n\tIORING_RESTRICTION_SQE_FLAGS_REQUIRED = 3,\n\tIORING_RESTRICTION_LAST = 4,\n};\n\nstruct io_uring_getevents_arg {\n\t__u64 sigmask;\n\t__u32 sigmask_sz;\n\t__u32 pad;\n\t__u64 ts;\n};\n\nenum {\n\tIO_WQ_WORK_CANCEL = 1,\n\tIO_WQ_WORK_HASHED = 2,\n\tIO_WQ_WORK_UNBOUND = 4,\n\tIO_WQ_WORK_CONCURRENT = 16,\n\tIO_WQ_WORK_FILES = 32,\n\tIO_WQ_WORK_FS = 64,\n\tIO_WQ_WORK_MM = 128,\n\tIO_WQ_WORK_CREDS = 256,\n\tIO_WQ_WORK_BLKCG = 512,\n\tIO_WQ_WORK_FSIZE = 1024,\n\tIO_WQ_HASH_SHIFT = 24,\n};\n\nenum io_wq_cancel {\n\tIO_WQ_CANCEL_OK = 0,\n\tIO_WQ_CANCEL_RUNNING = 1,\n\tIO_WQ_CANCEL_NOTFOUND = 2,\n};\n\ntypedef struct io_wq_work *free_work_fn(struct io_wq_work *);\n\ntypedef void io_wq_work_fn(struct io_wq_work *);\n\nstruct io_wq_data {\n\tstruct user_struct *user;\n\tio_wq_work_fn *do_work;\n\tfree_work_fn *free_work;\n};\n\ntypedef bool work_cancel_fn(struct io_wq_work *, void *);\n\nstruct io_uring {\n\tu32 head;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tu32 tail;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct io_rings {\n\tstruct io_uring sq;\n\tstruct io_uring cq;\n\tu32 sq_ring_mask;\n\tu32 cq_ring_mask;\n\tu32 sq_ring_entries;\n\tu32 cq_ring_entries;\n\tu32 sq_dropped;\n\tu32 sq_flags;\n\tu32 cq_flags;\n\tu32 cq_overflow;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct io_uring_cqe cqes[0];\n};\n\nstruct io_mapped_ubuf {\n\tu64 ubuf;\n\tsize_t len;\n\tstruct bio_vec *bvec;\n\tunsigned int nr_bvecs;\n\tlong unsigned int acct_pages;\n};\n\nstruct fixed_file_table {\n\tstruct file **files;\n};\n\nstruct fixed_file_data;\n\nstruct fixed_file_ref_node {\n\tstruct percpu_ref refs;\n\tstruct list_head node;\n\tstruct list_head file_list;\n\tstruct fixed_file_data *file_data;\n\tstruct llist_node llist;\n\tbool done;\n};\n\nstruct io_ring_ctx;\n\nstruct fixed_file_data {\n\tstruct fixed_file_table *table;\n\tstruct io_ring_ctx *ctx;\n\tstruct fixed_file_ref_node *node;\n\tstruct percpu_ref refs;\n\tstruct completion done;\n\tstruct list_head ref_list;\n\tspinlock_t lock;\n};\n\nstruct io_wq;\n\nstruct io_restriction {\n\tlong unsigned int register_op[1];\n\tlong unsigned int sqe_op[1];\n\tu8 sqe_flags_allowed;\n\tu8 sqe_flags_required;\n\tbool registered;\n};\n\nstruct io_sq_data;\n\nstruct io_kiocb;\n\nstruct io_ring_ctx {\n\tstruct {\n\t\tstruct percpu_ref refs;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t};\n\tstruct {\n\t\tunsigned int flags;\n\t\tunsigned int compat: 1;\n\t\tunsigned int limit_mem: 1;\n\t\tunsigned int cq_overflow_flushed: 1;\n\t\tunsigned int drain_next: 1;\n\t\tunsigned int eventfd_async: 1;\n\t\tunsigned int restricted: 1;\n\t\tunsigned int sqo_dead: 1;\n\t\tu32 *sq_array;\n\t\tunsigned int cached_sq_head;\n\t\tunsigned int sq_entries;\n\t\tunsigned int sq_mask;\n\t\tunsigned int sq_thread_idle;\n\t\tunsigned int cached_sq_dropped;\n\t\tunsigned int cached_cq_overflow;\n\t\tlong unsigned int sq_check_overflow;\n\t\tstruct list_head defer_list;\n\t\tstruct list_head timeout_list;\n\t\tstruct list_head cq_overflow_list;\n\t\tstruct io_uring_sqe *sq_sqes;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t};\n\tstruct io_rings *rings;\n\tstruct io_wq *io_wq;\n\tstruct task_struct *sqo_task;\n\tstruct mm_struct *mm_account;\n\tstruct cgroup_subsys_state *sqo_blkcg_css;\n\tstruct io_sq_data *sq_data;\n\tstruct wait_queue_head sqo_sq_wait;\n\tstruct list_head sqd_list;\n\tstruct fixed_file_data *file_data;\n\tunsigned int nr_user_files;\n\tunsigned int nr_user_bufs;\n\tstruct io_mapped_ubuf *user_bufs;\n\tstruct user_struct *user;\n\tconst struct cred *creds;\n\tkuid_t loginuid;\n\tunsigned int sessionid;\n\tstruct completion ref_comp;\n\tstruct completion sq_thread_comp;\n\tstruct io_kiocb *fallback_req;\n\tstruct socket *ring_sock;\n\tstruct idr io_buffer_idr;\n\tstruct idr personality_idr;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct {\n\t\tunsigned int cached_cq_tail;\n\t\tunsigned int cq_entries;\n\t\tunsigned int cq_mask;\n\t\tatomic_t cq_timeouts;\n\t\tunsigned int cq_last_tm_flush;\n\t\tlong unsigned int cq_check_overflow;\n\t\tstruct wait_queue_head cq_wait;\n\t\tstruct fasync_struct *cq_fasync;\n\t\tstruct eventfd_ctx *cq_ev_fd;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t};\n\tstruct {\n\t\tstruct mutex uring_lock;\n\t\twait_queue_head_t wait;\n\t\tlong: 64;\n\t};\n\tstruct {\n\t\tspinlock_t completion_lock;\n\t\tstruct list_head iopoll_list;\n\t\tstruct hlist_head *cancel_hash;\n\t\tunsigned int cancel_hash_bits;\n\t\tbool poll_multi_file;\n\t\tspinlock_t inflight_lock;\n\t\tstruct list_head inflight_list;\n\t};\n\tstruct delayed_work file_put_work;\n\tstruct llist_head file_put_llist;\n\tstruct work_struct exit_work;\n\tstruct io_restriction restrictions;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct io_buffer {\n\tstruct list_head list;\n\t__u64 addr;\n\t__s32 len;\n\t__u16 bid;\n};\n\nstruct io_sq_data {\n\trefcount_t refs;\n\tstruct mutex lock;\n\tstruct list_head ctx_list;\n\tstruct list_head ctx_new_list;\n\tstruct mutex ctx_lock;\n\tstruct task_struct *thread;\n\tstruct wait_queue_head wait;\n\tunsigned int sq_thread_idle;\n};\n\nstruct io_rw {\n\tstruct kiocb kiocb;\n\tu64 addr;\n\tu64 len;\n};\n\nstruct io_poll_iocb {\n\tstruct file *file;\n\tstruct wait_queue_head *head;\n\t__poll_t events;\n\tbool done;\n\tbool canceled;\n\tstruct wait_queue_entry wait;\n};\n\nstruct io_poll_remove {\n\tstruct file *file;\n\tu64 addr;\n};\n\nstruct io_accept {\n\tstruct file *file;\n\tstruct sockaddr *addr;\n\tint *addr_len;\n\tint flags;\n\tlong unsigned int nofile;\n};\n\nstruct io_sync {\n\tstruct file *file;\n\tloff_t len;\n\tloff_t off;\n\tint flags;\n\tint mode;\n};\n\nstruct io_cancel {\n\tstruct file *file;\n\tu64 addr;\n};\n\nstruct io_timeout {\n\tstruct file *file;\n\tu32 off;\n\tu32 target_seq;\n\tstruct list_head list;\n\tstruct io_kiocb *head;\n};\n\nstruct io_timeout_rem {\n\tstruct file *file;\n\tu64 addr;\n\tstruct timespec64 ts;\n\tu32 flags;\n};\n\nstruct io_connect {\n\tstruct file *file;\n\tstruct sockaddr *addr;\n\tint addr_len;\n};\n\nstruct io_sr_msg {\n\tstruct file *file;\n\tunion {\n\t\tstruct user_msghdr *umsg;\n\t\tvoid *buf;\n\t};\n\tint msg_flags;\n\tint bgid;\n\tsize_t len;\n\tstruct io_buffer *kbuf;\n};\n\nstruct io_open {\n\tstruct file *file;\n\tint dfd;\n\tbool ignore_nonblock;\n\tstruct filename *filename;\n\tstruct open_how how;\n\tlong unsigned int nofile;\n};\n\nstruct io_close {\n\tstruct file *file;\n\tint fd;\n};\n\nstruct io_files_update {\n\tstruct file *file;\n\tu64 arg;\n\tu32 nr_args;\n\tu32 offset;\n};\n\nstruct io_fadvise {\n\tstruct file *file;\n\tu64 offset;\n\tu32 len;\n\tu32 advice;\n};\n\nstruct io_madvise {\n\tstruct file *file;\n\tu64 addr;\n\tu32 len;\n\tu32 advice;\n};\n\nstruct io_epoll {\n\tstruct file *file;\n\tint epfd;\n\tint op;\n\tint fd;\n\tstruct epoll_event event;\n} __attribute__((packed));\n\nstruct io_splice {\n\tstruct file *file_out;\n\tstruct file *file_in;\n\tloff_t off_out;\n\tloff_t off_in;\n\tu64 len;\n\tunsigned int flags;\n};\n\nstruct io_provide_buf {\n\tstruct file *file;\n\t__u64 addr;\n\t__s32 len;\n\t__u32 bgid;\n\t__u16 nbufs;\n\t__u16 bid;\n};\n\nstruct io_statx {\n\tstruct file *file;\n\tint dfd;\n\tunsigned int mask;\n\tunsigned int flags;\n\tconst char *filename;\n\tstruct statx *buffer;\n};\n\nstruct io_shutdown {\n\tstruct file *file;\n\tint how;\n};\n\nstruct io_rename {\n\tstruct file *file;\n\tint old_dfd;\n\tint new_dfd;\n\tstruct filename *oldpath;\n\tstruct filename *newpath;\n\tint flags;\n};\n\nstruct io_unlink {\n\tstruct file *file;\n\tint dfd;\n\tint flags;\n\tstruct filename *filename;\n};\n\nstruct io_completion {\n\tstruct file *file;\n\tstruct list_head list;\n\tint cflags;\n};\n\nstruct async_poll;\n\nstruct io_kiocb {\n\tunion {\n\t\tstruct file *file;\n\t\tstruct io_rw rw;\n\t\tstruct io_poll_iocb poll;\n\t\tstruct io_poll_remove poll_remove;\n\t\tstruct io_accept accept;\n\t\tstruct io_sync sync;\n\t\tstruct io_cancel cancel;\n\t\tstruct io_timeout timeout;\n\t\tstruct io_timeout_rem timeout_rem;\n\t\tstruct io_connect connect;\n\t\tstruct io_sr_msg sr_msg;\n\t\tstruct io_open open;\n\t\tstruct io_close close;\n\t\tstruct io_files_update files_update;\n\t\tstruct io_fadvise fadvise;\n\t\tstruct io_madvise madvise;\n\t\tstruct io_epoll epoll;\n\t\tstruct io_splice splice;\n\t\tstruct io_provide_buf pbuf;\n\t\tstruct io_statx statx;\n\t\tstruct io_shutdown shutdown;\n\t\tstruct io_rename rename;\n\t\tstruct io_unlink unlink;\n\t\tstruct io_completion compl;\n\t};\n\tvoid *async_data;\n\tu8 opcode;\n\tu8 iopoll_completed;\n\tu16 buf_index;\n\tu32 result;\n\tstruct io_ring_ctx *ctx;\n\tunsigned int flags;\n\trefcount_t refs;\n\tstruct task_struct *task;\n\tu64 user_data;\n\tstruct io_kiocb *link;\n\tstruct percpu_ref *fixed_file_refs;\n\tstruct list_head inflight_entry;\n\tstruct callback_head task_work;\n\tstruct hlist_node hash_node;\n\tstruct async_poll *apoll;\n\tstruct io_wq_work work;\n};\n\nstruct io_timeout_data {\n\tstruct io_kiocb *req;\n\tstruct hrtimer timer;\n\tstruct timespec64 ts;\n\tenum hrtimer_mode mode;\n};\n\nstruct io_async_connect {\n\tstruct __kernel_sockaddr_storage address;\n};\n\nstruct io_async_msghdr {\n\tstruct iovec fast_iov[8];\n\tstruct iovec *iov;\n\tstruct sockaddr *uaddr;\n\tstruct msghdr msg;\n\tstruct __kernel_sockaddr_storage addr;\n};\n\nstruct io_async_rw {\n\tstruct iovec fast_iov[8];\n\tconst struct iovec *free_iovec;\n\tstruct iov_iter iter;\n\tsize_t bytes_done;\n\tstruct wait_page_queue wpq;\n};\n\nenum {\n\tREQ_F_FIXED_FILE_BIT = 0,\n\tREQ_F_IO_DRAIN_BIT = 1,\n\tREQ_F_LINK_BIT = 2,\n\tREQ_F_HARDLINK_BIT = 3,\n\tREQ_F_FORCE_ASYNC_BIT = 4,\n\tREQ_F_BUFFER_SELECT_BIT = 5,\n\tREQ_F_FAIL_LINK_BIT = 6,\n\tREQ_F_INFLIGHT_BIT = 7,\n\tREQ_F_CUR_POS_BIT = 8,\n\tREQ_F_NOWAIT_BIT = 9,\n\tREQ_F_LINK_TIMEOUT_BIT = 10,\n\tREQ_F_ISREG_BIT = 11,\n\tREQ_F_NEED_CLEANUP_BIT = 12,\n\tREQ_F_POLLED_BIT = 13,\n\tREQ_F_BUFFER_SELECTED_BIT = 14,\n\tREQ_F_NO_FILE_TABLE_BIT = 15,\n\tREQ_F_WORK_INITIALIZED_BIT = 16,\n\tREQ_F_LTIMEOUT_ACTIVE_BIT = 17,\n\t__REQ_F_LAST_BIT = 18,\n};\n\nenum {\n\tREQ_F_FIXED_FILE = 1,\n\tREQ_F_IO_DRAIN = 2,\n\tREQ_F_LINK = 4,\n\tREQ_F_HARDLINK = 8,\n\tREQ_F_FORCE_ASYNC = 16,\n\tREQ_F_BUFFER_SELECT = 32,\n\tREQ_F_FAIL_LINK = 64,\n\tREQ_F_INFLIGHT = 128,\n\tREQ_F_CUR_POS = 256,\n\tREQ_F_NOWAIT = 512,\n\tREQ_F_LINK_TIMEOUT = 1024,\n\tREQ_F_ISREG = 2048,\n\tREQ_F_NEED_CLEANUP = 4096,\n\tREQ_F_POLLED = 8192,\n\tREQ_F_BUFFER_SELECTED = 16384,\n\tREQ_F_NO_FILE_TABLE = 32768,\n\tREQ_F_WORK_INITIALIZED = 65536,\n\tREQ_F_LTIMEOUT_ACTIVE = 131072,\n};\n\nstruct async_poll {\n\tstruct io_poll_iocb poll;\n\tstruct io_poll_iocb *double_poll;\n};\n\nstruct io_defer_entry {\n\tstruct list_head list;\n\tstruct io_kiocb *req;\n\tu32 seq;\n};\n\nstruct io_comp_state {\n\tunsigned int nr;\n\tstruct list_head list;\n\tstruct io_ring_ctx *ctx;\n};\n\nstruct io_submit_state {\n\tstruct blk_plug plug;\n\tvoid *reqs[8];\n\tunsigned int free_reqs;\n\tbool plug_started;\n\tstruct io_comp_state comp;\n\tstruct file *file;\n\tunsigned int fd;\n\tunsigned int file_refs;\n\tunsigned int ios_left;\n};\n\nstruct io_op_def {\n\tunsigned int needs_file: 1;\n\tunsigned int needs_file_no_error: 1;\n\tunsigned int hash_reg_file: 1;\n\tunsigned int unbound_nonreg_file: 1;\n\tunsigned int not_supported: 1;\n\tunsigned int pollin: 1;\n\tunsigned int pollout: 1;\n\tunsigned int buffer_select: 1;\n\tunsigned int needs_async_data: 1;\n\tunsigned int plug: 1;\n\tshort unsigned int async_size;\n\tunsigned int work_flags;\n};\n\nenum io_mem_account {\n\tACCT_LOCKED = 0,\n\tACCT_PINNED = 1,\n};\n\nstruct req_batch {\n\tvoid *reqs[8];\n\tint to_free;\n\tstruct task_struct *task;\n\tint task_refs;\n};\n\nstruct io_poll_table {\n\tstruct poll_table_struct pt;\n\tstruct io_kiocb *req;\n\tint error;\n};\n\nstruct io_submit_link {\n\tstruct io_kiocb *head;\n\tstruct io_kiocb *last;\n};\n\nstruct io_wait_queue {\n\tstruct wait_queue_entry wq;\n\tstruct io_ring_ctx *ctx;\n\tunsigned int to_wait;\n\tunsigned int nr_timeouts;\n};\n\nstruct io_file_put {\n\tstruct list_head list;\n\tstruct file *file;\n};\n\nstruct io_task_cancel {\n\tstruct task_struct *task;\n\tstruct files_struct *files;\n};\n\nstruct io_wq_work_list {\n\tstruct io_wq_work_node *first;\n\tstruct io_wq_work_node *last;\n};\n\nenum {\n\tIO_WORKER_F_UP = 1,\n\tIO_WORKER_F_RUNNING = 2,\n\tIO_WORKER_F_FREE = 4,\n\tIO_WORKER_F_FIXED = 8,\n\tIO_WORKER_F_BOUND = 16,\n};\n\nenum {\n\tIO_WQ_BIT_EXIT = 0,\n\tIO_WQ_BIT_ERROR = 1,\n};\n\nenum {\n\tIO_WQE_FLAG_STALLED = 1,\n};\n\nstruct io_wqe;\n\nstruct io_worker {\n\trefcount_t ref;\n\tunsigned int flags;\n\tstruct hlist_nulls_node nulls_node;\n\tstruct list_head all_list;\n\tstruct task_struct *task;\n\tstruct io_wqe *wqe;\n\tstruct io_wq_work *cur_work;\n\tspinlock_t lock;\n\tstruct callback_head rcu;\n\tstruct mm_struct *mm;\n\tstruct cgroup_subsys_state *blkcg_css;\n\tconst struct cred *cur_creds;\n\tconst struct cred *saved_creds;\n\tstruct files_struct *restore_files;\n\tstruct nsproxy *restore_nsproxy;\n\tstruct fs_struct *restore_fs;\n};\n\nstruct io_wqe_acct {\n\tunsigned int nr_workers;\n\tunsigned int max_workers;\n\tatomic_t nr_running;\n};\n\nstruct io_wq___2;\n\nstruct io_wqe {\n\tstruct {\n\t\traw_spinlock_t lock;\n\t\tstruct io_wq_work_list work_list;\n\t\tlong unsigned int hash_map;\n\t\tunsigned int flags;\n\t\tlong: 32;\n\t\tlong: 64;\n\t\tlong: 64;\n\t\tlong: 64;\n\t};\n\tint node;\n\tstruct io_wqe_acct acct[2];\n\tstruct hlist_nulls_head free_list;\n\tstruct list_head all_list;\n\tstruct io_wq___2 *wq;\n\tstruct io_wq_work *hash_tail[64];\n};\n\nenum {\n\tIO_WQ_ACCT_BOUND = 0,\n\tIO_WQ_ACCT_UNBOUND = 1,\n};\n\nstruct io_wq___2 {\n\tstruct io_wqe **wqes;\n\tlong unsigned int state;\n\tfree_work_fn *free_work;\n\tio_wq_work_fn *do_work;\n\tstruct task_struct *manager;\n\tstruct user_struct *user;\n\trefcount_t refs;\n\tstruct completion done;\n\tstruct hlist_node cpuhp_node;\n\trefcount_t use_refs;\n};\n\nstruct io_cb_cancel_data {\n\twork_cancel_fn *fn;\n\tvoid *data;\n\tint nr_running;\n\tint nr_pending;\n\tbool cancel_all;\n};\n\nstruct iomap_ops {\n\tint (*iomap_begin)(struct inode *, loff_t, loff_t, unsigned int, struct iomap *, struct iomap *);\n\tint (*iomap_end)(struct inode *, loff_t, loff_t, ssize_t, unsigned int, struct iomap *);\n};\n\ntypedef loff_t (*iomap_actor_t)(struct inode *, loff_t, loff_t, void *, struct iomap *, struct iomap *);\n\nstruct trace_event_raw_dax_pmd_fault_class {\n\tstruct trace_entry ent;\n\tlong unsigned int ino;\n\tlong unsigned int vm_start;\n\tlong unsigned int vm_end;\n\tlong unsigned int vm_flags;\n\tlong unsigned int address;\n\tlong unsigned int pgoff;\n\tlong unsigned int max_pgoff;\n\tdev_t dev;\n\tunsigned int flags;\n\tint result;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_dax_pmd_load_hole_class {\n\tstruct trace_entry ent;\n\tlong unsigned int ino;\n\tlong unsigned int vm_flags;\n\tlong unsigned int address;\n\tstruct page *zero_page;\n\tvoid *radix_entry;\n\tdev_t dev;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_dax_pmd_insert_mapping_class {\n\tstruct trace_entry ent;\n\tlong unsigned int ino;\n\tlong unsigned int vm_flags;\n\tlong unsigned int address;\n\tlong int length;\n\tu64 pfn_val;\n\tvoid *radix_entry;\n\tdev_t dev;\n\tint write;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_dax_pte_fault_class {\n\tstruct trace_entry ent;\n\tlong unsigned int ino;\n\tlong unsigned int vm_flags;\n\tlong unsigned int address;\n\tlong unsigned int pgoff;\n\tdev_t dev;\n\tunsigned int flags;\n\tint result;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_dax_insert_mapping {\n\tstruct trace_entry ent;\n\tlong unsigned int ino;\n\tlong unsigned int vm_flags;\n\tlong unsigned int address;\n\tvoid *radix_entry;\n\tdev_t dev;\n\tint write;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_dax_writeback_range_class {\n\tstruct trace_entry ent;\n\tlong unsigned int ino;\n\tlong unsigned int start_index;\n\tlong unsigned int end_index;\n\tdev_t dev;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_dax_writeback_one {\n\tstruct trace_entry ent;\n\tlong unsigned int ino;\n\tlong unsigned int pgoff;\n\tlong unsigned int pglen;\n\tdev_t dev;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_dax_pmd_fault_class {};\n\nstruct trace_event_data_offsets_dax_pmd_load_hole_class {};\n\nstruct trace_event_data_offsets_dax_pmd_insert_mapping_class {};\n\nstruct trace_event_data_offsets_dax_pte_fault_class {};\n\nstruct trace_event_data_offsets_dax_insert_mapping {};\n\nstruct trace_event_data_offsets_dax_writeback_range_class {};\n\nstruct trace_event_data_offsets_dax_writeback_one {};\n\ntypedef void (*btf_trace_dax_pmd_fault)(void *, struct inode *, struct vm_fault *, long unsigned int, int);\n\ntypedef void (*btf_trace_dax_pmd_fault_done)(void *, struct inode *, struct vm_fault *, long unsigned int, int);\n\ntypedef void (*btf_trace_dax_pmd_load_hole)(void *, struct inode *, struct vm_fault *, struct page *, void *);\n\ntypedef void (*btf_trace_dax_pmd_load_hole_fallback)(void *, struct inode *, struct vm_fault *, struct page *, void *);\n\ntypedef void (*btf_trace_dax_pmd_insert_mapping)(void *, struct inode *, struct vm_fault *, long int, pfn_t, void *);\n\ntypedef void (*btf_trace_dax_pte_fault)(void *, struct inode *, struct vm_fault *, int);\n\ntypedef void (*btf_trace_dax_pte_fault_done)(void *, struct inode *, struct vm_fault *, int);\n\ntypedef void (*btf_trace_dax_load_hole)(void *, struct inode *, struct vm_fault *, int);\n\ntypedef void (*btf_trace_dax_insert_pfn_mkwrite_no_entry)(void *, struct inode *, struct vm_fault *, int);\n\ntypedef void (*btf_trace_dax_insert_pfn_mkwrite)(void *, struct inode *, struct vm_fault *, int);\n\ntypedef void (*btf_trace_dax_insert_mapping)(void *, struct inode *, struct vm_fault *, void *);\n\ntypedef void (*btf_trace_dax_writeback_range)(void *, struct inode *, long unsigned int, long unsigned int);\n\ntypedef void (*btf_trace_dax_writeback_range_done)(void *, struct inode *, long unsigned int, long unsigned int);\n\ntypedef void (*btf_trace_dax_writeback_one)(void *, struct inode *, long unsigned int, long unsigned int);\n\nstruct exceptional_entry_key {\n\tstruct xarray *xa;\n\tlong unsigned int entry_start;\n};\n\nstruct wait_exceptional_entry_queue {\n\twait_queue_entry_t wait;\n\tstruct exceptional_entry_key key;\n};\n\nstruct fscrypt_blk_crypto_key;\n\nstruct fscrypt_prepared_key {\n\tstruct crypto_skcipher *tfm;\n\tstruct fscrypt_blk_crypto_key *blk_key;\n};\n\nstruct fscrypt_mode;\n\nstruct fscrypt_direct_key;\n\nstruct fscrypt_info {\n\tstruct fscrypt_prepared_key ci_enc_key;\n\tbool ci_owns_key;\n\tbool ci_inlinecrypt;\n\tstruct fscrypt_mode *ci_mode;\n\tstruct inode *ci_inode;\n\tstruct key *ci_master_key;\n\tstruct list_head ci_master_key_link;\n\tstruct fscrypt_direct_key *ci_direct_key;\n\tsiphash_key_t ci_dirhash_key;\n\tbool ci_dirhash_key_initialized;\n\tunion fscrypt_policy ci_policy;\n\tu8 ci_nonce[16];\n\tu32 ci_hashed_ino;\n};\n\nstruct fscrypt_mode {\n\tconst char *friendly_name;\n\tconst char *cipher_str;\n\tint keysize;\n\tint ivsize;\n\tint logged_impl_name;\n\tenum blk_crypto_mode_num blk_crypto_mode;\n};\n\ntypedef enum {\n\tFS_DECRYPT = 0,\n\tFS_ENCRYPT = 1,\n} fscrypt_direction_t;\n\nunion fscrypt_iv {\n\tstruct {\n\t\t__le64 lblk_num;\n\t\tu8 nonce[16];\n\t};\n\tu8 raw[32];\n\t__le64 dun[4];\n};\n\nstruct fscrypt_str {\n\tunsigned char *name;\n\tu32 len;\n};\n\nstruct fscrypt_name {\n\tconst struct qstr *usr_fname;\n\tstruct fscrypt_str disk_name;\n\tu32 hash;\n\tu32 minor_hash;\n\tstruct fscrypt_str crypto_buf;\n\tbool is_nokey_name;\n};\n\nstruct fscrypt_nokey_name {\n\tu32 dirhash[2];\n\tu8 bytes[149];\n\tu8 sha256[32];\n};\n\nstruct fscrypt_hkdf {\n\tstruct crypto_shash *hmac_tfm;\n};\n\nstruct fscrypt_key_specifier {\n\t__u32 type;\n\t__u32 __reserved;\n\tunion {\n\t\t__u8 __reserved[32];\n\t\t__u8 descriptor[8];\n\t\t__u8 identifier[16];\n\t} u;\n};\n\nstruct fscrypt_symlink_data {\n\t__le16 len;\n\tchar encrypted_path[1];\n} __attribute__((packed));\n\nstruct fscrypt_master_key_secret {\n\tstruct fscrypt_hkdf hkdf;\n\tu32 size;\n\tu8 raw[64];\n};\n\nstruct fscrypt_master_key {\n\tstruct fscrypt_master_key_secret mk_secret;\n\tstruct fscrypt_key_specifier mk_spec;\n\tstruct key *mk_users;\n\trefcount_t mk_refcount;\n\tstruct list_head mk_decrypted_inodes;\n\tspinlock_t mk_decrypted_inodes_lock;\n\tstruct fscrypt_prepared_key mk_direct_keys[10];\n\tstruct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[10];\n\tstruct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[10];\n\tsiphash_key_t mk_ino_hash_key;\n\tbool mk_ino_hash_key_initialized;\n};\n\nenum key_state {\n\tKEY_IS_UNINSTANTIATED = 0,\n\tKEY_IS_POSITIVE = 1,\n};\n\nstruct fscrypt_provisioning_key_payload {\n\t__u32 type;\n\t__u32 __reserved;\n\t__u8 raw[0];\n};\n\nstruct fscrypt_add_key_arg {\n\tstruct fscrypt_key_specifier key_spec;\n\t__u32 raw_size;\n\t__u32 key_id;\n\t__u32 __reserved[8];\n\t__u8 raw[0];\n};\n\nstruct fscrypt_remove_key_arg {\n\tstruct fscrypt_key_specifier key_spec;\n\t__u32 removal_status_flags;\n\t__u32 __reserved[5];\n};\n\nstruct fscrypt_get_key_status_arg {\n\tstruct fscrypt_key_specifier key_spec;\n\t__u32 __reserved[6];\n\t__u32 status;\n\t__u32 status_flags;\n\t__u32 user_count;\n\t__u32 __out_reserved[13];\n};\n\nstruct fscrypt_context_v1 {\n\tu8 version;\n\tu8 contents_encryption_mode;\n\tu8 filenames_encryption_mode;\n\tu8 flags;\n\tu8 master_key_descriptor[8];\n\tu8 nonce[16];\n};\n\nstruct fscrypt_context_v2 {\n\tu8 version;\n\tu8 contents_encryption_mode;\n\tu8 filenames_encryption_mode;\n\tu8 flags;\n\tu8 __reserved[4];\n\tu8 master_key_identifier[16];\n\tu8 nonce[16];\n};\n\nunion fscrypt_context {\n\tu8 version;\n\tstruct fscrypt_context_v1 v1;\n\tstruct fscrypt_context_v2 v2;\n};\n\nstruct user_key_payload {\n\tstruct callback_head rcu;\n\tshort unsigned int datalen;\n\tlong: 48;\n\tchar data[0];\n};\n\nstruct fscrypt_key {\n\t__u32 mode;\n\t__u8 raw[64];\n\t__u32 size;\n};\n\nstruct fscrypt_direct_key {\n\tstruct hlist_node dk_node;\n\trefcount_t dk_refcount;\n\tconst struct fscrypt_mode *dk_mode;\n\tstruct fscrypt_prepared_key dk_key;\n\tu8 dk_descriptor[8];\n\tu8 dk_raw[64];\n};\n\nstruct fscrypt_get_policy_ex_arg {\n\t__u64 policy_size;\n\tunion {\n\t\t__u8 version;\n\t\tstruct fscrypt_policy_v1 v1;\n\t\tstruct fscrypt_policy_v2 v2;\n\t} policy;\n};\n\nstruct fscrypt_dummy_policy {\n\tconst union fscrypt_policy *policy;\n};\n\nstruct fscrypt_blk_crypto_key {\n\tstruct blk_crypto_key base;\n\tint num_devs;\n\tstruct request_queue *devs[0];\n};\n\nstruct fsverity_hash_alg;\n\nstruct merkle_tree_params {\n\tstruct fsverity_hash_alg *hash_alg;\n\tconst u8 *hashstate;\n\tunsigned int digest_size;\n\tunsigned int block_size;\n\tunsigned int hashes_per_block;\n\tunsigned int log_blocksize;\n\tunsigned int log_arity;\n\tunsigned int num_levels;\n\tu64 tree_size;\n\tlong unsigned int level0_blocks;\n\tu64 level_start[8];\n};\n\nstruct fsverity_info {\n\tstruct merkle_tree_params tree_params;\n\tu8 root_hash[64];\n\tu8 file_digest[64];\n\tconst struct inode *inode;\n};\n\nstruct fsverity_enable_arg {\n\t__u32 version;\n\t__u32 hash_algorithm;\n\t__u32 block_size;\n\t__u32 salt_size;\n\t__u64 salt_ptr;\n\t__u32 sig_size;\n\t__u32 __reserved1;\n\t__u64 sig_ptr;\n\t__u64 __reserved2[11];\n};\n\nstruct fsverity_descriptor {\n\t__u8 version;\n\t__u8 hash_algorithm;\n\t__u8 log_blocksize;\n\t__u8 salt_size;\n\t__le32 sig_size;\n\t__le64 data_size;\n\t__u8 root_hash[64];\n\t__u8 salt[32];\n\t__u8 __reserved[144];\n\t__u8 signature[0];\n};\n\nstruct crypto_ahash;\n\nstruct fsverity_hash_alg {\n\tstruct crypto_ahash *tfm;\n\tconst char *name;\n\tunsigned int digest_size;\n\tunsigned int block_size;\n\tmempool_t req_pool;\n};\n\nstruct ahash_request;\n\nstruct crypto_ahash {\n\tint (*init)(struct ahash_request *);\n\tint (*update)(struct ahash_request *);\n\tint (*final)(struct ahash_request *);\n\tint (*finup)(struct ahash_request *);\n\tint (*digest)(struct ahash_request *);\n\tint (*export)(struct ahash_request *, void *);\n\tint (*import)(struct ahash_request *, const void *);\n\tint (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);\n\tunsigned int reqsize;\n\tstruct crypto_tfm base;\n};\n\nstruct ahash_request {\n\tstruct crypto_async_request base;\n\tunsigned int nbytes;\n\tstruct scatterlist *src;\n\tu8 *result;\n\tvoid *priv;\n\tvoid *__ctx[0];\n};\n\nstruct hash_alg_common {\n\tunsigned int digestsize;\n\tunsigned int statesize;\n\tstruct crypto_alg base;\n};\n\nstruct fsverity_digest {\n\t__u16 digest_algorithm;\n\t__u16 digest_size;\n\t__u8 digest[0];\n};\n\nstruct flock64 {\n\tshort int l_type;\n\tshort int l_whence;\n\t__kernel_loff_t l_start;\n\t__kernel_loff_t l_len;\n\t__kernel_pid_t l_pid;\n};\n\nstruct trace_event_raw_locks_get_lock_context {\n\tstruct trace_entry ent;\n\tlong unsigned int i_ino;\n\tdev_t s_dev;\n\tunsigned char type;\n\tstruct file_lock_context *ctx;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_filelock_lock {\n\tstruct trace_entry ent;\n\tstruct file_lock *fl;\n\tlong unsigned int i_ino;\n\tdev_t s_dev;\n\tstruct file_lock *fl_blocker;\n\tfl_owner_t fl_owner;\n\tunsigned int fl_pid;\n\tunsigned int fl_flags;\n\tunsigned char fl_type;\n\tloff_t fl_start;\n\tloff_t fl_end;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_filelock_lease {\n\tstruct trace_entry ent;\n\tstruct file_lock *fl;\n\tlong unsigned int i_ino;\n\tdev_t s_dev;\n\tstruct file_lock *fl_blocker;\n\tfl_owner_t fl_owner;\n\tunsigned int fl_flags;\n\tunsigned char fl_type;\n\tlong unsigned int fl_break_time;\n\tlong unsigned int fl_downgrade_time;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_generic_add_lease {\n\tstruct trace_entry ent;\n\tlong unsigned int i_ino;\n\tint wcount;\n\tint rcount;\n\tint icount;\n\tdev_t s_dev;\n\tfl_owner_t fl_owner;\n\tunsigned int fl_flags;\n\tunsigned char fl_type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_leases_conflict {\n\tstruct trace_entry ent;\n\tvoid *lease;\n\tvoid *breaker;\n\tunsigned int l_fl_flags;\n\tunsigned int b_fl_flags;\n\tunsigned char l_fl_type;\n\tunsigned char b_fl_type;\n\tbool conflict;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_locks_get_lock_context {};\n\nstruct trace_event_data_offsets_filelock_lock {};\n\nstruct trace_event_data_offsets_filelock_lease {};\n\nstruct trace_event_data_offsets_generic_add_lease {};\n\nstruct trace_event_data_offsets_leases_conflict {};\n\ntypedef void (*btf_trace_locks_get_lock_context)(void *, struct inode *, int, struct file_lock_context *);\n\ntypedef void (*btf_trace_posix_lock_inode)(void *, struct inode *, struct file_lock *, int);\n\ntypedef void (*btf_trace_fcntl_setlk)(void *, struct inode *, struct file_lock *, int);\n\ntypedef void (*btf_trace_locks_remove_posix)(void *, struct inode *, struct file_lock *, int);\n\ntypedef void (*btf_trace_flock_lock_inode)(void *, struct inode *, struct file_lock *, int);\n\ntypedef void (*btf_trace_break_lease_noblock)(void *, struct inode *, struct file_lock *);\n\ntypedef void (*btf_trace_break_lease_block)(void *, struct inode *, struct file_lock *);\n\ntypedef void (*btf_trace_break_lease_unblock)(void *, struct inode *, struct file_lock *);\n\ntypedef void (*btf_trace_generic_delete_lease)(void *, struct inode *, struct file_lock *);\n\ntypedef void (*btf_trace_time_out_leases)(void *, struct inode *, struct file_lock *);\n\ntypedef void (*btf_trace_generic_add_lease)(void *, struct inode *, struct file_lock *);\n\ntypedef void (*btf_trace_leases_conflict)(void *, bool, struct file_lock *, struct file_lock *);\n\nstruct file_lock_list_struct {\n\tspinlock_t lock;\n\tstruct hlist_head hlist;\n};\n\nstruct locks_iterator {\n\tint li_cpu;\n\tloff_t li_pos;\n};\n\ntypedef unsigned int __kernel_uid_t;\n\ntypedef unsigned int __kernel_gid_t;\n\nstruct elf_prpsinfo {\n\tchar pr_state;\n\tchar pr_sname;\n\tchar pr_zomb;\n\tchar pr_nice;\n\tlong unsigned int pr_flag;\n\t__kernel_uid_t pr_uid;\n\t__kernel_gid_t pr_gid;\n\tpid_t pr_pid;\n\tpid_t pr_ppid;\n\tpid_t pr_pgrp;\n\tpid_t pr_sid;\n\tchar pr_fname[16];\n\tchar pr_psargs[80];\n};\n\nstruct core_vma_metadata {\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tlong unsigned int flags;\n\tlong unsigned int dump_size;\n};\n\nstruct arch_elf_state {};\n\nstruct memelfnote {\n\tconst char *name;\n\tint type;\n\tunsigned int datasz;\n\tvoid *data;\n};\n\nstruct elf_thread_core_info {\n\tstruct elf_thread_core_info *next;\n\tstruct task_struct *task;\n\tstruct elf_prstatus prstatus;\n\tstruct memelfnote notes[0];\n};\n\nstruct elf_note_info {\n\tstruct elf_thread_core_info *thread;\n\tstruct memelfnote psinfo;\n\tstruct memelfnote signote;\n\tstruct memelfnote auxv;\n\tstruct memelfnote files;\n\tsiginfo_t csigdata;\n\tsize_t size;\n\tint thread_notes;\n};\n\nstruct user_regs_struct {\n\tlong unsigned int r15;\n\tlong unsigned int r14;\n\tlong unsigned int r13;\n\tlong unsigned int r12;\n\tlong unsigned int bp;\n\tlong unsigned int bx;\n\tlong unsigned int r11;\n\tlong unsigned int r10;\n\tlong unsigned int r9;\n\tlong unsigned int r8;\n\tlong unsigned int ax;\n\tlong unsigned int cx;\n\tlong unsigned int dx;\n\tlong unsigned int si;\n\tlong unsigned int di;\n\tlong unsigned int orig_ax;\n\tlong unsigned int ip;\n\tlong unsigned int cs;\n\tlong unsigned int flags;\n\tlong unsigned int sp;\n\tlong unsigned int ss;\n\tlong unsigned int fs_base;\n\tlong unsigned int gs_base;\n\tlong unsigned int ds;\n\tlong unsigned int es;\n\tlong unsigned int fs;\n\tlong unsigned int gs;\n};\n\nstruct elf32_shdr {\n\tElf32_Word sh_name;\n\tElf32_Word sh_type;\n\tElf32_Word sh_flags;\n\tElf32_Addr sh_addr;\n\tElf32_Off sh_offset;\n\tElf32_Word sh_size;\n\tElf32_Word sh_link;\n\tElf32_Word sh_info;\n\tElf32_Word sh_addralign;\n\tElf32_Word sh_entsize;\n};\n\ntypedef struct user_regs_struct compat_elf_gregset_t;\n\nstruct compat_elf_siginfo {\n\tcompat_int_t si_signo;\n\tcompat_int_t si_code;\n\tcompat_int_t si_errno;\n};\n\nstruct compat_elf_prstatus {\n\tstruct compat_elf_siginfo pr_info;\n\tshort int pr_cursig;\n\tcompat_ulong_t pr_sigpend;\n\tcompat_ulong_t pr_sighold;\n\tcompat_pid_t pr_pid;\n\tcompat_pid_t pr_ppid;\n\tcompat_pid_t pr_pgrp;\n\tcompat_pid_t pr_sid;\n\tstruct old_timeval32 pr_utime;\n\tstruct old_timeval32 pr_stime;\n\tstruct old_timeval32 pr_cutime;\n\tstruct old_timeval32 pr_cstime;\n\tcompat_elf_gregset_t pr_reg;\n\tcompat_int_t pr_fpvalid;\n};\n\nstruct compat_elf_prpsinfo {\n\tchar pr_state;\n\tchar pr_sname;\n\tchar pr_zomb;\n\tchar pr_nice;\n\tcompat_ulong_t pr_flag;\n\t__compat_uid_t pr_uid;\n\t__compat_gid_t pr_gid;\n\tcompat_pid_t pr_pid;\n\tcompat_pid_t pr_ppid;\n\tcompat_pid_t pr_pgrp;\n\tcompat_pid_t pr_sid;\n\tchar pr_fname[16];\n\tchar pr_psargs[80];\n};\n\nstruct elf_thread_core_info___2 {\n\tstruct elf_thread_core_info___2 *next;\n\tstruct task_struct *task;\n\tstruct compat_elf_prstatus prstatus;\n\tstruct memelfnote notes[0];\n};\n\nstruct elf_note_info___2 {\n\tstruct elf_thread_core_info___2 *thread;\n\tstruct memelfnote psinfo;\n\tstruct memelfnote signote;\n\tstruct memelfnote auxv;\n\tstruct memelfnote files;\n\tcompat_siginfo_t csigdata;\n\tsize_t size;\n\tint thread_notes;\n};\n\nstruct mb_cache_entry {\n\tstruct list_head e_list;\n\tstruct hlist_bl_node e_hash_list;\n\tatomic_t e_refcnt;\n\tu32 e_key;\n\tu32 e_referenced: 1;\n\tu32 e_reusable: 1;\n\tu64 e_value;\n};\n\nstruct mb_cache {\n\tstruct hlist_bl_head *c_hash;\n\tint c_bucket_bits;\n\tlong unsigned int c_max_entries;\n\tspinlock_t c_list_lock;\n\tstruct list_head c_list;\n\tlong unsigned int c_entry_count;\n\tstruct shrinker c_shrink;\n\tstruct work_struct c_shrink_work;\n};\n\nstruct posix_acl_xattr_entry {\n\t__le16 e_tag;\n\t__le16 e_perm;\n\t__le32 e_id;\n};\n\nstruct posix_acl_xattr_header {\n\t__le32 a_version;\n};\n\nstruct core_name {\n\tchar *corename;\n\tint used;\n\tint size;\n};\n\nstruct trace_event_raw_iomap_readpage_class {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tu64 ino;\n\tint nr_pages;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_iomap_range_class {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tu64 ino;\n\tloff_t size;\n\tlong unsigned int offset;\n\tunsigned int length;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_iomap_class {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tu64 ino;\n\tu64 addr;\n\tloff_t offset;\n\tu64 length;\n\tu16 type;\n\tu16 flags;\n\tdev_t bdev;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_iomap_apply {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tu64 ino;\n\tloff_t pos;\n\tloff_t length;\n\tunsigned int flags;\n\tconst void *ops;\n\tvoid *actor;\n\tlong unsigned int caller;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_iomap_readpage_class {};\n\nstruct trace_event_data_offsets_iomap_range_class {};\n\nstruct trace_event_data_offsets_iomap_class {};\n\nstruct trace_event_data_offsets_iomap_apply {};\n\ntypedef void (*btf_trace_iomap_readpage)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_iomap_readahead)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_iomap_writepage)(void *, struct inode *, long unsigned int, unsigned int);\n\ntypedef void (*btf_trace_iomap_releasepage)(void *, struct inode *, long unsigned int, unsigned int);\n\ntypedef void (*btf_trace_iomap_invalidatepage)(void *, struct inode *, long unsigned int, unsigned int);\n\ntypedef void (*btf_trace_iomap_dio_invalidate_fail)(void *, struct inode *, long unsigned int, unsigned int);\n\ntypedef void (*btf_trace_iomap_apply_dstmap)(void *, struct inode *, struct iomap *);\n\ntypedef void (*btf_trace_iomap_apply_srcmap)(void *, struct inode *, struct iomap *);\n\ntypedef void (*btf_trace_iomap_apply)(void *, struct inode *, loff_t, loff_t, unsigned int, const void *, void *, long unsigned int);\n\nstruct iomap_ioend {\n\tstruct list_head io_list;\n\tu16 io_type;\n\tu16 io_flags;\n\tstruct inode *io_inode;\n\tsize_t io_size;\n\tloff_t io_offset;\n\tvoid *io_private;\n\tstruct bio *io_bio;\n\tstruct bio io_inline_bio;\n};\n\nstruct iomap_writepage_ctx;\n\nstruct iomap_writeback_ops {\n\tint (*map_blocks)(struct iomap_writepage_ctx *, struct inode *, loff_t);\n\tint (*prepare_ioend)(struct iomap_ioend *, int);\n\tvoid (*discard_page)(struct page *, loff_t);\n};\n\nstruct iomap_writepage_ctx {\n\tstruct iomap iomap;\n\tstruct iomap_ioend *ioend;\n\tconst struct iomap_writeback_ops *ops;\n};\n\nstruct iomap_page {\n\tatomic_t read_bytes_pending;\n\tatomic_t write_bytes_pending;\n\tspinlock_t uptodate_lock;\n\tlong unsigned int uptodate[0];\n};\n\nstruct iomap_readpage_ctx {\n\tstruct page *cur_page;\n\tbool cur_page_in_bio;\n\tstruct bio *bio;\n\tstruct readahead_control *rac;\n};\n\nenum {\n\tIOMAP_WRITE_F_UNSHARE = 1,\n};\n\nstruct iomap_dio_ops {\n\tint (*end_io)(struct kiocb *, ssize_t, int, unsigned int);\n\tblk_qc_t (*submit_io)(struct inode *, struct iomap *, struct bio *, loff_t);\n};\n\nstruct iomap_dio {\n\tstruct kiocb *iocb;\n\tconst struct iomap_dio_ops *dops;\n\tloff_t i_size;\n\tloff_t size;\n\tatomic_t ref;\n\tunsigned int flags;\n\tint error;\n\tbool wait_for_completion;\n\tunion {\n\t\tstruct {\n\t\t\tstruct iov_iter *iter;\n\t\t\tstruct task_struct *waiter;\n\t\t\tstruct request_queue *last_queue;\n\t\t\tblk_qc_t cookie;\n\t\t} submit;\n\t\tstruct {\n\t\t\tstruct work_struct work;\n\t\t} aio;\n\t};\n};\n\nstruct fiemap_ctx {\n\tstruct fiemap_extent_info *fi;\n\tstruct iomap prev;\n};\n\nstruct iomap_swapfile_info {\n\tstruct iomap iomap;\n\tstruct swap_info_struct *sis;\n\tuint64_t lowest_ppage;\n\tuint64_t highest_ppage;\n\tlong unsigned int nr_pages;\n\tint nr_extents;\n};\n\nenum {\n\tQIF_BLIMITS_B = 0,\n\tQIF_SPACE_B = 1,\n\tQIF_ILIMITS_B = 2,\n\tQIF_INODES_B = 3,\n\tQIF_BTIME_B = 4,\n\tQIF_ITIME_B = 5,\n};\n\ntypedef __kernel_uid32_t qid_t;\n\nenum {\n\tDQF_INFO_DIRTY_B = 17,\n};\n\nstruct dqstats {\n\tlong unsigned int stat[8];\n\tstruct percpu_counter counter[8];\n};\n\nenum {\n\t_DQUOT_USAGE_ENABLED = 0,\n\t_DQUOT_LIMITS_ENABLED = 1,\n\t_DQUOT_SUSPENDED = 2,\n\t_DQUOT_STATE_FLAGS = 3,\n};\n\nstruct quota_module_name {\n\tint qm_fmt_id;\n\tchar *qm_mod_name;\n};\n\nstruct dquot_warn {\n\tstruct super_block *w_sb;\n\tstruct kqid w_dq_id;\n\tshort int w_type;\n};\n\nstruct qtree_fmt_operations {\n\tvoid (*mem2disk_dqblk)(void *, struct dquot *);\n\tvoid (*disk2mem_dqblk)(struct dquot *, void *);\n\tint (*is_id)(void *, struct dquot *);\n};\n\nstruct qtree_mem_dqinfo {\n\tstruct super_block *dqi_sb;\n\tint dqi_type;\n\tunsigned int dqi_blocks;\n\tunsigned int dqi_free_blk;\n\tunsigned int dqi_free_entry;\n\tunsigned int dqi_blocksize_bits;\n\tunsigned int dqi_entry_size;\n\tunsigned int dqi_usable_bs;\n\tunsigned int dqi_qtree_depth;\n\tconst struct qtree_fmt_operations *dqi_ops;\n};\n\nstruct v2_disk_dqheader {\n\t__le32 dqh_magic;\n\t__le32 dqh_version;\n};\n\nstruct v2r0_disk_dqblk {\n\t__le32 dqb_id;\n\t__le32 dqb_ihardlimit;\n\t__le32 dqb_isoftlimit;\n\t__le32 dqb_curinodes;\n\t__le32 dqb_bhardlimit;\n\t__le32 dqb_bsoftlimit;\n\t__le64 dqb_curspace;\n\t__le64 dqb_btime;\n\t__le64 dqb_itime;\n};\n\nstruct v2r1_disk_dqblk {\n\t__le32 dqb_id;\n\t__le32 dqb_pad;\n\t__le64 dqb_ihardlimit;\n\t__le64 dqb_isoftlimit;\n\t__le64 dqb_curinodes;\n\t__le64 dqb_bhardlimit;\n\t__le64 dqb_bsoftlimit;\n\t__le64 dqb_curspace;\n\t__le64 dqb_btime;\n\t__le64 dqb_itime;\n};\n\nstruct v2_disk_dqinfo {\n\t__le32 dqi_bgrace;\n\t__le32 dqi_igrace;\n\t__le32 dqi_flags;\n\t__le32 dqi_blocks;\n\t__le32 dqi_free_blk;\n\t__le32 dqi_free_entry;\n};\n\nstruct qt_disk_dqdbheader {\n\t__le32 dqdh_next_free;\n\t__le32 dqdh_prev_free;\n\t__le16 dqdh_entries;\n\t__le16 dqdh_pad1;\n\t__le32 dqdh_pad2;\n};\n\nstruct fs_disk_quota {\n\t__s8 d_version;\n\t__s8 d_flags;\n\t__u16 d_fieldmask;\n\t__u32 d_id;\n\t__u64 d_blk_hardlimit;\n\t__u64 d_blk_softlimit;\n\t__u64 d_ino_hardlimit;\n\t__u64 d_ino_softlimit;\n\t__u64 d_bcount;\n\t__u64 d_icount;\n\t__s32 d_itimer;\n\t__s32 d_btimer;\n\t__u16 d_iwarns;\n\t__u16 d_bwarns;\n\t__s8 d_itimer_hi;\n\t__s8 d_btimer_hi;\n\t__s8 d_rtbtimer_hi;\n\t__s8 d_padding2;\n\t__u64 d_rtb_hardlimit;\n\t__u64 d_rtb_softlimit;\n\t__u64 d_rtbcount;\n\t__s32 d_rtbtimer;\n\t__u16 d_rtbwarns;\n\t__s16 d_padding3;\n\tchar d_padding4[8];\n};\n\nstruct fs_qfilestat {\n\t__u64 qfs_ino;\n\t__u64 qfs_nblks;\n\t__u32 qfs_nextents;\n};\n\ntypedef struct fs_qfilestat fs_qfilestat_t;\n\nstruct fs_quota_stat {\n\t__s8 qs_version;\n\t__u16 qs_flags;\n\t__s8 qs_pad;\n\tfs_qfilestat_t qs_uquota;\n\tfs_qfilestat_t qs_gquota;\n\t__u32 qs_incoredqs;\n\t__s32 qs_btimelimit;\n\t__s32 qs_itimelimit;\n\t__s32 qs_rtbtimelimit;\n\t__u16 qs_bwarnlimit;\n\t__u16 qs_iwarnlimit;\n};\n\nstruct fs_qfilestatv {\n\t__u64 qfs_ino;\n\t__u64 qfs_nblks;\n\t__u32 qfs_nextents;\n\t__u32 qfs_pad;\n};\n\nstruct fs_quota_statv {\n\t__s8 qs_version;\n\t__u8 qs_pad1;\n\t__u16 qs_flags;\n\t__u32 qs_incoredqs;\n\tstruct fs_qfilestatv qs_uquota;\n\tstruct fs_qfilestatv qs_gquota;\n\tstruct fs_qfilestatv qs_pquota;\n\t__s32 qs_btimelimit;\n\t__s32 qs_itimelimit;\n\t__s32 qs_rtbtimelimit;\n\t__u16 qs_bwarnlimit;\n\t__u16 qs_iwarnlimit;\n\t__u64 qs_pad2[8];\n};\n\nstruct if_dqblk {\n\t__u64 dqb_bhardlimit;\n\t__u64 dqb_bsoftlimit;\n\t__u64 dqb_curspace;\n\t__u64 dqb_ihardlimit;\n\t__u64 dqb_isoftlimit;\n\t__u64 dqb_curinodes;\n\t__u64 dqb_btime;\n\t__u64 dqb_itime;\n\t__u32 dqb_valid;\n};\n\nstruct if_nextdqblk {\n\t__u64 dqb_bhardlimit;\n\t__u64 dqb_bsoftlimit;\n\t__u64 dqb_curspace;\n\t__u64 dqb_ihardlimit;\n\t__u64 dqb_isoftlimit;\n\t__u64 dqb_curinodes;\n\t__u64 dqb_btime;\n\t__u64 dqb_itime;\n\t__u32 dqb_valid;\n\t__u32 dqb_id;\n};\n\nstruct if_dqinfo {\n\t__u64 dqi_bgrace;\n\t__u64 dqi_igrace;\n\t__u32 dqi_flags;\n\t__u32 dqi_valid;\n};\n\nstruct compat_if_dqblk {\n\tcompat_u64 dqb_bhardlimit;\n\tcompat_u64 dqb_bsoftlimit;\n\tcompat_u64 dqb_curspace;\n\tcompat_u64 dqb_ihardlimit;\n\tcompat_u64 dqb_isoftlimit;\n\tcompat_u64 dqb_curinodes;\n\tcompat_u64 dqb_btime;\n\tcompat_u64 dqb_itime;\n\tcompat_uint_t dqb_valid;\n} __attribute__((packed));\n\nstruct compat_fs_qfilestat {\n\tcompat_u64 dqb_bhardlimit;\n\tcompat_u64 qfs_nblks;\n\tcompat_uint_t qfs_nextents;\n} __attribute__((packed));\n\nstruct compat_fs_quota_stat {\n\t__s8 qs_version;\n\tchar: 8;\n\t__u16 qs_flags;\n\t__s8 qs_pad;\n\tint: 24;\n\tstruct compat_fs_qfilestat qs_uquota;\n\tstruct compat_fs_qfilestat qs_gquota;\n\tcompat_uint_t qs_incoredqs;\n\tcompat_int_t qs_btimelimit;\n\tcompat_int_t qs_itimelimit;\n\tcompat_int_t qs_rtbtimelimit;\n\t__u16 qs_bwarnlimit;\n\t__u16 qs_iwarnlimit;\n} __attribute__((packed));\n\nenum {\n\tQUOTA_NL_C_UNSPEC = 0,\n\tQUOTA_NL_C_WARNING = 1,\n\t__QUOTA_NL_C_MAX = 2,\n};\n\nenum {\n\tQUOTA_NL_A_UNSPEC = 0,\n\tQUOTA_NL_A_QTYPE = 1,\n\tQUOTA_NL_A_EXCESS_ID = 2,\n\tQUOTA_NL_A_WARNING = 3,\n\tQUOTA_NL_A_DEV_MAJOR = 4,\n\tQUOTA_NL_A_DEV_MINOR = 5,\n\tQUOTA_NL_A_CAUSED_ID = 6,\n\tQUOTA_NL_A_PAD = 7,\n\t__QUOTA_NL_A_MAX = 8,\n};\n\nstruct proc_maps_private {\n\tstruct inode *inode;\n\tstruct task_struct *task;\n\tstruct mm_struct *mm;\n\tstruct vm_area_struct *tail_vma;\n\tstruct mempolicy *task_mempolicy;\n};\n\nstruct mem_size_stats {\n\tlong unsigned int resident;\n\tlong unsigned int shared_clean;\n\tlong unsigned int shared_dirty;\n\tlong unsigned int private_clean;\n\tlong unsigned int private_dirty;\n\tlong unsigned int referenced;\n\tlong unsigned int anonymous;\n\tlong unsigned int lazyfree;\n\tlong unsigned int anonymous_thp;\n\tlong unsigned int shmem_thp;\n\tlong unsigned int file_thp;\n\tlong unsigned int swap;\n\tlong unsigned int shared_hugetlb;\n\tlong unsigned int private_hugetlb;\n\tu64 pss;\n\tu64 pss_anon;\n\tu64 pss_file;\n\tu64 pss_shmem;\n\tu64 pss_locked;\n\tu64 swap_pss;\n\tbool check_shmem_swap;\n};\n\nenum clear_refs_types {\n\tCLEAR_REFS_ALL = 1,\n\tCLEAR_REFS_ANON = 2,\n\tCLEAR_REFS_MAPPED = 3,\n\tCLEAR_REFS_SOFT_DIRTY = 4,\n\tCLEAR_REFS_MM_HIWATER_RSS = 5,\n\tCLEAR_REFS_LAST = 6,\n};\n\nstruct clear_refs_private {\n\tenum clear_refs_types type;\n};\n\ntypedef struct {\n\tu64 pme;\n} pagemap_entry_t;\n\nstruct pagemapread {\n\tint pos;\n\tint len;\n\tpagemap_entry_t *buffer;\n\tbool show_pfn;\n};\n\nstruct numa_maps {\n\tlong unsigned int pages;\n\tlong unsigned int anon;\n\tlong unsigned int active;\n\tlong unsigned int writeback;\n\tlong unsigned int mapcount_max;\n\tlong unsigned int dirty;\n\tlong unsigned int swapcache;\n\tlong unsigned int node[1024];\n};\n\nstruct numa_maps_private {\n\tstruct proc_maps_private proc_maps;\n\tstruct numa_maps md;\n};\n\nstruct pde_opener {\n\tstruct list_head lh;\n\tstruct file *file;\n\tbool closing;\n\tstruct completion *c;\n};\n\nenum {\n\tBIAS = 2147483648,\n};\n\nstruct proc_fs_context {\n\tstruct pid_namespace *pid_ns;\n\tunsigned int mask;\n\tenum proc_hidepid hidepid;\n\tint gid;\n\tenum proc_pidonly pidonly;\n};\n\nenum proc_param {\n\tOpt_gid___2 = 0,\n\tOpt_hidepid = 1,\n\tOpt_subset = 2,\n};\n\nstruct genradix_root;\n\nstruct __genradix {\n\tstruct genradix_root *root;\n};\n\nstruct syscall_info {\n\t__u64 sp;\n\tstruct seccomp_data data;\n};\n\ntypedef struct dentry *instantiate_t(struct dentry *, struct task_struct *, const void *);\n\nstruct pid_entry {\n\tconst char *name;\n\tunsigned int len;\n\tumode_t mode;\n\tconst struct inode_operations *iop;\n\tconst struct file_operations *fop;\n\tunion proc_op op;\n};\n\nstruct limit_names {\n\tconst char *name;\n\tconst char *unit;\n};\n\nstruct map_files_info {\n\tlong unsigned int start;\n\tlong unsigned int end;\n\tfmode_t mode;\n};\n\nstruct timers_private {\n\tstruct pid *pid;\n\tstruct task_struct *task;\n\tstruct sighand_struct *sighand;\n\tstruct pid_namespace *ns;\n\tlong unsigned int flags;\n};\n\nstruct tgid_iter {\n\tunsigned int tgid;\n\tstruct task_struct *task;\n};\n\nstruct fd_data {\n\tfmode_t mode;\n\tunsigned int fd;\n};\n\nstruct sysctl_alias {\n\tconst char *kernel_param;\n\tconst char *sysctl_param;\n};\n\nstruct seq_net_private {\n\tstruct net *net;\n};\n\nstruct bpf_iter_aux_info___2;\n\nstruct vmcore {\n\tstruct list_head list;\n\tlong long unsigned int paddr;\n\tlong long unsigned int size;\n\tloff_t offset;\n};\n\nstruct vmcoredd_node {\n\tstruct list_head list;\n\tvoid *buf;\n\tunsigned int size;\n};\n\ntypedef struct elf64_note Elf64_Nhdr;\n\nstruct vmcoredd_header {\n\t__u32 n_namesz;\n\t__u32 n_descsz;\n\t__u32 n_type;\n\t__u8 name[8];\n\t__u8 dump_name[44];\n};\n\nstruct vmcoredd_data {\n\tchar dump_name[44];\n\tunsigned int size;\n\tint (*vmcoredd_callback)(struct vmcoredd_data *, void *);\n};\n\nstruct kernfs_iattrs {\n\tkuid_t ia_uid;\n\tkgid_t ia_gid;\n\tstruct timespec64 ia_atime;\n\tstruct timespec64 ia_mtime;\n\tstruct timespec64 ia_ctime;\n\tstruct simple_xattrs xattrs;\n\tatomic_t nr_user_xattrs;\n\tatomic_t user_xattr_size;\n};\n\nstruct kernfs_super_info {\n\tstruct super_block *sb;\n\tstruct kernfs_root *root;\n\tconst void *ns;\n\tstruct list_head node;\n};\n\nenum kernfs_node_flag {\n\tKERNFS_ACTIVATED = 16,\n\tKERNFS_NS = 32,\n\tKERNFS_HAS_SEQ_SHOW = 64,\n\tKERNFS_HAS_MMAP = 128,\n\tKERNFS_LOCKDEP = 256,\n\tKERNFS_SUICIDAL = 1024,\n\tKERNFS_SUICIDED = 2048,\n\tKERNFS_EMPTY_DIR = 4096,\n\tKERNFS_HAS_RELEASE = 8192,\n};\n\nstruct kernfs_open_node {\n\tatomic_t refcnt;\n\tatomic_t event;\n\twait_queue_head_t poll;\n\tstruct list_head files;\n};\n\nstruct config_group;\n\nstruct config_item_type;\n\nstruct config_item {\n\tchar *ci_name;\n\tchar ci_namebuf[20];\n\tstruct kref ci_kref;\n\tstruct list_head ci_entry;\n\tstruct config_item *ci_parent;\n\tstruct config_group *ci_group;\n\tconst struct config_item_type *ci_type;\n\tstruct dentry *ci_dentry;\n};\n\nstruct configfs_subsystem;\n\nstruct config_group {\n\tstruct config_item cg_item;\n\tstruct list_head cg_children;\n\tstruct configfs_subsystem *cg_subsys;\n\tstruct list_head default_groups;\n\tstruct list_head group_entry;\n};\n\nstruct configfs_item_operations;\n\nstruct configfs_group_operations;\n\nstruct configfs_attribute;\n\nstruct configfs_bin_attribute;\n\nstruct config_item_type {\n\tstruct module *ct_owner;\n\tstruct configfs_item_operations *ct_item_ops;\n\tstruct configfs_group_operations *ct_group_ops;\n\tstruct configfs_attribute **ct_attrs;\n\tstruct configfs_bin_attribute **ct_bin_attrs;\n};\n\nstruct configfs_item_operations {\n\tvoid (*release)(struct config_item *);\n\tint (*allow_link)(struct config_item *, struct config_item *);\n\tvoid (*drop_link)(struct config_item *, struct config_item *);\n};\n\nstruct configfs_group_operations {\n\tstruct config_item * (*make_item)(struct config_group *, const char *);\n\tstruct config_group * (*make_group)(struct config_group *, const char *);\n\tint (*commit_item)(struct config_item *);\n\tvoid (*disconnect_notify)(struct config_group *, struct config_item *);\n\tvoid (*drop_item)(struct config_group *, struct config_item *);\n};\n\nstruct configfs_attribute {\n\tconst char *ca_name;\n\tstruct module *ca_owner;\n\tumode_t ca_mode;\n\tssize_t (*show)(struct config_item *, char *);\n\tssize_t (*store)(struct config_item *, const char *, size_t);\n};\n\nstruct configfs_bin_attribute {\n\tstruct configfs_attribute cb_attr;\n\tvoid *cb_private;\n\tsize_t cb_max_size;\n\tssize_t (*read)(struct config_item *, void *, size_t);\n\tssize_t (*write)(struct config_item *, const void *, size_t);\n};\n\nstruct configfs_subsystem {\n\tstruct config_group su_group;\n\tstruct mutex su_mutex;\n};\n\nstruct configfs_fragment {\n\tatomic_t frag_count;\n\tstruct rw_semaphore frag_sem;\n\tbool frag_dead;\n};\n\nstruct configfs_dirent {\n\tatomic_t s_count;\n\tint s_dependent_count;\n\tstruct list_head s_sibling;\n\tstruct list_head s_children;\n\tint s_links;\n\tvoid *s_element;\n\tint s_type;\n\tumode_t s_mode;\n\tstruct dentry *s_dentry;\n\tstruct iattr *s_iattr;\n\tstruct configfs_fragment *s_frag;\n};\n\nstruct configfs_buffer {\n\tsize_t count;\n\tloff_t pos;\n\tchar *page;\n\tstruct configfs_item_operations *ops;\n\tstruct mutex mutex;\n\tint needs_read_fill;\n\tbool read_in_progress;\n\tbool write_in_progress;\n\tchar *bin_buffer;\n\tint bin_buffer_size;\n\tint cb_max_size;\n\tstruct config_item *item;\n\tstruct module *owner;\n\tunion {\n\t\tstruct configfs_attribute *attr;\n\t\tstruct configfs_bin_attribute *bin_attr;\n\t};\n};\n\nstruct pts_mount_opts {\n\tint setuid;\n\tint setgid;\n\tkuid_t uid;\n\tkgid_t gid;\n\tumode_t mode;\n\tumode_t ptmxmode;\n\tint reserve;\n\tint max;\n};\n\nenum {\n\tOpt_uid___2 = 0,\n\tOpt_gid___3 = 1,\n\tOpt_mode___2 = 2,\n\tOpt_ptmxmode = 3,\n\tOpt_newinstance = 4,\n\tOpt_max = 5,\n\tOpt_err = 6,\n};\n\nstruct pts_fs_info {\n\tstruct ida allocated_ptys;\n\tstruct pts_mount_opts mount_opts;\n\tstruct super_block *sb;\n\tstruct dentry *ptmx_dentry;\n};\n\nstruct dcookie_struct {\n\tstruct path path;\n\tstruct list_head hash_list;\n};\n\nstruct dcookie_user {\n\tstruct list_head next;\n};\n\ntypedef unsigned int tid_t;\n\nstruct transaction_chp_stats_s {\n\tlong unsigned int cs_chp_time;\n\t__u32 cs_forced_to_close;\n\t__u32 cs_written;\n\t__u32 cs_dropped;\n};\n\nstruct journal_s;\n\ntypedef struct journal_s journal_t;\n\nstruct journal_head;\n\nstruct transaction_s;\n\ntypedef struct transaction_s transaction_t;\n\nstruct transaction_s {\n\tjournal_t *t_journal;\n\ttid_t t_tid;\n\tenum {\n\t\tT_RUNNING = 0,\n\t\tT_LOCKED = 1,\n\t\tT_SWITCH = 2,\n\t\tT_FLUSH = 3,\n\t\tT_COMMIT = 4,\n\t\tT_COMMIT_DFLUSH = 5,\n\t\tT_COMMIT_JFLUSH = 6,\n\t\tT_COMMIT_CALLBACK = 7,\n\t\tT_FINISHED = 8,\n\t} t_state;\n\tlong unsigned int t_log_start;\n\tint t_nr_buffers;\n\tstruct journal_head *t_reserved_list;\n\tstruct journal_head *t_buffers;\n\tstruct journal_head *t_forget;\n\tstruct journal_head *t_checkpoint_list;\n\tstruct journal_head *t_checkpoint_io_list;\n\tstruct journal_head *t_shadow_list;\n\tstruct list_head t_inode_list;\n\tspinlock_t t_handle_lock;\n\tlong unsigned int t_max_wait;\n\tlong unsigned int t_start;\n\tlong unsigned int t_requested;\n\tstruct transaction_chp_stats_s t_chp_stats;\n\tatomic_t t_updates;\n\tatomic_t t_outstanding_credits;\n\tatomic_t t_outstanding_revokes;\n\tatomic_t t_handle_count;\n\ttransaction_t *t_cpnext;\n\ttransaction_t *t_cpprev;\n\tlong unsigned int t_expires;\n\tktime_t t_start_time;\n\tunsigned int t_synchronous_commit: 1;\n\tint t_need_data_flush;\n\tstruct list_head t_private_list;\n};\n\nstruct jbd2_buffer_trigger_type;\n\nstruct journal_head {\n\tstruct buffer_head *b_bh;\n\tspinlock_t b_state_lock;\n\tint b_jcount;\n\tunsigned int b_jlist;\n\tunsigned int b_modified;\n\tchar *b_frozen_data;\n\tchar *b_committed_data;\n\ttransaction_t *b_transaction;\n\ttransaction_t *b_next_transaction;\n\tstruct journal_head *b_tnext;\n\tstruct journal_head *b_tprev;\n\ttransaction_t *b_cp_transaction;\n\tstruct journal_head *b_cpnext;\n\tstruct journal_head *b_cpprev;\n\tstruct jbd2_buffer_trigger_type *b_triggers;\n\tstruct jbd2_buffer_trigger_type *b_frozen_triggers;\n};\n\nstruct jbd2_buffer_trigger_type {\n\tvoid (*t_frozen)(struct jbd2_buffer_trigger_type *, struct buffer_head *, void *, size_t);\n\tvoid (*t_abort)(struct jbd2_buffer_trigger_type *, struct buffer_head *);\n};\n\nstruct jbd2_journal_handle;\n\ntypedef struct jbd2_journal_handle handle_t;\n\nstruct jbd2_journal_handle {\n\tunion {\n\t\ttransaction_t *h_transaction;\n\t\tjournal_t *h_journal;\n\t};\n\thandle_t *h_rsv_handle;\n\tint h_total_credits;\n\tint h_revoke_credits;\n\tint h_revoke_credits_requested;\n\tint h_ref;\n\tint h_err;\n\tunsigned int h_sync: 1;\n\tunsigned int h_jdata: 1;\n\tunsigned int h_reserved: 1;\n\tunsigned int h_aborted: 1;\n\tunsigned int h_type: 8;\n\tunsigned int h_line_no: 16;\n\tlong unsigned int h_start_jiffies;\n\tunsigned int h_requested_credits;\n\tunsigned int saved_alloc_context;\n};\n\nstruct transaction_run_stats_s {\n\tlong unsigned int rs_wait;\n\tlong unsigned int rs_request_delay;\n\tlong unsigned int rs_running;\n\tlong unsigned int rs_locked;\n\tlong unsigned int rs_flushing;\n\tlong unsigned int rs_logging;\n\t__u32 rs_handle_count;\n\t__u32 rs_blocks;\n\t__u32 rs_blocks_logged;\n};\n\nstruct transaction_stats_s {\n\tlong unsigned int ts_tid;\n\tlong unsigned int ts_requested;\n\tstruct transaction_run_stats_s run;\n};\n\nenum passtype {\n\tPASS_SCAN = 0,\n\tPASS_REVOKE = 1,\n\tPASS_REPLAY = 2,\n};\n\nstruct journal_superblock_s;\n\ntypedef struct journal_superblock_s journal_superblock_t;\n\nstruct jbd2_revoke_table_s;\n\nstruct jbd2_inode;\n\nstruct journal_s {\n\tlong unsigned int j_flags;\n\tint j_errno;\n\tstruct mutex j_abort_mutex;\n\tstruct buffer_head *j_sb_buffer;\n\tjournal_superblock_t *j_superblock;\n\tint j_format_version;\n\trwlock_t j_state_lock;\n\tint j_barrier_count;\n\tstruct mutex j_barrier;\n\ttransaction_t *j_running_transaction;\n\ttransaction_t *j_committing_transaction;\n\ttransaction_t *j_checkpoint_transactions;\n\twait_queue_head_t j_wait_transaction_locked;\n\twait_queue_head_t j_wait_done_commit;\n\twait_queue_head_t j_wait_commit;\n\twait_queue_head_t j_wait_updates;\n\twait_queue_head_t j_wait_reserved;\n\twait_queue_head_t j_fc_wait;\n\tstruct mutex j_checkpoint_mutex;\n\tstruct buffer_head *j_chkpt_bhs[64];\n\tlong unsigned int j_head;\n\tlong unsigned int j_tail;\n\tlong unsigned int j_free;\n\tlong unsigned int j_first;\n\tlong unsigned int j_last;\n\tlong unsigned int j_fc_first;\n\tlong unsigned int j_fc_off;\n\tlong unsigned int j_fc_last;\n\tstruct block_device *j_dev;\n\tint j_blocksize;\n\tlong long unsigned int j_blk_offset;\n\tchar j_devname[56];\n\tstruct block_device *j_fs_dev;\n\tunsigned int j_total_len;\n\tatomic_t j_reserved_credits;\n\tspinlock_t j_list_lock;\n\tstruct inode *j_inode;\n\ttid_t j_tail_sequence;\n\ttid_t j_transaction_sequence;\n\ttid_t j_commit_sequence;\n\ttid_t j_commit_request;\n\t__u8 j_uuid[16];\n\tstruct task_struct *j_task;\n\tint j_max_transaction_buffers;\n\tint j_revoke_records_per_block;\n\tlong unsigned int j_commit_interval;\n\tstruct timer_list j_commit_timer;\n\tspinlock_t j_revoke_lock;\n\tstruct jbd2_revoke_table_s *j_revoke;\n\tstruct jbd2_revoke_table_s *j_revoke_table[2];\n\tstruct buffer_head **j_wbuf;\n\tstruct buffer_head **j_fc_wbuf;\n\tint j_wbufsize;\n\tint j_fc_wbufsize;\n\tpid_t j_last_sync_writer;\n\tu64 j_average_commit_time;\n\tu32 j_min_batch_time;\n\tu32 j_max_batch_time;\n\tvoid (*j_commit_callback)(journal_t *, transaction_t *);\n\tint (*j_submit_inode_data_buffers)(struct jbd2_inode *);\n\tint (*j_finish_inode_data_buffers)(struct jbd2_inode *);\n\tspinlock_t j_history_lock;\n\tstruct proc_dir_entry *j_proc_entry;\n\tstruct transaction_stats_s j_stats;\n\tunsigned int j_failed_commit;\n\tvoid *j_private;\n\tstruct crypto_shash *j_chksum_driver;\n\t__u32 j_csum_seed;\n\tvoid (*j_fc_cleanup_callback)(struct journal_s *, int);\n\tint (*j_fc_replay_callback)(struct journal_s *, struct buffer_head *, enum passtype, int, tid_t);\n};\n\nstruct journal_header_s {\n\t__be32 h_magic;\n\t__be32 h_blocktype;\n\t__be32 h_sequence;\n};\n\ntypedef struct journal_header_s journal_header_t;\n\nstruct journal_superblock_s {\n\tjournal_header_t s_header;\n\t__be32 s_blocksize;\n\t__be32 s_maxlen;\n\t__be32 s_first;\n\t__be32 s_sequence;\n\t__be32 s_start;\n\t__be32 s_errno;\n\t__be32 s_feature_compat;\n\t__be32 s_feature_incompat;\n\t__be32 s_feature_ro_compat;\n\t__u8 s_uuid[16];\n\t__be32 s_nr_users;\n\t__be32 s_dynsuper;\n\t__be32 s_max_transaction;\n\t__be32 s_max_trans_data;\n\t__u8 s_checksum_type;\n\t__u8 s_padding2[3];\n\t__be32 s_num_fc_blks;\n\t__u32 s_padding[41];\n\t__be32 s_checksum;\n\t__u8 s_users[768];\n};\n\nenum jbd_state_bits {\n\tBH_JBD = 16,\n\tBH_JWrite = 17,\n\tBH_Freed = 18,\n\tBH_Revoked = 19,\n\tBH_RevokeValid = 20,\n\tBH_JBDDirty = 21,\n\tBH_JournalHead = 22,\n\tBH_Shadow = 23,\n\tBH_Verified = 24,\n\tBH_JBDPrivateStart = 25,\n};\n\nstruct jbd2_inode {\n\ttransaction_t *i_transaction;\n\ttransaction_t *i_next_transaction;\n\tstruct list_head i_list;\n\tstruct inode *i_vfs_inode;\n\tlong unsigned int i_flags;\n\tloff_t i_dirty_start;\n\tloff_t i_dirty_end;\n};\n\nstruct bgl_lock {\n\tspinlock_t lock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct blockgroup_lock {\n\tstruct bgl_lock locks[128];\n};\n\ntypedef int ext4_grpblk_t;\n\ntypedef long long unsigned int ext4_fsblk_t;\n\ntypedef __u32 ext4_lblk_t;\n\ntypedef unsigned int ext4_group_t;\n\nstruct ext4_allocation_request {\n\tstruct inode *inode;\n\tunsigned int len;\n\text4_lblk_t logical;\n\text4_lblk_t lleft;\n\text4_lblk_t lright;\n\text4_fsblk_t goal;\n\text4_fsblk_t pleft;\n\text4_fsblk_t pright;\n\tunsigned int flags;\n};\n\nstruct ext4_system_blocks {\n\tstruct rb_root root;\n\tstruct callback_head rcu;\n};\n\nstruct ext4_group_desc {\n\t__le32 bg_block_bitmap_lo;\n\t__le32 bg_inode_bitmap_lo;\n\t__le32 bg_inode_table_lo;\n\t__le16 bg_free_blocks_count_lo;\n\t__le16 bg_free_inodes_count_lo;\n\t__le16 bg_used_dirs_count_lo;\n\t__le16 bg_flags;\n\t__le32 bg_exclude_bitmap_lo;\n\t__le16 bg_block_bitmap_csum_lo;\n\t__le16 bg_inode_bitmap_csum_lo;\n\t__le16 bg_itable_unused_lo;\n\t__le16 bg_checksum;\n\t__le32 bg_block_bitmap_hi;\n\t__le32 bg_inode_bitmap_hi;\n\t__le32 bg_inode_table_hi;\n\t__le16 bg_free_blocks_count_hi;\n\t__le16 bg_free_inodes_count_hi;\n\t__le16 bg_used_dirs_count_hi;\n\t__le16 bg_itable_unused_hi;\n\t__le32 bg_exclude_bitmap_hi;\n\t__le16 bg_block_bitmap_csum_hi;\n\t__le16 bg_inode_bitmap_csum_hi;\n\t__u32 bg_reserved;\n};\n\nstruct flex_groups {\n\tatomic64_t free_clusters;\n\tatomic_t free_inodes;\n\tatomic_t used_dirs;\n};\n\nstruct extent_status {\n\tstruct rb_node rb_node;\n\text4_lblk_t es_lblk;\n\text4_lblk_t es_len;\n\text4_fsblk_t es_pblk;\n};\n\nstruct ext4_es_tree {\n\tstruct rb_root root;\n\tstruct extent_status *cache_es;\n};\n\nstruct ext4_es_stats {\n\tlong unsigned int es_stats_shrunk;\n\tstruct percpu_counter es_stats_cache_hits;\n\tstruct percpu_counter es_stats_cache_misses;\n\tu64 es_stats_scan_time;\n\tu64 es_stats_max_scan_time;\n\tstruct percpu_counter es_stats_all_cnt;\n\tstruct percpu_counter es_stats_shk_cnt;\n};\n\nstruct ext4_pending_tree {\n\tstruct rb_root root;\n};\n\nstruct ext4_fc_stats {\n\tunsigned int fc_ineligible_reason_count[10];\n\tlong unsigned int fc_num_commits;\n\tlong unsigned int fc_ineligible_commits;\n\tlong unsigned int fc_numblks;\n};\n\nstruct ext4_fc_alloc_region {\n\text4_lblk_t lblk;\n\text4_fsblk_t pblk;\n\tint ino;\n\tint len;\n};\n\nstruct ext4_fc_replay_state {\n\tint fc_replay_num_tags;\n\tint fc_replay_expected_off;\n\tint fc_current_pass;\n\tint fc_cur_tag;\n\tint fc_crc;\n\tstruct ext4_fc_alloc_region *fc_regions;\n\tint fc_regions_size;\n\tint fc_regions_used;\n\tint fc_regions_valid;\n\tint *fc_modified_inodes;\n\tint fc_modified_inodes_used;\n\tint fc_modified_inodes_size;\n};\n\nstruct ext4_inode_info {\n\t__le32 i_data[15];\n\t__u32 i_dtime;\n\text4_fsblk_t i_file_acl;\n\text4_group_t i_block_group;\n\text4_lblk_t i_dir_start_lookup;\n\tlong unsigned int i_flags;\n\tstruct rw_semaphore xattr_sem;\n\tstruct list_head i_orphan;\n\tstruct list_head i_fc_list;\n\text4_lblk_t i_fc_lblk_start;\n\text4_lblk_t i_fc_lblk_len;\n\tatomic_t i_fc_updates;\n\twait_queue_head_t i_fc_wait;\n\tstruct mutex i_fc_lock;\n\tloff_t i_disksize;\n\tstruct rw_semaphore i_data_sem;\n\tstruct rw_semaphore i_mmap_sem;\n\tstruct inode vfs_inode;\n\tstruct jbd2_inode *jinode;\n\tspinlock_t i_raw_lock;\n\tstruct timespec64 i_crtime;\n\tatomic_t i_prealloc_active;\n\tstruct list_head i_prealloc_list;\n\tspinlock_t i_prealloc_lock;\n\tstruct ext4_es_tree i_es_tree;\n\trwlock_t i_es_lock;\n\tstruct list_head i_es_list;\n\tunsigned int i_es_all_nr;\n\tunsigned int i_es_shk_nr;\n\text4_lblk_t i_es_shrink_lblk;\n\text4_group_t i_last_alloc_group;\n\tunsigned int i_reserved_data_blocks;\n\tstruct ext4_pending_tree i_pending_tree;\n\t__u16 i_extra_isize;\n\tu16 i_inline_off;\n\tu16 i_inline_size;\n\tqsize_t i_reserved_quota;\n\tspinlock_t i_completed_io_lock;\n\tstruct list_head i_rsv_conversion_list;\n\tstruct work_struct i_rsv_conversion_work;\n\tatomic_t i_unwritten;\n\tspinlock_t i_block_reservation_lock;\n\ttid_t i_sync_tid;\n\ttid_t i_datasync_tid;\n\tstruct dquot *i_dquot[3];\n\t__u32 i_csum_seed;\n\tkprojid_t i_projid;\n};\n\nstruct ext4_super_block {\n\t__le32 s_inodes_count;\n\t__le32 s_blocks_count_lo;\n\t__le32 s_r_blocks_count_lo;\n\t__le32 s_free_blocks_count_lo;\n\t__le32 s_free_inodes_count;\n\t__le32 s_first_data_block;\n\t__le32 s_log_block_size;\n\t__le32 s_log_cluster_size;\n\t__le32 s_blocks_per_group;\n\t__le32 s_clusters_per_group;\n\t__le32 s_inodes_per_group;\n\t__le32 s_mtime;\n\t__le32 s_wtime;\n\t__le16 s_mnt_count;\n\t__le16 s_max_mnt_count;\n\t__le16 s_magic;\n\t__le16 s_state;\n\t__le16 s_errors;\n\t__le16 s_minor_rev_level;\n\t__le32 s_lastcheck;\n\t__le32 s_checkinterval;\n\t__le32 s_creator_os;\n\t__le32 s_rev_level;\n\t__le16 s_def_resuid;\n\t__le16 s_def_resgid;\n\t__le32 s_first_ino;\n\t__le16 s_inode_size;\n\t__le16 s_block_group_nr;\n\t__le32 s_feature_compat;\n\t__le32 s_feature_incompat;\n\t__le32 s_feature_ro_compat;\n\t__u8 s_uuid[16];\n\tchar s_volume_name[16];\n\tchar s_last_mounted[64];\n\t__le32 s_algorithm_usage_bitmap;\n\t__u8 s_prealloc_blocks;\n\t__u8 s_prealloc_dir_blocks;\n\t__le16 s_reserved_gdt_blocks;\n\t__u8 s_journal_uuid[16];\n\t__le32 s_journal_inum;\n\t__le32 s_journal_dev;\n\t__le32 s_last_orphan;\n\t__le32 s_hash_seed[4];\n\t__u8 s_def_hash_version;\n\t__u8 s_jnl_backup_type;\n\t__le16 s_desc_size;\n\t__le32 s_default_mount_opts;\n\t__le32 s_first_meta_bg;\n\t__le32 s_mkfs_time;\n\t__le32 s_jnl_blocks[17];\n\t__le32 s_blocks_count_hi;\n\t__le32 s_r_blocks_count_hi;\n\t__le32 s_free_blocks_count_hi;\n\t__le16 s_min_extra_isize;\n\t__le16 s_want_extra_isize;\n\t__le32 s_flags;\n\t__le16 s_raid_stride;\n\t__le16 s_mmp_update_interval;\n\t__le64 s_mmp_block;\n\t__le32 s_raid_stripe_width;\n\t__u8 s_log_groups_per_flex;\n\t__u8 s_checksum_type;\n\t__u8 s_encryption_level;\n\t__u8 s_reserved_pad;\n\t__le64 s_kbytes_written;\n\t__le32 s_snapshot_inum;\n\t__le32 s_snapshot_id;\n\t__le64 s_snapshot_r_blocks_count;\n\t__le32 s_snapshot_list;\n\t__le32 s_error_count;\n\t__le32 s_first_error_time;\n\t__le32 s_first_error_ino;\n\t__le64 s_first_error_block;\n\t__u8 s_first_error_func[32];\n\t__le32 s_first_error_line;\n\t__le32 s_last_error_time;\n\t__le32 s_last_error_ino;\n\t__le32 s_last_error_line;\n\t__le64 s_last_error_block;\n\t__u8 s_last_error_func[32];\n\t__u8 s_mount_opts[64];\n\t__le32 s_usr_quota_inum;\n\t__le32 s_grp_quota_inum;\n\t__le32 s_overhead_clusters;\n\t__le32 s_backup_bgs[2];\n\t__u8 s_encrypt_algos[4];\n\t__u8 s_encrypt_pw_salt[16];\n\t__le32 s_lpf_ino;\n\t__le32 s_prj_quota_inum;\n\t__le32 s_checksum_seed;\n\t__u8 s_wtime_hi;\n\t__u8 s_mtime_hi;\n\t__u8 s_mkfs_time_hi;\n\t__u8 s_lastcheck_hi;\n\t__u8 s_first_error_time_hi;\n\t__u8 s_last_error_time_hi;\n\t__u8 s_first_error_errcode;\n\t__u8 s_last_error_errcode;\n\t__le16 s_encoding;\n\t__le16 s_encoding_flags;\n\t__le32 s_reserved[95];\n\t__le32 s_checksum;\n};\n\nstruct mb_cache___2;\n\nstruct ext4_group_info;\n\nstruct ext4_locality_group;\n\nstruct ext4_li_request;\n\nstruct ext4_sb_info {\n\tlong unsigned int s_desc_size;\n\tlong unsigned int s_inodes_per_block;\n\tlong unsigned int s_blocks_per_group;\n\tlong unsigned int s_clusters_per_group;\n\tlong unsigned int s_inodes_per_group;\n\tlong unsigned int s_itb_per_group;\n\tlong unsigned int s_gdb_count;\n\tlong unsigned int s_desc_per_block;\n\text4_group_t s_groups_count;\n\text4_group_t s_blockfile_groups;\n\tlong unsigned int s_overhead;\n\tunsigned int s_cluster_ratio;\n\tunsigned int s_cluster_bits;\n\tloff_t s_bitmap_maxbytes;\n\tstruct buffer_head *s_sbh;\n\tstruct ext4_super_block *s_es;\n\tstruct buffer_head **s_group_desc;\n\tunsigned int s_mount_opt;\n\tunsigned int s_mount_opt2;\n\tlong unsigned int s_mount_flags;\n\tunsigned int s_def_mount_opt;\n\text4_fsblk_t s_sb_block;\n\tatomic64_t s_resv_clusters;\n\tkuid_t s_resuid;\n\tkgid_t s_resgid;\n\tshort unsigned int s_mount_state;\n\tshort unsigned int s_pad;\n\tint s_addr_per_block_bits;\n\tint s_desc_per_block_bits;\n\tint s_inode_size;\n\tint s_first_ino;\n\tunsigned int s_inode_readahead_blks;\n\tunsigned int s_inode_goal;\n\tu32 s_hash_seed[4];\n\tint s_def_hash_version;\n\tint s_hash_unsigned;\n\tstruct percpu_counter s_freeclusters_counter;\n\tstruct percpu_counter s_freeinodes_counter;\n\tstruct percpu_counter s_dirs_counter;\n\tstruct percpu_counter s_dirtyclusters_counter;\n\tstruct percpu_counter s_sra_exceeded_retry_limit;\n\tstruct blockgroup_lock *s_blockgroup_lock;\n\tstruct proc_dir_entry *s_proc;\n\tstruct kobject s_kobj;\n\tstruct completion s_kobj_unregister;\n\tstruct super_block *s_sb;\n\tstruct journal_s *s_journal;\n\tstruct list_head s_orphan;\n\tstruct mutex s_orphan_lock;\n\tlong unsigned int s_ext4_flags;\n\tlong unsigned int s_commit_interval;\n\tu32 s_max_batch_time;\n\tu32 s_min_batch_time;\n\tstruct block_device *s_journal_bdev;\n\tchar *s_qf_names[3];\n\tint s_jquota_fmt;\n\tunsigned int s_want_extra_isize;\n\tstruct ext4_system_blocks *s_system_blks;\n\tstruct ext4_group_info ***s_group_info;\n\tstruct inode *s_buddy_cache;\n\tspinlock_t s_md_lock;\n\tshort unsigned int *s_mb_offsets;\n\tunsigned int *s_mb_maxs;\n\tunsigned int s_group_info_size;\n\tunsigned int s_mb_free_pending;\n\tstruct list_head s_freed_data_list;\n\tlong unsigned int s_stripe;\n\tunsigned int s_mb_stream_request;\n\tunsigned int s_mb_max_to_scan;\n\tunsigned int s_mb_min_to_scan;\n\tunsigned int s_mb_stats;\n\tunsigned int s_mb_order2_reqs;\n\tunsigned int s_mb_group_prealloc;\n\tunsigned int s_mb_max_inode_prealloc;\n\tunsigned int s_max_dir_size_kb;\n\tlong unsigned int s_mb_last_group;\n\tlong unsigned int s_mb_last_start;\n\tunsigned int s_mb_prefetch;\n\tunsigned int s_mb_prefetch_limit;\n\tatomic_t s_bal_reqs;\n\tatomic_t s_bal_success;\n\tatomic_t s_bal_allocated;\n\tatomic_t s_bal_ex_scanned;\n\tatomic_t s_bal_goals;\n\tatomic_t s_bal_breaks;\n\tatomic_t s_bal_2orders;\n\tspinlock_t s_bal_lock;\n\tlong unsigned int s_mb_buddies_generated;\n\tlong long unsigned int s_mb_generation_time;\n\tatomic_t s_mb_lost_chunks;\n\tatomic_t s_mb_preallocated;\n\tatomic_t s_mb_discarded;\n\tatomic_t s_lock_busy;\n\tstruct ext4_locality_group *s_locality_groups;\n\tlong unsigned int s_sectors_written_start;\n\tu64 s_kbytes_written;\n\tunsigned int s_extent_max_zeroout_kb;\n\tunsigned int s_log_groups_per_flex;\n\tstruct flex_groups **s_flex_groups;\n\text4_group_t s_flex_groups_allocated;\n\tstruct workqueue_struct *rsv_conversion_wq;\n\tstruct timer_list s_err_report;\n\tstruct ext4_li_request *s_li_request;\n\tunsigned int s_li_wait_mult;\n\tstruct task_struct *s_mmp_tsk;\n\tatomic_t s_last_trim_minblks;\n\tstruct crypto_shash *s_chksum_driver;\n\t__u32 s_csum_seed;\n\tstruct shrinker s_es_shrinker;\n\tstruct list_head s_es_list;\n\tlong int s_es_nr_inode;\n\tstruct ext4_es_stats s_es_stats;\n\tstruct mb_cache___2 *s_ea_block_cache;\n\tstruct mb_cache___2 *s_ea_inode_cache;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tspinlock_t s_es_lock;\n\tstruct ratelimit_state s_err_ratelimit_state;\n\tstruct ratelimit_state s_warning_ratelimit_state;\n\tstruct ratelimit_state s_msg_ratelimit_state;\n\tatomic_t s_warning_count;\n\tatomic_t s_msg_count;\n\tstruct fscrypt_dummy_policy s_dummy_enc_policy;\n\tstruct percpu_rw_semaphore s_writepages_rwsem;\n\tstruct dax_device *s_daxdev;\n\terrseq_t s_bdev_wb_err;\n\tspinlock_t s_bdev_wb_lock;\n\tspinlock_t s_error_lock;\n\tint s_add_error_count;\n\tint s_first_error_code;\n\t__u32 s_first_error_line;\n\t__u32 s_first_error_ino;\n\t__u64 s_first_error_block;\n\tconst char *s_first_error_func;\n\ttime64_t s_first_error_time;\n\tint s_last_error_code;\n\t__u32 s_last_error_line;\n\t__u32 s_last_error_ino;\n\t__u64 s_last_error_block;\n\tconst char *s_last_error_func;\n\ttime64_t s_last_error_time;\n\tstruct work_struct s_error_work;\n\tatomic_t s_fc_subtid;\n\tatomic_t s_fc_ineligible_updates;\n\tstruct list_head s_fc_q[2];\n\tstruct list_head s_fc_dentry_q[2];\n\tunsigned int s_fc_bytes;\n\tspinlock_t s_fc_lock;\n\tstruct buffer_head *s_fc_bh;\n\tstruct ext4_fc_stats s_fc_stats;\n\tu64 s_fc_avg_commit_time;\n\tstruct ext4_fc_replay_state s_fc_replay_state;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct ext4_group_info {\n\tlong unsigned int bb_state;\n\tstruct rb_root bb_free_root;\n\text4_grpblk_t bb_first_free;\n\text4_grpblk_t bb_free;\n\text4_grpblk_t bb_fragments;\n\text4_grpblk_t bb_largest_free_order;\n\tstruct list_head bb_prealloc_list;\n\tstruct rw_semaphore alloc_sem;\n\text4_grpblk_t bb_counters[0];\n};\n\nstruct ext4_locality_group {\n\tstruct mutex lg_mutex;\n\tstruct list_head lg_prealloc_list[10];\n\tspinlock_t lg_prealloc_lock;\n};\n\nenum ext4_li_mode {\n\tEXT4_LI_MODE_PREFETCH_BBITMAP = 0,\n\tEXT4_LI_MODE_ITABLE = 1,\n};\n\nstruct ext4_li_request {\n\tstruct super_block *lr_super;\n\tenum ext4_li_mode lr_mode;\n\text4_group_t lr_first_not_zeroed;\n\text4_group_t lr_next_group;\n\tstruct list_head lr_request;\n\tlong unsigned int lr_next_sched;\n\tlong unsigned int lr_timeout;\n};\n\nstruct ext4_map_blocks {\n\text4_fsblk_t m_pblk;\n\text4_lblk_t m_lblk;\n\tunsigned int m_len;\n\tunsigned int m_flags;\n};\n\ntypedef enum {\n\tEXT4_IGET_NORMAL = 0,\n\tEXT4_IGET_SPECIAL = 1,\n\tEXT4_IGET_HANDLE = 2,\n} ext4_iget_flags;\n\nstruct ext4_system_zone {\n\tstruct rb_node node;\n\text4_fsblk_t start_blk;\n\tunsigned int count;\n\tu32 ino;\n};\n\nenum {\n\tEXT4_INODE_SECRM = 0,\n\tEXT4_INODE_UNRM = 1,\n\tEXT4_INODE_COMPR = 2,\n\tEXT4_INODE_SYNC = 3,\n\tEXT4_INODE_IMMUTABLE = 4,\n\tEXT4_INODE_APPEND = 5,\n\tEXT4_INODE_NODUMP = 6,\n\tEXT4_INODE_NOATIME = 7,\n\tEXT4_INODE_DIRTY = 8,\n\tEXT4_INODE_COMPRBLK = 9,\n\tEXT4_INODE_NOCOMPR = 10,\n\tEXT4_INODE_ENCRYPT = 11,\n\tEXT4_INODE_INDEX = 12,\n\tEXT4_INODE_IMAGIC = 13,\n\tEXT4_INODE_JOURNAL_DATA = 14,\n\tEXT4_INODE_NOTAIL = 15,\n\tEXT4_INODE_DIRSYNC = 16,\n\tEXT4_INODE_TOPDIR = 17,\n\tEXT4_INODE_HUGE_FILE = 18,\n\tEXT4_INODE_EXTENTS = 19,\n\tEXT4_INODE_VERITY = 20,\n\tEXT4_INODE_EA_INODE = 21,\n\tEXT4_INODE_DAX = 25,\n\tEXT4_INODE_INLINE_DATA = 28,\n\tEXT4_INODE_PROJINHERIT = 29,\n\tEXT4_INODE_CASEFOLD = 30,\n\tEXT4_INODE_RESERVED = 31,\n};\n\nenum {\n\tEXT4_FC_REASON_OK = 0,\n\tEXT4_FC_REASON_INELIGIBLE = 1,\n\tEXT4_FC_REASON_ALREADY_COMMITTED = 2,\n\tEXT4_FC_REASON_FC_START_FAILED = 3,\n\tEXT4_FC_REASON_FC_FAILED = 4,\n\tEXT4_FC_REASON_XATTR = 0,\n\tEXT4_FC_REASON_CROSS_RENAME = 1,\n\tEXT4_FC_REASON_JOURNAL_FLAG_CHANGE = 2,\n\tEXT4_FC_REASON_NOMEM = 3,\n\tEXT4_FC_REASON_SWAP_BOOT = 4,\n\tEXT4_FC_REASON_RESIZE = 5,\n\tEXT4_FC_REASON_RENAME_DIR = 6,\n\tEXT4_FC_REASON_FALLOC_RANGE = 7,\n\tEXT4_FC_REASON_INODE_JOURNAL_DATA = 8,\n\tEXT4_FC_COMMIT_FAILED = 9,\n\tEXT4_FC_REASON_MAX = 10,\n};\n\nstruct ext4_dir_entry_2 {\n\t__le32 inode;\n\t__le16 rec_len;\n\t__u8 name_len;\n\t__u8 file_type;\n\tchar name[255];\n};\n\nstruct fname;\n\nstruct dir_private_info {\n\tstruct rb_root root;\n\tstruct rb_node *curr_node;\n\tstruct fname *extra_fname;\n\tloff_t last_pos;\n\t__u32 curr_hash;\n\t__u32 curr_minor_hash;\n\t__u32 next_hash;\n};\n\nstruct fname {\n\t__u32 hash;\n\t__u32 minor_hash;\n\tstruct rb_node rb_hash;\n\tstruct fname *next;\n\t__u32 inode;\n\t__u8 name_len;\n\t__u8 file_type;\n\tchar name[0];\n};\n\nenum SHIFT_DIRECTION {\n\tSHIFT_LEFT = 0,\n\tSHIFT_RIGHT = 1,\n};\n\nstruct ext4_io_end_vec {\n\tstruct list_head list;\n\tloff_t offset;\n\tssize_t size;\n};\n\nstruct ext4_io_end {\n\tstruct list_head list;\n\thandle_t *handle;\n\tstruct inode *inode;\n\tstruct bio *bio;\n\tunsigned int flag;\n\tatomic_t count;\n\tstruct list_head list_vec;\n};\n\ntypedef struct ext4_io_end ext4_io_end_t;\n\nenum {\n\tES_WRITTEN_B = 0,\n\tES_UNWRITTEN_B = 1,\n\tES_DELAYED_B = 2,\n\tES_HOLE_B = 3,\n\tES_REFERENCED_B = 4,\n\tES_FLAGS = 5,\n};\n\nenum {\n\tEXT4_STATE_JDATA = 0,\n\tEXT4_STATE_NEW = 1,\n\tEXT4_STATE_XATTR = 2,\n\tEXT4_STATE_NO_EXPAND = 3,\n\tEXT4_STATE_DA_ALLOC_CLOSE = 4,\n\tEXT4_STATE_EXT_MIGRATE = 5,\n\tEXT4_STATE_NEWENTRY = 6,\n\tEXT4_STATE_MAY_INLINE_DATA = 7,\n\tEXT4_STATE_EXT_PRECACHED = 8,\n\tEXT4_STATE_LUSTRE_EA_INODE = 9,\n\tEXT4_STATE_VERITY_IN_PROGRESS = 10,\n\tEXT4_STATE_FC_COMMITTING = 11,\n};\n\nstruct ext4_iloc {\n\tstruct buffer_head *bh;\n\tlong unsigned int offset;\n\text4_group_t block_group;\n};\n\nstruct ext4_extent_tail {\n\t__le32 et_checksum;\n};\n\nstruct ext4_extent {\n\t__le32 ee_block;\n\t__le16 ee_len;\n\t__le16 ee_start_hi;\n\t__le32 ee_start_lo;\n};\n\nstruct ext4_extent_idx {\n\t__le32 ei_block;\n\t__le32 ei_leaf_lo;\n\t__le16 ei_leaf_hi;\n\t__u16 ei_unused;\n};\n\nstruct ext4_extent_header {\n\t__le16 eh_magic;\n\t__le16 eh_entries;\n\t__le16 eh_max;\n\t__le16 eh_depth;\n\t__le32 eh_generation;\n};\n\nstruct ext4_ext_path {\n\text4_fsblk_t p_block;\n\t__u16 p_depth;\n\t__u16 p_maxdepth;\n\tstruct ext4_extent *p_ext;\n\tstruct ext4_extent_idx *p_idx;\n\tstruct ext4_extent_header *p_hdr;\n\tstruct buffer_head *p_bh;\n};\n\nstruct partial_cluster {\n\text4_fsblk_t pclu;\n\text4_lblk_t lblk;\n\tenum {\n\t\tinitial = 0,\n\t\ttofree = 1,\n\t\tnofree = 2,\n\t} state;\n};\n\nstruct pending_reservation {\n\tstruct rb_node rb_node;\n\text4_lblk_t lclu;\n};\n\nstruct rsvd_count {\n\tint ndelonly;\n\tbool first_do_lblk_found;\n\text4_lblk_t first_do_lblk;\n\text4_lblk_t last_do_lblk;\n\tstruct extent_status *left_es;\n\tbool partial;\n\text4_lblk_t lclu;\n};\n\nenum {\n\tEXT4_MF_MNTDIR_SAMPLED = 0,\n\tEXT4_MF_FS_ABORTED = 1,\n\tEXT4_MF_FC_INELIGIBLE = 2,\n\tEXT4_MF_FC_COMMITTING = 3,\n};\n\nstruct fsmap {\n\t__u32 fmr_device;\n\t__u32 fmr_flags;\n\t__u64 fmr_physical;\n\t__u64 fmr_owner;\n\t__u64 fmr_offset;\n\t__u64 fmr_length;\n\t__u64 fmr_reserved[3];\n};\n\nstruct ext4_fsmap {\n\tstruct list_head fmr_list;\n\tdev_t fmr_device;\n\tuint32_t fmr_flags;\n\tuint64_t fmr_physical;\n\tuint64_t fmr_owner;\n\tuint64_t fmr_length;\n};\n\nstruct ext4_fsmap_head {\n\tuint32_t fmh_iflags;\n\tuint32_t fmh_oflags;\n\tunsigned int fmh_count;\n\tunsigned int fmh_entries;\n\tstruct ext4_fsmap fmh_keys[2];\n};\n\ntypedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);\n\ntypedef int (*ext4_mballoc_query_range_fn)(struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t, void *);\n\nstruct ext4_getfsmap_info {\n\tstruct ext4_fsmap_head *gfi_head;\n\text4_fsmap_format_t gfi_formatter;\n\tvoid *gfi_format_arg;\n\text4_fsblk_t gfi_next_fsblk;\n\tu32 gfi_dev;\n\text4_group_t gfi_agno;\n\tstruct ext4_fsmap gfi_low;\n\tstruct ext4_fsmap gfi_high;\n\tstruct ext4_fsmap gfi_lastfree;\n\tstruct list_head gfi_meta_list;\n\tbool gfi_last;\n};\n\nstruct ext4_getfsmap_dev {\n\tint (*gfd_fn)(struct super_block *, struct ext4_fsmap *, struct ext4_getfsmap_info *);\n\tu32 gfd_dev;\n};\n\nstruct dx_hash_info {\n\tu32 hash;\n\tu32 minor_hash;\n\tint hash_version;\n\tu32 *seed;\n};\n\ntypedef unsigned int __kernel_mode_t;\n\ntypedef __kernel_mode_t mode_t;\n\nstruct ext4_inode {\n\t__le16 i_mode;\n\t__le16 i_uid;\n\t__le32 i_size_lo;\n\t__le32 i_atime;\n\t__le32 i_ctime;\n\t__le32 i_mtime;\n\t__le32 i_dtime;\n\t__le16 i_gid;\n\t__le16 i_links_count;\n\t__le32 i_blocks_lo;\n\t__le32 i_flags;\n\tunion {\n\t\tstruct {\n\t\t\t__le32 l_i_version;\n\t\t} linux1;\n\t\tstruct {\n\t\t\t__u32 h_i_translator;\n\t\t} hurd1;\n\t\tstruct {\n\t\t\t__u32 m_i_reserved1;\n\t\t} masix1;\n\t} osd1;\n\t__le32 i_block[15];\n\t__le32 i_generation;\n\t__le32 i_file_acl_lo;\n\t__le32 i_size_high;\n\t__le32 i_obso_faddr;\n\tunion {\n\t\tstruct {\n\t\t\t__le16 l_i_blocks_high;\n\t\t\t__le16 l_i_file_acl_high;\n\t\t\t__le16 l_i_uid_high;\n\t\t\t__le16 l_i_gid_high;\n\t\t\t__le16 l_i_checksum_lo;\n\t\t\t__le16 l_i_reserved;\n\t\t} linux2;\n\t\tstruct {\n\t\t\t__le16 h_i_reserved1;\n\t\t\t__u16 h_i_mode_high;\n\t\t\t__u16 h_i_uid_high;\n\t\t\t__u16 h_i_gid_high;\n\t\t\t__u32 h_i_author;\n\t\t} hurd2;\n\t\tstruct {\n\t\t\t__le16 h_i_reserved1;\n\t\t\t__le16 m_i_file_acl_high;\n\t\t\t__u32 m_i_reserved2[2];\n\t\t} masix2;\n\t} osd2;\n\t__le16 i_extra_isize;\n\t__le16 i_checksum_hi;\n\t__le32 i_ctime_extra;\n\t__le32 i_mtime_extra;\n\t__le32 i_atime_extra;\n\t__le32 i_crtime;\n\t__le32 i_crtime_extra;\n\t__le32 i_version_hi;\n\t__le32 i_projid;\n};\n\nstruct orlov_stats {\n\t__u64 free_clusters;\n\t__u32 free_inodes;\n\t__u32 used_dirs;\n};\n\ntypedef struct {\n\t__le32 *p;\n\t__le32 key;\n\tstruct buffer_head *bh;\n} Indirect;\n\nstruct ext4_filename {\n\tconst struct qstr *usr_fname;\n\tstruct fscrypt_str disk_name;\n\tstruct dx_hash_info hinfo;\n\tstruct fscrypt_str crypto_buf;\n\tstruct fscrypt_str cf_name;\n};\n\nstruct ext4_xattr_ibody_header {\n\t__le32 h_magic;\n};\n\nstruct ext4_xattr_entry {\n\t__u8 e_name_len;\n\t__u8 e_name_index;\n\t__le16 e_value_offs;\n\t__le32 e_value_inum;\n\t__le32 e_value_size;\n\t__le32 e_hash;\n\tchar e_name[0];\n};\n\nstruct ext4_xattr_info {\n\tconst char *name;\n\tconst void *value;\n\tsize_t value_len;\n\tint name_index;\n\tint in_inode;\n};\n\nstruct ext4_xattr_search {\n\tstruct ext4_xattr_entry *first;\n\tvoid *base;\n\tvoid *end;\n\tstruct ext4_xattr_entry *here;\n\tint not_found;\n};\n\nstruct ext4_xattr_ibody_find {\n\tstruct ext4_xattr_search s;\n\tstruct ext4_iloc iloc;\n};\n\ntypedef short unsigned int __kernel_uid16_t;\n\ntypedef short unsigned int __kernel_gid16_t;\n\ntypedef __kernel_uid16_t uid16_t;\n\ntypedef __kernel_gid16_t gid16_t;\n\nstruct ext4_io_submit {\n\tstruct writeback_control *io_wbc;\n\tstruct bio *io_bio;\n\text4_io_end_t *io_end;\n\tsector_t io_next_block;\n};\n\nstruct ext4_xattr_inode_array {\n\tunsigned int count;\n\tstruct inode *inodes[0];\n};\n\nstruct mpage_da_data {\n\tstruct inode *inode;\n\tstruct writeback_control *wbc;\n\tlong unsigned int first_page;\n\tlong unsigned int next_page;\n\tlong unsigned int last_page;\n\tstruct ext4_map_blocks map;\n\tstruct ext4_io_submit io_submit;\n\tunsigned int do_map: 1;\n\tunsigned int scanned_until_end: 1;\n};\n\nstruct fstrim_range {\n\t__u64 start;\n\t__u64 len;\n\t__u64 minlen;\n};\n\nstruct ext4_new_group_input {\n\t__u32 group;\n\t__u64 block_bitmap;\n\t__u64 inode_bitmap;\n\t__u64 inode_table;\n\t__u32 blocks_count;\n\t__u16 reserved_blocks;\n\t__u16 unused;\n};\n\nstruct compat_ext4_new_group_input {\n\tu32 group;\n\tcompat_u64 block_bitmap;\n\tcompat_u64 inode_bitmap;\n\tcompat_u64 inode_table;\n\tu32 blocks_count;\n\tu16 reserved_blocks;\n\tu16 unused;\n} __attribute__((packed));\n\nstruct ext4_new_group_data {\n\t__u32 group;\n\t__u64 block_bitmap;\n\t__u64 inode_bitmap;\n\t__u64 inode_table;\n\t__u32 blocks_count;\n\t__u16 reserved_blocks;\n\t__u16 mdata_blocks;\n\t__u32 free_clusters_count;\n};\n\nstruct move_extent {\n\t__u32 reserved;\n\t__u32 donor_fd;\n\t__u64 orig_start;\n\t__u64 donor_start;\n\t__u64 len;\n\t__u64 moved_len;\n};\n\nstruct fsmap_head {\n\t__u32 fmh_iflags;\n\t__u32 fmh_oflags;\n\t__u32 fmh_count;\n\t__u32 fmh_entries;\n\t__u64 fmh_reserved[6];\n\tstruct fsmap fmh_keys[2];\n\tstruct fsmap fmh_recs[0];\n};\n\nstruct getfsmap_info {\n\tstruct super_block *gi_sb;\n\tstruct fsmap_head *gi_data;\n\tunsigned int gi_idx;\n\t__u32 gi_last_flags;\n};\n\nenum blk_default_limits {\n\tBLK_MAX_SEGMENTS = 128,\n\tBLK_SAFE_MAX_SECTORS = 255,\n\tBLK_DEF_MAX_SECTORS = 2560,\n\tBLK_MAX_SEGMENT_SIZE = 65536,\n\tBLK_SEG_BOUNDARY_MASK = 4294967295,\n};\n\nstruct ext4_free_data {\n\tstruct list_head efd_list;\n\tstruct rb_node efd_node;\n\text4_group_t efd_group;\n\text4_grpblk_t efd_start_cluster;\n\text4_grpblk_t efd_count;\n\ttid_t efd_tid;\n};\n\nstruct ext4_prealloc_space {\n\tstruct list_head pa_inode_list;\n\tstruct list_head pa_group_list;\n\tunion {\n\t\tstruct list_head pa_tmp_list;\n\t\tstruct callback_head pa_rcu;\n\t} u;\n\tspinlock_t pa_lock;\n\tatomic_t pa_count;\n\tunsigned int pa_deleted;\n\text4_fsblk_t pa_pstart;\n\text4_lblk_t pa_lstart;\n\text4_grpblk_t pa_len;\n\text4_grpblk_t pa_free;\n\tshort unsigned int pa_type;\n\tspinlock_t *pa_obj_lock;\n\tstruct inode *pa_inode;\n};\n\nenum {\n\tMB_INODE_PA = 0,\n\tMB_GROUP_PA = 1,\n};\n\nstruct ext4_free_extent {\n\text4_lblk_t fe_logical;\n\text4_grpblk_t fe_start;\n\text4_group_t fe_group;\n\text4_grpblk_t fe_len;\n};\n\nstruct ext4_allocation_context {\n\tstruct inode *ac_inode;\n\tstruct super_block *ac_sb;\n\tstruct ext4_free_extent ac_o_ex;\n\tstruct ext4_free_extent ac_g_ex;\n\tstruct ext4_free_extent ac_b_ex;\n\tstruct ext4_free_extent ac_f_ex;\n\t__u16 ac_groups_scanned;\n\t__u16 ac_found;\n\t__u16 ac_tail;\n\t__u16 ac_buddy;\n\t__u16 ac_flags;\n\t__u8 ac_status;\n\t__u8 ac_criteria;\n\t__u8 ac_2order;\n\t__u8 ac_op;\n\tstruct page *ac_bitmap_page;\n\tstruct page *ac_buddy_page;\n\tstruct ext4_prealloc_space *ac_pa;\n\tstruct ext4_locality_group *ac_lg;\n};\n\nstruct ext4_buddy {\n\tstruct page *bd_buddy_page;\n\tvoid *bd_buddy;\n\tstruct page *bd_bitmap_page;\n\tvoid *bd_bitmap;\n\tstruct ext4_group_info *bd_info;\n\tstruct super_block *bd_sb;\n\t__u16 bd_blkbits;\n\text4_group_t bd_group;\n};\n\nstruct sg {\n\tstruct ext4_group_info info;\n\text4_grpblk_t counters[18];\n};\n\nstruct migrate_struct {\n\text4_lblk_t first_block;\n\text4_lblk_t last_block;\n\text4_lblk_t curr_block;\n\text4_fsblk_t first_pblock;\n\text4_fsblk_t last_pblock;\n};\n\nstruct mmp_struct {\n\t__le32 mmp_magic;\n\t__le32 mmp_seq;\n\t__le64 mmp_time;\n\tchar mmp_nodename[64];\n\tchar mmp_bdevname[32];\n\t__le16 mmp_check_interval;\n\t__le16 mmp_pad1;\n\t__le32 mmp_pad2[226];\n\t__le32 mmp_checksum;\n};\n\nstruct mmpd_data {\n\tstruct buffer_head *bh;\n\tstruct super_block *sb;\n};\n\nstruct ext4_dir_entry {\n\t__le32 inode;\n\t__le16 rec_len;\n\t__le16 name_len;\n\tchar name[255];\n};\n\nstruct ext4_dir_entry_tail {\n\t__le32 det_reserved_zero1;\n\t__le16 det_rec_len;\n\t__u8 det_reserved_zero2;\n\t__u8 det_reserved_ft;\n\t__le32 det_checksum;\n};\n\ntypedef enum {\n\tEITHER = 0,\n\tINDEX = 1,\n\tDIRENT = 2,\n\tDIRENT_HTREE = 3,\n} dirblock_type_t;\n\nstruct fake_dirent {\n\t__le32 inode;\n\t__le16 rec_len;\n\tu8 name_len;\n\tu8 file_type;\n};\n\nstruct dx_countlimit {\n\t__le16 limit;\n\t__le16 count;\n};\n\nstruct dx_entry {\n\t__le32 hash;\n\t__le32 block;\n};\n\nstruct dx_root_info {\n\t__le32 reserved_zero;\n\tu8 hash_version;\n\tu8 info_length;\n\tu8 indirect_levels;\n\tu8 unused_flags;\n};\n\nstruct dx_root {\n\tstruct fake_dirent dot;\n\tchar dot_name[4];\n\tstruct fake_dirent dotdot;\n\tchar dotdot_name[4];\n\tstruct dx_root_info info;\n\tstruct dx_entry entries[0];\n};\n\nstruct dx_node {\n\tstruct fake_dirent fake;\n\tstruct dx_entry entries[0];\n};\n\nstruct dx_frame {\n\tstruct buffer_head *bh;\n\tstruct dx_entry *entries;\n\tstruct dx_entry *at;\n};\n\nstruct dx_map_entry {\n\tu32 hash;\n\tu16 offs;\n\tu16 size;\n};\n\nstruct dx_tail {\n\tu32 dt_reserved;\n\t__le32 dt_checksum;\n};\n\nstruct ext4_renament {\n\tstruct inode *dir;\n\tstruct dentry *dentry;\n\tstruct inode *inode;\n\tbool is_dir;\n\tint dir_nlink_delta;\n\tstruct buffer_head *bh;\n\tstruct ext4_dir_entry_2 *de;\n\tint inlined;\n\tstruct buffer_head *dir_bh;\n\tstruct ext4_dir_entry_2 *parent_de;\n\tint dir_inlined;\n};\n\nenum bio_post_read_step {\n\tSTEP_INITIAL = 0,\n\tSTEP_DECRYPT = 1,\n\tSTEP_VERITY = 2,\n\tSTEP_MAX = 3,\n};\n\nstruct bio_post_read_ctx {\n\tstruct bio *bio;\n\tstruct work_struct work;\n\tunsigned int cur_step;\n\tunsigned int enabled_steps;\n};\n\nenum {\n\tBLOCK_BITMAP = 0,\n\tINODE_BITMAP = 1,\n\tINODE_TABLE = 2,\n\tGROUP_TABLE_COUNT = 3,\n};\n\nstruct ext4_rcu_ptr {\n\tstruct callback_head rcu;\n\tvoid *ptr;\n};\n\nstruct ext4_new_flex_group_data {\n\tstruct ext4_new_group_data *groups;\n\t__u16 *bg_flags;\n\text4_group_t count;\n};\n\nenum {\n\tI_DATA_SEM_NORMAL = 0,\n\tI_DATA_SEM_OTHER = 1,\n\tI_DATA_SEM_QUOTA = 2,\n};\n\nstruct ext4_lazy_init {\n\tlong unsigned int li_state;\n\tstruct list_head li_request_list;\n\tstruct mutex li_list_mtx;\n};\n\nstruct ext4_journal_cb_entry {\n\tstruct list_head jce_list;\n\tvoid (*jce_func)(struct super_block *, struct ext4_journal_cb_entry *, int);\n};\n\nstruct trace_event_raw_ext4_other_inode_update_time {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tino_t orig_ino;\n\tuid_t uid;\n\tgid_t gid;\n\t__u16 mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_free_inode {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tuid_t uid;\n\tgid_t gid;\n\t__u64 blocks;\n\t__u16 mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_request_inode {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t dir;\n\t__u16 mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_allocate_inode {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tino_t dir;\n\t__u16 mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_evict_inode {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tint nlink;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_drop_inode {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tint drop;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_nfs_commit_metadata {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_mark_inode_dirty {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tlong unsigned int ip;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_begin_ordered_truncate {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t new_size;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__write_begin {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t pos;\n\tunsigned int len;\n\tunsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__write_end {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t pos;\n\tunsigned int len;\n\tunsigned int copied;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_writepages {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tlong int nr_to_write;\n\tlong int pages_skipped;\n\tloff_t range_start;\n\tloff_t range_end;\n\tlong unsigned int writeback_index;\n\tint sync_mode;\n\tchar for_kupdate;\n\tchar range_cyclic;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_da_write_pages {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tlong unsigned int first_page;\n\tlong int nr_to_write;\n\tint sync_mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_da_write_pages_extent {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 lblk;\n\t__u32 len;\n\t__u32 flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_writepages_result {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tint ret;\n\tint pages_written;\n\tlong int pages_skipped;\n\tlong unsigned int writeback_index;\n\tint sync_mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__page_op {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tlong unsigned int index;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_invalidatepage_op {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tlong unsigned int index;\n\tunsigned int offset;\n\tunsigned int length;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_discard_blocks {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\t__u64 blk;\n\t__u64 count;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__mb_new_pa {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 pa_pstart;\n\t__u64 pa_lstart;\n\t__u32 pa_len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_mb_release_inode_pa {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 block;\n\t__u32 count;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_mb_release_group_pa {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\t__u64 pa_pstart;\n\t__u32 pa_len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_discard_preallocations {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tunsigned int len;\n\tunsigned int needed;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_mb_discard_preallocations {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint needed;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_request_blocks {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tunsigned int len;\n\t__u32 logical;\n\t__u32 lleft;\n\t__u32 lright;\n\t__u64 goal;\n\t__u64 pleft;\n\t__u64 pright;\n\tunsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_allocate_blocks {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 block;\n\tunsigned int len;\n\t__u32 logical;\n\t__u32 lleft;\n\t__u32 lright;\n\t__u64 goal;\n\t__u64 pleft;\n\t__u64 pright;\n\tunsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_free_blocks {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 block;\n\tlong unsigned int count;\n\tint flags;\n\t__u16 mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_sync_file_enter {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tino_t parent;\n\tint datasync;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_sync_file_exit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_sync_fs {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint wait;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_alloc_da_blocks {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tunsigned int data_blocks;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_mballoc_alloc {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u32 orig_logical;\n\tint orig_start;\n\t__u32 orig_group;\n\tint orig_len;\n\t__u32 goal_logical;\n\tint goal_start;\n\t__u32 goal_group;\n\tint goal_len;\n\t__u32 result_logical;\n\tint result_start;\n\t__u32 result_group;\n\tint result_len;\n\t__u16 found;\n\t__u16 groups;\n\t__u16 buddy;\n\t__u16 flags;\n\t__u16 tail;\n\t__u8 cr;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_mballoc_prealloc {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u32 orig_logical;\n\tint orig_start;\n\t__u32 orig_group;\n\tint orig_len;\n\t__u32 result_logical;\n\tint result_start;\n\t__u32 result_group;\n\tint result_len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__mballoc {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tint result_start;\n\t__u32 result_group;\n\tint result_len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_forget {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 block;\n\tint is_metadata;\n\t__u16 mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_da_update_reserve_space {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 i_blocks;\n\tint used_blocks;\n\tint reserved_data_blocks;\n\tint quota_claim;\n\t__u16 mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_da_reserve_space {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 i_blocks;\n\tint reserved_data_blocks;\n\t__u16 mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_da_release_space {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 i_blocks;\n\tint freed_blocks;\n\tint reserved_data_blocks;\n\t__u16 mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__bitmap_load {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\t__u32 group;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_read_block_bitmap_load {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\t__u32 group;\n\tbool prefetch;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_direct_IO_enter {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t pos;\n\tlong unsigned int len;\n\tint rw;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_direct_IO_exit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t pos;\n\tlong unsigned int len;\n\tint rw;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__fallocate_mode {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t offset;\n\tloff_t len;\n\tint mode;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fallocate_exit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t pos;\n\tunsigned int blocks;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_unlink_enter {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tino_t parent;\n\tloff_t size;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_unlink_exit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__truncate {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\t__u64 blocks;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_convert_to_initialized_enter {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t m_lblk;\n\tunsigned int m_len;\n\text4_lblk_t u_lblk;\n\tunsigned int u_len;\n\text4_fsblk_t u_pblk;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_convert_to_initialized_fastpath {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t m_lblk;\n\tunsigned int m_len;\n\text4_lblk_t u_lblk;\n\tunsigned int u_len;\n\text4_fsblk_t u_pblk;\n\text4_lblk_t i_lblk;\n\tunsigned int i_len;\n\text4_fsblk_t i_pblk;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__map_blocks_enter {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\tunsigned int len;\n\tunsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__map_blocks_exit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tunsigned int flags;\n\text4_fsblk_t pblk;\n\text4_lblk_t lblk;\n\tunsigned int len;\n\tunsigned int mflags;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_load_extent {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_fsblk_t pblk;\n\text4_lblk_t lblk;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_load_inode {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_journal_start {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tlong unsigned int ip;\n\tint blocks;\n\tint rsv_blocks;\n\tint revoke_creds;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_journal_start_reserved {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tlong unsigned int ip;\n\tint blocks;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__trim {\n\tstruct trace_entry ent;\n\tint dev_major;\n\tint dev_minor;\n\t__u32 group;\n\tint start;\n\tint len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_handle_unwritten_extents {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tint flags;\n\text4_lblk_t lblk;\n\text4_fsblk_t pblk;\n\tunsigned int len;\n\tunsigned int allocated;\n\text4_fsblk_t newblk;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_get_implied_cluster_alloc_exit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tunsigned int flags;\n\text4_lblk_t lblk;\n\text4_fsblk_t pblk;\n\tunsigned int len;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_put_in_cache {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\tunsigned int len;\n\text4_fsblk_t start;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_in_cache {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_find_delalloc_range {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t from;\n\text4_lblk_t to;\n\tint reverse;\n\tint found;\n\text4_lblk_t found_blk;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_get_reserved_cluster_alloc {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\tunsigned int len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_show_extent {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_fsblk_t pblk;\n\text4_lblk_t lblk;\n\tshort unsigned int len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_remove_blocks {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t from;\n\text4_lblk_t to;\n\text4_fsblk_t ee_pblk;\n\text4_lblk_t ee_lblk;\n\tshort unsigned int ee_len;\n\text4_fsblk_t pc_pclu;\n\text4_lblk_t pc_lblk;\n\tint pc_state;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_rm_leaf {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t start;\n\text4_lblk_t ee_lblk;\n\text4_fsblk_t ee_pblk;\n\tshort int ee_len;\n\text4_fsblk_t pc_pclu;\n\text4_lblk_t pc_lblk;\n\tint pc_state;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_rm_idx {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_fsblk_t pblk;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_remove_space {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t start;\n\text4_lblk_t end;\n\tint depth;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_ext_remove_space_done {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t start;\n\text4_lblk_t end;\n\tint depth;\n\text4_fsblk_t pc_pclu;\n\text4_lblk_t pc_lblk;\n\tint pc_state;\n\tshort unsigned int eh_entries;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__es_extent {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\text4_lblk_t len;\n\text4_fsblk_t pblk;\n\tchar status;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_es_remove_extent {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t lblk;\n\tloff_t len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_es_find_extent_range_enter {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_es_find_extent_range_exit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\text4_lblk_t len;\n\text4_fsblk_t pblk;\n\tchar status;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_es_lookup_extent_enter {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_es_lookup_extent_exit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\text4_lblk_t len;\n\text4_fsblk_t pblk;\n\tchar status;\n\tint found;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4__es_shrink_enter {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint nr_to_scan;\n\tint cache_cnt;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_es_shrink_scan_exit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint nr_shrunk;\n\tint cache_cnt;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_collapse_range {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t offset;\n\tloff_t len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_insert_range {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tloff_t offset;\n\tloff_t len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_es_shrink {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint nr_shrunk;\n\tlong long unsigned int scan_time;\n\tint nr_skipped;\n\tint retried;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_es_insert_delayed_block {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\text4_lblk_t lblk;\n\text4_lblk_t len;\n\text4_fsblk_t pblk;\n\tchar status;\n\tbool allocated;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fsmap_class {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tdev_t keydev;\n\tu32 agno;\n\tu64 bno;\n\tu64 len;\n\tu64 owner;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_getfsmap_class {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tdev_t keydev;\n\tu64 block;\n\tu64 len;\n\tu64 owner;\n\tu64 flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_shutdown {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tunsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_error {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tconst char *function;\n\tunsigned int line;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_prefetch_bitmaps {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\t__u32 group;\n\t__u32 next;\n\t__u32 ios;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_lazy_itable_init {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\t__u32 group;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_replay_scan {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint error;\n\tint off;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_replay {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint tag;\n\tint ino;\n\tint priv1;\n\tint priv2;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_commit_start {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_commit_stop {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint nblks;\n\tint reason;\n\tint num_fc;\n\tint num_fc_ineligible;\n\tint nblks_agg;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_stats {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tstruct ext4_sb_info *sbi;\n\tint count;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_track_create {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint ino;\n\tint error;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_track_link {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint ino;\n\tint error;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_track_unlink {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint ino;\n\tint error;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_track_inode {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint ino;\n\tint error;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ext4_fc_track_range {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint ino;\n\tlong int start;\n\tlong int end;\n\tint error;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_ext4_other_inode_update_time {};\n\nstruct trace_event_data_offsets_ext4_free_inode {};\n\nstruct trace_event_data_offsets_ext4_request_inode {};\n\nstruct trace_event_data_offsets_ext4_allocate_inode {};\n\nstruct trace_event_data_offsets_ext4_evict_inode {};\n\nstruct trace_event_data_offsets_ext4_drop_inode {};\n\nstruct trace_event_data_offsets_ext4_nfs_commit_metadata {};\n\nstruct trace_event_data_offsets_ext4_mark_inode_dirty {};\n\nstruct trace_event_data_offsets_ext4_begin_ordered_truncate {};\n\nstruct trace_event_data_offsets_ext4__write_begin {};\n\nstruct trace_event_data_offsets_ext4__write_end {};\n\nstruct trace_event_data_offsets_ext4_writepages {};\n\nstruct trace_event_data_offsets_ext4_da_write_pages {};\n\nstruct trace_event_data_offsets_ext4_da_write_pages_extent {};\n\nstruct trace_event_data_offsets_ext4_writepages_result {};\n\nstruct trace_event_data_offsets_ext4__page_op {};\n\nstruct trace_event_data_offsets_ext4_invalidatepage_op {};\n\nstruct trace_event_data_offsets_ext4_discard_blocks {};\n\nstruct trace_event_data_offsets_ext4__mb_new_pa {};\n\nstruct trace_event_data_offsets_ext4_mb_release_inode_pa {};\n\nstruct trace_event_data_offsets_ext4_mb_release_group_pa {};\n\nstruct trace_event_data_offsets_ext4_discard_preallocations {};\n\nstruct trace_event_data_offsets_ext4_mb_discard_preallocations {};\n\nstruct trace_event_data_offsets_ext4_request_blocks {};\n\nstruct trace_event_data_offsets_ext4_allocate_blocks {};\n\nstruct trace_event_data_offsets_ext4_free_blocks {};\n\nstruct trace_event_data_offsets_ext4_sync_file_enter {};\n\nstruct trace_event_data_offsets_ext4_sync_file_exit {};\n\nstruct trace_event_data_offsets_ext4_sync_fs {};\n\nstruct trace_event_data_offsets_ext4_alloc_da_blocks {};\n\nstruct trace_event_data_offsets_ext4_mballoc_alloc {};\n\nstruct trace_event_data_offsets_ext4_mballoc_prealloc {};\n\nstruct trace_event_data_offsets_ext4__mballoc {};\n\nstruct trace_event_data_offsets_ext4_forget {};\n\nstruct trace_event_data_offsets_ext4_da_update_reserve_space {};\n\nstruct trace_event_data_offsets_ext4_da_reserve_space {};\n\nstruct trace_event_data_offsets_ext4_da_release_space {};\n\nstruct trace_event_data_offsets_ext4__bitmap_load {};\n\nstruct trace_event_data_offsets_ext4_read_block_bitmap_load {};\n\nstruct trace_event_data_offsets_ext4_direct_IO_enter {};\n\nstruct trace_event_data_offsets_ext4_direct_IO_exit {};\n\nstruct trace_event_data_offsets_ext4__fallocate_mode {};\n\nstruct trace_event_data_offsets_ext4_fallocate_exit {};\n\nstruct trace_event_data_offsets_ext4_unlink_enter {};\n\nstruct trace_event_data_offsets_ext4_unlink_exit {};\n\nstruct trace_event_data_offsets_ext4__truncate {};\n\nstruct trace_event_data_offsets_ext4_ext_convert_to_initialized_enter {};\n\nstruct trace_event_data_offsets_ext4_ext_convert_to_initialized_fastpath {};\n\nstruct trace_event_data_offsets_ext4__map_blocks_enter {};\n\nstruct trace_event_data_offsets_ext4__map_blocks_exit {};\n\nstruct trace_event_data_offsets_ext4_ext_load_extent {};\n\nstruct trace_event_data_offsets_ext4_load_inode {};\n\nstruct trace_event_data_offsets_ext4_journal_start {};\n\nstruct trace_event_data_offsets_ext4_journal_start_reserved {};\n\nstruct trace_event_data_offsets_ext4__trim {};\n\nstruct trace_event_data_offsets_ext4_ext_handle_unwritten_extents {};\n\nstruct trace_event_data_offsets_ext4_get_implied_cluster_alloc_exit {};\n\nstruct trace_event_data_offsets_ext4_ext_put_in_cache {};\n\nstruct trace_event_data_offsets_ext4_ext_in_cache {};\n\nstruct trace_event_data_offsets_ext4_find_delalloc_range {};\n\nstruct trace_event_data_offsets_ext4_get_reserved_cluster_alloc {};\n\nstruct trace_event_data_offsets_ext4_ext_show_extent {};\n\nstruct trace_event_data_offsets_ext4_remove_blocks {};\n\nstruct trace_event_data_offsets_ext4_ext_rm_leaf {};\n\nstruct trace_event_data_offsets_ext4_ext_rm_idx {};\n\nstruct trace_event_data_offsets_ext4_ext_remove_space {};\n\nstruct trace_event_data_offsets_ext4_ext_remove_space_done {};\n\nstruct trace_event_data_offsets_ext4__es_extent {};\n\nstruct trace_event_data_offsets_ext4_es_remove_extent {};\n\nstruct trace_event_data_offsets_ext4_es_find_extent_range_enter {};\n\nstruct trace_event_data_offsets_ext4_es_find_extent_range_exit {};\n\nstruct trace_event_data_offsets_ext4_es_lookup_extent_enter {};\n\nstruct trace_event_data_offsets_ext4_es_lookup_extent_exit {};\n\nstruct trace_event_data_offsets_ext4__es_shrink_enter {};\n\nstruct trace_event_data_offsets_ext4_es_shrink_scan_exit {};\n\nstruct trace_event_data_offsets_ext4_collapse_range {};\n\nstruct trace_event_data_offsets_ext4_insert_range {};\n\nstruct trace_event_data_offsets_ext4_es_shrink {};\n\nstruct trace_event_data_offsets_ext4_es_insert_delayed_block {};\n\nstruct trace_event_data_offsets_ext4_fsmap_class {};\n\nstruct trace_event_data_offsets_ext4_getfsmap_class {};\n\nstruct trace_event_data_offsets_ext4_shutdown {};\n\nstruct trace_event_data_offsets_ext4_error {};\n\nstruct trace_event_data_offsets_ext4_prefetch_bitmaps {};\n\nstruct trace_event_data_offsets_ext4_lazy_itable_init {};\n\nstruct trace_event_data_offsets_ext4_fc_replay_scan {};\n\nstruct trace_event_data_offsets_ext4_fc_replay {};\n\nstruct trace_event_data_offsets_ext4_fc_commit_start {};\n\nstruct trace_event_data_offsets_ext4_fc_commit_stop {};\n\nstruct trace_event_data_offsets_ext4_fc_stats {};\n\nstruct trace_event_data_offsets_ext4_fc_track_create {};\n\nstruct trace_event_data_offsets_ext4_fc_track_link {};\n\nstruct trace_event_data_offsets_ext4_fc_track_unlink {};\n\nstruct trace_event_data_offsets_ext4_fc_track_inode {};\n\nstruct trace_event_data_offsets_ext4_fc_track_range {};\n\ntypedef void (*btf_trace_ext4_other_inode_update_time)(void *, struct inode *, ino_t);\n\ntypedef void (*btf_trace_ext4_free_inode)(void *, struct inode *);\n\ntypedef void (*btf_trace_ext4_request_inode)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_ext4_allocate_inode)(void *, struct inode *, struct inode *, int);\n\ntypedef void (*btf_trace_ext4_evict_inode)(void *, struct inode *);\n\ntypedef void (*btf_trace_ext4_drop_inode)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_ext4_nfs_commit_metadata)(void *, struct inode *);\n\ntypedef void (*btf_trace_ext4_mark_inode_dirty)(void *, struct inode *, long unsigned int);\n\ntypedef void (*btf_trace_ext4_begin_ordered_truncate)(void *, struct inode *, loff_t);\n\ntypedef void (*btf_trace_ext4_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_da_write_begin)(void *, struct inode *, loff_t, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_journalled_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_da_write_end)(void *, struct inode *, loff_t, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_writepages)(void *, struct inode *, struct writeback_control *);\n\ntypedef void (*btf_trace_ext4_da_write_pages)(void *, struct inode *, long unsigned int, struct writeback_control *);\n\ntypedef void (*btf_trace_ext4_da_write_pages_extent)(void *, struct inode *, struct ext4_map_blocks *);\n\ntypedef void (*btf_trace_ext4_writepages_result)(void *, struct inode *, struct writeback_control *, int, int);\n\ntypedef void (*btf_trace_ext4_writepage)(void *, struct page *);\n\ntypedef void (*btf_trace_ext4_readpage)(void *, struct page *);\n\ntypedef void (*btf_trace_ext4_releasepage)(void *, struct page *);\n\ntypedef void (*btf_trace_ext4_invalidatepage)(void *, struct page *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_journalled_invalidatepage)(void *, struct page *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_discard_blocks)(void *, struct super_block *, long long unsigned int, long long unsigned int);\n\ntypedef void (*btf_trace_ext4_mb_new_inode_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);\n\ntypedef void (*btf_trace_ext4_mb_new_group_pa)(void *, struct ext4_allocation_context *, struct ext4_prealloc_space *);\n\ntypedef void (*btf_trace_ext4_mb_release_inode_pa)(void *, struct ext4_prealloc_space *, long long unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_mb_release_group_pa)(void *, struct super_block *, struct ext4_prealloc_space *);\n\ntypedef void (*btf_trace_ext4_discard_preallocations)(void *, struct inode *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_mb_discard_preallocations)(void *, struct super_block *, int);\n\ntypedef void (*btf_trace_ext4_request_blocks)(void *, struct ext4_allocation_request *);\n\ntypedef void (*btf_trace_ext4_allocate_blocks)(void *, struct ext4_allocation_request *, long long unsigned int);\n\ntypedef void (*btf_trace_ext4_free_blocks)(void *, struct inode *, __u64, long unsigned int, int);\n\ntypedef void (*btf_trace_ext4_sync_file_enter)(void *, struct file *, int);\n\ntypedef void (*btf_trace_ext4_sync_file_exit)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_ext4_sync_fs)(void *, struct super_block *, int);\n\ntypedef void (*btf_trace_ext4_alloc_da_blocks)(void *, struct inode *);\n\ntypedef void (*btf_trace_ext4_mballoc_alloc)(void *, struct ext4_allocation_context *);\n\ntypedef void (*btf_trace_ext4_mballoc_prealloc)(void *, struct ext4_allocation_context *);\n\ntypedef void (*btf_trace_ext4_mballoc_discard)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);\n\ntypedef void (*btf_trace_ext4_mballoc_free)(void *, struct super_block *, struct inode *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);\n\ntypedef void (*btf_trace_ext4_forget)(void *, struct inode *, int, __u64);\n\ntypedef void (*btf_trace_ext4_da_update_reserve_space)(void *, struct inode *, int, int);\n\ntypedef void (*btf_trace_ext4_da_reserve_space)(void *, struct inode *);\n\ntypedef void (*btf_trace_ext4_da_release_space)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_ext4_mb_bitmap_load)(void *, struct super_block *, long unsigned int);\n\ntypedef void (*btf_trace_ext4_mb_buddy_bitmap_load)(void *, struct super_block *, long unsigned int);\n\ntypedef void (*btf_trace_ext4_load_inode_bitmap)(void *, struct super_block *, long unsigned int);\n\ntypedef void (*btf_trace_ext4_read_block_bitmap_load)(void *, struct super_block *, long unsigned int, bool);\n\ntypedef void (*btf_trace_ext4_direct_IO_enter)(void *, struct inode *, loff_t, long unsigned int, int);\n\ntypedef void (*btf_trace_ext4_direct_IO_exit)(void *, struct inode *, loff_t, long unsigned int, int, int);\n\ntypedef void (*btf_trace_ext4_fallocate_enter)(void *, struct inode *, loff_t, loff_t, int);\n\ntypedef void (*btf_trace_ext4_punch_hole)(void *, struct inode *, loff_t, loff_t, int);\n\ntypedef void (*btf_trace_ext4_zero_range)(void *, struct inode *, loff_t, loff_t, int);\n\ntypedef void (*btf_trace_ext4_fallocate_exit)(void *, struct inode *, loff_t, unsigned int, int);\n\ntypedef void (*btf_trace_ext4_unlink_enter)(void *, struct inode *, struct dentry *);\n\ntypedef void (*btf_trace_ext4_unlink_exit)(void *, struct dentry *, int);\n\ntypedef void (*btf_trace_ext4_truncate_enter)(void *, struct inode *);\n\ntypedef void (*btf_trace_ext4_truncate_exit)(void *, struct inode *);\n\ntypedef void (*btf_trace_ext4_ext_convert_to_initialized_enter)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *);\n\ntypedef void (*btf_trace_ext4_ext_convert_to_initialized_fastpath)(void *, struct inode *, struct ext4_map_blocks *, struct ext4_extent *, struct ext4_extent *);\n\ntypedef void (*btf_trace_ext4_ext_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_ind_map_blocks_enter)(void *, struct inode *, ext4_lblk_t, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ext4_ext_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);\n\ntypedef void (*btf_trace_ext4_ind_map_blocks_exit)(void *, struct inode *, unsigned int, struct ext4_map_blocks *, int);\n\ntypedef void (*btf_trace_ext4_ext_load_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t);\n\ntypedef void (*btf_trace_ext4_load_inode)(void *, struct super_block *, long unsigned int);\n\ntypedef void (*btf_trace_ext4_journal_start)(void *, struct super_block *, int, int, int, long unsigned int);\n\ntypedef void (*btf_trace_ext4_journal_start_reserved)(void *, struct super_block *, int, long unsigned int);\n\ntypedef void (*btf_trace_ext4_trim_extent)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);\n\ntypedef void (*btf_trace_ext4_trim_all_free)(void *, struct super_block *, ext4_group_t, ext4_grpblk_t, ext4_grpblk_t);\n\ntypedef void (*btf_trace_ext4_ext_handle_unwritten_extents)(void *, struct inode *, struct ext4_map_blocks *, int, unsigned int, ext4_fsblk_t);\n\ntypedef void (*btf_trace_ext4_get_implied_cluster_alloc_exit)(void *, struct super_block *, struct ext4_map_blocks *, int);\n\ntypedef void (*btf_trace_ext4_ext_put_in_cache)(void *, struct inode *, ext4_lblk_t, unsigned int, ext4_fsblk_t);\n\ntypedef void (*btf_trace_ext4_ext_in_cache)(void *, struct inode *, ext4_lblk_t, int);\n\ntypedef void (*btf_trace_ext4_find_delalloc_range)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, int, ext4_lblk_t);\n\ntypedef void (*btf_trace_ext4_get_reserved_cluster_alloc)(void *, struct inode *, ext4_lblk_t, unsigned int);\n\ntypedef void (*btf_trace_ext4_ext_show_extent)(void *, struct inode *, ext4_lblk_t, ext4_fsblk_t, short unsigned int);\n\ntypedef void (*btf_trace_ext4_remove_blocks)(void *, struct inode *, struct ext4_extent *, ext4_lblk_t, ext4_fsblk_t, struct partial_cluster *);\n\ntypedef void (*btf_trace_ext4_ext_rm_leaf)(void *, struct inode *, ext4_lblk_t, struct ext4_extent *, struct partial_cluster *);\n\ntypedef void (*btf_trace_ext4_ext_rm_idx)(void *, struct inode *, ext4_fsblk_t);\n\ntypedef void (*btf_trace_ext4_ext_remove_space)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int);\n\ntypedef void (*btf_trace_ext4_ext_remove_space_done)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t, int, struct partial_cluster *, __le16);\n\ntypedef void (*btf_trace_ext4_es_insert_extent)(void *, struct inode *, struct extent_status *);\n\ntypedef void (*btf_trace_ext4_es_cache_extent)(void *, struct inode *, struct extent_status *);\n\ntypedef void (*btf_trace_ext4_es_remove_extent)(void *, struct inode *, ext4_lblk_t, ext4_lblk_t);\n\ntypedef void (*btf_trace_ext4_es_find_extent_range_enter)(void *, struct inode *, ext4_lblk_t);\n\ntypedef void (*btf_trace_ext4_es_find_extent_range_exit)(void *, struct inode *, struct extent_status *);\n\ntypedef void (*btf_trace_ext4_es_lookup_extent_enter)(void *, struct inode *, ext4_lblk_t);\n\ntypedef void (*btf_trace_ext4_es_lookup_extent_exit)(void *, struct inode *, struct extent_status *, int);\n\ntypedef void (*btf_trace_ext4_es_shrink_count)(void *, struct super_block *, int, int);\n\ntypedef void (*btf_trace_ext4_es_shrink_scan_enter)(void *, struct super_block *, int, int);\n\ntypedef void (*btf_trace_ext4_es_shrink_scan_exit)(void *, struct super_block *, int, int);\n\ntypedef void (*btf_trace_ext4_collapse_range)(void *, struct inode *, loff_t, loff_t);\n\ntypedef void (*btf_trace_ext4_insert_range)(void *, struct inode *, loff_t, loff_t);\n\ntypedef void (*btf_trace_ext4_es_shrink)(void *, struct super_block *, int, u64, int, int);\n\ntypedef void (*btf_trace_ext4_es_insert_delayed_block)(void *, struct inode *, struct extent_status *, bool);\n\ntypedef void (*btf_trace_ext4_fsmap_low_key)(void *, struct super_block *, u32, u32, u64, u64, u64);\n\ntypedef void (*btf_trace_ext4_fsmap_high_key)(void *, struct super_block *, u32, u32, u64, u64, u64);\n\ntypedef void (*btf_trace_ext4_fsmap_mapping)(void *, struct super_block *, u32, u32, u64, u64, u64);\n\ntypedef void (*btf_trace_ext4_getfsmap_low_key)(void *, struct super_block *, struct ext4_fsmap *);\n\ntypedef void (*btf_trace_ext4_getfsmap_high_key)(void *, struct super_block *, struct ext4_fsmap *);\n\ntypedef void (*btf_trace_ext4_getfsmap_mapping)(void *, struct super_block *, struct ext4_fsmap *);\n\ntypedef void (*btf_trace_ext4_shutdown)(void *, struct super_block *, long unsigned int);\n\ntypedef void (*btf_trace_ext4_error)(void *, struct super_block *, const char *, unsigned int);\n\ntypedef void (*btf_trace_ext4_prefetch_bitmaps)(void *, struct super_block *, ext4_group_t, ext4_group_t, unsigned int);\n\ntypedef void (*btf_trace_ext4_lazy_itable_init)(void *, struct super_block *, ext4_group_t);\n\ntypedef void (*btf_trace_ext4_fc_replay_scan)(void *, struct super_block *, int, int);\n\ntypedef void (*btf_trace_ext4_fc_replay)(void *, struct super_block *, int, int, int, int);\n\ntypedef void (*btf_trace_ext4_fc_commit_start)(void *, struct super_block *);\n\ntypedef void (*btf_trace_ext4_fc_commit_stop)(void *, struct super_block *, int, int);\n\ntypedef void (*btf_trace_ext4_fc_stats)(void *, struct super_block *);\n\ntypedef void (*btf_trace_ext4_fc_track_create)(void *, struct inode *, struct dentry *, int);\n\ntypedef void (*btf_trace_ext4_fc_track_link)(void *, struct inode *, struct dentry *, int);\n\ntypedef void (*btf_trace_ext4_fc_track_unlink)(void *, struct inode *, struct dentry *, int);\n\ntypedef void (*btf_trace_ext4_fc_track_inode)(void *, struct inode *, int);\n\ntypedef void (*btf_trace_ext4_fc_track_range)(void *, struct inode *, long int, long int, int);\n\nstruct ext4_err_translation {\n\tint code;\n\tint errno;\n};\n\nenum {\n\tOpt_bsd_df = 0,\n\tOpt_minix_df = 1,\n\tOpt_grpid = 2,\n\tOpt_nogrpid = 3,\n\tOpt_resgid = 4,\n\tOpt_resuid = 5,\n\tOpt_sb = 6,\n\tOpt_err_cont = 7,\n\tOpt_err_panic = 8,\n\tOpt_err_ro = 9,\n\tOpt_nouid32 = 10,\n\tOpt_debug = 11,\n\tOpt_removed = 12,\n\tOpt_user_xattr = 13,\n\tOpt_nouser_xattr = 14,\n\tOpt_acl = 15,\n\tOpt_noacl = 16,\n\tOpt_auto_da_alloc = 17,\n\tOpt_noauto_da_alloc = 18,\n\tOpt_noload = 19,\n\tOpt_commit = 20,\n\tOpt_min_batch_time = 21,\n\tOpt_max_batch_time = 22,\n\tOpt_journal_dev = 23,\n\tOpt_journal_path = 24,\n\tOpt_journal_checksum = 25,\n\tOpt_journal_async_commit = 26,\n\tOpt_abort = 27,\n\tOpt_data_journal = 28,\n\tOpt_data_ordered = 29,\n\tOpt_data_writeback = 30,\n\tOpt_data_err_abort = 31,\n\tOpt_data_err_ignore = 32,\n\tOpt_test_dummy_encryption = 33,\n\tOpt_inlinecrypt = 34,\n\tOpt_usrjquota = 35,\n\tOpt_grpjquota = 36,\n\tOpt_offusrjquota = 37,\n\tOpt_offgrpjquota = 38,\n\tOpt_jqfmt_vfsold = 39,\n\tOpt_jqfmt_vfsv0 = 40,\n\tOpt_jqfmt_vfsv1 = 41,\n\tOpt_quota = 42,\n\tOpt_noquota = 43,\n\tOpt_barrier = 44,\n\tOpt_nobarrier = 45,\n\tOpt_err___2 = 46,\n\tOpt_usrquota = 47,\n\tOpt_grpquota = 48,\n\tOpt_prjquota = 49,\n\tOpt_i_version = 50,\n\tOpt_dax = 51,\n\tOpt_dax_always = 52,\n\tOpt_dax_inode = 53,\n\tOpt_dax_never = 54,\n\tOpt_stripe = 55,\n\tOpt_delalloc = 56,\n\tOpt_nodelalloc = 57,\n\tOpt_warn_on_error = 58,\n\tOpt_nowarn_on_error = 59,\n\tOpt_mblk_io_submit = 60,\n\tOpt_lazytime = 61,\n\tOpt_nolazytime = 62,\n\tOpt_debug_want_extra_isize = 63,\n\tOpt_nomblk_io_submit = 64,\n\tOpt_block_validity = 65,\n\tOpt_noblock_validity = 66,\n\tOpt_inode_readahead_blks = 67,\n\tOpt_journal_ioprio = 68,\n\tOpt_dioread_nolock = 69,\n\tOpt_dioread_lock = 70,\n\tOpt_discard = 71,\n\tOpt_nodiscard = 72,\n\tOpt_init_itable = 73,\n\tOpt_noinit_itable = 74,\n\tOpt_max_dir_size_kb = 75,\n\tOpt_nojournal_checksum = 76,\n\tOpt_nombcache = 77,\n\tOpt_prefetch_block_bitmaps = 78,\n};\n\nstruct mount_opts {\n\tint token;\n\tint mount_opt;\n\tint flags;\n};\n\nstruct ext4_sb_encodings {\n\t__u16 magic;\n\tchar *name;\n\tchar *version;\n};\n\nstruct ext4_mount_options {\n\tlong unsigned int s_mount_opt;\n\tlong unsigned int s_mount_opt2;\n\tkuid_t s_resuid;\n\tkgid_t s_resgid;\n\tlong unsigned int s_commit_interval;\n\tu32 s_min_batch_time;\n\tu32 s_max_batch_time;\n\tint s_jquota_fmt;\n\tchar *s_qf_names[3];\n};\n\nenum {\n\tattr_noop = 0,\n\tattr_delayed_allocation_blocks = 1,\n\tattr_session_write_kbytes = 2,\n\tattr_lifetime_write_kbytes = 3,\n\tattr_reserved_clusters = 4,\n\tattr_sra_exceeded_retry_limit = 5,\n\tattr_inode_readahead = 6,\n\tattr_trigger_test_error = 7,\n\tattr_first_error_time = 8,\n\tattr_last_error_time = 9,\n\tattr_feature = 10,\n\tattr_pointer_ui = 11,\n\tattr_pointer_ul = 12,\n\tattr_pointer_u64 = 13,\n\tattr_pointer_u8 = 14,\n\tattr_pointer_string = 15,\n\tattr_pointer_atomic = 16,\n\tattr_journal_task = 17,\n};\n\nenum {\n\tptr_explicit = 0,\n\tptr_ext4_sb_info_offset = 1,\n\tptr_ext4_super_block_offset = 2,\n};\n\nstruct ext4_attr {\n\tstruct attribute attr;\n\tshort int attr_id;\n\tshort int attr_ptr;\n\tshort unsigned int attr_size;\n\tunion {\n\t\tint offset;\n\t\tvoid *explicit_ptr;\n\t} u;\n};\n\nstruct ext4_xattr_header {\n\t__le32 h_magic;\n\t__le32 h_refcount;\n\t__le32 h_blocks;\n\t__le32 h_hash;\n\t__le32 h_checksum;\n\t__u32 h_reserved[3];\n};\n\nstruct ext4_xattr_block_find {\n\tstruct ext4_xattr_search s;\n\tstruct buffer_head *bh;\n};\n\nstruct ext4_fc_tl {\n\t__le16 fc_tag;\n\t__le16 fc_len;\n};\n\nstruct ext4_fc_head {\n\t__le32 fc_features;\n\t__le32 fc_tid;\n};\n\nstruct ext4_fc_add_range {\n\t__le32 fc_ino;\n\t__u8 fc_ex[12];\n};\n\nstruct ext4_fc_del_range {\n\t__le32 fc_ino;\n\t__le32 fc_lblk;\n\t__le32 fc_len;\n};\n\nstruct ext4_fc_dentry_info {\n\t__le32 fc_parent_ino;\n\t__le32 fc_ino;\n\t__u8 fc_dname[0];\n};\n\nstruct ext4_fc_inode {\n\t__le32 fc_ino;\n\t__u8 fc_raw_inode[0];\n};\n\nstruct ext4_fc_tail {\n\t__le32 fc_tid;\n\t__le32 fc_crc;\n};\n\nstruct ext4_fc_dentry_update {\n\tint fcd_op;\n\tint fcd_parent;\n\tint fcd_ino;\n\tstruct qstr fcd_name;\n\tunsigned char fcd_iname[32];\n\tstruct list_head fcd_list;\n};\n\nstruct __track_dentry_update_args {\n\tstruct dentry *dentry;\n\tint op;\n};\n\nstruct __track_range_args {\n\text4_lblk_t start;\n\text4_lblk_t end;\n};\n\nstruct dentry_info_args {\n\tint parent_ino;\n\tint dname_len;\n\tint ino;\n\tint inode_len;\n\tchar *dname;\n};\n\ntypedef struct {\n\t__le16 e_tag;\n\t__le16 e_perm;\n\t__le32 e_id;\n} ext4_acl_entry;\n\ntypedef struct {\n\t__le32 a_version;\n} ext4_acl_header;\n\nstruct commit_header {\n\t__be32 h_magic;\n\t__be32 h_blocktype;\n\t__be32 h_sequence;\n\tunsigned char h_chksum_type;\n\tunsigned char h_chksum_size;\n\tunsigned char h_padding[2];\n\t__be32 h_chksum[8];\n\t__be64 h_commit_sec;\n\t__be32 h_commit_nsec;\n};\n\nstruct journal_block_tag3_s {\n\t__be32 t_blocknr;\n\t__be32 t_flags;\n\t__be32 t_blocknr_high;\n\t__be32 t_checksum;\n};\n\ntypedef struct journal_block_tag3_s journal_block_tag3_t;\n\nstruct journal_block_tag_s {\n\t__be32 t_blocknr;\n\t__be16 t_checksum;\n\t__be16 t_flags;\n\t__be32 t_blocknr_high;\n};\n\ntypedef struct journal_block_tag_s journal_block_tag_t;\n\nstruct jbd2_journal_block_tail {\n\t__be32 t_checksum;\n};\n\nstruct jbd2_journal_revoke_header_s {\n\tjournal_header_t r_header;\n\t__be32 r_count;\n};\n\ntypedef struct jbd2_journal_revoke_header_s jbd2_journal_revoke_header_t;\n\nstruct recovery_info {\n\ttid_t start_transaction;\n\ttid_t end_transaction;\n\tint nr_replays;\n\tint nr_revokes;\n\tint nr_revoke_hits;\n};\n\nstruct jbd2_revoke_table_s {\n\tint hash_size;\n\tint hash_shift;\n\tstruct list_head *hash_table;\n};\n\nstruct jbd2_revoke_record_s {\n\tstruct list_head hash;\n\ttid_t sequence;\n\tlong long unsigned int blocknr;\n};\n\nstruct trace_event_raw_jbd2_checkpoint {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint result;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_commit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tchar sync_commit;\n\tint transaction;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_end_commit {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tchar sync_commit;\n\tint transaction;\n\tint head;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_submit_inode_data {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tino_t ino;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_handle_start_class {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tlong unsigned int tid;\n\tunsigned int type;\n\tunsigned int line_no;\n\tint requested_blocks;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_handle_extend {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tlong unsigned int tid;\n\tunsigned int type;\n\tunsigned int line_no;\n\tint buffer_credits;\n\tint requested_blocks;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_handle_stats {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tlong unsigned int tid;\n\tunsigned int type;\n\tunsigned int line_no;\n\tint interval;\n\tint sync;\n\tint requested_blocks;\n\tint dirtied_blocks;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_run_stats {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tlong unsigned int tid;\n\tlong unsigned int wait;\n\tlong unsigned int request_delay;\n\tlong unsigned int running;\n\tlong unsigned int locked;\n\tlong unsigned int flushing;\n\tlong unsigned int logging;\n\t__u32 handle_count;\n\t__u32 blocks;\n\t__u32 blocks_logged;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_checkpoint_stats {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tlong unsigned int tid;\n\tlong unsigned int chp_time;\n\t__u32 forced_to_close;\n\t__u32 written;\n\t__u32 dropped;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_update_log_tail {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\ttid_t tail_sequence;\n\ttid_t first_tid;\n\tlong unsigned int block_nr;\n\tlong unsigned int freed;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_write_superblock {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint write_op;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_jbd2_lock_buffer_stall {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tlong unsigned int stall_ms;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_jbd2_checkpoint {};\n\nstruct trace_event_data_offsets_jbd2_commit {};\n\nstruct trace_event_data_offsets_jbd2_end_commit {};\n\nstruct trace_event_data_offsets_jbd2_submit_inode_data {};\n\nstruct trace_event_data_offsets_jbd2_handle_start_class {};\n\nstruct trace_event_data_offsets_jbd2_handle_extend {};\n\nstruct trace_event_data_offsets_jbd2_handle_stats {};\n\nstruct trace_event_data_offsets_jbd2_run_stats {};\n\nstruct trace_event_data_offsets_jbd2_checkpoint_stats {};\n\nstruct trace_event_data_offsets_jbd2_update_log_tail {};\n\nstruct trace_event_data_offsets_jbd2_write_superblock {};\n\nstruct trace_event_data_offsets_jbd2_lock_buffer_stall {};\n\ntypedef void (*btf_trace_jbd2_checkpoint)(void *, journal_t *, int);\n\ntypedef void (*btf_trace_jbd2_start_commit)(void *, journal_t *, transaction_t *);\n\ntypedef void (*btf_trace_jbd2_commit_locking)(void *, journal_t *, transaction_t *);\n\ntypedef void (*btf_trace_jbd2_commit_flushing)(void *, journal_t *, transaction_t *);\n\ntypedef void (*btf_trace_jbd2_commit_logging)(void *, journal_t *, transaction_t *);\n\ntypedef void (*btf_trace_jbd2_drop_transaction)(void *, journal_t *, transaction_t *);\n\ntypedef void (*btf_trace_jbd2_end_commit)(void *, journal_t *, transaction_t *);\n\ntypedef void (*btf_trace_jbd2_submit_inode_data)(void *, struct inode *);\n\ntypedef void (*btf_trace_jbd2_handle_start)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);\n\ntypedef void (*btf_trace_jbd2_handle_restart)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int);\n\ntypedef void (*btf_trace_jbd2_handle_extend)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int);\n\ntypedef void (*btf_trace_jbd2_handle_stats)(void *, dev_t, long unsigned int, unsigned int, unsigned int, int, int, int, int);\n\ntypedef void (*btf_trace_jbd2_run_stats)(void *, dev_t, long unsigned int, struct transaction_run_stats_s *);\n\ntypedef void (*btf_trace_jbd2_checkpoint_stats)(void *, dev_t, long unsigned int, struct transaction_chp_stats_s *);\n\ntypedef void (*btf_trace_jbd2_update_log_tail)(void *, journal_t *, tid_t, long unsigned int, long unsigned int);\n\ntypedef void (*btf_trace_jbd2_write_superblock)(void *, journal_t *, int);\n\ntypedef void (*btf_trace_jbd2_lock_buffer_stall)(void *, dev_t, long unsigned int);\n\nstruct jbd2_stats_proc_session {\n\tjournal_t *journal;\n\tstruct transaction_stats_s *stats;\n\tint start;\n\tint max;\n};\n\nstruct ramfs_mount_opts {\n\tumode_t mode;\n};\n\nstruct ramfs_fs_info {\n\tstruct ramfs_mount_opts mount_opts;\n};\n\nenum ramfs_param {\n\tOpt_mode___3 = 0,\n};\n\nenum hugetlbfs_size_type {\n\tNO_SIZE = 0,\n\tSIZE_STD = 1,\n\tSIZE_PERCENT = 2,\n};\n\nstruct hugetlbfs_fs_context {\n\tstruct hstate *hstate;\n\tlong long unsigned int max_size_opt;\n\tlong long unsigned int min_size_opt;\n\tlong int max_hpages;\n\tlong int nr_inodes;\n\tlong int min_hpages;\n\tenum hugetlbfs_size_type max_val_type;\n\tenum hugetlbfs_size_type min_val_type;\n\tkuid_t uid;\n\tkgid_t gid;\n\tumode_t mode;\n};\n\nenum hugetlb_param {\n\tOpt_gid___4 = 0,\n\tOpt_min_size = 1,\n\tOpt_mode___4 = 2,\n\tOpt_nr_inodes___2 = 3,\n\tOpt_pagesize = 4,\n\tOpt_size___2 = 5,\n\tOpt_uid___3 = 6,\n};\n\nstruct getdents_callback___2 {\n\tstruct dir_context ctx;\n\tchar *name;\n\tu64 ino;\n\tint found;\n\tint sequence;\n};\n\ntypedef u16 wchar_t;\n\ntypedef u32 unicode_t;\n\nstruct nls_table {\n\tconst char *charset;\n\tconst char *alias;\n\tint (*uni2char)(wchar_t, unsigned char *, int);\n\tint (*char2uni)(const unsigned char *, int, wchar_t *);\n\tconst unsigned char *charset2lower;\n\tconst unsigned char *charset2upper;\n\tstruct module *owner;\n\tstruct nls_table *next;\n};\n\nenum utf16_endian {\n\tUTF16_HOST_ENDIAN = 0,\n\tUTF16_LITTLE_ENDIAN = 1,\n\tUTF16_BIG_ENDIAN = 2,\n};\n\nstruct utf8_table {\n\tint cmask;\n\tint cval;\n\tint shift;\n\tlong int lmask;\n\tlong int lval;\n};\n\nstruct utf8data;\n\nstruct utf8cursor {\n\tconst struct utf8data *data;\n\tconst char *s;\n\tconst char *p;\n\tconst char *ss;\n\tconst char *sp;\n\tunsigned int len;\n\tunsigned int slen;\n\tshort int ccc;\n\tshort int nccc;\n\tunsigned char hangul[12];\n};\n\nstruct utf8data {\n\tunsigned int maxage;\n\tunsigned int offset;\n};\n\ntypedef const unsigned char utf8trie_t;\n\ntypedef const unsigned char utf8leaf_t;\n\ntypedef unsigned int autofs_wqt_t;\n\nstruct autofs_sb_info;\n\nstruct autofs_info {\n\tstruct dentry *dentry;\n\tstruct inode *inode;\n\tint flags;\n\tstruct completion expire_complete;\n\tstruct list_head active;\n\tstruct list_head expiring;\n\tstruct autofs_sb_info *sbi;\n\tlong unsigned int last_used;\n\tint count;\n\tkuid_t uid;\n\tkgid_t gid;\n\tstruct callback_head rcu;\n};\n\nstruct autofs_wait_queue;\n\nstruct autofs_sb_info {\n\tu32 magic;\n\tint pipefd;\n\tstruct file *pipe;\n\tstruct pid *oz_pgrp;\n\tint version;\n\tint sub_version;\n\tint min_proto;\n\tint max_proto;\n\tunsigned int flags;\n\tlong unsigned int exp_timeout;\n\tunsigned int type;\n\tstruct super_block *sb;\n\tstruct mutex wq_mutex;\n\tstruct mutex pipe_mutex;\n\tspinlock_t fs_lock;\n\tstruct autofs_wait_queue *queues;\n\tspinlock_t lookup_lock;\n\tstruct list_head active_list;\n\tstruct list_head expiring_list;\n\tstruct callback_head rcu;\n};\n\nstruct autofs_wait_queue {\n\twait_queue_head_t queue;\n\tstruct autofs_wait_queue *next;\n\tautofs_wqt_t wait_queue_token;\n\tstruct qstr name;\n\tu32 dev;\n\tu64 ino;\n\tkuid_t uid;\n\tkgid_t gid;\n\tpid_t pid;\n\tpid_t tgid;\n\tint status;\n\tunsigned int wait_ctr;\n};\n\nenum {\n\tOpt_err___3 = 0,\n\tOpt_fd = 1,\n\tOpt_uid___4 = 2,\n\tOpt_gid___5 = 3,\n\tOpt_pgrp = 4,\n\tOpt_minproto = 5,\n\tOpt_maxproto = 6,\n\tOpt_indirect = 7,\n\tOpt_direct = 8,\n\tOpt_offset = 9,\n\tOpt_strictexpire = 10,\n\tOpt_ignore = 11,\n};\n\nstruct autofs_packet_hdr {\n\tint proto_version;\n\tint type;\n};\n\nstruct autofs_packet_expire {\n\tstruct autofs_packet_hdr hdr;\n\tint len;\n\tchar name[256];\n};\n\nenum {\n\tAUTOFS_IOC_READY_CMD = 96,\n\tAUTOFS_IOC_FAIL_CMD = 97,\n\tAUTOFS_IOC_CATATONIC_CMD = 98,\n\tAUTOFS_IOC_PROTOVER_CMD = 99,\n\tAUTOFS_IOC_SETTIMEOUT_CMD = 100,\n\tAUTOFS_IOC_EXPIRE_CMD = 101,\n};\n\nenum autofs_notify {\n\tNFY_NONE = 0,\n\tNFY_MOUNT = 1,\n\tNFY_EXPIRE = 2,\n};\n\nenum {\n\tAUTOFS_IOC_EXPIRE_MULTI_CMD = 102,\n\tAUTOFS_IOC_PROTOSUBVER_CMD = 103,\n\tAUTOFS_IOC_ASKUMOUNT_CMD = 112,\n};\n\nstruct autofs_packet_missing {\n\tstruct autofs_packet_hdr hdr;\n\tautofs_wqt_t wait_queue_token;\n\tint len;\n\tchar name[256];\n};\n\nstruct autofs_packet_expire_multi {\n\tstruct autofs_packet_hdr hdr;\n\tautofs_wqt_t wait_queue_token;\n\tint len;\n\tchar name[256];\n};\n\nunion autofs_packet_union {\n\tstruct autofs_packet_hdr hdr;\n\tstruct autofs_packet_missing missing;\n\tstruct autofs_packet_expire expire;\n\tstruct autofs_packet_expire_multi expire_multi;\n};\n\nstruct autofs_v5_packet {\n\tstruct autofs_packet_hdr hdr;\n\tautofs_wqt_t wait_queue_token;\n\t__u32 dev;\n\t__u64 ino;\n\t__u32 uid;\n\t__u32 gid;\n\t__u32 pid;\n\t__u32 tgid;\n\t__u32 len;\n\tchar name[256];\n};\n\ntypedef struct autofs_v5_packet autofs_packet_missing_indirect_t;\n\ntypedef struct autofs_v5_packet autofs_packet_expire_indirect_t;\n\ntypedef struct autofs_v5_packet autofs_packet_missing_direct_t;\n\ntypedef struct autofs_v5_packet autofs_packet_expire_direct_t;\n\nunion autofs_v5_packet_union {\n\tstruct autofs_packet_hdr hdr;\n\tstruct autofs_v5_packet v5_packet;\n\tautofs_packet_missing_indirect_t missing_indirect;\n\tautofs_packet_expire_indirect_t expire_indirect;\n\tautofs_packet_missing_direct_t missing_direct;\n\tautofs_packet_expire_direct_t expire_direct;\n};\n\nstruct args_protover {\n\t__u32 version;\n};\n\nstruct args_protosubver {\n\t__u32 sub_version;\n};\n\nstruct args_openmount {\n\t__u32 devid;\n};\n\nstruct args_ready {\n\t__u32 token;\n};\n\nstruct args_fail {\n\t__u32 token;\n\t__s32 status;\n};\n\nstruct args_setpipefd {\n\t__s32 pipefd;\n};\n\nstruct args_timeout {\n\t__u64 timeout;\n};\n\nstruct args_requester {\n\t__u32 uid;\n\t__u32 gid;\n};\n\nstruct args_expire {\n\t__u32 how;\n};\n\nstruct args_askumount {\n\t__u32 may_umount;\n};\n\nstruct args_in {\n\t__u32 type;\n};\n\nstruct args_out {\n\t__u32 devid;\n\t__u32 magic;\n};\n\nstruct args_ismountpoint {\n\tunion {\n\t\tstruct args_in in;\n\t\tstruct args_out out;\n\t};\n};\n\nstruct autofs_dev_ioctl {\n\t__u32 ver_major;\n\t__u32 ver_minor;\n\t__u32 size;\n\t__s32 ioctlfd;\n\tunion {\n\t\tstruct args_protover protover;\n\t\tstruct args_protosubver protosubver;\n\t\tstruct args_openmount openmount;\n\t\tstruct args_ready ready;\n\t\tstruct args_fail fail;\n\t\tstruct args_setpipefd setpipefd;\n\t\tstruct args_timeout timeout;\n\t\tstruct args_requester requester;\n\t\tstruct args_expire expire;\n\t\tstruct args_askumount askumount;\n\t\tstruct args_ismountpoint ismountpoint;\n\t};\n\tchar path[0];\n};\n\nenum {\n\tAUTOFS_DEV_IOCTL_VERSION_CMD = 113,\n\tAUTOFS_DEV_IOCTL_PROTOVER_CMD = 114,\n\tAUTOFS_DEV_IOCTL_PROTOSUBVER_CMD = 115,\n\tAUTOFS_DEV_IOCTL_OPENMOUNT_CMD = 116,\n\tAUTOFS_DEV_IOCTL_CLOSEMOUNT_CMD = 117,\n\tAUTOFS_DEV_IOCTL_READY_CMD = 118,\n\tAUTOFS_DEV_IOCTL_FAIL_CMD = 119,\n\tAUTOFS_DEV_IOCTL_SETPIPEFD_CMD = 120,\n\tAUTOFS_DEV_IOCTL_CATATONIC_CMD = 121,\n\tAUTOFS_DEV_IOCTL_TIMEOUT_CMD = 122,\n\tAUTOFS_DEV_IOCTL_REQUESTER_CMD = 123,\n\tAUTOFS_DEV_IOCTL_EXPIRE_CMD = 124,\n\tAUTOFS_DEV_IOCTL_ASKUMOUNT_CMD = 125,\n\tAUTOFS_DEV_IOCTL_ISMOUNTPOINT_CMD = 126,\n};\n\ntypedef int (*ioctl_fn)(struct file *, struct autofs_sb_info *, struct autofs_dev_ioctl *);\n\nstruct debugfs_fsdata {\n\tconst struct file_operations *real_fops;\n\trefcount_t active_users;\n\tstruct completion active_users_drained;\n};\n\nstruct debugfs_mount_opts {\n\tkuid_t uid;\n\tkgid_t gid;\n\tumode_t mode;\n};\n\nenum {\n\tOpt_uid___5 = 0,\n\tOpt_gid___6 = 1,\n\tOpt_mode___5 = 2,\n\tOpt_err___4 = 3,\n};\n\nstruct debugfs_fs_info {\n\tstruct debugfs_mount_opts mount_opts;\n};\n\nstruct debugfs_reg32 {\n\tchar *name;\n\tlong unsigned int offset;\n};\n\nstruct debugfs_regset32 {\n\tconst struct debugfs_reg32 *regs;\n\tint nregs;\n\tvoid *base;\n\tstruct device *dev;\n};\n\nstruct debugfs_u32_array {\n\tu32 *array;\n\tu32 n_elements;\n};\n\nstruct debugfs_devm_entry {\n\tint (*read)(struct seq_file *, void *);\n\tstruct device *dev;\n};\n\nstruct tracefs_dir_ops {\n\tint (*mkdir)(const char *);\n\tint (*rmdir)(const char *);\n};\n\nstruct tracefs_mount_opts {\n\tkuid_t uid;\n\tkgid_t gid;\n\tumode_t mode;\n};\n\nstruct tracefs_fs_info {\n\tstruct tracefs_mount_opts mount_opts;\n};\n\nstruct btrfs_ioctl_vol_args {\n\t__s64 fd;\n\tchar name[4088];\n};\n\nstruct btrfs_scrub_progress {\n\t__u64 data_extents_scrubbed;\n\t__u64 tree_extents_scrubbed;\n\t__u64 data_bytes_scrubbed;\n\t__u64 tree_bytes_scrubbed;\n\t__u64 read_errors;\n\t__u64 csum_errors;\n\t__u64 verify_errors;\n\t__u64 no_csum;\n\t__u64 csum_discards;\n\t__u64 super_errors;\n\t__u64 malloc_errors;\n\t__u64 uncorrectable_errors;\n\t__u64 corrected_errors;\n\t__u64 last_physical;\n\t__u64 unverified_errors;\n};\n\nstruct btrfs_balance_args {\n\t__u64 profiles;\n\tunion {\n\t\t__u64 usage;\n\t\tstruct {\n\t\t\t__u32 usage_min;\n\t\t\t__u32 usage_max;\n\t\t};\n\t};\n\t__u64 devid;\n\t__u64 pstart;\n\t__u64 pend;\n\t__u64 vstart;\n\t__u64 vend;\n\t__u64 target;\n\t__u64 flags;\n\tunion {\n\t\t__u64 limit;\n\t\tstruct {\n\t\t\t__u32 limit_min;\n\t\t\t__u32 limit_max;\n\t\t};\n\t};\n\t__u32 stripes_min;\n\t__u32 stripes_max;\n\t__u64 unused[6];\n};\n\nstruct btrfs_balance_progress {\n\t__u64 expected;\n\t__u64 considered;\n\t__u64 completed;\n};\n\nenum btrfs_dev_stat_values {\n\tBTRFS_DEV_STAT_WRITE_ERRS = 0,\n\tBTRFS_DEV_STAT_READ_ERRS = 1,\n\tBTRFS_DEV_STAT_FLUSH_ERRS = 2,\n\tBTRFS_DEV_STAT_CORRUPTION_ERRS = 3,\n\tBTRFS_DEV_STAT_GENERATION_ERRS = 4,\n\tBTRFS_DEV_STAT_VALUES_MAX = 5,\n};\n\nstruct btrfs_disk_key {\n\t__le64 objectid;\n\t__u8 type;\n\t__le64 offset;\n} __attribute__((packed));\n\nstruct btrfs_key {\n\t__u64 objectid;\n\t__u8 type;\n\t__u64 offset;\n} __attribute__((packed));\n\nstruct btrfs_dev_item {\n\t__le64 devid;\n\t__le64 total_bytes;\n\t__le64 bytes_used;\n\t__le32 io_align;\n\t__le32 io_width;\n\t__le32 sector_size;\n\t__le64 type;\n\t__le64 generation;\n\t__le64 start_offset;\n\t__le32 dev_group;\n\t__u8 seek_speed;\n\t__u8 bandwidth;\n\t__u8 uuid[16];\n\t__u8 fsid[16];\n} __attribute__((packed));\n\nstruct btrfs_inode_ref {\n\t__le64 index;\n\t__le16 name_len;\n} __attribute__((packed));\n\nstruct btrfs_timespec {\n\t__le64 sec;\n\t__le32 nsec;\n} __attribute__((packed));\n\nstruct btrfs_inode_item {\n\t__le64 generation;\n\t__le64 transid;\n\t__le64 size;\n\t__le64 nbytes;\n\t__le64 block_group;\n\t__le32 nlink;\n\t__le32 uid;\n\t__le32 gid;\n\t__le32 mode;\n\t__le64 rdev;\n\t__le64 flags;\n\t__le64 sequence;\n\t__le64 reserved[4];\n\tstruct btrfs_timespec atime;\n\tstruct btrfs_timespec ctime;\n\tstruct btrfs_timespec mtime;\n\tstruct btrfs_timespec otime;\n} __attribute__((packed));\n\nstruct btrfs_dir_item {\n\tstruct btrfs_disk_key location;\n\t__le64 transid;\n\t__le16 data_len;\n\t__le16 name_len;\n\t__u8 type;\n} __attribute__((packed));\n\nstruct btrfs_root_item {\n\tstruct btrfs_inode_item inode;\n\t__le64 generation;\n\t__le64 root_dirid;\n\t__le64 bytenr;\n\t__le64 byte_limit;\n\t__le64 bytes_used;\n\t__le64 last_snapshot;\n\t__le64 flags;\n\t__le32 refs;\n\tstruct btrfs_disk_key drop_progress;\n\t__u8 drop_level;\n\t__u8 level;\n\t__le64 generation_v2;\n\t__u8 uuid[16];\n\t__u8 parent_uuid[16];\n\t__u8 received_uuid[16];\n\t__le64 ctransid;\n\t__le64 otransid;\n\t__le64 stransid;\n\t__le64 rtransid;\n\tstruct btrfs_timespec ctime;\n\tstruct btrfs_timespec otime;\n\tstruct btrfs_timespec stime;\n\tstruct btrfs_timespec rtime;\n\t__le64 reserved[8];\n} __attribute__((packed));\n\nstruct btrfs_root_ref {\n\t__le64 dirid;\n\t__le64 sequence;\n\t__le16 name_len;\n} __attribute__((packed));\n\nenum {\n\tBTRFS_FILE_EXTENT_INLINE = 0,\n\tBTRFS_FILE_EXTENT_REG = 1,\n\tBTRFS_FILE_EXTENT_PREALLOC = 2,\n\tBTRFS_NR_FILE_EXTENT_TYPES = 3,\n};\n\nstruct btrfs_file_extent_item {\n\t__le64 generation;\n\t__le64 ram_bytes;\n\t__u8 compression;\n\t__u8 encryption;\n\t__le16 other_encoding;\n\t__u8 type;\n\t__le64 disk_bytenr;\n\t__le64 disk_num_bytes;\n\t__le64 offset;\n\t__le64 num_bytes;\n} __attribute__((packed));\n\nenum btrfs_raid_types {\n\tBTRFS_RAID_RAID10 = 0,\n\tBTRFS_RAID_RAID1 = 1,\n\tBTRFS_RAID_DUP = 2,\n\tBTRFS_RAID_RAID0 = 3,\n\tBTRFS_RAID_SINGLE = 4,\n\tBTRFS_RAID_RAID5 = 5,\n\tBTRFS_RAID_RAID6 = 6,\n\tBTRFS_RAID_RAID1C3 = 7,\n\tBTRFS_RAID_RAID1C4 = 8,\n\tBTRFS_NR_RAID_TYPES = 9,\n};\n\nenum {\n\tIO_TREE_FS_PINNED_EXTENTS = 0,\n\tIO_TREE_FS_EXCLUDED_EXTENTS = 1,\n\tIO_TREE_BTREE_INODE_IO = 2,\n\tIO_TREE_INODE_IO = 3,\n\tIO_TREE_INODE_IO_FAILURE = 4,\n\tIO_TREE_RELOC_BLOCKS = 5,\n\tIO_TREE_TRANS_DIRTY_PAGES = 6,\n\tIO_TREE_ROOT_DIRTY_LOG_PAGES = 7,\n\tIO_TREE_INODE_FILE_EXTENT = 8,\n\tIO_TREE_LOG_CSUM_RANGE = 9,\n\tIO_TREE_SELFTEST = 10,\n\tIO_TREE_DEVICE_ALLOC_STATE = 11,\n};\n\nstruct btrfs_fs_info;\n\nstruct extent_io_tree {\n\tstruct rb_root state;\n\tstruct btrfs_fs_info *fs_info;\n\tvoid *private_data;\n\tu64 dirty_bytes;\n\tbool track_uptodate;\n\tu8 owner;\n\tspinlock_t lock;\n};\n\nstruct extent_map_tree {\n\tstruct rb_root_cached map;\n\tstruct list_head modified_extents;\n\trwlock_t lock;\n};\n\nstruct btrfs_space_info;\n\nstruct btrfs_block_rsv {\n\tu64 size;\n\tu64 reserved;\n\tstruct btrfs_space_info *space_info;\n\tspinlock_t lock;\n\tshort unsigned int full;\n\tshort unsigned int type;\n\tshort unsigned int failfast;\n\tu64 qgroup_rsv_size;\n\tu64 qgroup_rsv_reserved;\n};\n\nstruct btrfs_block_group;\n\nstruct btrfs_free_cluster {\n\tspinlock_t lock;\n\tspinlock_t refill_lock;\n\tstruct rb_root root;\n\tu64 max_size;\n\tu64 window_start;\n\tbool fragmented;\n\tstruct btrfs_block_group *block_group;\n\tstruct list_head block_group_list;\n};\n\nstruct btrfs_discard_ctl {\n\tstruct workqueue_struct *discard_workers;\n\tstruct delayed_work work;\n\tspinlock_t lock;\n\tstruct btrfs_block_group *block_group;\n\tstruct list_head discard_list[3];\n\tu64 prev_discard;\n\tu64 prev_discard_time;\n\tatomic_t discardable_extents;\n\tatomic64_t discardable_bytes;\n\tu64 max_discard_size;\n\tu64 delay_ms;\n\tu32 iops_limit;\n\tu32 kbps_limit;\n\tu64 discard_extent_bytes;\n\tu64 discard_bitmap_bytes;\n\tatomic64_t discard_bytes_saved;\n};\n\nstruct btrfs_work;\n\ntypedef void (*btrfs_func_t)(struct btrfs_work *);\n\nstruct __btrfs_workqueue;\n\nstruct btrfs_work {\n\tbtrfs_func_t func;\n\tbtrfs_func_t ordered_func;\n\tbtrfs_func_t ordered_free;\n\tstruct work_struct normal_work;\n\tstruct list_head ordered_list;\n\tstruct __btrfs_workqueue *wq;\n\tlong unsigned int flags;\n};\n\nstruct btrfs_device;\n\nstruct btrfs_dev_replace {\n\tu64 replace_state;\n\ttime64_t time_started;\n\ttime64_t time_stopped;\n\tatomic64_t num_write_errors;\n\tatomic64_t num_uncorrectable_read_errors;\n\tu64 cursor_left;\n\tu64 committed_cursor_left;\n\tu64 cursor_left_last_write_of_item;\n\tu64 cursor_right;\n\tu64 cont_reading_from_srcdev_mode;\n\tint is_valid;\n\tint item_needs_writeback;\n\tstruct btrfs_device *srcdev;\n\tstruct btrfs_device *tgtdev;\n\tstruct mutex lock_finishing_cancel_unmount;\n\tstruct rw_semaphore rwsem;\n\tstruct btrfs_scrub_progress scrub_progress;\n\tstruct percpu_counter bio_counter;\n\twait_queue_head_t replace_wait;\n};\n\nstruct btrfs_root;\n\nstruct btrfs_transaction;\n\nstruct btrfs_super_block;\n\nstruct btrfs_stripe_hash_table;\n\nstruct btrfs_workqueue;\n\nstruct btrfs_fs_devices;\n\nstruct reloc_control;\n\nstruct btrfs_balance_control;\n\nstruct ulist;\n\nstruct btrfs_delayed_root;\n\nstruct btrfs_fs_info {\n\tu8 chunk_tree_uuid[16];\n\tlong unsigned int flags;\n\tstruct btrfs_root *extent_root;\n\tstruct btrfs_root *tree_root;\n\tstruct btrfs_root *chunk_root;\n\tstruct btrfs_root *dev_root;\n\tstruct btrfs_root *fs_root;\n\tstruct btrfs_root *csum_root;\n\tstruct btrfs_root *quota_root;\n\tstruct btrfs_root *uuid_root;\n\tstruct btrfs_root *free_space_root;\n\tstruct btrfs_root *data_reloc_root;\n\tstruct btrfs_root *log_root_tree;\n\tspinlock_t fs_roots_radix_lock;\n\tstruct xarray fs_roots_radix;\n\tspinlock_t block_group_cache_lock;\n\tu64 first_logical_byte;\n\tstruct rb_root block_group_cache_tree;\n\tatomic64_t free_chunk_space;\n\tstruct extent_io_tree excluded_extents;\n\tstruct extent_map_tree mapping_tree;\n\tstruct btrfs_block_rsv global_block_rsv;\n\tstruct btrfs_block_rsv trans_block_rsv;\n\tstruct btrfs_block_rsv chunk_block_rsv;\n\tstruct btrfs_block_rsv delayed_block_rsv;\n\tstruct btrfs_block_rsv delayed_refs_rsv;\n\tstruct btrfs_block_rsv empty_block_rsv;\n\tu64 generation;\n\tu64 last_trans_committed;\n\tu64 avg_delayed_ref_runtime;\n\tu64 last_trans_log_full_commit;\n\tlong unsigned int mount_opt;\n\tlong unsigned int pending_changes;\n\tlong unsigned int compress_type: 4;\n\tunsigned int compress_level;\n\tu32 commit_interval;\n\tu64 max_inline;\n\tstruct btrfs_transaction *running_transaction;\n\twait_queue_head_t transaction_throttle;\n\twait_queue_head_t transaction_wait;\n\twait_queue_head_t transaction_blocked_wait;\n\twait_queue_head_t async_submit_wait;\n\tspinlock_t super_lock;\n\tstruct btrfs_super_block *super_copy;\n\tstruct btrfs_super_block *super_for_commit;\n\tstruct super_block *sb;\n\tstruct inode *btree_inode;\n\tstruct mutex tree_log_mutex;\n\tstruct mutex transaction_kthread_mutex;\n\tstruct mutex cleaner_mutex;\n\tstruct mutex chunk_mutex;\n\tstruct mutex ro_block_group_mutex;\n\tstruct btrfs_stripe_hash_table *stripe_hash_table;\n\tstruct mutex ordered_operations_mutex;\n\tstruct rw_semaphore commit_root_sem;\n\tstruct rw_semaphore cleanup_work_sem;\n\tstruct rw_semaphore subvol_sem;\n\tspinlock_t trans_lock;\n\tstruct mutex reloc_mutex;\n\tstruct list_head trans_list;\n\tstruct list_head dead_roots;\n\tstruct list_head caching_block_groups;\n\tspinlock_t delayed_iput_lock;\n\tstruct list_head delayed_iputs;\n\tatomic_t nr_delayed_iputs;\n\twait_queue_head_t delayed_iputs_wait;\n\tatomic64_t tree_mod_seq;\n\trwlock_t tree_mod_log_lock;\n\tstruct rb_root tree_mod_log;\n\tstruct list_head tree_mod_seq_list;\n\tatomic_t async_delalloc_pages;\n\tspinlock_t ordered_root_lock;\n\tstruct list_head ordered_roots;\n\tstruct mutex delalloc_root_mutex;\n\tspinlock_t delalloc_root_lock;\n\tstruct list_head delalloc_roots;\n\tstruct btrfs_workqueue *workers;\n\tstruct btrfs_workqueue *delalloc_workers;\n\tstruct btrfs_workqueue *flush_workers;\n\tstruct btrfs_workqueue *endio_workers;\n\tstruct btrfs_workqueue *endio_meta_workers;\n\tstruct btrfs_workqueue *endio_raid56_workers;\n\tstruct btrfs_workqueue *rmw_workers;\n\tstruct btrfs_workqueue *endio_meta_write_workers;\n\tstruct btrfs_workqueue *endio_write_workers;\n\tstruct btrfs_workqueue *endio_freespace_worker;\n\tstruct btrfs_workqueue *caching_workers;\n\tstruct btrfs_workqueue *readahead_workers;\n\tstruct btrfs_workqueue *fixup_workers;\n\tstruct btrfs_workqueue *delayed_workers;\n\tstruct task_struct *transaction_kthread;\n\tstruct task_struct *cleaner_kthread;\n\tu32 thread_pool_size;\n\tstruct kobject *space_info_kobj;\n\tstruct kobject *qgroups_kobj;\n\tu64 total_pinned;\n\tstruct percpu_counter dirty_metadata_bytes;\n\tstruct percpu_counter delalloc_bytes;\n\tstruct percpu_counter dio_bytes;\n\ts32 dirty_metadata_batch;\n\ts32 delalloc_batch;\n\tstruct list_head dirty_cowonly_roots;\n\tstruct btrfs_fs_devices *fs_devices;\n\tstruct list_head space_info;\n\tstruct btrfs_space_info *data_sinfo;\n\tstruct reloc_control *reloc_ctl;\n\tstruct btrfs_free_cluster data_alloc_cluster;\n\tstruct btrfs_free_cluster meta_alloc_cluster;\n\tspinlock_t defrag_inodes_lock;\n\tstruct rb_root defrag_inodes;\n\tatomic_t defrag_running;\n\tseqlock_t profiles_lock;\n\tu64 avail_data_alloc_bits;\n\tu64 avail_metadata_alloc_bits;\n\tu64 avail_system_alloc_bits;\n\tspinlock_t balance_lock;\n\tstruct mutex balance_mutex;\n\tatomic_t balance_pause_req;\n\tatomic_t balance_cancel_req;\n\tstruct btrfs_balance_control *balance_ctl;\n\twait_queue_head_t balance_wait_q;\n\tu32 data_chunk_allocations;\n\tu32 metadata_ratio;\n\tvoid *bdev_holder;\n\tstruct mutex scrub_lock;\n\tatomic_t scrubs_running;\n\tatomic_t scrub_pause_req;\n\tatomic_t scrubs_paused;\n\tatomic_t scrub_cancel_req;\n\twait_queue_head_t scrub_pause_wait;\n\trefcount_t scrub_workers_refcnt;\n\tstruct btrfs_workqueue *scrub_workers;\n\tstruct btrfs_workqueue *scrub_wr_completion_workers;\n\tstruct btrfs_workqueue *scrub_parity_workers;\n\tstruct btrfs_discard_ctl discard_ctl;\n\tu64 qgroup_flags;\n\tstruct rb_root qgroup_tree;\n\tspinlock_t qgroup_lock;\n\tstruct ulist *qgroup_ulist;\n\tstruct mutex qgroup_ioctl_lock;\n\tstruct list_head dirty_qgroups;\n\tu64 qgroup_seq;\n\tstruct mutex qgroup_rescan_lock;\n\tstruct btrfs_key qgroup_rescan_progress;\n\tstruct btrfs_workqueue *qgroup_rescan_workers;\n\tstruct completion qgroup_rescan_completion;\n\tstruct btrfs_work qgroup_rescan_work;\n\tbool qgroup_rescan_running;\n\tlong unsigned int fs_state;\n\tstruct btrfs_delayed_root *delayed_root;\n\tspinlock_t reada_lock;\n\tstruct xarray reada_tree;\n\tatomic_t reada_works_cnt;\n\tspinlock_t buffer_lock;\n\tstruct xarray buffer_radix;\n\tint backup_root_index;\n\tstruct btrfs_dev_replace dev_replace;\n\tstruct semaphore uuid_tree_rescan_sem;\n\tstruct work_struct async_reclaim_work;\n\tstruct work_struct async_data_reclaim_work;\n\tspinlock_t unused_bgs_lock;\n\tstruct list_head unused_bgs;\n\tstruct mutex unused_bg_unpin_mutex;\n\tstruct mutex delete_unused_bgs_mutex;\n\tu32 nodesize;\n\tu32 sectorsize;\n\tu32 sectorsize_bits;\n\tu32 csum_size;\n\tu32 csums_per_leaf;\n\tu32 stripesize;\n\tspinlock_t swapfile_pins_lock;\n\tstruct rb_root swapfile_pins;\n\tstruct crypto_shash *csum_shash;\n\tint send_in_progress;\n\tlong unsigned int exclusive_operation;\n\tunion {\n\t\tu64 zone_size;\n\t\tu64 zoned;\n\t};\n\tu64 max_zone_append_size;\n};\n\nstruct io_failure_record;\n\nstruct extent_state {\n\tu64 start;\n\tu64 end;\n\tstruct rb_node rb_node;\n\twait_queue_head_t wq;\n\trefcount_t refs;\n\tu32 state;\n\tstruct io_failure_record *failrec;\n};\n\nstruct io_failure_record {\n\tstruct page *page;\n\tu64 start;\n\tu64 len;\n\tu64 logical;\n\tlong unsigned int bio_flags;\n\tint this_mirror;\n\tint failed_mirror;\n\tint in_validation;\n};\n\nstruct ulist {\n\tlong unsigned int nnodes;\n\tstruct list_head nodes;\n\tstruct rb_root root;\n};\n\nstruct extent_buffer {\n\tu64 start;\n\tlong unsigned int len;\n\tlong unsigned int bflags;\n\tstruct btrfs_fs_info *fs_info;\n\tspinlock_t refs_lock;\n\tatomic_t refs;\n\tatomic_t io_pages;\n\tint read_mirror;\n\tstruct callback_head callback_head;\n\tpid_t lock_owner;\n\ts8 log_index;\n\tstruct rw_semaphore lock;\n\tstruct page *pages[16];\n};\n\nstruct map_lookup;\n\nstruct extent_map {\n\tstruct rb_node rb_node;\n\tu64 start;\n\tu64 len;\n\tu64 mod_start;\n\tu64 mod_len;\n\tu64 orig_start;\n\tu64 orig_block_len;\n\tu64 ram_bytes;\n\tu64 block_start;\n\tu64 block_len;\n\tu64 generation;\n\tlong unsigned int flags;\n\tstruct map_lookup *map_lookup;\n\trefcount_t refs;\n\tunsigned int compress_type;\n\tstruct list_head list;\n};\n\nstruct btrfs_ordered_inode_tree {\n\tspinlock_t lock;\n\tstruct rb_root tree;\n\tstruct rb_node *last;\n};\n\nstruct btrfs_delayed_node;\n\nstruct btrfs_inode {\n\tstruct btrfs_root *root;\n\tstruct btrfs_key location;\n\tspinlock_t lock;\n\tstruct extent_map_tree extent_tree;\n\tstruct extent_io_tree io_tree;\n\tstruct extent_io_tree io_failure_tree;\n\tstruct extent_io_tree file_extent_tree;\n\tstruct mutex log_mutex;\n\tstruct btrfs_ordered_inode_tree ordered_tree;\n\tstruct list_head delalloc_inodes;\n\tstruct rb_node rb_node;\n\tlong unsigned int runtime_flags;\n\tatomic_t sync_writers;\n\tu64 generation;\n\tu64 last_trans;\n\tu64 logged_trans;\n\tint last_sub_trans;\n\tint last_log_commit;\n\tu64 delalloc_bytes;\n\tu64 new_delalloc_bytes;\n\tu64 defrag_bytes;\n\tu64 disk_i_size;\n\tu64 index_cnt;\n\tu64 dir_index;\n\tu64 last_unlink_trans;\n\tu64 last_reflink_trans;\n\tu64 csum_bytes;\n\tu32 flags;\n\tunsigned int outstanding_extents;\n\tstruct btrfs_block_rsv block_rsv;\n\tunsigned int prop_compress;\n\tunsigned int defrag_compress;\n\tstruct btrfs_delayed_node *delayed_node;\n\tstruct timespec64 i_otime;\n\tstruct list_head delayed_iput;\n\tstruct inode vfs_inode;\n};\n\nenum {\n\tEXTENT_FLAG_PINNED = 0,\n\tEXTENT_FLAG_COMPRESSED = 1,\n\tEXTENT_FLAG_PREALLOC = 2,\n\tEXTENT_FLAG_LOGGING = 3,\n\tEXTENT_FLAG_FILLING = 4,\n\tEXTENT_FLAG_FS_MAPPING = 5,\n};\n\nstruct btrfs_bio_stripe {\n\tstruct btrfs_device *dev;\n\tu64 physical;\n\tu64 length;\n};\n\nstruct map_lookup {\n\tu64 type;\n\tint io_align;\n\tint io_width;\n\tu64 stripe_len;\n\tint num_stripes;\n\tint sub_stripes;\n\tint verified_stripes;\n\tstruct btrfs_bio_stripe stripes[0];\n};\n\nstruct __btrfs_workqueue {\n\tstruct workqueue_struct *normal_wq;\n\tstruct btrfs_fs_info *fs_info;\n\tstruct list_head ordered_list;\n\tspinlock_t list_lock;\n\tatomic_t pending;\n\tint limit_active;\n\tint current_active;\n\tint thresh;\n\tunsigned int count;\n\tspinlock_t thres_lock;\n};\n\nstruct btrfs_space_info {\n\tspinlock_t lock;\n\tu64 total_bytes;\n\tu64 bytes_used;\n\tu64 bytes_pinned;\n\tu64 bytes_reserved;\n\tu64 bytes_may_use;\n\tu64 bytes_readonly;\n\tu64 max_extent_size;\n\tunsigned int full: 1;\n\tunsigned int chunk_alloc: 1;\n\tunsigned int flush: 1;\n\tunsigned int force_alloc;\n\tu64 disk_used;\n\tu64 disk_total;\n\tu64 flags;\n\tstruct percpu_counter total_bytes_pinned;\n\tstruct list_head list;\n\tstruct list_head ro_bgs;\n\tstruct list_head priority_tickets;\n\tstruct list_head tickets;\n\tu64 reclaim_size;\n\tu64 tickets_id;\n\tstruct rw_semaphore groups_sem;\n\tstruct list_head block_groups[9];\n\tstruct kobject kobj;\n\tstruct kobject *block_group_kobjs[9];\n};\n\nenum btrfs_lock_nesting {\n\tBTRFS_NESTING_NORMAL = 0,\n\tBTRFS_NESTING_COW = 1,\n\tBTRFS_NESTING_LEFT = 2,\n\tBTRFS_NESTING_RIGHT = 3,\n\tBTRFS_NESTING_LEFT_COW = 4,\n\tBTRFS_NESTING_RIGHT_COW = 5,\n\tBTRFS_NESTING_SPLIT = 6,\n\tBTRFS_NESTING_NEW_ROOT = 7,\n\tBTRFS_NESTING_MAX = 8,\n};\n\nstruct btrfs_drew_lock {\n\tatomic_t readers;\n\tstruct percpu_counter writers;\n\twait_queue_head_t pending_writers;\n\twait_queue_head_t pending_readers;\n};\n\nenum {\n\tBTRFS_FS_STATE_ERROR = 0,\n\tBTRFS_FS_STATE_REMOUNTING = 1,\n\tBTRFS_FS_STATE_RO = 2,\n\tBTRFS_FS_STATE_TRANS_ABORTED = 3,\n\tBTRFS_FS_STATE_DEV_REPLACING = 4,\n\tBTRFS_FS_STATE_DUMMY_FS_INFO = 5,\n};\n\nstruct btrfs_header {\n\tu8 csum[32];\n\tu8 fsid[16];\n\t__le64 bytenr;\n\t__le64 flags;\n\tu8 chunk_tree_uuid[16];\n\t__le64 generation;\n\t__le64 owner;\n\t__le32 nritems;\n\tu8 level;\n} __attribute__((packed));\n\nstruct btrfs_root_backup {\n\t__le64 tree_root;\n\t__le64 tree_root_gen;\n\t__le64 chunk_root;\n\t__le64 chunk_root_gen;\n\t__le64 extent_root;\n\t__le64 extent_root_gen;\n\t__le64 fs_root;\n\t__le64 fs_root_gen;\n\t__le64 dev_root;\n\t__le64 dev_root_gen;\n\t__le64 csum_root;\n\t__le64 csum_root_gen;\n\t__le64 total_bytes;\n\t__le64 bytes_used;\n\t__le64 num_devices;\n\t__le64 unused_64[4];\n\tu8 tree_root_level;\n\tu8 chunk_root_level;\n\tu8 extent_root_level;\n\tu8 fs_root_level;\n\tu8 dev_root_level;\n\tu8 csum_root_level;\n\tu8 unused_8[10];\n};\n\nstruct btrfs_super_block {\n\tu8 csum[32];\n\tu8 fsid[16];\n\t__le64 bytenr;\n\t__le64 flags;\n\t__le64 magic;\n\t__le64 generation;\n\t__le64 root;\n\t__le64 chunk_root;\n\t__le64 log_root;\n\t__le64 log_root_transid;\n\t__le64 total_bytes;\n\t__le64 bytes_used;\n\t__le64 root_dir_objectid;\n\t__le64 num_devices;\n\t__le32 sectorsize;\n\t__le32 nodesize;\n\t__le32 __unused_leafsize;\n\t__le32 stripesize;\n\t__le32 sys_chunk_array_size;\n\t__le64 chunk_root_generation;\n\t__le64 compat_flags;\n\t__le64 compat_ro_flags;\n\t__le64 incompat_flags;\n\t__le16 csum_type;\n\tu8 root_level;\n\tu8 chunk_root_level;\n\tu8 log_root_level;\n\tstruct btrfs_dev_item dev_item;\n\tchar label[256];\n\t__le64 cache_generation;\n\t__le64 uuid_tree_generation;\n\tu8 metadata_uuid[16];\n\t__le64 reserved[28];\n\tu8 sys_chunk_array[2048];\n\tstruct btrfs_root_backup super_roots[4];\n} __attribute__((packed));\n\nstruct btrfs_item {\n\tstruct btrfs_disk_key key;\n\t__le32 offset;\n\t__le32 size;\n} __attribute__((packed));\n\nstruct btrfs_path {\n\tstruct extent_buffer *nodes[8];\n\tint slots[8];\n\tu8 locks[8];\n\tu8 reada;\n\tu8 lowest_level;\n\tunsigned int search_for_split: 1;\n\tunsigned int keep_locks: 1;\n\tunsigned int skip_locking: 1;\n\tunsigned int search_commit_root: 1;\n\tunsigned int need_commit_sem: 1;\n\tunsigned int skip_release_on_error: 1;\n\tunsigned int search_for_extension: 1;\n};\n\nstruct rcu_string;\n\nstruct btrfs_zoned_device_info;\n\nstruct scrub_ctx;\n\nstruct reada_zone;\n\nstruct btrfs_device {\n\tstruct list_head dev_list;\n\tstruct list_head dev_alloc_list;\n\tstruct list_head post_commit_list;\n\tstruct btrfs_fs_devices *fs_devices;\n\tstruct btrfs_fs_info *fs_info;\n\tstruct rcu_string *name;\n\tu64 generation;\n\tstruct block_device *bdev;\n\tstruct btrfs_zoned_device_info *zone_info;\n\tfmode_t mode;\n\tlong unsigned int dev_state;\n\tblk_status_t last_flush_error;\n\tu64 devid;\n\tu64 total_bytes;\n\tu64 disk_total_bytes;\n\tu64 bytes_used;\n\tu32 io_align;\n\tu32 io_width;\n\tu64 type;\n\tu32 sector_size;\n\tu8 uuid[16];\n\tu64 commit_total_bytes;\n\tu64 commit_bytes_used;\n\tstruct bio *flush_bio;\n\tstruct completion flush_wait;\n\tstruct scrub_ctx *scrub_ctx;\n\tatomic_t reada_in_flight;\n\tu64 reada_next;\n\tstruct reada_zone *reada_curr_zone;\n\tstruct xarray reada_zones;\n\tstruct xarray reada_extents;\n\tint dev_stats_valid;\n\tatomic_t dev_stats_ccnt;\n\tatomic_t dev_stat_values[5];\n\tstruct extent_io_tree alloc_state;\n\tstruct completion kobj_unregister;\n\tstruct kobject devid_kobj;\n};\n\nenum btrfs_discard_state {\n\tBTRFS_DISCARD_EXTENTS = 0,\n\tBTRFS_DISCARD_BITMAPS = 1,\n\tBTRFS_DISCARD_RESET_CURSOR = 2,\n};\n\nstruct btrfs_io_ctl {\n\tvoid *cur;\n\tvoid *orig;\n\tstruct page *page;\n\tstruct page **pages;\n\tstruct btrfs_fs_info *fs_info;\n\tstruct inode *inode;\n\tlong unsigned int size;\n\tint index;\n\tint num_pages;\n\tint entries;\n\tint bitmaps;\n};\n\nstruct btrfs_full_stripe_locks_tree {\n\tstruct rb_root root;\n\tstruct mutex lock;\n};\n\nstruct btrfs_caching_control;\n\nstruct btrfs_free_space_ctl;\n\nstruct btrfs_block_group {\n\tstruct btrfs_fs_info *fs_info;\n\tstruct inode *inode;\n\tspinlock_t lock;\n\tu64 start;\n\tu64 length;\n\tu64 pinned;\n\tu64 reserved;\n\tu64 used;\n\tu64 delalloc_bytes;\n\tu64 bytes_super;\n\tu64 flags;\n\tu64 cache_generation;\n\tu32 bitmap_high_thresh;\n\tu32 bitmap_low_thresh;\n\tstruct rw_semaphore data_rwsem;\n\tlong unsigned int full_stripe_len;\n\tunsigned int ro;\n\tunsigned int iref: 1;\n\tunsigned int has_caching_ctl: 1;\n\tunsigned int removed: 1;\n\tint disk_cache_state;\n\tint cached;\n\tstruct btrfs_caching_control *caching_ctl;\n\tu64 last_byte_to_unpin;\n\tstruct btrfs_space_info *space_info;\n\tstruct btrfs_free_space_ctl *free_space_ctl;\n\tstruct rb_node cache_node;\n\tstruct list_head list;\n\trefcount_t refs;\n\tstruct list_head cluster_list;\n\tstruct list_head bg_list;\n\tstruct list_head ro_list;\n\tatomic_t frozen;\n\tstruct list_head discard_list;\n\tint discard_index;\n\tu64 discard_eligible_time;\n\tu64 discard_cursor;\n\tenum btrfs_discard_state discard_state;\n\tstruct list_head dirty_list;\n\tstruct list_head io_list;\n\tstruct btrfs_io_ctl io_ctl;\n\tatomic_t reservations;\n\tatomic_t nocow_writers;\n\tstruct mutex free_space_lock;\n\tint needs_free_space;\n\tint swap_extents;\n\tstruct btrfs_full_stripe_locks_tree full_stripe_locks_root;\n};\n\nenum {\n\tBTRFS_FS_BARRIER = 0,\n\tBTRFS_FS_CLOSING_START = 1,\n\tBTRFS_FS_CLOSING_DONE = 2,\n\tBTRFS_FS_LOG_RECOVERING = 3,\n\tBTRFS_FS_OPEN = 4,\n\tBTRFS_FS_QUOTA_ENABLED = 5,\n\tBTRFS_FS_UPDATE_UUID_TREE_GEN = 6,\n\tBTRFS_FS_CREATING_FREE_SPACE_TREE = 7,\n\tBTRFS_FS_BTREE_ERR = 8,\n\tBTRFS_FS_LOG1_ERR = 9,\n\tBTRFS_FS_LOG2_ERR = 10,\n\tBTRFS_FS_QUOTA_OVERRIDE = 11,\n\tBTRFS_FS_FROZEN = 12,\n\tBTRFS_FS_BALANCE_RUNNING = 13,\n\tBTRFS_FS_CLEANER_RUNNING = 14,\n\tBTRFS_FS_CSUM_IMPL_FAST = 15,\n\tBTRFS_FS_DISCARD_RUNNING = 16,\n\tBTRFS_FS_CLEANUP_SPACE_CACHE_V1 = 17,\n\tBTRFS_FS_FREE_SPACE_TREE_UNTRUSTED = 18,\n};\n\nstruct btrfs_qgroup_swapped_blocks {\n\tspinlock_t lock;\n\tbool swapped;\n\tstruct rb_root blocks[8];\n};\n\nstruct btrfs_root {\n\tstruct extent_buffer *node;\n\tstruct extent_buffer *commit_root;\n\tstruct btrfs_root *log_root;\n\tstruct btrfs_root *reloc_root;\n\tlong unsigned int state;\n\tstruct btrfs_root_item root_item;\n\tstruct btrfs_key root_key;\n\tstruct btrfs_fs_info *fs_info;\n\tstruct extent_io_tree dirty_log_pages;\n\tstruct mutex objectid_mutex;\n\tspinlock_t accounting_lock;\n\tint: 32;\n\tstruct btrfs_block_rsv *block_rsv;\n\tstruct mutex log_mutex;\n\twait_queue_head_t log_writer_wait;\n\twait_queue_head_t log_commit_wait[2];\n\tstruct list_head log_ctxs[2];\n\tatomic_t log_writers;\n\tatomic_t log_commit[2];\n\tatomic_t log_batch;\n\tint log_transid;\n\tint log_transid_committed;\n\tint last_log_commit;\n\tpid_t log_start_pid;\n\tu64 last_trans;\n\tu32 type;\n\tint: 32;\n\tu64 highest_objectid;\n\tstruct btrfs_key defrag_progress;\n\tstruct btrfs_key defrag_max;\n\tlong: 48;\n\tstruct list_head dirty_list;\n\tstruct list_head root_list;\n\tspinlock_t log_extents_lock[2];\n\tstruct list_head logged_list[2];\n\tint orphan_cleanup_state;\n\tspinlock_t inode_lock;\n\tstruct rb_root inode_tree;\n\tstruct xarray delayed_nodes_tree;\n\tdev_t anon_dev;\n\tspinlock_t root_item_lock;\n\trefcount_t refs;\n\tint: 32;\n\tstruct mutex delalloc_mutex;\n\tspinlock_t delalloc_lock;\n\tint: 32;\n\tstruct list_head delalloc_inodes;\n\tstruct list_head delalloc_root;\n\tu64 nr_delalloc_inodes;\n\tstruct mutex ordered_extent_mutex;\n\tspinlock_t ordered_extent_lock;\n\tint: 32;\n\tstruct list_head ordered_extents;\n\tstruct list_head ordered_root;\n\tu64 nr_ordered_extents;\n\tstruct list_head reloc_dirty_list;\n\tint send_in_progress;\n\tint dedupe_in_progress;\n\tstruct btrfs_drew_lock snapshot_lock;\n\tatomic_t snapshot_force_cow;\n\tspinlock_t qgroup_meta_rsv_lock;\n\tu64 qgroup_meta_rsv_pertrans;\n\tu64 qgroup_meta_rsv_prealloc;\n\twait_queue_head_t qgroup_flush_wait;\n\tatomic_t nr_swapfiles;\n\tint: 32;\n\tstruct btrfs_qgroup_swapped_blocks swapped_blocks;\n\tstruct extent_io_tree log_csum_range;\n} __attribute__((packed));\n\nenum btrfs_trans_state {\n\tTRANS_STATE_RUNNING = 0,\n\tTRANS_STATE_COMMIT_START = 1,\n\tTRANS_STATE_COMMIT_DOING = 2,\n\tTRANS_STATE_UNBLOCKED = 3,\n\tTRANS_STATE_COMPLETED = 4,\n\tTRANS_STATE_MAX = 5,\n};\n\nstruct btrfs_delayed_ref_root {\n\tstruct rb_root_cached href_root;\n\tstruct rb_root dirty_extent_root;\n\tspinlock_t lock;\n\tatomic_t num_entries;\n\tlong unsigned int num_heads;\n\tlong unsigned int num_heads_ready;\n\tu64 pending_csums;\n\tint flushing;\n\tu64 run_delayed_start;\n\tu64 qgroup_to_skip;\n};\n\nstruct btrfs_transaction {\n\tu64 transid;\n\tatomic_t num_extwriters;\n\tatomic_t num_writers;\n\trefcount_t use_count;\n\tlong unsigned int flags;\n\tenum btrfs_trans_state state;\n\tint aborted;\n\tstruct list_head list;\n\tstruct extent_io_tree dirty_pages;\n\ttime64_t start_time;\n\twait_queue_head_t writer_wait;\n\twait_queue_head_t commit_wait;\n\tstruct list_head pending_snapshots;\n\tstruct list_head dev_update_list;\n\tstruct list_head switch_commits;\n\tstruct list_head dirty_bgs;\n\tstruct list_head io_bgs;\n\tstruct list_head dropped_roots;\n\tstruct extent_io_tree pinned_extents;\n\tstruct mutex cache_write_mutex;\n\tspinlock_t dirty_bgs_lock;\n\tstruct list_head deleted_bgs;\n\tspinlock_t dropped_roots_lock;\n\tstruct btrfs_delayed_ref_root delayed_refs;\n\tstruct btrfs_fs_info *fs_info;\n\tatomic_t pending_ordered;\n\twait_queue_head_t pending_wait;\n};\n\nenum btrfs_chunk_allocation_policy {\n\tBTRFS_CHUNK_ALLOC_REGULAR = 0,\n};\n\nenum btrfs_read_policy {\n\tBTRFS_READ_POLICY_PID = 0,\n\tBTRFS_NR_READ_POLICY = 1,\n};\n\nstruct btrfs_fs_devices {\n\tu8 fsid[16];\n\tu8 metadata_uuid[16];\n\tbool fsid_change;\n\tstruct list_head fs_list;\n\tu64 num_devices;\n\tu64 open_devices;\n\tu64 rw_devices;\n\tu64 missing_devices;\n\tu64 total_rw_bytes;\n\tu64 total_devices;\n\tu64 latest_generation;\n\tstruct block_device *latest_bdev;\n\tstruct mutex device_list_mutex;\n\tstruct list_head devices;\n\tstruct list_head alloc_list;\n\tstruct list_head seed_list;\n\tbool seeding;\n\tint opened;\n\tbool rotating;\n\tstruct btrfs_fs_info *fs_info;\n\tstruct kobject fsid_kobj;\n\tstruct kobject *devices_kobj;\n\tstruct kobject *devinfo_kobj;\n\tstruct completion kobj_unregister;\n\tenum btrfs_chunk_allocation_policy chunk_alloc_policy;\n\tenum btrfs_read_policy read_policy;\n};\n\nstruct btrfs_balance_control {\n\tstruct btrfs_balance_args data;\n\tstruct btrfs_balance_args meta;\n\tstruct btrfs_balance_args sys;\n\tu64 flags;\n\tstruct btrfs_balance_progress stat;\n};\n\nstruct btrfs_delayed_root {\n\tspinlock_t lock;\n\tstruct list_head node_list;\n\tstruct list_head prepare_list;\n\tatomic_t items;\n\tatomic_t items_seq;\n\tint nodes;\n\twait_queue_head_t wait;\n};\n\nenum btrfs_reserve_flush_enum {\n\tBTRFS_RESERVE_NO_FLUSH = 0,\n\tBTRFS_RESERVE_FLUSH_LIMIT = 1,\n\tBTRFS_RESERVE_FLUSH_EVICT = 2,\n\tBTRFS_RESERVE_FLUSH_DATA = 3,\n\tBTRFS_RESERVE_FLUSH_FREE_SPACE_INODE = 4,\n\tBTRFS_RESERVE_FLUSH_ALL = 5,\n\tBTRFS_RESERVE_FLUSH_ALL_STEAL = 6,\n};\n\nenum btrfs_flush_state {\n\tFLUSH_DELAYED_ITEMS_NR = 1,\n\tFLUSH_DELAYED_ITEMS = 2,\n\tFLUSH_DELAYED_REFS_NR = 3,\n\tFLUSH_DELAYED_REFS = 4,\n\tFLUSH_DELALLOC = 5,\n\tFLUSH_DELALLOC_WAIT = 6,\n\tALLOC_CHUNK = 7,\n\tALLOC_CHUNK_FORCE = 8,\n\tRUN_DELAYED_IPUTS = 9,\n\tCOMMIT_TRANS = 10,\n};\n\nstruct btrfs_delayed_node {\n\tu64 inode_id;\n\tu64 bytes_reserved;\n\tstruct btrfs_root *root;\n\tstruct list_head n_list;\n\tstruct list_head p_list;\n\tstruct rb_root_cached ins_root;\n\tstruct rb_root_cached del_root;\n\tstruct mutex mutex;\n\tstruct btrfs_inode_item inode_item;\n\trefcount_t refs;\n\tu64 index_cnt;\n\tlong unsigned int flags;\n\tint count;\n};\n\nenum {\n\tBTRFS_ORDERED_IO_DONE = 0,\n\tBTRFS_ORDERED_COMPLETE = 1,\n\tBTRFS_ORDERED_NOCOW = 2,\n\tBTRFS_ORDERED_COMPRESSED = 3,\n\tBTRFS_ORDERED_PREALLOC = 4,\n\tBTRFS_ORDERED_DIRECT = 5,\n\tBTRFS_ORDERED_IOERR = 6,\n\tBTRFS_ORDERED_TRUNCATED = 7,\n\tBTRFS_ORDERED_REGULAR = 8,\n\tBTRFS_ORDERED_LOGGED = 9,\n\tBTRFS_ORDERED_LOGGED_CSUM = 10,\n\tBTRFS_ORDERED_PENDING = 11,\n};\n\nstruct btrfs_ordered_extent {\n\tu64 file_offset;\n\tu64 disk_bytenr;\n\tu64 num_bytes;\n\tu64 disk_num_bytes;\n\tu64 bytes_left;\n\tu64 outstanding_isize;\n\tu64 truncated_len;\n\tlong unsigned int flags;\n\tint compress_type;\n\tint qgroup_rsv;\n\trefcount_t refs;\n\tstruct inode *inode;\n\tstruct list_head list;\n\tstruct list_head log_list;\n\twait_queue_head_t wait;\n\tstruct rb_node rb_node;\n\tstruct list_head root_extent_list;\n\tstruct btrfs_work work;\n\tstruct completion completion;\n\tstruct btrfs_work flush_work;\n\tstruct list_head work_list;\n};\n\nstruct btrfs_delayed_ref_node {\n\tstruct rb_node ref_node;\n\tstruct list_head add_list;\n\tu64 bytenr;\n\tu64 num_bytes;\n\tu64 seq;\n\trefcount_t refs;\n\tint ref_mod;\n\tunsigned int action: 8;\n\tunsigned int type: 8;\n\tunsigned int is_head: 1;\n\tunsigned int in_tree: 1;\n};\n\nstruct btrfs_delayed_extent_op {\n\tstruct btrfs_disk_key key;\n\tu8 level;\n\tbool update_key;\n\tbool update_flags;\n\tbool is_data;\n\tu64 flags_to_set;\n};\n\nstruct btrfs_delayed_ref_head {\n\tu64 bytenr;\n\tu64 num_bytes;\n\trefcount_t refs;\n\tstruct mutex mutex;\n\tspinlock_t lock;\n\tstruct rb_root_cached ref_tree;\n\tstruct list_head ref_add_list;\n\tstruct rb_node href_node;\n\tstruct btrfs_delayed_extent_op *extent_op;\n\tint total_ref_mod;\n\tint ref_mod;\n\tunsigned int must_insert_reserved: 1;\n\tunsigned int is_data: 1;\n\tunsigned int is_system: 1;\n\tunsigned int processing: 1;\n};\n\nstruct btrfs_delayed_tree_ref {\n\tstruct btrfs_delayed_ref_node node;\n\tu64 root;\n\tu64 parent;\n\tint level;\n};\n\nstruct btrfs_delayed_data_ref {\n\tstruct btrfs_delayed_ref_node node;\n\tu64 root;\n\tu64 parent;\n\tu64 objectid;\n\tu64 offset;\n};\n\nstruct btrfs_trans_handle {\n\tu64 transid;\n\tu64 bytes_reserved;\n\tu64 chunk_bytes_reserved;\n\tlong unsigned int delayed_ref_updates;\n\tstruct btrfs_transaction *transaction;\n\tstruct btrfs_block_rsv *block_rsv;\n\tstruct btrfs_block_rsv *orig_rsv;\n\trefcount_t use_count;\n\tunsigned int type;\n\tshort int aborted;\n\tbool adding_csums;\n\tbool allocating_chunk;\n\tbool can_flush_pending_bgs;\n\tbool reloc_reserved;\n\tbool dirty;\n\tstruct btrfs_root *root;\n\tstruct btrfs_fs_info *fs_info;\n\tstruct list_head new_bgs;\n};\n\nstruct rcu_string {\n\tstruct callback_head rcu;\n\tchar str[0];\n};\n\nstruct btrfs_zoned_device_info {\n\tu64 zone_size;\n\tu8 zone_size_shift;\n\tu64 max_zone_append_size;\n\tu32 nr_zones;\n\tlong unsigned int *seq_zones;\n\tlong unsigned int *empty_zones;\n\tstruct blk_zone sb_zones[6];\n};\n\nstruct btrfs_device_info {\n\tstruct btrfs_device *dev;\n\tu64 dev_offset;\n\tu64 max_avail;\n\tu64 total_avail;\n};\n\nstruct btrfs_raid_attr {\n\tu8 sub_stripes;\n\tu8 dev_stripes;\n\tu8 devs_max;\n\tu8 devs_min;\n\tu8 tolerated_failures;\n\tu8 devs_increment;\n\tu8 ncopies;\n\tu8 nparity;\n\tu8 mindev_error;\n\tconst char raid_name[8];\n\tu64 bg_flag;\n};\n\nenum btrfs_compression_type {\n\tBTRFS_COMPRESS_NONE = 0,\n\tBTRFS_COMPRESS_ZLIB = 1,\n\tBTRFS_COMPRESS_LZO = 2,\n\tBTRFS_COMPRESS_ZSTD = 3,\n\tBTRFS_NR_COMPRESS_TYPES = 4,\n};\n\nenum btrfs_trim_state {\n\tBTRFS_TRIM_STATE_UNTRIMMED = 0,\n\tBTRFS_TRIM_STATE_TRIMMED = 1,\n\tBTRFS_TRIM_STATE_TRIMMING = 2,\n};\n\nstruct btrfs_free_space {\n\tstruct rb_node offset_index;\n\tu64 offset;\n\tu64 bytes;\n\tu64 max_extent_size;\n\tlong unsigned int *bitmap;\n\tstruct list_head list;\n\tenum btrfs_trim_state trim_state;\n\ts32 bitmap_extents;\n};\n\nstruct btrfs_free_space_op;\n\nstruct btrfs_free_space_ctl {\n\tspinlock_t tree_lock;\n\tstruct rb_root free_space_offset;\n\tu64 free_space;\n\tint extents_thresh;\n\tint free_extents;\n\tint total_bitmaps;\n\tint unit;\n\tu64 start;\n\ts32 discardable_extents[2];\n\ts64 discardable_bytes[2];\n\tconst struct btrfs_free_space_op *op;\n\tvoid *private;\n\tstruct mutex cache_writeout_mutex;\n\tstruct list_head trimming_ranges;\n};\n\nstruct btrfs_free_space_op {\n\tbool (*use_bitmap)(struct btrfs_free_space_ctl *, struct btrfs_free_space *);\n};\n\nstruct extent_inode_elem;\n\nstruct prelim_ref {\n\tstruct rb_node rbnode;\n\tu64 root_id;\n\tstruct btrfs_key key_for_search;\n\tint level;\n\tint count;\n\tstruct extent_inode_elem *inode_list;\n\tu64 parent;\n\tu64 wanted_disk_byte;\n};\n\nstruct btrfs_caching_control {\n\tstruct list_head list;\n\tstruct mutex mutex;\n\twait_queue_head_t wait;\n\tstruct btrfs_work work;\n\tstruct btrfs_block_group *block_group;\n\tu64 progress;\n\trefcount_t count;\n};\n\nstruct btrfs_qgroup_extent_record {\n\tstruct rb_node node;\n\tu64 bytenr;\n\tu64 num_bytes;\n\tu32 data_rsv;\n\tu64 data_rsv_refroot;\n\tstruct ulist *old_roots;\n};\n\nenum btrfs_qgroup_rsv_type {\n\tBTRFS_QGROUP_RSV_DATA = 0,\n\tBTRFS_QGROUP_RSV_META_PERTRANS = 1,\n\tBTRFS_QGROUP_RSV_META_PREALLOC = 2,\n\tBTRFS_QGROUP_RSV_LAST = 3,\n};\n\nstruct btrfs_qgroup_rsv {\n\tu64 values[3];\n};\n\nstruct btrfs_qgroup {\n\tu64 qgroupid;\n\tu64 rfer;\n\tu64 rfer_cmpr;\n\tu64 excl;\n\tu64 excl_cmpr;\n\tu64 lim_flags;\n\tu64 max_rfer;\n\tu64 max_excl;\n\tu64 rsv_rfer;\n\tu64 rsv_excl;\n\tstruct btrfs_qgroup_rsv rsv;\n\tstruct list_head groups;\n\tstruct list_head members;\n\tstruct list_head dirty;\n\tstruct rb_node node;\n\tu64 old_refcnt;\n\tu64 new_refcnt;\n\tstruct kobject kobj;\n};\n\nstruct trace_event_raw_btrfs_transaction_commit {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 generation;\n\tu64 root_objectid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__inode {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 ino;\n\tu64 blocks;\n\tu64 disk_i_size;\n\tu64 generation;\n\tu64 last_trans;\n\tu64 logged_trans;\n\tu64 root_objectid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_get_extent {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 root_objectid;\n\tu64 ino;\n\tu64 start;\n\tu64 len;\n\tu64 orig_start;\n\tu64 block_start;\n\tu64 block_len;\n\tlong unsigned int flags;\n\tint refs;\n\tunsigned int compress_type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_handle_em_exist {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 e_start;\n\tu64 e_len;\n\tu64 map_start;\n\tu64 map_len;\n\tu64 start;\n\tu64 len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__file_extent_item_regular {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 root_obj;\n\tu64 ino;\n\tloff_t isize;\n\tu64 disk_isize;\n\tu64 num_bytes;\n\tu64 ram_bytes;\n\tu64 disk_bytenr;\n\tu64 disk_num_bytes;\n\tu64 extent_offset;\n\tu8 extent_type;\n\tu8 compression;\n\tu64 extent_start;\n\tu64 extent_end;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__file_extent_item_inline {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 root_obj;\n\tu64 ino;\n\tloff_t isize;\n\tu64 disk_isize;\n\tu8 extent_type;\n\tu8 compression;\n\tu64 extent_start;\n\tu64 extent_end;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__ordered_extent {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 ino;\n\tu64 file_offset;\n\tu64 start;\n\tu64 len;\n\tu64 disk_len;\n\tu64 bytes_left;\n\tlong unsigned int flags;\n\tint compress_type;\n\tint refs;\n\tu64 root_objectid;\n\tu64 truncated_len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__writepage {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 ino;\n\tlong unsigned int index;\n\tlong int nr_to_write;\n\tlong int pages_skipped;\n\tloff_t range_start;\n\tloff_t range_end;\n\tchar for_kupdate;\n\tchar for_reclaim;\n\tchar range_cyclic;\n\tlong unsigned int writeback_index;\n\tu64 root_objectid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_writepage_end_io_hook {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 ino;\n\tlong unsigned int index;\n\tu64 start;\n\tu64 end;\n\tint uptodate;\n\tu64 root_objectid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_sync_file {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 ino;\n\tu64 parent;\n\tint datasync;\n\tu64 root_objectid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_sync_fs {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tint wait;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_add_block_group {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 offset;\n\tu64 size;\n\tu64 flags;\n\tu64 bytes_used;\n\tu64 bytes_super;\n\tint create;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_delayed_tree_ref {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 bytenr;\n\tu64 num_bytes;\n\tint action;\n\tu64 parent;\n\tu64 ref_root;\n\tint level;\n\tint type;\n\tu64 seq;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_delayed_data_ref {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 bytenr;\n\tu64 num_bytes;\n\tint action;\n\tu64 parent;\n\tu64 ref_root;\n\tu64 owner;\n\tu64 offset;\n\tint type;\n\tu64 seq;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_delayed_ref_head {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 bytenr;\n\tu64 num_bytes;\n\tint action;\n\tint is_data;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__chunk {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tint num_stripes;\n\tu64 type;\n\tint sub_stripes;\n\tu64 offset;\n\tu64 size;\n\tu64 root_objectid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_cow_block {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 root_objectid;\n\tu64 buf_start;\n\tint refs;\n\tu64 cow_start;\n\tint buf_level;\n\tint cow_level;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_space_reservation {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu32 __data_loc_type;\n\tu64 val;\n\tu64 bytes;\n\tint reserve;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_trigger_flush {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 flags;\n\tu64 bytes;\n\tint flush;\n\tu32 __data_loc_reason;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_flush_space {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 flags;\n\tu64 num_bytes;\n\tint state;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__reserved_extent {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 start;\n\tu64 len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_find_free_extent {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 root_objectid;\n\tu64 num_bytes;\n\tu64 empty_size;\n\tu64 data;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__reserve_extent {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 bg_objectid;\n\tu64 flags;\n\tu64 start;\n\tu64 len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_find_cluster {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 bg_objectid;\n\tu64 flags;\n\tu64 start;\n\tu64 bytes;\n\tu64 empty_size;\n\tu64 min_bytes;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_failed_cluster_setup {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 bg_objectid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_setup_cluster {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 bg_objectid;\n\tu64 flags;\n\tu64 start;\n\tu64 max_size;\n\tu64 size;\n\tint bitmap;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_alloc_extent_state {\n\tstruct trace_entry ent;\n\tconst struct extent_state *state;\n\tgfp_t mask;\n\tconst void *ip;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_free_extent_state {\n\tstruct trace_entry ent;\n\tconst struct extent_state *state;\n\tconst void *ip;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__work {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tconst void *work;\n\tconst void *wq;\n\tconst void *func;\n\tconst void *ordered_func;\n\tconst void *ordered_free;\n\tconst void *normal_work;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__work__done {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tconst void *wtag;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__workqueue {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tconst void *wq;\n\tu32 __data_loc_name;\n\tint high;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__workqueue_done {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tconst void *wq;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__qgroup_rsv_data {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 rootid;\n\tu64 ino;\n\tu64 start;\n\tu64 len;\n\tu64 reserved;\n\tint op;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_qgroup_extent {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 bytenr;\n\tu64 num_bytes;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_qgroup_num_dirty_extents {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 transid;\n\tu64 num_dirty_extents;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_qgroup_account_extent {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 transid;\n\tu64 bytenr;\n\tu64 num_bytes;\n\tu64 nr_old_roots;\n\tu64 nr_new_roots;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_qgroup_update_counters {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 qgid;\n\tu64 old_rfer;\n\tu64 old_excl;\n\tu64 cur_old_count;\n\tu64 cur_new_count;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_qgroup_update_reserve {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 qgid;\n\tu64 cur_reserved;\n\ts64 diff;\n\tint type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_qgroup_meta_reserve {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 refroot;\n\ts64 diff;\n\tint type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_qgroup_meta_convert {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 refroot;\n\ts64 diff;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_qgroup_meta_free_all_pertrans {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 refroot;\n\ts64 diff;\n\tint type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__prelim_ref {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 root_id;\n\tu64 objectid;\n\tu8 type;\n\tu64 offset;\n\tint level;\n\tint old_count;\n\tu64 parent;\n\tu64 bytenr;\n\tint mod_count;\n\tu64 tree_size;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_inode_mod_outstanding_extents {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 root_objectid;\n\tu64 ino;\n\tint mod;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__block_group {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 bytenr;\n\tu64 len;\n\tu64 used;\n\tu64 flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_set_extent_bit {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tunsigned int owner;\n\tu64 ino;\n\tu64 rootid;\n\tu64 start;\n\tu64 len;\n\tunsigned int set_bits;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_clear_extent_bit {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tunsigned int owner;\n\tu64 ino;\n\tu64 rootid;\n\tu64 start;\n\tu64 len;\n\tunsigned int clear_bits;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_convert_extent_bit {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tunsigned int owner;\n\tu64 ino;\n\tu64 rootid;\n\tu64 start;\n\tu64 len;\n\tunsigned int set_bits;\n\tunsigned int clear_bits;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_sleep_tree_lock {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 block;\n\tu64 generation;\n\tu64 start_ns;\n\tu64 end_ns;\n\tu64 diff_ns;\n\tu64 owner;\n\tint is_log_tree;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs_locking_events {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 block;\n\tu64 generation;\n\tu64 owner;\n\tint is_log_tree;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_btrfs__space_info_update {\n\tstruct trace_entry ent;\n\tu8 fsid[16];\n\tu64 type;\n\tu64 old;\n\ts64 diff;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_btrfs_transaction_commit {};\n\nstruct trace_event_data_offsets_btrfs__inode {};\n\nstruct trace_event_data_offsets_btrfs_get_extent {};\n\nstruct trace_event_data_offsets_btrfs_handle_em_exist {};\n\nstruct trace_event_data_offsets_btrfs__file_extent_item_regular {};\n\nstruct trace_event_data_offsets_btrfs__file_extent_item_inline {};\n\nstruct trace_event_data_offsets_btrfs__ordered_extent {};\n\nstruct trace_event_data_offsets_btrfs__writepage {};\n\nstruct trace_event_data_offsets_btrfs_writepage_end_io_hook {};\n\nstruct trace_event_data_offsets_btrfs_sync_file {};\n\nstruct trace_event_data_offsets_btrfs_sync_fs {};\n\nstruct trace_event_data_offsets_btrfs_add_block_group {};\n\nstruct trace_event_data_offsets_btrfs_delayed_tree_ref {};\n\nstruct trace_event_data_offsets_btrfs_delayed_data_ref {};\n\nstruct trace_event_data_offsets_btrfs_delayed_ref_head {};\n\nstruct trace_event_data_offsets_btrfs__chunk {};\n\nstruct trace_event_data_offsets_btrfs_cow_block {};\n\nstruct trace_event_data_offsets_btrfs_space_reservation {\n\tu32 type;\n};\n\nstruct trace_event_data_offsets_btrfs_trigger_flush {\n\tu32 reason;\n};\n\nstruct trace_event_data_offsets_btrfs_flush_space {};\n\nstruct trace_event_data_offsets_btrfs__reserved_extent {};\n\nstruct trace_event_data_offsets_find_free_extent {};\n\nstruct trace_event_data_offsets_btrfs__reserve_extent {};\n\nstruct trace_event_data_offsets_btrfs_find_cluster {};\n\nstruct trace_event_data_offsets_btrfs_failed_cluster_setup {};\n\nstruct trace_event_data_offsets_btrfs_setup_cluster {};\n\nstruct trace_event_data_offsets_alloc_extent_state {};\n\nstruct trace_event_data_offsets_free_extent_state {};\n\nstruct trace_event_data_offsets_btrfs__work {};\n\nstruct trace_event_data_offsets_btrfs__work__done {};\n\nstruct trace_event_data_offsets_btrfs__workqueue {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_btrfs__workqueue_done {};\n\nstruct trace_event_data_offsets_btrfs__qgroup_rsv_data {};\n\nstruct trace_event_data_offsets_btrfs_qgroup_extent {};\n\nstruct trace_event_data_offsets_qgroup_num_dirty_extents {};\n\nstruct trace_event_data_offsets_btrfs_qgroup_account_extent {};\n\nstruct trace_event_data_offsets_qgroup_update_counters {};\n\nstruct trace_event_data_offsets_qgroup_update_reserve {};\n\nstruct trace_event_data_offsets_qgroup_meta_reserve {};\n\nstruct trace_event_data_offsets_qgroup_meta_convert {};\n\nstruct trace_event_data_offsets_qgroup_meta_free_all_pertrans {};\n\nstruct trace_event_data_offsets_btrfs__prelim_ref {};\n\nstruct trace_event_data_offsets_btrfs_inode_mod_outstanding_extents {};\n\nstruct trace_event_data_offsets_btrfs__block_group {};\n\nstruct trace_event_data_offsets_btrfs_set_extent_bit {};\n\nstruct trace_event_data_offsets_btrfs_clear_extent_bit {};\n\nstruct trace_event_data_offsets_btrfs_convert_extent_bit {};\n\nstruct trace_event_data_offsets_btrfs_sleep_tree_lock {};\n\nstruct trace_event_data_offsets_btrfs_locking_events {};\n\nstruct trace_event_data_offsets_btrfs__space_info_update {};\n\ntypedef void (*btf_trace_btrfs_transaction_commit)(void *, const struct btrfs_root *);\n\ntypedef void (*btf_trace_btrfs_inode_new)(void *, const struct inode *);\n\ntypedef void (*btf_trace_btrfs_inode_request)(void *, const struct inode *);\n\ntypedef void (*btf_trace_btrfs_inode_evict)(void *, const struct inode *);\n\ntypedef void (*btf_trace_btrfs_get_extent)(void *, const struct btrfs_root *, const struct btrfs_inode *, const struct extent_map *);\n\ntypedef void (*btf_trace_btrfs_handle_em_exist)(void *, const struct btrfs_fs_info *, const struct extent_map *, const struct extent_map *, u64, u64);\n\ntypedef void (*btf_trace_btrfs_get_extent_show_fi_regular)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, u64);\n\ntypedef void (*btf_trace_btrfs_truncate_show_fi_regular)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, u64);\n\ntypedef void (*btf_trace_btrfs_get_extent_show_fi_inline)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, int, u64);\n\ntypedef void (*btf_trace_btrfs_truncate_show_fi_inline)(void *, const struct btrfs_inode *, const struct extent_buffer *, const struct btrfs_file_extent_item *, int, u64);\n\ntypedef void (*btf_trace_btrfs_ordered_extent_add)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);\n\ntypedef void (*btf_trace_btrfs_ordered_extent_remove)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);\n\ntypedef void (*btf_trace_btrfs_ordered_extent_start)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);\n\ntypedef void (*btf_trace_btrfs_ordered_extent_put)(void *, const struct btrfs_inode *, const struct btrfs_ordered_extent *);\n\ntypedef void (*btf_trace___extent_writepage)(void *, const struct page *, const struct inode *, const struct writeback_control *);\n\ntypedef void (*btf_trace_btrfs_writepage_end_io_hook)(void *, const struct page *, u64, u64, int);\n\ntypedef void (*btf_trace_btrfs_sync_file)(void *, const struct file *, int);\n\ntypedef void (*btf_trace_btrfs_sync_fs)(void *, const struct btrfs_fs_info *, int);\n\ntypedef void (*btf_trace_btrfs_add_block_group)(void *, const struct btrfs_fs_info *, const struct btrfs_block_group *, int);\n\ntypedef void (*btf_trace_add_delayed_tree_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_tree_ref *, int);\n\ntypedef void (*btf_trace_run_delayed_tree_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_tree_ref *, int);\n\ntypedef void (*btf_trace_add_delayed_data_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_data_ref *, int);\n\ntypedef void (*btf_trace_run_delayed_data_ref)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_node *, const struct btrfs_delayed_data_ref *, int);\n\ntypedef void (*btf_trace_add_delayed_ref_head)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_head *, int);\n\ntypedef void (*btf_trace_run_delayed_ref_head)(void *, const struct btrfs_fs_info *, const struct btrfs_delayed_ref_head *, int);\n\ntypedef void (*btf_trace_btrfs_chunk_alloc)(void *, const struct btrfs_fs_info *, const struct map_lookup *, u64, u64);\n\ntypedef void (*btf_trace_btrfs_chunk_free)(void *, const struct btrfs_fs_info *, const struct map_lookup *, u64, u64);\n\ntypedef void (*btf_trace_btrfs_cow_block)(void *, const struct btrfs_root *, const struct extent_buffer *, const struct extent_buffer *);\n\ntypedef void (*btf_trace_btrfs_space_reservation)(void *, const struct btrfs_fs_info *, const char *, u64, u64, int);\n\ntypedef void (*btf_trace_btrfs_trigger_flush)(void *, const struct btrfs_fs_info *, u64, u64, int, const char *);\n\ntypedef void (*btf_trace_btrfs_flush_space)(void *, const struct btrfs_fs_info *, u64, u64, int, int);\n\ntypedef void (*btf_trace_btrfs_reserved_extent_alloc)(void *, const struct btrfs_fs_info *, u64, u64);\n\ntypedef void (*btf_trace_btrfs_reserved_extent_free)(void *, const struct btrfs_fs_info *, u64, u64);\n\ntypedef void (*btf_trace_find_free_extent)(void *, const struct btrfs_root *, u64, u64, u64);\n\ntypedef void (*btf_trace_btrfs_reserve_extent)(void *, const struct btrfs_block_group *, u64, u64);\n\ntypedef void (*btf_trace_btrfs_reserve_extent_cluster)(void *, const struct btrfs_block_group *, u64, u64);\n\ntypedef void (*btf_trace_btrfs_find_cluster)(void *, const struct btrfs_block_group *, u64, u64, u64, u64);\n\ntypedef void (*btf_trace_btrfs_failed_cluster_setup)(void *, const struct btrfs_block_group *);\n\ntypedef void (*btf_trace_btrfs_setup_cluster)(void *, const struct btrfs_block_group *, const struct btrfs_free_cluster *, u64, int);\n\ntypedef void (*btf_trace_alloc_extent_state)(void *, const struct extent_state *, gfp_t, long unsigned int);\n\ntypedef void (*btf_trace_free_extent_state)(void *, const struct extent_state *, long unsigned int);\n\ntypedef void (*btf_trace_btrfs_work_queued)(void *, const struct btrfs_work *);\n\ntypedef void (*btf_trace_btrfs_work_sched)(void *, const struct btrfs_work *);\n\ntypedef void (*btf_trace_btrfs_all_work_done)(void *, const struct btrfs_fs_info *, const void *);\n\ntypedef void (*btf_trace_btrfs_ordered_sched)(void *, const struct btrfs_work *);\n\ntypedef void (*btf_trace_btrfs_workqueue_alloc)(void *, const struct __btrfs_workqueue *, const char *, int);\n\ntypedef void (*btf_trace_btrfs_workqueue_destroy)(void *, const struct __btrfs_workqueue *);\n\ntypedef void (*btf_trace_btrfs_qgroup_reserve_data)(void *, const struct inode *, u64, u64, u64, int);\n\ntypedef void (*btf_trace_btrfs_qgroup_release_data)(void *, const struct inode *, u64, u64, u64, int);\n\ntypedef void (*btf_trace_btrfs_qgroup_account_extents)(void *, const struct btrfs_fs_info *, const struct btrfs_qgroup_extent_record *);\n\ntypedef void (*btf_trace_btrfs_qgroup_trace_extent)(void *, const struct btrfs_fs_info *, const struct btrfs_qgroup_extent_record *);\n\ntypedef void (*btf_trace_qgroup_num_dirty_extents)(void *, const struct btrfs_fs_info *, u64, u64);\n\ntypedef void (*btf_trace_btrfs_qgroup_account_extent)(void *, const struct btrfs_fs_info *, u64, u64, u64, u64, u64);\n\ntypedef void (*btf_trace_qgroup_update_counters)(void *, const struct btrfs_fs_info *, const struct btrfs_qgroup *, u64, u64);\n\ntypedef void (*btf_trace_qgroup_update_reserve)(void *, struct btrfs_fs_info *, struct btrfs_qgroup *, s64, int);\n\ntypedef void (*btf_trace_qgroup_meta_reserve)(void *, struct btrfs_root *, s64, int);\n\ntypedef void (*btf_trace_qgroup_meta_convert)(void *, struct btrfs_root *, s64);\n\ntypedef void (*btf_trace_qgroup_meta_free_all_pertrans)(void *, struct btrfs_root *);\n\ntypedef void (*btf_trace_btrfs_prelim_ref_merge)(void *, const struct btrfs_fs_info *, const struct prelim_ref *, const struct prelim_ref *, u64);\n\ntypedef void (*btf_trace_btrfs_prelim_ref_insert)(void *, const struct btrfs_fs_info *, const struct prelim_ref *, const struct prelim_ref *, u64);\n\ntypedef void (*btf_trace_btrfs_inode_mod_outstanding_extents)(void *, const struct btrfs_root *, u64, int);\n\ntypedef void (*btf_trace_btrfs_remove_block_group)(void *, const struct btrfs_block_group *);\n\ntypedef void (*btf_trace_btrfs_add_unused_block_group)(void *, const struct btrfs_block_group *);\n\ntypedef void (*btf_trace_btrfs_skip_unused_block_group)(void *, const struct btrfs_block_group *);\n\ntypedef void (*btf_trace_btrfs_set_extent_bit)(void *, const struct extent_io_tree *, u64, u64, unsigned int);\n\ntypedef void (*btf_trace_btrfs_clear_extent_bit)(void *, const struct extent_io_tree *, u64, u64, unsigned int);\n\ntypedef void (*btf_trace_btrfs_convert_extent_bit)(void *, const struct extent_io_tree *, u64, u64, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_btrfs_tree_read_lock)(void *, const struct extent_buffer *, u64);\n\ntypedef void (*btf_trace_btrfs_tree_lock)(void *, const struct extent_buffer *, u64);\n\ntypedef void (*btf_trace_btrfs_tree_unlock)(void *, const struct extent_buffer *);\n\ntypedef void (*btf_trace_btrfs_tree_read_unlock)(void *, const struct extent_buffer *);\n\ntypedef void (*btf_trace_btrfs_tree_read_unlock_blocking)(void *, const struct extent_buffer *);\n\ntypedef void (*btf_trace_btrfs_set_lock_blocking_read)(void *, const struct extent_buffer *);\n\ntypedef void (*btf_trace_btrfs_set_lock_blocking_write)(void *, const struct extent_buffer *);\n\ntypedef void (*btf_trace_btrfs_try_tree_read_lock)(void *, const struct extent_buffer *);\n\ntypedef void (*btf_trace_btrfs_try_tree_write_lock)(void *, const struct extent_buffer *);\n\ntypedef void (*btf_trace_btrfs_tree_read_lock_atomic)(void *, const struct extent_buffer *);\n\ntypedef void (*btf_trace_update_bytes_may_use)(void *, const struct btrfs_fs_info *, const struct btrfs_space_info *, u64, s64);\n\ntypedef void (*btf_trace_update_bytes_pinned)(void *, const struct btrfs_fs_info *, const struct btrfs_space_info *, u64, s64);\n\nenum {\n\tOpt_acl___2 = 0,\n\tOpt_noacl___2 = 1,\n\tOpt_clear_cache = 2,\n\tOpt_commit_interval = 3,\n\tOpt_compress = 4,\n\tOpt_compress_force = 5,\n\tOpt_compress_force_type = 6,\n\tOpt_compress_type = 7,\n\tOpt_degraded = 8,\n\tOpt_device = 9,\n\tOpt_fatal_errors = 10,\n\tOpt_flushoncommit = 11,\n\tOpt_noflushoncommit = 12,\n\tOpt_max_inline = 13,\n\tOpt_barrier___2 = 14,\n\tOpt_nobarrier___2 = 15,\n\tOpt_datacow = 16,\n\tOpt_nodatacow = 17,\n\tOpt_datasum = 18,\n\tOpt_nodatasum = 19,\n\tOpt_defrag = 20,\n\tOpt_nodefrag = 21,\n\tOpt_discard___2 = 22,\n\tOpt_nodiscard___2 = 23,\n\tOpt_discard_mode = 24,\n\tOpt_norecovery = 25,\n\tOpt_ratio = 26,\n\tOpt_rescan_uuid_tree = 27,\n\tOpt_skip_balance = 28,\n\tOpt_space_cache = 29,\n\tOpt_no_space_cache = 30,\n\tOpt_space_cache_version = 31,\n\tOpt_ssd = 32,\n\tOpt_nossd = 33,\n\tOpt_ssd_spread = 34,\n\tOpt_nossd_spread = 35,\n\tOpt_subvol = 36,\n\tOpt_subvol_empty = 37,\n\tOpt_subvolid = 38,\n\tOpt_thread_pool = 39,\n\tOpt_treelog = 40,\n\tOpt_notreelog = 41,\n\tOpt_user_subvol_rm_allowed = 42,\n\tOpt_rescue = 43,\n\tOpt_usebackuproot = 44,\n\tOpt_nologreplay = 45,\n\tOpt_ignorebadroots = 46,\n\tOpt_ignoredatacsums = 47,\n\tOpt_rescue_all = 48,\n\tOpt_recovery = 49,\n\tOpt_inode_cache = 50,\n\tOpt_noinode_cache = 51,\n\tOpt_check_integrity = 52,\n\tOpt_check_integrity_including_extent_data = 53,\n\tOpt_check_integrity_print_mask = 54,\n\tOpt_enospc_debug = 55,\n\tOpt_noenospc_debug = 56,\n\tOpt_err___5 = 57,\n};\n\nenum btrfs_csum_type {\n\tBTRFS_CSUM_TYPE_CRC32 = 0,\n\tBTRFS_CSUM_TYPE_XXHASH = 1,\n\tBTRFS_CSUM_TYPE_SHA256 = 2,\n\tBTRFS_CSUM_TYPE_BLAKE2 = 3,\n};\n\nenum {\n\tEXTENT_BUFFER_UPTODATE = 0,\n\tEXTENT_BUFFER_DIRTY = 1,\n\tEXTENT_BUFFER_CORRUPT = 2,\n\tEXTENT_BUFFER_READAHEAD = 3,\n\tEXTENT_BUFFER_TREE_REF = 4,\n\tEXTENT_BUFFER_STALE = 5,\n\tEXTENT_BUFFER_WRITEBACK = 6,\n\tEXTENT_BUFFER_READ_ERR = 7,\n\tEXTENT_BUFFER_UNMAPPED = 8,\n\tEXTENT_BUFFER_IN_TREE = 9,\n\tEXTENT_BUFFER_WRITE_ERR = 10,\n};\n\nstruct btrfs_key_ptr {\n\tstruct btrfs_disk_key key;\n\t__le64 blockptr;\n\t__le64 generation;\n} __attribute__((packed));\n\nenum {\n\tREADA_NONE = 0,\n\tREADA_BACK = 1,\n\tREADA_FORWARD = 2,\n};\n\nstruct seq_list {\n\tstruct list_head list;\n\tu64 seq;\n};\n\nenum {\n\tBTRFS_ROOT_IN_TRANS_SETUP = 0,\n\tBTRFS_ROOT_SHAREABLE = 1,\n\tBTRFS_ROOT_TRACK_DIRTY = 2,\n\tBTRFS_ROOT_IN_RADIX = 3,\n\tBTRFS_ROOT_ORPHAN_ITEM_INSERTED = 4,\n\tBTRFS_ROOT_DEFRAG_RUNNING = 5,\n\tBTRFS_ROOT_FORCE_COW = 6,\n\tBTRFS_ROOT_MULTI_LOG_TASKS = 7,\n\tBTRFS_ROOT_DIRTY = 8,\n\tBTRFS_ROOT_DELETING = 9,\n\tBTRFS_ROOT_DEAD_RELOC_TREE = 10,\n\tBTRFS_ROOT_DEAD_TREE = 11,\n\tBTRFS_ROOT_HAS_LOG_TREE = 12,\n\tBTRFS_ROOT_QGROUP_FLUSHING = 13,\n};\n\nstruct btrfs_map_token {\n\tstruct extent_buffer *eb;\n\tchar *kaddr;\n\tlong unsigned int offset;\n};\n\nstruct btrfs_csums {\n\tu16 size;\n\tconst char name[10];\n\tconst char driver[12];\n};\n\nenum mod_log_op {\n\tMOD_LOG_KEY_REPLACE = 0,\n\tMOD_LOG_KEY_ADD = 1,\n\tMOD_LOG_KEY_REMOVE = 2,\n\tMOD_LOG_KEY_REMOVE_WHILE_FREEING = 3,\n\tMOD_LOG_KEY_REMOVE_WHILE_MOVING = 4,\n\tMOD_LOG_MOVE_KEYS = 5,\n\tMOD_LOG_ROOT_REPLACE = 6,\n};\n\nstruct tree_mod_root {\n\tu64 logical;\n\tu8 level;\n};\n\nstruct tree_mod_elem {\n\tstruct rb_node node;\n\tu64 logical;\n\tu64 seq;\n\tenum mod_log_op op;\n\tint slot;\n\tu64 generation;\n\tstruct btrfs_disk_key key;\n\tu64 blockptr;\n\tstruct {\n\t\tint dst_slot;\n\t\tint nr_items;\n\t} move;\n\tstruct tree_mod_root old_root;\n};\n\nstruct btrfs_extent_item {\n\t__le64 refs;\n\t__le64 generation;\n\t__le64 flags;\n};\n\nstruct btrfs_tree_block_info {\n\tstruct btrfs_disk_key key;\n\t__u8 level;\n} __attribute__((packed));\n\nstruct btrfs_extent_data_ref {\n\t__le64 root;\n\t__le64 objectid;\n\t__le64 offset;\n\t__le32 count;\n} __attribute__((packed));\n\nstruct btrfs_shared_data_ref {\n\t__le32 count;\n};\n\nstruct btrfs_extent_inline_ref {\n\t__u8 type;\n\t__le64 offset;\n} __attribute__((packed));\n\nstruct extent_changeset {\n\tunsigned int bytes_changed;\n\tstruct ulist range_changed;\n};\n\nenum btrfs_caching_type {\n\tBTRFS_CACHE_NO = 0,\n\tBTRFS_CACHE_STARTED = 1,\n\tBTRFS_CACHE_FAST = 2,\n\tBTRFS_CACHE_FINISHED = 3,\n\tBTRFS_CACHE_ERROR = 4,\n};\n\nenum btrfs_inline_ref_type {\n\tBTRFS_REF_TYPE_INVALID = 0,\n\tBTRFS_REF_TYPE_BLOCK = 1,\n\tBTRFS_REF_TYPE_DATA = 2,\n\tBTRFS_REF_TYPE_ANY = 3,\n};\n\nenum btrfs_ref_type {\n\tBTRFS_REF_NOT_SET = 0,\n\tBTRFS_REF_DATA = 1,\n\tBTRFS_REF_METADATA = 2,\n\tBTRFS_REF_LAST = 3,\n};\n\nstruct btrfs_data_ref {\n\tu64 ref_root;\n\tu64 ino;\n\tu64 offset;\n};\n\nstruct btrfs_tree_ref {\n\tint level;\n\tu64 root;\n};\n\nstruct btrfs_ref {\n\tenum btrfs_ref_type type;\n\tint action;\n\tbool skip_qgroup;\n\tu64 real_root;\n\tu64 bytenr;\n\tu64 len;\n\tu64 parent;\n\tunion {\n\t\tstruct btrfs_data_ref data_ref;\n\t\tstruct btrfs_tree_ref tree_ref;\n\t};\n};\n\nstruct btrfs_bio {\n\trefcount_t refs;\n\tatomic_t stripes_pending;\n\tstruct btrfs_fs_info *fs_info;\n\tu64 map_type;\n\tbio_end_io_t *end_io;\n\tstruct bio *orig_bio;\n\tvoid *private;\n\tatomic_t error;\n\tint max_errors;\n\tint num_stripes;\n\tint mirror_num;\n\tint num_tgtdevs;\n\tint *tgtdev_map;\n\tu64 *raid_map;\n\tstruct btrfs_bio_stripe stripes[0];\n};\n\nenum btrfs_map_op {\n\tBTRFS_MAP_READ = 0,\n\tBTRFS_MAP_WRITE = 1,\n\tBTRFS_MAP_DISCARD = 2,\n\tBTRFS_MAP_GET_READ_MIRRORS = 3,\n};\n\nenum btrfs_chunk_alloc_enum {\n\tCHUNK_ALLOC_NO_FORCE = 0,\n\tCHUNK_ALLOC_LIMITED = 1,\n\tCHUNK_ALLOC_FORCE = 2,\n};\n\nenum btrfs_loop_type {\n\tLOOP_CACHING_NOWAIT = 0,\n\tLOOP_CACHING_WAIT = 1,\n\tLOOP_ALLOC_CHUNK = 2,\n\tLOOP_NO_EMPTY_SIZE = 3,\n};\n\nenum btrfs_extent_allocation_policy {\n\tBTRFS_EXTENT_ALLOC_CLUSTERED = 0,\n};\n\nstruct find_free_extent_ctl {\n\tu64 num_bytes;\n\tu64 empty_size;\n\tu64 flags;\n\tint delalloc;\n\tu64 search_start;\n\tu64 empty_cluster;\n\tstruct btrfs_free_cluster *last_ptr;\n\tbool use_cluster;\n\tbool have_caching_bg;\n\tbool orig_have_caching_bg;\n\tint index;\n\tint loop;\n\tbool retry_clustered;\n\tbool retry_unclustered;\n\tint cached;\n\tu64 max_extent_size;\n\tu64 total_free_space;\n\tu64 found_offset;\n\tu64 hint_byte;\n\tenum btrfs_extent_allocation_policy policy;\n};\n\nstruct walk_control {\n\tu64 refs[8];\n\tu64 flags[8];\n\tstruct btrfs_key update_progress;\n\tstruct btrfs_key drop_progress;\n\tshort: 16;\n\tint drop_level;\n\tint stage;\n\tint level;\n\tint shared_level;\n\tint update_ref;\n\tint keep_locks;\n\tint reada_slot;\n\tint reada_count;\n\tint restarted;\n} __attribute__((packed));\n\nstruct btrfs_stripe {\n\t__le64 devid;\n\t__le64 offset;\n\t__u8 dev_uuid[16];\n};\n\nstruct btrfs_chunk {\n\t__le64 length;\n\t__le64 owner;\n\t__le64 stripe_len;\n\t__le64 type;\n\t__le32 io_align;\n\t__le32 io_width;\n\t__le32 sector_size;\n\t__le16 num_stripes;\n\t__le16 sub_stripes;\n\tstruct btrfs_stripe stripe;\n};\n\nstruct btrfs_dev_extent {\n\t__le64 chunk_tree;\n\t__le64 chunk_objectid;\n\t__le64 chunk_offset;\n\t__le64 length;\n\t__u8 chunk_tree_uuid[16];\n};\n\nstruct btrfs_block_group_item {\n\t__le64 used;\n\t__le64 chunk_objectid;\n\t__le64 flags;\n};\n\nstruct root_name_map {\n\tu64 id;\n\tchar name[16];\n};\n\nstruct btrfs_csum_item {\n\t__u8 csum;\n};\n\nstruct btrfs_ordered_sum {\n\tu64 bytenr;\n\tint len;\n\tstruct list_head list;\n\tu8 sums[0];\n};\n\nstruct btrfs_io_bio {\n\tunsigned int mirror_num;\n\tstruct btrfs_device *device;\n\tu64 logical;\n\tu8 *csum;\n\tu8 csum_inline[64];\n\tstruct bvec_iter iter;\n\tstruct bio bio;\n};\n\nstruct btrfs_inode_extref {\n\t__le64 parent_objectid;\n\t__le64 index;\n\t__le16 name_len;\n\t__u8 name[0];\n} __attribute__((packed));\n\ntypedef blk_status_t extent_submit_bio_start_t(struct inode *, struct bio *, u64);\n\nenum {\n\tBTRFS_BLOCK_RSV_GLOBAL = 0,\n\tBTRFS_BLOCK_RSV_DELALLOC = 1,\n\tBTRFS_BLOCK_RSV_TRANS = 2,\n\tBTRFS_BLOCK_RSV_CHUNK = 3,\n\tBTRFS_BLOCK_RSV_DELOPS = 4,\n\tBTRFS_BLOCK_RSV_DELREFS = 5,\n\tBTRFS_BLOCK_RSV_EMPTY = 6,\n\tBTRFS_BLOCK_RSV_TEMP = 7,\n};\n\nenum btrfs_wq_endio_type {\n\tBTRFS_WQ_ENDIO_DATA = 0,\n\tBTRFS_WQ_ENDIO_METADATA = 1,\n\tBTRFS_WQ_ENDIO_FREE_SPACE = 2,\n\tBTRFS_WQ_ENDIO_RAID56 = 3,\n};\n\nenum {\n\tBTRFS_INODE_FLUSH_ON_CLOSE = 0,\n\tBTRFS_INODE_DUMMY = 1,\n\tBTRFS_INODE_IN_DEFRAG = 2,\n\tBTRFS_INODE_HAS_ASYNC_EXTENT = 3,\n\tBTRFS_INODE_NEEDS_FULL_SYNC = 4,\n\tBTRFS_INODE_COPY_EVERYTHING = 5,\n\tBTRFS_INODE_IN_DELALLOC_LIST = 6,\n\tBTRFS_INODE_HAS_PROPS = 7,\n\tBTRFS_INODE_SNAPSHOT_FLUSH = 8,\n\tBTRFS_INODE_NO_XATTRS = 9,\n\tBTRFS_INODE_NO_DELALLOC_FLUSH = 10,\n};\n\nenum btrfs_disk_cache_state {\n\tBTRFS_DC_WRITTEN = 0,\n\tBTRFS_DC_ERROR = 1,\n\tBTRFS_DC_CLEAR = 2,\n\tBTRFS_DC_SETUP = 3,\n};\n\nstruct btrfs_end_io_wq {\n\tstruct bio *bio;\n\tbio_end_io_t *end_io;\n\tvoid *private;\n\tstruct btrfs_fs_info *info;\n\tblk_status_t status;\n\tenum btrfs_wq_endio_type metadata;\n\tstruct btrfs_work work;\n};\n\nstruct async_submit_bio {\n\tstruct inode *inode;\n\tstruct bio *bio;\n\textent_submit_bio_start_t *submit_bio_start;\n\tint mirror_num;\n\tu64 dio_file_offset;\n\tstruct btrfs_work work;\n\tblk_status_t status;\n};\n\nstruct btrfs_qgroup_limit {\n\t__u64 flags;\n\t__u64 max_rfer;\n\t__u64 max_excl;\n\t__u64 rsv_rfer;\n\t__u64 rsv_excl;\n};\n\nstruct btrfs_qgroup_inherit {\n\t__u64 flags;\n\t__u64 num_qgroups;\n\t__u64 num_ref_copies;\n\t__u64 num_excl_copies;\n\tstruct btrfs_qgroup_limit lim;\n\t__u64 qgroups[0];\n};\n\nstruct btrfs_pending_snapshot {\n\tstruct dentry *dentry;\n\tstruct inode *dir;\n\tstruct btrfs_root *root;\n\tstruct btrfs_root_item *root_item;\n\tstruct btrfs_root *snap;\n\tstruct btrfs_qgroup_inherit *inherit;\n\tstruct btrfs_path *path;\n\tstruct btrfs_block_rsv block_rsv;\n\tint error;\n\tdev_t anon_dev;\n\tbool readonly;\n\tstruct list_head list;\n};\n\nstruct btrfs_async_commit {\n\tstruct btrfs_trans_handle *newtrans;\n\tstruct work_struct work;\n};\n\ntypedef blk_status_t submit_bio_hook_t(struct inode *, struct bio *, int, long unsigned int);\n\nenum btrfs_orphan_cleanup_state {\n\tORPHAN_CLEANUP_STARTED = 1,\n\tORPHAN_CLEANUP_DONE = 2,\n};\n\nstruct btrfs_swapfile_pin {\n\tstruct rb_node node;\n\tvoid *ptr;\n\tstruct inode *inode;\n\tbool is_block_group;\n\tint bg_extent_count;\n};\n\nenum btrfs_exclusive_operation {\n\tBTRFS_EXCLOP_NONE = 0,\n\tBTRFS_EXCLOP_BALANCE = 1,\n\tBTRFS_EXCLOP_DEV_ADD = 2,\n\tBTRFS_EXCLOP_DEV_REMOVE = 3,\n\tBTRFS_EXCLOP_DEV_REPLACE = 4,\n\tBTRFS_EXCLOP_RESIZE = 5,\n\tBTRFS_EXCLOP_SWAP_ACTIVATE = 6,\n};\n\nstruct btrfs_replace_extent_info {\n\tu64 disk_offset;\n\tu64 disk_len;\n\tu64 data_offset;\n\tu64 data_len;\n\tu64 file_offset;\n\tchar *extent_buf;\n\tbool is_new_extent;\n\tint qgroup_reserved;\n\tint insertions;\n};\n\nstruct btrfs_drop_extents_args {\n\tstruct btrfs_path *path;\n\tu64 start;\n\tu64 end;\n\tbool drop_cache;\n\tbool replace_extent;\n\tu32 extent_item_size;\n\tu64 drop_end;\n\tu64 bytes_found;\n\tbool extent_inserted;\n};\n\nstruct btrfs_file_private {\n\tvoid *filldir_buf;\n};\n\nstruct btrfs_dio_private {\n\tstruct inode *inode;\n\tu64 logical_offset;\n\tu64 disk_bytenr;\n\tu64 bytes;\n\trefcount_t refs;\n\tstruct bio *dio_bio;\n\tu8 csums[0];\n};\n\nstruct btrfs_io_geometry {\n\tu64 len;\n\tu64 offset;\n\tu64 stripe_len;\n\tu64 stripe_nr;\n\tu64 stripe_offset;\n\tu64 raid56_stripe_offset;\n};\n\nstruct btrfs_iget_args {\n\tu64 ino;\n\tstruct btrfs_root *root;\n};\n\nstruct btrfs_dio_data {\n\tu64 reserve;\n\tloff_t length;\n\tssize_t submitted;\n\tstruct extent_changeset *data_reserved;\n};\n\nstruct async_extent {\n\tu64 start;\n\tu64 ram_size;\n\tu64 compressed_size;\n\tstruct page **pages;\n\tlong unsigned int nr_pages;\n\tint compress_type;\n\tstruct list_head list;\n};\n\nstruct async_chunk {\n\tstruct inode *inode;\n\tstruct page *locked_page;\n\tu64 start;\n\tu64 end;\n\tunsigned int write_flags;\n\tstruct list_head extents;\n\tstruct cgroup_subsys_state *blkcg_css;\n\tstruct btrfs_work work;\n\tatomic_t *pending;\n};\n\nstruct async_cow {\n\tatomic_t num_chunks;\n\tstruct async_chunk chunks[0];\n};\n\nstruct btrfs_writepage_fixup {\n\tstruct page *page;\n\tstruct inode *inode;\n\tstruct btrfs_work work;\n};\n\nstruct dir_entry___2 {\n\tu64 ino;\n\tu64 offset;\n\tunsigned int type;\n\tint name_len;\n};\n\nstruct btrfs_delalloc_work {\n\tstruct inode *inode;\n\tstruct completion completion;\n\tstruct list_head list;\n\tstruct btrfs_work work;\n};\n\nstruct btrfs_swap_info {\n\tu64 start;\n\tu64 block_start;\n\tu64 block_len;\n\tu64 lowest_ppage;\n\tu64 highest_ppage;\n\tlong unsigned int nr_pages;\n\tint nr_extents;\n};\n\nstruct btrfs_ioctl_defrag_range_args {\n\t__u64 start;\n\t__u64 len;\n\t__u64 flags;\n\t__u32 extent_thresh;\n\t__u32 compress_type;\n\t__u32 unused[4];\n};\n\nstruct btrfs_log_ctx {\n\tint log_ret;\n\tint log_transid;\n\tbool log_new_dentries;\n\tbool logging_new_name;\n\tstruct inode *inode;\n\tstruct list_head list;\n\tstruct list_head ordered_extents;\n};\n\nstruct inode_defrag {\n\tstruct rb_node rb_node;\n\tu64 ino;\n\tu64 transid;\n\tu64 root;\n\tu64 last_offset;\n\tint cycled;\n};\n\nstruct falloc_range {\n\tstruct list_head list;\n\tu64 start;\n\tu64 len;\n};\n\nenum {\n\tRANGE_BOUNDARY_WRITTEN_EXTENT = 0,\n\tRANGE_BOUNDARY_PREALLOC_EXTENT = 1,\n\tRANGE_BOUNDARY_HOLE = 2,\n};\n\nstruct iomap_dio___2;\n\nenum btrfs_feature_set {\n\tFEAT_COMPAT = 0,\n\tFEAT_COMPAT_RO = 1,\n\tFEAT_INCOMPAT = 2,\n\tFEAT_MAX = 3,\n};\n\nstruct btrfs_feature_attr {\n\tstruct kobj_attribute kobj_attr;\n\tenum btrfs_feature_set feature_set;\n\tu64 feature_bit;\n};\n\nstruct raid_kobject {\n\tu64 flags;\n\tstruct kobject kobj;\n};\n\nstruct tree_entry {\n\tu64 start;\n\tu64 end;\n\tstruct rb_node rb_node;\n};\n\nstruct extent_page_data {\n\tstruct bio *bio;\n\tunsigned int extent_locked: 1;\n\tunsigned int sync_io: 1;\n};\n\nstruct processed_extent {\n\tstruct btrfs_inode *inode;\n\tu64 start;\n\tu64 end;\n\tbool uptodate;\n};\n\nstruct fiemap_cache {\n\tu64 offset;\n\tu64 phys;\n\tu64 len;\n\tu32 flags;\n\tbool cached;\n};\n\nstruct btrfs_trans_handle___2;\n\nstruct btrfs_ioctl_balance_args {\n\t__u64 flags;\n\t__u64 state;\n\tstruct btrfs_balance_args data;\n\tstruct btrfs_balance_args meta;\n\tstruct btrfs_balance_args sys;\n\tstruct btrfs_balance_progress stat;\n\t__u64 unused[72];\n};\n\nstruct btrfs_ioctl_get_dev_stats {\n\t__u64 devid;\n\t__u64 nr_items;\n\t__u64 flags;\n\t__u64 values[5];\n\t__u64 unused[121];\n};\n\nenum btrfs_err_code {\n\tBTRFS_ERROR_DEV_RAID1_MIN_NOT_MET = 1,\n\tBTRFS_ERROR_DEV_RAID10_MIN_NOT_MET = 2,\n\tBTRFS_ERROR_DEV_RAID5_MIN_NOT_MET = 3,\n\tBTRFS_ERROR_DEV_RAID6_MIN_NOT_MET = 4,\n\tBTRFS_ERROR_DEV_TGT_REPLACE = 5,\n\tBTRFS_ERROR_DEV_MISSING_NOT_FOUND = 6,\n\tBTRFS_ERROR_DEV_ONLY_WRITABLE = 7,\n\tBTRFS_ERROR_DEV_EXCL_RUN_IN_PROGRESS = 8,\n\tBTRFS_ERROR_DEV_RAID1C3_MIN_NOT_MET = 9,\n\tBTRFS_ERROR_DEV_RAID1C4_MIN_NOT_MET = 10,\n};\n\nstruct btrfs_disk_balance_args {\n\t__le64 profiles;\n\tunion {\n\t\t__le64 usage;\n\t\tstruct {\n\t\t\t__le32 usage_min;\n\t\t\t__le32 usage_max;\n\t\t};\n\t};\n\t__le64 devid;\n\t__le64 pstart;\n\t__le64 pend;\n\t__le64 vstart;\n\t__le64 vend;\n\t__le64 target;\n\t__le64 flags;\n\tunion {\n\t\t__le64 limit;\n\t\tstruct {\n\t\t\t__le32 limit_min;\n\t\t\t__le32 limit_max;\n\t\t};\n\t};\n\t__le32 stripes_min;\n\t__le32 stripes_max;\n\t__le64 unused[6];\n};\n\nstruct btrfs_balance_item {\n\t__le64 flags;\n\tstruct btrfs_disk_balance_args data;\n\tstruct btrfs_disk_balance_args meta;\n\tstruct btrfs_disk_balance_args sys;\n\t__le64 unused[4];\n};\n\nstruct btrfs_dev_stats_item {\n\t__le64 values[5];\n};\n\nstruct alloc_chunk_ctl {\n\tu64 start;\n\tu64 type;\n\tint num_stripes;\n\tint sub_stripes;\n\tint dev_stripes;\n\tint devs_max;\n\tint devs_min;\n\tint devs_increment;\n\tint ncopies;\n\tint nparity;\n\tu64 max_stripe_size;\n\tu64 max_chunk_size;\n\tu64 dev_extent_min;\n\tu64 stripe_size;\n\tu64 chunk_size;\n\tint ndevs;\n};\n\nstruct btrfs_workqueue {\n\tstruct __btrfs_workqueue *normal;\n\tstruct __btrfs_workqueue *high;\n};\n\nenum {\n\tWORK_DONE_BIT = 0,\n\tWORK_ORDER_DONE_BIT = 1,\n\tWORK_HIGH_PRIO_BIT = 2,\n};\n\nstruct btrfs_ioctl_qgroup_limit_args {\n\t__u64 qgroupid;\n\tstruct btrfs_qgroup_limit lim;\n};\n\nstruct btrfs_ioctl_vol_args_v2 {\n\t__s64 fd;\n\t__u64 transid;\n\t__u64 flags;\n\tunion {\n\t\tstruct {\n\t\t\t__u64 size;\n\t\t\tstruct btrfs_qgroup_inherit *qgroup_inherit;\n\t\t};\n\t\t__u64 unused[4];\n\t};\n\tunion {\n\t\tchar name[4040];\n\t\t__u64 devid;\n\t\t__u64 subvolid;\n\t};\n};\n\nstruct btrfs_ioctl_scrub_args {\n\t__u64 devid;\n\t__u64 start;\n\t__u64 end;\n\t__u64 flags;\n\tstruct btrfs_scrub_progress progress;\n\t__u64 unused[109];\n};\n\nstruct btrfs_ioctl_dev_replace_start_params {\n\t__u64 srcdevid;\n\t__u64 cont_reading_from_srcdev_mode;\n\t__u8 srcdev_name[1025];\n\t__u8 tgtdev_name[1025];\n};\n\nstruct btrfs_ioctl_dev_replace_status_params {\n\t__u64 replace_state;\n\t__u64 progress_1000;\n\t__u64 time_started;\n\t__u64 time_stopped;\n\t__u64 num_write_errors;\n\t__u64 num_uncorrectable_read_errors;\n};\n\nstruct btrfs_ioctl_dev_replace_args {\n\t__u64 cmd;\n\t__u64 result;\n\tunion {\n\t\tstruct btrfs_ioctl_dev_replace_start_params start;\n\t\tstruct btrfs_ioctl_dev_replace_status_params status;\n\t};\n\t__u64 spare[64];\n};\n\nstruct btrfs_ioctl_dev_info_args {\n\t__u64 devid;\n\t__u8 uuid[16];\n\t__u64 bytes_used;\n\t__u64 total_bytes;\n\t__u64 unused[379];\n\t__u8 path[1024];\n};\n\nstruct btrfs_ioctl_fs_info_args {\n\t__u64 max_id;\n\t__u64 num_devices;\n\t__u8 fsid[16];\n\t__u32 nodesize;\n\t__u32 sectorsize;\n\t__u32 clone_alignment;\n\t__u16 csum_type;\n\t__u16 csum_size;\n\t__u64 flags;\n\t__u64 generation;\n\t__u8 metadata_uuid[16];\n\t__u8 reserved[944];\n};\n\nstruct btrfs_ioctl_feature_flags {\n\t__u64 compat_flags;\n\t__u64 compat_ro_flags;\n\t__u64 incompat_flags;\n};\n\nstruct btrfs_ioctl_ino_lookup_args {\n\t__u64 treeid;\n\t__u64 objectid;\n\tchar name[4080];\n};\n\nstruct btrfs_ioctl_ino_lookup_user_args {\n\t__u64 dirid;\n\t__u64 treeid;\n\tchar name[256];\n\tchar path[3824];\n};\n\nstruct btrfs_ioctl_search_key {\n\t__u64 tree_id;\n\t__u64 min_objectid;\n\t__u64 max_objectid;\n\t__u64 min_offset;\n\t__u64 max_offset;\n\t__u64 min_transid;\n\t__u64 max_transid;\n\t__u32 min_type;\n\t__u32 max_type;\n\t__u32 nr_items;\n\t__u32 unused;\n\t__u64 unused1;\n\t__u64 unused2;\n\t__u64 unused3;\n\t__u64 unused4;\n};\n\nstruct btrfs_ioctl_search_header {\n\t__u64 transid;\n\t__u64 objectid;\n\t__u64 offset;\n\t__u32 type;\n\t__u32 len;\n};\n\nstruct btrfs_ioctl_search_args {\n\tstruct btrfs_ioctl_search_key key;\n\tchar buf[3992];\n};\n\nstruct btrfs_ioctl_search_args_v2 {\n\tstruct btrfs_ioctl_search_key key;\n\t__u64 buf_size;\n\t__u64 buf[0];\n};\n\nstruct btrfs_ioctl_space_info {\n\t__u64 flags;\n\t__u64 total_bytes;\n\t__u64 used_bytes;\n};\n\nstruct btrfs_ioctl_space_args {\n\t__u64 space_slots;\n\t__u64 total_spaces;\n\tstruct btrfs_ioctl_space_info spaces[0];\n};\n\nstruct btrfs_data_container {\n\t__u32 bytes_left;\n\t__u32 bytes_missing;\n\t__u32 elem_cnt;\n\t__u32 elem_missed;\n\t__u64 val[0];\n};\n\nstruct btrfs_ioctl_ino_path_args {\n\t__u64 inum;\n\t__u64 size;\n\t__u64 reserved[4];\n\t__u64 fspath;\n};\n\nstruct btrfs_ioctl_logical_ino_args {\n\t__u64 logical;\n\t__u64 size;\n\t__u64 reserved[3];\n\t__u64 flags;\n\t__u64 inodes;\n};\n\nstruct btrfs_ioctl_quota_ctl_args {\n\t__u64 cmd;\n\t__u64 status;\n};\n\nstruct btrfs_ioctl_quota_rescan_args {\n\t__u64 flags;\n\t__u64 progress;\n\t__u64 reserved[6];\n};\n\nstruct btrfs_ioctl_qgroup_assign_args {\n\t__u64 assign;\n\t__u64 src;\n\t__u64 dst;\n};\n\nstruct btrfs_ioctl_qgroup_create_args {\n\t__u64 create;\n\t__u64 qgroupid;\n};\n\nstruct btrfs_ioctl_timespec {\n\t__u64 sec;\n\t__u32 nsec;\n};\n\nstruct btrfs_ioctl_received_subvol_args {\n\tchar uuid[16];\n\t__u64 stransid;\n\t__u64 rtransid;\n\tstruct btrfs_ioctl_timespec stime;\n\tstruct btrfs_ioctl_timespec rtime;\n\t__u64 flags;\n\t__u64 reserved[16];\n};\n\nstruct btrfs_ioctl_send_args {\n\t__s64 send_fd;\n\t__u64 clone_sources_count;\n\t__u64 *clone_sources;\n\t__u64 parent_root;\n\t__u64 flags;\n\t__u64 reserved[4];\n};\n\nstruct btrfs_ioctl_get_subvol_info_args {\n\t__u64 treeid;\n\tchar name[256];\n\t__u64 parent_id;\n\t__u64 dirid;\n\t__u64 generation;\n\t__u64 flags;\n\t__u8 uuid[16];\n\t__u8 parent_uuid[16];\n\t__u8 received_uuid[16];\n\t__u64 ctransid;\n\t__u64 otransid;\n\t__u64 stransid;\n\t__u64 rtransid;\n\tstruct btrfs_ioctl_timespec ctime;\n\tstruct btrfs_ioctl_timespec otime;\n\tstruct btrfs_ioctl_timespec stime;\n\tstruct btrfs_ioctl_timespec rtime;\n\t__u64 reserved[8];\n};\n\nstruct btrfs_ioctl_get_subvol_rootref_args {\n\t__u64 min_treeid;\n\tstruct {\n\t\t__u64 treeid;\n\t\t__u64 dirid;\n\t} rootref[255];\n\t__u8 num_items;\n\t__u8 align[7];\n};\n\nstruct inode_fs_paths {\n\tstruct btrfs_path *btrfs_path;\n\tstruct btrfs_root *fs_root;\n\tstruct btrfs_data_container *fspath;\n};\n\ntypedef int iterate_extent_inodes_t(u64, u64, u64, void *);\n\nstruct btrfs_ioctl_timespec_32 {\n\t__u64 sec;\n\t__u32 nsec;\n} __attribute__((packed));\n\nstruct btrfs_ioctl_received_subvol_args_32 {\n\tchar uuid[16];\n\t__u64 stransid;\n\t__u64 rtransid;\n\tstruct btrfs_ioctl_timespec_32 stime;\n\tstruct btrfs_ioctl_timespec_32 rtime;\n\t__u64 flags;\n\t__u64 reserved[16];\n} __attribute__((packed));\n\nstruct btrfs_ioctl_send_args_32 {\n\t__s64 send_fd;\n\t__u64 clone_sources_count;\n\tcompat_uptr_t clone_sources;\n\t__u64 parent_root;\n\t__u64 flags;\n\t__u64 reserved[4];\n} __attribute__((packed));\n\nstruct btrfs_fid {\n\tu64 objectid;\n\tu64 root_objectid;\n\tu32 gen;\n\tu64 parent_objectid;\n\tu32 parent_gen;\n\tu64 parent_root_objectid;\n} __attribute__((packed));\n\nstruct btrfs_dir_log_item {\n\t__le64 end;\n};\n\nenum {\n\tLOG_INODE_ALL = 0,\n\tLOG_INODE_EXISTS = 1,\n\tLOG_OTHER_INODE = 2,\n\tLOG_OTHER_INODE_ALL = 3,\n};\n\nenum {\n\tLOG_WALK_PIN_ONLY = 0,\n\tLOG_WALK_REPLAY_INODES = 1,\n\tLOG_WALK_REPLAY_DIR_INDEX = 2,\n\tLOG_WALK_REPLAY_ALL = 3,\n};\n\nstruct walk_control___2 {\n\tint free;\n\tint write;\n\tint wait;\n\tint pin;\n\tint stage;\n\tbool ignore_cur_inode;\n\tstruct btrfs_root *replay_dest;\n\tstruct btrfs_trans_handle *trans;\n\tint (*process_func)(struct btrfs_root *, struct extent_buffer *, struct walk_control___2 *, u64, int);\n};\n\nstruct btrfs_ino_list {\n\tu64 ino;\n\tu64 parent;\n\tstruct list_head list;\n};\n\nstruct btrfs_dir_list {\n\tu64 ino;\n\tstruct list_head list;\n};\n\nstruct btrfs_free_space_entry {\n\t__le64 offset;\n\t__le64 bytes;\n\t__u8 type;\n} __attribute__((packed));\n\nstruct btrfs_free_space_header {\n\tstruct btrfs_disk_key location;\n\t__le64 generation;\n\t__le64 num_entries;\n\t__le64 num_bitmaps;\n} __attribute__((packed));\n\nstruct btrfs_trim_range {\n\tu64 start;\n\tu64 bytes;\n\tstruct list_head list;\n};\n\ntypedef unsigned char Byte;\n\ntypedef long unsigned int uLong;\n\nstruct internal_state;\n\nstruct z_stream_s {\n\tconst Byte *next_in;\n\tuLong avail_in;\n\tuLong total_in;\n\tByte *next_out;\n\tuLong avail_out;\n\tuLong total_out;\n\tchar *msg;\n\tstruct internal_state *state;\n\tvoid *workspace;\n\tint data_type;\n\tuLong adler;\n\tuLong reserved;\n};\n\nstruct internal_state {\n\tint dummy;\n};\n\ntypedef struct z_stream_s z_stream;\n\ntypedef z_stream *z_streamp;\n\nstruct compressed_bio {\n\trefcount_t pending_bios;\n\tstruct page **compressed_pages;\n\tstruct inode *inode;\n\tu64 start;\n\tlong unsigned int len;\n\tlong unsigned int compressed_len;\n\tint compress_type;\n\tlong unsigned int nr_pages;\n\tint errors;\n\tint mirror_num;\n\tstruct bio *orig_bio;\n\tu8 sums[0];\n};\n\nstruct workspace_manager {\n\tstruct list_head idle_ws;\n\tspinlock_t ws_lock;\n\tint free_ws;\n\tatomic_t total_ws;\n\twait_queue_head_t ws_wait;\n};\n\nstruct btrfs_compress_op {\n\tstruct workspace_manager *workspace_manager;\n\tunsigned int max_level;\n\tunsigned int default_level;\n};\n\nstruct workspace {\n\tz_stream strm;\n\tchar *buf;\n\tunsigned int buf_size;\n\tstruct list_head list;\n\tint level;\n};\n\nstruct workspace___2 {\n\tvoid *mem;\n\tvoid *buf;\n\tvoid *cbuf;\n\tstruct list_head list;\n};\n\ntypedef enum {\n\tZSTD_error_no_error = 0,\n\tZSTD_error_GENERIC = 1,\n\tZSTD_error_prefix_unknown = 2,\n\tZSTD_error_version_unsupported = 3,\n\tZSTD_error_parameter_unknown = 4,\n\tZSTD_error_frameParameter_unsupported = 5,\n\tZSTD_error_frameParameter_unsupportedBy32bits = 6,\n\tZSTD_error_frameParameter_windowTooLarge = 7,\n\tZSTD_error_compressionParameter_unsupported = 8,\n\tZSTD_error_init_missing = 9,\n\tZSTD_error_memory_allocation = 10,\n\tZSTD_error_stage_wrong = 11,\n\tZSTD_error_dstSize_tooSmall = 12,\n\tZSTD_error_srcSize_wrong = 13,\n\tZSTD_error_corruption_detected = 14,\n\tZSTD_error_checksum_wrong = 15,\n\tZSTD_error_tableLog_tooLarge = 16,\n\tZSTD_error_maxSymbolValue_tooLarge = 17,\n\tZSTD_error_maxSymbolValue_tooSmall = 18,\n\tZSTD_error_dictionary_corrupted = 19,\n\tZSTD_error_dictionary_wrong = 20,\n\tZSTD_error_dictionaryCreation_failed = 21,\n\tZSTD_error_maxCode = 22,\n} ZSTD_ErrorCode;\n\ntypedef enum {\n\tZSTD_fast = 0,\n\tZSTD_dfast = 1,\n\tZSTD_greedy = 2,\n\tZSTD_lazy = 3,\n\tZSTD_lazy2 = 4,\n\tZSTD_btlazy2 = 5,\n\tZSTD_btopt = 6,\n\tZSTD_btopt2 = 7,\n} ZSTD_strategy;\n\ntypedef struct {\n\tunsigned int windowLog;\n\tunsigned int chainLog;\n\tunsigned int hashLog;\n\tunsigned int searchLog;\n\tunsigned int searchLength;\n\tunsigned int targetLength;\n\tZSTD_strategy strategy;\n} ZSTD_compressionParameters;\n\ntypedef struct {\n\tunsigned int contentSizeFlag;\n\tunsigned int checksumFlag;\n\tunsigned int noDictIDFlag;\n} ZSTD_frameParameters;\n\ntypedef struct {\n\tZSTD_compressionParameters cParams;\n\tZSTD_frameParameters fParams;\n} ZSTD_parameters;\n\nstruct ZSTD_inBuffer_s {\n\tconst void *src;\n\tsize_t size;\n\tsize_t pos;\n};\n\ntypedef struct ZSTD_inBuffer_s ZSTD_inBuffer;\n\nstruct ZSTD_outBuffer_s {\n\tvoid *dst;\n\tsize_t size;\n\tsize_t pos;\n};\n\ntypedef struct ZSTD_outBuffer_s ZSTD_outBuffer;\n\nstruct ZSTD_CStream_s;\n\ntypedef struct ZSTD_CStream_s ZSTD_CStream;\n\nstruct ZSTD_DStream_s;\n\ntypedef struct ZSTD_DStream_s ZSTD_DStream;\n\nstruct workspace___3 {\n\tvoid *mem;\n\tsize_t size;\n\tchar *buf;\n\tunsigned int level;\n\tunsigned int req_level;\n\tlong unsigned int last_used;\n\tstruct list_head list;\n\tstruct list_head lru_list;\n\tZSTD_inBuffer in_buf;\n\tZSTD_outBuffer out_buf;\n};\n\nstruct zstd_workspace_manager {\n\tconst struct btrfs_compress_op *ops;\n\tspinlock_t lock;\n\tstruct list_head lru_list;\n\tstruct list_head idle_ws[15];\n\tlong unsigned int active_map;\n\twait_queue_head_t wait;\n\tstruct timer_list timer;\n};\n\nstruct bucket_item {\n\tu32 count;\n};\n\nstruct heuristic_ws {\n\tu8 *sample;\n\tu32 sample_size;\n\tstruct bucket_item *bucket;\n\tstruct bucket_item *bucket_b;\n\tstruct list_head list;\n};\n\nstruct ulist_iterator {\n\tstruct list_head *cur_list;\n};\n\nstruct ulist_node {\n\tu64 val;\n\tu64 aux;\n\tstruct list_head list;\n\tstruct rb_node rb_node;\n};\n\nstruct btrfs_backref_node;\n\nstruct btrfs_backref_cache {\n\tstruct rb_root rb_root;\n\tstruct btrfs_backref_node *path[8];\n\tstruct list_head pending[8];\n\tstruct list_head leaves;\n\tstruct list_head changed;\n\tstruct list_head detached;\n\tu64 last_trans;\n\tint nr_nodes;\n\tint nr_edges;\n\tstruct list_head pending_edge;\n\tstruct list_head useless_node;\n\tstruct btrfs_fs_info *fs_info;\n\tunsigned int is_reloc;\n};\n\nstruct file_extent_cluster {\n\tu64 start;\n\tu64 end;\n\tu64 boundary[128];\n\tunsigned int nr;\n};\n\nstruct mapping_tree {\n\tstruct rb_root rb_root;\n\tspinlock_t lock;\n};\n\nstruct reloc_control {\n\tstruct btrfs_block_group *block_group;\n\tstruct btrfs_root *extent_root;\n\tstruct inode *data_inode;\n\tstruct btrfs_block_rsv *block_rsv;\n\tstruct btrfs_backref_cache backref_cache;\n\tstruct file_extent_cluster cluster;\n\tstruct extent_io_tree processed_blocks;\n\tstruct mapping_tree reloc_root_tree;\n\tstruct list_head reloc_roots;\n\tstruct list_head dirty_subvol_roots;\n\tu64 merging_rsv_size;\n\tu64 nodes_relocated;\n\tu64 reserved_bytes;\n\tu64 search_start;\n\tu64 extents_found;\n\tunsigned int stage: 8;\n\tunsigned int create_reloc_tree: 1;\n\tunsigned int merge_reloc_tree: 1;\n\tunsigned int found_file_extent: 1;\n};\n\nstruct btrfs_backref_iter {\n\tu64 bytenr;\n\tstruct btrfs_path *path;\n\tstruct btrfs_fs_info *fs_info;\n\tstruct btrfs_key cur_key;\n\tu32 item_ptr;\n\tu32 cur_ptr;\n\tu32 end_ptr;\n};\n\nstruct btrfs_backref_node {\n\tstruct {\n\t\tstruct rb_node rb_node;\n\t\tu64 bytenr;\n\t};\n\tu64 new_bytenr;\n\tu64 owner;\n\tstruct list_head list;\n\tstruct list_head upper;\n\tstruct list_head lower;\n\tstruct btrfs_root *root;\n\tstruct extent_buffer *eb;\n\tunsigned int level: 8;\n\tunsigned int cowonly: 1;\n\tunsigned int lowest: 1;\n\tunsigned int locked: 1;\n\tunsigned int processed: 1;\n\tunsigned int checked: 1;\n\tunsigned int pending: 1;\n\tunsigned int detached: 1;\n\tunsigned int is_reloc_root: 1;\n};\n\nstruct btrfs_backref_edge {\n\tstruct list_head list[2];\n\tstruct btrfs_backref_node *node[2];\n};\n\nstruct rb_simple_node {\n\tstruct rb_node rb_node;\n\tu64 bytenr;\n};\n\nstruct mapping_node {\n\tstruct {\n\t\tstruct rb_node rb_node;\n\t\tu64 bytenr;\n\t};\n\tvoid *data;\n};\n\nstruct tree_block {\n\tstruct {\n\t\tstruct rb_node rb_node;\n\t\tu64 bytenr;\n\t};\n\tstruct btrfs_key key;\n\tunsigned int level: 8;\n\tunsigned int key_ready: 1;\n};\n\nstruct btrfs_delayed_item {\n\tstruct rb_node rb_node;\n\tstruct btrfs_key key;\n\tstruct list_head tree_list;\n\tstruct list_head readdir_list;\n\tu64 bytes_reserved;\n\tstruct btrfs_delayed_node *delayed_node;\n\trefcount_t refs;\n\tint ins_or_del;\n\tu32 data_len;\n\tchar data[0];\n};\n\nstruct btrfs_async_delayed_work {\n\tstruct btrfs_delayed_root *delayed_root;\n\tint nr;\n\tstruct btrfs_work work;\n};\n\nstruct reada_control {\n\tstruct btrfs_fs_info *fs_info;\n\tstruct btrfs_key key_start;\n\tstruct btrfs_key key_end;\n\tshort: 16;\n\tatomic_t elems;\n\tstruct kref refcnt;\n\tint: 32;\n\twait_queue_head_t wait;\n} __attribute__((packed));\n\nstruct scrub_bio;\n\nstruct scrub_ctx {\n\tstruct scrub_bio *bios[64];\n\tstruct btrfs_fs_info *fs_info;\n\tint first_free;\n\tint curr;\n\tatomic_t bios_in_flight;\n\tatomic_t workers_pending;\n\tspinlock_t list_lock;\n\twait_queue_head_t list_wait;\n\tstruct list_head csum_list;\n\tatomic_t cancel_req;\n\tint readonly;\n\tint pages_per_rd_bio;\n\tint is_dev_replace;\n\tstruct scrub_bio *wr_curr_bio;\n\tstruct mutex wr_lock;\n\tint pages_per_wr_bio;\n\tstruct btrfs_device *wr_tgtdev;\n\tbool flush_all_writes;\n\tstruct btrfs_scrub_progress stat;\n\tspinlock_t stat_lock;\n\trefcount_t refs;\n};\n\nstruct scrub_recover {\n\trefcount_t refs;\n\tstruct btrfs_bio *bbio;\n\tu64 map_length;\n};\n\nstruct scrub_block;\n\nstruct scrub_page {\n\tstruct scrub_block *sblock;\n\tstruct page *page;\n\tstruct btrfs_device *dev;\n\tstruct list_head list;\n\tu64 flags;\n\tu64 generation;\n\tu64 logical;\n\tu64 physical;\n\tu64 physical_for_dev_replace;\n\tatomic_t refs;\n\tu8 mirror_num;\n\tint have_csum: 1;\n\tint io_error: 1;\n\tu8 csum[32];\n\tstruct scrub_recover *recover;\n};\n\nstruct scrub_parity;\n\nstruct scrub_block {\n\tstruct scrub_page *pagev[16];\n\tint page_count;\n\tatomic_t outstanding_pages;\n\trefcount_t refs;\n\tstruct scrub_ctx *sctx;\n\tstruct scrub_parity *sparity;\n\tstruct {\n\t\tunsigned int header_error: 1;\n\t\tunsigned int checksum_error: 1;\n\t\tunsigned int no_io_error_seen: 1;\n\t\tunsigned int generation_error: 1;\n\t\tunsigned int data_corrected: 1;\n\t};\n\tstruct btrfs_work work;\n};\n\nstruct scrub_bio {\n\tint index;\n\tstruct scrub_ctx *sctx;\n\tstruct btrfs_device *dev;\n\tstruct bio *bio;\n\tblk_status_t status;\n\tu64 logical;\n\tu64 physical;\n\tstruct scrub_page *pagev[32];\n\tint page_count;\n\tint next_free;\n\tstruct btrfs_work work;\n};\n\nstruct scrub_parity {\n\tstruct scrub_ctx *sctx;\n\tstruct btrfs_device *scrub_dev;\n\tu64 logic_start;\n\tu64 logic_end;\n\tint nsectors;\n\tu32 stripe_len;\n\trefcount_t refs;\n\tstruct list_head spages;\n\tstruct btrfs_work work;\n\tlong unsigned int *dbitmap;\n\tlong unsigned int *ebitmap;\n\tlong unsigned int bitmap[0];\n};\n\nstruct scrub_warning {\n\tstruct btrfs_path *path;\n\tu64 extent_item_size;\n\tconst char *errstr;\n\tu64 physical;\n\tu64 logical;\n\tstruct btrfs_device *dev;\n};\n\nstruct full_stripe_lock {\n\tstruct rb_node node;\n\tu64 logical;\n\tu64 refs;\n\tstruct mutex mutex;\n};\n\nstruct btrfs_raid_bio;\n\nstruct reada_zone {\n\tu64 start;\n\tu64 end;\n\tu64 elems;\n\tstruct list_head list;\n\tspinlock_t lock;\n\tint locked;\n\tstruct btrfs_device *device;\n\tstruct btrfs_device *devs[5];\n\tint ndevs;\n\tstruct kref refcnt;\n};\n\nstruct reada_extctl {\n\tstruct list_head list;\n\tstruct reada_control *rc;\n\tu64 generation;\n};\n\nstruct reada_extent {\n\tu64 logical;\n\tu64 owner_root;\n\tstruct btrfs_key top;\n\tstruct list_head extctl;\n\tint refcnt;\n\tspinlock_t lock;\n\tstruct reada_zone *zones[5];\n\tint nzones;\n\tint scheduled;\n\tint level;\n};\n\nstruct reada_machine_work {\n\tstruct btrfs_work work;\n\tstruct btrfs_fs_info *fs_info;\n};\n\nstruct extent_inode_elem {\n\tu64 inum;\n\tu64 offset;\n\tstruct extent_inode_elem *next;\n};\n\nstruct preftree {\n\tstruct rb_root_cached root;\n\tunsigned int count;\n};\n\nstruct preftrees {\n\tstruct preftree direct;\n\tstruct preftree indirect;\n\tstruct preftree indirect_missing_keys;\n};\n\nstruct share_check {\n\tu64 root_objectid;\n\tu64 inum;\n\tint share_count;\n};\n\ntypedef int iterate_irefs_t(u64, u32, long unsigned int, struct extent_buffer *, void *);\n\nstruct btrfs_qgroup_status_item {\n\t__le64 version;\n\t__le64 generation;\n\t__le64 flags;\n\t__le64 rescan;\n};\n\nstruct btrfs_qgroup_info_item {\n\t__le64 generation;\n\t__le64 rfer;\n\t__le64 rfer_cmpr;\n\t__le64 excl;\n\t__le64 excl_cmpr;\n};\n\nstruct btrfs_qgroup_limit_item {\n\t__le64 flags;\n\t__le64 max_rfer;\n\t__le64 max_excl;\n\t__le64 rsv_rfer;\n\t__le64 rsv_excl;\n};\n\nstruct btrfs_qgroup_swapped_block {\n\tstruct rb_node node;\n\tint level;\n\tbool trace_leaf;\n\tu64 subvol_bytenr;\n\tu64 subvol_generation;\n\tu64 reloc_bytenr;\n\tu64 reloc_generation;\n\tu64 last_snapshot;\n\tstruct btrfs_key first_key;\n};\n\nstruct btrfs_qgroup_list {\n\tstruct list_head next_group;\n\tstruct list_head next_member;\n\tstruct btrfs_qgroup *group;\n\tstruct btrfs_qgroup *member;\n};\n\nstruct btrfs_stream_header {\n\tchar magic[13];\n\t__le32 version;\n} __attribute__((packed));\n\nstruct btrfs_cmd_header {\n\t__le32 len;\n\t__le16 cmd;\n\t__le32 crc;\n} __attribute__((packed));\n\nstruct btrfs_tlv_header {\n\t__le16 tlv_type;\n\t__le16 tlv_len;\n};\n\nenum btrfs_send_cmd {\n\tBTRFS_SEND_C_UNSPEC = 0,\n\tBTRFS_SEND_C_SUBVOL = 1,\n\tBTRFS_SEND_C_SNAPSHOT = 2,\n\tBTRFS_SEND_C_MKFILE = 3,\n\tBTRFS_SEND_C_MKDIR = 4,\n\tBTRFS_SEND_C_MKNOD = 5,\n\tBTRFS_SEND_C_MKFIFO = 6,\n\tBTRFS_SEND_C_MKSOCK = 7,\n\tBTRFS_SEND_C_SYMLINK = 8,\n\tBTRFS_SEND_C_RENAME = 9,\n\tBTRFS_SEND_C_LINK = 10,\n\tBTRFS_SEND_C_UNLINK = 11,\n\tBTRFS_SEND_C_RMDIR = 12,\n\tBTRFS_SEND_C_SET_XATTR = 13,\n\tBTRFS_SEND_C_REMOVE_XATTR = 14,\n\tBTRFS_SEND_C_WRITE = 15,\n\tBTRFS_SEND_C_CLONE = 16,\n\tBTRFS_SEND_C_TRUNCATE = 17,\n\tBTRFS_SEND_C_CHMOD = 18,\n\tBTRFS_SEND_C_CHOWN = 19,\n\tBTRFS_SEND_C_UTIMES = 20,\n\tBTRFS_SEND_C_END = 21,\n\tBTRFS_SEND_C_UPDATE_EXTENT = 22,\n\t__BTRFS_SEND_C_MAX = 23,\n};\n\nenum {\n\tBTRFS_SEND_A_UNSPEC = 0,\n\tBTRFS_SEND_A_UUID = 1,\n\tBTRFS_SEND_A_CTRANSID = 2,\n\tBTRFS_SEND_A_INO = 3,\n\tBTRFS_SEND_A_SIZE = 4,\n\tBTRFS_SEND_A_MODE = 5,\n\tBTRFS_SEND_A_UID = 6,\n\tBTRFS_SEND_A_GID = 7,\n\tBTRFS_SEND_A_RDEV = 8,\n\tBTRFS_SEND_A_CTIME = 9,\n\tBTRFS_SEND_A_MTIME = 10,\n\tBTRFS_SEND_A_ATIME = 11,\n\tBTRFS_SEND_A_OTIME = 12,\n\tBTRFS_SEND_A_XATTR_NAME = 13,\n\tBTRFS_SEND_A_XATTR_DATA = 14,\n\tBTRFS_SEND_A_PATH = 15,\n\tBTRFS_SEND_A_PATH_TO = 16,\n\tBTRFS_SEND_A_PATH_LINK = 17,\n\tBTRFS_SEND_A_FILE_OFFSET = 18,\n\tBTRFS_SEND_A_DATA = 19,\n\tBTRFS_SEND_A_CLONE_UUID = 20,\n\tBTRFS_SEND_A_CLONE_CTRANSID = 21,\n\tBTRFS_SEND_A_CLONE_PATH = 22,\n\tBTRFS_SEND_A_CLONE_OFFSET = 23,\n\tBTRFS_SEND_A_CLONE_LEN = 24,\n\t__BTRFS_SEND_A_MAX = 25,\n};\n\nstruct fs_path {\n\tunion {\n\t\tstruct {\n\t\t\tchar *start;\n\t\t\tchar *end;\n\t\t\tchar *buf;\n\t\t\tshort unsigned int buf_len: 15;\n\t\t\tshort unsigned int reversed: 1;\n\t\t\tchar inline_buf[0];\n\t\t};\n\t\tchar pad[256];\n\t};\n};\n\nstruct clone_root {\n\tstruct btrfs_root *root;\n\tu64 ino;\n\tu64 offset;\n\tu64 found_refs;\n};\n\nstruct send_ctx {\n\tstruct file *send_filp;\n\tloff_t send_off;\n\tchar *send_buf;\n\tu32 send_size;\n\tu32 send_max_size;\n\tu64 total_send_size;\n\tu64 cmd_send_size[23];\n\tu64 flags;\n\tstruct btrfs_root *send_root;\n\tstruct btrfs_root *parent_root;\n\tstruct clone_root *clone_roots;\n\tint clone_roots_cnt;\n\tstruct btrfs_path *left_path;\n\tstruct btrfs_path *right_path;\n\tstruct btrfs_key *cmp_key;\n\tu64 cur_ino;\n\tu64 cur_inode_gen;\n\tint cur_inode_new;\n\tint cur_inode_new_gen;\n\tint cur_inode_deleted;\n\tu64 cur_inode_size;\n\tu64 cur_inode_mode;\n\tu64 cur_inode_rdev;\n\tu64 cur_inode_last_extent;\n\tu64 cur_inode_next_write_offset;\n\tbool ignore_cur_inode;\n\tu64 send_progress;\n\tstruct list_head new_refs;\n\tstruct list_head deleted_refs;\n\tstruct xarray name_cache;\n\tstruct list_head name_cache_list;\n\tint name_cache_size;\n\tstruct file_ra_state ra;\n\tstruct rb_root pending_dir_moves;\n\tstruct rb_root waiting_dir_moves;\n\tstruct rb_root orphan_dirs;\n};\n\nstruct pending_dir_move {\n\tstruct rb_node node;\n\tstruct list_head list;\n\tu64 parent_ino;\n\tu64 ino;\n\tu64 gen;\n\tstruct list_head update_refs;\n};\n\nstruct waiting_dir_move {\n\tstruct rb_node node;\n\tu64 ino;\n\tu64 rmdir_ino;\n\tu64 rmdir_gen;\n\tbool orphanized;\n};\n\nstruct orphan_dir_info {\n\tstruct rb_node node;\n\tu64 ino;\n\tu64 gen;\n\tu64 last_dir_index_offset;\n};\n\nstruct name_cache_entry {\n\tstruct list_head list;\n\tstruct list_head radix_list;\n\tu64 ino;\n\tu64 gen;\n\tu64 parent_ino;\n\tu64 parent_gen;\n\tint ret;\n\tint need_later_update;\n\tint name_len;\n\tchar name[0];\n};\n\nenum btrfs_compare_tree_result {\n\tBTRFS_COMPARE_TREE_NEW = 0,\n\tBTRFS_COMPARE_TREE_DELETED = 1,\n\tBTRFS_COMPARE_TREE_CHANGED = 2,\n\tBTRFS_COMPARE_TREE_SAME = 3,\n};\n\ntypedef int (*iterate_inode_ref_t)(int, u64, int, struct fs_path *, void *);\n\ntypedef int (*iterate_dir_item_t)(int, struct btrfs_key *, const char *, int, const char *, int, u8, void *);\n\nstruct backref_ctx {\n\tstruct send_ctx *sctx;\n\tu64 found;\n\tu64 cur_objectid;\n\tu64 cur_offset;\n\tu64 extent_len;\n\tu64 data_offset;\n\tint found_itself;\n};\n\nenum inode_state {\n\tinode_state_no_change = 0,\n\tinode_state_will_create = 1,\n\tinode_state_did_create = 2,\n\tinode_state_will_delete = 3,\n\tinode_state_did_delete = 4,\n};\n\nstruct recorded_ref {\n\tstruct list_head list;\n\tchar *name;\n\tstruct fs_path *full_path;\n\tu64 dir;\n\tu64 dir_gen;\n\tint name_len;\n};\n\nstruct find_ref_ctx {\n\tu64 dir;\n\tu64 dir_gen;\n\tstruct btrfs_root *root;\n\tstruct fs_path *name;\n\tint found_idx;\n};\n\nstruct find_xattr_ctx {\n\tconst char *name;\n\tint name_len;\n\tint found_idx;\n\tchar *found_data;\n\tint found_data_len;\n};\n\nstruct parent_paths_ctx {\n\tstruct list_head *refs;\n\tstruct send_ctx *sctx;\n};\n\nstruct btrfs_dev_replace_item {\n\t__le64 src_devid;\n\t__le64 cursor_left;\n\t__le64 cursor_right;\n\t__le64 cont_reading_from_srcdev_mode;\n\t__le64 replace_state;\n\t__le64 time_started;\n\t__le64 time_stopped;\n\t__le64 num_write_errors;\n\t__le64 num_uncorrectable_read_errors;\n};\n\nstruct blk_plug_cb;\n\ntypedef void (*blk_plug_cb_fn)(struct blk_plug_cb *, bool);\n\nstruct blk_plug_cb {\n\tstruct list_head list;\n\tblk_plug_cb_fn callback;\n\tvoid *data;\n};\n\nstruct raid6_calls {\n\tvoid (*gen_syndrome)(int, size_t, void **);\n\tvoid (*xor_syndrome)(int, int, int, size_t, void **);\n\tint (*valid)();\n\tconst char *name;\n\tint prefer;\n};\n\nstruct btrfs_stripe_hash {\n\tstruct list_head hash_list;\n\tspinlock_t lock;\n};\n\nstruct btrfs_stripe_hash_table {\n\tstruct list_head stripe_cache;\n\tspinlock_t cache_lock;\n\tint cache_size;\n\tstruct btrfs_stripe_hash table[0];\n};\n\nenum btrfs_rbio_ops {\n\tBTRFS_RBIO_WRITE = 0,\n\tBTRFS_RBIO_READ_REBUILD = 1,\n\tBTRFS_RBIO_PARITY_SCRUB = 2,\n\tBTRFS_RBIO_REBUILD_MISSING = 3,\n};\n\nstruct btrfs_raid_bio___2 {\n\tstruct btrfs_fs_info *fs_info;\n\tstruct btrfs_bio *bbio;\n\tstruct list_head hash_list;\n\tstruct list_head stripe_cache;\n\tstruct btrfs_work work;\n\tstruct bio_list bio_list;\n\tspinlock_t bio_list_lock;\n\tstruct list_head plug_list;\n\tlong unsigned int flags;\n\tint stripe_len;\n\tint nr_data;\n\tint real_stripes;\n\tint stripe_npages;\n\tenum btrfs_rbio_ops operation;\n\tint faila;\n\tint failb;\n\tint scrubp;\n\tint nr_pages;\n\tint bio_list_bytes;\n\tint generic_bio_cnt;\n\trefcount_t refs;\n\tatomic_t stripes_pending;\n\tatomic_t error;\n\tstruct page **stripe_pages;\n\tstruct page **bio_pages;\n\tlong unsigned int *dbitmap;\n\tvoid **finish_pointers;\n\tlong unsigned int *finish_pbitmap;\n};\n\nstruct btrfs_plug_cb {\n\tstruct blk_plug_cb cb;\n\tstruct btrfs_fs_info *info;\n\tstruct list_head rbio_list;\n\tstruct btrfs_work work;\n};\n\nstruct prop_handler {\n\tstruct hlist_node node;\n\tconst char *xattr_name;\n\tint (*validate)(const char *, size_t);\n\tint (*apply)(struct inode *, const char *, size_t);\n\tconst char * (*extract)(struct inode *);\n\tint inheritable;\n};\n\nstruct btrfs_free_space_info {\n\t__le32 extent_count;\n\t__le32 flags;\n};\n\nstruct reserve_ticket {\n\tu64 bytes;\n\tint error;\n\tbool steal;\n\tstruct list_head list;\n\twait_queue_head_t wait;\n};\n\nenum blk_zone_type {\n\tBLK_ZONE_TYPE_CONVENTIONAL = 1,\n\tBLK_ZONE_TYPE_SEQWRITE_REQ = 2,\n\tBLK_ZONE_TYPE_SEQWRITE_PREF = 3,\n};\n\nenum blk_zone_cond {\n\tBLK_ZONE_COND_NOT_WP = 0,\n\tBLK_ZONE_COND_EMPTY = 1,\n\tBLK_ZONE_COND_IMP_OPEN = 2,\n\tBLK_ZONE_COND_EXP_OPEN = 3,\n\tBLK_ZONE_COND_CLOSED = 4,\n\tBLK_ZONE_COND_READONLY = 13,\n\tBLK_ZONE_COND_FULL = 14,\n\tBLK_ZONE_COND_OFFLINE = 15,\n};\n\nenum pstore_type_id {\n\tPSTORE_TYPE_DMESG = 0,\n\tPSTORE_TYPE_MCE = 1,\n\tPSTORE_TYPE_CONSOLE = 2,\n\tPSTORE_TYPE_FTRACE = 3,\n\tPSTORE_TYPE_PPC_RTAS = 4,\n\tPSTORE_TYPE_PPC_OF = 5,\n\tPSTORE_TYPE_PPC_COMMON = 6,\n\tPSTORE_TYPE_PMSG = 7,\n\tPSTORE_TYPE_PPC_OPAL = 8,\n\tPSTORE_TYPE_MAX = 9,\n};\n\nstruct pstore_info;\n\nstruct pstore_record {\n\tstruct pstore_info *psi;\n\tenum pstore_type_id type;\n\tu64 id;\n\tstruct timespec64 time;\n\tchar *buf;\n\tssize_t size;\n\tssize_t ecc_notice_size;\n\tint count;\n\tenum kmsg_dump_reason reason;\n\tunsigned int part;\n\tbool compressed;\n};\n\nstruct pstore_info {\n\tstruct module *owner;\n\tconst char *name;\n\tstruct semaphore buf_lock;\n\tchar *buf;\n\tsize_t bufsize;\n\tstruct mutex read_mutex;\n\tint flags;\n\tint max_reason;\n\tvoid *data;\n\tint (*open)(struct pstore_info *);\n\tint (*close)(struct pstore_info *);\n\tssize_t (*read)(struct pstore_record *);\n\tint (*write)(struct pstore_record *);\n\tint (*write_user)(struct pstore_record *, const char *);\n\tint (*erase)(struct pstore_record *);\n};\n\nstruct pstore_ftrace_record {\n\tlong unsigned int ip;\n\tlong unsigned int parent_ip;\n\tu64 ts;\n};\n\nstruct pstore_private {\n\tstruct list_head list;\n\tstruct dentry *dentry;\n\tstruct pstore_record *record;\n\tsize_t total_size;\n};\n\nstruct pstore_ftrace_seq_data {\n\tconst void *ptr;\n\tsize_t off;\n\tsize_t size;\n};\n\nenum {\n\tOpt_kmsg_bytes = 0,\n\tOpt_err___6 = 1,\n};\n\nstruct crypto_comp {\n\tstruct crypto_tfm base;\n};\n\nstruct pstore_zbackend {\n\tint (*zbufsize)(size_t);\n\tconst char *name;\n};\n\nstruct efi_variable {\n\tefi_char16_t VariableName[512];\n\tefi_guid_t VendorGuid;\n\tlong unsigned int DataSize;\n\t__u8 Data[1024];\n\tefi_status_t Status;\n\t__u32 Attributes;\n} __attribute__((packed));\n\nstruct efivar_entry {\n\tstruct efi_variable var;\n\tstruct list_head list;\n\tstruct kobject kobj;\n\tbool scanning;\n\tbool deleting;\n};\n\nstruct ipc64_perm {\n\t__kernel_key_t key;\n\t__kernel_uid32_t uid;\n\t__kernel_gid32_t gid;\n\t__kernel_uid32_t cuid;\n\t__kernel_gid32_t cgid;\n\t__kernel_mode_t mode;\n\tunsigned char __pad1[0];\n\tshort unsigned int seq;\n\tshort unsigned int __pad2;\n\t__kernel_ulong_t __unused1;\n\t__kernel_ulong_t __unused2;\n};\n\ntypedef s32 compat_key_t;\n\ntypedef u32 __compat_gid32_t;\n\nstruct compat_ipc64_perm {\n\tcompat_key_t key;\n\t__compat_uid32_t uid;\n\t__compat_gid32_t gid;\n\t__compat_uid32_t cuid;\n\t__compat_gid32_t cgid;\n\tshort unsigned int mode;\n\tshort unsigned int __pad1;\n\tshort unsigned int seq;\n\tshort unsigned int __pad2;\n\tcompat_ulong_t unused1;\n\tcompat_ulong_t unused2;\n};\n\nstruct compat_ipc_perm {\n\tkey_t key;\n\t__compat_uid_t uid;\n\t__compat_gid_t gid;\n\t__compat_uid_t cuid;\n\t__compat_gid_t cgid;\n\tcompat_mode_t mode;\n\tshort unsigned int seq;\n};\n\nstruct ipc_perm {\n\t__kernel_key_t key;\n\t__kernel_uid_t uid;\n\t__kernel_gid_t gid;\n\t__kernel_uid_t cuid;\n\t__kernel_gid_t cgid;\n\t__kernel_mode_t mode;\n\tshort unsigned int seq;\n};\n\nstruct ipc_params {\n\tkey_t key;\n\tint flg;\n\tunion {\n\t\tsize_t size;\n\t\tint nsems;\n\t} u;\n};\n\nstruct ipc_ops {\n\tint (*getnew)(struct ipc_namespace *, struct ipc_params *);\n\tint (*associate)(struct kern_ipc_perm *, int);\n\tint (*more_checks)(struct kern_ipc_perm *, struct ipc_params *);\n};\n\nstruct ipc_proc_iface {\n\tconst char *path;\n\tconst char *header;\n\tint ids;\n\tint (*show)(struct seq_file *, void *);\n};\n\nstruct ipc_proc_iter {\n\tstruct ipc_namespace *ns;\n\tstruct pid_namespace *pid_ns;\n\tstruct ipc_proc_iface *iface;\n};\n\nstruct msg_msgseg;\n\nstruct msg_msg {\n\tstruct list_head m_list;\n\tlong int m_type;\n\tsize_t m_ts;\n\tstruct msg_msgseg *next;\n\tvoid *security;\n};\n\nstruct msg_msgseg {\n\tstruct msg_msgseg *next;\n};\n\ntypedef int __kernel_ipc_pid_t;\n\nstruct msgbuf {\n\t__kernel_long_t mtype;\n\tchar mtext[1];\n};\n\nstruct msg;\n\nstruct msqid_ds {\n\tstruct ipc_perm msg_perm;\n\tstruct msg *msg_first;\n\tstruct msg *msg_last;\n\t__kernel_old_time_t msg_stime;\n\t__kernel_old_time_t msg_rtime;\n\t__kernel_old_time_t msg_ctime;\n\tlong unsigned int msg_lcbytes;\n\tlong unsigned int msg_lqbytes;\n\tshort unsigned int msg_cbytes;\n\tshort unsigned int msg_qnum;\n\tshort unsigned int msg_qbytes;\n\t__kernel_ipc_pid_t msg_lspid;\n\t__kernel_ipc_pid_t msg_lrpid;\n};\n\nstruct msqid64_ds {\n\tstruct ipc64_perm msg_perm;\n\tlong int msg_stime;\n\tlong int msg_rtime;\n\tlong int msg_ctime;\n\tlong unsigned int msg_cbytes;\n\tlong unsigned int msg_qnum;\n\tlong unsigned int msg_qbytes;\n\t__kernel_pid_t msg_lspid;\n\t__kernel_pid_t msg_lrpid;\n\tlong unsigned int __unused4;\n\tlong unsigned int __unused5;\n};\n\nstruct msginfo {\n\tint msgpool;\n\tint msgmap;\n\tint msgmax;\n\tint msgmnb;\n\tint msgmni;\n\tint msgssz;\n\tint msgtql;\n\tshort unsigned int msgseg;\n};\n\ntypedef u16 compat_ipc_pid_t;\n\nstruct compat_msqid64_ds {\n\tstruct compat_ipc64_perm msg_perm;\n\tcompat_ulong_t msg_stime;\n\tcompat_ulong_t msg_stime_high;\n\tcompat_ulong_t msg_rtime;\n\tcompat_ulong_t msg_rtime_high;\n\tcompat_ulong_t msg_ctime;\n\tcompat_ulong_t msg_ctime_high;\n\tcompat_ulong_t msg_cbytes;\n\tcompat_ulong_t msg_qnum;\n\tcompat_ulong_t msg_qbytes;\n\tcompat_pid_t msg_lspid;\n\tcompat_pid_t msg_lrpid;\n\tcompat_ulong_t __unused4;\n\tcompat_ulong_t __unused5;\n};\n\nstruct msg_queue {\n\tstruct kern_ipc_perm q_perm;\n\ttime64_t q_stime;\n\ttime64_t q_rtime;\n\ttime64_t q_ctime;\n\tlong unsigned int q_cbytes;\n\tlong unsigned int q_qnum;\n\tlong unsigned int q_qbytes;\n\tstruct pid *q_lspid;\n\tstruct pid *q_lrpid;\n\tstruct list_head q_messages;\n\tstruct list_head q_receivers;\n\tstruct list_head q_senders;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct msg_receiver {\n\tstruct list_head r_list;\n\tstruct task_struct *r_tsk;\n\tint r_mode;\n\tlong int r_msgtype;\n\tlong int r_maxsize;\n\tstruct msg_msg *r_msg;\n};\n\nstruct msg_sender {\n\tstruct list_head list;\n\tstruct task_struct *tsk;\n\tsize_t msgsz;\n};\n\nstruct compat_msqid_ds {\n\tstruct compat_ipc_perm msg_perm;\n\tcompat_uptr_t msg_first;\n\tcompat_uptr_t msg_last;\n\told_time32_t msg_stime;\n\told_time32_t msg_rtime;\n\told_time32_t msg_ctime;\n\tcompat_ulong_t msg_lcbytes;\n\tcompat_ulong_t msg_lqbytes;\n\tshort unsigned int msg_cbytes;\n\tshort unsigned int msg_qnum;\n\tshort unsigned int msg_qbytes;\n\tcompat_ipc_pid_t msg_lspid;\n\tcompat_ipc_pid_t msg_lrpid;\n};\n\nstruct compat_msgbuf {\n\tcompat_long_t mtype;\n\tchar mtext[1];\n};\n\nstruct sem;\n\nstruct sem_queue;\n\nstruct sem_undo;\n\nstruct semid_ds {\n\tstruct ipc_perm sem_perm;\n\t__kernel_old_time_t sem_otime;\n\t__kernel_old_time_t sem_ctime;\n\tstruct sem *sem_base;\n\tstruct sem_queue *sem_pending;\n\tstruct sem_queue **sem_pending_last;\n\tstruct sem_undo *undo;\n\tshort unsigned int sem_nsems;\n};\n\nstruct sem {\n\tint semval;\n\tstruct pid *sempid;\n\tspinlock_t lock;\n\tstruct list_head pending_alter;\n\tstruct list_head pending_const;\n\ttime64_t sem_otime;\n};\n\nstruct sem_queue {\n\tstruct list_head list;\n\tstruct task_struct *sleeper;\n\tstruct sem_undo *undo;\n\tstruct pid *pid;\n\tint status;\n\tstruct sembuf *sops;\n\tstruct sembuf *blocking;\n\tint nsops;\n\tbool alter;\n\tbool dupsop;\n};\n\nstruct sem_undo {\n\tstruct list_head list_proc;\n\tstruct callback_head rcu;\n\tstruct sem_undo_list *ulp;\n\tstruct list_head list_id;\n\tint semid;\n\tshort int *semadj;\n};\n\nstruct semid64_ds {\n\tstruct ipc64_perm sem_perm;\n\t__kernel_long_t sem_otime;\n\t__kernel_ulong_t __unused1;\n\t__kernel_long_t sem_ctime;\n\t__kernel_ulong_t __unused2;\n\t__kernel_ulong_t sem_nsems;\n\t__kernel_ulong_t __unused3;\n\t__kernel_ulong_t __unused4;\n};\n\nstruct seminfo {\n\tint semmap;\n\tint semmni;\n\tint semmns;\n\tint semmnu;\n\tint semmsl;\n\tint semopm;\n\tint semume;\n\tint semusz;\n\tint semvmx;\n\tint semaem;\n};\n\nstruct sem_undo_list {\n\trefcount_t refcnt;\n\tspinlock_t lock;\n\tstruct list_head list_proc;\n};\n\nstruct compat_semid64_ds {\n\tstruct compat_ipc64_perm sem_perm;\n\tcompat_ulong_t sem_otime;\n\tcompat_ulong_t sem_otime_high;\n\tcompat_ulong_t sem_ctime;\n\tcompat_ulong_t sem_ctime_high;\n\tcompat_ulong_t sem_nsems;\n\tcompat_ulong_t __unused3;\n\tcompat_ulong_t __unused4;\n};\n\nstruct sem_array {\n\tstruct kern_ipc_perm sem_perm;\n\ttime64_t sem_ctime;\n\tstruct list_head pending_alter;\n\tstruct list_head pending_const;\n\tstruct list_head list_id;\n\tint sem_nsems;\n\tint complex_count;\n\tunsigned int use_global_lock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct sem sems[0];\n};\n\nstruct compat_semid_ds {\n\tstruct compat_ipc_perm sem_perm;\n\told_time32_t sem_otime;\n\told_time32_t sem_ctime;\n\tcompat_uptr_t sem_base;\n\tcompat_uptr_t sem_pending;\n\tcompat_uptr_t sem_pending_last;\n\tcompat_uptr_t undo;\n\tshort unsigned int sem_nsems;\n};\n\nstruct shmid_ds {\n\tstruct ipc_perm shm_perm;\n\tint shm_segsz;\n\t__kernel_old_time_t shm_atime;\n\t__kernel_old_time_t shm_dtime;\n\t__kernel_old_time_t shm_ctime;\n\t__kernel_ipc_pid_t shm_cpid;\n\t__kernel_ipc_pid_t shm_lpid;\n\tshort unsigned int shm_nattch;\n\tshort unsigned int shm_unused;\n\tvoid *shm_unused2;\n\tvoid *shm_unused3;\n};\n\nstruct shmid64_ds {\n\tstruct ipc64_perm shm_perm;\n\tsize_t shm_segsz;\n\tlong int shm_atime;\n\tlong int shm_dtime;\n\tlong int shm_ctime;\n\t__kernel_pid_t shm_cpid;\n\t__kernel_pid_t shm_lpid;\n\tlong unsigned int shm_nattch;\n\tlong unsigned int __unused4;\n\tlong unsigned int __unused5;\n};\n\nstruct shminfo64 {\n\tlong unsigned int shmmax;\n\tlong unsigned int shmmin;\n\tlong unsigned int shmmni;\n\tlong unsigned int shmseg;\n\tlong unsigned int shmall;\n\tlong unsigned int __unused1;\n\tlong unsigned int __unused2;\n\tlong unsigned int __unused3;\n\tlong unsigned int __unused4;\n};\n\nstruct shminfo {\n\tint shmmax;\n\tint shmmin;\n\tint shmmni;\n\tint shmseg;\n\tint shmall;\n};\n\nstruct shm_info {\n\tint used_ids;\n\t__kernel_ulong_t shm_tot;\n\t__kernel_ulong_t shm_rss;\n\t__kernel_ulong_t shm_swp;\n\t__kernel_ulong_t swap_attempts;\n\t__kernel_ulong_t swap_successes;\n};\n\nstruct compat_shmid64_ds {\n\tstruct compat_ipc64_perm shm_perm;\n\tcompat_size_t shm_segsz;\n\tcompat_ulong_t shm_atime;\n\tcompat_ulong_t shm_atime_high;\n\tcompat_ulong_t shm_dtime;\n\tcompat_ulong_t shm_dtime_high;\n\tcompat_ulong_t shm_ctime;\n\tcompat_ulong_t shm_ctime_high;\n\tcompat_pid_t shm_cpid;\n\tcompat_pid_t shm_lpid;\n\tcompat_ulong_t shm_nattch;\n\tcompat_ulong_t __unused4;\n\tcompat_ulong_t __unused5;\n};\n\nstruct shmid_kernel {\n\tstruct kern_ipc_perm shm_perm;\n\tstruct file *shm_file;\n\tlong unsigned int shm_nattch;\n\tlong unsigned int shm_segsz;\n\ttime64_t shm_atim;\n\ttime64_t shm_dtim;\n\ttime64_t shm_ctim;\n\tstruct pid *shm_cprid;\n\tstruct pid *shm_lprid;\n\tstruct user_struct *mlock_user;\n\tstruct task_struct *shm_creator;\n\tstruct list_head shm_clist;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct shm_file_data {\n\tint id;\n\tstruct ipc_namespace *ns;\n\tstruct file *file;\n\tconst struct vm_operations_struct *vm_ops;\n};\n\nstruct compat_shmid_ds {\n\tstruct compat_ipc_perm shm_perm;\n\tint shm_segsz;\n\told_time32_t shm_atime;\n\told_time32_t shm_dtime;\n\told_time32_t shm_ctime;\n\tcompat_ipc_pid_t shm_cpid;\n\tcompat_ipc_pid_t shm_lpid;\n\tshort unsigned int shm_nattch;\n\tshort unsigned int shm_unused;\n\tcompat_uptr_t shm_unused2;\n\tcompat_uptr_t shm_unused3;\n};\n\nstruct compat_shminfo64 {\n\tcompat_ulong_t shmmax;\n\tcompat_ulong_t shmmin;\n\tcompat_ulong_t shmmni;\n\tcompat_ulong_t shmseg;\n\tcompat_ulong_t shmall;\n\tcompat_ulong_t __unused1;\n\tcompat_ulong_t __unused2;\n\tcompat_ulong_t __unused3;\n\tcompat_ulong_t __unused4;\n};\n\nstruct compat_shm_info {\n\tcompat_int_t used_ids;\n\tcompat_ulong_t shm_tot;\n\tcompat_ulong_t shm_rss;\n\tcompat_ulong_t shm_swp;\n\tcompat_ulong_t swap_attempts;\n\tcompat_ulong_t swap_successes;\n};\n\nstruct compat_ipc_kludge {\n\tcompat_uptr_t msgp;\n\tcompat_long_t msgtyp;\n};\n\nstruct mqueue_fs_context {\n\tstruct ipc_namespace *ipc_ns;\n};\n\nstruct posix_msg_tree_node {\n\tstruct rb_node rb_node;\n\tstruct list_head msg_list;\n\tint priority;\n};\n\nstruct ext_wait_queue {\n\tstruct task_struct *task;\n\tstruct list_head list;\n\tstruct msg_msg *msg;\n\tint state;\n};\n\nstruct mqueue_inode_info {\n\tspinlock_t lock;\n\tstruct inode vfs_inode;\n\twait_queue_head_t wait_q;\n\tstruct rb_root msg_tree;\n\tstruct rb_node *msg_tree_rightmost;\n\tstruct posix_msg_tree_node *node_cache;\n\tstruct mq_attr attr;\n\tstruct sigevent notify;\n\tstruct pid *notify_owner;\n\tu32 notify_self_exec_id;\n\tstruct user_namespace *notify_user_ns;\n\tstruct user_struct *user;\n\tstruct sock *notify_sock;\n\tstruct sk_buff *notify_cookie;\n\tstruct ext_wait_queue e_wait_q[2];\n\tlong unsigned int qsize;\n};\n\nstruct compat_mq_attr {\n\tcompat_long_t mq_flags;\n\tcompat_long_t mq_maxmsg;\n\tcompat_long_t mq_msgsize;\n\tcompat_long_t mq_curmsgs;\n\tcompat_long_t __reserved[4];\n};\n\nstruct key_user {\n\tstruct rb_node node;\n\tstruct mutex cons_lock;\n\tspinlock_t lock;\n\trefcount_t usage;\n\tatomic_t nkeys;\n\tatomic_t nikeys;\n\tkuid_t uid;\n\tint qnkeys;\n\tint qnbytes;\n};\n\nenum key_notification_subtype {\n\tNOTIFY_KEY_INSTANTIATED = 0,\n\tNOTIFY_KEY_UPDATED = 1,\n\tNOTIFY_KEY_LINKED = 2,\n\tNOTIFY_KEY_UNLINKED = 3,\n\tNOTIFY_KEY_CLEARED = 4,\n\tNOTIFY_KEY_REVOKED = 5,\n\tNOTIFY_KEY_INVALIDATED = 6,\n\tNOTIFY_KEY_SETATTR = 7,\n};\n\nstruct key_notification {\n\tstruct watch_notification___2 watch;\n\t__u32 key_id;\n\t__u32 aux;\n};\n\nstruct assoc_array_edit;\n\nstruct assoc_array_ops {\n\tlong unsigned int (*get_key_chunk)(const void *, int);\n\tlong unsigned int (*get_object_key_chunk)(const void *, int);\n\tbool (*compare_object)(const void *, const void *);\n\tint (*diff_objects)(const void *, const void *);\n\tvoid (*free_object)(void *);\n};\n\nstruct assoc_array_node {\n\tstruct assoc_array_ptr *back_pointer;\n\tu8 parent_slot;\n\tstruct assoc_array_ptr *slots[16];\n\tlong unsigned int nr_leaves_on_branch;\n};\n\nstruct assoc_array_shortcut {\n\tstruct assoc_array_ptr *back_pointer;\n\tint parent_slot;\n\tint skip_to_level;\n\tstruct assoc_array_ptr *next_node;\n\tlong unsigned int index_key[0];\n};\n\nstruct assoc_array_edit___2 {\n\tstruct callback_head rcu;\n\tstruct assoc_array *array;\n\tconst struct assoc_array_ops *ops;\n\tconst struct assoc_array_ops *ops_for_excised_subtree;\n\tstruct assoc_array_ptr *leaf;\n\tstruct assoc_array_ptr **leaf_p;\n\tstruct assoc_array_ptr *dead_leaf;\n\tstruct assoc_array_ptr *new_meta[3];\n\tstruct assoc_array_ptr *excised_meta[1];\n\tstruct assoc_array_ptr *excised_subtree;\n\tstruct assoc_array_ptr **set_backpointers[16];\n\tstruct assoc_array_ptr *set_backpointers_to;\n\tstruct assoc_array_node *adjust_count_on;\n\tlong int adjust_count_by;\n\tstruct {\n\t\tstruct assoc_array_ptr **ptr;\n\t\tstruct assoc_array_ptr *to;\n\t} set[2];\n\tstruct {\n\t\tu8 *p;\n\t\tu8 to;\n\t} set_parent_slot[1];\n\tu8 segment_cache[17];\n};\n\nstruct keyring_search_context {\n\tstruct keyring_index_key index_key;\n\tconst struct cred *cred;\n\tstruct key_match_data match_data;\n\tunsigned int flags;\n\tint (*iterator)(const void *, void *);\n\tint skipped_ret;\n\tbool possessed;\n\tkey_ref_t result;\n\ttime64_t now;\n};\n\nstruct keyring_read_iterator_context {\n\tsize_t buflen;\n\tsize_t count;\n\tkey_serial_t *buffer;\n};\n\nstruct keyctl_dh_params {\n\tunion {\n\t\t__s32 private;\n\t\t__s32 priv;\n\t};\n\t__s32 prime;\n\t__s32 base;\n};\n\nstruct keyctl_kdf_params {\n\tchar *hashname;\n\tchar *otherinfo;\n\t__u32 otherinfolen;\n\t__u32 __spare[8];\n};\n\nstruct keyctl_pkey_query {\n\t__u32 supported_ops;\n\t__u32 key_size;\n\t__u16 max_data_size;\n\t__u16 max_sig_size;\n\t__u16 max_enc_size;\n\t__u16 max_dec_size;\n\t__u32 __spare[10];\n};\n\nstruct keyctl_pkey_params {\n\t__s32 key_id;\n\t__u32 in_len;\n\tunion {\n\t\t__u32 out_len;\n\t\t__u32 in2_len;\n\t};\n\t__u32 __spare[7];\n};\n\nstruct request_key_auth {\n\tstruct callback_head rcu;\n\tstruct key *target_key;\n\tstruct key *dest_keyring;\n\tconst struct cred *cred;\n\tvoid *callout_info;\n\tsize_t callout_len;\n\tpid_t pid;\n\tchar op[8];\n};\n\nstruct compat_keyctl_kdf_params {\n\tcompat_uptr_t hashname;\n\tcompat_uptr_t otherinfo;\n\t__u32 otherinfolen;\n\t__u32 __spare[8];\n};\n\nstruct kpp_request {\n\tstruct crypto_async_request base;\n\tstruct scatterlist *src;\n\tstruct scatterlist *dst;\n\tunsigned int src_len;\n\tunsigned int dst_len;\n\tvoid *__ctx[0];\n};\n\nstruct crypto_kpp {\n\tstruct crypto_tfm base;\n};\n\nstruct kpp_alg {\n\tint (*set_secret)(struct crypto_kpp *, const void *, unsigned int);\n\tint (*generate_public_key)(struct kpp_request *);\n\tint (*compute_shared_secret)(struct kpp_request *);\n\tunsigned int (*max_size)(struct crypto_kpp *);\n\tint (*init)(struct crypto_kpp *);\n\tvoid (*exit)(struct crypto_kpp *);\n\tunsigned int reqsize;\n\tstruct crypto_alg base;\n};\n\nstruct dh {\n\tvoid *key;\n\tvoid *p;\n\tvoid *q;\n\tvoid *g;\n\tunsigned int key_size;\n\tunsigned int p_size;\n\tunsigned int q_size;\n\tunsigned int g_size;\n};\n\nstruct dh_completion {\n\tstruct completion completion;\n\tint err;\n};\n\nstruct kdf_sdesc {\n\tstruct shash_desc shash;\n\tchar ctx[0];\n};\n\nenum {\n\tOpt_err___7 = 0,\n\tOpt_enc = 1,\n\tOpt_hash = 2,\n};\n\nenum hash_algo {\n\tHASH_ALGO_MD4 = 0,\n\tHASH_ALGO_MD5 = 1,\n\tHASH_ALGO_SHA1 = 2,\n\tHASH_ALGO_RIPE_MD_160 = 3,\n\tHASH_ALGO_SHA256 = 4,\n\tHASH_ALGO_SHA384 = 5,\n\tHASH_ALGO_SHA512 = 6,\n\tHASH_ALGO_SHA224 = 7,\n\tHASH_ALGO_RIPE_MD_128 = 8,\n\tHASH_ALGO_RIPE_MD_256 = 9,\n\tHASH_ALGO_RIPE_MD_320 = 10,\n\tHASH_ALGO_WP_256 = 11,\n\tHASH_ALGO_WP_384 = 12,\n\tHASH_ALGO_WP_512 = 13,\n\tHASH_ALGO_TGR_128 = 14,\n\tHASH_ALGO_TGR_160 = 15,\n\tHASH_ALGO_TGR_192 = 16,\n\tHASH_ALGO_SM3_256 = 17,\n\tHASH_ALGO_STREEBOG_256 = 18,\n\tHASH_ALGO_STREEBOG_512 = 19,\n\tHASH_ALGO__LAST = 20,\n};\n\nenum tpm_duration {\n\tTPM_SHORT = 0,\n\tTPM_MEDIUM = 1,\n\tTPM_LONG = 2,\n\tTPM_LONG_LONG = 3,\n\tTPM_UNDEFINED = 4,\n\tTPM_NUM_DURATIONS = 4,\n};\n\nstruct encrypted_key_payload {\n\tstruct callback_head rcu;\n\tchar *format;\n\tchar *master_desc;\n\tchar *datalen;\n\tu8 *iv;\n\tu8 *encrypted_data;\n\tshort unsigned int datablob_len;\n\tshort unsigned int decrypted_datalen;\n\tshort unsigned int payload_datalen;\n\tshort unsigned int encrypted_key_format;\n\tu8 *decrypted_data;\n\tu8 payload_data[0];\n};\n\nstruct ecryptfs_session_key {\n\tu32 flags;\n\tu32 encrypted_key_size;\n\tu32 decrypted_key_size;\n\tu8 encrypted_key[512];\n\tu8 decrypted_key[64];\n};\n\nstruct ecryptfs_password {\n\tu32 password_bytes;\n\ts32 hash_algo;\n\tu32 hash_iterations;\n\tu32 session_key_encryption_key_bytes;\n\tu32 flags;\n\tu8 session_key_encryption_key[64];\n\tu8 signature[17];\n\tu8 salt[8];\n};\n\nstruct ecryptfs_private_key {\n\tu32 key_size;\n\tu32 data_len;\n\tu8 signature[17];\n\tchar pki_type[17];\n\tu8 data[0];\n};\n\nstruct ecryptfs_auth_tok {\n\tu16 version;\n\tu16 token_type;\n\tu32 flags;\n\tstruct ecryptfs_session_key session_key;\n\tu8 reserved[32];\n\tunion {\n\t\tstruct ecryptfs_password password;\n\t\tstruct ecryptfs_private_key private_key;\n\t} token;\n};\n\nenum {\n\tOpt_new = 0,\n\tOpt_load = 1,\n\tOpt_update = 2,\n\tOpt_err___8 = 3,\n};\n\nenum {\n\tOpt_default = 0,\n\tOpt_ecryptfs = 1,\n\tOpt_enc32 = 2,\n\tOpt_error = 3,\n};\n\nenum derived_key_type {\n\tENC_KEY = 0,\n\tAUTH_KEY = 1,\n};\n\nenum ecryptfs_token_types {\n\tECRYPTFS_PASSWORD = 0,\n\tECRYPTFS_PRIVATE_KEY = 1,\n};\n\nstruct vfs_cap_data {\n\t__le32 magic_etc;\n\tstruct {\n\t\t__le32 permitted;\n\t\t__le32 inheritable;\n\t} data[2];\n};\n\nstruct vfs_ns_cap_data {\n\t__le32 magic_etc;\n\tstruct {\n\t\t__le32 permitted;\n\t\t__le32 inheritable;\n\t} data[2];\n\t__le32 rootid;\n};\n\nstruct sctp_endpoint;\n\nunion security_list_options {\n\tint (*binder_set_context_mgr)(struct task_struct *);\n\tint (*binder_transaction)(struct task_struct *, struct task_struct *);\n\tint (*binder_transfer_binder)(struct task_struct *, struct task_struct *);\n\tint (*binder_transfer_file)(struct task_struct *, struct task_struct *, struct file *);\n\tint (*ptrace_access_check)(struct task_struct *, unsigned int);\n\tint (*ptrace_traceme)(struct task_struct *);\n\tint (*capget)(struct task_struct *, kernel_cap_t *, kernel_cap_t *, kernel_cap_t *);\n\tint (*capset)(struct cred *, const struct cred *, const kernel_cap_t *, const kernel_cap_t *, const kernel_cap_t *);\n\tint (*capable)(const struct cred *, struct user_namespace *, int, unsigned int);\n\tint (*quotactl)(int, int, int, struct super_block *);\n\tint (*quota_on)(struct dentry *);\n\tint (*syslog)(int);\n\tint (*settime)(const struct timespec64 *, const struct timezone *);\n\tint (*vm_enough_memory)(struct mm_struct *, long int);\n\tint (*bprm_creds_for_exec)(struct linux_binprm *);\n\tint (*bprm_creds_from_file)(struct linux_binprm *, struct file *);\n\tint (*bprm_check_security)(struct linux_binprm *);\n\tvoid (*bprm_committing_creds)(struct linux_binprm *);\n\tvoid (*bprm_committed_creds)(struct linux_binprm *);\n\tint (*fs_context_dup)(struct fs_context *, struct fs_context *);\n\tint (*fs_context_parse_param)(struct fs_context *, struct fs_parameter *);\n\tint (*sb_alloc_security)(struct super_block *);\n\tvoid (*sb_free_security)(struct super_block *);\n\tvoid (*sb_free_mnt_opts)(void *);\n\tint (*sb_eat_lsm_opts)(char *, void **);\n\tint (*sb_remount)(struct super_block *, void *);\n\tint (*sb_kern_mount)(struct super_block *);\n\tint (*sb_show_options)(struct seq_file *, struct super_block *);\n\tint (*sb_statfs)(struct dentry *);\n\tint (*sb_mount)(const char *, const struct path *, const char *, long unsigned int, void *);\n\tint (*sb_umount)(struct vfsmount *, int);\n\tint (*sb_pivotroot)(const struct path *, const struct path *);\n\tint (*sb_set_mnt_opts)(struct super_block *, void *, long unsigned int, long unsigned int *);\n\tint (*sb_clone_mnt_opts)(const struct super_block *, struct super_block *, long unsigned int, long unsigned int *);\n\tint (*sb_add_mnt_opt)(const char *, const char *, int, void **);\n\tint (*move_mount)(const struct path *, const struct path *);\n\tint (*dentry_init_security)(struct dentry *, int, const struct qstr *, void **, u32 *);\n\tint (*dentry_create_files_as)(struct dentry *, int, struct qstr *, const struct cred *, struct cred *);\n\tint (*path_notify)(const struct path *, u64, unsigned int);\n\tint (*inode_alloc_security)(struct inode *);\n\tvoid (*inode_free_security)(struct inode *);\n\tint (*inode_init_security)(struct inode *, struct inode *, const struct qstr *, const char **, void **, size_t *);\n\tint (*inode_create)(struct inode *, struct dentry *, umode_t);\n\tint (*inode_link)(struct dentry *, struct inode *, struct dentry *);\n\tint (*inode_unlink)(struct inode *, struct dentry *);\n\tint (*inode_symlink)(struct inode *, struct dentry *, const char *);\n\tint (*inode_mkdir)(struct inode *, struct dentry *, umode_t);\n\tint (*inode_rmdir)(struct inode *, struct dentry *);\n\tint (*inode_mknod)(struct inode *, struct dentry *, umode_t, dev_t);\n\tint (*inode_rename)(struct inode *, struct dentry *, struct inode *, struct dentry *);\n\tint (*inode_readlink)(struct dentry *);\n\tint (*inode_follow_link)(struct dentry *, struct inode *, bool);\n\tint (*inode_permission)(struct inode *, int);\n\tint (*inode_setattr)(struct dentry *, struct iattr *);\n\tint (*inode_getattr)(const struct path *);\n\tint (*inode_setxattr)(struct dentry *, const char *, const void *, size_t, int);\n\tvoid (*inode_post_setxattr)(struct dentry *, const char *, const void *, size_t, int);\n\tint (*inode_getxattr)(struct dentry *, const char *);\n\tint (*inode_listxattr)(struct dentry *);\n\tint (*inode_removexattr)(struct dentry *, const char *);\n\tint (*inode_need_killpriv)(struct dentry *);\n\tint (*inode_killpriv)(struct dentry *);\n\tint (*inode_getsecurity)(struct inode *, const char *, void **, bool);\n\tint (*inode_setsecurity)(struct inode *, const char *, const void *, size_t, int);\n\tint (*inode_listsecurity)(struct inode *, char *, size_t);\n\tvoid (*inode_getsecid)(struct inode *, u32 *);\n\tint (*inode_copy_up)(struct dentry *, struct cred **);\n\tint (*inode_copy_up_xattr)(const char *);\n\tint (*kernfs_init_security)(struct kernfs_node *, struct kernfs_node *);\n\tint (*file_permission)(struct file *, int);\n\tint (*file_alloc_security)(struct file *);\n\tvoid (*file_free_security)(struct file *);\n\tint (*file_ioctl)(struct file *, unsigned int, long unsigned int);\n\tint (*mmap_addr)(long unsigned int);\n\tint (*mmap_file)(struct file *, long unsigned int, long unsigned int, long unsigned int);\n\tint (*file_mprotect)(struct vm_area_struct *, long unsigned int, long unsigned int);\n\tint (*file_lock)(struct file *, unsigned int);\n\tint (*file_fcntl)(struct file *, unsigned int, long unsigned int);\n\tvoid (*file_set_fowner)(struct file *);\n\tint (*file_send_sigiotask)(struct task_struct *, struct fown_struct *, int);\n\tint (*file_receive)(struct file *);\n\tint (*file_open)(struct file *);\n\tint (*task_alloc)(struct task_struct *, long unsigned int);\n\tvoid (*task_free)(struct task_struct *);\n\tint (*cred_alloc_blank)(struct cred *, gfp_t);\n\tvoid (*cred_free)(struct cred *);\n\tint (*cred_prepare)(struct cred *, const struct cred *, gfp_t);\n\tvoid (*cred_transfer)(struct cred *, const struct cred *);\n\tvoid (*cred_getsecid)(const struct cred *, u32 *);\n\tint (*kernel_act_as)(struct cred *, u32);\n\tint (*kernel_create_files_as)(struct cred *, struct inode *);\n\tint (*kernel_module_request)(char *);\n\tint (*kernel_load_data)(enum kernel_load_data_id, bool);\n\tint (*kernel_post_load_data)(char *, loff_t, enum kernel_load_data_id, char *);\n\tint (*kernel_read_file)(struct file *, enum kernel_read_file_id, bool);\n\tint (*kernel_post_read_file)(struct file *, char *, loff_t, enum kernel_read_file_id);\n\tint (*task_fix_setuid)(struct cred *, const struct cred *, int);\n\tint (*task_fix_setgid)(struct cred *, const struct cred *, int);\n\tint (*task_setpgid)(struct task_struct *, pid_t);\n\tint (*task_getpgid)(struct task_struct *);\n\tint (*task_getsid)(struct task_struct *);\n\tvoid (*task_getsecid)(struct task_struct *, u32 *);\n\tint (*task_setnice)(struct task_struct *, int);\n\tint (*task_setioprio)(struct task_struct *, int);\n\tint (*task_getioprio)(struct task_struct *);\n\tint (*task_prlimit)(const struct cred *, const struct cred *, unsigned int);\n\tint (*task_setrlimit)(struct task_struct *, unsigned int, struct rlimit *);\n\tint (*task_setscheduler)(struct task_struct *);\n\tint (*task_getscheduler)(struct task_struct *);\n\tint (*task_movememory)(struct task_struct *);\n\tint (*task_kill)(struct task_struct *, struct kernel_siginfo *, int, const struct cred *);\n\tint (*task_prctl)(int, long unsigned int, long unsigned int, long unsigned int, long unsigned int);\n\tvoid (*task_to_inode)(struct task_struct *, struct inode *);\n\tint (*ipc_permission)(struct kern_ipc_perm *, short int);\n\tvoid (*ipc_getsecid)(struct kern_ipc_perm *, u32 *);\n\tint (*msg_msg_alloc_security)(struct msg_msg *);\n\tvoid (*msg_msg_free_security)(struct msg_msg *);\n\tint (*msg_queue_alloc_security)(struct kern_ipc_perm *);\n\tvoid (*msg_queue_free_security)(struct kern_ipc_perm *);\n\tint (*msg_queue_associate)(struct kern_ipc_perm *, int);\n\tint (*msg_queue_msgctl)(struct kern_ipc_perm *, int);\n\tint (*msg_queue_msgsnd)(struct kern_ipc_perm *, struct msg_msg *, int);\n\tint (*msg_queue_msgrcv)(struct kern_ipc_perm *, struct msg_msg *, struct task_struct *, long int, int);\n\tint (*shm_alloc_security)(struct kern_ipc_perm *);\n\tvoid (*shm_free_security)(struct kern_ipc_perm *);\n\tint (*shm_associate)(struct kern_ipc_perm *, int);\n\tint (*shm_shmctl)(struct kern_ipc_perm *, int);\n\tint (*shm_shmat)(struct kern_ipc_perm *, char *, int);\n\tint (*sem_alloc_security)(struct kern_ipc_perm *);\n\tvoid (*sem_free_security)(struct kern_ipc_perm *);\n\tint (*sem_associate)(struct kern_ipc_perm *, int);\n\tint (*sem_semctl)(struct kern_ipc_perm *, int);\n\tint (*sem_semop)(struct kern_ipc_perm *, struct sembuf *, unsigned int, int);\n\tint (*netlink_send)(struct sock *, struct sk_buff *);\n\tvoid (*d_instantiate)(struct dentry *, struct inode *);\n\tint (*getprocattr)(struct task_struct *, char *, char **);\n\tint (*setprocattr)(const char *, void *, size_t);\n\tint (*ismaclabel)(const char *);\n\tint (*secid_to_secctx)(u32, char **, u32 *);\n\tint (*secctx_to_secid)(const char *, u32, u32 *);\n\tvoid (*release_secctx)(char *, u32);\n\tvoid (*inode_invalidate_secctx)(struct inode *);\n\tint (*inode_notifysecctx)(struct inode *, void *, u32);\n\tint (*inode_setsecctx)(struct dentry *, void *, u32);\n\tint (*inode_getsecctx)(struct inode *, void **, u32 *);\n\tint (*post_notification)(const struct cred *, const struct cred *, struct watch_notification *);\n\tint (*watch_key)(struct key *);\n\tint (*unix_stream_connect)(struct sock *, struct sock *, struct sock *);\n\tint (*unix_may_send)(struct socket *, struct socket *);\n\tint (*socket_create)(int, int, int, int);\n\tint (*socket_post_create)(struct socket *, int, int, int, int);\n\tint (*socket_socketpair)(struct socket *, struct socket *);\n\tint (*socket_bind)(struct socket *, struct sockaddr *, int);\n\tint (*socket_connect)(struct socket *, struct sockaddr *, int);\n\tint (*socket_listen)(struct socket *, int);\n\tint (*socket_accept)(struct socket *, struct socket *);\n\tint (*socket_sendmsg)(struct socket *, struct msghdr *, int);\n\tint (*socket_recvmsg)(struct socket *, struct msghdr *, int, int);\n\tint (*socket_getsockname)(struct socket *);\n\tint (*socket_getpeername)(struct socket *);\n\tint (*socket_getsockopt)(struct socket *, int, int);\n\tint (*socket_setsockopt)(struct socket *, int, int);\n\tint (*socket_shutdown)(struct socket *, int);\n\tint (*socket_sock_rcv_skb)(struct sock *, struct sk_buff *);\n\tint (*socket_getpeersec_stream)(struct socket *, char *, int *, unsigned int);\n\tint (*socket_getpeersec_dgram)(struct socket *, struct sk_buff *, u32 *);\n\tint (*sk_alloc_security)(struct sock *, int, gfp_t);\n\tvoid (*sk_free_security)(struct sock *);\n\tvoid (*sk_clone_security)(const struct sock *, struct sock *);\n\tvoid (*sk_getsecid)(struct sock *, u32 *);\n\tvoid (*sock_graft)(struct sock *, struct socket *);\n\tint (*inet_conn_request)(const struct sock *, struct sk_buff *, struct request_sock *);\n\tvoid (*inet_csk_clone)(struct sock *, const struct request_sock *);\n\tvoid (*inet_conn_established)(struct sock *, struct sk_buff *);\n\tint (*secmark_relabel_packet)(u32);\n\tvoid (*secmark_refcount_inc)();\n\tvoid (*secmark_refcount_dec)();\n\tvoid (*req_classify_flow)(const struct request_sock *, struct flowi_common *);\n\tint (*tun_dev_alloc_security)(void **);\n\tvoid (*tun_dev_free_security)(void *);\n\tint (*tun_dev_create)();\n\tint (*tun_dev_attach_queue)(void *);\n\tint (*tun_dev_attach)(struct sock *, void *);\n\tint (*tun_dev_open)(void *);\n\tint (*sctp_assoc_request)(struct sctp_endpoint *, struct sk_buff *);\n\tint (*sctp_bind_connect)(struct sock *, int, struct sockaddr *, int);\n\tvoid (*sctp_sk_clone)(struct sctp_endpoint *, struct sock *, struct sock *);\n\tint (*ib_pkey_access)(void *, u64, u16);\n\tint (*ib_endport_manage_subnet)(void *, const char *, u8);\n\tint (*ib_alloc_security)(void **);\n\tvoid (*ib_free_security)(void *);\n\tint (*xfrm_policy_alloc_security)(struct xfrm_sec_ctx **, struct xfrm_user_sec_ctx *, gfp_t);\n\tint (*xfrm_policy_clone_security)(struct xfrm_sec_ctx *, struct xfrm_sec_ctx **);\n\tvoid (*xfrm_policy_free_security)(struct xfrm_sec_ctx *);\n\tint (*xfrm_policy_delete_security)(struct xfrm_sec_ctx *);\n\tint (*xfrm_state_alloc)(struct xfrm_state *, struct xfrm_user_sec_ctx *);\n\tint (*xfrm_state_alloc_acquire)(struct xfrm_state *, struct xfrm_sec_ctx *, u32);\n\tvoid (*xfrm_state_free_security)(struct xfrm_state *);\n\tint (*xfrm_state_delete_security)(struct xfrm_state *);\n\tint (*xfrm_policy_lookup)(struct xfrm_sec_ctx *, u32, u8);\n\tint (*xfrm_state_pol_flow_match)(struct xfrm_state *, struct xfrm_policy *, const struct flowi_common *);\n\tint (*xfrm_decode_session)(struct sk_buff *, u32 *, int);\n\tint (*key_alloc)(struct key *, const struct cred *, long unsigned int);\n\tvoid (*key_free)(struct key *);\n\tint (*key_permission)(key_ref_t, const struct cred *, enum key_need_perm);\n\tint (*key_getsecurity)(struct key *, char **);\n\tint (*audit_rule_init)(u32, u32, char *, void **);\n\tint (*audit_rule_known)(struct audit_krule *);\n\tint (*audit_rule_match)(u32, u32, u32, void *);\n\tvoid (*audit_rule_free)(void *);\n\tint (*bpf)(int, union bpf_attr *, unsigned int);\n\tint (*bpf_map)(struct bpf_map *, fmode_t);\n\tint (*bpf_prog)(struct bpf_prog *);\n\tint (*bpf_map_alloc_security)(struct bpf_map *);\n\tvoid (*bpf_map_free_security)(struct bpf_map *);\n\tint (*bpf_prog_alloc_security)(struct bpf_prog_aux *);\n\tvoid (*bpf_prog_free_security)(struct bpf_prog_aux *);\n\tint (*locked_down)(enum lockdown_reason);\n\tint (*lock_kernel_down)(const char *, enum lockdown_reason);\n\tint (*perf_event_open)(struct perf_event_attr *, int);\n\tint (*perf_event_alloc)(struct perf_event *);\n\tvoid (*perf_event_free)(struct perf_event *);\n\tint (*perf_event_read)(struct perf_event *);\n\tint (*perf_event_write)(struct perf_event *);\n};\n\nstruct security_hook_heads {\n\tstruct hlist_head binder_set_context_mgr;\n\tstruct hlist_head binder_transaction;\n\tstruct hlist_head binder_transfer_binder;\n\tstruct hlist_head binder_transfer_file;\n\tstruct hlist_head ptrace_access_check;\n\tstruct hlist_head ptrace_traceme;\n\tstruct hlist_head capget;\n\tstruct hlist_head capset;\n\tstruct hlist_head capable;\n\tstruct hlist_head quotactl;\n\tstruct hlist_head quota_on;\n\tstruct hlist_head syslog;\n\tstruct hlist_head settime;\n\tstruct hlist_head vm_enough_memory;\n\tstruct hlist_head bprm_creds_for_exec;\n\tstruct hlist_head bprm_creds_from_file;\n\tstruct hlist_head bprm_check_security;\n\tstruct hlist_head bprm_committing_creds;\n\tstruct hlist_head bprm_committed_creds;\n\tstruct hlist_head fs_context_dup;\n\tstruct hlist_head fs_context_parse_param;\n\tstruct hlist_head sb_alloc_security;\n\tstruct hlist_head sb_free_security;\n\tstruct hlist_head sb_free_mnt_opts;\n\tstruct hlist_head sb_eat_lsm_opts;\n\tstruct hlist_head sb_remount;\n\tstruct hlist_head sb_kern_mount;\n\tstruct hlist_head sb_show_options;\n\tstruct hlist_head sb_statfs;\n\tstruct hlist_head sb_mount;\n\tstruct hlist_head sb_umount;\n\tstruct hlist_head sb_pivotroot;\n\tstruct hlist_head sb_set_mnt_opts;\n\tstruct hlist_head sb_clone_mnt_opts;\n\tstruct hlist_head sb_add_mnt_opt;\n\tstruct hlist_head move_mount;\n\tstruct hlist_head dentry_init_security;\n\tstruct hlist_head dentry_create_files_as;\n\tstruct hlist_head path_notify;\n\tstruct hlist_head inode_alloc_security;\n\tstruct hlist_head inode_free_security;\n\tstruct hlist_head inode_init_security;\n\tstruct hlist_head inode_create;\n\tstruct hlist_head inode_link;\n\tstruct hlist_head inode_unlink;\n\tstruct hlist_head inode_symlink;\n\tstruct hlist_head inode_mkdir;\n\tstruct hlist_head inode_rmdir;\n\tstruct hlist_head inode_mknod;\n\tstruct hlist_head inode_rename;\n\tstruct hlist_head inode_readlink;\n\tstruct hlist_head inode_follow_link;\n\tstruct hlist_head inode_permission;\n\tstruct hlist_head inode_setattr;\n\tstruct hlist_head inode_getattr;\n\tstruct hlist_head inode_setxattr;\n\tstruct hlist_head inode_post_setxattr;\n\tstruct hlist_head inode_getxattr;\n\tstruct hlist_head inode_listxattr;\n\tstruct hlist_head inode_removexattr;\n\tstruct hlist_head inode_need_killpriv;\n\tstruct hlist_head inode_killpriv;\n\tstruct hlist_head inode_getsecurity;\n\tstruct hlist_head inode_setsecurity;\n\tstruct hlist_head inode_listsecurity;\n\tstruct hlist_head inode_getsecid;\n\tstruct hlist_head inode_copy_up;\n\tstruct hlist_head inode_copy_up_xattr;\n\tstruct hlist_head kernfs_init_security;\n\tstruct hlist_head file_permission;\n\tstruct hlist_head file_alloc_security;\n\tstruct hlist_head file_free_security;\n\tstruct hlist_head file_ioctl;\n\tstruct hlist_head mmap_addr;\n\tstruct hlist_head mmap_file;\n\tstruct hlist_head file_mprotect;\n\tstruct hlist_head file_lock;\n\tstruct hlist_head file_fcntl;\n\tstruct hlist_head file_set_fowner;\n\tstruct hlist_head file_send_sigiotask;\n\tstruct hlist_head file_receive;\n\tstruct hlist_head file_open;\n\tstruct hlist_head task_alloc;\n\tstruct hlist_head task_free;\n\tstruct hlist_head cred_alloc_blank;\n\tstruct hlist_head cred_free;\n\tstruct hlist_head cred_prepare;\n\tstruct hlist_head cred_transfer;\n\tstruct hlist_head cred_getsecid;\n\tstruct hlist_head kernel_act_as;\n\tstruct hlist_head kernel_create_files_as;\n\tstruct hlist_head kernel_module_request;\n\tstruct hlist_head kernel_load_data;\n\tstruct hlist_head kernel_post_load_data;\n\tstruct hlist_head kernel_read_file;\n\tstruct hlist_head kernel_post_read_file;\n\tstruct hlist_head task_fix_setuid;\n\tstruct hlist_head task_fix_setgid;\n\tstruct hlist_head task_setpgid;\n\tstruct hlist_head task_getpgid;\n\tstruct hlist_head task_getsid;\n\tstruct hlist_head task_getsecid;\n\tstruct hlist_head task_setnice;\n\tstruct hlist_head task_setioprio;\n\tstruct hlist_head task_getioprio;\n\tstruct hlist_head task_prlimit;\n\tstruct hlist_head task_setrlimit;\n\tstruct hlist_head task_setscheduler;\n\tstruct hlist_head task_getscheduler;\n\tstruct hlist_head task_movememory;\n\tstruct hlist_head task_kill;\n\tstruct hlist_head task_prctl;\n\tstruct hlist_head task_to_inode;\n\tstruct hlist_head ipc_permission;\n\tstruct hlist_head ipc_getsecid;\n\tstruct hlist_head msg_msg_alloc_security;\n\tstruct hlist_head msg_msg_free_security;\n\tstruct hlist_head msg_queue_alloc_security;\n\tstruct hlist_head msg_queue_free_security;\n\tstruct hlist_head msg_queue_associate;\n\tstruct hlist_head msg_queue_msgctl;\n\tstruct hlist_head msg_queue_msgsnd;\n\tstruct hlist_head msg_queue_msgrcv;\n\tstruct hlist_head shm_alloc_security;\n\tstruct hlist_head shm_free_security;\n\tstruct hlist_head shm_associate;\n\tstruct hlist_head shm_shmctl;\n\tstruct hlist_head shm_shmat;\n\tstruct hlist_head sem_alloc_security;\n\tstruct hlist_head sem_free_security;\n\tstruct hlist_head sem_associate;\n\tstruct hlist_head sem_semctl;\n\tstruct hlist_head sem_semop;\n\tstruct hlist_head netlink_send;\n\tstruct hlist_head d_instantiate;\n\tstruct hlist_head getprocattr;\n\tstruct hlist_head setprocattr;\n\tstruct hlist_head ismaclabel;\n\tstruct hlist_head secid_to_secctx;\n\tstruct hlist_head secctx_to_secid;\n\tstruct hlist_head release_secctx;\n\tstruct hlist_head inode_invalidate_secctx;\n\tstruct hlist_head inode_notifysecctx;\n\tstruct hlist_head inode_setsecctx;\n\tstruct hlist_head inode_getsecctx;\n\tstruct hlist_head post_notification;\n\tstruct hlist_head watch_key;\n\tstruct hlist_head unix_stream_connect;\n\tstruct hlist_head unix_may_send;\n\tstruct hlist_head socket_create;\n\tstruct hlist_head socket_post_create;\n\tstruct hlist_head socket_socketpair;\n\tstruct hlist_head socket_bind;\n\tstruct hlist_head socket_connect;\n\tstruct hlist_head socket_listen;\n\tstruct hlist_head socket_accept;\n\tstruct hlist_head socket_sendmsg;\n\tstruct hlist_head socket_recvmsg;\n\tstruct hlist_head socket_getsockname;\n\tstruct hlist_head socket_getpeername;\n\tstruct hlist_head socket_getsockopt;\n\tstruct hlist_head socket_setsockopt;\n\tstruct hlist_head socket_shutdown;\n\tstruct hlist_head socket_sock_rcv_skb;\n\tstruct hlist_head socket_getpeersec_stream;\n\tstruct hlist_head socket_getpeersec_dgram;\n\tstruct hlist_head sk_alloc_security;\n\tstruct hlist_head sk_free_security;\n\tstruct hlist_head sk_clone_security;\n\tstruct hlist_head sk_getsecid;\n\tstruct hlist_head sock_graft;\n\tstruct hlist_head inet_conn_request;\n\tstruct hlist_head inet_csk_clone;\n\tstruct hlist_head inet_conn_established;\n\tstruct hlist_head secmark_relabel_packet;\n\tstruct hlist_head secmark_refcount_inc;\n\tstruct hlist_head secmark_refcount_dec;\n\tstruct hlist_head req_classify_flow;\n\tstruct hlist_head tun_dev_alloc_security;\n\tstruct hlist_head tun_dev_free_security;\n\tstruct hlist_head tun_dev_create;\n\tstruct hlist_head tun_dev_attach_queue;\n\tstruct hlist_head tun_dev_attach;\n\tstruct hlist_head tun_dev_open;\n\tstruct hlist_head sctp_assoc_request;\n\tstruct hlist_head sctp_bind_connect;\n\tstruct hlist_head sctp_sk_clone;\n\tstruct hlist_head ib_pkey_access;\n\tstruct hlist_head ib_endport_manage_subnet;\n\tstruct hlist_head ib_alloc_security;\n\tstruct hlist_head ib_free_security;\n\tstruct hlist_head xfrm_policy_alloc_security;\n\tstruct hlist_head xfrm_policy_clone_security;\n\tstruct hlist_head xfrm_policy_free_security;\n\tstruct hlist_head xfrm_policy_delete_security;\n\tstruct hlist_head xfrm_state_alloc;\n\tstruct hlist_head xfrm_state_alloc_acquire;\n\tstruct hlist_head xfrm_state_free_security;\n\tstruct hlist_head xfrm_state_delete_security;\n\tstruct hlist_head xfrm_policy_lookup;\n\tstruct hlist_head xfrm_state_pol_flow_match;\n\tstruct hlist_head xfrm_decode_session;\n\tstruct hlist_head key_alloc;\n\tstruct hlist_head key_free;\n\tstruct hlist_head key_permission;\n\tstruct hlist_head key_getsecurity;\n\tstruct hlist_head audit_rule_init;\n\tstruct hlist_head audit_rule_known;\n\tstruct hlist_head audit_rule_match;\n\tstruct hlist_head audit_rule_free;\n\tstruct hlist_head bpf;\n\tstruct hlist_head bpf_map;\n\tstruct hlist_head bpf_prog;\n\tstruct hlist_head bpf_map_alloc_security;\n\tstruct hlist_head bpf_map_free_security;\n\tstruct hlist_head bpf_prog_alloc_security;\n\tstruct hlist_head bpf_prog_free_security;\n\tstruct hlist_head locked_down;\n\tstruct hlist_head lock_kernel_down;\n\tstruct hlist_head perf_event_open;\n\tstruct hlist_head perf_event_alloc;\n\tstruct hlist_head perf_event_free;\n\tstruct hlist_head perf_event_read;\n\tstruct hlist_head perf_event_write;\n};\n\nstruct security_hook_list {\n\tstruct hlist_node list;\n\tstruct hlist_head *head;\n\tunion security_list_options hook;\n\tchar *lsm;\n};\n\nenum lsm_order {\n\tLSM_ORDER_FIRST = 4294967295,\n\tLSM_ORDER_MUTABLE = 0,\n};\n\nstruct lsm_info {\n\tconst char *name;\n\tenum lsm_order order;\n\tlong unsigned int flags;\n\tint *enabled;\n\tint (*init)();\n\tstruct lsm_blob_sizes *blobs;\n};\n\nenum lsm_event {\n\tLSM_POLICY_CHANGE = 0,\n};\n\nstruct ethhdr {\n\tunsigned char h_dest[6];\n\tunsigned char h_source[6];\n\t__be16 h_proto;\n};\n\nstruct ethtool_drvinfo {\n\t__u32 cmd;\n\tchar driver[32];\n\tchar version[32];\n\tchar fw_version[32];\n\tchar bus_info[32];\n\tchar erom_version[32];\n\tchar reserved2[12];\n\t__u32 n_priv_flags;\n\t__u32 n_stats;\n\t__u32 testinfo_len;\n\t__u32 eedump_len;\n\t__u32 regdump_len;\n};\n\nstruct ethtool_wolinfo {\n\t__u32 cmd;\n\t__u32 supported;\n\t__u32 wolopts;\n\t__u8 sopass[6];\n};\n\nstruct ethtool_tunable {\n\t__u32 cmd;\n\t__u32 id;\n\t__u32 type_id;\n\t__u32 len;\n\tvoid *data[0];\n};\n\nstruct ethtool_regs {\n\t__u32 cmd;\n\t__u32 version;\n\t__u32 len;\n\t__u8 data[0];\n};\n\nstruct ethtool_eeprom {\n\t__u32 cmd;\n\t__u32 magic;\n\t__u32 offset;\n\t__u32 len;\n\t__u8 data[0];\n};\n\nstruct ethtool_eee {\n\t__u32 cmd;\n\t__u32 supported;\n\t__u32 advertised;\n\t__u32 lp_advertised;\n\t__u32 eee_active;\n\t__u32 eee_enabled;\n\t__u32 tx_lpi_enabled;\n\t__u32 tx_lpi_timer;\n\t__u32 reserved[2];\n};\n\nstruct ethtool_modinfo {\n\t__u32 cmd;\n\t__u32 type;\n\t__u32 eeprom_len;\n\t__u32 reserved[8];\n};\n\nstruct ethtool_coalesce {\n\t__u32 cmd;\n\t__u32 rx_coalesce_usecs;\n\t__u32 rx_max_coalesced_frames;\n\t__u32 rx_coalesce_usecs_irq;\n\t__u32 rx_max_coalesced_frames_irq;\n\t__u32 tx_coalesce_usecs;\n\t__u32 tx_max_coalesced_frames;\n\t__u32 tx_coalesce_usecs_irq;\n\t__u32 tx_max_coalesced_frames_irq;\n\t__u32 stats_block_coalesce_usecs;\n\t__u32 use_adaptive_rx_coalesce;\n\t__u32 use_adaptive_tx_coalesce;\n\t__u32 pkt_rate_low;\n\t__u32 rx_coalesce_usecs_low;\n\t__u32 rx_max_coalesced_frames_low;\n\t__u32 tx_coalesce_usecs_low;\n\t__u32 tx_max_coalesced_frames_low;\n\t__u32 pkt_rate_high;\n\t__u32 rx_coalesce_usecs_high;\n\t__u32 rx_max_coalesced_frames_high;\n\t__u32 tx_coalesce_usecs_high;\n\t__u32 tx_max_coalesced_frames_high;\n\t__u32 rate_sample_interval;\n};\n\nstruct ethtool_ringparam {\n\t__u32 cmd;\n\t__u32 rx_max_pending;\n\t__u32 rx_mini_max_pending;\n\t__u32 rx_jumbo_max_pending;\n\t__u32 tx_max_pending;\n\t__u32 rx_pending;\n\t__u32 rx_mini_pending;\n\t__u32 rx_jumbo_pending;\n\t__u32 tx_pending;\n};\n\nstruct ethtool_channels {\n\t__u32 cmd;\n\t__u32 max_rx;\n\t__u32 max_tx;\n\t__u32 max_other;\n\t__u32 max_combined;\n\t__u32 rx_count;\n\t__u32 tx_count;\n\t__u32 other_count;\n\t__u32 combined_count;\n};\n\nstruct ethtool_pauseparam {\n\t__u32 cmd;\n\t__u32 autoneg;\n\t__u32 rx_pause;\n\t__u32 tx_pause;\n};\n\nenum ethtool_link_ext_state {\n\tETHTOOL_LINK_EXT_STATE_AUTONEG = 0,\n\tETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE = 1,\n\tETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH = 2,\n\tETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY = 3,\n\tETHTOOL_LINK_EXT_STATE_NO_CABLE = 4,\n\tETHTOOL_LINK_EXT_STATE_CABLE_ISSUE = 5,\n\tETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE = 6,\n\tETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE = 7,\n\tETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED = 8,\n\tETHTOOL_LINK_EXT_STATE_OVERHEAT = 9,\n};\n\nenum ethtool_link_ext_substate_autoneg {\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED = 2,\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED = 3,\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE = 4,\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE = 5,\n\tETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD = 6,\n};\n\nenum ethtool_link_ext_substate_link_training {\n\tETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,\n\tETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT = 2,\n\tETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY = 3,\n\tETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT = 4,\n};\n\nenum ethtool_link_ext_substate_link_logical_mismatch {\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK = 2,\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS = 3,\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED = 4,\n\tETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED = 5,\n};\n\nenum ethtool_link_ext_substate_bad_signal_integrity {\n\tETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,\n\tETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE = 2,\n};\n\nenum ethtool_link_ext_substate_cable_issue {\n\tETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,\n\tETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE = 2,\n};\n\nstruct ethtool_test {\n\t__u32 cmd;\n\t__u32 flags;\n\t__u32 reserved;\n\t__u32 len;\n\t__u64 data[0];\n};\n\nstruct ethtool_stats {\n\t__u32 cmd;\n\t__u32 n_stats;\n\t__u64 data[0];\n};\n\nstruct ethtool_tcpip4_spec {\n\t__be32 ip4src;\n\t__be32 ip4dst;\n\t__be16 psrc;\n\t__be16 pdst;\n\t__u8 tos;\n};\n\nstruct ethtool_ah_espip4_spec {\n\t__be32 ip4src;\n\t__be32 ip4dst;\n\t__be32 spi;\n\t__u8 tos;\n};\n\nstruct ethtool_usrip4_spec {\n\t__be32 ip4src;\n\t__be32 ip4dst;\n\t__be32 l4_4_bytes;\n\t__u8 tos;\n\t__u8 ip_ver;\n\t__u8 proto;\n};\n\nstruct ethtool_tcpip6_spec {\n\t__be32 ip6src[4];\n\t__be32 ip6dst[4];\n\t__be16 psrc;\n\t__be16 pdst;\n\t__u8 tclass;\n};\n\nstruct ethtool_ah_espip6_spec {\n\t__be32 ip6src[4];\n\t__be32 ip6dst[4];\n\t__be32 spi;\n\t__u8 tclass;\n};\n\nstruct ethtool_usrip6_spec {\n\t__be32 ip6src[4];\n\t__be32 ip6dst[4];\n\t__be32 l4_4_bytes;\n\t__u8 tclass;\n\t__u8 l4_proto;\n};\n\nunion ethtool_flow_union {\n\tstruct ethtool_tcpip4_spec tcp_ip4_spec;\n\tstruct ethtool_tcpip4_spec udp_ip4_spec;\n\tstruct ethtool_tcpip4_spec sctp_ip4_spec;\n\tstruct ethtool_ah_espip4_spec ah_ip4_spec;\n\tstruct ethtool_ah_espip4_spec esp_ip4_spec;\n\tstruct ethtool_usrip4_spec usr_ip4_spec;\n\tstruct ethtool_tcpip6_spec tcp_ip6_spec;\n\tstruct ethtool_tcpip6_spec udp_ip6_spec;\n\tstruct ethtool_tcpip6_spec sctp_ip6_spec;\n\tstruct ethtool_ah_espip6_spec ah_ip6_spec;\n\tstruct ethtool_ah_espip6_spec esp_ip6_spec;\n\tstruct ethtool_usrip6_spec usr_ip6_spec;\n\tstruct ethhdr ether_spec;\n\t__u8 hdata[52];\n};\n\nstruct ethtool_flow_ext {\n\t__u8 padding[2];\n\tunsigned char h_dest[6];\n\t__be16 vlan_etype;\n\t__be16 vlan_tci;\n\t__be32 data[2];\n};\n\nstruct ethtool_rx_flow_spec {\n\t__u32 flow_type;\n\tunion ethtool_flow_union h_u;\n\tstruct ethtool_flow_ext h_ext;\n\tunion ethtool_flow_union m_u;\n\tstruct ethtool_flow_ext m_ext;\n\t__u64 ring_cookie;\n\t__u32 location;\n};\n\nstruct ethtool_rxnfc {\n\t__u32 cmd;\n\t__u32 flow_type;\n\t__u64 data;\n\tstruct ethtool_rx_flow_spec fs;\n\tunion {\n\t\t__u32 rule_cnt;\n\t\t__u32 rss_context;\n\t};\n\t__u32 rule_locs[0];\n};\n\nstruct ethtool_flash {\n\t__u32 cmd;\n\t__u32 region;\n\tchar data[128];\n};\n\nstruct ethtool_dump {\n\t__u32 cmd;\n\t__u32 version;\n\t__u32 flag;\n\t__u32 len;\n\t__u8 data[0];\n};\n\nstruct ethtool_ts_info {\n\t__u32 cmd;\n\t__u32 so_timestamping;\n\t__s32 phc_index;\n\t__u32 tx_types;\n\t__u32 tx_reserved[3];\n\t__u32 rx_filters;\n\t__u32 rx_reserved[3];\n};\n\nstruct ethtool_fecparam {\n\t__u32 cmd;\n\t__u32 active_fec;\n\t__u32 fec;\n\t__u32 reserved;\n};\n\nenum ethtool_link_mode_bit_indices {\n\tETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,\n\tETHTOOL_LINK_MODE_10baseT_Full_BIT = 1,\n\tETHTOOL_LINK_MODE_100baseT_Half_BIT = 2,\n\tETHTOOL_LINK_MODE_100baseT_Full_BIT = 3,\n\tETHTOOL_LINK_MODE_1000baseT_Half_BIT = 4,\n\tETHTOOL_LINK_MODE_1000baseT_Full_BIT = 5,\n\tETHTOOL_LINK_MODE_Autoneg_BIT = 6,\n\tETHTOOL_LINK_MODE_TP_BIT = 7,\n\tETHTOOL_LINK_MODE_AUI_BIT = 8,\n\tETHTOOL_LINK_MODE_MII_BIT = 9,\n\tETHTOOL_LINK_MODE_FIBRE_BIT = 10,\n\tETHTOOL_LINK_MODE_BNC_BIT = 11,\n\tETHTOOL_LINK_MODE_10000baseT_Full_BIT = 12,\n\tETHTOOL_LINK_MODE_Pause_BIT = 13,\n\tETHTOOL_LINK_MODE_Asym_Pause_BIT = 14,\n\tETHTOOL_LINK_MODE_2500baseX_Full_BIT = 15,\n\tETHTOOL_LINK_MODE_Backplane_BIT = 16,\n\tETHTOOL_LINK_MODE_1000baseKX_Full_BIT = 17,\n\tETHTOOL_LINK_MODE_10000baseKX4_Full_BIT = 18,\n\tETHTOOL_LINK_MODE_10000baseKR_Full_BIT = 19,\n\tETHTOOL_LINK_MODE_10000baseR_FEC_BIT = 20,\n\tETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT = 21,\n\tETHTOOL_LINK_MODE_20000baseKR2_Full_BIT = 22,\n\tETHTOOL_LINK_MODE_40000baseKR4_Full_BIT = 23,\n\tETHTOOL_LINK_MODE_40000baseCR4_Full_BIT = 24,\n\tETHTOOL_LINK_MODE_40000baseSR4_Full_BIT = 25,\n\tETHTOOL_LINK_MODE_40000baseLR4_Full_BIT = 26,\n\tETHTOOL_LINK_MODE_56000baseKR4_Full_BIT = 27,\n\tETHTOOL_LINK_MODE_56000baseCR4_Full_BIT = 28,\n\tETHTOOL_LINK_MODE_56000baseSR4_Full_BIT = 29,\n\tETHTOOL_LINK_MODE_56000baseLR4_Full_BIT = 30,\n\tETHTOOL_LINK_MODE_25000baseCR_Full_BIT = 31,\n\tETHTOOL_LINK_MODE_25000baseKR_Full_BIT = 32,\n\tETHTOOL_LINK_MODE_25000baseSR_Full_BIT = 33,\n\tETHTOOL_LINK_MODE_50000baseCR2_Full_BIT = 34,\n\tETHTOOL_LINK_MODE_50000baseKR2_Full_BIT = 35,\n\tETHTOOL_LINK_MODE_100000baseKR4_Full_BIT = 36,\n\tETHTOOL_LINK_MODE_100000baseSR4_Full_BIT = 37,\n\tETHTOOL_LINK_MODE_100000baseCR4_Full_BIT = 38,\n\tETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT = 39,\n\tETHTOOL_LINK_MODE_50000baseSR2_Full_BIT = 40,\n\tETHTOOL_LINK_MODE_1000baseX_Full_BIT = 41,\n\tETHTOOL_LINK_MODE_10000baseCR_Full_BIT = 42,\n\tETHTOOL_LINK_MODE_10000baseSR_Full_BIT = 43,\n\tETHTOOL_LINK_MODE_10000baseLR_Full_BIT = 44,\n\tETHTOOL_LINK_MODE_10000baseLRM_Full_BIT = 45,\n\tETHTOOL_LINK_MODE_10000baseER_Full_BIT = 46,\n\tETHTOOL_LINK_MODE_2500baseT_Full_BIT = 47,\n\tETHTOOL_LINK_MODE_5000baseT_Full_BIT = 48,\n\tETHTOOL_LINK_MODE_FEC_NONE_BIT = 49,\n\tETHTOOL_LINK_MODE_FEC_RS_BIT = 50,\n\tETHTOOL_LINK_MODE_FEC_BASER_BIT = 51,\n\tETHTOOL_LINK_MODE_50000baseKR_Full_BIT = 52,\n\tETHTOOL_LINK_MODE_50000baseSR_Full_BIT = 53,\n\tETHTOOL_LINK_MODE_50000baseCR_Full_BIT = 54,\n\tETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT = 55,\n\tETHTOOL_LINK_MODE_50000baseDR_Full_BIT = 56,\n\tETHTOOL_LINK_MODE_100000baseKR2_Full_BIT = 57,\n\tETHTOOL_LINK_MODE_100000baseSR2_Full_BIT = 58,\n\tETHTOOL_LINK_MODE_100000baseCR2_Full_BIT = 59,\n\tETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT = 60,\n\tETHTOOL_LINK_MODE_100000baseDR2_Full_BIT = 61,\n\tETHTOOL_LINK_MODE_200000baseKR4_Full_BIT = 62,\n\tETHTOOL_LINK_MODE_200000baseSR4_Full_BIT = 63,\n\tETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT = 64,\n\tETHTOOL_LINK_MODE_200000baseDR4_Full_BIT = 65,\n\tETHTOOL_LINK_MODE_200000baseCR4_Full_BIT = 66,\n\tETHTOOL_LINK_MODE_100baseT1_Full_BIT = 67,\n\tETHTOOL_LINK_MODE_1000baseT1_Full_BIT = 68,\n\tETHTOOL_LINK_MODE_400000baseKR8_Full_BIT = 69,\n\tETHTOOL_LINK_MODE_400000baseSR8_Full_BIT = 70,\n\tETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT = 71,\n\tETHTOOL_LINK_MODE_400000baseDR8_Full_BIT = 72,\n\tETHTOOL_LINK_MODE_400000baseCR8_Full_BIT = 73,\n\tETHTOOL_LINK_MODE_FEC_LLRS_BIT = 74,\n\tETHTOOL_LINK_MODE_100000baseKR_Full_BIT = 75,\n\tETHTOOL_LINK_MODE_100000baseSR_Full_BIT = 76,\n\tETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT = 77,\n\tETHTOOL_LINK_MODE_100000baseCR_Full_BIT = 78,\n\tETHTOOL_LINK_MODE_100000baseDR_Full_BIT = 79,\n\tETHTOOL_LINK_MODE_200000baseKR2_Full_BIT = 80,\n\tETHTOOL_LINK_MODE_200000baseSR2_Full_BIT = 81,\n\tETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT = 82,\n\tETHTOOL_LINK_MODE_200000baseDR2_Full_BIT = 83,\n\tETHTOOL_LINK_MODE_200000baseCR2_Full_BIT = 84,\n\tETHTOOL_LINK_MODE_400000baseKR4_Full_BIT = 85,\n\tETHTOOL_LINK_MODE_400000baseSR4_Full_BIT = 86,\n\tETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT = 87,\n\tETHTOOL_LINK_MODE_400000baseDR4_Full_BIT = 88,\n\tETHTOOL_LINK_MODE_400000baseCR4_Full_BIT = 89,\n\tETHTOOL_LINK_MODE_100baseFX_Half_BIT = 90,\n\tETHTOOL_LINK_MODE_100baseFX_Full_BIT = 91,\n\t__ETHTOOL_LINK_MODE_MASK_NBITS = 92,\n};\n\nstruct ethtool_link_settings {\n\t__u32 cmd;\n\t__u32 speed;\n\t__u8 duplex;\n\t__u8 port;\n\t__u8 phy_address;\n\t__u8 autoneg;\n\t__u8 mdio_support;\n\t__u8 eth_tp_mdix;\n\t__u8 eth_tp_mdix_ctrl;\n\t__s8 link_mode_masks_nwords;\n\t__u8 transceiver;\n\t__u8 master_slave_cfg;\n\t__u8 master_slave_state;\n\t__u8 reserved1[1];\n\t__u32 reserved[7];\n\t__u32 link_mode_masks[0];\n};\n\nstruct ethtool_link_ext_state_info {\n\tenum ethtool_link_ext_state link_ext_state;\n\tunion {\n\t\tenum ethtool_link_ext_substate_autoneg autoneg;\n\t\tenum ethtool_link_ext_substate_link_training link_training;\n\t\tenum ethtool_link_ext_substate_link_logical_mismatch link_logical_mismatch;\n\t\tenum ethtool_link_ext_substate_bad_signal_integrity bad_signal_integrity;\n\t\tenum ethtool_link_ext_substate_cable_issue cable_issue;\n\t\tu8 __link_ext_substate;\n\t};\n};\n\nstruct ethtool_link_ksettings {\n\tstruct ethtool_link_settings base;\n\tstruct {\n\t\tlong unsigned int supported[2];\n\t\tlong unsigned int advertising[2];\n\t\tlong unsigned int lp_advertising[2];\n\t} link_modes;\n};\n\nstruct ethtool_pause_stats {\n\tu64 tx_pause_frames;\n\tu64 rx_pause_frames;\n};\n\nenum ib_uverbs_write_cmds {\n\tIB_USER_VERBS_CMD_GET_CONTEXT = 0,\n\tIB_USER_VERBS_CMD_QUERY_DEVICE = 1,\n\tIB_USER_VERBS_CMD_QUERY_PORT = 2,\n\tIB_USER_VERBS_CMD_ALLOC_PD = 3,\n\tIB_USER_VERBS_CMD_DEALLOC_PD = 4,\n\tIB_USER_VERBS_CMD_CREATE_AH = 5,\n\tIB_USER_VERBS_CMD_MODIFY_AH = 6,\n\tIB_USER_VERBS_CMD_QUERY_AH = 7,\n\tIB_USER_VERBS_CMD_DESTROY_AH = 8,\n\tIB_USER_VERBS_CMD_REG_MR = 9,\n\tIB_USER_VERBS_CMD_REG_SMR = 10,\n\tIB_USER_VERBS_CMD_REREG_MR = 11,\n\tIB_USER_VERBS_CMD_QUERY_MR = 12,\n\tIB_USER_VERBS_CMD_DEREG_MR = 13,\n\tIB_USER_VERBS_CMD_ALLOC_MW = 14,\n\tIB_USER_VERBS_CMD_BIND_MW = 15,\n\tIB_USER_VERBS_CMD_DEALLOC_MW = 16,\n\tIB_USER_VERBS_CMD_CREATE_COMP_CHANNEL = 17,\n\tIB_USER_VERBS_CMD_CREATE_CQ = 18,\n\tIB_USER_VERBS_CMD_RESIZE_CQ = 19,\n\tIB_USER_VERBS_CMD_DESTROY_CQ = 20,\n\tIB_USER_VERBS_CMD_POLL_CQ = 21,\n\tIB_USER_VERBS_CMD_PEEK_CQ = 22,\n\tIB_USER_VERBS_CMD_REQ_NOTIFY_CQ = 23,\n\tIB_USER_VERBS_CMD_CREATE_QP = 24,\n\tIB_USER_VERBS_CMD_QUERY_QP = 25,\n\tIB_USER_VERBS_CMD_MODIFY_QP = 26,\n\tIB_USER_VERBS_CMD_DESTROY_QP = 27,\n\tIB_USER_VERBS_CMD_POST_SEND = 28,\n\tIB_USER_VERBS_CMD_POST_RECV = 29,\n\tIB_USER_VERBS_CMD_ATTACH_MCAST = 30,\n\tIB_USER_VERBS_CMD_DETACH_MCAST = 31,\n\tIB_USER_VERBS_CMD_CREATE_SRQ = 32,\n\tIB_USER_VERBS_CMD_MODIFY_SRQ = 33,\n\tIB_USER_VERBS_CMD_QUERY_SRQ = 34,\n\tIB_USER_VERBS_CMD_DESTROY_SRQ = 35,\n\tIB_USER_VERBS_CMD_POST_SRQ_RECV = 36,\n\tIB_USER_VERBS_CMD_OPEN_XRCD = 37,\n\tIB_USER_VERBS_CMD_CLOSE_XRCD = 38,\n\tIB_USER_VERBS_CMD_CREATE_XSRQ = 39,\n\tIB_USER_VERBS_CMD_OPEN_QP = 40,\n};\n\nenum ib_uverbs_wc_opcode {\n\tIB_UVERBS_WC_SEND = 0,\n\tIB_UVERBS_WC_RDMA_WRITE = 1,\n\tIB_UVERBS_WC_RDMA_READ = 2,\n\tIB_UVERBS_WC_COMP_SWAP = 3,\n\tIB_UVERBS_WC_FETCH_ADD = 4,\n\tIB_UVERBS_WC_BIND_MW = 5,\n\tIB_UVERBS_WC_LOCAL_INV = 6,\n\tIB_UVERBS_WC_TSO = 7,\n};\n\nenum ib_uverbs_create_qp_mask {\n\tIB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1,\n};\n\nenum ib_uverbs_wr_opcode {\n\tIB_UVERBS_WR_RDMA_WRITE = 0,\n\tIB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,\n\tIB_UVERBS_WR_SEND = 2,\n\tIB_UVERBS_WR_SEND_WITH_IMM = 3,\n\tIB_UVERBS_WR_RDMA_READ = 4,\n\tIB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,\n\tIB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,\n\tIB_UVERBS_WR_LOCAL_INV = 7,\n\tIB_UVERBS_WR_BIND_MW = 8,\n\tIB_UVERBS_WR_SEND_WITH_INV = 9,\n\tIB_UVERBS_WR_TSO = 10,\n\tIB_UVERBS_WR_RDMA_READ_WITH_INV = 11,\n\tIB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,\n\tIB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,\n};\n\nenum ib_uverbs_access_flags {\n\tIB_UVERBS_ACCESS_LOCAL_WRITE = 1,\n\tIB_UVERBS_ACCESS_REMOTE_WRITE = 2,\n\tIB_UVERBS_ACCESS_REMOTE_READ = 4,\n\tIB_UVERBS_ACCESS_REMOTE_ATOMIC = 8,\n\tIB_UVERBS_ACCESS_MW_BIND = 16,\n\tIB_UVERBS_ACCESS_ZERO_BASED = 32,\n\tIB_UVERBS_ACCESS_ON_DEMAND = 64,\n\tIB_UVERBS_ACCESS_HUGETLB = 128,\n\tIB_UVERBS_ACCESS_RELAXED_ORDERING = 1048576,\n\tIB_UVERBS_ACCESS_OPTIONAL_RANGE = 1072693248,\n};\n\nenum ib_uverbs_srq_type {\n\tIB_UVERBS_SRQT_BASIC = 0,\n\tIB_UVERBS_SRQT_XRC = 1,\n\tIB_UVERBS_SRQT_TM = 2,\n};\n\nenum ib_uverbs_wq_type {\n\tIB_UVERBS_WQT_RQ = 0,\n};\n\nenum ib_uverbs_wq_flags {\n\tIB_UVERBS_WQ_FLAGS_CVLAN_STRIPPING = 1,\n\tIB_UVERBS_WQ_FLAGS_SCATTER_FCS = 2,\n\tIB_UVERBS_WQ_FLAGS_DELAY_DROP = 4,\n\tIB_UVERBS_WQ_FLAGS_PCI_WRITE_END_PADDING = 8,\n};\n\nenum ib_uverbs_qp_type {\n\tIB_UVERBS_QPT_RC = 2,\n\tIB_UVERBS_QPT_UC = 3,\n\tIB_UVERBS_QPT_UD = 4,\n\tIB_UVERBS_QPT_RAW_PACKET = 8,\n\tIB_UVERBS_QPT_XRC_INI = 9,\n\tIB_UVERBS_QPT_XRC_TGT = 10,\n\tIB_UVERBS_QPT_DRIVER = 255,\n};\n\nenum ib_uverbs_qp_create_flags {\n\tIB_UVERBS_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 2,\n\tIB_UVERBS_QP_CREATE_SCATTER_FCS = 256,\n\tIB_UVERBS_QP_CREATE_CVLAN_STRIPPING = 512,\n\tIB_UVERBS_QP_CREATE_PCI_WRITE_END_PADDING = 2048,\n\tIB_UVERBS_QP_CREATE_SQ_SIG_ALL = 4096,\n};\n\nenum ib_uverbs_gid_type {\n\tIB_UVERBS_GID_TYPE_IB = 0,\n\tIB_UVERBS_GID_TYPE_ROCE_V1 = 1,\n\tIB_UVERBS_GID_TYPE_ROCE_V2 = 2,\n};\n\nenum ib_poll_context {\n\tIB_POLL_SOFTIRQ = 0,\n\tIB_POLL_WORKQUEUE = 1,\n\tIB_POLL_UNBOUND_WORKQUEUE = 2,\n\tIB_POLL_LAST_POOL_TYPE = 2,\n\tIB_POLL_DIRECT = 3,\n};\n\nstruct lsm_network_audit {\n\tint netif;\n\tconst struct sock *sk;\n\tu16 family;\n\t__be16 dport;\n\t__be16 sport;\n\tunion {\n\t\tstruct {\n\t\t\t__be32 daddr;\n\t\t\t__be32 saddr;\n\t\t} v4;\n\t\tstruct {\n\t\t\tstruct in6_addr daddr;\n\t\t\tstruct in6_addr saddr;\n\t\t} v6;\n\t} fam;\n};\n\nstruct lsm_ioctlop_audit {\n\tstruct path path;\n\tu16 cmd;\n};\n\nstruct lsm_ibpkey_audit {\n\tu64 subnet_prefix;\n\tu16 pkey;\n};\n\nstruct lsm_ibendport_audit {\n\tchar dev_name[64];\n\tu8 port;\n};\n\nstruct selinux_state;\n\nstruct selinux_audit_data {\n\tu32 ssid;\n\tu32 tsid;\n\tu16 tclass;\n\tu32 requested;\n\tu32 audited;\n\tu32 denied;\n\tint result;\n\tstruct selinux_state *state;\n};\n\nstruct common_audit_data {\n\tchar type;\n\tunion {\n\t\tstruct path path;\n\t\tstruct dentry *dentry;\n\t\tstruct inode *inode;\n\t\tstruct lsm_network_audit *net;\n\t\tint cap;\n\t\tint ipc_id;\n\t\tstruct task_struct *tsk;\n\t\tstruct {\n\t\t\tkey_serial_t key;\n\t\t\tchar *key_desc;\n\t\t} key_struct;\n\t\tchar *kmod_name;\n\t\tstruct lsm_ioctlop_audit *op;\n\t\tstruct file *file;\n\t\tstruct lsm_ibpkey_audit *ibpkey;\n\t\tstruct lsm_ibendport_audit *ibendport;\n\t\tint reason;\n\t} u;\n\tunion {\n\t\tstruct selinux_audit_data *selinux_audit_data;\n\t};\n};\n\nenum {\n\tPOLICYDB_CAPABILITY_NETPEER = 0,\n\tPOLICYDB_CAPABILITY_OPENPERM = 1,\n\tPOLICYDB_CAPABILITY_EXTSOCKCLASS = 2,\n\tPOLICYDB_CAPABILITY_ALWAYSNETWORK = 3,\n\tPOLICYDB_CAPABILITY_CGROUPSECLABEL = 4,\n\tPOLICYDB_CAPABILITY_NNP_NOSUID_TRANSITION = 5,\n\tPOLICYDB_CAPABILITY_GENFS_SECLABEL_SYMLINKS = 6,\n\t__POLICYDB_CAPABILITY_MAX = 7,\n};\n\nstruct selinux_avc;\n\nstruct selinux_policy;\n\nstruct selinux_state {\n\tbool enforcing;\n\tbool checkreqprot;\n\tbool initialized;\n\tbool policycap[7];\n\tstruct page *status_page;\n\tstruct mutex status_lock;\n\tstruct selinux_avc *avc;\n\tstruct selinux_policy *policy;\n\tstruct mutex policy_mutex;\n};\n\nstruct avc_cache {\n\tstruct hlist_head slots[512];\n\tspinlock_t slots_lock[512];\n\tatomic_t lru_hint;\n\tatomic_t active_nodes;\n\tu32 latest_notif;\n};\n\nstruct selinux_avc {\n\tunsigned int avc_cache_threshold;\n\tstruct avc_cache avc_cache;\n};\n\nstruct av_decision {\n\tu32 allowed;\n\tu32 auditallow;\n\tu32 auditdeny;\n\tu32 seqno;\n\tu32 flags;\n};\n\nstruct extended_perms_data {\n\tu32 p[8];\n};\n\nstruct extended_perms_decision {\n\tu8 used;\n\tu8 driver;\n\tstruct extended_perms_data *allowed;\n\tstruct extended_perms_data *auditallow;\n\tstruct extended_perms_data *dontaudit;\n};\n\nstruct extended_perms {\n\tu16 len;\n\tstruct extended_perms_data drivers;\n};\n\nstruct avc_cache_stats {\n\tunsigned int lookups;\n\tunsigned int misses;\n\tunsigned int allocations;\n\tunsigned int reclaims;\n\tunsigned int frees;\n};\n\nstruct security_class_mapping {\n\tconst char *name;\n\tconst char *perms[33];\n};\n\nstruct trace_event_raw_selinux_audited {\n\tstruct trace_entry ent;\n\tu32 requested;\n\tu32 denied;\n\tu32 audited;\n\tint result;\n\tu32 __data_loc_scontext;\n\tu32 __data_loc_tcontext;\n\tu32 __data_loc_tclass;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_selinux_audited {\n\tu32 scontext;\n\tu32 tcontext;\n\tu32 tclass;\n};\n\ntypedef void (*btf_trace_selinux_audited)(void *, struct selinux_audit_data *, char *, char *, const char *);\n\nstruct avc_xperms_node;\n\nstruct avc_entry {\n\tu32 ssid;\n\tu32 tsid;\n\tu16 tclass;\n\tstruct av_decision avd;\n\tstruct avc_xperms_node *xp_node;\n};\n\nstruct avc_xperms_node {\n\tstruct extended_perms xp;\n\tstruct list_head xpd_head;\n};\n\nstruct avc_node {\n\tstruct avc_entry ae;\n\tstruct hlist_node list;\n\tstruct callback_head rhead;\n};\n\nstruct avc_xperms_decision_node {\n\tstruct extended_perms_decision xpd;\n\tstruct list_head xpd_list;\n};\n\nstruct avc_callback_node {\n\tint (*callback)(u32);\n\tu32 events;\n\tstruct avc_callback_node *next;\n};\n\ntypedef __u16 __sum16;\n\nenum sctp_endpoint_type {\n\tSCTP_EP_TYPE_SOCKET = 0,\n\tSCTP_EP_TYPE_ASSOCIATION = 1,\n};\n\nstruct sctp_chunk;\n\nstruct sctp_inq {\n\tstruct list_head in_chunk_list;\n\tstruct sctp_chunk *in_progress;\n\tstruct work_struct immediate;\n};\n\nstruct sctp_bind_addr {\n\t__u16 port;\n\tstruct list_head address_list;\n};\n\nstruct sctp_ep_common {\n\tstruct hlist_node node;\n\tint hashent;\n\tenum sctp_endpoint_type type;\n\trefcount_t refcnt;\n\tbool dead;\n\tstruct sock *sk;\n\tstruct net *net;\n\tstruct sctp_inq inqueue;\n\tstruct sctp_bind_addr bind_addr;\n};\n\nstruct sctp_hmac_algo_param;\n\nstruct sctp_chunks_param;\n\nstruct sctp_endpoint {\n\tstruct sctp_ep_common base;\n\tstruct list_head asocs;\n\t__u8 secret_key[32];\n\t__u8 *digest;\n\t__u32 sndbuf_policy;\n\t__u32 rcvbuf_policy;\n\tstruct crypto_shash **auth_hmacs;\n\tstruct sctp_hmac_algo_param *auth_hmacs_list;\n\tstruct sctp_chunks_param *auth_chunk_list;\n\tstruct list_head endpoint_shared_keys;\n\t__u16 active_key_id;\n\t__u8 ecn_enable: 1;\n\t__u8 auth_enable: 1;\n\t__u8 intl_enable: 1;\n\t__u8 prsctp_enable: 1;\n\t__u8 asconf_enable: 1;\n\t__u8 reconf_enable: 1;\n\t__u8 strreset_enable;\n\tu32 secid;\n\tu32 peer_secid;\n};\n\nstruct sockaddr_in6 {\n\tshort unsigned int sin6_family;\n\t__be16 sin6_port;\n\t__be32 sin6_flowinfo;\n\tstruct in6_addr sin6_addr;\n\t__u32 sin6_scope_id;\n};\n\nstruct in_addr {\n\t__be32 s_addr;\n};\n\nstruct sockaddr_in {\n\t__kernel_sa_family_t sin_family;\n\t__be16 sin_port;\n\tstruct in_addr sin_addr;\n\tunsigned char __pad[8];\n};\n\nstruct nf_hook_state;\n\ntypedef unsigned int nf_hookfn(void *, struct sk_buff *, const struct nf_hook_state *);\n\nstruct nf_hook_entry {\n\tnf_hookfn *hook;\n\tvoid *priv;\n};\n\nstruct nf_hook_entries {\n\tu16 num_hook_entries;\n\tstruct nf_hook_entry hooks[0];\n};\n\nstruct nf_hook_state {\n\tunsigned int hook;\n\tu_int8_t pf;\n\tstruct net_device *in;\n\tstruct net_device *out;\n\tstruct sock *sk;\n\tstruct net *net;\n\tint (*okfn)(struct net *, struct sock *, struct sk_buff *);\n};\n\nstruct nf_hook_ops {\n\tnf_hookfn *hook;\n\tstruct net_device *dev;\n\tvoid *priv;\n\tu_int8_t pf;\n\tunsigned int hooknum;\n\tint priority;\n};\n\nenum nf_ip_hook_priorities {\n\tNF_IP_PRI_FIRST = 2147483648,\n\tNF_IP_PRI_RAW_BEFORE_DEFRAG = 4294966846,\n\tNF_IP_PRI_CONNTRACK_DEFRAG = 4294966896,\n\tNF_IP_PRI_RAW = 4294966996,\n\tNF_IP_PRI_SELINUX_FIRST = 4294967071,\n\tNF_IP_PRI_CONNTRACK = 4294967096,\n\tNF_IP_PRI_MANGLE = 4294967146,\n\tNF_IP_PRI_NAT_DST = 4294967196,\n\tNF_IP_PRI_FILTER = 0,\n\tNF_IP_PRI_SECURITY = 50,\n\tNF_IP_PRI_NAT_SRC = 100,\n\tNF_IP_PRI_SELINUX_LAST = 225,\n\tNF_IP_PRI_CONNTRACK_HELPER = 300,\n\tNF_IP_PRI_CONNTRACK_CONFIRM = 2147483647,\n\tNF_IP_PRI_LAST = 2147483647,\n};\n\nenum nf_ip6_hook_priorities {\n\tNF_IP6_PRI_FIRST = 2147483648,\n\tNF_IP6_PRI_RAW_BEFORE_DEFRAG = 4294966846,\n\tNF_IP6_PRI_CONNTRACK_DEFRAG = 4294966896,\n\tNF_IP6_PRI_RAW = 4294966996,\n\tNF_IP6_PRI_SELINUX_FIRST = 4294967071,\n\tNF_IP6_PRI_CONNTRACK = 4294967096,\n\tNF_IP6_PRI_MANGLE = 4294967146,\n\tNF_IP6_PRI_NAT_DST = 4294967196,\n\tNF_IP6_PRI_FILTER = 0,\n\tNF_IP6_PRI_SECURITY = 50,\n\tNF_IP6_PRI_NAT_SRC = 100,\n\tNF_IP6_PRI_SELINUX_LAST = 225,\n\tNF_IP6_PRI_CONNTRACK_HELPER = 300,\n\tNF_IP6_PRI_LAST = 2147483647,\n};\n\nstruct socket_alloc {\n\tstruct socket socket;\n\tstruct inode vfs_inode;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct ip_options {\n\t__be32 faddr;\n\t__be32 nexthop;\n\tunsigned char optlen;\n\tunsigned char srr;\n\tunsigned char rr;\n\tunsigned char ts;\n\tunsigned char is_strictroute: 1;\n\tunsigned char srr_is_hit: 1;\n\tunsigned char is_changed: 1;\n\tunsigned char rr_needaddr: 1;\n\tunsigned char ts_needtime: 1;\n\tunsigned char ts_needaddr: 1;\n\tunsigned char router_alert;\n\tunsigned char cipso;\n\tunsigned char __pad2;\n\tunsigned char __data[0];\n};\n\nstruct ip_options_rcu {\n\tstruct callback_head rcu;\n\tstruct ip_options opt;\n};\n\nstruct ipv6_opt_hdr;\n\nstruct ipv6_rt_hdr;\n\nstruct ipv6_txoptions {\n\trefcount_t refcnt;\n\tint tot_len;\n\t__u16 opt_flen;\n\t__u16 opt_nflen;\n\tstruct ipv6_opt_hdr *hopopt;\n\tstruct ipv6_opt_hdr *dst0opt;\n\tstruct ipv6_rt_hdr *srcrt;\n\tstruct ipv6_opt_hdr *dst1opt;\n\tstruct callback_head rcu;\n};\n\nstruct inet_cork {\n\tunsigned int flags;\n\t__be32 addr;\n\tstruct ip_options *opt;\n\tunsigned int fragsize;\n\tint length;\n\tstruct dst_entry *dst;\n\tu8 tx_flags;\n\t__u8 ttl;\n\t__s16 tos;\n\tchar priority;\n\t__u16 gso_size;\n\tu64 transmit_time;\n\tu32 mark;\n};\n\nstruct inet_cork_full {\n\tstruct inet_cork base;\n\tstruct flowi fl;\n};\n\nstruct ipv6_pinfo;\n\nstruct ip_mc_socklist;\n\nstruct inet_sock {\n\tstruct sock sk;\n\tstruct ipv6_pinfo *pinet6;\n\t__be32 inet_saddr;\n\t__s16 uc_ttl;\n\t__u16 cmsg_flags;\n\t__be16 inet_sport;\n\t__u16 inet_id;\n\tstruct ip_options_rcu *inet_opt;\n\tint rx_dst_ifindex;\n\t__u8 tos;\n\t__u8 min_ttl;\n\t__u8 mc_ttl;\n\t__u8 pmtudisc;\n\t__u8 recverr: 1;\n\t__u8 is_icsk: 1;\n\t__u8 freebind: 1;\n\t__u8 hdrincl: 1;\n\t__u8 mc_loop: 1;\n\t__u8 transparent: 1;\n\t__u8 mc_all: 1;\n\t__u8 nodefrag: 1;\n\t__u8 bind_address_no_port: 1;\n\t__u8 recverr_rfc4884: 1;\n\t__u8 defer_connect: 1;\n\t__u8 rcv_tos;\n\t__u8 convert_csum;\n\tint uc_index;\n\tint mc_index;\n\t__be32 mc_addr;\n\tstruct ip_mc_socklist *mc_list;\n\tstruct inet_cork_full cork;\n};\n\nstruct in6_pktinfo {\n\tstruct in6_addr ipi6_addr;\n\tint ipi6_ifindex;\n};\n\nstruct inet6_cork {\n\tstruct ipv6_txoptions *opt;\n\tu8 hop_limit;\n\tu8 tclass;\n};\n\nstruct ipv6_mc_socklist;\n\nstruct ipv6_ac_socklist;\n\nstruct ipv6_fl_socklist;\n\nstruct ipv6_pinfo {\n\tstruct in6_addr saddr;\n\tstruct in6_pktinfo sticky_pktinfo;\n\tconst struct in6_addr *daddr_cache;\n\tconst struct in6_addr *saddr_cache;\n\t__be32 flow_label;\n\t__u32 frag_size;\n\t__u16 __unused_1: 7;\n\t__s16 hop_limit: 9;\n\t__u16 mc_loop: 1;\n\t__u16 __unused_2: 6;\n\t__s16 mcast_hops: 9;\n\tint ucast_oif;\n\tint mcast_oif;\n\tunion {\n\t\tstruct {\n\t\t\t__u16 srcrt: 1;\n\t\t\t__u16 osrcrt: 1;\n\t\t\t__u16 rxinfo: 1;\n\t\t\t__u16 rxoinfo: 1;\n\t\t\t__u16 rxhlim: 1;\n\t\t\t__u16 rxohlim: 1;\n\t\t\t__u16 hopopts: 1;\n\t\t\t__u16 ohopopts: 1;\n\t\t\t__u16 dstopts: 1;\n\t\t\t__u16 odstopts: 1;\n\t\t\t__u16 rxflow: 1;\n\t\t\t__u16 rxtclass: 1;\n\t\t\t__u16 rxpmtu: 1;\n\t\t\t__u16 rxorigdstaddr: 1;\n\t\t\t__u16 recvfragsize: 1;\n\t\t} bits;\n\t\t__u16 all;\n\t} rxopt;\n\t__u16 recverr: 1;\n\t__u16 sndflow: 1;\n\t__u16 repflow: 1;\n\t__u16 pmtudisc: 3;\n\t__u16 padding: 1;\n\t__u16 srcprefs: 3;\n\t__u16 dontfrag: 1;\n\t__u16 autoflowlabel: 1;\n\t__u16 autoflowlabel_set: 1;\n\t__u16 mc_all: 1;\n\t__u16 recverr_rfc4884: 1;\n\t__u16 rtalert_isolate: 1;\n\t__u8 min_hopcount;\n\t__u8 tclass;\n\t__be32 rcv_flowinfo;\n\t__u32 dst_cookie;\n\t__u32 rx_dst_cookie;\n\tstruct ipv6_mc_socklist *ipv6_mc_list;\n\tstruct ipv6_ac_socklist *ipv6_ac_list;\n\tstruct ipv6_fl_socklist *ipv6_fl_list;\n\tstruct ipv6_txoptions *opt;\n\tstruct sk_buff *pktoptions;\n\tstruct sk_buff *rxpmtu;\n\tstruct inet6_cork cork;\n};\n\nstruct tcphdr {\n\t__be16 source;\n\t__be16 dest;\n\t__be32 seq;\n\t__be32 ack_seq;\n\t__u16 res1: 4;\n\t__u16 doff: 4;\n\t__u16 fin: 1;\n\t__u16 syn: 1;\n\t__u16 rst: 1;\n\t__u16 psh: 1;\n\t__u16 ack: 1;\n\t__u16 urg: 1;\n\t__u16 ece: 1;\n\t__u16 cwr: 1;\n\t__be16 window;\n\t__sum16 check;\n\t__be16 urg_ptr;\n};\n\nstruct iphdr {\n\t__u8 ihl: 4;\n\t__u8 version: 4;\n\t__u8 tos;\n\t__be16 tot_len;\n\t__be16 id;\n\t__be16 frag_off;\n\t__u8 ttl;\n\t__u8 protocol;\n\t__sum16 check;\n\t__be32 saddr;\n\t__be32 daddr;\n};\n\nstruct ipv6_rt_hdr {\n\t__u8 nexthdr;\n\t__u8 hdrlen;\n\t__u8 type;\n\t__u8 segments_left;\n};\n\nstruct ipv6_opt_hdr {\n\t__u8 nexthdr;\n\t__u8 hdrlen;\n};\n\nstruct ipv6hdr {\n\t__u8 priority: 4;\n\t__u8 version: 4;\n\t__u8 flow_lbl[3];\n\t__be16 payload_len;\n\t__u8 nexthdr;\n\t__u8 hop_limit;\n\tstruct in6_addr saddr;\n\tstruct in6_addr daddr;\n};\n\nstruct udphdr {\n\t__be16 source;\n\t__be16 dest;\n\t__be16 len;\n\t__sum16 check;\n};\n\nstruct inet6_skb_parm {\n\tint iif;\n\t__be16 ra;\n\t__u16 dst0;\n\t__u16 srcrt;\n\t__u16 dst1;\n\t__u16 lastopt;\n\t__u16 nhoff;\n\t__u16 flags;\n\t__u16 dsthao;\n\t__u16 frag_max_size;\n};\n\nstruct ip6_sf_socklist;\n\nstruct ipv6_mc_socklist {\n\tstruct in6_addr addr;\n\tint ifindex;\n\tunsigned int sfmode;\n\tstruct ipv6_mc_socklist *next;\n\trwlock_t sflock;\n\tstruct ip6_sf_socklist *sflist;\n\tstruct callback_head rcu;\n};\n\nstruct ipv6_ac_socklist {\n\tstruct in6_addr acl_addr;\n\tint acl_ifindex;\n\tstruct ipv6_ac_socklist *acl_next;\n};\n\nstruct ip6_flowlabel;\n\nstruct ipv6_fl_socklist {\n\tstruct ipv6_fl_socklist *next;\n\tstruct ip6_flowlabel *fl;\n\tstruct callback_head rcu;\n};\n\nstruct ip6_sf_socklist {\n\tunsigned int sl_max;\n\tunsigned int sl_count;\n\tstruct in6_addr sl_addr[0];\n};\n\nstruct ip6_flowlabel {\n\tstruct ip6_flowlabel *next;\n\t__be32 label;\n\tatomic_t users;\n\tstruct in6_addr dst;\n\tstruct ipv6_txoptions *opt;\n\tlong unsigned int linger;\n\tstruct callback_head rcu;\n\tu8 share;\n\tunion {\n\t\tstruct pid *pid;\n\t\tkuid_t uid;\n\t} owner;\n\tlong unsigned int lastuse;\n\tlong unsigned int expires;\n\tstruct net *fl_net;\n};\n\nstruct inet_skb_parm {\n\tint iif;\n\tstruct ip_options opt;\n\tu16 flags;\n\tu16 frag_max_size;\n};\n\nstruct tty_file_private {\n\tstruct tty_struct *tty;\n\tstruct file *file;\n\tstruct list_head list;\n};\n\nstruct netlbl_lsm_cache {\n\trefcount_t refcount;\n\tvoid (*free)(const void *);\n\tvoid *data;\n};\n\nstruct netlbl_lsm_catmap {\n\tu32 startbit;\n\tu64 bitmap[4];\n\tstruct netlbl_lsm_catmap *next;\n};\n\nstruct netlbl_lsm_secattr {\n\tu32 flags;\n\tu32 type;\n\tchar *domain;\n\tstruct netlbl_lsm_cache *cache;\n\tstruct {\n\t\tstruct {\n\t\t\tstruct netlbl_lsm_catmap *cat;\n\t\t\tu32 lvl;\n\t\t} mls;\n\t\tu32 secid;\n\t} attr;\n};\n\nstruct dccp_hdr {\n\t__be16 dccph_sport;\n\t__be16 dccph_dport;\n\t__u8 dccph_doff;\n\t__u8 dccph_cscov: 4;\n\t__u8 dccph_ccval: 4;\n\t__sum16 dccph_checksum;\n\t__u8 dccph_x: 1;\n\t__u8 dccph_type: 4;\n\t__u8 dccph_reserved: 3;\n\t__u8 dccph_seq2;\n\t__be16 dccph_seq;\n};\n\nenum dccp_state {\n\tDCCP_OPEN = 1,\n\tDCCP_REQUESTING = 2,\n\tDCCP_LISTEN = 10,\n\tDCCP_RESPOND = 3,\n\tDCCP_ACTIVE_CLOSEREQ = 4,\n\tDCCP_PASSIVE_CLOSE = 8,\n\tDCCP_CLOSING = 11,\n\tDCCP_TIME_WAIT = 6,\n\tDCCP_CLOSED = 7,\n\tDCCP_NEW_SYN_RECV = 12,\n\tDCCP_PARTOPEN = 13,\n\tDCCP_PASSIVE_CLOSEREQ = 14,\n\tDCCP_MAX_STATES = 15,\n};\n\ntypedef __s32 sctp_assoc_t;\n\nenum sctp_msg_flags {\n\tMSG_NOTIFICATION = 32768,\n};\n\nstruct sctp_initmsg {\n\t__u16 sinit_num_ostreams;\n\t__u16 sinit_max_instreams;\n\t__u16 sinit_max_attempts;\n\t__u16 sinit_max_init_timeo;\n};\n\nstruct sctp_sndrcvinfo {\n\t__u16 sinfo_stream;\n\t__u16 sinfo_ssn;\n\t__u16 sinfo_flags;\n\t__u32 sinfo_ppid;\n\t__u32 sinfo_context;\n\t__u32 sinfo_timetolive;\n\t__u32 sinfo_tsn;\n\t__u32 sinfo_cumtsn;\n\tsctp_assoc_t sinfo_assoc_id;\n};\n\nstruct sctp_rtoinfo {\n\tsctp_assoc_t srto_assoc_id;\n\t__u32 srto_initial;\n\t__u32 srto_max;\n\t__u32 srto_min;\n};\n\nstruct sctp_assocparams {\n\tsctp_assoc_t sasoc_assoc_id;\n\t__u16 sasoc_asocmaxrxt;\n\t__u16 sasoc_number_peer_destinations;\n\t__u32 sasoc_peer_rwnd;\n\t__u32 sasoc_local_rwnd;\n\t__u32 sasoc_cookie_life;\n};\n\nstruct sctp_paddrparams {\n\tsctp_assoc_t spp_assoc_id;\n\tstruct __kernel_sockaddr_storage spp_address;\n\t__u32 spp_hbinterval;\n\t__u16 spp_pathmaxrxt;\n\t__u32 spp_pathmtu;\n\t__u32 spp_sackdelay;\n\t__u32 spp_flags;\n\t__u32 spp_ipv6_flowlabel;\n\t__u8 spp_dscp;\n\tchar: 8;\n} __attribute__((packed));\n\nstruct sctphdr {\n\t__be16 source;\n\t__be16 dest;\n\t__be32 vtag;\n\t__le32 checksum;\n};\n\nstruct sctp_chunkhdr {\n\t__u8 type;\n\t__u8 flags;\n\t__be16 length;\n};\n\nenum sctp_cid {\n\tSCTP_CID_DATA = 0,\n\tSCTP_CID_INIT = 1,\n\tSCTP_CID_INIT_ACK = 2,\n\tSCTP_CID_SACK = 3,\n\tSCTP_CID_HEARTBEAT = 4,\n\tSCTP_CID_HEARTBEAT_ACK = 5,\n\tSCTP_CID_ABORT = 6,\n\tSCTP_CID_SHUTDOWN = 7,\n\tSCTP_CID_SHUTDOWN_ACK = 8,\n\tSCTP_CID_ERROR = 9,\n\tSCTP_CID_COOKIE_ECHO = 10,\n\tSCTP_CID_COOKIE_ACK = 11,\n\tSCTP_CID_ECN_ECNE = 12,\n\tSCTP_CID_ECN_CWR = 13,\n\tSCTP_CID_SHUTDOWN_COMPLETE = 14,\n\tSCTP_CID_AUTH = 15,\n\tSCTP_CID_I_DATA = 64,\n\tSCTP_CID_FWD_TSN = 192,\n\tSCTP_CID_ASCONF = 193,\n\tSCTP_CID_I_FWD_TSN = 194,\n\tSCTP_CID_ASCONF_ACK = 128,\n\tSCTP_CID_RECONF = 130,\n};\n\nstruct sctp_paramhdr {\n\t__be16 type;\n\t__be16 length;\n};\n\nenum sctp_param {\n\tSCTP_PARAM_HEARTBEAT_INFO = 256,\n\tSCTP_PARAM_IPV4_ADDRESS = 1280,\n\tSCTP_PARAM_IPV6_ADDRESS = 1536,\n\tSCTP_PARAM_STATE_COOKIE = 1792,\n\tSCTP_PARAM_UNRECOGNIZED_PARAMETERS = 2048,\n\tSCTP_PARAM_COOKIE_PRESERVATIVE = 2304,\n\tSCTP_PARAM_HOST_NAME_ADDRESS = 2816,\n\tSCTP_PARAM_SUPPORTED_ADDRESS_TYPES = 3072,\n\tSCTP_PARAM_ECN_CAPABLE = 128,\n\tSCTP_PARAM_RANDOM = 640,\n\tSCTP_PARAM_CHUNKS = 896,\n\tSCTP_PARAM_HMAC_ALGO = 1152,\n\tSCTP_PARAM_SUPPORTED_EXT = 2176,\n\tSCTP_PARAM_FWD_TSN_SUPPORT = 192,\n\tSCTP_PARAM_ADD_IP = 448,\n\tSCTP_PARAM_DEL_IP = 704,\n\tSCTP_PARAM_ERR_CAUSE = 960,\n\tSCTP_PARAM_SET_PRIMARY = 1216,\n\tSCTP_PARAM_SUCCESS_REPORT = 1472,\n\tSCTP_PARAM_ADAPTATION_LAYER_IND = 1728,\n\tSCTP_PARAM_RESET_OUT_REQUEST = 3328,\n\tSCTP_PARAM_RESET_IN_REQUEST = 3584,\n\tSCTP_PARAM_RESET_TSN_REQUEST = 3840,\n\tSCTP_PARAM_RESET_RESPONSE = 4096,\n\tSCTP_PARAM_RESET_ADD_OUT_STREAMS = 4352,\n\tSCTP_PARAM_RESET_ADD_IN_STREAMS = 4608,\n};\n\nstruct sctp_datahdr {\n\t__be32 tsn;\n\t__be16 stream;\n\t__be16 ssn;\n\t__u32 ppid;\n\t__u8 payload[0];\n};\n\nstruct sctp_idatahdr {\n\t__be32 tsn;\n\t__be16 stream;\n\t__be16 reserved;\n\t__be32 mid;\n\tunion {\n\t\t__u32 ppid;\n\t\t__be32 fsn;\n\t};\n\t__u8 payload[0];\n};\n\nstruct sctp_inithdr {\n\t__be32 init_tag;\n\t__be32 a_rwnd;\n\t__be16 num_outbound_streams;\n\t__be16 num_inbound_streams;\n\t__be32 initial_tsn;\n\t__u8 params[0];\n};\n\nstruct sctp_init_chunk {\n\tstruct sctp_chunkhdr chunk_hdr;\n\tstruct sctp_inithdr init_hdr;\n};\n\nstruct sctp_ipv4addr_param {\n\tstruct sctp_paramhdr param_hdr;\n\tstruct in_addr addr;\n};\n\nstruct sctp_ipv6addr_param {\n\tstruct sctp_paramhdr param_hdr;\n\tstruct in6_addr addr;\n};\n\nstruct sctp_cookie_preserve_param {\n\tstruct sctp_paramhdr param_hdr;\n\t__be32 lifespan_increment;\n};\n\nstruct sctp_hostname_param {\n\tstruct sctp_paramhdr param_hdr;\n\tuint8_t hostname[0];\n};\n\nstruct sctp_supported_addrs_param {\n\tstruct sctp_paramhdr param_hdr;\n\t__be16 types[0];\n};\n\nstruct sctp_adaptation_ind_param {\n\tstruct sctp_paramhdr param_hdr;\n\t__be32 adaptation_ind;\n};\n\nstruct sctp_supported_ext_param {\n\tstruct sctp_paramhdr param_hdr;\n\t__u8 chunks[0];\n};\n\nstruct sctp_random_param {\n\tstruct sctp_paramhdr param_hdr;\n\t__u8 random_val[0];\n};\n\nstruct sctp_chunks_param {\n\tstruct sctp_paramhdr param_hdr;\n\t__u8 chunks[0];\n};\n\nstruct sctp_hmac_algo_param {\n\tstruct sctp_paramhdr param_hdr;\n\t__be16 hmac_ids[0];\n};\n\nstruct sctp_cookie_param {\n\tstruct sctp_paramhdr p;\n\t__u8 body[0];\n};\n\nstruct sctp_gap_ack_block {\n\t__be16 start;\n\t__be16 end;\n};\n\nunion sctp_sack_variable {\n\tstruct sctp_gap_ack_block gab;\n\t__be32 dup;\n};\n\nstruct sctp_sackhdr {\n\t__be32 cum_tsn_ack;\n\t__be32 a_rwnd;\n\t__be16 num_gap_ack_blocks;\n\t__be16 num_dup_tsns;\n\tunion sctp_sack_variable variable[0];\n};\n\nstruct sctp_heartbeathdr {\n\tstruct sctp_paramhdr info;\n};\n\nstruct sctp_shutdownhdr {\n\t__be32 cum_tsn_ack;\n};\n\nstruct sctp_errhdr {\n\t__be16 cause;\n\t__be16 length;\n\t__u8 variable[0];\n};\n\nstruct sctp_ecnehdr {\n\t__be32 lowest_tsn;\n};\n\nstruct sctp_cwrhdr {\n\t__be32 lowest_tsn;\n};\n\nstruct sctp_fwdtsn_skip {\n\t__be16 stream;\n\t__be16 ssn;\n};\n\nstruct sctp_fwdtsn_hdr {\n\t__be32 new_cum_tsn;\n\tstruct sctp_fwdtsn_skip skip[0];\n};\n\nstruct sctp_ifwdtsn_skip {\n\t__be16 stream;\n\t__u8 reserved;\n\t__u8 flags;\n\t__be32 mid;\n};\n\nstruct sctp_ifwdtsn_hdr {\n\t__be32 new_cum_tsn;\n\tstruct sctp_ifwdtsn_skip skip[0];\n};\n\nstruct sctp_addip_param {\n\tstruct sctp_paramhdr param_hdr;\n\t__be32 crr_id;\n};\n\nstruct sctp_addiphdr {\n\t__be32 serial;\n\t__u8 params[0];\n};\n\nstruct sctp_authhdr {\n\t__be16 shkey_id;\n\t__be16 hmac_id;\n\t__u8 hmac[0];\n};\n\nunion sctp_addr {\n\tstruct sockaddr_in v4;\n\tstruct sockaddr_in6 v6;\n\tstruct sockaddr sa;\n};\n\nstruct sctp_cookie {\n\t__u32 my_vtag;\n\t__u32 peer_vtag;\n\t__u32 my_ttag;\n\t__u32 peer_ttag;\n\tktime_t expiration;\n\t__u16 sinit_num_ostreams;\n\t__u16 sinit_max_instreams;\n\t__u32 initial_tsn;\n\tunion sctp_addr peer_addr;\n\t__u16 my_port;\n\t__u8 prsctp_capable;\n\t__u8 padding;\n\t__u32 adaptation_ind;\n\t__u8 auth_random[36];\n\t__u8 auth_hmacs[10];\n\t__u8 auth_chunks[20];\n\t__u32 raw_addr_list_len;\n\tstruct sctp_init_chunk peer_init[0];\n};\n\nstruct sctp_tsnmap {\n\tlong unsigned int *tsn_map;\n\t__u32 base_tsn;\n\t__u32 cumulative_tsn_ack_point;\n\t__u32 max_tsn_seen;\n\t__u16 len;\n\t__u16 pending_data;\n\t__u16 num_dup_tsns;\n\t__be32 dup_tsns[16];\n};\n\nstruct sctp_inithdr_host {\n\t__u32 init_tag;\n\t__u32 a_rwnd;\n\t__u16 num_outbound_streams;\n\t__u16 num_inbound_streams;\n\t__u32 initial_tsn;\n};\n\nenum sctp_state {\n\tSCTP_STATE_CLOSED = 0,\n\tSCTP_STATE_COOKIE_WAIT = 1,\n\tSCTP_STATE_COOKIE_ECHOED = 2,\n\tSCTP_STATE_ESTABLISHED = 3,\n\tSCTP_STATE_SHUTDOWN_PENDING = 4,\n\tSCTP_STATE_SHUTDOWN_SENT = 5,\n\tSCTP_STATE_SHUTDOWN_RECEIVED = 6,\n\tSCTP_STATE_SHUTDOWN_ACK_SENT = 7,\n};\n\nstruct sctp_stream_out_ext;\n\nstruct sctp_stream_out {\n\tunion {\n\t\t__u32 mid;\n\t\t__u16 ssn;\n\t};\n\t__u32 mid_uo;\n\tstruct sctp_stream_out_ext *ext;\n\t__u8 state;\n};\n\nstruct sctp_stream_in {\n\tunion {\n\t\t__u32 mid;\n\t\t__u16 ssn;\n\t};\n\t__u32 mid_uo;\n\t__u32 fsn;\n\t__u32 fsn_uo;\n\tchar pd_mode;\n\tchar pd_mode_uo;\n};\n\nstruct sctp_stream_interleave;\n\nstruct sctp_stream {\n\tstruct {\n\t\tstruct __genradix tree;\n\t\tstruct sctp_stream_out type[0];\n\t} out;\n\tstruct {\n\t\tstruct __genradix tree;\n\t\tstruct sctp_stream_in type[0];\n\t} in;\n\t__u16 outcnt;\n\t__u16 incnt;\n\tstruct sctp_stream_out *out_curr;\n\tunion {\n\t\tstruct {\n\t\t\tstruct list_head prio_list;\n\t\t};\n\t\tstruct {\n\t\t\tstruct list_head rr_list;\n\t\t\tstruct sctp_stream_out_ext *rr_next;\n\t\t};\n\t};\n\tstruct sctp_stream_interleave *si;\n};\n\nstruct sctp_sched_ops;\n\nstruct sctp_association;\n\nstruct sctp_outq {\n\tstruct sctp_association *asoc;\n\tstruct list_head out_chunk_list;\n\tstruct sctp_sched_ops *sched;\n\tunsigned int out_qlen;\n\tunsigned int error;\n\tstruct list_head control_chunk_list;\n\tstruct list_head sacked;\n\tstruct list_head retransmit;\n\tstruct list_head abandoned;\n\t__u32 outstanding_bytes;\n\tchar fast_rtx;\n\tchar cork;\n};\n\nstruct sctp_ulpq {\n\tchar pd_mode;\n\tstruct sctp_association *asoc;\n\tstruct sk_buff_head reasm;\n\tstruct sk_buff_head reasm_uo;\n\tstruct sk_buff_head lobby;\n};\n\nstruct sctp_priv_assoc_stats {\n\tstruct __kernel_sockaddr_storage obs_rto_ipaddr;\n\t__u64 max_obs_rto;\n\t__u64 isacks;\n\t__u64 osacks;\n\t__u64 opackets;\n\t__u64 ipackets;\n\t__u64 rtxchunks;\n\t__u64 outofseqtsns;\n\t__u64 idupchunks;\n\t__u64 gapcnt;\n\t__u64 ouodchunks;\n\t__u64 iuodchunks;\n\t__u64 oodchunks;\n\t__u64 iodchunks;\n\t__u64 octrlchunks;\n\t__u64 ictrlchunks;\n};\n\nstruct sctp_transport;\n\nstruct sctp_auth_bytes;\n\nstruct sctp_shared_key;\n\nstruct sctp_association {\n\tstruct sctp_ep_common base;\n\tstruct list_head asocs;\n\tsctp_assoc_t assoc_id;\n\tstruct sctp_endpoint *ep;\n\tstruct sctp_cookie c;\n\tstruct {\n\t\tstruct list_head transport_addr_list;\n\t\t__u32 rwnd;\n\t\t__u16 transport_count;\n\t\t__u16 port;\n\t\tstruct sctp_transport *primary_path;\n\t\tunion sctp_addr primary_addr;\n\t\tstruct sctp_transport *active_path;\n\t\tstruct sctp_transport *retran_path;\n\t\tstruct sctp_transport *last_sent_to;\n\t\tstruct sctp_transport *last_data_from;\n\t\tstruct sctp_tsnmap tsn_map;\n\t\t__be16 addip_disabled_mask;\n\t\t__u16 ecn_capable: 1;\n\t\t__u16 ipv4_address: 1;\n\t\t__u16 ipv6_address: 1;\n\t\t__u16 hostname_address: 1;\n\t\t__u16 asconf_capable: 1;\n\t\t__u16 prsctp_capable: 1;\n\t\t__u16 reconf_capable: 1;\n\t\t__u16 intl_capable: 1;\n\t\t__u16 auth_capable: 1;\n\t\t__u16 sack_needed: 1;\n\t\t__u16 sack_generation: 1;\n\t\t__u16 zero_window_announced: 1;\n\t\t__u32 sack_cnt;\n\t\t__u32 adaptation_ind;\n\t\tstruct sctp_inithdr_host i;\n\t\tvoid *cookie;\n\t\tint cookie_len;\n\t\t__u32 addip_serial;\n\t\tstruct sctp_random_param *peer_random;\n\t\tstruct sctp_chunks_param *peer_chunks;\n\t\tstruct sctp_hmac_algo_param *peer_hmacs;\n\t} peer;\n\tenum sctp_state state;\n\tint overall_error_count;\n\tktime_t cookie_life;\n\tlong unsigned int rto_initial;\n\tlong unsigned int rto_max;\n\tlong unsigned int rto_min;\n\tint max_burst;\n\tint max_retrans;\n\t__u16 pf_retrans;\n\t__u16 ps_retrans;\n\t__u16 max_init_attempts;\n\t__u16 init_retries;\n\tlong unsigned int max_init_timeo;\n\tlong unsigned int hbinterval;\n\t__be16 encap_port;\n\t__u16 pathmaxrxt;\n\t__u32 flowlabel;\n\t__u8 dscp;\n\t__u8 pmtu_pending;\n\t__u32 pathmtu;\n\t__u32 param_flags;\n\t__u32 sackfreq;\n\tlong unsigned int sackdelay;\n\tlong unsigned int timeouts[11];\n\tstruct timer_list timers[11];\n\tstruct sctp_transport *shutdown_last_sent_to;\n\tstruct sctp_transport *init_last_sent_to;\n\tint shutdown_retries;\n\t__u32 next_tsn;\n\t__u32 ctsn_ack_point;\n\t__u32 adv_peer_ack_point;\n\t__u32 highest_sacked;\n\t__u32 fast_recovery_exit;\n\t__u8 fast_recovery;\n\t__u16 unack_data;\n\t__u32 rtx_data_chunks;\n\t__u32 rwnd;\n\t__u32 a_rwnd;\n\t__u32 rwnd_over;\n\t__u32 rwnd_press;\n\tint sndbuf_used;\n\tatomic_t rmem_alloc;\n\twait_queue_head_t wait;\n\t__u32 frag_point;\n\t__u32 user_frag;\n\tint init_err_counter;\n\tint init_cycle;\n\t__u16 default_stream;\n\t__u16 default_flags;\n\t__u32 default_ppid;\n\t__u32 default_context;\n\t__u32 default_timetolive;\n\t__u32 default_rcv_context;\n\tstruct sctp_stream stream;\n\tstruct sctp_outq outqueue;\n\tstruct sctp_ulpq ulpq;\n\t__u32 last_ecne_tsn;\n\t__u32 last_cwr_tsn;\n\tint numduptsns;\n\tstruct sctp_chunk *addip_last_asconf;\n\tstruct list_head asconf_ack_list;\n\tstruct list_head addip_chunk_list;\n\t__u32 addip_serial;\n\tint src_out_of_asoc_ok;\n\tunion sctp_addr *asconf_addr_del_pending;\n\tstruct sctp_transport *new_transport;\n\tstruct list_head endpoint_shared_keys;\n\tstruct sctp_auth_bytes *asoc_shared_key;\n\tstruct sctp_shared_key *shkey;\n\t__u16 default_hmac_id;\n\t__u16 active_key_id;\n\t__u8 need_ecne: 1;\n\t__u8 temp: 1;\n\t__u8 pf_expose: 2;\n\t__u8 force_delay: 1;\n\t__u8 strreset_enable;\n\t__u8 strreset_outstanding;\n\t__u32 strreset_outseq;\n\t__u32 strreset_inseq;\n\t__u32 strreset_result[2];\n\tstruct sctp_chunk *strreset_chunk;\n\tstruct sctp_priv_assoc_stats stats;\n\tint sent_cnt_removable;\n\t__u16 subscribe;\n\t__u64 abandoned_unsent[3];\n\t__u64 abandoned_sent[3];\n\tstruct callback_head rcu;\n};\n\nstruct sctp_auth_bytes {\n\trefcount_t refcnt;\n\t__u32 len;\n\t__u8 data[0];\n};\n\nstruct sctp_shared_key {\n\tstruct list_head key_list;\n\tstruct sctp_auth_bytes *key;\n\trefcount_t refcnt;\n\t__u16 key_id;\n\t__u8 deactivated;\n};\n\nenum {\n\tSCTP_MAX_STREAM = 65535,\n};\n\nenum sctp_event_timeout {\n\tSCTP_EVENT_TIMEOUT_NONE = 0,\n\tSCTP_EVENT_TIMEOUT_T1_COOKIE = 1,\n\tSCTP_EVENT_TIMEOUT_T1_INIT = 2,\n\tSCTP_EVENT_TIMEOUT_T2_SHUTDOWN = 3,\n\tSCTP_EVENT_TIMEOUT_T3_RTX = 4,\n\tSCTP_EVENT_TIMEOUT_T4_RTO = 5,\n\tSCTP_EVENT_TIMEOUT_T5_SHUTDOWN_GUARD = 6,\n\tSCTP_EVENT_TIMEOUT_HEARTBEAT = 7,\n\tSCTP_EVENT_TIMEOUT_RECONF = 8,\n\tSCTP_EVENT_TIMEOUT_SACK = 9,\n\tSCTP_EVENT_TIMEOUT_AUTOCLOSE = 10,\n};\n\nenum {\n\tSCTP_MAX_DUP_TSNS = 16,\n};\n\nenum sctp_scope {\n\tSCTP_SCOPE_GLOBAL = 0,\n\tSCTP_SCOPE_PRIVATE = 1,\n\tSCTP_SCOPE_LINK = 2,\n\tSCTP_SCOPE_LOOPBACK = 3,\n\tSCTP_SCOPE_UNUSABLE = 4,\n};\n\nenum {\n\tSCTP_AUTH_HMAC_ID_RESERVED_0 = 0,\n\tSCTP_AUTH_HMAC_ID_SHA1 = 1,\n\tSCTP_AUTH_HMAC_ID_RESERVED_2 = 2,\n\tSCTP_AUTH_HMAC_ID_SHA256 = 3,\n\t__SCTP_AUTH_HMAC_MAX = 4,\n};\n\nstruct sctp_ulpevent {\n\tstruct sctp_association *asoc;\n\tstruct sctp_chunk *chunk;\n\tunsigned int rmem_len;\n\tunion {\n\t\t__u32 mid;\n\t\t__u16 ssn;\n\t};\n\tunion {\n\t\t__u32 ppid;\n\t\t__u32 fsn;\n\t};\n\t__u32 tsn;\n\t__u32 cumtsn;\n\t__u16 stream;\n\t__u16 flags;\n\t__u16 msg_flags;\n} __attribute__((packed));\n\nunion sctp_addr_param;\n\nunion sctp_params {\n\tvoid *v;\n\tstruct sctp_paramhdr *p;\n\tstruct sctp_cookie_preserve_param *life;\n\tstruct sctp_hostname_param *dns;\n\tstruct sctp_cookie_param *cookie;\n\tstruct sctp_supported_addrs_param *sat;\n\tstruct sctp_ipv4addr_param *v4;\n\tstruct sctp_ipv6addr_param *v6;\n\tunion sctp_addr_param *addr;\n\tstruct sctp_adaptation_ind_param *aind;\n\tstruct sctp_supported_ext_param *ext;\n\tstruct sctp_random_param *random;\n\tstruct sctp_chunks_param *chunks;\n\tstruct sctp_hmac_algo_param *hmac_algo;\n\tstruct sctp_addip_param *addip;\n};\n\nstruct sctp_sender_hb_info;\n\nstruct sctp_signed_cookie;\n\nstruct sctp_datamsg;\n\nstruct sctp_chunk {\n\tstruct list_head list;\n\trefcount_t refcnt;\n\tint sent_count;\n\tunion {\n\t\tstruct list_head transmitted_list;\n\t\tstruct list_head stream_list;\n\t};\n\tstruct list_head frag_list;\n\tstruct sk_buff *skb;\n\tunion {\n\t\tstruct sk_buff *head_skb;\n\t\tstruct sctp_shared_key *shkey;\n\t};\n\tunion sctp_params param_hdr;\n\tunion {\n\t\t__u8 *v;\n\t\tstruct sctp_datahdr *data_hdr;\n\t\tstruct sctp_inithdr *init_hdr;\n\t\tstruct sctp_sackhdr *sack_hdr;\n\t\tstruct sctp_heartbeathdr *hb_hdr;\n\t\tstruct sctp_sender_hb_info *hbs_hdr;\n\t\tstruct sctp_shutdownhdr *shutdown_hdr;\n\t\tstruct sctp_signed_cookie *cookie_hdr;\n\t\tstruct sctp_ecnehdr *ecne_hdr;\n\t\tstruct sctp_cwrhdr *ecn_cwr_hdr;\n\t\tstruct sctp_errhdr *err_hdr;\n\t\tstruct sctp_addiphdr *addip_hdr;\n\t\tstruct sctp_fwdtsn_hdr *fwdtsn_hdr;\n\t\tstruct sctp_authhdr *auth_hdr;\n\t\tstruct sctp_idatahdr *idata_hdr;\n\t\tstruct sctp_ifwdtsn_hdr *ifwdtsn_hdr;\n\t} subh;\n\t__u8 *chunk_end;\n\tstruct sctp_chunkhdr *chunk_hdr;\n\tstruct sctphdr *sctp_hdr;\n\tstruct sctp_sndrcvinfo sinfo;\n\tstruct sctp_association *asoc;\n\tstruct sctp_ep_common *rcvr;\n\tlong unsigned int sent_at;\n\tunion sctp_addr source;\n\tunion sctp_addr dest;\n\tstruct sctp_datamsg *msg;\n\tstruct sctp_transport *transport;\n\tstruct sk_buff *auth_chunk;\n\t__u16 rtt_in_progress: 1;\n\t__u16 has_tsn: 1;\n\t__u16 has_ssn: 1;\n\t__u16 singleton: 1;\n\t__u16 end_of_packet: 1;\n\t__u16 ecn_ce_done: 1;\n\t__u16 pdiscard: 1;\n\t__u16 tsn_gap_acked: 1;\n\t__u16 data_accepted: 1;\n\t__u16 auth: 1;\n\t__u16 has_asconf: 1;\n\t__u16 tsn_missing_report: 2;\n\t__u16 fast_retransmit: 2;\n};\n\nstruct sctp_stream_interleave {\n\t__u16 data_chunk_len;\n\t__u16 ftsn_chunk_len;\n\tstruct sctp_chunk * (*make_datafrag)(const struct sctp_association *, const struct sctp_sndrcvinfo *, int, __u8, gfp_t);\n\tvoid (*assign_number)(struct sctp_chunk *);\n\tbool (*validate_data)(struct sctp_chunk *);\n\tint (*ulpevent_data)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);\n\tint (*enqueue_event)(struct sctp_ulpq *, struct sctp_ulpevent *);\n\tvoid (*renege_events)(struct sctp_ulpq *, struct sctp_chunk *, gfp_t);\n\tvoid (*start_pd)(struct sctp_ulpq *, gfp_t);\n\tvoid (*abort_pd)(struct sctp_ulpq *, gfp_t);\n\tvoid (*generate_ftsn)(struct sctp_outq *, __u32);\n\tbool (*validate_ftsn)(struct sctp_chunk *);\n\tvoid (*report_ftsn)(struct sctp_ulpq *, __u32);\n\tvoid (*handle_ftsn)(struct sctp_ulpq *, struct sctp_chunk *);\n};\n\nstruct sctp_bind_bucket {\n\tshort unsigned int port;\n\tsigned char fastreuse;\n\tsigned char fastreuseport;\n\tkuid_t fastuid;\n\tstruct hlist_node node;\n\tstruct hlist_head owner;\n\tstruct net *net;\n};\n\nenum sctp_socket_type {\n\tSCTP_SOCKET_UDP = 0,\n\tSCTP_SOCKET_UDP_HIGH_BANDWIDTH = 1,\n\tSCTP_SOCKET_TCP = 2,\n};\n\nstruct sctp_pf;\n\nstruct sctp_sock {\n\tstruct inet_sock inet;\n\tenum sctp_socket_type type;\n\tstruct sctp_pf *pf;\n\tstruct crypto_shash *hmac;\n\tchar *sctp_hmac_alg;\n\tstruct sctp_endpoint *ep;\n\tstruct sctp_bind_bucket *bind_hash;\n\t__u16 default_stream;\n\t__u32 default_ppid;\n\t__u16 default_flags;\n\t__u32 default_context;\n\t__u32 default_timetolive;\n\t__u32 default_rcv_context;\n\tint max_burst;\n\t__u32 hbinterval;\n\t__be16 udp_port;\n\t__be16 encap_port;\n\t__u16 pathmaxrxt;\n\t__u32 flowlabel;\n\t__u8 dscp;\n\t__u16 pf_retrans;\n\t__u16 ps_retrans;\n\t__u32 pathmtu;\n\t__u32 sackdelay;\n\t__u32 sackfreq;\n\t__u32 param_flags;\n\t__u32 default_ss;\n\tstruct sctp_rtoinfo rtoinfo;\n\tstruct sctp_paddrparams paddrparam;\n\tstruct sctp_assocparams assocparams;\n\t__u16 subscribe;\n\tstruct sctp_initmsg initmsg;\n\tint user_frag;\n\t__u32 autoclose;\n\t__u32 adaptation_ind;\n\t__u32 pd_point;\n\t__u16 nodelay: 1;\n\t__u16 pf_expose: 2;\n\t__u16 reuse: 1;\n\t__u16 disable_fragments: 1;\n\t__u16 v4mapped: 1;\n\t__u16 frag_interleave: 1;\n\t__u16 recvrcvinfo: 1;\n\t__u16 recvnxtinfo: 1;\n\t__u16 data_ready_signalled: 1;\n\tatomic_t pd_mode;\n\tstruct sk_buff_head pd_lobby;\n\tstruct list_head auto_asconf_list;\n\tint do_auto_asconf;\n};\n\nstruct sctp_af;\n\nstruct sctp_pf {\n\tvoid (*event_msgname)(struct sctp_ulpevent *, char *, int *);\n\tvoid (*skb_msgname)(struct sk_buff *, char *, int *);\n\tint (*af_supported)(sa_family_t, struct sctp_sock *);\n\tint (*cmp_addr)(const union sctp_addr *, const union sctp_addr *, struct sctp_sock *);\n\tint (*bind_verify)(struct sctp_sock *, union sctp_addr *);\n\tint (*send_verify)(struct sctp_sock *, union sctp_addr *);\n\tint (*supported_addrs)(const struct sctp_sock *, __be16 *);\n\tstruct sock * (*create_accept_sk)(struct sock *, struct sctp_association *, bool);\n\tint (*addr_to_user)(struct sctp_sock *, union sctp_addr *);\n\tvoid (*to_sk_saddr)(union sctp_addr *, struct sock *);\n\tvoid (*to_sk_daddr)(union sctp_addr *, struct sock *);\n\tvoid (*copy_ip_options)(struct sock *, struct sock *);\n\tstruct sctp_af *af;\n};\n\nstruct sctp_signed_cookie {\n\t__u8 signature[32];\n\t__u32 __pad;\n\tstruct sctp_cookie c;\n} __attribute__((packed));\n\nunion sctp_addr_param {\n\tstruct sctp_paramhdr p;\n\tstruct sctp_ipv4addr_param v4;\n\tstruct sctp_ipv6addr_param v6;\n};\n\nstruct sctp_sender_hb_info {\n\tstruct sctp_paramhdr param_hdr;\n\tunion sctp_addr daddr;\n\tlong unsigned int sent_at;\n\t__u64 hb_nonce;\n};\n\nstruct sctp_af {\n\tint (*sctp_xmit)(struct sk_buff *, struct sctp_transport *);\n\tint (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);\n\tint (*getsockopt)(struct sock *, int, int, char *, int *);\n\tvoid (*get_dst)(struct sctp_transport *, union sctp_addr *, struct flowi *, struct sock *);\n\tvoid (*get_saddr)(struct sctp_sock *, struct sctp_transport *, struct flowi *);\n\tvoid (*copy_addrlist)(struct list_head *, struct net_device *);\n\tint (*cmp_addr)(const union sctp_addr *, const union sctp_addr *);\n\tvoid (*addr_copy)(union sctp_addr *, union sctp_addr *);\n\tvoid (*from_skb)(union sctp_addr *, struct sk_buff *, int);\n\tvoid (*from_sk)(union sctp_addr *, struct sock *);\n\tvoid (*from_addr_param)(union sctp_addr *, union sctp_addr_param *, __be16, int);\n\tint (*to_addr_param)(const union sctp_addr *, union sctp_addr_param *);\n\tint (*addr_valid)(union sctp_addr *, struct sctp_sock *, const struct sk_buff *);\n\tenum sctp_scope (*scope)(union sctp_addr *);\n\tvoid (*inaddr_any)(union sctp_addr *, __be16);\n\tint (*is_any)(const union sctp_addr *);\n\tint (*available)(union sctp_addr *, struct sctp_sock *);\n\tint (*skb_iif)(const struct sk_buff *);\n\tint (*is_ce)(const struct sk_buff *);\n\tvoid (*seq_dump_addr)(struct seq_file *, union sctp_addr *);\n\tvoid (*ecn_capable)(struct sock *);\n\t__u16 net_header_len;\n\tint sockaddr_len;\n\tint (*ip_options_len)(struct sock *);\n\tsa_family_t sa_family;\n\tstruct list_head list;\n};\n\nstruct sctp_packet {\n\t__u16 source_port;\n\t__u16 destination_port;\n\t__u32 vtag;\n\tstruct list_head chunk_list;\n\tsize_t overhead;\n\tsize_t size;\n\tsize_t max_size;\n\tstruct sctp_transport *transport;\n\tstruct sctp_chunk *auth;\n\tu8 has_cookie_echo: 1;\n\tu8 has_sack: 1;\n\tu8 has_auth: 1;\n\tu8 has_data: 1;\n\tu8 ipfragok: 1;\n};\n\nstruct sctp_transport {\n\tstruct list_head transports;\n\tstruct rhlist_head node;\n\trefcount_t refcnt;\n\t__u32 rto_pending: 1;\n\t__u32 hb_sent: 1;\n\t__u32 pmtu_pending: 1;\n\t__u32 dst_pending_confirm: 1;\n\t__u32 sack_generation: 1;\n\tu32 dst_cookie;\n\tstruct flowi fl;\n\tunion sctp_addr ipaddr;\n\tstruct sctp_af *af_specific;\n\tstruct sctp_association *asoc;\n\tlong unsigned int rto;\n\t__u32 rtt;\n\t__u32 rttvar;\n\t__u32 srtt;\n\t__u32 cwnd;\n\t__u32 ssthresh;\n\t__u32 partial_bytes_acked;\n\t__u32 flight_size;\n\t__u32 burst_limited;\n\tstruct dst_entry *dst;\n\tunion sctp_addr saddr;\n\tlong unsigned int hbinterval;\n\tlong unsigned int sackdelay;\n\t__u32 sackfreq;\n\tatomic_t mtu_info;\n\tktime_t last_time_heard;\n\tlong unsigned int last_time_sent;\n\tlong unsigned int last_time_ecne_reduced;\n\t__be16 encap_port;\n\t__u16 pathmaxrxt;\n\t__u32 flowlabel;\n\t__u8 dscp;\n\t__u16 pf_retrans;\n\t__u16 ps_retrans;\n\t__u32 pathmtu;\n\t__u32 param_flags;\n\tint init_sent_count;\n\tint state;\n\tshort unsigned int error_count;\n\tstruct timer_list T3_rtx_timer;\n\tstruct timer_list hb_timer;\n\tstruct timer_list proto_unreach_timer;\n\tstruct timer_list reconf_timer;\n\tstruct list_head transmitted;\n\tstruct sctp_packet packet;\n\tstruct list_head send_ready;\n\tstruct {\n\t\t__u32 next_tsn_at_change;\n\t\tchar changeover_active;\n\t\tchar cycling_changeover;\n\t\tchar cacc_saw_newack;\n\t} cacc;\n\t__u64 hb_nonce;\n\tstruct callback_head rcu;\n};\n\nstruct sctp_datamsg {\n\tstruct list_head chunks;\n\trefcount_t refcnt;\n\tlong unsigned int expires_at;\n\tint send_error;\n\tu8 send_failed: 1;\n\tu8 can_delay: 1;\n\tu8 abandoned: 1;\n};\n\nstruct sctp_stream_priorities {\n\tstruct list_head prio_sched;\n\tstruct list_head active;\n\tstruct sctp_stream_out_ext *next;\n\t__u16 prio;\n};\n\nstruct sctp_stream_out_ext {\n\t__u64 abandoned_unsent[3];\n\t__u64 abandoned_sent[3];\n\tstruct list_head outq;\n\tunion {\n\t\tstruct {\n\t\t\tstruct list_head prio_list;\n\t\t\tstruct sctp_stream_priorities *prio_head;\n\t\t};\n\t\tstruct {\n\t\t\tstruct list_head rr_list;\n\t\t};\n\t};\n};\n\nstruct task_security_struct {\n\tu32 osid;\n\tu32 sid;\n\tu32 exec_sid;\n\tu32 create_sid;\n\tu32 keycreate_sid;\n\tu32 sockcreate_sid;\n};\n\nenum label_initialized {\n\tLABEL_INVALID = 0,\n\tLABEL_INITIALIZED = 1,\n\tLABEL_PENDING = 2,\n};\n\nstruct inode_security_struct {\n\tstruct inode *inode;\n\tstruct list_head list;\n\tu32 task_sid;\n\tu32 sid;\n\tu16 sclass;\n\tunsigned char initialized;\n\tspinlock_t lock;\n};\n\nstruct file_security_struct {\n\tu32 sid;\n\tu32 fown_sid;\n\tu32 isid;\n\tu32 pseqno;\n};\n\nstruct superblock_security_struct {\n\tu32 sid;\n\tu32 def_sid;\n\tu32 mntpoint_sid;\n\tshort unsigned int behavior;\n\tshort unsigned int flags;\n\tstruct mutex lock;\n\tstruct list_head isec_head;\n\tspinlock_t isec_lock;\n};\n\nstruct msg_security_struct {\n\tu32 sid;\n};\n\nstruct ipc_security_struct {\n\tu16 sclass;\n\tu32 sid;\n};\n\nstruct sk_security_struct {\n\tenum {\n\t\tNLBL_UNSET = 0,\n\t\tNLBL_REQUIRE = 1,\n\t\tNLBL_LABELED = 2,\n\t\tNLBL_REQSKB = 3,\n\t\tNLBL_CONNLABELED = 4,\n\t} nlbl_state;\n\tstruct netlbl_lsm_secattr *nlbl_secattr;\n\tu32 sid;\n\tu32 peer_sid;\n\tu16 sclass;\n\tenum {\n\t\tSCTP_ASSOC_UNSET = 0,\n\t\tSCTP_ASSOC_SET = 1,\n\t} sctp_assoc_state;\n};\n\nstruct tun_security_struct {\n\tu32 sid;\n};\n\nstruct key_security_struct {\n\tu32 sid;\n};\n\nstruct ib_security_struct {\n\tu32 sid;\n};\n\nstruct bpf_security_struct {\n\tu32 sid;\n};\n\nstruct perf_event_security_struct {\n\tu32 sid;\n};\n\nstruct selinux_mnt_opts {\n\tconst char *fscontext;\n\tconst char *context;\n\tconst char *rootcontext;\n\tconst char *defcontext;\n};\n\nenum {\n\tOpt_error___2 = 4294967295,\n\tOpt_context = 0,\n\tOpt_defcontext = 1,\n\tOpt_fscontext = 2,\n\tOpt_rootcontext = 3,\n\tOpt_seclabel = 4,\n};\n\nstruct selinux_policy_convert_data;\n\nstruct selinux_load_state {\n\tstruct selinux_policy *policy;\n\tstruct selinux_policy_convert_data *convert_data;\n};\n\nenum sel_inos {\n\tSEL_ROOT_INO = 2,\n\tSEL_LOAD = 3,\n\tSEL_ENFORCE = 4,\n\tSEL_CONTEXT = 5,\n\tSEL_ACCESS = 6,\n\tSEL_CREATE = 7,\n\tSEL_RELABEL = 8,\n\tSEL_USER = 9,\n\tSEL_POLICYVERS = 10,\n\tSEL_COMMIT_BOOLS = 11,\n\tSEL_MLS = 12,\n\tSEL_DISABLE = 13,\n\tSEL_MEMBER = 14,\n\tSEL_CHECKREQPROT = 15,\n\tSEL_COMPAT_NET = 16,\n\tSEL_REJECT_UNKNOWN = 17,\n\tSEL_DENY_UNKNOWN = 18,\n\tSEL_STATUS = 19,\n\tSEL_POLICY = 20,\n\tSEL_VALIDATE_TRANS = 21,\n\tSEL_INO_NEXT = 22,\n};\n\nstruct selinux_fs_info {\n\tstruct dentry *bool_dir;\n\tunsigned int bool_num;\n\tchar **bool_pending_names;\n\tunsigned int *bool_pending_values;\n\tstruct dentry *class_dir;\n\tlong unsigned int last_class_ino;\n\tbool policy_opened;\n\tstruct dentry *policycap_dir;\n\tlong unsigned int last_ino;\n\tstruct selinux_state *state;\n\tstruct super_block *sb;\n};\n\nstruct policy_load_memory {\n\tsize_t len;\n\tvoid *data;\n};\n\nenum {\n\tSELNL_MSG_SETENFORCE = 16,\n\tSELNL_MSG_POLICYLOAD = 17,\n\tSELNL_MSG_MAX = 18,\n};\n\nenum selinux_nlgroups {\n\tSELNLGRP_NONE = 0,\n\tSELNLGRP_AVC = 1,\n\t__SELNLGRP_MAX = 2,\n};\n\nstruct selnl_msg_setenforce {\n\t__s32 val;\n};\n\nstruct selnl_msg_policyload {\n\t__u32 seqno;\n};\n\nenum {\n\tXFRM_MSG_BASE = 16,\n\tXFRM_MSG_NEWSA = 16,\n\tXFRM_MSG_DELSA = 17,\n\tXFRM_MSG_GETSA = 18,\n\tXFRM_MSG_NEWPOLICY = 19,\n\tXFRM_MSG_DELPOLICY = 20,\n\tXFRM_MSG_GETPOLICY = 21,\n\tXFRM_MSG_ALLOCSPI = 22,\n\tXFRM_MSG_ACQUIRE = 23,\n\tXFRM_MSG_EXPIRE = 24,\n\tXFRM_MSG_UPDPOLICY = 25,\n\tXFRM_MSG_UPDSA = 26,\n\tXFRM_MSG_POLEXPIRE = 27,\n\tXFRM_MSG_FLUSHSA = 28,\n\tXFRM_MSG_FLUSHPOLICY = 29,\n\tXFRM_MSG_NEWAE = 30,\n\tXFRM_MSG_GETAE = 31,\n\tXFRM_MSG_REPORT = 32,\n\tXFRM_MSG_MIGRATE = 33,\n\tXFRM_MSG_NEWSADINFO = 34,\n\tXFRM_MSG_GETSADINFO = 35,\n\tXFRM_MSG_NEWSPDINFO = 36,\n\tXFRM_MSG_GETSPDINFO = 37,\n\tXFRM_MSG_MAPPING = 38,\n\t__XFRM_MSG_MAX = 39,\n};\n\nenum {\n\tRTM_BASE = 16,\n\tRTM_NEWLINK = 16,\n\tRTM_DELLINK = 17,\n\tRTM_GETLINK = 18,\n\tRTM_SETLINK = 19,\n\tRTM_NEWADDR = 20,\n\tRTM_DELADDR = 21,\n\tRTM_GETADDR = 22,\n\tRTM_NEWROUTE = 24,\n\tRTM_DELROUTE = 25,\n\tRTM_GETROUTE = 26,\n\tRTM_NEWNEIGH = 28,\n\tRTM_DELNEIGH = 29,\n\tRTM_GETNEIGH = 30,\n\tRTM_NEWRULE = 32,\n\tRTM_DELRULE = 33,\n\tRTM_GETRULE = 34,\n\tRTM_NEWQDISC = 36,\n\tRTM_DELQDISC = 37,\n\tRTM_GETQDISC = 38,\n\tRTM_NEWTCLASS = 40,\n\tRTM_DELTCLASS = 41,\n\tRTM_GETTCLASS = 42,\n\tRTM_NEWTFILTER = 44,\n\tRTM_DELTFILTER = 45,\n\tRTM_GETTFILTER = 46,\n\tRTM_NEWACTION = 48,\n\tRTM_DELACTION = 49,\n\tRTM_GETACTION = 50,\n\tRTM_NEWPREFIX = 52,\n\tRTM_GETMULTICAST = 58,\n\tRTM_GETANYCAST = 62,\n\tRTM_NEWNEIGHTBL = 64,\n\tRTM_GETNEIGHTBL = 66,\n\tRTM_SETNEIGHTBL = 67,\n\tRTM_NEWNDUSEROPT = 68,\n\tRTM_NEWADDRLABEL = 72,\n\tRTM_DELADDRLABEL = 73,\n\tRTM_GETADDRLABEL = 74,\n\tRTM_GETDCB = 78,\n\tRTM_SETDCB = 79,\n\tRTM_NEWNETCONF = 80,\n\tRTM_DELNETCONF = 81,\n\tRTM_GETNETCONF = 82,\n\tRTM_NEWMDB = 84,\n\tRTM_DELMDB = 85,\n\tRTM_GETMDB = 86,\n\tRTM_NEWNSID = 88,\n\tRTM_DELNSID = 89,\n\tRTM_GETNSID = 90,\n\tRTM_NEWSTATS = 92,\n\tRTM_GETSTATS = 94,\n\tRTM_NEWCACHEREPORT = 96,\n\tRTM_NEWCHAIN = 100,\n\tRTM_DELCHAIN = 101,\n\tRTM_GETCHAIN = 102,\n\tRTM_NEWNEXTHOP = 104,\n\tRTM_DELNEXTHOP = 105,\n\tRTM_GETNEXTHOP = 106,\n\tRTM_NEWLINKPROP = 108,\n\tRTM_DELLINKPROP = 109,\n\tRTM_GETLINKPROP = 110,\n\tRTM_NEWVLAN = 112,\n\tRTM_DELVLAN = 113,\n\tRTM_GETVLAN = 114,\n\t__RTM_MAX = 115,\n};\n\nstruct nlmsg_perm {\n\tu16 nlmsg_type;\n\tu32 perm;\n};\n\nstruct netif_security_struct {\n\tstruct net *ns;\n\tint ifindex;\n\tu32 sid;\n};\n\nstruct sel_netif {\n\tstruct list_head list;\n\tstruct netif_security_struct nsec;\n\tstruct callback_head callback_head;\n};\n\nstruct netnode_security_struct {\n\tunion {\n\t\t__be32 ipv4;\n\t\tstruct in6_addr ipv6;\n\t} addr;\n\tu32 sid;\n\tu16 family;\n};\n\nstruct sel_netnode_bkt {\n\tunsigned int size;\n\tstruct list_head list;\n};\n\nstruct sel_netnode {\n\tstruct netnode_security_struct nsec;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n};\n\nstruct netport_security_struct {\n\tu32 sid;\n\tu16 port;\n\tu8 protocol;\n};\n\nstruct sel_netport_bkt {\n\tint size;\n\tstruct list_head list;\n};\n\nstruct sel_netport {\n\tstruct netport_security_struct psec;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n};\n\nstruct selinux_kernel_status {\n\tu32 version;\n\tu32 sequence;\n\tu32 enforcing;\n\tu32 policyload;\n\tu32 deny_unknown;\n};\n\nstruct ebitmap_node {\n\tstruct ebitmap_node *next;\n\tlong unsigned int maps[6];\n\tu32 startbit;\n};\n\nstruct ebitmap {\n\tstruct ebitmap_node *node;\n\tu32 highbit;\n};\n\nstruct policy_file {\n\tchar *data;\n\tsize_t len;\n};\n\nstruct hashtab_node {\n\tvoid *key;\n\tvoid *datum;\n\tstruct hashtab_node *next;\n};\n\nstruct hashtab {\n\tstruct hashtab_node **htable;\n\tu32 size;\n\tu32 nel;\n};\n\nstruct hashtab_info {\n\tu32 slots_used;\n\tu32 max_chain_len;\n};\n\nstruct hashtab_key_params {\n\tu32 (*hash)(const void *);\n\tint (*cmp)(const void *, const void *);\n};\n\nstruct symtab {\n\tstruct hashtab table;\n\tu32 nprim;\n};\n\nstruct mls_level {\n\tu32 sens;\n\tstruct ebitmap cat;\n};\n\nstruct mls_range {\n\tstruct mls_level level[2];\n};\n\nstruct context___2 {\n\tu32 user;\n\tu32 role;\n\tu32 type;\n\tu32 len;\n\tstruct mls_range range;\n\tchar *str;\n};\n\nstruct sidtab_str_cache;\n\nstruct sidtab_entry {\n\tu32 sid;\n\tu32 hash;\n\tstruct context___2 context;\n\tstruct sidtab_str_cache *cache;\n\tstruct hlist_node list;\n};\n\nstruct sidtab_str_cache {\n\tstruct callback_head rcu_member;\n\tstruct list_head lru_member;\n\tstruct sidtab_entry *parent;\n\tu32 len;\n\tchar str[0];\n};\n\nstruct sidtab_node_inner;\n\nstruct sidtab_node_leaf;\n\nunion sidtab_entry_inner {\n\tstruct sidtab_node_inner *ptr_inner;\n\tstruct sidtab_node_leaf *ptr_leaf;\n};\n\nstruct sidtab_node_inner {\n\tunion sidtab_entry_inner entries[512];\n};\n\nstruct sidtab_node_leaf {\n\tstruct sidtab_entry entries[39];\n};\n\nstruct sidtab_isid_entry {\n\tint set;\n\tstruct sidtab_entry entry;\n};\n\nstruct sidtab;\n\nstruct sidtab_convert_params {\n\tint (*func)(struct context___2 *, struct context___2 *, void *);\n\tvoid *args;\n\tstruct sidtab *target;\n};\n\nstruct sidtab {\n\tunion sidtab_entry_inner roots[4];\n\tu32 count;\n\tstruct sidtab_convert_params *convert;\n\tbool frozen;\n\tspinlock_t lock;\n\tu32 cache_free_slots;\n\tstruct list_head cache_lru_list;\n\tspinlock_t cache_lock;\n\tstruct sidtab_isid_entry isids[27];\n\tstruct hlist_head context_to_sid[512];\n};\n\nstruct avtab_key {\n\tu16 source_type;\n\tu16 target_type;\n\tu16 target_class;\n\tu16 specified;\n};\n\nstruct avtab_extended_perms {\n\tu8 specified;\n\tu8 driver;\n\tstruct extended_perms_data perms;\n};\n\nstruct avtab_datum {\n\tunion {\n\t\tu32 data;\n\t\tstruct avtab_extended_perms *xperms;\n\t} u;\n};\n\nstruct avtab_node {\n\tstruct avtab_key key;\n\tstruct avtab_datum datum;\n\tstruct avtab_node *next;\n};\n\nstruct avtab {\n\tstruct avtab_node **htable;\n\tu32 nel;\n\tu32 nslot;\n\tu32 mask;\n};\n\nstruct type_set;\n\nstruct constraint_expr {\n\tu32 expr_type;\n\tu32 attr;\n\tu32 op;\n\tstruct ebitmap names;\n\tstruct type_set *type_names;\n\tstruct constraint_expr *next;\n};\n\nstruct type_set {\n\tstruct ebitmap types;\n\tstruct ebitmap negset;\n\tu32 flags;\n};\n\nstruct constraint_node {\n\tu32 permissions;\n\tstruct constraint_expr *expr;\n\tstruct constraint_node *next;\n};\n\nstruct common_datum {\n\tu32 value;\n\tstruct symtab permissions;\n};\n\nstruct class_datum {\n\tu32 value;\n\tchar *comkey;\n\tstruct common_datum *comdatum;\n\tstruct symtab permissions;\n\tstruct constraint_node *constraints;\n\tstruct constraint_node *validatetrans;\n\tchar default_user;\n\tchar default_role;\n\tchar default_type;\n\tchar default_range;\n};\n\nstruct role_datum {\n\tu32 value;\n\tu32 bounds;\n\tstruct ebitmap dominates;\n\tstruct ebitmap types;\n};\n\nstruct role_allow {\n\tu32 role;\n\tu32 new_role;\n\tstruct role_allow *next;\n};\n\nstruct type_datum {\n\tu32 value;\n\tu32 bounds;\n\tunsigned char primary;\n\tunsigned char attribute;\n};\n\nstruct user_datum {\n\tu32 value;\n\tu32 bounds;\n\tstruct ebitmap roles;\n\tstruct mls_range range;\n\tstruct mls_level dfltlevel;\n};\n\nstruct cond_bool_datum {\n\t__u32 value;\n\tint state;\n};\n\nstruct ocontext {\n\tunion {\n\t\tchar *name;\n\t\tstruct {\n\t\t\tu8 protocol;\n\t\t\tu16 low_port;\n\t\t\tu16 high_port;\n\t\t} port;\n\t\tstruct {\n\t\t\tu32 addr;\n\t\t\tu32 mask;\n\t\t} node;\n\t\tstruct {\n\t\t\tu32 addr[4];\n\t\t\tu32 mask[4];\n\t\t} node6;\n\t\tstruct {\n\t\t\tu64 subnet_prefix;\n\t\t\tu16 low_pkey;\n\t\t\tu16 high_pkey;\n\t\t} ibpkey;\n\t\tstruct {\n\t\t\tchar *dev_name;\n\t\t\tu8 port;\n\t\t} ibendport;\n\t} u;\n\tunion {\n\t\tu32 sclass;\n\t\tu32 behavior;\n\t} v;\n\tstruct context___2 context[2];\n\tu32 sid[2];\n\tstruct ocontext *next;\n};\n\nstruct genfs {\n\tchar *fstype;\n\tstruct ocontext *head;\n\tstruct genfs *next;\n};\n\nstruct cond_node;\n\nstruct policydb {\n\tint mls_enabled;\n\tstruct symtab symtab[8];\n\tchar **sym_val_to_name[8];\n\tstruct class_datum **class_val_to_struct;\n\tstruct role_datum **role_val_to_struct;\n\tstruct user_datum **user_val_to_struct;\n\tstruct type_datum **type_val_to_struct;\n\tstruct avtab te_avtab;\n\tstruct hashtab role_tr;\n\tstruct ebitmap filename_trans_ttypes;\n\tstruct hashtab filename_trans;\n\tu32 compat_filename_trans_count;\n\tstruct cond_bool_datum **bool_val_to_struct;\n\tstruct avtab te_cond_avtab;\n\tstruct cond_node *cond_list;\n\tu32 cond_list_len;\n\tstruct role_allow *role_allow;\n\tstruct ocontext *ocontexts[9];\n\tstruct genfs *genfs;\n\tstruct hashtab range_tr;\n\tstruct ebitmap *type_attr_map_array;\n\tstruct ebitmap policycaps;\n\tstruct ebitmap permissive_map;\n\tsize_t len;\n\tunsigned int policyvers;\n\tunsigned int reject_unknown: 1;\n\tunsigned int allow_unknown: 1;\n\tu16 process_class;\n\tu32 process_trans_perms;\n};\n\nstruct perm_datum {\n\tu32 value;\n};\n\nstruct role_trans_key {\n\tu32 role;\n\tu32 type;\n\tu32 tclass;\n};\n\nstruct role_trans_datum {\n\tu32 new_role;\n};\n\nstruct filename_trans_key {\n\tu32 ttype;\n\tu16 tclass;\n\tconst char *name;\n};\n\nstruct filename_trans_datum {\n\tstruct ebitmap stypes;\n\tu32 otype;\n\tstruct filename_trans_datum *next;\n};\n\nstruct level_datum {\n\tstruct mls_level *level;\n\tunsigned char isalias;\n};\n\nstruct cat_datum {\n\tu32 value;\n\tunsigned char isalias;\n};\n\nstruct range_trans {\n\tu32 source_type;\n\tu32 target_type;\n\tu32 target_class;\n};\n\nstruct cond_expr_node;\n\nstruct cond_expr {\n\tstruct cond_expr_node *nodes;\n\tu32 len;\n};\n\nstruct cond_av_list {\n\tstruct avtab_node **nodes;\n\tu32 len;\n};\n\nstruct cond_node {\n\tint cur_state;\n\tstruct cond_expr expr;\n\tstruct cond_av_list true_list;\n\tstruct cond_av_list false_list;\n};\n\nstruct policy_data {\n\tstruct policydb *p;\n\tvoid *fp;\n};\n\nstruct cond_expr_node {\n\tu32 expr_type;\n\tu32 bool;\n};\n\nstruct policydb_compat_info {\n\tint version;\n\tint sym_num;\n\tint ocon_num;\n};\n\nstruct selinux_mapping;\n\nstruct selinux_map {\n\tstruct selinux_mapping *mapping;\n\tu16 size;\n};\n\nstruct selinux_policy {\n\tstruct sidtab *sidtab;\n\tstruct policydb policydb;\n\tstruct selinux_map map;\n\tu32 latest_granting;\n};\n\nstruct convert_context_args {\n\tstruct selinux_state *state;\n\tstruct policydb *oldp;\n\tstruct policydb *newp;\n};\n\nstruct selinux_policy_convert_data {\n\tstruct convert_context_args args;\n\tstruct sidtab_convert_params sidtab_params;\n};\n\nstruct selinux_mapping {\n\tu16 value;\n\tunsigned int num_perms;\n\tu32 perms[32];\n};\n\nstruct selinux_audit_rule {\n\tu32 au_seqno;\n\tstruct context___2 au_ctxt;\n};\n\nstruct cond_insertf_data {\n\tstruct policydb *p;\n\tstruct avtab_node **dst;\n\tstruct cond_av_list *other;\n};\n\nstruct rt6key {\n\tstruct in6_addr addr;\n\tint plen;\n};\n\nstruct rtable;\n\nstruct fnhe_hash_bucket;\n\nstruct fib_nh_common {\n\tstruct net_device *nhc_dev;\n\tint nhc_oif;\n\tunsigned char nhc_scope;\n\tu8 nhc_family;\n\tu8 nhc_gw_family;\n\tunsigned char nhc_flags;\n\tstruct lwtunnel_state *nhc_lwtstate;\n\tunion {\n\t\t__be32 ipv4;\n\t\tstruct in6_addr ipv6;\n\t} nhc_gw;\n\tint nhc_weight;\n\tatomic_t nhc_upper_bound;\n\tstruct rtable **nhc_pcpu_rth_output;\n\tstruct rtable *nhc_rth_input;\n\tstruct fnhe_hash_bucket *nhc_exceptions;\n};\n\nstruct rt6_exception_bucket;\n\nstruct fib6_nh {\n\tstruct fib_nh_common nh_common;\n\tlong unsigned int last_probe;\n\tstruct rt6_info **rt6i_pcpu;\n\tstruct rt6_exception_bucket *rt6i_exception_bucket;\n};\n\nstruct fib6_node;\n\nstruct dst_metrics;\n\nstruct nexthop;\n\nstruct fib6_info {\n\tstruct fib6_table *fib6_table;\n\tstruct fib6_info *fib6_next;\n\tstruct fib6_node *fib6_node;\n\tunion {\n\t\tstruct list_head fib6_siblings;\n\t\tstruct list_head nh_list;\n\t};\n\tunsigned int fib6_nsiblings;\n\trefcount_t fib6_ref;\n\tlong unsigned int expires;\n\tstruct dst_metrics *fib6_metrics;\n\tstruct rt6key fib6_dst;\n\tu32 fib6_flags;\n\tstruct rt6key fib6_src;\n\tstruct rt6key fib6_prefsrc;\n\tu32 fib6_metric;\n\tu8 fib6_protocol;\n\tu8 fib6_type;\n\tu8 should_flush: 1;\n\tu8 dst_nocount: 1;\n\tu8 dst_nopolicy: 1;\n\tu8 fib6_destroying: 1;\n\tu8 offload: 1;\n\tu8 trap: 1;\n\tu8 unused: 2;\n\tstruct callback_head rcu;\n\tstruct nexthop *nh;\n\tstruct fib6_nh fib6_nh[0];\n};\n\nstruct uncached_list;\n\nstruct rt6_info {\n\tstruct dst_entry dst;\n\tstruct fib6_info *from;\n\tint sernum;\n\tstruct rt6key rt6i_dst;\n\tstruct rt6key rt6i_src;\n\tstruct in6_addr rt6i_gateway;\n\tstruct inet6_dev *rt6i_idev;\n\tu32 rt6i_flags;\n\tstruct list_head rt6i_uncached;\n\tstruct uncached_list *rt6i_uncached_list;\n\tshort unsigned int rt6i_nfheader_len;\n};\n\nstruct rt6_statistics {\n\t__u32 fib_nodes;\n\t__u32 fib_route_nodes;\n\t__u32 fib_rt_entries;\n\t__u32 fib_rt_cache;\n\t__u32 fib_discarded_routes;\n\tatomic_t fib_rt_alloc;\n\tatomic_t fib_rt_uncache;\n};\n\nstruct fib6_node {\n\tstruct fib6_node *parent;\n\tstruct fib6_node *left;\n\tstruct fib6_node *right;\n\tstruct fib6_node *subtree;\n\tstruct fib6_info *leaf;\n\t__u16 fn_bit;\n\t__u16 fn_flags;\n\tint fn_sernum;\n\tstruct fib6_info *rr_ptr;\n\tstruct callback_head rcu;\n};\n\nstruct fib6_table {\n\tstruct hlist_node tb6_hlist;\n\tu32 tb6_id;\n\tspinlock_t tb6_lock;\n\tstruct fib6_node tb6_root;\n\tstruct inet_peer_base tb6_peers;\n\tunsigned int flags;\n\tunsigned int fib_seq;\n};\n\ntypedef union {\n\t__be32 a4;\n\t__be32 a6[4];\n\tstruct in6_addr in6;\n} xfrm_address_t;\n\nstruct xfrm_id {\n\txfrm_address_t daddr;\n\t__be32 spi;\n\t__u8 proto;\n};\n\nstruct xfrm_selector {\n\txfrm_address_t daddr;\n\txfrm_address_t saddr;\n\t__be16 dport;\n\t__be16 dport_mask;\n\t__be16 sport;\n\t__be16 sport_mask;\n\t__u16 family;\n\t__u8 prefixlen_d;\n\t__u8 prefixlen_s;\n\t__u8 proto;\n\tint ifindex;\n\t__kernel_uid32_t user;\n};\n\nstruct xfrm_lifetime_cfg {\n\t__u64 soft_byte_limit;\n\t__u64 hard_byte_limit;\n\t__u64 soft_packet_limit;\n\t__u64 hard_packet_limit;\n\t__u64 soft_add_expires_seconds;\n\t__u64 hard_add_expires_seconds;\n\t__u64 soft_use_expires_seconds;\n\t__u64 hard_use_expires_seconds;\n};\n\nstruct xfrm_lifetime_cur {\n\t__u64 bytes;\n\t__u64 packets;\n\t__u64 add_time;\n\t__u64 use_time;\n};\n\nstruct xfrm_replay_state {\n\t__u32 oseq;\n\t__u32 seq;\n\t__u32 bitmap;\n};\n\nstruct xfrm_replay_state_esn {\n\tunsigned int bmp_len;\n\t__u32 oseq;\n\t__u32 seq;\n\t__u32 oseq_hi;\n\t__u32 seq_hi;\n\t__u32 replay_window;\n\t__u32 bmp[0];\n};\n\nstruct xfrm_algo {\n\tchar alg_name[64];\n\tunsigned int alg_key_len;\n\tchar alg_key[0];\n};\n\nstruct xfrm_algo_auth {\n\tchar alg_name[64];\n\tunsigned int alg_key_len;\n\tunsigned int alg_trunc_len;\n\tchar alg_key[0];\n};\n\nstruct xfrm_algo_aead {\n\tchar alg_name[64];\n\tunsigned int alg_key_len;\n\tunsigned int alg_icv_len;\n\tchar alg_key[0];\n};\n\nstruct xfrm_stats {\n\t__u32 replay_window;\n\t__u32 replay;\n\t__u32 integrity_failed;\n};\n\nenum {\n\tXFRM_POLICY_TYPE_MAIN = 0,\n\tXFRM_POLICY_TYPE_SUB = 1,\n\tXFRM_POLICY_TYPE_MAX = 2,\n\tXFRM_POLICY_TYPE_ANY = 255,\n};\n\nstruct xfrm_encap_tmpl {\n\t__u16 encap_type;\n\t__be16 encap_sport;\n\t__be16 encap_dport;\n\txfrm_address_t encap_oa;\n};\n\nenum xfrm_attr_type_t {\n\tXFRMA_UNSPEC = 0,\n\tXFRMA_ALG_AUTH = 1,\n\tXFRMA_ALG_CRYPT = 2,\n\tXFRMA_ALG_COMP = 3,\n\tXFRMA_ENCAP = 4,\n\tXFRMA_TMPL = 5,\n\tXFRMA_SA = 6,\n\tXFRMA_POLICY = 7,\n\tXFRMA_SEC_CTX = 8,\n\tXFRMA_LTIME_VAL = 9,\n\tXFRMA_REPLAY_VAL = 10,\n\tXFRMA_REPLAY_THRESH = 11,\n\tXFRMA_ETIMER_THRESH = 12,\n\tXFRMA_SRCADDR = 13,\n\tXFRMA_COADDR = 14,\n\tXFRMA_LASTUSED = 15,\n\tXFRMA_POLICY_TYPE = 16,\n\tXFRMA_MIGRATE = 17,\n\tXFRMA_ALG_AEAD = 18,\n\tXFRMA_KMADDRESS = 19,\n\tXFRMA_ALG_AUTH_TRUNC = 20,\n\tXFRMA_MARK = 21,\n\tXFRMA_TFCPAD = 22,\n\tXFRMA_REPLAY_ESN_VAL = 23,\n\tXFRMA_SA_EXTRA_FLAGS = 24,\n\tXFRMA_PROTO = 25,\n\tXFRMA_ADDRESS_FILTER = 26,\n\tXFRMA_PAD = 27,\n\tXFRMA_OFFLOAD_DEV = 28,\n\tXFRMA_SET_MARK = 29,\n\tXFRMA_SET_MARK_MASK = 30,\n\tXFRMA_IF_ID = 31,\n\t__XFRMA_MAX = 32,\n};\n\nstruct xfrm_mark {\n\t__u32 v;\n\t__u32 m;\n};\n\nstruct xfrm_address_filter {\n\txfrm_address_t saddr;\n\txfrm_address_t daddr;\n\t__u16 family;\n\t__u8 splen;\n\t__u8 dplen;\n};\n\nstruct xfrm_state_walk {\n\tstruct list_head all;\n\tu8 state;\n\tu8 dying;\n\tu8 proto;\n\tu32 seq;\n\tstruct xfrm_address_filter *filter;\n};\n\nstruct xfrm_state_offload {\n\tstruct net_device *dev;\n\tstruct net_device *real_dev;\n\tlong unsigned int offload_handle;\n\tunsigned int num_exthdrs;\n\tu8 flags;\n};\n\nstruct xfrm_mode {\n\tu8 encap;\n\tu8 family;\n\tu8 flags;\n};\n\nstruct xfrm_replay;\n\nstruct xfrm_type;\n\nstruct xfrm_type_offload;\n\nstruct xfrm_state {\n\tpossible_net_t xs_net;\n\tunion {\n\t\tstruct hlist_node gclist;\n\t\tstruct hlist_node bydst;\n\t};\n\tstruct hlist_node bysrc;\n\tstruct hlist_node byspi;\n\trefcount_t refcnt;\n\tspinlock_t lock;\n\tstruct xfrm_id id;\n\tstruct xfrm_selector sel;\n\tstruct xfrm_mark mark;\n\tu32 if_id;\n\tu32 tfcpad;\n\tu32 genid;\n\tstruct xfrm_state_walk km;\n\tstruct {\n\t\tu32 reqid;\n\t\tu8 mode;\n\t\tu8 replay_window;\n\t\tu8 aalgo;\n\t\tu8 ealgo;\n\t\tu8 calgo;\n\t\tu8 flags;\n\t\tu16 family;\n\t\txfrm_address_t saddr;\n\t\tint header_len;\n\t\tint trailer_len;\n\t\tu32 extra_flags;\n\t\tstruct xfrm_mark smark;\n\t} props;\n\tstruct xfrm_lifetime_cfg lft;\n\tstruct xfrm_algo_auth *aalg;\n\tstruct xfrm_algo *ealg;\n\tstruct xfrm_algo *calg;\n\tstruct xfrm_algo_aead *aead;\n\tconst char *geniv;\n\tstruct xfrm_encap_tmpl *encap;\n\tstruct sock *encap_sk;\n\txfrm_address_t *coaddr;\n\tstruct xfrm_state *tunnel;\n\tatomic_t tunnel_users;\n\tstruct xfrm_replay_state replay;\n\tstruct xfrm_replay_state_esn *replay_esn;\n\tstruct xfrm_replay_state preplay;\n\tstruct xfrm_replay_state_esn *preplay_esn;\n\tconst struct xfrm_replay *repl;\n\tu32 xflags;\n\tu32 replay_maxage;\n\tu32 replay_maxdiff;\n\tstruct timer_list rtimer;\n\tstruct xfrm_stats stats;\n\tstruct xfrm_lifetime_cur curlft;\n\tstruct hrtimer mtimer;\n\tstruct xfrm_state_offload xso;\n\tlong int saved_tmo;\n\ttime64_t lastused;\n\tstruct page_frag xfrag;\n\tconst struct xfrm_type *type;\n\tstruct xfrm_mode inner_mode;\n\tstruct xfrm_mode inner_mode_iaf;\n\tstruct xfrm_mode outer_mode;\n\tconst struct xfrm_type_offload *type_offload;\n\tstruct xfrm_sec_ctx *security;\n\tvoid *data;\n};\n\nstruct dst_metrics {\n\tu32 metrics[17];\n\trefcount_t refcnt;\n};\n\nstruct xfrm_policy_walk_entry {\n\tstruct list_head all;\n\tu8 dead;\n};\n\nstruct xfrm_policy_queue {\n\tstruct sk_buff_head hold_queue;\n\tstruct timer_list hold_timer;\n\tlong unsigned int timeout;\n};\n\nstruct xfrm_tmpl {\n\tstruct xfrm_id id;\n\txfrm_address_t saddr;\n\tshort unsigned int encap_family;\n\tu32 reqid;\n\tu8 mode;\n\tu8 share;\n\tu8 optional;\n\tu8 allalgs;\n\tu32 aalgos;\n\tu32 ealgos;\n\tu32 calgos;\n};\n\nstruct xfrm_policy {\n\tpossible_net_t xp_net;\n\tstruct hlist_node bydst;\n\tstruct hlist_node byidx;\n\trwlock_t lock;\n\trefcount_t refcnt;\n\tu32 pos;\n\tstruct timer_list timer;\n\tatomic_t genid;\n\tu32 priority;\n\tu32 index;\n\tu32 if_id;\n\tstruct xfrm_mark mark;\n\tstruct xfrm_selector selector;\n\tstruct xfrm_lifetime_cfg lft;\n\tstruct xfrm_lifetime_cur curlft;\n\tstruct xfrm_policy_walk_entry walk;\n\tstruct xfrm_policy_queue polq;\n\tbool bydst_reinsert;\n\tu8 type;\n\tu8 action;\n\tu8 flags;\n\tu8 xfrm_nr;\n\tu16 family;\n\tstruct xfrm_sec_ctx *security;\n\tstruct xfrm_tmpl xfrm_vec[6];\n\tstruct hlist_node bydst_inexact_list;\n\tstruct callback_head rcu;\n};\n\nstruct udp_hslot;\n\nstruct udp_table {\n\tstruct udp_hslot *hash;\n\tstruct udp_hslot *hash2;\n\tunsigned int mask;\n\tunsigned int log;\n};\n\nstruct fib_nh_exception {\n\tstruct fib_nh_exception *fnhe_next;\n\tint fnhe_genid;\n\t__be32 fnhe_daddr;\n\tu32 fnhe_pmtu;\n\tbool fnhe_mtu_locked;\n\t__be32 fnhe_gw;\n\tlong unsigned int fnhe_expires;\n\tstruct rtable *fnhe_rth_input;\n\tstruct rtable *fnhe_rth_output;\n\tlong unsigned int fnhe_stamp;\n\tstruct callback_head rcu;\n};\n\nstruct rtable {\n\tstruct dst_entry dst;\n\tint rt_genid;\n\tunsigned int rt_flags;\n\t__u16 rt_type;\n\t__u8 rt_is_input;\n\t__u8 rt_uses_gateway;\n\tint rt_iif;\n\tu8 rt_gw_family;\n\tunion {\n\t\t__be32 rt_gw4;\n\t\tstruct in6_addr rt_gw6;\n\t};\n\tu32 rt_mtu_locked: 1;\n\tu32 rt_pmtu: 31;\n\tstruct list_head rt_uncached;\n\tstruct uncached_list *rt_uncached_list;\n};\n\nstruct fnhe_hash_bucket {\n\tstruct fib_nh_exception *chain;\n};\n\nstruct rt6_exception_bucket {\n\tstruct hlist_head chain;\n\tint depth;\n};\n\nstruct xfrm_replay {\n\tvoid (*advance)(struct xfrm_state *, __be32);\n\tint (*check)(struct xfrm_state *, struct sk_buff *, __be32);\n\tint (*recheck)(struct xfrm_state *, struct sk_buff *, __be32);\n\tvoid (*notify)(struct xfrm_state *, int);\n\tint (*overflow)(struct xfrm_state *, struct sk_buff *);\n};\n\nstruct xfrm_type {\n\tchar *description;\n\tstruct module *owner;\n\tu8 proto;\n\tu8 flags;\n\tint (*init_state)(struct xfrm_state *);\n\tvoid (*destructor)(struct xfrm_state *);\n\tint (*input)(struct xfrm_state *, struct sk_buff *);\n\tint (*output)(struct xfrm_state *, struct sk_buff *);\n\tint (*reject)(struct xfrm_state *, struct sk_buff *, const struct flowi *);\n\tint (*hdr_offset)(struct xfrm_state *, struct sk_buff *, u8 **);\n};\n\nstruct xfrm_type_offload {\n\tchar *description;\n\tstruct module *owner;\n\tu8 proto;\n\tvoid (*encap)(struct xfrm_state *, struct sk_buff *);\n\tint (*input_tail)(struct xfrm_state *, struct sk_buff *);\n\tint (*xmit)(struct xfrm_state *, struct sk_buff *, netdev_features_t);\n};\n\nstruct xfrm_dst {\n\tunion {\n\t\tstruct dst_entry dst;\n\t\tstruct rtable rt;\n\t\tstruct rt6_info rt6;\n\t} u;\n\tstruct dst_entry *route;\n\tstruct dst_entry *child;\n\tstruct dst_entry *path;\n\tstruct xfrm_policy *pols[2];\n\tint num_pols;\n\tint num_xfrms;\n\tu32 xfrm_genid;\n\tu32 policy_genid;\n\tu32 route_mtu_cached;\n\tu32 child_mtu_cached;\n\tu32 route_cookie;\n\tu32 path_cookie;\n};\n\nstruct xfrm_offload {\n\tstruct {\n\t\t__u32 low;\n\t\t__u32 hi;\n\t} seq;\n\t__u32 flags;\n\t__u32 status;\n\t__u8 proto;\n};\n\nstruct sec_path {\n\tint len;\n\tint olen;\n\tstruct xfrm_state *xvec[6];\n\tstruct xfrm_offload ovec[1];\n};\n\nstruct udp_hslot {\n\tstruct hlist_head head;\n\tint count;\n\tspinlock_t lock;\n};\n\nstruct pkey_security_struct {\n\tu64 subnet_prefix;\n\tu16 pkey;\n\tu32 sid;\n};\n\nstruct sel_ib_pkey_bkt {\n\tint size;\n\tstruct list_head list;\n};\n\nstruct sel_ib_pkey {\n\tstruct pkey_security_struct psec;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n};\n\nstruct sockaddr_un {\n\t__kernel_sa_family_t sun_family;\n\tchar sun_path[108];\n};\n\nstruct unix_address {\n\trefcount_t refcnt;\n\tint len;\n\tunsigned int hash;\n\tstruct sockaddr_un name[0];\n};\n\nstruct scm_stat {\n\tatomic_t nr_fds;\n};\n\nstruct unix_sock {\n\tstruct sock sk;\n\tstruct unix_address *addr;\n\tstruct path path;\n\tstruct mutex iolock;\n\tstruct mutex bindlock;\n\tstruct sock *peer;\n\tstruct list_head link;\n\tatomic_long_t inflight;\n\tspinlock_t lock;\n\tlong unsigned int gc_flags;\n\tstruct socket_wq peer_wq;\n\twait_queue_entry_t peer_wake;\n\tstruct scm_stat scm_stat;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct ptrace_relation {\n\tstruct task_struct *tracer;\n\tstruct task_struct *tracee;\n\tbool invalid;\n\tstruct list_head node;\n\tstruct callback_head rcu;\n};\n\nstruct access_report_info {\n\tstruct callback_head work;\n\tconst char *access;\n\tstruct task_struct *target;\n\tstruct task_struct *agent;\n};\n\nenum devcg_behavior {\n\tDEVCG_DEFAULT_NONE = 0,\n\tDEVCG_DEFAULT_ALLOW = 1,\n\tDEVCG_DEFAULT_DENY = 2,\n};\n\nstruct dev_exception_item {\n\tu32 major;\n\tu32 minor;\n\tshort int type;\n\tshort int access;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n};\n\nstruct dev_cgroup {\n\tstruct cgroup_subsys_state css;\n\tstruct list_head exceptions;\n\tenum devcg_behavior behavior;\n};\n\nenum integrity_status {\n\tINTEGRITY_PASS = 0,\n\tINTEGRITY_PASS_IMMUTABLE = 1,\n\tINTEGRITY_FAIL = 2,\n\tINTEGRITY_NOLABEL = 3,\n\tINTEGRITY_NOXATTRS = 4,\n\tINTEGRITY_UNKNOWN = 5,\n};\n\nstruct ima_digest_data {\n\tu8 algo;\n\tu8 length;\n\tunion {\n\t\tstruct {\n\t\t\tu8 unused;\n\t\t\tu8 type;\n\t\t} sha1;\n\t\tstruct {\n\t\t\tu8 type;\n\t\t\tu8 algo;\n\t\t} ng;\n\t\tu8 data[2];\n\t} xattr;\n\tu8 digest[0];\n};\n\nstruct integrity_iint_cache {\n\tstruct rb_node rb_node;\n\tstruct mutex mutex;\n\tstruct inode *inode;\n\tu64 version;\n\tlong unsigned int flags;\n\tlong unsigned int measured_pcrs;\n\tlong unsigned int atomic_flags;\n\tenum integrity_status ima_file_status: 4;\n\tenum integrity_status ima_mmap_status: 4;\n\tenum integrity_status ima_bprm_status: 4;\n\tenum integrity_status ima_read_status: 4;\n\tenum integrity_status ima_creds_status: 4;\n\tenum integrity_status evm_status: 4;\n\tstruct ima_digest_data *ima_hash;\n};\n\nstruct modsig;\n\nstruct asymmetric_key_id;\n\nstruct public_key_signature {\n\tstruct asymmetric_key_id *auth_ids[2];\n\tu8 *s;\n\tu32 s_size;\n\tu8 *digest;\n\tu8 digest_size;\n\tconst char *pkey_algo;\n\tconst char *hash_algo;\n\tconst char *encoding;\n\tconst void *data;\n\tunsigned int data_size;\n};\n\nstruct asymmetric_key_id {\n\tshort unsigned int len;\n\tunsigned char data[0];\n};\n\nstruct signature_v2_hdr {\n\tuint8_t type;\n\tuint8_t version;\n\tuint8_t hash_algo;\n\t__be32 keyid;\n\t__be16 sig_size;\n\tuint8_t sig[0];\n} __attribute__((packed));\n\ntypedef struct {\n\tefi_guid_t signature_owner;\n\tu8 signature_data[0];\n} efi_signature_data_t;\n\ntypedef struct {\n\tefi_guid_t signature_type;\n\tu32 signature_list_size;\n\tu32 signature_header_size;\n\tu32 signature_size;\n\tu8 signature_header[0];\n} efi_signature_list_t;\n\ntypedef void (*efi_element_handler_t)(const char *, const void *, size_t);\n\nstruct efi_mokvar_table_entry {\n\tchar name[256];\n\tu64 data_size;\n\tu8 data[0];\n};\n\nstruct tpm_digest {\n\tu16 alg_id;\n\tu8 digest[64];\n};\n\nstruct evm_ima_xattr_data {\n\tu8 type;\n\tu8 data[0];\n};\n\nenum ima_show_type {\n\tIMA_SHOW_BINARY = 0,\n\tIMA_SHOW_BINARY_NO_FIELD_LEN = 1,\n\tIMA_SHOW_BINARY_OLD_STRING_FMT = 2,\n\tIMA_SHOW_ASCII = 3,\n};\n\nstruct ima_event_data {\n\tstruct integrity_iint_cache *iint;\n\tstruct file *file;\n\tconst unsigned char *filename;\n\tstruct evm_ima_xattr_data *xattr_value;\n\tint xattr_len;\n\tconst struct modsig *modsig;\n\tconst char *violation;\n\tconst void *buf;\n\tint buf_len;\n};\n\nstruct ima_field_data {\n\tu8 *data;\n\tu32 len;\n};\n\nstruct ima_template_field {\n\tconst char field_id[16];\n\tint (*field_init)(struct ima_event_data *, struct ima_field_data *);\n\tvoid (*field_show)(struct seq_file *, enum ima_show_type, struct ima_field_data *);\n};\n\nstruct ima_template_desc {\n\tstruct list_head list;\n\tchar *name;\n\tchar *fmt;\n\tint num_fields;\n\tconst struct ima_template_field **fields;\n};\n\nstruct ima_template_entry {\n\tint pcr;\n\tstruct tpm_digest *digests;\n\tstruct ima_template_desc *template_desc;\n\tu32 template_data_len;\n\tstruct ima_field_data template_data[0];\n};\n\nstruct ima_queue_entry {\n\tstruct hlist_node hnext;\n\tstruct list_head later;\n\tstruct ima_template_entry *entry;\n};\n\nstruct ima_h_table {\n\tatomic_long_t len;\n\tatomic_long_t violations;\n\tstruct hlist_head queue[1024];\n};\n\nenum ima_fs_flags {\n\tIMA_FS_BUSY = 0,\n};\n\nstruct hwrng {\n\tconst char *name;\n\tint (*init)(struct hwrng *);\n\tvoid (*cleanup)(struct hwrng *);\n\tint (*data_present)(struct hwrng *, int);\n\tint (*data_read)(struct hwrng *, u32 *);\n\tint (*read)(struct hwrng *, void *, size_t, bool);\n\tlong unsigned int priv;\n\tshort unsigned int quality;\n\tstruct list_head list;\n\tstruct kref ref;\n\tstruct completion cleanup_done;\n};\n\nstruct tpm_bank_info {\n\tu16 alg_id;\n\tu16 digest_size;\n\tu16 crypto_id;\n};\n\nstruct tpm_chip;\n\nstruct tpm_class_ops {\n\tunsigned int flags;\n\tconst u8 req_complete_mask;\n\tconst u8 req_complete_val;\n\tbool (*req_canceled)(struct tpm_chip *, u8);\n\tint (*recv)(struct tpm_chip *, u8 *, size_t);\n\tint (*send)(struct tpm_chip *, u8 *, size_t);\n\tvoid (*cancel)(struct tpm_chip *);\n\tu8 (*status)(struct tpm_chip *);\n\tvoid (*update_timeouts)(struct tpm_chip *, long unsigned int *);\n\tvoid (*update_durations)(struct tpm_chip *, long unsigned int *);\n\tint (*go_idle)(struct tpm_chip *);\n\tint (*cmd_ready)(struct tpm_chip *);\n\tint (*request_locality)(struct tpm_chip *, int);\n\tint (*relinquish_locality)(struct tpm_chip *, int);\n\tvoid (*clk_enable)(struct tpm_chip *, bool);\n};\n\nstruct tpm_bios_log {\n\tvoid *bios_event_log;\n\tvoid *bios_event_log_end;\n};\n\nstruct tpm_chip_seqops {\n\tstruct tpm_chip *chip;\n\tconst struct seq_operations *seqops;\n};\n\nstruct tpm_space {\n\tu32 context_tbl[3];\n\tu8 *context_buf;\n\tu32 session_tbl[3];\n\tu8 *session_buf;\n\tu32 buf_size;\n};\n\nstruct tpm_chip {\n\tstruct device dev;\n\tstruct device devs;\n\tstruct cdev cdev;\n\tstruct cdev cdevs;\n\tstruct rw_semaphore ops_sem;\n\tconst struct tpm_class_ops *ops;\n\tstruct tpm_bios_log log;\n\tstruct tpm_chip_seqops bin_log_seqops;\n\tstruct tpm_chip_seqops ascii_log_seqops;\n\tunsigned int flags;\n\tint dev_num;\n\tlong unsigned int is_open;\n\tchar hwrng_name[64];\n\tstruct hwrng hwrng;\n\tstruct mutex tpm_mutex;\n\tlong unsigned int timeout_a;\n\tlong unsigned int timeout_b;\n\tlong unsigned int timeout_c;\n\tlong unsigned int timeout_d;\n\tbool timeout_adjusted;\n\tlong unsigned int duration[4];\n\tbool duration_adjusted;\n\tstruct dentry *bios_dir[3];\n\tconst struct attribute_group *groups[3];\n\tunsigned int groups_cnt;\n\tu32 nr_allocated_banks;\n\tstruct tpm_bank_info *allocated_banks;\n\tacpi_handle acpi_dev_handle;\n\tchar ppi_version[4];\n\tstruct tpm_space work_space;\n\tu32 last_cc;\n\tu32 nr_commands;\n\tu32 *cc_attrs_tbl;\n\tint locality;\n};\n\nenum evm_ima_xattr_type {\n\tIMA_XATTR_DIGEST = 1,\n\tEVM_XATTR_HMAC = 2,\n\tEVM_IMA_XATTR_DIGSIG = 3,\n\tIMA_XATTR_DIGEST_NG = 4,\n\tEVM_XATTR_PORTABLE_DIGSIG = 5,\n\tIMA_XATTR_LAST = 6,\n};\n\nenum ima_hooks {\n\tNONE___2 = 0,\n\tFILE_CHECK = 1,\n\tMMAP_CHECK = 2,\n\tBPRM_CHECK = 3,\n\tCREDS_CHECK = 4,\n\tPOST_SETATTR = 5,\n\tMODULE_CHECK = 6,\n\tFIRMWARE_CHECK = 7,\n\tKEXEC_KERNEL_CHECK = 8,\n\tKEXEC_INITRAMFS_CHECK = 9,\n\tPOLICY_CHECK = 10,\n\tKEXEC_CMDLINE = 11,\n\tKEY_CHECK = 12,\n\tMAX_CHECK = 13,\n};\n\nenum tpm_algorithms {\n\tTPM_ALG_ERROR = 0,\n\tTPM_ALG_SHA1 = 4,\n\tTPM_ALG_KEYEDHASH = 8,\n\tTPM_ALG_SHA256 = 11,\n\tTPM_ALG_SHA384 = 12,\n\tTPM_ALG_SHA512 = 13,\n\tTPM_ALG_NULL = 16,\n\tTPM_ALG_SM3_256 = 18,\n};\n\nenum tpm_pcrs {\n\tTPM_PCR0 = 0,\n\tTPM_PCR8 = 8,\n\tTPM_PCR10 = 10,\n};\n\nstruct ima_algo_desc {\n\tstruct crypto_shash *tfm;\n\tenum hash_algo algo;\n};\n\nenum lsm_rule_types {\n\tLSM_OBJ_USER = 0,\n\tLSM_OBJ_ROLE = 1,\n\tLSM_OBJ_TYPE = 2,\n\tLSM_SUBJ_USER = 3,\n\tLSM_SUBJ_ROLE = 4,\n\tLSM_SUBJ_TYPE = 5,\n};\n\nenum policy_types {\n\tORIGINAL_TCB = 1,\n\tDEFAULT_TCB = 2,\n};\n\nenum policy_rule_list {\n\tIMA_DEFAULT_POLICY = 1,\n\tIMA_CUSTOM_POLICY = 2,\n};\n\nstruct ima_rule_opt_list {\n\tsize_t count;\n\tchar *items[0];\n};\n\nstruct ima_rule_entry {\n\tstruct list_head list;\n\tint action;\n\tunsigned int flags;\n\tenum ima_hooks func;\n\tint mask;\n\tlong unsigned int fsmagic;\n\tuuid_t fsuuid;\n\tkuid_t uid;\n\tkuid_t fowner;\n\tbool (*uid_op)(kuid_t, kuid_t);\n\tbool (*fowner_op)(kuid_t, kuid_t);\n\tint pcr;\n\tstruct {\n\t\tvoid *rule;\n\t\tchar *args_p;\n\t\tint type;\n\t} lsm[6];\n\tchar *fsname;\n\tstruct ima_rule_opt_list *keyrings;\n\tstruct ima_template_desc *template;\n};\n\nenum {\n\tOpt_measure = 0,\n\tOpt_dont_measure = 1,\n\tOpt_appraise = 2,\n\tOpt_dont_appraise = 3,\n\tOpt_audit = 4,\n\tOpt_hash___2 = 5,\n\tOpt_dont_hash = 6,\n\tOpt_obj_user = 7,\n\tOpt_obj_role = 8,\n\tOpt_obj_type = 9,\n\tOpt_subj_user = 10,\n\tOpt_subj_role = 11,\n\tOpt_subj_type = 12,\n\tOpt_func = 13,\n\tOpt_mask = 14,\n\tOpt_fsmagic = 15,\n\tOpt_fsname = 16,\n\tOpt_fsuuid = 17,\n\tOpt_uid_eq = 18,\n\tOpt_euid_eq = 19,\n\tOpt_fowner_eq = 20,\n\tOpt_uid_gt = 21,\n\tOpt_euid_gt = 22,\n\tOpt_fowner_gt = 23,\n\tOpt_uid_lt = 24,\n\tOpt_euid_lt = 25,\n\tOpt_fowner_lt = 26,\n\tOpt_appraise_type = 27,\n\tOpt_appraise_flag = 28,\n\tOpt_permit_directio = 29,\n\tOpt_pcr = 30,\n\tOpt_template = 31,\n\tOpt_keyrings = 32,\n\tOpt_err___9 = 33,\n};\n\nenum {\n\tmask_exec = 0,\n\tmask_write = 1,\n\tmask_read = 2,\n\tmask_append = 3,\n};\n\nstruct ima_kexec_hdr {\n\tu16 version;\n\tu16 _reserved0;\n\tu32 _reserved1;\n\tu64 buffer_size;\n\tu64 count;\n};\n\nenum header_fields {\n\tHDR_PCR = 0,\n\tHDR_DIGEST = 1,\n\tHDR_TEMPLATE_NAME = 2,\n\tHDR_TEMPLATE_DATA = 3,\n\tHDR__LAST = 4,\n};\n\nenum data_formats {\n\tDATA_FMT_DIGEST = 0,\n\tDATA_FMT_DIGEST_WITH_ALGO = 1,\n\tDATA_FMT_STRING = 2,\n\tDATA_FMT_HEX = 3,\n};\n\nstruct modsig___2 {\n\tstruct pkcs7_message *pkcs7_msg;\n\tenum hash_algo hash_algo;\n\tconst u8 *digest;\n\tu32 digest_size;\n\tint raw_pkcs7_len;\n\tu8 raw_pkcs7[0];\n};\n\nstruct ima_key_entry {\n\tstruct list_head list;\n\tvoid *payload;\n\tsize_t payload_len;\n\tchar *keyring_name;\n};\n\nstruct evm_xattr {\n\tstruct evm_ima_xattr_data data;\n\tu8 digest[20];\n};\n\nstruct xattr_list {\n\tstruct list_head list;\n\tchar *name;\n};\n\nstruct evm_digest {\n\tstruct ima_digest_data hdr;\n\tchar digest[64];\n};\n\nstruct h_misc {\n\tlong unsigned int ino;\n\t__u32 generation;\n\tuid_t uid;\n\tgid_t gid;\n\tumode_t mode;\n};\n\nenum {\n\tCRYPTO_MSG_ALG_REQUEST = 0,\n\tCRYPTO_MSG_ALG_REGISTER = 1,\n\tCRYPTO_MSG_ALG_LOADED = 2,\n};\n\nstruct crypto_larval {\n\tstruct crypto_alg alg;\n\tstruct crypto_alg *adult;\n\tstruct completion completion;\n\tu32 mask;\n};\n\nstruct crypto_cipher {\n\tstruct crypto_tfm base;\n};\n\nenum {\n\tCRYPTOA_UNSPEC = 0,\n\tCRYPTOA_ALG = 1,\n\tCRYPTOA_TYPE = 2,\n\tCRYPTOA_U32 = 3,\n\t__CRYPTOA_MAX = 4,\n};\n\nstruct crypto_attr_alg {\n\tchar name[128];\n};\n\nstruct crypto_attr_type {\n\tu32 type;\n\tu32 mask;\n};\n\nstruct crypto_attr_u32 {\n\tu32 num;\n};\n\nstruct rtattr {\n\tshort unsigned int rta_len;\n\tshort unsigned int rta_type;\n};\n\nstruct crypto_queue {\n\tstruct list_head list;\n\tstruct list_head *backlog;\n\tunsigned int qlen;\n\tunsigned int max_qlen;\n};\n\nenum {\n\tNAPI_STATE_SCHED = 0,\n\tNAPI_STATE_MISSED = 1,\n\tNAPI_STATE_DISABLE = 2,\n\tNAPI_STATE_NPSVC = 3,\n\tNAPI_STATE_LISTED = 4,\n\tNAPI_STATE_NO_BUSY_POLL = 5,\n\tNAPI_STATE_IN_BUSY_POLL = 6,\n\tNAPI_STATE_PREFER_BUSY_POLL = 7,\n};\n\nenum bpf_xdp_mode {\n\tXDP_MODE_SKB = 0,\n\tXDP_MODE_DRV = 1,\n\tXDP_MODE_HW = 2,\n\t__MAX_XDP_MODE = 3,\n};\n\nenum {\n\tNETIF_MSG_DRV_BIT = 0,\n\tNETIF_MSG_PROBE_BIT = 1,\n\tNETIF_MSG_LINK_BIT = 2,\n\tNETIF_MSG_TIMER_BIT = 3,\n\tNETIF_MSG_IFDOWN_BIT = 4,\n\tNETIF_MSG_IFUP_BIT = 5,\n\tNETIF_MSG_RX_ERR_BIT = 6,\n\tNETIF_MSG_TX_ERR_BIT = 7,\n\tNETIF_MSG_TX_QUEUED_BIT = 8,\n\tNETIF_MSG_INTR_BIT = 9,\n\tNETIF_MSG_TX_DONE_BIT = 10,\n\tNETIF_MSG_RX_STATUS_BIT = 11,\n\tNETIF_MSG_PKTDATA_BIT = 12,\n\tNETIF_MSG_HW_BIT = 13,\n\tNETIF_MSG_WOL_BIT = 14,\n\tNETIF_MSG_CLASS_COUNT = 15,\n};\n\nstruct aead_instance {\n\tvoid (*free)(struct aead_instance *);\n\tunion {\n\t\tstruct {\n\t\t\tchar head[64];\n\t\t\tstruct crypto_instance base;\n\t\t} s;\n\t\tstruct aead_alg alg;\n\t};\n};\n\nstruct crypto_aead_spawn {\n\tstruct crypto_spawn base;\n};\n\nenum crypto_attr_type_t {\n\tCRYPTOCFGA_UNSPEC = 0,\n\tCRYPTOCFGA_PRIORITY_VAL = 1,\n\tCRYPTOCFGA_REPORT_LARVAL = 2,\n\tCRYPTOCFGA_REPORT_HASH = 3,\n\tCRYPTOCFGA_REPORT_BLKCIPHER = 4,\n\tCRYPTOCFGA_REPORT_AEAD = 5,\n\tCRYPTOCFGA_REPORT_COMPRESS = 6,\n\tCRYPTOCFGA_REPORT_RNG = 7,\n\tCRYPTOCFGA_REPORT_CIPHER = 8,\n\tCRYPTOCFGA_REPORT_AKCIPHER = 9,\n\tCRYPTOCFGA_REPORT_KPP = 10,\n\tCRYPTOCFGA_REPORT_ACOMP = 11,\n\tCRYPTOCFGA_STAT_LARVAL = 12,\n\tCRYPTOCFGA_STAT_HASH = 13,\n\tCRYPTOCFGA_STAT_BLKCIPHER = 14,\n\tCRYPTOCFGA_STAT_AEAD = 15,\n\tCRYPTOCFGA_STAT_COMPRESS = 16,\n\tCRYPTOCFGA_STAT_RNG = 17,\n\tCRYPTOCFGA_STAT_CIPHER = 18,\n\tCRYPTOCFGA_STAT_AKCIPHER = 19,\n\tCRYPTOCFGA_STAT_KPP = 20,\n\tCRYPTOCFGA_STAT_ACOMP = 21,\n\t__CRYPTOCFGA_MAX = 22,\n};\n\nstruct crypto_report_aead {\n\tchar type[64];\n\tchar geniv[64];\n\tunsigned int blocksize;\n\tunsigned int maxauthsize;\n\tunsigned int ivsize;\n};\n\nstruct crypto_sync_skcipher;\n\nstruct aead_geniv_ctx {\n\tspinlock_t lock;\n\tstruct crypto_aead *child;\n\tstruct crypto_sync_skcipher *sknull;\n\tu8 salt[0];\n};\n\nstruct crypto_rng;\n\nstruct rng_alg {\n\tint (*generate)(struct crypto_rng *, const u8 *, unsigned int, u8 *, unsigned int);\n\tint (*seed)(struct crypto_rng *, const u8 *, unsigned int);\n\tvoid (*set_ent)(struct crypto_rng *, const u8 *, unsigned int);\n\tunsigned int seedsize;\n\tstruct crypto_alg base;\n};\n\nstruct crypto_rng {\n\tstruct crypto_tfm base;\n};\n\nstruct crypto_cipher_spawn {\n\tstruct crypto_spawn base;\n};\n\nstruct crypto_sync_skcipher {\n\tstruct crypto_skcipher base;\n};\n\nstruct skcipher_instance {\n\tvoid (*free)(struct skcipher_instance *);\n\tunion {\n\t\tstruct {\n\t\t\tchar head[64];\n\t\t\tstruct crypto_instance base;\n\t\t} s;\n\t\tstruct skcipher_alg alg;\n\t};\n};\n\nstruct crypto_skcipher_spawn {\n\tstruct crypto_spawn base;\n};\n\nstruct skcipher_ctx_simple {\n\tstruct crypto_cipher *cipher;\n};\n\nstruct crypto_report_blkcipher {\n\tchar type[64];\n\tchar geniv[64];\n\tunsigned int blocksize;\n\tunsigned int min_keysize;\n\tunsigned int max_keysize;\n\tunsigned int ivsize;\n};\n\nenum {\n\tSKCIPHER_WALK_PHYS = 1,\n\tSKCIPHER_WALK_SLOW = 2,\n\tSKCIPHER_WALK_COPY = 4,\n\tSKCIPHER_WALK_DIFF = 8,\n\tSKCIPHER_WALK_SLEEP = 16,\n};\n\nstruct skcipher_walk_buffer {\n\tstruct list_head entry;\n\tstruct scatter_walk dst;\n\tunsigned int len;\n\tu8 *data;\n\tu8 buffer[0];\n};\n\nstruct ahash_alg {\n\tint (*init)(struct ahash_request *);\n\tint (*update)(struct ahash_request *);\n\tint (*final)(struct ahash_request *);\n\tint (*finup)(struct ahash_request *);\n\tint (*digest)(struct ahash_request *);\n\tint (*export)(struct ahash_request *, void *);\n\tint (*import)(struct ahash_request *, const void *);\n\tint (*setkey)(struct crypto_ahash *, const u8 *, unsigned int);\n\tint (*init_tfm)(struct crypto_ahash *);\n\tvoid (*exit_tfm)(struct crypto_ahash *);\n\tstruct hash_alg_common halg;\n};\n\nstruct crypto_hash_walk {\n\tchar *data;\n\tunsigned int offset;\n\tunsigned int alignmask;\n\tstruct page *pg;\n\tunsigned int entrylen;\n\tunsigned int total;\n\tstruct scatterlist *sg;\n\tunsigned int flags;\n};\n\nstruct ahash_instance {\n\tvoid (*free)(struct ahash_instance *);\n\tunion {\n\t\tstruct {\n\t\t\tchar head[88];\n\t\t\tstruct crypto_instance base;\n\t\t} s;\n\t\tstruct ahash_alg alg;\n\t};\n};\n\nstruct crypto_ahash_spawn {\n\tstruct crypto_spawn base;\n};\n\nstruct crypto_report_hash {\n\tchar type[64];\n\tunsigned int blocksize;\n\tunsigned int digestsize;\n};\n\nstruct ahash_request_priv {\n\tcrypto_completion_t complete;\n\tvoid *data;\n\tu8 *result;\n\tu32 flags;\n\tvoid *ubuf[0];\n};\n\nstruct shash_instance {\n\tvoid (*free)(struct shash_instance *);\n\tunion {\n\t\tstruct {\n\t\t\tchar head[96];\n\t\t\tstruct crypto_instance base;\n\t\t} s;\n\t\tstruct shash_alg alg;\n\t};\n};\n\nstruct crypto_shash_spawn {\n\tstruct crypto_spawn base;\n};\n\nstruct crypto_report_akcipher {\n\tchar type[64];\n};\n\nstruct akcipher_request {\n\tstruct crypto_async_request base;\n\tstruct scatterlist *src;\n\tstruct scatterlist *dst;\n\tunsigned int src_len;\n\tunsigned int dst_len;\n\tvoid *__ctx[0];\n};\n\nstruct crypto_akcipher {\n\tstruct crypto_tfm base;\n};\n\nstruct akcipher_alg {\n\tint (*sign)(struct akcipher_request *);\n\tint (*verify)(struct akcipher_request *);\n\tint (*encrypt)(struct akcipher_request *);\n\tint (*decrypt)(struct akcipher_request *);\n\tint (*set_pub_key)(struct crypto_akcipher *, const void *, unsigned int);\n\tint (*set_priv_key)(struct crypto_akcipher *, const void *, unsigned int);\n\tunsigned int (*max_size)(struct crypto_akcipher *);\n\tint (*init)(struct crypto_akcipher *);\n\tvoid (*exit)(struct crypto_akcipher *);\n\tunsigned int reqsize;\n\tstruct crypto_alg base;\n};\n\nstruct akcipher_instance {\n\tvoid (*free)(struct akcipher_instance *);\n\tunion {\n\t\tstruct {\n\t\t\tchar head[80];\n\t\t\tstruct crypto_instance base;\n\t\t} s;\n\t\tstruct akcipher_alg alg;\n\t};\n};\n\nstruct crypto_akcipher_spawn {\n\tstruct crypto_spawn base;\n};\n\nstruct crypto_report_kpp {\n\tchar type[64];\n};\n\ntypedef long unsigned int mpi_limb_t;\n\nstruct gcry_mpi {\n\tint alloced;\n\tint nlimbs;\n\tint nbits;\n\tint sign;\n\tunsigned int flags;\n\tmpi_limb_t *d;\n};\n\ntypedef struct gcry_mpi *MPI;\n\nstruct dh_ctx {\n\tMPI p;\n\tMPI q;\n\tMPI g;\n\tMPI xa;\n};\n\nenum {\n\tCRYPTO_KPP_SECRET_TYPE_UNKNOWN = 0,\n\tCRYPTO_KPP_SECRET_TYPE_DH = 1,\n\tCRYPTO_KPP_SECRET_TYPE_ECDH = 2,\n};\n\nstruct kpp_secret {\n\tshort unsigned int type;\n\tshort unsigned int len;\n};\n\nenum asn1_class {\n\tASN1_UNIV = 0,\n\tASN1_APPL = 1,\n\tASN1_CONT = 2,\n\tASN1_PRIV = 3,\n};\n\nenum asn1_method {\n\tASN1_PRIM = 0,\n\tASN1_CONS = 1,\n};\n\nenum asn1_tag {\n\tASN1_EOC = 0,\n\tASN1_BOOL = 1,\n\tASN1_INT = 2,\n\tASN1_BTS = 3,\n\tASN1_OTS = 4,\n\tASN1_NULL = 5,\n\tASN1_OID = 6,\n\tASN1_ODE = 7,\n\tASN1_EXT = 8,\n\tASN1_REAL = 9,\n\tASN1_ENUM = 10,\n\tASN1_EPDV = 11,\n\tASN1_UTF8STR = 12,\n\tASN1_RELOID = 13,\n\tASN1_SEQ = 16,\n\tASN1_SET = 17,\n\tASN1_NUMSTR = 18,\n\tASN1_PRNSTR = 19,\n\tASN1_TEXSTR = 20,\n\tASN1_VIDSTR = 21,\n\tASN1_IA5STR = 22,\n\tASN1_UNITIM = 23,\n\tASN1_GENTIM = 24,\n\tASN1_GRASTR = 25,\n\tASN1_VISSTR = 26,\n\tASN1_GENSTR = 27,\n\tASN1_UNISTR = 28,\n\tASN1_CHRSTR = 29,\n\tASN1_BMPSTR = 30,\n\tASN1_LONG_TAG = 31,\n};\n\ntypedef int (*asn1_action_t)(void *, size_t, unsigned char, const void *, size_t);\n\nstruct asn1_decoder {\n\tconst unsigned char *machine;\n\tsize_t machlen;\n\tconst asn1_action_t *actions;\n};\n\nenum asn1_opcode {\n\tASN1_OP_MATCH = 0,\n\tASN1_OP_MATCH_OR_SKIP = 1,\n\tASN1_OP_MATCH_ACT = 2,\n\tASN1_OP_MATCH_ACT_OR_SKIP = 3,\n\tASN1_OP_MATCH_JUMP = 4,\n\tASN1_OP_MATCH_JUMP_OR_SKIP = 5,\n\tASN1_OP_MATCH_ANY = 8,\n\tASN1_OP_MATCH_ANY_OR_SKIP = 9,\n\tASN1_OP_MATCH_ANY_ACT = 10,\n\tASN1_OP_MATCH_ANY_ACT_OR_SKIP = 11,\n\tASN1_OP_COND_MATCH_OR_SKIP = 17,\n\tASN1_OP_COND_MATCH_ACT_OR_SKIP = 19,\n\tASN1_OP_COND_MATCH_JUMP_OR_SKIP = 21,\n\tASN1_OP_COND_MATCH_ANY = 24,\n\tASN1_OP_COND_MATCH_ANY_OR_SKIP = 25,\n\tASN1_OP_COND_MATCH_ANY_ACT = 26,\n\tASN1_OP_COND_MATCH_ANY_ACT_OR_SKIP = 27,\n\tASN1_OP_COND_FAIL = 28,\n\tASN1_OP_COMPLETE = 29,\n\tASN1_OP_ACT = 30,\n\tASN1_OP_MAYBE_ACT = 31,\n\tASN1_OP_END_SEQ = 32,\n\tASN1_OP_END_SET = 33,\n\tASN1_OP_END_SEQ_OF = 34,\n\tASN1_OP_END_SET_OF = 35,\n\tASN1_OP_END_SEQ_ACT = 36,\n\tASN1_OP_END_SET_ACT = 37,\n\tASN1_OP_END_SEQ_OF_ACT = 38,\n\tASN1_OP_END_SET_OF_ACT = 39,\n\tASN1_OP_RETURN = 40,\n\tASN1_OP__NR = 41,\n};\n\nenum rsapubkey_actions {\n\tACT_rsa_get_e = 0,\n\tACT_rsa_get_n = 1,\n\tNR__rsapubkey_actions = 2,\n};\n\nenum rsaprivkey_actions {\n\tACT_rsa_get_d = 0,\n\tACT_rsa_get_dp = 1,\n\tACT_rsa_get_dq = 2,\n\tACT_rsa_get_e___2 = 3,\n\tACT_rsa_get_n___2 = 4,\n\tACT_rsa_get_p = 5,\n\tACT_rsa_get_q = 6,\n\tACT_rsa_get_qinv = 7,\n\tNR__rsaprivkey_actions = 8,\n};\n\nstruct rsa_key {\n\tconst u8 *n;\n\tconst u8 *e;\n\tconst u8 *d;\n\tconst u8 *p;\n\tconst u8 *q;\n\tconst u8 *dp;\n\tconst u8 *dq;\n\tconst u8 *qinv;\n\tsize_t n_sz;\n\tsize_t e_sz;\n\tsize_t d_sz;\n\tsize_t p_sz;\n\tsize_t q_sz;\n\tsize_t dp_sz;\n\tsize_t dq_sz;\n\tsize_t qinv_sz;\n};\n\nstruct rsa_mpi_key {\n\tMPI n;\n\tMPI e;\n\tMPI d;\n};\n\nstruct asn1_decoder___2;\n\nstruct rsa_asn1_template {\n\tconst char *name;\n\tconst u8 *data;\n\tsize_t size;\n};\n\nstruct pkcs1pad_ctx {\n\tstruct crypto_akcipher *child;\n\tunsigned int key_size;\n};\n\nstruct pkcs1pad_inst_ctx {\n\tstruct crypto_akcipher_spawn spawn;\n\tconst struct rsa_asn1_template *digest_info;\n};\n\nstruct pkcs1pad_request {\n\tstruct scatterlist in_sg[2];\n\tstruct scatterlist out_sg[1];\n\tuint8_t *in_buf;\n\tuint8_t *out_buf;\n\tstruct akcipher_request child_req;\n};\n\nstruct crypto_report_acomp {\n\tchar type[64];\n};\n\nstruct acomp_alg {\n\tint (*compress)(struct acomp_req *);\n\tint (*decompress)(struct acomp_req *);\n\tvoid (*dst_free)(struct scatterlist *);\n\tint (*init)(struct crypto_acomp *);\n\tvoid (*exit)(struct crypto_acomp *);\n\tunsigned int reqsize;\n\tstruct crypto_alg base;\n};\n\nstruct crypto_report_comp {\n\tchar type[64];\n};\n\nstruct crypto_scomp {\n\tstruct crypto_tfm base;\n};\n\nstruct scomp_alg {\n\tvoid * (*alloc_ctx)(struct crypto_scomp *);\n\tvoid (*free_ctx)(struct crypto_scomp *, void *);\n\tint (*compress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);\n\tint (*decompress)(struct crypto_scomp *, const u8 *, unsigned int, u8 *, unsigned int *, void *);\n\tstruct crypto_alg base;\n};\n\nstruct scomp_scratch {\n\tspinlock_t lock;\n\tvoid *src;\n\tvoid *dst;\n};\n\nstruct cryptomgr_param {\n\tstruct rtattr *tb[34];\n\tstruct {\n\t\tstruct rtattr attr;\n\t\tstruct crypto_attr_type data;\n\t} type;\n\tunion {\n\t\tstruct rtattr attr;\n\t\tstruct {\n\t\t\tstruct rtattr attr;\n\t\t\tstruct crypto_attr_alg data;\n\t\t} alg;\n\t\tstruct {\n\t\t\tstruct rtattr attr;\n\t\t\tstruct crypto_attr_u32 data;\n\t\t} nu32;\n\t} attrs[32];\n\tchar template[128];\n\tstruct crypto_larval *larval;\n\tu32 otype;\n\tu32 omask;\n};\n\nstruct crypto_test_param {\n\tchar driver[128];\n\tchar alg[128];\n\tu32 type;\n};\n\nstruct drbg_string {\n\tconst unsigned char *buf;\n\tsize_t len;\n\tstruct list_head list;\n};\n\nstruct drbg_test_data {\n\tstruct drbg_string *testentropy;\n};\n\nenum OID {\n\tOID_id_dsa_with_sha1 = 0,\n\tOID_id_dsa = 1,\n\tOID_id_ecdsa_with_sha1 = 2,\n\tOID_id_ecPublicKey = 3,\n\tOID_rsaEncryption = 4,\n\tOID_md2WithRSAEncryption = 5,\n\tOID_md3WithRSAEncryption = 6,\n\tOID_md4WithRSAEncryption = 7,\n\tOID_sha1WithRSAEncryption = 8,\n\tOID_sha256WithRSAEncryption = 9,\n\tOID_sha384WithRSAEncryption = 10,\n\tOID_sha512WithRSAEncryption = 11,\n\tOID_sha224WithRSAEncryption = 12,\n\tOID_data = 13,\n\tOID_signed_data = 14,\n\tOID_email_address = 15,\n\tOID_contentType = 16,\n\tOID_messageDigest = 17,\n\tOID_signingTime = 18,\n\tOID_smimeCapabilites = 19,\n\tOID_smimeAuthenticatedAttrs = 20,\n\tOID_md2 = 21,\n\tOID_md4 = 22,\n\tOID_md5 = 23,\n\tOID_msIndirectData = 24,\n\tOID_msStatementType = 25,\n\tOID_msSpOpusInfo = 26,\n\tOID_msPeImageDataObjId = 27,\n\tOID_msIndividualSPKeyPurpose = 28,\n\tOID_msOutlookExpress = 29,\n\tOID_certAuthInfoAccess = 30,\n\tOID_sha1 = 31,\n\tOID_sha256 = 32,\n\tOID_sha384 = 33,\n\tOID_sha512 = 34,\n\tOID_sha224 = 35,\n\tOID_commonName = 36,\n\tOID_surname = 37,\n\tOID_countryName = 38,\n\tOID_locality = 39,\n\tOID_stateOrProvinceName = 40,\n\tOID_organizationName = 41,\n\tOID_organizationUnitName = 42,\n\tOID_title = 43,\n\tOID_description = 44,\n\tOID_name = 45,\n\tOID_givenName = 46,\n\tOID_initials = 47,\n\tOID_generationalQualifier = 48,\n\tOID_subjectKeyIdentifier = 49,\n\tOID_keyUsage = 50,\n\tOID_subjectAltName = 51,\n\tOID_issuerAltName = 52,\n\tOID_basicConstraints = 53,\n\tOID_crlDistributionPoints = 54,\n\tOID_certPolicies = 55,\n\tOID_authorityKeyIdentifier = 56,\n\tOID_extKeyUsage = 57,\n\tOID_gostCPSignA = 58,\n\tOID_gostCPSignB = 59,\n\tOID_gostCPSignC = 60,\n\tOID_gost2012PKey256 = 61,\n\tOID_gost2012PKey512 = 62,\n\tOID_gost2012Digest256 = 63,\n\tOID_gost2012Digest512 = 64,\n\tOID_gost2012Signature256 = 65,\n\tOID_gost2012Signature512 = 66,\n\tOID_gostTC26Sign256A = 67,\n\tOID_gostTC26Sign256B = 68,\n\tOID_gostTC26Sign256C = 69,\n\tOID_gostTC26Sign256D = 70,\n\tOID_gostTC26Sign512A = 71,\n\tOID_gostTC26Sign512B = 72,\n\tOID_gostTC26Sign512C = 73,\n\tOID_sm2 = 74,\n\tOID_sm3 = 75,\n\tOID_SM2_with_SM3 = 76,\n\tOID_sm3WithRSAEncryption = 77,\n\tOID__NR = 78,\n};\n\nstruct hash_testvec {\n\tconst char *key;\n\tconst char *plaintext;\n\tconst char *digest;\n\tunsigned int psize;\n\tshort unsigned int ksize;\n\tint setkey_error;\n\tint digest_error;\n};\n\nstruct cipher_testvec {\n\tconst char *key;\n\tconst char *iv;\n\tconst char *iv_out;\n\tconst char *ptext;\n\tconst char *ctext;\n\tunsigned char wk;\n\tshort unsigned int klen;\n\tunsigned int len;\n\tbool fips_skip;\n\tbool generates_iv;\n\tint setkey_error;\n\tint crypt_error;\n};\n\nstruct aead_testvec {\n\tconst char *key;\n\tconst char *iv;\n\tconst char *ptext;\n\tconst char *assoc;\n\tconst char *ctext;\n\tunsigned char novrfy;\n\tunsigned char wk;\n\tunsigned char klen;\n\tunsigned int plen;\n\tunsigned int clen;\n\tunsigned int alen;\n\tint setkey_error;\n\tint setauthsize_error;\n\tint crypt_error;\n};\n\nstruct cprng_testvec {\n\tconst char *key;\n\tconst char *dt;\n\tconst char *v;\n\tconst char *result;\n\tunsigned char klen;\n\tshort unsigned int dtlen;\n\tshort unsigned int vlen;\n\tshort unsigned int rlen;\n\tshort unsigned int loops;\n};\n\nstruct drbg_testvec {\n\tconst unsigned char *entropy;\n\tsize_t entropylen;\n\tconst unsigned char *entpra;\n\tconst unsigned char *entprb;\n\tsize_t entprlen;\n\tconst unsigned char *addtla;\n\tconst unsigned char *addtlb;\n\tsize_t addtllen;\n\tconst unsigned char *pers;\n\tsize_t perslen;\n\tconst unsigned char *expected;\n\tsize_t expectedlen;\n};\n\nstruct akcipher_testvec {\n\tconst unsigned char *key;\n\tconst unsigned char *params;\n\tconst unsigned char *m;\n\tconst unsigned char *c;\n\tunsigned int key_len;\n\tunsigned int param_len;\n\tunsigned int m_size;\n\tunsigned int c_size;\n\tbool public_key_vec;\n\tbool siggen_sigver_test;\n\tenum OID algo;\n};\n\nstruct kpp_testvec {\n\tconst unsigned char *secret;\n\tconst unsigned char *b_secret;\n\tconst unsigned char *b_public;\n\tconst unsigned char *expected_a_public;\n\tconst unsigned char *expected_ss;\n\tshort unsigned int secret_size;\n\tshort unsigned int b_secret_size;\n\tshort unsigned int b_public_size;\n\tshort unsigned int expected_a_public_size;\n\tshort unsigned int expected_ss_size;\n\tbool genkey;\n};\n\nstruct comp_testvec {\n\tint inlen;\n\tint outlen;\n\tchar input[512];\n\tchar output[512];\n};\n\nstruct aead_test_suite {\n\tconst struct aead_testvec *vecs;\n\tunsigned int count;\n\tunsigned int einval_allowed: 1;\n\tunsigned int aad_iv: 1;\n};\n\nstruct cipher_test_suite {\n\tconst struct cipher_testvec *vecs;\n\tunsigned int count;\n};\n\nstruct comp_test_suite {\n\tstruct {\n\t\tconst struct comp_testvec *vecs;\n\t\tunsigned int count;\n\t} comp;\n\tstruct {\n\t\tconst struct comp_testvec *vecs;\n\t\tunsigned int count;\n\t} decomp;\n};\n\nstruct hash_test_suite {\n\tconst struct hash_testvec *vecs;\n\tunsigned int count;\n};\n\nstruct cprng_test_suite {\n\tconst struct cprng_testvec *vecs;\n\tunsigned int count;\n};\n\nstruct drbg_test_suite {\n\tconst struct drbg_testvec *vecs;\n\tunsigned int count;\n};\n\nstruct akcipher_test_suite {\n\tconst struct akcipher_testvec *vecs;\n\tunsigned int count;\n};\n\nstruct kpp_test_suite {\n\tconst struct kpp_testvec *vecs;\n\tunsigned int count;\n};\n\nstruct alg_test_desc {\n\tconst char *alg;\n\tconst char *generic_driver;\n\tint (*test)(const struct alg_test_desc *, const char *, u32, u32);\n\tint fips_allowed;\n\tunion {\n\t\tstruct aead_test_suite aead;\n\t\tstruct cipher_test_suite cipher;\n\t\tstruct comp_test_suite comp;\n\t\tstruct hash_test_suite hash;\n\t\tstruct cprng_test_suite cprng;\n\t\tstruct drbg_test_suite drbg;\n\t\tstruct akcipher_test_suite akcipher;\n\t\tstruct kpp_test_suite kpp;\n\t} suite;\n};\n\nenum flush_type {\n\tFLUSH_TYPE_NONE = 0,\n\tFLUSH_TYPE_FLUSH = 1,\n\tFLUSH_TYPE_REIMPORT = 2,\n};\n\nenum finalization_type {\n\tFINALIZATION_TYPE_FINAL = 0,\n\tFINALIZATION_TYPE_FINUP = 1,\n\tFINALIZATION_TYPE_DIGEST = 2,\n};\n\nstruct test_sg_division {\n\tunsigned int proportion_of_total;\n\tunsigned int offset;\n\tbool offset_relative_to_alignmask;\n\tenum flush_type flush_type;\n\tbool nosimd;\n};\n\nstruct testvec_config {\n\tconst char *name;\n\tbool inplace;\n\tu32 req_flags;\n\tstruct test_sg_division src_divs[8];\n\tstruct test_sg_division dst_divs[8];\n\tunsigned int iv_offset;\n\tunsigned int key_offset;\n\tbool iv_offset_relative_to_alignmask;\n\tbool key_offset_relative_to_alignmask;\n\tenum finalization_type finalization_type;\n\tbool nosimd;\n};\n\nstruct test_sglist {\n\tchar *bufs[8];\n\tstruct scatterlist sgl[8];\n\tstruct scatterlist sgl_saved[8];\n\tstruct scatterlist *sgl_ptr;\n\tunsigned int nents;\n};\n\nstruct cipher_test_sglists {\n\tstruct test_sglist src;\n\tstruct test_sglist dst;\n};\n\nstruct hmac_ctx {\n\tstruct crypto_shash *hash;\n};\n\nstruct md5_state {\n\tu32 hash[4];\n\tu32 block[16];\n\tu64 byte_count;\n};\n\nstruct sha1_state {\n\tu32 state[5];\n\tu64 count;\n\tu8 buffer[64];\n};\n\ntypedef void sha1_block_fn(struct sha1_state *, const u8 *, int);\n\nstruct sha256_state {\n\tu32 state[8];\n\tu64 count;\n\tu8 buf[64];\n};\n\nstruct sha512_state {\n\tu64 state[8];\n\tu64 count[2];\n\tu8 buf[128];\n};\n\ntypedef void sha512_block_fn(struct sha512_state *, const u8 *, int);\n\nenum blake2b_constant {\n\tBLAKE2B_BLOCKBYTES = 128,\n\tBLAKE2B_KEYBYTES = 64,\n};\n\nstruct blake2b_state {\n\tu64 h[8];\n\tu64 t[2];\n\tu64 f[2];\n\tu8 buf[128];\n\tsize_t buflen;\n};\n\nstruct blake2b_tfm_ctx {\n\tu8 key[64];\n\tunsigned int keylen;\n};\n\nstruct gf128mul_4k {\n\tbe128 t[256];\n};\n\nstruct gf128mul_64k {\n\tstruct gf128mul_4k *t[16];\n};\n\nstruct crypto_cts_ctx {\n\tstruct crypto_skcipher *child;\n};\n\nstruct crypto_cts_reqctx {\n\tstruct scatterlist sg[2];\n\tunsigned int offset;\n\tstruct skcipher_request subreq;\n};\n\nstruct lrw_tfm_ctx {\n\tstruct crypto_skcipher *child;\n\tstruct gf128mul_64k *table;\n\tbe128 mulinc[128];\n};\n\nstruct lrw_request_ctx {\n\tbe128 t;\n\tstruct skcipher_request subreq;\n};\n\nstruct xts_tfm_ctx {\n\tstruct crypto_skcipher *child;\n\tstruct crypto_cipher *tweak;\n};\n\nstruct xts_instance_ctx {\n\tstruct crypto_skcipher_spawn spawn;\n\tchar name[128];\n};\n\nstruct xts_request_ctx {\n\tle128 t;\n\tstruct scatterlist *tail;\n\tstruct scatterlist sg[2];\n\tstruct skcipher_request subreq;\n};\n\nstruct crypto_rfc3686_ctx {\n\tstruct crypto_skcipher *child;\n\tu8 nonce[4];\n};\n\nstruct crypto_rfc3686_req_ctx {\n\tu8 iv[16];\n\tstruct skcipher_request subreq;\n};\n\nstruct gcm_instance_ctx {\n\tstruct crypto_skcipher_spawn ctr;\n\tstruct crypto_ahash_spawn ghash;\n};\n\nstruct crypto_gcm_ctx {\n\tstruct crypto_skcipher *ctr;\n\tstruct crypto_ahash *ghash;\n};\n\nstruct crypto_rfc4106_ctx {\n\tstruct crypto_aead *child;\n\tu8 nonce[4];\n};\n\nstruct crypto_rfc4106_req_ctx {\n\tstruct scatterlist src[3];\n\tstruct scatterlist dst[3];\n\tstruct aead_request subreq;\n};\n\nstruct crypto_rfc4543_instance_ctx {\n\tstruct crypto_aead_spawn aead;\n};\n\nstruct crypto_rfc4543_ctx {\n\tstruct crypto_aead *child;\n\tstruct crypto_sync_skcipher *null;\n\tu8 nonce[4];\n};\n\nstruct crypto_rfc4543_req_ctx {\n\tstruct aead_request subreq;\n};\n\nstruct crypto_gcm_ghash_ctx {\n\tunsigned int cryptlen;\n\tstruct scatterlist *src;\n\tint (*complete)(struct aead_request *, u32);\n};\n\nstruct crypto_gcm_req_priv_ctx {\n\tu8 iv[16];\n\tu8 auth_tag[16];\n\tu8 iauth_tag[16];\n\tstruct scatterlist src[3];\n\tstruct scatterlist dst[3];\n\tstruct scatterlist sg;\n\tstruct crypto_gcm_ghash_ctx ghash_ctx;\n\tunion {\n\t\tstruct ahash_request ahreq;\n\t\tstruct skcipher_request skreq;\n\t} u;\n};\n\nstruct cryptd_skcipher {\n\tstruct crypto_skcipher base;\n};\n\nstruct cryptd_ahash {\n\tstruct crypto_ahash base;\n};\n\nstruct cryptd_aead {\n\tstruct crypto_aead base;\n};\n\nstruct cryptd_cpu_queue {\n\tstruct crypto_queue queue;\n\tstruct work_struct work;\n};\n\nstruct cryptd_queue {\n\tstruct cryptd_cpu_queue *cpu_queue;\n};\n\nstruct cryptd_instance_ctx {\n\tstruct crypto_spawn spawn;\n\tstruct cryptd_queue *queue;\n};\n\nstruct skcipherd_instance_ctx {\n\tstruct crypto_skcipher_spawn spawn;\n\tstruct cryptd_queue *queue;\n};\n\nstruct hashd_instance_ctx {\n\tstruct crypto_shash_spawn spawn;\n\tstruct cryptd_queue *queue;\n};\n\nstruct aead_instance_ctx {\n\tstruct crypto_aead_spawn aead_spawn;\n\tstruct cryptd_queue *queue;\n};\n\nstruct cryptd_skcipher_ctx {\n\trefcount_t refcnt;\n\tstruct crypto_sync_skcipher *child;\n};\n\nstruct cryptd_skcipher_request_ctx {\n\tcrypto_completion_t complete;\n};\n\nstruct cryptd_hash_ctx {\n\trefcount_t refcnt;\n\tstruct crypto_shash *child;\n};\n\nstruct cryptd_hash_request_ctx {\n\tcrypto_completion_t complete;\n\tstruct shash_desc desc;\n};\n\nstruct cryptd_aead_ctx {\n\trefcount_t refcnt;\n\tstruct crypto_aead *child;\n};\n\nstruct cryptd_aead_request_ctx {\n\tcrypto_completion_t complete;\n};\n\nstruct deflate_ctx {\n\tstruct z_stream_s comp_stream;\n\tstruct z_stream_s decomp_stream;\n};\n\nstruct chksum_ctx {\n\tu32 key;\n};\n\nstruct chksum_desc_ctx {\n\tu32 crc;\n};\n\nstruct chksum_desc_ctx___2 {\n\t__u16 crc;\n};\n\nstruct lzo_ctx {\n\tvoid *lzo_comp_mem;\n};\n\nstruct lzorle_ctx {\n\tvoid *lzorle_comp_mem;\n};\n\nstruct xxh64_state {\n\tuint64_t total_len;\n\tuint64_t v1;\n\tuint64_t v2;\n\tuint64_t v3;\n\tuint64_t v4;\n\tuint64_t mem64[4];\n\tuint32_t memsize;\n};\n\nstruct xxhash64_tfm_ctx {\n\tu64 seed;\n};\n\nstruct xxhash64_desc_ctx {\n\tstruct xxh64_state xxhstate;\n};\n\nstruct crypto842_ctx {\n\tvoid *wmem;\n};\n\nstruct crypto_report_rng {\n\tchar type[64];\n\tunsigned int seedsize;\n};\n\nstruct random_ready_callback {\n\tstruct list_head list;\n\tvoid (*func)(struct random_ready_callback *);\n\tstruct module *owner;\n};\n\ntypedef uint32_t drbg_flag_t;\n\nstruct drbg_core {\n\tdrbg_flag_t flags;\n\t__u8 statelen;\n\t__u8 blocklen_bytes;\n\tchar cra_name[128];\n\tchar backend_cra_name[128];\n};\n\nstruct drbg_state;\n\nstruct drbg_state_ops {\n\tint (*update)(struct drbg_state *, struct list_head *, int);\n\tint (*generate)(struct drbg_state *, unsigned char *, unsigned int, struct list_head *);\n\tint (*crypto_init)(struct drbg_state *);\n\tint (*crypto_fini)(struct drbg_state *);\n};\n\nstruct drbg_state {\n\tstruct mutex drbg_mutex;\n\tunsigned char *V;\n\tunsigned char *Vbuf;\n\tunsigned char *C;\n\tunsigned char *Cbuf;\n\tsize_t reseed_ctr;\n\tsize_t reseed_threshold;\n\tunsigned char *scratchpad;\n\tunsigned char *scratchpadbuf;\n\tvoid *priv_data;\n\tstruct crypto_skcipher *ctr_handle;\n\tstruct skcipher_request *ctr_req;\n\t__u8 *outscratchpadbuf;\n\t__u8 *outscratchpad;\n\tstruct crypto_wait ctr_wait;\n\tstruct scatterlist sg_in;\n\tstruct scatterlist sg_out;\n\tbool seeded;\n\tbool pr;\n\tbool fips_primed;\n\tunsigned char *prev;\n\tstruct work_struct seed_work;\n\tstruct crypto_rng *jent;\n\tconst struct drbg_state_ops *d_ops;\n\tconst struct drbg_core *core;\n\tstruct drbg_string test_data;\n\tstruct random_ready_callback random_ready;\n};\n\nenum drbg_prefixes {\n\tDRBG_PREFIX0 = 0,\n\tDRBG_PREFIX1 = 1,\n\tDRBG_PREFIX2 = 2,\n\tDRBG_PREFIX3 = 3,\n};\n\nstruct sdesc {\n\tstruct shash_desc shash;\n\tchar ctx[0];\n};\n\nstruct s {\n\t__be32 conv;\n};\n\nstruct rand_data {\n\t__u64 data;\n\t__u64 old_data;\n\t__u64 prev_time;\n\t__u64 last_delta;\n\t__s64 last_delta2;\n\tunsigned int osr;\n\tunsigned char *mem;\n\tunsigned int memlocation;\n\tunsigned int memblocks;\n\tunsigned int memblocksize;\n\tunsigned int memaccessloops;\n\tint rct_count;\n\tunsigned int apt_observations;\n\tunsigned int apt_count;\n\tunsigned int apt_base;\n\tunsigned int apt_base_set: 1;\n\tunsigned int health_failure: 1;\n};\n\nstruct rand_data___2;\n\nstruct jitterentropy {\n\tspinlock_t jent_lock;\n\tstruct rand_data___2 *entropy_collector;\n\tunsigned int reset_cnt;\n};\n\nstruct ghash_ctx {\n\tstruct gf128mul_4k *gf128;\n};\n\nstruct ghash_desc_ctx {\n\tu8 buffer[16];\n\tu32 bytes;\n};\n\nstruct sockaddr_alg_new {\n\t__u16 salg_family;\n\t__u8 salg_type[14];\n\t__u32 salg_feat;\n\t__u32 salg_mask;\n\t__u8 salg_name[0];\n};\n\nstruct af_alg_iv {\n\t__u32 ivlen;\n\t__u8 iv[0];\n};\n\nstruct cmsghdr {\n\t__kernel_size_t cmsg_len;\n\tint cmsg_level;\n\tint cmsg_type;\n};\n\nstruct net_proto_family {\n\tint family;\n\tint (*create)(struct net *, struct socket *, int, int);\n\tstruct module *owner;\n};\n\nenum {\n\tSOCK_WAKE_IO = 0,\n\tSOCK_WAKE_WAITD = 1,\n\tSOCK_WAKE_SPACE = 2,\n\tSOCK_WAKE_URG = 3,\n};\n\nstruct af_alg_type;\n\nstruct alg_sock {\n\tstruct sock sk;\n\tstruct sock *parent;\n\tatomic_t refcnt;\n\tatomic_t nokey_refcnt;\n\tconst struct af_alg_type *type;\n\tvoid *private;\n};\n\nstruct af_alg_type {\n\tvoid * (*bind)(const char *, u32, u32);\n\tvoid (*release)(void *);\n\tint (*setkey)(void *, const u8 *, unsigned int);\n\tint (*setentropy)(void *, sockptr_t, unsigned int);\n\tint (*accept)(void *, struct sock *);\n\tint (*accept_nokey)(void *, struct sock *);\n\tint (*setauthsize)(void *, unsigned int);\n\tstruct proto_ops *ops;\n\tstruct proto_ops *ops_nokey;\n\tstruct module *owner;\n\tchar name[14];\n};\n\nstruct af_alg_control {\n\tstruct af_alg_iv *iv;\n\tint op;\n\tunsigned int aead_assoclen;\n};\n\nstruct af_alg_sgl {\n\tstruct scatterlist sg[17];\n\tstruct page *pages[16];\n\tunsigned int npages;\n};\n\nstruct af_alg_tsgl {\n\tstruct list_head list;\n\tunsigned int cur;\n\tstruct scatterlist sg[0];\n};\n\nstruct af_alg_rsgl {\n\tstruct af_alg_sgl sgl;\n\tstruct list_head list;\n\tsize_t sg_num_bytes;\n};\n\nstruct af_alg_async_req {\n\tstruct kiocb *iocb;\n\tstruct sock *sk;\n\tstruct af_alg_rsgl first_rsgl;\n\tstruct af_alg_rsgl *last_rsgl;\n\tstruct list_head rsgl_list;\n\tstruct scatterlist *tsgl;\n\tunsigned int tsgl_entries;\n\tunsigned int outlen;\n\tunsigned int areqlen;\n\tunion {\n\t\tstruct aead_request aead_req;\n\t\tstruct skcipher_request skcipher_req;\n\t} cra_u;\n};\n\nstruct af_alg_ctx {\n\tstruct list_head tsgl_list;\n\tvoid *iv;\n\tsize_t aead_assoclen;\n\tstruct crypto_wait wait;\n\tsize_t used;\n\tatomic_t rcvused;\n\tbool more;\n\tbool merge;\n\tbool enc;\n\tbool init;\n\tunsigned int len;\n};\n\nstruct alg_type_list {\n\tconst struct af_alg_type *type;\n\tstruct list_head list;\n};\n\nstruct hash_ctx {\n\tstruct af_alg_sgl sgl;\n\tu8 *result;\n\tstruct crypto_wait wait;\n\tunsigned int len;\n\tbool more;\n\tstruct ahash_request req;\n};\n\nstruct rng_ctx {\n\tunsigned int len;\n\tstruct crypto_rng *drng;\n\tu8 *addtl;\n\tsize_t addtl_len;\n};\n\nstruct rng_parent_ctx {\n\tstruct crypto_rng *drng;\n\tu8 *entropy;\n};\n\nstruct aead_tfm {\n\tstruct crypto_aead *aead;\n\tstruct crypto_sync_skcipher *null_tfm;\n};\n\nstruct xor_block_template {\n\tstruct xor_block_template *next;\n\tconst char *name;\n\tint speed;\n\tvoid (*do_2)(long unsigned int, long unsigned int *, long unsigned int *);\n\tvoid (*do_3)(long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);\n\tvoid (*do_4)(long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *, long unsigned int *);\n\tvoid (*do_5)(long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *, long unsigned int *, long unsigned int *);\n};\n\nenum asymmetric_payload_bits {\n\tasym_crypto = 0,\n\tasym_subtype = 1,\n\tasym_key_ids = 2,\n\tasym_auth = 3,\n};\n\nstruct asymmetric_key_ids {\n\tvoid *id[2];\n};\n\nstruct asymmetric_key_subtype {\n\tstruct module *owner;\n\tconst char *name;\n\tshort unsigned int name_len;\n\tvoid (*describe)(const struct key *, struct seq_file *);\n\tvoid (*destroy)(void *, void *);\n\tint (*query)(const struct kernel_pkey_params *, struct kernel_pkey_query *);\n\tint (*eds_op)(struct kernel_pkey_params *, const void *, void *);\n\tint (*verify_signature)(const struct key *, const struct public_key_signature *);\n};\n\nstruct asymmetric_key_parser {\n\tstruct list_head link;\n\tstruct module *owner;\n\tconst char *name;\n\tint (*parse)(struct key_preparsed_payload *);\n};\n\nstruct public_key {\n\tvoid *key;\n\tu32 keylen;\n\tenum OID algo;\n\tvoid *params;\n\tu32 paramlen;\n\tbool key_is_private;\n\tconst char *id_type;\n\tconst char *pkey_algo;\n};\n\nenum x509_actions {\n\tACT_x509_extract_key_data = 0,\n\tACT_x509_extract_name_segment = 1,\n\tACT_x509_note_OID = 2,\n\tACT_x509_note_issuer = 3,\n\tACT_x509_note_not_after = 4,\n\tACT_x509_note_not_before = 5,\n\tACT_x509_note_params = 6,\n\tACT_x509_note_pkey_algo = 7,\n\tACT_x509_note_serial = 8,\n\tACT_x509_note_signature = 9,\n\tACT_x509_note_subject = 10,\n\tACT_x509_note_tbs_certificate = 11,\n\tACT_x509_process_extension = 12,\n\tNR__x509_actions = 13,\n};\n\nenum x509_akid_actions {\n\tACT_x509_akid_note_kid = 0,\n\tACT_x509_akid_note_name = 1,\n\tACT_x509_akid_note_serial = 2,\n\tACT_x509_extract_name_segment___2 = 3,\n\tACT_x509_note_OID___2 = 4,\n\tNR__x509_akid_actions = 5,\n};\n\nstruct x509_certificate {\n\tstruct x509_certificate *next;\n\tstruct x509_certificate *signer;\n\tstruct public_key *pub;\n\tstruct public_key_signature *sig;\n\tchar *issuer;\n\tchar *subject;\n\tstruct asymmetric_key_id *id;\n\tstruct asymmetric_key_id *skid;\n\ttime64_t valid_from;\n\ttime64_t valid_to;\n\tconst void *tbs;\n\tunsigned int tbs_size;\n\tunsigned int raw_sig_size;\n\tconst void *raw_sig;\n\tconst void *raw_serial;\n\tunsigned int raw_serial_size;\n\tunsigned int raw_issuer_size;\n\tconst void *raw_issuer;\n\tconst void *raw_subject;\n\tunsigned int raw_subject_size;\n\tunsigned int raw_skid_size;\n\tconst void *raw_skid;\n\tunsigned int index;\n\tbool seen;\n\tbool verified;\n\tbool self_signed;\n\tbool unsupported_key;\n\tbool unsupported_sig;\n\tbool blacklisted;\n};\n\nstruct x509_parse_context {\n\tstruct x509_certificate *cert;\n\tlong unsigned int data;\n\tconst void *cert_start;\n\tconst void *key;\n\tsize_t key_size;\n\tconst void *params;\n\tsize_t params_size;\n\tenum OID key_algo;\n\tenum OID last_oid;\n\tenum OID algo_oid;\n\tunsigned char nr_mpi;\n\tu8 o_size;\n\tu8 cn_size;\n\tu8 email_size;\n\tu16 o_offset;\n\tu16 cn_offset;\n\tu16 email_offset;\n\tunsigned int raw_akid_size;\n\tconst void *raw_akid;\n\tconst void *akid_raw_issuer;\n\tunsigned int akid_raw_issuer_size;\n};\n\nenum pkcs7_actions {\n\tACT_pkcs7_check_content_type = 0,\n\tACT_pkcs7_extract_cert = 1,\n\tACT_pkcs7_note_OID = 2,\n\tACT_pkcs7_note_certificate_list = 3,\n\tACT_pkcs7_note_content = 4,\n\tACT_pkcs7_note_data = 5,\n\tACT_pkcs7_note_signed_info = 6,\n\tACT_pkcs7_note_signeddata_version = 7,\n\tACT_pkcs7_note_signerinfo_version = 8,\n\tACT_pkcs7_sig_note_authenticated_attr = 9,\n\tACT_pkcs7_sig_note_digest_algo = 10,\n\tACT_pkcs7_sig_note_issuer = 11,\n\tACT_pkcs7_sig_note_pkey_algo = 12,\n\tACT_pkcs7_sig_note_serial = 13,\n\tACT_pkcs7_sig_note_set_of_authattrs = 14,\n\tACT_pkcs7_sig_note_signature = 15,\n\tACT_pkcs7_sig_note_skid = 16,\n\tNR__pkcs7_actions = 17,\n};\n\nstruct pkcs7_signed_info {\n\tstruct pkcs7_signed_info *next;\n\tstruct x509_certificate *signer;\n\tunsigned int index;\n\tbool unsupported_crypto;\n\tbool blacklisted;\n\tconst void *msgdigest;\n\tunsigned int msgdigest_len;\n\tunsigned int authattrs_len;\n\tconst void *authattrs;\n\tlong unsigned int aa_set;\n\ttime64_t signing_time;\n\tstruct public_key_signature *sig;\n};\n\nstruct pkcs7_message___2 {\n\tstruct x509_certificate *certs;\n\tstruct x509_certificate *crl;\n\tstruct pkcs7_signed_info *signed_infos;\n\tu8 version;\n\tbool have_authattrs;\n\tenum OID data_type;\n\tsize_t data_len;\n\tsize_t data_hdrlen;\n\tconst void *data;\n};\n\nstruct pkcs7_parse_context {\n\tstruct pkcs7_message___2 *msg;\n\tstruct pkcs7_signed_info *sinfo;\n\tstruct pkcs7_signed_info **ppsinfo;\n\tstruct x509_certificate *certs;\n\tstruct x509_certificate **ppcerts;\n\tlong unsigned int data;\n\tenum OID last_oid;\n\tunsigned int x509_index;\n\tunsigned int sinfo_index;\n\tconst void *raw_serial;\n\tunsigned int raw_serial_size;\n\tunsigned int raw_issuer_size;\n\tconst void *raw_issuer;\n\tconst void *raw_skid;\n\tunsigned int raw_skid_size;\n\tbool expect_skid;\n};\n\nstruct mz_hdr {\n\tuint16_t magic;\n\tuint16_t lbsize;\n\tuint16_t blocks;\n\tuint16_t relocs;\n\tuint16_t hdrsize;\n\tuint16_t min_extra_pps;\n\tuint16_t max_extra_pps;\n\tuint16_t ss;\n\tuint16_t sp;\n\tuint16_t checksum;\n\tuint16_t ip;\n\tuint16_t cs;\n\tuint16_t reloc_table_offset;\n\tuint16_t overlay_num;\n\tuint16_t reserved0[4];\n\tuint16_t oem_id;\n\tuint16_t oem_info;\n\tuint16_t reserved1[10];\n\tuint32_t peaddr;\n\tchar message[0];\n};\n\nstruct pe_hdr {\n\tuint32_t magic;\n\tuint16_t machine;\n\tuint16_t sections;\n\tuint32_t timestamp;\n\tuint32_t symbol_table;\n\tuint32_t symbols;\n\tuint16_t opt_hdr_size;\n\tuint16_t flags;\n};\n\nstruct pe32_opt_hdr {\n\tuint16_t magic;\n\tuint8_t ld_major;\n\tuint8_t ld_minor;\n\tuint32_t text_size;\n\tuint32_t data_size;\n\tuint32_t bss_size;\n\tuint32_t entry_point;\n\tuint32_t code_base;\n\tuint32_t data_base;\n\tuint32_t image_base;\n\tuint32_t section_align;\n\tuint32_t file_align;\n\tuint16_t os_major;\n\tuint16_t os_minor;\n\tuint16_t image_major;\n\tuint16_t image_minor;\n\tuint16_t subsys_major;\n\tuint16_t subsys_minor;\n\tuint32_t win32_version;\n\tuint32_t image_size;\n\tuint32_t header_size;\n\tuint32_t csum;\n\tuint16_t subsys;\n\tuint16_t dll_flags;\n\tuint32_t stack_size_req;\n\tuint32_t stack_size;\n\tuint32_t heap_size_req;\n\tuint32_t heap_size;\n\tuint32_t loader_flags;\n\tuint32_t data_dirs;\n};\n\nstruct pe32plus_opt_hdr {\n\tuint16_t magic;\n\tuint8_t ld_major;\n\tuint8_t ld_minor;\n\tuint32_t text_size;\n\tuint32_t data_size;\n\tuint32_t bss_size;\n\tuint32_t entry_point;\n\tuint32_t code_base;\n\tuint64_t image_base;\n\tuint32_t section_align;\n\tuint32_t file_align;\n\tuint16_t os_major;\n\tuint16_t os_minor;\n\tuint16_t image_major;\n\tuint16_t image_minor;\n\tuint16_t subsys_major;\n\tuint16_t subsys_minor;\n\tuint32_t win32_version;\n\tuint32_t image_size;\n\tuint32_t header_size;\n\tuint32_t csum;\n\tuint16_t subsys;\n\tuint16_t dll_flags;\n\tuint64_t stack_size_req;\n\tuint64_t stack_size;\n\tuint64_t heap_size_req;\n\tuint64_t heap_size;\n\tuint32_t loader_flags;\n\tuint32_t data_dirs;\n};\n\nstruct data_dirent {\n\tuint32_t virtual_address;\n\tuint32_t size;\n};\n\nstruct data_directory {\n\tstruct data_dirent exports;\n\tstruct data_dirent imports;\n\tstruct data_dirent resources;\n\tstruct data_dirent exceptions;\n\tstruct data_dirent certs;\n\tstruct data_dirent base_relocations;\n\tstruct data_dirent debug;\n\tstruct data_dirent arch;\n\tstruct data_dirent global_ptr;\n\tstruct data_dirent tls;\n\tstruct data_dirent load_config;\n\tstruct data_dirent bound_imports;\n\tstruct data_dirent import_addrs;\n\tstruct data_dirent delay_imports;\n\tstruct data_dirent clr_runtime_hdr;\n\tstruct data_dirent reserved;\n};\n\nstruct section_header {\n\tchar name[8];\n\tuint32_t virtual_size;\n\tuint32_t virtual_address;\n\tuint32_t raw_data_size;\n\tuint32_t data_addr;\n\tuint32_t relocs;\n\tuint32_t line_numbers;\n\tuint16_t num_relocs;\n\tuint16_t num_lin_numbers;\n\tuint32_t flags;\n};\n\nstruct win_certificate {\n\tuint32_t length;\n\tuint16_t revision;\n\tuint16_t cert_type;\n};\n\nstruct pefile_context {\n\tunsigned int header_size;\n\tunsigned int image_checksum_offset;\n\tunsigned int cert_dirent_offset;\n\tunsigned int n_data_dirents;\n\tunsigned int n_sections;\n\tunsigned int certs_size;\n\tunsigned int sig_offset;\n\tunsigned int sig_len;\n\tconst struct section_header *secs;\n\tconst void *digest;\n\tunsigned int digest_len;\n\tconst char *digest_algo;\n};\n\nenum mscode_actions {\n\tACT_mscode_note_content_type = 0,\n\tACT_mscode_note_digest = 1,\n\tACT_mscode_note_digest_algo = 2,\n\tNR__mscode_actions = 3,\n};\n\nstruct simd_skcipher_alg___2 {\n\tconst char *ialg_name;\n\tstruct skcipher_alg alg;\n};\n\nstruct simd_skcipher_ctx {\n\tstruct cryptd_skcipher *cryptd_tfm;\n};\n\nstruct simd_aead_alg___2 {\n\tconst char *ialg_name;\n\tstruct aead_alg alg;\n};\n\nstruct simd_aead_ctx {\n\tstruct cryptd_aead *cryptd_tfm;\n};\n\nstruct biovec_slab {\n\tint nr_vecs;\n\tchar *name;\n\tstruct kmem_cache *slab;\n};\n\nenum rq_qos_id {\n\tRQ_QOS_WBT = 0,\n\tRQ_QOS_LATENCY = 1,\n\tRQ_QOS_COST = 2,\n};\n\nstruct rq_qos_ops;\n\nstruct rq_qos {\n\tstruct rq_qos_ops *ops;\n\tstruct request_queue *q;\n\tenum rq_qos_id id;\n\tstruct rq_qos *next;\n\tstruct dentry *debugfs_dir;\n};\n\nenum {\n\tsysctl_hung_task_timeout_secs = 0,\n};\n\nenum hctx_type {\n\tHCTX_TYPE_DEFAULT = 0,\n\tHCTX_TYPE_READ = 1,\n\tHCTX_TYPE_POLL = 2,\n\tHCTX_MAX_TYPES = 3,\n};\n\nstruct rq_qos_ops {\n\tvoid (*throttle)(struct rq_qos *, struct bio *);\n\tvoid (*track)(struct rq_qos *, struct request *, struct bio *);\n\tvoid (*merge)(struct rq_qos *, struct request *, struct bio *);\n\tvoid (*issue)(struct rq_qos *, struct request *);\n\tvoid (*requeue)(struct rq_qos *, struct request *);\n\tvoid (*done)(struct rq_qos *, struct request *);\n\tvoid (*done_bio)(struct rq_qos *, struct bio *);\n\tvoid (*cleanup)(struct rq_qos *, struct bio *);\n\tvoid (*queue_depth_changed)(struct rq_qos *);\n\tvoid (*exit)(struct rq_qos *);\n\tconst struct blk_mq_debugfs_attr *debugfs_attrs;\n};\n\nstruct bio_slab {\n\tstruct kmem_cache *slab;\n\tunsigned int slab_ref;\n\tunsigned int slab_size;\n\tchar name[8];\n};\n\nenum {\n\tBLK_MQ_F_SHOULD_MERGE = 1,\n\tBLK_MQ_F_TAG_QUEUE_SHARED = 2,\n\tBLK_MQ_F_STACKING = 4,\n\tBLK_MQ_F_TAG_HCTX_SHARED = 8,\n\tBLK_MQ_F_BLOCKING = 32,\n\tBLK_MQ_F_NO_SCHED = 64,\n\tBLK_MQ_F_ALLOC_POLICY_START_BIT = 8,\n\tBLK_MQ_F_ALLOC_POLICY_BITS = 1,\n\tBLK_MQ_S_STOPPED = 0,\n\tBLK_MQ_S_TAG_ACTIVE = 1,\n\tBLK_MQ_S_SCHED_RESTART = 2,\n\tBLK_MQ_S_INACTIVE = 3,\n\tBLK_MQ_MAX_DEPTH = 10240,\n\tBLK_MQ_CPU_WORK_BATCH = 8,\n};\n\nenum {\n\tWBT_RWQ_BG = 0,\n\tWBT_RWQ_KSWAPD = 1,\n\tWBT_RWQ_DISCARD = 2,\n\tWBT_NUM_RWQ = 3,\n};\n\nenum {\n\tBLK_MQ_REQ_NOWAIT = 1,\n\tBLK_MQ_REQ_RESERVED = 2,\n\tBLK_MQ_REQ_PM = 4,\n};\n\nstruct trace_event_raw_block_buffer {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tsector_t sector;\n\tsize_t size;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_rq_requeue {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tsector_t sector;\n\tunsigned int nr_sector;\n\tchar rwbs[8];\n\tu32 __data_loc_cmd;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_rq_complete {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tsector_t sector;\n\tunsigned int nr_sector;\n\tint error;\n\tchar rwbs[8];\n\tu32 __data_loc_cmd;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_rq {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tsector_t sector;\n\tunsigned int nr_sector;\n\tunsigned int bytes;\n\tchar rwbs[8];\n\tchar comm[16];\n\tu32 __data_loc_cmd;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_bio_complete {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tsector_t sector;\n\tunsigned int nr_sector;\n\tint error;\n\tchar rwbs[8];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_bio {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tsector_t sector;\n\tunsigned int nr_sector;\n\tchar rwbs[8];\n\tchar comm[16];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_plug {\n\tstruct trace_entry ent;\n\tchar comm[16];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_unplug {\n\tstruct trace_entry ent;\n\tint nr_rq;\n\tchar comm[16];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_split {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tsector_t sector;\n\tsector_t new_sector;\n\tchar rwbs[8];\n\tchar comm[16];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_bio_remap {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tsector_t sector;\n\tunsigned int nr_sector;\n\tdev_t old_dev;\n\tsector_t old_sector;\n\tchar rwbs[8];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_block_rq_remap {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tsector_t sector;\n\tunsigned int nr_sector;\n\tdev_t old_dev;\n\tsector_t old_sector;\n\tunsigned int nr_bios;\n\tchar rwbs[8];\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_block_buffer {};\n\nstruct trace_event_data_offsets_block_rq_requeue {\n\tu32 cmd;\n};\n\nstruct trace_event_data_offsets_block_rq_complete {\n\tu32 cmd;\n};\n\nstruct trace_event_data_offsets_block_rq {\n\tu32 cmd;\n};\n\nstruct trace_event_data_offsets_block_bio_complete {};\n\nstruct trace_event_data_offsets_block_bio {};\n\nstruct trace_event_data_offsets_block_plug {};\n\nstruct trace_event_data_offsets_block_unplug {};\n\nstruct trace_event_data_offsets_block_split {};\n\nstruct trace_event_data_offsets_block_bio_remap {};\n\nstruct trace_event_data_offsets_block_rq_remap {};\n\ntypedef void (*btf_trace_block_touch_buffer)(void *, struct buffer_head *);\n\ntypedef void (*btf_trace_block_dirty_buffer)(void *, struct buffer_head *);\n\ntypedef void (*btf_trace_block_rq_requeue)(void *, struct request *);\n\ntypedef void (*btf_trace_block_rq_complete)(void *, struct request *, int, unsigned int);\n\ntypedef void (*btf_trace_block_rq_insert)(void *, struct request *);\n\ntypedef void (*btf_trace_block_rq_issue)(void *, struct request *);\n\ntypedef void (*btf_trace_block_rq_merge)(void *, struct request *);\n\ntypedef void (*btf_trace_block_bio_complete)(void *, struct request_queue *, struct bio *);\n\ntypedef void (*btf_trace_block_bio_bounce)(void *, struct bio *);\n\ntypedef void (*btf_trace_block_bio_backmerge)(void *, struct bio *);\n\ntypedef void (*btf_trace_block_bio_frontmerge)(void *, struct bio *);\n\ntypedef void (*btf_trace_block_bio_queue)(void *, struct bio *);\n\ntypedef void (*btf_trace_block_getrq)(void *, struct bio *);\n\ntypedef void (*btf_trace_block_plug)(void *, struct request_queue *);\n\ntypedef void (*btf_trace_block_unplug)(void *, struct request_queue *, unsigned int, bool);\n\ntypedef void (*btf_trace_block_split)(void *, struct bio *, unsigned int);\n\ntypedef void (*btf_trace_block_bio_remap)(void *, struct bio *, dev_t, sector_t);\n\ntypedef void (*btf_trace_block_rq_remap)(void *, struct request *, dev_t, sector_t);\n\nenum {\n\tBLK_MQ_NO_TAG = 4294967295,\n\tBLK_MQ_TAG_MIN = 1,\n\tBLK_MQ_TAG_MAX = 4294967294,\n};\n\nstruct queue_sysfs_entry {\n\tstruct attribute attr;\n\tssize_t (*show)(struct request_queue *, char *);\n\tssize_t (*store)(struct request_queue *, const char *, size_t);\n};\n\nenum {\n\tREQ_FSEQ_PREFLUSH = 1,\n\tREQ_FSEQ_DATA = 2,\n\tREQ_FSEQ_POSTFLUSH = 4,\n\tREQ_FSEQ_DONE = 8,\n\tREQ_FSEQ_ACTIONS = 7,\n\tFLUSH_PENDING_TIMEOUT = 5000,\n};\n\nenum {\n\tICQ_EXITED = 4,\n\tICQ_DESTROYED = 8,\n};\n\nstruct rq_map_data {\n\tstruct page **pages;\n\tint page_order;\n\tint nr_entries;\n\tlong unsigned int offset;\n\tint null_mapped;\n\tint from_user;\n};\n\nstruct bio_map_data {\n\tbool is_our_pages: 1;\n\tbool is_null_mapped: 1;\n\tstruct iov_iter iter;\n\tstruct iovec iov[0];\n};\n\nstruct req_iterator {\n\tstruct bvec_iter iter;\n\tstruct bio *bio;\n};\n\nenum bio_merge_status {\n\tBIO_MERGE_OK = 0,\n\tBIO_MERGE_NONE = 1,\n\tBIO_MERGE_FAILED = 2,\n};\n\ntypedef bool (*sb_for_each_fn)(struct sbitmap *, unsigned int, void *);\n\ntypedef bool busy_iter_fn(struct blk_mq_hw_ctx *, struct request *, void *, bool);\n\ntypedef bool busy_tag_iter_fn(struct request *, void *, bool);\n\nenum {\n\tBLK_MQ_UNIQUE_TAG_BITS = 16,\n\tBLK_MQ_UNIQUE_TAG_MASK = 65535,\n};\n\nstruct mq_inflight {\n\tstruct block_device *part;\n\tunsigned int inflight[2];\n};\n\nstruct flush_busy_ctx_data {\n\tstruct blk_mq_hw_ctx *hctx;\n\tstruct list_head *list;\n};\n\nstruct dispatch_rq_data {\n\tstruct blk_mq_hw_ctx *hctx;\n\tstruct request *rq;\n};\n\nenum prep_dispatch {\n\tPREP_DISPATCH_OK = 0,\n\tPREP_DISPATCH_NO_TAG = 1,\n\tPREP_DISPATCH_NO_BUDGET = 2,\n};\n\nstruct rq_iter_data {\n\tstruct blk_mq_hw_ctx *hctx;\n\tbool has_rq;\n};\n\nstruct blk_mq_qe_pair {\n\tstruct list_head node;\n\tstruct request_queue *q;\n\tstruct elevator_type *type;\n};\n\nstruct sbq_wait {\n\tstruct sbitmap_queue *sbq;\n\tstruct wait_queue_entry wait;\n};\n\nstruct bt_iter_data {\n\tstruct blk_mq_hw_ctx *hctx;\n\tbusy_iter_fn *fn;\n\tvoid *data;\n\tbool reserved;\n};\n\nstruct bt_tags_iter_data {\n\tstruct blk_mq_tags *tags;\n\tbusy_tag_iter_fn *fn;\n\tvoid *data;\n\tunsigned int flags;\n};\n\nstruct blk_queue_stats {\n\tstruct list_head callbacks;\n\tspinlock_t lock;\n\tbool enable_accounting;\n};\n\nstruct blk_mq_ctx_sysfs_entry {\n\tstruct attribute attr;\n\tssize_t (*show)(struct blk_mq_ctx *, char *);\n\tssize_t (*store)(struct blk_mq_ctx *, const char *, size_t);\n};\n\nstruct blk_mq_hw_ctx_sysfs_entry {\n\tstruct attribute attr;\n\tssize_t (*show)(struct blk_mq_hw_ctx *, char *);\n\tssize_t (*store)(struct blk_mq_hw_ctx *, const char *, size_t);\n};\n\ntypedef u32 compat_caddr_t;\n\nstruct hd_geometry {\n\tunsigned char heads;\n\tunsigned char sectors;\n\tshort unsigned int cylinders;\n\tlong unsigned int start;\n};\n\nstruct blkpg_ioctl_arg {\n\tint op;\n\tint flags;\n\tint datalen;\n\tvoid *data;\n};\n\nstruct blkpg_partition {\n\tlong long int start;\n\tlong long int length;\n\tint pno;\n\tchar devname[64];\n\tchar volname[64];\n};\n\nstruct pr_reservation {\n\t__u64 key;\n\t__u32 type;\n\t__u32 flags;\n};\n\nstruct pr_registration {\n\t__u64 old_key;\n\t__u64 new_key;\n\t__u32 flags;\n\t__u32 __pad;\n};\n\nstruct pr_preempt {\n\t__u64 old_key;\n\t__u64 new_key;\n\t__u32 type;\n\t__u32 flags;\n};\n\nstruct pr_clear {\n\t__u64 key;\n\t__u32 flags;\n\t__u32 __pad;\n};\n\nstruct compat_blkpg_ioctl_arg {\n\tcompat_int_t op;\n\tcompat_int_t flags;\n\tcompat_int_t datalen;\n\tcompat_caddr_t data;\n};\n\nstruct compat_hd_geometry {\n\tunsigned char heads;\n\tunsigned char sectors;\n\tshort unsigned int cylinders;\n\tu32 start;\n};\n\nstruct klist_node;\n\nstruct klist {\n\tspinlock_t k_lock;\n\tstruct list_head k_list;\n\tvoid (*get)(struct klist_node *);\n\tvoid (*put)(struct klist_node *);\n};\n\nstruct klist_node {\n\tvoid *n_klist;\n\tstruct list_head n_node;\n\tstruct kref n_ref;\n};\n\nstruct klist_iter {\n\tstruct klist *i_klist;\n\tstruct klist_node *i_cur;\n};\n\nstruct class_dev_iter {\n\tstruct klist_iter ki;\n\tconst struct device_type *type;\n};\n\nenum {\n\tDISK_EVENT_FLAG_POLL = 1,\n\tDISK_EVENT_FLAG_UEVENT = 2,\n};\n\nstruct disk_events {\n\tstruct list_head node;\n\tstruct gendisk *disk;\n\tspinlock_t lock;\n\tstruct mutex block_mutex;\n\tint block;\n\tunsigned int pending;\n\tunsigned int clearing;\n\tlong int poll_msecs;\n\tstruct delayed_work dwork;\n};\n\nstruct badblocks {\n\tstruct device *dev;\n\tint count;\n\tint unacked_exist;\n\tint shift;\n\tu64 *page;\n\tint changed;\n\tseqlock_t lock;\n\tsector_t sector;\n\tsector_t size;\n};\n\nstruct disk_part_iter {\n\tstruct gendisk *disk;\n\tstruct block_device *part;\n\tint idx;\n\tunsigned int flags;\n};\n\nstruct blk_major_name {\n\tstruct blk_major_name *next;\n\tint major;\n\tchar name[16];\n\tvoid (*probe)(dev_t);\n};\n\nenum {\n\tIOPRIO_WHO_PROCESS = 1,\n\tIOPRIO_WHO_PGRP = 2,\n\tIOPRIO_WHO_USER = 3,\n};\n\nstruct parsed_partitions {\n\tstruct block_device *bdev;\n\tchar name[32];\n\tstruct {\n\t\tsector_t from;\n\t\tsector_t size;\n\t\tint flags;\n\t\tbool has_info;\n\t\tstruct partition_meta_info info;\n\t} *parts;\n\tint next;\n\tint limit;\n\tbool access_beyond_eod;\n\tchar *pp_buf;\n};\n\ntypedef struct {\n\tstruct page *v;\n} Sector;\n\nstruct RigidDiskBlock {\n\t__u32 rdb_ID;\n\t__be32 rdb_SummedLongs;\n\t__s32 rdb_ChkSum;\n\t__u32 rdb_HostID;\n\t__be32 rdb_BlockBytes;\n\t__u32 rdb_Flags;\n\t__u32 rdb_BadBlockList;\n\t__be32 rdb_PartitionList;\n\t__u32 rdb_FileSysHeaderList;\n\t__u32 rdb_DriveInit;\n\t__u32 rdb_Reserved1[6];\n\t__u32 rdb_Cylinders;\n\t__u32 rdb_Sectors;\n\t__u32 rdb_Heads;\n\t__u32 rdb_Interleave;\n\t__u32 rdb_Park;\n\t__u32 rdb_Reserved2[3];\n\t__u32 rdb_WritePreComp;\n\t__u32 rdb_ReducedWrite;\n\t__u32 rdb_StepRate;\n\t__u32 rdb_Reserved3[5];\n\t__u32 rdb_RDBBlocksLo;\n\t__u32 rdb_RDBBlocksHi;\n\t__u32 rdb_LoCylinder;\n\t__u32 rdb_HiCylinder;\n\t__u32 rdb_CylBlocks;\n\t__u32 rdb_AutoParkSeconds;\n\t__u32 rdb_HighRDSKBlock;\n\t__u32 rdb_Reserved4;\n\tchar rdb_DiskVendor[8];\n\tchar rdb_DiskProduct[16];\n\tchar rdb_DiskRevision[4];\n\tchar rdb_ControllerVendor[8];\n\tchar rdb_ControllerProduct[16];\n\tchar rdb_ControllerRevision[4];\n\t__u32 rdb_Reserved5[10];\n};\n\nstruct PartitionBlock {\n\t__be32 pb_ID;\n\t__be32 pb_SummedLongs;\n\t__s32 pb_ChkSum;\n\t__u32 pb_HostID;\n\t__be32 pb_Next;\n\t__u32 pb_Flags;\n\t__u32 pb_Reserved1[2];\n\t__u32 pb_DevFlags;\n\t__u8 pb_DriveName[32];\n\t__u32 pb_Reserved2[15];\n\t__be32 pb_Environment[17];\n\t__u32 pb_EReserved[15];\n};\n\nstruct lvm_rec {\n\tchar lvm_id[4];\n\tchar reserved4[16];\n\t__be32 lvmarea_len;\n\t__be32 vgda_len;\n\t__be32 vgda_psn[2];\n\tchar reserved36[10];\n\t__be16 pp_size;\n\tchar reserved46[12];\n\t__be16 version;\n};\n\nstruct vgda {\n\t__be32 secs;\n\t__be32 usec;\n\tchar reserved8[16];\n\t__be16 numlvs;\n\t__be16 maxlvs;\n\t__be16 pp_size;\n\t__be16 numpvs;\n\t__be16 total_vgdas;\n\t__be16 vgda_size;\n};\n\nstruct lvd {\n\t__be16 lv_ix;\n\t__be16 res2;\n\t__be16 res4;\n\t__be16 maxsize;\n\t__be16 lv_state;\n\t__be16 mirror;\n\t__be16 mirror_policy;\n\t__be16 num_lps;\n\t__be16 res10[8];\n};\n\nstruct lvname {\n\tchar name[64];\n};\n\nstruct ppe {\n\t__be16 lv_ix;\n\tshort unsigned int res2;\n\tshort unsigned int res4;\n\t__be16 lp_ix;\n\tshort unsigned int res8[12];\n};\n\nstruct pvd {\n\tchar reserved0[16];\n\t__be16 pp_count;\n\tchar reserved18[2];\n\t__be32 psn_part1;\n\tchar reserved24[8];\n\tstruct ppe ppe[1016];\n};\n\nstruct lv_info {\n\tshort unsigned int pps_per_lv;\n\tshort unsigned int pps_found;\n\tunsigned char lv_is_contiguous;\n};\n\nstruct mac_partition {\n\t__be16 signature;\n\t__be16 res1;\n\t__be32 map_count;\n\t__be32 start_block;\n\t__be32 block_count;\n\tchar name[32];\n\tchar type[32];\n\t__be32 data_start;\n\t__be32 data_count;\n\t__be32 status;\n\t__be32 boot_start;\n\t__be32 boot_size;\n\t__be32 boot_load;\n\t__be32 boot_load2;\n\t__be32 boot_entry;\n\t__be32 boot_entry2;\n\t__be32 boot_cksum;\n\tchar processor[16];\n};\n\nstruct mac_driver_desc {\n\t__be16 signature;\n\t__be16 block_size;\n\t__be32 block_count;\n};\n\nstruct msdos_partition {\n\tu8 boot_ind;\n\tu8 head;\n\tu8 sector;\n\tu8 cyl;\n\tu8 sys_ind;\n\tu8 end_head;\n\tu8 end_sector;\n\tu8 end_cyl;\n\t__le32 start_sect;\n\t__le32 nr_sects;\n};\n\nstruct frag {\n\tstruct list_head list;\n\tu32 group;\n\tu8 num;\n\tu8 rec;\n\tu8 map;\n\tu8 data[0];\n};\n\nstruct privhead {\n\tu16 ver_major;\n\tu16 ver_minor;\n\tu64 logical_disk_start;\n\tu64 logical_disk_size;\n\tu64 config_start;\n\tu64 config_size;\n\tuuid_t disk_id;\n};\n\nstruct tocblock {\n\tu8 bitmap1_name[16];\n\tu64 bitmap1_start;\n\tu64 bitmap1_size;\n\tu8 bitmap2_name[16];\n\tu64 bitmap2_start;\n\tu64 bitmap2_size;\n};\n\nstruct vmdb {\n\tu16 ver_major;\n\tu16 ver_minor;\n\tu32 vblk_size;\n\tu32 vblk_offset;\n\tu32 last_vblk_seq;\n};\n\nstruct vblk_comp {\n\tu8 state[16];\n\tu64 parent_id;\n\tu8 type;\n\tu8 children;\n\tu16 chunksize;\n};\n\nstruct vblk_dgrp {\n\tu8 disk_id[64];\n};\n\nstruct vblk_disk {\n\tuuid_t disk_id;\n\tu8 alt_name[128];\n};\n\nstruct vblk_part {\n\tu64 start;\n\tu64 size;\n\tu64 volume_offset;\n\tu64 parent_id;\n\tu64 disk_id;\n\tu8 partnum;\n};\n\nstruct vblk_volu {\n\tu8 volume_type[16];\n\tu8 volume_state[16];\n\tu8 guid[16];\n\tu8 drive_hint[4];\n\tu64 size;\n\tu8 partition_type;\n};\n\nstruct vblk {\n\tu8 name[64];\n\tu64 obj_id;\n\tu32 sequence;\n\tu8 flags;\n\tu8 type;\n\tunion {\n\t\tstruct vblk_comp comp;\n\t\tstruct vblk_dgrp dgrp;\n\t\tstruct vblk_disk disk;\n\t\tstruct vblk_part part;\n\t\tstruct vblk_volu volu;\n\t} vblk;\n\tstruct list_head list;\n};\n\nstruct ldmdb {\n\tstruct privhead ph;\n\tstruct tocblock toc;\n\tstruct vmdb vm;\n\tstruct list_head v_dgrp;\n\tstruct list_head v_disk;\n\tstruct list_head v_volu;\n\tstruct list_head v_comp;\n\tstruct list_head v_part;\n};\n\nstruct fat_boot_sector {\n\t__u8 ignored[3];\n\t__u8 system_id[8];\n\t__u8 sector_size[2];\n\t__u8 sec_per_clus;\n\t__le16 reserved;\n\t__u8 fats;\n\t__u8 dir_entries[2];\n\t__u8 sectors[2];\n\t__u8 media;\n\t__le16 fat_length;\n\t__le16 secs_track;\n\t__le16 heads;\n\t__le32 hidden;\n\t__le32 total_sect;\n\tunion {\n\t\tstruct {\n\t\t\t__u8 drive_number;\n\t\t\t__u8 state;\n\t\t\t__u8 signature;\n\t\t\t__u8 vol_id[4];\n\t\t\t__u8 vol_label[11];\n\t\t\t__u8 fs_type[8];\n\t\t} fat16;\n\t\tstruct {\n\t\t\t__le32 length;\n\t\t\t__le16 flags;\n\t\t\t__u8 version[2];\n\t\t\t__le32 root_cluster;\n\t\t\t__le16 info_sector;\n\t\t\t__le16 backup_boot;\n\t\t\t__le16 reserved2[6];\n\t\t\t__u8 drive_number;\n\t\t\t__u8 state;\n\t\t\t__u8 signature;\n\t\t\t__u8 vol_id[4];\n\t\t\t__u8 vol_label[11];\n\t\t\t__u8 fs_type[8];\n\t\t} fat32;\n\t};\n};\n\nenum msdos_sys_ind {\n\tDOS_EXTENDED_PARTITION = 5,\n\tLINUX_EXTENDED_PARTITION = 133,\n\tWIN98_EXTENDED_PARTITION = 15,\n\tLINUX_DATA_PARTITION = 131,\n\tLINUX_LVM_PARTITION = 142,\n\tLINUX_RAID_PARTITION = 253,\n\tSOLARIS_X86_PARTITION = 130,\n\tNEW_SOLARIS_X86_PARTITION = 191,\n\tDM6_AUX1PARTITION = 81,\n\tDM6_AUX3PARTITION = 83,\n\tDM6_PARTITION = 84,\n\tEZD_PARTITION = 85,\n\tFREEBSD_PARTITION = 165,\n\tOPENBSD_PARTITION = 166,\n\tNETBSD_PARTITION = 169,\n\tBSDI_PARTITION = 183,\n\tMINIX_PARTITION = 129,\n\tUNIXWARE_PARTITION = 99,\n};\n\nstruct solaris_x86_slice {\n\t__le16 s_tag;\n\t__le16 s_flag;\n\t__le32 s_start;\n\t__le32 s_size;\n};\n\nstruct solaris_x86_vtoc {\n\tunsigned int v_bootinfo[3];\n\t__le32 v_sanity;\n\t__le32 v_version;\n\tchar v_volume[8];\n\t__le16 v_sectorsz;\n\t__le16 v_nparts;\n\tunsigned int v_reserved[10];\n\tstruct solaris_x86_slice v_slice[16];\n\tunsigned int timestamp[16];\n\tchar v_asciilabel[128];\n};\n\nstruct bsd_partition {\n\t__le32 p_size;\n\t__le32 p_offset;\n\t__le32 p_fsize;\n\t__u8 p_fstype;\n\t__u8 p_frag;\n\t__le16 p_cpg;\n};\n\nstruct bsd_disklabel {\n\t__le32 d_magic;\n\t__s16 d_type;\n\t__s16 d_subtype;\n\tchar d_typename[16];\n\tchar d_packname[16];\n\t__u32 d_secsize;\n\t__u32 d_nsectors;\n\t__u32 d_ntracks;\n\t__u32 d_ncylinders;\n\t__u32 d_secpercyl;\n\t__u32 d_secperunit;\n\t__u16 d_sparespertrack;\n\t__u16 d_sparespercyl;\n\t__u32 d_acylinders;\n\t__u16 d_rpm;\n\t__u16 d_interleave;\n\t__u16 d_trackskew;\n\t__u16 d_cylskew;\n\t__u32 d_headswitch;\n\t__u32 d_trkseek;\n\t__u32 d_flags;\n\t__u32 d_drivedata[5];\n\t__u32 d_spare[5];\n\t__le32 d_magic2;\n\t__le16 d_checksum;\n\t__le16 d_npartitions;\n\t__le32 d_bbsize;\n\t__le32 d_sbsize;\n\tstruct bsd_partition d_partitions[16];\n};\n\nstruct unixware_slice {\n\t__le16 s_label;\n\t__le16 s_flags;\n\t__le32 start_sect;\n\t__le32 nr_sects;\n};\n\nstruct unixware_vtoc {\n\t__le32 v_magic;\n\t__le32 v_version;\n\tchar v_name[8];\n\t__le16 v_nslices;\n\t__le16 v_unknown1;\n\t__le32 v_reserved[10];\n\tstruct unixware_slice v_slice[16];\n};\n\nstruct unixware_disklabel {\n\t__le32 d_type;\n\t__le32 d_magic;\n\t__le32 d_version;\n\tchar d_serial[12];\n\t__le32 d_ncylinders;\n\t__le32 d_ntracks;\n\t__le32 d_nsectors;\n\t__le32 d_secsize;\n\t__le32 d_part_start;\n\t__le32 d_unknown1[12];\n\t__le32 d_alt_tbl;\n\t__le32 d_alt_len;\n\t__le32 d_phys_cyl;\n\t__le32 d_phys_trk;\n\t__le32 d_phys_sec;\n\t__le32 d_phys_bytes;\n\t__le32 d_unknown2;\n\t__le32 d_unknown3;\n\t__le32 d_pad[8];\n\tstruct unixware_vtoc vtoc;\n};\n\nstruct d_partition {\n\t__le32 p_size;\n\t__le32 p_offset;\n\t__le32 p_fsize;\n\tu8 p_fstype;\n\tu8 p_frag;\n\t__le16 p_cpg;\n};\n\nstruct disklabel {\n\t__le32 d_magic;\n\t__le16 d_type;\n\t__le16 d_subtype;\n\tu8 d_typename[16];\n\tu8 d_packname[16];\n\t__le32 d_secsize;\n\t__le32 d_nsectors;\n\t__le32 d_ntracks;\n\t__le32 d_ncylinders;\n\t__le32 d_secpercyl;\n\t__le32 d_secprtunit;\n\t__le16 d_sparespertrack;\n\t__le16 d_sparespercyl;\n\t__le32 d_acylinders;\n\t__le16 d_rpm;\n\t__le16 d_interleave;\n\t__le16 d_trackskew;\n\t__le16 d_cylskew;\n\t__le32 d_headswitch;\n\t__le32 d_trkseek;\n\t__le32 d_flags;\n\t__le32 d_drivedata[5];\n\t__le32 d_spare[5];\n\t__le32 d_magic2;\n\t__le16 d_checksum;\n\t__le16 d_npartitions;\n\t__le32 d_bbsize;\n\t__le32 d_sbsize;\n\tstruct d_partition d_partitions[18];\n};\n\nenum {\n\tLINUX_RAID_PARTITION___2 = 253,\n};\n\nstruct sgi_volume {\n\ts8 name[8];\n\t__be32 block_num;\n\t__be32 num_bytes;\n};\n\nstruct sgi_partition {\n\t__be32 num_blocks;\n\t__be32 first_block;\n\t__be32 type;\n};\n\nstruct sgi_disklabel {\n\t__be32 magic_mushroom;\n\t__be16 root_part_num;\n\t__be16 swap_part_num;\n\ts8 boot_file[16];\n\tu8 _unused0[48];\n\tstruct sgi_volume volume[15];\n\tstruct sgi_partition partitions[16];\n\t__be32 csum;\n\t__be32 _unused1;\n};\n\nenum {\n\tSUN_WHOLE_DISK = 5,\n\tLINUX_RAID_PARTITION___3 = 253,\n};\n\nstruct sun_info {\n\t__be16 id;\n\t__be16 flags;\n};\n\nstruct sun_vtoc {\n\t__be32 version;\n\tchar volume[8];\n\t__be16 nparts;\n\tstruct sun_info infos[8];\n\t__be16 padding;\n\t__be32 bootinfo[3];\n\t__be32 sanity;\n\t__be32 reserved[10];\n\t__be32 timestamp[8];\n};\n\nstruct sun_partition {\n\t__be32 start_cylinder;\n\t__be32 num_sectors;\n};\n\nstruct sun_disklabel {\n\tunsigned char info[128];\n\tstruct sun_vtoc vtoc;\n\t__be32 write_reinstruct;\n\t__be32 read_reinstruct;\n\tunsigned char spare[148];\n\t__be16 rspeed;\n\t__be16 pcylcount;\n\t__be16 sparecyl;\n\t__be16 obs1;\n\t__be16 obs2;\n\t__be16 ilfact;\n\t__be16 ncyl;\n\t__be16 nacyl;\n\t__be16 ntrks;\n\t__be16 nsect;\n\t__be16 obs3;\n\t__be16 obs4;\n\tstruct sun_partition partitions[8];\n\t__be16 magic;\n\t__be16 csum;\n};\n\nstruct _gpt_header {\n\t__le64 signature;\n\t__le32 revision;\n\t__le32 header_size;\n\t__le32 header_crc32;\n\t__le32 reserved1;\n\t__le64 my_lba;\n\t__le64 alternate_lba;\n\t__le64 first_usable_lba;\n\t__le64 last_usable_lba;\n\tefi_guid_t disk_guid;\n\t__le64 partition_entry_lba;\n\t__le32 num_partition_entries;\n\t__le32 sizeof_partition_entry;\n\t__le32 partition_entry_array_crc32;\n} __attribute__((packed));\n\ntypedef struct _gpt_header gpt_header;\n\nstruct _gpt_entry_attributes {\n\tu64 required_to_function: 1;\n\tu64 reserved: 47;\n\tu64 type_guid_specific: 16;\n};\n\ntypedef struct _gpt_entry_attributes gpt_entry_attributes;\n\nstruct _gpt_entry {\n\tefi_guid_t partition_type_guid;\n\tefi_guid_t unique_partition_guid;\n\t__le64 starting_lba;\n\t__le64 ending_lba;\n\tgpt_entry_attributes attributes;\n\t__le16 partition_name[36];\n};\n\ntypedef struct _gpt_entry gpt_entry;\n\nstruct _gpt_mbr_record {\n\tu8 boot_indicator;\n\tu8 start_head;\n\tu8 start_sector;\n\tu8 start_track;\n\tu8 os_type;\n\tu8 end_head;\n\tu8 end_sector;\n\tu8 end_track;\n\t__le32 starting_lba;\n\t__le32 size_in_lba;\n};\n\ntypedef struct _gpt_mbr_record gpt_mbr_record;\n\nstruct _legacy_mbr {\n\tu8 boot_code[440];\n\t__le32 unique_mbr_signature;\n\t__le16 unknown;\n\tgpt_mbr_record partition_record[4];\n\t__le16 signature;\n} __attribute__((packed));\n\ntypedef struct _legacy_mbr legacy_mbr;\n\nstruct d_partition___2 {\n\t__le32 p_res;\n\tu8 p_fstype;\n\tu8 p_res2[3];\n\t__le32 p_offset;\n\t__le32 p_size;\n};\n\nstruct disklabel___2 {\n\tu8 d_reserved[270];\n\tstruct d_partition___2 d_partitions[2];\n\tu8 d_blank[208];\n\t__le16 d_magic;\n} __attribute__((packed));\n\nstruct rq_wait {\n\twait_queue_head_t wait;\n\tatomic_t inflight;\n};\n\nstruct rq_depth {\n\tunsigned int max_depth;\n\tint scale_step;\n\tbool scaled_max;\n\tunsigned int queue_depth;\n\tunsigned int default_depth;\n};\n\ntypedef bool acquire_inflight_cb_t(struct rq_wait *, void *);\n\ntypedef void cleanup_cb_t(struct rq_wait *, void *);\n\nstruct rq_qos_wait_data {\n\tstruct wait_queue_entry wq;\n\tstruct task_struct *task;\n\tstruct rq_wait *rqw;\n\tacquire_inflight_cb_t *cb;\n\tvoid *private_data;\n\tbool got_token;\n};\n\nstruct cdrom_device_ops;\n\nstruct cdrom_device_info {\n\tconst struct cdrom_device_ops *ops;\n\tstruct list_head list;\n\tstruct gendisk *disk;\n\tvoid *handle;\n\tint mask;\n\tint speed;\n\tint capacity;\n\tunsigned int options: 30;\n\tunsigned int mc_flags: 2;\n\tunsigned int vfs_events;\n\tunsigned int ioctl_events;\n\tint use_count;\n\tchar name[20];\n\t__u8 sanyo_slot: 2;\n\t__u8 keeplocked: 1;\n\t__u8 reserved: 5;\n\tint cdda_method;\n\t__u8 last_sense;\n\t__u8 media_written;\n\tshort unsigned int mmc3_profile;\n\tint for_data;\n\tint (*exit)(struct cdrom_device_info *);\n\tint mrw_mode_page;\n};\n\nstruct scsi_sense_hdr {\n\tu8 response_code;\n\tu8 sense_key;\n\tu8 asc;\n\tu8 ascq;\n\tu8 byte4;\n\tu8 byte5;\n\tu8 byte6;\n\tu8 additional_length;\n};\n\nstruct cdrom_msf0 {\n\t__u8 minute;\n\t__u8 second;\n\t__u8 frame;\n};\n\nunion cdrom_addr {\n\tstruct cdrom_msf0 msf;\n\tint lba;\n};\n\nstruct cdrom_multisession {\n\tunion cdrom_addr addr;\n\t__u8 xa_flag;\n\t__u8 addr_format;\n};\n\nstruct cdrom_mcn {\n\t__u8 medium_catalog_number[14];\n};\n\nstruct request_sense;\n\nstruct cdrom_generic_command {\n\tunsigned char cmd[12];\n\tunsigned char *buffer;\n\tunsigned int buflen;\n\tint stat;\n\tstruct request_sense *sense;\n\tunsigned char data_direction;\n\tint quiet;\n\tint timeout;\n\tunion {\n\t\tvoid *reserved[1];\n\t\tvoid *unused;\n\t};\n};\n\nstruct request_sense {\n\t__u8 error_code: 7;\n\t__u8 valid: 1;\n\t__u8 segment_number;\n\t__u8 sense_key: 4;\n\t__u8 reserved2: 1;\n\t__u8 ili: 1;\n\t__u8 reserved1: 2;\n\t__u8 information[4];\n\t__u8 add_sense_len;\n\t__u8 command_info[4];\n\t__u8 asc;\n\t__u8 ascq;\n\t__u8 fruc;\n\t__u8 sks[3];\n\t__u8 asb[46];\n};\n\nstruct packet_command {\n\tunsigned char cmd[12];\n\tunsigned char *buffer;\n\tunsigned int buflen;\n\tint stat;\n\tstruct scsi_sense_hdr *sshdr;\n\tunsigned char data_direction;\n\tint quiet;\n\tint timeout;\n\tvoid *reserved[1];\n};\n\nstruct cdrom_device_ops {\n\tint (*open)(struct cdrom_device_info *, int);\n\tvoid (*release)(struct cdrom_device_info *);\n\tint (*drive_status)(struct cdrom_device_info *, int);\n\tunsigned int (*check_events)(struct cdrom_device_info *, unsigned int, int);\n\tint (*tray_move)(struct cdrom_device_info *, int);\n\tint (*lock_door)(struct cdrom_device_info *, int);\n\tint (*select_speed)(struct cdrom_device_info *, int);\n\tint (*select_disc)(struct cdrom_device_info *, int);\n\tint (*get_last_session)(struct cdrom_device_info *, struct cdrom_multisession *);\n\tint (*get_mcn)(struct cdrom_device_info *, struct cdrom_mcn *);\n\tint (*reset)(struct cdrom_device_info *);\n\tint (*audio_ioctl)(struct cdrom_device_info *, unsigned int, void *);\n\tconst int capability;\n\tint (*generic_packet)(struct cdrom_device_info *, struct packet_command *);\n};\n\nstruct scsi_ioctl_command {\n\tunsigned int inlen;\n\tunsigned int outlen;\n\tunsigned char data[0];\n};\n\nenum scsi_device_event {\n\tSDEV_EVT_MEDIA_CHANGE = 1,\n\tSDEV_EVT_INQUIRY_CHANGE_REPORTED = 2,\n\tSDEV_EVT_CAPACITY_CHANGE_REPORTED = 3,\n\tSDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED = 4,\n\tSDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED = 5,\n\tSDEV_EVT_LUN_CHANGE_REPORTED = 6,\n\tSDEV_EVT_ALUA_STATE_CHANGE_REPORTED = 7,\n\tSDEV_EVT_POWER_ON_RESET_OCCURRED = 8,\n\tSDEV_EVT_FIRST = 1,\n\tSDEV_EVT_LAST = 8,\n\tSDEV_EVT_MAXBITS = 9,\n};\n\nstruct scsi_request {\n\tunsigned char __cmd[16];\n\tunsigned char *cmd;\n\tshort unsigned int cmd_len;\n\tint result;\n\tunsigned int sense_len;\n\tunsigned int resid_len;\n\tint retries;\n\tvoid *sense;\n};\n\nstruct sg_io_hdr {\n\tint interface_id;\n\tint dxfer_direction;\n\tunsigned char cmd_len;\n\tunsigned char mx_sb_len;\n\tshort unsigned int iovec_count;\n\tunsigned int dxfer_len;\n\tvoid *dxferp;\n\tunsigned char *cmdp;\n\tvoid *sbp;\n\tunsigned int timeout;\n\tunsigned int flags;\n\tint pack_id;\n\tvoid *usr_ptr;\n\tunsigned char status;\n\tunsigned char masked_status;\n\tunsigned char msg_status;\n\tunsigned char sb_len_wr;\n\tshort unsigned int host_status;\n\tshort unsigned int driver_status;\n\tint resid;\n\tunsigned int duration;\n\tunsigned int info;\n};\n\nstruct compat_sg_io_hdr {\n\tcompat_int_t interface_id;\n\tcompat_int_t dxfer_direction;\n\tunsigned char cmd_len;\n\tunsigned char mx_sb_len;\n\tshort unsigned int iovec_count;\n\tcompat_uint_t dxfer_len;\n\tcompat_uint_t dxferp;\n\tcompat_uptr_t cmdp;\n\tcompat_uptr_t sbp;\n\tcompat_uint_t timeout;\n\tcompat_uint_t flags;\n\tcompat_int_t pack_id;\n\tcompat_uptr_t usr_ptr;\n\tunsigned char status;\n\tunsigned char masked_status;\n\tunsigned char msg_status;\n\tunsigned char sb_len_wr;\n\tshort unsigned int host_status;\n\tshort unsigned int driver_status;\n\tcompat_int_t resid;\n\tcompat_uint_t duration;\n\tcompat_uint_t info;\n};\n\nstruct blk_cmd_filter {\n\tlong unsigned int read_ok[4];\n\tlong unsigned int write_ok[4];\n};\n\nstruct compat_cdrom_generic_command {\n\tunsigned char cmd[12];\n\tcompat_caddr_t buffer;\n\tcompat_uint_t buflen;\n\tcompat_int_t stat;\n\tcompat_caddr_t sense;\n\tunsigned char data_direction;\n\tunsigned char pad[3];\n\tcompat_int_t quiet;\n\tcompat_int_t timeout;\n\tcompat_caddr_t unused;\n};\n\nenum {\n\tOMAX_SB_LEN = 16,\n};\n\nstruct bsg_device {\n\tstruct request_queue *queue;\n\tspinlock_t lock;\n\tstruct hlist_node dev_list;\n\trefcount_t ref_count;\n\tchar name[20];\n\tint max_queue;\n};\n\nstruct bsg_job;\n\ntypedef int bsg_job_fn(struct bsg_job *);\n\nstruct bsg_buffer {\n\tunsigned int payload_len;\n\tint sg_cnt;\n\tstruct scatterlist *sg_list;\n};\n\nstruct bsg_job {\n\tstruct device *dev;\n\tstruct kref kref;\n\tunsigned int timeout;\n\tvoid *request;\n\tvoid *reply;\n\tunsigned int request_len;\n\tunsigned int reply_len;\n\tstruct bsg_buffer request_payload;\n\tstruct bsg_buffer reply_payload;\n\tint result;\n\tunsigned int reply_payload_rcv_len;\n\tstruct request *bidi_rq;\n\tstruct bio *bidi_bio;\n\tvoid *dd_data;\n};\n\ntypedef enum blk_eh_timer_return bsg_timeout_fn(struct request *);\n\nstruct bsg_set {\n\tstruct blk_mq_tag_set tag_set;\n\tbsg_job_fn *job_fn;\n\tbsg_timeout_fn *timeout_fn;\n};\n\ntypedef struct blkcg_policy_data *blkcg_pol_alloc_cpd_fn(gfp_t);\n\ntypedef void blkcg_pol_init_cpd_fn(struct blkcg_policy_data *);\n\ntypedef void blkcg_pol_free_cpd_fn(struct blkcg_policy_data *);\n\ntypedef void blkcg_pol_bind_cpd_fn(struct blkcg_policy_data *);\n\ntypedef struct blkg_policy_data *blkcg_pol_alloc_pd_fn(gfp_t, struct request_queue *, struct blkcg *);\n\ntypedef void blkcg_pol_init_pd_fn(struct blkg_policy_data *);\n\ntypedef void blkcg_pol_online_pd_fn(struct blkg_policy_data *);\n\ntypedef void blkcg_pol_offline_pd_fn(struct blkg_policy_data *);\n\ntypedef void blkcg_pol_free_pd_fn(struct blkg_policy_data *);\n\ntypedef void blkcg_pol_reset_pd_stats_fn(struct blkg_policy_data *);\n\ntypedef size_t blkcg_pol_stat_pd_fn(struct blkg_policy_data *, char *, size_t);\n\nstruct blkcg_policy {\n\tint plid;\n\tstruct cftype *dfl_cftypes;\n\tstruct cftype *legacy_cftypes;\n\tblkcg_pol_alloc_cpd_fn *cpd_alloc_fn;\n\tblkcg_pol_init_cpd_fn *cpd_init_fn;\n\tblkcg_pol_free_cpd_fn *cpd_free_fn;\n\tblkcg_pol_bind_cpd_fn *cpd_bind_fn;\n\tblkcg_pol_alloc_pd_fn *pd_alloc_fn;\n\tblkcg_pol_init_pd_fn *pd_init_fn;\n\tblkcg_pol_online_pd_fn *pd_online_fn;\n\tblkcg_pol_offline_pd_fn *pd_offline_fn;\n\tblkcg_pol_free_pd_fn *pd_free_fn;\n\tblkcg_pol_reset_pd_stats_fn *pd_reset_stats_fn;\n\tblkcg_pol_stat_pd_fn *pd_stat_fn;\n};\n\nstruct blkg_conf_ctx {\n\tstruct block_device *bdev;\n\tstruct blkcg_gq *blkg;\n\tchar *body;\n};\n\nenum blkg_rwstat_type {\n\tBLKG_RWSTAT_READ = 0,\n\tBLKG_RWSTAT_WRITE = 1,\n\tBLKG_RWSTAT_SYNC = 2,\n\tBLKG_RWSTAT_ASYNC = 3,\n\tBLKG_RWSTAT_DISCARD = 4,\n\tBLKG_RWSTAT_NR = 5,\n\tBLKG_RWSTAT_TOTAL = 5,\n};\n\nstruct blkg_rwstat {\n\tstruct percpu_counter cpu_cnt[5];\n\tatomic64_t aux_cnt[5];\n};\n\nstruct blkg_rwstat_sample {\n\tu64 cnt[5];\n};\n\nstruct throtl_service_queue {\n\tstruct throtl_service_queue *parent_sq;\n\tstruct list_head queued[2];\n\tunsigned int nr_queued[2];\n\tstruct rb_root_cached pending_tree;\n\tunsigned int nr_pending;\n\tlong unsigned int first_pending_disptime;\n\tstruct timer_list pending_timer;\n};\n\nstruct latency_bucket {\n\tlong unsigned int total_latency;\n\tint samples;\n};\n\nstruct avg_latency_bucket {\n\tlong unsigned int latency;\n\tbool valid;\n};\n\nstruct throtl_data {\n\tstruct throtl_service_queue service_queue;\n\tstruct request_queue *queue;\n\tunsigned int nr_queued[2];\n\tunsigned int throtl_slice;\n\tstruct work_struct dispatch_work;\n\tunsigned int limit_index;\n\tbool limit_valid[2];\n\tlong unsigned int low_upgrade_time;\n\tlong unsigned int low_downgrade_time;\n\tunsigned int scale;\n\tstruct latency_bucket tmp_buckets[18];\n\tstruct avg_latency_bucket avg_buckets[18];\n\tstruct latency_bucket *latency_buckets[2];\n\tlong unsigned int last_calculate_time;\n\tlong unsigned int filtered_latency;\n\tbool track_bio_latency;\n};\n\nstruct throtl_grp;\n\nstruct throtl_qnode {\n\tstruct list_head node;\n\tstruct bio_list bios;\n\tstruct throtl_grp *tg;\n};\n\nstruct throtl_grp {\n\tstruct blkg_policy_data pd;\n\tstruct rb_node rb_node;\n\tstruct throtl_data *td;\n\tstruct throtl_service_queue service_queue;\n\tstruct throtl_qnode qnode_on_self[2];\n\tstruct throtl_qnode qnode_on_parent[2];\n\tlong unsigned int disptime;\n\tunsigned int flags;\n\tbool has_rules[2];\n\tuint64_t bps[4];\n\tuint64_t bps_conf[4];\n\tunsigned int iops[4];\n\tunsigned int iops_conf[4];\n\tuint64_t bytes_disp[2];\n\tunsigned int io_disp[2];\n\tlong unsigned int last_low_overflow_time[2];\n\tuint64_t last_bytes_disp[2];\n\tunsigned int last_io_disp[2];\n\tlong unsigned int last_check_time;\n\tlong unsigned int latency_target;\n\tlong unsigned int latency_target_conf;\n\tlong unsigned int slice_start[2];\n\tlong unsigned int slice_end[2];\n\tlong unsigned int last_finish_time;\n\tlong unsigned int checked_last_finish_time;\n\tlong unsigned int avg_idletime;\n\tlong unsigned int idletime_threshold;\n\tlong unsigned int idletime_threshold_conf;\n\tunsigned int bio_cnt;\n\tunsigned int bad_bio_cnt;\n\tlong unsigned int bio_cnt_reset_time;\n\tstruct blkg_rwstat stat_bytes;\n\tstruct blkg_rwstat stat_ios;\n};\n\nenum tg_state_flags {\n\tTHROTL_TG_PENDING = 1,\n\tTHROTL_TG_WAS_EMPTY = 2,\n};\n\nenum {\n\tLIMIT_LOW = 0,\n\tLIMIT_MAX = 1,\n\tLIMIT_CNT = 2,\n};\n\nstruct blk_iolatency {\n\tstruct rq_qos rqos;\n\tstruct timer_list timer;\n\tatomic_t enabled;\n};\n\nstruct iolatency_grp;\n\nstruct child_latency_info {\n\tspinlock_t lock;\n\tu64 last_scale_event;\n\tu64 scale_lat;\n\tu64 nr_samples;\n\tstruct iolatency_grp *scale_grp;\n\tatomic_t scale_cookie;\n};\n\nstruct percentile_stats {\n\tu64 total;\n\tu64 missed;\n};\n\nstruct latency_stat {\n\tunion {\n\t\tstruct percentile_stats ps;\n\t\tstruct blk_rq_stat rqs;\n\t};\n};\n\nstruct iolatency_grp {\n\tstruct blkg_policy_data pd;\n\tstruct latency_stat *stats;\n\tstruct latency_stat cur_stat;\n\tstruct blk_iolatency *blkiolat;\n\tstruct rq_depth rq_depth;\n\tstruct rq_wait rq_wait;\n\tatomic64_t window_start;\n\tatomic_t scale_cookie;\n\tu64 min_lat_nsec;\n\tu64 cur_win_nsec;\n\tu64 lat_avg;\n\tu64 nr_samples;\n\tbool ssd;\n\tstruct child_latency_info child_lat;\n};\n\nenum {\n\tMILLION = 1000000,\n\tMIN_PERIOD = 1000,\n\tMAX_PERIOD = 1000000,\n\tMARGIN_MIN_PCT = 10,\n\tMARGIN_LOW_PCT = 20,\n\tMARGIN_TARGET_PCT = 50,\n\tINUSE_ADJ_STEP_PCT = 25,\n\tTIMER_SLACK_PCT = 1,\n\tWEIGHT_ONE = 65536,\n\tVTIME_PER_SEC_SHIFT = 37,\n\tVTIME_PER_SEC = 0,\n\tVTIME_PER_USEC = 137438,\n\tVTIME_PER_NSEC = 137,\n\tVRATE_MIN_PPM = 10000,\n\tVRATE_MAX_PPM = 100000000,\n\tVRATE_MIN = 1374,\n\tVRATE_CLAMP_ADJ_PCT = 4,\n\tRQ_WAIT_BUSY_PCT = 5,\n\tUNBUSY_THR_PCT = 75,\n\tMIN_DELAY_THR_PCT = 500,\n\tMAX_DELAY_THR_PCT = 25000,\n\tMIN_DELAY = 250,\n\tMAX_DELAY = 250000,\n\tDFGV_USAGE_PCT = 50,\n\tDFGV_PERIOD = 100000,\n\tMAX_LAGGING_PERIODS = 10,\n\tAUTOP_CYCLE_NSEC = 1410065408,\n\tIOC_PAGE_SHIFT = 12,\n\tIOC_PAGE_SIZE = 4096,\n\tIOC_SECT_TO_PAGE_SHIFT = 3,\n\tLCOEF_RANDIO_PAGES = 4096,\n};\n\nenum ioc_running {\n\tIOC_IDLE = 0,\n\tIOC_RUNNING = 1,\n\tIOC_STOP = 2,\n};\n\nenum {\n\tQOS_ENABLE = 0,\n\tQOS_CTRL = 1,\n\tNR_QOS_CTRL_PARAMS = 2,\n};\n\nenum {\n\tQOS_RPPM = 0,\n\tQOS_RLAT = 1,\n\tQOS_WPPM = 2,\n\tQOS_WLAT = 3,\n\tQOS_MIN = 4,\n\tQOS_MAX = 5,\n\tNR_QOS_PARAMS = 6,\n};\n\nenum {\n\tCOST_CTRL = 0,\n\tCOST_MODEL = 1,\n\tNR_COST_CTRL_PARAMS = 2,\n};\n\nenum {\n\tI_LCOEF_RBPS = 0,\n\tI_LCOEF_RSEQIOPS = 1,\n\tI_LCOEF_RRANDIOPS = 2,\n\tI_LCOEF_WBPS = 3,\n\tI_LCOEF_WSEQIOPS = 4,\n\tI_LCOEF_WRANDIOPS = 5,\n\tNR_I_LCOEFS = 6,\n};\n\nenum {\n\tLCOEF_RPAGE = 0,\n\tLCOEF_RSEQIO = 1,\n\tLCOEF_RRANDIO = 2,\n\tLCOEF_WPAGE = 3,\n\tLCOEF_WSEQIO = 4,\n\tLCOEF_WRANDIO = 5,\n\tNR_LCOEFS = 6,\n};\n\nenum {\n\tAUTOP_INVALID = 0,\n\tAUTOP_HDD = 1,\n\tAUTOP_SSD_QD1 = 2,\n\tAUTOP_SSD_DFL = 3,\n\tAUTOP_SSD_FAST = 4,\n};\n\nstruct ioc_params {\n\tu32 qos[6];\n\tu64 i_lcoefs[6];\n\tu64 lcoefs[6];\n\tu32 too_fast_vrate_pct;\n\tu32 too_slow_vrate_pct;\n};\n\nstruct ioc_margins {\n\ts64 min;\n\ts64 low;\n\ts64 target;\n};\n\nstruct ioc_missed {\n\tlocal_t nr_met;\n\tlocal_t nr_missed;\n\tu32 last_met;\n\tu32 last_missed;\n};\n\nstruct ioc_pcpu_stat {\n\tstruct ioc_missed missed[2];\n\tlocal64_t rq_wait_ns;\n\tu64 last_rq_wait_ns;\n};\n\nstruct ioc {\n\tstruct rq_qos rqos;\n\tbool enabled;\n\tstruct ioc_params params;\n\tstruct ioc_margins margins;\n\tu32 period_us;\n\tu32 timer_slack_ns;\n\tu64 vrate_min;\n\tu64 vrate_max;\n\tspinlock_t lock;\n\tstruct timer_list timer;\n\tstruct list_head active_iocgs;\n\tstruct ioc_pcpu_stat *pcpu_stat;\n\tenum ioc_running running;\n\tatomic64_t vtime_rate;\n\tu64 vtime_base_rate;\n\ts64 vtime_err;\n\tseqcount_spinlock_t period_seqcount;\n\tu64 period_at;\n\tu64 period_at_vtime;\n\tatomic64_t cur_period;\n\tint busy_level;\n\tbool weights_updated;\n\tatomic_t hweight_gen;\n\tu64 dfgv_period_at;\n\tu64 dfgv_period_rem;\n\tu64 dfgv_usage_us_sum;\n\tu64 autop_too_fast_at;\n\tu64 autop_too_slow_at;\n\tint autop_idx;\n\tbool user_qos_params: 1;\n\tbool user_cost_model: 1;\n};\n\nstruct iocg_pcpu_stat {\n\tlocal64_t abs_vusage;\n};\n\nstruct iocg_stat {\n\tu64 usage_us;\n\tu64 wait_us;\n\tu64 indebt_us;\n\tu64 indelay_us;\n};\n\nstruct ioc_gq {\n\tstruct blkg_policy_data pd;\n\tstruct ioc *ioc;\n\tu32 cfg_weight;\n\tu32 weight;\n\tu32 active;\n\tu32 inuse;\n\tu32 last_inuse;\n\ts64 saved_margin;\n\tsector_t cursor;\n\tatomic64_t vtime;\n\tatomic64_t done_vtime;\n\tu64 abs_vdebt;\n\tu64 delay;\n\tu64 delay_at;\n\tatomic64_t active_period;\n\tstruct list_head active_list;\n\tu64 child_active_sum;\n\tu64 child_inuse_sum;\n\tu64 child_adjusted_sum;\n\tint hweight_gen;\n\tu32 hweight_active;\n\tu32 hweight_inuse;\n\tu32 hweight_donating;\n\tu32 hweight_after_donation;\n\tstruct list_head walk_list;\n\tstruct list_head surplus_list;\n\tstruct wait_queue_head waitq;\n\tstruct hrtimer waitq_timer;\n\tu64 activated_at;\n\tstruct iocg_pcpu_stat *pcpu_stat;\n\tstruct iocg_stat local_stat;\n\tstruct iocg_stat desc_stat;\n\tstruct iocg_stat last_stat;\n\tu64 last_stat_abs_vusage;\n\tu64 usage_delta_us;\n\tu64 wait_since;\n\tu64 indebt_since;\n\tu64 indelay_since;\n\tint level;\n\tstruct ioc_gq *ancestors[0];\n};\n\nstruct ioc_cgrp {\n\tstruct blkcg_policy_data cpd;\n\tunsigned int dfl_weight;\n};\n\nstruct ioc_now {\n\tu64 now_ns;\n\tu64 now;\n\tu64 vnow;\n\tu64 vrate;\n};\n\nstruct iocg_wait {\n\tstruct wait_queue_entry wait;\n\tstruct bio *bio;\n\tu64 abs_cost;\n\tbool committed;\n};\n\nstruct iocg_wake_ctx {\n\tstruct ioc_gq *iocg;\n\tu32 hw_inuse;\n\ts64 vbudget;\n};\n\nstruct trace_event_raw_iocost_iocg_state {\n\tstruct trace_entry ent;\n\tu32 __data_loc_devname;\n\tu32 __data_loc_cgroup;\n\tu64 now;\n\tu64 vnow;\n\tu64 vrate;\n\tu64 last_period;\n\tu64 cur_period;\n\tu64 vtime;\n\tu32 weight;\n\tu32 inuse;\n\tu64 hweight_active;\n\tu64 hweight_inuse;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_iocg_inuse_update {\n\tstruct trace_entry ent;\n\tu32 __data_loc_devname;\n\tu32 __data_loc_cgroup;\n\tu64 now;\n\tu32 old_inuse;\n\tu32 new_inuse;\n\tu64 old_hweight_inuse;\n\tu64 new_hweight_inuse;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_iocost_ioc_vrate_adj {\n\tstruct trace_entry ent;\n\tu32 __data_loc_devname;\n\tu64 old_vrate;\n\tu64 new_vrate;\n\tint busy_level;\n\tu32 read_missed_ppm;\n\tu32 write_missed_ppm;\n\tu32 rq_wait_pct;\n\tint nr_lagging;\n\tint nr_shortages;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_iocost_iocg_forgive_debt {\n\tstruct trace_entry ent;\n\tu32 __data_loc_devname;\n\tu32 __data_loc_cgroup;\n\tu64 now;\n\tu64 vnow;\n\tu32 usage_pct;\n\tu64 old_debt;\n\tu64 new_debt;\n\tu64 old_delay;\n\tu64 new_delay;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_iocost_iocg_state {\n\tu32 devname;\n\tu32 cgroup;\n};\n\nstruct trace_event_data_offsets_iocg_inuse_update {\n\tu32 devname;\n\tu32 cgroup;\n};\n\nstruct trace_event_data_offsets_iocost_ioc_vrate_adj {\n\tu32 devname;\n};\n\nstruct trace_event_data_offsets_iocost_iocg_forgive_debt {\n\tu32 devname;\n\tu32 cgroup;\n};\n\ntypedef void (*btf_trace_iocost_iocg_activate)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);\n\ntypedef void (*btf_trace_iocost_iocg_idle)(void *, struct ioc_gq *, const char *, struct ioc_now *, u64, u64, u64);\n\ntypedef void (*btf_trace_iocost_inuse_shortage)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);\n\ntypedef void (*btf_trace_iocost_inuse_transfer)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);\n\ntypedef void (*btf_trace_iocost_inuse_adjust)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u32, u64, u64);\n\ntypedef void (*btf_trace_iocost_ioc_vrate_adj)(void *, struct ioc *, u64, u32 *, u32, int, int);\n\ntypedef void (*btf_trace_iocost_iocg_forgive_debt)(void *, struct ioc_gq *, const char *, struct ioc_now *, u32, u64, u64, u64, u64);\n\nstruct deadline_data {\n\tstruct rb_root sort_list[2];\n\tstruct list_head fifo_list[2];\n\tstruct request *next_rq[2];\n\tunsigned int batching;\n\tunsigned int starved;\n\tint fifo_expire[2];\n\tint fifo_batch;\n\tint writes_starved;\n\tint front_merges;\n\tspinlock_t lock;\n\tspinlock_t zone_lock;\n\tstruct list_head dispatch;\n};\n\nstruct trace_event_raw_kyber_latency {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tchar domain[16];\n\tchar type[8];\n\tu8 percentile;\n\tu8 numerator;\n\tu8 denominator;\n\tunsigned int samples;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_kyber_adjust {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tchar domain[16];\n\tunsigned int depth;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_kyber_throttled {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tchar domain[16];\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_kyber_latency {};\n\nstruct trace_event_data_offsets_kyber_adjust {};\n\nstruct trace_event_data_offsets_kyber_throttled {};\n\ntypedef void (*btf_trace_kyber_latency)(void *, struct request_queue *, const char *, const char *, unsigned int, unsigned int, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_kyber_adjust)(void *, struct request_queue *, const char *, unsigned int);\n\ntypedef void (*btf_trace_kyber_throttled)(void *, struct request_queue *, const char *);\n\nenum {\n\tKYBER_READ = 0,\n\tKYBER_WRITE = 1,\n\tKYBER_DISCARD = 2,\n\tKYBER_OTHER = 3,\n\tKYBER_NUM_DOMAINS = 4,\n};\n\nenum {\n\tKYBER_ASYNC_PERCENT = 75,\n};\n\nenum {\n\tKYBER_LATENCY_SHIFT = 2,\n\tKYBER_GOOD_BUCKETS = 4,\n\tKYBER_LATENCY_BUCKETS = 8,\n};\n\nenum {\n\tKYBER_TOTAL_LATENCY = 0,\n\tKYBER_IO_LATENCY = 1,\n};\n\nstruct kyber_cpu_latency {\n\tatomic_t buckets[48];\n};\n\nstruct kyber_ctx_queue {\n\tspinlock_t lock;\n\tstruct list_head rq_list[4];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct kyber_queue_data {\n\tstruct request_queue *q;\n\tstruct sbitmap_queue domain_tokens[4];\n\tunsigned int async_depth;\n\tstruct kyber_cpu_latency *cpu_latency;\n\tstruct timer_list timer;\n\tunsigned int latency_buckets[48];\n\tlong unsigned int latency_timeout[3];\n\tint domain_p99[3];\n\tu64 latency_targets[3];\n};\n\nstruct kyber_hctx_data {\n\tspinlock_t lock;\n\tstruct list_head rqs[4];\n\tunsigned int cur_domain;\n\tunsigned int batching;\n\tstruct kyber_ctx_queue *kcqs;\n\tstruct sbitmap kcq_map[4];\n\tstruct sbq_wait domain_wait[4];\n\tstruct sbq_wait_state *domain_ws[4];\n\tatomic_t wait_index[4];\n};\n\nstruct flush_kcq_data {\n\tstruct kyber_hctx_data *khd;\n\tunsigned int sched_domain;\n\tstruct list_head *list;\n};\n\nstruct bfq_entity;\n\nstruct bfq_service_tree {\n\tstruct rb_root active;\n\tstruct rb_root idle;\n\tstruct bfq_entity *first_idle;\n\tstruct bfq_entity *last_idle;\n\tu64 vtime;\n\tlong unsigned int wsum;\n};\n\nstruct bfq_sched_data;\n\nstruct bfq_entity {\n\tstruct rb_node rb_node;\n\tbool on_st_or_in_serv;\n\tu64 start;\n\tu64 finish;\n\tstruct rb_root *tree;\n\tu64 min_start;\n\tint service;\n\tint budget;\n\tint dev_weight;\n\tint weight;\n\tint new_weight;\n\tint orig_weight;\n\tstruct bfq_entity *parent;\n\tstruct bfq_sched_data *my_sched_data;\n\tstruct bfq_sched_data *sched_data;\n\tint prio_changed;\n\tbool in_groups_with_pending_reqs;\n};\n\nstruct bfq_sched_data {\n\tstruct bfq_entity *in_service_entity;\n\tstruct bfq_entity *next_in_service;\n\tstruct bfq_service_tree service_tree[3];\n\tlong unsigned int bfq_class_idle_last_service;\n};\n\nstruct bfq_weight_counter {\n\tunsigned int weight;\n\tunsigned int num_active;\n\tstruct rb_node weights_node;\n};\n\nstruct bfq_ttime {\n\tu64 last_end_request;\n\tu64 ttime_total;\n\tlong unsigned int ttime_samples;\n\tu64 ttime_mean;\n};\n\nstruct bfq_data;\n\nstruct bfq_io_cq;\n\nstruct bfq_queue {\n\tint ref;\n\tstruct bfq_data *bfqd;\n\tshort unsigned int ioprio;\n\tshort unsigned int ioprio_class;\n\tshort unsigned int new_ioprio;\n\tshort unsigned int new_ioprio_class;\n\tu64 last_serv_time_ns;\n\tunsigned int inject_limit;\n\tlong unsigned int decrease_time_jif;\n\tstruct bfq_queue *new_bfqq;\n\tstruct rb_node pos_node;\n\tstruct rb_root *pos_root;\n\tstruct rb_root sort_list;\n\tstruct request *next_rq;\n\tint queued[2];\n\tint allocated;\n\tint meta_pending;\n\tstruct list_head fifo;\n\tstruct bfq_entity entity;\n\tstruct bfq_weight_counter *weight_counter;\n\tint max_budget;\n\tlong unsigned int budget_timeout;\n\tint dispatched;\n\tlong unsigned int flags;\n\tstruct list_head bfqq_list;\n\tstruct bfq_ttime ttime;\n\tu32 seek_history;\n\tstruct hlist_node burst_list_node;\n\tsector_t last_request_pos;\n\tunsigned int requests_within_timer;\n\tpid_t pid;\n\tstruct bfq_io_cq *bic;\n\tlong unsigned int wr_cur_max_time;\n\tlong unsigned int soft_rt_next_start;\n\tlong unsigned int last_wr_start_finish;\n\tunsigned int wr_coeff;\n\tlong unsigned int last_idle_bklogged;\n\tlong unsigned int service_from_backlogged;\n\tlong unsigned int service_from_wr;\n\tlong unsigned int wr_start_at_switch_to_srt;\n\tlong unsigned int split_time;\n\tlong unsigned int first_IO_time;\n\tu32 max_service_rate;\n\tstruct bfq_queue *waker_bfqq;\n\tstruct hlist_node woken_list_node;\n\tstruct hlist_head woken_list;\n};\n\nstruct bfq_group;\n\nstruct bfq_data {\n\tstruct request_queue *queue;\n\tstruct list_head dispatch;\n\tstruct bfq_group *root_group;\n\tstruct rb_root_cached queue_weights_tree;\n\tunsigned int num_groups_with_pending_reqs;\n\tunsigned int busy_queues[3];\n\tint wr_busy_queues;\n\tint queued;\n\tint rq_in_driver;\n\tbool nonrot_with_queueing;\n\tint max_rq_in_driver;\n\tint hw_tag_samples;\n\tint hw_tag;\n\tint budgets_assigned;\n\tstruct hrtimer idle_slice_timer;\n\tstruct bfq_queue *in_service_queue;\n\tsector_t last_position;\n\tsector_t in_serv_last_pos;\n\tu64 last_completion;\n\tstruct bfq_queue *last_completed_rq_bfqq;\n\tu64 last_empty_occupied_ns;\n\tbool wait_dispatch;\n\tstruct request *waited_rq;\n\tbool rqs_injected;\n\tu64 first_dispatch;\n\tu64 last_dispatch;\n\tktime_t last_budget_start;\n\tktime_t last_idling_start;\n\tlong unsigned int last_idling_start_jiffies;\n\tint peak_rate_samples;\n\tu32 sequential_samples;\n\tu64 tot_sectors_dispatched;\n\tu32 last_rq_max_size;\n\tu64 delta_from_first;\n\tu32 peak_rate;\n\tint bfq_max_budget;\n\tstruct list_head active_list;\n\tstruct list_head idle_list;\n\tu64 bfq_fifo_expire[2];\n\tunsigned int bfq_back_penalty;\n\tunsigned int bfq_back_max;\n\tu32 bfq_slice_idle;\n\tint bfq_user_max_budget;\n\tunsigned int bfq_timeout;\n\tunsigned int bfq_requests_within_timer;\n\tbool strict_guarantees;\n\tlong unsigned int last_ins_in_burst;\n\tlong unsigned int bfq_burst_interval;\n\tint burst_size;\n\tstruct bfq_entity *burst_parent_entity;\n\tlong unsigned int bfq_large_burst_thresh;\n\tbool large_burst;\n\tstruct hlist_head burst_list;\n\tbool low_latency;\n\tunsigned int bfq_wr_coeff;\n\tunsigned int bfq_wr_max_time;\n\tunsigned int bfq_wr_rt_max_time;\n\tunsigned int bfq_wr_min_idle_time;\n\tlong unsigned int bfq_wr_min_inter_arr_async;\n\tunsigned int bfq_wr_max_softrt_rate;\n\tu64 rate_dur_prod;\n\tstruct bfq_queue oom_bfqq;\n\tspinlock_t lock;\n\tstruct bfq_io_cq *bio_bic;\n\tstruct bfq_queue *bio_bfqq;\n\tunsigned int word_depths[4];\n};\n\nstruct bfq_io_cq {\n\tstruct io_cq icq;\n\tstruct bfq_queue *bfqq[2];\n\tint ioprio;\n\tuint64_t blkcg_serial_nr;\n\tbool saved_has_short_ttime;\n\tbool saved_IO_bound;\n\tbool saved_in_large_burst;\n\tbool was_in_burst_list;\n\tunsigned int saved_weight;\n\tlong unsigned int saved_wr_coeff;\n\tlong unsigned int saved_last_wr_start_finish;\n\tlong unsigned int saved_wr_start_at_switch_to_srt;\n\tunsigned int saved_wr_cur_max_time;\n\tstruct bfq_ttime saved_ttime;\n};\n\nstruct bfqg_stats {\n\tstruct blkg_rwstat bytes;\n\tstruct blkg_rwstat ios;\n};\n\nstruct bfq_group {\n\tstruct blkg_policy_data pd;\n\tchar blkg_path[128];\n\tint ref;\n\tstruct bfq_entity entity;\n\tstruct bfq_sched_data sched_data;\n\tvoid *bfqd;\n\tstruct bfq_queue *async_bfqq[16];\n\tstruct bfq_queue *async_idle_bfqq;\n\tstruct bfq_entity *my_entity;\n\tint active_entities;\n\tstruct rb_root rq_pos_tree;\n\tstruct bfqg_stats stats;\n};\n\nenum bfqq_state_flags {\n\tBFQQF_just_created = 0,\n\tBFQQF_busy = 1,\n\tBFQQF_wait_request = 2,\n\tBFQQF_non_blocking_wait_rq = 3,\n\tBFQQF_fifo_expire = 4,\n\tBFQQF_has_short_ttime = 5,\n\tBFQQF_sync = 6,\n\tBFQQF_IO_bound = 7,\n\tBFQQF_in_large_burst = 8,\n\tBFQQF_softrt_update = 9,\n\tBFQQF_coop = 10,\n\tBFQQF_split_coop = 11,\n\tBFQQF_has_waker = 12,\n};\n\nenum bfqq_expiration {\n\tBFQQE_TOO_IDLE = 0,\n\tBFQQE_BUDGET_TIMEOUT = 1,\n\tBFQQE_BUDGET_EXHAUSTED = 2,\n\tBFQQE_NO_MORE_REQUESTS = 3,\n\tBFQQE_PREEMPTED = 4,\n};\n\nstruct bfq_group_data {\n\tstruct blkcg_policy_data pd;\n\tunsigned int weight;\n};\n\nenum bip_flags {\n\tBIP_BLOCK_INTEGRITY = 1,\n\tBIP_MAPPED_INTEGRITY = 2,\n\tBIP_CTRL_NOCHECK = 4,\n\tBIP_DISK_NOCHECK = 8,\n\tBIP_IP_CHECKSUM = 16,\n};\n\nenum blk_integrity_flags {\n\tBLK_INTEGRITY_VERIFY = 1,\n\tBLK_INTEGRITY_GENERATE = 2,\n\tBLK_INTEGRITY_DEVICE_CAPABLE = 4,\n\tBLK_INTEGRITY_IP_CHECKSUM = 8,\n};\n\nstruct integrity_sysfs_entry {\n\tstruct attribute attr;\n\tssize_t (*show)(struct blk_integrity *, char *);\n\tssize_t (*store)(struct blk_integrity *, const char *, size_t);\n};\n\nenum t10_dif_type {\n\tT10_PI_TYPE0_PROTECTION = 0,\n\tT10_PI_TYPE1_PROTECTION = 1,\n\tT10_PI_TYPE2_PROTECTION = 2,\n\tT10_PI_TYPE3_PROTECTION = 3,\n};\n\nstruct t10_pi_tuple {\n\t__be16 guard_tag;\n\t__be16 app_tag;\n\t__be32 ref_tag;\n};\n\ntypedef __be16 csum_fn(void *, unsigned int);\n\nstruct virtio_device_id {\n\t__u32 device;\n\t__u32 vendor;\n};\n\nstruct virtio_device;\n\nstruct virtqueue {\n\tstruct list_head list;\n\tvoid (*callback)(struct virtqueue *);\n\tconst char *name;\n\tstruct virtio_device *vdev;\n\tunsigned int index;\n\tunsigned int num_free;\n\tvoid *priv;\n};\n\nstruct vringh_config_ops;\n\nstruct virtio_config_ops;\n\nstruct virtio_device {\n\tint index;\n\tbool failed;\n\tbool config_enabled;\n\tbool config_change_pending;\n\tspinlock_t config_lock;\n\tstruct device dev;\n\tstruct virtio_device_id id;\n\tconst struct virtio_config_ops *config;\n\tconst struct vringh_config_ops *vringh_config;\n\tstruct list_head vqs;\n\tu64 features;\n\tvoid *priv;\n};\n\ntypedef void vq_callback_t(struct virtqueue *);\n\nstruct virtio_shm_region;\n\nstruct virtio_config_ops {\n\tvoid (*get)(struct virtio_device *, unsigned int, void *, unsigned int);\n\tvoid (*set)(struct virtio_device *, unsigned int, const void *, unsigned int);\n\tu32 (*generation)(struct virtio_device *);\n\tu8 (*get_status)(struct virtio_device *);\n\tvoid (*set_status)(struct virtio_device *, u8);\n\tvoid (*reset)(struct virtio_device *);\n\tint (*find_vqs)(struct virtio_device *, unsigned int, struct virtqueue **, vq_callback_t **, const char * const *, const bool *, struct irq_affinity *);\n\tvoid (*del_vqs)(struct virtio_device *);\n\tu64 (*get_features)(struct virtio_device *);\n\tint (*finalize_features)(struct virtio_device *);\n\tconst char * (*bus_name)(struct virtio_device *);\n\tint (*set_vq_affinity)(struct virtqueue *, const struct cpumask *);\n\tconst struct cpumask * (*get_vq_affinity)(struct virtio_device *, int);\n\tbool (*get_shm_region)(struct virtio_device *, struct virtio_shm_region *, u8);\n};\n\nstruct virtio_shm_region {\n\tu64 addr;\n\tu64 len;\n};\n\nstruct irq_poll;\n\ntypedef int irq_poll_fn(struct irq_poll *, int);\n\nstruct irq_poll {\n\tstruct list_head list;\n\tlong unsigned int state;\n\tint weight;\n\tirq_poll_fn *poll;\n};\n\nstruct dim_sample {\n\tktime_t time;\n\tu32 pkt_ctr;\n\tu32 byte_ctr;\n\tu16 event_ctr;\n\tu32 comp_ctr;\n};\n\nstruct dim_stats {\n\tint ppms;\n\tint bpms;\n\tint epms;\n\tint cpms;\n\tint cpe_ratio;\n};\n\nstruct dim {\n\tu8 state;\n\tstruct dim_stats prev_stats;\n\tstruct dim_sample start_sample;\n\tstruct dim_sample measuring_sample;\n\tstruct work_struct work;\n\tvoid *priv;\n\tu8 profile_ix;\n\tu8 mode;\n\tu8 tune_state;\n\tu8 steps_right;\n\tu8 steps_left;\n\tu8 tired;\n};\n\nenum rdma_nl_counter_mode {\n\tRDMA_COUNTER_MODE_NONE = 0,\n\tRDMA_COUNTER_MODE_AUTO = 1,\n\tRDMA_COUNTER_MODE_MANUAL = 2,\n\tRDMA_COUNTER_MODE_MAX = 3,\n};\n\nenum rdma_nl_counter_mask {\n\tRDMA_COUNTER_MASK_QP_TYPE = 1,\n\tRDMA_COUNTER_MASK_PID = 2,\n};\n\nenum rdma_restrack_type {\n\tRDMA_RESTRACK_PD = 0,\n\tRDMA_RESTRACK_CQ = 1,\n\tRDMA_RESTRACK_QP = 2,\n\tRDMA_RESTRACK_CM_ID = 3,\n\tRDMA_RESTRACK_MR = 4,\n\tRDMA_RESTRACK_CTX = 5,\n\tRDMA_RESTRACK_COUNTER = 6,\n\tRDMA_RESTRACK_MAX = 7,\n};\n\nstruct rdma_restrack_entry {\n\tbool valid;\n\tu8 no_track: 1;\n\tstruct kref kref;\n\tstruct completion comp;\n\tstruct task_struct *task;\n\tconst char *kern_name;\n\tenum rdma_restrack_type type;\n\tbool user;\n\tu32 id;\n};\n\nstruct rdma_link_ops {\n\tstruct list_head list;\n\tconst char *type;\n\tint (*newlink)(const char *, struct net_device *);\n};\n\nstruct auto_mode_param {\n\tint qp_type;\n};\n\nstruct rdma_counter_mode {\n\tenum rdma_nl_counter_mode mode;\n\tenum rdma_nl_counter_mask mask;\n\tstruct auto_mode_param param;\n};\n\nstruct rdma_hw_stats;\n\nstruct rdma_port_counter {\n\tstruct rdma_counter_mode mode;\n\tstruct rdma_hw_stats *hstats;\n\tunsigned int num_counters;\n\tstruct mutex lock;\n};\n\nstruct rdma_hw_stats {\n\tstruct mutex lock;\n\tlong unsigned int timestamp;\n\tlong unsigned int lifespan;\n\tconst char * const *names;\n\tint num_counters;\n\tu64 value[0];\n};\n\nstruct ib_device;\n\nstruct rdma_counter {\n\tstruct rdma_restrack_entry res;\n\tstruct ib_device *device;\n\tuint32_t id;\n\tstruct kref kref;\n\tstruct rdma_counter_mode mode;\n\tstruct mutex lock;\n\tstruct rdma_hw_stats *stats;\n\tu8 port;\n};\n\nenum rdma_driver_id {\n\tRDMA_DRIVER_UNKNOWN = 0,\n\tRDMA_DRIVER_MLX5 = 1,\n\tRDMA_DRIVER_MLX4 = 2,\n\tRDMA_DRIVER_CXGB3 = 3,\n\tRDMA_DRIVER_CXGB4 = 4,\n\tRDMA_DRIVER_MTHCA = 5,\n\tRDMA_DRIVER_BNXT_RE = 6,\n\tRDMA_DRIVER_OCRDMA = 7,\n\tRDMA_DRIVER_NES = 8,\n\tRDMA_DRIVER_I40IW = 9,\n\tRDMA_DRIVER_VMW_PVRDMA = 10,\n\tRDMA_DRIVER_QEDR = 11,\n\tRDMA_DRIVER_HNS = 12,\n\tRDMA_DRIVER_USNIC = 13,\n\tRDMA_DRIVER_RXE = 14,\n\tRDMA_DRIVER_HFI1 = 15,\n\tRDMA_DRIVER_QIB = 16,\n\tRDMA_DRIVER_EFA = 17,\n\tRDMA_DRIVER_SIW = 18,\n};\n\nenum ib_cq_notify_flags {\n\tIB_CQ_SOLICITED = 1,\n\tIB_CQ_NEXT_COMP = 2,\n\tIB_CQ_SOLICITED_MASK = 3,\n\tIB_CQ_REPORT_MISSED_EVENTS = 4,\n};\n\nstruct ib_mad;\n\nenum rdma_link_layer {\n\tIB_LINK_LAYER_UNSPECIFIED = 0,\n\tIB_LINK_LAYER_INFINIBAND = 1,\n\tIB_LINK_LAYER_ETHERNET = 2,\n};\n\nenum rdma_netdev_t {\n\tRDMA_NETDEV_OPA_VNIC = 0,\n\tRDMA_NETDEV_IPOIB = 1,\n};\n\nenum ib_srq_attr_mask {\n\tIB_SRQ_MAX_WR = 1,\n\tIB_SRQ_LIMIT = 2,\n};\n\nenum ib_mr_type {\n\tIB_MR_TYPE_MEM_REG = 0,\n\tIB_MR_TYPE_SG_GAPS = 1,\n\tIB_MR_TYPE_DM = 2,\n\tIB_MR_TYPE_USER = 3,\n\tIB_MR_TYPE_DMA = 4,\n\tIB_MR_TYPE_INTEGRITY = 5,\n};\n\nenum ib_uverbs_advise_mr_advice {\n\tIB_UVERBS_ADVISE_MR_ADVICE_PREFETCH = 0,\n\tIB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_WRITE = 1,\n\tIB_UVERBS_ADVISE_MR_ADVICE_PREFETCH_NO_FAULT = 2,\n};\n\nstruct uverbs_attr_bundle;\n\nstruct rdma_cm_id;\n\nstruct iw_cm_id;\n\nstruct iw_cm_conn_param;\n\nstruct ib_qp;\n\nstruct ib_send_wr;\n\nstruct ib_recv_wr;\n\nstruct ib_cq;\n\nstruct ib_wc;\n\nstruct ib_srq;\n\nstruct ib_grh;\n\nstruct ib_device_attr;\n\nstruct ib_udata;\n\nstruct ib_device_modify;\n\nstruct ib_port_attr;\n\nstruct ib_port_modify;\n\nstruct ib_port_immutable;\n\nstruct rdma_netdev_alloc_params;\n\nunion ib_gid;\n\nstruct ib_gid_attr;\n\nstruct ib_ucontext;\n\nstruct rdma_user_mmap_entry;\n\nstruct ib_pd;\n\nstruct ib_ah;\n\nstruct rdma_ah_init_attr;\n\nstruct rdma_ah_attr;\n\nstruct ib_srq_init_attr;\n\nstruct ib_srq_attr;\n\nstruct ib_qp_init_attr;\n\nstruct ib_qp_attr;\n\nstruct ib_cq_init_attr;\n\nstruct ib_mr;\n\nstruct ib_sge;\n\nstruct ib_mr_status;\n\nstruct ib_mw;\n\nstruct ib_xrcd;\n\nstruct ib_flow;\n\nstruct ib_flow_attr;\n\nstruct ib_flow_action;\n\nstruct ib_flow_action_attrs_esp;\n\nstruct ib_wq;\n\nstruct ib_wq_init_attr;\n\nstruct ib_wq_attr;\n\nstruct ib_rwq_ind_table;\n\nstruct ib_rwq_ind_table_init_attr;\n\nstruct ib_dm;\n\nstruct ib_dm_alloc_attr;\n\nstruct ib_dm_mr_attr;\n\nstruct ib_counters;\n\nstruct ib_counters_read_attr;\n\nstruct ib_device_ops {\n\tstruct module *owner;\n\tenum rdma_driver_id driver_id;\n\tu32 uverbs_abi_ver;\n\tunsigned int uverbs_no_driver_id_binding: 1;\n\tint (*post_send)(struct ib_qp *, const struct ib_send_wr *, const struct ib_send_wr **);\n\tint (*post_recv)(struct ib_qp *, const struct ib_recv_wr *, const struct ib_recv_wr **);\n\tvoid (*drain_rq)(struct ib_qp *);\n\tvoid (*drain_sq)(struct ib_qp *);\n\tint (*poll_cq)(struct ib_cq *, int, struct ib_wc *);\n\tint (*peek_cq)(struct ib_cq *, int);\n\tint (*req_notify_cq)(struct ib_cq *, enum ib_cq_notify_flags);\n\tint (*req_ncomp_notif)(struct ib_cq *, int);\n\tint (*post_srq_recv)(struct ib_srq *, const struct ib_recv_wr *, const struct ib_recv_wr **);\n\tint (*process_mad)(struct ib_device *, int, u8, const struct ib_wc *, const struct ib_grh *, const struct ib_mad *, struct ib_mad *, size_t *, u16 *);\n\tint (*query_device)(struct ib_device *, struct ib_device_attr *, struct ib_udata *);\n\tint (*modify_device)(struct ib_device *, int, struct ib_device_modify *);\n\tvoid (*get_dev_fw_str)(struct ib_device *, char *);\n\tconst struct cpumask * (*get_vector_affinity)(struct ib_device *, int);\n\tint (*query_port)(struct ib_device *, u8, struct ib_port_attr *);\n\tint (*modify_port)(struct ib_device *, u8, int, struct ib_port_modify *);\n\tint (*get_port_immutable)(struct ib_device *, u8, struct ib_port_immutable *);\n\tenum rdma_link_layer (*get_link_layer)(struct ib_device *, u8);\n\tstruct net_device * (*get_netdev)(struct ib_device *, u8);\n\tstruct net_device * (*alloc_rdma_netdev)(struct ib_device *, u8, enum rdma_netdev_t, const char *, unsigned char, void (*)(struct net_device *));\n\tint (*rdma_netdev_get_params)(struct ib_device *, u8, enum rdma_netdev_t, struct rdma_netdev_alloc_params *);\n\tint (*query_gid)(struct ib_device *, u8, int, union ib_gid *);\n\tint (*add_gid)(const struct ib_gid_attr *, void **);\n\tint (*del_gid)(const struct ib_gid_attr *, void **);\n\tint (*query_pkey)(struct ib_device *, u8, u16, u16 *);\n\tint (*alloc_ucontext)(struct ib_ucontext *, struct ib_udata *);\n\tvoid (*dealloc_ucontext)(struct ib_ucontext *);\n\tint (*mmap)(struct ib_ucontext *, struct vm_area_struct *);\n\tvoid (*mmap_free)(struct rdma_user_mmap_entry *);\n\tvoid (*disassociate_ucontext)(struct ib_ucontext *);\n\tint (*alloc_pd)(struct ib_pd *, struct ib_udata *);\n\tint (*dealloc_pd)(struct ib_pd *, struct ib_udata *);\n\tint (*create_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);\n\tint (*create_user_ah)(struct ib_ah *, struct rdma_ah_init_attr *, struct ib_udata *);\n\tint (*modify_ah)(struct ib_ah *, struct rdma_ah_attr *);\n\tint (*query_ah)(struct ib_ah *, struct rdma_ah_attr *);\n\tint (*destroy_ah)(struct ib_ah *, u32);\n\tint (*create_srq)(struct ib_srq *, struct ib_srq_init_attr *, struct ib_udata *);\n\tint (*modify_srq)(struct ib_srq *, struct ib_srq_attr *, enum ib_srq_attr_mask, struct ib_udata *);\n\tint (*query_srq)(struct ib_srq *, struct ib_srq_attr *);\n\tint (*destroy_srq)(struct ib_srq *, struct ib_udata *);\n\tstruct ib_qp * (*create_qp)(struct ib_pd *, struct ib_qp_init_attr *, struct ib_udata *);\n\tint (*modify_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_udata *);\n\tint (*query_qp)(struct ib_qp *, struct ib_qp_attr *, int, struct ib_qp_init_attr *);\n\tint (*destroy_qp)(struct ib_qp *, struct ib_udata *);\n\tint (*create_cq)(struct ib_cq *, const struct ib_cq_init_attr *, struct ib_udata *);\n\tint (*modify_cq)(struct ib_cq *, u16, u16);\n\tint (*destroy_cq)(struct ib_cq *, struct ib_udata *);\n\tint (*resize_cq)(struct ib_cq *, int, struct ib_udata *);\n\tstruct ib_mr * (*get_dma_mr)(struct ib_pd *, int);\n\tstruct ib_mr * (*reg_user_mr)(struct ib_pd *, u64, u64, u64, int, struct ib_udata *);\n\tstruct ib_mr * (*rereg_user_mr)(struct ib_mr *, int, u64, u64, u64, int, struct ib_pd *, struct ib_udata *);\n\tint (*dereg_mr)(struct ib_mr *, struct ib_udata *);\n\tstruct ib_mr * (*alloc_mr)(struct ib_pd *, enum ib_mr_type, u32);\n\tstruct ib_mr * (*alloc_mr_integrity)(struct ib_pd *, u32, u32);\n\tint (*advise_mr)(struct ib_pd *, enum ib_uverbs_advise_mr_advice, u32, struct ib_sge *, u32, struct uverbs_attr_bundle *);\n\tint (*map_mr_sg)(struct ib_mr *, struct scatterlist *, int, unsigned int *);\n\tint (*check_mr_status)(struct ib_mr *, u32, struct ib_mr_status *);\n\tint (*alloc_mw)(struct ib_mw *, struct ib_udata *);\n\tint (*dealloc_mw)(struct ib_mw *);\n\tint (*attach_mcast)(struct ib_qp *, union ib_gid *, u16);\n\tint (*detach_mcast)(struct ib_qp *, union ib_gid *, u16);\n\tint (*alloc_xrcd)(struct ib_xrcd *, struct ib_udata *);\n\tint (*dealloc_xrcd)(struct ib_xrcd *, struct ib_udata *);\n\tstruct ib_flow * (*create_flow)(struct ib_qp *, struct ib_flow_attr *, struct ib_udata *);\n\tint (*destroy_flow)(struct ib_flow *);\n\tstruct ib_flow_action * (*create_flow_action_esp)(struct ib_device *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);\n\tint (*destroy_flow_action)(struct ib_flow_action *);\n\tint (*modify_flow_action_esp)(struct ib_flow_action *, const struct ib_flow_action_attrs_esp *, struct uverbs_attr_bundle *);\n\tint (*set_vf_link_state)(struct ib_device *, int, u8, int);\n\tint (*get_vf_config)(struct ib_device *, int, u8, struct ifla_vf_info *);\n\tint (*get_vf_stats)(struct ib_device *, int, u8, struct ifla_vf_stats *);\n\tint (*get_vf_guid)(struct ib_device *, int, u8, struct ifla_vf_guid *, struct ifla_vf_guid *);\n\tint (*set_vf_guid)(struct ib_device *, int, u8, u64, int);\n\tstruct ib_wq * (*create_wq)(struct ib_pd *, struct ib_wq_init_attr *, struct ib_udata *);\n\tint (*destroy_wq)(struct ib_wq *, struct ib_udata *);\n\tint (*modify_wq)(struct ib_wq *, struct ib_wq_attr *, u32, struct ib_udata *);\n\tint (*create_rwq_ind_table)(struct ib_rwq_ind_table *, struct ib_rwq_ind_table_init_attr *, struct ib_udata *);\n\tint (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *);\n\tstruct ib_dm * (*alloc_dm)(struct ib_device *, struct ib_ucontext *, struct ib_dm_alloc_attr *, struct uverbs_attr_bundle *);\n\tint (*dealloc_dm)(struct ib_dm *, struct uverbs_attr_bundle *);\n\tstruct ib_mr * (*reg_dm_mr)(struct ib_pd *, struct ib_dm *, struct ib_dm_mr_attr *, struct uverbs_attr_bundle *);\n\tint (*create_counters)(struct ib_counters *, struct uverbs_attr_bundle *);\n\tint (*destroy_counters)(struct ib_counters *);\n\tint (*read_counters)(struct ib_counters *, struct ib_counters_read_attr *, struct uverbs_attr_bundle *);\n\tint (*map_mr_sg_pi)(struct ib_mr *, struct scatterlist *, int, unsigned int *, struct scatterlist *, int, unsigned int *);\n\tstruct rdma_hw_stats * (*alloc_hw_stats)(struct ib_device *, u8);\n\tint (*get_hw_stats)(struct ib_device *, struct rdma_hw_stats *, u8, int);\n\tint (*init_port)(struct ib_device *, u8, struct kobject *);\n\tint (*fill_res_mr_entry)(struct sk_buff *, struct ib_mr *);\n\tint (*fill_res_mr_entry_raw)(struct sk_buff *, struct ib_mr *);\n\tint (*fill_res_cq_entry)(struct sk_buff *, struct ib_cq *);\n\tint (*fill_res_cq_entry_raw)(struct sk_buff *, struct ib_cq *);\n\tint (*fill_res_qp_entry)(struct sk_buff *, struct ib_qp *);\n\tint (*fill_res_qp_entry_raw)(struct sk_buff *, struct ib_qp *);\n\tint (*fill_res_cm_id_entry)(struct sk_buff *, struct rdma_cm_id *);\n\tint (*enable_driver)(struct ib_device *);\n\tvoid (*dealloc_driver)(struct ib_device *);\n\tvoid (*iw_add_ref)(struct ib_qp *);\n\tvoid (*iw_rem_ref)(struct ib_qp *);\n\tstruct ib_qp * (*iw_get_qp)(struct ib_device *, int);\n\tint (*iw_connect)(struct iw_cm_id *, struct iw_cm_conn_param *);\n\tint (*iw_accept)(struct iw_cm_id *, struct iw_cm_conn_param *);\n\tint (*iw_reject)(struct iw_cm_id *, const void *, u8);\n\tint (*iw_create_listen)(struct iw_cm_id *, int);\n\tint (*iw_destroy_listen)(struct iw_cm_id *);\n\tint (*counter_bind_qp)(struct rdma_counter *, struct ib_qp *);\n\tint (*counter_unbind_qp)(struct ib_qp *);\n\tint (*counter_dealloc)(struct rdma_counter *);\n\tstruct rdma_hw_stats * (*counter_alloc_stats)(struct rdma_counter *);\n\tint (*counter_update_stats)(struct rdma_counter *);\n\tint (*fill_stat_mr_entry)(struct sk_buff *, struct ib_mr *);\n\tint (*query_ucontext)(struct ib_ucontext *, struct uverbs_attr_bundle *);\n\tsize_t size_ib_ah;\n\tsize_t size_ib_counters;\n\tsize_t size_ib_cq;\n\tsize_t size_ib_mw;\n\tsize_t size_ib_pd;\n\tsize_t size_ib_rwq_ind_table;\n\tsize_t size_ib_srq;\n\tsize_t size_ib_ucontext;\n\tsize_t size_ib_xrcd;\n};\n\nstruct ib_core_device {\n\tstruct device dev;\n\tpossible_net_t rdma_net;\n\tstruct kobject *ports_kobj;\n\tstruct list_head port_list;\n\tstruct ib_device *owner;\n};\n\nenum ib_atomic_cap {\n\tIB_ATOMIC_NONE = 0,\n\tIB_ATOMIC_HCA = 1,\n\tIB_ATOMIC_GLOB = 2,\n};\n\nstruct ib_odp_caps {\n\tuint64_t general_caps;\n\tstruct {\n\t\tuint32_t rc_odp_caps;\n\t\tuint32_t uc_odp_caps;\n\t\tuint32_t ud_odp_caps;\n\t\tuint32_t xrc_odp_caps;\n\t} per_transport_caps;\n};\n\nstruct ib_rss_caps {\n\tu32 supported_qpts;\n\tu32 max_rwq_indirection_tables;\n\tu32 max_rwq_indirection_table_size;\n};\n\nstruct ib_tm_caps {\n\tu32 max_rndv_hdr_size;\n\tu32 max_num_tags;\n\tu32 flags;\n\tu32 max_ops;\n\tu32 max_sge;\n};\n\nstruct ib_cq_caps {\n\tu16 max_cq_moderation_count;\n\tu16 max_cq_moderation_period;\n};\n\nstruct ib_device_attr {\n\tu64 fw_ver;\n\t__be64 sys_image_guid;\n\tu64 max_mr_size;\n\tu64 page_size_cap;\n\tu32 vendor_id;\n\tu32 vendor_part_id;\n\tu32 hw_ver;\n\tint max_qp;\n\tint max_qp_wr;\n\tu64 device_cap_flags;\n\tint max_send_sge;\n\tint max_recv_sge;\n\tint max_sge_rd;\n\tint max_cq;\n\tint max_cqe;\n\tint max_mr;\n\tint max_pd;\n\tint max_qp_rd_atom;\n\tint max_ee_rd_atom;\n\tint max_res_rd_atom;\n\tint max_qp_init_rd_atom;\n\tint max_ee_init_rd_atom;\n\tenum ib_atomic_cap atomic_cap;\n\tenum ib_atomic_cap masked_atomic_cap;\n\tint max_ee;\n\tint max_rdd;\n\tint max_mw;\n\tint max_raw_ipv6_qp;\n\tint max_raw_ethy_qp;\n\tint max_mcast_grp;\n\tint max_mcast_qp_attach;\n\tint max_total_mcast_qp_attach;\n\tint max_ah;\n\tint max_srq;\n\tint max_srq_wr;\n\tint max_srq_sge;\n\tunsigned int max_fast_reg_page_list_len;\n\tunsigned int max_pi_fast_reg_page_list_len;\n\tu16 max_pkeys;\n\tu8 local_ca_ack_delay;\n\tint sig_prot_cap;\n\tint sig_guard_cap;\n\tstruct ib_odp_caps odp_caps;\n\tuint64_t timestamp_mask;\n\tuint64_t hca_core_clock;\n\tstruct ib_rss_caps rss_caps;\n\tu32 max_wq_type_rq;\n\tu32 raw_packet_caps;\n\tstruct ib_tm_caps tm_caps;\n\tstruct ib_cq_caps cq_caps;\n\tu64 max_dm_size;\n\tu32 max_sgl_rd;\n};\n\nstruct rdma_restrack_root;\n\nstruct uapi_definition;\n\nstruct ib_port_data;\n\nstruct ib_device {\n\tstruct device *dma_device;\n\tstruct ib_device_ops ops;\n\tchar name[64];\n\tstruct callback_head callback_head;\n\tstruct list_head event_handler_list;\n\tstruct rw_semaphore event_handler_rwsem;\n\tspinlock_t qp_open_list_lock;\n\tstruct rw_semaphore client_data_rwsem;\n\tstruct xarray client_data;\n\tstruct mutex unregistration_lock;\n\trwlock_t cache_lock;\n\tstruct ib_port_data *port_data;\n\tint num_comp_vectors;\n\tunion {\n\t\tstruct device dev;\n\t\tstruct ib_core_device coredev;\n\t};\n\tconst struct attribute_group *groups[3];\n\tu64 uverbs_cmd_mask;\n\tchar node_desc[64];\n\t__be64 node_guid;\n\tu32 local_dma_lkey;\n\tu16 is_switch: 1;\n\tu16 kverbs_provider: 1;\n\tu16 use_cq_dim: 1;\n\tu8 node_type;\n\tu8 phys_port_cnt;\n\tstruct ib_device_attr attrs;\n\tstruct attribute_group *hw_stats_ag;\n\tstruct rdma_hw_stats *hw_stats;\n\tu32 index;\n\tspinlock_t cq_pools_lock;\n\tstruct list_head cq_pools[3];\n\tstruct rdma_restrack_root *res;\n\tconst struct uapi_definition *driver_def;\n\trefcount_t refcount;\n\tstruct completion unreg_completion;\n\tstruct work_struct unregistration_work;\n\tconst struct rdma_link_ops *link_ops;\n\tstruct mutex compat_devs_mutex;\n\tstruct xarray compat_devs;\n\tchar iw_ifname[16];\n\tu32 iw_driver_flags;\n\tu32 lag_flags;\n};\n\nenum ib_signature_type {\n\tIB_SIG_TYPE_NONE = 0,\n\tIB_SIG_TYPE_T10_DIF = 1,\n};\n\nenum ib_t10_dif_bg_type {\n\tIB_T10DIF_CRC = 0,\n\tIB_T10DIF_CSUM = 1,\n};\n\nstruct ib_t10_dif_domain {\n\tenum ib_t10_dif_bg_type bg_type;\n\tu16 pi_interval;\n\tu16 bg;\n\tu16 app_tag;\n\tu32 ref_tag;\n\tbool ref_remap;\n\tbool app_escape;\n\tbool ref_escape;\n\tu16 apptag_check_mask;\n};\n\nstruct ib_sig_domain {\n\tenum ib_signature_type sig_type;\n\tunion {\n\t\tstruct ib_t10_dif_domain dif;\n\t} sig;\n};\n\nstruct ib_sig_attrs {\n\tu8 check_mask;\n\tstruct ib_sig_domain mem;\n\tstruct ib_sig_domain wire;\n\tint meta_length;\n};\n\nenum ib_sig_err_type {\n\tIB_SIG_BAD_GUARD = 0,\n\tIB_SIG_BAD_REFTAG = 1,\n\tIB_SIG_BAD_APPTAG = 2,\n};\n\nstruct ib_sig_err {\n\tenum ib_sig_err_type err_type;\n\tu32 expected;\n\tu32 actual;\n\tu64 sig_err_offset;\n\tu32 key;\n};\n\nenum ib_uverbs_flow_action_esp_keymat {\n\tIB_UVERBS_FLOW_ACTION_ESP_KEYMAT_AES_GCM = 0,\n};\n\nstruct ib_uverbs_flow_action_esp_keymat_aes_gcm {\n\t__u64 iv;\n\t__u32 iv_algo;\n\t__u32 salt;\n\t__u32 icv_len;\n\t__u32 key_len;\n\t__u32 aes_key[8];\n};\n\nenum ib_uverbs_flow_action_esp_replay {\n\tIB_UVERBS_FLOW_ACTION_ESP_REPLAY_NONE = 0,\n\tIB_UVERBS_FLOW_ACTION_ESP_REPLAY_BMP = 1,\n};\n\nstruct ib_uverbs_flow_action_esp_replay_bmp {\n\t__u32 size;\n};\n\nunion ib_gid {\n\tu8 raw[16];\n\tstruct {\n\t\t__be64 subnet_prefix;\n\t\t__be64 interface_id;\n\t} global;\n};\n\nenum ib_gid_type {\n\tIB_GID_TYPE_IB = 0,\n\tIB_GID_TYPE_ROCE = 1,\n\tIB_GID_TYPE_ROCE_UDP_ENCAP = 2,\n\tIB_GID_TYPE_SIZE = 3,\n};\n\nstruct ib_gid_attr {\n\tstruct net_device *ndev;\n\tstruct ib_device *device;\n\tunion ib_gid gid;\n\tenum ib_gid_type gid_type;\n\tu16 index;\n\tu8 port_num;\n};\n\nstruct ib_cq_init_attr {\n\tunsigned int cqe;\n\tu32 comp_vector;\n\tu32 flags;\n};\n\nstruct ib_dm_mr_attr {\n\tu64 length;\n\tu64 offset;\n\tu32 access_flags;\n};\n\nstruct ib_dm_alloc_attr {\n\tu64 length;\n\tu32 alignment;\n\tu32 flags;\n};\n\nenum ib_mtu {\n\tIB_MTU_256 = 1,\n\tIB_MTU_512 = 2,\n\tIB_MTU_1024 = 3,\n\tIB_MTU_2048 = 4,\n\tIB_MTU_4096 = 5,\n};\n\nenum ib_port_state {\n\tIB_PORT_NOP = 0,\n\tIB_PORT_DOWN = 1,\n\tIB_PORT_INIT = 2,\n\tIB_PORT_ARMED = 3,\n\tIB_PORT_ACTIVE = 4,\n\tIB_PORT_ACTIVE_DEFER = 5,\n};\n\nstruct ib_port_attr {\n\tu64 subnet_prefix;\n\tenum ib_port_state state;\n\tenum ib_mtu max_mtu;\n\tenum ib_mtu active_mtu;\n\tu32 phys_mtu;\n\tint gid_tbl_len;\n\tunsigned int ip_gids: 1;\n\tu32 port_cap_flags;\n\tu32 max_msg_sz;\n\tu32 bad_pkey_cntr;\n\tu32 qkey_viol_cntr;\n\tu16 pkey_tbl_len;\n\tu32 sm_lid;\n\tu32 lid;\n\tu8 lmc;\n\tu8 max_vl_num;\n\tu8 sm_sl;\n\tu8 subnet_timeout;\n\tu8 init_type_reply;\n\tu8 active_width;\n\tu16 active_speed;\n\tu8 phys_state;\n\tu16 port_cap_flags2;\n};\n\nstruct ib_device_modify {\n\tu64 sys_image_guid;\n\tchar node_desc[64];\n};\n\nstruct ib_port_modify {\n\tu32 set_port_cap_mask;\n\tu32 clr_port_cap_mask;\n\tu8 init_type;\n};\n\nenum ib_event_type {\n\tIB_EVENT_CQ_ERR = 0,\n\tIB_EVENT_QP_FATAL = 1,\n\tIB_EVENT_QP_REQ_ERR = 2,\n\tIB_EVENT_QP_ACCESS_ERR = 3,\n\tIB_EVENT_COMM_EST = 4,\n\tIB_EVENT_SQ_DRAINED = 5,\n\tIB_EVENT_PATH_MIG = 6,\n\tIB_EVENT_PATH_MIG_ERR = 7,\n\tIB_EVENT_DEVICE_FATAL = 8,\n\tIB_EVENT_PORT_ACTIVE = 9,\n\tIB_EVENT_PORT_ERR = 10,\n\tIB_EVENT_LID_CHANGE = 11,\n\tIB_EVENT_PKEY_CHANGE = 12,\n\tIB_EVENT_SM_CHANGE = 13,\n\tIB_EVENT_SRQ_ERR = 14,\n\tIB_EVENT_SRQ_LIMIT_REACHED = 15,\n\tIB_EVENT_QP_LAST_WQE_REACHED = 16,\n\tIB_EVENT_CLIENT_REREGISTER = 17,\n\tIB_EVENT_GID_CHANGE = 18,\n\tIB_EVENT_WQ_FATAL = 19,\n};\n\nstruct ib_ucq_object;\n\ntypedef void (*ib_comp_handler)(struct ib_cq *, void *);\n\nstruct ib_event;\n\nstruct ib_cq {\n\tstruct ib_device *device;\n\tstruct ib_ucq_object *uobject;\n\tib_comp_handler comp_handler;\n\tvoid (*event_handler)(struct ib_event *, void *);\n\tvoid *cq_context;\n\tint cqe;\n\tunsigned int cqe_used;\n\tatomic_t usecnt;\n\tenum ib_poll_context poll_ctx;\n\tstruct ib_wc *wc;\n\tstruct list_head pool_entry;\n\tunion {\n\t\tstruct irq_poll iop;\n\t\tstruct work_struct work;\n\t};\n\tstruct workqueue_struct *comp_wq;\n\tstruct dim *dim;\n\tktime_t timestamp;\n\tu8 interrupt: 1;\n\tu8 shared: 1;\n\tunsigned int comp_vector;\n\tstruct rdma_restrack_entry res;\n};\n\nstruct ib_uqp_object;\n\nenum ib_qp_type {\n\tIB_QPT_SMI = 0,\n\tIB_QPT_GSI = 1,\n\tIB_QPT_RC = 2,\n\tIB_QPT_UC = 3,\n\tIB_QPT_UD = 4,\n\tIB_QPT_RAW_IPV6 = 5,\n\tIB_QPT_RAW_ETHERTYPE = 6,\n\tIB_QPT_RAW_PACKET = 8,\n\tIB_QPT_XRC_INI = 9,\n\tIB_QPT_XRC_TGT = 10,\n\tIB_QPT_MAX = 11,\n\tIB_QPT_DRIVER = 255,\n\tIB_QPT_RESERVED1 = 4096,\n\tIB_QPT_RESERVED2 = 4097,\n\tIB_QPT_RESERVED3 = 4098,\n\tIB_QPT_RESERVED4 = 4099,\n\tIB_QPT_RESERVED5 = 4100,\n\tIB_QPT_RESERVED6 = 4101,\n\tIB_QPT_RESERVED7 = 4102,\n\tIB_QPT_RESERVED8 = 4103,\n\tIB_QPT_RESERVED9 = 4104,\n\tIB_QPT_RESERVED10 = 4105,\n};\n\nstruct ib_qp_security;\n\nstruct ib_qp {\n\tstruct ib_device *device;\n\tstruct ib_pd *pd;\n\tstruct ib_cq *send_cq;\n\tstruct ib_cq *recv_cq;\n\tspinlock_t mr_lock;\n\tint mrs_used;\n\tstruct list_head rdma_mrs;\n\tstruct list_head sig_mrs;\n\tstruct ib_srq *srq;\n\tstruct ib_xrcd *xrcd;\n\tstruct list_head xrcd_list;\n\tatomic_t usecnt;\n\tstruct list_head open_list;\n\tstruct ib_qp *real_qp;\n\tstruct ib_uqp_object *uobject;\n\tvoid (*event_handler)(struct ib_event *, void *);\n\tvoid *qp_context;\n\tconst struct ib_gid_attr *av_sgid_attr;\n\tconst struct ib_gid_attr *alt_path_sgid_attr;\n\tu32 qp_num;\n\tu32 max_write_sge;\n\tu32 max_read_sge;\n\tenum ib_qp_type qp_type;\n\tstruct ib_rwq_ind_table *rwq_ind_tbl;\n\tstruct ib_qp_security *qp_sec;\n\tu8 port;\n\tbool integrity_en;\n\tstruct rdma_restrack_entry res;\n\tstruct rdma_counter *counter;\n};\n\nstruct ib_usrq_object;\n\nenum ib_srq_type {\n\tIB_SRQT_BASIC = 0,\n\tIB_SRQT_XRC = 1,\n\tIB_SRQT_TM = 2,\n};\n\nstruct ib_srq {\n\tstruct ib_device *device;\n\tstruct ib_pd *pd;\n\tstruct ib_usrq_object *uobject;\n\tvoid (*event_handler)(struct ib_event *, void *);\n\tvoid *srq_context;\n\tenum ib_srq_type srq_type;\n\tatomic_t usecnt;\n\tstruct {\n\t\tstruct ib_cq *cq;\n\t\tunion {\n\t\t\tstruct {\n\t\t\t\tstruct ib_xrcd *xrcd;\n\t\t\t\tu32 srq_num;\n\t\t\t} xrc;\n\t\t};\n\t} ext;\n};\n\nstruct ib_uwq_object;\n\nenum ib_wq_state {\n\tIB_WQS_RESET = 0,\n\tIB_WQS_RDY = 1,\n\tIB_WQS_ERR = 2,\n};\n\nenum ib_wq_type {\n\tIB_WQT_RQ = 0,\n};\n\nstruct ib_wq {\n\tstruct ib_device *device;\n\tstruct ib_uwq_object *uobject;\n\tvoid *wq_context;\n\tvoid (*event_handler)(struct ib_event *, void *);\n\tstruct ib_pd *pd;\n\tstruct ib_cq *cq;\n\tu32 wq_num;\n\tenum ib_wq_state state;\n\tenum ib_wq_type wq_type;\n\tatomic_t usecnt;\n};\n\nstruct ib_event {\n\tstruct ib_device *device;\n\tunion {\n\t\tstruct ib_cq *cq;\n\t\tstruct ib_qp *qp;\n\t\tstruct ib_srq *srq;\n\t\tstruct ib_wq *wq;\n\t\tu8 port_num;\n\t} element;\n\tenum ib_event_type event;\n};\n\nstruct ib_global_route {\n\tconst struct ib_gid_attr *sgid_attr;\n\tunion ib_gid dgid;\n\tu32 flow_label;\n\tu8 sgid_index;\n\tu8 hop_limit;\n\tu8 traffic_class;\n};\n\nstruct ib_grh {\n\t__be32 version_tclass_flow;\n\t__be16 paylen;\n\tu8 next_hdr;\n\tu8 hop_limit;\n\tunion ib_gid sgid;\n\tunion ib_gid dgid;\n};\n\nstruct ib_mr_status {\n\tu32 fail_status;\n\tstruct ib_sig_err sig_err;\n};\n\nstruct rdma_ah_init_attr {\n\tstruct rdma_ah_attr *ah_attr;\n\tu32 flags;\n\tstruct net_device *xmit_slave;\n};\n\nenum rdma_ah_attr_type {\n\tRDMA_AH_ATTR_TYPE_UNDEFINED = 0,\n\tRDMA_AH_ATTR_TYPE_IB = 1,\n\tRDMA_AH_ATTR_TYPE_ROCE = 2,\n\tRDMA_AH_ATTR_TYPE_OPA = 3,\n};\n\nstruct ib_ah_attr {\n\tu16 dlid;\n\tu8 src_path_bits;\n};\n\nstruct roce_ah_attr {\n\tu8 dmac[6];\n};\n\nstruct opa_ah_attr {\n\tu32 dlid;\n\tu8 src_path_bits;\n\tbool make_grd;\n};\n\nstruct rdma_ah_attr {\n\tstruct ib_global_route grh;\n\tu8 sl;\n\tu8 static_rate;\n\tu8 port_num;\n\tu8 ah_flags;\n\tenum rdma_ah_attr_type type;\n\tunion {\n\t\tstruct ib_ah_attr ib;\n\t\tstruct roce_ah_attr roce;\n\t\tstruct opa_ah_attr opa;\n\t};\n};\n\nenum ib_wc_status {\n\tIB_WC_SUCCESS = 0,\n\tIB_WC_LOC_LEN_ERR = 1,\n\tIB_WC_LOC_QP_OP_ERR = 2,\n\tIB_WC_LOC_EEC_OP_ERR = 3,\n\tIB_WC_LOC_PROT_ERR = 4,\n\tIB_WC_WR_FLUSH_ERR = 5,\n\tIB_WC_MW_BIND_ERR = 6,\n\tIB_WC_BAD_RESP_ERR = 7,\n\tIB_WC_LOC_ACCESS_ERR = 8,\n\tIB_WC_REM_INV_REQ_ERR = 9,\n\tIB_WC_REM_ACCESS_ERR = 10,\n\tIB_WC_REM_OP_ERR = 11,\n\tIB_WC_RETRY_EXC_ERR = 12,\n\tIB_WC_RNR_RETRY_EXC_ERR = 13,\n\tIB_WC_LOC_RDD_VIOL_ERR = 14,\n\tIB_WC_REM_INV_RD_REQ_ERR = 15,\n\tIB_WC_REM_ABORT_ERR = 16,\n\tIB_WC_INV_EECN_ERR = 17,\n\tIB_WC_INV_EEC_STATE_ERR = 18,\n\tIB_WC_FATAL_ERR = 19,\n\tIB_WC_RESP_TIMEOUT_ERR = 20,\n\tIB_WC_GENERAL_ERR = 21,\n};\n\nenum ib_wc_opcode {\n\tIB_WC_SEND = 0,\n\tIB_WC_RDMA_WRITE = 1,\n\tIB_WC_RDMA_READ = 2,\n\tIB_WC_COMP_SWAP = 3,\n\tIB_WC_FETCH_ADD = 4,\n\tIB_WC_BIND_MW = 5,\n\tIB_WC_LOCAL_INV = 6,\n\tIB_WC_LSO = 7,\n\tIB_WC_REG_MR = 8,\n\tIB_WC_MASKED_COMP_SWAP = 9,\n\tIB_WC_MASKED_FETCH_ADD = 10,\n\tIB_WC_RECV = 128,\n\tIB_WC_RECV_RDMA_WITH_IMM = 129,\n};\n\nstruct ib_cqe {\n\tvoid (*done)(struct ib_cq *, struct ib_wc *);\n};\n\nstruct ib_wc {\n\tunion {\n\t\tu64 wr_id;\n\t\tstruct ib_cqe *wr_cqe;\n\t};\n\tenum ib_wc_status status;\n\tenum ib_wc_opcode opcode;\n\tu32 vendor_err;\n\tu32 byte_len;\n\tstruct ib_qp *qp;\n\tunion {\n\t\t__be32 imm_data;\n\t\tu32 invalidate_rkey;\n\t} ex;\n\tu32 src_qp;\n\tu32 slid;\n\tint wc_flags;\n\tu16 pkey_index;\n\tu8 sl;\n\tu8 dlid_path_bits;\n\tu8 port_num;\n\tu8 smac[6];\n\tu16 vlan_id;\n\tu8 network_hdr_type;\n};\n\nstruct ib_srq_attr {\n\tu32 max_wr;\n\tu32 max_sge;\n\tu32 srq_limit;\n};\n\nstruct ib_xrcd {\n\tstruct ib_device *device;\n\tatomic_t usecnt;\n\tstruct inode *inode;\n\tstruct rw_semaphore tgt_qps_rwsem;\n\tstruct xarray tgt_qps;\n};\n\nstruct ib_srq_init_attr {\n\tvoid (*event_handler)(struct ib_event *, void *);\n\tvoid *srq_context;\n\tstruct ib_srq_attr attr;\n\tenum ib_srq_type srq_type;\n\tstruct {\n\t\tstruct ib_cq *cq;\n\t\tunion {\n\t\t\tstruct {\n\t\t\t\tstruct ib_xrcd *xrcd;\n\t\t\t} xrc;\n\t\t\tstruct {\n\t\t\t\tu32 max_num_tags;\n\t\t\t} tag_matching;\n\t\t};\n\t} ext;\n};\n\nstruct ib_qp_cap {\n\tu32 max_send_wr;\n\tu32 max_recv_wr;\n\tu32 max_send_sge;\n\tu32 max_recv_sge;\n\tu32 max_inline_data;\n\tu32 max_rdma_ctxs;\n};\n\nenum ib_sig_type {\n\tIB_SIGNAL_ALL_WR = 0,\n\tIB_SIGNAL_REQ_WR = 1,\n};\n\nstruct ib_qp_init_attr {\n\tvoid (*event_handler)(struct ib_event *, void *);\n\tvoid *qp_context;\n\tstruct ib_cq *send_cq;\n\tstruct ib_cq *recv_cq;\n\tstruct ib_srq *srq;\n\tstruct ib_xrcd *xrcd;\n\tstruct ib_qp_cap cap;\n\tenum ib_sig_type sq_sig_type;\n\tenum ib_qp_type qp_type;\n\tu32 create_flags;\n\tu8 port_num;\n\tstruct ib_rwq_ind_table *rwq_ind_tbl;\n\tu32 source_qpn;\n};\n\nstruct ib_uobject;\n\nstruct ib_rwq_ind_table {\n\tstruct ib_device *device;\n\tstruct ib_uobject *uobject;\n\tatomic_t usecnt;\n\tu32 ind_tbl_num;\n\tu32 log_ind_tbl_size;\n\tstruct ib_wq **ind_tbl;\n};\n\nenum ib_qp_state {\n\tIB_QPS_RESET = 0,\n\tIB_QPS_INIT = 1,\n\tIB_QPS_RTR = 2,\n\tIB_QPS_RTS = 3,\n\tIB_QPS_SQD = 4,\n\tIB_QPS_SQE = 5,\n\tIB_QPS_ERR = 6,\n};\n\nenum ib_mig_state {\n\tIB_MIG_MIGRATED = 0,\n\tIB_MIG_REARM = 1,\n\tIB_MIG_ARMED = 2,\n};\n\nenum ib_mw_type {\n\tIB_MW_TYPE_1 = 1,\n\tIB_MW_TYPE_2 = 2,\n};\n\nstruct ib_qp_attr {\n\tenum ib_qp_state qp_state;\n\tenum ib_qp_state cur_qp_state;\n\tenum ib_mtu path_mtu;\n\tenum ib_mig_state path_mig_state;\n\tu32 qkey;\n\tu32 rq_psn;\n\tu32 sq_psn;\n\tu32 dest_qp_num;\n\tint qp_access_flags;\n\tstruct ib_qp_cap cap;\n\tstruct rdma_ah_attr ah_attr;\n\tstruct rdma_ah_attr alt_ah_attr;\n\tu16 pkey_index;\n\tu16 alt_pkey_index;\n\tu8 en_sqd_async_notify;\n\tu8 sq_draining;\n\tu8 max_rd_atomic;\n\tu8 max_dest_rd_atomic;\n\tu8 min_rnr_timer;\n\tu8 port_num;\n\tu8 timeout;\n\tu8 retry_cnt;\n\tu8 rnr_retry;\n\tu8 alt_port_num;\n\tu8 alt_timeout;\n\tu32 rate_limit;\n\tstruct net_device *xmit_slave;\n};\n\nenum ib_wr_opcode {\n\tIB_WR_RDMA_WRITE = 0,\n\tIB_WR_RDMA_WRITE_WITH_IMM = 1,\n\tIB_WR_SEND = 2,\n\tIB_WR_SEND_WITH_IMM = 3,\n\tIB_WR_RDMA_READ = 4,\n\tIB_WR_ATOMIC_CMP_AND_SWP = 5,\n\tIB_WR_ATOMIC_FETCH_AND_ADD = 6,\n\tIB_WR_BIND_MW = 8,\n\tIB_WR_LSO = 10,\n\tIB_WR_SEND_WITH_INV = 9,\n\tIB_WR_RDMA_READ_WITH_INV = 11,\n\tIB_WR_LOCAL_INV = 7,\n\tIB_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,\n\tIB_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,\n\tIB_WR_REG_MR = 32,\n\tIB_WR_REG_MR_INTEGRITY = 33,\n\tIB_WR_RESERVED1 = 240,\n\tIB_WR_RESERVED2 = 241,\n\tIB_WR_RESERVED3 = 242,\n\tIB_WR_RESERVED4 = 243,\n\tIB_WR_RESERVED5 = 244,\n\tIB_WR_RESERVED6 = 245,\n\tIB_WR_RESERVED7 = 246,\n\tIB_WR_RESERVED8 = 247,\n\tIB_WR_RESERVED9 = 248,\n\tIB_WR_RESERVED10 = 249,\n};\n\nstruct ib_sge {\n\tu64 addr;\n\tu32 length;\n\tu32 lkey;\n};\n\nstruct ib_send_wr {\n\tstruct ib_send_wr *next;\n\tunion {\n\t\tu64 wr_id;\n\t\tstruct ib_cqe *wr_cqe;\n\t};\n\tstruct ib_sge *sg_list;\n\tint num_sge;\n\tenum ib_wr_opcode opcode;\n\tint send_flags;\n\tunion {\n\t\t__be32 imm_data;\n\t\tu32 invalidate_rkey;\n\t} ex;\n};\n\nstruct ib_ah {\n\tstruct ib_device *device;\n\tstruct ib_pd *pd;\n\tstruct ib_uobject *uobject;\n\tconst struct ib_gid_attr *sgid_attr;\n\tenum rdma_ah_attr_type type;\n};\n\nstruct ib_mr {\n\tstruct ib_device *device;\n\tstruct ib_pd *pd;\n\tu32 lkey;\n\tu32 rkey;\n\tu64 iova;\n\tu64 length;\n\tunsigned int page_size;\n\tenum ib_mr_type type;\n\tbool need_inval;\n\tunion {\n\t\tstruct ib_uobject *uobject;\n\t\tstruct list_head qp_entry;\n\t};\n\tstruct ib_dm *dm;\n\tstruct ib_sig_attrs *sig_attrs;\n\tstruct rdma_restrack_entry res;\n};\n\nstruct ib_recv_wr {\n\tstruct ib_recv_wr *next;\n\tunion {\n\t\tu64 wr_id;\n\t\tstruct ib_cqe *wr_cqe;\n\t};\n\tstruct ib_sge *sg_list;\n\tint num_sge;\n};\n\nstruct ib_rdmacg_object {};\n\nstruct ib_uverbs_file;\n\nstruct ib_ucontext {\n\tstruct ib_device *device;\n\tstruct ib_uverbs_file *ufile;\n\tstruct ib_rdmacg_object cg_obj;\n\tstruct rdma_restrack_entry res;\n\tstruct xarray mmap_xa;\n};\n\nstruct uverbs_api_object;\n\nstruct ib_uobject {\n\tu64 user_handle;\n\tstruct ib_uverbs_file *ufile;\n\tstruct ib_ucontext *context;\n\tvoid *object;\n\tstruct list_head list;\n\tstruct ib_rdmacg_object cg_obj;\n\tint id;\n\tstruct kref ref;\n\tatomic_t usecnt;\n\tstruct callback_head rcu;\n\tconst struct uverbs_api_object *uapi_object;\n};\n\nstruct ib_udata {\n\tconst void *inbuf;\n\tvoid *outbuf;\n\tsize_t inlen;\n\tsize_t outlen;\n};\n\nstruct ib_pd {\n\tu32 local_dma_lkey;\n\tu32 flags;\n\tstruct ib_device *device;\n\tstruct ib_uobject *uobject;\n\tatomic_t usecnt;\n\tu32 unsafe_global_rkey;\n\tstruct ib_mr *__internal_mr;\n\tstruct rdma_restrack_entry res;\n};\n\nstruct ib_wq_init_attr {\n\tvoid *wq_context;\n\tenum ib_wq_type wq_type;\n\tu32 max_wr;\n\tu32 max_sge;\n\tstruct ib_cq *cq;\n\tvoid (*event_handler)(struct ib_event *, void *);\n\tu32 create_flags;\n};\n\nstruct ib_wq_attr {\n\tenum ib_wq_state wq_state;\n\tenum ib_wq_state curr_wq_state;\n\tu32 flags;\n\tu32 flags_mask;\n};\n\nstruct ib_rwq_ind_table_init_attr {\n\tu32 log_ind_tbl_size;\n\tstruct ib_wq **ind_tbl;\n};\n\nenum port_pkey_state {\n\tIB_PORT_PKEY_NOT_VALID = 0,\n\tIB_PORT_PKEY_VALID = 1,\n\tIB_PORT_PKEY_LISTED = 2,\n};\n\nstruct ib_port_pkey {\n\tenum port_pkey_state state;\n\tu16 pkey_index;\n\tu8 port_num;\n\tstruct list_head qp_list;\n\tstruct list_head to_error_list;\n\tstruct ib_qp_security *sec;\n};\n\nstruct ib_ports_pkeys;\n\nstruct ib_qp_security {\n\tstruct ib_qp *qp;\n\tstruct ib_device *dev;\n\tstruct mutex mutex;\n\tstruct ib_ports_pkeys *ports_pkeys;\n\tstruct list_head shared_qp_list;\n\tvoid *security;\n\tbool destroying;\n\tatomic_t error_list_count;\n\tstruct completion error_complete;\n\tint error_comps_pending;\n};\n\nstruct ib_ports_pkeys {\n\tstruct ib_port_pkey main;\n\tstruct ib_port_pkey alt;\n};\n\nstruct ib_dm {\n\tstruct ib_device *device;\n\tu32 length;\n\tu32 flags;\n\tstruct ib_uobject *uobject;\n\tatomic_t usecnt;\n};\n\nstruct ib_mw {\n\tstruct ib_device *device;\n\tstruct ib_pd *pd;\n\tstruct ib_uobject *uobject;\n\tu32 rkey;\n\tenum ib_mw_type type;\n};\n\nenum ib_flow_attr_type {\n\tIB_FLOW_ATTR_NORMAL = 0,\n\tIB_FLOW_ATTR_ALL_DEFAULT = 1,\n\tIB_FLOW_ATTR_MC_DEFAULT = 2,\n\tIB_FLOW_ATTR_SNIFFER = 3,\n};\n\nenum ib_flow_spec_type {\n\tIB_FLOW_SPEC_ETH = 32,\n\tIB_FLOW_SPEC_IB = 34,\n\tIB_FLOW_SPEC_IPV4 = 48,\n\tIB_FLOW_SPEC_IPV6 = 49,\n\tIB_FLOW_SPEC_ESP = 52,\n\tIB_FLOW_SPEC_TCP = 64,\n\tIB_FLOW_SPEC_UDP = 65,\n\tIB_FLOW_SPEC_VXLAN_TUNNEL = 80,\n\tIB_FLOW_SPEC_GRE = 81,\n\tIB_FLOW_SPEC_MPLS = 96,\n\tIB_FLOW_SPEC_INNER = 256,\n\tIB_FLOW_SPEC_ACTION_TAG = 4096,\n\tIB_FLOW_SPEC_ACTION_DROP = 4097,\n\tIB_FLOW_SPEC_ACTION_HANDLE = 4098,\n\tIB_FLOW_SPEC_ACTION_COUNT = 4099,\n};\n\nstruct ib_flow_eth_filter {\n\tu8 dst_mac[6];\n\tu8 src_mac[6];\n\t__be16 ether_type;\n\t__be16 vlan_tag;\n\tu8 real_sz[0];\n};\n\nstruct ib_flow_spec_eth {\n\tu32 type;\n\tu16 size;\n\tstruct ib_flow_eth_filter val;\n\tstruct ib_flow_eth_filter mask;\n};\n\nstruct ib_flow_ib_filter {\n\t__be16 dlid;\n\t__u8 sl;\n\tu8 real_sz[0];\n};\n\nstruct ib_flow_spec_ib {\n\tu32 type;\n\tu16 size;\n\tstruct ib_flow_ib_filter val;\n\tstruct ib_flow_ib_filter mask;\n};\n\nstruct ib_flow_ipv4_filter {\n\t__be32 src_ip;\n\t__be32 dst_ip;\n\tu8 proto;\n\tu8 tos;\n\tu8 ttl;\n\tu8 flags;\n\tu8 real_sz[0];\n};\n\nstruct ib_flow_spec_ipv4 {\n\tu32 type;\n\tu16 size;\n\tstruct ib_flow_ipv4_filter val;\n\tstruct ib_flow_ipv4_filter mask;\n};\n\nstruct ib_flow_ipv6_filter {\n\tu8 src_ip[16];\n\tu8 dst_ip[16];\n\t__be32 flow_label;\n\tu8 next_hdr;\n\tu8 traffic_class;\n\tu8 hop_limit;\n\tu8 real_sz[0];\n};\n\nstruct ib_flow_spec_ipv6 {\n\tu32 type;\n\tu16 size;\n\tstruct ib_flow_ipv6_filter val;\n\tstruct ib_flow_ipv6_filter mask;\n};\n\nstruct ib_flow_tcp_udp_filter {\n\t__be16 dst_port;\n\t__be16 src_port;\n\tu8 real_sz[0];\n};\n\nstruct ib_flow_spec_tcp_udp {\n\tu32 type;\n\tu16 size;\n\tstruct ib_flow_tcp_udp_filter val;\n\tstruct ib_flow_tcp_udp_filter mask;\n};\n\nstruct ib_flow_tunnel_filter {\n\t__be32 tunnel_id;\n\tu8 real_sz[0];\n};\n\nstruct ib_flow_spec_tunnel {\n\tu32 type;\n\tu16 size;\n\tstruct ib_flow_tunnel_filter val;\n\tstruct ib_flow_tunnel_filter mask;\n};\n\nstruct ib_flow_esp_filter {\n\t__be32 spi;\n\t__be32 seq;\n\tu8 real_sz[0];\n};\n\nstruct ib_flow_spec_esp {\n\tu32 type;\n\tu16 size;\n\tstruct ib_flow_esp_filter val;\n\tstruct ib_flow_esp_filter mask;\n};\n\nstruct ib_flow_gre_filter {\n\t__be16 c_ks_res0_ver;\n\t__be16 protocol;\n\t__be32 key;\n\tu8 real_sz[0];\n};\n\nstruct ib_flow_spec_gre {\n\tu32 type;\n\tu16 size;\n\tstruct ib_flow_gre_filter val;\n\tstruct ib_flow_gre_filter mask;\n};\n\nstruct ib_flow_mpls_filter {\n\t__be32 tag;\n\tu8 real_sz[0];\n};\n\nstruct ib_flow_spec_mpls {\n\tu32 type;\n\tu16 size;\n\tstruct ib_flow_mpls_filter val;\n\tstruct ib_flow_mpls_filter mask;\n};\n\nstruct ib_flow_spec_action_tag {\n\tenum ib_flow_spec_type type;\n\tu16 size;\n\tu32 tag_id;\n};\n\nstruct ib_flow_spec_action_drop {\n\tenum ib_flow_spec_type type;\n\tu16 size;\n};\n\nstruct ib_flow_spec_action_handle {\n\tenum ib_flow_spec_type type;\n\tu16 size;\n\tstruct ib_flow_action *act;\n};\n\nenum ib_flow_action_type {\n\tIB_FLOW_ACTION_UNSPECIFIED = 0,\n\tIB_FLOW_ACTION_ESP = 1,\n};\n\nstruct ib_flow_action {\n\tstruct ib_device *device;\n\tstruct ib_uobject *uobject;\n\tenum ib_flow_action_type type;\n\tatomic_t usecnt;\n};\n\nstruct ib_flow_spec_action_count {\n\tenum ib_flow_spec_type type;\n\tu16 size;\n\tstruct ib_counters *counters;\n};\n\nstruct ib_counters {\n\tstruct ib_device *device;\n\tstruct ib_uobject *uobject;\n\tatomic_t usecnt;\n};\n\nunion ib_flow_spec {\n\tstruct {\n\t\tu32 type;\n\t\tu16 size;\n\t};\n\tstruct ib_flow_spec_eth eth;\n\tstruct ib_flow_spec_ib ib;\n\tstruct ib_flow_spec_ipv4 ipv4;\n\tstruct ib_flow_spec_tcp_udp tcp_udp;\n\tstruct ib_flow_spec_ipv6 ipv6;\n\tstruct ib_flow_spec_tunnel tunnel;\n\tstruct ib_flow_spec_esp esp;\n\tstruct ib_flow_spec_gre gre;\n\tstruct ib_flow_spec_mpls mpls;\n\tstruct ib_flow_spec_action_tag flow_tag;\n\tstruct ib_flow_spec_action_drop drop;\n\tstruct ib_flow_spec_action_handle action;\n\tstruct ib_flow_spec_action_count flow_count;\n};\n\nstruct ib_flow_attr {\n\tenum ib_flow_attr_type type;\n\tu16 size;\n\tu16 priority;\n\tu32 flags;\n\tu8 num_of_specs;\n\tu8 port;\n\tunion ib_flow_spec flows[0];\n};\n\nstruct ib_flow {\n\tstruct ib_qp *qp;\n\tstruct ib_device *device;\n\tstruct ib_uobject *uobject;\n};\n\nstruct ib_flow_action_attrs_esp_keymats {\n\tenum ib_uverbs_flow_action_esp_keymat protocol;\n\tunion {\n\t\tstruct ib_uverbs_flow_action_esp_keymat_aes_gcm aes_gcm;\n\t} keymat;\n};\n\nstruct ib_flow_action_attrs_esp_replays {\n\tenum ib_uverbs_flow_action_esp_replay protocol;\n\tunion {\n\t\tstruct ib_uverbs_flow_action_esp_replay_bmp bmp;\n\t} replay;\n};\n\nstruct ib_flow_spec_list {\n\tstruct ib_flow_spec_list *next;\n\tunion ib_flow_spec spec;\n};\n\nstruct ib_flow_action_attrs_esp {\n\tstruct ib_flow_action_attrs_esp_keymats *keymat;\n\tstruct ib_flow_action_attrs_esp_replays *replay;\n\tstruct ib_flow_spec_list *encap;\n\tu32 esn;\n\tu32 spi;\n\tu32 seq;\n\tu32 tfc_pad;\n\tu64 flags;\n\tu64 hard_limit_pkts;\n};\n\nstruct ib_pkey_cache;\n\nstruct ib_gid_table;\n\nstruct ib_port_cache {\n\tu64 subnet_prefix;\n\tstruct ib_pkey_cache *pkey;\n\tstruct ib_gid_table *gid;\n\tu8 lmc;\n\tenum ib_port_state port_state;\n};\n\nstruct ib_port_immutable {\n\tint pkey_tbl_len;\n\tint gid_tbl_len;\n\tu32 core_cap_flags;\n\tu32 max_mad_size;\n};\n\nstruct ib_port_data {\n\tstruct ib_device *ib_dev;\n\tstruct ib_port_immutable immutable;\n\tspinlock_t pkey_list_lock;\n\tstruct list_head pkey_list;\n\tstruct ib_port_cache cache;\n\tspinlock_t netdev_lock;\n\tstruct net_device *netdev;\n\tstruct hlist_node ndev_hash_link;\n\tstruct rdma_port_counter port_counter;\n\tstruct rdma_hw_stats *hw_stats;\n};\n\nstruct rdma_netdev_alloc_params {\n\tsize_t sizeof_priv;\n\tunsigned int txqs;\n\tunsigned int rxqs;\n\tvoid *param;\n\tint (*initialize_rdma_netdev)(struct ib_device *, u8, struct net_device *, void *);\n};\n\nstruct ib_counters_read_attr {\n\tu64 *counters_buff;\n\tu32 ncounters;\n\tu32 flags;\n};\n\nstruct rdma_user_mmap_entry {\n\tstruct kref ref;\n\tstruct ib_ucontext *ucontext;\n\tlong unsigned int start_pgoff;\n\tsize_t npages;\n\tbool driver_removed;\n};\n\nenum blk_zone_report_flags {\n\tBLK_ZONE_REP_CAPACITY = 1,\n};\n\nstruct blk_zone_report {\n\t__u64 sector;\n\t__u32 nr_zones;\n\t__u32 flags;\n\tstruct blk_zone zones[0];\n};\n\nstruct blk_zone_range {\n\t__u64 sector;\n\t__u64 nr_sectors;\n};\n\nstruct zone_report_args {\n\tstruct blk_zone *zones;\n};\n\nstruct blk_revalidate_zone_args {\n\tstruct gendisk *disk;\n\tlong unsigned int *conv_zones_bitmap;\n\tlong unsigned int *seq_zones_wlock;\n\tunsigned int nr_zones;\n\tsector_t zone_sectors;\n\tsector_t sector;\n};\n\nenum wbt_flags {\n\tWBT_TRACKED = 1,\n\tWBT_READ = 2,\n\tWBT_KSWAPD = 4,\n\tWBT_DISCARD = 8,\n\tWBT_NR_BITS = 4,\n};\n\nenum {\n\tWBT_STATE_ON_DEFAULT = 1,\n\tWBT_STATE_ON_MANUAL = 2,\n};\n\nstruct rq_wb {\n\tunsigned int wb_background;\n\tunsigned int wb_normal;\n\tshort int enable_state;\n\tunsigned int unknown_cnt;\n\tu64 win_nsec;\n\tu64 cur_win_nsec;\n\tstruct blk_stat_callback *cb;\n\tu64 sync_issue;\n\tvoid *sync_cookie;\n\tunsigned int wc;\n\tlong unsigned int last_issue;\n\tlong unsigned int last_comp;\n\tlong unsigned int min_lat_nsec;\n\tstruct rq_qos rqos;\n\tstruct rq_wait rq_wait[3];\n\tstruct rq_depth rq_depth;\n};\n\nstruct trace_event_raw_wbt_stat {\n\tstruct trace_entry ent;\n\tchar name[32];\n\ts64 rmean;\n\tu64 rmin;\n\tu64 rmax;\n\ts64 rnr_samples;\n\ts64 rtime;\n\ts64 wmean;\n\tu64 wmin;\n\tu64 wmax;\n\ts64 wnr_samples;\n\ts64 wtime;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_wbt_lat {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tlong unsigned int lat;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_wbt_step {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tconst char *msg;\n\tint step;\n\tlong unsigned int window;\n\tunsigned int bg;\n\tunsigned int normal;\n\tunsigned int max;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_wbt_timer {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tunsigned int status;\n\tint step;\n\tunsigned int inflight;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_wbt_stat {};\n\nstruct trace_event_data_offsets_wbt_lat {};\n\nstruct trace_event_data_offsets_wbt_step {};\n\nstruct trace_event_data_offsets_wbt_timer {};\n\ntypedef void (*btf_trace_wbt_stat)(void *, struct backing_dev_info *, struct blk_rq_stat *);\n\ntypedef void (*btf_trace_wbt_lat)(void *, struct backing_dev_info *, long unsigned int);\n\ntypedef void (*btf_trace_wbt_step)(void *, struct backing_dev_info *, const char *, int, long unsigned int, unsigned int, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_wbt_timer)(void *, struct backing_dev_info *, unsigned int, int, unsigned int);\n\nenum {\n\tRWB_DEF_DEPTH = 16,\n\tRWB_WINDOW_NSEC = 100000000,\n\tRWB_MIN_WRITE_SAMPLES = 3,\n\tRWB_UNKNOWN_BUMP = 5,\n};\n\nenum {\n\tLAT_OK = 1,\n\tLAT_UNKNOWN = 2,\n\tLAT_UNKNOWN_WRITES = 3,\n\tLAT_EXCEEDED = 4,\n};\n\nstruct wbt_wait_data {\n\tstruct rq_wb *rwb;\n\tenum wbt_flags wb_acct;\n\tlong unsigned int rw;\n};\n\nstruct show_busy_params {\n\tstruct seq_file *m;\n\tstruct blk_mq_hw_ctx *hctx;\n};\n\nenum opal_mbr {\n\tOPAL_MBR_ENABLE = 0,\n\tOPAL_MBR_DISABLE = 1,\n};\n\nenum opal_mbr_done_flag {\n\tOPAL_MBR_NOT_DONE = 0,\n\tOPAL_MBR_DONE = 1,\n};\n\nenum opal_user {\n\tOPAL_ADMIN1 = 0,\n\tOPAL_USER1 = 1,\n\tOPAL_USER2 = 2,\n\tOPAL_USER3 = 3,\n\tOPAL_USER4 = 4,\n\tOPAL_USER5 = 5,\n\tOPAL_USER6 = 6,\n\tOPAL_USER7 = 7,\n\tOPAL_USER8 = 8,\n\tOPAL_USER9 = 9,\n};\n\nenum opal_lock_state {\n\tOPAL_RO = 1,\n\tOPAL_RW = 2,\n\tOPAL_LK = 4,\n};\n\nstruct opal_key {\n\t__u8 lr;\n\t__u8 key_len;\n\t__u8 __align[6];\n\t__u8 key[256];\n};\n\nstruct opal_lr_act {\n\tstruct opal_key key;\n\t__u32 sum;\n\t__u8 num_lrs;\n\t__u8 lr[9];\n\t__u8 align[2];\n};\n\nstruct opal_session_info {\n\t__u32 sum;\n\t__u32 who;\n\tstruct opal_key opal_key;\n};\n\nstruct opal_user_lr_setup {\n\t__u64 range_start;\n\t__u64 range_length;\n\t__u32 RLE;\n\t__u32 WLE;\n\tstruct opal_session_info session;\n};\n\nstruct opal_lock_unlock {\n\tstruct opal_session_info session;\n\t__u32 l_state;\n\t__u8 __align[4];\n};\n\nstruct opal_new_pw {\n\tstruct opal_session_info session;\n\tstruct opal_session_info new_user_pw;\n};\n\nstruct opal_mbr_data {\n\tstruct opal_key key;\n\t__u8 enable_disable;\n\t__u8 __align[7];\n};\n\nstruct opal_mbr_done {\n\tstruct opal_key key;\n\t__u8 done_flag;\n\t__u8 __align[7];\n};\n\nstruct opal_shadow_mbr {\n\tstruct opal_key key;\n\tconst __u64 data;\n\t__u64 offset;\n\t__u64 size;\n};\n\nenum opal_table_ops {\n\tOPAL_READ_TABLE = 0,\n\tOPAL_WRITE_TABLE = 1,\n};\n\nstruct opal_read_write_table {\n\tstruct opal_key key;\n\tconst __u64 data;\n\tconst __u8 table_uid[8];\n\t__u64 offset;\n\t__u64 size;\n\t__u64 flags;\n\t__u64 priv;\n};\n\ntypedef int sec_send_recv(void *, u16, u8, void *, size_t, bool);\n\nenum {\n\tTCG_SECP_00 = 0,\n\tTCG_SECP_01 = 1,\n};\n\nenum opal_response_token {\n\tOPAL_DTA_TOKENID_BYTESTRING = 224,\n\tOPAL_DTA_TOKENID_SINT = 225,\n\tOPAL_DTA_TOKENID_UINT = 226,\n\tOPAL_DTA_TOKENID_TOKEN = 227,\n\tOPAL_DTA_TOKENID_INVALID = 0,\n};\n\nenum opal_uid {\n\tOPAL_SMUID_UID = 0,\n\tOPAL_THISSP_UID = 1,\n\tOPAL_ADMINSP_UID = 2,\n\tOPAL_LOCKINGSP_UID = 3,\n\tOPAL_ENTERPRISE_LOCKINGSP_UID = 4,\n\tOPAL_ANYBODY_UID = 5,\n\tOPAL_SID_UID = 6,\n\tOPAL_ADMIN1_UID = 7,\n\tOPAL_USER1_UID = 8,\n\tOPAL_USER2_UID = 9,\n\tOPAL_PSID_UID = 10,\n\tOPAL_ENTERPRISE_BANDMASTER0_UID = 11,\n\tOPAL_ENTERPRISE_ERASEMASTER_UID = 12,\n\tOPAL_TABLE_TABLE = 13,\n\tOPAL_LOCKINGRANGE_GLOBAL = 14,\n\tOPAL_LOCKINGRANGE_ACE_RDLOCKED = 15,\n\tOPAL_LOCKINGRANGE_ACE_WRLOCKED = 16,\n\tOPAL_MBRCONTROL = 17,\n\tOPAL_MBR = 18,\n\tOPAL_AUTHORITY_TABLE = 19,\n\tOPAL_C_PIN_TABLE = 20,\n\tOPAL_LOCKING_INFO_TABLE = 21,\n\tOPAL_ENTERPRISE_LOCKING_INFO_TABLE = 22,\n\tOPAL_DATASTORE = 23,\n\tOPAL_C_PIN_MSID = 24,\n\tOPAL_C_PIN_SID = 25,\n\tOPAL_C_PIN_ADMIN1 = 26,\n\tOPAL_HALF_UID_AUTHORITY_OBJ_REF = 27,\n\tOPAL_HALF_UID_BOOLEAN_ACE = 28,\n\tOPAL_UID_HEXFF = 29,\n};\n\nenum opal_method {\n\tOPAL_PROPERTIES = 0,\n\tOPAL_STARTSESSION = 1,\n\tOPAL_REVERT = 2,\n\tOPAL_ACTIVATE = 3,\n\tOPAL_EGET = 4,\n\tOPAL_ESET = 5,\n\tOPAL_NEXT = 6,\n\tOPAL_EAUTHENTICATE = 7,\n\tOPAL_GETACL = 8,\n\tOPAL_GENKEY = 9,\n\tOPAL_REVERTSP = 10,\n\tOPAL_GET = 11,\n\tOPAL_SET = 12,\n\tOPAL_AUTHENTICATE = 13,\n\tOPAL_RANDOM = 14,\n\tOPAL_ERASE = 15,\n};\n\nenum opal_token {\n\tOPAL_TRUE = 1,\n\tOPAL_FALSE = 0,\n\tOPAL_BOOLEAN_EXPR = 3,\n\tOPAL_TABLE = 0,\n\tOPAL_STARTROW = 1,\n\tOPAL_ENDROW = 2,\n\tOPAL_STARTCOLUMN = 3,\n\tOPAL_ENDCOLUMN = 4,\n\tOPAL_VALUES = 1,\n\tOPAL_TABLE_UID = 0,\n\tOPAL_TABLE_NAME = 1,\n\tOPAL_TABLE_COMMON = 2,\n\tOPAL_TABLE_TEMPLATE = 3,\n\tOPAL_TABLE_KIND = 4,\n\tOPAL_TABLE_COLUMN = 5,\n\tOPAL_TABLE_COLUMNS = 6,\n\tOPAL_TABLE_ROWS = 7,\n\tOPAL_TABLE_ROWS_FREE = 8,\n\tOPAL_TABLE_ROW_BYTES = 9,\n\tOPAL_TABLE_LASTID = 10,\n\tOPAL_TABLE_MIN = 11,\n\tOPAL_TABLE_MAX = 12,\n\tOPAL_PIN = 3,\n\tOPAL_RANGESTART = 3,\n\tOPAL_RANGELENGTH = 4,\n\tOPAL_READLOCKENABLED = 5,\n\tOPAL_WRITELOCKENABLED = 6,\n\tOPAL_READLOCKED = 7,\n\tOPAL_WRITELOCKED = 8,\n\tOPAL_ACTIVEKEY = 10,\n\tOPAL_LIFECYCLE = 6,\n\tOPAL_MAXRANGES = 4,\n\tOPAL_MBRENABLE = 1,\n\tOPAL_MBRDONE = 2,\n\tOPAL_HOSTPROPERTIES = 0,\n\tOPAL_STARTLIST = 240,\n\tOPAL_ENDLIST = 241,\n\tOPAL_STARTNAME = 242,\n\tOPAL_ENDNAME = 243,\n\tOPAL_CALL = 248,\n\tOPAL_ENDOFDATA = 249,\n\tOPAL_ENDOFSESSION = 250,\n\tOPAL_STARTTRANSACTON = 251,\n\tOPAL_ENDTRANSACTON = 252,\n\tOPAL_EMPTYATOM = 255,\n\tOPAL_WHERE = 0,\n};\n\nenum opal_parameter {\n\tOPAL_SUM_SET_LIST = 393216,\n};\n\nstruct opal_compacket {\n\t__be32 reserved0;\n\tu8 extendedComID[4];\n\t__be32 outstandingData;\n\t__be32 minTransfer;\n\t__be32 length;\n};\n\nstruct opal_packet {\n\t__be32 tsn;\n\t__be32 hsn;\n\t__be32 seq_number;\n\t__be16 reserved0;\n\t__be16 ack_type;\n\t__be32 acknowledgment;\n\t__be32 length;\n};\n\nstruct opal_data_subpacket {\n\tu8 reserved0[6];\n\t__be16 kind;\n\t__be32 length;\n};\n\nstruct opal_header {\n\tstruct opal_compacket cp;\n\tstruct opal_packet pkt;\n\tstruct opal_data_subpacket subpkt;\n};\n\nstruct d0_header {\n\t__be32 length;\n\t__be32 revision;\n\t__be32 reserved01;\n\t__be32 reserved02;\n\tu8 ignored[32];\n};\n\nstruct d0_tper_features {\n\tu8 supported_features;\n\tu8 reserved01[3];\n\t__be32 reserved02;\n\t__be32 reserved03;\n};\n\nstruct d0_locking_features {\n\tu8 supported_features;\n\tu8 reserved01[3];\n\t__be32 reserved02;\n\t__be32 reserved03;\n};\n\nstruct d0_geometry_features {\n\tu8 header[4];\n\tu8 reserved01;\n\tu8 reserved02[7];\n\t__be32 logical_block_size;\n\t__be64 alignment_granularity;\n\t__be64 lowest_aligned_lba;\n};\n\nstruct d0_opal_v100 {\n\t__be16 baseComID;\n\t__be16 numComIDs;\n};\n\nstruct d0_single_user_mode {\n\t__be32 num_locking_objects;\n\tu8 reserved01;\n\tu8 reserved02;\n\t__be16 reserved03;\n\t__be32 reserved04;\n};\n\nstruct d0_opal_v200 {\n\t__be16 baseComID;\n\t__be16 numComIDs;\n\tu8 range_crossing;\n\tu8 num_locking_admin_auth[2];\n\tu8 num_locking_user_auth[2];\n\tu8 initialPIN;\n\tu8 revertedPIN;\n\tu8 reserved01;\n\t__be32 reserved02;\n};\n\nstruct d0_features {\n\t__be16 code;\n\tu8 r_version;\n\tu8 length;\n\tu8 features[0];\n};\n\nstruct opal_dev;\n\nstruct opal_step {\n\tint (*fn)(struct opal_dev *, void *);\n\tvoid *data;\n};\n\nenum opal_atom_width {\n\tOPAL_WIDTH_TINY = 0,\n\tOPAL_WIDTH_SHORT = 1,\n\tOPAL_WIDTH_MEDIUM = 2,\n\tOPAL_WIDTH_LONG = 3,\n\tOPAL_WIDTH_TOKEN = 4,\n};\n\nstruct opal_resp_tok {\n\tconst u8 *pos;\n\tsize_t len;\n\tenum opal_response_token type;\n\tenum opal_atom_width width;\n\tunion {\n\t\tu64 u;\n\t\ts64 s;\n\t} stored;\n};\n\nstruct parsed_resp {\n\tint num;\n\tstruct opal_resp_tok toks[64];\n};\n\nstruct opal_dev {\n\tbool supported;\n\tbool mbr_enabled;\n\tvoid *data;\n\tsec_send_recv *send_recv;\n\tstruct mutex dev_lock;\n\tu16 comid;\n\tu32 hsn;\n\tu32 tsn;\n\tu64 align;\n\tu64 lowest_lba;\n\tsize_t pos;\n\tu8 cmd[2048];\n\tu8 resp[2048];\n\tstruct parsed_resp parsed;\n\tsize_t prev_d_len;\n\tvoid *prev_data;\n\tstruct list_head unlk_lst;\n};\n\ntypedef int cont_fn(struct opal_dev *);\n\nstruct opal_suspend_data {\n\tstruct opal_lock_unlock unlk;\n\tu8 lr;\n\tstruct list_head node;\n};\n\nstruct blk_ksm_keyslot {\n\tatomic_t slot_refs;\n\tstruct list_head idle_slot_node;\n\tstruct hlist_node hash_node;\n\tconst struct blk_crypto_key *key;\n\tstruct blk_keyslot_manager *ksm;\n};\n\nstruct blk_ksm_ll_ops {\n\tint (*keyslot_program)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);\n\tint (*keyslot_evict)(struct blk_keyslot_manager *, const struct blk_crypto_key *, unsigned int);\n};\n\nstruct blk_keyslot_manager {\n\tstruct blk_ksm_ll_ops ksm_ll_ops;\n\tunsigned int max_dun_bytes_supported;\n\tunsigned int crypto_modes_supported[4];\n\tstruct device *dev;\n\tunsigned int num_slots;\n\tstruct rw_semaphore lock;\n\twait_queue_head_t idle_slots_wait_queue;\n\tstruct list_head idle_slots;\n\tspinlock_t idle_slots_lock;\n\tstruct hlist_head *slot_hashtable;\n\tunsigned int log_slot_ht_size;\n\tstruct blk_ksm_keyslot *slots;\n};\n\nstruct blk_crypto_mode {\n\tconst char *cipher_str;\n\tunsigned int keysize;\n\tunsigned int ivsize;\n};\n\ntypedef int (*cmp_r_func_t)(const void *, const void *, const void *);\n\nstruct siprand_state {\n\tlong unsigned int v0;\n\tlong unsigned int v1;\n\tlong unsigned int v2;\n\tlong unsigned int v3;\n};\n\ntypedef __kernel_long_t __kernel_ptrdiff_t;\n\ntypedef __kernel_ptrdiff_t ptrdiff_t;\n\nstruct region {\n\tunsigned int start;\n\tunsigned int off;\n\tunsigned int group_len;\n\tunsigned int end;\n};\n\nenum {\n\tREG_OP_ISFREE = 0,\n\tREG_OP_ALLOC = 1,\n\tREG_OP_RELEASE = 2,\n};\n\ntypedef struct scatterlist *sg_alloc_fn(unsigned int, gfp_t);\n\ntypedef void sg_free_fn(struct scatterlist *, unsigned int);\n\nstruct sg_page_iter {\n\tstruct scatterlist *sg;\n\tunsigned int sg_pgoffset;\n\tunsigned int __nents;\n\tint __pg_advance;\n};\n\nstruct sg_dma_page_iter {\n\tstruct sg_page_iter base;\n};\n\nstruct sg_mapping_iter {\n\tstruct page *page;\n\tvoid *addr;\n\tsize_t length;\n\tsize_t consumed;\n\tstruct sg_page_iter piter;\n\tunsigned int __offset;\n\tunsigned int __remaining;\n\tunsigned int __flags;\n};\n\ntypedef int (*cmp_func)(void *, const struct list_head *, const struct list_head *);\n\nstruct csum_state {\n\t__wsum csum;\n\tsize_t off;\n};\n\nstruct rhltable {\n\tstruct rhashtable ht;\n};\n\nstruct rhashtable_walker {\n\tstruct list_head list;\n\tstruct bucket_table *tbl;\n};\n\nstruct rhashtable_iter {\n\tstruct rhashtable *ht;\n\tstruct rhash_head *p;\n\tstruct rhlist_head *list;\n\tstruct rhashtable_walker walker;\n\tunsigned int slot;\n\tunsigned int skip;\n\tbool end_of_table;\n};\n\nunion nested_table {\n\tunion nested_table *table;\n\tstruct rhash_lock_head *bucket;\n};\n\nstruct once_work {\n\tstruct work_struct work;\n\tstruct static_key_true *key;\n};\n\nstruct genradix_iter {\n\tsize_t offset;\n\tsize_t pos;\n};\n\nstruct genradix_node {\n\tunion {\n\t\tstruct genradix_node *children[512];\n\t\tu8 data[4096];\n\t};\n};\n\nstruct test_fail {\n\tconst char *str;\n\tunsigned int base;\n};\n\nstruct test_s8 {\n\tconst char *str;\n\tunsigned int base;\n\ts8 expected_res;\n};\n\nstruct test_u8 {\n\tconst char *str;\n\tunsigned int base;\n\tu8 expected_res;\n};\n\nstruct test_s16 {\n\tconst char *str;\n\tunsigned int base;\n\ts16 expected_res;\n};\n\nstruct test_u16 {\n\tconst char *str;\n\tunsigned int base;\n\tu16 expected_res;\n};\n\nstruct test_s32 {\n\tconst char *str;\n\tunsigned int base;\n\ts32 expected_res;\n};\n\nstruct test_u32 {\n\tconst char *str;\n\tunsigned int base;\n\tu32 expected_res;\n};\n\nstruct test_s64 {\n\tconst char *str;\n\tunsigned int base;\n\ts64 expected_res;\n};\n\nstruct test_u64 {\n\tconst char *str;\n\tunsigned int base;\n\tu64 expected_res;\n};\n\nstruct test_ll {\n\tconst char *str;\n\tunsigned int base;\n\tlong long int expected_res;\n};\n\nstruct test_ull {\n\tconst char *str;\n\tunsigned int base;\n\tlong long unsigned int expected_res;\n};\n\nstruct reciprocal_value_adv {\n\tu32 m;\n\tu8 sh;\n\tu8 exp;\n\tbool is_wide_m;\n};\n\nenum devm_ioremap_type {\n\tDEVM_IOREMAP = 0,\n\tDEVM_IOREMAP_UC = 1,\n\tDEVM_IOREMAP_WC = 2,\n};\n\nstruct pcim_iomap_devres {\n\tvoid *table[6];\n};\n\nstruct btree_head {\n\tlong unsigned int *node;\n\tmempool_t *mempool;\n\tint height;\n};\n\nstruct btree_geo {\n\tint keylen;\n\tint no_pairs;\n\tint no_longs;\n};\n\ntypedef void (*visitor128_t)(void *, long unsigned int, u64, u64, size_t);\n\ntypedef void (*visitorl_t)(void *, long unsigned int, long unsigned int, size_t);\n\ntypedef void (*visitor32_t)(void *, long unsigned int, u32, size_t);\n\ntypedef void (*visitor64_t)(void *, long unsigned int, u64, size_t);\n\nenum assoc_array_walk_status {\n\tassoc_array_walk_tree_empty = 0,\n\tassoc_array_walk_found_terminal_node = 1,\n\tassoc_array_walk_found_wrong_shortcut = 2,\n};\n\nstruct assoc_array_walk_result {\n\tstruct {\n\t\tstruct assoc_array_node *node;\n\t\tint level;\n\t\tint slot;\n\t} terminal_node;\n\tstruct {\n\t\tstruct assoc_array_shortcut *shortcut;\n\t\tint level;\n\t\tint sc_level;\n\t\tlong unsigned int sc_segments;\n\t\tlong unsigned int dissimilarity;\n\t} wrong_shortcut;\n};\n\nstruct assoc_array_delete_collapse_context {\n\tstruct assoc_array_node *node;\n\tconst void *skip_leaf;\n\tint slot;\n};\n\nstruct linear_range {\n\tunsigned int min;\n\tunsigned int min_sel;\n\tunsigned int max_sel;\n\tunsigned int step;\n};\n\nenum packing_op {\n\tPACK = 0,\n\tUNPACK = 1,\n};\n\nstruct xxh32_state {\n\tuint32_t total_len_32;\n\tuint32_t large_len;\n\tuint32_t v1;\n\tuint32_t v2;\n\tuint32_t v3;\n\tuint32_t v4;\n\tuint32_t mem32[4];\n\tuint32_t memsize;\n};\n\nstruct gen_pool_chunk {\n\tstruct list_head next_chunk;\n\tatomic_long_t avail;\n\tphys_addr_t phys_addr;\n\tvoid *owner;\n\tlong unsigned int start_addr;\n\tlong unsigned int end_addr;\n\tlong unsigned int bits[0];\n};\n\nstruct genpool_data_align {\n\tint align;\n};\n\nstruct genpool_data_fixed {\n\tlong unsigned int offset;\n};\n\nstruct sw842_hlist_node8 {\n\tstruct hlist_node node;\n\tu64 data;\n\tu8 index;\n};\n\nstruct sw842_hlist_node4 {\n\tstruct hlist_node node;\n\tu32 data;\n\tu16 index;\n};\n\nstruct sw842_hlist_node2 {\n\tstruct hlist_node node;\n\tu16 data;\n\tu8 index;\n};\n\nstruct sw842_param {\n\tu8 *in;\n\tu8 *instart;\n\tu64 ilen;\n\tu8 *out;\n\tu64 olen;\n\tu8 bit;\n\tu64 data8[1];\n\tu32 data4[2];\n\tu16 data2[4];\n\tint index8[1];\n\tint index4[2];\n\tint index2[4];\n\tstruct hlist_head htable8[1024];\n\tstruct hlist_head htable4[2048];\n\tstruct hlist_head htable2[1024];\n\tstruct sw842_hlist_node8 node8[256];\n\tstruct sw842_hlist_node4 node4[512];\n\tstruct sw842_hlist_node2 node2[256];\n};\n\nstruct sw842_param___2 {\n\tu8 *in;\n\tu8 bit;\n\tu64 ilen;\n\tu8 *out;\n\tu8 *ostart;\n\tu64 olen;\n};\n\ntypedef struct {\n\tunsigned char op;\n\tunsigned char bits;\n\tshort unsigned int val;\n} code;\n\ntypedef enum {\n\tHEAD = 0,\n\tFLAGS = 1,\n\tTIME = 2,\n\tOS = 3,\n\tEXLEN = 4,\n\tEXTRA = 5,\n\tNAME = 6,\n\tCOMMENT = 7,\n\tHCRC = 8,\n\tDICTID = 9,\n\tDICT = 10,\n\tTYPE = 11,\n\tTYPEDO = 12,\n\tSTORED = 13,\n\tCOPY = 14,\n\tTABLE = 15,\n\tLENLENS = 16,\n\tCODELENS = 17,\n\tLEN = 18,\n\tLENEXT = 19,\n\tDIST = 20,\n\tDISTEXT = 21,\n\tMATCH = 22,\n\tLIT = 23,\n\tCHECK = 24,\n\tLENGTH = 25,\n\tDONE = 26,\n\tBAD = 27,\n\tMEM = 28,\n\tSYNC = 29,\n} inflate_mode;\n\nstruct inflate_state {\n\tinflate_mode mode;\n\tint last;\n\tint wrap;\n\tint havedict;\n\tint flags;\n\tunsigned int dmax;\n\tlong unsigned int check;\n\tlong unsigned int total;\n\tunsigned int wbits;\n\tunsigned int wsize;\n\tunsigned int whave;\n\tunsigned int write;\n\tunsigned char *window;\n\tlong unsigned int hold;\n\tunsigned int bits;\n\tunsigned int length;\n\tunsigned int offset;\n\tunsigned int extra;\n\tconst code *lencode;\n\tconst code *distcode;\n\tunsigned int lenbits;\n\tunsigned int distbits;\n\tunsigned int ncode;\n\tunsigned int nlen;\n\tunsigned int ndist;\n\tunsigned int have;\n\tcode *next;\n\tshort unsigned int lens[320];\n\tshort unsigned int work[288];\n\tcode codes[2048];\n};\n\nunion uu {\n\tshort unsigned int us;\n\tunsigned char b[2];\n};\n\ntypedef unsigned int uInt;\n\ntypedef enum {\n\tCODES = 0,\n\tLENS = 1,\n\tDISTS = 2,\n} codetype;\n\nstruct inflate_workspace {\n\tstruct inflate_state inflate_state;\n\tunsigned char working_window[32768];\n};\n\ntypedef unsigned char uch;\n\ntypedef short unsigned int ush;\n\ntypedef long unsigned int ulg;\n\nstruct ct_data_s {\n\tunion {\n\t\tush freq;\n\t\tush code;\n\t} fc;\n\tunion {\n\t\tush dad;\n\t\tush len;\n\t} dl;\n};\n\ntypedef struct ct_data_s ct_data;\n\nstruct static_tree_desc_s {\n\tconst ct_data *static_tree;\n\tconst int *extra_bits;\n\tint extra_base;\n\tint elems;\n\tint max_length;\n};\n\ntypedef struct static_tree_desc_s static_tree_desc;\n\nstruct tree_desc_s {\n\tct_data *dyn_tree;\n\tint max_code;\n\tstatic_tree_desc *stat_desc;\n};\n\ntypedef ush Pos;\n\ntypedef unsigned int IPos;\n\nstruct deflate_state {\n\tz_streamp strm;\n\tint status;\n\tByte *pending_buf;\n\tulg pending_buf_size;\n\tByte *pending_out;\n\tint pending;\n\tint noheader;\n\tByte data_type;\n\tByte method;\n\tint last_flush;\n\tuInt w_size;\n\tuInt w_bits;\n\tuInt w_mask;\n\tByte *window;\n\tulg window_size;\n\tPos *prev;\n\tPos *head;\n\tuInt ins_h;\n\tuInt hash_size;\n\tuInt hash_bits;\n\tuInt hash_mask;\n\tuInt hash_shift;\n\tlong int block_start;\n\tuInt match_length;\n\tIPos prev_match;\n\tint match_available;\n\tuInt strstart;\n\tuInt match_start;\n\tuInt lookahead;\n\tuInt prev_length;\n\tuInt max_chain_length;\n\tuInt max_lazy_match;\n\tint level;\n\tint strategy;\n\tuInt good_match;\n\tint nice_match;\n\tstruct ct_data_s dyn_ltree[573];\n\tstruct ct_data_s dyn_dtree[61];\n\tstruct ct_data_s bl_tree[39];\n\tstruct tree_desc_s l_desc;\n\tstruct tree_desc_s d_desc;\n\tstruct tree_desc_s bl_desc;\n\tush bl_count[16];\n\tint heap[573];\n\tint heap_len;\n\tint heap_max;\n\tuch depth[573];\n\tuch *l_buf;\n\tuInt lit_bufsize;\n\tuInt last_lit;\n\tush *d_buf;\n\tulg opt_len;\n\tulg static_len;\n\tulg compressed_len;\n\tuInt matches;\n\tint last_eob_len;\n\tush bi_buf;\n\tint bi_valid;\n};\n\ntypedef struct deflate_state deflate_state;\n\ntypedef enum {\n\tneed_more = 0,\n\tblock_done = 1,\n\tfinish_started = 2,\n\tfinish_done = 3,\n} block_state;\n\ntypedef block_state (*compress_func)(deflate_state *, int);\n\nstruct deflate_workspace {\n\tdeflate_state deflate_memory;\n\tByte *window_memory;\n\tPos *prev_memory;\n\tPos *head_memory;\n\tchar *overlay_memory;\n};\n\ntypedef struct deflate_workspace deflate_workspace;\n\nstruct config_s {\n\tush good_length;\n\tush max_lazy;\n\tush nice_length;\n\tush max_chain;\n\tcompress_func func;\n};\n\ntypedef struct config_s config;\n\ntypedef struct tree_desc_s tree_desc;\n\ntypedef struct {\n\tuint32_t hashTable[4096];\n\tuint32_t currentOffset;\n\tuint32_t initCheck;\n\tconst uint8_t *dictionary;\n\tuint8_t *bufferStart;\n\tuint32_t dictSize;\n} LZ4_stream_t_internal;\n\ntypedef union {\n\tlong long unsigned int table[2052];\n\tLZ4_stream_t_internal internal_donotuse;\n} LZ4_stream_t;\n\ntypedef uint8_t BYTE;\n\ntypedef uint16_t U16;\n\ntypedef uint32_t U32;\n\ntypedef uint64_t U64;\n\ntypedef uintptr_t uptrval;\n\ntypedef enum {\n\tnoLimit = 0,\n\tlimitedOutput = 1,\n} limitedOutput_directive;\n\ntypedef enum {\n\tbyPtr = 0,\n\tbyU32 = 1,\n\tbyU16 = 2,\n} tableType_t;\n\ntypedef enum {\n\tnoDict = 0,\n\twithPrefix64k = 1,\n\tusingExtDict = 2,\n} dict_directive;\n\ntypedef enum {\n\tnoDictIssue = 0,\n\tdictSmall = 1,\n} dictIssue_directive;\n\ntypedef struct {\n\tconst uint8_t *externalDict;\n\tsize_t extDictSize;\n\tconst uint8_t *prefixEnd;\n\tsize_t prefixSize;\n} LZ4_streamDecode_t_internal;\n\ntypedef union {\n\tlong long unsigned int table[4];\n\tLZ4_streamDecode_t_internal internal_donotuse;\n} LZ4_streamDecode_t;\n\ntypedef enum {\n\tendOnOutputSize = 0,\n\tendOnInputSize = 1,\n} endCondition_directive;\n\ntypedef enum {\n\tdecode_full_block = 0,\n\tpartial_decode = 1,\n} earlyEnd_directive;\n\ntypedef struct {\n\tsize_t bitContainer;\n\tint bitPos;\n\tchar *startPtr;\n\tchar *ptr;\n\tchar *endPtr;\n} BIT_CStream_t;\n\ntypedef unsigned int FSE_CTable;\n\ntypedef struct {\n\tptrdiff_t value;\n\tconst void *stateTable;\n\tconst void *symbolTT;\n\tunsigned int stateLog;\n} FSE_CState_t;\n\ntypedef struct {\n\tint deltaFindState;\n\tU32 deltaNbBits;\n} FSE_symbolCompressionTransform;\n\ntypedef int16_t S16;\n\nstruct HUF_CElt_s {\n\tU16 val;\n\tBYTE nbBits;\n};\n\ntypedef struct HUF_CElt_s HUF_CElt;\n\ntypedef enum {\n\tHUF_repeat_none = 0,\n\tHUF_repeat_check = 1,\n\tHUF_repeat_valid = 2,\n} HUF_repeat;\n\nstruct nodeElt_s {\n\tU32 count;\n\tU16 parent;\n\tBYTE byte;\n\tBYTE nbBits;\n};\n\ntypedef struct nodeElt_s nodeElt;\n\ntypedef struct {\n\tU32 base;\n\tU32 curr;\n} rankPos;\n\ntypedef enum {\n\tZSTDcs_created = 0,\n\tZSTDcs_init = 1,\n\tZSTDcs_ongoing = 2,\n\tZSTDcs_ending = 3,\n} ZSTD_compressionStage_e;\n\ntypedef void * (*ZSTD_allocFunction)(void *, size_t);\n\ntypedef void (*ZSTD_freeFunction)(void *, void *);\n\ntypedef struct {\n\tZSTD_allocFunction customAlloc;\n\tZSTD_freeFunction customFree;\n\tvoid *opaque;\n} ZSTD_customMem;\n\ntypedef struct {\n\tU32 price;\n\tU32 off;\n\tU32 mlen;\n\tU32 litlen;\n\tU32 rep[3];\n} ZSTD_optimal_t;\n\ntypedef struct {\n\tU32 off;\n\tU32 len;\n} ZSTD_match_t;\n\nstruct seqDef_s;\n\ntypedef struct seqDef_s seqDef;\n\ntypedef struct {\n\tseqDef *sequencesStart;\n\tseqDef *sequences;\n\tBYTE *litStart;\n\tBYTE *lit;\n\tBYTE *llCode;\n\tBYTE *mlCode;\n\tBYTE *ofCode;\n\tU32 longLengthID;\n\tU32 longLengthPos;\n\tZSTD_optimal_t *priceTable;\n\tZSTD_match_t *matchTable;\n\tU32 *matchLengthFreq;\n\tU32 *litLengthFreq;\n\tU32 *litFreq;\n\tU32 *offCodeFreq;\n\tU32 matchLengthSum;\n\tU32 matchSum;\n\tU32 litLengthSum;\n\tU32 litSum;\n\tU32 offCodeSum;\n\tU32 log2matchLengthSum;\n\tU32 log2matchSum;\n\tU32 log2litLengthSum;\n\tU32 log2litSum;\n\tU32 log2offCodeSum;\n\tU32 factor;\n\tU32 staticPrices;\n\tU32 cachedPrice;\n\tU32 cachedLitLength;\n\tconst BYTE *cachedLiterals;\n} seqStore_t;\n\nstruct HUF_CElt_s___2;\n\ntypedef struct HUF_CElt_s___2 HUF_CElt___2;\n\nstruct ZSTD_CCtx_s {\n\tconst BYTE *nextSrc;\n\tconst BYTE *base;\n\tconst BYTE *dictBase;\n\tU32 dictLimit;\n\tU32 lowLimit;\n\tU32 nextToUpdate;\n\tU32 nextToUpdate3;\n\tU32 hashLog3;\n\tU32 loadedDictEnd;\n\tU32 forceWindow;\n\tU32 forceRawDict;\n\tZSTD_compressionStage_e stage;\n\tU32 rep[3];\n\tU32 repToConfirm[3];\n\tU32 dictID;\n\tZSTD_parameters params;\n\tvoid *workSpace;\n\tsize_t workSpaceSize;\n\tsize_t blockSize;\n\tU64 frameContentSize;\n\tstruct xxh64_state xxhState;\n\tZSTD_customMem customMem;\n\tseqStore_t seqStore;\n\tU32 *hashTable;\n\tU32 *hashTable3;\n\tU32 *chainTable;\n\tHUF_CElt___2 *hufTable;\n\tU32 flagStaticTables;\n\tHUF_repeat flagStaticHufTable;\n\tFSE_CTable offcodeCTable[187];\n\tFSE_CTable matchlengthCTable[363];\n\tFSE_CTable litlengthCTable[329];\n\tunsigned int tmpCounters[1536];\n};\n\ntypedef struct ZSTD_CCtx_s ZSTD_CCtx;\n\nstruct ZSTD_CDict_s {\n\tvoid *dictBuffer;\n\tconst void *dictContent;\n\tsize_t dictContentSize;\n\tZSTD_CCtx *refContext;\n};\n\ntypedef struct ZSTD_CDict_s ZSTD_CDict;\n\ntypedef enum {\n\tzcss_init = 0,\n\tzcss_load = 1,\n\tzcss_flush = 2,\n\tzcss_final = 3,\n} ZSTD_cStreamStage;\n\nstruct ZSTD_CStream_s___2 {\n\tZSTD_CCtx *cctx;\n\tZSTD_CDict *cdictLocal;\n\tconst ZSTD_CDict *cdict;\n\tchar *inBuff;\n\tsize_t inBuffSize;\n\tsize_t inToCompress;\n\tsize_t inBuffPos;\n\tsize_t inBuffTarget;\n\tsize_t blockSize;\n\tchar *outBuff;\n\tsize_t outBuffSize;\n\tsize_t outBuffContentSize;\n\tsize_t outBuffFlushedSize;\n\tZSTD_cStreamStage stage;\n\tU32 checksum;\n\tU32 frameEnded;\n\tU64 pledgedSrcSize;\n\tU64 inputProcessed;\n\tZSTD_parameters params;\n\tZSTD_customMem customMem;\n};\n\ntypedef struct ZSTD_CStream_s___2 ZSTD_CStream___2;\n\ntypedef int32_t S32;\n\ntypedef enum {\n\tset_basic = 0,\n\tset_rle = 1,\n\tset_compressed = 2,\n\tset_repeat = 3,\n} symbolEncodingType_e;\n\nstruct seqDef_s {\n\tU32 offset;\n\tU16 litLength;\n\tU16 matchLength;\n};\n\ntypedef enum {\n\tZSTDcrp_continue = 0,\n\tZSTDcrp_noMemset = 1,\n\tZSTDcrp_fullReset = 2,\n} ZSTD_compResetPolicy_e;\n\ntypedef void (*ZSTD_blockCompressor)(ZSTD_CCtx *, const void *, size_t);\n\ntypedef enum {\n\tzsf_gather = 0,\n\tzsf_flush = 1,\n\tzsf_end = 2,\n} ZSTD_flush_e;\n\ntypedef size_t (*searchMax_f)(ZSTD_CCtx *, const BYTE *, const BYTE *, size_t *, U32, U32);\n\ntypedef struct {\n\tsize_t bitContainer;\n\tunsigned int bitsConsumed;\n\tconst char *ptr;\n\tconst char *start;\n} BIT_DStream_t;\n\ntypedef enum {\n\tBIT_DStream_unfinished = 0,\n\tBIT_DStream_endOfBuffer = 1,\n\tBIT_DStream_completed = 2,\n\tBIT_DStream_overflow = 3,\n} BIT_DStream_status;\n\ntypedef unsigned int FSE_DTable;\n\ntypedef struct {\n\tsize_t state;\n\tconst void *table;\n} FSE_DState_t;\n\ntypedef struct {\n\tU16 tableLog;\n\tU16 fastMode;\n} FSE_DTableHeader;\n\ntypedef struct {\n\tshort unsigned int newState;\n\tunsigned char symbol;\n\tunsigned char nbBits;\n} FSE_decode_t;\n\ntypedef struct {\n\tvoid *ptr;\n\tconst void *end;\n} ZSTD_stack;\n\ntypedef U32 HUF_DTable;\n\ntypedef struct {\n\tBYTE maxTableLog;\n\tBYTE tableType;\n\tBYTE tableLog;\n\tBYTE reserved;\n} DTableDesc;\n\ntypedef struct {\n\tBYTE byte;\n\tBYTE nbBits;\n} HUF_DEltX2;\n\ntypedef struct {\n\tU16 sequence;\n\tBYTE nbBits;\n\tBYTE length;\n} HUF_DEltX4;\n\ntypedef struct {\n\tBYTE symbol;\n\tBYTE weight;\n} sortedSymbol_t;\n\ntypedef U32 rankValCol_t[13];\n\ntypedef struct {\n\tU32 tableTime;\n\tU32 decode256Time;\n} algo_time_t;\n\ntypedef struct {\n\tFSE_DTable LLTable[513];\n\tFSE_DTable OFTable[257];\n\tFSE_DTable MLTable[513];\n\tHUF_DTable hufTable[4097];\n\tU64 workspace[384];\n\tU32 rep[3];\n} ZSTD_entropyTables_t;\n\ntypedef struct {\n\tlong long unsigned int frameContentSize;\n\tunsigned int windowSize;\n\tunsigned int dictID;\n\tunsigned int checksumFlag;\n} ZSTD_frameParams;\n\ntypedef enum {\n\tbt_raw = 0,\n\tbt_rle = 1,\n\tbt_compressed = 2,\n\tbt_reserved = 3,\n} blockType_e;\n\ntypedef enum {\n\tZSTDds_getFrameHeaderSize = 0,\n\tZSTDds_decodeFrameHeader = 1,\n\tZSTDds_decodeBlockHeader = 2,\n\tZSTDds_decompressBlock = 3,\n\tZSTDds_decompressLastBlock = 4,\n\tZSTDds_checkChecksum = 5,\n\tZSTDds_decodeSkippableHeader = 6,\n\tZSTDds_skipFrame = 7,\n} ZSTD_dStage;\n\nstruct ZSTD_DCtx_s {\n\tconst FSE_DTable *LLTptr;\n\tconst FSE_DTable *MLTptr;\n\tconst FSE_DTable *OFTptr;\n\tconst HUF_DTable *HUFptr;\n\tZSTD_entropyTables_t entropy;\n\tconst void *previousDstEnd;\n\tconst void *base;\n\tconst void *vBase;\n\tconst void *dictEnd;\n\tsize_t expected;\n\tZSTD_frameParams fParams;\n\tblockType_e bType;\n\tZSTD_dStage stage;\n\tU32 litEntropy;\n\tU32 fseEntropy;\n\tstruct xxh64_state xxhState;\n\tsize_t headerSize;\n\tU32 dictID;\n\tconst BYTE *litPtr;\n\tZSTD_customMem customMem;\n\tsize_t litSize;\n\tsize_t rleSize;\n\tBYTE litBuffer[131080];\n\tBYTE headerBuffer[18];\n};\n\ntypedef struct ZSTD_DCtx_s ZSTD_DCtx;\n\nstruct ZSTD_DDict_s {\n\tvoid *dictBuffer;\n\tconst void *dictContent;\n\tsize_t dictSize;\n\tZSTD_entropyTables_t entropy;\n\tU32 dictID;\n\tU32 entropyPresent;\n\tZSTD_customMem cMem;\n};\n\ntypedef struct ZSTD_DDict_s ZSTD_DDict;\n\ntypedef enum {\n\tzdss_init = 0,\n\tzdss_loadHeader = 1,\n\tzdss_read = 2,\n\tzdss_load = 3,\n\tzdss_flush = 4,\n} ZSTD_dStreamStage;\n\nstruct ZSTD_DStream_s___2 {\n\tZSTD_DCtx *dctx;\n\tZSTD_DDict *ddictLocal;\n\tconst ZSTD_DDict *ddict;\n\tZSTD_frameParams fParams;\n\tZSTD_dStreamStage stage;\n\tchar *inBuff;\n\tsize_t inBuffSize;\n\tsize_t inPos;\n\tsize_t maxWindowSize;\n\tchar *outBuff;\n\tsize_t outBuffSize;\n\tsize_t outStart;\n\tsize_t outEnd;\n\tsize_t blockSize;\n\tBYTE headerBuffer[18];\n\tsize_t lhSize;\n\tZSTD_customMem customMem;\n\tvoid *legacyContext;\n\tU32 previousLegacyVersion;\n\tU32 legacyVersion;\n\tU32 hostageByte;\n};\n\ntypedef struct ZSTD_DStream_s___2 ZSTD_DStream___2;\n\ntypedef enum {\n\tZSTDnit_frameHeader = 0,\n\tZSTDnit_blockHeader = 1,\n\tZSTDnit_block = 2,\n\tZSTDnit_lastBlock = 3,\n\tZSTDnit_checksum = 4,\n\tZSTDnit_skippableFrame = 5,\n} ZSTD_nextInputType_e;\n\ntypedef uintptr_t uPtrDiff;\n\ntypedef struct {\n\tblockType_e blockType;\n\tU32 lastBlock;\n\tU32 origSize;\n} blockProperties_t;\n\ntypedef union {\n\tFSE_decode_t realData;\n\tU32 alignedBy4;\n} FSE_decode_t4;\n\ntypedef struct {\n\tsize_t litLength;\n\tsize_t matchLength;\n\tsize_t offset;\n\tconst BYTE *match;\n} seq_t;\n\ntypedef struct {\n\tBIT_DStream_t DStream;\n\tFSE_DState_t stateLL;\n\tFSE_DState_t stateOffb;\n\tFSE_DState_t stateML;\n\tsize_t prevOffset[3];\n\tconst BYTE *base;\n\tsize_t pos;\n\tuPtrDiff gotoDict;\n} seqState_t;\n\nenum xz_mode {\n\tXZ_SINGLE = 0,\n\tXZ_PREALLOC = 1,\n\tXZ_DYNALLOC = 2,\n};\n\nenum xz_ret {\n\tXZ_OK = 0,\n\tXZ_STREAM_END = 1,\n\tXZ_UNSUPPORTED_CHECK = 2,\n\tXZ_MEM_ERROR = 3,\n\tXZ_MEMLIMIT_ERROR = 4,\n\tXZ_FORMAT_ERROR = 5,\n\tXZ_OPTIONS_ERROR = 6,\n\tXZ_DATA_ERROR = 7,\n\tXZ_BUF_ERROR = 8,\n};\n\nstruct xz_buf {\n\tconst uint8_t *in;\n\tsize_t in_pos;\n\tsize_t in_size;\n\tuint8_t *out;\n\tsize_t out_pos;\n\tsize_t out_size;\n};\n\nstruct xz_dec;\n\ntypedef uint64_t vli_type;\n\nenum xz_check {\n\tXZ_CHECK_NONE = 0,\n\tXZ_CHECK_CRC32 = 1,\n\tXZ_CHECK_CRC64 = 4,\n\tXZ_CHECK_SHA256 = 10,\n};\n\nstruct xz_dec_hash {\n\tvli_type unpadded;\n\tvli_type uncompressed;\n\tuint32_t crc32;\n};\n\nstruct xz_dec_lzma2;\n\nstruct xz_dec_bcj;\n\nstruct xz_dec___2 {\n\tenum {\n\t\tSEQ_STREAM_HEADER = 0,\n\t\tSEQ_BLOCK_START = 1,\n\t\tSEQ_BLOCK_HEADER = 2,\n\t\tSEQ_BLOCK_UNCOMPRESS = 3,\n\t\tSEQ_BLOCK_PADDING = 4,\n\t\tSEQ_BLOCK_CHECK = 5,\n\t\tSEQ_INDEX = 6,\n\t\tSEQ_INDEX_PADDING = 7,\n\t\tSEQ_INDEX_CRC32 = 8,\n\t\tSEQ_STREAM_FOOTER = 9,\n\t} sequence;\n\tuint32_t pos;\n\tvli_type vli;\n\tsize_t in_start;\n\tsize_t out_start;\n\tuint32_t crc32;\n\tenum xz_check check_type;\n\tenum xz_mode mode;\n\tbool allow_buf_error;\n\tstruct {\n\t\tvli_type compressed;\n\t\tvli_type uncompressed;\n\t\tuint32_t size;\n\t} block_header;\n\tstruct {\n\t\tvli_type compressed;\n\t\tvli_type uncompressed;\n\t\tvli_type count;\n\t\tstruct xz_dec_hash hash;\n\t} block;\n\tstruct {\n\t\tenum {\n\t\t\tSEQ_INDEX_COUNT = 0,\n\t\t\tSEQ_INDEX_UNPADDED = 1,\n\t\t\tSEQ_INDEX_UNCOMPRESSED = 2,\n\t\t} sequence;\n\t\tvli_type size;\n\t\tvli_type count;\n\t\tstruct xz_dec_hash hash;\n\t} index;\n\tstruct {\n\t\tsize_t pos;\n\t\tsize_t size;\n\t\tuint8_t buf[1024];\n\t} temp;\n\tstruct xz_dec_lzma2 *lzma2;\n\tstruct xz_dec_bcj *bcj;\n\tbool bcj_active;\n};\n\nenum lzma_state {\n\tSTATE_LIT_LIT = 0,\n\tSTATE_MATCH_LIT_LIT = 1,\n\tSTATE_REP_LIT_LIT = 2,\n\tSTATE_SHORTREP_LIT_LIT = 3,\n\tSTATE_MATCH_LIT = 4,\n\tSTATE_REP_LIT = 5,\n\tSTATE_SHORTREP_LIT = 6,\n\tSTATE_LIT_MATCH = 7,\n\tSTATE_LIT_LONGREP = 8,\n\tSTATE_LIT_SHORTREP = 9,\n\tSTATE_NONLIT_MATCH = 10,\n\tSTATE_NONLIT_REP = 11,\n};\n\nstruct dictionary {\n\tuint8_t *buf;\n\tsize_t start;\n\tsize_t pos;\n\tsize_t full;\n\tsize_t limit;\n\tsize_t end;\n\tuint32_t size;\n\tuint32_t size_max;\n\tuint32_t allocated;\n\tenum xz_mode mode;\n};\n\nstruct rc_dec {\n\tuint32_t range;\n\tuint32_t code;\n\tuint32_t init_bytes_left;\n\tconst uint8_t *in;\n\tsize_t in_pos;\n\tsize_t in_limit;\n};\n\nstruct lzma_len_dec {\n\tuint16_t choice;\n\tuint16_t choice2;\n\tuint16_t low[128];\n\tuint16_t mid[128];\n\tuint16_t high[256];\n};\n\nstruct lzma_dec {\n\tuint32_t rep0;\n\tuint32_t rep1;\n\tuint32_t rep2;\n\tuint32_t rep3;\n\tenum lzma_state state;\n\tuint32_t len;\n\tuint32_t lc;\n\tuint32_t literal_pos_mask;\n\tuint32_t pos_mask;\n\tuint16_t is_match[192];\n\tuint16_t is_rep[12];\n\tuint16_t is_rep0[12];\n\tuint16_t is_rep1[12];\n\tuint16_t is_rep2[12];\n\tuint16_t is_rep0_long[192];\n\tuint16_t dist_slot[256];\n\tuint16_t dist_special[114];\n\tuint16_t dist_align[16];\n\tstruct lzma_len_dec match_len_dec;\n\tstruct lzma_len_dec rep_len_dec;\n\tuint16_t literal[12288];\n};\n\nenum lzma2_seq {\n\tSEQ_CONTROL = 0,\n\tSEQ_UNCOMPRESSED_1 = 1,\n\tSEQ_UNCOMPRESSED_2 = 2,\n\tSEQ_COMPRESSED_0 = 3,\n\tSEQ_COMPRESSED_1 = 4,\n\tSEQ_PROPERTIES = 5,\n\tSEQ_LZMA_PREPARE = 6,\n\tSEQ_LZMA_RUN = 7,\n\tSEQ_COPY = 8,\n};\n\nstruct lzma2_dec {\n\tenum lzma2_seq sequence;\n\tenum lzma2_seq next_sequence;\n\tuint32_t uncompressed;\n\tuint32_t compressed;\n\tbool need_dict_reset;\n\tbool need_props;\n};\n\nstruct xz_dec_lzma2___2 {\n\tstruct rc_dec rc;\n\tstruct dictionary dict;\n\tstruct lzma2_dec lzma2;\n\tstruct lzma_dec lzma;\n\tstruct {\n\t\tuint32_t size;\n\t\tuint8_t buf[63];\n\t} temp;\n};\n\nstruct xz_dec_bcj___2 {\n\tenum {\n\t\tBCJ_X86 = 4,\n\t\tBCJ_POWERPC = 5,\n\t\tBCJ_IA64 = 6,\n\t\tBCJ_ARM = 7,\n\t\tBCJ_ARMTHUMB = 8,\n\t\tBCJ_SPARC = 9,\n\t} type;\n\tenum xz_ret ret;\n\tbool single_call;\n\tuint32_t pos;\n\tuint32_t x86_prev_mask;\n\tuint8_t *out;\n\tsize_t out_pos;\n\tsize_t out_size;\n\tstruct {\n\t\tsize_t filtered;\n\t\tsize_t size;\n\t\tuint8_t buf[16];\n\t} temp;\n};\n\nstruct raid6_recov_calls {\n\tvoid (*data2)(int, size_t, int, int, void **);\n\tvoid (*datap)(int, size_t, int, void **);\n\tint (*valid)();\n\tconst char *name;\n\tint priority;\n};\n\ntypedef u64 unative_t;\n\nstruct raid6_sse_constants {\n\tu64 x1d[2];\n};\n\nstruct raid6_avx2_constants {\n\tu64 x1d[4];\n};\n\nstruct raid6_avx512_constants {\n\tu64 x1d[8];\n};\n\nstruct ts_state {\n\tunsigned int offset;\n\tchar cb[48];\n};\n\nstruct ts_config;\n\nstruct ts_ops {\n\tconst char *name;\n\tstruct ts_config * (*init)(const void *, unsigned int, gfp_t, int);\n\tunsigned int (*find)(struct ts_config *, struct ts_state *);\n\tvoid (*destroy)(struct ts_config *);\n\tvoid * (*get_pattern)(struct ts_config *);\n\tunsigned int (*get_pattern_len)(struct ts_config *);\n\tstruct module *owner;\n\tstruct list_head list;\n};\n\nstruct ts_config {\n\tstruct ts_ops *ops;\n\tint flags;\n\tunsigned int (*get_next_block)(unsigned int, const u8 **, struct ts_config *, struct ts_state *);\n\tvoid (*finish)(struct ts_config *, struct ts_state *);\n};\n\nstruct ts_linear_state {\n\tunsigned int len;\n\tconst void *data;\n};\n\nstruct ei_entry {\n\tstruct list_head list;\n\tlong unsigned int start_addr;\n\tlong unsigned int end_addr;\n\tint etype;\n\tvoid *priv;\n};\n\nstruct ddebug_table {\n\tstruct list_head link;\n\tconst char *mod_name;\n\tunsigned int num_ddebugs;\n\tstruct _ddebug *ddebugs;\n};\n\nstruct ddebug_query {\n\tconst char *filename;\n\tconst char *module;\n\tconst char *function;\n\tconst char *format;\n\tunsigned int first_lineno;\n\tunsigned int last_lineno;\n};\n\nstruct ddebug_iter {\n\tstruct ddebug_table *table;\n\tunsigned int idx;\n};\n\nstruct flag_settings {\n\tunsigned int flags;\n\tunsigned int mask;\n};\n\nstruct flagsbuf {\n\tchar buf[7];\n};\n\nstruct nla_bitfield32 {\n\t__u32 value;\n\t__u32 selector;\n};\n\nenum nla_policy_validation {\n\tNLA_VALIDATE_NONE = 0,\n\tNLA_VALIDATE_RANGE = 1,\n\tNLA_VALIDATE_RANGE_WARN_TOO_LONG = 2,\n\tNLA_VALIDATE_MIN = 3,\n\tNLA_VALIDATE_MAX = 4,\n\tNLA_VALIDATE_MASK = 5,\n\tNLA_VALIDATE_RANGE_PTR = 6,\n\tNLA_VALIDATE_FUNCTION = 7,\n};\n\nenum netlink_validation {\n\tNL_VALIDATE_LIBERAL = 0,\n\tNL_VALIDATE_TRAILING = 1,\n\tNL_VALIDATE_MAXTYPE = 2,\n\tNL_VALIDATE_UNSPEC = 4,\n\tNL_VALIDATE_STRICT_ATTRS = 8,\n\tNL_VALIDATE_NESTED = 16,\n};\n\nstruct cpu_rmap {\n\tstruct kref refcount;\n\tu16 size;\n\tu16 used;\n\tvoid **obj;\n\tstruct {\n\t\tu16 index;\n\t\tu16 dist;\n\t} near[0];\n};\n\nstruct irq_glue {\n\tstruct irq_affinity_notify notify;\n\tstruct cpu_rmap *rmap;\n\tu16 index;\n};\n\ntypedef mpi_limb_t *mpi_ptr_t;\n\ntypedef int mpi_size_t;\n\ntypedef mpi_limb_t UWtype;\n\ntypedef unsigned int UHWtype;\n\nenum gcry_mpi_constants {\n\tMPI_C_ZERO = 0,\n\tMPI_C_ONE = 1,\n\tMPI_C_TWO = 2,\n\tMPI_C_THREE = 3,\n\tMPI_C_FOUR = 4,\n\tMPI_C_EIGHT = 5,\n};\n\nstruct barrett_ctx_s;\n\ntypedef struct barrett_ctx_s *mpi_barrett_t;\n\nstruct gcry_mpi_point {\n\tMPI x;\n\tMPI y;\n\tMPI z;\n};\n\ntypedef struct gcry_mpi_point *MPI_POINT;\n\nenum gcry_mpi_ec_models {\n\tMPI_EC_WEIERSTRASS = 0,\n\tMPI_EC_MONTGOMERY = 1,\n\tMPI_EC_EDWARDS = 2,\n};\n\nenum ecc_dialects {\n\tECC_DIALECT_STANDARD = 0,\n\tECC_DIALECT_ED25519 = 1,\n\tECC_DIALECT_SAFECURVE = 2,\n};\n\nstruct mpi_ec_ctx {\n\tenum gcry_mpi_ec_models model;\n\tenum ecc_dialects dialect;\n\tint flags;\n\tunsigned int nbits;\n\tMPI p;\n\tMPI a;\n\tMPI b;\n\tMPI_POINT G;\n\tMPI n;\n\tunsigned int h;\n\tMPI_POINT Q;\n\tMPI d;\n\tconst char *name;\n\tstruct {\n\t\tstruct {\n\t\t\tunsigned int a_is_pminus3: 1;\n\t\t\tunsigned int two_inv_p: 1;\n\t\t} valid;\n\t\tint a_is_pminus3;\n\t\tMPI two_inv_p;\n\t\tmpi_barrett_t p_barrett;\n\t\tMPI scratch[11];\n\t} t;\n\tvoid (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);\n\tvoid (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);\n\tvoid (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);\n\tvoid (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);\n\tvoid (*mul2)(MPI, MPI, struct mpi_ec_ctx *);\n};\n\nstruct field_table {\n\tconst char *p;\n\tvoid (*addm)(MPI, MPI, MPI, struct mpi_ec_ctx *);\n\tvoid (*subm)(MPI, MPI, MPI, struct mpi_ec_ctx *);\n\tvoid (*mulm)(MPI, MPI, MPI, struct mpi_ec_ctx *);\n\tvoid (*mul2)(MPI, MPI, struct mpi_ec_ctx *);\n\tvoid (*pow2)(MPI, const MPI, struct mpi_ec_ctx *);\n};\n\nenum gcry_mpi_format {\n\tGCRYMPI_FMT_NONE = 0,\n\tGCRYMPI_FMT_STD = 1,\n\tGCRYMPI_FMT_PGP = 2,\n\tGCRYMPI_FMT_SSH = 3,\n\tGCRYMPI_FMT_HEX = 4,\n\tGCRYMPI_FMT_USG = 5,\n\tGCRYMPI_FMT_OPAQUE = 8,\n};\n\nstruct barrett_ctx_s___2;\n\ntypedef struct barrett_ctx_s___2 *mpi_barrett_t___2;\n\nstruct barrett_ctx_s___2 {\n\tMPI m;\n\tint m_copied;\n\tint k;\n\tMPI y;\n\tMPI r1;\n\tMPI r2;\n\tMPI r3;\n};\n\nstruct karatsuba_ctx {\n\tstruct karatsuba_ctx *next;\n\tmpi_ptr_t tspace;\n\tmpi_size_t tspace_size;\n\tmpi_ptr_t tp;\n\tmpi_size_t tp_size;\n};\n\ntypedef long int mpi_limb_signed_t;\n\nenum dim_tune_state {\n\tDIM_PARKING_ON_TOP = 0,\n\tDIM_PARKING_TIRED = 1,\n\tDIM_GOING_RIGHT = 2,\n\tDIM_GOING_LEFT = 3,\n};\n\nstruct dim_cq_moder {\n\tu16 usec;\n\tu16 pkts;\n\tu16 comps;\n\tu8 cq_period_mode;\n};\n\nenum dim_cq_period_mode {\n\tDIM_CQ_PERIOD_MODE_START_FROM_EQE = 0,\n\tDIM_CQ_PERIOD_MODE_START_FROM_CQE = 1,\n\tDIM_CQ_PERIOD_NUM_MODES = 2,\n};\n\nenum dim_state {\n\tDIM_START_MEASURE = 0,\n\tDIM_MEASURE_IN_PROGRESS = 1,\n\tDIM_APPLY_NEW_PROFILE = 2,\n};\n\nenum dim_stats_state {\n\tDIM_STATS_WORSE = 0,\n\tDIM_STATS_SAME = 1,\n\tDIM_STATS_BETTER = 2,\n};\n\nenum dim_step_result {\n\tDIM_STEPPED = 0,\n\tDIM_TOO_TIRED = 1,\n\tDIM_ON_EDGE = 2,\n};\n\nenum pubkey_algo {\n\tPUBKEY_ALGO_RSA = 0,\n\tPUBKEY_ALGO_MAX = 1,\n};\n\nstruct pubkey_hdr {\n\tuint8_t version;\n\tuint32_t timestamp;\n\tuint8_t algo;\n\tuint8_t nmpi;\n\tchar mpi[0];\n} __attribute__((packed));\n\nstruct signature_hdr {\n\tuint8_t version;\n\tuint32_t timestamp;\n\tuint8_t algo;\n\tuint8_t hash;\n\tuint8_t keyid[8];\n\tuint8_t nmpi;\n\tchar mpi[0];\n} __attribute__((packed));\n\nstruct sg_pool {\n\tsize_t size;\n\tchar *name;\n\tstruct kmem_cache *slab;\n\tmempool_t *pool;\n};\n\nenum {\n\tIRQ_POLL_F_SCHED = 0,\n\tIRQ_POLL_F_DISABLE = 1,\n};\n\nstruct font_desc {\n\tint idx;\n\tconst char *name;\n\tunsigned int width;\n\tunsigned int height;\n\tunsigned int charcount;\n\tconst void *data;\n\tint pref;\n};\n\nstruct font_data {\n\tunsigned int extra[4];\n\tconst unsigned char data[0];\n};\n\nstruct pldmfw_record {\n\tstruct list_head entry;\n\tstruct list_head descs;\n\tconst u8 *version_string;\n\tu8 version_type;\n\tu8 version_len;\n\tu16 package_data_len;\n\tu32 device_update_flags;\n\tconst u8 *package_data;\n\tlong unsigned int *component_bitmap;\n\tu16 component_bitmap_len;\n};\n\nstruct pldmfw_desc_tlv {\n\tstruct list_head entry;\n\tconst u8 *data;\n\tu16 type;\n\tu16 size;\n};\n\nstruct pldmfw_component {\n\tstruct list_head entry;\n\tu16 classification;\n\tu16 identifier;\n\tu16 options;\n\tu16 activation_method;\n\tu32 comparison_stamp;\n\tu32 component_size;\n\tconst u8 *component_data;\n\tconst u8 *version_string;\n\tu8 version_type;\n\tu8 version_len;\n\tu8 index;\n};\n\nstruct pldmfw_ops;\n\nstruct pldmfw {\n\tconst struct pldmfw_ops *ops;\n\tstruct device *dev;\n};\n\nstruct pldmfw_ops {\n\tbool (*match_record)(struct pldmfw *, struct pldmfw_record *);\n\tint (*send_package_data)(struct pldmfw *, const u8 *, u16);\n\tint (*send_component_table)(struct pldmfw *, struct pldmfw_component *, u8);\n\tint (*flash_component)(struct pldmfw *, struct pldmfw_component *);\n\tint (*finalize_update)(struct pldmfw *);\n};\n\nstruct __pldm_timestamp {\n\tu8 b[13];\n};\n\nstruct __pldm_header {\n\tuuid_t id;\n\tu8 revision;\n\t__le16 size;\n\tstruct __pldm_timestamp release_date;\n\t__le16 component_bitmap_len;\n\tu8 version_type;\n\tu8 version_len;\n\tu8 version_string[0];\n} __attribute__((packed));\n\nstruct __pldmfw_record_info {\n\t__le16 record_len;\n\tu8 descriptor_count;\n\t__le32 device_update_flags;\n\tu8 version_type;\n\tu8 version_len;\n\t__le16 package_data_len;\n\tu8 variable_record_data[0];\n} __attribute__((packed));\n\nstruct __pldmfw_desc_tlv {\n\t__le16 type;\n\t__le16 size;\n\tu8 data[0];\n};\n\nstruct __pldmfw_record_area {\n\tu8 record_count;\n\tu8 records[0];\n};\n\nstruct __pldmfw_component_info {\n\t__le16 classification;\n\t__le16 identifier;\n\t__le32 comparison_stamp;\n\t__le16 options;\n\t__le16 activation_method;\n\t__le32 location_offset;\n\t__le32 size;\n\tu8 version_type;\n\tu8 version_len;\n\tu8 version_string[0];\n} __attribute__((packed));\n\nstruct __pldmfw_component_area {\n\t__le16 component_image_count;\n\tu8 components[0];\n};\n\nstruct pldmfw_priv {\n\tstruct pldmfw *context;\n\tconst struct firmware *fw;\n\tsize_t offset;\n\tstruct list_head records;\n\tstruct list_head components;\n\tconst struct __pldm_header *header;\n\tu16 total_header_size;\n\tu16 component_bitmap_len;\n\tu16 bitmap_size;\n\tu16 component_count;\n\tconst u8 *component_start;\n\tconst u8 *record_start;\n\tu8 record_count;\n\tu32 header_crc;\n\tstruct pldmfw_record *matching_record;\n};\n\nstruct pldm_pci_record_id {\n\tint vendor;\n\tint device;\n\tint subsystem_vendor;\n\tint subsystem_device;\n};\n\nstruct msr {\n\tunion {\n\t\tstruct {\n\t\t\tu32 l;\n\t\t\tu32 h;\n\t\t};\n\t\tu64 q;\n\t};\n};\n\nstruct msr_info {\n\tu32 msr_no;\n\tstruct msr reg;\n\tstruct msr *msrs;\n\tint err;\n};\n\nstruct msr_regs_info {\n\tu32 *regs;\n\tint err;\n};\n\nstruct msr_info_completion {\n\tstruct msr_info msr;\n\tstruct completion done;\n};\n\nstruct trace_event_raw_msr_trace_class {\n\tstruct trace_entry ent;\n\tunsigned int msr;\n\tu64 val;\n\tint failed;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_msr_trace_class {};\n\ntypedef void (*btf_trace_read_msr)(void *, unsigned int, u64, int);\n\ntypedef void (*btf_trace_write_msr)(void *, unsigned int, u64, int);\n\ntypedef void (*btf_trace_rdpmc)(void *, unsigned int, u64, int);\n\nstruct warn_args___2;\n\nstruct compress_format {\n\tunsigned char magic[2];\n\tconst char *name;\n\tdecompress_fn decompressor;\n};\n\nstruct group_data {\n\tint limit[21];\n\tint base[20];\n\tint permute[258];\n\tint minLen;\n\tint maxLen;\n};\n\nstruct bunzip_data {\n\tint writeCopies;\n\tint writePos;\n\tint writeRunCountdown;\n\tint writeCount;\n\tint writeCurrent;\n\tlong int (*fill)(void *, long unsigned int);\n\tlong int inbufCount;\n\tlong int inbufPos;\n\tunsigned char *inbuf;\n\tunsigned int inbufBitCount;\n\tunsigned int inbufBits;\n\tunsigned int crc32Table[256];\n\tunsigned int headerCRC;\n\tunsigned int totalCRC;\n\tunsigned int writeCRC;\n\tunsigned int *dbuf;\n\tunsigned int dbufSize;\n\tunsigned char selectors[32768];\n\tstruct group_data groups[6];\n\tint io_error;\n\tint byteCount[256];\n\tunsigned char symToByte[256];\n\tunsigned char mtfSymbol[256];\n};\n\nstruct rc {\n\tlong int (*fill)(void *, long unsigned int);\n\tuint8_t *ptr;\n\tuint8_t *buffer;\n\tuint8_t *buffer_end;\n\tlong int buffer_size;\n\tuint32_t code;\n\tuint32_t range;\n\tuint32_t bound;\n\tvoid (*error)(char *);\n};\n\nstruct lzma_header {\n\tuint8_t pos;\n\tuint32_t dict_size;\n\tuint64_t dst_size;\n} __attribute__((packed));\n\nstruct writer {\n\tuint8_t *buffer;\n\tuint8_t previous_byte;\n\tsize_t buffer_pos;\n\tint bufsize;\n\tsize_t global_pos;\n\tlong int (*flush)(void *, long unsigned int);\n\tstruct lzma_header *header;\n};\n\nstruct cstate {\n\tint state;\n\tuint32_t rep0;\n\tuint32_t rep1;\n\tuint32_t rep2;\n\tuint32_t rep3;\n};\n\nstruct ZSTD_DCtx_s___2;\n\ntypedef struct ZSTD_DCtx_s___2 ZSTD_DCtx___2;\n\nenum cpio_fields {\n\tC_MAGIC = 0,\n\tC_INO = 1,\n\tC_MODE = 2,\n\tC_UID = 3,\n\tC_GID = 4,\n\tC_NLINK = 5,\n\tC_MTIME = 6,\n\tC_FILESIZE = 7,\n\tC_MAJ = 8,\n\tC_MIN = 9,\n\tC_RMAJ = 10,\n\tC_RMIN = 11,\n\tC_NAMESIZE = 12,\n\tC_CHKSUM = 13,\n\tC_NFIELDS = 14,\n};\n\nstruct fprop_local_single {\n\tlong unsigned int events;\n\tunsigned int period;\n\traw_spinlock_t lock;\n};\n\nstruct ida_bitmap {\n\tlong unsigned int bitmap[16];\n};\n\nstruct klist_waiter {\n\tstruct list_head list;\n\tstruct klist_node *node;\n\tstruct task_struct *process;\n\tint woken;\n};\n\nstruct uevent_sock {\n\tstruct list_head list;\n\tstruct sock *sk;\n};\n\nenum {\n\tLOGIC_PIO_INDIRECT = 0,\n\tLOGIC_PIO_CPU_MMIO = 1,\n};\n\nstruct logic_pio_host_ops;\n\nstruct logic_pio_hwaddr {\n\tstruct list_head list;\n\tstruct fwnode_handle *fwnode;\n\tresource_size_t hw_start;\n\tresource_size_t io_start;\n\tresource_size_t size;\n\tlong unsigned int flags;\n\tvoid *hostdata;\n\tconst struct logic_pio_host_ops *ops;\n};\n\nstruct logic_pio_host_ops {\n\tu32 (*in)(void *, long unsigned int, size_t);\n\tvoid (*out)(void *, long unsigned int, u32, size_t);\n\tu32 (*ins)(void *, long unsigned int, void *, size_t, unsigned int);\n\tvoid (*outs)(void *, long unsigned int, const void *, size_t, unsigned int);\n};\n\ntypedef struct {\n\tlong unsigned int key[2];\n} hsiphash_key_t;\n\nstruct clk_core;\n\nstruct clk {\n\tstruct clk_core *core;\n\tstruct device *dev;\n\tconst char *dev_id;\n\tconst char *con_id;\n\tlong unsigned int min_rate;\n\tlong unsigned int max_rate;\n\tunsigned int exclusive_count;\n\tstruct hlist_node clks_node;\n};\n\nenum format_type {\n\tFORMAT_TYPE_NONE = 0,\n\tFORMAT_TYPE_WIDTH = 1,\n\tFORMAT_TYPE_PRECISION = 2,\n\tFORMAT_TYPE_CHAR = 3,\n\tFORMAT_TYPE_STR = 4,\n\tFORMAT_TYPE_PTR = 5,\n\tFORMAT_TYPE_PERCENT_CHAR = 6,\n\tFORMAT_TYPE_INVALID = 7,\n\tFORMAT_TYPE_LONG_LONG = 8,\n\tFORMAT_TYPE_ULONG = 9,\n\tFORMAT_TYPE_LONG = 10,\n\tFORMAT_TYPE_UBYTE = 11,\n\tFORMAT_TYPE_BYTE = 12,\n\tFORMAT_TYPE_USHORT = 13,\n\tFORMAT_TYPE_SHORT = 14,\n\tFORMAT_TYPE_UINT = 15,\n\tFORMAT_TYPE_INT = 16,\n\tFORMAT_TYPE_SIZE_T = 17,\n\tFORMAT_TYPE_PTRDIFF = 18,\n};\n\nstruct printf_spec {\n\tunsigned int type: 8;\n\tint field_width: 24;\n\tunsigned int flags: 8;\n\tunsigned int base: 8;\n\tint precision: 16;\n};\n\nstruct minmax_sample {\n\tu32 t;\n\tu32 v;\n};\n\nstruct minmax {\n\tstruct minmax_sample s[3];\n};\n\nstruct xa_limit {\n\tu32 max;\n\tu32 min;\n};\n\nenum {\n\tst_wordstart = 0,\n\tst_wordcmp = 1,\n\tst_wordskip = 2,\n\tst_bufcpy = 3,\n};\n\nenum {\n\tst_wordstart___2 = 0,\n\tst_wordcmp___2 = 1,\n\tst_wordskip___2 = 2,\n};\n\nstruct in6_addr___2;\n\nenum reg_type {\n\tREG_TYPE_RM = 0,\n\tREG_TYPE_REG = 1,\n\tREG_TYPE_INDEX = 2,\n\tREG_TYPE_BASE = 3,\n};\n\nenum device_link_state {\n\tDL_STATE_NONE = 4294967295,\n\tDL_STATE_DORMANT = 0,\n\tDL_STATE_AVAILABLE = 1,\n\tDL_STATE_CONSUMER_PROBE = 2,\n\tDL_STATE_ACTIVE = 3,\n\tDL_STATE_SUPPLIER_UNBIND = 4,\n};\n\nstruct device_link {\n\tstruct device *supplier;\n\tstruct list_head s_node;\n\tstruct device *consumer;\n\tstruct list_head c_node;\n\tstruct device link_dev;\n\tenum device_link_state status;\n\tu32 flags;\n\trefcount_t rpm_active;\n\tstruct kref kref;\n\tstruct callback_head callback_head;\n\tbool supplier_preactivated;\n};\n\nstruct phy_configure_opts_dp {\n\tunsigned int link_rate;\n\tunsigned int lanes;\n\tunsigned int voltage[4];\n\tunsigned int pre[4];\n\tu8 ssc: 1;\n\tu8 set_rate: 1;\n\tu8 set_lanes: 1;\n\tu8 set_voltages: 1;\n};\n\nstruct phy_configure_opts_mipi_dphy {\n\tunsigned int clk_miss;\n\tunsigned int clk_post;\n\tunsigned int clk_pre;\n\tunsigned int clk_prepare;\n\tunsigned int clk_settle;\n\tunsigned int clk_term_en;\n\tunsigned int clk_trail;\n\tunsigned int clk_zero;\n\tunsigned int d_term_en;\n\tunsigned int eot;\n\tunsigned int hs_exit;\n\tunsigned int hs_prepare;\n\tunsigned int hs_settle;\n\tunsigned int hs_skip;\n\tunsigned int hs_trail;\n\tunsigned int hs_zero;\n\tunsigned int init;\n\tunsigned int lpx;\n\tunsigned int ta_get;\n\tunsigned int ta_go;\n\tunsigned int ta_sure;\n\tunsigned int wakeup;\n\tlong unsigned int hs_clk_rate;\n\tlong unsigned int lp_clk_rate;\n\tunsigned char lanes;\n};\n\nenum phy_mode {\n\tPHY_MODE_INVALID = 0,\n\tPHY_MODE_USB_HOST = 1,\n\tPHY_MODE_USB_HOST_LS = 2,\n\tPHY_MODE_USB_HOST_FS = 3,\n\tPHY_MODE_USB_HOST_HS = 4,\n\tPHY_MODE_USB_HOST_SS = 5,\n\tPHY_MODE_USB_DEVICE = 6,\n\tPHY_MODE_USB_DEVICE_LS = 7,\n\tPHY_MODE_USB_DEVICE_FS = 8,\n\tPHY_MODE_USB_DEVICE_HS = 9,\n\tPHY_MODE_USB_DEVICE_SS = 10,\n\tPHY_MODE_USB_OTG = 11,\n\tPHY_MODE_UFS_HS_A = 12,\n\tPHY_MODE_UFS_HS_B = 13,\n\tPHY_MODE_PCIE = 14,\n\tPHY_MODE_ETHERNET = 15,\n\tPHY_MODE_MIPI_DPHY = 16,\n\tPHY_MODE_SATA = 17,\n\tPHY_MODE_LVDS = 18,\n\tPHY_MODE_DP = 19,\n};\n\nunion phy_configure_opts {\n\tstruct phy_configure_opts_mipi_dphy mipi_dphy;\n\tstruct phy_configure_opts_dp dp;\n};\n\nstruct phy;\n\nstruct phy_ops {\n\tint (*init)(struct phy *);\n\tint (*exit)(struct phy *);\n\tint (*power_on)(struct phy *);\n\tint (*power_off)(struct phy *);\n\tint (*set_mode)(struct phy *, enum phy_mode, int);\n\tint (*configure)(struct phy *, union phy_configure_opts *);\n\tint (*validate)(struct phy *, enum phy_mode, int, union phy_configure_opts *);\n\tint (*reset)(struct phy *);\n\tint (*calibrate)(struct phy *);\n\tvoid (*release)(struct phy *);\n\tstruct module *owner;\n};\n\nstruct phy_attrs {\n\tu32 bus_width;\n\tu32 max_link_rate;\n\tenum phy_mode mode;\n};\n\nstruct regulator;\n\nstruct phy {\n\tstruct device dev;\n\tint id;\n\tconst struct phy_ops *ops;\n\tstruct mutex mutex;\n\tint init_count;\n\tint power_count;\n\tstruct phy_attrs attrs;\n\tstruct regulator *pwr;\n};\n\nstruct phy_provider {\n\tstruct device *dev;\n\tstruct device_node *children;\n\tstruct module *owner;\n\tstruct list_head list;\n\tstruct phy * (*of_xlate)(struct device *, struct of_phandle_args *);\n};\n\nstruct phy_lookup {\n\tstruct list_head node;\n\tconst char *dev_id;\n\tconst char *con_id;\n\tstruct phy *phy;\n};\n\nstruct pinctrl;\n\nstruct pinctrl_state;\n\nstruct dev_pin_info {\n\tstruct pinctrl *p;\n\tstruct pinctrl_state *default_state;\n\tstruct pinctrl_state *init_state;\n\tstruct pinctrl_state *sleep_state;\n\tstruct pinctrl_state *idle_state;\n};\n\nstruct pinctrl {\n\tstruct list_head node;\n\tstruct device *dev;\n\tstruct list_head states;\n\tstruct pinctrl_state *state;\n\tstruct list_head dt_maps;\n\tstruct kref users;\n};\n\nstruct pinctrl_state {\n\tstruct list_head node;\n\tconst char *name;\n\tstruct list_head settings;\n};\n\nstruct pinctrl_pin_desc {\n\tunsigned int number;\n\tconst char *name;\n\tvoid *drv_data;\n};\n\nstruct gpio_chip;\n\nstruct pinctrl_gpio_range {\n\tstruct list_head node;\n\tconst char *name;\n\tunsigned int id;\n\tunsigned int base;\n\tunsigned int pin_base;\n\tunsigned int npins;\n\tconst unsigned int *pins;\n\tstruct gpio_chip *gc;\n};\n\nstruct gpio_irq_chip {\n\tstruct irq_chip *chip;\n\tstruct irq_domain *domain;\n\tconst struct irq_domain_ops *domain_ops;\n\tstruct fwnode_handle *fwnode;\n\tstruct irq_domain *parent_domain;\n\tint (*child_to_parent_hwirq)(struct gpio_chip *, unsigned int, unsigned int, unsigned int *, unsigned int *);\n\tvoid * (*populate_parent_alloc_arg)(struct gpio_chip *, unsigned int, unsigned int);\n\tunsigned int (*child_offset_to_irq)(struct gpio_chip *, unsigned int);\n\tstruct irq_domain_ops child_irq_domain_ops;\n\tirq_flow_handler_t handler;\n\tunsigned int default_type;\n\tstruct lock_class_key *lock_key;\n\tstruct lock_class_key *request_key;\n\tirq_flow_handler_t parent_handler;\n\tvoid *parent_handler_data;\n\tunsigned int num_parents;\n\tunsigned int *parents;\n\tunsigned int *map;\n\tbool threaded;\n\tint (*init_hw)(struct gpio_chip *);\n\tvoid (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);\n\tlong unsigned int *valid_mask;\n\tunsigned int first;\n\tvoid (*irq_enable)(struct irq_data *);\n\tvoid (*irq_disable)(struct irq_data *);\n\tvoid (*irq_unmask)(struct irq_data *);\n\tvoid (*irq_mask)(struct irq_data *);\n};\n\nstruct gpio_device;\n\nstruct gpio_chip {\n\tconst char *label;\n\tstruct gpio_device *gpiodev;\n\tstruct device *parent;\n\tstruct module *owner;\n\tint (*request)(struct gpio_chip *, unsigned int);\n\tvoid (*free)(struct gpio_chip *, unsigned int);\n\tint (*get_direction)(struct gpio_chip *, unsigned int);\n\tint (*direction_input)(struct gpio_chip *, unsigned int);\n\tint (*direction_output)(struct gpio_chip *, unsigned int, int);\n\tint (*get)(struct gpio_chip *, unsigned int);\n\tint (*get_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);\n\tvoid (*set)(struct gpio_chip *, unsigned int, int);\n\tvoid (*set_multiple)(struct gpio_chip *, long unsigned int *, long unsigned int *);\n\tint (*set_config)(struct gpio_chip *, unsigned int, long unsigned int);\n\tint (*to_irq)(struct gpio_chip *, unsigned int);\n\tvoid (*dbg_show)(struct seq_file *, struct gpio_chip *);\n\tint (*init_valid_mask)(struct gpio_chip *, long unsigned int *, unsigned int);\n\tint (*add_pin_ranges)(struct gpio_chip *);\n\tint base;\n\tu16 ngpio;\n\tconst char * const *names;\n\tbool can_sleep;\n\tlong unsigned int (*read_reg)(void *);\n\tvoid (*write_reg)(void *, long unsigned int);\n\tbool be_bits;\n\tvoid *reg_dat;\n\tvoid *reg_set;\n\tvoid *reg_clr;\n\tvoid *reg_dir_out;\n\tvoid *reg_dir_in;\n\tbool bgpio_dir_unreadable;\n\tint bgpio_bits;\n\tspinlock_t bgpio_lock;\n\tlong unsigned int bgpio_data;\n\tlong unsigned int bgpio_dir;\n\tstruct gpio_irq_chip irq;\n\tlong unsigned int *valid_mask;\n};\n\nstruct pinctrl_dev;\n\nstruct pinctrl_map;\n\nstruct pinctrl_ops {\n\tint (*get_groups_count)(struct pinctrl_dev *);\n\tconst char * (*get_group_name)(struct pinctrl_dev *, unsigned int);\n\tint (*get_group_pins)(struct pinctrl_dev *, unsigned int, const unsigned int **, unsigned int *);\n\tvoid (*pin_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);\n\tint (*dt_node_to_map)(struct pinctrl_dev *, struct device_node *, struct pinctrl_map **, unsigned int *);\n\tvoid (*dt_free_map)(struct pinctrl_dev *, struct pinctrl_map *, unsigned int);\n};\n\nstruct pinctrl_desc;\n\nstruct pinctrl_dev {\n\tstruct list_head node;\n\tstruct pinctrl_desc *desc;\n\tstruct xarray pin_desc_tree;\n\tstruct list_head gpio_ranges;\n\tstruct device *dev;\n\tstruct module *owner;\n\tvoid *driver_data;\n\tstruct pinctrl *p;\n\tstruct pinctrl_state *hog_default;\n\tstruct pinctrl_state *hog_sleep;\n\tstruct mutex mutex;\n\tstruct dentry *device_root;\n};\n\nenum pinctrl_map_type {\n\tPIN_MAP_TYPE_INVALID = 0,\n\tPIN_MAP_TYPE_DUMMY_STATE = 1,\n\tPIN_MAP_TYPE_MUX_GROUP = 2,\n\tPIN_MAP_TYPE_CONFIGS_PIN = 3,\n\tPIN_MAP_TYPE_CONFIGS_GROUP = 4,\n};\n\nstruct pinctrl_map_mux {\n\tconst char *group;\n\tconst char *function;\n};\n\nstruct pinctrl_map_configs {\n\tconst char *group_or_pin;\n\tlong unsigned int *configs;\n\tunsigned int num_configs;\n};\n\nstruct pinctrl_map {\n\tconst char *dev_name;\n\tconst char *name;\n\tenum pinctrl_map_type type;\n\tconst char *ctrl_dev_name;\n\tunion {\n\t\tstruct pinctrl_map_mux mux;\n\t\tstruct pinctrl_map_configs configs;\n\t} data;\n};\n\nstruct pinmux_ops;\n\nstruct pinconf_ops;\n\nstruct pinconf_generic_params;\n\nstruct pin_config_item;\n\nstruct pinctrl_desc {\n\tconst char *name;\n\tconst struct pinctrl_pin_desc *pins;\n\tunsigned int npins;\n\tconst struct pinctrl_ops *pctlops;\n\tconst struct pinmux_ops *pmxops;\n\tconst struct pinconf_ops *confops;\n\tstruct module *owner;\n\tunsigned int num_custom_params;\n\tconst struct pinconf_generic_params *custom_params;\n\tconst struct pin_config_item *custom_conf_items;\n\tbool link_consumers;\n};\n\nstruct pinmux_ops {\n\tint (*request)(struct pinctrl_dev *, unsigned int);\n\tint (*free)(struct pinctrl_dev *, unsigned int);\n\tint (*get_functions_count)(struct pinctrl_dev *);\n\tconst char * (*get_function_name)(struct pinctrl_dev *, unsigned int);\n\tint (*get_function_groups)(struct pinctrl_dev *, unsigned int, const char * const **, unsigned int *);\n\tint (*set_mux)(struct pinctrl_dev *, unsigned int, unsigned int);\n\tint (*gpio_request_enable)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);\n\tvoid (*gpio_disable_free)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int);\n\tint (*gpio_set_direction)(struct pinctrl_dev *, struct pinctrl_gpio_range *, unsigned int, bool);\n\tbool strict;\n};\n\nstruct pinconf_ops {\n\tbool is_generic;\n\tint (*pin_config_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);\n\tint (*pin_config_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);\n\tint (*pin_config_group_get)(struct pinctrl_dev *, unsigned int, long unsigned int *);\n\tint (*pin_config_group_set)(struct pinctrl_dev *, unsigned int, long unsigned int *, unsigned int);\n\tvoid (*pin_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);\n\tvoid (*pin_config_group_dbg_show)(struct pinctrl_dev *, struct seq_file *, unsigned int);\n\tvoid (*pin_config_config_dbg_show)(struct pinctrl_dev *, struct seq_file *, long unsigned int);\n};\n\nenum pin_config_param {\n\tPIN_CONFIG_BIAS_BUS_HOLD = 0,\n\tPIN_CONFIG_BIAS_DISABLE = 1,\n\tPIN_CONFIG_BIAS_HIGH_IMPEDANCE = 2,\n\tPIN_CONFIG_BIAS_PULL_DOWN = 3,\n\tPIN_CONFIG_BIAS_PULL_PIN_DEFAULT = 4,\n\tPIN_CONFIG_BIAS_PULL_UP = 5,\n\tPIN_CONFIG_DRIVE_OPEN_DRAIN = 6,\n\tPIN_CONFIG_DRIVE_OPEN_SOURCE = 7,\n\tPIN_CONFIG_DRIVE_PUSH_PULL = 8,\n\tPIN_CONFIG_DRIVE_STRENGTH = 9,\n\tPIN_CONFIG_DRIVE_STRENGTH_UA = 10,\n\tPIN_CONFIG_INPUT_DEBOUNCE = 11,\n\tPIN_CONFIG_INPUT_ENABLE = 12,\n\tPIN_CONFIG_INPUT_SCHMITT = 13,\n\tPIN_CONFIG_INPUT_SCHMITT_ENABLE = 14,\n\tPIN_CONFIG_LOW_POWER_MODE = 15,\n\tPIN_CONFIG_OUTPUT_ENABLE = 16,\n\tPIN_CONFIG_OUTPUT = 17,\n\tPIN_CONFIG_POWER_SOURCE = 18,\n\tPIN_CONFIG_SLEEP_HARDWARE_STATE = 19,\n\tPIN_CONFIG_SLEW_RATE = 20,\n\tPIN_CONFIG_SKEW_DELAY = 21,\n\tPIN_CONFIG_PERSIST_STATE = 22,\n\tPIN_CONFIG_END = 127,\n\tPIN_CONFIG_MAX = 255,\n};\n\nstruct pinconf_generic_params {\n\tconst char * const property;\n\tenum pin_config_param param;\n\tu32 default_value;\n};\n\nstruct pin_config_item {\n\tconst enum pin_config_param param;\n\tconst char * const display;\n\tconst char * const format;\n\tbool has_arg;\n};\n\nstruct gpio_desc;\n\nstruct gpio_device {\n\tint id;\n\tstruct device dev;\n\tstruct cdev chrdev;\n\tstruct device *mockdev;\n\tstruct module *owner;\n\tstruct gpio_chip *chip;\n\tstruct gpio_desc *descs;\n\tint base;\n\tu16 ngpio;\n\tconst char *label;\n\tvoid *data;\n\tstruct list_head list;\n\tstruct blocking_notifier_head notifier;\n\tstruct list_head pin_ranges;\n};\n\nstruct gpio_desc {\n\tstruct gpio_device *gdev;\n\tlong unsigned int flags;\n\tconst char *label;\n\tconst char *name;\n\tunsigned int debounce_period_us;\n};\n\nstruct pinctrl_setting_mux {\n\tunsigned int group;\n\tunsigned int func;\n};\n\nstruct pinctrl_setting_configs {\n\tunsigned int group_or_pin;\n\tlong unsigned int *configs;\n\tunsigned int num_configs;\n};\n\nstruct pinctrl_setting {\n\tstruct list_head node;\n\tenum pinctrl_map_type type;\n\tstruct pinctrl_dev *pctldev;\n\tconst char *dev_name;\n\tunion {\n\t\tstruct pinctrl_setting_mux mux;\n\t\tstruct pinctrl_setting_configs configs;\n\t} data;\n};\n\nstruct pin_desc {\n\tstruct pinctrl_dev *pctldev;\n\tconst char *name;\n\tbool dynamic_name;\n\tvoid *drv_data;\n\tunsigned int mux_usecount;\n\tconst char *mux_owner;\n\tconst struct pinctrl_setting_mux *mux_setting;\n\tconst char *gpio_owner;\n};\n\nstruct pinctrl_maps {\n\tstruct list_head node;\n\tconst struct pinctrl_map *maps;\n\tunsigned int num_maps;\n};\n\nstruct pctldev;\n\nstruct intel_pingroup {\n\tconst char *name;\n\tconst unsigned int *pins;\n\tsize_t npins;\n\tshort unsigned int mode;\n\tconst unsigned int *modes;\n};\n\nstruct intel_function {\n\tconst char *name;\n\tconst char * const *groups;\n\tsize_t ngroups;\n};\n\nstruct intel_padgroup {\n\tunsigned int reg_num;\n\tunsigned int base;\n\tunsigned int size;\n\tint gpio_base;\n\tunsigned int padown_num;\n};\n\nstruct intel_community {\n\tunsigned int barno;\n\tunsigned int padown_offset;\n\tunsigned int padcfglock_offset;\n\tunsigned int hostown_offset;\n\tunsigned int is_offset;\n\tunsigned int ie_offset;\n\tunsigned int features;\n\tunsigned int pin_base;\n\tsize_t npins;\n\tunsigned int gpp_size;\n\tunsigned int gpp_num_padown_regs;\n\tconst struct intel_padgroup *gpps;\n\tsize_t ngpps;\n\tconst unsigned int *pad_map;\n\tshort unsigned int nirqs;\n\tshort unsigned int acpi_space_id;\n\tvoid *regs;\n\tvoid *pad_regs;\n};\n\nstruct intel_pinctrl_soc_data {\n\tconst char *uid;\n\tconst struct pinctrl_pin_desc *pins;\n\tsize_t npins;\n\tconst struct intel_pingroup *groups;\n\tsize_t ngroups;\n\tconst struct intel_function *functions;\n\tsize_t nfunctions;\n\tconst struct intel_community *communities;\n\tsize_t ncommunities;\n};\n\nstruct intel_community_context;\n\nstruct intel_pad_context;\n\nstruct intel_pinctrl_context {\n\tstruct intel_pad_context *pads;\n\tstruct intel_community_context *communities;\n};\n\nstruct intel_pad_context {\n\tu32 conf0;\n\tu32 val;\n};\n\nstruct intel_pinctrl {\n\tstruct device *dev;\n\traw_spinlock_t lock;\n\tstruct pinctrl_desc pctldesc;\n\tstruct pinctrl_dev *pctldev;\n\tstruct gpio_chip chip;\n\tstruct irq_chip irqchip;\n\tconst struct intel_pinctrl_soc_data *soc;\n\tstruct intel_community *communities;\n\tsize_t ncommunities;\n\tstruct intel_pinctrl_context context;\n\tint irq;\n};\n\ntypedef acpi_status (*acpi_adr_space_handler)(u32, acpi_physical_address, u32, u64 *, void *, void *);\n\ntypedef acpi_status (*acpi_adr_space_setup)(acpi_handle, u32, void *, void **);\n\nstruct intel_pad_context___2;\n\nstruct intel_community_context___2;\n\nstruct intel_pinctrl_context___2 {\n\tstruct intel_pad_context___2 *pads;\n\tstruct intel_community_context___2 *communities;\n};\n\nstruct intel_pad_context___2 {\n\tu32 padctrl0;\n\tu32 padctrl1;\n};\n\nstruct intel_community_context___2 {\n\tunsigned int intr_lines[16];\n\tu32 saved_intmask;\n};\n\nstruct intel_pinctrl___2 {\n\tstruct device *dev;\n\traw_spinlock_t lock;\n\tstruct pinctrl_desc pctldesc;\n\tstruct pinctrl_dev *pctldev;\n\tstruct gpio_chip chip;\n\tstruct irq_chip irqchip;\n\tconst struct intel_pinctrl_soc_data *soc;\n\tstruct intel_community *communities;\n\tsize_t ncommunities;\n\tstruct intel_pinctrl_context___2 context;\n\tint irq;\n};\n\nenum {\n\tINTEL_GPIO_BASE_ZERO = 4294967294,\n\tINTEL_GPIO_BASE_NOMAP = 4294967295,\n\tINTEL_GPIO_BASE_MATCH = 0,\n};\n\nstruct intel_pad_context___3;\n\nstruct intel_community_context___3;\n\nstruct intel_pinctrl_context___3 {\n\tstruct intel_pad_context___3 *pads;\n\tstruct intel_community_context___3 *communities;\n};\n\nstruct intel_pad_context___3 {\n\tu32 padcfg0;\n\tu32 padcfg1;\n\tu32 padcfg2;\n};\n\nstruct intel_community_context___3 {\n\tu32 *intmask;\n\tu32 *hostown;\n};\n\nstruct intel_pinctrl___3 {\n\tstruct device *dev;\n\traw_spinlock_t lock;\n\tstruct pinctrl_desc pctldesc;\n\tstruct pinctrl_dev *pctldev;\n\tstruct gpio_chip chip;\n\tstruct irq_chip irqchip;\n\tconst struct intel_pinctrl_soc_data *soc;\n\tstruct intel_community *communities;\n\tsize_t ncommunities;\n\tstruct intel_pinctrl_context___3 context;\n\tint irq;\n};\n\nenum {\n\tPAD_UNLOCKED = 0,\n\tPAD_LOCKED = 1,\n\tPAD_LOCKED_TX = 2,\n\tPAD_LOCKED_FULL = 3,\n};\n\nstruct gpio_pin_range {\n\tstruct list_head node;\n\tstruct pinctrl_dev *pctldev;\n\tstruct pinctrl_gpio_range range;\n};\n\nstruct gpio_array;\n\nstruct gpio_descs {\n\tstruct gpio_array *info;\n\tunsigned int ndescs;\n\tstruct gpio_desc *desc[0];\n};\n\nstruct gpio_array {\n\tstruct gpio_desc **desc;\n\tunsigned int size;\n\tstruct gpio_chip *chip;\n\tlong unsigned int *get_mask;\n\tlong unsigned int *set_mask;\n\tlong unsigned int invert_mask[0];\n};\n\nenum gpiod_flags {\n\tGPIOD_ASIS = 0,\n\tGPIOD_IN = 1,\n\tGPIOD_OUT_LOW = 3,\n\tGPIOD_OUT_HIGH = 7,\n\tGPIOD_OUT_LOW_OPEN_DRAIN = 11,\n\tGPIOD_OUT_HIGH_OPEN_DRAIN = 15,\n};\n\nenum gpio_lookup_flags {\n\tGPIO_ACTIVE_HIGH = 0,\n\tGPIO_ACTIVE_LOW = 1,\n\tGPIO_OPEN_DRAIN = 2,\n\tGPIO_OPEN_SOURCE = 4,\n\tGPIO_PERSISTENT = 0,\n\tGPIO_TRANSITORY = 8,\n\tGPIO_PULL_UP = 16,\n\tGPIO_PULL_DOWN = 32,\n\tGPIO_LOOKUP_FLAGS_DEFAULT = 0,\n};\n\nstruct gpiod_lookup {\n\tconst char *key;\n\tu16 chip_hwnum;\n\tconst char *con_id;\n\tunsigned int idx;\n\tlong unsigned int flags;\n};\n\nstruct gpiod_lookup_table {\n\tstruct list_head list;\n\tconst char *dev_id;\n\tstruct gpiod_lookup table[0];\n};\n\nstruct gpiod_hog {\n\tstruct list_head list;\n\tconst char *chip_label;\n\tu16 chip_hwnum;\n\tconst char *line_name;\n\tlong unsigned int lflags;\n\tint dflags;\n};\n\nenum {\n\tGPIOLINE_CHANGED_REQUESTED = 1,\n\tGPIOLINE_CHANGED_RELEASED = 2,\n\tGPIOLINE_CHANGED_CONFIG = 3,\n};\n\nstruct acpi_gpio_info {\n\tstruct acpi_device *adev;\n\tenum gpiod_flags flags;\n\tbool gpioint;\n\tint pin_config;\n\tint polarity;\n\tint triggering;\n\tunsigned int debounce;\n\tunsigned int quirks;\n};\n\nstruct trace_event_raw_gpio_direction {\n\tstruct trace_entry ent;\n\tunsigned int gpio;\n\tint in;\n\tint err;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_gpio_value {\n\tstruct trace_entry ent;\n\tunsigned int gpio;\n\tint get;\n\tint value;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_gpio_direction {};\n\nstruct trace_event_data_offsets_gpio_value {};\n\ntypedef void (*btf_trace_gpio_direction)(void *, unsigned int, int, int);\n\ntypedef void (*btf_trace_gpio_value)(void *, unsigned int, int, int);\n\nstruct devres;\n\nstruct gpio {\n\tunsigned int gpio;\n\tlong unsigned int flags;\n\tconst char *label;\n};\n\nstruct gpiochip_info {\n\tchar name[32];\n\tchar label[32];\n\t__u32 lines;\n};\n\nenum gpio_v2_line_flag {\n\tGPIO_V2_LINE_FLAG_USED = 1,\n\tGPIO_V2_LINE_FLAG_ACTIVE_LOW = 2,\n\tGPIO_V2_LINE_FLAG_INPUT = 4,\n\tGPIO_V2_LINE_FLAG_OUTPUT = 8,\n\tGPIO_V2_LINE_FLAG_EDGE_RISING = 16,\n\tGPIO_V2_LINE_FLAG_EDGE_FALLING = 32,\n\tGPIO_V2_LINE_FLAG_OPEN_DRAIN = 64,\n\tGPIO_V2_LINE_FLAG_OPEN_SOURCE = 128,\n\tGPIO_V2_LINE_FLAG_BIAS_PULL_UP = 256,\n\tGPIO_V2_LINE_FLAG_BIAS_PULL_DOWN = 512,\n\tGPIO_V2_LINE_FLAG_BIAS_DISABLED = 1024,\n\tGPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME = 2048,\n};\n\nstruct gpio_v2_line_values {\n\t__u64 bits;\n\t__u64 mask;\n};\n\nenum gpio_v2_line_attr_id {\n\tGPIO_V2_LINE_ATTR_ID_FLAGS = 1,\n\tGPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES = 2,\n\tGPIO_V2_LINE_ATTR_ID_DEBOUNCE = 3,\n};\n\nstruct gpio_v2_line_attribute {\n\t__u32 id;\n\t__u32 padding;\n\tunion {\n\t\t__u64 flags;\n\t\t__u64 values;\n\t\t__u32 debounce_period_us;\n\t};\n};\n\nstruct gpio_v2_line_config_attribute {\n\tstruct gpio_v2_line_attribute attr;\n\t__u64 mask;\n};\n\nstruct gpio_v2_line_config {\n\t__u64 flags;\n\t__u32 num_attrs;\n\t__u32 padding[5];\n\tstruct gpio_v2_line_config_attribute attrs[10];\n};\n\nstruct gpio_v2_line_request {\n\t__u32 offsets[64];\n\tchar consumer[32];\n\tstruct gpio_v2_line_config config;\n\t__u32 num_lines;\n\t__u32 event_buffer_size;\n\t__u32 padding[5];\n\t__s32 fd;\n};\n\nstruct gpio_v2_line_info {\n\tchar name[32];\n\tchar consumer[32];\n\t__u32 offset;\n\t__u32 num_attrs;\n\t__u64 flags;\n\tstruct gpio_v2_line_attribute attrs[10];\n\t__u32 padding[4];\n};\n\nenum gpio_v2_line_changed_type {\n\tGPIO_V2_LINE_CHANGED_REQUESTED = 1,\n\tGPIO_V2_LINE_CHANGED_RELEASED = 2,\n\tGPIO_V2_LINE_CHANGED_CONFIG = 3,\n};\n\nstruct gpio_v2_line_info_changed {\n\tstruct gpio_v2_line_info info;\n\t__u64 timestamp_ns;\n\t__u32 event_type;\n\t__u32 padding[5];\n};\n\nenum gpio_v2_line_event_id {\n\tGPIO_V2_LINE_EVENT_RISING_EDGE = 1,\n\tGPIO_V2_LINE_EVENT_FALLING_EDGE = 2,\n};\n\nstruct gpio_v2_line_event {\n\t__u64 timestamp_ns;\n\t__u32 id;\n\t__u32 offset;\n\t__u32 seqno;\n\t__u32 line_seqno;\n\t__u32 padding[6];\n};\n\nstruct gpioline_info {\n\t__u32 line_offset;\n\t__u32 flags;\n\tchar name[32];\n\tchar consumer[32];\n};\n\nstruct gpioline_info_changed {\n\tstruct gpioline_info info;\n\t__u64 timestamp;\n\t__u32 event_type;\n\t__u32 padding[5];\n};\n\nstruct gpiohandle_request {\n\t__u32 lineoffsets[64];\n\t__u32 flags;\n\t__u8 default_values[64];\n\tchar consumer_label[32];\n\t__u32 lines;\n\tint fd;\n};\n\nstruct gpiohandle_config {\n\t__u32 flags;\n\t__u8 default_values[64];\n\t__u32 padding[4];\n};\n\nstruct gpiohandle_data {\n\t__u8 values[64];\n};\n\nstruct gpioevent_request {\n\t__u32 lineoffset;\n\t__u32 handleflags;\n\t__u32 eventflags;\n\tchar consumer_label[32];\n\tint fd;\n};\n\nstruct gpioevent_data {\n\t__u64 timestamp;\n\t__u32 id;\n};\n\nstruct linehandle_state {\n\tstruct gpio_device *gdev;\n\tconst char *label;\n\tstruct gpio_desc *descs[64];\n\tu32 num_descs;\n};\n\nstruct linereq;\n\nstruct line {\n\tstruct gpio_desc *desc;\n\tstruct linereq *req;\n\tunsigned int irq;\n\tu64 eflags;\n\tu64 timestamp_ns;\n\tu32 req_seqno;\n\tu32 line_seqno;\n\tstruct delayed_work work;\n\tunsigned int sw_debounced;\n\tunsigned int level;\n};\n\nstruct linereq {\n\tstruct gpio_device *gdev;\n\tconst char *label;\n\tu32 num_lines;\n\twait_queue_head_t wait;\n\tu32 event_buffer_size;\n\tstruct {\n\t\tunion {\n\t\t\tstruct __kfifo kfifo;\n\t\t\tstruct gpio_v2_line_event *type;\n\t\t\tconst struct gpio_v2_line_event *const_type;\n\t\t\tchar (*rectype)[0];\n\t\t\tstruct gpio_v2_line_event *ptr;\n\t\t\tconst struct gpio_v2_line_event *ptr_const;\n\t\t};\n\t\tstruct gpio_v2_line_event buf[0];\n\t} events;\n\tatomic_t seqno;\n\tstruct mutex config_mutex;\n\tstruct line lines[0];\n};\n\nstruct lineevent_state {\n\tstruct gpio_device *gdev;\n\tconst char *label;\n\tstruct gpio_desc *desc;\n\tu32 eflags;\n\tint irq;\n\twait_queue_head_t wait;\n\tstruct {\n\t\tunion {\n\t\t\tstruct __kfifo kfifo;\n\t\t\tstruct gpioevent_data *type;\n\t\t\tconst struct gpioevent_data *const_type;\n\t\t\tchar (*rectype)[0];\n\t\t\tstruct gpioevent_data *ptr;\n\t\t\tconst struct gpioevent_data *ptr_const;\n\t\t};\n\t\tstruct gpioevent_data buf[16];\n\t} events;\n\tu64 timestamp;\n};\n\nstruct gpio_chardev_data {\n\tstruct gpio_device *gdev;\n\twait_queue_head_t wait;\n\tstruct {\n\t\tunion {\n\t\t\tstruct __kfifo kfifo;\n\t\t\tstruct gpio_v2_line_info_changed *type;\n\t\t\tconst struct gpio_v2_line_info_changed *const_type;\n\t\t\tchar (*rectype)[0];\n\t\t\tstruct gpio_v2_line_info_changed *ptr;\n\t\t\tconst struct gpio_v2_line_info_changed *ptr_const;\n\t\t};\n\t\tstruct gpio_v2_line_info_changed buf[32];\n\t} events;\n\tstruct notifier_block lineinfo_changed_nb;\n\tlong unsigned int *watched_lines;\n\tatomic_t watch_abi_version;\n};\n\ntypedef u64 acpi_size;\n\nstruct acpi_buffer {\n\tacpi_size length;\n\tvoid *pointer;\n};\n\ntypedef void (*acpi_object_handler)(acpi_handle, void *);\n\nstruct acpi_connection_info {\n\tu8 *connection;\n\tu16 length;\n\tu8 access_length;\n};\n\nstruct acpi_resource_irq {\n\tu8 descriptor_length;\n\tu8 triggering;\n\tu8 polarity;\n\tu8 shareable;\n\tu8 wake_capable;\n\tu8 interrupt_count;\n\tu8 interrupts[1];\n};\n\nstruct acpi_resource_dma {\n\tu8 type;\n\tu8 bus_master;\n\tu8 transfer;\n\tu8 channel_count;\n\tu8 channels[1];\n};\n\nstruct acpi_resource_start_dependent {\n\tu8 descriptor_length;\n\tu8 compatibility_priority;\n\tu8 performance_robustness;\n};\n\nstruct acpi_resource_io {\n\tu8 io_decode;\n\tu8 alignment;\n\tu8 address_length;\n\tu16 minimum;\n\tu16 maximum;\n} __attribute__((packed));\n\nstruct acpi_resource_fixed_io {\n\tu16 address;\n\tu8 address_length;\n} __attribute__((packed));\n\nstruct acpi_resource_fixed_dma {\n\tu16 request_lines;\n\tu16 channels;\n\tu8 width;\n} __attribute__((packed));\n\nstruct acpi_resource_vendor {\n\tu16 byte_length;\n\tu8 byte_data[1];\n} __attribute__((packed));\n\nstruct acpi_resource_vendor_typed {\n\tu16 byte_length;\n\tu8 uuid_subtype;\n\tu8 uuid[16];\n\tu8 byte_data[1];\n};\n\nstruct acpi_resource_end_tag {\n\tu8 checksum;\n};\n\nstruct acpi_resource_memory24 {\n\tu8 write_protect;\n\tu16 minimum;\n\tu16 maximum;\n\tu16 alignment;\n\tu16 address_length;\n} __attribute__((packed));\n\nstruct acpi_resource_memory32 {\n\tu8 write_protect;\n\tu32 minimum;\n\tu32 maximum;\n\tu32 alignment;\n\tu32 address_length;\n} __attribute__((packed));\n\nstruct acpi_resource_fixed_memory32 {\n\tu8 write_protect;\n\tu32 address;\n\tu32 address_length;\n} __attribute__((packed));\n\nstruct acpi_memory_attribute {\n\tu8 write_protect;\n\tu8 caching;\n\tu8 range_type;\n\tu8 translation;\n};\n\nstruct acpi_io_attribute {\n\tu8 range_type;\n\tu8 translation;\n\tu8 translation_type;\n\tu8 reserved1;\n};\n\nunion acpi_resource_attribute {\n\tstruct acpi_memory_attribute mem;\n\tstruct acpi_io_attribute io;\n\tu8 type_specific;\n};\n\nstruct acpi_resource_label {\n\tu16 string_length;\n\tchar *string_ptr;\n} __attribute__((packed));\n\nstruct acpi_resource_source {\n\tu8 index;\n\tu16 string_length;\n\tchar *string_ptr;\n} __attribute__((packed));\n\nstruct acpi_address16_attribute {\n\tu16 granularity;\n\tu16 minimum;\n\tu16 maximum;\n\tu16 translation_offset;\n\tu16 address_length;\n};\n\nstruct acpi_address32_attribute {\n\tu32 granularity;\n\tu32 minimum;\n\tu32 maximum;\n\tu32 translation_offset;\n\tu32 address_length;\n};\n\nstruct acpi_address64_attribute {\n\tu64 granularity;\n\tu64 minimum;\n\tu64 maximum;\n\tu64 translation_offset;\n\tu64 address_length;\n};\n\nstruct acpi_resource_address {\n\tu8 resource_type;\n\tu8 producer_consumer;\n\tu8 decode;\n\tu8 min_address_fixed;\n\tu8 max_address_fixed;\n\tunion acpi_resource_attribute info;\n};\n\nstruct acpi_resource_address16 {\n\tu8 resource_type;\n\tu8 producer_consumer;\n\tu8 decode;\n\tu8 min_address_fixed;\n\tu8 max_address_fixed;\n\tunion acpi_resource_attribute info;\n\tstruct acpi_address16_attribute address;\n\tstruct acpi_resource_source resource_source;\n} __attribute__((packed));\n\nstruct acpi_resource_address32 {\n\tu8 resource_type;\n\tu8 producer_consumer;\n\tu8 decode;\n\tu8 min_address_fixed;\n\tu8 max_address_fixed;\n\tunion acpi_resource_attribute info;\n\tstruct acpi_address32_attribute address;\n\tstruct acpi_resource_source resource_source;\n} __attribute__((packed));\n\nstruct acpi_resource_address64 {\n\tu8 resource_type;\n\tu8 producer_consumer;\n\tu8 decode;\n\tu8 min_address_fixed;\n\tu8 max_address_fixed;\n\tunion acpi_resource_attribute info;\n\tstruct acpi_address64_attribute address;\n\tstruct acpi_resource_source resource_source;\n} __attribute__((packed));\n\nstruct acpi_resource_extended_address64 {\n\tu8 resource_type;\n\tu8 producer_consumer;\n\tu8 decode;\n\tu8 min_address_fixed;\n\tu8 max_address_fixed;\n\tunion acpi_resource_attribute info;\n\tu8 revision_ID;\n\tstruct acpi_address64_attribute address;\n\tu64 type_specific;\n} __attribute__((packed));\n\nstruct acpi_resource_extended_irq {\n\tu8 producer_consumer;\n\tu8 triggering;\n\tu8 polarity;\n\tu8 shareable;\n\tu8 wake_capable;\n\tu8 interrupt_count;\n\tstruct acpi_resource_source resource_source;\n\tu32 interrupts[1];\n} __attribute__((packed));\n\nstruct acpi_resource_generic_register {\n\tu8 space_id;\n\tu8 bit_width;\n\tu8 bit_offset;\n\tu8 access_size;\n\tu64 address;\n} __attribute__((packed));\n\nstruct acpi_resource_gpio {\n\tu8 revision_id;\n\tu8 connection_type;\n\tu8 producer_consumer;\n\tu8 pin_config;\n\tu8 shareable;\n\tu8 wake_capable;\n\tu8 io_restriction;\n\tu8 triggering;\n\tu8 polarity;\n\tu16 drive_strength;\n\tu16 debounce_timeout;\n\tu16 pin_table_length;\n\tu16 vendor_length;\n\tstruct acpi_resource_source resource_source;\n\tu16 *pin_table;\n\tu8 *vendor_data;\n} __attribute__((packed));\n\nstruct acpi_resource_common_serialbus {\n\tu8 revision_id;\n\tu8 type;\n\tu8 producer_consumer;\n\tu8 slave_mode;\n\tu8 connection_sharing;\n\tu8 type_revision_id;\n\tu16 type_data_length;\n\tu16 vendor_length;\n\tstruct acpi_resource_source resource_source;\n\tu8 *vendor_data;\n} __attribute__((packed));\n\nstruct acpi_resource_i2c_serialbus {\n\tu8 revision_id;\n\tu8 type;\n\tu8 producer_consumer;\n\tu8 slave_mode;\n\tu8 connection_sharing;\n\tu8 type_revision_id;\n\tu16 type_data_length;\n\tu16 vendor_length;\n\tstruct acpi_resource_source resource_source;\n\tu8 *vendor_data;\n\tu8 access_mode;\n\tu16 slave_address;\n\tu32 connection_speed;\n} __attribute__((packed));\n\nstruct acpi_resource_spi_serialbus {\n\tu8 revision_id;\n\tu8 type;\n\tu8 producer_consumer;\n\tu8 slave_mode;\n\tu8 connection_sharing;\n\tu8 type_revision_id;\n\tu16 type_data_length;\n\tu16 vendor_length;\n\tstruct acpi_resource_source resource_source;\n\tu8 *vendor_data;\n\tu8 wire_mode;\n\tu8 device_polarity;\n\tu8 data_bit_length;\n\tu8 clock_phase;\n\tu8 clock_polarity;\n\tu16 device_selection;\n\tu32 connection_speed;\n} __attribute__((packed));\n\nstruct acpi_resource_uart_serialbus {\n\tu8 revision_id;\n\tu8 type;\n\tu8 producer_consumer;\n\tu8 slave_mode;\n\tu8 connection_sharing;\n\tu8 type_revision_id;\n\tu16 type_data_length;\n\tu16 vendor_length;\n\tstruct acpi_resource_source resource_source;\n\tu8 *vendor_data;\n\tu8 endian;\n\tu8 data_bits;\n\tu8 stop_bits;\n\tu8 flow_control;\n\tu8 parity;\n\tu8 lines_enabled;\n\tu16 rx_fifo_size;\n\tu16 tx_fifo_size;\n\tu32 default_baud_rate;\n} __attribute__((packed));\n\nstruct acpi_resource_pin_function {\n\tu8 revision_id;\n\tu8 pin_config;\n\tu8 shareable;\n\tu16 function_number;\n\tu16 pin_table_length;\n\tu16 vendor_length;\n\tstruct acpi_resource_source resource_source;\n\tu16 *pin_table;\n\tu8 *vendor_data;\n} __attribute__((packed));\n\nstruct acpi_resource_pin_config {\n\tu8 revision_id;\n\tu8 producer_consumer;\n\tu8 shareable;\n\tu8 pin_config_type;\n\tu32 pin_config_value;\n\tu16 pin_table_length;\n\tu16 vendor_length;\n\tstruct acpi_resource_source resource_source;\n\tu16 *pin_table;\n\tu8 *vendor_data;\n} __attribute__((packed));\n\nstruct acpi_resource_pin_group {\n\tu8 revision_id;\n\tu8 producer_consumer;\n\tu16 pin_table_length;\n\tu16 vendor_length;\n\tu16 *pin_table;\n\tstruct acpi_resource_label resource_label;\n\tu8 *vendor_data;\n} __attribute__((packed));\n\nstruct acpi_resource_pin_group_function {\n\tu8 revision_id;\n\tu8 producer_consumer;\n\tu8 shareable;\n\tu16 function_number;\n\tu16 vendor_length;\n\tstruct acpi_resource_source resource_source;\n\tstruct acpi_resource_label resource_source_label;\n\tu8 *vendor_data;\n} __attribute__((packed));\n\nstruct acpi_resource_pin_group_config {\n\tu8 revision_id;\n\tu8 producer_consumer;\n\tu8 shareable;\n\tu8 pin_config_type;\n\tu32 pin_config_value;\n\tu16 vendor_length;\n\tstruct acpi_resource_source resource_source;\n\tstruct acpi_resource_label resource_source_label;\n\tu8 *vendor_data;\n} __attribute__((packed));\n\nunion acpi_resource_data {\n\tstruct acpi_resource_irq irq;\n\tstruct acpi_resource_dma dma;\n\tstruct acpi_resource_start_dependent start_dpf;\n\tstruct acpi_resource_io io;\n\tstruct acpi_resource_fixed_io fixed_io;\n\tstruct acpi_resource_fixed_dma fixed_dma;\n\tstruct acpi_resource_vendor vendor;\n\tstruct acpi_resource_vendor_typed vendor_typed;\n\tstruct acpi_resource_end_tag end_tag;\n\tstruct acpi_resource_memory24 memory24;\n\tstruct acpi_resource_memory32 memory32;\n\tstruct acpi_resource_fixed_memory32 fixed_memory32;\n\tstruct acpi_resource_address16 address16;\n\tstruct acpi_resource_address32 address32;\n\tstruct acpi_resource_address64 address64;\n\tstruct acpi_resource_extended_address64 ext_address64;\n\tstruct acpi_resource_extended_irq extended_irq;\n\tstruct acpi_resource_generic_register generic_reg;\n\tstruct acpi_resource_gpio gpio;\n\tstruct acpi_resource_i2c_serialbus i2c_serial_bus;\n\tstruct acpi_resource_spi_serialbus spi_serial_bus;\n\tstruct acpi_resource_uart_serialbus uart_serial_bus;\n\tstruct acpi_resource_common_serialbus common_serial_bus;\n\tstruct acpi_resource_pin_function pin_function;\n\tstruct acpi_resource_pin_config pin_config;\n\tstruct acpi_resource_pin_group pin_group;\n\tstruct acpi_resource_pin_group_function pin_group_function;\n\tstruct acpi_resource_pin_group_config pin_group_config;\n\tstruct acpi_resource_address address;\n};\n\nstruct acpi_resource {\n\tu32 type;\n\tu32 length;\n\tunion acpi_resource_data data;\n} __attribute__((packed));\n\ntypedef acpi_status (*acpi_walk_resource_callback)(struct acpi_resource *, void *);\n\nstruct acpi_gpiolib_dmi_quirk {\n\tbool no_edge_events_on_boot;\n\tchar *ignore_wake;\n};\n\nstruct acpi_gpio_event {\n\tstruct list_head node;\n\tacpi_handle handle;\n\tirq_handler_t handler;\n\tunsigned int pin;\n\tunsigned int irq;\n\tlong unsigned int irqflags;\n\tbool irq_is_wake;\n\tbool irq_requested;\n\tstruct gpio_desc *desc;\n};\n\nstruct acpi_gpio_connection {\n\tstruct list_head node;\n\tunsigned int pin;\n\tstruct gpio_desc *desc;\n};\n\nstruct acpi_gpio_chip {\n\tstruct acpi_connection_info conn_info;\n\tstruct list_head conns;\n\tstruct mutex conn_lock;\n\tstruct gpio_chip *chip;\n\tstruct list_head events;\n\tstruct list_head deferred_req_irqs_list_entry;\n};\n\nstruct acpi_gpio_lookup {\n\tstruct acpi_gpio_info info;\n\tint index;\n\tu16 pin_index;\n\tbool active_low;\n\tstruct gpio_desc *desc;\n\tint n;\n};\n\nstruct regmap;\n\nstruct regmap_irq_chip_data;\n\nstruct intel_scu_ipc_dev;\n\nstruct intel_soc_pmic {\n\tint irq;\n\tstruct regmap *regmap;\n\tstruct regmap_irq_chip_data *irq_chip_data;\n\tstruct regmap_irq_chip_data *irq_chip_data_pwrbtn;\n\tstruct regmap_irq_chip_data *irq_chip_data_tmu;\n\tstruct regmap_irq_chip_data *irq_chip_data_bcu;\n\tstruct regmap_irq_chip_data *irq_chip_data_adc;\n\tstruct regmap_irq_chip_data *irq_chip_data_chgr;\n\tstruct regmap_irq_chip_data *irq_chip_data_crit;\n\tstruct device *dev;\n\tstruct intel_scu_ipc_dev *scu;\n};\n\nenum ctrl_register {\n\tCTRL_IN = 0,\n\tCTRL_OUT = 1,\n};\n\nstruct crystalcove_gpio {\n\tstruct mutex buslock;\n\tstruct gpio_chip chip;\n\tstruct regmap *regmap;\n\tint update;\n\tint intcnt_value;\n\tbool set_irq_mask;\n};\n\nstruct intel_msic_gpio_pdata {\n\tunsigned int gpio_base;\n};\n\nenum intel_msic_block {\n\tINTEL_MSIC_BLOCK_TOUCH = 0,\n\tINTEL_MSIC_BLOCK_ADC = 1,\n\tINTEL_MSIC_BLOCK_BATTERY = 2,\n\tINTEL_MSIC_BLOCK_GPIO = 3,\n\tINTEL_MSIC_BLOCK_AUDIO = 4,\n\tINTEL_MSIC_BLOCK_HDMI = 5,\n\tINTEL_MSIC_BLOCK_THERMAL = 6,\n\tINTEL_MSIC_BLOCK_POWER_BTN = 7,\n\tINTEL_MSIC_BLOCK_OCD = 8,\n\tINTEL_MSIC_BLOCK_LAST = 9,\n};\n\nstruct msic_gpio {\n\tstruct platform_device *pdev;\n\tstruct mutex buslock;\n\tstruct gpio_chip chip;\n\tint irq;\n\tunsigned int irq_base;\n\tlong unsigned int trig_change_mask;\n\tunsigned int trig_type;\n};\n\nstruct intel_msic;\n\nstruct tps68470_gpio_data {\n\tstruct regmap *tps68470_regmap;\n\tstruct gpio_chip gc;\n};\n\nenum pwm_polarity {\n\tPWM_POLARITY_NORMAL = 0,\n\tPWM_POLARITY_INVERSED = 1,\n};\n\nstruct pwm_args {\n\tu64 period;\n\tenum pwm_polarity polarity;\n};\n\nenum {\n\tPWMF_REQUESTED = 1,\n\tPWMF_EXPORTED = 2,\n};\n\nstruct pwm_state {\n\tu64 period;\n\tu64 duty_cycle;\n\tenum pwm_polarity polarity;\n\tbool enabled;\n};\n\nstruct pwm_chip;\n\nstruct pwm_device {\n\tconst char *label;\n\tlong unsigned int flags;\n\tunsigned int hwpwm;\n\tunsigned int pwm;\n\tstruct pwm_chip *chip;\n\tvoid *chip_data;\n\tstruct pwm_args args;\n\tstruct pwm_state state;\n\tstruct pwm_state last;\n};\n\nstruct pwm_ops;\n\nstruct pwm_chip {\n\tstruct device *dev;\n\tconst struct pwm_ops *ops;\n\tint base;\n\tunsigned int npwm;\n\tstruct pwm_device * (*of_xlate)(struct pwm_chip *, const struct of_phandle_args *);\n\tunsigned int of_pwm_n_cells;\n\tstruct list_head list;\n\tstruct pwm_device *pwms;\n};\n\nstruct pwm_capture;\n\nstruct pwm_ops {\n\tint (*request)(struct pwm_chip *, struct pwm_device *);\n\tvoid (*free)(struct pwm_chip *, struct pwm_device *);\n\tint (*capture)(struct pwm_chip *, struct pwm_device *, struct pwm_capture *, long unsigned int);\n\tint (*apply)(struct pwm_chip *, struct pwm_device *, const struct pwm_state *);\n\tvoid (*get_state)(struct pwm_chip *, struct pwm_device *, struct pwm_state *);\n\tstruct module *owner;\n\tint (*config)(struct pwm_chip *, struct pwm_device *, int, int);\n\tint (*set_polarity)(struct pwm_chip *, struct pwm_device *, enum pwm_polarity);\n\tint (*enable)(struct pwm_chip *, struct pwm_device *);\n\tvoid (*disable)(struct pwm_chip *, struct pwm_device *);\n};\n\nstruct pwm_capture {\n\tunsigned int period;\n\tunsigned int duty_cycle;\n};\n\nstruct pwm_lookup {\n\tstruct list_head list;\n\tconst char *provider;\n\tunsigned int index;\n\tconst char *dev_id;\n\tconst char *con_id;\n\tunsigned int period;\n\tenum pwm_polarity polarity;\n\tconst char *module;\n};\n\nstruct trace_event_raw_pwm {\n\tstruct trace_entry ent;\n\tstruct pwm_device *pwm;\n\tu64 period;\n\tu64 duty_cycle;\n\tenum pwm_polarity polarity;\n\tbool enabled;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_pwm {};\n\ntypedef void (*btf_trace_pwm_apply)(void *, struct pwm_device *, const struct pwm_state *);\n\ntypedef void (*btf_trace_pwm_get)(void *, struct pwm_device *, const struct pwm_state *);\n\nstruct pwm_export {\n\tstruct device child;\n\tstruct pwm_device *pwm;\n\tstruct mutex lock;\n\tstruct pwm_state suspend;\n};\n\nstruct crystalcove_pwm {\n\tstruct pwm_chip chip;\n\tstruct regmap *regmap;\n};\n\nenum {\n\tpci_channel_io_normal = 1,\n\tpci_channel_io_frozen = 2,\n\tpci_channel_io_perm_failure = 3,\n};\n\nstruct pci_sriov {\n\tint pos;\n\tint nres;\n\tu32 cap;\n\tu16 ctrl;\n\tu16 total_VFs;\n\tu16 initial_VFs;\n\tu16 num_VFs;\n\tu16 offset;\n\tu16 stride;\n\tu16 vf_device;\n\tu32 pgsz;\n\tu8 link;\n\tu8 max_VF_buses;\n\tu16 driver_max_VFs;\n\tstruct pci_dev *dev;\n\tstruct pci_dev *self;\n\tu32 class;\n\tu8 hdr_type;\n\tu16 subsystem_vendor;\n\tu16 subsystem_device;\n\tresource_size_t barsz[6];\n\tbool drivers_autoprobe;\n};\n\nstruct rcec_ea {\n\tu8 nextbusn;\n\tu8 lastbusn;\n\tu32 bitmap;\n};\n\nstruct pci_bus_resource {\n\tstruct list_head list;\n\tstruct resource *res;\n\tunsigned int flags;\n};\n\ntypedef u64 pci_bus_addr_t;\n\nstruct pci_bus_region {\n\tpci_bus_addr_t start;\n\tpci_bus_addr_t end;\n};\n\nenum pci_fixup_pass {\n\tpci_fixup_early = 0,\n\tpci_fixup_header = 1,\n\tpci_fixup_final = 2,\n\tpci_fixup_enable = 3,\n\tpci_fixup_resume = 4,\n\tpci_fixup_suspend = 5,\n\tpci_fixup_resume_early = 6,\n\tpci_fixup_suspend_late = 7,\n};\n\nstruct hotplug_slot_ops;\n\nstruct hotplug_slot {\n\tconst struct hotplug_slot_ops *ops;\n\tstruct list_head slot_list;\n\tstruct pci_slot *pci_slot;\n\tstruct module *owner;\n\tconst char *mod_name;\n};\n\nenum pci_dev_flags {\n\tPCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG = 1,\n\tPCI_DEV_FLAGS_NO_D3 = 2,\n\tPCI_DEV_FLAGS_ASSIGNED = 4,\n\tPCI_DEV_FLAGS_ACS_ENABLED_QUIRK = 8,\n\tPCI_DEV_FLAG_PCIE_BRIDGE_ALIAS = 32,\n\tPCI_DEV_FLAGS_NO_BUS_RESET = 64,\n\tPCI_DEV_FLAGS_NO_PM_RESET = 128,\n\tPCI_DEV_FLAGS_VPD_REF_F0 = 256,\n\tPCI_DEV_FLAGS_BRIDGE_XLATE_ROOT = 512,\n\tPCI_DEV_FLAGS_NO_FLR_RESET = 1024,\n\tPCI_DEV_FLAGS_NO_RELAXED_ORDERING = 2048,\n};\n\nenum pci_bus_flags {\n\tPCI_BUS_FLAGS_NO_MSI = 1,\n\tPCI_BUS_FLAGS_NO_MMRBC = 2,\n\tPCI_BUS_FLAGS_NO_AERSID = 4,\n\tPCI_BUS_FLAGS_NO_EXTCFG = 8,\n};\n\nenum pci_bus_speed {\n\tPCI_SPEED_33MHz = 0,\n\tPCI_SPEED_66MHz = 1,\n\tPCI_SPEED_66MHz_PCIX = 2,\n\tPCI_SPEED_100MHz_PCIX = 3,\n\tPCI_SPEED_133MHz_PCIX = 4,\n\tPCI_SPEED_66MHz_PCIX_ECC = 5,\n\tPCI_SPEED_100MHz_PCIX_ECC = 6,\n\tPCI_SPEED_133MHz_PCIX_ECC = 7,\n\tPCI_SPEED_66MHz_PCIX_266 = 9,\n\tPCI_SPEED_100MHz_PCIX_266 = 10,\n\tPCI_SPEED_133MHz_PCIX_266 = 11,\n\tAGP_UNKNOWN = 12,\n\tAGP_1X = 13,\n\tAGP_2X = 14,\n\tAGP_4X = 15,\n\tAGP_8X = 16,\n\tPCI_SPEED_66MHz_PCIX_533 = 17,\n\tPCI_SPEED_100MHz_PCIX_533 = 18,\n\tPCI_SPEED_133MHz_PCIX_533 = 19,\n\tPCIE_SPEED_2_5GT = 20,\n\tPCIE_SPEED_5_0GT = 21,\n\tPCIE_SPEED_8_0GT = 22,\n\tPCIE_SPEED_16_0GT = 23,\n\tPCIE_SPEED_32_0GT = 24,\n\tPCIE_SPEED_64_0GT = 25,\n\tPCI_SPEED_UNKNOWN = 255,\n};\n\nstruct pci_host_bridge {\n\tstruct device dev;\n\tstruct pci_bus *bus;\n\tstruct pci_ops *ops;\n\tstruct pci_ops *child_ops;\n\tvoid *sysdata;\n\tint busnr;\n\tstruct list_head windows;\n\tstruct list_head dma_ranges;\n\tu8 (*swizzle_irq)(struct pci_dev *, u8 *);\n\tint (*map_irq)(const struct pci_dev *, u8, u8);\n\tvoid (*release_fn)(struct pci_host_bridge *);\n\tvoid *release_data;\n\tstruct msi_controller *msi;\n\tunsigned int ignore_reset_delay: 1;\n\tunsigned int no_ext_tags: 1;\n\tunsigned int native_aer: 1;\n\tunsigned int native_pcie_hotplug: 1;\n\tunsigned int native_shpc_hotplug: 1;\n\tunsigned int native_pme: 1;\n\tunsigned int native_ltr: 1;\n\tunsigned int native_dpc: 1;\n\tunsigned int preserve_config: 1;\n\tunsigned int size_windows: 1;\n\tresource_size_t (*align_resource)(struct pci_dev *, const struct resource *, resource_size_t, resource_size_t, resource_size_t);\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong unsigned int private[0];\n};\n\nenum {\n\tPCI_REASSIGN_ALL_RSRC = 1,\n\tPCI_REASSIGN_ALL_BUS = 2,\n\tPCI_PROBE_ONLY = 4,\n\tPCI_CAN_SKIP_ISA_ALIGN = 8,\n\tPCI_ENABLE_PROC_DOMAINS = 16,\n\tPCI_COMPAT_DOMAIN_0 = 32,\n\tPCI_SCAN_ALL_PCIE_DEVS = 64,\n};\n\nenum pcie_bus_config_types {\n\tPCIE_BUS_TUNE_OFF = 0,\n\tPCIE_BUS_DEFAULT = 1,\n\tPCIE_BUS_SAFE = 2,\n\tPCIE_BUS_PERFORMANCE = 3,\n\tPCIE_BUS_PEER2PEER = 4,\n};\n\nstruct hotplug_slot_ops {\n\tint (*enable_slot)(struct hotplug_slot *);\n\tint (*disable_slot)(struct hotplug_slot *);\n\tint (*set_attention_status)(struct hotplug_slot *, u8);\n\tint (*hardware_test)(struct hotplug_slot *, u32);\n\tint (*get_power_status)(struct hotplug_slot *, u8 *);\n\tint (*get_attention_status)(struct hotplug_slot *, u8 *);\n\tint (*get_latch_status)(struct hotplug_slot *, u8 *);\n\tint (*get_adapter_status)(struct hotplug_slot *, u8 *);\n\tint (*reset_slot)(struct hotplug_slot *, int);\n};\n\nenum pci_bar_type {\n\tpci_bar_unknown = 0,\n\tpci_bar_io = 1,\n\tpci_bar_mem32 = 2,\n\tpci_bar_mem64 = 3,\n};\n\nstruct pci_domain_busn_res {\n\tstruct list_head list;\n\tstruct resource res;\n\tint domain_nr;\n};\n\nstruct bus_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct bus_type *, char *);\n\tssize_t (*store)(struct bus_type *, const char *, size_t);\n};\n\nenum pcie_reset_state {\n\tpcie_deassert_reset = 1,\n\tpcie_warm_reset = 2,\n\tpcie_hot_reset = 3,\n};\n\nenum pcie_link_width {\n\tPCIE_LNK_WIDTH_RESRV = 0,\n\tPCIE_LNK_X1 = 1,\n\tPCIE_LNK_X2 = 2,\n\tPCIE_LNK_X4 = 4,\n\tPCIE_LNK_X8 = 8,\n\tPCIE_LNK_X12 = 12,\n\tPCIE_LNK_X16 = 16,\n\tPCIE_LNK_X32 = 32,\n\tPCIE_LNK_WIDTH_UNKNOWN = 255,\n};\n\nstruct pci_cap_saved_data {\n\tu16 cap_nr;\n\tbool cap_extended;\n\tunsigned int size;\n\tu32 data[0];\n};\n\nstruct pci_cap_saved_state {\n\tstruct hlist_node next;\n\tstruct pci_cap_saved_data cap;\n};\n\nstruct pci_platform_pm_ops {\n\tbool (*bridge_d3)(struct pci_dev *);\n\tbool (*is_manageable)(struct pci_dev *);\n\tint (*set_state)(struct pci_dev *, pci_power_t);\n\tpci_power_t (*get_state)(struct pci_dev *);\n\tvoid (*refresh_state)(struct pci_dev *);\n\tpci_power_t (*choose_state)(struct pci_dev *);\n\tint (*set_wakeup)(struct pci_dev *, bool);\n\tbool (*need_resume)(struct pci_dev *);\n};\n\nstruct pci_pme_device {\n\tstruct list_head list;\n\tstruct pci_dev *dev;\n};\n\nstruct pci_saved_state {\n\tu32 config_space[16];\n\tstruct pci_cap_saved_data cap[0];\n};\n\nstruct pci_devres {\n\tunsigned int enabled: 1;\n\tunsigned int pinned: 1;\n\tunsigned int orig_intx: 1;\n\tunsigned int restore_intx: 1;\n\tunsigned int mwi: 1;\n\tu32 region_mask;\n};\n\nstruct driver_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct device_driver *, char *);\n\tssize_t (*store)(struct device_driver *, const char *, size_t);\n};\n\nenum pci_ers_result {\n\tPCI_ERS_RESULT_NONE = 1,\n\tPCI_ERS_RESULT_CAN_RECOVER = 2,\n\tPCI_ERS_RESULT_NEED_RESET = 3,\n\tPCI_ERS_RESULT_DISCONNECT = 4,\n\tPCI_ERS_RESULT_RECOVERED = 5,\n\tPCI_ERS_RESULT_NO_AER_DRIVER = 6,\n};\n\nenum dev_dma_attr {\n\tDEV_DMA_NOT_SUPPORTED = 0,\n\tDEV_DMA_NON_COHERENT = 1,\n\tDEV_DMA_COHERENT = 2,\n};\n\nstruct pcie_device {\n\tint irq;\n\tstruct pci_dev *port;\n\tu32 service;\n\tvoid *priv_data;\n\tstruct device device;\n};\n\nstruct pcie_port_service_driver {\n\tconst char *name;\n\tint (*probe)(struct pcie_device *);\n\tvoid (*remove)(struct pcie_device *);\n\tint (*suspend)(struct pcie_device *);\n\tint (*resume_noirq)(struct pcie_device *);\n\tint (*resume)(struct pcie_device *);\n\tint (*runtime_suspend)(struct pcie_device *);\n\tint (*runtime_resume)(struct pcie_device *);\n\tvoid (*error_resume)(struct pci_dev *);\n\tint port_type;\n\tu32 service;\n\tstruct device_driver driver;\n};\n\nstruct pci_dynid {\n\tstruct list_head node;\n\tstruct pci_device_id id;\n};\n\nstruct drv_dev_and_id {\n\tstruct pci_driver *drv;\n\tstruct pci_dev *dev;\n\tconst struct pci_device_id *id;\n};\n\nenum pci_mmap_state {\n\tpci_mmap_io = 0,\n\tpci_mmap_mem = 1,\n};\n\nenum pci_mmap_api {\n\tPCI_MMAP_SYSFS = 0,\n\tPCI_MMAP_PROCFS = 1,\n};\n\nstruct pci_vpd_ops;\n\nstruct pci_vpd {\n\tconst struct pci_vpd_ops *ops;\n\tstruct bin_attribute *attr;\n\tstruct mutex lock;\n\tunsigned int len;\n\tu16 flag;\n\tu8 cap;\n\tunsigned int busy: 1;\n\tunsigned int valid: 1;\n};\n\nstruct pci_vpd_ops {\n\tssize_t (*read)(struct pci_dev *, loff_t, size_t, void *);\n\tssize_t (*write)(struct pci_dev *, loff_t, size_t, const void *);\n\tint (*set_size)(struct pci_dev *, size_t);\n};\n\nstruct pci_dev_resource {\n\tstruct list_head list;\n\tstruct resource *res;\n\tstruct pci_dev *dev;\n\tresource_size_t start;\n\tresource_size_t end;\n\tresource_size_t add_size;\n\tresource_size_t min_align;\n\tlong unsigned int flags;\n};\n\nenum release_type {\n\tleaf_only = 0,\n\twhole_subtree = 1,\n};\n\nenum enable_type {\n\tundefined = 4294967295,\n\tuser_disabled = 0,\n\tauto_disabled = 1,\n\tuser_enabled = 2,\n\tauto_enabled = 3,\n};\n\nstruct msix_entry {\n\tu32 vector;\n\tu16 entry;\n};\n\nstruct portdrv_service_data {\n\tstruct pcie_port_service_driver *drv;\n\tstruct device *dev;\n\tu32 service;\n};\n\ntypedef int (*pcie_pm_callback_t)(struct pcie_device *);\n\nstruct walk_rcec_data {\n\tstruct pci_dev *rcec;\n\tint (*user_callback)(struct pci_dev *, void *);\n\tvoid *user_data;\n};\n\nstruct aspm_latency {\n\tu32 l0s;\n\tu32 l1;\n};\n\nstruct pcie_link_state {\n\tstruct pci_dev *pdev;\n\tstruct pci_dev *downstream;\n\tstruct pcie_link_state *root;\n\tstruct pcie_link_state *parent;\n\tstruct list_head sibling;\n\tu32 aspm_support: 7;\n\tu32 aspm_enabled: 7;\n\tu32 aspm_capable: 7;\n\tu32 aspm_default: 7;\n\tchar: 4;\n\tu32 aspm_disable: 7;\n\tu32 clkpm_capable: 1;\n\tu32 clkpm_enabled: 1;\n\tu32 clkpm_default: 1;\n\tu32 clkpm_disable: 1;\n\tstruct aspm_latency latency_up;\n\tstruct aspm_latency latency_dw;\n\tstruct aspm_latency acceptable[8];\n};\n\nstruct aer_stats {\n\tu64 dev_cor_errs[16];\n\tu64 dev_fatal_errs[27];\n\tu64 dev_nonfatal_errs[27];\n\tu64 dev_total_cor_errs;\n\tu64 dev_total_fatal_errs;\n\tu64 dev_total_nonfatal_errs;\n\tu64 rootport_total_cor_errs;\n\tu64 rootport_total_fatal_errs;\n\tu64 rootport_total_nonfatal_errs;\n};\n\nstruct aer_header_log_regs {\n\tunsigned int dw0;\n\tunsigned int dw1;\n\tunsigned int dw2;\n\tunsigned int dw3;\n};\n\nstruct aer_capability_regs {\n\tu32 header;\n\tu32 uncor_status;\n\tu32 uncor_mask;\n\tu32 uncor_severity;\n\tu32 cor_status;\n\tu32 cor_mask;\n\tu32 cap_control;\n\tstruct aer_header_log_regs header_log;\n\tu32 root_command;\n\tu32 root_status;\n\tu16 cor_err_source;\n\tu16 uncor_err_source;\n};\n\nstruct aer_err_info {\n\tstruct pci_dev *dev[5];\n\tint error_dev_num;\n\tunsigned int id: 16;\n\tunsigned int severity: 2;\n\tunsigned int __pad1: 5;\n\tunsigned int multi_error_valid: 1;\n\tunsigned int first_error: 5;\n\tunsigned int __pad2: 2;\n\tunsigned int tlp_header_valid: 1;\n\tunsigned int status;\n\tunsigned int mask;\n\tstruct aer_header_log_regs tlp;\n};\n\nstruct aer_err_source {\n\tunsigned int status;\n\tunsigned int id;\n};\n\nstruct aer_rpc {\n\tstruct pci_dev *rpd;\n\tstruct {\n\t\tunion {\n\t\t\tstruct __kfifo kfifo;\n\t\t\tstruct aer_err_source *type;\n\t\t\tconst struct aer_err_source *const_type;\n\t\t\tchar (*rectype)[0];\n\t\t\tstruct aer_err_source *ptr;\n\t\t\tconst struct aer_err_source *ptr_const;\n\t\t};\n\t\tstruct aer_err_source buf[128];\n\t} aer_fifo;\n};\n\nstruct aer_recover_entry {\n\tu8 bus;\n\tu8 devfn;\n\tu16 domain;\n\tint severity;\n\tstruct aer_capability_regs *regs;\n};\n\nstruct pcie_pme_service_data {\n\tspinlock_t lock;\n\tstruct pcie_device *srv;\n\tstruct work_struct work;\n\tbool noirq;\n};\n\ntypedef void (*acpi_notify_handler)(acpi_handle, u32, void *);\n\nstruct pci_filp_private {\n\tenum pci_mmap_state mmap_state;\n\tint write_combine;\n};\n\nstruct pci_slot_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct pci_slot *, char *);\n\tssize_t (*store)(struct pci_slot *, const char *, size_t);\n};\n\nstruct acpi_bus_type {\n\tstruct list_head list;\n\tconst char *name;\n\tbool (*match)(struct device *);\n\tstruct acpi_device * (*find_companion)(struct device *);\n\tvoid (*setup)(struct device *);\n\tvoid (*cleanup)(struct device *);\n};\n\nstruct acpi_pci_root {\n\tstruct acpi_device *device;\n\tstruct pci_bus *bus;\n\tu16 segment;\n\tstruct resource secondary;\n\tu32 osc_support_set;\n\tu32 osc_control_set;\n\tphys_addr_t mcfg_addr;\n};\n\nenum pm_qos_flags_status {\n\tPM_QOS_FLAGS_UNDEFINED = 4294967295,\n\tPM_QOS_FLAGS_NONE = 0,\n\tPM_QOS_FLAGS_SOME = 1,\n\tPM_QOS_FLAGS_ALL = 2,\n};\n\nstruct hpx_type0 {\n\tu32 revision;\n\tu8 cache_line_size;\n\tu8 latency_timer;\n\tu8 enable_serr;\n\tu8 enable_perr;\n};\n\nstruct hpx_type1 {\n\tu32 revision;\n\tu8 max_mem_read;\n\tu8 avg_max_split;\n\tu16 tot_max_split;\n};\n\nstruct hpx_type2 {\n\tu32 revision;\n\tu32 unc_err_mask_and;\n\tu32 unc_err_mask_or;\n\tu32 unc_err_sever_and;\n\tu32 unc_err_sever_or;\n\tu32 cor_err_mask_and;\n\tu32 cor_err_mask_or;\n\tu32 adv_err_cap_and;\n\tu32 adv_err_cap_or;\n\tu16 pci_exp_devctl_and;\n\tu16 pci_exp_devctl_or;\n\tu16 pci_exp_lnkctl_and;\n\tu16 pci_exp_lnkctl_or;\n\tu32 sec_unc_err_sever_and;\n\tu32 sec_unc_err_sever_or;\n\tu32 sec_unc_err_mask_and;\n\tu32 sec_unc_err_mask_or;\n};\n\nstruct hpx_type3 {\n\tu16 device_type;\n\tu16 function_type;\n\tu16 config_space_location;\n\tu16 pci_exp_cap_id;\n\tu16 pci_exp_cap_ver;\n\tu16 pci_exp_vendor_id;\n\tu16 dvsec_id;\n\tu16 dvsec_rev;\n\tu16 match_offset;\n\tu32 match_mask_and;\n\tu32 match_value;\n\tu16 reg_offset;\n\tu32 reg_mask_and;\n\tu32 reg_mask_or;\n};\n\nenum hpx_type3_dev_type {\n\tHPX_TYPE_ENDPOINT = 1,\n\tHPX_TYPE_LEG_END = 2,\n\tHPX_TYPE_RC_END = 4,\n\tHPX_TYPE_RC_EC = 8,\n\tHPX_TYPE_ROOT_PORT = 16,\n\tHPX_TYPE_UPSTREAM = 32,\n\tHPX_TYPE_DOWNSTREAM = 64,\n\tHPX_TYPE_PCI_BRIDGE = 128,\n\tHPX_TYPE_PCIE_BRIDGE = 256,\n};\n\nenum hpx_type3_fn_type {\n\tHPX_FN_NORMAL = 1,\n\tHPX_FN_SRIOV_PHYS = 2,\n\tHPX_FN_SRIOV_VIRT = 4,\n};\n\nenum hpx_type3_cfg_loc {\n\tHPX_CFG_PCICFG = 0,\n\tHPX_CFG_PCIE_CAP = 1,\n\tHPX_CFG_PCIE_CAP_EXT = 2,\n\tHPX_CFG_VEND_CAP = 3,\n\tHPX_CFG_DVSEC = 4,\n\tHPX_CFG_MAX = 5,\n};\n\nenum pci_irq_reroute_variant {\n\tINTEL_IRQ_REROUTE_VARIANT = 1,\n\tMAX_IRQ_REROUTE_VARIANTS = 3,\n};\n\nstruct pci_fixup {\n\tu16 vendor;\n\tu16 device;\n\tu32 class;\n\tunsigned int class_shift;\n\tint hook_offset;\n};\n\nenum {\n\tNVME_REG_CAP = 0,\n\tNVME_REG_VS = 8,\n\tNVME_REG_INTMS = 12,\n\tNVME_REG_INTMC = 16,\n\tNVME_REG_CC = 20,\n\tNVME_REG_CSTS = 28,\n\tNVME_REG_NSSR = 32,\n\tNVME_REG_AQA = 36,\n\tNVME_REG_ASQ = 40,\n\tNVME_REG_ACQ = 48,\n\tNVME_REG_CMBLOC = 56,\n\tNVME_REG_CMBSZ = 60,\n\tNVME_REG_BPINFO = 64,\n\tNVME_REG_BPRSEL = 68,\n\tNVME_REG_BPMBL = 72,\n\tNVME_REG_CMBMSC = 80,\n\tNVME_REG_PMRCAP = 3584,\n\tNVME_REG_PMRCTL = 3588,\n\tNVME_REG_PMRSTS = 3592,\n\tNVME_REG_PMREBS = 3596,\n\tNVME_REG_PMRSWTP = 3600,\n\tNVME_REG_DBS = 4096,\n};\n\nenum {\n\tNVME_CC_ENABLE = 1,\n\tNVME_CC_EN_SHIFT = 0,\n\tNVME_CC_CSS_SHIFT = 4,\n\tNVME_CC_MPS_SHIFT = 7,\n\tNVME_CC_AMS_SHIFT = 11,\n\tNVME_CC_SHN_SHIFT = 14,\n\tNVME_CC_IOSQES_SHIFT = 16,\n\tNVME_CC_IOCQES_SHIFT = 20,\n\tNVME_CC_CSS_NVM = 0,\n\tNVME_CC_CSS_CSI = 96,\n\tNVME_CC_CSS_MASK = 112,\n\tNVME_CC_AMS_RR = 0,\n\tNVME_CC_AMS_WRRU = 2048,\n\tNVME_CC_AMS_VS = 14336,\n\tNVME_CC_SHN_NONE = 0,\n\tNVME_CC_SHN_NORMAL = 16384,\n\tNVME_CC_SHN_ABRUPT = 32768,\n\tNVME_CC_SHN_MASK = 49152,\n\tNVME_CC_IOSQES = 393216,\n\tNVME_CC_IOCQES = 4194304,\n\tNVME_CAP_CSS_NVM = 1,\n\tNVME_CAP_CSS_CSI = 64,\n\tNVME_CSTS_RDY = 1,\n\tNVME_CSTS_CFS = 2,\n\tNVME_CSTS_NSSRO = 16,\n\tNVME_CSTS_PP = 32,\n\tNVME_CSTS_SHST_NORMAL = 0,\n\tNVME_CSTS_SHST_OCCUR = 4,\n\tNVME_CSTS_SHST_CMPLT = 8,\n\tNVME_CSTS_SHST_MASK = 12,\n\tNVME_CMBMSC_CRE = 1,\n\tNVME_CMBMSC_CMSE = 2,\n};\n\nenum {\n\tNVME_AEN_BIT_NS_ATTR = 8,\n\tNVME_AEN_BIT_FW_ACT = 9,\n\tNVME_AEN_BIT_ANA_CHANGE = 11,\n\tNVME_AEN_BIT_DISC_CHANGE = 31,\n};\n\nenum {\n\tSWITCHTEC_GAS_MRPC_OFFSET = 0,\n\tSWITCHTEC_GAS_TOP_CFG_OFFSET = 4096,\n\tSWITCHTEC_GAS_SW_EVENT_OFFSET = 6144,\n\tSWITCHTEC_GAS_SYS_INFO_OFFSET = 8192,\n\tSWITCHTEC_GAS_FLASH_INFO_OFFSET = 8704,\n\tSWITCHTEC_GAS_PART_CFG_OFFSET = 16384,\n\tSWITCHTEC_GAS_NTB_OFFSET = 65536,\n\tSWITCHTEC_GAS_PFF_CSR_OFFSET = 1261568,\n};\n\nenum {\n\tSWITCHTEC_NTB_REG_INFO_OFFSET = 0,\n\tSWITCHTEC_NTB_REG_CTRL_OFFSET = 16384,\n\tSWITCHTEC_NTB_REG_DBMSG_OFFSET = 409600,\n};\n\nstruct nt_partition_info {\n\tu32 xlink_enabled;\n\tu32 target_part_low;\n\tu32 target_part_high;\n\tu32 reserved;\n};\n\nstruct ntb_info_regs {\n\tu8 partition_count;\n\tu8 partition_id;\n\tu16 reserved1;\n\tu64 ep_map;\n\tu16 requester_id;\n\tu16 reserved2;\n\tu32 reserved3[4];\n\tstruct nt_partition_info ntp_info[48];\n} __attribute__((packed));\n\nstruct ntb_ctrl_regs {\n\tu32 partition_status;\n\tu32 partition_op;\n\tu32 partition_ctrl;\n\tu32 bar_setup;\n\tu32 bar_error;\n\tu16 lut_table_entries;\n\tu16 lut_table_offset;\n\tu32 lut_error;\n\tu16 req_id_table_size;\n\tu16 req_id_table_offset;\n\tu32 req_id_error;\n\tu32 reserved1[7];\n\tstruct {\n\t\tu32 ctl;\n\t\tu32 win_size;\n\t\tu64 xlate_addr;\n\t} bar_entry[6];\n\tstruct {\n\t\tu32 win_size;\n\t\tu32 reserved[3];\n\t} bar_ext_entry[6];\n\tu32 reserved2[192];\n\tu32 req_id_table[512];\n\tu32 reserved3[256];\n\tu64 lut_entry[512];\n};\n\nstruct pci_dev_reset_methods {\n\tu16 vendor;\n\tu16 device;\n\tint (*reset)(struct pci_dev *, int);\n};\n\nstruct pci_dev_acs_enabled {\n\tu16 vendor;\n\tu16 device;\n\tint (*acs_enabled)(struct pci_dev *, u16);\n};\n\nstruct pci_dev_acs_ops {\n\tu16 vendor;\n\tu16 device;\n\tint (*enable_acs)(struct pci_dev *);\n\tint (*disable_acs_redir)(struct pci_dev *);\n};\n\ntypedef acpi_status (*acpi_walk_callback)(acpi_handle, u32, void *, void **);\n\nstruct controller {\n\tstruct pcie_device *pcie;\n\tu32 slot_cap;\n\tunsigned int inband_presence_disabled: 1;\n\tu16 slot_ctrl;\n\tstruct mutex ctrl_lock;\n\tlong unsigned int cmd_started;\n\tunsigned int cmd_busy: 1;\n\twait_queue_head_t queue;\n\tatomic_t pending_events;\n\tunsigned int notification_enabled: 1;\n\tunsigned int power_fault_detected;\n\tstruct task_struct *poll_thread;\n\tu8 state;\n\tstruct mutex state_lock;\n\tstruct delayed_work button_work;\n\tstruct hotplug_slot hotplug_slot;\n\tstruct rw_semaphore reset_lock;\n\tunsigned int ist_running;\n\tint request_result;\n\twait_queue_head_t requester;\n};\n\nstruct controller___2;\n\nstruct hpc_ops;\n\nstruct slot {\n\tu8 bus;\n\tu8 device;\n\tu16 status;\n\tu32 number;\n\tu8 is_a_board;\n\tu8 state;\n\tu8 attention_save;\n\tu8 presence_save;\n\tu8 latch_save;\n\tu8 pwr_save;\n\tstruct controller___2 *ctrl;\n\tconst struct hpc_ops *hpc_ops;\n\tstruct hotplug_slot hotplug_slot;\n\tstruct list_head slot_list;\n\tstruct delayed_work work;\n\tstruct mutex lock;\n\tstruct workqueue_struct *wq;\n\tu8 hp_slot;\n};\n\nstruct controller___2 {\n\tstruct mutex crit_sect;\n\tstruct mutex cmd_lock;\n\tint num_slots;\n\tint slot_num_inc;\n\tstruct pci_dev *pci_dev;\n\tstruct list_head slot_list;\n\tconst struct hpc_ops *hpc_ops;\n\twait_queue_head_t queue;\n\tu8 slot_device_offset;\n\tu32 pcix_misc2_reg;\n\tu32 first_slot;\n\tu32 cap_offset;\n\tlong unsigned int mmio_base;\n\tlong unsigned int mmio_size;\n\tvoid *creg;\n\tstruct timer_list poll_timer;\n};\n\nstruct hpc_ops {\n\tint (*power_on_slot)(struct slot *);\n\tint (*slot_enable)(struct slot *);\n\tint (*slot_disable)(struct slot *);\n\tint (*set_bus_speed_mode)(struct slot *, enum pci_bus_speed);\n\tint (*get_power_status)(struct slot *, u8 *);\n\tint (*get_attention_status)(struct slot *, u8 *);\n\tint (*set_attention_status)(struct slot *, u8);\n\tint (*get_latch_status)(struct slot *, u8 *);\n\tint (*get_adapter_status)(struct slot *, u8 *);\n\tint (*get_adapter_speed)(struct slot *, enum pci_bus_speed *);\n\tint (*get_mode1_ECC_cap)(struct slot *, u8 *);\n\tint (*get_prog_int)(struct slot *, u8 *);\n\tint (*query_power_fault)(struct slot *);\n\tvoid (*green_led_on)(struct slot *);\n\tvoid (*green_led_off)(struct slot *);\n\tvoid (*green_led_blink)(struct slot *);\n\tvoid (*release_ctlr)(struct controller___2 *);\n\tint (*check_cmd_status)(struct controller___2 *);\n};\n\nstruct event_info {\n\tu32 event_type;\n\tstruct slot *p_slot;\n\tstruct work_struct work;\n};\n\nstruct pushbutton_work_info {\n\tstruct slot *p_slot;\n\tstruct work_struct work;\n};\n\nenum ctrl_offsets {\n\tBASE_OFFSET = 0,\n\tSLOT_AVAIL1 = 4,\n\tSLOT_AVAIL2 = 8,\n\tSLOT_CONFIG = 12,\n\tSEC_BUS_CONFIG = 16,\n\tMSI_CTRL = 18,\n\tPROG_INTERFACE = 19,\n\tCMD = 20,\n\tCMD_STATUS = 22,\n\tINTR_LOC = 24,\n\tSERR_LOC = 28,\n\tSERR_INTR_ENABLE = 32,\n\tSLOT1 = 36,\n};\n\nstruct acpiphp_slot;\n\nstruct slot___2 {\n\tstruct hotplug_slot hotplug_slot;\n\tstruct acpiphp_slot *acpi_slot;\n\tunsigned int sun;\n};\n\nstruct acpiphp_slot {\n\tstruct list_head node;\n\tstruct pci_bus *bus;\n\tstruct list_head funcs;\n\tstruct slot___2 *slot;\n\tu8 device;\n\tu32 flags;\n};\n\nstruct acpiphp_attention_info {\n\tint (*set_attn)(struct hotplug_slot *, u8);\n\tint (*get_attn)(struct hotplug_slot *, u8 *);\n\tstruct module *owner;\n};\n\nstruct acpiphp_context;\n\nstruct acpiphp_bridge {\n\tstruct list_head list;\n\tstruct list_head slots;\n\tstruct kref ref;\n\tstruct acpiphp_context *context;\n\tint nr_slots;\n\tstruct pci_bus *pci_bus;\n\tstruct pci_dev *pci_dev;\n\tbool is_going_away;\n};\n\nstruct acpiphp_func {\n\tstruct acpiphp_bridge *parent;\n\tstruct acpiphp_slot *slot;\n\tstruct list_head sibling;\n\tu8 function;\n\tu32 flags;\n};\n\nstruct acpiphp_context {\n\tstruct acpi_hotplug_context hp;\n\tstruct acpiphp_func func;\n\tstruct acpiphp_bridge *bridge;\n\tunsigned int refcount;\n};\n\nstruct acpiphp_root_context {\n\tstruct acpi_hotplug_context hp;\n\tstruct acpiphp_bridge *root_bridge;\n};\n\nenum dmi_device_type {\n\tDMI_DEV_TYPE_ANY = 0,\n\tDMI_DEV_TYPE_OTHER = 1,\n\tDMI_DEV_TYPE_UNKNOWN = 2,\n\tDMI_DEV_TYPE_VIDEO = 3,\n\tDMI_DEV_TYPE_SCSI = 4,\n\tDMI_DEV_TYPE_ETHERNET = 5,\n\tDMI_DEV_TYPE_TOKENRING = 6,\n\tDMI_DEV_TYPE_SOUND = 7,\n\tDMI_DEV_TYPE_PATA = 8,\n\tDMI_DEV_TYPE_SATA = 9,\n\tDMI_DEV_TYPE_SAS = 10,\n\tDMI_DEV_TYPE_IPMI = 4294967295,\n\tDMI_DEV_TYPE_OEM_STRING = 4294967294,\n\tDMI_DEV_TYPE_DEV_ONBOARD = 4294967293,\n\tDMI_DEV_TYPE_DEV_SLOT = 4294967292,\n};\n\nstruct dmi_device {\n\tstruct list_head list;\n\tint type;\n\tconst char *name;\n\tvoid *device_data;\n};\n\nstruct dmi_dev_onboard {\n\tstruct dmi_device dev;\n\tint instance;\n\tint segment;\n\tint bus;\n\tint devfn;\n};\n\nenum smbios_attr_enum {\n\tSMBIOS_ATTR_NONE = 0,\n\tSMBIOS_ATTR_LABEL_SHOW = 1,\n\tSMBIOS_ATTR_INSTANCE_SHOW = 2,\n};\n\nenum acpi_attr_enum {\n\tACPI_ATTR_LABEL_SHOW = 0,\n\tACPI_ATTR_INDEX_SHOW = 1,\n};\n\nstruct pci_p2pdma {\n\tstruct gen_pool *pool;\n\tbool p2pmem_published;\n\tstruct xarray map_types;\n};\n\nenum pci_p2pdma_map_type {\n\tPCI_P2PDMA_MAP_UNKNOWN = 0,\n\tPCI_P2PDMA_MAP_NOT_SUPPORTED = 1,\n\tPCI_P2PDMA_MAP_BUS_ADDR = 2,\n\tPCI_P2PDMA_MAP_THRU_HOST_BRIDGE = 3,\n};\n\nstruct pci_p2pdma_pagemap {\n\tstruct dev_pagemap pgmap;\n\tstruct pci_dev *provider;\n\tu64 bus_offset;\n};\n\nstruct pci_p2pdma_whitelist_entry {\n\tshort unsigned int vendor;\n\tshort unsigned int device;\n\tenum {\n\t\tREQ_SAME_HOST_BRIDGE = 1,\n\t} flags;\n};\n\nenum hdmi_infoframe_type {\n\tHDMI_INFOFRAME_TYPE_VENDOR = 129,\n\tHDMI_INFOFRAME_TYPE_AVI = 130,\n\tHDMI_INFOFRAME_TYPE_SPD = 131,\n\tHDMI_INFOFRAME_TYPE_AUDIO = 132,\n\tHDMI_INFOFRAME_TYPE_DRM = 135,\n};\n\nstruct hdmi_any_infoframe {\n\tenum hdmi_infoframe_type type;\n\tunsigned char version;\n\tunsigned char length;\n};\n\nenum hdmi_colorspace {\n\tHDMI_COLORSPACE_RGB = 0,\n\tHDMI_COLORSPACE_YUV422 = 1,\n\tHDMI_COLORSPACE_YUV444 = 2,\n\tHDMI_COLORSPACE_YUV420 = 3,\n\tHDMI_COLORSPACE_RESERVED4 = 4,\n\tHDMI_COLORSPACE_RESERVED5 = 5,\n\tHDMI_COLORSPACE_RESERVED6 = 6,\n\tHDMI_COLORSPACE_IDO_DEFINED = 7,\n};\n\nenum hdmi_scan_mode {\n\tHDMI_SCAN_MODE_NONE = 0,\n\tHDMI_SCAN_MODE_OVERSCAN = 1,\n\tHDMI_SCAN_MODE_UNDERSCAN = 2,\n\tHDMI_SCAN_MODE_RESERVED = 3,\n};\n\nenum hdmi_colorimetry {\n\tHDMI_COLORIMETRY_NONE = 0,\n\tHDMI_COLORIMETRY_ITU_601 = 1,\n\tHDMI_COLORIMETRY_ITU_709 = 2,\n\tHDMI_COLORIMETRY_EXTENDED = 3,\n};\n\nenum hdmi_picture_aspect {\n\tHDMI_PICTURE_ASPECT_NONE = 0,\n\tHDMI_PICTURE_ASPECT_4_3 = 1,\n\tHDMI_PICTURE_ASPECT_16_9 = 2,\n\tHDMI_PICTURE_ASPECT_64_27 = 3,\n\tHDMI_PICTURE_ASPECT_256_135 = 4,\n\tHDMI_PICTURE_ASPECT_RESERVED = 5,\n};\n\nenum hdmi_active_aspect {\n\tHDMI_ACTIVE_ASPECT_16_9_TOP = 2,\n\tHDMI_ACTIVE_ASPECT_14_9_TOP = 3,\n\tHDMI_ACTIVE_ASPECT_16_9_CENTER = 4,\n\tHDMI_ACTIVE_ASPECT_PICTURE = 8,\n\tHDMI_ACTIVE_ASPECT_4_3 = 9,\n\tHDMI_ACTIVE_ASPECT_16_9 = 10,\n\tHDMI_ACTIVE_ASPECT_14_9 = 11,\n\tHDMI_ACTIVE_ASPECT_4_3_SP_14_9 = 13,\n\tHDMI_ACTIVE_ASPECT_16_9_SP_14_9 = 14,\n\tHDMI_ACTIVE_ASPECT_16_9_SP_4_3 = 15,\n};\n\nenum hdmi_extended_colorimetry {\n\tHDMI_EXTENDED_COLORIMETRY_XV_YCC_601 = 0,\n\tHDMI_EXTENDED_COLORIMETRY_XV_YCC_709 = 1,\n\tHDMI_EXTENDED_COLORIMETRY_S_YCC_601 = 2,\n\tHDMI_EXTENDED_COLORIMETRY_OPYCC_601 = 3,\n\tHDMI_EXTENDED_COLORIMETRY_OPRGB = 4,\n\tHDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM = 5,\n\tHDMI_EXTENDED_COLORIMETRY_BT2020 = 6,\n\tHDMI_EXTENDED_COLORIMETRY_RESERVED = 7,\n};\n\nenum hdmi_quantization_range {\n\tHDMI_QUANTIZATION_RANGE_DEFAULT = 0,\n\tHDMI_QUANTIZATION_RANGE_LIMITED = 1,\n\tHDMI_QUANTIZATION_RANGE_FULL = 2,\n\tHDMI_QUANTIZATION_RANGE_RESERVED = 3,\n};\n\nenum hdmi_nups {\n\tHDMI_NUPS_UNKNOWN = 0,\n\tHDMI_NUPS_HORIZONTAL = 1,\n\tHDMI_NUPS_VERTICAL = 2,\n\tHDMI_NUPS_BOTH = 3,\n};\n\nenum hdmi_ycc_quantization_range {\n\tHDMI_YCC_QUANTIZATION_RANGE_LIMITED = 0,\n\tHDMI_YCC_QUANTIZATION_RANGE_FULL = 1,\n};\n\nenum hdmi_content_type {\n\tHDMI_CONTENT_TYPE_GRAPHICS = 0,\n\tHDMI_CONTENT_TYPE_PHOTO = 1,\n\tHDMI_CONTENT_TYPE_CINEMA = 2,\n\tHDMI_CONTENT_TYPE_GAME = 3,\n};\n\nenum hdmi_metadata_type {\n\tHDMI_STATIC_METADATA_TYPE1 = 1,\n};\n\nenum hdmi_eotf {\n\tHDMI_EOTF_TRADITIONAL_GAMMA_SDR = 0,\n\tHDMI_EOTF_TRADITIONAL_GAMMA_HDR = 1,\n\tHDMI_EOTF_SMPTE_ST2084 = 2,\n\tHDMI_EOTF_BT_2100_HLG = 3,\n};\n\nstruct hdmi_avi_infoframe {\n\tenum hdmi_infoframe_type type;\n\tunsigned char version;\n\tunsigned char length;\n\tenum hdmi_colorspace colorspace;\n\tenum hdmi_scan_mode scan_mode;\n\tenum hdmi_colorimetry colorimetry;\n\tenum hdmi_picture_aspect picture_aspect;\n\tenum hdmi_active_aspect active_aspect;\n\tbool itc;\n\tenum hdmi_extended_colorimetry extended_colorimetry;\n\tenum hdmi_quantization_range quantization_range;\n\tenum hdmi_nups nups;\n\tunsigned char video_code;\n\tenum hdmi_ycc_quantization_range ycc_quantization_range;\n\tenum hdmi_content_type content_type;\n\tunsigned char pixel_repeat;\n\tshort unsigned int top_bar;\n\tshort unsigned int bottom_bar;\n\tshort unsigned int left_bar;\n\tshort unsigned int right_bar;\n};\n\nstruct hdmi_drm_infoframe {\n\tenum hdmi_infoframe_type type;\n\tunsigned char version;\n\tunsigned char length;\n\tenum hdmi_eotf eotf;\n\tenum hdmi_metadata_type metadata_type;\n\tstruct {\n\t\tu16 x;\n\t\tu16 y;\n\t} display_primaries[3];\n\tstruct {\n\t\tu16 x;\n\t\tu16 y;\n\t} white_point;\n\tu16 max_display_mastering_luminance;\n\tu16 min_display_mastering_luminance;\n\tu16 max_cll;\n\tu16 max_fall;\n};\n\nenum hdmi_spd_sdi {\n\tHDMI_SPD_SDI_UNKNOWN = 0,\n\tHDMI_SPD_SDI_DSTB = 1,\n\tHDMI_SPD_SDI_DVDP = 2,\n\tHDMI_SPD_SDI_DVHS = 3,\n\tHDMI_SPD_SDI_HDDVR = 4,\n\tHDMI_SPD_SDI_DVC = 5,\n\tHDMI_SPD_SDI_DSC = 6,\n\tHDMI_SPD_SDI_VCD = 7,\n\tHDMI_SPD_SDI_GAME = 8,\n\tHDMI_SPD_SDI_PC = 9,\n\tHDMI_SPD_SDI_BD = 10,\n\tHDMI_SPD_SDI_SACD = 11,\n\tHDMI_SPD_SDI_HDDVD = 12,\n\tHDMI_SPD_SDI_PMP = 13,\n};\n\nstruct hdmi_spd_infoframe {\n\tenum hdmi_infoframe_type type;\n\tunsigned char version;\n\tunsigned char length;\n\tchar vendor[8];\n\tchar product[16];\n\tenum hdmi_spd_sdi sdi;\n};\n\nenum hdmi_audio_coding_type {\n\tHDMI_AUDIO_CODING_TYPE_STREAM = 0,\n\tHDMI_AUDIO_CODING_TYPE_PCM = 1,\n\tHDMI_AUDIO_CODING_TYPE_AC3 = 2,\n\tHDMI_AUDIO_CODING_TYPE_MPEG1 = 3,\n\tHDMI_AUDIO_CODING_TYPE_MP3 = 4,\n\tHDMI_AUDIO_CODING_TYPE_MPEG2 = 5,\n\tHDMI_AUDIO_CODING_TYPE_AAC_LC = 6,\n\tHDMI_AUDIO_CODING_TYPE_DTS = 7,\n\tHDMI_AUDIO_CODING_TYPE_ATRAC = 8,\n\tHDMI_AUDIO_CODING_TYPE_DSD = 9,\n\tHDMI_AUDIO_CODING_TYPE_EAC3 = 10,\n\tHDMI_AUDIO_CODING_TYPE_DTS_HD = 11,\n\tHDMI_AUDIO_CODING_TYPE_MLP = 12,\n\tHDMI_AUDIO_CODING_TYPE_DST = 13,\n\tHDMI_AUDIO_CODING_TYPE_WMA_PRO = 14,\n\tHDMI_AUDIO_CODING_TYPE_CXT = 15,\n};\n\nenum hdmi_audio_sample_size {\n\tHDMI_AUDIO_SAMPLE_SIZE_STREAM = 0,\n\tHDMI_AUDIO_SAMPLE_SIZE_16 = 1,\n\tHDMI_AUDIO_SAMPLE_SIZE_20 = 2,\n\tHDMI_AUDIO_SAMPLE_SIZE_24 = 3,\n};\n\nenum hdmi_audio_sample_frequency {\n\tHDMI_AUDIO_SAMPLE_FREQUENCY_STREAM = 0,\n\tHDMI_AUDIO_SAMPLE_FREQUENCY_32000 = 1,\n\tHDMI_AUDIO_SAMPLE_FREQUENCY_44100 = 2,\n\tHDMI_AUDIO_SAMPLE_FREQUENCY_48000 = 3,\n\tHDMI_AUDIO_SAMPLE_FREQUENCY_88200 = 4,\n\tHDMI_AUDIO_SAMPLE_FREQUENCY_96000 = 5,\n\tHDMI_AUDIO_SAMPLE_FREQUENCY_176400 = 6,\n\tHDMI_AUDIO_SAMPLE_FREQUENCY_192000 = 7,\n};\n\nenum hdmi_audio_coding_type_ext {\n\tHDMI_AUDIO_CODING_TYPE_EXT_CT = 0,\n\tHDMI_AUDIO_CODING_TYPE_EXT_HE_AAC = 1,\n\tHDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2 = 2,\n\tHDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND = 3,\n\tHDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC = 4,\n\tHDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2 = 5,\n\tHDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC = 6,\n\tHDMI_AUDIO_CODING_TYPE_EXT_DRA = 7,\n\tHDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND = 8,\n\tHDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND = 10,\n};\n\nstruct hdmi_audio_infoframe {\n\tenum hdmi_infoframe_type type;\n\tunsigned char version;\n\tunsigned char length;\n\tunsigned char channels;\n\tenum hdmi_audio_coding_type coding_type;\n\tenum hdmi_audio_sample_size sample_size;\n\tenum hdmi_audio_sample_frequency sample_frequency;\n\tenum hdmi_audio_coding_type_ext coding_type_ext;\n\tunsigned char channel_allocation;\n\tunsigned char level_shift_value;\n\tbool downmix_inhibit;\n};\n\nenum hdmi_3d_structure {\n\tHDMI_3D_STRUCTURE_INVALID = 4294967295,\n\tHDMI_3D_STRUCTURE_FRAME_PACKING = 0,\n\tHDMI_3D_STRUCTURE_FIELD_ALTERNATIVE = 1,\n\tHDMI_3D_STRUCTURE_LINE_ALTERNATIVE = 2,\n\tHDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL = 3,\n\tHDMI_3D_STRUCTURE_L_DEPTH = 4,\n\tHDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH = 5,\n\tHDMI_3D_STRUCTURE_TOP_AND_BOTTOM = 6,\n\tHDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF = 8,\n};\n\nstruct hdmi_vendor_infoframe {\n\tenum hdmi_infoframe_type type;\n\tunsigned char version;\n\tunsigned char length;\n\tunsigned int oui;\n\tu8 vic;\n\tenum hdmi_3d_structure s3d_struct;\n\tunsigned int s3d_ext_data;\n};\n\nunion hdmi_vendor_any_infoframe {\n\tstruct {\n\t\tenum hdmi_infoframe_type type;\n\t\tunsigned char version;\n\t\tunsigned char length;\n\t\tunsigned int oui;\n\t} any;\n\tstruct hdmi_vendor_infoframe hdmi;\n};\n\nunion hdmi_infoframe {\n\tstruct hdmi_any_infoframe any;\n\tstruct hdmi_avi_infoframe avi;\n\tstruct hdmi_spd_infoframe spd;\n\tunion hdmi_vendor_any_infoframe vendor;\n\tstruct hdmi_audio_infoframe audio;\n\tstruct hdmi_drm_infoframe drm;\n};\n\nstruct vc {\n\tstruct vc_data *d;\n\tstruct work_struct SAK_work;\n};\n\nstruct vgastate {\n\tvoid *vgabase;\n\tlong unsigned int membase;\n\t__u32 memsize;\n\t__u32 flags;\n\t__u32 depth;\n\t__u32 num_attr;\n\t__u32 num_crtc;\n\t__u32 num_gfx;\n\t__u32 num_seq;\n\tvoid *vidstate;\n};\n\nstruct linux_logo {\n\tint type;\n\tunsigned int width;\n\tunsigned int height;\n\tunsigned int clutsize;\n\tconst unsigned char *clut;\n\tconst unsigned char *data;\n};\n\nstruct fb_fix_screeninfo {\n\tchar id[16];\n\tlong unsigned int smem_start;\n\t__u32 smem_len;\n\t__u32 type;\n\t__u32 type_aux;\n\t__u32 visual;\n\t__u16 xpanstep;\n\t__u16 ypanstep;\n\t__u16 ywrapstep;\n\t__u32 line_length;\n\tlong unsigned int mmio_start;\n\t__u32 mmio_len;\n\t__u32 accel;\n\t__u16 capabilities;\n\t__u16 reserved[2];\n};\n\nstruct fb_bitfield {\n\t__u32 offset;\n\t__u32 length;\n\t__u32 msb_right;\n};\n\nstruct fb_var_screeninfo {\n\t__u32 xres;\n\t__u32 yres;\n\t__u32 xres_virtual;\n\t__u32 yres_virtual;\n\t__u32 xoffset;\n\t__u32 yoffset;\n\t__u32 bits_per_pixel;\n\t__u32 grayscale;\n\tstruct fb_bitfield red;\n\tstruct fb_bitfield green;\n\tstruct fb_bitfield blue;\n\tstruct fb_bitfield transp;\n\t__u32 nonstd;\n\t__u32 activate;\n\t__u32 height;\n\t__u32 width;\n\t__u32 accel_flags;\n\t__u32 pixclock;\n\t__u32 left_margin;\n\t__u32 right_margin;\n\t__u32 upper_margin;\n\t__u32 lower_margin;\n\t__u32 hsync_len;\n\t__u32 vsync_len;\n\t__u32 sync;\n\t__u32 vmode;\n\t__u32 rotate;\n\t__u32 colorspace;\n\t__u32 reserved[4];\n};\n\nstruct fb_cmap {\n\t__u32 start;\n\t__u32 len;\n\t__u16 *red;\n\t__u16 *green;\n\t__u16 *blue;\n\t__u16 *transp;\n};\n\nenum {\n\tFB_BLANK_UNBLANK = 0,\n\tFB_BLANK_NORMAL = 1,\n\tFB_BLANK_VSYNC_SUSPEND = 2,\n\tFB_BLANK_HSYNC_SUSPEND = 3,\n\tFB_BLANK_POWERDOWN = 4,\n};\n\nstruct fb_copyarea {\n\t__u32 dx;\n\t__u32 dy;\n\t__u32 width;\n\t__u32 height;\n\t__u32 sx;\n\t__u32 sy;\n};\n\nstruct fb_fillrect {\n\t__u32 dx;\n\t__u32 dy;\n\t__u32 width;\n\t__u32 height;\n\t__u32 color;\n\t__u32 rop;\n};\n\nstruct fb_image {\n\t__u32 dx;\n\t__u32 dy;\n\t__u32 width;\n\t__u32 height;\n\t__u32 fg_color;\n\t__u32 bg_color;\n\t__u8 depth;\n\tconst char *data;\n\tstruct fb_cmap cmap;\n};\n\nstruct fbcurpos {\n\t__u16 x;\n\t__u16 y;\n};\n\nstruct fb_cursor {\n\t__u16 set;\n\t__u16 enable;\n\t__u16 rop;\n\tconst char *mask;\n\tstruct fbcurpos hot;\n\tstruct fb_image image;\n};\n\nstruct fb_chroma {\n\t__u32 redx;\n\t__u32 greenx;\n\t__u32 bluex;\n\t__u32 whitex;\n\t__u32 redy;\n\t__u32 greeny;\n\t__u32 bluey;\n\t__u32 whitey;\n};\n\nstruct fb_videomode;\n\nstruct fb_monspecs {\n\tstruct fb_chroma chroma;\n\tstruct fb_videomode *modedb;\n\t__u8 manufacturer[4];\n\t__u8 monitor[14];\n\t__u8 serial_no[14];\n\t__u8 ascii[14];\n\t__u32 modedb_len;\n\t__u32 model;\n\t__u32 serial;\n\t__u32 year;\n\t__u32 week;\n\t__u32 hfmin;\n\t__u32 hfmax;\n\t__u32 dclkmin;\n\t__u32 dclkmax;\n\t__u16 input;\n\t__u16 dpms;\n\t__u16 signal;\n\t__u16 vfmin;\n\t__u16 vfmax;\n\t__u16 gamma;\n\t__u16 gtf: 1;\n\t__u16 misc;\n\t__u8 version;\n\t__u8 revision;\n\t__u8 max_x;\n\t__u8 max_y;\n};\n\nstruct fb_videomode {\n\tconst char *name;\n\tu32 refresh;\n\tu32 xres;\n\tu32 yres;\n\tu32 pixclock;\n\tu32 left_margin;\n\tu32 right_margin;\n\tu32 upper_margin;\n\tu32 lower_margin;\n\tu32 hsync_len;\n\tu32 vsync_len;\n\tu32 sync;\n\tu32 vmode;\n\tu32 flag;\n};\n\nstruct fb_info;\n\nstruct fb_event {\n\tstruct fb_info *info;\n\tvoid *data;\n};\n\nstruct fb_pixmap {\n\tu8 *addr;\n\tu32 size;\n\tu32 offset;\n\tu32 buf_align;\n\tu32 scan_align;\n\tu32 access_align;\n\tu32 flags;\n\tu32 blit_x;\n\tu32 blit_y;\n\tvoid (*writeio)(struct fb_info *, void *, void *, unsigned int);\n\tvoid (*readio)(struct fb_info *, void *, void *, unsigned int);\n};\n\nstruct fb_deferred_io;\n\nstruct fb_ops;\n\nstruct fb_tile_ops;\n\nstruct apertures_struct;\n\nstruct fb_info {\n\tatomic_t count;\n\tint node;\n\tint flags;\n\tint fbcon_rotate_hint;\n\tstruct mutex lock;\n\tstruct mutex mm_lock;\n\tstruct fb_var_screeninfo var;\n\tstruct fb_fix_screeninfo fix;\n\tstruct fb_monspecs monspecs;\n\tstruct work_struct queue;\n\tstruct fb_pixmap pixmap;\n\tstruct fb_pixmap sprite;\n\tstruct fb_cmap cmap;\n\tstruct list_head modelist;\n\tstruct fb_videomode *mode;\n\tstruct delayed_work deferred_work;\n\tstruct fb_deferred_io *fbdefio;\n\tconst struct fb_ops *fbops;\n\tstruct device *device;\n\tstruct device *dev;\n\tint class_flag;\n\tstruct fb_tile_ops *tileops;\n\tunion {\n\t\tchar *screen_base;\n\t\tchar *screen_buffer;\n\t};\n\tlong unsigned int screen_size;\n\tvoid *pseudo_palette;\n\tu32 state;\n\tvoid *fbcon_par;\n\tvoid *par;\n\tstruct apertures_struct *apertures;\n\tbool skip_vt_switch;\n};\n\nstruct fb_blit_caps {\n\tu32 x;\n\tu32 y;\n\tu32 len;\n\tu32 flags;\n};\n\nstruct fb_deferred_io {\n\tlong unsigned int delay;\n\tstruct mutex lock;\n\tstruct list_head pagelist;\n\tvoid (*first_io)(struct fb_info *);\n\tvoid (*deferred_io)(struct fb_info *, struct list_head *);\n};\n\nstruct fb_ops {\n\tstruct module *owner;\n\tint (*fb_open)(struct fb_info *, int);\n\tint (*fb_release)(struct fb_info *, int);\n\tssize_t (*fb_read)(struct fb_info *, char *, size_t, loff_t *);\n\tssize_t (*fb_write)(struct fb_info *, const char *, size_t, loff_t *);\n\tint (*fb_check_var)(struct fb_var_screeninfo *, struct fb_info *);\n\tint (*fb_set_par)(struct fb_info *);\n\tint (*fb_setcolreg)(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, struct fb_info *);\n\tint (*fb_setcmap)(struct fb_cmap *, struct fb_info *);\n\tint (*fb_blank)(int, struct fb_info *);\n\tint (*fb_pan_display)(struct fb_var_screeninfo *, struct fb_info *);\n\tvoid (*fb_fillrect)(struct fb_info *, const struct fb_fillrect *);\n\tvoid (*fb_copyarea)(struct fb_info *, const struct fb_copyarea *);\n\tvoid (*fb_imageblit)(struct fb_info *, const struct fb_image *);\n\tint (*fb_cursor)(struct fb_info *, struct fb_cursor *);\n\tint (*fb_sync)(struct fb_info *);\n\tint (*fb_ioctl)(struct fb_info *, unsigned int, long unsigned int);\n\tint (*fb_compat_ioctl)(struct fb_info *, unsigned int, long unsigned int);\n\tint (*fb_mmap)(struct fb_info *, struct vm_area_struct *);\n\tvoid (*fb_get_caps)(struct fb_info *, struct fb_blit_caps *, struct fb_var_screeninfo *);\n\tvoid (*fb_destroy)(struct fb_info *);\n\tint (*fb_debug_enter)(struct fb_info *);\n\tint (*fb_debug_leave)(struct fb_info *);\n};\n\nstruct fb_tilemap {\n\t__u32 width;\n\t__u32 height;\n\t__u32 depth;\n\t__u32 length;\n\tconst __u8 *data;\n};\n\nstruct fb_tilerect {\n\t__u32 sx;\n\t__u32 sy;\n\t__u32 width;\n\t__u32 height;\n\t__u32 index;\n\t__u32 fg;\n\t__u32 bg;\n\t__u32 rop;\n};\n\nstruct fb_tilearea {\n\t__u32 sx;\n\t__u32 sy;\n\t__u32 dx;\n\t__u32 dy;\n\t__u32 width;\n\t__u32 height;\n};\n\nstruct fb_tileblit {\n\t__u32 sx;\n\t__u32 sy;\n\t__u32 width;\n\t__u32 height;\n\t__u32 fg;\n\t__u32 bg;\n\t__u32 length;\n\t__u32 *indices;\n};\n\nstruct fb_tilecursor {\n\t__u32 sx;\n\t__u32 sy;\n\t__u32 mode;\n\t__u32 shape;\n\t__u32 fg;\n\t__u32 bg;\n};\n\nstruct fb_tile_ops {\n\tvoid (*fb_settile)(struct fb_info *, struct fb_tilemap *);\n\tvoid (*fb_tilecopy)(struct fb_info *, struct fb_tilearea *);\n\tvoid (*fb_tilefill)(struct fb_info *, struct fb_tilerect *);\n\tvoid (*fb_tileblit)(struct fb_info *, struct fb_tileblit *);\n\tvoid (*fb_tilecursor)(struct fb_info *, struct fb_tilecursor *);\n\tint (*fb_get_tilemax)(struct fb_info *);\n};\n\nstruct aperture {\n\tresource_size_t base;\n\tresource_size_t size;\n};\n\nstruct apertures_struct {\n\tunsigned int count;\n\tstruct aperture ranges[0];\n};\n\nenum backlight_update_reason {\n\tBACKLIGHT_UPDATE_HOTKEY = 0,\n\tBACKLIGHT_UPDATE_SYSFS = 1,\n};\n\nenum backlight_type {\n\tBACKLIGHT_RAW = 1,\n\tBACKLIGHT_PLATFORM = 2,\n\tBACKLIGHT_FIRMWARE = 3,\n\tBACKLIGHT_TYPE_MAX = 4,\n};\n\nenum backlight_notification {\n\tBACKLIGHT_REGISTERED = 0,\n\tBACKLIGHT_UNREGISTERED = 1,\n};\n\nenum backlight_scale {\n\tBACKLIGHT_SCALE_UNKNOWN = 0,\n\tBACKLIGHT_SCALE_LINEAR = 1,\n\tBACKLIGHT_SCALE_NON_LINEAR = 2,\n};\n\nstruct backlight_device;\n\nstruct backlight_ops {\n\tunsigned int options;\n\tint (*update_status)(struct backlight_device *);\n\tint (*get_brightness)(struct backlight_device *);\n\tint (*check_fb)(struct backlight_device *, struct fb_info *);\n};\n\nstruct backlight_properties {\n\tint brightness;\n\tint max_brightness;\n\tint power;\n\tint fb_blank;\n\tenum backlight_type type;\n\tunsigned int state;\n\tenum backlight_scale scale;\n};\n\nstruct backlight_device {\n\tstruct backlight_properties props;\n\tstruct mutex update_lock;\n\tstruct mutex ops_lock;\n\tconst struct backlight_ops *ops;\n\tstruct notifier_block fb_notif;\n\tstruct list_head entry;\n\tstruct device dev;\n\tbool fb_bl_on[32];\n\tint use_count;\n};\n\nstruct fb_cmap_user {\n\t__u32 start;\n\t__u32 len;\n\t__u16 *red;\n\t__u16 *green;\n\t__u16 *blue;\n\t__u16 *transp;\n};\n\nstruct fb_modelist {\n\tstruct list_head list;\n\tstruct fb_videomode mode;\n};\n\nstruct logo_data {\n\tint depth;\n\tint needs_directpalette;\n\tint needs_truepalette;\n\tint needs_cmapreset;\n\tconst struct linux_logo *logo;\n};\n\nstruct fb_fix_screeninfo32 {\n\tchar id[16];\n\tcompat_caddr_t smem_start;\n\tu32 smem_len;\n\tu32 type;\n\tu32 type_aux;\n\tu32 visual;\n\tu16 xpanstep;\n\tu16 ypanstep;\n\tu16 ywrapstep;\n\tu32 line_length;\n\tcompat_caddr_t mmio_start;\n\tu32 mmio_len;\n\tu32 accel;\n\tu16 reserved[3];\n};\n\nstruct fb_cmap32 {\n\tu32 start;\n\tu32 len;\n\tcompat_caddr_t red;\n\tcompat_caddr_t green;\n\tcompat_caddr_t blue;\n\tcompat_caddr_t transp;\n};\n\nstruct fb_cvt_data {\n\tu32 xres;\n\tu32 yres;\n\tu32 refresh;\n\tu32 f_refresh;\n\tu32 pixclock;\n\tu32 hperiod;\n\tu32 hblank;\n\tu32 hfreq;\n\tu32 htotal;\n\tu32 vtotal;\n\tu32 vsync;\n\tu32 hsync;\n\tu32 h_front_porch;\n\tu32 h_back_porch;\n\tu32 v_front_porch;\n\tu32 v_back_porch;\n\tu32 h_margin;\n\tu32 v_margin;\n\tu32 interlace;\n\tu32 aspect_ratio;\n\tu32 active_pixels;\n\tu32 flags;\n\tu32 status;\n};\n\ntypedef unsigned char u_char;\n\ntypedef short unsigned int u_short;\n\nstruct fb_con2fbmap {\n\t__u32 console;\n\t__u32 framebuffer;\n};\n\nstruct fbcon_display {\n\tconst u_char *fontdata;\n\tint userfont;\n\tu_short scrollmode;\n\tu_short inverse;\n\tshort int yscroll;\n\tint vrows;\n\tint cursor_shape;\n\tint con_rotate;\n\tu32 xres_virtual;\n\tu32 yres_virtual;\n\tu32 height;\n\tu32 width;\n\tu32 bits_per_pixel;\n\tu32 grayscale;\n\tu32 nonstd;\n\tu32 accel_flags;\n\tu32 rotate;\n\tstruct fb_bitfield red;\n\tstruct fb_bitfield green;\n\tstruct fb_bitfield blue;\n\tstruct fb_bitfield transp;\n\tconst struct fb_videomode *mode;\n};\n\nstruct fbcon_ops {\n\tvoid (*bmove)(struct vc_data *, struct fb_info *, int, int, int, int, int, int);\n\tvoid (*clear)(struct vc_data *, struct fb_info *, int, int, int, int);\n\tvoid (*putcs)(struct vc_data *, struct fb_info *, const short unsigned int *, int, int, int, int, int);\n\tvoid (*clear_margins)(struct vc_data *, struct fb_info *, int, int);\n\tvoid (*cursor)(struct vc_data *, struct fb_info *, int, int, int);\n\tint (*update_start)(struct fb_info *);\n\tint (*rotate_font)(struct fb_info *, struct vc_data *);\n\tstruct fb_var_screeninfo var;\n\tstruct timer_list cursor_timer;\n\tstruct fb_cursor cursor_state;\n\tstruct fbcon_display *p;\n\tstruct fb_info *info;\n\tint currcon;\n\tint cur_blink_jiffies;\n\tint cursor_flash;\n\tint cursor_reset;\n\tint blank_state;\n\tint graphics;\n\tint save_graphics;\n\tint flags;\n\tint rotate;\n\tint cur_rotate;\n\tchar *cursor_data;\n\tu8 *fontbuffer;\n\tu8 *fontdata;\n\tu8 *cursor_src;\n\tu32 cursor_size;\n\tu32 fd_size;\n};\n\nenum {\n\tFBCON_LOGO_CANSHOW = 4294967295,\n\tFBCON_LOGO_DRAW = 4294967294,\n\tFBCON_LOGO_DONTSHOW = 4294967293,\n};\n\ntypedef uint32_t evtchn_port_t;\n\nstruct xenfb_update {\n\tuint8_t type;\n\tint32_t x;\n\tint32_t y;\n\tint32_t width;\n\tint32_t height;\n};\n\nstruct xenfb_resize {\n\tuint8_t type;\n\tint32_t width;\n\tint32_t height;\n\tint32_t stride;\n\tint32_t depth;\n\tint32_t offset;\n};\n\nunion xenfb_out_event {\n\tuint8_t type;\n\tstruct xenfb_update update;\n\tstruct xenfb_resize resize;\n\tchar pad[40];\n};\n\nstruct xenfb_page {\n\tuint32_t in_cons;\n\tuint32_t in_prod;\n\tuint32_t out_cons;\n\tuint32_t out_prod;\n\tint32_t width;\n\tint32_t height;\n\tuint32_t line_length;\n\tuint32_t mem_length;\n\tuint8_t depth;\n\tlong unsigned int pd[256];\n};\n\nenum xenbus_state {\n\tXenbusStateUnknown = 0,\n\tXenbusStateInitialising = 1,\n\tXenbusStateInitWait = 2,\n\tXenbusStateInitialised = 3,\n\tXenbusStateConnected = 4,\n\tXenbusStateClosing = 5,\n\tXenbusStateClosed = 6,\n\tXenbusStateReconfiguring = 7,\n\tXenbusStateReconfigured = 8,\n};\n\nstruct xsd_errors {\n\tint errnum;\n\tconst char *errstring;\n};\n\nstruct xenbus_watch {\n\tstruct list_head list;\n\tconst char *node;\n\tunsigned int nr_pending;\n\tbool (*will_handle)(struct xenbus_watch *, const char *, const char *);\n\tvoid (*callback)(struct xenbus_watch *, const char *, const char *);\n};\n\nstruct xenbus_device {\n\tconst char *devicetype;\n\tconst char *nodename;\n\tconst char *otherend;\n\tint otherend_id;\n\tstruct xenbus_watch otherend_watch;\n\tstruct device dev;\n\tenum xenbus_state state;\n\tstruct completion down;\n\tstruct work_struct work;\n\tstruct semaphore reclaim_sem;\n};\n\nstruct xenbus_device_id {\n\tchar devicetype[32];\n};\n\nstruct xenbus_driver {\n\tconst char *name;\n\tconst struct xenbus_device_id *ids;\n\tbool allow_rebind;\n\tint (*probe)(struct xenbus_device *, const struct xenbus_device_id *);\n\tvoid (*otherend_changed)(struct xenbus_device *, enum xenbus_state);\n\tint (*remove)(struct xenbus_device *);\n\tint (*suspend)(struct xenbus_device *);\n\tint (*resume)(struct xenbus_device *);\n\tint (*uevent)(struct xenbus_device *, struct kobj_uevent_env *);\n\tstruct device_driver driver;\n\tint (*read_otherend_details)(struct xenbus_device *);\n\tint (*is_ready)(struct xenbus_device *);\n\tvoid (*reclaim_memory)(struct xenbus_device *);\n};\n\nstruct xenbus_transaction {\n\tu32 id;\n};\n\nstruct xenfb_info {\n\tunsigned char *fb;\n\tstruct fb_info *fb_info;\n\tint x1;\n\tint y1;\n\tint x2;\n\tint y2;\n\tspinlock_t dirty_lock;\n\tint nr_pages;\n\tint irq;\n\tstruct xenfb_page *page;\n\tlong unsigned int *gfns;\n\tint update_wanted;\n\tint feature_resize;\n\tstruct xenfb_resize resize;\n\tint resize_dpy;\n\tspinlock_t resize_lock;\n\tstruct xenbus_device *xbdev;\n};\n\nenum {\n\tKPARAM_MEM = 0,\n\tKPARAM_WIDTH = 1,\n\tKPARAM_HEIGHT = 2,\n\tKPARAM_CNT = 3,\n};\n\nstruct vesafb_par {\n\tu32 pseudo_palette[256];\n\tint wc_cookie;\n\tstruct resource *region;\n};\n\nstruct acpi_table_bgrt {\n\tstruct acpi_table_header header;\n\tu16 version;\n\tu8 status;\n\tu8 image_type;\n\tu64 image_address;\n\tu32 image_offset_x;\n\tu32 image_offset_y;\n};\n\nenum drm_panel_orientation {\n\tDRM_MODE_PANEL_ORIENTATION_UNKNOWN = 4294967295,\n\tDRM_MODE_PANEL_ORIENTATION_NORMAL = 0,\n\tDRM_MODE_PANEL_ORIENTATION_BOTTOM_UP = 1,\n\tDRM_MODE_PANEL_ORIENTATION_LEFT_UP = 2,\n\tDRM_MODE_PANEL_ORIENTATION_RIGHT_UP = 3,\n};\n\nstruct bmp_file_header {\n\tu16 id;\n\tu32 file_size;\n\tu32 reserved;\n\tu32 bitmap_offset;\n} __attribute__((packed));\n\nstruct bmp_dib_header {\n\tu32 dib_header_size;\n\ts32 width;\n\ts32 height;\n\tu16 planes;\n\tu16 bpp;\n\tu32 compression;\n\tu32 bitmap_size;\n\tu32 horz_resolution;\n\tu32 vert_resolution;\n\tu32 colors_used;\n\tu32 colors_important;\n};\n\nstruct thermal_cooling_device_ops;\n\nstruct thermal_cooling_device {\n\tint id;\n\tchar type[20];\n\tstruct device device;\n\tstruct device_node *np;\n\tvoid *devdata;\n\tvoid *stats;\n\tconst struct thermal_cooling_device_ops *ops;\n\tbool updated;\n\tstruct mutex lock;\n\tstruct list_head thermal_instances;\n\tstruct list_head node;\n};\n\nstruct idle_cpu {\n\tstruct cpuidle_state *state_table;\n\tlong unsigned int auto_demotion_disable_flags;\n\tbool byt_auto_demotion_disable_flag;\n\tbool disable_promotion_to_c1e;\n\tbool use_acpi;\n};\n\nstruct thermal_cooling_device_ops {\n\tint (*get_max_state)(struct thermal_cooling_device *, long unsigned int *);\n\tint (*get_cur_state)(struct thermal_cooling_device *, long unsigned int *);\n\tint (*set_cur_state)(struct thermal_cooling_device *, long unsigned int);\n\tint (*get_requested_power)(struct thermal_cooling_device *, u32 *);\n\tint (*state2power)(struct thermal_cooling_device *, long unsigned int, u32 *);\n\tint (*power2state)(struct thermal_cooling_device *, u32, long unsigned int *);\n};\n\nstruct acpi_lpi_state {\n\tu32 min_residency;\n\tu32 wake_latency;\n\tu32 flags;\n\tu32 arch_flags;\n\tu32 res_cnt_freq;\n\tu32 enable_parent_state;\n\tu64 address;\n\tu8 index;\n\tu8 entry_method;\n\tchar desc[32];\n};\n\nstruct acpi_processor_power {\n\tint count;\n\tunion {\n\t\tstruct acpi_processor_cx states[8];\n\t\tstruct acpi_lpi_state lpi_states[8];\n\t};\n\tint timer_broadcast_on_state;\n};\n\nstruct acpi_psd_package {\n\tu64 num_entries;\n\tu64 revision;\n\tu64 domain;\n\tu64 coord_type;\n\tu64 num_processors;\n};\n\nstruct acpi_pct_register {\n\tu8 descriptor;\n\tu16 length;\n\tu8 space_id;\n\tu8 bit_width;\n\tu8 bit_offset;\n\tu8 reserved;\n\tu64 address;\n} __attribute__((packed));\n\nstruct acpi_processor_px {\n\tu64 core_frequency;\n\tu64 power;\n\tu64 transition_latency;\n\tu64 bus_master_latency;\n\tu64 control;\n\tu64 status;\n};\n\nstruct acpi_processor_performance {\n\tunsigned int state;\n\tunsigned int platform_limit;\n\tstruct acpi_pct_register control_register;\n\tstruct acpi_pct_register status_register;\n\tshort: 16;\n\tunsigned int state_count;\n\tint: 32;\n\tstruct acpi_processor_px *states;\n\tstruct acpi_psd_package domain_info;\n\tcpumask_var_t shared_cpu_map;\n\tunsigned int shared_type;\n\tint: 32;\n} __attribute__((packed));\n\nstruct acpi_tsd_package {\n\tu64 num_entries;\n\tu64 revision;\n\tu64 domain;\n\tu64 coord_type;\n\tu64 num_processors;\n};\n\nstruct acpi_processor_tx_tss {\n\tu64 freqpercentage;\n\tu64 power;\n\tu64 transition_latency;\n\tu64 control;\n\tu64 status;\n};\n\nstruct acpi_processor_tx {\n\tu16 power;\n\tu16 performance;\n};\n\nstruct acpi_processor;\n\nstruct acpi_processor_throttling {\n\tunsigned int state;\n\tunsigned int platform_limit;\n\tstruct acpi_pct_register control_register;\n\tstruct acpi_pct_register status_register;\n\tshort: 16;\n\tunsigned int state_count;\n\tint: 32;\n\tstruct acpi_processor_tx_tss *states_tss;\n\tstruct acpi_tsd_package domain_info;\n\tcpumask_var_t shared_cpu_map;\n\tint (*acpi_processor_get_throttling)(struct acpi_processor *);\n\tint (*acpi_processor_set_throttling)(struct acpi_processor *, int, bool);\n\tu32 address;\n\tu8 duty_offset;\n\tu8 duty_width;\n\tu8 tsd_valid_flag;\n\tchar: 8;\n\tunsigned int shared_type;\n\tstruct acpi_processor_tx states[16];\n\tint: 32;\n} __attribute__((packed));\n\nstruct acpi_processor_lx {\n\tint px;\n\tint tx;\n};\n\nstruct acpi_processor_limit {\n\tstruct acpi_processor_lx state;\n\tstruct acpi_processor_lx thermal;\n\tstruct acpi_processor_lx user;\n};\n\nstruct acpi_processor {\n\tacpi_handle handle;\n\tu32 acpi_id;\n\tphys_cpuid_t phys_id;\n\tu32 id;\n\tu32 pblk;\n\tint performance_platform_limit;\n\tint throttling_platform_limit;\n\tstruct acpi_processor_flags flags;\n\tstruct acpi_processor_power power;\n\tstruct acpi_processor_performance *performance;\n\tstruct acpi_processor_throttling throttling;\n\tstruct acpi_processor_limit limit;\n\tstruct thermal_cooling_device *cdev;\n\tstruct device *dev;\n\tstruct freq_qos_request perflib_req;\n\tstruct freq_qos_request thermal_req;\n};\n\nenum ipmi_addr_src {\n\tSI_INVALID = 0,\n\tSI_HOTMOD = 1,\n\tSI_HARDCODED = 2,\n\tSI_SPMI = 3,\n\tSI_ACPI = 4,\n\tSI_SMBIOS = 5,\n\tSI_PCI = 6,\n\tSI_DEVICETREE = 7,\n\tSI_PLATFORM = 8,\n\tSI_LAST = 9,\n};\n\nstruct dmi_header {\n\tu8 type;\n\tu8 length;\n\tu16 handle;\n};\n\nenum si_type {\n\tSI_TYPE_INVALID = 0,\n\tSI_KCS = 1,\n\tSI_SMIC = 2,\n\tSI_BT = 3,\n};\n\nenum ipmi_addr_space {\n\tIPMI_IO_ADDR_SPACE = 0,\n\tIPMI_MEM_ADDR_SPACE = 1,\n};\n\nenum ipmi_plat_interface_type {\n\tIPMI_PLAT_IF_SI = 0,\n\tIPMI_PLAT_IF_SSIF = 1,\n};\n\nstruct ipmi_plat_data {\n\tenum ipmi_plat_interface_type iftype;\n\tunsigned int type;\n\tunsigned int space;\n\tlong unsigned int addr;\n\tunsigned int regspacing;\n\tunsigned int regsize;\n\tunsigned int regshift;\n\tunsigned int irq;\n\tunsigned int slave_addr;\n\tenum ipmi_addr_src addr_source;\n};\n\nstruct ipmi_dmi_info {\n\tenum si_type si_type;\n\tunsigned int space;\n\tlong unsigned int addr;\n\tu8 slave_addr;\n\tstruct ipmi_dmi_info *next;\n};\n\ntypedef u16 acpi_owner_id;\n\nunion acpi_name_union {\n\tu32 integer;\n\tchar ascii[4];\n};\n\nstruct acpi_table_desc {\n\tacpi_physical_address address;\n\tstruct acpi_table_header *pointer;\n\tu32 length;\n\tunion acpi_name_union signature;\n\tacpi_owner_id owner_id;\n\tu8 flags;\n\tu16 validation_count;\n};\n\nstruct acpi_madt_io_sapic {\n\tstruct acpi_subtable_header header;\n\tu8 id;\n\tu8 reserved;\n\tu32 global_irq_base;\n\tu64 address;\n};\n\nstruct acpi_madt_interrupt_source {\n\tstruct acpi_subtable_header header;\n\tu16 inti_flags;\n\tu8 type;\n\tu8 id;\n\tu8 eid;\n\tu8 io_sapic_vector;\n\tu32 global_irq;\n\tu32 flags;\n};\n\nstruct acpi_madt_generic_interrupt {\n\tstruct acpi_subtable_header header;\n\tu16 reserved;\n\tu32 cpu_interface_number;\n\tu32 uid;\n\tu32 flags;\n\tu32 parking_version;\n\tu32 performance_interrupt;\n\tu64 parked_address;\n\tu64 base_address;\n\tu64 gicv_base_address;\n\tu64 gich_base_address;\n\tu32 vgic_interrupt;\n\tu64 gicr_base_address;\n\tu64 arm_mpidr;\n\tu8 efficiency_class;\n\tu8 reserved2[1];\n\tu16 spe_interrupt;\n} __attribute__((packed));\n\nstruct acpi_madt_generic_distributor {\n\tstruct acpi_subtable_header header;\n\tu16 reserved;\n\tu32 gic_id;\n\tu64 base_address;\n\tu32 global_irq_base;\n\tu8 version;\n\tu8 reserved2[3];\n};\n\nenum acpi_subtable_type {\n\tACPI_SUBTABLE_COMMON = 0,\n\tACPI_SUBTABLE_HMAT = 1,\n};\n\nstruct acpi_subtable_entry {\n\tunion acpi_subtable_headers *hdr;\n\tenum acpi_subtable_type type;\n};\n\nenum acpi_predicate {\n\tall_versions = 0,\n\tless_than_or_equal = 1,\n\tequal = 2,\n\tgreater_than_or_equal = 3,\n};\n\nstruct acpi_platform_list {\n\tchar oem_id[7];\n\tchar oem_table_id[9];\n\tu32 oem_revision;\n\tchar *table;\n\tenum acpi_predicate pred;\n\tchar *reason;\n\tu32 data;\n};\n\ntypedef u32 (*acpi_interface_handler)(acpi_string, u32);\n\nstruct acpi_osi_entry {\n\tchar string[64];\n\tbool enable;\n};\n\nstruct acpi_osi_config {\n\tu8 default_disabling;\n\tunsigned int linux_enable: 1;\n\tunsigned int linux_dmi: 1;\n\tunsigned int linux_cmdline: 1;\n\tunsigned int darwin_enable: 1;\n\tunsigned int darwin_dmi: 1;\n\tunsigned int darwin_cmdline: 1;\n};\n\nstruct acpi_predefined_names {\n\tconst char *name;\n\tu8 type;\n\tchar *val;\n};\n\ntypedef u32 (*acpi_osd_handler)(void *);\n\ntypedef void (*acpi_osd_exec_callback)(void *);\n\ntypedef u32 (*acpi_gpe_handler)(acpi_handle, u32, void *);\n\nstruct acpi_pci_id {\n\tu16 segment;\n\tu16 bus;\n\tu16 device;\n\tu16 function;\n};\n\nstruct acpi_mem_mapping {\n\tacpi_physical_address physical_address;\n\tu8 *logical_address;\n\tacpi_size length;\n\tstruct acpi_mem_mapping *next_mm;\n};\n\nstruct acpi_mem_space_context {\n\tu32 length;\n\tacpi_physical_address address;\n\tstruct acpi_mem_mapping *cur_mm;\n\tstruct acpi_mem_mapping *first_mm;\n};\n\ntypedef enum {\n\tOSL_GLOBAL_LOCK_HANDLER = 0,\n\tOSL_NOTIFY_HANDLER = 1,\n\tOSL_GPE_HANDLER = 2,\n\tOSL_DEBUGGER_MAIN_THREAD = 3,\n\tOSL_DEBUGGER_EXEC_THREAD = 4,\n\tOSL_EC_POLL_HANDLER = 5,\n\tOSL_EC_BURST_HANDLER = 6,\n} acpi_execute_type;\n\nunion acpi_operand_object;\n\nstruct acpi_namespace_node {\n\tunion acpi_operand_object *object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 flags;\n\tunion acpi_name_union name;\n\tstruct acpi_namespace_node *parent;\n\tstruct acpi_namespace_node *child;\n\tstruct acpi_namespace_node *peer;\n\tacpi_owner_id owner_id;\n};\n\nstruct acpi_object_common {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n};\n\nstruct acpi_object_integer {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 fill[3];\n\tu64 value;\n};\n\nstruct acpi_object_string {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tchar *pointer;\n\tu32 length;\n};\n\nstruct acpi_object_buffer {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 *pointer;\n\tu32 length;\n\tu32 aml_length;\n\tu8 *aml_start;\n\tstruct acpi_namespace_node *node;\n};\n\nstruct acpi_object_package {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tstruct acpi_namespace_node *node;\n\tunion acpi_operand_object **elements;\n\tu8 *aml_start;\n\tu32 aml_length;\n\tu32 count;\n};\n\nstruct acpi_object_event {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tvoid *os_semaphore;\n};\n\nstruct acpi_walk_state;\n\ntypedef acpi_status (*acpi_internal_method)(struct acpi_walk_state *);\n\nstruct acpi_object_method {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 info_flags;\n\tu8 param_count;\n\tu8 sync_level;\n\tunion acpi_operand_object *mutex;\n\tunion acpi_operand_object *node;\n\tu8 *aml_start;\n\tunion {\n\t\tacpi_internal_method implementation;\n\t\tunion acpi_operand_object *handler;\n\t} dispatch;\n\tu32 aml_length;\n\tacpi_owner_id owner_id;\n\tu8 thread_count;\n};\n\nstruct acpi_thread_state;\n\nstruct acpi_object_mutex {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 sync_level;\n\tu16 acquisition_depth;\n\tvoid *os_mutex;\n\tu64 thread_id;\n\tstruct acpi_thread_state *owner_thread;\n\tunion acpi_operand_object *prev;\n\tunion acpi_operand_object *next;\n\tstruct acpi_namespace_node *node;\n\tu8 original_sync_level;\n};\n\nstruct acpi_object_region {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 space_id;\n\tstruct acpi_namespace_node *node;\n\tunion acpi_operand_object *handler;\n\tunion acpi_operand_object *next;\n\tacpi_physical_address address;\n\tu32 length;\n};\n\nstruct acpi_object_notify_common {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tunion acpi_operand_object *notify_list[2];\n\tunion acpi_operand_object *handler;\n};\n\nstruct acpi_gpe_block_info;\n\nstruct acpi_object_device {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tunion acpi_operand_object *notify_list[2];\n\tunion acpi_operand_object *handler;\n\tstruct acpi_gpe_block_info *gpe_block;\n};\n\nstruct acpi_object_power_resource {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tunion acpi_operand_object *notify_list[2];\n\tunion acpi_operand_object *handler;\n\tu32 system_level;\n\tu32 resource_order;\n};\n\nstruct acpi_object_processor {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 proc_id;\n\tu8 length;\n\tunion acpi_operand_object *notify_list[2];\n\tunion acpi_operand_object *handler;\n\tacpi_io_address address;\n};\n\nstruct acpi_object_thermal_zone {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tunion acpi_operand_object *notify_list[2];\n\tunion acpi_operand_object *handler;\n};\n\nstruct acpi_object_field_common {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 field_flags;\n\tu8 attribute;\n\tu8 access_byte_width;\n\tstruct acpi_namespace_node *node;\n\tu32 bit_length;\n\tu32 base_byte_offset;\n\tu32 value;\n\tu8 start_field_bit_offset;\n\tu8 access_length;\n\tunion acpi_operand_object *region_obj;\n};\n\nstruct acpi_object_region_field {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 field_flags;\n\tu8 attribute;\n\tu8 access_byte_width;\n\tstruct acpi_namespace_node *node;\n\tu32 bit_length;\n\tu32 base_byte_offset;\n\tu32 value;\n\tu8 start_field_bit_offset;\n\tu8 access_length;\n\tu16 resource_length;\n\tunion acpi_operand_object *region_obj;\n\tu8 *resource_buffer;\n\tu16 pin_number_index;\n\tu8 *internal_pcc_buffer;\n};\n\nstruct acpi_object_buffer_field {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 field_flags;\n\tu8 attribute;\n\tu8 access_byte_width;\n\tstruct acpi_namespace_node *node;\n\tu32 bit_length;\n\tu32 base_byte_offset;\n\tu32 value;\n\tu8 start_field_bit_offset;\n\tu8 access_length;\n\tu8 is_create_field;\n\tunion acpi_operand_object *buffer_obj;\n};\n\nstruct acpi_object_bank_field {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 field_flags;\n\tu8 attribute;\n\tu8 access_byte_width;\n\tstruct acpi_namespace_node *node;\n\tu32 bit_length;\n\tu32 base_byte_offset;\n\tu32 value;\n\tu8 start_field_bit_offset;\n\tu8 access_length;\n\tunion acpi_operand_object *region_obj;\n\tunion acpi_operand_object *bank_obj;\n};\n\nstruct acpi_object_index_field {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 field_flags;\n\tu8 attribute;\n\tu8 access_byte_width;\n\tstruct acpi_namespace_node *node;\n\tu32 bit_length;\n\tu32 base_byte_offset;\n\tu32 value;\n\tu8 start_field_bit_offset;\n\tu8 access_length;\n\tunion acpi_operand_object *index_obj;\n\tunion acpi_operand_object *data_obj;\n};\n\nstruct acpi_object_notify_handler {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tstruct acpi_namespace_node *node;\n\tu32 handler_type;\n\tacpi_notify_handler handler;\n\tvoid *context;\n\tunion acpi_operand_object *next[2];\n};\n\nstruct acpi_object_addr_handler {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 space_id;\n\tu8 handler_flags;\n\tacpi_adr_space_handler handler;\n\tstruct acpi_namespace_node *node;\n\tvoid *context;\n\tvoid *context_mutex;\n\tacpi_adr_space_setup setup;\n\tunion acpi_operand_object *region_list;\n\tunion acpi_operand_object *next;\n};\n\nstruct acpi_object_reference {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tu8 class;\n\tu8 target_type;\n\tu8 resolved;\n\tvoid *object;\n\tstruct acpi_namespace_node *node;\n\tunion acpi_operand_object **where;\n\tu8 *index_pointer;\n\tu8 *aml;\n\tu32 value;\n};\n\nstruct acpi_object_extra {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tstruct acpi_namespace_node *method_REG;\n\tstruct acpi_namespace_node *scope_node;\n\tvoid *region_context;\n\tu8 *aml_start;\n\tu32 aml_length;\n};\n\nstruct acpi_object_data {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tacpi_object_handler handler;\n\tvoid *pointer;\n};\n\nstruct acpi_object_cache_list {\n\tunion acpi_operand_object *next_object;\n\tu8 descriptor_type;\n\tu8 type;\n\tu16 reference_count;\n\tu8 flags;\n\tunion acpi_operand_object *next;\n};\n\nunion acpi_operand_object {\n\tstruct acpi_object_common common;\n\tstruct acpi_object_integer integer;\n\tstruct acpi_object_string string;\n\tstruct acpi_object_buffer buffer;\n\tstruct acpi_object_package package;\n\tstruct acpi_object_event event;\n\tstruct acpi_object_method method;\n\tstruct acpi_object_mutex mutex;\n\tstruct acpi_object_region region;\n\tstruct acpi_object_notify_common common_notify;\n\tstruct acpi_object_device device;\n\tstruct acpi_object_power_resource power_resource;\n\tstruct acpi_object_processor processor;\n\tstruct acpi_object_thermal_zone thermal_zone;\n\tstruct acpi_object_field_common common_field;\n\tstruct acpi_object_region_field field;\n\tstruct acpi_object_buffer_field buffer_field;\n\tstruct acpi_object_bank_field bank_field;\n\tstruct acpi_object_index_field index_field;\n\tstruct acpi_object_notify_handler notify;\n\tstruct acpi_object_addr_handler address_space;\n\tstruct acpi_object_reference reference;\n\tstruct acpi_object_extra extra;\n\tstruct acpi_object_data data;\n\tstruct acpi_object_cache_list cache;\n\tstruct acpi_namespace_node node;\n};\n\nunion acpi_parse_object;\n\nunion acpi_generic_state;\n\nstruct acpi_parse_state {\n\tu8 *aml_start;\n\tu8 *aml;\n\tu8 *aml_end;\n\tu8 *pkg_start;\n\tu8 *pkg_end;\n\tunion acpi_parse_object *start_op;\n\tstruct acpi_namespace_node *start_node;\n\tunion acpi_generic_state *scope;\n\tunion acpi_parse_object *start_scope;\n\tu32 aml_size;\n};\n\ntypedef acpi_status (*acpi_parse_downwards)(struct acpi_walk_state *, union acpi_parse_object **);\n\ntypedef acpi_status (*acpi_parse_upwards)(struct acpi_walk_state *);\n\nstruct acpi_opcode_info;\n\nstruct acpi_walk_state {\n\tstruct acpi_walk_state *next;\n\tu8 descriptor_type;\n\tu8 walk_type;\n\tu16 opcode;\n\tu8 next_op_info;\n\tu8 num_operands;\n\tu8 operand_index;\n\tacpi_owner_id owner_id;\n\tu8 last_predicate;\n\tu8 current_result;\n\tu8 return_used;\n\tu8 scope_depth;\n\tu8 pass_number;\n\tu8 namespace_override;\n\tu8 result_size;\n\tu8 result_count;\n\tu8 *aml;\n\tu32 arg_types;\n\tu32 method_breakpoint;\n\tu32 user_breakpoint;\n\tu32 parse_flags;\n\tstruct acpi_parse_state parser_state;\n\tu32 prev_arg_types;\n\tu32 arg_count;\n\tu16 method_nesting_depth;\n\tu8 method_is_nested;\n\tstruct acpi_namespace_node arguments[7];\n\tstruct acpi_namespace_node local_variables[8];\n\tunion acpi_operand_object *operands[9];\n\tunion acpi_operand_object **params;\n\tu8 *aml_last_while;\n\tunion acpi_operand_object **caller_return_desc;\n\tunion acpi_generic_state *control_state;\n\tstruct acpi_namespace_node *deferred_node;\n\tunion acpi_operand_object *implicit_return_obj;\n\tstruct acpi_namespace_node *method_call_node;\n\tunion acpi_parse_object *method_call_op;\n\tunion acpi_operand_object *method_desc;\n\tstruct acpi_namespace_node *method_node;\n\tchar *method_pathname;\n\tunion acpi_parse_object *op;\n\tconst struct acpi_opcode_info *op_info;\n\tunion acpi_parse_object *origin;\n\tunion acpi_operand_object *result_obj;\n\tunion acpi_generic_state *results;\n\tunion acpi_operand_object *return_desc;\n\tunion acpi_generic_state *scope_info;\n\tunion acpi_parse_object *prev_op;\n\tunion acpi_parse_object *next_op;\n\tstruct acpi_thread_state *thread;\n\tacpi_parse_downwards descending_callback;\n\tacpi_parse_upwards ascending_callback;\n};\n\nstruct acpi_gpe_handler_info {\n\tacpi_gpe_handler address;\n\tvoid *context;\n\tstruct acpi_namespace_node *method_node;\n\tu8 original_flags;\n\tu8 originally_enabled;\n};\n\nstruct acpi_gpe_notify_info {\n\tstruct acpi_namespace_node *device_node;\n\tstruct acpi_gpe_notify_info *next;\n};\n\nunion acpi_gpe_dispatch_info {\n\tstruct acpi_namespace_node *method_node;\n\tstruct acpi_gpe_handler_info *handler;\n\tstruct acpi_gpe_notify_info *notify_list;\n};\n\nstruct acpi_gpe_register_info;\n\nstruct acpi_gpe_event_info {\n\tunion acpi_gpe_dispatch_info dispatch;\n\tstruct acpi_gpe_register_info *register_info;\n\tu8 flags;\n\tu8 gpe_number;\n\tu8 runtime_count;\n\tu8 disable_for_dispatch;\n};\n\nstruct acpi_gpe_address {\n\tu8 space_id;\n\tu64 address;\n};\n\nstruct acpi_gpe_register_info {\n\tstruct acpi_gpe_address status_address;\n\tstruct acpi_gpe_address enable_address;\n\tu16 base_gpe_number;\n\tu8 enable_for_wake;\n\tu8 enable_for_run;\n\tu8 mask_for_run;\n\tu8 enable_mask;\n};\n\nstruct acpi_gpe_xrupt_info;\n\nstruct acpi_gpe_block_info {\n\tstruct acpi_namespace_node *node;\n\tstruct acpi_gpe_block_info *previous;\n\tstruct acpi_gpe_block_info *next;\n\tstruct acpi_gpe_xrupt_info *xrupt_block;\n\tstruct acpi_gpe_register_info *register_info;\n\tstruct acpi_gpe_event_info *event_info;\n\tu64 address;\n\tu32 register_count;\n\tu16 gpe_count;\n\tu16 block_base_number;\n\tu8 space_id;\n\tu8 initialized;\n};\n\nstruct acpi_gpe_xrupt_info {\n\tstruct acpi_gpe_xrupt_info *previous;\n\tstruct acpi_gpe_xrupt_info *next;\n\tstruct acpi_gpe_block_info *gpe_block_list_head;\n\tu32 interrupt_number;\n};\n\nstruct acpi_common_state {\n\tvoid *next;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 value;\n\tu16 state;\n};\n\nstruct acpi_update_state {\n\tvoid *next;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 value;\n\tu16 state;\n\tunion acpi_operand_object *object;\n};\n\nstruct acpi_pkg_state {\n\tvoid *next;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 value;\n\tu16 state;\n\tu32 index;\n\tunion acpi_operand_object *source_object;\n\tunion acpi_operand_object *dest_object;\n\tstruct acpi_walk_state *walk_state;\n\tvoid *this_target_obj;\n\tu32 num_packages;\n};\n\nstruct acpi_control_state {\n\tvoid *next;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 value;\n\tu16 state;\n\tu16 opcode;\n\tunion acpi_parse_object *predicate_op;\n\tu8 *aml_predicate_start;\n\tu8 *package_end;\n\tu64 loop_timeout;\n};\n\nunion acpi_parse_value {\n\tu64 integer;\n\tu32 size;\n\tchar *string;\n\tu8 *buffer;\n\tchar *name;\n\tunion acpi_parse_object *arg;\n};\n\nstruct acpi_parse_obj_common {\n\tunion acpi_parse_object *parent;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 aml_opcode;\n\tu8 *aml;\n\tunion acpi_parse_object *next;\n\tstruct acpi_namespace_node *node;\n\tunion acpi_parse_value value;\n\tu8 arg_list_length;\n};\n\nstruct acpi_parse_obj_named {\n\tunion acpi_parse_object *parent;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 aml_opcode;\n\tu8 *aml;\n\tunion acpi_parse_object *next;\n\tstruct acpi_namespace_node *node;\n\tunion acpi_parse_value value;\n\tu8 arg_list_length;\n\tchar *path;\n\tu8 *data;\n\tu32 length;\n\tu32 name;\n};\n\nstruct acpi_parse_obj_asl {\n\tunion acpi_parse_object *parent;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 aml_opcode;\n\tu8 *aml;\n\tunion acpi_parse_object *next;\n\tstruct acpi_namespace_node *node;\n\tunion acpi_parse_value value;\n\tu8 arg_list_length;\n\tunion acpi_parse_object *child;\n\tunion acpi_parse_object *parent_method;\n\tchar *filename;\n\tu8 file_changed;\n\tchar *parent_filename;\n\tchar *external_name;\n\tchar *namepath;\n\tchar name_seg[4];\n\tu32 extra_value;\n\tu32 column;\n\tu32 line_number;\n\tu32 logical_line_number;\n\tu32 logical_byte_offset;\n\tu32 end_line;\n\tu32 end_logical_line;\n\tu32 acpi_btype;\n\tu32 aml_length;\n\tu32 aml_subtree_length;\n\tu32 final_aml_length;\n\tu32 final_aml_offset;\n\tu32 compile_flags;\n\tu16 parse_opcode;\n\tu8 aml_opcode_length;\n\tu8 aml_pkg_len_bytes;\n\tu8 extra;\n\tchar parse_op_name[20];\n};\n\nunion acpi_parse_object {\n\tstruct acpi_parse_obj_common common;\n\tstruct acpi_parse_obj_named named;\n\tstruct acpi_parse_obj_asl asl;\n};\n\nstruct acpi_scope_state {\n\tvoid *next;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 value;\n\tu16 state;\n\tstruct acpi_namespace_node *node;\n};\n\nstruct acpi_pscope_state {\n\tvoid *next;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 value;\n\tu16 state;\n\tu32 arg_count;\n\tunion acpi_parse_object *op;\n\tu8 *arg_end;\n\tu8 *pkg_end;\n\tu32 arg_list;\n};\n\nstruct acpi_thread_state {\n\tvoid *next;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 value;\n\tu16 state;\n\tu8 current_sync_level;\n\tstruct acpi_walk_state *walk_state_list;\n\tunion acpi_operand_object *acquired_mutex_list;\n\tu64 thread_id;\n};\n\nstruct acpi_result_values {\n\tvoid *next;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 value;\n\tu16 state;\n\tunion acpi_operand_object *obj_desc[8];\n};\n\nstruct acpi_global_notify_handler {\n\tacpi_notify_handler handler;\n\tvoid *context;\n};\n\nstruct acpi_notify_info {\n\tvoid *next;\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 value;\n\tu16 state;\n\tu8 handler_list_id;\n\tstruct acpi_namespace_node *node;\n\tunion acpi_operand_object *handler_list_head;\n\tstruct acpi_global_notify_handler *global;\n};\n\nunion acpi_generic_state {\n\tstruct acpi_common_state common;\n\tstruct acpi_control_state control;\n\tstruct acpi_update_state update;\n\tstruct acpi_scope_state scope;\n\tstruct acpi_pscope_state parse_scope;\n\tstruct acpi_pkg_state pkg;\n\tstruct acpi_thread_state thread;\n\tstruct acpi_result_values results;\n\tstruct acpi_notify_info notify;\n};\n\nstruct acpi_opcode_info {\n\tu32 parse_args;\n\tu32 runtime_args;\n\tu16 flags;\n\tu8 object_type;\n\tu8 class;\n\tu8 type;\n};\n\nstruct acpi_os_dpc {\n\tacpi_osd_exec_callback function;\n\tvoid *context;\n\tstruct work_struct work;\n};\n\nstruct acpi_ioremap {\n\tstruct list_head list;\n\tvoid *virt;\n\tacpi_physical_address phys;\n\tacpi_size size;\n\tunion {\n\t\tlong unsigned int refcount;\n\t\tstruct rcu_work rwork;\n\t} track;\n};\n\nstruct acpi_hp_work {\n\tstruct work_struct work;\n\tstruct acpi_device *adev;\n\tu32 src;\n};\n\nstruct acpi_pld_info {\n\tu8 revision;\n\tu8 ignore_color;\n\tu8 red;\n\tu8 green;\n\tu8 blue;\n\tu16 width;\n\tu16 height;\n\tu8 user_visible;\n\tu8 dock;\n\tu8 lid;\n\tu8 panel;\n\tu8 vertical_position;\n\tu8 horizontal_position;\n\tu8 shape;\n\tu8 group_orientation;\n\tu8 group_token;\n\tu8 group_position;\n\tu8 bay;\n\tu8 ejectable;\n\tu8 ospm_eject_required;\n\tu8 cabinet_number;\n\tu8 card_cage_number;\n\tu8 reference;\n\tu8 rotation;\n\tu8 order;\n\tu8 reserved;\n\tu16 vertical_offset;\n\tu16 horizontal_offset;\n};\n\nstruct acpi_handle_list {\n\tu32 count;\n\tacpi_handle handles[10];\n};\n\nstruct acpi_device_bus_id {\n\tconst char *bus_id;\n\tstruct ida instance_ida;\n\tstruct list_head node;\n};\n\nstruct acpi_dev_match_info {\n\tstruct acpi_device_id hid[2];\n\tconst char *uid;\n\ts64 hrv;\n};\n\nstruct nvs_region {\n\t__u64 phys_start;\n\t__u64 size;\n\tstruct list_head node;\n};\n\nstruct nvs_page {\n\tlong unsigned int phys_start;\n\tunsigned int size;\n\tvoid *kaddr;\n\tvoid *data;\n\tbool unmap;\n\tstruct list_head node;\n};\n\nstruct acpi_wakeup_handler {\n\tstruct list_head list_node;\n\tbool (*wakeup)(void *);\n\tvoid *context;\n};\n\ntypedef u32 acpi_event_status;\n\nstruct acpi_table_facs {\n\tchar signature[4];\n\tu32 length;\n\tu32 hardware_signature;\n\tu32 firmware_waking_vector;\n\tu32 global_lock;\n\tu32 flags;\n\tu64 xfirmware_waking_vector;\n\tu8 version;\n\tu8 reserved[3];\n\tu32 ospm_flags;\n\tu8 reserved1[24];\n};\n\nstruct acpi_hardware_id {\n\tstruct list_head list;\n\tconst char *id;\n};\n\nstruct acpi_data_node {\n\tconst char *name;\n\tacpi_handle handle;\n\tstruct fwnode_handle fwnode;\n\tstruct fwnode_handle *parent;\n\tstruct acpi_device_data data;\n\tstruct list_head sibling;\n\tstruct kobject kobj;\n\tstruct completion kobj_done;\n};\n\nstruct acpi_data_node_attr {\n\tstruct attribute attr;\n\tssize_t (*show)(struct acpi_data_node *, char *);\n\tssize_t (*store)(struct acpi_data_node *, const char *, size_t);\n};\n\nstruct pm_domain_data {\n\tstruct list_head list_node;\n\tstruct device *dev;\n};\n\nstruct acpi_device_physical_node {\n\tunsigned int node_id;\n\tstruct list_head node;\n\tstruct device *dev;\n\tbool put_online: 1;\n};\n\ntypedef u32 (*acpi_event_handler)(void *);\n\ntypedef acpi_status (*acpi_table_handler)(u32, void *, void *);\n\nenum acpi_bus_device_type {\n\tACPI_BUS_TYPE_DEVICE = 0,\n\tACPI_BUS_TYPE_POWER = 1,\n\tACPI_BUS_TYPE_PROCESSOR = 2,\n\tACPI_BUS_TYPE_THERMAL = 3,\n\tACPI_BUS_TYPE_POWER_BUTTON = 4,\n\tACPI_BUS_TYPE_SLEEP_BUTTON = 5,\n\tACPI_BUS_TYPE_ECDT_EC = 6,\n\tACPI_BUS_DEVICE_TYPE_COUNT = 7,\n};\n\nstruct acpi_osc_context {\n\tchar *uuid_str;\n\tint rev;\n\tstruct acpi_buffer cap;\n\tstruct acpi_buffer ret;\n};\n\nstruct acpi_pnp_device_id {\n\tu32 length;\n\tchar *string;\n};\n\nstruct acpi_pnp_device_id_list {\n\tu32 count;\n\tu32 list_size;\n\tstruct acpi_pnp_device_id ids[0];\n};\n\nstruct acpi_device_info {\n\tu32 info_size;\n\tu32 name;\n\tacpi_object_type type;\n\tu8 param_count;\n\tu16 valid;\n\tu8 flags;\n\tu8 highest_dstates[4];\n\tu8 lowest_dstates[5];\n\tu64 address;\n\tstruct acpi_pnp_device_id hardware_id;\n\tstruct acpi_pnp_device_id unique_id;\n\tstruct acpi_pnp_device_id class_code;\n\tstruct acpi_pnp_device_id_list compatible_id_list;\n};\n\nstruct acpi_table_spcr {\n\tstruct acpi_table_header header;\n\tu8 interface_type;\n\tu8 reserved[3];\n\tstruct acpi_generic_address serial_port;\n\tu8 interrupt_type;\n\tu8 pc_interrupt;\n\tu32 interrupt;\n\tu8 baud_rate;\n\tu8 parity;\n\tu8 stop_bits;\n\tu8 flow_control;\n\tu8 terminal_type;\n\tu8 reserved1;\n\tu16 pci_device_id;\n\tu16 pci_vendor_id;\n\tu8 pci_bus;\n\tu8 pci_device;\n\tu8 pci_function;\n\tu32 pci_flags;\n\tu8 pci_segment;\n\tu32 reserved2;\n} __attribute__((packed));\n\nstruct acpi_table_stao {\n\tstruct acpi_table_header header;\n\tu8 ignore_uart;\n} __attribute__((packed));\n\nenum acpi_reconfig_event {\n\tACPI_RECONFIG_DEVICE_ADD = 0,\n\tACPI_RECONFIG_DEVICE_REMOVE = 1,\n};\n\nstruct acpi_probe_entry;\n\ntypedef bool (*acpi_probe_entry_validate_subtbl)(struct acpi_subtable_header *, struct acpi_probe_entry *);\n\nstruct acpi_probe_entry {\n\t__u8 id[5];\n\t__u8 type;\n\tacpi_probe_entry_validate_subtbl subtable_valid;\n\tunion {\n\t\tacpi_tbl_table_handler probe_table;\n\t\tacpi_tbl_entry_handler probe_subtbl;\n\t};\n\tkernel_ulong_t driver_data;\n};\n\nstruct acpi_dep_data {\n\tstruct list_head node;\n\tacpi_handle supplier;\n\tacpi_handle consumer;\n};\n\nstruct acpi_table_events_work {\n\tstruct work_struct work;\n\tvoid *table;\n\tu32 event;\n};\n\nstruct platform_device___2;\n\nstruct resource_win {\n\tstruct resource res;\n\tresource_size_t offset;\n};\n\nstruct res_proc_context {\n\tstruct list_head *list;\n\tint (*preproc)(struct acpi_resource *, void *);\n\tvoid *preproc_data;\n\tint count;\n\tint error;\n};\n\nstruct acpi_processor_errata {\n\tu8 smp;\n\tstruct {\n\t\tu8 throttle: 1;\n\t\tu8 fdma: 1;\n\t\tu8 reserved: 6;\n\t\tu32 bmisx;\n\t} piix4;\n};\n\nstruct acpi_table_ecdt {\n\tstruct acpi_table_header header;\n\tstruct acpi_generic_address control;\n\tstruct acpi_generic_address data;\n\tu32 uid;\n\tu8 gpe;\n\tu8 id[1];\n} __attribute__((packed));\n\nstruct transaction;\n\nstruct acpi_ec {\n\tacpi_handle handle;\n\tint gpe;\n\tint irq;\n\tlong unsigned int command_addr;\n\tlong unsigned int data_addr;\n\tbool global_lock;\n\tlong unsigned int flags;\n\tlong unsigned int reference_count;\n\tstruct mutex mutex;\n\twait_queue_head_t wait;\n\tstruct list_head list;\n\tstruct transaction *curr;\n\tspinlock_t lock;\n\tstruct work_struct work;\n\tlong unsigned int timestamp;\n\tlong unsigned int nr_pending_queries;\n\tbool busy_polling;\n\tunsigned int polling_guard;\n};\n\nstruct transaction {\n\tconst u8 *wdata;\n\tu8 *rdata;\n\tshort unsigned int irq_count;\n\tu8 command;\n\tu8 wi;\n\tu8 ri;\n\tu8 wlen;\n\tu8 rlen;\n\tu8 flags;\n};\n\ntypedef int (*acpi_ec_query_func)(void *);\n\nenum ec_command {\n\tACPI_EC_COMMAND_READ = 128,\n\tACPI_EC_COMMAND_WRITE = 129,\n\tACPI_EC_BURST_ENABLE = 130,\n\tACPI_EC_BURST_DISABLE = 131,\n\tACPI_EC_COMMAND_QUERY = 132,\n};\n\nenum {\n\tEC_FLAGS_QUERY_ENABLED = 0,\n\tEC_FLAGS_QUERY_PENDING = 1,\n\tEC_FLAGS_QUERY_GUARDING = 2,\n\tEC_FLAGS_EVENT_HANDLER_INSTALLED = 3,\n\tEC_FLAGS_EC_HANDLER_INSTALLED = 4,\n\tEC_FLAGS_QUERY_METHODS_INSTALLED = 5,\n\tEC_FLAGS_STARTED = 6,\n\tEC_FLAGS_STOPPED = 7,\n\tEC_FLAGS_EVENTS_MASKED = 8,\n};\n\nstruct acpi_ec_query_handler {\n\tstruct list_head node;\n\tacpi_ec_query_func func;\n\tacpi_handle handle;\n\tvoid *data;\n\tu8 query_bit;\n\tstruct kref kref;\n};\n\nstruct acpi_ec_query {\n\tstruct transaction transaction;\n\tstruct work_struct work;\n\tstruct acpi_ec_query_handler *handler;\n};\n\nstruct dock_station {\n\tacpi_handle handle;\n\tlong unsigned int last_dock_time;\n\tu32 flags;\n\tstruct list_head dependent_devices;\n\tstruct list_head sibling;\n\tstruct platform_device *dock_device;\n};\n\nstruct dock_dependent_device {\n\tstruct list_head list;\n\tstruct acpi_device *adev;\n};\n\nenum dock_callback_type {\n\tDOCK_CALL_HANDLER = 0,\n\tDOCK_CALL_FIXUP = 1,\n\tDOCK_CALL_UEVENT = 2,\n};\n\nstruct acpi_pci_root_ops;\n\nstruct acpi_pci_root_info {\n\tstruct acpi_pci_root *root;\n\tstruct acpi_device *bridge;\n\tstruct acpi_pci_root_ops *ops;\n\tstruct list_head resources;\n\tchar name[16];\n};\n\nstruct acpi_pci_root_ops {\n\tstruct pci_ops *pci_ops;\n\tint (*init_info)(struct acpi_pci_root_info *);\n\tvoid (*release_info)(struct acpi_pci_root_info *);\n\tint (*prepare_resources)(struct acpi_pci_root_info *);\n};\n\nstruct pci_osc_bit_struct {\n\tu32 bit;\n\tchar *desc;\n};\n\nstruct acpi_handle_node {\n\tstruct list_head node;\n\tacpi_handle handle;\n};\n\nstruct acpi_pci_link_irq {\n\tu32 active;\n\tu8 triggering;\n\tu8 polarity;\n\tu8 resource_type;\n\tu8 possible_count;\n\tu32 possible[16];\n\tu8 initialized: 1;\n\tu8 reserved: 7;\n};\n\nstruct acpi_pci_link {\n\tstruct list_head list;\n\tstruct acpi_device *device;\n\tstruct acpi_pci_link_irq irq;\n\tint refcnt;\n};\n\nstruct acpi_pci_routing_table {\n\tu32 length;\n\tu32 pin;\n\tu64 address;\n\tu32 source_index;\n\tchar source[4];\n};\n\nstruct acpi_prt_entry {\n\tstruct acpi_pci_id id;\n\tu8 pin;\n\tacpi_handle link;\n\tu32 index;\n};\n\nstruct prt_quirk {\n\tconst struct dmi_system_id *system;\n\tunsigned int segment;\n\tunsigned int bus;\n\tunsigned int device;\n\tunsigned char pin;\n\tconst char *source;\n\tconst char *actual_source;\n};\n\nstruct lpss_clk_data {\n\tconst char *name;\n\tstruct clk *clk;\n};\n\nstruct lpss_private_data;\n\nstruct lpss_device_desc {\n\tunsigned int flags;\n\tconst char *clk_con_id;\n\tunsigned int prv_offset;\n\tsize_t prv_size_override;\n\tstruct property_entry *properties;\n\tvoid (*setup)(struct lpss_private_data *);\n\tbool resume_from_noirq;\n};\n\nstruct lpss_private_data {\n\tstruct acpi_device *adev;\n\tvoid *mmio_base;\n\tresource_size_t mmio_size;\n\tunsigned int fixed_clk_rate;\n\tstruct clk *clk;\n\tconst struct lpss_device_desc *dev_desc;\n\tu32 prv_reg_ctx[9];\n};\n\nstruct lpss_device_links {\n\tconst char *supplier_hid;\n\tconst char *supplier_uid;\n\tconst char *consumer_hid;\n\tconst char *consumer_uid;\n\tu32 flags;\n\tconst struct dmi_system_id *dep_missing_ids;\n};\n\nstruct hid_uid {\n\tconst char *hid;\n\tconst char *uid;\n};\n\nstruct fch_clk_data {\n\tvoid *base;\n\tu32 is_rv;\n};\n\nstruct apd_private_data;\n\nstruct apd_device_desc {\n\tunsigned int fixed_clk_rate;\n\tstruct property_entry *properties;\n\tint (*setup)(struct apd_private_data *);\n};\n\nstruct apd_private_data {\n\tstruct clk *clk;\n\tstruct acpi_device *adev;\n\tconst struct apd_device_desc *dev_desc;\n};\n\nstruct acpi_power_dependent_device {\n\tstruct device *dev;\n\tstruct list_head node;\n};\n\nstruct acpi_power_resource {\n\tstruct acpi_device device;\n\tstruct list_head list_node;\n\tchar *name;\n\tu32 system_level;\n\tu32 order;\n\tunsigned int ref_count;\n\tbool wakeup_enabled;\n\tstruct mutex resource_lock;\n\tstruct list_head dependents;\n};\n\nstruct acpi_power_resource_entry {\n\tstruct list_head node;\n\tstruct acpi_power_resource *resource;\n};\n\nstruct acpi_bus_event {\n\tstruct list_head node;\n\tacpi_device_class device_class;\n\tacpi_bus_id bus_id;\n\tu32 type;\n\tu32 data;\n};\n\nstruct acpi_genl_event {\n\tacpi_device_class device_class;\n\tchar bus_id[15];\n\tu32 type;\n\tu32 data;\n};\n\nenum {\n\tACPI_GENL_ATTR_UNSPEC = 0,\n\tACPI_GENL_ATTR_EVENT = 1,\n\t__ACPI_GENL_ATTR_MAX = 2,\n};\n\nenum {\n\tACPI_GENL_CMD_UNSPEC = 0,\n\tACPI_GENL_CMD_EVENT = 1,\n\t__ACPI_GENL_CMD_MAX = 2,\n};\n\nstruct acpi_ged_device {\n\tstruct device *dev;\n\tstruct list_head event_list;\n};\n\nstruct acpi_ged_event {\n\tstruct list_head node;\n\tstruct device *dev;\n\tunsigned int gsi;\n\tunsigned int irq;\n\tacpi_handle handle;\n};\n\ntypedef void (*acpi_gbl_event_handler)(u32, acpi_handle, u32, void *);\n\nstruct acpi_table_bert {\n\tstruct acpi_table_header header;\n\tu32 region_length;\n\tu64 address;\n};\n\nstruct acpi_table_attr {\n\tstruct bin_attribute attr;\n\tchar name[4];\n\tint instance;\n\tchar filename[8];\n\tstruct list_head node;\n};\n\nstruct acpi_data_attr {\n\tstruct bin_attribute attr;\n\tu64 addr;\n};\n\nstruct acpi_data_obj {\n\tchar *name;\n\tint (*fn)(void *, struct acpi_data_attr *);\n};\n\nstruct event_counter {\n\tu32 count;\n\tu32 flags;\n};\n\nstruct acpi_device_properties {\n\tconst guid_t *guid;\n\tconst union acpi_object *properties;\n\tstruct list_head list;\n};\n\nstruct always_present_id {\n\tstruct acpi_device_id hid[2];\n\tstruct x86_cpu_id cpu_ids[2];\n\tstruct dmi_system_id dmi_ids[2];\n\tconst char *uid;\n};\n\nstruct lpi_device_info {\n\tchar *name;\n\tint enabled;\n\tunion acpi_object *package;\n};\n\nstruct lpi_device_constraint {\n\tint uid;\n\tint min_dstate;\n\tint function_states;\n};\n\nstruct lpi_constraints {\n\tacpi_handle handle;\n\tint min_dstate;\n};\n\nstruct lpi_device_constraint_amd {\n\tchar *name;\n\tint enabled;\n\tint function_states;\n\tint min_dstate;\n};\n\nstruct acpi_lpat {\n\tint temp;\n\tint raw;\n};\n\nstruct acpi_lpat_conversion_table {\n\tstruct acpi_lpat *lpat;\n\tint lpat_count;\n};\n\nstruct acpi_table_lpit {\n\tstruct acpi_table_header header;\n};\n\nstruct acpi_lpit_header {\n\tu32 type;\n\tu32 length;\n\tu16 unique_id;\n\tu16 reserved;\n\tu32 flags;\n};\n\nstruct acpi_lpit_native {\n\tstruct acpi_lpit_header header;\n\tstruct acpi_generic_address entry_trigger;\n\tu32 residency;\n\tu32 latency;\n\tstruct acpi_generic_address residency_counter;\n\tu64 counter_frequency;\n} __attribute__((packed));\n\nstruct lpit_residency_info {\n\tstruct acpi_generic_address gaddr;\n\tu64 frequency;\n\tvoid *iomem_addr;\n};\n\nstruct acpi_table_wdat {\n\tstruct acpi_table_header header;\n\tu32 header_length;\n\tu16 pci_segment;\n\tu8 pci_bus;\n\tu8 pci_device;\n\tu8 pci_function;\n\tu8 reserved[3];\n\tu32 timer_period;\n\tu32 max_count;\n\tu32 min_count;\n\tu8 flags;\n\tu8 reserved2[3];\n\tu32 entries;\n};\n\nstruct acpi_wdat_entry {\n\tu8 action;\n\tu8 instruction;\n\tu16 reserved;\n\tstruct acpi_generic_address register_region;\n\tu32 value;\n\tu32 mask;\n} __attribute__((packed));\n\nstruct acpi_name_info {\n\tchar name[4];\n\tu16 argument_list;\n\tu8 expected_btypes;\n} __attribute__((packed));\n\nstruct acpi_package_info {\n\tu8 type;\n\tu8 object_type1;\n\tu8 count1;\n\tu8 object_type2;\n\tu8 count2;\n\tu16 reserved;\n} __attribute__((packed));\n\nstruct acpi_package_info2 {\n\tu8 type;\n\tu8 count;\n\tu8 object_type[4];\n\tu8 reserved;\n};\n\nstruct acpi_package_info3 {\n\tu8 type;\n\tu8 count;\n\tu8 object_type[2];\n\tu8 tail_object_type;\n\tu16 reserved;\n} __attribute__((packed));\n\nstruct acpi_package_info4 {\n\tu8 type;\n\tu8 object_type1;\n\tu8 count1;\n\tu8 sub_object_types;\n\tu8 pkg_count;\n\tu16 reserved;\n} __attribute__((packed));\n\nunion acpi_predefined_info {\n\tstruct acpi_name_info info;\n\tstruct acpi_package_info ret_info;\n\tstruct acpi_package_info2 ret_info2;\n\tstruct acpi_package_info3 ret_info3;\n\tstruct acpi_package_info4 ret_info4;\n};\n\nstruct acpi_evaluate_info {\n\tstruct acpi_namespace_node *prefix_node;\n\tconst char *relative_pathname;\n\tunion acpi_operand_object **parameters;\n\tstruct acpi_namespace_node *node;\n\tunion acpi_operand_object *obj_desc;\n\tchar *full_pathname;\n\tconst union acpi_predefined_info *predefined;\n\tunion acpi_operand_object *return_object;\n\tunion acpi_operand_object *parent_package;\n\tu32 return_flags;\n\tu32 return_btype;\n\tu16 param_count;\n\tu16 node_flags;\n\tu8 pass_number;\n\tu8 return_object_type;\n\tu8 flags;\n};\n\nenum {\n\tACPI_REFCLASS_LOCAL = 0,\n\tACPI_REFCLASS_ARG = 1,\n\tACPI_REFCLASS_REFOF = 2,\n\tACPI_REFCLASS_INDEX = 3,\n\tACPI_REFCLASS_TABLE = 4,\n\tACPI_REFCLASS_NAME = 5,\n\tACPI_REFCLASS_DEBUG = 6,\n\tACPI_REFCLASS_MAX = 6,\n};\n\nstruct acpi_common_descriptor {\n\tvoid *common_pointer;\n\tu8 descriptor_type;\n};\n\nunion acpi_descriptor {\n\tstruct acpi_common_descriptor common;\n\tunion acpi_operand_object object;\n\tstruct acpi_namespace_node node;\n\tunion acpi_parse_object op;\n};\n\ntypedef enum {\n\tACPI_IMODE_LOAD_PASS1 = 1,\n\tACPI_IMODE_LOAD_PASS2 = 2,\n\tACPI_IMODE_EXECUTE = 3,\n} acpi_interpreter_mode;\n\nstruct acpi_create_field_info {\n\tstruct acpi_namespace_node *region_node;\n\tstruct acpi_namespace_node *field_node;\n\tstruct acpi_namespace_node *register_node;\n\tstruct acpi_namespace_node *data_register_node;\n\tstruct acpi_namespace_node *connection_node;\n\tu8 *resource_buffer;\n\tu32 bank_value;\n\tu32 field_bit_position;\n\tu32 field_bit_length;\n\tu16 resource_length;\n\tu16 pin_number_index;\n\tu8 field_flags;\n\tu8 attribute;\n\tu8 field_type;\n\tu8 access_length;\n};\n\nstruct acpi_init_walk_info {\n\tu32 table_index;\n\tu32 object_count;\n\tu32 method_count;\n\tu32 serial_method_count;\n\tu32 non_serial_method_count;\n\tu32 serialized_method_count;\n\tu32 device_count;\n\tu32 op_region_count;\n\tu32 field_count;\n\tu32 buffer_count;\n\tu32 package_count;\n\tu32 op_region_init;\n\tu32 field_init;\n\tu32 buffer_init;\n\tu32 package_init;\n\tacpi_owner_id owner_id;\n};\n\ntypedef u32 acpi_name;\n\ntypedef acpi_status (*acpi_exception_handler)(acpi_status, acpi_name, u16, u32, void *);\n\nenum {\n\tAML_FIELD_ACCESS_ANY = 0,\n\tAML_FIELD_ACCESS_BYTE = 1,\n\tAML_FIELD_ACCESS_WORD = 2,\n\tAML_FIELD_ACCESS_DWORD = 3,\n\tAML_FIELD_ACCESS_QWORD = 4,\n\tAML_FIELD_ACCESS_BUFFER = 5,\n};\n\ntypedef acpi_status (*acpi_execute_op)(struct acpi_walk_state *);\n\nstruct acpi_fixed_event_handler {\n\tacpi_event_handler handler;\n\tvoid *context;\n};\n\nstruct acpi_fixed_event_info {\n\tu8 status_register_id;\n\tu8 enable_register_id;\n\tu16 status_bit_mask;\n\tu16 enable_bit_mask;\n};\n\ntypedef u32 acpi_mutex_handle;\n\nstruct acpi_gpe_walk_info {\n\tstruct acpi_namespace_node *gpe_device;\n\tstruct acpi_gpe_block_info *gpe_block;\n\tu16 count;\n\tacpi_owner_id owner_id;\n\tu8 execute_by_owner_id;\n};\n\nstruct acpi_gpe_device_info {\n\tu32 index;\n\tu32 next_block_base_index;\n\tacpi_status status;\n\tstruct acpi_namespace_node *gpe_device;\n};\n\ntypedef acpi_status (*acpi_gpe_callback)(struct acpi_gpe_xrupt_info *, struct acpi_gpe_block_info *, void *);\n\nstruct acpi_reg_walk_info {\n\tu32 function;\n\tu32 reg_run_count;\n\tacpi_adr_space_type space_id;\n};\n\ntypedef u32 (*acpi_sci_handler)(void *);\n\nstruct acpi_sci_handler_info {\n\tstruct acpi_sci_handler_info *next;\n\tacpi_sci_handler address;\n\tvoid *context;\n};\n\nenum {\n\tAML_FIELD_UPDATE_PRESERVE = 0,\n\tAML_FIELD_UPDATE_WRITE_AS_ONES = 32,\n\tAML_FIELD_UPDATE_WRITE_AS_ZEROS = 64,\n};\n\nstruct acpi_signal_fatal_info {\n\tu32 type;\n\tu32 code;\n\tu32 argument;\n};\n\nenum {\n\tMATCH_MTR = 0,\n\tMATCH_MEQ = 1,\n\tMATCH_MLE = 2,\n\tMATCH_MLT = 3,\n\tMATCH_MGE = 4,\n\tMATCH_MGT = 5,\n};\n\nenum {\n\tAML_FIELD_ATTRIB_QUICK = 2,\n\tAML_FIELD_ATTRIB_SEND_RECEIVE = 4,\n\tAML_FIELD_ATTRIB_BYTE = 6,\n\tAML_FIELD_ATTRIB_WORD = 8,\n\tAML_FIELD_ATTRIB_BLOCK = 10,\n\tAML_FIELD_ATTRIB_BYTES = 11,\n\tAML_FIELD_ATTRIB_PROCESS_CALL = 12,\n\tAML_FIELD_ATTRIB_BLOCK_PROCESS_CALL = 13,\n\tAML_FIELD_ATTRIB_RAW_BYTES = 14,\n\tAML_FIELD_ATTRIB_RAW_PROCESS_BYTES = 15,\n};\n\ntypedef enum {\n\tACPI_TRACE_AML_METHOD = 0,\n\tACPI_TRACE_AML_OPCODE = 1,\n\tACPI_TRACE_AML_REGION = 2,\n} acpi_trace_event_type;\n\nstruct acpi_gpe_block_status_context {\n\tstruct acpi_gpe_register_info *gpe_skip_register_info;\n\tu8 gpe_skip_mask;\n\tu8 retval;\n};\n\nstruct acpi_bit_register_info {\n\tu8 parent_register;\n\tu8 bit_position;\n\tu16 access_bit_mask;\n};\n\nstruct acpi_port_info {\n\tchar *name;\n\tu16 start;\n\tu16 end;\n\tu8 osi_dependency;\n};\n\nstruct acpi_pci_device {\n\tacpi_handle device;\n\tstruct acpi_pci_device *next;\n};\n\ntypedef acpi_status (*acpi_init_handler)(acpi_handle, u32);\n\nstruct acpi_device_walk_info {\n\tstruct acpi_table_desc *table_desc;\n\tstruct acpi_evaluate_info *evaluate_info;\n\tu32 device_count;\n\tu32 num_STA;\n\tu32 num_INI;\n};\n\ntypedef acpi_status (*acpi_pkg_callback)(u8, union acpi_operand_object *, union acpi_generic_state *, void *);\n\nstruct acpi_table_list {\n\tstruct acpi_table_desc *tables;\n\tu32 current_table_count;\n\tu32 max_table_count;\n\tu8 flags;\n};\n\nenum acpi_return_package_types {\n\tACPI_PTYPE1_FIXED = 1,\n\tACPI_PTYPE1_VAR = 2,\n\tACPI_PTYPE1_OPTION = 3,\n\tACPI_PTYPE2 = 4,\n\tACPI_PTYPE2_COUNT = 5,\n\tACPI_PTYPE2_PKG_COUNT = 6,\n\tACPI_PTYPE2_FIXED = 7,\n\tACPI_PTYPE2_MIN = 8,\n\tACPI_PTYPE2_REV_FIXED = 9,\n\tACPI_PTYPE2_FIX_VAR = 10,\n\tACPI_PTYPE2_VAR_VAR = 11,\n\tACPI_PTYPE2_UUID_PAIR = 12,\n\tACPI_PTYPE_CUSTOM = 13,\n};\n\ntypedef acpi_status (*acpi_object_converter)(struct acpi_namespace_node *, union acpi_operand_object *, union acpi_operand_object **);\n\nstruct acpi_simple_repair_info {\n\tchar name[4];\n\tu32 unexpected_btypes;\n\tu32 package_index;\n\tacpi_object_converter object_converter;\n};\n\ntypedef acpi_status (*acpi_repair_function)(struct acpi_evaluate_info *, union acpi_operand_object **);\n\nstruct acpi_repair_info {\n\tchar name[4];\n\tacpi_repair_function repair_function;\n};\n\nstruct acpi_namestring_info {\n\tconst char *external_name;\n\tconst char *next_external_char;\n\tchar *internal_name;\n\tu32 length;\n\tu32 num_segments;\n\tu32 num_carats;\n\tu8 fully_qualified;\n};\n\nstruct acpi_rw_lock {\n\tvoid *writer_mutex;\n\tvoid *reader_mutex;\n\tu32 num_readers;\n};\n\nstruct acpi_get_devices_info {\n\tacpi_walk_callback user_function;\n\tvoid *context;\n\tconst char *hid;\n};\n\nstruct aml_resource_small_header {\n\tu8 descriptor_type;\n};\n\nstruct aml_resource_irq {\n\tu8 descriptor_type;\n\tu16 irq_mask;\n\tu8 flags;\n} __attribute__((packed));\n\nstruct aml_resource_dma {\n\tu8 descriptor_type;\n\tu8 dma_channel_mask;\n\tu8 flags;\n};\n\nstruct aml_resource_start_dependent {\n\tu8 descriptor_type;\n\tu8 flags;\n};\n\nstruct aml_resource_end_dependent {\n\tu8 descriptor_type;\n};\n\nstruct aml_resource_io {\n\tu8 descriptor_type;\n\tu8 flags;\n\tu16 minimum;\n\tu16 maximum;\n\tu8 alignment;\n\tu8 address_length;\n};\n\nstruct aml_resource_fixed_io {\n\tu8 descriptor_type;\n\tu16 address;\n\tu8 address_length;\n} __attribute__((packed));\n\nstruct aml_resource_vendor_small {\n\tu8 descriptor_type;\n};\n\nstruct aml_resource_end_tag {\n\tu8 descriptor_type;\n\tu8 checksum;\n};\n\nstruct aml_resource_fixed_dma {\n\tu8 descriptor_type;\n\tu16 request_lines;\n\tu16 channels;\n\tu8 width;\n} __attribute__((packed));\n\nstruct aml_resource_large_header {\n\tu8 descriptor_type;\n\tu16 resource_length;\n} __attribute__((packed));\n\nstruct aml_resource_memory24 {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 flags;\n\tu16 minimum;\n\tu16 maximum;\n\tu16 alignment;\n\tu16 address_length;\n} __attribute__((packed));\n\nstruct aml_resource_vendor_large {\n\tu8 descriptor_type;\n\tu16 resource_length;\n} __attribute__((packed));\n\nstruct aml_resource_memory32 {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 flags;\n\tu32 minimum;\n\tu32 maximum;\n\tu32 alignment;\n\tu32 address_length;\n} __attribute__((packed));\n\nstruct aml_resource_fixed_memory32 {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 flags;\n\tu32 address;\n\tu32 address_length;\n} __attribute__((packed));\n\nstruct aml_resource_address {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 resource_type;\n\tu8 flags;\n\tu8 specific_flags;\n} __attribute__((packed));\n\nstruct aml_resource_extended_address64 {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 resource_type;\n\tu8 flags;\n\tu8 specific_flags;\n\tu8 revision_ID;\n\tu8 reserved;\n\tu64 granularity;\n\tu64 minimum;\n\tu64 maximum;\n\tu64 translation_offset;\n\tu64 address_length;\n\tu64 type_specific;\n} __attribute__((packed));\n\nstruct aml_resource_address64 {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 resource_type;\n\tu8 flags;\n\tu8 specific_flags;\n\tu64 granularity;\n\tu64 minimum;\n\tu64 maximum;\n\tu64 translation_offset;\n\tu64 address_length;\n} __attribute__((packed));\n\nstruct aml_resource_address32 {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 resource_type;\n\tu8 flags;\n\tu8 specific_flags;\n\tu32 granularity;\n\tu32 minimum;\n\tu32 maximum;\n\tu32 translation_offset;\n\tu32 address_length;\n} __attribute__((packed));\n\nstruct aml_resource_address16 {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 resource_type;\n\tu8 flags;\n\tu8 specific_flags;\n\tu16 granularity;\n\tu16 minimum;\n\tu16 maximum;\n\tu16 translation_offset;\n\tu16 address_length;\n} __attribute__((packed));\n\nstruct aml_resource_extended_irq {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 flags;\n\tu8 interrupt_count;\n\tu32 interrupts[1];\n} __attribute__((packed));\n\nstruct aml_resource_generic_register {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 address_space_id;\n\tu8 bit_width;\n\tu8 bit_offset;\n\tu8 access_size;\n\tu64 address;\n} __attribute__((packed));\n\nstruct aml_resource_gpio {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu8 connection_type;\n\tu16 flags;\n\tu16 int_flags;\n\tu8 pin_config;\n\tu16 drive_strength;\n\tu16 debounce_timeout;\n\tu16 pin_table_offset;\n\tu8 res_source_index;\n\tu16 res_source_offset;\n\tu16 vendor_offset;\n\tu16 vendor_length;\n} __attribute__((packed));\n\nstruct aml_resource_common_serialbus {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu8 res_source_index;\n\tu8 type;\n\tu8 flags;\n\tu16 type_specific_flags;\n\tu8 type_revision_id;\n\tu16 type_data_length;\n} __attribute__((packed));\n\nstruct aml_resource_i2c_serialbus {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu8 res_source_index;\n\tu8 type;\n\tu8 flags;\n\tu16 type_specific_flags;\n\tu8 type_revision_id;\n\tu16 type_data_length;\n\tu32 connection_speed;\n\tu16 slave_address;\n} __attribute__((packed));\n\nstruct aml_resource_spi_serialbus {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu8 res_source_index;\n\tu8 type;\n\tu8 flags;\n\tu16 type_specific_flags;\n\tu8 type_revision_id;\n\tu16 type_data_length;\n\tu32 connection_speed;\n\tu8 data_bit_length;\n\tu8 clock_phase;\n\tu8 clock_polarity;\n\tu16 device_selection;\n} __attribute__((packed));\n\nstruct aml_resource_uart_serialbus {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu8 res_source_index;\n\tu8 type;\n\tu8 flags;\n\tu16 type_specific_flags;\n\tu8 type_revision_id;\n\tu16 type_data_length;\n\tu32 default_baud_rate;\n\tu16 rx_fifo_size;\n\tu16 tx_fifo_size;\n\tu8 parity;\n\tu8 lines_enabled;\n} __attribute__((packed));\n\nstruct aml_resource_pin_function {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu16 flags;\n\tu8 pin_config;\n\tu16 function_number;\n\tu16 pin_table_offset;\n\tu8 res_source_index;\n\tu16 res_source_offset;\n\tu16 vendor_offset;\n\tu16 vendor_length;\n} __attribute__((packed));\n\nstruct aml_resource_pin_config {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu16 flags;\n\tu8 pin_config_type;\n\tu32 pin_config_value;\n\tu16 pin_table_offset;\n\tu8 res_source_index;\n\tu16 res_source_offset;\n\tu16 vendor_offset;\n\tu16 vendor_length;\n} __attribute__((packed));\n\nstruct aml_resource_pin_group {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu16 flags;\n\tu16 pin_table_offset;\n\tu16 label_offset;\n\tu16 vendor_offset;\n\tu16 vendor_length;\n} __attribute__((packed));\n\nstruct aml_resource_pin_group_function {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu16 flags;\n\tu16 function_number;\n\tu8 res_source_index;\n\tu16 res_source_offset;\n\tu16 res_source_label_offset;\n\tu16 vendor_offset;\n\tu16 vendor_length;\n} __attribute__((packed));\n\nstruct aml_resource_pin_group_config {\n\tu8 descriptor_type;\n\tu16 resource_length;\n\tu8 revision_id;\n\tu16 flags;\n\tu8 pin_config_type;\n\tu32 pin_config_value;\n\tu8 res_source_index;\n\tu16 res_source_offset;\n\tu16 res_source_label_offset;\n\tu16 vendor_offset;\n\tu16 vendor_length;\n} __attribute__((packed));\n\nunion aml_resource {\n\tu8 descriptor_type;\n\tstruct aml_resource_small_header small_header;\n\tstruct aml_resource_large_header large_header;\n\tstruct aml_resource_irq irq;\n\tstruct aml_resource_dma dma;\n\tstruct aml_resource_start_dependent start_dpf;\n\tstruct aml_resource_end_dependent end_dpf;\n\tstruct aml_resource_io io;\n\tstruct aml_resource_fixed_io fixed_io;\n\tstruct aml_resource_fixed_dma fixed_dma;\n\tstruct aml_resource_vendor_small vendor_small;\n\tstruct aml_resource_end_tag end_tag;\n\tstruct aml_resource_memory24 memory24;\n\tstruct aml_resource_generic_register generic_reg;\n\tstruct aml_resource_vendor_large vendor_large;\n\tstruct aml_resource_memory32 memory32;\n\tstruct aml_resource_fixed_memory32 fixed_memory32;\n\tstruct aml_resource_address16 address16;\n\tstruct aml_resource_address32 address32;\n\tstruct aml_resource_address64 address64;\n\tstruct aml_resource_extended_address64 ext_address64;\n\tstruct aml_resource_extended_irq extended_irq;\n\tstruct aml_resource_gpio gpio;\n\tstruct aml_resource_i2c_serialbus i2c_serial_bus;\n\tstruct aml_resource_spi_serialbus spi_serial_bus;\n\tstruct aml_resource_uart_serialbus uart_serial_bus;\n\tstruct aml_resource_common_serialbus common_serial_bus;\n\tstruct aml_resource_pin_function pin_function;\n\tstruct aml_resource_pin_config pin_config;\n\tstruct aml_resource_pin_group pin_group;\n\tstruct aml_resource_pin_group_function pin_group_function;\n\tstruct aml_resource_pin_group_config pin_group_config;\n\tstruct aml_resource_address address;\n\tu32 dword_item;\n\tu16 word_item;\n\tu8 byte_item;\n};\n\nstruct acpi_rsconvert_info {\n\tu8 opcode;\n\tu8 resource_offset;\n\tu8 aml_offset;\n\tu8 value;\n};\n\nenum {\n\tACPI_RSC_INITGET = 0,\n\tACPI_RSC_INITSET = 1,\n\tACPI_RSC_FLAGINIT = 2,\n\tACPI_RSC_1BITFLAG = 3,\n\tACPI_RSC_2BITFLAG = 4,\n\tACPI_RSC_3BITFLAG = 5,\n\tACPI_RSC_ADDRESS = 6,\n\tACPI_RSC_BITMASK = 7,\n\tACPI_RSC_BITMASK16 = 8,\n\tACPI_RSC_COUNT = 9,\n\tACPI_RSC_COUNT16 = 10,\n\tACPI_RSC_COUNT_GPIO_PIN = 11,\n\tACPI_RSC_COUNT_GPIO_RES = 12,\n\tACPI_RSC_COUNT_GPIO_VEN = 13,\n\tACPI_RSC_COUNT_SERIAL_RES = 14,\n\tACPI_RSC_COUNT_SERIAL_VEN = 15,\n\tACPI_RSC_DATA8 = 16,\n\tACPI_RSC_EXIT_EQ = 17,\n\tACPI_RSC_EXIT_LE = 18,\n\tACPI_RSC_EXIT_NE = 19,\n\tACPI_RSC_LENGTH = 20,\n\tACPI_RSC_MOVE_GPIO_PIN = 21,\n\tACPI_RSC_MOVE_GPIO_RES = 22,\n\tACPI_RSC_MOVE_SERIAL_RES = 23,\n\tACPI_RSC_MOVE_SERIAL_VEN = 24,\n\tACPI_RSC_MOVE8 = 25,\n\tACPI_RSC_MOVE16 = 26,\n\tACPI_RSC_MOVE32 = 27,\n\tACPI_RSC_MOVE64 = 28,\n\tACPI_RSC_SET8 = 29,\n\tACPI_RSC_SOURCE = 30,\n\tACPI_RSC_SOURCEX = 31,\n};\n\ntypedef u16 acpi_rs_length;\n\ntypedef acpi_status (*acpi_walk_aml_callback)(u8 *, u32, u32, u8, void **);\n\ntypedef u32 acpi_rsdesc_size;\n\nstruct acpi_vendor_uuid {\n\tu8 subtype;\n\tu8 data[16];\n};\n\nstruct acpi_vendor_walk_info {\n\tstruct acpi_vendor_uuid *uuid;\n\tstruct acpi_buffer *buffer;\n\tacpi_status status;\n};\n\nstruct acpi_fadt_info {\n\tconst char *name;\n\tu16 address64;\n\tu16 address32;\n\tu16 length;\n\tu8 default_length;\n\tu8 flags;\n};\n\nstruct acpi_fadt_pm_info {\n\tstruct acpi_generic_address *target;\n\tu16 source;\n\tu8 register_num;\n};\n\nstruct acpi_table_rsdp {\n\tchar signature[8];\n\tu8 checksum;\n\tchar oem_id[6];\n\tu8 revision;\n\tu32 rsdt_physical_address;\n\tu32 length;\n\tu64 xsdt_physical_address;\n\tu8 extended_checksum;\n\tu8 reserved[3];\n} __attribute__((packed));\n\nstruct acpi_address_range {\n\tstruct acpi_address_range *next;\n\tstruct acpi_namespace_node *region_node;\n\tacpi_physical_address start_address;\n\tacpi_physical_address end_address;\n};\n\nstruct acpi_pkg_info {\n\tu8 *free_space;\n\tacpi_size length;\n\tu32 object_space;\n\tu32 num_packages;\n};\n\nstruct acpi_exception_info {\n\tchar *name;\n};\n\nstruct acpi_mutex_info {\n\tvoid *mutex;\n\tu32 use_count;\n\tu64 thread_id;\n};\n\nstruct acpi_comment_node {\n\tchar *comment;\n\tstruct acpi_comment_node *next;\n};\n\nstruct acpi_interface_info {\n\tchar *name;\n\tstruct acpi_interface_info *next;\n\tu8 flags;\n\tu8 value;\n};\n\nenum led_brightness {\n\tLED_OFF = 0,\n\tLED_ON = 1,\n\tLED_HALF = 127,\n\tLED_FULL = 255,\n};\n\nstruct led_hw_trigger_type {\n\tint dummy;\n};\n\nstruct led_pattern;\n\nstruct led_trigger;\n\nstruct led_classdev {\n\tconst char *name;\n\tenum led_brightness brightness;\n\tenum led_brightness max_brightness;\n\tint flags;\n\tlong unsigned int work_flags;\n\tvoid (*brightness_set)(struct led_classdev *, enum led_brightness);\n\tint (*brightness_set_blocking)(struct led_classdev *, enum led_brightness);\n\tenum led_brightness (*brightness_get)(struct led_classdev *);\n\tint (*blink_set)(struct led_classdev *, long unsigned int *, long unsigned int *);\n\tint (*pattern_set)(struct led_classdev *, struct led_pattern *, u32, int);\n\tint (*pattern_clear)(struct led_classdev *);\n\tstruct device *dev;\n\tconst struct attribute_group **groups;\n\tstruct list_head node;\n\tconst char *default_trigger;\n\tlong unsigned int blink_delay_on;\n\tlong unsigned int blink_delay_off;\n\tstruct timer_list blink_timer;\n\tint blink_brightness;\n\tint new_blink_brightness;\n\tvoid (*flash_resume)(struct led_classdev *);\n\tstruct work_struct set_brightness_work;\n\tint delayed_set_value;\n\tstruct rw_semaphore trigger_lock;\n\tstruct led_trigger *trigger;\n\tstruct list_head trig_list;\n\tvoid *trigger_data;\n\tbool activated;\n\tstruct led_hw_trigger_type *trigger_type;\n\tint brightness_hw_changed;\n\tstruct kernfs_node *brightness_hw_changed_kn;\n\tstruct mutex led_access;\n};\n\nstruct led_pattern {\n\tu32 delta_t;\n\tint brightness;\n};\n\nstruct led_trigger {\n\tconst char *name;\n\tint (*activate)(struct led_classdev *);\n\tvoid (*deactivate)(struct led_classdev *);\n\tstruct led_hw_trigger_type *trigger_type;\n\trwlock_t leddev_list_lock;\n\tstruct list_head led_cdevs;\n\tstruct list_head next_trig;\n\tconst struct attribute_group **groups;\n};\n\nenum power_supply_property {\n\tPOWER_SUPPLY_PROP_STATUS = 0,\n\tPOWER_SUPPLY_PROP_CHARGE_TYPE = 1,\n\tPOWER_SUPPLY_PROP_HEALTH = 2,\n\tPOWER_SUPPLY_PROP_PRESENT = 3,\n\tPOWER_SUPPLY_PROP_ONLINE = 4,\n\tPOWER_SUPPLY_PROP_AUTHENTIC = 5,\n\tPOWER_SUPPLY_PROP_TECHNOLOGY = 6,\n\tPOWER_SUPPLY_PROP_CYCLE_COUNT = 7,\n\tPOWER_SUPPLY_PROP_VOLTAGE_MAX = 8,\n\tPOWER_SUPPLY_PROP_VOLTAGE_MIN = 9,\n\tPOWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN = 10,\n\tPOWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN = 11,\n\tPOWER_SUPPLY_PROP_VOLTAGE_NOW = 12,\n\tPOWER_SUPPLY_PROP_VOLTAGE_AVG = 13,\n\tPOWER_SUPPLY_PROP_VOLTAGE_OCV = 14,\n\tPOWER_SUPPLY_PROP_VOLTAGE_BOOT = 15,\n\tPOWER_SUPPLY_PROP_CURRENT_MAX = 16,\n\tPOWER_SUPPLY_PROP_CURRENT_NOW = 17,\n\tPOWER_SUPPLY_PROP_CURRENT_AVG = 18,\n\tPOWER_SUPPLY_PROP_CURRENT_BOOT = 19,\n\tPOWER_SUPPLY_PROP_POWER_NOW = 20,\n\tPOWER_SUPPLY_PROP_POWER_AVG = 21,\n\tPOWER_SUPPLY_PROP_CHARGE_FULL_DESIGN = 22,\n\tPOWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN = 23,\n\tPOWER_SUPPLY_PROP_CHARGE_FULL = 24,\n\tPOWER_SUPPLY_PROP_CHARGE_EMPTY = 25,\n\tPOWER_SUPPLY_PROP_CHARGE_NOW = 26,\n\tPOWER_SUPPLY_PROP_CHARGE_AVG = 27,\n\tPOWER_SUPPLY_PROP_CHARGE_COUNTER = 28,\n\tPOWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT = 29,\n\tPOWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX = 30,\n\tPOWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE = 31,\n\tPOWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX = 32,\n\tPOWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT = 33,\n\tPOWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX = 34,\n\tPOWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD = 35,\n\tPOWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD = 36,\n\tPOWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT = 37,\n\tPOWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT = 38,\n\tPOWER_SUPPLY_PROP_INPUT_POWER_LIMIT = 39,\n\tPOWER_SUPPLY_PROP_ENERGY_FULL_DESIGN = 40,\n\tPOWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN = 41,\n\tPOWER_SUPPLY_PROP_ENERGY_FULL = 42,\n\tPOWER_SUPPLY_PROP_ENERGY_EMPTY = 43,\n\tPOWER_SUPPLY_PROP_ENERGY_NOW = 44,\n\tPOWER_SUPPLY_PROP_ENERGY_AVG = 45,\n\tPOWER_SUPPLY_PROP_CAPACITY = 46,\n\tPOWER_SUPPLY_PROP_CAPACITY_ALERT_MIN = 47,\n\tPOWER_SUPPLY_PROP_CAPACITY_ALERT_MAX = 48,\n\tPOWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN = 49,\n\tPOWER_SUPPLY_PROP_CAPACITY_LEVEL = 50,\n\tPOWER_SUPPLY_PROP_TEMP = 51,\n\tPOWER_SUPPLY_PROP_TEMP_MAX = 52,\n\tPOWER_SUPPLY_PROP_TEMP_MIN = 53,\n\tPOWER_SUPPLY_PROP_TEMP_ALERT_MIN = 54,\n\tPOWER_SUPPLY_PROP_TEMP_ALERT_MAX = 55,\n\tPOWER_SUPPLY_PROP_TEMP_AMBIENT = 56,\n\tPOWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN = 57,\n\tPOWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX = 58,\n\tPOWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW = 59,\n\tPOWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG = 60,\n\tPOWER_SUPPLY_PROP_TIME_TO_FULL_NOW = 61,\n\tPOWER_SUPPLY_PROP_TIME_TO_FULL_AVG = 62,\n\tPOWER_SUPPLY_PROP_TYPE = 63,\n\tPOWER_SUPPLY_PROP_USB_TYPE = 64,\n\tPOWER_SUPPLY_PROP_SCOPE = 65,\n\tPOWER_SUPPLY_PROP_PRECHARGE_CURRENT = 66,\n\tPOWER_SUPPLY_PROP_CHARGE_TERM_CURRENT = 67,\n\tPOWER_SUPPLY_PROP_CALIBRATE = 68,\n\tPOWER_SUPPLY_PROP_MANUFACTURE_YEAR = 69,\n\tPOWER_SUPPLY_PROP_MANUFACTURE_MONTH = 70,\n\tPOWER_SUPPLY_PROP_MANUFACTURE_DAY = 71,\n\tPOWER_SUPPLY_PROP_MODEL_NAME = 72,\n\tPOWER_SUPPLY_PROP_MANUFACTURER = 73,\n\tPOWER_SUPPLY_PROP_SERIAL_NUMBER = 74,\n};\n\nenum power_supply_type {\n\tPOWER_SUPPLY_TYPE_UNKNOWN = 0,\n\tPOWER_SUPPLY_TYPE_BATTERY = 1,\n\tPOWER_SUPPLY_TYPE_UPS = 2,\n\tPOWER_SUPPLY_TYPE_MAINS = 3,\n\tPOWER_SUPPLY_TYPE_USB = 4,\n\tPOWER_SUPPLY_TYPE_USB_DCP = 5,\n\tPOWER_SUPPLY_TYPE_USB_CDP = 6,\n\tPOWER_SUPPLY_TYPE_USB_ACA = 7,\n\tPOWER_SUPPLY_TYPE_USB_TYPE_C = 8,\n\tPOWER_SUPPLY_TYPE_USB_PD = 9,\n\tPOWER_SUPPLY_TYPE_USB_PD_DRP = 10,\n\tPOWER_SUPPLY_TYPE_APPLE_BRICK_ID = 11,\n\tPOWER_SUPPLY_TYPE_WIRELESS = 12,\n};\n\nenum power_supply_usb_type {\n\tPOWER_SUPPLY_USB_TYPE_UNKNOWN = 0,\n\tPOWER_SUPPLY_USB_TYPE_SDP = 1,\n\tPOWER_SUPPLY_USB_TYPE_DCP = 2,\n\tPOWER_SUPPLY_USB_TYPE_CDP = 3,\n\tPOWER_SUPPLY_USB_TYPE_ACA = 4,\n\tPOWER_SUPPLY_USB_TYPE_C = 5,\n\tPOWER_SUPPLY_USB_TYPE_PD = 6,\n\tPOWER_SUPPLY_USB_TYPE_PD_DRP = 7,\n\tPOWER_SUPPLY_USB_TYPE_PD_PPS = 8,\n\tPOWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID = 9,\n};\n\nunion power_supply_propval {\n\tint intval;\n\tconst char *strval;\n};\n\nstruct power_supply_config {\n\tstruct device_node *of_node;\n\tstruct fwnode_handle *fwnode;\n\tvoid *drv_data;\n\tconst struct attribute_group **attr_grp;\n\tchar **supplied_to;\n\tsize_t num_supplicants;\n};\n\nstruct power_supply;\n\nstruct power_supply_desc {\n\tconst char *name;\n\tenum power_supply_type type;\n\tconst enum power_supply_usb_type *usb_types;\n\tsize_t num_usb_types;\n\tconst enum power_supply_property *properties;\n\tsize_t num_properties;\n\tint (*get_property)(struct power_supply *, enum power_supply_property, union power_supply_propval *);\n\tint (*set_property)(struct power_supply *, enum power_supply_property, const union power_supply_propval *);\n\tint (*property_is_writeable)(struct power_supply *, enum power_supply_property);\n\tvoid (*external_power_changed)(struct power_supply *);\n\tvoid (*set_charged)(struct power_supply *);\n\tbool no_thermal;\n\tint use_for_apm;\n};\n\nstruct thermal_zone_device;\n\nstruct power_supply {\n\tconst struct power_supply_desc *desc;\n\tchar **supplied_to;\n\tsize_t num_supplicants;\n\tchar **supplied_from;\n\tsize_t num_supplies;\n\tstruct device_node *of_node;\n\tvoid *drv_data;\n\tstruct device dev;\n\tstruct work_struct changed_work;\n\tstruct delayed_work deferred_register_work;\n\tspinlock_t changed_lock;\n\tbool changed;\n\tbool initialized;\n\tbool removing;\n\tatomic_t use_cnt;\n\tstruct thermal_zone_device *tzd;\n\tstruct thermal_cooling_device *tcd;\n\tstruct led_trigger *charging_full_trig;\n\tchar *charging_full_trig_name;\n\tstruct led_trigger *charging_trig;\n\tchar *charging_trig_name;\n\tstruct led_trigger *full_trig;\n\tchar *full_trig_name;\n\tstruct led_trigger *online_trig;\n\tchar *online_trig_name;\n\tstruct led_trigger *charging_blink_full_solid_trig;\n\tchar *charging_blink_full_solid_trig_name;\n};\n\nstruct acpi_ac_bl {\n\tconst char *hid;\n\tint hrv;\n};\n\nstruct acpi_ac {\n\tstruct power_supply *charger;\n\tstruct power_supply_desc charger_desc;\n\tstruct acpi_device *device;\n\tlong long unsigned int state;\n\tstruct notifier_block battery_nb;\n};\n\nstruct input_id {\n\t__u16 bustype;\n\t__u16 vendor;\n\t__u16 product;\n\t__u16 version;\n};\n\nstruct input_absinfo {\n\t__s32 value;\n\t__s32 minimum;\n\t__s32 maximum;\n\t__s32 fuzz;\n\t__s32 flat;\n\t__s32 resolution;\n};\n\nstruct input_keymap_entry {\n\t__u8 flags;\n\t__u8 len;\n\t__u16 index;\n\t__u32 keycode;\n\t__u8 scancode[32];\n};\n\nstruct ff_replay {\n\t__u16 length;\n\t__u16 delay;\n};\n\nstruct ff_trigger {\n\t__u16 button;\n\t__u16 interval;\n};\n\nstruct ff_envelope {\n\t__u16 attack_length;\n\t__u16 attack_level;\n\t__u16 fade_length;\n\t__u16 fade_level;\n};\n\nstruct ff_constant_effect {\n\t__s16 level;\n\tstruct ff_envelope envelope;\n};\n\nstruct ff_ramp_effect {\n\t__s16 start_level;\n\t__s16 end_level;\n\tstruct ff_envelope envelope;\n};\n\nstruct ff_condition_effect {\n\t__u16 right_saturation;\n\t__u16 left_saturation;\n\t__s16 right_coeff;\n\t__s16 left_coeff;\n\t__u16 deadband;\n\t__s16 center;\n};\n\nstruct ff_periodic_effect {\n\t__u16 waveform;\n\t__u16 period;\n\t__s16 magnitude;\n\t__s16 offset;\n\t__u16 phase;\n\tstruct ff_envelope envelope;\n\t__u32 custom_len;\n\t__s16 *custom_data;\n};\n\nstruct ff_rumble_effect {\n\t__u16 strong_magnitude;\n\t__u16 weak_magnitude;\n};\n\nstruct ff_effect {\n\t__u16 type;\n\t__s16 id;\n\t__u16 direction;\n\tstruct ff_trigger trigger;\n\tstruct ff_replay replay;\n\tunion {\n\t\tstruct ff_constant_effect constant;\n\t\tstruct ff_ramp_effect ramp;\n\t\tstruct ff_periodic_effect periodic;\n\t\tstruct ff_condition_effect condition[2];\n\t\tstruct ff_rumble_effect rumble;\n\t} u;\n};\n\nstruct input_device_id {\n\tkernel_ulong_t flags;\n\t__u16 bustype;\n\t__u16 vendor;\n\t__u16 product;\n\t__u16 version;\n\tkernel_ulong_t evbit[1];\n\tkernel_ulong_t keybit[12];\n\tkernel_ulong_t relbit[1];\n\tkernel_ulong_t absbit[1];\n\tkernel_ulong_t mscbit[1];\n\tkernel_ulong_t ledbit[1];\n\tkernel_ulong_t sndbit[1];\n\tkernel_ulong_t ffbit[2];\n\tkernel_ulong_t swbit[1];\n\tkernel_ulong_t propbit[1];\n\tkernel_ulong_t driver_info;\n};\n\nstruct input_value {\n\t__u16 type;\n\t__u16 code;\n\t__s32 value;\n};\n\nenum input_clock_type {\n\tINPUT_CLK_REAL = 0,\n\tINPUT_CLK_MONO = 1,\n\tINPUT_CLK_BOOT = 2,\n\tINPUT_CLK_MAX = 3,\n};\n\nstruct ff_device;\n\nstruct input_dev_poller;\n\nstruct input_mt;\n\nstruct input_handle;\n\nstruct input_dev {\n\tconst char *name;\n\tconst char *phys;\n\tconst char *uniq;\n\tstruct input_id id;\n\tlong unsigned int propbit[1];\n\tlong unsigned int evbit[1];\n\tlong unsigned int keybit[12];\n\tlong unsigned int relbit[1];\n\tlong unsigned int absbit[1];\n\tlong unsigned int mscbit[1];\n\tlong unsigned int ledbit[1];\n\tlong unsigned int sndbit[1];\n\tlong unsigned int ffbit[2];\n\tlong unsigned int swbit[1];\n\tunsigned int hint_events_per_packet;\n\tunsigned int keycodemax;\n\tunsigned int keycodesize;\n\tvoid *keycode;\n\tint (*setkeycode)(struct input_dev *, const struct input_keymap_entry *, unsigned int *);\n\tint (*getkeycode)(struct input_dev *, struct input_keymap_entry *);\n\tstruct ff_device *ff;\n\tstruct input_dev_poller *poller;\n\tunsigned int repeat_key;\n\tstruct timer_list timer;\n\tint rep[2];\n\tstruct input_mt *mt;\n\tstruct input_absinfo *absinfo;\n\tlong unsigned int key[12];\n\tlong unsigned int led[1];\n\tlong unsigned int snd[1];\n\tlong unsigned int sw[1];\n\tint (*open)(struct input_dev *);\n\tvoid (*close)(struct input_dev *);\n\tint (*flush)(struct input_dev *, struct file *);\n\tint (*event)(struct input_dev *, unsigned int, unsigned int, int);\n\tstruct input_handle *grab;\n\tspinlock_t event_lock;\n\tstruct mutex mutex;\n\tunsigned int users;\n\tbool going_away;\n\tstruct device dev;\n\tstruct list_head h_list;\n\tstruct list_head node;\n\tunsigned int num_vals;\n\tunsigned int max_vals;\n\tstruct input_value *vals;\n\tbool devres_managed;\n\tktime_t timestamp[3];\n\tbool inhibited;\n};\n\nstruct ff_device {\n\tint (*upload)(struct input_dev *, struct ff_effect *, struct ff_effect *);\n\tint (*erase)(struct input_dev *, int);\n\tint (*playback)(struct input_dev *, int, int);\n\tvoid (*set_gain)(struct input_dev *, u16);\n\tvoid (*set_autocenter)(struct input_dev *, u16);\n\tvoid (*destroy)(struct ff_device *);\n\tvoid *private;\n\tlong unsigned int ffbit[2];\n\tstruct mutex mutex;\n\tint max_effects;\n\tstruct ff_effect *effects;\n\tstruct file *effect_owners[0];\n};\n\nstruct input_handler;\n\nstruct input_handle {\n\tvoid *private;\n\tint open;\n\tconst char *name;\n\tstruct input_dev *dev;\n\tstruct input_handler *handler;\n\tstruct list_head d_node;\n\tstruct list_head h_node;\n};\n\nstruct input_handler {\n\tvoid *private;\n\tvoid (*event)(struct input_handle *, unsigned int, unsigned int, int);\n\tvoid (*events)(struct input_handle *, const struct input_value *, unsigned int);\n\tbool (*filter)(struct input_handle *, unsigned int, unsigned int, int);\n\tbool (*match)(struct input_handler *, struct input_dev *);\n\tint (*connect)(struct input_handler *, struct input_dev *, const struct input_device_id *);\n\tvoid (*disconnect)(struct input_handle *);\n\tvoid (*start)(struct input_handle *);\n\tbool legacy_minors;\n\tint minor;\n\tconst char *name;\n\tconst struct input_device_id *id_table;\n\tstruct list_head h_list;\n\tstruct list_head node;\n};\n\nenum {\n\tACPI_BUTTON_LID_INIT_IGNORE = 0,\n\tACPI_BUTTON_LID_INIT_OPEN = 1,\n\tACPI_BUTTON_LID_INIT_METHOD = 2,\n\tACPI_BUTTON_LID_INIT_DISABLED = 3,\n};\n\nstruct acpi_button {\n\tunsigned int type;\n\tstruct input_dev *input;\n\tchar phys[32];\n\tlong unsigned int pushed;\n\tint last_state;\n\tktime_t last_time;\n\tbool suspended;\n\tbool lid_state_initialized;\n};\n\nstruct acpi_fan_fps {\n\tu64 control;\n\tu64 trip_point;\n\tu64 speed;\n\tu64 noise_level;\n\tu64 power;\n\tchar name[20];\n\tstruct device_attribute dev_attr;\n};\n\nstruct acpi_fan_fif {\n\tu64 revision;\n\tu64 fine_grain_ctrl;\n\tu64 step_size;\n\tu64 low_speed_notification;\n};\n\nstruct acpi_fan {\n\tbool acpi4;\n\tstruct acpi_fan_fif fif;\n\tstruct acpi_fan_fps *fps;\n\tint fps_count;\n\tstruct thermal_cooling_device *cdev;\n};\n\nstruct acpi_pci_slot {\n\tstruct pci_slot *pci_slot;\n\tstruct list_head list;\n};\n\nstruct acpi_lpi_states_array {\n\tunsigned int size;\n\tunsigned int composite_states_size;\n\tstruct acpi_lpi_state *entries;\n\tstruct acpi_lpi_state *composite_states[8];\n};\n\nstruct throttling_tstate {\n\tunsigned int cpu;\n\tint target_state;\n};\n\nstruct acpi_processor_throttling_arg {\n\tstruct acpi_processor *pr;\n\tint target_state;\n\tbool force;\n};\n\nstruct container_dev {\n\tstruct device dev;\n\tint (*offline)(struct container_dev *);\n};\n\nenum thermal_device_mode {\n\tTHERMAL_DEVICE_DISABLED = 0,\n\tTHERMAL_DEVICE_ENABLED = 1,\n};\n\nenum thermal_trip_type {\n\tTHERMAL_TRIP_ACTIVE = 0,\n\tTHERMAL_TRIP_PASSIVE = 1,\n\tTHERMAL_TRIP_HOT = 2,\n\tTHERMAL_TRIP_CRITICAL = 3,\n};\n\nenum thermal_trend {\n\tTHERMAL_TREND_STABLE = 0,\n\tTHERMAL_TREND_RAISING = 1,\n\tTHERMAL_TREND_DROPPING = 2,\n\tTHERMAL_TREND_RAISE_FULL = 3,\n\tTHERMAL_TREND_DROP_FULL = 4,\n};\n\nenum thermal_notify_event {\n\tTHERMAL_EVENT_UNSPECIFIED = 0,\n\tTHERMAL_EVENT_TEMP_SAMPLE = 1,\n\tTHERMAL_TRIP_VIOLATED = 2,\n\tTHERMAL_TRIP_CHANGED = 3,\n\tTHERMAL_DEVICE_DOWN = 4,\n\tTHERMAL_DEVICE_UP = 5,\n\tTHERMAL_DEVICE_POWER_CAPABILITY_CHANGED = 6,\n\tTHERMAL_TABLE_CHANGED = 7,\n\tTHERMAL_EVENT_KEEP_ALIVE = 8,\n};\n\nstruct thermal_zone_device_ops {\n\tint (*bind)(struct thermal_zone_device *, struct thermal_cooling_device *);\n\tint (*unbind)(struct thermal_zone_device *, struct thermal_cooling_device *);\n\tint (*get_temp)(struct thermal_zone_device *, int *);\n\tint (*set_trips)(struct thermal_zone_device *, int, int);\n\tint (*change_mode)(struct thermal_zone_device *, enum thermal_device_mode);\n\tint (*get_trip_type)(struct thermal_zone_device *, int, enum thermal_trip_type *);\n\tint (*get_trip_temp)(struct thermal_zone_device *, int, int *);\n\tint (*set_trip_temp)(struct thermal_zone_device *, int, int);\n\tint (*get_trip_hyst)(struct thermal_zone_device *, int, int *);\n\tint (*set_trip_hyst)(struct thermal_zone_device *, int, int);\n\tint (*get_crit_temp)(struct thermal_zone_device *, int *);\n\tint (*set_emul_temp)(struct thermal_zone_device *, int);\n\tint (*get_trend)(struct thermal_zone_device *, int, enum thermal_trend *);\n\tint (*notify)(struct thermal_zone_device *, int, enum thermal_trip_type);\n\tvoid (*hot)(struct thermal_zone_device *);\n\tvoid (*critical)(struct thermal_zone_device *);\n};\n\nstruct thermal_attr;\n\nstruct thermal_zone_params;\n\nstruct thermal_governor;\n\nstruct thermal_zone_device {\n\tint id;\n\tchar type[20];\n\tstruct device device;\n\tstruct attribute_group trips_attribute_group;\n\tstruct thermal_attr *trip_temp_attrs;\n\tstruct thermal_attr *trip_type_attrs;\n\tstruct thermal_attr *trip_hyst_attrs;\n\tenum thermal_device_mode mode;\n\tvoid *devdata;\n\tint trips;\n\tlong unsigned int trips_disabled;\n\tint passive_delay;\n\tint polling_delay;\n\tint temperature;\n\tint last_temperature;\n\tint emul_temperature;\n\tint passive;\n\tint prev_low_trip;\n\tint prev_high_trip;\n\tunsigned int forced_passive;\n\tatomic_t need_update;\n\tstruct thermal_zone_device_ops *ops;\n\tstruct thermal_zone_params *tzp;\n\tstruct thermal_governor *governor;\n\tvoid *governor_data;\n\tstruct list_head thermal_instances;\n\tstruct ida ida;\n\tstruct mutex lock;\n\tstruct list_head node;\n\tstruct delayed_work poll_queue;\n\tenum thermal_notify_event notify_event;\n};\n\nstruct thermal_bind_params;\n\nstruct thermal_zone_params {\n\tchar governor_name[20];\n\tbool no_hwmon;\n\tint num_tbps;\n\tstruct thermal_bind_params *tbp;\n\tu32 sustainable_power;\n\ts32 k_po;\n\ts32 k_pu;\n\ts32 k_i;\n\ts32 k_d;\n\ts32 integral_cutoff;\n\tint slope;\n\tint offset;\n};\n\nstruct thermal_governor {\n\tchar name[20];\n\tint (*bind_to_tz)(struct thermal_zone_device *);\n\tvoid (*unbind_from_tz)(struct thermal_zone_device *);\n\tint (*throttle)(struct thermal_zone_device *, int);\n\tstruct list_head governor_list;\n};\n\nstruct thermal_bind_params {\n\tstruct thermal_cooling_device *cdev;\n\tint weight;\n\tint trip_mask;\n\tlong unsigned int *binding_limits;\n\tint (*match)(struct thermal_zone_device *, struct thermal_cooling_device *);\n};\n\nstruct acpi_thermal_state {\n\tu8 critical: 1;\n\tu8 hot: 1;\n\tu8 passive: 1;\n\tu8 active: 1;\n\tu8 reserved: 4;\n\tint active_index;\n};\n\nstruct acpi_thermal_state_flags {\n\tu8 valid: 1;\n\tu8 enabled: 1;\n\tu8 reserved: 6;\n};\n\nstruct acpi_thermal_critical {\n\tstruct acpi_thermal_state_flags flags;\n\tlong unsigned int temperature;\n};\n\nstruct acpi_thermal_hot {\n\tstruct acpi_thermal_state_flags flags;\n\tlong unsigned int temperature;\n};\n\nstruct acpi_thermal_passive {\n\tstruct acpi_thermal_state_flags flags;\n\tlong unsigned int temperature;\n\tlong unsigned int tc1;\n\tlong unsigned int tc2;\n\tlong unsigned int tsp;\n\tstruct acpi_handle_list devices;\n};\n\nstruct acpi_thermal_active {\n\tstruct acpi_thermal_state_flags flags;\n\tlong unsigned int temperature;\n\tstruct acpi_handle_list devices;\n};\n\nstruct acpi_thermal_trips {\n\tstruct acpi_thermal_critical critical;\n\tstruct acpi_thermal_hot hot;\n\tstruct acpi_thermal_passive passive;\n\tstruct acpi_thermal_active active[10];\n};\n\nstruct acpi_thermal_flags {\n\tu8 cooling_mode: 1;\n\tu8 devices: 1;\n\tu8 reserved: 6;\n};\n\nstruct acpi_thermal {\n\tstruct acpi_device *device;\n\tacpi_bus_id name;\n\tlong unsigned int temperature;\n\tlong unsigned int last_temperature;\n\tlong unsigned int polling_frequency;\n\tvolatile u8 zombie;\n\tstruct acpi_thermal_flags flags;\n\tstruct acpi_thermal_state state;\n\tstruct acpi_thermal_trips trips;\n\tstruct acpi_handle_list devices;\n\tstruct thermal_zone_device *thermal_zone;\n\tint kelvin_offset;\n\tstruct work_struct thermal_check_work;\n\tstruct mutex thermal_check_lock;\n\trefcount_t thermal_check_count;\n};\n\nstruct acpi_table_slit {\n\tstruct acpi_table_header header;\n\tu64 locality_count;\n\tu8 entry[1];\n} __attribute__((packed));\n\nstruct acpi_table_srat {\n\tstruct acpi_table_header header;\n\tu32 table_revision;\n\tu64 reserved;\n};\n\nenum acpi_srat_type {\n\tACPI_SRAT_TYPE_CPU_AFFINITY = 0,\n\tACPI_SRAT_TYPE_MEMORY_AFFINITY = 1,\n\tACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2,\n\tACPI_SRAT_TYPE_GICC_AFFINITY = 3,\n\tACPI_SRAT_TYPE_GIC_ITS_AFFINITY = 4,\n\tACPI_SRAT_TYPE_GENERIC_AFFINITY = 5,\n\tACPI_SRAT_TYPE_RESERVED = 6,\n};\n\nstruct acpi_srat_mem_affinity {\n\tstruct acpi_subtable_header header;\n\tu32 proximity_domain;\n\tu16 reserved;\n\tu64 base_address;\n\tu64 length;\n\tu32 reserved1;\n\tu32 flags;\n\tu64 reserved2;\n} __attribute__((packed));\n\nstruct acpi_srat_gicc_affinity {\n\tstruct acpi_subtable_header header;\n\tu32 proximity_domain;\n\tu32 acpi_processor_uid;\n\tu32 flags;\n\tu32 clock_domain;\n} __attribute__((packed));\n\nstruct acpi_srat_generic_affinity {\n\tstruct acpi_subtable_header header;\n\tu8 reserved;\n\tu8 device_handle_type;\n\tu32 proximity_domain;\n\tu8 device_handle[16];\n\tu32 flags;\n\tu32 reserved1;\n};\n\nenum acpi_hmat_type {\n\tACPI_HMAT_TYPE_PROXIMITY = 0,\n\tACPI_HMAT_TYPE_LOCALITY = 1,\n\tACPI_HMAT_TYPE_CACHE = 2,\n\tACPI_HMAT_TYPE_RESERVED = 3,\n};\n\nstruct acpi_hmat_proximity_domain {\n\tstruct acpi_hmat_structure header;\n\tu16 flags;\n\tu16 reserved1;\n\tu32 processor_PD;\n\tu32 memory_PD;\n\tu32 reserved2;\n\tu64 reserved3;\n\tu64 reserved4;\n};\n\nstruct acpi_hmat_locality {\n\tstruct acpi_hmat_structure header;\n\tu8 flags;\n\tu8 data_type;\n\tu16 reserved1;\n\tu32 number_of_initiator_Pds;\n\tu32 number_of_target_Pds;\n\tu32 reserved2;\n\tu64 entry_base_unit;\n};\n\nstruct acpi_hmat_cache {\n\tstruct acpi_hmat_structure header;\n\tu32 memory_PD;\n\tu32 reserved1;\n\tu64 cache_size;\n\tu32 cache_attributes;\n\tu16 reserved2;\n\tu16 number_of_SMBIOShandles;\n};\n\nstruct node_hmem_attrs {\n\tunsigned int read_bandwidth;\n\tunsigned int write_bandwidth;\n\tunsigned int read_latency;\n\tunsigned int write_latency;\n};\n\nenum cache_indexing {\n\tNODE_CACHE_DIRECT_MAP = 0,\n\tNODE_CACHE_INDEXED = 1,\n\tNODE_CACHE_OTHER = 2,\n};\n\nenum cache_write_policy {\n\tNODE_CACHE_WRITE_BACK = 0,\n\tNODE_CACHE_WRITE_THROUGH = 1,\n\tNODE_CACHE_WRITE_OTHER = 2,\n};\n\nstruct node_cache_attrs {\n\tenum cache_indexing indexing;\n\tenum cache_write_policy write_policy;\n\tu64 size;\n\tu16 line_size;\n\tu8 level;\n};\n\nenum locality_types {\n\tWRITE_LATENCY = 0,\n\tREAD_LATENCY = 1,\n\tWRITE_BANDWIDTH = 2,\n\tREAD_BANDWIDTH = 3,\n};\n\nstruct memory_locality {\n\tstruct list_head node;\n\tstruct acpi_hmat_locality *hmat_loc;\n};\n\nstruct target_cache {\n\tstruct list_head node;\n\tstruct node_cache_attrs cache_attrs;\n};\n\nstruct memory_target {\n\tstruct list_head node;\n\tunsigned int memory_pxm;\n\tunsigned int processor_pxm;\n\tstruct resource memregions;\n\tstruct node_hmem_attrs hmem_attrs[2];\n\tstruct list_head caches;\n\tstruct node_cache_attrs cache_attrs;\n\tbool registered;\n};\n\nstruct memory_initiator {\n\tstruct list_head node;\n\tunsigned int processor_pxm;\n\tbool has_cpu;\n};\n\nstruct acpi_memory_info {\n\tstruct list_head list;\n\tu64 start_addr;\n\tu64 length;\n\tshort unsigned int caching;\n\tshort unsigned int write_protect;\n\tunsigned int enabled: 1;\n};\n\nstruct acpi_memory_device {\n\tstruct acpi_device *device;\n\tstruct list_head res_list;\n};\n\nstruct acpi_pci_ioapic {\n\tacpi_handle root_handle;\n\tacpi_handle handle;\n\tu32 gsi_base;\n\tstruct resource res;\n\tstruct pci_dev *pdev;\n\tstruct list_head list;\n};\n\nenum dmi_entry_type {\n\tDMI_ENTRY_BIOS = 0,\n\tDMI_ENTRY_SYSTEM = 1,\n\tDMI_ENTRY_BASEBOARD = 2,\n\tDMI_ENTRY_CHASSIS = 3,\n\tDMI_ENTRY_PROCESSOR = 4,\n\tDMI_ENTRY_MEM_CONTROLLER = 5,\n\tDMI_ENTRY_MEM_MODULE = 6,\n\tDMI_ENTRY_CACHE = 7,\n\tDMI_ENTRY_PORT_CONNECTOR = 8,\n\tDMI_ENTRY_SYSTEM_SLOT = 9,\n\tDMI_ENTRY_ONBOARD_DEVICE = 10,\n\tDMI_ENTRY_OEMSTRINGS = 11,\n\tDMI_ENTRY_SYSCONF = 12,\n\tDMI_ENTRY_BIOS_LANG = 13,\n\tDMI_ENTRY_GROUP_ASSOC = 14,\n\tDMI_ENTRY_SYSTEM_EVENT_LOG = 15,\n\tDMI_ENTRY_PHYS_MEM_ARRAY = 16,\n\tDMI_ENTRY_MEM_DEVICE = 17,\n\tDMI_ENTRY_32_MEM_ERROR = 18,\n\tDMI_ENTRY_MEM_ARRAY_MAPPED_ADDR = 19,\n\tDMI_ENTRY_MEM_DEV_MAPPED_ADDR = 20,\n\tDMI_ENTRY_BUILTIN_POINTING_DEV = 21,\n\tDMI_ENTRY_PORTABLE_BATTERY = 22,\n\tDMI_ENTRY_SYSTEM_RESET = 23,\n\tDMI_ENTRY_HW_SECURITY = 24,\n\tDMI_ENTRY_SYSTEM_POWER_CONTROLS = 25,\n\tDMI_ENTRY_VOLTAGE_PROBE = 26,\n\tDMI_ENTRY_COOLING_DEV = 27,\n\tDMI_ENTRY_TEMP_PROBE = 28,\n\tDMI_ENTRY_ELECTRICAL_CURRENT_PROBE = 29,\n\tDMI_ENTRY_OOB_REMOTE_ACCESS = 30,\n\tDMI_ENTRY_BIS_ENTRY = 31,\n\tDMI_ENTRY_SYSTEM_BOOT = 32,\n\tDMI_ENTRY_MGMT_DEV = 33,\n\tDMI_ENTRY_MGMT_DEV_COMPONENT = 34,\n\tDMI_ENTRY_MGMT_DEV_THRES = 35,\n\tDMI_ENTRY_MEM_CHANNEL = 36,\n\tDMI_ENTRY_IPMI_DEV = 37,\n\tDMI_ENTRY_SYS_POWER_SUPPLY = 38,\n\tDMI_ENTRY_ADDITIONAL = 39,\n\tDMI_ENTRY_ONBOARD_DEV_EXT = 40,\n\tDMI_ENTRY_MGMT_CONTROLLER_HOST = 41,\n\tDMI_ENTRY_INACTIVE = 126,\n\tDMI_ENTRY_END_OF_TABLE = 127,\n};\n\nenum {\n\tPOWER_SUPPLY_STATUS_UNKNOWN = 0,\n\tPOWER_SUPPLY_STATUS_CHARGING = 1,\n\tPOWER_SUPPLY_STATUS_DISCHARGING = 2,\n\tPOWER_SUPPLY_STATUS_NOT_CHARGING = 3,\n\tPOWER_SUPPLY_STATUS_FULL = 4,\n};\n\nenum {\n\tPOWER_SUPPLY_TECHNOLOGY_UNKNOWN = 0,\n\tPOWER_SUPPLY_TECHNOLOGY_NiMH = 1,\n\tPOWER_SUPPLY_TECHNOLOGY_LION = 2,\n\tPOWER_SUPPLY_TECHNOLOGY_LIPO = 3,\n\tPOWER_SUPPLY_TECHNOLOGY_LiFe = 4,\n\tPOWER_SUPPLY_TECHNOLOGY_NiCd = 5,\n\tPOWER_SUPPLY_TECHNOLOGY_LiMn = 6,\n};\n\nenum {\n\tPOWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,\n\tPOWER_SUPPLY_CAPACITY_LEVEL_CRITICAL = 1,\n\tPOWER_SUPPLY_CAPACITY_LEVEL_LOW = 2,\n\tPOWER_SUPPLY_CAPACITY_LEVEL_NORMAL = 3,\n\tPOWER_SUPPLY_CAPACITY_LEVEL_HIGH = 4,\n\tPOWER_SUPPLY_CAPACITY_LEVEL_FULL = 5,\n};\n\nstruct acpi_battery_hook {\n\tconst char *name;\n\tint (*add_battery)(struct power_supply *);\n\tint (*remove_battery)(struct power_supply *);\n\tstruct list_head list;\n};\n\nenum {\n\tACPI_BATTERY_ALARM_PRESENT = 0,\n\tACPI_BATTERY_XINFO_PRESENT = 1,\n\tACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY = 2,\n\tACPI_BATTERY_QUIRK_THINKPAD_MAH = 3,\n\tACPI_BATTERY_QUIRK_DEGRADED_FULL_CHARGE = 4,\n};\n\nstruct acpi_battery {\n\tstruct mutex lock;\n\tstruct mutex sysfs_lock;\n\tstruct power_supply *bat;\n\tstruct power_supply_desc bat_desc;\n\tstruct acpi_device *device;\n\tstruct notifier_block pm_nb;\n\tstruct list_head list;\n\tlong unsigned int update_time;\n\tint revision;\n\tint rate_now;\n\tint capacity_now;\n\tint voltage_now;\n\tint design_capacity;\n\tint full_charge_capacity;\n\tint technology;\n\tint design_voltage;\n\tint design_capacity_warning;\n\tint design_capacity_low;\n\tint cycle_count;\n\tint measurement_accuracy;\n\tint max_sampling_time;\n\tint min_sampling_time;\n\tint max_averaging_interval;\n\tint min_averaging_interval;\n\tint capacity_granularity_1;\n\tint capacity_granularity_2;\n\tint alarm;\n\tchar model_number[32];\n\tchar serial_number[32];\n\tchar type[32];\n\tchar oem_info[32];\n\tint state;\n\tint power_unit;\n\tlong unsigned int flags;\n};\n\nstruct acpi_offsets {\n\tsize_t offset;\n\tu8 mode;\n};\n\nstruct acpi_pcct_hw_reduced {\n\tstruct acpi_subtable_header header;\n\tu32 platform_interrupt;\n\tu8 flags;\n\tu8 reserved;\n\tu64 base_address;\n\tu64 length;\n\tstruct acpi_generic_address doorbell_register;\n\tu64 preserve_mask;\n\tu64 write_mask;\n\tu32 latency;\n\tu32 max_access_rate;\n\tu16 min_turnaround_time;\n} __attribute__((packed));\n\nstruct acpi_pcct_shared_memory {\n\tu32 signature;\n\tu16 command;\n\tu16 status;\n};\n\nstruct mbox_chan;\n\nstruct mbox_chan_ops {\n\tint (*send_data)(struct mbox_chan *, void *);\n\tint (*flush)(struct mbox_chan *, long unsigned int);\n\tint (*startup)(struct mbox_chan *);\n\tvoid (*shutdown)(struct mbox_chan *);\n\tbool (*last_tx_done)(struct mbox_chan *);\n\tbool (*peek_data)(struct mbox_chan *);\n};\n\nstruct mbox_controller;\n\nstruct mbox_client;\n\nstruct mbox_chan {\n\tstruct mbox_controller *mbox;\n\tunsigned int txdone_method;\n\tstruct mbox_client *cl;\n\tstruct completion tx_complete;\n\tvoid *active_req;\n\tunsigned int msg_count;\n\tunsigned int msg_free;\n\tvoid *msg_data[20];\n\tspinlock_t lock;\n\tvoid *con_priv;\n};\n\nstruct mbox_controller {\n\tstruct device *dev;\n\tconst struct mbox_chan_ops *ops;\n\tstruct mbox_chan *chans;\n\tint num_chans;\n\tbool txdone_irq;\n\tbool txdone_poll;\n\tunsigned int txpoll_period;\n\tstruct mbox_chan * (*of_xlate)(struct mbox_controller *, const struct of_phandle_args *);\n\tstruct hrtimer poll_hrt;\n\tstruct list_head node;\n};\n\nstruct mbox_client {\n\tstruct device *dev;\n\tbool tx_block;\n\tlong unsigned int tx_tout;\n\tbool knows_txdone;\n\tvoid (*rx_callback)(struct mbox_client *, void *);\n\tvoid (*tx_prepare)(struct mbox_client *, void *);\n\tvoid (*tx_done)(struct mbox_client *, void *, int);\n};\n\nstruct cpc_register_resource {\n\tacpi_object_type type;\n\tu64 *sys_mem_vaddr;\n\tunion {\n\t\tstruct cpc_reg reg;\n\t\tu64 int_value;\n\t} cpc_entry;\n};\n\nstruct cpc_desc {\n\tint num_entries;\n\tint version;\n\tint cpu_id;\n\tint write_cmd_status;\n\tint write_cmd_id;\n\tstruct cpc_register_resource cpc_regs[21];\n\tstruct acpi_psd_package domain_info;\n\tstruct kobject kobj;\n};\n\nenum cppc_regs {\n\tHIGHEST_PERF = 0,\n\tNOMINAL_PERF = 1,\n\tLOW_NON_LINEAR_PERF = 2,\n\tLOWEST_PERF = 3,\n\tGUARANTEED_PERF = 4,\n\tDESIRED_PERF = 5,\n\tMIN_PERF = 6,\n\tMAX_PERF = 7,\n\tPERF_REDUC_TOLERANCE = 8,\n\tTIME_WINDOW = 9,\n\tCTR_WRAP_TIME = 10,\n\tREFERENCE_CTR = 11,\n\tDELIVERED_CTR = 12,\n\tPERF_LIMITED = 13,\n\tENABLE = 14,\n\tAUTO_SEL_ENABLE = 15,\n\tAUTO_ACT_WINDOW = 16,\n\tENERGY_PERF = 17,\n\tREFERENCE_PERF = 18,\n\tLOWEST_FREQ = 19,\n\tNOMINAL_FREQ = 20,\n};\n\nstruct cppc_perf_ctrls {\n\tu32 max_perf;\n\tu32 min_perf;\n\tu32 desired_perf;\n};\n\nstruct cppc_perf_fb_ctrs {\n\tu64 reference;\n\tu64 delivered;\n\tu64 reference_perf;\n\tu64 wraparound_time;\n};\n\nstruct cppc_cpudata {\n\tstruct list_head node;\n\tstruct cppc_perf_caps perf_caps;\n\tstruct cppc_perf_ctrls perf_ctrls;\n\tstruct cppc_perf_fb_ctrs perf_fb_ctrs;\n\tunsigned int shared_type;\n\tcpumask_var_t shared_cpu_map;\n};\n\nstruct cppc_pcc_data {\n\tstruct mbox_chan *pcc_channel;\n\tvoid *pcc_comm_addr;\n\tbool pcc_channel_acquired;\n\tunsigned int deadline_us;\n\tunsigned int pcc_mpar;\n\tunsigned int pcc_mrtt;\n\tunsigned int pcc_nominal;\n\tbool pending_pcc_write_cmd;\n\tbool platform_owns_pcc;\n\tunsigned int pcc_write_cnt;\n\tstruct rw_semaphore pcc_lock;\n\twait_queue_head_t pcc_write_wait_q;\n\tktime_t last_cmd_cmpl_time;\n\tktime_t last_mpar_reset;\n\tint mpar_count;\n\tint refcount;\n};\n\nstruct cppc_attr {\n\tstruct attribute attr;\n\tssize_t (*show)(struct kobject *, struct attribute *, char *);\n\tssize_t (*store)(struct kobject *, struct attribute *, const char *, ssize_t);\n};\n\nstruct acpi_whea_header {\n\tu8 action;\n\tu8 instruction;\n\tu8 flags;\n\tu8 reserved;\n\tstruct acpi_generic_address register_region;\n\tu64 value;\n\tu64 mask;\n} __attribute__((packed));\n\nstruct apei_exec_context;\n\ntypedef int (*apei_exec_ins_func_t)(struct apei_exec_context *, struct acpi_whea_header *);\n\nstruct apei_exec_ins_type;\n\nstruct apei_exec_context {\n\tu32 ip;\n\tu64 value;\n\tu64 var1;\n\tu64 var2;\n\tu64 src_base;\n\tu64 dst_base;\n\tstruct apei_exec_ins_type *ins_table;\n\tu32 instructions;\n\tstruct acpi_whea_header *action_table;\n\tu32 entries;\n};\n\nstruct apei_exec_ins_type {\n\tu32 flags;\n\tapei_exec_ins_func_t run;\n};\n\nstruct apei_resources {\n\tstruct list_head iomem;\n\tstruct list_head ioport;\n};\n\ntypedef int (*apei_exec_entry_func_t)(struct apei_exec_context *, struct acpi_whea_header *, void *);\n\nstruct apei_res {\n\tstruct list_head list;\n\tlong unsigned int start;\n\tlong unsigned int end;\n};\n\nstruct acpi_table_hest {\n\tstruct acpi_table_header header;\n\tu32 error_source_count;\n};\n\nenum acpi_hest_types {\n\tACPI_HEST_TYPE_IA32_CHECK = 0,\n\tACPI_HEST_TYPE_IA32_CORRECTED_CHECK = 1,\n\tACPI_HEST_TYPE_IA32_NMI = 2,\n\tACPI_HEST_TYPE_NOT_USED3 = 3,\n\tACPI_HEST_TYPE_NOT_USED4 = 4,\n\tACPI_HEST_TYPE_NOT_USED5 = 5,\n\tACPI_HEST_TYPE_AER_ROOT_PORT = 6,\n\tACPI_HEST_TYPE_AER_ENDPOINT = 7,\n\tACPI_HEST_TYPE_AER_BRIDGE = 8,\n\tACPI_HEST_TYPE_GENERIC_ERROR = 9,\n\tACPI_HEST_TYPE_GENERIC_ERROR_V2 = 10,\n\tACPI_HEST_TYPE_IA32_DEFERRED_CHECK = 11,\n\tACPI_HEST_TYPE_RESERVED = 12,\n};\n\nstruct acpi_hest_ia_machine_check {\n\tstruct acpi_hest_header header;\n\tu16 reserved1;\n\tu8 flags;\n\tu8 enabled;\n\tu32 records_to_preallocate;\n\tu32 max_sections_per_record;\n\tu64 global_capability_data;\n\tu64 global_control_data;\n\tu8 num_hardware_banks;\n\tu8 reserved3[7];\n};\n\nstruct acpi_hest_generic {\n\tstruct acpi_hest_header header;\n\tu16 related_source_id;\n\tu8 reserved;\n\tu8 enabled;\n\tu32 records_to_preallocate;\n\tu32 max_sections_per_record;\n\tu32 max_raw_data_length;\n\tstruct acpi_generic_address error_status_address;\n\tstruct acpi_hest_notify notify;\n\tu32 error_block_length;\n} __attribute__((packed));\n\nstruct acpi_hest_ia_deferred_check {\n\tstruct acpi_hest_header header;\n\tu16 reserved1;\n\tu8 flags;\n\tu8 enabled;\n\tu32 records_to_preallocate;\n\tu32 max_sections_per_record;\n\tstruct acpi_hest_notify notify;\n\tu8 num_hardware_banks;\n\tu8 reserved2[3];\n};\n\nenum hest_status {\n\tHEST_ENABLED = 0,\n\tHEST_DISABLED = 1,\n\tHEST_NOT_FOUND = 2,\n};\n\ntypedef int (*apei_hest_func_t)(struct acpi_hest_header *, void *);\n\nstruct ghes_arr {\n\tstruct platform_device **ghes_devs;\n\tunsigned int count;\n};\n\nstruct acpi_table_erst {\n\tstruct acpi_table_header header;\n\tu32 header_length;\n\tu32 reserved;\n\tu32 entries;\n};\n\nenum acpi_erst_actions {\n\tACPI_ERST_BEGIN_WRITE = 0,\n\tACPI_ERST_BEGIN_READ = 1,\n\tACPI_ERST_BEGIN_CLEAR = 2,\n\tACPI_ERST_END = 3,\n\tACPI_ERST_SET_RECORD_OFFSET = 4,\n\tACPI_ERST_EXECUTE_OPERATION = 5,\n\tACPI_ERST_CHECK_BUSY_STATUS = 6,\n\tACPI_ERST_GET_COMMAND_STATUS = 7,\n\tACPI_ERST_GET_RECORD_ID = 8,\n\tACPI_ERST_SET_RECORD_ID = 9,\n\tACPI_ERST_GET_RECORD_COUNT = 10,\n\tACPI_ERST_BEGIN_DUMMY_WRIITE = 11,\n\tACPI_ERST_NOT_USED = 12,\n\tACPI_ERST_GET_ERROR_RANGE = 13,\n\tACPI_ERST_GET_ERROR_LENGTH = 14,\n\tACPI_ERST_GET_ERROR_ATTRIBUTES = 15,\n\tACPI_ERST_EXECUTE_TIMINGS = 16,\n\tACPI_ERST_ACTION_RESERVED = 17,\n};\n\nenum acpi_erst_instructions {\n\tACPI_ERST_READ_REGISTER = 0,\n\tACPI_ERST_READ_REGISTER_VALUE = 1,\n\tACPI_ERST_WRITE_REGISTER = 2,\n\tACPI_ERST_WRITE_REGISTER_VALUE = 3,\n\tACPI_ERST_NOOP = 4,\n\tACPI_ERST_LOAD_VAR1 = 5,\n\tACPI_ERST_LOAD_VAR2 = 6,\n\tACPI_ERST_STORE_VAR1 = 7,\n\tACPI_ERST_ADD = 8,\n\tACPI_ERST_SUBTRACT = 9,\n\tACPI_ERST_ADD_VALUE = 10,\n\tACPI_ERST_SUBTRACT_VALUE = 11,\n\tACPI_ERST_STALL = 12,\n\tACPI_ERST_STALL_WHILE_TRUE = 13,\n\tACPI_ERST_SKIP_NEXT_IF_TRUE = 14,\n\tACPI_ERST_GOTO = 15,\n\tACPI_ERST_SET_SRC_ADDRESS_BASE = 16,\n\tACPI_ERST_SET_DST_ADDRESS_BASE = 17,\n\tACPI_ERST_MOVE_DATA = 18,\n\tACPI_ERST_INSTRUCTION_RESERVED = 19,\n};\n\nstruct erst_erange {\n\tu64 base;\n\tu64 size;\n\tvoid *vaddr;\n\tu32 attr;\n};\n\nstruct erst_record_id_cache {\n\tstruct mutex lock;\n\tu64 *entries;\n\tint len;\n\tint size;\n\tint refcount;\n};\n\nstruct cper_pstore_record {\n\tstruct cper_record_header hdr;\n\tstruct cper_section_descriptor sec_hdr;\n\tchar data[0];\n};\n\nstruct acpi_bert_region {\n\tu32 block_status;\n\tu32 raw_data_offset;\n\tu32 raw_data_length;\n\tu32 data_length;\n\tu32 error_severity;\n};\n\nstruct acpi_hest_generic_status {\n\tu32 block_status;\n\tu32 raw_data_offset;\n\tu32 raw_data_length;\n\tu32 data_length;\n\tu32 error_severity;\n};\n\nenum acpi_hest_notify_types {\n\tACPI_HEST_NOTIFY_POLLED = 0,\n\tACPI_HEST_NOTIFY_EXTERNAL = 1,\n\tACPI_HEST_NOTIFY_LOCAL = 2,\n\tACPI_HEST_NOTIFY_SCI = 3,\n\tACPI_HEST_NOTIFY_NMI = 4,\n\tACPI_HEST_NOTIFY_CMCI = 5,\n\tACPI_HEST_NOTIFY_MCE = 6,\n\tACPI_HEST_NOTIFY_GPIO = 7,\n\tACPI_HEST_NOTIFY_SEA = 8,\n\tACPI_HEST_NOTIFY_SEI = 9,\n\tACPI_HEST_NOTIFY_GSIV = 10,\n\tACPI_HEST_NOTIFY_SOFTWARE_DELEGATED = 11,\n\tACPI_HEST_NOTIFY_RESERVED = 12,\n};\n\nstruct acpi_hest_generic_v2 {\n\tstruct acpi_hest_header header;\n\tu16 related_source_id;\n\tu8 reserved;\n\tu8 enabled;\n\tu32 records_to_preallocate;\n\tu32 max_sections_per_record;\n\tu32 max_raw_data_length;\n\tstruct acpi_generic_address error_status_address;\n\tstruct acpi_hest_notify notify;\n\tu32 error_block_length;\n\tstruct acpi_generic_address read_ack_register;\n\tu64 read_ack_preserve;\n\tu64 read_ack_write;\n} __attribute__((packed));\n\nstruct acpi_hest_generic_data {\n\tu8 section_type[16];\n\tu32 error_severity;\n\tu16 revision;\n\tu8 validation_bits;\n\tu8 flags;\n\tu32 error_data_length;\n\tu8 fru_id[16];\n\tu8 fru_text[20];\n};\n\nstruct acpi_hest_generic_data_v300 {\n\tu8 section_type[16];\n\tu32 error_severity;\n\tu16 revision;\n\tu8 validation_bits;\n\tu8 flags;\n\tu32 error_data_length;\n\tu8 fru_id[16];\n\tu8 fru_text[20];\n\tu64 time_stamp;\n};\n\nstruct cper_sec_proc_arm {\n\tu32 validation_bits;\n\tu16 err_info_num;\n\tu16 context_info_num;\n\tu32 section_length;\n\tu8 affinity_level;\n\tu8 reserved[3];\n\tu64 mpidr;\n\tu64 midr;\n\tu32 running_state;\n\tu32 psci_state;\n};\n\nstruct cper_sec_pcie {\n\tu64 validation_bits;\n\tu32 port_type;\n\tstruct {\n\t\tu8 minor;\n\t\tu8 major;\n\t\tu8 reserved[2];\n\t} version;\n\tu16 command;\n\tu16 status;\n\tu32 reserved;\n\tstruct {\n\t\tu16 vendor_id;\n\t\tu16 device_id;\n\t\tu8 class_code[3];\n\t\tu8 function;\n\t\tu8 device;\n\t\tu16 segment;\n\t\tu8 bus;\n\t\tu8 secondary_bus;\n\t\tu16 slot;\n\t\tu8 reserved;\n\t} __attribute__((packed)) device_id;\n\tstruct {\n\t\tu32 lower;\n\t\tu32 upper;\n\t} serial_number;\n\tstruct {\n\t\tu16 secondary_status;\n\t\tu16 control;\n\t} bridge;\n\tu8 capability[60];\n\tu8 aer_info[96];\n};\n\nstruct ghes {\n\tunion {\n\t\tstruct acpi_hest_generic *generic;\n\t\tstruct acpi_hest_generic_v2 *generic_v2;\n\t};\n\tstruct acpi_hest_generic_status *estatus;\n\tlong unsigned int flags;\n\tunion {\n\t\tstruct list_head list;\n\t\tstruct timer_list timer;\n\t\tunsigned int irq;\n\t};\n};\n\nstruct ghes_estatus_node {\n\tstruct llist_node llnode;\n\tstruct acpi_hest_generic *generic;\n\tstruct ghes *ghes;\n\tint task_work_cpu;\n\tstruct callback_head task_work;\n};\n\nstruct ghes_estatus_cache {\n\tu32 estatus_len;\n\tatomic_t count;\n\tstruct acpi_hest_generic *generic;\n\tlong long unsigned int time_in;\n\tstruct callback_head rcu;\n};\n\nstruct ghes_vendor_record_entry {\n\tstruct work_struct work;\n\tint error_severity;\n\tchar vendor_record[0];\n};\n\nstruct pmic_table {\n\tint address;\n\tint reg;\n\tint bit;\n};\n\nstruct intel_pmic_opregion_data {\n\tint (*get_power)(struct regmap *, int, int, u64 *);\n\tint (*update_power)(struct regmap *, int, int, bool);\n\tint (*get_raw_temp)(struct regmap *, int);\n\tint (*update_aux)(struct regmap *, int, int);\n\tint (*get_policy)(struct regmap *, int, int, u64 *);\n\tint (*update_policy)(struct regmap *, int, int, int);\n\tint (*exec_mipi_pmic_seq_element)(struct regmap *, u16, u32, u32, u32);\n\tstruct pmic_table *power_table;\n\tint power_table_count;\n\tstruct pmic_table *thermal_table;\n\tint thermal_table_count;\n\tint pmic_i2c_address;\n};\n\nstruct intel_pmic_regs_handler_ctx {\n\tunsigned int val;\n\tu16 addr;\n};\n\nstruct intel_pmic_opregion {\n\tstruct mutex lock;\n\tstruct acpi_lpat_conversion_table *lpat_table;\n\tstruct regmap *regmap;\n\tstruct intel_pmic_opregion_data *data;\n\tstruct intel_pmic_regs_handler_ctx ctx;\n};\n\nenum regcache_type {\n\tREGCACHE_NONE = 0,\n\tREGCACHE_RBTREE = 1,\n\tREGCACHE_COMPRESSED = 2,\n\tREGCACHE_FLAT = 3,\n};\n\nstruct reg_default {\n\tunsigned int reg;\n\tunsigned int def;\n};\n\nenum regmap_endian {\n\tREGMAP_ENDIAN_DEFAULT = 0,\n\tREGMAP_ENDIAN_BIG = 1,\n\tREGMAP_ENDIAN_LITTLE = 2,\n\tREGMAP_ENDIAN_NATIVE = 3,\n};\n\nstruct regmap_range {\n\tunsigned int range_min;\n\tunsigned int range_max;\n};\n\nstruct regmap_access_table {\n\tconst struct regmap_range *yes_ranges;\n\tunsigned int n_yes_ranges;\n\tconst struct regmap_range *no_ranges;\n\tunsigned int n_no_ranges;\n};\n\ntypedef void (*regmap_lock)(void *);\n\ntypedef void (*regmap_unlock)(void *);\n\nstruct regmap_range_cfg;\n\nstruct regmap_config {\n\tconst char *name;\n\tint reg_bits;\n\tint reg_stride;\n\tint pad_bits;\n\tint val_bits;\n\tbool (*writeable_reg)(struct device *, unsigned int);\n\tbool (*readable_reg)(struct device *, unsigned int);\n\tbool (*volatile_reg)(struct device *, unsigned int);\n\tbool (*precious_reg)(struct device *, unsigned int);\n\tbool (*writeable_noinc_reg)(struct device *, unsigned int);\n\tbool (*readable_noinc_reg)(struct device *, unsigned int);\n\tbool disable_locking;\n\tregmap_lock lock;\n\tregmap_unlock unlock;\n\tvoid *lock_arg;\n\tint (*reg_read)(void *, unsigned int, unsigned int *);\n\tint (*reg_write)(void *, unsigned int, unsigned int);\n\tbool fast_io;\n\tunsigned int max_register;\n\tconst struct regmap_access_table *wr_table;\n\tconst struct regmap_access_table *rd_table;\n\tconst struct regmap_access_table *volatile_table;\n\tconst struct regmap_access_table *precious_table;\n\tconst struct regmap_access_table *wr_noinc_table;\n\tconst struct regmap_access_table *rd_noinc_table;\n\tconst struct reg_default *reg_defaults;\n\tunsigned int num_reg_defaults;\n\tenum regcache_type cache_type;\n\tconst void *reg_defaults_raw;\n\tunsigned int num_reg_defaults_raw;\n\tlong unsigned int read_flag_mask;\n\tlong unsigned int write_flag_mask;\n\tbool zero_flag_mask;\n\tbool use_single_read;\n\tbool use_single_write;\n\tbool use_relaxed_mmio;\n\tbool can_multi_write;\n\tenum regmap_endian reg_format_endian;\n\tenum regmap_endian val_format_endian;\n\tconst struct regmap_range_cfg *ranges;\n\tunsigned int num_ranges;\n\tbool use_hwlock;\n\tunsigned int hwlock_id;\n\tunsigned int hwlock_mode;\n\tbool can_sleep;\n};\n\nstruct regmap_range_cfg {\n\tconst char *name;\n\tunsigned int range_min;\n\tunsigned int range_max;\n\tunsigned int selector_reg;\n\tunsigned int selector_mask;\n\tint selector_shift;\n\tunsigned int window_start;\n\tunsigned int window_len;\n};\n\nstruct regmap_irq_type {\n\tunsigned int type_reg_offset;\n\tunsigned int type_reg_mask;\n\tunsigned int type_rising_val;\n\tunsigned int type_falling_val;\n\tunsigned int type_level_low_val;\n\tunsigned int type_level_high_val;\n\tunsigned int types_supported;\n};\n\nstruct regmap_irq {\n\tunsigned int reg_offset;\n\tunsigned int mask;\n\tstruct regmap_irq_type type;\n};\n\nstruct regmap_irq_sub_irq_map {\n\tunsigned int num_regs;\n\tunsigned int *offset;\n};\n\nstruct regmap_irq_chip {\n\tconst char *name;\n\tunsigned int main_status;\n\tunsigned int num_main_status_bits;\n\tstruct regmap_irq_sub_irq_map *sub_reg_offsets;\n\tint num_main_regs;\n\tunsigned int status_base;\n\tunsigned int mask_base;\n\tunsigned int unmask_base;\n\tunsigned int ack_base;\n\tunsigned int wake_base;\n\tunsigned int type_base;\n\tunsigned int irq_reg_stride;\n\tbool mask_writeonly: 1;\n\tbool init_ack_masked: 1;\n\tbool mask_invert: 1;\n\tbool use_ack: 1;\n\tbool ack_invert: 1;\n\tbool clear_ack: 1;\n\tbool wake_invert: 1;\n\tbool runtime_pm: 1;\n\tbool type_invert: 1;\n\tbool type_in_mask: 1;\n\tbool clear_on_unmask: 1;\n\tint num_regs;\n\tconst struct regmap_irq *irqs;\n\tint num_irqs;\n\tint num_type_reg;\n\tunsigned int type_reg_stride;\n\tint (*handle_pre_irq)(void *);\n\tint (*handle_post_irq)(void *);\n\tvoid *irq_drv_data;\n};\n\nstruct axp20x_dev {\n\tstruct device *dev;\n\tint irq;\n\tlong unsigned int irq_flags;\n\tstruct regmap *regmap;\n\tstruct regmap_irq_chip_data *regmap_irqc;\n\tlong int variant;\n\tint nr_cells;\n\tconst struct mfd_cell *cells;\n\tconst struct regmap_config *regmap_cfg;\n\tconst struct regmap_irq_chip *regmap_irq_chip;\n};\n\nstruct mfd_cell_acpi_match;\n\nstruct mfd_cell {\n\tconst char *name;\n\tint id;\n\tint level;\n\tint (*enable)(struct platform_device *);\n\tint (*disable)(struct platform_device *);\n\tint (*suspend)(struct platform_device *);\n\tint (*resume)(struct platform_device *);\n\tvoid *platform_data;\n\tsize_t pdata_size;\n\tconst struct property_entry *properties;\n\tconst char *of_compatible;\n\tconst u64 of_reg;\n\tbool use_of_reg;\n\tconst struct mfd_cell_acpi_match *acpi_match;\n\tint num_resources;\n\tconst struct resource *resources;\n\tbool ignore_resource_conflicts;\n\tbool pm_runtime_no_callbacks;\n\tconst char * const *parent_supplies;\n\tint num_parent_supplies;\n};\n\nstruct pnp_resource {\n\tstruct list_head list;\n\tstruct resource res;\n};\n\nstruct pnp_port {\n\tresource_size_t min;\n\tresource_size_t max;\n\tresource_size_t align;\n\tresource_size_t size;\n\tunsigned char flags;\n};\n\ntypedef struct {\n\tlong unsigned int bits[4];\n} pnp_irq_mask_t;\n\nstruct pnp_irq {\n\tpnp_irq_mask_t map;\n\tunsigned char flags;\n};\n\nstruct pnp_dma {\n\tunsigned char map;\n\tunsigned char flags;\n};\n\nstruct pnp_mem {\n\tresource_size_t min;\n\tresource_size_t max;\n\tresource_size_t align;\n\tresource_size_t size;\n\tunsigned char flags;\n};\n\nstruct pnp_option {\n\tstruct list_head list;\n\tunsigned int flags;\n\tlong unsigned int type;\n\tunion {\n\t\tstruct pnp_port port;\n\t\tstruct pnp_irq irq;\n\t\tstruct pnp_dma dma;\n\t\tstruct pnp_mem mem;\n\t} u;\n};\n\nstruct pnp_info_buffer {\n\tchar *buffer;\n\tchar *curr;\n\tlong unsigned int size;\n\tlong unsigned int len;\n\tint stop;\n\tint error;\n};\n\ntypedef struct pnp_info_buffer pnp_info_buffer_t;\n\nstruct pnp_fixup {\n\tchar id[7];\n\tvoid (*quirk_function)(struct pnp_dev *);\n};\n\nstruct acpipnp_parse_option_s {\n\tstruct pnp_dev *dev;\n\tunsigned int option_flags;\n};\n\nstruct clk_bulk_data {\n\tconst char *id;\n\tstruct clk *clk;\n};\n\nstruct clk_bulk_devres {\n\tstruct clk_bulk_data *clks;\n\tint num_clks;\n};\n\nstruct clk_hw;\n\nstruct clk_lookup {\n\tstruct list_head node;\n\tconst char *dev_id;\n\tconst char *con_id;\n\tstruct clk *clk;\n\tstruct clk_hw *clk_hw;\n};\n\nstruct clk_init_data;\n\nstruct clk_hw {\n\tstruct clk_core *core;\n\tstruct clk *clk;\n\tconst struct clk_init_data *init;\n};\n\nstruct clk_rate_request {\n\tlong unsigned int rate;\n\tlong unsigned int min_rate;\n\tlong unsigned int max_rate;\n\tlong unsigned int best_parent_rate;\n\tstruct clk_hw *best_parent_hw;\n};\n\nstruct clk_duty {\n\tunsigned int num;\n\tunsigned int den;\n};\n\nstruct clk_ops {\n\tint (*prepare)(struct clk_hw *);\n\tvoid (*unprepare)(struct clk_hw *);\n\tint (*is_prepared)(struct clk_hw *);\n\tvoid (*unprepare_unused)(struct clk_hw *);\n\tint (*enable)(struct clk_hw *);\n\tvoid (*disable)(struct clk_hw *);\n\tint (*is_enabled)(struct clk_hw *);\n\tvoid (*disable_unused)(struct clk_hw *);\n\tint (*save_context)(struct clk_hw *);\n\tvoid (*restore_context)(struct clk_hw *);\n\tlong unsigned int (*recalc_rate)(struct clk_hw *, long unsigned int);\n\tlong int (*round_rate)(struct clk_hw *, long unsigned int, long unsigned int *);\n\tint (*determine_rate)(struct clk_hw *, struct clk_rate_request *);\n\tint (*set_parent)(struct clk_hw *, u8);\n\tu8 (*get_parent)(struct clk_hw *);\n\tint (*set_rate)(struct clk_hw *, long unsigned int, long unsigned int);\n\tint (*set_rate_and_parent)(struct clk_hw *, long unsigned int, long unsigned int, u8);\n\tlong unsigned int (*recalc_accuracy)(struct clk_hw *, long unsigned int);\n\tint (*get_phase)(struct clk_hw *);\n\tint (*set_phase)(struct clk_hw *, int);\n\tint (*get_duty_cycle)(struct clk_hw *, struct clk_duty *);\n\tint (*set_duty_cycle)(struct clk_hw *, struct clk_duty *);\n\tint (*init)(struct clk_hw *);\n\tvoid (*terminate)(struct clk_hw *);\n\tvoid (*debug_init)(struct clk_hw *, struct dentry *);\n};\n\nstruct clk_parent_data {\n\tconst struct clk_hw *hw;\n\tconst char *fw_name;\n\tconst char *name;\n\tint index;\n};\n\nstruct clk_init_data {\n\tconst char *name;\n\tconst struct clk_ops *ops;\n\tconst char * const *parent_names;\n\tconst struct clk_parent_data *parent_data;\n\tconst struct clk_hw **parent_hws;\n\tu8 num_parents;\n\tlong unsigned int flags;\n};\n\nstruct clk_lookup_alloc {\n\tstruct clk_lookup cl;\n\tchar dev_id[20];\n\tchar con_id[16];\n};\n\nstruct clk_notifier {\n\tstruct clk *clk;\n\tstruct srcu_notifier_head notifier_head;\n\tstruct list_head node;\n};\n\nstruct clk_notifier_data {\n\tstruct clk *clk;\n\tlong unsigned int old_rate;\n\tlong unsigned int new_rate;\n};\n\nstruct clk_parent_map;\n\nstruct clk_core {\n\tconst char *name;\n\tconst struct clk_ops *ops;\n\tstruct clk_hw *hw;\n\tstruct module *owner;\n\tstruct device *dev;\n\tstruct device_node *of_node;\n\tstruct clk_core *parent;\n\tstruct clk_parent_map *parents;\n\tu8 num_parents;\n\tu8 new_parent_index;\n\tlong unsigned int rate;\n\tlong unsigned int req_rate;\n\tlong unsigned int new_rate;\n\tstruct clk_core *new_parent;\n\tstruct clk_core *new_child;\n\tlong unsigned int flags;\n\tbool orphan;\n\tbool rpm_enabled;\n\tunsigned int enable_count;\n\tunsigned int prepare_count;\n\tunsigned int protect_count;\n\tlong unsigned int min_rate;\n\tlong unsigned int max_rate;\n\tlong unsigned int accuracy;\n\tint phase;\n\tstruct clk_duty duty;\n\tstruct hlist_head children;\n\tstruct hlist_node child_node;\n\tstruct hlist_head clks;\n\tunsigned int notifier_count;\n\tstruct dentry *dentry;\n\tstruct hlist_node debug_node;\n\tstruct kref ref;\n};\n\nstruct clk_parent_map {\n\tconst struct clk_hw *hw;\n\tstruct clk_core *core;\n\tconst char *fw_name;\n\tconst char *name;\n\tint index;\n};\n\nstruct trace_event_raw_clk {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_clk_rate {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tlong unsigned int rate;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_clk_rate_range {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tlong unsigned int min;\n\tlong unsigned int max;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_clk_parent {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tu32 __data_loc_pname;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_clk_phase {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tint phase;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_clk_duty_cycle {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tunsigned int num;\n\tunsigned int den;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_clk {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_clk_rate {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_clk_rate_range {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_clk_parent {\n\tu32 name;\n\tu32 pname;\n};\n\nstruct trace_event_data_offsets_clk_phase {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_clk_duty_cycle {\n\tu32 name;\n};\n\ntypedef void (*btf_trace_clk_enable)(void *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_enable_complete)(void *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_disable)(void *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_disable_complete)(void *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_prepare)(void *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_prepare_complete)(void *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_unprepare)(void *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_unprepare_complete)(void *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_set_rate)(void *, struct clk_core *, long unsigned int);\n\ntypedef void (*btf_trace_clk_set_rate_complete)(void *, struct clk_core *, long unsigned int);\n\ntypedef void (*btf_trace_clk_set_min_rate)(void *, struct clk_core *, long unsigned int);\n\ntypedef void (*btf_trace_clk_set_max_rate)(void *, struct clk_core *, long unsigned int);\n\ntypedef void (*btf_trace_clk_set_rate_range)(void *, struct clk_core *, long unsigned int, long unsigned int);\n\ntypedef void (*btf_trace_clk_set_parent)(void *, struct clk_core *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_set_parent_complete)(void *, struct clk_core *, struct clk_core *);\n\ntypedef void (*btf_trace_clk_set_phase)(void *, struct clk_core *, int);\n\ntypedef void (*btf_trace_clk_set_phase_complete)(void *, struct clk_core *, int);\n\ntypedef void (*btf_trace_clk_set_duty_cycle)(void *, struct clk_core *, struct clk_duty *);\n\ntypedef void (*btf_trace_clk_set_duty_cycle_complete)(void *, struct clk_core *, struct clk_duty *);\n\nstruct clk_notifier_devres {\n\tstruct clk *clk;\n\tstruct notifier_block *nb;\n};\n\nstruct clk_div_table {\n\tunsigned int val;\n\tunsigned int div;\n};\n\nstruct clk_divider {\n\tstruct clk_hw hw;\n\tvoid *reg;\n\tu8 shift;\n\tu8 width;\n\tu8 flags;\n\tconst struct clk_div_table *table;\n\tspinlock_t *lock;\n};\n\nstruct clk_fixed_factor {\n\tstruct clk_hw hw;\n\tunsigned int mult;\n\tunsigned int div;\n};\n\nstruct clk_fixed_rate {\n\tstruct clk_hw hw;\n\tlong unsigned int fixed_rate;\n\tlong unsigned int fixed_accuracy;\n\tlong unsigned int flags;\n};\n\nstruct clk_gate {\n\tstruct clk_hw hw;\n\tvoid *reg;\n\tu8 bit_idx;\n\tu8 flags;\n\tspinlock_t *lock;\n};\n\nstruct clk_multiplier {\n\tstruct clk_hw hw;\n\tvoid *reg;\n\tu8 shift;\n\tu8 width;\n\tu8 flags;\n\tspinlock_t *lock;\n};\n\nstruct clk_mux {\n\tstruct clk_hw hw;\n\tvoid *reg;\n\tu32 *table;\n\tu32 mask;\n\tu8 shift;\n\tu8 flags;\n\tspinlock_t *lock;\n};\n\nstruct clk_composite {\n\tstruct clk_hw hw;\n\tstruct clk_ops ops;\n\tstruct clk_hw *mux_hw;\n\tstruct clk_hw *rate_hw;\n\tstruct clk_hw *gate_hw;\n\tconst struct clk_ops *mux_ops;\n\tconst struct clk_ops *rate_ops;\n\tconst struct clk_ops *gate_ops;\n};\n\nstruct clk_fractional_divider {\n\tstruct clk_hw hw;\n\tvoid *reg;\n\tu8 mshift;\n\tu8 mwidth;\n\tu32 mmask;\n\tu8 nshift;\n\tu8 nwidth;\n\tu32 nmask;\n\tu8 flags;\n\tvoid (*approximation)(struct clk_hw *, long unsigned int, long unsigned int *, long unsigned int *, long unsigned int *);\n\tspinlock_t *lock;\n};\n\nstruct gpio_desc___2;\n\nstruct clk_gpio {\n\tstruct clk_hw hw;\n\tstruct gpio_desc___2 *gpiod;\n};\n\nstruct pmc_clk {\n\tconst char *name;\n\tlong unsigned int freq;\n\tconst char *parent_name;\n};\n\nstruct pmc_clk_data {\n\tvoid *base;\n\tconst struct pmc_clk *clks;\n\tbool critical;\n};\n\nstruct clk_plt_fixed {\n\tstruct clk_hw *clk;\n\tstruct clk_lookup *lookup;\n};\n\nstruct clk_plt {\n\tstruct clk_hw hw;\n\tvoid *reg;\n\tstruct clk_lookup *lookup;\n\tspinlock_t lock;\n};\n\nstruct clk_plt_data {\n\tstruct clk_plt_fixed **parents;\n\tu8 nparents;\n\tstruct clk_plt *clks[6];\n\tstruct clk_lookup *mclk_lookup;\n\tstruct clk_lookup *ether_clk_lookup;\n};\n\ntypedef s32 dma_cookie_t;\n\nenum dma_status {\n\tDMA_COMPLETE = 0,\n\tDMA_IN_PROGRESS = 1,\n\tDMA_PAUSED = 2,\n\tDMA_ERROR = 3,\n\tDMA_OUT_OF_ORDER = 4,\n};\n\nenum dma_transaction_type {\n\tDMA_MEMCPY = 0,\n\tDMA_XOR = 1,\n\tDMA_PQ = 2,\n\tDMA_XOR_VAL = 3,\n\tDMA_PQ_VAL = 4,\n\tDMA_MEMSET = 5,\n\tDMA_MEMSET_SG = 6,\n\tDMA_INTERRUPT = 7,\n\tDMA_PRIVATE = 8,\n\tDMA_ASYNC_TX = 9,\n\tDMA_SLAVE = 10,\n\tDMA_CYCLIC = 11,\n\tDMA_INTERLEAVE = 12,\n\tDMA_COMPLETION_NO_ORDER = 13,\n\tDMA_REPEAT = 14,\n\tDMA_LOAD_EOT = 15,\n\tDMA_TX_TYPE_END = 16,\n};\n\nenum dma_transfer_direction {\n\tDMA_MEM_TO_MEM = 0,\n\tDMA_MEM_TO_DEV = 1,\n\tDMA_DEV_TO_MEM = 2,\n\tDMA_DEV_TO_DEV = 3,\n\tDMA_TRANS_NONE = 4,\n};\n\nstruct data_chunk {\n\tsize_t size;\n\tsize_t icg;\n\tsize_t dst_icg;\n\tsize_t src_icg;\n};\n\nstruct dma_interleaved_template {\n\tdma_addr_t src_start;\n\tdma_addr_t dst_start;\n\tenum dma_transfer_direction dir;\n\tbool src_inc;\n\tbool dst_inc;\n\tbool src_sgl;\n\tbool dst_sgl;\n\tsize_t numf;\n\tsize_t frame_size;\n\tstruct data_chunk sgl[0];\n};\n\nenum dma_ctrl_flags {\n\tDMA_PREP_INTERRUPT = 1,\n\tDMA_CTRL_ACK = 2,\n\tDMA_PREP_PQ_DISABLE_P = 4,\n\tDMA_PREP_PQ_DISABLE_Q = 8,\n\tDMA_PREP_CONTINUE = 16,\n\tDMA_PREP_FENCE = 32,\n\tDMA_CTRL_REUSE = 64,\n\tDMA_PREP_CMD = 128,\n\tDMA_PREP_REPEAT = 256,\n\tDMA_PREP_LOAD_EOT = 512,\n};\n\nenum sum_check_bits {\n\tSUM_CHECK_P = 0,\n\tSUM_CHECK_Q = 1,\n};\n\nenum sum_check_flags {\n\tSUM_CHECK_P_RESULT = 1,\n\tSUM_CHECK_Q_RESULT = 2,\n};\n\ntypedef struct {\n\tlong unsigned int bits[1];\n} dma_cap_mask_t;\n\nenum dma_desc_metadata_mode {\n\tDESC_METADATA_NONE = 0,\n\tDESC_METADATA_CLIENT = 1,\n\tDESC_METADATA_ENGINE = 2,\n};\n\nstruct dma_chan_percpu {\n\tlong unsigned int memcpy_count;\n\tlong unsigned int bytes_transferred;\n};\n\nstruct dma_router {\n\tstruct device *dev;\n\tvoid (*route_free)(struct device *, void *);\n};\n\nstruct dma_device;\n\nstruct dma_chan_dev;\n\nstruct dma_chan___2 {\n\tstruct dma_device *device;\n\tstruct device *slave;\n\tdma_cookie_t cookie;\n\tdma_cookie_t completed_cookie;\n\tint chan_id;\n\tstruct dma_chan_dev *dev;\n\tconst char *name;\n\tchar *dbg_client_name;\n\tstruct list_head device_node;\n\tstruct dma_chan_percpu *local;\n\tint client_count;\n\tint table_count;\n\tstruct dma_router *router;\n\tvoid *route_data;\n\tvoid *private;\n};\n\ntypedef bool (*dma_filter_fn)(struct dma_chan___2 *, void *);\n\nstruct dma_slave_map;\n\nstruct dma_filter {\n\tdma_filter_fn fn;\n\tint mapcnt;\n\tconst struct dma_slave_map *map;\n};\n\nenum dmaengine_alignment {\n\tDMAENGINE_ALIGN_1_BYTE = 0,\n\tDMAENGINE_ALIGN_2_BYTES = 1,\n\tDMAENGINE_ALIGN_4_BYTES = 2,\n\tDMAENGINE_ALIGN_8_BYTES = 3,\n\tDMAENGINE_ALIGN_16_BYTES = 4,\n\tDMAENGINE_ALIGN_32_BYTES = 5,\n\tDMAENGINE_ALIGN_64_BYTES = 6,\n};\n\nenum dma_residue_granularity {\n\tDMA_RESIDUE_GRANULARITY_DESCRIPTOR = 0,\n\tDMA_RESIDUE_GRANULARITY_SEGMENT = 1,\n\tDMA_RESIDUE_GRANULARITY_BURST = 2,\n};\n\nstruct dma_async_tx_descriptor;\n\nstruct dma_slave_caps;\n\nstruct dma_slave_config;\n\nstruct dma_tx_state;\n\nstruct dma_device {\n\tstruct kref ref;\n\tunsigned int chancnt;\n\tunsigned int privatecnt;\n\tstruct list_head channels;\n\tstruct list_head global_node;\n\tstruct dma_filter filter;\n\tdma_cap_mask_t cap_mask;\n\tenum dma_desc_metadata_mode desc_metadata_modes;\n\tshort unsigned int max_xor;\n\tshort unsigned int max_pq;\n\tenum dmaengine_alignment copy_align;\n\tenum dmaengine_alignment xor_align;\n\tenum dmaengine_alignment pq_align;\n\tenum dmaengine_alignment fill_align;\n\tint dev_id;\n\tstruct device *dev;\n\tstruct module *owner;\n\tstruct ida chan_ida;\n\tstruct mutex chan_mutex;\n\tu32 src_addr_widths;\n\tu32 dst_addr_widths;\n\tu32 directions;\n\tu32 min_burst;\n\tu32 max_burst;\n\tu32 max_sg_burst;\n\tbool descriptor_reuse;\n\tenum dma_residue_granularity residue_granularity;\n\tint (*device_alloc_chan_resources)(struct dma_chan___2 *);\n\tint (*device_router_config)(struct dma_chan___2 *);\n\tvoid (*device_free_chan_resources)(struct dma_chan___2 *);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_memcpy)(struct dma_chan___2 *, dma_addr_t, dma_addr_t, size_t, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_xor)(struct dma_chan___2 *, dma_addr_t, dma_addr_t *, unsigned int, size_t, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_xor_val)(struct dma_chan___2 *, dma_addr_t *, unsigned int, size_t, enum sum_check_flags *, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_pq)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_pq_val)(struct dma_chan___2 *, dma_addr_t *, dma_addr_t *, unsigned int, const unsigned char *, size_t, enum sum_check_flags *, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_memset)(struct dma_chan___2 *, dma_addr_t, int, size_t, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_memset_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, int, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_interrupt)(struct dma_chan___2 *, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_slave_sg)(struct dma_chan___2 *, struct scatterlist *, unsigned int, enum dma_transfer_direction, long unsigned int, void *);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_cyclic)(struct dma_chan___2 *, dma_addr_t, size_t, size_t, enum dma_transfer_direction, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_interleaved_dma)(struct dma_chan___2 *, struct dma_interleaved_template *, long unsigned int);\n\tstruct dma_async_tx_descriptor * (*device_prep_dma_imm_data)(struct dma_chan___2 *, dma_addr_t, u64, long unsigned int);\n\tvoid (*device_caps)(struct dma_chan___2 *, struct dma_slave_caps *);\n\tint (*device_config)(struct dma_chan___2 *, struct dma_slave_config *);\n\tint (*device_pause)(struct dma_chan___2 *);\n\tint (*device_resume)(struct dma_chan___2 *);\n\tint (*device_terminate_all)(struct dma_chan___2 *);\n\tvoid (*device_synchronize)(struct dma_chan___2 *);\n\tenum dma_status (*device_tx_status)(struct dma_chan___2 *, dma_cookie_t, struct dma_tx_state *);\n\tvoid (*device_issue_pending)(struct dma_chan___2 *);\n\tvoid (*device_release)(struct dma_device *);\n\tvoid (*dbg_summary_show)(struct seq_file *, struct dma_device *);\n\tstruct dentry *dbg_dev_root;\n};\n\nstruct dma_chan_dev {\n\tstruct dma_chan___2 *chan;\n\tstruct device device;\n\tint dev_id;\n\tbool chan_dma_dev;\n};\n\nenum dma_slave_buswidth {\n\tDMA_SLAVE_BUSWIDTH_UNDEFINED = 0,\n\tDMA_SLAVE_BUSWIDTH_1_BYTE = 1,\n\tDMA_SLAVE_BUSWIDTH_2_BYTES = 2,\n\tDMA_SLAVE_BUSWIDTH_3_BYTES = 3,\n\tDMA_SLAVE_BUSWIDTH_4_BYTES = 4,\n\tDMA_SLAVE_BUSWIDTH_8_BYTES = 8,\n\tDMA_SLAVE_BUSWIDTH_16_BYTES = 16,\n\tDMA_SLAVE_BUSWIDTH_32_BYTES = 32,\n\tDMA_SLAVE_BUSWIDTH_64_BYTES = 64,\n};\n\nstruct dma_slave_config {\n\tenum dma_transfer_direction direction;\n\tphys_addr_t src_addr;\n\tphys_addr_t dst_addr;\n\tenum dma_slave_buswidth src_addr_width;\n\tenum dma_slave_buswidth dst_addr_width;\n\tu32 src_maxburst;\n\tu32 dst_maxburst;\n\tu32 src_port_window_size;\n\tu32 dst_port_window_size;\n\tbool device_fc;\n\tunsigned int slave_id;\n\tvoid *peripheral_config;\n\tsize_t peripheral_size;\n};\n\nstruct dma_slave_caps {\n\tu32 src_addr_widths;\n\tu32 dst_addr_widths;\n\tu32 directions;\n\tu32 min_burst;\n\tu32 max_burst;\n\tu32 max_sg_burst;\n\tbool cmd_pause;\n\tbool cmd_resume;\n\tbool cmd_terminate;\n\tenum dma_residue_granularity residue_granularity;\n\tbool descriptor_reuse;\n};\n\ntypedef void (*dma_async_tx_callback)(void *);\n\nenum dmaengine_tx_result {\n\tDMA_TRANS_NOERROR = 0,\n\tDMA_TRANS_READ_FAILED = 1,\n\tDMA_TRANS_WRITE_FAILED = 2,\n\tDMA_TRANS_ABORTED = 3,\n};\n\nstruct dmaengine_result {\n\tenum dmaengine_tx_result result;\n\tu32 residue;\n};\n\ntypedef void (*dma_async_tx_callback_result)(void *, const struct dmaengine_result *);\n\nstruct dmaengine_unmap_data {\n\tu16 map_cnt;\n\tu8 to_cnt;\n\tu8 from_cnt;\n\tu8 bidi_cnt;\n\tstruct device *dev;\n\tstruct kref kref;\n\tsize_t len;\n\tdma_addr_t addr[0];\n};\n\nstruct dma_descriptor_metadata_ops {\n\tint (*attach)(struct dma_async_tx_descriptor *, void *, size_t);\n\tvoid * (*get_ptr)(struct dma_async_tx_descriptor *, size_t *, size_t *);\n\tint (*set_len)(struct dma_async_tx_descriptor *, size_t);\n};\n\nstruct dma_async_tx_descriptor {\n\tdma_cookie_t cookie;\n\tenum dma_ctrl_flags flags;\n\tdma_addr_t phys;\n\tstruct dma_chan___2 *chan;\n\tdma_cookie_t (*tx_submit)(struct dma_async_tx_descriptor *);\n\tint (*desc_free)(struct dma_async_tx_descriptor *);\n\tdma_async_tx_callback callback;\n\tdma_async_tx_callback_result callback_result;\n\tvoid *callback_param;\n\tstruct dmaengine_unmap_data *unmap;\n\tenum dma_desc_metadata_mode desc_metadata_mode;\n\tstruct dma_descriptor_metadata_ops *metadata_ops;\n};\n\nstruct dma_tx_state {\n\tdma_cookie_t last;\n\tdma_cookie_t used;\n\tu32 residue;\n\tu32 in_flight_bytes;\n};\n\nstruct dma_slave_map {\n\tconst char *devname;\n\tconst char *slave;\n\tvoid *param;\n};\n\nstruct dma_chan_tbl_ent {\n\tstruct dma_chan___2 *chan;\n};\n\nstruct dmaengine_unmap_pool {\n\tstruct kmem_cache *cache;\n\tconst char *name;\n\tmempool_t *pool;\n\tsize_t size;\n};\n\nstruct dmaengine_desc_callback {\n\tdma_async_tx_callback callback;\n\tdma_async_tx_callback_result callback_result;\n\tvoid *callback_param;\n};\n\nstruct virt_dma_desc {\n\tstruct dma_async_tx_descriptor tx;\n\tstruct dmaengine_result tx_result;\n\tstruct list_head node;\n};\n\nstruct virt_dma_chan {\n\tstruct dma_chan___2 chan;\n\tstruct tasklet_struct task;\n\tvoid (*desc_free)(struct virt_dma_desc *);\n\tspinlock_t lock;\n\tstruct list_head desc_allocated;\n\tstruct list_head desc_submitted;\n\tstruct list_head desc_issued;\n\tstruct list_head desc_completed;\n\tstruct list_head desc_terminated;\n\tstruct virt_dma_desc *cyclic;\n};\n\nstruct acpi_table_csrt {\n\tstruct acpi_table_header header;\n};\n\nstruct acpi_csrt_group {\n\tu32 length;\n\tu32 vendor_id;\n\tu32 subvendor_id;\n\tu16 device_id;\n\tu16 subdevice_id;\n\tu16 revision;\n\tu16 reserved;\n\tu32 shared_info_length;\n};\n\nstruct acpi_csrt_shared_info {\n\tu16 major_version;\n\tu16 minor_version;\n\tu32 mmio_base_low;\n\tu32 mmio_base_high;\n\tu32 gsi_interrupt;\n\tu8 interrupt_polarity;\n\tu8 interrupt_mode;\n\tu8 num_channels;\n\tu8 dma_address_width;\n\tu16 base_request_line;\n\tu16 num_handshake_signals;\n\tu32 max_block_size;\n};\n\nstruct acpi_dma_spec {\n\tint chan_id;\n\tint slave_id;\n\tstruct device *dev;\n};\n\nstruct acpi_dma {\n\tstruct list_head dma_controllers;\n\tstruct device *dev;\n\tstruct dma_chan___2 * (*acpi_dma_xlate)(struct acpi_dma_spec *, struct acpi_dma *);\n\tvoid *data;\n\tshort unsigned int base_request_line;\n\tshort unsigned int end_request_line;\n};\n\nstruct acpi_dma_filter_info {\n\tdma_cap_mask_t dma_cap;\n\tdma_filter_fn filter_fn;\n};\n\nstruct acpi_dma_parser_data {\n\tstruct acpi_dma_spec dma_spec;\n\tsize_t index;\n\tsize_t n;\n};\n\nstruct dw_dma_slave {\n\tstruct device *dma_dev;\n\tu8 src_id;\n\tu8 dst_id;\n\tu8 m_master;\n\tu8 p_master;\n\tu8 channels;\n\tbool hs_polarity;\n};\n\nstruct dw_dma_platform_data {\n\tunsigned int nr_channels;\n\tunsigned char chan_allocation_order;\n\tunsigned char chan_priority;\n\tunsigned int block_size;\n\tunsigned char nr_masters;\n\tunsigned char data_width[4];\n\tunsigned char multi_block[8];\n\tu32 max_burst[8];\n\tunsigned char protctl;\n};\n\nstruct dw_dma;\n\nstruct dw_dma_chip {\n\tstruct device *dev;\n\tint id;\n\tint irq;\n\tvoid *regs;\n\tstruct clk *clk;\n\tstruct dw_dma *dw;\n\tconst struct dw_dma_platform_data *pdata;\n};\n\nstruct dma_pool___2;\n\nstruct dw_dma_chan;\n\nstruct dw_dma {\n\tstruct dma_device dma;\n\tchar name[20];\n\tvoid *regs;\n\tstruct dma_pool___2 *desc_pool;\n\tstruct tasklet_struct tasklet;\n\tstruct dw_dma_chan *chan;\n\tu8 all_chan_mask;\n\tu8 in_use;\n\tvoid (*initialize_chan)(struct dw_dma_chan *);\n\tvoid (*suspend_chan)(struct dw_dma_chan *, bool);\n\tvoid (*resume_chan)(struct dw_dma_chan *, bool);\n\tu32 (*prepare_ctllo)(struct dw_dma_chan *);\n\tvoid (*encode_maxburst)(struct dw_dma_chan *, u32 *);\n\tu32 (*bytes2block)(struct dw_dma_chan *, size_t, unsigned int, size_t *);\n\tsize_t (*block2bytes)(struct dw_dma_chan *, u32, u32);\n\tvoid (*set_device_name)(struct dw_dma *, int);\n\tvoid (*disable)(struct dw_dma *);\n\tvoid (*enable)(struct dw_dma *);\n\tstruct dw_dma_platform_data *pdata;\n};\n\nenum dw_dma_fc {\n\tDW_DMA_FC_D_M2M = 0,\n\tDW_DMA_FC_D_M2P = 1,\n\tDW_DMA_FC_D_P2M = 2,\n\tDW_DMA_FC_D_P2P = 3,\n\tDW_DMA_FC_P_P2M = 4,\n\tDW_DMA_FC_SP_P2P = 5,\n\tDW_DMA_FC_P_M2P = 6,\n\tDW_DMA_FC_DP_P2P = 7,\n};\n\nstruct dw_dma_chan_regs {\n\tu32 SAR;\n\tu32 __pad_SAR;\n\tu32 DAR;\n\tu32 __pad_DAR;\n\tu32 LLP;\n\tu32 __pad_LLP;\n\tu32 CTL_LO;\n\tu32 CTL_HI;\n\tu32 SSTAT;\n\tu32 __pad_SSTAT;\n\tu32 DSTAT;\n\tu32 __pad_DSTAT;\n\tu32 SSTATAR;\n\tu32 __pad_SSTATAR;\n\tu32 DSTATAR;\n\tu32 __pad_DSTATAR;\n\tu32 CFG_LO;\n\tu32 CFG_HI;\n\tu32 SGR;\n\tu32 __pad_SGR;\n\tu32 DSR;\n\tu32 __pad_DSR;\n};\n\nstruct dw_dma_irq_regs {\n\tu32 XFER;\n\tu32 __pad_XFER;\n\tu32 BLOCK;\n\tu32 __pad_BLOCK;\n\tu32 SRC_TRAN;\n\tu32 __pad_SRC_TRAN;\n\tu32 DST_TRAN;\n\tu32 __pad_DST_TRAN;\n\tu32 ERROR;\n\tu32 __pad_ERROR;\n};\n\nstruct dw_dma_regs {\n\tstruct dw_dma_chan_regs CHAN[8];\n\tstruct dw_dma_irq_regs RAW;\n\tstruct dw_dma_irq_regs STATUS;\n\tstruct dw_dma_irq_regs MASK;\n\tstruct dw_dma_irq_regs CLEAR;\n\tu32 STATUS_INT;\n\tu32 __pad_STATUS_INT;\n\tu32 REQ_SRC;\n\tu32 __pad_REQ_SRC;\n\tu32 REQ_DST;\n\tu32 __pad_REQ_DST;\n\tu32 SGL_REQ_SRC;\n\tu32 __pad_SGL_REQ_SRC;\n\tu32 SGL_REQ_DST;\n\tu32 __pad_SGL_REQ_DST;\n\tu32 LAST_SRC;\n\tu32 __pad_LAST_SRC;\n\tu32 LAST_DST;\n\tu32 __pad_LAST_DST;\n\tu32 CFG;\n\tu32 __pad_CFG;\n\tu32 CH_EN;\n\tu32 __pad_CH_EN;\n\tu32 ID;\n\tu32 __pad_ID;\n\tu32 TEST;\n\tu32 __pad_TEST;\n\tu32 CLASS_PRIORITY0;\n\tu32 __pad_CLASS_PRIORITY0;\n\tu32 CLASS_PRIORITY1;\n\tu32 __pad_CLASS_PRIORITY1;\n\tu32 __reserved;\n\tu32 DWC_PARAMS[8];\n\tu32 MULTI_BLK_TYPE;\n\tu32 MAX_BLK_SIZE;\n\tu32 DW_PARAMS;\n\tu32 COMP_TYPE;\n\tu32 COMP_VERSION;\n\tu32 FIFO_PARTITION0;\n\tu32 __pad_FIFO_PARTITION0;\n\tu32 FIFO_PARTITION1;\n\tu32 __pad_FIFO_PARTITION1;\n\tu32 SAI_ERR;\n\tu32 __pad_SAI_ERR;\n\tu32 GLOBAL_CFG;\n\tu32 __pad_GLOBAL_CFG;\n};\n\nenum dw_dmac_flags {\n\tDW_DMA_IS_CYCLIC = 0,\n\tDW_DMA_IS_SOFT_LLP = 1,\n\tDW_DMA_IS_PAUSED = 2,\n\tDW_DMA_IS_INITIALIZED = 3,\n};\n\nstruct dw_dma_chan {\n\tstruct dma_chan___2 chan;\n\tvoid *ch_regs;\n\tu8 mask;\n\tu8 priority;\n\tenum dma_transfer_direction direction;\n\tstruct list_head *tx_node_active;\n\tspinlock_t lock;\n\tlong unsigned int flags;\n\tstruct list_head active_list;\n\tstruct list_head queue;\n\tunsigned int descs_allocated;\n\tunsigned int block_size;\n\tbool nollp;\n\tu32 max_burst;\n\tstruct dw_dma_slave dws;\n\tstruct dma_slave_config dma_sconfig;\n};\n\nstruct dw_lli {\n\t__le32 sar;\n\t__le32 dar;\n\t__le32 llp;\n\t__le32 ctllo;\n\t__le32 ctlhi;\n\t__le32 sstat;\n\t__le32 dstat;\n};\n\nstruct dw_desc {\n\tstruct dw_lli lli;\n\tstruct list_head desc_node;\n\tstruct list_head tx_list;\n\tstruct dma_async_tx_descriptor txd;\n\tsize_t len;\n\tsize_t total_len;\n\tu32 residue;\n};\n\nstruct dw_dma_chip_pdata {\n\tconst struct dw_dma_platform_data *pdata;\n\tint (*probe)(struct dw_dma_chip *);\n\tint (*remove)(struct dw_dma_chip *);\n\tstruct dw_dma_chip *chip;\n};\n\nstruct hsu_dma;\n\nstruct hsu_dma_chip {\n\tstruct device *dev;\n\tint irq;\n\tvoid *regs;\n\tunsigned int length;\n\tunsigned int offset;\n\tstruct hsu_dma *hsu;\n};\n\nstruct hsu_dma_chan;\n\nstruct hsu_dma {\n\tstruct dma_device dma;\n\tstruct hsu_dma_chan *chan;\n\tshort unsigned int nr_channels;\n};\n\nstruct hsu_dma_sg {\n\tdma_addr_t addr;\n\tunsigned int len;\n};\n\nstruct hsu_dma_desc {\n\tstruct virt_dma_desc vdesc;\n\tenum dma_transfer_direction direction;\n\tstruct hsu_dma_sg *sg;\n\tunsigned int nents;\n\tsize_t length;\n\tunsigned int active;\n\tenum dma_status status;\n};\n\nstruct hsu_dma_chan {\n\tstruct virt_dma_chan vchan;\n\tvoid *reg;\n\tenum dma_transfer_direction direction;\n\tstruct dma_slave_config config;\n\tstruct hsu_dma_desc *desc;\n};\n\nstruct virtio_driver {\n\tstruct device_driver driver;\n\tconst struct virtio_device_id *id_table;\n\tconst unsigned int *feature_table;\n\tunsigned int feature_table_size;\n\tconst unsigned int *feature_table_legacy;\n\tunsigned int feature_table_size_legacy;\n\tint (*validate)(struct virtio_device *);\n\tint (*probe)(struct virtio_device *);\n\tvoid (*scan)(struct virtio_device *);\n\tvoid (*remove)(struct virtio_device *);\n\tvoid (*config_changed)(struct virtio_device *);\n\tint (*freeze)(struct virtio_device *);\n\tint (*restore)(struct virtio_device *);\n};\n\ntypedef __u16 __virtio16;\n\ntypedef __u32 __virtio32;\n\ntypedef __u64 __virtio64;\n\nstruct vring_desc {\n\t__virtio64 addr;\n\t__virtio32 len;\n\t__virtio16 flags;\n\t__virtio16 next;\n};\n\nstruct vring_avail {\n\t__virtio16 flags;\n\t__virtio16 idx;\n\t__virtio16 ring[0];\n};\n\nstruct vring_used_elem {\n\t__virtio32 id;\n\t__virtio32 len;\n};\n\ntypedef struct vring_used_elem vring_used_elem_t;\n\nstruct vring_used {\n\t__virtio16 flags;\n\t__virtio16 idx;\n\tvring_used_elem_t ring[0];\n};\n\ntypedef struct vring_desc vring_desc_t;\n\ntypedef struct vring_avail vring_avail_t;\n\ntypedef struct vring_used vring_used_t;\n\nstruct vring {\n\tunsigned int num;\n\tvring_desc_t *desc;\n\tvring_avail_t *avail;\n\tvring_used_t *used;\n};\n\nstruct vring_packed_desc_event {\n\t__le16 off_wrap;\n\t__le16 flags;\n};\n\nstruct vring_packed_desc {\n\t__le64 addr;\n\t__le32 len;\n\t__le16 id;\n\t__le16 flags;\n};\n\nstruct vring_desc_state_split {\n\tvoid *data;\n\tstruct vring_desc *indir_desc;\n};\n\nstruct vring_desc_state_packed {\n\tvoid *data;\n\tstruct vring_packed_desc *indir_desc;\n\tu16 num;\n\tu16 next;\n\tu16 last;\n};\n\nstruct vring_desc_extra_packed {\n\tdma_addr_t addr;\n\tu32 len;\n\tu16 flags;\n};\n\nstruct vring_virtqueue {\n\tstruct virtqueue vq;\n\tbool packed_ring;\n\tbool use_dma_api;\n\tbool weak_barriers;\n\tbool broken;\n\tbool indirect;\n\tbool event;\n\tunsigned int free_head;\n\tunsigned int num_added;\n\tu16 last_used_idx;\n\tunion {\n\t\tstruct {\n\t\t\tstruct vring vring;\n\t\t\tu16 avail_flags_shadow;\n\t\t\tu16 avail_idx_shadow;\n\t\t\tstruct vring_desc_state_split *desc_state;\n\t\t\tdma_addr_t queue_dma_addr;\n\t\t\tsize_t queue_size_in_bytes;\n\t\t} split;\n\t\tstruct {\n\t\t\tstruct {\n\t\t\t\tunsigned int num;\n\t\t\t\tstruct vring_packed_desc *desc;\n\t\t\t\tstruct vring_packed_desc_event *driver;\n\t\t\t\tstruct vring_packed_desc_event *device;\n\t\t\t} vring;\n\t\t\tbool avail_wrap_counter;\n\t\t\tbool used_wrap_counter;\n\t\t\tu16 avail_used_flags;\n\t\t\tu16 next_avail_idx;\n\t\t\tu16 event_flags_shadow;\n\t\t\tstruct vring_desc_state_packed *desc_state;\n\t\t\tstruct vring_desc_extra_packed *desc_extra;\n\t\t\tdma_addr_t ring_dma_addr;\n\t\t\tdma_addr_t driver_event_dma_addr;\n\t\t\tdma_addr_t device_event_dma_addr;\n\t\t\tsize_t ring_size_in_bytes;\n\t\t\tsize_t event_size_in_bytes;\n\t\t} packed;\n\t};\n\tbool (*notify)(struct virtqueue *);\n\tbool we_own_ring;\n};\n\nstruct virtio_pci_common_cfg {\n\t__le32 device_feature_select;\n\t__le32 device_feature;\n\t__le32 guest_feature_select;\n\t__le32 guest_feature;\n\t__le16 msix_config;\n\t__le16 num_queues;\n\t__u8 device_status;\n\t__u8 config_generation;\n\t__le16 queue_select;\n\t__le16 queue_size;\n\t__le16 queue_msix_vector;\n\t__le16 queue_enable;\n\t__le16 queue_notify_off;\n\t__le32 queue_desc_lo;\n\t__le32 queue_desc_hi;\n\t__le32 queue_avail_lo;\n\t__le32 queue_avail_hi;\n\t__le32 queue_used_lo;\n\t__le32 queue_used_hi;\n};\n\nstruct virtio_pci_vq_info {\n\tstruct virtqueue *vq;\n\tstruct list_head node;\n\tunsigned int msix_vector;\n};\n\nstruct virtio_pci_device {\n\tstruct virtio_device vdev;\n\tstruct pci_dev *pci_dev;\n\tu8 *isr;\n\tstruct virtio_pci_common_cfg *common;\n\tvoid *device;\n\tvoid *notify_base;\n\tsize_t notify_len;\n\tsize_t device_len;\n\tint notify_map_cap;\n\tu32 notify_offset_multiplier;\n\tint modern_bars;\n\tvoid *ioaddr;\n\tspinlock_t lock;\n\tstruct list_head virtqueues;\n\tstruct virtio_pci_vq_info **vqs;\n\tint msix_enabled;\n\tint intx_enabled;\n\tcpumask_var_t *msix_affinity_masks;\n\tchar (*msix_names)[256];\n\tunsigned int msix_vectors;\n\tunsigned int msix_used_vectors;\n\tbool per_vq_vectors;\n\tstruct virtqueue * (*setup_vq)(struct virtio_pci_device *, struct virtio_pci_vq_info *, unsigned int, void (*)(struct virtqueue *), const char *, bool, u16);\n\tvoid (*del_vq)(struct virtio_pci_vq_info *);\n\tu16 (*config_vector)(struct virtio_pci_device *, u16);\n};\n\nenum {\n\tVP_MSIX_CONFIG_VECTOR = 0,\n\tVP_MSIX_VQ_VECTOR = 1,\n};\n\nstruct grant_entry_v1 {\n\tuint16_t flags;\n\tdomid_t domid;\n\tuint32_t frame;\n};\n\nstruct grant_entry_header {\n\tuint16_t flags;\n\tdomid_t domid;\n};\n\nunion grant_entry_v2 {\n\tstruct grant_entry_header hdr;\n\tstruct {\n\t\tstruct grant_entry_header hdr;\n\t\tuint32_t pad0;\n\t\tuint64_t frame;\n\t} full_page;\n\tstruct {\n\t\tstruct grant_entry_header hdr;\n\t\tuint16_t page_off;\n\t\tuint16_t length;\n\t\tuint64_t frame;\n\t} sub_page;\n\tstruct {\n\t\tstruct grant_entry_header hdr;\n\t\tdomid_t trans_domid;\n\t\tuint16_t pad0;\n\t\tgrant_ref_t gref;\n\t} transitive;\n\tuint32_t __spacer[4];\n};\n\nstruct gnttab_setup_table {\n\tdomid_t dom;\n\tuint32_t nr_frames;\n\tint16_t status;\n\t__guest_handle_xen_pfn_t frame_list;\n};\n\nstruct gnttab_copy {\n\tstruct {\n\t\tunion {\n\t\t\tgrant_ref_t ref;\n\t\t\txen_pfn_t gmfn;\n\t\t} u;\n\t\tdomid_t domid;\n\t\tuint16_t offset;\n\t} source;\n\tstruct {\n\t\tunion {\n\t\t\tgrant_ref_t ref;\n\t\t\txen_pfn_t gmfn;\n\t\t} u;\n\t\tdomid_t domid;\n\t\tuint16_t offset;\n\t} dest;\n\tuint16_t len;\n\tuint16_t flags;\n\tint16_t status;\n};\n\nstruct gnttab_query_size {\n\tdomid_t dom;\n\tuint32_t nr_frames;\n\tuint32_t max_nr_frames;\n\tint16_t status;\n};\n\nstruct gnttab_set_version {\n\tuint32_t version;\n};\n\nstruct gnttab_get_status_frames {\n\tuint32_t nr_frames;\n\tdomid_t dom;\n\tint16_t status;\n\t__guest_handle_uint64_t frame_list;\n};\n\nstruct gnttab_free_callback {\n\tstruct gnttab_free_callback *next;\n\tvoid (*fn)(void *);\n\tvoid *arg;\n\tu16 count;\n};\n\nstruct gntab_unmap_queue_data;\n\ntypedef void (*gnttab_unmap_refs_done)(int, struct gntab_unmap_queue_data *);\n\nstruct gntab_unmap_queue_data {\n\tstruct delayed_work gnttab_work;\n\tvoid *data;\n\tgnttab_unmap_refs_done done;\n\tstruct gnttab_unmap_grant_ref *unmap_ops;\n\tstruct gnttab_unmap_grant_ref *kunmap_ops;\n\tstruct page **pages;\n\tunsigned int count;\n\tunsigned int age;\n};\n\nstruct gnttab_page_cache {\n\tspinlock_t lock;\n\tstruct page *pages;\n\tunsigned int num_pages;\n};\n\nstruct xen_page_foreign {\n\tdomid_t domid;\n\tgrant_ref_t gref;\n};\n\ntypedef void (*xen_grant_fn_t)(long unsigned int, unsigned int, unsigned int, void *);\n\nstruct gnttab_ops {\n\tunsigned int version;\n\tunsigned int grefs_per_grant_frame;\n\tint (*map_frames)(xen_pfn_t *, unsigned int);\n\tvoid (*unmap_frames)();\n\tvoid (*update_entry)(grant_ref_t, domid_t, long unsigned int, unsigned int);\n\tint (*end_foreign_access_ref)(grant_ref_t, int);\n\tlong unsigned int (*end_foreign_transfer_ref)(grant_ref_t);\n\tint (*query_foreign_access)(grant_ref_t);\n};\n\nstruct unmap_refs_callback_data {\n\tstruct completion completion;\n\tint result;\n};\n\nstruct deferred_entry {\n\tstruct list_head list;\n\tgrant_ref_t ref;\n\tbool ro;\n\tuint16_t warn_delay;\n\tstruct page *page;\n};\n\nstruct xen_feature_info {\n\tunsigned int submap_idx;\n\tuint32_t submap;\n};\n\nstruct balloon_stats {\n\tlong unsigned int current_pages;\n\tlong unsigned int target_pages;\n\tlong unsigned int target_unpopulated;\n\tlong unsigned int balloon_low;\n\tlong unsigned int balloon_high;\n\tlong unsigned int total_pages;\n\tlong unsigned int schedule_delay;\n\tlong unsigned int max_schedule_delay;\n\tlong unsigned int retry_count;\n\tlong unsigned int max_retry_count;\n};\n\nenum bp_state {\n\tBP_DONE = 0,\n\tBP_WAIT = 1,\n\tBP_EAGAIN = 2,\n\tBP_ECANCELED = 3,\n};\n\nenum shutdown_state {\n\tSHUTDOWN_INVALID = 4294967295,\n\tSHUTDOWN_POWEROFF = 0,\n\tSHUTDOWN_SUSPEND = 2,\n\tSHUTDOWN_HALT = 4,\n};\n\nstruct suspend_info {\n\tint cancelled;\n};\n\nstruct shutdown_handler {\n\tconst char command[11];\n\tbool flag;\n\tvoid (*cb)();\n};\n\nstruct vcpu_runstate_info {\n\tint state;\n\tuint64_t state_entry_time;\n\tuint64_t time[4];\n};\n\ntypedef struct vcpu_runstate_info *__guest_handle_vcpu_runstate_info;\n\nstruct vcpu_register_runstate_memory_area {\n\tunion {\n\t\t__guest_handle_vcpu_runstate_info h;\n\t\tstruct vcpu_runstate_info *v;\n\t\tuint64_t p;\n\t} addr;\n};\n\ntypedef evtchn_port_t *__guest_handle_evtchn_port_t;\n\nstruct evtchn_bind_interdomain {\n\tdomid_t remote_dom;\n\tevtchn_port_t remote_port;\n\tevtchn_port_t local_port;\n};\n\nstruct evtchn_bind_virq {\n\tuint32_t virq;\n\tuint32_t vcpu;\n\tevtchn_port_t port;\n};\n\nstruct evtchn_bind_pirq {\n\tuint32_t pirq;\n\tuint32_t flags;\n\tevtchn_port_t port;\n};\n\nstruct evtchn_bind_ipi {\n\tuint32_t vcpu;\n\tevtchn_port_t port;\n};\n\nstruct evtchn_close {\n\tevtchn_port_t port;\n};\n\nstruct evtchn_send {\n\tevtchn_port_t port;\n};\n\nstruct evtchn_status {\n\tdomid_t dom;\n\tevtchn_port_t port;\n\tuint32_t status;\n\tuint32_t vcpu;\n\tunion {\n\t\tstruct {\n\t\t\tdomid_t dom;\n\t\t} unbound;\n\t\tstruct {\n\t\t\tdomid_t dom;\n\t\t\tevtchn_port_t port;\n\t\t} interdomain;\n\t\tuint32_t pirq;\n\t\tuint32_t virq;\n\t} u;\n};\n\nstruct evtchn_bind_vcpu {\n\tevtchn_port_t port;\n\tuint32_t vcpu;\n};\n\nstruct evtchn_set_priority {\n\tevtchn_port_t port;\n\tuint32_t priority;\n};\n\nstruct sched_poll {\n\t__guest_handle_evtchn_port_t ports;\n\tunsigned int nr_ports;\n\tuint64_t timeout;\n};\n\nstruct physdev_eoi {\n\tuint32_t irq;\n};\n\nstruct physdev_pirq_eoi_gmfn {\n\txen_ulong_t gmfn;\n};\n\nstruct physdev_irq_status_query {\n\tuint32_t irq;\n\tuint32_t flags;\n};\n\nstruct physdev_irq {\n\tuint32_t irq;\n\tuint32_t vector;\n};\n\nstruct physdev_map_pirq {\n\tdomid_t domid;\n\tint type;\n\tint index;\n\tint pirq;\n\tint bus;\n\tint devfn;\n\tint entry_nr;\n\tuint64_t table_base;\n};\n\nstruct physdev_unmap_pirq {\n\tdomid_t domid;\n\tint pirq;\n};\n\nstruct physdev_get_free_pirq {\n\tint type;\n\tuint32_t pirq;\n};\n\nstruct evtchn_loop_ctrl;\n\nstruct evtchn_ops {\n\tunsigned int (*max_channels)();\n\tunsigned int (*nr_channels)();\n\tint (*setup)(evtchn_port_t);\n\tvoid (*remove)(evtchn_port_t, unsigned int);\n\tvoid (*bind_to_cpu)(evtchn_port_t, unsigned int, unsigned int);\n\tvoid (*clear_pending)(evtchn_port_t);\n\tvoid (*set_pending)(evtchn_port_t);\n\tbool (*is_pending)(evtchn_port_t);\n\tvoid (*mask)(evtchn_port_t);\n\tvoid (*unmask)(evtchn_port_t);\n\tvoid (*handle_events)(unsigned int, struct evtchn_loop_ctrl *);\n\tvoid (*resume)();\n\tint (*percpu_init)(unsigned int);\n\tint (*percpu_deinit)(unsigned int);\n};\n\nstruct evtchn_loop_ctrl {\n\tktime_t timeout;\n\tunsigned int count;\n\tbool defer_eoi;\n};\n\nenum xen_irq_type {\n\tIRQT_UNBOUND = 0,\n\tIRQT_PIRQ = 1,\n\tIRQT_VIRQ = 2,\n\tIRQT_IPI = 3,\n\tIRQT_EVTCHN = 4,\n};\n\nstruct irq_info {\n\tstruct list_head list;\n\tstruct list_head eoi_list;\n\tshort int refcnt;\n\tu8 spurious_cnt;\n\tu8 is_accounted;\n\tshort int type;\n\tu8 mask_reason;\n\tu8 is_active;\n\tunsigned int irq;\n\tevtchn_port_t evtchn;\n\tshort unsigned int cpu;\n\tshort unsigned int eoi_cpu;\n\tunsigned int irq_epoch;\n\tu64 eoi_time;\n\traw_spinlock_t lock;\n\tunion {\n\t\tshort unsigned int virq;\n\t\tenum ipi_vector ipi;\n\t\tstruct {\n\t\t\tshort unsigned int pirq;\n\t\t\tshort unsigned int gsi;\n\t\t\tunsigned char vector;\n\t\t\tunsigned char flags;\n\t\t\tuint16_t domid;\n\t\t} pirq;\n\t} u;\n};\n\nstruct lateeoi_work {\n\tstruct delayed_work delayed;\n\tspinlock_t eoi_list_lock;\n\tstruct list_head eoi_list;\n};\n\nstruct evtchn_unmask {\n\tevtchn_port_t port;\n};\n\nstruct evtchn_init_control {\n\tuint64_t control_gfn;\n\tuint32_t offset;\n\tuint32_t vcpu;\n\tuint8_t link_bits;\n\tuint8_t _pad[7];\n};\n\nstruct evtchn_expand_array {\n\tuint64_t array_gfn;\n};\n\ntypedef uint32_t event_word_t;\n\nstruct evtchn_fifo_control_block {\n\tuint32_t ready;\n\tuint32_t _rsvd;\n\tevent_word_t head[16];\n};\n\nstruct evtchn_fifo_queue {\n\tuint32_t head[16];\n};\n\nstruct evtchn_alloc_unbound {\n\tdomid_t dom;\n\tdomid_t remote_dom;\n\tevtchn_port_t port;\n};\n\nstruct xenbus_map_node {\n\tstruct list_head next;\n\tunion {\n\t\tstruct {\n\t\t\tstruct vm_struct *area;\n\t\t} pv;\n\t\tstruct {\n\t\t\tstruct page *pages[16];\n\t\t\tlong unsigned int addrs[16];\n\t\t\tvoid *addr;\n\t\t} hvm;\n\t};\n\tgrant_handle_t handles[16];\n\tunsigned int nr_handles;\n};\n\nstruct map_ring_valloc {\n\tstruct xenbus_map_node *node;\n\tlong unsigned int addrs[16];\n\tphys_addr_t phys_addrs[16];\n\tstruct gnttab_map_grant_ref map[16];\n\tstruct gnttab_unmap_grant_ref unmap[16];\n\tunsigned int idx;\n};\n\nstruct xenbus_ring_ops {\n\tint (*map)(struct xenbus_device *, struct map_ring_valloc *, grant_ref_t *, unsigned int, void **);\n\tint (*unmap)(struct xenbus_device *, void *);\n};\n\nstruct unmap_ring_hvm {\n\tunsigned int idx;\n\tlong unsigned int addrs[16];\n};\n\nenum xsd_sockmsg_type {\n\tXS_DEBUG = 0,\n\tXS_DIRECTORY = 1,\n\tXS_READ = 2,\n\tXS_GET_PERMS = 3,\n\tXS_WATCH = 4,\n\tXS_UNWATCH = 5,\n\tXS_TRANSACTION_START = 6,\n\tXS_TRANSACTION_END = 7,\n\tXS_INTRODUCE = 8,\n\tXS_RELEASE = 9,\n\tXS_GET_DOMAIN_PATH = 10,\n\tXS_WRITE = 11,\n\tXS_MKDIR = 12,\n\tXS_RM = 13,\n\tXS_SET_PERMS = 14,\n\tXS_WATCH_EVENT = 15,\n\tXS_ERROR = 16,\n\tXS_IS_DOMAIN_INTRODUCED = 17,\n\tXS_RESUME = 18,\n\tXS_SET_TARGET = 19,\n\tXS_RESTRICT = 20,\n\tXS_RESET_WATCHES = 21,\n};\n\nstruct xsd_sockmsg {\n\tuint32_t type;\n\tuint32_t req_id;\n\tuint32_t tx_id;\n\tuint32_t len;\n};\n\ntypedef uint32_t XENSTORE_RING_IDX;\n\nstruct xenstore_domain_interface {\n\tchar req[1024];\n\tchar rsp[1024];\n\tXENSTORE_RING_IDX req_cons;\n\tXENSTORE_RING_IDX req_prod;\n\tXENSTORE_RING_IDX rsp_cons;\n\tXENSTORE_RING_IDX rsp_prod;\n};\n\nstruct xs_watch_event {\n\tstruct list_head list;\n\tunsigned int len;\n\tstruct xenbus_watch *handle;\n\tconst char *path;\n\tconst char *token;\n\tchar body[0];\n};\n\nenum xb_req_state {\n\txb_req_state_queued = 0,\n\txb_req_state_wait_reply = 1,\n\txb_req_state_got_reply = 2,\n\txb_req_state_aborted = 3,\n};\n\nstruct xb_req_data {\n\tstruct list_head list;\n\twait_queue_head_t wq;\n\tstruct xsd_sockmsg msg;\n\tuint32_t caller_req_id;\n\tenum xsd_sockmsg_type type;\n\tchar *body;\n\tconst struct kvec *vec;\n\tint num_vecs;\n\tint err;\n\tenum xb_req_state state;\n\tbool user_req;\n\tvoid (*cb)(struct xb_req_data *);\n\tvoid *par;\n};\n\nenum xenstore_init {\n\tXS_UNKNOWN = 0,\n\tXS_PV = 1,\n\tXS_HVM = 2,\n\tXS_LOCAL = 3,\n};\n\nstruct xen_hvm_param {\n\tdomid_t domid;\n\tuint32_t index;\n\tuint64_t value;\n};\n\nstruct xen_bus_type {\n\tchar *root;\n\tunsigned int levels;\n\tint (*get_bus_id)(char *, const char *);\n\tint (*probe)(struct xen_bus_type *, const char *, const char *);\n\tbool (*otherend_will_handle)(struct xenbus_watch *, const char *, const char *);\n\tvoid (*otherend_changed)(struct xenbus_watch *, const char *, const char *);\n\tstruct bus_type bus;\n};\n\nstruct xb_find_info {\n\tstruct xenbus_device *dev;\n\tconst char *nodename;\n};\n\nstruct xenbus_transaction_holder {\n\tstruct list_head list;\n\tstruct xenbus_transaction handle;\n\tunsigned int generation_id;\n};\n\nstruct read_buffer {\n\tstruct list_head list;\n\tunsigned int cons;\n\tunsigned int len;\n\tchar msg[0];\n};\n\nstruct xenbus_file_priv {\n\tstruct mutex msgbuffer_mutex;\n\tstruct list_head transactions;\n\tstruct list_head watches;\n\tunsigned int len;\n\tunion {\n\t\tstruct xsd_sockmsg msg;\n\t\tchar buffer[4096];\n\t} u;\n\tstruct mutex reply_mutex;\n\tstruct list_head read_buffers;\n\twait_queue_head_t read_waitq;\n\tstruct kref kref;\n\tstruct work_struct wq;\n};\n\nstruct watch_adapter {\n\tstruct list_head list;\n\tstruct xenbus_watch watch;\n\tstruct xenbus_file_priv *dev_data;\n\tchar *token;\n};\n\nstruct physdev_manage_pci {\n\tuint8_t bus;\n\tuint8_t devfn;\n};\n\nstruct physdev_manage_pci_ext {\n\tuint8_t bus;\n\tuint8_t devfn;\n\tunsigned int is_extfn;\n\tunsigned int is_virtfn;\n\tstruct {\n\t\tuint8_t bus;\n\t\tuint8_t devfn;\n\t} physfn;\n};\n\nstruct physdev_pci_mmcfg_reserved {\n\tuint64_t address;\n\tuint16_t segment;\n\tuint8_t start_bus;\n\tuint8_t end_bus;\n\tuint32_t flags;\n};\n\nstruct physdev_pci_device_add {\n\tuint16_t seg;\n\tuint8_t bus;\n\tuint8_t devfn;\n\tuint32_t flags;\n\tstruct {\n\t\tuint8_t bus;\n\t\tuint8_t devfn;\n\t} physfn;\n\tuint32_t optarr[0];\n};\n\nstruct physdev_pci_device {\n\tuint16_t seg;\n\tuint8_t bus;\n\tuint8_t devfn;\n};\n\nstruct pci_mmcfg_region {\n\tstruct list_head list;\n\tstruct resource res;\n\tu64 address;\n\tchar *virt;\n\tu16 segment;\n\tu8 start_bus;\n\tu8 end_bus;\n\tchar name[30];\n};\n\nstruct usb_device_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__le16 bcdUSB;\n\t__u8 bDeviceClass;\n\t__u8 bDeviceSubClass;\n\t__u8 bDeviceProtocol;\n\t__u8 bMaxPacketSize0;\n\t__le16 idVendor;\n\t__le16 idProduct;\n\t__le16 bcdDevice;\n\t__u8 iManufacturer;\n\t__u8 iProduct;\n\t__u8 iSerialNumber;\n\t__u8 bNumConfigurations;\n};\n\nstruct usb_config_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__le16 wTotalLength;\n\t__u8 bNumInterfaces;\n\t__u8 bConfigurationValue;\n\t__u8 iConfiguration;\n\t__u8 bmAttributes;\n\t__u8 bMaxPower;\n} __attribute__((packed));\n\nstruct usb_interface_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bInterfaceNumber;\n\t__u8 bAlternateSetting;\n\t__u8 bNumEndpoints;\n\t__u8 bInterfaceClass;\n\t__u8 bInterfaceSubClass;\n\t__u8 bInterfaceProtocol;\n\t__u8 iInterface;\n};\n\nstruct usb_endpoint_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bEndpointAddress;\n\t__u8 bmAttributes;\n\t__le16 wMaxPacketSize;\n\t__u8 bInterval;\n\t__u8 bRefresh;\n\t__u8 bSynchAddress;\n} __attribute__((packed));\n\nstruct usb_ssp_isoc_ep_comp_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__le16 wReseved;\n\t__le32 dwBytesPerInterval;\n};\n\nstruct usb_ss_ep_comp_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bMaxBurst;\n\t__u8 bmAttributes;\n\t__le16 wBytesPerInterval;\n};\n\nstruct usb_interface_assoc_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bFirstInterface;\n\t__u8 bInterfaceCount;\n\t__u8 bFunctionClass;\n\t__u8 bFunctionSubClass;\n\t__u8 bFunctionProtocol;\n\t__u8 iFunction;\n};\n\nstruct usb_bos_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__le16 wTotalLength;\n\t__u8 bNumDeviceCaps;\n} __attribute__((packed));\n\nstruct usb_ext_cap_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDevCapabilityType;\n\t__le32 bmAttributes;\n} __attribute__((packed));\n\nstruct usb_ss_cap_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDevCapabilityType;\n\t__u8 bmAttributes;\n\t__le16 wSpeedSupported;\n\t__u8 bFunctionalitySupport;\n\t__u8 bU1devExitLat;\n\t__le16 bU2DevExitLat;\n};\n\nstruct usb_ss_container_id_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDevCapabilityType;\n\t__u8 bReserved;\n\t__u8 ContainerID[16];\n};\n\nstruct usb_ssp_cap_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDevCapabilityType;\n\t__u8 bReserved;\n\t__le32 bmAttributes;\n\t__le16 wFunctionalitySupport;\n\t__le16 wReserved;\n\t__le32 bmSublinkSpeedAttr[1];\n};\n\nstruct usb_ptm_cap_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDevCapabilityType;\n};\n\nenum usb_device_speed {\n\tUSB_SPEED_UNKNOWN = 0,\n\tUSB_SPEED_LOW = 1,\n\tUSB_SPEED_FULL = 2,\n\tUSB_SPEED_HIGH = 3,\n\tUSB_SPEED_WIRELESS = 4,\n\tUSB_SPEED_SUPER = 5,\n\tUSB_SPEED_SUPER_PLUS = 6,\n};\n\nenum usb_device_state {\n\tUSB_STATE_NOTATTACHED = 0,\n\tUSB_STATE_ATTACHED = 1,\n\tUSB_STATE_POWERED = 2,\n\tUSB_STATE_RECONNECTING = 3,\n\tUSB_STATE_UNAUTHENTICATED = 4,\n\tUSB_STATE_DEFAULT = 5,\n\tUSB_STATE_ADDRESS = 6,\n\tUSB_STATE_CONFIGURED = 7,\n\tUSB_STATE_SUSPENDED = 8,\n};\n\nenum usb3_link_state {\n\tUSB3_LPM_U0 = 0,\n\tUSB3_LPM_U1 = 1,\n\tUSB3_LPM_U2 = 2,\n\tUSB3_LPM_U3 = 3,\n};\n\nstruct ep_device;\n\nstruct usb_host_endpoint {\n\tstruct usb_endpoint_descriptor desc;\n\tstruct usb_ss_ep_comp_descriptor ss_ep_comp;\n\tstruct usb_ssp_isoc_ep_comp_descriptor ssp_isoc_ep_comp;\n\tchar: 8;\n\tstruct list_head urb_list;\n\tvoid *hcpriv;\n\tstruct ep_device *ep_dev;\n\tunsigned char *extra;\n\tint extralen;\n\tint enabled;\n\tint streams;\n\tint: 32;\n} __attribute__((packed));\n\nstruct usb_host_interface {\n\tstruct usb_interface_descriptor desc;\n\tint extralen;\n\tunsigned char *extra;\n\tstruct usb_host_endpoint *endpoint;\n\tchar *string;\n};\n\nenum usb_interface_condition {\n\tUSB_INTERFACE_UNBOUND = 0,\n\tUSB_INTERFACE_BINDING = 1,\n\tUSB_INTERFACE_BOUND = 2,\n\tUSB_INTERFACE_UNBINDING = 3,\n};\n\nstruct usb_interface {\n\tstruct usb_host_interface *altsetting;\n\tstruct usb_host_interface *cur_altsetting;\n\tunsigned int num_altsetting;\n\tstruct usb_interface_assoc_descriptor *intf_assoc;\n\tint minor;\n\tenum usb_interface_condition condition;\n\tunsigned int sysfs_files_created: 1;\n\tunsigned int ep_devs_created: 1;\n\tunsigned int unregistering: 1;\n\tunsigned int needs_remote_wakeup: 1;\n\tunsigned int needs_altsetting0: 1;\n\tunsigned int needs_binding: 1;\n\tunsigned int resetting_device: 1;\n\tunsigned int authorized: 1;\n\tstruct device dev;\n\tstruct device *usb_dev;\n\tstruct work_struct reset_ws;\n};\n\nstruct usb_interface_cache {\n\tunsigned int num_altsetting;\n\tstruct kref ref;\n\tstruct usb_host_interface altsetting[0];\n};\n\nstruct usb_host_config {\n\tstruct usb_config_descriptor desc;\n\tchar *string;\n\tstruct usb_interface_assoc_descriptor *intf_assoc[16];\n\tstruct usb_interface *interface[32];\n\tstruct usb_interface_cache *intf_cache[32];\n\tunsigned char *extra;\n\tint extralen;\n};\n\nstruct usb_host_bos {\n\tstruct usb_bos_descriptor *desc;\n\tstruct usb_ext_cap_descriptor *ext_cap;\n\tstruct usb_ss_cap_descriptor *ss_cap;\n\tstruct usb_ssp_cap_descriptor *ssp_cap;\n\tstruct usb_ss_container_id_descriptor *ss_id;\n\tstruct usb_ptm_cap_descriptor *ptm_cap;\n};\n\nstruct usb_devmap {\n\tlong unsigned int devicemap[2];\n};\n\nstruct usb_device;\n\nstruct mon_bus;\n\nstruct usb_bus {\n\tstruct device *controller;\n\tstruct device *sysdev;\n\tint busnum;\n\tconst char *bus_name;\n\tu8 uses_pio_for_control;\n\tu8 otg_port;\n\tunsigned int is_b_host: 1;\n\tunsigned int b_hnp_enable: 1;\n\tunsigned int no_stop_on_short: 1;\n\tunsigned int no_sg_constraint: 1;\n\tunsigned int sg_tablesize;\n\tint devnum_next;\n\tstruct mutex devnum_next_mutex;\n\tstruct usb_devmap devmap;\n\tstruct usb_device *root_hub;\n\tstruct usb_bus *hs_companion;\n\tint bandwidth_allocated;\n\tint bandwidth_int_reqs;\n\tint bandwidth_isoc_reqs;\n\tunsigned int resuming_ports;\n\tstruct mon_bus *mon_bus;\n\tint monitored;\n};\n\nstruct wusb_dev;\n\nenum usb_device_removable {\n\tUSB_DEVICE_REMOVABLE_UNKNOWN = 0,\n\tUSB_DEVICE_REMOVABLE = 1,\n\tUSB_DEVICE_FIXED = 2,\n};\n\nstruct usb2_lpm_parameters {\n\tunsigned int besl;\n\tint timeout;\n};\n\nstruct usb3_lpm_parameters {\n\tunsigned int mel;\n\tunsigned int pel;\n\tunsigned int sel;\n\tint timeout;\n};\n\nstruct usb_tt;\n\nstruct usb_device {\n\tint devnum;\n\tchar devpath[16];\n\tu32 route;\n\tenum usb_device_state state;\n\tenum usb_device_speed speed;\n\tunsigned int rx_lanes;\n\tunsigned int tx_lanes;\n\tstruct usb_tt *tt;\n\tint ttport;\n\tunsigned int toggle[2];\n\tstruct usb_device *parent;\n\tstruct usb_bus *bus;\n\tstruct usb_host_endpoint ep0;\n\tstruct device dev;\n\tstruct usb_device_descriptor descriptor;\n\tstruct usb_host_bos *bos;\n\tstruct usb_host_config *config;\n\tstruct usb_host_config *actconfig;\n\tstruct usb_host_endpoint *ep_in[16];\n\tstruct usb_host_endpoint *ep_out[16];\n\tchar **rawdescriptors;\n\tshort unsigned int bus_mA;\n\tu8 portnum;\n\tu8 level;\n\tu8 devaddr;\n\tunsigned int can_submit: 1;\n\tunsigned int persist_enabled: 1;\n\tunsigned int have_langid: 1;\n\tunsigned int authorized: 1;\n\tunsigned int authenticated: 1;\n\tunsigned int wusb: 1;\n\tunsigned int lpm_capable: 1;\n\tunsigned int usb2_hw_lpm_capable: 1;\n\tunsigned int usb2_hw_lpm_besl_capable: 1;\n\tunsigned int usb2_hw_lpm_enabled: 1;\n\tunsigned int usb2_hw_lpm_allowed: 1;\n\tunsigned int usb3_lpm_u1_enabled: 1;\n\tunsigned int usb3_lpm_u2_enabled: 1;\n\tint string_langid;\n\tchar *product;\n\tchar *manufacturer;\n\tchar *serial;\n\tstruct list_head filelist;\n\tint maxchild;\n\tu32 quirks;\n\tatomic_t urbnum;\n\tlong unsigned int active_duration;\n\tlong unsigned int connect_time;\n\tunsigned int do_remote_wakeup: 1;\n\tunsigned int reset_resume: 1;\n\tunsigned int port_is_suspended: 1;\n\tstruct wusb_dev *wusb_dev;\n\tint slot_id;\n\tenum usb_device_removable removable;\n\tstruct usb2_lpm_parameters l1_params;\n\tstruct usb3_lpm_parameters u1_params;\n\tstruct usb3_lpm_parameters u2_params;\n\tunsigned int lpm_disable_count;\n\tu16 hub_delay;\n\tunsigned int use_generic_driver: 1;\n};\n\nstruct usb_tt {\n\tstruct usb_device *hub;\n\tint multi;\n\tunsigned int think_time;\n\tvoid *hcpriv;\n\tspinlock_t lock;\n\tstruct list_head clear_list;\n\tstruct work_struct clear_work;\n};\n\nstruct usb_iso_packet_descriptor {\n\tunsigned int offset;\n\tunsigned int length;\n\tunsigned int actual_length;\n\tint status;\n};\n\nstruct usb_anchor {\n\tstruct list_head urb_list;\n\twait_queue_head_t wait;\n\tspinlock_t lock;\n\tatomic_t suspend_wakeups;\n\tunsigned int poisoned: 1;\n};\n\nstruct urb;\n\ntypedef void (*usb_complete_t)(struct urb *);\n\nstruct urb {\n\tstruct kref kref;\n\tint unlinked;\n\tvoid *hcpriv;\n\tatomic_t use_count;\n\tatomic_t reject;\n\tstruct list_head urb_list;\n\tstruct list_head anchor_list;\n\tstruct usb_anchor *anchor;\n\tstruct usb_device *dev;\n\tstruct usb_host_endpoint *ep;\n\tunsigned int pipe;\n\tunsigned int stream_id;\n\tint status;\n\tunsigned int transfer_flags;\n\tvoid *transfer_buffer;\n\tdma_addr_t transfer_dma;\n\tstruct scatterlist *sg;\n\tint num_mapped_sgs;\n\tint num_sgs;\n\tu32 transfer_buffer_length;\n\tu32 actual_length;\n\tunsigned char *setup_packet;\n\tdma_addr_t setup_dma;\n\tint start_frame;\n\tint number_of_packets;\n\tint interval;\n\tint error_count;\n\tvoid *context;\n\tusb_complete_t complete;\n\tstruct usb_iso_packet_descriptor iso_frame_desc[0];\n};\n\nstruct giveback_urb_bh {\n\tbool running;\n\tspinlock_t lock;\n\tstruct list_head head;\n\tstruct tasklet_struct bh;\n\tstruct usb_host_endpoint *completing_ep;\n};\n\nenum usb_dev_authorize_policy {\n\tUSB_DEVICE_AUTHORIZE_NONE = 0,\n\tUSB_DEVICE_AUTHORIZE_ALL = 1,\n\tUSB_DEVICE_AUTHORIZE_INTERNAL = 2,\n};\n\nstruct usb_phy_roothub;\n\nstruct hc_driver;\n\nstruct usb_phy;\n\nstruct usb_hcd {\n\tstruct usb_bus self;\n\tstruct kref kref;\n\tconst char *product_desc;\n\tint speed;\n\tchar irq_descr[24];\n\tstruct timer_list rh_timer;\n\tstruct urb *status_urb;\n\tstruct work_struct wakeup_work;\n\tstruct work_struct died_work;\n\tconst struct hc_driver *driver;\n\tstruct usb_phy *usb_phy;\n\tstruct usb_phy_roothub *phy_roothub;\n\tlong unsigned int flags;\n\tenum usb_dev_authorize_policy dev_policy;\n\tunsigned int rh_registered: 1;\n\tunsigned int rh_pollable: 1;\n\tunsigned int msix_enabled: 1;\n\tunsigned int msi_enabled: 1;\n\tunsigned int skip_phy_initialization: 1;\n\tunsigned int uses_new_polling: 1;\n\tunsigned int wireless: 1;\n\tunsigned int has_tt: 1;\n\tunsigned int amd_resume_bug: 1;\n\tunsigned int can_do_streams: 1;\n\tunsigned int tpl_support: 1;\n\tunsigned int cant_recv_wakeups: 1;\n\tunsigned int irq;\n\tvoid *regs;\n\tresource_size_t rsrc_start;\n\tresource_size_t rsrc_len;\n\tunsigned int power_budget;\n\tstruct giveback_urb_bh high_prio_bh;\n\tstruct giveback_urb_bh low_prio_bh;\n\tstruct mutex *address0_mutex;\n\tstruct mutex *bandwidth_mutex;\n\tstruct usb_hcd *shared_hcd;\n\tstruct usb_hcd *primary_hcd;\n\tstruct dma_pool___2 *pool[4];\n\tint state;\n\tstruct gen_pool *localmem_pool;\n\tlong unsigned int hcd_priv[0];\n};\n\nstruct hc_driver {\n\tconst char *description;\n\tconst char *product_desc;\n\tsize_t hcd_priv_size;\n\tirqreturn_t (*irq)(struct usb_hcd *);\n\tint flags;\n\tint (*reset)(struct usb_hcd *);\n\tint (*start)(struct usb_hcd *);\n\tint (*pci_suspend)(struct usb_hcd *, bool);\n\tint (*pci_resume)(struct usb_hcd *, bool);\n\tvoid (*stop)(struct usb_hcd *);\n\tvoid (*shutdown)(struct usb_hcd *);\n\tint (*get_frame_number)(struct usb_hcd *);\n\tint (*urb_enqueue)(struct usb_hcd *, struct urb *, gfp_t);\n\tint (*urb_dequeue)(struct usb_hcd *, struct urb *, int);\n\tint (*map_urb_for_dma)(struct usb_hcd *, struct urb *, gfp_t);\n\tvoid (*unmap_urb_for_dma)(struct usb_hcd *, struct urb *);\n\tvoid (*endpoint_disable)(struct usb_hcd *, struct usb_host_endpoint *);\n\tvoid (*endpoint_reset)(struct usb_hcd *, struct usb_host_endpoint *);\n\tint (*hub_status_data)(struct usb_hcd *, char *);\n\tint (*hub_control)(struct usb_hcd *, u16, u16, u16, char *, u16);\n\tint (*bus_suspend)(struct usb_hcd *);\n\tint (*bus_resume)(struct usb_hcd *);\n\tint (*start_port_reset)(struct usb_hcd *, unsigned int);\n\tlong unsigned int (*get_resuming_ports)(struct usb_hcd *);\n\tvoid (*relinquish_port)(struct usb_hcd *, int);\n\tint (*port_handed_over)(struct usb_hcd *, int);\n\tvoid (*clear_tt_buffer_complete)(struct usb_hcd *, struct usb_host_endpoint *);\n\tint (*alloc_dev)(struct usb_hcd *, struct usb_device *);\n\tvoid (*free_dev)(struct usb_hcd *, struct usb_device *);\n\tint (*alloc_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, unsigned int, gfp_t);\n\tint (*free_streams)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint **, unsigned int, gfp_t);\n\tint (*add_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);\n\tint (*drop_endpoint)(struct usb_hcd *, struct usb_device *, struct usb_host_endpoint *);\n\tint (*check_bandwidth)(struct usb_hcd *, struct usb_device *);\n\tvoid (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);\n\tint (*address_device)(struct usb_hcd *, struct usb_device *);\n\tint (*enable_device)(struct usb_hcd *, struct usb_device *);\n\tint (*update_hub_device)(struct usb_hcd *, struct usb_device *, struct usb_tt *, gfp_t);\n\tint (*reset_device)(struct usb_hcd *, struct usb_device *);\n\tint (*update_device)(struct usb_hcd *, struct usb_device *);\n\tint (*set_usb2_hw_lpm)(struct usb_hcd *, struct usb_device *, int);\n\tint (*enable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);\n\tint (*disable_usb3_lpm_timeout)(struct usb_hcd *, struct usb_device *, enum usb3_link_state);\n\tint (*find_raw_port_number)(struct usb_hcd *, int);\n\tint (*port_power)(struct usb_hcd *, int, bool);\n};\n\nstruct physdev_dbgp_op {\n\tuint8_t op;\n\tuint8_t bus;\n\tunion {\n\t\tstruct physdev_pci_device pci;\n\t} u;\n};\n\nstruct pcpu {\n\tstruct list_head list;\n\tstruct device dev;\n\tuint32_t cpu_id;\n\tuint32_t flags;\n};\n\ntypedef uint8_t xen_domain_handle_t[16];\n\nstruct xen_compile_info {\n\tchar compiler[64];\n\tchar compile_by[16];\n\tchar compile_domain[32];\n\tchar compile_date[32];\n};\n\nstruct xen_platform_parameters {\n\txen_ulong_t virt_start;\n};\n\nstruct xen_build_id {\n\tuint32_t len;\n\tunsigned char buf[0];\n};\n\nstruct hyp_sysfs_attr {\n\tstruct attribute attr;\n\tssize_t (*show)(struct hyp_sysfs_attr *, char *);\n\tssize_t (*store)(struct hyp_sysfs_attr *, const char *, size_t);\n\tvoid *hyp_attr_data;\n};\n\nstruct pmu_mode {\n\tconst char *name;\n\tuint32_t mode;\n};\n\nenum xen_swiotlb_err {\n\tXEN_SWIOTLB_UNKNOWN = 0,\n\tXEN_SWIOTLB_ENOMEM = 1,\n\tXEN_SWIOTLB_EFIXUP = 2,\n};\n\ntypedef int *__guest_handle_int;\n\ntypedef xen_ulong_t *__guest_handle_xen_ulong_t;\n\nstruct xen_add_to_physmap_range {\n\tdomid_t domid;\n\tuint16_t space;\n\tuint16_t size;\n\tdomid_t foreign_domid;\n\t__guest_handle_xen_ulong_t idxs;\n\t__guest_handle_xen_pfn_t gpfns;\n\t__guest_handle_int errs;\n};\n\nstruct xen_remove_from_physmap {\n\tdomid_t domid;\n\txen_pfn_t gpfn;\n};\n\ntypedef void (*xen_gfn_fn_t)(long unsigned int, void *);\n\nstruct xen_remap_gfn_info;\n\nstruct remap_data___2 {\n\txen_pfn_t *fgfn;\n\tint nr_fgfn;\n\tpgprot_t prot;\n\tdomid_t domid;\n\tstruct vm_area_struct *vma;\n\tint index;\n\tstruct page **pages;\n\tstruct xen_remap_gfn_info *info;\n\tint *err_ptr;\n\tint mapped;\n\tint h_errs[1];\n\txen_ulong_t h_idxs[1];\n\txen_pfn_t h_gpfns[1];\n\tint h_iter;\n};\n\nstruct map_balloon_pages {\n\txen_pfn_t *pfns;\n\tunsigned int idx;\n};\n\nstruct remap_pfn {\n\tstruct mm_struct *mm;\n\tstruct page **pages;\n\tpgprot_t prot;\n\tlong unsigned int i;\n};\n\nstruct ww_class {\n\tatomic_long_t stamp;\n\tstruct lock_class_key acquire_key;\n\tstruct lock_class_key mutex_key;\n\tconst char *acquire_name;\n\tconst char *mutex_name;\n\tunsigned int is_wait_die;\n};\n\nstruct regulator_state {\n\tint uV;\n\tint min_uV;\n\tint max_uV;\n\tunsigned int mode;\n\tint enabled;\n\tbool changeable;\n};\n\nstruct regulation_constraints {\n\tconst char *name;\n\tint min_uV;\n\tint max_uV;\n\tint uV_offset;\n\tint min_uA;\n\tint max_uA;\n\tint ilim_uA;\n\tint system_load;\n\tu32 *max_spread;\n\tint max_uV_step;\n\tunsigned int valid_modes_mask;\n\tunsigned int valid_ops_mask;\n\tint input_uV;\n\tstruct regulator_state state_disk;\n\tstruct regulator_state state_mem;\n\tstruct regulator_state state_standby;\n\tsuspend_state_t initial_state;\n\tunsigned int initial_mode;\n\tunsigned int ramp_delay;\n\tunsigned int settling_time;\n\tunsigned int settling_time_up;\n\tunsigned int settling_time_down;\n\tunsigned int enable_time;\n\tunsigned int active_discharge;\n\tunsigned int always_on: 1;\n\tunsigned int boot_on: 1;\n\tunsigned int apply_uV: 1;\n\tunsigned int ramp_disable: 1;\n\tunsigned int soft_start: 1;\n\tunsigned int pull_down: 1;\n\tunsigned int over_current_protection: 1;\n};\n\nstruct regulator_consumer_supply;\n\nstruct regulator_init_data {\n\tconst char *supply_regulator;\n\tstruct regulation_constraints constraints;\n\tint num_consumer_supplies;\n\tstruct regulator_consumer_supply *consumer_supplies;\n\tint (*regulator_init)(void *);\n\tvoid *driver_data;\n};\n\nenum regulator_type {\n\tREGULATOR_VOLTAGE = 0,\n\tREGULATOR_CURRENT = 1,\n};\n\nstruct regulator_config;\n\nstruct regulator_ops;\n\nstruct regulator_desc {\n\tconst char *name;\n\tconst char *supply_name;\n\tconst char *of_match;\n\tbool of_match_full_name;\n\tconst char *regulators_node;\n\tint (*of_parse_cb)(struct device_node *, const struct regulator_desc *, struct regulator_config *);\n\tint id;\n\tunsigned int continuous_voltage_range: 1;\n\tunsigned int n_voltages;\n\tunsigned int n_current_limits;\n\tconst struct regulator_ops *ops;\n\tint irq;\n\tenum regulator_type type;\n\tstruct module *owner;\n\tunsigned int min_uV;\n\tunsigned int uV_step;\n\tunsigned int linear_min_sel;\n\tint fixed_uV;\n\tunsigned int ramp_delay;\n\tint min_dropout_uV;\n\tconst struct linear_range *linear_ranges;\n\tconst unsigned int *linear_range_selectors;\n\tint n_linear_ranges;\n\tconst unsigned int *volt_table;\n\tconst unsigned int *curr_table;\n\tunsigned int vsel_range_reg;\n\tunsigned int vsel_range_mask;\n\tunsigned int vsel_reg;\n\tunsigned int vsel_mask;\n\tunsigned int vsel_step;\n\tunsigned int csel_reg;\n\tunsigned int csel_mask;\n\tunsigned int apply_reg;\n\tunsigned int apply_bit;\n\tunsigned int enable_reg;\n\tunsigned int enable_mask;\n\tunsigned int enable_val;\n\tunsigned int disable_val;\n\tbool enable_is_inverted;\n\tunsigned int bypass_reg;\n\tunsigned int bypass_mask;\n\tunsigned int bypass_val_on;\n\tunsigned int bypass_val_off;\n\tunsigned int active_discharge_on;\n\tunsigned int active_discharge_off;\n\tunsigned int active_discharge_mask;\n\tunsigned int active_discharge_reg;\n\tunsigned int soft_start_reg;\n\tunsigned int soft_start_mask;\n\tunsigned int soft_start_val_on;\n\tunsigned int pull_down_reg;\n\tunsigned int pull_down_mask;\n\tunsigned int pull_down_val_on;\n\tunsigned int enable_time;\n\tunsigned int off_on_delay;\n\tunsigned int poll_enabled_time;\n\tunsigned int (*of_map_mode)(unsigned int);\n};\n\nstruct pre_voltage_change_data {\n\tlong unsigned int old_uV;\n\tlong unsigned int min_uV;\n\tlong unsigned int max_uV;\n};\n\nstruct regulator_bulk_data {\n\tconst char *supply;\n\tstruct regulator *consumer;\n\tint ret;\n};\n\nstruct regulator_voltage {\n\tint min_uV;\n\tint max_uV;\n};\n\nstruct regulator_dev;\n\nstruct regulator {\n\tstruct device *dev;\n\tstruct list_head list;\n\tunsigned int always_on: 1;\n\tunsigned int bypass: 1;\n\tunsigned int device_link: 1;\n\tint uA_load;\n\tunsigned int enable_count;\n\tunsigned int deferred_disables;\n\tstruct regulator_voltage voltage[5];\n\tconst char *supply_name;\n\tstruct device_attribute dev_attr;\n\tstruct regulator_dev *rdev;\n\tstruct dentry *debugfs;\n};\n\nstruct regulator_coupler {\n\tstruct list_head list;\n\tint (*attach_regulator)(struct regulator_coupler *, struct regulator_dev *);\n\tint (*detach_regulator)(struct regulator_coupler *, struct regulator_dev *);\n\tint (*balance_voltage)(struct regulator_coupler *, struct regulator_dev *, suspend_state_t);\n};\n\nstruct coupling_desc {\n\tstruct regulator_dev **coupled_rdevs;\n\tstruct regulator_coupler *coupler;\n\tint n_resolved;\n\tint n_coupled;\n};\n\nstruct regulator_enable_gpio;\n\nstruct regulator_dev {\n\tconst struct regulator_desc *desc;\n\tint exclusive;\n\tu32 use_count;\n\tu32 open_count;\n\tu32 bypass_count;\n\tstruct list_head list;\n\tstruct list_head consumer_list;\n\tstruct coupling_desc coupling_desc;\n\tstruct blocking_notifier_head notifier;\n\tstruct ww_mutex mutex;\n\tstruct task_struct *mutex_owner;\n\tint ref_cnt;\n\tstruct module *owner;\n\tstruct device dev;\n\tstruct regulation_constraints *constraints;\n\tstruct regulator *supply;\n\tconst char *supply_name;\n\tstruct regmap *regmap;\n\tstruct delayed_work disable_work;\n\tvoid *reg_data;\n\tstruct dentry *debugfs;\n\tstruct regulator_enable_gpio *ena_pin;\n\tunsigned int ena_gpio_state: 1;\n\tunsigned int is_switch: 1;\n\tlong unsigned int last_off_jiffy;\n};\n\nenum regulator_status {\n\tREGULATOR_STATUS_OFF = 0,\n\tREGULATOR_STATUS_ON = 1,\n\tREGULATOR_STATUS_ERROR = 2,\n\tREGULATOR_STATUS_FAST = 3,\n\tREGULATOR_STATUS_NORMAL = 4,\n\tREGULATOR_STATUS_IDLE = 5,\n\tREGULATOR_STATUS_STANDBY = 6,\n\tREGULATOR_STATUS_BYPASS = 7,\n\tREGULATOR_STATUS_UNDEFINED = 8,\n};\n\nstruct regulator_ops {\n\tint (*list_voltage)(struct regulator_dev *, unsigned int);\n\tint (*set_voltage)(struct regulator_dev *, int, int, unsigned int *);\n\tint (*map_voltage)(struct regulator_dev *, int, int);\n\tint (*set_voltage_sel)(struct regulator_dev *, unsigned int);\n\tint (*get_voltage)(struct regulator_dev *);\n\tint (*get_voltage_sel)(struct regulator_dev *);\n\tint (*set_current_limit)(struct regulator_dev *, int, int);\n\tint (*get_current_limit)(struct regulator_dev *);\n\tint (*set_input_current_limit)(struct regulator_dev *, int);\n\tint (*set_over_current_protection)(struct regulator_dev *);\n\tint (*set_active_discharge)(struct regulator_dev *, bool);\n\tint (*enable)(struct regulator_dev *);\n\tint (*disable)(struct regulator_dev *);\n\tint (*is_enabled)(struct regulator_dev *);\n\tint (*set_mode)(struct regulator_dev *, unsigned int);\n\tunsigned int (*get_mode)(struct regulator_dev *);\n\tint (*get_error_flags)(struct regulator_dev *, unsigned int *);\n\tint (*enable_time)(struct regulator_dev *);\n\tint (*set_ramp_delay)(struct regulator_dev *, int);\n\tint (*set_voltage_time)(struct regulator_dev *, int, int);\n\tint (*set_voltage_time_sel)(struct regulator_dev *, unsigned int, unsigned int);\n\tint (*set_soft_start)(struct regulator_dev *);\n\tint (*get_status)(struct regulator_dev *);\n\tunsigned int (*get_optimum_mode)(struct regulator_dev *, int, int, int);\n\tint (*set_load)(struct regulator_dev *, int);\n\tint (*set_bypass)(struct regulator_dev *, bool);\n\tint (*get_bypass)(struct regulator_dev *, bool *);\n\tint (*set_suspend_voltage)(struct regulator_dev *, int);\n\tint (*set_suspend_enable)(struct regulator_dev *);\n\tint (*set_suspend_disable)(struct regulator_dev *);\n\tint (*set_suspend_mode)(struct regulator_dev *, unsigned int);\n\tint (*resume)(struct regulator_dev *);\n\tint (*set_pull_down)(struct regulator_dev *);\n};\n\nstruct regulator_config {\n\tstruct device *dev;\n\tconst struct regulator_init_data *init_data;\n\tvoid *driver_data;\n\tstruct device_node *of_node;\n\tstruct regmap *regmap;\n\tstruct gpio_desc___2 *ena_gpiod;\n};\n\nstruct regulator_enable_gpio {\n\tstruct list_head list;\n\tstruct gpio_desc___2 *gpiod;\n\tu32 enable_count;\n\tu32 request_count;\n};\n\nenum regulator_active_discharge {\n\tREGULATOR_ACTIVE_DISCHARGE_DEFAULT = 0,\n\tREGULATOR_ACTIVE_DISCHARGE_DISABLE = 1,\n\tREGULATOR_ACTIVE_DISCHARGE_ENABLE = 2,\n};\n\nstruct regulator_consumer_supply {\n\tconst char *dev_name;\n\tconst char *supply;\n};\n\nstruct trace_event_raw_regulator_basic {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_regulator_range {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tint min;\n\tint max;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_regulator_value {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tunsigned int val;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_regulator_basic {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_regulator_range {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_regulator_value {\n\tu32 name;\n};\n\ntypedef void (*btf_trace_regulator_enable)(void *, const char *);\n\ntypedef void (*btf_trace_regulator_enable_delay)(void *, const char *);\n\ntypedef void (*btf_trace_regulator_enable_complete)(void *, const char *);\n\ntypedef void (*btf_trace_regulator_disable)(void *, const char *);\n\ntypedef void (*btf_trace_regulator_disable_complete)(void *, const char *);\n\ntypedef void (*btf_trace_regulator_bypass_enable)(void *, const char *);\n\ntypedef void (*btf_trace_regulator_bypass_enable_complete)(void *, const char *);\n\ntypedef void (*btf_trace_regulator_bypass_disable)(void *, const char *);\n\ntypedef void (*btf_trace_regulator_bypass_disable_complete)(void *, const char *);\n\ntypedef void (*btf_trace_regulator_set_voltage)(void *, const char *, int, int);\n\ntypedef void (*btf_trace_regulator_set_voltage_complete)(void *, const char *, unsigned int);\n\nenum regulator_get_type {\n\tNORMAL_GET = 0,\n\tEXCLUSIVE_GET = 1,\n\tOPTIONAL_GET = 2,\n\tMAX_GET_TYPE = 3,\n};\n\nstruct regulator_map {\n\tstruct list_head list;\n\tconst char *dev_name;\n\tconst char *supply;\n\tstruct regulator_dev *regulator;\n};\n\nstruct regulator_supply_alias {\n\tstruct list_head list;\n\tstruct device *src_dev;\n\tconst char *src_supply;\n\tstruct device *alias_dev;\n\tconst char *alias_supply;\n};\n\nstruct summary_data {\n\tstruct seq_file *s;\n\tstruct regulator_dev *parent;\n\tint level;\n};\n\nstruct summary_lock_data {\n\tstruct ww_acquire_ctx *ww_ctx;\n\tstruct regulator_dev **new_contended_rdev;\n\tstruct regulator_dev **old_contended_rdev;\n};\n\nstruct fixed_voltage_config {\n\tconst char *supply_name;\n\tconst char *input_supply;\n\tint microvolts;\n\tunsigned int startup_delay;\n\tunsigned int off_on_delay;\n\tunsigned int enabled_at_boot: 1;\n\tstruct regulator_init_data *init_data;\n};\n\nstruct fixed_regulator_data {\n\tstruct fixed_voltage_config cfg;\n\tstruct regulator_init_data init_data;\n\tstruct platform_device pdev;\n};\n\nstruct regulator_bulk_devres {\n\tstruct regulator_bulk_data *consumers;\n\tint num_consumers;\n};\n\nstruct regulator_supply_alias_match {\n\tstruct device *dev;\n\tconst char *id;\n};\n\nstruct regulator_notifier_match {\n\tstruct regulator *regulator;\n\tstruct notifier_block *nb;\n};\n\nstruct reset_controller_dev;\n\nstruct reset_control_ops {\n\tint (*reset)(struct reset_controller_dev *, long unsigned int);\n\tint (*assert)(struct reset_controller_dev *, long unsigned int);\n\tint (*deassert)(struct reset_controller_dev *, long unsigned int);\n\tint (*status)(struct reset_controller_dev *, long unsigned int);\n};\n\nstruct reset_controller_dev {\n\tconst struct reset_control_ops *ops;\n\tstruct module *owner;\n\tstruct list_head list;\n\tstruct list_head reset_control_head;\n\tstruct device *dev;\n\tstruct device_node *of_node;\n\tint of_reset_n_cells;\n\tint (*of_xlate)(struct reset_controller_dev *, const struct of_phandle_args *);\n\tunsigned int nr_resets;\n};\n\nstruct reset_control_lookup {\n\tstruct list_head list;\n\tconst char *provider;\n\tunsigned int index;\n\tconst char *dev_id;\n\tconst char *con_id;\n};\n\nstruct reset_control {\n\tstruct reset_controller_dev *rcdev;\n\tstruct list_head list;\n\tunsigned int id;\n\tstruct kref refcnt;\n\tbool acquired;\n\tbool shared;\n\tbool array;\n\tatomic_t deassert_count;\n\tatomic_t triggered_count;\n};\n\nstruct reset_control_array {\n\tstruct reset_control base;\n\tunsigned int num_rstcs;\n\tstruct reset_control *rstc[0];\n};\n\nstruct serial_struct32 {\n\tcompat_int_t type;\n\tcompat_int_t line;\n\tcompat_uint_t port;\n\tcompat_int_t irq;\n\tcompat_int_t flags;\n\tcompat_int_t xmit_fifo_size;\n\tcompat_int_t custom_divisor;\n\tcompat_int_t baud_base;\n\tshort unsigned int close_delay;\n\tchar io_type;\n\tchar reserved_char;\n\tcompat_int_t hub6;\n\tshort unsigned int closing_wait;\n\tshort unsigned int closing_wait2;\n\tcompat_uint_t iomem_base;\n\tshort unsigned int iomem_reg_shift;\n\tunsigned int port_high;\n\tcompat_int_t reserved;\n};\n\nstruct n_tty_data {\n\tsize_t read_head;\n\tsize_t commit_head;\n\tsize_t canon_head;\n\tsize_t echo_head;\n\tsize_t echo_commit;\n\tsize_t echo_mark;\n\tlong unsigned int char_map[4];\n\tlong unsigned int overrun_time;\n\tint num_overrun;\n\tbool no_room;\n\tunsigned char lnext: 1;\n\tunsigned char erasing: 1;\n\tunsigned char raw: 1;\n\tunsigned char real_raw: 1;\n\tunsigned char icanon: 1;\n\tunsigned char push: 1;\n\tchar read_buf[4096];\n\tlong unsigned int read_flags[64];\n\tunsigned char echo_buf[4096];\n\tsize_t read_tail;\n\tsize_t line_start;\n\tunsigned int column;\n\tunsigned int canon_column;\n\tsize_t echo_tail;\n\tstruct mutex atomic_read_lock;\n\tstruct mutex output_lock;\n};\n\nenum {\n\tERASE = 0,\n\tWERASE = 1,\n\tKILL = 2,\n};\n\nstruct termios {\n\ttcflag_t c_iflag;\n\ttcflag_t c_oflag;\n\ttcflag_t c_cflag;\n\ttcflag_t c_lflag;\n\tcc_t c_line;\n\tcc_t c_cc[19];\n};\n\nstruct termios2 {\n\ttcflag_t c_iflag;\n\ttcflag_t c_oflag;\n\ttcflag_t c_cflag;\n\ttcflag_t c_lflag;\n\tcc_t c_line;\n\tcc_t c_cc[19];\n\tspeed_t c_ispeed;\n\tspeed_t c_ospeed;\n};\n\nstruct termio {\n\tshort unsigned int c_iflag;\n\tshort unsigned int c_oflag;\n\tshort unsigned int c_cflag;\n\tshort unsigned int c_lflag;\n\tunsigned char c_line;\n\tunsigned char c_cc[8];\n};\n\nstruct ldsem_waiter {\n\tstruct list_head list;\n\tstruct task_struct *task;\n};\n\nstruct pts_fs_info___2;\n\nstruct tty_audit_buf {\n\tstruct mutex mutex;\n\tdev_t dev;\n\tunsigned int icanon: 1;\n\tsize_t valid;\n\tunsigned char *data;\n};\n\nstruct sysrq_state {\n\tstruct input_handle handle;\n\tstruct work_struct reinject_work;\n\tlong unsigned int key_down[12];\n\tunsigned int alt;\n\tunsigned int alt_use;\n\tunsigned int shift;\n\tunsigned int shift_use;\n\tbool active;\n\tbool need_reinject;\n\tbool reinjecting;\n\tbool reset_canceled;\n\tbool reset_requested;\n\tlong unsigned int reset_keybit[12];\n\tint reset_seq_len;\n\tint reset_seq_cnt;\n\tint reset_seq_version;\n\tstruct timer_list keyreset_timer;\n};\n\nstruct consolefontdesc {\n\tshort unsigned int charcount;\n\tshort unsigned int charheight;\n\tchar *chardata;\n};\n\nstruct unipair {\n\tshort unsigned int unicode;\n\tshort unsigned int fontpos;\n};\n\nstruct unimapdesc {\n\tshort unsigned int entry_ct;\n\tstruct unipair *entries;\n};\n\nstruct kbentry {\n\tunsigned char kb_table;\n\tunsigned char kb_index;\n\tshort unsigned int kb_value;\n};\n\nstruct kbsentry {\n\tunsigned char kb_func;\n\tunsigned char kb_string[512];\n};\n\nstruct kbkeycode {\n\tunsigned int scancode;\n\tunsigned int keycode;\n};\n\nstruct kbd_repeat {\n\tint delay;\n\tint period;\n};\n\nstruct console_font_op {\n\tunsigned int op;\n\tunsigned int flags;\n\tunsigned int width;\n\tunsigned int height;\n\tunsigned int charcount;\n\tunsigned char *data;\n};\n\nstruct vt_stat {\n\tshort unsigned int v_active;\n\tshort unsigned int v_signal;\n\tshort unsigned int v_state;\n};\n\nstruct vt_sizes {\n\tshort unsigned int v_rows;\n\tshort unsigned int v_cols;\n\tshort unsigned int v_scrollsize;\n};\n\nstruct vt_consize {\n\tshort unsigned int v_rows;\n\tshort unsigned int v_cols;\n\tshort unsigned int v_vlin;\n\tshort unsigned int v_clin;\n\tshort unsigned int v_vcol;\n\tshort unsigned int v_ccol;\n};\n\nstruct vt_event {\n\tunsigned int event;\n\tunsigned int oldev;\n\tunsigned int newev;\n\tunsigned int pad[4];\n};\n\nstruct vt_setactivate {\n\tunsigned int console;\n\tstruct vt_mode mode;\n};\n\nstruct vt_spawn_console {\n\tspinlock_t lock;\n\tstruct pid *pid;\n\tint sig;\n};\n\nstruct vt_event_wait {\n\tstruct list_head list;\n\tstruct vt_event event;\n\tint done;\n};\n\nstruct compat_consolefontdesc {\n\tshort unsigned int charcount;\n\tshort unsigned int charheight;\n\tcompat_caddr_t chardata;\n};\n\nstruct compat_console_font_op {\n\tcompat_uint_t op;\n\tcompat_uint_t flags;\n\tcompat_uint_t width;\n\tcompat_uint_t height;\n\tcompat_uint_t charcount;\n\tcompat_caddr_t data;\n};\n\nstruct compat_unimapdesc {\n\tshort unsigned int entry_ct;\n\tcompat_caddr_t entries;\n};\n\nstruct vt_notifier_param {\n\tstruct vc_data *vc;\n\tunsigned int c;\n};\n\nstruct vcs_poll_data {\n\tstruct notifier_block notifier;\n\tunsigned int cons_num;\n\tint event;\n\twait_queue_head_t waitq;\n\tstruct fasync_struct *fasync;\n};\n\nstruct tiocl_selection {\n\tshort unsigned int xs;\n\tshort unsigned int ys;\n\tshort unsigned int xe;\n\tshort unsigned int ye;\n\tshort unsigned int sel_mode;\n};\n\nstruct vc_selection {\n\tstruct mutex lock;\n\tstruct vc_data *cons;\n\tchar *buffer;\n\tunsigned int buf_len;\n\tvolatile int start;\n\tint end;\n};\n\nstruct kbdiacr {\n\tunsigned char diacr;\n\tunsigned char base;\n\tunsigned char result;\n};\n\nstruct kbdiacrs {\n\tunsigned int kb_cnt;\n\tstruct kbdiacr kbdiacr[256];\n};\n\nstruct kbdiacruc {\n\tunsigned int diacr;\n\tunsigned int base;\n\tunsigned int result;\n};\n\nstruct kbdiacrsuc {\n\tunsigned int kb_cnt;\n\tstruct kbdiacruc kbdiacruc[256];\n};\n\nstruct keyboard_notifier_param {\n\tstruct vc_data *vc;\n\tint down;\n\tint shift;\n\tint ledstate;\n\tunsigned int value;\n};\n\nstruct kbd_struct {\n\tunsigned char lockstate;\n\tunsigned char slockstate;\n\tunsigned char ledmode: 1;\n\tunsigned char ledflagstate: 4;\n\tchar: 3;\n\tunsigned char default_ledflagstate: 4;\n\tunsigned char kbdmode: 3;\n\tchar: 1;\n\tunsigned char modeflags: 5;\n};\n\ntypedef void k_handler_fn(struct vc_data *, unsigned char, char);\n\ntypedef void fn_handler_fn(struct vc_data *);\n\nstruct getset_keycode_data {\n\tstruct input_keymap_entry ke;\n\tint error;\n};\n\nstruct kbd_led_trigger {\n\tstruct led_trigger trigger;\n\tunsigned int mask;\n};\n\nstruct uni_pagedir {\n\tu16 **uni_pgdir[32];\n\tlong unsigned int refcount;\n\tlong unsigned int sum;\n\tunsigned char *inverse_translations[4];\n\tu16 *inverse_trans_unicode;\n};\n\ntypedef uint32_t char32_t;\n\nstruct uni_screen {\n\tchar32_t *lines[0];\n};\n\nstruct con_driver {\n\tconst struct consw *con;\n\tconst char *desc;\n\tstruct device *dev;\n\tint node;\n\tint first;\n\tint last;\n\tint flag;\n};\n\nenum {\n\tblank_off = 0,\n\tblank_normal_wait = 1,\n\tblank_vesa_wait = 2,\n};\n\nenum {\n\tEPecma = 0,\n\tEPdec = 1,\n\tEPeq = 2,\n\tEPgt = 3,\n\tEPlt = 4,\n};\n\nstruct rgb {\n\tu8 r;\n\tu8 g;\n\tu8 b;\n};\n\nenum {\n\tESnormal = 0,\n\tESesc = 1,\n\tESsquare = 2,\n\tESgetpars = 3,\n\tESfunckey = 4,\n\tEShash = 5,\n\tESsetG0 = 6,\n\tESsetG1 = 7,\n\tESpercent = 8,\n\tEScsiignore = 9,\n\tESnonstd = 10,\n\tESpalette = 11,\n\tESosc = 12,\n};\n\nstruct interval {\n\tuint32_t first;\n\tuint32_t last;\n};\n\nstruct vc_draw_region {\n\tlong unsigned int from;\n\tlong unsigned int to;\n\tint x;\n};\n\nstruct hv_ops;\n\nstruct hvc_struct {\n\tstruct tty_port port;\n\tspinlock_t lock;\n\tint index;\n\tint do_wakeup;\n\tchar *outbuf;\n\tint outbuf_size;\n\tint n_outbuf;\n\tuint32_t vtermno;\n\tconst struct hv_ops *ops;\n\tint irq_requested;\n\tint data;\n\tstruct winsize ws;\n\tstruct work_struct tty_resize;\n\tstruct list_head next;\n\tlong unsigned int flags;\n};\n\nstruct hv_ops {\n\tint (*get_chars)(uint32_t, char *, int);\n\tint (*put_chars)(uint32_t, const char *, int);\n\tint (*flush)(uint32_t, bool);\n\tint (*notifier_add)(struct hvc_struct *, int);\n\tvoid (*notifier_del)(struct hvc_struct *, int);\n\tvoid (*notifier_hangup)(struct hvc_struct *, int);\n\tint (*tiocmget)(struct hvc_struct *);\n\tint (*tiocmset)(struct hvc_struct *, unsigned int, unsigned int);\n\tvoid (*dtr_rts)(struct hvc_struct *, int);\n};\n\nstruct circ_buf {\n\tchar *buf;\n\tint head;\n\tint tail;\n};\n\nstruct serial_rs485 {\n\t__u32 flags;\n\t__u32 delay_rts_before_send;\n\t__u32 delay_rts_after_send;\n\t__u32 padding[5];\n};\n\nstruct serial_iso7816 {\n\t__u32 flags;\n\t__u32 tg;\n\t__u32 sc_fi;\n\t__u32 sc_di;\n\t__u32 clk;\n\t__u32 reserved[5];\n};\n\nstruct uart_port;\n\nstruct uart_ops {\n\tunsigned int (*tx_empty)(struct uart_port *);\n\tvoid (*set_mctrl)(struct uart_port *, unsigned int);\n\tunsigned int (*get_mctrl)(struct uart_port *);\n\tvoid (*stop_tx)(struct uart_port *);\n\tvoid (*start_tx)(struct uart_port *);\n\tvoid (*throttle)(struct uart_port *);\n\tvoid (*unthrottle)(struct uart_port *);\n\tvoid (*send_xchar)(struct uart_port *, char);\n\tvoid (*stop_rx)(struct uart_port *);\n\tvoid (*enable_ms)(struct uart_port *);\n\tvoid (*break_ctl)(struct uart_port *, int);\n\tint (*startup)(struct uart_port *);\n\tvoid (*shutdown)(struct uart_port *);\n\tvoid (*flush_buffer)(struct uart_port *);\n\tvoid (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);\n\tvoid (*set_ldisc)(struct uart_port *, struct ktermios *);\n\tvoid (*pm)(struct uart_port *, unsigned int, unsigned int);\n\tconst char * (*type)(struct uart_port *);\n\tvoid (*release_port)(struct uart_port *);\n\tint (*request_port)(struct uart_port *);\n\tvoid (*config_port)(struct uart_port *, int);\n\tint (*verify_port)(struct uart_port *, struct serial_struct *);\n\tint (*ioctl)(struct uart_port *, unsigned int, long unsigned int);\n\tint (*poll_init)(struct uart_port *);\n\tvoid (*poll_put_char)(struct uart_port *, unsigned char);\n\tint (*poll_get_char)(struct uart_port *);\n};\n\nstruct uart_icount {\n\t__u32 cts;\n\t__u32 dsr;\n\t__u32 rng;\n\t__u32 dcd;\n\t__u32 rx;\n\t__u32 tx;\n\t__u32 frame;\n\t__u32 overrun;\n\t__u32 parity;\n\t__u32 brk;\n\t__u32 buf_overrun;\n};\n\ntypedef unsigned int upf_t;\n\ntypedef unsigned int upstat_t;\n\nstruct uart_state;\n\nstruct uart_port {\n\tspinlock_t lock;\n\tlong unsigned int iobase;\n\tunsigned char *membase;\n\tunsigned int (*serial_in)(struct uart_port *, int);\n\tvoid (*serial_out)(struct uart_port *, int, int);\n\tvoid (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);\n\tvoid (*set_ldisc)(struct uart_port *, struct ktermios *);\n\tunsigned int (*get_mctrl)(struct uart_port *);\n\tvoid (*set_mctrl)(struct uart_port *, unsigned int);\n\tunsigned int (*get_divisor)(struct uart_port *, unsigned int, unsigned int *);\n\tvoid (*set_divisor)(struct uart_port *, unsigned int, unsigned int, unsigned int);\n\tint (*startup)(struct uart_port *);\n\tvoid (*shutdown)(struct uart_port *);\n\tvoid (*throttle)(struct uart_port *);\n\tvoid (*unthrottle)(struct uart_port *);\n\tint (*handle_irq)(struct uart_port *);\n\tvoid (*pm)(struct uart_port *, unsigned int, unsigned int);\n\tvoid (*handle_break)(struct uart_port *);\n\tint (*rs485_config)(struct uart_port *, struct serial_rs485 *);\n\tint (*iso7816_config)(struct uart_port *, struct serial_iso7816 *);\n\tunsigned int irq;\n\tlong unsigned int irqflags;\n\tunsigned int uartclk;\n\tunsigned int fifosize;\n\tunsigned char x_char;\n\tunsigned char regshift;\n\tunsigned char iotype;\n\tunsigned char quirks;\n\tunsigned int read_status_mask;\n\tunsigned int ignore_status_mask;\n\tstruct uart_state *state;\n\tstruct uart_icount icount;\n\tstruct console *cons;\n\tupf_t flags;\n\tupstat_t status;\n\tint hw_stopped;\n\tunsigned int mctrl;\n\tunsigned int timeout;\n\tunsigned int type;\n\tconst struct uart_ops *ops;\n\tunsigned int custom_divisor;\n\tunsigned int line;\n\tunsigned int minor;\n\tresource_size_t mapbase;\n\tresource_size_t mapsize;\n\tstruct device *dev;\n\tlong unsigned int sysrq;\n\tunsigned int sysrq_ch;\n\tunsigned char has_sysrq;\n\tunsigned char sysrq_seq;\n\tunsigned char hub6;\n\tunsigned char suspended;\n\tunsigned char console_reinit;\n\tconst char *name;\n\tstruct attribute_group *attr_group;\n\tconst struct attribute_group **tty_groups;\n\tstruct serial_rs485 rs485;\n\tstruct gpio_desc___2 *rs485_term_gpio;\n\tstruct serial_iso7816 iso7816;\n\tvoid *private_data;\n};\n\nenum uart_pm_state {\n\tUART_PM_STATE_ON = 0,\n\tUART_PM_STATE_OFF = 3,\n\tUART_PM_STATE_UNDEFINED = 4,\n};\n\nstruct uart_state {\n\tstruct tty_port port;\n\tenum uart_pm_state pm_state;\n\tstruct circ_buf xmit;\n\tatomic_t refcount;\n\twait_queue_head_t remove_wait;\n\tstruct uart_port *uart_port;\n};\n\nstruct earlycon_device {\n\tstruct console *con;\n\tstruct uart_port port;\n\tchar options[16];\n\tunsigned int baud;\n};\n\nstruct earlycon_id {\n\tchar name[15];\n\tchar name_term;\n\tchar compatible[128];\n\tint (*setup)(struct earlycon_device *, const char *);\n};\n\ntypedef uint32_t XENCONS_RING_IDX;\n\nstruct xencons_interface {\n\tchar in[1024];\n\tchar out[2048];\n\tXENCONS_RING_IDX in_cons;\n\tXENCONS_RING_IDX in_prod;\n\tXENCONS_RING_IDX out_cons;\n\tXENCONS_RING_IDX out_prod;\n};\n\nstruct xencons_info {\n\tstruct list_head list;\n\tstruct xenbus_device *xbdev;\n\tstruct xencons_interface *intf;\n\tunsigned int evtchn;\n\tstruct hvc_struct *hvc;\n\tint irq;\n\tint vtermno;\n\tgrant_ref_t gntref;\n};\n\nstruct uart_driver {\n\tstruct module *owner;\n\tconst char *driver_name;\n\tconst char *dev_name;\n\tint major;\n\tint minor;\n\tint nr;\n\tstruct console *cons;\n\tstruct uart_state *state;\n\tstruct tty_driver *tty_driver;\n};\n\nstruct uart_match {\n\tstruct uart_port *port;\n\tstruct uart_driver *driver;\n};\n\nenum hwparam_type {\n\thwparam_ioport = 0,\n\thwparam_iomem = 1,\n\thwparam_ioport_or_iomem = 2,\n\thwparam_irq = 3,\n\thwparam_dma = 4,\n\thwparam_dma_addr = 5,\n\thwparam_other = 6,\n};\n\nstruct plat_serial8250_port {\n\tlong unsigned int iobase;\n\tvoid *membase;\n\tresource_size_t mapbase;\n\tunsigned int irq;\n\tlong unsigned int irqflags;\n\tunsigned int uartclk;\n\tvoid *private_data;\n\tunsigned char regshift;\n\tunsigned char iotype;\n\tunsigned char hub6;\n\tunsigned char has_sysrq;\n\tupf_t flags;\n\tunsigned int type;\n\tunsigned int (*serial_in)(struct uart_port *, int);\n\tvoid (*serial_out)(struct uart_port *, int, int);\n\tvoid (*set_termios)(struct uart_port *, struct ktermios *, struct ktermios *);\n\tvoid (*set_ldisc)(struct uart_port *, struct ktermios *);\n\tunsigned int (*get_mctrl)(struct uart_port *);\n\tint (*handle_irq)(struct uart_port *);\n\tvoid (*pm)(struct uart_port *, unsigned int, unsigned int);\n\tvoid (*handle_break)(struct uart_port *);\n};\n\nenum {\n\tPLAT8250_DEV_LEGACY = 4294967295,\n\tPLAT8250_DEV_PLATFORM = 0,\n\tPLAT8250_DEV_PLATFORM1 = 1,\n\tPLAT8250_DEV_PLATFORM2 = 2,\n\tPLAT8250_DEV_FOURPORT = 3,\n\tPLAT8250_DEV_ACCENT = 4,\n\tPLAT8250_DEV_BOCA = 5,\n\tPLAT8250_DEV_EXAR_ST16C554 = 6,\n\tPLAT8250_DEV_HUB6 = 7,\n\tPLAT8250_DEV_AU1X00 = 8,\n\tPLAT8250_DEV_SM501 = 9,\n};\n\nstruct uart_8250_port;\n\nstruct uart_8250_ops {\n\tint (*setup_irq)(struct uart_8250_port *);\n\tvoid (*release_irq)(struct uart_8250_port *);\n};\n\nstruct mctrl_gpios;\n\nstruct uart_8250_dma;\n\nstruct uart_8250_em485;\n\nstruct uart_8250_port {\n\tstruct uart_port port;\n\tstruct timer_list timer;\n\tstruct list_head list;\n\tu32 capabilities;\n\tshort unsigned int bugs;\n\tbool fifo_bug;\n\tunsigned int tx_loadsz;\n\tunsigned char acr;\n\tunsigned char fcr;\n\tunsigned char ier;\n\tunsigned char lcr;\n\tunsigned char mcr;\n\tunsigned char mcr_mask;\n\tunsigned char mcr_force;\n\tunsigned char cur_iotype;\n\tunsigned int rpm_tx_active;\n\tunsigned char canary;\n\tunsigned char probe;\n\tstruct mctrl_gpios *gpios;\n\tunsigned char lsr_saved_flags;\n\tunsigned char msr_saved_flags;\n\tstruct uart_8250_dma *dma;\n\tconst struct uart_8250_ops *ops;\n\tint (*dl_read)(struct uart_8250_port *);\n\tvoid (*dl_write)(struct uart_8250_port *, int);\n\tstruct uart_8250_em485 *em485;\n\tvoid (*rs485_start_tx)(struct uart_8250_port *);\n\tvoid (*rs485_stop_tx)(struct uart_8250_port *);\n\tstruct delayed_work overrun_backoff;\n\tu32 overrun_backoff_time_ms;\n};\n\nstruct uart_8250_em485 {\n\tstruct hrtimer start_tx_timer;\n\tstruct hrtimer stop_tx_timer;\n\tstruct hrtimer *active_timer;\n\tstruct uart_8250_port *port;\n\tunsigned int tx_stopped: 1;\n};\n\nstruct uart_8250_dma {\n\tint (*tx_dma)(struct uart_8250_port *);\n\tint (*rx_dma)(struct uart_8250_port *);\n\tdma_filter_fn fn;\n\tvoid *rx_param;\n\tvoid *tx_param;\n\tstruct dma_slave_config rxconf;\n\tstruct dma_slave_config txconf;\n\tstruct dma_chan___2 *rxchan;\n\tstruct dma_chan___2 *txchan;\n\tphys_addr_t rx_dma_addr;\n\tphys_addr_t tx_dma_addr;\n\tdma_addr_t rx_addr;\n\tdma_addr_t tx_addr;\n\tdma_cookie_t rx_cookie;\n\tdma_cookie_t tx_cookie;\n\tvoid *rx_buf;\n\tsize_t rx_size;\n\tsize_t tx_size;\n\tunsigned char tx_running;\n\tunsigned char tx_err;\n\tunsigned char rx_running;\n};\n\nstruct old_serial_port {\n\tunsigned int uart;\n\tunsigned int baud_base;\n\tunsigned int port;\n\tunsigned int irq;\n\tupf_t flags;\n\tunsigned char io_type;\n\tunsigned char *iomem_base;\n\tshort unsigned int iomem_reg_shift;\n};\n\nstruct irq_info___2 {\n\tstruct hlist_node node;\n\tint irq;\n\tspinlock_t lock;\n\tstruct list_head *head;\n};\n\nstruct serial8250_config {\n\tconst char *name;\n\tshort unsigned int fifo_size;\n\tshort unsigned int tx_loadsz;\n\tunsigned char fcr;\n\tunsigned char rxtrig_bytes[4];\n\tunsigned int flags;\n};\n\nstruct dw8250_port_data {\n\tint line;\n\tstruct uart_8250_dma dma;\n\tu8 dlf_size;\n};\n\nstruct pciserial_board {\n\tunsigned int flags;\n\tunsigned int num_ports;\n\tunsigned int base_baud;\n\tunsigned int uart_offset;\n\tunsigned int reg_shift;\n\tunsigned int first_offset;\n};\n\nstruct serial_private;\n\nstruct pci_serial_quirk {\n\tu32 vendor;\n\tu32 device;\n\tu32 subvendor;\n\tu32 subdevice;\n\tint (*probe)(struct pci_dev *);\n\tint (*init)(struct pci_dev *);\n\tint (*setup)(struct serial_private *, const struct pciserial_board *, struct uart_8250_port *, int);\n\tvoid (*exit)(struct pci_dev *);\n};\n\nstruct serial_private {\n\tstruct pci_dev *dev;\n\tunsigned int nr;\n\tstruct pci_serial_quirk *quirk;\n\tconst struct pciserial_board *board;\n\tint line[0];\n};\n\nstruct f815xxa_data {\n\tspinlock_t lock;\n\tint idx;\n};\n\nstruct timedia_struct {\n\tint num;\n\tconst short unsigned int *ids;\n};\n\nstruct quatech_feature {\n\tu16 devid;\n\tbool amcc;\n};\n\nenum pci_board_num_t {\n\tpbn_default = 0,\n\tpbn_b0_1_115200 = 1,\n\tpbn_b0_2_115200 = 2,\n\tpbn_b0_4_115200 = 3,\n\tpbn_b0_5_115200 = 4,\n\tpbn_b0_8_115200 = 5,\n\tpbn_b0_1_921600 = 6,\n\tpbn_b0_2_921600 = 7,\n\tpbn_b0_4_921600 = 8,\n\tpbn_b0_2_1130000 = 9,\n\tpbn_b0_4_1152000 = 10,\n\tpbn_b0_4_1250000 = 11,\n\tpbn_b0_2_1843200 = 12,\n\tpbn_b0_4_1843200 = 13,\n\tpbn_b0_1_4000000 = 14,\n\tpbn_b0_bt_1_115200 = 15,\n\tpbn_b0_bt_2_115200 = 16,\n\tpbn_b0_bt_4_115200 = 17,\n\tpbn_b0_bt_8_115200 = 18,\n\tpbn_b0_bt_1_460800 = 19,\n\tpbn_b0_bt_2_460800 = 20,\n\tpbn_b0_bt_4_460800 = 21,\n\tpbn_b0_bt_1_921600 = 22,\n\tpbn_b0_bt_2_921600 = 23,\n\tpbn_b0_bt_4_921600 = 24,\n\tpbn_b0_bt_8_921600 = 25,\n\tpbn_b1_1_115200 = 26,\n\tpbn_b1_2_115200 = 27,\n\tpbn_b1_4_115200 = 28,\n\tpbn_b1_8_115200 = 29,\n\tpbn_b1_16_115200 = 30,\n\tpbn_b1_1_921600 = 31,\n\tpbn_b1_2_921600 = 32,\n\tpbn_b1_4_921600 = 33,\n\tpbn_b1_8_921600 = 34,\n\tpbn_b1_2_1250000 = 35,\n\tpbn_b1_bt_1_115200 = 36,\n\tpbn_b1_bt_2_115200 = 37,\n\tpbn_b1_bt_4_115200 = 38,\n\tpbn_b1_bt_2_921600 = 39,\n\tpbn_b1_1_1382400 = 40,\n\tpbn_b1_2_1382400 = 41,\n\tpbn_b1_4_1382400 = 42,\n\tpbn_b1_8_1382400 = 43,\n\tpbn_b2_1_115200 = 44,\n\tpbn_b2_2_115200 = 45,\n\tpbn_b2_4_115200 = 46,\n\tpbn_b2_8_115200 = 47,\n\tpbn_b2_1_460800 = 48,\n\tpbn_b2_4_460800 = 49,\n\tpbn_b2_8_460800 = 50,\n\tpbn_b2_16_460800 = 51,\n\tpbn_b2_1_921600 = 52,\n\tpbn_b2_4_921600 = 53,\n\tpbn_b2_8_921600 = 54,\n\tpbn_b2_8_1152000 = 55,\n\tpbn_b2_bt_1_115200 = 56,\n\tpbn_b2_bt_2_115200 = 57,\n\tpbn_b2_bt_4_115200 = 58,\n\tpbn_b2_bt_2_921600 = 59,\n\tpbn_b2_bt_4_921600 = 60,\n\tpbn_b3_2_115200 = 61,\n\tpbn_b3_4_115200 = 62,\n\tpbn_b3_8_115200 = 63,\n\tpbn_b4_bt_2_921600 = 64,\n\tpbn_b4_bt_4_921600 = 65,\n\tpbn_b4_bt_8_921600 = 66,\n\tpbn_panacom = 67,\n\tpbn_panacom2 = 68,\n\tpbn_panacom4 = 69,\n\tpbn_plx_romulus = 70,\n\tpbn_endrun_2_4000000 = 71,\n\tpbn_oxsemi = 72,\n\tpbn_oxsemi_1_4000000 = 73,\n\tpbn_oxsemi_2_4000000 = 74,\n\tpbn_oxsemi_4_4000000 = 75,\n\tpbn_oxsemi_8_4000000 = 76,\n\tpbn_intel_i960 = 77,\n\tpbn_sgi_ioc3 = 78,\n\tpbn_computone_4 = 79,\n\tpbn_computone_6 = 80,\n\tpbn_computone_8 = 81,\n\tpbn_sbsxrsio = 82,\n\tpbn_pasemi_1682M = 83,\n\tpbn_ni8430_2 = 84,\n\tpbn_ni8430_4 = 85,\n\tpbn_ni8430_8 = 86,\n\tpbn_ni8430_16 = 87,\n\tpbn_ADDIDATA_PCIe_1_3906250 = 88,\n\tpbn_ADDIDATA_PCIe_2_3906250 = 89,\n\tpbn_ADDIDATA_PCIe_4_3906250 = 90,\n\tpbn_ADDIDATA_PCIe_8_3906250 = 91,\n\tpbn_ce4100_1_115200 = 92,\n\tpbn_omegapci = 93,\n\tpbn_NETMOS9900_2s_115200 = 94,\n\tpbn_brcm_trumanage = 95,\n\tpbn_fintek_4 = 96,\n\tpbn_fintek_8 = 97,\n\tpbn_fintek_12 = 98,\n\tpbn_fintek_F81504A = 99,\n\tpbn_fintek_F81508A = 100,\n\tpbn_fintek_F81512A = 101,\n\tpbn_wch382_2 = 102,\n\tpbn_wch384_4 = 103,\n\tpbn_wch384_8 = 104,\n\tpbn_pericom_PI7C9X7951 = 105,\n\tpbn_pericom_PI7C9X7952 = 106,\n\tpbn_pericom_PI7C9X7954 = 107,\n\tpbn_pericom_PI7C9X7958 = 108,\n\tpbn_sunix_pci_1s = 109,\n\tpbn_sunix_pci_2s = 110,\n\tpbn_sunix_pci_4s = 111,\n\tpbn_sunix_pci_8s = 112,\n\tpbn_sunix_pci_16s = 113,\n\tpbn_moxa8250_2p = 114,\n\tpbn_moxa8250_4p = 115,\n\tpbn_moxa8250_8p = 116,\n};\n\nstruct reset_control___2;\n\nstruct dw8250_data {\n\tstruct dw8250_port_data data;\n\tu8 usr_reg;\n\tint msr_mask_on;\n\tint msr_mask_off;\n\tstruct clk *clk;\n\tstruct clk *pclk;\n\tstruct notifier_block clk_notifier;\n\tstruct work_struct clk_work;\n\tstruct reset_control___2 *rst;\n\tunsigned int skip_autocfg: 1;\n\tunsigned int uart_16550_compatible: 1;\n};\n\nstruct hsu_dma_slave {\n\tstruct device *dma_dev;\n\tint chan_id;\n};\n\nstruct mid8250;\n\nstruct mid8250_board {\n\tunsigned int flags;\n\tlong unsigned int freq;\n\tunsigned int base_baud;\n\tint (*setup)(struct mid8250 *, struct uart_port *);\n\tvoid (*exit)(struct mid8250 *);\n};\n\nstruct mid8250 {\n\tint line;\n\tint dma_index;\n\tstruct pci_dev *dma_dev;\n\tstruct uart_8250_dma dma;\n\tstruct mid8250_board *board;\n\tstruct hsu_dma_chip dma_chip;\n};\n\nstruct gpio_array___2;\n\nenum mctrl_gpio_idx {\n\tUART_GPIO_CTS = 0,\n\tUART_GPIO_DSR = 1,\n\tUART_GPIO_DCD = 2,\n\tUART_GPIO_RNG = 3,\n\tUART_GPIO_RI = 3,\n\tUART_GPIO_RTS = 4,\n\tUART_GPIO_DTR = 5,\n\tUART_GPIO_MAX = 6,\n};\n\nstruct mctrl_gpios___2 {\n\tstruct uart_port *port;\n\tstruct gpio_desc___2 *gpio[6];\n\tint irq[6];\n\tunsigned int mctrl_prev;\n\tbool mctrl_on;\n};\n\nstruct serdev_device;\n\nstruct serdev_device_ops {\n\tint (*receive_buf)(struct serdev_device *, const unsigned char *, size_t);\n\tvoid (*write_wakeup)(struct serdev_device *);\n};\n\nstruct serdev_controller;\n\nstruct serdev_device {\n\tstruct device dev;\n\tint nr;\n\tstruct serdev_controller *ctrl;\n\tconst struct serdev_device_ops *ops;\n\tstruct completion write_comp;\n\tstruct mutex write_lock;\n};\n\nstruct serdev_controller_ops;\n\nstruct serdev_controller {\n\tstruct device dev;\n\tunsigned int nr;\n\tstruct serdev_device *serdev;\n\tconst struct serdev_controller_ops *ops;\n};\n\nstruct serdev_device_driver {\n\tstruct device_driver driver;\n\tint (*probe)(struct serdev_device *);\n\tvoid (*remove)(struct serdev_device *);\n};\n\nenum serdev_parity {\n\tSERDEV_PARITY_NONE = 0,\n\tSERDEV_PARITY_EVEN = 1,\n\tSERDEV_PARITY_ODD = 2,\n};\n\nstruct serdev_controller_ops {\n\tint (*write_buf)(struct serdev_controller *, const unsigned char *, size_t);\n\tvoid (*write_flush)(struct serdev_controller *);\n\tint (*write_room)(struct serdev_controller *);\n\tint (*open)(struct serdev_controller *);\n\tvoid (*close)(struct serdev_controller *);\n\tvoid (*set_flow_control)(struct serdev_controller *, bool);\n\tint (*set_parity)(struct serdev_controller *, enum serdev_parity);\n\tunsigned int (*set_baudrate)(struct serdev_controller *, unsigned int);\n\tvoid (*wait_until_sent)(struct serdev_controller *, long int);\n\tint (*get_tiocm)(struct serdev_controller *);\n\tint (*set_tiocm)(struct serdev_controller *, unsigned int, unsigned int);\n};\n\nstruct acpi_serdev_lookup {\n\tacpi_handle device_handle;\n\tacpi_handle controller_handle;\n\tint n;\n\tint index;\n};\n\nstruct serport {\n\tstruct tty_port *port;\n\tstruct tty_struct *tty;\n\tstruct tty_driver *tty_drv;\n\tint tty_idx;\n\tlong unsigned int flags;\n};\n\nstruct memdev {\n\tconst char *name;\n\tumode_t mode;\n\tconst struct file_operations *fops;\n\tfmode_t fmode;\n};\n\nstruct timer_rand_state {\n\tcycles_t last_time;\n\tlong int last_delta;\n\tlong int last_delta2;\n};\n\nstruct trace_event_raw_add_device_randomness {\n\tstruct trace_entry ent;\n\tint bytes;\n\tlong unsigned int IP;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_random__mix_pool_bytes {\n\tstruct trace_entry ent;\n\tconst char *pool_name;\n\tint bytes;\n\tlong unsigned int IP;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_credit_entropy_bits {\n\tstruct trace_entry ent;\n\tconst char *pool_name;\n\tint bits;\n\tint entropy_count;\n\tlong unsigned int IP;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_push_to_pool {\n\tstruct trace_entry ent;\n\tconst char *pool_name;\n\tint pool_bits;\n\tint input_bits;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_debit_entropy {\n\tstruct trace_entry ent;\n\tconst char *pool_name;\n\tint debit_bits;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_add_input_randomness {\n\tstruct trace_entry ent;\n\tint input_bits;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_add_disk_randomness {\n\tstruct trace_entry ent;\n\tdev_t dev;\n\tint input_bits;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xfer_secondary_pool {\n\tstruct trace_entry ent;\n\tconst char *pool_name;\n\tint xfer_bits;\n\tint request_bits;\n\tint pool_entropy;\n\tint input_entropy;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_random__get_random_bytes {\n\tstruct trace_entry ent;\n\tint nbytes;\n\tlong unsigned int IP;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_random__extract_entropy {\n\tstruct trace_entry ent;\n\tconst char *pool_name;\n\tint nbytes;\n\tint entropy_count;\n\tlong unsigned int IP;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_random_read {\n\tstruct trace_entry ent;\n\tint got_bits;\n\tint need_bits;\n\tint pool_left;\n\tint input_left;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_urandom_read {\n\tstruct trace_entry ent;\n\tint got_bits;\n\tint pool_left;\n\tint input_left;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_prandom_u32 {\n\tstruct trace_entry ent;\n\tunsigned int ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_add_device_randomness {};\n\nstruct trace_event_data_offsets_random__mix_pool_bytes {};\n\nstruct trace_event_data_offsets_credit_entropy_bits {};\n\nstruct trace_event_data_offsets_push_to_pool {};\n\nstruct trace_event_data_offsets_debit_entropy {};\n\nstruct trace_event_data_offsets_add_input_randomness {};\n\nstruct trace_event_data_offsets_add_disk_randomness {};\n\nstruct trace_event_data_offsets_xfer_secondary_pool {};\n\nstruct trace_event_data_offsets_random__get_random_bytes {};\n\nstruct trace_event_data_offsets_random__extract_entropy {};\n\nstruct trace_event_data_offsets_random_read {};\n\nstruct trace_event_data_offsets_urandom_read {};\n\nstruct trace_event_data_offsets_prandom_u32 {};\n\ntypedef void (*btf_trace_add_device_randomness)(void *, int, long unsigned int);\n\ntypedef void (*btf_trace_mix_pool_bytes)(void *, const char *, int, long unsigned int);\n\ntypedef void (*btf_trace_mix_pool_bytes_nolock)(void *, const char *, int, long unsigned int);\n\ntypedef void (*btf_trace_credit_entropy_bits)(void *, const char *, int, int, long unsigned int);\n\ntypedef void (*btf_trace_push_to_pool)(void *, const char *, int, int);\n\ntypedef void (*btf_trace_debit_entropy)(void *, const char *, int);\n\ntypedef void (*btf_trace_add_input_randomness)(void *, int);\n\ntypedef void (*btf_trace_add_disk_randomness)(void *, dev_t, int);\n\ntypedef void (*btf_trace_xfer_secondary_pool)(void *, const char *, int, int, int, int);\n\ntypedef void (*btf_trace_get_random_bytes)(void *, int, long unsigned int);\n\ntypedef void (*btf_trace_get_random_bytes_arch)(void *, int, long unsigned int);\n\ntypedef void (*btf_trace_extract_entropy)(void *, const char *, int, int, long unsigned int);\n\ntypedef void (*btf_trace_extract_entropy_user)(void *, const char *, int, int, long unsigned int);\n\ntypedef void (*btf_trace_random_read)(void *, int, int, int, int);\n\ntypedef void (*btf_trace_urandom_read)(void *, int, int, int);\n\ntypedef void (*btf_trace_prandom_u32)(void *, unsigned int);\n\nstruct poolinfo {\n\tint poolbitshift;\n\tint poolwords;\n\tint poolbytes;\n\tint poolfracbits;\n\tint tap1;\n\tint tap2;\n\tint tap3;\n\tint tap4;\n\tint tap5;\n};\n\nstruct crng_state {\n\t__u32 state[16];\n\tlong unsigned int init_time;\n\tspinlock_t lock;\n};\n\nstruct entropy_store {\n\tconst struct poolinfo *poolinfo;\n\t__u32 *pool;\n\tconst char *name;\n\tspinlock_t lock;\n\tshort unsigned int add_ptr;\n\tshort unsigned int input_rotate;\n\tint entropy_count;\n\tunsigned int initialized: 1;\n\tunsigned int last_data_init: 1;\n\t__u8 last_data[10];\n};\n\nstruct fast_pool {\n\t__u32 pool[4];\n\tlong unsigned int last;\n\tshort unsigned int reg_idx;\n\tunsigned char count;\n};\n\nstruct batched_entropy {\n\tunion {\n\t\tu64 entropy_u64[8];\n\t\tu32 entropy_u32[16];\n\t};\n\tunsigned int position;\n\tspinlock_t batch_lock;\n};\n\nstruct raw_config_request {\n\tint raw_minor;\n\t__u64 block_major;\n\t__u64 block_minor;\n};\n\nstruct raw_device_data {\n\tdev_t binding;\n\tstruct block_device *bdev;\n\tint inuse;\n};\n\nstruct raw32_config_request {\n\tcompat_int_t raw_minor;\n\tcompat_u64 block_major;\n\tcompat_u64 block_minor;\n} __attribute__((packed));\n\nstruct hpet_info {\n\tlong unsigned int hi_ireqfreq;\n\tlong unsigned int hi_flags;\n\tshort unsigned int hi_hpet;\n\tshort unsigned int hi_timer;\n};\n\nstruct hpet_timer {\n\tu64 hpet_config;\n\tunion {\n\t\tu64 _hpet_hc64;\n\t\tu32 _hpet_hc32;\n\t\tlong unsigned int _hpet_compare;\n\t} _u1;\n\tu64 hpet_fsb[2];\n};\n\nstruct hpet {\n\tu64 hpet_cap;\n\tu64 res0;\n\tu64 hpet_config;\n\tu64 res1;\n\tu64 hpet_isr;\n\tu64 res2[25];\n\tunion {\n\t\tu64 _hpet_mc64;\n\t\tu32 _hpet_mc32;\n\t\tlong unsigned int _hpet_mc;\n\t} _u0;\n\tu64 res3;\n\tstruct hpet_timer hpet_timers[1];\n};\n\nstruct hpets;\n\nstruct hpet_dev {\n\tstruct hpets *hd_hpets;\n\tstruct hpet *hd_hpet;\n\tstruct hpet_timer *hd_timer;\n\tlong unsigned int hd_ireqfreq;\n\tlong unsigned int hd_irqdata;\n\twait_queue_head_t hd_waitqueue;\n\tstruct fasync_struct *hd_async_queue;\n\tunsigned int hd_flags;\n\tunsigned int hd_irq;\n\tunsigned int hd_hdwirq;\n\tchar hd_name[7];\n};\n\nstruct hpets {\n\tstruct hpets *hp_next;\n\tstruct hpet *hp_hpet;\n\tlong unsigned int hp_hpet_phys;\n\tstruct clocksource *hp_clocksource;\n\tlong long unsigned int hp_tick_freq;\n\tlong unsigned int hp_delta;\n\tunsigned int hp_ntimer;\n\tunsigned int hp_which;\n\tstruct hpet_dev hp_dev[0];\n};\n\nstruct compat_hpet_info {\n\tcompat_ulong_t hi_ireqfreq;\n\tcompat_ulong_t hi_flags;\n\tshort unsigned int hi_hpet;\n\tshort unsigned int hi_timer;\n};\n\nstruct nvram_ops {\n\tssize_t (*get_size)();\n\tunsigned char (*read_byte)(int);\n\tvoid (*write_byte)(unsigned char, int);\n\tssize_t (*read)(char *, size_t, loff_t *);\n\tssize_t (*write)(char *, size_t, loff_t *);\n\tlong int (*initialize)();\n\tlong int (*set_checksum)();\n};\n\nstruct virtrng_info {\n\tstruct hwrng hwrng;\n\tstruct virtqueue *vq;\n\tstruct completion have_data;\n\tchar name[25];\n\tunsigned int data_avail;\n\tint index;\n\tbool busy;\n\tbool hwrng_register_done;\n\tbool hwrng_removed;\n};\n\nenum chipset_type {\n\tNOT_SUPPORTED = 0,\n\tSUPPORTED = 1,\n};\n\nstruct agp_version {\n\tu16 major;\n\tu16 minor;\n};\n\nstruct agp_bridge_data;\n\nstruct agp_memory {\n\tstruct agp_memory *next;\n\tstruct agp_memory *prev;\n\tstruct agp_bridge_data *bridge;\n\tstruct page **pages;\n\tsize_t page_count;\n\tint key;\n\tint num_scratch_pages;\n\toff_t pg_start;\n\tu32 type;\n\tu32 physical;\n\tbool is_bound;\n\tbool is_flushed;\n\tstruct list_head mapped_list;\n\tstruct scatterlist *sg_list;\n\tint num_sg;\n};\n\nstruct agp_bridge_driver;\n\nstruct agp_bridge_data {\n\tconst struct agp_version *version;\n\tconst struct agp_bridge_driver *driver;\n\tconst struct vm_operations_struct *vm_ops;\n\tvoid *previous_size;\n\tvoid *current_size;\n\tvoid *dev_private_data;\n\tstruct pci_dev *dev;\n\tu32 *gatt_table;\n\tu32 *gatt_table_real;\n\tlong unsigned int scratch_page;\n\tstruct page *scratch_page_page;\n\tdma_addr_t scratch_page_dma;\n\tlong unsigned int gart_bus_addr;\n\tlong unsigned int gatt_bus_addr;\n\tu32 mode;\n\tenum chipset_type type;\n\tlong unsigned int *key_list;\n\tatomic_t current_memory_agp;\n\tatomic_t agp_in_use;\n\tint max_memory_agp;\n\tint aperture_size_idx;\n\tint capndx;\n\tint flags;\n\tchar major_version;\n\tchar minor_version;\n\tstruct list_head list;\n\tu32 apbase_config;\n\tstruct list_head mapped_list;\n\tspinlock_t mapped_lock;\n};\n\nenum aper_size_type {\n\tU8_APER_SIZE = 0,\n\tU16_APER_SIZE = 1,\n\tU32_APER_SIZE = 2,\n\tLVL2_APER_SIZE = 3,\n\tFIXED_APER_SIZE = 4,\n};\n\nstruct gatt_mask {\n\tlong unsigned int mask;\n\tu32 type;\n};\n\nstruct agp_bridge_driver {\n\tstruct module *owner;\n\tconst void *aperture_sizes;\n\tint num_aperture_sizes;\n\tenum aper_size_type size_type;\n\tbool cant_use_aperture;\n\tbool needs_scratch_page;\n\tconst struct gatt_mask *masks;\n\tint (*fetch_size)();\n\tint (*configure)();\n\tvoid (*agp_enable)(struct agp_bridge_data *, u32);\n\tvoid (*cleanup)();\n\tvoid (*tlb_flush)(struct agp_memory *);\n\tlong unsigned int (*mask_memory)(struct agp_bridge_data *, dma_addr_t, int);\n\tvoid (*cache_flush)();\n\tint (*create_gatt_table)(struct agp_bridge_data *);\n\tint (*free_gatt_table)(struct agp_bridge_data *);\n\tint (*insert_memory)(struct agp_memory *, off_t, int);\n\tint (*remove_memory)(struct agp_memory *, off_t, int);\n\tstruct agp_memory * (*alloc_by_type)(size_t, int);\n\tvoid (*free_by_type)(struct agp_memory *);\n\tstruct page * (*agp_alloc_page)(struct agp_bridge_data *);\n\tint (*agp_alloc_pages)(struct agp_bridge_data *, struct agp_memory *, size_t);\n\tvoid (*agp_destroy_page)(struct page *, int);\n\tvoid (*agp_destroy_pages)(struct agp_memory *);\n\tint (*agp_type_to_mask_type)(struct agp_bridge_data *, int);\n};\n\nstruct agp_kern_info {\n\tstruct agp_version version;\n\tstruct pci_dev *device;\n\tenum chipset_type chipset;\n\tlong unsigned int mode;\n\tlong unsigned int aper_base;\n\tsize_t aper_size;\n\tint max_memory;\n\tint current_memory;\n\tbool cant_use_aperture;\n\tlong unsigned int page_mask;\n\tconst struct vm_operations_struct *vm_ops;\n};\n\nstruct aper_size_info_8 {\n\tint size;\n\tint num_entries;\n\tint page_order;\n\tu8 size_value;\n};\n\nstruct aper_size_info_16 {\n\tint size;\n\tint num_entries;\n\tint page_order;\n\tu16 size_value;\n};\n\nstruct aper_size_info_32 {\n\tint size;\n\tint num_entries;\n\tint page_order;\n\tu32 size_value;\n};\n\nstruct aper_size_info_lvl2 {\n\tint size;\n\tint num_entries;\n\tu32 size_value;\n};\n\nstruct aper_size_info_fixed {\n\tint size;\n\tint num_entries;\n\tint page_order;\n};\n\nstruct agp_3_5_dev {\n\tstruct list_head list;\n\tu8 capndx;\n\tu32 maxbw;\n\tstruct pci_dev *dev;\n};\n\nstruct isoch_data {\n\tu32 maxbw;\n\tu32 n;\n\tu32 y;\n\tu32 l;\n\tu32 rq;\n\tstruct agp_3_5_dev *dev;\n};\n\nstruct intel_agp_driver_description {\n\tunsigned int chip_id;\n\tchar *name;\n\tconst struct agp_bridge_driver *driver;\n};\n\nstruct intel_gtt_driver {\n\tunsigned int gen: 8;\n\tunsigned int is_g33: 1;\n\tunsigned int is_pineview: 1;\n\tunsigned int is_ironlake: 1;\n\tunsigned int has_pgtbl_enable: 1;\n\tunsigned int dma_mask_size: 8;\n\tint (*setup)();\n\tvoid (*cleanup)();\n\tvoid (*write_entry)(dma_addr_t, unsigned int, unsigned int);\n\tbool (*check_flags)(unsigned int);\n\tvoid (*chipset_flush)();\n};\n\nstruct _intel_private {\n\tconst struct intel_gtt_driver *driver;\n\tstruct pci_dev *pcidev;\n\tstruct pci_dev *bridge_dev;\n\tu8 *registers;\n\tphys_addr_t gtt_phys_addr;\n\tu32 PGETBL_save;\n\tu32 *gtt;\n\tbool clear_fake_agp;\n\tint num_dcache_entries;\n\tvoid *i9xx_flush_page;\n\tchar *i81x_gtt_table;\n\tstruct resource ifp_resource;\n\tint resource_valid;\n\tstruct page *scratch_page;\n\tphys_addr_t scratch_page_dma;\n\tint refcount;\n\tunsigned int needs_dmar: 1;\n\tphys_addr_t gma_bus_addr;\n\tresource_size_t stolen_size;\n\tunsigned int gtt_total_entries;\n\tunsigned int gtt_mappable_entries;\n};\n\nstruct intel_gtt_driver_description {\n\tunsigned int gmch_chip_id;\n\tchar *name;\n\tconst struct intel_gtt_driver *gtt_driver;\n};\n\nstruct agp_device_ids {\n\tshort unsigned int device_id;\n\tenum chipset_type chipset;\n\tconst char *chipset_name;\n\tint (*chipset_setup)(struct pci_dev *);\n};\n\nenum tpm2_startup_types {\n\tTPM2_SU_CLEAR = 0,\n\tTPM2_SU_STATE = 1,\n};\n\nenum tpm_chip_flags {\n\tTPM_CHIP_FLAG_TPM2 = 2,\n\tTPM_CHIP_FLAG_IRQ = 4,\n\tTPM_CHIP_FLAG_VIRTUAL = 8,\n\tTPM_CHIP_FLAG_HAVE_TIMEOUTS = 16,\n\tTPM_CHIP_FLAG_ALWAYS_POWERED = 32,\n\tTPM_CHIP_FLAG_FIRMWARE_POWER_MANAGED = 64,\n};\n\nenum tpm2_structures {\n\tTPM2_ST_NO_SESSIONS = 32769,\n\tTPM2_ST_SESSIONS = 32770,\n};\n\nenum tpm2_return_codes {\n\tTPM2_RC_SUCCESS = 0,\n\tTPM2_RC_HASH = 131,\n\tTPM2_RC_HANDLE = 139,\n\tTPM2_RC_INITIALIZE = 256,\n\tTPM2_RC_FAILURE = 257,\n\tTPM2_RC_DISABLED = 288,\n\tTPM2_RC_COMMAND_CODE = 323,\n\tTPM2_RC_TESTING = 2314,\n\tTPM2_RC_REFERENCE_H0 = 2320,\n\tTPM2_RC_RETRY = 2338,\n};\n\nstruct tpm_header {\n\t__be16 tag;\n\t__be32 length;\n\tunion {\n\t\t__be32 ordinal;\n\t\t__be32 return_code;\n\t};\n} __attribute__((packed));\n\nstruct file_priv {\n\tstruct tpm_chip *chip;\n\tstruct tpm_space *space;\n\tstruct mutex buffer_mutex;\n\tstruct timer_list user_read_timer;\n\tstruct work_struct timeout_work;\n\tstruct work_struct async_work;\n\twait_queue_head_t async_wait;\n\tssize_t response_length;\n\tbool response_read;\n\tbool command_enqueued;\n\tu8 data_buffer[4096];\n};\n\nenum TPM_OPS_FLAGS {\n\tTPM_OPS_AUTO_STARTUP = 1,\n};\n\nenum tpm2_timeouts {\n\tTPM2_TIMEOUT_A = 750,\n\tTPM2_TIMEOUT_B = 2000,\n\tTPM2_TIMEOUT_C = 200,\n\tTPM2_TIMEOUT_D = 30,\n\tTPM2_DURATION_SHORT = 20,\n\tTPM2_DURATION_MEDIUM = 750,\n\tTPM2_DURATION_LONG = 2000,\n\tTPM2_DURATION_LONG_LONG = 300000,\n\tTPM2_DURATION_DEFAULT = 120000,\n};\n\nenum tpm2_command_codes {\n\tTPM2_CC_FIRST = 287,\n\tTPM2_CC_HIERARCHY_CONTROL = 289,\n\tTPM2_CC_HIERARCHY_CHANGE_AUTH = 297,\n\tTPM2_CC_CREATE_PRIMARY = 305,\n\tTPM2_CC_SEQUENCE_COMPLETE = 318,\n\tTPM2_CC_SELF_TEST = 323,\n\tTPM2_CC_STARTUP = 324,\n\tTPM2_CC_SHUTDOWN = 325,\n\tTPM2_CC_NV_READ = 334,\n\tTPM2_CC_CREATE = 339,\n\tTPM2_CC_LOAD = 343,\n\tTPM2_CC_SEQUENCE_UPDATE = 348,\n\tTPM2_CC_UNSEAL = 350,\n\tTPM2_CC_CONTEXT_LOAD = 353,\n\tTPM2_CC_CONTEXT_SAVE = 354,\n\tTPM2_CC_FLUSH_CONTEXT = 357,\n\tTPM2_CC_VERIFY_SIGNATURE = 375,\n\tTPM2_CC_GET_CAPABILITY = 378,\n\tTPM2_CC_GET_RANDOM = 379,\n\tTPM2_CC_PCR_READ = 382,\n\tTPM2_CC_PCR_EXTEND = 386,\n\tTPM2_CC_EVENT_SEQUENCE_COMPLETE = 389,\n\tTPM2_CC_HASH_SEQUENCE_START = 390,\n\tTPM2_CC_CREATE_LOADED = 401,\n\tTPM2_CC_LAST = 403,\n};\n\nstruct tpm_buf {\n\tunsigned int flags;\n\tu8 *data;\n};\n\nenum tpm_timeout {\n\tTPM_TIMEOUT = 5,\n\tTPM_TIMEOUT_RETRY = 100,\n\tTPM_TIMEOUT_RANGE_US = 300,\n\tTPM_TIMEOUT_POLL = 1,\n\tTPM_TIMEOUT_USECS_MIN = 100,\n\tTPM_TIMEOUT_USECS_MAX = 500,\n};\n\nenum tpm_buf_flags {\n\tTPM_BUF_OVERFLOW = 1,\n};\n\nstruct stclear_flags_t {\n\t__be16 tag;\n\tu8 deactivated;\n\tu8 disableForceClear;\n\tu8 physicalPresence;\n\tu8 physicalPresenceLock;\n\tu8 bGlobalLock;\n} __attribute__((packed));\n\nstruct tpm1_version {\n\tu8 major;\n\tu8 minor;\n\tu8 rev_major;\n\tu8 rev_minor;\n};\n\nstruct tpm1_version2 {\n\t__be16 tag;\n\tstruct tpm1_version version;\n};\n\nstruct timeout_t {\n\t__be32 a;\n\t__be32 b;\n\t__be32 c;\n\t__be32 d;\n};\n\nstruct duration_t {\n\t__be32 tpm_short;\n\t__be32 tpm_medium;\n\t__be32 tpm_long;\n};\n\nstruct permanent_flags_t {\n\t__be16 tag;\n\tu8 disable;\n\tu8 ownership;\n\tu8 deactivated;\n\tu8 readPubek;\n\tu8 disableOwnerClear;\n\tu8 allowMaintenance;\n\tu8 physicalPresenceLifetimeLock;\n\tu8 physicalPresenceHWEnable;\n\tu8 physicalPresenceCMDEnable;\n\tu8 CEKPUsed;\n\tu8 TPMpost;\n\tu8 TPMpostLock;\n\tu8 FIPS;\n\tu8 operator;\n\tu8 enableRevokeEK;\n\tu8 nvLocked;\n\tu8 readSRKPub;\n\tu8 tpmEstablished;\n\tu8 maintenanceDone;\n\tu8 disableFullDALogicInfo;\n};\n\ntypedef union {\n\tstruct permanent_flags_t perm_flags;\n\tstruct stclear_flags_t stclear_flags;\n\t__u8 owned;\n\t__be32 num_pcrs;\n\tstruct tpm1_version version1;\n\tstruct tpm1_version2 version2;\n\t__be32 manufacturer_id;\n\tstruct timeout_t timeout;\n\tstruct duration_t duration;\n} cap_t;\n\nenum tpm_capabilities {\n\tTPM_CAP_FLAG = 4,\n\tTPM_CAP_PROP = 5,\n\tTPM_CAP_VERSION_1_1 = 6,\n\tTPM_CAP_VERSION_1_2 = 26,\n};\n\nenum tpm_sub_capabilities {\n\tTPM_CAP_PROP_PCR = 257,\n\tTPM_CAP_PROP_MANUFACTURER = 259,\n\tTPM_CAP_FLAG_PERM = 264,\n\tTPM_CAP_FLAG_VOL = 265,\n\tTPM_CAP_PROP_OWNER = 273,\n\tTPM_CAP_PROP_TIS_TIMEOUT = 277,\n\tTPM_CAP_PROP_TIS_DURATION = 288,\n};\n\nstruct tpm1_get_random_out {\n\t__be32 rng_data_len;\n\tu8 rng_data[128];\n};\n\nenum tpm2_const {\n\tTPM2_PLATFORM_PCR = 24,\n\tTPM2_PCR_SELECT_MIN = 3,\n};\n\nenum tpm2_permanent_handles {\n\tTPM2_RS_PW = 1073741833,\n};\n\nenum tpm2_capabilities {\n\tTPM2_CAP_HANDLES = 1,\n\tTPM2_CAP_COMMANDS = 2,\n\tTPM2_CAP_PCRS = 5,\n\tTPM2_CAP_TPM_PROPERTIES = 6,\n};\n\nenum tpm2_properties {\n\tTPM_PT_TOTAL_COMMANDS = 297,\n};\n\nenum tpm2_cc_attrs {\n\tTPM2_CC_ATTR_CHANDLES = 25,\n\tTPM2_CC_ATTR_RHANDLE = 28,\n};\n\nstruct tpm2_hash {\n\tunsigned int crypto_id;\n\tunsigned int tpm_id;\n};\n\nstruct tpm2_pcr_read_out {\n\t__be32 update_cnt;\n\t__be32 pcr_selects_cnt;\n\t__be16 hash_alg;\n\tu8 pcr_select_size;\n\tu8 pcr_select[3];\n\t__be32 digests_cnt;\n\t__be16 digest_size;\n\tu8 digest[0];\n} __attribute__((packed));\n\nstruct tpm2_null_auth_area {\n\t__be32 handle;\n\t__be16 nonce_size;\n\tu8 attributes;\n\t__be16 auth_size;\n} __attribute__((packed));\n\nstruct tpm2_get_random_out {\n\t__be16 size;\n\tu8 buffer[128];\n};\n\nstruct tpm2_get_cap_out {\n\tu8 more_data;\n\t__be32 subcap_id;\n\t__be32 property_cnt;\n\t__be32 property_id;\n\t__be32 value;\n} __attribute__((packed));\n\nstruct tpm2_pcr_selection {\n\t__be16 hash_alg;\n\tu8 size_of_select;\n\tu8 pcr_select[3];\n};\n\nstruct tpmrm_priv {\n\tstruct file_priv priv;\n\tstruct tpm_space space;\n};\n\nenum tpm2_handle_types {\n\tTPM2_HT_HMAC_SESSION = 33554432,\n\tTPM2_HT_POLICY_SESSION = 50331648,\n\tTPM2_HT_TRANSIENT = 2147483648,\n};\n\nstruct tpm2_context {\n\t__be64 sequence;\n\t__be32 saved_handle;\n\t__be32 hierarchy;\n\t__be16 blob_size;\n} __attribute__((packed));\n\nstruct tpm2_cap_handles {\n\tu8 more_data;\n\t__be32 capability;\n\t__be32 count;\n\t__be32 handles[0];\n} __attribute__((packed));\n\nstruct tpm_readpubek_out {\n\tu8 algorithm[4];\n\tu8 encscheme[2];\n\tu8 sigscheme[2];\n\t__be32 paramsize;\n\tu8 parameters[12];\n\t__be32 keysize;\n\tu8 modulus[256];\n\tu8 checksum[20];\n};\n\nstruct tcpa_event {\n\tu32 pcr_index;\n\tu32 event_type;\n\tu8 pcr_value[20];\n\tu32 event_size;\n\tu8 event_data[0];\n};\n\nenum tcpa_event_types {\n\tPREBOOT = 0,\n\tPOST_CODE = 1,\n\tUNUSED = 2,\n\tNO_ACTION = 3,\n\tSEPARATOR = 4,\n\tACTION = 5,\n\tEVENT_TAG = 6,\n\tSCRTM_CONTENTS = 7,\n\tSCRTM_VERSION = 8,\n\tCPU_MICROCODE = 9,\n\tPLATFORM_CONFIG_FLAGS = 10,\n\tTABLE_OF_DEVICES = 11,\n\tCOMPACT_HASH = 12,\n\tIPL = 13,\n\tIPL_PARTITION_DATA = 14,\n\tNONHOST_CODE = 15,\n\tNONHOST_CONFIG = 16,\n\tNONHOST_INFO = 17,\n};\n\nstruct tcpa_pc_event {\n\tu32 event_id;\n\tu32 event_size;\n\tu8 event_data[0];\n};\n\nenum tcpa_pc_event_ids {\n\tSMBIOS = 1,\n\tBIS_CERT = 2,\n\tPOST_BIOS_ROM = 3,\n\tESCD = 4,\n\tCMOS = 5,\n\tNVRAM = 6,\n\tOPTION_ROM_EXEC = 7,\n\tOPTION_ROM_CONFIG = 8,\n\tOPTION_ROM_MICROCODE = 10,\n\tS_CRTM_VERSION = 11,\n\tS_CRTM_CONTENTS = 12,\n\tPOST_CONTENTS = 13,\n\tHOST_TABLE_OF_DEVICES = 14,\n};\n\nstruct tcg_efi_specid_event_algs {\n\tu16 alg_id;\n\tu16 digest_size;\n};\n\nstruct tcg_efi_specid_event_head {\n\tu8 signature[16];\n\tu32 platform_class;\n\tu8 spec_version_minor;\n\tu8 spec_version_major;\n\tu8 spec_errata;\n\tu8 uintnsize;\n\tu32 num_algs;\n\tstruct tcg_efi_specid_event_algs digest_sizes[0];\n};\n\nstruct tcg_pcr_event {\n\tu32 pcr_idx;\n\tu32 event_type;\n\tu8 digest[20];\n\tu32 event_size;\n\tu8 event[0];\n};\n\nstruct tcg_event_field {\n\tu32 event_size;\n\tu8 event[0];\n};\n\nstruct tcg_pcr_event2_head {\n\tu32 pcr_idx;\n\tu32 event_type;\n\tu32 count;\n\tstruct tpm_digest digests[0];\n};\n\nstruct acpi_table_tpm2 {\n\tstruct acpi_table_header header;\n\tu16 platform_class;\n\tu16 reserved;\n\tu64 control_address;\n\tu32 start_method;\n} __attribute__((packed));\n\nstruct acpi_tpm2_phy {\n\tu8 start_method_specific[12];\n\tu32 log_area_minimum_length;\n\tu64 log_area_start_address;\n};\n\nenum bios_platform_class {\n\tBIOS_CLIENT = 0,\n\tBIOS_SERVER = 1,\n};\n\nstruct client_hdr {\n\tu32 log_max_len;\n\tu64 log_start_addr;\n} __attribute__((packed));\n\nstruct server_hdr {\n\tu16 reserved;\n\tu64 log_max_len;\n\tu64 log_start_addr;\n} __attribute__((packed));\n\nstruct acpi_tcpa {\n\tstruct acpi_table_header hdr;\n\tu16 platform_class;\n\tunion {\n\t\tstruct client_hdr client;\n\t\tstruct server_hdr server;\n\t};\n} __attribute__((packed));\n\nstruct linux_efi_tpm_eventlog {\n\tu32 size;\n\tu32 final_events_preboot_size;\n\tu8 version;\n\tu8 log[0];\n};\n\nstruct efi_tcg2_final_events_table {\n\tu64 version;\n\tu64 nr_events;\n\tu8 events[0];\n};\n\nenum tis_access {\n\tTPM_ACCESS_VALID = 128,\n\tTPM_ACCESS_ACTIVE_LOCALITY = 32,\n\tTPM_ACCESS_REQUEST_PENDING = 4,\n\tTPM_ACCESS_REQUEST_USE = 2,\n};\n\nenum tis_status {\n\tTPM_STS_VALID = 128,\n\tTPM_STS_COMMAND_READY = 64,\n\tTPM_STS_GO = 32,\n\tTPM_STS_DATA_AVAIL = 16,\n\tTPM_STS_DATA_EXPECT = 8,\n\tTPM_STS_READ_ZERO = 35,\n};\n\nenum tis_int_flags {\n\tTPM_GLOBAL_INT_ENABLE = 2147483648,\n\tTPM_INTF_BURST_COUNT_STATIC = 256,\n\tTPM_INTF_CMD_READY_INT = 128,\n\tTPM_INTF_INT_EDGE_FALLING = 64,\n\tTPM_INTF_INT_EDGE_RISING = 32,\n\tTPM_INTF_INT_LEVEL_LOW = 16,\n\tTPM_INTF_INT_LEVEL_HIGH = 8,\n\tTPM_INTF_LOCALITY_CHANGE_INT = 4,\n\tTPM_INTF_STS_VALID_INT = 2,\n\tTPM_INTF_DATA_AVAIL_INT = 1,\n};\n\nenum tis_defaults {\n\tTIS_MEM_LEN = 20480,\n\tTIS_SHORT_TIMEOUT = 750,\n\tTIS_LONG_TIMEOUT = 2000,\n};\n\nenum tpm_tis_flags {\n\tTPM_TIS_ITPM_WORKAROUND = 1,\n};\n\nstruct tpm_tis_phy_ops;\n\nstruct tpm_tis_data {\n\tu16 manufacturer_id;\n\tint locality;\n\tint irq;\n\tbool irq_tested;\n\tunsigned int flags;\n\tvoid *ilb_base_addr;\n\tu16 clkrun_enabled;\n\twait_queue_head_t int_queue;\n\twait_queue_head_t read_queue;\n\tconst struct tpm_tis_phy_ops *phy_ops;\n\tshort unsigned int rng_quality;\n};\n\nstruct tpm_tis_phy_ops {\n\tint (*read_bytes)(struct tpm_tis_data *, u32, u16, u8 *);\n\tint (*write_bytes)(struct tpm_tis_data *, u32, u16, const u8 *);\n\tint (*read16)(struct tpm_tis_data *, u32, u16 *);\n\tint (*read32)(struct tpm_tis_data *, u32, u32 *);\n\tint (*write32)(struct tpm_tis_data *, u32, u32);\n};\n\nstruct tis_vendor_durations_override {\n\tu32 did_vid;\n\tstruct tpm1_version version;\n\tlong unsigned int durations[3];\n};\n\nstruct tis_vendor_timeout_override {\n\tu32 did_vid;\n\tlong unsigned int timeout_us[4];\n};\n\nstruct tpm_info {\n\tstruct resource res;\n\tint irq;\n};\n\nstruct tpm_tis_tcg_phy {\n\tstruct tpm_tis_data priv;\n\tvoid *iobase;\n};\n\nenum crb_defaults {\n\tCRB_ACPI_START_REVISION_ID = 1,\n\tCRB_ACPI_START_INDEX = 1,\n};\n\nenum crb_loc_ctrl {\n\tCRB_LOC_CTRL_REQUEST_ACCESS = 1,\n\tCRB_LOC_CTRL_RELINQUISH = 2,\n};\n\nenum crb_loc_state {\n\tCRB_LOC_STATE_LOC_ASSIGNED = 2,\n\tCRB_LOC_STATE_TPM_REG_VALID_STS = 128,\n};\n\nenum crb_ctrl_req {\n\tCRB_CTRL_REQ_CMD_READY = 1,\n\tCRB_CTRL_REQ_GO_IDLE = 2,\n};\n\nenum crb_ctrl_sts {\n\tCRB_CTRL_STS_ERROR = 1,\n\tCRB_CTRL_STS_TPM_IDLE = 2,\n};\n\nenum crb_start {\n\tCRB_START_INVOKE = 1,\n};\n\nenum crb_cancel {\n\tCRB_CANCEL_INVOKE = 1,\n};\n\nstruct crb_regs_head {\n\tu32 loc_state;\n\tu32 reserved1;\n\tu32 loc_ctrl;\n\tu32 loc_sts;\n\tu8 reserved2[32];\n\tu64 intf_id;\n\tu64 ctrl_ext;\n};\n\nstruct crb_regs_tail {\n\tu32 ctrl_req;\n\tu32 ctrl_sts;\n\tu32 ctrl_cancel;\n\tu32 ctrl_start;\n\tu32 ctrl_int_enable;\n\tu32 ctrl_int_sts;\n\tu32 ctrl_cmd_size;\n\tu32 ctrl_cmd_pa_low;\n\tu32 ctrl_cmd_pa_high;\n\tu32 ctrl_rsp_size;\n\tu64 ctrl_rsp_pa;\n};\n\nenum crb_status {\n\tCRB_DRV_STS_COMPLETE = 1,\n};\n\nstruct crb_priv {\n\tu32 sm;\n\tconst char *hid;\n\tstruct crb_regs_head *regs_h;\n\tstruct crb_regs_tail *regs_t;\n\tu8 *cmd;\n\tu8 *rsp;\n\tu32 cmd_size;\n\tu32 smc_func_id;\n};\n\nstruct tpm2_crb_smc {\n\tu32 interrupt;\n\tu8 interrupt_flags;\n\tu8 op_flags;\n\tu16 reserved2;\n\tu32 smc_func_id;\n};\n\nstruct vcpu_data;\n\nstruct amd_iommu_pi_data {\n\tu32 ga_tag;\n\tu32 prev_ga_tag;\n\tu64 base;\n\tbool is_guest_mode;\n\tstruct vcpu_data *vcpu_data;\n\tvoid *ir_data;\n};\n\nstruct vcpu_data {\n\tu64 pi_desc_addr;\n\tu32 vector;\n};\n\nstruct amd_iommu_device_info {\n\tint max_pasids;\n\tu32 flags;\n};\n\nstruct irq_remap_table {\n\traw_spinlock_t lock;\n\tunsigned int min_index;\n\tu32 *table;\n};\n\nstruct amd_iommu_fault {\n\tu64 address;\n\tu32 pasid;\n\tu16 device_id;\n\tu16 tag;\n\tu16 flags;\n};\n\nstruct protection_domain {\n\tstruct list_head dev_list;\n\tstruct iommu_domain domain;\n\tspinlock_t lock;\n\tu16 id;\n\tatomic64_t pt_root;\n\tint glx;\n\tu64 *gcr3_tbl;\n\tlong unsigned int flags;\n\tunsigned int dev_cnt;\n\tunsigned int dev_iommu[32];\n};\n\nstruct domain_pgtable {\n\tint mode;\n\tu64 *root;\n};\n\nstruct amd_irte_ops;\n\nstruct amd_iommu___2 {\n\tstruct list_head list;\n\tint index;\n\traw_spinlock_t lock;\n\tstruct pci_dev *dev;\n\tstruct pci_dev *root_pdev;\n\tu64 mmio_phys;\n\tu64 mmio_phys_end;\n\tu8 *mmio_base;\n\tu32 cap;\n\tu8 acpi_flags;\n\tu64 features;\n\tbool is_iommu_v2;\n\tu16 devid;\n\tu16 cap_ptr;\n\tu16 pci_seg;\n\tu64 exclusion_start;\n\tu64 exclusion_length;\n\tu8 *cmd_buf;\n\tu32 cmd_buf_head;\n\tu32 cmd_buf_tail;\n\tu8 *evt_buf;\n\tu8 *ppr_log;\n\tu8 *ga_log;\n\tu8 *ga_log_tail;\n\tbool int_enabled;\n\tbool need_sync;\n\tstruct iommu_device iommu;\n\tu32 stored_addr_lo;\n\tu32 stored_addr_hi;\n\tu32 stored_l1[108];\n\tu32 stored_l2[131];\n\tu8 max_banks;\n\tu8 max_counters;\n\tstruct irq_domain *ir_domain;\n\tstruct irq_domain *msi_domain;\n\tstruct amd_irte_ops *irte_ops;\n\tu32 flags;\n\tvolatile u64 *cmd_sem;\n\tu64 cmd_sem_val;\n\tstruct irq_affinity_notify intcapxt_notify;\n};\n\nstruct amd_irte_ops {\n\tvoid (*prepare)(void *, u32, bool, u8, u32, int);\n\tvoid (*activate)(void *, u16, u16);\n\tvoid (*deactivate)(void *, u16, u16);\n\tvoid (*set_affinity)(void *, u16, u16, u8, u32);\n\tvoid * (*get)(struct irq_remap_table *, int);\n\tvoid (*set_allocated)(struct irq_remap_table *, int);\n\tbool (*is_allocated)(struct irq_remap_table *, int);\n\tvoid (*clear_allocated)(struct irq_remap_table *, int);\n};\n\nstruct acpihid_map_entry {\n\tstruct list_head list;\n\tu8 uid[256];\n\tu8 hid[9];\n\tu16 devid;\n\tu16 root_devid;\n\tbool cmd_line;\n\tstruct iommu_group *group;\n};\n\nstruct devid_map {\n\tstruct list_head list;\n\tu8 id;\n\tu16 devid;\n\tbool cmd_line;\n};\n\nstruct iommu_dev_data {\n\tspinlock_t lock;\n\tstruct list_head list;\n\tstruct llist_node dev_data_list;\n\tstruct protection_domain *domain;\n\tstruct pci_dev *pdev;\n\tu16 devid;\n\tbool iommu_v2;\n\tstruct {\n\t\tbool enabled;\n\t\tint qdep;\n\t} ats;\n\tbool pri_tlp;\n\tu32 errata;\n\tbool use_vapic;\n\tbool defer_attach;\n\tstruct ratelimit_state rs;\n};\n\nstruct dev_table_entry {\n\tu64 data[4];\n};\n\nstruct unity_map_entry {\n\tstruct list_head list;\n\tu16 devid_start;\n\tu16 devid_end;\n\tu64 address_start;\n\tu64 address_end;\n\tint prot;\n};\n\nenum amd_iommu_intr_mode_type {\n\tAMD_IOMMU_GUEST_IR_LEGACY = 0,\n\tAMD_IOMMU_GUEST_IR_LEGACY_GA = 1,\n\tAMD_IOMMU_GUEST_IR_VAPIC = 2,\n};\n\nunion irte {\n\tu32 val;\n\tstruct {\n\t\tu32 valid: 1;\n\t\tu32 no_fault: 1;\n\t\tu32 int_type: 3;\n\t\tu32 rq_eoi: 1;\n\t\tu32 dm: 1;\n\t\tu32 rsvd_1: 1;\n\t\tu32 destination: 8;\n\t\tu32 vector: 8;\n\t\tu32 rsvd_2: 8;\n\t} fields;\n};\n\nunion irte_ga_lo {\n\tu64 val;\n\tstruct {\n\t\tu64 valid: 1;\n\t\tu64 no_fault: 1;\n\t\tu64 int_type: 3;\n\t\tu64 rq_eoi: 1;\n\t\tu64 dm: 1;\n\t\tu64 guest_mode: 1;\n\t\tu64 destination: 24;\n\t\tu64 ga_tag: 32;\n\t} fields_remap;\n\tstruct {\n\t\tu64 valid: 1;\n\t\tu64 no_fault: 1;\n\t\tu64 ga_log_intr: 1;\n\t\tu64 rsvd1: 3;\n\t\tu64 is_run: 1;\n\t\tu64 guest_mode: 1;\n\t\tu64 destination: 24;\n\t\tu64 ga_tag: 32;\n\t} fields_vapic;\n};\n\nunion irte_ga_hi {\n\tu64 val;\n\tstruct {\n\t\tu64 vector: 8;\n\t\tu64 rsvd_1: 4;\n\t\tu64 ga_root_ptr: 40;\n\t\tu64 rsvd_2: 4;\n\t\tu64 destination: 8;\n\t} fields;\n};\n\nstruct irte_ga {\n\tunion irte_ga_lo lo;\n\tunion irte_ga_hi hi;\n};\n\nstruct irq_2_irte {\n\tu16 devid;\n\tu16 index;\n};\n\nstruct amd_ir_data {\n\tu32 cached_ga_tag;\n\tstruct irq_2_irte irq_2_irte;\n\tstruct msi_msg msi_entry;\n\tvoid *entry;\n\tvoid *ref;\n\tstruct irq_cfg *cfg;\n\tint ga_vector;\n\tint ga_root_ptr;\n\tint ga_tag;\n};\n\nstruct irq_remap_ops {\n\tint capability;\n\tint (*prepare)();\n\tint (*enable)();\n\tvoid (*disable)();\n\tint (*reenable)(int);\n\tint (*enable_faulting)();\n};\n\nstruct iommu_cmd {\n\tu32 data[4];\n};\n\nenum irq_remap_cap {\n\tIRQ_POSTING_CAP = 0,\n};\n\nstruct ivhd_header {\n\tu8 type;\n\tu8 flags;\n\tu16 length;\n\tu16 devid;\n\tu16 cap_ptr;\n\tu64 mmio_phys;\n\tu16 pci_seg;\n\tu16 info;\n\tu32 efr_attr;\n\tu64 efr_reg;\n\tu64 res;\n};\n\nstruct ivhd_entry {\n\tu8 type;\n\tu16 devid;\n\tu8 flags;\n\tu32 ext;\n\tu32 hidh;\n\tu64 cid;\n\tu8 uidf;\n\tu8 uidl;\n\tu8 uid;\n} __attribute__((packed));\n\nstruct ivmd_header {\n\tu8 type;\n\tu8 flags;\n\tu16 length;\n\tu16 devid;\n\tu16 aux;\n\tu64 resv;\n\tu64 range_start;\n\tu64 range_length;\n};\n\nenum iommu_init_state {\n\tIOMMU_START_STATE = 0,\n\tIOMMU_IVRS_DETECTED = 1,\n\tIOMMU_ACPI_FINISHED = 2,\n\tIOMMU_ENABLED = 3,\n\tIOMMU_PCI_INIT = 4,\n\tIOMMU_INTERRUPTS_EN = 5,\n\tIOMMU_DMA_OPS = 6,\n\tIOMMU_INITIALIZED = 7,\n\tIOMMU_NOT_FOUND = 8,\n\tIOMMU_INIT_ERROR = 9,\n\tIOMMU_CMDLINE_DISABLED = 10,\n};\n\nunion intcapxt {\n\tu64 capxt;\n\tstruct {\n\t\tu64 reserved_0: 2;\n\t\tu64 dest_mode_logical: 1;\n\t\tu64 reserved_1: 5;\n\t\tu64 destid_0_23: 24;\n\t\tu64 vector: 8;\n\t\tu64 reserved_2: 16;\n\t\tu64 destid_24_31: 8;\n\t};\n};\n\nstruct ivrs_quirk_entry {\n\tu8 id;\n\tu16 devid;\n};\n\nenum {\n\tDELL_INSPIRON_7375 = 0,\n\tDELL_LATITUDE_5495 = 1,\n\tLENOVO_IDEAPAD_330S_15ARR = 2,\n};\n\nstruct acpi_table_dmar {\n\tstruct acpi_table_header header;\n\tu8 width;\n\tu8 flags;\n\tu8 reserved[10];\n};\n\nstruct acpi_dmar_header {\n\tu16 type;\n\tu16 length;\n};\n\nenum acpi_dmar_type {\n\tACPI_DMAR_TYPE_HARDWARE_UNIT = 0,\n\tACPI_DMAR_TYPE_RESERVED_MEMORY = 1,\n\tACPI_DMAR_TYPE_ROOT_ATS = 2,\n\tACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3,\n\tACPI_DMAR_TYPE_NAMESPACE = 4,\n\tACPI_DMAR_TYPE_RESERVED = 5,\n};\n\nstruct acpi_dmar_device_scope {\n\tu8 entry_type;\n\tu8 length;\n\tu16 reserved;\n\tu8 enumeration_id;\n\tu8 bus;\n};\n\nenum acpi_dmar_scope_type {\n\tACPI_DMAR_SCOPE_TYPE_NOT_USED = 0,\n\tACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1,\n\tACPI_DMAR_SCOPE_TYPE_BRIDGE = 2,\n\tACPI_DMAR_SCOPE_TYPE_IOAPIC = 3,\n\tACPI_DMAR_SCOPE_TYPE_HPET = 4,\n\tACPI_DMAR_SCOPE_TYPE_NAMESPACE = 5,\n\tACPI_DMAR_SCOPE_TYPE_RESERVED = 6,\n};\n\nstruct acpi_dmar_pci_path {\n\tu8 device;\n\tu8 function;\n};\n\nstruct acpi_dmar_hardware_unit {\n\tstruct acpi_dmar_header header;\n\tu8 flags;\n\tu8 reserved;\n\tu16 segment;\n\tu64 address;\n};\n\nstruct acpi_dmar_reserved_memory {\n\tstruct acpi_dmar_header header;\n\tu16 reserved;\n\tu16 segment;\n\tu64 base_address;\n\tu64 end_address;\n};\n\nstruct acpi_dmar_atsr {\n\tstruct acpi_dmar_header header;\n\tu8 flags;\n\tu8 reserved;\n\tu16 segment;\n};\n\nstruct acpi_dmar_rhsa {\n\tstruct acpi_dmar_header header;\n\tu32 reserved;\n\tu64 base_address;\n\tu32 proximity_domain;\n} __attribute__((packed));\n\nstruct acpi_dmar_andd {\n\tstruct acpi_dmar_header header;\n\tu8 reserved[3];\n\tu8 device_number;\n\tchar device_name[1];\n} __attribute__((packed));\n\nstruct dmar_dev_scope {\n\tstruct device *dev;\n\tu8 bus;\n\tu8 devfn;\n};\n\nstruct intel_iommu;\n\nstruct dmar_drhd_unit {\n\tstruct list_head list;\n\tstruct acpi_dmar_header *hdr;\n\tu64 reg_base_addr;\n\tstruct dmar_dev_scope *devices;\n\tint devices_cnt;\n\tu16 segment;\n\tu8 ignored: 1;\n\tu8 include_all: 1;\n\tu8 gfx_dedicated: 1;\n\tstruct intel_iommu *iommu;\n};\n\nstruct iommu_flush {\n\tvoid (*flush_context)(struct intel_iommu *, u16, u16, u8, u64);\n\tvoid (*flush_iotlb)(struct intel_iommu *, u16, u64, unsigned int, u64);\n};\n\ntypedef unsigned int ioasid_t;\n\ntypedef ioasid_t (*ioasid_alloc_fn_t)(ioasid_t, ioasid_t, void *);\n\ntypedef void (*ioasid_free_fn_t)(ioasid_t, void *);\n\nstruct ioasid_allocator_ops {\n\tioasid_alloc_fn_t alloc;\n\tioasid_free_fn_t free;\n\tstruct list_head list;\n\tvoid *pdata;\n};\n\nstruct dmar_domain;\n\nstruct root_entry;\n\nstruct page_req_dsc;\n\nstruct q_inval;\n\nstruct ir_table;\n\nstruct intel_iommu {\n\tvoid *reg;\n\tu64 reg_phys;\n\tu64 reg_size;\n\tu64 cap;\n\tu64 ecap;\n\tu64 vccap;\n\tu32 gcmd;\n\traw_spinlock_t register_lock;\n\tint seq_id;\n\tint agaw;\n\tint msagaw;\n\tunsigned int irq;\n\tunsigned int pr_irq;\n\tu16 segment;\n\tunsigned char name[13];\n\tlong unsigned int *domain_ids;\n\tstruct dmar_domain ***domains;\n\tspinlock_t lock;\n\tstruct root_entry *root_entry;\n\tstruct iommu_flush flush;\n\tstruct page_req_dsc *prq;\n\tunsigned char prq_name[16];\n\tstruct completion prq_complete;\n\tstruct ioasid_allocator_ops pasid_allocator;\n\tstruct q_inval *qi;\n\tu32 *iommu_state;\n\tstruct ir_table *ir_table;\n\tstruct irq_domain *ir_domain;\n\tstruct irq_domain *ir_msi_domain;\n\tstruct iommu_device iommu;\n\tint node;\n\tu32 flags;\n\tstruct dmar_drhd_unit *drhd;\n};\n\nstruct dmar_pci_path {\n\tu8 bus;\n\tu8 device;\n\tu8 function;\n};\n\nstruct dmar_pci_notify_info {\n\tstruct pci_dev *dev;\n\tlong unsigned int event;\n\tint bus;\n\tu16 seg;\n\tu16 level;\n\tstruct dmar_pci_path path[0];\n};\n\nstruct irte___2 {\n\tunion {\n\t\tstruct {\n\t\t\t__u64 present: 1;\n\t\t\t__u64 fpd: 1;\n\t\t\t__u64 __res0: 6;\n\t\t\t__u64 avail: 4;\n\t\t\t__u64 __res1: 3;\n\t\t\t__u64 pst: 1;\n\t\t\t__u64 vector: 8;\n\t\t\t__u64 __res2: 40;\n\t\t};\n\t\tstruct {\n\t\t\t__u64 r_present: 1;\n\t\t\t__u64 r_fpd: 1;\n\t\t\t__u64 dst_mode: 1;\n\t\t\t__u64 redir_hint: 1;\n\t\t\t__u64 trigger_mode: 1;\n\t\t\t__u64 dlvry_mode: 3;\n\t\t\t__u64 r_avail: 4;\n\t\t\t__u64 r_res0: 4;\n\t\t\t__u64 r_vector: 8;\n\t\t\t__u64 r_res1: 8;\n\t\t\t__u64 dest_id: 32;\n\t\t};\n\t\tstruct {\n\t\t\t__u64 p_present: 1;\n\t\t\t__u64 p_fpd: 1;\n\t\t\t__u64 p_res0: 6;\n\t\t\t__u64 p_avail: 4;\n\t\t\t__u64 p_res1: 2;\n\t\t\t__u64 p_urgent: 1;\n\t\t\t__u64 p_pst: 1;\n\t\t\t__u64 p_vector: 8;\n\t\t\t__u64 p_res2: 14;\n\t\t\t__u64 pda_l: 26;\n\t\t};\n\t\t__u64 low;\n\t};\n\tunion {\n\t\tstruct {\n\t\t\t__u64 sid: 16;\n\t\t\t__u64 sq: 2;\n\t\t\t__u64 svt: 2;\n\t\t\t__u64 __res3: 44;\n\t\t};\n\t\tstruct {\n\t\t\t__u64 p_sid: 16;\n\t\t\t__u64 p_sq: 2;\n\t\t\t__u64 p_svt: 2;\n\t\t\t__u64 p_res3: 12;\n\t\t\t__u64 pda_h: 32;\n\t\t};\n\t\t__u64 high;\n\t};\n};\n\nstruct iova {\n\tstruct rb_node node;\n\tlong unsigned int pfn_hi;\n\tlong unsigned int pfn_lo;\n};\n\nstruct iova_magazine;\n\nstruct iova_cpu_rcache;\n\nstruct iova_rcache {\n\tspinlock_t lock;\n\tlong unsigned int depot_size;\n\tstruct iova_magazine *depot[32];\n\tstruct iova_cpu_rcache *cpu_rcaches;\n};\n\nstruct iova_domain;\n\ntypedef void (*iova_flush_cb)(struct iova_domain *);\n\ntypedef void (*iova_entry_dtor)(long unsigned int);\n\nstruct iova_fq;\n\nstruct iova_domain {\n\tspinlock_t iova_rbtree_lock;\n\tstruct rb_root rbroot;\n\tstruct rb_node *cached_node;\n\tstruct rb_node *cached32_node;\n\tlong unsigned int granule;\n\tlong unsigned int start_pfn;\n\tlong unsigned int dma_32bit_pfn;\n\tlong unsigned int max32_alloc_size;\n\tstruct iova_fq *fq;\n\tatomic64_t fq_flush_start_cnt;\n\tatomic64_t fq_flush_finish_cnt;\n\tstruct iova anchor;\n\tstruct iova_rcache rcaches[6];\n\tiova_flush_cb flush_cb;\n\tiova_entry_dtor entry_dtor;\n\tstruct timer_list fq_timer;\n\tatomic_t fq_timer_on;\n};\n\nstruct iova_fq_entry {\n\tlong unsigned int iova_pfn;\n\tlong unsigned int pages;\n\tlong unsigned int data;\n\tu64 counter;\n};\n\nstruct iova_fq {\n\tstruct iova_fq_entry entries[256];\n\tunsigned int head;\n\tunsigned int tail;\n\tspinlock_t lock;\n};\n\nenum {\n\tQI_FREE = 0,\n\tQI_IN_USE = 1,\n\tQI_DONE = 2,\n\tQI_ABORT = 3,\n};\n\nstruct qi_desc {\n\tu64 qw0;\n\tu64 qw1;\n\tu64 qw2;\n\tu64 qw3;\n};\n\nstruct q_inval {\n\traw_spinlock_t q_lock;\n\tvoid *desc;\n\tint *desc_status;\n\tint free_head;\n\tint free_tail;\n\tint free_cnt;\n};\n\nstruct ir_table {\n\tstruct irte___2 *base;\n\tlong unsigned int *bitmap;\n};\n\nstruct root_entry {\n\tu64 lo;\n\tu64 hi;\n};\n\nstruct dma_pte;\n\nstruct dmar_domain {\n\tint nid;\n\tunsigned int iommu_refcnt[128];\n\tu16 iommu_did[128];\n\tbool has_iotlb_device;\n\tstruct list_head devices;\n\tstruct list_head subdevices;\n\tstruct iova_domain iovad;\n\tstruct dma_pte *pgd;\n\tint gaw;\n\tint agaw;\n\tint flags;\n\tint iommu_coherency;\n\tint iommu_snooping;\n\tint iommu_count;\n\tint iommu_superpage;\n\tu64 max_addr;\n\tu32 default_pasid;\n\tstruct iommu_domain domain;\n};\n\nstruct dma_pte {\n\tu64 val;\n};\n\ntypedef int (*dmar_res_handler_t)(struct acpi_dmar_header *, void *);\n\nstruct dmar_res_callback {\n\tdmar_res_handler_t cb[5];\n\tvoid *arg[5];\n\tbool ignore_unhandled;\n\tbool print_entry;\n};\n\nenum faulttype {\n\tDMA_REMAP = 0,\n\tINTR_REMAP = 1,\n\tUNKNOWN = 2,\n};\n\nstruct ioasid_set {\n\tint dummy;\n};\n\nenum iommu_inv_granularity {\n\tIOMMU_INV_GRANU_DOMAIN = 0,\n\tIOMMU_INV_GRANU_PASID = 1,\n\tIOMMU_INV_GRANU_ADDR = 2,\n\tIOMMU_INV_GRANU_NR = 3,\n};\n\nenum {\n\tSR_DMAR_FECTL_REG = 0,\n\tSR_DMAR_FEDATA_REG = 1,\n\tSR_DMAR_FEADDR_REG = 2,\n\tSR_DMAR_FEUADDR_REG = 3,\n\tMAX_SR_DMAR_REGS = 4,\n};\n\nstruct context_entry {\n\tu64 lo;\n\tu64 hi;\n};\n\nstruct subdev_domain_info {\n\tstruct list_head link_phys;\n\tstruct list_head link_domain;\n\tstruct device *pdev;\n\tstruct dmar_domain *domain;\n\tint users;\n};\n\nstruct pasid_table;\n\nstruct device_domain_info {\n\tstruct list_head link;\n\tstruct list_head global;\n\tstruct list_head table;\n\tstruct list_head subdevices;\n\tu32 segment;\n\tu8 bus;\n\tu8 devfn;\n\tu16 pfsid;\n\tu8 pasid_supported: 3;\n\tu8 pasid_enabled: 1;\n\tu8 pri_supported: 1;\n\tu8 pri_enabled: 1;\n\tu8 ats_supported: 1;\n\tu8 ats_enabled: 1;\n\tu8 auxd_enabled: 1;\n\tu8 ats_qdep;\n\tstruct device *dev;\n\tstruct intel_iommu *iommu;\n\tstruct dmar_domain *domain;\n\tstruct pasid_table *pasid_table;\n};\n\nstruct pasid_table {\n\tvoid *table;\n\tint order;\n\tu32 max_pasid;\n\tstruct list_head dev;\n};\n\nstruct dmar_rmrr_unit {\n\tstruct list_head list;\n\tstruct acpi_dmar_header *hdr;\n\tu64 base_address;\n\tu64 end_address;\n\tstruct dmar_dev_scope *devices;\n\tint devices_cnt;\n};\n\nstruct dmar_atsr_unit {\n\tstruct list_head list;\n\tstruct acpi_dmar_header *hdr;\n\tstruct dmar_dev_scope *devices;\n\tint devices_cnt;\n\tu8 include_all: 1;\n};\n\nstruct domain_context_mapping_data {\n\tstruct dmar_domain *domain;\n\tstruct intel_iommu *iommu;\n\tstruct pasid_table *table;\n};\n\nstruct pasid_dir_entry {\n\tu64 val;\n};\n\nstruct pasid_entry {\n\tu64 val[8];\n};\n\nstruct pasid_table_opaque {\n\tstruct pasid_table **pasid_table;\n\tint segment;\n\tint bus;\n\tint devfn;\n};\n\nstruct trace_event_raw_dma_map {\n\tstruct trace_entry ent;\n\tu32 __data_loc_dev_name;\n\tdma_addr_t dev_addr;\n\tphys_addr_t phys_addr;\n\tsize_t size;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_dma_unmap {\n\tstruct trace_entry ent;\n\tu32 __data_loc_dev_name;\n\tdma_addr_t dev_addr;\n\tsize_t size;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_dma_map_sg {\n\tstruct trace_entry ent;\n\tu32 __data_loc_dev_name;\n\tdma_addr_t dev_addr;\n\tphys_addr_t phys_addr;\n\tsize_t size;\n\tint index;\n\tint total;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_dma_map {\n\tu32 dev_name;\n};\n\nstruct trace_event_data_offsets_dma_unmap {\n\tu32 dev_name;\n};\n\nstruct trace_event_data_offsets_dma_map_sg {\n\tu32 dev_name;\n};\n\ntypedef void (*btf_trace_map_single)(void *, struct device *, dma_addr_t, phys_addr_t, size_t);\n\ntypedef void (*btf_trace_bounce_map_single)(void *, struct device *, dma_addr_t, phys_addr_t, size_t);\n\ntypedef void (*btf_trace_unmap_single)(void *, struct device *, dma_addr_t, size_t);\n\ntypedef void (*btf_trace_unmap_sg)(void *, struct device *, dma_addr_t, size_t);\n\ntypedef void (*btf_trace_bounce_unmap_single)(void *, struct device *, dma_addr_t, size_t);\n\ntypedef void (*btf_trace_map_sg)(void *, struct device *, int, int, struct scatterlist *);\n\ntypedef void (*btf_trace_bounce_map_sg)(void *, struct device *, int, int, struct scatterlist *);\n\nenum iommu_fault_type {\n\tIOMMU_FAULT_DMA_UNRECOV = 1,\n\tIOMMU_FAULT_PAGE_REQ = 2,\n};\n\nstruct page_req_dsc {\n\tunion {\n\t\tstruct {\n\t\t\tu64 type: 8;\n\t\t\tu64 pasid_present: 1;\n\t\t\tu64 priv_data_present: 1;\n\t\t\tu64 rsvd: 6;\n\t\t\tu64 rid: 16;\n\t\t\tu64 pasid: 20;\n\t\t\tu64 exe_req: 1;\n\t\t\tu64 pm_req: 1;\n\t\t\tu64 rsvd2: 10;\n\t\t};\n\t\tu64 qw_0;\n\t};\n\tunion {\n\t\tstruct {\n\t\t\tu64 rd_req: 1;\n\t\t\tu64 wr_req: 1;\n\t\t\tu64 lpig: 1;\n\t\t\tu64 prg_index: 9;\n\t\t\tu64 addr: 52;\n\t\t};\n\t\tu64 qw_1;\n\t};\n\tu64 priv_data[2];\n};\n\nstruct svm_dev_ops;\n\nstruct intel_svm_dev {\n\tstruct list_head list;\n\tstruct callback_head rcu;\n\tstruct device *dev;\n\tstruct intel_iommu *iommu;\n\tstruct svm_dev_ops *ops;\n\tstruct iommu_sva sva;\n\tu32 pasid;\n\tint users;\n\tu16 did;\n\tu16 dev_iotlb: 1;\n\tu16 sid;\n\tu16 qdep;\n};\n\nstruct svm_dev_ops {\n\tvoid (*fault_cb)(struct device *, u32, u64, void *, int, int);\n};\n\nstruct intel_svm {\n\tstruct mmu_notifier notifier;\n\tstruct mm_struct *mm;\n\tunsigned int flags;\n\tu32 pasid;\n\tint gpasid;\n\tstruct list_head devs;\n\tstruct list_head list;\n};\n\nenum irq_mode {\n\tIRQ_REMAPPING = 0,\n\tIRQ_POSTING = 1,\n};\n\nstruct ioapic_scope {\n\tstruct intel_iommu *iommu;\n\tunsigned int id;\n\tunsigned int bus;\n\tunsigned int devfn;\n};\n\nstruct hpet_scope {\n\tstruct intel_iommu *iommu;\n\tu8 id;\n\tunsigned int bus;\n\tunsigned int devfn;\n};\n\nstruct irq_2_iommu {\n\tstruct intel_iommu *iommu;\n\tu16 irte_index;\n\tu16 sub_handle;\n\tu8 irte_mask;\n\tenum irq_mode mode;\n};\n\nstruct intel_ir_data {\n\tstruct irq_2_iommu irq_2_iommu;\n\tstruct irte___2 irte_entry;\n\tunion {\n\t\tstruct msi_msg msi_entry;\n\t};\n};\n\nstruct set_msi_sid_data {\n\tstruct pci_dev *pdev;\n\tu16 alias;\n\tint count;\n\tint busmatch_count;\n};\n\nstruct iommu_group {\n\tstruct kobject kobj;\n\tstruct kobject *devices_kobj;\n\tstruct list_head devices;\n\tstruct mutex mutex;\n\tstruct blocking_notifier_head notifier;\n\tvoid *iommu_data;\n\tvoid (*iommu_data_release)(void *);\n\tchar *name;\n\tint id;\n\tstruct iommu_domain *default_domain;\n\tstruct iommu_domain *domain;\n\tstruct list_head entry;\n};\n\nstruct fsl_mc_obj_desc {\n\tchar type[16];\n\tint id;\n\tu16 vendor;\n\tu16 ver_major;\n\tu16 ver_minor;\n\tu8 irq_count;\n\tu8 region_count;\n\tu32 state;\n\tchar label[16];\n\tu16 flags;\n};\n\nstruct fsl_mc_io;\n\nstruct fsl_mc_device_irq;\n\nstruct fsl_mc_resource;\n\nstruct fsl_mc_device {\n\tstruct device dev;\n\tu64 dma_mask;\n\tu16 flags;\n\tu32 icid;\n\tu16 mc_handle;\n\tstruct fsl_mc_io *mc_io;\n\tstruct fsl_mc_obj_desc obj_desc;\n\tstruct resource *regions;\n\tstruct fsl_mc_device_irq **irqs;\n\tstruct fsl_mc_resource *resource;\n\tstruct device_link *consumer_link;\n\tchar *driver_override;\n};\n\nenum fsl_mc_pool_type {\n\tFSL_MC_POOL_DPMCP = 0,\n\tFSL_MC_POOL_DPBP = 1,\n\tFSL_MC_POOL_DPCON = 2,\n\tFSL_MC_POOL_IRQ = 3,\n\tFSL_MC_NUM_POOL_TYPES = 4,\n};\n\nstruct fsl_mc_resource_pool;\n\nstruct fsl_mc_resource {\n\tenum fsl_mc_pool_type type;\n\ts32 id;\n\tvoid *data;\n\tstruct fsl_mc_resource_pool *parent_pool;\n\tstruct list_head node;\n};\n\nstruct fsl_mc_device_irq {\n\tstruct msi_desc *msi_desc;\n\tstruct fsl_mc_device *mc_dev;\n\tu8 dev_irq_index;\n\tstruct fsl_mc_resource resource;\n};\n\nstruct fsl_mc_io {\n\tstruct device *dev;\n\tu16 flags;\n\tu32 portal_size;\n\tphys_addr_t portal_phys_addr;\n\tvoid *portal_virt_addr;\n\tstruct fsl_mc_device *dpmcp_dev;\n\tunion {\n\t\tstruct mutex mutex;\n\t\traw_spinlock_t spinlock;\n\t};\n};\n\nstruct group_device {\n\tstruct list_head list;\n\tstruct device *dev;\n\tchar *name;\n};\n\nstruct iommu_group_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct iommu_group *, char *);\n\tssize_t (*store)(struct iommu_group *, const char *, size_t);\n};\n\nstruct group_for_pci_data {\n\tstruct pci_dev *pdev;\n\tstruct iommu_group *group;\n};\n\nstruct __group_domain_type {\n\tstruct device *dev;\n\tunsigned int type;\n};\n\nstruct trace_event_raw_iommu_group_event {\n\tstruct trace_entry ent;\n\tint gid;\n\tu32 __data_loc_device;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_iommu_device_event {\n\tstruct trace_entry ent;\n\tu32 __data_loc_device;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_map {\n\tstruct trace_entry ent;\n\tu64 iova;\n\tu64 paddr;\n\tsize_t size;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_unmap {\n\tstruct trace_entry ent;\n\tu64 iova;\n\tsize_t size;\n\tsize_t unmapped_size;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_iommu_error {\n\tstruct trace_entry ent;\n\tu32 __data_loc_device;\n\tu32 __data_loc_driver;\n\tu64 iova;\n\tint flags;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_iommu_group_event {\n\tu32 device;\n};\n\nstruct trace_event_data_offsets_iommu_device_event {\n\tu32 device;\n};\n\nstruct trace_event_data_offsets_map {};\n\nstruct trace_event_data_offsets_unmap {};\n\nstruct trace_event_data_offsets_iommu_error {\n\tu32 device;\n\tu32 driver;\n};\n\ntypedef void (*btf_trace_add_device_to_group)(void *, int, struct device *);\n\ntypedef void (*btf_trace_remove_device_from_group)(void *, int, struct device *);\n\ntypedef void (*btf_trace_attach_device_to_domain)(void *, struct device *);\n\ntypedef void (*btf_trace_detach_device_from_domain)(void *, struct device *);\n\ntypedef void (*btf_trace_map)(void *, long unsigned int, phys_addr_t, size_t);\n\ntypedef void (*btf_trace_unmap)(void *, long unsigned int, size_t, size_t);\n\ntypedef void (*btf_trace_io_page_fault)(void *, struct device *, long unsigned int, int);\n\nstruct iommu_dma_msi_page {\n\tstruct list_head list;\n\tdma_addr_t iova;\n\tphys_addr_t phys;\n};\n\nenum iommu_dma_cookie_type {\n\tIOMMU_DMA_IOVA_COOKIE = 0,\n\tIOMMU_DMA_MSI_COOKIE = 1,\n};\n\nstruct iommu_dma_cookie {\n\tenum iommu_dma_cookie_type type;\n\tunion {\n\t\tstruct iova_domain iovad;\n\t\tdma_addr_t msi_iova;\n\t};\n\tstruct list_head msi_page_list;\n\tstruct iommu_domain *fq_domain;\n};\n\nstruct ioasid_data {\n\tioasid_t id;\n\tstruct ioasid_set *set;\n\tvoid *private;\n\tstruct callback_head rcu;\n\trefcount_t refs;\n};\n\nstruct ioasid_allocator_data {\n\tstruct ioasid_allocator_ops *ops;\n\tstruct list_head list;\n\tstruct list_head slist;\n\tlong unsigned int flags;\n\tstruct xarray xa;\n\tstruct callback_head rcu;\n};\n\nstruct iova_magazine {\n\tlong unsigned int size;\n\tlong unsigned int pfns[128];\n};\n\nstruct iova_cpu_rcache {\n\tspinlock_t lock;\n\tstruct iova_magazine *loaded;\n\tstruct iova_magazine *prev;\n};\n\nstruct mipi_dsi_msg {\n\tu8 channel;\n\tu8 type;\n\tu16 flags;\n\tsize_t tx_len;\n\tconst void *tx_buf;\n\tsize_t rx_len;\n\tvoid *rx_buf;\n};\n\nstruct mipi_dsi_packet {\n\tsize_t size;\n\tu8 header[4];\n\tsize_t payload_length;\n\tconst u8 *payload;\n};\n\nstruct mipi_dsi_host;\n\nstruct mipi_dsi_device;\n\nstruct mipi_dsi_host_ops {\n\tint (*attach)(struct mipi_dsi_host *, struct mipi_dsi_device *);\n\tint (*detach)(struct mipi_dsi_host *, struct mipi_dsi_device *);\n\tssize_t (*transfer)(struct mipi_dsi_host *, const struct mipi_dsi_msg *);\n};\n\nstruct mipi_dsi_host {\n\tstruct device *dev;\n\tconst struct mipi_dsi_host_ops *ops;\n\tstruct list_head list;\n};\n\nenum mipi_dsi_pixel_format {\n\tMIPI_DSI_FMT_RGB888 = 0,\n\tMIPI_DSI_FMT_RGB666 = 1,\n\tMIPI_DSI_FMT_RGB666_PACKED = 2,\n\tMIPI_DSI_FMT_RGB565 = 3,\n};\n\nstruct mipi_dsi_device {\n\tstruct mipi_dsi_host *host;\n\tstruct device dev;\n\tchar name[20];\n\tunsigned int channel;\n\tunsigned int lanes;\n\tenum mipi_dsi_pixel_format format;\n\tlong unsigned int mode_flags;\n\tlong unsigned int hs_rate;\n\tlong unsigned int lp_rate;\n};\n\nstruct mipi_dsi_device_info {\n\tchar type[20];\n\tu32 channel;\n\tstruct device_node *node;\n};\n\nenum mipi_dsi_dcs_tear_mode {\n\tMIPI_DSI_DCS_TEAR_MODE_VBLANK = 0,\n\tMIPI_DSI_DCS_TEAR_MODE_VHBLANK = 1,\n};\n\nstruct mipi_dsi_driver {\n\tstruct device_driver driver;\n\tint (*probe)(struct mipi_dsi_device *);\n\tint (*remove)(struct mipi_dsi_device *);\n\tvoid (*shutdown)(struct mipi_dsi_device *);\n};\n\nstruct drm_dsc_picture_parameter_set {\n\tu8 dsc_version;\n\tu8 pps_identifier;\n\tu8 pps_reserved;\n\tu8 pps_3;\n\tu8 pps_4;\n\tu8 bits_per_pixel_low;\n\t__be16 pic_height;\n\t__be16 pic_width;\n\t__be16 slice_height;\n\t__be16 slice_width;\n\t__be16 chunk_size;\n\tu8 initial_xmit_delay_high;\n\tu8 initial_xmit_delay_low;\n\t__be16 initial_dec_delay;\n\tu8 pps20_reserved;\n\tu8 initial_scale_value;\n\t__be16 scale_increment_interval;\n\tu8 scale_decrement_interval_high;\n\tu8 scale_decrement_interval_low;\n\tu8 pps26_reserved;\n\tu8 first_line_bpg_offset;\n\t__be16 nfl_bpg_offset;\n\t__be16 slice_bpg_offset;\n\t__be16 initial_offset;\n\t__be16 final_offset;\n\tu8 flatness_min_qp;\n\tu8 flatness_max_qp;\n\t__be16 rc_model_size;\n\tu8 rc_edge_factor;\n\tu8 rc_quant_incr_limit0;\n\tu8 rc_quant_incr_limit1;\n\tu8 rc_tgt_offset;\n\tu8 rc_buf_thresh[14];\n\t__be16 rc_range_parameters[15];\n\tu8 native_422_420;\n\tu8 second_line_bpg_offset;\n\t__be16 nsl_bpg_offset;\n\t__be16 second_line_offset_adj;\n\tu32 pps_long_94_reserved;\n\tu32 pps_long_98_reserved;\n\tu32 pps_long_102_reserved;\n\tu32 pps_long_106_reserved;\n\tu32 pps_long_110_reserved;\n\tu32 pps_long_114_reserved;\n\tu32 pps_long_118_reserved;\n\tu32 pps_long_122_reserved;\n\t__be16 pps_short_126_reserved;\n} __attribute__((packed));\n\nenum {\n\tMIPI_DSI_V_SYNC_START = 1,\n\tMIPI_DSI_V_SYNC_END = 17,\n\tMIPI_DSI_H_SYNC_START = 33,\n\tMIPI_DSI_H_SYNC_END = 49,\n\tMIPI_DSI_COMPRESSION_MODE = 7,\n\tMIPI_DSI_END_OF_TRANSMISSION = 8,\n\tMIPI_DSI_COLOR_MODE_OFF = 2,\n\tMIPI_DSI_COLOR_MODE_ON = 18,\n\tMIPI_DSI_SHUTDOWN_PERIPHERAL = 34,\n\tMIPI_DSI_TURN_ON_PERIPHERAL = 50,\n\tMIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 3,\n\tMIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 19,\n\tMIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 35,\n\tMIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 4,\n\tMIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 20,\n\tMIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 36,\n\tMIPI_DSI_DCS_SHORT_WRITE = 5,\n\tMIPI_DSI_DCS_SHORT_WRITE_PARAM = 21,\n\tMIPI_DSI_DCS_READ = 6,\n\tMIPI_DSI_EXECUTE_QUEUE = 22,\n\tMIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 55,\n\tMIPI_DSI_NULL_PACKET = 9,\n\tMIPI_DSI_BLANKING_PACKET = 25,\n\tMIPI_DSI_GENERIC_LONG_WRITE = 41,\n\tMIPI_DSI_DCS_LONG_WRITE = 57,\n\tMIPI_DSI_PICTURE_PARAMETER_SET = 10,\n\tMIPI_DSI_COMPRESSED_PIXEL_STREAM = 11,\n\tMIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 12,\n\tMIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 28,\n\tMIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 44,\n\tMIPI_DSI_PACKED_PIXEL_STREAM_30 = 13,\n\tMIPI_DSI_PACKED_PIXEL_STREAM_36 = 29,\n\tMIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 61,\n\tMIPI_DSI_PACKED_PIXEL_STREAM_16 = 14,\n\tMIPI_DSI_PACKED_PIXEL_STREAM_18 = 30,\n\tMIPI_DSI_PIXEL_STREAM_3BYTE_18 = 46,\n\tMIPI_DSI_PACKED_PIXEL_STREAM_24 = 62,\n};\n\nenum {\n\tMIPI_DCS_NOP = 0,\n\tMIPI_DCS_SOFT_RESET = 1,\n\tMIPI_DCS_GET_COMPRESSION_MODE = 3,\n\tMIPI_DCS_GET_DISPLAY_ID = 4,\n\tMIPI_DCS_GET_ERROR_COUNT_ON_DSI = 5,\n\tMIPI_DCS_GET_RED_CHANNEL = 6,\n\tMIPI_DCS_GET_GREEN_CHANNEL = 7,\n\tMIPI_DCS_GET_BLUE_CHANNEL = 8,\n\tMIPI_DCS_GET_DISPLAY_STATUS = 9,\n\tMIPI_DCS_GET_POWER_MODE = 10,\n\tMIPI_DCS_GET_ADDRESS_MODE = 11,\n\tMIPI_DCS_GET_PIXEL_FORMAT = 12,\n\tMIPI_DCS_GET_DISPLAY_MODE = 13,\n\tMIPI_DCS_GET_SIGNAL_MODE = 14,\n\tMIPI_DCS_GET_DIAGNOSTIC_RESULT = 15,\n\tMIPI_DCS_ENTER_SLEEP_MODE = 16,\n\tMIPI_DCS_EXIT_SLEEP_MODE = 17,\n\tMIPI_DCS_ENTER_PARTIAL_MODE = 18,\n\tMIPI_DCS_ENTER_NORMAL_MODE = 19,\n\tMIPI_DCS_GET_IMAGE_CHECKSUM_RGB = 20,\n\tMIPI_DCS_GET_IMAGE_CHECKSUM_CT = 21,\n\tMIPI_DCS_EXIT_INVERT_MODE = 32,\n\tMIPI_DCS_ENTER_INVERT_MODE = 33,\n\tMIPI_DCS_SET_GAMMA_CURVE = 38,\n\tMIPI_DCS_SET_DISPLAY_OFF = 40,\n\tMIPI_DCS_SET_DISPLAY_ON = 41,\n\tMIPI_DCS_SET_COLUMN_ADDRESS = 42,\n\tMIPI_DCS_SET_PAGE_ADDRESS = 43,\n\tMIPI_DCS_WRITE_MEMORY_START = 44,\n\tMIPI_DCS_WRITE_LUT = 45,\n\tMIPI_DCS_READ_MEMORY_START = 46,\n\tMIPI_DCS_SET_PARTIAL_ROWS = 48,\n\tMIPI_DCS_SET_PARTIAL_COLUMNS = 49,\n\tMIPI_DCS_SET_SCROLL_AREA = 51,\n\tMIPI_DCS_SET_TEAR_OFF = 52,\n\tMIPI_DCS_SET_TEAR_ON = 53,\n\tMIPI_DCS_SET_ADDRESS_MODE = 54,\n\tMIPI_DCS_SET_SCROLL_START = 55,\n\tMIPI_DCS_EXIT_IDLE_MODE = 56,\n\tMIPI_DCS_ENTER_IDLE_MODE = 57,\n\tMIPI_DCS_SET_PIXEL_FORMAT = 58,\n\tMIPI_DCS_WRITE_MEMORY_CONTINUE = 60,\n\tMIPI_DCS_SET_3D_CONTROL = 61,\n\tMIPI_DCS_READ_MEMORY_CONTINUE = 62,\n\tMIPI_DCS_GET_3D_CONTROL = 63,\n\tMIPI_DCS_SET_VSYNC_TIMING = 64,\n\tMIPI_DCS_SET_TEAR_SCANLINE = 68,\n\tMIPI_DCS_GET_SCANLINE = 69,\n\tMIPI_DCS_SET_DISPLAY_BRIGHTNESS = 81,\n\tMIPI_DCS_GET_DISPLAY_BRIGHTNESS = 82,\n\tMIPI_DCS_WRITE_CONTROL_DISPLAY = 83,\n\tMIPI_DCS_GET_CONTROL_DISPLAY = 84,\n\tMIPI_DCS_WRITE_POWER_SAVE = 85,\n\tMIPI_DCS_GET_POWER_SAVE = 86,\n\tMIPI_DCS_SET_CABC_MIN_BRIGHTNESS = 94,\n\tMIPI_DCS_GET_CABC_MIN_BRIGHTNESS = 95,\n\tMIPI_DCS_READ_DDB_START = 161,\n\tMIPI_DCS_READ_PPS_START = 162,\n\tMIPI_DCS_READ_DDB_CONTINUE = 168,\n\tMIPI_DCS_READ_PPS_CONTINUE = 169,\n};\n\nstruct drm_dmi_panel_orientation_data {\n\tint width;\n\tint height;\n\tconst char * const *bios_dates;\n\tint orientation;\n};\n\nstruct vga_device {\n\tstruct list_head list;\n\tstruct pci_dev *pdev;\n\tunsigned int decodes;\n\tunsigned int owns;\n\tunsigned int locks;\n\tunsigned int io_lock_cnt;\n\tunsigned int mem_lock_cnt;\n\tunsigned int io_norm_cnt;\n\tunsigned int mem_norm_cnt;\n\tbool bridge_has_one_vga;\n\tvoid *cookie;\n\tvoid (*irq_set_state)(void *, bool);\n\tunsigned int (*set_vga_decode)(void *, bool);\n};\n\nstruct vga_arb_user_card {\n\tstruct pci_dev *pdev;\n\tunsigned int mem_cnt;\n\tunsigned int io_cnt;\n};\n\nstruct vga_arb_private {\n\tstruct list_head list;\n\tstruct pci_dev *target;\n\tstruct vga_arb_user_card cards[16];\n\tspinlock_t lock;\n};\n\nenum vga_switcheroo_handler_flags_t {\n\tVGA_SWITCHEROO_CAN_SWITCH_DDC = 1,\n\tVGA_SWITCHEROO_NEEDS_EDP_CONFIG = 2,\n};\n\nenum vga_switcheroo_state {\n\tVGA_SWITCHEROO_OFF = 0,\n\tVGA_SWITCHEROO_ON = 1,\n\tVGA_SWITCHEROO_NOT_FOUND = 2,\n};\n\nenum vga_switcheroo_client_id {\n\tVGA_SWITCHEROO_UNKNOWN_ID = 4096,\n\tVGA_SWITCHEROO_IGD = 0,\n\tVGA_SWITCHEROO_DIS = 1,\n\tVGA_SWITCHEROO_MAX_CLIENTS = 2,\n};\n\nstruct vga_switcheroo_handler {\n\tint (*init)();\n\tint (*switchto)(enum vga_switcheroo_client_id);\n\tint (*switch_ddc)(enum vga_switcheroo_client_id);\n\tint (*power_state)(enum vga_switcheroo_client_id, enum vga_switcheroo_state);\n\tenum vga_switcheroo_client_id (*get_client_id)(struct pci_dev *);\n};\n\nstruct vga_switcheroo_client_ops {\n\tvoid (*set_gpu_state)(struct pci_dev *, enum vga_switcheroo_state);\n\tvoid (*reprobe)(struct pci_dev *);\n\tbool (*can_switch)(struct pci_dev *);\n\tvoid (*gpu_bound)(struct pci_dev *, enum vga_switcheroo_client_id);\n};\n\nstruct vga_switcheroo_client {\n\tstruct pci_dev *pdev;\n\tstruct fb_info *fb_info;\n\tenum vga_switcheroo_state pwr_state;\n\tconst struct vga_switcheroo_client_ops *ops;\n\tenum vga_switcheroo_client_id id;\n\tbool active;\n\tbool driver_power_control;\n\tstruct list_head list;\n\tstruct pci_dev *vga_dev;\n};\n\nstruct vgasr_priv {\n\tbool active;\n\tbool delayed_switch_active;\n\tenum vga_switcheroo_client_id delayed_client_id;\n\tstruct dentry *debugfs_root;\n\tint registered_clients;\n\tstruct list_head clients;\n\tconst struct vga_switcheroo_handler *handler;\n\tenum vga_switcheroo_handler_flags_t handler_flags;\n\tstruct mutex mux_hw_lock;\n\tint old_ddc_owner;\n};\n\nstruct cb_id {\n\t__u32 idx;\n\t__u32 val;\n};\n\nstruct cn_msg {\n\tstruct cb_id id;\n\t__u32 seq;\n\t__u32 ack;\n\t__u16 len;\n\t__u16 flags;\n\t__u8 data[0];\n};\n\nstruct cn_queue_dev {\n\tatomic_t refcnt;\n\tunsigned char name[32];\n\tstruct list_head queue_list;\n\tspinlock_t queue_lock;\n\tstruct sock *nls;\n};\n\nstruct cn_callback_id {\n\tunsigned char name[32];\n\tstruct cb_id id;\n};\n\nstruct cn_callback_entry {\n\tstruct list_head callback_entry;\n\trefcount_t refcnt;\n\tstruct cn_queue_dev *pdev;\n\tstruct cn_callback_id id;\n\tvoid (*callback)(struct cn_msg *, struct netlink_skb_parms *);\n\tu32 seq;\n\tu32 group;\n};\n\nstruct cn_dev {\n\tstruct cb_id id;\n\tu32 seq;\n\tu32 groups;\n\tstruct sock *nls;\n\tstruct cn_queue_dev *cbdev;\n};\n\nenum proc_cn_mcast_op {\n\tPROC_CN_MCAST_LISTEN = 1,\n\tPROC_CN_MCAST_IGNORE = 2,\n};\n\nstruct fork_proc_event {\n\t__kernel_pid_t parent_pid;\n\t__kernel_pid_t parent_tgid;\n\t__kernel_pid_t child_pid;\n\t__kernel_pid_t child_tgid;\n};\n\nstruct exec_proc_event {\n\t__kernel_pid_t process_pid;\n\t__kernel_pid_t process_tgid;\n};\n\nstruct id_proc_event {\n\t__kernel_pid_t process_pid;\n\t__kernel_pid_t process_tgid;\n\tunion {\n\t\t__u32 ruid;\n\t\t__u32 rgid;\n\t} r;\n\tunion {\n\t\t__u32 euid;\n\t\t__u32 egid;\n\t} e;\n};\n\nstruct sid_proc_event {\n\t__kernel_pid_t process_pid;\n\t__kernel_pid_t process_tgid;\n};\n\nstruct ptrace_proc_event {\n\t__kernel_pid_t process_pid;\n\t__kernel_pid_t process_tgid;\n\t__kernel_pid_t tracer_pid;\n\t__kernel_pid_t tracer_tgid;\n};\n\nstruct comm_proc_event {\n\t__kernel_pid_t process_pid;\n\t__kernel_pid_t process_tgid;\n\tchar comm[16];\n};\n\nstruct coredump_proc_event {\n\t__kernel_pid_t process_pid;\n\t__kernel_pid_t process_tgid;\n\t__kernel_pid_t parent_pid;\n\t__kernel_pid_t parent_tgid;\n};\n\nstruct exit_proc_event {\n\t__kernel_pid_t process_pid;\n\t__kernel_pid_t process_tgid;\n\t__u32 exit_code;\n\t__u32 exit_signal;\n\t__kernel_pid_t parent_pid;\n\t__kernel_pid_t parent_tgid;\n};\n\nstruct proc_event {\n\tenum what what;\n\t__u32 cpu;\n\t__u64 timestamp_ns;\n\tunion {\n\t\tstruct {\n\t\t\t__u32 err;\n\t\t} ack;\n\t\tstruct fork_proc_event fork;\n\t\tstruct exec_proc_event exec;\n\t\tstruct id_proc_event id;\n\t\tstruct sid_proc_event sid;\n\t\tstruct ptrace_proc_event ptrace;\n\t\tstruct comm_proc_event comm;\n\t\tstruct coredump_proc_event coredump;\n\t\tstruct exit_proc_event exit;\n\t} event_data;\n};\n\nstruct local_event {\n\tlocal_lock_t lock;\n\t__u32 count;\n};\n\nstruct component_ops {\n\tint (*bind)(struct device *, struct device *, void *);\n\tvoid (*unbind)(struct device *, struct device *, void *);\n};\n\nstruct component_master_ops {\n\tint (*bind)(struct device *);\n\tvoid (*unbind)(struct device *);\n};\n\nstruct component;\n\nstruct component_match_array {\n\tvoid *data;\n\tint (*compare)(struct device *, void *);\n\tint (*compare_typed)(struct device *, int, void *);\n\tvoid (*release)(struct device *, void *);\n\tstruct component *component;\n\tbool duplicate;\n};\n\nstruct master;\n\nstruct component {\n\tstruct list_head node;\n\tstruct master *master;\n\tbool bound;\n\tconst struct component_ops *ops;\n\tint subcomponent;\n\tstruct device *dev;\n};\n\nstruct component_match {\n\tsize_t alloc;\n\tsize_t num;\n\tstruct component_match_array *compare;\n};\n\nstruct master {\n\tstruct list_head node;\n\tbool bound;\n\tconst struct component_master_ops *ops;\n\tstruct device *dev;\n\tstruct component_match *match;\n\tstruct dentry *dentry;\n};\n\nstruct fwnode_link {\n\tstruct fwnode_handle *supplier;\n\tstruct list_head s_hook;\n\tstruct fwnode_handle *consumer;\n\tstruct list_head c_hook;\n};\n\nstruct wake_irq {\n\tstruct device *dev;\n\tunsigned int status;\n\tint irq;\n\tconst char *name;\n};\n\nenum dpm_order {\n\tDPM_ORDER_NONE = 0,\n\tDPM_ORDER_DEV_AFTER_PARENT = 1,\n\tDPM_ORDER_PARENT_BEFORE_DEV = 2,\n\tDPM_ORDER_DEV_LAST = 3,\n};\n\nstruct subsys_private {\n\tstruct kset subsys;\n\tstruct kset *devices_kset;\n\tstruct list_head interfaces;\n\tstruct mutex mutex;\n\tstruct kset *drivers_kset;\n\tstruct klist klist_devices;\n\tstruct klist klist_drivers;\n\tstruct blocking_notifier_head bus_notifier;\n\tunsigned int drivers_autoprobe: 1;\n\tstruct bus_type *bus;\n\tstruct kset glue_dirs;\n\tstruct class *class;\n};\n\nstruct driver_private {\n\tstruct kobject kobj;\n\tstruct klist klist_devices;\n\tstruct klist_node knode_bus;\n\tstruct module_kobject *mkobj;\n\tstruct device_driver *driver;\n};\n\nstruct device_private {\n\tstruct klist klist_children;\n\tstruct klist_node knode_parent;\n\tstruct klist_node knode_driver;\n\tstruct klist_node knode_bus;\n\tstruct klist_node knode_class;\n\tstruct list_head deferred_probe;\n\tstruct device_driver *async_driver;\n\tchar *deferred_probe_reason;\n\tstruct device *device;\n\tu8 dead: 1;\n};\n\nunion device_attr_group_devres {\n\tconst struct attribute_group *group;\n\tconst struct attribute_group **groups;\n};\n\nstruct class_dir {\n\tstruct kobject kobj;\n\tstruct class *class;\n};\n\nstruct root_device {\n\tstruct device dev;\n\tstruct module *owner;\n};\n\nstruct subsys_dev_iter {\n\tstruct klist_iter ki;\n\tconst struct device_type *type;\n};\n\nstruct device_attach_data {\n\tstruct device *dev;\n\tbool check_async;\n\tbool want_async;\n\tbool have_async;\n};\n\nstruct class_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct class *, struct class_attribute *, char *);\n\tssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t);\n};\n\nstruct class_attribute_string {\n\tstruct class_attribute attr;\n\tchar *str;\n};\n\nstruct class_compat {\n\tstruct kobject *kobj;\n};\n\nstruct irq_affinity_devres {\n\tunsigned int count;\n\tunsigned int irq[0];\n};\n\nstruct platform_object {\n\tstruct platform_device pdev;\n\tchar name[0];\n};\n\nstruct cpu_attr {\n\tstruct device_attribute attr;\n\tconst struct cpumask * const map;\n};\n\nstruct probe {\n\tstruct probe *next;\n\tdev_t dev;\n\tlong unsigned int range;\n\tstruct module *owner;\n\tkobj_probe_t *get;\n\tint (*lock)(dev_t, void *);\n\tvoid *data;\n};\n\nstruct kobj_map___2 {\n\tstruct probe *probes[255];\n\tstruct mutex *lock;\n};\n\nstruct devres_node {\n\tstruct list_head entry;\n\tdr_release_t release;\n\tconst char *name;\n\tsize_t size;\n};\n\nstruct devres___2 {\n\tstruct devres_node node;\n\tu8 data[0];\n};\n\nstruct devres_group {\n\tstruct devres_node node[2];\n\tvoid *id;\n\tint color;\n};\n\nstruct action_devres {\n\tvoid *data;\n\tvoid (*action)(void *);\n};\n\nstruct pages_devres {\n\tlong unsigned int addr;\n\tunsigned int order;\n};\n\nstruct attribute_container {\n\tstruct list_head node;\n\tstruct klist containers;\n\tstruct class *class;\n\tconst struct attribute_group *grp;\n\tstruct device_attribute **attrs;\n\tint (*match)(struct attribute_container *, struct device *);\n\tlong unsigned int flags;\n};\n\nstruct internal_container {\n\tstruct klist_node node;\n\tstruct attribute_container *cont;\n\tstruct device classdev;\n};\n\nstruct transport_container;\n\nstruct transport_class {\n\tstruct class class;\n\tint (*setup)(struct transport_container *, struct device *, struct device *);\n\tint (*configure)(struct transport_container *, struct device *, struct device *);\n\tint (*remove)(struct transport_container *, struct device *, struct device *);\n};\n\nstruct transport_container {\n\tstruct attribute_container ac;\n\tconst struct attribute_group *statistics;\n};\n\nstruct anon_transport_class {\n\tstruct transport_class tclass;\n\tstruct attribute_container container;\n};\n\ntypedef void * (*devcon_match_fn_t)(struct fwnode_handle *, const char *, void *);\n\nstruct mii_bus;\n\nstruct mdio_device {\n\tstruct device dev;\n\tstruct mii_bus *bus;\n\tchar modalias[32];\n\tint (*bus_match)(struct device *, struct device_driver *);\n\tvoid (*device_free)(struct mdio_device *);\n\tvoid (*device_remove)(struct mdio_device *);\n\tint addr;\n\tint flags;\n\tstruct gpio_desc___2 *reset_gpio;\n\tstruct reset_control___2 *reset_ctrl;\n\tunsigned int reset_assert_delay;\n\tunsigned int reset_deassert_delay;\n};\n\nstruct phy_c45_device_ids {\n\tu32 devices_in_package;\n\tu32 mmds_present;\n\tu32 device_ids[32];\n};\n\nenum phy_state {\n\tPHY_DOWN = 0,\n\tPHY_READY = 1,\n\tPHY_HALTED = 2,\n\tPHY_UP = 3,\n\tPHY_RUNNING = 4,\n\tPHY_NOLINK = 5,\n\tPHY_CABLETEST = 6,\n};\n\ntypedef enum {\n\tPHY_INTERFACE_MODE_NA = 0,\n\tPHY_INTERFACE_MODE_INTERNAL = 1,\n\tPHY_INTERFACE_MODE_MII = 2,\n\tPHY_INTERFACE_MODE_GMII = 3,\n\tPHY_INTERFACE_MODE_SGMII = 4,\n\tPHY_INTERFACE_MODE_TBI = 5,\n\tPHY_INTERFACE_MODE_REVMII = 6,\n\tPHY_INTERFACE_MODE_RMII = 7,\n\tPHY_INTERFACE_MODE_RGMII = 8,\n\tPHY_INTERFACE_MODE_RGMII_ID = 9,\n\tPHY_INTERFACE_MODE_RGMII_RXID = 10,\n\tPHY_INTERFACE_MODE_RGMII_TXID = 11,\n\tPHY_INTERFACE_MODE_RTBI = 12,\n\tPHY_INTERFACE_MODE_SMII = 13,\n\tPHY_INTERFACE_MODE_XGMII = 14,\n\tPHY_INTERFACE_MODE_XLGMII = 15,\n\tPHY_INTERFACE_MODE_MOCA = 16,\n\tPHY_INTERFACE_MODE_QSGMII = 17,\n\tPHY_INTERFACE_MODE_TRGMII = 18,\n\tPHY_INTERFACE_MODE_1000BASEX = 19,\n\tPHY_INTERFACE_MODE_2500BASEX = 20,\n\tPHY_INTERFACE_MODE_RXAUI = 21,\n\tPHY_INTERFACE_MODE_XAUI = 22,\n\tPHY_INTERFACE_MODE_10GBASER = 23,\n\tPHY_INTERFACE_MODE_USXGMII = 24,\n\tPHY_INTERFACE_MODE_10GKR = 25,\n\tPHY_INTERFACE_MODE_MAX = 26,\n} phy_interface_t;\n\nstruct phylink;\n\nstruct phy_driver;\n\nstruct phy_led_trigger;\n\nstruct phy_package_shared;\n\nstruct mii_timestamper;\n\nstruct phy_device {\n\tstruct mdio_device mdio;\n\tstruct phy_driver *drv;\n\tu32 phy_id;\n\tstruct phy_c45_device_ids c45_ids;\n\tunsigned int is_c45: 1;\n\tunsigned int is_internal: 1;\n\tunsigned int is_pseudo_fixed_link: 1;\n\tunsigned int is_gigabit_capable: 1;\n\tunsigned int has_fixups: 1;\n\tunsigned int suspended: 1;\n\tunsigned int suspended_by_mdio_bus: 1;\n\tunsigned int sysfs_links: 1;\n\tunsigned int loopback_enabled: 1;\n\tunsigned int downshifted_rate: 1;\n\tunsigned int autoneg: 1;\n\tunsigned int link: 1;\n\tunsigned int autoneg_complete: 1;\n\tunsigned int interrupts: 1;\n\tenum phy_state state;\n\tu32 dev_flags;\n\tphy_interface_t interface;\n\tint speed;\n\tint duplex;\n\tint port;\n\tint pause;\n\tint asym_pause;\n\tu8 master_slave_get;\n\tu8 master_slave_set;\n\tu8 master_slave_state;\n\tlong unsigned int supported[2];\n\tlong unsigned int advertising[2];\n\tlong unsigned int lp_advertising[2];\n\tlong unsigned int adv_old[2];\n\tu32 eee_broken_modes;\n\tstruct phy_led_trigger *phy_led_triggers;\n\tunsigned int phy_num_led_triggers;\n\tstruct phy_led_trigger *last_triggered;\n\tstruct phy_led_trigger *led_link_trigger;\n\tint irq;\n\tvoid *priv;\n\tstruct phy_package_shared *shared;\n\tstruct sk_buff *skb;\n\tvoid *ehdr;\n\tstruct nlattr *nest;\n\tstruct delayed_work state_queue;\n\tstruct mutex lock;\n\tbool sfp_bus_attached;\n\tstruct sfp_bus *sfp_bus;\n\tstruct phylink *phylink;\n\tstruct net_device *attached_dev;\n\tstruct mii_timestamper *mii_ts;\n\tu8 mdix;\n\tu8 mdix_ctrl;\n\tvoid (*phy_link_change)(struct phy_device *, bool);\n\tvoid (*adjust_link)(struct net_device *);\n\tconst struct macsec_ops *macsec_ops;\n};\n\nstruct phy_tdr_config {\n\tu32 first;\n\tu32 last;\n\tu32 step;\n\ts8 pair;\n};\n\nstruct mdio_bus_stats {\n\tu64_stats_t transfers;\n\tu64_stats_t errors;\n\tu64_stats_t writes;\n\tu64_stats_t reads;\n\tstruct u64_stats_sync syncp;\n};\n\nstruct mii_bus {\n\tstruct module *owner;\n\tconst char *name;\n\tchar id[61];\n\tvoid *priv;\n\tint (*read)(struct mii_bus *, int, int);\n\tint (*write)(struct mii_bus *, int, int, u16);\n\tint (*reset)(struct mii_bus *);\n\tstruct mdio_bus_stats stats[32];\n\tstruct mutex mdio_lock;\n\tstruct device *parent;\n\tenum {\n\t\tMDIOBUS_ALLOCATED = 1,\n\t\tMDIOBUS_REGISTERED = 2,\n\t\tMDIOBUS_UNREGISTERED = 3,\n\t\tMDIOBUS_RELEASED = 4,\n\t} state;\n\tstruct device dev;\n\tstruct mdio_device *mdio_map[32];\n\tu32 phy_mask;\n\tu32 phy_ignore_ta_mask;\n\tint irq[32];\n\tint reset_delay_us;\n\tint reset_post_delay_us;\n\tstruct gpio_desc___2 *reset_gpiod;\n\tenum {\n\t\tMDIOBUS_NO_CAP = 0,\n\t\tMDIOBUS_C22 = 1,\n\t\tMDIOBUS_C45 = 2,\n\t\tMDIOBUS_C22_C45 = 3,\n\t} probe_capabilities;\n\tstruct mutex shared_lock;\n\tstruct phy_package_shared *shared[32];\n};\n\nstruct mdio_driver_common {\n\tstruct device_driver driver;\n\tint flags;\n};\n\nstruct mii_timestamper {\n\tbool (*rxtstamp)(struct mii_timestamper *, struct sk_buff *, int);\n\tvoid (*txtstamp)(struct mii_timestamper *, struct sk_buff *, int);\n\tint (*hwtstamp)(struct mii_timestamper *, struct ifreq *);\n\tvoid (*link_state)(struct mii_timestamper *, struct phy_device *);\n\tint (*ts_info)(struct mii_timestamper *, struct ethtool_ts_info *);\n\tstruct device *device;\n};\n\nstruct phy_package_shared {\n\tint addr;\n\trefcount_t refcnt;\n\tlong unsigned int flags;\n\tsize_t priv_size;\n\tvoid *priv;\n};\n\nstruct phy_driver {\n\tstruct mdio_driver_common mdiodrv;\n\tu32 phy_id;\n\tchar *name;\n\tu32 phy_id_mask;\n\tconst long unsigned int * const features;\n\tu32 flags;\n\tconst void *driver_data;\n\tint (*soft_reset)(struct phy_device *);\n\tint (*config_init)(struct phy_device *);\n\tint (*probe)(struct phy_device *);\n\tint (*get_features)(struct phy_device *);\n\tint (*suspend)(struct phy_device *);\n\tint (*resume)(struct phy_device *);\n\tint (*config_aneg)(struct phy_device *);\n\tint (*aneg_done)(struct phy_device *);\n\tint (*read_status)(struct phy_device *);\n\tint (*config_intr)(struct phy_device *);\n\tirqreturn_t (*handle_interrupt)(struct phy_device *);\n\tvoid (*remove)(struct phy_device *);\n\tint (*match_phy_device)(struct phy_device *);\n\tint (*set_wol)(struct phy_device *, struct ethtool_wolinfo *);\n\tvoid (*get_wol)(struct phy_device *, struct ethtool_wolinfo *);\n\tvoid (*link_change_notify)(struct phy_device *);\n\tint (*read_mmd)(struct phy_device *, int, u16);\n\tint (*write_mmd)(struct phy_device *, int, u16, u16);\n\tint (*read_page)(struct phy_device *);\n\tint (*write_page)(struct phy_device *, int);\n\tint (*module_info)(struct phy_device *, struct ethtool_modinfo *);\n\tint (*module_eeprom)(struct phy_device *, struct ethtool_eeprom *, u8 *);\n\tint (*cable_test_start)(struct phy_device *);\n\tint (*cable_test_tdr_start)(struct phy_device *, const struct phy_tdr_config *);\n\tint (*cable_test_get_status)(struct phy_device *, bool *);\n\tint (*get_sset_count)(struct phy_device *);\n\tvoid (*get_strings)(struct phy_device *, u8 *);\n\tvoid (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);\n\tint (*get_tunable)(struct phy_device *, struct ethtool_tunable *, void *);\n\tint (*set_tunable)(struct phy_device *, struct ethtool_tunable *, const void *);\n\tint (*set_loopback)(struct phy_device *, bool);\n\tint (*get_sqi)(struct phy_device *);\n\tint (*get_sqi_max)(struct phy_device *);\n};\n\nstruct software_node;\n\nstruct software_node_ref_args {\n\tconst struct software_node *node;\n\tunsigned int nargs;\n\tu64 args[8];\n};\n\nstruct software_node {\n\tconst char *name;\n\tconst struct software_node *parent;\n\tconst struct property_entry *properties;\n};\n\nstruct swnode {\n\tint id;\n\tstruct kobject kobj;\n\tstruct fwnode_handle fwnode;\n\tconst struct software_node *node;\n\tstruct ida child_ids;\n\tstruct list_head entry;\n\tstruct list_head children;\n\tstruct swnode *parent;\n\tunsigned int allocated: 1;\n};\n\nstruct auxiliary_device_id {\n\tchar name[32];\n\tkernel_ulong_t driver_data;\n};\n\nstruct auxiliary_device {\n\tstruct device dev;\n\tconst char *name;\n\tu32 id;\n};\n\nstruct auxiliary_driver {\n\tint (*probe)(struct auxiliary_device *, const struct auxiliary_device_id *);\n\tvoid (*remove)(struct auxiliary_device *);\n\tvoid (*shutdown)(struct auxiliary_device *);\n\tint (*suspend)(struct auxiliary_device *, pm_message_t);\n\tint (*resume)(struct auxiliary_device *);\n\tconst char *name;\n\tstruct device_driver driver;\n\tconst struct auxiliary_device_id *id_table;\n};\n\nstruct req {\n\tstruct req *next;\n\tstruct completion done;\n\tint err;\n\tconst char *name;\n\tumode_t mode;\n\tkuid_t uid;\n\tkgid_t gid;\n\tstruct device *dev;\n};\n\ntypedef int (*pm_callback_t)(struct device *);\n\nenum gpd_status {\n\tGENPD_STATE_ON = 0,\n\tGENPD_STATE_OFF = 1,\n};\n\nenum genpd_notication {\n\tGENPD_NOTIFY_PRE_OFF = 0,\n\tGENPD_NOTIFY_OFF = 1,\n\tGENPD_NOTIFY_PRE_ON = 2,\n\tGENPD_NOTIFY_ON = 3,\n};\n\nstruct dev_power_governor {\n\tbool (*power_down_ok)(struct dev_pm_domain *);\n\tbool (*suspend_ok)(struct device *);\n};\n\nstruct gpd_dev_ops {\n\tint (*start)(struct device *);\n\tint (*stop)(struct device *);\n};\n\nstruct genpd_power_state {\n\ts64 power_off_latency_ns;\n\ts64 power_on_latency_ns;\n\ts64 residency_ns;\n\tu64 usage;\n\tu64 rejected;\n\tstruct fwnode_handle *fwnode;\n\tktime_t idle_time;\n\tvoid *data;\n};\n\nstruct opp_table;\n\nstruct dev_pm_opp;\n\nstruct genpd_lock_ops;\n\nstruct generic_pm_domain {\n\tstruct device dev;\n\tstruct dev_pm_domain domain;\n\tstruct list_head gpd_list_node;\n\tstruct list_head parent_links;\n\tstruct list_head child_links;\n\tstruct list_head dev_list;\n\tstruct dev_power_governor *gov;\n\tstruct work_struct power_off_work;\n\tstruct fwnode_handle *provider;\n\tbool has_provider;\n\tconst char *name;\n\tatomic_t sd_count;\n\tenum gpd_status status;\n\tunsigned int device_count;\n\tunsigned int suspended_count;\n\tunsigned int prepared_count;\n\tunsigned int performance_state;\n\tcpumask_var_t cpus;\n\tint (*power_off)(struct generic_pm_domain *);\n\tint (*power_on)(struct generic_pm_domain *);\n\tstruct raw_notifier_head power_notifiers;\n\tstruct opp_table *opp_table;\n\tunsigned int (*opp_to_performance_state)(struct generic_pm_domain *, struct dev_pm_opp *);\n\tint (*set_performance_state)(struct generic_pm_domain *, unsigned int);\n\tstruct gpd_dev_ops dev_ops;\n\ts64 max_off_time_ns;\n\tbool max_off_time_changed;\n\tbool cached_power_down_ok;\n\tbool cached_power_down_state_idx;\n\tint (*attach_dev)(struct generic_pm_domain *, struct device *);\n\tvoid (*detach_dev)(struct generic_pm_domain *, struct device *);\n\tunsigned int flags;\n\tstruct genpd_power_state *states;\n\tvoid (*free_states)(struct genpd_power_state *, unsigned int);\n\tunsigned int state_count;\n\tunsigned int state_idx;\n\tktime_t on_time;\n\tktime_t accounting_time;\n\tconst struct genpd_lock_ops *lock_ops;\n\tunion {\n\t\tstruct mutex mlock;\n\t\tstruct {\n\t\t\tspinlock_t slock;\n\t\t\tlong unsigned int lock_flags;\n\t\t};\n\t};\n};\n\nstruct genpd_lock_ops {\n\tvoid (*lock)(struct generic_pm_domain *);\n\tvoid (*lock_nested)(struct generic_pm_domain *, int);\n\tint (*lock_interruptible)(struct generic_pm_domain *);\n\tvoid (*unlock)(struct generic_pm_domain *);\n};\n\nstruct gpd_link {\n\tstruct generic_pm_domain *parent;\n\tstruct list_head parent_node;\n\tstruct generic_pm_domain *child;\n\tstruct list_head child_node;\n\tunsigned int performance_state;\n\tunsigned int prev_performance_state;\n};\n\nstruct gpd_timing_data {\n\ts64 suspend_latency_ns;\n\ts64 resume_latency_ns;\n\ts64 effective_constraint_ns;\n\tbool constraint_changed;\n\tbool cached_suspend_ok;\n};\n\nstruct generic_pm_domain_data {\n\tstruct pm_domain_data base;\n\tstruct gpd_timing_data td;\n\tstruct notifier_block nb;\n\tstruct notifier_block *power_nb;\n\tint cpu;\n\tunsigned int performance_state;\n\tvoid *data;\n};\n\nstruct pm_clk_notifier_block {\n\tstruct notifier_block nb;\n\tstruct dev_pm_domain *pm_domain;\n\tchar *con_ids[0];\n};\n\nenum pce_status {\n\tPCE_STATUS_NONE = 0,\n\tPCE_STATUS_ACQUIRED = 1,\n\tPCE_STATUS_ENABLED = 2,\n\tPCE_STATUS_ERROR = 3,\n};\n\nstruct pm_clock_entry {\n\tstruct list_head node;\n\tchar *con_id;\n\tstruct clk *clk;\n\tenum pce_status status;\n};\n\nstruct firmware_fallback_config {\n\tunsigned int force_sysfs_fallback;\n\tunsigned int ignore_sysfs_fallback;\n\tint old_timeout;\n\tint loading_timeout;\n};\n\nenum fw_opt {\n\tFW_OPT_UEVENT = 1,\n\tFW_OPT_NOWAIT = 2,\n\tFW_OPT_USERHELPER = 4,\n\tFW_OPT_NO_WARN = 8,\n\tFW_OPT_NOCACHE = 16,\n\tFW_OPT_NOFALLBACK_SYSFS = 32,\n\tFW_OPT_FALLBACK_PLATFORM = 64,\n\tFW_OPT_PARTIAL = 128,\n};\n\nenum fw_status {\n\tFW_STATUS_UNKNOWN = 0,\n\tFW_STATUS_LOADING = 1,\n\tFW_STATUS_DONE = 2,\n\tFW_STATUS_ABORTED = 3,\n};\n\nstruct fw_state {\n\tstruct completion completion;\n\tenum fw_status status;\n};\n\nstruct firmware_cache;\n\nstruct fw_priv {\n\tstruct kref ref;\n\tstruct list_head list;\n\tstruct firmware_cache *fwc;\n\tstruct fw_state fw_st;\n\tvoid *data;\n\tsize_t size;\n\tsize_t allocated_size;\n\tsize_t offset;\n\tu32 opt_flags;\n\tbool is_paged_buf;\n\tstruct page **pages;\n\tint nr_pages;\n\tint page_array_size;\n\tbool need_uevent;\n\tstruct list_head pending_list;\n\tconst char *fw_name;\n};\n\nstruct firmware_cache {\n\tspinlock_t lock;\n\tstruct list_head head;\n\tint state;\n\tspinlock_t name_lock;\n\tstruct list_head fw_names;\n\tstruct delayed_work work;\n\tstruct notifier_block pm_notify;\n};\n\nstruct fw_cache_entry {\n\tstruct list_head list;\n\tconst char *name;\n};\n\nstruct fw_name_devm {\n\tlong unsigned int magic;\n\tconst char *name;\n};\n\nstruct firmware_work {\n\tstruct work_struct work;\n\tstruct module *module;\n\tconst char *name;\n\tstruct device *device;\n\tvoid *context;\n\tvoid (*cont)(const struct firmware *, void *);\n\tu32 opt_flags;\n};\n\nstruct fw_sysfs {\n\tbool nowait;\n\tstruct device dev;\n\tstruct fw_priv *fw_priv;\n\tstruct firmware *fw;\n};\n\nstruct node_access_nodes {\n\tstruct device dev;\n\tstruct list_head list_node;\n\tunsigned int access;\n\tstruct node_hmem_attrs hmem_attrs;\n};\n\nstruct node_cache_info {\n\tstruct device dev;\n\tstruct list_head node;\n\tstruct node_cache_attrs cache_attrs;\n};\n\nstruct node_attr {\n\tstruct device_attribute attr;\n\tenum node_states state;\n};\n\nstruct for_each_memory_block_cb_data {\n\twalk_memory_blocks_func_t func;\n\tvoid *arg;\n};\n\nstruct reg_sequence {\n\tunsigned int reg;\n\tunsigned int def;\n\tunsigned int delay_us;\n};\n\ntypedef int (*regmap_hw_write)(void *, const void *, size_t);\n\ntypedef int (*regmap_hw_gather_write)(void *, const void *, size_t, const void *, size_t);\n\nstruct regmap_async;\n\ntypedef int (*regmap_hw_async_write)(void *, const void *, size_t, const void *, size_t, struct regmap_async *);\n\nstruct regmap___2;\n\nstruct regmap_async {\n\tstruct list_head list;\n\tstruct regmap___2 *map;\n\tvoid *work_buf;\n};\n\ntypedef int (*regmap_hw_read)(void *, const void *, size_t, void *, size_t);\n\ntypedef int (*regmap_hw_reg_read)(void *, unsigned int, unsigned int *);\n\ntypedef int (*regmap_hw_reg_write)(void *, unsigned int, unsigned int);\n\ntypedef int (*regmap_hw_reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);\n\ntypedef struct regmap_async * (*regmap_hw_async_alloc)();\n\ntypedef void (*regmap_hw_free_context)(void *);\n\nstruct regmap_bus {\n\tbool fast_io;\n\tregmap_hw_write write;\n\tregmap_hw_gather_write gather_write;\n\tregmap_hw_async_write async_write;\n\tregmap_hw_reg_write reg_write;\n\tregmap_hw_reg_update_bits reg_update_bits;\n\tregmap_hw_read read;\n\tregmap_hw_reg_read reg_read;\n\tregmap_hw_free_context free_context;\n\tregmap_hw_async_alloc async_alloc;\n\tu8 read_flag_mask;\n\tenum regmap_endian reg_format_endian_default;\n\tenum regmap_endian val_format_endian_default;\n\tsize_t max_raw_read;\n\tsize_t max_raw_write;\n};\n\nstruct reg_field {\n\tunsigned int reg;\n\tunsigned int lsb;\n\tunsigned int msb;\n\tunsigned int id_size;\n\tunsigned int id_offset;\n};\n\nstruct regmap_format {\n\tsize_t buf_size;\n\tsize_t reg_bytes;\n\tsize_t pad_bytes;\n\tsize_t val_bytes;\n\tvoid (*format_write)(struct regmap___2 *, unsigned int, unsigned int);\n\tvoid (*format_reg)(void *, unsigned int, unsigned int);\n\tvoid (*format_val)(void *, unsigned int, unsigned int);\n\tunsigned int (*parse_val)(const void *);\n\tvoid (*parse_inplace)(void *);\n};\n\nstruct hwspinlock;\n\nstruct regcache_ops;\n\nstruct regmap___2 {\n\tunion {\n\t\tstruct mutex mutex;\n\t\tstruct {\n\t\t\tspinlock_t spinlock;\n\t\t\tlong unsigned int spinlock_flags;\n\t\t};\n\t};\n\tregmap_lock lock;\n\tregmap_unlock unlock;\n\tvoid *lock_arg;\n\tgfp_t alloc_flags;\n\tstruct device *dev;\n\tvoid *work_buf;\n\tstruct regmap_format format;\n\tconst struct regmap_bus *bus;\n\tvoid *bus_context;\n\tconst char *name;\n\tbool async;\n\tspinlock_t async_lock;\n\twait_queue_head_t async_waitq;\n\tstruct list_head async_list;\n\tstruct list_head async_free;\n\tint async_ret;\n\tbool debugfs_disable;\n\tstruct dentry *debugfs;\n\tconst char *debugfs_name;\n\tunsigned int debugfs_reg_len;\n\tunsigned int debugfs_val_len;\n\tunsigned int debugfs_tot_len;\n\tstruct list_head debugfs_off_cache;\n\tstruct mutex cache_lock;\n\tunsigned int max_register;\n\tbool (*writeable_reg)(struct device *, unsigned int);\n\tbool (*readable_reg)(struct device *, unsigned int);\n\tbool (*volatile_reg)(struct device *, unsigned int);\n\tbool (*precious_reg)(struct device *, unsigned int);\n\tbool (*writeable_noinc_reg)(struct device *, unsigned int);\n\tbool (*readable_noinc_reg)(struct device *, unsigned int);\n\tconst struct regmap_access_table *wr_table;\n\tconst struct regmap_access_table *rd_table;\n\tconst struct regmap_access_table *volatile_table;\n\tconst struct regmap_access_table *precious_table;\n\tconst struct regmap_access_table *wr_noinc_table;\n\tconst struct regmap_access_table *rd_noinc_table;\n\tint (*reg_read)(void *, unsigned int, unsigned int *);\n\tint (*reg_write)(void *, unsigned int, unsigned int);\n\tint (*reg_update_bits)(void *, unsigned int, unsigned int, unsigned int);\n\tbool defer_caching;\n\tlong unsigned int read_flag_mask;\n\tlong unsigned int write_flag_mask;\n\tint reg_shift;\n\tint reg_stride;\n\tint reg_stride_order;\n\tconst struct regcache_ops *cache_ops;\n\tenum regcache_type cache_type;\n\tunsigned int cache_size_raw;\n\tunsigned int cache_word_size;\n\tunsigned int num_reg_defaults;\n\tunsigned int num_reg_defaults_raw;\n\tbool cache_only;\n\tbool cache_bypass;\n\tbool cache_free;\n\tstruct reg_default *reg_defaults;\n\tconst void *reg_defaults_raw;\n\tvoid *cache;\n\tbool cache_dirty;\n\tbool no_sync_defaults;\n\tstruct reg_sequence *patch;\n\tint patch_regs;\n\tbool use_single_read;\n\tbool use_single_write;\n\tbool can_multi_write;\n\tsize_t max_raw_read;\n\tsize_t max_raw_write;\n\tstruct rb_root range_tree;\n\tvoid *selector_work_buf;\n\tstruct hwspinlock *hwlock;\n\tbool can_sleep;\n};\n\nstruct regcache_ops {\n\tconst char *name;\n\tenum regcache_type type;\n\tint (*init)(struct regmap___2 *);\n\tint (*exit)(struct regmap___2 *);\n\tvoid (*debugfs_init)(struct regmap___2 *);\n\tint (*read)(struct regmap___2 *, unsigned int, unsigned int *);\n\tint (*write)(struct regmap___2 *, unsigned int, unsigned int);\n\tint (*sync)(struct regmap___2 *, unsigned int, unsigned int);\n\tint (*drop)(struct regmap___2 *, unsigned int, unsigned int);\n};\n\nstruct regmap_range_node {\n\tstruct rb_node node;\n\tconst char *name;\n\tstruct regmap___2 *map;\n\tunsigned int range_min;\n\tunsigned int range_max;\n\tunsigned int selector_reg;\n\tunsigned int selector_mask;\n\tint selector_shift;\n\tunsigned int window_start;\n\tunsigned int window_len;\n};\n\nstruct regmap_field {\n\tstruct regmap___2 *regmap;\n\tunsigned int mask;\n\tunsigned int shift;\n\tunsigned int reg;\n\tunsigned int id_size;\n\tunsigned int id_offset;\n};\n\nstruct trace_event_raw_regmap_reg {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tunsigned int reg;\n\tunsigned int val;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_regmap_block {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tunsigned int reg;\n\tint count;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_regcache_sync {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tu32 __data_loc_status;\n\tu32 __data_loc_type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_regmap_bool {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tint flag;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_regmap_async {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_regcache_drop_region {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tunsigned int from;\n\tunsigned int to;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_regmap_reg {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_regmap_block {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_regcache_sync {\n\tu32 name;\n\tu32 status;\n\tu32 type;\n};\n\nstruct trace_event_data_offsets_regmap_bool {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_regmap_async {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_regcache_drop_region {\n\tu32 name;\n};\n\ntypedef void (*btf_trace_regmap_reg_write)(void *, struct regmap___2 *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_regmap_reg_read)(void *, struct regmap___2 *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_regmap_reg_read_cache)(void *, struct regmap___2 *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_regmap_hw_read_start)(void *, struct regmap___2 *, unsigned int, int);\n\ntypedef void (*btf_trace_regmap_hw_read_done)(void *, struct regmap___2 *, unsigned int, int);\n\ntypedef void (*btf_trace_regmap_hw_write_start)(void *, struct regmap___2 *, unsigned int, int);\n\ntypedef void (*btf_trace_regmap_hw_write_done)(void *, struct regmap___2 *, unsigned int, int);\n\ntypedef void (*btf_trace_regcache_sync)(void *, struct regmap___2 *, const char *, const char *);\n\ntypedef void (*btf_trace_regmap_cache_only)(void *, struct regmap___2 *, bool);\n\ntypedef void (*btf_trace_regmap_cache_bypass)(void *, struct regmap___2 *, bool);\n\ntypedef void (*btf_trace_regmap_async_write_start)(void *, struct regmap___2 *, unsigned int, int);\n\ntypedef void (*btf_trace_regmap_async_io_complete)(void *, struct regmap___2 *);\n\ntypedef void (*btf_trace_regmap_async_complete_start)(void *, struct regmap___2 *);\n\ntypedef void (*btf_trace_regmap_async_complete_done)(void *, struct regmap___2 *);\n\ntypedef void (*btf_trace_regcache_drop_region)(void *, struct regmap___2 *, unsigned int, unsigned int);\n\nstruct regcache_rbtree_node {\n\tvoid *block;\n\tlong int *cache_present;\n\tunsigned int base_reg;\n\tunsigned int blklen;\n\tstruct rb_node node;\n};\n\nstruct regcache_rbtree_ctx {\n\tstruct rb_root root;\n\tstruct regcache_rbtree_node *cached_rbnode;\n};\n\nstruct regmap_debugfs_off_cache {\n\tstruct list_head list;\n\toff_t min;\n\toff_t max;\n\tunsigned int base_reg;\n\tunsigned int max_reg;\n};\n\nstruct regmap_debugfs_node {\n\tstruct regmap___2 *map;\n\tstruct list_head link;\n};\n\nstruct i2c_msg {\n\t__u16 addr;\n\t__u16 flags;\n\t__u16 len;\n\t__u8 *buf;\n};\n\nunion i2c_smbus_data {\n\t__u8 byte;\n\t__u16 word;\n\t__u8 block[34];\n};\n\nenum i2c_slave_event {\n\tI2C_SLAVE_READ_REQUESTED = 0,\n\tI2C_SLAVE_WRITE_REQUESTED = 1,\n\tI2C_SLAVE_READ_PROCESSED = 2,\n\tI2C_SLAVE_WRITE_RECEIVED = 3,\n\tI2C_SLAVE_STOP = 4,\n};\n\nstruct i2c_client;\n\ntypedef int (*i2c_slave_cb_t)(struct i2c_client *, enum i2c_slave_event, u8 *);\n\nstruct i2c_adapter;\n\nstruct i2c_client {\n\tshort unsigned int flags;\n\tshort unsigned int addr;\n\tchar name[20];\n\tstruct i2c_adapter *adapter;\n\tstruct device dev;\n\tint init_irq;\n\tint irq;\n\tstruct list_head detected;\n\ti2c_slave_cb_t slave_cb;\n};\n\nstruct i2c_algorithm;\n\nstruct i2c_lock_operations;\n\nstruct i2c_bus_recovery_info;\n\nstruct i2c_adapter_quirks;\n\nstruct i2c_adapter {\n\tstruct module *owner;\n\tunsigned int class;\n\tconst struct i2c_algorithm *algo;\n\tvoid *algo_data;\n\tconst struct i2c_lock_operations *lock_ops;\n\tstruct rt_mutex bus_lock;\n\tstruct rt_mutex mux_lock;\n\tint timeout;\n\tint retries;\n\tstruct device dev;\n\tlong unsigned int locked_flags;\n\tint nr;\n\tchar name[48];\n\tstruct completion dev_released;\n\tstruct mutex userspace_clients_lock;\n\tstruct list_head userspace_clients;\n\tstruct i2c_bus_recovery_info *bus_recovery_info;\n\tconst struct i2c_adapter_quirks *quirks;\n\tstruct irq_domain *host_notify_domain;\n};\n\nstruct i2c_algorithm {\n\tint (*master_xfer)(struct i2c_adapter *, struct i2c_msg *, int);\n\tint (*master_xfer_atomic)(struct i2c_adapter *, struct i2c_msg *, int);\n\tint (*smbus_xfer)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);\n\tint (*smbus_xfer_atomic)(struct i2c_adapter *, u16, short unsigned int, char, u8, int, union i2c_smbus_data *);\n\tu32 (*functionality)(struct i2c_adapter *);\n\tint (*reg_slave)(struct i2c_client *);\n\tint (*unreg_slave)(struct i2c_client *);\n};\n\nstruct i2c_lock_operations {\n\tvoid (*lock_bus)(struct i2c_adapter *, unsigned int);\n\tint (*trylock_bus)(struct i2c_adapter *, unsigned int);\n\tvoid (*unlock_bus)(struct i2c_adapter *, unsigned int);\n};\n\nstruct i2c_bus_recovery_info {\n\tint (*recover_bus)(struct i2c_adapter *);\n\tint (*get_scl)(struct i2c_adapter *);\n\tvoid (*set_scl)(struct i2c_adapter *, int);\n\tint (*get_sda)(struct i2c_adapter *);\n\tvoid (*set_sda)(struct i2c_adapter *, int);\n\tint (*get_bus_free)(struct i2c_adapter *);\n\tvoid (*prepare_recovery)(struct i2c_adapter *);\n\tvoid (*unprepare_recovery)(struct i2c_adapter *);\n\tstruct gpio_desc___2 *scl_gpiod;\n\tstruct gpio_desc___2 *sda_gpiod;\n\tstruct pinctrl *pinctrl;\n\tstruct pinctrl_state *pins_default;\n\tstruct pinctrl_state *pins_gpio;\n};\n\nstruct i2c_adapter_quirks {\n\tu64 flags;\n\tint max_num_msgs;\n\tu16 max_write_len;\n\tu16 max_read_len;\n\tu16 max_comb_1st_msg_len;\n\tu16 max_comb_2nd_msg_len;\n};\n\nstruct regmap_mmio_context {\n\tvoid *regs;\n\tunsigned int val_bytes;\n\tbool relaxed_mmio;\n\tbool attached_clk;\n\tstruct clk *clk;\n\tvoid (*reg_write)(struct regmap_mmio_context *, unsigned int, unsigned int);\n\tunsigned int (*reg_read)(struct regmap_mmio_context *, unsigned int);\n};\n\nstruct regmap_irq_chip_data___2 {\n\tstruct mutex lock;\n\tstruct irq_chip irq_chip;\n\tstruct regmap___2 *map;\n\tconst struct regmap_irq_chip *chip;\n\tint irq_base;\n\tstruct irq_domain *domain;\n\tint irq;\n\tint wake_count;\n\tvoid *status_reg_buf;\n\tunsigned int *main_status_buf;\n\tunsigned int *status_buf;\n\tunsigned int *mask_buf;\n\tunsigned int *mask_buf_def;\n\tunsigned int *wake_buf;\n\tunsigned int *type_buf;\n\tunsigned int *type_buf_def;\n\tunsigned int irq_reg_stride;\n\tunsigned int type_reg_stride;\n\tbool clear_status: 1;\n};\n\nstruct devcd_entry {\n\tstruct device devcd_dev;\n\tvoid *data;\n\tsize_t datalen;\n\tstruct module *owner;\n\tssize_t (*read)(char *, loff_t, size_t, void *, size_t);\n\tvoid (*free)(void *);\n\tstruct delayed_work del_wk;\n\tstruct device *failing_dev;\n};\n\ntypedef void (*irq_write_msi_msg_t)(struct msi_desc *, struct msi_msg *);\n\nstruct platform_msi_priv_data {\n\tstruct device *dev;\n\tvoid *host_data;\n\tmsi_alloc_info_t arg;\n\tirq_write_msi_msg_t write_msg;\n\tint devid;\n};\n\nstruct test_struct {\n\tchar *get;\n\tchar *put;\n\tvoid (*get_handler)(char *);\n\tint (*put_handler)(char *, char *);\n};\n\nstruct test_state {\n\tchar *name;\n\tstruct test_struct *tst;\n\tint idx;\n\tint (*run_test)(int, int);\n\tint (*validate_put)(char *);\n};\n\nstruct i2c_device_id {\n\tchar name[20];\n\tkernel_ulong_t driver_data;\n};\n\nenum i2c_alert_protocol {\n\tI2C_PROTOCOL_SMBUS_ALERT = 0,\n\tI2C_PROTOCOL_SMBUS_HOST_NOTIFY = 1,\n};\n\nstruct i2c_board_info;\n\nstruct i2c_driver {\n\tunsigned int class;\n\tint (*probe)(struct i2c_client *, const struct i2c_device_id *);\n\tint (*remove)(struct i2c_client *);\n\tint (*probe_new)(struct i2c_client *);\n\tvoid (*shutdown)(struct i2c_client *);\n\tvoid (*alert)(struct i2c_client *, enum i2c_alert_protocol, unsigned int);\n\tint (*command)(struct i2c_client *, unsigned int, void *);\n\tstruct device_driver driver;\n\tconst struct i2c_device_id *id_table;\n\tint (*detect)(struct i2c_client *, struct i2c_board_info *);\n\tconst short unsigned int *address_list;\n\tstruct list_head clients;\n};\n\nstruct i2c_board_info {\n\tchar type[20];\n\tshort unsigned int flags;\n\tshort unsigned int addr;\n\tconst char *dev_name;\n\tvoid *platform_data;\n\tstruct device_node *of_node;\n\tstruct fwnode_handle *fwnode;\n\tconst struct property_entry *properties;\n\tconst struct resource *resources;\n\tunsigned int num_resources;\n\tint irq;\n};\n\nstruct mfd_cell_acpi_match {\n\tconst char *pnpid;\n\tconst long long unsigned int adr;\n};\n\nstruct mfd_of_node_entry {\n\tstruct list_head list;\n\tstruct device *dev;\n\tstruct device_node *np;\n};\n\nenum axp20x_variants {\n\tAXP152_ID = 0,\n\tAXP202_ID = 1,\n\tAXP209_ID = 2,\n\tAXP221_ID = 3,\n\tAXP223_ID = 4,\n\tAXP288_ID = 5,\n\tAXP803_ID = 6,\n\tAXP806_ID = 7,\n\tAXP809_ID = 8,\n\tAXP813_ID = 9,\n\tNR_AXP20X_VARIANTS = 10,\n};\n\nenum {\n\tAXP152_IRQ_LDO0IN_CONNECT = 1,\n\tAXP152_IRQ_LDO0IN_REMOVAL = 2,\n\tAXP152_IRQ_ALDO0IN_CONNECT = 3,\n\tAXP152_IRQ_ALDO0IN_REMOVAL = 4,\n\tAXP152_IRQ_DCDC1_V_LOW = 5,\n\tAXP152_IRQ_DCDC2_V_LOW = 6,\n\tAXP152_IRQ_DCDC3_V_LOW = 7,\n\tAXP152_IRQ_DCDC4_V_LOW = 8,\n\tAXP152_IRQ_PEK_SHORT = 9,\n\tAXP152_IRQ_PEK_LONG = 10,\n\tAXP152_IRQ_TIMER = 11,\n\tAXP152_IRQ_PEK_RIS_EDGE = 12,\n\tAXP152_IRQ_PEK_FAL_EDGE = 13,\n\tAXP152_IRQ_GPIO3_INPUT = 14,\n\tAXP152_IRQ_GPIO2_INPUT = 15,\n\tAXP152_IRQ_GPIO1_INPUT = 16,\n\tAXP152_IRQ_GPIO0_INPUT = 17,\n};\n\nenum {\n\tAXP20X_IRQ_ACIN_OVER_V = 1,\n\tAXP20X_IRQ_ACIN_PLUGIN = 2,\n\tAXP20X_IRQ_ACIN_REMOVAL = 3,\n\tAXP20X_IRQ_VBUS_OVER_V = 4,\n\tAXP20X_IRQ_VBUS_PLUGIN = 5,\n\tAXP20X_IRQ_VBUS_REMOVAL = 6,\n\tAXP20X_IRQ_VBUS_V_LOW = 7,\n\tAXP20X_IRQ_BATT_PLUGIN = 8,\n\tAXP20X_IRQ_BATT_REMOVAL = 9,\n\tAXP20X_IRQ_BATT_ENT_ACT_MODE = 10,\n\tAXP20X_IRQ_BATT_EXIT_ACT_MODE = 11,\n\tAXP20X_IRQ_CHARG = 12,\n\tAXP20X_IRQ_CHARG_DONE = 13,\n\tAXP20X_IRQ_BATT_TEMP_HIGH = 14,\n\tAXP20X_IRQ_BATT_TEMP_LOW = 15,\n\tAXP20X_IRQ_DIE_TEMP_HIGH = 16,\n\tAXP20X_IRQ_CHARG_I_LOW = 17,\n\tAXP20X_IRQ_DCDC1_V_LONG = 18,\n\tAXP20X_IRQ_DCDC2_V_LONG = 19,\n\tAXP20X_IRQ_DCDC3_V_LONG = 20,\n\tAXP20X_IRQ_PEK_SHORT = 22,\n\tAXP20X_IRQ_PEK_LONG = 23,\n\tAXP20X_IRQ_N_OE_PWR_ON = 24,\n\tAXP20X_IRQ_N_OE_PWR_OFF = 25,\n\tAXP20X_IRQ_VBUS_VALID = 26,\n\tAXP20X_IRQ_VBUS_NOT_VALID = 27,\n\tAXP20X_IRQ_VBUS_SESS_VALID = 28,\n\tAXP20X_IRQ_VBUS_SESS_END = 29,\n\tAXP20X_IRQ_LOW_PWR_LVL1 = 30,\n\tAXP20X_IRQ_LOW_PWR_LVL2 = 31,\n\tAXP20X_IRQ_TIMER = 32,\n\tAXP20X_IRQ_PEK_RIS_EDGE = 33,\n\tAXP20X_IRQ_PEK_FAL_EDGE = 34,\n\tAXP20X_IRQ_GPIO3_INPUT = 35,\n\tAXP20X_IRQ_GPIO2_INPUT = 36,\n\tAXP20X_IRQ_GPIO1_INPUT = 37,\n\tAXP20X_IRQ_GPIO0_INPUT = 38,\n};\n\nenum axp22x_irqs {\n\tAXP22X_IRQ_ACIN_OVER_V = 1,\n\tAXP22X_IRQ_ACIN_PLUGIN = 2,\n\tAXP22X_IRQ_ACIN_REMOVAL = 3,\n\tAXP22X_IRQ_VBUS_OVER_V = 4,\n\tAXP22X_IRQ_VBUS_PLUGIN = 5,\n\tAXP22X_IRQ_VBUS_REMOVAL = 6,\n\tAXP22X_IRQ_VBUS_V_LOW = 7,\n\tAXP22X_IRQ_BATT_PLUGIN = 8,\n\tAXP22X_IRQ_BATT_REMOVAL = 9,\n\tAXP22X_IRQ_BATT_ENT_ACT_MODE = 10,\n\tAXP22X_IRQ_BATT_EXIT_ACT_MODE = 11,\n\tAXP22X_IRQ_CHARG = 12,\n\tAXP22X_IRQ_CHARG_DONE = 13,\n\tAXP22X_IRQ_BATT_TEMP_HIGH = 14,\n\tAXP22X_IRQ_BATT_TEMP_LOW = 15,\n\tAXP22X_IRQ_DIE_TEMP_HIGH = 16,\n\tAXP22X_IRQ_PEK_SHORT = 17,\n\tAXP22X_IRQ_PEK_LONG = 18,\n\tAXP22X_IRQ_LOW_PWR_LVL1 = 19,\n\tAXP22X_IRQ_LOW_PWR_LVL2 = 20,\n\tAXP22X_IRQ_TIMER = 21,\n\tAXP22X_IRQ_PEK_RIS_EDGE = 22,\n\tAXP22X_IRQ_PEK_FAL_EDGE = 23,\n\tAXP22X_IRQ_GPIO1_INPUT = 24,\n\tAXP22X_IRQ_GPIO0_INPUT = 25,\n};\n\nenum axp288_irqs {\n\tAXP288_IRQ_VBUS_FALL = 2,\n\tAXP288_IRQ_VBUS_RISE = 3,\n\tAXP288_IRQ_OV = 4,\n\tAXP288_IRQ_FALLING_ALT = 5,\n\tAXP288_IRQ_RISING_ALT = 6,\n\tAXP288_IRQ_OV_ALT = 7,\n\tAXP288_IRQ_DONE = 10,\n\tAXP288_IRQ_CHARGING = 11,\n\tAXP288_IRQ_SAFE_QUIT = 12,\n\tAXP288_IRQ_SAFE_ENTER = 13,\n\tAXP288_IRQ_ABSENT = 14,\n\tAXP288_IRQ_APPEND = 15,\n\tAXP288_IRQ_QWBTU = 16,\n\tAXP288_IRQ_WBTU = 17,\n\tAXP288_IRQ_QWBTO = 18,\n\tAXP288_IRQ_WBTO = 19,\n\tAXP288_IRQ_QCBTU = 20,\n\tAXP288_IRQ_CBTU = 21,\n\tAXP288_IRQ_QCBTO = 22,\n\tAXP288_IRQ_CBTO = 23,\n\tAXP288_IRQ_WL2 = 24,\n\tAXP288_IRQ_WL1 = 25,\n\tAXP288_IRQ_GPADC = 26,\n\tAXP288_IRQ_OT = 31,\n\tAXP288_IRQ_GPIO0 = 32,\n\tAXP288_IRQ_GPIO1 = 33,\n\tAXP288_IRQ_POKO = 34,\n\tAXP288_IRQ_POKL = 35,\n\tAXP288_IRQ_POKS = 36,\n\tAXP288_IRQ_POKN = 37,\n\tAXP288_IRQ_POKP = 38,\n\tAXP288_IRQ_TIMER = 39,\n\tAXP288_IRQ_MV_CHNG = 40,\n\tAXP288_IRQ_BC_USB_CHNG = 41,\n};\n\nenum axp803_irqs {\n\tAXP803_IRQ_ACIN_OVER_V = 1,\n\tAXP803_IRQ_ACIN_PLUGIN = 2,\n\tAXP803_IRQ_ACIN_REMOVAL = 3,\n\tAXP803_IRQ_VBUS_OVER_V = 4,\n\tAXP803_IRQ_VBUS_PLUGIN = 5,\n\tAXP803_IRQ_VBUS_REMOVAL = 6,\n\tAXP803_IRQ_BATT_PLUGIN = 7,\n\tAXP803_IRQ_BATT_REMOVAL = 8,\n\tAXP803_IRQ_BATT_ENT_ACT_MODE = 9,\n\tAXP803_IRQ_BATT_EXIT_ACT_MODE = 10,\n\tAXP803_IRQ_CHARG = 11,\n\tAXP803_IRQ_CHARG_DONE = 12,\n\tAXP803_IRQ_BATT_CHG_TEMP_HIGH = 13,\n\tAXP803_IRQ_BATT_CHG_TEMP_HIGH_END = 14,\n\tAXP803_IRQ_BATT_CHG_TEMP_LOW = 15,\n\tAXP803_IRQ_BATT_CHG_TEMP_LOW_END = 16,\n\tAXP803_IRQ_BATT_ACT_TEMP_HIGH = 17,\n\tAXP803_IRQ_BATT_ACT_TEMP_HIGH_END = 18,\n\tAXP803_IRQ_BATT_ACT_TEMP_LOW = 19,\n\tAXP803_IRQ_BATT_ACT_TEMP_LOW_END = 20,\n\tAXP803_IRQ_DIE_TEMP_HIGH = 21,\n\tAXP803_IRQ_GPADC = 22,\n\tAXP803_IRQ_LOW_PWR_LVL1 = 23,\n\tAXP803_IRQ_LOW_PWR_LVL2 = 24,\n\tAXP803_IRQ_TIMER = 25,\n\tAXP803_IRQ_PEK_RIS_EDGE = 26,\n\tAXP803_IRQ_PEK_FAL_EDGE = 27,\n\tAXP803_IRQ_PEK_SHORT = 28,\n\tAXP803_IRQ_PEK_LONG = 29,\n\tAXP803_IRQ_PEK_OVER_OFF = 30,\n\tAXP803_IRQ_GPIO1_INPUT = 31,\n\tAXP803_IRQ_GPIO0_INPUT = 32,\n\tAXP803_IRQ_BC_USB_CHNG = 33,\n\tAXP803_IRQ_MV_CHNG = 34,\n};\n\nenum axp806_irqs {\n\tAXP806_IRQ_DIE_TEMP_HIGH_LV1 = 0,\n\tAXP806_IRQ_DIE_TEMP_HIGH_LV2 = 1,\n\tAXP806_IRQ_DCDCA_V_LOW = 2,\n\tAXP806_IRQ_DCDCB_V_LOW = 3,\n\tAXP806_IRQ_DCDCC_V_LOW = 4,\n\tAXP806_IRQ_DCDCD_V_LOW = 5,\n\tAXP806_IRQ_DCDCE_V_LOW = 6,\n\tAXP806_IRQ_POK_LONG = 7,\n\tAXP806_IRQ_POK_SHORT = 8,\n\tAXP806_IRQ_WAKEUP = 9,\n\tAXP806_IRQ_POK_FALL = 10,\n\tAXP806_IRQ_POK_RISE = 11,\n};\n\nenum axp809_irqs {\n\tAXP809_IRQ_ACIN_OVER_V = 1,\n\tAXP809_IRQ_ACIN_PLUGIN = 2,\n\tAXP809_IRQ_ACIN_REMOVAL = 3,\n\tAXP809_IRQ_VBUS_OVER_V = 4,\n\tAXP809_IRQ_VBUS_PLUGIN = 5,\n\tAXP809_IRQ_VBUS_REMOVAL = 6,\n\tAXP809_IRQ_VBUS_V_LOW = 7,\n\tAXP809_IRQ_BATT_PLUGIN = 8,\n\tAXP809_IRQ_BATT_REMOVAL = 9,\n\tAXP809_IRQ_BATT_ENT_ACT_MODE = 10,\n\tAXP809_IRQ_BATT_EXIT_ACT_MODE = 11,\n\tAXP809_IRQ_CHARG = 12,\n\tAXP809_IRQ_CHARG_DONE = 13,\n\tAXP809_IRQ_BATT_CHG_TEMP_HIGH = 14,\n\tAXP809_IRQ_BATT_CHG_TEMP_HIGH_END = 15,\n\tAXP809_IRQ_BATT_CHG_TEMP_LOW = 16,\n\tAXP809_IRQ_BATT_CHG_TEMP_LOW_END = 17,\n\tAXP809_IRQ_BATT_ACT_TEMP_HIGH = 18,\n\tAXP809_IRQ_BATT_ACT_TEMP_HIGH_END = 19,\n\tAXP809_IRQ_BATT_ACT_TEMP_LOW = 20,\n\tAXP809_IRQ_BATT_ACT_TEMP_LOW_END = 21,\n\tAXP809_IRQ_DIE_TEMP_HIGH = 22,\n\tAXP809_IRQ_LOW_PWR_LVL1 = 23,\n\tAXP809_IRQ_LOW_PWR_LVL2 = 24,\n\tAXP809_IRQ_TIMER = 25,\n\tAXP809_IRQ_PEK_RIS_EDGE = 26,\n\tAXP809_IRQ_PEK_FAL_EDGE = 27,\n\tAXP809_IRQ_PEK_SHORT = 28,\n\tAXP809_IRQ_PEK_LONG = 29,\n\tAXP809_IRQ_PEK_OVER_OFF = 30,\n\tAXP809_IRQ_GPIO1_INPUT = 31,\n\tAXP809_IRQ_GPIO0_INPUT = 32,\n};\n\nstruct intel_lpss_platform_info {\n\tstruct resource *mem;\n\tint irq;\n\tlong unsigned int clk_rate;\n\tconst char *clk_con_id;\n\tstruct property_entry *properties;\n};\n\nenum intel_lpss_dev_type {\n\tLPSS_DEV_I2C = 0,\n\tLPSS_DEV_UART = 1,\n\tLPSS_DEV_SPI = 2,\n};\n\nstruct intel_lpss {\n\tconst struct intel_lpss_platform_info *info;\n\tenum intel_lpss_dev_type type;\n\tstruct clk *clk;\n\tstruct clk_lookup *clock;\n\tstruct mfd_cell *cell;\n\tstruct device *dev;\n\tvoid *priv;\n\tu32 priv_ctx[64];\n\tint devid;\n\tu32 caps;\n\tu32 active_ltr;\n\tu32 idle_ltr;\n\tstruct dentry *debugfs;\n};\n\nstruct intel_msic_ocd_pdata {\n\tunsigned int gpio;\n};\n\nstruct intel_msic_platform_data {\n\tint irq[9];\n\tstruct intel_msic_gpio_pdata *gpio;\n\tstruct intel_msic_ocd_pdata *ocd;\n};\n\nstruct intel_msic___2 {\n\tstruct platform_device *pdev;\n\tunsigned int vendor;\n\tunsigned int version;\n\tvoid *irq_base;\n};\n\nstruct syscon_platform_data {\n\tconst char *label;\n};\n\nstruct syscon {\n\tstruct device_node *np;\n\tstruct regmap *regmap;\n\tstruct list_head list;\n};\n\nstruct intel_soc_pmic_config {\n\tlong unsigned int irq_flags;\n\tstruct mfd_cell *cell_dev;\n\tint n_cell_devs;\n\tconst struct regmap_config *regmap_config;\n\tconst struct regmap_irq_chip *irq_chip;\n};\n\nenum {\n\tCHT_WC_PWRSRC_IRQ = 0,\n\tCHT_WC_THRM_IRQ = 1,\n\tCHT_WC_BCU_IRQ = 2,\n\tCHT_WC_ADC_IRQ = 3,\n\tCHT_WC_EXT_CHGR_IRQ = 4,\n\tCHT_WC_GPIO_IRQ = 5,\n\tCHT_WC_CRIT_IRQ = 7,\n};\n\nstruct dax_operations {\n\tlong int (*direct_access)(struct dax_device *, long unsigned int, long int, void **, pfn_t *);\n\tbool (*dax_supported)(struct dax_device *, struct block_device *, int, sector_t, sector_t);\n\tsize_t (*copy_from_iter)(struct dax_device *, long unsigned int, void *, size_t, struct iov_iter *);\n\tsize_t (*copy_to_iter)(struct dax_device *, long unsigned int, void *, size_t, struct iov_iter *);\n\tint (*zero_page_range)(struct dax_device *, long unsigned int, size_t);\n};\n\nstruct dax_device {\n\tstruct hlist_node list;\n\tstruct inode inode;\n\tstruct cdev cdev;\n\tconst char *host;\n\tvoid *private;\n\tlong unsigned int flags;\n\tconst struct dax_operations *ops;\n};\n\nenum dax_device_flags {\n\tDAXDEV_ALIVE = 0,\n\tDAXDEV_WRITE_CACHE = 1,\n\tDAXDEV_SYNC = 2,\n};\n\nstruct dax_region {\n\tint id;\n\tint target_node;\n\tstruct kref kref;\n\tstruct device *dev;\n\tunsigned int align;\n\tstruct ida ida;\n\tstruct resource res;\n\tstruct device *seed;\n\tstruct device *youngest;\n};\n\nstruct dax_mapping {\n\tstruct device dev;\n\tint range_id;\n\tint id;\n};\n\nstruct dev_dax_range {\n\tlong unsigned int pgoff;\n\tstruct range range;\n\tstruct dax_mapping *mapping;\n};\n\nstruct dev_dax {\n\tstruct dax_region *region;\n\tstruct dax_device *dax_dev;\n\tunsigned int align;\n\tint target_node;\n\tint id;\n\tstruct ida ida;\n\tstruct device dev;\n\tstruct dev_pagemap *pgmap;\n\tint nr_range;\n\tstruct dev_dax_range *ranges;\n};\n\nenum dev_dax_subsys {\n\tDEV_DAX_BUS = 0,\n\tDEV_DAX_CLASS = 1,\n};\n\nstruct dev_dax_data {\n\tstruct dax_region *dax_region;\n\tstruct dev_pagemap *pgmap;\n\tenum dev_dax_subsys subsys;\n\tresource_size_t size;\n\tint id;\n};\n\nstruct dax_device_driver {\n\tstruct device_driver drv;\n\tstruct list_head ids;\n\tint match_always;\n\tint (*probe)(struct dev_dax *);\n\tint (*remove)(struct dev_dax *);\n};\n\nstruct dax_id {\n\tstruct list_head list;\n\tchar dev_name[30];\n};\n\nenum id_action {\n\tID_REMOVE = 0,\n\tID_ADD = 1,\n};\n\nstruct memregion_info {\n\tint target_node;\n};\n\nstruct seqcount_ww_mutex {\n\tseqcount_t seqcount;\n};\n\ntypedef struct seqcount_ww_mutex seqcount_ww_mutex_t;\n\nstruct dma_buf_map {\n\tunion {\n\t\tvoid *vaddr_iomem;\n\t\tvoid *vaddr;\n\t};\n\tbool is_iomem;\n};\n\nstruct dma_fence_ops;\n\nstruct dma_fence {\n\tspinlock_t *lock;\n\tconst struct dma_fence_ops *ops;\n\tunion {\n\t\tstruct list_head cb_list;\n\t\tktime_t timestamp;\n\t\tstruct callback_head rcu;\n\t};\n\tu64 context;\n\tu64 seqno;\n\tlong unsigned int flags;\n\tstruct kref refcount;\n\tint error;\n};\n\nstruct dma_fence_ops {\n\tbool use_64bit_seqno;\n\tconst char * (*get_driver_name)(struct dma_fence *);\n\tconst char * (*get_timeline_name)(struct dma_fence *);\n\tbool (*enable_signaling)(struct dma_fence *);\n\tbool (*signaled)(struct dma_fence *);\n\tlong int (*wait)(struct dma_fence *, bool, long int);\n\tvoid (*release)(struct dma_fence *);\n\tvoid (*fence_value_str)(struct dma_fence *, char *, int);\n\tvoid (*timeline_value_str)(struct dma_fence *, char *, int);\n};\n\nenum dma_fence_flag_bits {\n\tDMA_FENCE_FLAG_SIGNALED_BIT = 0,\n\tDMA_FENCE_FLAG_TIMESTAMP_BIT = 1,\n\tDMA_FENCE_FLAG_ENABLE_SIGNAL_BIT = 2,\n\tDMA_FENCE_FLAG_USER_BITS = 3,\n};\n\nstruct dma_fence_cb;\n\ntypedef void (*dma_fence_func_t)(struct dma_fence *, struct dma_fence_cb *);\n\nstruct dma_fence_cb {\n\tstruct list_head node;\n\tdma_fence_func_t func;\n};\n\nstruct dma_buf;\n\nstruct dma_buf_attachment;\n\nstruct dma_buf_ops {\n\tbool cache_sgt_mapping;\n\tint (*attach)(struct dma_buf *, struct dma_buf_attachment *);\n\tvoid (*detach)(struct dma_buf *, struct dma_buf_attachment *);\n\tint (*pin)(struct dma_buf_attachment *);\n\tvoid (*unpin)(struct dma_buf_attachment *);\n\tstruct sg_table * (*map_dma_buf)(struct dma_buf_attachment *, enum dma_data_direction);\n\tvoid (*unmap_dma_buf)(struct dma_buf_attachment *, struct sg_table *, enum dma_data_direction);\n\tvoid (*release)(struct dma_buf *);\n\tint (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);\n\tint (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);\n\tint (*mmap)(struct dma_buf *, struct vm_area_struct *);\n\tint (*vmap)(struct dma_buf *, struct dma_buf_map *);\n\tvoid (*vunmap)(struct dma_buf *, struct dma_buf_map *);\n};\n\nstruct dma_buf_poll_cb_t {\n\tstruct dma_fence_cb cb;\n\twait_queue_head_t *poll;\n\t__poll_t active;\n};\n\nstruct dma_resv;\n\nstruct dma_buf {\n\tsize_t size;\n\tstruct file *file;\n\tstruct list_head attachments;\n\tconst struct dma_buf_ops *ops;\n\tstruct mutex lock;\n\tunsigned int vmapping_counter;\n\tstruct dma_buf_map vmap_ptr;\n\tconst char *exp_name;\n\tconst char *name;\n\tspinlock_t name_lock;\n\tstruct module *owner;\n\tstruct list_head list_node;\n\tvoid *priv;\n\tstruct dma_resv *resv;\n\twait_queue_head_t poll;\n\tstruct dma_buf_poll_cb_t cb_excl;\n\tstruct dma_buf_poll_cb_t cb_shared;\n};\n\nstruct dma_buf_attach_ops;\n\nstruct dma_buf_attachment {\n\tstruct dma_buf *dmabuf;\n\tstruct device *dev;\n\tstruct list_head node;\n\tstruct sg_table *sgt;\n\tenum dma_data_direction dir;\n\tbool peer2peer;\n\tconst struct dma_buf_attach_ops *importer_ops;\n\tvoid *importer_priv;\n\tvoid *priv;\n};\n\nstruct dma_resv_list;\n\nstruct dma_resv {\n\tstruct ww_mutex lock;\n\tseqcount_ww_mutex_t seq;\n\tstruct dma_fence *fence_excl;\n\tstruct dma_resv_list *fence;\n};\n\nstruct dma_buf_attach_ops {\n\tbool allow_peer2peer;\n\tvoid (*move_notify)(struct dma_buf_attachment *);\n};\n\nstruct dma_buf_export_info {\n\tconst char *exp_name;\n\tstruct module *owner;\n\tconst struct dma_buf_ops *ops;\n\tsize_t size;\n\tint flags;\n\tstruct dma_resv *resv;\n\tvoid *priv;\n};\n\nstruct dma_resv_list {\n\tstruct callback_head rcu;\n\tu32 shared_count;\n\tu32 shared_max;\n\tstruct dma_fence *shared[0];\n};\n\nstruct dma_buf_sync {\n\t__u64 flags;\n};\n\nstruct dma_buf_list {\n\tstruct list_head head;\n\tstruct mutex lock;\n};\n\nstruct trace_event_raw_dma_fence {\n\tstruct trace_entry ent;\n\tu32 __data_loc_driver;\n\tu32 __data_loc_timeline;\n\tunsigned int context;\n\tunsigned int seqno;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_dma_fence {\n\tu32 driver;\n\tu32 timeline;\n};\n\ntypedef void (*btf_trace_dma_fence_emit)(void *, struct dma_fence *);\n\ntypedef void (*btf_trace_dma_fence_init)(void *, struct dma_fence *);\n\ntypedef void (*btf_trace_dma_fence_destroy)(void *, struct dma_fence *);\n\ntypedef void (*btf_trace_dma_fence_enable_signal)(void *, struct dma_fence *);\n\ntypedef void (*btf_trace_dma_fence_signaled)(void *, struct dma_fence *);\n\ntypedef void (*btf_trace_dma_fence_wait_start)(void *, struct dma_fence *);\n\ntypedef void (*btf_trace_dma_fence_wait_end)(void *, struct dma_fence *);\n\nstruct default_wait_cb {\n\tstruct dma_fence_cb base;\n\tstruct task_struct *task;\n};\n\nstruct dma_fence_array;\n\nstruct dma_fence_array_cb {\n\tstruct dma_fence_cb cb;\n\tstruct dma_fence_array *array;\n};\n\nstruct dma_fence_array {\n\tstruct dma_fence base;\n\tspinlock_t lock;\n\tunsigned int num_fences;\n\tatomic_t num_pending;\n\tstruct dma_fence **fences;\n\tstruct irq_work work;\n};\n\nstruct dma_fence_chain {\n\tstruct dma_fence base;\n\tspinlock_t lock;\n\tstruct dma_fence *prev;\n\tu64 prev_seqno;\n\tstruct dma_fence *fence;\n\tstruct dma_fence_cb cb;\n\tstruct irq_work work;\n};\n\nenum seqno_fence_condition {\n\tSEQNO_FENCE_WAIT_GEQUAL = 0,\n\tSEQNO_FENCE_WAIT_NONZERO = 1,\n};\n\nstruct seqno_fence {\n\tstruct dma_fence base;\n\tconst struct dma_fence_ops *ops;\n\tstruct dma_buf *sync_buf;\n\tuint32_t seqno_ofs;\n\tenum seqno_fence_condition condition;\n};\n\nstruct dma_heap;\n\nstruct dma_heap_ops {\n\tint (*allocate)(struct dma_heap *, long unsigned int, long unsigned int, long unsigned int);\n};\n\nstruct dma_heap {\n\tconst char *name;\n\tconst struct dma_heap_ops *ops;\n\tvoid *priv;\n\tdev_t heap_devt;\n\tstruct list_head list;\n\tstruct cdev heap_cdev;\n};\n\nstruct dma_heap_export_info {\n\tconst char *name;\n\tconst struct dma_heap_ops *ops;\n\tvoid *priv;\n};\n\nstruct dma_heap_allocation_data {\n\t__u64 len;\n\t__u32 fd;\n\t__u32 fd_flags;\n\t__u64 heap_flags;\n};\n\nstruct system_heap_buffer {\n\tstruct dma_heap *heap;\n\tstruct list_head attachments;\n\tstruct mutex lock;\n\tlong unsigned int len;\n\tstruct sg_table sg_table;\n\tint vmap_cnt;\n\tvoid *vaddr;\n};\n\nstruct dma_heap_attachment {\n\tstruct device *dev;\n\tstruct sg_table *table;\n\tstruct list_head list;\n\tbool mapped;\n};\n\nstruct cma_heap {\n\tstruct dma_heap *heap;\n\tstruct cma *cma;\n};\n\nstruct cma_heap_buffer {\n\tstruct cma_heap *heap;\n\tstruct list_head attachments;\n\tstruct mutex lock;\n\tlong unsigned int len;\n\tstruct page *cma_pages;\n\tstruct page **pages;\n\tlong unsigned int pagecount;\n\tint vmap_cnt;\n\tvoid *vaddr;\n};\n\nstruct dma_heap_attachment___2 {\n\tstruct device *dev;\n\tstruct sg_table table;\n\tstruct list_head list;\n\tbool mapped;\n};\n\nstruct sync_file {\n\tstruct file *file;\n\tchar user_name[32];\n\tstruct list_head sync_file_list;\n\twait_queue_head_t wq;\n\tlong unsigned int flags;\n\tstruct dma_fence *fence;\n\tstruct dma_fence_cb cb;\n};\n\nstruct sync_merge_data {\n\tchar name[32];\n\t__s32 fd2;\n\t__s32 fence;\n\t__u32 flags;\n\t__u32 pad;\n};\n\nstruct sync_fence_info {\n\tchar obj_name[32];\n\tchar driver_name[32];\n\t__s32 status;\n\t__u32 flags;\n\t__u64 timestamp_ns;\n};\n\nstruct sync_file_info {\n\tchar name[32];\n\t__s32 status;\n\t__u32 flags;\n\t__u32 num_fences;\n\t__u32 pad;\n\t__u64 sync_fence_info;\n};\n\nstruct udmabuf_create {\n\t__u32 memfd;\n\t__u32 flags;\n\t__u64 offset;\n\t__u64 size;\n};\n\nstruct udmabuf_create_item {\n\t__u32 memfd;\n\t__u32 __pad;\n\t__u64 offset;\n\t__u64 size;\n};\n\nstruct udmabuf_create_list {\n\t__u32 flags;\n\t__u32 count;\n\tstruct udmabuf_create_item list[0];\n};\n\nstruct udmabuf {\n\tlong unsigned int pagecount;\n\tstruct page **pages;\n\tstruct sg_table *sg;\n\tstruct miscdevice *device;\n};\n\ntypedef __u64 blist_flags_t;\n\nenum scsi_device_state {\n\tSDEV_CREATED = 1,\n\tSDEV_RUNNING = 2,\n\tSDEV_CANCEL = 3,\n\tSDEV_DEL = 4,\n\tSDEV_QUIESCE = 5,\n\tSDEV_OFFLINE = 6,\n\tSDEV_TRANSPORT_OFFLINE = 7,\n\tSDEV_BLOCK = 8,\n\tSDEV_CREATED_BLOCK = 9,\n};\n\nstruct scsi_vpd {\n\tstruct callback_head rcu;\n\tint len;\n\tunsigned char data[0];\n};\n\nstruct Scsi_Host;\n\nstruct scsi_target;\n\nstruct scsi_device_handler;\n\nstruct scsi_device {\n\tstruct Scsi_Host *host;\n\tstruct request_queue *request_queue;\n\tstruct list_head siblings;\n\tstruct list_head same_target_siblings;\n\tatomic_t device_busy;\n\tatomic_t device_blocked;\n\tatomic_t restarts;\n\tspinlock_t list_lock;\n\tstruct list_head starved_entry;\n\tshort unsigned int queue_depth;\n\tshort unsigned int max_queue_depth;\n\tshort unsigned int last_queue_full_depth;\n\tshort unsigned int last_queue_full_count;\n\tlong unsigned int last_queue_full_time;\n\tlong unsigned int queue_ramp_up_period;\n\tlong unsigned int last_queue_ramp_up;\n\tunsigned int id;\n\tunsigned int channel;\n\tu64 lun;\n\tunsigned int manufacturer;\n\tunsigned int sector_size;\n\tvoid *hostdata;\n\tunsigned char type;\n\tchar scsi_level;\n\tchar inq_periph_qual;\n\tstruct mutex inquiry_mutex;\n\tunsigned char inquiry_len;\n\tunsigned char *inquiry;\n\tconst char *vendor;\n\tconst char *model;\n\tconst char *rev;\n\tstruct scsi_vpd *vpd_pg0;\n\tstruct scsi_vpd *vpd_pg83;\n\tstruct scsi_vpd *vpd_pg80;\n\tstruct scsi_vpd *vpd_pg89;\n\tunsigned char current_tag;\n\tstruct scsi_target *sdev_target;\n\tblist_flags_t sdev_bflags;\n\tunsigned int eh_timeout;\n\tunsigned int removable: 1;\n\tunsigned int changed: 1;\n\tunsigned int busy: 1;\n\tunsigned int lockable: 1;\n\tunsigned int locked: 1;\n\tunsigned int borken: 1;\n\tunsigned int disconnect: 1;\n\tunsigned int soft_reset: 1;\n\tunsigned int sdtr: 1;\n\tunsigned int wdtr: 1;\n\tunsigned int ppr: 1;\n\tunsigned int tagged_supported: 1;\n\tunsigned int simple_tags: 1;\n\tunsigned int was_reset: 1;\n\tunsigned int expecting_cc_ua: 1;\n\tunsigned int use_10_for_rw: 1;\n\tunsigned int use_10_for_ms: 1;\n\tunsigned int set_dbd_for_ms: 1;\n\tunsigned int no_report_opcodes: 1;\n\tunsigned int no_write_same: 1;\n\tunsigned int use_16_for_rw: 1;\n\tunsigned int skip_ms_page_8: 1;\n\tunsigned int skip_ms_page_3f: 1;\n\tunsigned int skip_vpd_pages: 1;\n\tunsigned int try_vpd_pages: 1;\n\tunsigned int use_192_bytes_for_3f: 1;\n\tunsigned int no_start_on_add: 1;\n\tunsigned int allow_restart: 1;\n\tunsigned int manage_start_stop: 1;\n\tunsigned int start_stop_pwr_cond: 1;\n\tunsigned int no_uld_attach: 1;\n\tunsigned int select_no_atn: 1;\n\tunsigned int fix_capacity: 1;\n\tunsigned int guess_capacity: 1;\n\tunsigned int retry_hwerror: 1;\n\tunsigned int last_sector_bug: 1;\n\tunsigned int no_read_disc_info: 1;\n\tunsigned int no_read_capacity_16: 1;\n\tunsigned int try_rc_10_first: 1;\n\tunsigned int security_supported: 1;\n\tunsigned int is_visible: 1;\n\tunsigned int wce_default_on: 1;\n\tunsigned int no_dif: 1;\n\tunsigned int broken_fua: 1;\n\tunsigned int lun_in_cdb: 1;\n\tunsigned int unmap_limit_for_ws: 1;\n\tunsigned int rpm_autosuspend: 1;\n\tbool offline_already;\n\tatomic_t disk_events_disable_depth;\n\tlong unsigned int supported_events[1];\n\tlong unsigned int pending_events[1];\n\tstruct list_head event_list;\n\tstruct work_struct event_work;\n\tunsigned int max_device_blocked;\n\tatomic_t iorequest_cnt;\n\tatomic_t iodone_cnt;\n\tatomic_t ioerr_cnt;\n\tstruct device sdev_gendev;\n\tstruct device sdev_dev;\n\tstruct execute_work ew;\n\tstruct work_struct requeue_work;\n\tstruct scsi_device_handler *handler;\n\tvoid *handler_data;\n\tsize_t dma_drain_len;\n\tvoid *dma_drain_buf;\n\tunsigned char access_state;\n\tstruct mutex state_mutex;\n\tenum scsi_device_state sdev_state;\n\tstruct task_struct *quiesced_by;\n\tlong unsigned int sdev_data[0];\n};\n\nenum scsi_host_state {\n\tSHOST_CREATED = 1,\n\tSHOST_RUNNING = 2,\n\tSHOST_CANCEL = 3,\n\tSHOST_DEL = 4,\n\tSHOST_RECOVERY = 5,\n\tSHOST_CANCEL_RECOVERY = 6,\n\tSHOST_DEL_RECOVERY = 7,\n};\n\nstruct scsi_host_template;\n\nstruct scsi_transport_template;\n\nstruct Scsi_Host {\n\tstruct list_head __devices;\n\tstruct list_head __targets;\n\tstruct list_head starved_list;\n\tspinlock_t default_lock;\n\tspinlock_t *host_lock;\n\tstruct mutex scan_mutex;\n\tstruct list_head eh_cmd_q;\n\tstruct task_struct *ehandler;\n\tstruct completion *eh_action;\n\twait_queue_head_t host_wait;\n\tstruct scsi_host_template *hostt;\n\tstruct scsi_transport_template *transportt;\n\tstruct blk_mq_tag_set tag_set;\n\tatomic_t host_blocked;\n\tunsigned int host_failed;\n\tunsigned int host_eh_scheduled;\n\tunsigned int host_no;\n\tint eh_deadline;\n\tlong unsigned int last_reset;\n\tunsigned int max_channel;\n\tunsigned int max_id;\n\tu64 max_lun;\n\tunsigned int unique_id;\n\tshort unsigned int max_cmd_len;\n\tint this_id;\n\tint can_queue;\n\tshort int cmd_per_lun;\n\tshort unsigned int sg_tablesize;\n\tshort unsigned int sg_prot_tablesize;\n\tunsigned int max_sectors;\n\tunsigned int max_segment_size;\n\tlong unsigned int dma_boundary;\n\tlong unsigned int virt_boundary_mask;\n\tunsigned int nr_hw_queues;\n\tunsigned int active_mode: 2;\n\tunsigned int unchecked_isa_dma: 1;\n\tunsigned int host_self_blocked: 1;\n\tunsigned int reverse_ordering: 1;\n\tunsigned int tmf_in_progress: 1;\n\tunsigned int async_scan: 1;\n\tunsigned int eh_noresume: 1;\n\tunsigned int no_write_same: 1;\n\tunsigned int host_tagset: 1;\n\tunsigned int short_inquiry: 1;\n\tunsigned int no_scsi2_lun_in_cdb: 1;\n\tchar work_q_name[20];\n\tstruct workqueue_struct *work_q;\n\tstruct workqueue_struct *tmf_work_q;\n\tunsigned int max_host_blocked;\n\tunsigned int prot_capabilities;\n\tunsigned char prot_guard_type;\n\tlong unsigned int base;\n\tlong unsigned int io_port;\n\tunsigned char n_io_port;\n\tunsigned char dma_channel;\n\tunsigned int irq;\n\tenum scsi_host_state shost_state;\n\tstruct device shost_gendev;\n\tstruct device shost_dev;\n\tvoid *shost_data;\n\tstruct device *dma_dev;\n\tlong unsigned int hostdata[0];\n};\n\nenum scsi_target_state {\n\tSTARGET_CREATED = 1,\n\tSTARGET_RUNNING = 2,\n\tSTARGET_REMOVE = 3,\n\tSTARGET_CREATED_REMOVE = 4,\n\tSTARGET_DEL = 5,\n};\n\nstruct scsi_target {\n\tstruct scsi_device *starget_sdev_user;\n\tstruct list_head siblings;\n\tstruct list_head devices;\n\tstruct device dev;\n\tstruct kref reap_ref;\n\tunsigned int channel;\n\tunsigned int id;\n\tunsigned int create: 1;\n\tunsigned int single_lun: 1;\n\tunsigned int pdt_1f_for_no_lun: 1;\n\tunsigned int no_report_luns: 1;\n\tunsigned int expecting_lun_change: 1;\n\tatomic_t target_busy;\n\tatomic_t target_blocked;\n\tunsigned int can_queue;\n\tunsigned int max_target_blocked;\n\tchar scsi_level;\n\tenum scsi_target_state state;\n\tvoid *hostdata;\n\tlong unsigned int starget_data[0];\n};\n\nstruct scsi_data_buffer {\n\tstruct sg_table table;\n\tunsigned int length;\n};\n\nstruct scsi_pointer {\n\tchar *ptr;\n\tint this_residual;\n\tstruct scatterlist *buffer;\n\tint buffers_residual;\n\tdma_addr_t dma_handle;\n\tvolatile int Status;\n\tvolatile int Message;\n\tvolatile int have_data_in;\n\tvolatile int sent_command;\n\tvolatile int phase;\n};\n\nstruct scsi_cmnd {\n\tstruct scsi_request req;\n\tstruct scsi_device *device;\n\tstruct list_head eh_entry;\n\tstruct delayed_work abort_work;\n\tstruct callback_head rcu;\n\tint eh_eflags;\n\tlong unsigned int jiffies_at_alloc;\n\tint retries;\n\tint allowed;\n\tunsigned char prot_op;\n\tunsigned char prot_type;\n\tunsigned char prot_flags;\n\tshort unsigned int cmd_len;\n\tenum dma_data_direction sc_data_direction;\n\tunsigned char *cmnd;\n\tstruct scsi_data_buffer sdb;\n\tstruct scsi_data_buffer *prot_sdb;\n\tunsigned int underflow;\n\tunsigned int transfersize;\n\tstruct request *request;\n\tunsigned char *sense_buffer;\n\tvoid (*scsi_done)(struct scsi_cmnd *);\n\tstruct scsi_pointer SCp;\n\tunsigned char *host_scribble;\n\tint result;\n\tint flags;\n\tlong unsigned int state;\n\tunsigned char tag;\n\tunsigned int extra_len;\n};\n\nenum scsi_prot_operations {\n\tSCSI_PROT_NORMAL = 0,\n\tSCSI_PROT_READ_INSERT = 1,\n\tSCSI_PROT_WRITE_STRIP = 2,\n\tSCSI_PROT_READ_STRIP = 3,\n\tSCSI_PROT_WRITE_INSERT = 4,\n\tSCSI_PROT_READ_PASS = 5,\n\tSCSI_PROT_WRITE_PASS = 6,\n};\n\nstruct scsi_driver {\n\tstruct device_driver gendrv;\n\tvoid (*rescan)(struct device *);\n\tblk_status_t (*init_command)(struct scsi_cmnd *);\n\tvoid (*uninit_command)(struct scsi_cmnd *);\n\tint (*done)(struct scsi_cmnd *);\n\tint (*eh_action)(struct scsi_cmnd *, int);\n\tvoid (*eh_reset)(struct scsi_cmnd *);\n};\n\nstruct scsi_host_cmd_pool;\n\nstruct scsi_host_template {\n\tstruct module *module;\n\tconst char *name;\n\tconst char * (*info)(struct Scsi_Host *);\n\tint (*ioctl)(struct scsi_device *, unsigned int, void *);\n\tint (*compat_ioctl)(struct scsi_device *, unsigned int, void *);\n\tint (*init_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);\n\tint (*exit_cmd_priv)(struct Scsi_Host *, struct scsi_cmnd *);\n\tint (*queuecommand)(struct Scsi_Host *, struct scsi_cmnd *);\n\tvoid (*commit_rqs)(struct Scsi_Host *, u16);\n\tint (*eh_abort_handler)(struct scsi_cmnd *);\n\tint (*eh_device_reset_handler)(struct scsi_cmnd *);\n\tint (*eh_target_reset_handler)(struct scsi_cmnd *);\n\tint (*eh_bus_reset_handler)(struct scsi_cmnd *);\n\tint (*eh_host_reset_handler)(struct scsi_cmnd *);\n\tint (*slave_alloc)(struct scsi_device *);\n\tint (*slave_configure)(struct scsi_device *);\n\tvoid (*slave_destroy)(struct scsi_device *);\n\tint (*target_alloc)(struct scsi_target *);\n\tvoid (*target_destroy)(struct scsi_target *);\n\tint (*scan_finished)(struct Scsi_Host *, long unsigned int);\n\tvoid (*scan_start)(struct Scsi_Host *);\n\tint (*change_queue_depth)(struct scsi_device *, int);\n\tint (*map_queues)(struct Scsi_Host *);\n\tbool (*dma_need_drain)(struct request *);\n\tint (*bios_param)(struct scsi_device *, struct block_device *, sector_t, int *);\n\tvoid (*unlock_native_capacity)(struct scsi_device *);\n\tint (*show_info)(struct seq_file *, struct Scsi_Host *);\n\tint (*write_info)(struct Scsi_Host *, char *, int);\n\tenum blk_eh_timer_return (*eh_timed_out)(struct scsi_cmnd *);\n\tint (*host_reset)(struct Scsi_Host *, int);\n\tconst char *proc_name;\n\tstruct proc_dir_entry *proc_dir;\n\tint can_queue;\n\tint this_id;\n\tshort unsigned int sg_tablesize;\n\tshort unsigned int sg_prot_tablesize;\n\tunsigned int max_sectors;\n\tunsigned int max_segment_size;\n\tlong unsigned int dma_boundary;\n\tlong unsigned int virt_boundary_mask;\n\tshort int cmd_per_lun;\n\tunsigned char present;\n\tint tag_alloc_policy;\n\tunsigned int track_queue_depth: 1;\n\tunsigned int supported_mode: 2;\n\tunsigned int unchecked_isa_dma: 1;\n\tunsigned int emulated: 1;\n\tunsigned int skip_settle_delay: 1;\n\tunsigned int no_write_same: 1;\n\tunsigned int host_tagset: 1;\n\tunsigned int max_host_blocked;\n\tstruct device_attribute **shost_attrs;\n\tstruct device_attribute **sdev_attrs;\n\tconst struct attribute_group **sdev_groups;\n\tu64 vendor_id;\n\tunsigned int cmd_size;\n\tstruct scsi_host_cmd_pool *cmd_pool;\n\tint rpm_autosuspend_delay;\n};\n\nstruct trace_event_raw_scsi_dispatch_cmd_start {\n\tstruct trace_entry ent;\n\tunsigned int host_no;\n\tunsigned int channel;\n\tunsigned int id;\n\tunsigned int lun;\n\tunsigned int opcode;\n\tunsigned int cmd_len;\n\tunsigned int data_sglen;\n\tunsigned int prot_sglen;\n\tunsigned char prot_op;\n\tu32 __data_loc_cmnd;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_scsi_dispatch_cmd_error {\n\tstruct trace_entry ent;\n\tunsigned int host_no;\n\tunsigned int channel;\n\tunsigned int id;\n\tunsigned int lun;\n\tint rtn;\n\tunsigned int opcode;\n\tunsigned int cmd_len;\n\tunsigned int data_sglen;\n\tunsigned int prot_sglen;\n\tunsigned char prot_op;\n\tu32 __data_loc_cmnd;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_scsi_cmd_done_timeout_template {\n\tstruct trace_entry ent;\n\tunsigned int host_no;\n\tunsigned int channel;\n\tunsigned int id;\n\tunsigned int lun;\n\tint result;\n\tunsigned int opcode;\n\tunsigned int cmd_len;\n\tunsigned int data_sglen;\n\tunsigned int prot_sglen;\n\tunsigned char prot_op;\n\tu32 __data_loc_cmnd;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_scsi_eh_wakeup {\n\tstruct trace_entry ent;\n\tunsigned int host_no;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_scsi_dispatch_cmd_start {\n\tu32 cmnd;\n};\n\nstruct trace_event_data_offsets_scsi_dispatch_cmd_error {\n\tu32 cmnd;\n};\n\nstruct trace_event_data_offsets_scsi_cmd_done_timeout_template {\n\tu32 cmnd;\n};\n\nstruct trace_event_data_offsets_scsi_eh_wakeup {};\n\ntypedef void (*btf_trace_scsi_dispatch_cmd_start)(void *, struct scsi_cmnd *);\n\ntypedef void (*btf_trace_scsi_dispatch_cmd_error)(void *, struct scsi_cmnd *, int);\n\ntypedef void (*btf_trace_scsi_dispatch_cmd_done)(void *, struct scsi_cmnd *);\n\ntypedef void (*btf_trace_scsi_dispatch_cmd_timeout)(void *, struct scsi_cmnd *);\n\ntypedef void (*btf_trace_scsi_eh_wakeup)(void *, struct Scsi_Host *);\n\nstruct scsi_transport_template {\n\tstruct transport_container host_attrs;\n\tstruct transport_container target_attrs;\n\tstruct transport_container device_attrs;\n\tint (*user_scan)(struct Scsi_Host *, uint, uint, u64);\n\tint device_size;\n\tint device_private_offset;\n\tint target_size;\n\tint target_private_offset;\n\tint host_size;\n\tunsigned int create_work_queue: 1;\n\tvoid (*eh_strategy_handler)(struct Scsi_Host *);\n};\n\nstruct scsi_host_busy_iter_data {\n\tbool (*fn)(struct scsi_cmnd *, void *, bool);\n\tvoid *priv;\n};\n\nstruct scsi_idlun {\n\t__u32 dev_id;\n\t__u32 host_unique_id;\n};\n\ntypedef void (*activate_complete)(void *, int);\n\nstruct scsi_device_handler {\n\tstruct list_head list;\n\tstruct module *module;\n\tconst char *name;\n\tint (*check_sense)(struct scsi_device *, struct scsi_sense_hdr *);\n\tint (*attach)(struct scsi_device *);\n\tvoid (*detach)(struct scsi_device *);\n\tint (*activate)(struct scsi_device *, activate_complete, void *);\n\tblk_status_t (*prep_fn)(struct scsi_device *, struct request *);\n\tint (*set_params)(struct scsi_device *, const char *);\n\tvoid (*rescan)(struct scsi_device *);\n};\n\nstruct scsi_eh_save {\n\tint result;\n\tunsigned int resid_len;\n\tint eh_eflags;\n\tenum dma_data_direction data_direction;\n\tunsigned int underflow;\n\tunsigned char cmd_len;\n\tunsigned char prot_op;\n\tunsigned char *cmnd;\n\tstruct scsi_data_buffer sdb;\n\tunsigned char eh_cmnd[16];\n\tstruct scatterlist sense_sgl;\n};\n\nstruct scsi_varlen_cdb_hdr {\n\t__u8 opcode;\n\t__u8 control;\n\t__u8 misc[5];\n\t__u8 additional_cdb_length;\n\t__be16 service_action;\n};\n\nstruct scsi_mode_data {\n\t__u32 length;\n\t__u16 block_descriptor_length;\n\t__u8 medium_type;\n\t__u8 device_specific;\n\t__u8 header_length;\n\t__u8 longlba: 1;\n};\n\nstruct scsi_event {\n\tenum scsi_device_event evt_type;\n\tstruct list_head node;\n};\n\nenum scsi_host_prot_capabilities {\n\tSHOST_DIF_TYPE1_PROTECTION = 1,\n\tSHOST_DIF_TYPE2_PROTECTION = 2,\n\tSHOST_DIF_TYPE3_PROTECTION = 4,\n\tSHOST_DIX_TYPE0_PROTECTION = 8,\n\tSHOST_DIX_TYPE1_PROTECTION = 16,\n\tSHOST_DIX_TYPE2_PROTECTION = 32,\n\tSHOST_DIX_TYPE3_PROTECTION = 64,\n};\n\nenum {\n\tACTION_FAIL = 0,\n\tACTION_REPREP = 1,\n\tACTION_RETRY = 2,\n\tACTION_DELAYED_RETRY = 3,\n};\n\nstruct value_name_pair;\n\nstruct sa_name_list {\n\tint opcode;\n\tconst struct value_name_pair *arr;\n\tint arr_sz;\n};\n\nstruct value_name_pair {\n\tint value;\n\tconst char *name;\n};\n\nstruct error_info {\n\tshort unsigned int code12;\n\tshort unsigned int size;\n};\n\nstruct error_info2 {\n\tunsigned char code1;\n\tunsigned char code2_min;\n\tunsigned char code2_max;\n\tconst char *str;\n\tconst char *fmt;\n};\n\nstruct scsi_lun {\n\t__u8 scsi_lun[8];\n};\n\nenum scsi_timeouts {\n\tSCSI_DEFAULT_EH_TIMEOUT = 10000,\n};\n\nenum scsi_scan_mode {\n\tSCSI_SCAN_INITIAL = 0,\n\tSCSI_SCAN_RESCAN = 1,\n\tSCSI_SCAN_MANUAL = 2,\n};\n\nstruct async_scan_data {\n\tstruct list_head list;\n\tstruct Scsi_Host *shost;\n\tstruct completion prev_finished;\n};\n\nenum scsi_devinfo_key {\n\tSCSI_DEVINFO_GLOBAL = 0,\n\tSCSI_DEVINFO_SPI = 1,\n};\n\nstruct scsi_dev_info_list {\n\tstruct list_head dev_info_list;\n\tchar vendor[8];\n\tchar model[16];\n\tblist_flags_t flags;\n\tunsigned int compatible;\n};\n\nstruct scsi_dev_info_list_table {\n\tstruct list_head node;\n\tstruct list_head scsi_dev_info_list;\n\tconst char *name;\n\tint key;\n};\n\nstruct double_list {\n\tstruct list_head *top;\n\tstruct list_head *bottom;\n};\n\nstruct scsi_nl_hdr {\n\t__u8 version;\n\t__u8 transport;\n\t__u16 magic;\n\t__u16 msgtype;\n\t__u16 msglen;\n};\n\nenum {\n\tSCSI_DH_OK = 0,\n\tSCSI_DH_DEV_FAILED = 1,\n\tSCSI_DH_DEV_TEMP_BUSY = 2,\n\tSCSI_DH_DEV_UNSUPP = 3,\n\tSCSI_DH_DEVICE_MAX = 4,\n\tSCSI_DH_NOTCONN = 5,\n\tSCSI_DH_CONN_FAILURE = 6,\n\tSCSI_DH_TRANSPORT_MAX = 7,\n\tSCSI_DH_IO = 8,\n\tSCSI_DH_INVALID_IO = 9,\n\tSCSI_DH_RETRY = 10,\n\tSCSI_DH_IMM_RETRY = 11,\n\tSCSI_DH_TIMED_OUT = 12,\n\tSCSI_DH_RES_TEMP_UNAVAIL = 13,\n\tSCSI_DH_DEV_OFFLINED = 14,\n\tSCSI_DH_NOMEM = 15,\n\tSCSI_DH_NOSYS = 16,\n\tSCSI_DH_DRIVER_MAX = 17,\n};\n\nstruct scsi_dh_blist {\n\tconst char *vendor;\n\tconst char *model;\n\tconst char *driver;\n};\n\nenum scsi_prot_flags {\n\tSCSI_PROT_TRANSFER_PI = 1,\n\tSCSI_PROT_GUARD_CHECK = 2,\n\tSCSI_PROT_REF_CHECK = 4,\n\tSCSI_PROT_REF_INCREMENT = 8,\n\tSCSI_PROT_IP_CHECKSUM = 16,\n};\n\nenum {\n\tSD_EXT_CDB_SIZE = 32,\n\tSD_MEMPOOL_SIZE = 2,\n};\n\nenum {\n\tSD_DEF_XFER_BLOCKS = 65535,\n\tSD_MAX_XFER_BLOCKS = 4294967295,\n\tSD_MAX_WS10_BLOCKS = 65535,\n\tSD_MAX_WS16_BLOCKS = 8388607,\n};\n\nenum {\n\tSD_LBP_FULL = 0,\n\tSD_LBP_UNMAP = 1,\n\tSD_LBP_WS16 = 2,\n\tSD_LBP_WS10 = 3,\n\tSD_LBP_ZERO = 4,\n\tSD_LBP_DISABLE = 5,\n};\n\nenum {\n\tSD_ZERO_WRITE = 0,\n\tSD_ZERO_WS = 1,\n\tSD_ZERO_WS16_UNMAP = 2,\n\tSD_ZERO_WS10_UNMAP = 3,\n};\n\nstruct opal_dev___2;\n\nstruct scsi_disk {\n\tstruct scsi_driver *driver;\n\tstruct scsi_device *device;\n\tstruct device dev;\n\tstruct gendisk *disk;\n\tstruct opal_dev___2 *opal_dev;\n\tu32 nr_zones;\n\tu32 rev_nr_zones;\n\tu32 zone_blocks;\n\tu32 rev_zone_blocks;\n\tu32 zones_optimal_open;\n\tu32 zones_optimal_nonseq;\n\tu32 zones_max_open;\n\tu32 *zones_wp_offset;\n\tspinlock_t zones_wp_offset_lock;\n\tu32 *rev_wp_offset;\n\tstruct mutex rev_mutex;\n\tstruct work_struct zone_wp_offset_work;\n\tchar *zone_wp_update_buf;\n\tatomic_t openers;\n\tsector_t capacity;\n\tint max_retries;\n\tu32 max_xfer_blocks;\n\tu32 opt_xfer_blocks;\n\tu32 max_ws_blocks;\n\tu32 max_unmap_blocks;\n\tu32 unmap_granularity;\n\tu32 unmap_alignment;\n\tu32 index;\n\tunsigned int physical_block_size;\n\tunsigned int max_medium_access_timeouts;\n\tunsigned int medium_access_timed_out;\n\tu8 media_present;\n\tu8 write_prot;\n\tu8 protection_type;\n\tu8 provisioning_mode;\n\tu8 zeroing_mode;\n\tunsigned int ATO: 1;\n\tunsigned int cache_override: 1;\n\tunsigned int WCE: 1;\n\tunsigned int RCD: 1;\n\tunsigned int DPOFUA: 1;\n\tunsigned int first_scan: 1;\n\tunsigned int lbpme: 1;\n\tunsigned int lbprz: 1;\n\tunsigned int lbpu: 1;\n\tunsigned int lbpws: 1;\n\tunsigned int lbpws10: 1;\n\tunsigned int lbpvpd: 1;\n\tunsigned int ws10: 1;\n\tunsigned int ws16: 1;\n\tunsigned int rc_basis: 2;\n\tunsigned int zoned: 2;\n\tunsigned int urswrz: 1;\n\tunsigned int security: 1;\n\tunsigned int ignore_medium_access_errors: 1;\n};\n\nenum scsi_host_guard_type {\n\tSHOST_DIX_GUARD_CRC = 1,\n\tSHOST_DIX_GUARD_IP = 2,\n};\n\nenum zbc_zone_type {\n\tZBC_ZONE_TYPE_CONV = 1,\n\tZBC_ZONE_TYPE_SEQWRITE_REQ = 2,\n\tZBC_ZONE_TYPE_SEQWRITE_PREF = 3,\n};\n\nenum zbc_zone_cond {\n\tZBC_ZONE_COND_NO_WP = 0,\n\tZBC_ZONE_COND_EMPTY = 1,\n\tZBC_ZONE_COND_IMP_OPEN = 2,\n\tZBC_ZONE_COND_EXP_OPEN = 3,\n\tZBC_ZONE_COND_CLOSED = 4,\n\tZBC_ZONE_COND_READONLY = 13,\n\tZBC_ZONE_COND_FULL = 14,\n\tZBC_ZONE_COND_OFFLINE = 15,\n};\n\nenum {\n\tmechtype_caddy = 0,\n\tmechtype_tray = 1,\n\tmechtype_popup = 2,\n\tmechtype_individual_changer = 4,\n\tmechtype_cartridge_changer = 5,\n};\n\nstruct event_header {\n\t__be16 data_len;\n\t__u8 notification_class: 3;\n\t__u8 reserved1: 4;\n\t__u8 nea: 1;\n\t__u8 supp_event_class;\n};\n\nstruct media_event_desc {\n\t__u8 media_event_code: 4;\n\t__u8 reserved1: 4;\n\t__u8 door_open: 1;\n\t__u8 media_present: 1;\n\t__u8 reserved2: 6;\n\t__u8 start_slot;\n\t__u8 end_slot;\n};\n\nstruct scsi_cd {\n\tstruct scsi_driver *driver;\n\tunsigned int capacity;\n\tstruct scsi_device *device;\n\tunsigned int vendor;\n\tlong unsigned int ms_offset;\n\tunsigned int writeable: 1;\n\tunsigned int use: 1;\n\tunsigned int xa_flag: 1;\n\tunsigned int readcd_known: 1;\n\tunsigned int readcd_cdda: 1;\n\tunsigned int media_present: 1;\n\tint tur_mismatch;\n\tbool tur_changed: 1;\n\tbool get_event_changed: 1;\n\tbool ignore_get_event: 1;\n\tstruct cdrom_device_info cdi;\n\tstruct mutex lock;\n\tstruct kref kref;\n\tstruct gendisk *disk;\n};\n\ntypedef struct scsi_cd Scsi_CD;\n\nstruct cdrom_ti {\n\t__u8 cdti_trk0;\n\t__u8 cdti_ind0;\n\t__u8 cdti_trk1;\n\t__u8 cdti_ind1;\n};\n\nstruct cdrom_tochdr {\n\t__u8 cdth_trk0;\n\t__u8 cdth_trk1;\n};\n\nstruct cdrom_tocentry {\n\t__u8 cdte_track;\n\t__u8 cdte_adr: 4;\n\t__u8 cdte_ctrl: 4;\n\t__u8 cdte_format;\n\tunion cdrom_addr cdte_addr;\n\t__u8 cdte_datamode;\n};\n\nstruct ccs_modesel_head {\n\t__u8 _r1;\n\t__u8 medium;\n\t__u8 _r2;\n\t__u8 block_desc_length;\n\t__u8 density;\n\t__u8 number_blocks_hi;\n\t__u8 number_blocks_med;\n\t__u8 number_blocks_lo;\n\t__u8 _r3;\n\t__u8 block_length_hi;\n\t__u8 block_length_med;\n\t__u8 block_length_lo;\n};\n\ntypedef struct sg_io_hdr sg_io_hdr_t;\n\nstruct sg_scsi_id {\n\tint host_no;\n\tint channel;\n\tint scsi_id;\n\tint lun;\n\tint scsi_type;\n\tshort int h_cmd_per_lun;\n\tshort int d_queue_depth;\n\tint unused[2];\n};\n\ntypedef struct sg_scsi_id sg_scsi_id_t;\n\nstruct sg_req_info {\n\tchar req_state;\n\tchar orphan;\n\tchar sg_io_owned;\n\tchar problem;\n\tint pack_id;\n\tvoid *usr_ptr;\n\tunsigned int duration;\n\tint unused;\n};\n\ntypedef struct sg_req_info sg_req_info_t;\n\nstruct sg_header {\n\tint pack_len;\n\tint reply_len;\n\tint pack_id;\n\tint result;\n\tunsigned int twelve_byte: 1;\n\tunsigned int target_status: 5;\n\tunsigned int host_status: 8;\n\tunsigned int driver_status: 8;\n\tunsigned int other_flags: 10;\n\tunsigned char sense_buffer[16];\n};\n\nstruct sg_scatter_hold {\n\tshort unsigned int k_use_sg;\n\tunsigned int sglist_len;\n\tunsigned int bufflen;\n\tstruct page **pages;\n\tint page_order;\n\tchar dio_in_use;\n\tunsigned char cmd_opcode;\n};\n\ntypedef struct sg_scatter_hold Sg_scatter_hold;\n\nstruct sg_fd;\n\nstruct sg_request {\n\tstruct list_head entry;\n\tstruct sg_fd *parentfp;\n\tSg_scatter_hold data;\n\tsg_io_hdr_t header;\n\tunsigned char sense_b[96];\n\tchar res_used;\n\tchar orphan;\n\tchar sg_io_owned;\n\tchar done;\n\tstruct request *rq;\n\tstruct bio *bio;\n\tstruct execute_work ew;\n};\n\ntypedef struct sg_request Sg_request;\n\nstruct sg_device;\n\nstruct sg_fd {\n\tstruct list_head sfd_siblings;\n\tstruct sg_device *parentdp;\n\twait_queue_head_t read_wait;\n\trwlock_t rq_list_lock;\n\tstruct mutex f_mutex;\n\tint timeout;\n\tint timeout_user;\n\tSg_scatter_hold reserve;\n\tstruct list_head rq_list;\n\tstruct fasync_struct *async_qp;\n\tSg_request req_arr[16];\n\tchar force_packid;\n\tchar cmd_q;\n\tunsigned char next_cmd_len;\n\tchar keep_orphan;\n\tchar mmap_called;\n\tchar res_in_use;\n\tstruct kref f_ref;\n\tstruct execute_work ew;\n};\n\nstruct sg_device {\n\tstruct scsi_device *device;\n\twait_queue_head_t open_wait;\n\tstruct mutex open_rel_lock;\n\tint sg_tablesize;\n\tu32 index;\n\tstruct list_head sfds;\n\trwlock_t sfd_lock;\n\tatomic_t detaching;\n\tbool exclude;\n\tint open_cnt;\n\tchar sgdebug;\n\tstruct gendisk *disk;\n\tstruct cdev *cdev;\n\tstruct kref d_ref;\n};\n\ntypedef struct sg_fd Sg_fd;\n\ntypedef struct sg_device Sg_device;\n\nstruct compat_sg_req_info {\n\tchar req_state;\n\tchar orphan;\n\tchar sg_io_owned;\n\tchar problem;\n\tint pack_id;\n\tcompat_uptr_t usr_ptr;\n\tunsigned int duration;\n\tint unused;\n};\n\nstruct sg_proc_deviter {\n\tloff_t index;\n\tsize_t max;\n};\n\nenum {\n\tATA_MAX_DEVICES = 2,\n\tATA_MAX_PRD = 256,\n\tATA_SECT_SIZE = 512,\n\tATA_MAX_SECTORS_128 = 128,\n\tATA_MAX_SECTORS = 256,\n\tATA_MAX_SECTORS_1024 = 1024,\n\tATA_MAX_SECTORS_LBA48 = 65535,\n\tATA_MAX_SECTORS_TAPE = 65535,\n\tATA_MAX_TRIM_RNUM = 64,\n\tATA_ID_WORDS = 256,\n\tATA_ID_CONFIG = 0,\n\tATA_ID_CYLS = 1,\n\tATA_ID_HEADS = 3,\n\tATA_ID_SECTORS = 6,\n\tATA_ID_SERNO = 10,\n\tATA_ID_BUF_SIZE = 21,\n\tATA_ID_FW_REV = 23,\n\tATA_ID_PROD = 27,\n\tATA_ID_MAX_MULTSECT = 47,\n\tATA_ID_DWORD_IO = 48,\n\tATA_ID_TRUSTED = 48,\n\tATA_ID_CAPABILITY = 49,\n\tATA_ID_OLD_PIO_MODES = 51,\n\tATA_ID_OLD_DMA_MODES = 52,\n\tATA_ID_FIELD_VALID = 53,\n\tATA_ID_CUR_CYLS = 54,\n\tATA_ID_CUR_HEADS = 55,\n\tATA_ID_CUR_SECTORS = 56,\n\tATA_ID_MULTSECT = 59,\n\tATA_ID_LBA_CAPACITY = 60,\n\tATA_ID_SWDMA_MODES = 62,\n\tATA_ID_MWDMA_MODES = 63,\n\tATA_ID_PIO_MODES = 64,\n\tATA_ID_EIDE_DMA_MIN = 65,\n\tATA_ID_EIDE_DMA_TIME = 66,\n\tATA_ID_EIDE_PIO = 67,\n\tATA_ID_EIDE_PIO_IORDY = 68,\n\tATA_ID_ADDITIONAL_SUPP = 69,\n\tATA_ID_QUEUE_DEPTH = 75,\n\tATA_ID_SATA_CAPABILITY = 76,\n\tATA_ID_SATA_CAPABILITY_2 = 77,\n\tATA_ID_FEATURE_SUPP = 78,\n\tATA_ID_MAJOR_VER = 80,\n\tATA_ID_COMMAND_SET_1 = 82,\n\tATA_ID_COMMAND_SET_2 = 83,\n\tATA_ID_CFSSE = 84,\n\tATA_ID_CFS_ENABLE_1 = 85,\n\tATA_ID_CFS_ENABLE_2 = 86,\n\tATA_ID_CSF_DEFAULT = 87,\n\tATA_ID_UDMA_MODES = 88,\n\tATA_ID_HW_CONFIG = 93,\n\tATA_ID_SPG = 98,\n\tATA_ID_LBA_CAPACITY_2 = 100,\n\tATA_ID_SECTOR_SIZE = 106,\n\tATA_ID_WWN = 108,\n\tATA_ID_LOGICAL_SECTOR_SIZE = 117,\n\tATA_ID_COMMAND_SET_3 = 119,\n\tATA_ID_COMMAND_SET_4 = 120,\n\tATA_ID_LAST_LUN = 126,\n\tATA_ID_DLF = 128,\n\tATA_ID_CSFO = 129,\n\tATA_ID_CFA_POWER = 160,\n\tATA_ID_CFA_KEY_MGMT = 162,\n\tATA_ID_CFA_MODES = 163,\n\tATA_ID_DATA_SET_MGMT = 169,\n\tATA_ID_SCT_CMD_XPORT = 206,\n\tATA_ID_ROT_SPEED = 217,\n\tATA_ID_PIO4 = 2,\n\tATA_ID_SERNO_LEN = 20,\n\tATA_ID_FW_REV_LEN = 8,\n\tATA_ID_PROD_LEN = 40,\n\tATA_ID_WWN_LEN = 8,\n\tATA_PCI_CTL_OFS = 2,\n\tATA_PIO0 = 1,\n\tATA_PIO1 = 3,\n\tATA_PIO2 = 7,\n\tATA_PIO3 = 15,\n\tATA_PIO4 = 31,\n\tATA_PIO5 = 63,\n\tATA_PIO6 = 127,\n\tATA_PIO4_ONLY = 16,\n\tATA_SWDMA0 = 1,\n\tATA_SWDMA1 = 3,\n\tATA_SWDMA2 = 7,\n\tATA_SWDMA2_ONLY = 4,\n\tATA_MWDMA0 = 1,\n\tATA_MWDMA1 = 3,\n\tATA_MWDMA2 = 7,\n\tATA_MWDMA3 = 15,\n\tATA_MWDMA4 = 31,\n\tATA_MWDMA12_ONLY = 6,\n\tATA_MWDMA2_ONLY = 4,\n\tATA_UDMA0 = 1,\n\tATA_UDMA1 = 3,\n\tATA_UDMA2 = 7,\n\tATA_UDMA3 = 15,\n\tATA_UDMA4 = 31,\n\tATA_UDMA5 = 63,\n\tATA_UDMA6 = 127,\n\tATA_UDMA7 = 255,\n\tATA_UDMA24_ONLY = 20,\n\tATA_UDMA_MASK_40C = 7,\n\tATA_PRD_SZ = 8,\n\tATA_PRD_TBL_SZ = 2048,\n\tATA_PRD_EOT = 2147483648,\n\tATA_DMA_TABLE_OFS = 4,\n\tATA_DMA_STATUS = 2,\n\tATA_DMA_CMD = 0,\n\tATA_DMA_WR = 8,\n\tATA_DMA_START = 1,\n\tATA_DMA_INTR = 4,\n\tATA_DMA_ERR = 2,\n\tATA_DMA_ACTIVE = 1,\n\tATA_HOB = 128,\n\tATA_NIEN = 2,\n\tATA_LBA = 64,\n\tATA_DEV1 = 16,\n\tATA_DEVICE_OBS = 160,\n\tATA_DEVCTL_OBS = 8,\n\tATA_BUSY = 128,\n\tATA_DRDY = 64,\n\tATA_DF = 32,\n\tATA_DSC = 16,\n\tATA_DRQ = 8,\n\tATA_CORR = 4,\n\tATA_SENSE = 2,\n\tATA_ERR = 1,\n\tATA_SRST = 4,\n\tATA_ICRC = 128,\n\tATA_BBK = 128,\n\tATA_UNC = 64,\n\tATA_MC = 32,\n\tATA_IDNF = 16,\n\tATA_MCR = 8,\n\tATA_ABORTED = 4,\n\tATA_TRK0NF = 2,\n\tATA_AMNF = 1,\n\tATAPI_LFS = 240,\n\tATAPI_EOM = 2,\n\tATAPI_ILI = 1,\n\tATAPI_IO = 2,\n\tATAPI_COD = 1,\n\tATA_REG_DATA = 0,\n\tATA_REG_ERR = 1,\n\tATA_REG_NSECT = 2,\n\tATA_REG_LBAL = 3,\n\tATA_REG_LBAM = 4,\n\tATA_REG_LBAH = 5,\n\tATA_REG_DEVICE = 6,\n\tATA_REG_STATUS = 7,\n\tATA_REG_FEATURE = 1,\n\tATA_REG_CMD = 7,\n\tATA_REG_BYTEL = 4,\n\tATA_REG_BYTEH = 5,\n\tATA_REG_DEVSEL = 6,\n\tATA_REG_IRQ = 2,\n\tATA_CMD_DEV_RESET = 8,\n\tATA_CMD_CHK_POWER = 229,\n\tATA_CMD_STANDBY = 226,\n\tATA_CMD_IDLE = 227,\n\tATA_CMD_EDD = 144,\n\tATA_CMD_DOWNLOAD_MICRO = 146,\n\tATA_CMD_DOWNLOAD_MICRO_DMA = 147,\n\tATA_CMD_NOP = 0,\n\tATA_CMD_FLUSH = 231,\n\tATA_CMD_FLUSH_EXT = 234,\n\tATA_CMD_ID_ATA = 236,\n\tATA_CMD_ID_ATAPI = 161,\n\tATA_CMD_SERVICE = 162,\n\tATA_CMD_READ = 200,\n\tATA_CMD_READ_EXT = 37,\n\tATA_CMD_READ_QUEUED = 38,\n\tATA_CMD_READ_STREAM_EXT = 43,\n\tATA_CMD_READ_STREAM_DMA_EXT = 42,\n\tATA_CMD_WRITE = 202,\n\tATA_CMD_WRITE_EXT = 53,\n\tATA_CMD_WRITE_QUEUED = 54,\n\tATA_CMD_WRITE_STREAM_EXT = 59,\n\tATA_CMD_WRITE_STREAM_DMA_EXT = 58,\n\tATA_CMD_WRITE_FUA_EXT = 61,\n\tATA_CMD_WRITE_QUEUED_FUA_EXT = 62,\n\tATA_CMD_FPDMA_READ = 96,\n\tATA_CMD_FPDMA_WRITE = 97,\n\tATA_CMD_NCQ_NON_DATA = 99,\n\tATA_CMD_FPDMA_SEND = 100,\n\tATA_CMD_FPDMA_RECV = 101,\n\tATA_CMD_PIO_READ = 32,\n\tATA_CMD_PIO_READ_EXT = 36,\n\tATA_CMD_PIO_WRITE = 48,\n\tATA_CMD_PIO_WRITE_EXT = 52,\n\tATA_CMD_READ_MULTI = 196,\n\tATA_CMD_READ_MULTI_EXT = 41,\n\tATA_CMD_WRITE_MULTI = 197,\n\tATA_CMD_WRITE_MULTI_EXT = 57,\n\tATA_CMD_WRITE_MULTI_FUA_EXT = 206,\n\tATA_CMD_SET_FEATURES = 239,\n\tATA_CMD_SET_MULTI = 198,\n\tATA_CMD_PACKET = 160,\n\tATA_CMD_VERIFY = 64,\n\tATA_CMD_VERIFY_EXT = 66,\n\tATA_CMD_WRITE_UNCORR_EXT = 69,\n\tATA_CMD_STANDBYNOW1 = 224,\n\tATA_CMD_IDLEIMMEDIATE = 225,\n\tATA_CMD_SLEEP = 230,\n\tATA_CMD_INIT_DEV_PARAMS = 145,\n\tATA_CMD_READ_NATIVE_MAX = 248,\n\tATA_CMD_READ_NATIVE_MAX_EXT = 39,\n\tATA_CMD_SET_MAX = 249,\n\tATA_CMD_SET_MAX_EXT = 55,\n\tATA_CMD_READ_LOG_EXT = 47,\n\tATA_CMD_WRITE_LOG_EXT = 63,\n\tATA_CMD_READ_LOG_DMA_EXT = 71,\n\tATA_CMD_WRITE_LOG_DMA_EXT = 87,\n\tATA_CMD_TRUSTED_NONDATA = 91,\n\tATA_CMD_TRUSTED_RCV = 92,\n\tATA_CMD_TRUSTED_RCV_DMA = 93,\n\tATA_CMD_TRUSTED_SND = 94,\n\tATA_CMD_TRUSTED_SND_DMA = 95,\n\tATA_CMD_PMP_READ = 228,\n\tATA_CMD_PMP_READ_DMA = 233,\n\tATA_CMD_PMP_WRITE = 232,\n\tATA_CMD_PMP_WRITE_DMA = 235,\n\tATA_CMD_CONF_OVERLAY = 177,\n\tATA_CMD_SEC_SET_PASS = 241,\n\tATA_CMD_SEC_UNLOCK = 242,\n\tATA_CMD_SEC_ERASE_PREP = 243,\n\tATA_CMD_SEC_ERASE_UNIT = 244,\n\tATA_CMD_SEC_FREEZE_LOCK = 245,\n\tATA_CMD_SEC_DISABLE_PASS = 246,\n\tATA_CMD_CONFIG_STREAM = 81,\n\tATA_CMD_SMART = 176,\n\tATA_CMD_MEDIA_LOCK = 222,\n\tATA_CMD_MEDIA_UNLOCK = 223,\n\tATA_CMD_DSM = 6,\n\tATA_CMD_CHK_MED_CRD_TYP = 209,\n\tATA_CMD_CFA_REQ_EXT_ERR = 3,\n\tATA_CMD_CFA_WRITE_NE = 56,\n\tATA_CMD_CFA_TRANS_SECT = 135,\n\tATA_CMD_CFA_ERASE = 192,\n\tATA_CMD_CFA_WRITE_MULT_NE = 205,\n\tATA_CMD_REQ_SENSE_DATA = 11,\n\tATA_CMD_SANITIZE_DEVICE = 180,\n\tATA_CMD_ZAC_MGMT_IN = 74,\n\tATA_CMD_ZAC_MGMT_OUT = 159,\n\tATA_CMD_RESTORE = 16,\n\tATA_SUBCMD_FPDMA_RECV_RD_LOG_DMA_EXT = 1,\n\tATA_SUBCMD_FPDMA_RECV_ZAC_MGMT_IN = 2,\n\tATA_SUBCMD_FPDMA_SEND_DSM = 0,\n\tATA_SUBCMD_FPDMA_SEND_WR_LOG_DMA_EXT = 2,\n\tATA_SUBCMD_NCQ_NON_DATA_ABORT_QUEUE = 0,\n\tATA_SUBCMD_NCQ_NON_DATA_SET_FEATURES = 5,\n\tATA_SUBCMD_NCQ_NON_DATA_ZERO_EXT = 6,\n\tATA_SUBCMD_NCQ_NON_DATA_ZAC_MGMT_OUT = 7,\n\tATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES = 0,\n\tATA_SUBCMD_ZAC_MGMT_OUT_CLOSE_ZONE = 1,\n\tATA_SUBCMD_ZAC_MGMT_OUT_FINISH_ZONE = 2,\n\tATA_SUBCMD_ZAC_MGMT_OUT_OPEN_ZONE = 3,\n\tATA_SUBCMD_ZAC_MGMT_OUT_RESET_WRITE_POINTER = 4,\n\tATA_LOG_DIRECTORY = 0,\n\tATA_LOG_SATA_NCQ = 16,\n\tATA_LOG_NCQ_NON_DATA = 18,\n\tATA_LOG_NCQ_SEND_RECV = 19,\n\tATA_LOG_IDENTIFY_DEVICE = 48,\n\tATA_LOG_SECURITY = 6,\n\tATA_LOG_SATA_SETTINGS = 8,\n\tATA_LOG_ZONED_INFORMATION = 9,\n\tATA_LOG_DEVSLP_OFFSET = 48,\n\tATA_LOG_DEVSLP_SIZE = 8,\n\tATA_LOG_DEVSLP_MDAT = 0,\n\tATA_LOG_DEVSLP_MDAT_MASK = 31,\n\tATA_LOG_DEVSLP_DETO = 1,\n\tATA_LOG_DEVSLP_VALID = 7,\n\tATA_LOG_DEVSLP_VALID_MASK = 128,\n\tATA_LOG_NCQ_PRIO_OFFSET = 9,\n\tATA_LOG_NCQ_SEND_RECV_SUBCMDS_OFFSET = 0,\n\tATA_LOG_NCQ_SEND_RECV_SUBCMDS_DSM = 1,\n\tATA_LOG_NCQ_SEND_RECV_DSM_OFFSET = 4,\n\tATA_LOG_NCQ_SEND_RECV_DSM_TRIM = 1,\n\tATA_LOG_NCQ_SEND_RECV_RD_LOG_OFFSET = 8,\n\tATA_LOG_NCQ_SEND_RECV_RD_LOG_SUPPORTED = 1,\n\tATA_LOG_NCQ_SEND_RECV_WR_LOG_OFFSET = 12,\n\tATA_LOG_NCQ_SEND_RECV_WR_LOG_SUPPORTED = 1,\n\tATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OFFSET = 16,\n\tATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_OUT_SUPPORTED = 1,\n\tATA_LOG_NCQ_SEND_RECV_ZAC_MGMT_IN_SUPPORTED = 2,\n\tATA_LOG_NCQ_SEND_RECV_SIZE = 20,\n\tATA_LOG_NCQ_NON_DATA_SUBCMDS_OFFSET = 0,\n\tATA_LOG_NCQ_NON_DATA_ABORT_OFFSET = 0,\n\tATA_LOG_NCQ_NON_DATA_ABORT_NCQ = 1,\n\tATA_LOG_NCQ_NON_DATA_ABORT_ALL = 2,\n\tATA_LOG_NCQ_NON_DATA_ABORT_STREAMING = 4,\n\tATA_LOG_NCQ_NON_DATA_ABORT_NON_STREAMING = 8,\n\tATA_LOG_NCQ_NON_DATA_ABORT_SELECTED = 16,\n\tATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OFFSET = 28,\n\tATA_LOG_NCQ_NON_DATA_ZAC_MGMT_OUT = 1,\n\tATA_LOG_NCQ_NON_DATA_SIZE = 64,\n\tATA_CMD_READ_LONG = 34,\n\tATA_CMD_READ_LONG_ONCE = 35,\n\tATA_CMD_WRITE_LONG = 50,\n\tATA_CMD_WRITE_LONG_ONCE = 51,\n\tSETFEATURES_XFER = 3,\n\tXFER_UDMA_7 = 71,\n\tXFER_UDMA_6 = 70,\n\tXFER_UDMA_5 = 69,\n\tXFER_UDMA_4 = 68,\n\tXFER_UDMA_3 = 67,\n\tXFER_UDMA_2 = 66,\n\tXFER_UDMA_1 = 65,\n\tXFER_UDMA_0 = 64,\n\tXFER_MW_DMA_4 = 36,\n\tXFER_MW_DMA_3 = 35,\n\tXFER_MW_DMA_2 = 34,\n\tXFER_MW_DMA_1 = 33,\n\tXFER_MW_DMA_0 = 32,\n\tXFER_SW_DMA_2 = 18,\n\tXFER_SW_DMA_1 = 17,\n\tXFER_SW_DMA_0 = 16,\n\tXFER_PIO_6 = 14,\n\tXFER_PIO_5 = 13,\n\tXFER_PIO_4 = 12,\n\tXFER_PIO_3 = 11,\n\tXFER_PIO_2 = 10,\n\tXFER_PIO_1 = 9,\n\tXFER_PIO_0 = 8,\n\tXFER_PIO_SLOW = 0,\n\tSETFEATURES_WC_ON = 2,\n\tSETFEATURES_WC_OFF = 130,\n\tSETFEATURES_RA_ON = 170,\n\tSETFEATURES_RA_OFF = 85,\n\tSETFEATURES_AAM_ON = 66,\n\tSETFEATURES_AAM_OFF = 194,\n\tSETFEATURES_SPINUP = 7,\n\tSETFEATURES_SPINUP_TIMEOUT = 30000,\n\tSETFEATURES_SATA_ENABLE = 16,\n\tSETFEATURES_SATA_DISABLE = 144,\n\tSATA_FPDMA_OFFSET = 1,\n\tSATA_FPDMA_AA = 2,\n\tSATA_DIPM = 3,\n\tSATA_FPDMA_IN_ORDER = 4,\n\tSATA_AN = 5,\n\tSATA_SSP = 6,\n\tSATA_DEVSLP = 9,\n\tSETFEATURE_SENSE_DATA = 195,\n\tATA_SET_MAX_ADDR = 0,\n\tATA_SET_MAX_PASSWD = 1,\n\tATA_SET_MAX_LOCK = 2,\n\tATA_SET_MAX_UNLOCK = 3,\n\tATA_SET_MAX_FREEZE_LOCK = 4,\n\tATA_SET_MAX_PASSWD_DMA = 5,\n\tATA_SET_MAX_UNLOCK_DMA = 6,\n\tATA_DCO_RESTORE = 192,\n\tATA_DCO_FREEZE_LOCK = 193,\n\tATA_DCO_IDENTIFY = 194,\n\tATA_DCO_SET = 195,\n\tATA_SMART_ENABLE = 216,\n\tATA_SMART_READ_VALUES = 208,\n\tATA_SMART_READ_THRESHOLDS = 209,\n\tATA_DSM_TRIM = 1,\n\tATA_SMART_LBAM_PASS = 79,\n\tATA_SMART_LBAH_PASS = 194,\n\tATAPI_PKT_DMA = 1,\n\tATAPI_DMADIR = 4,\n\tATAPI_CDB_LEN = 16,\n\tSATA_PMP_MAX_PORTS = 15,\n\tSATA_PMP_CTRL_PORT = 15,\n\tSATA_PMP_GSCR_DWORDS = 128,\n\tSATA_PMP_GSCR_PROD_ID = 0,\n\tSATA_PMP_GSCR_REV = 1,\n\tSATA_PMP_GSCR_PORT_INFO = 2,\n\tSATA_PMP_GSCR_ERROR = 32,\n\tSATA_PMP_GSCR_ERROR_EN = 33,\n\tSATA_PMP_GSCR_FEAT = 64,\n\tSATA_PMP_GSCR_FEAT_EN = 96,\n\tSATA_PMP_PSCR_STATUS = 0,\n\tSATA_PMP_PSCR_ERROR = 1,\n\tSATA_PMP_PSCR_CONTROL = 2,\n\tSATA_PMP_FEAT_BIST = 1,\n\tSATA_PMP_FEAT_PMREQ = 2,\n\tSATA_PMP_FEAT_DYNSSC = 4,\n\tSATA_PMP_FEAT_NOTIFY = 8,\n\tATA_CBL_NONE = 0,\n\tATA_CBL_PATA40 = 1,\n\tATA_CBL_PATA80 = 2,\n\tATA_CBL_PATA40_SHORT = 3,\n\tATA_CBL_PATA_UNK = 4,\n\tATA_CBL_PATA_IGN = 5,\n\tATA_CBL_SATA = 6,\n\tSCR_STATUS = 0,\n\tSCR_ERROR = 1,\n\tSCR_CONTROL = 2,\n\tSCR_ACTIVE = 3,\n\tSCR_NOTIFICATION = 4,\n\tSERR_DATA_RECOVERED = 1,\n\tSERR_COMM_RECOVERED = 2,\n\tSERR_DATA = 256,\n\tSERR_PERSISTENT = 512,\n\tSERR_PROTOCOL = 1024,\n\tSERR_INTERNAL = 2048,\n\tSERR_PHYRDY_CHG = 65536,\n\tSERR_PHY_INT_ERR = 131072,\n\tSERR_COMM_WAKE = 262144,\n\tSERR_10B_8B_ERR = 524288,\n\tSERR_DISPARITY = 1048576,\n\tSERR_CRC = 2097152,\n\tSERR_HANDSHAKE = 4194304,\n\tSERR_LINK_SEQ_ERR = 8388608,\n\tSERR_TRANS_ST_ERROR = 16777216,\n\tSERR_UNRECOG_FIS = 33554432,\n\tSERR_DEV_XCHG = 67108864,\n};\n\nenum ata_prot_flags {\n\tATA_PROT_FLAG_PIO = 1,\n\tATA_PROT_FLAG_DMA = 2,\n\tATA_PROT_FLAG_NCQ = 4,\n\tATA_PROT_FLAG_ATAPI = 8,\n\tATA_PROT_UNKNOWN = 255,\n\tATA_PROT_NODATA = 0,\n\tATA_PROT_PIO = 1,\n\tATA_PROT_DMA = 2,\n\tATA_PROT_NCQ_NODATA = 4,\n\tATA_PROT_NCQ = 6,\n\tATAPI_PROT_NODATA = 8,\n\tATAPI_PROT_PIO = 9,\n\tATAPI_PROT_DMA = 10,\n};\n\nstruct ata_bmdma_prd {\n\t__le32 addr;\n\t__le32 flags_len;\n};\n\nenum {\n\tATA_MSG_DRV = 1,\n\tATA_MSG_INFO = 2,\n\tATA_MSG_PROBE = 4,\n\tATA_MSG_WARN = 8,\n\tATA_MSG_MALLOC = 16,\n\tATA_MSG_CTL = 32,\n\tATA_MSG_INTR = 64,\n\tATA_MSG_ERR = 128,\n};\n\nenum {\n\tLIBATA_MAX_PRD = 128,\n\tLIBATA_DUMB_MAX_PRD = 64,\n\tATA_DEF_QUEUE = 1,\n\tATA_MAX_QUEUE = 32,\n\tATA_TAG_INTERNAL = 32,\n\tATA_SHORT_PAUSE = 16,\n\tATAPI_MAX_DRAIN = 16384,\n\tATA_ALL_DEVICES = 3,\n\tATA_SHT_EMULATED = 1,\n\tATA_SHT_THIS_ID = 4294967295,\n\tATA_TFLAG_LBA48 = 1,\n\tATA_TFLAG_ISADDR = 2,\n\tATA_TFLAG_DEVICE = 4,\n\tATA_TFLAG_WRITE = 8,\n\tATA_TFLAG_LBA = 16,\n\tATA_TFLAG_FUA = 32,\n\tATA_TFLAG_POLLING = 64,\n\tATA_DFLAG_LBA = 1,\n\tATA_DFLAG_LBA48 = 2,\n\tATA_DFLAG_CDB_INTR = 4,\n\tATA_DFLAG_NCQ = 8,\n\tATA_DFLAG_FLUSH_EXT = 16,\n\tATA_DFLAG_ACPI_PENDING = 32,\n\tATA_DFLAG_ACPI_FAILED = 64,\n\tATA_DFLAG_AN = 128,\n\tATA_DFLAG_TRUSTED = 256,\n\tATA_DFLAG_DMADIR = 1024,\n\tATA_DFLAG_CFG_MASK = 4095,\n\tATA_DFLAG_PIO = 4096,\n\tATA_DFLAG_NCQ_OFF = 8192,\n\tATA_DFLAG_SLEEPING = 32768,\n\tATA_DFLAG_DUBIOUS_XFER = 65536,\n\tATA_DFLAG_NO_UNLOAD = 131072,\n\tATA_DFLAG_UNLOCK_HPA = 262144,\n\tATA_DFLAG_NCQ_SEND_RECV = 524288,\n\tATA_DFLAG_NCQ_PRIO = 1048576,\n\tATA_DFLAG_NCQ_PRIO_ENABLE = 2097152,\n\tATA_DFLAG_INIT_MASK = 16777215,\n\tATA_DFLAG_DETACH = 16777216,\n\tATA_DFLAG_DETACHED = 33554432,\n\tATA_DFLAG_DA = 67108864,\n\tATA_DFLAG_DEVSLP = 134217728,\n\tATA_DFLAG_ACPI_DISABLED = 268435456,\n\tATA_DFLAG_D_SENSE = 536870912,\n\tATA_DFLAG_ZAC = 1073741824,\n\tATA_DEV_UNKNOWN = 0,\n\tATA_DEV_ATA = 1,\n\tATA_DEV_ATA_UNSUP = 2,\n\tATA_DEV_ATAPI = 3,\n\tATA_DEV_ATAPI_UNSUP = 4,\n\tATA_DEV_PMP = 5,\n\tATA_DEV_PMP_UNSUP = 6,\n\tATA_DEV_SEMB = 7,\n\tATA_DEV_SEMB_UNSUP = 8,\n\tATA_DEV_ZAC = 9,\n\tATA_DEV_ZAC_UNSUP = 10,\n\tATA_DEV_NONE = 11,\n\tATA_LFLAG_NO_HRST = 2,\n\tATA_LFLAG_NO_SRST = 4,\n\tATA_LFLAG_ASSUME_ATA = 8,\n\tATA_LFLAG_ASSUME_SEMB = 16,\n\tATA_LFLAG_ASSUME_CLASS = 24,\n\tATA_LFLAG_NO_RETRY = 32,\n\tATA_LFLAG_DISABLED = 64,\n\tATA_LFLAG_SW_ACTIVITY = 128,\n\tATA_LFLAG_NO_LPM = 256,\n\tATA_LFLAG_RST_ONCE = 512,\n\tATA_LFLAG_CHANGED = 1024,\n\tATA_LFLAG_NO_DB_DELAY = 2048,\n\tATA_FLAG_SLAVE_POSS = 1,\n\tATA_FLAG_SATA = 2,\n\tATA_FLAG_NO_LPM = 4,\n\tATA_FLAG_NO_LOG_PAGE = 32,\n\tATA_FLAG_NO_ATAPI = 64,\n\tATA_FLAG_PIO_DMA = 128,\n\tATA_FLAG_PIO_LBA48 = 256,\n\tATA_FLAG_PIO_POLLING = 512,\n\tATA_FLAG_NCQ = 1024,\n\tATA_FLAG_NO_POWEROFF_SPINDOWN = 2048,\n\tATA_FLAG_NO_HIBERNATE_SPINDOWN = 4096,\n\tATA_FLAG_DEBUGMSG = 8192,\n\tATA_FLAG_FPDMA_AA = 16384,\n\tATA_FLAG_IGN_SIMPLEX = 32768,\n\tATA_FLAG_NO_IORDY = 65536,\n\tATA_FLAG_ACPI_SATA = 131072,\n\tATA_FLAG_AN = 262144,\n\tATA_FLAG_PMP = 524288,\n\tATA_FLAG_FPDMA_AUX = 1048576,\n\tATA_FLAG_EM = 2097152,\n\tATA_FLAG_SW_ACTIVITY = 4194304,\n\tATA_FLAG_NO_DIPM = 8388608,\n\tATA_FLAG_SAS_HOST = 16777216,\n\tATA_PFLAG_EH_PENDING = 1,\n\tATA_PFLAG_EH_IN_PROGRESS = 2,\n\tATA_PFLAG_FROZEN = 4,\n\tATA_PFLAG_RECOVERED = 8,\n\tATA_PFLAG_LOADING = 16,\n\tATA_PFLAG_SCSI_HOTPLUG = 64,\n\tATA_PFLAG_INITIALIZING = 128,\n\tATA_PFLAG_RESETTING = 256,\n\tATA_PFLAG_UNLOADING = 512,\n\tATA_PFLAG_UNLOADED = 1024,\n\tATA_PFLAG_SUSPENDED = 131072,\n\tATA_PFLAG_PM_PENDING = 262144,\n\tATA_PFLAG_INIT_GTM_VALID = 524288,\n\tATA_PFLAG_PIO32 = 1048576,\n\tATA_PFLAG_PIO32CHANGE = 2097152,\n\tATA_PFLAG_EXTERNAL = 4194304,\n\tATA_QCFLAG_ACTIVE = 1,\n\tATA_QCFLAG_DMAMAP = 2,\n\tATA_QCFLAG_IO = 8,\n\tATA_QCFLAG_RESULT_TF = 16,\n\tATA_QCFLAG_CLEAR_EXCL = 32,\n\tATA_QCFLAG_QUIET = 64,\n\tATA_QCFLAG_RETRY = 128,\n\tATA_QCFLAG_FAILED = 65536,\n\tATA_QCFLAG_SENSE_VALID = 131072,\n\tATA_QCFLAG_EH_SCHEDULED = 262144,\n\tATA_HOST_SIMPLEX = 1,\n\tATA_HOST_STARTED = 2,\n\tATA_HOST_PARALLEL_SCAN = 4,\n\tATA_HOST_IGNORE_ATA = 8,\n\tATA_TMOUT_BOOT = 30000,\n\tATA_TMOUT_BOOT_QUICK = 7000,\n\tATA_TMOUT_INTERNAL_QUICK = 5000,\n\tATA_TMOUT_MAX_PARK = 30000,\n\tATA_TMOUT_FF_WAIT_LONG = 2000,\n\tATA_TMOUT_FF_WAIT = 800,\n\tATA_WAIT_AFTER_RESET = 150,\n\tATA_TMOUT_PMP_SRST_WAIT = 5000,\n\tATA_TMOUT_SPURIOUS_PHY = 10000,\n\tBUS_UNKNOWN = 0,\n\tBUS_DMA = 1,\n\tBUS_IDLE = 2,\n\tBUS_NOINTR = 3,\n\tBUS_NODATA = 4,\n\tBUS_TIMER = 5,\n\tBUS_PIO = 6,\n\tBUS_EDD = 7,\n\tBUS_IDENTIFY = 8,\n\tBUS_PACKET = 9,\n\tPORT_UNKNOWN = 0,\n\tPORT_ENABLED = 1,\n\tPORT_DISABLED = 2,\n\tATA_NR_PIO_MODES = 7,\n\tATA_NR_MWDMA_MODES = 5,\n\tATA_NR_UDMA_MODES = 8,\n\tATA_SHIFT_PIO = 0,\n\tATA_SHIFT_MWDMA = 7,\n\tATA_SHIFT_UDMA = 12,\n\tATA_SHIFT_PRIO = 6,\n\tATA_PRIO_HIGH = 2,\n\tATA_DMA_PAD_SZ = 4,\n\tATA_ERING_SIZE = 32,\n\tATA_DEFER_LINK = 1,\n\tATA_DEFER_PORT = 2,\n\tATA_EH_DESC_LEN = 80,\n\tATA_EH_REVALIDATE = 1,\n\tATA_EH_SOFTRESET = 2,\n\tATA_EH_HARDRESET = 4,\n\tATA_EH_RESET = 6,\n\tATA_EH_ENABLE_LINK = 8,\n\tATA_EH_PARK = 32,\n\tATA_EH_PERDEV_MASK = 33,\n\tATA_EH_ALL_ACTIONS = 15,\n\tATA_EHI_HOTPLUGGED = 1,\n\tATA_EHI_NO_AUTOPSY = 4,\n\tATA_EHI_QUIET = 8,\n\tATA_EHI_NO_RECOVERY = 16,\n\tATA_EHI_DID_SOFTRESET = 65536,\n\tATA_EHI_DID_HARDRESET = 131072,\n\tATA_EHI_PRINTINFO = 262144,\n\tATA_EHI_SETMODE = 524288,\n\tATA_EHI_POST_SETMODE = 1048576,\n\tATA_EHI_DID_RESET = 196608,\n\tATA_EHI_TO_SLAVE_MASK = 12,\n\tATA_EH_MAX_TRIES = 5,\n\tATA_LINK_RESUME_TRIES = 5,\n\tATA_PROBE_MAX_TRIES = 3,\n\tATA_EH_DEV_TRIES = 3,\n\tATA_EH_PMP_TRIES = 5,\n\tATA_EH_PMP_LINK_TRIES = 3,\n\tSATA_PMP_RW_TIMEOUT = 3000,\n\tATA_EH_CMD_TIMEOUT_TABLE_SIZE = 6,\n\tATA_HORKAGE_DIAGNOSTIC = 1,\n\tATA_HORKAGE_NODMA = 2,\n\tATA_HORKAGE_NONCQ = 4,\n\tATA_HORKAGE_MAX_SEC_128 = 8,\n\tATA_HORKAGE_BROKEN_HPA = 16,\n\tATA_HORKAGE_DISABLE = 32,\n\tATA_HORKAGE_HPA_SIZE = 64,\n\tATA_HORKAGE_IVB = 256,\n\tATA_HORKAGE_STUCK_ERR = 512,\n\tATA_HORKAGE_BRIDGE_OK = 1024,\n\tATA_HORKAGE_ATAPI_MOD16_DMA = 2048,\n\tATA_HORKAGE_FIRMWARE_WARN = 4096,\n\tATA_HORKAGE_1_5_GBPS = 8192,\n\tATA_HORKAGE_NOSETXFER = 16384,\n\tATA_HORKAGE_BROKEN_FPDMA_AA = 32768,\n\tATA_HORKAGE_DUMP_ID = 65536,\n\tATA_HORKAGE_MAX_SEC_LBA48 = 131072,\n\tATA_HORKAGE_ATAPI_DMADIR = 262144,\n\tATA_HORKAGE_NO_NCQ_TRIM = 524288,\n\tATA_HORKAGE_NOLPM = 1048576,\n\tATA_HORKAGE_WD_BROKEN_LPM = 2097152,\n\tATA_HORKAGE_ZERO_AFTER_TRIM = 4194304,\n\tATA_HORKAGE_NO_DMA_LOG = 8388608,\n\tATA_HORKAGE_NOTRIM = 16777216,\n\tATA_HORKAGE_MAX_SEC_1024 = 33554432,\n\tATA_HORKAGE_MAX_TRIM_128M = 67108864,\n\tATA_DMA_MASK_ATA = 1,\n\tATA_DMA_MASK_ATAPI = 2,\n\tATA_DMA_MASK_CFA = 4,\n\tATAPI_READ = 0,\n\tATAPI_WRITE = 1,\n\tATAPI_READ_CD = 2,\n\tATAPI_PASS_THRU = 3,\n\tATAPI_MISC = 4,\n\tATA_TIMING_SETUP = 1,\n\tATA_TIMING_ACT8B = 2,\n\tATA_TIMING_REC8B = 4,\n\tATA_TIMING_CYC8B = 8,\n\tATA_TIMING_8BIT = 14,\n\tATA_TIMING_ACTIVE = 16,\n\tATA_TIMING_RECOVER = 32,\n\tATA_TIMING_DMACK_HOLD = 64,\n\tATA_TIMING_CYCLE = 128,\n\tATA_TIMING_UDMA = 256,\n\tATA_TIMING_ALL = 511,\n\tATA_ACPI_FILTER_SETXFER = 1,\n\tATA_ACPI_FILTER_LOCK = 2,\n\tATA_ACPI_FILTER_DIPM = 4,\n\tATA_ACPI_FILTER_FPDMA_OFFSET = 8,\n\tATA_ACPI_FILTER_FPDMA_AA = 16,\n\tATA_ACPI_FILTER_DEFAULT = 7,\n};\n\nenum ata_xfer_mask {\n\tATA_MASK_PIO = 127,\n\tATA_MASK_MWDMA = 3968,\n\tATA_MASK_UDMA = 1044480,\n};\n\nenum ata_completion_errors {\n\tAC_ERR_OK = 0,\n\tAC_ERR_DEV = 1,\n\tAC_ERR_HSM = 2,\n\tAC_ERR_TIMEOUT = 4,\n\tAC_ERR_MEDIA = 8,\n\tAC_ERR_ATA_BUS = 16,\n\tAC_ERR_HOST_BUS = 32,\n\tAC_ERR_SYSTEM = 64,\n\tAC_ERR_INVALID = 128,\n\tAC_ERR_OTHER = 256,\n\tAC_ERR_NODEV_HINT = 512,\n\tAC_ERR_NCQ = 1024,\n};\n\nenum ata_lpm_policy {\n\tATA_LPM_UNKNOWN = 0,\n\tATA_LPM_MAX_POWER = 1,\n\tATA_LPM_MED_POWER = 2,\n\tATA_LPM_MED_POWER_WITH_DIPM = 3,\n\tATA_LPM_MIN_POWER_WITH_PARTIAL = 4,\n\tATA_LPM_MIN_POWER = 5,\n};\n\nstruct ata_queued_cmd;\n\ntypedef void (*ata_qc_cb_t)(struct ata_queued_cmd *);\n\nstruct ata_taskfile {\n\tlong unsigned int flags;\n\tu8 protocol;\n\tu8 ctl;\n\tu8 hob_feature;\n\tu8 hob_nsect;\n\tu8 hob_lbal;\n\tu8 hob_lbam;\n\tu8 hob_lbah;\n\tu8 feature;\n\tu8 nsect;\n\tu8 lbal;\n\tu8 lbam;\n\tu8 lbah;\n\tu8 device;\n\tu8 command;\n\tu32 auxiliary;\n};\n\nstruct ata_port;\n\nstruct ata_device;\n\nstruct ata_queued_cmd {\n\tstruct ata_port *ap;\n\tstruct ata_device *dev;\n\tstruct scsi_cmnd *scsicmd;\n\tvoid (*scsidone)(struct scsi_cmnd *);\n\tstruct ata_taskfile tf;\n\tu8 cdb[16];\n\tlong unsigned int flags;\n\tunsigned int tag;\n\tunsigned int hw_tag;\n\tunsigned int n_elem;\n\tunsigned int orig_n_elem;\n\tint dma_dir;\n\tunsigned int sect_size;\n\tunsigned int nbytes;\n\tunsigned int extrabytes;\n\tunsigned int curbytes;\n\tstruct scatterlist sgent;\n\tstruct scatterlist *sg;\n\tstruct scatterlist *cursg;\n\tunsigned int cursg_ofs;\n\tunsigned int err_mask;\n\tstruct ata_taskfile result_tf;\n\tata_qc_cb_t complete_fn;\n\tvoid *private_data;\n\tvoid *lldd_task;\n};\n\nstruct ata_link;\n\ntypedef int (*ata_prereset_fn_t)(struct ata_link *, long unsigned int);\n\nstruct ata_eh_info {\n\tstruct ata_device *dev;\n\tu32 serror;\n\tunsigned int err_mask;\n\tunsigned int action;\n\tunsigned int dev_action[2];\n\tunsigned int flags;\n\tunsigned int probe_mask;\n\tchar desc[80];\n\tint desc_len;\n};\n\nstruct ata_eh_context {\n\tstruct ata_eh_info i;\n\tint tries[2];\n\tint cmd_timeout_idx[12];\n\tunsigned int classes[2];\n\tunsigned int did_probe_mask;\n\tunsigned int unloaded_mask;\n\tunsigned int saved_ncq_enabled;\n\tu8 saved_xfer_mode[2];\n\tlong unsigned int last_reset;\n};\n\nstruct ata_ering_entry {\n\tunsigned int eflags;\n\tunsigned int err_mask;\n\tu64 timestamp;\n};\n\nstruct ata_ering {\n\tint cursor;\n\tstruct ata_ering_entry ring[32];\n};\n\nstruct ata_device {\n\tstruct ata_link *link;\n\tunsigned int devno;\n\tunsigned int horkage;\n\tlong unsigned int flags;\n\tstruct scsi_device *sdev;\n\tvoid *private_data;\n\tunion acpi_object *gtf_cache;\n\tunsigned int gtf_filter;\n\tstruct device tdev;\n\tu64 n_sectors;\n\tu64 n_native_sectors;\n\tunsigned int class;\n\tlong unsigned int unpark_deadline;\n\tu8 pio_mode;\n\tu8 dma_mode;\n\tu8 xfer_mode;\n\tunsigned int xfer_shift;\n\tunsigned int multi_count;\n\tunsigned int max_sectors;\n\tunsigned int cdb_len;\n\tlong unsigned int pio_mask;\n\tlong unsigned int mwdma_mask;\n\tlong unsigned int udma_mask;\n\tu16 cylinders;\n\tu16 heads;\n\tu16 sectors;\n\tlong: 16;\n\tlong: 64;\n\tlong: 64;\n\tunion {\n\t\tu16 id[256];\n\t\tu32 gscr[128];\n\t};\n\tu8 devslp_timing[8];\n\tu8 ncq_send_recv_cmds[20];\n\tu8 ncq_non_data_cmds[64];\n\tu32 zac_zoned_cap;\n\tu32 zac_zones_optimal_open;\n\tu32 zac_zones_optimal_nonseq;\n\tu32 zac_zones_max_open;\n\tint spdn_cnt;\n\tstruct ata_ering ering;\n\tlong: 64;\n};\n\nstruct ata_link {\n\tstruct ata_port *ap;\n\tint pmp;\n\tstruct device tdev;\n\tunsigned int active_tag;\n\tu32 sactive;\n\tunsigned int flags;\n\tu32 saved_scontrol;\n\tunsigned int hw_sata_spd_limit;\n\tunsigned int sata_spd_limit;\n\tunsigned int sata_spd;\n\tenum ata_lpm_policy lpm_policy;\n\tstruct ata_eh_info eh_info;\n\tstruct ata_eh_context eh_context;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct ata_device device[2];\n\tlong unsigned int last_lpm_change;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\ntypedef int (*ata_reset_fn_t)(struct ata_link *, unsigned int *, long unsigned int);\n\ntypedef void (*ata_postreset_fn_t)(struct ata_link *, unsigned int *);\n\nenum sw_activity {\n\tOFF = 0,\n\tBLINK_ON = 1,\n\tBLINK_OFF = 2,\n};\n\nstruct ata_ioports {\n\tvoid *cmd_addr;\n\tvoid *data_addr;\n\tvoid *error_addr;\n\tvoid *feature_addr;\n\tvoid *nsect_addr;\n\tvoid *lbal_addr;\n\tvoid *lbam_addr;\n\tvoid *lbah_addr;\n\tvoid *device_addr;\n\tvoid *status_addr;\n\tvoid *command_addr;\n\tvoid *altstatus_addr;\n\tvoid *ctl_addr;\n\tvoid *bmdma_addr;\n\tvoid *scr_addr;\n};\n\nstruct ata_port_operations;\n\nstruct ata_host {\n\tspinlock_t lock;\n\tstruct device *dev;\n\tvoid * const *iomap;\n\tunsigned int n_ports;\n\tunsigned int n_tags;\n\tvoid *private_data;\n\tstruct ata_port_operations *ops;\n\tlong unsigned int flags;\n\tstruct kref kref;\n\tstruct mutex eh_mutex;\n\tstruct task_struct *eh_owner;\n\tstruct ata_port *simplex_claimed;\n\tstruct ata_port *ports[0];\n};\n\nstruct ata_port_operations {\n\tint (*qc_defer)(struct ata_queued_cmd *);\n\tint (*check_atapi_dma)(struct ata_queued_cmd *);\n\tenum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *);\n\tunsigned int (*qc_issue)(struct ata_queued_cmd *);\n\tbool (*qc_fill_rtf)(struct ata_queued_cmd *);\n\tint (*cable_detect)(struct ata_port *);\n\tlong unsigned int (*mode_filter)(struct ata_device *, long unsigned int);\n\tvoid (*set_piomode)(struct ata_port *, struct ata_device *);\n\tvoid (*set_dmamode)(struct ata_port *, struct ata_device *);\n\tint (*set_mode)(struct ata_link *, struct ata_device **);\n\tunsigned int (*read_id)(struct ata_device *, struct ata_taskfile *, u16 *);\n\tvoid (*dev_config)(struct ata_device *);\n\tvoid (*freeze)(struct ata_port *);\n\tvoid (*thaw)(struct ata_port *);\n\tata_prereset_fn_t prereset;\n\tata_reset_fn_t softreset;\n\tata_reset_fn_t hardreset;\n\tata_postreset_fn_t postreset;\n\tata_prereset_fn_t pmp_prereset;\n\tata_reset_fn_t pmp_softreset;\n\tata_reset_fn_t pmp_hardreset;\n\tata_postreset_fn_t pmp_postreset;\n\tvoid (*error_handler)(struct ata_port *);\n\tvoid (*lost_interrupt)(struct ata_port *);\n\tvoid (*post_internal_cmd)(struct ata_queued_cmd *);\n\tvoid (*sched_eh)(struct ata_port *);\n\tvoid (*end_eh)(struct ata_port *);\n\tint (*scr_read)(struct ata_link *, unsigned int, u32 *);\n\tint (*scr_write)(struct ata_link *, unsigned int, u32);\n\tvoid (*pmp_attach)(struct ata_port *);\n\tvoid (*pmp_detach)(struct ata_port *);\n\tint (*set_lpm)(struct ata_link *, enum ata_lpm_policy, unsigned int);\n\tint (*port_suspend)(struct ata_port *, pm_message_t);\n\tint (*port_resume)(struct ata_port *);\n\tint (*port_start)(struct ata_port *);\n\tvoid (*port_stop)(struct ata_port *);\n\tvoid (*host_stop)(struct ata_host *);\n\tvoid (*sff_dev_select)(struct ata_port *, unsigned int);\n\tvoid (*sff_set_devctl)(struct ata_port *, u8);\n\tu8 (*sff_check_status)(struct ata_port *);\n\tu8 (*sff_check_altstatus)(struct ata_port *);\n\tvoid (*sff_tf_load)(struct ata_port *, const struct ata_taskfile *);\n\tvoid (*sff_tf_read)(struct ata_port *, struct ata_taskfile *);\n\tvoid (*sff_exec_command)(struct ata_port *, const struct ata_taskfile *);\n\tunsigned int (*sff_data_xfer)(struct ata_queued_cmd *, unsigned char *, unsigned int, int);\n\tvoid (*sff_irq_on)(struct ata_port *);\n\tbool (*sff_irq_check)(struct ata_port *);\n\tvoid (*sff_irq_clear)(struct ata_port *);\n\tvoid (*sff_drain_fifo)(struct ata_queued_cmd *);\n\tvoid (*bmdma_setup)(struct ata_queued_cmd *);\n\tvoid (*bmdma_start)(struct ata_queued_cmd *);\n\tvoid (*bmdma_stop)(struct ata_queued_cmd *);\n\tu8 (*bmdma_status)(struct ata_port *);\n\tssize_t (*em_show)(struct ata_port *, char *);\n\tssize_t (*em_store)(struct ata_port *, const char *, size_t);\n\tssize_t (*sw_activity_show)(struct ata_device *, char *);\n\tssize_t (*sw_activity_store)(struct ata_device *, enum sw_activity);\n\tssize_t (*transmit_led_message)(struct ata_port *, u32, ssize_t);\n\tvoid (*phy_reset)(struct ata_port *);\n\tvoid (*eng_timeout)(struct ata_port *);\n\tconst struct ata_port_operations *inherits;\n};\n\nstruct ata_port_stats {\n\tlong unsigned int unhandled_irq;\n\tlong unsigned int idle_irq;\n\tlong unsigned int rw_reqbuf;\n};\n\nstruct ata_acpi_drive {\n\tu32 pio;\n\tu32 dma;\n};\n\nstruct ata_acpi_gtm {\n\tstruct ata_acpi_drive drive[2];\n\tu32 flags;\n};\n\nstruct ata_port {\n\tstruct Scsi_Host *scsi_host;\n\tstruct ata_port_operations *ops;\n\tspinlock_t *lock;\n\tlong unsigned int flags;\n\tunsigned int pflags;\n\tunsigned int print_id;\n\tunsigned int local_port_no;\n\tunsigned int port_no;\n\tstruct ata_ioports ioaddr;\n\tu8 ctl;\n\tu8 last_ctl;\n\tstruct ata_link *sff_pio_task_link;\n\tstruct delayed_work sff_pio_task;\n\tstruct ata_bmdma_prd *bmdma_prd;\n\tdma_addr_t bmdma_prd_dma;\n\tunsigned int pio_mask;\n\tunsigned int mwdma_mask;\n\tunsigned int udma_mask;\n\tunsigned int cbl;\n\tstruct ata_queued_cmd qcmd[33];\n\tlong unsigned int sas_tag_allocated;\n\tu64 qc_active;\n\tint nr_active_links;\n\tunsigned int sas_last_tag;\n\tlong: 64;\n\tstruct ata_link link;\n\tstruct ata_link *slave_link;\n\tint nr_pmp_links;\n\tstruct ata_link *pmp_link;\n\tstruct ata_link *excl_link;\n\tstruct ata_port_stats stats;\n\tstruct ata_host *host;\n\tstruct device *dev;\n\tstruct device tdev;\n\tstruct mutex scsi_scan_mutex;\n\tstruct delayed_work hotplug_task;\n\tstruct work_struct scsi_rescan_task;\n\tunsigned int hsm_task_state;\n\tu32 msg_enable;\n\tstruct list_head eh_done_q;\n\twait_queue_head_t eh_wait_q;\n\tint eh_tries;\n\tstruct completion park_req_pending;\n\tpm_message_t pm_mesg;\n\tenum ata_lpm_policy target_lpm_policy;\n\tstruct timer_list fastdrain_timer;\n\tlong unsigned int fastdrain_cnt;\n\tasync_cookie_t cookie;\n\tint em_message_type;\n\tvoid *private_data;\n\tstruct ata_acpi_gtm __acpi_init_gtm;\n\tint: 32;\n\tu8 sector_buf[512];\n};\n\nstruct ata_port_info {\n\tlong unsigned int flags;\n\tlong unsigned int link_flags;\n\tlong unsigned int pio_mask;\n\tlong unsigned int mwdma_mask;\n\tlong unsigned int udma_mask;\n\tstruct ata_port_operations *port_ops;\n\tvoid *private_data;\n};\n\nstruct ata_timing {\n\tshort unsigned int mode;\n\tshort unsigned int setup;\n\tshort unsigned int act8b;\n\tshort unsigned int rec8b;\n\tshort unsigned int cyc8b;\n\tshort unsigned int active;\n\tshort unsigned int recover;\n\tshort unsigned int dmack_hold;\n\tshort unsigned int cycle;\n\tshort unsigned int udma;\n};\n\nstruct pci_bits {\n\tunsigned int reg;\n\tunsigned int width;\n\tlong unsigned int mask;\n\tlong unsigned int val;\n};\n\nenum ata_link_iter_mode {\n\tATA_LITER_EDGE = 0,\n\tATA_LITER_HOST_FIRST = 1,\n\tATA_LITER_PMP_FIRST = 2,\n};\n\nenum ata_dev_iter_mode {\n\tATA_DITER_ENABLED = 0,\n\tATA_DITER_ENABLED_REVERSE = 1,\n\tATA_DITER_ALL = 2,\n\tATA_DITER_ALL_REVERSE = 3,\n};\n\nstruct trace_event_raw_ata_qc_issue {\n\tstruct trace_entry ent;\n\tunsigned int ata_port;\n\tunsigned int ata_dev;\n\tunsigned int tag;\n\tunsigned char cmd;\n\tunsigned char dev;\n\tunsigned char lbal;\n\tunsigned char lbam;\n\tunsigned char lbah;\n\tunsigned char nsect;\n\tunsigned char feature;\n\tunsigned char hob_lbal;\n\tunsigned char hob_lbam;\n\tunsigned char hob_lbah;\n\tunsigned char hob_nsect;\n\tunsigned char hob_feature;\n\tunsigned char ctl;\n\tunsigned char proto;\n\tlong unsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ata_qc_complete_template {\n\tstruct trace_entry ent;\n\tunsigned int ata_port;\n\tunsigned int ata_dev;\n\tunsigned int tag;\n\tunsigned char status;\n\tunsigned char dev;\n\tunsigned char lbal;\n\tunsigned char lbam;\n\tunsigned char lbah;\n\tunsigned char nsect;\n\tunsigned char error;\n\tunsigned char hob_lbal;\n\tunsigned char hob_lbam;\n\tunsigned char hob_lbah;\n\tunsigned char hob_nsect;\n\tunsigned char hob_feature;\n\tunsigned char ctl;\n\tlong unsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ata_eh_link_autopsy {\n\tstruct trace_entry ent;\n\tunsigned int ata_port;\n\tunsigned int ata_dev;\n\tunsigned int eh_action;\n\tunsigned int eh_err_mask;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_ata_eh_link_autopsy_qc {\n\tstruct trace_entry ent;\n\tunsigned int ata_port;\n\tunsigned int ata_dev;\n\tunsigned int tag;\n\tunsigned int qc_flags;\n\tunsigned int eh_err_mask;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_ata_qc_issue {};\n\nstruct trace_event_data_offsets_ata_qc_complete_template {};\n\nstruct trace_event_data_offsets_ata_eh_link_autopsy {};\n\nstruct trace_event_data_offsets_ata_eh_link_autopsy_qc {};\n\ntypedef void (*btf_trace_ata_qc_issue)(void *, struct ata_queued_cmd *);\n\ntypedef void (*btf_trace_ata_qc_complete_internal)(void *, struct ata_queued_cmd *);\n\ntypedef void (*btf_trace_ata_qc_complete_failed)(void *, struct ata_queued_cmd *);\n\ntypedef void (*btf_trace_ata_qc_complete_done)(void *, struct ata_queued_cmd *);\n\ntypedef void (*btf_trace_ata_eh_link_autopsy)(void *, struct ata_device *, unsigned int, unsigned int);\n\ntypedef void (*btf_trace_ata_eh_link_autopsy_qc)(void *, struct ata_queued_cmd *);\n\nenum {\n\tATA_READID_POSTRESET = 1,\n\tATA_DNXFER_PIO = 0,\n\tATA_DNXFER_DMA = 1,\n\tATA_DNXFER_40C = 2,\n\tATA_DNXFER_FORCE_PIO = 3,\n\tATA_DNXFER_FORCE_PIO0 = 4,\n\tATA_DNXFER_QUIET = 2147483648,\n};\n\nstruct ata_force_param {\n\tconst char *name;\n\tu8 cbl;\n\tu8 spd_limit;\n\tlong unsigned int xfer_mask;\n\tunsigned int horkage_on;\n\tunsigned int horkage_off;\n\tu16 lflags;\n};\n\nstruct ata_force_ent {\n\tint port;\n\tint device;\n\tstruct ata_force_param param;\n};\n\nstruct ata_xfer_ent {\n\tint shift;\n\tint bits;\n\tu8 base;\n};\n\nstruct ata_blacklist_entry {\n\tconst char *model_num;\n\tconst char *model_rev;\n\tlong unsigned int horkage;\n};\n\ntypedef unsigned int (*ata_xlat_func_t)(struct ata_queued_cmd *);\n\nstruct ata_scsi_args {\n\tstruct ata_device *dev;\n\tu16 *id;\n\tstruct scsi_cmnd *cmd;\n};\n\nenum ata_lpm_hints {\n\tATA_LPM_EMPTY = 1,\n\tATA_LPM_HIPM = 2,\n\tATA_LPM_WAKE_ONLY = 4,\n};\n\nenum {\n\tATA_EH_SPDN_NCQ_OFF = 1,\n\tATA_EH_SPDN_SPEED_DOWN = 2,\n\tATA_EH_SPDN_FALLBACK_TO_PIO = 4,\n\tATA_EH_SPDN_KEEP_ERRORS = 8,\n\tATA_EFLAG_IS_IO = 1,\n\tATA_EFLAG_DUBIOUS_XFER = 2,\n\tATA_EFLAG_OLD_ER = 2147483648,\n\tATA_ECAT_NONE = 0,\n\tATA_ECAT_ATA_BUS = 1,\n\tATA_ECAT_TOUT_HSM = 2,\n\tATA_ECAT_UNK_DEV = 3,\n\tATA_ECAT_DUBIOUS_NONE = 4,\n\tATA_ECAT_DUBIOUS_ATA_BUS = 5,\n\tATA_ECAT_DUBIOUS_TOUT_HSM = 6,\n\tATA_ECAT_DUBIOUS_UNK_DEV = 7,\n\tATA_ECAT_NR = 8,\n\tATA_EH_CMD_DFL_TIMEOUT = 5000,\n\tATA_EH_RESET_COOL_DOWN = 5000,\n\tATA_EH_PRERESET_TIMEOUT = 10000,\n\tATA_EH_FASTDRAIN_INTERVAL = 3000,\n\tATA_EH_UA_TRIES = 5,\n\tATA_EH_PROBE_TRIAL_INTERVAL = 60000,\n\tATA_EH_PROBE_TRIALS = 2,\n};\n\nstruct ata_eh_cmd_timeout_ent {\n\tconst u8 *commands;\n\tconst long unsigned int *timeouts;\n};\n\nstruct speed_down_verdict_arg {\n\tu64 since;\n\tint xfer_ok;\n\tint nr_errors[8];\n};\n\nstruct ata_internal {\n\tstruct scsi_transport_template t;\n\tstruct device_attribute private_port_attrs[3];\n\tstruct device_attribute private_link_attrs[3];\n\tstruct device_attribute private_dev_attrs[9];\n\tstruct transport_container link_attr_cont;\n\tstruct transport_container dev_attr_cont;\n\tstruct device_attribute *link_attrs[4];\n\tstruct device_attribute *port_attrs[4];\n\tstruct device_attribute *dev_attrs[10];\n};\n\nstruct ata_show_ering_arg {\n\tchar *buf;\n\tint written;\n};\n\nenum hsm_task_states {\n\tHSM_ST_IDLE = 0,\n\tHSM_ST_FIRST = 1,\n\tHSM_ST = 2,\n\tHSM_ST_LAST = 3,\n\tHSM_ST_ERR = 4,\n};\n\nstruct ata_acpi_gtf {\n\tu8 tf[7];\n};\n\nstruct ata_acpi_hotplug_context {\n\tstruct acpi_hotplug_context hp;\n\tunion {\n\t\tstruct ata_port *ap;\n\t\tstruct ata_device *dev;\n\t} data;\n};\n\nenum {\n\tAHCI_MAX_PORTS = 32,\n\tAHCI_MAX_CLKS = 5,\n\tAHCI_MAX_SG = 168,\n\tAHCI_DMA_BOUNDARY = 4294967295,\n\tAHCI_MAX_CMDS = 32,\n\tAHCI_CMD_SZ = 32,\n\tAHCI_CMD_SLOT_SZ = 1024,\n\tAHCI_RX_FIS_SZ = 256,\n\tAHCI_CMD_TBL_CDB = 64,\n\tAHCI_CMD_TBL_HDR_SZ = 128,\n\tAHCI_CMD_TBL_SZ = 2816,\n\tAHCI_CMD_TBL_AR_SZ = 90112,\n\tAHCI_PORT_PRIV_DMA_SZ = 91392,\n\tAHCI_PORT_PRIV_FBS_DMA_SZ = 95232,\n\tAHCI_IRQ_ON_SG = 2147483648,\n\tAHCI_CMD_ATAPI = 32,\n\tAHCI_CMD_WRITE = 64,\n\tAHCI_CMD_PREFETCH = 128,\n\tAHCI_CMD_RESET = 256,\n\tAHCI_CMD_CLR_BUSY = 1024,\n\tRX_FIS_PIO_SETUP = 32,\n\tRX_FIS_D2H_REG = 64,\n\tRX_FIS_SDB = 88,\n\tRX_FIS_UNK = 96,\n\tHOST_CAP = 0,\n\tHOST_CTL = 4,\n\tHOST_IRQ_STAT = 8,\n\tHOST_PORTS_IMPL = 12,\n\tHOST_VERSION = 16,\n\tHOST_EM_LOC = 28,\n\tHOST_EM_CTL = 32,\n\tHOST_CAP2 = 36,\n\tHOST_RESET = 1,\n\tHOST_IRQ_EN = 2,\n\tHOST_MRSM = 4,\n\tHOST_AHCI_EN = 2147483648,\n\tHOST_CAP_SXS = 32,\n\tHOST_CAP_EMS = 64,\n\tHOST_CAP_CCC = 128,\n\tHOST_CAP_PART = 8192,\n\tHOST_CAP_SSC = 16384,\n\tHOST_CAP_PIO_MULTI = 32768,\n\tHOST_CAP_FBS = 65536,\n\tHOST_CAP_PMP = 131072,\n\tHOST_CAP_ONLY = 262144,\n\tHOST_CAP_CLO = 16777216,\n\tHOST_CAP_LED = 33554432,\n\tHOST_CAP_ALPM = 67108864,\n\tHOST_CAP_SSS = 134217728,\n\tHOST_CAP_MPS = 268435456,\n\tHOST_CAP_SNTF = 536870912,\n\tHOST_CAP_NCQ = 1073741824,\n\tHOST_CAP_64 = 2147483648,\n\tHOST_CAP2_BOH = 1,\n\tHOST_CAP2_NVMHCI = 2,\n\tHOST_CAP2_APST = 4,\n\tHOST_CAP2_SDS = 8,\n\tHOST_CAP2_SADM = 16,\n\tHOST_CAP2_DESO = 32,\n\tPORT_LST_ADDR = 0,\n\tPORT_LST_ADDR_HI = 4,\n\tPORT_FIS_ADDR = 8,\n\tPORT_FIS_ADDR_HI = 12,\n\tPORT_IRQ_STAT = 16,\n\tPORT_IRQ_MASK = 20,\n\tPORT_CMD = 24,\n\tPORT_TFDATA = 32,\n\tPORT_SIG = 36,\n\tPORT_CMD_ISSUE = 56,\n\tPORT_SCR_STAT = 40,\n\tPORT_SCR_CTL = 44,\n\tPORT_SCR_ERR = 48,\n\tPORT_SCR_ACT = 52,\n\tPORT_SCR_NTF = 60,\n\tPORT_FBS = 64,\n\tPORT_DEVSLP = 68,\n\tPORT_IRQ_COLD_PRES = 2147483648,\n\tPORT_IRQ_TF_ERR = 1073741824,\n\tPORT_IRQ_HBUS_ERR = 536870912,\n\tPORT_IRQ_HBUS_DATA_ERR = 268435456,\n\tPORT_IRQ_IF_ERR = 134217728,\n\tPORT_IRQ_IF_NONFATAL = 67108864,\n\tPORT_IRQ_OVERFLOW = 16777216,\n\tPORT_IRQ_BAD_PMP = 8388608,\n\tPORT_IRQ_PHYRDY = 4194304,\n\tPORT_IRQ_DEV_ILCK = 128,\n\tPORT_IRQ_CONNECT = 64,\n\tPORT_IRQ_SG_DONE = 32,\n\tPORT_IRQ_UNK_FIS = 16,\n\tPORT_IRQ_SDB_FIS = 8,\n\tPORT_IRQ_DMAS_FIS = 4,\n\tPORT_IRQ_PIOS_FIS = 2,\n\tPORT_IRQ_D2H_REG_FIS = 1,\n\tPORT_IRQ_FREEZE = 683671632,\n\tPORT_IRQ_ERROR = 2025848912,\n\tDEF_PORT_IRQ = 2025848959,\n\tPORT_CMD_ASP = 134217728,\n\tPORT_CMD_ALPE = 67108864,\n\tPORT_CMD_ATAPI = 16777216,\n\tPORT_CMD_FBSCP = 4194304,\n\tPORT_CMD_ESP = 2097152,\n\tPORT_CMD_HPCP = 262144,\n\tPORT_CMD_PMP = 131072,\n\tPORT_CMD_LIST_ON = 32768,\n\tPORT_CMD_FIS_ON = 16384,\n\tPORT_CMD_FIS_RX = 16,\n\tPORT_CMD_CLO = 8,\n\tPORT_CMD_POWER_ON = 4,\n\tPORT_CMD_SPIN_UP = 2,\n\tPORT_CMD_START = 1,\n\tPORT_CMD_ICC_MASK = 4026531840,\n\tPORT_CMD_ICC_ACTIVE = 268435456,\n\tPORT_CMD_ICC_PARTIAL = 536870912,\n\tPORT_CMD_ICC_SLUMBER = 1610612736,\n\tPORT_FBS_DWE_OFFSET = 16,\n\tPORT_FBS_ADO_OFFSET = 12,\n\tPORT_FBS_DEV_OFFSET = 8,\n\tPORT_FBS_DEV_MASK = 3840,\n\tPORT_FBS_SDE = 4,\n\tPORT_FBS_DEC = 2,\n\tPORT_FBS_EN = 1,\n\tPORT_DEVSLP_DM_OFFSET = 25,\n\tPORT_DEVSLP_DM_MASK = 503316480,\n\tPORT_DEVSLP_DITO_OFFSET = 15,\n\tPORT_DEVSLP_MDAT_OFFSET = 10,\n\tPORT_DEVSLP_DETO_OFFSET = 2,\n\tPORT_DEVSLP_DSP = 2,\n\tPORT_DEVSLP_ADSE = 1,\n\tAHCI_HFLAG_NO_NCQ = 1,\n\tAHCI_HFLAG_IGN_IRQ_IF_ERR = 2,\n\tAHCI_HFLAG_IGN_SERR_INTERNAL = 4,\n\tAHCI_HFLAG_32BIT_ONLY = 8,\n\tAHCI_HFLAG_MV_PATA = 16,\n\tAHCI_HFLAG_NO_MSI = 32,\n\tAHCI_HFLAG_NO_PMP = 64,\n\tAHCI_HFLAG_SECT255 = 256,\n\tAHCI_HFLAG_YES_NCQ = 512,\n\tAHCI_HFLAG_NO_SUSPEND = 1024,\n\tAHCI_HFLAG_SRST_TOUT_IS_OFFLINE = 2048,\n\tAHCI_HFLAG_NO_SNTF = 4096,\n\tAHCI_HFLAG_NO_FPDMA_AA = 8192,\n\tAHCI_HFLAG_YES_FBS = 16384,\n\tAHCI_HFLAG_DELAY_ENGINE = 32768,\n\tAHCI_HFLAG_NO_DEVSLP = 131072,\n\tAHCI_HFLAG_NO_FBS = 262144,\n\tAHCI_HFLAG_MULTI_MSI = 1048576,\n\tAHCI_HFLAG_WAKE_BEFORE_STOP = 4194304,\n\tAHCI_HFLAG_YES_ALPM = 8388608,\n\tAHCI_HFLAG_NO_WRITE_TO_RO = 16777216,\n\tAHCI_HFLAG_IS_MOBILE = 33554432,\n\tAHCI_HFLAG_SUSPEND_PHYS = 67108864,\n\tAHCI_HFLAG_IGN_NOTSUPP_POWER_ON = 134217728,\n\tAHCI_FLAG_COMMON = 393346,\n\tICH_MAP = 144,\n\tPCS_6 = 146,\n\tPCS_7 = 148,\n\tEM_MAX_SLOTS = 8,\n\tEM_MAX_RETRY = 5,\n\tEM_CTL_RST = 512,\n\tEM_CTL_TM = 256,\n\tEM_CTL_MR = 1,\n\tEM_CTL_ALHD = 67108864,\n\tEM_CTL_XMT = 33554432,\n\tEM_CTL_SMB = 16777216,\n\tEM_CTL_SGPIO = 524288,\n\tEM_CTL_SES = 262144,\n\tEM_CTL_SAFTE = 131072,\n\tEM_CTL_LED = 65536,\n\tEM_MSG_TYPE_LED = 1,\n\tEM_MSG_TYPE_SAFTE = 2,\n\tEM_MSG_TYPE_SES2 = 4,\n\tEM_MSG_TYPE_SGPIO = 8,\n};\n\nstruct ahci_cmd_hdr {\n\t__le32 opts;\n\t__le32 status;\n\t__le32 tbl_addr;\n\t__le32 tbl_addr_hi;\n\t__le32 reserved[4];\n};\n\nstruct ahci_em_priv {\n\tenum sw_activity blink_policy;\n\tstruct timer_list timer;\n\tlong unsigned int saved_activity;\n\tlong unsigned int activity;\n\tlong unsigned int led_state;\n\tstruct ata_link *link;\n};\n\nstruct ahci_port_priv {\n\tstruct ata_link *active_link;\n\tstruct ahci_cmd_hdr *cmd_slot;\n\tdma_addr_t cmd_slot_dma;\n\tvoid *cmd_tbl;\n\tdma_addr_t cmd_tbl_dma;\n\tvoid *rx_fis;\n\tdma_addr_t rx_fis_dma;\n\tunsigned int ncq_saw_d2h: 1;\n\tunsigned int ncq_saw_dmas: 1;\n\tunsigned int ncq_saw_sdb: 1;\n\tspinlock_t lock;\n\tu32 intr_mask;\n\tbool fbs_supported;\n\tbool fbs_enabled;\n\tint fbs_last_dev;\n\tstruct ahci_em_priv em_priv[8];\n\tchar *irq_desc;\n};\n\nstruct ahci_host_priv {\n\tunsigned int flags;\n\tu32 force_port_map;\n\tu32 mask_port_map;\n\tvoid *mmio;\n\tu32 cap;\n\tu32 cap2;\n\tu32 version;\n\tu32 port_map;\n\tu32 saved_cap;\n\tu32 saved_cap2;\n\tu32 saved_port_map;\n\tu32 em_loc;\n\tu32 em_buf_sz;\n\tu32 em_msg_type;\n\tu32 remapped_nvme;\n\tbool got_runtime_pm;\n\tstruct clk *clks[5];\n\tstruct reset_control___2 *rsts;\n\tstruct regulator **target_pwrs;\n\tstruct regulator *ahci_regulator;\n\tstruct regulator *phy_regulator;\n\tstruct phy **phys;\n\tunsigned int nports;\n\tvoid *plat_data;\n\tunsigned int irq;\n\tvoid (*start_engine)(struct ata_port *);\n\tint (*stop_engine)(struct ata_port *);\n\tirqreturn_t (*irq_handler)(int, void *);\n\tint (*get_irq_vector)(struct ata_host *, int);\n};\n\nenum {\n\tAHCI_PCI_BAR_STA2X11 = 0,\n\tAHCI_PCI_BAR_CAVIUM = 0,\n\tAHCI_PCI_BAR_LOONGSON = 0,\n\tAHCI_PCI_BAR_ENMOTUS = 2,\n\tAHCI_PCI_BAR_CAVIUM_GEN5 = 4,\n\tAHCI_PCI_BAR_STANDARD = 5,\n};\n\nenum board_ids {\n\tboard_ahci = 0,\n\tboard_ahci_ign_iferr = 1,\n\tboard_ahci_mobile = 2,\n\tboard_ahci_nomsi = 3,\n\tboard_ahci_noncq = 4,\n\tboard_ahci_nosntf = 5,\n\tboard_ahci_yes_fbs = 6,\n\tboard_ahci_al = 7,\n\tboard_ahci_avn = 8,\n\tboard_ahci_mcp65 = 9,\n\tboard_ahci_mcp77 = 10,\n\tboard_ahci_mcp89 = 11,\n\tboard_ahci_mv = 12,\n\tboard_ahci_sb600 = 13,\n\tboard_ahci_sb700 = 14,\n\tboard_ahci_vt8251 = 15,\n\tboard_ahci_pcs7 = 16,\n\tboard_ahci_mcp_linux = 9,\n\tboard_ahci_mcp67 = 9,\n\tboard_ahci_mcp73 = 9,\n\tboard_ahci_mcp79 = 10,\n};\n\nstruct ahci_sg {\n\t__le32 addr;\n\t__le32 addr_hi;\n\t__le32 reserved;\n\t__le32 flags_size;\n};\n\nenum {\n\tPIIX_IOCFG = 84,\n\tICH5_PMR = 144,\n\tICH5_PCS = 146,\n\tPIIX_SIDPR_BAR = 5,\n\tPIIX_SIDPR_LEN = 16,\n\tPIIX_SIDPR_IDX = 0,\n\tPIIX_SIDPR_DATA = 4,\n\tPIIX_FLAG_CHECKINTR = 268435456,\n\tPIIX_FLAG_SIDPR = 536870912,\n\tPIIX_PATA_FLAGS = 1,\n\tPIIX_SATA_FLAGS = 268435458,\n\tPIIX_FLAG_PIO16 = 1073741824,\n\tPIIX_80C_PRI = 48,\n\tPIIX_80C_SEC = 192,\n\tP0 = 0,\n\tP1 = 1,\n\tP2 = 2,\n\tP3 = 3,\n\tIDE = 4294967295,\n\tNA = 4294967294,\n\tRV = 4294967293,\n\tPIIX_AHCI_DEVICE = 6,\n\tPIIX_HOST_BROKEN_SUSPEND = 16777216,\n};\n\nenum piix_controller_ids {\n\tpiix_pata_mwdma = 0,\n\tpiix_pata_33 = 1,\n\tich_pata_33 = 2,\n\tich_pata_66 = 3,\n\tich_pata_100 = 4,\n\tich_pata_100_nomwdma1 = 5,\n\tich5_sata = 6,\n\tich6_sata = 7,\n\tich6m_sata = 8,\n\tich8_sata = 9,\n\tich8_2port_sata = 10,\n\tich8m_apple_sata = 11,\n\ttolapai_sata = 12,\n\tpiix_pata_vmw = 13,\n\tich8_sata_snb = 14,\n\tich8_2port_sata_snb = 15,\n\tich8_2port_sata_byt = 16,\n};\n\nstruct piix_map_db {\n\tconst u32 mask;\n\tconst u16 port_enable;\n\tconst int map[0];\n};\n\nstruct piix_host_priv {\n\tconst int *map;\n\tu32 saved_iocfg;\n\tvoid *sidpr;\n};\n\nstruct ich_laptop {\n\tu16 device;\n\tu16 subvendor;\n\tu16 subdevice;\n};\n\nstruct spi_device_id {\n\tchar name[32];\n\tkernel_ulong_t driver_data;\n};\n\nstruct ptp_system_timestamp {\n\tstruct timespec64 pre_ts;\n\tstruct timespec64 post_ts;\n};\n\nstruct spi_statistics {\n\tspinlock_t lock;\n\tlong unsigned int messages;\n\tlong unsigned int transfers;\n\tlong unsigned int errors;\n\tlong unsigned int timedout;\n\tlong unsigned int spi_sync;\n\tlong unsigned int spi_sync_immediate;\n\tlong unsigned int spi_async;\n\tlong long unsigned int bytes;\n\tlong long unsigned int bytes_rx;\n\tlong long unsigned int bytes_tx;\n\tlong unsigned int transfer_bytes_histo[17];\n\tlong unsigned int transfers_split_maxsize;\n};\n\nstruct spi_delay {\n\tu16 value;\n\tu8 unit;\n};\n\nstruct spi_controller;\n\nstruct spi_device {\n\tstruct device dev;\n\tstruct spi_controller *controller;\n\tstruct spi_controller *master;\n\tu32 max_speed_hz;\n\tu8 chip_select;\n\tu8 bits_per_word;\n\tbool rt;\n\tu32 mode;\n\tint irq;\n\tvoid *controller_state;\n\tvoid *controller_data;\n\tchar modalias[32];\n\tconst char *driver_override;\n\tint cs_gpio;\n\tstruct gpio_desc___2 *cs_gpiod;\n\tstruct spi_delay word_delay;\n\tstruct spi_statistics statistics;\n};\n\nstruct spi_message;\n\nstruct spi_transfer;\n\nstruct spi_controller_mem_ops;\n\nstruct spi_controller {\n\tstruct device dev;\n\tstruct list_head list;\n\ts16 bus_num;\n\tu16 num_chipselect;\n\tu16 dma_alignment;\n\tu32 mode_bits;\n\tu32 buswidth_override_bits;\n\tu32 bits_per_word_mask;\n\tu32 min_speed_hz;\n\tu32 max_speed_hz;\n\tu16 flags;\n\tbool slave;\n\tsize_t (*max_transfer_size)(struct spi_device *);\n\tsize_t (*max_message_size)(struct spi_device *);\n\tstruct mutex io_mutex;\n\tspinlock_t bus_lock_spinlock;\n\tstruct mutex bus_lock_mutex;\n\tbool bus_lock_flag;\n\tint (*setup)(struct spi_device *);\n\tint (*set_cs_timing)(struct spi_device *, struct spi_delay *, struct spi_delay *, struct spi_delay *);\n\tint (*transfer)(struct spi_device *, struct spi_message *);\n\tvoid (*cleanup)(struct spi_device *);\n\tbool (*can_dma)(struct spi_controller *, struct spi_device *, struct spi_transfer *);\n\tbool queued;\n\tstruct kthread_worker *kworker;\n\tstruct kthread_work pump_messages;\n\tspinlock_t queue_lock;\n\tstruct list_head queue;\n\tstruct spi_message *cur_msg;\n\tbool idling;\n\tbool busy;\n\tbool running;\n\tbool rt;\n\tbool auto_runtime_pm;\n\tbool cur_msg_prepared;\n\tbool cur_msg_mapped;\n\tbool last_cs_enable;\n\tbool last_cs_mode_high;\n\tbool fallback;\n\tstruct completion xfer_completion;\n\tsize_t max_dma_len;\n\tint (*prepare_transfer_hardware)(struct spi_controller *);\n\tint (*transfer_one_message)(struct spi_controller *, struct spi_message *);\n\tint (*unprepare_transfer_hardware)(struct spi_controller *);\n\tint (*prepare_message)(struct spi_controller *, struct spi_message *);\n\tint (*unprepare_message)(struct spi_controller *, struct spi_message *);\n\tint (*slave_abort)(struct spi_controller *);\n\tvoid (*set_cs)(struct spi_device *, bool);\n\tint (*transfer_one)(struct spi_controller *, struct spi_device *, struct spi_transfer *);\n\tvoid (*handle_err)(struct spi_controller *, struct spi_message *);\n\tconst struct spi_controller_mem_ops *mem_ops;\n\tstruct spi_delay cs_setup;\n\tstruct spi_delay cs_hold;\n\tstruct spi_delay cs_inactive;\n\tint *cs_gpios;\n\tstruct gpio_desc___2 **cs_gpiods;\n\tbool use_gpio_descriptors;\n\tu8 unused_native_cs;\n\tu8 max_native_cs;\n\tstruct spi_statistics statistics;\n\tstruct dma_chan___2 *dma_tx;\n\tstruct dma_chan___2 *dma_rx;\n\tvoid *dummy_rx;\n\tvoid *dummy_tx;\n\tint (*fw_translate_cs)(struct spi_controller *, unsigned int);\n\tbool ptp_sts_supported;\n\tlong unsigned int irq_flags;\n};\n\nstruct spi_driver {\n\tconst struct spi_device_id *id_table;\n\tint (*probe)(struct spi_device *);\n\tint (*remove)(struct spi_device *);\n\tvoid (*shutdown)(struct spi_device *);\n\tstruct device_driver driver;\n};\n\nstruct spi_message {\n\tstruct list_head transfers;\n\tstruct spi_device *spi;\n\tunsigned int is_dma_mapped: 1;\n\tvoid (*complete)(void *);\n\tvoid *context;\n\tunsigned int frame_length;\n\tunsigned int actual_length;\n\tint status;\n\tstruct list_head queue;\n\tvoid *state;\n\tstruct list_head resources;\n};\n\nstruct spi_transfer {\n\tconst void *tx_buf;\n\tvoid *rx_buf;\n\tunsigned int len;\n\tdma_addr_t tx_dma;\n\tdma_addr_t rx_dma;\n\tstruct sg_table tx_sg;\n\tstruct sg_table rx_sg;\n\tunsigned int cs_change: 1;\n\tunsigned int tx_nbits: 3;\n\tunsigned int rx_nbits: 3;\n\tu8 bits_per_word;\n\tu16 delay_usecs;\n\tstruct spi_delay delay;\n\tstruct spi_delay cs_change_delay;\n\tstruct spi_delay word_delay;\n\tu32 speed_hz;\n\tu32 effective_speed_hz;\n\tunsigned int ptp_sts_word_pre;\n\tunsigned int ptp_sts_word_post;\n\tstruct ptp_system_timestamp *ptp_sts;\n\tbool timestamped;\n\tstruct list_head transfer_list;\n\tu16 error;\n};\n\nstruct spi_mem;\n\nstruct spi_mem_op;\n\nstruct spi_mem_dirmap_desc;\n\nstruct spi_controller_mem_ops {\n\tint (*adjust_op_size)(struct spi_mem *, struct spi_mem_op *);\n\tbool (*supports_op)(struct spi_mem *, const struct spi_mem_op *);\n\tint (*exec_op)(struct spi_mem *, const struct spi_mem_op *);\n\tconst char * (*get_name)(struct spi_mem *);\n\tint (*dirmap_create)(struct spi_mem_dirmap_desc *);\n\tvoid (*dirmap_destroy)(struct spi_mem_dirmap_desc *);\n\tssize_t (*dirmap_read)(struct spi_mem_dirmap_desc *, u64, size_t, void *);\n\tssize_t (*dirmap_write)(struct spi_mem_dirmap_desc *, u64, size_t, const void *);\n};\n\ntypedef void (*spi_res_release_t)(struct spi_controller *, struct spi_message *, void *);\n\nstruct spi_res {\n\tstruct list_head entry;\n\tspi_res_release_t release;\n\tlong long unsigned int data[0];\n};\n\nstruct spi_replaced_transfers;\n\ntypedef void (*spi_replaced_release_t)(struct spi_controller *, struct spi_message *, struct spi_replaced_transfers *);\n\nstruct spi_replaced_transfers {\n\tspi_replaced_release_t release;\n\tvoid *extradata;\n\tstruct list_head replaced_transfers;\n\tstruct list_head *replaced_after;\n\tsize_t inserted;\n\tstruct spi_transfer inserted_transfers[0];\n};\n\nstruct spi_board_info {\n\tchar modalias[32];\n\tconst void *platform_data;\n\tconst struct property_entry *properties;\n\tvoid *controller_data;\n\tint irq;\n\tu32 max_speed_hz;\n\tu16 bus_num;\n\tu16 chip_select;\n\tu32 mode;\n};\n\nenum spi_mem_data_dir {\n\tSPI_MEM_NO_DATA = 0,\n\tSPI_MEM_DATA_IN = 1,\n\tSPI_MEM_DATA_OUT = 2,\n};\n\nstruct spi_mem_op {\n\tstruct {\n\t\tu8 nbytes;\n\t\tu8 buswidth;\n\t\tu8 dtr: 1;\n\t\tu16 opcode;\n\t} cmd;\n\tstruct {\n\t\tu8 nbytes;\n\t\tu8 buswidth;\n\t\tu8 dtr: 1;\n\t\tu64 val;\n\t} addr;\n\tstruct {\n\t\tu8 nbytes;\n\t\tu8 buswidth;\n\t\tu8 dtr: 1;\n\t} dummy;\n\tstruct {\n\t\tu8 buswidth;\n\t\tu8 dtr: 1;\n\t\tenum spi_mem_data_dir dir;\n\t\tunsigned int nbytes;\n\t\tunion {\n\t\t\tvoid *in;\n\t\t\tconst void *out;\n\t\t} buf;\n\t} data;\n};\n\nstruct spi_mem_dirmap_info {\n\tstruct spi_mem_op op_tmpl;\n\tu64 offset;\n\tu64 length;\n};\n\nstruct spi_mem_dirmap_desc {\n\tstruct spi_mem *mem;\n\tstruct spi_mem_dirmap_info info;\n\tunsigned int nodirmap;\n\tvoid *priv;\n};\n\nstruct spi_mem {\n\tstruct spi_device *spi;\n\tvoid *drvpriv;\n\tconst char *name;\n};\n\nstruct trace_event_raw_spi_controller {\n\tstruct trace_entry ent;\n\tint bus_num;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_spi_message {\n\tstruct trace_entry ent;\n\tint bus_num;\n\tint chip_select;\n\tstruct spi_message *msg;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_spi_message_done {\n\tstruct trace_entry ent;\n\tint bus_num;\n\tint chip_select;\n\tstruct spi_message *msg;\n\tunsigned int frame;\n\tunsigned int actual;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_spi_transfer {\n\tstruct trace_entry ent;\n\tint bus_num;\n\tint chip_select;\n\tstruct spi_transfer *xfer;\n\tint len;\n\tu32 __data_loc_rx_buf;\n\tu32 __data_loc_tx_buf;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_spi_controller {};\n\nstruct trace_event_data_offsets_spi_message {};\n\nstruct trace_event_data_offsets_spi_message_done {};\n\nstruct trace_event_data_offsets_spi_transfer {\n\tu32 rx_buf;\n\tu32 tx_buf;\n};\n\ntypedef void (*btf_trace_spi_controller_idle)(void *, struct spi_controller *);\n\ntypedef void (*btf_trace_spi_controller_busy)(void *, struct spi_controller *);\n\ntypedef void (*btf_trace_spi_message_submit)(void *, struct spi_message *);\n\ntypedef void (*btf_trace_spi_message_start)(void *, struct spi_message *);\n\ntypedef void (*btf_trace_spi_message_done)(void *, struct spi_message *);\n\ntypedef void (*btf_trace_spi_transfer_start)(void *, struct spi_message *, struct spi_transfer *);\n\ntypedef void (*btf_trace_spi_transfer_stop)(void *, struct spi_message *, struct spi_transfer *);\n\nstruct boardinfo {\n\tstruct list_head list;\n\tstruct spi_board_info board_info;\n};\n\nstruct acpi_spi_lookup {\n\tstruct spi_controller *ctlr;\n\tu32 max_speed_hz;\n\tu32 mode;\n\tint irq;\n\tu8 bits_per_word;\n\tu8 chip_select;\n};\n\nstruct amd_spi {\n\tvoid *io_remap_addr;\n\tlong unsigned int io_base_addr;\n\tu32 rom_addr;\n\tu8 chip_select;\n};\n\nstruct devprobe2 {\n\tstruct net_device * (*probe)(int);\n\tint status;\n};\n\nenum {\n\tNETIF_F_SG_BIT = 0,\n\tNETIF_F_IP_CSUM_BIT = 1,\n\t__UNUSED_NETIF_F_1 = 2,\n\tNETIF_F_HW_CSUM_BIT = 3,\n\tNETIF_F_IPV6_CSUM_BIT = 4,\n\tNETIF_F_HIGHDMA_BIT = 5,\n\tNETIF_F_FRAGLIST_BIT = 6,\n\tNETIF_F_HW_VLAN_CTAG_TX_BIT = 7,\n\tNETIF_F_HW_VLAN_CTAG_RX_BIT = 8,\n\tNETIF_F_HW_VLAN_CTAG_FILTER_BIT = 9,\n\tNETIF_F_VLAN_CHALLENGED_BIT = 10,\n\tNETIF_F_GSO_BIT = 11,\n\tNETIF_F_LLTX_BIT = 12,\n\tNETIF_F_NETNS_LOCAL_BIT = 13,\n\tNETIF_F_GRO_BIT = 14,\n\tNETIF_F_LRO_BIT = 15,\n\tNETIF_F_GSO_SHIFT = 16,\n\tNETIF_F_TSO_BIT = 16,\n\tNETIF_F_GSO_ROBUST_BIT = 17,\n\tNETIF_F_TSO_ECN_BIT = 18,\n\tNETIF_F_TSO_MANGLEID_BIT = 19,\n\tNETIF_F_TSO6_BIT = 20,\n\tNETIF_F_FSO_BIT = 21,\n\tNETIF_F_GSO_GRE_BIT = 22,\n\tNETIF_F_GSO_GRE_CSUM_BIT = 23,\n\tNETIF_F_GSO_IPXIP4_BIT = 24,\n\tNETIF_F_GSO_IPXIP6_BIT = 25,\n\tNETIF_F_GSO_UDP_TUNNEL_BIT = 26,\n\tNETIF_F_GSO_UDP_TUNNEL_CSUM_BIT = 27,\n\tNETIF_F_GSO_PARTIAL_BIT = 28,\n\tNETIF_F_GSO_TUNNEL_REMCSUM_BIT = 29,\n\tNETIF_F_GSO_SCTP_BIT = 30,\n\tNETIF_F_GSO_ESP_BIT = 31,\n\tNETIF_F_GSO_UDP_BIT = 32,\n\tNETIF_F_GSO_UDP_L4_BIT = 33,\n\tNETIF_F_GSO_FRAGLIST_BIT = 34,\n\tNETIF_F_GSO_LAST = 34,\n\tNETIF_F_FCOE_CRC_BIT = 35,\n\tNETIF_F_SCTP_CRC_BIT = 36,\n\tNETIF_F_FCOE_MTU_BIT = 37,\n\tNETIF_F_NTUPLE_BIT = 38,\n\tNETIF_F_RXHASH_BIT = 39,\n\tNETIF_F_RXCSUM_BIT = 40,\n\tNETIF_F_NOCACHE_COPY_BIT = 41,\n\tNETIF_F_LOOPBACK_BIT = 42,\n\tNETIF_F_RXFCS_BIT = 43,\n\tNETIF_F_RXALL_BIT = 44,\n\tNETIF_F_HW_VLAN_STAG_TX_BIT = 45,\n\tNETIF_F_HW_VLAN_STAG_RX_BIT = 46,\n\tNETIF_F_HW_VLAN_STAG_FILTER_BIT = 47,\n\tNETIF_F_HW_L2FW_DOFFLOAD_BIT = 48,\n\tNETIF_F_HW_TC_BIT = 49,\n\tNETIF_F_HW_ESP_BIT = 50,\n\tNETIF_F_HW_ESP_TX_CSUM_BIT = 51,\n\tNETIF_F_RX_UDP_TUNNEL_PORT_BIT = 52,\n\tNETIF_F_HW_TLS_TX_BIT = 53,\n\tNETIF_F_HW_TLS_RX_BIT = 54,\n\tNETIF_F_GRO_HW_BIT = 55,\n\tNETIF_F_HW_TLS_RECORD_BIT = 56,\n\tNETIF_F_GRO_FRAGLIST_BIT = 57,\n\tNETIF_F_HW_MACSEC_BIT = 58,\n\tNETDEV_FEATURE_COUNT = 59,\n};\n\nenum {\n\tSKBTX_HW_TSTAMP = 1,\n\tSKBTX_SW_TSTAMP = 2,\n\tSKBTX_IN_PROGRESS = 4,\n\tSKBTX_DEV_ZEROCOPY = 8,\n\tSKBTX_WIFI_STATUS = 16,\n\tSKBTX_SHARED_FRAG = 32,\n\tSKBTX_SCHED_TSTAMP = 64,\n};\n\nenum netdev_priv_flags {\n\tIFF_802_1Q_VLAN = 1,\n\tIFF_EBRIDGE = 2,\n\tIFF_BONDING = 4,\n\tIFF_ISATAP = 8,\n\tIFF_WAN_HDLC = 16,\n\tIFF_XMIT_DST_RELEASE = 32,\n\tIFF_DONT_BRIDGE = 64,\n\tIFF_DISABLE_NETPOLL = 128,\n\tIFF_MACVLAN_PORT = 256,\n\tIFF_BRIDGE_PORT = 512,\n\tIFF_OVS_DATAPATH = 1024,\n\tIFF_TX_SKB_SHARING = 2048,\n\tIFF_UNICAST_FLT = 4096,\n\tIFF_TEAM_PORT = 8192,\n\tIFF_SUPP_NOFCS = 16384,\n\tIFF_LIVE_ADDR_CHANGE = 32768,\n\tIFF_MACVLAN = 65536,\n\tIFF_XMIT_DST_RELEASE_PERM = 131072,\n\tIFF_L3MDEV_MASTER = 262144,\n\tIFF_NO_QUEUE = 524288,\n\tIFF_OPENVSWITCH = 1048576,\n\tIFF_L3MDEV_SLAVE = 2097152,\n\tIFF_TEAM = 4194304,\n\tIFF_RXFH_CONFIGURED = 8388608,\n\tIFF_PHONY_HEADROOM = 16777216,\n\tIFF_MACSEC = 33554432,\n\tIFF_NO_RX_HANDLER = 67108864,\n\tIFF_FAILOVER = 134217728,\n\tIFF_FAILOVER_SLAVE = 268435456,\n\tIFF_L3MDEV_RX_HANDLER = 536870912,\n\tIFF_LIVE_RENAME_OK = 1073741824,\n};\n\nstruct mdio_board_info {\n\tconst char *bus_id;\n\tchar modalias[32];\n\tint mdio_addr;\n\tconst void *platform_data;\n};\n\nstruct mdio_board_entry {\n\tstruct list_head list;\n\tstruct mdio_board_info board_info;\n};\n\nstruct mdiobus_devres {\n\tstruct mii_bus *mii;\n};\n\nenum netdev_state_t {\n\t__LINK_STATE_START = 0,\n\t__LINK_STATE_PRESENT = 1,\n\t__LINK_STATE_NOCARRIER = 2,\n\t__LINK_STATE_LINKWATCH_PENDING = 3,\n\t__LINK_STATE_DORMANT = 4,\n\t__LINK_STATE_TESTING = 5,\n};\n\nstruct mii_ioctl_data {\n\t__u16 phy_id;\n\t__u16 reg_num;\n\t__u16 val_in;\n\t__u16 val_out;\n};\n\nenum {\n\tETHTOOL_MSG_KERNEL_NONE = 0,\n\tETHTOOL_MSG_STRSET_GET_REPLY = 1,\n\tETHTOOL_MSG_LINKINFO_GET_REPLY = 2,\n\tETHTOOL_MSG_LINKINFO_NTF = 3,\n\tETHTOOL_MSG_LINKMODES_GET_REPLY = 4,\n\tETHTOOL_MSG_LINKMODES_NTF = 5,\n\tETHTOOL_MSG_LINKSTATE_GET_REPLY = 6,\n\tETHTOOL_MSG_DEBUG_GET_REPLY = 7,\n\tETHTOOL_MSG_DEBUG_NTF = 8,\n\tETHTOOL_MSG_WOL_GET_REPLY = 9,\n\tETHTOOL_MSG_WOL_NTF = 10,\n\tETHTOOL_MSG_FEATURES_GET_REPLY = 11,\n\tETHTOOL_MSG_FEATURES_SET_REPLY = 12,\n\tETHTOOL_MSG_FEATURES_NTF = 13,\n\tETHTOOL_MSG_PRIVFLAGS_GET_REPLY = 14,\n\tETHTOOL_MSG_PRIVFLAGS_NTF = 15,\n\tETHTOOL_MSG_RINGS_GET_REPLY = 16,\n\tETHTOOL_MSG_RINGS_NTF = 17,\n\tETHTOOL_MSG_CHANNELS_GET_REPLY = 18,\n\tETHTOOL_MSG_CHANNELS_NTF = 19,\n\tETHTOOL_MSG_COALESCE_GET_REPLY = 20,\n\tETHTOOL_MSG_COALESCE_NTF = 21,\n\tETHTOOL_MSG_PAUSE_GET_REPLY = 22,\n\tETHTOOL_MSG_PAUSE_NTF = 23,\n\tETHTOOL_MSG_EEE_GET_REPLY = 24,\n\tETHTOOL_MSG_EEE_NTF = 25,\n\tETHTOOL_MSG_TSINFO_GET_REPLY = 26,\n\tETHTOOL_MSG_CABLE_TEST_NTF = 27,\n\tETHTOOL_MSG_CABLE_TEST_TDR_NTF = 28,\n\tETHTOOL_MSG_TUNNEL_INFO_GET_REPLY = 29,\n\t__ETHTOOL_MSG_KERNEL_CNT = 30,\n\tETHTOOL_MSG_KERNEL_MAX = 29,\n};\n\nstruct phy_led_trigger {\n\tstruct led_trigger trigger;\n\tchar name[76];\n\tunsigned int speed;\n};\n\nstruct phy_setting {\n\tu32 speed;\n\tu8 duplex;\n\tu8 bit;\n};\n\nstruct ethtool_phy_ops {\n\tint (*get_sset_count)(struct phy_device *);\n\tint (*get_strings)(struct phy_device *, u8 *);\n\tint (*get_stats)(struct phy_device *, struct ethtool_stats *, u64 *);\n\tint (*start_cable_test)(struct phy_device *, struct netlink_ext_ack *);\n\tint (*start_cable_test_tdr)(struct phy_device *, struct netlink_ext_ack *, const struct phy_tdr_config *);\n};\n\nstruct phy_fixup {\n\tstruct list_head list;\n\tchar bus_id[64];\n\tu32 phy_uid;\n\tu32 phy_uid_mask;\n\tint (*run)(struct phy_device *);\n};\n\nstruct sfp_eeprom_base {\n\tu8 phys_id;\n\tu8 phys_ext_id;\n\tu8 connector;\n\tu8 if_1x_copper_passive: 1;\n\tu8 if_1x_copper_active: 1;\n\tu8 if_1x_lx: 1;\n\tu8 if_1x_sx: 1;\n\tu8 e10g_base_sr: 1;\n\tu8 e10g_base_lr: 1;\n\tu8 e10g_base_lrm: 1;\n\tu8 e10g_base_er: 1;\n\tu8 sonet_oc3_short_reach: 1;\n\tu8 sonet_oc3_smf_intermediate_reach: 1;\n\tu8 sonet_oc3_smf_long_reach: 1;\n\tu8 unallocated_5_3: 1;\n\tu8 sonet_oc12_short_reach: 1;\n\tu8 sonet_oc12_smf_intermediate_reach: 1;\n\tu8 sonet_oc12_smf_long_reach: 1;\n\tu8 unallocated_5_7: 1;\n\tu8 sonet_oc48_short_reach: 1;\n\tu8 sonet_oc48_intermediate_reach: 1;\n\tu8 sonet_oc48_long_reach: 1;\n\tu8 sonet_reach_bit2: 1;\n\tu8 sonet_reach_bit1: 1;\n\tu8 sonet_oc192_short_reach: 1;\n\tu8 escon_smf_1310_laser: 1;\n\tu8 escon_mmf_1310_led: 1;\n\tu8 e1000_base_sx: 1;\n\tu8 e1000_base_lx: 1;\n\tu8 e1000_base_cx: 1;\n\tu8 e1000_base_t: 1;\n\tu8 e100_base_lx: 1;\n\tu8 e100_base_fx: 1;\n\tu8 e_base_bx10: 1;\n\tu8 e_base_px: 1;\n\tu8 fc_tech_electrical_inter_enclosure: 1;\n\tu8 fc_tech_lc: 1;\n\tu8 fc_tech_sa: 1;\n\tu8 fc_ll_m: 1;\n\tu8 fc_ll_l: 1;\n\tu8 fc_ll_i: 1;\n\tu8 fc_ll_s: 1;\n\tu8 fc_ll_v: 1;\n\tu8 unallocated_8_0: 1;\n\tu8 unallocated_8_1: 1;\n\tu8 sfp_ct_passive: 1;\n\tu8 sfp_ct_active: 1;\n\tu8 fc_tech_ll: 1;\n\tu8 fc_tech_sl: 1;\n\tu8 fc_tech_sn: 1;\n\tu8 fc_tech_electrical_intra_enclosure: 1;\n\tu8 fc_media_sm: 1;\n\tu8 unallocated_9_1: 1;\n\tu8 fc_media_m5: 1;\n\tu8 fc_media_m6: 1;\n\tu8 fc_media_tv: 1;\n\tu8 fc_media_mi: 1;\n\tu8 fc_media_tp: 1;\n\tu8 fc_media_tw: 1;\n\tu8 fc_speed_100: 1;\n\tu8 unallocated_10_1: 1;\n\tu8 fc_speed_200: 1;\n\tu8 fc_speed_3200: 1;\n\tu8 fc_speed_400: 1;\n\tu8 fc_speed_1600: 1;\n\tu8 fc_speed_800: 1;\n\tu8 fc_speed_1200: 1;\n\tu8 encoding;\n\tu8 br_nominal;\n\tu8 rate_id;\n\tu8 link_len[6];\n\tchar vendor_name[16];\n\tu8 extended_cc;\n\tchar vendor_oui[3];\n\tchar vendor_pn[16];\n\tchar vendor_rev[4];\n\tunion {\n\t\t__be16 optical_wavelength;\n\t\t__be16 cable_compliance;\n\t\tstruct {\n\t\t\tu8 sff8431_app_e: 1;\n\t\t\tu8 fc_pi_4_app_h: 1;\n\t\t\tu8 reserved60_2: 6;\n\t\t\tu8 reserved61: 8;\n\t\t} passive;\n\t\tstruct {\n\t\t\tu8 sff8431_app_e: 1;\n\t\t\tu8 fc_pi_4_app_h: 1;\n\t\t\tu8 sff8431_lim: 1;\n\t\t\tu8 fc_pi_4_lim: 1;\n\t\t\tu8 reserved60_4: 4;\n\t\t\tu8 reserved61: 8;\n\t\t} active;\n\t};\n\tu8 reserved62;\n\tu8 cc_base;\n};\n\nstruct sfp_eeprom_ext {\n\t__be16 options;\n\tu8 br_max;\n\tu8 br_min;\n\tchar vendor_sn[16];\n\tchar datecode[8];\n\tu8 diagmon;\n\tu8 enhopts;\n\tu8 sff8472_compliance;\n\tu8 cc_ext;\n};\n\nstruct sfp_eeprom_id {\n\tstruct sfp_eeprom_base base;\n\tstruct sfp_eeprom_ext ext;\n};\n\nstruct sfp_upstream_ops {\n\tvoid (*attach)(void *, struct sfp_bus *);\n\tvoid (*detach)(void *, struct sfp_bus *);\n\tint (*module_insert)(void *, const struct sfp_eeprom_id *);\n\tvoid (*module_remove)(void *);\n\tint (*module_start)(void *);\n\tvoid (*module_stop)(void *);\n\tvoid (*link_down)(void *);\n\tvoid (*link_up)(void *);\n\tint (*connect_phy)(void *, struct phy_device *);\n\tvoid (*disconnect_phy)(void *);\n};\n\nstruct trace_event_raw_mdio_access {\n\tstruct trace_entry ent;\n\tchar busid[61];\n\tchar read;\n\tu8 addr;\n\tu16 val;\n\tunsigned int regnum;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mdio_access {};\n\ntypedef void (*btf_trace_mdio_access)(void *, struct mii_bus *, char, u8, unsigned int, u16, int);\n\nstruct mdio_bus_stat_attr {\n\tint addr;\n\tunsigned int field_offset;\n};\n\nstruct mdio_driver {\n\tstruct mdio_driver_common mdiodrv;\n\tint (*probe)(struct mdio_device *);\n\tvoid (*remove)(struct mdio_device *);\n};\n\nstruct fixed_phy_status {\n\tint link;\n\tint speed;\n\tint duplex;\n\tint pause;\n\tint asym_pause;\n};\n\nstruct swmii_regs {\n\tu16 bmsr;\n\tu16 lpa;\n\tu16 lpagb;\n\tu16 estat;\n};\n\nenum {\n\tSWMII_SPEED_10 = 0,\n\tSWMII_SPEED_100 = 1,\n\tSWMII_SPEED_1000 = 2,\n\tSWMII_DUPLEX_HALF = 0,\n\tSWMII_DUPLEX_FULL = 1,\n};\n\nstruct mii_timestamping_ctrl {\n\tstruct mii_timestamper * (*probe_channel)(struct device *, unsigned int);\n\tvoid (*release_channel)(struct device *, struct mii_timestamper *);\n};\n\nstruct mii_timestamping_desc {\n\tstruct list_head list;\n\tstruct mii_timestamping_ctrl *ctrl;\n\tstruct device *device;\n};\n\nstruct sfp;\n\nstruct sfp_socket_ops;\n\nstruct sfp_quirk;\n\nstruct sfp_bus {\n\tstruct kref kref;\n\tstruct list_head node;\n\tstruct fwnode_handle *fwnode;\n\tconst struct sfp_socket_ops *socket_ops;\n\tstruct device *sfp_dev;\n\tstruct sfp *sfp;\n\tconst struct sfp_quirk *sfp_quirk;\n\tconst struct sfp_upstream_ops *upstream_ops;\n\tvoid *upstream;\n\tstruct phy_device *phydev;\n\tbool registered;\n\tbool started;\n};\n\nenum {\n\tSFF8024_ID_UNK = 0,\n\tSFF8024_ID_SFF_8472 = 2,\n\tSFF8024_ID_SFP = 3,\n\tSFF8024_ID_DWDM_SFP = 11,\n\tSFF8024_ID_QSFP_8438 = 12,\n\tSFF8024_ID_QSFP_8436_8636 = 13,\n\tSFF8024_ID_QSFP28_8636 = 17,\n\tSFF8024_ENCODING_UNSPEC = 0,\n\tSFF8024_ENCODING_8B10B = 1,\n\tSFF8024_ENCODING_4B5B = 2,\n\tSFF8024_ENCODING_NRZ = 3,\n\tSFF8024_ENCODING_8472_MANCHESTER = 4,\n\tSFF8024_ENCODING_8472_SONET = 5,\n\tSFF8024_ENCODING_8472_64B66B = 6,\n\tSFF8024_ENCODING_8436_MANCHESTER = 6,\n\tSFF8024_ENCODING_8436_SONET = 4,\n\tSFF8024_ENCODING_8436_64B66B = 5,\n\tSFF8024_ENCODING_256B257B = 7,\n\tSFF8024_ENCODING_PAM4 = 8,\n\tSFF8024_CONNECTOR_UNSPEC = 0,\n\tSFF8024_CONNECTOR_SC = 1,\n\tSFF8024_CONNECTOR_FIBERJACK = 6,\n\tSFF8024_CONNECTOR_LC = 7,\n\tSFF8024_CONNECTOR_MT_RJ = 8,\n\tSFF8024_CONNECTOR_MU = 9,\n\tSFF8024_CONNECTOR_SG = 10,\n\tSFF8024_CONNECTOR_OPTICAL_PIGTAIL = 11,\n\tSFF8024_CONNECTOR_MPO_1X12 = 12,\n\tSFF8024_CONNECTOR_MPO_2X16 = 13,\n\tSFF8024_CONNECTOR_HSSDC_II = 32,\n\tSFF8024_CONNECTOR_COPPER_PIGTAIL = 33,\n\tSFF8024_CONNECTOR_RJ45 = 34,\n\tSFF8024_CONNECTOR_NOSEPARATE = 35,\n\tSFF8024_CONNECTOR_MXC_2X16 = 36,\n\tSFF8024_ECC_UNSPEC = 0,\n\tSFF8024_ECC_100G_25GAUI_C2M_AOC = 1,\n\tSFF8024_ECC_100GBASE_SR4_25GBASE_SR = 2,\n\tSFF8024_ECC_100GBASE_LR4_25GBASE_LR = 3,\n\tSFF8024_ECC_100GBASE_ER4_25GBASE_ER = 4,\n\tSFF8024_ECC_100GBASE_SR10 = 5,\n\tSFF8024_ECC_100GBASE_CR4 = 11,\n\tSFF8024_ECC_25GBASE_CR_S = 12,\n\tSFF8024_ECC_25GBASE_CR_N = 13,\n\tSFF8024_ECC_10GBASE_T_SFI = 22,\n\tSFF8024_ECC_10GBASE_T_SR = 28,\n\tSFF8024_ECC_5GBASE_T = 29,\n\tSFF8024_ECC_2_5GBASE_T = 30,\n};\n\nstruct sfp_socket_ops {\n\tvoid (*attach)(struct sfp *);\n\tvoid (*detach)(struct sfp *);\n\tvoid (*start)(struct sfp *);\n\tvoid (*stop)(struct sfp *);\n\tint (*module_info)(struct sfp *, struct ethtool_modinfo *);\n\tint (*module_eeprom)(struct sfp *, struct ethtool_eeprom *, u8 *);\n};\n\nstruct sfp_quirk {\n\tconst char *vendor;\n\tconst char *part;\n\tvoid (*modes)(const struct sfp_eeprom_id *, long unsigned int *);\n};\n\nstruct fixed_mdio_bus {\n\tstruct mii_bus *mii_bus;\n\tstruct list_head phys;\n};\n\nstruct fixed_phy {\n\tint addr;\n\tstruct phy_device *phydev;\n\tstruct fixed_phy_status status;\n\tbool no_carrier;\n\tint (*link_update)(struct net_device *, struct fixed_phy_status *);\n\tstruct list_head node;\n\tstruct gpio_desc___2 *link_gpiod;\n};\n\nstruct mdio_device_id {\n\t__u32 phy_id;\n\t__u32 phy_id_mask;\n};\n\nstruct flow_dissector {\n\tunsigned int used_keys;\n\tshort unsigned int offset[28];\n};\n\nstruct flow_match {\n\tstruct flow_dissector *dissector;\n\tvoid *mask;\n\tvoid *key;\n};\n\nenum flow_action_id {\n\tFLOW_ACTION_ACCEPT = 0,\n\tFLOW_ACTION_DROP = 1,\n\tFLOW_ACTION_TRAP = 2,\n\tFLOW_ACTION_GOTO = 3,\n\tFLOW_ACTION_REDIRECT = 4,\n\tFLOW_ACTION_MIRRED = 5,\n\tFLOW_ACTION_REDIRECT_INGRESS = 6,\n\tFLOW_ACTION_MIRRED_INGRESS = 7,\n\tFLOW_ACTION_VLAN_PUSH = 8,\n\tFLOW_ACTION_VLAN_POP = 9,\n\tFLOW_ACTION_VLAN_MANGLE = 10,\n\tFLOW_ACTION_TUNNEL_ENCAP = 11,\n\tFLOW_ACTION_TUNNEL_DECAP = 12,\n\tFLOW_ACTION_MANGLE = 13,\n\tFLOW_ACTION_ADD = 14,\n\tFLOW_ACTION_CSUM = 15,\n\tFLOW_ACTION_MARK = 16,\n\tFLOW_ACTION_PTYPE = 17,\n\tFLOW_ACTION_PRIORITY = 18,\n\tFLOW_ACTION_WAKE = 19,\n\tFLOW_ACTION_QUEUE = 20,\n\tFLOW_ACTION_SAMPLE = 21,\n\tFLOW_ACTION_POLICE = 22,\n\tFLOW_ACTION_CT = 23,\n\tFLOW_ACTION_CT_METADATA = 24,\n\tFLOW_ACTION_MPLS_PUSH = 25,\n\tFLOW_ACTION_MPLS_POP = 26,\n\tFLOW_ACTION_MPLS_MANGLE = 27,\n\tFLOW_ACTION_GATE = 28,\n\tNUM_FLOW_ACTIONS = 29,\n};\n\nenum flow_action_hw_stats {\n\tFLOW_ACTION_HW_STATS_IMMEDIATE = 1,\n\tFLOW_ACTION_HW_STATS_DELAYED = 2,\n\tFLOW_ACTION_HW_STATS_ANY = 3,\n\tFLOW_ACTION_HW_STATS_DISABLED = 4,\n\tFLOW_ACTION_HW_STATS_DONT_CARE = 7,\n};\n\ntypedef void (*action_destr)(void *);\n\nenum flow_action_mangle_base {\n\tFLOW_ACT_MANGLE_UNSPEC = 0,\n\tFLOW_ACT_MANGLE_HDR_TYPE_ETH = 1,\n\tFLOW_ACT_MANGLE_HDR_TYPE_IP4 = 2,\n\tFLOW_ACT_MANGLE_HDR_TYPE_IP6 = 3,\n\tFLOW_ACT_MANGLE_HDR_TYPE_TCP = 4,\n\tFLOW_ACT_MANGLE_HDR_TYPE_UDP = 5,\n};\n\nstruct nf_flowtable;\n\nstruct ip_tunnel_info;\n\nstruct psample_group;\n\nstruct action_gate_entry;\n\nstruct flow_action_cookie;\n\nstruct flow_action_entry {\n\tenum flow_action_id id;\n\tenum flow_action_hw_stats hw_stats;\n\taction_destr destructor;\n\tvoid *destructor_priv;\n\tunion {\n\t\tu32 chain_index;\n\t\tstruct net_device *dev;\n\t\tstruct {\n\t\t\tu16 vid;\n\t\t\t__be16 proto;\n\t\t\tu8 prio;\n\t\t} vlan;\n\t\tstruct {\n\t\t\tenum flow_action_mangle_base htype;\n\t\t\tu32 offset;\n\t\t\tu32 mask;\n\t\t\tu32 val;\n\t\t} mangle;\n\t\tstruct ip_tunnel_info *tunnel;\n\t\tu32 csum_flags;\n\t\tu32 mark;\n\t\tu16 ptype;\n\t\tu32 priority;\n\t\tstruct {\n\t\t\tu32 ctx;\n\t\t\tu32 index;\n\t\t\tu8 vf;\n\t\t} queue;\n\t\tstruct {\n\t\t\tstruct psample_group *psample_group;\n\t\t\tu32 rate;\n\t\t\tu32 trunc_size;\n\t\t\tbool truncate;\n\t\t} sample;\n\t\tstruct {\n\t\t\tu32 index;\n\t\t\tu32 burst;\n\t\t\tu64 rate_bytes_ps;\n\t\t\tu32 mtu;\n\t\t} police;\n\t\tstruct {\n\t\t\tint action;\n\t\t\tu16 zone;\n\t\t\tstruct nf_flowtable *flow_table;\n\t\t} ct;\n\t\tstruct {\n\t\t\tlong unsigned int cookie;\n\t\t\tu32 mark;\n\t\t\tu32 labels[4];\n\t\t} ct_metadata;\n\t\tstruct {\n\t\t\tu32 label;\n\t\t\t__be16 proto;\n\t\t\tu8 tc;\n\t\t\tu8 bos;\n\t\t\tu8 ttl;\n\t\t} mpls_push;\n\t\tstruct {\n\t\t\t__be16 proto;\n\t\t} mpls_pop;\n\t\tstruct {\n\t\t\tu32 label;\n\t\t\tu8 tc;\n\t\t\tu8 bos;\n\t\t\tu8 ttl;\n\t\t} mpls_mangle;\n\t\tstruct {\n\t\t\tu32 index;\n\t\t\ts32 prio;\n\t\t\tu64 basetime;\n\t\t\tu64 cycletime;\n\t\t\tu64 cycletimeext;\n\t\t\tu32 num_entries;\n\t\t\tstruct action_gate_entry *entries;\n\t\t} gate;\n\t};\n\tstruct flow_action_cookie *cookie;\n};\n\nstruct flow_action {\n\tunsigned int num_entries;\n\tstruct flow_action_entry entries[0];\n};\n\nstruct flow_rule {\n\tstruct flow_match match;\n\tstruct flow_action action;\n};\n\nstruct dsa_chip_data {\n\tstruct device *host_dev;\n\tint sw_addr;\n\tstruct device *netdev[12];\n\tint eeprom_len;\n\tstruct device_node *of_node;\n\tchar *port_names[12];\n\tstruct device_node *port_dn[12];\n\ts8 rtable[4];\n};\n\nstruct dsa_platform_data {\n\tstruct device *netdev;\n\tstruct net_device *of_netdev;\n\tint nr_chips;\n\tstruct dsa_chip_data *chip;\n};\n\nstruct phylink_link_state {\n\tlong unsigned int advertising[2];\n\tlong unsigned int lp_advertising[2];\n\tphy_interface_t interface;\n\tint speed;\n\tint duplex;\n\tint pause;\n\tunsigned int link: 1;\n\tunsigned int an_enabled: 1;\n\tunsigned int an_complete: 1;\n};\n\nenum phylink_op_type {\n\tPHYLINK_NETDEV = 0,\n\tPHYLINK_DEV = 1,\n};\n\nstruct phylink_config {\n\tstruct device *dev;\n\tenum phylink_op_type type;\n\tbool pcs_poll;\n\tbool poll_fixed_state;\n\tvoid (*get_fixed_state)(struct phylink_config *, struct phylink_link_state *);\n};\n\nenum devlink_port_type {\n\tDEVLINK_PORT_TYPE_NOTSET = 0,\n\tDEVLINK_PORT_TYPE_AUTO = 1,\n\tDEVLINK_PORT_TYPE_ETH = 2,\n\tDEVLINK_PORT_TYPE_IB = 3,\n};\n\nenum devlink_port_flavour {\n\tDEVLINK_PORT_FLAVOUR_PHYSICAL = 0,\n\tDEVLINK_PORT_FLAVOUR_CPU = 1,\n\tDEVLINK_PORT_FLAVOUR_DSA = 2,\n\tDEVLINK_PORT_FLAVOUR_PCI_PF = 3,\n\tDEVLINK_PORT_FLAVOUR_PCI_VF = 4,\n\tDEVLINK_PORT_FLAVOUR_VIRTUAL = 5,\n\tDEVLINK_PORT_FLAVOUR_UNUSED = 6,\n};\n\nstruct devlink_port_phys_attrs {\n\tu32 port_number;\n\tu32 split_subport_number;\n};\n\nstruct devlink_port_pci_pf_attrs {\n\tu32 controller;\n\tu16 pf;\n\tu8 external: 1;\n};\n\nstruct devlink_port_pci_vf_attrs {\n\tu32 controller;\n\tu16 pf;\n\tu16 vf;\n\tu8 external: 1;\n};\n\nstruct devlink_port_attrs {\n\tu8 split: 1;\n\tu8 splittable: 1;\n\tu32 lanes;\n\tenum devlink_port_flavour flavour;\n\tstruct netdev_phys_item_id switch_id;\n\tunion {\n\t\tstruct devlink_port_phys_attrs phys;\n\t\tstruct devlink_port_pci_pf_attrs pci_pf;\n\t\tstruct devlink_port_pci_vf_attrs pci_vf;\n\t};\n};\n\nstruct devlink;\n\nstruct devlink_port {\n\tstruct list_head list;\n\tstruct list_head param_list;\n\tstruct list_head region_list;\n\tstruct devlink *devlink;\n\tunsigned int index;\n\tbool registered;\n\tspinlock_t type_lock;\n\tenum devlink_port_type type;\n\tenum devlink_port_type desired_type;\n\tvoid *type_dev;\n\tstruct devlink_port_attrs attrs;\n\tu8 attrs_set: 1;\n\tu8 switch_port: 1;\n\tstruct delayed_work type_warn_dw;\n\tstruct list_head reporter_list;\n\tstruct mutex reporters_lock;\n};\n\nstruct dsa_device_ops;\n\nstruct dsa_switch_tree;\n\nstruct packet_type;\n\nstruct dsa_switch;\n\nstruct dsa_netdevice_ops;\n\nstruct dsa_port {\n\tunion {\n\t\tstruct net_device *master;\n\t\tstruct net_device *slave;\n\t};\n\tconst struct dsa_device_ops *tag_ops;\n\tstruct dsa_switch_tree *dst;\n\tstruct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);\n\tbool (*filter)(const struct sk_buff *, struct net_device *);\n\tenum {\n\t\tDSA_PORT_TYPE_UNUSED = 0,\n\t\tDSA_PORT_TYPE_CPU = 1,\n\t\tDSA_PORT_TYPE_DSA = 2,\n\t\tDSA_PORT_TYPE_USER = 3,\n\t} type;\n\tstruct dsa_switch *ds;\n\tunsigned int index;\n\tconst char *name;\n\tstruct dsa_port *cpu_dp;\n\tconst char *mac;\n\tstruct device_node *dn;\n\tunsigned int ageing_time;\n\tbool vlan_filtering;\n\tu8 stp_state;\n\tstruct net_device *bridge_dev;\n\tstruct devlink_port devlink_port;\n\tbool devlink_port_setup;\n\tstruct phylink *pl;\n\tstruct phylink_config pl_config;\n\tstruct list_head list;\n\tvoid *priv;\n\tconst struct ethtool_ops *orig_ethtool_ops;\n\tconst struct dsa_netdevice_ops *netdev_ops;\n\tbool setup;\n};\n\nstruct packet_type {\n\t__be16 type;\n\tbool ignore_outgoing;\n\tstruct net_device *dev;\n\tint (*func)(struct sk_buff *, struct net_device *, struct packet_type *, struct net_device *);\n\tvoid (*list_func)(struct list_head *, struct packet_type *, struct net_device *);\n\tbool (*id_match)(struct packet_type *, struct sock *);\n\tvoid *af_packet_priv;\n\tstruct list_head list;\n};\n\nstruct netdev_notifier_changeupper_info {\n\tstruct netdev_notifier_info info;\n\tstruct net_device *upper_dev;\n\tbool master;\n\tbool linking;\n\tvoid *upper_info;\n};\n\nstruct flow_action_cookie {\n\tu32 cookie_len;\n\tu8 cookie[0];\n};\n\nstruct flow_stats {\n\tu64 pkts;\n\tu64 bytes;\n\tu64 drops;\n\tu64 lastused;\n\tenum flow_action_hw_stats used_hw_stats;\n\tbool used_hw_stats_valid;\n};\n\nenum flow_cls_command {\n\tFLOW_CLS_REPLACE = 0,\n\tFLOW_CLS_DESTROY = 1,\n\tFLOW_CLS_STATS = 2,\n\tFLOW_CLS_TMPLT_CREATE = 3,\n\tFLOW_CLS_TMPLT_DESTROY = 4,\n};\n\nstruct flow_cls_common_offload {\n\tu32 chain_index;\n\t__be16 protocol;\n\tu32 prio;\n\tstruct netlink_ext_ack *extack;\n};\n\nstruct flow_cls_offload {\n\tstruct flow_cls_common_offload common;\n\tenum flow_cls_command command;\n\tlong unsigned int cookie;\n\tstruct flow_rule *rule;\n\tstruct flow_stats stats;\n\tu32 classid;\n};\n\nenum devlink_sb_pool_type {\n\tDEVLINK_SB_POOL_TYPE_INGRESS = 0,\n\tDEVLINK_SB_POOL_TYPE_EGRESS = 1,\n};\n\nenum devlink_sb_threshold_type {\n\tDEVLINK_SB_THRESHOLD_TYPE_STATIC = 0,\n\tDEVLINK_SB_THRESHOLD_TYPE_DYNAMIC = 1,\n};\n\nenum devlink_eswitch_encap_mode {\n\tDEVLINK_ESWITCH_ENCAP_MODE_NONE = 0,\n\tDEVLINK_ESWITCH_ENCAP_MODE_BASIC = 1,\n};\n\nenum devlink_param_cmode {\n\tDEVLINK_PARAM_CMODE_RUNTIME = 0,\n\tDEVLINK_PARAM_CMODE_DRIVERINIT = 1,\n\tDEVLINK_PARAM_CMODE_PERMANENT = 2,\n\t__DEVLINK_PARAM_CMODE_MAX = 3,\n\tDEVLINK_PARAM_CMODE_MAX = 2,\n};\n\nenum devlink_trap_action {\n\tDEVLINK_TRAP_ACTION_DROP = 0,\n\tDEVLINK_TRAP_ACTION_TRAP = 1,\n\tDEVLINK_TRAP_ACTION_MIRROR = 2,\n};\n\nenum devlink_trap_type {\n\tDEVLINK_TRAP_TYPE_DROP = 0,\n\tDEVLINK_TRAP_TYPE_EXCEPTION = 1,\n\tDEVLINK_TRAP_TYPE_CONTROL = 2,\n};\n\nenum devlink_reload_action {\n\tDEVLINK_RELOAD_ACTION_UNSPEC = 0,\n\tDEVLINK_RELOAD_ACTION_DRIVER_REINIT = 1,\n\tDEVLINK_RELOAD_ACTION_FW_ACTIVATE = 2,\n\t__DEVLINK_RELOAD_ACTION_MAX = 3,\n\tDEVLINK_RELOAD_ACTION_MAX = 2,\n};\n\nenum devlink_reload_limit {\n\tDEVLINK_RELOAD_LIMIT_UNSPEC = 0,\n\tDEVLINK_RELOAD_LIMIT_NO_RESET = 1,\n\t__DEVLINK_RELOAD_LIMIT_MAX = 2,\n\tDEVLINK_RELOAD_LIMIT_MAX = 1,\n};\n\nenum devlink_dpipe_field_mapping_type {\n\tDEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0,\n\tDEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 1,\n};\n\nstruct devlink_dev_stats {\n\tu32 reload_stats[6];\n\tu32 remote_reload_stats[6];\n};\n\nstruct devlink_dpipe_headers;\n\nstruct devlink_ops;\n\nstruct devlink {\n\tstruct list_head list;\n\tstruct list_head port_list;\n\tstruct list_head sb_list;\n\tstruct list_head dpipe_table_list;\n\tstruct list_head resource_list;\n\tstruct list_head param_list;\n\tstruct list_head region_list;\n\tstruct list_head reporter_list;\n\tstruct mutex reporters_lock;\n\tstruct devlink_dpipe_headers *dpipe_headers;\n\tstruct list_head trap_list;\n\tstruct list_head trap_group_list;\n\tstruct list_head trap_policer_list;\n\tconst struct devlink_ops *ops;\n\tstruct xarray snapshot_ids;\n\tstruct devlink_dev_stats stats;\n\tstruct device *dev;\n\tpossible_net_t _net;\n\tstruct mutex lock;\n\tu8 reload_failed: 1;\n\tu8 reload_enabled: 1;\n\tu8 registered: 1;\n\tlong: 61;\n\tlong: 64;\n\tchar priv[0];\n};\n\nstruct devlink_dpipe_header;\n\nstruct devlink_dpipe_headers {\n\tstruct devlink_dpipe_header **headers;\n\tunsigned int headers_count;\n};\n\nstruct devlink_sb_pool_info;\n\nstruct devlink_info_req;\n\nstruct devlink_flash_update_params;\n\nstruct devlink_trap;\n\nstruct devlink_trap_group;\n\nstruct devlink_trap_policer;\n\nstruct devlink_ops {\n\tu32 supported_flash_update_params;\n\tlong unsigned int reload_actions;\n\tlong unsigned int reload_limits;\n\tint (*reload_down)(struct devlink *, bool, enum devlink_reload_action, enum devlink_reload_limit, struct netlink_ext_ack *);\n\tint (*reload_up)(struct devlink *, enum devlink_reload_action, enum devlink_reload_limit, u32 *, struct netlink_ext_ack *);\n\tint (*port_type_set)(struct devlink_port *, enum devlink_port_type);\n\tint (*port_split)(struct devlink *, unsigned int, unsigned int, struct netlink_ext_ack *);\n\tint (*port_unsplit)(struct devlink *, unsigned int, struct netlink_ext_ack *);\n\tint (*sb_pool_get)(struct devlink *, unsigned int, u16, struct devlink_sb_pool_info *);\n\tint (*sb_pool_set)(struct devlink *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);\n\tint (*sb_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *);\n\tint (*sb_port_pool_set)(struct devlink_port *, unsigned int, u16, u32, struct netlink_ext_ack *);\n\tint (*sb_tc_pool_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);\n\tint (*sb_tc_pool_bind_set)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);\n\tint (*sb_occ_snapshot)(struct devlink *, unsigned int);\n\tint (*sb_occ_max_clear)(struct devlink *, unsigned int);\n\tint (*sb_occ_port_pool_get)(struct devlink_port *, unsigned int, u16, u32 *, u32 *);\n\tint (*sb_occ_tc_port_bind_get)(struct devlink_port *, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);\n\tint (*eswitch_mode_get)(struct devlink *, u16 *);\n\tint (*eswitch_mode_set)(struct devlink *, u16, struct netlink_ext_ack *);\n\tint (*eswitch_inline_mode_get)(struct devlink *, u8 *);\n\tint (*eswitch_inline_mode_set)(struct devlink *, u8, struct netlink_ext_ack *);\n\tint (*eswitch_encap_mode_get)(struct devlink *, enum devlink_eswitch_encap_mode *);\n\tint (*eswitch_encap_mode_set)(struct devlink *, enum devlink_eswitch_encap_mode, struct netlink_ext_ack *);\n\tint (*info_get)(struct devlink *, struct devlink_info_req *, struct netlink_ext_ack *);\n\tint (*flash_update)(struct devlink *, struct devlink_flash_update_params *, struct netlink_ext_ack *);\n\tint (*trap_init)(struct devlink *, const struct devlink_trap *, void *);\n\tvoid (*trap_fini)(struct devlink *, const struct devlink_trap *, void *);\n\tint (*trap_action_set)(struct devlink *, const struct devlink_trap *, enum devlink_trap_action, struct netlink_ext_ack *);\n\tint (*trap_group_init)(struct devlink *, const struct devlink_trap_group *);\n\tint (*trap_group_set)(struct devlink *, const struct devlink_trap_group *, const struct devlink_trap_policer *, struct netlink_ext_ack *);\n\tint (*trap_group_action_set)(struct devlink *, const struct devlink_trap_group *, enum devlink_trap_action, struct netlink_ext_ack *);\n\tint (*trap_policer_init)(struct devlink *, const struct devlink_trap_policer *);\n\tvoid (*trap_policer_fini)(struct devlink *, const struct devlink_trap_policer *);\n\tint (*trap_policer_set)(struct devlink *, const struct devlink_trap_policer *, u64, u64, struct netlink_ext_ack *);\n\tint (*trap_policer_counter_get)(struct devlink *, const struct devlink_trap_policer *, u64 *);\n\tint (*port_function_hw_addr_get)(struct devlink *, struct devlink_port *, u8 *, int *, struct netlink_ext_ack *);\n\tint (*port_function_hw_addr_set)(struct devlink *, struct devlink_port *, const u8 *, int, struct netlink_ext_ack *);\n};\n\nstruct devlink_sb_pool_info {\n\tenum devlink_sb_pool_type pool_type;\n\tu32 size;\n\tenum devlink_sb_threshold_type threshold_type;\n\tu32 cell_size;\n};\n\nstruct devlink_dpipe_field {\n\tconst char *name;\n\tunsigned int id;\n\tunsigned int bitwidth;\n\tenum devlink_dpipe_field_mapping_type mapping_type;\n};\n\nstruct devlink_dpipe_header {\n\tconst char *name;\n\tunsigned int id;\n\tstruct devlink_dpipe_field *fields;\n\tunsigned int fields_count;\n\tbool global;\n};\n\nunion devlink_param_value {\n\tu8 vu8;\n\tu16 vu16;\n\tu32 vu32;\n\tchar vstr[32];\n\tbool vbool;\n};\n\nstruct devlink_param_gset_ctx {\n\tunion devlink_param_value val;\n\tenum devlink_param_cmode cmode;\n};\n\nstruct devlink_flash_update_params {\n\tconst struct firmware *fw;\n\tconst char *component;\n\tu32 overwrite_mask;\n};\n\nstruct devlink_trap_policer {\n\tu32 id;\n\tu64 init_rate;\n\tu64 init_burst;\n\tu64 max_rate;\n\tu64 min_rate;\n\tu64 max_burst;\n\tu64 min_burst;\n};\n\nstruct devlink_trap_group {\n\tconst char *name;\n\tu16 id;\n\tbool generic;\n\tu32 init_policer_id;\n};\n\nstruct devlink_trap {\n\tenum devlink_trap_type type;\n\tenum devlink_trap_action init_action;\n\tbool generic;\n\tu16 id;\n\tconst char *name;\n\tu16 init_group_id;\n\tu32 metadata_cap;\n};\n\nstruct switchdev_trans {\n\tbool ph_prepare;\n};\n\nenum switchdev_obj_id {\n\tSWITCHDEV_OBJ_ID_UNDEFINED = 0,\n\tSWITCHDEV_OBJ_ID_PORT_VLAN = 1,\n\tSWITCHDEV_OBJ_ID_PORT_MDB = 2,\n\tSWITCHDEV_OBJ_ID_HOST_MDB = 3,\n\tSWITCHDEV_OBJ_ID_MRP = 4,\n\tSWITCHDEV_OBJ_ID_RING_TEST_MRP = 5,\n\tSWITCHDEV_OBJ_ID_RING_ROLE_MRP = 6,\n\tSWITCHDEV_OBJ_ID_RING_STATE_MRP = 7,\n\tSWITCHDEV_OBJ_ID_IN_TEST_MRP = 8,\n\tSWITCHDEV_OBJ_ID_IN_ROLE_MRP = 9,\n\tSWITCHDEV_OBJ_ID_IN_STATE_MRP = 10,\n};\n\nstruct switchdev_obj {\n\tstruct net_device *orig_dev;\n\tenum switchdev_obj_id id;\n\tu32 flags;\n\tvoid *complete_priv;\n\tvoid (*complete)(struct net_device *, int, void *);\n};\n\nstruct switchdev_obj_port_vlan {\n\tstruct switchdev_obj obj;\n\tu16 flags;\n\tu16 vid_begin;\n\tu16 vid_end;\n};\n\nstruct switchdev_obj_port_mdb {\n\tstruct switchdev_obj obj;\n\tunsigned char addr[6];\n\tu16 vid;\n};\n\nenum dsa_tag_protocol {\n\tDSA_TAG_PROTO_NONE = 0,\n\tDSA_TAG_PROTO_BRCM = 1,\n\tDSA_TAG_PROTO_BRCM_PREPEND = 2,\n\tDSA_TAG_PROTO_DSA = 3,\n\tDSA_TAG_PROTO_EDSA = 4,\n\tDSA_TAG_PROTO_GSWIP = 5,\n\tDSA_TAG_PROTO_KSZ9477 = 6,\n\tDSA_TAG_PROTO_KSZ9893 = 7,\n\tDSA_TAG_PROTO_LAN9303 = 8,\n\tDSA_TAG_PROTO_MTK = 9,\n\tDSA_TAG_PROTO_QCA = 10,\n\tDSA_TAG_PROTO_TRAILER = 11,\n\tDSA_TAG_PROTO_8021Q = 12,\n\tDSA_TAG_PROTO_SJA1105 = 13,\n\tDSA_TAG_PROTO_KSZ8795 = 14,\n\tDSA_TAG_PROTO_OCELOT = 15,\n\tDSA_TAG_PROTO_AR9331 = 16,\n\tDSA_TAG_PROTO_RTL4_A = 17,\n\tDSA_TAG_PROTO_HELLCREEK = 18,\n};\n\nstruct dsa_device_ops {\n\tstruct sk_buff * (*xmit)(struct sk_buff *, struct net_device *);\n\tstruct sk_buff * (*rcv)(struct sk_buff *, struct net_device *, struct packet_type *);\n\tvoid (*flow_dissect)(const struct sk_buff *, __be16 *, int *);\n\tbool (*filter)(const struct sk_buff *, struct net_device *);\n\tunsigned int overhead;\n\tconst char *name;\n\tenum dsa_tag_protocol proto;\n\tbool promisc_on_master;\n\tbool tail_tag;\n};\n\nstruct dsa_netdevice_ops {\n\tint (*ndo_do_ioctl)(struct net_device *, struct ifreq *, int);\n};\n\nstruct dsa_switch_tree {\n\tstruct list_head list;\n\tstruct raw_notifier_head nh;\n\tunsigned int index;\n\tstruct kref refcount;\n\tbool setup;\n\tstruct dsa_platform_data *pd;\n\tstruct list_head ports;\n\tstruct list_head rtable;\n};\n\nstruct dsa_mall_mirror_tc_entry {\n\tu8 to_local_port;\n\tbool ingress;\n};\n\nstruct dsa_mall_policer_tc_entry {\n\tu32 burst;\n\tu64 rate_bytes_per_sec;\n};\n\nstruct dsa_switch_ops;\n\nstruct dsa_switch {\n\tbool setup;\n\tstruct device *dev;\n\tstruct dsa_switch_tree *dst;\n\tunsigned int index;\n\tstruct notifier_block nb;\n\tvoid *priv;\n\tstruct dsa_chip_data *cd;\n\tconst struct dsa_switch_ops *ops;\n\tu32 phys_mii_mask;\n\tstruct mii_bus *slave_mii_bus;\n\tunsigned int ageing_time_min;\n\tunsigned int ageing_time_max;\n\tstruct devlink *devlink;\n\tunsigned int num_tx_queues;\n\tbool vlan_filtering_is_global;\n\tbool configure_vlan_while_not_filtering;\n\tbool untag_bridge_pvid;\n\tbool vlan_filtering;\n\tbool pcs_poll;\n\tbool mtu_enforcement_ingress;\n\tsize_t num_ports;\n};\n\nstruct fixed_phy_status___2;\n\ntypedef int dsa_fdb_dump_cb_t(const unsigned char *, u16, bool, void *);\n\nstruct dsa_switch_ops {\n\tenum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);\n\tint (*setup)(struct dsa_switch *);\n\tvoid (*teardown)(struct dsa_switch *);\n\tu32 (*get_phy_flags)(struct dsa_switch *, int);\n\tint (*phy_read)(struct dsa_switch *, int, int);\n\tint (*phy_write)(struct dsa_switch *, int, int, u16);\n\tvoid (*adjust_link)(struct dsa_switch *, int, struct phy_device *);\n\tvoid (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status___2 *);\n\tvoid (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);\n\tint (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);\n\tvoid (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);\n\tvoid (*phylink_mac_an_restart)(struct dsa_switch *, int);\n\tvoid (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);\n\tvoid (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);\n\tvoid (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);\n\tvoid (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);\n\tvoid (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);\n\tint (*get_sset_count)(struct dsa_switch *, int, int);\n\tvoid (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);\n\tvoid (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);\n\tint (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);\n\tint (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);\n\tint (*suspend)(struct dsa_switch *);\n\tint (*resume)(struct dsa_switch *);\n\tint (*port_enable)(struct dsa_switch *, int, struct phy_device *);\n\tvoid (*port_disable)(struct dsa_switch *, int);\n\tint (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);\n\tint (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);\n\tint (*get_eeprom_len)(struct dsa_switch *);\n\tint (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);\n\tint (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);\n\tint (*get_regs_len)(struct dsa_switch *, int);\n\tvoid (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);\n\tint (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);\n\tint (*set_ageing_time)(struct dsa_switch *, unsigned int);\n\tint (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);\n\tvoid (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);\n\tvoid (*port_stp_state_set)(struct dsa_switch *, int, u8);\n\tvoid (*port_fast_age)(struct dsa_switch *, int);\n\tint (*port_egress_floods)(struct dsa_switch *, int, bool, bool);\n\tint (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct switchdev_trans *);\n\tint (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);\n\tvoid (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);\n\tint (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);\n\tint (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);\n\tint (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);\n\tint (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);\n\tint (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);\n\tvoid (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);\n\tint (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);\n\tint (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);\n\tint (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);\n\tint (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);\n\tint (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);\n\tint (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);\n\tint (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);\n\tvoid (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);\n\tint (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);\n\tvoid (*port_policer_del)(struct dsa_switch *, int);\n\tint (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);\n\tint (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *);\n\tvoid (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *);\n\tint (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);\n\tint (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);\n\tbool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);\n\tbool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);\n\tint (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);\n\tint (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);\n\tint (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);\n\tint (*port_change_mtu)(struct dsa_switch *, int, int);\n\tint (*port_max_mtu)(struct dsa_switch *, int);\n};\n\nstruct dsa_loop_pdata {\n\tstruct dsa_chip_data cd;\n\tconst char *name;\n\tunsigned int enabled_ports;\n\tconst char *netdev;\n};\n\nstruct wl1251_platform_data {\n\tint power_gpio;\n\tint irq;\n\tbool use_eeprom;\n};\n\nstruct ohci {\n\tvoid *registers;\n};\n\nstruct cdrom_msf {\n\t__u8 cdmsf_min0;\n\t__u8 cdmsf_sec0;\n\t__u8 cdmsf_frame0;\n\t__u8 cdmsf_min1;\n\t__u8 cdmsf_sec1;\n\t__u8 cdmsf_frame1;\n};\n\nstruct cdrom_volctrl {\n\t__u8 channel0;\n\t__u8 channel1;\n\t__u8 channel2;\n\t__u8 channel3;\n};\n\nstruct cdrom_subchnl {\n\t__u8 cdsc_format;\n\t__u8 cdsc_audiostatus;\n\t__u8 cdsc_adr: 4;\n\t__u8 cdsc_ctrl: 4;\n\t__u8 cdsc_trk;\n\t__u8 cdsc_ind;\n\tunion cdrom_addr cdsc_absaddr;\n\tunion cdrom_addr cdsc_reladdr;\n};\n\nstruct cdrom_read_audio {\n\tunion cdrom_addr addr;\n\t__u8 addr_format;\n\tint nframes;\n\t__u8 *buf;\n};\n\nstruct cdrom_blk {\n\tunsigned int from;\n\tshort unsigned int len;\n};\n\nstruct dvd_layer {\n\t__u8 book_version: 4;\n\t__u8 book_type: 4;\n\t__u8 min_rate: 4;\n\t__u8 disc_size: 4;\n\t__u8 layer_type: 4;\n\t__u8 track_path: 1;\n\t__u8 nlayers: 2;\n\tchar: 1;\n\t__u8 track_density: 4;\n\t__u8 linear_density: 4;\n\t__u8 bca: 1;\n\t__u32 start_sector;\n\t__u32 end_sector;\n\t__u32 end_sector_l0;\n};\n\nstruct dvd_physical {\n\t__u8 type;\n\t__u8 layer_num;\n\tstruct dvd_layer layer[4];\n};\n\nstruct dvd_copyright {\n\t__u8 type;\n\t__u8 layer_num;\n\t__u8 cpst;\n\t__u8 rmi;\n};\n\nstruct dvd_disckey {\n\t__u8 type;\n\tunsigned int agid: 2;\n\t__u8 value[2048];\n};\n\nstruct dvd_bca {\n\t__u8 type;\n\tint len;\n\t__u8 value[188];\n};\n\nstruct dvd_manufact {\n\t__u8 type;\n\t__u8 layer_num;\n\tint len;\n\t__u8 value[2048];\n};\n\ntypedef union {\n\t__u8 type;\n\tstruct dvd_physical physical;\n\tstruct dvd_copyright copyright;\n\tstruct dvd_disckey disckey;\n\tstruct dvd_bca bca;\n\tstruct dvd_manufact manufact;\n} dvd_struct;\n\ntypedef __u8 dvd_key[5];\n\ntypedef __u8 dvd_challenge[10];\n\nstruct dvd_lu_send_agid {\n\t__u8 type;\n\tunsigned int agid: 2;\n};\n\nstruct dvd_host_send_challenge {\n\t__u8 type;\n\tunsigned int agid: 2;\n\tdvd_challenge chal;\n};\n\nstruct dvd_send_key {\n\t__u8 type;\n\tunsigned int agid: 2;\n\tdvd_key key;\n};\n\nstruct dvd_lu_send_challenge {\n\t__u8 type;\n\tunsigned int agid: 2;\n\tdvd_challenge chal;\n};\n\nstruct dvd_lu_send_title_key {\n\t__u8 type;\n\tunsigned int agid: 2;\n\tdvd_key title_key;\n\tint lba;\n\tunsigned int cpm: 1;\n\tunsigned int cp_sec: 1;\n\tunsigned int cgms: 2;\n};\n\nstruct dvd_lu_send_asf {\n\t__u8 type;\n\tunsigned int agid: 2;\n\tunsigned int asf: 1;\n};\n\nstruct dvd_host_send_rpcstate {\n\t__u8 type;\n\t__u8 pdrc;\n};\n\nstruct dvd_lu_send_rpcstate {\n\t__u8 type: 2;\n\t__u8 vra: 3;\n\t__u8 ucca: 3;\n\t__u8 region_mask;\n\t__u8 rpc_scheme;\n};\n\ntypedef union {\n\t__u8 type;\n\tstruct dvd_lu_send_agid lsa;\n\tstruct dvd_host_send_challenge hsc;\n\tstruct dvd_send_key lsk;\n\tstruct dvd_lu_send_challenge lsc;\n\tstruct dvd_send_key hsk;\n\tstruct dvd_lu_send_title_key lstk;\n\tstruct dvd_lu_send_asf lsasf;\n\tstruct dvd_host_send_rpcstate hrpcs;\n\tstruct dvd_lu_send_rpcstate lrpcs;\n} dvd_authinfo;\n\nstruct mrw_feature_desc {\n\t__be16 feature_code;\n\t__u8 curr: 1;\n\t__u8 persistent: 1;\n\t__u8 feature_version: 4;\n\t__u8 reserved1: 2;\n\t__u8 add_len;\n\t__u8 write: 1;\n\t__u8 reserved2: 7;\n\t__u8 reserved3;\n\t__u8 reserved4;\n\t__u8 reserved5;\n};\n\nstruct rwrt_feature_desc {\n\t__be16 feature_code;\n\t__u8 curr: 1;\n\t__u8 persistent: 1;\n\t__u8 feature_version: 4;\n\t__u8 reserved1: 2;\n\t__u8 add_len;\n\t__u32 last_lba;\n\t__u32 block_size;\n\t__u16 blocking;\n\t__u8 page_present: 1;\n\t__u8 reserved2: 7;\n\t__u8 reserved3;\n};\n\ntypedef struct {\n\t__be16 disc_information_length;\n\t__u8 disc_status: 2;\n\t__u8 border_status: 2;\n\t__u8 erasable: 1;\n\t__u8 reserved1: 3;\n\t__u8 n_first_track;\n\t__u8 n_sessions_lsb;\n\t__u8 first_track_lsb;\n\t__u8 last_track_lsb;\n\t__u8 mrw_status: 2;\n\t__u8 dbit: 1;\n\t__u8 reserved2: 2;\n\t__u8 uru: 1;\n\t__u8 dbc_v: 1;\n\t__u8 did_v: 1;\n\t__u8 disc_type;\n\t__u8 n_sessions_msb;\n\t__u8 first_track_msb;\n\t__u8 last_track_msb;\n\t__u32 disc_id;\n\t__u32 lead_in;\n\t__u32 lead_out;\n\t__u8 disc_bar_code[8];\n\t__u8 reserved3;\n\t__u8 n_opc;\n} disc_information;\n\ntypedef struct {\n\t__be16 track_information_length;\n\t__u8 track_lsb;\n\t__u8 session_lsb;\n\t__u8 reserved1;\n\t__u8 track_mode: 4;\n\t__u8 copy: 1;\n\t__u8 damage: 1;\n\t__u8 reserved2: 2;\n\t__u8 data_mode: 4;\n\t__u8 fp: 1;\n\t__u8 packet: 1;\n\t__u8 blank: 1;\n\t__u8 rt: 1;\n\t__u8 nwa_v: 1;\n\t__u8 lra_v: 1;\n\t__u8 reserved3: 6;\n\t__be32 track_start;\n\t__be32 next_writable;\n\t__be32 free_blocks;\n\t__be32 fixed_packet_size;\n\t__be32 track_size;\n\t__be32 last_rec_address;\n} track_information;\n\nstruct mode_page_header {\n\t__be16 mode_data_length;\n\t__u8 medium_type;\n\t__u8 reserved1;\n\t__u8 reserved2;\n\t__u8 reserved3;\n\t__be16 desc_length;\n};\n\ntypedef struct {\n\tint data;\n\tint audio;\n\tint cdi;\n\tint xa;\n\tlong int error;\n} tracktype;\n\nstruct cdrom_mechstat_header {\n\t__u8 curslot: 5;\n\t__u8 changer_state: 2;\n\t__u8 fault: 1;\n\t__u8 reserved1: 4;\n\t__u8 door_open: 1;\n\t__u8 mech_state: 3;\n\t__u8 curlba[3];\n\t__u8 nslots;\n\t__u16 slot_tablelen;\n};\n\nstruct cdrom_slot {\n\t__u8 change: 1;\n\t__u8 reserved1: 6;\n\t__u8 disc_present: 1;\n\t__u8 reserved2[3];\n};\n\nstruct cdrom_changer_info {\n\tstruct cdrom_mechstat_header hdr;\n\tstruct cdrom_slot slots[256];\n};\n\nstruct modesel_head {\n\t__u8 reserved1;\n\t__u8 medium;\n\t__u8 reserved2;\n\t__u8 block_desc_length;\n\t__u8 density;\n\t__u8 number_of_blocks_hi;\n\t__u8 number_of_blocks_med;\n\t__u8 number_of_blocks_lo;\n\t__u8 reserved3;\n\t__u8 block_length_hi;\n\t__u8 block_length_med;\n\t__u8 block_length_lo;\n};\n\ntypedef struct {\n\t__u16 report_key_length;\n\t__u8 reserved1;\n\t__u8 reserved2;\n\t__u8 ucca: 3;\n\t__u8 vra: 3;\n\t__u8 type_code: 2;\n\t__u8 region_mask;\n\t__u8 rpc_scheme;\n\t__u8 reserved3;\n} rpc_state_t;\n\nstruct cdrom_sysctl_settings {\n\tchar info[1000];\n\tint autoclose;\n\tint autoeject;\n\tint debug;\n\tint lock;\n\tint check;\n};\n\nenum cdrom_print_option {\n\tCTL_NAME = 0,\n\tCTL_SPEED = 1,\n\tCTL_SLOTS = 2,\n\tCTL_CAPABILITY = 3,\n};\n\nstruct compat_cdrom_read_audio {\n\tunion cdrom_addr addr;\n\tu8 addr_format;\n\tcompat_int_t nframes;\n\tcompat_caddr_t buf;\n};\n\nstruct socket_state_t {\n\tu_int flags;\n\tu_int csc_mask;\n\tu_char Vcc;\n\tu_char Vpp;\n\tu_char io_irq;\n};\n\ntypedef struct socket_state_t socket_state_t;\n\nstruct pccard_io_map {\n\tu_char map;\n\tu_char flags;\n\tu_short speed;\n\tphys_addr_t start;\n\tphys_addr_t stop;\n};\n\nstruct pccard_mem_map {\n\tu_char map;\n\tu_char flags;\n\tu_short speed;\n\tphys_addr_t static_start;\n\tu_int card_start;\n\tstruct resource *res;\n};\n\ntypedef struct pccard_mem_map pccard_mem_map;\n\nstruct io_window_t {\n\tu_int InUse;\n\tu_int Config;\n\tstruct resource *res;\n};\n\ntypedef struct io_window_t io_window_t;\n\nstruct pcmcia_socket;\n\nstruct pccard_operations {\n\tint (*init)(struct pcmcia_socket *);\n\tint (*suspend)(struct pcmcia_socket *);\n\tint (*get_status)(struct pcmcia_socket *, u_int *);\n\tint (*set_socket)(struct pcmcia_socket *, socket_state_t *);\n\tint (*set_io_map)(struct pcmcia_socket *, struct pccard_io_map *);\n\tint (*set_mem_map)(struct pcmcia_socket *, struct pccard_mem_map *);\n};\n\nstruct pccard_resource_ops;\n\nstruct pcmcia_callback;\n\nstruct pcmcia_socket {\n\tstruct module *owner;\n\tsocket_state_t socket;\n\tu_int state;\n\tu_int suspended_state;\n\tu_short functions;\n\tu_short lock_count;\n\tpccard_mem_map cis_mem;\n\tvoid *cis_virt;\n\tio_window_t io[2];\n\tpccard_mem_map win[4];\n\tstruct list_head cis_cache;\n\tsize_t fake_cis_len;\n\tu8 *fake_cis;\n\tstruct list_head socket_list;\n\tstruct completion socket_released;\n\tunsigned int sock;\n\tu_int features;\n\tu_int irq_mask;\n\tu_int map_size;\n\tu_int io_offset;\n\tu_int pci_irq;\n\tstruct pci_dev *cb_dev;\n\tu8 resource_setup_done;\n\tstruct pccard_operations *ops;\n\tstruct pccard_resource_ops *resource_ops;\n\tvoid *resource_data;\n\tvoid (*zoom_video)(struct pcmcia_socket *, int);\n\tint (*power_hook)(struct pcmcia_socket *, int);\n\tvoid (*tune_bridge)(struct pcmcia_socket *, struct pci_bus *);\n\tstruct task_struct *thread;\n\tstruct completion thread_done;\n\tunsigned int thread_events;\n\tunsigned int sysfs_events;\n\tstruct mutex skt_mutex;\n\tstruct mutex ops_mutex;\n\tspinlock_t thread_lock;\n\tstruct pcmcia_callback *callback;\n\tstruct list_head devices_list;\n\tu8 device_count;\n\tu8 pcmcia_pfc;\n\tatomic_t present;\n\tunsigned int pcmcia_irq;\n\tstruct device dev;\n\tvoid *driver_data;\n\tint resume_status;\n};\n\nstruct pccard_resource_ops {\n\tint (*validate_mem)(struct pcmcia_socket *);\n\tint (*find_io)(struct pcmcia_socket *, unsigned int, unsigned int *, unsigned int, unsigned int, struct resource **);\n\tstruct resource * (*find_mem)(long unsigned int, long unsigned int, long unsigned int, int, struct pcmcia_socket *);\n\tint (*init)(struct pcmcia_socket *);\n\tvoid (*exit)(struct pcmcia_socket *);\n};\n\nstruct pcmcia_callback {\n\tstruct module *owner;\n\tint (*add)(struct pcmcia_socket *);\n\tint (*remove)(struct pcmcia_socket *);\n\tvoid (*requery)(struct pcmcia_socket *);\n\tint (*validate)(struct pcmcia_socket *, unsigned int *);\n\tint (*suspend)(struct pcmcia_socket *);\n\tint (*early_resume)(struct pcmcia_socket *);\n\tint (*resume)(struct pcmcia_socket *);\n};\n\nenum {\n\tPCMCIA_IOPORT_0 = 0,\n\tPCMCIA_IOPORT_1 = 1,\n\tPCMCIA_IOMEM_0 = 2,\n\tPCMCIA_IOMEM_1 = 3,\n\tPCMCIA_IOMEM_2 = 4,\n\tPCMCIA_IOMEM_3 = 5,\n\tPCMCIA_NUM_RESOURCES = 6,\n};\n\ntypedef unsigned char cisdata_t;\n\nstruct cistpl_longlink_mfc_t {\n\tu_char nfn;\n\tstruct {\n\t\tu_char space;\n\t\tu_int addr;\n\t} fn[8];\n};\n\ntypedef struct cistpl_longlink_mfc_t cistpl_longlink_mfc_t;\n\nstruct cistpl_vers_1_t {\n\tu_char major;\n\tu_char minor;\n\tu_char ns;\n\tu_char ofs[4];\n\tchar str[254];\n};\n\ntypedef struct cistpl_vers_1_t cistpl_vers_1_t;\n\nstruct cistpl_manfid_t {\n\tu_short manf;\n\tu_short card;\n};\n\ntypedef struct cistpl_manfid_t cistpl_manfid_t;\n\nstruct cistpl_funcid_t {\n\tu_char func;\n\tu_char sysinit;\n};\n\ntypedef struct cistpl_funcid_t cistpl_funcid_t;\n\nstruct cistpl_config_t {\n\tu_char last_idx;\n\tu_int base;\n\tu_int rmask[4];\n\tu_char subtuples;\n};\n\ntypedef struct cistpl_config_t cistpl_config_t;\n\nstruct cistpl_device_geo_t {\n\tu_char ngeo;\n\tstruct {\n\t\tu_char buswidth;\n\t\tu_int erase_block;\n\t\tu_int read_block;\n\t\tu_int write_block;\n\t\tu_int partition;\n\t\tu_int interleave;\n\t} geo[4];\n};\n\ntypedef struct cistpl_device_geo_t cistpl_device_geo_t;\n\nstruct pcmcia_device_id {\n\t__u16 match_flags;\n\t__u16 manf_id;\n\t__u16 card_id;\n\t__u8 func_id;\n\t__u8 function;\n\t__u8 device_no;\n\t__u32 prod_id_hash[4];\n\tconst char *prod_id[4];\n\tkernel_ulong_t driver_info;\n\tchar *cisfile;\n};\n\nstruct pcmcia_dynids {\n\tstruct mutex lock;\n\tstruct list_head list;\n};\n\nstruct pcmcia_device;\n\nstruct pcmcia_driver {\n\tconst char *name;\n\tint (*probe)(struct pcmcia_device *);\n\tvoid (*remove)(struct pcmcia_device *);\n\tint (*suspend)(struct pcmcia_device *);\n\tint (*resume)(struct pcmcia_device *);\n\tstruct module *owner;\n\tconst struct pcmcia_device_id *id_table;\n\tstruct device_driver drv;\n\tstruct pcmcia_dynids dynids;\n};\n\nstruct config_t;\n\nstruct pcmcia_device {\n\tstruct pcmcia_socket *socket;\n\tchar *devname;\n\tu8 device_no;\n\tu8 func;\n\tstruct config_t *function_config;\n\tstruct list_head socket_device_list;\n\tunsigned int irq;\n\tstruct resource *resource[6];\n\tresource_size_t card_addr;\n\tunsigned int vpp;\n\tunsigned int config_flags;\n\tunsigned int config_base;\n\tunsigned int config_index;\n\tunsigned int config_regs;\n\tunsigned int io_lines;\n\tu16 suspended: 1;\n\tu16 _irq: 1;\n\tu16 _io: 1;\n\tu16 _win: 4;\n\tu16 _locked: 1;\n\tu16 allow_func_id_match: 1;\n\tu16 has_manf_id: 1;\n\tu16 has_card_id: 1;\n\tu16 has_func_id: 1;\n\tu16 reserved: 4;\n\tu8 func_id;\n\tu16 manf_id;\n\tu16 card_id;\n\tchar *prod_id[4];\n\tu64 dma_mask;\n\tstruct device dev;\n\tvoid *priv;\n\tunsigned int open;\n};\n\nstruct config_t {\n\tstruct kref ref;\n\tunsigned int state;\n\tstruct resource io[2];\n\tstruct resource mem[4];\n};\n\ntypedef struct config_t config_t;\n\nstruct pcmcia_dynid {\n\tstruct list_head node;\n\tstruct pcmcia_device_id id;\n};\n\ntypedef long unsigned int u_long;\n\ntypedef struct pccard_io_map pccard_io_map;\n\nstruct cistpl_longlink_t {\n\tu_int addr;\n};\n\ntypedef struct cistpl_longlink_t cistpl_longlink_t;\n\nstruct cistpl_checksum_t {\n\tu_short addr;\n\tu_short len;\n\tu_char sum;\n};\n\ntypedef struct cistpl_checksum_t cistpl_checksum_t;\n\nstruct cistpl_altstr_t {\n\tu_char ns;\n\tu_char ofs[4];\n\tchar str[254];\n};\n\ntypedef struct cistpl_altstr_t cistpl_altstr_t;\n\nstruct cistpl_device_t {\n\tu_char ndev;\n\tstruct {\n\t\tu_char type;\n\t\tu_char wp;\n\t\tu_int speed;\n\t\tu_int size;\n\t} dev[4];\n};\n\ntypedef struct cistpl_device_t cistpl_device_t;\n\nstruct cistpl_jedec_t {\n\tu_char nid;\n\tstruct {\n\t\tu_char mfr;\n\t\tu_char info;\n\t} id[4];\n};\n\ntypedef struct cistpl_jedec_t cistpl_jedec_t;\n\nstruct cistpl_funce_t {\n\tu_char type;\n\tu_char data[0];\n};\n\ntypedef struct cistpl_funce_t cistpl_funce_t;\n\nstruct cistpl_bar_t {\n\tu_char attr;\n\tu_int size;\n};\n\ntypedef struct cistpl_bar_t cistpl_bar_t;\n\nstruct cistpl_power_t {\n\tu_char present;\n\tu_char flags;\n\tu_int param[7];\n};\n\ntypedef struct cistpl_power_t cistpl_power_t;\n\nstruct cistpl_timing_t {\n\tu_int wait;\n\tu_int waitscale;\n\tu_int ready;\n\tu_int rdyscale;\n\tu_int reserved;\n\tu_int rsvscale;\n};\n\ntypedef struct cistpl_timing_t cistpl_timing_t;\n\nstruct cistpl_io_t {\n\tu_char flags;\n\tu_char nwin;\n\tstruct {\n\t\tu_int base;\n\t\tu_int len;\n\t} win[16];\n};\n\ntypedef struct cistpl_io_t cistpl_io_t;\n\nstruct cistpl_irq_t {\n\tu_int IRQInfo1;\n\tu_int IRQInfo2;\n};\n\ntypedef struct cistpl_irq_t cistpl_irq_t;\n\nstruct cistpl_mem_t {\n\tu_char flags;\n\tu_char nwin;\n\tstruct {\n\t\tu_int len;\n\t\tu_int card_addr;\n\t\tu_int host_addr;\n\t} win[8];\n};\n\ntypedef struct cistpl_mem_t cistpl_mem_t;\n\nstruct cistpl_cftable_entry_t {\n\tu_char index;\n\tu_short flags;\n\tu_char interface;\n\tcistpl_power_t vcc;\n\tcistpl_power_t vpp1;\n\tcistpl_power_t vpp2;\n\tcistpl_timing_t timing;\n\tcistpl_io_t io;\n\tcistpl_irq_t irq;\n\tcistpl_mem_t mem;\n\tu_char subtuples;\n};\n\ntypedef struct cistpl_cftable_entry_t cistpl_cftable_entry_t;\n\nstruct cistpl_cftable_entry_cb_t {\n\tu_char index;\n\tu_int flags;\n\tcistpl_power_t vcc;\n\tcistpl_power_t vpp1;\n\tcistpl_power_t vpp2;\n\tu_char io;\n\tcistpl_irq_t irq;\n\tu_char mem;\n\tu_char subtuples;\n};\n\ntypedef struct cistpl_cftable_entry_cb_t cistpl_cftable_entry_cb_t;\n\nstruct cistpl_vers_2_t {\n\tu_char vers;\n\tu_char comply;\n\tu_short dindex;\n\tu_char vspec8;\n\tu_char vspec9;\n\tu_char nhdr;\n\tu_char vendor;\n\tu_char info;\n\tchar str[244];\n};\n\ntypedef struct cistpl_vers_2_t cistpl_vers_2_t;\n\nstruct cistpl_org_t {\n\tu_char data_org;\n\tchar desc[30];\n};\n\ntypedef struct cistpl_org_t cistpl_org_t;\n\nstruct cistpl_format_t {\n\tu_char type;\n\tu_char edc;\n\tu_int offset;\n\tu_int length;\n};\n\ntypedef struct cistpl_format_t cistpl_format_t;\n\nunion cisparse_t {\n\tcistpl_device_t device;\n\tcistpl_checksum_t checksum;\n\tcistpl_longlink_t longlink;\n\tcistpl_longlink_mfc_t longlink_mfc;\n\tcistpl_vers_1_t version_1;\n\tcistpl_altstr_t altstr;\n\tcistpl_jedec_t jedec;\n\tcistpl_manfid_t manfid;\n\tcistpl_funcid_t funcid;\n\tcistpl_funce_t funce;\n\tcistpl_bar_t bar;\n\tcistpl_config_t config;\n\tcistpl_cftable_entry_t cftable_entry;\n\tcistpl_cftable_entry_cb_t cftable_entry_cb;\n\tcistpl_device_geo_t device_geo;\n\tcistpl_vers_2_t vers_2;\n\tcistpl_org_t org;\n\tcistpl_format_t format;\n};\n\ntypedef union cisparse_t cisparse_t;\n\nstruct tuple_t {\n\tu_int Attributes;\n\tcisdata_t DesiredTuple;\n\tu_int Flags;\n\tu_int LinkOffset;\n\tu_int CISOffset;\n\tcisdata_t TupleCode;\n\tcisdata_t TupleLink;\n\tcisdata_t TupleOffset;\n\tcisdata_t TupleDataMax;\n\tcisdata_t TupleDataLen;\n\tcisdata_t *TupleData;\n};\n\ntypedef struct tuple_t tuple_t;\n\nstruct cis_cache_entry {\n\tstruct list_head node;\n\tunsigned int addr;\n\tunsigned int len;\n\tunsigned int attr;\n\tunsigned char cache[0];\n};\n\nstruct tuple_flags {\n\tu_int link_space: 4;\n\tu_int has_link: 1;\n\tu_int mfc_fn: 3;\n\tu_int space: 4;\n};\n\nstruct pcmcia_cfg_mem {\n\tstruct pcmcia_device *p_dev;\n\tint (*conf_check)(struct pcmcia_device *, void *);\n\tvoid *priv_data;\n\tcisparse_t parse;\n\tcistpl_cftable_entry_t dflt;\n};\n\nstruct pcmcia_loop_mem {\n\tstruct pcmcia_device *p_dev;\n\tvoid *priv_data;\n\tint (*loop_tuple)(struct pcmcia_device *, tuple_t *, void *);\n};\n\nstruct pcmcia_loop_get {\n\tsize_t len;\n\tcisdata_t **buf;\n};\n\nstruct resource_map {\n\tu_long base;\n\tu_long num;\n\tstruct resource_map *next;\n};\n\nstruct socket_data {\n\tstruct resource_map mem_db;\n\tstruct resource_map mem_db_valid;\n\tstruct resource_map io_db;\n};\n\nstruct pcmcia_align_data {\n\tlong unsigned int mask;\n\tlong unsigned int offset;\n\tstruct resource_map *map;\n};\n\nenum usb_otg_state {\n\tOTG_STATE_UNDEFINED = 0,\n\tOTG_STATE_B_IDLE = 1,\n\tOTG_STATE_B_SRP_INIT = 2,\n\tOTG_STATE_B_PERIPHERAL = 3,\n\tOTG_STATE_B_WAIT_ACON = 4,\n\tOTG_STATE_B_HOST = 5,\n\tOTG_STATE_A_IDLE = 6,\n\tOTG_STATE_A_WAIT_VRISE = 7,\n\tOTG_STATE_A_WAIT_BCON = 8,\n\tOTG_STATE_A_HOST = 9,\n\tOTG_STATE_A_SUSPEND = 10,\n\tOTG_STATE_A_PERIPHERAL = 11,\n\tOTG_STATE_A_WAIT_VFALL = 12,\n\tOTG_STATE_A_VBUS_ERR = 13,\n};\n\nenum usb_dr_mode {\n\tUSB_DR_MODE_UNKNOWN = 0,\n\tUSB_DR_MODE_HOST = 1,\n\tUSB_DR_MODE_PERIPHERAL = 2,\n\tUSB_DR_MODE_OTG = 3,\n};\n\nenum usb_led_event {\n\tUSB_LED_EVENT_HOST = 0,\n\tUSB_LED_EVENT_GADGET = 1,\n};\n\nstruct usb_device_id {\n\t__u16 match_flags;\n\t__u16 idVendor;\n\t__u16 idProduct;\n\t__u16 bcdDevice_lo;\n\t__u16 bcdDevice_hi;\n\t__u8 bDeviceClass;\n\t__u8 bDeviceSubClass;\n\t__u8 bDeviceProtocol;\n\t__u8 bInterfaceClass;\n\t__u8 bInterfaceSubClass;\n\t__u8 bInterfaceProtocol;\n\t__u8 bInterfaceNumber;\n\tkernel_ulong_t driver_info;\n};\n\nstruct usb_descriptor_header {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n};\n\nenum usb_port_connect_type {\n\tUSB_PORT_CONNECT_TYPE_UNKNOWN = 0,\n\tUSB_PORT_CONNECT_TYPE_HOT_PLUG = 1,\n\tUSB_PORT_CONNECT_TYPE_HARD_WIRED = 2,\n\tUSB_PORT_NOT_USED = 3,\n};\n\nstruct usb_dynids {\n\tspinlock_t lock;\n\tstruct list_head list;\n};\n\nstruct usbdrv_wrap {\n\tstruct device_driver driver;\n\tint for_devices;\n};\n\nstruct usb_driver {\n\tconst char *name;\n\tint (*probe)(struct usb_interface *, const struct usb_device_id *);\n\tvoid (*disconnect)(struct usb_interface *);\n\tint (*unlocked_ioctl)(struct usb_interface *, unsigned int, void *);\n\tint (*suspend)(struct usb_interface *, pm_message_t);\n\tint (*resume)(struct usb_interface *);\n\tint (*reset_resume)(struct usb_interface *);\n\tint (*pre_reset)(struct usb_interface *);\n\tint (*post_reset)(struct usb_interface *);\n\tconst struct usb_device_id *id_table;\n\tconst struct attribute_group **dev_groups;\n\tstruct usb_dynids dynids;\n\tstruct usbdrv_wrap drvwrap;\n\tunsigned int no_dynamic_id: 1;\n\tunsigned int supports_autosuspend: 1;\n\tunsigned int disable_hub_initiated_lpm: 1;\n\tunsigned int soft_unbind: 1;\n};\n\nstruct usb_device_driver {\n\tconst char *name;\n\tbool (*match)(struct usb_device *);\n\tint (*probe)(struct usb_device *);\n\tvoid (*disconnect)(struct usb_device *);\n\tint (*suspend)(struct usb_device *, pm_message_t);\n\tint (*resume)(struct usb_device *, pm_message_t);\n\tconst struct attribute_group **dev_groups;\n\tstruct usbdrv_wrap drvwrap;\n\tconst struct usb_device_id *id_table;\n\tunsigned int supports_autosuspend: 1;\n\tunsigned int generic_subclass: 1;\n};\n\nenum usb_phy_type {\n\tUSB_PHY_TYPE_UNDEFINED = 0,\n\tUSB_PHY_TYPE_USB2 = 1,\n\tUSB_PHY_TYPE_USB3 = 2,\n};\n\nenum usb_phy_events {\n\tUSB_EVENT_NONE = 0,\n\tUSB_EVENT_VBUS = 1,\n\tUSB_EVENT_ID = 2,\n\tUSB_EVENT_CHARGER = 3,\n\tUSB_EVENT_ENUMERATED = 4,\n};\n\nstruct extcon_dev;\n\nenum usb_charger_type {\n\tUNKNOWN_TYPE = 0,\n\tSDP_TYPE = 1,\n\tDCP_TYPE = 2,\n\tCDP_TYPE = 3,\n\tACA_TYPE = 4,\n};\n\nenum usb_charger_state {\n\tUSB_CHARGER_DEFAULT = 0,\n\tUSB_CHARGER_PRESENT = 1,\n\tUSB_CHARGER_ABSENT = 2,\n};\n\nstruct usb_charger_current {\n\tunsigned int sdp_min;\n\tunsigned int sdp_max;\n\tunsigned int dcp_min;\n\tunsigned int dcp_max;\n\tunsigned int cdp_min;\n\tunsigned int cdp_max;\n\tunsigned int aca_min;\n\tunsigned int aca_max;\n};\n\nstruct usb_otg;\n\nstruct usb_phy_io_ops;\n\nstruct usb_phy {\n\tstruct device *dev;\n\tconst char *label;\n\tunsigned int flags;\n\tenum usb_phy_type type;\n\tenum usb_phy_events last_event;\n\tstruct usb_otg *otg;\n\tstruct device *io_dev;\n\tstruct usb_phy_io_ops *io_ops;\n\tvoid *io_priv;\n\tstruct extcon_dev *edev;\n\tstruct extcon_dev *id_edev;\n\tstruct notifier_block vbus_nb;\n\tstruct notifier_block id_nb;\n\tstruct notifier_block type_nb;\n\tenum usb_charger_type chg_type;\n\tenum usb_charger_state chg_state;\n\tstruct usb_charger_current chg_cur;\n\tstruct work_struct chg_work;\n\tstruct atomic_notifier_head notifier;\n\tu16 port_status;\n\tu16 port_change;\n\tstruct list_head head;\n\tint (*init)(struct usb_phy *);\n\tvoid (*shutdown)(struct usb_phy *);\n\tint (*set_vbus)(struct usb_phy *, int);\n\tint (*set_power)(struct usb_phy *, unsigned int);\n\tint (*set_suspend)(struct usb_phy *, int);\n\tint (*set_wakeup)(struct usb_phy *, bool);\n\tint (*notify_connect)(struct usb_phy *, enum usb_device_speed);\n\tint (*notify_disconnect)(struct usb_phy *, enum usb_device_speed);\n\tenum usb_charger_type (*charger_detect)(struct usb_phy *);\n};\n\nstruct usb_port_status {\n\t__le16 wPortStatus;\n\t__le16 wPortChange;\n\t__le32 dwExtPortStatus;\n};\n\nstruct usb_hub_status {\n\t__le16 wHubStatus;\n\t__le16 wHubChange;\n};\n\nstruct usb_hub_descriptor {\n\t__u8 bDescLength;\n\t__u8 bDescriptorType;\n\t__u8 bNbrPorts;\n\t__le16 wHubCharacteristics;\n\t__u8 bPwrOn2PwrGood;\n\t__u8 bHubContrCurrent;\n\tunion {\n\t\tstruct {\n\t\t\t__u8 DeviceRemovable[4];\n\t\t\t__u8 PortPwrCtrlMask[4];\n\t\t} hs;\n\t\tstruct {\n\t\t\t__u8 bHubHdrDecLat;\n\t\t\t__le16 wHubDelay;\n\t\t\t__le16 DeviceRemovable;\n\t\t} __attribute__((packed)) ss;\n\t} u;\n} __attribute__((packed));\n\nstruct usb_phy_io_ops {\n\tint (*read)(struct usb_phy *, u32);\n\tint (*write)(struct usb_phy *, u32, u32);\n};\n\nstruct usb_gadget;\n\nstruct usb_otg {\n\tu8 default_a;\n\tstruct phy *phy;\n\tstruct usb_phy *usb_phy;\n\tstruct usb_bus *host;\n\tstruct usb_gadget *gadget;\n\tenum usb_otg_state state;\n\tint (*set_host)(struct usb_otg *, struct usb_bus *);\n\tint (*set_peripheral)(struct usb_otg *, struct usb_gadget *);\n\tint (*set_vbus)(struct usb_otg *, bool);\n\tint (*start_srp)(struct usb_otg *);\n\tint (*start_hnp)(struct usb_otg *);\n};\n\ntypedef u32 usb_port_location_t;\n\nstruct usb_port;\n\nstruct usb_hub {\n\tstruct device *intfdev;\n\tstruct usb_device *hdev;\n\tstruct kref kref;\n\tstruct urb *urb;\n\tu8 (*buffer)[8];\n\tunion {\n\t\tstruct usb_hub_status hub;\n\t\tstruct usb_port_status port;\n\t} *status;\n\tstruct mutex status_mutex;\n\tint error;\n\tint nerrors;\n\tlong unsigned int event_bits[1];\n\tlong unsigned int change_bits[1];\n\tlong unsigned int removed_bits[1];\n\tlong unsigned int wakeup_bits[1];\n\tlong unsigned int power_bits[1];\n\tlong unsigned int child_usage_bits[1];\n\tlong unsigned int warm_reset_bits[1];\n\tstruct usb_hub_descriptor *descriptor;\n\tstruct usb_tt tt;\n\tunsigned int mA_per_port;\n\tunsigned int wakeup_enabled_descendants;\n\tunsigned int limited_power: 1;\n\tunsigned int quiescing: 1;\n\tunsigned int disconnected: 1;\n\tunsigned int in_reset: 1;\n\tunsigned int quirk_disable_autosuspend: 1;\n\tunsigned int quirk_check_port_auto_suspend: 1;\n\tunsigned int has_indicators: 1;\n\tu8 indicator[31];\n\tstruct delayed_work leds;\n\tstruct delayed_work init_work;\n\tstruct work_struct events;\n\tspinlock_t irq_urb_lock;\n\tstruct timer_list irq_urb_retry;\n\tstruct usb_port **ports;\n};\n\nstruct usb_dev_state;\n\nstruct usb_port {\n\tstruct usb_device *child;\n\tstruct device dev;\n\tstruct usb_dev_state *port_owner;\n\tstruct usb_port *peer;\n\tstruct dev_pm_qos_request *req;\n\tenum usb_port_connect_type connect_type;\n\tusb_port_location_t location;\n\tstruct mutex status_lock;\n\tu32 over_current_count;\n\tu8 portnum;\n\tu32 quirks;\n\tunsigned int is_superspeed: 1;\n\tunsigned int usb3_lpm_u1_permit: 1;\n\tunsigned int usb3_lpm_u2_permit: 1;\n};\n\nstruct find_interface_arg {\n\tint minor;\n\tstruct device_driver *drv;\n};\n\nstruct each_dev_arg {\n\tvoid *data;\n\tint (*fn)(struct usb_device *, void *);\n};\n\nstruct usb_qualifier_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__le16 bcdUSB;\n\t__u8 bDeviceClass;\n\t__u8 bDeviceSubClass;\n\t__u8 bDeviceProtocol;\n\t__u8 bMaxPacketSize0;\n\t__u8 bNumConfigurations;\n\t__u8 bRESERVED;\n};\n\nstruct usb_set_sel_req {\n\t__u8 u1_sel;\n\t__u8 u1_pel;\n\t__le16 u2_sel;\n\t__le16 u2_pel;\n};\n\nstruct usbdevfs_hub_portinfo {\n\tchar nports;\n\tchar port[127];\n};\n\nenum hub_led_mode {\n\tINDICATOR_AUTO = 0,\n\tINDICATOR_CYCLE = 1,\n\tINDICATOR_GREEN_BLINK = 2,\n\tINDICATOR_GREEN_BLINK_OFF = 3,\n\tINDICATOR_AMBER_BLINK = 4,\n\tINDICATOR_AMBER_BLINK_OFF = 5,\n\tINDICATOR_ALT_BLINK = 6,\n\tINDICATOR_ALT_BLINK_OFF = 7,\n};\n\nstruct usb_tt_clear {\n\tstruct list_head clear_list;\n\tunsigned int tt;\n\tu16 devinfo;\n\tstruct usb_hcd *hcd;\n\tstruct usb_host_endpoint *ep;\n};\n\nenum hub_activation_type {\n\tHUB_INIT = 0,\n\tHUB_INIT2 = 1,\n\tHUB_INIT3 = 2,\n\tHUB_POST_RESET = 3,\n\tHUB_RESUME = 4,\n\tHUB_RESET_RESUME = 5,\n};\n\nenum hub_quiescing_type {\n\tHUB_DISCONNECT = 0,\n\tHUB_PRE_RESET = 1,\n\tHUB_SUSPEND = 2,\n};\n\nstruct usb_ctrlrequest {\n\t__u8 bRequestType;\n\t__u8 bRequest;\n\t__le16 wValue;\n\t__le16 wIndex;\n\t__le16 wLength;\n};\n\nstruct usb_mon_operations {\n\tvoid (*urb_submit)(struct usb_bus *, struct urb *);\n\tvoid (*urb_submit_error)(struct usb_bus *, struct urb *, int);\n\tvoid (*urb_complete)(struct usb_bus *, struct urb *, int);\n};\n\nstruct usb_sg_request {\n\tint status;\n\tsize_t bytes;\n\tspinlock_t lock;\n\tstruct usb_device *dev;\n\tint pipe;\n\tint entries;\n\tstruct urb **urbs;\n\tint count;\n\tstruct completion complete;\n};\n\nstruct usb_cdc_header_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__le16 bcdCDC;\n} __attribute__((packed));\n\nstruct usb_cdc_call_mgmt_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__u8 bmCapabilities;\n\t__u8 bDataInterface;\n};\n\nstruct usb_cdc_acm_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__u8 bmCapabilities;\n};\n\nstruct usb_cdc_union_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__u8 bMasterInterface0;\n\t__u8 bSlaveInterface0;\n};\n\nstruct usb_cdc_country_functional_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__u8 iCountryCodeRelDate;\n\t__le16 wCountyCode0;\n};\n\nstruct usb_cdc_network_terminal_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__u8 bEntityId;\n\t__u8 iName;\n\t__u8 bChannelIndex;\n\t__u8 bPhysicalInterface;\n};\n\nstruct usb_cdc_ether_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__u8 iMACAddress;\n\t__le32 bmEthernetStatistics;\n\t__le16 wMaxSegmentSize;\n\t__le16 wNumberMCFilters;\n\t__u8 bNumberPowerFilters;\n} __attribute__((packed));\n\nstruct usb_cdc_dmm_desc {\n\t__u8 bFunctionLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubtype;\n\t__u16 bcdVersion;\n\t__le16 wMaxCommand;\n} __attribute__((packed));\n\nstruct usb_cdc_mdlm_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__le16 bcdVersion;\n\t__u8 bGUID[16];\n} __attribute__((packed));\n\nstruct usb_cdc_mdlm_detail_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__u8 bGuidDescriptorType;\n\t__u8 bDetailData[0];\n};\n\nstruct usb_cdc_obex_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__le16 bcdVersion;\n} __attribute__((packed));\n\nstruct usb_cdc_ncm_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__le16 bcdNcmVersion;\n\t__u8 bmNetworkCapabilities;\n} __attribute__((packed));\n\nstruct usb_cdc_mbim_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__le16 bcdMBIMVersion;\n\t__le16 wMaxControlMessage;\n\t__u8 bNumberFilters;\n\t__u8 bMaxFilterSize;\n\t__le16 wMaxSegmentSize;\n\t__u8 bmNetworkCapabilities;\n} __attribute__((packed));\n\nstruct usb_cdc_mbim_extended_desc {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDescriptorSubType;\n\t__le16 bcdMBIMExtendedVersion;\n\t__u8 bMaxOutstandingCommandMessages;\n\t__le16 wMTU;\n} __attribute__((packed));\n\nstruct usb_cdc_parsed_header {\n\tstruct usb_cdc_union_desc *usb_cdc_union_desc;\n\tstruct usb_cdc_header_desc *usb_cdc_header_desc;\n\tstruct usb_cdc_call_mgmt_descriptor *usb_cdc_call_mgmt_descriptor;\n\tstruct usb_cdc_acm_descriptor *usb_cdc_acm_descriptor;\n\tstruct usb_cdc_country_functional_desc *usb_cdc_country_functional_desc;\n\tstruct usb_cdc_network_terminal_desc *usb_cdc_network_terminal_desc;\n\tstruct usb_cdc_ether_desc *usb_cdc_ether_desc;\n\tstruct usb_cdc_dmm_desc *usb_cdc_dmm_desc;\n\tstruct usb_cdc_mdlm_desc *usb_cdc_mdlm_desc;\n\tstruct usb_cdc_mdlm_detail_desc *usb_cdc_mdlm_detail_desc;\n\tstruct usb_cdc_obex_desc *usb_cdc_obex_desc;\n\tstruct usb_cdc_ncm_desc *usb_cdc_ncm_desc;\n\tstruct usb_cdc_mbim_desc *usb_cdc_mbim_desc;\n\tstruct usb_cdc_mbim_extended_desc *usb_cdc_mbim_extended_desc;\n\tbool phonet_magic_present;\n};\n\nstruct api_context {\n\tstruct completion done;\n\tint status;\n};\n\nstruct set_config_request {\n\tstruct usb_device *udev;\n\tint config;\n\tstruct work_struct work;\n\tstruct list_head node;\n};\n\nstruct usb_dynid {\n\tstruct list_head node;\n\tstruct usb_device_id id;\n};\n\nstruct usb_dev_cap_header {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDevCapabilityType;\n};\n\nstruct usb_class_driver {\n\tchar *name;\n\tchar * (*devnode)(struct device *, umode_t *);\n\tconst struct file_operations *fops;\n\tint minor_base;\n};\n\nstruct usb_class {\n\tstruct kref kref;\n\tstruct class *class;\n};\n\nstruct ep_device {\n\tstruct usb_endpoint_descriptor *desc;\n\tstruct usb_device *udev;\n\tstruct device dev;\n};\n\nstruct usbdevfs_ctrltransfer {\n\t__u8 bRequestType;\n\t__u8 bRequest;\n\t__u16 wValue;\n\t__u16 wIndex;\n\t__u16 wLength;\n\t__u32 timeout;\n\tvoid *data;\n};\n\nstruct usbdevfs_bulktransfer {\n\tunsigned int ep;\n\tunsigned int len;\n\tunsigned int timeout;\n\tvoid *data;\n};\n\nstruct usbdevfs_setinterface {\n\tunsigned int interface;\n\tunsigned int altsetting;\n};\n\nstruct usbdevfs_disconnectsignal {\n\tunsigned int signr;\n\tvoid *context;\n};\n\nstruct usbdevfs_getdriver {\n\tunsigned int interface;\n\tchar driver[256];\n};\n\nstruct usbdevfs_connectinfo {\n\tunsigned int devnum;\n\tunsigned char slow;\n};\n\nstruct usbdevfs_conninfo_ex {\n\t__u32 size;\n\t__u32 busnum;\n\t__u32 devnum;\n\t__u32 speed;\n\t__u8 num_ports;\n\t__u8 ports[7];\n};\n\nstruct usbdevfs_iso_packet_desc {\n\tunsigned int length;\n\tunsigned int actual_length;\n\tunsigned int status;\n};\n\nstruct usbdevfs_urb {\n\tunsigned char type;\n\tunsigned char endpoint;\n\tint status;\n\tunsigned int flags;\n\tvoid *buffer;\n\tint buffer_length;\n\tint actual_length;\n\tint start_frame;\n\tunion {\n\t\tint number_of_packets;\n\t\tunsigned int stream_id;\n\t};\n\tint error_count;\n\tunsigned int signr;\n\tvoid *usercontext;\n\tstruct usbdevfs_iso_packet_desc iso_frame_desc[0];\n};\n\nstruct usbdevfs_ioctl {\n\tint ifno;\n\tint ioctl_code;\n\tvoid *data;\n};\n\nstruct usbdevfs_disconnect_claim {\n\tunsigned int interface;\n\tunsigned int flags;\n\tchar driver[256];\n};\n\nstruct usbdevfs_streams {\n\tunsigned int num_streams;\n\tunsigned int num_eps;\n\tunsigned char eps[0];\n};\n\nstruct usbdevfs_ctrltransfer32 {\n\tu8 bRequestType;\n\tu8 bRequest;\n\tu16 wValue;\n\tu16 wIndex;\n\tu16 wLength;\n\tu32 timeout;\n\tcompat_caddr_t data;\n};\n\nstruct usbdevfs_bulktransfer32 {\n\tcompat_uint_t ep;\n\tcompat_uint_t len;\n\tcompat_uint_t timeout;\n\tcompat_caddr_t data;\n};\n\nstruct usbdevfs_disconnectsignal32 {\n\tcompat_int_t signr;\n\tcompat_caddr_t context;\n};\n\nstruct usbdevfs_urb32 {\n\tunsigned char type;\n\tunsigned char endpoint;\n\tcompat_int_t status;\n\tcompat_uint_t flags;\n\tcompat_caddr_t buffer;\n\tcompat_int_t buffer_length;\n\tcompat_int_t actual_length;\n\tcompat_int_t start_frame;\n\tcompat_int_t number_of_packets;\n\tcompat_int_t error_count;\n\tcompat_uint_t signr;\n\tcompat_caddr_t usercontext;\n\tstruct usbdevfs_iso_packet_desc iso_frame_desc[0];\n};\n\nstruct usbdevfs_ioctl32 {\n\ts32 ifno;\n\ts32 ioctl_code;\n\tcompat_caddr_t data;\n};\n\nstruct usb_dev_state___2 {\n\tstruct list_head list;\n\tstruct usb_device *dev;\n\tstruct file *file;\n\tspinlock_t lock;\n\tstruct list_head async_pending;\n\tstruct list_head async_completed;\n\tstruct list_head memory_list;\n\twait_queue_head_t wait;\n\twait_queue_head_t wait_for_resume;\n\tunsigned int discsignr;\n\tstruct pid *disc_pid;\n\tconst struct cred *cred;\n\tsigval_t disccontext;\n\tlong unsigned int ifclaimed;\n\tu32 disabled_bulk_eps;\n\tlong unsigned int interface_allowed_mask;\n\tint not_yet_resumed;\n\tbool suspend_allowed;\n\tbool privileges_dropped;\n};\n\nstruct usb_memory {\n\tstruct list_head memlist;\n\tint vma_use_count;\n\tint urb_use_count;\n\tu32 size;\n\tvoid *mem;\n\tdma_addr_t dma_handle;\n\tlong unsigned int vm_start;\n\tstruct usb_dev_state___2 *ps;\n};\n\nstruct async {\n\tstruct list_head asynclist;\n\tstruct usb_dev_state___2 *ps;\n\tstruct pid *pid;\n\tconst struct cred *cred;\n\tunsigned int signr;\n\tunsigned int ifnum;\n\tvoid *userbuffer;\n\tvoid *userurb;\n\tsigval_t userurb_sigval;\n\tstruct urb *urb;\n\tstruct usb_memory *usbm;\n\tunsigned int mem_usage;\n\tint status;\n\tu8 bulk_addr;\n\tu8 bulk_status;\n};\n\nenum snoop_when {\n\tSUBMIT = 0,\n\tCOMPLETE = 1,\n};\n\nstruct quirk_entry {\n\tu16 vid;\n\tu16 pid;\n\tu32 flags;\n};\n\nstruct class_info {\n\tint class;\n\tchar *class_name;\n};\n\nstruct usb_phy_roothub___2 {\n\tstruct phy *phy;\n\tstruct list_head list;\n};\n\ntypedef void (*companion_fn)(struct pci_dev *, struct usb_hcd *, struct pci_dev *, struct usb_hcd *);\n\nstruct phy_devm {\n\tstruct usb_phy *phy;\n\tstruct notifier_block *nb;\n};\n\nstruct mon_bus {\n\tstruct list_head bus_link;\n\tspinlock_t lock;\n\tstruct usb_bus *u_bus;\n\tint text_inited;\n\tint bin_inited;\n\tstruct dentry *dent_s;\n\tstruct dentry *dent_t;\n\tstruct dentry *dent_u;\n\tstruct device *classdev;\n\tint nreaders;\n\tstruct list_head r_list;\n\tstruct kref ref;\n\tunsigned int cnt_events;\n\tunsigned int cnt_text_lost;\n};\n\nstruct mon_reader {\n\tstruct list_head r_link;\n\tstruct mon_bus *m_bus;\n\tvoid *r_data;\n\tvoid (*rnf_submit)(void *, struct urb *);\n\tvoid (*rnf_error)(void *, struct urb *, int);\n\tvoid (*rnf_complete)(void *, struct urb *, int);\n};\n\nstruct snap {\n\tint slen;\n\tchar str[80];\n};\n\nstruct mon_iso_desc {\n\tint status;\n\tunsigned int offset;\n\tunsigned int length;\n};\n\nstruct mon_event_text {\n\tstruct list_head e_link;\n\tint type;\n\tlong unsigned int id;\n\tunsigned int tstamp;\n\tint busnum;\n\tchar devnum;\n\tchar epnum;\n\tchar is_in;\n\tchar xfertype;\n\tint length;\n\tint status;\n\tint interval;\n\tint start_frame;\n\tint error_count;\n\tchar setup_flag;\n\tchar data_flag;\n\tint numdesc;\n\tstruct mon_iso_desc isodesc[5];\n\tunsigned char setup[8];\n\tunsigned char data[32];\n};\n\nstruct mon_reader_text {\n\tstruct kmem_cache *e_slab;\n\tint nevents;\n\tstruct list_head e_list;\n\tstruct mon_reader r;\n\twait_queue_head_t wait;\n\tint printf_size;\n\tsize_t printf_offset;\n\tsize_t printf_togo;\n\tchar *printf_buf;\n\tstruct mutex printf_lock;\n\tchar slab_name[30];\n};\n\nstruct mon_text_ptr {\n\tint cnt;\n\tint limit;\n\tchar *pbuf;\n};\n\nenum {\n\tNAMESZ = 10,\n};\n\nstruct iso_rec {\n\tint error_count;\n\tint numdesc;\n};\n\nstruct mon_bin_hdr {\n\tu64 id;\n\tunsigned char type;\n\tunsigned char xfer_type;\n\tunsigned char epnum;\n\tunsigned char devnum;\n\tshort unsigned int busnum;\n\tchar flag_setup;\n\tchar flag_data;\n\ts64 ts_sec;\n\ts32 ts_usec;\n\tint status;\n\tunsigned int len_urb;\n\tunsigned int len_cap;\n\tunion {\n\t\tunsigned char setup[8];\n\t\tstruct iso_rec iso;\n\t} s;\n\tint interval;\n\tint start_frame;\n\tunsigned int xfer_flags;\n\tunsigned int ndesc;\n};\n\nstruct mon_bin_isodesc {\n\tint iso_status;\n\tunsigned int iso_off;\n\tunsigned int iso_len;\n\tu32 _pad;\n};\n\nstruct mon_bin_stats {\n\tu32 queued;\n\tu32 dropped;\n};\n\nstruct mon_bin_get {\n\tstruct mon_bin_hdr *hdr;\n\tvoid *data;\n\tsize_t alloc;\n};\n\nstruct mon_bin_mfetch {\n\tu32 *offvec;\n\tu32 nfetch;\n\tu32 nflush;\n};\n\nstruct mon_bin_get32 {\n\tu32 hdr32;\n\tu32 data32;\n\tu32 alloc32;\n};\n\nstruct mon_bin_mfetch32 {\n\tu32 offvec32;\n\tu32 nfetch32;\n\tu32 nflush32;\n};\n\nstruct mon_pgmap {\n\tstruct page *pg;\n\tunsigned char *ptr;\n};\n\nstruct mon_reader_bin {\n\tspinlock_t b_lock;\n\tunsigned int b_size;\n\tunsigned int b_cnt;\n\tunsigned int b_in;\n\tunsigned int b_out;\n\tunsigned int b_read;\n\tstruct mon_pgmap *b_vec;\n\twait_queue_head_t b_wait;\n\tstruct mutex fetch_lock;\n\tint mmap_active;\n\tstruct mon_reader r;\n\tunsigned int cnt_lost;\n};\n\nenum amd_chipset_gen {\n\tNOT_AMD_CHIPSET = 0,\n\tAMD_CHIPSET_SB600 = 1,\n\tAMD_CHIPSET_SB700 = 2,\n\tAMD_CHIPSET_SB800 = 3,\n\tAMD_CHIPSET_HUDSON2 = 4,\n\tAMD_CHIPSET_BOLTON = 5,\n\tAMD_CHIPSET_YANGTZE = 6,\n\tAMD_CHIPSET_TAISHAN = 7,\n\tAMD_CHIPSET_UNKNOWN = 8,\n};\n\nstruct amd_chipset_type {\n\tenum amd_chipset_gen gen;\n\tu8 rev;\n};\n\nstruct amd_chipset_info {\n\tstruct pci_dev *nb_dev;\n\tstruct pci_dev *smbus_dev;\n\tint nb_type;\n\tstruct amd_chipset_type sb_type;\n\tint isoc_reqs;\n\tint probe_count;\n\tbool need_pll_quirk;\n};\n\nstruct ehci_stats {\n\tlong unsigned int normal;\n\tlong unsigned int error;\n\tlong unsigned int iaa;\n\tlong unsigned int lost_iaa;\n\tlong unsigned int complete;\n\tlong unsigned int unlink;\n};\n\nstruct ehci_per_sched {\n\tstruct usb_device *udev;\n\tstruct usb_host_endpoint *ep;\n\tstruct list_head ps_list;\n\tu16 tt_usecs;\n\tu16 cs_mask;\n\tu16 period;\n\tu16 phase;\n\tu8 bw_phase;\n\tu8 phase_uf;\n\tu8 usecs;\n\tu8 c_usecs;\n\tu8 bw_uperiod;\n\tu8 bw_period;\n};\n\nenum ehci_rh_state {\n\tEHCI_RH_HALTED = 0,\n\tEHCI_RH_SUSPENDED = 1,\n\tEHCI_RH_RUNNING = 2,\n\tEHCI_RH_STOPPING = 3,\n};\n\nenum ehci_hrtimer_event {\n\tEHCI_HRTIMER_POLL_ASS = 0,\n\tEHCI_HRTIMER_POLL_PSS = 1,\n\tEHCI_HRTIMER_POLL_DEAD = 2,\n\tEHCI_HRTIMER_UNLINK_INTR = 3,\n\tEHCI_HRTIMER_FREE_ITDS = 4,\n\tEHCI_HRTIMER_ACTIVE_UNLINK = 5,\n\tEHCI_HRTIMER_START_UNLINK_INTR = 6,\n\tEHCI_HRTIMER_ASYNC_UNLINKS = 7,\n\tEHCI_HRTIMER_IAA_WATCHDOG = 8,\n\tEHCI_HRTIMER_DISABLE_PERIODIC = 9,\n\tEHCI_HRTIMER_DISABLE_ASYNC = 10,\n\tEHCI_HRTIMER_IO_WATCHDOG = 11,\n\tEHCI_HRTIMER_NUM_EVENTS = 12,\n};\n\nstruct ehci_caps;\n\nstruct ehci_regs;\n\nstruct ehci_dbg_port;\n\nstruct ehci_qh;\n\nunion ehci_shadow;\n\nstruct ehci_itd;\n\nstruct ehci_sitd;\n\nstruct ehci_hcd {\n\tenum ehci_hrtimer_event next_hrtimer_event;\n\tunsigned int enabled_hrtimer_events;\n\tktime_t hr_timeouts[12];\n\tstruct hrtimer hrtimer;\n\tint PSS_poll_count;\n\tint ASS_poll_count;\n\tint died_poll_count;\n\tstruct ehci_caps *caps;\n\tstruct ehci_regs *regs;\n\tstruct ehci_dbg_port *debug;\n\t__u32 hcs_params;\n\tspinlock_t lock;\n\tenum ehci_rh_state rh_state;\n\tbool scanning: 1;\n\tbool need_rescan: 1;\n\tbool intr_unlinking: 1;\n\tbool iaa_in_progress: 1;\n\tbool async_unlinking: 1;\n\tbool shutdown: 1;\n\tstruct ehci_qh *qh_scan_next;\n\tstruct ehci_qh *async;\n\tstruct ehci_qh *dummy;\n\tstruct list_head async_unlink;\n\tstruct list_head async_idle;\n\tunsigned int async_unlink_cycle;\n\tunsigned int async_count;\n\t__le32 old_current;\n\t__le32 old_token;\n\tunsigned int periodic_size;\n\t__le32 *periodic;\n\tdma_addr_t periodic_dma;\n\tstruct list_head intr_qh_list;\n\tunsigned int i_thresh;\n\tunion ehci_shadow *pshadow;\n\tstruct list_head intr_unlink_wait;\n\tstruct list_head intr_unlink;\n\tunsigned int intr_unlink_wait_cycle;\n\tunsigned int intr_unlink_cycle;\n\tunsigned int now_frame;\n\tunsigned int last_iso_frame;\n\tunsigned int intr_count;\n\tunsigned int isoc_count;\n\tunsigned int periodic_count;\n\tunsigned int uframe_periodic_max;\n\tstruct list_head cached_itd_list;\n\tstruct ehci_itd *last_itd_to_free;\n\tstruct list_head cached_sitd_list;\n\tstruct ehci_sitd *last_sitd_to_free;\n\tlong unsigned int reset_done[15];\n\tlong unsigned int bus_suspended;\n\tlong unsigned int companion_ports;\n\tlong unsigned int owned_ports;\n\tlong unsigned int port_c_suspend;\n\tlong unsigned int suspended_ports;\n\tlong unsigned int resuming_ports;\n\tstruct dma_pool___2 *qh_pool;\n\tstruct dma_pool___2 *qtd_pool;\n\tstruct dma_pool___2 *itd_pool;\n\tstruct dma_pool___2 *sitd_pool;\n\tunsigned int random_frame;\n\tlong unsigned int next_statechange;\n\tktime_t last_periodic_enable;\n\tu32 command;\n\tunsigned int no_selective_suspend: 1;\n\tunsigned int has_fsl_port_bug: 1;\n\tunsigned int has_fsl_hs_errata: 1;\n\tunsigned int has_fsl_susp_errata: 1;\n\tunsigned int big_endian_mmio: 1;\n\tunsigned int big_endian_desc: 1;\n\tunsigned int big_endian_capbase: 1;\n\tunsigned int has_amcc_usb23: 1;\n\tunsigned int need_io_watchdog: 1;\n\tunsigned int amd_pll_fix: 1;\n\tunsigned int use_dummy_qh: 1;\n\tunsigned int has_synopsys_hc_bug: 1;\n\tunsigned int frame_index_bug: 1;\n\tunsigned int need_oc_pp_cycle: 1;\n\tunsigned int imx28_write_fix: 1;\n\t__le32 *ohci_hcctrl_reg;\n\tunsigned int has_hostpc: 1;\n\tunsigned int has_tdi_phy_lpm: 1;\n\tunsigned int has_ppcd: 1;\n\tu8 sbrn;\n\tstruct ehci_stats stats;\n\tstruct dentry *debug_dir;\n\tu8 bandwidth[64];\n\tu8 tt_budget[64];\n\tstruct list_head tt_list;\n\tlong unsigned int priv[0];\n};\n\nstruct ehci_caps {\n\tu32 hc_capbase;\n\tu32 hcs_params;\n\tu32 hcc_params;\n\tu8 portroute[8];\n};\n\nstruct ehci_regs {\n\tu32 command;\n\tu32 status;\n\tu32 intr_enable;\n\tu32 frame_index;\n\tu32 segment;\n\tu32 frame_list;\n\tu32 async_next;\n\tu32 reserved1[2];\n\tu32 txfill_tuning;\n\tu32 reserved2[6];\n\tu32 configured_flag;\n\tu32 port_status[0];\n\tu32 reserved3[9];\n\tu32 usbmode;\n\tu32 reserved4[6];\n\tu32 hostpc[0];\n\tu32 reserved5[17];\n\tu32 usbmode_ex;\n};\n\nstruct ehci_dbg_port {\n\tu32 control;\n\tu32 pids;\n\tu32 data03;\n\tu32 data47;\n\tu32 address;\n};\n\nstruct ehci_fstn;\n\nunion ehci_shadow {\n\tstruct ehci_qh *qh;\n\tstruct ehci_itd *itd;\n\tstruct ehci_sitd *sitd;\n\tstruct ehci_fstn *fstn;\n\t__le32 *hw_next;\n\tvoid *ptr;\n};\n\nstruct ehci_qh_hw;\n\nstruct ehci_qtd;\n\nstruct ehci_qh {\n\tstruct ehci_qh_hw *hw;\n\tdma_addr_t qh_dma;\n\tunion ehci_shadow qh_next;\n\tstruct list_head qtd_list;\n\tstruct list_head intr_node;\n\tstruct ehci_qtd *dummy;\n\tstruct list_head unlink_node;\n\tstruct ehci_per_sched ps;\n\tunsigned int unlink_cycle;\n\tu8 qh_state;\n\tu8 xacterrs;\n\tu8 unlink_reason;\n\tu8 gap_uf;\n\tunsigned int is_out: 1;\n\tunsigned int clearing_tt: 1;\n\tunsigned int dequeue_during_giveback: 1;\n\tunsigned int should_be_inactive: 1;\n};\n\nstruct ehci_iso_stream;\n\nstruct ehci_itd {\n\t__le32 hw_next;\n\t__le32 hw_transaction[8];\n\t__le32 hw_bufp[7];\n\t__le32 hw_bufp_hi[7];\n\tdma_addr_t itd_dma;\n\tunion ehci_shadow itd_next;\n\tstruct urb *urb;\n\tstruct ehci_iso_stream *stream;\n\tstruct list_head itd_list;\n\tunsigned int frame;\n\tunsigned int pg;\n\tunsigned int index[8];\n\tlong: 64;\n};\n\nstruct ehci_sitd {\n\t__le32 hw_next;\n\t__le32 hw_fullspeed_ep;\n\t__le32 hw_uframe;\n\t__le32 hw_results;\n\t__le32 hw_buf[2];\n\t__le32 hw_backpointer;\n\t__le32 hw_buf_hi[2];\n\tdma_addr_t sitd_dma;\n\tunion ehci_shadow sitd_next;\n\tstruct urb *urb;\n\tstruct ehci_iso_stream *stream;\n\tstruct list_head sitd_list;\n\tunsigned int frame;\n\tunsigned int index;\n};\n\nstruct ehci_qtd {\n\t__le32 hw_next;\n\t__le32 hw_alt_next;\n\t__le32 hw_token;\n\t__le32 hw_buf[5];\n\t__le32 hw_buf_hi[5];\n\tdma_addr_t qtd_dma;\n\tstruct list_head qtd_list;\n\tstruct urb *urb;\n\tsize_t length;\n};\n\nstruct ehci_fstn {\n\t__le32 hw_next;\n\t__le32 hw_prev;\n\tdma_addr_t fstn_dma;\n\tunion ehci_shadow fstn_next;\n\tlong: 64;\n};\n\nstruct ehci_qh_hw {\n\t__le32 hw_next;\n\t__le32 hw_info1;\n\t__le32 hw_info2;\n\t__le32 hw_current;\n\t__le32 hw_qtd_next;\n\t__le32 hw_alt_next;\n\t__le32 hw_token;\n\t__le32 hw_buf[5];\n\t__le32 hw_buf_hi[5];\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct ehci_iso_packet {\n\tu64 bufp;\n\t__le32 transaction;\n\tu8 cross;\n\tu32 buf1;\n};\n\nstruct ehci_iso_sched {\n\tstruct list_head td_list;\n\tunsigned int span;\n\tunsigned int first_packet;\n\tstruct ehci_iso_packet packet[0];\n};\n\nstruct ehci_iso_stream {\n\tstruct ehci_qh_hw *hw;\n\tu8 bEndpointAddress;\n\tu8 highspeed;\n\tstruct list_head td_list;\n\tstruct list_head free_list;\n\tstruct ehci_per_sched ps;\n\tunsigned int next_uframe;\n\t__le32 splits;\n\tu16 uperiod;\n\tu16 maxp;\n\tunsigned int bandwidth;\n\t__le32 buf0;\n\t__le32 buf1;\n\t__le32 buf2;\n\t__le32 address;\n};\n\nstruct ehci_tt {\n\tu16 bandwidth[8];\n\tstruct list_head tt_list;\n\tstruct list_head ps_list;\n\tstruct usb_tt *usb_tt;\n\tint tt_port;\n};\n\nstruct ehci_driver_overrides {\n\tsize_t extra_priv_size;\n\tint (*reset)(struct usb_hcd *);\n\tint (*port_power)(struct usb_hcd *, int, bool);\n};\n\nstruct debug_buffer {\n\tssize_t (*fill_func)(struct debug_buffer *);\n\tstruct usb_bus *bus;\n\tstruct mutex mutex;\n\tsize_t count;\n\tchar *output_buf;\n\tsize_t alloc_size;\n};\n\ntypedef __u32 __hc32;\n\ntypedef __u16 __hc16;\n\nstruct td;\n\nstruct ed {\n\t__hc32 hwINFO;\n\t__hc32 hwTailP;\n\t__hc32 hwHeadP;\n\t__hc32 hwNextED;\n\tdma_addr_t dma;\n\tstruct td *dummy;\n\tstruct ed *ed_next;\n\tstruct ed *ed_prev;\n\tstruct list_head td_list;\n\tstruct list_head in_use_list;\n\tu8 state;\n\tu8 type;\n\tu8 branch;\n\tu16 interval;\n\tu16 load;\n\tu16 last_iso;\n\tu16 tick;\n\tunsigned int takeback_wdh_cnt;\n\tstruct td *pending_td;\n\tlong: 64;\n};\n\nstruct td {\n\t__hc32 hwINFO;\n\t__hc32 hwCBP;\n\t__hc32 hwNextTD;\n\t__hc32 hwBE;\n\t__hc16 hwPSW[2];\n\t__u8 index;\n\tstruct ed *ed;\n\tstruct td *td_hash;\n\tstruct td *next_dl_td;\n\tstruct urb *urb;\n\tdma_addr_t td_dma;\n\tdma_addr_t data_dma;\n\tstruct list_head td_list;\n\tlong: 64;\n};\n\nstruct ohci_hcca {\n\t__hc32 int_table[32];\n\t__hc32 frame_no;\n\t__hc32 done_head;\n\tu8 reserved_for_hc[116];\n\tu8 what[4];\n};\n\nstruct ohci_roothub_regs {\n\t__hc32 a;\n\t__hc32 b;\n\t__hc32 status;\n\t__hc32 portstatus[15];\n};\n\nstruct ohci_regs {\n\t__hc32 revision;\n\t__hc32 control;\n\t__hc32 cmdstatus;\n\t__hc32 intrstatus;\n\t__hc32 intrenable;\n\t__hc32 intrdisable;\n\t__hc32 hcca;\n\t__hc32 ed_periodcurrent;\n\t__hc32 ed_controlhead;\n\t__hc32 ed_controlcurrent;\n\t__hc32 ed_bulkhead;\n\t__hc32 ed_bulkcurrent;\n\t__hc32 donehead;\n\t__hc32 fminterval;\n\t__hc32 fmremaining;\n\t__hc32 fmnumber;\n\t__hc32 periodicstart;\n\t__hc32 lsthresh;\n\tstruct ohci_roothub_regs roothub;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct urb_priv {\n\tstruct ed *ed;\n\tu16 length;\n\tu16 td_cnt;\n\tstruct list_head pending;\n\tstruct td *td[0];\n};\n\ntypedef struct urb_priv urb_priv_t;\n\nenum ohci_rh_state {\n\tOHCI_RH_HALTED = 0,\n\tOHCI_RH_SUSPENDED = 1,\n\tOHCI_RH_RUNNING = 2,\n};\n\nstruct ohci_hcd {\n\tspinlock_t lock;\n\tstruct ohci_regs *regs;\n\tstruct ohci_hcca *hcca;\n\tdma_addr_t hcca_dma;\n\tstruct ed *ed_rm_list;\n\tstruct ed *ed_bulktail;\n\tstruct ed *ed_controltail;\n\tstruct ed *periodic[32];\n\tvoid (*start_hnp)(struct ohci_hcd *);\n\tstruct dma_pool___2 *td_cache;\n\tstruct dma_pool___2 *ed_cache;\n\tstruct td *td_hash[64];\n\tstruct td *dl_start;\n\tstruct td *dl_end;\n\tstruct list_head pending;\n\tstruct list_head eds_in_use;\n\tenum ohci_rh_state rh_state;\n\tint num_ports;\n\tint load[32];\n\tu32 hc_control;\n\tlong unsigned int next_statechange;\n\tu32 fminterval;\n\tunsigned int autostop: 1;\n\tunsigned int working: 1;\n\tunsigned int restart_work: 1;\n\tlong unsigned int flags;\n\tunsigned int prev_frame_no;\n\tunsigned int wdh_cnt;\n\tunsigned int prev_wdh_cnt;\n\tu32 prev_donehead;\n\tstruct timer_list io_watchdog;\n\tstruct work_struct nec_work;\n\tstruct dentry *debug_dir;\n\tlong unsigned int priv[0];\n};\n\nstruct ohci_driver_overrides {\n\tconst char *product_desc;\n\tsize_t extra_priv_size;\n\tint (*reset)(struct usb_hcd *);\n};\n\nstruct debug_buffer___2 {\n\tssize_t (*fill_func)(struct debug_buffer___2 *);\n\tstruct ohci_hcd *ohci;\n\tstruct mutex mutex;\n\tsize_t count;\n\tchar *page;\n};\n\nstruct uhci_td;\n\nstruct uhci_qh {\n\t__le32 link;\n\t__le32 element;\n\tdma_addr_t dma_handle;\n\tstruct list_head node;\n\tstruct usb_host_endpoint *hep;\n\tstruct usb_device *udev;\n\tstruct list_head queue;\n\tstruct uhci_td *dummy_td;\n\tstruct uhci_td *post_td;\n\tstruct usb_iso_packet_descriptor *iso_packet_desc;\n\tlong unsigned int advance_jiffies;\n\tunsigned int unlink_frame;\n\tunsigned int period;\n\tshort int phase;\n\tshort int load;\n\tunsigned int iso_frame;\n\tint state;\n\tint type;\n\tint skel;\n\tunsigned int initial_toggle: 1;\n\tunsigned int needs_fixup: 1;\n\tunsigned int is_stopped: 1;\n\tunsigned int wait_expired: 1;\n\tunsigned int bandwidth_reserved: 1;\n};\n\nstruct uhci_td {\n\t__le32 link;\n\t__le32 status;\n\t__le32 token;\n\t__le32 buffer;\n\tdma_addr_t dma_handle;\n\tstruct list_head list;\n\tint frame;\n\tstruct list_head fl_list;\n};\n\nenum uhci_rh_state {\n\tUHCI_RH_RESET = 0,\n\tUHCI_RH_SUSPENDED = 1,\n\tUHCI_RH_AUTO_STOPPED = 2,\n\tUHCI_RH_RESUMING = 3,\n\tUHCI_RH_SUSPENDING = 4,\n\tUHCI_RH_RUNNING = 5,\n\tUHCI_RH_RUNNING_NODEVS = 6,\n};\n\nstruct uhci_hcd {\n\tstruct dentry *dentry;\n\tlong unsigned int io_addr;\n\tvoid *regs;\n\tstruct dma_pool___2 *qh_pool;\n\tstruct dma_pool___2 *td_pool;\n\tstruct uhci_td *term_td;\n\tstruct uhci_qh *skelqh[11];\n\tstruct uhci_qh *next_qh;\n\tspinlock_t lock;\n\tdma_addr_t frame_dma_handle;\n\t__le32 *frame;\n\tvoid **frame_cpu;\n\tenum uhci_rh_state rh_state;\n\tlong unsigned int auto_stop_time;\n\tunsigned int frame_number;\n\tunsigned int is_stopped;\n\tunsigned int last_iso_frame;\n\tunsigned int cur_iso_frame;\n\tunsigned int scan_in_progress: 1;\n\tunsigned int need_rescan: 1;\n\tunsigned int dead: 1;\n\tunsigned int RD_enable: 1;\n\tunsigned int is_initialized: 1;\n\tunsigned int fsbr_is_on: 1;\n\tunsigned int fsbr_is_wanted: 1;\n\tunsigned int fsbr_expiring: 1;\n\tstruct timer_list fsbr_timer;\n\tunsigned int oc_low: 1;\n\tunsigned int wait_for_hp: 1;\n\tunsigned int big_endian_mmio: 1;\n\tunsigned int big_endian_desc: 1;\n\tunsigned int is_aspeed: 1;\n\tlong unsigned int port_c_suspend;\n\tlong unsigned int resuming_ports;\n\tlong unsigned int ports_timeout;\n\tstruct list_head idle_qh_list;\n\tint rh_numports;\n\twait_queue_head_t waitqh;\n\tint num_waiting;\n\tint total_load;\n\tshort int load[32];\n\tstruct clk *clk;\n\tvoid (*reset_hc)(struct uhci_hcd *);\n\tint (*check_and_reset_hc)(struct uhci_hcd *);\n\tvoid (*configure_hc)(struct uhci_hcd *);\n\tint (*resume_detect_interrupts_are_broken)(struct uhci_hcd *);\n\tint (*global_suspend_mode_is_broken)(struct uhci_hcd *);\n};\n\nstruct urb_priv___2 {\n\tstruct list_head node;\n\tstruct urb *urb;\n\tstruct uhci_qh *qh;\n\tstruct list_head td_list;\n\tunsigned int fsbr: 1;\n};\n\nstruct uhci_debug {\n\tint size;\n\tchar *data;\n};\n\nstruct xhci_cap_regs {\n\t__le32 hc_capbase;\n\t__le32 hcs_params1;\n\t__le32 hcs_params2;\n\t__le32 hcs_params3;\n\t__le32 hcc_params;\n\t__le32 db_off;\n\t__le32 run_regs_off;\n\t__le32 hcc_params2;\n};\n\nstruct xhci_op_regs {\n\t__le32 command;\n\t__le32 status;\n\t__le32 page_size;\n\t__le32 reserved1;\n\t__le32 reserved2;\n\t__le32 dev_notification;\n\t__le64 cmd_ring;\n\t__le32 reserved3[4];\n\t__le64 dcbaa_ptr;\n\t__le32 config_reg;\n\t__le32 reserved4[241];\n\t__le32 port_status_base;\n\t__le32 port_power_base;\n\t__le32 port_link_base;\n\t__le32 reserved5;\n\t__le32 reserved6[1016];\n};\n\nstruct xhci_intr_reg {\n\t__le32 irq_pending;\n\t__le32 irq_control;\n\t__le32 erst_size;\n\t__le32 rsvd;\n\t__le64 erst_base;\n\t__le64 erst_dequeue;\n};\n\nstruct xhci_run_regs {\n\t__le32 microframe_index;\n\t__le32 rsvd[7];\n\tstruct xhci_intr_reg ir_set[128];\n};\n\nstruct xhci_doorbell_array {\n\t__le32 doorbell[256];\n};\n\nstruct xhci_container_ctx {\n\tunsigned int type;\n\tint size;\n\tu8 *bytes;\n\tdma_addr_t dma;\n};\n\nstruct xhci_slot_ctx {\n\t__le32 dev_info;\n\t__le32 dev_info2;\n\t__le32 tt_info;\n\t__le32 dev_state;\n\t__le32 reserved[4];\n};\n\nstruct xhci_ep_ctx {\n\t__le32 ep_info;\n\t__le32 ep_info2;\n\t__le64 deq;\n\t__le32 tx_info;\n\t__le32 reserved[3];\n};\n\nstruct xhci_input_control_ctx {\n\t__le32 drop_flags;\n\t__le32 add_flags;\n\t__le32 rsvd2[6];\n};\n\nunion xhci_trb;\n\nstruct xhci_command {\n\tstruct xhci_container_ctx *in_ctx;\n\tu32 status;\n\tint slot_id;\n\tstruct completion *completion;\n\tunion xhci_trb *command_trb;\n\tstruct list_head cmd_list;\n};\n\nstruct xhci_link_trb {\n\t__le64 segment_ptr;\n\t__le32 intr_target;\n\t__le32 control;\n};\n\nstruct xhci_transfer_event {\n\t__le64 buffer;\n\t__le32 transfer_len;\n\t__le32 flags;\n};\n\nstruct xhci_event_cmd {\n\t__le64 cmd_trb;\n\t__le32 status;\n\t__le32 flags;\n};\n\nstruct xhci_generic_trb {\n\t__le32 field[4];\n};\n\nunion xhci_trb {\n\tstruct xhci_link_trb link;\n\tstruct xhci_transfer_event trans_event;\n\tstruct xhci_event_cmd event_cmd;\n\tstruct xhci_generic_trb generic;\n};\n\nstruct xhci_stream_ctx {\n\t__le64 stream_ring;\n\t__le32 reserved[2];\n};\n\nstruct xhci_ring;\n\nstruct xhci_stream_info {\n\tstruct xhci_ring **stream_rings;\n\tunsigned int num_streams;\n\tstruct xhci_stream_ctx *stream_ctx_array;\n\tunsigned int num_stream_ctxs;\n\tdma_addr_t ctx_array_dma;\n\tstruct xarray trb_address_map;\n\tstruct xhci_command *free_streams_command;\n};\n\nenum xhci_ring_type {\n\tTYPE_CTRL = 0,\n\tTYPE_ISOC = 1,\n\tTYPE_BULK = 2,\n\tTYPE_INTR = 3,\n\tTYPE_STREAM = 4,\n\tTYPE_COMMAND = 5,\n\tTYPE_EVENT = 6,\n};\n\nstruct xhci_segment;\n\nstruct xhci_ring {\n\tstruct xhci_segment *first_seg;\n\tstruct xhci_segment *last_seg;\n\tunion xhci_trb *enqueue;\n\tstruct xhci_segment *enq_seg;\n\tunion xhci_trb *dequeue;\n\tstruct xhci_segment *deq_seg;\n\tstruct list_head td_list;\n\tu32 cycle_state;\n\tunsigned int err_count;\n\tunsigned int stream_id;\n\tunsigned int num_segs;\n\tunsigned int num_trbs_free;\n\tunsigned int num_trbs_free_temp;\n\tunsigned int bounce_buf_len;\n\tenum xhci_ring_type type;\n\tbool last_td_was_short;\n\tstruct xarray *trb_address_map;\n};\n\nstruct xhci_bw_info {\n\tunsigned int ep_interval;\n\tunsigned int mult;\n\tunsigned int num_packets;\n\tunsigned int max_packet_size;\n\tunsigned int max_esit_payload;\n\tunsigned int type;\n};\n\nstruct xhci_hcd;\n\nstruct xhci_virt_ep {\n\tstruct xhci_ring *ring;\n\tstruct xhci_stream_info *stream_info;\n\tstruct xhci_ring *new_ring;\n\tunsigned int ep_state;\n\tstruct list_head cancelled_td_list;\n\tstruct timer_list stop_cmd_timer;\n\tstruct xhci_hcd *xhci;\n\tstruct xhci_segment *queued_deq_seg;\n\tunion xhci_trb *queued_deq_ptr;\n\tbool skip;\n\tstruct xhci_bw_info bw_info;\n\tstruct list_head bw_endpoint_list;\n\tint next_frame_id;\n\tbool use_extended_tbc;\n};\n\nstruct xhci_erst_entry;\n\nstruct xhci_erst {\n\tstruct xhci_erst_entry *entries;\n\tunsigned int num_entries;\n\tdma_addr_t erst_dma_addr;\n\tunsigned int erst_size;\n};\n\nstruct s3_save {\n\tu32 command;\n\tu32 dev_nt;\n\tu64 dcbaa_ptr;\n\tu32 config_reg;\n\tu32 irq_pending;\n\tu32 irq_control;\n\tu32 erst_size;\n\tu64 erst_base;\n\tu64 erst_dequeue;\n};\n\nstruct xhci_bus_state {\n\tlong unsigned int bus_suspended;\n\tlong unsigned int next_statechange;\n\tu32 port_c_suspend;\n\tu32 suspended_ports;\n\tu32 port_remote_wakeup;\n\tlong unsigned int resume_done[31];\n\tlong unsigned int resuming_ports;\n\tlong unsigned int rexit_ports;\n\tstruct completion rexit_done[31];\n\tstruct completion u3exit_done[31];\n};\n\nstruct xhci_port;\n\nstruct xhci_hub {\n\tstruct xhci_port **ports;\n\tunsigned int num_ports;\n\tstruct usb_hcd *hcd;\n\tstruct xhci_bus_state bus_state;\n\tu8 maj_rev;\n\tu8 min_rev;\n};\n\nstruct xhci_device_context_array;\n\nstruct xhci_scratchpad;\n\nstruct xhci_virt_device;\n\nstruct xhci_root_port_bw_info;\n\nstruct xhci_port_cap;\n\nstruct xhci_hcd {\n\tstruct usb_hcd *main_hcd;\n\tstruct usb_hcd *shared_hcd;\n\tstruct xhci_cap_regs *cap_regs;\n\tstruct xhci_op_regs *op_regs;\n\tstruct xhci_run_regs *run_regs;\n\tstruct xhci_doorbell_array *dba;\n\tstruct xhci_intr_reg *ir_set;\n\t__u32 hcs_params1;\n\t__u32 hcs_params2;\n\t__u32 hcs_params3;\n\t__u32 hcc_params;\n\t__u32 hcc_params2;\n\tspinlock_t lock;\n\tu8 sbrn;\n\tu16 hci_version;\n\tu8 max_slots;\n\tu8 max_interrupters;\n\tu8 max_ports;\n\tu8 isoc_threshold;\n\tu32 imod_interval;\n\tint event_ring_max;\n\tint page_size;\n\tint page_shift;\n\tint msix_count;\n\tstruct clk *clk;\n\tstruct clk *reg_clk;\n\tstruct reset_control___2 *reset;\n\tstruct xhci_device_context_array *dcbaa;\n\tstruct xhci_ring *cmd_ring;\n\tunsigned int cmd_ring_state;\n\tstruct list_head cmd_list;\n\tunsigned int cmd_ring_reserved_trbs;\n\tstruct delayed_work cmd_timer;\n\tstruct completion cmd_ring_stop_completion;\n\tstruct xhci_command *current_cmd;\n\tstruct xhci_ring *event_ring;\n\tstruct xhci_erst erst;\n\tstruct xhci_scratchpad *scratchpad;\n\tstruct list_head lpm_failed_devs;\n\tstruct mutex mutex;\n\tstruct xhci_command *lpm_command;\n\tstruct xhci_virt_device *devs[256];\n\tstruct xhci_root_port_bw_info *rh_bw;\n\tstruct dma_pool___2 *device_pool;\n\tstruct dma_pool___2 *segment_pool;\n\tstruct dma_pool___2 *small_streams_pool;\n\tstruct dma_pool___2 *medium_streams_pool;\n\tunsigned int xhc_state;\n\tu32 command;\n\tstruct s3_save s3;\n\tlong long unsigned int quirks;\n\tunsigned int num_active_eps;\n\tunsigned int limit_active_eps;\n\tstruct xhci_port *hw_ports;\n\tstruct xhci_hub usb2_rhub;\n\tstruct xhci_hub usb3_rhub;\n\tunsigned int hw_lpm_support: 1;\n\tunsigned int broken_suspend: 1;\n\tu32 *ext_caps;\n\tunsigned int num_ext_caps;\n\tstruct xhci_port_cap *port_caps;\n\tunsigned int num_port_caps;\n\tstruct timer_list comp_mode_recovery_timer;\n\tu32 port_status_u0;\n\tu16 test_mode;\n\tstruct dentry *debugfs_root;\n\tstruct dentry *debugfs_slots;\n\tstruct list_head regset_list;\n\tvoid *dbc;\n\tlong unsigned int priv[0];\n};\n\nstruct xhci_segment {\n\tunion xhci_trb *trbs;\n\tstruct xhci_segment *next;\n\tdma_addr_t dma;\n\tdma_addr_t bounce_dma;\n\tvoid *bounce_buf;\n\tunsigned int bounce_offs;\n\tunsigned int bounce_len;\n};\n\nenum xhci_overhead_type {\n\tLS_OVERHEAD_TYPE = 0,\n\tFS_OVERHEAD_TYPE = 1,\n\tHS_OVERHEAD_TYPE = 2,\n};\n\nstruct xhci_interval_bw {\n\tunsigned int num_packets;\n\tstruct list_head endpoints;\n\tunsigned int overhead[3];\n};\n\nstruct xhci_interval_bw_table {\n\tunsigned int interval0_esit_payload;\n\tstruct xhci_interval_bw interval_bw[16];\n\tunsigned int bw_used;\n\tunsigned int ss_bw_in;\n\tunsigned int ss_bw_out;\n};\n\nstruct xhci_tt_bw_info;\n\nstruct xhci_virt_device {\n\tstruct usb_device *udev;\n\tstruct xhci_container_ctx *out_ctx;\n\tstruct xhci_container_ctx *in_ctx;\n\tstruct xhci_virt_ep eps[31];\n\tu8 fake_port;\n\tu8 real_port;\n\tstruct xhci_interval_bw_table *bw_table;\n\tstruct xhci_tt_bw_info *tt_info;\n\tlong unsigned int flags;\n\tu16 current_mel;\n\tvoid *debugfs_private;\n};\n\nstruct xhci_tt_bw_info {\n\tstruct list_head tt_list;\n\tint slot_id;\n\tint ttport;\n\tstruct xhci_interval_bw_table bw_table;\n\tint active_eps;\n};\n\nstruct xhci_root_port_bw_info {\n\tstruct list_head tts;\n\tunsigned int num_active_tts;\n\tstruct xhci_interval_bw_table bw_table;\n};\n\nstruct xhci_device_context_array {\n\t__le64 dev_context_ptrs[256];\n\tdma_addr_t dma;\n};\n\nenum xhci_setup_dev {\n\tSETUP_CONTEXT_ONLY = 0,\n\tSETUP_CONTEXT_ADDRESS = 1,\n};\n\nstruct xhci_td {\n\tstruct list_head td_list;\n\tstruct list_head cancelled_td_list;\n\tstruct urb *urb;\n\tstruct xhci_segment *start_seg;\n\tunion xhci_trb *first_trb;\n\tunion xhci_trb *last_trb;\n\tstruct xhci_segment *bounce_seg;\n\tbool urb_length_set;\n};\n\nstruct xhci_dequeue_state {\n\tstruct xhci_segment *new_deq_seg;\n\tunion xhci_trb *new_deq_ptr;\n\tint new_cycle_state;\n\tunsigned int stream_id;\n};\n\nstruct xhci_erst_entry {\n\t__le64 seg_addr;\n\t__le32 seg_size;\n\t__le32 rsvd;\n};\n\nstruct xhci_scratchpad {\n\tu64 *sp_array;\n\tdma_addr_t sp_dma;\n\tvoid **sp_buffers;\n};\n\nstruct urb_priv___3 {\n\tint num_tds;\n\tint num_tds_done;\n\tstruct xhci_td td[0];\n};\n\nstruct xhci_port_cap {\n\tu32 *psi;\n\tu8 psi_count;\n\tu8 psi_uid_count;\n\tu8 maj_rev;\n\tu8 min_rev;\n};\n\nstruct xhci_port {\n\t__le32 *addr;\n\tint hw_portnum;\n\tint hcd_portnum;\n\tstruct xhci_hub *rhub;\n\tstruct xhci_port_cap *port_cap;\n};\n\nstruct xhci_driver_overrides {\n\tsize_t extra_priv_size;\n\tint (*reset)(struct usb_hcd *);\n\tint (*start)(struct usb_hcd *);\n\tint (*check_bandwidth)(struct usb_hcd *, struct usb_device *);\n\tvoid (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);\n};\n\ntypedef void (*xhci_get_quirks_t)(struct device *, struct xhci_hcd *);\n\nenum xhci_ep_reset_type {\n\tEP_HARD_RESET = 0,\n\tEP_SOFT_RESET = 1,\n};\n\nstruct dbc_regs {\n\t__le32 capability;\n\t__le32 doorbell;\n\t__le32 ersts;\n\t__le32 __reserved_0;\n\t__le64 erstba;\n\t__le64 erdp;\n\t__le32 control;\n\t__le32 status;\n\t__le32 portsc;\n\t__le32 __reserved_1;\n\t__le64 dccp;\n\t__le32 devinfo1;\n\t__le32 devinfo2;\n};\n\nstruct dbc_str_descs {\n\tchar string0[64];\n\tchar manufacturer[64];\n\tchar product[64];\n\tchar serial[64];\n};\n\nenum dbc_state {\n\tDS_DISABLED = 0,\n\tDS_INITIALIZED = 1,\n\tDS_ENABLED = 2,\n\tDS_CONNECTED = 3,\n\tDS_CONFIGURED = 4,\n\tDS_STALLED = 5,\n};\n\nstruct xhci_dbc;\n\nstruct dbc_ep {\n\tstruct xhci_dbc *dbc;\n\tstruct list_head list_pending;\n\tstruct xhci_ring *ring;\n\tunsigned int direction: 1;\n};\n\nstruct dbc_driver;\n\nstruct xhci_dbc {\n\tspinlock_t lock;\n\tstruct device *dev;\n\tstruct xhci_hcd *xhci;\n\tstruct dbc_regs *regs;\n\tstruct xhci_ring *ring_evt;\n\tstruct xhci_ring *ring_in;\n\tstruct xhci_ring *ring_out;\n\tstruct xhci_erst erst;\n\tstruct xhci_container_ctx *ctx;\n\tstruct dbc_str_descs *string;\n\tdma_addr_t string_dma;\n\tsize_t string_size;\n\tenum dbc_state state;\n\tstruct delayed_work event_work;\n\tunsigned int resume_required: 1;\n\tstruct dbc_ep eps[2];\n\tconst struct dbc_driver *driver;\n\tvoid *priv;\n};\n\nstruct dbc_driver {\n\tint (*configure)(struct xhci_dbc *);\n\tvoid (*disconnect)(struct xhci_dbc *);\n};\n\nstruct dbc_request {\n\tvoid *buf;\n\tunsigned int length;\n\tdma_addr_t dma;\n\tvoid (*complete)(struct xhci_dbc *, struct dbc_request *);\n\tstruct list_head list_pool;\n\tint status;\n\tunsigned int actual;\n\tstruct xhci_dbc *dbc;\n\tstruct list_head list_pending;\n\tdma_addr_t trb_dma;\n\tunion xhci_trb *trb;\n\tunsigned int direction: 1;\n};\n\nstruct trace_event_raw_xhci_log_msg {\n\tstruct trace_entry ent;\n\tu32 __data_loc_msg;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_ctx {\n\tstruct trace_entry ent;\n\tint ctx_64;\n\tunsigned int ctx_type;\n\tdma_addr_t ctx_dma;\n\tu8 *ctx_va;\n\tunsigned int ctx_ep_num;\n\tint slot_id;\n\tu32 __data_loc_ctx_data;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_trb {\n\tstruct trace_entry ent;\n\tu32 type;\n\tu32 field0;\n\tu32 field1;\n\tu32 field2;\n\tu32 field3;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_free_virt_dev {\n\tstruct trace_entry ent;\n\tvoid *vdev;\n\tlong long unsigned int out_ctx;\n\tlong long unsigned int in_ctx;\n\tu8 fake_port;\n\tu8 real_port;\n\tu16 current_mel;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_virt_dev {\n\tstruct trace_entry ent;\n\tvoid *vdev;\n\tlong long unsigned int out_ctx;\n\tlong long unsigned int in_ctx;\n\tint devnum;\n\tint state;\n\tint speed;\n\tu8 portnum;\n\tu8 level;\n\tint slot_id;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_urb {\n\tstruct trace_entry ent;\n\tvoid *urb;\n\tunsigned int pipe;\n\tunsigned int stream;\n\tint status;\n\tunsigned int flags;\n\tint num_mapped_sgs;\n\tint num_sgs;\n\tint length;\n\tint actual;\n\tint epnum;\n\tint dir_in;\n\tint type;\n\tint slot_id;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_ep_ctx {\n\tstruct trace_entry ent;\n\tu32 info;\n\tu32 info2;\n\tu64 deq;\n\tu32 tx_info;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_slot_ctx {\n\tstruct trace_entry ent;\n\tu32 info;\n\tu32 info2;\n\tu32 tt_info;\n\tu32 state;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_ctrl_ctx {\n\tstruct trace_entry ent;\n\tu32 drop;\n\tu32 add;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_ring {\n\tstruct trace_entry ent;\n\tu32 type;\n\tvoid *ring;\n\tdma_addr_t enq;\n\tdma_addr_t deq;\n\tdma_addr_t enq_seg;\n\tdma_addr_t deq_seg;\n\tunsigned int num_segs;\n\tunsigned int stream_id;\n\tunsigned int cycle_state;\n\tunsigned int num_trbs_free;\n\tunsigned int bounce_buf_len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_portsc {\n\tstruct trace_entry ent;\n\tu32 portnum;\n\tu32 portsc;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_log_doorbell {\n\tstruct trace_entry ent;\n\tu32 slot;\n\tu32 doorbell;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_xhci_dbc_log_request {\n\tstruct trace_entry ent;\n\tstruct dbc_request *req;\n\tbool dir;\n\tunsigned int actual;\n\tunsigned int length;\n\tint status;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_xhci_log_msg {\n\tu32 msg;\n};\n\nstruct trace_event_data_offsets_xhci_log_ctx {\n\tu32 ctx_data;\n};\n\nstruct trace_event_data_offsets_xhci_log_trb {};\n\nstruct trace_event_data_offsets_xhci_log_free_virt_dev {};\n\nstruct trace_event_data_offsets_xhci_log_virt_dev {};\n\nstruct trace_event_data_offsets_xhci_log_urb {};\n\nstruct trace_event_data_offsets_xhci_log_ep_ctx {};\n\nstruct trace_event_data_offsets_xhci_log_slot_ctx {};\n\nstruct trace_event_data_offsets_xhci_log_ctrl_ctx {};\n\nstruct trace_event_data_offsets_xhci_log_ring {};\n\nstruct trace_event_data_offsets_xhci_log_portsc {};\n\nstruct trace_event_data_offsets_xhci_log_doorbell {};\n\nstruct trace_event_data_offsets_xhci_dbc_log_request {};\n\ntypedef void (*btf_trace_xhci_dbg_address)(void *, struct va_format *);\n\ntypedef void (*btf_trace_xhci_dbg_context_change)(void *, struct va_format *);\n\ntypedef void (*btf_trace_xhci_dbg_quirks)(void *, struct va_format *);\n\ntypedef void (*btf_trace_xhci_dbg_reset_ep)(void *, struct va_format *);\n\ntypedef void (*btf_trace_xhci_dbg_cancel_urb)(void *, struct va_format *);\n\ntypedef void (*btf_trace_xhci_dbg_init)(void *, struct va_format *);\n\ntypedef void (*btf_trace_xhci_dbg_ring_expansion)(void *, struct va_format *);\n\ntypedef void (*btf_trace_xhci_address_ctx)(void *, struct xhci_hcd *, struct xhci_container_ctx *, unsigned int);\n\ntypedef void (*btf_trace_xhci_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);\n\ntypedef void (*btf_trace_xhci_handle_command)(void *, struct xhci_ring *, struct xhci_generic_trb *);\n\ntypedef void (*btf_trace_xhci_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);\n\ntypedef void (*btf_trace_xhci_queue_trb)(void *, struct xhci_ring *, struct xhci_generic_trb *);\n\ntypedef void (*btf_trace_xhci_dbc_handle_event)(void *, struct xhci_ring *, struct xhci_generic_trb *);\n\ntypedef void (*btf_trace_xhci_dbc_handle_transfer)(void *, struct xhci_ring *, struct xhci_generic_trb *);\n\ntypedef void (*btf_trace_xhci_dbc_gadget_ep_queue)(void *, struct xhci_ring *, struct xhci_generic_trb *);\n\ntypedef void (*btf_trace_xhci_free_virt_device)(void *, struct xhci_virt_device *);\n\ntypedef void (*btf_trace_xhci_alloc_virt_device)(void *, struct xhci_virt_device *);\n\ntypedef void (*btf_trace_xhci_setup_device)(void *, struct xhci_virt_device *);\n\ntypedef void (*btf_trace_xhci_setup_addressable_virt_device)(void *, struct xhci_virt_device *);\n\ntypedef void (*btf_trace_xhci_stop_device)(void *, struct xhci_virt_device *);\n\ntypedef void (*btf_trace_xhci_urb_enqueue)(void *, struct urb *);\n\ntypedef void (*btf_trace_xhci_urb_giveback)(void *, struct urb *);\n\ntypedef void (*btf_trace_xhci_urb_dequeue)(void *, struct urb *);\n\ntypedef void (*btf_trace_xhci_handle_cmd_stop_ep)(void *, struct xhci_ep_ctx *);\n\ntypedef void (*btf_trace_xhci_handle_cmd_set_deq_ep)(void *, struct xhci_ep_ctx *);\n\ntypedef void (*btf_trace_xhci_handle_cmd_reset_ep)(void *, struct xhci_ep_ctx *);\n\ntypedef void (*btf_trace_xhci_handle_cmd_config_ep)(void *, struct xhci_ep_ctx *);\n\ntypedef void (*btf_trace_xhci_add_endpoint)(void *, struct xhci_ep_ctx *);\n\ntypedef void (*btf_trace_xhci_alloc_dev)(void *, struct xhci_slot_ctx *);\n\ntypedef void (*btf_trace_xhci_free_dev)(void *, struct xhci_slot_ctx *);\n\ntypedef void (*btf_trace_xhci_handle_cmd_disable_slot)(void *, struct xhci_slot_ctx *);\n\ntypedef void (*btf_trace_xhci_discover_or_reset_device)(void *, struct xhci_slot_ctx *);\n\ntypedef void (*btf_trace_xhci_setup_device_slot)(void *, struct xhci_slot_ctx *);\n\ntypedef void (*btf_trace_xhci_handle_cmd_addr_dev)(void *, struct xhci_slot_ctx *);\n\ntypedef void (*btf_trace_xhci_handle_cmd_reset_dev)(void *, struct xhci_slot_ctx *);\n\ntypedef void (*btf_trace_xhci_handle_cmd_set_deq)(void *, struct xhci_slot_ctx *);\n\ntypedef void (*btf_trace_xhci_configure_endpoint)(void *, struct xhci_slot_ctx *);\n\ntypedef void (*btf_trace_xhci_address_ctrl_ctx)(void *, struct xhci_input_control_ctx *);\n\ntypedef void (*btf_trace_xhci_configure_endpoint_ctrl_ctx)(void *, struct xhci_input_control_ctx *);\n\ntypedef void (*btf_trace_xhci_ring_alloc)(void *, struct xhci_ring *);\n\ntypedef void (*btf_trace_xhci_ring_free)(void *, struct xhci_ring *);\n\ntypedef void (*btf_trace_xhci_ring_expansion)(void *, struct xhci_ring *);\n\ntypedef void (*btf_trace_xhci_inc_enq)(void *, struct xhci_ring *);\n\ntypedef void (*btf_trace_xhci_inc_deq)(void *, struct xhci_ring *);\n\ntypedef void (*btf_trace_xhci_handle_port_status)(void *, u32, u32);\n\ntypedef void (*btf_trace_xhci_get_port_status)(void *, u32, u32);\n\ntypedef void (*btf_trace_xhci_hub_status_data)(void *, u32, u32);\n\ntypedef void (*btf_trace_xhci_ring_ep_doorbell)(void *, u32, u32);\n\ntypedef void (*btf_trace_xhci_ring_host_doorbell)(void *, u32, u32);\n\ntypedef void (*btf_trace_xhci_dbc_alloc_request)(void *, struct dbc_request *);\n\ntypedef void (*btf_trace_xhci_dbc_free_request)(void *, struct dbc_request *);\n\ntypedef void (*btf_trace_xhci_dbc_queue_request)(void *, struct dbc_request *);\n\ntypedef void (*btf_trace_xhci_dbc_giveback_request)(void *, struct dbc_request *);\n\nstruct usb_string_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__le16 wData[1];\n};\n\nstruct dbc_info_context {\n\t__le64 string0;\n\t__le64 manufacturer;\n\t__le64 product;\n\t__le64 serial;\n\t__le32 length;\n\t__le32 __reserved_0[7];\n};\n\nenum evtreturn {\n\tEVT_ERR = 4294967295,\n\tEVT_DONE = 0,\n\tEVT_GSER = 1,\n\tEVT_DISC = 2,\n};\n\nstruct kfifo {\n\tunion {\n\t\tstruct __kfifo kfifo;\n\t\tunsigned char *type;\n\t\tconst unsigned char *const_type;\n\t\tchar (*rectype)[0];\n\t\tvoid *ptr;\n\t\tconst void *ptr_const;\n\t};\n\tunsigned char buf[0];\n};\n\nstruct dbc_port {\n\tstruct tty_port port;\n\tspinlock_t port_lock;\n\tstruct list_head read_pool;\n\tstruct list_head read_queue;\n\tunsigned int n_read;\n\tstruct tasklet_struct push;\n\tstruct list_head write_pool;\n\tstruct kfifo write_fifo;\n\tbool registered;\n};\n\nstruct xhci_regset {\n\tchar name[32];\n\tstruct debugfs_regset32 regset;\n\tsize_t nregs;\n\tstruct list_head list;\n};\n\nstruct xhci_file_map {\n\tconst char *name;\n\tint (*show)(struct seq_file *, void *);\n};\n\nstruct xhci_ep_priv {\n\tchar name[32];\n\tstruct dentry *root;\n\tstruct xhci_stream_info *stream_info;\n\tstruct xhci_ring *show_ring;\n\tunsigned int stream_id;\n};\n\nstruct xhci_slot_priv {\n\tchar name[32];\n\tstruct dentry *root;\n\tstruct xhci_ep_priv *eps[31];\n\tstruct xhci_virt_device *dev;\n};\n\nstruct xhci_driver_data {\n\tu64 quirks;\n\tconst char *firmware;\n};\n\nstruct async_icount {\n\t__u32 cts;\n\t__u32 dsr;\n\t__u32 rng;\n\t__u32 dcd;\n\t__u32 tx;\n\t__u32 rx;\n\t__u32 frame;\n\t__u32 parity;\n\t__u32 overrun;\n\t__u32 brk;\n\t__u32 buf_overrun;\n};\n\nstruct usb_serial;\n\nstruct usb_serial_port {\n\tstruct usb_serial *serial;\n\tstruct tty_port port;\n\tspinlock_t lock;\n\tu32 minor;\n\tu8 port_number;\n\tunsigned char *interrupt_in_buffer;\n\tstruct urb *interrupt_in_urb;\n\t__u8 interrupt_in_endpointAddress;\n\tunsigned char *interrupt_out_buffer;\n\tint interrupt_out_size;\n\tstruct urb *interrupt_out_urb;\n\t__u8 interrupt_out_endpointAddress;\n\tunsigned char *bulk_in_buffer;\n\tint bulk_in_size;\n\tstruct urb *read_urb;\n\t__u8 bulk_in_endpointAddress;\n\tunsigned char *bulk_in_buffers[2];\n\tstruct urb *read_urbs[2];\n\tlong unsigned int read_urbs_free;\n\tunsigned char *bulk_out_buffer;\n\tint bulk_out_size;\n\tstruct urb *write_urb;\n\tstruct kfifo write_fifo;\n\tunsigned char *bulk_out_buffers[2];\n\tstruct urb *write_urbs[2];\n\tlong unsigned int write_urbs_free;\n\t__u8 bulk_out_endpointAddress;\n\tstruct async_icount icount;\n\tint tx_bytes;\n\tlong unsigned int flags;\n\tstruct work_struct work;\n\tlong unsigned int sysrq;\n\tstruct device dev;\n};\n\nstruct usb_serial_driver;\n\nstruct usb_serial {\n\tstruct usb_device *dev;\n\tstruct usb_serial_driver *type;\n\tstruct usb_interface *interface;\n\tunsigned char disconnected: 1;\n\tunsigned char suspending: 1;\n\tunsigned char attached: 1;\n\tunsigned char minors_reserved: 1;\n\tunsigned char num_ports;\n\tunsigned char num_port_pointers;\n\tunsigned char num_interrupt_in;\n\tunsigned char num_interrupt_out;\n\tunsigned char num_bulk_in;\n\tunsigned char num_bulk_out;\n\tstruct usb_serial_port *port[16];\n\tstruct kref kref;\n\tstruct mutex disc_mutex;\n\tvoid *private;\n};\n\nstruct usb_serial_endpoints;\n\nstruct usb_serial_driver {\n\tconst char *description;\n\tconst struct usb_device_id *id_table;\n\tstruct list_head driver_list;\n\tstruct device_driver driver;\n\tstruct usb_driver *usb_driver;\n\tstruct usb_dynids dynids;\n\tunsigned char num_ports;\n\tunsigned char num_bulk_in;\n\tunsigned char num_bulk_out;\n\tunsigned char num_interrupt_in;\n\tunsigned char num_interrupt_out;\n\tsize_t bulk_in_size;\n\tsize_t bulk_out_size;\n\tint (*probe)(struct usb_serial *, const struct usb_device_id *);\n\tint (*attach)(struct usb_serial *);\n\tint (*calc_num_ports)(struct usb_serial *, struct usb_serial_endpoints *);\n\tvoid (*disconnect)(struct usb_serial *);\n\tvoid (*release)(struct usb_serial *);\n\tint (*port_probe)(struct usb_serial_port *);\n\tint (*port_remove)(struct usb_serial_port *);\n\tint (*suspend)(struct usb_serial *, pm_message_t);\n\tint (*resume)(struct usb_serial *);\n\tint (*reset_resume)(struct usb_serial *);\n\tint (*open)(struct tty_struct *, struct usb_serial_port *);\n\tvoid (*close)(struct usb_serial_port *);\n\tint (*write)(struct tty_struct *, struct usb_serial_port *, const unsigned char *, int);\n\tint (*write_room)(struct tty_struct *);\n\tint (*ioctl)(struct tty_struct *, unsigned int, long unsigned int);\n\tint (*get_serial)(struct tty_struct *, struct serial_struct *);\n\tint (*set_serial)(struct tty_struct *, struct serial_struct *);\n\tvoid (*set_termios)(struct tty_struct *, struct usb_serial_port *, struct ktermios *);\n\tvoid (*break_ctl)(struct tty_struct *, int);\n\tint (*chars_in_buffer)(struct tty_struct *);\n\tvoid (*wait_until_sent)(struct tty_struct *, long int);\n\tbool (*tx_empty)(struct usb_serial_port *);\n\tvoid (*throttle)(struct tty_struct *);\n\tvoid (*unthrottle)(struct tty_struct *);\n\tint (*tiocmget)(struct tty_struct *);\n\tint (*tiocmset)(struct tty_struct *, unsigned int, unsigned int);\n\tint (*tiocmiwait)(struct tty_struct *, long unsigned int);\n\tint (*get_icount)(struct tty_struct *, struct serial_icounter_struct *);\n\tvoid (*dtr_rts)(struct usb_serial_port *, int);\n\tint (*carrier_raised)(struct usb_serial_port *);\n\tvoid (*init_termios)(struct tty_struct *);\n\tvoid (*read_int_callback)(struct urb *);\n\tvoid (*write_int_callback)(struct urb *);\n\tvoid (*read_bulk_callback)(struct urb *);\n\tvoid (*write_bulk_callback)(struct urb *);\n\tvoid (*process_read_urb)(struct urb *);\n\tint (*prepare_write_buffer)(struct usb_serial_port *, void *, size_t);\n};\n\nstruct usb_serial_endpoints {\n\tunsigned char num_bulk_in;\n\tunsigned char num_bulk_out;\n\tunsigned char num_interrupt_in;\n\tunsigned char num_interrupt_out;\n\tstruct usb_endpoint_descriptor *bulk_in[16];\n\tstruct usb_endpoint_descriptor *bulk_out[16];\n\tstruct usb_endpoint_descriptor *interrupt_in[16];\n\tstruct usb_endpoint_descriptor *interrupt_out[16];\n};\n\nstruct usbcons_info {\n\tint magic;\n\tint break_flag;\n\tstruct usb_serial_port *port;\n};\n\nstruct usb_debug_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__u8 bDebugInEndpoint;\n\t__u8 bDebugOutEndpoint;\n};\n\nstruct ehci_dev {\n\tu32 bus;\n\tu32 slot;\n\tu32 func;\n};\n\ntypedef void (*set_debug_port_t)(int);\n\nstruct usb_hcd___2;\n\nstruct xdbc_regs {\n\t__le32 capability;\n\t__le32 doorbell;\n\t__le32 ersts;\n\t__le32 __reserved_0;\n\t__le64 erstba;\n\t__le64 erdp;\n\t__le32 control;\n\t__le32 status;\n\t__le32 portsc;\n\t__le32 __reserved_1;\n\t__le64 dccp;\n\t__le32 devinfo1;\n\t__le32 devinfo2;\n};\n\nstruct xdbc_trb {\n\t__le32 field[4];\n};\n\nstruct xdbc_erst_entry {\n\t__le64 seg_addr;\n\t__le32 seg_size;\n\t__le32 __reserved_0;\n};\n\nstruct xdbc_info_context {\n\t__le64 string0;\n\t__le64 manufacturer;\n\t__le64 product;\n\t__le64 serial;\n\t__le32 length;\n\t__le32 __reserved_0[7];\n};\n\nstruct xdbc_ep_context {\n\t__le32 ep_info1;\n\t__le32 ep_info2;\n\t__le64 deq;\n\t__le32 tx_info;\n\t__le32 __reserved_0[11];\n};\n\nstruct xdbc_context {\n\tstruct xdbc_info_context info;\n\tstruct xdbc_ep_context out;\n\tstruct xdbc_ep_context in;\n};\n\nstruct xdbc_strings {\n\tchar string0[64];\n\tchar manufacturer[64];\n\tchar product[64];\n\tchar serial[64];\n};\n\nstruct xdbc_segment {\n\tstruct xdbc_trb *trbs;\n\tdma_addr_t dma;\n};\n\nstruct xdbc_ring {\n\tstruct xdbc_segment *segment;\n\tstruct xdbc_trb *enqueue;\n\tstruct xdbc_trb *dequeue;\n\tu32 cycle_state;\n};\n\nstruct xdbc_state {\n\tu16 vendor;\n\tu16 device;\n\tu32 bus;\n\tu32 dev;\n\tu32 func;\n\tvoid *xhci_base;\n\tu64 xhci_start;\n\tsize_t xhci_length;\n\tint port_number;\n\tstruct xdbc_regs *xdbc_reg;\n\tdma_addr_t table_dma;\n\tvoid *table_base;\n\tdma_addr_t erst_dma;\n\tsize_t erst_size;\n\tvoid *erst_base;\n\tstruct xdbc_ring evt_ring;\n\tstruct xdbc_segment evt_seg;\n\tdma_addr_t dbcc_dma;\n\tsize_t dbcc_size;\n\tvoid *dbcc_base;\n\tdma_addr_t string_dma;\n\tsize_t string_size;\n\tvoid *string_base;\n\tstruct xdbc_ring out_ring;\n\tstruct xdbc_segment out_seg;\n\tvoid *out_buf;\n\tdma_addr_t out_dma;\n\tstruct xdbc_ring in_ring;\n\tstruct xdbc_segment in_seg;\n\tvoid *in_buf;\n\tdma_addr_t in_dma;\n\tu32 flags;\n\traw_spinlock_t lock;\n};\n\nstruct serio_device_id {\n\t__u8 type;\n\t__u8 extra;\n\t__u8 id;\n\t__u8 proto;\n};\n\nstruct serio_driver;\n\nstruct serio {\n\tvoid *port_data;\n\tchar name[32];\n\tchar phys[32];\n\tchar firmware_id[128];\n\tbool manual_bind;\n\tstruct serio_device_id id;\n\tspinlock_t lock;\n\tint (*write)(struct serio *, unsigned char);\n\tint (*open)(struct serio *);\n\tvoid (*close)(struct serio *);\n\tint (*start)(struct serio *);\n\tvoid (*stop)(struct serio *);\n\tstruct serio *parent;\n\tstruct list_head child_node;\n\tstruct list_head children;\n\tunsigned int depth;\n\tstruct serio_driver *drv;\n\tstruct mutex drv_mutex;\n\tstruct device dev;\n\tstruct list_head node;\n\tstruct mutex *ps2_cmd_mutex;\n};\n\nstruct serio_driver {\n\tconst char *description;\n\tconst struct serio_device_id *id_table;\n\tbool manual_bind;\n\tvoid (*write_wakeup)(struct serio *);\n\tirqreturn_t (*interrupt)(struct serio *, unsigned char, unsigned int);\n\tint (*connect)(struct serio *, struct serio_driver *);\n\tint (*reconnect)(struct serio *);\n\tint (*fast_reconnect)(struct serio *);\n\tvoid (*disconnect)(struct serio *);\n\tvoid (*cleanup)(struct serio *);\n\tstruct device_driver driver;\n};\n\nenum serio_event_type {\n\tSERIO_RESCAN_PORT = 0,\n\tSERIO_RECONNECT_PORT = 1,\n\tSERIO_RECONNECT_SUBTREE = 2,\n\tSERIO_REGISTER_PORT = 3,\n\tSERIO_ATTACH_DRIVER = 4,\n};\n\nstruct serio_event {\n\tenum serio_event_type type;\n\tvoid *object;\n\tstruct module *owner;\n\tstruct list_head node;\n};\n\nenum i8042_controller_reset_mode {\n\tI8042_RESET_NEVER = 0,\n\tI8042_RESET_ALWAYS = 1,\n\tI8042_RESET_ON_S2RAM = 2,\n};\n\nstruct i8042_port {\n\tstruct serio *serio;\n\tint irq;\n\tbool exists;\n\tbool driver_bound;\n\tsigned char mux;\n};\n\nstruct serport___2 {\n\tstruct tty_struct *tty;\n\twait_queue_head_t wait;\n\tstruct serio *serio;\n\tstruct serio_device_id id;\n\tspinlock_t lock;\n\tlong unsigned int flags;\n};\n\nstruct ps2dev {\n\tstruct serio *serio;\n\tstruct mutex cmd_mutex;\n\twait_queue_head_t wait;\n\tlong unsigned int flags;\n\tu8 cmdbuf[8];\n\tu8 cmdcnt;\n\tu8 nak;\n};\n\nstruct input_mt_slot {\n\tint abs[14];\n\tunsigned int frame;\n\tunsigned int key;\n};\n\nstruct input_mt {\n\tint trkid;\n\tint num_slots;\n\tint slot;\n\tunsigned int flags;\n\tunsigned int frame;\n\tint *red;\n\tstruct input_mt_slot slots[0];\n};\n\nunion input_seq_state {\n\tstruct {\n\t\tshort unsigned int pos;\n\t\tbool mutex_acquired;\n\t};\n\tvoid *p;\n};\n\nstruct input_devres {\n\tstruct input_dev *input;\n};\n\nstruct input_event {\n\t__kernel_ulong_t __sec;\n\t__kernel_ulong_t __usec;\n\t__u16 type;\n\t__u16 code;\n\t__s32 value;\n};\n\nstruct input_event_compat {\n\tcompat_ulong_t sec;\n\tcompat_ulong_t usec;\n\t__u16 type;\n\t__u16 code;\n\t__s32 value;\n};\n\nstruct ff_periodic_effect_compat {\n\t__u16 waveform;\n\t__u16 period;\n\t__s16 magnitude;\n\t__s16 offset;\n\t__u16 phase;\n\tstruct ff_envelope envelope;\n\t__u32 custom_len;\n\tcompat_uptr_t custom_data;\n};\n\nstruct ff_effect_compat {\n\t__u16 type;\n\t__s16 id;\n\t__u16 direction;\n\tstruct ff_trigger trigger;\n\tstruct ff_replay replay;\n\tunion {\n\t\tstruct ff_constant_effect constant;\n\t\tstruct ff_ramp_effect ramp;\n\t\tstruct ff_periodic_effect_compat periodic;\n\t\tstruct ff_condition_effect condition[2];\n\t\tstruct ff_rumble_effect rumble;\n\t} u;\n};\n\nstruct input_mt_pos {\n\ts16 x;\n\ts16 y;\n};\n\nstruct input_dev_poller {\n\tvoid (*poll)(struct input_dev *);\n\tunsigned int poll_interval;\n\tunsigned int poll_interval_max;\n\tunsigned int poll_interval_min;\n\tstruct input_dev *input;\n\tstruct delayed_work work;\n};\n\nstruct led_init_data {\n\tstruct fwnode_handle *fwnode;\n\tconst char *default_label;\n\tconst char *devicename;\n\tbool devname_mandatory;\n};\n\nstruct input_led {\n\tstruct led_classdev cdev;\n\tstruct input_handle *handle;\n\tunsigned int code;\n};\n\nstruct input_leds {\n\tstruct input_handle handle;\n\tunsigned int num_leds;\n\tstruct input_led leds[0];\n};\n\nstruct mousedev_hw_data {\n\tint dx;\n\tint dy;\n\tint dz;\n\tint x;\n\tint y;\n\tint abs_event;\n\tlong unsigned int buttons;\n};\n\nstruct mousedev {\n\tint open;\n\tstruct input_handle handle;\n\twait_queue_head_t wait;\n\tstruct list_head client_list;\n\tspinlock_t client_lock;\n\tstruct mutex mutex;\n\tstruct device dev;\n\tstruct cdev cdev;\n\tbool exist;\n\tstruct list_head mixdev_node;\n\tbool opened_by_mixdev;\n\tstruct mousedev_hw_data packet;\n\tunsigned int pkt_count;\n\tint old_x[4];\n\tint old_y[4];\n\tint frac_dx;\n\tint frac_dy;\n\tlong unsigned int touch;\n\tint (*open_device)(struct mousedev *);\n\tvoid (*close_device)(struct mousedev *);\n};\n\nenum mousedev_emul {\n\tMOUSEDEV_EMUL_PS2 = 0,\n\tMOUSEDEV_EMUL_IMPS = 1,\n\tMOUSEDEV_EMUL_EXPS = 2,\n};\n\nstruct mousedev_motion {\n\tint dx;\n\tint dy;\n\tint dz;\n\tlong unsigned int buttons;\n};\n\nstruct mousedev_client {\n\tstruct fasync_struct *fasync;\n\tstruct mousedev *mousedev;\n\tstruct list_head node;\n\tstruct mousedev_motion packets[16];\n\tunsigned int head;\n\tunsigned int tail;\n\tspinlock_t packet_lock;\n\tint pos_x;\n\tint pos_y;\n\tu8 ps2[6];\n\tunsigned char ready;\n\tunsigned char buffer;\n\tunsigned char bufsiz;\n\tunsigned char imexseq;\n\tunsigned char impsseq;\n\tenum mousedev_emul mode;\n\tlong unsigned int last_buttons;\n};\n\nenum {\n\tFRACTION_DENOM = 128,\n};\n\nstruct input_mask {\n\t__u32 type;\n\t__u32 codes_size;\n\t__u64 codes_ptr;\n};\n\nstruct evdev_client;\n\nstruct evdev {\n\tint open;\n\tstruct input_handle handle;\n\tstruct evdev_client *grab;\n\tstruct list_head client_list;\n\tspinlock_t client_lock;\n\tstruct mutex mutex;\n\tstruct device dev;\n\tstruct cdev cdev;\n\tbool exist;\n};\n\nstruct evdev_client {\n\tunsigned int head;\n\tunsigned int tail;\n\tunsigned int packet_head;\n\tspinlock_t buffer_lock;\n\twait_queue_head_t wait;\n\tstruct fasync_struct *fasync;\n\tstruct evdev *evdev;\n\tstruct list_head node;\n\tenum input_clock_type clk_type;\n\tbool revoked;\n\tlong unsigned int *evmasks[32];\n\tunsigned int bufsize;\n\tstruct input_event buffer[0];\n};\n\nstruct atkbd {\n\tstruct ps2dev ps2dev;\n\tstruct input_dev *dev;\n\tchar name[64];\n\tchar phys[32];\n\tshort unsigned int id;\n\tshort unsigned int keycode[512];\n\tlong unsigned int force_release_mask[8];\n\tunsigned char set;\n\tbool translated;\n\tbool extra;\n\tbool write;\n\tbool softrepeat;\n\tbool softraw;\n\tbool scroll;\n\tbool enabled;\n\tunsigned char emul;\n\tbool resend;\n\tbool release;\n\tlong unsigned int xl_bit;\n\tunsigned int last;\n\tlong unsigned int time;\n\tlong unsigned int err_count;\n\tstruct delayed_work event_work;\n\tlong unsigned int event_jiffies;\n\tlong unsigned int event_mask;\n\tstruct mutex mutex;\n\tu32 function_row_physmap[24];\n\tint num_function_row_keys;\n};\n\nenum psmouse_state {\n\tPSMOUSE_IGNORE = 0,\n\tPSMOUSE_INITIALIZING = 1,\n\tPSMOUSE_RESYNCING = 2,\n\tPSMOUSE_CMD_MODE = 3,\n\tPSMOUSE_ACTIVATED = 4,\n};\n\ntypedef enum {\n\tPSMOUSE_BAD_DATA = 0,\n\tPSMOUSE_GOOD_DATA = 1,\n\tPSMOUSE_FULL_PACKET = 2,\n} psmouse_ret_t;\n\nenum psmouse_scale {\n\tPSMOUSE_SCALE11 = 0,\n\tPSMOUSE_SCALE21 = 1,\n};\n\nenum psmouse_type {\n\tPSMOUSE_NONE = 0,\n\tPSMOUSE_PS2 = 1,\n\tPSMOUSE_PS2PP = 2,\n\tPSMOUSE_THINKPS = 3,\n\tPSMOUSE_GENPS = 4,\n\tPSMOUSE_IMPS = 5,\n\tPSMOUSE_IMEX = 6,\n\tPSMOUSE_SYNAPTICS = 7,\n\tPSMOUSE_ALPS = 8,\n\tPSMOUSE_LIFEBOOK = 9,\n\tPSMOUSE_TRACKPOINT = 10,\n\tPSMOUSE_TOUCHKIT_PS2 = 11,\n\tPSMOUSE_CORTRON = 12,\n\tPSMOUSE_HGPK = 13,\n\tPSMOUSE_ELANTECH = 14,\n\tPSMOUSE_FSP = 15,\n\tPSMOUSE_SYNAPTICS_RELATIVE = 16,\n\tPSMOUSE_CYPRESS = 17,\n\tPSMOUSE_FOCALTECH = 18,\n\tPSMOUSE_VMMOUSE = 19,\n\tPSMOUSE_BYD = 20,\n\tPSMOUSE_SYNAPTICS_SMBUS = 21,\n\tPSMOUSE_ELANTECH_SMBUS = 22,\n\tPSMOUSE_AUTO = 23,\n};\n\nstruct psmouse;\n\nstruct psmouse_protocol {\n\tenum psmouse_type type;\n\tbool maxproto;\n\tbool ignore_parity;\n\tbool try_passthru;\n\tbool smbus_companion;\n\tconst char *name;\n\tconst char *alias;\n\tint (*detect)(struct psmouse *, bool);\n\tint (*init)(struct psmouse *);\n};\n\nstruct psmouse {\n\tvoid *private;\n\tstruct input_dev *dev;\n\tstruct ps2dev ps2dev;\n\tstruct delayed_work resync_work;\n\tconst char *vendor;\n\tconst char *name;\n\tconst struct psmouse_protocol *protocol;\n\tunsigned char packet[8];\n\tunsigned char badbyte;\n\tunsigned char pktcnt;\n\tunsigned char pktsize;\n\tunsigned char oob_data_type;\n\tunsigned char extra_buttons;\n\tbool acks_disable_command;\n\tunsigned int model;\n\tlong unsigned int last;\n\tlong unsigned int out_of_sync_cnt;\n\tlong unsigned int num_resyncs;\n\tenum psmouse_state state;\n\tchar devname[64];\n\tchar phys[32];\n\tunsigned int rate;\n\tunsigned int resolution;\n\tunsigned int resetafter;\n\tunsigned int resync_time;\n\tbool smartscroll;\n\tpsmouse_ret_t (*protocol_handler)(struct psmouse *);\n\tvoid (*set_rate)(struct psmouse *, unsigned int);\n\tvoid (*set_resolution)(struct psmouse *, unsigned int);\n\tvoid (*set_scale)(struct psmouse *, enum psmouse_scale);\n\tint (*reconnect)(struct psmouse *);\n\tint (*fast_reconnect)(struct psmouse *);\n\tvoid (*disconnect)(struct psmouse *);\n\tvoid (*cleanup)(struct psmouse *);\n\tint (*poll)(struct psmouse *);\n\tvoid (*pt_activate)(struct psmouse *);\n\tvoid (*pt_deactivate)(struct psmouse *);\n};\n\nstruct psmouse_attribute {\n\tstruct device_attribute dattr;\n\tvoid *data;\n\tssize_t (*show)(struct psmouse *, void *, char *);\n\tssize_t (*set)(struct psmouse *, void *, const char *, size_t);\n\tbool protect;\n};\n\nstruct rmi_2d_axis_alignment {\n\tbool swap_axes;\n\tbool flip_x;\n\tbool flip_y;\n\tu16 clip_x_low;\n\tu16 clip_y_low;\n\tu16 clip_x_high;\n\tu16 clip_y_high;\n\tu16 offset_x;\n\tu16 offset_y;\n\tu8 delta_x_threshold;\n\tu8 delta_y_threshold;\n};\n\nenum rmi_sensor_type {\n\trmi_sensor_default = 0,\n\trmi_sensor_touchscreen = 1,\n\trmi_sensor_touchpad = 2,\n};\n\nstruct rmi_2d_sensor_platform_data {\n\tstruct rmi_2d_axis_alignment axis_align;\n\tenum rmi_sensor_type sensor_type;\n\tint x_mm;\n\tint y_mm;\n\tint disable_report_mask;\n\tu16 rezero_wait;\n\tbool topbuttonpad;\n\tbool kernel_tracking;\n\tint dmax;\n\tint dribble;\n\tint palm_detect;\n};\n\nstruct rmi_gpio_data {\n\tbool buttonpad;\n\tbool trackstick_buttons;\n\tbool disable;\n};\n\nenum rmi_reg_state {\n\tRMI_REG_STATE_DEFAULT = 0,\n\tRMI_REG_STATE_OFF = 1,\n\tRMI_REG_STATE_ON = 2,\n};\n\nstruct rmi_f01_power_management {\n\tenum rmi_reg_state nosleep;\n\tu8 wakeup_threshold;\n\tu8 doze_holdoff;\n\tu8 doze_interval;\n};\n\nstruct rmi_device_platform_data_spi {\n\tu32 block_delay_us;\n\tu32 split_read_block_delay_us;\n\tu32 read_delay_us;\n\tu32 write_delay_us;\n\tu32 split_read_byte_delay_us;\n\tu32 pre_delay_us;\n\tu32 post_delay_us;\n\tu8 bits_per_word;\n\tu16 mode;\n\tvoid *cs_assert_data;\n\tint (*cs_assert)(const void *, const bool);\n};\n\nstruct rmi_device_platform_data {\n\tint reset_delay_ms;\n\tint irq;\n\tstruct rmi_device_platform_data_spi spi_data;\n\tstruct rmi_2d_sensor_platform_data sensor_pdata;\n\tstruct rmi_f01_power_management power_management;\n\tstruct rmi_gpio_data gpio_data;\n};\n\nenum synaptics_pkt_type {\n\tSYN_NEWABS = 0,\n\tSYN_NEWABS_STRICT = 1,\n\tSYN_NEWABS_RELAXED = 2,\n\tSYN_OLDABS = 3,\n};\n\nstruct synaptics_hw_state {\n\tint x;\n\tint y;\n\tint z;\n\tint w;\n\tunsigned int left: 1;\n\tunsigned int right: 1;\n\tunsigned int middle: 1;\n\tunsigned int up: 1;\n\tunsigned int down: 1;\n\tu8 ext_buttons;\n\ts8 scroll;\n};\n\nstruct synaptics_device_info {\n\tu32 model_id;\n\tu32 firmware_id;\n\tu32 board_id;\n\tu32 capabilities;\n\tu32 ext_cap;\n\tu32 ext_cap_0c;\n\tu32 ext_cap_10;\n\tu32 identity;\n\tu32 x_res;\n\tu32 y_res;\n\tu32 x_max;\n\tu32 y_max;\n\tu32 x_min;\n\tu32 y_min;\n};\n\nstruct synaptics_data {\n\tstruct synaptics_device_info info;\n\tenum synaptics_pkt_type pkt_type;\n\tu8 mode;\n\tint scroll;\n\tbool absolute_mode;\n\tbool disable_gesture;\n\tstruct serio *pt_port;\n\tstruct synaptics_hw_state agm;\n\tunsigned int agm_count;\n\tlong unsigned int press_start;\n\tbool press;\n\tbool report_press;\n\tbool is_forcepad;\n};\n\nstruct min_max_quirk {\n\tconst char * const *pnp_ids;\n\tstruct {\n\t\tu32 min;\n\t\tu32 max;\n\t} board_id;\n\tu32 x_min;\n\tu32 x_max;\n\tu32 y_min;\n\tu32 y_max;\n};\n\nenum {\n\tSYNAPTICS_INTERTOUCH_NOT_SET = 4294967295,\n\tSYNAPTICS_INTERTOUCH_OFF = 0,\n\tSYNAPTICS_INTERTOUCH_ON = 1,\n};\n\nstruct focaltech_finger_state {\n\tbool active;\n\tbool valid;\n\tunsigned int x;\n\tunsigned int y;\n};\n\nstruct focaltech_hw_state {\n\tstruct focaltech_finger_state fingers[5];\n\tunsigned int width;\n\tbool pressed;\n};\n\nstruct focaltech_data {\n\tunsigned int x_max;\n\tunsigned int y_max;\n\tstruct focaltech_hw_state state;\n};\n\nenum SS4_PACKET_ID {\n\tSS4_PACKET_ID_IDLE = 0,\n\tSS4_PACKET_ID_ONE = 1,\n\tSS4_PACKET_ID_TWO = 2,\n\tSS4_PACKET_ID_MULTI = 3,\n\tSS4_PACKET_ID_STICK = 4,\n};\n\nenum V7_PACKET_ID {\n\tV7_PACKET_ID_IDLE = 0,\n\tV7_PACKET_ID_TWO = 1,\n\tV7_PACKET_ID_MULTI = 2,\n\tV7_PACKET_ID_NEW = 3,\n\tV7_PACKET_ID_UNKNOWN = 4,\n};\n\nstruct alps_protocol_info {\n\tu16 version;\n\tu8 byte0;\n\tu8 mask0;\n\tunsigned int flags;\n};\n\nstruct alps_model_info {\n\tu8 signature[3];\n\tstruct alps_protocol_info protocol_info;\n};\n\nstruct alps_nibble_commands {\n\tint command;\n\tunsigned char data;\n};\n\nstruct alps_bitmap_point {\n\tint start_bit;\n\tint num_bits;\n};\n\nstruct alps_fields {\n\tunsigned int x_map;\n\tunsigned int y_map;\n\tunsigned int fingers;\n\tint pressure;\n\tstruct input_mt_pos st;\n\tstruct input_mt_pos mt[4];\n\tunsigned int first_mp: 1;\n\tunsigned int is_mp: 1;\n\tunsigned int left: 1;\n\tunsigned int right: 1;\n\tunsigned int middle: 1;\n\tunsigned int ts_left: 1;\n\tunsigned int ts_right: 1;\n\tunsigned int ts_middle: 1;\n};\n\nstruct alps_data {\n\tstruct psmouse *psmouse;\n\tstruct input_dev *dev2;\n\tstruct input_dev *dev3;\n\tchar phys2[32];\n\tchar phys3[32];\n\tstruct delayed_work dev3_register_work;\n\tconst struct alps_nibble_commands *nibble_commands;\n\tint addr_command;\n\tu16 proto_version;\n\tu8 byte0;\n\tu8 mask0;\n\tu8 dev_id[3];\n\tu8 fw_ver[3];\n\tint flags;\n\tint x_max;\n\tint y_max;\n\tint x_bits;\n\tint y_bits;\n\tunsigned int x_res;\n\tunsigned int y_res;\n\tint (*hw_init)(struct psmouse *);\n\tvoid (*process_packet)(struct psmouse *);\n\tint (*decode_fields)(struct alps_fields *, unsigned char *, struct psmouse *);\n\tvoid (*set_abs_params)(struct alps_data *, struct input_dev *);\n\tint prev_fin;\n\tint multi_packet;\n\tint second_touch;\n\tunsigned char multi_data[6];\n\tstruct alps_fields f;\n\tu8 quirks;\n\tstruct timer_list timer;\n};\n\nstruct byd_data {\n\tstruct timer_list timer;\n\tstruct psmouse *psmouse;\n\ts32 abs_x;\n\ts32 abs_y;\n\tvolatile long unsigned int last_touch_time;\n\tbool btn_left;\n\tbool btn_right;\n\tbool touch;\n};\n\nstruct finger_pos {\n\tunsigned int x;\n\tunsigned int y;\n};\n\nstruct elantech_device_info {\n\tunsigned char capabilities[3];\n\tunsigned char samples[3];\n\tunsigned char debug;\n\tunsigned char hw_version;\n\tunsigned char pattern;\n\tunsigned int fw_version;\n\tunsigned int ic_version;\n\tunsigned int product_id;\n\tunsigned int x_min;\n\tunsigned int y_min;\n\tunsigned int x_max;\n\tunsigned int y_max;\n\tunsigned int x_res;\n\tunsigned int y_res;\n\tunsigned int x_traces;\n\tunsigned int y_traces;\n\tunsigned int width;\n\tunsigned int bus;\n\tbool paritycheck;\n\tbool jumpy_cursor;\n\tbool reports_pressure;\n\tbool crc_enabled;\n\tbool set_hw_resolution;\n\tbool has_trackpoint;\n\tbool has_middle_button;\n\tint (*send_cmd)(struct psmouse *, unsigned char, unsigned char *);\n};\n\nstruct elantech_data {\n\tstruct input_dev *tp_dev;\n\tchar tp_phys[32];\n\tunsigned char reg_07;\n\tunsigned char reg_10;\n\tunsigned char reg_11;\n\tunsigned char reg_20;\n\tunsigned char reg_21;\n\tunsigned char reg_22;\n\tunsigned char reg_23;\n\tunsigned char reg_24;\n\tunsigned char reg_25;\n\tunsigned char reg_26;\n\tunsigned int single_finger_reports;\n\tunsigned int y_max;\n\tunsigned int width;\n\tstruct finger_pos mt[5];\n\tunsigned char parity[256];\n\tstruct elantech_device_info info;\n\tvoid (*original_set_rate)(struct psmouse *, unsigned int);\n};\n\nstruct elantech_attr_data {\n\tsize_t field_offset;\n\tunsigned char reg;\n};\n\nenum {\n\tELANTECH_SMBUS_NOT_SET = 4294967295,\n\tELANTECH_SMBUS_OFF = 0,\n\tELANTECH_SMBUS_ON = 1,\n};\n\nstruct ps2pp_info {\n\tu8 model;\n\tu8 kind;\n\tu16 features;\n};\n\nstruct lifebook_data {\n\tstruct input_dev *dev2;\n\tchar phys[32];\n};\n\nstruct fsp_data {\n\tunsigned char ver;\n\tunsigned char rev;\n\tunsigned int buttons;\n\tunsigned int flags;\n\tbool vscroll;\n\tbool hscroll;\n\tunsigned char last_reg;\n\tunsigned char last_val;\n\tunsigned int last_mt_fgr;\n};\n\nstruct trackpoint_data {\n\tu8 variant_id;\n\tu8 firmware_id;\n\tu8 sensitivity;\n\tu8 speed;\n\tu8 inertia;\n\tu8 reach;\n\tu8 draghys;\n\tu8 mindrag;\n\tu8 thresh;\n\tu8 upthresh;\n\tu8 ztime;\n\tu8 jenks;\n\tu8 drift_time;\n\tbool press_to_select;\n\tbool skipback;\n\tbool ext_dev;\n};\n\nstruct trackpoint_attr_data {\n\tsize_t field_offset;\n\tu8 command;\n\tu8 mask;\n\tbool inverted;\n\tu8 power_on_default;\n};\n\nstruct cytp_contact {\n\tint x;\n\tint y;\n\tint z;\n};\n\nstruct cytp_report_data {\n\tint contact_cnt;\n\tstruct cytp_contact contacts[2];\n\tunsigned int left: 1;\n\tunsigned int right: 1;\n\tunsigned int middle: 1;\n\tunsigned int tap: 1;\n};\n\nstruct cytp_data {\n\tint fw_version;\n\tint pkt_size;\n\tint mode;\n\tint tp_min_pressure;\n\tint tp_max_pressure;\n\tint tp_width;\n\tint tp_high;\n\tint tp_max_abs_x;\n\tint tp_max_abs_y;\n\tint tp_res_x;\n\tint tp_res_y;\n\tint tp_metrics_supported;\n};\n\nstruct vmmouse_data {\n\tstruct input_dev *abs_dev;\n\tchar phys[32];\n\tchar dev_name[128];\n};\n\nstruct psmouse_smbus_dev {\n\tstruct i2c_board_info board;\n\tstruct psmouse *psmouse;\n\tstruct i2c_client *client;\n\tstruct list_head node;\n\tbool dead;\n\tbool need_deactivate;\n};\n\nstruct psmouse_smbus_removal_work {\n\tstruct work_struct work;\n\tstruct i2c_client *client;\n};\n\nstruct touchscreen_properties {\n\tunsigned int max_x;\n\tunsigned int max_y;\n\tbool invert_x;\n\tbool invert_y;\n\tbool swap_x_y;\n};\n\nstruct trace_event_raw_rtc_time_alarm_class {\n\tstruct trace_entry ent;\n\ttime64_t secs;\n\tint err;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_rtc_irq_set_freq {\n\tstruct trace_entry ent;\n\tint freq;\n\tint err;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_rtc_irq_set_state {\n\tstruct trace_entry ent;\n\tint enabled;\n\tint err;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_rtc_alarm_irq_enable {\n\tstruct trace_entry ent;\n\tunsigned int enabled;\n\tint err;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_rtc_offset_class {\n\tstruct trace_entry ent;\n\tlong int offset;\n\tint err;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_rtc_timer_class {\n\tstruct trace_entry ent;\n\tstruct rtc_timer *timer;\n\tktime_t expires;\n\tktime_t period;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_rtc_time_alarm_class {};\n\nstruct trace_event_data_offsets_rtc_irq_set_freq {};\n\nstruct trace_event_data_offsets_rtc_irq_set_state {};\n\nstruct trace_event_data_offsets_rtc_alarm_irq_enable {};\n\nstruct trace_event_data_offsets_rtc_offset_class {};\n\nstruct trace_event_data_offsets_rtc_timer_class {};\n\ntypedef void (*btf_trace_rtc_set_time)(void *, time64_t, int);\n\ntypedef void (*btf_trace_rtc_read_time)(void *, time64_t, int);\n\ntypedef void (*btf_trace_rtc_set_alarm)(void *, time64_t, int);\n\ntypedef void (*btf_trace_rtc_read_alarm)(void *, time64_t, int);\n\ntypedef void (*btf_trace_rtc_irq_set_freq)(void *, int, int);\n\ntypedef void (*btf_trace_rtc_irq_set_state)(void *, int, int);\n\ntypedef void (*btf_trace_rtc_alarm_irq_enable)(void *, unsigned int, int);\n\ntypedef void (*btf_trace_rtc_set_offset)(void *, long int, int);\n\ntypedef void (*btf_trace_rtc_read_offset)(void *, long int, int);\n\ntypedef void (*btf_trace_rtc_timer_enqueue)(void *, struct rtc_timer *);\n\ntypedef void (*btf_trace_rtc_timer_dequeue)(void *, struct rtc_timer *);\n\ntypedef void (*btf_trace_rtc_timer_fired)(void *, struct rtc_timer *);\n\nenum {\n\tnone = 0,\n\tday = 1,\n\tmonth = 2,\n\tyear = 3,\n};\n\nstruct nvmem_cell_info {\n\tconst char *name;\n\tunsigned int offset;\n\tunsigned int bytes;\n\tunsigned int bit_offset;\n\tunsigned int nbits;\n};\n\ntypedef int (*nvmem_reg_read_t)(void *, unsigned int, void *, size_t);\n\ntypedef int (*nvmem_reg_write_t)(void *, unsigned int, void *, size_t);\n\nenum nvmem_type {\n\tNVMEM_TYPE_UNKNOWN = 0,\n\tNVMEM_TYPE_EEPROM = 1,\n\tNVMEM_TYPE_OTP = 2,\n\tNVMEM_TYPE_BATTERY_BACKED = 3,\n};\n\nstruct nvmem_keepout {\n\tunsigned int start;\n\tunsigned int end;\n\tunsigned char value;\n};\n\nstruct nvmem_config {\n\tstruct device *dev;\n\tconst char *name;\n\tint id;\n\tstruct module *owner;\n\tstruct gpio_desc___2 *wp_gpio;\n\tconst struct nvmem_cell_info *cells;\n\tint ncells;\n\tconst struct nvmem_keepout *keepout;\n\tunsigned int nkeepout;\n\tenum nvmem_type type;\n\tbool read_only;\n\tbool root_only;\n\tbool no_of_node;\n\tnvmem_reg_read_t reg_read;\n\tnvmem_reg_write_t reg_write;\n\tint size;\n\tint word_size;\n\tint stride;\n\tvoid *priv;\n\tbool compat;\n\tstruct device *base_dev;\n};\n\nstruct nvmem_device;\n\nstruct cmos_rtc_board_info {\n\tvoid (*wake_on)(struct device *);\n\tvoid (*wake_off)(struct device *);\n\tu32 flags;\n\tint address_space;\n\tu8 rtc_day_alarm;\n\tu8 rtc_mon_alarm;\n\tu8 rtc_century;\n};\n\nstruct cmos_rtc {\n\tstruct rtc_device *rtc;\n\tstruct device *dev;\n\tint irq;\n\tstruct resource *iomem;\n\ttime64_t alarm_expires;\n\tvoid (*wake_on)(struct device *);\n\tvoid (*wake_off)(struct device *);\n\tu8 enabled_wake;\n\tu8 suspend_ctrl;\n\tu8 day_alrm;\n\tu8 mon_alrm;\n\tu8 century;\n\tstruct rtc_wkalrm saved_wkalrm;\n};\n\nstruct i2c_devinfo {\n\tstruct list_head list;\n\tint busnum;\n\tstruct i2c_board_info board_info;\n};\n\nstruct i2c_device_identity {\n\tu16 manufacturer_id;\n\tu16 part_id;\n\tu8 die_revision;\n};\n\nstruct i2c_timings {\n\tu32 bus_freq_hz;\n\tu32 scl_rise_ns;\n\tu32 scl_fall_ns;\n\tu32 scl_int_delay_ns;\n\tu32 sda_fall_ns;\n\tu32 sda_hold_ns;\n\tu32 digital_filter_width_ns;\n\tu32 analog_filter_cutoff_freq_hz;\n};\n\nstruct trace_event_raw_i2c_write {\n\tstruct trace_entry ent;\n\tint adapter_nr;\n\t__u16 msg_nr;\n\t__u16 addr;\n\t__u16 flags;\n\t__u16 len;\n\tu32 __data_loc_buf;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_i2c_read {\n\tstruct trace_entry ent;\n\tint adapter_nr;\n\t__u16 msg_nr;\n\t__u16 addr;\n\t__u16 flags;\n\t__u16 len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_i2c_reply {\n\tstruct trace_entry ent;\n\tint adapter_nr;\n\t__u16 msg_nr;\n\t__u16 addr;\n\t__u16 flags;\n\t__u16 len;\n\tu32 __data_loc_buf;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_i2c_result {\n\tstruct trace_entry ent;\n\tint adapter_nr;\n\t__u16 nr_msgs;\n\t__s16 ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_i2c_write {\n\tu32 buf;\n};\n\nstruct trace_event_data_offsets_i2c_read {};\n\nstruct trace_event_data_offsets_i2c_reply {\n\tu32 buf;\n};\n\nstruct trace_event_data_offsets_i2c_result {};\n\ntypedef void (*btf_trace_i2c_write)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);\n\ntypedef void (*btf_trace_i2c_read)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);\n\ntypedef void (*btf_trace_i2c_reply)(void *, const struct i2c_adapter *, const struct i2c_msg *, int);\n\ntypedef void (*btf_trace_i2c_result)(void *, const struct i2c_adapter *, int, int);\n\nstruct i2c_dummy_devres {\n\tstruct i2c_client *client;\n};\n\nstruct class_compat___2;\n\nstruct i2c_cmd_arg {\n\tunsigned int cmd;\n\tvoid *arg;\n};\n\nstruct i2c_smbus_alert_setup {\n\tint irq;\n};\n\nstruct trace_event_raw_smbus_write {\n\tstruct trace_entry ent;\n\tint adapter_nr;\n\t__u16 addr;\n\t__u16 flags;\n\t__u8 command;\n\t__u8 len;\n\t__u32 protocol;\n\t__u8 buf[34];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_smbus_read {\n\tstruct trace_entry ent;\n\tint adapter_nr;\n\t__u16 flags;\n\t__u16 addr;\n\t__u8 command;\n\t__u32 protocol;\n\t__u8 buf[34];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_smbus_reply {\n\tstruct trace_entry ent;\n\tint adapter_nr;\n\t__u16 addr;\n\t__u16 flags;\n\t__u8 command;\n\t__u8 len;\n\t__u32 protocol;\n\t__u8 buf[34];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_smbus_result {\n\tstruct trace_entry ent;\n\tint adapter_nr;\n\t__u16 addr;\n\t__u16 flags;\n\t__u8 read_write;\n\t__u8 command;\n\t__s16 res;\n\t__u32 protocol;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_smbus_write {};\n\nstruct trace_event_data_offsets_smbus_read {};\n\nstruct trace_event_data_offsets_smbus_reply {};\n\nstruct trace_event_data_offsets_smbus_result {};\n\ntypedef void (*btf_trace_smbus_write)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *);\n\ntypedef void (*btf_trace_smbus_read)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int);\n\ntypedef void (*btf_trace_smbus_reply)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, const union i2c_smbus_data *, int);\n\ntypedef void (*btf_trace_smbus_result)(void *, const struct i2c_adapter *, u16, short unsigned int, char, u8, int, int);\n\nstruct i2c_acpi_handler_data {\n\tstruct acpi_connection_info info;\n\tstruct i2c_adapter *adapter;\n};\n\nstruct gsb_buffer {\n\tu8 status;\n\tu8 len;\n\tunion {\n\t\tu16 wdata;\n\t\tu8 bdata;\n\t\tu8 data[0];\n\t};\n};\n\nstruct i2c_acpi_lookup {\n\tstruct i2c_board_info *info;\n\tacpi_handle adapter_handle;\n\tacpi_handle device_handle;\n\tacpi_handle search_handle;\n\tint n;\n\tint index;\n\tu32 speed;\n\tu32 min_speed;\n\tu32 force_speed;\n};\n\nstruct dw_i2c_dev {\n\tstruct device *dev;\n\tstruct regmap *map;\n\tstruct regmap *sysmap;\n\tvoid *base;\n\tvoid *ext;\n\tstruct completion cmd_complete;\n\tstruct clk *clk;\n\tstruct clk *pclk;\n\tstruct reset_control___2 *rst;\n\tstruct i2c_client *slave;\n\tu32 (*get_clk_rate_khz)(struct dw_i2c_dev *);\n\tint cmd_err;\n\tstruct i2c_msg *msgs;\n\tint msgs_num;\n\tint msg_write_idx;\n\tu32 tx_buf_len;\n\tu8 *tx_buf;\n\tint msg_read_idx;\n\tu32 rx_buf_len;\n\tu8 *rx_buf;\n\tint msg_err;\n\tunsigned int status;\n\tu32 abort_source;\n\tint irq;\n\tu32 flags;\n\tstruct i2c_adapter adapter;\n\tu32 functionality;\n\tu32 master_cfg;\n\tu32 slave_cfg;\n\tunsigned int tx_fifo_depth;\n\tunsigned int rx_fifo_depth;\n\tint rx_outstanding;\n\tstruct i2c_timings timings;\n\tu32 sda_hold_time;\n\tu16 ss_hcnt;\n\tu16 ss_lcnt;\n\tu16 fs_hcnt;\n\tu16 fs_lcnt;\n\tu16 fp_hcnt;\n\tu16 fp_lcnt;\n\tu16 hs_hcnt;\n\tu16 hs_lcnt;\n\tint (*acquire_lock)();\n\tvoid (*release_lock)();\n\tbool shared_with_punit;\n\tvoid (*disable)(struct dw_i2c_dev *);\n\tvoid (*disable_int)(struct dw_i2c_dev *);\n\tint (*init)(struct dw_i2c_dev *);\n\tint (*set_sda_hold_time)(struct dw_i2c_dev *);\n\tint mode;\n\tstruct i2c_bus_recovery_info rinfo;\n\tbool suspended;\n};\n\nstruct dw_i2c_platform_data {\n\tunsigned int i2c_scl_freq;\n};\n\nenum dw_pci_ctl_id_t {\n\tmedfield = 0,\n\tmerrifield = 1,\n\tbaytrail = 2,\n\tcherrytrail = 3,\n\thaswell = 4,\n\telkhartlake = 5,\n};\n\nstruct dw_scl_sda_cfg {\n\tu32 ss_hcnt;\n\tu32 fs_hcnt;\n\tu32 ss_lcnt;\n\tu32 fs_lcnt;\n\tu32 sda_hold;\n};\n\nstruct dw_pci_controller {\n\tu32 bus_num;\n\tu32 flags;\n\tstruct dw_scl_sda_cfg *scl_sda_cfg;\n\tint (*setup)(struct pci_dev *, struct dw_pci_controller *);\n\tu32 (*get_clk_rate_khz)(struct dw_i2c_dev *);\n};\n\nstruct lirc_scancode {\n\t__u64 timestamp;\n\t__u16 flags;\n\t__u16 rc_proto;\n\t__u32 keycode;\n\t__u64 scancode;\n};\n\nenum rc_proto {\n\tRC_PROTO_UNKNOWN = 0,\n\tRC_PROTO_OTHER = 1,\n\tRC_PROTO_RC5 = 2,\n\tRC_PROTO_RC5X_20 = 3,\n\tRC_PROTO_RC5_SZ = 4,\n\tRC_PROTO_JVC = 5,\n\tRC_PROTO_SONY12 = 6,\n\tRC_PROTO_SONY15 = 7,\n\tRC_PROTO_SONY20 = 8,\n\tRC_PROTO_NEC = 9,\n\tRC_PROTO_NECX = 10,\n\tRC_PROTO_NEC32 = 11,\n\tRC_PROTO_SANYO = 12,\n\tRC_PROTO_MCIR2_KBD = 13,\n\tRC_PROTO_MCIR2_MSE = 14,\n\tRC_PROTO_RC6_0 = 15,\n\tRC_PROTO_RC6_6A_20 = 16,\n\tRC_PROTO_RC6_6A_24 = 17,\n\tRC_PROTO_RC6_6A_32 = 18,\n\tRC_PROTO_RC6_MCE = 19,\n\tRC_PROTO_SHARP = 20,\n\tRC_PROTO_XMP = 21,\n\tRC_PROTO_CEC = 22,\n\tRC_PROTO_IMON = 23,\n\tRC_PROTO_RCMM12 = 24,\n\tRC_PROTO_RCMM24 = 25,\n\tRC_PROTO_RCMM32 = 26,\n\tRC_PROTO_XBOX_DVD = 27,\n\tRC_PROTO_MAX = 27,\n};\n\nstruct rc_map_table {\n\tu64 scancode;\n\tu32 keycode;\n};\n\nstruct rc_map {\n\tstruct rc_map_table *scan;\n\tunsigned int size;\n\tunsigned int len;\n\tunsigned int alloc;\n\tenum rc_proto rc_proto;\n\tconst char *name;\n\tspinlock_t lock;\n};\n\nstruct rc_map_list {\n\tstruct list_head list;\n\tstruct rc_map map;\n};\n\nenum rc_driver_type {\n\tRC_DRIVER_SCANCODE = 0,\n\tRC_DRIVER_IR_RAW = 1,\n\tRC_DRIVER_IR_RAW_TX = 2,\n};\n\nstruct rc_scancode_filter {\n\tu32 data;\n\tu32 mask;\n};\n\nenum rc_filter_type {\n\tRC_FILTER_NORMAL = 0,\n\tRC_FILTER_WAKEUP = 1,\n\tRC_FILTER_MAX = 2,\n};\n\nstruct ir_raw_event_ctrl;\n\nstruct rc_dev {\n\tstruct device dev;\n\tbool managed_alloc;\n\tconst struct attribute_group *sysfs_groups[5];\n\tconst char *device_name;\n\tconst char *input_phys;\n\tstruct input_id input_id;\n\tconst char *driver_name;\n\tconst char *map_name;\n\tstruct rc_map rc_map;\n\tstruct mutex lock;\n\tunsigned int minor;\n\tstruct ir_raw_event_ctrl *raw;\n\tstruct input_dev *input_dev;\n\tenum rc_driver_type driver_type;\n\tbool idle;\n\tbool encode_wakeup;\n\tu64 allowed_protocols;\n\tu64 enabled_protocols;\n\tu64 allowed_wakeup_protocols;\n\tenum rc_proto wakeup_protocol;\n\tstruct rc_scancode_filter scancode_filter;\n\tstruct rc_scancode_filter scancode_wakeup_filter;\n\tu32 scancode_mask;\n\tu32 users;\n\tvoid *priv;\n\tspinlock_t keylock;\n\tbool keypressed;\n\tlong unsigned int keyup_jiffies;\n\tstruct timer_list timer_keyup;\n\tstruct timer_list timer_repeat;\n\tu32 last_keycode;\n\tenum rc_proto last_protocol;\n\tu64 last_scancode;\n\tu8 last_toggle;\n\tu32 timeout;\n\tu32 min_timeout;\n\tu32 max_timeout;\n\tu32 rx_resolution;\n\tu32 tx_resolution;\n\tstruct device lirc_dev;\n\tstruct cdev lirc_cdev;\n\tktime_t gap_start;\n\tu64 gap_duration;\n\tbool gap;\n\tspinlock_t lirc_fh_lock;\n\tstruct list_head lirc_fh;\n\tbool registered;\n\tint (*change_protocol)(struct rc_dev *, u64 *);\n\tint (*open)(struct rc_dev *);\n\tvoid (*close)(struct rc_dev *);\n\tint (*s_tx_mask)(struct rc_dev *, u32);\n\tint (*s_tx_carrier)(struct rc_dev *, u32);\n\tint (*s_tx_duty_cycle)(struct rc_dev *, u32);\n\tint (*s_rx_carrier_range)(struct rc_dev *, u32, u32);\n\tint (*tx_ir)(struct rc_dev *, unsigned int *, unsigned int);\n\tvoid (*s_idle)(struct rc_dev *, bool);\n\tint (*s_learning_mode)(struct rc_dev *, int);\n\tint (*s_carrier_report)(struct rc_dev *, int);\n\tint (*s_filter)(struct rc_dev *, struct rc_scancode_filter *);\n\tint (*s_wakeup_filter)(struct rc_dev *, struct rc_scancode_filter *);\n\tint (*s_timeout)(struct rc_dev *, unsigned int);\n};\n\nstruct ir_raw_event {\n\tunion {\n\t\tu32 duration;\n\t\tu32 carrier;\n\t};\n\tu8 duty_cycle;\n\tunsigned int pulse: 1;\n\tunsigned int reset: 1;\n\tunsigned int timeout: 1;\n\tunsigned int carrier_report: 1;\n};\n\nstruct nec_dec {\n\tint state;\n\tunsigned int count;\n\tu32 bits;\n\tbool is_nec_x;\n\tbool necx_repeat;\n};\n\nstruct rc5_dec {\n\tint state;\n\tu32 bits;\n\tunsigned int count;\n\tbool is_rc5x;\n};\n\nstruct rc6_dec {\n\tint state;\n\tu8 header;\n\tu32 body;\n\tbool toggle;\n\tunsigned int count;\n\tunsigned int wanted_bits;\n};\n\nstruct sony_dec {\n\tint state;\n\tu32 bits;\n\tunsigned int count;\n};\n\nstruct jvc_dec {\n\tint state;\n\tu16 bits;\n\tu16 old_bits;\n\tunsigned int count;\n\tbool first;\n\tbool toggle;\n};\n\nstruct sanyo_dec {\n\tint state;\n\tunsigned int count;\n\tu64 bits;\n};\n\nstruct sharp_dec {\n\tint state;\n\tunsigned int count;\n\tu32 bits;\n\tunsigned int pulse_len;\n};\n\nstruct mce_kbd_dec {\n\tspinlock_t keylock;\n\tstruct timer_list rx_timeout;\n\tint state;\n\tu8 header;\n\tu32 body;\n\tunsigned int count;\n\tunsigned int wanted_bits;\n};\n\nstruct xmp_dec {\n\tint state;\n\tunsigned int count;\n\tu32 durations[16];\n};\n\nstruct imon_dec {\n\tint state;\n\tint count;\n\tint last_chk;\n\tunsigned int bits;\n\tbool stick_keyboard;\n};\n\nstruct rcmm_dec {\n\tint state;\n\tunsigned int count;\n\tu32 bits;\n};\n\nstruct ir_raw_event_ctrl {\n\tstruct list_head list;\n\tstruct task_struct *thread;\n\tstruct {\n\t\tunion {\n\t\t\tstruct __kfifo kfifo;\n\t\t\tstruct ir_raw_event *type;\n\t\t\tconst struct ir_raw_event *const_type;\n\t\t\tchar (*rectype)[0];\n\t\t\tstruct ir_raw_event *ptr;\n\t\t\tconst struct ir_raw_event *ptr_const;\n\t\t};\n\t\tstruct ir_raw_event buf[512];\n\t} kfifo;\n\tktime_t last_event;\n\tstruct rc_dev *dev;\n\tspinlock_t edge_spinlock;\n\tstruct timer_list edge_handle;\n\tstruct ir_raw_event prev_ev;\n\tstruct ir_raw_event this_ev;\n\tu32 bpf_sample;\n\tstruct bpf_prog_array *progs;\n\tstruct nec_dec nec;\n\tstruct rc5_dec rc5;\n\tstruct rc6_dec rc6;\n\tstruct sony_dec sony;\n\tstruct jvc_dec jvc;\n\tstruct sanyo_dec sanyo;\n\tstruct sharp_dec sharp;\n\tstruct mce_kbd_dec mce_kbd;\n\tstruct xmp_dec xmp;\n\tstruct imon_dec imon;\n\tstruct rcmm_dec rcmm;\n};\n\nstruct rc_filter_attribute {\n\tstruct device_attribute attr;\n\tenum rc_filter_type type;\n\tbool mask;\n};\n\nstruct ir_raw_handler {\n\tstruct list_head list;\n\tu64 protocols;\n\tint (*decode)(struct rc_dev *, struct ir_raw_event);\n\tint (*encode)(enum rc_proto, u32, struct ir_raw_event *, unsigned int);\n\tu32 carrier;\n\tu32 min_timeout;\n\tint (*raw_register)(struct rc_dev *);\n\tint (*raw_unregister)(struct rc_dev *);\n};\n\nstruct ir_raw_timings_manchester {\n\tunsigned int leader_pulse;\n\tunsigned int leader_space;\n\tunsigned int clock;\n\tunsigned int invert: 1;\n\tunsigned int trailer_space;\n};\n\nstruct ir_raw_timings_pd {\n\tunsigned int header_pulse;\n\tunsigned int header_space;\n\tunsigned int bit_pulse;\n\tunsigned int bit_space[2];\n\tunsigned int trailer_pulse;\n\tunsigned int trailer_space;\n\tunsigned int msb_first: 1;\n};\n\nstruct ir_raw_timings_pl {\n\tunsigned int header_pulse;\n\tunsigned int bit_space;\n\tunsigned int bit_pulse[2];\n\tunsigned int trailer_space;\n\tunsigned int msb_first: 1;\n};\n\nstruct lirc_fh {\n\tstruct list_head list;\n\tstruct rc_dev *rc;\n\tint carrier_low;\n\tbool send_timeout_reports;\n\tstruct {\n\t\tunion {\n\t\t\tstruct __kfifo kfifo;\n\t\t\tunsigned int *type;\n\t\t\tconst unsigned int *const_type;\n\t\t\tchar (*rectype)[0];\n\t\t\tunsigned int *ptr;\n\t\t\tconst unsigned int *ptr_const;\n\t\t};\n\t\tunsigned int buf[0];\n\t} rawir;\n\tstruct {\n\t\tunion {\n\t\t\tstruct __kfifo kfifo;\n\t\t\tstruct lirc_scancode *type;\n\t\t\tconst struct lirc_scancode *const_type;\n\t\t\tchar (*rectype)[0];\n\t\t\tstruct lirc_scancode *ptr;\n\t\t\tconst struct lirc_scancode *ptr_const;\n\t\t};\n\t\tstruct lirc_scancode buf[0];\n\t} scancodes;\n\twait_queue_head_t wait_poll;\n\tu8 send_mode;\n\tu8 rec_mode;\n};\n\ntypedef u64 (*btf_bpf_rc_repeat)(u32 *);\n\ntypedef u64 (*btf_bpf_rc_keydown)(u32 *, u32, u64, u32);\n\ntypedef u64 (*btf_bpf_rc_pointer_rel)(u32 *, s32, s32);\n\nstruct pps_ktime {\n\t__s64 sec;\n\t__s32 nsec;\n\t__u32 flags;\n};\n\nstruct pps_ktime_compat {\n\t__s64 sec;\n\t__s32 nsec;\n\t__u32 flags;\n};\n\nstruct pps_kinfo {\n\t__u32 assert_sequence;\n\t__u32 clear_sequence;\n\tstruct pps_ktime assert_tu;\n\tstruct pps_ktime clear_tu;\n\tint current_mode;\n};\n\nstruct pps_kinfo_compat {\n\t__u32 assert_sequence;\n\t__u32 clear_sequence;\n\tstruct pps_ktime_compat assert_tu;\n\tstruct pps_ktime_compat clear_tu;\n\tint current_mode;\n} __attribute__((packed));\n\nstruct pps_kparams {\n\tint api_version;\n\tint mode;\n\tstruct pps_ktime assert_off_tu;\n\tstruct pps_ktime clear_off_tu;\n};\n\nstruct pps_fdata {\n\tstruct pps_kinfo info;\n\tstruct pps_ktime timeout;\n};\n\nstruct pps_fdata_compat {\n\tstruct pps_kinfo_compat info;\n\tstruct pps_ktime_compat timeout;\n} __attribute__((packed));\n\nstruct pps_bind_args {\n\tint tsformat;\n\tint edge;\n\tint consumer;\n};\n\nstruct pps_device;\n\nstruct pps_source_info {\n\tchar name[32];\n\tchar path[32];\n\tint mode;\n\tvoid (*echo)(struct pps_device *, int, void *);\n\tstruct module *owner;\n\tstruct device *dev;\n};\n\nstruct pps_device {\n\tstruct pps_source_info info;\n\tstruct pps_kparams params;\n\t__u32 assert_sequence;\n\t__u32 clear_sequence;\n\tstruct pps_ktime assert_tu;\n\tstruct pps_ktime clear_tu;\n\tint current_mode;\n\tunsigned int last_ev;\n\twait_queue_head_t queue;\n\tunsigned int id;\n\tconst void *lookup_cookie;\n\tstruct cdev cdev;\n\tstruct device *dev;\n\tstruct fasync_struct *async_queue;\n\tspinlock_t lock;\n};\n\nstruct pps_event_time {\n\tstruct timespec64 ts_real;\n};\n\nstruct ptp_clock_time {\n\t__s64 sec;\n\t__u32 nsec;\n\t__u32 reserved;\n};\n\nstruct ptp_extts_request {\n\tunsigned int index;\n\tunsigned int flags;\n\tunsigned int rsv[2];\n};\n\nstruct ptp_perout_request {\n\tunion {\n\t\tstruct ptp_clock_time start;\n\t\tstruct ptp_clock_time phase;\n\t};\n\tstruct ptp_clock_time period;\n\tunsigned int index;\n\tunsigned int flags;\n\tunion {\n\t\tstruct ptp_clock_time on;\n\t\tunsigned int rsv[4];\n\t};\n};\n\nenum ptp_pin_function {\n\tPTP_PF_NONE = 0,\n\tPTP_PF_EXTTS = 1,\n\tPTP_PF_PEROUT = 2,\n\tPTP_PF_PHYSYNC = 3,\n};\n\nstruct ptp_pin_desc {\n\tchar name[64];\n\tunsigned int index;\n\tunsigned int func;\n\tunsigned int chan;\n\tunsigned int rsv[5];\n};\n\nstruct ptp_extts_event {\n\tstruct ptp_clock_time t;\n\tunsigned int index;\n\tunsigned int flags;\n\tunsigned int rsv[2];\n};\n\nstruct ptp_clock_request {\n\tenum {\n\t\tPTP_CLK_REQ_EXTTS = 0,\n\t\tPTP_CLK_REQ_PEROUT = 1,\n\t\tPTP_CLK_REQ_PPS = 2,\n\t} type;\n\tunion {\n\t\tstruct ptp_extts_request extts;\n\t\tstruct ptp_perout_request perout;\n\t};\n};\n\nstruct ptp_clock_info {\n\tstruct module *owner;\n\tchar name[16];\n\ts32 max_adj;\n\tint n_alarm;\n\tint n_ext_ts;\n\tint n_per_out;\n\tint n_pins;\n\tint pps;\n\tstruct ptp_pin_desc *pin_config;\n\tint (*adjfine)(struct ptp_clock_info *, long int);\n\tint (*adjfreq)(struct ptp_clock_info *, s32);\n\tint (*adjphase)(struct ptp_clock_info *, s32);\n\tint (*adjtime)(struct ptp_clock_info *, s64);\n\tint (*gettime64)(struct ptp_clock_info *, struct timespec64 *);\n\tint (*gettimex64)(struct ptp_clock_info *, struct timespec64 *, struct ptp_system_timestamp *);\n\tint (*getcrosststamp)(struct ptp_clock_info *, struct system_device_crosststamp *);\n\tint (*settime64)(struct ptp_clock_info *, const struct timespec64 *);\n\tint (*enable)(struct ptp_clock_info *, struct ptp_clock_request *, int);\n\tint (*verify)(struct ptp_clock_info *, unsigned int, enum ptp_pin_function, unsigned int);\n\tlong int (*do_aux_work)(struct ptp_clock_info *);\n};\n\nenum ptp_clock_events {\n\tPTP_CLOCK_ALARM = 0,\n\tPTP_CLOCK_EXTTS = 1,\n\tPTP_CLOCK_PPS = 2,\n\tPTP_CLOCK_PPSUSR = 3,\n};\n\nstruct ptp_clock_event {\n\tint type;\n\tint index;\n\tunion {\n\t\tu64 timestamp;\n\t\tstruct pps_event_time pps_times;\n\t};\n};\n\nstruct timestamp_event_queue {\n\tstruct ptp_extts_event buf[128];\n\tint head;\n\tint tail;\n\tspinlock_t lock;\n};\n\nstruct ptp_clock {\n\tstruct posix_clock clock;\n\tstruct device dev;\n\tstruct ptp_clock_info *info;\n\tdev_t devid;\n\tint index;\n\tstruct pps_device *pps_source;\n\tlong int dialed_frequency;\n\tstruct timestamp_event_queue tsevq;\n\tstruct mutex tsevq_mux;\n\tstruct mutex pincfg_mux;\n\twait_queue_head_t tsev_wq;\n\tint defunct;\n\tstruct device_attribute *pin_dev_attr;\n\tstruct attribute **pin_attr;\n\tstruct attribute_group pin_attr_group;\n\tconst struct attribute_group *pin_attr_groups[2];\n\tstruct kthread_worker *kworker;\n\tstruct kthread_delayed_work aux_work;\n};\n\nstruct ptp_clock_caps {\n\tint max_adj;\n\tint n_alarm;\n\tint n_ext_ts;\n\tint n_per_out;\n\tint pps;\n\tint n_pins;\n\tint cross_timestamping;\n\tint adjust_phase;\n\tint rsv[12];\n};\n\nstruct ptp_sys_offset {\n\tunsigned int n_samples;\n\tunsigned int rsv[3];\n\tstruct ptp_clock_time ts[51];\n};\n\nstruct ptp_sys_offset_extended {\n\tunsigned int n_samples;\n\tunsigned int rsv[3];\n\tstruct ptp_clock_time ts[75];\n};\n\nstruct ptp_sys_offset_precise {\n\tstruct ptp_clock_time device;\n\tstruct ptp_clock_time sys_realtime;\n\tstruct ptp_clock_time sys_monoraw;\n\tunsigned int rsv[4];\n};\n\nenum power_supply_notifier_events {\n\tPSY_EVENT_PROP_CHANGED = 0,\n};\n\nstruct power_supply_battery_ocv_table {\n\tint ocv;\n\tint capacity;\n};\n\nstruct power_supply_resistance_temp_table {\n\tint temp;\n\tint resistance;\n};\n\nstruct power_supply_battery_info {\n\tint energy_full_design_uwh;\n\tint charge_full_design_uah;\n\tint voltage_min_design_uv;\n\tint voltage_max_design_uv;\n\tint tricklecharge_current_ua;\n\tint precharge_current_ua;\n\tint precharge_voltage_max_uv;\n\tint charge_term_current_ua;\n\tint charge_restart_voltage_uv;\n\tint overvoltage_limit_uv;\n\tint constant_charge_current_max_ua;\n\tint constant_charge_voltage_max_uv;\n\tint factory_internal_resistance_uohm;\n\tint ocv_temp[20];\n\tint temp_ambient_alert_min;\n\tint temp_ambient_alert_max;\n\tint temp_alert_min;\n\tint temp_alert_max;\n\tint temp_min;\n\tint temp_max;\n\tstruct power_supply_battery_ocv_table *ocv_table[20];\n\tint ocv_table_size[20];\n\tstruct power_supply_resistance_temp_table *resist_table;\n\tint resist_table_size;\n};\n\nstruct psy_am_i_supplied_data {\n\tstruct power_supply *psy;\n\tunsigned int count;\n};\n\nenum {\n\tPOWER_SUPPLY_CHARGE_TYPE_UNKNOWN = 0,\n\tPOWER_SUPPLY_CHARGE_TYPE_NONE = 1,\n\tPOWER_SUPPLY_CHARGE_TYPE_TRICKLE = 2,\n\tPOWER_SUPPLY_CHARGE_TYPE_FAST = 3,\n\tPOWER_SUPPLY_CHARGE_TYPE_STANDARD = 4,\n\tPOWER_SUPPLY_CHARGE_TYPE_ADAPTIVE = 5,\n\tPOWER_SUPPLY_CHARGE_TYPE_CUSTOM = 6,\n\tPOWER_SUPPLY_CHARGE_TYPE_LONGLIFE = 7,\n};\n\nenum {\n\tPOWER_SUPPLY_HEALTH_UNKNOWN = 0,\n\tPOWER_SUPPLY_HEALTH_GOOD = 1,\n\tPOWER_SUPPLY_HEALTH_OVERHEAT = 2,\n\tPOWER_SUPPLY_HEALTH_DEAD = 3,\n\tPOWER_SUPPLY_HEALTH_OVERVOLTAGE = 4,\n\tPOWER_SUPPLY_HEALTH_UNSPEC_FAILURE = 5,\n\tPOWER_SUPPLY_HEALTH_COLD = 6,\n\tPOWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE = 7,\n\tPOWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE = 8,\n\tPOWER_SUPPLY_HEALTH_OVERCURRENT = 9,\n\tPOWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED = 10,\n\tPOWER_SUPPLY_HEALTH_WARM = 11,\n\tPOWER_SUPPLY_HEALTH_COOL = 12,\n\tPOWER_SUPPLY_HEALTH_HOT = 13,\n};\n\nenum {\n\tPOWER_SUPPLY_SCOPE_UNKNOWN = 0,\n\tPOWER_SUPPLY_SCOPE_SYSTEM = 1,\n\tPOWER_SUPPLY_SCOPE_DEVICE = 2,\n};\n\nstruct power_supply_attr {\n\tconst char *prop_name;\n\tchar attr_name[31];\n\tstruct device_attribute dev_attr;\n\tconst char * const *text_values;\n\tint text_values_len;\n};\n\nenum hwmon_sensor_types {\n\thwmon_chip = 0,\n\thwmon_temp = 1,\n\thwmon_in = 2,\n\thwmon_curr = 3,\n\thwmon_power = 4,\n\thwmon_energy = 5,\n\thwmon_humidity = 6,\n\thwmon_fan = 7,\n\thwmon_pwm = 8,\n\thwmon_intrusion = 9,\n\thwmon_max = 10,\n};\n\nenum hwmon_temp_attributes {\n\thwmon_temp_enable = 0,\n\thwmon_temp_input = 1,\n\thwmon_temp_type = 2,\n\thwmon_temp_lcrit = 3,\n\thwmon_temp_lcrit_hyst = 4,\n\thwmon_temp_min = 5,\n\thwmon_temp_min_hyst = 6,\n\thwmon_temp_max = 7,\n\thwmon_temp_max_hyst = 8,\n\thwmon_temp_crit = 9,\n\thwmon_temp_crit_hyst = 10,\n\thwmon_temp_emergency = 11,\n\thwmon_temp_emergency_hyst = 12,\n\thwmon_temp_alarm = 13,\n\thwmon_temp_lcrit_alarm = 14,\n\thwmon_temp_min_alarm = 15,\n\thwmon_temp_max_alarm = 16,\n\thwmon_temp_crit_alarm = 17,\n\thwmon_temp_emergency_alarm = 18,\n\thwmon_temp_fault = 19,\n\thwmon_temp_offset = 20,\n\thwmon_temp_label = 21,\n\thwmon_temp_lowest = 22,\n\thwmon_temp_highest = 23,\n\thwmon_temp_reset_history = 24,\n\thwmon_temp_rated_min = 25,\n\thwmon_temp_rated_max = 26,\n};\n\nenum hwmon_in_attributes {\n\thwmon_in_enable = 0,\n\thwmon_in_input = 1,\n\thwmon_in_min = 2,\n\thwmon_in_max = 3,\n\thwmon_in_lcrit = 4,\n\thwmon_in_crit = 5,\n\thwmon_in_average = 6,\n\thwmon_in_lowest = 7,\n\thwmon_in_highest = 8,\n\thwmon_in_reset_history = 9,\n\thwmon_in_label = 10,\n\thwmon_in_alarm = 11,\n\thwmon_in_min_alarm = 12,\n\thwmon_in_max_alarm = 13,\n\thwmon_in_lcrit_alarm = 14,\n\thwmon_in_crit_alarm = 15,\n\thwmon_in_rated_min = 16,\n\thwmon_in_rated_max = 17,\n};\n\nenum hwmon_curr_attributes {\n\thwmon_curr_enable = 0,\n\thwmon_curr_input = 1,\n\thwmon_curr_min = 2,\n\thwmon_curr_max = 3,\n\thwmon_curr_lcrit = 4,\n\thwmon_curr_crit = 5,\n\thwmon_curr_average = 6,\n\thwmon_curr_lowest = 7,\n\thwmon_curr_highest = 8,\n\thwmon_curr_reset_history = 9,\n\thwmon_curr_label = 10,\n\thwmon_curr_alarm = 11,\n\thwmon_curr_min_alarm = 12,\n\thwmon_curr_max_alarm = 13,\n\thwmon_curr_lcrit_alarm = 14,\n\thwmon_curr_crit_alarm = 15,\n\thwmon_curr_rated_min = 16,\n\thwmon_curr_rated_max = 17,\n};\n\nstruct hwmon_ops {\n\tumode_t (*is_visible)(const void *, enum hwmon_sensor_types, u32, int);\n\tint (*read)(struct device *, enum hwmon_sensor_types, u32, int, long int *);\n\tint (*read_string)(struct device *, enum hwmon_sensor_types, u32, int, const char **);\n\tint (*write)(struct device *, enum hwmon_sensor_types, u32, int, long int);\n};\n\nstruct hwmon_channel_info {\n\tenum hwmon_sensor_types type;\n\tconst u32 *config;\n};\n\nstruct hwmon_chip_info {\n\tconst struct hwmon_ops *ops;\n\tconst struct hwmon_channel_info **info;\n};\n\nstruct power_supply_hwmon {\n\tstruct power_supply *psy;\n\tlong unsigned int *props;\n};\n\nstruct hwmon_type_attr_list {\n\tconst u32 *attrs;\n\tsize_t n_attrs;\n};\n\nenum hwmon_chip_attributes {\n\thwmon_chip_temp_reset_history = 0,\n\thwmon_chip_in_reset_history = 1,\n\thwmon_chip_curr_reset_history = 2,\n\thwmon_chip_power_reset_history = 3,\n\thwmon_chip_register_tz = 4,\n\thwmon_chip_update_interval = 5,\n\thwmon_chip_alarms = 6,\n\thwmon_chip_samples = 7,\n\thwmon_chip_curr_samples = 8,\n\thwmon_chip_in_samples = 9,\n\thwmon_chip_power_samples = 10,\n\thwmon_chip_temp_samples = 11,\n};\n\nenum hwmon_power_attributes {\n\thwmon_power_enable = 0,\n\thwmon_power_average = 1,\n\thwmon_power_average_interval = 2,\n\thwmon_power_average_interval_max = 3,\n\thwmon_power_average_interval_min = 4,\n\thwmon_power_average_highest = 5,\n\thwmon_power_average_lowest = 6,\n\thwmon_power_average_max = 7,\n\thwmon_power_average_min = 8,\n\thwmon_power_input = 9,\n\thwmon_power_input_highest = 10,\n\thwmon_power_input_lowest = 11,\n\thwmon_power_reset_history = 12,\n\thwmon_power_accuracy = 13,\n\thwmon_power_cap = 14,\n\thwmon_power_cap_hyst = 15,\n\thwmon_power_cap_max = 16,\n\thwmon_power_cap_min = 17,\n\thwmon_power_min = 18,\n\thwmon_power_max = 19,\n\thwmon_power_crit = 20,\n\thwmon_power_lcrit = 21,\n\thwmon_power_label = 22,\n\thwmon_power_alarm = 23,\n\thwmon_power_cap_alarm = 24,\n\thwmon_power_min_alarm = 25,\n\thwmon_power_max_alarm = 26,\n\thwmon_power_lcrit_alarm = 27,\n\thwmon_power_crit_alarm = 28,\n\thwmon_power_rated_min = 29,\n\thwmon_power_rated_max = 30,\n};\n\nenum hwmon_energy_attributes {\n\thwmon_energy_enable = 0,\n\thwmon_energy_input = 1,\n\thwmon_energy_label = 2,\n};\n\nenum hwmon_humidity_attributes {\n\thwmon_humidity_enable = 0,\n\thwmon_humidity_input = 1,\n\thwmon_humidity_label = 2,\n\thwmon_humidity_min = 3,\n\thwmon_humidity_min_hyst = 4,\n\thwmon_humidity_max = 5,\n\thwmon_humidity_max_hyst = 6,\n\thwmon_humidity_alarm = 7,\n\thwmon_humidity_fault = 8,\n\thwmon_humidity_rated_min = 9,\n\thwmon_humidity_rated_max = 10,\n};\n\nenum hwmon_fan_attributes {\n\thwmon_fan_enable = 0,\n\thwmon_fan_input = 1,\n\thwmon_fan_label = 2,\n\thwmon_fan_min = 3,\n\thwmon_fan_max = 4,\n\thwmon_fan_div = 5,\n\thwmon_fan_pulses = 6,\n\thwmon_fan_target = 7,\n\thwmon_fan_alarm = 8,\n\thwmon_fan_min_alarm = 9,\n\thwmon_fan_max_alarm = 10,\n\thwmon_fan_fault = 11,\n};\n\nenum hwmon_pwm_attributes {\n\thwmon_pwm_input = 0,\n\thwmon_pwm_enable = 1,\n\thwmon_pwm_mode = 2,\n\thwmon_pwm_freq = 3,\n};\n\nenum hwmon_intrusion_attributes {\n\thwmon_intrusion_alarm = 0,\n\thwmon_intrusion_beep = 1,\n};\n\nstruct trace_event_raw_hwmon_attr_class {\n\tstruct trace_entry ent;\n\tint index;\n\tu32 __data_loc_attr_name;\n\tlong int val;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_hwmon_attr_show_string {\n\tstruct trace_entry ent;\n\tint index;\n\tu32 __data_loc_attr_name;\n\tu32 __data_loc_label;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_hwmon_attr_class {\n\tu32 attr_name;\n};\n\nstruct trace_event_data_offsets_hwmon_attr_show_string {\n\tu32 attr_name;\n\tu32 label;\n};\n\ntypedef void (*btf_trace_hwmon_attr_show)(void *, int, const char *, long int);\n\ntypedef void (*btf_trace_hwmon_attr_store)(void *, int, const char *, long int);\n\ntypedef void (*btf_trace_hwmon_attr_show_string)(void *, int, const char *, const char *);\n\nstruct hwmon_device {\n\tconst char *name;\n\tstruct device dev;\n\tconst struct hwmon_chip_info *chip;\n\tstruct list_head tzdata;\n\tstruct attribute_group group;\n\tconst struct attribute_group **groups;\n};\n\nstruct hwmon_device_attribute {\n\tstruct device_attribute dev_attr;\n\tconst struct hwmon_ops *ops;\n\tenum hwmon_sensor_types type;\n\tu32 attr;\n\tint index;\n\tchar name[32];\n};\n\nstruct thermal_attr {\n\tstruct device_attribute attr;\n\tchar name[20];\n};\n\nstruct trace_event_raw_thermal_temperature {\n\tstruct trace_entry ent;\n\tu32 __data_loc_thermal_zone;\n\tint id;\n\tint temp_prev;\n\tint temp;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_cdev_update {\n\tstruct trace_entry ent;\n\tu32 __data_loc_type;\n\tlong unsigned int target;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_thermal_zone_trip {\n\tstruct trace_entry ent;\n\tu32 __data_loc_thermal_zone;\n\tint id;\n\tint trip;\n\tenum thermal_trip_type trip_type;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_thermal_temperature {\n\tu32 thermal_zone;\n};\n\nstruct trace_event_data_offsets_cdev_update {\n\tu32 type;\n};\n\nstruct trace_event_data_offsets_thermal_zone_trip {\n\tu32 thermal_zone;\n};\n\ntypedef void (*btf_trace_thermal_temperature)(void *, struct thermal_zone_device *);\n\ntypedef void (*btf_trace_cdev_update)(void *, struct thermal_cooling_device *, long unsigned int);\n\ntypedef void (*btf_trace_thermal_zone_trip)(void *, struct thermal_zone_device *, int, enum thermal_trip_type);\n\nstruct thermal_instance {\n\tint id;\n\tchar name[20];\n\tstruct thermal_zone_device *tz;\n\tstruct thermal_cooling_device *cdev;\n\tint trip;\n\tbool initialized;\n\tlong unsigned int upper;\n\tlong unsigned int lower;\n\tlong unsigned int target;\n\tchar attr_name[20];\n\tstruct device_attribute attr;\n\tchar weight_attr_name[20];\n\tstruct device_attribute weight_attr;\n\tstruct list_head tz_node;\n\tstruct list_head cdev_node;\n\tunsigned int weight;\n};\n\nstruct cooling_dev_stats {\n\tspinlock_t lock;\n\tunsigned int total_trans;\n\tlong unsigned int state;\n\tlong unsigned int max_states;\n\tktime_t last_time;\n\tktime_t *time_in_state;\n\tunsigned int *trans_table;\n};\n\nstruct genl_dumpit_info {\n\tconst struct genl_family *family;\n\tstruct genl_ops op;\n\tstruct nlattr **attrs;\n};\n\nenum thermal_genl_attr {\n\tTHERMAL_GENL_ATTR_UNSPEC = 0,\n\tTHERMAL_GENL_ATTR_TZ = 1,\n\tTHERMAL_GENL_ATTR_TZ_ID = 2,\n\tTHERMAL_GENL_ATTR_TZ_TEMP = 3,\n\tTHERMAL_GENL_ATTR_TZ_TRIP = 4,\n\tTHERMAL_GENL_ATTR_TZ_TRIP_ID = 5,\n\tTHERMAL_GENL_ATTR_TZ_TRIP_TYPE = 6,\n\tTHERMAL_GENL_ATTR_TZ_TRIP_TEMP = 7,\n\tTHERMAL_GENL_ATTR_TZ_TRIP_HYST = 8,\n\tTHERMAL_GENL_ATTR_TZ_MODE = 9,\n\tTHERMAL_GENL_ATTR_TZ_NAME = 10,\n\tTHERMAL_GENL_ATTR_TZ_CDEV_WEIGHT = 11,\n\tTHERMAL_GENL_ATTR_TZ_GOV = 12,\n\tTHERMAL_GENL_ATTR_TZ_GOV_NAME = 13,\n\tTHERMAL_GENL_ATTR_CDEV = 14,\n\tTHERMAL_GENL_ATTR_CDEV_ID = 15,\n\tTHERMAL_GENL_ATTR_CDEV_CUR_STATE = 16,\n\tTHERMAL_GENL_ATTR_CDEV_MAX_STATE = 17,\n\tTHERMAL_GENL_ATTR_CDEV_NAME = 18,\n\tTHERMAL_GENL_ATTR_GOV_NAME = 19,\n\t__THERMAL_GENL_ATTR_MAX = 20,\n};\n\nenum thermal_genl_sampling {\n\tTHERMAL_GENL_SAMPLING_TEMP = 0,\n\t__THERMAL_GENL_SAMPLING_MAX = 1,\n};\n\nenum thermal_genl_event {\n\tTHERMAL_GENL_EVENT_UNSPEC = 0,\n\tTHERMAL_GENL_EVENT_TZ_CREATE = 1,\n\tTHERMAL_GENL_EVENT_TZ_DELETE = 2,\n\tTHERMAL_GENL_EVENT_TZ_DISABLE = 3,\n\tTHERMAL_GENL_EVENT_TZ_ENABLE = 4,\n\tTHERMAL_GENL_EVENT_TZ_TRIP_UP = 5,\n\tTHERMAL_GENL_EVENT_TZ_TRIP_DOWN = 6,\n\tTHERMAL_GENL_EVENT_TZ_TRIP_CHANGE = 7,\n\tTHERMAL_GENL_EVENT_TZ_TRIP_ADD = 8,\n\tTHERMAL_GENL_EVENT_TZ_TRIP_DELETE = 9,\n\tTHERMAL_GENL_EVENT_CDEV_ADD = 10,\n\tTHERMAL_GENL_EVENT_CDEV_DELETE = 11,\n\tTHERMAL_GENL_EVENT_CDEV_STATE_UPDATE = 12,\n\tTHERMAL_GENL_EVENT_TZ_GOV_CHANGE = 13,\n\t__THERMAL_GENL_EVENT_MAX = 14,\n};\n\nenum thermal_genl_cmd {\n\tTHERMAL_GENL_CMD_UNSPEC = 0,\n\tTHERMAL_GENL_CMD_TZ_GET_ID = 1,\n\tTHERMAL_GENL_CMD_TZ_GET_TRIP = 2,\n\tTHERMAL_GENL_CMD_TZ_GET_TEMP = 3,\n\tTHERMAL_GENL_CMD_TZ_GET_GOV = 4,\n\tTHERMAL_GENL_CMD_TZ_GET_MODE = 5,\n\tTHERMAL_GENL_CMD_CDEV_GET = 6,\n\t__THERMAL_GENL_CMD_MAX = 7,\n};\n\nstruct param {\n\tstruct nlattr **attrs;\n\tstruct sk_buff *msg;\n\tconst char *name;\n\tint tz_id;\n\tint cdev_id;\n\tint trip_id;\n\tint trip_temp;\n\tint trip_type;\n\tint trip_hyst;\n\tint temp;\n\tint cdev_state;\n\tint cdev_max_state;\n};\n\ntypedef int (*cb_t)(struct param *);\n\nstruct thermal_hwmon_device {\n\tchar type[20];\n\tstruct device *device;\n\tint count;\n\tstruct list_head tz_list;\n\tstruct list_head node;\n};\n\nstruct thermal_hwmon_attr {\n\tstruct device_attribute attr;\n\tchar name[16];\n};\n\nstruct thermal_hwmon_temp {\n\tstruct list_head hwmon_node;\n\tstruct thermal_zone_device *tz;\n\tstruct thermal_hwmon_attr temp_input;\n\tstruct thermal_hwmon_attr temp_crit;\n};\n\nstruct watchdog_info {\n\t__u32 options;\n\t__u32 firmware_version;\n\t__u8 identity[32];\n};\n\nstruct watchdog_device;\n\nstruct watchdog_ops {\n\tstruct module *owner;\n\tint (*start)(struct watchdog_device *);\n\tint (*stop)(struct watchdog_device *);\n\tint (*ping)(struct watchdog_device *);\n\tunsigned int (*status)(struct watchdog_device *);\n\tint (*set_timeout)(struct watchdog_device *, unsigned int);\n\tint (*set_pretimeout)(struct watchdog_device *, unsigned int);\n\tunsigned int (*get_timeleft)(struct watchdog_device *);\n\tint (*restart)(struct watchdog_device *, long unsigned int, void *);\n\tlong int (*ioctl)(struct watchdog_device *, unsigned int, long unsigned int);\n};\n\nstruct watchdog_governor;\n\nstruct watchdog_core_data;\n\nstruct watchdog_device {\n\tint id;\n\tstruct device *parent;\n\tconst struct attribute_group **groups;\n\tconst struct watchdog_info *info;\n\tconst struct watchdog_ops *ops;\n\tconst struct watchdog_governor *gov;\n\tunsigned int bootstatus;\n\tunsigned int timeout;\n\tunsigned int pretimeout;\n\tunsigned int min_timeout;\n\tunsigned int max_timeout;\n\tunsigned int min_hw_heartbeat_ms;\n\tunsigned int max_hw_heartbeat_ms;\n\tstruct notifier_block reboot_nb;\n\tstruct notifier_block restart_nb;\n\tvoid *driver_data;\n\tstruct watchdog_core_data *wd_data;\n\tlong unsigned int status;\n\tstruct list_head deferred;\n};\n\nstruct watchdog_governor {\n\tconst char name[20];\n\tvoid (*pretimeout)(struct watchdog_device *);\n};\n\nstruct watchdog_core_data {\n\tstruct device dev;\n\tstruct cdev cdev;\n\tstruct watchdog_device *wdd;\n\tstruct mutex lock;\n\tktime_t last_keepalive;\n\tktime_t last_hw_keepalive;\n\tktime_t open_deadline;\n\tstruct hrtimer timer;\n\tstruct kthread_work work;\n\tlong unsigned int status;\n};\n\nstruct mdp_device_descriptor_s {\n\t__u32 number;\n\t__u32 major;\n\t__u32 minor;\n\t__u32 raid_disk;\n\t__u32 state;\n\t__u32 reserved[27];\n};\n\ntypedef struct mdp_device_descriptor_s mdp_disk_t;\n\nstruct mdp_superblock_s {\n\t__u32 md_magic;\n\t__u32 major_version;\n\t__u32 minor_version;\n\t__u32 patch_version;\n\t__u32 gvalid_words;\n\t__u32 set_uuid0;\n\t__u32 ctime;\n\t__u32 level;\n\t__u32 size;\n\t__u32 nr_disks;\n\t__u32 raid_disks;\n\t__u32 md_minor;\n\t__u32 not_persistent;\n\t__u32 set_uuid1;\n\t__u32 set_uuid2;\n\t__u32 set_uuid3;\n\t__u32 gstate_creserved[16];\n\t__u32 utime;\n\t__u32 state;\n\t__u32 active_disks;\n\t__u32 working_disks;\n\t__u32 failed_disks;\n\t__u32 spare_disks;\n\t__u32 sb_csum;\n\t__u32 events_lo;\n\t__u32 events_hi;\n\t__u32 cp_events_lo;\n\t__u32 cp_events_hi;\n\t__u32 recovery_cp;\n\t__u64 reshape_position;\n\t__u32 new_level;\n\t__u32 delta_disks;\n\t__u32 new_layout;\n\t__u32 new_chunk;\n\t__u32 gstate_sreserved[14];\n\t__u32 layout;\n\t__u32 chunk_size;\n\t__u32 root_pv;\n\t__u32 root_block;\n\t__u32 pstate_reserved[60];\n\tmdp_disk_t disks[27];\n\t__u32 reserved[0];\n\tmdp_disk_t this_disk;\n};\n\ntypedef struct mdp_superblock_s mdp_super_t;\n\nstruct mdp_superblock_1 {\n\t__le32 magic;\n\t__le32 major_version;\n\t__le32 feature_map;\n\t__le32 pad0;\n\t__u8 set_uuid[16];\n\tchar set_name[32];\n\t__le64 ctime;\n\t__le32 level;\n\t__le32 layout;\n\t__le64 size;\n\t__le32 chunksize;\n\t__le32 raid_disks;\n\tunion {\n\t\t__le32 bitmap_offset;\n\t\tstruct {\n\t\t\t__le16 offset;\n\t\t\t__le16 size;\n\t\t} ppl;\n\t};\n\t__le32 new_level;\n\t__le64 reshape_position;\n\t__le32 delta_disks;\n\t__le32 new_layout;\n\t__le32 new_chunk;\n\t__le32 new_offset;\n\t__le64 data_offset;\n\t__le64 data_size;\n\t__le64 super_offset;\n\tunion {\n\t\t__le64 recovery_offset;\n\t\t__le64 journal_tail;\n\t};\n\t__le32 dev_number;\n\t__le32 cnt_corrected_read;\n\t__u8 device_uuid[16];\n\t__u8 devflags;\n\t__u8 bblog_shift;\n\t__le16 bblog_size;\n\t__le32 bblog_offset;\n\t__le64 utime;\n\t__le64 events;\n\t__le64 resync_offset;\n\t__le32 sb_csum;\n\t__le32 max_dev;\n\t__u8 pad3[32];\n\t__le16 dev_roles[0];\n};\n\nstruct mdu_version_s {\n\tint major;\n\tint minor;\n\tint patchlevel;\n};\n\ntypedef struct mdu_version_s mdu_version_t;\n\nstruct mdu_array_info_s {\n\tint major_version;\n\tint minor_version;\n\tint patch_version;\n\tunsigned int ctime;\n\tint level;\n\tint size;\n\tint nr_disks;\n\tint raid_disks;\n\tint md_minor;\n\tint not_persistent;\n\tunsigned int utime;\n\tint state;\n\tint active_disks;\n\tint working_disks;\n\tint failed_disks;\n\tint spare_disks;\n\tint layout;\n\tint chunk_size;\n};\n\ntypedef struct mdu_array_info_s mdu_array_info_t;\n\nstruct mdu_disk_info_s {\n\tint number;\n\tint major;\n\tint minor;\n\tint raid_disk;\n\tint state;\n};\n\ntypedef struct mdu_disk_info_s mdu_disk_info_t;\n\nstruct mdu_bitmap_file_s {\n\tchar pathname[4096];\n};\n\ntypedef struct mdu_bitmap_file_s mdu_bitmap_file_t;\n\nstruct mddev;\n\nstruct md_rdev;\n\nstruct md_cluster_operations {\n\tint (*join)(struct mddev *, int);\n\tint (*leave)(struct mddev *);\n\tint (*slot_number)(struct mddev *);\n\tint (*resync_info_update)(struct mddev *, sector_t, sector_t);\n\tvoid (*resync_info_get)(struct mddev *, sector_t *, sector_t *);\n\tint (*metadata_update_start)(struct mddev *);\n\tint (*metadata_update_finish)(struct mddev *);\n\tvoid (*metadata_update_cancel)(struct mddev *);\n\tint (*resync_start)(struct mddev *);\n\tint (*resync_finish)(struct mddev *);\n\tint (*area_resyncing)(struct mddev *, int, sector_t, sector_t);\n\tint (*add_new_disk)(struct mddev *, struct md_rdev *);\n\tvoid (*add_new_disk_cancel)(struct mddev *);\n\tint (*new_disk_ack)(struct mddev *, bool);\n\tint (*remove_disk)(struct mddev *, struct md_rdev *);\n\tvoid (*load_bitmaps)(struct mddev *, int);\n\tint (*gather_bitmaps)(struct md_rdev *);\n\tint (*resize_bitmaps)(struct mddev *, sector_t, sector_t);\n\tint (*lock_all_bitmaps)(struct mddev *);\n\tvoid (*unlock_all_bitmaps)(struct mddev *);\n\tvoid (*update_size)(struct mddev *, sector_t);\n};\n\nstruct md_cluster_info;\n\nstruct md_personality;\n\nstruct md_thread;\n\nstruct bitmap;\n\nstruct mddev {\n\tvoid *private;\n\tstruct md_personality *pers;\n\tdev_t unit;\n\tint md_minor;\n\tstruct list_head disks;\n\tlong unsigned int flags;\n\tlong unsigned int sb_flags;\n\tint suspended;\n\tatomic_t active_io;\n\tint ro;\n\tint sysfs_active;\n\tstruct gendisk *gendisk;\n\tstruct kobject kobj;\n\tint hold_active;\n\tint major_version;\n\tint minor_version;\n\tint patch_version;\n\tint persistent;\n\tint external;\n\tchar metadata_type[17];\n\tint chunk_sectors;\n\ttime64_t ctime;\n\ttime64_t utime;\n\tint level;\n\tint layout;\n\tchar clevel[16];\n\tint raid_disks;\n\tint max_disks;\n\tsector_t dev_sectors;\n\tsector_t array_sectors;\n\tint external_size;\n\t__u64 events;\n\tint can_decrease_events;\n\tchar uuid[16];\n\tsector_t reshape_position;\n\tint delta_disks;\n\tint new_level;\n\tint new_layout;\n\tint new_chunk_sectors;\n\tint reshape_backwards;\n\tstruct md_thread *thread;\n\tstruct md_thread *sync_thread;\n\tchar *last_sync_action;\n\tsector_t curr_resync;\n\tsector_t curr_resync_completed;\n\tlong unsigned int resync_mark;\n\tsector_t resync_mark_cnt;\n\tsector_t curr_mark_cnt;\n\tsector_t resync_max_sectors;\n\tatomic64_t resync_mismatches;\n\tsector_t suspend_lo;\n\tsector_t suspend_hi;\n\tint sync_speed_min;\n\tint sync_speed_max;\n\tint parallel_resync;\n\tint ok_start_degraded;\n\tlong unsigned int recovery;\n\tint recovery_disabled;\n\tint in_sync;\n\tstruct mutex open_mutex;\n\tstruct mutex reconfig_mutex;\n\tatomic_t active;\n\tatomic_t openers;\n\tint changed;\n\tint degraded;\n\tatomic_t recovery_active;\n\twait_queue_head_t recovery_wait;\n\tsector_t recovery_cp;\n\tsector_t resync_min;\n\tsector_t resync_max;\n\tstruct kernfs_node *sysfs_state;\n\tstruct kernfs_node *sysfs_action;\n\tstruct kernfs_node *sysfs_completed;\n\tstruct kernfs_node *sysfs_degraded;\n\tstruct kernfs_node *sysfs_level;\n\tstruct work_struct del_work;\n\tspinlock_t lock;\n\twait_queue_head_t sb_wait;\n\tatomic_t pending_writes;\n\tunsigned int safemode;\n\tunsigned int safemode_delay;\n\tstruct timer_list safemode_timer;\n\tstruct percpu_ref writes_pending;\n\tint sync_checkers;\n\tstruct request_queue *queue;\n\tstruct bitmap *bitmap;\n\tstruct {\n\t\tstruct file *file;\n\t\tloff_t offset;\n\t\tlong unsigned int space;\n\t\tloff_t default_offset;\n\t\tlong unsigned int default_space;\n\t\tstruct mutex mutex;\n\t\tlong unsigned int chunksize;\n\t\tlong unsigned int daemon_sleep;\n\t\tlong unsigned int max_write_behind;\n\t\tint external;\n\t\tint nodes;\n\t\tchar cluster_name[64];\n\t} bitmap_info;\n\tatomic_t max_corr_read_errors;\n\tstruct list_head all_mddevs;\n\tstruct attribute_group *to_remove;\n\tstruct bio_set bio_set;\n\tstruct bio_set sync_set;\n\tmempool_t md_io_pool;\n\tstruct bio *flush_bio;\n\tatomic_t flush_pending;\n\tktime_t start_flush;\n\tktime_t prev_flush_start;\n\tstruct work_struct flush_work;\n\tstruct work_struct event_work;\n\tmempool_t *serial_info_pool;\n\tvoid (*sync_super)(struct mddev *, struct md_rdev *);\n\tstruct md_cluster_info *cluster_info;\n\tunsigned int good_device_nr;\n\tunsigned int noio_flag;\n\tbool has_superblocks: 1;\n\tbool fail_last_dev: 1;\n\tbool serialize_policy: 1;\n};\n\nstruct serial_in_rdev;\n\nstruct md_rdev {\n\tstruct list_head same_set;\n\tsector_t sectors;\n\tstruct mddev *mddev;\n\tint last_events;\n\tstruct block_device *meta_bdev;\n\tstruct block_device *bdev;\n\tstruct page *sb_page;\n\tstruct page *bb_page;\n\tint sb_loaded;\n\t__u64 sb_events;\n\tsector_t data_offset;\n\tsector_t new_data_offset;\n\tsector_t sb_start;\n\tint sb_size;\n\tint preferred_minor;\n\tstruct kobject kobj;\n\tlong unsigned int flags;\n\twait_queue_head_t blocked_wait;\n\tint desc_nr;\n\tint raid_disk;\n\tint new_raid_disk;\n\tint saved_raid_disk;\n\tunion {\n\t\tsector_t recovery_offset;\n\t\tsector_t journal_tail;\n\t};\n\tatomic_t nr_pending;\n\tatomic_t read_errors;\n\ttime64_t last_read_error;\n\tatomic_t corrected_errors;\n\tstruct serial_in_rdev *serial;\n\tstruct work_struct del_work;\n\tstruct kernfs_node *sysfs_state;\n\tstruct kernfs_node *sysfs_unack_badblocks;\n\tstruct kernfs_node *sysfs_badblocks;\n\tstruct badblocks badblocks;\n\tstruct {\n\t\tshort int offset;\n\t\tunsigned int size;\n\t\tsector_t sector;\n\t} ppl;\n};\n\nstruct serial_in_rdev {\n\tstruct rb_root_cached serial_rb;\n\tspinlock_t serial_lock;\n\twait_queue_head_t serial_io_wait;\n};\n\nenum flag_bits {\n\tFaulty = 0,\n\tIn_sync = 1,\n\tBitmap_sync = 2,\n\tWriteMostly = 3,\n\tAutoDetected = 4,\n\tBlocked = 5,\n\tWriteErrorSeen = 6,\n\tFaultRecorded = 7,\n\tBlockedBadBlocks = 8,\n\tWantReplacement = 9,\n\tReplacement = 10,\n\tCandidate = 11,\n\tJournal = 12,\n\tClusterRemove = 13,\n\tRemoveSynchronized = 14,\n\tExternalBbl = 15,\n\tFailFast = 16,\n\tLastDev = 17,\n\tCollisionCheck = 18,\n};\n\nenum mddev_flags {\n\tMD_ARRAY_FIRST_USE = 0,\n\tMD_CLOSING = 1,\n\tMD_JOURNAL_CLEAN = 2,\n\tMD_HAS_JOURNAL = 3,\n\tMD_CLUSTER_RESYNC_LOCKED = 4,\n\tMD_FAILFAST_SUPPORTED = 5,\n\tMD_HAS_PPL = 6,\n\tMD_HAS_MULTIPLE_PPLS = 7,\n\tMD_ALLOW_SB_UPDATE = 8,\n\tMD_UPDATING_SB = 9,\n\tMD_NOT_READY = 10,\n\tMD_BROKEN = 11,\n};\n\nenum mddev_sb_flags {\n\tMD_SB_CHANGE_DEVS = 0,\n\tMD_SB_CHANGE_CLEAN = 1,\n\tMD_SB_CHANGE_PENDING = 2,\n\tMD_SB_NEED_REWRITE = 3,\n};\n\nstruct md_personality {\n\tchar *name;\n\tint level;\n\tstruct list_head list;\n\tstruct module *owner;\n\tbool (*make_request)(struct mddev *, struct bio *);\n\tint (*run)(struct mddev *);\n\tint (*start)(struct mddev *);\n\tvoid (*free)(struct mddev *, void *);\n\tvoid (*status)(struct seq_file *, struct mddev *);\n\tvoid (*error_handler)(struct mddev *, struct md_rdev *);\n\tint (*hot_add_disk)(struct mddev *, struct md_rdev *);\n\tint (*hot_remove_disk)(struct mddev *, struct md_rdev *);\n\tint (*spare_active)(struct mddev *);\n\tsector_t (*sync_request)(struct mddev *, sector_t, int *);\n\tint (*resize)(struct mddev *, sector_t);\n\tsector_t (*size)(struct mddev *, sector_t, int);\n\tint (*check_reshape)(struct mddev *);\n\tint (*start_reshape)(struct mddev *);\n\tvoid (*finish_reshape)(struct mddev *);\n\tvoid (*update_reshape_pos)(struct mddev *);\n\tvoid (*quiesce)(struct mddev *, int);\n\tvoid * (*takeover)(struct mddev *);\n\tint (*change_consistency_policy)(struct mddev *, const char *);\n};\n\nstruct md_thread {\n\tvoid (*run)(struct md_thread *);\n\tstruct mddev *mddev;\n\twait_queue_head_t wqueue;\n\tlong unsigned int flags;\n\tstruct task_struct *tsk;\n\tlong unsigned int timeout;\n\tvoid *private;\n};\n\nstruct bitmap_page;\n\nstruct bitmap_counts {\n\tspinlock_t lock;\n\tstruct bitmap_page *bp;\n\tlong unsigned int pages;\n\tlong unsigned int missing_pages;\n\tlong unsigned int chunkshift;\n\tlong unsigned int chunks;\n};\n\nstruct bitmap_storage {\n\tstruct file *file;\n\tstruct page *sb_page;\n\tstruct page **filemap;\n\tlong unsigned int *filemap_attr;\n\tlong unsigned int file_pages;\n\tlong unsigned int bytes;\n};\n\nstruct bitmap {\n\tstruct bitmap_counts counts;\n\tstruct mddev *mddev;\n\t__u64 events_cleared;\n\tint need_sync;\n\tstruct bitmap_storage storage;\n\tlong unsigned int flags;\n\tint allclean;\n\tatomic_t behind_writes;\n\tlong unsigned int behind_writes_used;\n\tlong unsigned int daemon_lastrun;\n\tlong unsigned int last_end_sync;\n\tatomic_t pending_writes;\n\twait_queue_head_t write_wait;\n\twait_queue_head_t overflow_wait;\n\twait_queue_head_t behind_wait;\n\tstruct kernfs_node *sysfs_can_clear;\n\tint cluster_slot;\n};\n\nenum recovery_flags {\n\tMD_RECOVERY_RUNNING = 0,\n\tMD_RECOVERY_SYNC = 1,\n\tMD_RECOVERY_RECOVER = 2,\n\tMD_RECOVERY_INTR = 3,\n\tMD_RECOVERY_DONE = 4,\n\tMD_RECOVERY_NEEDED = 5,\n\tMD_RECOVERY_REQUESTED = 6,\n\tMD_RECOVERY_CHECK = 7,\n\tMD_RECOVERY_RESHAPE = 8,\n\tMD_RECOVERY_FROZEN = 9,\n\tMD_RECOVERY_ERROR = 10,\n\tMD_RECOVERY_WAIT = 11,\n\tMD_RESYNCING_REMOTE = 12,\n};\n\nstruct md_sysfs_entry {\n\tstruct attribute attr;\n\tssize_t (*show)(struct mddev *, char *);\n\tssize_t (*store)(struct mddev *, const char *, size_t);\n};\n\nstruct bitmap_page {\n\tchar *map;\n\tunsigned int hijacked: 1;\n\tunsigned int pending: 1;\n\tunsigned int count: 30;\n};\n\nstruct md_io {\n\tstruct mddev *mddev;\n\tbio_end_io_t *orig_bi_end_io;\n\tvoid *orig_bi_private;\n\tlong unsigned int start_time;\n\tstruct block_device *part;\n};\n\nstruct super_type {\n\tchar *name;\n\tstruct module *owner;\n\tint (*load_super)(struct md_rdev *, struct md_rdev *, int);\n\tint (*validate_super)(struct mddev *, struct md_rdev *);\n\tvoid (*sync_super)(struct mddev *, struct md_rdev *);\n\tlong long unsigned int (*rdev_size_change)(struct md_rdev *, sector_t);\n\tint (*allow_new_offset)(struct md_rdev *, long long unsigned int);\n};\n\nstruct rdev_sysfs_entry {\n\tstruct attribute attr;\n\tssize_t (*show)(struct md_rdev *, char *);\n\tssize_t (*store)(struct md_rdev *, const char *, size_t);\n};\n\nenum array_state {\n\tclear = 0,\n\tinactive = 1,\n\tsuspended = 2,\n\treadonly = 3,\n\tread_auto = 4,\n\tclean = 5,\n\tactive = 6,\n\twrite_pending = 7,\n\tactive_idle = 8,\n\tbroken = 9,\n\tbad_word = 10,\n};\n\nstruct detected_devices_node {\n\tstruct list_head list;\n\tdev_t dev;\n};\n\ntypedef __u16 bitmap_counter_t;\n\nenum bitmap_state {\n\tBITMAP_STALE = 1,\n\tBITMAP_WRITE_ERROR = 2,\n\tBITMAP_HOSTENDIAN = 15,\n};\n\nstruct bitmap_super_s {\n\t__le32 magic;\n\t__le32 version;\n\t__u8 uuid[16];\n\t__le64 events;\n\t__le64 events_cleared;\n\t__le64 sync_size;\n\t__le32 state;\n\t__le32 chunksize;\n\t__le32 daemon_sleep;\n\t__le32 write_behind;\n\t__le32 sectors_reserved;\n\t__le32 nodes;\n\t__u8 cluster_name[64];\n\t__u8 pad[120];\n};\n\ntypedef struct bitmap_super_s bitmap_super_t;\n\nenum bitmap_page_attr {\n\tBITMAP_PAGE_DIRTY = 0,\n\tBITMAP_PAGE_PENDING = 1,\n\tBITMAP_PAGE_NEEDWRITE = 2,\n};\n\nstruct md_setup_args {\n\tint minor;\n\tint partitioned;\n\tint level;\n\tint chunk;\n\tchar *device_names;\n};\n\nstruct dm_ioctl {\n\t__u32 version[3];\n\t__u32 data_size;\n\t__u32 data_start;\n\t__u32 target_count;\n\t__s32 open_count;\n\t__u32 flags;\n\t__u32 event_nr;\n\t__u32 padding;\n\t__u64 dev;\n\tchar name[128];\n\tchar uuid[129];\n\tchar data[7];\n};\n\nstruct dm_target_spec {\n\t__u64 sector_start;\n\t__u64 length;\n\t__s32 status;\n\t__u32 next;\n\tchar target_type[16];\n};\n\nstruct dm_device {\n\tstruct dm_ioctl dmi;\n\tstruct dm_target_spec *table[256];\n\tchar *target_args_array[256];\n\tstruct list_head list;\n};\n\ntypedef enum {\n\tSTATUSTYPE_INFO = 0,\n\tSTATUSTYPE_TABLE = 1,\n} status_type_t;\n\nunion map_info___2 {\n\tvoid *ptr;\n};\n\nstruct dm_target;\n\ntypedef int (*dm_ctr_fn)(struct dm_target *, unsigned int, char **);\n\nstruct dm_table;\n\nstruct target_type;\n\nstruct dm_target {\n\tstruct dm_table *table;\n\tstruct target_type *type;\n\tsector_t begin;\n\tsector_t len;\n\tuint32_t max_io_len;\n\tunsigned int num_flush_bios;\n\tunsigned int num_discard_bios;\n\tunsigned int num_secure_erase_bios;\n\tunsigned int num_write_same_bios;\n\tunsigned int num_write_zeroes_bios;\n\tunsigned int per_io_data_size;\n\tvoid *private;\n\tchar *error;\n\tbool flush_supported: 1;\n\tbool discards_supported: 1;\n\tbool limit_swap_bios: 1;\n};\n\ntypedef void (*dm_dtr_fn)(struct dm_target *);\n\ntypedef int (*dm_map_fn)(struct dm_target *, struct bio *);\n\ntypedef int (*dm_clone_and_map_request_fn)(struct dm_target *, struct request *, union map_info___2 *, struct request **);\n\ntypedef void (*dm_release_clone_request_fn)(struct request *, union map_info___2 *);\n\ntypedef int (*dm_endio_fn)(struct dm_target *, struct bio *, blk_status_t *);\n\ntypedef int (*dm_request_endio_fn)(struct dm_target *, struct request *, blk_status_t, union map_info___2 *);\n\ntypedef void (*dm_presuspend_fn)(struct dm_target *);\n\ntypedef void (*dm_presuspend_undo_fn)(struct dm_target *);\n\ntypedef void (*dm_postsuspend_fn)(struct dm_target *);\n\ntypedef int (*dm_preresume_fn)(struct dm_target *);\n\ntypedef void (*dm_resume_fn)(struct dm_target *);\n\ntypedef void (*dm_status_fn)(struct dm_target *, status_type_t, unsigned int, char *, unsigned int);\n\ntypedef int (*dm_message_fn)(struct dm_target *, unsigned int, char **, char *, unsigned int);\n\ntypedef int (*dm_prepare_ioctl_fn)(struct dm_target *, struct block_device **);\n\nstruct dm_report_zones_args;\n\ntypedef int (*dm_report_zones_fn)(struct dm_target *, struct dm_report_zones_args *, unsigned int);\n\nstruct dm_report_zones_args {\n\tstruct dm_target *tgt;\n\tsector_t next_sector;\n\tvoid *orig_data;\n\treport_zones_cb orig_cb;\n\tunsigned int zone_idx;\n\tsector_t start;\n};\n\nstruct dm_dev;\n\ntypedef int (*iterate_devices_callout_fn)(struct dm_target *, struct dm_dev *, sector_t, sector_t, void *);\n\nstruct dm_dev {\n\tstruct block_device *bdev;\n\tstruct dax_device *dax_dev;\n\tfmode_t mode;\n\tchar name[16];\n};\n\ntypedef int (*dm_iterate_devices_fn)(struct dm_target *, iterate_devices_callout_fn, void *);\n\ntypedef void (*dm_io_hints_fn)(struct dm_target *, struct queue_limits *);\n\ntypedef int (*dm_busy_fn)(struct dm_target *);\n\ntypedef long int (*dm_dax_direct_access_fn)(struct dm_target *, long unsigned int, long int, void **, pfn_t *);\n\ntypedef size_t (*dm_dax_copy_iter_fn)(struct dm_target *, long unsigned int, void *, size_t, struct iov_iter *);\n\ntypedef int (*dm_dax_zero_page_range_fn)(struct dm_target *, long unsigned int, size_t);\n\nstruct target_type {\n\tuint64_t features;\n\tconst char *name;\n\tstruct module *module;\n\tunsigned int version[3];\n\tdm_ctr_fn ctr;\n\tdm_dtr_fn dtr;\n\tdm_map_fn map;\n\tdm_clone_and_map_request_fn clone_and_map_rq;\n\tdm_release_clone_request_fn release_clone_rq;\n\tdm_endio_fn end_io;\n\tdm_request_endio_fn rq_end_io;\n\tdm_presuspend_fn presuspend;\n\tdm_presuspend_undo_fn presuspend_undo;\n\tdm_postsuspend_fn postsuspend;\n\tdm_preresume_fn preresume;\n\tdm_resume_fn resume;\n\tdm_status_fn status;\n\tdm_message_fn message;\n\tdm_prepare_ioctl_fn prepare_ioctl;\n\tdm_report_zones_fn report_zones;\n\tdm_busy_fn busy;\n\tdm_iterate_devices_fn iterate_devices;\n\tdm_io_hints_fn io_hints;\n\tdm_dax_direct_access_fn direct_access;\n\tdm_dax_copy_iter_fn dax_copy_from_iter;\n\tdm_dax_copy_iter_fn dax_copy_to_iter;\n\tdm_dax_zero_page_range_fn dax_zero_page_range;\n\tstruct list_head list;\n};\n\nenum dm_uevent_type {\n\tDM_UEVENT_PATH_FAILED = 0,\n\tDM_UEVENT_PATH_REINSTATED = 1,\n};\n\nstruct mapped_device;\n\nstruct dm_uevent {\n\tstruct mapped_device *md;\n\tenum kobject_action action;\n\tstruct kobj_uevent_env ku_env;\n\tstruct list_head elist;\n\tchar name[128];\n\tchar uuid[129];\n};\n\nenum dm_queue_mode {\n\tDM_TYPE_NONE = 0,\n\tDM_TYPE_BIO_BASED = 1,\n\tDM_TYPE_REQUEST_BASED = 2,\n\tDM_TYPE_DAX_BIO_BASED = 3,\n};\n\nstruct mapped_device___2;\n\nstruct dm_md_mempools;\n\nstruct dm_table {\n\tstruct mapped_device___2 *md;\n\tenum dm_queue_mode type;\n\tunsigned int depth;\n\tunsigned int counts[16];\n\tsector_t *index[16];\n\tunsigned int num_targets;\n\tunsigned int num_allocated;\n\tsector_t *highs;\n\tstruct dm_target *targets;\n\tstruct target_type *immutable_target_type;\n\tbool integrity_supported: 1;\n\tbool singleton: 1;\n\tunsigned int integrity_added: 1;\n\tfmode_t mode;\n\tstruct list_head devices;\n\tvoid (*event_fn)(void *);\n\tvoid *event_context;\n\tstruct dm_md_mempools *mempools;\n};\n\nstruct dm_stats_last_position;\n\nstruct dm_stats {\n\tstruct mutex mutex;\n\tstruct list_head list;\n\tstruct dm_stats_last_position *last;\n\tsector_t last_sector;\n\tunsigned int last_rw;\n};\n\nstruct dm_stats_aux {\n\tbool merged;\n\tlong long unsigned int duration_ns;\n};\n\nstruct dm_kobject_holder {\n\tstruct kobject kobj;\n\tstruct completion completion;\n};\n\nstruct mapped_device___2 {\n\tstruct mutex suspend_lock;\n\tstruct mutex table_devices_lock;\n\tstruct list_head table_devices;\n\tvoid *map;\n\tlong unsigned int flags;\n\tstruct mutex type_lock;\n\tenum dm_queue_mode type;\n\tint numa_node_id;\n\tstruct request_queue *queue;\n\tatomic_t holders;\n\tatomic_t open_count;\n\tstruct dm_target *immutable_target;\n\tstruct target_type *immutable_target_type;\n\tchar name[16];\n\tstruct gendisk *disk;\n\tstruct dax_device *dax_dev;\n\tstruct work_struct work;\n\twait_queue_head_t wait;\n\tspinlock_t deferred_lock;\n\tstruct bio_list deferred;\n\tvoid *interface_ptr;\n\twait_queue_head_t eventq;\n\tatomic_t event_nr;\n\tatomic_t uevent_seq;\n\tstruct list_head uevent_list;\n\tspinlock_t uevent_lock;\n\tunsigned int internal_suspend_count;\n\tstruct bio_set io_bs;\n\tstruct bio_set bs;\n\tstruct workqueue_struct *wq;\n\tstruct hd_geometry geometry;\n\tstruct dm_kobject_holder kobj_holder;\n\tint swap_bios;\n\tstruct semaphore swap_bios_semaphore;\n\tstruct mutex swap_bios_lock;\n\tstruct dm_stats stats;\n\tstruct blk_mq_tag_set *tag_set;\n\tbool init_tio_pdu: 1;\n\tstruct srcu_struct io_barrier;\n};\n\nstruct dm_md_mempools {\n\tstruct bio_set bs;\n\tstruct bio_set io_bs;\n};\n\nstruct dm_io;\n\nstruct clone_info {\n\tstruct dm_table *map;\n\tstruct bio *bio;\n\tstruct dm_io *io;\n\tsector_t sector;\n\tunsigned int sector_count;\n};\n\nstruct dm_target_io {\n\tunsigned int magic;\n\tstruct dm_io *io;\n\tstruct dm_target *ti;\n\tunsigned int target_bio_nr;\n\tunsigned int *len_ptr;\n\tbool inside_dm_io;\n\tstruct bio clone;\n};\n\nstruct dm_io {\n\tunsigned int magic;\n\tstruct mapped_device___2 *md;\n\tblk_status_t status;\n\tatomic_t io_count;\n\tstruct bio *orig_bio;\n\tlong unsigned int start_time;\n\tspinlock_t endio_lock;\n\tstruct dm_stats_aux stats_aux;\n\tstruct dm_target_io tio;\n};\n\nstruct table_device {\n\tstruct list_head list;\n\trefcount_t count;\n\tstruct dm_dev dm_dev;\n};\n\nstruct dm_pr {\n\tu64 old_key;\n\tu64 new_key;\n\tu32 flags;\n\tbool fail_early;\n};\n\nstruct dm_arg_set {\n\tunsigned int argc;\n\tchar **argv;\n};\n\nstruct dm_arg {\n\tunsigned int min;\n\tunsigned int max;\n\tchar *error;\n};\n\nstruct dm_dev_internal {\n\tstruct list_head list;\n\trefcount_t count;\n\tstruct dm_dev *dm_dev;\n};\n\nenum suspend_mode {\n\tPRESUSPEND = 0,\n\tPRESUSPEND_UNDO = 1,\n\tPOSTSUSPEND = 2,\n};\n\nstruct linear_c {\n\tstruct dm_dev *dev;\n\tsector_t start;\n};\n\nstruct stripe {\n\tstruct dm_dev *dev;\n\tsector_t physical_start;\n\tatomic_t error_count;\n};\n\nstruct stripe_c {\n\tuint32_t stripes;\n\tint stripes_shift;\n\tsector_t stripe_width;\n\tuint32_t chunk_size;\n\tint chunk_size_shift;\n\tstruct dm_target *ti;\n\tstruct work_struct trigger_event;\n\tstruct stripe stripe[0];\n};\n\nstruct dm_target_deps {\n\t__u32 count;\n\t__u32 padding;\n\t__u64 dev[0];\n};\n\nstruct dm_name_list {\n\t__u64 dev;\n\t__u32 next;\n\tchar name[0];\n};\n\nstruct dm_target_versions {\n\t__u32 next;\n\t__u32 version[3];\n\tchar name[0];\n};\n\nstruct dm_target_msg {\n\t__u64 sector;\n\tchar message[0];\n};\n\nenum {\n\tDM_VERSION_CMD = 0,\n\tDM_REMOVE_ALL_CMD = 1,\n\tDM_LIST_DEVICES_CMD = 2,\n\tDM_DEV_CREATE_CMD = 3,\n\tDM_DEV_REMOVE_CMD = 4,\n\tDM_DEV_RENAME_CMD = 5,\n\tDM_DEV_SUSPEND_CMD = 6,\n\tDM_DEV_STATUS_CMD = 7,\n\tDM_DEV_WAIT_CMD = 8,\n\tDM_TABLE_LOAD_CMD = 9,\n\tDM_TABLE_CLEAR_CMD = 10,\n\tDM_TABLE_DEPS_CMD = 11,\n\tDM_TABLE_STATUS_CMD = 12,\n\tDM_LIST_VERSIONS_CMD = 13,\n\tDM_TARGET_MSG_CMD = 14,\n\tDM_DEV_SET_GEOMETRY_CMD = 15,\n\tDM_DEV_ARM_POLL_CMD = 16,\n\tDM_GET_TARGET_VERSION_CMD = 17,\n};\n\nstruct dm_file {\n\tvolatile unsigned int global_event_nr;\n};\n\nstruct hash_cell {\n\tstruct list_head name_list;\n\tstruct list_head uuid_list;\n\tchar *name;\n\tchar *uuid;\n\tstruct mapped_device___2 *md;\n\tstruct dm_table *new_map;\n};\n\nstruct vers_iter {\n\tsize_t param_size;\n\tstruct dm_target_versions *vers;\n\tstruct dm_target_versions *old_vers;\n\tchar *end;\n\tuint32_t flags;\n};\n\ntypedef int (*ioctl_fn___2)(struct file *, struct dm_ioctl *, size_t);\n\nstruct dm_io_region {\n\tstruct block_device *bdev;\n\tsector_t sector;\n\tsector_t count;\n};\n\nstruct page_list {\n\tstruct page_list *next;\n\tstruct page *page;\n};\n\ntypedef void (*io_notify_fn)(long unsigned int, void *);\n\nenum dm_io_mem_type {\n\tDM_IO_PAGE_LIST = 0,\n\tDM_IO_BIO = 1,\n\tDM_IO_VMA = 2,\n\tDM_IO_KMEM = 3,\n};\n\nstruct dm_io_memory {\n\tenum dm_io_mem_type type;\n\tunsigned int offset;\n\tunion {\n\t\tstruct page_list *pl;\n\t\tstruct bio *bio;\n\t\tvoid *vma;\n\t\tvoid *addr;\n\t} ptr;\n};\n\nstruct dm_io_notify {\n\tio_notify_fn fn;\n\tvoid *context;\n};\n\nstruct dm_io_client;\n\nstruct dm_io_request {\n\tint bi_op;\n\tint bi_op_flags;\n\tstruct dm_io_memory mem;\n\tstruct dm_io_notify notify;\n\tstruct dm_io_client *client;\n};\n\nstruct dm_io_client {\n\tmempool_t pool;\n\tstruct bio_set bios;\n};\n\nstruct io {\n\tlong unsigned int error_bits;\n\tatomic_t count;\n\tstruct dm_io_client *client;\n\tio_notify_fn callback;\n\tvoid *context;\n\tvoid *vma_invalidate_address;\n\tlong unsigned int vma_invalidate_size;\n\tlong: 64;\n};\n\nstruct dpages {\n\tvoid (*get_page)(struct dpages *, struct page **, long unsigned int *, unsigned int *);\n\tvoid (*next_page)(struct dpages *);\n\tunion {\n\t\tunsigned int context_u;\n\t\tstruct bvec_iter context_bi;\n\t};\n\tvoid *context_ptr;\n\tvoid *vma_invalidate_address;\n\tlong unsigned int vma_invalidate_size;\n};\n\nstruct sync_io {\n\tlong unsigned int error_bits;\n\tstruct completion wait;\n};\n\nstruct dm_kcopyd_throttle {\n\tunsigned int throttle;\n\tunsigned int num_io_jobs;\n\tunsigned int io_period;\n\tunsigned int total_period;\n\tunsigned int last_jiffies;\n};\n\ntypedef void (*dm_kcopyd_notify_fn)(int, long unsigned int, void *);\n\nstruct dm_kcopyd_client {\n\tstruct page_list *pages;\n\tunsigned int nr_reserved_pages;\n\tunsigned int nr_free_pages;\n\tunsigned int sub_job_size;\n\tstruct dm_io_client *io_client;\n\twait_queue_head_t destroyq;\n\tmempool_t job_pool;\n\tstruct workqueue_struct *kcopyd_wq;\n\tstruct work_struct kcopyd_work;\n\tstruct dm_kcopyd_throttle *throttle;\n\tatomic_t nr_jobs;\n\tspinlock_t job_lock;\n\tstruct list_head callback_jobs;\n\tstruct list_head complete_jobs;\n\tstruct list_head io_jobs;\n\tstruct list_head pages_jobs;\n};\n\nstruct kcopyd_job {\n\tstruct dm_kcopyd_client *kc;\n\tstruct list_head list;\n\tlong unsigned int flags;\n\tint read_err;\n\tlong unsigned int write_err;\n\tint rw;\n\tstruct dm_io_region source;\n\tunsigned int num_dests;\n\tstruct dm_io_region dests[8];\n\tstruct page_list *pages;\n\tdm_kcopyd_notify_fn fn;\n\tvoid *context;\n\tstruct mutex lock;\n\tatomic_t sub_jobs;\n\tsector_t progress;\n\tsector_t write_offset;\n\tstruct kcopyd_job *master_job;\n};\n\nstruct dm_sysfs_attr {\n\tstruct attribute attr;\n\tssize_t (*show)(struct mapped_device___2 *, char *);\n\tssize_t (*store)(struct mapped_device___2 *, const char *, size_t);\n};\n\nstruct dm_stats_last_position {\n\tsector_t last_sector;\n\tunsigned int last_rw;\n};\n\nstruct dm_stat_percpu {\n\tlong long unsigned int sectors[2];\n\tlong long unsigned int ios[2];\n\tlong long unsigned int merges[2];\n\tlong long unsigned int ticks[2];\n\tlong long unsigned int io_ticks[2];\n\tlong long unsigned int io_ticks_total;\n\tlong long unsigned int time_in_queue;\n\tlong long unsigned int *histogram;\n};\n\nstruct dm_stat_shared {\n\tatomic_t in_flight[2];\n\tlong long unsigned int stamp;\n\tstruct dm_stat_percpu tmp;\n};\n\nstruct dm_stat {\n\tstruct list_head list_entry;\n\tint id;\n\tunsigned int stat_flags;\n\tsize_t n_entries;\n\tsector_t start;\n\tsector_t end;\n\tsector_t step;\n\tunsigned int n_histogram_entries;\n\tlong long unsigned int *histogram_boundaries;\n\tconst char *program_id;\n\tconst char *aux_data;\n\tstruct callback_head callback_head;\n\tsize_t shared_alloc_size;\n\tsize_t percpu_alloc_size;\n\tsize_t histogram_alloc_size;\n\tstruct dm_stat_percpu *stat_percpu[8192];\n\tstruct dm_stat_shared stat_shared[0];\n};\n\nstruct dm_rq_target_io;\n\nstruct dm_rq_clone_bio_info {\n\tstruct bio *orig;\n\tstruct dm_rq_target_io *tio;\n\tstruct bio clone;\n};\n\nstruct dm_rq_target_io {\n\tstruct mapped_device___2 *md;\n\tstruct dm_target *ti;\n\tstruct request *orig;\n\tstruct request *clone;\n\tstruct kthread_work work;\n\tblk_status_t error;\n\tunion map_info___2 info;\n\tstruct dm_stats_aux stats_aux;\n\tlong unsigned int duration_jiffies;\n\tunsigned int n_sectors;\n\tunsigned int completed;\n};\n\nstruct dm_buffer;\n\nstruct dm_bufio_client {\n\tstruct mutex lock;\n\tstruct list_head lru[2];\n\tlong unsigned int n_buffers[2];\n\tstruct block_device *bdev;\n\tunsigned int block_size;\n\ts8 sectors_per_block_bits;\n\tvoid (*alloc_callback)(struct dm_buffer *);\n\tvoid (*write_callback)(struct dm_buffer *);\n\tstruct kmem_cache *slab_buffer;\n\tstruct kmem_cache *slab_cache;\n\tstruct dm_io_client *dm_io;\n\tstruct list_head reserved_buffers;\n\tunsigned int need_reserved_buffers;\n\tunsigned int minimum_buffers;\n\tstruct rb_root buffer_tree;\n\twait_queue_head_t free_buffer_wait;\n\tsector_t start;\n\tint async_write_error;\n\tstruct list_head client_list;\n\tstruct shrinker shrinker;\n\tstruct work_struct shrink_work;\n\tatomic_long_t need_shrink;\n};\n\nstruct dm_buffer {\n\tstruct rb_node node;\n\tstruct list_head lru_list;\n\tstruct list_head global_list;\n\tsector_t block;\n\tvoid *data;\n\tunsigned char data_mode;\n\tunsigned char list_mode;\n\tblk_status_t read_error;\n\tblk_status_t write_error;\n\tunsigned int accessed;\n\tunsigned int hold_count;\n\tlong unsigned int state;\n\tlong unsigned int last_accessed;\n\tunsigned int dirty_start;\n\tunsigned int dirty_end;\n\tunsigned int write_start;\n\tunsigned int write_end;\n\tstruct dm_bufio_client *c;\n\tstruct list_head write_list;\n\tvoid (*end_io)(struct dm_buffer *, blk_status_t);\n};\n\nenum data_mode {\n\tDATA_MODE_SLAB = 0,\n\tDATA_MODE_GET_FREE_PAGES = 1,\n\tDATA_MODE_VMALLOC = 2,\n\tDATA_MODE_LIMIT = 3,\n};\n\nenum new_flag {\n\tNF_FRESH = 0,\n\tNF_READ = 1,\n\tNF_GET = 2,\n\tNF_PREFETCH = 3,\n};\n\ntypedef sector_t chunk_t;\n\nstruct dm_exception {\n\tstruct hlist_bl_node hash_list;\n\tchunk_t old_chunk;\n\tchunk_t new_chunk;\n};\n\nstruct dm_exception_store;\n\nstruct dm_exception_store_type {\n\tconst char *name;\n\tstruct module *module;\n\tint (*ctr)(struct dm_exception_store *, char *);\n\tvoid (*dtr)(struct dm_exception_store *);\n\tint (*read_metadata)(struct dm_exception_store *, int (*)(void *, chunk_t, chunk_t), void *);\n\tint (*prepare_exception)(struct dm_exception_store *, struct dm_exception *);\n\tvoid (*commit_exception)(struct dm_exception_store *, struct dm_exception *, int, void (*)(void *, int), void *);\n\tint (*prepare_merge)(struct dm_exception_store *, chunk_t *, chunk_t *);\n\tint (*commit_merge)(struct dm_exception_store *, int);\n\tvoid (*drop_snapshot)(struct dm_exception_store *);\n\tunsigned int (*status)(struct dm_exception_store *, status_type_t, char *, unsigned int);\n\tvoid (*usage)(struct dm_exception_store *, sector_t *, sector_t *, sector_t *);\n\tstruct list_head list;\n};\n\nstruct dm_snapshot;\n\nstruct dm_exception_store {\n\tstruct dm_exception_store_type *type;\n\tstruct dm_snapshot *snap;\n\tunsigned int chunk_size;\n\tunsigned int chunk_mask;\n\tunsigned int chunk_shift;\n\tvoid *context;\n\tbool userspace_supports_overflow;\n};\n\nstruct dm_exception_table {\n\tuint32_t hash_mask;\n\tunsigned int hash_shift;\n\tstruct hlist_bl_head *table;\n};\n\nstruct dm_kcopyd_client___2;\n\nstruct dm_snapshot {\n\tstruct rw_semaphore lock;\n\tstruct dm_dev *origin;\n\tstruct dm_dev *cow;\n\tstruct dm_target *ti;\n\tstruct list_head list;\n\tint valid;\n\tint snapshot_overflowed;\n\tint active;\n\tatomic_t pending_exceptions_count;\n\tspinlock_t pe_allocation_lock;\n\tsector_t exception_start_sequence;\n\tsector_t exception_complete_sequence;\n\tstruct rb_root out_of_order_tree;\n\tmempool_t pending_pool;\n\tstruct dm_exception_table pending;\n\tstruct dm_exception_table complete;\n\tspinlock_t pe_lock;\n\tspinlock_t tracked_chunk_lock;\n\tstruct hlist_head tracked_chunk_hash[16];\n\tstruct dm_exception_store *store;\n\tunsigned int in_progress;\n\tstruct wait_queue_head in_progress_wait;\n\tstruct dm_kcopyd_client___2 *kcopyd_client;\n\tlong unsigned int state_bits;\n\tchunk_t first_merging_chunk;\n\tint num_merging_chunks;\n\tbool merge_failed: 1;\n\tbool discard_zeroes_cow: 1;\n\tbool discard_passdown_origin: 1;\n\tstruct bio_list bios_queued_during_merge;\n\tstruct bio flush_bio;\n};\n\nstruct dm_snap_pending_exception {\n\tstruct dm_exception e;\n\tstruct bio_list origin_bios;\n\tstruct bio_list snapshot_bios;\n\tstruct dm_snapshot *snap;\n\tint started;\n\tint copy_error;\n\tsector_t exception_sequence;\n\tstruct rb_node out_of_order_node;\n\tstruct bio *full_bio;\n\tbio_end_io_t *full_bio_end_io;\n};\n\nstruct dm_snap_tracked_chunk {\n\tstruct hlist_node node;\n\tchunk_t chunk;\n};\n\nstruct origin {\n\tstruct block_device *bdev;\n\tstruct list_head hash_list;\n\tstruct list_head snapshots;\n};\n\nstruct dm_origin {\n\tstruct dm_dev *dev;\n\tstruct dm_target *ti;\n\tunsigned int split_boundary;\n\tstruct list_head hash_list;\n};\n\nstruct dm_exception_table_lock {\n\tstruct hlist_bl_head *complete_slot;\n\tstruct hlist_bl_head *pending_slot;\n};\n\nstruct transient_c {\n\tsector_t next_free;\n};\n\nstruct disk_header {\n\t__le32 magic;\n\t__le32 valid;\n\t__le32 version;\n\t__le32 chunk_size;\n};\n\nstruct disk_exception {\n\t__le64 old_chunk;\n\t__le64 new_chunk;\n};\n\nstruct core_exception {\n\tuint64_t old_chunk;\n\tuint64_t new_chunk;\n};\n\nstruct commit_callback {\n\tvoid (*callback)(void *, int);\n\tvoid *context;\n};\n\nstruct pstore {\n\tstruct dm_exception_store *store;\n\tint version;\n\tint valid;\n\tuint32_t exceptions_per_area;\n\tvoid *area;\n\tvoid *zero_area;\n\tvoid *header_area;\n\tchunk_t current_area;\n\tchunk_t next_free;\n\tuint32_t current_committed;\n\tatomic_t pending_count;\n\tuint32_t callback_count;\n\tstruct commit_callback *callbacks;\n\tstruct dm_io_client *io_client;\n\tstruct workqueue_struct *metadata_wq;\n};\n\nstruct mdata_req {\n\tstruct dm_io_region *where;\n\tstruct dm_io_request *io_req;\n\tstruct work_struct work;\n\tint result;\n};\n\nstruct dm_bufio_client___2;\n\nstruct dm_buffer___2;\n\nstruct dm_bio_details {\n\tstruct gendisk *bi_disk;\n\tu8 bi_partno;\n\tint __bi_remaining;\n\tlong unsigned int bi_flags;\n\tstruct bvec_iter bi_iter;\n\tbio_end_io_t *bi_end_io;\n\tstruct bio_integrity_payload *bi_integrity;\n};\n\ntypedef sector_t region_t;\n\nstruct dm_dirty_log_type;\n\nstruct dm_dirty_log {\n\tstruct dm_dirty_log_type *type;\n\tint (*flush_callback_fn)(struct dm_target *);\n\tvoid *context;\n};\n\nstruct dm_dirty_log_type {\n\tconst char *name;\n\tstruct module *module;\n\tstruct list_head list;\n\tint (*ctr)(struct dm_dirty_log *, struct dm_target *, unsigned int, char **);\n\tvoid (*dtr)(struct dm_dirty_log *);\n\tint (*presuspend)(struct dm_dirty_log *);\n\tint (*postsuspend)(struct dm_dirty_log *);\n\tint (*resume)(struct dm_dirty_log *);\n\tuint32_t (*get_region_size)(struct dm_dirty_log *);\n\tint (*is_clean)(struct dm_dirty_log *, region_t);\n\tint (*in_sync)(struct dm_dirty_log *, region_t, int);\n\tint (*flush)(struct dm_dirty_log *);\n\tvoid (*mark_region)(struct dm_dirty_log *, region_t);\n\tvoid (*clear_region)(struct dm_dirty_log *, region_t);\n\tint (*get_resync_work)(struct dm_dirty_log *, region_t *);\n\tvoid (*set_region_sync)(struct dm_dirty_log *, region_t, int);\n\tregion_t (*get_sync_count)(struct dm_dirty_log *);\n\tint (*status)(struct dm_dirty_log *, status_type_t, char *, unsigned int);\n\tint (*is_remote_recovering)(struct dm_dirty_log *, region_t);\n};\n\nenum dm_rh_region_states {\n\tDM_RH_CLEAN = 1,\n\tDM_RH_DIRTY = 2,\n\tDM_RH_NOSYNC = 4,\n\tDM_RH_RECOVERING = 8,\n};\n\nenum dm_raid1_error {\n\tDM_RAID1_WRITE_ERROR = 0,\n\tDM_RAID1_FLUSH_ERROR = 1,\n\tDM_RAID1_SYNC_ERROR = 2,\n\tDM_RAID1_READ_ERROR = 3,\n};\n\nstruct mirror_set;\n\nstruct mirror {\n\tstruct mirror_set *ms;\n\tatomic_t error_count;\n\tlong unsigned int error_type;\n\tstruct dm_dev *dev;\n\tsector_t offset;\n};\n\nstruct dm_region_hash;\n\nstruct mirror_set {\n\tstruct dm_target *ti;\n\tstruct list_head list;\n\tuint64_t features;\n\tspinlock_t lock;\n\tstruct bio_list reads;\n\tstruct bio_list writes;\n\tstruct bio_list failures;\n\tstruct bio_list holds;\n\tstruct dm_region_hash *rh;\n\tstruct dm_kcopyd_client___2 *kcopyd_client;\n\tstruct dm_io_client *io_client;\n\tregion_t nr_regions;\n\tint in_sync;\n\tint log_failure;\n\tint leg_failure;\n\tatomic_t suspend;\n\tatomic_t default_mirror;\n\tstruct workqueue_struct *kmirrord_wq;\n\tstruct work_struct kmirrord_work;\n\tstruct timer_list timer;\n\tlong unsigned int timer_pending;\n\tstruct work_struct trigger_event;\n\tunsigned int nr_mirrors;\n\tstruct mirror mirror[0];\n};\n\nstruct dm_raid1_bio_record {\n\tstruct mirror *m;\n\tstruct dm_bio_details details;\n\tregion_t write_region;\n};\n\nstruct dm_region;\n\nstruct log_header_disk {\n\t__le32 magic;\n\t__le32 version;\n\t__le64 nr_regions;\n};\n\nstruct log_header_core {\n\tuint32_t magic;\n\tuint32_t version;\n\tuint64_t nr_regions;\n};\n\nenum sync {\n\tDEFAULTSYNC = 0,\n\tNOSYNC = 1,\n\tFORCESYNC = 2,\n};\n\nstruct log_c {\n\tstruct dm_target *ti;\n\tint touched_dirtied;\n\tint touched_cleaned;\n\tint flush_failed;\n\tuint32_t region_size;\n\tunsigned int region_count;\n\tregion_t sync_count;\n\tunsigned int bitset_uint32_count;\n\tuint32_t *clean_bits;\n\tuint32_t *sync_bits;\n\tuint32_t *recovering_bits;\n\tint sync_search;\n\tenum sync sync;\n\tstruct dm_io_request io_req;\n\tint log_dev_failed;\n\tint log_dev_flush_failed;\n\tstruct dm_dev *log_dev;\n\tstruct log_header_core header;\n\tstruct dm_io_region header_location;\n\tstruct log_header_disk *disk_header;\n};\n\nstruct dm_region_hash___2 {\n\tuint32_t region_size;\n\tunsigned int region_shift;\n\tstruct dm_dirty_log *log;\n\trwlock_t hash_lock;\n\tunsigned int mask;\n\tunsigned int nr_buckets;\n\tunsigned int prime;\n\tunsigned int shift;\n\tstruct list_head *buckets;\n\tint flush_failure;\n\tunsigned int max_recovery;\n\tspinlock_t region_lock;\n\tatomic_t recovery_in_flight;\n\tstruct list_head clean_regions;\n\tstruct list_head quiesced_regions;\n\tstruct list_head recovered_regions;\n\tstruct list_head failed_recovered_regions;\n\tstruct semaphore recovery_count;\n\tmempool_t region_pool;\n\tvoid *context;\n\tsector_t target_begin;\n\tvoid (*dispatch_bios)(void *, struct bio_list *);\n\tvoid (*wakeup_workers)(void *);\n\tvoid (*wakeup_all_recovery_waiters)(void *);\n};\n\nstruct dm_region___2 {\n\tstruct dm_region_hash___2 *rh;\n\tregion_t key;\n\tint state;\n\tstruct list_head hash_list;\n\tstruct list_head list;\n\tatomic_t pending;\n\tstruct bio_list delayed_bios;\n};\n\nenum dev_type {\n\tDEV_UNKNOWN = 0,\n\tDEV_X1 = 1,\n\tDEV_X2 = 2,\n\tDEV_X4 = 3,\n\tDEV_X8 = 4,\n\tDEV_X16 = 5,\n\tDEV_X32 = 6,\n\tDEV_X64 = 7,\n};\n\nenum hw_event_mc_err_type {\n\tHW_EVENT_ERR_CORRECTED = 0,\n\tHW_EVENT_ERR_UNCORRECTED = 1,\n\tHW_EVENT_ERR_DEFERRED = 2,\n\tHW_EVENT_ERR_FATAL = 3,\n\tHW_EVENT_ERR_INFO = 4,\n};\n\nenum mem_type {\n\tMEM_EMPTY = 0,\n\tMEM_RESERVED = 1,\n\tMEM_UNKNOWN = 2,\n\tMEM_FPM = 3,\n\tMEM_EDO = 4,\n\tMEM_BEDO = 5,\n\tMEM_SDR = 6,\n\tMEM_RDR = 7,\n\tMEM_DDR = 8,\n\tMEM_RDDR = 9,\n\tMEM_RMBS = 10,\n\tMEM_DDR2 = 11,\n\tMEM_FB_DDR2 = 12,\n\tMEM_RDDR2 = 13,\n\tMEM_XDR = 14,\n\tMEM_DDR3 = 15,\n\tMEM_RDDR3 = 16,\n\tMEM_LRDDR3 = 17,\n\tMEM_LPDDR3 = 18,\n\tMEM_DDR4 = 19,\n\tMEM_RDDR4 = 20,\n\tMEM_LRDDR4 = 21,\n\tMEM_LPDDR4 = 22,\n\tMEM_DDR5 = 23,\n\tMEM_NVDIMM = 24,\n\tMEM_WIO2 = 25,\n};\n\nenum edac_type {\n\tEDAC_UNKNOWN = 0,\n\tEDAC_NONE = 1,\n\tEDAC_RESERVED = 2,\n\tEDAC_PARITY = 3,\n\tEDAC_EC = 4,\n\tEDAC_SECDED = 5,\n\tEDAC_S2ECD2ED = 6,\n\tEDAC_S4ECD4ED = 7,\n\tEDAC_S8ECD8ED = 8,\n\tEDAC_S16ECD16ED = 9,\n};\n\nenum scrub_type {\n\tSCRUB_UNKNOWN = 0,\n\tSCRUB_NONE = 1,\n\tSCRUB_SW_PROG = 2,\n\tSCRUB_SW_SRC = 3,\n\tSCRUB_SW_PROG_SRC = 4,\n\tSCRUB_SW_TUNABLE = 5,\n\tSCRUB_HW_PROG = 6,\n\tSCRUB_HW_SRC = 7,\n\tSCRUB_HW_PROG_SRC = 8,\n\tSCRUB_HW_TUNABLE = 9,\n};\n\nenum edac_mc_layer_type {\n\tEDAC_MC_LAYER_BRANCH = 0,\n\tEDAC_MC_LAYER_CHANNEL = 1,\n\tEDAC_MC_LAYER_SLOT = 2,\n\tEDAC_MC_LAYER_CHIP_SELECT = 3,\n\tEDAC_MC_LAYER_ALL_MEM = 4,\n};\n\nstruct edac_mc_layer {\n\tenum edac_mc_layer_type type;\n\tunsigned int size;\n\tbool is_virt_csrow;\n};\n\nstruct mem_ctl_info;\n\nstruct dimm_info {\n\tstruct device dev;\n\tchar label[32];\n\tunsigned int location[3];\n\tstruct mem_ctl_info *mci;\n\tunsigned int idx;\n\tu32 grain;\n\tenum dev_type dtype;\n\tenum mem_type mtype;\n\tenum edac_type edac_mode;\n\tu32 nr_pages;\n\tunsigned int csrow;\n\tunsigned int cschannel;\n\tu16 smbios_handle;\n\tu32 ce_count;\n\tu32 ue_count;\n};\n\nstruct mcidev_sysfs_attribute;\n\nstruct edac_raw_error_desc {\n\tchar location[256];\n\tchar label[296];\n\tlong int grain;\n\tu16 error_count;\n\tenum hw_event_mc_err_type type;\n\tint top_layer;\n\tint mid_layer;\n\tint low_layer;\n\tlong unsigned int page_frame_number;\n\tlong unsigned int offset_in_page;\n\tlong unsigned int syndrome;\n\tconst char *msg;\n\tconst char *other_detail;\n};\n\nstruct csrow_info;\n\nstruct mem_ctl_info {\n\tstruct device dev;\n\tstruct bus_type *bus;\n\tstruct list_head link;\n\tstruct module *owner;\n\tlong unsigned int mtype_cap;\n\tlong unsigned int edac_ctl_cap;\n\tlong unsigned int edac_cap;\n\tlong unsigned int scrub_cap;\n\tenum scrub_type scrub_mode;\n\tint (*set_sdram_scrub_rate)(struct mem_ctl_info *, u32);\n\tint (*get_sdram_scrub_rate)(struct mem_ctl_info *);\n\tvoid (*edac_check)(struct mem_ctl_info *);\n\tlong unsigned int (*ctl_page_to_phys)(struct mem_ctl_info *, long unsigned int);\n\tint mc_idx;\n\tstruct csrow_info **csrows;\n\tunsigned int nr_csrows;\n\tunsigned int num_cschannel;\n\tunsigned int n_layers;\n\tstruct edac_mc_layer *layers;\n\tbool csbased;\n\tunsigned int tot_dimms;\n\tstruct dimm_info **dimms;\n\tstruct device *pdev;\n\tconst char *mod_name;\n\tconst char *ctl_name;\n\tconst char *dev_name;\n\tvoid *pvt_info;\n\tlong unsigned int start_time;\n\tu32 ce_noinfo_count;\n\tu32 ue_noinfo_count;\n\tu32 ue_mc;\n\tu32 ce_mc;\n\tstruct completion complete;\n\tconst struct mcidev_sysfs_attribute *mc_driver_sysfs_attributes;\n\tstruct delayed_work work;\n\tstruct edac_raw_error_desc error_desc;\n\tint op_state;\n\tstruct dentry *debugfs;\n\tu8 fake_inject_layer[3];\n\tbool fake_inject_ue;\n\tu16 fake_inject_count;\n};\n\nstruct rank_info {\n\tint chan_idx;\n\tstruct csrow_info *csrow;\n\tstruct dimm_info *dimm;\n\tu32 ce_count;\n};\n\nstruct csrow_info {\n\tstruct device dev;\n\tlong unsigned int first_page;\n\tlong unsigned int last_page;\n\tlong unsigned int page_mask;\n\tint csrow_idx;\n\tu32 ue_count;\n\tu32 ce_count;\n\tstruct mem_ctl_info *mci;\n\tu32 nr_channels;\n\tstruct rank_info **channels;\n};\n\nstruct edac_device_counter {\n\tu32 ue_count;\n\tu32 ce_count;\n};\n\nstruct edac_device_ctl_info;\n\nstruct edac_dev_sysfs_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct edac_device_ctl_info *, char *);\n\tssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);\n};\n\nstruct edac_device_instance;\n\nstruct edac_device_ctl_info {\n\tstruct list_head link;\n\tstruct module *owner;\n\tint dev_idx;\n\tint log_ue;\n\tint log_ce;\n\tint panic_on_ue;\n\tunsigned int poll_msec;\n\tlong unsigned int delay;\n\tstruct edac_dev_sysfs_attribute *sysfs_attributes;\n\tstruct bus_type *edac_subsys;\n\tint op_state;\n\tstruct delayed_work work;\n\tvoid (*edac_check)(struct edac_device_ctl_info *);\n\tstruct device *dev;\n\tconst char *mod_name;\n\tconst char *ctl_name;\n\tconst char *dev_name;\n\tvoid *pvt_info;\n\tlong unsigned int start_time;\n\tstruct completion removal_complete;\n\tchar name[32];\n\tu32 nr_instances;\n\tstruct edac_device_instance *instances;\n\tstruct edac_device_counter counters;\n\tstruct kobject kobj;\n};\n\nstruct edac_device_block;\n\nstruct edac_dev_sysfs_block_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct kobject *, struct attribute *, char *);\n\tssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);\n\tstruct edac_device_block *block;\n\tunsigned int value;\n};\n\nstruct edac_device_block {\n\tstruct edac_device_instance *instance;\n\tchar name[32];\n\tstruct edac_device_counter counters;\n\tint nr_attribs;\n\tstruct edac_dev_sysfs_block_attribute *block_attributes;\n\tstruct kobject kobj;\n};\n\nstruct edac_device_instance {\n\tstruct edac_device_ctl_info *ctl;\n\tchar name[35];\n\tstruct edac_device_counter counters;\n\tu32 nr_blocks;\n\tstruct edac_device_block *blocks;\n\tstruct kobject kobj;\n};\n\nstruct dev_ch_attribute {\n\tstruct device_attribute attr;\n\tunsigned int channel;\n};\n\nstruct ctl_info_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct edac_device_ctl_info *, char *);\n\tssize_t (*store)(struct edac_device_ctl_info *, const char *, size_t);\n};\n\nstruct instance_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct edac_device_instance *, char *);\n\tssize_t (*store)(struct edac_device_instance *, const char *, size_t);\n};\n\nstruct edac_pci_counter {\n\tatomic_t pe_count;\n\tatomic_t npe_count;\n};\n\nstruct edac_pci_ctl_info {\n\tstruct list_head link;\n\tint pci_idx;\n\tstruct bus_type *edac_subsys;\n\tint op_state;\n\tstruct delayed_work work;\n\tvoid (*edac_check)(struct edac_pci_ctl_info *);\n\tstruct device *dev;\n\tconst char *mod_name;\n\tconst char *ctl_name;\n\tconst char *dev_name;\n\tvoid *pvt_info;\n\tlong unsigned int start_time;\n\tstruct completion complete;\n\tchar name[32];\n\tstruct edac_pci_counter counters;\n\tstruct kobject kobj;\n};\n\nstruct edac_pci_gen_data {\n\tint edac_idx;\n};\n\nstruct instance_attribute___2 {\n\tstruct attribute attr;\n\tssize_t (*show)(struct edac_pci_ctl_info *, char *);\n\tssize_t (*store)(struct edac_pci_ctl_info *, const char *, size_t);\n};\n\nstruct edac_pci_dev_attribute {\n\tstruct attribute attr;\n\tvoid *value;\n\tssize_t (*show)(void *, char *);\n\tssize_t (*store)(void *, const char *, size_t);\n};\n\ntypedef void (*pci_parity_check_fn_t)(struct pci_dev *);\n\nstruct ghes_pvt {\n\tstruct mem_ctl_info *mci;\n\tchar other_detail[400];\n\tchar msg[80];\n};\n\nstruct ghes_hw_desc {\n\tint num_dimms;\n\tstruct dimm_info *dimms;\n};\n\nstruct memdev_dmi_entry {\n\tu8 type;\n\tu8 length;\n\tu16 handle;\n\tu16 phys_mem_array_handle;\n\tu16 mem_err_info_handle;\n\tu16 total_width;\n\tu16 data_width;\n\tu16 size;\n\tu8 form_factor;\n\tu8 device_set;\n\tu8 device_locator;\n\tu8 bank_locator;\n\tu8 memory_type;\n\tu16 type_detail;\n\tu16 speed;\n\tu8 manufacturer;\n\tu8 serial_number;\n\tu8 asset_tag;\n\tu8 part_number;\n\tu8 attributes;\n\tu32 extended_size;\n\tu16 conf_mem_clk_speed;\n} __attribute__((packed));\n\nstruct cpufreq_policy_data {\n\tstruct cpufreq_cpuinfo cpuinfo;\n\tstruct cpufreq_frequency_table *freq_table;\n\tunsigned int cpu;\n\tunsigned int min;\n\tunsigned int max;\n};\n\nstruct freq_attr {\n\tstruct attribute attr;\n\tssize_t (*show)(struct cpufreq_policy *, char *);\n\tssize_t (*store)(struct cpufreq_policy *, const char *, size_t);\n};\n\nstruct cpufreq_driver {\n\tchar name[16];\n\tu16 flags;\n\tvoid *driver_data;\n\tint (*init)(struct cpufreq_policy *);\n\tint (*verify)(struct cpufreq_policy_data *);\n\tint (*setpolicy)(struct cpufreq_policy *);\n\tint (*target)(struct cpufreq_policy *, unsigned int, unsigned int);\n\tint (*target_index)(struct cpufreq_policy *, unsigned int);\n\tunsigned int (*fast_switch)(struct cpufreq_policy *, unsigned int);\n\tvoid (*adjust_perf)(unsigned int, long unsigned int, long unsigned int, long unsigned int);\n\tunsigned int (*resolve_freq)(struct cpufreq_policy *, unsigned int);\n\tunsigned int (*get_intermediate)(struct cpufreq_policy *, unsigned int);\n\tint (*target_intermediate)(struct cpufreq_policy *, unsigned int);\n\tunsigned int (*get)(unsigned int);\n\tvoid (*update_limits)(unsigned int);\n\tint (*bios_limit)(int, unsigned int *);\n\tint (*online)(struct cpufreq_policy *);\n\tint (*offline)(struct cpufreq_policy *);\n\tint (*exit)(struct cpufreq_policy *);\n\tvoid (*stop_cpu)(struct cpufreq_policy *);\n\tint (*suspend)(struct cpufreq_policy *);\n\tint (*resume)(struct cpufreq_policy *);\n\tvoid (*ready)(struct cpufreq_policy *);\n\tstruct freq_attr **attr;\n\tbool boost_enabled;\n\tint (*set_boost)(struct cpufreq_policy *, int);\n};\n\nstruct cpufreq_stats {\n\tunsigned int total_trans;\n\tlong long unsigned int last_time;\n\tunsigned int max_state;\n\tunsigned int state_num;\n\tunsigned int last_index;\n\tu64 *time_in_state;\n\tunsigned int *freq_table;\n\tunsigned int *trans_table;\n\tunsigned int reset_pending;\n\tlong long unsigned int reset_time;\n};\n\nenum {\n\tOD_NORMAL_SAMPLE = 0,\n\tOD_SUB_SAMPLE = 1,\n};\n\nstruct dbs_data {\n\tstruct gov_attr_set attr_set;\n\tvoid *tuners;\n\tunsigned int ignore_nice_load;\n\tunsigned int sampling_rate;\n\tunsigned int sampling_down_factor;\n\tunsigned int up_threshold;\n\tunsigned int io_is_busy;\n};\n\nstruct policy_dbs_info {\n\tstruct cpufreq_policy *policy;\n\tstruct mutex update_mutex;\n\tu64 last_sample_time;\n\ts64 sample_delay_ns;\n\tatomic_t work_count;\n\tstruct irq_work irq_work;\n\tstruct work_struct work;\n\tstruct dbs_data *dbs_data;\n\tstruct list_head list;\n\tunsigned int rate_mult;\n\tunsigned int idle_periods;\n\tbool is_shared;\n\tbool work_in_progress;\n};\n\nstruct dbs_governor {\n\tstruct cpufreq_governor gov;\n\tstruct kobj_type kobj_type;\n\tstruct dbs_data *gdbs_data;\n\tunsigned int (*gov_dbs_update)(struct cpufreq_policy *);\n\tstruct policy_dbs_info * (*alloc)();\n\tvoid (*free)(struct policy_dbs_info *);\n\tint (*init)(struct dbs_data *);\n\tvoid (*exit)(struct dbs_data *);\n\tvoid (*start)(struct cpufreq_policy *);\n};\n\nstruct od_ops {\n\tunsigned int (*powersave_bias_target)(struct cpufreq_policy *, unsigned int, unsigned int);\n};\n\nstruct od_policy_dbs_info {\n\tstruct policy_dbs_info policy_dbs;\n\tunsigned int freq_lo;\n\tunsigned int freq_lo_delay_us;\n\tunsigned int freq_hi_delay_us;\n\tunsigned int sample_type: 1;\n};\n\nstruct od_dbs_tuners {\n\tunsigned int powersave_bias;\n};\n\nstruct cs_policy_dbs_info {\n\tstruct policy_dbs_info policy_dbs;\n\tunsigned int down_skip;\n\tunsigned int requested_freq;\n};\n\nstruct cs_dbs_tuners {\n\tunsigned int down_threshold;\n\tunsigned int freq_step;\n};\n\nstruct cpu_dbs_info {\n\tu64 prev_cpu_idle;\n\tu64 prev_update_time;\n\tu64 prev_cpu_nice;\n\tunsigned int prev_load;\n\tstruct update_util_data update_util;\n\tstruct policy_dbs_info *policy_dbs;\n};\n\nenum acpi_preferred_pm_profiles {\n\tPM_UNSPECIFIED = 0,\n\tPM_DESKTOP = 1,\n\tPM_MOBILE = 2,\n\tPM_WORKSTATION = 3,\n\tPM_ENTERPRISE_SERVER = 4,\n\tPM_SOHO_SERVER = 5,\n\tPM_APPLIANCE_PC = 6,\n\tPM_PERFORMANCE_SERVER = 7,\n\tPM_TABLET = 8,\n};\n\nstruct sample {\n\tint32_t core_avg_perf;\n\tint32_t busy_scaled;\n\tu64 aperf;\n\tu64 mperf;\n\tu64 tsc;\n\tu64 time;\n};\n\nstruct pstate_data {\n\tint current_pstate;\n\tint min_pstate;\n\tint max_pstate;\n\tint max_pstate_physical;\n\tint scaling;\n\tint turbo_pstate;\n\tunsigned int max_freq;\n\tunsigned int turbo_freq;\n};\n\nstruct vid_data {\n\tint min;\n\tint max;\n\tint turbo;\n\tint32_t ratio;\n};\n\nstruct global_params {\n\tbool no_turbo;\n\tbool turbo_disabled;\n\tbool turbo_disabled_mf;\n\tint max_perf_pct;\n\tint min_perf_pct;\n};\n\nstruct cpudata {\n\tint cpu;\n\tunsigned int policy;\n\tstruct update_util_data update_util;\n\tbool update_util_set;\n\tstruct pstate_data pstate;\n\tstruct vid_data vid;\n\tu64 last_update;\n\tu64 last_sample_time;\n\tu64 aperf_mperf_shift;\n\tu64 prev_aperf;\n\tu64 prev_mperf;\n\tu64 prev_tsc;\n\tu64 prev_cummulative_iowait;\n\tstruct sample sample;\n\tint32_t min_perf_ratio;\n\tint32_t max_perf_ratio;\n\tstruct acpi_processor_performance acpi_perf_data;\n\tbool valid_pss_table;\n\tunsigned int iowait_boost;\n\ts16 epp_powersave;\n\ts16 epp_policy;\n\ts16 epp_default;\n\ts16 epp_cached;\n\tu64 hwp_req_cached;\n\tu64 hwp_cap_cached;\n\tu64 last_io_update;\n\tunsigned int sched_flags;\n\tu32 hwp_boost_min;\n\tbool suspended;\n};\n\nstruct pstate_funcs {\n\tint (*get_max)();\n\tint (*get_max_physical)();\n\tint (*get_min)();\n\tint (*get_turbo)();\n\tint (*get_scaling)();\n\tint (*get_aperf_mperf_shift)();\n\tu64 (*get_val)(struct cpudata *, int);\n\tvoid (*get_vid)(struct cpudata *);\n};\n\nenum {\n\tPSS = 0,\n\tPPC = 1,\n};\n\nstruct cpuidle_governor {\n\tchar name[16];\n\tstruct list_head governor_list;\n\tunsigned int rating;\n\tint (*enable)(struct cpuidle_driver *, struct cpuidle_device *);\n\tvoid (*disable)(struct cpuidle_driver *, struct cpuidle_device *);\n\tint (*select)(struct cpuidle_driver *, struct cpuidle_device *, bool *);\n\tvoid (*reflect)(struct cpuidle_device *, int);\n};\n\nstruct cpuidle_state_kobj {\n\tstruct cpuidle_state *state;\n\tstruct cpuidle_state_usage *state_usage;\n\tstruct completion kobj_unregister;\n\tstruct kobject kobj;\n\tstruct cpuidle_device *device;\n};\n\nstruct cpuidle_device_kobj {\n\tstruct cpuidle_device *dev;\n\tstruct completion kobj_unregister;\n\tstruct kobject kobj;\n};\n\nstruct cpuidle_attr {\n\tstruct attribute attr;\n\tssize_t (*show)(struct cpuidle_device *, char *);\n\tssize_t (*store)(struct cpuidle_device *, const char *, size_t);\n};\n\nstruct cpuidle_state_attr {\n\tstruct attribute attr;\n\tssize_t (*show)(struct cpuidle_state *, struct cpuidle_state_usage *, char *);\n\tssize_t (*store)(struct cpuidle_state *, struct cpuidle_state_usage *, const char *, size_t);\n};\n\nstruct menu_device {\n\tint needs_update;\n\tint tick_wakeup;\n\tu64 next_timer_ns;\n\tunsigned int bucket;\n\tunsigned int correction_factor[12];\n\tunsigned int intervals[8];\n\tint interval_ptr;\n};\n\nstruct pci_dev___2;\n\nstruct sdhci_pci_data {\n\tstruct pci_dev___2 *pdev;\n\tint slotno;\n\tint rst_n_gpio;\n\tint cd_gpio;\n\tint (*setup)(struct sdhci_pci_data *);\n\tvoid (*cleanup)(struct sdhci_pci_data *);\n};\n\nstruct led_properties {\n\tu32 color;\n\tbool color_present;\n\tconst char *function;\n\tu32 func_enum;\n\tbool func_enum_present;\n\tconst char *label;\n};\n\nstruct dmi_memdev_info {\n\tconst char *device;\n\tconst char *bank;\n\tu64 size;\n\tu16 handle;\n\tu8 type;\n};\n\nstruct dmi_sysfs_entry {\n\tstruct dmi_header dh;\n\tstruct kobject kobj;\n\tint instance;\n\tint position;\n\tstruct list_head list;\n\tstruct kobject *child;\n};\n\nstruct dmi_sysfs_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct dmi_sysfs_entry *, char *);\n};\n\nstruct dmi_sysfs_mapped_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct dmi_sysfs_entry *, const struct dmi_header *, char *);\n};\n\ntypedef ssize_t (*dmi_callback)(struct dmi_sysfs_entry *, const struct dmi_header *, void *);\n\nstruct find_dmi_data {\n\tstruct dmi_sysfs_entry *entry;\n\tdmi_callback callback;\n\tvoid *private;\n\tint instance_countdown;\n\tssize_t ret;\n};\n\nstruct dmi_read_state {\n\tchar *buf;\n\tloff_t pos;\n\tsize_t count;\n};\n\nstruct dmi_entry_attr_show_data {\n\tstruct attribute *attr;\n\tchar *buf;\n};\n\nstruct dmi_system_event_log {\n\tstruct dmi_header header;\n\tu16 area_length;\n\tu16 header_start_offset;\n\tu16 data_start_offset;\n\tu8 access_method;\n\tu8 status;\n\tu32 change_token;\n\tunion {\n\t\tstruct {\n\t\t\tu16 index_addr;\n\t\t\tu16 data_addr;\n\t\t} io;\n\t\tu32 phys_addr32;\n\t\tu16 gpnv_handle;\n\t\tu32 access_method_address;\n\t};\n\tu8 header_format;\n\tu8 type_descriptors_supported_count;\n\tu8 per_log_type_descriptor_length;\n\tu8 supported_log_type_descriptos[0];\n} __attribute__((packed));\n\ntypedef u8 (*sel_io_reader)(const struct dmi_system_event_log *, loff_t);\n\nstruct dmi_device_attribute {\n\tstruct device_attribute dev_attr;\n\tint field;\n};\n\nstruct mafield {\n\tconst char *prefix;\n\tint field;\n};\n\nstruct acpi_table_ibft {\n\tstruct acpi_table_header header;\n\tu8 reserved[12];\n};\n\nstruct firmware_map_entry {\n\tu64 start;\n\tu64 end;\n\tconst char *type;\n\tstruct list_head list;\n\tstruct kobject kobj;\n};\n\nstruct memmap_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct firmware_map_entry *, char *);\n};\n\nstruct bmp_header {\n\tu16 id;\n\tu32 size;\n} __attribute__((packed));\n\ntypedef efi_status_t efi_query_variable_store_t(u32, long unsigned int, bool);\n\ntypedef struct {\n\tu16 version;\n\tu16 length;\n\tu32 runtime_services_supported;\n} efi_rt_properties_table_t;\n\nstruct efivar_operations {\n\tefi_get_variable_t *get_variable;\n\tefi_get_next_variable_t *get_next_variable;\n\tefi_set_variable_t *set_variable;\n\tefi_set_variable_t *set_variable_nonblocking;\n\tefi_query_variable_store_t *query_variable_store;\n};\n\nstruct efivars {\n\tstruct kset *kset;\n\tstruct kobject *kobject;\n\tconst struct efivar_operations *ops;\n};\n\nstruct linux_efi_random_seed {\n\tu32 size;\n\tu8 bits[0];\n};\n\nstruct linux_efi_memreserve {\n\tint size;\n\tatomic_t count;\n\tphys_addr_t next;\n\tstruct {\n\t\tphys_addr_t base;\n\t\tphys_addr_t size;\n\t} entry[0];\n};\n\nstruct efi_error_code {\n\tefi_status_t status;\n\tint errno;\n\tconst char *description;\n};\n\nstruct efi_generic_dev_path {\n\tu8 type;\n\tu8 sub_type;\n\tu16 length;\n};\n\nstruct variable_validate {\n\tefi_guid_t vendor;\n\tchar *name;\n\tbool (*validate)(efi_char16_t *, int, u8 *, long unsigned int);\n};\n\ntypedef struct {\n\tu32 version;\n\tu32 num_entries;\n\tu32 desc_size;\n\tu32 reserved;\n\tefi_memory_desc_t entry[0];\n} efi_memory_attributes_table_t;\n\nstruct efi_system_resource_entry_v1 {\n\tefi_guid_t fw_class;\n\tu32 fw_type;\n\tu32 fw_version;\n\tu32 lowest_supported_fw_version;\n\tu32 capsule_flags;\n\tu32 last_attempt_version;\n\tu32 last_attempt_status;\n};\n\nstruct efi_system_resource_table {\n\tu32 fw_resource_count;\n\tu32 fw_resource_count_max;\n\tu64 fw_resource_version;\n\tu8 entries[0];\n};\n\nstruct esre_entry {\n\tunion {\n\t\tstruct efi_system_resource_entry_v1 *esre1;\n\t} esre;\n\tstruct kobject kobj;\n\tstruct list_head list;\n};\n\nstruct esre_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct esre_entry *, char *);\n\tssize_t (*store)(struct esre_entry *, const char *, size_t);\n};\n\nstruct cper_sec_proc_generic {\n\tu64 validation_bits;\n\tu8 proc_type;\n\tu8 proc_isa;\n\tu8 proc_error_type;\n\tu8 operation;\n\tu8 flags;\n\tu8 level;\n\tu16 reserved;\n\tu64 cpu_version;\n\tchar cpu_brand[128];\n\tu64 proc_id;\n\tu64 target_addr;\n\tu64 requestor_id;\n\tu64 responder_id;\n\tu64 ip;\n};\n\nstruct cper_sec_proc_ia {\n\tu64 validation_bits;\n\tu64 lapic_id;\n\tu8 cpuid[48];\n};\n\nstruct cper_mem_err_compact {\n\tu64 validation_bits;\n\tu16 node;\n\tu16 card;\n\tu16 module;\n\tu16 bank;\n\tu16 device;\n\tu16 row;\n\tu16 column;\n\tu16 bit_pos;\n\tu64 requestor_id;\n\tu64 responder_id;\n\tu64 target_id;\n\tu16 rank;\n\tu16 mem_array_handle;\n\tu16 mem_dev_handle;\n\tu8 extended;\n} __attribute__((packed));\n\nstruct cper_sec_fw_err_rec_ref {\n\tu8 record_type;\n\tu8 revision;\n\tu8 reserved[6];\n\tu64 record_identifier;\n\tguid_t record_identifier_guid;\n};\n\nstruct efi_runtime_map_entry {\n\tefi_memory_desc_t md;\n\tstruct kobject kobj;\n};\n\nstruct map_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct efi_runtime_map_entry *, char *);\n};\n\nstruct efi_acpi_dev_path {\n\tstruct efi_generic_dev_path header;\n\tu32 hid;\n\tu32 uid;\n};\n\nstruct efi_pci_dev_path {\n\tstruct efi_generic_dev_path header;\n\tu8 fn;\n\tu8 dev;\n};\n\nstruct efi_vendor_dev_path {\n\tstruct efi_generic_dev_path header;\n\tefi_guid_t vendorguid;\n\tu8 vendordata[0];\n};\n\nstruct efi_dev_path {\n\tunion {\n\t\tstruct efi_generic_dev_path header;\n\t\tstruct efi_acpi_dev_path acpi;\n\t\tstruct efi_pci_dev_path pci;\n\t\tstruct efi_vendor_dev_path vendor;\n\t};\n};\n\nstruct acpi_hid_uid {\n\tstruct acpi_device_id hid[2];\n\tchar uid[11];\n};\n\nstruct dev_header {\n\tu32 len;\n\tu32 prop_count;\n\tstruct efi_dev_path path[0];\n};\n\nstruct properties_header {\n\tu32 len;\n\tu32 version;\n\tu32 dev_count;\n\tstruct dev_header dev_header[0];\n};\n\nstruct efi_embedded_fw {\n\tstruct list_head list;\n\tconst char *name;\n\tconst u8 *data;\n\tsize_t length;\n};\n\nstruct efi_embedded_fw_desc {\n\tconst char *name;\n\tu8 prefix[8];\n\tu32 length;\n\tu8 sha256[32];\n};\n\nstruct efi_mokvar_sysfs_attr {\n\tstruct bin_attribute bin_attr;\n\tstruct list_head node;\n};\n\nstruct cper_ia_err_info {\n\tguid_t err_type;\n\tu64 validation_bits;\n\tu64 check_info;\n\tu64 target_id;\n\tu64 requestor_id;\n\tu64 responder_id;\n\tu64 ip;\n};\n\nenum err_types {\n\tERR_TYPE_CACHE = 0,\n\tERR_TYPE_TLB = 1,\n\tERR_TYPE_BUS = 2,\n\tERR_TYPE_MS = 3,\n\tN_ERR_TYPES = 4,\n};\n\nstruct hid_device_id {\n\t__u16 bus;\n\t__u16 group;\n\t__u32 vendor;\n\t__u32 product;\n\tkernel_ulong_t driver_data;\n};\n\nstruct hid_item {\n\tunsigned int format;\n\t__u8 size;\n\t__u8 type;\n\t__u8 tag;\n\tunion {\n\t\t__u8 u8;\n\t\t__s8 s8;\n\t\t__u16 u16;\n\t\t__s16 s16;\n\t\t__u32 u32;\n\t\t__s32 s32;\n\t\t__u8 *longdata;\n\t} data;\n};\n\nstruct hid_global {\n\tunsigned int usage_page;\n\t__s32 logical_minimum;\n\t__s32 logical_maximum;\n\t__s32 physical_minimum;\n\t__s32 physical_maximum;\n\t__s32 unit_exponent;\n\tunsigned int unit;\n\tunsigned int report_id;\n\tunsigned int report_size;\n\tunsigned int report_count;\n};\n\nstruct hid_local {\n\tunsigned int usage[12288];\n\tu8 usage_size[12288];\n\tunsigned int collection_index[12288];\n\tunsigned int usage_index;\n\tunsigned int usage_minimum;\n\tunsigned int delimiter_depth;\n\tunsigned int delimiter_branch;\n};\n\nstruct hid_collection {\n\tint parent_idx;\n\tunsigned int type;\n\tunsigned int usage;\n\tunsigned int level;\n};\n\nstruct hid_usage {\n\tunsigned int hid;\n\tunsigned int collection_index;\n\tunsigned int usage_index;\n\t__s8 resolution_multiplier;\n\t__s8 wheel_factor;\n\t__u16 code;\n\t__u8 type;\n\t__s8 hat_min;\n\t__s8 hat_max;\n\t__s8 hat_dir;\n\t__s16 wheel_accumulated;\n};\n\nstruct hid_report;\n\nstruct hid_input;\n\nstruct hid_field {\n\tunsigned int physical;\n\tunsigned int logical;\n\tunsigned int application;\n\tstruct hid_usage *usage;\n\tunsigned int maxusage;\n\tunsigned int flags;\n\tunsigned int report_offset;\n\tunsigned int report_size;\n\tunsigned int report_count;\n\tunsigned int report_type;\n\t__s32 *value;\n\t__s32 logical_minimum;\n\t__s32 logical_maximum;\n\t__s32 physical_minimum;\n\t__s32 physical_maximum;\n\t__s32 unit_exponent;\n\tunsigned int unit;\n\tstruct hid_report *report;\n\tunsigned int index;\n\tstruct hid_input *hidinput;\n\t__u16 dpad;\n};\n\nstruct hid_device;\n\nstruct hid_report {\n\tstruct list_head list;\n\tstruct list_head hidinput_list;\n\tunsigned int id;\n\tunsigned int type;\n\tunsigned int application;\n\tstruct hid_field *field[256];\n\tunsigned int maxfield;\n\tunsigned int size;\n\tstruct hid_device *device;\n};\n\nstruct hid_input {\n\tstruct list_head list;\n\tstruct hid_report *report;\n\tstruct input_dev *input;\n\tconst char *name;\n\tbool registered;\n\tstruct list_head reports;\n\tunsigned int application;\n};\n\nenum hid_type {\n\tHID_TYPE_OTHER = 0,\n\tHID_TYPE_USBMOUSE = 1,\n\tHID_TYPE_USBNONE = 2,\n};\n\nstruct hid_report_enum {\n\tunsigned int numbered;\n\tstruct list_head report_list;\n\tstruct hid_report *report_id_hash[256];\n};\n\nenum hid_battery_status {\n\tHID_BATTERY_UNKNOWN = 0,\n\tHID_BATTERY_QUERIED = 1,\n\tHID_BATTERY_REPORTED = 2,\n};\n\nstruct hid_driver;\n\nstruct hid_ll_driver;\n\nstruct hid_device {\n\t__u8 *dev_rdesc;\n\tunsigned int dev_rsize;\n\t__u8 *rdesc;\n\tunsigned int rsize;\n\tstruct hid_collection *collection;\n\tunsigned int collection_size;\n\tunsigned int maxcollection;\n\tunsigned int maxapplication;\n\t__u16 bus;\n\t__u16 group;\n\t__u32 vendor;\n\t__u32 product;\n\t__u32 version;\n\tenum hid_type type;\n\tunsigned int country;\n\tstruct hid_report_enum report_enum[3];\n\tstruct work_struct led_work;\n\tstruct semaphore driver_input_lock;\n\tstruct device dev;\n\tstruct hid_driver *driver;\n\tstruct hid_ll_driver *ll_driver;\n\tstruct mutex ll_open_lock;\n\tunsigned int ll_open_count;\n\tstruct power_supply *battery;\n\t__s32 battery_capacity;\n\t__s32 battery_min;\n\t__s32 battery_max;\n\t__s32 battery_report_type;\n\t__s32 battery_report_id;\n\tenum hid_battery_status battery_status;\n\tbool battery_avoid_query;\n\tktime_t battery_ratelimit_time;\n\tlong unsigned int status;\n\tunsigned int claimed;\n\tunsigned int quirks;\n\tbool io_started;\n\tstruct list_head inputs;\n\tvoid *hiddev;\n\tvoid *hidraw;\n\tchar name[128];\n\tchar phys[64];\n\tchar uniq[64];\n\tvoid *driver_data;\n\tint (*ff_init)(struct hid_device *);\n\tint (*hiddev_connect)(struct hid_device *, unsigned int);\n\tvoid (*hiddev_disconnect)(struct hid_device *);\n\tvoid (*hiddev_hid_event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);\n\tvoid (*hiddev_report_event)(struct hid_device *, struct hid_report *);\n\tshort unsigned int debug;\n\tstruct dentry *debug_dir;\n\tstruct dentry *debug_rdesc;\n\tstruct dentry *debug_events;\n\tstruct list_head debug_list;\n\tspinlock_t debug_list_lock;\n\twait_queue_head_t debug_wait;\n};\n\nstruct hid_report_id;\n\nstruct hid_usage_id;\n\nstruct hid_driver {\n\tchar *name;\n\tconst struct hid_device_id *id_table;\n\tstruct list_head dyn_list;\n\tspinlock_t dyn_lock;\n\tbool (*match)(struct hid_device *, bool);\n\tint (*probe)(struct hid_device *, const struct hid_device_id *);\n\tvoid (*remove)(struct hid_device *);\n\tconst struct hid_report_id *report_table;\n\tint (*raw_event)(struct hid_device *, struct hid_report *, u8 *, int);\n\tconst struct hid_usage_id *usage_table;\n\tint (*event)(struct hid_device *, struct hid_field *, struct hid_usage *, __s32);\n\tvoid (*report)(struct hid_device *, struct hid_report *);\n\t__u8 * (*report_fixup)(struct hid_device *, __u8 *, unsigned int *);\n\tint (*input_mapping)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);\n\tint (*input_mapped)(struct hid_device *, struct hid_input *, struct hid_field *, struct hid_usage *, long unsigned int **, int *);\n\tint (*input_configured)(struct hid_device *, struct hid_input *);\n\tvoid (*feature_mapping)(struct hid_device *, struct hid_field *, struct hid_usage *);\n\tint (*suspend)(struct hid_device *, pm_message_t);\n\tint (*resume)(struct hid_device *);\n\tint (*reset_resume)(struct hid_device *);\n\tstruct device_driver driver;\n};\n\nstruct hid_ll_driver {\n\tint (*start)(struct hid_device *);\n\tvoid (*stop)(struct hid_device *);\n\tint (*open)(struct hid_device *);\n\tvoid (*close)(struct hid_device *);\n\tint (*power)(struct hid_device *, int);\n\tint (*parse)(struct hid_device *);\n\tvoid (*request)(struct hid_device *, struct hid_report *, int);\n\tint (*wait)(struct hid_device *);\n\tint (*raw_request)(struct hid_device *, unsigned char, __u8 *, size_t, unsigned char, int);\n\tint (*output_report)(struct hid_device *, __u8 *, size_t);\n\tint (*idle)(struct hid_device *, int, int, int);\n};\n\nstruct hid_parser {\n\tstruct hid_global global;\n\tstruct hid_global global_stack[4];\n\tunsigned int global_stack_ptr;\n\tstruct hid_local local;\n\tunsigned int *collection_stack;\n\tunsigned int collection_stack_ptr;\n\tunsigned int collection_stack_size;\n\tstruct hid_device *device;\n\tunsigned int scan_flags;\n};\n\nstruct hid_report_id {\n\t__u32 report_type;\n};\n\nstruct hid_usage_id {\n\t__u32 usage_hid;\n\t__u32 usage_type;\n\t__u32 usage_code;\n};\n\nstruct hiddev {\n\tint minor;\n\tint exist;\n\tint open;\n\tstruct mutex existancelock;\n\twait_queue_head_t wait;\n\tstruct hid_device *hid;\n\tstruct list_head list;\n\tspinlock_t list_lock;\n\tbool initialized;\n};\n\nstruct hidraw {\n\tunsigned int minor;\n\tint exist;\n\tint open;\n\twait_queue_head_t wait;\n\tstruct hid_device *hid;\n\tstruct device *dev;\n\tspinlock_t list_lock;\n\tstruct list_head list;\n};\n\nstruct hid_dynid {\n\tstruct list_head list;\n\tstruct hid_device_id id;\n};\n\ntypedef bool (*hid_usage_cmp_t)(struct hid_usage *, unsigned int, unsigned int);\n\nstruct quirks_list_struct {\n\tstruct hid_device_id hid_bl_item;\n\tstruct list_head node;\n};\n\nstruct hid_debug_list {\n\tstruct {\n\t\tunion {\n\t\t\tstruct __kfifo kfifo;\n\t\t\tchar *type;\n\t\t\tconst char *const_type;\n\t\t\tchar (*rectype)[0];\n\t\t\tchar *ptr;\n\t\t\tconst char *ptr_const;\n\t\t};\n\t\tchar buf[0];\n\t} hid_debug_fifo;\n\tstruct fasync_struct *fasync;\n\tstruct hid_device *hdev;\n\tstruct list_head node;\n\tstruct mutex read_mutex;\n};\n\nstruct hid_usage_entry {\n\tunsigned int page;\n\tunsigned int usage;\n\tconst char *description;\n};\n\nstruct hidraw_devinfo {\n\t__u32 bustype;\n\t__s16 vendor;\n\t__s16 product;\n};\n\nstruct hidraw_report {\n\t__u8 *value;\n\tint len;\n};\n\nstruct hidraw_list {\n\tstruct hidraw_report buffer[64];\n\tint head;\n\tint tail;\n\tstruct fasync_struct *fasync;\n\tstruct hidraw *hidraw;\n\tstruct list_head node;\n\tstruct mutex read_mutex;\n};\n\nstruct magicmouse_sc {\n\tstruct input_dev *input;\n\tlong unsigned int quirks;\n\tint ntouches;\n\tint scroll_accel;\n\tlong unsigned int scroll_jiffies;\n\tstruct {\n\t\tshort int x;\n\t\tshort int y;\n\t\tshort int scroll_x;\n\t\tshort int scroll_y;\n\t\tu8 size;\n\t} touches[16];\n\tint tracking_ids[16];\n};\n\nstruct ntrig_data {\n\t__u16 x;\n\t__u16 y;\n\t__u16 w;\n\t__u16 h;\n\t__u16 id;\n\tbool tipswitch;\n\tbool confidence;\n\tbool first_contact_touch;\n\tbool reading_mt;\n\t__u8 mt_footer[4];\n\t__u8 mt_foot_count;\n\t__s8 act_state;\n\t__s8 deactivate_slack;\n\t__s8 activate_slack;\n\t__u16 min_width;\n\t__u16 min_height;\n\t__u16 activation_width;\n\t__u16 activation_height;\n\t__u16 sensor_logical_width;\n\t__u16 sensor_logical_height;\n\t__u16 sensor_physical_width;\n\t__u16 sensor_physical_height;\n};\n\nstruct hid_control_fifo {\n\tunsigned char dir;\n\tstruct hid_report *report;\n\tchar *raw_report;\n};\n\nstruct hid_output_fifo {\n\tstruct hid_report *report;\n\tchar *raw_report;\n};\n\nstruct hid_class_descriptor {\n\t__u8 bDescriptorType;\n\t__le16 wDescriptorLength;\n} __attribute__((packed));\n\nstruct hid_descriptor {\n\t__u8 bLength;\n\t__u8 bDescriptorType;\n\t__le16 bcdHID;\n\t__u8 bCountryCode;\n\t__u8 bNumDescriptors;\n\tstruct hid_class_descriptor desc[1];\n} __attribute__((packed));\n\nstruct usbhid_device {\n\tstruct hid_device *hid;\n\tstruct usb_interface *intf;\n\tint ifnum;\n\tunsigned int bufsize;\n\tstruct urb *urbin;\n\tchar *inbuf;\n\tdma_addr_t inbuf_dma;\n\tstruct urb *urbctrl;\n\tstruct usb_ctrlrequest *cr;\n\tstruct hid_control_fifo ctrl[256];\n\tunsigned char ctrlhead;\n\tunsigned char ctrltail;\n\tchar *ctrlbuf;\n\tdma_addr_t ctrlbuf_dma;\n\tlong unsigned int last_ctrl;\n\tstruct urb *urbout;\n\tstruct hid_output_fifo out[256];\n\tunsigned char outhead;\n\tunsigned char outtail;\n\tchar *outbuf;\n\tdma_addr_t outbuf_dma;\n\tlong unsigned int last_out;\n\tstruct mutex mutex;\n\tspinlock_t lock;\n\tlong unsigned int iofl;\n\tstruct timer_list io_retry;\n\tlong unsigned int stop_retry;\n\tunsigned int retry_delay;\n\tstruct work_struct reset_work;\n\twait_queue_head_t wait;\n};\n\nstruct hiddev_event {\n\tunsigned int hid;\n\tint value;\n};\n\nstruct hiddev_devinfo {\n\t__u32 bustype;\n\t__u32 busnum;\n\t__u32 devnum;\n\t__u32 ifnum;\n\t__s16 vendor;\n\t__s16 product;\n\t__s16 version;\n\t__u32 num_applications;\n};\n\nstruct hiddev_collection_info {\n\t__u32 index;\n\t__u32 type;\n\t__u32 usage;\n\t__u32 level;\n};\n\nstruct hiddev_report_info {\n\t__u32 report_type;\n\t__u32 report_id;\n\t__u32 num_fields;\n};\n\nstruct hiddev_field_info {\n\t__u32 report_type;\n\t__u32 report_id;\n\t__u32 field_index;\n\t__u32 maxusage;\n\t__u32 flags;\n\t__u32 physical;\n\t__u32 logical;\n\t__u32 application;\n\t__s32 logical_minimum;\n\t__s32 logical_maximum;\n\t__s32 physical_minimum;\n\t__s32 physical_maximum;\n\t__u32 unit_exponent;\n\t__u32 unit;\n};\n\nstruct hiddev_usage_ref {\n\t__u32 report_type;\n\t__u32 report_id;\n\t__u32 field_index;\n\t__u32 usage_index;\n\t__u32 usage_code;\n\t__s32 value;\n};\n\nstruct hiddev_usage_ref_multi {\n\tstruct hiddev_usage_ref uref;\n\t__u32 num_values;\n\t__s32 values[1024];\n};\n\nstruct hiddev_list {\n\tstruct hiddev_usage_ref buffer[2048];\n\tint head;\n\tint tail;\n\tunsigned int flags;\n\tstruct fasync_struct *fasync;\n\tstruct hiddev *hiddev;\n\tstruct list_head node;\n\tstruct mutex thread_lock;\n};\n\nstruct pidff_usage {\n\tstruct hid_field *field;\n\ts32 *value;\n};\n\nstruct pidff_device {\n\tstruct hid_device *hid;\n\tstruct hid_report *reports[13];\n\tstruct pidff_usage set_effect[7];\n\tstruct pidff_usage set_envelope[5];\n\tstruct pidff_usage set_condition[8];\n\tstruct pidff_usage set_periodic[5];\n\tstruct pidff_usage set_constant[2];\n\tstruct pidff_usage set_ramp[3];\n\tstruct pidff_usage device_gain[1];\n\tstruct pidff_usage block_load[2];\n\tstruct pidff_usage pool[3];\n\tstruct pidff_usage effect_operation[2];\n\tstruct pidff_usage block_free[1];\n\tstruct hid_field *create_new_effect_type;\n\tstruct hid_field *set_effect_type;\n\tstruct hid_field *effect_direction;\n\tstruct hid_field *device_control;\n\tstruct hid_field *block_load_status;\n\tstruct hid_field *effect_operation_status;\n\tint control_id[2];\n\tint type_id[11];\n\tint status_id[2];\n\tint operation_id[2];\n\tint pid_id[64];\n};\n\nstruct ts_dmi_data {\n\tstruct efi_embedded_fw_desc embedded_fw;\n\tconst char *acpi_name;\n\tconst struct property_entry *properties;\n};\n\nenum ppfear_regs {\n\tSPT_PMC_XRAM_PPFEAR0A = 1424,\n\tSPT_PMC_XRAM_PPFEAR0B = 1425,\n\tSPT_PMC_XRAM_PPFEAR0C = 1426,\n\tSPT_PMC_XRAM_PPFEAR0D = 1427,\n\tSPT_PMC_XRAM_PPFEAR1A = 1428,\n};\n\nstruct pmc_bit_map {\n\tconst char *name;\n\tu32 bit_mask;\n};\n\nstruct pmc_reg_map {\n\tconst struct pmc_bit_map **pfear_sts;\n\tconst struct pmc_bit_map *mphy_sts;\n\tconst struct pmc_bit_map *pll_sts;\n\tconst struct pmc_bit_map **slps0_dbg_maps;\n\tconst struct pmc_bit_map *ltr_show_sts;\n\tconst struct pmc_bit_map *msr_sts;\n\tconst struct pmc_bit_map **lpm_sts;\n\tconst u32 slp_s0_offset;\n\tconst int slp_s0_res_counter_step;\n\tconst u32 ltr_ignore_offset;\n\tconst int regmap_length;\n\tconst u32 ppfear0_offset;\n\tconst int ppfear_buckets;\n\tconst u32 pm_cfg_offset;\n\tconst int pm_read_disable_bit;\n\tconst u32 slps0_dbg_offset;\n\tconst u32 ltr_ignore_max;\n\tconst u32 pm_vric1_offset;\n\tconst char **lpm_modes;\n\tconst u32 lpm_en_offset;\n\tconst u32 lpm_residency_offset;\n\tconst u32 lpm_status_offset;\n\tconst u32 lpm_live_status_offset;\n};\n\nstruct pmc_dev {\n\tu32 base_addr;\n\tvoid *regbase;\n\tconst struct pmc_reg_map *map;\n\tstruct dentry *dbgfs_dir;\n\tint pmc_xram_read_bit;\n\tstruct mutex lock;\n\tbool check_counters;\n\tu64 pc10_counter;\n\tu64 s0ix_counter;\n};\n\nstruct intel_scu_ipc_data {\n\tstruct resource mem;\n\tint irq;\n};\n\nstruct intel_scu_ipc_dev___2 {\n\tstruct device dev;\n\tstruct resource mem;\n\tstruct module *owner;\n\tint irq;\n\tvoid *ipc_base;\n\tstruct completion cmd_complete;\n};\n\nstruct intel_scu_ipc_devres {\n\tstruct intel_scu_ipc_dev___2 *scu;\n};\n\nstruct pmc_reg_map___2 {\n\tconst struct pmc_bit_map *d3_sts_0;\n\tconst struct pmc_bit_map *d3_sts_1;\n\tconst struct pmc_bit_map *func_dis;\n\tconst struct pmc_bit_map *func_dis_2;\n\tconst struct pmc_bit_map *pss;\n};\n\nstruct pmc_data {\n\tconst struct pmc_reg_map___2 *map;\n\tconst struct pmc_clk *clks;\n};\n\nstruct pmc_dev___2 {\n\tu32 base_addr;\n\tvoid *regmap;\n\tconst struct pmc_reg_map___2 *map;\n\tstruct dentry *dbgfs_dir;\n\tbool init;\n};\n\nstruct acpi_table_pcct {\n\tstruct acpi_table_header header;\n\tu32 flags;\n\tu64 reserved;\n};\n\nenum acpi_pcct_type {\n\tACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,\n\tACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,\n\tACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,\n\tACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,\n\tACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,\n\tACPI_PCCT_TYPE_RESERVED = 5,\n};\n\nstruct acpi_pcct_subspace {\n\tstruct acpi_subtable_header header;\n\tu8 reserved[6];\n\tu64 base_address;\n\tu64 length;\n\tstruct acpi_generic_address doorbell_register;\n\tu64 preserve_mask;\n\tu64 write_mask;\n\tu32 latency;\n\tu32 max_access_rate;\n\tu16 min_turnaround_time;\n} __attribute__((packed));\n\nstruct acpi_pcct_hw_reduced_type2 {\n\tstruct acpi_subtable_header header;\n\tu32 platform_interrupt;\n\tu8 flags;\n\tu8 reserved;\n\tu64 base_address;\n\tu64 length;\n\tstruct acpi_generic_address doorbell_register;\n\tu64 preserve_mask;\n\tu64 write_mask;\n\tu32 latency;\n\tu32 max_access_rate;\n\tu16 min_turnaround_time;\n\tstruct acpi_generic_address platform_ack_register;\n\tu64 ack_preserve_mask;\n\tu64 ack_write_mask;\n} __attribute__((packed));\n\nstruct hwspinlock___2;\n\nstruct hwspinlock_ops {\n\tint (*trylock)(struct hwspinlock___2 *);\n\tvoid (*unlock)(struct hwspinlock___2 *);\n\tvoid (*relax)(struct hwspinlock___2 *);\n};\n\nstruct hwspinlock_device;\n\nstruct hwspinlock___2 {\n\tstruct hwspinlock_device *bank;\n\tspinlock_t lock;\n\tvoid *priv;\n};\n\nstruct hwspinlock_device {\n\tstruct device *dev;\n\tconst struct hwspinlock_ops *ops;\n\tint base_id;\n\tint num_locks;\n\tstruct hwspinlock___2 lock[0];\n};\n\nstruct resource_table {\n\tu32 ver;\n\tu32 num;\n\tu32 reserved[2];\n\tu32 offset[0];\n};\n\nstruct fw_rsc_hdr {\n\tu32 type;\n\tu8 data[0];\n};\n\nenum fw_resource_type {\n\tRSC_CARVEOUT = 0,\n\tRSC_DEVMEM = 1,\n\tRSC_TRACE = 2,\n\tRSC_VDEV = 3,\n\tRSC_LAST = 4,\n\tRSC_VENDOR_START = 128,\n\tRSC_VENDOR_END = 512,\n};\n\nstruct fw_rsc_carveout {\n\tu32 da;\n\tu32 pa;\n\tu32 len;\n\tu32 flags;\n\tu32 reserved;\n\tu8 name[32];\n};\n\nstruct fw_rsc_devmem {\n\tu32 da;\n\tu32 pa;\n\tu32 len;\n\tu32 flags;\n\tu32 reserved;\n\tu8 name[32];\n};\n\nstruct fw_rsc_trace {\n\tu32 da;\n\tu32 len;\n\tu32 reserved;\n\tu8 name[32];\n};\n\nstruct fw_rsc_vdev_vring {\n\tu32 da;\n\tu32 align;\n\tu32 num;\n\tu32 notifyid;\n\tu32 pa;\n};\n\nstruct fw_rsc_vdev {\n\tu32 id;\n\tu32 notifyid;\n\tu32 dfeatures;\n\tu32 gfeatures;\n\tu32 config_len;\n\tu8 status;\n\tu8 num_of_vrings;\n\tu8 reserved[2];\n\tstruct fw_rsc_vdev_vring vring[0];\n};\n\nstruct rproc;\n\nstruct rproc_mem_entry {\n\tvoid *va;\n\tdma_addr_t dma;\n\tsize_t len;\n\tu32 da;\n\tvoid *priv;\n\tchar name[32];\n\tstruct list_head node;\n\tu32 rsc_offset;\n\tu32 flags;\n\tu32 of_resm_idx;\n\tint (*alloc)(struct rproc *, struct rproc_mem_entry *);\n\tint (*release)(struct rproc *, struct rproc_mem_entry *);\n};\n\nenum rproc_dump_mechanism {\n\tRPROC_COREDUMP_DISABLED = 0,\n\tRPROC_COREDUMP_ENABLED = 1,\n\tRPROC_COREDUMP_INLINE = 2,\n};\n\nstruct rproc_ops;\n\nstruct rproc {\n\tstruct list_head node;\n\tstruct iommu_domain *domain;\n\tconst char *name;\n\tconst char *firmware;\n\tvoid *priv;\n\tstruct rproc_ops *ops;\n\tstruct device dev;\n\tatomic_t power;\n\tunsigned int state;\n\tenum rproc_dump_mechanism dump_conf;\n\tstruct mutex lock;\n\tstruct dentry *dbg_dir;\n\tstruct list_head traces;\n\tint num_traces;\n\tstruct list_head carveouts;\n\tstruct list_head mappings;\n\tu64 bootaddr;\n\tstruct list_head rvdevs;\n\tstruct list_head subdevs;\n\tstruct idr notifyids;\n\tint index;\n\tstruct work_struct crash_handler;\n\tunsigned int crash_cnt;\n\tbool recovery_disabled;\n\tint max_notifyid;\n\tstruct resource_table *table_ptr;\n\tstruct resource_table *cached_table;\n\tsize_t table_sz;\n\tbool has_iommu;\n\tbool auto_boot;\n\tbool autonomous;\n\tstruct list_head dump_segments;\n\tint nb_vdev;\n\tu8 elf_class;\n\tu16 elf_machine;\n\tstruct cdev cdev;\n\tbool cdev_put_on_release;\n};\n\nenum rsc_handling_status {\n\tRSC_HANDLED = 0,\n\tRSC_IGNORED = 1,\n};\n\nstruct rproc_ops {\n\tint (*prepare)(struct rproc *);\n\tint (*unprepare)(struct rproc *);\n\tint (*start)(struct rproc *);\n\tint (*stop)(struct rproc *);\n\tint (*attach)(struct rproc *);\n\tvoid (*kick)(struct rproc *, int);\n\tvoid * (*da_to_va)(struct rproc *, u64, size_t);\n\tint (*parse_fw)(struct rproc *, const struct firmware *);\n\tint (*handle_rsc)(struct rproc *, u32, void *, int, int);\n\tstruct resource_table * (*find_loaded_rsc_table)(struct rproc *, const struct firmware *);\n\tint (*load)(struct rproc *, const struct firmware *);\n\tint (*sanity_check)(struct rproc *, const struct firmware *);\n\tu64 (*get_boot_addr)(struct rproc *, const struct firmware *);\n\tlong unsigned int (*panic)(struct rproc *);\n\tvoid (*coredump)(struct rproc *);\n};\n\nenum rproc_state {\n\tRPROC_OFFLINE = 0,\n\tRPROC_SUSPENDED = 1,\n\tRPROC_RUNNING = 2,\n\tRPROC_CRASHED = 3,\n\tRPROC_DELETED = 4,\n\tRPROC_DETACHED = 5,\n\tRPROC_LAST = 6,\n};\n\nenum rproc_crash_type {\n\tRPROC_MMUFAULT = 0,\n\tRPROC_WATCHDOG = 1,\n\tRPROC_FATAL_ERROR = 2,\n};\n\nstruct rproc_subdev {\n\tstruct list_head node;\n\tint (*prepare)(struct rproc_subdev *);\n\tint (*start)(struct rproc_subdev *);\n\tvoid (*stop)(struct rproc_subdev *, bool);\n\tvoid (*unprepare)(struct rproc_subdev *);\n};\n\nstruct rproc_vdev;\n\nstruct rproc_vring {\n\tvoid *va;\n\tint len;\n\tu32 da;\n\tu32 align;\n\tint notifyid;\n\tstruct rproc_vdev *rvdev;\n\tstruct virtqueue *vq;\n};\n\nstruct rproc_vdev {\n\tstruct kref refcount;\n\tstruct rproc_subdev subdev;\n\tstruct device dev;\n\tunsigned int id;\n\tstruct list_head node;\n\tstruct rproc *rproc;\n\tstruct rproc_vring vring[2];\n\tu32 rsc_offset;\n\tu32 index;\n};\n\nstruct rproc_debug_trace {\n\tstruct rproc *rproc;\n\tstruct dentry *tfile;\n\tstruct list_head node;\n\tstruct rproc_mem_entry trace_mem;\n};\n\ntypedef int (*rproc_handle_resource_t)(struct rproc *, void *, int, int);\n\nstruct rproc_dump_segment {\n\tstruct list_head node;\n\tdma_addr_t da;\n\tsize_t size;\n\tvoid *priv;\n\tvoid (*dump)(struct rproc *, struct rproc_dump_segment *, void *, size_t, size_t);\n\tloff_t offset;\n};\n\nstruct rproc_coredump_state {\n\tstruct rproc *rproc;\n\tvoid *header;\n\tstruct completion dump_done;\n};\n\nstruct sdw_device_id {\n\t__u16 mfg_id;\n\t__u16 part_id;\n\t__u8 sdw_version;\n\t__u8 class_id;\n\tkernel_ulong_t driver_data;\n};\n\nenum sdw_slave_status {\n\tSDW_SLAVE_UNATTACHED = 0,\n\tSDW_SLAVE_ATTACHED = 1,\n\tSDW_SLAVE_ALERT = 2,\n\tSDW_SLAVE_RESERVED = 3,\n};\n\nenum sdw_clk_stop_type {\n\tSDW_CLK_PRE_PREPARE = 0,\n\tSDW_CLK_POST_PREPARE = 1,\n\tSDW_CLK_PRE_DEPREPARE = 2,\n\tSDW_CLK_POST_DEPREPARE = 3,\n};\n\nenum sdw_command_response {\n\tSDW_CMD_OK = 0,\n\tSDW_CMD_IGNORED = 1,\n\tSDW_CMD_FAIL = 2,\n\tSDW_CMD_TIMEOUT = 3,\n\tSDW_CMD_FAIL_OTHER = 4,\n};\n\nenum sdw_clk_stop_reset_behave {\n\tSDW_CLK_STOP_KEEP_STATUS = 1,\n};\n\nenum sdw_p15_behave {\n\tSDW_P15_READ_IGNORED = 0,\n\tSDW_P15_CMD_OK = 1,\n};\n\nenum sdw_dpn_type {\n\tSDW_DPN_FULL = 0,\n\tSDW_DPN_SIMPLE = 1,\n\tSDW_DPN_REDUCED = 2,\n};\n\nenum sdw_clk_stop_mode {\n\tSDW_CLK_STOP_MODE0 = 0,\n\tSDW_CLK_STOP_MODE1 = 1,\n};\n\nstruct sdw_dp0_prop {\n\tu32 max_word;\n\tu32 min_word;\n\tu32 num_words;\n\tu32 *words;\n\tbool BRA_flow_controlled;\n\tbool simple_ch_prep_sm;\n\tbool imp_def_interrupts;\n};\n\nstruct sdw_dpn_audio_mode {\n\tu32 bus_min_freq;\n\tu32 bus_max_freq;\n\tu32 bus_num_freq;\n\tu32 *bus_freq;\n\tu32 max_freq;\n\tu32 min_freq;\n\tu32 num_freq;\n\tu32 *freq;\n\tu32 prep_ch_behave;\n\tu32 glitchless;\n};\n\nstruct sdw_dpn_prop {\n\tu32 num;\n\tu32 max_word;\n\tu32 min_word;\n\tu32 num_words;\n\tu32 *words;\n\tenum sdw_dpn_type type;\n\tu32 max_grouping;\n\tbool simple_ch_prep_sm;\n\tu32 ch_prep_timeout;\n\tu32 imp_def_interrupts;\n\tu32 max_ch;\n\tu32 min_ch;\n\tu32 num_channels;\n\tu32 *channels;\n\tu32 num_ch_combinations;\n\tu32 *ch_combinations;\n\tu32 modes;\n\tu32 max_async_buffer;\n\tbool block_pack_mode;\n\tbool read_only_wordlength;\n\tu32 port_encoding;\n\tstruct sdw_dpn_audio_mode *audio_modes;\n};\n\nstruct sdw_slave_prop {\n\tu32 mipi_revision;\n\tbool wake_capable;\n\tbool test_mode_capable;\n\tbool clk_stop_mode1;\n\tbool simple_clk_stop_capable;\n\tu32 clk_stop_timeout;\n\tu32 ch_prep_timeout;\n\tenum sdw_clk_stop_reset_behave reset_behave;\n\tbool high_PHY_capable;\n\tbool paging_support;\n\tbool bank_delay_support;\n\tenum sdw_p15_behave p15_behave;\n\tbool lane_control_support;\n\tu32 master_count;\n\tu32 source_ports;\n\tu32 sink_ports;\n\tstruct sdw_dp0_prop *dp0_prop;\n\tstruct sdw_dpn_prop *src_dpn_prop;\n\tstruct sdw_dpn_prop *sink_dpn_prop;\n\tu8 scp_int1_mask;\n\tu32 quirks;\n\tbool is_sdca;\n};\n\nstruct sdw_master_prop {\n\tu32 revision;\n\tu32 clk_stop_modes;\n\tu32 max_clk_freq;\n\tu32 num_clk_gears;\n\tu32 *clk_gears;\n\tu32 num_clk_freq;\n\tu32 *clk_freq;\n\tu32 default_frame_rate;\n\tu32 default_row;\n\tu32 default_col;\n\tbool dynamic_frame;\n\tu32 err_threshold;\n\tu32 mclk_freq;\n\tbool hw_disabled;\n};\n\nstruct sdw_slave_id {\n\t__u16 mfg_id;\n\t__u16 part_id;\n\t__u8 class_id;\n\t__u8 unique_id;\n\t__u8 sdw_version: 4;\n};\n\nstruct sdw_slave_intr_status {\n\tbool sdca_cascade;\n\tu8 control_port;\n\tu8 port[15];\n};\n\nenum sdw_reg_bank {\n\tSDW_BANK0 = 0,\n\tSDW_BANK1 = 1,\n};\n\nstruct sdw_prepare_ch {\n\tunsigned int num;\n\tunsigned int ch_mask;\n\tbool prepare;\n\tunsigned int bank;\n};\n\nenum sdw_port_prep_ops {\n\tSDW_OPS_PORT_PRE_PREP = 0,\n\tSDW_OPS_PORT_PREP = 1,\n\tSDW_OPS_PORT_POST_PREP = 2,\n};\n\nstruct sdw_bus_params {\n\tenum sdw_reg_bank curr_bank;\n\tenum sdw_reg_bank next_bank;\n\tunsigned int max_dr_freq;\n\tunsigned int curr_dr_freq;\n\tunsigned int bandwidth;\n\tunsigned int col;\n\tunsigned int row;\n\tint s_data_mode;\n\tint m_data_mode;\n};\n\nstruct sdw_slave;\n\nstruct sdw_slave_ops {\n\tint (*read_prop)(struct sdw_slave *);\n\tint (*interrupt_callback)(struct sdw_slave *, struct sdw_slave_intr_status *);\n\tint (*update_status)(struct sdw_slave *, enum sdw_slave_status);\n\tint (*bus_config)(struct sdw_slave *, struct sdw_bus_params *);\n\tint (*port_prep)(struct sdw_slave *, struct sdw_prepare_ch *, enum sdw_port_prep_ops);\n\tint (*get_clk_stop_mode)(struct sdw_slave *);\n\tint (*clk_stop)(struct sdw_slave *, enum sdw_clk_stop_mode, enum sdw_clk_stop_type);\n};\n\nstruct sdw_bus;\n\nstruct sdw_slave {\n\tstruct sdw_slave_id id;\n\tstruct device dev;\n\tenum sdw_slave_status status;\n\tstruct sdw_bus *bus;\n\tconst struct sdw_slave_ops *ops;\n\tstruct sdw_slave_prop prop;\n\tstruct dentry *debugfs;\n\tstruct list_head node;\n\tstruct completion port_ready[15];\n\tenum sdw_clk_stop_mode curr_clk_stop_mode;\n\tu16 dev_num;\n\tu16 dev_num_sticky;\n\tbool probed;\n\tstruct completion probe_complete;\n\tstruct completion enumeration_complete;\n\tstruct completion initialization_complete;\n\tu32 unattach_request;\n\tbool first_interrupt_done;\n};\n\nstruct sdw_msg;\n\nstruct sdw_defer {\n\tint length;\n\tstruct completion complete;\n\tstruct sdw_msg *msg;\n};\n\nstruct sdw_master_device;\n\nstruct sdw_master_ops;\n\nstruct sdw_master_port_ops;\n\nstruct sdw_bus {\n\tstruct device *dev;\n\tstruct sdw_master_device *md;\n\tunsigned int link_id;\n\tint id;\n\tstruct list_head slaves;\n\tlong unsigned int assigned[1];\n\tstruct mutex bus_lock;\n\tstruct mutex msg_lock;\n\tint (*compute_params)(struct sdw_bus *);\n\tconst struct sdw_master_ops *ops;\n\tconst struct sdw_master_port_ops *port_ops;\n\tstruct sdw_bus_params params;\n\tstruct sdw_master_prop prop;\n\tstruct list_head m_rt_list;\n\tstruct dentry *debugfs;\n\tstruct sdw_defer defer_msg;\n\tunsigned int clk_stop_timeout;\n\tu32 bank_switch_timeout;\n\tbool multi_link;\n\tint hw_sync_min_links;\n};\n\nstruct sdw_master_device {\n\tstruct device dev;\n\tstruct sdw_bus *bus;\n};\n\nstruct sdw_driver {\n\tconst char *name;\n\tint (*probe)(struct sdw_slave *, const struct sdw_device_id *);\n\tint (*remove)(struct sdw_slave *);\n\tvoid (*shutdown)(struct sdw_slave *);\n\tconst struct sdw_device_id *id_table;\n\tconst struct sdw_slave_ops *ops;\n\tstruct device_driver driver;\n};\n\nstruct sdw_port_params {\n\tunsigned int num;\n\tunsigned int bps;\n\tunsigned int flow_mode;\n\tunsigned int data_mode;\n};\n\nstruct sdw_transport_params {\n\tbool blk_grp_ctrl_valid;\n\tunsigned int port_num;\n\tunsigned int blk_grp_ctrl;\n\tunsigned int sample_interval;\n\tunsigned int offset1;\n\tunsigned int offset2;\n\tunsigned int hstart;\n\tunsigned int hstop;\n\tunsigned int blk_pkg_mode;\n\tunsigned int lane_ctrl;\n};\n\nstruct sdw_enable_ch {\n\tunsigned int port_num;\n\tunsigned int ch_mask;\n\tbool enable;\n};\n\nstruct sdw_master_port_ops {\n\tint (*dpn_set_port_params)(struct sdw_bus *, struct sdw_port_params *, unsigned int);\n\tint (*dpn_set_port_transport_params)(struct sdw_bus *, struct sdw_transport_params *, enum sdw_reg_bank);\n\tint (*dpn_port_prep)(struct sdw_bus *, struct sdw_prepare_ch *);\n\tint (*dpn_port_enable_ch)(struct sdw_bus *, struct sdw_enable_ch *, unsigned int);\n};\n\nstruct sdw_msg {\n\tu16 addr;\n\tu16 len;\n\tu8 dev_num;\n\tu8 addr_page1;\n\tu8 addr_page2;\n\tu8 flags;\n\tu8 *buf;\n\tbool ssp_sync;\n\tbool page;\n};\n\nstruct sdw_master_ops {\n\tint (*read_prop)(struct sdw_bus *);\n\tenum sdw_command_response (*xfer_msg)(struct sdw_bus *, struct sdw_msg *);\n\tenum sdw_command_response (*xfer_msg_defer)(struct sdw_bus *, struct sdw_msg *, struct sdw_defer *);\n\tenum sdw_command_response (*reset_page_addr)(struct sdw_bus *, unsigned int);\n\tint (*set_bus_conf)(struct sdw_bus *, struct sdw_bus_params *);\n\tint (*pre_bank_switch)(struct sdw_bus *);\n\tint (*post_bank_switch)(struct sdw_bus *);\n};\n\nenum sdw_port_data_mode {\n\tSDW_PORT_DATA_MODE_NORMAL = 0,\n\tSDW_PORT_DATA_MODE_PRBS = 1,\n\tSDW_PORT_DATA_MODE_STATIC_0 = 2,\n\tSDW_PORT_DATA_MODE_STATIC_1 = 3,\n};\n\nenum {\n\tSDW_MSG_FLAG_READ = 0,\n\tSDW_MSG_FLAG_WRITE = 1,\n};\n\nenum sdw_stream_type {\n\tSDW_STREAM_PCM = 0,\n\tSDW_STREAM_PDM = 1,\n};\n\nenum sdw_data_direction {\n\tSDW_DATA_DIR_RX = 0,\n\tSDW_DATA_DIR_TX = 1,\n};\n\nstruct sdw_port_config {\n\tunsigned int num;\n\tunsigned int ch_mask;\n};\n\nstruct sdw_stream_config {\n\tunsigned int frame_rate;\n\tunsigned int ch_count;\n\tunsigned int bps;\n\tenum sdw_data_direction direction;\n\tenum sdw_stream_type type;\n};\n\nenum sdw_stream_state {\n\tSDW_STREAM_ALLOCATED = 0,\n\tSDW_STREAM_CONFIGURED = 1,\n\tSDW_STREAM_PREPARED = 2,\n\tSDW_STREAM_ENABLED = 3,\n\tSDW_STREAM_DISABLED = 4,\n\tSDW_STREAM_DEPREPARED = 5,\n\tSDW_STREAM_RELEASED = 6,\n};\n\nstruct sdw_stream_params {\n\tunsigned int rate;\n\tunsigned int ch_count;\n\tunsigned int bps;\n};\n\nstruct sdw_stream_runtime {\n\tconst char *name;\n\tstruct sdw_stream_params params;\n\tenum sdw_stream_state state;\n\tenum sdw_stream_type type;\n\tstruct list_head master_list;\n\tint m_rt_count;\n};\n\nstruct snd_shutdown_f_ops;\n\nstruct snd_mixer_oss;\n\nstruct snd_info_entry;\n\nstruct snd_card {\n\tint number;\n\tchar id[16];\n\tchar driver[16];\n\tchar shortname[32];\n\tchar longname[80];\n\tchar irq_descr[32];\n\tchar mixername[80];\n\tchar components[128];\n\tstruct module *module;\n\tvoid *private_data;\n\tvoid (*private_free)(struct snd_card *);\n\tstruct list_head devices;\n\tstruct device ctl_dev;\n\tunsigned int last_numid;\n\tstruct rw_semaphore controls_rwsem;\n\trwlock_t ctl_files_rwlock;\n\tint controls_count;\n\tint user_ctl_count;\n\tstruct list_head controls;\n\tstruct list_head ctl_files;\n\tstruct snd_info_entry *proc_root;\n\tstruct proc_dir_entry *proc_root_link;\n\tstruct list_head files_list;\n\tstruct snd_shutdown_f_ops *s_f_ops;\n\tspinlock_t files_lock;\n\tint shutdown;\n\tstruct completion *release_completion;\n\tstruct device *dev;\n\tstruct device card_dev;\n\tconst struct attribute_group *dev_groups[4];\n\tbool registered;\n\tint sync_irq;\n\twait_queue_head_t remove_sleep;\n\tsize_t total_pcm_alloc_bytes;\n\tstruct mutex memory_mutex;\n\tunsigned int power_state;\n\twait_queue_head_t power_sleep;\n\tstruct snd_mixer_oss *mixer_oss;\n\tint mixer_oss_change_count;\n};\n\nstruct snd_info_buffer;\n\nstruct snd_info_entry_text {\n\tvoid (*read)(struct snd_info_entry *, struct snd_info_buffer *);\n\tvoid (*write)(struct snd_info_entry *, struct snd_info_buffer *);\n};\n\nstruct snd_info_entry_ops;\n\nstruct snd_info_entry {\n\tconst char *name;\n\tumode_t mode;\n\tlong int size;\n\tshort unsigned int content;\n\tunion {\n\t\tstruct snd_info_entry_text text;\n\t\tconst struct snd_info_entry_ops *ops;\n\t} c;\n\tstruct snd_info_entry *parent;\n\tstruct module *module;\n\tvoid *private_data;\n\tvoid (*private_free)(struct snd_info_entry *);\n\tstruct proc_dir_entry *p;\n\tstruct mutex access;\n\tstruct list_head children;\n\tstruct list_head list;\n};\n\nstruct snd_aes_iec958 {\n\tunsigned char status[24];\n\tunsigned char subcode[147];\n\tunsigned char pad;\n\tunsigned char dig_subframe[4];\n};\n\ntypedef long unsigned int snd_pcm_uframes_t;\n\ntypedef long int snd_pcm_sframes_t;\n\nenum {\n\tSNDRV_PCM_STREAM_PLAYBACK = 0,\n\tSNDRV_PCM_STREAM_CAPTURE = 1,\n\tSNDRV_PCM_STREAM_LAST = 1,\n};\n\ntypedef int snd_pcm_access_t;\n\ntypedef int snd_pcm_format_t;\n\ntypedef int snd_pcm_subformat_t;\n\ntypedef int snd_pcm_state_t;\n\nunion snd_pcm_sync_id {\n\tunsigned char id[16];\n\tshort unsigned int id16[8];\n\tunsigned int id32[4];\n};\n\nstruct snd_interval {\n\tunsigned int min;\n\tunsigned int max;\n\tunsigned int openmin: 1;\n\tunsigned int openmax: 1;\n\tunsigned int integer: 1;\n\tunsigned int empty: 1;\n};\n\nstruct snd_mask {\n\t__u32 bits[8];\n};\n\nstruct snd_pcm_hw_params {\n\tunsigned int flags;\n\tstruct snd_mask masks[3];\n\tstruct snd_mask mres[5];\n\tstruct snd_interval intervals[12];\n\tstruct snd_interval ires[9];\n\tunsigned int rmask;\n\tunsigned int cmask;\n\tunsigned int info;\n\tunsigned int msbits;\n\tunsigned int rate_num;\n\tunsigned int rate_den;\n\tsnd_pcm_uframes_t fifo_size;\n\tunsigned char reserved[64];\n};\n\ntypedef char __pad_before_uframe[0];\n\ntypedef char __pad_after_uframe[0];\n\nstruct snd_pcm_mmap_status {\n\tsnd_pcm_state_t state;\n\t__u32 pad1;\n\t__pad_before_uframe __pad1;\n\tsnd_pcm_uframes_t hw_ptr;\n\t__pad_after_uframe __pad2;\n\tstruct __kernel_timespec tstamp;\n\tsnd_pcm_state_t suspended_state;\n\t__u32 pad3;\n\tstruct __kernel_timespec audio_tstamp;\n};\n\nstruct snd_pcm_mmap_control {\n\t__pad_before_uframe __pad1;\n\tsnd_pcm_uframes_t appl_ptr;\n\t__pad_before_uframe __pad2;\n\t__pad_before_uframe __pad3;\n\tsnd_pcm_uframes_t avail_min;\n\t__pad_after_uframe __pad4;\n};\n\ntypedef int snd_ctl_elem_type_t;\n\ntypedef int snd_ctl_elem_iface_t;\n\nstruct snd_ctl_elem_id {\n\tunsigned int numid;\n\tsnd_ctl_elem_iface_t iface;\n\tunsigned int device;\n\tunsigned int subdevice;\n\tunsigned char name[44];\n\tunsigned int index;\n};\n\nstruct snd_ctl_elem_info {\n\tstruct snd_ctl_elem_id id;\n\tsnd_ctl_elem_type_t type;\n\tunsigned int access;\n\tunsigned int count;\n\t__kernel_pid_t owner;\n\tunion {\n\t\tstruct {\n\t\t\tlong int min;\n\t\t\tlong int max;\n\t\t\tlong int step;\n\t\t} integer;\n\t\tstruct {\n\t\t\tlong long int min;\n\t\t\tlong long int max;\n\t\t\tlong long int step;\n\t\t} integer64;\n\t\tstruct {\n\t\t\tunsigned int items;\n\t\t\tunsigned int item;\n\t\t\tchar name[64];\n\t\t\t__u64 names_ptr;\n\t\t\tunsigned int names_length;\n\t\t} enumerated;\n\t\tunsigned char reserved[128];\n\t} value;\n\tunsigned char reserved[64];\n};\n\nstruct snd_ctl_elem_value {\n\tstruct snd_ctl_elem_id id;\n\tunsigned int indirect: 1;\n\tunion {\n\t\tunion {\n\t\t\tlong int value[128];\n\t\t\tlong int *value_ptr;\n\t\t} integer;\n\t\tunion {\n\t\t\tlong long int value[64];\n\t\t\tlong long int *value_ptr;\n\t\t} integer64;\n\t\tunion {\n\t\t\tunsigned int item[128];\n\t\t\tunsigned int *item_ptr;\n\t\t} enumerated;\n\t\tunion {\n\t\t\tunsigned char data[512];\n\t\t\tunsigned char *data_ptr;\n\t\t} bytes;\n\t\tstruct snd_aes_iec958 iec958;\n\t} value;\n\tunsigned char reserved[128];\n};\n\nstruct snd_dma_device {\n\tint type;\n\tstruct device *dev;\n};\n\nstruct snd_dma_buffer {\n\tstruct snd_dma_device dev;\n\tunsigned char *area;\n\tdma_addr_t addr;\n\tsize_t bytes;\n\tvoid *private_data;\n};\n\nstruct snd_pcm_oss_setup {\n\tchar *task_name;\n\tunsigned int disable: 1;\n\tunsigned int direct: 1;\n\tunsigned int block: 1;\n\tunsigned int nonblock: 1;\n\tunsigned int partialfrag: 1;\n\tunsigned int nosilence: 1;\n\tunsigned int buggyptr: 1;\n\tunsigned int periods;\n\tunsigned int period_size;\n\tstruct snd_pcm_oss_setup *next;\n};\n\nstruct snd_pcm_plugin;\n\nstruct snd_pcm_oss_runtime {\n\tunsigned int params: 1;\n\tunsigned int prepare: 1;\n\tunsigned int trigger: 1;\n\tunsigned int sync_trigger: 1;\n\tint rate;\n\tint format;\n\tunsigned int channels;\n\tunsigned int fragshift;\n\tunsigned int maxfrags;\n\tunsigned int subdivision;\n\tsize_t period_bytes;\n\tsize_t period_frames;\n\tsize_t period_ptr;\n\tunsigned int periods;\n\tsize_t buffer_bytes;\n\tsize_t bytes;\n\tsize_t mmap_bytes;\n\tchar *buffer;\n\tsize_t buffer_used;\n\tstruct mutex params_lock;\n\tatomic_t rw_ref;\n\tstruct snd_pcm_plugin *plugin_first;\n\tstruct snd_pcm_plugin *plugin_last;\n\tunsigned int prev_hw_ptr_period;\n};\n\nstruct snd_timer;\n\nstruct snd_pcm_group {\n\tspinlock_t lock;\n\tstruct mutex mutex;\n\tstruct list_head substreams;\n\trefcount_t refs;\n};\n\nstruct snd_pcm_oss_substream {\n\tunsigned int oss: 1;\n\tstruct snd_pcm_oss_setup setup;\n};\n\nstruct snd_pcm;\n\nstruct snd_pcm_str;\n\nstruct snd_pcm_ops;\n\nstruct snd_pcm_runtime;\n\nstruct snd_pcm_substream {\n\tstruct snd_pcm *pcm;\n\tstruct snd_pcm_str *pstr;\n\tvoid *private_data;\n\tint number;\n\tchar name[32];\n\tint stream;\n\tstruct pm_qos_request latency_pm_qos_req;\n\tsize_t buffer_bytes_max;\n\tstruct snd_dma_buffer dma_buffer;\n\tsize_t dma_max;\n\tconst struct snd_pcm_ops *ops;\n\tstruct snd_pcm_runtime *runtime;\n\tstruct snd_timer *timer;\n\tunsigned int timer_running: 1;\n\tlong int wait_time;\n\tstruct snd_pcm_substream *next;\n\tstruct list_head link_list;\n\tstruct snd_pcm_group self_group;\n\tstruct snd_pcm_group *group;\n\tint ref_count;\n\tatomic_t mmap_count;\n\tunsigned int f_flags;\n\tvoid (*pcm_release)(struct snd_pcm_substream *);\n\tstruct pid *pid;\n\tstruct snd_pcm_oss_substream oss;\n\tstruct snd_info_entry *proc_root;\n\tunsigned int hw_opened: 1;\n\tunsigned int managed_buffer_alloc: 1;\n};\n\nstruct snd_pcm_oss_stream {\n\tstruct snd_pcm_oss_setup *setup_list;\n\tstruct mutex setup_mutex;\n\tstruct snd_info_entry *proc_entry;\n};\n\nstruct snd_pcm_oss {\n\tint reg;\n\tunsigned int reg_mask;\n};\n\nstruct snd_pcm_hardware {\n\tunsigned int info;\n\tu64 formats;\n\tunsigned int rates;\n\tunsigned int rate_min;\n\tunsigned int rate_max;\n\tunsigned int channels_min;\n\tunsigned int channels_max;\n\tsize_t buffer_bytes_max;\n\tsize_t period_bytes_min;\n\tsize_t period_bytes_max;\n\tunsigned int periods_min;\n\tunsigned int periods_max;\n\tsize_t fifo_size;\n};\n\nstruct snd_pcm_audio_tstamp_config;\n\nstruct snd_pcm_audio_tstamp_report;\n\nstruct snd_pcm_ops {\n\tint (*open)(struct snd_pcm_substream *);\n\tint (*close)(struct snd_pcm_substream *);\n\tint (*ioctl)(struct snd_pcm_substream *, unsigned int, void *);\n\tint (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);\n\tint (*hw_free)(struct snd_pcm_substream *);\n\tint (*prepare)(struct snd_pcm_substream *);\n\tint (*trigger)(struct snd_pcm_substream *, int);\n\tint (*sync_stop)(struct snd_pcm_substream *);\n\tsnd_pcm_uframes_t (*pointer)(struct snd_pcm_substream *);\n\tint (*get_time_info)(struct snd_pcm_substream *, struct timespec64 *, struct timespec64 *, struct snd_pcm_audio_tstamp_config *, struct snd_pcm_audio_tstamp_report *);\n\tint (*fill_silence)(struct snd_pcm_substream *, int, long unsigned int, long unsigned int);\n\tint (*copy_user)(struct snd_pcm_substream *, int, long unsigned int, void *, long unsigned int);\n\tint (*copy_kernel)(struct snd_pcm_substream *, int, long unsigned int, void *, long unsigned int);\n\tstruct page * (*page)(struct snd_pcm_substream *, long unsigned int);\n\tint (*mmap)(struct snd_pcm_substream *, struct vm_area_struct *);\n\tint (*ack)(struct snd_pcm_substream *);\n};\n\nstruct snd_pcm_audio_tstamp_config {\n\tu32 type_requested: 4;\n\tu32 report_delay: 1;\n};\n\nstruct snd_pcm_audio_tstamp_report {\n\tu32 valid: 1;\n\tu32 actual_type: 4;\n\tu32 accuracy_report: 1;\n\tu32 accuracy;\n};\n\nstruct snd_pcm_hw_rule;\n\ntypedef int (*snd_pcm_hw_rule_func_t)(struct snd_pcm_hw_params *, struct snd_pcm_hw_rule *);\n\nstruct snd_pcm_hw_rule {\n\tunsigned int cond;\n\tint var;\n\tint deps[5];\n\tsnd_pcm_hw_rule_func_t func;\n\tvoid *private;\n};\n\nstruct snd_pcm_hw_constraints {\n\tstruct snd_mask masks[3];\n\tstruct snd_interval intervals[12];\n\tunsigned int rules_num;\n\tunsigned int rules_all;\n\tstruct snd_pcm_hw_rule *rules;\n};\n\nstruct snd_pcm_runtime {\n\tstruct snd_pcm_substream *trigger_master;\n\tstruct timespec64 trigger_tstamp;\n\tbool trigger_tstamp_latched;\n\tint overrange;\n\tsnd_pcm_uframes_t avail_max;\n\tsnd_pcm_uframes_t hw_ptr_base;\n\tsnd_pcm_uframes_t hw_ptr_interrupt;\n\tlong unsigned int hw_ptr_jiffies;\n\tlong unsigned int hw_ptr_buffer_jiffies;\n\tsnd_pcm_sframes_t delay;\n\tu64 hw_ptr_wrap;\n\tsnd_pcm_access_t access;\n\tsnd_pcm_format_t format;\n\tsnd_pcm_subformat_t subformat;\n\tunsigned int rate;\n\tunsigned int channels;\n\tsnd_pcm_uframes_t period_size;\n\tunsigned int periods;\n\tsnd_pcm_uframes_t buffer_size;\n\tsnd_pcm_uframes_t min_align;\n\tsize_t byte_align;\n\tunsigned int frame_bits;\n\tunsigned int sample_bits;\n\tunsigned int info;\n\tunsigned int rate_num;\n\tunsigned int rate_den;\n\tunsigned int no_period_wakeup: 1;\n\tint tstamp_mode;\n\tunsigned int period_step;\n\tsnd_pcm_uframes_t start_threshold;\n\tsnd_pcm_uframes_t stop_threshold;\n\tsnd_pcm_uframes_t silence_threshold;\n\tsnd_pcm_uframes_t silence_size;\n\tsnd_pcm_uframes_t boundary;\n\tsnd_pcm_uframes_t silence_start;\n\tsnd_pcm_uframes_t silence_filled;\n\tunion snd_pcm_sync_id sync;\n\tstruct snd_pcm_mmap_status *status;\n\tstruct snd_pcm_mmap_control *control;\n\tsnd_pcm_uframes_t twake;\n\twait_queue_head_t sleep;\n\twait_queue_head_t tsleep;\n\tstruct fasync_struct *fasync;\n\tbool stop_operating;\n\tvoid *private_data;\n\tvoid (*private_free)(struct snd_pcm_runtime *);\n\tstruct snd_pcm_hardware hw;\n\tstruct snd_pcm_hw_constraints hw_constraints;\n\tunsigned int timer_resolution;\n\tint tstamp_type;\n\tunsigned char *dma_area;\n\tdma_addr_t dma_addr;\n\tsize_t dma_bytes;\n\tstruct snd_dma_buffer *dma_buffer_p;\n\tunsigned int buffer_changed: 1;\n\tstruct snd_pcm_audio_tstamp_config audio_tstamp_config;\n\tstruct snd_pcm_audio_tstamp_report audio_tstamp_report;\n\tstruct timespec64 driver_tstamp;\n\tstruct snd_pcm_oss_runtime oss;\n};\n\nstruct snd_kcontrol;\n\nstruct snd_pcm_str {\n\tint stream;\n\tstruct snd_pcm *pcm;\n\tunsigned int substream_count;\n\tunsigned int substream_opened;\n\tstruct snd_pcm_substream *substream;\n\tstruct snd_pcm_oss_stream oss;\n\tstruct snd_info_entry *proc_root;\n\tstruct snd_kcontrol *chmap_kctl;\n\tstruct device dev;\n};\n\nstruct snd_pcm {\n\tstruct snd_card *card;\n\tstruct list_head list;\n\tint device;\n\tunsigned int info_flags;\n\tshort unsigned int dev_class;\n\tshort unsigned int dev_subclass;\n\tchar id[64];\n\tchar name[80];\n\tstruct snd_pcm_str streams[2];\n\tstruct mutex open_mutex;\n\twait_queue_head_t open_wait;\n\tvoid *private_data;\n\tvoid (*private_free)(struct snd_pcm *);\n\tbool internal;\n\tbool nonatomic;\n\tbool no_device_suspend;\n\tstruct snd_pcm_oss oss;\n};\n\ntypedef int snd_kcontrol_info_t(struct snd_kcontrol *, struct snd_ctl_elem_info *);\n\ntypedef int snd_kcontrol_get_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);\n\ntypedef int snd_kcontrol_put_t(struct snd_kcontrol *, struct snd_ctl_elem_value *);\n\ntypedef int snd_kcontrol_tlv_rw_t(struct snd_kcontrol *, int, unsigned int, unsigned int *);\n\nstruct snd_ctl_file;\n\nstruct snd_kcontrol_volatile {\n\tstruct snd_ctl_file *owner;\n\tunsigned int access;\n};\n\nstruct snd_kcontrol {\n\tstruct list_head list;\n\tstruct snd_ctl_elem_id id;\n\tunsigned int count;\n\tsnd_kcontrol_info_t *info;\n\tsnd_kcontrol_get_t *get;\n\tsnd_kcontrol_put_t *put;\n\tunion {\n\t\tsnd_kcontrol_tlv_rw_t *c;\n\t\tconst unsigned int *p;\n\t} tlv;\n\tlong unsigned int private_value;\n\tvoid *private_data;\n\tvoid (*private_free)(struct snd_kcontrol *);\n\tstruct snd_kcontrol_volatile vd[0];\n};\n\nstruct snd_enc_wma {\n\t__u32 super_block_align;\n};\n\nstruct snd_enc_vorbis {\n\t__s32 quality;\n\t__u32 managed;\n\t__u32 max_bit_rate;\n\t__u32 min_bit_rate;\n\t__u32 downmix;\n};\n\nstruct snd_enc_real {\n\t__u32 quant_bits;\n\t__u32 start_region;\n\t__u32 num_regions;\n};\n\nstruct snd_enc_flac {\n\t__u32 num;\n\t__u32 gain;\n};\n\nstruct snd_enc_generic {\n\t__u32 bw;\n\t__s32 reserved[15];\n};\n\nstruct snd_dec_flac {\n\t__u16 sample_size;\n\t__u16 min_blk_size;\n\t__u16 max_blk_size;\n\t__u16 min_frame_size;\n\t__u16 max_frame_size;\n\t__u16 reserved;\n};\n\nstruct snd_dec_wma {\n\t__u32 encoder_option;\n\t__u32 adv_encoder_option;\n\t__u32 adv_encoder_option2;\n\t__u32 reserved;\n};\n\nstruct snd_dec_alac {\n\t__u32 frame_length;\n\t__u8 compatible_version;\n\t__u8 pb;\n\t__u8 mb;\n\t__u8 kb;\n\t__u32 max_run;\n\t__u32 max_frame_bytes;\n};\n\nstruct snd_dec_ape {\n\t__u16 compatible_version;\n\t__u16 compression_level;\n\t__u32 format_flags;\n\t__u32 blocks_per_frame;\n\t__u32 final_frame_blocks;\n\t__u32 total_frames;\n\t__u32 seek_table_present;\n};\n\nunion snd_codec_options {\n\tstruct snd_enc_wma wma;\n\tstruct snd_enc_vorbis vorbis;\n\tstruct snd_enc_real real;\n\tstruct snd_enc_flac flac;\n\tstruct snd_enc_generic generic;\n\tstruct snd_dec_flac flac_d;\n\tstruct snd_dec_wma wma_d;\n\tstruct snd_dec_alac alac_d;\n\tstruct snd_dec_ape ape_d;\n};\n\nstruct snd_codec_desc {\n\t__u32 max_ch;\n\t__u32 sample_rates[32];\n\t__u32 num_sample_rates;\n\t__u32 bit_rate[32];\n\t__u32 num_bitrates;\n\t__u32 rate_control;\n\t__u32 profiles;\n\t__u32 modes;\n\t__u32 formats;\n\t__u32 min_buffer;\n\t__u32 reserved[15];\n};\n\nstruct snd_codec {\n\t__u32 id;\n\t__u32 ch_in;\n\t__u32 ch_out;\n\t__u32 sample_rate;\n\t__u32 bit_rate;\n\t__u32 rate_control;\n\t__u32 profile;\n\t__u32 level;\n\t__u32 ch_mode;\n\t__u32 format;\n\t__u32 align;\n\tunion snd_codec_options options;\n\t__u32 reserved[3];\n};\n\nstruct snd_compressed_buffer {\n\t__u32 fragment_size;\n\t__u32 fragments;\n};\n\nstruct snd_compr_params {\n\tstruct snd_compressed_buffer buffer;\n\tstruct snd_codec codec;\n\t__u8 no_wake_mode;\n};\n\nstruct snd_compr_tstamp {\n\t__u32 byte_offset;\n\t__u32 copied_total;\n\t__u32 pcm_frames;\n\t__u32 pcm_io_frames;\n\t__u32 sampling_rate;\n};\n\nenum snd_compr_direction {\n\tSND_COMPRESS_PLAYBACK = 0,\n\tSND_COMPRESS_CAPTURE = 1,\n};\n\nstruct snd_compr_caps {\n\t__u32 num_codecs;\n\t__u32 direction;\n\t__u32 min_fragment_size;\n\t__u32 max_fragment_size;\n\t__u32 min_fragments;\n\t__u32 max_fragments;\n\t__u32 codecs[32];\n\t__u32 reserved[11];\n};\n\nstruct snd_compr_codec_caps {\n\t__u32 codec;\n\t__u32 num_descriptors;\n\tstruct snd_codec_desc descriptor[32];\n};\n\nstruct snd_compr_metadata {\n\t__u32 key;\n\t__u32 value[8];\n};\n\nstruct snd_compr_ops;\n\nstruct snd_compr_runtime {\n\tsnd_pcm_state_t state;\n\tstruct snd_compr_ops *ops;\n\tvoid *buffer;\n\tu64 buffer_size;\n\tu32 fragment_size;\n\tu32 fragments;\n\tu64 total_bytes_available;\n\tu64 total_bytes_transferred;\n\twait_queue_head_t sleep;\n\tvoid *private_data;\n\tunsigned char *dma_area;\n\tdma_addr_t dma_addr;\n\tsize_t dma_bytes;\n\tstruct snd_dma_buffer *dma_buffer_p;\n};\n\nstruct snd_compr_stream;\n\nstruct snd_compr_ops {\n\tint (*open)(struct snd_compr_stream *);\n\tint (*free)(struct snd_compr_stream *);\n\tint (*set_params)(struct snd_compr_stream *, struct snd_compr_params *);\n\tint (*get_params)(struct snd_compr_stream *, struct snd_codec *);\n\tint (*set_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *);\n\tint (*get_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *);\n\tint (*trigger)(struct snd_compr_stream *, int);\n\tint (*pointer)(struct snd_compr_stream *, struct snd_compr_tstamp *);\n\tint (*copy)(struct snd_compr_stream *, char *, size_t);\n\tint (*mmap)(struct snd_compr_stream *, struct vm_area_struct *);\n\tint (*ack)(struct snd_compr_stream *, size_t);\n\tint (*get_caps)(struct snd_compr_stream *, struct snd_compr_caps *);\n\tint (*get_codec_caps)(struct snd_compr_stream *, struct snd_compr_codec_caps *);\n};\n\nstruct snd_compr;\n\nstruct snd_compr_stream {\n\tconst char *name;\n\tstruct snd_compr_ops *ops;\n\tstruct snd_compr_runtime *runtime;\n\tstruct snd_compr *device;\n\tstruct delayed_work error_work;\n\tenum snd_compr_direction direction;\n\tbool metadata_set;\n\tbool next_track;\n\tbool partial_drain;\n\tbool pause_in_draining;\n\tvoid *private_data;\n\tstruct snd_dma_buffer dma_buffer;\n};\n\nstruct snd_compr {\n\tconst char *name;\n\tstruct device dev;\n\tstruct snd_compr_ops *ops;\n\tvoid *private_data;\n\tstruct snd_card *card;\n\tunsigned int direction;\n\tstruct mutex lock;\n\tint device;\n\tbool use_pause_in_draining;\n\tchar id[64];\n\tstruct snd_info_entry *proc_root;\n\tstruct snd_info_entry *proc_info_entry;\n};\n\nstruct snd_kcontrol_new {\n\tsnd_ctl_elem_iface_t iface;\n\tunsigned int device;\n\tunsigned int subdevice;\n\tconst char *name;\n\tunsigned int index;\n\tunsigned int access;\n\tunsigned int count;\n\tsnd_kcontrol_info_t *info;\n\tsnd_kcontrol_get_t *get;\n\tsnd_kcontrol_put_t *put;\n\tunion {\n\t\tsnd_kcontrol_tlv_rw_t *c;\n\t\tconst unsigned int *p;\n\t} tlv;\n\tlong unsigned int private_value;\n};\n\nstruct snd_ctl_file {\n\tstruct list_head list;\n\tstruct snd_card *card;\n\tstruct pid *pid;\n\tint preferred_subdevice[2];\n\twait_queue_head_t change_sleep;\n\tspinlock_t read_lock;\n\tstruct fasync_struct *fasync;\n\tint subscribed;\n\tstruct list_head events;\n};\n\nenum {\n\tSND_CTL_SUBDEV_PCM = 0,\n\tSND_CTL_SUBDEV_RAWMIDI = 1,\n\tSND_CTL_SUBDEV_ITEMS = 2,\n};\n\nstruct snd_info_buffer {\n\tchar *buffer;\n\tunsigned int curr;\n\tunsigned int size;\n\tunsigned int len;\n\tint stop;\n\tint error;\n};\n\nstruct snd_info_entry_ops {\n\tint (*open)(struct snd_info_entry *, short unsigned int, void **);\n\tint (*release)(struct snd_info_entry *, short unsigned int, void *);\n\tssize_t (*read)(struct snd_info_entry *, void *, struct file *, char *, size_t, loff_t);\n\tssize_t (*write)(struct snd_info_entry *, void *, struct file *, const char *, size_t, loff_t);\n\tloff_t (*llseek)(struct snd_info_entry *, void *, struct file *, loff_t, int);\n\t__poll_t (*poll)(struct snd_info_entry *, void *, struct file *, poll_table *);\n\tint (*ioctl)(struct snd_info_entry *, void *, struct file *, unsigned int, long unsigned int);\n\tint (*mmap)(struct snd_info_entry *, void *, struct inode *, struct file *, struct vm_area_struct *);\n};\n\nstruct snd_soc_tplg_hdr {\n\t__le32 magic;\n\t__le32 abi;\n\t__le32 version;\n\t__le32 type;\n\t__le32 size;\n\t__le32 vendor_type;\n\t__le32 payload_size;\n\t__le32 index;\n\t__le32 count;\n};\n\nstruct snd_soc_tplg_vendor_uuid_elem {\n\t__le32 token;\n\tchar uuid[16];\n};\n\nstruct snd_soc_tplg_vendor_value_elem {\n\t__le32 token;\n\t__le32 value;\n};\n\nstruct snd_soc_tplg_vendor_string_elem {\n\t__le32 token;\n\tchar string[44];\n};\n\nstruct snd_soc_tplg_vendor_array {\n\t__le32 size;\n\t__le32 type;\n\t__le32 num_elems;\n\tunion {\n\t\tstruct snd_soc_tplg_vendor_uuid_elem uuid[0];\n\t\tstruct snd_soc_tplg_vendor_value_elem value[0];\n\t\tstruct snd_soc_tplg_vendor_string_elem string[0];\n\t};\n};\n\nstruct snd_soc_tplg_private {\n\t__le32 size;\n\tunion {\n\t\tchar data[0];\n\t\tstruct snd_soc_tplg_vendor_array array[0];\n\t};\n};\n\nstruct snd_soc_tplg_tlv_dbscale {\n\t__le32 min;\n\t__le32 step;\n\t__le32 mute;\n};\n\nstruct snd_soc_tplg_ctl_tlv {\n\t__le32 size;\n\t__le32 type;\n\tunion {\n\t\t__le32 data[32];\n\t\tstruct snd_soc_tplg_tlv_dbscale scale;\n\t};\n};\n\nstruct snd_soc_tplg_io_ops {\n\t__le32 get;\n\t__le32 put;\n\t__le32 info;\n};\n\nstruct snd_soc_tplg_ctl_hdr {\n\t__le32 size;\n\t__le32 type;\n\tchar name[44];\n\t__le32 access;\n\tstruct snd_soc_tplg_io_ops ops;\n\tstruct snd_soc_tplg_ctl_tlv tlv;\n};\n\nstruct snd_soc_tplg_stream_caps {\n\t__le32 size;\n\tchar name[44];\n\t__le64 formats;\n\t__le32 rates;\n\t__le32 rate_min;\n\t__le32 rate_max;\n\t__le32 channels_min;\n\t__le32 channels_max;\n\t__le32 periods_min;\n\t__le32 periods_max;\n\t__le32 period_size_min;\n\t__le32 period_size_max;\n\t__le32 buffer_size_min;\n\t__le32 buffer_size_max;\n\t__le32 sig_bits;\n};\n\nstruct snd_soc_tplg_stream {\n\t__le32 size;\n\tchar name[44];\n\t__le64 format;\n\t__le32 rate;\n\t__le32 period_bytes;\n\t__le32 buffer_bytes;\n\t__le32 channels;\n};\n\nstruct snd_soc_tplg_hw_config {\n\t__le32 size;\n\t__le32 id;\n\t__le32 fmt;\n\t__u8 clock_gated;\n\t__u8 invert_bclk;\n\t__u8 invert_fsync;\n\t__u8 bclk_provider;\n\t__u8 fsync_provider;\n\t__u8 mclk_direction;\n\t__le16 reserved;\n\t__le32 mclk_rate;\n\t__le32 bclk_rate;\n\t__le32 fsync_rate;\n\t__le32 tdm_slots;\n\t__le32 tdm_slot_width;\n\t__le32 tx_slots;\n\t__le32 rx_slots;\n\t__le32 tx_channels;\n\t__le32 tx_chanmap[8];\n\t__le32 rx_channels;\n\t__le32 rx_chanmap[8];\n};\n\nstruct snd_soc_tplg_manifest {\n\t__le32 size;\n\t__le32 control_elems;\n\t__le32 widget_elems;\n\t__le32 graph_elems;\n\t__le32 pcm_elems;\n\t__le32 dai_link_elems;\n\t__le32 dai_elems;\n\t__le32 reserved[20];\n\tstruct snd_soc_tplg_private priv;\n};\n\nstruct snd_soc_tplg_dapm_widget {\n\t__le32 size;\n\t__le32 id;\n\tchar name[44];\n\tchar sname[44];\n\t__le32 reg;\n\t__le32 shift;\n\t__le32 mask;\n\t__le32 subseq;\n\t__le32 invert;\n\t__le32 ignore_suspend;\n\t__le16 event_flags;\n\t__le16 event_type;\n\t__le32 num_kcontrols;\n\tstruct snd_soc_tplg_private priv;\n};\n\nstruct snd_soc_tplg_pcm {\n\t__le32 size;\n\tchar pcm_name[44];\n\tchar dai_name[44];\n\t__le32 pcm_id;\n\t__le32 dai_id;\n\t__le32 playback;\n\t__le32 capture;\n\t__le32 compress;\n\tstruct snd_soc_tplg_stream stream[8];\n\t__le32 num_streams;\n\tstruct snd_soc_tplg_stream_caps caps[2];\n\t__le32 flag_mask;\n\t__le32 flags;\n\tstruct snd_soc_tplg_private priv;\n} __attribute__((packed));\n\nstruct snd_soc_tplg_link_config {\n\t__le32 size;\n\t__le32 id;\n\tchar name[44];\n\tchar stream_name[44];\n\tstruct snd_soc_tplg_stream stream[8];\n\t__le32 num_streams;\n\tstruct snd_soc_tplg_hw_config hw_config[8];\n\t__le32 num_hw_configs;\n\t__le32 default_hw_config_id;\n\t__le32 flag_mask;\n\t__le32 flags;\n\tstruct snd_soc_tplg_private priv;\n};\n\nenum snd_soc_dobj_type {\n\tSND_SOC_DOBJ_NONE = 0,\n\tSND_SOC_DOBJ_MIXER = 1,\n\tSND_SOC_DOBJ_BYTES = 2,\n\tSND_SOC_DOBJ_ENUM = 3,\n\tSND_SOC_DOBJ_GRAPH = 4,\n\tSND_SOC_DOBJ_WIDGET = 5,\n\tSND_SOC_DOBJ_DAI_LINK = 6,\n\tSND_SOC_DOBJ_PCM = 7,\n\tSND_SOC_DOBJ_CODEC_LINK = 8,\n\tSND_SOC_DOBJ_BACKEND_LINK = 9,\n};\n\nstruct snd_soc_dobj_control {\n\tstruct snd_kcontrol *kcontrol;\n\tchar **dtexts;\n\tlong unsigned int *dvalues;\n};\n\nstruct snd_soc_dobj_widget {\n\tunsigned int kcontrol_type;\n};\n\nstruct snd_soc_tplg_ops;\n\nstruct snd_soc_dobj {\n\tenum snd_soc_dobj_type type;\n\tunsigned int index;\n\tstruct list_head list;\n\tstruct snd_soc_tplg_ops *ops;\n\tunion {\n\t\tstruct snd_soc_dobj_control control;\n\t\tstruct snd_soc_dobj_widget widget;\n\t};\n\tvoid *private;\n};\n\nstruct snd_soc_component;\n\nstruct snd_soc_dapm_route;\n\nstruct snd_soc_dapm_widget;\n\nstruct snd_soc_dai_driver;\n\nstruct snd_soc_dai;\n\nstruct snd_soc_dai_link;\n\nstruct snd_soc_tplg_kcontrol_ops;\n\nstruct snd_soc_tplg_bytes_ext_ops;\n\nstruct snd_soc_tplg_ops {\n\tint (*control_load)(struct snd_soc_component *, int, struct snd_kcontrol_new *, struct snd_soc_tplg_ctl_hdr *);\n\tint (*control_unload)(struct snd_soc_component *, struct snd_soc_dobj *);\n\tint (*dapm_route_load)(struct snd_soc_component *, int, struct snd_soc_dapm_route *);\n\tint (*dapm_route_unload)(struct snd_soc_component *, struct snd_soc_dobj *);\n\tint (*widget_load)(struct snd_soc_component *, int, struct snd_soc_dapm_widget *, struct snd_soc_tplg_dapm_widget *);\n\tint (*widget_ready)(struct snd_soc_component *, int, struct snd_soc_dapm_widget *, struct snd_soc_tplg_dapm_widget *);\n\tint (*widget_unload)(struct snd_soc_component *, struct snd_soc_dobj *);\n\tint (*dai_load)(struct snd_soc_component *, int, struct snd_soc_dai_driver *, struct snd_soc_tplg_pcm *, struct snd_soc_dai *);\n\tint (*dai_unload)(struct snd_soc_component *, struct snd_soc_dobj *);\n\tint (*link_load)(struct snd_soc_component *, int, struct snd_soc_dai_link *, struct snd_soc_tplg_link_config *);\n\tint (*link_unload)(struct snd_soc_component *, struct snd_soc_dobj *);\n\tint (*vendor_load)(struct snd_soc_component *, int, struct snd_soc_tplg_hdr *);\n\tint (*vendor_unload)(struct snd_soc_component *, struct snd_soc_tplg_hdr *);\n\tvoid (*complete)(struct snd_soc_component *);\n\tint (*manifest)(struct snd_soc_component *, int, struct snd_soc_tplg_manifest *);\n\tconst struct snd_soc_tplg_kcontrol_ops *io_ops;\n\tint io_ops_count;\n\tconst struct snd_soc_tplg_bytes_ext_ops *bytes_ext_ops;\n\tint bytes_ext_ops_count;\n};\n\nstruct snd_soc_tplg_kcontrol_ops {\n\tu32 id;\n\tint (*get)(struct snd_kcontrol *, struct snd_ctl_elem_value *);\n\tint (*put)(struct snd_kcontrol *, struct snd_ctl_elem_value *);\n\tint (*info)(struct snd_kcontrol *, struct snd_ctl_elem_info *);\n};\n\nstruct snd_soc_tplg_bytes_ext_ops {\n\tu32 id;\n\tint (*get)(struct snd_kcontrol *, unsigned int *, unsigned int);\n\tint (*put)(struct snd_kcontrol *, const unsigned int *, unsigned int);\n};\n\nenum snd_soc_dapm_type {\n\tsnd_soc_dapm_input = 0,\n\tsnd_soc_dapm_output = 1,\n\tsnd_soc_dapm_mux = 2,\n\tsnd_soc_dapm_demux = 3,\n\tsnd_soc_dapm_mixer = 4,\n\tsnd_soc_dapm_mixer_named_ctl = 5,\n\tsnd_soc_dapm_pga = 6,\n\tsnd_soc_dapm_out_drv = 7,\n\tsnd_soc_dapm_adc = 8,\n\tsnd_soc_dapm_dac = 9,\n\tsnd_soc_dapm_micbias = 10,\n\tsnd_soc_dapm_mic = 11,\n\tsnd_soc_dapm_hp = 12,\n\tsnd_soc_dapm_spk = 13,\n\tsnd_soc_dapm_line = 14,\n\tsnd_soc_dapm_switch = 15,\n\tsnd_soc_dapm_vmid = 16,\n\tsnd_soc_dapm_pre = 17,\n\tsnd_soc_dapm_post = 18,\n\tsnd_soc_dapm_supply = 19,\n\tsnd_soc_dapm_pinctrl = 20,\n\tsnd_soc_dapm_regulator_supply = 21,\n\tsnd_soc_dapm_clock_supply = 22,\n\tsnd_soc_dapm_aif_in = 23,\n\tsnd_soc_dapm_aif_out = 24,\n\tsnd_soc_dapm_siggen = 25,\n\tsnd_soc_dapm_sink = 26,\n\tsnd_soc_dapm_dai_in = 27,\n\tsnd_soc_dapm_dai_out = 28,\n\tsnd_soc_dapm_dai_link = 29,\n\tsnd_soc_dapm_kcontrol = 30,\n\tsnd_soc_dapm_buffer = 31,\n\tsnd_soc_dapm_scheduler = 32,\n\tsnd_soc_dapm_effect = 33,\n\tsnd_soc_dapm_src = 34,\n\tsnd_soc_dapm_asrc = 35,\n\tsnd_soc_dapm_encoder = 36,\n\tsnd_soc_dapm_decoder = 37,\n\tSND_SOC_DAPM_TYPE_COUNT = 38,\n};\n\nstruct snd_soc_dapm_context;\n\nstruct snd_soc_dapm_widget {\n\tenum snd_soc_dapm_type id;\n\tconst char *name;\n\tconst char *sname;\n\tstruct list_head list;\n\tstruct snd_soc_dapm_context *dapm;\n\tvoid *priv;\n\tstruct regulator *regulator;\n\tstruct pinctrl *pinctrl;\n\tint reg;\n\tunsigned char shift;\n\tunsigned int mask;\n\tunsigned int on_val;\n\tunsigned int off_val;\n\tunsigned char power: 1;\n\tunsigned char active: 1;\n\tunsigned char connected: 1;\n\tunsigned char new: 1;\n\tunsigned char force: 1;\n\tunsigned char ignore_suspend: 1;\n\tunsigned char new_power: 1;\n\tunsigned char power_checked: 1;\n\tunsigned char is_supply: 1;\n\tunsigned char is_ep: 2;\n\tint subseq;\n\tint (*power_check)(struct snd_soc_dapm_widget *);\n\tshort unsigned int event_flags;\n\tint (*event)(struct snd_soc_dapm_widget *, struct snd_kcontrol *, int);\n\tint num_kcontrols;\n\tconst struct snd_kcontrol_new *kcontrol_news;\n\tstruct snd_kcontrol **kcontrols;\n\tstruct snd_soc_dobj dobj;\n\tstruct list_head edges[2];\n\tstruct list_head work_list;\n\tstruct list_head power_list;\n\tstruct list_head dirty;\n\tint endpoints[2];\n\tstruct clk *clk;\n\tint channel;\n};\n\nenum snd_soc_bias_level {\n\tSND_SOC_BIAS_OFF = 0,\n\tSND_SOC_BIAS_STANDBY = 1,\n\tSND_SOC_BIAS_PREPARE = 2,\n\tSND_SOC_BIAS_ON = 3,\n};\n\nstruct snd_soc_dapm_wcache {\n\tstruct snd_soc_dapm_widget *widget;\n};\n\nstruct snd_soc_card;\n\nstruct snd_soc_dapm_context {\n\tenum snd_soc_bias_level bias_level;\n\tunsigned int idle_bias_off: 1;\n\tunsigned int suspend_bias_off: 1;\n\tstruct device *dev;\n\tstruct snd_soc_component *component;\n\tstruct snd_soc_card *card;\n\tenum snd_soc_bias_level target_bias_level;\n\tstruct list_head list;\n\tstruct snd_soc_dapm_wcache path_sink_cache;\n\tstruct snd_soc_dapm_wcache path_source_cache;\n\tstruct dentry *debugfs_dapm;\n};\n\nstruct snd_soc_component_driver;\n\nstruct snd_soc_component {\n\tconst char *name;\n\tint id;\n\tconst char *name_prefix;\n\tstruct device *dev;\n\tstruct snd_soc_card *card;\n\tunsigned int active;\n\tunsigned int suspended: 1;\n\tstruct list_head list;\n\tstruct list_head card_aux_list;\n\tstruct list_head card_list;\n\tconst struct snd_soc_component_driver *driver;\n\tstruct list_head dai_list;\n\tint num_dai;\n\tstruct regmap *regmap;\n\tint val_bytes;\n\tstruct mutex io_mutex;\n\tstruct list_head dobj_list;\n\tstruct snd_soc_dapm_context dapm;\n\tint (*init)(struct snd_soc_component *);\n\tstruct snd_pcm_substream *mark_module;\n\tstruct snd_pcm_substream *mark_open;\n\tstruct snd_pcm_substream *mark_hw_params;\n\tstruct snd_pcm_substream *mark_trigger;\n\tstruct snd_compr_stream *mark_compr_open;\n\tvoid *mark_pm;\n\tstruct dentry *debugfs_root;\n\tconst char *debugfs_prefix;\n};\n\nstruct snd_soc_dapm_route {\n\tconst char *sink;\n\tconst char *control;\n\tconst char *source;\n\tint (*connected)(struct snd_soc_dapm_widget *, struct snd_soc_dapm_widget *);\n\tstruct snd_soc_dobj dobj;\n};\n\nstruct snd_soc_pcm_stream {\n\tconst char *stream_name;\n\tu64 formats;\n\tunsigned int rates;\n\tunsigned int rate_min;\n\tunsigned int rate_max;\n\tunsigned int channels_min;\n\tunsigned int channels_max;\n\tunsigned int sig_bits;\n};\n\nstruct snd_soc_pcm_runtime;\n\nstruct snd_soc_dai_ops;\n\nstruct snd_soc_cdai_ops;\n\nstruct snd_soc_dai_driver {\n\tconst char *name;\n\tunsigned int id;\n\tunsigned int base;\n\tstruct snd_soc_dobj dobj;\n\tint (*probe)(struct snd_soc_dai *);\n\tint (*remove)(struct snd_soc_dai *);\n\tint (*compress_new)(struct snd_soc_pcm_runtime *, int);\n\tint (*pcm_new)(struct snd_soc_pcm_runtime *, struct snd_soc_dai *);\n\tconst struct snd_soc_dai_ops *ops;\n\tconst struct snd_soc_cdai_ops *cops;\n\tstruct snd_soc_pcm_stream capture;\n\tstruct snd_soc_pcm_stream playback;\n\tunsigned int symmetric_rates: 1;\n\tunsigned int symmetric_channels: 1;\n\tunsigned int symmetric_samplebits: 1;\n\tint probe_order;\n\tint remove_order;\n};\n\nstruct snd_soc_dai {\n\tconst char *name;\n\tint id;\n\tstruct device *dev;\n\tstruct snd_soc_dai_driver *driver;\n\tunsigned int stream_active[2];\n\tstruct snd_soc_dapm_widget *playback_widget;\n\tstruct snd_soc_dapm_widget *capture_widget;\n\tvoid *playback_dma_data;\n\tvoid *capture_dma_data;\n\tunsigned int rate;\n\tunsigned int channels;\n\tunsigned int sample_bits;\n\tstruct snd_soc_component *component;\n\tunsigned int tx_mask;\n\tunsigned int rx_mask;\n\tstruct list_head list;\n\tstruct snd_pcm_substream *mark_startup;\n\tstruct snd_pcm_substream *mark_hw_params;\n\tstruct snd_pcm_substream *mark_trigger;\n\tstruct snd_compr_stream *mark_compr_startup;\n\tunsigned int probed: 1;\n};\n\nenum snd_soc_dpcm_trigger {\n\tSND_SOC_DPCM_TRIGGER_PRE = 0,\n\tSND_SOC_DPCM_TRIGGER_POST = 1,\n\tSND_SOC_DPCM_TRIGGER_BESPOKE = 2,\n};\n\nstruct snd_soc_dai_link_component;\n\nstruct snd_soc_ops;\n\nstruct snd_soc_compr_ops;\n\nstruct snd_soc_dai_link {\n\tconst char *name;\n\tconst char *stream_name;\n\tstruct snd_soc_dai_link_component *cpus;\n\tunsigned int num_cpus;\n\tstruct snd_soc_dai_link_component *codecs;\n\tunsigned int num_codecs;\n\tstruct snd_soc_dai_link_component *platforms;\n\tunsigned int num_platforms;\n\tint id;\n\tconst struct snd_soc_pcm_stream *params;\n\tunsigned int num_params;\n\tunsigned int dai_fmt;\n\tenum snd_soc_dpcm_trigger trigger[2];\n\tint (*init)(struct snd_soc_pcm_runtime *);\n\tvoid (*exit)(struct snd_soc_pcm_runtime *);\n\tint (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *, struct snd_pcm_hw_params *);\n\tconst struct snd_soc_ops *ops;\n\tconst struct snd_soc_compr_ops *compr_ops;\n\tunsigned int nonatomic: 1;\n\tunsigned int playback_only: 1;\n\tunsigned int capture_only: 1;\n\tunsigned int ignore_suspend: 1;\n\tunsigned int symmetric_rates: 1;\n\tunsigned int symmetric_channels: 1;\n\tunsigned int symmetric_samplebits: 1;\n\tunsigned int no_pcm: 1;\n\tunsigned int dynamic: 1;\n\tunsigned int dpcm_capture: 1;\n\tunsigned int dpcm_playback: 1;\n\tunsigned int dpcm_merged_format: 1;\n\tunsigned int dpcm_merged_chan: 1;\n\tunsigned int dpcm_merged_rate: 1;\n\tunsigned int ignore_pmdown_time: 1;\n\tunsigned int ignore: 1;\n\tstruct snd_soc_dobj dobj;\n};\n\nstruct snd_soc_dapm_update {\n\tstruct snd_kcontrol *kcontrol;\n\tint reg;\n\tint mask;\n\tint val;\n\tint reg2;\n\tint mask2;\n\tint val2;\n\tbool has_second_set;\n};\n\nenum snd_soc_pcm_subclass {\n\tSND_SOC_PCM_CLASS_PCM = 0,\n\tSND_SOC_PCM_CLASS_BE = 1,\n};\n\nstruct snd_soc_dapm_stats {\n\tint power_checks;\n\tint path_checks;\n\tint neighbour_checks;\n};\n\nstruct snd_soc_codec_conf;\n\nstruct snd_soc_aux_dev;\n\nstruct snd_soc_card {\n\tconst char *name;\n\tconst char *long_name;\n\tconst char *driver_name;\n\tconst char *components;\n\tchar dmi_longname[80];\n\tchar topology_shortname[32];\n\tstruct device *dev;\n\tstruct snd_card *snd_card;\n\tstruct module *owner;\n\tstruct mutex mutex;\n\tstruct mutex dapm_mutex;\n\tstruct mutex pcm_mutex;\n\tenum snd_soc_pcm_subclass pcm_subclass;\n\tspinlock_t dpcm_lock;\n\tint (*probe)(struct snd_soc_card *);\n\tint (*late_probe)(struct snd_soc_card *);\n\tint (*remove)(struct snd_soc_card *);\n\tint (*suspend_pre)(struct snd_soc_card *);\n\tint (*suspend_post)(struct snd_soc_card *);\n\tint (*resume_pre)(struct snd_soc_card *);\n\tint (*resume_post)(struct snd_soc_card *);\n\tint (*set_bias_level)(struct snd_soc_card *, struct snd_soc_dapm_context *, enum snd_soc_bias_level);\n\tint (*set_bias_level_post)(struct snd_soc_card *, struct snd_soc_dapm_context *, enum snd_soc_bias_level);\n\tint (*add_dai_link)(struct snd_soc_card *, struct snd_soc_dai_link *);\n\tvoid (*remove_dai_link)(struct snd_soc_card *, struct snd_soc_dai_link *);\n\tlong int pmdown_time;\n\tstruct snd_soc_dai_link *dai_link;\n\tint num_links;\n\tstruct list_head rtd_list;\n\tint num_rtd;\n\tstruct snd_soc_codec_conf *codec_conf;\n\tint num_configs;\n\tstruct snd_soc_aux_dev *aux_dev;\n\tint num_aux_devs;\n\tstruct list_head aux_comp_list;\n\tconst struct snd_kcontrol_new *controls;\n\tint num_controls;\n\tconst struct snd_soc_dapm_widget *dapm_widgets;\n\tint num_dapm_widgets;\n\tconst struct snd_soc_dapm_route *dapm_routes;\n\tint num_dapm_routes;\n\tconst struct snd_soc_dapm_widget *of_dapm_widgets;\n\tint num_of_dapm_widgets;\n\tconst struct snd_soc_dapm_route *of_dapm_routes;\n\tint num_of_dapm_routes;\n\tstruct list_head component_dev_list;\n\tstruct list_head list;\n\tstruct list_head widgets;\n\tstruct list_head paths;\n\tstruct list_head dapm_list;\n\tstruct list_head dapm_dirty;\n\tstruct list_head dobj_list;\n\tstruct snd_soc_dapm_context dapm;\n\tstruct snd_soc_dapm_stats dapm_stats;\n\tstruct snd_soc_dapm_update *update;\n\tstruct dentry *debugfs_card_root;\n\tstruct work_struct deferred_resume_work;\n\tu32 pop_time;\n\tunsigned int instantiated: 1;\n\tunsigned int topology_shortname_created: 1;\n\tunsigned int fully_routed: 1;\n\tunsigned int disable_route_checks: 1;\n\tunsigned int probed: 1;\n\tunsigned int component_chaining: 1;\n\tvoid *drvdata;\n};\n\nenum snd_soc_dpcm_update {\n\tSND_SOC_DPCM_UPDATE_NO = 0,\n\tSND_SOC_DPCM_UPDATE_BE = 1,\n\tSND_SOC_DPCM_UPDATE_FE = 2,\n};\n\nenum snd_soc_dpcm_state {\n\tSND_SOC_DPCM_STATE_NEW = 0,\n\tSND_SOC_DPCM_STATE_OPEN = 1,\n\tSND_SOC_DPCM_STATE_HW_PARAMS = 2,\n\tSND_SOC_DPCM_STATE_PREPARE = 3,\n\tSND_SOC_DPCM_STATE_START = 4,\n\tSND_SOC_DPCM_STATE_STOP = 5,\n\tSND_SOC_DPCM_STATE_PAUSED = 6,\n\tSND_SOC_DPCM_STATE_SUSPEND = 7,\n\tSND_SOC_DPCM_STATE_HW_FREE = 8,\n\tSND_SOC_DPCM_STATE_CLOSE = 9,\n};\n\nstruct snd_soc_dpcm_runtime {\n\tstruct list_head be_clients;\n\tstruct list_head fe_clients;\n\tint users;\n\tstruct snd_pcm_runtime *runtime;\n\tstruct snd_pcm_hw_params hw_params;\n\tenum snd_soc_dpcm_update runtime_update;\n\tenum snd_soc_dpcm_state state;\n\tint trigger_pending;\n};\n\nstruct snd_soc_pcm_runtime {\n\tstruct device *dev;\n\tstruct snd_soc_card *card;\n\tstruct snd_soc_dai_link *dai_link;\n\tstruct snd_pcm_ops ops;\n\tunsigned int params_select;\n\tstruct snd_soc_dpcm_runtime dpcm[2];\n\tlong int pmdown_time;\n\tstruct snd_pcm *pcm;\n\tstruct snd_compr *compr;\n\tstruct snd_soc_dai **dais;\n\tunsigned int num_codecs;\n\tunsigned int num_cpus;\n\tstruct snd_soc_dapm_widget *playback_widget;\n\tstruct snd_soc_dapm_widget *capture_widget;\n\tstruct delayed_work delayed_work;\n\tvoid (*close_delayed_work_func)(struct snd_soc_pcm_runtime *);\n\tstruct dentry *debugfs_dpcm_root;\n\tunsigned int num;\n\tstruct list_head list;\n\tstruct snd_pcm_substream *mark_startup;\n\tstruct snd_pcm_substream *mark_hw_params;\n\tstruct snd_pcm_substream *mark_trigger;\n\tstruct snd_compr_stream *mark_compr_startup;\n\tunsigned int pop_wait: 1;\n\tunsigned int fe_compr: 1;\n\tint num_components;\n\tstruct snd_soc_component *components[0];\n};\n\nstruct snd_soc_ops {\n\tint (*startup)(struct snd_pcm_substream *);\n\tvoid (*shutdown)(struct snd_pcm_substream *);\n\tint (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);\n\tint (*hw_free)(struct snd_pcm_substream *);\n\tint (*prepare)(struct snd_pcm_substream *);\n\tint (*trigger)(struct snd_pcm_substream *, int);\n};\n\nstruct snd_soc_compr_ops {\n\tint (*startup)(struct snd_compr_stream *);\n\tvoid (*shutdown)(struct snd_compr_stream *);\n\tint (*set_params)(struct snd_compr_stream *);\n\tint (*trigger)(struct snd_compr_stream *);\n};\n\nstruct snd_soc_dai_link_component {\n\tconst char *name;\n\tstruct device_node *of_node;\n\tconst char *dai_name;\n};\n\nstruct snd_soc_codec_conf {\n\tstruct snd_soc_dai_link_component dlc;\n\tconst char *name_prefix;\n};\n\nstruct snd_soc_aux_dev {\n\tstruct snd_soc_dai_link_component dlc;\n\tint (*init)(struct snd_soc_component *);\n};\n\nstruct snd_soc_dai_ops {\n\tint (*set_sysclk)(struct snd_soc_dai *, int, unsigned int, int);\n\tint (*set_pll)(struct snd_soc_dai *, int, int, unsigned int, unsigned int);\n\tint (*set_clkdiv)(struct snd_soc_dai *, int, int);\n\tint (*set_bclk_ratio)(struct snd_soc_dai *, unsigned int);\n\tint (*set_fmt)(struct snd_soc_dai *, unsigned int);\n\tint (*xlate_tdm_slot_mask)(unsigned int, unsigned int *, unsigned int *);\n\tint (*set_tdm_slot)(struct snd_soc_dai *, unsigned int, unsigned int, int, int);\n\tint (*set_channel_map)(struct snd_soc_dai *, unsigned int, unsigned int *, unsigned int, unsigned int *);\n\tint (*get_channel_map)(struct snd_soc_dai *, unsigned int *, unsigned int *, unsigned int *, unsigned int *);\n\tint (*set_tristate)(struct snd_soc_dai *, int);\n\tint (*set_sdw_stream)(struct snd_soc_dai *, void *, int);\n\tvoid * (*get_sdw_stream)(struct snd_soc_dai *, int);\n\tint (*mute_stream)(struct snd_soc_dai *, int, int);\n\tint (*startup)(struct snd_pcm_substream *, struct snd_soc_dai *);\n\tvoid (*shutdown)(struct snd_pcm_substream *, struct snd_soc_dai *);\n\tint (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *, struct snd_soc_dai *);\n\tint (*hw_free)(struct snd_pcm_substream *, struct snd_soc_dai *);\n\tint (*prepare)(struct snd_pcm_substream *, struct snd_soc_dai *);\n\tint (*trigger)(struct snd_pcm_substream *, int, struct snd_soc_dai *);\n\tint (*bespoke_trigger)(struct snd_pcm_substream *, int, struct snd_soc_dai *);\n\tsnd_pcm_sframes_t (*delay)(struct snd_pcm_substream *, struct snd_soc_dai *);\n\tunsigned int no_capture_mute: 1;\n};\n\nstruct snd_soc_cdai_ops {\n\tint (*startup)(struct snd_compr_stream *, struct snd_soc_dai *);\n\tint (*shutdown)(struct snd_compr_stream *, struct snd_soc_dai *);\n\tint (*set_params)(struct snd_compr_stream *, struct snd_compr_params *, struct snd_soc_dai *);\n\tint (*get_params)(struct snd_compr_stream *, struct snd_codec *, struct snd_soc_dai *);\n\tint (*set_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *, struct snd_soc_dai *);\n\tint (*get_metadata)(struct snd_compr_stream *, struct snd_compr_metadata *, struct snd_soc_dai *);\n\tint (*trigger)(struct snd_compr_stream *, int, struct snd_soc_dai *);\n\tint (*pointer)(struct snd_compr_stream *, struct snd_compr_tstamp *, struct snd_soc_dai *);\n\tint (*ack)(struct snd_compr_stream *, size_t, struct snd_soc_dai *);\n};\n\nstruct snd_compress_ops {\n\tint (*open)(struct snd_soc_component *, struct snd_compr_stream *);\n\tint (*free)(struct snd_soc_component *, struct snd_compr_stream *);\n\tint (*set_params)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_params *);\n\tint (*get_params)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_codec *);\n\tint (*set_metadata)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_metadata *);\n\tint (*get_metadata)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_metadata *);\n\tint (*trigger)(struct snd_soc_component *, struct snd_compr_stream *, int);\n\tint (*pointer)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_tstamp *);\n\tint (*copy)(struct snd_soc_component *, struct snd_compr_stream *, char *, size_t);\n\tint (*mmap)(struct snd_soc_component *, struct snd_compr_stream *, struct vm_area_struct *);\n\tint (*ack)(struct snd_soc_component *, struct snd_compr_stream *, size_t);\n\tint (*get_caps)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_caps *);\n\tint (*get_codec_caps)(struct snd_soc_component *, struct snd_compr_stream *, struct snd_compr_codec_caps *);\n};\n\nstruct snd_soc_jack;\n\nstruct snd_soc_component_driver {\n\tconst char *name;\n\tconst struct snd_kcontrol_new *controls;\n\tunsigned int num_controls;\n\tconst struct snd_soc_dapm_widget *dapm_widgets;\n\tunsigned int num_dapm_widgets;\n\tconst struct snd_soc_dapm_route *dapm_routes;\n\tunsigned int num_dapm_routes;\n\tint (*probe)(struct snd_soc_component *);\n\tvoid (*remove)(struct snd_soc_component *);\n\tint (*suspend)(struct snd_soc_component *);\n\tint (*resume)(struct snd_soc_component *);\n\tunsigned int (*read)(struct snd_soc_component *, unsigned int);\n\tint (*write)(struct snd_soc_component *, unsigned int, unsigned int);\n\tint (*pcm_construct)(struct snd_soc_component *, struct snd_soc_pcm_runtime *);\n\tvoid (*pcm_destruct)(struct snd_soc_component *, struct snd_pcm *);\n\tint (*set_sysclk)(struct snd_soc_component *, int, int, unsigned int, int);\n\tint (*set_pll)(struct snd_soc_component *, int, int, unsigned int, unsigned int);\n\tint (*set_jack)(struct snd_soc_component *, struct snd_soc_jack *, void *);\n\tint (*of_xlate_dai_name)(struct snd_soc_component *, struct of_phandle_args *, const char **);\n\tint (*of_xlate_dai_id)(struct snd_soc_component *, struct device_node *);\n\tvoid (*seq_notifier)(struct snd_soc_component *, enum snd_soc_dapm_type, int);\n\tint (*stream_event)(struct snd_soc_component *, int);\n\tint (*set_bias_level)(struct snd_soc_component *, enum snd_soc_bias_level);\n\tint (*open)(struct snd_soc_component *, struct snd_pcm_substream *);\n\tint (*close)(struct snd_soc_component *, struct snd_pcm_substream *);\n\tint (*ioctl)(struct snd_soc_component *, struct snd_pcm_substream *, unsigned int, void *);\n\tint (*hw_params)(struct snd_soc_component *, struct snd_pcm_substream *, struct snd_pcm_hw_params *);\n\tint (*hw_free)(struct snd_soc_component *, struct snd_pcm_substream *);\n\tint (*prepare)(struct snd_soc_component *, struct snd_pcm_substream *);\n\tint (*trigger)(struct snd_soc_component *, struct snd_pcm_substream *, int);\n\tint (*sync_stop)(struct snd_soc_component *, struct snd_pcm_substream *);\n\tsnd_pcm_uframes_t (*pointer)(struct snd_soc_component *, struct snd_pcm_substream *);\n\tint (*get_time_info)(struct snd_soc_component *, struct snd_pcm_substream *, struct timespec64 *, struct timespec64 *, struct snd_pcm_audio_tstamp_config *, struct snd_pcm_audio_tstamp_report *);\n\tint (*copy_user)(struct snd_soc_component *, struct snd_pcm_substream *, int, long unsigned int, void *, long unsigned int);\n\tstruct page * (*page)(struct snd_soc_component *, struct snd_pcm_substream *, long unsigned int);\n\tint (*mmap)(struct snd_soc_component *, struct snd_pcm_substream *, struct vm_area_struct *);\n\tconst struct snd_compress_ops *compress_ops;\n\tint probe_order;\n\tint remove_order;\n\tunsigned int module_get_upon_open: 1;\n\tunsigned int idle_bias_on: 1;\n\tunsigned int suspend_bias_off: 1;\n\tunsigned int use_pmdown_time: 1;\n\tunsigned int endianness: 1;\n\tunsigned int non_legacy_dai_naming: 1;\n\tconst char *ignore_machine;\n\tconst char *topology_name_prefix;\n\tint (*be_hw_params_fixup)(struct snd_soc_pcm_runtime *, struct snd_pcm_hw_params *);\n\tbool use_dai_pcm_id;\n\tint be_pcm_base;\n};\n\nstruct snd_jack;\n\nstruct snd_soc_jack {\n\tstruct mutex mutex;\n\tstruct snd_jack *jack;\n\tstruct snd_soc_card *card;\n\tstruct list_head pins;\n\tint status;\n\tstruct blocking_notifier_head notifier;\n\tstruct list_head jack_zones;\n};\n\nstruct sdw_port_runtime {\n\tint num;\n\tint ch_mask;\n\tstruct sdw_transport_params transport_params;\n\tstruct sdw_port_params port_params;\n\tstruct list_head port_node;\n};\n\nstruct sdw_slave_runtime {\n\tstruct sdw_slave *slave;\n\tenum sdw_data_direction direction;\n\tunsigned int ch_count;\n\tstruct list_head m_rt_node;\n\tstruct list_head port_list;\n};\n\nstruct sdw_master_runtime {\n\tstruct sdw_bus *bus;\n\tstruct sdw_stream_runtime *stream;\n\tenum sdw_data_direction direction;\n\tunsigned int ch_count;\n\tstruct list_head slave_rt_list;\n\tstruct list_head port_list;\n\tstruct list_head stream_node;\n\tstruct list_head bus_node;\n};\n\nstruct dpn_attribute {\n\tstruct device_attribute dev_attr;\n\tint N;\n\tint dir;\n\tconst char *format_string;\n};\n\nunion extcon_property_value {\n\tint intval;\n};\n\nstruct extcon_cable;\n\nstruct extcon_dev___2 {\n\tconst char *name;\n\tconst unsigned int *supported_cable;\n\tconst u32 *mutually_exclusive;\n\tstruct device dev;\n\tstruct raw_notifier_head nh_all;\n\tstruct raw_notifier_head *nh;\n\tstruct list_head entry;\n\tint max_supported;\n\tspinlock_t lock;\n\tu32 state;\n\tstruct device_type extcon_dev_type;\n\tstruct extcon_cable *cables;\n\tstruct attribute_group attr_g_muex;\n\tstruct attribute **attrs_muex;\n\tstruct device_attribute *d_attrs_muex;\n};\n\nstruct extcon_cable {\n\tstruct extcon_dev___2 *edev;\n\tint cable_index;\n\tstruct attribute_group attr_g;\n\tstruct device_attribute attr_name;\n\tstruct device_attribute attr_state;\n\tstruct attribute *attrs[3];\n\tunion extcon_property_value usb_propval[3];\n\tunion extcon_property_value chg_propval[1];\n\tunion extcon_property_value jack_propval[1];\n\tunion extcon_property_value disp_propval[2];\n\tlong unsigned int usb_bits[1];\n\tlong unsigned int chg_bits[1];\n\tlong unsigned int jack_bits[1];\n\tlong unsigned int disp_bits[1];\n};\n\nstruct __extcon_info {\n\tunsigned int type;\n\tunsigned int id;\n\tconst char *name;\n};\n\nstruct extcon_dev_notifier_devres {\n\tstruct extcon_dev___2 *edev;\n\tunsigned int id;\n\tstruct notifier_block *nb;\n};\n\nstruct powercap_control_type;\n\nstruct powercap_control_type_ops {\n\tint (*set_enable)(struct powercap_control_type *, bool);\n\tint (*get_enable)(struct powercap_control_type *, bool *);\n\tint (*release)(struct powercap_control_type *);\n};\n\nstruct powercap_control_type {\n\tstruct device dev;\n\tstruct idr idr;\n\tint nr_zones;\n\tconst struct powercap_control_type_ops *ops;\n\tstruct mutex lock;\n\tbool allocated;\n\tstruct list_head node;\n};\n\nstruct powercap_zone;\n\nstruct powercap_zone_ops {\n\tint (*get_max_energy_range_uj)(struct powercap_zone *, u64 *);\n\tint (*get_energy_uj)(struct powercap_zone *, u64 *);\n\tint (*reset_energy_uj)(struct powercap_zone *);\n\tint (*get_max_power_range_uw)(struct powercap_zone *, u64 *);\n\tint (*get_power_uw)(struct powercap_zone *, u64 *);\n\tint (*set_enable)(struct powercap_zone *, bool);\n\tint (*get_enable)(struct powercap_zone *, bool *);\n\tint (*release)(struct powercap_zone *);\n};\n\nstruct powercap_zone_constraint;\n\nstruct powercap_zone {\n\tint id;\n\tchar *name;\n\tvoid *control_type_inst;\n\tconst struct powercap_zone_ops *ops;\n\tstruct device dev;\n\tint const_id_cnt;\n\tstruct idr idr;\n\tstruct idr *parent_idr;\n\tvoid *private_data;\n\tstruct attribute **zone_dev_attrs;\n\tint zone_attr_count;\n\tstruct attribute_group dev_zone_attr_group;\n\tconst struct attribute_group *dev_attr_groups[2];\n\tbool allocated;\n\tstruct powercap_zone_constraint *constraints;\n};\n\nstruct powercap_zone_constraint_ops;\n\nstruct powercap_zone_constraint {\n\tint id;\n\tstruct powercap_zone *power_zone;\n\tconst struct powercap_zone_constraint_ops *ops;\n};\n\nstruct powercap_zone_constraint_ops {\n\tint (*set_power_limit_uw)(struct powercap_zone *, int, u64);\n\tint (*get_power_limit_uw)(struct powercap_zone *, int, u64 *);\n\tint (*set_time_window_us)(struct powercap_zone *, int, u64);\n\tint (*get_time_window_us)(struct powercap_zone *, int, u64 *);\n\tint (*get_max_power_uw)(struct powercap_zone *, int, u64 *);\n\tint (*get_min_power_uw)(struct powercap_zone *, int, u64 *);\n\tint (*get_max_time_window_us)(struct powercap_zone *, int, u64 *);\n\tint (*get_min_time_window_us)(struct powercap_zone *, int, u64 *);\n\tconst char * (*get_name)(struct powercap_zone *, int);\n};\n\nstruct powercap_constraint_attr {\n\tstruct device_attribute power_limit_attr;\n\tstruct device_attribute time_window_attr;\n\tstruct device_attribute max_power_attr;\n\tstruct device_attribute min_power_attr;\n\tstruct device_attribute max_time_window_attr;\n\tstruct device_attribute min_time_window_attr;\n\tstruct device_attribute name_attr;\n};\n\nstruct trace_event_raw_mc_event {\n\tstruct trace_entry ent;\n\tunsigned int error_type;\n\tu32 __data_loc_msg;\n\tu32 __data_loc_label;\n\tu16 error_count;\n\tu8 mc_index;\n\ts8 top_layer;\n\ts8 middle_layer;\n\ts8 lower_layer;\n\tlong int address;\n\tu8 grain_bits;\n\tlong int syndrome;\n\tu32 __data_loc_driver_detail;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_arm_event {\n\tstruct trace_entry ent;\n\tu64 mpidr;\n\tu64 midr;\n\tu32 running_state;\n\tu32 psci_state;\n\tu8 affinity;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_non_standard_event {\n\tstruct trace_entry ent;\n\tchar sec_type[16];\n\tchar fru_id[16];\n\tu32 __data_loc_fru_text;\n\tu8 sev;\n\tu32 len;\n\tu32 __data_loc_buf;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_aer_event {\n\tstruct trace_entry ent;\n\tu32 __data_loc_dev_name;\n\tu32 status;\n\tu8 severity;\n\tu8 tlp_header_valid;\n\tu32 tlp_header[4];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_memory_failure_event {\n\tstruct trace_entry ent;\n\tlong unsigned int pfn;\n\tint type;\n\tint result;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_mc_event {\n\tu32 msg;\n\tu32 label;\n\tu32 driver_detail;\n};\n\nstruct trace_event_data_offsets_arm_event {};\n\nstruct trace_event_data_offsets_non_standard_event {\n\tu32 fru_text;\n\tu32 buf;\n};\n\nstruct trace_event_data_offsets_aer_event {\n\tu32 dev_name;\n};\n\nstruct trace_event_data_offsets_memory_failure_event {};\n\ntypedef void (*btf_trace_mc_event)(void *, const unsigned int, const char *, const char *, const int, const u8, const s8, const s8, const s8, long unsigned int, const u8, long unsigned int, const char *);\n\ntypedef void (*btf_trace_arm_event)(void *, const struct cper_sec_proc_arm *);\n\ntypedef void (*btf_trace_non_standard_event)(void *, const guid_t *, const guid_t *, const char *, const u8, const u8 *, const u32);\n\ntypedef void (*btf_trace_aer_event)(void *, const char *, const u32, const u8, const u8, struct aer_header_log_regs *);\n\ntypedef void (*btf_trace_memory_failure_event)(void *, long unsigned int, int, int);\n\nstruct ce_array {\n\tu64 *array;\n\tunsigned int n;\n\tunsigned int decay_count;\n\tu64 pfns_poisoned;\n\tu64 ces_entered;\n\tu64 decays_done;\n\tunion {\n\t\tstruct {\n\t\t\t__u32 disabled: 1;\n\t\t\t__u32 __resv: 31;\n\t\t};\n\t\t__u32 flags;\n\t};\n};\n\nstruct nvmem_cell_lookup {\n\tconst char *nvmem_name;\n\tconst char *cell_name;\n\tconst char *dev_id;\n\tconst char *con_id;\n\tstruct list_head node;\n};\n\nenum {\n\tNVMEM_ADD = 1,\n\tNVMEM_REMOVE = 2,\n\tNVMEM_CELL_ADD = 3,\n\tNVMEM_CELL_REMOVE = 4,\n};\n\nstruct nvmem_cell_table {\n\tconst char *nvmem_name;\n\tconst struct nvmem_cell_info *cells;\n\tsize_t ncells;\n\tstruct list_head node;\n};\n\nstruct nvmem_device___2 {\n\tstruct module *owner;\n\tstruct device dev;\n\tint stride;\n\tint word_size;\n\tint id;\n\tstruct kref refcnt;\n\tsize_t size;\n\tbool read_only;\n\tbool root_only;\n\tint flags;\n\tenum nvmem_type type;\n\tstruct bin_attribute eeprom;\n\tstruct device *base_dev;\n\tstruct list_head cells;\n\tconst struct nvmem_keepout *keepout;\n\tunsigned int nkeepout;\n\tnvmem_reg_read_t reg_read;\n\tnvmem_reg_write_t reg_write;\n\tstruct gpio_desc___2 *wp_gpio;\n\tvoid *priv;\n};\n\nstruct nvmem_cell {\n\tconst char *name;\n\tint offset;\n\tint bytes;\n\tint bit_offset;\n\tint nbits;\n\tstruct device_node *np;\n\tstruct nvmem_device___2 *nvmem;\n\tstruct list_head node;\n};\n\nstruct icc_node;\n\nstruct icc_req {\n\tstruct hlist_node req_node;\n\tstruct icc_node *node;\n\tstruct device *dev;\n\tbool enabled;\n\tu32 tag;\n\tu32 avg_bw;\n\tu32 peak_bw;\n};\n\nstruct icc_path {\n\tconst char *name;\n\tsize_t num_nodes;\n\tstruct icc_req reqs[0];\n};\n\nstruct icc_node_data {\n\tstruct icc_node *node;\n\tu32 tag;\n};\n\nstruct icc_provider;\n\nstruct icc_node {\n\tint id;\n\tconst char *name;\n\tstruct icc_node **links;\n\tsize_t num_links;\n\tstruct icc_provider *provider;\n\tstruct list_head node_list;\n\tstruct list_head search_list;\n\tstruct icc_node *reverse;\n\tu8 is_traversed: 1;\n\tstruct hlist_head req_list;\n\tu32 avg_bw;\n\tu32 peak_bw;\n\tu32 init_avg;\n\tu32 init_peak;\n\tvoid *data;\n};\n\nstruct icc_onecell_data {\n\tunsigned int num_nodes;\n\tstruct icc_node *nodes[0];\n};\n\nstruct icc_provider {\n\tstruct list_head provider_list;\n\tstruct list_head nodes;\n\tint (*set)(struct icc_node *, struct icc_node *);\n\tint (*aggregate)(struct icc_node *, u32, u32, u32, u32 *, u32 *);\n\tvoid (*pre_aggregate)(struct icc_node *);\n\tint (*get_bw)(struct icc_node *, u32 *, u32 *);\n\tstruct icc_node * (*xlate)(struct of_phandle_args *, void *);\n\tstruct icc_node_data * (*xlate_extended)(struct of_phandle_args *, void *);\n\tstruct device *dev;\n\tint users;\n\tbool inter_set;\n\tvoid *data;\n};\n\nstruct trace_event_raw_icc_set_bw {\n\tstruct trace_entry ent;\n\tu32 __data_loc_path_name;\n\tu32 __data_loc_dev;\n\tu32 __data_loc_node_name;\n\tu32 avg_bw;\n\tu32 peak_bw;\n\tu32 node_avg_bw;\n\tu32 node_peak_bw;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_icc_set_bw_end {\n\tstruct trace_entry ent;\n\tu32 __data_loc_path_name;\n\tu32 __data_loc_dev;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_icc_set_bw {\n\tu32 path_name;\n\tu32 dev;\n\tu32 node_name;\n};\n\nstruct trace_event_data_offsets_icc_set_bw_end {\n\tu32 path_name;\n\tu32 dev;\n};\n\ntypedef void (*btf_trace_icc_set_bw)(void *, struct icc_path *, struct icc_node *, int, u32, u32);\n\ntypedef void (*btf_trace_icc_set_bw_end)(void *, struct icc_path *, int);\n\nstruct icc_path___2;\n\nstruct icc_bulk_data {\n\tstruct icc_path___2 *path;\n\tconst char *name;\n\tu32 avg_bw;\n\tu32 peak_bw;\n};\n\nstruct net_device_devres {\n\tstruct net_device *ndev;\n};\n\nstruct __kernel_old_timespec {\n\t__kernel_old_time_t tv_sec;\n\tlong int tv_nsec;\n};\n\nstruct __kernel_sock_timeval {\n\t__s64 tv_sec;\n\t__s64 tv_usec;\n};\n\nstruct mmsghdr {\n\tstruct user_msghdr msg_hdr;\n\tunsigned int msg_len;\n};\n\nstruct scm_timestamping_internal {\n\tstruct timespec64 ts[3];\n};\n\nstruct ifconf {\n\tint ifc_len;\n\tunion {\n\t\tchar *ifcu_buf;\n\t\tstruct ifreq *ifcu_req;\n\t} ifc_ifcu;\n};\n\nstruct compat_ifmap {\n\tcompat_ulong_t mem_start;\n\tcompat_ulong_t mem_end;\n\tshort unsigned int base_addr;\n\tunsigned char irq;\n\tunsigned char dma;\n\tunsigned char port;\n};\n\nstruct compat_if_settings {\n\tunsigned int type;\n\tunsigned int size;\n\tcompat_uptr_t ifs_ifsu;\n};\n\nstruct compat_ifreq {\n\tunion {\n\t\tchar ifrn_name[16];\n\t} ifr_ifrn;\n\tunion {\n\t\tstruct sockaddr ifru_addr;\n\t\tstruct sockaddr ifru_dstaddr;\n\t\tstruct sockaddr ifru_broadaddr;\n\t\tstruct sockaddr ifru_netmask;\n\t\tstruct sockaddr ifru_hwaddr;\n\t\tshort int ifru_flags;\n\t\tcompat_int_t ifru_ivalue;\n\t\tcompat_int_t ifru_mtu;\n\t\tstruct compat_ifmap ifru_map;\n\t\tchar ifru_slave[16];\n\t\tchar ifru_newname[16];\n\t\tcompat_caddr_t ifru_data;\n\t\tstruct compat_if_settings ifru_settings;\n\t} ifr_ifru;\n};\n\nstruct compat_ifconf {\n\tcompat_int_t ifc_len;\n\tcompat_caddr_t ifcbuf;\n};\n\nenum sock_shutdown_cmd {\n\tSHUT_RD = 0,\n\tSHUT_WR = 1,\n\tSHUT_RDWR = 2,\n};\n\nstruct compat_ethtool_rx_flow_spec {\n\tu32 flow_type;\n\tunion ethtool_flow_union h_u;\n\tstruct ethtool_flow_ext h_ext;\n\tunion ethtool_flow_union m_u;\n\tstruct ethtool_flow_ext m_ext;\n\tcompat_u64 ring_cookie;\n\tu32 location;\n} __attribute__((packed));\n\nstruct compat_ethtool_rxnfc {\n\tu32 cmd;\n\tu32 flow_type;\n\tcompat_u64 data;\n\tstruct compat_ethtool_rx_flow_spec fs;\n\tu32 rule_cnt;\n\tu32 rule_locs[0];\n} __attribute__((packed));\n\nstruct libipw_device;\n\nstruct iw_spy_data;\n\nstruct iw_public_data {\n\tstruct iw_spy_data *spy_data;\n\tstruct libipw_device *libipw;\n};\n\nstruct iw_param {\n\t__s32 value;\n\t__u8 fixed;\n\t__u8 disabled;\n\t__u16 flags;\n};\n\nstruct iw_point {\n\tvoid *pointer;\n\t__u16 length;\n\t__u16 flags;\n};\n\nstruct iw_freq {\n\t__s32 m;\n\t__s16 e;\n\t__u8 i;\n\t__u8 flags;\n};\n\nstruct iw_quality {\n\t__u8 qual;\n\t__u8 level;\n\t__u8 noise;\n\t__u8 updated;\n};\n\nstruct iw_discarded {\n\t__u32 nwid;\n\t__u32 code;\n\t__u32 fragment;\n\t__u32 retries;\n\t__u32 misc;\n};\n\nstruct iw_missed {\n\t__u32 beacon;\n};\n\nstruct iw_statistics {\n\t__u16 status;\n\tstruct iw_quality qual;\n\tstruct iw_discarded discard;\n\tstruct iw_missed miss;\n};\n\nunion iwreq_data {\n\tchar name[16];\n\tstruct iw_point essid;\n\tstruct iw_param nwid;\n\tstruct iw_freq freq;\n\tstruct iw_param sens;\n\tstruct iw_param bitrate;\n\tstruct iw_param txpower;\n\tstruct iw_param rts;\n\tstruct iw_param frag;\n\t__u32 mode;\n\tstruct iw_param retry;\n\tstruct iw_point encoding;\n\tstruct iw_param power;\n\tstruct iw_quality qual;\n\tstruct sockaddr ap_addr;\n\tstruct sockaddr addr;\n\tstruct iw_param param;\n\tstruct iw_point data;\n};\n\nstruct iw_priv_args {\n\t__u32 cmd;\n\t__u16 set_args;\n\t__u16 get_args;\n\tchar name[16];\n};\n\nstruct compat_mmsghdr {\n\tstruct compat_msghdr msg_hdr;\n\tcompat_uint_t msg_len;\n};\n\nstruct iw_request_info {\n\t__u16 cmd;\n\t__u16 flags;\n};\n\nstruct iw_spy_data {\n\tint spy_number;\n\tu_char spy_address[48];\n\tstruct iw_quality spy_stat[8];\n\tstruct iw_quality spy_thr_low;\n\tstruct iw_quality spy_thr_high;\n\tu_char spy_thr_under[8];\n};\n\nenum {\n\tSOF_TIMESTAMPING_TX_HARDWARE = 1,\n\tSOF_TIMESTAMPING_TX_SOFTWARE = 2,\n\tSOF_TIMESTAMPING_RX_HARDWARE = 4,\n\tSOF_TIMESTAMPING_RX_SOFTWARE = 8,\n\tSOF_TIMESTAMPING_SOFTWARE = 16,\n\tSOF_TIMESTAMPING_SYS_HARDWARE = 32,\n\tSOF_TIMESTAMPING_RAW_HARDWARE = 64,\n\tSOF_TIMESTAMPING_OPT_ID = 128,\n\tSOF_TIMESTAMPING_TX_SCHED = 256,\n\tSOF_TIMESTAMPING_TX_ACK = 512,\n\tSOF_TIMESTAMPING_OPT_CMSG = 1024,\n\tSOF_TIMESTAMPING_OPT_TSONLY = 2048,\n\tSOF_TIMESTAMPING_OPT_STATS = 4096,\n\tSOF_TIMESTAMPING_OPT_PKTINFO = 8192,\n\tSOF_TIMESTAMPING_OPT_TX_SWHW = 16384,\n\tSOF_TIMESTAMPING_LAST = 16384,\n\tSOF_TIMESTAMPING_MASK = 32767,\n};\n\nstruct scm_ts_pktinfo {\n\t__u32 if_index;\n\t__u32 pkt_length;\n\t__u32 reserved[2];\n};\n\nstruct sock_skb_cb {\n\tu32 dropcount;\n};\n\nstruct sock_ee_data_rfc4884 {\n\t__u16 len;\n\t__u8 flags;\n\t__u8 reserved;\n};\n\nstruct sock_extended_err {\n\t__u32 ee_errno;\n\t__u8 ee_origin;\n\t__u8 ee_type;\n\t__u8 ee_code;\n\t__u8 ee_pad;\n\t__u32 ee_info;\n\tunion {\n\t\t__u32 ee_data;\n\t\tstruct sock_ee_data_rfc4884 ee_rfc4884;\n\t};\n};\n\nstruct sock_exterr_skb {\n\tunion {\n\t\tstruct inet_skb_parm h4;\n\t\tstruct inet6_skb_parm h6;\n\t} header;\n\tstruct sock_extended_err ee;\n\tu16 addr_offset;\n\t__be16 port;\n\tu8 opt_stats: 1;\n\tu8 unused: 7;\n};\n\nstruct used_address {\n\tstruct __kernel_sockaddr_storage name;\n\tunsigned int name_len;\n};\n\nstruct linger {\n\tint l_onoff;\n\tint l_linger;\n};\n\nstruct ucred {\n\t__u32 pid;\n\t__u32 uid;\n\t__u32 gid;\n};\n\nstruct mmpin {\n\tstruct user_struct *user;\n\tunsigned int num_pg;\n};\n\nstruct ubuf_info {\n\tvoid (*callback)(struct ubuf_info *, bool);\n\tunion {\n\t\tstruct {\n\t\t\tlong unsigned int desc;\n\t\t\tvoid *ctx;\n\t\t};\n\t\tstruct {\n\t\t\tu32 id;\n\t\t\tu16 len;\n\t\t\tu16 zerocopy: 1;\n\t\t\tu32 bytelen;\n\t\t};\n\t};\n\trefcount_t refcnt;\n\tstruct mmpin mmp;\n};\n\nenum {\n\tSKB_GSO_TCPV4 = 1,\n\tSKB_GSO_DODGY = 2,\n\tSKB_GSO_TCP_ECN = 4,\n\tSKB_GSO_TCP_FIXEDID = 8,\n\tSKB_GSO_TCPV6 = 16,\n\tSKB_GSO_FCOE = 32,\n\tSKB_GSO_GRE = 64,\n\tSKB_GSO_GRE_CSUM = 128,\n\tSKB_GSO_IPXIP4 = 256,\n\tSKB_GSO_IPXIP6 = 512,\n\tSKB_GSO_UDP_TUNNEL = 1024,\n\tSKB_GSO_UDP_TUNNEL_CSUM = 2048,\n\tSKB_GSO_PARTIAL = 4096,\n\tSKB_GSO_TUNNEL_REMCSUM = 8192,\n\tSKB_GSO_SCTP = 16384,\n\tSKB_GSO_ESP = 32768,\n\tSKB_GSO_UDP = 65536,\n\tSKB_GSO_UDP_L4 = 131072,\n\tSKB_GSO_FRAGLIST = 262144,\n};\n\nstruct prot_inuse {\n\tint val[64];\n};\n\nstruct gro_list {\n\tstruct list_head list;\n\tint count;\n};\n\nstruct napi_struct {\n\tstruct list_head poll_list;\n\tlong unsigned int state;\n\tint weight;\n\tint defer_hard_irqs_count;\n\tlong unsigned int gro_bitmask;\n\tint (*poll)(struct napi_struct *, int);\n\tint poll_owner;\n\tstruct net_device *dev;\n\tstruct gro_list gro_hash[8];\n\tstruct sk_buff *skb;\n\tstruct list_head rx_list;\n\tint rx_count;\n\tstruct hrtimer timer;\n\tstruct list_head dev_list;\n\tstruct hlist_node napi_hash_node;\n\tunsigned int napi_id;\n};\n\nstruct sd_flow_limit {\n\tu64 count;\n\tunsigned int num_buckets;\n\tunsigned int history_head;\n\tu16 history[128];\n\tu8 buckets[0];\n};\n\nstruct softnet_data {\n\tstruct list_head poll_list;\n\tstruct sk_buff_head process_queue;\n\tunsigned int processed;\n\tunsigned int time_squeeze;\n\tunsigned int received_rps;\n\tstruct softnet_data *rps_ipi_list;\n\tstruct sd_flow_limit *flow_limit;\n\tstruct Qdisc *output_queue;\n\tstruct Qdisc **output_queue_tailp;\n\tstruct sk_buff *completion_queue;\n\tstruct sk_buff_head xfrm_backlog;\n\tstruct {\n\t\tu16 recursion;\n\t\tu8 more;\n\t} xmit;\n\tint: 32;\n\tunsigned int input_queue_head;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tcall_single_data_t csd;\n\tstruct softnet_data *rps_ipi_next;\n\tunsigned int cpu;\n\tunsigned int input_queue_tail;\n\tunsigned int dropped;\n\tstruct sk_buff_head input_pkt_queue;\n\tstruct napi_struct backlog;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nenum txtime_flags {\n\tSOF_TXTIME_DEADLINE_MODE = 1,\n\tSOF_TXTIME_REPORT_ERRORS = 2,\n\tSOF_TXTIME_FLAGS_LAST = 2,\n\tSOF_TXTIME_FLAGS_MASK = 3,\n};\n\nstruct sock_txtime {\n\t__kernel_clockid_t clockid;\n\t__u32 flags;\n};\n\nenum sk_pacing {\n\tSK_PACING_NONE = 0,\n\tSK_PACING_NEEDED = 1,\n\tSK_PACING_FQ = 2,\n};\n\nstruct sockcm_cookie {\n\tu64 transmit_time;\n\tu32 mark;\n\tu16 tsflags;\n};\n\nstruct fastopen_queue {\n\tstruct request_sock *rskq_rst_head;\n\tstruct request_sock *rskq_rst_tail;\n\tspinlock_t lock;\n\tint qlen;\n\tint max_qlen;\n\tstruct tcp_fastopen_context *ctx;\n};\n\nstruct request_sock_queue {\n\tspinlock_t rskq_lock;\n\tu8 rskq_defer_accept;\n\tu32 synflood_warned;\n\tatomic_t qlen;\n\tatomic_t young;\n\tstruct request_sock *rskq_accept_head;\n\tstruct request_sock *rskq_accept_tail;\n\tstruct fastopen_queue fastopenq;\n};\n\nstruct inet_connection_sock_af_ops {\n\tint (*queue_xmit)(struct sock *, struct sk_buff *, struct flowi *);\n\tvoid (*send_check)(struct sock *, struct sk_buff *);\n\tint (*rebuild_header)(struct sock *);\n\tvoid (*sk_rx_dst_set)(struct sock *, const struct sk_buff *);\n\tint (*conn_request)(struct sock *, struct sk_buff *);\n\tstruct sock * (*syn_recv_sock)(const struct sock *, struct sk_buff *, struct request_sock *, struct dst_entry *, struct request_sock *, bool *);\n\tu16 net_header_len;\n\tu16 net_frag_header_len;\n\tu16 sockaddr_len;\n\tint (*setsockopt)(struct sock *, int, int, sockptr_t, unsigned int);\n\tint (*getsockopt)(struct sock *, int, int, char *, int *);\n\tvoid (*addr2sockaddr)(struct sock *, struct sockaddr *);\n\tvoid (*mtu_reduced)(struct sock *);\n};\n\nstruct inet_bind_bucket;\n\nstruct tcp_ulp_ops;\n\nstruct inet_connection_sock {\n\tstruct inet_sock icsk_inet;\n\tstruct request_sock_queue icsk_accept_queue;\n\tstruct inet_bind_bucket *icsk_bind_hash;\n\tlong unsigned int icsk_timeout;\n\tstruct timer_list icsk_retransmit_timer;\n\tstruct timer_list icsk_delack_timer;\n\t__u32 icsk_rto;\n\t__u32 icsk_rto_min;\n\t__u32 icsk_delack_max;\n\t__u32 icsk_pmtu_cookie;\n\tconst struct tcp_congestion_ops *icsk_ca_ops;\n\tconst struct inet_connection_sock_af_ops *icsk_af_ops;\n\tconst struct tcp_ulp_ops *icsk_ulp_ops;\n\tvoid *icsk_ulp_data;\n\tvoid (*icsk_clean_acked)(struct sock *, u32);\n\tstruct hlist_node icsk_listen_portaddr_node;\n\tunsigned int (*icsk_sync_mss)(struct sock *, u32);\n\t__u8 icsk_ca_state: 5;\n\t__u8 icsk_ca_initialized: 1;\n\t__u8 icsk_ca_setsockopt: 1;\n\t__u8 icsk_ca_dst_locked: 1;\n\t__u8 icsk_retransmits;\n\t__u8 icsk_pending;\n\t__u8 icsk_backoff;\n\t__u8 icsk_syn_retries;\n\t__u8 icsk_probes_out;\n\t__u16 icsk_ext_hdr_len;\n\tstruct {\n\t\t__u8 pending;\n\t\t__u8 quick;\n\t\t__u8 pingpong;\n\t\t__u8 retry;\n\t\t__u32 ato;\n\t\tlong unsigned int timeout;\n\t\t__u32 lrcvtime;\n\t\t__u16 last_seg_size;\n\t\t__u16 rcv_mss;\n\t} icsk_ack;\n\tstruct {\n\t\tint enabled;\n\t\tint search_high;\n\t\tint search_low;\n\t\tint probe_size;\n\t\tu32 probe_timestamp;\n\t} icsk_mtup;\n\tu32 icsk_probes_tstamp;\n\tu32 icsk_user_timeout;\n\tu64 icsk_ca_priv[13];\n};\n\nstruct inet_bind_bucket {\n\tpossible_net_t ib_net;\n\tint l3mdev;\n\tshort unsigned int port;\n\tsigned char fastreuse;\n\tsigned char fastreuseport;\n\tkuid_t fastuid;\n\tstruct in6_addr fast_v6_rcv_saddr;\n\t__be32 fast_rcv_saddr;\n\tshort unsigned int fast_sk_family;\n\tbool fast_ipv6_only;\n\tstruct hlist_node node;\n\tstruct hlist_head owners;\n};\n\nstruct tcp_ulp_ops {\n\tstruct list_head list;\n\tint (*init)(struct sock *);\n\tvoid (*update)(struct sock *, struct proto *, void (*)(struct sock *));\n\tvoid (*release)(struct sock *);\n\tint (*get_info)(const struct sock *, struct sk_buff *);\n\tsize_t (*get_info_size)(const struct sock *);\n\tvoid (*clone)(const struct request_sock *, struct sock *, const gfp_t);\n\tchar name[16];\n\tstruct module *owner;\n};\n\nstruct tcp_fastopen_cookie {\n\t__le64 val[2];\n\ts8 len;\n\tbool exp;\n};\n\nstruct tcp_sack_block {\n\tu32 start_seq;\n\tu32 end_seq;\n};\n\nstruct tcp_options_received {\n\tint ts_recent_stamp;\n\tu32 ts_recent;\n\tu32 rcv_tsval;\n\tu32 rcv_tsecr;\n\tu16 saw_tstamp: 1;\n\tu16 tstamp_ok: 1;\n\tu16 dsack: 1;\n\tu16 wscale_ok: 1;\n\tu16 sack_ok: 3;\n\tu16 smc_ok: 1;\n\tu16 snd_wscale: 4;\n\tu16 rcv_wscale: 4;\n\tu8 saw_unknown: 1;\n\tu8 unused: 7;\n\tu8 num_sacks;\n\tu16 user_mss;\n\tu16 mss_clamp;\n};\n\nstruct tcp_rack {\n\tu64 mstamp;\n\tu32 rtt_us;\n\tu32 end_seq;\n\tu32 last_delivered;\n\tu8 reo_wnd_steps;\n\tu8 reo_wnd_persist: 5;\n\tu8 dsack_seen: 1;\n\tu8 advanced: 1;\n};\n\nstruct tcp_sock_af_ops;\n\nstruct tcp_md5sig_info;\n\nstruct tcp_fastopen_request;\n\nstruct tcp_sock {\n\tstruct inet_connection_sock inet_conn;\n\tu16 tcp_header_len;\n\tu16 gso_segs;\n\t__be32 pred_flags;\n\tu64 bytes_received;\n\tu32 segs_in;\n\tu32 data_segs_in;\n\tu32 rcv_nxt;\n\tu32 copied_seq;\n\tu32 rcv_wup;\n\tu32 snd_nxt;\n\tu32 segs_out;\n\tu32 data_segs_out;\n\tu64 bytes_sent;\n\tu64 bytes_acked;\n\tu32 dsack_dups;\n\tu32 snd_una;\n\tu32 snd_sml;\n\tu32 rcv_tstamp;\n\tu32 lsndtime;\n\tu32 last_oow_ack_time;\n\tu32 compressed_ack_rcv_nxt;\n\tu32 tsoffset;\n\tstruct list_head tsq_node;\n\tstruct list_head tsorted_sent_queue;\n\tu32 snd_wl1;\n\tu32 snd_wnd;\n\tu32 max_window;\n\tu32 mss_cache;\n\tu32 window_clamp;\n\tu32 rcv_ssthresh;\n\tstruct tcp_rack rack;\n\tu16 advmss;\n\tu8 compressed_ack;\n\tu8 dup_ack_counter: 2;\n\tu8 tlp_retrans: 1;\n\tu8 unused: 5;\n\tu32 chrono_start;\n\tu32 chrono_stat[3];\n\tu8 chrono_type: 2;\n\tu8 rate_app_limited: 1;\n\tu8 fastopen_connect: 1;\n\tu8 fastopen_no_cookie: 1;\n\tu8 is_sack_reneg: 1;\n\tu8 fastopen_client_fail: 2;\n\tu8 nonagle: 4;\n\tu8 thin_lto: 1;\n\tu8 recvmsg_inq: 1;\n\tu8 repair: 1;\n\tu8 frto: 1;\n\tu8 repair_queue;\n\tu8 save_syn: 2;\n\tu8 syn_data: 1;\n\tu8 syn_fastopen: 1;\n\tu8 syn_fastopen_exp: 1;\n\tu8 syn_fastopen_ch: 1;\n\tu8 syn_data_acked: 1;\n\tu8 is_cwnd_limited: 1;\n\tu32 tlp_high_seq;\n\tu32 tcp_tx_delay;\n\tu64 tcp_wstamp_ns;\n\tu64 tcp_clock_cache;\n\tu64 tcp_mstamp;\n\tu32 srtt_us;\n\tu32 mdev_us;\n\tu32 mdev_max_us;\n\tu32 rttvar_us;\n\tu32 rtt_seq;\n\tstruct minmax rtt_min;\n\tu32 packets_out;\n\tu32 retrans_out;\n\tu32 max_packets_out;\n\tu32 max_packets_seq;\n\tu16 urg_data;\n\tu8 ecn_flags;\n\tu8 keepalive_probes;\n\tu32 reordering;\n\tu32 reord_seen;\n\tu32 snd_up;\n\tstruct tcp_options_received rx_opt;\n\tu32 snd_ssthresh;\n\tu32 snd_cwnd;\n\tu32 snd_cwnd_cnt;\n\tu32 snd_cwnd_clamp;\n\tu32 snd_cwnd_used;\n\tu32 snd_cwnd_stamp;\n\tu32 prior_cwnd;\n\tu32 prr_delivered;\n\tu32 prr_out;\n\tu32 delivered;\n\tu32 delivered_ce;\n\tu32 lost;\n\tu32 app_limited;\n\tu64 first_tx_mstamp;\n\tu64 delivered_mstamp;\n\tu32 rate_delivered;\n\tu32 rate_interval_us;\n\tu32 rcv_wnd;\n\tu32 write_seq;\n\tu32 notsent_lowat;\n\tu32 pushed_seq;\n\tu32 lost_out;\n\tu32 sacked_out;\n\tstruct hrtimer pacing_timer;\n\tstruct hrtimer compressed_ack_timer;\n\tstruct sk_buff *lost_skb_hint;\n\tstruct sk_buff *retransmit_skb_hint;\n\tstruct rb_root out_of_order_queue;\n\tstruct sk_buff *ooo_last_skb;\n\tstruct tcp_sack_block duplicate_sack[1];\n\tstruct tcp_sack_block selective_acks[4];\n\tstruct tcp_sack_block recv_sack_cache[4];\n\tstruct sk_buff *highest_sack;\n\tint lost_cnt_hint;\n\tu32 prior_ssthresh;\n\tu32 high_seq;\n\tu32 retrans_stamp;\n\tu32 undo_marker;\n\tint undo_retrans;\n\tu64 bytes_retrans;\n\tu32 total_retrans;\n\tu32 urg_seq;\n\tunsigned int keepalive_time;\n\tunsigned int keepalive_intvl;\n\tint linger2;\n\tu8 bpf_sock_ops_cb_flags;\n\tu16 timeout_rehash;\n\tu32 rcv_ooopack;\n\tu32 rcv_rtt_last_tsecr;\n\tstruct {\n\t\tu32 rtt_us;\n\t\tu32 seq;\n\t\tu64 time;\n\t} rcv_rtt_est;\n\tstruct {\n\t\tu32 space;\n\t\tu32 seq;\n\t\tu64 time;\n\t} rcvq_space;\n\tstruct {\n\t\tu32 probe_seq_start;\n\t\tu32 probe_seq_end;\n\t} mtu_probe;\n\tu32 mtu_info;\n\tbool is_mptcp;\n\tbool syn_smc;\n\tconst struct tcp_sock_af_ops *af_specific;\n\tstruct tcp_md5sig_info *md5sig_info;\n\tstruct tcp_fastopen_request *fastopen_req;\n\tstruct request_sock *fastopen_rsk;\n\tstruct saved_syn *saved_syn;\n};\n\nstruct tcp_md5sig_key;\n\nstruct tcp_sock_af_ops {\n\tstruct tcp_md5sig_key * (*md5_lookup)(const struct sock *, const struct sock *);\n\tint (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);\n\tint (*md5_parse)(struct sock *, int, sockptr_t, int);\n};\n\nstruct tcp_md5sig_info {\n\tstruct hlist_head head;\n\tstruct callback_head rcu;\n};\n\nstruct tcp_fastopen_request {\n\tstruct tcp_fastopen_cookie cookie;\n\tstruct msghdr *data;\n\tsize_t size;\n\tint copied;\n\tstruct ubuf_info *uarg;\n};\n\nunion tcp_md5_addr {\n\tstruct in_addr a4;\n\tstruct in6_addr a6;\n};\n\nstruct tcp_md5sig_key {\n\tstruct hlist_node node;\n\tu8 keylen;\n\tu8 family;\n\tu8 prefixlen;\n\tunion tcp_md5_addr addr;\n\tint l3index;\n\tu8 key[80];\n\tstruct callback_head rcu;\n};\n\nstruct net_protocol {\n\tint (*early_demux)(struct sk_buff *);\n\tint (*early_demux_handler)(struct sk_buff *);\n\tint (*handler)(struct sk_buff *);\n\tint (*err_handler)(struct sk_buff *, u32);\n\tunsigned int no_policy: 1;\n\tunsigned int netns_ok: 1;\n\tunsigned int icmp_strict_tag_validation: 1;\n};\n\nstruct cgroup_cls_state {\n\tstruct cgroup_subsys_state css;\n\tu32 classid;\n};\n\nenum {\n\tSK_MEMINFO_RMEM_ALLOC = 0,\n\tSK_MEMINFO_RCVBUF = 1,\n\tSK_MEMINFO_WMEM_ALLOC = 2,\n\tSK_MEMINFO_SNDBUF = 3,\n\tSK_MEMINFO_FWD_ALLOC = 4,\n\tSK_MEMINFO_WMEM_QUEUED = 5,\n\tSK_MEMINFO_OPTMEM = 6,\n\tSK_MEMINFO_BACKLOG = 7,\n\tSK_MEMINFO_DROPS = 8,\n\tSK_MEMINFO_VARS = 9,\n};\n\nenum sknetlink_groups {\n\tSKNLGRP_NONE = 0,\n\tSKNLGRP_INET_TCP_DESTROY = 1,\n\tSKNLGRP_INET_UDP_DESTROY = 2,\n\tSKNLGRP_INET6_TCP_DESTROY = 3,\n\tSKNLGRP_INET6_UDP_DESTROY = 4,\n\t__SKNLGRP_MAX = 5,\n};\n\nstruct inet_request_sock {\n\tstruct request_sock req;\n\tu16 snd_wscale: 4;\n\tu16 rcv_wscale: 4;\n\tu16 tstamp_ok: 1;\n\tu16 sack_ok: 1;\n\tu16 wscale_ok: 1;\n\tu16 ecn_ok: 1;\n\tu16 acked: 1;\n\tu16 no_srccheck: 1;\n\tu16 smc_ok: 1;\n\tu32 ir_mark;\n\tunion {\n\t\tstruct ip_options_rcu *ireq_opt;\n\t\tstruct {\n\t\t\tstruct ipv6_txoptions *ipv6_opt;\n\t\t\tstruct sk_buff *pktopts;\n\t\t};\n\t};\n};\n\nstruct tcp_request_sock_ops;\n\nstruct tcp_request_sock {\n\tstruct inet_request_sock req;\n\tconst struct tcp_request_sock_ops *af_specific;\n\tu64 snt_synack;\n\tbool tfo_listener;\n\tbool is_mptcp;\n\tbool drop_req;\n\tu32 txhash;\n\tu32 rcv_isn;\n\tu32 snt_isn;\n\tu32 ts_off;\n\tu32 last_oow_ack_time;\n\tu32 rcv_nxt;\n\tu8 syn_tos;\n};\n\nenum tcp_synack_type {\n\tTCP_SYNACK_NORMAL = 0,\n\tTCP_SYNACK_FASTOPEN = 1,\n\tTCP_SYNACK_COOKIE = 2,\n};\n\nstruct tcp_request_sock_ops {\n\tu16 mss_clamp;\n\tstruct tcp_md5sig_key * (*req_md5_lookup)(const struct sock *, const struct sock *);\n\tint (*calc_md5_hash)(char *, const struct tcp_md5sig_key *, const struct sock *, const struct sk_buff *);\n\t__u32 (*cookie_init_seq)(const struct sk_buff *, __u16 *);\n\tstruct dst_entry * (*route_req)(const struct sock *, struct sk_buff *, struct flowi *, struct request_sock *);\n\tu32 (*init_seq)(const struct sk_buff *);\n\tu32 (*init_ts_off)(const struct net *, const struct sk_buff *);\n\tint (*send_synack)(const struct sock *, struct dst_entry *, struct flowi *, struct request_sock *, struct tcp_fastopen_cookie *, enum tcp_synack_type, struct sk_buff *);\n};\n\nstruct nf_conntrack {\n\tatomic_t use;\n};\n\nenum {\n\tSKB_FCLONE_UNAVAILABLE = 0,\n\tSKB_FCLONE_ORIG = 1,\n\tSKB_FCLONE_CLONE = 2,\n};\n\nstruct sk_buff_fclones {\n\tstruct sk_buff skb1;\n\tstruct sk_buff skb2;\n\trefcount_t fclone_ref;\n};\n\nstruct skb_seq_state {\n\t__u32 lower_offset;\n\t__u32 upper_offset;\n\t__u32 frag_idx;\n\t__u32 stepped_offset;\n\tstruct sk_buff *root_skb;\n\tstruct sk_buff *cur_skb;\n\t__u8 *frag_data;\n\t__u32 frag_off;\n};\n\nstruct skb_checksum_ops {\n\t__wsum (*update)(const void *, int, __wsum);\n\t__wsum (*combine)(__wsum, __wsum, int, int);\n};\n\nstruct skb_gso_cb {\n\tunion {\n\t\tint mac_offset;\n\t\tint data_offset;\n\t};\n\tint encap_level;\n\t__wsum csum;\n\t__u16 csum_start;\n};\n\nstruct napi_gro_cb {\n\tvoid *frag0;\n\tunsigned int frag0_len;\n\tint data_offset;\n\tu16 flush;\n\tu16 flush_id;\n\tu16 count;\n\tu16 gro_remcsum_start;\n\tlong unsigned int age;\n\tu16 proto;\n\tu8 same_flow: 1;\n\tu8 encap_mark: 1;\n\tu8 csum_valid: 1;\n\tu8 csum_cnt: 3;\n\tu8 free: 2;\n\tu8 is_ipv6: 1;\n\tu8 is_fou: 1;\n\tu8 is_atomic: 1;\n\tu8 recursion_counter: 4;\n\tu8 is_flist: 1;\n\t__wsum csum;\n\tstruct sk_buff *last;\n};\n\nenum skb_free_reason {\n\tSKB_REASON_CONSUMED = 0,\n\tSKB_REASON_DROPPED = 1,\n};\n\nstruct vlan_hdr {\n\t__be16 h_vlan_TCI;\n\t__be16 h_vlan_encapsulated_proto;\n};\n\nstruct vlan_ethhdr {\n\tunsigned char h_dest[6];\n\tunsigned char h_source[6];\n\t__be16 h_vlan_proto;\n\t__be16 h_vlan_TCI;\n\t__be16 h_vlan_encapsulated_proto;\n};\n\nstruct qdisc_walker {\n\tint stop;\n\tint skip;\n\tint count;\n\tint (*fn)(struct Qdisc *, long unsigned int, struct qdisc_walker *);\n};\n\nstruct ip_auth_hdr {\n\t__u8 nexthdr;\n\t__u8 hdrlen;\n\t__be16 reserved;\n\t__be32 spi;\n\t__be32 seq_no;\n\t__u8 auth_data[0];\n};\n\nstruct frag_hdr {\n\t__u8 nexthdr;\n\t__u8 reserved;\n\t__be16 frag_off;\n\t__be32 identification;\n};\n\nenum {\n\tSCM_TSTAMP_SND = 0,\n\tSCM_TSTAMP_SCHED = 1,\n\tSCM_TSTAMP_ACK = 2,\n};\n\nstruct mpls_shim_hdr {\n\t__be32 label_stack_entry;\n};\n\nstruct napi_alloc_cache {\n\tstruct page_frag_cache page;\n\tunsigned int skb_count;\n\tvoid *skb_cache[64];\n};\n\nstruct ahash_request___2;\n\nstruct scm_cookie {\n\tstruct pid *pid;\n\tstruct scm_fp_list *fp;\n\tstruct scm_creds creds;\n\tu32 secid;\n};\n\nstruct scm_timestamping {\n\tstruct __kernel_old_timespec ts[3];\n};\n\nstruct scm_timestamping64 {\n\tstruct __kernel_timespec ts[3];\n};\n\nenum {\n\tTCA_STATS_UNSPEC = 0,\n\tTCA_STATS_BASIC = 1,\n\tTCA_STATS_RATE_EST = 2,\n\tTCA_STATS_QUEUE = 3,\n\tTCA_STATS_APP = 4,\n\tTCA_STATS_RATE_EST64 = 5,\n\tTCA_STATS_PAD = 6,\n\tTCA_STATS_BASIC_HW = 7,\n\tTCA_STATS_PKT64 = 8,\n\t__TCA_STATS_MAX = 9,\n};\n\nstruct gnet_stats_basic {\n\t__u64 bytes;\n\t__u32 packets;\n};\n\nstruct gnet_stats_rate_est {\n\t__u32 bps;\n\t__u32 pps;\n};\n\nstruct gnet_stats_rate_est64 {\n\t__u64 bps;\n\t__u64 pps;\n};\n\nstruct gnet_estimator {\n\tsigned char interval;\n\tunsigned char ewma_log;\n};\n\nstruct net_rate_estimator {\n\tstruct gnet_stats_basic_packed *bstats;\n\tspinlock_t *stats_lock;\n\tseqcount_t *running;\n\tstruct gnet_stats_basic_cpu *cpu_bstats;\n\tu8 ewma_log;\n\tu8 intvl_log;\n\tseqcount_t seq;\n\tu64 last_packets;\n\tu64 last_bytes;\n\tu64 avpps;\n\tu64 avbps;\n\tlong unsigned int next_jiffies;\n\tstruct timer_list timer;\n\tstruct callback_head rcu;\n};\n\nstruct rtgenmsg {\n\tunsigned char rtgen_family;\n};\n\nenum rtnetlink_groups {\n\tRTNLGRP_NONE = 0,\n\tRTNLGRP_LINK = 1,\n\tRTNLGRP_NOTIFY = 2,\n\tRTNLGRP_NEIGH = 3,\n\tRTNLGRP_TC = 4,\n\tRTNLGRP_IPV4_IFADDR = 5,\n\tRTNLGRP_IPV4_MROUTE = 6,\n\tRTNLGRP_IPV4_ROUTE = 7,\n\tRTNLGRP_IPV4_RULE = 8,\n\tRTNLGRP_IPV6_IFADDR = 9,\n\tRTNLGRP_IPV6_MROUTE = 10,\n\tRTNLGRP_IPV6_ROUTE = 11,\n\tRTNLGRP_IPV6_IFINFO = 12,\n\tRTNLGRP_DECnet_IFADDR = 13,\n\tRTNLGRP_NOP2 = 14,\n\tRTNLGRP_DECnet_ROUTE = 15,\n\tRTNLGRP_DECnet_RULE = 16,\n\tRTNLGRP_NOP4 = 17,\n\tRTNLGRP_IPV6_PREFIX = 18,\n\tRTNLGRP_IPV6_RULE = 19,\n\tRTNLGRP_ND_USEROPT = 20,\n\tRTNLGRP_PHONET_IFADDR = 21,\n\tRTNLGRP_PHONET_ROUTE = 22,\n\tRTNLGRP_DCB = 23,\n\tRTNLGRP_IPV4_NETCONF = 24,\n\tRTNLGRP_IPV6_NETCONF = 25,\n\tRTNLGRP_MDB = 26,\n\tRTNLGRP_MPLS_ROUTE = 27,\n\tRTNLGRP_NSID = 28,\n\tRTNLGRP_MPLS_NETCONF = 29,\n\tRTNLGRP_IPV4_MROUTE_R = 30,\n\tRTNLGRP_IPV6_MROUTE_R = 31,\n\tRTNLGRP_NEXTHOP = 32,\n\tRTNLGRP_BRVLAN = 33,\n\t__RTNLGRP_MAX = 34,\n};\n\nenum {\n\tNETNSA_NONE = 0,\n\tNETNSA_NSID = 1,\n\tNETNSA_PID = 2,\n\tNETNSA_FD = 3,\n\tNETNSA_TARGET_NSID = 4,\n\tNETNSA_CURRENT_NSID = 5,\n\t__NETNSA_MAX = 6,\n};\n\nstruct pcpu_gen_cookie {\n\tlocal_t nesting;\n\tu64 last;\n};\n\nstruct gen_cookie {\n\tstruct pcpu_gen_cookie *local;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tatomic64_t forward_last;\n\tatomic64_t reverse_last;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\ntypedef int (*rtnl_doit_func)(struct sk_buff *, struct nlmsghdr *, struct netlink_ext_ack *);\n\ntypedef int (*rtnl_dumpit_func)(struct sk_buff *, struct netlink_callback *);\n\nenum rtnl_link_flags {\n\tRTNL_FLAG_DOIT_UNLOCKED = 1,\n};\n\nstruct net_fill_args {\n\tu32 portid;\n\tu32 seq;\n\tint flags;\n\tint cmd;\n\tint nsid;\n\tbool add_ref;\n\tint ref_nsid;\n};\n\nstruct rtnl_net_dump_cb {\n\tstruct net *tgt_net;\n\tstruct net *ref_net;\n\tstruct sk_buff *skb;\n\tstruct net_fill_args fillargs;\n\tint idx;\n\tint s_idx;\n};\n\ntypedef u16 u_int16_t;\n\ntypedef u32 u_int32_t;\n\ntypedef u64 u_int64_t;\n\nstruct flow_dissector_key_control {\n\tu16 thoff;\n\tu16 addr_type;\n\tu32 flags;\n};\n\nenum flow_dissect_ret {\n\tFLOW_DISSECT_RET_OUT_GOOD = 0,\n\tFLOW_DISSECT_RET_OUT_BAD = 1,\n\tFLOW_DISSECT_RET_PROTO_AGAIN = 2,\n\tFLOW_DISSECT_RET_IPPROTO_AGAIN = 3,\n\tFLOW_DISSECT_RET_CONTINUE = 4,\n};\n\nstruct flow_dissector_key_basic {\n\t__be16 n_proto;\n\tu8 ip_proto;\n\tu8 padding;\n};\n\nstruct flow_dissector_key_tags {\n\tu32 flow_label;\n};\n\nstruct flow_dissector_key_vlan {\n\tunion {\n\t\tstruct {\n\t\t\tu16 vlan_id: 12;\n\t\t\tu16 vlan_dei: 1;\n\t\t\tu16 vlan_priority: 3;\n\t\t};\n\t\t__be16 vlan_tci;\n\t};\n\t__be16 vlan_tpid;\n};\n\nstruct flow_dissector_mpls_lse {\n\tu32 mpls_ttl: 8;\n\tu32 mpls_bos: 1;\n\tu32 mpls_tc: 3;\n\tu32 mpls_label: 20;\n};\n\nstruct flow_dissector_key_mpls {\n\tstruct flow_dissector_mpls_lse ls[7];\n\tu8 used_lses;\n};\n\nstruct flow_dissector_key_enc_opts {\n\tu8 data[255];\n\tu8 len;\n\t__be16 dst_opt_type;\n};\n\nstruct flow_dissector_key_keyid {\n\t__be32 keyid;\n};\n\nstruct flow_dissector_key_ipv4_addrs {\n\t__be32 src;\n\t__be32 dst;\n};\n\nstruct flow_dissector_key_ipv6_addrs {\n\tstruct in6_addr src;\n\tstruct in6_addr dst;\n};\n\nstruct flow_dissector_key_tipc {\n\t__be32 key;\n};\n\nstruct flow_dissector_key_addrs {\n\tunion {\n\t\tstruct flow_dissector_key_ipv4_addrs v4addrs;\n\t\tstruct flow_dissector_key_ipv6_addrs v6addrs;\n\t\tstruct flow_dissector_key_tipc tipckey;\n\t};\n};\n\nstruct flow_dissector_key_arp {\n\t__u32 sip;\n\t__u32 tip;\n\t__u8 op;\n\tunsigned char sha[6];\n\tunsigned char tha[6];\n};\n\nstruct flow_dissector_key_ports {\n\tunion {\n\t\t__be32 ports;\n\t\tstruct {\n\t\t\t__be16 src;\n\t\t\t__be16 dst;\n\t\t};\n\t};\n};\n\nstruct flow_dissector_key_icmp {\n\tstruct {\n\t\tu8 type;\n\t\tu8 code;\n\t};\n\tu16 id;\n};\n\nstruct flow_dissector_key_eth_addrs {\n\tunsigned char dst[6];\n\tunsigned char src[6];\n};\n\nstruct flow_dissector_key_tcp {\n\t__be16 flags;\n};\n\nstruct flow_dissector_key_ip {\n\t__u8 tos;\n\t__u8 ttl;\n};\n\nstruct flow_dissector_key_meta {\n\tint ingress_ifindex;\n\tu16 ingress_iftype;\n};\n\nstruct flow_dissector_key_ct {\n\tu16 ct_state;\n\tu16 ct_zone;\n\tu32 ct_mark;\n\tu32 ct_labels[4];\n};\n\nstruct flow_dissector_key_hash {\n\tu32 hash;\n};\n\nstruct flow_dissector_key {\n\tenum flow_dissector_key_id key_id;\n\tsize_t offset;\n};\n\nstruct flow_keys_basic {\n\tstruct flow_dissector_key_control control;\n\tstruct flow_dissector_key_basic basic;\n};\n\nstruct flow_keys {\n\tstruct flow_dissector_key_control control;\n\tstruct flow_dissector_key_basic basic;\n\tstruct flow_dissector_key_tags tags;\n\tstruct flow_dissector_key_vlan vlan;\n\tstruct flow_dissector_key_vlan cvlan;\n\tstruct flow_dissector_key_keyid keyid;\n\tstruct flow_dissector_key_ports ports;\n\tstruct flow_dissector_key_icmp icmp;\n\tstruct flow_dissector_key_addrs addrs;\n\tint: 32;\n};\n\nstruct flow_keys_digest {\n\tu8 data[16];\n};\n\nenum ip_conntrack_info {\n\tIP_CT_ESTABLISHED = 0,\n\tIP_CT_RELATED = 1,\n\tIP_CT_NEW = 2,\n\tIP_CT_IS_REPLY = 3,\n\tIP_CT_ESTABLISHED_REPLY = 3,\n\tIP_CT_RELATED_REPLY = 4,\n\tIP_CT_NUMBER = 5,\n\tIP_CT_UNTRACKED = 7,\n};\n\nstruct xt_table_info;\n\nstruct xt_table {\n\tstruct list_head list;\n\tunsigned int valid_hooks;\n\tstruct xt_table_info *private;\n\tstruct module *me;\n\tu_int8_t af;\n\tint priority;\n\tint (*table_init)(struct net *);\n\tconst char name[32];\n};\n\nunion nf_inet_addr {\n\t__u32 all[4];\n\t__be32 ip;\n\t__be32 ip6[4];\n\tstruct in_addr in;\n\tstruct in6_addr in6;\n};\n\nstruct ip_ct_tcp_state {\n\tu_int32_t td_end;\n\tu_int32_t td_maxend;\n\tu_int32_t td_maxwin;\n\tu_int32_t td_maxack;\n\tu_int8_t td_scale;\n\tu_int8_t flags;\n};\n\nstruct ip_ct_tcp {\n\tstruct ip_ct_tcp_state seen[2];\n\tu_int8_t state;\n\tu_int8_t last_dir;\n\tu_int8_t retrans;\n\tu_int8_t last_index;\n\tu_int32_t last_seq;\n\tu_int32_t last_ack;\n\tu_int32_t last_end;\n\tu_int16_t last_win;\n\tu_int8_t last_wscale;\n\tu_int8_t last_flags;\n};\n\nunion nf_conntrack_man_proto {\n\t__be16 all;\n\tstruct {\n\t\t__be16 port;\n\t} tcp;\n\tstruct {\n\t\t__be16 port;\n\t} udp;\n\tstruct {\n\t\t__be16 id;\n\t} icmp;\n\tstruct {\n\t\t__be16 port;\n\t} dccp;\n\tstruct {\n\t\t__be16 port;\n\t} sctp;\n\tstruct {\n\t\t__be16 key;\n\t} gre;\n};\n\nstruct nf_ct_dccp {\n\tu_int8_t role[2];\n\tu_int8_t state;\n\tu_int8_t last_pkt;\n\tu_int8_t last_dir;\n\tu_int64_t handshake_seq;\n};\n\nstruct ip_ct_sctp {\n\tenum sctp_conntrack state;\n\t__be32 vtag[2];\n\tu8 last_dir;\n\tu8 flags;\n};\n\nstruct nf_ct_event;\n\nstruct nf_ct_event_notifier {\n\tint (*fcn)(unsigned int, struct nf_ct_event *);\n};\n\nstruct nf_exp_event;\n\nstruct nf_exp_event_notifier {\n\tint (*fcn)(unsigned int, struct nf_exp_event *);\n};\n\nenum bpf_ret_code {\n\tBPF_OK = 0,\n\tBPF_DROP = 2,\n\tBPF_REDIRECT = 7,\n\tBPF_LWT_REROUTE = 128,\n};\n\nenum {\n\tBPF_FLOW_DISSECTOR_F_PARSE_1ST_FRAG = 1,\n\tBPF_FLOW_DISSECTOR_F_STOP_AT_FLOW_LABEL = 2,\n\tBPF_FLOW_DISSECTOR_F_STOP_AT_ENCAP = 4,\n};\n\nstruct ip_tunnel_parm {\n\tchar name[16];\n\tint link;\n\t__be16 i_flags;\n\t__be16 o_flags;\n\t__be32 i_key;\n\t__be32 o_key;\n\tstruct iphdr iph;\n};\n\nstruct ip_tunnel_key {\n\t__be64 tun_id;\n\tunion {\n\t\tstruct {\n\t\t\t__be32 src;\n\t\t\t__be32 dst;\n\t\t} ipv4;\n\t\tstruct {\n\t\t\tstruct in6_addr src;\n\t\t\tstruct in6_addr dst;\n\t\t} ipv6;\n\t} u;\n\t__be16 tun_flags;\n\tu8 tos;\n\tu8 ttl;\n\t__be32 label;\n\t__be16 tp_src;\n\t__be16 tp_dst;\n};\n\nstruct dst_cache_pcpu;\n\nstruct dst_cache {\n\tstruct dst_cache_pcpu *cache;\n\tlong unsigned int reset_ts;\n};\n\nstruct ip_tunnel_info {\n\tstruct ip_tunnel_key key;\n\tstruct dst_cache dst_cache;\n\tu8 options_len;\n\tu8 mode;\n};\n\nstruct lwtunnel_state {\n\t__u16 type;\n\t__u16 flags;\n\t__u16 headroom;\n\tatomic_t refcnt;\n\tint (*orig_output)(struct net *, struct sock *, struct sk_buff *);\n\tint (*orig_input)(struct sk_buff *);\n\tstruct callback_head rcu;\n\t__u8 data[0];\n};\n\nunion tcp_word_hdr {\n\tstruct tcphdr hdr;\n\t__be32 words[5];\n};\n\nstruct arphdr {\n\t__be16 ar_hrd;\n\t__be16 ar_pro;\n\tunsigned char ar_hln;\n\tunsigned char ar_pln;\n\t__be16 ar_op;\n};\n\nstruct fib_info;\n\nstruct fib_nh {\n\tstruct fib_nh_common nh_common;\n\tstruct hlist_node nh_hash;\n\tstruct fib_info *nh_parent;\n\t__u32 nh_tclassid;\n\t__be32 nh_saddr;\n\tint nh_saddr_genid;\n};\n\nstruct fib_info {\n\tstruct hlist_node fib_hash;\n\tstruct hlist_node fib_lhash;\n\tstruct list_head nh_list;\n\tstruct net *fib_net;\n\tint fib_treeref;\n\trefcount_t fib_clntref;\n\tunsigned int fib_flags;\n\tunsigned char fib_dead;\n\tunsigned char fib_protocol;\n\tunsigned char fib_scope;\n\tunsigned char fib_type;\n\t__be32 fib_prefsrc;\n\tu32 fib_tb_id;\n\tu32 fib_priority;\n\tstruct dst_metrics *fib_metrics;\n\tint fib_nhs;\n\tbool fib_nh_is_v6;\n\tbool nh_updated;\n\tstruct nexthop *nh;\n\tstruct callback_head rcu;\n\tstruct fib_nh fib_nh[0];\n};\n\nstruct nh_info;\n\nstruct nh_group;\n\nstruct nexthop {\n\tstruct rb_node rb_node;\n\tstruct list_head fi_list;\n\tstruct list_head f6i_list;\n\tstruct list_head fdb_list;\n\tstruct list_head grp_list;\n\tstruct net *net;\n\tu32 id;\n\tu8 protocol;\n\tu8 nh_flags;\n\tbool is_group;\n\trefcount_t refcnt;\n\tstruct callback_head rcu;\n\tunion {\n\t\tstruct nh_info *nh_info;\n\t\tstruct nh_group *nh_grp;\n\t};\n};\n\nstruct nh_info {\n\tstruct hlist_node dev_hash;\n\tstruct nexthop *nh_parent;\n\tu8 family;\n\tbool reject_nh;\n\tbool fdb_nh;\n\tunion {\n\t\tstruct fib_nh_common fib_nhc;\n\t\tstruct fib_nh fib_nh;\n\t\tstruct fib6_nh fib6_nh;\n\t};\n};\n\nstruct nh_grp_entry {\n\tstruct nexthop *nh;\n\tu8 weight;\n\tatomic_t upper_bound;\n\tstruct list_head nh_list;\n\tstruct nexthop *nh_parent;\n};\n\nstruct nh_group {\n\tstruct nh_group *spare;\n\tu16 num_nh;\n\tbool mpath;\n\tbool fdb_nh;\n\tbool has_v4;\n\tstruct nh_grp_entry nh_entries[0];\n};\n\nenum metadata_type {\n\tMETADATA_IP_TUNNEL = 0,\n\tMETADATA_HW_PORT_MUX = 1,\n};\n\nstruct hw_port_info {\n\tstruct net_device *lower_dev;\n\tu32 port_id;\n};\n\nstruct metadata_dst {\n\tstruct dst_entry dst;\n\tenum metadata_type type;\n\tunion {\n\t\tstruct ip_tunnel_info tun_info;\n\t\tstruct hw_port_info port_info;\n\t} u;\n};\n\nstruct gre_base_hdr {\n\t__be16 flags;\n\t__be16 protocol;\n};\n\nstruct gre_full_hdr {\n\tstruct gre_base_hdr fixed_header;\n\t__be16 csum;\n\t__be16 reserved1;\n\t__be32 key;\n\t__be32 seq;\n};\n\nstruct pptp_gre_header {\n\tstruct gre_base_hdr gre_hd;\n\t__be16 payload_len;\n\t__be16 call_id;\n\t__be32 seq;\n\t__be32 ack;\n};\n\nstruct tipc_basic_hdr {\n\t__be32 w[4];\n};\n\nstruct icmphdr {\n\t__u8 type;\n\t__u8 code;\n\t__sum16 checksum;\n\tunion {\n\t\tstruct {\n\t\t\t__be16 id;\n\t\t\t__be16 sequence;\n\t\t} echo;\n\t\t__be32 gateway;\n\t\tstruct {\n\t\t\t__be16 __unused;\n\t\t\t__be16 mtu;\n\t\t} frag;\n\t\t__u8 reserved[4];\n\t} un;\n};\n\nenum l2tp_debug_flags {\n\tL2TP_MSG_DEBUG = 1,\n\tL2TP_MSG_CONTROL = 2,\n\tL2TP_MSG_SEQ = 4,\n\tL2TP_MSG_DATA = 8,\n};\n\nstruct pppoe_tag {\n\t__be16 tag_type;\n\t__be16 tag_len;\n\tchar tag_data[0];\n};\n\nstruct pppoe_hdr {\n\t__u8 type: 4;\n\t__u8 ver: 4;\n\t__u8 code;\n\t__be16 sid;\n\t__be16 length;\n\tstruct pppoe_tag tag[0];\n};\n\nstruct mpls_label {\n\t__be32 entry;\n};\n\nenum batadv_packettype {\n\tBATADV_IV_OGM = 0,\n\tBATADV_BCAST = 1,\n\tBATADV_CODED = 2,\n\tBATADV_ELP = 3,\n\tBATADV_OGM2 = 4,\n\tBATADV_UNICAST = 64,\n\tBATADV_UNICAST_FRAG = 65,\n\tBATADV_UNICAST_4ADDR = 66,\n\tBATADV_ICMP = 67,\n\tBATADV_UNICAST_TVLV = 68,\n};\n\nstruct batadv_unicast_packet {\n\t__u8 packet_type;\n\t__u8 version;\n\t__u8 ttl;\n\t__u8 ttvn;\n\t__u8 dest[6];\n};\n\nstruct nf_conntrack_zone {\n\tu16 id;\n\tu8 flags;\n\tu8 dir;\n};\n\nstruct nf_conntrack_man {\n\tunion nf_inet_addr u3;\n\tunion nf_conntrack_man_proto u;\n\tu_int16_t l3num;\n};\n\nstruct nf_conntrack_tuple {\n\tstruct nf_conntrack_man src;\n\tstruct {\n\t\tunion nf_inet_addr u3;\n\t\tunion {\n\t\t\t__be16 all;\n\t\t\tstruct {\n\t\t\t\t__be16 port;\n\t\t\t} tcp;\n\t\t\tstruct {\n\t\t\t\t__be16 port;\n\t\t\t} udp;\n\t\t\tstruct {\n\t\t\t\tu_int8_t type;\n\t\t\t\tu_int8_t code;\n\t\t\t} icmp;\n\t\t\tstruct {\n\t\t\t\t__be16 port;\n\t\t\t} dccp;\n\t\t\tstruct {\n\t\t\t\t__be16 port;\n\t\t\t} sctp;\n\t\t\tstruct {\n\t\t\t\t__be16 key;\n\t\t\t} gre;\n\t\t} u;\n\t\tu_int8_t protonum;\n\t\tu_int8_t dir;\n\t} dst;\n};\n\nstruct nf_conntrack_tuple_hash {\n\tstruct hlist_nulls_node hnnode;\n\tstruct nf_conntrack_tuple tuple;\n};\n\nstruct nf_ct_udp {\n\tlong unsigned int stream_ts;\n};\n\nstruct nf_ct_gre {\n\tunsigned int stream_timeout;\n\tunsigned int timeout;\n};\n\nunion nf_conntrack_proto {\n\tstruct nf_ct_dccp dccp;\n\tstruct ip_ct_sctp sctp;\n\tstruct ip_ct_tcp tcp;\n\tstruct nf_ct_udp udp;\n\tstruct nf_ct_gre gre;\n\tunsigned int tmpl_padto;\n};\n\nstruct nf_ct_ext;\n\nstruct nf_conn {\n\tstruct nf_conntrack ct_general;\n\tspinlock_t lock;\n\tu32 timeout;\n\tstruct nf_conntrack_zone zone;\n\tstruct nf_conntrack_tuple_hash tuplehash[2];\n\tlong unsigned int status;\n\tu16 cpu;\n\tpossible_net_t ct_net;\n\tstruct hlist_node nat_bysource;\n\tstruct {\t} __nfct_init_offset;\n\tstruct nf_conn *master;\n\tu_int32_t mark;\n\tu_int32_t secmark;\n\tstruct nf_ct_ext *ext;\n\tunion nf_conntrack_proto proto;\n};\n\nstruct xt_table_info {\n\tunsigned int size;\n\tunsigned int number;\n\tunsigned int initial_entries;\n\tunsigned int hook_entry[5];\n\tunsigned int underflow[5];\n\tunsigned int stacksize;\n\tvoid ***jumpstack;\n\tunsigned char entries[0];\n};\n\nstruct nf_conntrack_tuple_mask {\n\tstruct {\n\t\tunion nf_inet_addr u3;\n\t\tunion nf_conntrack_man_proto u;\n\t} src;\n};\n\nstruct nf_ct_ext {\n\tu8 offset[8];\n\tu8 len;\n\tchar data[0];\n};\n\nstruct nf_conntrack_helper;\n\nstruct nf_conntrack_expect {\n\tstruct hlist_node lnode;\n\tstruct hlist_node hnode;\n\tstruct nf_conntrack_tuple tuple;\n\tstruct nf_conntrack_tuple_mask mask;\n\tvoid (*expectfn)(struct nf_conn *, struct nf_conntrack_expect *);\n\tstruct nf_conntrack_helper *helper;\n\tstruct nf_conn *master;\n\tstruct timer_list timeout;\n\trefcount_t use;\n\tunsigned int flags;\n\tunsigned int class;\n\tunion nf_inet_addr saved_addr;\n\tunion nf_conntrack_man_proto saved_proto;\n\tenum ip_conntrack_dir dir;\n\tstruct callback_head rcu;\n};\n\nenum nf_ct_ext_id {\n\tNF_CT_EXT_HELPER = 0,\n\tNF_CT_EXT_NAT = 1,\n\tNF_CT_EXT_SEQADJ = 2,\n\tNF_CT_EXT_ACCT = 3,\n\tNF_CT_EXT_ECACHE = 4,\n\tNF_CT_EXT_TSTAMP = 5,\n\tNF_CT_EXT_LABELS = 6,\n\tNF_CT_EXT_SYNPROXY = 7,\n\tNF_CT_EXT_NUM = 8,\n};\n\nstruct nf_ct_event {\n\tstruct nf_conn *ct;\n\tu32 portid;\n\tint report;\n};\n\nstruct nf_exp_event {\n\tstruct nf_conntrack_expect *exp;\n\tu32 portid;\n\tint report;\n};\n\nstruct nf_conn_labels {\n\tlong unsigned int bits[2];\n};\n\nstruct _flow_keys_digest_data {\n\t__be16 n_proto;\n\tu8 ip_proto;\n\tu8 padding;\n\t__be32 ports;\n\t__be32 src;\n\t__be32 dst;\n};\n\nstruct rps_sock_flow_table {\n\tu32 mask;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tu32 ents[0];\n};\n\nstruct ipv4_devconf {\n\tvoid *sysctl;\n\tint data[32];\n\tlong unsigned int state[1];\n};\n\nenum nf_dev_hooks {\n\tNF_NETDEV_INGRESS = 0,\n\tNF_NETDEV_NUMHOOKS = 1,\n};\n\nenum {\n\tIF_OPER_UNKNOWN = 0,\n\tIF_OPER_NOTPRESENT = 1,\n\tIF_OPER_DOWN = 2,\n\tIF_OPER_LOWERLAYERDOWN = 3,\n\tIF_OPER_TESTING = 4,\n\tIF_OPER_DORMANT = 5,\n\tIF_OPER_UP = 6,\n};\n\nstruct ifbond {\n\t__s32 bond_mode;\n\t__s32 num_slaves;\n\t__s32 miimon;\n};\n\ntypedef struct ifbond ifbond;\n\nstruct ifslave {\n\t__s32 slave_id;\n\tchar slave_name[16];\n\t__s8 link;\n\t__s8 state;\n\t__u32 link_failure_count;\n};\n\ntypedef struct ifslave ifslave;\n\nstruct netdev_boot_setup {\n\tchar name[16];\n\tstruct ifmap map;\n};\n\nenum {\n\tNAPIF_STATE_SCHED = 1,\n\tNAPIF_STATE_MISSED = 2,\n\tNAPIF_STATE_DISABLE = 4,\n\tNAPIF_STATE_NPSVC = 8,\n\tNAPIF_STATE_LISTED = 16,\n\tNAPIF_STATE_NO_BUSY_POLL = 32,\n\tNAPIF_STATE_IN_BUSY_POLL = 64,\n\tNAPIF_STATE_PREFER_BUSY_POLL = 128,\n};\n\nenum gro_result {\n\tGRO_MERGED = 0,\n\tGRO_MERGED_FREE = 1,\n\tGRO_HELD = 2,\n\tGRO_NORMAL = 3,\n\tGRO_DROP = 4,\n\tGRO_CONSUMED = 5,\n};\n\ntypedef enum gro_result gro_result_t;\n\nenum netdev_queue_state_t {\n\t__QUEUE_STATE_DRV_XOFF = 0,\n\t__QUEUE_STATE_STACK_XOFF = 1,\n\t__QUEUE_STATE_FROZEN = 2,\n};\n\nstruct bpf_xdp_link {\n\tstruct bpf_link link;\n\tstruct net_device *dev;\n\tint flags;\n};\n\nstruct netdev_net_notifier {\n\tstruct list_head list;\n\tstruct notifier_block *nb;\n};\n\nstruct netpoll;\n\nstruct netpoll_info {\n\trefcount_t refcnt;\n\tstruct semaphore dev_lock;\n\tstruct sk_buff_head txq;\n\tstruct delayed_work tx_work;\n\tstruct netpoll *netpoll;\n\tstruct callback_head rcu;\n};\n\nstruct udp_tunnel_info {\n\tshort unsigned int type;\n\tsa_family_t sa_family;\n\t__be16 port;\n\tu8 hw_priv;\n};\n\nstruct in_ifaddr;\n\nstruct ip_mc_list;\n\nstruct in_device {\n\tstruct net_device *dev;\n\trefcount_t refcnt;\n\tint dead;\n\tstruct in_ifaddr *ifa_list;\n\tstruct ip_mc_list *mc_list;\n\tstruct ip_mc_list **mc_hash;\n\tint mc_count;\n\tspinlock_t mc_tomb_lock;\n\tstruct ip_mc_list *mc_tomb;\n\tlong unsigned int mr_v1_seen;\n\tlong unsigned int mr_v2_seen;\n\tlong unsigned int mr_maxdelay;\n\tlong unsigned int mr_qi;\n\tlong unsigned int mr_qri;\n\tunsigned char mr_qrv;\n\tunsigned char mr_gq_running;\n\tunsigned char mr_ifc_count;\n\tstruct timer_list mr_gq_timer;\n\tstruct timer_list mr_ifc_timer;\n\tstruct neigh_parms *arp_parms;\n\tstruct ipv4_devconf cnf;\n\tstruct callback_head callback_head;\n};\n\nstruct offload_callbacks {\n\tstruct sk_buff * (*gso_segment)(struct sk_buff *, netdev_features_t);\n\tstruct sk_buff * (*gro_receive)(struct list_head *, struct sk_buff *);\n\tint (*gro_complete)(struct sk_buff *, int);\n};\n\nstruct packet_offload {\n\t__be16 type;\n\tu16 priority;\n\tstruct offload_callbacks callbacks;\n\tstruct list_head list;\n};\n\nstruct netdev_notifier_info_ext {\n\tstruct netdev_notifier_info info;\n\tunion {\n\t\tu32 mtu;\n\t} ext;\n};\n\nstruct netdev_notifier_change_info {\n\tstruct netdev_notifier_info info;\n\tunsigned int flags_changed;\n};\n\nstruct netdev_notifier_changelowerstate_info {\n\tstruct netdev_notifier_info info;\n\tvoid *lower_state_info;\n};\n\nstruct netdev_notifier_pre_changeaddr_info {\n\tstruct netdev_notifier_info info;\n\tconst unsigned char *dev_addr;\n};\n\ntypedef int (*bpf_op_t)(struct net_device *, struct netdev_bpf *);\n\nenum {\n\tNESTED_SYNC_IMM_BIT = 0,\n\tNESTED_SYNC_TODO_BIT = 1,\n};\n\nstruct netdev_nested_priv {\n\tunsigned char flags;\n\tvoid *data;\n};\n\nstruct netdev_bonding_info {\n\tifslave slave;\n\tifbond master;\n};\n\nstruct netdev_notifier_bonding_info {\n\tstruct netdev_notifier_info info;\n\tstruct netdev_bonding_info bonding_info;\n};\n\nunion inet_addr {\n\t__u32 all[4];\n\t__be32 ip;\n\t__be32 ip6[4];\n\tstruct in_addr in;\n\tstruct in6_addr in6;\n};\n\nstruct netpoll {\n\tstruct net_device *dev;\n\tchar dev_name[16];\n\tconst char *name;\n\tunion inet_addr local_ip;\n\tunion inet_addr remote_ip;\n\tbool ipv6;\n\tu16 local_port;\n\tu16 remote_port;\n\tu8 remote_mac[6];\n};\n\nenum qdisc_state_t {\n\t__QDISC_STATE_SCHED = 0,\n\t__QDISC_STATE_DEACTIVATED = 1,\n};\n\nstruct tcf_walker {\n\tint stop;\n\tint skip;\n\tint count;\n\tbool nonempty;\n\tlong unsigned int cookie;\n\tint (*fn)(struct tcf_proto *, void *, struct tcf_walker *);\n};\n\nenum {\n\tIPV4_DEVCONF_FORWARDING = 1,\n\tIPV4_DEVCONF_MC_FORWARDING = 2,\n\tIPV4_DEVCONF_PROXY_ARP = 3,\n\tIPV4_DEVCONF_ACCEPT_REDIRECTS = 4,\n\tIPV4_DEVCONF_SECURE_REDIRECTS = 5,\n\tIPV4_DEVCONF_SEND_REDIRECTS = 6,\n\tIPV4_DEVCONF_SHARED_MEDIA = 7,\n\tIPV4_DEVCONF_RP_FILTER = 8,\n\tIPV4_DEVCONF_ACCEPT_SOURCE_ROUTE = 9,\n\tIPV4_DEVCONF_BOOTP_RELAY = 10,\n\tIPV4_DEVCONF_LOG_MARTIANS = 11,\n\tIPV4_DEVCONF_TAG = 12,\n\tIPV4_DEVCONF_ARPFILTER = 13,\n\tIPV4_DEVCONF_MEDIUM_ID = 14,\n\tIPV4_DEVCONF_NOXFRM = 15,\n\tIPV4_DEVCONF_NOPOLICY = 16,\n\tIPV4_DEVCONF_FORCE_IGMP_VERSION = 17,\n\tIPV4_DEVCONF_ARP_ANNOUNCE = 18,\n\tIPV4_DEVCONF_ARP_IGNORE = 19,\n\tIPV4_DEVCONF_PROMOTE_SECONDARIES = 20,\n\tIPV4_DEVCONF_ARP_ACCEPT = 21,\n\tIPV4_DEVCONF_ARP_NOTIFY = 22,\n\tIPV4_DEVCONF_ACCEPT_LOCAL = 23,\n\tIPV4_DEVCONF_SRC_VMARK = 24,\n\tIPV4_DEVCONF_PROXY_ARP_PVLAN = 25,\n\tIPV4_DEVCONF_ROUTE_LOCALNET = 26,\n\tIPV4_DEVCONF_IGMPV2_UNSOLICITED_REPORT_INTERVAL = 27,\n\tIPV4_DEVCONF_IGMPV3_UNSOLICITED_REPORT_INTERVAL = 28,\n\tIPV4_DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 29,\n\tIPV4_DEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 30,\n\tIPV4_DEVCONF_DROP_GRATUITOUS_ARP = 31,\n\tIPV4_DEVCONF_BC_FORWARDING = 32,\n\t__IPV4_DEVCONF_MAX = 33,\n};\n\nstruct in_ifaddr {\n\tstruct hlist_node hash;\n\tstruct in_ifaddr *ifa_next;\n\tstruct in_device *ifa_dev;\n\tstruct callback_head callback_head;\n\t__be32 ifa_local;\n\t__be32 ifa_address;\n\t__be32 ifa_mask;\n\t__u32 ifa_rt_priority;\n\t__be32 ifa_broadcast;\n\tunsigned char ifa_scope;\n\tunsigned char ifa_prefixlen;\n\t__u32 ifa_flags;\n\tchar ifa_label[16];\n\t__u32 ifa_valid_lft;\n\t__u32 ifa_preferred_lft;\n\tlong unsigned int ifa_cstamp;\n\tlong unsigned int ifa_tstamp;\n};\n\nstruct udp_tunnel_nic_shared {\n\tstruct udp_tunnel_nic *udp_tunnel_nic_info;\n\tstruct list_head devices;\n};\n\nstruct dev_kfree_skb_cb {\n\tenum skb_free_reason reason;\n};\n\nstruct netdev_adjacent {\n\tstruct net_device *dev;\n\tbool master;\n\tbool ignore;\n\tu16 ref_nr;\n\tvoid *private;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n};\n\nstruct netdev_hw_addr {\n\tstruct list_head list;\n\tunsigned char addr[32];\n\tunsigned char type;\n\tbool global_use;\n\tint sync_cnt;\n\tint refcount;\n\tint synced;\n\tstruct callback_head callback_head;\n};\n\nenum {\n\tNDA_UNSPEC = 0,\n\tNDA_DST = 1,\n\tNDA_LLADDR = 2,\n\tNDA_CACHEINFO = 3,\n\tNDA_PROBES = 4,\n\tNDA_VLAN = 5,\n\tNDA_PORT = 6,\n\tNDA_VNI = 7,\n\tNDA_IFINDEX = 8,\n\tNDA_MASTER = 9,\n\tNDA_LINK_NETNSID = 10,\n\tNDA_SRC_VNI = 11,\n\tNDA_PROTOCOL = 12,\n\tNDA_NH_ID = 13,\n\tNDA_FDB_EXT_ATTRS = 14,\n\t__NDA_MAX = 15,\n};\n\nstruct nda_cacheinfo {\n\t__u32 ndm_confirmed;\n\t__u32 ndm_used;\n\t__u32 ndm_updated;\n\t__u32 ndm_refcnt;\n};\n\nstruct ndt_stats {\n\t__u64 ndts_allocs;\n\t__u64 ndts_destroys;\n\t__u64 ndts_hash_grows;\n\t__u64 ndts_res_failed;\n\t__u64 ndts_lookups;\n\t__u64 ndts_hits;\n\t__u64 ndts_rcv_probes_mcast;\n\t__u64 ndts_rcv_probes_ucast;\n\t__u64 ndts_periodic_gc_runs;\n\t__u64 ndts_forced_gc_runs;\n\t__u64 ndts_table_fulls;\n};\n\nenum {\n\tNDTPA_UNSPEC = 0,\n\tNDTPA_IFINDEX = 1,\n\tNDTPA_REFCNT = 2,\n\tNDTPA_REACHABLE_TIME = 3,\n\tNDTPA_BASE_REACHABLE_TIME = 4,\n\tNDTPA_RETRANS_TIME = 5,\n\tNDTPA_GC_STALETIME = 6,\n\tNDTPA_DELAY_PROBE_TIME = 7,\n\tNDTPA_QUEUE_LEN = 8,\n\tNDTPA_APP_PROBES = 9,\n\tNDTPA_UCAST_PROBES = 10,\n\tNDTPA_MCAST_PROBES = 11,\n\tNDTPA_ANYCAST_DELAY = 12,\n\tNDTPA_PROXY_DELAY = 13,\n\tNDTPA_PROXY_QLEN = 14,\n\tNDTPA_LOCKTIME = 15,\n\tNDTPA_QUEUE_LENBYTES = 16,\n\tNDTPA_MCAST_REPROBES = 17,\n\tNDTPA_PAD = 18,\n\t__NDTPA_MAX = 19,\n};\n\nstruct ndtmsg {\n\t__u8 ndtm_family;\n\t__u8 ndtm_pad1;\n\t__u16 ndtm_pad2;\n};\n\nstruct ndt_config {\n\t__u16 ndtc_key_len;\n\t__u16 ndtc_entry_size;\n\t__u32 ndtc_entries;\n\t__u32 ndtc_last_flush;\n\t__u32 ndtc_last_rand;\n\t__u32 ndtc_hash_rnd;\n\t__u32 ndtc_hash_mask;\n\t__u32 ndtc_hash_chain_gc;\n\t__u32 ndtc_proxy_qlen;\n};\n\nenum {\n\tNDTA_UNSPEC = 0,\n\tNDTA_NAME = 1,\n\tNDTA_THRESH1 = 2,\n\tNDTA_THRESH2 = 3,\n\tNDTA_THRESH3 = 4,\n\tNDTA_CONFIG = 5,\n\tNDTA_PARMS = 6,\n\tNDTA_STATS = 7,\n\tNDTA_GC_INTERVAL = 8,\n\tNDTA_PAD = 9,\n\t__NDTA_MAX = 10,\n};\n\nenum {\n\tRTN_UNSPEC = 0,\n\tRTN_UNICAST = 1,\n\tRTN_LOCAL = 2,\n\tRTN_BROADCAST = 3,\n\tRTN_ANYCAST = 4,\n\tRTN_MULTICAST = 5,\n\tRTN_BLACKHOLE = 6,\n\tRTN_UNREACHABLE = 7,\n\tRTN_PROHIBIT = 8,\n\tRTN_THROW = 9,\n\tRTN_NAT = 10,\n\tRTN_XRESOLVE = 11,\n\t__RTN_MAX = 12,\n};\n\nenum {\n\tNEIGH_ARP_TABLE = 0,\n\tNEIGH_ND_TABLE = 1,\n\tNEIGH_DN_TABLE = 2,\n\tNEIGH_NR_TABLES = 3,\n\tNEIGH_LINK_TABLE = 3,\n};\n\nstruct neigh_seq_state {\n\tstruct seq_net_private p;\n\tstruct neigh_table *tbl;\n\tstruct neigh_hash_table *nht;\n\tvoid * (*neigh_sub_iter)(struct neigh_seq_state *, struct neighbour *, loff_t *);\n\tunsigned int bucket;\n\tunsigned int flags;\n};\n\nstruct neighbour_cb {\n\tlong unsigned int sched_next;\n\tunsigned int flags;\n};\n\nenum netevent_notif_type {\n\tNETEVENT_NEIGH_UPDATE = 1,\n\tNETEVENT_REDIRECT = 2,\n\tNETEVENT_DELAY_PROBE_TIME_UPDATE = 3,\n\tNETEVENT_IPV4_MPATH_HASH_UPDATE = 4,\n\tNETEVENT_IPV6_MPATH_HASH_UPDATE = 5,\n\tNETEVENT_IPV4_FWD_UPDATE_PRIORITY_UPDATE = 6,\n};\n\nstruct neigh_dump_filter {\n\tint master_idx;\n\tint dev_idx;\n};\n\nstruct neigh_sysctl_table {\n\tstruct ctl_table_header *sysctl_header;\n\tstruct ctl_table neigh_vars[21];\n};\n\nstruct netlink_dump_control {\n\tint (*start)(struct netlink_callback *);\n\tint (*dump)(struct sk_buff *, struct netlink_callback *);\n\tint (*done)(struct netlink_callback *);\n\tvoid *data;\n\tstruct module *module;\n\tu32 min_dump_alloc;\n};\n\nstruct rtnl_link_stats {\n\t__u32 rx_packets;\n\t__u32 tx_packets;\n\t__u32 rx_bytes;\n\t__u32 tx_bytes;\n\t__u32 rx_errors;\n\t__u32 tx_errors;\n\t__u32 rx_dropped;\n\t__u32 tx_dropped;\n\t__u32 multicast;\n\t__u32 collisions;\n\t__u32 rx_length_errors;\n\t__u32 rx_over_errors;\n\t__u32 rx_crc_errors;\n\t__u32 rx_frame_errors;\n\t__u32 rx_fifo_errors;\n\t__u32 rx_missed_errors;\n\t__u32 tx_aborted_errors;\n\t__u32 tx_carrier_errors;\n\t__u32 tx_fifo_errors;\n\t__u32 tx_heartbeat_errors;\n\t__u32 tx_window_errors;\n\t__u32 rx_compressed;\n\t__u32 tx_compressed;\n\t__u32 rx_nohandler;\n};\n\nstruct rtnl_link_ifmap {\n\t__u64 mem_start;\n\t__u64 mem_end;\n\t__u64 base_addr;\n\t__u16 irq;\n\t__u8 dma;\n\t__u8 port;\n};\n\nenum {\n\tIFLA_UNSPEC = 0,\n\tIFLA_ADDRESS = 1,\n\tIFLA_BROADCAST = 2,\n\tIFLA_IFNAME = 3,\n\tIFLA_MTU = 4,\n\tIFLA_LINK = 5,\n\tIFLA_QDISC = 6,\n\tIFLA_STATS = 7,\n\tIFLA_COST = 8,\n\tIFLA_PRIORITY = 9,\n\tIFLA_MASTER = 10,\n\tIFLA_WIRELESS = 11,\n\tIFLA_PROTINFO = 12,\n\tIFLA_TXQLEN = 13,\n\tIFLA_MAP = 14,\n\tIFLA_WEIGHT = 15,\n\tIFLA_OPERSTATE = 16,\n\tIFLA_LINKMODE = 17,\n\tIFLA_LINKINFO = 18,\n\tIFLA_NET_NS_PID = 19,\n\tIFLA_IFALIAS = 20,\n\tIFLA_NUM_VF = 21,\n\tIFLA_VFINFO_LIST = 22,\n\tIFLA_STATS64 = 23,\n\tIFLA_VF_PORTS = 24,\n\tIFLA_PORT_SELF = 25,\n\tIFLA_AF_SPEC = 26,\n\tIFLA_GROUP = 27,\n\tIFLA_NET_NS_FD = 28,\n\tIFLA_EXT_MASK = 29,\n\tIFLA_PROMISCUITY = 30,\n\tIFLA_NUM_TX_QUEUES = 31,\n\tIFLA_NUM_RX_QUEUES = 32,\n\tIFLA_CARRIER = 33,\n\tIFLA_PHYS_PORT_ID = 34,\n\tIFLA_CARRIER_CHANGES = 35,\n\tIFLA_PHYS_SWITCH_ID = 36,\n\tIFLA_LINK_NETNSID = 37,\n\tIFLA_PHYS_PORT_NAME = 38,\n\tIFLA_PROTO_DOWN = 39,\n\tIFLA_GSO_MAX_SEGS = 40,\n\tIFLA_GSO_MAX_SIZE = 41,\n\tIFLA_PAD = 42,\n\tIFLA_XDP = 43,\n\tIFLA_EVENT = 44,\n\tIFLA_NEW_NETNSID = 45,\n\tIFLA_IF_NETNSID = 46,\n\tIFLA_TARGET_NETNSID = 46,\n\tIFLA_CARRIER_UP_COUNT = 47,\n\tIFLA_CARRIER_DOWN_COUNT = 48,\n\tIFLA_NEW_IFINDEX = 49,\n\tIFLA_MIN_MTU = 50,\n\tIFLA_MAX_MTU = 51,\n\tIFLA_PROP_LIST = 52,\n\tIFLA_ALT_IFNAME = 53,\n\tIFLA_PERM_ADDRESS = 54,\n\tIFLA_PROTO_DOWN_REASON = 55,\n\t__IFLA_MAX = 56,\n};\n\nenum {\n\tIFLA_PROTO_DOWN_REASON_UNSPEC = 0,\n\tIFLA_PROTO_DOWN_REASON_MASK = 1,\n\tIFLA_PROTO_DOWN_REASON_VALUE = 2,\n\t__IFLA_PROTO_DOWN_REASON_CNT = 3,\n\tIFLA_PROTO_DOWN_REASON_MAX = 2,\n};\n\nenum {\n\tIFLA_BRPORT_UNSPEC = 0,\n\tIFLA_BRPORT_STATE = 1,\n\tIFLA_BRPORT_PRIORITY = 2,\n\tIFLA_BRPORT_COST = 3,\n\tIFLA_BRPORT_MODE = 4,\n\tIFLA_BRPORT_GUARD = 5,\n\tIFLA_BRPORT_PROTECT = 6,\n\tIFLA_BRPORT_FAST_LEAVE = 7,\n\tIFLA_BRPORT_LEARNING = 8,\n\tIFLA_BRPORT_UNICAST_FLOOD = 9,\n\tIFLA_BRPORT_PROXYARP = 10,\n\tIFLA_BRPORT_LEARNING_SYNC = 11,\n\tIFLA_BRPORT_PROXYARP_WIFI = 12,\n\tIFLA_BRPORT_ROOT_ID = 13,\n\tIFLA_BRPORT_BRIDGE_ID = 14,\n\tIFLA_BRPORT_DESIGNATED_PORT = 15,\n\tIFLA_BRPORT_DESIGNATED_COST = 16,\n\tIFLA_BRPORT_ID = 17,\n\tIFLA_BRPORT_NO = 18,\n\tIFLA_BRPORT_TOPOLOGY_CHANGE_ACK = 19,\n\tIFLA_BRPORT_CONFIG_PENDING = 20,\n\tIFLA_BRPORT_MESSAGE_AGE_TIMER = 21,\n\tIFLA_BRPORT_FORWARD_DELAY_TIMER = 22,\n\tIFLA_BRPORT_HOLD_TIMER = 23,\n\tIFLA_BRPORT_FLUSH = 24,\n\tIFLA_BRPORT_MULTICAST_ROUTER = 25,\n\tIFLA_BRPORT_PAD = 26,\n\tIFLA_BRPORT_MCAST_FLOOD = 27,\n\tIFLA_BRPORT_MCAST_TO_UCAST = 28,\n\tIFLA_BRPORT_VLAN_TUNNEL = 29,\n\tIFLA_BRPORT_BCAST_FLOOD = 30,\n\tIFLA_BRPORT_GROUP_FWD_MASK = 31,\n\tIFLA_BRPORT_NEIGH_SUPPRESS = 32,\n\tIFLA_BRPORT_ISOLATED = 33,\n\tIFLA_BRPORT_BACKUP_PORT = 34,\n\tIFLA_BRPORT_MRP_RING_OPEN = 35,\n\tIFLA_BRPORT_MRP_IN_OPEN = 36,\n\t__IFLA_BRPORT_MAX = 37,\n};\n\nenum {\n\tIFLA_INFO_UNSPEC = 0,\n\tIFLA_INFO_KIND = 1,\n\tIFLA_INFO_DATA = 2,\n\tIFLA_INFO_XSTATS = 3,\n\tIFLA_INFO_SLAVE_KIND = 4,\n\tIFLA_INFO_SLAVE_DATA = 5,\n\t__IFLA_INFO_MAX = 6,\n};\n\nenum {\n\tIFLA_VF_INFO_UNSPEC = 0,\n\tIFLA_VF_INFO = 1,\n\t__IFLA_VF_INFO_MAX = 2,\n};\n\nenum {\n\tIFLA_VF_UNSPEC = 0,\n\tIFLA_VF_MAC = 1,\n\tIFLA_VF_VLAN = 2,\n\tIFLA_VF_TX_RATE = 3,\n\tIFLA_VF_SPOOFCHK = 4,\n\tIFLA_VF_LINK_STATE = 5,\n\tIFLA_VF_RATE = 6,\n\tIFLA_VF_RSS_QUERY_EN = 7,\n\tIFLA_VF_STATS = 8,\n\tIFLA_VF_TRUST = 9,\n\tIFLA_VF_IB_NODE_GUID = 10,\n\tIFLA_VF_IB_PORT_GUID = 11,\n\tIFLA_VF_VLAN_LIST = 12,\n\tIFLA_VF_BROADCAST = 13,\n\t__IFLA_VF_MAX = 14,\n};\n\nstruct ifla_vf_mac {\n\t__u32 vf;\n\t__u8 mac[32];\n};\n\nstruct ifla_vf_broadcast {\n\t__u8 broadcast[32];\n};\n\nstruct ifla_vf_vlan {\n\t__u32 vf;\n\t__u32 vlan;\n\t__u32 qos;\n};\n\nenum {\n\tIFLA_VF_VLAN_INFO_UNSPEC = 0,\n\tIFLA_VF_VLAN_INFO = 1,\n\t__IFLA_VF_VLAN_INFO_MAX = 2,\n};\n\nstruct ifla_vf_vlan_info {\n\t__u32 vf;\n\t__u32 vlan;\n\t__u32 qos;\n\t__be16 vlan_proto;\n};\n\nstruct ifla_vf_tx_rate {\n\t__u32 vf;\n\t__u32 rate;\n};\n\nstruct ifla_vf_rate {\n\t__u32 vf;\n\t__u32 min_tx_rate;\n\t__u32 max_tx_rate;\n};\n\nstruct ifla_vf_spoofchk {\n\t__u32 vf;\n\t__u32 setting;\n};\n\nstruct ifla_vf_link_state {\n\t__u32 vf;\n\t__u32 link_state;\n};\n\nstruct ifla_vf_rss_query_en {\n\t__u32 vf;\n\t__u32 setting;\n};\n\nenum {\n\tIFLA_VF_STATS_RX_PACKETS = 0,\n\tIFLA_VF_STATS_TX_PACKETS = 1,\n\tIFLA_VF_STATS_RX_BYTES = 2,\n\tIFLA_VF_STATS_TX_BYTES = 3,\n\tIFLA_VF_STATS_BROADCAST = 4,\n\tIFLA_VF_STATS_MULTICAST = 5,\n\tIFLA_VF_STATS_PAD = 6,\n\tIFLA_VF_STATS_RX_DROPPED = 7,\n\tIFLA_VF_STATS_TX_DROPPED = 8,\n\t__IFLA_VF_STATS_MAX = 9,\n};\n\nstruct ifla_vf_trust {\n\t__u32 vf;\n\t__u32 setting;\n};\n\nenum {\n\tIFLA_VF_PORT_UNSPEC = 0,\n\tIFLA_VF_PORT = 1,\n\t__IFLA_VF_PORT_MAX = 2,\n};\n\nenum {\n\tIFLA_PORT_UNSPEC = 0,\n\tIFLA_PORT_VF = 1,\n\tIFLA_PORT_PROFILE = 2,\n\tIFLA_PORT_VSI_TYPE = 3,\n\tIFLA_PORT_INSTANCE_UUID = 4,\n\tIFLA_PORT_HOST_UUID = 5,\n\tIFLA_PORT_REQUEST = 6,\n\tIFLA_PORT_RESPONSE = 7,\n\t__IFLA_PORT_MAX = 8,\n};\n\nstruct if_stats_msg {\n\t__u8 family;\n\t__u8 pad1;\n\t__u16 pad2;\n\t__u32 ifindex;\n\t__u32 filter_mask;\n};\n\nenum {\n\tIFLA_STATS_UNSPEC = 0,\n\tIFLA_STATS_LINK_64 = 1,\n\tIFLA_STATS_LINK_XSTATS = 2,\n\tIFLA_STATS_LINK_XSTATS_SLAVE = 3,\n\tIFLA_STATS_LINK_OFFLOAD_XSTATS = 4,\n\tIFLA_STATS_AF_SPEC = 5,\n\t__IFLA_STATS_MAX = 6,\n};\n\nenum {\n\tIFLA_OFFLOAD_XSTATS_UNSPEC = 0,\n\tIFLA_OFFLOAD_XSTATS_CPU_HIT = 1,\n\t__IFLA_OFFLOAD_XSTATS_MAX = 2,\n};\n\nenum {\n\tXDP_ATTACHED_NONE = 0,\n\tXDP_ATTACHED_DRV = 1,\n\tXDP_ATTACHED_SKB = 2,\n\tXDP_ATTACHED_HW = 3,\n\tXDP_ATTACHED_MULTI = 4,\n};\n\nenum {\n\tIFLA_XDP_UNSPEC = 0,\n\tIFLA_XDP_FD = 1,\n\tIFLA_XDP_ATTACHED = 2,\n\tIFLA_XDP_FLAGS = 3,\n\tIFLA_XDP_PROG_ID = 4,\n\tIFLA_XDP_DRV_PROG_ID = 5,\n\tIFLA_XDP_SKB_PROG_ID = 6,\n\tIFLA_XDP_HW_PROG_ID = 7,\n\tIFLA_XDP_EXPECTED_FD = 8,\n\t__IFLA_XDP_MAX = 9,\n};\n\nenum {\n\tIFLA_EVENT_NONE = 0,\n\tIFLA_EVENT_REBOOT = 1,\n\tIFLA_EVENT_FEATURES = 2,\n\tIFLA_EVENT_BONDING_FAILOVER = 3,\n\tIFLA_EVENT_NOTIFY_PEERS = 4,\n\tIFLA_EVENT_IGMP_RESEND = 5,\n\tIFLA_EVENT_BONDING_OPTIONS = 6,\n};\n\nenum {\n\tIFLA_BRIDGE_FLAGS = 0,\n\tIFLA_BRIDGE_MODE = 1,\n\tIFLA_BRIDGE_VLAN_INFO = 2,\n\tIFLA_BRIDGE_VLAN_TUNNEL_INFO = 3,\n\tIFLA_BRIDGE_MRP = 4,\n\tIFLA_BRIDGE_CFM = 5,\n\t__IFLA_BRIDGE_MAX = 6,\n};\n\nenum {\n\tBR_MCAST_DIR_RX = 0,\n\tBR_MCAST_DIR_TX = 1,\n\tBR_MCAST_DIR_SIZE = 2,\n};\n\nenum rtattr_type_t {\n\tRTA_UNSPEC = 0,\n\tRTA_DST = 1,\n\tRTA_SRC = 2,\n\tRTA_IIF = 3,\n\tRTA_OIF = 4,\n\tRTA_GATEWAY = 5,\n\tRTA_PRIORITY = 6,\n\tRTA_PREFSRC = 7,\n\tRTA_METRICS = 8,\n\tRTA_MULTIPATH = 9,\n\tRTA_PROTOINFO = 10,\n\tRTA_FLOW = 11,\n\tRTA_CACHEINFO = 12,\n\tRTA_SESSION = 13,\n\tRTA_MP_ALGO = 14,\n\tRTA_TABLE = 15,\n\tRTA_MARK = 16,\n\tRTA_MFC_STATS = 17,\n\tRTA_VIA = 18,\n\tRTA_NEWDST = 19,\n\tRTA_PREF = 20,\n\tRTA_ENCAP_TYPE = 21,\n\tRTA_ENCAP = 22,\n\tRTA_EXPIRES = 23,\n\tRTA_PAD = 24,\n\tRTA_UID = 25,\n\tRTA_TTL_PROPAGATE = 26,\n\tRTA_IP_PROTO = 27,\n\tRTA_SPORT = 28,\n\tRTA_DPORT = 29,\n\tRTA_NH_ID = 30,\n\t__RTA_MAX = 31,\n};\n\nstruct rta_cacheinfo {\n\t__u32 rta_clntref;\n\t__u32 rta_lastuse;\n\t__s32 rta_expires;\n\t__u32 rta_error;\n\t__u32 rta_used;\n\t__u32 rta_id;\n\t__u32 rta_ts;\n\t__u32 rta_tsage;\n};\n\nstruct ifinfomsg {\n\tunsigned char ifi_family;\n\tunsigned char __ifi_pad;\n\tshort unsigned int ifi_type;\n\tint ifi_index;\n\tunsigned int ifi_flags;\n\tunsigned int ifi_change;\n};\n\nstruct rtnl_af_ops {\n\tstruct list_head list;\n\tint family;\n\tint (*fill_link_af)(struct sk_buff *, const struct net_device *, u32);\n\tsize_t (*get_link_af_size)(const struct net_device *, u32);\n\tint (*validate_link_af)(const struct net_device *, const struct nlattr *);\n\tint (*set_link_af)(struct net_device *, const struct nlattr *);\n\tint (*fill_stats_af)(struct sk_buff *, const struct net_device *);\n\tsize_t (*get_stats_af_size)(const struct net_device *);\n};\n\nstruct rtnl_link {\n\trtnl_doit_func doit;\n\trtnl_dumpit_func dumpit;\n\tstruct module *owner;\n\tunsigned int flags;\n\tstruct callback_head rcu;\n};\n\nenum {\n\tIF_LINK_MODE_DEFAULT = 0,\n\tIF_LINK_MODE_DORMANT = 1,\n\tIF_LINK_MODE_TESTING = 2,\n};\n\nenum lw_bits {\n\tLW_URGENT = 0,\n};\n\nstruct seg6_pernet_data {\n\tstruct mutex lock;\n\tstruct in6_addr *tun_src;\n\tstruct rhashtable hmac_infos;\n};\n\nenum {\n\tBPF_F_RECOMPUTE_CSUM = 1,\n\tBPF_F_INVALIDATE_HASH = 2,\n};\n\nenum {\n\tBPF_F_HDR_FIELD_MASK = 15,\n};\n\nenum {\n\tBPF_F_PSEUDO_HDR = 16,\n\tBPF_F_MARK_MANGLED_0 = 32,\n\tBPF_F_MARK_ENFORCE = 64,\n};\n\nenum {\n\tBPF_F_INGRESS = 1,\n};\n\nenum {\n\tBPF_F_TUNINFO_IPV6 = 1,\n};\n\nenum {\n\tBPF_F_ZERO_CSUM_TX = 2,\n\tBPF_F_DONT_FRAGMENT = 4,\n\tBPF_F_SEQ_NUMBER = 8,\n};\n\nenum {\n\tBPF_CSUM_LEVEL_QUERY = 0,\n\tBPF_CSUM_LEVEL_INC = 1,\n\tBPF_CSUM_LEVEL_DEC = 2,\n\tBPF_CSUM_LEVEL_RESET = 3,\n};\n\nenum {\n\tBPF_F_ADJ_ROOM_FIXED_GSO = 1,\n\tBPF_F_ADJ_ROOM_ENCAP_L3_IPV4 = 2,\n\tBPF_F_ADJ_ROOM_ENCAP_L3_IPV6 = 4,\n\tBPF_F_ADJ_ROOM_ENCAP_L4_GRE = 8,\n\tBPF_F_ADJ_ROOM_ENCAP_L4_UDP = 16,\n\tBPF_F_ADJ_ROOM_NO_CSUM_RESET = 32,\n};\n\nenum {\n\tBPF_ADJ_ROOM_ENCAP_L2_MASK = 255,\n\tBPF_ADJ_ROOM_ENCAP_L2_SHIFT = 56,\n};\n\nenum {\n\tBPF_SK_LOOKUP_F_REPLACE = 1,\n\tBPF_SK_LOOKUP_F_NO_REUSEPORT = 2,\n};\n\nenum bpf_adj_room_mode {\n\tBPF_ADJ_ROOM_NET = 0,\n\tBPF_ADJ_ROOM_MAC = 1,\n};\n\nenum bpf_hdr_start_off {\n\tBPF_HDR_START_MAC = 0,\n\tBPF_HDR_START_NET = 1,\n};\n\nenum bpf_lwt_encap_mode {\n\tBPF_LWT_ENCAP_SEG6 = 0,\n\tBPF_LWT_ENCAP_SEG6_INLINE = 1,\n\tBPF_LWT_ENCAP_IP = 2,\n};\n\nstruct bpf_tunnel_key {\n\t__u32 tunnel_id;\n\tunion {\n\t\t__u32 remote_ipv4;\n\t\t__u32 remote_ipv6[4];\n\t};\n\t__u8 tunnel_tos;\n\t__u8 tunnel_ttl;\n\t__u16 tunnel_ext;\n\t__u32 tunnel_label;\n};\n\nstruct bpf_xfrm_state {\n\t__u32 reqid;\n\t__u32 spi;\n\t__u16 family;\n\t__u16 ext;\n\tunion {\n\t\t__u32 remote_ipv4;\n\t\t__u32 remote_ipv6[4];\n\t};\n};\n\nstruct bpf_tcp_sock {\n\t__u32 snd_cwnd;\n\t__u32 srtt_us;\n\t__u32 rtt_min;\n\t__u32 snd_ssthresh;\n\t__u32 rcv_nxt;\n\t__u32 snd_nxt;\n\t__u32 snd_una;\n\t__u32 mss_cache;\n\t__u32 ecn_flags;\n\t__u32 rate_delivered;\n\t__u32 rate_interval_us;\n\t__u32 packets_out;\n\t__u32 retrans_out;\n\t__u32 total_retrans;\n\t__u32 segs_in;\n\t__u32 data_segs_in;\n\t__u32 segs_out;\n\t__u32 data_segs_out;\n\t__u32 lost_out;\n\t__u32 sacked_out;\n\t__u64 bytes_received;\n\t__u64 bytes_acked;\n\t__u32 dsack_dups;\n\t__u32 delivered;\n\t__u32 delivered_ce;\n\t__u32 icsk_retransmits;\n};\n\nstruct bpf_sock_tuple {\n\tunion {\n\t\tstruct {\n\t\t\t__be32 saddr;\n\t\t\t__be32 daddr;\n\t\t\t__be16 sport;\n\t\t\t__be16 dport;\n\t\t} ipv4;\n\t\tstruct {\n\t\t\t__be32 saddr[4];\n\t\t\t__be32 daddr[4];\n\t\t\t__be16 sport;\n\t\t\t__be16 dport;\n\t\t} ipv6;\n\t};\n};\n\nstruct bpf_xdp_sock {\n\t__u32 queue_id;\n};\n\nenum {\n\tBPF_SOCK_OPS_RTO_CB_FLAG = 1,\n\tBPF_SOCK_OPS_RETRANS_CB_FLAG = 2,\n\tBPF_SOCK_OPS_STATE_CB_FLAG = 4,\n\tBPF_SOCK_OPS_RTT_CB_FLAG = 8,\n\tBPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG = 16,\n\tBPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG = 32,\n\tBPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG = 64,\n\tBPF_SOCK_OPS_ALL_CB_FLAGS = 127,\n};\n\nenum {\n\tBPF_SOCK_OPS_VOID = 0,\n\tBPF_SOCK_OPS_TIMEOUT_INIT = 1,\n\tBPF_SOCK_OPS_RWND_INIT = 2,\n\tBPF_SOCK_OPS_TCP_CONNECT_CB = 3,\n\tBPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB = 4,\n\tBPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB = 5,\n\tBPF_SOCK_OPS_NEEDS_ECN = 6,\n\tBPF_SOCK_OPS_BASE_RTT = 7,\n\tBPF_SOCK_OPS_RTO_CB = 8,\n\tBPF_SOCK_OPS_RETRANS_CB = 9,\n\tBPF_SOCK_OPS_STATE_CB = 10,\n\tBPF_SOCK_OPS_TCP_LISTEN_CB = 11,\n\tBPF_SOCK_OPS_RTT_CB = 12,\n\tBPF_SOCK_OPS_PARSE_HDR_OPT_CB = 13,\n\tBPF_SOCK_OPS_HDR_OPT_LEN_CB = 14,\n\tBPF_SOCK_OPS_WRITE_HDR_OPT_CB = 15,\n};\n\nenum {\n\tTCP_BPF_IW = 1001,\n\tTCP_BPF_SNDCWND_CLAMP = 1002,\n\tTCP_BPF_DELACK_MAX = 1003,\n\tTCP_BPF_RTO_MIN = 1004,\n\tTCP_BPF_SYN = 1005,\n\tTCP_BPF_SYN_IP = 1006,\n\tTCP_BPF_SYN_MAC = 1007,\n};\n\nenum {\n\tBPF_LOAD_HDR_OPT_TCP_SYN = 1,\n};\n\nenum {\n\tBPF_FIB_LOOKUP_DIRECT = 1,\n\tBPF_FIB_LOOKUP_OUTPUT = 2,\n};\n\nenum {\n\tBPF_FIB_LKUP_RET_SUCCESS = 0,\n\tBPF_FIB_LKUP_RET_BLACKHOLE = 1,\n\tBPF_FIB_LKUP_RET_UNREACHABLE = 2,\n\tBPF_FIB_LKUP_RET_PROHIBIT = 3,\n\tBPF_FIB_LKUP_RET_NOT_FWDED = 4,\n\tBPF_FIB_LKUP_RET_FWD_DISABLED = 5,\n\tBPF_FIB_LKUP_RET_UNSUPP_LWT = 6,\n\tBPF_FIB_LKUP_RET_NO_NEIGH = 7,\n\tBPF_FIB_LKUP_RET_FRAG_NEEDED = 8,\n};\n\nstruct bpf_fib_lookup {\n\t__u8 family;\n\t__u8 l4_protocol;\n\t__be16 sport;\n\t__be16 dport;\n\t__u16 tot_len;\n\t__u32 ifindex;\n\tunion {\n\t\t__u8 tos;\n\t\t__be32 flowinfo;\n\t\t__u32 rt_metric;\n\t};\n\tunion {\n\t\t__be32 ipv4_src;\n\t\t__u32 ipv6_src[4];\n\t};\n\tunion {\n\t\t__be32 ipv4_dst;\n\t\t__u32 ipv6_dst[4];\n\t};\n\t__be16 h_vlan_proto;\n\t__be16 h_vlan_TCI;\n\t__u8 smac[6];\n\t__u8 dmac[6];\n};\n\nstruct bpf_redir_neigh {\n\t__u32 nh_family;\n\tunion {\n\t\t__be32 ipv4_nh;\n\t\t__u32 ipv6_nh[4];\n\t};\n};\n\nenum rt_scope_t {\n\tRT_SCOPE_UNIVERSE = 0,\n\tRT_SCOPE_SITE = 200,\n\tRT_SCOPE_LINK = 253,\n\tRT_SCOPE_HOST = 254,\n\tRT_SCOPE_NOWHERE = 255,\n};\n\nenum rt_class_t {\n\tRT_TABLE_UNSPEC = 0,\n\tRT_TABLE_COMPAT = 252,\n\tRT_TABLE_DEFAULT = 253,\n\tRT_TABLE_MAIN = 254,\n\tRT_TABLE_LOCAL = 255,\n\tRT_TABLE_MAX = 4294967295,\n};\n\nstruct nl_info {\n\tstruct nlmsghdr *nlh;\n\tstruct net *nl_net;\n\tu32 portid;\n\tu8 skip_notify: 1;\n\tu8 skip_notify_kernel: 1;\n};\n\nstruct inet_timewait_sock {\n\tstruct sock_common __tw_common;\n\t__u32 tw_mark;\n\tvolatile unsigned char tw_substate;\n\tunsigned char tw_rcv_wscale;\n\t__be16 tw_sport;\n\tunsigned int tw_kill: 1;\n\tunsigned int tw_transparent: 1;\n\tunsigned int tw_flowlabel: 20;\n\tunsigned int tw_pad: 2;\n\tunsigned int tw_tos: 8;\n\tu32 tw_txhash;\n\tu32 tw_priority;\n\tstruct timer_list tw_timer;\n\tstruct inet_bind_bucket *tw_tb;\n};\n\nstruct tcp_timewait_sock {\n\tstruct inet_timewait_sock tw_sk;\n\tu32 tw_rcv_wnd;\n\tu32 tw_ts_offset;\n\tu32 tw_ts_recent;\n\tu32 tw_last_oow_ack_time;\n\tint tw_ts_recent_stamp;\n\tu32 tw_tx_delay;\n\tstruct tcp_md5sig_key *tw_md5_key;\n};\n\nstruct udp_sock {\n\tstruct inet_sock inet;\n\tint pending;\n\tunsigned int corkflag;\n\t__u8 encap_type;\n\tunsigned char no_check6_tx: 1;\n\tunsigned char no_check6_rx: 1;\n\tunsigned char encap_enabled: 1;\n\tunsigned char gro_enabled: 1;\n\t__u16 len;\n\t__u16 gso_size;\n\t__u16 pcslen;\n\t__u16 pcrlen;\n\t__u8 pcflag;\n\t__u8 unused[3];\n\tint (*encap_rcv)(struct sock *, struct sk_buff *);\n\tint (*encap_err_lookup)(struct sock *, struct sk_buff *);\n\tvoid (*encap_destroy)(struct sock *);\n\tstruct sk_buff * (*gro_receive)(struct sock *, struct list_head *, struct sk_buff *);\n\tint (*gro_complete)(struct sock *, struct sk_buff *, int);\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct sk_buff_head reader_queue;\n\tint forward_deficit;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct udp6_sock {\n\tstruct udp_sock udp;\n\tstruct ipv6_pinfo inet6;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct tcp6_sock {\n\tstruct tcp_sock tcp;\n\tstruct ipv6_pinfo inet6;\n};\n\nstruct fib6_result;\n\nstruct fib6_config;\n\nstruct ipv6_stub {\n\tint (*ipv6_sock_mc_join)(struct sock *, int, const struct in6_addr *);\n\tint (*ipv6_sock_mc_drop)(struct sock *, int, const struct in6_addr *);\n\tstruct dst_entry * (*ipv6_dst_lookup_flow)(struct net *, const struct sock *, struct flowi6 *, const struct in6_addr *);\n\tint (*ipv6_route_input)(struct sk_buff *);\n\tstruct fib6_table * (*fib6_get_table)(struct net *, u32);\n\tint (*fib6_lookup)(struct net *, int, struct flowi6 *, struct fib6_result *, int);\n\tint (*fib6_table_lookup)(struct net *, struct fib6_table *, int, struct flowi6 *, struct fib6_result *, int);\n\tvoid (*fib6_select_path)(const struct net *, struct fib6_result *, struct flowi6 *, int, bool, const struct sk_buff *, int);\n\tu32 (*ip6_mtu_from_fib6)(const struct fib6_result *, const struct in6_addr *, const struct in6_addr *);\n\tint (*fib6_nh_init)(struct net *, struct fib6_nh *, struct fib6_config *, gfp_t, struct netlink_ext_ack *);\n\tvoid (*fib6_nh_release)(struct fib6_nh *);\n\tvoid (*fib6_update_sernum)(struct net *, struct fib6_info *);\n\tint (*ip6_del_rt)(struct net *, struct fib6_info *, bool);\n\tvoid (*fib6_rt_update)(struct net *, struct fib6_info *, struct nl_info *);\n\tvoid (*udpv6_encap_enable)();\n\tvoid (*ndisc_send_na)(struct net_device *, const struct in6_addr *, const struct in6_addr *, bool, bool, bool, bool);\n\tvoid (*xfrm6_local_rxpmtu)(struct sk_buff *, u32);\n\tint (*xfrm6_udp_encap_rcv)(struct sock *, struct sk_buff *);\n\tint (*xfrm6_rcv_encap)(struct sk_buff *, int, __be32, int);\n\tstruct neigh_table *nd_tbl;\n\tint (*ipv6_fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));\n};\n\nstruct fib6_result {\n\tstruct fib6_nh *nh;\n\tstruct fib6_info *f6i;\n\tu32 fib6_flags;\n\tu8 fib6_type;\n\tstruct rt6_info *rt6;\n};\n\nstruct fib6_config {\n\tu32 fc_table;\n\tu32 fc_metric;\n\tint fc_dst_len;\n\tint fc_src_len;\n\tint fc_ifindex;\n\tu32 fc_flags;\n\tu32 fc_protocol;\n\tu16 fc_type;\n\tu16 fc_delete_all_nh: 1;\n\tu16 fc_ignore_dev_down: 1;\n\tu16 __unused: 14;\n\tu32 fc_nh_id;\n\tstruct in6_addr fc_dst;\n\tstruct in6_addr fc_src;\n\tstruct in6_addr fc_prefsrc;\n\tstruct in6_addr fc_gateway;\n\tlong unsigned int fc_expires;\n\tstruct nlattr *fc_mx;\n\tint fc_mx_len;\n\tint fc_mp_len;\n\tstruct nlattr *fc_mp;\n\tstruct nl_info fc_nlinfo;\n\tstruct nlattr *fc_encap;\n\tu16 fc_encap_type;\n\tbool fc_is_fdb;\n};\n\nstruct ipv6_bpf_stub {\n\tint (*inet6_bind)(struct sock *, struct sockaddr *, int, u32);\n\tstruct sock * (*udp6_lib_lookup)(struct net *, const struct in6_addr *, __be16, const struct in6_addr *, __be16, int, int, struct udp_table *, struct sk_buff *);\n};\n\nstruct fib_result {\n\t__be32 prefix;\n\tunsigned char prefixlen;\n\tunsigned char nh_sel;\n\tunsigned char type;\n\tunsigned char scope;\n\tu32 tclassid;\n\tstruct fib_nh_common *nhc;\n\tstruct fib_info *fi;\n\tstruct fib_table *table;\n\tstruct hlist_head *fa_head;\n};\n\nenum {\n\tINET_ECN_NOT_ECT = 0,\n\tINET_ECN_ECT_1 = 1,\n\tINET_ECN_ECT_0 = 2,\n\tINET_ECN_CE = 3,\n\tINET_ECN_MASK = 3,\n};\n\nstruct tcp_skb_cb {\n\t__u32 seq;\n\t__u32 end_seq;\n\tunion {\n\t\t__u32 tcp_tw_isn;\n\t\tstruct {\n\t\t\tu16 tcp_gso_segs;\n\t\t\tu16 tcp_gso_size;\n\t\t};\n\t};\n\t__u8 tcp_flags;\n\t__u8 sacked;\n\t__u8 ip_dsfield;\n\t__u8 txstamp_ack: 1;\n\t__u8 eor: 1;\n\t__u8 has_rxtstamp: 1;\n\t__u8 unused: 5;\n\t__u32 ack_seq;\n\tunion {\n\t\tstruct {\n\t\t\t__u32 in_flight: 30;\n\t\t\t__u32 is_app_limited: 1;\n\t\t\t__u32 unused: 1;\n\t\t\t__u32 delivered;\n\t\t\tu64 first_tx_mstamp;\n\t\t\tu64 delivered_mstamp;\n\t\t} tx;\n\t\tunion {\n\t\t\tstruct inet_skb_parm h4;\n\t\t\tstruct inet6_skb_parm h6;\n\t\t} header;\n\t\tstruct {\n\t\t\t__u32 flags;\n\t\t\tstruct sock *sk_redir;\n\t\t\tvoid *data_end;\n\t\t} bpf;\n\t};\n};\n\nstruct strp_stats {\n\tlong long unsigned int msgs;\n\tlong long unsigned int bytes;\n\tunsigned int mem_fail;\n\tunsigned int need_more_hdr;\n\tunsigned int msg_too_big;\n\tunsigned int msg_timeouts;\n\tunsigned int bad_hdr_len;\n};\n\nstruct strparser;\n\nstruct strp_callbacks {\n\tint (*parse_msg)(struct strparser *, struct sk_buff *);\n\tvoid (*rcv_msg)(struct strparser *, struct sk_buff *);\n\tint (*read_sock_done)(struct strparser *, int);\n\tvoid (*abort_parser)(struct strparser *, int);\n\tvoid (*lock)(struct strparser *);\n\tvoid (*unlock)(struct strparser *);\n};\n\nstruct strparser {\n\tstruct sock *sk;\n\tu32 stopped: 1;\n\tu32 paused: 1;\n\tu32 aborted: 1;\n\tu32 interrupted: 1;\n\tu32 unrecov_intr: 1;\n\tstruct sk_buff **skb_nextp;\n\tstruct sk_buff *skb_head;\n\tunsigned int need_bytes;\n\tstruct delayed_work msg_timer_work;\n\tstruct work_struct work;\n\tstruct strp_stats stats;\n\tstruct strp_callbacks cb;\n};\n\nstruct strp_msg {\n\tint full_len;\n\tint offset;\n};\n\nstruct xdp_umem {\n\tvoid *addrs;\n\tu64 size;\n\tu32 headroom;\n\tu32 chunk_size;\n\tu32 chunks;\n\tu32 npgs;\n\tstruct user_struct *user;\n\trefcount_t users;\n\tu8 flags;\n\tbool zc;\n\tstruct page **pgs;\n\tint id;\n\tstruct list_head xsk_dma_list;\n\tstruct work_struct work;\n};\n\nstruct xdp_sock;\n\nstruct xsk_map {\n\tstruct bpf_map map;\n\tspinlock_t lock;\n\tstruct xdp_sock *xsk_map[0];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct xsk_queue;\n\nstruct xdp_sock {\n\tstruct sock sk;\n\tlong: 64;\n\tstruct xsk_queue *rx;\n\tstruct net_device *dev;\n\tstruct xdp_umem *umem;\n\tstruct list_head flush_node;\n\tstruct xsk_buff_pool *pool;\n\tu16 queue_id;\n\tbool zc;\n\tenum {\n\t\tXSK_READY = 0,\n\t\tXSK_BOUND = 1,\n\t\tXSK_UNBOUND = 2,\n\t} state;\n\tlong: 64;\n\tstruct xsk_queue *tx;\n\tstruct list_head tx_list;\n\tspinlock_t rx_lock;\n\tu64 rx_dropped;\n\tu64 rx_queue_full;\n\tstruct list_head map_list;\n\tspinlock_t map_list_lock;\n\tstruct mutex mutex;\n\tstruct xsk_queue *fq_tmp;\n\tstruct xsk_queue *cq_tmp;\n\tlong: 64;\n};\n\nstruct ipv6_sr_hdr {\n\t__u8 nexthdr;\n\t__u8 hdrlen;\n\t__u8 type;\n\t__u8 segments_left;\n\t__u8 first_segment;\n\t__u8 flags;\n\t__u16 tag;\n\tstruct in6_addr segments[0];\n};\n\nenum {\n\tSEG6_LOCAL_ACTION_UNSPEC = 0,\n\tSEG6_LOCAL_ACTION_END = 1,\n\tSEG6_LOCAL_ACTION_END_X = 2,\n\tSEG6_LOCAL_ACTION_END_T = 3,\n\tSEG6_LOCAL_ACTION_END_DX2 = 4,\n\tSEG6_LOCAL_ACTION_END_DX6 = 5,\n\tSEG6_LOCAL_ACTION_END_DX4 = 6,\n\tSEG6_LOCAL_ACTION_END_DT6 = 7,\n\tSEG6_LOCAL_ACTION_END_DT4 = 8,\n\tSEG6_LOCAL_ACTION_END_B6 = 9,\n\tSEG6_LOCAL_ACTION_END_B6_ENCAP = 10,\n\tSEG6_LOCAL_ACTION_END_BM = 11,\n\tSEG6_LOCAL_ACTION_END_S = 12,\n\tSEG6_LOCAL_ACTION_END_AS = 13,\n\tSEG6_LOCAL_ACTION_END_AM = 14,\n\tSEG6_LOCAL_ACTION_END_BPF = 15,\n\t__SEG6_LOCAL_ACTION_MAX = 16,\n};\n\nstruct seg6_bpf_srh_state {\n\tstruct ipv6_sr_hdr *srh;\n\tu16 hdrlen;\n\tbool valid;\n};\n\nstruct tls_crypto_info {\n\t__u16 version;\n\t__u16 cipher_type;\n};\n\nstruct tls12_crypto_info_aes_gcm_128 {\n\tstruct tls_crypto_info info;\n\tunsigned char iv[8];\n\tunsigned char key[16];\n\tunsigned char salt[4];\n\tunsigned char rec_seq[8];\n};\n\nstruct tls12_crypto_info_aes_gcm_256 {\n\tstruct tls_crypto_info info;\n\tunsigned char iv[8];\n\tunsigned char key[32];\n\tunsigned char salt[4];\n\tunsigned char rec_seq[8];\n};\n\nstruct tls12_crypto_info_chacha20_poly1305 {\n\tstruct tls_crypto_info info;\n\tunsigned char iv[12];\n\tunsigned char key[32];\n\tunsigned char salt[0];\n\tunsigned char rec_seq[8];\n};\n\nstruct tls_sw_context_rx {\n\tstruct crypto_aead *aead_recv;\n\tstruct crypto_wait async_wait;\n\tstruct strparser strp;\n\tstruct sk_buff_head rx_list;\n\tvoid (*saved_data_ready)(struct sock *);\n\tstruct sk_buff *recv_pkt;\n\tu8 control;\n\tu8 async_capable: 1;\n\tu8 decrypted: 1;\n\tatomic_t decrypt_pending;\n\tspinlock_t decrypt_compl_lock;\n\tbool async_notify;\n};\n\nstruct cipher_context {\n\tchar *iv;\n\tchar *rec_seq;\n};\n\nunion tls_crypto_context {\n\tstruct tls_crypto_info info;\n\tunion {\n\t\tstruct tls12_crypto_info_aes_gcm_128 aes_gcm_128;\n\t\tstruct tls12_crypto_info_aes_gcm_256 aes_gcm_256;\n\t\tstruct tls12_crypto_info_chacha20_poly1305 chacha20_poly1305;\n\t};\n};\n\nstruct tls_prot_info {\n\tu16 version;\n\tu16 cipher_type;\n\tu16 prepend_size;\n\tu16 tag_size;\n\tu16 overhead_size;\n\tu16 iv_size;\n\tu16 salt_size;\n\tu16 rec_seq_size;\n\tu16 aad_size;\n\tu16 tail_size;\n};\n\nstruct tls_context {\n\tstruct tls_prot_info prot_info;\n\tu8 tx_conf: 3;\n\tu8 rx_conf: 3;\n\tint (*push_pending_record)(struct sock *, int);\n\tvoid (*sk_write_space)(struct sock *);\n\tvoid *priv_ctx_tx;\n\tvoid *priv_ctx_rx;\n\tstruct net_device *netdev;\n\tstruct cipher_context tx;\n\tstruct cipher_context rx;\n\tstruct scatterlist *partially_sent_record;\n\tu16 partially_sent_offset;\n\tbool in_tcp_sendpages;\n\tbool pending_open_record_frags;\n\tstruct mutex tx_lock;\n\tlong unsigned int flags;\n\tstruct proto *sk_proto;\n\tvoid (*sk_destruct)(struct sock *);\n\tunion tls_crypto_context crypto_send;\n\tunion tls_crypto_context crypto_recv;\n\tstruct list_head list;\n\trefcount_t refcount;\n\tstruct callback_head rcu;\n};\n\ntypedef u64 (*btf_bpf_skb_get_pay_offset)(struct sk_buff *);\n\ntypedef u64 (*btf_bpf_skb_get_nlattr)(struct sk_buff *, u32, u32);\n\ntypedef u64 (*btf_bpf_skb_get_nlattr_nest)(struct sk_buff *, u32, u32);\n\ntypedef u64 (*btf_bpf_skb_load_helper_8)(const struct sk_buff *, const void *, int, int);\n\ntypedef u64 (*btf_bpf_skb_load_helper_8_no_cache)(const struct sk_buff *, int);\n\ntypedef u64 (*btf_bpf_skb_load_helper_16)(const struct sk_buff *, const void *, int, int);\n\ntypedef u64 (*btf_bpf_skb_load_helper_16_no_cache)(const struct sk_buff *, int);\n\ntypedef u64 (*btf_bpf_skb_load_helper_32)(const struct sk_buff *, const void *, int, int);\n\ntypedef u64 (*btf_bpf_skb_load_helper_32_no_cache)(const struct sk_buff *, int);\n\nstruct bpf_scratchpad {\n\tunion {\n\t\t__be32 diff[128];\n\t\tu8 buff[512];\n\t};\n};\n\ntypedef u64 (*btf_bpf_skb_store_bytes)(struct sk_buff *, u32, const void *, u32, u64);\n\ntypedef u64 (*btf_bpf_skb_load_bytes)(const struct sk_buff *, u32, void *, u32);\n\ntypedef u64 (*btf_bpf_flow_dissector_load_bytes)(const struct bpf_flow_dissector *, u32, void *, u32);\n\ntypedef u64 (*btf_bpf_skb_load_bytes_relative)(const struct sk_buff *, u32, void *, u32, u32);\n\ntypedef u64 (*btf_bpf_skb_pull_data)(struct sk_buff *, u32);\n\ntypedef u64 (*btf_bpf_sk_fullsock)(struct sock *);\n\ntypedef u64 (*btf_sk_skb_pull_data)(struct sk_buff *, u32);\n\ntypedef u64 (*btf_bpf_l3_csum_replace)(struct sk_buff *, u32, u64, u64, u64);\n\ntypedef u64 (*btf_bpf_l4_csum_replace)(struct sk_buff *, u32, u64, u64, u64);\n\ntypedef u64 (*btf_bpf_csum_diff)(__be32 *, u32, __be32 *, u32, __wsum);\n\ntypedef u64 (*btf_bpf_csum_update)(struct sk_buff *, __wsum);\n\ntypedef u64 (*btf_bpf_csum_level)(struct sk_buff *, u64);\n\nenum {\n\tBPF_F_NEIGH = 2,\n\tBPF_F_PEER = 4,\n\tBPF_F_NEXTHOP = 8,\n};\n\ntypedef u64 (*btf_bpf_clone_redirect)(struct sk_buff *, u32, u64);\n\ntypedef u64 (*btf_bpf_redirect)(u32, u64);\n\ntypedef u64 (*btf_bpf_redirect_peer)(u32, u64);\n\ntypedef u64 (*btf_bpf_redirect_neigh)(u32, struct bpf_redir_neigh *, int, u64);\n\ntypedef u64 (*btf_bpf_msg_apply_bytes)(struct sk_msg *, u32);\n\ntypedef u64 (*btf_bpf_msg_cork_bytes)(struct sk_msg *, u32);\n\ntypedef u64 (*btf_bpf_msg_pull_data)(struct sk_msg *, u32, u32, u64);\n\ntypedef u64 (*btf_bpf_msg_push_data)(struct sk_msg *, u32, u32, u64);\n\ntypedef u64 (*btf_bpf_msg_pop_data)(struct sk_msg *, u32, u32, u64);\n\ntypedef u64 (*btf_bpf_get_cgroup_classid_curr)();\n\ntypedef u64 (*btf_bpf_skb_cgroup_classid)(const struct sk_buff *);\n\ntypedef u64 (*btf_bpf_get_cgroup_classid)(const struct sk_buff *);\n\ntypedef u64 (*btf_bpf_get_route_realm)(const struct sk_buff *);\n\ntypedef u64 (*btf_bpf_get_hash_recalc)(struct sk_buff *);\n\ntypedef u64 (*btf_bpf_set_hash_invalid)(struct sk_buff *);\n\ntypedef u64 (*btf_bpf_set_hash)(struct sk_buff *, u32);\n\ntypedef u64 (*btf_bpf_skb_vlan_push)(struct sk_buff *, __be16, u16);\n\ntypedef u64 (*btf_bpf_skb_vlan_pop)(struct sk_buff *);\n\ntypedef u64 (*btf_bpf_skb_change_proto)(struct sk_buff *, __be16, u64);\n\ntypedef u64 (*btf_bpf_skb_change_type)(struct sk_buff *, u32);\n\ntypedef u64 (*btf_sk_skb_adjust_room)(struct sk_buff *, s32, u32, u64);\n\ntypedef u64 (*btf_bpf_skb_adjust_room)(struct sk_buff *, s32, u32, u64);\n\ntypedef u64 (*btf_bpf_skb_change_tail)(struct sk_buff *, u32, u64);\n\ntypedef u64 (*btf_sk_skb_change_tail)(struct sk_buff *, u32, u64);\n\ntypedef u64 (*btf_bpf_skb_change_head)(struct sk_buff *, u32, u64);\n\ntypedef u64 (*btf_sk_skb_change_head)(struct sk_buff *, u32, u64);\n\ntypedef u64 (*btf_bpf_xdp_adjust_head)(struct xdp_buff *, int);\n\ntypedef u64 (*btf_bpf_xdp_adjust_tail)(struct xdp_buff *, int);\n\ntypedef u64 (*btf_bpf_xdp_adjust_meta)(struct xdp_buff *, int);\n\ntypedef u64 (*btf_bpf_xdp_redirect)(u32, u64);\n\ntypedef u64 (*btf_bpf_xdp_redirect_map)(struct bpf_map *, u32, u64);\n\ntypedef u64 (*btf_bpf_skb_event_output)(struct sk_buff *, struct bpf_map *, u64, void *, u64);\n\ntypedef u64 (*btf_bpf_skb_get_tunnel_key)(struct sk_buff *, struct bpf_tunnel_key *, u32, u64);\n\ntypedef u64 (*btf_bpf_skb_get_tunnel_opt)(struct sk_buff *, u8 *, u32);\n\ntypedef u64 (*btf_bpf_skb_set_tunnel_key)(struct sk_buff *, const struct bpf_tunnel_key *, u32, u64);\n\ntypedef u64 (*btf_bpf_skb_set_tunnel_opt)(struct sk_buff *, const u8 *, u32);\n\ntypedef u64 (*btf_bpf_skb_under_cgroup)(struct sk_buff *, struct bpf_map *, u32);\n\ntypedef u64 (*btf_bpf_skb_cgroup_id)(const struct sk_buff *);\n\ntypedef u64 (*btf_bpf_skb_ancestor_cgroup_id)(const struct sk_buff *, int);\n\ntypedef u64 (*btf_bpf_sk_cgroup_id)(struct sock *);\n\ntypedef u64 (*btf_bpf_sk_ancestor_cgroup_id)(struct sock *, int);\n\ntypedef u64 (*btf_bpf_xdp_event_output)(struct xdp_buff *, struct bpf_map *, u64, void *, u64);\n\ntypedef u64 (*btf_bpf_get_socket_cookie)(struct sk_buff *);\n\ntypedef u64 (*btf_bpf_get_socket_cookie_sock_addr)(struct bpf_sock_addr_kern *);\n\ntypedef u64 (*btf_bpf_get_socket_cookie_sock)(struct sock *);\n\ntypedef u64 (*btf_bpf_get_socket_cookie_sock_ops)(struct bpf_sock_ops_kern *);\n\ntypedef u64 (*btf_bpf_get_netns_cookie_sock)(struct sock *);\n\ntypedef u64 (*btf_bpf_get_netns_cookie_sock_addr)(struct bpf_sock_addr_kern *);\n\ntypedef u64 (*btf_bpf_get_socket_uid)(struct sk_buff *);\n\ntypedef u64 (*btf_bpf_sock_addr_setsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);\n\ntypedef u64 (*btf_bpf_sock_addr_getsockopt)(struct bpf_sock_addr_kern *, int, int, char *, int);\n\ntypedef u64 (*btf_bpf_sock_ops_setsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);\n\ntypedef u64 (*btf_bpf_sock_ops_getsockopt)(struct bpf_sock_ops_kern *, int, int, char *, int);\n\ntypedef u64 (*btf_bpf_sock_ops_cb_flags_set)(struct bpf_sock_ops_kern *, int);\n\ntypedef u64 (*btf_bpf_bind)(struct bpf_sock_addr_kern *, struct sockaddr *, int);\n\ntypedef u64 (*btf_bpf_skb_get_xfrm_state)(struct sk_buff *, u32, struct bpf_xfrm_state *, u32, u64);\n\ntypedef u64 (*btf_bpf_xdp_fib_lookup)(struct xdp_buff *, struct bpf_fib_lookup *, int, u32);\n\ntypedef u64 (*btf_bpf_skb_fib_lookup)(struct sk_buff *, struct bpf_fib_lookup *, int, u32);\n\ntypedef u64 (*btf_bpf_lwt_in_push_encap)(struct sk_buff *, u32, void *, u32);\n\ntypedef u64 (*btf_bpf_lwt_xmit_push_encap)(struct sk_buff *, u32, void *, u32);\n\ntypedef u64 (*btf_bpf_lwt_seg6_store_bytes)(struct sk_buff *, u32, const void *, u32);\n\ntypedef u64 (*btf_bpf_lwt_seg6_action)(struct sk_buff *, u32, void *, u32);\n\ntypedef u64 (*btf_bpf_lwt_seg6_adjust_srh)(struct sk_buff *, u32, s32);\n\ntypedef u64 (*btf_bpf_skc_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);\n\ntypedef u64 (*btf_bpf_sk_lookup_tcp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);\n\ntypedef u64 (*btf_bpf_sk_lookup_udp)(struct sk_buff *, struct bpf_sock_tuple *, u32, u64, u64);\n\ntypedef u64 (*btf_bpf_sk_release)(struct sock *);\n\ntypedef u64 (*btf_bpf_xdp_sk_lookup_udp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);\n\ntypedef u64 (*btf_bpf_xdp_skc_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);\n\ntypedef u64 (*btf_bpf_xdp_sk_lookup_tcp)(struct xdp_buff *, struct bpf_sock_tuple *, u32, u32, u64);\n\ntypedef u64 (*btf_bpf_sock_addr_skc_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);\n\ntypedef u64 (*btf_bpf_sock_addr_sk_lookup_tcp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);\n\ntypedef u64 (*btf_bpf_sock_addr_sk_lookup_udp)(struct bpf_sock_addr_kern *, struct bpf_sock_tuple *, u32, u64, u64);\n\ntypedef u64 (*btf_bpf_tcp_sock)(struct sock *);\n\ntypedef u64 (*btf_bpf_get_listener_sock)(struct sock *);\n\ntypedef u64 (*btf_bpf_skb_ecn_set_ce)(struct sk_buff *);\n\ntypedef u64 (*btf_bpf_tcp_check_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);\n\ntypedef u64 (*btf_bpf_tcp_gen_syncookie)(struct sock *, void *, u32, struct tcphdr *, u32);\n\ntypedef u64 (*btf_bpf_sk_assign)(struct sk_buff *, struct sock *, u64);\n\ntypedef u64 (*btf_bpf_sock_ops_load_hdr_opt)(struct bpf_sock_ops_kern *, void *, u32, u64);\n\ntypedef u64 (*btf_bpf_sock_ops_store_hdr_opt)(struct bpf_sock_ops_kern *, const void *, u32, u64);\n\ntypedef u64 (*btf_bpf_sock_ops_reserve_hdr_opt)(struct bpf_sock_ops_kern *, u32, u64);\n\ntypedef u64 (*btf_sk_select_reuseport)(struct sk_reuseport_kern *, struct bpf_map *, void *, u32);\n\ntypedef u64 (*btf_sk_reuseport_load_bytes)(const struct sk_reuseport_kern *, u32, void *, u32);\n\ntypedef u64 (*btf_sk_reuseport_load_bytes_relative)(const struct sk_reuseport_kern *, u32, void *, u32, u32);\n\ntypedef u64 (*btf_bpf_sk_lookup_assign)(struct bpf_sk_lookup_kern *, struct sock *, u64);\n\ntypedef u64 (*btf_bpf_skc_to_tcp6_sock)(struct sock *);\n\ntypedef u64 (*btf_bpf_skc_to_tcp_sock)(struct sock *);\n\ntypedef u64 (*btf_bpf_skc_to_tcp_timewait_sock)(struct sock *);\n\ntypedef u64 (*btf_bpf_skc_to_tcp_request_sock)(struct sock *);\n\ntypedef u64 (*btf_bpf_skc_to_udp6_sock)(struct sock *);\n\ntypedef u64 (*btf_bpf_sock_from_file)(struct file *);\n\nstruct bpf_cpu_map_entry___2;\n\nstruct bpf_dtab_netdev___2;\n\nenum {\n\tINET_DIAG_REQ_NONE = 0,\n\tINET_DIAG_REQ_BYTECODE = 1,\n\tINET_DIAG_REQ_SK_BPF_STORAGES = 2,\n\tINET_DIAG_REQ_PROTOCOL = 3,\n\t__INET_DIAG_REQ_MAX = 4,\n};\n\nstruct sock_diag_req {\n\t__u8 sdiag_family;\n\t__u8 sdiag_protocol;\n};\n\nstruct sock_diag_handler {\n\t__u8 family;\n\tint (*dump)(struct sk_buff *, struct nlmsghdr *);\n\tint (*get_info)(struct sk_buff *, struct sock *);\n\tint (*destroy)(struct sk_buff *, struct nlmsghdr *);\n};\n\nstruct broadcast_sk {\n\tstruct sock *sk;\n\tstruct work_struct work;\n};\n\ntypedef int gifconf_func_t(struct net_device *, char *, int, int);\n\nstruct hwtstamp_config {\n\tint flags;\n\tint tx_type;\n\tint rx_filter;\n};\n\nenum hwtstamp_tx_types {\n\tHWTSTAMP_TX_OFF = 0,\n\tHWTSTAMP_TX_ON = 1,\n\tHWTSTAMP_TX_ONESTEP_SYNC = 2,\n\tHWTSTAMP_TX_ONESTEP_P2P = 3,\n\t__HWTSTAMP_TX_CNT = 4,\n};\n\nenum hwtstamp_rx_filters {\n\tHWTSTAMP_FILTER_NONE = 0,\n\tHWTSTAMP_FILTER_ALL = 1,\n\tHWTSTAMP_FILTER_SOME = 2,\n\tHWTSTAMP_FILTER_PTP_V1_L4_EVENT = 3,\n\tHWTSTAMP_FILTER_PTP_V1_L4_SYNC = 4,\n\tHWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ = 5,\n\tHWTSTAMP_FILTER_PTP_V2_L4_EVENT = 6,\n\tHWTSTAMP_FILTER_PTP_V2_L4_SYNC = 7,\n\tHWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ = 8,\n\tHWTSTAMP_FILTER_PTP_V2_L2_EVENT = 9,\n\tHWTSTAMP_FILTER_PTP_V2_L2_SYNC = 10,\n\tHWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ = 11,\n\tHWTSTAMP_FILTER_PTP_V2_EVENT = 12,\n\tHWTSTAMP_FILTER_PTP_V2_SYNC = 13,\n\tHWTSTAMP_FILTER_PTP_V2_DELAY_REQ = 14,\n\tHWTSTAMP_FILTER_NTP_ALL = 15,\n\t__HWTSTAMP_FILTER_CNT = 16,\n};\n\nstruct tso_t {\n\tint next_frag_idx;\n\tint size;\n\tvoid *data;\n\tu16 ip_id;\n\tu8 tlen;\n\tbool ipv6;\n\tu32 tcp_seq;\n};\n\nstruct fib_notifier_info {\n\tint family;\n\tstruct netlink_ext_ack *extack;\n};\n\nenum fib_event_type {\n\tFIB_EVENT_ENTRY_REPLACE = 0,\n\tFIB_EVENT_ENTRY_APPEND = 1,\n\tFIB_EVENT_ENTRY_ADD = 2,\n\tFIB_EVENT_ENTRY_DEL = 3,\n\tFIB_EVENT_RULE_ADD = 4,\n\tFIB_EVENT_RULE_DEL = 5,\n\tFIB_EVENT_NH_ADD = 6,\n\tFIB_EVENT_NH_DEL = 7,\n\tFIB_EVENT_VIF_ADD = 8,\n\tFIB_EVENT_VIF_DEL = 9,\n};\n\nstruct fib_notifier_net {\n\tstruct list_head fib_notifier_ops;\n\tstruct atomic_notifier_head fib_chain;\n};\n\nstruct xdp_frame_bulk {\n\tint count;\n\tvoid *xa;\n\tvoid *q[16];\n};\n\nstruct xdp_attachment_info {\n\tstruct bpf_prog *prog;\n\tu32 flags;\n};\n\nstruct xdp_buff_xsk;\n\nstruct xsk_buff_pool {\n\tstruct device *dev;\n\tstruct net_device *netdev;\n\tstruct list_head xsk_tx_list;\n\tspinlock_t xsk_tx_list_lock;\n\trefcount_t users;\n\tstruct xdp_umem *umem;\n\tstruct work_struct work;\n\tstruct list_head free_list;\n\tu32 heads_cnt;\n\tu16 queue_id;\n\tlong: 16;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct xsk_queue *fq;\n\tstruct xsk_queue *cq;\n\tdma_addr_t *dma_pages;\n\tstruct xdp_buff_xsk *heads;\n\tu64 chunk_mask;\n\tu64 addrs_cnt;\n\tu32 free_list_cnt;\n\tu32 dma_pages_cnt;\n\tu32 free_heads_cnt;\n\tu32 headroom;\n\tu32 chunk_size;\n\tu32 frame_len;\n\tu8 cached_need_wakeup;\n\tbool uses_need_wakeup;\n\tbool dma_need_sync;\n\tbool unaligned;\n\tvoid *addrs;\n\tspinlock_t cq_lock;\n\tstruct xdp_buff_xsk *free_heads[0];\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct pp_alloc_cache {\n\tu32 count;\n\tvoid *cache[128];\n};\n\nstruct page_pool_params {\n\tunsigned int flags;\n\tunsigned int order;\n\tunsigned int pool_size;\n\tint nid;\n\tstruct device *dev;\n\tenum dma_data_direction dma_dir;\n\tunsigned int max_len;\n\tunsigned int offset;\n};\n\nstruct page_pool {\n\tstruct page_pool_params p;\n\tstruct delayed_work release_dw;\n\tvoid (*disconnect)(void *);\n\tlong unsigned int defer_start;\n\tlong unsigned int defer_warn;\n\tu32 pages_state_hold_cnt;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct pp_alloc_cache alloc;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tstruct ptr_ring ring;\n\tatomic_t pages_state_release_cnt;\n\trefcount_t user_cnt;\n\tu64 destroy_cnt;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct xdp_buff_xsk {\n\tstruct xdp_buff xdp;\n\tdma_addr_t dma;\n\tdma_addr_t frame_dma;\n\tstruct xsk_buff_pool *pool;\n\tbool unaligned;\n\tu64 orig_addr;\n\tstruct list_head free_list_node;\n};\n\nstruct flow_match_meta {\n\tstruct flow_dissector_key_meta *key;\n\tstruct flow_dissector_key_meta *mask;\n};\n\nstruct flow_match_basic {\n\tstruct flow_dissector_key_basic *key;\n\tstruct flow_dissector_key_basic *mask;\n};\n\nstruct flow_match_control {\n\tstruct flow_dissector_key_control *key;\n\tstruct flow_dissector_key_control *mask;\n};\n\nstruct flow_match_eth_addrs {\n\tstruct flow_dissector_key_eth_addrs *key;\n\tstruct flow_dissector_key_eth_addrs *mask;\n};\n\nstruct flow_match_vlan {\n\tstruct flow_dissector_key_vlan *key;\n\tstruct flow_dissector_key_vlan *mask;\n};\n\nstruct flow_match_ipv4_addrs {\n\tstruct flow_dissector_key_ipv4_addrs *key;\n\tstruct flow_dissector_key_ipv4_addrs *mask;\n};\n\nstruct flow_match_ipv6_addrs {\n\tstruct flow_dissector_key_ipv6_addrs *key;\n\tstruct flow_dissector_key_ipv6_addrs *mask;\n};\n\nstruct flow_match_ip {\n\tstruct flow_dissector_key_ip *key;\n\tstruct flow_dissector_key_ip *mask;\n};\n\nstruct flow_match_ports {\n\tstruct flow_dissector_key_ports *key;\n\tstruct flow_dissector_key_ports *mask;\n};\n\nstruct flow_match_icmp {\n\tstruct flow_dissector_key_icmp *key;\n\tstruct flow_dissector_key_icmp *mask;\n};\n\nstruct flow_match_tcp {\n\tstruct flow_dissector_key_tcp *key;\n\tstruct flow_dissector_key_tcp *mask;\n};\n\nstruct flow_match_mpls {\n\tstruct flow_dissector_key_mpls *key;\n\tstruct flow_dissector_key_mpls *mask;\n};\n\nstruct flow_match_enc_keyid {\n\tstruct flow_dissector_key_keyid *key;\n\tstruct flow_dissector_key_keyid *mask;\n};\n\nstruct flow_match_enc_opts {\n\tstruct flow_dissector_key_enc_opts *key;\n\tstruct flow_dissector_key_enc_opts *mask;\n};\n\nstruct flow_match_ct {\n\tstruct flow_dissector_key_ct *key;\n\tstruct flow_dissector_key_ct *mask;\n};\n\nenum flow_block_command {\n\tFLOW_BLOCK_BIND = 0,\n\tFLOW_BLOCK_UNBIND = 1,\n};\n\nenum flow_block_binder_type {\n\tFLOW_BLOCK_BINDER_TYPE_UNSPEC = 0,\n\tFLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS = 1,\n\tFLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS = 2,\n\tFLOW_BLOCK_BINDER_TYPE_RED_EARLY_DROP = 3,\n\tFLOW_BLOCK_BINDER_TYPE_RED_MARK = 4,\n};\n\nstruct flow_block_offload {\n\tenum flow_block_command command;\n\tenum flow_block_binder_type binder_type;\n\tbool block_shared;\n\tbool unlocked_driver_cb;\n\tstruct net *net;\n\tstruct flow_block *block;\n\tstruct list_head cb_list;\n\tstruct list_head *driver_block_list;\n\tstruct netlink_ext_ack *extack;\n\tstruct Qdisc *sch;\n};\n\nstruct flow_block_cb;\n\nstruct flow_block_indr {\n\tstruct list_head list;\n\tstruct net_device *dev;\n\tstruct Qdisc *sch;\n\tenum flow_block_binder_type binder_type;\n\tvoid *data;\n\tvoid *cb_priv;\n\tvoid (*cleanup)(struct flow_block_cb *);\n};\n\nstruct flow_block_cb {\n\tstruct list_head driver_list;\n\tstruct list_head list;\n\tflow_setup_cb_t *cb;\n\tvoid *cb_ident;\n\tvoid *cb_priv;\n\tvoid (*release)(void *);\n\tstruct flow_block_indr indr;\n\tunsigned int refcnt;\n};\n\ntypedef int flow_indr_block_bind_cb_t(struct net_device *, struct Qdisc *, void *, enum tc_setup_type, void *, void *, void (*)(struct flow_block_cb *));\n\nstruct flow_indr_dev {\n\tstruct list_head list;\n\tflow_indr_block_bind_cb_t *cb;\n\tvoid *cb_priv;\n\trefcount_t refcnt;\n\tstruct callback_head rcu;\n};\n\nstruct rx_queue_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct netdev_rx_queue *, char *);\n\tssize_t (*store)(struct netdev_rx_queue *, const char *, size_t);\n};\n\nstruct netdev_queue_attribute {\n\tstruct attribute attr;\n\tssize_t (*show)(struct netdev_queue *, char *);\n\tssize_t (*store)(struct netdev_queue *, const char *, size_t);\n};\n\nenum __sk_action {\n\t__SK_DROP = 0,\n\t__SK_PASS = 1,\n\t__SK_REDIRECT = 2,\n\t__SK_NONE = 3,\n};\n\nstruct sk_psock_progs {\n\tstruct bpf_prog *msg_parser;\n\tstruct bpf_prog *skb_parser;\n\tstruct bpf_prog *skb_verdict;\n};\n\nenum sk_psock_state_bits {\n\tSK_PSOCK_TX_ENABLED = 0,\n};\n\nstruct sk_psock_link {\n\tstruct list_head list;\n\tstruct bpf_map *map;\n\tvoid *link_raw;\n};\n\nstruct sk_psock_parser {\n\tstruct strparser strp;\n\tbool enabled;\n\tvoid (*saved_data_ready)(struct sock *);\n};\n\nstruct sk_psock_work_state {\n\tstruct sk_buff *skb;\n\tu32 len;\n\tu32 off;\n};\n\nstruct sk_psock {\n\tstruct sock *sk;\n\tstruct sock *sk_redir;\n\tu32 apply_bytes;\n\tu32 cork_bytes;\n\tu32 eval;\n\tstruct sk_msg *cork;\n\tstruct sk_psock_progs progs;\n\tstruct sk_psock_parser parser;\n\tstruct sk_buff_head ingress_skb;\n\tstruct list_head ingress_msg;\n\tlong unsigned int state;\n\tstruct list_head link;\n\tspinlock_t link_lock;\n\trefcount_t refcnt;\n\tvoid (*saved_unhash)(struct sock *);\n\tvoid (*saved_close)(struct sock *, long int);\n\tvoid (*saved_write_space)(struct sock *);\n\tstruct proto *sk_proto;\n\tstruct sk_psock_work_state work_state;\n\tstruct work_struct work;\n\tunion {\n\t\tstruct callback_head rcu;\n\t\tstruct work_struct gc;\n\t};\n};\n\nstruct inet6_ifaddr {\n\tstruct in6_addr addr;\n\t__u32 prefix_len;\n\t__u32 rt_priority;\n\t__u32 valid_lft;\n\t__u32 prefered_lft;\n\trefcount_t refcnt;\n\tspinlock_t lock;\n\tint state;\n\t__u32 flags;\n\t__u8 dad_probes;\n\t__u8 stable_privacy_retry;\n\t__u16 scope;\n\t__u64 dad_nonce;\n\tlong unsigned int cstamp;\n\tlong unsigned int tstamp;\n\tstruct delayed_work dad_work;\n\tstruct inet6_dev *idev;\n\tstruct fib6_info *rt;\n\tstruct hlist_node addr_lst;\n\tstruct list_head if_list;\n\tstruct list_head tmp_list;\n\tstruct inet6_ifaddr *ifpub;\n\tint regen_count;\n\tbool tokenized;\n\tstruct callback_head rcu;\n\tstruct in6_addr peer_addr;\n};\n\nstruct fib_rule_uid_range {\n\t__u32 start;\n\t__u32 end;\n};\n\nenum {\n\tFRA_UNSPEC = 0,\n\tFRA_DST = 1,\n\tFRA_SRC = 2,\n\tFRA_IIFNAME = 3,\n\tFRA_GOTO = 4,\n\tFRA_UNUSED2 = 5,\n\tFRA_PRIORITY = 6,\n\tFRA_UNUSED3 = 7,\n\tFRA_UNUSED4 = 8,\n\tFRA_UNUSED5 = 9,\n\tFRA_FWMARK = 10,\n\tFRA_FLOW = 11,\n\tFRA_TUN_ID = 12,\n\tFRA_SUPPRESS_IFGROUP = 13,\n\tFRA_SUPPRESS_PREFIXLEN = 14,\n\tFRA_TABLE = 15,\n\tFRA_FWMASK = 16,\n\tFRA_OIFNAME = 17,\n\tFRA_PAD = 18,\n\tFRA_L3MDEV = 19,\n\tFRA_UID_RANGE = 20,\n\tFRA_PROTOCOL = 21,\n\tFRA_IP_PROTO = 22,\n\tFRA_SPORT_RANGE = 23,\n\tFRA_DPORT_RANGE = 24,\n\t__FRA_MAX = 25,\n};\n\nenum {\n\tFR_ACT_UNSPEC = 0,\n\tFR_ACT_TO_TBL = 1,\n\tFR_ACT_GOTO = 2,\n\tFR_ACT_NOP = 3,\n\tFR_ACT_RES3 = 4,\n\tFR_ACT_RES4 = 5,\n\tFR_ACT_BLACKHOLE = 6,\n\tFR_ACT_UNREACHABLE = 7,\n\tFR_ACT_PROHIBIT = 8,\n\t__FR_ACT_MAX = 9,\n};\n\nstruct fib_rule_notifier_info {\n\tstruct fib_notifier_info info;\n\tstruct fib_rule *rule;\n};\n\nstruct trace_event_raw_kfree_skb {\n\tstruct trace_entry ent;\n\tvoid *skbaddr;\n\tvoid *location;\n\tshort unsigned int protocol;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_consume_skb {\n\tstruct trace_entry ent;\n\tvoid *skbaddr;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_skb_copy_datagram_iovec {\n\tstruct trace_entry ent;\n\tconst void *skbaddr;\n\tint len;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_kfree_skb {};\n\nstruct trace_event_data_offsets_consume_skb {};\n\nstruct trace_event_data_offsets_skb_copy_datagram_iovec {};\n\ntypedef void (*btf_trace_kfree_skb)(void *, struct sk_buff *, void *);\n\ntypedef void (*btf_trace_consume_skb)(void *, struct sk_buff *);\n\ntypedef void (*btf_trace_skb_copy_datagram_iovec)(void *, const struct sk_buff *, int);\n\nstruct trace_event_raw_net_dev_start_xmit {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tu16 queue_mapping;\n\tconst void *skbaddr;\n\tbool vlan_tagged;\n\tu16 vlan_proto;\n\tu16 vlan_tci;\n\tu16 protocol;\n\tu8 ip_summed;\n\tunsigned int len;\n\tunsigned int data_len;\n\tint network_offset;\n\tbool transport_offset_valid;\n\tint transport_offset;\n\tu8 tx_flags;\n\tu16 gso_size;\n\tu16 gso_segs;\n\tu16 gso_type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_net_dev_xmit {\n\tstruct trace_entry ent;\n\tvoid *skbaddr;\n\tunsigned int len;\n\tint rc;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_net_dev_xmit_timeout {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tu32 __data_loc_driver;\n\tint queue_index;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_net_dev_template {\n\tstruct trace_entry ent;\n\tvoid *skbaddr;\n\tunsigned int len;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_net_dev_rx_verbose_template {\n\tstruct trace_entry ent;\n\tu32 __data_loc_name;\n\tunsigned int napi_id;\n\tu16 queue_mapping;\n\tconst void *skbaddr;\n\tbool vlan_tagged;\n\tu16 vlan_proto;\n\tu16 vlan_tci;\n\tu16 protocol;\n\tu8 ip_summed;\n\tu32 hash;\n\tbool l4_hash;\n\tunsigned int len;\n\tunsigned int data_len;\n\tunsigned int truesize;\n\tbool mac_header_valid;\n\tint mac_header;\n\tunsigned char nr_frags;\n\tu16 gso_size;\n\tu16 gso_type;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_net_dev_rx_exit_template {\n\tstruct trace_entry ent;\n\tint ret;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_net_dev_start_xmit {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_net_dev_xmit {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_net_dev_xmit_timeout {\n\tu32 name;\n\tu32 driver;\n};\n\nstruct trace_event_data_offsets_net_dev_template {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_net_dev_rx_verbose_template {\n\tu32 name;\n};\n\nstruct trace_event_data_offsets_net_dev_rx_exit_template {};\n\ntypedef void (*btf_trace_net_dev_start_xmit)(void *, const struct sk_buff *, const struct net_device *);\n\ntypedef void (*btf_trace_net_dev_xmit)(void *, struct sk_buff *, int, struct net_device *, unsigned int);\n\ntypedef void (*btf_trace_net_dev_xmit_timeout)(void *, struct net_device *, int);\n\ntypedef void (*btf_trace_net_dev_queue)(void *, struct sk_buff *);\n\ntypedef void (*btf_trace_netif_receive_skb)(void *, struct sk_buff *);\n\ntypedef void (*btf_trace_netif_rx)(void *, struct sk_buff *);\n\ntypedef void (*btf_trace_napi_gro_frags_entry)(void *, const struct sk_buff *);\n\ntypedef void (*btf_trace_napi_gro_receive_entry)(void *, const struct sk_buff *);\n\ntypedef void (*btf_trace_netif_receive_skb_entry)(void *, const struct sk_buff *);\n\ntypedef void (*btf_trace_netif_receive_skb_list_entry)(void *, const struct sk_buff *);\n\ntypedef void (*btf_trace_netif_rx_entry)(void *, const struct sk_buff *);\n\ntypedef void (*btf_trace_netif_rx_ni_entry)(void *, const struct sk_buff *);\n\ntypedef void (*btf_trace_napi_gro_frags_exit)(void *, int);\n\ntypedef void (*btf_trace_napi_gro_receive_exit)(void *, int);\n\ntypedef void (*btf_trace_netif_receive_skb_exit)(void *, int);\n\ntypedef void (*btf_trace_netif_rx_exit)(void *, int);\n\ntypedef void (*btf_trace_netif_rx_ni_exit)(void *, int);\n\ntypedef void (*btf_trace_netif_receive_skb_list_exit)(void *, int);\n\nstruct trace_event_raw_napi_poll {\n\tstruct trace_entry ent;\n\tstruct napi_struct *napi;\n\tu32 __data_loc_dev_name;\n\tint work;\n\tint budget;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_napi_poll {\n\tu32 dev_name;\n};\n\ntypedef void (*btf_trace_napi_poll)(void *, struct napi_struct *, int, int);\n\nenum tcp_ca_state {\n\tTCP_CA_Open = 0,\n\tTCP_CA_Disorder = 1,\n\tTCP_CA_CWR = 2,\n\tTCP_CA_Recovery = 3,\n\tTCP_CA_Loss = 4,\n};\n\nstruct trace_event_raw_sock_rcvqueue_full {\n\tstruct trace_entry ent;\n\tint rmem_alloc;\n\tunsigned int truesize;\n\tint sk_rcvbuf;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_sock_exceed_buf_limit {\n\tstruct trace_entry ent;\n\tchar name[32];\n\tlong int *sysctl_mem;\n\tlong int allocated;\n\tint sysctl_rmem;\n\tint rmem_alloc;\n\tint sysctl_wmem;\n\tint wmem_alloc;\n\tint wmem_queued;\n\tint kind;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_inet_sock_set_state {\n\tstruct trace_entry ent;\n\tconst void *skaddr;\n\tint oldstate;\n\tint newstate;\n\t__u16 sport;\n\t__u16 dport;\n\t__u16 family;\n\t__u16 protocol;\n\t__u8 saddr[4];\n\t__u8 daddr[4];\n\t__u8 saddr_v6[16];\n\t__u8 daddr_v6[16];\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_sock_rcvqueue_full {};\n\nstruct trace_event_data_offsets_sock_exceed_buf_limit {};\n\nstruct trace_event_data_offsets_inet_sock_set_state {};\n\ntypedef void (*btf_trace_sock_rcvqueue_full)(void *, struct sock *, struct sk_buff *);\n\ntypedef void (*btf_trace_sock_exceed_buf_limit)(void *, struct sock *, struct proto *, long int, int);\n\ntypedef void (*btf_trace_inet_sock_set_state)(void *, const struct sock *, const int, const int);\n\nstruct trace_event_raw_udp_fail_queue_rcv_skb {\n\tstruct trace_entry ent;\n\tint rc;\n\t__u16 lport;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_udp_fail_queue_rcv_skb {};\n\ntypedef void (*btf_trace_udp_fail_queue_rcv_skb)(void *, int, struct sock *);\n\nstruct trace_event_raw_tcp_event_sk_skb {\n\tstruct trace_entry ent;\n\tconst void *skbaddr;\n\tconst void *skaddr;\n\tint state;\n\t__u16 sport;\n\t__u16 dport;\n\t__u8 saddr[4];\n\t__u8 daddr[4];\n\t__u8 saddr_v6[16];\n\t__u8 daddr_v6[16];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_tcp_event_sk {\n\tstruct trace_entry ent;\n\tconst void *skaddr;\n\t__u16 sport;\n\t__u16 dport;\n\t__u8 saddr[4];\n\t__u8 daddr[4];\n\t__u8 saddr_v6[16];\n\t__u8 daddr_v6[16];\n\t__u64 sock_cookie;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_tcp_retransmit_synack {\n\tstruct trace_entry ent;\n\tconst void *skaddr;\n\tconst void *req;\n\t__u16 sport;\n\t__u16 dport;\n\t__u8 saddr[4];\n\t__u8 daddr[4];\n\t__u8 saddr_v6[16];\n\t__u8 daddr_v6[16];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_tcp_probe {\n\tstruct trace_entry ent;\n\t__u8 saddr[28];\n\t__u8 daddr[28];\n\t__u16 sport;\n\t__u16 dport;\n\t__u32 mark;\n\t__u16 data_len;\n\t__u32 snd_nxt;\n\t__u32 snd_una;\n\t__u32 snd_cwnd;\n\t__u32 ssthresh;\n\t__u32 snd_wnd;\n\t__u32 srtt;\n\t__u32 rcv_wnd;\n\t__u64 sock_cookie;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_tcp_event_sk_skb {};\n\nstruct trace_event_data_offsets_tcp_event_sk {};\n\nstruct trace_event_data_offsets_tcp_retransmit_synack {};\n\nstruct trace_event_data_offsets_tcp_probe {};\n\ntypedef void (*btf_trace_tcp_retransmit_skb)(void *, const struct sock *, const struct sk_buff *);\n\ntypedef void (*btf_trace_tcp_send_reset)(void *, const struct sock *, const struct sk_buff *);\n\ntypedef void (*btf_trace_tcp_receive_reset)(void *, struct sock *);\n\ntypedef void (*btf_trace_tcp_destroy_sock)(void *, struct sock *);\n\ntypedef void (*btf_trace_tcp_rcv_space_adjust)(void *, struct sock *);\n\ntypedef void (*btf_trace_tcp_retransmit_synack)(void *, const struct sock *, const struct request_sock *);\n\ntypedef void (*btf_trace_tcp_probe)(void *, struct sock *, struct sk_buff *);\n\nstruct trace_event_raw_fib_table_lookup {\n\tstruct trace_entry ent;\n\tu32 tb_id;\n\tint err;\n\tint oif;\n\tint iif;\n\tu8 proto;\n\t__u8 tos;\n\t__u8 scope;\n\t__u8 flags;\n\t__u8 src[4];\n\t__u8 dst[4];\n\t__u8 gw4[4];\n\t__u8 gw6[16];\n\tu16 sport;\n\tu16 dport;\n\tu32 __data_loc_name;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_fib_table_lookup {\n\tu32 name;\n};\n\ntypedef void (*btf_trace_fib_table_lookup)(void *, u32, const struct flowi4 *, const struct fib_nh_common *, int);\n\nstruct trace_event_raw_qdisc_dequeue {\n\tstruct trace_entry ent;\n\tstruct Qdisc *qdisc;\n\tconst struct netdev_queue *txq;\n\tint packets;\n\tvoid *skbaddr;\n\tint ifindex;\n\tu32 handle;\n\tu32 parent;\n\tlong unsigned int txq_state;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_qdisc_reset {\n\tstruct trace_entry ent;\n\tu32 __data_loc_dev;\n\tu32 __data_loc_kind;\n\tu32 parent;\n\tu32 handle;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_qdisc_destroy {\n\tstruct trace_entry ent;\n\tu32 __data_loc_dev;\n\tu32 __data_loc_kind;\n\tu32 parent;\n\tu32 handle;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_qdisc_create {\n\tstruct trace_entry ent;\n\tu32 __data_loc_dev;\n\tu32 __data_loc_kind;\n\tu32 parent;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_qdisc_dequeue {};\n\nstruct trace_event_data_offsets_qdisc_reset {\n\tu32 dev;\n\tu32 kind;\n};\n\nstruct trace_event_data_offsets_qdisc_destroy {\n\tu32 dev;\n\tu32 kind;\n};\n\nstruct trace_event_data_offsets_qdisc_create {\n\tu32 dev;\n\tu32 kind;\n};\n\ntypedef void (*btf_trace_qdisc_dequeue)(void *, struct Qdisc *, const struct netdev_queue *, int, struct sk_buff *);\n\ntypedef void (*btf_trace_qdisc_reset)(void *, struct Qdisc *);\n\ntypedef void (*btf_trace_qdisc_destroy)(void *, struct Qdisc *);\n\ntypedef void (*btf_trace_qdisc_create)(void *, const struct Qdisc_ops *, struct net_device *, u32);\n\nstruct bridge_stp_xstats {\n\t__u64 transition_blk;\n\t__u64 transition_fwd;\n\t__u64 rx_bpdu;\n\t__u64 tx_bpdu;\n\t__u64 rx_tcn;\n\t__u64 tx_tcn;\n};\n\nstruct br_mcast_stats {\n\t__u64 igmp_v1queries[2];\n\t__u64 igmp_v2queries[2];\n\t__u64 igmp_v3queries[2];\n\t__u64 igmp_leaves[2];\n\t__u64 igmp_v1reports[2];\n\t__u64 igmp_v2reports[2];\n\t__u64 igmp_v3reports[2];\n\t__u64 igmp_parse_errors;\n\t__u64 mld_v1queries[2];\n\t__u64 mld_v2queries[2];\n\t__u64 mld_leaves[2];\n\t__u64 mld_v1reports[2];\n\t__u64 mld_v2reports[2];\n\t__u64 mld_parse_errors;\n\t__u64 mcast_bytes[2];\n\t__u64 mcast_packets[2];\n};\n\nstruct br_ip {\n\tunion {\n\t\t__be32 ip4;\n\t\tstruct in6_addr ip6;\n\t} src;\n\tunion {\n\t\t__be32 ip4;\n\t\tstruct in6_addr ip6;\n\t\tunsigned char mac_addr[6];\n\t} dst;\n\t__be16 proto;\n\t__u16 vid;\n};\n\nstruct bridge_id {\n\tunsigned char prio[2];\n\tunsigned char addr[6];\n};\n\ntypedef struct bridge_id bridge_id;\n\nstruct mac_addr {\n\tunsigned char addr[6];\n};\n\ntypedef struct mac_addr mac_addr;\n\ntypedef __u16 port_id;\n\nstruct bridge_mcast_own_query {\n\tstruct timer_list timer;\n\tu32 startup_sent;\n};\n\nstruct bridge_mcast_other_query {\n\tstruct timer_list timer;\n\tlong unsigned int delay_time;\n};\n\nstruct net_bridge_port;\n\nstruct bridge_mcast_querier {\n\tstruct br_ip addr;\n\tstruct net_bridge_port *port;\n};\n\nstruct net_bridge;\n\nstruct net_bridge_vlan_group;\n\nstruct bridge_mcast_stats;\n\nstruct net_bridge_port {\n\tstruct net_bridge *br;\n\tstruct net_device *dev;\n\tstruct list_head list;\n\tlong unsigned int flags;\n\tstruct net_bridge_vlan_group *vlgrp;\n\tstruct net_bridge_port *backup_port;\n\tu8 priority;\n\tu8 state;\n\tu16 port_no;\n\tunsigned char topology_change_ack;\n\tunsigned char config_pending;\n\tport_id port_id;\n\tport_id designated_port;\n\tbridge_id designated_root;\n\tbridge_id designated_bridge;\n\tu32 path_cost;\n\tu32 designated_cost;\n\tlong unsigned int designated_age;\n\tstruct timer_list forward_delay_timer;\n\tstruct timer_list hold_timer;\n\tstruct timer_list message_age_timer;\n\tstruct kobject kobj;\n\tstruct callback_head rcu;\n\tstruct bridge_mcast_own_query ip4_own_query;\n\tstruct bridge_mcast_own_query ip6_own_query;\n\tunsigned char multicast_router;\n\tstruct bridge_mcast_stats *mcast_stats;\n\tstruct timer_list multicast_router_timer;\n\tstruct hlist_head mglist;\n\tstruct hlist_node rlist;\n\tchar sysfs_name[16];\n\tstruct netpoll *np;\n\tint offload_fwd_mark;\n\tu16 group_fwd_mask;\n\tu16 backup_redirected_cnt;\n\tstruct bridge_stp_xstats stp_xstats;\n};\n\nstruct bridge_mcast_stats {\n\tstruct br_mcast_stats mstats;\n\tstruct u64_stats_sync syncp;\n};\n\nstruct net_bridge {\n\tspinlock_t lock;\n\tspinlock_t hash_lock;\n\tstruct hlist_head frame_type_list;\n\tstruct net_device *dev;\n\tlong unsigned int options;\n\t__be16 vlan_proto;\n\tu16 default_pvid;\n\tstruct net_bridge_vlan_group *vlgrp;\n\tstruct rhashtable fdb_hash_tbl;\n\tstruct list_head port_list;\n\tunion {\n\t\tstruct rtable fake_rtable;\n\t\tstruct rt6_info fake_rt6_info;\n\t};\n\tu16 group_fwd_mask;\n\tu16 group_fwd_mask_required;\n\tbridge_id designated_root;\n\tbridge_id bridge_id;\n\tunsigned char topology_change;\n\tunsigned char topology_change_detected;\n\tu16 root_port;\n\tlong unsigned int max_age;\n\tlong unsigned int hello_time;\n\tlong unsigned int forward_delay;\n\tlong unsigned int ageing_time;\n\tlong unsigned int bridge_max_age;\n\tlong unsigned int bridge_hello_time;\n\tlong unsigned int bridge_forward_delay;\n\tlong unsigned int bridge_ageing_time;\n\tu32 root_path_cost;\n\tu8 group_addr[6];\n\tenum {\n\t\tBR_NO_STP = 0,\n\t\tBR_KERNEL_STP = 1,\n\t\tBR_USER_STP = 2,\n\t} stp_enabled;\n\tu32 hash_max;\n\tu32 multicast_last_member_count;\n\tu32 multicast_startup_query_count;\n\tu8 multicast_igmp_version;\n\tu8 multicast_router;\n\tu8 multicast_mld_version;\n\tspinlock_t multicast_lock;\n\tlong unsigned int multicast_last_member_interval;\n\tlong unsigned int multicast_membership_interval;\n\tlong unsigned int multicast_querier_interval;\n\tlong unsigned int multicast_query_interval;\n\tlong unsigned int multicast_query_response_interval;\n\tlong unsigned int multicast_startup_query_interval;\n\tstruct rhashtable mdb_hash_tbl;\n\tstruct rhashtable sg_port_tbl;\n\tstruct hlist_head mcast_gc_list;\n\tstruct hlist_head mdb_list;\n\tstruct hlist_head router_list;\n\tstruct timer_list multicast_router_timer;\n\tstruct bridge_mcast_other_query ip4_other_query;\n\tstruct bridge_mcast_own_query ip4_own_query;\n\tstruct bridge_mcast_querier ip4_querier;\n\tstruct bridge_mcast_stats *mcast_stats;\n\tstruct bridge_mcast_other_query ip6_other_query;\n\tstruct bridge_mcast_own_query ip6_own_query;\n\tstruct bridge_mcast_querier ip6_querier;\n\tstruct work_struct mcast_gc_work;\n\tstruct timer_list hello_timer;\n\tstruct timer_list tcn_timer;\n\tstruct timer_list topology_change_timer;\n\tstruct delayed_work gc_work;\n\tstruct kobject *ifobj;\n\tu32 auto_cnt;\n\tint offload_fwd_mark;\n\tstruct hlist_head fdb_list;\n\tstruct hlist_head mrp_list;\n\tstruct hlist_head mep_list;\n};\n\nstruct net_bridge_vlan_group {\n\tstruct rhashtable vlan_hash;\n\tstruct rhashtable tunnel_hash;\n\tstruct list_head vlan_list;\n\tu16 num_vlans;\n\tu16 pvid;\n\tu8 pvid_state;\n};\n\nstruct net_bridge_fdb_key {\n\tmac_addr addr;\n\tu16 vlan_id;\n};\n\nstruct net_bridge_fdb_entry {\n\tstruct rhash_head rhnode;\n\tstruct net_bridge_port *dst;\n\tstruct net_bridge_fdb_key key;\n\tstruct hlist_node fdb_node;\n\tlong unsigned int flags;\n\tlong: 64;\n\tlong: 64;\n\tlong unsigned int updated;\n\tlong unsigned int used;\n\tstruct callback_head rcu;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct trace_event_raw_br_fdb_add {\n\tstruct trace_entry ent;\n\tu8 ndm_flags;\n\tu32 __data_loc_dev;\n\tunsigned char addr[6];\n\tu16 vid;\n\tu16 nlh_flags;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_br_fdb_external_learn_add {\n\tstruct trace_entry ent;\n\tu32 __data_loc_br_dev;\n\tu32 __data_loc_dev;\n\tunsigned char addr[6];\n\tu16 vid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_fdb_delete {\n\tstruct trace_entry ent;\n\tu32 __data_loc_br_dev;\n\tu32 __data_loc_dev;\n\tunsigned char addr[6];\n\tu16 vid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_br_fdb_update {\n\tstruct trace_entry ent;\n\tu32 __data_loc_br_dev;\n\tu32 __data_loc_dev;\n\tunsigned char addr[6];\n\tu16 vid;\n\tlong unsigned int flags;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_br_fdb_add {\n\tu32 dev;\n};\n\nstruct trace_event_data_offsets_br_fdb_external_learn_add {\n\tu32 br_dev;\n\tu32 dev;\n};\n\nstruct trace_event_data_offsets_fdb_delete {\n\tu32 br_dev;\n\tu32 dev;\n};\n\nstruct trace_event_data_offsets_br_fdb_update {\n\tu32 br_dev;\n\tu32 dev;\n};\n\ntypedef void (*btf_trace_br_fdb_add)(void *, struct ndmsg *, struct net_device *, const unsigned char *, u16, u16);\n\ntypedef void (*btf_trace_br_fdb_external_learn_add)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16);\n\ntypedef void (*btf_trace_fdb_delete)(void *, struct net_bridge *, struct net_bridge_fdb_entry *);\n\ntypedef void (*btf_trace_br_fdb_update)(void *, struct net_bridge *, struct net_bridge_port *, const unsigned char *, u16, long unsigned int);\n\nstruct trace_event_raw_page_pool_release {\n\tstruct trace_entry ent;\n\tconst struct page_pool *pool;\n\ts32 inflight;\n\tu32 hold;\n\tu32 release;\n\tu64 cnt;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_page_pool_state_release {\n\tstruct trace_entry ent;\n\tconst struct page_pool *pool;\n\tconst struct page *page;\n\tu32 release;\n\tlong unsigned int pfn;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_page_pool_state_hold {\n\tstruct trace_entry ent;\n\tconst struct page_pool *pool;\n\tconst struct page *page;\n\tu32 hold;\n\tlong unsigned int pfn;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_page_pool_update_nid {\n\tstruct trace_entry ent;\n\tconst struct page_pool *pool;\n\tint pool_nid;\n\tint new_nid;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_page_pool_release {};\n\nstruct trace_event_data_offsets_page_pool_state_release {};\n\nstruct trace_event_data_offsets_page_pool_state_hold {};\n\nstruct trace_event_data_offsets_page_pool_update_nid {};\n\ntypedef void (*btf_trace_page_pool_release)(void *, const struct page_pool *, s32, u32, u32);\n\ntypedef void (*btf_trace_page_pool_state_release)(void *, const struct page_pool *, const struct page *, u32);\n\ntypedef void (*btf_trace_page_pool_state_hold)(void *, const struct page_pool *, const struct page *, u32);\n\ntypedef void (*btf_trace_page_pool_update_nid)(void *, const struct page_pool *, int);\n\nstruct trace_event_raw_neigh_create {\n\tstruct trace_entry ent;\n\tu32 family;\n\tu32 __data_loc_dev;\n\tint entries;\n\tu8 created;\n\tu8 gc_exempt;\n\tu8 primary_key4[4];\n\tu8 primary_key6[16];\n\tchar __data[0];\n};\n\nstruct trace_event_raw_neigh_update {\n\tstruct trace_entry ent;\n\tu32 family;\n\tu32 __data_loc_dev;\n\tu8 lladdr[32];\n\tu8 lladdr_len;\n\tu8 flags;\n\tu8 nud_state;\n\tu8 type;\n\tu8 dead;\n\tint refcnt;\n\t__u8 primary_key4[4];\n\t__u8 primary_key6[16];\n\tlong unsigned int confirmed;\n\tlong unsigned int updated;\n\tlong unsigned int used;\n\tu8 new_lladdr[32];\n\tu8 new_state;\n\tu32 update_flags;\n\tu32 pid;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_neigh__update {\n\tstruct trace_entry ent;\n\tu32 family;\n\tu32 __data_loc_dev;\n\tu8 lladdr[32];\n\tu8 lladdr_len;\n\tu8 flags;\n\tu8 nud_state;\n\tu8 type;\n\tu8 dead;\n\tint refcnt;\n\t__u8 primary_key4[4];\n\t__u8 primary_key6[16];\n\tlong unsigned int confirmed;\n\tlong unsigned int updated;\n\tlong unsigned int used;\n\tu32 err;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_neigh_create {\n\tu32 dev;\n};\n\nstruct trace_event_data_offsets_neigh_update {\n\tu32 dev;\n};\n\nstruct trace_event_data_offsets_neigh__update {\n\tu32 dev;\n};\n\ntypedef void (*btf_trace_neigh_create)(void *, struct neigh_table *, struct net_device *, const void *, const struct neighbour *, bool);\n\ntypedef void (*btf_trace_neigh_update)(void *, struct neighbour *, const u8 *, u8, u32, u32);\n\ntypedef void (*btf_trace_neigh_update_done)(void *, struct neighbour *, int);\n\ntypedef void (*btf_trace_neigh_timer_handler)(void *, struct neighbour *, int);\n\ntypedef void (*btf_trace_neigh_event_send_done)(void *, struct neighbour *, int);\n\ntypedef void (*btf_trace_neigh_event_send_dead)(void *, struct neighbour *, int);\n\ntypedef void (*btf_trace_neigh_cleanup_and_release)(void *, struct neighbour *, int);\n\nstruct net_dm_drop_point {\n\t__u8 pc[8];\n\t__u32 count;\n};\n\nstruct net_dm_alert_msg {\n\t__u32 entries;\n\tstruct net_dm_drop_point points[0];\n};\n\nenum {\n\tNET_DM_CMD_UNSPEC = 0,\n\tNET_DM_CMD_ALERT = 1,\n\tNET_DM_CMD_CONFIG = 2,\n\tNET_DM_CMD_START = 3,\n\tNET_DM_CMD_STOP = 4,\n\tNET_DM_CMD_PACKET_ALERT = 5,\n\tNET_DM_CMD_CONFIG_GET = 6,\n\tNET_DM_CMD_CONFIG_NEW = 7,\n\tNET_DM_CMD_STATS_GET = 8,\n\tNET_DM_CMD_STATS_NEW = 9,\n\t_NET_DM_CMD_MAX = 10,\n};\n\nenum net_dm_attr {\n\tNET_DM_ATTR_UNSPEC = 0,\n\tNET_DM_ATTR_ALERT_MODE = 1,\n\tNET_DM_ATTR_PC = 2,\n\tNET_DM_ATTR_SYMBOL = 3,\n\tNET_DM_ATTR_IN_PORT = 4,\n\tNET_DM_ATTR_TIMESTAMP = 5,\n\tNET_DM_ATTR_PROTO = 6,\n\tNET_DM_ATTR_PAYLOAD = 7,\n\tNET_DM_ATTR_PAD = 8,\n\tNET_DM_ATTR_TRUNC_LEN = 9,\n\tNET_DM_ATTR_ORIG_LEN = 10,\n\tNET_DM_ATTR_QUEUE_LEN = 11,\n\tNET_DM_ATTR_STATS = 12,\n\tNET_DM_ATTR_HW_STATS = 13,\n\tNET_DM_ATTR_ORIGIN = 14,\n\tNET_DM_ATTR_HW_TRAP_GROUP_NAME = 15,\n\tNET_DM_ATTR_HW_TRAP_NAME = 16,\n\tNET_DM_ATTR_HW_ENTRIES = 17,\n\tNET_DM_ATTR_HW_ENTRY = 18,\n\tNET_DM_ATTR_HW_TRAP_COUNT = 19,\n\tNET_DM_ATTR_SW_DROPS = 20,\n\tNET_DM_ATTR_HW_DROPS = 21,\n\tNET_DM_ATTR_FLOW_ACTION_COOKIE = 22,\n\t__NET_DM_ATTR_MAX = 23,\n\tNET_DM_ATTR_MAX = 22,\n};\n\nenum net_dm_alert_mode {\n\tNET_DM_ALERT_MODE_SUMMARY = 0,\n\tNET_DM_ALERT_MODE_PACKET = 1,\n};\n\nenum {\n\tNET_DM_ATTR_PORT_NETDEV_IFINDEX = 0,\n\tNET_DM_ATTR_PORT_NETDEV_NAME = 1,\n\t__NET_DM_ATTR_PORT_MAX = 2,\n\tNET_DM_ATTR_PORT_MAX = 1,\n};\n\nenum {\n\tNET_DM_ATTR_STATS_DROPPED = 0,\n\t__NET_DM_ATTR_STATS_MAX = 1,\n\tNET_DM_ATTR_STATS_MAX = 0,\n};\n\nenum net_dm_origin {\n\tNET_DM_ORIGIN_SW = 0,\n\tNET_DM_ORIGIN_HW = 1,\n};\n\nstruct devlink_trap_metadata {\n\tconst char *trap_name;\n\tconst char *trap_group_name;\n\tstruct net_device *input_dev;\n\tconst struct flow_action_cookie *fa_cookie;\n\tenum devlink_trap_type trap_type;\n};\n\nstruct net_dm_stats {\n\tu64 dropped;\n\tstruct u64_stats_sync syncp;\n};\n\nstruct net_dm_hw_entry {\n\tchar trap_name[40];\n\tu32 count;\n};\n\nstruct net_dm_hw_entries {\n\tu32 num_entries;\n\tstruct net_dm_hw_entry entries[0];\n};\n\nstruct per_cpu_dm_data {\n\tspinlock_t lock;\n\tunion {\n\t\tstruct sk_buff *skb;\n\t\tstruct net_dm_hw_entries *hw_entries;\n\t};\n\tstruct sk_buff_head drop_queue;\n\tstruct work_struct dm_alert_work;\n\tstruct timer_list send_timer;\n\tstruct net_dm_stats stats;\n};\n\nstruct dm_hw_stat_delta {\n\tstruct net_device *dev;\n\tlong unsigned int last_rx;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n\tlong unsigned int last_drop_val;\n};\n\nstruct net_dm_alert_ops {\n\tvoid (*kfree_skb_probe)(void *, struct sk_buff *, void *);\n\tvoid (*napi_poll_probe)(void *, struct napi_struct *, int, int);\n\tvoid (*work_item_func)(struct work_struct *);\n\tvoid (*hw_work_item_func)(struct work_struct *);\n\tvoid (*hw_trap_probe)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);\n};\n\nstruct net_dm_skb_cb {\n\tunion {\n\t\tstruct devlink_trap_metadata *hw_metadata;\n\t\tvoid *pc;\n\t};\n};\n\nstruct clock_identity {\n\tu8 id[8];\n};\n\nstruct port_identity {\n\tstruct clock_identity clock_identity;\n\t__be16 port_number;\n};\n\nstruct ptp_header {\n\tu8 tsmt;\n\tu8 ver;\n\t__be16 message_length;\n\tu8 domain_number;\n\tu8 reserved1;\n\tu8 flag_field[2];\n\t__be64 correction;\n\t__be32 reserved2;\n\tstruct port_identity source_port_identity;\n\t__be16 sequence_id;\n\tu8 control;\n\tu8 log_message_interval;\n} __attribute__((packed));\n\nstruct update_classid_context {\n\tu32 classid;\n\tunsigned int batch;\n};\n\nenum lwtunnel_encap_types {\n\tLWTUNNEL_ENCAP_NONE = 0,\n\tLWTUNNEL_ENCAP_MPLS = 1,\n\tLWTUNNEL_ENCAP_IP = 2,\n\tLWTUNNEL_ENCAP_ILA = 3,\n\tLWTUNNEL_ENCAP_IP6 = 4,\n\tLWTUNNEL_ENCAP_SEG6 = 5,\n\tLWTUNNEL_ENCAP_BPF = 6,\n\tLWTUNNEL_ENCAP_SEG6_LOCAL = 7,\n\tLWTUNNEL_ENCAP_RPL = 8,\n\t__LWTUNNEL_ENCAP_MAX = 9,\n};\n\nstruct rtnexthop {\n\tshort unsigned int rtnh_len;\n\tunsigned char rtnh_flags;\n\tunsigned char rtnh_hops;\n\tint rtnh_ifindex;\n};\n\nstruct lwtunnel_encap_ops {\n\tint (*build_state)(struct net *, struct nlattr *, unsigned int, const void *, struct lwtunnel_state **, struct netlink_ext_ack *);\n\tvoid (*destroy_state)(struct lwtunnel_state *);\n\tint (*output)(struct net *, struct sock *, struct sk_buff *);\n\tint (*input)(struct sk_buff *);\n\tint (*fill_encap)(struct sk_buff *, struct lwtunnel_state *);\n\tint (*get_encap_size)(struct lwtunnel_state *);\n\tint (*cmp_encap)(struct lwtunnel_state *, struct lwtunnel_state *);\n\tint (*xmit)(struct sk_buff *);\n\tstruct module *owner;\n};\n\nenum {\n\tLWT_BPF_PROG_UNSPEC = 0,\n\tLWT_BPF_PROG_FD = 1,\n\tLWT_BPF_PROG_NAME = 2,\n\t__LWT_BPF_PROG_MAX = 3,\n};\n\nenum {\n\tLWT_BPF_UNSPEC = 0,\n\tLWT_BPF_IN = 1,\n\tLWT_BPF_OUT = 2,\n\tLWT_BPF_XMIT = 3,\n\tLWT_BPF_XMIT_HEADROOM = 4,\n\t__LWT_BPF_MAX = 5,\n};\n\nenum {\n\tLWTUNNEL_XMIT_DONE = 0,\n\tLWTUNNEL_XMIT_CONTINUE = 1,\n};\n\nstruct bpf_lwt_prog {\n\tstruct bpf_prog *prog;\n\tchar *name;\n};\n\nstruct bpf_lwt {\n\tstruct bpf_lwt_prog in;\n\tstruct bpf_lwt_prog out;\n\tstruct bpf_lwt_prog xmit;\n\tint family;\n};\n\nstruct bpf_stab {\n\tstruct bpf_map map;\n\tstruct sock **sks;\n\tstruct sk_psock_progs progs;\n\traw_spinlock_t lock;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\ntypedef u64 (*btf_bpf_sock_map_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);\n\ntypedef u64 (*btf_bpf_sk_redirect_map)(struct sk_buff *, struct bpf_map *, u32, u64);\n\ntypedef u64 (*btf_bpf_msg_redirect_map)(struct sk_msg *, struct bpf_map *, u32, u64);\n\nstruct sock_map_seq_info {\n\tstruct bpf_map *map;\n\tstruct sock *sk;\n\tu32 index;\n};\n\nstruct bpf_iter__sockmap {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct bpf_map *map;\n\t};\n\tunion {\n\t\tvoid *key;\n\t};\n\tunion {\n\t\tstruct sock *sk;\n\t};\n};\n\nstruct bpf_shtab_elem {\n\tstruct callback_head rcu;\n\tu32 hash;\n\tstruct sock *sk;\n\tstruct hlist_node node;\n\tu8 key[0];\n};\n\nstruct bpf_shtab_bucket {\n\tstruct hlist_head head;\n\traw_spinlock_t lock;\n};\n\nstruct bpf_shtab {\n\tstruct bpf_map map;\n\tstruct bpf_shtab_bucket *buckets;\n\tu32 buckets_num;\n\tu32 elem_size;\n\tstruct sk_psock_progs progs;\n\tatomic_t count;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n};\n\ntypedef u64 (*btf_bpf_sock_hash_update)(struct bpf_sock_ops_kern *, struct bpf_map *, void *, u64);\n\ntypedef u64 (*btf_bpf_sk_redirect_hash)(struct sk_buff *, struct bpf_map *, void *, u64);\n\ntypedef u64 (*btf_bpf_msg_redirect_hash)(struct sk_msg *, struct bpf_map *, void *, u64);\n\nstruct sock_hash_seq_info {\n\tstruct bpf_map *map;\n\tstruct bpf_shtab *htab;\n\tu32 bucket_id;\n};\n\nstruct dst_cache_pcpu {\n\tlong unsigned int refresh_ts;\n\tstruct dst_entry *dst;\n\tu32 cookie;\n\tunion {\n\t\tstruct in_addr in_saddr;\n\t\tstruct in6_addr in6_saddr;\n\t};\n};\n\nenum devlink_command {\n\tDEVLINK_CMD_UNSPEC = 0,\n\tDEVLINK_CMD_GET = 1,\n\tDEVLINK_CMD_SET = 2,\n\tDEVLINK_CMD_NEW = 3,\n\tDEVLINK_CMD_DEL = 4,\n\tDEVLINK_CMD_PORT_GET = 5,\n\tDEVLINK_CMD_PORT_SET = 6,\n\tDEVLINK_CMD_PORT_NEW = 7,\n\tDEVLINK_CMD_PORT_DEL = 8,\n\tDEVLINK_CMD_PORT_SPLIT = 9,\n\tDEVLINK_CMD_PORT_UNSPLIT = 10,\n\tDEVLINK_CMD_SB_GET = 11,\n\tDEVLINK_CMD_SB_SET = 12,\n\tDEVLINK_CMD_SB_NEW = 13,\n\tDEVLINK_CMD_SB_DEL = 14,\n\tDEVLINK_CMD_SB_POOL_GET = 15,\n\tDEVLINK_CMD_SB_POOL_SET = 16,\n\tDEVLINK_CMD_SB_POOL_NEW = 17,\n\tDEVLINK_CMD_SB_POOL_DEL = 18,\n\tDEVLINK_CMD_SB_PORT_POOL_GET = 19,\n\tDEVLINK_CMD_SB_PORT_POOL_SET = 20,\n\tDEVLINK_CMD_SB_PORT_POOL_NEW = 21,\n\tDEVLINK_CMD_SB_PORT_POOL_DEL = 22,\n\tDEVLINK_CMD_SB_TC_POOL_BIND_GET = 23,\n\tDEVLINK_CMD_SB_TC_POOL_BIND_SET = 24,\n\tDEVLINK_CMD_SB_TC_POOL_BIND_NEW = 25,\n\tDEVLINK_CMD_SB_TC_POOL_BIND_DEL = 26,\n\tDEVLINK_CMD_SB_OCC_SNAPSHOT = 27,\n\tDEVLINK_CMD_SB_OCC_MAX_CLEAR = 28,\n\tDEVLINK_CMD_ESWITCH_GET = 29,\n\tDEVLINK_CMD_ESWITCH_SET = 30,\n\tDEVLINK_CMD_DPIPE_TABLE_GET = 31,\n\tDEVLINK_CMD_DPIPE_ENTRIES_GET = 32,\n\tDEVLINK_CMD_DPIPE_HEADERS_GET = 33,\n\tDEVLINK_CMD_DPIPE_TABLE_COUNTERS_SET = 34,\n\tDEVLINK_CMD_RESOURCE_SET = 35,\n\tDEVLINK_CMD_RESOURCE_DUMP = 36,\n\tDEVLINK_CMD_RELOAD = 37,\n\tDEVLINK_CMD_PARAM_GET = 38,\n\tDEVLINK_CMD_PARAM_SET = 39,\n\tDEVLINK_CMD_PARAM_NEW = 40,\n\tDEVLINK_CMD_PARAM_DEL = 41,\n\tDEVLINK_CMD_REGION_GET = 42,\n\tDEVLINK_CMD_REGION_SET = 43,\n\tDEVLINK_CMD_REGION_NEW = 44,\n\tDEVLINK_CMD_REGION_DEL = 45,\n\tDEVLINK_CMD_REGION_READ = 46,\n\tDEVLINK_CMD_PORT_PARAM_GET = 47,\n\tDEVLINK_CMD_PORT_PARAM_SET = 48,\n\tDEVLINK_CMD_PORT_PARAM_NEW = 49,\n\tDEVLINK_CMD_PORT_PARAM_DEL = 50,\n\tDEVLINK_CMD_INFO_GET = 51,\n\tDEVLINK_CMD_HEALTH_REPORTER_GET = 52,\n\tDEVLINK_CMD_HEALTH_REPORTER_SET = 53,\n\tDEVLINK_CMD_HEALTH_REPORTER_RECOVER = 54,\n\tDEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE = 55,\n\tDEVLINK_CMD_HEALTH_REPORTER_DUMP_GET = 56,\n\tDEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR = 57,\n\tDEVLINK_CMD_FLASH_UPDATE = 58,\n\tDEVLINK_CMD_FLASH_UPDATE_END = 59,\n\tDEVLINK_CMD_FLASH_UPDATE_STATUS = 60,\n\tDEVLINK_CMD_TRAP_GET = 61,\n\tDEVLINK_CMD_TRAP_SET = 62,\n\tDEVLINK_CMD_TRAP_NEW = 63,\n\tDEVLINK_CMD_TRAP_DEL = 64,\n\tDEVLINK_CMD_TRAP_GROUP_GET = 65,\n\tDEVLINK_CMD_TRAP_GROUP_SET = 66,\n\tDEVLINK_CMD_TRAP_GROUP_NEW = 67,\n\tDEVLINK_CMD_TRAP_GROUP_DEL = 68,\n\tDEVLINK_CMD_TRAP_POLICER_GET = 69,\n\tDEVLINK_CMD_TRAP_POLICER_SET = 70,\n\tDEVLINK_CMD_TRAP_POLICER_NEW = 71,\n\tDEVLINK_CMD_TRAP_POLICER_DEL = 72,\n\tDEVLINK_CMD_HEALTH_REPORTER_TEST = 73,\n\t__DEVLINK_CMD_MAX = 74,\n\tDEVLINK_CMD_MAX = 73,\n};\n\nenum devlink_eswitch_mode {\n\tDEVLINK_ESWITCH_MODE_LEGACY = 0,\n\tDEVLINK_ESWITCH_MODE_SWITCHDEV = 1,\n};\n\nenum {\n\tDEVLINK_ATTR_STATS_RX_PACKETS = 0,\n\tDEVLINK_ATTR_STATS_RX_BYTES = 1,\n\tDEVLINK_ATTR_STATS_RX_DROPPED = 2,\n\t__DEVLINK_ATTR_STATS_MAX = 3,\n\tDEVLINK_ATTR_STATS_MAX = 2,\n};\n\nenum {\n\tDEVLINK_FLASH_OVERWRITE_SETTINGS_BIT = 0,\n\tDEVLINK_FLASH_OVERWRITE_IDENTIFIERS_BIT = 1,\n\t__DEVLINK_FLASH_OVERWRITE_MAX_BIT = 2,\n\tDEVLINK_FLASH_OVERWRITE_MAX_BIT = 1,\n};\n\nenum {\n\tDEVLINK_ATTR_TRAP_METADATA_TYPE_IN_PORT = 0,\n\tDEVLINK_ATTR_TRAP_METADATA_TYPE_FA_COOKIE = 1,\n};\n\nenum devlink_attr {\n\tDEVLINK_ATTR_UNSPEC = 0,\n\tDEVLINK_ATTR_BUS_NAME = 1,\n\tDEVLINK_ATTR_DEV_NAME = 2,\n\tDEVLINK_ATTR_PORT_INDEX = 3,\n\tDEVLINK_ATTR_PORT_TYPE = 4,\n\tDEVLINK_ATTR_PORT_DESIRED_TYPE = 5,\n\tDEVLINK_ATTR_PORT_NETDEV_IFINDEX = 6,\n\tDEVLINK_ATTR_PORT_NETDEV_NAME = 7,\n\tDEVLINK_ATTR_PORT_IBDEV_NAME = 8,\n\tDEVLINK_ATTR_PORT_SPLIT_COUNT = 9,\n\tDEVLINK_ATTR_PORT_SPLIT_GROUP = 10,\n\tDEVLINK_ATTR_SB_INDEX = 11,\n\tDEVLINK_ATTR_SB_SIZE = 12,\n\tDEVLINK_ATTR_SB_INGRESS_POOL_COUNT = 13,\n\tDEVLINK_ATTR_SB_EGRESS_POOL_COUNT = 14,\n\tDEVLINK_ATTR_SB_INGRESS_TC_COUNT = 15,\n\tDEVLINK_ATTR_SB_EGRESS_TC_COUNT = 16,\n\tDEVLINK_ATTR_SB_POOL_INDEX = 17,\n\tDEVLINK_ATTR_SB_POOL_TYPE = 18,\n\tDEVLINK_ATTR_SB_POOL_SIZE = 19,\n\tDEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE = 20,\n\tDEVLINK_ATTR_SB_THRESHOLD = 21,\n\tDEVLINK_ATTR_SB_TC_INDEX = 22,\n\tDEVLINK_ATTR_SB_OCC_CUR = 23,\n\tDEVLINK_ATTR_SB_OCC_MAX = 24,\n\tDEVLINK_ATTR_ESWITCH_MODE = 25,\n\tDEVLINK_ATTR_ESWITCH_INLINE_MODE = 26,\n\tDEVLINK_ATTR_DPIPE_TABLES = 27,\n\tDEVLINK_ATTR_DPIPE_TABLE = 28,\n\tDEVLINK_ATTR_DPIPE_TABLE_NAME = 29,\n\tDEVLINK_ATTR_DPIPE_TABLE_SIZE = 30,\n\tDEVLINK_ATTR_DPIPE_TABLE_MATCHES = 31,\n\tDEVLINK_ATTR_DPIPE_TABLE_ACTIONS = 32,\n\tDEVLINK_ATTR_DPIPE_TABLE_COUNTERS_ENABLED = 33,\n\tDEVLINK_ATTR_DPIPE_ENTRIES = 34,\n\tDEVLINK_ATTR_DPIPE_ENTRY = 35,\n\tDEVLINK_ATTR_DPIPE_ENTRY_INDEX = 36,\n\tDEVLINK_ATTR_DPIPE_ENTRY_MATCH_VALUES = 37,\n\tDEVLINK_ATTR_DPIPE_ENTRY_ACTION_VALUES = 38,\n\tDEVLINK_ATTR_DPIPE_ENTRY_COUNTER = 39,\n\tDEVLINK_ATTR_DPIPE_MATCH = 40,\n\tDEVLINK_ATTR_DPIPE_MATCH_VALUE = 41,\n\tDEVLINK_ATTR_DPIPE_MATCH_TYPE = 42,\n\tDEVLINK_ATTR_DPIPE_ACTION = 43,\n\tDEVLINK_ATTR_DPIPE_ACTION_VALUE = 44,\n\tDEVLINK_ATTR_DPIPE_ACTION_TYPE = 45,\n\tDEVLINK_ATTR_DPIPE_VALUE = 46,\n\tDEVLINK_ATTR_DPIPE_VALUE_MASK = 47,\n\tDEVLINK_ATTR_DPIPE_VALUE_MAPPING = 48,\n\tDEVLINK_ATTR_DPIPE_HEADERS = 49,\n\tDEVLINK_ATTR_DPIPE_HEADER = 50,\n\tDEVLINK_ATTR_DPIPE_HEADER_NAME = 51,\n\tDEVLINK_ATTR_DPIPE_HEADER_ID = 52,\n\tDEVLINK_ATTR_DPIPE_HEADER_FIELDS = 53,\n\tDEVLINK_ATTR_DPIPE_HEADER_GLOBAL = 54,\n\tDEVLINK_ATTR_DPIPE_HEADER_INDEX = 55,\n\tDEVLINK_ATTR_DPIPE_FIELD = 56,\n\tDEVLINK_ATTR_DPIPE_FIELD_NAME = 57,\n\tDEVLINK_ATTR_DPIPE_FIELD_ID = 58,\n\tDEVLINK_ATTR_DPIPE_FIELD_BITWIDTH = 59,\n\tDEVLINK_ATTR_DPIPE_FIELD_MAPPING_TYPE = 60,\n\tDEVLINK_ATTR_PAD = 61,\n\tDEVLINK_ATTR_ESWITCH_ENCAP_MODE = 62,\n\tDEVLINK_ATTR_RESOURCE_LIST = 63,\n\tDEVLINK_ATTR_RESOURCE = 64,\n\tDEVLINK_ATTR_RESOURCE_NAME = 65,\n\tDEVLINK_ATTR_RESOURCE_ID = 66,\n\tDEVLINK_ATTR_RESOURCE_SIZE = 67,\n\tDEVLINK_ATTR_RESOURCE_SIZE_NEW = 68,\n\tDEVLINK_ATTR_RESOURCE_SIZE_VALID = 69,\n\tDEVLINK_ATTR_RESOURCE_SIZE_MIN = 70,\n\tDEVLINK_ATTR_RESOURCE_SIZE_MAX = 71,\n\tDEVLINK_ATTR_RESOURCE_SIZE_GRAN = 72,\n\tDEVLINK_ATTR_RESOURCE_UNIT = 73,\n\tDEVLINK_ATTR_RESOURCE_OCC = 74,\n\tDEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID = 75,\n\tDEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS = 76,\n\tDEVLINK_ATTR_PORT_FLAVOUR = 77,\n\tDEVLINK_ATTR_PORT_NUMBER = 78,\n\tDEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER = 79,\n\tDEVLINK_ATTR_PARAM = 80,\n\tDEVLINK_ATTR_PARAM_NAME = 81,\n\tDEVLINK_ATTR_PARAM_GENERIC = 82,\n\tDEVLINK_ATTR_PARAM_TYPE = 83,\n\tDEVLINK_ATTR_PARAM_VALUES_LIST = 84,\n\tDEVLINK_ATTR_PARAM_VALUE = 85,\n\tDEVLINK_ATTR_PARAM_VALUE_DATA = 86,\n\tDEVLINK_ATTR_PARAM_VALUE_CMODE = 87,\n\tDEVLINK_ATTR_REGION_NAME = 88,\n\tDEVLINK_ATTR_REGION_SIZE = 89,\n\tDEVLINK_ATTR_REGION_SNAPSHOTS = 90,\n\tDEVLINK_ATTR_REGION_SNAPSHOT = 91,\n\tDEVLINK_ATTR_REGION_SNAPSHOT_ID = 92,\n\tDEVLINK_ATTR_REGION_CHUNKS = 93,\n\tDEVLINK_ATTR_REGION_CHUNK = 94,\n\tDEVLINK_ATTR_REGION_CHUNK_DATA = 95,\n\tDEVLINK_ATTR_REGION_CHUNK_ADDR = 96,\n\tDEVLINK_ATTR_REGION_CHUNK_LEN = 97,\n\tDEVLINK_ATTR_INFO_DRIVER_NAME = 98,\n\tDEVLINK_ATTR_INFO_SERIAL_NUMBER = 99,\n\tDEVLINK_ATTR_INFO_VERSION_FIXED = 100,\n\tDEVLINK_ATTR_INFO_VERSION_RUNNING = 101,\n\tDEVLINK_ATTR_INFO_VERSION_STORED = 102,\n\tDEVLINK_ATTR_INFO_VERSION_NAME = 103,\n\tDEVLINK_ATTR_INFO_VERSION_VALUE = 104,\n\tDEVLINK_ATTR_SB_POOL_CELL_SIZE = 105,\n\tDEVLINK_ATTR_FMSG = 106,\n\tDEVLINK_ATTR_FMSG_OBJ_NEST_START = 107,\n\tDEVLINK_ATTR_FMSG_PAIR_NEST_START = 108,\n\tDEVLINK_ATTR_FMSG_ARR_NEST_START = 109,\n\tDEVLINK_ATTR_FMSG_NEST_END = 110,\n\tDEVLINK_ATTR_FMSG_OBJ_NAME = 111,\n\tDEVLINK_ATTR_FMSG_OBJ_VALUE_TYPE = 112,\n\tDEVLINK_ATTR_FMSG_OBJ_VALUE_DATA = 113,\n\tDEVLINK_ATTR_HEALTH_REPORTER = 114,\n\tDEVLINK_ATTR_HEALTH_REPORTER_NAME = 115,\n\tDEVLINK_ATTR_HEALTH_REPORTER_STATE = 116,\n\tDEVLINK_ATTR_HEALTH_REPORTER_ERR_COUNT = 117,\n\tDEVLINK_ATTR_HEALTH_REPORTER_RECOVER_COUNT = 118,\n\tDEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS = 119,\n\tDEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD = 120,\n\tDEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER = 121,\n\tDEVLINK_ATTR_FLASH_UPDATE_FILE_NAME = 122,\n\tDEVLINK_ATTR_FLASH_UPDATE_COMPONENT = 123,\n\tDEVLINK_ATTR_FLASH_UPDATE_STATUS_MSG = 124,\n\tDEVLINK_ATTR_FLASH_UPDATE_STATUS_DONE = 125,\n\tDEVLINK_ATTR_FLASH_UPDATE_STATUS_TOTAL = 126,\n\tDEVLINK_ATTR_PORT_PCI_PF_NUMBER = 127,\n\tDEVLINK_ATTR_PORT_PCI_VF_NUMBER = 128,\n\tDEVLINK_ATTR_STATS = 129,\n\tDEVLINK_ATTR_TRAP_NAME = 130,\n\tDEVLINK_ATTR_TRAP_ACTION = 131,\n\tDEVLINK_ATTR_TRAP_TYPE = 132,\n\tDEVLINK_ATTR_TRAP_GENERIC = 133,\n\tDEVLINK_ATTR_TRAP_METADATA = 134,\n\tDEVLINK_ATTR_TRAP_GROUP_NAME = 135,\n\tDEVLINK_ATTR_RELOAD_FAILED = 136,\n\tDEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS_NS = 137,\n\tDEVLINK_ATTR_NETNS_FD = 138,\n\tDEVLINK_ATTR_NETNS_PID = 139,\n\tDEVLINK_ATTR_NETNS_ID = 140,\n\tDEVLINK_ATTR_HEALTH_REPORTER_AUTO_DUMP = 141,\n\tDEVLINK_ATTR_TRAP_POLICER_ID = 142,\n\tDEVLINK_ATTR_TRAP_POLICER_RATE = 143,\n\tDEVLINK_ATTR_TRAP_POLICER_BURST = 144,\n\tDEVLINK_ATTR_PORT_FUNCTION = 145,\n\tDEVLINK_ATTR_INFO_BOARD_SERIAL_NUMBER = 146,\n\tDEVLINK_ATTR_PORT_LANES = 147,\n\tDEVLINK_ATTR_PORT_SPLITTABLE = 148,\n\tDEVLINK_ATTR_PORT_EXTERNAL = 149,\n\tDEVLINK_ATTR_PORT_CONTROLLER_NUMBER = 150,\n\tDEVLINK_ATTR_FLASH_UPDATE_STATUS_TIMEOUT = 151,\n\tDEVLINK_ATTR_FLASH_UPDATE_OVERWRITE_MASK = 152,\n\tDEVLINK_ATTR_RELOAD_ACTION = 153,\n\tDEVLINK_ATTR_RELOAD_ACTIONS_PERFORMED = 154,\n\tDEVLINK_ATTR_RELOAD_LIMITS = 155,\n\tDEVLINK_ATTR_DEV_STATS = 156,\n\tDEVLINK_ATTR_RELOAD_STATS = 157,\n\tDEVLINK_ATTR_RELOAD_STATS_ENTRY = 158,\n\tDEVLINK_ATTR_RELOAD_STATS_LIMIT = 159,\n\tDEVLINK_ATTR_RELOAD_STATS_VALUE = 160,\n\tDEVLINK_ATTR_REMOTE_RELOAD_STATS = 161,\n\tDEVLINK_ATTR_RELOAD_ACTION_INFO = 162,\n\tDEVLINK_ATTR_RELOAD_ACTION_STATS = 163,\n\t__DEVLINK_ATTR_MAX = 164,\n\tDEVLINK_ATTR_MAX = 163,\n};\n\nenum devlink_dpipe_match_type {\n\tDEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0,\n};\n\nenum devlink_dpipe_action_type {\n\tDEVLINK_DPIPE_ACTION_TYPE_FIELD_MODIFY = 0,\n};\n\nenum devlink_dpipe_field_ethernet_id {\n\tDEVLINK_DPIPE_FIELD_ETHERNET_DST_MAC = 0,\n};\n\nenum devlink_dpipe_field_ipv4_id {\n\tDEVLINK_DPIPE_FIELD_IPV4_DST_IP = 0,\n};\n\nenum devlink_dpipe_field_ipv6_id {\n\tDEVLINK_DPIPE_FIELD_IPV6_DST_IP = 0,\n};\n\nenum devlink_dpipe_header_id {\n\tDEVLINK_DPIPE_HEADER_ETHERNET = 0,\n\tDEVLINK_DPIPE_HEADER_IPV4 = 1,\n\tDEVLINK_DPIPE_HEADER_IPV6 = 2,\n};\n\nenum devlink_resource_unit {\n\tDEVLINK_RESOURCE_UNIT_ENTRY = 0,\n};\n\nenum devlink_port_function_attr {\n\tDEVLINK_PORT_FUNCTION_ATTR_UNSPEC = 0,\n\tDEVLINK_PORT_FUNCTION_ATTR_HW_ADDR = 1,\n\t__DEVLINK_PORT_FUNCTION_ATTR_MAX = 2,\n\tDEVLINK_PORT_FUNCTION_ATTR_MAX = 1,\n};\n\nstruct devlink_dpipe_match {\n\tenum devlink_dpipe_match_type type;\n\tunsigned int header_index;\n\tstruct devlink_dpipe_header *header;\n\tunsigned int field_id;\n};\n\nstruct devlink_dpipe_action {\n\tenum devlink_dpipe_action_type type;\n\tunsigned int header_index;\n\tstruct devlink_dpipe_header *header;\n\tunsigned int field_id;\n};\n\nstruct devlink_dpipe_value {\n\tunion {\n\t\tstruct devlink_dpipe_action *action;\n\t\tstruct devlink_dpipe_match *match;\n\t};\n\tunsigned int mapping_value;\n\tbool mapping_valid;\n\tunsigned int value_size;\n\tvoid *value;\n\tvoid *mask;\n};\n\nstruct devlink_dpipe_entry {\n\tu64 index;\n\tstruct devlink_dpipe_value *match_values;\n\tunsigned int match_values_count;\n\tstruct devlink_dpipe_value *action_values;\n\tunsigned int action_values_count;\n\tu64 counter;\n\tbool counter_valid;\n};\n\nstruct devlink_dpipe_dump_ctx {\n\tstruct genl_info *info;\n\tenum devlink_command cmd;\n\tstruct sk_buff *skb;\n\tstruct nlattr *nest;\n\tvoid *hdr;\n};\n\nstruct devlink_dpipe_table_ops;\n\nstruct devlink_dpipe_table {\n\tvoid *priv;\n\tstruct list_head list;\n\tconst char *name;\n\tbool counters_enabled;\n\tbool counter_control_extern;\n\tbool resource_valid;\n\tu64 resource_id;\n\tu64 resource_units;\n\tstruct devlink_dpipe_table_ops *table_ops;\n\tstruct callback_head rcu;\n};\n\nstruct devlink_dpipe_table_ops {\n\tint (*actions_dump)(void *, struct sk_buff *);\n\tint (*matches_dump)(void *, struct sk_buff *);\n\tint (*entries_dump)(void *, bool, struct devlink_dpipe_dump_ctx *);\n\tint (*counters_set_update)(void *, bool);\n\tu64 (*size_get)(void *);\n};\n\nstruct devlink_resource_size_params {\n\tu64 size_min;\n\tu64 size_max;\n\tu64 size_granularity;\n\tenum devlink_resource_unit unit;\n};\n\ntypedef u64 devlink_resource_occ_get_t(void *);\n\nstruct devlink_resource {\n\tconst char *name;\n\tu64 id;\n\tu64 size;\n\tu64 size_new;\n\tbool size_valid;\n\tstruct devlink_resource *parent;\n\tstruct devlink_resource_size_params size_params;\n\tstruct list_head list;\n\tstruct list_head resource_list;\n\tdevlink_resource_occ_get_t *occ_get;\n\tvoid *occ_get_priv;\n};\n\nenum devlink_param_type {\n\tDEVLINK_PARAM_TYPE_U8 = 0,\n\tDEVLINK_PARAM_TYPE_U16 = 1,\n\tDEVLINK_PARAM_TYPE_U32 = 2,\n\tDEVLINK_PARAM_TYPE_STRING = 3,\n\tDEVLINK_PARAM_TYPE_BOOL = 4,\n};\n\nstruct devlink_flash_notify {\n\tconst char *status_msg;\n\tconst char *component;\n\tlong unsigned int done;\n\tlong unsigned int total;\n\tlong unsigned int timeout;\n};\n\nstruct devlink_param {\n\tu32 id;\n\tconst char *name;\n\tbool generic;\n\tenum devlink_param_type type;\n\tlong unsigned int supported_cmodes;\n\tint (*get)(struct devlink *, u32, struct devlink_param_gset_ctx *);\n\tint (*set)(struct devlink *, u32, struct devlink_param_gset_ctx *);\n\tint (*validate)(struct devlink *, u32, union devlink_param_value, struct netlink_ext_ack *);\n};\n\nstruct devlink_param_item {\n\tstruct list_head list;\n\tconst struct devlink_param *param;\n\tunion devlink_param_value driverinit_value;\n\tbool driverinit_value_valid;\n\tbool published;\n};\n\nenum devlink_param_generic_id {\n\tDEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET = 0,\n\tDEVLINK_PARAM_GENERIC_ID_MAX_MACS = 1,\n\tDEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV = 2,\n\tDEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT = 3,\n\tDEVLINK_PARAM_GENERIC_ID_IGNORE_ARI = 4,\n\tDEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX = 5,\n\tDEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN = 6,\n\tDEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY = 7,\n\tDEVLINK_PARAM_GENERIC_ID_RESET_DEV_ON_DRV_PROBE = 8,\n\tDEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE = 9,\n\tDEVLINK_PARAM_GENERIC_ID_ENABLE_REMOTE_DEV_RESET = 10,\n\t__DEVLINK_PARAM_GENERIC_ID_MAX = 11,\n\tDEVLINK_PARAM_GENERIC_ID_MAX = 10,\n};\n\nstruct devlink_region_ops {\n\tconst char *name;\n\tvoid (*destructor)(const void *);\n\tint (*snapshot)(struct devlink *, const struct devlink_region_ops *, struct netlink_ext_ack *, u8 **);\n\tvoid *priv;\n};\n\nstruct devlink_port_region_ops {\n\tconst char *name;\n\tvoid (*destructor)(const void *);\n\tint (*snapshot)(struct devlink_port *, const struct devlink_port_region_ops *, struct netlink_ext_ack *, u8 **);\n\tvoid *priv;\n};\n\nenum devlink_health_reporter_state {\n\tDEVLINK_HEALTH_REPORTER_STATE_HEALTHY = 0,\n\tDEVLINK_HEALTH_REPORTER_STATE_ERROR = 1,\n};\n\nstruct devlink_health_reporter;\n\nstruct devlink_fmsg;\n\nstruct devlink_health_reporter_ops {\n\tchar *name;\n\tint (*recover)(struct devlink_health_reporter *, void *, struct netlink_ext_ack *);\n\tint (*dump)(struct devlink_health_reporter *, struct devlink_fmsg *, void *, struct netlink_ext_ack *);\n\tint (*diagnose)(struct devlink_health_reporter *, struct devlink_fmsg *, struct netlink_ext_ack *);\n\tint (*test)(struct devlink_health_reporter *, struct netlink_ext_ack *);\n};\n\nstruct devlink_health_reporter {\n\tstruct list_head list;\n\tvoid *priv;\n\tconst struct devlink_health_reporter_ops *ops;\n\tstruct devlink *devlink;\n\tstruct devlink_port *devlink_port;\n\tstruct devlink_fmsg *dump_fmsg;\n\tstruct mutex dump_lock;\n\tu64 graceful_period;\n\tbool auto_recover;\n\tbool auto_dump;\n\tu8 health_state;\n\tu64 dump_ts;\n\tu64 dump_real_ts;\n\tu64 error_count;\n\tu64 recovery_count;\n\tu64 last_recovery_ts;\n\trefcount_t refcount;\n};\n\nstruct devlink_fmsg {\n\tstruct list_head item_list;\n\tbool putting_binary;\n};\n\nenum devlink_trap_generic_id {\n\tDEVLINK_TRAP_GENERIC_ID_SMAC_MC = 0,\n\tDEVLINK_TRAP_GENERIC_ID_VLAN_TAG_MISMATCH = 1,\n\tDEVLINK_TRAP_GENERIC_ID_INGRESS_VLAN_FILTER = 2,\n\tDEVLINK_TRAP_GENERIC_ID_INGRESS_STP_FILTER = 3,\n\tDEVLINK_TRAP_GENERIC_ID_EMPTY_TX_LIST = 4,\n\tDEVLINK_TRAP_GENERIC_ID_PORT_LOOPBACK_FILTER = 5,\n\tDEVLINK_TRAP_GENERIC_ID_BLACKHOLE_ROUTE = 6,\n\tDEVLINK_TRAP_GENERIC_ID_TTL_ERROR = 7,\n\tDEVLINK_TRAP_GENERIC_ID_TAIL_DROP = 8,\n\tDEVLINK_TRAP_GENERIC_ID_NON_IP_PACKET = 9,\n\tDEVLINK_TRAP_GENERIC_ID_UC_DIP_MC_DMAC = 10,\n\tDEVLINK_TRAP_GENERIC_ID_DIP_LB = 11,\n\tDEVLINK_TRAP_GENERIC_ID_SIP_MC = 12,\n\tDEVLINK_TRAP_GENERIC_ID_SIP_LB = 13,\n\tDEVLINK_TRAP_GENERIC_ID_CORRUPTED_IP_HDR = 14,\n\tDEVLINK_TRAP_GENERIC_ID_IPV4_SIP_BC = 15,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_RESERVED_SCOPE = 16,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_MC_DIP_INTERFACE_LOCAL_SCOPE = 17,\n\tDEVLINK_TRAP_GENERIC_ID_MTU_ERROR = 18,\n\tDEVLINK_TRAP_GENERIC_ID_UNRESOLVED_NEIGH = 19,\n\tDEVLINK_TRAP_GENERIC_ID_RPF = 20,\n\tDEVLINK_TRAP_GENERIC_ID_REJECT_ROUTE = 21,\n\tDEVLINK_TRAP_GENERIC_ID_IPV4_LPM_UNICAST_MISS = 22,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_LPM_UNICAST_MISS = 23,\n\tDEVLINK_TRAP_GENERIC_ID_NON_ROUTABLE = 24,\n\tDEVLINK_TRAP_GENERIC_ID_DECAP_ERROR = 25,\n\tDEVLINK_TRAP_GENERIC_ID_OVERLAY_SMAC_MC = 26,\n\tDEVLINK_TRAP_GENERIC_ID_INGRESS_FLOW_ACTION_DROP = 27,\n\tDEVLINK_TRAP_GENERIC_ID_EGRESS_FLOW_ACTION_DROP = 28,\n\tDEVLINK_TRAP_GENERIC_ID_STP = 29,\n\tDEVLINK_TRAP_GENERIC_ID_LACP = 30,\n\tDEVLINK_TRAP_GENERIC_ID_LLDP = 31,\n\tDEVLINK_TRAP_GENERIC_ID_IGMP_QUERY = 32,\n\tDEVLINK_TRAP_GENERIC_ID_IGMP_V1_REPORT = 33,\n\tDEVLINK_TRAP_GENERIC_ID_IGMP_V2_REPORT = 34,\n\tDEVLINK_TRAP_GENERIC_ID_IGMP_V3_REPORT = 35,\n\tDEVLINK_TRAP_GENERIC_ID_IGMP_V2_LEAVE = 36,\n\tDEVLINK_TRAP_GENERIC_ID_MLD_QUERY = 37,\n\tDEVLINK_TRAP_GENERIC_ID_MLD_V1_REPORT = 38,\n\tDEVLINK_TRAP_GENERIC_ID_MLD_V2_REPORT = 39,\n\tDEVLINK_TRAP_GENERIC_ID_MLD_V1_DONE = 40,\n\tDEVLINK_TRAP_GENERIC_ID_IPV4_DHCP = 41,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_DHCP = 42,\n\tDEVLINK_TRAP_GENERIC_ID_ARP_REQUEST = 43,\n\tDEVLINK_TRAP_GENERIC_ID_ARP_RESPONSE = 44,\n\tDEVLINK_TRAP_GENERIC_ID_ARP_OVERLAY = 45,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_SOLICIT = 46,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_NEIGH_ADVERT = 47,\n\tDEVLINK_TRAP_GENERIC_ID_IPV4_BFD = 48,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_BFD = 49,\n\tDEVLINK_TRAP_GENERIC_ID_IPV4_OSPF = 50,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_OSPF = 51,\n\tDEVLINK_TRAP_GENERIC_ID_IPV4_BGP = 52,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_BGP = 53,\n\tDEVLINK_TRAP_GENERIC_ID_IPV4_VRRP = 54,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_VRRP = 55,\n\tDEVLINK_TRAP_GENERIC_ID_IPV4_PIM = 56,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_PIM = 57,\n\tDEVLINK_TRAP_GENERIC_ID_UC_LB = 58,\n\tDEVLINK_TRAP_GENERIC_ID_LOCAL_ROUTE = 59,\n\tDEVLINK_TRAP_GENERIC_ID_EXTERNAL_ROUTE = 60,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_UC_DIP_LINK_LOCAL_SCOPE = 61,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_NODES = 62,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_DIP_ALL_ROUTERS = 63,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_SOLICIT = 64,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ADVERT = 65,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_REDIRECT = 66,\n\tDEVLINK_TRAP_GENERIC_ID_IPV4_ROUTER_ALERT = 67,\n\tDEVLINK_TRAP_GENERIC_ID_IPV6_ROUTER_ALERT = 68,\n\tDEVLINK_TRAP_GENERIC_ID_PTP_EVENT = 69,\n\tDEVLINK_TRAP_GENERIC_ID_PTP_GENERAL = 70,\n\tDEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_SAMPLE = 71,\n\tDEVLINK_TRAP_GENERIC_ID_FLOW_ACTION_TRAP = 72,\n\tDEVLINK_TRAP_GENERIC_ID_EARLY_DROP = 73,\n\tDEVLINK_TRAP_GENERIC_ID_VXLAN_PARSING = 74,\n\tDEVLINK_TRAP_GENERIC_ID_LLC_SNAP_PARSING = 75,\n\tDEVLINK_TRAP_GENERIC_ID_VLAN_PARSING = 76,\n\tDEVLINK_TRAP_GENERIC_ID_PPPOE_PPP_PARSING = 77,\n\tDEVLINK_TRAP_GENERIC_ID_MPLS_PARSING = 78,\n\tDEVLINK_TRAP_GENERIC_ID_ARP_PARSING = 79,\n\tDEVLINK_TRAP_GENERIC_ID_IP_1_PARSING = 80,\n\tDEVLINK_TRAP_GENERIC_ID_IP_N_PARSING = 81,\n\tDEVLINK_TRAP_GENERIC_ID_GRE_PARSING = 82,\n\tDEVLINK_TRAP_GENERIC_ID_UDP_PARSING = 83,\n\tDEVLINK_TRAP_GENERIC_ID_TCP_PARSING = 84,\n\tDEVLINK_TRAP_GENERIC_ID_IPSEC_PARSING = 85,\n\tDEVLINK_TRAP_GENERIC_ID_SCTP_PARSING = 86,\n\tDEVLINK_TRAP_GENERIC_ID_DCCP_PARSING = 87,\n\tDEVLINK_TRAP_GENERIC_ID_GTP_PARSING = 88,\n\tDEVLINK_TRAP_GENERIC_ID_ESP_PARSING = 89,\n\tDEVLINK_TRAP_GENERIC_ID_BLACKHOLE_NEXTHOP = 90,\n\t__DEVLINK_TRAP_GENERIC_ID_MAX = 91,\n\tDEVLINK_TRAP_GENERIC_ID_MAX = 90,\n};\n\nenum devlink_trap_group_generic_id {\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_L2_DROPS = 0,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_L3_DROPS = 1,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_L3_EXCEPTIONS = 2,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_BUFFER_DROPS = 3,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_TUNNEL_DROPS = 4,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_ACL_DROPS = 5,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_STP = 6,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_LACP = 7,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_LLDP = 8,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_MC_SNOOPING = 9,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_DHCP = 10,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_NEIGH_DISCOVERY = 11,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_BFD = 12,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_OSPF = 13,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_BGP = 14,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_VRRP = 15,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_PIM = 16,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_UC_LB = 17,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_LOCAL_DELIVERY = 18,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_EXTERNAL_DELIVERY = 19,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_IPV6 = 20,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_PTP_EVENT = 21,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_PTP_GENERAL = 22,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_ACL_SAMPLE = 23,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_ACL_TRAP = 24,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_PARSER_ERROR_DROPS = 25,\n\t__DEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 26,\n\tDEVLINK_TRAP_GROUP_GENERIC_ID_MAX = 25,\n};\n\nstruct devlink_info_req {\n\tstruct sk_buff *msg;\n};\n\nstruct trace_event_raw_devlink_hwmsg {\n\tstruct trace_entry ent;\n\tu32 __data_loc_bus_name;\n\tu32 __data_loc_dev_name;\n\tu32 __data_loc_driver_name;\n\tbool incoming;\n\tlong unsigned int type;\n\tu32 __data_loc_buf;\n\tsize_t len;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_devlink_hwerr {\n\tstruct trace_entry ent;\n\tu32 __data_loc_bus_name;\n\tu32 __data_loc_dev_name;\n\tu32 __data_loc_driver_name;\n\tint err;\n\tu32 __data_loc_msg;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_devlink_health_report {\n\tstruct trace_entry ent;\n\tu32 __data_loc_bus_name;\n\tu32 __data_loc_dev_name;\n\tu32 __data_loc_driver_name;\n\tu32 __data_loc_reporter_name;\n\tu32 __data_loc_msg;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_devlink_health_recover_aborted {\n\tstruct trace_entry ent;\n\tu32 __data_loc_bus_name;\n\tu32 __data_loc_dev_name;\n\tu32 __data_loc_driver_name;\n\tu32 __data_loc_reporter_name;\n\tbool health_state;\n\tu64 time_since_last_recover;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_devlink_health_reporter_state_update {\n\tstruct trace_entry ent;\n\tu32 __data_loc_bus_name;\n\tu32 __data_loc_dev_name;\n\tu32 __data_loc_driver_name;\n\tu32 __data_loc_reporter_name;\n\tu8 new_state;\n\tchar __data[0];\n};\n\nstruct trace_event_raw_devlink_trap_report {\n\tstruct trace_entry ent;\n\tu32 __data_loc_bus_name;\n\tu32 __data_loc_dev_name;\n\tu32 __data_loc_driver_name;\n\tu32 __data_loc_trap_name;\n\tu32 __data_loc_trap_group_name;\n\tu32 __data_loc_input_dev_name;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_devlink_hwmsg {\n\tu32 bus_name;\n\tu32 dev_name;\n\tu32 driver_name;\n\tu32 buf;\n};\n\nstruct trace_event_data_offsets_devlink_hwerr {\n\tu32 bus_name;\n\tu32 dev_name;\n\tu32 driver_name;\n\tu32 msg;\n};\n\nstruct trace_event_data_offsets_devlink_health_report {\n\tu32 bus_name;\n\tu32 dev_name;\n\tu32 driver_name;\n\tu32 reporter_name;\n\tu32 msg;\n};\n\nstruct trace_event_data_offsets_devlink_health_recover_aborted {\n\tu32 bus_name;\n\tu32 dev_name;\n\tu32 driver_name;\n\tu32 reporter_name;\n};\n\nstruct trace_event_data_offsets_devlink_health_reporter_state_update {\n\tu32 bus_name;\n\tu32 dev_name;\n\tu32 driver_name;\n\tu32 reporter_name;\n};\n\nstruct trace_event_data_offsets_devlink_trap_report {\n\tu32 bus_name;\n\tu32 dev_name;\n\tu32 driver_name;\n\tu32 trap_name;\n\tu32 trap_group_name;\n\tu32 input_dev_name;\n};\n\ntypedef void (*btf_trace_devlink_hwmsg)(void *, const struct devlink *, bool, long unsigned int, const u8 *, size_t);\n\ntypedef void (*btf_trace_devlink_hwerr)(void *, const struct devlink *, int, const char *);\n\ntypedef void (*btf_trace_devlink_health_report)(void *, const struct devlink *, const char *, const char *);\n\ntypedef void (*btf_trace_devlink_health_recover_aborted)(void *, const struct devlink *, const char *, bool, u64);\n\ntypedef void (*btf_trace_devlink_health_reporter_state_update)(void *, const struct devlink *, const char *, bool);\n\ntypedef void (*btf_trace_devlink_trap_report)(void *, const struct devlink *, struct sk_buff *, const struct devlink_trap_metadata *);\n\nstruct devlink_sb {\n\tstruct list_head list;\n\tunsigned int index;\n\tu32 size;\n\tu16 ingress_pools_count;\n\tu16 egress_pools_count;\n\tu16 ingress_tc_count;\n\tu16 egress_tc_count;\n};\n\nstruct devlink_region {\n\tstruct devlink *devlink;\n\tstruct devlink_port *port;\n\tstruct list_head list;\n\tunion {\n\t\tconst struct devlink_region_ops *ops;\n\t\tconst struct devlink_port_region_ops *port_ops;\n\t};\n\tstruct list_head snapshot_list;\n\tu32 max_snapshots;\n\tu32 cur_snapshots;\n\tu64 size;\n};\n\nstruct devlink_snapshot {\n\tstruct list_head list;\n\tstruct devlink_region *region;\n\tu8 *data;\n\tu32 id;\n};\n\nenum devlink_multicast_groups {\n\tDEVLINK_MCGRP_CONFIG = 0,\n};\n\nstruct devlink_reload_combination {\n\tenum devlink_reload_action action;\n\tenum devlink_reload_limit limit;\n};\n\nstruct devlink_fmsg_item {\n\tstruct list_head list;\n\tint attrtype;\n\tu8 nla_type;\n\tu16 len;\n\tint value[0];\n};\n\nstruct devlink_stats {\n\tu64 rx_bytes;\n\tu64 rx_packets;\n\tstruct u64_stats_sync syncp;\n};\n\nstruct devlink_trap_policer_item {\n\tconst struct devlink_trap_policer *policer;\n\tu64 rate;\n\tu64 burst;\n\tstruct list_head list;\n};\n\nstruct devlink_trap_group_item {\n\tconst struct devlink_trap_group *group;\n\tstruct devlink_trap_policer_item *policer_item;\n\tstruct list_head list;\n\tstruct devlink_stats *stats;\n};\n\nstruct devlink_trap_item {\n\tconst struct devlink_trap *trap;\n\tstruct devlink_trap_group_item *group_item;\n\tstruct list_head list;\n\tenum devlink_trap_action action;\n\tstruct devlink_stats *stats;\n\tvoid *priv;\n};\n\nstruct gro_cell;\n\nstruct gro_cells {\n\tstruct gro_cell *cells;\n};\n\nstruct gro_cell {\n\tstruct sk_buff_head napi_skbs;\n\tstruct napi_struct napi;\n};\n\nenum {\n\tSK_DIAG_BPF_STORAGE_REQ_NONE = 0,\n\tSK_DIAG_BPF_STORAGE_REQ_MAP_FD = 1,\n\t__SK_DIAG_BPF_STORAGE_REQ_MAX = 2,\n};\n\nenum {\n\tSK_DIAG_BPF_STORAGE_REP_NONE = 0,\n\tSK_DIAG_BPF_STORAGE = 1,\n\t__SK_DIAG_BPF_STORAGE_REP_MAX = 2,\n};\n\nenum {\n\tSK_DIAG_BPF_STORAGE_NONE = 0,\n\tSK_DIAG_BPF_STORAGE_PAD = 1,\n\tSK_DIAG_BPF_STORAGE_MAP_ID = 2,\n\tSK_DIAG_BPF_STORAGE_MAP_VALUE = 3,\n\t__SK_DIAG_BPF_STORAGE_MAX = 4,\n};\n\ntypedef u64 (*btf_bpf_sk_storage_get)(struct bpf_map *, struct sock *, void *, u64);\n\ntypedef u64 (*btf_bpf_sk_storage_delete)(struct bpf_map *, struct sock *);\n\ntypedef u64 (*btf_bpf_sk_storage_get_tracing)(struct bpf_map *, struct sock *, void *, u64);\n\ntypedef u64 (*btf_bpf_sk_storage_delete_tracing)(struct bpf_map *, struct sock *);\n\nstruct bpf_sk_storage_diag {\n\tu32 nr_maps;\n\tstruct bpf_map *maps[0];\n};\n\nstruct bpf_iter_seq_sk_storage_map_info {\n\tstruct bpf_map *map;\n\tunsigned int bucket_id;\n\tunsigned int skip_elems;\n};\n\nstruct bpf_iter__bpf_sk_storage_map {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct bpf_map *map;\n\t};\n\tunion {\n\t\tstruct sock *sk;\n\t};\n\tunion {\n\t\tvoid *value;\n\t};\n};\n\nstruct compat_cmsghdr {\n\tcompat_size_t cmsg_len;\n\tcompat_int_t cmsg_level;\n\tcompat_int_t cmsg_type;\n};\n\ntypedef struct sk_buff * (*gro_receive_t)(struct list_head *, struct sk_buff *);\n\nstruct nvmem_cell___2;\n\nstruct fch_hdr {\n\t__u8 daddr[6];\n\t__u8 saddr[6];\n};\n\nstruct fcllc {\n\t__u8 dsap;\n\t__u8 ssap;\n\t__u8 llc;\n\t__u8 protid[3];\n\t__be16 ethertype;\n};\n\nenum macvlan_mode {\n\tMACVLAN_MODE_PRIVATE = 1,\n\tMACVLAN_MODE_VEPA = 2,\n\tMACVLAN_MODE_BRIDGE = 4,\n\tMACVLAN_MODE_PASSTHRU = 8,\n\tMACVLAN_MODE_SOURCE = 16,\n};\n\nstruct tc_ratespec {\n\tunsigned char cell_log;\n\t__u8 linklayer;\n\tshort unsigned int overhead;\n\tshort int cell_align;\n\tshort unsigned int mpu;\n\t__u32 rate;\n};\n\nstruct tc_prio_qopt {\n\tint bands;\n\t__u8 priomap[16];\n};\n\nenum {\n\tTCA_UNSPEC = 0,\n\tTCA_KIND = 1,\n\tTCA_OPTIONS = 2,\n\tTCA_STATS = 3,\n\tTCA_XSTATS = 4,\n\tTCA_RATE = 5,\n\tTCA_FCNT = 6,\n\tTCA_STATS2 = 7,\n\tTCA_STAB = 8,\n\tTCA_PAD = 9,\n\tTCA_DUMP_INVISIBLE = 10,\n\tTCA_CHAIN = 11,\n\tTCA_HW_OFFLOAD = 12,\n\tTCA_INGRESS_BLOCK = 13,\n\tTCA_EGRESS_BLOCK = 14,\n\tTCA_DUMP_FLAGS = 15,\n\t__TCA_MAX = 16,\n};\n\nstruct vlan_pcpu_stats {\n\tu64 rx_packets;\n\tu64 rx_bytes;\n\tu64 rx_multicast;\n\tu64 tx_packets;\n\tu64 tx_bytes;\n\tstruct u64_stats_sync syncp;\n\tu32 rx_errors;\n\tu32 tx_dropped;\n};\n\nstruct netpoll___2;\n\nstruct skb_array {\n\tstruct ptr_ring ring;\n};\n\nstruct macvlan_port;\n\nstruct macvlan_dev {\n\tstruct net_device *dev;\n\tstruct list_head list;\n\tstruct hlist_node hlist;\n\tstruct macvlan_port *port;\n\tstruct net_device *lowerdev;\n\tvoid *accel_priv;\n\tstruct vlan_pcpu_stats *pcpu_stats;\n\tlong unsigned int mc_filter[4];\n\tnetdev_features_t set_features;\n\tenum macvlan_mode mode;\n\tu16 flags;\n\tunsigned int macaddr_count;\n\tu32 bc_queue_len_req;\n\tstruct netpoll___2 *netpoll;\n};\n\nstruct psched_ratecfg {\n\tu64 rate_bytes_ps;\n\tu32 mult;\n\tu16 overhead;\n\tu8 linklayer;\n\tu8 shift;\n};\n\nstruct mini_Qdisc_pair {\n\tstruct mini_Qdisc miniq1;\n\tstruct mini_Qdisc miniq2;\n\tstruct mini_Qdisc **p_miniq;\n};\n\nstruct pfifo_fast_priv {\n\tstruct skb_array q[3];\n};\n\nstruct tc_qopt_offload_stats {\n\tstruct gnet_stats_basic_packed *bstats;\n\tstruct gnet_stats_queue *qstats;\n};\n\nenum tc_mq_command {\n\tTC_MQ_CREATE = 0,\n\tTC_MQ_DESTROY = 1,\n\tTC_MQ_STATS = 2,\n\tTC_MQ_GRAFT = 3,\n};\n\nstruct tc_mq_opt_offload_graft_params {\n\tlong unsigned int queue;\n\tu32 child_handle;\n};\n\nstruct tc_mq_qopt_offload {\n\tenum tc_mq_command command;\n\tu32 handle;\n\tunion {\n\t\tstruct tc_qopt_offload_stats stats;\n\t\tstruct tc_mq_opt_offload_graft_params graft_params;\n\t};\n};\n\nstruct mq_sched {\n\tstruct Qdisc **qdiscs;\n};\n\nstruct sch_frag_data {\n\tlong unsigned int dst;\n\tstruct qdisc_skb_cb cb;\n\t__be16 inner_protocol;\n\tu16 vlan_tci;\n\t__be16 vlan_proto;\n\tunsigned int l2_len;\n\tu8 l2_data[18];\n\tint (*xmit)(struct sk_buff *);\n};\n\nenum tc_link_layer {\n\tTC_LINKLAYER_UNAWARE = 0,\n\tTC_LINKLAYER_ETHERNET = 1,\n\tTC_LINKLAYER_ATM = 2,\n};\n\nenum {\n\tTCA_STAB_UNSPEC = 0,\n\tTCA_STAB_BASE = 1,\n\tTCA_STAB_DATA = 2,\n\t__TCA_STAB_MAX = 3,\n};\n\nstruct qdisc_rate_table {\n\tstruct tc_ratespec rate;\n\tu32 data[256];\n\tstruct qdisc_rate_table *next;\n\tint refcnt;\n};\n\nstruct Qdisc_class_common {\n\tu32 classid;\n\tstruct hlist_node hnode;\n};\n\nstruct Qdisc_class_hash {\n\tstruct hlist_head *hash;\n\tunsigned int hashsize;\n\tunsigned int hashmask;\n\tunsigned int hashelems;\n};\n\nstruct qdisc_watchdog {\n\tu64 last_expires;\n\tstruct hrtimer timer;\n\tstruct Qdisc *qdisc;\n};\n\nenum tc_root_command {\n\tTC_ROOT_GRAFT = 0,\n};\n\nstruct tc_root_qopt_offload {\n\tenum tc_root_command command;\n\tu32 handle;\n\tbool ingress;\n};\n\nstruct check_loop_arg {\n\tstruct qdisc_walker w;\n\tstruct Qdisc *p;\n\tint depth;\n};\n\nstruct tcf_bind_args {\n\tstruct tcf_walker w;\n\tlong unsigned int base;\n\tlong unsigned int cl;\n\tu32 classid;\n};\n\nstruct tc_bind_class_args {\n\tstruct qdisc_walker w;\n\tlong unsigned int new_cl;\n\tu32 portid;\n\tu32 clid;\n};\n\nstruct qdisc_dump_args {\n\tstruct qdisc_walker w;\n\tstruct sk_buff *skb;\n\tstruct netlink_callback *cb;\n};\n\nenum net_xmit_qdisc_t {\n\t__NET_XMIT_STOLEN = 65536,\n\t__NET_XMIT_BYPASS = 131072,\n};\n\nstruct tc_skb_ext {\n\t__u32 chain;\n\t__u16 mru;\n};\n\nenum {\n\tTCA_ACT_UNSPEC = 0,\n\tTCA_ACT_KIND = 1,\n\tTCA_ACT_OPTIONS = 2,\n\tTCA_ACT_INDEX = 3,\n\tTCA_ACT_STATS = 4,\n\tTCA_ACT_PAD = 5,\n\tTCA_ACT_COOKIE = 6,\n\tTCA_ACT_FLAGS = 7,\n\tTCA_ACT_HW_STATS = 8,\n\tTCA_ACT_USED_HW_STATS = 9,\n\t__TCA_ACT_MAX = 10,\n};\n\nenum tca_id {\n\tTCA_ID_UNSPEC = 0,\n\tTCA_ID_POLICE = 1,\n\tTCA_ID_GACT = 5,\n\tTCA_ID_IPT = 6,\n\tTCA_ID_PEDIT = 7,\n\tTCA_ID_MIRRED = 8,\n\tTCA_ID_NAT = 9,\n\tTCA_ID_XT = 10,\n\tTCA_ID_SKBEDIT = 11,\n\tTCA_ID_VLAN = 12,\n\tTCA_ID_BPF = 13,\n\tTCA_ID_CONNMARK = 14,\n\tTCA_ID_SKBMOD = 15,\n\tTCA_ID_CSUM = 16,\n\tTCA_ID_TUNNEL_KEY = 17,\n\tTCA_ID_SIMP = 22,\n\tTCA_ID_IFE = 25,\n\tTCA_ID_SAMPLE = 26,\n\tTCA_ID_CTINFO = 27,\n\tTCA_ID_MPLS = 28,\n\tTCA_ID_CT = 29,\n\tTCA_ID_GATE = 30,\n\t__TCA_ID_MAX = 255,\n};\n\nstruct tcf_t {\n\t__u64 install;\n\t__u64 lastuse;\n\t__u64 expires;\n\t__u64 firstuse;\n};\n\nstruct psample_group {\n\tstruct list_head list;\n\tstruct net *net;\n\tu32 group_num;\n\tu32 refcount;\n\tu32 seq;\n\tstruct callback_head rcu;\n};\n\nstruct action_gate_entry {\n\tu8 gate_state;\n\tu32 interval;\n\ts32 ipv;\n\ts32 maxoctets;\n};\n\nenum qdisc_class_ops_flags {\n\tQDISC_CLASS_OPS_DOIT_UNLOCKED = 1,\n};\n\nenum tcf_proto_ops_flags {\n\tTCF_PROTO_OPS_DOIT_UNLOCKED = 1,\n};\n\ntypedef void tcf_chain_head_change_t(struct tcf_proto *, void *);\n\nstruct tcf_idrinfo {\n\tstruct mutex lock;\n\tstruct idr action_idr;\n\tstruct net *net;\n};\n\nstruct tc_action_ops;\n\nstruct tc_cookie;\n\nstruct tc_action {\n\tconst struct tc_action_ops *ops;\n\t__u32 type;\n\tstruct tcf_idrinfo *idrinfo;\n\tu32 tcfa_index;\n\trefcount_t tcfa_refcnt;\n\tatomic_t tcfa_bindcnt;\n\tint tcfa_action;\n\tstruct tcf_t tcfa_tm;\n\tstruct gnet_stats_basic_packed tcfa_bstats;\n\tstruct gnet_stats_basic_packed tcfa_bstats_hw;\n\tstruct gnet_stats_queue tcfa_qstats;\n\tstruct net_rate_estimator *tcfa_rate_est;\n\tspinlock_t tcfa_lock;\n\tstruct gnet_stats_basic_cpu *cpu_bstats;\n\tstruct gnet_stats_basic_cpu *cpu_bstats_hw;\n\tstruct gnet_stats_queue *cpu_qstats;\n\tstruct tc_cookie *act_cookie;\n\tstruct tcf_chain *goto_chain;\n\tu32 tcfa_flags;\n\tu8 hw_stats;\n\tu8 used_hw_stats;\n\tbool used_hw_stats_valid;\n};\n\ntypedef void (*tc_action_priv_destructor)(void *);\n\nstruct tc_action_ops {\n\tstruct list_head head;\n\tchar kind[16];\n\tenum tca_id id;\n\tsize_t size;\n\tstruct module *owner;\n\tint (*act)(struct sk_buff *, const struct tc_action *, struct tcf_result *);\n\tint (*dump)(struct sk_buff *, struct tc_action *, int, int);\n\tvoid (*cleanup)(struct tc_action *);\n\tint (*lookup)(struct net *, struct tc_action **, u32);\n\tint (*init)(struct net *, struct nlattr *, struct nlattr *, struct tc_action **, int, int, bool, struct tcf_proto *, u32, struct netlink_ext_ack *);\n\tint (*walk)(struct net *, struct sk_buff *, struct netlink_callback *, int, const struct tc_action_ops *, struct netlink_ext_ack *);\n\tvoid (*stats_update)(struct tc_action *, u64, u64, u64, u64, bool);\n\tsize_t (*get_fill_size)(const struct tc_action *);\n\tstruct net_device * (*get_dev)(const struct tc_action *, tc_action_priv_destructor *);\n\tstruct psample_group * (*get_psample_group)(const struct tc_action *, tc_action_priv_destructor *);\n};\n\nstruct tc_cookie {\n\tu8 *data;\n\tu32 len;\n\tstruct callback_head rcu;\n};\n\nstruct tcf_block_ext_info {\n\tenum flow_block_binder_type binder_type;\n\ttcf_chain_head_change_t *chain_head_change;\n\tvoid *chain_head_change_priv;\n\tu32 block_index;\n};\n\nstruct tcf_qevent {\n\tstruct tcf_block *block;\n\tstruct tcf_block_ext_info info;\n\tstruct tcf_proto *filter_chain;\n};\n\nstruct tcf_exts {\n\t__u32 type;\n\tint nr_actions;\n\tstruct tc_action **actions;\n\tstruct net *net;\n\tint action;\n\tint police;\n};\n\nenum pedit_header_type {\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_NETWORK = 0,\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_ETH = 1,\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_IP4 = 2,\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_IP6 = 3,\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_TCP = 4,\n\tTCA_PEDIT_KEY_EX_HDR_TYPE_UDP = 5,\n\t__PEDIT_HDR_TYPE_MAX = 6,\n};\n\nenum pedit_cmd {\n\tTCA_PEDIT_KEY_EX_CMD_SET = 0,\n\tTCA_PEDIT_KEY_EX_CMD_ADD = 1,\n\t__PEDIT_CMD_MAX = 2,\n};\n\nstruct tc_pedit_key {\n\t__u32 mask;\n\t__u32 val;\n\t__u32 off;\n\t__u32 at;\n\t__u32 offmask;\n\t__u32 shift;\n};\n\nstruct tcf_pedit_key_ex {\n\tenum pedit_header_type htype;\n\tenum pedit_cmd cmd;\n};\n\nstruct tcf_pedit {\n\tstruct tc_action common;\n\tunsigned char tcfp_nkeys;\n\tunsigned char tcfp_flags;\n\tstruct tc_pedit_key *tcfp_keys;\n\tstruct tcf_pedit_key_ex *tcfp_keys_ex;\n};\n\nstruct tcf_mirred {\n\tstruct tc_action common;\n\tint tcfm_eaction;\n\tbool tcfm_mac_header_xmit;\n\tstruct net_device *tcfm_dev;\n\tstruct list_head tcfm_list;\n};\n\nstruct tcf_vlan_params {\n\tint tcfv_action;\n\tunsigned char tcfv_push_dst[6];\n\tunsigned char tcfv_push_src[6];\n\tu16 tcfv_push_vid;\n\t__be16 tcfv_push_proto;\n\tu8 tcfv_push_prio;\n\tstruct callback_head rcu;\n};\n\nstruct tcf_vlan {\n\tstruct tc_action common;\n\tstruct tcf_vlan_params *vlan_p;\n};\n\nstruct tcf_tunnel_key_params {\n\tstruct callback_head rcu;\n\tint tcft_action;\n\tstruct metadata_dst *tcft_enc_metadata;\n};\n\nstruct tcf_tunnel_key {\n\tstruct tc_action common;\n\tstruct tcf_tunnel_key_params *params;\n};\n\nstruct tcf_csum_params {\n\tu32 update_flags;\n\tstruct callback_head rcu;\n};\n\nstruct tcf_csum {\n\tstruct tc_action common;\n\tstruct tcf_csum_params *params;\n};\n\nstruct tcf_gact {\n\tstruct tc_action common;\n\tu16 tcfg_ptype;\n\tu16 tcfg_pval;\n\tint tcfg_paction;\n\tatomic_t packets;\n};\n\nstruct tcf_police_params {\n\tint tcfp_result;\n\tu32 tcfp_ewma_rate;\n\ts64 tcfp_burst;\n\tu32 tcfp_mtu;\n\ts64 tcfp_mtu_ptoks;\n\tstruct psched_ratecfg rate;\n\tbool rate_present;\n\tstruct psched_ratecfg peak;\n\tbool peak_present;\n\tstruct callback_head rcu;\n};\n\nstruct tcf_police {\n\tstruct tc_action common;\n\tstruct tcf_police_params *params;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tspinlock_t tcfp_lock;\n\ts64 tcfp_toks;\n\ts64 tcfp_ptoks;\n\ts64 tcfp_t_c;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct tcf_sample {\n\tstruct tc_action common;\n\tu32 rate;\n\tbool truncate;\n\tu32 trunc_size;\n\tstruct psample_group *psample_group;\n\tu32 psample_group_num;\n\tstruct list_head tcfm_list;\n};\n\nstruct tcf_skbedit_params {\n\tu32 flags;\n\tu32 priority;\n\tu32 mark;\n\tu32 mask;\n\tu16 queue_mapping;\n\tu16 ptype;\n\tstruct callback_head rcu;\n};\n\nstruct tcf_skbedit {\n\tstruct tc_action common;\n\tstruct tcf_skbedit_params *params;\n};\n\nstruct nf_nat_range2 {\n\tunsigned int flags;\n\tunion nf_inet_addr min_addr;\n\tunion nf_inet_addr max_addr;\n\tunion nf_conntrack_man_proto min_proto;\n\tunion nf_conntrack_man_proto max_proto;\n\tunion nf_conntrack_man_proto base_proto;\n};\n\nstruct tcf_ct_flow_table;\n\nstruct tcf_ct_params {\n\tstruct nf_conn *tmpl;\n\tu16 zone;\n\tu32 mark;\n\tu32 mark_mask;\n\tu32 labels[4];\n\tu32 labels_mask[4];\n\tstruct nf_nat_range2 range;\n\tbool ipv4_range;\n\tu16 ct_action;\n\tstruct callback_head rcu;\n\tstruct tcf_ct_flow_table *ct_ft;\n\tstruct nf_flowtable *nf_ft;\n};\n\nstruct tcf_ct {\n\tstruct tc_action common;\n\tstruct tcf_ct_params *params;\n};\n\nstruct tcf_mpls_params {\n\tint tcfm_action;\n\tu32 tcfm_label;\n\tu8 tcfm_tc;\n\tu8 tcfm_ttl;\n\tu8 tcfm_bos;\n\t__be16 tcfm_proto;\n\tstruct callback_head rcu;\n};\n\nstruct tcf_mpls {\n\tstruct tc_action common;\n\tstruct tcf_mpls_params *mpls_p;\n};\n\nstruct tcfg_gate_entry {\n\tint index;\n\tu8 gate_state;\n\tu32 interval;\n\ts32 ipv;\n\ts32 maxoctets;\n\tstruct list_head list;\n};\n\nstruct tcf_gate_params {\n\ts32 tcfg_priority;\n\tu64 tcfg_basetime;\n\tu64 tcfg_cycletime;\n\tu64 tcfg_cycletime_ext;\n\tu32 tcfg_flags;\n\ts32 tcfg_clockid;\n\tsize_t num_entries;\n\tstruct list_head entries;\n};\n\nstruct tcf_gate {\n\tstruct tc_action common;\n\tstruct tcf_gate_params param;\n\tu8 current_gate_status;\n\tktime_t current_close_time;\n\tu32 current_entry_octets;\n\ts32 current_max_octets;\n\tstruct tcfg_gate_entry *next_entry;\n\tstruct hrtimer hitimer;\n\tenum tk_offsets tk_offset;\n};\n\nstruct tcf_filter_chain_list_item {\n\tstruct list_head list;\n\ttcf_chain_head_change_t *chain_head_change;\n\tvoid *chain_head_change_priv;\n};\n\nstruct tcf_net {\n\tspinlock_t idr_lock;\n\tstruct idr idr;\n};\n\nstruct tcf_block_owner_item {\n\tstruct list_head list;\n\tstruct Qdisc *q;\n\tenum flow_block_binder_type binder_type;\n};\n\nstruct tcf_chain_info {\n\tstruct tcf_proto **pprev;\n\tstruct tcf_proto *next;\n};\n\nstruct tcf_dump_args {\n\tstruct tcf_walker w;\n\tstruct sk_buff *skb;\n\tstruct netlink_callback *cb;\n\tstruct tcf_block *block;\n\tstruct Qdisc *q;\n\tu32 parent;\n\tbool terse_dump;\n};\n\nstruct tcamsg {\n\tunsigned char tca_family;\n\tunsigned char tca__pad1;\n\tshort unsigned int tca__pad2;\n};\n\nenum {\n\tTCA_ROOT_UNSPEC = 0,\n\tTCA_ROOT_TAB = 1,\n\tTCA_ROOT_FLAGS = 2,\n\tTCA_ROOT_COUNT = 3,\n\tTCA_ROOT_TIME_DELTA = 4,\n\t__TCA_ROOT_MAX = 5,\n};\n\nstruct tc_action_net {\n\tstruct tcf_idrinfo *idrinfo;\n\tconst struct tc_action_ops *ops;\n};\n\nstruct tc_fifo_qopt {\n\t__u32 limit;\n};\n\nenum tc_fifo_command {\n\tTC_FIFO_REPLACE = 0,\n\tTC_FIFO_DESTROY = 1,\n\tTC_FIFO_STATS = 2,\n};\n\nstruct tc_fifo_qopt_offload {\n\tenum tc_fifo_command command;\n\tu32 handle;\n\tu32 parent;\n\tunion {\n\t\tstruct tc_qopt_offload_stats stats;\n\t};\n};\n\nenum {\n\tTCA_FQ_CODEL_UNSPEC = 0,\n\tTCA_FQ_CODEL_TARGET = 1,\n\tTCA_FQ_CODEL_LIMIT = 2,\n\tTCA_FQ_CODEL_INTERVAL = 3,\n\tTCA_FQ_CODEL_ECN = 4,\n\tTCA_FQ_CODEL_FLOWS = 5,\n\tTCA_FQ_CODEL_QUANTUM = 6,\n\tTCA_FQ_CODEL_CE_THRESHOLD = 7,\n\tTCA_FQ_CODEL_DROP_BATCH_SIZE = 8,\n\tTCA_FQ_CODEL_MEMORY_LIMIT = 9,\n\t__TCA_FQ_CODEL_MAX = 10,\n};\n\nenum {\n\tTCA_FQ_CODEL_XSTATS_QDISC = 0,\n\tTCA_FQ_CODEL_XSTATS_CLASS = 1,\n};\n\nstruct tc_fq_codel_qd_stats {\n\t__u32 maxpacket;\n\t__u32 drop_overlimit;\n\t__u32 ecn_mark;\n\t__u32 new_flow_count;\n\t__u32 new_flows_len;\n\t__u32 old_flows_len;\n\t__u32 ce_mark;\n\t__u32 memory_usage;\n\t__u32 drop_overmemory;\n};\n\nstruct tc_fq_codel_cl_stats {\n\t__s32 deficit;\n\t__u32 ldelay;\n\t__u32 count;\n\t__u32 lastcount;\n\t__u32 dropping;\n\t__s32 drop_next;\n};\n\nstruct tc_fq_codel_xstats {\n\t__u32 type;\n\tunion {\n\t\tstruct tc_fq_codel_qd_stats qdisc_stats;\n\t\tstruct tc_fq_codel_cl_stats class_stats;\n\t};\n};\n\ntypedef u32 codel_time_t;\n\ntypedef s32 codel_tdiff_t;\n\nstruct codel_params {\n\tcodel_time_t target;\n\tcodel_time_t ce_threshold;\n\tcodel_time_t interval;\n\tu32 mtu;\n\tbool ecn;\n};\n\nstruct codel_vars {\n\tu32 count;\n\tu32 lastcount;\n\tbool dropping;\n\tu16 rec_inv_sqrt;\n\tcodel_time_t first_above_time;\n\tcodel_time_t drop_next;\n\tcodel_time_t ldelay;\n};\n\nstruct codel_stats {\n\tu32 maxpacket;\n\tu32 drop_count;\n\tu32 drop_len;\n\tu32 ecn_mark;\n\tu32 ce_mark;\n};\n\ntypedef u32 (*codel_skb_len_t)(const struct sk_buff *);\n\ntypedef codel_time_t (*codel_skb_time_t)(const struct sk_buff *);\n\ntypedef void (*codel_skb_drop_t)(struct sk_buff *, void *);\n\ntypedef struct sk_buff * (*codel_skb_dequeue_t)(struct codel_vars *, void *);\n\nstruct codel_skb_cb {\n\tcodel_time_t enqueue_time;\n\tunsigned int mem_usage;\n};\n\nstruct fq_codel_flow {\n\tstruct sk_buff *head;\n\tstruct sk_buff *tail;\n\tstruct list_head flowchain;\n\tint deficit;\n\tstruct codel_vars cvars;\n};\n\nstruct fq_codel_sched_data {\n\tstruct tcf_proto *filter_list;\n\tstruct tcf_block *block;\n\tstruct fq_codel_flow *flows;\n\tu32 *backlogs;\n\tu32 flows_cnt;\n\tu32 quantum;\n\tu32 drop_batch_size;\n\tu32 memory_limit;\n\tstruct codel_params cparams;\n\tstruct codel_stats cstats;\n\tu32 memory_usage;\n\tu32 drop_overmemory;\n\tu32 drop_overlimit;\n\tu32 new_flow_count;\n\tstruct list_head new_flows;\n\tstruct list_head old_flows;\n};\n\nenum {\n\tTCA_CGROUP_UNSPEC = 0,\n\tTCA_CGROUP_ACT = 1,\n\tTCA_CGROUP_POLICE = 2,\n\tTCA_CGROUP_EMATCHES = 3,\n\t__TCA_CGROUP_MAX = 4,\n};\n\nstruct tcf_ematch_tree_hdr {\n\t__u16 nmatches;\n\t__u16 progid;\n};\n\nstruct tcf_pkt_info {\n\tunsigned char *ptr;\n\tint nexthdr;\n};\n\nstruct tcf_ematch_ops;\n\nstruct tcf_ematch {\n\tstruct tcf_ematch_ops *ops;\n\tlong unsigned int data;\n\tunsigned int datalen;\n\tu16 matchid;\n\tu16 flags;\n\tstruct net *net;\n};\n\nstruct tcf_ematch_ops {\n\tint kind;\n\tint datalen;\n\tint (*change)(struct net *, void *, int, struct tcf_ematch *);\n\tint (*match)(struct sk_buff *, struct tcf_ematch *, struct tcf_pkt_info *);\n\tvoid (*destroy)(struct tcf_ematch *);\n\tint (*dump)(struct sk_buff *, struct tcf_ematch *);\n\tstruct module *owner;\n\tstruct list_head link;\n};\n\nstruct tcf_ematch_tree {\n\tstruct tcf_ematch_tree_hdr hdr;\n\tstruct tcf_ematch *matches;\n};\n\nstruct cls_cgroup_head {\n\tu32 handle;\n\tstruct tcf_exts exts;\n\tstruct tcf_ematch_tree ematches;\n\tstruct tcf_proto *tp;\n\tstruct rcu_work rwork;\n};\n\nenum {\n\tTCA_EMATCH_TREE_UNSPEC = 0,\n\tTCA_EMATCH_TREE_HDR = 1,\n\tTCA_EMATCH_TREE_LIST = 2,\n\t__TCA_EMATCH_TREE_MAX = 3,\n};\n\nstruct tcf_ematch_hdr {\n\t__u16 matchid;\n\t__u16 kind;\n\t__u16 flags;\n\t__u16 pad;\n};\n\nstruct sockaddr_nl {\n\t__kernel_sa_family_t nl_family;\n\tshort unsigned int nl_pad;\n\t__u32 nl_pid;\n\t__u32 nl_groups;\n};\n\nstruct nlmsgerr {\n\tint error;\n\tstruct nlmsghdr msg;\n};\n\nenum nlmsgerr_attrs {\n\tNLMSGERR_ATTR_UNUSED = 0,\n\tNLMSGERR_ATTR_MSG = 1,\n\tNLMSGERR_ATTR_OFFS = 2,\n\tNLMSGERR_ATTR_COOKIE = 3,\n\tNLMSGERR_ATTR_POLICY = 4,\n\t__NLMSGERR_ATTR_MAX = 5,\n\tNLMSGERR_ATTR_MAX = 4,\n};\n\nstruct nl_pktinfo {\n\t__u32 group;\n};\n\nenum {\n\tNETLINK_UNCONNECTED = 0,\n\tNETLINK_CONNECTED = 1,\n};\n\nenum netlink_skb_flags {\n\tNETLINK_SKB_DST = 8,\n};\n\nstruct netlink_notify {\n\tstruct net *net;\n\tu32 portid;\n\tint protocol;\n};\n\nstruct netlink_tap {\n\tstruct net_device *dev;\n\tstruct module *module;\n\tstruct list_head list;\n};\n\nstruct netlink_sock {\n\tstruct sock sk;\n\tu32 portid;\n\tu32 dst_portid;\n\tu32 dst_group;\n\tu32 flags;\n\tu32 subscriptions;\n\tu32 ngroups;\n\tlong unsigned int *groups;\n\tlong unsigned int state;\n\tsize_t max_recvmsg_len;\n\twait_queue_head_t wait;\n\tbool bound;\n\tbool cb_running;\n\tint dump_done_errno;\n\tstruct netlink_callback cb;\n\tstruct mutex *cb_mutex;\n\tstruct mutex cb_def_mutex;\n\tvoid (*netlink_rcv)(struct sk_buff *);\n\tint (*netlink_bind)(struct net *, int);\n\tvoid (*netlink_unbind)(struct net *, int);\n\tstruct module *module;\n\tstruct rhash_head node;\n\tstruct callback_head rcu;\n\tstruct work_struct work;\n};\n\nstruct listeners;\n\nstruct netlink_table {\n\tstruct rhashtable hash;\n\tstruct hlist_head mc_list;\n\tstruct listeners *listeners;\n\tunsigned int flags;\n\tunsigned int groups;\n\tstruct mutex *cb_mutex;\n\tstruct module *module;\n\tint (*bind)(struct net *, int);\n\tvoid (*unbind)(struct net *, int);\n\tbool (*compare)(struct net *, struct sock *);\n\tint registered;\n};\n\nstruct listeners {\n\tstruct callback_head rcu;\n\tlong unsigned int masks[0];\n};\n\nstruct netlink_tap_net {\n\tstruct list_head netlink_tap_all;\n\tstruct mutex netlink_tap_lock;\n};\n\nstruct netlink_compare_arg {\n\tpossible_net_t pnet;\n\tu32 portid;\n};\n\nstruct netlink_broadcast_data {\n\tstruct sock *exclude_sk;\n\tstruct net *net;\n\tu32 portid;\n\tu32 group;\n\tint failure;\n\tint delivery_failure;\n\tint congested;\n\tint delivered;\n\tgfp_t allocation;\n\tstruct sk_buff *skb;\n\tstruct sk_buff *skb2;\n\tint (*tx_filter)(struct sock *, struct sk_buff *, void *);\n\tvoid *tx_data;\n};\n\nstruct netlink_set_err_data {\n\tstruct sock *exclude_sk;\n\tu32 portid;\n\tu32 group;\n\tint code;\n};\n\nstruct nl_seq_iter {\n\tstruct seq_net_private p;\n\tstruct rhashtable_iter hti;\n\tint link;\n};\n\nstruct bpf_iter__netlink {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct netlink_sock *sk;\n\t};\n};\n\nenum {\n\tCTRL_CMD_UNSPEC = 0,\n\tCTRL_CMD_NEWFAMILY = 1,\n\tCTRL_CMD_DELFAMILY = 2,\n\tCTRL_CMD_GETFAMILY = 3,\n\tCTRL_CMD_NEWOPS = 4,\n\tCTRL_CMD_DELOPS = 5,\n\tCTRL_CMD_GETOPS = 6,\n\tCTRL_CMD_NEWMCAST_GRP = 7,\n\tCTRL_CMD_DELMCAST_GRP = 8,\n\tCTRL_CMD_GETMCAST_GRP = 9,\n\tCTRL_CMD_GETPOLICY = 10,\n\t__CTRL_CMD_MAX = 11,\n};\n\nenum {\n\tCTRL_ATTR_UNSPEC = 0,\n\tCTRL_ATTR_FAMILY_ID = 1,\n\tCTRL_ATTR_FAMILY_NAME = 2,\n\tCTRL_ATTR_VERSION = 3,\n\tCTRL_ATTR_HDRSIZE = 4,\n\tCTRL_ATTR_MAXATTR = 5,\n\tCTRL_ATTR_OPS = 6,\n\tCTRL_ATTR_MCAST_GROUPS = 7,\n\tCTRL_ATTR_POLICY = 8,\n\tCTRL_ATTR_OP_POLICY = 9,\n\tCTRL_ATTR_OP = 10,\n\t__CTRL_ATTR_MAX = 11,\n};\n\nenum {\n\tCTRL_ATTR_OP_UNSPEC = 0,\n\tCTRL_ATTR_OP_ID = 1,\n\tCTRL_ATTR_OP_FLAGS = 2,\n\t__CTRL_ATTR_OP_MAX = 3,\n};\n\nenum {\n\tCTRL_ATTR_MCAST_GRP_UNSPEC = 0,\n\tCTRL_ATTR_MCAST_GRP_NAME = 1,\n\tCTRL_ATTR_MCAST_GRP_ID = 2,\n\t__CTRL_ATTR_MCAST_GRP_MAX = 3,\n};\n\nenum {\n\tCTRL_ATTR_POLICY_UNSPEC = 0,\n\tCTRL_ATTR_POLICY_DO = 1,\n\tCTRL_ATTR_POLICY_DUMP = 2,\n\t__CTRL_ATTR_POLICY_DUMP_MAX = 3,\n\tCTRL_ATTR_POLICY_DUMP_MAX = 2,\n};\n\nstruct genl_start_context {\n\tconst struct genl_family *family;\n\tstruct nlmsghdr *nlh;\n\tstruct netlink_ext_ack *extack;\n\tconst struct genl_ops *ops;\n\tint hdrlen;\n};\n\nstruct netlink_policy_dump_state;\n\nstruct ctrl_dump_policy_ctx {\n\tstruct netlink_policy_dump_state *state;\n\tconst struct genl_family *rt;\n\tunsigned int opidx;\n\tu32 op;\n\tu16 fam_id;\n\tu8 policies: 1;\n\tu8 single_op: 1;\n};\n\nenum netlink_attribute_type {\n\tNL_ATTR_TYPE_INVALID = 0,\n\tNL_ATTR_TYPE_FLAG = 1,\n\tNL_ATTR_TYPE_U8 = 2,\n\tNL_ATTR_TYPE_U16 = 3,\n\tNL_ATTR_TYPE_U32 = 4,\n\tNL_ATTR_TYPE_U64 = 5,\n\tNL_ATTR_TYPE_S8 = 6,\n\tNL_ATTR_TYPE_S16 = 7,\n\tNL_ATTR_TYPE_S32 = 8,\n\tNL_ATTR_TYPE_S64 = 9,\n\tNL_ATTR_TYPE_BINARY = 10,\n\tNL_ATTR_TYPE_STRING = 11,\n\tNL_ATTR_TYPE_NUL_STRING = 12,\n\tNL_ATTR_TYPE_NESTED = 13,\n\tNL_ATTR_TYPE_NESTED_ARRAY = 14,\n\tNL_ATTR_TYPE_BITFIELD32 = 15,\n};\n\nenum netlink_policy_type_attr {\n\tNL_POLICY_TYPE_ATTR_UNSPEC = 0,\n\tNL_POLICY_TYPE_ATTR_TYPE = 1,\n\tNL_POLICY_TYPE_ATTR_MIN_VALUE_S = 2,\n\tNL_POLICY_TYPE_ATTR_MAX_VALUE_S = 3,\n\tNL_POLICY_TYPE_ATTR_MIN_VALUE_U = 4,\n\tNL_POLICY_TYPE_ATTR_MAX_VALUE_U = 5,\n\tNL_POLICY_TYPE_ATTR_MIN_LENGTH = 6,\n\tNL_POLICY_TYPE_ATTR_MAX_LENGTH = 7,\n\tNL_POLICY_TYPE_ATTR_POLICY_IDX = 8,\n\tNL_POLICY_TYPE_ATTR_POLICY_MAXTYPE = 9,\n\tNL_POLICY_TYPE_ATTR_BITFIELD32_MASK = 10,\n\tNL_POLICY_TYPE_ATTR_PAD = 11,\n\tNL_POLICY_TYPE_ATTR_MASK = 12,\n\t__NL_POLICY_TYPE_ATTR_MAX = 13,\n\tNL_POLICY_TYPE_ATTR_MAX = 12,\n};\n\nstruct netlink_policy_dump_state___2 {\n\tunsigned int policy_idx;\n\tunsigned int attr_idx;\n\tunsigned int n_alloc;\n\tstruct {\n\t\tconst struct nla_policy *policy;\n\t\tunsigned int maxtype;\n\t} policies[0];\n};\n\nstruct trace_event_raw_bpf_test_finish {\n\tstruct trace_entry ent;\n\tint err;\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_bpf_test_finish {};\n\ntypedef void (*btf_trace_bpf_test_finish)(void *, int *);\n\nstruct bpf_fentry_test_t {\n\tstruct bpf_fentry_test_t *a;\n};\n\nstruct bpf_raw_tp_test_run_info {\n\tstruct bpf_prog *prog;\n\tvoid *ctx;\n\tu32 retval;\n};\n\nstruct ethtool_cmd {\n\t__u32 cmd;\n\t__u32 supported;\n\t__u32 advertising;\n\t__u16 speed;\n\t__u8 duplex;\n\t__u8 port;\n\t__u8 phy_address;\n\t__u8 transceiver;\n\t__u8 autoneg;\n\t__u8 mdio_support;\n\t__u32 maxtxpkt;\n\t__u32 maxrxpkt;\n\t__u16 speed_hi;\n\t__u8 eth_tp_mdix;\n\t__u8 eth_tp_mdix_ctrl;\n\t__u32 lp_advertising;\n\t__u32 reserved[2];\n};\n\nstruct ethtool_value {\n\t__u32 cmd;\n\t__u32 data;\n};\n\nenum tunable_id {\n\tETHTOOL_ID_UNSPEC = 0,\n\tETHTOOL_RX_COPYBREAK = 1,\n\tETHTOOL_TX_COPYBREAK = 2,\n\tETHTOOL_PFC_PREVENTION_TOUT = 3,\n\t__ETHTOOL_TUNABLE_COUNT = 4,\n};\n\nenum tunable_type_id {\n\tETHTOOL_TUNABLE_UNSPEC = 0,\n\tETHTOOL_TUNABLE_U8 = 1,\n\tETHTOOL_TUNABLE_U16 = 2,\n\tETHTOOL_TUNABLE_U32 = 3,\n\tETHTOOL_TUNABLE_U64 = 4,\n\tETHTOOL_TUNABLE_STRING = 5,\n\tETHTOOL_TUNABLE_S8 = 6,\n\tETHTOOL_TUNABLE_S16 = 7,\n\tETHTOOL_TUNABLE_S32 = 8,\n\tETHTOOL_TUNABLE_S64 = 9,\n};\n\nenum phy_tunable_id {\n\tETHTOOL_PHY_ID_UNSPEC = 0,\n\tETHTOOL_PHY_DOWNSHIFT = 1,\n\tETHTOOL_PHY_FAST_LINK_DOWN = 2,\n\tETHTOOL_PHY_EDPD = 3,\n\t__ETHTOOL_PHY_TUNABLE_COUNT = 4,\n};\n\nenum ethtool_stringset {\n\tETH_SS_TEST = 0,\n\tETH_SS_STATS = 1,\n\tETH_SS_PRIV_FLAGS = 2,\n\tETH_SS_NTUPLE_FILTERS = 3,\n\tETH_SS_FEATURES = 4,\n\tETH_SS_RSS_HASH_FUNCS = 5,\n\tETH_SS_TUNABLES = 6,\n\tETH_SS_PHY_STATS = 7,\n\tETH_SS_PHY_TUNABLES = 8,\n\tETH_SS_LINK_MODES = 9,\n\tETH_SS_MSG_CLASSES = 10,\n\tETH_SS_WOL_MODES = 11,\n\tETH_SS_SOF_TIMESTAMPING = 12,\n\tETH_SS_TS_TX_TYPES = 13,\n\tETH_SS_TS_RX_FILTERS = 14,\n\tETH_SS_UDP_TUNNEL_TYPES = 15,\n\tETH_SS_COUNT = 16,\n};\n\nstruct ethtool_gstrings {\n\t__u32 cmd;\n\t__u32 string_set;\n\t__u32 len;\n\t__u8 data[0];\n};\n\nstruct ethtool_sset_info {\n\t__u32 cmd;\n\t__u32 reserved;\n\t__u64 sset_mask;\n\t__u32 data[0];\n};\n\nstruct ethtool_perm_addr {\n\t__u32 cmd;\n\t__u32 size;\n\t__u8 data[0];\n};\n\nenum ethtool_flags {\n\tETH_FLAG_TXVLAN = 128,\n\tETH_FLAG_RXVLAN = 256,\n\tETH_FLAG_LRO = 32768,\n\tETH_FLAG_NTUPLE = 134217728,\n\tETH_FLAG_RXHASH = 268435456,\n};\n\nstruct ethtool_rxfh {\n\t__u32 cmd;\n\t__u32 rss_context;\n\t__u32 indir_size;\n\t__u32 key_size;\n\t__u8 hfunc;\n\t__u8 rsvd8[3];\n\t__u32 rsvd32;\n\t__u32 rss_config[0];\n};\n\nstruct ethtool_get_features_block {\n\t__u32 available;\n\t__u32 requested;\n\t__u32 active;\n\t__u32 never_changed;\n};\n\nstruct ethtool_gfeatures {\n\t__u32 cmd;\n\t__u32 size;\n\tstruct ethtool_get_features_block features[0];\n};\n\nstruct ethtool_set_features_block {\n\t__u32 valid;\n\t__u32 requested;\n};\n\nstruct ethtool_sfeatures {\n\t__u32 cmd;\n\t__u32 size;\n\tstruct ethtool_set_features_block features[0];\n};\n\nenum ethtool_sfeatures_retval_bits {\n\tETHTOOL_F_UNSUPPORTED__BIT = 0,\n\tETHTOOL_F_WISH__BIT = 1,\n\tETHTOOL_F_COMPAT__BIT = 2,\n};\n\nstruct ethtool_per_queue_op {\n\t__u32 cmd;\n\t__u32 sub_command;\n\t__u32 queue_mask[128];\n\tchar data[0];\n};\n\nenum {\n\tETH_RSS_HASH_TOP_BIT = 0,\n\tETH_RSS_HASH_XOR_BIT = 1,\n\tETH_RSS_HASH_CRC32_BIT = 2,\n\tETH_RSS_HASH_FUNCS_COUNT = 3,\n};\n\nstruct ethtool_rx_flow_rule {\n\tstruct flow_rule *rule;\n\tlong unsigned int priv[0];\n};\n\nstruct ethtool_rx_flow_spec_input {\n\tconst struct ethtool_rx_flow_spec *fs;\n\tu32 rss_ctx;\n};\n\nstruct ethtool_link_usettings {\n\tstruct ethtool_link_settings base;\n\tstruct {\n\t\t__u32 supported[3];\n\t\t__u32 advertising[3];\n\t\t__u32 lp_advertising[3];\n\t} link_modes;\n};\n\nstruct ethtool_rx_flow_key {\n\tstruct flow_dissector_key_basic basic;\n\tunion {\n\t\tstruct flow_dissector_key_ipv4_addrs ipv4;\n\t\tstruct flow_dissector_key_ipv6_addrs ipv6;\n\t};\n\tstruct flow_dissector_key_ports tp;\n\tstruct flow_dissector_key_ip ip;\n\tstruct flow_dissector_key_vlan vlan;\n\tstruct flow_dissector_key_eth_addrs eth_addrs;\n\tlong: 48;\n};\n\nstruct ethtool_rx_flow_match {\n\tstruct flow_dissector dissector;\n\tint: 32;\n\tstruct ethtool_rx_flow_key key;\n\tstruct ethtool_rx_flow_key mask;\n};\n\nenum {\n\tETHTOOL_UDP_TUNNEL_TYPE_VXLAN = 0,\n\tETHTOOL_UDP_TUNNEL_TYPE_GENEVE = 1,\n\tETHTOOL_UDP_TUNNEL_TYPE_VXLAN_GPE = 2,\n\t__ETHTOOL_UDP_TUNNEL_TYPE_CNT = 3,\n};\n\nenum {\n\tETHTOOL_MSG_USER_NONE = 0,\n\tETHTOOL_MSG_STRSET_GET = 1,\n\tETHTOOL_MSG_LINKINFO_GET = 2,\n\tETHTOOL_MSG_LINKINFO_SET = 3,\n\tETHTOOL_MSG_LINKMODES_GET = 4,\n\tETHTOOL_MSG_LINKMODES_SET = 5,\n\tETHTOOL_MSG_LINKSTATE_GET = 6,\n\tETHTOOL_MSG_DEBUG_GET = 7,\n\tETHTOOL_MSG_DEBUG_SET = 8,\n\tETHTOOL_MSG_WOL_GET = 9,\n\tETHTOOL_MSG_WOL_SET = 10,\n\tETHTOOL_MSG_FEATURES_GET = 11,\n\tETHTOOL_MSG_FEATURES_SET = 12,\n\tETHTOOL_MSG_PRIVFLAGS_GET = 13,\n\tETHTOOL_MSG_PRIVFLAGS_SET = 14,\n\tETHTOOL_MSG_RINGS_GET = 15,\n\tETHTOOL_MSG_RINGS_SET = 16,\n\tETHTOOL_MSG_CHANNELS_GET = 17,\n\tETHTOOL_MSG_CHANNELS_SET = 18,\n\tETHTOOL_MSG_COALESCE_GET = 19,\n\tETHTOOL_MSG_COALESCE_SET = 20,\n\tETHTOOL_MSG_PAUSE_GET = 21,\n\tETHTOOL_MSG_PAUSE_SET = 22,\n\tETHTOOL_MSG_EEE_GET = 23,\n\tETHTOOL_MSG_EEE_SET = 24,\n\tETHTOOL_MSG_TSINFO_GET = 25,\n\tETHTOOL_MSG_CABLE_TEST_ACT = 26,\n\tETHTOOL_MSG_CABLE_TEST_TDR_ACT = 27,\n\tETHTOOL_MSG_TUNNEL_INFO_GET = 28,\n\t__ETHTOOL_MSG_USER_CNT = 29,\n\tETHTOOL_MSG_USER_MAX = 28,\n};\n\nenum {\n\tETHTOOL_A_HEADER_UNSPEC = 0,\n\tETHTOOL_A_HEADER_DEV_INDEX = 1,\n\tETHTOOL_A_HEADER_DEV_NAME = 2,\n\tETHTOOL_A_HEADER_FLAGS = 3,\n\t__ETHTOOL_A_HEADER_CNT = 4,\n\tETHTOOL_A_HEADER_MAX = 3,\n};\n\nenum {\n\tETHTOOL_A_STRSET_UNSPEC = 0,\n\tETHTOOL_A_STRSET_HEADER = 1,\n\tETHTOOL_A_STRSET_STRINGSETS = 2,\n\tETHTOOL_A_STRSET_COUNTS_ONLY = 3,\n\t__ETHTOOL_A_STRSET_CNT = 4,\n\tETHTOOL_A_STRSET_MAX = 3,\n};\n\nenum {\n\tETHTOOL_A_LINKINFO_UNSPEC = 0,\n\tETHTOOL_A_LINKINFO_HEADER = 1,\n\tETHTOOL_A_LINKINFO_PORT = 2,\n\tETHTOOL_A_LINKINFO_PHYADDR = 3,\n\tETHTOOL_A_LINKINFO_TP_MDIX = 4,\n\tETHTOOL_A_LINKINFO_TP_MDIX_CTRL = 5,\n\tETHTOOL_A_LINKINFO_TRANSCEIVER = 6,\n\t__ETHTOOL_A_LINKINFO_CNT = 7,\n\tETHTOOL_A_LINKINFO_MAX = 6,\n};\n\nenum {\n\tETHTOOL_A_LINKMODES_UNSPEC = 0,\n\tETHTOOL_A_LINKMODES_HEADER = 1,\n\tETHTOOL_A_LINKMODES_AUTONEG = 2,\n\tETHTOOL_A_LINKMODES_OURS = 3,\n\tETHTOOL_A_LINKMODES_PEER = 4,\n\tETHTOOL_A_LINKMODES_SPEED = 5,\n\tETHTOOL_A_LINKMODES_DUPLEX = 6,\n\tETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG = 7,\n\tETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE = 8,\n\t__ETHTOOL_A_LINKMODES_CNT = 9,\n\tETHTOOL_A_LINKMODES_MAX = 8,\n};\n\nenum {\n\tETHTOOL_A_LINKSTATE_UNSPEC = 0,\n\tETHTOOL_A_LINKSTATE_HEADER = 1,\n\tETHTOOL_A_LINKSTATE_LINK = 2,\n\tETHTOOL_A_LINKSTATE_SQI = 3,\n\tETHTOOL_A_LINKSTATE_SQI_MAX = 4,\n\tETHTOOL_A_LINKSTATE_EXT_STATE = 5,\n\tETHTOOL_A_LINKSTATE_EXT_SUBSTATE = 6,\n\t__ETHTOOL_A_LINKSTATE_CNT = 7,\n\tETHTOOL_A_LINKSTATE_MAX = 6,\n};\n\nenum {\n\tETHTOOL_A_DEBUG_UNSPEC = 0,\n\tETHTOOL_A_DEBUG_HEADER = 1,\n\tETHTOOL_A_DEBUG_MSGMASK = 2,\n\t__ETHTOOL_A_DEBUG_CNT = 3,\n\tETHTOOL_A_DEBUG_MAX = 2,\n};\n\nenum {\n\tETHTOOL_A_WOL_UNSPEC = 0,\n\tETHTOOL_A_WOL_HEADER = 1,\n\tETHTOOL_A_WOL_MODES = 2,\n\tETHTOOL_A_WOL_SOPASS = 3,\n\t__ETHTOOL_A_WOL_CNT = 4,\n\tETHTOOL_A_WOL_MAX = 3,\n};\n\nenum {\n\tETHTOOL_A_FEATURES_UNSPEC = 0,\n\tETHTOOL_A_FEATURES_HEADER = 1,\n\tETHTOOL_A_FEATURES_HW = 2,\n\tETHTOOL_A_FEATURES_WANTED = 3,\n\tETHTOOL_A_FEATURES_ACTIVE = 4,\n\tETHTOOL_A_FEATURES_NOCHANGE = 5,\n\t__ETHTOOL_A_FEATURES_CNT = 6,\n\tETHTOOL_A_FEATURES_MAX = 5,\n};\n\nenum {\n\tETHTOOL_A_PRIVFLAGS_UNSPEC = 0,\n\tETHTOOL_A_PRIVFLAGS_HEADER = 1,\n\tETHTOOL_A_PRIVFLAGS_FLAGS = 2,\n\t__ETHTOOL_A_PRIVFLAGS_CNT = 3,\n\tETHTOOL_A_PRIVFLAGS_MAX = 2,\n};\n\nenum {\n\tETHTOOL_A_RINGS_UNSPEC = 0,\n\tETHTOOL_A_RINGS_HEADER = 1,\n\tETHTOOL_A_RINGS_RX_MAX = 2,\n\tETHTOOL_A_RINGS_RX_MINI_MAX = 3,\n\tETHTOOL_A_RINGS_RX_JUMBO_MAX = 4,\n\tETHTOOL_A_RINGS_TX_MAX = 5,\n\tETHTOOL_A_RINGS_RX = 6,\n\tETHTOOL_A_RINGS_RX_MINI = 7,\n\tETHTOOL_A_RINGS_RX_JUMBO = 8,\n\tETHTOOL_A_RINGS_TX = 9,\n\t__ETHTOOL_A_RINGS_CNT = 10,\n\tETHTOOL_A_RINGS_MAX = 9,\n};\n\nenum {\n\tETHTOOL_A_CHANNELS_UNSPEC = 0,\n\tETHTOOL_A_CHANNELS_HEADER = 1,\n\tETHTOOL_A_CHANNELS_RX_MAX = 2,\n\tETHTOOL_A_CHANNELS_TX_MAX = 3,\n\tETHTOOL_A_CHANNELS_OTHER_MAX = 4,\n\tETHTOOL_A_CHANNELS_COMBINED_MAX = 5,\n\tETHTOOL_A_CHANNELS_RX_COUNT = 6,\n\tETHTOOL_A_CHANNELS_TX_COUNT = 7,\n\tETHTOOL_A_CHANNELS_OTHER_COUNT = 8,\n\tETHTOOL_A_CHANNELS_COMBINED_COUNT = 9,\n\t__ETHTOOL_A_CHANNELS_CNT = 10,\n\tETHTOOL_A_CHANNELS_MAX = 9,\n};\n\nenum {\n\tETHTOOL_A_COALESCE_UNSPEC = 0,\n\tETHTOOL_A_COALESCE_HEADER = 1,\n\tETHTOOL_A_COALESCE_RX_USECS = 2,\n\tETHTOOL_A_COALESCE_RX_MAX_FRAMES = 3,\n\tETHTOOL_A_COALESCE_RX_USECS_IRQ = 4,\n\tETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ = 5,\n\tETHTOOL_A_COALESCE_TX_USECS = 6,\n\tETHTOOL_A_COALESCE_TX_MAX_FRAMES = 7,\n\tETHTOOL_A_COALESCE_TX_USECS_IRQ = 8,\n\tETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ = 9,\n\tETHTOOL_A_COALESCE_STATS_BLOCK_USECS = 10,\n\tETHTOOL_A_COALESCE_USE_ADAPTIVE_RX = 11,\n\tETHTOOL_A_COALESCE_USE_ADAPTIVE_TX = 12,\n\tETHTOOL_A_COALESCE_PKT_RATE_LOW = 13,\n\tETHTOOL_A_COALESCE_RX_USECS_LOW = 14,\n\tETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW = 15,\n\tETHTOOL_A_COALESCE_TX_USECS_LOW = 16,\n\tETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW = 17,\n\tETHTOOL_A_COALESCE_PKT_RATE_HIGH = 18,\n\tETHTOOL_A_COALESCE_RX_USECS_HIGH = 19,\n\tETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH = 20,\n\tETHTOOL_A_COALESCE_TX_USECS_HIGH = 21,\n\tETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH = 22,\n\tETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 23,\n\t__ETHTOOL_A_COALESCE_CNT = 24,\n\tETHTOOL_A_COALESCE_MAX = 23,\n};\n\nenum {\n\tETHTOOL_A_PAUSE_UNSPEC = 0,\n\tETHTOOL_A_PAUSE_HEADER = 1,\n\tETHTOOL_A_PAUSE_AUTONEG = 2,\n\tETHTOOL_A_PAUSE_RX = 3,\n\tETHTOOL_A_PAUSE_TX = 4,\n\tETHTOOL_A_PAUSE_STATS = 5,\n\t__ETHTOOL_A_PAUSE_CNT = 6,\n\tETHTOOL_A_PAUSE_MAX = 5,\n};\n\nenum {\n\tETHTOOL_A_EEE_UNSPEC = 0,\n\tETHTOOL_A_EEE_HEADER = 1,\n\tETHTOOL_A_EEE_MODES_OURS = 2,\n\tETHTOOL_A_EEE_MODES_PEER = 3,\n\tETHTOOL_A_EEE_ACTIVE = 4,\n\tETHTOOL_A_EEE_ENABLED = 5,\n\tETHTOOL_A_EEE_TX_LPI_ENABLED = 6,\n\tETHTOOL_A_EEE_TX_LPI_TIMER = 7,\n\t__ETHTOOL_A_EEE_CNT = 8,\n\tETHTOOL_A_EEE_MAX = 7,\n};\n\nenum {\n\tETHTOOL_A_TSINFO_UNSPEC = 0,\n\tETHTOOL_A_TSINFO_HEADER = 1,\n\tETHTOOL_A_TSINFO_TIMESTAMPING = 2,\n\tETHTOOL_A_TSINFO_TX_TYPES = 3,\n\tETHTOOL_A_TSINFO_RX_FILTERS = 4,\n\tETHTOOL_A_TSINFO_PHC_INDEX = 5,\n\t__ETHTOOL_A_TSINFO_CNT = 6,\n\tETHTOOL_A_TSINFO_MAX = 5,\n};\n\nenum {\n\tETHTOOL_A_CABLE_TEST_UNSPEC = 0,\n\tETHTOOL_A_CABLE_TEST_HEADER = 1,\n\t__ETHTOOL_A_CABLE_TEST_CNT = 2,\n\tETHTOOL_A_CABLE_TEST_MAX = 1,\n};\n\nenum {\n\tETHTOOL_A_CABLE_TEST_TDR_UNSPEC = 0,\n\tETHTOOL_A_CABLE_TEST_TDR_HEADER = 1,\n\tETHTOOL_A_CABLE_TEST_TDR_CFG = 2,\n\t__ETHTOOL_A_CABLE_TEST_TDR_CNT = 3,\n\tETHTOOL_A_CABLE_TEST_TDR_MAX = 2,\n};\n\nenum {\n\tETHTOOL_A_TUNNEL_INFO_UNSPEC = 0,\n\tETHTOOL_A_TUNNEL_INFO_HEADER = 1,\n\tETHTOOL_A_TUNNEL_INFO_UDP_PORTS = 2,\n\t__ETHTOOL_A_TUNNEL_INFO_CNT = 3,\n\tETHTOOL_A_TUNNEL_INFO_MAX = 2,\n};\n\nenum ethtool_multicast_groups {\n\tETHNL_MCGRP_MONITOR = 0,\n};\n\nstruct ethnl_req_info {\n\tstruct net_device *dev;\n\tu32 flags;\n};\n\nstruct ethnl_reply_data {\n\tstruct net_device *dev;\n};\n\nstruct ethnl_request_ops {\n\tu8 request_cmd;\n\tu8 reply_cmd;\n\tu16 hdr_attr;\n\tunsigned int req_info_size;\n\tunsigned int reply_data_size;\n\tbool allow_nodev_do;\n\tint (*parse_request)(struct ethnl_req_info *, struct nlattr **, struct netlink_ext_ack *);\n\tint (*prepare_data)(const struct ethnl_req_info *, struct ethnl_reply_data *, struct genl_info *);\n\tint (*reply_size)(const struct ethnl_req_info *, const struct ethnl_reply_data *);\n\tint (*fill_reply)(struct sk_buff *, const struct ethnl_req_info *, const struct ethnl_reply_data *);\n\tvoid (*cleanup_data)(struct ethnl_reply_data *);\n};\n\nstruct ethnl_dump_ctx {\n\tconst struct ethnl_request_ops *ops;\n\tstruct ethnl_req_info *req_info;\n\tstruct ethnl_reply_data *reply_data;\n\tint pos_hash;\n\tint pos_idx;\n};\n\ntypedef void (*ethnl_notify_handler_t)(struct net_device *, unsigned int, const void *);\n\nenum {\n\tETHTOOL_A_BITSET_BIT_UNSPEC = 0,\n\tETHTOOL_A_BITSET_BIT_INDEX = 1,\n\tETHTOOL_A_BITSET_BIT_NAME = 2,\n\tETHTOOL_A_BITSET_BIT_VALUE = 3,\n\t__ETHTOOL_A_BITSET_BIT_CNT = 4,\n\tETHTOOL_A_BITSET_BIT_MAX = 3,\n};\n\nenum {\n\tETHTOOL_A_BITSET_BITS_UNSPEC = 0,\n\tETHTOOL_A_BITSET_BITS_BIT = 1,\n\t__ETHTOOL_A_BITSET_BITS_CNT = 2,\n\tETHTOOL_A_BITSET_BITS_MAX = 1,\n};\n\nenum {\n\tETHTOOL_A_BITSET_UNSPEC = 0,\n\tETHTOOL_A_BITSET_NOMASK = 1,\n\tETHTOOL_A_BITSET_SIZE = 2,\n\tETHTOOL_A_BITSET_BITS = 3,\n\tETHTOOL_A_BITSET_VALUE = 4,\n\tETHTOOL_A_BITSET_MASK = 5,\n\t__ETHTOOL_A_BITSET_CNT = 6,\n\tETHTOOL_A_BITSET_MAX = 5,\n};\n\ntypedef const char (* const ethnl_string_array_t)[32];\n\nenum {\n\tETHTOOL_A_STRING_UNSPEC = 0,\n\tETHTOOL_A_STRING_INDEX = 1,\n\tETHTOOL_A_STRING_VALUE = 2,\n\t__ETHTOOL_A_STRING_CNT = 3,\n\tETHTOOL_A_STRING_MAX = 2,\n};\n\nenum {\n\tETHTOOL_A_STRINGS_UNSPEC = 0,\n\tETHTOOL_A_STRINGS_STRING = 1,\n\t__ETHTOOL_A_STRINGS_CNT = 2,\n\tETHTOOL_A_STRINGS_MAX = 1,\n};\n\nenum {\n\tETHTOOL_A_STRINGSET_UNSPEC = 0,\n\tETHTOOL_A_STRINGSET_ID = 1,\n\tETHTOOL_A_STRINGSET_COUNT = 2,\n\tETHTOOL_A_STRINGSET_STRINGS = 3,\n\t__ETHTOOL_A_STRINGSET_CNT = 4,\n\tETHTOOL_A_STRINGSET_MAX = 3,\n};\n\nenum {\n\tETHTOOL_A_STRINGSETS_UNSPEC = 0,\n\tETHTOOL_A_STRINGSETS_STRINGSET = 1,\n\t__ETHTOOL_A_STRINGSETS_CNT = 2,\n\tETHTOOL_A_STRINGSETS_MAX = 1,\n};\n\nstruct strset_info {\n\tbool per_dev;\n\tbool free_strings;\n\tunsigned int count;\n\tconst char (*strings)[32];\n};\n\nstruct strset_req_info {\n\tstruct ethnl_req_info base;\n\tu32 req_ids;\n\tbool counts_only;\n};\n\nstruct strset_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct strset_info sets[16];\n};\n\nstruct linkinfo_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct ethtool_link_ksettings ksettings;\n\tstruct ethtool_link_settings *lsettings;\n};\n\nstruct linkmodes_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct ethtool_link_ksettings ksettings;\n\tstruct ethtool_link_settings *lsettings;\n\tbool peer_empty;\n};\n\nstruct link_mode_info {\n\tint speed;\n\tu8 duplex;\n};\n\nstruct linkstate_reply_data {\n\tstruct ethnl_reply_data base;\n\tint link;\n\tint sqi;\n\tint sqi_max;\n\tbool link_ext_state_provided;\n\tstruct ethtool_link_ext_state_info ethtool_link_ext_state_info;\n};\n\nstruct debug_reply_data {\n\tstruct ethnl_reply_data base;\n\tu32 msg_mask;\n};\n\nstruct wol_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct ethtool_wolinfo wol;\n\tbool show_sopass;\n};\n\nstruct features_reply_data {\n\tstruct ethnl_reply_data base;\n\tu32 hw[2];\n\tu32 wanted[2];\n\tu32 active[2];\n\tu32 nochange[2];\n\tu32 all[2];\n};\n\nstruct privflags_reply_data {\n\tstruct ethnl_reply_data base;\n\tconst char (*priv_flag_names)[32];\n\tunsigned int n_priv_flags;\n\tu32 priv_flags;\n};\n\nstruct rings_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct ethtool_ringparam ringparam;\n};\n\nstruct channels_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct ethtool_channels channels;\n};\n\nstruct coalesce_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct ethtool_coalesce coalesce;\n\tu32 supported_params;\n};\n\nenum {\n\tETHTOOL_A_PAUSE_STAT_UNSPEC = 0,\n\tETHTOOL_A_PAUSE_STAT_PAD = 1,\n\tETHTOOL_A_PAUSE_STAT_TX_FRAMES = 2,\n\tETHTOOL_A_PAUSE_STAT_RX_FRAMES = 3,\n\t__ETHTOOL_A_PAUSE_STAT_CNT = 4,\n\tETHTOOL_A_PAUSE_STAT_MAX = 3,\n};\n\nstruct pause_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct ethtool_pauseparam pauseparam;\n\tstruct ethtool_pause_stats pausestat;\n};\n\nstruct eee_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct ethtool_eee eee;\n};\n\nstruct tsinfo_reply_data {\n\tstruct ethnl_reply_data base;\n\tstruct ethtool_ts_info ts_info;\n};\n\nenum {\n\tETHTOOL_A_CABLE_PAIR_A = 0,\n\tETHTOOL_A_CABLE_PAIR_B = 1,\n\tETHTOOL_A_CABLE_PAIR_C = 2,\n\tETHTOOL_A_CABLE_PAIR_D = 3,\n};\n\nenum {\n\tETHTOOL_A_CABLE_RESULT_UNSPEC = 0,\n\tETHTOOL_A_CABLE_RESULT_PAIR = 1,\n\tETHTOOL_A_CABLE_RESULT_CODE = 2,\n\t__ETHTOOL_A_CABLE_RESULT_CNT = 3,\n\tETHTOOL_A_CABLE_RESULT_MAX = 2,\n};\n\nenum {\n\tETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0,\n\tETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 1,\n\tETHTOOL_A_CABLE_FAULT_LENGTH_CM = 2,\n\t__ETHTOOL_A_CABLE_FAULT_LENGTH_CNT = 3,\n\tETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 2,\n};\n\nenum {\n\tETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0,\n\tETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 1,\n\tETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 2,\n};\n\nenum {\n\tETHTOOL_A_CABLE_NEST_UNSPEC = 0,\n\tETHTOOL_A_CABLE_NEST_RESULT = 1,\n\tETHTOOL_A_CABLE_NEST_FAULT_LENGTH = 2,\n\t__ETHTOOL_A_CABLE_NEST_CNT = 3,\n\tETHTOOL_A_CABLE_NEST_MAX = 2,\n};\n\nenum {\n\tETHTOOL_A_CABLE_TEST_NTF_UNSPEC = 0,\n\tETHTOOL_A_CABLE_TEST_NTF_HEADER = 1,\n\tETHTOOL_A_CABLE_TEST_NTF_STATUS = 2,\n\tETHTOOL_A_CABLE_TEST_NTF_NEST = 3,\n\t__ETHTOOL_A_CABLE_TEST_NTF_CNT = 4,\n\tETHTOOL_A_CABLE_TEST_NTF_MAX = 3,\n};\n\nenum {\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC = 0,\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST = 1,\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_LAST = 2,\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_STEP = 3,\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR = 4,\n\t__ETHTOOL_A_CABLE_TEST_TDR_CFG_CNT = 5,\n\tETHTOOL_A_CABLE_TEST_TDR_CFG_MAX = 4,\n};\n\nenum {\n\tETHTOOL_A_CABLE_AMPLITUDE_UNSPEC = 0,\n\tETHTOOL_A_CABLE_AMPLITUDE_PAIR = 1,\n\tETHTOOL_A_CABLE_AMPLITUDE_mV = 2,\n\t__ETHTOOL_A_CABLE_AMPLITUDE_CNT = 3,\n\tETHTOOL_A_CABLE_AMPLITUDE_MAX = 2,\n};\n\nenum {\n\tETHTOOL_A_CABLE_PULSE_UNSPEC = 0,\n\tETHTOOL_A_CABLE_PULSE_mV = 1,\n\t__ETHTOOL_A_CABLE_PULSE_CNT = 2,\n\tETHTOOL_A_CABLE_PULSE_MAX = 1,\n};\n\nenum {\n\tETHTOOL_A_CABLE_STEP_UNSPEC = 0,\n\tETHTOOL_A_CABLE_STEP_FIRST_DISTANCE = 1,\n\tETHTOOL_A_CABLE_STEP_LAST_DISTANCE = 2,\n\tETHTOOL_A_CABLE_STEP_STEP_DISTANCE = 3,\n\t__ETHTOOL_A_CABLE_STEP_CNT = 4,\n\tETHTOOL_A_CABLE_STEP_MAX = 3,\n};\n\nenum {\n\tETHTOOL_A_CABLE_TDR_NEST_UNSPEC = 0,\n\tETHTOOL_A_CABLE_TDR_NEST_STEP = 1,\n\tETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE = 2,\n\tETHTOOL_A_CABLE_TDR_NEST_PULSE = 3,\n\t__ETHTOOL_A_CABLE_TDR_NEST_CNT = 4,\n\tETHTOOL_A_CABLE_TDR_NEST_MAX = 3,\n};\n\nenum {\n\tETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC = 0,\n\tETHTOOL_A_TUNNEL_UDP_ENTRY_PORT = 1,\n\tETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE = 2,\n\t__ETHTOOL_A_TUNNEL_UDP_ENTRY_CNT = 3,\n\tETHTOOL_A_TUNNEL_UDP_ENTRY_MAX = 2,\n};\n\nenum {\n\tETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC = 0,\n\tETHTOOL_A_TUNNEL_UDP_TABLE_SIZE = 1,\n\tETHTOOL_A_TUNNEL_UDP_TABLE_TYPES = 2,\n\tETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY = 3,\n\t__ETHTOOL_A_TUNNEL_UDP_TABLE_CNT = 4,\n\tETHTOOL_A_TUNNEL_UDP_TABLE_MAX = 3,\n};\n\nenum {\n\tETHTOOL_A_TUNNEL_UDP_UNSPEC = 0,\n\tETHTOOL_A_TUNNEL_UDP_TABLE = 1,\n\t__ETHTOOL_A_TUNNEL_UDP_CNT = 2,\n\tETHTOOL_A_TUNNEL_UDP_MAX = 1,\n};\n\nenum udp_parsable_tunnel_type {\n\tUDP_TUNNEL_TYPE_VXLAN = 1,\n\tUDP_TUNNEL_TYPE_GENEVE = 2,\n\tUDP_TUNNEL_TYPE_VXLAN_GPE = 4,\n};\n\nenum udp_tunnel_nic_info_flags {\n\tUDP_TUNNEL_NIC_INFO_MAY_SLEEP = 1,\n\tUDP_TUNNEL_NIC_INFO_OPEN_ONLY = 2,\n\tUDP_TUNNEL_NIC_INFO_IPV4_ONLY = 4,\n\tUDP_TUNNEL_NIC_INFO_STATIC_IANA_VXLAN = 8,\n};\n\nstruct udp_tunnel_nic_ops {\n\tvoid (*get_port)(struct net_device *, unsigned int, unsigned int, struct udp_tunnel_info *);\n\tvoid (*set_port_priv)(struct net_device *, unsigned int, unsigned int, u8);\n\tvoid (*add_port)(struct net_device *, struct udp_tunnel_info *);\n\tvoid (*del_port)(struct net_device *, struct udp_tunnel_info *);\n\tvoid (*reset_ntf)(struct net_device *);\n\tsize_t (*dump_size)(struct net_device *, unsigned int);\n\tint (*dump_write)(struct net_device *, unsigned int, struct sk_buff *);\n};\n\nstruct ethnl_tunnel_info_dump_ctx {\n\tstruct ethnl_req_info req_info;\n\tint pos_hash;\n\tint pos_idx;\n};\n\nstruct nf_hook_entries_rcu_head {\n\tstruct callback_head head;\n\tvoid *allocation;\n};\n\nstruct nf_conn___2;\n\nenum nf_nat_manip_type;\n\nstruct nf_nat_hook {\n\tint (*parse_nat_setup)(struct nf_conn___2 *, enum nf_nat_manip_type, const struct nlattr *);\n\tvoid (*decode_session)(struct sk_buff *, struct flowi *);\n\tunsigned int (*manip_pkt)(struct sk_buff *, struct nf_conn___2 *, enum nf_nat_manip_type, enum ip_conntrack_dir);\n};\n\nstruct nf_conntrack_tuple___2;\n\nstruct nf_ct_hook {\n\tint (*update)(struct net *, struct sk_buff *);\n\tvoid (*destroy)(struct nf_conntrack *);\n\tbool (*get_tuple_skb)(struct nf_conntrack_tuple___2 *, const struct sk_buff *);\n};\n\nstruct nfnl_ct_hook {\n\tstruct nf_conn___2 * (*get_ct)(const struct sk_buff *, enum ip_conntrack_info *);\n\tsize_t (*build_size)(const struct nf_conn___2 *);\n\tint (*build)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, u_int16_t, u_int16_t);\n\tint (*parse)(const struct nlattr *, struct nf_conn___2 *);\n\tint (*attach_expect)(const struct nlattr *, struct nf_conn___2 *, u32, u32);\n\tvoid (*seq_adjust)(struct sk_buff *, struct nf_conn___2 *, enum ip_conntrack_info, s32);\n};\n\nstruct nf_ipv6_ops {\n\tvoid (*route_input)(struct sk_buff *);\n\tint (*fragment)(struct net *, struct sock *, struct sk_buff *, int (*)(struct net *, struct sock *, struct sk_buff *));\n\tint (*reroute)(struct sk_buff *, const struct nf_queue_entry *);\n};\n\nstruct nf_queue_entry {\n\tstruct list_head list;\n\tstruct sk_buff *skb;\n\tunsigned int id;\n\tunsigned int hook_index;\n\tstruct net_device *physin;\n\tstruct net_device *physout;\n\tstruct nf_hook_state state;\n\tu16 size;\n};\n\nstruct nf_loginfo {\n\tu_int8_t type;\n\tunion {\n\t\tstruct {\n\t\t\tu_int32_t copy_len;\n\t\t\tu_int16_t group;\n\t\t\tu_int16_t qthreshold;\n\t\t\tu_int16_t flags;\n\t\t} ulog;\n\t\tstruct {\n\t\t\tu_int8_t level;\n\t\t\tu_int8_t logflags;\n\t\t} log;\n\t} u;\n};\n\nstruct nf_log_buf {\n\tunsigned int count;\n\tchar buf[1020];\n};\n\nstruct nf_bridge_info {\n\tenum {\n\t\tBRNF_PROTO_UNCHANGED = 0,\n\t\tBRNF_PROTO_8021Q = 1,\n\t\tBRNF_PROTO_PPPOE = 2,\n\t} orig_proto: 8;\n\tu8 pkt_otherhost: 1;\n\tu8 in_prerouting: 1;\n\tu8 bridged_dnat: 1;\n\t__u16 frag_max_size;\n\tstruct net_device *physindev;\n\tstruct net_device *physoutdev;\n\tunion {\n\t\t__be32 ipv4_daddr;\n\t\tstruct in6_addr ipv6_daddr;\n\t\tchar neigh_header[8];\n\t};\n};\n\nstruct ip_rt_info {\n\t__be32 daddr;\n\t__be32 saddr;\n\tu_int8_t tos;\n\tu_int32_t mark;\n};\n\nstruct ip6_rt_info {\n\tstruct in6_addr daddr;\n\tstruct in6_addr saddr;\n\tu_int32_t mark;\n};\n\nstruct nf_sockopt_ops {\n\tstruct list_head list;\n\tu_int8_t pf;\n\tint set_optmin;\n\tint set_optmax;\n\tint (*set)(struct sock *, int, sockptr_t, unsigned int);\n\tint get_optmin;\n\tint get_optmax;\n\tint (*get)(struct sock *, int, void *, int *);\n\tstruct module *owner;\n};\n\nstruct xt_action_param;\n\nstruct xt_mtchk_param;\n\nstruct xt_mtdtor_param;\n\nstruct xt_match {\n\tstruct list_head list;\n\tconst char name[29];\n\tu_int8_t revision;\n\tbool (*match)(const struct sk_buff *, struct xt_action_param *);\n\tint (*checkentry)(const struct xt_mtchk_param *);\n\tvoid (*destroy)(const struct xt_mtdtor_param *);\n\tvoid (*compat_from_user)(void *, const void *);\n\tint (*compat_to_user)(void *, const void *);\n\tstruct module *me;\n\tconst char *table;\n\tunsigned int matchsize;\n\tunsigned int usersize;\n\tunsigned int compatsize;\n\tunsigned int hooks;\n\tshort unsigned int proto;\n\tshort unsigned int family;\n};\n\nstruct xt_entry_match {\n\tunion {\n\t\tstruct {\n\t\t\t__u16 match_size;\n\t\t\tchar name[29];\n\t\t\t__u8 revision;\n\t\t} user;\n\t\tstruct {\n\t\t\t__u16 match_size;\n\t\t\tstruct xt_match *match;\n\t\t} kernel;\n\t\t__u16 match_size;\n\t} u;\n\tunsigned char data[0];\n};\n\nstruct xt_tgchk_param;\n\nstruct xt_tgdtor_param;\n\nstruct xt_target {\n\tstruct list_head list;\n\tconst char name[29];\n\tu_int8_t revision;\n\tunsigned int (*target)(struct sk_buff *, const struct xt_action_param *);\n\tint (*checkentry)(const struct xt_tgchk_param *);\n\tvoid (*destroy)(const struct xt_tgdtor_param *);\n\tvoid (*compat_from_user)(void *, const void *);\n\tint (*compat_to_user)(void *, const void *);\n\tstruct module *me;\n\tconst char *table;\n\tunsigned int targetsize;\n\tunsigned int usersize;\n\tunsigned int compatsize;\n\tunsigned int hooks;\n\tshort unsigned int proto;\n\tshort unsigned int family;\n};\n\nstruct xt_entry_target {\n\tunion {\n\t\tstruct {\n\t\t\t__u16 target_size;\n\t\t\tchar name[29];\n\t\t\t__u8 revision;\n\t\t} user;\n\t\tstruct {\n\t\t\t__u16 target_size;\n\t\t\tstruct xt_target *target;\n\t\t} kernel;\n\t\t__u16 target_size;\n\t} u;\n\tunsigned char data[0];\n};\n\nstruct xt_standard_target {\n\tstruct xt_entry_target target;\n\tint verdict;\n};\n\nstruct xt_error_target {\n\tstruct xt_entry_target target;\n\tchar errorname[30];\n};\n\nstruct xt_counters {\n\t__u64 pcnt;\n\t__u64 bcnt;\n};\n\nstruct xt_counters_info {\n\tchar name[32];\n\tunsigned int num_counters;\n\tstruct xt_counters counters[0];\n};\n\nstruct xt_action_param {\n\tunion {\n\t\tconst struct xt_match *match;\n\t\tconst struct xt_target *target;\n\t};\n\tunion {\n\t\tconst void *matchinfo;\n\t\tconst void *targinfo;\n\t};\n\tconst struct nf_hook_state *state;\n\tint fragoff;\n\tunsigned int thoff;\n\tbool hotdrop;\n};\n\nstruct xt_mtchk_param {\n\tstruct net *net;\n\tconst char *table;\n\tconst void *entryinfo;\n\tconst struct xt_match *match;\n\tvoid *matchinfo;\n\tunsigned int hook_mask;\n\tu_int8_t family;\n\tbool nft_compat;\n};\n\nstruct xt_mtdtor_param {\n\tstruct net *net;\n\tconst struct xt_match *match;\n\tvoid *matchinfo;\n\tu_int8_t family;\n};\n\nstruct xt_tgchk_param {\n\tstruct net *net;\n\tconst char *table;\n\tconst void *entryinfo;\n\tconst struct xt_target *target;\n\tvoid *targinfo;\n\tunsigned int hook_mask;\n\tu_int8_t family;\n\tbool nft_compat;\n};\n\nstruct xt_tgdtor_param {\n\tstruct net *net;\n\tconst struct xt_target *target;\n\tvoid *targinfo;\n\tu_int8_t family;\n};\n\nstruct xt_percpu_counter_alloc_state {\n\tunsigned int off;\n\tconst char *mem;\n};\n\nstruct compat_xt_entry_match {\n\tunion {\n\t\tstruct {\n\t\t\tu_int16_t match_size;\n\t\t\tchar name[29];\n\t\t\tu_int8_t revision;\n\t\t} user;\n\t\tstruct {\n\t\t\tu_int16_t match_size;\n\t\t\tcompat_uptr_t match;\n\t\t} kernel;\n\t\tu_int16_t match_size;\n\t} u;\n\tunsigned char data[0];\n};\n\nstruct compat_xt_entry_target {\n\tunion {\n\t\tstruct {\n\t\t\tu_int16_t target_size;\n\t\t\tchar name[29];\n\t\t\tu_int8_t revision;\n\t\t} user;\n\t\tstruct {\n\t\t\tu_int16_t target_size;\n\t\t\tcompat_uptr_t target;\n\t\t} kernel;\n\t\tu_int16_t target_size;\n\t} u;\n\tunsigned char data[0];\n};\n\nstruct compat_xt_counters {\n\tcompat_u64 pcnt;\n\tcompat_u64 bcnt;\n};\n\nstruct compat_xt_counters_info {\n\tchar name[32];\n\tcompat_uint_t num_counters;\n\tstruct compat_xt_counters counters[0];\n} __attribute__((packed));\n\nstruct compat_delta {\n\tunsigned int offset;\n\tint delta;\n};\n\nstruct xt_af {\n\tstruct mutex mutex;\n\tstruct list_head match;\n\tstruct list_head target;\n\tstruct mutex compat_mutex;\n\tstruct compat_delta *compat_tab;\n\tunsigned int number;\n\tunsigned int cur;\n};\n\nstruct compat_xt_standard_target {\n\tstruct compat_xt_entry_target t;\n\tcompat_uint_t verdict;\n};\n\nstruct compat_xt_error_target {\n\tstruct compat_xt_entry_target t;\n\tchar errorname[30];\n};\n\nstruct nf_mttg_trav {\n\tstruct list_head *head;\n\tstruct list_head *curr;\n\tuint8_t class;\n};\n\nenum {\n\tMTTG_TRAV_INIT = 0,\n\tMTTG_TRAV_NFP_UNSPEC = 1,\n\tMTTG_TRAV_NFP_SPEC = 2,\n\tMTTG_TRAV_DONE = 3,\n};\n\nstruct xt_tcp {\n\t__u16 spts[2];\n\t__u16 dpts[2];\n\t__u8 option;\n\t__u8 flg_mask;\n\t__u8 flg_cmp;\n\t__u8 invflags;\n};\n\nstruct xt_udp {\n\t__u16 spts[2];\n\t__u16 dpts[2];\n\t__u8 invflags;\n};\n\nstruct ip_mreqn {\n\tstruct in_addr imr_multiaddr;\n\tstruct in_addr imr_address;\n\tint imr_ifindex;\n};\n\nstruct rtmsg {\n\tunsigned char rtm_family;\n\tunsigned char rtm_dst_len;\n\tunsigned char rtm_src_len;\n\tunsigned char rtm_tos;\n\tunsigned char rtm_table;\n\tunsigned char rtm_protocol;\n\tunsigned char rtm_scope;\n\tunsigned char rtm_type;\n\tunsigned int rtm_flags;\n};\n\nstruct rtvia {\n\t__kernel_sa_family_t rtvia_family;\n\t__u8 rtvia_addr[0];\n};\n\nstruct ip_sf_list;\n\nstruct ip_mc_list {\n\tstruct in_device *interface;\n\t__be32 multiaddr;\n\tunsigned int sfmode;\n\tstruct ip_sf_list *sources;\n\tstruct ip_sf_list *tomb;\n\tlong unsigned int sfcount[2];\n\tunion {\n\t\tstruct ip_mc_list *next;\n\t\tstruct ip_mc_list *next_rcu;\n\t};\n\tstruct ip_mc_list *next_hash;\n\tstruct timer_list timer;\n\tint users;\n\trefcount_t refcnt;\n\tspinlock_t lock;\n\tchar tm_running;\n\tchar reporter;\n\tchar unsolicit_count;\n\tchar loaded;\n\tunsigned char gsquery;\n\tunsigned char crcount;\n\tstruct callback_head rcu;\n};\n\nstruct ip_sf_socklist {\n\tunsigned int sl_max;\n\tunsigned int sl_count;\n\tstruct callback_head rcu;\n\t__be32 sl_addr[0];\n};\n\nstruct ip_mc_socklist {\n\tstruct ip_mc_socklist *next_rcu;\n\tstruct ip_mreqn multi;\n\tunsigned int sfmode;\n\tstruct ip_sf_socklist *sflist;\n\tstruct callback_head rcu;\n};\n\nstruct ip_sf_list {\n\tstruct ip_sf_list *sf_next;\n\tlong unsigned int sf_count[2];\n\t__be32 sf_inaddr;\n\tunsigned char sf_gsresp;\n\tunsigned char sf_oldin;\n\tunsigned char sf_crcount;\n};\n\nstruct ipv4_addr_key {\n\t__be32 addr;\n\tint vif;\n};\n\nstruct inetpeer_addr {\n\tunion {\n\t\tstruct ipv4_addr_key a4;\n\t\tstruct in6_addr a6;\n\t\tu32 key[4];\n\t};\n\t__u16 family;\n};\n\nstruct inet_peer {\n\tstruct rb_node rb_node;\n\tstruct inetpeer_addr daddr;\n\tu32 metrics[17];\n\tu32 rate_tokens;\n\tu32 n_redirects;\n\tlong unsigned int rate_last;\n\tunion {\n\t\tstruct {\n\t\t\tatomic_t rid;\n\t\t};\n\t\tstruct callback_head rcu;\n\t};\n\t__u32 dtime;\n\trefcount_t refcnt;\n};\n\nstruct fib_rt_info {\n\tstruct fib_info *fi;\n\tu32 tb_id;\n\t__be32 dst;\n\tint dst_len;\n\tu8 tos;\n\tu8 type;\n\tu8 offload: 1;\n\tu8 trap: 1;\n\tu8 unused: 6;\n};\n\nstruct uncached_list {\n\tspinlock_t lock;\n\tstruct list_head head;\n};\n\nstruct ip_rt_acct {\n\t__u32 o_bytes;\n\t__u32 o_packets;\n\t__u32 i_bytes;\n\t__u32 i_packets;\n};\n\nstruct rt_cache_stat {\n\tunsigned int in_slow_tot;\n\tunsigned int in_slow_mc;\n\tunsigned int in_no_route;\n\tunsigned int in_brd;\n\tunsigned int in_martian_dst;\n\tunsigned int in_martian_src;\n\tunsigned int out_slow_tot;\n\tunsigned int out_slow_mc;\n};\n\nstruct fib_alias {\n\tstruct hlist_node fa_list;\n\tstruct fib_info *fa_info;\n\tu8 fa_tos;\n\tu8 fa_type;\n\tu8 fa_state;\n\tu8 fa_slen;\n\tu32 tb_id;\n\ts16 fa_default;\n\tu8 offload: 1;\n\tu8 trap: 1;\n\tu8 unused: 6;\n\tstruct callback_head rcu;\n};\n\nstruct fib_prop {\n\tint error;\n\tu8 scope;\n};\n\nstruct net_offload {\n\tstruct offload_callbacks callbacks;\n\tunsigned int flags;\n};\n\nstruct raw_hashinfo {\n\trwlock_t lock;\n\tstruct hlist_head ht[256];\n};\n\nenum ip_defrag_users {\n\tIP_DEFRAG_LOCAL_DELIVER = 0,\n\tIP_DEFRAG_CALL_RA_CHAIN = 1,\n\tIP_DEFRAG_CONNTRACK_IN = 2,\n\t__IP_DEFRAG_CONNTRACK_IN_END = 65537,\n\tIP_DEFRAG_CONNTRACK_OUT = 65538,\n\t__IP_DEFRAG_CONNTRACK_OUT_END = 131073,\n\tIP_DEFRAG_CONNTRACK_BRIDGE_IN = 131074,\n\t__IP_DEFRAG_CONNTRACK_BRIDGE_IN = 196609,\n\tIP_DEFRAG_VS_IN = 196610,\n\tIP_DEFRAG_VS_OUT = 196611,\n\tIP_DEFRAG_VS_FWD = 196612,\n\tIP_DEFRAG_AF_PACKET = 196613,\n\tIP_DEFRAG_MACVLAN = 196614,\n};\n\nenum {\n\tINET_FRAG_FIRST_IN = 1,\n\tINET_FRAG_LAST_IN = 2,\n\tINET_FRAG_COMPLETE = 4,\n\tINET_FRAG_HASH_DEAD = 8,\n};\n\nstruct ipq {\n\tstruct inet_frag_queue q;\n\tu8 ecn;\n\tu16 max_df_size;\n\tint iif;\n\tunsigned int rid;\n\tstruct inet_peer *peer;\n};\n\nstruct ip_options_data {\n\tstruct ip_options_rcu opt;\n\tchar data[40];\n};\n\nstruct ipcm_cookie {\n\tstruct sockcm_cookie sockc;\n\t__be32 addr;\n\tint oif;\n\tstruct ip_options_rcu *opt;\n\t__u8 ttl;\n\t__s16 tos;\n\tchar priority;\n\t__u16 gso_size;\n};\n\nstruct ip_fraglist_iter {\n\tstruct sk_buff *frag;\n\tstruct iphdr *iph;\n\tint offset;\n\tunsigned int hlen;\n};\n\nstruct ip_frag_state {\n\tbool DF;\n\tunsigned int hlen;\n\tunsigned int ll_rs;\n\tunsigned int mtu;\n\tunsigned int left;\n\tint offset;\n\tint ptr;\n\t__be16 not_last_frag;\n};\n\nstruct ip_reply_arg {\n\tstruct kvec iov[1];\n\tint flags;\n\t__wsum csum;\n\tint csumoffset;\n\tint bound_dev_if;\n\tu8 tos;\n\tkuid_t uid;\n};\n\nstruct ip_mreq_source {\n\t__be32 imr_multiaddr;\n\t__be32 imr_interface;\n\t__be32 imr_sourceaddr;\n};\n\nstruct ip_msfilter {\n\t__be32 imsf_multiaddr;\n\t__be32 imsf_interface;\n\t__u32 imsf_fmode;\n\t__u32 imsf_numsrc;\n\t__be32 imsf_slist[1];\n};\n\nstruct group_req {\n\t__u32 gr_interface;\n\tstruct __kernel_sockaddr_storage gr_group;\n};\n\nstruct group_source_req {\n\t__u32 gsr_interface;\n\tstruct __kernel_sockaddr_storage gsr_group;\n\tstruct __kernel_sockaddr_storage gsr_source;\n};\n\nstruct group_filter {\n\t__u32 gf_interface;\n\tstruct __kernel_sockaddr_storage gf_group;\n\t__u32 gf_fmode;\n\t__u32 gf_numsrc;\n\tstruct __kernel_sockaddr_storage gf_slist[1];\n};\n\nstruct in_pktinfo {\n\tint ipi_ifindex;\n\tstruct in_addr ipi_spec_dst;\n\tstruct in_addr ipi_addr;\n};\n\nstruct compat_group_req {\n\t__u32 gr_interface;\n\tstruct __kernel_sockaddr_storage gr_group;\n} __attribute__((packed));\n\nstruct compat_group_source_req {\n\t__u32 gsr_interface;\n\tstruct __kernel_sockaddr_storage gsr_group;\n\tstruct __kernel_sockaddr_storage gsr_source;\n} __attribute__((packed));\n\nstruct compat_group_filter {\n\t__u32 gf_interface;\n\tstruct __kernel_sockaddr_storage gf_group;\n\t__u32 gf_fmode;\n\t__u32 gf_numsrc;\n\tstruct __kernel_sockaddr_storage gf_slist[1];\n} __attribute__((packed));\n\nstruct tcpvegas_info {\n\t__u32 tcpv_enabled;\n\t__u32 tcpv_rttcnt;\n\t__u32 tcpv_rtt;\n\t__u32 tcpv_minrtt;\n};\n\nstruct tcp_dctcp_info {\n\t__u16 dctcp_enabled;\n\t__u16 dctcp_ce_state;\n\t__u32 dctcp_alpha;\n\t__u32 dctcp_ab_ecn;\n\t__u32 dctcp_ab_tot;\n};\n\nstruct tcp_bbr_info {\n\t__u32 bbr_bw_lo;\n\t__u32 bbr_bw_hi;\n\t__u32 bbr_min_rtt;\n\t__u32 bbr_pacing_gain;\n\t__u32 bbr_cwnd_gain;\n};\n\nunion tcp_cc_info {\n\tstruct tcpvegas_info vegas;\n\tstruct tcp_dctcp_info dctcp;\n\tstruct tcp_bbr_info bbr;\n};\n\nenum {\n\tBPF_TCP_ESTABLISHED = 1,\n\tBPF_TCP_SYN_SENT = 2,\n\tBPF_TCP_SYN_RECV = 3,\n\tBPF_TCP_FIN_WAIT1 = 4,\n\tBPF_TCP_FIN_WAIT2 = 5,\n\tBPF_TCP_TIME_WAIT = 6,\n\tBPF_TCP_CLOSE = 7,\n\tBPF_TCP_CLOSE_WAIT = 8,\n\tBPF_TCP_LAST_ACK = 9,\n\tBPF_TCP_LISTEN = 10,\n\tBPF_TCP_CLOSING = 11,\n\tBPF_TCP_NEW_SYN_RECV = 12,\n\tBPF_TCP_MAX_STATES = 13,\n};\n\nenum inet_csk_ack_state_t {\n\tICSK_ACK_SCHED = 1,\n\tICSK_ACK_TIMER = 2,\n\tICSK_ACK_PUSHED = 4,\n\tICSK_ACK_PUSHED2 = 8,\n\tICSK_ACK_NOW = 16,\n};\n\nenum {\n\tTCP_FLAG_CWR = 32768,\n\tTCP_FLAG_ECE = 16384,\n\tTCP_FLAG_URG = 8192,\n\tTCP_FLAG_ACK = 4096,\n\tTCP_FLAG_PSH = 2048,\n\tTCP_FLAG_RST = 1024,\n\tTCP_FLAG_SYN = 512,\n\tTCP_FLAG_FIN = 256,\n\tTCP_RESERVED_BITS = 15,\n\tTCP_DATA_OFFSET = 240,\n};\n\nstruct tcp_repair_opt {\n\t__u32 opt_code;\n\t__u32 opt_val;\n};\n\nstruct tcp_repair_window {\n\t__u32 snd_wl1;\n\t__u32 snd_wnd;\n\t__u32 max_window;\n\t__u32 rcv_wnd;\n\t__u32 rcv_wup;\n};\n\nenum {\n\tTCP_NO_QUEUE = 0,\n\tTCP_RECV_QUEUE = 1,\n\tTCP_SEND_QUEUE = 2,\n\tTCP_QUEUES_NR = 3,\n};\n\nstruct tcp_info {\n\t__u8 tcpi_state;\n\t__u8 tcpi_ca_state;\n\t__u8 tcpi_retransmits;\n\t__u8 tcpi_probes;\n\t__u8 tcpi_backoff;\n\t__u8 tcpi_options;\n\t__u8 tcpi_snd_wscale: 4;\n\t__u8 tcpi_rcv_wscale: 4;\n\t__u8 tcpi_delivery_rate_app_limited: 1;\n\t__u8 tcpi_fastopen_client_fail: 2;\n\t__u32 tcpi_rto;\n\t__u32 tcpi_ato;\n\t__u32 tcpi_snd_mss;\n\t__u32 tcpi_rcv_mss;\n\t__u32 tcpi_unacked;\n\t__u32 tcpi_sacked;\n\t__u32 tcpi_lost;\n\t__u32 tcpi_retrans;\n\t__u32 tcpi_fackets;\n\t__u32 tcpi_last_data_sent;\n\t__u32 tcpi_last_ack_sent;\n\t__u32 tcpi_last_data_recv;\n\t__u32 tcpi_last_ack_recv;\n\t__u32 tcpi_pmtu;\n\t__u32 tcpi_rcv_ssthresh;\n\t__u32 tcpi_rtt;\n\t__u32 tcpi_rttvar;\n\t__u32 tcpi_snd_ssthresh;\n\t__u32 tcpi_snd_cwnd;\n\t__u32 tcpi_advmss;\n\t__u32 tcpi_reordering;\n\t__u32 tcpi_rcv_rtt;\n\t__u32 tcpi_rcv_space;\n\t__u32 tcpi_total_retrans;\n\t__u64 tcpi_pacing_rate;\n\t__u64 tcpi_max_pacing_rate;\n\t__u64 tcpi_bytes_acked;\n\t__u64 tcpi_bytes_received;\n\t__u32 tcpi_segs_out;\n\t__u32 tcpi_segs_in;\n\t__u32 tcpi_notsent_bytes;\n\t__u32 tcpi_min_rtt;\n\t__u32 tcpi_data_segs_in;\n\t__u32 tcpi_data_segs_out;\n\t__u64 tcpi_delivery_rate;\n\t__u64 tcpi_busy_time;\n\t__u64 tcpi_rwnd_limited;\n\t__u64 tcpi_sndbuf_limited;\n\t__u32 tcpi_delivered;\n\t__u32 tcpi_delivered_ce;\n\t__u64 tcpi_bytes_sent;\n\t__u64 tcpi_bytes_retrans;\n\t__u32 tcpi_dsack_dups;\n\t__u32 tcpi_reord_seen;\n\t__u32 tcpi_rcv_ooopack;\n\t__u32 tcpi_snd_wnd;\n};\n\nenum {\n\tTCP_NLA_PAD = 0,\n\tTCP_NLA_BUSY = 1,\n\tTCP_NLA_RWND_LIMITED = 2,\n\tTCP_NLA_SNDBUF_LIMITED = 3,\n\tTCP_NLA_DATA_SEGS_OUT = 4,\n\tTCP_NLA_TOTAL_RETRANS = 5,\n\tTCP_NLA_PACING_RATE = 6,\n\tTCP_NLA_DELIVERY_RATE = 7,\n\tTCP_NLA_SND_CWND = 8,\n\tTCP_NLA_REORDERING = 9,\n\tTCP_NLA_MIN_RTT = 10,\n\tTCP_NLA_RECUR_RETRANS = 11,\n\tTCP_NLA_DELIVERY_RATE_APP_LMT = 12,\n\tTCP_NLA_SNDQ_SIZE = 13,\n\tTCP_NLA_CA_STATE = 14,\n\tTCP_NLA_SND_SSTHRESH = 15,\n\tTCP_NLA_DELIVERED = 16,\n\tTCP_NLA_DELIVERED_CE = 17,\n\tTCP_NLA_BYTES_SENT = 18,\n\tTCP_NLA_BYTES_RETRANS = 19,\n\tTCP_NLA_DSACK_DUPS = 20,\n\tTCP_NLA_REORD_SEEN = 21,\n\tTCP_NLA_SRTT = 22,\n\tTCP_NLA_TIMEOUT_REHASH = 23,\n\tTCP_NLA_BYTES_NOTSENT = 24,\n\tTCP_NLA_EDT = 25,\n};\n\nstruct tcp_zerocopy_receive {\n\t__u64 address;\n\t__u32 length;\n\t__u32 recv_skip_hint;\n\t__u32 inq;\n\t__s32 err;\n\t__u64 copybuf_address;\n\t__s32 copybuf_len;\n\t__u32 flags;\n};\n\nstruct tcp_md5sig_pool {\n\tstruct ahash_request *md5_req;\n\tvoid *scratch;\n};\n\nenum tcp_chrono {\n\tTCP_CHRONO_UNSPEC = 0,\n\tTCP_CHRONO_BUSY = 1,\n\tTCP_CHRONO_RWND_LIMITED = 2,\n\tTCP_CHRONO_SNDBUF_LIMITED = 3,\n\t__TCP_CHRONO_MAX = 4,\n};\n\nstruct tcp_splice_state {\n\tstruct pipe_inode_info *pipe;\n\tsize_t len;\n\tunsigned int flags;\n};\n\nenum tcp_fastopen_client_fail {\n\tTFO_STATUS_UNSPEC = 0,\n\tTFO_COOKIE_UNAVAILABLE = 1,\n\tTFO_DATA_NOT_ACKED = 2,\n\tTFO_SYN_RETRANSMITTED = 3,\n};\n\nstruct tcp_sack_block_wire {\n\t__be32 start_seq;\n\t__be32 end_seq;\n};\n\nstruct static_key_false_deferred {\n\tstruct static_key_false key;\n\tlong unsigned int timeout;\n\tstruct delayed_work work;\n};\n\nstruct mptcp_ext {\n\tunion {\n\t\tu64 data_ack;\n\t\tu32 data_ack32;\n\t};\n\tu64 data_seq;\n\tu32 subflow_seq;\n\tu16 data_len;\n\tu8 use_map: 1;\n\tu8 dsn64: 1;\n\tu8 data_fin: 1;\n\tu8 use_ack: 1;\n\tu8 ack64: 1;\n\tu8 mpc_map: 1;\n\tu8 frozen: 1;\n\tu8 __unused: 1;\n};\n\nenum tcp_queue {\n\tTCP_FRAG_IN_WRITE_QUEUE = 0,\n\tTCP_FRAG_IN_RTX_QUEUE = 1,\n};\n\nenum tcp_ca_ack_event_flags {\n\tCA_ACK_SLOWPATH = 1,\n\tCA_ACK_WIN_UPDATE = 2,\n\tCA_ACK_ECE = 4,\n};\n\nstruct tcp_sacktag_state {\n\tu64 first_sackt;\n\tu64 last_sackt;\n\tu32 reord;\n\tu32 sack_delivered;\n\tint flag;\n\tunsigned int mss_now;\n\tstruct rate_sample *rate;\n};\n\nenum pkt_hash_types {\n\tPKT_HASH_TYPE_NONE = 0,\n\tPKT_HASH_TYPE_L2 = 1,\n\tPKT_HASH_TYPE_L3 = 2,\n\tPKT_HASH_TYPE_L4 = 3,\n};\n\nenum {\n\tBPF_WRITE_HDR_TCP_CURRENT_MSS = 1,\n\tBPF_WRITE_HDR_TCP_SYNACK_COOKIE = 2,\n};\n\nenum tsq_flags {\n\tTSQF_THROTTLED = 1,\n\tTSQF_QUEUED = 2,\n\tTCPF_TSQ_DEFERRED = 4,\n\tTCPF_WRITE_TIMER_DEFERRED = 8,\n\tTCPF_DELACK_TIMER_DEFERRED = 16,\n\tTCPF_MTU_REDUCED_DEFERRED = 32,\n};\n\nstruct mptcp_out_options {\n\tu16 suboptions;\n\tu64 sndr_key;\n\tu64 rcvr_key;\n\tunion {\n\t\tstruct in_addr addr;\n\t\tstruct in6_addr addr6;\n\t};\n\tu8 addr_id;\n\tu16 port;\n\tu64 ahmac;\n\tu8 rm_id;\n\tu8 join_id;\n\tu8 backup;\n\tu32 nonce;\n\tu64 thmac;\n\tu32 token;\n\tu8 hmac[20];\n\tstruct mptcp_ext ext_copy;\n};\n\nstruct tcp_out_options {\n\tu16 options;\n\tu16 mss;\n\tu8 ws;\n\tu8 num_sack_blocks;\n\tu8 hash_size;\n\tu8 bpf_opt_len;\n\t__u8 *hash_location;\n\t__u32 tsval;\n\t__u32 tsecr;\n\tstruct tcp_fastopen_cookie *fastopen_cookie;\n\tstruct mptcp_out_options mptcp;\n};\n\nstruct tsq_tasklet {\n\tstruct tasklet_struct tasklet;\n\tstruct list_head head;\n};\n\nstruct tcp_md5sig {\n\tstruct __kernel_sockaddr_storage tcpm_addr;\n\t__u8 tcpm_flags;\n\t__u8 tcpm_prefixlen;\n\t__u16 tcpm_keylen;\n\tint tcpm_ifindex;\n\t__u8 tcpm_key[80];\n};\n\nstruct icmp_err {\n\tint errno;\n\tunsigned int fatal: 1;\n};\n\nenum tcp_tw_status {\n\tTCP_TW_SUCCESS = 0,\n\tTCP_TW_RST = 1,\n\tTCP_TW_ACK = 2,\n\tTCP_TW_SYN = 3,\n};\n\nstruct tcp4_pseudohdr {\n\t__be32 saddr;\n\t__be32 daddr;\n\t__u8 pad;\n\t__u8 protocol;\n\t__be16 len;\n};\n\nenum tcp_seq_states {\n\tTCP_SEQ_STATE_LISTENING = 0,\n\tTCP_SEQ_STATE_ESTABLISHED = 1,\n};\n\nstruct tcp_seq_afinfo {\n\tsa_family_t family;\n};\n\nstruct tcp_iter_state {\n\tstruct seq_net_private p;\n\tenum tcp_seq_states state;\n\tstruct sock *syn_wait_sk;\n\tstruct tcp_seq_afinfo *bpf_seq_afinfo;\n\tint bucket;\n\tint offset;\n\tint sbucket;\n\tint num;\n\tloff_t last_pos;\n};\n\nstruct bpf_iter__tcp {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct sock_common *sk_common;\n\t};\n\tuid_t uid;\n};\n\nenum tcp_metric_index {\n\tTCP_METRIC_RTT = 0,\n\tTCP_METRIC_RTTVAR = 1,\n\tTCP_METRIC_SSTHRESH = 2,\n\tTCP_METRIC_CWND = 3,\n\tTCP_METRIC_REORDERING = 4,\n\tTCP_METRIC_RTT_US = 5,\n\tTCP_METRIC_RTTVAR_US = 6,\n\t__TCP_METRIC_MAX = 7,\n};\n\nenum {\n\tTCP_METRICS_ATTR_UNSPEC = 0,\n\tTCP_METRICS_ATTR_ADDR_IPV4 = 1,\n\tTCP_METRICS_ATTR_ADDR_IPV6 = 2,\n\tTCP_METRICS_ATTR_AGE = 3,\n\tTCP_METRICS_ATTR_TW_TSVAL = 4,\n\tTCP_METRICS_ATTR_TW_TS_STAMP = 5,\n\tTCP_METRICS_ATTR_VALS = 6,\n\tTCP_METRICS_ATTR_FOPEN_MSS = 7,\n\tTCP_METRICS_ATTR_FOPEN_SYN_DROPS = 8,\n\tTCP_METRICS_ATTR_FOPEN_SYN_DROP_TS = 9,\n\tTCP_METRICS_ATTR_FOPEN_COOKIE = 10,\n\tTCP_METRICS_ATTR_SADDR_IPV4 = 11,\n\tTCP_METRICS_ATTR_SADDR_IPV6 = 12,\n\tTCP_METRICS_ATTR_PAD = 13,\n\t__TCP_METRICS_ATTR_MAX = 14,\n};\n\nenum {\n\tTCP_METRICS_CMD_UNSPEC = 0,\n\tTCP_METRICS_CMD_GET = 1,\n\tTCP_METRICS_CMD_DEL = 2,\n\t__TCP_METRICS_CMD_MAX = 3,\n};\n\nstruct tcp_fastopen_metrics {\n\tu16 mss;\n\tu16 syn_loss: 10;\n\tu16 try_exp: 2;\n\tlong unsigned int last_syn_loss;\n\tstruct tcp_fastopen_cookie cookie;\n};\n\nstruct tcp_metrics_block {\n\tstruct tcp_metrics_block *tcpm_next;\n\tpossible_net_t tcpm_net;\n\tstruct inetpeer_addr tcpm_saddr;\n\tstruct inetpeer_addr tcpm_daddr;\n\tlong unsigned int tcpm_stamp;\n\tu32 tcpm_lock;\n\tu32 tcpm_vals[5];\n\tstruct tcp_fastopen_metrics tcpm_fastopen;\n\tstruct callback_head callback_head;\n};\n\nstruct tcpm_hash_bucket {\n\tstruct tcp_metrics_block *chain;\n};\n\nstruct icmp_filter {\n\t__u32 data;\n};\n\nstruct raw_iter_state {\n\tstruct seq_net_private p;\n\tint bucket;\n};\n\nstruct raw_sock {\n\tstruct inet_sock inet;\n\tstruct icmp_filter filter;\n\tu32 ipmr_table;\n};\n\nstruct raw_frag_vec {\n\tstruct msghdr *msg;\n\tunion {\n\t\tstruct icmphdr icmph;\n\t\tchar c[1];\n\t} hdr;\n\tint hlen;\n};\n\nstruct ip_tunnel_encap {\n\tu16 type;\n\tu16 flags;\n\t__be16 sport;\n\t__be16 dport;\n};\n\nstruct ip_tunnel_encap_ops {\n\tsize_t (*encap_hlen)(struct ip_tunnel_encap *);\n\tint (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi4 *);\n\tint (*err_handler)(struct sk_buff *, u32);\n};\n\nstruct udp_skb_cb {\n\tunion {\n\t\tstruct inet_skb_parm h4;\n\t\tstruct inet6_skb_parm h6;\n\t} header;\n\t__u16 cscov;\n\t__u8 partial_cov;\n};\n\nstruct udp_dev_scratch {\n\tu32 _tsize_state;\n\tu16 len;\n\tbool is_linear;\n\tbool csum_unnecessary;\n};\n\nstruct udp_seq_afinfo {\n\tsa_family_t family;\n\tstruct udp_table *udp_table;\n};\n\nstruct udp_iter_state {\n\tstruct seq_net_private p;\n\tint bucket;\n\tstruct udp_seq_afinfo *bpf_seq_afinfo;\n};\n\nstruct bpf_iter__udp {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct udp_sock *udp_sk;\n\t};\n\tuid_t uid;\n\tint: 32;\n\tint bucket;\n};\n\nstruct inet_protosw {\n\tstruct list_head list;\n\tshort unsigned int type;\n\tshort unsigned int protocol;\n\tstruct proto *prot;\n\tconst struct proto_ops *ops;\n\tunsigned char flags;\n};\n\ntypedef struct sk_buff * (*gro_receive_sk_t)(struct sock *, struct list_head *, struct sk_buff *);\n\ntypedef struct sock * (*udp_lookup_t)(const struct sk_buff *, __be16, __be16);\n\nstruct arpreq {\n\tstruct sockaddr arp_pa;\n\tstruct sockaddr arp_ha;\n\tint arp_flags;\n\tstruct sockaddr arp_netmask;\n\tchar arp_dev[16];\n};\n\ntypedef struct {\n\tchar ax25_call[7];\n} ax25_address;\n\nenum {\n\tAX25_VALUES_IPDEFMODE = 0,\n\tAX25_VALUES_AXDEFMODE = 1,\n\tAX25_VALUES_BACKOFF = 2,\n\tAX25_VALUES_CONMODE = 3,\n\tAX25_VALUES_WINDOW = 4,\n\tAX25_VALUES_EWINDOW = 5,\n\tAX25_VALUES_T1 = 6,\n\tAX25_VALUES_T2 = 7,\n\tAX25_VALUES_T3 = 8,\n\tAX25_VALUES_IDLE = 9,\n\tAX25_VALUES_N2 = 10,\n\tAX25_VALUES_PACLEN = 11,\n\tAX25_VALUES_PROTOCOL = 12,\n\tAX25_VALUES_DS_TIMEOUT = 13,\n\tAX25_MAX_VALUES = 14,\n};\n\nenum ip_conntrack_status {\n\tIPS_EXPECTED_BIT = 0,\n\tIPS_EXPECTED = 1,\n\tIPS_SEEN_REPLY_BIT = 1,\n\tIPS_SEEN_REPLY = 2,\n\tIPS_ASSURED_BIT = 2,\n\tIPS_ASSURED = 4,\n\tIPS_CONFIRMED_BIT = 3,\n\tIPS_CONFIRMED = 8,\n\tIPS_SRC_NAT_BIT = 4,\n\tIPS_SRC_NAT = 16,\n\tIPS_DST_NAT_BIT = 5,\n\tIPS_DST_NAT = 32,\n\tIPS_NAT_MASK = 48,\n\tIPS_SEQ_ADJUST_BIT = 6,\n\tIPS_SEQ_ADJUST = 64,\n\tIPS_SRC_NAT_DONE_BIT = 7,\n\tIPS_SRC_NAT_DONE = 128,\n\tIPS_DST_NAT_DONE_BIT = 8,\n\tIPS_DST_NAT_DONE = 256,\n\tIPS_NAT_DONE_MASK = 384,\n\tIPS_DYING_BIT = 9,\n\tIPS_DYING = 512,\n\tIPS_FIXED_TIMEOUT_BIT = 10,\n\tIPS_FIXED_TIMEOUT = 1024,\n\tIPS_TEMPLATE_BIT = 11,\n\tIPS_TEMPLATE = 2048,\n\tIPS_UNTRACKED_BIT = 12,\n\tIPS_UNTRACKED = 4096,\n\tIPS_NAT_CLASH_BIT = 12,\n\tIPS_NAT_CLASH = 4096,\n\tIPS_HELPER_BIT = 13,\n\tIPS_HELPER = 8192,\n\tIPS_OFFLOAD_BIT = 14,\n\tIPS_OFFLOAD = 16384,\n\tIPS_HW_OFFLOAD_BIT = 15,\n\tIPS_HW_OFFLOAD = 32768,\n\tIPS_UNCHANGEABLE_MASK = 56313,\n\t__IPS_MAX_BIT = 16,\n};\n\nenum {\n\tXFRM_LOOKUP_ICMP = 1,\n\tXFRM_LOOKUP_QUEUE = 2,\n\tXFRM_LOOKUP_KEEP_DST_REF = 4,\n};\n\nstruct icmp_ext_hdr {\n\t__u8 reserved1: 4;\n\t__u8 version: 4;\n\t__u8 reserved2;\n\t__sum16 checksum;\n};\n\nstruct icmp_extobj_hdr {\n\t__be16 length;\n\t__u8 class_num;\n\t__u8 class_type;\n};\n\nstruct icmp_bxm {\n\tstruct sk_buff *skb;\n\tint offset;\n\tint data_len;\n\tstruct {\n\t\tstruct icmphdr icmph;\n\t\t__be32 times[3];\n\t} data;\n\tint head_len;\n\tstruct ip_options_data replyopts;\n};\n\nstruct icmp_control {\n\tbool (*handler)(struct sk_buff *);\n\tshort int error;\n};\n\nstruct ifaddrmsg {\n\t__u8 ifa_family;\n\t__u8 ifa_prefixlen;\n\t__u8 ifa_flags;\n\t__u8 ifa_scope;\n\t__u32 ifa_index;\n};\n\nenum {\n\tIFA_UNSPEC = 0,\n\tIFA_ADDRESS = 1,\n\tIFA_LOCAL = 2,\n\tIFA_LABEL = 3,\n\tIFA_BROADCAST = 4,\n\tIFA_ANYCAST = 5,\n\tIFA_CACHEINFO = 6,\n\tIFA_MULTICAST = 7,\n\tIFA_FLAGS = 8,\n\tIFA_RT_PRIORITY = 9,\n\tIFA_TARGET_NETNSID = 10,\n\t__IFA_MAX = 11,\n};\n\nstruct ifa_cacheinfo {\n\t__u32 ifa_prefered;\n\t__u32 ifa_valid;\n\t__u32 cstamp;\n\t__u32 tstamp;\n};\n\nenum {\n\tIFLA_INET_UNSPEC = 0,\n\tIFLA_INET_CONF = 1,\n\t__IFLA_INET_MAX = 2,\n};\n\nstruct in_validator_info {\n\t__be32 ivi_addr;\n\tstruct in_device *ivi_dev;\n\tstruct netlink_ext_ack *extack;\n};\n\nstruct netconfmsg {\n\t__u8 ncm_family;\n};\n\nenum {\n\tNETCONFA_UNSPEC = 0,\n\tNETCONFA_IFINDEX = 1,\n\tNETCONFA_FORWARDING = 2,\n\tNETCONFA_RP_FILTER = 3,\n\tNETCONFA_MC_FORWARDING = 4,\n\tNETCONFA_PROXY_NEIGH = 5,\n\tNETCONFA_IGNORE_ROUTES_WITH_LINKDOWN = 6,\n\tNETCONFA_INPUT = 7,\n\tNETCONFA_BC_FORWARDING = 8,\n\t__NETCONFA_MAX = 9,\n};\n\nstruct inet_fill_args {\n\tu32 portid;\n\tu32 seq;\n\tint event;\n\tunsigned int flags;\n\tint netnsid;\n\tint ifindex;\n};\n\nstruct devinet_sysctl_table {\n\tstruct ctl_table_header *sysctl_header;\n\tstruct ctl_table devinet_vars[33];\n};\n\nstruct rtentry {\n\tlong unsigned int rt_pad1;\n\tstruct sockaddr rt_dst;\n\tstruct sockaddr rt_gateway;\n\tstruct sockaddr rt_genmask;\n\tshort unsigned int rt_flags;\n\tshort int rt_pad2;\n\tlong unsigned int rt_pad3;\n\tvoid *rt_pad4;\n\tshort int rt_metric;\n\tchar *rt_dev;\n\tlong unsigned int rt_mtu;\n\tlong unsigned int rt_window;\n\tshort unsigned int rt_irtt;\n};\n\nstruct pingv6_ops {\n\tint (*ipv6_recv_error)(struct sock *, struct msghdr *, int, int *);\n\tvoid (*ip6_datagram_recv_common_ctl)(struct sock *, struct msghdr *, struct sk_buff *);\n\tvoid (*ip6_datagram_recv_specific_ctl)(struct sock *, struct msghdr *, struct sk_buff *);\n\tint (*icmpv6_err_convert)(u8, u8, int *);\n\tvoid (*ipv6_icmp_error)(struct sock *, struct sk_buff *, int, __be16, u32, u8 *);\n\tint (*ipv6_chk_addr)(struct net *, const struct in6_addr *, const struct net_device *, int);\n};\n\nstruct compat_rtentry {\n\tu32 rt_pad1;\n\tstruct sockaddr rt_dst;\n\tstruct sockaddr rt_gateway;\n\tstruct sockaddr rt_genmask;\n\tshort unsigned int rt_flags;\n\tshort int rt_pad2;\n\tu32 rt_pad3;\n\tunsigned char rt_tos;\n\tunsigned char rt_class;\n\tshort int rt_pad4;\n\tshort int rt_metric;\n\tcompat_uptr_t rt_dev;\n\tu32 rt_mtu;\n\tu32 rt_window;\n\tshort unsigned int rt_irtt;\n};\n\nstruct igmphdr {\n\t__u8 type;\n\t__u8 code;\n\t__sum16 csum;\n\t__be32 group;\n};\n\nstruct igmpv3_grec {\n\t__u8 grec_type;\n\t__u8 grec_auxwords;\n\t__be16 grec_nsrcs;\n\t__be32 grec_mca;\n\t__be32 grec_src[0];\n};\n\nstruct igmpv3_report {\n\t__u8 type;\n\t__u8 resv1;\n\t__sum16 csum;\n\t__be16 resv2;\n\t__be16 ngrec;\n\tstruct igmpv3_grec grec[0];\n};\n\nstruct igmpv3_query {\n\t__u8 type;\n\t__u8 code;\n\t__sum16 csum;\n\t__be32 group;\n\t__u8 qrv: 3;\n\t__u8 suppress: 1;\n\t__u8 resv: 4;\n\t__u8 qqic;\n\t__be16 nsrcs;\n\t__be32 srcs[0];\n};\n\nstruct igmp_mc_iter_state {\n\tstruct seq_net_private p;\n\tstruct net_device *dev;\n\tstruct in_device *in_dev;\n};\n\nstruct igmp_mcf_iter_state {\n\tstruct seq_net_private p;\n\tstruct net_device *dev;\n\tstruct in_device *idev;\n\tstruct ip_mc_list *im;\n};\n\nstruct fib_config {\n\tu8 fc_dst_len;\n\tu8 fc_tos;\n\tu8 fc_protocol;\n\tu8 fc_scope;\n\tu8 fc_type;\n\tu8 fc_gw_family;\n\tu32 fc_table;\n\t__be32 fc_dst;\n\tunion {\n\t\t__be32 fc_gw4;\n\t\tstruct in6_addr fc_gw6;\n\t};\n\tint fc_oif;\n\tu32 fc_flags;\n\tu32 fc_priority;\n\t__be32 fc_prefsrc;\n\tu32 fc_nh_id;\n\tstruct nlattr *fc_mx;\n\tstruct rtnexthop *fc_mp;\n\tint fc_mx_len;\n\tint fc_mp_len;\n\tu32 fc_flow;\n\tu32 fc_nlflags;\n\tstruct nl_info fc_nlinfo;\n\tstruct nlattr *fc_encap;\n\tu16 fc_encap_type;\n};\n\nstruct fib_result_nl {\n\t__be32 fl_addr;\n\tu32 fl_mark;\n\tunsigned char fl_tos;\n\tunsigned char fl_scope;\n\tunsigned char tb_id_in;\n\tunsigned char tb_id;\n\tunsigned char prefixlen;\n\tunsigned char nh_sel;\n\tunsigned char type;\n\tunsigned char scope;\n\tint err;\n};\n\nstruct fib_dump_filter {\n\tu32 table_id;\n\tbool filter_set;\n\tbool dump_routes;\n\tbool dump_exceptions;\n\tunsigned char protocol;\n\tunsigned char rt_type;\n\tunsigned int flags;\n\tstruct net_device *dev;\n};\n\nstruct fib_nh_notifier_info {\n\tstruct fib_notifier_info info;\n\tstruct fib_nh *fib_nh;\n};\n\nstruct fib_entry_notifier_info {\n\tstruct fib_notifier_info info;\n\tu32 dst;\n\tint dst_len;\n\tstruct fib_info *fi;\n\tu8 tos;\n\tu8 type;\n\tu32 tb_id;\n};\n\ntypedef unsigned int t_key;\n\nstruct key_vector {\n\tt_key key;\n\tunsigned char pos;\n\tunsigned char bits;\n\tunsigned char slen;\n\tunion {\n\t\tstruct hlist_head leaf;\n\t\tstruct key_vector *tnode[0];\n\t};\n};\n\nstruct tnode {\n\tstruct callback_head rcu;\n\tt_key empty_children;\n\tt_key full_children;\n\tstruct key_vector *parent;\n\tstruct key_vector kv[1];\n};\n\nstruct trie_use_stats {\n\tunsigned int gets;\n\tunsigned int backtrack;\n\tunsigned int semantic_match_passed;\n\tunsigned int semantic_match_miss;\n\tunsigned int null_node_hit;\n\tunsigned int resize_node_skipped;\n};\n\nstruct trie_stat {\n\tunsigned int totdepth;\n\tunsigned int maxdepth;\n\tunsigned int tnodes;\n\tunsigned int leaves;\n\tunsigned int nullpointers;\n\tunsigned int prefixes;\n\tunsigned int nodesizes[32];\n};\n\nstruct trie {\n\tstruct key_vector kv[1];\n\tstruct trie_use_stats *stats;\n};\n\nstruct fib_trie_iter {\n\tstruct seq_net_private p;\n\tstruct fib_table *tb;\n\tstruct key_vector *tnode;\n\tunsigned int index;\n\tunsigned int depth;\n};\n\nstruct fib_route_iter {\n\tstruct seq_net_private p;\n\tstruct fib_table *main_tb;\n\tstruct key_vector *tnode;\n\tloff_t pos;\n\tt_key key;\n};\n\nstruct ipfrag_skb_cb {\n\tunion {\n\t\tstruct inet_skb_parm h4;\n\t\tstruct inet6_skb_parm h6;\n\t};\n\tstruct sk_buff *next_frag;\n\tint frag_run_len;\n};\n\nstruct icmpv6_echo {\n\t__be16 identifier;\n\t__be16 sequence;\n};\n\nstruct icmpv6_nd_advt {\n\t__u32 reserved: 5;\n\t__u32 override: 1;\n\t__u32 solicited: 1;\n\t__u32 router: 1;\n\t__u32 reserved2: 24;\n};\n\nstruct icmpv6_nd_ra {\n\t__u8 hop_limit;\n\t__u8 reserved: 3;\n\t__u8 router_pref: 2;\n\t__u8 home_agent: 1;\n\t__u8 other: 1;\n\t__u8 managed: 1;\n\t__be16 rt_lifetime;\n};\n\nstruct icmp6hdr {\n\t__u8 icmp6_type;\n\t__u8 icmp6_code;\n\t__sum16 icmp6_cksum;\n\tunion {\n\t\t__be32 un_data32[1];\n\t\t__be16 un_data16[2];\n\t\t__u8 un_data8[4];\n\t\tstruct icmpv6_echo u_echo;\n\t\tstruct icmpv6_nd_advt u_nd_advt;\n\t\tstruct icmpv6_nd_ra u_nd_ra;\n\t} icmp6_dataun;\n};\n\nstruct ping_iter_state {\n\tstruct seq_net_private p;\n\tint bucket;\n\tsa_family_t family;\n};\n\nstruct pingfakehdr {\n\tstruct icmphdr icmph;\n\tstruct msghdr *msg;\n\tsa_family_t family;\n\t__wsum wcheck;\n};\n\nstruct ping_table {\n\tstruct hlist_nulls_head hash[64];\n\trwlock_t lock;\n};\n\nenum lwtunnel_ip_t {\n\tLWTUNNEL_IP_UNSPEC = 0,\n\tLWTUNNEL_IP_ID = 1,\n\tLWTUNNEL_IP_DST = 2,\n\tLWTUNNEL_IP_SRC = 3,\n\tLWTUNNEL_IP_TTL = 4,\n\tLWTUNNEL_IP_TOS = 5,\n\tLWTUNNEL_IP_FLAGS = 6,\n\tLWTUNNEL_IP_PAD = 7,\n\tLWTUNNEL_IP_OPTS = 8,\n\t__LWTUNNEL_IP_MAX = 9,\n};\n\nenum lwtunnel_ip6_t {\n\tLWTUNNEL_IP6_UNSPEC = 0,\n\tLWTUNNEL_IP6_ID = 1,\n\tLWTUNNEL_IP6_DST = 2,\n\tLWTUNNEL_IP6_SRC = 3,\n\tLWTUNNEL_IP6_HOPLIMIT = 4,\n\tLWTUNNEL_IP6_TC = 5,\n\tLWTUNNEL_IP6_FLAGS = 6,\n\tLWTUNNEL_IP6_PAD = 7,\n\tLWTUNNEL_IP6_OPTS = 8,\n\t__LWTUNNEL_IP6_MAX = 9,\n};\n\nenum {\n\tLWTUNNEL_IP_OPTS_UNSPEC = 0,\n\tLWTUNNEL_IP_OPTS_GENEVE = 1,\n\tLWTUNNEL_IP_OPTS_VXLAN = 2,\n\tLWTUNNEL_IP_OPTS_ERSPAN = 3,\n\t__LWTUNNEL_IP_OPTS_MAX = 4,\n};\n\nenum {\n\tLWTUNNEL_IP_OPT_GENEVE_UNSPEC = 0,\n\tLWTUNNEL_IP_OPT_GENEVE_CLASS = 1,\n\tLWTUNNEL_IP_OPT_GENEVE_TYPE = 2,\n\tLWTUNNEL_IP_OPT_GENEVE_DATA = 3,\n\t__LWTUNNEL_IP_OPT_GENEVE_MAX = 4,\n};\n\nenum {\n\tLWTUNNEL_IP_OPT_VXLAN_UNSPEC = 0,\n\tLWTUNNEL_IP_OPT_VXLAN_GBP = 1,\n\t__LWTUNNEL_IP_OPT_VXLAN_MAX = 2,\n};\n\nenum {\n\tLWTUNNEL_IP_OPT_ERSPAN_UNSPEC = 0,\n\tLWTUNNEL_IP_OPT_ERSPAN_VER = 1,\n\tLWTUNNEL_IP_OPT_ERSPAN_INDEX = 2,\n\tLWTUNNEL_IP_OPT_ERSPAN_DIR = 3,\n\tLWTUNNEL_IP_OPT_ERSPAN_HWID = 4,\n\t__LWTUNNEL_IP_OPT_ERSPAN_MAX = 5,\n};\n\nstruct ip6_tnl_encap_ops {\n\tsize_t (*encap_hlen)(struct ip_tunnel_encap *);\n\tint (*build_header)(struct sk_buff *, struct ip_tunnel_encap *, u8 *, struct flowi6 *);\n\tint (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);\n};\n\nstruct geneve_opt {\n\t__be16 opt_class;\n\tu8 type;\n\tu8 length: 5;\n\tu8 r3: 1;\n\tu8 r2: 1;\n\tu8 r1: 1;\n\tu8 opt_data[0];\n};\n\nstruct vxlan_metadata {\n\tu32 gbp;\n};\n\nstruct erspan_md2 {\n\t__be32 timestamp;\n\t__be16 sgt;\n\t__u8 hwid_upper: 2;\n\t__u8 ft: 5;\n\t__u8 p: 1;\n\t__u8 o: 1;\n\t__u8 gra: 2;\n\t__u8 dir: 1;\n\t__u8 hwid: 4;\n};\n\nstruct erspan_metadata {\n\tint version;\n\tunion {\n\t\t__be32 index;\n\t\tstruct erspan_md2 md2;\n\t} u;\n};\n\nstruct nhmsg {\n\tunsigned char nh_family;\n\tunsigned char nh_scope;\n\tunsigned char nh_protocol;\n\tunsigned char resvd;\n\tunsigned int nh_flags;\n};\n\nstruct nexthop_grp {\n\t__u32 id;\n\t__u8 weight;\n\t__u8 resvd1;\n\t__u16 resvd2;\n};\n\nenum {\n\tNEXTHOP_GRP_TYPE_MPATH = 0,\n\t__NEXTHOP_GRP_TYPE_MAX = 1,\n};\n\nenum {\n\tNHA_UNSPEC = 0,\n\tNHA_ID = 1,\n\tNHA_GROUP = 2,\n\tNHA_GROUP_TYPE = 3,\n\tNHA_BLACKHOLE = 4,\n\tNHA_OIF = 5,\n\tNHA_GATEWAY = 6,\n\tNHA_ENCAP_TYPE = 7,\n\tNHA_ENCAP = 8,\n\tNHA_GROUPS = 9,\n\tNHA_MASTER = 10,\n\tNHA_FDB = 11,\n\t__NHA_MAX = 12,\n};\n\nstruct nh_config {\n\tu32 nh_id;\n\tu8 nh_family;\n\tu8 nh_protocol;\n\tu8 nh_blackhole;\n\tu8 nh_fdb;\n\tu32 nh_flags;\n\tint nh_ifindex;\n\tstruct net_device *dev;\n\tunion {\n\t\t__be32 ipv4;\n\t\tstruct in6_addr ipv6;\n\t} gw;\n\tstruct nlattr *nh_grp;\n\tu16 nh_grp_type;\n\tstruct nlattr *nh_encap;\n\tu16 nh_encap_type;\n\tu32 nlflags;\n\tstruct nl_info nlinfo;\n};\n\nenum nexthop_event_type {\n\tNEXTHOP_EVENT_DEL = 0,\n\tNEXTHOP_EVENT_REPLACE = 1,\n};\n\nstruct nh_notifier_single_info {\n\tstruct net_device *dev;\n\tu8 gw_family;\n\tunion {\n\t\t__be32 ipv4;\n\t\tstruct in6_addr ipv6;\n\t};\n\tu8 is_reject: 1;\n\tu8 is_fdb: 1;\n\tu8 has_encap: 1;\n};\n\nstruct nh_notifier_grp_entry_info {\n\tu8 weight;\n\tu32 id;\n\tstruct nh_notifier_single_info nh;\n};\n\nstruct nh_notifier_grp_info {\n\tu16 num_nh;\n\tbool is_fdb;\n\tstruct nh_notifier_grp_entry_info nh_entries[0];\n};\n\nstruct nh_notifier_info {\n\tstruct net *net;\n\tstruct netlink_ext_ack *extack;\n\tu32 id;\n\tbool is_grp;\n\tunion {\n\t\tstruct nh_notifier_single_info *nh;\n\t\tstruct nh_notifier_grp_info *nh_grp;\n\t};\n};\n\nstruct inet6_protocol {\n\tvoid (*early_demux)(struct sk_buff *);\n\tvoid (*early_demux_handler)(struct sk_buff *);\n\tint (*handler)(struct sk_buff *);\n\tint (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);\n\tunsigned int flags;\n};\n\nstruct snmp_mib {\n\tconst char *name;\n\tint entry;\n};\n\nstruct fib4_rule {\n\tstruct fib_rule common;\n\tu8 dst_len;\n\tu8 src_len;\n\tu8 tos;\n\t__be32 src;\n\t__be32 srcmask;\n\t__be32 dst;\n\t__be32 dstmask;\n\tu32 tclassid;\n};\n\nenum {\n\tPIM_TYPE_HELLO = 0,\n\tPIM_TYPE_REGISTER = 1,\n\tPIM_TYPE_REGISTER_STOP = 2,\n\tPIM_TYPE_JOIN_PRUNE = 3,\n\tPIM_TYPE_BOOTSTRAP = 4,\n\tPIM_TYPE_ASSERT = 5,\n\tPIM_TYPE_GRAFT = 6,\n\tPIM_TYPE_GRAFT_ACK = 7,\n\tPIM_TYPE_CANDIDATE_RP_ADV = 8,\n};\n\nstruct pimreghdr {\n\t__u8 type;\n\t__u8 reserved;\n\t__be16 csum;\n\t__be32 flags;\n};\n\ntypedef short unsigned int vifi_t;\n\nstruct vifctl {\n\tvifi_t vifc_vifi;\n\tunsigned char vifc_flags;\n\tunsigned char vifc_threshold;\n\tunsigned int vifc_rate_limit;\n\tunion {\n\t\tstruct in_addr vifc_lcl_addr;\n\t\tint vifc_lcl_ifindex;\n\t};\n\tstruct in_addr vifc_rmt_addr;\n};\n\nstruct mfcctl {\n\tstruct in_addr mfcc_origin;\n\tstruct in_addr mfcc_mcastgrp;\n\tvifi_t mfcc_parent;\n\tunsigned char mfcc_ttls[32];\n\tunsigned int mfcc_pkt_cnt;\n\tunsigned int mfcc_byte_cnt;\n\tunsigned int mfcc_wrong_if;\n\tint mfcc_expire;\n};\n\nstruct sioc_sg_req {\n\tstruct in_addr src;\n\tstruct in_addr grp;\n\tlong unsigned int pktcnt;\n\tlong unsigned int bytecnt;\n\tlong unsigned int wrong_if;\n};\n\nstruct sioc_vif_req {\n\tvifi_t vifi;\n\tlong unsigned int icount;\n\tlong unsigned int ocount;\n\tlong unsigned int ibytes;\n\tlong unsigned int obytes;\n};\n\nstruct igmpmsg {\n\t__u32 unused1;\n\t__u32 unused2;\n\tunsigned char im_msgtype;\n\tunsigned char im_mbz;\n\tunsigned char im_vif;\n\tunsigned char im_vif_hi;\n\tstruct in_addr im_src;\n\tstruct in_addr im_dst;\n};\n\nenum {\n\tIPMRA_TABLE_UNSPEC = 0,\n\tIPMRA_TABLE_ID = 1,\n\tIPMRA_TABLE_CACHE_RES_QUEUE_LEN = 2,\n\tIPMRA_TABLE_MROUTE_REG_VIF_NUM = 3,\n\tIPMRA_TABLE_MROUTE_DO_ASSERT = 4,\n\tIPMRA_TABLE_MROUTE_DO_PIM = 5,\n\tIPMRA_TABLE_VIFS = 6,\n\tIPMRA_TABLE_MROUTE_DO_WRVIFWHOLE = 7,\n\t__IPMRA_TABLE_MAX = 8,\n};\n\nenum {\n\tIPMRA_VIF_UNSPEC = 0,\n\tIPMRA_VIF = 1,\n\t__IPMRA_VIF_MAX = 2,\n};\n\nenum {\n\tIPMRA_VIFA_UNSPEC = 0,\n\tIPMRA_VIFA_IFINDEX = 1,\n\tIPMRA_VIFA_VIF_ID = 2,\n\tIPMRA_VIFA_FLAGS = 3,\n\tIPMRA_VIFA_BYTES_IN = 4,\n\tIPMRA_VIFA_BYTES_OUT = 5,\n\tIPMRA_VIFA_PACKETS_IN = 6,\n\tIPMRA_VIFA_PACKETS_OUT = 7,\n\tIPMRA_VIFA_LOCAL_ADDR = 8,\n\tIPMRA_VIFA_REMOTE_ADDR = 9,\n\tIPMRA_VIFA_PAD = 10,\n\t__IPMRA_VIFA_MAX = 11,\n};\n\nenum {\n\tIPMRA_CREPORT_UNSPEC = 0,\n\tIPMRA_CREPORT_MSGTYPE = 1,\n\tIPMRA_CREPORT_VIF_ID = 2,\n\tIPMRA_CREPORT_SRC_ADDR = 3,\n\tIPMRA_CREPORT_DST_ADDR = 4,\n\tIPMRA_CREPORT_PKT = 5,\n\tIPMRA_CREPORT_TABLE = 6,\n\t__IPMRA_CREPORT_MAX = 7,\n};\n\nstruct vif_device {\n\tstruct net_device *dev;\n\tlong unsigned int bytes_in;\n\tlong unsigned int bytes_out;\n\tlong unsigned int pkt_in;\n\tlong unsigned int pkt_out;\n\tlong unsigned int rate_limit;\n\tunsigned char threshold;\n\tshort unsigned int flags;\n\tint link;\n\tstruct netdev_phys_item_id dev_parent_id;\n\t__be32 local;\n\t__be32 remote;\n};\n\nstruct vif_entry_notifier_info {\n\tstruct fib_notifier_info info;\n\tstruct net_device *dev;\n\tshort unsigned int vif_index;\n\tshort unsigned int vif_flags;\n\tu32 tb_id;\n};\n\nenum {\n\tMFC_STATIC = 1,\n\tMFC_OFFLOAD = 2,\n};\n\nstruct mr_mfc {\n\tstruct rhlist_head mnode;\n\tshort unsigned int mfc_parent;\n\tint mfc_flags;\n\tunion {\n\t\tstruct {\n\t\t\tlong unsigned int expires;\n\t\t\tstruct sk_buff_head unresolved;\n\t\t} unres;\n\t\tstruct {\n\t\t\tlong unsigned int last_assert;\n\t\t\tint minvif;\n\t\t\tint maxvif;\n\t\t\tlong unsigned int bytes;\n\t\t\tlong unsigned int pkt;\n\t\t\tlong unsigned int wrong_if;\n\t\t\tlong unsigned int lastuse;\n\t\t\tunsigned char ttls[32];\n\t\t\trefcount_t refcount;\n\t\t} res;\n\t} mfc_un;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n\tvoid (*free)(struct callback_head *);\n};\n\nstruct mfc_entry_notifier_info {\n\tstruct fib_notifier_info info;\n\tstruct mr_mfc *mfc;\n\tu32 tb_id;\n};\n\nstruct mr_table_ops {\n\tconst struct rhashtable_params *rht_params;\n\tvoid *cmparg_any;\n};\n\nstruct mr_table {\n\tstruct list_head list;\n\tpossible_net_t net;\n\tstruct mr_table_ops ops;\n\tu32 id;\n\tstruct sock *mroute_sk;\n\tstruct timer_list ipmr_expire_timer;\n\tstruct list_head mfc_unres_queue;\n\tstruct vif_device vif_table[32];\n\tstruct rhltable mfc_hash;\n\tstruct list_head mfc_cache_list;\n\tint maxvif;\n\tatomic_t cache_resolve_queue_len;\n\tbool mroute_do_assert;\n\tbool mroute_do_pim;\n\tbool mroute_do_wrvifwhole;\n\tint mroute_reg_vif_num;\n};\n\nstruct mr_vif_iter {\n\tstruct seq_net_private p;\n\tstruct mr_table *mrt;\n\tint ct;\n};\n\nstruct mr_mfc_iter {\n\tstruct seq_net_private p;\n\tstruct mr_table *mrt;\n\tstruct list_head *cache;\n\tspinlock_t *lock;\n};\n\nstruct mfc_cache_cmp_arg {\n\t__be32 mfc_mcastgrp;\n\t__be32 mfc_origin;\n};\n\nstruct mfc_cache {\n\tstruct mr_mfc _c;\n\tunion {\n\t\tstruct {\n\t\t\t__be32 mfc_mcastgrp;\n\t\t\t__be32 mfc_origin;\n\t\t};\n\t\tstruct mfc_cache_cmp_arg cmparg;\n\t};\n};\n\nstruct ipmr_result {\n\tstruct mr_table *mrt;\n};\n\nstruct compat_sioc_sg_req {\n\tstruct in_addr src;\n\tstruct in_addr grp;\n\tcompat_ulong_t pktcnt;\n\tcompat_ulong_t bytecnt;\n\tcompat_ulong_t wrong_if;\n};\n\nstruct compat_sioc_vif_req {\n\tvifi_t vifi;\n\tcompat_ulong_t icount;\n\tcompat_ulong_t ocount;\n\tcompat_ulong_t ibytes;\n\tcompat_ulong_t obytes;\n};\n\nstruct rta_mfc_stats {\n\t__u64 mfcs_packets;\n\t__u64 mfcs_bytes;\n\t__u64 mfcs_wrong_if;\n};\n\nstruct bictcp {\n\tu32 cnt;\n\tu32 last_max_cwnd;\n\tu32 last_cwnd;\n\tu32 last_time;\n\tu32 bic_origin_point;\n\tu32 bic_K;\n\tu32 delay_min;\n\tu32 epoch_start;\n\tu32 ack_cnt;\n\tu32 tcp_cwnd;\n\tu16 unused;\n\tu8 sample_cnt;\n\tu8 found;\n\tu32 round_start;\n\tu32 end_seq;\n\tu32 last_ack;\n\tu32 curr_rtt;\n};\n\nstruct tls_rec {\n\tstruct list_head list;\n\tint tx_ready;\n\tint tx_flags;\n\tstruct sk_msg msg_plaintext;\n\tstruct sk_msg msg_encrypted;\n\tstruct scatterlist sg_aead_in[2];\n\tstruct scatterlist sg_aead_out[2];\n\tchar content_type;\n\tstruct scatterlist sg_content_type;\n\tchar aad_space[13];\n\tu8 iv_data[16];\n\tstruct aead_request aead_req;\n\tu8 aead_req_ctx[0];\n};\n\nstruct tx_work {\n\tstruct delayed_work work;\n\tstruct sock *sk;\n};\n\nstruct tls_sw_context_tx {\n\tstruct crypto_aead *aead_send;\n\tstruct crypto_wait async_wait;\n\tstruct tx_work tx_work;\n\tstruct tls_rec *open_rec;\n\tstruct list_head tx_list;\n\tatomic_t encrypt_pending;\n\tspinlock_t encrypt_compl_lock;\n\tint async_notify;\n\tu8 async_capable: 1;\n\tlong unsigned int tx_bitmask;\n};\n\nenum {\n\tTCP_BPF_IPV4 = 0,\n\tTCP_BPF_IPV6 = 1,\n\tTCP_BPF_NUM_PROTS = 2,\n};\n\nenum {\n\tTCP_BPF_BASE = 0,\n\tTCP_BPF_TX = 1,\n\tTCP_BPF_NUM_CFGS = 2,\n};\n\nenum {\n\tUDP_BPF_IPV4 = 0,\n\tUDP_BPF_IPV6 = 1,\n\tUDP_BPF_NUM_PROTS = 2,\n};\n\nstruct netlbl_audit {\n\tu32 secid;\n\tkuid_t loginuid;\n\tunsigned int sessionid;\n};\n\nstruct cipso_v4_std_map_tbl {\n\tstruct {\n\t\tu32 *cipso;\n\t\tu32 *local;\n\t\tu32 cipso_size;\n\t\tu32 local_size;\n\t} lvl;\n\tstruct {\n\t\tu32 *cipso;\n\t\tu32 *local;\n\t\tu32 cipso_size;\n\t\tu32 local_size;\n\t} cat;\n};\n\nstruct cipso_v4_doi {\n\tu32 doi;\n\tu32 type;\n\tunion {\n\t\tstruct cipso_v4_std_map_tbl *std;\n\t} map;\n\tu8 tags[5];\n\trefcount_t refcount;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n};\n\nstruct cipso_v4_map_cache_bkt {\n\tspinlock_t lock;\n\tu32 size;\n\tstruct list_head list;\n};\n\nstruct cipso_v4_map_cache_entry {\n\tu32 hash;\n\tunsigned char *key;\n\tsize_t key_len;\n\tstruct netlbl_lsm_cache *lsm_data;\n\tu32 activity;\n\tstruct list_head list;\n};\n\nstruct xfrm_policy_afinfo {\n\tstruct dst_ops *dst_ops;\n\tstruct dst_entry * (*dst_lookup)(struct net *, int, int, const xfrm_address_t *, const xfrm_address_t *, u32);\n\tint (*get_saddr)(struct net *, int, xfrm_address_t *, xfrm_address_t *, u32);\n\tint (*fill_dst)(struct xfrm_dst *, struct net_device *, const struct flowi *);\n\tstruct dst_entry * (*blackhole_route)(struct net *, struct dst_entry *);\n};\n\nstruct xfrm_state_afinfo {\n\tu8 family;\n\tu8 proto;\n\tconst struct xfrm_type_offload *type_offload_esp;\n\tconst struct xfrm_type *type_esp;\n\tconst struct xfrm_type *type_ipip;\n\tconst struct xfrm_type *type_ipip6;\n\tconst struct xfrm_type *type_comp;\n\tconst struct xfrm_type *type_ah;\n\tconst struct xfrm_type *type_routing;\n\tconst struct xfrm_type *type_dstopts;\n\tint (*output)(struct net *, struct sock *, struct sk_buff *);\n\tint (*transport_finish)(struct sk_buff *, int);\n\tvoid (*local_error)(struct sk_buff *, u32);\n};\n\nstruct ip_tunnel;\n\nstruct ip6_tnl;\n\nstruct xfrm_tunnel_skb_cb {\n\tunion {\n\t\tstruct inet_skb_parm h4;\n\t\tstruct inet6_skb_parm h6;\n\t} header;\n\tunion {\n\t\tstruct ip_tunnel *ip4;\n\t\tstruct ip6_tnl *ip6;\n\t} tunnel;\n};\n\nstruct xfrm_mode_skb_cb {\n\tstruct xfrm_tunnel_skb_cb header;\n\t__be16 id;\n\t__be16 frag_off;\n\tu8 ihl;\n\tu8 tos;\n\tu8 ttl;\n\tu8 protocol;\n\tu8 optlen;\n\tu8 flow_lbl[3];\n};\n\nstruct xfrm_spi_skb_cb {\n\tstruct xfrm_tunnel_skb_cb header;\n\tunsigned int daddroff;\n\tunsigned int family;\n\t__be32 seq;\n};\n\nstruct xfrm_input_afinfo {\n\tu8 family;\n\tbool is_ipip;\n\tint (*callback)(struct sk_buff *, u8, int);\n};\n\nstruct xfrm4_protocol {\n\tint (*handler)(struct sk_buff *);\n\tint (*input_handler)(struct sk_buff *, int, __be32, int);\n\tint (*cb_handler)(struct sk_buff *, int);\n\tint (*err_handler)(struct sk_buff *, u32);\n\tstruct xfrm4_protocol *next;\n\tint priority;\n};\n\ntypedef u64 (*btf_bpf_tcp_send_ack)(struct tcp_sock *, u32);\n\nstruct seqcount_mutex {\n\tseqcount_t seqcount;\n};\n\ntypedef struct seqcount_mutex seqcount_mutex_t;\n\nenum {\n\tXFRM_STATE_VOID = 0,\n\tXFRM_STATE_ACQ = 1,\n\tXFRM_STATE_VALID = 2,\n\tXFRM_STATE_ERROR = 3,\n\tXFRM_STATE_EXPIRED = 4,\n\tXFRM_STATE_DEAD = 5,\n};\n\nstruct xfrm_if;\n\nstruct xfrm_if_cb {\n\tstruct xfrm_if * (*decode_session)(struct sk_buff *, short unsigned int);\n};\n\nstruct xfrm_if_parms {\n\tint link;\n\tu32 if_id;\n};\n\nstruct xfrm_if {\n\tstruct xfrm_if *next;\n\tstruct net_device *dev;\n\tstruct net *net;\n\tstruct xfrm_if_parms p;\n\tstruct gro_cells gro_cells;\n};\n\nstruct xfrm_policy_walk {\n\tstruct xfrm_policy_walk_entry walk;\n\tu8 type;\n\tu32 seq;\n};\n\nstruct xfrm_kmaddress {\n\txfrm_address_t local;\n\txfrm_address_t remote;\n\tu32 reserved;\n\tu16 family;\n};\n\nstruct xfrm_migrate {\n\txfrm_address_t old_daddr;\n\txfrm_address_t old_saddr;\n\txfrm_address_t new_daddr;\n\txfrm_address_t new_saddr;\n\tu8 proto;\n\tu8 mode;\n\tu16 reserved;\n\tu32 reqid;\n\tu16 old_family;\n\tu16 new_family;\n};\n\nstruct xfrmk_spdinfo {\n\tu32 incnt;\n\tu32 outcnt;\n\tu32 fwdcnt;\n\tu32 inscnt;\n\tu32 outscnt;\n\tu32 fwdscnt;\n\tu32 spdhcnt;\n\tu32 spdhmcnt;\n};\n\nstruct ip6_mh {\n\t__u8 ip6mh_proto;\n\t__u8 ip6mh_hdrlen;\n\t__u8 ip6mh_type;\n\t__u8 ip6mh_reserved;\n\t__u16 ip6mh_cksum;\n\t__u8 data[0];\n};\n\nstruct xfrm_flo {\n\tstruct dst_entry *dst_orig;\n\tu8 flags;\n};\n\nstruct xfrm_pol_inexact_node {\n\tstruct rb_node node;\n\tunion {\n\t\txfrm_address_t addr;\n\t\tstruct callback_head rcu;\n\t};\n\tu8 prefixlen;\n\tstruct rb_root root;\n\tstruct hlist_head hhead;\n};\n\nstruct xfrm_pol_inexact_key {\n\tpossible_net_t net;\n\tu32 if_id;\n\tu16 family;\n\tu8 dir;\n\tu8 type;\n};\n\nstruct xfrm_pol_inexact_bin {\n\tstruct xfrm_pol_inexact_key k;\n\tstruct rhash_head head;\n\tstruct hlist_head hhead;\n\tseqcount_spinlock_t count;\n\tstruct rb_root root_d;\n\tstruct rb_root root_s;\n\tstruct list_head inexact_bins;\n\tstruct callback_head rcu;\n};\n\nenum xfrm_pol_inexact_candidate_type {\n\tXFRM_POL_CAND_BOTH = 0,\n\tXFRM_POL_CAND_SADDR = 1,\n\tXFRM_POL_CAND_DADDR = 2,\n\tXFRM_POL_CAND_ANY = 3,\n\tXFRM_POL_CAND_MAX = 4,\n};\n\nstruct xfrm_pol_inexact_candidates {\n\tstruct hlist_head *res[4];\n};\n\nenum xfrm_ae_ftype_t {\n\tXFRM_AE_UNSPEC = 0,\n\tXFRM_AE_RTHR = 1,\n\tXFRM_AE_RVAL = 2,\n\tXFRM_AE_LVAL = 4,\n\tXFRM_AE_ETHR = 8,\n\tXFRM_AE_CR = 16,\n\tXFRM_AE_CE = 32,\n\tXFRM_AE_CU = 64,\n\t__XFRM_AE_MAX = 65,\n};\n\nenum xfrm_nlgroups {\n\tXFRMNLGRP_NONE = 0,\n\tXFRMNLGRP_ACQUIRE = 1,\n\tXFRMNLGRP_EXPIRE = 2,\n\tXFRMNLGRP_SA = 3,\n\tXFRMNLGRP_POLICY = 4,\n\tXFRMNLGRP_AEVENTS = 5,\n\tXFRMNLGRP_REPORT = 6,\n\tXFRMNLGRP_MIGRATE = 7,\n\tXFRMNLGRP_MAPPING = 8,\n\t__XFRMNLGRP_MAX = 9,\n};\n\nenum {\n\tXFRM_MODE_FLAG_TUNNEL = 1,\n};\n\nstruct km_event {\n\tunion {\n\t\tu32 hard;\n\t\tu32 proto;\n\t\tu32 byid;\n\t\tu32 aevent;\n\t\tu32 type;\n\t} data;\n\tu32 seq;\n\tu32 portid;\n\tu32 event;\n\tstruct net *net;\n};\n\nstruct xfrm_mgr {\n\tstruct list_head list;\n\tint (*notify)(struct xfrm_state *, const struct km_event *);\n\tint (*acquire)(struct xfrm_state *, struct xfrm_tmpl *, struct xfrm_policy *);\n\tstruct xfrm_policy * (*compile_policy)(struct sock *, int, u8 *, int, int *);\n\tint (*new_mapping)(struct xfrm_state *, xfrm_address_t *, __be16);\n\tint (*notify_policy)(struct xfrm_policy *, int, const struct km_event *);\n\tint (*report)(struct net *, u8, struct xfrm_selector *, xfrm_address_t *);\n\tint (*migrate)(const struct xfrm_selector *, u8, u8, const struct xfrm_migrate *, int, const struct xfrm_kmaddress *, const struct xfrm_encap_tmpl *);\n\tbool (*is_alive)(const struct km_event *);\n};\n\nstruct xfrmk_sadinfo {\n\tu32 sadhcnt;\n\tu32 sadhmcnt;\n\tu32 sadcnt;\n};\n\nstruct xfrm_translator {\n\tint (*alloc_compat)(struct sk_buff *, const struct nlmsghdr *);\n\tstruct nlmsghdr * (*rcv_msg_compat)(const struct nlmsghdr *, int, const struct nla_policy *, struct netlink_ext_ack *);\n\tint (*xlate_user_policy_sockptr)(u8 **, int);\n\tstruct module *owner;\n};\n\nstruct ip_beet_phdr {\n\t__u8 nexthdr;\n\t__u8 hdrlen;\n\t__u8 padlen;\n\t__u8 reserved;\n};\n\nstruct ip_tunnel_6rd_parm {\n\tstruct in6_addr prefix;\n\t__be32 relay_prefix;\n\tu16 prefixlen;\n\tu16 relay_prefixlen;\n};\n\nstruct ip_tunnel_prl_entry;\n\nstruct ip_tunnel {\n\tstruct ip_tunnel *next;\n\tstruct hlist_node hash_node;\n\tstruct net_device *dev;\n\tstruct net *net;\n\tlong unsigned int err_time;\n\tint err_count;\n\tu32 i_seqno;\n\tu32 o_seqno;\n\tint tun_hlen;\n\tu32 index;\n\tu8 erspan_ver;\n\tu8 dir;\n\tu16 hwid;\n\tstruct dst_cache dst_cache;\n\tstruct ip_tunnel_parm parms;\n\tint mlink;\n\tint encap_hlen;\n\tint hlen;\n\tstruct ip_tunnel_encap encap;\n\tstruct ip_tunnel_6rd_parm ip6rd;\n\tstruct ip_tunnel_prl_entry *prl;\n\tunsigned int prl_count;\n\tunsigned int ip_tnl_net_id;\n\tstruct gro_cells gro_cells;\n\t__u32 fwmark;\n\tbool collect_md;\n\tbool ignore_df;\n};\n\nstruct __ip6_tnl_parm {\n\tchar name[16];\n\tint link;\n\t__u8 proto;\n\t__u8 encap_limit;\n\t__u8 hop_limit;\n\tbool collect_md;\n\t__be32 flowinfo;\n\t__u32 flags;\n\tstruct in6_addr laddr;\n\tstruct in6_addr raddr;\n\t__be16 i_flags;\n\t__be16 o_flags;\n\t__be32 i_key;\n\t__be32 o_key;\n\t__u32 fwmark;\n\t__u32 index;\n\t__u8 erspan_ver;\n\t__u8 dir;\n\t__u16 hwid;\n};\n\nstruct ip6_tnl {\n\tstruct ip6_tnl *next;\n\tstruct net_device *dev;\n\tstruct net *net;\n\tstruct __ip6_tnl_parm parms;\n\tstruct flowi fl;\n\tstruct dst_cache dst_cache;\n\tstruct gro_cells gro_cells;\n\tint err_count;\n\tlong unsigned int err_time;\n\t__u32 i_seqno;\n\t__u32 o_seqno;\n\tint hlen;\n\tint tun_hlen;\n\tint encap_hlen;\n\tstruct ip_tunnel_encap encap;\n\tint mlink;\n};\n\nstruct xfrm_skb_cb {\n\tstruct xfrm_tunnel_skb_cb header;\n\tunion {\n\t\tstruct {\n\t\t\t__u32 low;\n\t\t\t__u32 hi;\n\t\t} output;\n\t\tstruct {\n\t\t\t__be32 low;\n\t\t\t__be32 hi;\n\t\t} input;\n\t} seq;\n};\n\nstruct ip_tunnel_prl_entry {\n\tstruct ip_tunnel_prl_entry *next;\n\t__be32 addr;\n\tu16 flags;\n\tstruct callback_head callback_head;\n};\n\nstruct xfrm_trans_tasklet {\n\tstruct tasklet_struct tasklet;\n\tstruct sk_buff_head queue;\n};\n\nstruct xfrm_trans_cb {\n\tunion {\n\t\tstruct inet_skb_parm h4;\n\t\tstruct inet6_skb_parm h6;\n\t} header;\n\tint (*finish)(struct net *, struct sock *, struct sk_buff *);\n\tstruct net *net;\n};\n\nstruct xfrm_user_offload {\n\tint ifindex;\n\t__u8 flags;\n};\n\nstruct sadb_alg {\n\t__u8 sadb_alg_id;\n\t__u8 sadb_alg_ivlen;\n\t__u16 sadb_alg_minbits;\n\t__u16 sadb_alg_maxbits;\n\t__u16 sadb_alg_reserved;\n};\n\nstruct xfrm_algo_aead_info {\n\tchar *geniv;\n\tu16 icv_truncbits;\n};\n\nstruct xfrm_algo_auth_info {\n\tu16 icv_truncbits;\n\tu16 icv_fullbits;\n};\n\nstruct xfrm_algo_encr_info {\n\tchar *geniv;\n\tu16 blockbits;\n\tu16 defkeybits;\n};\n\nstruct xfrm_algo_comp_info {\n\tu16 threshold;\n};\n\nstruct xfrm_algo_desc {\n\tchar *name;\n\tchar *compat;\n\tu8 available: 1;\n\tu8 pfkey_supported: 1;\n\tunion {\n\t\tstruct xfrm_algo_aead_info aead;\n\t\tstruct xfrm_algo_auth_info auth;\n\t\tstruct xfrm_algo_encr_info encr;\n\t\tstruct xfrm_algo_comp_info comp;\n\t} uinfo;\n\tstruct sadb_alg desc;\n};\n\nstruct xfrm_algo_list {\n\tstruct xfrm_algo_desc *algs;\n\tint entries;\n\tu32 type;\n\tu32 mask;\n};\n\nstruct xfrm_aead_name {\n\tconst char *name;\n\tint icvbits;\n};\n\nenum {\n\tXFRM_SHARE_ANY = 0,\n\tXFRM_SHARE_SESSION = 1,\n\tXFRM_SHARE_USER = 2,\n\tXFRM_SHARE_UNIQUE = 3,\n};\n\nstruct xfrm_user_tmpl {\n\tstruct xfrm_id id;\n\t__u16 family;\n\txfrm_address_t saddr;\n\t__u32 reqid;\n\t__u8 mode;\n\t__u8 share;\n\t__u8 optional;\n\t__u32 aalgos;\n\t__u32 ealgos;\n\t__u32 calgos;\n};\n\nstruct xfrm_userpolicy_type {\n\t__u8 type;\n\t__u16 reserved1;\n\t__u8 reserved2;\n};\n\nenum xfrm_sadattr_type_t {\n\tXFRMA_SAD_UNSPEC = 0,\n\tXFRMA_SAD_CNT = 1,\n\tXFRMA_SAD_HINFO = 2,\n\t__XFRMA_SAD_MAX = 3,\n};\n\nstruct xfrmu_sadhinfo {\n\t__u32 sadhcnt;\n\t__u32 sadhmcnt;\n};\n\nenum xfrm_spdattr_type_t {\n\tXFRMA_SPD_UNSPEC = 0,\n\tXFRMA_SPD_INFO = 1,\n\tXFRMA_SPD_HINFO = 2,\n\tXFRMA_SPD_IPV4_HTHRESH = 3,\n\tXFRMA_SPD_IPV6_HTHRESH = 4,\n\t__XFRMA_SPD_MAX = 5,\n};\n\nstruct xfrmu_spdinfo {\n\t__u32 incnt;\n\t__u32 outcnt;\n\t__u32 fwdcnt;\n\t__u32 inscnt;\n\t__u32 outscnt;\n\t__u32 fwdscnt;\n};\n\nstruct xfrmu_spdhinfo {\n\t__u32 spdhcnt;\n\t__u32 spdhmcnt;\n};\n\nstruct xfrmu_spdhthresh {\n\t__u8 lbits;\n\t__u8 rbits;\n};\n\nstruct xfrm_usersa_info {\n\tstruct xfrm_selector sel;\n\tstruct xfrm_id id;\n\txfrm_address_t saddr;\n\tstruct xfrm_lifetime_cfg lft;\n\tstruct xfrm_lifetime_cur curlft;\n\tstruct xfrm_stats stats;\n\t__u32 seq;\n\t__u32 reqid;\n\t__u16 family;\n\t__u8 mode;\n\t__u8 replay_window;\n\t__u8 flags;\n};\n\nstruct xfrm_usersa_id {\n\txfrm_address_t daddr;\n\t__be32 spi;\n\t__u16 family;\n\t__u8 proto;\n};\n\nstruct xfrm_aevent_id {\n\tstruct xfrm_usersa_id sa_id;\n\txfrm_address_t saddr;\n\t__u32 flags;\n\t__u32 reqid;\n};\n\nstruct xfrm_userspi_info {\n\tstruct xfrm_usersa_info info;\n\t__u32 min;\n\t__u32 max;\n};\n\nstruct xfrm_userpolicy_info {\n\tstruct xfrm_selector sel;\n\tstruct xfrm_lifetime_cfg lft;\n\tstruct xfrm_lifetime_cur curlft;\n\t__u32 priority;\n\t__u32 index;\n\t__u8 dir;\n\t__u8 action;\n\t__u8 flags;\n\t__u8 share;\n};\n\nstruct xfrm_userpolicy_id {\n\tstruct xfrm_selector sel;\n\t__u32 index;\n\t__u8 dir;\n};\n\nstruct xfrm_user_acquire {\n\tstruct xfrm_id id;\n\txfrm_address_t saddr;\n\tstruct xfrm_selector sel;\n\tstruct xfrm_userpolicy_info policy;\n\t__u32 aalgos;\n\t__u32 ealgos;\n\t__u32 calgos;\n\t__u32 seq;\n};\n\nstruct xfrm_user_expire {\n\tstruct xfrm_usersa_info state;\n\t__u8 hard;\n};\n\nstruct xfrm_user_polexpire {\n\tstruct xfrm_userpolicy_info pol;\n\t__u8 hard;\n};\n\nstruct xfrm_usersa_flush {\n\t__u8 proto;\n};\n\nstruct xfrm_user_report {\n\t__u8 proto;\n\tstruct xfrm_selector sel;\n};\n\nstruct xfrm_user_kmaddress {\n\txfrm_address_t local;\n\txfrm_address_t remote;\n\t__u32 reserved;\n\t__u16 family;\n};\n\nstruct xfrm_user_migrate {\n\txfrm_address_t old_daddr;\n\txfrm_address_t old_saddr;\n\txfrm_address_t new_daddr;\n\txfrm_address_t new_saddr;\n\t__u8 proto;\n\t__u8 mode;\n\t__u16 reserved;\n\t__u32 reqid;\n\t__u16 old_family;\n\t__u16 new_family;\n};\n\nstruct xfrm_user_mapping {\n\tstruct xfrm_usersa_id id;\n\t__u32 reqid;\n\txfrm_address_t old_saddr;\n\txfrm_address_t new_saddr;\n\t__be16 old_sport;\n\t__be16 new_sport;\n};\n\nstruct xfrm_dump_info {\n\tstruct sk_buff *in_skb;\n\tstruct sk_buff *out_skb;\n\tu32 nlmsg_seq;\n\tu16 nlmsg_flags;\n};\n\nstruct xfrm_link {\n\tint (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **);\n\tint (*start)(struct netlink_callback *);\n\tint (*dump)(struct sk_buff *, struct netlink_callback *);\n\tint (*done)(struct netlink_callback *);\n\tconst struct nla_policy *nla_pol;\n\tint nla_max;\n};\n\nstruct espintcp_msg {\n\tstruct sk_buff *skb;\n\tstruct sk_msg skmsg;\n\tint offset;\n\tint len;\n};\n\nstruct espintcp_ctx {\n\tstruct strparser strp;\n\tstruct sk_buff_head ike_queue;\n\tstruct sk_buff_head out_queue;\n\tstruct espintcp_msg partial;\n\tvoid (*saved_data_ready)(struct sock *);\n\tvoid (*saved_write_space)(struct sock *);\n\tvoid (*saved_destruct)(struct sock *);\n\tstruct work_struct work;\n\tbool tx_running;\n};\n\nstruct unix_stream_read_state {\n\tint (*recv_actor)(struct sk_buff *, int, int, struct unix_stream_read_state *);\n\tstruct socket *socket;\n\tstruct msghdr *msg;\n\tstruct pipe_inode_info *pipe;\n\tsize_t size;\n\tint flags;\n\tunsigned int splice_flags;\n};\n\nstruct ipv6_params {\n\t__s32 disable_ipv6;\n\t__s32 autoconf;\n};\n\nenum flowlabel_reflect {\n\tFLOWLABEL_REFLECT_ESTABLISHED = 1,\n\tFLOWLABEL_REFLECT_TCP_RESET = 2,\n\tFLOWLABEL_REFLECT_ICMPV6_ECHO_REPLIES = 4,\n};\n\nstruct in6_rtmsg {\n\tstruct in6_addr rtmsg_dst;\n\tstruct in6_addr rtmsg_src;\n\tstruct in6_addr rtmsg_gateway;\n\t__u32 rtmsg_type;\n\t__u16 rtmsg_dst_len;\n\t__u16 rtmsg_src_len;\n\t__u32 rtmsg_metric;\n\tlong unsigned int rtmsg_info;\n\t__u32 rtmsg_flags;\n\tint rtmsg_ifindex;\n};\n\nstruct compat_in6_rtmsg {\n\tstruct in6_addr rtmsg_dst;\n\tstruct in6_addr rtmsg_src;\n\tstruct in6_addr rtmsg_gateway;\n\tu32 rtmsg_type;\n\tu16 rtmsg_dst_len;\n\tu16 rtmsg_src_len;\n\tu32 rtmsg_metric;\n\tu32 rtmsg_info;\n\tu32 rtmsg_flags;\n\ts32 rtmsg_ifindex;\n};\n\nstruct ac6_iter_state {\n\tstruct seq_net_private p;\n\tstruct net_device *dev;\n\tstruct inet6_dev *idev;\n};\n\nstruct ip6_fraglist_iter {\n\tstruct ipv6hdr *tmp_hdr;\n\tstruct sk_buff *frag;\n\tint offset;\n\tunsigned int hlen;\n\t__be32 frag_id;\n\tu8 nexthdr;\n};\n\nstruct ip6_frag_state {\n\tu8 *prevhdr;\n\tunsigned int hlen;\n\tunsigned int mtu;\n\tunsigned int left;\n\tint offset;\n\tint ptr;\n\tint hroom;\n\tint troom;\n\t__be32 frag_id;\n\tu8 nexthdr;\n};\n\nstruct ip6_ra_chain {\n\tstruct ip6_ra_chain *next;\n\tstruct sock *sk;\n\tint sel;\n\tvoid (*destructor)(struct sock *);\n};\n\nstruct ipcm6_cookie {\n\tstruct sockcm_cookie sockc;\n\t__s16 hlimit;\n\t__s16 tclass;\n\t__s8 dontfrag;\n\tstruct ipv6_txoptions *opt;\n\t__u16 gso_size;\n};\n\nenum {\n\tIFLA_INET6_UNSPEC = 0,\n\tIFLA_INET6_FLAGS = 1,\n\tIFLA_INET6_CONF = 2,\n\tIFLA_INET6_STATS = 3,\n\tIFLA_INET6_MCAST = 4,\n\tIFLA_INET6_CACHEINFO = 5,\n\tIFLA_INET6_ICMP6STATS = 6,\n\tIFLA_INET6_TOKEN = 7,\n\tIFLA_INET6_ADDR_GEN_MODE = 8,\n\t__IFLA_INET6_MAX = 9,\n};\n\nenum in6_addr_gen_mode {\n\tIN6_ADDR_GEN_MODE_EUI64 = 0,\n\tIN6_ADDR_GEN_MODE_NONE = 1,\n\tIN6_ADDR_GEN_MODE_STABLE_PRIVACY = 2,\n\tIN6_ADDR_GEN_MODE_RANDOM = 3,\n};\n\nstruct ifla_cacheinfo {\n\t__u32 max_reasm_len;\n\t__u32 tstamp;\n\t__u32 reachable_time;\n\t__u32 retrans_time;\n};\n\nstruct wpan_phy;\n\nstruct wpan_dev_header_ops;\n\nstruct wpan_dev {\n\tstruct wpan_phy *wpan_phy;\n\tint iftype;\n\tstruct list_head list;\n\tstruct net_device *netdev;\n\tconst struct wpan_dev_header_ops *header_ops;\n\tstruct net_device *lowpan_dev;\n\tu32 identifier;\n\t__le16 pan_id;\n\t__le16 short_addr;\n\t__le64 extended_addr;\n\tatomic_t bsn;\n\tatomic_t dsn;\n\tu8 min_be;\n\tu8 max_be;\n\tu8 csma_retries;\n\ts8 frame_retries;\n\tbool lbt;\n\tbool promiscuous_mode;\n\tbool ackreq;\n};\n\nstruct prefixmsg {\n\tunsigned char prefix_family;\n\tunsigned char prefix_pad1;\n\tshort unsigned int prefix_pad2;\n\tint prefix_ifindex;\n\tunsigned char prefix_type;\n\tunsigned char prefix_len;\n\tunsigned char prefix_flags;\n\tunsigned char prefix_pad3;\n};\n\nenum {\n\tPREFIX_UNSPEC = 0,\n\tPREFIX_ADDRESS = 1,\n\tPREFIX_CACHEINFO = 2,\n\t__PREFIX_MAX = 3,\n};\n\nstruct prefix_cacheinfo {\n\t__u32 preferred_time;\n\t__u32 valid_time;\n};\n\nstruct in6_ifreq {\n\tstruct in6_addr ifr6_addr;\n\t__u32 ifr6_prefixlen;\n\tint ifr6_ifindex;\n};\n\nenum {\n\tDEVCONF_FORWARDING = 0,\n\tDEVCONF_HOPLIMIT = 1,\n\tDEVCONF_MTU6 = 2,\n\tDEVCONF_ACCEPT_RA = 3,\n\tDEVCONF_ACCEPT_REDIRECTS = 4,\n\tDEVCONF_AUTOCONF = 5,\n\tDEVCONF_DAD_TRANSMITS = 6,\n\tDEVCONF_RTR_SOLICITS = 7,\n\tDEVCONF_RTR_SOLICIT_INTERVAL = 8,\n\tDEVCONF_RTR_SOLICIT_DELAY = 9,\n\tDEVCONF_USE_TEMPADDR = 10,\n\tDEVCONF_TEMP_VALID_LFT = 11,\n\tDEVCONF_TEMP_PREFERED_LFT = 12,\n\tDEVCONF_REGEN_MAX_RETRY = 13,\n\tDEVCONF_MAX_DESYNC_FACTOR = 14,\n\tDEVCONF_MAX_ADDRESSES = 15,\n\tDEVCONF_FORCE_MLD_VERSION = 16,\n\tDEVCONF_ACCEPT_RA_DEFRTR = 17,\n\tDEVCONF_ACCEPT_RA_PINFO = 18,\n\tDEVCONF_ACCEPT_RA_RTR_PREF = 19,\n\tDEVCONF_RTR_PROBE_INTERVAL = 20,\n\tDEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN = 21,\n\tDEVCONF_PROXY_NDP = 22,\n\tDEVCONF_OPTIMISTIC_DAD = 23,\n\tDEVCONF_ACCEPT_SOURCE_ROUTE = 24,\n\tDEVCONF_MC_FORWARDING = 25,\n\tDEVCONF_DISABLE_IPV6 = 26,\n\tDEVCONF_ACCEPT_DAD = 27,\n\tDEVCONF_FORCE_TLLAO = 28,\n\tDEVCONF_NDISC_NOTIFY = 29,\n\tDEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL = 30,\n\tDEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL = 31,\n\tDEVCONF_SUPPRESS_FRAG_NDISC = 32,\n\tDEVCONF_ACCEPT_RA_FROM_LOCAL = 33,\n\tDEVCONF_USE_OPTIMISTIC = 34,\n\tDEVCONF_ACCEPT_RA_MTU = 35,\n\tDEVCONF_STABLE_SECRET = 36,\n\tDEVCONF_USE_OIF_ADDRS_ONLY = 37,\n\tDEVCONF_ACCEPT_RA_MIN_HOP_LIMIT = 38,\n\tDEVCONF_IGNORE_ROUTES_WITH_LINKDOWN = 39,\n\tDEVCONF_DROP_UNICAST_IN_L2_MULTICAST = 40,\n\tDEVCONF_DROP_UNSOLICITED_NA = 41,\n\tDEVCONF_KEEP_ADDR_ON_DOWN = 42,\n\tDEVCONF_RTR_SOLICIT_MAX_INTERVAL = 43,\n\tDEVCONF_SEG6_ENABLED = 44,\n\tDEVCONF_SEG6_REQUIRE_HMAC = 45,\n\tDEVCONF_ENHANCED_DAD = 46,\n\tDEVCONF_ADDR_GEN_MODE = 47,\n\tDEVCONF_DISABLE_POLICY = 48,\n\tDEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN = 49,\n\tDEVCONF_NDISC_TCLASS = 50,\n\tDEVCONF_RPL_SEG_ENABLED = 51,\n\tDEVCONF_MAX = 52,\n};\n\nenum {\n\tINET6_IFADDR_STATE_PREDAD = 0,\n\tINET6_IFADDR_STATE_DAD = 1,\n\tINET6_IFADDR_STATE_POSTDAD = 2,\n\tINET6_IFADDR_STATE_ERRDAD = 3,\n\tINET6_IFADDR_STATE_DEAD = 4,\n};\n\nenum nl802154_cca_modes {\n\t__NL802154_CCA_INVALID = 0,\n\tNL802154_CCA_ENERGY = 1,\n\tNL802154_CCA_CARRIER = 2,\n\tNL802154_CCA_ENERGY_CARRIER = 3,\n\tNL802154_CCA_ALOHA = 4,\n\tNL802154_CCA_UWB_SHR = 5,\n\tNL802154_CCA_UWB_MULTIPLEXED = 6,\n\t__NL802154_CCA_ATTR_AFTER_LAST = 7,\n\tNL802154_CCA_ATTR_MAX = 6,\n};\n\nenum nl802154_cca_opts {\n\tNL802154_CCA_OPT_ENERGY_CARRIER_AND = 0,\n\tNL802154_CCA_OPT_ENERGY_CARRIER_OR = 1,\n\t__NL802154_CCA_OPT_ATTR_AFTER_LAST = 2,\n\tNL802154_CCA_OPT_ATTR_MAX = 1,\n};\n\nenum nl802154_supported_bool_states {\n\tNL802154_SUPPORTED_BOOL_FALSE = 0,\n\tNL802154_SUPPORTED_BOOL_TRUE = 1,\n\t__NL802154_SUPPORTED_BOOL_INVALD = 2,\n\tNL802154_SUPPORTED_BOOL_BOTH = 3,\n\t__NL802154_SUPPORTED_BOOL_AFTER_LAST = 4,\n\tNL802154_SUPPORTED_BOOL_MAX = 3,\n};\n\nstruct wpan_phy_supported {\n\tu32 channels[32];\n\tu32 cca_modes;\n\tu32 cca_opts;\n\tu32 iftypes;\n\tenum nl802154_supported_bool_states lbt;\n\tu8 min_minbe;\n\tu8 max_minbe;\n\tu8 min_maxbe;\n\tu8 max_maxbe;\n\tu8 min_csma_backoffs;\n\tu8 max_csma_backoffs;\n\ts8 min_frame_retries;\n\ts8 max_frame_retries;\n\tsize_t tx_powers_size;\n\tsize_t cca_ed_levels_size;\n\tconst s32 *tx_powers;\n\tconst s32 *cca_ed_levels;\n};\n\nstruct wpan_phy_cca {\n\tenum nl802154_cca_modes mode;\n\tenum nl802154_cca_opts opt;\n};\n\nstruct wpan_phy {\n\tconst void *privid;\n\tu32 flags;\n\tu8 current_channel;\n\tu8 current_page;\n\tstruct wpan_phy_supported supported;\n\ts32 transmit_power;\n\tstruct wpan_phy_cca cca;\n\t__le64 perm_extended_addr;\n\ts32 cca_ed_level;\n\tu8 symbol_duration;\n\tu16 lifs_period;\n\tu16 sifs_period;\n\tstruct device dev;\n\tpossible_net_t _net;\n\tlong: 64;\n\tchar priv[0];\n};\n\nstruct ieee802154_addr {\n\tu8 mode;\n\t__le16 pan_id;\n\tunion {\n\t\t__le16 short_addr;\n\t\t__le64 extended_addr;\n\t};\n};\n\nstruct wpan_dev_header_ops {\n\tint (*create)(struct sk_buff *, struct net_device *, const struct ieee802154_addr *, const struct ieee802154_addr *, unsigned int);\n};\n\nunion fwnet_hwaddr {\n\tu8 u[16];\n\tstruct {\n\t\t__be64 uniq_id;\n\t\tu8 max_rec;\n\t\tu8 sspd;\n\t\t__be16 fifo_hi;\n\t\t__be32 fifo_lo;\n\t} uc;\n};\n\nstruct in6_validator_info {\n\tstruct in6_addr i6vi_addr;\n\tstruct inet6_dev *i6vi_dev;\n\tstruct netlink_ext_ack *extack;\n};\n\nstruct ifa6_config {\n\tconst struct in6_addr *pfx;\n\tunsigned int plen;\n\tconst struct in6_addr *peer_pfx;\n\tu32 rt_priority;\n\tu32 ifa_flags;\n\tu32 preferred_lft;\n\tu32 valid_lft;\n\tu16 scope;\n};\n\nenum cleanup_prefix_rt_t {\n\tCLEANUP_PREFIX_RT_NOP = 0,\n\tCLEANUP_PREFIX_RT_DEL = 1,\n\tCLEANUP_PREFIX_RT_EXPIRE = 2,\n};\n\nenum {\n\tIPV6_SADDR_RULE_INIT = 0,\n\tIPV6_SADDR_RULE_LOCAL = 1,\n\tIPV6_SADDR_RULE_SCOPE = 2,\n\tIPV6_SADDR_RULE_PREFERRED = 3,\n\tIPV6_SADDR_RULE_HOA = 4,\n\tIPV6_SADDR_RULE_OIF = 5,\n\tIPV6_SADDR_RULE_LABEL = 6,\n\tIPV6_SADDR_RULE_PRIVACY = 7,\n\tIPV6_SADDR_RULE_ORCHID = 8,\n\tIPV6_SADDR_RULE_PREFIX = 9,\n\tIPV6_SADDR_RULE_NOT_OPTIMISTIC = 10,\n\tIPV6_SADDR_RULE_MAX = 11,\n};\n\nstruct ipv6_saddr_score {\n\tint rule;\n\tint addr_type;\n\tstruct inet6_ifaddr *ifa;\n\tlong unsigned int scorebits[1];\n\tint scopedist;\n\tint matchlen;\n};\n\nstruct ipv6_saddr_dst {\n\tconst struct in6_addr *addr;\n\tint ifindex;\n\tint scope;\n\tint label;\n\tunsigned int prefs;\n};\n\nstruct if6_iter_state {\n\tstruct seq_net_private p;\n\tint bucket;\n\tint offset;\n};\n\nenum addr_type_t {\n\tUNICAST_ADDR = 0,\n\tMULTICAST_ADDR = 1,\n\tANYCAST_ADDR = 2,\n};\n\nstruct inet6_fill_args {\n\tu32 portid;\n\tu32 seq;\n\tint event;\n\tunsigned int flags;\n\tint netnsid;\n\tint ifindex;\n\tenum addr_type_t type;\n};\n\nenum {\n\tDAD_PROCESS = 0,\n\tDAD_BEGIN = 1,\n\tDAD_ABORT = 2,\n};\n\nstruct ifaddrlblmsg {\n\t__u8 ifal_family;\n\t__u8 __ifal_reserved;\n\t__u8 ifal_prefixlen;\n\t__u8 ifal_flags;\n\t__u32 ifal_index;\n\t__u32 ifal_seq;\n};\n\nenum {\n\tIFAL_ADDRESS = 1,\n\tIFAL_LABEL = 2,\n\t__IFAL_MAX = 3,\n};\n\nstruct ip6addrlbl_entry {\n\tstruct in6_addr prefix;\n\tint prefixlen;\n\tint ifindex;\n\tint addrtype;\n\tu32 label;\n\tstruct hlist_node list;\n\tstruct callback_head rcu;\n};\n\nstruct ip6addrlbl_init_table {\n\tconst struct in6_addr *prefix;\n\tint prefixlen;\n\tu32 label;\n};\n\nstruct rd_msg {\n\tstruct icmp6hdr icmph;\n\tstruct in6_addr target;\n\tstruct in6_addr dest;\n\t__u8 opt[0];\n};\n\nstruct fib6_gc_args {\n\tint timeout;\n\tint more;\n};\n\nstruct rt6_exception {\n\tstruct hlist_node hlist;\n\tstruct rt6_info *rt6i;\n\tlong unsigned int stamp;\n\tstruct callback_head rcu;\n};\n\ntypedef struct rt6_info * (*pol_lookup_t)(struct net *, struct fib6_table *, struct flowi6 *, const struct sk_buff *, int);\n\nstruct route_info {\n\t__u8 type;\n\t__u8 length;\n\t__u8 prefix_len;\n\t__u8 reserved_l: 3;\n\t__u8 route_pref: 2;\n\t__u8 reserved_h: 3;\n\t__be32 lifetime;\n\t__u8 prefix[0];\n};\n\nstruct rt6_rtnl_dump_arg {\n\tstruct sk_buff *skb;\n\tstruct netlink_callback *cb;\n\tstruct net *net;\n\tstruct fib_dump_filter filter;\n};\n\nstruct netevent_redirect {\n\tstruct dst_entry *old;\n\tstruct dst_entry *new;\n\tstruct neighbour *neigh;\n\tconst void *daddr;\n};\n\nstruct trace_event_raw_fib6_table_lookup {\n\tstruct trace_entry ent;\n\tu32 tb_id;\n\tint err;\n\tint oif;\n\tint iif;\n\t__u8 tos;\n\t__u8 scope;\n\t__u8 flags;\n\t__u8 src[16];\n\t__u8 dst[16];\n\tu16 sport;\n\tu16 dport;\n\tu8 proto;\n\tu8 rt_type;\n\tu32 __data_loc_name;\n\t__u8 gw[16];\n\tchar __data[0];\n};\n\nstruct trace_event_data_offsets_fib6_table_lookup {\n\tu32 name;\n};\n\ntypedef void (*btf_trace_fib6_table_lookup)(void *, const struct net *, const struct fib6_result *, struct fib6_table *, const struct flowi6 *);\n\nenum rt6_nud_state {\n\tRT6_NUD_FAIL_HARD = 4294967293,\n\tRT6_NUD_FAIL_PROBE = 4294967294,\n\tRT6_NUD_FAIL_DO_RR = 4294967295,\n\tRT6_NUD_SUCCEED = 1,\n};\n\nstruct fib6_nh_dm_arg {\n\tstruct net *net;\n\tconst struct in6_addr *saddr;\n\tint oif;\n\tint flags;\n\tstruct fib6_nh *nh;\n};\n\nstruct __rt6_probe_work {\n\tstruct work_struct work;\n\tstruct in6_addr target;\n\tstruct net_device *dev;\n};\n\nstruct fib6_nh_frl_arg {\n\tu32 flags;\n\tint oif;\n\tint strict;\n\tint *mpri;\n\tbool *do_rr;\n\tstruct fib6_nh *nh;\n};\n\nstruct fib6_nh_excptn_arg {\n\tstruct rt6_info *rt;\n\tint plen;\n};\n\nstruct fib6_nh_match_arg {\n\tconst struct net_device *dev;\n\tconst struct in6_addr *gw;\n\tstruct fib6_nh *match;\n};\n\nstruct fib6_nh_age_excptn_arg {\n\tstruct fib6_gc_args *gc_args;\n\tlong unsigned int now;\n};\n\nstruct fib6_nh_rd_arg {\n\tstruct fib6_result *res;\n\tstruct flowi6 *fl6;\n\tconst struct in6_addr *gw;\n\tstruct rt6_info **ret;\n};\n\nstruct ip6rd_flowi {\n\tstruct flowi6 fl6;\n\tstruct in6_addr gateway;\n};\n\nstruct fib6_nh_del_cached_rt_arg {\n\tstruct fib6_config *cfg;\n\tstruct fib6_info *f6i;\n};\n\nstruct arg_dev_net_ip {\n\tstruct net_device *dev;\n\tstruct net *net;\n\tstruct in6_addr *addr;\n};\n\nstruct arg_netdev_event {\n\tconst struct net_device *dev;\n\tunion {\n\t\tunsigned char nh_flags;\n\t\tlong unsigned int event;\n\t};\n};\n\nstruct rt6_mtu_change_arg {\n\tstruct net_device *dev;\n\tunsigned int mtu;\n\tstruct fib6_info *f6i;\n};\n\nstruct rt6_nh {\n\tstruct fib6_info *fib6_info;\n\tstruct fib6_config r_cfg;\n\tstruct list_head next;\n};\n\nstruct fib6_nh_exception_dump_walker {\n\tstruct rt6_rtnl_dump_arg *dump;\n\tstruct fib6_info *rt;\n\tunsigned int flags;\n\tunsigned int skip;\n\tunsigned int count;\n};\n\nenum fib6_walk_state {\n\tFWS_S = 0,\n\tFWS_L = 1,\n\tFWS_R = 2,\n\tFWS_C = 3,\n\tFWS_U = 4,\n};\n\nstruct fib6_walker {\n\tstruct list_head lh;\n\tstruct fib6_node *root;\n\tstruct fib6_node *node;\n\tstruct fib6_info *leaf;\n\tenum fib6_walk_state state;\n\tunsigned int skip;\n\tunsigned int count;\n\tunsigned int skip_in_node;\n\tint (*func)(struct fib6_walker *);\n\tvoid *args;\n};\n\nstruct fib6_entry_notifier_info {\n\tstruct fib_notifier_info info;\n\tstruct fib6_info *rt;\n\tunsigned int nsiblings;\n};\n\nstruct ipv6_route_iter {\n\tstruct seq_net_private p;\n\tstruct fib6_walker w;\n\tloff_t skip;\n\tstruct fib6_table *tbl;\n\tint sernum;\n};\n\nstruct bpf_iter__ipv6_route {\n\tunion {\n\t\tstruct bpf_iter_meta *meta;\n\t};\n\tunion {\n\t\tstruct fib6_info *rt;\n\t};\n};\n\nstruct fib6_cleaner {\n\tstruct fib6_walker w;\n\tstruct net *net;\n\tint (*func)(struct fib6_info *, void *);\n\tint sernum;\n\tvoid *arg;\n\tbool skip_notify;\n};\n\nenum {\n\tFIB6_NO_SERNUM_CHANGE = 0,\n};\n\nstruct fib6_dump_arg {\n\tstruct net *net;\n\tstruct notifier_block *nb;\n\tstruct netlink_ext_ack *extack;\n};\n\nstruct fib6_nh_pcpu_arg {\n\tstruct fib6_info *from;\n\tconst struct fib6_table *table;\n};\n\nstruct lookup_args {\n\tint offset;\n\tconst struct in6_addr *addr;\n};\n\nstruct ipv6_mreq {\n\tstruct in6_addr ipv6mr_multiaddr;\n\tint ipv6mr_ifindex;\n};\n\nstruct in6_flowlabel_req {\n\tstruct in6_addr flr_dst;\n\t__be32 flr_label;\n\t__u8 flr_action;\n\t__u8 flr_share;\n\t__u16 flr_flags;\n\t__u16 flr_expires;\n\t__u16 flr_linger;\n\t__u32 __flr_pad;\n};\n\nstruct ip6_mtuinfo {\n\tstruct sockaddr_in6 ip6m_addr;\n\t__u32 ip6m_mtu;\n};\n\nstruct nduseroptmsg {\n\tunsigned char nduseropt_family;\n\tunsigned char nduseropt_pad1;\n\tshort unsigned int nduseropt_opts_len;\n\tint nduseropt_ifindex;\n\t__u8 nduseropt_icmp_type;\n\t__u8 nduseropt_icmp_code;\n\tshort unsigned int nduseropt_pad2;\n\tunsigned int nduseropt_pad3;\n};\n\nenum {\n\tNDUSEROPT_UNSPEC = 0,\n\tNDUSEROPT_SRCADDR = 1,\n\t__NDUSEROPT_MAX = 2,\n};\n\nstruct nd_msg {\n\tstruct icmp6hdr icmph;\n\tstruct in6_addr target;\n\t__u8 opt[0];\n};\n\nstruct rs_msg {\n\tstruct icmp6hdr icmph;\n\t__u8 opt[0];\n};\n\nstruct ra_msg {\n\tstruct icmp6hdr icmph;\n\t__be32 reachable_time;\n\t__be32 retrans_timer;\n};\n\nstruct icmp6_filter {\n\t__u32 data[8];\n};\n\nstruct raw6_sock {\n\tstruct inet_sock inet;\n\t__u32 checksum;\n\t__u32 offset;\n\tstruct icmp6_filter filter;\n\t__u32 ip6mr_table;\n\tstruct ipv6_pinfo inet6;\n};\n\ntypedef int mh_filter_t(struct sock *, struct sk_buff *);\n\nstruct raw6_frag_vec {\n\tstruct msghdr *msg;\n\tint hlen;\n\tchar c[4];\n};\n\nstruct ipv6_destopt_hao {\n\t__u8 type;\n\t__u8 length;\n\tstruct in6_addr addr;\n} __attribute__((packed));\n\ntypedef void ip6_icmp_send_t(struct sk_buff *, u8, u8, __u32, const struct in6_addr *, const struct inet6_skb_parm *);\n\nstruct icmpv6_msg {\n\tstruct sk_buff *skb;\n\tint offset;\n\tuint8_t type;\n};\n\nstruct icmp6_err {\n\tint err;\n\tint fatal;\n};\n\nstruct mld_msg {\n\tstruct icmp6hdr mld_hdr;\n\tstruct in6_addr mld_mca;\n};\n\nstruct mld2_grec {\n\t__u8 grec_type;\n\t__u8 grec_auxwords;\n\t__be16 grec_nsrcs;\n\tstruct in6_addr grec_mca;\n\tstruct in6_addr grec_src[0];\n};\n\nstruct mld2_report {\n\tstruct icmp6hdr mld2r_hdr;\n\tstruct mld2_grec mld2r_grec[0];\n};\n\nstruct mld2_query {\n\tstruct icmp6hdr mld2q_hdr;\n\tstruct in6_addr mld2q_mca;\n\t__u8 mld2q_qrv: 3;\n\t__u8 mld2q_suppress: 1;\n\t__u8 mld2q_resv2: 4;\n\t__u8 mld2q_qqic;\n\t__be16 mld2q_nsrcs;\n\tstruct in6_addr mld2q_srcs[0];\n};\n\nstruct igmp6_mc_iter_state {\n\tstruct seq_net_private p;\n\tstruct net_device *dev;\n\tstruct inet6_dev *idev;\n};\n\nstruct igmp6_mcf_iter_state {\n\tstruct seq_net_private p;\n\tstruct net_device *dev;\n\tstruct inet6_dev *idev;\n\tstruct ifmcaddr6 *im;\n};\n\nenum ip6_defrag_users {\n\tIP6_DEFRAG_LOCAL_DELIVER = 0,\n\tIP6_DEFRAG_CONNTRACK_IN = 1,\n\t__IP6_DEFRAG_CONNTRACK_IN = 65536,\n\tIP6_DEFRAG_CONNTRACK_OUT = 65537,\n\t__IP6_DEFRAG_CONNTRACK_OUT = 131072,\n\tIP6_DEFRAG_CONNTRACK_BRIDGE_IN = 131073,\n\t__IP6_DEFRAG_CONNTRACK_BRIDGE_IN = 196608,\n};\n\nstruct frag_queue {\n\tstruct inet_frag_queue q;\n\tint iif;\n\t__u16 nhoffset;\n\tu8 ecn;\n};\n\nstruct tcp6_pseudohdr {\n\tstruct in6_addr saddr;\n\tstruct in6_addr daddr;\n\t__be32 len;\n\t__be32 protocol;\n};\n\nstruct rt0_hdr {\n\tstruct ipv6_rt_hdr rt_hdr;\n\t__u32 reserved;\n\tstruct in6_addr addr[0];\n};\n\nstruct ipv6_rpl_sr_hdr {\n\t__u8 nexthdr;\n\t__u8 hdrlen;\n\t__u8 type;\n\t__u8 segments_left;\n\t__u32 cmpre: 4;\n\t__u32 cmpri: 4;\n\t__u32 reserved: 4;\n\t__u32 pad: 4;\n\t__u32 reserved1: 16;\n\tunion {\n\t\tstruct in6_addr addr[0];\n\t\t__u8 data[0];\n\t} segments;\n};\n\nstruct tlvtype_proc {\n\tint type;\n\tbool (*func)(struct sk_buff *, int);\n};\n\nstruct ip6fl_iter_state {\n\tstruct seq_net_private p;\n\tstruct pid_namespace *pid_ns;\n\tint bucket;\n};\n\nstruct sr6_tlv {\n\t__u8 type;\n\t__u8 len;\n\t__u8 data[0];\n};\n\nenum {\n\tSEG6_ATTR_UNSPEC = 0,\n\tSEG6_ATTR_DST = 1,\n\tSEG6_ATTR_DSTLEN = 2,\n\tSEG6_ATTR_HMACKEYID = 3,\n\tSEG6_ATTR_SECRET = 4,\n\tSEG6_ATTR_SECRETLEN = 5,\n\tSEG6_ATTR_ALGID = 6,\n\tSEG6_ATTR_HMACINFO = 7,\n\t__SEG6_ATTR_MAX = 8,\n};\n\nenum {\n\tSEG6_CMD_UNSPEC = 0,\n\tSEG6_CMD_SETHMAC = 1,\n\tSEG6_CMD_DUMPHMAC = 2,\n\tSEG6_CMD_SET_TUNSRC = 3,\n\tSEG6_CMD_GET_TUNSRC = 4,\n\t__SEG6_CMD_MAX = 5,\n};\n\nstruct seg6_hmac_info {\n\tstruct rhash_head node;\n\tstruct callback_head rcu;\n\tu32 hmackeyid;\n\tchar secret[64];\n\tu8 slen;\n\tu8 alg_id;\n};\n\ntypedef short unsigned int mifi_t;\n\ntypedef __u32 if_mask;\n\nstruct if_set {\n\tif_mask ifs_bits[8];\n};\n\nstruct mif6ctl {\n\tmifi_t mif6c_mifi;\n\tunsigned char mif6c_flags;\n\tunsigned char vifc_threshold;\n\t__u16 mif6c_pifi;\n\tunsigned int vifc_rate_limit;\n};\n\nstruct mf6cctl {\n\tstruct sockaddr_in6 mf6cc_origin;\n\tstruct sockaddr_in6 mf6cc_mcastgrp;\n\tmifi_t mf6cc_parent;\n\tstruct if_set mf6cc_ifset;\n};\n\nstruct sioc_sg_req6 {\n\tstruct sockaddr_in6 src;\n\tstruct sockaddr_in6 grp;\n\tlong unsigned int pktcnt;\n\tlong unsigned int bytecnt;\n\tlong unsigned int wrong_if;\n};\n\nstruct sioc_mif_req6 {\n\tmifi_t mifi;\n\tlong unsigned int icount;\n\tlong unsigned int ocount;\n\tlong unsigned int ibytes;\n\tlong unsigned int obytes;\n};\n\nstruct mrt6msg {\n\t__u8 im6_mbz;\n\t__u8 im6_msgtype;\n\t__u16 im6_mif;\n\t__u32 im6_pad;\n\tstruct in6_addr im6_src;\n\tstruct in6_addr im6_dst;\n};\n\nenum {\n\tIP6MRA_CREPORT_UNSPEC = 0,\n\tIP6MRA_CREPORT_MSGTYPE = 1,\n\tIP6MRA_CREPORT_MIF_ID = 2,\n\tIP6MRA_CREPORT_SRC_ADDR = 3,\n\tIP6MRA_CREPORT_DST_ADDR = 4,\n\tIP6MRA_CREPORT_PKT = 5,\n\t__IP6MRA_CREPORT_MAX = 6,\n};\n\nstruct mfc6_cache_cmp_arg {\n\tstruct in6_addr mf6c_mcastgrp;\n\tstruct in6_addr mf6c_origin;\n};\n\nstruct mfc6_cache {\n\tstruct mr_mfc _c;\n\tunion {\n\t\tstruct {\n\t\t\tstruct in6_addr mf6c_mcastgrp;\n\t\t\tstruct in6_addr mf6c_origin;\n\t\t};\n\t\tstruct mfc6_cache_cmp_arg cmparg;\n\t};\n};\n\nstruct ip6mr_result {\n\tstruct mr_table *mrt;\n};\n\nstruct compat_sioc_sg_req6 {\n\tstruct sockaddr_in6 src;\n\tstruct sockaddr_in6 grp;\n\tcompat_ulong_t pktcnt;\n\tcompat_ulong_t bytecnt;\n\tcompat_ulong_t wrong_if;\n};\n\nstruct compat_sioc_mif_req6 {\n\tmifi_t mifi;\n\tcompat_ulong_t icount;\n\tcompat_ulong_t ocount;\n\tcompat_ulong_t ibytes;\n\tcompat_ulong_t obytes;\n};\n\nstruct xfrm6_protocol {\n\tint (*handler)(struct sk_buff *);\n\tint (*input_handler)(struct sk_buff *, int, __be32, int);\n\tint (*cb_handler)(struct sk_buff *, int);\n\tint (*err_handler)(struct sk_buff *, struct inet6_skb_parm *, u8, u8, int, __be32);\n\tstruct xfrm6_protocol *next;\n\tint priority;\n};\n\nstruct br_input_skb_cb {\n\tstruct net_device *brdev;\n\tu16 frag_max_size;\n\tu8 igmp;\n\tu8 mrouters_only: 1;\n\tu8 proxyarp_replied: 1;\n\tu8 src_port_isolated: 1;\n\tu8 vlan_filtered: 1;\n\tu8 br_netfilter_broute: 1;\n\tint offload_fwd_mark;\n};\n\nstruct nf_bridge_frag_data;\n\nstruct fib6_rule {\n\tstruct fib_rule common;\n\tstruct rt6key src;\n\tstruct rt6key dst;\n\tu8 tclass;\n};\n\nstruct calipso_doi;\n\nstruct netlbl_calipso_ops {\n\tint (*doi_add)(struct calipso_doi *, struct netlbl_audit *);\n\tvoid (*doi_free)(struct calipso_doi *);\n\tint (*doi_remove)(u32, struct netlbl_audit *);\n\tstruct calipso_doi * (*doi_getdef)(u32);\n\tvoid (*doi_putdef)(struct calipso_doi *);\n\tint (*doi_walk)(u32 *, int (*)(struct calipso_doi *, void *), void *);\n\tint (*sock_getattr)(struct sock *, struct netlbl_lsm_secattr *);\n\tint (*sock_setattr)(struct sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);\n\tvoid (*sock_delattr)(struct sock *);\n\tint (*req_setattr)(struct request_sock *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);\n\tvoid (*req_delattr)(struct request_sock *);\n\tint (*opt_getattr)(const unsigned char *, struct netlbl_lsm_secattr *);\n\tunsigned char * (*skbuff_optptr)(const struct sk_buff *);\n\tint (*skbuff_setattr)(struct sk_buff *, const struct calipso_doi *, const struct netlbl_lsm_secattr *);\n\tint (*skbuff_delattr)(struct sk_buff *);\n\tvoid (*cache_invalidate)();\n\tint (*cache_add)(const unsigned char *, const struct netlbl_lsm_secattr *);\n};\n\nstruct calipso_doi {\n\tu32 doi;\n\tu32 type;\n\trefcount_t refcount;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n};\n\nstruct calipso_map_cache_bkt {\n\tspinlock_t lock;\n\tu32 size;\n\tstruct list_head list;\n};\n\nstruct calipso_map_cache_entry {\n\tu32 hash;\n\tunsigned char *key;\n\tsize_t key_len;\n\tstruct netlbl_lsm_cache *lsm_data;\n\tu32 activity;\n\tstruct list_head list;\n};\n\nenum {\n\tSEG6_IPTUNNEL_UNSPEC = 0,\n\tSEG6_IPTUNNEL_SRH = 1,\n\t__SEG6_IPTUNNEL_MAX = 2,\n};\n\nstruct seg6_iptunnel_encap {\n\tint mode;\n\tstruct ipv6_sr_hdr srh[0];\n};\n\nenum {\n\tSEG6_IPTUN_MODE_INLINE = 0,\n\tSEG6_IPTUN_MODE_ENCAP = 1,\n\tSEG6_IPTUN_MODE_L2ENCAP = 2,\n};\n\nstruct seg6_lwt {\n\tstruct dst_cache cache;\n\tstruct seg6_iptunnel_encap tuninfo[0];\n};\n\nenum l3mdev_type {\n\tL3MDEV_TYPE_UNSPEC = 0,\n\tL3MDEV_TYPE_VRF = 1,\n\t__L3MDEV_TYPE_MAX = 2,\n};\n\nenum {\n\tSEG6_LOCAL_UNSPEC = 0,\n\tSEG6_LOCAL_ACTION = 1,\n\tSEG6_LOCAL_SRH = 2,\n\tSEG6_LOCAL_TABLE = 3,\n\tSEG6_LOCAL_NH4 = 4,\n\tSEG6_LOCAL_NH6 = 5,\n\tSEG6_LOCAL_IIF = 6,\n\tSEG6_LOCAL_OIF = 7,\n\tSEG6_LOCAL_BPF = 8,\n\tSEG6_LOCAL_VRFTABLE = 9,\n\t__SEG6_LOCAL_MAX = 10,\n};\n\nenum {\n\tSEG6_LOCAL_BPF_PROG_UNSPEC = 0,\n\tSEG6_LOCAL_BPF_PROG = 1,\n\tSEG6_LOCAL_BPF_PROG_NAME = 2,\n\t__SEG6_LOCAL_BPF_PROG_MAX = 3,\n};\n\nstruct seg6_local_lwt;\n\nstruct seg6_local_lwtunnel_ops {\n\tint (*build_state)(struct seg6_local_lwt *, const void *, struct netlink_ext_ack *);\n\tvoid (*destroy_state)(struct seg6_local_lwt *);\n};\n\nenum seg6_end_dt_mode {\n\tDT_INVALID_MODE = 4294967274,\n\tDT_LEGACY_MODE = 0,\n\tDT_VRF_MODE = 1,\n};\n\nstruct seg6_end_dt_info {\n\tenum seg6_end_dt_mode mode;\n\tstruct net *net;\n\tint vrf_ifindex;\n\tint vrf_table;\n\t__be16 proto;\n\tu16 family;\n\tint hdrlen;\n};\n\nstruct seg6_action_desc;\n\nstruct seg6_local_lwt {\n\tint action;\n\tstruct ipv6_sr_hdr *srh;\n\tint table;\n\tstruct in_addr nh4;\n\tstruct in6_addr nh6;\n\tint iif;\n\tint oif;\n\tstruct bpf_lwt_prog bpf;\n\tstruct seg6_end_dt_info dt_info;\n\tint headroom;\n\tstruct seg6_action_desc *desc;\n\tlong unsigned int parsed_optattrs;\n};\n\nstruct seg6_action_desc {\n\tint action;\n\tlong unsigned int attrs;\n\tlong unsigned int optattrs;\n\tint (*input)(struct sk_buff *, struct seg6_local_lwt *);\n\tint static_headroom;\n\tstruct seg6_local_lwtunnel_ops slwt_ops;\n};\n\nstruct seg6_action_param {\n\tint (*parse)(struct nlattr **, struct seg6_local_lwt *);\n\tint (*put)(struct sk_buff *, struct seg6_local_lwt *);\n\tint (*cmp)(struct seg6_local_lwt *, struct seg6_local_lwt *);\n\tvoid (*destroy)(struct seg6_local_lwt *);\n};\n\nstruct sr6_tlv_hmac {\n\tstruct sr6_tlv tlvhdr;\n\t__u16 reserved;\n\t__be32 hmackeyid;\n\t__u8 hmac[32];\n};\n\nenum {\n\tSEG6_HMAC_ALGO_SHA1 = 1,\n\tSEG6_HMAC_ALGO_SHA256 = 2,\n};\n\nstruct seg6_hmac_algo {\n\tu8 alg_id;\n\tchar name[64];\n\tstruct crypto_shash **tfms;\n\tstruct shash_desc **shashs;\n};\n\nenum {\n\tRPL_IPTUNNEL_UNSPEC = 0,\n\tRPL_IPTUNNEL_SRH = 1,\n\t__RPL_IPTUNNEL_MAX = 2,\n};\n\nstruct rpl_iptunnel_encap {\n\tstruct ipv6_rpl_sr_hdr srh[0];\n};\n\nstruct rpl_lwt {\n\tstruct dst_cache cache;\n\tstruct rpl_iptunnel_encap tuninfo;\n};\n\nstruct rt2_hdr {\n\tstruct ipv6_rt_hdr rt_hdr;\n\t__u32 reserved;\n\tstruct in6_addr addr;\n};\n\nstruct mip6_report_rate_limiter {\n\tspinlock_t lock;\n\tktime_t stamp;\n\tint iif;\n\tstruct in6_addr src;\n\tstruct in6_addr dst;\n};\n\nenum {\n\tIP6_FH_F_FRAG = 1,\n\tIP6_FH_F_AUTH = 2,\n\tIP6_FH_F_SKIP_RH = 4,\n};\n\nstruct sockaddr_pkt {\n\tshort unsigned int spkt_family;\n\tunsigned char spkt_device[14];\n\t__be16 spkt_protocol;\n};\n\nstruct sockaddr_ll {\n\tshort unsigned int sll_family;\n\t__be16 sll_protocol;\n\tint sll_ifindex;\n\tshort unsigned int sll_hatype;\n\tunsigned char sll_pkttype;\n\tunsigned char sll_halen;\n\tunsigned char sll_addr[8];\n};\n\nstruct tpacket_stats {\n\tunsigned int tp_packets;\n\tunsigned int tp_drops;\n};\n\nstruct tpacket_stats_v3 {\n\tunsigned int tp_packets;\n\tunsigned int tp_drops;\n\tunsigned int tp_freeze_q_cnt;\n};\n\nstruct tpacket_rollover_stats {\n\t__u64 tp_all;\n\t__u64 tp_huge;\n\t__u64 tp_failed;\n};\n\nunion tpacket_stats_u {\n\tstruct tpacket_stats stats1;\n\tstruct tpacket_stats_v3 stats3;\n};\n\nstruct tpacket_auxdata {\n\t__u32 tp_status;\n\t__u32 tp_len;\n\t__u32 tp_snaplen;\n\t__u16 tp_mac;\n\t__u16 tp_net;\n\t__u16 tp_vlan_tci;\n\t__u16 tp_vlan_tpid;\n};\n\nstruct tpacket_hdr {\n\tlong unsigned int tp_status;\n\tunsigned int tp_len;\n\tunsigned int tp_snaplen;\n\tshort unsigned int tp_mac;\n\tshort unsigned int tp_net;\n\tunsigned int tp_sec;\n\tunsigned int tp_usec;\n};\n\nstruct tpacket2_hdr {\n\t__u32 tp_status;\n\t__u32 tp_len;\n\t__u32 tp_snaplen;\n\t__u16 tp_mac;\n\t__u16 tp_net;\n\t__u32 tp_sec;\n\t__u32 tp_nsec;\n\t__u16 tp_vlan_tci;\n\t__u16 tp_vlan_tpid;\n\t__u8 tp_padding[4];\n};\n\nstruct tpacket_hdr_variant1 {\n\t__u32 tp_rxhash;\n\t__u32 tp_vlan_tci;\n\t__u16 tp_vlan_tpid;\n\t__u16 tp_padding;\n};\n\nstruct tpacket3_hdr {\n\t__u32 tp_next_offset;\n\t__u32 tp_sec;\n\t__u32 tp_nsec;\n\t__u32 tp_snaplen;\n\t__u32 tp_len;\n\t__u32 tp_status;\n\t__u16 tp_mac;\n\t__u16 tp_net;\n\tunion {\n\t\tstruct tpacket_hdr_variant1 hv1;\n\t};\n\t__u8 tp_padding[8];\n};\n\nstruct tpacket_bd_ts {\n\tunsigned int ts_sec;\n\tunion {\n\t\tunsigned int ts_usec;\n\t\tunsigned int ts_nsec;\n\t};\n};\n\nstruct tpacket_hdr_v1 {\n\t__u32 block_status;\n\t__u32 num_pkts;\n\t__u32 offset_to_first_pkt;\n\t__u32 blk_len;\n\t__u64 seq_num;\n\tstruct tpacket_bd_ts ts_first_pkt;\n\tstruct tpacket_bd_ts ts_last_pkt;\n};\n\nunion tpacket_bd_header_u {\n\tstruct tpacket_hdr_v1 bh1;\n};\n\nstruct tpacket_block_desc {\n\t__u32 version;\n\t__u32 offset_to_priv;\n\tunion tpacket_bd_header_u hdr;\n};\n\nenum tpacket_versions {\n\tTPACKET_V1 = 0,\n\tTPACKET_V2 = 1,\n\tTPACKET_V3 = 2,\n};\n\nstruct tpacket_req {\n\tunsigned int tp_block_size;\n\tunsigned int tp_block_nr;\n\tunsigned int tp_frame_size;\n\tunsigned int tp_frame_nr;\n};\n\nstruct tpacket_req3 {\n\tunsigned int tp_block_size;\n\tunsigned int tp_block_nr;\n\tunsigned int tp_frame_size;\n\tunsigned int tp_frame_nr;\n\tunsigned int tp_retire_blk_tov;\n\tunsigned int tp_sizeof_priv;\n\tunsigned int tp_feature_req_word;\n};\n\nunion tpacket_req_u {\n\tstruct tpacket_req req;\n\tstruct tpacket_req3 req3;\n};\n\nstruct fanout_args {\n\t__u16 id;\n\t__u16 type_flags;\n\t__u32 max_num_members;\n};\n\nstruct virtio_net_hdr {\n\t__u8 flags;\n\t__u8 gso_type;\n\t__virtio16 hdr_len;\n\t__virtio16 gso_size;\n\t__virtio16 csum_start;\n\t__virtio16 csum_offset;\n};\n\nstruct packet_mclist {\n\tstruct packet_mclist *next;\n\tint ifindex;\n\tint count;\n\tshort unsigned int type;\n\tshort unsigned int alen;\n\tunsigned char addr[32];\n};\n\nstruct pgv;\n\nstruct tpacket_kbdq_core {\n\tstruct pgv *pkbdq;\n\tunsigned int feature_req_word;\n\tunsigned int hdrlen;\n\tunsigned char reset_pending_on_curr_blk;\n\tunsigned char delete_blk_timer;\n\tshort unsigned int kactive_blk_num;\n\tshort unsigned int blk_sizeof_priv;\n\tshort unsigned int last_kactive_blk_num;\n\tchar *pkblk_start;\n\tchar *pkblk_end;\n\tint kblk_size;\n\tunsigned int max_frame_len;\n\tunsigned int knum_blocks;\n\tuint64_t knxt_seq_num;\n\tchar *prev;\n\tchar *nxt_offset;\n\tstruct sk_buff *skb;\n\trwlock_t blk_fill_in_prog_lock;\n\tshort unsigned int retire_blk_tov;\n\tshort unsigned int version;\n\tlong unsigned int tov_in_jiffies;\n\tstruct timer_list retire_blk_timer;\n};\n\nstruct pgv {\n\tchar *buffer;\n};\n\nstruct packet_ring_buffer {\n\tstruct pgv *pg_vec;\n\tunsigned int head;\n\tunsigned int frames_per_block;\n\tunsigned int frame_size;\n\tunsigned int frame_max;\n\tunsigned int pg_vec_order;\n\tunsigned int pg_vec_pages;\n\tunsigned int pg_vec_len;\n\tunsigned int *pending_refcnt;\n\tunion {\n\t\tlong unsigned int *rx_owner_map;\n\t\tstruct tpacket_kbdq_core prb_bdqc;\n\t};\n};\n\nstruct packet_fanout {\n\tpossible_net_t net;\n\tunsigned int num_members;\n\tu32 max_num_members;\n\tu16 id;\n\tu8 type;\n\tu8 flags;\n\tunion {\n\t\tatomic_t rr_cur;\n\t\tstruct bpf_prog *bpf_prog;\n\t};\n\tstruct list_head list;\n\tspinlock_t lock;\n\trefcount_t sk_ref;\n\tlong: 64;\n\tstruct packet_type prot_hook;\n\tstruct sock *arr[0];\n};\n\nstruct packet_rollover {\n\tint sock;\n\tatomic_long_t num;\n\tatomic_long_t num_huge;\n\tatomic_long_t num_failed;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tu32 history[16];\n};\n\nstruct packet_sock {\n\tstruct sock sk;\n\tstruct packet_fanout *fanout;\n\tunion tpacket_stats_u stats;\n\tstruct packet_ring_buffer rx_ring;\n\tstruct packet_ring_buffer tx_ring;\n\tint copy_thresh;\n\tspinlock_t bind_lock;\n\tstruct mutex pg_vec_lock;\n\tunsigned int running;\n\tunsigned int auxdata: 1;\n\tunsigned int origdev: 1;\n\tunsigned int has_vnet_hdr: 1;\n\tunsigned int tp_loss: 1;\n\tunsigned int tp_tx_has_off: 1;\n\tint pressure;\n\tint ifindex;\n\t__be16 num;\n\tstruct packet_rollover *rollover;\n\tstruct packet_mclist *mclist;\n\tatomic_t mapped;\n\tenum tpacket_versions tp_version;\n\tunsigned int tp_hdrlen;\n\tunsigned int tp_reserve;\n\tunsigned int tp_tstamp;\n\tstruct completion skb_completion;\n\tstruct net_device *cached_dev;\n\tint (*xmit)(struct sk_buff *);\n\tlong: 64;\n\tstruct packet_type prot_hook;\n\tatomic_t tp_drops;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct packet_mreq_max {\n\tint mr_ifindex;\n\tshort unsigned int mr_type;\n\tshort unsigned int mr_alen;\n\tunsigned char mr_address[32];\n};\n\nunion tpacket_uhdr {\n\tstruct tpacket_hdr *h1;\n\tstruct tpacket2_hdr *h2;\n\tstruct tpacket3_hdr *h3;\n\tvoid *raw;\n};\n\nstruct packet_skb_cb {\n\tunion {\n\t\tstruct sockaddr_pkt pkt;\n\t\tunion {\n\t\t\tunsigned int origlen;\n\t\t\tstruct sockaddr_ll ll;\n\t\t};\n\t} sa;\n};\n\nstruct _strp_msg {\n\tstruct strp_msg strp;\n\tint accum_len;\n};\n\nstruct vlan_group {\n\tunsigned int nr_vlan_devs;\n\tstruct hlist_node hlist;\n\tstruct net_device **vlan_devices_arrays[16];\n};\n\nstruct vlan_info {\n\tstruct net_device *real_dev;\n\tstruct vlan_group grp;\n\tstruct list_head vid_list;\n\tunsigned int nr_vids;\n\tstruct callback_head rcu;\n};\n\nenum vlan_flags {\n\tVLAN_FLAG_REORDER_HDR = 1,\n\tVLAN_FLAG_GVRP = 2,\n\tVLAN_FLAG_LOOSE_BINDING = 4,\n\tVLAN_FLAG_MVRP = 8,\n\tVLAN_FLAG_BRIDGE_BINDING = 16,\n};\n\nstruct vlan_priority_tci_mapping {\n\tu32 priority;\n\tu16 vlan_qos;\n\tstruct vlan_priority_tci_mapping *next;\n};\n\nstruct vlan_dev_priv {\n\tunsigned int nr_ingress_mappings;\n\tu32 ingress_priority_map[8];\n\tunsigned int nr_egress_mappings;\n\tstruct vlan_priority_tci_mapping *egress_priority_map[16];\n\t__be16 vlan_proto;\n\tu16 vlan_id;\n\tu16 flags;\n\tstruct net_device *real_dev;\n\tunsigned char real_dev_addr[6];\n\tstruct proc_dir_entry *dent;\n\tstruct vlan_pcpu_stats *vlan_pcpu_stats;\n\tstruct netpoll *netpoll;\n};\n\nenum vlan_protos {\n\tVLAN_PROTO_8021Q = 0,\n\tVLAN_PROTO_8021AD = 1,\n\tVLAN_PROTO_NUM = 2,\n};\n\nstruct vlan_vid_info {\n\tstruct list_head list;\n\t__be16 proto;\n\tu16 vid;\n\tint refcount;\n};\n\nenum nl80211_iftype {\n\tNL80211_IFTYPE_UNSPECIFIED = 0,\n\tNL80211_IFTYPE_ADHOC = 1,\n\tNL80211_IFTYPE_STATION = 2,\n\tNL80211_IFTYPE_AP = 3,\n\tNL80211_IFTYPE_AP_VLAN = 4,\n\tNL80211_IFTYPE_WDS = 5,\n\tNL80211_IFTYPE_MONITOR = 6,\n\tNL80211_IFTYPE_MESH_POINT = 7,\n\tNL80211_IFTYPE_P2P_CLIENT = 8,\n\tNL80211_IFTYPE_P2P_GO = 9,\n\tNL80211_IFTYPE_P2P_DEVICE = 10,\n\tNL80211_IFTYPE_OCB = 11,\n\tNL80211_IFTYPE_NAN = 12,\n\tNUM_NL80211_IFTYPES = 13,\n\tNL80211_IFTYPE_MAX = 12,\n};\n\nstruct cfg80211_conn;\n\nstruct cfg80211_cached_keys;\n\nenum ieee80211_bss_type {\n\tIEEE80211_BSS_TYPE_ESS = 0,\n\tIEEE80211_BSS_TYPE_PBSS = 1,\n\tIEEE80211_BSS_TYPE_IBSS = 2,\n\tIEEE80211_BSS_TYPE_MBSS = 3,\n\tIEEE80211_BSS_TYPE_ANY = 4,\n};\n\nstruct cfg80211_internal_bss;\n\nenum nl80211_chan_width {\n\tNL80211_CHAN_WIDTH_20_NOHT = 0,\n\tNL80211_CHAN_WIDTH_20 = 1,\n\tNL80211_CHAN_WIDTH_40 = 2,\n\tNL80211_CHAN_WIDTH_80 = 3,\n\tNL80211_CHAN_WIDTH_80P80 = 4,\n\tNL80211_CHAN_WIDTH_160 = 5,\n\tNL80211_CHAN_WIDTH_5 = 6,\n\tNL80211_CHAN_WIDTH_10 = 7,\n\tNL80211_CHAN_WIDTH_1 = 8,\n\tNL80211_CHAN_WIDTH_2 = 9,\n\tNL80211_CHAN_WIDTH_4 = 10,\n\tNL80211_CHAN_WIDTH_8 = 11,\n\tNL80211_CHAN_WIDTH_16 = 12,\n};\n\nenum ieee80211_edmg_bw_config {\n\tIEEE80211_EDMG_BW_CONFIG_4 = 4,\n\tIEEE80211_EDMG_BW_CONFIG_5 = 5,\n\tIEEE80211_EDMG_BW_CONFIG_6 = 6,\n\tIEEE80211_EDMG_BW_CONFIG_7 = 7,\n\tIEEE80211_EDMG_BW_CONFIG_8 = 8,\n\tIEEE80211_EDMG_BW_CONFIG_9 = 9,\n\tIEEE80211_EDMG_BW_CONFIG_10 = 10,\n\tIEEE80211_EDMG_BW_CONFIG_11 = 11,\n\tIEEE80211_EDMG_BW_CONFIG_12 = 12,\n\tIEEE80211_EDMG_BW_CONFIG_13 = 13,\n\tIEEE80211_EDMG_BW_CONFIG_14 = 14,\n\tIEEE80211_EDMG_BW_CONFIG_15 = 15,\n};\n\nstruct ieee80211_edmg {\n\tu8 channels;\n\tenum ieee80211_edmg_bw_config bw_config;\n};\n\nstruct ieee80211_channel;\n\nstruct cfg80211_chan_def {\n\tstruct ieee80211_channel *chan;\n\tenum nl80211_chan_width width;\n\tu32 center_freq1;\n\tu32 center_freq2;\n\tstruct ieee80211_edmg edmg;\n\tu16 freq1_offset;\n};\n\nstruct ieee80211_mcs_info {\n\tu8 rx_mask[10];\n\t__le16 rx_highest;\n\tu8 tx_params;\n\tu8 reserved[3];\n};\n\nstruct ieee80211_ht_cap {\n\t__le16 cap_info;\n\tu8 ampdu_params_info;\n\tstruct ieee80211_mcs_info mcs;\n\t__le16 extended_ht_cap_info;\n\t__le32 tx_BF_cap_info;\n\tu8 antenna_selection_info;\n} __attribute__((packed));\n\nstruct key_params;\n\nstruct cfg80211_ibss_params {\n\tconst u8 *ssid;\n\tconst u8 *bssid;\n\tstruct cfg80211_chan_def chandef;\n\tconst u8 *ie;\n\tu8 ssid_len;\n\tu8 ie_len;\n\tu16 beacon_interval;\n\tu32 basic_rates;\n\tbool channel_fixed;\n\tbool privacy;\n\tbool control_port;\n\tbool control_port_over_nl80211;\n\tbool userspace_handles_dfs;\n\tint: 24;\n\tint mcast_rate[5];\n\tstruct ieee80211_ht_cap ht_capa;\n\tstruct ieee80211_ht_cap ht_capa_mask;\n\tstruct key_params *wep_keys;\n\tint wep_tx_key;\n\tint: 32;\n} __attribute__((packed));\n\nenum nl80211_auth_type {\n\tNL80211_AUTHTYPE_OPEN_SYSTEM = 0,\n\tNL80211_AUTHTYPE_SHARED_KEY = 1,\n\tNL80211_AUTHTYPE_FT = 2,\n\tNL80211_AUTHTYPE_NETWORK_EAP = 3,\n\tNL80211_AUTHTYPE_SAE = 4,\n\tNL80211_AUTHTYPE_FILS_SK = 5,\n\tNL80211_AUTHTYPE_FILS_SK_PFS = 6,\n\tNL80211_AUTHTYPE_FILS_PK = 7,\n\t__NL80211_AUTHTYPE_NUM = 8,\n\tNL80211_AUTHTYPE_MAX = 7,\n\tNL80211_AUTHTYPE_AUTOMATIC = 8,\n};\n\nenum nl80211_mfp {\n\tNL80211_MFP_NO = 0,\n\tNL80211_MFP_REQUIRED = 1,\n\tNL80211_MFP_OPTIONAL = 2,\n};\n\nenum nl80211_sae_pwe_mechanism {\n\tNL80211_SAE_PWE_UNSPECIFIED = 0,\n\tNL80211_SAE_PWE_HUNT_AND_PECK = 1,\n\tNL80211_SAE_PWE_HASH_TO_ELEMENT = 2,\n\tNL80211_SAE_PWE_BOTH = 3,\n};\n\nstruct cfg80211_crypto_settings {\n\tu32 wpa_versions;\n\tu32 cipher_group;\n\tint n_ciphers_pairwise;\n\tu32 ciphers_pairwise[5];\n\tint n_akm_suites;\n\tu32 akm_suites[2];\n\tbool control_port;\n\t__be16 control_port_ethertype;\n\tbool control_port_no_encrypt;\n\tbool control_port_over_nl80211;\n\tbool control_port_no_preauth;\n\tstruct key_params *wep_keys;\n\tint wep_tx_key;\n\tconst u8 *psk;\n\tconst u8 *sae_pwd;\n\tu8 sae_pwd_len;\n\tenum nl80211_sae_pwe_mechanism sae_pwe;\n};\n\nstruct ieee80211_vht_mcs_info {\n\t__le16 rx_mcs_map;\n\t__le16 rx_highest;\n\t__le16 tx_mcs_map;\n\t__le16 tx_highest;\n};\n\nstruct ieee80211_vht_cap {\n\t__le32 vht_cap_info;\n\tstruct ieee80211_vht_mcs_info supp_mcs;\n};\n\nenum nl80211_bss_select_attr {\n\t__NL80211_BSS_SELECT_ATTR_INVALID = 0,\n\tNL80211_BSS_SELECT_ATTR_RSSI = 1,\n\tNL80211_BSS_SELECT_ATTR_BAND_PREF = 2,\n\tNL80211_BSS_SELECT_ATTR_RSSI_ADJUST = 3,\n\t__NL80211_BSS_SELECT_ATTR_AFTER_LAST = 4,\n\tNL80211_BSS_SELECT_ATTR_MAX = 3,\n};\n\nenum nl80211_band {\n\tNL80211_BAND_2GHZ = 0,\n\tNL80211_BAND_5GHZ = 1,\n\tNL80211_BAND_60GHZ = 2,\n\tNL80211_BAND_6GHZ = 3,\n\tNL80211_BAND_S1GHZ = 4,\n\tNUM_NL80211_BANDS = 5,\n};\n\nstruct cfg80211_bss_select_adjust {\n\tenum nl80211_band band;\n\ts8 delta;\n};\n\nstruct cfg80211_bss_selection {\n\tenum nl80211_bss_select_attr behaviour;\n\tunion {\n\t\tenum nl80211_band band_pref;\n\t\tstruct cfg80211_bss_select_adjust adjust;\n\t} param;\n};\n\nstruct cfg80211_connect_params {\n\tstruct ieee80211_channel *channel;\n\tstruct ieee80211_channel *channel_hint;\n\tconst u8 *bssid;\n\tconst u8 *bssid_hint;\n\tconst u8 *ssid;\n\tsize_t ssid_len;\n\tenum nl80211_auth_type auth_type;\n\tint: 32;\n\tconst u8 *ie;\n\tsize_t ie_len;\n\tbool privacy;\n\tint: 24;\n\tenum nl80211_mfp mfp;\n\tstruct cfg80211_crypto_settings crypto;\n\tconst u8 *key;\n\tu8 key_len;\n\tu8 key_idx;\n\tshort: 16;\n\tu32 flags;\n\tint bg_scan_period;\n\tstruct ieee80211_ht_cap ht_capa;\n\tstruct ieee80211_ht_cap ht_capa_mask;\n\tstruct ieee80211_vht_cap vht_capa;\n\tstruct ieee80211_vht_cap vht_capa_mask;\n\tbool pbss;\n\tint: 24;\n\tstruct cfg80211_bss_selection bss_select;\n\tconst u8 *prev_bssid;\n\tconst u8 *fils_erp_username;\n\tsize_t fils_erp_username_len;\n\tconst u8 *fils_erp_realm;\n\tsize_t fils_erp_realm_len;\n\tu16 fils_erp_next_seq_num;\n\tlong: 48;\n\tconst u8 *fils_erp_rrk;\n\tsize_t fils_erp_rrk_len;\n\tbool want_1x;\n\tint: 24;\n\tstruct ieee80211_edmg edmg;\n\tint: 32;\n} __attribute__((packed));\n\nstruct cfg80211_cqm_config;\n\nstruct wiphy;\n\nstruct wireless_dev {\n\tstruct wiphy *wiphy;\n\tenum nl80211_iftype iftype;\n\tstruct list_head list;\n\tstruct net_device *netdev;\n\tu32 identifier;\n\tstruct list_head mgmt_registrations;\n\tspinlock_t mgmt_registrations_lock;\n\tu8 mgmt_registrations_need_update: 1;\n\tstruct mutex mtx;\n\tbool use_4addr;\n\tbool is_running;\n\tu8 address[6];\n\tu8 ssid[32];\n\tu8 ssid_len;\n\tu8 mesh_id_len;\n\tu8 mesh_id_up_len;\n\tstruct cfg80211_conn *conn;\n\tstruct cfg80211_cached_keys *connect_keys;\n\tenum ieee80211_bss_type conn_bss_type;\n\tu32 conn_owner_nlportid;\n\tstruct work_struct disconnect_wk;\n\tu8 disconnect_bssid[6];\n\tstruct list_head event_list;\n\tspinlock_t event_lock;\n\tstruct cfg80211_internal_bss *current_bss;\n\tstruct cfg80211_chan_def preset_chandef;\n\tstruct cfg80211_chan_def chandef;\n\tbool ibss_fixed;\n\tbool ibss_dfs_possible;\n\tbool ps;\n\tint ps_timeout;\n\tint beacon_interval;\n\tu32 ap_unexpected_nlportid;\n\tu32 owner_nlportid;\n\tbool nl_owner_dead;\n\tbool cac_started;\n\tlong unsigned int cac_start_time;\n\tunsigned int cac_time_ms;\n\tstruct {\n\t\tstruct cfg80211_ibss_params ibss;\n\t\tstruct cfg80211_connect_params connect;\n\t\tstruct cfg80211_cached_keys *keys;\n\t\tconst u8 *ie;\n\t\tsize_t ie_len;\n\t\tu8 bssid[6];\n\t\tu8 prev_bssid[6];\n\t\tu8 ssid[32];\n\t\ts8 default_key;\n\t\ts8 default_mgmt_key;\n\t\tbool prev_bssid_valid;\n\t} wext;\n\tstruct cfg80211_cqm_config *cqm_config;\n\tstruct list_head pmsr_list;\n\tspinlock_t pmsr_lock;\n\tstruct work_struct pmsr_free_wk;\n\tlong unsigned int unprot_beacon_reported;\n};\n\nstruct iw_encode_ext {\n\t__u32 ext_flags;\n\t__u8 tx_seq[8];\n\t__u8 rx_seq[8];\n\tstruct sockaddr addr;\n\t__u16 alg;\n\t__u16 key_len;\n\t__u8 key[0];\n};\n\nstruct iwreq {\n\tunion {\n\t\tchar ifrn_name[16];\n\t} ifr_ifrn;\n\tunion iwreq_data u;\n};\n\nstruct iw_event {\n\t__u16 len;\n\t__u16 cmd;\n\tunion iwreq_data u;\n};\n\nstruct compat_iw_point {\n\tcompat_caddr_t pointer;\n\t__u16 length;\n\t__u16 flags;\n};\n\nstruct __compat_iw_event {\n\t__u16 len;\n\t__u16 cmd;\n\tcompat_caddr_t pointer;\n};\n\nenum nl80211_reg_initiator {\n\tNL80211_REGDOM_SET_BY_CORE = 0,\n\tNL80211_REGDOM_SET_BY_USER = 1,\n\tNL80211_REGDOM_SET_BY_DRIVER = 2,\n\tNL80211_REGDOM_SET_BY_COUNTRY_IE = 3,\n};\n\nenum nl80211_dfs_regions {\n\tNL80211_DFS_UNSET = 0,\n\tNL80211_DFS_FCC = 1,\n\tNL80211_DFS_ETSI = 2,\n\tNL80211_DFS_JP = 3,\n};\n\nenum nl80211_user_reg_hint_type {\n\tNL80211_USER_REG_HINT_USER = 0,\n\tNL80211_USER_REG_HINT_CELL_BASE = 1,\n\tNL80211_USER_REG_HINT_INDOOR = 2,\n};\n\nenum nl80211_mntr_flags {\n\t__NL80211_MNTR_FLAG_INVALID = 0,\n\tNL80211_MNTR_FLAG_FCSFAIL = 1,\n\tNL80211_MNTR_FLAG_PLCPFAIL = 2,\n\tNL80211_MNTR_FLAG_CONTROL = 3,\n\tNL80211_MNTR_FLAG_OTHER_BSS = 4,\n\tNL80211_MNTR_FLAG_COOK_FRAMES = 5,\n\tNL80211_MNTR_FLAG_ACTIVE = 6,\n\t__NL80211_MNTR_FLAG_AFTER_LAST = 7,\n\tNL80211_MNTR_FLAG_MAX = 6,\n};\n\nenum nl80211_key_mode {\n\tNL80211_KEY_RX_TX = 0,\n\tNL80211_KEY_NO_TX = 1,\n\tNL80211_KEY_SET_TX = 2,\n};\n\nenum nl80211_bss_scan_width {\n\tNL80211_BSS_CHAN_WIDTH_20 = 0,\n\tNL80211_BSS_CHAN_WIDTH_10 = 1,\n\tNL80211_BSS_CHAN_WIDTH_5 = 2,\n\tNL80211_BSS_CHAN_WIDTH_1 = 3,\n\tNL80211_BSS_CHAN_WIDTH_2 = 4,\n};\n\nstruct nl80211_wowlan_tcp_data_seq {\n\t__u32 start;\n\t__u32 offset;\n\t__u32 len;\n};\n\nstruct nl80211_wowlan_tcp_data_token {\n\t__u32 offset;\n\t__u32 len;\n\t__u8 token_stream[0];\n};\n\nstruct nl80211_wowlan_tcp_data_token_feature {\n\t__u32 min_len;\n\t__u32 max_len;\n\t__u32 bufsize;\n};\n\nenum nl80211_ext_feature_index {\n\tNL80211_EXT_FEATURE_VHT_IBSS = 0,\n\tNL80211_EXT_FEATURE_RRM = 1,\n\tNL80211_EXT_FEATURE_MU_MIMO_AIR_SNIFFER = 2,\n\tNL80211_EXT_FEATURE_SCAN_START_TIME = 3,\n\tNL80211_EXT_FEATURE_BSS_PARENT_TSF = 4,\n\tNL80211_EXT_FEATURE_SET_SCAN_DWELL = 5,\n\tNL80211_EXT_FEATURE_BEACON_RATE_LEGACY = 6,\n\tNL80211_EXT_FEATURE_BEACON_RATE_HT = 7,\n\tNL80211_EXT_FEATURE_BEACON_RATE_VHT = 8,\n\tNL80211_EXT_FEATURE_FILS_STA = 9,\n\tNL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA = 10,\n\tNL80211_EXT_FEATURE_MGMT_TX_RANDOM_TA_CONNECTED = 11,\n\tNL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 12,\n\tNL80211_EXT_FEATURE_CQM_RSSI_LIST = 13,\n\tNL80211_EXT_FEATURE_FILS_SK_OFFLOAD = 14,\n\tNL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_PSK = 15,\n\tNL80211_EXT_FEATURE_4WAY_HANDSHAKE_STA_1X = 16,\n\tNL80211_EXT_FEATURE_FILS_MAX_CHANNEL_TIME = 17,\n\tNL80211_EXT_FEATURE_ACCEPT_BCAST_PROBE_RESP = 18,\n\tNL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 19,\n\tNL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 20,\n\tNL80211_EXT_FEATURE_MFP_OPTIONAL = 21,\n\tNL80211_EXT_FEATURE_LOW_SPAN_SCAN = 22,\n\tNL80211_EXT_FEATURE_LOW_POWER_SCAN = 23,\n\tNL80211_EXT_FEATURE_HIGH_ACCURACY_SCAN = 24,\n\tNL80211_EXT_FEATURE_DFS_OFFLOAD = 25,\n\tNL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211 = 26,\n\tNL80211_EXT_FEATURE_ACK_SIGNAL_SUPPORT = 27,\n\tNL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 27,\n\tNL80211_EXT_FEATURE_TXQS = 28,\n\tNL80211_EXT_FEATURE_SCAN_RANDOM_SN = 29,\n\tNL80211_EXT_FEATURE_SCAN_MIN_PREQ_CONTENT = 30,\n\tNL80211_EXT_FEATURE_CAN_REPLACE_PTK0 = 31,\n\tNL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 32,\n\tNL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 33,\n\tNL80211_EXT_FEATURE_AP_PMKSA_CACHING = 34,\n\tNL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 35,\n\tNL80211_EXT_FEATURE_EXT_KEY_ID = 36,\n\tNL80211_EXT_FEATURE_STA_TX_PWR = 37,\n\tNL80211_EXT_FEATURE_SAE_OFFLOAD = 38,\n\tNL80211_EXT_FEATURE_VLAN_OFFLOAD = 39,\n\tNL80211_EXT_FEATURE_AQL = 40,\n\tNL80211_EXT_FEATURE_BEACON_PROTECTION = 41,\n\tNL80211_EXT_FEATURE_CONTROL_PORT_NO_PREAUTH = 42,\n\tNL80211_EXT_FEATURE_PROTECTED_TWT = 43,\n\tNL80211_EXT_FEATURE_DEL_IBSS_STA = 44,\n\tNL80211_EXT_FEATURE_MULTICAST_REGISTRATIONS = 45,\n\tNL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 46,\n\tNL80211_EXT_FEATURE_SCAN_FREQ_KHZ = 47,\n\tNL80211_EXT_FEATURE_CONTROL_PORT_OVER_NL80211_TX_STATUS = 48,\n\tNL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 49,\n\tNL80211_EXT_FEATURE_4WAY_HANDSHAKE_AP_PSK = 50,\n\tNL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 51,\n\tNL80211_EXT_FEATURE_FILS_DISCOVERY = 52,\n\tNL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 53,\n\tNL80211_EXT_FEATURE_BEACON_RATE_HE = 54,\n\tNUM_NL80211_EXT_FEATURES = 55,\n\tMAX_NL80211_EXT_FEATURES = 54,\n};\n\nenum nl80211_dfs_state {\n\tNL80211_DFS_USABLE = 0,\n\tNL80211_DFS_UNAVAILABLE = 1,\n\tNL80211_DFS_AVAILABLE = 2,\n};\n\nstruct nl80211_vendor_cmd_info {\n\t__u32 vendor_id;\n\t__u32 subcmd;\n};\n\nenum nl80211_sar_type {\n\tNL80211_SAR_TYPE_POWER = 0,\n\tNUM_NL80211_SAR_TYPE = 1,\n};\n\nstruct ieee80211_he_cap_elem {\n\tu8 mac_cap_info[6];\n\tu8 phy_cap_info[11];\n};\n\nstruct ieee80211_he_mcs_nss_supp {\n\t__le16 rx_mcs_80;\n\t__le16 tx_mcs_80;\n\t__le16 rx_mcs_160;\n\t__le16 tx_mcs_160;\n\t__le16 rx_mcs_80p80;\n\t__le16 tx_mcs_80p80;\n};\n\nstruct ieee80211_he_6ghz_capa {\n\t__le16 capa;\n};\n\nenum environment_cap {\n\tENVIRON_ANY = 0,\n\tENVIRON_INDOOR = 1,\n\tENVIRON_OUTDOOR = 2,\n};\n\nstruct regulatory_request {\n\tstruct callback_head callback_head;\n\tint wiphy_idx;\n\tenum nl80211_reg_initiator initiator;\n\tenum nl80211_user_reg_hint_type user_reg_hint_type;\n\tchar alpha2[3];\n\tenum nl80211_dfs_regions dfs_region;\n\tbool intersect;\n\tbool processed;\n\tenum environment_cap country_ie_env;\n\tstruct list_head list;\n};\n\nstruct ieee80211_freq_range {\n\tu32 start_freq_khz;\n\tu32 end_freq_khz;\n\tu32 max_bandwidth_khz;\n};\n\nstruct ieee80211_power_rule {\n\tu32 max_antenna_gain;\n\tu32 max_eirp;\n};\n\nstruct ieee80211_wmm_ac {\n\tu16 cw_min;\n\tu16 cw_max;\n\tu16 cot;\n\tu8 aifsn;\n};\n\nstruct ieee80211_wmm_rule {\n\tstruct ieee80211_wmm_ac client[4];\n\tstruct ieee80211_wmm_ac ap[4];\n};\n\nstruct ieee80211_reg_rule {\n\tstruct ieee80211_freq_range freq_range;\n\tstruct ieee80211_power_rule power_rule;\n\tstruct ieee80211_wmm_rule wmm_rule;\n\tu32 flags;\n\tu32 dfs_cac_ms;\n\tbool has_wmm;\n};\n\nstruct ieee80211_regdomain {\n\tstruct callback_head callback_head;\n\tu32 n_reg_rules;\n\tchar alpha2[3];\n\tenum nl80211_dfs_regions dfs_region;\n\tstruct ieee80211_reg_rule reg_rules[0];\n};\n\nstruct ieee80211_channel {\n\tenum nl80211_band band;\n\tu32 center_freq;\n\tu16 freq_offset;\n\tu16 hw_value;\n\tu32 flags;\n\tint max_antenna_gain;\n\tint max_power;\n\tint max_reg_power;\n\tbool beacon_found;\n\tu32 orig_flags;\n\tint orig_mag;\n\tint orig_mpwr;\n\tenum nl80211_dfs_state dfs_state;\n\tlong unsigned int dfs_state_entered;\n\tunsigned int dfs_cac_ms;\n};\n\nstruct ieee80211_rate {\n\tu32 flags;\n\tu16 bitrate;\n\tu16 hw_value;\n\tu16 hw_value_short;\n};\n\nstruct ieee80211_sta_ht_cap {\n\tu16 cap;\n\tbool ht_supported;\n\tu8 ampdu_factor;\n\tu8 ampdu_density;\n\tstruct ieee80211_mcs_info mcs;\n\tchar: 8;\n} __attribute__((packed));\n\nstruct ieee80211_sta_vht_cap {\n\tbool vht_supported;\n\tu32 cap;\n\tstruct ieee80211_vht_mcs_info vht_mcs;\n};\n\nstruct ieee80211_sta_he_cap {\n\tbool has_he;\n\tstruct ieee80211_he_cap_elem he_cap_elem;\n\tstruct ieee80211_he_mcs_nss_supp he_mcs_nss_supp;\n\tu8 ppe_thres[25];\n} __attribute__((packed));\n\nstruct ieee80211_sband_iftype_data {\n\tu16 types_mask;\n\tstruct ieee80211_sta_he_cap he_cap;\n\tstruct ieee80211_he_6ghz_capa he_6ghz_capa;\n\tchar: 8;\n} __attribute__((packed));\n\nstruct ieee80211_sta_s1g_cap {\n\tbool s1g;\n\tu8 cap[10];\n\tu8 nss_mcs[5];\n};\n\nstruct ieee80211_supported_band {\n\tstruct ieee80211_channel *channels;\n\tstruct ieee80211_rate *bitrates;\n\tenum nl80211_band band;\n\tint n_channels;\n\tint n_bitrates;\n\tstruct ieee80211_sta_ht_cap ht_cap;\n\tstruct ieee80211_sta_vht_cap vht_cap;\n\tstruct ieee80211_sta_s1g_cap s1g_cap;\n\tstruct ieee80211_edmg edmg_cap;\n\tu16 n_iftype_data;\n\tconst struct ieee80211_sband_iftype_data *iftype_data;\n};\n\nstruct key_params {\n\tconst u8 *key;\n\tconst u8 *seq;\n\tint key_len;\n\tint seq_len;\n\tu16 vlan_id;\n\tu32 cipher;\n\tenum nl80211_key_mode mode;\n};\n\nstruct mac_address {\n\tu8 addr[6];\n};\n\nstruct cfg80211_sar_freq_ranges {\n\tu32 start_freq;\n\tu32 end_freq;\n};\n\nstruct cfg80211_sar_capa {\n\tenum nl80211_sar_type type;\n\tu32 num_freq_ranges;\n\tconst struct cfg80211_sar_freq_ranges *freq_ranges;\n};\n\nstruct cfg80211_ssid {\n\tu8 ssid[32];\n\tu8 ssid_len;\n};\n\nenum cfg80211_signal_type {\n\tCFG80211_SIGNAL_TYPE_NONE = 0,\n\tCFG80211_SIGNAL_TYPE_MBM = 1,\n\tCFG80211_SIGNAL_TYPE_UNSPEC = 2,\n};\n\nstruct ieee80211_txrx_stypes;\n\nstruct ieee80211_iface_combination;\n\nstruct wiphy_iftype_akm_suites;\n\nstruct wiphy_wowlan_support;\n\nstruct cfg80211_wowlan;\n\nstruct wiphy_iftype_ext_capab;\n\nstruct wiphy_coalesce_support;\n\nstruct wiphy_vendor_command;\n\nstruct cfg80211_pmsr_capabilities;\n\nstruct wiphy {\n\tu8 perm_addr[6];\n\tu8 addr_mask[6];\n\tstruct mac_address *addresses;\n\tconst struct ieee80211_txrx_stypes *mgmt_stypes;\n\tconst struct ieee80211_iface_combination *iface_combinations;\n\tint n_iface_combinations;\n\tu16 software_iftypes;\n\tu16 n_addresses;\n\tu16 interface_modes;\n\tu16 max_acl_mac_addrs;\n\tu32 flags;\n\tu32 regulatory_flags;\n\tu32 features;\n\tu8 ext_features[7];\n\tu32 ap_sme_capa;\n\tenum cfg80211_signal_type signal_type;\n\tint bss_priv_size;\n\tu8 max_scan_ssids;\n\tu8 max_sched_scan_reqs;\n\tu8 max_sched_scan_ssids;\n\tu8 max_match_sets;\n\tu16 max_scan_ie_len;\n\tu16 max_sched_scan_ie_len;\n\tu32 max_sched_scan_plans;\n\tu32 max_sched_scan_plan_interval;\n\tu32 max_sched_scan_plan_iterations;\n\tint n_cipher_suites;\n\tconst u32 *cipher_suites;\n\tint n_akm_suites;\n\tconst u32 *akm_suites;\n\tconst struct wiphy_iftype_akm_suites *iftype_akm_suites;\n\tunsigned int num_iftype_akm_suites;\n\tu8 retry_short;\n\tu8 retry_long;\n\tu32 frag_threshold;\n\tu32 rts_threshold;\n\tu8 coverage_class;\n\tchar fw_version[32];\n\tu32 hw_version;\n\tconst struct wiphy_wowlan_support *wowlan;\n\tstruct cfg80211_wowlan *wowlan_config;\n\tu16 max_remain_on_channel_duration;\n\tu8 max_num_pmkids;\n\tu32 available_antennas_tx;\n\tu32 available_antennas_rx;\n\tu32 probe_resp_offload;\n\tconst u8 *extended_capabilities;\n\tconst u8 *extended_capabilities_mask;\n\tu8 extended_capabilities_len;\n\tconst struct wiphy_iftype_ext_capab *iftype_ext_capab;\n\tunsigned int num_iftype_ext_capab;\n\tconst void *privid;\n\tstruct ieee80211_supported_band *bands[5];\n\tvoid (*reg_notifier)(struct wiphy *, struct regulatory_request *);\n\tconst struct ieee80211_regdomain *regd;\n\tstruct device dev;\n\tbool registered;\n\tstruct dentry *debugfsdir;\n\tconst struct ieee80211_ht_cap *ht_capa_mod_mask;\n\tconst struct ieee80211_vht_cap *vht_capa_mod_mask;\n\tstruct list_head wdev_list;\n\tpossible_net_t _net;\n\tconst struct iw_handler_def *wext;\n\tconst struct wiphy_coalesce_support *coalesce;\n\tconst struct wiphy_vendor_command *vendor_commands;\n\tconst struct nl80211_vendor_cmd_info *vendor_events;\n\tint n_vendor_commands;\n\tint n_vendor_events;\n\tu16 max_ap_assoc_sta;\n\tu8 max_num_csa_counters;\n\tu32 bss_select_support;\n\tu8 nan_supported_bands;\n\tu32 txq_limit;\n\tu32 txq_memory_limit;\n\tu32 txq_quantum;\n\tlong unsigned int tx_queue_len;\n\tu8 support_mbssid: 1;\n\tu8 support_only_he_mbssid: 1;\n\tconst struct cfg80211_pmsr_capabilities *pmsr_capa;\n\tstruct {\n\t\tu64 peer;\n\t\tu64 vif;\n\t\tu8 max_retry;\n\t} tid_config_support;\n\tu8 max_data_retry_count;\n\tconst struct cfg80211_sar_capa *sar_capa;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tchar priv[0];\n};\n\nstruct cfg80211_match_set {\n\tstruct cfg80211_ssid ssid;\n\tu8 bssid[6];\n\ts32 rssi_thold;\n\ts32 per_band_rssi_thold[5];\n};\n\nstruct cfg80211_sched_scan_plan {\n\tu32 interval;\n\tu32 iterations;\n};\n\nstruct cfg80211_sched_scan_request {\n\tu64 reqid;\n\tstruct cfg80211_ssid *ssids;\n\tint n_ssids;\n\tu32 n_channels;\n\tenum nl80211_bss_scan_width scan_width;\n\tconst u8 *ie;\n\tsize_t ie_len;\n\tu32 flags;\n\tstruct cfg80211_match_set *match_sets;\n\tint n_match_sets;\n\ts32 min_rssi_thold;\n\tu32 delay;\n\tstruct cfg80211_sched_scan_plan *scan_plans;\n\tint n_scan_plans;\n\tu8 mac_addr[6];\n\tu8 mac_addr_mask[6];\n\tbool relative_rssi_set;\n\ts8 relative_rssi;\n\tstruct cfg80211_bss_select_adjust rssi_adjust;\n\tstruct wiphy *wiphy;\n\tstruct net_device *dev;\n\tlong unsigned int scan_start;\n\tbool report_results;\n\tstruct callback_head callback_head;\n\tu32 owner_nlportid;\n\tbool nl_owner_dead;\n\tstruct list_head list;\n\tstruct ieee80211_channel *channels[0];\n};\n\nstruct cfg80211_pkt_pattern {\n\tconst u8 *mask;\n\tconst u8 *pattern;\n\tint pattern_len;\n\tint pkt_offset;\n};\n\nstruct cfg80211_wowlan_tcp {\n\tstruct socket *sock;\n\t__be32 src;\n\t__be32 dst;\n\tu16 src_port;\n\tu16 dst_port;\n\tu8 dst_mac[6];\n\tint payload_len;\n\tconst u8 *payload;\n\tstruct nl80211_wowlan_tcp_data_seq payload_seq;\n\tu32 data_interval;\n\tu32 wake_len;\n\tconst u8 *wake_data;\n\tconst u8 *wake_mask;\n\tu32 tokens_size;\n\tstruct nl80211_wowlan_tcp_data_token payload_tok;\n};\n\nstruct cfg80211_wowlan {\n\tbool any;\n\tbool disconnect;\n\tbool magic_pkt;\n\tbool gtk_rekey_failure;\n\tbool eap_identity_req;\n\tbool four_way_handshake;\n\tbool rfkill_release;\n\tstruct cfg80211_pkt_pattern *patterns;\n\tstruct cfg80211_wowlan_tcp *tcp;\n\tint n_patterns;\n\tstruct cfg80211_sched_scan_request *nd_config;\n};\n\nstruct ieee80211_iface_limit {\n\tu16 max;\n\tu16 types;\n};\n\nstruct ieee80211_iface_combination {\n\tconst struct ieee80211_iface_limit *limits;\n\tu32 num_different_channels;\n\tu16 max_interfaces;\n\tu8 n_limits;\n\tbool beacon_int_infra_match;\n\tu8 radar_detect_widths;\n\tu8 radar_detect_regions;\n\tu32 beacon_int_min_gcd;\n};\n\nstruct ieee80211_txrx_stypes {\n\tu16 tx;\n\tu16 rx;\n};\n\nstruct wiphy_wowlan_tcp_support {\n\tconst struct nl80211_wowlan_tcp_data_token_feature *tok;\n\tu32 data_payload_max;\n\tu32 data_interval_max;\n\tu32 wake_payload_max;\n\tbool seq;\n};\n\nstruct wiphy_wowlan_support {\n\tu32 flags;\n\tint n_patterns;\n\tint pattern_max_len;\n\tint pattern_min_len;\n\tint max_pkt_offset;\n\tint max_nd_match_sets;\n\tconst struct wiphy_wowlan_tcp_support *tcp;\n};\n\nstruct wiphy_coalesce_support {\n\tint n_rules;\n\tint max_delay;\n\tint n_patterns;\n\tint pattern_max_len;\n\tint pattern_min_len;\n\tint max_pkt_offset;\n};\n\nstruct wiphy_vendor_command {\n\tstruct nl80211_vendor_cmd_info info;\n\tu32 flags;\n\tint (*doit)(struct wiphy *, struct wireless_dev *, const void *, int);\n\tint (*dumpit)(struct wiphy *, struct wireless_dev *, struct sk_buff *, const void *, int, long unsigned int *);\n\tconst struct nla_policy *policy;\n\tunsigned int maxattr;\n};\n\nstruct wiphy_iftype_ext_capab {\n\tenum nl80211_iftype iftype;\n\tconst u8 *extended_capabilities;\n\tconst u8 *extended_capabilities_mask;\n\tu8 extended_capabilities_len;\n};\n\nstruct cfg80211_pmsr_capabilities {\n\tunsigned int max_peers;\n\tu8 report_ap_tsf: 1;\n\tu8 randomize_mac_addr: 1;\n\tstruct {\n\t\tu32 preambles;\n\t\tu32 bandwidths;\n\t\ts8 max_bursts_exponent;\n\t\tu8 max_ftms_per_burst;\n\t\tu8 supported: 1;\n\t\tu8 asap: 1;\n\t\tu8 non_asap: 1;\n\t\tu8 request_lci: 1;\n\t\tu8 request_civicloc: 1;\n\t\tu8 trigger_based: 1;\n\t\tu8 non_trigger_based: 1;\n\t} ftm;\n};\n\nstruct wiphy_iftype_akm_suites {\n\tu16 iftypes_mask;\n\tconst u32 *akm_suites;\n\tint n_akm_suites;\n};\n\nstruct iw_ioctl_description {\n\t__u8 header_type;\n\t__u8 token_type;\n\t__u16 token_size;\n\t__u16 min_tokens;\n\t__u16 max_tokens;\n\t__u32 flags;\n};\n\ntypedef int (*wext_ioctl_func)(struct net_device *, struct iwreq *, unsigned int, struct iw_request_info *, iw_handler);\n\nstruct iw_thrspy {\n\tstruct sockaddr addr;\n\tstruct iw_quality qual;\n\tstruct iw_quality low;\n\tstruct iw_quality high;\n};\n\nstruct netlbl_af4list {\n\t__be32 addr;\n\t__be32 mask;\n\tu32 valid;\n\tstruct list_head list;\n};\n\nstruct netlbl_af6list {\n\tstruct in6_addr addr;\n\tstruct in6_addr mask;\n\tu32 valid;\n\tstruct list_head list;\n};\n\nstruct netlbl_domaddr_map {\n\tstruct list_head list4;\n\tstruct list_head list6;\n};\n\nstruct netlbl_dommap_def {\n\tu32 type;\n\tunion {\n\t\tstruct netlbl_domaddr_map *addrsel;\n\t\tstruct cipso_v4_doi *cipso;\n\t\tstruct calipso_doi *calipso;\n\t};\n};\n\nstruct netlbl_domaddr4_map {\n\tstruct netlbl_dommap_def def;\n\tstruct netlbl_af4list list;\n};\n\nstruct netlbl_domaddr6_map {\n\tstruct netlbl_dommap_def def;\n\tstruct netlbl_af6list list;\n};\n\nstruct netlbl_dom_map {\n\tchar *domain;\n\tu16 family;\n\tstruct netlbl_dommap_def def;\n\tu32 valid;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n};\n\nstruct netlbl_domhsh_tbl {\n\tstruct list_head *tbl;\n\tu32 size;\n};\n\nenum {\n\tNLBL_MGMT_C_UNSPEC = 0,\n\tNLBL_MGMT_C_ADD = 1,\n\tNLBL_MGMT_C_REMOVE = 2,\n\tNLBL_MGMT_C_LISTALL = 3,\n\tNLBL_MGMT_C_ADDDEF = 4,\n\tNLBL_MGMT_C_REMOVEDEF = 5,\n\tNLBL_MGMT_C_LISTDEF = 6,\n\tNLBL_MGMT_C_PROTOCOLS = 7,\n\tNLBL_MGMT_C_VERSION = 8,\n\t__NLBL_MGMT_C_MAX = 9,\n};\n\nenum {\n\tNLBL_MGMT_A_UNSPEC = 0,\n\tNLBL_MGMT_A_DOMAIN = 1,\n\tNLBL_MGMT_A_PROTOCOL = 2,\n\tNLBL_MGMT_A_VERSION = 3,\n\tNLBL_MGMT_A_CV4DOI = 4,\n\tNLBL_MGMT_A_IPV6ADDR = 5,\n\tNLBL_MGMT_A_IPV6MASK = 6,\n\tNLBL_MGMT_A_IPV4ADDR = 7,\n\tNLBL_MGMT_A_IPV4MASK = 8,\n\tNLBL_MGMT_A_ADDRSELECTOR = 9,\n\tNLBL_MGMT_A_SELECTORLIST = 10,\n\tNLBL_MGMT_A_FAMILY = 11,\n\tNLBL_MGMT_A_CLPDOI = 12,\n\t__NLBL_MGMT_A_MAX = 13,\n};\n\nstruct netlbl_domhsh_walk_arg {\n\tstruct netlink_callback *nl_cb;\n\tstruct sk_buff *skb;\n\tu32 seq;\n};\n\nenum {\n\tNLBL_UNLABEL_C_UNSPEC = 0,\n\tNLBL_UNLABEL_C_ACCEPT = 1,\n\tNLBL_UNLABEL_C_LIST = 2,\n\tNLBL_UNLABEL_C_STATICADD = 3,\n\tNLBL_UNLABEL_C_STATICREMOVE = 4,\n\tNLBL_UNLABEL_C_STATICLIST = 5,\n\tNLBL_UNLABEL_C_STATICADDDEF = 6,\n\tNLBL_UNLABEL_C_STATICREMOVEDEF = 7,\n\tNLBL_UNLABEL_C_STATICLISTDEF = 8,\n\t__NLBL_UNLABEL_C_MAX = 9,\n};\n\nenum {\n\tNLBL_UNLABEL_A_UNSPEC = 0,\n\tNLBL_UNLABEL_A_ACPTFLG = 1,\n\tNLBL_UNLABEL_A_IPV6ADDR = 2,\n\tNLBL_UNLABEL_A_IPV6MASK = 3,\n\tNLBL_UNLABEL_A_IPV4ADDR = 4,\n\tNLBL_UNLABEL_A_IPV4MASK = 5,\n\tNLBL_UNLABEL_A_IFACE = 6,\n\tNLBL_UNLABEL_A_SECCTX = 7,\n\t__NLBL_UNLABEL_A_MAX = 8,\n};\n\nstruct netlbl_unlhsh_tbl {\n\tstruct list_head *tbl;\n\tu32 size;\n};\n\nstruct netlbl_unlhsh_addr4 {\n\tu32 secid;\n\tstruct netlbl_af4list list;\n\tstruct callback_head rcu;\n};\n\nstruct netlbl_unlhsh_addr6 {\n\tu32 secid;\n\tstruct netlbl_af6list list;\n\tstruct callback_head rcu;\n};\n\nstruct netlbl_unlhsh_iface {\n\tint ifindex;\n\tstruct list_head addr4_list;\n\tstruct list_head addr6_list;\n\tu32 valid;\n\tstruct list_head list;\n\tstruct callback_head rcu;\n};\n\nstruct netlbl_unlhsh_walk_arg {\n\tstruct netlink_callback *nl_cb;\n\tstruct sk_buff *skb;\n\tu32 seq;\n};\n\nenum {\n\tNLBL_CIPSOV4_C_UNSPEC = 0,\n\tNLBL_CIPSOV4_C_ADD = 1,\n\tNLBL_CIPSOV4_C_REMOVE = 2,\n\tNLBL_CIPSOV4_C_LIST = 3,\n\tNLBL_CIPSOV4_C_LISTALL = 4,\n\t__NLBL_CIPSOV4_C_MAX = 5,\n};\n\nenum {\n\tNLBL_CIPSOV4_A_UNSPEC = 0,\n\tNLBL_CIPSOV4_A_DOI = 1,\n\tNLBL_CIPSOV4_A_MTYPE = 2,\n\tNLBL_CIPSOV4_A_TAG = 3,\n\tNLBL_CIPSOV4_A_TAGLST = 4,\n\tNLBL_CIPSOV4_A_MLSLVLLOC = 5,\n\tNLBL_CIPSOV4_A_MLSLVLREM = 6,\n\tNLBL_CIPSOV4_A_MLSLVL = 7,\n\tNLBL_CIPSOV4_A_MLSLVLLST = 8,\n\tNLBL_CIPSOV4_A_MLSCATLOC = 9,\n\tNLBL_CIPSOV4_A_MLSCATREM = 10,\n\tNLBL_CIPSOV4_A_MLSCAT = 11,\n\tNLBL_CIPSOV4_A_MLSCATLST = 12,\n\t__NLBL_CIPSOV4_A_MAX = 13,\n};\n\nstruct netlbl_cipsov4_doiwalk_arg {\n\tstruct netlink_callback *nl_cb;\n\tstruct sk_buff *skb;\n\tu32 seq;\n};\n\nstruct netlbl_domhsh_walk_arg___2 {\n\tstruct netlbl_audit *audit_info;\n\tu32 doi;\n};\n\nenum {\n\tNLBL_CALIPSO_C_UNSPEC = 0,\n\tNLBL_CALIPSO_C_ADD = 1,\n\tNLBL_CALIPSO_C_REMOVE = 2,\n\tNLBL_CALIPSO_C_LIST = 3,\n\tNLBL_CALIPSO_C_LISTALL = 4,\n\t__NLBL_CALIPSO_C_MAX = 5,\n};\n\nenum {\n\tNLBL_CALIPSO_A_UNSPEC = 0,\n\tNLBL_CALIPSO_A_DOI = 1,\n\tNLBL_CALIPSO_A_MTYPE = 2,\n\t__NLBL_CALIPSO_A_MAX = 3,\n};\n\nstruct netlbl_calipso_doiwalk_arg {\n\tstruct netlink_callback *nl_cb;\n\tstruct sk_buff *skb;\n\tu32 seq;\n};\n\nstruct dcbmsg {\n\t__u8 dcb_family;\n\t__u8 cmd;\n\t__u16 dcb_pad;\n};\n\nenum dcbnl_commands {\n\tDCB_CMD_UNDEFINED = 0,\n\tDCB_CMD_GSTATE = 1,\n\tDCB_CMD_SSTATE = 2,\n\tDCB_CMD_PGTX_GCFG = 3,\n\tDCB_CMD_PGTX_SCFG = 4,\n\tDCB_CMD_PGRX_GCFG = 5,\n\tDCB_CMD_PGRX_SCFG = 6,\n\tDCB_CMD_PFC_GCFG = 7,\n\tDCB_CMD_PFC_SCFG = 8,\n\tDCB_CMD_SET_ALL = 9,\n\tDCB_CMD_GPERM_HWADDR = 10,\n\tDCB_CMD_GCAP = 11,\n\tDCB_CMD_GNUMTCS = 12,\n\tDCB_CMD_SNUMTCS = 13,\n\tDCB_CMD_PFC_GSTATE = 14,\n\tDCB_CMD_PFC_SSTATE = 15,\n\tDCB_CMD_BCN_GCFG = 16,\n\tDCB_CMD_BCN_SCFG = 17,\n\tDCB_CMD_GAPP = 18,\n\tDCB_CMD_SAPP = 19,\n\tDCB_CMD_IEEE_SET = 20,\n\tDCB_CMD_IEEE_GET = 21,\n\tDCB_CMD_GDCBX = 22,\n\tDCB_CMD_SDCBX = 23,\n\tDCB_CMD_GFEATCFG = 24,\n\tDCB_CMD_SFEATCFG = 25,\n\tDCB_CMD_CEE_GET = 26,\n\tDCB_CMD_IEEE_DEL = 27,\n\t__DCB_CMD_ENUM_MAX = 28,\n\tDCB_CMD_MAX = 27,\n};\n\nenum dcbnl_attrs {\n\tDCB_ATTR_UNDEFINED = 0,\n\tDCB_ATTR_IFNAME = 1,\n\tDCB_ATTR_STATE = 2,\n\tDCB_ATTR_PFC_STATE = 3,\n\tDCB_ATTR_PFC_CFG = 4,\n\tDCB_ATTR_NUM_TC = 5,\n\tDCB_ATTR_PG_CFG = 6,\n\tDCB_ATTR_SET_ALL = 7,\n\tDCB_ATTR_PERM_HWADDR = 8,\n\tDCB_ATTR_CAP = 9,\n\tDCB_ATTR_NUMTCS = 10,\n\tDCB_ATTR_BCN = 11,\n\tDCB_ATTR_APP = 12,\n\tDCB_ATTR_IEEE = 13,\n\tDCB_ATTR_DCBX = 14,\n\tDCB_ATTR_FEATCFG = 15,\n\tDCB_ATTR_CEE = 16,\n\t__DCB_ATTR_ENUM_MAX = 17,\n\tDCB_ATTR_MAX = 16,\n};\n\nenum ieee_attrs {\n\tDCB_ATTR_IEEE_UNSPEC = 0,\n\tDCB_ATTR_IEEE_ETS = 1,\n\tDCB_ATTR_IEEE_PFC = 2,\n\tDCB_ATTR_IEEE_APP_TABLE = 3,\n\tDCB_ATTR_IEEE_PEER_ETS = 4,\n\tDCB_ATTR_IEEE_PEER_PFC = 5,\n\tDCB_ATTR_IEEE_PEER_APP = 6,\n\tDCB_ATTR_IEEE_MAXRATE = 7,\n\tDCB_ATTR_IEEE_QCN = 8,\n\tDCB_ATTR_IEEE_QCN_STATS = 9,\n\tDCB_ATTR_DCB_BUFFER = 10,\n\t__DCB_ATTR_IEEE_MAX = 11,\n};\n\nenum ieee_attrs_app {\n\tDCB_ATTR_IEEE_APP_UNSPEC = 0,\n\tDCB_ATTR_IEEE_APP = 1,\n\t__DCB_ATTR_IEEE_APP_MAX = 2,\n};\n\nenum cee_attrs {\n\tDCB_ATTR_CEE_UNSPEC = 0,\n\tDCB_ATTR_CEE_PEER_PG = 1,\n\tDCB_ATTR_CEE_PEER_PFC = 2,\n\tDCB_ATTR_CEE_PEER_APP_TABLE = 3,\n\tDCB_ATTR_CEE_TX_PG = 4,\n\tDCB_ATTR_CEE_RX_PG = 5,\n\tDCB_ATTR_CEE_PFC = 6,\n\tDCB_ATTR_CEE_APP_TABLE = 7,\n\tDCB_ATTR_CEE_FEAT = 8,\n\t__DCB_ATTR_CEE_MAX = 9,\n};\n\nenum peer_app_attr {\n\tDCB_ATTR_CEE_PEER_APP_UNSPEC = 0,\n\tDCB_ATTR_CEE_PEER_APP_INFO = 1,\n\tDCB_ATTR_CEE_PEER_APP = 2,\n\t__DCB_ATTR_CEE_PEER_APP_MAX = 3,\n};\n\nenum dcbnl_pfc_up_attrs {\n\tDCB_PFC_UP_ATTR_UNDEFINED = 0,\n\tDCB_PFC_UP_ATTR_0 = 1,\n\tDCB_PFC_UP_ATTR_1 = 2,\n\tDCB_PFC_UP_ATTR_2 = 3,\n\tDCB_PFC_UP_ATTR_3 = 4,\n\tDCB_PFC_UP_ATTR_4 = 5,\n\tDCB_PFC_UP_ATTR_5 = 6,\n\tDCB_PFC_UP_ATTR_6 = 7,\n\tDCB_PFC_UP_ATTR_7 = 8,\n\tDCB_PFC_UP_ATTR_ALL = 9,\n\t__DCB_PFC_UP_ATTR_ENUM_MAX = 10,\n\tDCB_PFC_UP_ATTR_MAX = 9,\n};\n\nenum dcbnl_pg_attrs {\n\tDCB_PG_ATTR_UNDEFINED = 0,\n\tDCB_PG_ATTR_TC_0 = 1,\n\tDCB_PG_ATTR_TC_1 = 2,\n\tDCB_PG_ATTR_TC_2 = 3,\n\tDCB_PG_ATTR_TC_3 = 4,\n\tDCB_PG_ATTR_TC_4 = 5,\n\tDCB_PG_ATTR_TC_5 = 6,\n\tDCB_PG_ATTR_TC_6 = 7,\n\tDCB_PG_ATTR_TC_7 = 8,\n\tDCB_PG_ATTR_TC_MAX = 9,\n\tDCB_PG_ATTR_TC_ALL = 10,\n\tDCB_PG_ATTR_BW_ID_0 = 11,\n\tDCB_PG_ATTR_BW_ID_1 = 12,\n\tDCB_PG_ATTR_BW_ID_2 = 13,\n\tDCB_PG_ATTR_BW_ID_3 = 14,\n\tDCB_PG_ATTR_BW_ID_4 = 15,\n\tDCB_PG_ATTR_BW_ID_5 = 16,\n\tDCB_PG_ATTR_BW_ID_6 = 17,\n\tDCB_PG_ATTR_BW_ID_7 = 18,\n\tDCB_PG_ATTR_BW_ID_MAX = 19,\n\tDCB_PG_ATTR_BW_ID_ALL = 20,\n\t__DCB_PG_ATTR_ENUM_MAX = 21,\n\tDCB_PG_ATTR_MAX = 20,\n};\n\nenum dcbnl_tc_attrs {\n\tDCB_TC_ATTR_PARAM_UNDEFINED = 0,\n\tDCB_TC_ATTR_PARAM_PGID = 1,\n\tDCB_TC_ATTR_PARAM_UP_MAPPING = 2,\n\tDCB_TC_ATTR_PARAM_STRICT_PRIO = 3,\n\tDCB_TC_ATTR_PARAM_BW_PCT = 4,\n\tDCB_TC_ATTR_PARAM_ALL = 5,\n\t__DCB_TC_ATTR_PARAM_ENUM_MAX = 6,\n\tDCB_TC_ATTR_PARAM_MAX = 5,\n};\n\nenum dcbnl_cap_attrs {\n\tDCB_CAP_ATTR_UNDEFINED = 0,\n\tDCB_CAP_ATTR_ALL = 1,\n\tDCB_CAP_ATTR_PG = 2,\n\tDCB_CAP_ATTR_PFC = 3,\n\tDCB_CAP_ATTR_UP2TC = 4,\n\tDCB_CAP_ATTR_PG_TCS = 5,\n\tDCB_CAP_ATTR_PFC_TCS = 6,\n\tDCB_CAP_ATTR_GSP = 7,\n\tDCB_CAP_ATTR_BCN = 8,\n\tDCB_CAP_ATTR_DCBX = 9,\n\t__DCB_CAP_ATTR_ENUM_MAX = 10,\n\tDCB_CAP_ATTR_MAX = 9,\n};\n\nenum dcbnl_numtcs_attrs {\n\tDCB_NUMTCS_ATTR_UNDEFINED = 0,\n\tDCB_NUMTCS_ATTR_ALL = 1,\n\tDCB_NUMTCS_ATTR_PG = 2,\n\tDCB_NUMTCS_ATTR_PFC = 3,\n\t__DCB_NUMTCS_ATTR_ENUM_MAX = 4,\n\tDCB_NUMTCS_ATTR_MAX = 3,\n};\n\nenum dcbnl_bcn_attrs {\n\tDCB_BCN_ATTR_UNDEFINED = 0,\n\tDCB_BCN_ATTR_RP_0 = 1,\n\tDCB_BCN_ATTR_RP_1 = 2,\n\tDCB_BCN_ATTR_RP_2 = 3,\n\tDCB_BCN_ATTR_RP_3 = 4,\n\tDCB_BCN_ATTR_RP_4 = 5,\n\tDCB_BCN_ATTR_RP_5 = 6,\n\tDCB_BCN_ATTR_RP_6 = 7,\n\tDCB_BCN_ATTR_RP_7 = 8,\n\tDCB_BCN_ATTR_RP_ALL = 9,\n\tDCB_BCN_ATTR_BCNA_0 = 10,\n\tDCB_BCN_ATTR_BCNA_1 = 11,\n\tDCB_BCN_ATTR_ALPHA = 12,\n\tDCB_BCN_ATTR_BETA = 13,\n\tDCB_BCN_ATTR_GD = 14,\n\tDCB_BCN_ATTR_GI = 15,\n\tDCB_BCN_ATTR_TMAX = 16,\n\tDCB_BCN_ATTR_TD = 17,\n\tDCB_BCN_ATTR_RMIN = 18,\n\tDCB_BCN_ATTR_W = 19,\n\tDCB_BCN_ATTR_RD = 20,\n\tDCB_BCN_ATTR_RU = 21,\n\tDCB_BCN_ATTR_WRTT = 22,\n\tDCB_BCN_ATTR_RI = 23,\n\tDCB_BCN_ATTR_C = 24,\n\tDCB_BCN_ATTR_ALL = 25,\n\t__DCB_BCN_ATTR_ENUM_MAX = 26,\n\tDCB_BCN_ATTR_MAX = 25,\n};\n\nenum dcb_general_attr_values {\n\tDCB_ATTR_VALUE_UNDEFINED = 255,\n};\n\nenum dcbnl_app_attrs {\n\tDCB_APP_ATTR_UNDEFINED = 0,\n\tDCB_APP_ATTR_IDTYPE = 1,\n\tDCB_APP_ATTR_ID = 2,\n\tDCB_APP_ATTR_PRIORITY = 3,\n\t__DCB_APP_ATTR_ENUM_MAX = 4,\n\tDCB_APP_ATTR_MAX = 3,\n};\n\nenum dcbnl_featcfg_attrs {\n\tDCB_FEATCFG_ATTR_UNDEFINED = 0,\n\tDCB_FEATCFG_ATTR_ALL = 1,\n\tDCB_FEATCFG_ATTR_PG = 2,\n\tDCB_FEATCFG_ATTR_PFC = 3,\n\tDCB_FEATCFG_ATTR_APP = 4,\n\t__DCB_FEATCFG_ATTR_ENUM_MAX = 5,\n\tDCB_FEATCFG_ATTR_MAX = 4,\n};\n\nstruct dcb_app_type {\n\tint ifindex;\n\tstruct dcb_app app;\n\tstruct list_head list;\n\tu8 dcbx;\n};\n\nstruct dcb_ieee_app_prio_map {\n\tu64 map[8];\n};\n\nstruct dcb_ieee_app_dscp_map {\n\tu8 map[64];\n};\n\nenum dcbevent_notif_type {\n\tDCB_APP_EVENT = 1,\n};\n\nstruct reply_func {\n\tint type;\n\tint (*cb)(struct net_device *, struct nlmsghdr *, u32, struct nlattr **, struct sk_buff *);\n};\n\nenum switchdev_attr_id {\n\tSWITCHDEV_ATTR_ID_UNDEFINED = 0,\n\tSWITCHDEV_ATTR_ID_PORT_STP_STATE = 1,\n\tSWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS = 2,\n\tSWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS = 3,\n\tSWITCHDEV_ATTR_ID_PORT_MROUTER = 4,\n\tSWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME = 5,\n\tSWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING = 6,\n\tSWITCHDEV_ATTR_ID_BRIDGE_VLAN_PROTOCOL = 7,\n\tSWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED = 8,\n\tSWITCHDEV_ATTR_ID_BRIDGE_MROUTER = 9,\n\tSWITCHDEV_ATTR_ID_MRP_PORT_ROLE = 10,\n};\n\nstruct switchdev_attr {\n\tstruct net_device *orig_dev;\n\tenum switchdev_attr_id id;\n\tu32 flags;\n\tvoid *complete_priv;\n\tvoid (*complete)(struct net_device *, int, void *);\n\tunion {\n\t\tu8 stp_state;\n\t\tlong unsigned int brport_flags;\n\t\tbool mrouter;\n\t\tclock_t ageing_time;\n\t\tbool vlan_filtering;\n\t\tu16 vlan_protocol;\n\t\tbool mc_disabled;\n\t\tu8 mrp_port_role;\n\t} u;\n};\n\nenum switchdev_notifier_type {\n\tSWITCHDEV_FDB_ADD_TO_BRIDGE = 1,\n\tSWITCHDEV_FDB_DEL_TO_BRIDGE = 2,\n\tSWITCHDEV_FDB_ADD_TO_DEVICE = 3,\n\tSWITCHDEV_FDB_DEL_TO_DEVICE = 4,\n\tSWITCHDEV_FDB_OFFLOADED = 5,\n\tSWITCHDEV_FDB_FLUSH_TO_BRIDGE = 6,\n\tSWITCHDEV_PORT_OBJ_ADD = 7,\n\tSWITCHDEV_PORT_OBJ_DEL = 8,\n\tSWITCHDEV_PORT_ATTR_SET = 9,\n\tSWITCHDEV_VXLAN_FDB_ADD_TO_BRIDGE = 10,\n\tSWITCHDEV_VXLAN_FDB_DEL_TO_BRIDGE = 11,\n\tSWITCHDEV_VXLAN_FDB_ADD_TO_DEVICE = 12,\n\tSWITCHDEV_VXLAN_FDB_DEL_TO_DEVICE = 13,\n\tSWITCHDEV_VXLAN_FDB_OFFLOADED = 14,\n};\n\nstruct switchdev_notifier_info {\n\tstruct net_device *dev;\n\tstruct netlink_ext_ack *extack;\n};\n\nstruct switchdev_notifier_port_obj_info {\n\tstruct switchdev_notifier_info info;\n\tconst struct switchdev_obj *obj;\n\tstruct switchdev_trans *trans;\n\tbool handled;\n};\n\nstruct switchdev_notifier_port_attr_info {\n\tstruct switchdev_notifier_info info;\n\tconst struct switchdev_attr *attr;\n\tstruct switchdev_trans *trans;\n\tbool handled;\n};\n\ntypedef void switchdev_deferred_func_t(struct net_device *, const void *);\n\nstruct switchdev_deferred_item {\n\tstruct list_head list;\n\tstruct net_device *dev;\n\tswitchdev_deferred_func_t *func;\n\tlong unsigned int data[0];\n};\n\ntypedef int (*lookup_by_table_id_t)(struct net *, u32);\n\nstruct l3mdev_handler {\n\tlookup_by_table_id_t dev_lookup;\n};\n\nstruct ncsi_dev {\n\tint state;\n\tint link_up;\n\tstruct net_device *dev;\n\tvoid (*handler)(struct ncsi_dev *);\n};\n\nenum {\n\tNCSI_CAP_BASE = 0,\n\tNCSI_CAP_GENERIC = 0,\n\tNCSI_CAP_BC = 1,\n\tNCSI_CAP_MC = 2,\n\tNCSI_CAP_BUFFER = 3,\n\tNCSI_CAP_AEN = 4,\n\tNCSI_CAP_VLAN = 5,\n\tNCSI_CAP_MAX = 6,\n};\n\nenum {\n\tNCSI_MODE_BASE = 0,\n\tNCSI_MODE_ENABLE = 0,\n\tNCSI_MODE_TX_ENABLE = 1,\n\tNCSI_MODE_LINK = 2,\n\tNCSI_MODE_VLAN = 3,\n\tNCSI_MODE_BC = 4,\n\tNCSI_MODE_MC = 5,\n\tNCSI_MODE_AEN = 6,\n\tNCSI_MODE_FC = 7,\n\tNCSI_MODE_MAX = 8,\n};\n\nstruct ncsi_channel_version {\n\tu32 version;\n\tu32 alpha2;\n\tu8 fw_name[12];\n\tu32 fw_version;\n\tu16 pci_ids[4];\n\tu32 mf_id;\n};\n\nstruct ncsi_channel_cap {\n\tu32 index;\n\tu32 cap;\n};\n\nstruct ncsi_channel_mode {\n\tu32 index;\n\tu32 enable;\n\tu32 size;\n\tu32 data[8];\n};\n\nstruct ncsi_channel_mac_filter {\n\tu8 n_uc;\n\tu8 n_mc;\n\tu8 n_mixed;\n\tu64 bitmap;\n\tunsigned char *addrs;\n};\n\nstruct ncsi_channel_vlan_filter {\n\tu8 n_vids;\n\tu64 bitmap;\n\tu16 *vids;\n};\n\nstruct ncsi_channel_stats {\n\tu32 hnc_cnt_hi;\n\tu32 hnc_cnt_lo;\n\tu32 hnc_rx_bytes;\n\tu32 hnc_tx_bytes;\n\tu32 hnc_rx_uc_pkts;\n\tu32 hnc_rx_mc_pkts;\n\tu32 hnc_rx_bc_pkts;\n\tu32 hnc_tx_uc_pkts;\n\tu32 hnc_tx_mc_pkts;\n\tu32 hnc_tx_bc_pkts;\n\tu32 hnc_fcs_err;\n\tu32 hnc_align_err;\n\tu32 hnc_false_carrier;\n\tu32 hnc_runt_pkts;\n\tu32 hnc_jabber_pkts;\n\tu32 hnc_rx_pause_xon;\n\tu32 hnc_rx_pause_xoff;\n\tu32 hnc_tx_pause_xon;\n\tu32 hnc_tx_pause_xoff;\n\tu32 hnc_tx_s_collision;\n\tu32 hnc_tx_m_collision;\n\tu32 hnc_l_collision;\n\tu32 hnc_e_collision;\n\tu32 hnc_rx_ctl_frames;\n\tu32 hnc_rx_64_frames;\n\tu32 hnc_rx_127_frames;\n\tu32 hnc_rx_255_frames;\n\tu32 hnc_rx_511_frames;\n\tu32 hnc_rx_1023_frames;\n\tu32 hnc_rx_1522_frames;\n\tu32 hnc_rx_9022_frames;\n\tu32 hnc_tx_64_frames;\n\tu32 hnc_tx_127_frames;\n\tu32 hnc_tx_255_frames;\n\tu32 hnc_tx_511_frames;\n\tu32 hnc_tx_1023_frames;\n\tu32 hnc_tx_1522_frames;\n\tu32 hnc_tx_9022_frames;\n\tu32 hnc_rx_valid_bytes;\n\tu32 hnc_rx_runt_pkts;\n\tu32 hnc_rx_jabber_pkts;\n\tu32 ncsi_rx_cmds;\n\tu32 ncsi_dropped_cmds;\n\tu32 ncsi_cmd_type_errs;\n\tu32 ncsi_cmd_csum_errs;\n\tu32 ncsi_rx_pkts;\n\tu32 ncsi_tx_pkts;\n\tu32 ncsi_tx_aen_pkts;\n\tu32 pt_tx_pkts;\n\tu32 pt_tx_dropped;\n\tu32 pt_tx_channel_err;\n\tu32 pt_tx_us_err;\n\tu32 pt_rx_pkts;\n\tu32 pt_rx_dropped;\n\tu32 pt_rx_channel_err;\n\tu32 pt_rx_us_err;\n\tu32 pt_rx_os_err;\n};\n\nstruct ncsi_package;\n\nstruct ncsi_channel {\n\tunsigned char id;\n\tint state;\n\tbool reconfigure_needed;\n\tspinlock_t lock;\n\tstruct ncsi_package *package;\n\tstruct ncsi_channel_version version;\n\tstruct ncsi_channel_cap caps[6];\n\tstruct ncsi_channel_mode modes[8];\n\tstruct ncsi_channel_mac_filter mac_filter;\n\tstruct ncsi_channel_vlan_filter vlan_filter;\n\tstruct ncsi_channel_stats stats;\n\tstruct {\n\t\tstruct timer_list timer;\n\t\tbool enabled;\n\t\tunsigned int state;\n\t} monitor;\n\tstruct list_head node;\n\tstruct list_head link;\n};\n\nstruct ncsi_dev_priv;\n\nstruct ncsi_package {\n\tunsigned char id;\n\tunsigned char uuid[16];\n\tstruct ncsi_dev_priv *ndp;\n\tspinlock_t lock;\n\tunsigned int channel_num;\n\tstruct list_head channels;\n\tstruct list_head node;\n\tbool multi_channel;\n\tu32 channel_whitelist;\n\tstruct ncsi_channel *preferred_channel;\n};\n\nstruct ncsi_request {\n\tunsigned char id;\n\tbool used;\n\tunsigned int flags;\n\tstruct ncsi_dev_priv *ndp;\n\tstruct sk_buff *cmd;\n\tstruct sk_buff *rsp;\n\tstruct timer_list timer;\n\tbool enabled;\n\tu32 snd_seq;\n\tu32 snd_portid;\n\tstruct nlmsghdr nlhdr;\n};\n\nstruct ncsi_dev_priv {\n\tstruct ncsi_dev ndev;\n\tunsigned int flags;\n\tunsigned int gma_flag;\n\tspinlock_t lock;\n\tunsigned int package_probe_id;\n\tunsigned int package_num;\n\tstruct list_head packages;\n\tstruct ncsi_channel *hot_channel;\n\tstruct ncsi_request requests[256];\n\tunsigned int request_id;\n\tunsigned int pending_req_num;\n\tstruct ncsi_package *active_package;\n\tstruct ncsi_channel *active_channel;\n\tstruct list_head channel_queue;\n\tstruct work_struct work;\n\tstruct packet_type ptype;\n\tstruct list_head node;\n\tstruct list_head vlan_vids;\n\tbool multi_package;\n\tbool mlx_multi_host;\n\tu32 package_whitelist;\n};\n\nstruct ncsi_cmd_arg {\n\tstruct ncsi_dev_priv *ndp;\n\tunsigned char type;\n\tunsigned char id;\n\tunsigned char package;\n\tunsigned char channel;\n\tshort unsigned int payload;\n\tunsigned int req_flags;\n\tunion {\n\t\tunsigned char bytes[16];\n\t\tshort unsigned int words[8];\n\t\tunsigned int dwords[4];\n\t};\n\tunsigned char *data;\n\tstruct genl_info *info;\n};\n\nstruct ncsi_pkt_hdr {\n\tunsigned char mc_id;\n\tunsigned char revision;\n\tunsigned char reserved;\n\tunsigned char id;\n\tunsigned char type;\n\tunsigned char channel;\n\t__be16 length;\n\t__be32 reserved1[2];\n};\n\nstruct ncsi_cmd_pkt_hdr {\n\tstruct ncsi_pkt_hdr common;\n};\n\nstruct ncsi_cmd_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\t__be32 checksum;\n\tunsigned char pad[26];\n};\n\nstruct ncsi_cmd_sp_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\tunsigned char reserved[3];\n\tunsigned char hw_arbitration;\n\t__be32 checksum;\n\tunsigned char pad[22];\n};\n\nstruct ncsi_cmd_dc_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\tunsigned char reserved[3];\n\tunsigned char ald;\n\t__be32 checksum;\n\tunsigned char pad[22];\n};\n\nstruct ncsi_cmd_rc_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\t__be32 reserved;\n\t__be32 checksum;\n\tunsigned char pad[22];\n};\n\nstruct ncsi_cmd_ae_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\tunsigned char reserved[3];\n\tunsigned char mc_id;\n\t__be32 mode;\n\t__be32 checksum;\n\tunsigned char pad[18];\n};\n\nstruct ncsi_cmd_sl_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\t__be32 mode;\n\t__be32 oem_mode;\n\t__be32 checksum;\n\tunsigned char pad[18];\n};\n\nstruct ncsi_cmd_svf_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\t__be16 reserved;\n\t__be16 vlan;\n\t__be16 reserved1;\n\tunsigned char index;\n\tunsigned char enable;\n\t__be32 checksum;\n\tunsigned char pad[18];\n};\n\nstruct ncsi_cmd_ev_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\tunsigned char reserved[3];\n\tunsigned char mode;\n\t__be32 checksum;\n\tunsigned char pad[22];\n};\n\nstruct ncsi_cmd_sma_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\tunsigned char mac[6];\n\tunsigned char index;\n\tunsigned char at_e;\n\t__be32 checksum;\n\tunsigned char pad[18];\n};\n\nstruct ncsi_cmd_ebf_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\t__be32 mode;\n\t__be32 checksum;\n\tunsigned char pad[22];\n};\n\nstruct ncsi_cmd_egmf_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\t__be32 mode;\n\t__be32 checksum;\n\tunsigned char pad[22];\n};\n\nstruct ncsi_cmd_snfc_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\tunsigned char reserved[3];\n\tunsigned char mode;\n\t__be32 checksum;\n\tunsigned char pad[22];\n};\n\nstruct ncsi_cmd_oem_pkt {\n\tstruct ncsi_cmd_pkt_hdr cmd;\n\t__be32 mfr_id;\n\tunsigned char data[0];\n};\n\nstruct ncsi_cmd_handler {\n\tunsigned char type;\n\tint payload;\n\tint (*handler)(struct sk_buff *, struct ncsi_cmd_arg *);\n};\n\nenum {\n\tNCSI_CAP_GENERIC_HWA = 1,\n\tNCSI_CAP_GENERIC_HDS = 2,\n\tNCSI_CAP_GENERIC_FC = 4,\n\tNCSI_CAP_GENERIC_FC1 = 8,\n\tNCSI_CAP_GENERIC_MC = 16,\n\tNCSI_CAP_GENERIC_HWA_UNKNOWN = 0,\n\tNCSI_CAP_GENERIC_HWA_SUPPORT = 32,\n\tNCSI_CAP_GENERIC_HWA_NOT_SUPPORT = 64,\n\tNCSI_CAP_GENERIC_HWA_RESERVED = 96,\n\tNCSI_CAP_GENERIC_HWA_MASK = 96,\n\tNCSI_CAP_GENERIC_MASK = 127,\n\tNCSI_CAP_BC_ARP = 1,\n\tNCSI_CAP_BC_DHCPC = 2,\n\tNCSI_CAP_BC_DHCPS = 4,\n\tNCSI_CAP_BC_NETBIOS = 8,\n\tNCSI_CAP_BC_MASK = 15,\n\tNCSI_CAP_MC_IPV6_NEIGHBOR = 1,\n\tNCSI_CAP_MC_IPV6_ROUTER = 2,\n\tNCSI_CAP_MC_DHCPV6_RELAY = 4,\n\tNCSI_CAP_MC_DHCPV6_WELL_KNOWN = 8,\n\tNCSI_CAP_MC_IPV6_MLD = 16,\n\tNCSI_CAP_MC_IPV6_NEIGHBOR_S = 32,\n\tNCSI_CAP_MC_MASK = 63,\n\tNCSI_CAP_AEN_LSC = 1,\n\tNCSI_CAP_AEN_CR = 2,\n\tNCSI_CAP_AEN_HDS = 4,\n\tNCSI_CAP_AEN_MASK = 7,\n\tNCSI_CAP_VLAN_ONLY = 1,\n\tNCSI_CAP_VLAN_NO = 2,\n\tNCSI_CAP_VLAN_ANY = 4,\n\tNCSI_CAP_VLAN_MASK = 7,\n};\n\nstruct ncsi_rsp_pkt_hdr {\n\tstruct ncsi_pkt_hdr common;\n\t__be16 code;\n\t__be16 reason;\n};\n\nstruct ncsi_rsp_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\t__be32 checksum;\n\tunsigned char pad[22];\n};\n\nstruct ncsi_rsp_oem_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\t__be32 mfr_id;\n\tunsigned char data[0];\n};\n\nstruct ncsi_rsp_oem_mlx_pkt {\n\tunsigned char cmd_rev;\n\tunsigned char cmd;\n\tunsigned char param;\n\tunsigned char optional;\n\tunsigned char data[0];\n};\n\nstruct ncsi_rsp_oem_bcm_pkt {\n\tunsigned char ver;\n\tunsigned char type;\n\t__be16 len;\n\tunsigned char data[0];\n};\n\nstruct ncsi_rsp_gls_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\t__be32 status;\n\t__be32 other;\n\t__be32 oem_status;\n\t__be32 checksum;\n\tunsigned char pad[10];\n};\n\nstruct ncsi_rsp_gvi_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\t__be32 ncsi_version;\n\tunsigned char reserved[3];\n\tunsigned char alpha2;\n\tunsigned char fw_name[12];\n\t__be32 fw_version;\n\t__be16 pci_ids[4];\n\t__be32 mf_id;\n\t__be32 checksum;\n};\n\nstruct ncsi_rsp_gc_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\t__be32 cap;\n\t__be32 bc_cap;\n\t__be32 mc_cap;\n\t__be32 buf_cap;\n\t__be32 aen_cap;\n\tunsigned char vlan_cnt;\n\tunsigned char mixed_cnt;\n\tunsigned char mc_cnt;\n\tunsigned char uc_cnt;\n\tunsigned char reserved[2];\n\tunsigned char vlan_mode;\n\tunsigned char channel_cnt;\n\t__be32 checksum;\n};\n\nstruct ncsi_rsp_gp_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\tunsigned char mac_cnt;\n\tunsigned char reserved[2];\n\tunsigned char mac_enable;\n\tunsigned char vlan_cnt;\n\tunsigned char reserved1;\n\t__be16 vlan_enable;\n\t__be32 link_mode;\n\t__be32 bc_mode;\n\t__be32 valid_modes;\n\tunsigned char vlan_mode;\n\tunsigned char fc_mode;\n\tunsigned char reserved2[2];\n\t__be32 aen_mode;\n\tunsigned char mac[6];\n\t__be16 vlan;\n\t__be32 checksum;\n};\n\nstruct ncsi_rsp_gcps_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\t__be32 cnt_hi;\n\t__be32 cnt_lo;\n\t__be32 rx_bytes;\n\t__be32 tx_bytes;\n\t__be32 rx_uc_pkts;\n\t__be32 rx_mc_pkts;\n\t__be32 rx_bc_pkts;\n\t__be32 tx_uc_pkts;\n\t__be32 tx_mc_pkts;\n\t__be32 tx_bc_pkts;\n\t__be32 fcs_err;\n\t__be32 align_err;\n\t__be32 false_carrier;\n\t__be32 runt_pkts;\n\t__be32 jabber_pkts;\n\t__be32 rx_pause_xon;\n\t__be32 rx_pause_xoff;\n\t__be32 tx_pause_xon;\n\t__be32 tx_pause_xoff;\n\t__be32 tx_s_collision;\n\t__be32 tx_m_collision;\n\t__be32 l_collision;\n\t__be32 e_collision;\n\t__be32 rx_ctl_frames;\n\t__be32 rx_64_frames;\n\t__be32 rx_127_frames;\n\t__be32 rx_255_frames;\n\t__be32 rx_511_frames;\n\t__be32 rx_1023_frames;\n\t__be32 rx_1522_frames;\n\t__be32 rx_9022_frames;\n\t__be32 tx_64_frames;\n\t__be32 tx_127_frames;\n\t__be32 tx_255_frames;\n\t__be32 tx_511_frames;\n\t__be32 tx_1023_frames;\n\t__be32 tx_1522_frames;\n\t__be32 tx_9022_frames;\n\t__be32 rx_valid_bytes;\n\t__be32 rx_runt_pkts;\n\t__be32 rx_jabber_pkts;\n\t__be32 checksum;\n};\n\nstruct ncsi_rsp_gns_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\t__be32 rx_cmds;\n\t__be32 dropped_cmds;\n\t__be32 cmd_type_errs;\n\t__be32 cmd_csum_errs;\n\t__be32 rx_pkts;\n\t__be32 tx_pkts;\n\t__be32 tx_aen_pkts;\n\t__be32 checksum;\n};\n\nstruct ncsi_rsp_gnpts_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\t__be32 tx_pkts;\n\t__be32 tx_dropped;\n\t__be32 tx_channel_err;\n\t__be32 tx_us_err;\n\t__be32 rx_pkts;\n\t__be32 rx_dropped;\n\t__be32 rx_channel_err;\n\t__be32 rx_us_err;\n\t__be32 rx_os_err;\n\t__be32 checksum;\n};\n\nstruct ncsi_rsp_gps_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\t__be32 status;\n\t__be32 checksum;\n};\n\nstruct ncsi_rsp_gpuuid_pkt {\n\tstruct ncsi_rsp_pkt_hdr rsp;\n\tunsigned char uuid[16];\n\t__be32 checksum;\n};\n\nstruct ncsi_rsp_oem_handler {\n\tunsigned int mfr_id;\n\tint (*handler)(struct ncsi_request *);\n};\n\nstruct ncsi_rsp_handler {\n\tunsigned char type;\n\tint payload;\n\tint (*handler)(struct ncsi_request *);\n};\n\nstruct ncsi_aen_pkt_hdr {\n\tstruct ncsi_pkt_hdr common;\n\tunsigned char reserved2[3];\n\tunsigned char type;\n};\n\nstruct ncsi_aen_lsc_pkt {\n\tstruct ncsi_aen_pkt_hdr aen;\n\t__be32 status;\n\t__be32 oem_status;\n\t__be32 checksum;\n\tunsigned char pad[14];\n};\n\nstruct ncsi_aen_hncdsc_pkt {\n\tstruct ncsi_aen_pkt_hdr aen;\n\t__be32 status;\n\t__be32 checksum;\n\tunsigned char pad[18];\n};\n\nstruct ncsi_aen_handler {\n\tunsigned char type;\n\tint payload;\n\tint (*handler)(struct ncsi_dev_priv *, struct ncsi_aen_pkt_hdr *);\n};\n\nenum {\n\tncsi_dev_state_registered = 0,\n\tncsi_dev_state_functional = 256,\n\tncsi_dev_state_probe = 512,\n\tncsi_dev_state_config = 768,\n\tncsi_dev_state_suspend = 1024,\n};\n\nenum {\n\tMLX_MC_RBT_SUPPORT = 1,\n\tMLX_MC_RBT_AVL = 8,\n};\n\nenum {\n\tncsi_dev_state_major = 65280,\n\tncsi_dev_state_minor = 255,\n\tncsi_dev_state_probe_deselect = 513,\n\tncsi_dev_state_probe_package = 514,\n\tncsi_dev_state_probe_channel = 515,\n\tncsi_dev_state_probe_mlx_gma = 516,\n\tncsi_dev_state_probe_mlx_smaf = 517,\n\tncsi_dev_state_probe_cis = 518,\n\tncsi_dev_state_probe_gvi = 519,\n\tncsi_dev_state_probe_gc = 520,\n\tncsi_dev_state_probe_gls = 521,\n\tncsi_dev_state_probe_dp = 522,\n\tncsi_dev_state_config_sp = 769,\n\tncsi_dev_state_config_cis = 770,\n\tncsi_dev_state_config_oem_gma = 771,\n\tncsi_dev_state_config_clear_vids = 772,\n\tncsi_dev_state_config_svf = 773,\n\tncsi_dev_state_config_ev = 774,\n\tncsi_dev_state_config_sma = 775,\n\tncsi_dev_state_config_ebf = 776,\n\tncsi_dev_state_config_dgmf = 777,\n\tncsi_dev_state_config_ecnt = 778,\n\tncsi_dev_state_config_ec = 779,\n\tncsi_dev_state_config_ae = 780,\n\tncsi_dev_state_config_gls = 781,\n\tncsi_dev_state_config_done = 782,\n\tncsi_dev_state_suspend_select = 1025,\n\tncsi_dev_state_suspend_gls = 1026,\n\tncsi_dev_state_suspend_dcnt = 1027,\n\tncsi_dev_state_suspend_dc = 1028,\n\tncsi_dev_state_suspend_deselect = 1029,\n\tncsi_dev_state_suspend_done = 1030,\n};\n\nstruct vlan_vid {\n\tstruct list_head list;\n\t__be16 proto;\n\tu16 vid;\n};\n\nstruct ncsi_oem_gma_handler {\n\tunsigned int mfr_id;\n\tint (*handler)(struct ncsi_cmd_arg *);\n};\n\nenum ncsi_nl_commands {\n\tNCSI_CMD_UNSPEC = 0,\n\tNCSI_CMD_PKG_INFO = 1,\n\tNCSI_CMD_SET_INTERFACE = 2,\n\tNCSI_CMD_CLEAR_INTERFACE = 3,\n\tNCSI_CMD_SEND_CMD = 4,\n\tNCSI_CMD_SET_PACKAGE_MASK = 5,\n\tNCSI_CMD_SET_CHANNEL_MASK = 6,\n\t__NCSI_CMD_AFTER_LAST = 7,\n\tNCSI_CMD_MAX = 6,\n};\n\nenum ncsi_nl_attrs {\n\tNCSI_ATTR_UNSPEC = 0,\n\tNCSI_ATTR_IFINDEX = 1,\n\tNCSI_ATTR_PACKAGE_LIST = 2,\n\tNCSI_ATTR_PACKAGE_ID = 3,\n\tNCSI_ATTR_CHANNEL_ID = 4,\n\tNCSI_ATTR_DATA = 5,\n\tNCSI_ATTR_MULTI_FLAG = 6,\n\tNCSI_ATTR_PACKAGE_MASK = 7,\n\tNCSI_ATTR_CHANNEL_MASK = 8,\n\t__NCSI_ATTR_AFTER_LAST = 9,\n\tNCSI_ATTR_MAX = 8,\n};\n\nenum ncsi_nl_pkg_attrs {\n\tNCSI_PKG_ATTR_UNSPEC = 0,\n\tNCSI_PKG_ATTR = 1,\n\tNCSI_PKG_ATTR_ID = 2,\n\tNCSI_PKG_ATTR_FORCED = 3,\n\tNCSI_PKG_ATTR_CHANNEL_LIST = 4,\n\t__NCSI_PKG_ATTR_AFTER_LAST = 5,\n\tNCSI_PKG_ATTR_MAX = 4,\n};\n\nenum ncsi_nl_channel_attrs {\n\tNCSI_CHANNEL_ATTR_UNSPEC = 0,\n\tNCSI_CHANNEL_ATTR = 1,\n\tNCSI_CHANNEL_ATTR_ID = 2,\n\tNCSI_CHANNEL_ATTR_VERSION_MAJOR = 3,\n\tNCSI_CHANNEL_ATTR_VERSION_MINOR = 4,\n\tNCSI_CHANNEL_ATTR_VERSION_STR = 5,\n\tNCSI_CHANNEL_ATTR_LINK_STATE = 6,\n\tNCSI_CHANNEL_ATTR_ACTIVE = 7,\n\tNCSI_CHANNEL_ATTR_FORCED = 8,\n\tNCSI_CHANNEL_ATTR_VLAN_LIST = 9,\n\tNCSI_CHANNEL_ATTR_VLAN_ID = 10,\n\t__NCSI_CHANNEL_ATTR_AFTER_LAST = 11,\n\tNCSI_CHANNEL_ATTR_MAX = 10,\n};\n\nstruct sockaddr_xdp {\n\t__u16 sxdp_family;\n\t__u16 sxdp_flags;\n\t__u32 sxdp_ifindex;\n\t__u32 sxdp_queue_id;\n\t__u32 sxdp_shared_umem_fd;\n};\n\nstruct xdp_ring_offset {\n\t__u64 producer;\n\t__u64 consumer;\n\t__u64 desc;\n\t__u64 flags;\n};\n\nstruct xdp_mmap_offsets {\n\tstruct xdp_ring_offset rx;\n\tstruct xdp_ring_offset tx;\n\tstruct xdp_ring_offset fr;\n\tstruct xdp_ring_offset cr;\n};\n\nstruct xdp_umem_reg {\n\t__u64 addr;\n\t__u64 len;\n\t__u32 chunk_size;\n\t__u32 headroom;\n\t__u32 flags;\n};\n\nstruct xdp_statistics {\n\t__u64 rx_dropped;\n\t__u64 rx_invalid_descs;\n\t__u64 tx_invalid_descs;\n\t__u64 rx_ring_full;\n\t__u64 rx_fill_ring_empty_descs;\n\t__u64 tx_ring_empty_descs;\n};\n\nstruct xdp_options {\n\t__u32 flags;\n};\n\nstruct xdp_desc {\n\t__u64 addr;\n\t__u32 len;\n\t__u32 options;\n};\n\nstruct xdp_ring;\n\nstruct xsk_queue {\n\tu32 ring_mask;\n\tu32 nentries;\n\tu32 cached_prod;\n\tu32 cached_cons;\n\tstruct xdp_ring *ring;\n\tu64 invalid_descs;\n\tu64 queue_empty_descs;\n};\n\nstruct xdp_ring_offset_v1 {\n\t__u64 producer;\n\t__u64 consumer;\n\t__u64 desc;\n};\n\nstruct xdp_mmap_offsets_v1 {\n\tstruct xdp_ring_offset_v1 rx;\n\tstruct xdp_ring_offset_v1 tx;\n\tstruct xdp_ring_offset_v1 fr;\n\tstruct xdp_ring_offset_v1 cr;\n};\n\nstruct xsk_map_node {\n\tstruct list_head node;\n\tstruct xsk_map *map;\n\tstruct xdp_sock **map_entry;\n};\n\nstruct xdp_ring {\n\tu32 producer;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tu32 pad1;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tu32 consumer;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tu32 pad2;\n\tu32 flags;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tu32 pad3;\n\tlong: 32;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n\tlong: 64;\n};\n\nstruct xdp_rxtx_ring {\n\tstruct xdp_ring ptrs;\n\tstruct xdp_desc desc[0];\n};\n\nstruct xdp_umem_ring {\n\tstruct xdp_ring ptrs;\n\tu64 desc[0];\n};\n\nstruct xsk_dma_map {\n\tdma_addr_t *dma_pages;\n\tstruct device *dev;\n\tstruct net_device *netdev;\n\trefcount_t users;\n\tstruct list_head list;\n\tu32 dma_pages_cnt;\n\tbool dma_need_sync;\n};\n\nstruct mptcp_mib {\n\tlong unsigned int mibs[23];\n};\n\nstruct mptcp_options_received {\n\tu64 sndr_key;\n\tu64 rcvr_key;\n\tu64 data_ack;\n\tu64 data_seq;\n\tu32 subflow_seq;\n\tu16 data_len;\n\tu16 mp_capable: 1;\n\tu16 mp_join: 1;\n\tu16 fastclose: 1;\n\tu16 dss: 1;\n\tu16 add_addr: 1;\n\tu16 rm_addr: 1;\n\tu16 family: 4;\n\tu16 echo: 1;\n\tu16 backup: 1;\n\tu32 token;\n\tu32 nonce;\n\tu64 thmac;\n\tu8 hmac[20];\n\tu8 join_id;\n\tu8 use_map: 1;\n\tu8 dsn64: 1;\n\tu8 data_fin: 1;\n\tu8 use_ack: 1;\n\tu8 ack64: 1;\n\tu8 mpc_map: 1;\n\tu8 __unused: 2;\n\tu8 addr_id;\n\tu8 rm_id;\n\tunion {\n\t\tstruct in_addr addr;\n\t\tstruct in6_addr addr6;\n\t};\n\tu64 ahmac;\n\tu16 port;\n};\n\nstruct mptcp_addr_info {\n\tsa_family_t family;\n\t__be16 port;\n\tu8 id;\n\tu8 flags;\n\tint ifindex;\n\tunion {\n\t\tstruct in_addr addr;\n\t\tstruct in6_addr addr6;\n\t};\n};\n\nenum mptcp_pm_status {\n\tMPTCP_PM_ADD_ADDR_RECEIVED = 0,\n\tMPTCP_PM_ADD_ADDR_SEND_ACK = 1,\n\tMPTCP_PM_RM_ADDR_RECEIVED = 2,\n\tMPTCP_PM_ESTABLISHED = 3,\n\tMPTCP_PM_ALREADY_ESTABLISHED = 4,\n\tMPTCP_PM_SUBFLOW_ESTABLISHED = 5,\n};\n\nstruct mptcp_pm_data {\n\tstruct mptcp_addr_info local;\n\tstruct mptcp_addr_info remote;\n\tstruct list_head anno_list;\n\tspinlock_t lock;\n\tu8 addr_signal;\n\tbool server_side;\n\tbool work_pending;\n\tbool accept_addr;\n\tbool accept_subflow;\n\tu8 add_addr_signaled;\n\tu8 add_addr_accepted;\n\tu8 local_addr_used;\n\tu8 subflows;\n\tu8 add_addr_signal_max;\n\tu8 add_addr_accept_max;\n\tu8 local_addr_max;\n\tu8 subflows_max;\n\tu8 status;\n\tu8 rm_id;\n};\n\nstruct mptcp_data_frag {\n\tstruct list_head list;\n\tu64 data_seq;\n\tu16 data_len;\n\tu16 offset;\n\tu16 overhead;\n\tu16 already_sent;\n\tstruct page *page;\n};\n\nstruct mptcp_sock {\n\tstruct inet_connection_sock sk;\n\tu64 local_key;\n\tu64 remote_key;\n\tu64 write_seq;\n\tu64 snd_nxt;\n\tu64 ack_seq;\n\tu64 rcv_wnd_sent;\n\tu64 rcv_data_fin_seq;\n\tint wmem_reserved;\n\tstruct sock *last_snd;\n\tint snd_burst;\n\tint old_wspace;\n\tu64 snd_una;\n\tu64 wnd_end;\n\tlong unsigned int timer_ival;\n\tu32 token;\n\tint rmem_pending;\n\tint rmem_released;\n\tlong unsigned int flags;\n\tbool can_ack;\n\tbool fully_established;\n\tbool rcv_data_fin;\n\tbool snd_data_fin_enable;\n\tbool rcv_fastclose;\n\tbool use_64bit_ack;\n\tspinlock_t join_list_lock;\n\tstruct sock *ack_hint;\n\tstruct work_struct work;\n\tstruct sk_buff *ooo_last_skb;\n\tstruct rb_root out_of_order_queue;\n\tstruct sk_buff_head receive_queue;\n\tstruct sk_buff_head skb_tx_cache;\n\tint tx_pending_data;\n\tint size_goal_cache;\n\tstruct list_head conn_list;\n\tstruct list_head rtx_queue;\n\tstruct mptcp_data_frag *first_pending;\n\tstruct list_head join_list;\n\tstruct socket *subflow;\n\tstruct sock *first;\n\tstruct mptcp_pm_data pm;\n\tstruct {\n\t\tu32 space;\n\t\tu32 copied;\n\t\tu64 time;\n\t\tu64 rtt_us;\n\t} rcvq_space;\n};\n\nstruct mptcp_subflow_request_sock {\n\tstruct tcp_request_sock sk;\n\tu16 mp_capable: 1;\n\tu16 mp_join: 1;\n\tu16 backup: 1;\n\tu8 local_id;\n\tu8 remote_id;\n\tu64 local_key;\n\tu64 idsn;\n\tu32 token;\n\tu32 ssn_offset;\n\tu64 thmac;\n\tu32 local_nonce;\n\tu32 remote_nonce;\n\tstruct mptcp_sock *msk;\n\tstruct hlist_nulls_node token_node;\n};\n\nenum mptcp_data_avail {\n\tMPTCP_SUBFLOW_NODATA = 0,\n\tMPTCP_SUBFLOW_DATA_AVAIL = 1,\n\tMPTCP_SUBFLOW_OOO_DATA = 2,\n};\n\nstruct mptcp_subflow_context {\n\tstruct list_head node;\n\tu64 local_key;\n\tu64 remote_key;\n\tu64 idsn;\n\tu64 map_seq;\n\tu32 snd_isn;\n\tu32 token;\n\tu32 rel_write_seq;\n\tu32 map_subflow_seq;\n\tu32 ssn_offset;\n\tu32 map_data_len;\n\tu32 request_mptcp: 1;\n\tu32 request_join: 1;\n\tu32 request_bkup: 1;\n\tu32 mp_capable: 1;\n\tu32 mp_join: 1;\n\tu32 fully_established: 1;\n\tu32 pm_notified: 1;\n\tu32 conn_finished: 1;\n\tu32 map_valid: 1;\n\tu32 mpc_map: 1;\n\tu32 backup: 1;\n\tu32 rx_eof: 1;\n\tu32 can_ack: 1;\n\tu32 disposable: 1;\n\tenum mptcp_data_avail data_avail;\n\tu32 remote_nonce;\n\tu64 thmac;\n\tu32 local_nonce;\n\tu32 remote_token;\n\tu8 hmac[20];\n\tu8 local_id;\n\tu8 remote_id;\n\tstruct sock *tcp_sock;\n\tstruct sock *conn;\n\tconst struct inet_connection_sock_af_ops *icsk_af_ops;\n\tvoid (*tcp_data_ready)(struct sock *);\n\tvoid (*tcp_state_change)(struct sock *);\n\tvoid (*tcp_write_space)(struct sock *);\n\tvoid (*tcp_error_report)(struct sock *);\n\tstruct callback_head rcu;\n};\n\nenum linux_mptcp_mib_field {\n\tMPTCP_MIB_NUM = 0,\n\tMPTCP_MIB_MPCAPABLEPASSIVE = 1,\n\tMPTCP_MIB_MPCAPABLEPASSIVEACK = 2,\n\tMPTCP_MIB_MPCAPABLEPASSIVEFALLBACK = 3,\n\tMPTCP_MIB_MPCAPABLEACTIVEFALLBACK = 4,\n\tMPTCP_MIB_RETRANSSEGS = 5,\n\tMPTCP_MIB_JOINNOTOKEN = 6,\n\tMPTCP_MIB_JOINSYNRX = 7,\n\tMPTCP_MIB_JOINSYNACKRX = 8,\n\tMPTCP_MIB_JOINSYNACKMAC = 9,\n\tMPTCP_MIB_JOINACKRX = 10,\n\tMPTCP_MIB_JOINACKMAC = 11,\n\tMPTCP_MIB_DSSNOMATCH = 12,\n\tMPTCP_MIB_INFINITEMAPRX = 13,\n\tMPTCP_MIB_OFOQUEUETAIL = 14,\n\tMPTCP_MIB_OFOQUEUE = 15,\n\tMPTCP_MIB_OFOMERGE = 16,\n\tMPTCP_MIB_NODSSWINDOW = 17,\n\tMPTCP_MIB_DUPDATA = 18,\n\tMPTCP_MIB_ADDADDR = 19,\n\tMPTCP_MIB_ECHOADD = 20,\n\tMPTCP_MIB_RMADDR = 21,\n\tMPTCP_MIB_RMSUBFLOW = 22,\n\t__MPTCP_MIB_MAX = 23,\n};\n\nstruct mptcp_skb_cb {\n\tu64 map_seq;\n\tu64 end_seq;\n\tu32 offset;\n};\n\nstruct mptcp_sendmsg_info {\n\tint mss_now;\n\tint size_goal;\n\tu16 limit;\n\tu16 sent;\n\tunsigned int flags;\n};\n\nstruct subflow_send_info {\n\tstruct sock *ssk;\n\tu64 ratio;\n};\n\nenum mapping_status {\n\tMAPPING_OK = 0,\n\tMAPPING_INVALID = 1,\n\tMAPPING_EMPTY = 2,\n\tMAPPING_DATA_FIN = 3,\n\tMAPPING_DUMMY = 4,\n};\n\nenum mptcp_addr_signal_status {\n\tMPTCP_ADD_ADDR_SIGNAL = 0,\n\tMPTCP_ADD_ADDR_ECHO = 1,\n\tMPTCP_ADD_ADDR_IPV6 = 2,\n\tMPTCP_ADD_ADDR_PORT = 3,\n\tMPTCP_RM_ADDR_SIGNAL = 4,\n};\n\nstruct mptcp_pm_add_entry;\n\nstruct token_bucket {\n\tspinlock_t lock;\n\tint chain_len;\n\tstruct hlist_nulls_head req_chain;\n\tstruct hlist_nulls_head msk_chain;\n};\n\nstruct mptcp_pernet {\n\tstruct ctl_table_header *ctl_table_hdr;\n\tint mptcp_enabled;\n\tunsigned int add_addr_timeout;\n};\n\nenum {\n\tINET_ULP_INFO_UNSPEC = 0,\n\tINET_ULP_INFO_NAME = 1,\n\tINET_ULP_INFO_TLS = 2,\n\tINET_ULP_INFO_MPTCP = 3,\n\t__INET_ULP_INFO_MAX = 4,\n};\n\nenum {\n\tMPTCP_SUBFLOW_ATTR_UNSPEC = 0,\n\tMPTCP_SUBFLOW_ATTR_TOKEN_REM = 1,\n\tMPTCP_SUBFLOW_ATTR_TOKEN_LOC = 2,\n\tMPTCP_SUBFLOW_ATTR_RELWRITE_SEQ = 3,\n\tMPTCP_SUBFLOW_ATTR_MAP_SEQ = 4,\n\tMPTCP_SUBFLOW_ATTR_MAP_SFSEQ = 5,\n\tMPTCP_SUBFLOW_ATTR_SSN_OFFSET = 6,\n\tMPTCP_SUBFLOW_ATTR_MAP_DATALEN = 7,\n\tMPTCP_SUBFLOW_ATTR_FLAGS = 8,\n\tMPTCP_SUBFLOW_ATTR_ID_REM = 9,\n\tMPTCP_SUBFLOW_ATTR_ID_LOC = 10,\n\tMPTCP_SUBFLOW_ATTR_PAD = 11,\n\t__MPTCP_SUBFLOW_ATTR_MAX = 12,\n};\n\nenum {\n\tMPTCP_PM_ATTR_UNSPEC = 0,\n\tMPTCP_PM_ATTR_ADDR = 1,\n\tMPTCP_PM_ATTR_RCV_ADD_ADDRS = 2,\n\tMPTCP_PM_ATTR_SUBFLOWS = 3,\n\t__MPTCP_PM_ATTR_MAX = 4,\n};\n\nenum {\n\tMPTCP_PM_ADDR_ATTR_UNSPEC = 0,\n\tMPTCP_PM_ADDR_ATTR_FAMILY = 1,\n\tMPTCP_PM_ADDR_ATTR_ID = 2,\n\tMPTCP_PM_ADDR_ATTR_ADDR4 = 3,\n\tMPTCP_PM_ADDR_ATTR_ADDR6 = 4,\n\tMPTCP_PM_ADDR_ATTR_PORT = 5,\n\tMPTCP_PM_ADDR_ATTR_FLAGS = 6,\n\tMPTCP_PM_ADDR_ATTR_IF_IDX = 7,\n\t__MPTCP_PM_ADDR_ATTR_MAX = 8,\n};\n\nenum {\n\tMPTCP_PM_CMD_UNSPEC = 0,\n\tMPTCP_PM_CMD_ADD_ADDR = 1,\n\tMPTCP_PM_CMD_DEL_ADDR = 2,\n\tMPTCP_PM_CMD_GET_ADDR = 3,\n\tMPTCP_PM_CMD_FLUSH_ADDRS = 4,\n\tMPTCP_PM_CMD_SET_LIMITS = 5,\n\tMPTCP_PM_CMD_GET_LIMITS = 6,\n\t__MPTCP_PM_CMD_AFTER_LAST = 7,\n};\n\nstruct mptcp_pm_addr_entry {\n\tstruct list_head list;\n\tstruct mptcp_addr_info addr;\n\tstruct callback_head rcu;\n};\n\nstruct mptcp_pm_add_entry___2 {\n\tstruct list_head list;\n\tstruct mptcp_addr_info addr;\n\tstruct timer_list add_timer;\n\tstruct mptcp_sock *sock;\n\tu8 retrans_times;\n};\n\nstruct pm_nl_pernet {\n\tspinlock_t lock;\n\tstruct list_head local_addr_list;\n\tunsigned int addrs;\n\tunsigned int add_addr_signal_max;\n\tunsigned int add_addr_accept_max;\n\tunsigned int local_addr_max;\n\tunsigned int subflows_max;\n\tunsigned int next_id;\n};\n\nstruct join_entry {\n\tu32 token;\n\tu32 remote_nonce;\n\tu32 local_nonce;\n\tu8 join_id;\n\tu8 local_id;\n\tu8 backup;\n\tu8 valid;\n};\n\nstruct pcibios_fwaddrmap {\n\tstruct list_head list;\n\tstruct pci_dev *dev;\n\tresource_size_t fw_addr[17];\n};\n\nstruct pci_check_idx_range {\n\tint start;\n\tint end;\n};\n\nstruct pci_raw_ops {\n\tint (*read)(unsigned int, unsigned int, unsigned int, int, int, u32 *);\n\tint (*write)(unsigned int, unsigned int, unsigned int, int, int, u32);\n};\n\nstruct acpi_table_mcfg {\n\tstruct acpi_table_header header;\n\tu8 reserved[8];\n};\n\nstruct acpi_mcfg_allocation {\n\tu64 address;\n\tu16 pci_segment;\n\tu8 start_bus_number;\n\tu8 end_bus_number;\n\tu32 reserved;\n};\n\nstruct pci_mmcfg_hostbridge_probe {\n\tu32 bus;\n\tu32 devfn;\n\tu32 vendor;\n\tu32 device;\n\tconst char * (*probe)();\n};\n\ntypedef bool (*check_reserved_t)(u64, u64, enum e820_type);\n\nstruct physdev_restore_msi {\n\tuint8_t bus;\n\tuint8_t devfn;\n};\n\nstruct physdev_setup_gsi {\n\tint gsi;\n\tuint8_t triggering;\n\tuint8_t polarity;\n};\n\nstruct xen_pci_frontend_ops {\n\tint (*enable_msi)(struct pci_dev *, int *);\n\tvoid (*disable_msi)(struct pci_dev *);\n\tint (*enable_msix)(struct pci_dev *, int *, int);\n\tvoid (*disable_msix)(struct pci_dev *);\n};\n\nstruct xen_msi_ops {\n\tint (*setup_msi_irqs)(struct pci_dev *, int, int);\n\tvoid (*teardown_msi_irqs)(struct pci_dev *);\n};\n\nstruct xen_device_domain_owner {\n\tdomid_t domain;\n\tstruct pci_dev *dev;\n\tstruct list_head list;\n};\n\nstruct pci_root_info {\n\tstruct acpi_pci_root_info common;\n\tstruct pci_sysdata sd;\n\tbool mcfg_added;\n\tu8 start_bus;\n\tu8 end_bus;\n};\n\nstruct irq_info___3 {\n\tu8 bus;\n\tu8 devfn;\n\tstruct {\n\t\tu8 link;\n\t\tu16 bitmap;\n\t} __attribute__((packed)) irq[4];\n\tu8 slot;\n\tu8 rfu;\n};\n\nstruct irq_routing_table {\n\tu32 signature;\n\tu16 version;\n\tu16 size;\n\tu8 rtr_bus;\n\tu8 rtr_devfn;\n\tu16 exclusive_irqs;\n\tu16 rtr_vendor;\n\tu16 rtr_device;\n\tu32 miniport_data;\n\tu8 rfu[11];\n\tu8 checksum;\n\tstruct irq_info___3 slots[0];\n};\n\nstruct irq_router {\n\tchar *name;\n\tu16 vendor;\n\tu16 device;\n\tint (*get)(struct pci_dev *, struct pci_dev *, int);\n\tint (*set)(struct pci_dev *, struct pci_dev *, int, int);\n};\n\nstruct irq_router_handler {\n\tu16 vendor;\n\tint (*probe)(struct irq_router *, struct pci_dev *, u16);\n};\n\nstruct pci_setup_rom {\n\tstruct setup_data data;\n\tuint16_t vendor;\n\tuint16_t devid;\n\tuint64_t pcilen;\n\tlong unsigned int segment;\n\tlong unsigned int bus;\n\tlong unsigned int device;\n\tlong unsigned int function;\n\tuint8_t romdata[0];\n};\n\nenum pci_bf_sort_state {\n\tpci_bf_sort_default = 0,\n\tpci_force_nobf = 1,\n\tpci_force_bf = 2,\n\tpci_dmi_bf = 3,\n};\n\nstruct pci_root_res {\n\tstruct list_head list;\n\tstruct resource res;\n};\n\nstruct pci_root_info___2 {\n\tstruct list_head list;\n\tchar name[12];\n\tstruct list_head resources;\n\tstruct resource busn;\n\tint node;\n\tint link;\n};\n\nstruct amd_hostbridge {\n\tu32 bus;\n\tu32 slot;\n\tu32 device;\n};\n\nstruct saved_msr {\n\tbool valid;\n\tstruct msr_info info;\n};\n\nstruct saved_msrs {\n\tunsigned int num;\n\tstruct saved_msr *array;\n};\n\nstruct saved_context {\n\tstruct pt_regs regs;\n\tu16 ds;\n\tu16 es;\n\tu16 fs;\n\tu16 gs;\n\tlong unsigned int kernelmode_gs_base;\n\tlong unsigned int usermode_gs_base;\n\tlong unsigned int fs_base;\n\tlong unsigned int cr0;\n\tlong unsigned int cr2;\n\tlong unsigned int cr3;\n\tlong unsigned int cr4;\n\tu64 misc_enable;\n\tbool misc_enable_saved;\n\tstruct saved_msrs saved_msrs;\n\tlong unsigned int efer;\n\tu16 gdt_pad;\n\tstruct desc_ptr gdt_desc;\n\tu16 idt_pad;\n\tstruct desc_ptr idt;\n\tu16 ldt;\n\tu16 tss;\n\tlong unsigned int tr;\n\tlong unsigned int safety;\n\tlong unsigned int return_address;\n} __attribute__((packed));\n\ntypedef int (*pm_cpu_match_t)(const struct x86_cpu_id *);\n\nstruct restore_data_record {\n\tlong unsigned int jump_address;\n\tlong unsigned int jump_address_phys;\n\tlong unsigned int cr3;\n\tlong unsigned int magic;\n\tu8 e820_digest[16];\n};\n\n#ifndef BPF_NO_PRESERVE_ACCESS_INDEX\n#pragma clang attribute pop\n#endif\n\n#endif /* __VMLINUX_H__ */\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/bpf/trace.bpf.c",
    "content": "#include \"include/trace.bpf.h\"\n\n#define STRING_KIND 24\n\n// parse_string_param will parse a string parameter. The parsed value of the string\n// will be put into param->deref_val. This function expects the string struct\n// which contains a pointer to the string and the length of the string to have\n// already been read from memory and passed in as param->val.\n__always_inline\nint parse_string_param(struct pt_regs *ctx, function_parameter_t *param) {\n    u64 str_len;\n    size_t str_addr;\n\n    __builtin_memcpy(&str_addr, param->val, sizeof(str_addr));\n    __builtin_memcpy(&str_len, param->val + sizeof(str_addr), sizeof(str_len));\n    param->daddr = str_addr;\n\n    if (str_addr != 0) {\n        if (str_len > 0x30) {\n            str_len = 0x30;\n        }\n        int ret = bpf_probe_read_user(&param->deref_val, str_len, (void *)(str_addr));\n        if (ret < 0) {\n            return 1;\n        }\n    }\n    return 0;\n}\n\n__always_inline\nint parse_param_stack(struct pt_regs *ctx, function_parameter_t *param) {\n    long ret;\n    size_t addr = ctx->sp + param->offset;\n    ret = bpf_probe_read_user(&param->val, param->size, (void *)(addr));\n    if (ret < 0) {\n        return 1;\n    }\n    return 0;\n}\n\n__always_inline\nvoid get_value_from_register(struct pt_regs *ctx, void *dest, int reg_num) {\n    switch (reg_num) {\n    case 0: // RAX\n        __builtin_memcpy(dest, &ctx->ax, sizeof(ctx->ax));\n        break;\n    case 1: // RDX\n        __builtin_memcpy(dest, &ctx->dx, sizeof(ctx->dx));\n        break;\n    case 2: // RCX\n        __builtin_memcpy(dest, &ctx->cx, sizeof(ctx->cx));\n        break;\n    case 3: // RBX\n        __builtin_memcpy(dest, &ctx->bx, sizeof(ctx->bx));\n        break;\n    case 4: // RSI\n        __builtin_memcpy(dest, &ctx->si, sizeof(ctx->si));\n        break;\n    case 5: // RDI\n        __builtin_memcpy(dest, &ctx->di, sizeof(ctx->di));\n        break;\n    case 6: // RBP\n        __builtin_memcpy(dest, &ctx->bp, sizeof(ctx->bp));\n        break;\n    case 7: // RSP\n        __builtin_memcpy(dest, &ctx->sp, sizeof(ctx->sp));\n        break;\n    case 8: // R8\n        __builtin_memcpy(dest, &ctx->r8, sizeof(ctx->r8));\n        break;\n    case 9: // R9\n        __builtin_memcpy(dest, &ctx->r9, sizeof(ctx->r9));\n        break;\n    case 10: // R10\n        __builtin_memcpy(dest, &ctx->r10, sizeof(ctx->r10));\n        break;\n    case 11: // R11\n        __builtin_memcpy(dest, &ctx->r11, sizeof(ctx->r11));\n        break;\n    case 12: // R12\n        __builtin_memcpy(dest, &ctx->r12, sizeof(ctx->r12));\n        break;\n    case 13: // R13\n        __builtin_memcpy(dest, &ctx->r13, sizeof(ctx->r13));\n        break;\n    case 14: // R14\n        __builtin_memcpy(dest, &ctx->r14, sizeof(ctx->r14));\n        break;\n    case 15: // R15\n        __builtin_memcpy(dest, &ctx->r15, sizeof(ctx->r15));\n        break;\n    }\n}\n\n__always_inline\nint parse_param_registers(struct pt_regs *ctx, function_parameter_t *param) {\n    switch (param->n_pieces) {\n    case 6:\n        get_value_from_register(ctx, param->val+40, param->reg_nums[5]);\n    case 5:\n        get_value_from_register(ctx, param->val+32, param->reg_nums[4]);\n    case 4:\n        get_value_from_register(ctx, param->val+24, param->reg_nums[3]);\n    case 3:\n        get_value_from_register(ctx, param->val+16, param->reg_nums[2]);\n    case 2:\n        get_value_from_register(ctx, param->val+8, param->reg_nums[1]);\n    case 1:\n        get_value_from_register(ctx, param->val, param->reg_nums[0]);\n    }\n    return 0;\n}\n\n__always_inline\nint parse_param(struct pt_regs *ctx, function_parameter_t *param) {\n    if (param->size > 0x30) {\n        return 0;\n    }\n\n    // Parse the initial value of the parameter.\n    // If the parameter is a basic type, we will be finished here.\n    // If the parameter is a more complex type such as a string or\n    // a slice we will need some further processing below.\n    int ret = 0;\n    if (param->in_reg) {\n        ret = parse_param_registers(ctx, param);\n    } else {\n        ret = parse_param_stack(ctx, param);\n    }\n    if (ret != 0) {\n        return ret;\n    }\n\n    switch (param->kind) {\n        case STRING_KIND:\n            return parse_string_param(ctx, param);\n    }\n\n    return 0;\n}\n\n__always_inline\nint get_goroutine_id(function_parameter_list_t *parsed_args) {\n    struct task_struct *task;\n    size_t g_addr;\n    __u64  goid;\n\n    // Get the current task.\n    task = (struct task_struct *)bpf_get_current_task();\n    // Get the Goroutine ID which is stored in thread local storage.\n    bpf_probe_read_user(&g_addr, sizeof(void *), (void*)(BPF_CORE_READ(task, thread.fsbase)+parsed_args->g_addr_offset));\n    bpf_probe_read_user(&goid, sizeof(void *), (void*)(g_addr+parsed_args->goid_offset));\n    parsed_args->goroutine_id = goid;\n\n    return 1;\n}\n\n__always_inline\nvoid parse_params(struct pt_regs *ctx, unsigned int n_params, function_parameter_t params[6]) {\n    // Since we cannot loop in eBPF programs let's take advantage of the\n    // fact that in C switch cases will pass through automatically.\n    switch (n_params) {\n    case 6:\n        parse_param(ctx, &params[5]);\n    case 5:\n        parse_param(ctx, &params[4]);\n    case 4:\n        parse_param(ctx, &params[3]);\n    case 3:\n        parse_param(ctx, &params[2]);\n    case 2:\n        parse_param(ctx, &params[1]);\n    case 1:\n        parse_param(ctx, &params[0]);\n    }\n}\n\nSEC(\"uprobe/dlv_trace\")\nint uprobe__dlv_trace(struct pt_regs *ctx) {\n    function_parameter_list_t *args;\n    function_parameter_list_t *parsed_args;\n    uint64_t key = ctx->ip;\n\n    args = bpf_map_lookup_elem(&arg_map, &key);\n    if (!args) {\n        return 1;\n    }\n\n    parsed_args = bpf_ringbuf_reserve(&events, sizeof(function_parameter_list_t), 0);\n    if (!parsed_args) {\n        return 1;\n    }\n\n    // Initialize the parsed_args struct.\n    parsed_args->goid_offset = args->goid_offset;\n    parsed_args->g_addr_offset = args->g_addr_offset;\n    parsed_args->goroutine_id = args->goroutine_id;\n    parsed_args->fn_addr = args->fn_addr;\n    parsed_args->n_parameters = args->n_parameters;\n    parsed_args->n_ret_parameters = args->n_ret_parameters;\n    parsed_args->is_ret = args->is_ret;\n    __builtin_memcpy(parsed_args->params, args->params, sizeof(args->params));\n    __builtin_memcpy(parsed_args->ret_params, args->ret_params, sizeof(args->ret_params));\n\n    if (!get_goroutine_id(parsed_args)) {\n        bpf_ringbuf_discard(parsed_args, 0);\n        return 1;\n    }\n\n    if (!args->is_ret) {\n        // In uprobe at function entry.\n\n        // Parse input parameters.\n        parse_params(ctx, args->n_parameters, parsed_args->params);\n    } else {\n        // We are now stopped at the RET instruction for this function.\n\n        // Parse output parameters.\n        parse_params(ctx, args->n_ret_parameters, parsed_args->ret_params);\n    }\n\n    bpf_ringbuf_submit(parsed_args, BPF_RB_FORCE_WAKEUP);\n\n    return 0;\n}\n\nchar _license[] SEC(\"license\") = \"Dual MIT/GPL\";\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/build/build-ebpf-builder-img.sh",
    "content": "#!/bin/bash -e\n\nsudo docker build \\\n    -t delve-ebpf-builder:v0.0.1 \\\n    -f pkg/proc/internal/ebpf/build/ebpf-Dockerfile ./pkg/proc/internal/ebpf/build\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/build/build-ebpf-objects.sh",
    "content": "#!/bin/bash -e\n\n# The go generate command seems to not like being run from\n# the vendor directory. Remove it and restore it after.\nrm -rf vendor\n\nrestore_vendor() {\n  git checkout vendor\n}\n\ntrap restore_vendor EXIT\n\ndocker run \\\n    -it \\\n    --rm \\\n    -v \"$(pwd)\":/delve-bpf \\\n    delve-ebpf-builder:v0.0.1\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/build/ebpf-Dockerfile",
    "content": "FROM ubuntu:21.04\n\nENV DEBIAN_FRONTEND noninteractive\nRUN apt-get update && apt-get install -y \\\n    build-essential \\\n    gcc-multilib \\\n    git \\\n    wget \\\n    clang \\\n    linux-headers-5.11.0-40 \\\n    libbpf-dev\n\nRUN wget https://golang.org/dl/go1.17.3.linux-amd64.tar.gz\nRUN tar -C /usr/local -xzf go1.17.3.linux-amd64.tar.gz\nRUN cp /usr/local/go/bin/go /usr/bin/go\n\nWORKDIR /delve-bpf/pkg/proc/internal/ebpf/\n\nCMD [ \"go\", \"generate\", \"./...\" ]\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/context.go",
    "content": "package ebpf\n\nimport (\n\t\"reflect\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n)\n\ntype UProbeArgMap struct {\n\tOffset int64        // Offset from the stackpointer.\n\tSize   int64        // Size in bytes.\n\tKind   reflect.Kind // Kind of variable.\n\tPieces []int        // Pieces of the variables as stored in registers.\n\tInReg  bool         // True if this param is contained in a register.\n\tRet    bool         // True if this param is a return value.\n}\n\ntype RawUProbeParam struct {\n\tPieces   []op.Piece\n\tRealType godwarf.Type\n\tKind     reflect.Kind\n\tLen      int64\n\tBase     uint64\n\tAddr     uint64\n\tData     []byte\n}\n\ntype RawUProbeParams struct {\n\tFnAddr       int\n\tGoroutineID  int\n\tIsRet        bool\n\tInputParams  []*RawUProbeParam\n\tReturnParams []*RawUProbeParam\n}\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/dummy.go",
    "content": "//go:build dummy\n\n// This file is part of a workaround for `go mod vendor` which won't\n// vendor C files if there are no Go files in the same directory.\n//\n// See https://github.com/golang/go/issues/26366\n\npackage ebpf\n\nimport (\n\t_ \"github.com/go-delve/delve/pkg/proc/internal/ebpf/bpf\"\n\t_ \"github.com/go-delve/delve/pkg/proc/internal/ebpf/bpf/include\"\n)\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/helpers.go",
    "content": "//go:build linux && amd64 && go1.16\n\npackage ebpf\n\nimport (\n\t\"context\"\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/link\"\n\t\"github.com/cilium/ebpf/ringbuf\"\n\t\"github.com/cilium/ebpf/rlimit\"\n)\n\n//lint:file-ignore U1000 some fields are used by the C program\n\n// function_parameter_t tracks function_parameter_t from function_vals.bpf.h\ntype function_parameter_t struct {\n\tkind      uint32\n\tsize      uint32\n\toffset    int32\n\tin_reg    bool\n\tn_pieces  int32\n\treg_nums  [6]int32\n\tdaddr     uint64\n\tval       [0x30]byte\n\tderef_val [0x30]byte\n}\n\n// function_parameter_list_t tracks function_parameter_list_t from function_vals.bpf.h\ntype function_parameter_list_t struct {\n\tgoid_offset   uint32\n\tg_addr_offset uint64\n\tgoroutine_id  uint32\n\tfn_addr       uint64\n\tis_ret        bool\n\n\tn_parameters uint32\n\tparams       [6]function_parameter_t\n\n\tn_ret_parameters uint32\n\tret_params       [6]function_parameter_t\n}\n\n//go:generate go run github.com/cilium/ebpf/cmd/bpf2go -tags \"go1.16\" -target amd64 trace bpf/trace.bpf.c -- -I./bpf/include\n\nconst FakeAddressBase = 0xbeed000000000000\n\ntype EBPFContext struct {\n\tobjs       *traceObjects\n\tbpfEvents  chan []byte\n\tbpfRingBuf *ringbuf.Reader\n\texecutable *link.Executable\n\tbpfArgMap  *ebpf.Map\n\tlinks      []link.Link\n\n\tparsedBpfEvents []RawUProbeParams\n\tm               sync.Mutex\n\n\tctx    context.Context\n\tcancel context.CancelFunc\n\twg     sync.WaitGroup\n}\n\nfunc (ctx *EBPFContext) Close() {\n\tif ctx.cancel != nil {\n\t\tctx.cancel()\n\t}\n\n\tif ctx.bpfRingBuf != nil {\n\t\tctx.bpfRingBuf.Close()\n\t}\n\n\tctx.wg.Wait()\n\n\tfor _, l := range ctx.links {\n\t\tl.Close()\n\t}\n\n\tif ctx.objs != nil {\n\t\tctx.objs.Close()\n\t}\n}\n\nfunc (ctx *EBPFContext) AttachUprobe(pid int, name string, offset uint64) error {\n\tif ctx.executable == nil {\n\t\treturn errors.New(\"no eBPF program loaded\")\n\t}\n\tl, err := ctx.executable.Uprobe(name, ctx.objs.tracePrograms.UprobeDlvTrace, &link.UprobeOptions{PID: pid, Address: offset})\n\tctx.links = append(ctx.links, l)\n\treturn err\n}\n\nfunc (ctx *EBPFContext) UpdateArgMap(key uint64, goidOffset int64, args []UProbeArgMap, gAddrOffset uint64, isret bool) error {\n\tif ctx.bpfArgMap == nil {\n\t\treturn errors.New(\"eBPF map not loaded\")\n\t}\n\tparams := createFunctionParameterList(key, goidOffset, args, isret)\n\tparams.g_addr_offset = gAddrOffset\n\treturn ctx.bpfArgMap.Update(unsafe.Pointer(&key), unsafe.Pointer(&params), ebpf.UpdateAny)\n}\n\nfunc (ctx *EBPFContext) GetBufferedTracepoints() []RawUProbeParams {\n\tctx.m.Lock()\n\tdefer ctx.m.Unlock()\n\n\tif len(ctx.parsedBpfEvents) == 0 {\n\t\treturn make([]RawUProbeParams, 0)\n\t}\n\n\tevents := make([]RawUProbeParams, len(ctx.parsedBpfEvents))\n\tcopy(events, ctx.parsedBpfEvents)\n\tctx.parsedBpfEvents = ctx.parsedBpfEvents[:0]\n\treturn events\n}\n\nfunc LoadEBPFTracingProgram(path string) (*EBPFContext, error) {\n\tvar (\n\t\tctx  EBPFContext\n\t\terr  error\n\t\tobjs traceObjects\n\t)\n\n\tif err = rlimit.RemoveMemlock(); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to remove memlock limit (try running with CAP_SYS_RESOURCE or as root): %w\", err)\n\t}\n\tctx.executable, err = link.OpenExecutable(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := loadTraceObjects(&objs, nil); err != nil {\n\t\treturn nil, err\n\t}\n\tctx.objs = &objs\n\n\tctx.bpfRingBuf, err = ringbuf.NewReader(objs.Events)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tctx.bpfArgMap = objs.ArgMap\n\n\tctx.ctx, ctx.cancel = context.WithCancel(context.Background())\n\n\tctx.wg.Add(1)\n\tgo ctx.pollEvents()\n\n\treturn &ctx, nil\n}\n\n// pollEvents reads events from the ring buffer and stores them for retrieval.\n// This goroutine runs until the context is cancelled.\nfunc (ctx *EBPFContext) pollEvents() {\n\tdefer ctx.wg.Done()\n\n\tfor {\n\t\tselect {\n\t\tcase <-ctx.ctx.Done():\n\t\t\treturn\n\t\tdefault:\n\t\t\te, err := ctx.bpfRingBuf.Read()\n\t\t\tif err != nil || ctx.ctx.Err() != nil {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tparsed := parseFunctionParameterList(e.RawSample)\n\n\t\t\tctx.m.Lock()\n\t\t\tctx.parsedBpfEvents = append(ctx.parsedBpfEvents, parsed)\n\t\t\tctx.m.Unlock()\n\t\t}\n\t}\n}\n\nfunc parseFunctionParameterList(rawParamBytes []byte) RawUProbeParams {\n\tparams := (*function_parameter_list_t)(unsafe.Pointer(&rawParamBytes[0]))\n\n\tdefer runtime.KeepAlive(params) // Ensure the param is not garbage collected.\n\n\tvar rawParams RawUProbeParams\n\trawParams.FnAddr = int(params.fn_addr)\n\trawParams.GoroutineID = int(params.goroutine_id)\n\trawParams.IsRet = params.is_ret\n\n\tparseParam := func(param function_parameter_t) *RawUProbeParam {\n\t\tiparam := &RawUProbeParam{}\n\t\tdata := make([]byte, 0x60)\n\t\tret := param\n\t\tiparam.Kind = reflect.Kind(ret.kind)\n\n\t\tval := ret.val[:ret.size]\n\t\trawDerefValue := ret.deref_val[:0x30]\n\t\tcopy(data, val)\n\t\tcopy(data[0x30:], rawDerefValue)\n\t\tiparam.Data = data\n\n\t\tpieces := make([]op.Piece, 0, 2)\n\t\tpieces = append(pieces, op.Piece{Size: 0x30, Kind: op.AddrPiece, Val: FakeAddressBase})\n\t\tpieces = append(pieces, op.Piece{Size: 0x30, Kind: op.AddrPiece, Val: FakeAddressBase + 0x30})\n\t\tiparam.Pieces = pieces\n\n\t\tiparam.Addr = FakeAddressBase\n\n\t\tswitch iparam.Kind {\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\tiparam.RealType = &godwarf.UintType{BasicType: godwarf.BasicType{CommonType: godwarf.CommonType{ByteSize: 8}}}\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Bool:\n\t\t\tiparam.RealType = &godwarf.IntType{BasicType: godwarf.BasicType{CommonType: godwarf.CommonType{ByteSize: 8}}}\n\t\tcase reflect.String:\n\t\t\tstrLen := binary.LittleEndian.Uint64(val[8:])\n\t\t\tiparam.Base = FakeAddressBase + 0x30\n\t\t\tiparam.Len = int64(strLen)\n\t\t\t// Create a minimal StringType so the variable can be loaded\n\t\t\tiparam.RealType = &godwarf.StringType{\n\t\t\t\tStructType: godwarf.StructType{\n\t\t\t\t\tCommonType: godwarf.CommonType{\n\t\t\t\t\t\tByteSize:    16, // String header is 16 bytes (ptr + len)\n\t\t\t\t\t\tReflectKind: reflect.String,\n\t\t\t\t\t},\n\t\t\t\t\tKind: \"struct\",\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\treturn iparam\n\t}\n\n\tfor i := 0; i < int(params.n_parameters); i++ {\n\t\trawParams.InputParams = append(rawParams.InputParams, parseParam(params.params[i]))\n\t}\n\tfor i := 0; i < int(params.n_ret_parameters); i++ {\n\t\trawParams.ReturnParams = append(rawParams.ReturnParams, parseParam(params.ret_params[i]))\n\t}\n\n\treturn rawParams\n}\n\nfunc createFunctionParameterList(entry uint64, goidOffset int64, args []UProbeArgMap, isret bool) function_parameter_list_t {\n\tvar params function_parameter_list_t\n\tparams.goid_offset = uint32(goidOffset)\n\tparams.fn_addr = entry\n\tparams.is_ret = isret\n\tparams.n_parameters = 0\n\tparams.n_ret_parameters = 0\n\tfor _, arg := range args {\n\t\tvar param function_parameter_t\n\t\tparam.size = uint32(arg.Size)\n\t\tparam.offset = int32(arg.Offset)\n\t\tparam.kind = uint32(arg.Kind)\n\t\tif arg.InReg {\n\t\t\tparam.in_reg = true\n\t\t\tparam.n_pieces = int32(len(arg.Pieces))\n\t\t\tfor i := range arg.Pieces {\n\t\t\t\tif i > 5 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tparam.reg_nums[i] = int32(arg.Pieces[i])\n\t\t\t}\n\t\t}\n\t\tif !arg.Ret {\n\t\t\tparams.params[params.n_parameters] = param\n\t\t\tparams.n_parameters++\n\t\t} else {\n\t\t\tparams.ret_params[params.n_ret_parameters] = param\n\t\t\tparams.n_ret_parameters++\n\t\t}\n\t}\n\treturn params\n}\n\nfunc AddressToOffset(f *elf.File, addr uint64) (uint64, error) {\n\tsectionsToSearchForSymbol := []*elf.Section{}\n\n\tfor i := range f.Sections {\n\t\tif f.Sections[i].Flags == elf.SHF_ALLOC+elf.SHF_EXECINSTR {\n\t\t\tsectionsToSearchForSymbol = append(sectionsToSearchForSymbol, f.Sections[i])\n\t\t}\n\t}\n\n\tvar executableSection *elf.Section\n\n\t// Find what section the symbol is in by checking the executable section's\n\t// addr space.\n\tfor m := range sectionsToSearchForSymbol {\n\t\tif addr > sectionsToSearchForSymbol[m].Addr &&\n\t\t\taddr < sectionsToSearchForSymbol[m].Addr+sectionsToSearchForSymbol[m].Size {\n\t\t\texecutableSection = sectionsToSearchForSymbol[m]\n\t\t}\n\t}\n\n\tif executableSection == nil {\n\t\treturn 0, errors.New(\"could not find symbol in executable sections of binary\")\n\t}\n\n\treturn uint64(addr - executableSection.Addr + executableSection.Offset), nil\n}\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/helpers_disabled.go",
    "content": "//go:build !linux || !amd64 || !go1.16\n\npackage ebpf\n\nimport (\n\t\"debug/elf\"\n\t\"errors\"\n)\n\ntype EBPFContext struct {\n}\n\nfunc (ctx *EBPFContext) Close() {\n\n}\n\nfunc (ctx *EBPFContext) AttachUprobe(pid int, name string, offset uint32) error {\n\treturn errors.New(\"eBPF is disabled\")\n}\n\nfunc (ctx *EBPFContext) AttachURetprobe(pid int, name string, offset uint32) error {\n\treturn errors.New(\"eBPF is disabled\")\n}\n\nfunc (ctx *EBPFContext) UpdateArgMap(key uint64, goidOffset int64, args []UProbeArgMap, gAddrOffset uint64, isret bool) error {\n\treturn errors.New(\"eBPF is disabled\")\n}\n\nfunc (ctx *EBPFContext) GetBufferedTracepoints() []RawUProbeParams {\n\treturn nil\n}\n\nfunc SymbolToOffset(file, symbol string) (uint32, error) {\n\treturn 0, errors.New(\"eBPF disabled\")\n}\n\nfunc LoadEBPFTracingProgram(path string) (*EBPFContext, error) {\n\treturn nil, errors.New(\"eBPF disabled\")\n}\n\nfunc AddressToOffset(f *elf.File, addr uint64) (uint32, error) {\n\treturn 0, errors.New(\"eBPF disabled\")\n}\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/helpers_test.go",
    "content": "//go:build linux && amd64 && cgo && go1.16\n\npackage ebpf\n\nimport (\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf/testhelper\"\n)\n\nfunc compareStructTypes(t *testing.T, gostructVal, cstructVal any) {\n\tgostruct := reflect.ValueOf(gostructVal).Type()\n\tcstruct := reflect.ValueOf(cstructVal).Type()\n\tif gostruct.NumField() != cstruct.NumField() {\n\t\tt.Errorf(\"mismatched field number %d %d\", gostruct.NumField(), cstruct.NumField())\n\t\treturn\n\t}\n\tfor i := 0; i < cstruct.NumField(); i++ {\n\t\tgofield := gostruct.Field(i)\n\t\tcfield := cstruct.Field(i)\n\t\tt.Logf(\"%d %s %s\\n\", i, gofield.Name, cfield.Name)\n\t\tif gofield.Name != cfield.Name {\n\t\t\tt.Errorf(\"mismatched name for field %s %s\", gofield.Name, cfield.Name)\n\t\t}\n\t\tif gofield.Offset != cfield.Offset {\n\t\t\tt.Errorf(\"mismatched offset for field %s %s (%d %d)\", gofield.Name, cfield.Name, gofield.Offset, cfield.Offset)\n\t\t}\n\t\tif gofield.Type.Size() != cfield.Type.Size() {\n\t\t\tt.Errorf(\"mismatched size for field %s %s (%d %d)\", gofield.Name, cfield.Name, gofield.Type.Size(), cfield.Type.Size())\n\t\t}\n\t}\n}\n\nfunc TestStructConsistency(t *testing.T) {\n\tt.Run(\"function_parameter_t\", func(t *testing.T) {\n\t\tcompareStructTypes(t, function_parameter_t{}, testhelper.Function_parameter_t{})\n\t})\n\tt.Run(\"function_parameter_list_t\", func(t *testing.T) {\n\t\tcompareStructTypes(t, function_parameter_list_t{}, testhelper.Function_parameter_list_t{})\n\t})\n}\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/testhelper/testhelper.go",
    "content": "//go:build linux && amd64 && cgo && go1.16\n\npackage testhelper\n\n// #include <stdbool.h>\n// #include \"../bpf/include/function_vals.bpf.h\"\nimport \"C\"\n\n// Function_parameter_t exports function_parameter_t from function_vals.bpf.h\ntype Function_parameter_t C.function_parameter_t\n\n// Function_parameter_list_t exports function_parameter_list_t from function_vals.bpf.h\ntype Function_parameter_list_t C.function_parameter_list_t\n"
  },
  {
    "path": "pkg/proc/internal/ebpf/trace_bpfel_x86.go",
    "content": "// Code generated by bpf2go; DO NOT EDIT.\n//go:build (386 || amd64) && go1.16\n// +build 386 amd64\n// +build go1.16\n\npackage ebpf\n\nimport (\n\t\"bytes\"\n\t_ \"embed\"\n\t\"fmt\"\n\t\"io\"\n\n\t\"github.com/cilium/ebpf\"\n)\n\n// loadTrace returns the embedded CollectionSpec for trace.\nfunc loadTrace() (*ebpf.CollectionSpec, error) {\n\treader := bytes.NewReader(_TraceBytes)\n\tspec, err := ebpf.LoadCollectionSpecFromReader(reader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't load trace: %w\", err)\n\t}\n\n\treturn spec, err\n}\n\n// loadTraceObjects loads trace and converts it into a struct.\n//\n// The following types are suitable as obj argument:\n//\n//     *traceObjects\n//     *tracePrograms\n//     *traceMaps\n//\n// See ebpf.CollectionSpec.LoadAndAssign documentation for details.\nfunc loadTraceObjects(obj interface{}, opts *ebpf.CollectionOptions) error {\n\tspec, err := loadTrace()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn spec.LoadAndAssign(obj, opts)\n}\n\n// traceSpecs contains maps and programs before they are loaded into the kernel.\n//\n// It can be passed ebpf.CollectionSpec.Assign.\ntype traceSpecs struct {\n\ttraceProgramSpecs\n\ttraceMapSpecs\n}\n\n// traceSpecs contains programs before they are loaded into the kernel.\n//\n// It can be passed ebpf.CollectionSpec.Assign.\ntype traceProgramSpecs struct {\n\tUprobeDlvTrace *ebpf.ProgramSpec `ebpf:\"uprobe__dlv_trace\"`\n}\n\n// traceMapSpecs contains maps before they are loaded into the kernel.\n//\n// It can be passed ebpf.CollectionSpec.Assign.\ntype traceMapSpecs struct {\n\tArgMap *ebpf.MapSpec `ebpf:\"arg_map\"`\n\tEvents *ebpf.MapSpec `ebpf:\"events\"`\n}\n\n// traceObjects contains all objects after they have been loaded into the kernel.\n//\n// It can be passed to loadTraceObjects or ebpf.CollectionSpec.LoadAndAssign.\ntype traceObjects struct {\n\ttracePrograms\n\ttraceMaps\n}\n\nfunc (o *traceObjects) Close() error {\n\treturn _TraceClose(\n\t\t&o.tracePrograms,\n\t\t&o.traceMaps,\n\t)\n}\n\n// traceMaps contains all maps after they have been loaded into the kernel.\n//\n// It can be passed to loadTraceObjects or ebpf.CollectionSpec.LoadAndAssign.\ntype traceMaps struct {\n\tArgMap *ebpf.Map `ebpf:\"arg_map\"`\n\tEvents *ebpf.Map `ebpf:\"events\"`\n}\n\nfunc (m *traceMaps) Close() error {\n\treturn _TraceClose(\n\t\tm.ArgMap,\n\t\tm.Events,\n\t)\n}\n\n// tracePrograms contains all programs after they have been loaded into the kernel.\n//\n// It can be passed to loadTraceObjects or ebpf.CollectionSpec.LoadAndAssign.\ntype tracePrograms struct {\n\tUprobeDlvTrace *ebpf.Program `ebpf:\"uprobe__dlv_trace\"`\n}\n\nfunc (p *tracePrograms) Close() error {\n\treturn _TraceClose(\n\t\tp.UprobeDlvTrace,\n\t)\n}\n\nfunc _TraceClose(closers ...io.Closer) error {\n\tfor _, closer := range closers {\n\t\tif err := closer.Close(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Do not access this directly.\n//go:embed trace_bpfel_x86.o\nvar _TraceBytes []byte\n"
  },
  {
    "path": "pkg/proc/linutil/auxv.go",
    "content": "package linutil\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n)\n\nconst (\n\t_AT_NULL  = 0\n\t_AT_BASE  = 7\n\t_AT_ENTRY = 9\n)\n\n// searchAuxv searches the elf auxiliary vector for the given tag and returns\n// its value. Returns 0 if the tag is not found.\n// For a description of the auxiliary vector (auxv) format see:\n// System V Application Binary Interface, AMD64 Architecture Processor\n// Supplement, section 3.4.3.\n// System V Application Binary Interface, Intel386 Architecture Processor\n// Supplement (fourth edition), section 3-28.\nfunc searchAuxv(auxv []byte, ptrSize int, target uint64) uint64 {\n\trd := bytes.NewBuffer(auxv)\n\n\tfor {\n\t\ttag, err := readUintRaw(rd, binary.LittleEndian, ptrSize)\n\t\tif err != nil {\n\t\t\treturn 0\n\t\t}\n\t\tval, err := readUintRaw(rd, binary.LittleEndian, ptrSize)\n\t\tif err != nil {\n\t\t\treturn 0\n\t\t}\n\n\t\tswitch tag {\n\t\tcase _AT_NULL:\n\t\t\treturn 0\n\t\tcase target:\n\t\t\treturn val\n\t\t}\n\t}\n}\n\n// BaseFromAuxv searches the elf auxiliary vector for the AT_BASE value,\n// which is the base address of the dynamic linker (interpreter).\nfunc BaseFromAuxv(auxv []byte, ptrSize int) uint64 {\n\treturn searchAuxv(auxv, ptrSize, _AT_BASE)\n}\n\n// EntryPointFromAuxv searches the elf auxiliary vector for the entry point\n// address.\nfunc EntryPointFromAuxv(auxv []byte, ptrSize int) uint64 {\n\treturn searchAuxv(auxv, ptrSize, _AT_ENTRY)\n}\n"
  },
  {
    "path": "pkg/proc/linutil/doc.go",
    "content": "// Package linutil contains functions and data structures used by both the\n// linux implementation of the native backend and the core backend to deal\n// with structures used by the linux kernel.\npackage linutil\n"
  },
  {
    "path": "pkg/proc/linutil/dynamic.go",
    "content": "package linutil\n\nimport (\n\t\"bytes\"\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\nconst (\n\tmaxNumLibraries      = 1000000 // maximum number of loaded libraries, to avoid loading forever on corrupted memory\n\tmaxLibraryPathLength = 1000000 // maximum length for the path of a library, to avoid loading forever on corrupted memory\n)\n\nvar ErrTooManyLibraries = errors.New(\"number of loaded libraries exceeds maximum\")\n\nconst (\n\t_DT_NULL  = 0  // DT_NULL as defined by SysV ABI specification\n\t_DT_DEBUG = 21 // DT_DEBUG as defined by SysV ABI specification\n)\n\n// readUintRaw reads an integer of ptrSize bytes, with the specified byte order, from reader.\nfunc readUintRaw(reader io.Reader, order binary.ByteOrder, ptrSize int) (uint64, error) {\n\tswitch ptrSize {\n\tcase 4:\n\t\tvar n uint32\n\t\tif err := binary.Read(reader, order, &n); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn uint64(n), nil\n\tcase 8:\n\t\tvar n uint64\n\t\tif err := binary.Read(reader, order, &n); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn n, nil\n\t}\n\treturn 0, fmt.Errorf(\"not supported ptr size %d\", ptrSize)\n}\n\n// dynamicSearchDebug searches for the DT_DEBUG entry in the .dynamic section\nfunc dynamicSearchDebug(p proc.Process) (uint64, error) {\n\tbi := p.BinInfo()\n\tmem := p.Memory()\n\n\tdynbuf := make([]byte, bi.ElfDynamicSection.Size)\n\t_, err := mem.ReadMemory(dynbuf, bi.ElfDynamicSection.Addr)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\trd := bytes.NewReader(dynbuf)\n\n\tfor {\n\t\tvar tag, val uint64\n\t\tif tag, err = readUintRaw(rd, binary.LittleEndian, p.BinInfo().Arch.PtrSize()); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tif val, err = readUintRaw(rd, binary.LittleEndian, p.BinInfo().Arch.PtrSize()); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tswitch tag {\n\t\tcase _DT_NULL:\n\t\t\treturn 0, nil\n\t\tcase _DT_DEBUG:\n\t\t\treturn val, nil\n\t\t}\n\t}\n}\n\nfunc readPtr(p proc.Process, addr uint64) (uint64, error) {\n\tptrbuf := make([]byte, p.BinInfo().Arch.PtrSize())\n\t_, err := p.Memory().ReadMemory(ptrbuf, addr)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn readUintRaw(bytes.NewReader(ptrbuf), binary.LittleEndian, p.BinInfo().Arch.PtrSize())\n}\n\ntype linkMap struct {\n\taddr       uint64\n\tname       string\n\tld         uint64\n\tnext, prev uint64\n}\n\nfunc readLinkMapNode(p proc.Process, r_map uint64) (*linkMap, error) {\n\tbi := p.BinInfo()\n\n\tvar lm linkMap\n\tvar ptrs [5]uint64\n\tfor i := range ptrs {\n\t\tvar err error\n\t\tptrs[i], err = readPtr(p, r_map+uint64(bi.Arch.PtrSize()*i))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tlm.addr = ptrs[0]\n\tvar err error\n\tlm.name, err = readCString(p, ptrs[1])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tlm.ld = ptrs[2]\n\tlm.next = ptrs[3]\n\tlm.prev = ptrs[4]\n\treturn &lm, nil\n}\n\nfunc readCString(p proc.Process, addr uint64) (string, error) {\n\tif addr == 0 {\n\t\treturn \"\", nil\n\t}\n\tmem := p.Memory()\n\tbuf := make([]byte, 1)\n\tr := []byte{}\n\tfor {\n\t\tif len(r) > maxLibraryPathLength {\n\t\t\treturn \"\", fmt.Errorf(\"error reading libraries: string too long (%d)\", len(r))\n\t\t}\n\t\t_, err := mem.ReadMemory(buf, addr)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tif buf[0] == 0 {\n\t\t\tbreak\n\t\t}\n\t\tr = append(r, buf[0])\n\t\taddr++\n\t}\n\treturn string(r), nil\n}\n\n// ElfFindRBrk returns the address of the dynamic linker's r_brk notification\n// function from the r_debug struct. The dynamic linker calls this function\n// whenever shared objects are loaded or unloaded. Returns 0 if r_brk cannot\n// be found.\nfunc ElfFindRBrk(p proc.Process) (uint64, error) {\n\tbi := p.BinInfo()\n\tif bi.ElfDynamicSection.Addr == 0 {\n\t\treturn 0, nil\n\t}\n\tdebugAddr, err := dynamicSearchDebug(p)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif debugAddr == 0 {\n\t\treturn 0, nil\n\t}\n\n\t// r_brk is at offset 2*ptrSize in the r_debug struct:\n\t//   int r_version;           // offset 0\n\t//   struct link_map *r_map;  // offset ptrSize (aligned)\n\t//   ElfW(Addr) r_brk;        // offset 2*ptrSize\n\trBrkOffset := uint64(2 * bi.Arch.PtrSize())\n\treturn readPtr(p, debugAddr+rBrkOffset)\n}\n\n// ElfFindRBrkFromInterp finds the address of the dynamic linker's\n// _dl_debug_state function by reading the ELF interpreter from disk.\n// This is used at launch time when the dynamic linker hasn't initialized\n// r_debug yet (DT_DEBUG is 0). The function reads the .interp section of\n// the executable to find the interpreter path, then finds _dl_debug_state\n// in the interpreter's dynamic symbol table.\n// execPath is the path to the executable, and auxvBase is the base address\n// of the interpreter in memory (AT_BASE from the auxiliary vector).\nfunc ElfFindRBrkFromInterp(execPath string, auxvBase uint64) (uint64, error) {\n\tif auxvBase == 0 {\n\t\treturn 0, nil\n\t}\n\n\texecFile, err := elf.Open(execPath)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not open executable: %v\", err)\n\t}\n\tdefer execFile.Close()\n\n\tinterpSec := execFile.Section(\".interp\")\n\tif interpSec == nil {\n\t\treturn 0, nil\n\t}\n\tinterpData, err := interpSec.Data()\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not read .interp section: %v\", err)\n\t}\n\tinterpPath := string(bytes.TrimRight(interpData, \"\\x00\"))\n\n\tinterpFile, err := elf.Open(interpPath)\n\tif err != nil {\n\t\trealPath, rerr := os.Readlink(interpPath)\n\t\tif rerr != nil {\n\t\t\treturn 0, fmt.Errorf(\"could not open interpreter %s: %v\", interpPath, err)\n\t\t}\n\t\tinterpFile, err = elf.Open(realPath)\n\t\tif err != nil {\n\t\t\treturn 0, fmt.Errorf(\"could not open interpreter %s: %v\", realPath, err)\n\t\t}\n\t}\n\tdefer interpFile.Close()\n\n\tdynsyms, err := interpFile.DynamicSymbols()\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not read dynamic symbols: %v\", err)\n\t}\n\tfor _, sym := range dynsyms {\n\t\tif sym.Name == \"_dl_debug_state\" {\n\t\t\treturn auxvBase + sym.Value, nil\n\t\t}\n\t}\n\n\treturn 0, nil\n}\n\n// ElfUpdateSharedObjects reads the list of dynamic libraries loaded by the\n// dynamic linker from the .dynamic section and uses it to update p.BinInfo().\n// See the SysV ABI for a description of how the .dynamic section works:\n// https://www.sco.com/developers/gabi/latest/contents.html\nfunc ElfUpdateSharedObjects(p proc.Process) error {\n\tbi := p.BinInfo()\n\tif bi.ElfDynamicSection.Addr == 0 {\n\t\t// no dynamic section, therefore nothing to do here\n\t\treturn nil\n\t}\n\tdebugAddr, err := dynamicSearchDebug(p)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif debugAddr == 0 {\n\t\t// no DT_DEBUG entry\n\t\treturn nil\n\t}\n\n\t// Offsets of the fields of the r_debug and link_map structs,\n\t// see /usr/include/elf/link.h for a full description of those structs.\n\tdebugMapOffset := uint64(p.BinInfo().Arch.PtrSize())\n\n\tr_map, err := readPtr(p, debugAddr+debugMapOffset)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tlibs := []string{}\n\n\tfirst := true\n\n\tfor {\n\t\tif r_map == 0 {\n\t\t\tbreak\n\t\t}\n\t\tif len(libs) > maxNumLibraries {\n\t\t\treturn ErrTooManyLibraries\n\t\t}\n\t\tlm, err := readLinkMapNode(p, r_map)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !first || lm.addr != 0 {\n\t\t\t// First entry is the executable, we don't need to add it, and doing so\n\t\t\t// can cause duplicate entries due to base address mismatches.\n\t\t\tbi.AddImage(lm.name, lm.addr)\n\t\t}\n\t\tlibs = append(libs, lm.name)\n\t\tfirst = false\n\t\tr_map = lm.next\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/linutil/regs_amd64_arch.go",
    "content": "package linutil\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n)\n\n// AMD64Registers implements the proc.Registers interface for the native/linux\n// backend and core/linux backends, on AMD64.\ntype AMD64Registers struct {\n\tRegs     *AMD64PtraceRegs\n\tFpregs   []proc.Register\n\tFpregset *amd64util.AMD64Xstate\n\n\tloadFpRegs func(*AMD64Registers) error\n}\n\nfunc NewAMD64Registers(regs *AMD64PtraceRegs, loadFpRegs func(*AMD64Registers) error) *AMD64Registers {\n\treturn &AMD64Registers{Regs: regs, loadFpRegs: loadFpRegs}\n}\n\n// AMD64PtraceRegs is the struct used by the linux kernel to return the\n// general purpose registers for AMD64 CPUs.\ntype AMD64PtraceRegs struct {\n\tR15      uint64\n\tR14      uint64\n\tR13      uint64\n\tR12      uint64\n\tRbp      uint64\n\tRbx      uint64\n\tR11      uint64\n\tR10      uint64\n\tR9       uint64\n\tR8       uint64\n\tRax      uint64\n\tRcx      uint64\n\tRdx      uint64\n\tRsi      uint64\n\tRdi      uint64\n\tOrig_rax uint64\n\tRip      uint64\n\tCs       uint64\n\tEflags   uint64\n\tRsp      uint64\n\tSs       uint64\n\tFs_base  uint64\n\tGs_base  uint64\n\tDs       uint64\n\tEs       uint64\n\tFs       uint64\n\tGs       uint64\n}\n\n// Slice returns the registers as a list of (name, value) pairs.\nfunc (r *AMD64Registers) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tvar regs = []struct {\n\t\tk string\n\t\tv uint64\n\t}{\n\t\t{\"Rip\", r.Regs.Rip},\n\t\t{\"Rsp\", r.Regs.Rsp},\n\t\t{\"Rax\", r.Regs.Rax},\n\t\t{\"Rbx\", r.Regs.Rbx},\n\t\t{\"Rcx\", r.Regs.Rcx},\n\t\t{\"Rdx\", r.Regs.Rdx},\n\t\t{\"Rdi\", r.Regs.Rdi},\n\t\t{\"Rsi\", r.Regs.Rsi},\n\t\t{\"Rbp\", r.Regs.Rbp},\n\t\t{\"R8\", r.Regs.R8},\n\t\t{\"R9\", r.Regs.R9},\n\t\t{\"R10\", r.Regs.R10},\n\t\t{\"R11\", r.Regs.R11},\n\t\t{\"R12\", r.Regs.R12},\n\t\t{\"R13\", r.Regs.R13},\n\t\t{\"R14\", r.Regs.R14},\n\t\t{\"R15\", r.Regs.R15},\n\t\t{\"Orig_rax\", r.Regs.Orig_rax},\n\t\t{\"Cs\", r.Regs.Cs},\n\t\t{\"Rflags\", r.Regs.Eflags},\n\t\t{\"Ss\", r.Regs.Ss},\n\t\t{\"Fs_base\", r.Regs.Fs_base},\n\t\t{\"Gs_base\", r.Regs.Gs_base},\n\t\t{\"Ds\", r.Regs.Ds},\n\t\t{\"Es\", r.Regs.Es},\n\t\t{\"Fs\", r.Regs.Fs},\n\t\t{\"Gs\", r.Regs.Gs},\n\t}\n\tout := make([]proc.Register, 0, len(regs)+len(r.Fpregs))\n\tfor _, reg := range regs {\n\t\tout = proc.AppendUint64Register(out, reg.k, reg.v)\n\t}\n\tvar floatLoadError error\n\tif floatingPoint {\n\t\tif r.loadFpRegs != nil {\n\t\t\tfloatLoadError = r.loadFpRegs(r)\n\t\t\tr.loadFpRegs = nil\n\t\t}\n\t\tout = append(out, r.Fpregs...)\n\t}\n\treturn out, floatLoadError\n}\n\n// PC returns the value of RIP register.\nfunc (r *AMD64Registers) PC() uint64 {\n\treturn r.Regs.Rip\n}\n\n// SP returns the value of RSP register.\nfunc (r *AMD64Registers) SP() uint64 {\n\treturn r.Regs.Rsp\n}\n\nfunc (r *AMD64Registers) BP() uint64 {\n\treturn r.Regs.Rbp\n}\n\n// TLS returns the address of the thread local storage memory segment.\nfunc (r *AMD64Registers) TLS() uint64 {\n\treturn r.Regs.Fs_base\n}\n\n// GAddr returns the address of the G variable if it is known, 0 and false\n// otherwise.\nfunc (r *AMD64Registers) GAddr() (uint64, bool) {\n\treturn 0, false\n}\n\n// LR returns the link register.\nfunc (r *AMD64Registers) LR() uint64 {\n\tpanic(\"not valid\")\n}\n\n// Copy returns a copy of these registers that is guaranteed not to change.\nfunc (r *AMD64Registers) Copy() (proc.Registers, error) {\n\tif r.loadFpRegs != nil {\n\t\terr := r.loadFpRegs(r)\n\t\tr.loadFpRegs = nil\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tvar rr AMD64Registers\n\trr.Regs = &AMD64PtraceRegs{}\n\trr.Fpregset = &amd64util.AMD64Xstate{}\n\t*(rr.Regs) = *(r.Regs)\n\tif r.Fpregset != nil {\n\t\t*(rr.Fpregset) = *(r.Fpregset)\n\t}\n\tif r.Fpregs != nil {\n\t\trr.Fpregs = make([]proc.Register, len(r.Fpregs))\n\t\tcopy(rr.Fpregs, r.Fpregs)\n\t}\n\treturn &rr, nil\n}\n\nfunc (r *AMD64Registers) SetReg(regNum uint64, reg *op.DwarfRegister) (bool, error) {\n\tvar p *uint64\n\tswitch regNum {\n\tcase regnum.AMD64_Rax:\n\t\tp = &r.Regs.Rax\n\tcase regnum.AMD64_Rbx:\n\t\tp = &r.Regs.Rbx\n\tcase regnum.AMD64_Rcx:\n\t\tp = &r.Regs.Rcx\n\tcase regnum.AMD64_Rdx:\n\t\tp = &r.Regs.Rdx\n\tcase regnum.AMD64_Rsi:\n\t\tp = &r.Regs.Rsi\n\tcase regnum.AMD64_Rdi:\n\t\tp = &r.Regs.Rdi\n\tcase regnum.AMD64_Rbp:\n\t\tp = &r.Regs.Rbp\n\tcase regnum.AMD64_Rsp:\n\t\tp = &r.Regs.Rsp\n\tcase regnum.AMD64_R8:\n\t\tp = &r.Regs.R8\n\tcase regnum.AMD64_R9:\n\t\tp = &r.Regs.R9\n\tcase regnum.AMD64_R10:\n\t\tp = &r.Regs.R10\n\tcase regnum.AMD64_R11:\n\t\tp = &r.Regs.R11\n\tcase regnum.AMD64_R12:\n\t\tp = &r.Regs.R12\n\tcase regnum.AMD64_R13:\n\t\tp = &r.Regs.R13\n\tcase regnum.AMD64_R14:\n\t\tp = &r.Regs.R14\n\tcase regnum.AMD64_R15:\n\t\tp = &r.Regs.R15\n\tcase regnum.AMD64_Rip:\n\t\tp = &r.Regs.Rip\n\tcase regnum.AMD64_Rflags:\n\t\tp = &r.Regs.Eflags\n\t}\n\n\tif p != nil {\n\t\tif reg.Bytes != nil && len(reg.Bytes) != 8 {\n\t\t\treturn false, fmt.Errorf(\"wrong number of bytes for register %s (%d)\", regnum.AMD64ToName(regNum), len(reg.Bytes))\n\t\t}\n\t\t*p = reg.Uint64Val\n\t\treturn false, nil\n\t}\n\n\tif r.loadFpRegs != nil {\n\t\terr := r.loadFpRegs(r)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tr.loadFpRegs = nil\n\t}\n\n\tif regNum < regnum.AMD64_XMM0 || regNum > regnum.AMD64_XMM0+15 {\n\t\treturn false, fmt.Errorf(\"can not set %s\", regnum.AMD64ToName(regNum))\n\t}\n\n\treg.FillBytes()\n\n\terr := r.Fpregset.SetXmmRegister(int(regNum-regnum.AMD64_XMM0), reg.Bytes)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn true, nil\n}\n"
  },
  {
    "path": "pkg/proc/linutil/regs_arm64_arch.go",
    "content": "package linutil\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// ARM64Registers is a wrapper for sys.PtraceRegs.\ntype ARM64Registers struct {\n\tRegs      *ARM64PtraceRegs // general-purpose registers\n\tiscgo     bool\n\ttpidr_el0 uint64\n\tFpregs    []proc.Register // Formatted floating point registers\n\tFpregset  []byte          // holding all floating point register values\n\n\tloadFpRegs func(*ARM64Registers) error\n}\n\nfunc NewARM64Registers(regs *ARM64PtraceRegs, iscgo bool, tpidr_el0 uint64, loadFpRegs func(*ARM64Registers) error) *ARM64Registers {\n\treturn &ARM64Registers{Regs: regs, iscgo: iscgo, tpidr_el0: tpidr_el0, loadFpRegs: loadFpRegs}\n}\n\n// ARM64PtraceRegs is the struct used by the linux kernel to return the\n// general purpose registers for ARM64 CPUs.\n// copy from sys/unix/ztypes_linux_arm64.go:735\ntype ARM64PtraceRegs struct {\n\tRegs   [31]uint64\n\tSp     uint64\n\tPc     uint64\n\tPstate uint64\n}\n\n// Slice returns the registers as a list of (name, value) pairs.\nfunc (r *ARM64Registers) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tvar regs64 = []struct {\n\t\tk string\n\t\tv uint64\n\t}{\n\t\t{\"X0\", r.Regs.Regs[0]},\n\t\t{\"X1\", r.Regs.Regs[1]},\n\t\t{\"X2\", r.Regs.Regs[2]},\n\t\t{\"X3\", r.Regs.Regs[3]},\n\t\t{\"X4\", r.Regs.Regs[4]},\n\t\t{\"X5\", r.Regs.Regs[5]},\n\t\t{\"X6\", r.Regs.Regs[6]},\n\t\t{\"X7\", r.Regs.Regs[7]},\n\t\t{\"X8\", r.Regs.Regs[8]},\n\t\t{\"X9\", r.Regs.Regs[9]},\n\t\t{\"X10\", r.Regs.Regs[10]},\n\t\t{\"X11\", r.Regs.Regs[11]},\n\t\t{\"X12\", r.Regs.Regs[12]},\n\t\t{\"X13\", r.Regs.Regs[13]},\n\t\t{\"X14\", r.Regs.Regs[14]},\n\t\t{\"X15\", r.Regs.Regs[15]},\n\t\t{\"X16\", r.Regs.Regs[16]},\n\t\t{\"X17\", r.Regs.Regs[17]},\n\t\t{\"X18\", r.Regs.Regs[18]},\n\t\t{\"X19\", r.Regs.Regs[19]},\n\t\t{\"X20\", r.Regs.Regs[20]},\n\t\t{\"X21\", r.Regs.Regs[21]},\n\t\t{\"X22\", r.Regs.Regs[22]},\n\t\t{\"X23\", r.Regs.Regs[23]},\n\t\t{\"X24\", r.Regs.Regs[24]},\n\t\t{\"X25\", r.Regs.Regs[25]},\n\t\t{\"X26\", r.Regs.Regs[26]},\n\t\t{\"X27\", r.Regs.Regs[27]},\n\t\t{\"X28\", r.Regs.Regs[28]},\n\t\t{\"X29\", r.Regs.Regs[29]},\n\t\t{\"X30\", r.Regs.Regs[30]},\n\t\t{\"SP\", r.Regs.Sp},\n\t\t{\"PC\", r.Regs.Pc},\n\t\t{\"PSTATE\", r.Regs.Pstate},\n\t}\n\tout := make([]proc.Register, 0, len(regs64)+len(r.Fpregs))\n\tfor _, reg := range regs64 {\n\t\tout = proc.AppendUint64Register(out, reg.k, reg.v)\n\t}\n\tvar floatLoadError error\n\tif floatingPoint {\n\t\tif r.loadFpRegs != nil {\n\t\t\tfloatLoadError = r.loadFpRegs(r)\n\t\t\tr.loadFpRegs = nil\n\t\t}\n\t\tout = append(out, r.Fpregs...)\n\t}\n\treturn out, floatLoadError\n}\n\n// PC returns the value of RIP register.\nfunc (r *ARM64Registers) PC() uint64 {\n\treturn r.Regs.Pc\n}\n\n// SP returns the value of RSP register.\nfunc (r *ARM64Registers) SP() uint64 {\n\treturn r.Regs.Sp\n}\n\nfunc (r *ARM64Registers) BP() uint64 {\n\treturn r.Regs.Regs[29]\n}\n\n// TLS returns the address of the thread local storage memory segment.\nfunc (r *ARM64Registers) TLS() uint64 {\n\tif !r.iscgo {\n\t\treturn 0\n\t}\n\treturn r.tpidr_el0\n}\n\n// GAddr returns the address of the G variable if it is known, 0 and false\n// otherwise.\nfunc (r *ARM64Registers) GAddr() (uint64, bool) {\n\treturn r.Regs.Regs[28], !r.iscgo\n}\n\n// LR returns the link register.\nfunc (r *ARM64Registers) LR() uint64 {\n\treturn r.Regs.Regs[30]\n}\n\n// Copy returns a copy of these registers that is guaranteed not to change.\nfunc (r *ARM64Registers) Copy() (proc.Registers, error) {\n\tif r.loadFpRegs != nil {\n\t\terr := r.loadFpRegs(r)\n\t\tr.loadFpRegs = nil\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tvar rr ARM64Registers\n\trr.Regs = &ARM64PtraceRegs{}\n\t*(rr.Regs) = *(r.Regs)\n\tif r.Fpregs != nil {\n\t\trr.Fpregs = make([]proc.Register, len(r.Fpregs))\n\t\tcopy(rr.Fpregs, r.Fpregs)\n\t}\n\tif r.Fpregset != nil {\n\t\trr.Fpregset = make([]byte, len(r.Fpregset))\n\t\tcopy(rr.Fpregset, r.Fpregset)\n\t}\n\treturn &rr, nil\n}\n\nfunc (r *ARM64Registers) SetReg(regNum uint64, reg *op.DwarfRegister) (fpchanged bool, err error) {\n\tswitch regNum {\n\tcase regnum.ARM64_PC:\n\t\tr.Regs.Pc = reg.Uint64Val\n\t\treturn false, nil\n\tcase regnum.ARM64_SP:\n\t\tr.Regs.Sp = reg.Uint64Val\n\t\treturn false, nil\n\tdefault:\n\t\tswitch {\n\t\tcase regNum >= regnum.ARM64_X0 && regNum <= regnum.ARM64_X0+30:\n\t\t\tr.Regs.Regs[regNum-regnum.ARM64_X0] = reg.Uint64Val\n\t\t\treturn false, nil\n\n\t\tcase regNum >= regnum.ARM64_V0 && regNum <= regnum.ARM64_V0+30:\n\t\t\tif r.loadFpRegs != nil {\n\t\t\t\terr := r.loadFpRegs(r)\n\t\t\t\tr.loadFpRegs = nil\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti := regNum - regnum.ARM64_V0\n\t\t\treg.FillBytes()\n\t\t\tcopy(r.Fpregset[16*i:], reg.Bytes)\n\t\t\treturn true, nil\n\n\t\tdefault:\n\t\t\treturn false, fmt.Errorf(\"changing register %d not implemented\", regNum)\n\t\t}\n\t}\n}\n\ntype ARM64PtraceFpRegs struct {\n\tVregs []byte\n\tFpsr  uint32\n\tFpcr  uint32\n}\n\nconst _ARM_FP_REGS_LENGTH = 512\n\nfunc (fpregs *ARM64PtraceFpRegs) Decode() (regs []proc.Register) {\n\tfor i := 0; i < len(fpregs.Vregs); i += 16 {\n\t\tregs = proc.AppendBytesRegister(regs, fmt.Sprintf(\"V%d\", i/16), fpregs.Vregs[i:i+16])\n\t}\n\treturn\n}\n\nfunc (fpregs *ARM64PtraceFpRegs) Byte() []byte {\n\tfpregs.Vregs = make([]byte, _ARM_FP_REGS_LENGTH)\n\treturn fpregs.Vregs[:]\n}\n"
  },
  {
    "path": "pkg/proc/linutil/regs_i386_arch.go",
    "content": "package linutil\n\nimport (\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n)\n\n// I386Registers implements the proc.Registers interface for the native/linux\n// backend and core/linux backends, on I386.\ntype I386Registers struct {\n\tRegs     *I386PtraceRegs\n\tFpregs   []proc.Register\n\tFpregset *amd64util.AMD64Xstate\n\tTls      uint64\n\n\tloadFpRegs func(*I386Registers) error\n}\n\nfunc NewI386Registers(regs *I386PtraceRegs, loadFpRegs func(*I386Registers) error) *I386Registers {\n\treturn &I386Registers{Regs: regs, Fpregs: nil, Fpregset: nil, Tls: 0, loadFpRegs: loadFpRegs}\n}\n\n// I386PtraceRegs is the struct used by the linux kernel to return the\n// general purpose registers for I386 CPUs.\ntype I386PtraceRegs struct {\n\tEbx      int32\n\tEcx      int32\n\tEdx      int32\n\tEsi      int32\n\tEdi      int32\n\tEbp      int32\n\tEax      int32\n\tXds      int32\n\tXes      int32\n\tXfs      int32\n\tXgs      int32\n\tOrig_eax int32\n\tEip      int32\n\tXcs      int32\n\tEflags   int32\n\tEsp      int32\n\tXss      int32\n}\n\n// Slice returns the registers as a list of (name, value) pairs.\nfunc (r *I386Registers) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tvar regs = []struct {\n\t\tk string\n\t\tv int32\n\t}{\n\t\t{\"Ebx\", r.Regs.Ebx},\n\t\t{\"Ecx\", r.Regs.Ecx},\n\t\t{\"Edx\", r.Regs.Edx},\n\t\t{\"Esi\", r.Regs.Esi},\n\t\t{\"Edi\", r.Regs.Edi},\n\t\t{\"Ebp\", r.Regs.Ebp},\n\t\t{\"Eax\", r.Regs.Eax},\n\t\t{\"Xds\", r.Regs.Xds},\n\t\t{\"Xes\", r.Regs.Xes},\n\t\t{\"Xfs\", r.Regs.Xfs},\n\t\t{\"Xgs\", r.Regs.Xgs},\n\t\t{\"Orig_eax\", r.Regs.Orig_eax},\n\t\t{\"Eip\", r.Regs.Eip},\n\t\t{\"Xcs\", r.Regs.Xcs},\n\t\t{\"Eflags\", r.Regs.Eflags},\n\t\t{\"Esp\", r.Regs.Esp},\n\t\t{\"Xss\", r.Regs.Xss},\n\t}\n\tout := make([]proc.Register, 0, len(regs)+len(r.Fpregs))\n\tfor _, reg := range regs {\n\t\tout = proc.AppendUint64Register(out, reg.k, uint64(uint32(reg.v)))\n\t}\n\tvar floatLoadError error\n\tif floatingPoint {\n\t\tif r.loadFpRegs != nil {\n\t\t\tfloatLoadError = r.loadFpRegs(r)\n\t\t\tr.loadFpRegs = nil\n\t\t}\n\t\tout = append(out, r.Fpregs...)\n\t}\n\treturn out, floatLoadError\n}\n\n// PC returns the value of EIP register.\nfunc (r *I386Registers) PC() uint64 {\n\treturn uint64(uint32(r.Regs.Eip))\n}\n\n// SP returns the value of ESP register.\nfunc (r *I386Registers) SP() uint64 {\n\treturn uint64(uint32(r.Regs.Esp))\n}\n\nfunc (r *I386Registers) BP() uint64 {\n\treturn uint64(uint32(r.Regs.Ebp))\n}\n\n// CX returns the value of ECX register.\nfunc (r *I386Registers) CX() uint64 {\n\treturn uint64(uint32(r.Regs.Ecx))\n}\n\n// TLS returns the address of the thread local storage memory segment.\nfunc (r *I386Registers) TLS() uint64 {\n\treturn r.Tls\n}\n\n// LR returns the link register.\nfunc (r *I386Registers) LR() uint64 {\n\tpanic(\"not valid\")\n}\n\n// GAddr returns the address of the G variable if it is known, 0 and false\n// otherwise.\nfunc (r *I386Registers) GAddr() (uint64, bool) {\n\treturn 0, false\n}\n\n// Copy returns a copy of these registers that is guaranteed not to change.\nfunc (r *I386Registers) Copy() (proc.Registers, error) {\n\tif r.loadFpRegs != nil {\n\t\terr := r.loadFpRegs(r)\n\t\tr.loadFpRegs = nil\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tvar rr I386Registers\n\trr.Regs = &I386PtraceRegs{}\n\trr.Fpregset = &amd64util.AMD64Xstate{}\n\t*(rr.Regs) = *(r.Regs)\n\tif r.Fpregset != nil {\n\t\t*(rr.Fpregset) = *(r.Fpregset)\n\t}\n\tif r.Fpregs != nil {\n\t\trr.Fpregs = make([]proc.Register, len(r.Fpregs))\n\t\tcopy(rr.Fpregs, r.Fpregs)\n\t}\n\treturn &rr, nil\n}\n"
  },
  {
    "path": "pkg/proc/linutil/regs_loong64_arch.go",
    "content": "package linutil\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// LOONG64Registers is a wrapper for sys.PtraceRegs.\ntype LOONG64Registers struct {\n\tRegs       *LOONG64PtraceRegs // general-purpose registers\n\tiscgo      bool\n\ttp_tls     uint64\n\tFpregs     []proc.Register // Formatted floating point registers\n\tFpregset   []byte          // holding all floating point register values\n\tloadFpRegs func(*LOONG64Registers) error\n}\n\nfunc NewLOONG64Registers(regs *LOONG64PtraceRegs, iscgo bool, tp_tls uint64,\n\tloadFpRegs func(*LOONG64Registers) error) *LOONG64Registers {\n\treturn &LOONG64Registers{\n\t\tRegs:       regs,\n\t\tiscgo:      iscgo,\n\t\ttp_tls:     tp_tls,\n\t\tloadFpRegs: loadFpRegs,\n\t}\n}\n\n// LOONG64PtraceRegs is the struct used by the linux kernel to return the GPR for\n// LoongArch64 CPUs. refer to sys/unix/ztype_linux_loong64.go\ntype LOONG64PtraceRegs struct {\n\tRegs     [32]uint64\n\tOrig_a0  uint64\n\tEra      uint64\n\tBadv     uint64\n\tReserved [10]uint64\n}\n\n// Slice returns the registers as a list of (name, value) pairs.\nfunc (r *LOONG64Registers) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tvar regs64 = []struct {\n\t\tk string\n\t\tv uint64\n\t}{\n\t\t{\"R0\", r.Regs.Regs[0]},\n\t\t{\"R1\", r.Regs.Regs[1]},\n\t\t{\"R2\", r.Regs.Regs[2]},\n\t\t{\"R3\", r.Regs.Regs[3]},\n\t\t{\"R4\", r.Regs.Regs[4]},\n\t\t{\"R5\", r.Regs.Regs[5]},\n\t\t{\"R6\", r.Regs.Regs[6]},\n\t\t{\"R7\", r.Regs.Regs[7]},\n\t\t{\"R8\", r.Regs.Regs[8]},\n\t\t{\"R9\", r.Regs.Regs[9]},\n\t\t{\"R10\", r.Regs.Regs[10]},\n\t\t{\"R11\", r.Regs.Regs[11]},\n\t\t{\"R12\", r.Regs.Regs[12]},\n\t\t{\"R13\", r.Regs.Regs[13]},\n\t\t{\"R14\", r.Regs.Regs[14]},\n\t\t{\"R15\", r.Regs.Regs[15]},\n\t\t{\"R16\", r.Regs.Regs[16]},\n\t\t{\"R17\", r.Regs.Regs[17]},\n\t\t{\"R18\", r.Regs.Regs[18]},\n\t\t{\"R19\", r.Regs.Regs[19]},\n\t\t{\"R20\", r.Regs.Regs[20]},\n\t\t{\"R21\", r.Regs.Regs[21]},\n\t\t{\"R22\", r.Regs.Regs[22]},\n\t\t{\"R23\", r.Regs.Regs[23]},\n\t\t{\"R24\", r.Regs.Regs[24]},\n\t\t{\"R25\", r.Regs.Regs[25]},\n\t\t{\"R26\", r.Regs.Regs[26]},\n\t\t{\"R27\", r.Regs.Regs[27]},\n\t\t{\"R28\", r.Regs.Regs[28]},\n\t\t{\"R29\", r.Regs.Regs[29]},\n\t\t{\"R30\", r.Regs.Regs[30]},\n\t\t{\"R31\", r.Regs.Regs[31]},\n\t\t{\"ERA\", r.Regs.Era},\n\t\t{\"BADV\", r.Regs.Badv},\n\t}\n\n\tout := make([]proc.Register, 0, (len(regs64) + len(r.Fpregs)))\n\tfor _, reg := range regs64 {\n\t\tout = proc.AppendUint64Register(out, reg.k, reg.v)\n\t}\n\n\tvar floatLoadError error\n\tif floatingPoint {\n\t\tif r.loadFpRegs != nil {\n\t\t\tfloatLoadError = r.loadFpRegs(r)\n\t\t\tr.loadFpRegs = nil\n\t\t}\n\n\t\tout = append(out, r.Fpregs...)\n\t}\n\n\treturn out, floatLoadError\n}\n\n// PC returns the value of PC register.\nfunc (r *LOONG64Registers) PC() uint64 {\n\t// PC Register\n\treturn r.Regs.Era\n}\n\n// SP returns the value of SP register.\nfunc (r *LOONG64Registers) SP() uint64 {\n\t// Stack pointer\n\treturn r.Regs.Regs[regnum.LOONG64_SP]\n}\n\n// BP returns the value of FP register\nfunc (r *LOONG64Registers) BP() uint64 {\n\t// unused FP register\n\treturn 0\n}\n\n// TLS returns the address of the thread local storage memory segment.\nfunc (r *LOONG64Registers) TLS() uint64 {\n\tif !r.iscgo {\n\t\treturn 0\n\t}\n\t// refer to golang defined REGG: loong64/a.out.go\n\treturn r.tp_tls\n}\n\n// GAddr returns the address of the G variable if it is known, 0 and false otherwise.\nfunc (r *LOONG64Registers) GAddr() (uint64, bool) {\n\t// REGG is $r22,store the address of g\n\treturn r.Regs.Regs[regnum.LOONG64_R22], !r.iscgo\n}\n\n// LR returns the link register.\nfunc (r *LOONG64Registers) LR() uint64 {\n\treturn r.Regs.Regs[regnum.LOONG64_LR]\n}\n\n// Copy returns a copy of these registers that is guaranteed not to change.\nfunc (r *LOONG64Registers) Copy() (proc.Registers, error) {\n\tif r.loadFpRegs != nil {\n\t\terr := r.loadFpRegs(r)\n\t\tr.loadFpRegs = nil\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tvar rr LOONG64Registers\n\trr.Regs = &LOONG64PtraceRegs{}\n\t*(rr.Regs) = *(r.Regs)\n\tif r.Fpregs != nil {\n\t\trr.Fpregs = make([]proc.Register, len(r.Fpregs))\n\t\tcopy(rr.Fpregs, r.Fpregs)\n\t}\n\n\tif r.Fpregset != nil {\n\t\trr.Fpregset = make([]byte, len(r.Fpregset))\n\t\tcopy(rr.Fpregset, r.Fpregset)\n\t}\n\n\treturn &rr, nil\n}\n\nfunc (r *LOONG64Registers) SetReg(regNum uint64, reg *op.DwarfRegister) (fpchanged bool, err error) {\n\tswitch regNum {\n\tcase regnum.LOONG64_SP:\n\t\tr.Regs.Regs[regnum.LOONG64_SP] = reg.Uint64Val\n\t\treturn false, nil\n\n\tcase regnum.LOONG64_PC:\n\t\tr.Regs.Era = reg.Uint64Val\n\t\treturn false, nil\n\t}\n\n\tswitch {\n\tcase regNum >= regnum.LOONG64_R0 && regNum <= regnum.LOONG64_R31:\n\t\tr.Regs.Regs[regNum] = reg.Uint64Val\n\t\treturn false, nil\n\n\tcase regNum >= regnum.LOONG64_F0 && regNum <= regnum.LOONG64_F31:\n\t\tif r.loadFpRegs != nil {\n\t\t\terr := r.loadFpRegs(r)\n\t\t\tr.loadFpRegs = nil\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t}\n\n\t\ti := regNum - regnum.LOONG64_F0\n\t\treg.FillBytes()\n\t\tcopy(r.Fpregset[8*i:], reg.Bytes)\n\t\treturn true, nil\n\n\tdefault:\n\t\treturn false, fmt.Errorf(\"changing register %d not implemented\", regNum)\n\t}\n}\n\n// LOONG64PtraceFpRegs refers to the definition of struct user_fp_state in kernel ptrace.h\ntype LOONG64PtraceFpRegs struct {\n\tFregs []byte\n\tFcc   uint64\n\tFcsr  uint32\n}\n\nconst _LOONG64_FPREGSET_LENGTH = (32 * 8)\n\nfunc (fpregs *LOONG64PtraceFpRegs) Decode() (regs []proc.Register) {\n\tfor i := 0; i < len(fpregs.Fregs); i += 8 {\n\t\tname := fmt.Sprintf(\"F%d\", (i / 8))\n\t\tvalue := fpregs.Fregs[i : i+8]\n\t\tregs = proc.AppendBytesRegister(regs, name, value)\n\t}\n\n\tregs = proc.AppendUint64Register(regs, \"FCC0\", fpregs.Fcc)\n\tregs = proc.AppendUint64Register(regs, \"FCSR\", uint64(fpregs.Fcsr))\n\n\treturn\n}\n\nfunc (fpregs *LOONG64PtraceFpRegs) Byte() []byte {\n\tfpregs.Fregs = make([]byte, _LOONG64_FPREGSET_LENGTH)\n\n\treturn fpregs.Fregs[:]\n}\n"
  },
  {
    "path": "pkg/proc/linutil/regs_ppc64le_arch.go",
    "content": "package linutil\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// PPC64LERegisters implements the proc.Registers interface for the native/linux\n// backend and core/linux backends, on PPC64LE.\ntype PPC64LERegisters struct {\n\tRegs       *PPC64LEPtraceRegs\n\tFpregs     []proc.Register //Formatted floating point registers\n\tFpregset   []byte          //holding all floating point register values\n\tloadFpRegs func(*PPC64LERegisters) error\n}\n\nfunc NewPPC64LERegisters(regs *PPC64LEPtraceRegs, loadFpRegs func(*PPC64LERegisters) error) *PPC64LERegisters {\n\treturn &PPC64LERegisters{Regs: regs, loadFpRegs: loadFpRegs}\n}\n\n// PPC64LEPtraceRegs is the struct used by the linux kernel to return the\n// general purpose registers for PPC64LE CPUs.\n// Copied from src/syscall/ztypes_linux_ppc64le.go#L518-L532\ntype PPC64LEPtraceRegs struct {\n\tGpr       [32]uint64 // 32 general-purpose registers, each 64 bits wide\n\tNip       uint64\n\tMsr       uint64\n\tOrig_gpr3 uint64\n\tCtr       uint64\n\tLink      uint64 // Link register -- LLDB dwarf_lr_ppc64le = 65\n\tXer       uint64 // Fixed point exception register -- LLDB dwarf_xer_ppc64le = 76\n\tCcr       uint64\n\tSofte     uint64\n\tTrap      uint64\n\tDar       uint64\n\tDsisr     uint64\n\tResult    uint64\n}\n\n// PC returns the value of the NIP register\n// Also called the IAR/Instruction Address Register or NIP/Next Instruction Pointer\nfunc (r *PPC64LERegisters) PC() uint64 {\n\treturn r.Regs.Nip\n}\n\n// SP returns the value of Stack frame pointer stored in Gpr[1].\nfunc (r *PPC64LERegisters) SP() uint64 {\n\treturn r.Regs.Gpr[1]\n}\n\n// LR The Link Register is a 64-bit register. It can be\n// used to provide the branch target address for the\n// Branch Conditional to Link Register instruction, and it\n// holds the return address after Branch instructions for\n// which LK=1 and after System Call Vectored instructions.\n// Extracted from the 2.3.2 section of the PowerISA Book 3.1\nfunc (r *PPC64LERegisters) LR() uint64 {\n\treturn r.Regs.Link\n}\n\nfunc (r *PPC64LERegisters) BP() uint64 {\n\treturn r.Regs.Gpr[1]\n}\n\n// TLS returns the value of the thread pointer stored in Gpr[13]\nfunc (r *PPC64LERegisters) TLS() uint64 {\n\treturn r.Regs.Gpr[13]\n}\n\n// GAddr returns the address of the G variable\nfunc (r *PPC64LERegisters) GAddr() (uint64, bool) {\n\treturn r.Regs.Gpr[30], true\n}\n\n// Slice returns the registers as a list of (name, value) pairs.\nfunc (r *PPC64LERegisters) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tvar regs = []struct {\n\t\tk string\n\t\tv uint64\n\t}{\n\t\t{\"R0\", r.Regs.Gpr[0]},\n\t\t{\"R1\", r.Regs.Gpr[1]},\n\t\t{\"R2\", r.Regs.Gpr[2]},\n\t\t{\"R3\", r.Regs.Gpr[3]},\n\t\t{\"R4\", r.Regs.Gpr[4]},\n\t\t{\"R5\", r.Regs.Gpr[5]},\n\t\t{\"R6\", r.Regs.Gpr[6]},\n\t\t{\"R7\", r.Regs.Gpr[7]},\n\t\t{\"R8\", r.Regs.Gpr[8]},\n\t\t{\"R9\", r.Regs.Gpr[9]},\n\t\t{\"R10\", r.Regs.Gpr[10]},\n\t\t{\"R11\", r.Regs.Gpr[11]},\n\t\t{\"R12\", r.Regs.Gpr[12]},\n\t\t{\"R13\", r.Regs.Gpr[13]},\n\t\t{\"R14\", r.Regs.Gpr[14]},\n\t\t{\"R15\", r.Regs.Gpr[15]},\n\t\t{\"R16\", r.Regs.Gpr[16]},\n\t\t{\"R17\", r.Regs.Gpr[17]},\n\t\t{\"R18\", r.Regs.Gpr[18]},\n\t\t{\"R19\", r.Regs.Gpr[19]},\n\t\t{\"R20\", r.Regs.Gpr[20]},\n\t\t{\"R21\", r.Regs.Gpr[21]},\n\t\t{\"R22\", r.Regs.Gpr[22]},\n\t\t{\"R23\", r.Regs.Gpr[23]},\n\t\t{\"R24\", r.Regs.Gpr[24]},\n\t\t{\"R25\", r.Regs.Gpr[25]},\n\t\t{\"R26\", r.Regs.Gpr[26]},\n\t\t{\"R27\", r.Regs.Gpr[27]},\n\t\t{\"R28\", r.Regs.Gpr[28]},\n\t\t{\"R29\", r.Regs.Gpr[29]},\n\t\t{\"R30\", r.Regs.Gpr[30]},\n\t\t{\"R31\", r.Regs.Gpr[31]},\n\t\t{\"Nip\", r.Regs.Nip},\n\t\t{\"MSr\", r.Regs.Msr},\n\t\t{\"Orig_gpr3\", r.Regs.Orig_gpr3},\n\t\t{\"Ctr\", r.Regs.Ctr},\n\t\t{\"Link\", r.Regs.Link},\n\t\t{\"Xer\", r.Regs.Xer},\n\t\t{\"Ccr\", r.Regs.Ccr},\n\t\t{\"Softe\", r.Regs.Softe},\n\t\t{\"Trap\", r.Regs.Trap},\n\t\t{\"Dar\", r.Regs.Dar},\n\t\t{\"Dsisr\", r.Regs.Dsisr},\n\t\t{\"Result\", r.Regs.Result},\n\t}\n\tout := make([]proc.Register, 0, len(regs)+len(r.Fpregs))\n\tfor _, reg := range regs {\n\t\tout = proc.AppendUint64Register(out, reg.k, reg.v)\n\t}\n\tvar floatLoadError error\n\tif floatingPoint {\n\t\tif r.loadFpRegs != nil {\n\t\t\tfloatLoadError = r.loadFpRegs(r)\n\t\t\tr.loadFpRegs = nil\n\t\t}\n\t\tout = append(out, r.Fpregs...)\n\t}\n\treturn out, floatLoadError\n}\n\n// Copy returns a copy of these registers that is guaranteed not to change.\nfunc (r *PPC64LERegisters) Copy() (proc.Registers, error) {\n\tif r.loadFpRegs != nil {\n\t\terr := r.loadFpRegs(r)\n\t\tr.loadFpRegs = nil\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tvar rr PPC64LERegisters\n\trr.Regs = &PPC64LEPtraceRegs{}\n\t*(rr.Regs) = *(r.Regs)\n\tif r.Fpregs != nil {\n\t\trr.Fpregs = make([]proc.Register, len(r.Fpregs))\n\t\tcopy(rr.Fpregs, r.Fpregs)\n\t}\n\tif r.Fpregset != nil {\n\t\trr.Fpregset = make([]byte, len(r.Fpregset))\n\t\tcopy(rr.Fpregset, r.Fpregset)\n\t}\n\treturn &rr, nil\n}\n\nfunc (r *PPC64LERegisters) SetReg(regNum uint64, reg *op.DwarfRegister) (fpchanged bool, err error) {\n\tswitch regNum {\n\tcase regnum.PPC64LE_PC:\n\t\tr.Regs.Nip = reg.Uint64Val\n\t\treturn false, nil\n\tcase regnum.PPC64LE_LR:\n\t\tr.Regs.Link = reg.Uint64Val\n\t\treturn false, nil\n\tcase regnum.PPC64LE_SP:\n\t\tr.Regs.Gpr[1] = reg.Uint64Val\n\t\treturn false, nil\n\tdefault:\n\t\tswitch {\n\t\tcase regNum >= regnum.PPC64LE_R0 && regNum <= regnum.PPC64LE_R0+31:\n\t\t\tr.Regs.Gpr[regNum-regnum.PPC64LE_R0] = reg.Uint64Val\n\t\t\treturn false, nil\n\n\t\tcase regNum >= regnum.PPC64LE_F0 && regNum <= regnum.PPC64LE_F0+31:\n\t\t\tif r.loadFpRegs != nil {\n\t\t\t\terr := r.loadFpRegs(r)\n\t\t\t\tr.loadFpRegs = nil\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn false, err\n\t\t\t\t}\n\t\t\t}\n\t\t\t// On ppc64le, PPC64LE_VS0 .. PPC64LE_VS31 are mapped onto\n\t\t\t// PPC64LE_F0 .. PPC64LE_F31\n\t\t\ti := regNum - regnum.PPC64LE_VS0\n\t\t\treg.FillBytes()\n\t\t\tcopy(r.Fpregset[8*i:], reg.Bytes)\n\t\t\treturn true, nil\n\n\t\tdefault:\n\t\t\treturn false, fmt.Errorf(\"changing register %d not implemented\", regNum)\n\t\t}\n\t}\n}\n\ntype PPC64LEPtraceFpRegs struct {\n\tFp []byte\n}\n\nfunc (fpregs *PPC64LEPtraceFpRegs) Decode() (regs []proc.Register) {\n\tfor i := 0; i < len(fpregs.Fp); i += 8 {\n\t\tregs = proc.AppendBytesRegister(regs, fmt.Sprintf(\"VS%d\", i/8), fpregs.Fp[i:i+8])\n\t}\n\treturn\n}\n"
  },
  {
    "path": "pkg/proc/linutil/regs_riscv64_arch.go",
    "content": "package linutil\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"golang.org/x/arch/riscv64/riscv64asm\"\n)\n\n// RISCV64Registers implements the proc.Registers interface.\ntype RISCV64Registers struct {\n\tRegs       *RISCV64PtraceRegs // general-purpose registers & pc\n\tiscgo      bool\n\ttp_tls     uint64\n\tFpregs     []proc.Register // Formatted floating-point registers\n\tFpregset   []byte          // holding all floating-point register values\n\tloadFpRegs func(*RISCV64Registers) error\n}\n\nfunc NewRISCV64Registers(regs *RISCV64PtraceRegs, iscgo bool, tp_tls uint64,\n\tloadFpRegs func(*RISCV64Registers) error) *RISCV64Registers {\n\treturn &RISCV64Registers{\n\t\tRegs:       regs,\n\t\tiscgo:      iscgo,\n\t\ttp_tls:     tp_tls,\n\t\tloadFpRegs: loadFpRegs,\n\t}\n}\n\n// RISCV64PtraceRegs is the struct used by the linux kernel to return the\n// general purpose registers for RISC-V CPUs.\ntype RISCV64PtraceRegs struct {\n\tPc  uint64\n\tRa  uint64\n\tSp  uint64\n\tGp  uint64\n\tTp  uint64\n\tT0  uint64\n\tT1  uint64\n\tT2  uint64\n\tS0  uint64\n\tS1  uint64\n\tA0  uint64\n\tA1  uint64\n\tA2  uint64\n\tA3  uint64\n\tA4  uint64\n\tA5  uint64\n\tA6  uint64\n\tA7  uint64\n\tS2  uint64\n\tS3  uint64\n\tS4  uint64\n\tS5  uint64\n\tS6  uint64\n\tS7  uint64\n\tS8  uint64\n\tS9  uint64\n\tS10 uint64\n\tS11 uint64\n\tT3  uint64\n\tT4  uint64\n\tT5  uint64\n\tT6  uint64\n}\n\n// Slice returns the registers as a list of (name, value) pairs.\nfunc (r *RISCV64Registers) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tvar regs64 = []struct {\n\t\tk string\n\t\tv uint64\n\t}{\n\t\t{\"X1\", r.Regs.Ra},\n\t\t{\"X2\", r.Regs.Sp},\n\t\t{\"X3\", r.Regs.Gp},\n\t\t{\"X4\", r.Regs.Tp},\n\t\t{\"X5\", r.Regs.T0},\n\t\t{\"X6\", r.Regs.T1},\n\t\t{\"X7\", r.Regs.T2},\n\t\t{\"X8\", r.Regs.S0},\n\t\t{\"X9\", r.Regs.S1},\n\t\t{\"X10\", r.Regs.A0},\n\t\t{\"X11\", r.Regs.A1},\n\t\t{\"X12\", r.Regs.A2},\n\t\t{\"X13\", r.Regs.A3},\n\t\t{\"X14\", r.Regs.A4},\n\t\t{\"X15\", r.Regs.A5},\n\t\t{\"X16\", r.Regs.A6},\n\t\t{\"X17\", r.Regs.A7},\n\t\t{\"X18\", r.Regs.S2},\n\t\t{\"X19\", r.Regs.S3},\n\t\t{\"X20\", r.Regs.S4},\n\t\t{\"X21\", r.Regs.S5},\n\t\t{\"X22\", r.Regs.S6},\n\t\t{\"X23\", r.Regs.S7},\n\t\t{\"X24\", r.Regs.S8},\n\t\t{\"X25\", r.Regs.S9},\n\t\t{\"X26\", r.Regs.S10},\n\t\t{\"X27\", r.Regs.S11},\n\t\t{\"X28\", r.Regs.T3},\n\t\t{\"X29\", r.Regs.T4},\n\t\t{\"X30\", r.Regs.T5},\n\t\t{\"X31\", r.Regs.T6},\n\t\t{\"PC\", r.Regs.Pc},\n\t}\n\n\tout := make([]proc.Register, 0, (len(regs64) + len(r.Fpregs)))\n\tfor _, reg := range regs64 {\n\t\tout = proc.AppendUint64Register(out, reg.k, reg.v)\n\t}\n\n\tvar floatLoadError error\n\tif floatingPoint {\n\t\tif r.loadFpRegs != nil {\n\t\t\tfloatLoadError = r.loadFpRegs(r)\n\t\t\tr.loadFpRegs = nil\n\t\t}\n\n\t\tout = append(out, r.Fpregs...)\n\t}\n\n\treturn out, floatLoadError\n}\n\n// PC returns the value of PC register.\nfunc (r *RISCV64Registers) PC() uint64 {\n\t// PC Register\n\treturn r.Regs.Pc\n}\n\n// SP returns the value of SP register.\nfunc (r *RISCV64Registers) SP() uint64 {\n\t// Stack pointer\n\treturn r.Regs.Sp\n}\n\n// BP returns the value of FP register\nfunc (r *RISCV64Registers) BP() uint64 {\n\t// unused FP register\n\treturn 0\n}\n\n// TLS returns the address of the thread local storage memory segment.\nfunc (r *RISCV64Registers) TLS() uint64 {\n\t// TODO: calling cgo may overwrite $x27, read it from the kernel\n\tif !r.iscgo {\n\t\treturn 0\n\t}\n\n\treturn r.tp_tls\n}\n\n// GAddr returns the address of the G variable if it is known, 0 and false otherwise.\nfunc (r *RISCV64Registers) GAddr() (uint64, bool) {\n\t// Defined in $GOROOT/cmd/internal/obj/riscv/cpu.go.\n\treturn r.Regs.S11, !r.iscgo\n}\n\n// LR returns the link register.\nfunc (r *RISCV64Registers) LR() uint64 {\n\treturn r.Regs.Ra\n}\n\n// Copy returns a copy of these registers that is guaranteed not to change.\nfunc (r *RISCV64Registers) Copy() (proc.Registers, error) {\n\tif r.loadFpRegs != nil {\n\t\terr := r.loadFpRegs(r)\n\t\tr.loadFpRegs = nil\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tvar rr RISCV64Registers\n\trr.Regs = &RISCV64PtraceRegs{}\n\t*(rr.Regs) = *(r.Regs)\n\tif r.Fpregs != nil {\n\t\trr.Fpregs = make([]proc.Register, len(r.Fpregs))\n\t\tcopy(rr.Fpregs, r.Fpregs)\n\t}\n\n\tif r.Fpregset != nil {\n\t\trr.Fpregset = make([]byte, len(r.Fpregset))\n\t\tcopy(rr.Fpregset, r.Fpregset)\n\t}\n\n\treturn &rr, nil\n}\n\nfunc (r *RISCV64Registers) GetReg(regNum uint64) (uint64, error) {\n\treg := riscv64asm.Reg(regNum)\n\n\tif reg <= riscv64asm.X31 {\n\t\tswitch regNum {\n\t\tcase regnum.RISCV64_LR:\n\t\t\treturn uint64(r.Regs.Ra), nil\n\t\tcase regnum.RISCV64_SP:\n\t\t\treturn uint64(r.Regs.Sp), nil\n\t\tcase regnum.RISCV64_GP:\n\t\t\treturn uint64(r.Regs.Gp), nil\n\t\tcase regnum.RISCV64_TP:\n\t\t\treturn uint64(r.Regs.Tp), nil\n\t\tcase regnum.RISCV64_T0:\n\t\t\treturn uint64(r.Regs.T0), nil\n\t\tcase regnum.RISCV64_T1:\n\t\t\treturn uint64(r.Regs.T1), nil\n\t\tcase regnum.RISCV64_T2:\n\t\t\treturn uint64(r.Regs.T2), nil\n\t\tcase regnum.RISCV64_S0:\n\t\t\treturn uint64(r.Regs.S0), nil\n\t\tcase regnum.RISCV64_S1:\n\t\t\treturn uint64(r.Regs.S1), nil\n\t\tcase regnum.RISCV64_A0:\n\t\t\treturn uint64(r.Regs.A0), nil\n\t\tcase regnum.RISCV64_A1:\n\t\t\treturn uint64(r.Regs.A1), nil\n\t\tcase regnum.RISCV64_A2:\n\t\t\treturn uint64(r.Regs.A2), nil\n\t\tcase regnum.RISCV64_A3:\n\t\t\treturn uint64(r.Regs.A3), nil\n\t\tcase regnum.RISCV64_A4:\n\t\t\treturn uint64(r.Regs.A4), nil\n\t\tcase regnum.RISCV64_A5:\n\t\t\treturn uint64(r.Regs.A5), nil\n\t\tcase regnum.RISCV64_A6:\n\t\t\treturn uint64(r.Regs.A6), nil\n\t\tcase regnum.RISCV64_A7:\n\t\t\treturn uint64(r.Regs.A7), nil\n\t\tcase regnum.RISCV64_S2:\n\t\t\treturn uint64(r.Regs.S2), nil\n\t\tcase regnum.RISCV64_S3:\n\t\t\treturn uint64(r.Regs.S3), nil\n\t\tcase regnum.RISCV64_S4:\n\t\t\treturn uint64(r.Regs.S4), nil\n\t\tcase regnum.RISCV64_S5:\n\t\t\treturn uint64(r.Regs.S5), nil\n\t\tcase regnum.RISCV64_S6:\n\t\t\treturn uint64(r.Regs.S6), nil\n\t\tcase regnum.RISCV64_S7:\n\t\t\treturn uint64(r.Regs.S7), nil\n\t\tcase regnum.RISCV64_S8:\n\t\t\treturn uint64(r.Regs.S8), nil\n\t\tcase regnum.RISCV64_S9:\n\t\t\treturn uint64(r.Regs.S9), nil\n\t\tcase regnum.RISCV64_S10:\n\t\t\treturn uint64(r.Regs.S10), nil\n\t\tcase regnum.RISCV64_S11:\n\t\t\treturn uint64(r.Regs.S11), nil\n\t\tcase regnum.RISCV64_T3:\n\t\t\treturn uint64(r.Regs.T3), nil\n\t\tcase regnum.RISCV64_T4:\n\t\t\treturn uint64(r.Regs.T4), nil\n\t\tcase regnum.RISCV64_T5:\n\t\t\treturn uint64(r.Regs.T5), nil\n\t\tcase regnum.RISCV64_T6:\n\t\t\treturn uint64(r.Regs.T6), nil\n\t\t}\n\t}\n\n\treturn 0, proc.ErrUnknownRegister\n}\n\nfunc (r *RISCV64Registers) SetReg(regNum uint64, reg *op.DwarfRegister) (fpchanged bool, err error) {\n\tvar p *uint64\n\tswitch regNum {\n\tcase regnum.RISCV64_LR:\n\t\tp = &r.Regs.Ra\n\tcase regnum.RISCV64_SP:\n\t\tp = &r.Regs.Sp\n\tcase regnum.RISCV64_GP:\n\t\tp = &r.Regs.Gp\n\tcase regnum.RISCV64_TP:\n\t\tp = &r.Regs.Tp\n\tcase regnum.RISCV64_T0:\n\t\tp = &r.Regs.T0\n\tcase regnum.RISCV64_T1:\n\t\tp = &r.Regs.T1\n\tcase regnum.RISCV64_T2:\n\t\tp = &r.Regs.T2\n\tcase regnum.RISCV64_S0:\n\t\tp = &r.Regs.S0\n\tcase regnum.RISCV64_S1:\n\t\tp = &r.Regs.S1\n\tcase regnum.RISCV64_A0:\n\t\tp = &r.Regs.A0\n\tcase regnum.RISCV64_A1:\n\t\tp = &r.Regs.A1\n\tcase regnum.RISCV64_A2:\n\t\tp = &r.Regs.A2\n\tcase regnum.RISCV64_A3:\n\t\tp = &r.Regs.A3\n\tcase regnum.RISCV64_A4:\n\t\tp = &r.Regs.A4\n\tcase regnum.RISCV64_A5:\n\t\tp = &r.Regs.A5\n\tcase regnum.RISCV64_A6:\n\t\tp = &r.Regs.A6\n\tcase regnum.RISCV64_A7:\n\t\tp = &r.Regs.A7\n\tcase regnum.RISCV64_S2:\n\t\tp = &r.Regs.S2\n\tcase regnum.RISCV64_S3:\n\t\tp = &r.Regs.S3\n\tcase regnum.RISCV64_S4:\n\t\tp = &r.Regs.S4\n\tcase regnum.RISCV64_S5:\n\t\tp = &r.Regs.S5\n\tcase regnum.RISCV64_S6:\n\t\tp = &r.Regs.S6\n\tcase regnum.RISCV64_S7:\n\t\tp = &r.Regs.S7\n\tcase regnum.RISCV64_S8:\n\t\tp = &r.Regs.S8\n\tcase regnum.RISCV64_S9:\n\t\tp = &r.Regs.S9\n\tcase regnum.RISCV64_S10:\n\t\tp = &r.Regs.S10\n\tcase regnum.RISCV64_S11:\n\t\tp = &r.Regs.S11\n\tcase regnum.RISCV64_T3:\n\t\tp = &r.Regs.T3\n\tcase regnum.RISCV64_T4:\n\t\tp = &r.Regs.T4\n\tcase regnum.RISCV64_T5:\n\t\tp = &r.Regs.T5\n\tcase regnum.RISCV64_T6:\n\t\tp = &r.Regs.T6\n\tcase regnum.RISCV64_PC:\n\t\tp = &r.Regs.Pc\n\t}\n\n\tif p != nil {\n\t\t*p = reg.Uint64Val\n\t\treturn false, nil\n\t}\n\n\tswitch {\n\tcase regNum >= regnum.RISCV64_F0 && regNum <= regnum.RISCV64_F31:\n\t\tif r.loadFpRegs != nil {\n\t\t\terr := r.loadFpRegs(r)\n\t\t\tr.loadFpRegs = nil\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t}\n\n\t\ti := regNum - regnum.RISCV64_F0\n\t\treg.FillBytes()\n\t\tcopy(r.Fpregset[8*i:], reg.Bytes)\n\t\treturn true, nil\n\n\tdefault:\n\t\treturn false, fmt.Errorf(\"changing register %d not implemented\", regNum)\n\t}\n}\n\n// RISCV64PtraceFpRegs is refer to the definition of struct __riscv_d_ext_state in the kernel ptrace.h\ntype RISCV64PtraceFpRegs struct {\n\tFregs []byte\n\tFcsr  uint32\n}\n\nconst _RISCV64_FPREGSET_LENGTH = (32 * 8)\n\nfunc (fpregs *RISCV64PtraceFpRegs) Decode() (regs []proc.Register) {\n\tfor i := 0; i < len(fpregs.Fregs); i += 8 {\n\t\tname := fmt.Sprintf(\"F%d\", (i / 8))\n\t\tvalue := fpregs.Fregs[i : i+8]\n\t\tregs = proc.AppendBytesRegister(regs, name, value)\n\t}\n\n\tfcsrBytes := make([]byte, 4)\n\tbinary.LittleEndian.PutUint32(fcsrBytes, uint32(fpregs.Fcsr))\n\tregs = proc.AppendBytesRegister(regs, \"FCSR\", fcsrBytes)\n\n\treturn\n}\n\nfunc (fpregs *RISCV64PtraceFpRegs) Byte() []byte {\n\tfpregs.Fregs = make([]byte, _RISCV64_FPREGSET_LENGTH)\n\n\treturn fpregs.Fregs[:]\n}\n"
  },
  {
    "path": "pkg/proc/loong64_arch.go",
    "content": "package proc\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n)\n\n// Break Instruction : 0x002a0000\nvar loong64BreakInstruction = []byte{0x00, 0x00, 0x2a, 0x00}\n\n// LOONG64Arch returns an initialized LOONG64 struct.\nfunc LOONG64Arch(goos string) *Arch {\n\treturn &Arch{\n\t\tName:                             \"loong64\",\n\t\tptrSize:                          8,\n\t\tmaxInstructionLength:             4,\n\t\tbreakpointInstruction:            loong64BreakInstruction,\n\t\tbreakInstrMovesPC:                false,\n\t\tderefTLS:                         false,\n\t\tprologues:                        nil,\n\t\tfixFrameUnwindContext:            loong64FixFrameUnwindContext,\n\t\tswitchStack:                      loong64SwitchStack,\n\t\tregSize:                          loong64RegSize,\n\t\tRegistersToDwarfRegisters:        loong64RegistersToDwarfRegisters,\n\t\taddrAndStackRegsToDwarfRegisters: loong64AddrAndStackRegsToDwarfRegisters,\n\t\tDwarfRegisterToString:            loong64DwarfRegisterToString,\n\t\tinhibitStepInto:                  func(*BinaryInfo, uint64) bool { return false },\n\t\tasmDecode:                        loong64AsmDecode,\n\t\tusesLR:                           true,\n\t\tPCRegNum:                         regnum.LOONG64_PC,\n\t\tSPRegNum:                         regnum.LOONG64_SP,\n\t\tContextRegNum:                    regnum.LOONG64_R0 + 29,\n\t\tLRRegNum:                         regnum.LOONG64_LR,\n\t\tasmRegisters:                     loong64AsmRegisters,\n\t\tRegisterNameToDwarf:              nameToDwarfFunc(regnum.LOONG64NameToDwarf),\n\t\tRegnumToString:                   regnum.LOONG64ToName,\n\t\tdebugCallMinStackSize:            280,\n\t\tmaxRegArgBytes:                   16*8 + 16*8, // 16 int argument registers plus 16 float argument registers\n\t\targumentRegs:                     []int{regnum.LOONG64_R0 + 4, regnum.LOONG64_R0 + 5, regnum.LOONG64_R0 + 6},\n\t}\n}\n\nfunc loong64FixFrameUnwindContext(fctxt *frame.FrameContext, pc uint64, bi *BinaryInfo) *frame.FrameContext {\n\ta := bi.Arch\n\tif a.sigreturnfn == nil {\n\t\ta.sigreturnfn = bi.lookupOneFunc(\"runtime.sigreturn\")\n\t}\n\tif fctxt == nil || (a.sigreturnfn != nil && pc >= a.sigreturnfn.Entry && pc < a.sigreturnfn.End) {\n\t\t// When there's no frame descriptor entry use BP (the frame pointer) instead\n\t\t// - return register is [bp + a.PtrSize()] (i.e. [cfa-a.PtrSize()])\n\t\t// - cfa is bp + a.PtrSize()*2\n\t\t// - bp is [bp] (i.e. [cfa-a.PtrSize()*2])\n\t\t// - sp is cfa\n\t\treturn &frame.FrameContext{\n\t\t\tRetAddrReg: regnum.LOONG64_LR,\n\t\t\tRegs: map[uint64]frame.DWRule{\n\t\t\t\tregnum.LOONG64_LR: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-a.PtrSize()),\n\t\t\t\t},\n\n\t\t\t\tregnum.LOONG64_FP: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-2 * a.PtrSize()),\n\t\t\t\t},\n\n\t\t\t\tregnum.LOONG64_SP: {\n\t\t\t\t\tRule:   frame.RuleValOffset,\n\t\t\t\t\tOffset: 0,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tCFA: frame.DWRule{\n\t\t\t\tRule:   frame.RuleCFA,\n\t\t\t\tReg:    regnum.LOONG64_FP,\n\t\t\t\tOffset: int64(2 * a.PtrSize()),\n\t\t\t},\n\t\t}\n\t}\n\n\tif a.crosscall2fn == nil {\n\t\ta.crosscall2fn = bi.lookupOneFunc(\"crosscall2\")\n\t}\n\n\tif a.crosscall2fn != nil && pc >= a.crosscall2fn.Entry && pc < a.crosscall2fn.End {\n\t\trule := fctxt.CFA\n\t\tif rule.Offset == crosscall2SPOffsetBad {\n\t\t\trule.Offset += crosscall2SPOffset\n\t\t}\n\t\tfctxt.CFA = rule\n\t}\n\n\tif fctxt.CFA.Rule == frame.RuleUndefined {\n\t\tfctxt.CFA = frame.DWRule{\n\t\t\tRule:   frame.RuleCFA,\n\t\t\tReg:    regnum.LOONG64_FP,\n\t\t\tOffset: int64(2 * a.PtrSize()),\n\t\t}\n\t}\n\n\tif fctxt.Regs[regnum.LOONG64_LR].Rule == frame.RuleUndefined {\n\t\tfctxt.Regs[regnum.LOONG64_LR] = frame.DWRule{\n\t\t\tRule:   frame.RuleRegister,\n\t\t\tReg:    regnum.LOONG64_LR,\n\t\t\tOffset: 0,\n\t\t}\n\t}\n\n\treturn fctxt\n}\n\nconst loong64cgocallSPOffsetSaveSlot = 0x8\n\nfunc loong64SwitchStack(it *stackIterator, callFrameRegs *op.DwarfRegisters) bool {\n\tif it.frame.Current.Fn == nil {\n\t\tif it.systemstack && it.g != nil && it.top {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\tswitch it.frame.Current.Fn.Name {\n\tcase \"runtime.goexit\", \"runtime.rt0_go\":\n\t\t// Look for \"top of stack\" functions.\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"runtime.mcall\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tit.switchToGoroutineStack()\n\t\t\treturn true\n\t\t}\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"runtime.asmcgocall\":\n\t\tif it.top || !it.systemstack {\n\t\t\treturn false\n\t\t}\n\t\t// This function is called by a goroutine to execute a C function and\n\t\t// switches from the goroutine stack to the system stack.\n\t\t// Since we are unwinding the stack from callee to caller we have to switch\n\t\t// from the system stack to the goroutine stack.\n\t\toldsp := it.regs.SP()\n\t\toff, _ := readIntRaw(it.mem, oldsp+loong64cgocallSPOffsetSaveSlot, int64(it.bi.Arch.PtrSize()))\n\t\tnewsp := uint64(int64(it.stackhi) - off)\n\n\t\t// The runtime.asmcgocall prologue contains: addi.d $sp, $sp, -8,\n\t\t// hence we require newsp + 8 at this point\n\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = newsp + 8\n\n\t\t// runtime.asmcgocall can also be called from inside the system stack,\n\t\t// in that case no stack switch actually happens\n\t\tif it.regs.SP() == oldsp {\n\t\t\treturn false\n\t\t}\n\n\t\tit.top = false\n\t\tit.systemstack = false\n\t\t// The return value is stored in the LR register which is saved at -8(SP).\n\t\taddrret := uint64(int64(it.regs.SP()) - int64(it.bi.Arch.PtrSize()))\n\t\tit.frame.Ret, _ = readUintRaw(it.mem, addrret, int64(it.bi.Arch.PtrSize()))\n\t\tit.pc = it.frame.Ret\n\t\treturn true\n\n\tcase \"runtime.cgocallback_gofunc\", \"runtime.cgocallback\":\n\t\t// For a detailed description of how this works read the long comment at\n\t\t// the start of $GOROOT/src/runtime/cgocall.go and the source code of\n\t\t// runtime.cgocallback_gofunc in $GOROOT/src/runtime/asm_loong64.s\n\t\t//\n\t\t// When a C functions calls back into go it will eventually call into\n\t\t// runtime.cgocallback_gofunc which is the function that does the stack\n\t\t// switch from the system stack back into the goroutine stack\n\t\t// Since we are going backwards on the stack here we see the transition\n\t\t// as goroutine stack -> system stack.\n\t\tif it.top || it.systemstack {\n\t\t\treturn false\n\t\t}\n\n\t\tit.loadG0SchedSP()\n\t\tif it.g0_sched_sp <= 0 {\n\t\t\treturn false\n\t\t}\n\t\t// entering the system stack\n\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = it.g0_sched_sp\n\t\t// reads the previous value of g0.sched.sp that runtime.cgocallback_gofunc saved on the stack\n\t\tit.g0_sched_sp, _ = readUintRaw(it.mem, it.regs.SP()+loong64cgocallSPOffsetSaveSlot, int64(it.bi.Arch.PtrSize()))\n\t\tit.top = false\n\t\tcallFrameRegs, ret, retaddr := it.advanceRegs()\n\t\tframeOnSystemStack := it.newStackframe(ret, retaddr)\n\t\tit.pc = frameOnSystemStack.Ret\n\t\tit.regs = callFrameRegs\n\t\tit.systemstack = true\n\t\treturn true\n\n\tcase \"crosscall2\":\n\t\t// The offsets get from runtime/cgo/asm_loong64.s:25\n\t\tnewsp, _ := readUintRaw(it.mem, it.regs.SP()+8*23, int64(it.bi.Arch.PtrSize()))\n\t\tnewbp, _ := readUintRaw(it.mem, it.regs.SP()+8*4, int64(it.bi.Arch.PtrSize()))\n\t\tnewlr, _ := readUintRaw(it.mem, it.regs.SP()+8*22, int64(it.bi.Arch.PtrSize()))\n\t\tif it.regs.Reg(it.regs.BPRegNum) != nil {\n\t\t\tit.regs.Reg(it.regs.BPRegNum).Uint64Val = newbp\n\t\t} else {\n\t\t\treg, _ := it.readRegisterAt(it.regs.BPRegNum, it.regs.SP()+8*4)\n\t\t\tit.regs.AddReg(it.regs.BPRegNum, reg)\n\t\t}\n\t\tit.regs.Reg(it.regs.LRRegNum).Uint64Val = newlr\n\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = newsp\n\t\tit.pc = newlr\n\t\treturn true\n\n\tcase \"runtime.mstart\":\n\t\t// Calls to runtime.systemstack will switch to the systemstack then:\n\t\t// 1. alter the goroutine stack so that it looks like systemstack_switch\n\t\t//    was called\n\t\t// 2. alter the system stack so that it looks like the bottom-most frame\n\t\t//    belongs to runtime.mstart\n\t\t// If we find a runtime.mstart frame on the system stack of a goroutine\n\t\t// parked on runtime.systemstack_switch we assume runtime.systemstack was\n\t\t// called and continue tracing from the parked position.\n\n\t\tif it.top || !it.systemstack || it.g == nil {\n\t\t\treturn false\n\t\t}\n\t\tif fn := it.bi.PCToFunc(it.g.PC); fn == nil || fn.Name != \"runtime.systemstack_switch\" {\n\t\t\treturn false\n\t\t}\n\n\t\tit.switchToGoroutineStack()\n\t\treturn true\n\n\tcase \"runtime.newstack\", \"runtime.systemstack\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tit.switchToGoroutineStack()\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\treturn false\n}\n\nfunc loong64RegSize(regnum uint64) int {\n\t// All CPU registers are 64bit\n\treturn 8\n}\n\nfunc loong64RegistersToDwarfRegisters(staticBase uint64, regs Registers) *op.DwarfRegisters {\n\tdregs := initDwarfRegistersFromSlice(int(regnum.LOONG64MaxRegNum()), regs, regnum.LOONG64NameToDwarf)\n\tdr := op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.LOONG64_PC, regnum.LOONG64_SP, regnum.LOONG64_FP, regnum.LOONG64_LR)\n\tdr.SetLoadMoreCallback(loadMoreDwarfRegistersFromSliceFunc(dr, regs, regnum.LOONG64NameToDwarf))\n\treturn dr\n}\n\nfunc loong64AddrAndStackRegsToDwarfRegisters(staticBase, pc, sp, bp, lr uint64) op.DwarfRegisters {\n\tdregs := make([]*op.DwarfRegister, int(regnum.LOONG64MaxRegNum()))\n\tdregs[regnum.LOONG64_PC] = op.DwarfRegisterFromUint64(pc)\n\tdregs[regnum.LOONG64_SP] = op.DwarfRegisterFromUint64(sp)\n\tdregs[regnum.LOONG64_FP] = op.DwarfRegisterFromUint64(bp)\n\tdregs[regnum.LOONG64_LR] = op.DwarfRegisterFromUint64(lr)\n\n\treturn *op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.LOONG64_PC, regnum.LOONG64_SP, regnum.LOONG64_FP, regnum.LOONG64_LR)\n}\n\nfunc loong64DwarfRegisterToString(i int, reg *op.DwarfRegister) (name string, floatingPoint bool, repr string) {\n\tname = regnum.LOONG64ToName(uint64(i))\n\n\tif reg == nil {\n\t\treturn name, false, \"\"\n\t}\n\n\tif strings.HasPrefix(name, \"FCC\") {\n\t\treturn name, true, fmt.Sprintf(\"%#x\", reg.Uint64Val)\n\t} else if strings.HasPrefix(name, \"F\") {\n\t\treturn name, true, fmt.Sprintf(\"%#016x\", reg.Uint64Val)\n\t} else {\n\t\treturn name, false, fmt.Sprintf(\"%#016x\", reg.Uint64Val)\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/loong64_disasm.go",
    "content": "package proc\n\nimport (\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"golang.org/x/arch/loong64/loong64asm\"\n)\n\nfunc loong64AsmDecode(asmInst *AsmInstruction, mem []byte, regs *op.DwarfRegisters, memrw MemoryReadWriter, bi *BinaryInfo) error {\n\tasmInst.Size = 4\n\tasmInst.Bytes = mem[:asmInst.Size]\n\n\tinst, err := loong64asm.Decode(mem)\n\tif err != nil {\n\t\tasmInst.Inst = (*loong64ArchInst)(nil)\n\t\treturn err\n\t}\n\n\tasmInst.Inst = (*loong64ArchInst)(&inst)\n\tasmInst.Kind = OtherInstruction\n\n\tswitch inst.Op {\n\tcase loong64asm.JIRL:\n\t\trd, _ := inst.Args[0].(loong64asm.Reg)\n\t\trj, _ := inst.Args[1].(loong64asm.Reg)\n\t\tif rd == loong64asm.R1 {\n\t\t\tasmInst.Kind = CallInstruction\n\t\t} else if rd == loong64asm.R0 && rj == loong64asm.R1 {\n\t\t\tasmInst.Kind = RetInstruction\n\t\t} else {\n\t\t\tasmInst.Kind = JmpInstruction\n\t\t}\n\n\tcase loong64asm.BL:\n\t\tasmInst.Kind = CallInstruction\n\n\tcase loong64asm.BEQZ,\n\t\tloong64asm.BNEZ,\n\t\tloong64asm.BCEQZ,\n\t\tloong64asm.BCNEZ,\n\t\tloong64asm.B,\n\t\tloong64asm.BEQ,\n\t\tloong64asm.BNE,\n\t\tloong64asm.BLT,\n\t\tloong64asm.BGE,\n\t\tloong64asm.BLTU,\n\t\tloong64asm.BGEU:\n\t\tasmInst.Kind = JmpInstruction\n\n\tcase loong64asm.BREAK:\n\t\tasmInst.Kind = HardBreakInstruction\n\n\tdefault:\n\t\tasmInst.Kind = OtherInstruction\n\t}\n\n\tasmInst.DestLoc = resolveCallArgLOONG64(&inst, asmInst.Loc.PC, asmInst.AtPC, regs, memrw, bi)\n\n\treturn nil\n}\n\nfunc resolveCallArgLOONG64(inst *loong64asm.Inst, instAddr uint64, currentGoroutine bool, regs *op.DwarfRegisters, mem MemoryReadWriter, bininfo *BinaryInfo) *Location {\n\tvar pc uint64\n\tvar err error\n\n\tswitch inst.Op {\n\t// Format: op offs26\n\t// Target: offs26\n\tcase loong64asm.B, loong64asm.BL:\n\t\tswitch arg := inst.Args[0].(type) {\n\t\tcase loong64asm.OffsetSimm:\n\t\t\tpc = uint64(int64(instAddr) + int64(arg.Imm))\n\t\tdefault:\n\t\t\treturn nil\n\t\t}\n\n\t// Format: op rd,rj,offs16\n\t// Target: offs16\n\tcase loong64asm.BEQ,\n\t\tloong64asm.BNE,\n\t\tloong64asm.BLT,\n\t\tloong64asm.BGE,\n\t\tloong64asm.BLTU,\n\t\tloong64asm.BGEU:\n\n\t\tswitch arg := inst.Args[2].(type) {\n\t\tcase loong64asm.OffsetSimm:\n\t\t\tpc = uint64(int64(instAddr) + int64(arg.Imm))\n\t\tdefault:\n\t\t\treturn nil\n\t\t}\n\n\t// Format: op rd,rj,offs16\n\t// Target: rj + offs16\n\tcase loong64asm.JIRL:\n\t\tif !currentGoroutine || regs == nil {\n\t\t\treturn nil\n\t\t}\n\t\tswitch arg1 := inst.Args[1].(type) {\n\t\tcase loong64asm.Reg:\n\t\t\tswitch arg2 := inst.Args[2].(type) {\n\t\t\tcase loong64asm.OffsetSimm:\n\t\t\t\tpc, err = bininfo.Arch.getAsmRegister(regs, int(arg1))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\tpc = uint64(int64(pc) + int64(arg2.Imm))\n\t\t\t}\n\t\t}\n\n\t// Format: op rj,offs21\n\t// Target: offs21\n\tcase loong64asm.BEQZ,\n\t\tloong64asm.BNEZ,\n\t\tloong64asm.BCEQZ,\n\t\tloong64asm.BCNEZ:\n\n\t\tif (!currentGoroutine) || (regs == nil) {\n\t\t\treturn nil\n\t\t}\n\n\t\tswitch arg := inst.Args[1].(type) {\n\t\tcase loong64asm.OffsetSimm:\n\t\t\tpc = uint64(int64(instAddr) + int64(arg.Imm))\n\t\tdefault:\n\t\t\treturn nil\n\t\t}\n\n\tdefault:\n\t\treturn nil\n\t}\n\n\tfile, line, fn := bininfo.PCToLine(pc)\n\tif fn == nil {\n\t\treturn &Location{PC: pc}\n\t}\n\n\treturn &Location{PC: pc, File: file, Line: line, Fn: fn}\n}\n\ntype loong64ArchInst loong64asm.Inst\n\nfunc (inst *loong64ArchInst) Text(flavour AssemblyFlavour, pc uint64, symLookup func(uint64) (string, uint64)) string {\n\tif inst == nil {\n\t\treturn \"?\"\n\t}\n\n\tvar text string\n\n\tswitch flavour {\n\tcase GNUFlavour:\n\t\ttext = loong64asm.GNUSyntax(loong64asm.Inst(*inst))\n\tdefault:\n\t\ttext = loong64asm.GoSyntax(loong64asm.Inst(*inst), pc, symLookup)\n\t}\n\n\treturn text\n}\n\nfunc (inst *loong64ArchInst) OpcodeEquals(op uint64) bool {\n\tif inst == nil {\n\t\treturn false\n\t}\n\n\treturn uint64(inst.Op) == op\n}\n\nvar loong64AsmRegisters = func() map[int]asmRegister {\n\tr := make(map[int]asmRegister)\n\n\tfor i := loong64asm.R0; i <= loong64asm.R31; i++ {\n\t\tr[int(i)] = asmRegister{regnum.LOONG64_R0 + uint64(i), 0, 0}\n\t}\n\n\treturn r\n}()\n"
  },
  {
    "path": "pkg/proc/macutil/rosetta_darwin.go",
    "content": "package macutil\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n)\n\n// CheckRosetta returns an error if the calling process is being translated\n// by Apple Rosetta.\nfunc CheckRosetta() error {\n\tpt, err := syscall.Sysctl(\"sysctl.proc_translated\")\n\tif err != nil {\n\t\treturn nil\n\t}\n\tif len(pt) > 0 && pt[0] == 1 {\n\t\treturn errors.New(\"can not run under Rosetta, check that the installed build of Go is right for your CPU architecture\")\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/macutil/rosetta_other.go",
    "content": "//go:build !darwin\n\npackage macutil\n\n// CheckRosetta returns an error if the calling process is being translated\n// by Apple Rosetta.\nfunc CheckRosetta() error {\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/mapiter.go",
    "content": "package proc\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n)\n\ntype mapIterator interface {\n\tnext() bool\n\tkey() *Variable\n\tvalue() *Variable\n}\n\nfunc (v *Variable) mapIterator(maxNumBuckets uint64) mapIterator {\n\tmt := v.RealType.(*godwarf.MapType)\n\tsv := v.clone()\n\tsv.RealType = godwarf.ResolveTypedef(&(sv.RealType.(*godwarf.MapType).TypedefType))\n\tsv = sv.maybeDereference()\n\tv.Base = sv.Addr\n\n\tmaptype, ok := sv.RealType.(*godwarf.StructType)\n\tif !ok {\n\t\tv.Unreadable = errors.New(\"wrong real type for map\")\n\t\treturn nil\n\t}\n\n\tisptr := func(typ godwarf.Type) bool {\n\t\t_, isptr := typ.(*godwarf.PtrType)\n\t\treturn isptr\n\t}\n\n\tit := &mapIteratorClassic{v: v, bidx: 0, b: nil, idx: 0, maxNumBuckets: maxNumBuckets, keyTypeIsPtr: isptr(mt.KeyType), elemTypeIsPtr: isptr(mt.ElemType)}\n\titswiss := &mapIteratorSwiss{v: v, maxNumGroups: maxNumBuckets, keyTypeIsPtr: isptr(mt.KeyType), elemTypeIsPtr: isptr(mt.ElemType)}\n\n\tif sv.Addr == 0 {\n\t\tit.numbuckets = 0\n\t\treturn it\n\t}\n\n\tv.mem = cacheMemory(v.mem, v.Base, int(v.RealType.Size()))\n\n\tfor _, f := range maptype.Field {\n\t\tvar err error\n\t\tfield, _ := sv.toField(f)\n\t\tswitch f.Name {\n\t\t// Classic map fields\n\t\tcase \"count\": // +rtype -fieldof hmap int\n\t\t\tv.Len, err = field.asInt()\n\t\tcase \"B\": // +rtype -fieldof hmap uint8\n\t\t\tvar b uint64\n\t\t\tb, err = field.asUint()\n\t\t\tit.numbuckets = 1 << b\n\t\t\tit.oldmask = (1 << (b - 1)) - 1\n\t\tcase \"buckets\": // +rtype -fieldof hmap unsafe.Pointer\n\t\t\tit.buckets = field.maybeDereference()\n\t\tcase \"oldbuckets\": // +rtype -fieldof hmap unsafe.Pointer\n\t\t\tit.oldbuckets = field.maybeDereference()\n\n\t\t// Swisstable map fields\n\t\tcase \"used\":\n\t\t\tvar n uint64\n\t\t\tn, err = field.asUint()\n\t\t\tv.Len = int64(n)\n\t\tcase \"dirPtr\":\n\t\t\titswiss.dirPtr = field\n\t\tcase \"dirLen\":\n\t\t\titswiss.dirLen, err = field.asInt()\n\t\t}\n\t\tif err != nil {\n\t\t\tv.Unreadable = err\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tif it.buckets == nil && itswiss.dirPtr != nil {\n\t\titswiss.loadTypes()\n\t\treturn itswiss\n\t}\n\n\tif it.buckets == nil || it.oldbuckets == nil || it.buckets.Kind != reflect.Struct || it.oldbuckets.Kind != reflect.Struct {\n\t\tv.Unreadable = errMapBucketsNotStruct\n\t\treturn nil\n\t}\n\n\tit.hashTophashEmptyOne = hashTophashEmptyZero\n\tit.hashMinTopHash = hashMinTopHashGo111\n\tif producer := v.bi.Producer(); producer != \"\" && goversion.ProducerAfterOrEqual(producer, 1, 12) {\n\t\tit.hashTophashEmptyOne = hashTophashEmptyOne\n\t\tit.hashMinTopHash = hashMinTopHashGo112\n\t}\n\n\treturn it\n}\n\n// Classic Maps ///////////////////////////////////////////////////////////////\n\ntype mapIteratorClassic struct {\n\tv          *Variable\n\tnumbuckets uint64\n\toldmask    uint64\n\tbuckets    *Variable\n\toldbuckets *Variable\n\tb          *Variable\n\tbidx       uint64\n\n\tkeyTypeIsPtr, elemTypeIsPtr bool\n\n\ttophashes *Variable\n\tkeys      *Variable\n\tvalues    *Variable\n\toverflow  *Variable\n\n\tmaxNumBuckets uint64 // maximum number of buckets to scan\n\n\tidx int64\n\n\thashTophashEmptyOne uint64 // Go 1.12 and later has two sentinel tophash values for an empty cell, this is the second one (the first one hashTophashEmptyZero, the same as Go 1.11 and earlier)\n\thashMinTopHash      uint64 // minimum value of tophash for a cell that isn't either evacuated or empty\n}\n\nvar (\n\terrMapBucketContentsNotArray        = errors.New(\"malformed map type: keys, values or tophash of a bucket is not an array\")\n\terrMapBucketContentsInconsistentLen = errors.New(\"malformed map type: inconsistent array length in bucket\")\n\terrMapBucketsNotStruct              = errors.New(\"malformed map type: buckets, oldbuckets or overflow field not a struct\")\n)\n\nfunc (it *mapIteratorClassic) nextBucket() bool {\n\tif it.overflow != nil && it.overflow.Addr > 0 {\n\t\tit.b = it.overflow\n\t} else {\n\t\tit.b = nil\n\n\t\tif it.maxNumBuckets > 0 && it.bidx >= it.maxNumBuckets {\n\t\t\treturn false\n\t\t}\n\n\t\tfor it.bidx < it.numbuckets {\n\t\t\tit.b = it.buckets.clone()\n\t\t\tit.b.Addr += uint64(it.buckets.DwarfType.Size()) * it.bidx\n\n\t\t\tif it.oldbuckets.Addr <= 0 {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// if oldbuckets is not nil we are iterating through a map that is in\n\t\t\t// the middle of a grow.\n\t\t\t// if the bucket we are looking at hasn't been filled in we iterate\n\t\t\t// instead through its corresponding \"oldbucket\" (i.e. the bucket the\n\t\t\t// elements of this bucket are coming from) but only if this is the first\n\t\t\t// of the two buckets being created from the same oldbucket (otherwise we\n\t\t\t// would print some keys twice)\n\n\t\t\toldbidx := it.bidx & it.oldmask\n\t\t\toldb := it.oldbuckets.clone()\n\t\t\toldb.Addr += uint64(it.oldbuckets.DwarfType.Size()) * oldbidx\n\n\t\t\tif it.mapEvacuated(oldb) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif oldbidx == it.bidx {\n\t\t\t\tit.b = oldb\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// oldbucket origin for current bucket has not been evacuated but we have already\n\t\t\t// iterated over it so we should just skip it\n\t\t\tit.b = nil\n\t\t\tit.bidx++\n\t\t}\n\n\t\tif it.b == nil {\n\t\t\treturn false\n\t\t}\n\t\tit.bidx++\n\t}\n\n\tif it.b.Addr <= 0 {\n\t\treturn false\n\t}\n\n\tit.b.mem = cacheMemory(it.b.mem, it.b.Addr, int(it.b.RealType.Size()))\n\n\tit.tophashes = nil\n\tit.keys = nil\n\tit.values = nil\n\tit.overflow = nil\n\n\tfor _, f := range it.b.DwarfType.(*godwarf.StructType).Field {\n\t\tfield, err := it.b.toField(f)\n\t\tif err != nil {\n\t\t\tit.v.Unreadable = err\n\t\t\treturn false\n\t\t}\n\t\tif field.Unreadable != nil {\n\t\t\tit.v.Unreadable = field.Unreadable\n\t\t\treturn false\n\t\t}\n\n\t\tswitch f.Name {\n\t\tcase \"tophash\": // +rtype -fieldof bmap [8]uint8\n\t\t\tit.tophashes = field\n\t\tcase \"keys\":\n\t\t\tit.keys = field\n\t\tcase \"values\":\n\t\t\tit.values = field\n\t\tcase \"overflow\":\n\t\t\tit.overflow = field.maybeDereference()\n\t\t}\n\t}\n\n\t// sanity checks\n\tif it.tophashes == nil || it.keys == nil || it.values == nil || it.overflow == nil {\n\t\tit.v.Unreadable = errors.New(\"malformed map type\")\n\t\treturn false\n\t}\n\n\tif it.tophashes.Kind != reflect.Array || it.keys.Kind != reflect.Array || it.values.Kind != reflect.Array {\n\t\tit.v.Unreadable = errMapBucketContentsNotArray\n\t\treturn false\n\t}\n\n\tif it.tophashes.Len != it.keys.Len {\n\t\tit.v.Unreadable = errMapBucketContentsInconsistentLen\n\t\treturn false\n\t}\n\n\tif it.values.fieldType.Size() > 0 && it.tophashes.Len != it.values.Len {\n\t\t// if the type of the value is zero-sized (i.e. struct{}) then the values\n\t\t// array's length is zero.\n\t\tit.v.Unreadable = errMapBucketContentsInconsistentLen\n\t\treturn false\n\t}\n\n\tif it.overflow.Kind != reflect.Struct {\n\t\tit.v.Unreadable = errMapBucketsNotStruct\n\t\treturn false\n\t}\n\n\treturn true\n}\n\nfunc (it *mapIteratorClassic) next() bool {\n\tfor {\n\t\tif it.b == nil || it.idx >= it.tophashes.Len {\n\t\t\tr := it.nextBucket()\n\t\t\tif !r {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tit.idx = 0\n\t\t}\n\t\ttophash, _ := it.tophashes.sliceAccess(int(it.idx))\n\t\th, err := tophash.asUint()\n\t\tif err != nil {\n\t\t\tit.v.Unreadable = fmt.Errorf(\"unreadable tophash: %v\", err)\n\t\t\treturn false\n\t\t}\n\t\tit.idx++\n\t\tif h != hashTophashEmptyZero && h != it.hashTophashEmptyOne {\n\t\t\treturn true\n\t\t}\n\t}\n}\n\nfunc (it *mapIteratorClassic) key() *Variable {\n\tk, _ := it.keys.sliceAccess(int(it.idx - 1))\n\tif k.Kind == reflect.Ptr && !it.keyTypeIsPtr {\n\t\tk = k.maybeDereference()\n\t}\n\treturn k\n}\n\nfunc (it *mapIteratorClassic) value() *Variable {\n\tif it.values.fieldType.Size() <= 0 {\n\t\treturn it.v.newVariable(\"\", it.values.Addr, it.values.fieldType, DereferenceMemory(it.v.mem))\n\t}\n\n\tv, _ := it.values.sliceAccess(int(it.idx - 1))\n\tif v.Kind == reflect.Ptr && !it.elemTypeIsPtr {\n\t\tv = v.maybeDereference()\n\t}\n\n\treturn v\n}\n\nfunc (it *mapIteratorClassic) mapEvacuated(b *Variable) bool {\n\tif b.Addr == 0 {\n\t\treturn true\n\t}\n\tfor _, f := range b.DwarfType.(*godwarf.StructType).Field {\n\t\tif f.Name != \"tophash\" {\n\t\t\tcontinue\n\t\t}\n\t\ttophashes, _ := b.toField(f)\n\t\ttophash0var, _ := tophashes.sliceAccess(0)\n\t\ttophash0, err := tophash0var.asUint()\n\t\tif err != nil {\n\t\t\treturn true\n\t\t}\n\t\t// TODO: this needs to be > hashTophashEmptyOne for go >= 1.12\n\t\treturn tophash0 > it.hashTophashEmptyOne && tophash0 < it.hashMinTopHash\n\t}\n\treturn true\n}\n\n// Swisstable Maps ///////////////////////////////////////////////////////////////\n\nconst (\n\tswissTableCtrlEmpty = 0b10000000 // +rtype go1.24 internal/runtime/maps.ctrlEmpty\n)\n\ntype mapIteratorSwiss struct {\n\tv            *Variable\n\tdirPtr       *Variable\n\tdirLen       int64\n\tmaxNumGroups uint64 // Maximum number of groups we will visit\n\n\tkeyTypeIsPtr, elemTypeIsPtr bool\n\ttableType, groupType        *godwarf.StructType\n\n\ttableFieldIndex, tableFieldGroups, groupsFieldLengthMask, groupsFieldData, groupFieldCtrl, groupFieldSlots, slotFieldKey, slotFieldElem *godwarf.StructField\n\n\tdirIdx int64\n\ttab    *swissTable\n\n\tgroupIdx uint64\n\tgroup    *swissGroup\n\n\tslotIdx uint32\n\n\tgroupCount uint64 // Total count of visited groups except for current table\n\n\tcurKey, curValue *Variable\n}\n\ntype swissTable struct {\n\tindex  int64\n\tgroups *Variable\n}\n\ntype swissGroup struct {\n\tslots *Variable\n\tctrls []byte\n}\n\nvar (\n\terrSwissTableCouldNotLoad  = errors.New(\"could not load one of the tables\")\n\terrSwissMapBadType         = errors.New(\"swiss table type does not have some required fields\")\n\terrSwissMapBadTableField   = errors.New(\"swiss table bad table field\")\n\terrSwissMapBadGroupTypeErr = errors.New(\"bad swiss map type, group type lacks some required fields\")\n\terrSwissTableNilGroups     = errors.New(\"bad swiss map, groups pointer is nil\")\n)\n\n// loadTypes determines the correct type for it.dirPtr:  the linker records\n// this type as **table but in reality it is either *[dirLen]*table for\n// large maps or *group for small maps, when it.dirLen == 0.\nfunc (it *mapIteratorSwiss) loadTypes() {\n\ttableptrptrtyp, ok := it.dirPtr.DwarfType.(*godwarf.PtrType)\n\tif !ok {\n\t\tit.v.Unreadable = errSwissMapBadTableField\n\t\treturn\n\t}\n\ttableptrtyp, ok := tableptrptrtyp.Type.(*godwarf.PtrType)\n\tif !ok {\n\t\tit.v.Unreadable = errSwissMapBadTableField\n\t\treturn\n\t}\n\tit.tableType, ok = tableptrtyp.Type.(*godwarf.StructType)\n\tif !ok {\n\t\tit.v.Unreadable = errSwissMapBadTableField\n\t\treturn\n\t}\n\tfor _, field := range it.tableType.Field {\n\t\tswitch field.Name {\n\t\tcase \"index\":\n\t\t\tit.tableFieldIndex = field\n\t\tcase \"groups\":\n\t\t\tit.tableFieldGroups = field\n\t\t\tgroupstyp, ok := field.Type.(*godwarf.StructType)\n\t\t\tif ok {\n\t\t\t\tfor _, field := range groupstyp.Field {\n\t\t\t\t\tswitch field.Name {\n\t\t\t\t\tcase \"data\":\n\t\t\t\t\t\tit.groupsFieldData = field\n\t\t\t\t\t\ttyp, ok := field.Type.(*godwarf.PtrType)\n\t\t\t\t\t\tif ok {\n\t\t\t\t\t\t\tit.groupType, _ = godwarf.ResolveTypedef(typ.Type).(*godwarf.StructType)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase \"lengthMask\":\n\t\t\t\t\t\tit.groupsFieldLengthMask = field\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif it.groupType == nil || it.tableFieldIndex == nil || it.tableFieldGroups == nil || it.groupsFieldLengthMask == nil {\n\t\tit.v.Unreadable = errSwissMapBadType\n\t\treturn\n\t}\n\tfor _, field := range it.groupType.Field {\n\t\tswitch field.Name {\n\t\tcase \"ctrl\":\n\t\t\tit.groupFieldCtrl = field\n\t\tcase \"slots\":\n\t\t\tit.groupFieldSlots = field\n\t\t}\n\t}\n\tif it.groupFieldCtrl == nil || it.groupFieldSlots == nil {\n\t\tit.v.Unreadable = errSwissMapBadGroupTypeErr\n\t\treturn\n\t}\n\n\tslotsType, ok := godwarf.ResolveTypedef(it.groupFieldSlots.Type).(*godwarf.ArrayType)\n\tif !ok {\n\t\tit.v.Unreadable = errSwissMapBadGroupTypeErr\n\t\treturn\n\t}\n\tslotType, ok := slotsType.Type.(*godwarf.StructType)\n\tif !ok {\n\t\tit.v.Unreadable = errSwissMapBadGroupTypeErr\n\t\treturn\n\t}\n\tfor _, field := range slotType.Field {\n\t\tswitch field.Name {\n\t\tcase \"key\":\n\t\t\tit.slotFieldKey = field\n\t\tcase \"elem\":\n\t\t\tit.slotFieldElem = field\n\t\t}\n\t}\n\tif it.slotFieldKey == nil || it.slotFieldElem == nil {\n\t\tit.v.Unreadable = errSwissMapBadGroupTypeErr\n\t\treturn\n\t}\n\n\tif it.dirLen <= 0 {\n\t\t// small maps, convert it.dirPtr to be of type *group, then dereference it\n\t\tit.dirPtr.DwarfType = pointerTo(fakeArrayType(1, it.groupType), it.v.bi.Arch)\n\t\tit.dirPtr.RealType = it.dirPtr.DwarfType\n\t\tit.dirPtr = it.dirPtr.maybeDereference()\n\t\tit.dirLen = 1\n\t\tit.tab = &swissTable{groups: it.dirPtr} // so that we don't try to load this later on\n\t\treturn\n\t}\n\n\t// normal map, convert it.dirPtr to be of type *[dirLen]*table, then dereference it\n\n\tit.dirPtr.DwarfType = pointerTo(fakeArrayType(uint64(it.dirLen), tableptrtyp), it.v.bi.Arch)\n\tit.dirPtr.RealType = it.dirPtr.DwarfType\n\tit.dirPtr = it.dirPtr.maybeDereference()\n}\n\n// derived from $GOROOT/src/internal/runtime/maps/table.go and $GOROOT/src/runtime/runtime-gdb.py\nfunc (it *mapIteratorSwiss) next() bool {\n\tif it.v.Unreadable != nil {\n\t\treturn false\n\t}\n\tfor it.dirIdx < it.dirLen {\n\t\tif it.tab == nil {\n\t\t\tit.loadCurrentTable()\n\t\t\tif it.tab == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif it.tab.index != it.dirIdx {\n\t\t\t\tit.nextTable()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tfor ; it.groupIdx < uint64(it.tab.groups.Len); it.nextGroup() {\n\t\t\tif it.maxNumGroups > 0 && it.groupIdx+it.groupCount >= it.maxNumGroups {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif it.group == nil {\n\t\t\t\tit.loadCurrentGroup()\n\t\t\t\tif it.group == nil {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ; it.slotIdx < uint32(it.group.slots.Len); it.slotIdx++ {\n\t\t\t\tif it.slotIsEmptyOrDeleted(it.slotIdx) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tcur, err := it.group.slots.sliceAccess(int(it.slotIdx))\n\t\t\t\tif err != nil {\n\t\t\t\t\tit.v.Unreadable = fmt.Errorf(\"error accessing swiss map in table %d, group %d, slot %d\", it.dirIdx, it.groupIdx, it.slotIdx)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tvar err1, err2 error\n\t\t\t\tit.curKey, err1 = cur.toField(it.slotFieldKey)\n\t\t\t\tit.curValue, err2 = cur.toField(it.slotFieldElem)\n\t\t\t\tif err1 != nil || err2 != nil {\n\t\t\t\t\tit.v.Unreadable = fmt.Errorf(\"error accessing swiss map slot: %v %v\", err1, err2)\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// If the type we expect is non-pointer but we read a pointer type it\n\t\t\t\t// means that the key (or the value) is stored indirectly into the map\n\t\t\t\t// because it is too big. We dereference it here so that the type of the\n\t\t\t\t// key (or value) matches the type on the map definition.\n\t\t\t\tif it.curKey.Kind == reflect.Ptr && !it.keyTypeIsPtr {\n\t\t\t\t\tit.curKey = it.curKey.maybeDereference()\n\t\t\t\t}\n\t\t\t\tif it.curValue.Kind == reflect.Ptr && !it.elemTypeIsPtr {\n\t\t\t\t\tit.curValue = it.curValue.maybeDereference()\n\t\t\t\t}\n\n\t\t\t\tit.slotIdx++\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tit.slotIdx = 0\n\t\t}\n\n\t\tit.groupCount += it.groupIdx\n\t\tit.groupIdx = 0\n\t\tit.group = nil\n\t\tit.nextTable()\n\t}\n\treturn false\n}\n\nfunc (it *mapIteratorSwiss) nextTable() {\n\tit.dirIdx++\n\tit.tab = nil\n}\n\nfunc (it *mapIteratorSwiss) nextGroup() {\n\tit.groupIdx++\n\tit.group = nil\n}\n\n// loadCurrentTable loads the table at index it.dirIdx into it.tab\nfunc (it *mapIteratorSwiss) loadCurrentTable() {\n\ttab, err := it.dirPtr.sliceAccess(int(it.dirIdx))\n\tif err != nil || tab == nil || tab.Unreadable != nil {\n\t\tit.v.Unreadable = errSwissTableCouldNotLoad\n\t\treturn\n\t}\n\n\ttab = tab.maybeDereference()\n\n\tr := &swissTable{}\n\n\tfield, err2 := tab.toField(it.tableFieldIndex)\n\tif err2 != nil {\n\t\tit.v.Unreadable = fmt.Errorf(\"could not load swiss table index field: %v\", err2)\n\t\treturn\n\t}\n\tr.index, err = field.asInt()\n\tif err != nil {\n\t\tit.v.Unreadable = fmt.Errorf(\"could not load swiss table index: %v\", err)\n\t\treturn\n\t}\n\n\tgroups, err2 := tab.toField(it.tableFieldGroups)\n\tif err2 != nil {\n\t\tit.v.Unreadable = fmt.Errorf(\"could not load swiss table groups field: %v\", err2)\n\t\treturn\n\t}\n\tr.groups, err2 = groups.toField(it.groupsFieldData)\n\tif err2 != nil {\n\t\tit.v.Unreadable = fmt.Errorf(\"could not load swiss table groups data: %v\", err2)\n\t\treturn\n\t}\n\n\tfield, err2 = groups.toField(it.groupsFieldLengthMask)\n\tif err2 != nil {\n\t\tit.v.Unreadable = fmt.Errorf(\"could not load swiss table groups lengthMask field: %v\", err2)\n\t\treturn\n\t}\n\tgroupsLengthMask, err := field.asUint()\n\tif err != nil {\n\t\tit.v.Unreadable = fmt.Errorf(\"could not load swiss table group lengthMask: %v\", err)\n\t\treturn\n\t}\n\n\t// convert the type of groups from *group to *[len]group so that it's easier to use\n\tr.groups.DwarfType = pointerTo(fakeArrayType(groupsLengthMask+1, it.groupType), it.v.bi.Arch)\n\tr.groups.RealType = r.groups.DwarfType\n\tr.groups = r.groups.maybeDereference()\n\n\tif r.groups.Addr == 0 {\n\t\tit.v.Unreadable = errSwissTableNilGroups\n\t\treturn\n\t}\n\n\tit.tab = r\n}\n\n// loadCurrentGroup loads the group at index it.groupIdx of it.tab into it.group\nfunc (it *mapIteratorSwiss) loadCurrentGroup() {\n\tgroup, err := it.tab.groups.sliceAccess(int(it.groupIdx))\n\tif err != nil {\n\t\tit.v.Unreadable = fmt.Errorf(\"could not load swiss map group: %v\", err)\n\t\treturn\n\t}\n\tg := &swissGroup{}\n\tvar err2 error\n\tg.slots, err2 = group.toField(it.groupFieldSlots)\n\tif err2 != nil {\n\t\tit.v.Unreadable = fmt.Errorf(\"could not load swiss map group slots: %v\", err2)\n\t\treturn\n\t}\n\tctrl, err2 := group.toField(it.groupFieldCtrl)\n\tif err2 != nil {\n\t\tit.v.Unreadable = fmt.Errorf(\"could not load swiss map group ctrl: %v\", err2)\n\t\treturn\n\t}\n\tg.ctrls = make([]byte, ctrl.DwarfType.Size())\n\t_, err = ctrl.mem.ReadMemory(g.ctrls, ctrl.Addr)\n\tif err != nil {\n\t\tit.v.Unreadable = err\n\t\treturn\n\t}\n\tit.group = g\n}\n\nfunc (it *mapIteratorSwiss) key() *Variable {\n\treturn it.curKey\n}\n\nfunc (it *mapIteratorSwiss) value() *Variable {\n\treturn it.curValue\n}\n\nfunc (it *mapIteratorSwiss) slotIsEmptyOrDeleted(k uint32) bool {\n\t// TODO: check that this hasn't changed after it's merged and the TODO is deleted\n\treturn it.group.ctrls[k]&swissTableCtrlEmpty == swissTableCtrlEmpty\n}\n"
  },
  {
    "path": "pkg/proc/mem.go",
    "content": "package proc\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n)\n\nconst cacheEnabled = true\n\n// MemoryReader is like io.ReaderAt, but the offset is a uint64 so that it\n// can address all of 64-bit memory.\n// Redundant with memoryReadWriter but more easily suited to working with\n// the standard io package.\ntype MemoryReader interface {\n\t// ReadMemory is just like io.ReaderAt.ReadAt.\n\tReadMemory(buf []byte, addr uint64) (n int, err error)\n}\n\n// MemoryReadWriter is an interface for reading or writing to\n// the targets memory. This allows us to read from the actual\n// target memory or possibly a cache.\ntype MemoryReadWriter interface {\n\tMemoryReader\n\tWriteMemory(addr uint64, data []byte) (written int, err error)\n}\n\ntype memCache struct {\n\tloaded    bool\n\tcacheAddr uint64\n\tcache     []byte\n\tmem       MemoryReadWriter\n}\n\nfunc (m *memCache) contains(addr uint64, size int) bool {\n\tend := addr + uint64(size)\n\tif end < addr {\n\t\t// overflow\n\t\treturn false\n\t}\n\treturn addr >= m.cacheAddr && end <= m.cacheAddr+uint64(len(m.cache))\n}\n\nfunc (m *memCache) load() error {\n\tif m.loaded {\n\t\treturn nil\n\t}\n\t_, err := m.mem.ReadMemory(m.cache, m.cacheAddr)\n\tif err != nil {\n\t\treturn err\n\t}\n\tm.loaded = true\n\treturn nil\n}\n\nfunc (m *memCache) ReadMemory(data []byte, addr uint64) (n int, err error) {\n\tif m.contains(addr, len(data)) {\n\t\tif !m.loaded {\n\t\t\terr := m.load()\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t}\n\t\tcopy(data, m.cache[addr-m.cacheAddr:])\n\t\treturn len(data), nil\n\t}\n\n\treturn m.mem.ReadMemory(data, addr)\n}\n\nfunc (m *memCache) WriteMemory(addr uint64, data []byte) (written int, err error) {\n\treturn m.mem.WriteMemory(addr, data)\n}\n\nfunc CreateLoadedCachedMemory(data []byte) MemoryReadWriter {\n\treturn &memCache{loaded: true, cacheAddr: fakeAddressUnresolv, cache: data, mem: nil}\n}\n\nfunc cacheMemory(mem MemoryReadWriter, addr uint64, size int) MemoryReadWriter {\n\tif !cacheEnabled {\n\t\treturn mem\n\t}\n\tif size <= 0 {\n\t\treturn mem\n\t}\n\tif addr+uint64(size) < addr {\n\t\t// overflow\n\t\treturn mem\n\t}\n\tswitch cacheMem := mem.(type) {\n\tcase *memCache:\n\t\tif cacheMem.contains(addr, size) {\n\t\t\treturn mem\n\t\t}\n\tcase *compositeMemory:\n\t\treturn mem\n\t}\n\treturn &memCache{false, addr, make([]byte, size), mem}\n}\n\n// compositeMemory represents a chunk of memory that is stored in CPU\n// registers or non-contiguously.\n//\n// When optimizations are enabled the compiler will store some variables\n// into registers and sometimes it will also store structs non-contiguously\n// with some fields stored into CPU registers and other fields stored in\n// memory.\ntype compositeMemory struct {\n\tbase    uint64 // base address for this composite memory\n\trealmem MemoryReadWriter\n\tarch    *Arch\n\tregs    op.DwarfRegisters\n\tpieces  []op.Piece\n\tdata    []byte\n}\n\n// CreateCompositeMemory created a new composite memory type using the provided MemoryReadWriter as the\n// underlying memory buffer.\nfunc CreateCompositeMemory(mem MemoryReadWriter, arch *Arch, regs op.DwarfRegisters, pieces []op.Piece, size int64) (*compositeMemory, error) {\n\t// This is basically a small wrapper to avoid having to change all callers\n\t// of newCompositeMemory since it existed first.\n\tcm, err := newCompositeMemory(mem, arch, regs, pieces, size)\n\tif cm != nil {\n\t\tcm.base = fakeAddressUnresolv\n\t}\n\treturn cm, err\n}\n\nfunc newCompositeMemory(mem MemoryReadWriter, arch *Arch, regs op.DwarfRegisters, pieces []op.Piece, size int64) (*compositeMemory, error) {\n\tcmem := &compositeMemory{realmem: mem, arch: arch, regs: regs, pieces: pieces, data: []byte{}}\n\tfor i := range pieces {\n\t\tpiece := &pieces[i]\n\t\tswitch piece.Kind {\n\t\tcase op.RegPiece:\n\t\t\treg := regs.Bytes(piece.Val)\n\t\t\tif piece.Size == 0 && i == len(pieces)-1 {\n\t\t\t\tpiece.Size = len(reg)\n\t\t\t}\n\t\t\tif piece.Size > len(reg) {\n\t\t\t\tif regs.FloatLoadError != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"could not read %d bytes from register %d (size: %d), also error loading floating point registers: %v\", piece.Size, piece.Val, len(reg), regs.FloatLoadError)\n\t\t\t\t}\n\t\t\t\treturn nil, fmt.Errorf(\"could not read %d bytes from register %d (size: %d)\", piece.Size, piece.Val, len(reg))\n\t\t\t}\n\t\t\tcmem.data = append(cmem.data, reg[:piece.Size]...)\n\t\tcase op.AddrPiece:\n\t\t\tbuf := make([]byte, piece.Size)\n\t\t\tmem.ReadMemory(buf, piece.Val)\n\t\t\tcmem.data = append(cmem.data, buf...)\n\t\tcase op.ImmPiece:\n\t\t\tbuf := piece.Bytes\n\t\t\tif buf == nil {\n\t\t\t\tsz := max(piece.Size, 8)\n\t\t\t\tif piece.Size == 0 && i == len(pieces)-1 {\n\t\t\t\t\tpiece.Size = arch.PtrSize() // DWARF doesn't say what this should be\n\t\t\t\t}\n\t\t\t\tbuf = make([]byte, sz)\n\t\t\t\tbinary.LittleEndian.PutUint64(buf, piece.Val)\n\t\t\t}\n\t\t\tcmem.data = append(cmem.data, buf[:piece.Size]...)\n\t\tdefault:\n\t\t\tpanic(\"unsupported piece kind\")\n\t\t}\n\t}\n\tpaddingBytes := int(size) - len(cmem.data)\n\tif paddingBytes > 0 && paddingBytes < arch.ptrSize {\n\t\tpadding := make([]byte, paddingBytes)\n\t\tcmem.data = append(cmem.data, padding...)\n\t}\n\treturn cmem, nil\n}\n\nfunc (mem *compositeMemory) ReadMemory(data []byte, addr uint64) (int, error) {\n\taddr -= mem.base\n\tif addr >= uint64(len(mem.data)) || addr+uint64(len(data)) > uint64(len(mem.data)) {\n\t\treturn 0, errors.New(\"read out of bounds\")\n\t}\n\tcopy(data, mem.data[addr:addr+uint64(len(data))])\n\treturn len(data), nil\n}\n\nfunc (mem *compositeMemory) WriteMemory(addr uint64, data []byte) (int, error) {\n\taddr -= mem.base\n\tif addr >= uint64(len(mem.data)) || addr+uint64(len(data)) > uint64(len(mem.data)) {\n\t\treturn 0, errors.New(\"write out of bounds\")\n\t}\n\tif mem.regs.ChangeFunc == nil {\n\t\tfor _, piece := range mem.pieces {\n\t\t\tif piece.Kind == op.RegPiece {\n\t\t\t\treturn 0, errors.New(\"can not write registers\")\n\t\t\t}\n\t\t}\n\t}\n\n\tcopy(mem.data[addr:], data)\n\n\tcurAddr := uint64(0)\n\tdonesz := 0\n\tfor _, piece := range mem.pieces {\n\t\tif curAddr < (addr+uint64(len(data))) && addr < (curAddr+uint64(piece.Size)) {\n\t\t\t// changed memory interval overlaps current piece\n\t\t\tpieceMem := mem.data[curAddr : curAddr+uint64(piece.Size)]\n\n\t\t\tswitch piece.Kind {\n\t\t\tcase op.RegPiece:\n\t\t\t\toldReg := mem.regs.Reg(piece.Val)\n\t\t\t\tnewReg := op.DwarfRegisterFromBytes(pieceMem)\n\t\t\t\terr := mem.regs.ChangeFunc(piece.Val, oldReg.Overwrite(newReg))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn donesz, err\n\t\t\t\t}\n\t\t\tcase op.AddrPiece:\n\t\t\t\tn, err := mem.realmem.WriteMemory(piece.Val, pieceMem)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn donesz + n, err\n\t\t\t\t}\n\t\t\tcase op.ImmPiece:\n\t\t\t\t// nothing to do\n\t\t\tdefault:\n\t\t\t\tpanic(\"unsupported piece kind\")\n\t\t\t}\n\t\t\tdonesz += piece.Size\n\t\t}\n\t\tcurAddr += uint64(piece.Size)\n\t}\n\n\treturn len(data), nil\n}\n\n// DereferenceMemory returns a MemoryReadWriter that can read and write the\n// memory pointed to by pointers in this memory.\n// Normally mem and mem.Dereference are the same object, they are different\n// only if this MemoryReadWriter is used to access memory outside of the\n// normal address space of the inferior process (such as data contained in\n// registers, or composite memory).\nfunc DereferenceMemory(mem MemoryReadWriter) MemoryReadWriter {\n\tswitch mem := mem.(type) {\n\tcase *compositeMemory:\n\t\treturn mem.realmem\n\t}\n\treturn mem\n}\n"
  },
  {
    "path": "pkg/proc/moduledata.go",
    "content": "package proc\n\n// ModuleData counterpart to runtime.moduleData\ntype ModuleData struct {\n\ttext, etext   uint64\n\ttypes, etypes uint64\n\ttypemapVar    *Variable\n}\n\nfunc LoadModuleData(bi *BinaryInfo, mem MemoryReadWriter) ([]ModuleData, error) {\n\t// +rtype -var firstmoduledata moduledata\n\t// +rtype -field moduledata.text uintptr\n\t// +rtype -field moduledata.types uintptr\n\n\tscope := globalScope(nil, bi, bi.Images[0], mem)\n\tvar md *Variable\n\tmd, err := scope.findGlobal(\"runtime\", \"firstmoduledata\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tr := []ModuleData{}\n\n\tfor md.Addr != 0 {\n\t\tconst (\n\t\t\ttypesField   = \"types\"\n\t\t\tetypesField  = \"etypes\"\n\t\t\ttextField    = \"text\"\n\t\t\tetextField   = \"etext\"\n\t\t\tnextField    = \"next\"\n\t\t\ttypemapField = \"typemap\"\n\t\t)\n\t\tvars := map[string]*Variable{}\n\n\t\tfor _, fieldName := range []string{typesField, etypesField, textField, etextField, nextField, typemapField} {\n\t\t\tvar err error\n\t\t\tvars[fieldName], err = md.structField(fieldName)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\tvar err error\n\n\t\ttouint := func(name string) (ret uint64) {\n\t\t\tif err == nil {\n\t\t\t\tvar n uint64\n\t\t\t\tn, err = vars[name].asUint()\n\t\t\t\tret = n\n\t\t\t}\n\t\t\treturn ret\n\t\t}\n\n\t\tr = append(r, ModuleData{\n\t\t\ttypes: touint(typesField), etypes: touint(etypesField),\n\t\t\ttext: touint(textField), etext: touint(etextField),\n\t\t\ttypemapVar: vars[typemapField],\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tmd = vars[nextField].maybeDereference()\n\t\tif md.Unreadable != nil {\n\t\t\treturn nil, md.Unreadable\n\t\t}\n\t}\n\n\treturn r, nil\n}\n\nfunc findModuleDataForType(mds []ModuleData, typeAddr uint64) *ModuleData {\n\tfor i := range mds {\n\t\tif typeAddr >= mds[i].types && typeAddr < mds[i].etypes {\n\t\t\treturn &mds[i]\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/native/cpuid/xsave_x86.go",
    "content": "//go:build amd64 || 386\n\npackage cpuid\n\nimport (\n\t\"sync\"\n)\n\nconst _XSTATE_MAX_KNOWN_SIZE = 2969\n\nvar xstateMaxSize int\nvar loadXstateMaxSizeOnce sync.Once\n\nfunc cpuid(axIn, cxIn uint32) (axOut, bxOut, cxOut, dxOut uint32)\n\n// AMD64XstateMaxSize returns the maximum size of the xstate area.\nfunc AMD64XstateMaxSize() int {\n\tloadXstateMaxSizeOnce.Do(func() {\n\t\t// See Intel 64 and IA-32 Architecture Software Developer's Manual, Vol. 1\n\t\t// chapter 13.2 and Vol. 2A CPUID instruction for a description of all the\n\t\t// magic constants.\n\n\t\t_, _, cx, _ := cpuid(0x01, 0x00)\n\n\t\tif cx&(1<<26) == 0 { // Vol. 2A, Table 3-10, XSAVE enabled bit check\n\t\t\t// XSAVE not supported by this processor\n\t\t\txstateMaxSize = _XSTATE_MAX_KNOWN_SIZE\n\t\t\treturn\n\t\t}\n\n\t\t_, _, cx, _ = cpuid(0x0d, 0x00) // processor extended state enumeration main leaf\n\t\txstateMaxSize = int(cx)\n\t})\n\treturn xstateMaxSize\n}\n\nvar xstateZMMHi256Offset int\nvar loadXstateZMMHi256OffsetOnce sync.Once\n\n// AMD64XstateZMMHi256Offset probes ZMM_Hi256 offset of the current CPU.  Beware\n// that core dumps may be generated from a different CPU.\nfunc AMD64XstateZMMHi256Offset() int {\n\tloadXstateZMMHi256OffsetOnce.Do(func() {\n\t\t// See Intel 64 and IA-32 Architecture Software Developer's Manual, Vol. 1\n\t\t// chapter 13.2 and Vol. 2A CPUID instruction for a description of all the\n\t\t// magic constants.\n\n\t\t_, _, cx, _ := cpuid(0x01, 0x00)\n\n\t\tif cx&(1<<26) == 0 { // Vol. 2A, Table 3-10, XSAVE enabled bit check\n\t\t\t// XSAVE not supported by this processor\n\t\t\txstateZMMHi256Offset = 0\n\t\t\treturn\n\t\t}\n\n\t\t_, bx, _, _ := cpuid(0x0d, 0x06) // ZMM_Hi256 is component #6\n\t\txstateZMMHi256Offset = int(bx)\n\t})\n\treturn xstateZMMHi256Offset\n}\n"
  },
  {
    "path": "pkg/proc/native/cpuid/xsave_x86.s",
    "content": "//go:build amd64 || 386\n\nTEXT ·cpuid(SB),$0-24\n\tMOVL axIn+0(FP), AX\n\tMOVL cxIn+4(FP), CX\n\tCPUID\n\tMOVL AX, axOut+8(FP)\n\tMOVL BX, bxOut+12(FP)\n\tMOVL CX, cxOut+16(FP)\n\tMOVL DX, dxOut+20(FP)\n\tRET\n\n"
  },
  {
    "path": "pkg/proc/native/dump_freebsd.go",
    "content": "package native\n\nimport (\n\t\"errors\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n/*\n#include <sys/types.h>\n#include <sys/user.h>\n#include <libutil.h>\n#include <stdlib.h>\n*/\nimport \"C\"\n\nfunc (p *nativeProcess) MemoryMap() ([]proc.MemoryMapEntry, error) {\n\tvar cnt C.int\n\tvmentries := C.kinfo_getvmmap(C.int(p.pid), &cnt)\n\tif vmentries == nil {\n\t\treturn nil, errors.New(\"kinfo_getvmmap call failed\")\n\t}\n\tdefer C.free(unsafe.Pointer(vmentries))\n\tr := make([]proc.MemoryMapEntry, 0, int(cnt))\n\tbase := uintptr(unsafe.Pointer(vmentries))\n\tsz := unsafe.Sizeof(C.struct_kinfo_vmentry{})\n\tfor i := 0; i < int(cnt); i++ {\n\t\tvmentry := (*C.struct_kinfo_vmentry)(unsafe.Pointer(base + sz*uintptr(i)))\n\t\tswitch vmentry.kve_type {\n\t\tcase C.KVME_TYPE_DEFAULT, C.KVME_TYPE_VNODE, C.KVME_TYPE_SWAP, C.KVME_TYPE_PHYS:\n\t\t\tr = append(r, proc.MemoryMapEntry{\n\t\t\t\tAddr: uint64(vmentry.kve_start),\n\t\t\t\tSize: uint64(vmentry.kve_end - vmentry.kve_start),\n\n\t\t\t\tRead:  vmentry.kve_protection&C.KVME_PROT_READ != 0,\n\t\t\t\tWrite: vmentry.kve_protection&C.KVME_PROT_WRITE != 0,\n\t\t\t\tExec:  vmentry.kve_protection&C.KVME_PROT_EXEC != 0,\n\t\t\t})\n\t\t}\n\t}\n\treturn r, nil\n}\n\nfunc (p *nativeProcess) DumpProcessNotes(notes []elfwriter.Note, threadDone func()) (threadsDone bool, notesout []elfwriter.Note, err error) {\n\treturn false, notes, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/dump_linux.go",
    "content": "package native\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\nfunc (p *nativeProcess) MemoryMap() ([]proc.MemoryMapEntry, error) {\n\tconst VmFlagsPrefix = \"VmFlags:\"\n\n\tsmapsbuf, err := os.ReadFile(fmt.Sprintf(\"/proc/%d/smaps\", p.pid))\n\tif err != nil {\n\t\t// Older versions of Linux don't have smaps but have maps which is in a similar format.\n\t\tsmapsbuf, err = os.ReadFile(fmt.Sprintf(\"/proc/%d/maps\", p.pid))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tsmapsLines := strings.Split(string(smapsbuf), \"\\n\")\n\tr := make([]proc.MemoryMapEntry, 0)\n\nsmapsLinesLoop:\n\tfor i := 0; i < len(smapsLines); {\n\t\tline := smapsLines[i]\n\t\tif line == \"\" {\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\t\tstart, end, perm, offset, dev, filename, err := parseSmapsHeaderLine(i+1, line)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tvar vmflags []string\n\t\tfor i++; i < len(smapsLines); i++ {\n\t\t\tline := smapsLines[i]\n\t\t\tif line == \"\" || line[0] < 'A' || line[0] > 'Z' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif strings.HasPrefix(line, VmFlagsPrefix) {\n\t\t\t\tvmflags = strings.Split(strings.TrimSpace(line[len(VmFlagsPrefix):]), \" \")\n\t\t\t}\n\t\t}\n\n\t\tfor i := range vmflags {\n\t\t\tswitch vmflags[i] {\n\t\t\tcase \"pf\":\n\t\t\t\t// pure PFN range, see https://github.com/go-delve/delve/issues/2630\n\t\t\t\tcontinue smapsLinesLoop\n\t\t\tcase \"dd\":\n\t\t\t\t// \"don't dump\"\n\t\t\t\tcontinue smapsLinesLoop\n\t\t\tcase \"io\":\n\t\t\t\tcontinue smapsLinesLoop\n\t\t\t}\n\t\t}\n\t\tif strings.HasPrefix(dev, \"00:\") {\n\t\t\tfilename = \"\"\n\t\t\toffset = 0\n\t\t}\n\n\t\tr = append(r, proc.MemoryMapEntry{\n\t\t\tAddr: start,\n\t\t\tSize: end - start,\n\n\t\t\tRead:  perm[0] == 'r',\n\t\t\tWrite: perm[1] == 'w',\n\t\t\tExec:  perm[2] == 'x',\n\n\t\t\tFilename: filename,\n\t\t\tOffset:   offset,\n\t\t})\n\n\t}\n\treturn r, nil\n}\n\nfunc parseSmapsHeaderLine(lineno int, in string) (start, end uint64, perm string, offset uint64, dev, filename string, err error) {\n\tfields := strings.SplitN(in, \" \", 6)\n\tif len(fields) != 6 {\n\t\terr = fmt.Errorf(\"malformed /proc/pid/maps on line %d: %q (wrong number of fields)\", lineno, in)\n\t\treturn\n\t}\n\n\tv := strings.Split(fields[0], \"-\")\n\tif len(v) != 2 {\n\t\terr = fmt.Errorf(\"malformed /proc/pid/maps on line %d: %q (bad first field)\", lineno, in)\n\t\treturn\n\t}\n\tstart, err = strconv.ParseUint(v[0], 16, 64)\n\tif err != nil {\n\t\terr = fmt.Errorf(\"malformed /proc/pid/maps on line %d: %q (%v)\", lineno, in, err)\n\t\treturn\n\t}\n\tend, err = strconv.ParseUint(v[1], 16, 64)\n\tif err != nil {\n\t\terr = fmt.Errorf(\"malformed /proc/pid/maps on line %d: %q (%v)\", lineno, in, err)\n\t\treturn\n\t}\n\n\tperm = fields[1]\n\tif len(perm) < 4 {\n\t\terr = fmt.Errorf(\"malformed /proc/pid/maps on line %d: %q (permissions column too short)\", lineno, in)\n\t\treturn\n\t}\n\n\toffset, err = strconv.ParseUint(fields[2], 16, 64)\n\tif err != nil {\n\t\terr = fmt.Errorf(\"malformed /proc/pid/maps on line %d: %q (%v)\", lineno, in, err)\n\t\treturn\n\t}\n\n\tdev = fields[3]\n\n\t// fields[4] -> inode\n\n\tfilename = strings.TrimLeft(fields[5], \" \")\n\treturn\n\n}\n"
  },
  {
    "path": "pkg/proc/native/dump_linux_amd64.go",
    "content": "package native\n\nimport (\n\t\"bytes\"\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n\t\"golang.org/x/sys/unix\"\n)\n\nconst _NT_AUXV elf.NType = 0x6\n\ntype linuxPrPsInfo struct {\n\tState                uint8\n\tSname                int8\n\tZomb                 uint8\n\tNice                 int8\n\t_                    [4]uint8\n\tFlag                 uint64\n\tUid, Gid             uint32\n\tPid, Ppid, Pgrp, Sid int32\n\tFname                [16]uint8\n\tArgs                 [80]uint8\n}\n\nfunc (p *nativeProcess) DumpProcessNotes(notes []elfwriter.Note, threadDone func()) (threadsDone bool, out []elfwriter.Note, err error) {\n\ttobytes := func(x any) []byte {\n\t\tout := new(bytes.Buffer)\n\t\t_ = binary.Write(out, binary.LittleEndian, x)\n\t\treturn out.Bytes()\n\t}\n\n\tprpsinfo := linuxPrPsInfo{\n\t\tPid: int32(p.pid),\n\t}\n\n\tfname := p.os.comm\n\tif len(fname) > len(prpsinfo.Fname)-1 {\n\t\tfname = fname[:len(prpsinfo.Fname)-1]\n\t}\n\tcopy(prpsinfo.Fname[:], fname)\n\tprpsinfo.Fname[len(fname)] = 0\n\n\tif cmdline, err := os.ReadFile(fmt.Sprintf(\"/proc/%d/cmdline\", p.pid)); err == nil {\n\t\tfor len(cmdline) > 0 && cmdline[len(cmdline)-1] == '\\n' {\n\t\t\tcmdline = cmdline[:len(cmdline)-1]\n\t\t}\n\t\tif zero := bytes.Index(cmdline, []byte{0}); zero >= 0 {\n\t\t\tcmdline = cmdline[zero+1:]\n\t\t}\n\t\tpath := p.BinInfo().Images[0].Path\n\t\tif abs, err := filepath.Abs(path); err == nil {\n\t\t\tpath = abs\n\t\t}\n\t\targs := make([]byte, 0, len(path)+len(cmdline)+1)\n\t\targs = append(args, []byte(path)...)\n\t\targs = append(args, 0)\n\t\targs = append(args, cmdline...)\n\t\tif len(args) > len(prpsinfo.Args)-1 {\n\t\t\targs = args[:len(prpsinfo.Args)-1]\n\t\t}\n\t\tcopy(prpsinfo.Args[:], args)\n\t\tprpsinfo.Args[len(args)] = 0\n\t}\n\tnotes = append(notes, elfwriter.Note{\n\t\tType: elf.NT_PRPSINFO,\n\t\tData: tobytes(prpsinfo),\n\t})\n\n\tauxvbuf, err := os.ReadFile(fmt.Sprintf(\"/proc/%d/auxv\", p.pid))\n\tif err == nil {\n\t\tnotes = append(notes, elfwriter.Note{\n\t\t\tType: _NT_AUXV,\n\t\t\tData: auxvbuf,\n\t\t})\n\t}\n\n\tfor _, th := range p.threads {\n\t\tregs, err := th.Registers()\n\t\tif err != nil {\n\t\t\treturn false, notes, err\n\t\t}\n\n\t\tregs, err = regs.Copy() // triggers floating point register load\n\t\tif err != nil {\n\t\t\treturn false, notes, err\n\t\t}\n\n\t\tnregs := regs.(*linutil.AMD64Registers)\n\n\t\tvar prstatus linuxPrStatusAMD64\n\t\tprstatus.Pid = int32(th.ID)\n\t\tprstatus.Ppid = int32(p.pid)\n\t\tprstatus.Pgrp = int32(p.pid)\n\t\tprstatus.Sid = int32(p.pid)\n\t\tprstatus.Reg = *(nregs.Regs)\n\t\tnotes = append(notes, elfwriter.Note{\n\t\t\tType: elf.NT_PRSTATUS,\n\t\t\tData: tobytes(prstatus),\n\t\t})\n\n\t\tvar xsave []byte\n\n\t\tif nregs.Fpregset != nil && nregs.Fpregset.Xsave != nil {\n\t\t\txsave = make([]byte, len(nregs.Fpregset.Xsave))\n\t\t\tcopy(xsave, nregs.Fpregset.Xsave)\n\t\t} else {\n\t\t\txsave = make([]byte, 512+64) // XSAVE header start + XSAVE header length\n\t\t}\n\n\t\t// Even if we have the XSAVE area on some versions of linux (or some CPU\n\t\t// models?) it won't contain the legacy x87 registers, so copy them over\n\t\t// in case we got them from PTRACE_GETFPREGS.\n\t\tbuf := new(bytes.Buffer)\n\t\tbinary.Write(buf, binary.LittleEndian, &nregs.Fpregset.AMD64PtraceFpRegs)\n\t\tcopy(xsave, buf.Bytes())\n\n\t\tnotes = append(notes, elfwriter.Note{\n\t\t\tType: _NT_X86_XSTATE,\n\t\t\tData: xsave,\n\t\t})\n\n\t\tthreadDone()\n\t}\n\n\treturn true, notes, nil\n}\n\ntype linuxPrStatusAMD64 struct {\n\tSiginfo                      linuxSiginfo\n\tCursig                       uint16\n\t_                            [2]uint8\n\tSigpend                      uint64\n\tSighold                      uint64\n\tPid, Ppid, Pgrp, Sid         int32\n\tUtime, Stime, CUtime, CStime unix.Timeval\n\tReg                          linutil.AMD64PtraceRegs\n\tFpvalid                      int64\n}\n\n// LinuxSiginfo is a copy of the\n// siginfo kernel struct.\ntype linuxSiginfo struct {\n\tSigno int32\n\tCode  int32\n\tErrno int32\n}\n"
  },
  {
    "path": "pkg/proc/native/dump_linux_other.go",
    "content": "//go:build linux && !amd64\n\npackage native\n\nimport (\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n)\n\nfunc (p *nativeProcess) DumpProcessNotes(notes []elfwriter.Note, threadDone func()) (threadsDone bool, out []elfwriter.Note, err error) {\n\treturn false, notes, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/dump_other.go",
    "content": "//go:build darwin || (windows && arm64)\n\npackage native\n\nimport (\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\nfunc (p *nativeProcess) MemoryMap() ([]proc.MemoryMapEntry, error) {\n\treturn nil, proc.ErrMemoryMapNotSupported\n}\n\nfunc (p *nativeProcess) DumpProcessNotes(notes []elfwriter.Note, threadDone func()) (threadsDone bool, notesout []elfwriter.Note, err error) {\n\treturn false, notes, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/dump_windows_amd64.go",
    "content": "package native\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/elfwriter\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\nfunc (p *nativeProcess) MemoryMap() ([]proc.MemoryMapEntry, error) {\n\tvar memoryMapError error\n\tr := []proc.MemoryMapEntry{}\n\n\tp.execPtraceFunc(func() {\n\t\tis64 := true\n\t\tif isWow64 := uint32(0); _IsWow64Process(p.os.hProcess, &isWow64) != 0 {\n\t\t\tif isWow64 != 0 {\n\t\t\t\tis64 = false\n\t\t\t}\n\t\t}\n\n\t\tmaxaddr := uint64(1 << 48) // windows64 uses only 48 bit addresses\n\t\tif !is64 {\n\t\t\tmaxaddr = uint64(^uint32(0))\n\t\t}\n\n\t\tvar meminfo _MEMORY_BASIC_INFORMATION\n\n\t\tfor addr := uint64(0); addr < maxaddr; addr += meminfo.RegionSize {\n\t\t\tsize := _VirtualQueryEx(p.os.hProcess, uintptr(addr), &meminfo, unsafe.Sizeof(meminfo))\n\t\t\tif size == 0 {\n\t\t\t\t// size == 0 is an error and the only error returned by VirtualQueryEx\n\t\t\t\t// is when addr is above the highest address allocated for the\n\t\t\t\t// application.\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif size != unsafe.Sizeof(meminfo) {\n\t\t\t\tmemoryMapError = fmt.Errorf(\"bad size returned by _VirtualQueryEx: %d (expected %d)\", size, unsafe.Sizeof(meminfo))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif addr+meminfo.RegionSize <= addr {\n\t\t\t\t// this shouldn't happen\n\t\t\t\tmemoryMapError = errors.New(\"VirtualQueryEx wrapped around the address space or stuck\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif meminfo.State == _MEM_FREE || meminfo.State == _MEM_RESERVE {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif meminfo.Protect&_PAGE_GUARD != 0 {\n\t\t\t\t// reading from this range will result in an error.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar mme proc.MemoryMapEntry\n\t\t\tmme.Addr = addr\n\t\t\tmme.Size = meminfo.RegionSize\n\n\t\t\tswitch meminfo.Protect & 0xff {\n\t\t\tcase _PAGE_EXECUTE:\n\t\t\t\tmme.Exec = true\n\t\t\tcase _PAGE_EXECUTE_READ:\n\t\t\t\tmme.Exec = true\n\t\t\t\tmme.Read = true\n\t\t\tcase _PAGE_EXECUTE_READWRITE:\n\t\t\t\tmme.Exec = true\n\t\t\t\tmme.Read = true\n\t\t\t\tmme.Write = true\n\t\t\tcase _PAGE_EXECUTE_WRITECOPY:\n\t\t\t\tmme.Exec = true\n\t\t\t\tmme.Read = true\n\t\t\tcase _PAGE_NOACCESS:\n\t\t\tcase _PAGE_READONLY:\n\t\t\t\tmme.Read = true\n\t\t\tcase _PAGE_READWRITE:\n\t\t\t\tmme.Read = true\n\t\t\t\tmme.Write = true\n\t\t\tcase _PAGE_WRITECOPY:\n\t\t\t\tmme.Read = true\n\t\t\t}\n\t\t\tr = append(r, mme)\n\t\t}\n\t})\n\n\treturn r, memoryMapError\n}\n\nfunc (p *nativeProcess) DumpProcessNotes(notes []elfwriter.Note, threadDone func()) (threadsDone bool, out []elfwriter.Note, err error) {\n\treturn false, notes, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/exc.h",
    "content": "#ifndef\t_exc_user_\n#define\t_exc_user_\n\n/* Module exc */\n\n#include <string.h>\n#include <mach/ndr.h>\n#include <mach/boolean.h>\n#include <mach/kern_return.h>\n#include <mach/notify.h>\n#include <mach/mach_types.h>\n#include <mach/message.h>\n#include <mach/mig_errors.h>\n#include <mach/port.h>\n\t\n/* BEGIN VOUCHER CODE */\n\n#ifndef KERNEL\n#if defined(__has_include)\n#if __has_include(<mach/mig_voucher_support.h>)\n#ifndef USING_VOUCHERS\n#define USING_VOUCHERS\n#endif\n#ifndef __VOUCHER_FORWARD_TYPE_DECLS__\n#define __VOUCHER_FORWARD_TYPE_DECLS__\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\textern boolean_t voucher_mach_msg_set(mach_msg_header_t *msg) __attribute__((weak_import));\n#ifdef __cplusplus\n}\n#endif\n#endif // __VOUCHER_FORWARD_TYPE_DECLS__\n#endif // __has_include(<mach/mach_voucher_types.h>)\n#endif // __has_include\n#endif // !KERNEL\n\t\n/* END VOUCHER CODE */\n\n\n#ifdef AUTOTEST\n#ifndef FUNCTION_PTR_T\n#define FUNCTION_PTR_T\ntypedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t);\ntypedef struct {\n        char            *name;\n        function_ptr_t  function;\n} function_table_entry;\ntypedef function_table_entry   *function_table_t;\n#endif /* FUNCTION_PTR_T */\n#endif /* AUTOTEST */\n\n#ifndef\texc_MSG_COUNT\n#define\texc_MSG_COUNT\t3\n#endif\t/* exc_MSG_COUNT */\n\n#include <mach/std_types.h>\n#include <mach/mig.h>\n#include <mach/mig.h>\n#include <mach/mach_types.h>\n\n#ifdef __BeforeMigUserHeader\n__BeforeMigUserHeader\n#endif /* __BeforeMigUserHeader */\n\n#include <sys/cdefs.h>\n__BEGIN_DECLS\n\n\n/* Routine exception_raise */\n#ifdef\tmig_external\nmig_external\n#else\nextern\n#endif\t/* mig_external */\nkern_return_t exception_raise\n(\n\tmach_port_t exception_port,\n\tmach_port_t thread,\n\tmach_port_t task,\n\texception_type_t exception,\n\texception_data_t code,\n\tmach_msg_type_number_t codeCnt\n);\n\n/* Routine exception_raise_state */\n#ifdef\tmig_external\nmig_external\n#else\nextern\n#endif\t/* mig_external */\nkern_return_t exception_raise_state\n(\n\tmach_port_t exception_port,\n\texception_type_t exception,\n\tconst exception_data_t code,\n\tmach_msg_type_number_t codeCnt,\n\tint *flavor,\n\tconst thread_state_t old_state,\n\tmach_msg_type_number_t old_stateCnt,\n\tthread_state_t new_state,\n\tmach_msg_type_number_t *new_stateCnt\n);\n\n/* Routine exception_raise_state_identity */\n#ifdef\tmig_external\nmig_external\n#else\nextern\n#endif\t/* mig_external */\nkern_return_t exception_raise_state_identity\n(\n\tmach_port_t exception_port,\n\tmach_port_t thread,\n\tmach_port_t task,\n\texception_type_t exception,\n\texception_data_t code,\n\tmach_msg_type_number_t codeCnt,\n\tint *flavor,\n\tthread_state_t old_state,\n\tmach_msg_type_number_t old_stateCnt,\n\tthread_state_t new_state,\n\tmach_msg_type_number_t *new_stateCnt\n);\n\n__END_DECLS\n\n/********************** Caution **************************/\n/* The following data types should be used to calculate  */\n/* maximum message sizes only. The actual message may be */\n/* smaller, and the position of the arguments within the */\n/* message layout may vary from what is presented here.  */\n/* For example, if any of the arguments are variable-    */\n/* sized, and less than the maximum is sent, the data    */\n/* will be packed tight in the actual message to reduce  */\n/* the presence of holes.                                */\n/********************** Caution **************************/\n\n/* typedefs for all requests */\n\n#ifndef __Request__exc_subsystem__defined\n#define __Request__exc_subsystem__defined\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\t/* start of the kernel processed data */\n\t\tmach_msg_body_t msgh_body;\n\t\tmach_msg_port_descriptor_t thread;\n\t\tmach_msg_port_descriptor_t task;\n\t\t/* end of the kernel processed data */\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tinteger_t code[2];\n\t} __Request__exception_raise_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tinteger_t code[2];\n\t\tint flavor;\n\t\tmach_msg_type_number_t old_stateCnt;\n\t\tnatural_t old_state[224];\n\t} __Request__exception_raise_state_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\t/* start of the kernel processed data */\n\t\tmach_msg_body_t msgh_body;\n\t\tmach_msg_port_descriptor_t thread;\n\t\tmach_msg_port_descriptor_t task;\n\t\t/* end of the kernel processed data */\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tinteger_t code[2];\n\t\tint flavor;\n\t\tmach_msg_type_number_t old_stateCnt;\n\t\tnatural_t old_state[224];\n\t} __Request__exception_raise_state_identity_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n#endif /* !__Request__exc_subsystem__defined */\n\n/* union of all requests */\n\n#ifndef __RequestUnion__exc_subsystem__defined\n#define __RequestUnion__exc_subsystem__defined\nunion __RequestUnion__exc_subsystem {\n\t__Request__exception_raise_t Request_exception_raise;\n\t__Request__exception_raise_state_t Request_exception_raise_state;\n\t__Request__exception_raise_state_identity_t Request_exception_raise_state_identity;\n};\n#endif /* !__RequestUnion__exc_subsystem__defined */\n/* typedefs for all replies */\n\n#ifndef __Reply__exc_subsystem__defined\n#define __Reply__exc_subsystem__defined\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t} __Reply__exception_raise_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t} __Reply__exception_raise_state_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t} __Reply__exception_raise_state_identity_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n#endif /* !__Reply__exc_subsystem__defined */\n\n/* union of all replies */\n\n#ifndef __ReplyUnion__exc_subsystem__defined\n#define __ReplyUnion__exc_subsystem__defined\nunion __ReplyUnion__exc_subsystem {\n\t__Reply__exception_raise_t Reply_exception_raise;\n\t__Reply__exception_raise_state_t Reply_exception_raise_state;\n\t__Reply__exception_raise_state_identity_t Reply_exception_raise_state_identity;\n};\n#endif /* !__RequestUnion__exc_subsystem__defined */\n\n#ifndef subsystem_to_name_map_exc\n#define subsystem_to_name_map_exc \\\n    { \"exception_raise\", 2401 },\\\n    { \"exception_raise_state\", 2402 },\\\n    { \"exception_raise_state_identity\", 2403 }\n#endif\n\n#ifdef __AfterMigUserHeader\n__AfterMigUserHeader\n#endif /* __AfterMigUserHeader */\n\n#endif\t /* _exc_user_ */\n"
  },
  {
    "path": "pkg/proc/native/exc_user_darwin.c",
    "content": "//+build darwin,macnative\n\n/*\n * IDENTIFICATION:\n * stub generated Sun Feb 22 20:54:31 2015\n * with a MiG generated by bootstrap_cmds-91\n * OPTIONS: \n */\n#define\t__MIG_check__Reply__exc_subsystem__ 1\n\n#include \"exc.h\"\n\n\n#ifndef\tmig_internal\n#define\tmig_internal\tstatic __inline__\n#endif\t/* mig_internal */\n\n#ifndef\tmig_external\n#define mig_external\n#endif\t/* mig_external */\n\n#if\t!defined(__MigTypeCheck) && defined(TypeCheck)\n#define\t__MigTypeCheck\t\tTypeCheck\t/* Legacy setting */\n#endif\t/* !defined(__MigTypeCheck) */\n\n#if\t!defined(__MigKernelSpecificCode) && defined(_MIG_KERNEL_SPECIFIC_CODE_)\n#define\t__MigKernelSpecificCode\t_MIG_KERNEL_SPECIFIC_CODE_\t/* Legacy setting */\n#endif\t/* !defined(__MigKernelSpecificCode) */\n\n#ifndef\tLimitCheck\n#define\tLimitCheck 0\n#endif\t/* LimitCheck */\n\n#ifndef\tmin\n#define\tmin(a,b)  ( ((a) < (b))? (a): (b) )\n#endif\t/* min */\n\n#if !defined(_WALIGN_)\n#define _WALIGN_(x) (((x) + 3) & ~3)\n#endif /* !defined(_WALIGN_) */\n\n#if !defined(_WALIGNSZ_)\n#define _WALIGNSZ_(x) _WALIGN_(sizeof(x))\n#endif /* !defined(_WALIGNSZ_) */\n\n#ifndef\tUseStaticTemplates\n#define\tUseStaticTemplates\t0\n#endif\t/* UseStaticTemplates */\n\n#ifndef\t__MachMsgErrorWithTimeout\n#define\t__MachMsgErrorWithTimeout(_R_) { \\\n\tswitch (_R_) { \\\n\tcase MACH_SEND_INVALID_DATA: \\\n\tcase MACH_SEND_INVALID_DEST: \\\n\tcase MACH_SEND_INVALID_HEADER: \\\n\t\tmig_put_reply_port(InP->Head.msgh_reply_port); \\\n\t\tbreak; \\\n\tcase MACH_SEND_TIMED_OUT: \\\n\tcase MACH_RCV_TIMED_OUT: \\\n\tdefault: \\\n\t\tmig_dealloc_reply_port(InP->Head.msgh_reply_port); \\\n\t} \\\n}\n#endif\t/* __MachMsgErrorWithTimeout */\n\n#ifndef\t__MachMsgErrorWithoutTimeout\n#define\t__MachMsgErrorWithoutTimeout(_R_) { \\\n\tswitch (_R_) { \\\n\tcase MACH_SEND_INVALID_DATA: \\\n\tcase MACH_SEND_INVALID_DEST: \\\n\tcase MACH_SEND_INVALID_HEADER: \\\n\t\tmig_put_reply_port(InP->Head.msgh_reply_port); \\\n\t\tbreak; \\\n\tdefault: \\\n\t\tmig_dealloc_reply_port(InP->Head.msgh_reply_port); \\\n\t} \\\n}\n#endif\t/* __MachMsgErrorWithoutTimeout */\n\n#ifndef\t__DeclareSendRpc\n#define\t__DeclareSendRpc(_NUM_, _NAME_)\n#endif\t/* __DeclareSendRpc */\n\n#ifndef\t__BeforeSendRpc\n#define\t__BeforeSendRpc(_NUM_, _NAME_)\n#endif\t/* __BeforeSendRpc */\n\n#ifndef\t__AfterSendRpc\n#define\t__AfterSendRpc(_NUM_, _NAME_)\n#endif\t/* __AfterSendRpc */\n\n#ifndef\t__DeclareSendSimple\n#define\t__DeclareSendSimple(_NUM_, _NAME_)\n#endif\t/* __DeclareSendSimple */\n\n#ifndef\t__BeforeSendSimple\n#define\t__BeforeSendSimple(_NUM_, _NAME_)\n#endif\t/* __BeforeSendSimple */\n\n#ifndef\t__AfterSendSimple\n#define\t__AfterSendSimple(_NUM_, _NAME_)\n#endif\t/* __AfterSendSimple */\n\n#define msgh_request_port\tmsgh_remote_port\n#define msgh_reply_port\t\tmsgh_local_port\n\n\n\n#if ( __MigTypeCheck )\n#if __MIG_check__Reply__exc_subsystem__\n#if !defined(__MIG_check__Reply__exception_raise_t__defined)\n#define __MIG_check__Reply__exception_raise_t__defined\n\nmig_internal kern_return_t __MIG_check__Reply__exception_raise_t(__Reply__exception_raise_t *Out0P)\n{\n\n\ttypedef __Reply__exception_raise_t __Reply;\n\tif (Out0P->Head.msgh_id != 2501) {\n\t    if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)\n\t\t{ return MIG_SERVER_DIED; }\n\t    else\n\t\t{ return MIG_REPLY_MISMATCH; }\n\t}\n\n#if\t__MigTypeCheck\n\tif ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||\n\t    (Out0P->Head.msgh_size != (mach_msg_size_t)sizeof(__Reply)))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\t{\n\t\treturn Out0P->RetCode;\n\t}\n}\n#endif /* !defined(__MIG_check__Reply__exception_raise_t__defined) */\n#endif /* __MIG_check__Reply__exc_subsystem__ */\n#endif /* ( __MigTypeCheck ) */\n\n\n/* Routine exception_raise */\nmig_external kern_return_t exception_raise\n(\n\tmach_port_t exception_port,\n\tmach_port_t thread,\n\tmach_port_t task,\n\texception_type_t exception,\n\texception_data_t code,\n\tmach_msg_type_number_t codeCnt\n)\n{\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\t/* start of the kernel processed data */\n\t\tmach_msg_body_t msgh_body;\n\t\tmach_msg_port_descriptor_t thread;\n\t\tmach_msg_port_descriptor_t task;\n\t\t/* end of the kernel processed data */\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tinteger_t code[2];\n\t} Request;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tmach_msg_trailer_t trailer;\n\t} Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t} __Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\t/*\n\t * typedef struct {\n\t * \tmach_msg_header_t Head;\n\t * \tNDR_record_t NDR;\n\t * \tkern_return_t RetCode;\n\t * } mig_reply_error_t;\n\t */\n\n\tunion {\n\t\tRequest In;\n\t\tReply Out;\n\t} Mess;\n\n\tRequest *InP = &Mess.In;\n\tReply *Out0P = &Mess.Out;\n\n\tmach_msg_return_t msg_result;\n\tunsigned int msgh_size;\n\n#ifdef\t__MIG_check__Reply__exception_raise_t__defined\n\tkern_return_t check_result;\n#endif\t/* __MIG_check__Reply__exception_raise_t__defined */\n\n\t__DeclareSendRpc(2401, \"exception_raise\")\n\n#if\tUseStaticTemplates\n\tconst static mach_msg_port_descriptor_t threadTemplate = {\n\t\t/* name = */\t\tMACH_PORT_NULL,\n\t\t/* pad1 = */\t\t0,\n\t\t/* pad2 = */\t\t0,\n\t\t/* disp = */\t\t19,\n\t\t/* type = */\t\tMACH_MSG_PORT_DESCRIPTOR,\n\t};\n#endif\t/* UseStaticTemplates */\n\n#if\tUseStaticTemplates\n\tconst static mach_msg_port_descriptor_t taskTemplate = {\n\t\t/* name = */\t\tMACH_PORT_NULL,\n\t\t/* pad1 = */\t\t0,\n\t\t/* pad2 = */\t\t0,\n\t\t/* disp = */\t\t19,\n\t\t/* type = */\t\tMACH_MSG_PORT_DESCRIPTOR,\n\t};\n#endif\t/* UseStaticTemplates */\n\n\tInP->msgh_body.msgh_descriptor_count = 2;\n#if\tUseStaticTemplates\n\tInP->thread = threadTemplate;\n\tInP->thread.name = thread;\n#else\t/* UseStaticTemplates */\n\tInP->thread.name = thread;\n\tInP->thread.disposition = 19;\n\tInP->thread.type = MACH_MSG_PORT_DESCRIPTOR;\n#endif\t/* UseStaticTemplates */\n\n#if\tUseStaticTemplates\n\tInP->task = taskTemplate;\n\tInP->task.name = task;\n#else\t/* UseStaticTemplates */\n\tInP->task.name = task;\n\tInP->task.disposition = 19;\n\tInP->task.type = MACH_MSG_PORT_DESCRIPTOR;\n#endif\t/* UseStaticTemplates */\n\n\tInP->NDR = NDR_record;\n\n\tInP->exception = exception;\n\n\tif (codeCnt > 2) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->code, (const char *) code, 4 * codeCnt);\n\n\tInP->codeCnt = codeCnt;\n\n\tmsgh_size = (mach_msg_size_t)(sizeof(Request) - 8) + ((4 * codeCnt));\n\tInP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX|\n\t\tMACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);\n\t/* msgh_size passed as argument */\n\tInP->Head.msgh_request_port = exception_port;\n\tInP->Head.msgh_reply_port = mig_get_reply_port();\n\tInP->Head.msgh_id = 2401;\n\t\n/* BEGIN VOUCHER CODE */\n\n#ifdef USING_VOUCHERS\n\tif (voucher_mach_msg_set != NULL) {\n\t\tvoucher_mach_msg_set(&InP->Head);\n\t}\n#endif // USING_VOUCHERS\n\t\n/* END VOUCHER CODE */\n\n\t__BeforeSendRpc(2401, \"exception_raise\")\n\tmsg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);\n\t__AfterSendRpc(2401, \"exception_raise\")\n\tif (msg_result != MACH_MSG_SUCCESS) {\n\t\t__MachMsgErrorWithoutTimeout(msg_result);\n\t\t{ return msg_result; }\n\t}\n\n\n#if\tdefined(__MIG_check__Reply__exception_raise_t__defined)\n\tcheck_result = __MIG_check__Reply__exception_raise_t((__Reply__exception_raise_t *)Out0P);\n\tif (check_result != MACH_MSG_SUCCESS)\n\t\t{ return check_result; }\n#endif\t/* defined(__MIG_check__Reply__exception_raise_t__defined) */\n\n\treturn KERN_SUCCESS;\n}\n\n#if ( __MigTypeCheck )\n#if __MIG_check__Reply__exc_subsystem__\n#if !defined(__MIG_check__Reply__exception_raise_state_t__defined)\n#define __MIG_check__Reply__exception_raise_state_t__defined\n\nmig_internal kern_return_t __MIG_check__Reply__exception_raise_state_t(__Reply__exception_raise_state_t *Out0P)\n{\n\n\ttypedef __Reply__exception_raise_state_t __Reply;\n#if\t__MigTypeCheck\n\tunsigned int msgh_size;\n#endif\t/* __MigTypeCheck */\n\n\tif (Out0P->Head.msgh_id != 2502) {\n\t    if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)\n\t\t{ return MIG_SERVER_DIED; }\n\t    else\n\t\t{ return MIG_REPLY_MISMATCH; }\n\t}\n\n#if\t__MigTypeCheck\n\tmsgh_size = Out0P->Head.msgh_size;\n\n\tif ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||\n\t    ((msgh_size > (mach_msg_size_t)sizeof(__Reply) || msgh_size < (mach_msg_size_t)(sizeof(__Reply) - 896)) &&\n\t     (msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) ||\n\t      Out0P->RetCode == KERN_SUCCESS)))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\tif (Out0P->RetCode != KERN_SUCCESS) {\n\t\treturn ((mig_reply_error_t *)Out0P)->RetCode;\n\t}\n\n#if\t__MigTypeCheck\n\tif ( Out0P->new_stateCnt > 224 )\n\t\treturn MIG_TYPE_ERROR;\n\tif (((msgh_size - (mach_msg_size_t)(sizeof(__Reply) - 896)) / 4< Out0P->new_stateCnt) ||\n\t    (msgh_size != (mach_msg_size_t)(sizeof(__Reply) - 896) + Out0P->new_stateCnt * 4))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\treturn MACH_MSG_SUCCESS;\n}\n#endif /* !defined(__MIG_check__Reply__exception_raise_state_t__defined) */\n#endif /* __MIG_check__Reply__exc_subsystem__ */\n#endif /* ( __MigTypeCheck ) */\n\n\n/* Routine exception_raise_state */\nmig_external kern_return_t exception_raise_state\n(\n\tmach_port_t exception_port,\n\texception_type_t exception,\n\tconst exception_data_t code,\n\tmach_msg_type_number_t codeCnt,\n\tint *flavor,\n\tconst thread_state_t old_state,\n\tmach_msg_type_number_t old_stateCnt,\n\tthread_state_t new_state,\n\tmach_msg_type_number_t *new_stateCnt\n)\n{\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tinteger_t code[2];\n\t\tint flavor;\n\t\tmach_msg_type_number_t old_stateCnt;\n\t\tnatural_t old_state[224];\n\t} Request;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t\tmach_msg_trailer_t trailer;\n\t} Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t} __Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\t/*\n\t * typedef struct {\n\t * \tmach_msg_header_t Head;\n\t * \tNDR_record_t NDR;\n\t * \tkern_return_t RetCode;\n\t * } mig_reply_error_t;\n\t */\n\n\tunion {\n\t\tRequest In;\n\t\tReply Out;\n\t} Mess;\n\n\tRequest *InP = &Mess.In;\n\tReply *Out0P = &Mess.Out;\n\n\tmach_msg_return_t msg_result;\n\tunsigned int msgh_size;\n\tunsigned int msgh_size_delta;\n\n\n#ifdef\t__MIG_check__Reply__exception_raise_state_t__defined\n\tkern_return_t check_result;\n#endif\t/* __MIG_check__Reply__exception_raise_state_t__defined */\n\n\t__DeclareSendRpc(2402, \"exception_raise_state\")\n\n\tInP->NDR = NDR_record;\n\n\tInP->exception = exception;\n\n\tif (codeCnt > 2) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->code, (const char *) code, 4 * codeCnt);\n\n\tInP->codeCnt = codeCnt;\n\n\tmsgh_size_delta = (4 * codeCnt);\n\tmsgh_size = (mach_msg_size_t)(sizeof(Request) - 904) + msgh_size_delta;\n\tInP = (Request *) ((pointer_t) InP + msgh_size_delta - 8);\n\n\tInP->flavor = *flavor;\n\n\tif (old_stateCnt > 224) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->old_state, (const char *) old_state, 4 * old_stateCnt);\n\n\tInP->old_stateCnt = old_stateCnt;\n\n\tmsgh_size += (4 * old_stateCnt);\n\tInP = &Mess.In;\n\tInP->Head.msgh_bits =\n\t\tMACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);\n\t/* msgh_size passed as argument */\n\tInP->Head.msgh_request_port = exception_port;\n\tInP->Head.msgh_reply_port = mig_get_reply_port();\n\tInP->Head.msgh_id = 2402;\n\t\n/* BEGIN VOUCHER CODE */\n\n#ifdef USING_VOUCHERS\n\tif (voucher_mach_msg_set != NULL) {\n\t\tvoucher_mach_msg_set(&InP->Head);\n\t}\n#endif // USING_VOUCHERS\n\t\n/* END VOUCHER CODE */\n\n\t__BeforeSendRpc(2402, \"exception_raise_state\")\n\tmsg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);\n\t__AfterSendRpc(2402, \"exception_raise_state\")\n\tif (msg_result != MACH_MSG_SUCCESS) {\n\t\t__MachMsgErrorWithoutTimeout(msg_result);\n\t\t{ return msg_result; }\n\t}\n\n\n#if\tdefined(__MIG_check__Reply__exception_raise_state_t__defined)\n\tcheck_result = __MIG_check__Reply__exception_raise_state_t((__Reply__exception_raise_state_t *)Out0P);\n\tif (check_result != MACH_MSG_SUCCESS)\n\t\t{ return check_result; }\n#endif\t/* defined(__MIG_check__Reply__exception_raise_state_t__defined) */\n\n\t*flavor = Out0P->flavor;\n\n\tif (Out0P->new_stateCnt > 224) {\n\t\t(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 *  224);\n\t\t*new_stateCnt = Out0P->new_stateCnt;\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * Out0P->new_stateCnt);\n\n\t*new_stateCnt = Out0P->new_stateCnt;\n\n\treturn KERN_SUCCESS;\n}\n\n#if ( __MigTypeCheck )\n#if __MIG_check__Reply__exc_subsystem__\n#if !defined(__MIG_check__Reply__exception_raise_state_identity_t__defined)\n#define __MIG_check__Reply__exception_raise_state_identity_t__defined\n\nmig_internal kern_return_t __MIG_check__Reply__exception_raise_state_identity_t(__Reply__exception_raise_state_identity_t *Out0P)\n{\n\n\ttypedef __Reply__exception_raise_state_identity_t __Reply;\n#if\t__MigTypeCheck\n\tunsigned int msgh_size;\n#endif\t/* __MigTypeCheck */\n\n\tif (Out0P->Head.msgh_id != 2503) {\n\t    if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)\n\t\t{ return MIG_SERVER_DIED; }\n\t    else\n\t\t{ return MIG_REPLY_MISMATCH; }\n\t}\n\n#if\t__MigTypeCheck\n\tmsgh_size = Out0P->Head.msgh_size;\n\n\tif ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||\n\t    ((msgh_size > (mach_msg_size_t)sizeof(__Reply) || msgh_size < (mach_msg_size_t)(sizeof(__Reply) - 896)) &&\n\t     (msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) ||\n\t      Out0P->RetCode == KERN_SUCCESS)))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\tif (Out0P->RetCode != KERN_SUCCESS) {\n\t\treturn ((mig_reply_error_t *)Out0P)->RetCode;\n\t}\n\n#if\t__MigTypeCheck\n\tif ( Out0P->new_stateCnt > 224 )\n\t\treturn MIG_TYPE_ERROR;\n\tif (((msgh_size - (mach_msg_size_t)(sizeof(__Reply) - 896)) / 4< Out0P->new_stateCnt) ||\n\t    (msgh_size != (mach_msg_size_t)(sizeof(__Reply) - 896) + Out0P->new_stateCnt * 4))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\treturn MACH_MSG_SUCCESS;\n}\n#endif /* !defined(__MIG_check__Reply__exception_raise_state_identity_t__defined) */\n#endif /* __MIG_check__Reply__exc_subsystem__ */\n#endif /* ( __MigTypeCheck ) */\n\n\n/* Routine exception_raise_state_identity */\nmig_external kern_return_t exception_raise_state_identity\n(\n\tmach_port_t exception_port,\n\tmach_port_t thread,\n\tmach_port_t task,\n\texception_type_t exception,\n\texception_data_t code,\n\tmach_msg_type_number_t codeCnt,\n\tint *flavor,\n\tthread_state_t old_state,\n\tmach_msg_type_number_t old_stateCnt,\n\tthread_state_t new_state,\n\tmach_msg_type_number_t *new_stateCnt\n)\n{\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\t/* start of the kernel processed data */\n\t\tmach_msg_body_t msgh_body;\n\t\tmach_msg_port_descriptor_t thread;\n\t\tmach_msg_port_descriptor_t task;\n\t\t/* end of the kernel processed data */\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tinteger_t code[2];\n\t\tint flavor;\n\t\tmach_msg_type_number_t old_stateCnt;\n\t\tnatural_t old_state[224];\n\t} Request;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t\tmach_msg_trailer_t trailer;\n\t} Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t} __Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\t/*\n\t * typedef struct {\n\t * \tmach_msg_header_t Head;\n\t * \tNDR_record_t NDR;\n\t * \tkern_return_t RetCode;\n\t * } mig_reply_error_t;\n\t */\n\n\tunion {\n\t\tRequest In;\n\t\tReply Out;\n\t} Mess;\n\n\tRequest *InP = &Mess.In;\n\tReply *Out0P = &Mess.Out;\n\n\tmach_msg_return_t msg_result;\n\tunsigned int msgh_size;\n\tunsigned int msgh_size_delta;\n\n\n#ifdef\t__MIG_check__Reply__exception_raise_state_identity_t__defined\n\tkern_return_t check_result;\n#endif\t/* __MIG_check__Reply__exception_raise_state_identity_t__defined */\n\n\t__DeclareSendRpc(2403, \"exception_raise_state_identity\")\n\n#if\tUseStaticTemplates\n\tconst static mach_msg_port_descriptor_t threadTemplate = {\n\t\t/* name = */\t\tMACH_PORT_NULL,\n\t\t/* pad1 = */\t\t0,\n\t\t/* pad2 = */\t\t0,\n\t\t/* disp = */\t\t19,\n\t\t/* type = */\t\tMACH_MSG_PORT_DESCRIPTOR,\n\t};\n#endif\t/* UseStaticTemplates */\n\n#if\tUseStaticTemplates\n\tconst static mach_msg_port_descriptor_t taskTemplate = {\n\t\t/* name = */\t\tMACH_PORT_NULL,\n\t\t/* pad1 = */\t\t0,\n\t\t/* pad2 = */\t\t0,\n\t\t/* disp = */\t\t19,\n\t\t/* type = */\t\tMACH_MSG_PORT_DESCRIPTOR,\n\t};\n#endif\t/* UseStaticTemplates */\n\n\tInP->msgh_body.msgh_descriptor_count = 2;\n#if\tUseStaticTemplates\n\tInP->thread = threadTemplate;\n\tInP->thread.name = thread;\n#else\t/* UseStaticTemplates */\n\tInP->thread.name = thread;\n\tInP->thread.disposition = 19;\n\tInP->thread.type = MACH_MSG_PORT_DESCRIPTOR;\n#endif\t/* UseStaticTemplates */\n\n#if\tUseStaticTemplates\n\tInP->task = taskTemplate;\n\tInP->task.name = task;\n#else\t/* UseStaticTemplates */\n\tInP->task.name = task;\n\tInP->task.disposition = 19;\n\tInP->task.type = MACH_MSG_PORT_DESCRIPTOR;\n#endif\t/* UseStaticTemplates */\n\n\tInP->NDR = NDR_record;\n\n\tInP->exception = exception;\n\n\tif (codeCnt > 2) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->code, (const char *) code, 4 * codeCnt);\n\n\tInP->codeCnt = codeCnt;\n\n\tmsgh_size_delta = (4 * codeCnt);\n\tmsgh_size = (mach_msg_size_t)(sizeof(Request) - 904) + msgh_size_delta;\n\tInP = (Request *) ((pointer_t) InP + msgh_size_delta - 8);\n\n\tInP->flavor = *flavor;\n\n\tif (old_stateCnt > 224) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->old_state, (const char *) old_state, 4 * old_stateCnt);\n\n\tInP->old_stateCnt = old_stateCnt;\n\n\tmsgh_size += (4 * old_stateCnt);\n\tInP = &Mess.In;\n\tInP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX|\n\t\tMACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);\n\t/* msgh_size passed as argument */\n\tInP->Head.msgh_request_port = exception_port;\n\tInP->Head.msgh_reply_port = mig_get_reply_port();\n\tInP->Head.msgh_id = 2403;\n\t\n/* BEGIN VOUCHER CODE */\n\n#ifdef USING_VOUCHERS\n\tif (voucher_mach_msg_set != NULL) {\n\t\tvoucher_mach_msg_set(&InP->Head);\n\t}\n#endif // USING_VOUCHERS\n\t\n/* END VOUCHER CODE */\n\n\t__BeforeSendRpc(2403, \"exception_raise_state_identity\")\n\tmsg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);\n\t__AfterSendRpc(2403, \"exception_raise_state_identity\")\n\tif (msg_result != MACH_MSG_SUCCESS) {\n\t\t__MachMsgErrorWithoutTimeout(msg_result);\n\t\t{ return msg_result; }\n\t}\n\n\n#if\tdefined(__MIG_check__Reply__exception_raise_state_identity_t__defined)\n\tcheck_result = __MIG_check__Reply__exception_raise_state_identity_t((__Reply__exception_raise_state_identity_t *)Out0P);\n\tif (check_result != MACH_MSG_SUCCESS)\n\t\t{ return check_result; }\n#endif\t/* defined(__MIG_check__Reply__exception_raise_state_identity_t__defined) */\n\n\t*flavor = Out0P->flavor;\n\n\tif (Out0P->new_stateCnt > 224) {\n\t\t(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 *  224);\n\t\t*new_stateCnt = Out0P->new_stateCnt;\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * Out0P->new_stateCnt);\n\n\t*new_stateCnt = Out0P->new_stateCnt;\n\n\treturn KERN_SUCCESS;\n}\n"
  },
  {
    "path": "pkg/proc/native/exec_darwin.c",
    "content": "//+build darwin,macnative\n\n#include \"exec_darwin.h\"\n#include \"stdio.h\"\n\nextern char** environ;\n\nint\nclose_exec_pipe(int fd[2]) {\n\tif (pipe(fd) < 0) return -1;\n\tif (fcntl(fd[0], F_SETFD, FD_CLOEXEC) < 0) return -1;\n\tif (fcntl(fd[1], F_SETFD, FD_CLOEXEC) < 0) return -1;\n\treturn 0;\n}\n\nint\nfork_exec(char *argv0, char **argv, int size,\n\t\tchar *wd,\n\t\ttask_t *task,\n\t\tmach_port_t *port_set,\n\t\tmach_port_t *exception_port,\n\t\tmach_port_t *notification_port)\n{\n\t// Since we're using mach exceptions instead of signals,\n\t// we need to coordinate between parent and child via pipes\n\t// to ensure that the parent has set the exception ports on\n\t// the child task before it execs.\n\tint fd[2];\n\tif (close_exec_pipe(fd) < 0) return -1;\n\n\t// Create another pipe to signal the parent on exec.\n\tint efd[2];\n\tif (close_exec_pipe(efd) < 0) return -1;\n\n\tkern_return_t kret;\n\tpid_t pid = fork();\n\tif (pid > 0) {\n\t\t// In parent.\n\t\tclose(fd[0]);\n\t\tclose(efd[1]);\n\t\tkret = acquire_mach_task(pid, task, port_set, exception_port, notification_port);\n\t\tif (kret != KERN_SUCCESS) return -1;\n\n\t\tchar msg = 'c';\n\t\twrite(fd[1], &msg, 1);\n\t\tclose(fd[1]);\n\n\t\tchar w;\n\t\tsize_t n = read(efd[0], &w, 1);\n\t\tclose(efd[0]);\n\t\tif (n != 0) {\n\t\t\t// Child died, reap it.\n\t\t\twaitpid(pid, NULL, 0);\n\t\t\treturn -1;\n\t\t}\n\t\treturn pid;\n\t}\n\n\t// Fork succeeded, we are in the child.\n\tint pret, cret;\n\tchar sig;\n\n\tclose(fd[1]);\n\tread(fd[0], &sig, 1);\n\tclose(fd[0]);\n\n\t// Create a new process group.\n\tif (setpgid(0, 0) < 0) {\n\t\tperror(\"setpgid\");\n\t\texit(1);\n\t}\n\n\t// Set errno to zero before a call to ptrace.\n\t// It is documented that ptrace can return -1 even\n\t// for successful calls.\n\terrno = 0;\n\tpret = ptrace(PT_TRACE_ME, 0, 0, 0);\n\tif (pret != 0 && errno != 0) {\n\t\tperror(\"ptrace\");\n\t\texit(1);\n\t}\n\n\t// Change working directory if wd is not empty.\n\tif (wd && wd[0]) {\n\t\terrno = 0;\n\t\tcret = chdir(wd);\n\t\tif (cret != 0 && errno != 0) {\n\t\t\tchar *error_msg;\n\t\t\tasprintf(&error_msg, \"%s '%s'\", \"chdir\", wd);\n\t\t\tperror(error_msg);\n\t\t\texit(1);\n\t\t}\n\t}\n\n\terrno = 0;\n\tpret = ptrace(PT_SIGEXC, 0, 0, 0);\n\tif (pret != 0 && errno != 0) {\n\t\tperror(\"ptrace\");\n\t\texit(1);\n\t}\n\n\tsleep(1);\n\n\t// Create the child process.\n\texecve(argv0, argv, environ);\n\n\t// We should never reach here, but if we did something went wrong.\n\t// Write a message to parent to alert that exec failed.\n\tchar msg = 'd';\n\twrite(efd[1], &msg, 1);\n\tclose(efd[1]);\n\n\texit(1);\n}\n"
  },
  {
    "path": "pkg/proc/native/exec_darwin.h",
    "content": "//+build darwin,macnative\n\n#include \"proc_darwin.h\"\n\n#include <unistd.h>\n#include <sys/ptrace.h>\n#include <errno.h>\n#include <stdlib.h>\n#include <fcntl.h>\n\nint\nfork_exec(char *, char **, int, char *, task_t*, mach_port_t*, mach_port_t*, mach_port_t*);\n"
  },
  {
    "path": "pkg/proc/native/followexec_other.go",
    "content": "//go:build !linux && !windows\n\npackage native\n\nimport \"errors\"\n\n// FollowExec enables (or disables) follow exec mode\nfunc (*nativeProcess) FollowExec(bool) error {\n\treturn errors.New(\"follow exec not implemented\")\n}\n\nfunc (*processGroup) detachChild(*nativeProcess) error {\n\tpanic(\"not implemented\")\n}\n"
  },
  {
    "path": "pkg/proc/native/hwbreak_amd64.go",
    "content": "package native\n\nimport (\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n)\n\nfunc (t *nativeThread) writeHardwareBreakpoint(addr uint64, wtype proc.WatchType, idx uint8) error {\n\treturn t.withDebugRegisters(func(drs *amd64util.DebugRegisters) error {\n\t\treturn drs.SetBreakpoint(idx, addr, wtype.Read(), wtype.Write(), wtype.Size())\n\t})\n}\n\nfunc (t *nativeThread) clearHardwareBreakpoint(addr uint64, wtype proc.WatchType, idx uint8) error {\n\treturn t.withDebugRegisters(func(drs *amd64util.DebugRegisters) error {\n\t\tdrs.ClearBreakpoint(idx)\n\t\treturn nil\n\t})\n}\n\nfunc (t *nativeThread) findHardwareBreakpoint() (*proc.Breakpoint, error) {\n\tvar retbp *proc.Breakpoint\n\terr := t.withDebugRegisters(func(drs *amd64util.DebugRegisters) error {\n\t\tok, idx := drs.GetActiveBreakpoint()\n\t\tif ok {\n\t\t\tfor _, bp := range t.dbp.Breakpoints().M {\n\t\t\t\tif bp.WatchType != 0 && bp.HWBreakIndex == idx {\n\t\t\t\t\tretbp = bp\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn retbp, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/hwbreak_other.go",
    "content": "//go:build (linux && 386) || (darwin && arm64) || (windows && arm64) || (linux && ppc64le) || (linux && riscv64) || (linux && loong64)\n\npackage native\n\nimport (\n\t\"errors\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\nfunc (t *nativeThread) findHardwareBreakpoint() (*proc.Breakpoint, error) {\n\treturn nil, errors.New(\"hardware breakpoints not supported\")\n}\n\nfunc (t *nativeThread) writeHardwareBreakpoint(addr uint64, wtype proc.WatchType, idx uint8) error {\n\treturn errors.New(\"hardware breakpoints not supported\")\n}\n\nfunc (t *nativeThread) clearHardwareBreakpoint(addr uint64, wtype proc.WatchType, idx uint8) error {\n\treturn errors.New(\"hardware breakpoints not supported\")\n}\n"
  },
  {
    "path": "pkg/proc/native/mach_exc.h",
    "content": "#ifndef\t_mach_exc_user_\n#define\t_mach_exc_user_\n\n/* Module mach_exc */\n\n#include <string.h>\n#include <mach/ndr.h>\n#include <mach/boolean.h>\n#include <mach/kern_return.h>\n#include <mach/notify.h>\n#include <mach/mach_types.h>\n#include <mach/message.h>\n#include <mach/mig_errors.h>\n#include <mach/port.h>\n\n/* BEGIN VOUCHER CODE */\n\n#ifndef KERNEL\n#if defined(__has_include)\n#if __has_include(<mach/mig_voucher_support.h>)\n#ifndef USING_VOUCHERS\n#define USING_VOUCHERS\n#endif\n#ifndef __VOUCHER_FORWARD_TYPE_DECLS__\n#define __VOUCHER_FORWARD_TYPE_DECLS__\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\textern boolean_t voucher_mach_msg_set(mach_msg_header_t *msg) __attribute__((weak_import));\n#ifdef __cplusplus\n}\n#endif\n#endif // __VOUCHER_FORWARD_TYPE_DECLS__\n#endif // __has_include(<mach/mach_voucher_types.h>)\n#endif // __has_include\n#endif // !KERNEL\n\n/* END VOUCHER CODE */\n\n\n#ifdef AUTOTEST\n#ifndef FUNCTION_PTR_T\n#define FUNCTION_PTR_T\ntypedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t);\ntypedef struct {\n        char            *name;\n        function_ptr_t  function;\n} function_table_entry;\ntypedef function_table_entry   *function_table_t;\n#endif /* FUNCTION_PTR_T */\n#endif /* AUTOTEST */\n\n#ifndef\tmach_exc_MSG_COUNT\n#define\tmach_exc_MSG_COUNT\t3\n#endif\t/* mach_exc_MSG_COUNT */\n\n#include <mach/std_types.h>\n#include <mach/mig.h>\n#include <mach/mig.h>\n#include <mach/mach_types.h>\n\n#ifdef __BeforeMigUserHeader\n__BeforeMigUserHeader\n#endif /* __BeforeMigUserHeader */\n\n#include <sys/cdefs.h>\n__BEGIN_DECLS\n\n\n/* Routine mach_exception_raise */\n#ifdef\tmig_external\nmig_external\n#else\nextern\n#endif\t/* mig_external */\nkern_return_t mach_exception_raise\n(\n\tmach_port_t exception_port,\n\tmach_port_t thread,\n\tmach_port_t task,\n\texception_type_t exception,\n\tmach_exception_data_t code,\n\tmach_msg_type_number_t codeCnt\n);\n\n/* Routine mach_exception_raise_state */\n#ifdef\tmig_external\nmig_external\n#else\nextern\n#endif\t/* mig_external */\nkern_return_t mach_exception_raise_state\n(\n\tmach_port_t exception_port,\n\texception_type_t exception,\n\tconst mach_exception_data_t code,\n\tmach_msg_type_number_t codeCnt,\n\tint *flavor,\n\tconst thread_state_t old_state,\n\tmach_msg_type_number_t old_stateCnt,\n\tthread_state_t new_state,\n\tmach_msg_type_number_t *new_stateCnt\n);\n\n/* Routine mach_exception_raise_state_identity */\n#ifdef\tmig_external\nmig_external\n#else\nextern\n#endif\t/* mig_external */\nkern_return_t mach_exception_raise_state_identity\n(\n\tmach_port_t exception_port,\n\tmach_port_t thread,\n\tmach_port_t task,\n\texception_type_t exception,\n\tmach_exception_data_t code,\n\tmach_msg_type_number_t codeCnt,\n\tint *flavor,\n\tthread_state_t old_state,\n\tmach_msg_type_number_t old_stateCnt,\n\tthread_state_t new_state,\n\tmach_msg_type_number_t *new_stateCnt\n);\n\n__END_DECLS\n\n/********************** Caution **************************/\n/* The following data types should be used to calculate  */\n/* maximum message sizes only. The actual message may be */\n/* smaller, and the position of the arguments within the */\n/* message layout may vary from what is presented here.  */\n/* For example, if any of the arguments are variable-    */\n/* sized, and less than the maximum is sent, the data    */\n/* will be packed tight in the actual message to reduce  */\n/* the presence of holes.                                */\n/********************** Caution **************************/\n\n/* typedefs for all requests */\n\n#ifndef __Request__mach_exc_subsystem__defined\n#define __Request__mach_exc_subsystem__defined\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\t/* start of the kernel processed data */\n\t\tmach_msg_body_t msgh_body;\n\t\tmach_msg_port_descriptor_t thread;\n\t\tmach_msg_port_descriptor_t task;\n\t\t/* end of the kernel processed data */\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tint64_t code[2];\n\t} __Request__mach_exception_raise_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tint64_t code[2];\n\t\tint flavor;\n\t\tmach_msg_type_number_t old_stateCnt;\n\t\tnatural_t old_state[224];\n\t} __Request__mach_exception_raise_state_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\t/* start of the kernel processed data */\n\t\tmach_msg_body_t msgh_body;\n\t\tmach_msg_port_descriptor_t thread;\n\t\tmach_msg_port_descriptor_t task;\n\t\t/* end of the kernel processed data */\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tint64_t code[2];\n\t\tint flavor;\n\t\tmach_msg_type_number_t old_stateCnt;\n\t\tnatural_t old_state[224];\n\t} __Request__mach_exception_raise_state_identity_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n#endif /* !__Request__mach_exc_subsystem__defined */\n\n/* union of all requests */\n\n#ifndef __RequestUnion__mach_exc_subsystem__defined\n#define __RequestUnion__mach_exc_subsystem__defined\nunion __RequestUnion__mach_exc_subsystem {\n\t__Request__mach_exception_raise_t Request_mach_exception_raise;\n\t__Request__mach_exception_raise_state_t Request_mach_exception_raise_state;\n\t__Request__mach_exception_raise_state_identity_t Request_mach_exception_raise_state_identity;\n};\n#endif /* !__RequestUnion__mach_exc_subsystem__defined */\n/* typedefs for all replies */\n\n#ifndef __Reply__mach_exc_subsystem__defined\n#define __Reply__mach_exc_subsystem__defined\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t} __Reply__mach_exception_raise_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t} __Reply__mach_exception_raise_state_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t} __Reply__mach_exception_raise_state_identity_t;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n#endif /* !__Reply__mach_exc_subsystem__defined */\n\n/* union of all replies */\n\n#ifndef __ReplyUnion__mach_exc_subsystem__defined\n#define __ReplyUnion__mach_exc_subsystem__defined\nunion __ReplyUnion__mach_exc_subsystem {\n\t__Reply__mach_exception_raise_t Reply_mach_exception_raise;\n\t__Reply__mach_exception_raise_state_t Reply_mach_exception_raise_state;\n\t__Reply__mach_exception_raise_state_identity_t Reply_mach_exception_raise_state_identity;\n};\n#endif /* !__RequestUnion__mach_exc_subsystem__defined */\n\n#ifndef subsystem_to_name_map_mach_exc\n#define subsystem_to_name_map_mach_exc \\\n    { \"mach_exception_raise\", 2401 },\\\n    { \"mach_exception_raise_state\", 2402 },\\\n    { \"mach_exception_raise_state_identity\", 2403 }\n#endif\n\n#ifdef __AfterMigUserHeader\n__AfterMigUserHeader\n#endif /* __AfterMigUserHeader */\n\n#endif\t /* _mach_exc_user_ */\n"
  },
  {
    "path": "pkg/proc/native/mach_exc_user_darwin.c",
    "content": "//+build darwin,macnative\n\n/*\n * IDENTIFICATION:\n * stub generated Sat Feb 21 18:10:52 2015\n * with a MiG generated by bootstrap_cmds-91\n * OPTIONS:\n */\n#define\t__MIG_check__Reply__mach_exc_subsystem__ 1\n\n#include \"mach_exc.h\"\n\n\n#ifndef\tmig_internal\n#define\tmig_internal\tstatic __inline__\n#endif\t/* mig_internal */\n\n#ifndef\tmig_external\n#define mig_external\n#endif\t/* mig_external */\n\n#if\t!defined(__MigTypeCheck) && defined(TypeCheck)\n#define\t__MigTypeCheck\t\tTypeCheck\t/* Legacy setting */\n#endif\t/* !defined(__MigTypeCheck) */\n\n#if\t!defined(__MigKernelSpecificCode) && defined(_MIG_KERNEL_SPECIFIC_CODE_)\n#define\t__MigKernelSpecificCode\t_MIG_KERNEL_SPECIFIC_CODE_\t/* Legacy setting */\n#endif\t/* !defined(__MigKernelSpecificCode) */\n\n#ifndef\tLimitCheck\n#define\tLimitCheck 0\n#endif\t/* LimitCheck */\n\n#ifndef\tmin\n#define\tmin(a,b)  ( ((a) < (b))? (a): (b) )\n#endif\t/* min */\n\n#if !defined(_WALIGN_)\n#define _WALIGN_(x) (((x) + 3) & ~3)\n#endif /* !defined(_WALIGN_) */\n\n#if !defined(_WALIGNSZ_)\n#define _WALIGNSZ_(x) _WALIGN_(sizeof(x))\n#endif /* !defined(_WALIGNSZ_) */\n\n#ifndef\tUseStaticTemplates\n#define\tUseStaticTemplates\t0\n#endif\t/* UseStaticTemplates */\n\n#ifndef\t__MachMsgErrorWithTimeout\n#define\t__MachMsgErrorWithTimeout(_R_) { \\\n\tswitch (_R_) { \\\n\tcase MACH_SEND_INVALID_DATA: \\\n\tcase MACH_SEND_INVALID_DEST: \\\n\tcase MACH_SEND_INVALID_HEADER: \\\n\t\tmig_put_reply_port(InP->Head.msgh_reply_port); \\\n\t\tbreak; \\\n\tcase MACH_SEND_TIMED_OUT: \\\n\tcase MACH_RCV_TIMED_OUT: \\\n\tdefault: \\\n\t\tmig_dealloc_reply_port(InP->Head.msgh_reply_port); \\\n\t} \\\n}\n#endif\t/* __MachMsgErrorWithTimeout */\n\n#ifndef\t__MachMsgErrorWithoutTimeout\n#define\t__MachMsgErrorWithoutTimeout(_R_) { \\\n\tswitch (_R_) { \\\n\tcase MACH_SEND_INVALID_DATA: \\\n\tcase MACH_SEND_INVALID_DEST: \\\n\tcase MACH_SEND_INVALID_HEADER: \\\n\t\tmig_put_reply_port(InP->Head.msgh_reply_port); \\\n\t\tbreak; \\\n\tdefault: \\\n\t\tmig_dealloc_reply_port(InP->Head.msgh_reply_port); \\\n\t} \\\n}\n#endif\t/* __MachMsgErrorWithoutTimeout */\n\n#ifndef\t__DeclareSendRpc\n#define\t__DeclareSendRpc(_NUM_, _NAME_)\n#endif\t/* __DeclareSendRpc */\n\n#ifndef\t__BeforeSendRpc\n#define\t__BeforeSendRpc(_NUM_, _NAME_)\n#endif\t/* __BeforeSendRpc */\n\n#ifndef\t__AfterSendRpc\n#define\t__AfterSendRpc(_NUM_, _NAME_)\n#endif\t/* __AfterSendRpc */\n\n#ifndef\t__DeclareSendSimple\n#define\t__DeclareSendSimple(_NUM_, _NAME_)\n#endif\t/* __DeclareSendSimple */\n\n#ifndef\t__BeforeSendSimple\n#define\t__BeforeSendSimple(_NUM_, _NAME_)\n#endif\t/* __BeforeSendSimple */\n\n#ifndef\t__AfterSendSimple\n#define\t__AfterSendSimple(_NUM_, _NAME_)\n#endif\t/* __AfterSendSimple */\n\n#define msgh_request_port\tmsgh_remote_port\n#define msgh_reply_port\t\tmsgh_local_port\n\n\n\n#if ( __MigTypeCheck )\n#if __MIG_check__Reply__mach_exc_subsystem__\n#if !defined(__MIG_check__Reply__mach_exception_raise_t__defined)\n#define __MIG_check__Reply__mach_exception_raise_t__defined\n\nmig_internal kern_return_t __MIG_check__Reply__mach_exception_raise_t(__Reply__mach_exception_raise_t *Out0P)\n{\n\n\ttypedef __Reply__mach_exception_raise_t __Reply;\n\tif (Out0P->Head.msgh_id != 2505) {\n\t    if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)\n\t\t{ return MIG_SERVER_DIED; }\n\t    else\n\t\t{ return MIG_REPLY_MISMATCH; }\n\t}\n\n#if\t__MigTypeCheck\n\tif ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||\n\t    (Out0P->Head.msgh_size != (mach_msg_size_t)sizeof(__Reply)))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\t{\n\t\treturn Out0P->RetCode;\n\t}\n}\n#endif /* !defined(__MIG_check__Reply__mach_exception_raise_t__defined) */\n#endif /* __MIG_check__Reply__mach_exc_subsystem__ */\n#endif /* ( __MigTypeCheck ) */\n\n\n/* Routine mach_exception_raise */\nmig_external kern_return_t mach_exception_raise\n(\n\tmach_port_t exception_port,\n\tmach_port_t thread,\n\tmach_port_t task,\n\texception_type_t exception,\n\tmach_exception_data_t code,\n\tmach_msg_type_number_t codeCnt\n)\n{\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\t/* start of the kernel processed data */\n\t\tmach_msg_body_t msgh_body;\n\t\tmach_msg_port_descriptor_t thread;\n\t\tmach_msg_port_descriptor_t task;\n\t\t/* end of the kernel processed data */\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tint64_t code[2];\n\t} Request;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tmach_msg_trailer_t trailer;\n\t} Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t} __Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\t/*\n\t * typedef struct {\n\t * \tmach_msg_header_t Head;\n\t * \tNDR_record_t NDR;\n\t * \tkern_return_t RetCode;\n\t * } mig_reply_error_t;\n\t */\n\n\tunion {\n\t\tRequest In;\n\t\tReply Out;\n\t} Mess;\n\n\tRequest *InP = &Mess.In;\n\tReply *Out0P = &Mess.Out;\n\n\tmach_msg_return_t msg_result;\n\tunsigned int msgh_size;\n\n#ifdef\t__MIG_check__Reply__mach_exception_raise_t__defined\n\tkern_return_t check_result;\n#endif\t/* __MIG_check__Reply__mach_exception_raise_t__defined */\n\n\t__DeclareSendRpc(2405, \"mach_exception_raise\")\n\n#if\tUseStaticTemplates\n\tconst static mach_msg_port_descriptor_t threadTemplate = {\n\t\t/* name = */\t\tMACH_PORT_NULL,\n\t\t/* pad1 = */\t\t0,\n\t\t/* pad2 = */\t\t0,\n\t\t/* disp = */\t\t19,\n\t\t/* type = */\t\tMACH_MSG_PORT_DESCRIPTOR,\n\t};\n#endif\t/* UseStaticTemplates */\n\n#if\tUseStaticTemplates\n\tconst static mach_msg_port_descriptor_t taskTemplate = {\n\t\t/* name = */\t\tMACH_PORT_NULL,\n\t\t/* pad1 = */\t\t0,\n\t\t/* pad2 = */\t\t0,\n\t\t/* disp = */\t\t19,\n\t\t/* type = */\t\tMACH_MSG_PORT_DESCRIPTOR,\n\t};\n#endif\t/* UseStaticTemplates */\n\n\tInP->msgh_body.msgh_descriptor_count = 2;\n#if\tUseStaticTemplates\n\tInP->thread = threadTemplate;\n\tInP->thread.name = thread;\n#else\t/* UseStaticTemplates */\n\tInP->thread.name = thread;\n\tInP->thread.disposition = 19;\n\tInP->thread.type = MACH_MSG_PORT_DESCRIPTOR;\n#endif\t/* UseStaticTemplates */\n\n#if\tUseStaticTemplates\n\tInP->task = taskTemplate;\n\tInP->task.name = task;\n#else\t/* UseStaticTemplates */\n\tInP->task.name = task;\n\tInP->task.disposition = 19;\n\tInP->task.type = MACH_MSG_PORT_DESCRIPTOR;\n#endif\t/* UseStaticTemplates */\n\n\tInP->NDR = NDR_record;\n\n\tInP->exception = exception;\n\n\tif (codeCnt > 2) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->code, (const char *) code, 8 * codeCnt);\n\n\tInP->codeCnt = codeCnt;\n\n\tmsgh_size = (mach_msg_size_t)(sizeof(Request) - 16) + ((8 * codeCnt));\n\tInP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX|\n\t\tMACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);\n\t/* msgh_size passed as argument */\n\tInP->Head.msgh_request_port = exception_port;\n\tInP->Head.msgh_reply_port = mig_get_reply_port();\n\tInP->Head.msgh_id = 2405;\n\n/* BEGIN VOUCHER CODE */\n\n#ifdef USING_VOUCHERS\n\tif (voucher_mach_msg_set != NULL) {\n\t\tvoucher_mach_msg_set(&InP->Head);\n\t}\n#endif // USING_VOUCHERS\n\n/* END VOUCHER CODE */\n\n\t__BeforeSendRpc(2405, \"mach_exception_raise\")\n\tmsg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);\n\t__AfterSendRpc(2405, \"mach_exception_raise\")\n\tif (msg_result != MACH_MSG_SUCCESS) {\n\t\t__MachMsgErrorWithoutTimeout(msg_result);\n\t\t{ return msg_result; }\n\t}\n\n\n#if\tdefined(__MIG_check__Reply__mach_exception_raise_t__defined)\n\tcheck_result = __MIG_check__Reply__mach_exception_raise_t((__Reply__mach_exception_raise_t *)Out0P);\n\tif (check_result != MACH_MSG_SUCCESS)\n\t\t{ return check_result; }\n#endif\t/* defined(__MIG_check__Reply__mach_exception_raise_t__defined) */\n\n\treturn KERN_SUCCESS;\n}\n\n#if ( __MigTypeCheck )\n#if __MIG_check__Reply__mach_exc_subsystem__\n#if !defined(__MIG_check__Reply__mach_exception_raise_state_t__defined)\n#define __MIG_check__Reply__mach_exception_raise_state_t__defined\n\nmig_internal kern_return_t __MIG_check__Reply__mach_exception_raise_state_t(__Reply__mach_exception_raise_state_t *Out0P)\n{\n\n\ttypedef __Reply__mach_exception_raise_state_t __Reply;\n#if\t__MigTypeCheck\n\tunsigned int msgh_size;\n#endif\t/* __MigTypeCheck */\n\n\tif (Out0P->Head.msgh_id != 2506) {\n\t    if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)\n\t\t{ return MIG_SERVER_DIED; }\n\t    else\n\t\t{ return MIG_REPLY_MISMATCH; }\n\t}\n\n#if\t__MigTypeCheck\n\tmsgh_size = Out0P->Head.msgh_size;\n\n\tif ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||\n\t    ((msgh_size > (mach_msg_size_t)sizeof(__Reply) || msgh_size < (mach_msg_size_t)(sizeof(__Reply) - 896)) &&\n\t     (msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) ||\n\t      Out0P->RetCode == KERN_SUCCESS)))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\tif (Out0P->RetCode != KERN_SUCCESS) {\n\t\treturn ((mig_reply_error_t *)Out0P)->RetCode;\n\t}\n\n#if\t__MigTypeCheck\n\tif ( Out0P->new_stateCnt > 224 )\n\t\treturn MIG_TYPE_ERROR;\n\tif (((msgh_size - (mach_msg_size_t)(sizeof(__Reply) - 896)) / 4< Out0P->new_stateCnt) ||\n\t    (msgh_size != (mach_msg_size_t)(sizeof(__Reply) - 896) + Out0P->new_stateCnt * 4))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\treturn MACH_MSG_SUCCESS;\n}\n#endif /* !defined(__MIG_check__Reply__mach_exception_raise_state_t__defined) */\n#endif /* __MIG_check__Reply__mach_exc_subsystem__ */\n#endif /* ( __MigTypeCheck ) */\n\n\n/* Routine mach_exception_raise_state */\nmig_external kern_return_t mach_exception_raise_state\n(\n\tmach_port_t exception_port,\n\texception_type_t exception,\n\tconst mach_exception_data_t code,\n\tmach_msg_type_number_t codeCnt,\n\tint *flavor,\n\tconst thread_state_t old_state,\n\tmach_msg_type_number_t old_stateCnt,\n\tthread_state_t new_state,\n\tmach_msg_type_number_t *new_stateCnt\n)\n{\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tint64_t code[2];\n\t\tint flavor;\n\t\tmach_msg_type_number_t old_stateCnt;\n\t\tnatural_t old_state[224];\n\t} Request;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t\tmach_msg_trailer_t trailer;\n\t} Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t} __Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\t/*\n\t * typedef struct {\n\t * \tmach_msg_header_t Head;\n\t * \tNDR_record_t NDR;\n\t * \tkern_return_t RetCode;\n\t * } mig_reply_error_t;\n\t */\n\n\tunion {\n\t\tRequest In;\n\t\tReply Out;\n\t} Mess;\n\n\tRequest *InP = &Mess.In;\n\tReply *Out0P = &Mess.Out;\n\n\tmach_msg_return_t msg_result;\n\tunsigned int msgh_size;\n\tunsigned int msgh_size_delta;\n\n\n#ifdef\t__MIG_check__Reply__mach_exception_raise_state_t__defined\n\tkern_return_t check_result;\n#endif\t/* __MIG_check__Reply__mach_exception_raise_state_t__defined */\n\n\t__DeclareSendRpc(2406, \"mach_exception_raise_state\")\n\n\tInP->NDR = NDR_record;\n\n\tInP->exception = exception;\n\n\tif (codeCnt > 2) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->code, (const char *) code, 8 * codeCnt);\n\n\tInP->codeCnt = codeCnt;\n\n\tmsgh_size_delta = (8 * codeCnt);\n\tmsgh_size = (mach_msg_size_t)(sizeof(Request) - 912) + msgh_size_delta;\n\tInP = (Request *) ((pointer_t) InP + msgh_size_delta - 16);\n\n\tInP->flavor = *flavor;\n\n\tif (old_stateCnt > 224) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->old_state, (const char *) old_state, 4 * old_stateCnt);\n\n\tInP->old_stateCnt = old_stateCnt;\n\n\tmsgh_size += (4 * old_stateCnt);\n\tInP = &Mess.In;\n\tInP->Head.msgh_bits =\n\t\tMACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);\n\t/* msgh_size passed as argument */\n\tInP->Head.msgh_request_port = exception_port;\n\tInP->Head.msgh_reply_port = mig_get_reply_port();\n\tInP->Head.msgh_id = 2406;\n\n/* BEGIN VOUCHER CODE */\n\n#ifdef USING_VOUCHERS\n\tif (voucher_mach_msg_set != NULL) {\n\t\tvoucher_mach_msg_set(&InP->Head);\n\t}\n#endif // USING_VOUCHERS\n\n/* END VOUCHER CODE */\n\n\t__BeforeSendRpc(2406, \"mach_exception_raise_state\")\n\tmsg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);\n\t__AfterSendRpc(2406, \"mach_exception_raise_state\")\n\tif (msg_result != MACH_MSG_SUCCESS) {\n\t\t__MachMsgErrorWithoutTimeout(msg_result);\n\t\t{ return msg_result; }\n\t}\n\n\n#if\tdefined(__MIG_check__Reply__mach_exception_raise_state_t__defined)\n\tcheck_result = __MIG_check__Reply__mach_exception_raise_state_t((__Reply__mach_exception_raise_state_t *)Out0P);\n\tif (check_result != MACH_MSG_SUCCESS)\n\t\t{ return check_result; }\n#endif\t/* defined(__MIG_check__Reply__mach_exception_raise_state_t__defined) */\n\n\t*flavor = Out0P->flavor;\n\n\tif (Out0P->new_stateCnt > 224) {\n\t\t(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 *  224);\n\t\t*new_stateCnt = Out0P->new_stateCnt;\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * Out0P->new_stateCnt);\n\n\t*new_stateCnt = Out0P->new_stateCnt;\n\n\treturn KERN_SUCCESS;\n}\n\n#if ( __MigTypeCheck )\n#if __MIG_check__Reply__mach_exc_subsystem__\n#if !defined(__MIG_check__Reply__mach_exception_raise_state_identity_t__defined)\n#define __MIG_check__Reply__mach_exception_raise_state_identity_t__defined\n\nmig_internal kern_return_t __MIG_check__Reply__mach_exception_raise_state_identity_t(__Reply__mach_exception_raise_state_identity_t *Out0P)\n{\n\n\ttypedef __Reply__mach_exception_raise_state_identity_t __Reply;\n#if\t__MigTypeCheck\n\tunsigned int msgh_size;\n#endif\t/* __MigTypeCheck */\n\n\tif (Out0P->Head.msgh_id != 2507) {\n\t    if (Out0P->Head.msgh_id == MACH_NOTIFY_SEND_ONCE)\n\t\t{ return MIG_SERVER_DIED; }\n\t    else\n\t\t{ return MIG_REPLY_MISMATCH; }\n\t}\n\n#if\t__MigTypeCheck\n\tmsgh_size = Out0P->Head.msgh_size;\n\n\tif ((Out0P->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||\n\t    ((msgh_size > (mach_msg_size_t)sizeof(__Reply) || msgh_size < (mach_msg_size_t)(sizeof(__Reply) - 896)) &&\n\t     (msgh_size != (mach_msg_size_t)sizeof(mig_reply_error_t) ||\n\t      Out0P->RetCode == KERN_SUCCESS)))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\tif (Out0P->RetCode != KERN_SUCCESS) {\n\t\treturn ((mig_reply_error_t *)Out0P)->RetCode;\n\t}\n\n#if\t__MigTypeCheck\n\tif ( Out0P->new_stateCnt > 224 )\n\t\treturn MIG_TYPE_ERROR;\n\tif (((msgh_size - (mach_msg_size_t)(sizeof(__Reply) - 896)) / 4< Out0P->new_stateCnt) ||\n\t    (msgh_size != (mach_msg_size_t)(sizeof(__Reply) - 896) + Out0P->new_stateCnt * 4))\n\t\t{ return MIG_TYPE_ERROR ; }\n#endif\t/* __MigTypeCheck */\n\n\treturn MACH_MSG_SUCCESS;\n}\n#endif /* !defined(__MIG_check__Reply__mach_exception_raise_state_identity_t__defined) */\n#endif /* __MIG_check__Reply__mach_exc_subsystem__ */\n#endif /* ( __MigTypeCheck ) */\n\n\n/* Routine mach_exception_raise_state_identity */\nmig_external kern_return_t mach_exception_raise_state_identity\n(\n\tmach_port_t exception_port,\n\tmach_port_t thread,\n\tmach_port_t task,\n\texception_type_t exception,\n\tmach_exception_data_t code,\n\tmach_msg_type_number_t codeCnt,\n\tint *flavor,\n\tthread_state_t old_state,\n\tmach_msg_type_number_t old_stateCnt,\n\tthread_state_t new_state,\n\tmach_msg_type_number_t *new_stateCnt\n)\n{\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\t/* start of the kernel processed data */\n\t\tmach_msg_body_t msgh_body;\n\t\tmach_msg_port_descriptor_t thread;\n\t\tmach_msg_port_descriptor_t task;\n\t\t/* end of the kernel processed data */\n\t\tNDR_record_t NDR;\n\t\texception_type_t exception;\n\t\tmach_msg_type_number_t codeCnt;\n\t\tint64_t code[2];\n\t\tint flavor;\n\t\tmach_msg_type_number_t old_stateCnt;\n\t\tnatural_t old_state[224];\n\t} Request;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t\tmach_msg_trailer_t trailer;\n\t} Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\n#ifdef  __MigPackStructs\n#pragma pack(4)\n#endif\n\ttypedef struct {\n\t\tmach_msg_header_t Head;\n\t\tNDR_record_t NDR;\n\t\tkern_return_t RetCode;\n\t\tint flavor;\n\t\tmach_msg_type_number_t new_stateCnt;\n\t\tnatural_t new_state[224];\n\t} __Reply;\n#ifdef  __MigPackStructs\n#pragma pack()\n#endif\n\t/*\n\t * typedef struct {\n\t * \tmach_msg_header_t Head;\n\t * \tNDR_record_t NDR;\n\t * \tkern_return_t RetCode;\n\t * } mig_reply_error_t;\n\t */\n\n\tunion {\n\t\tRequest In;\n\t\tReply Out;\n\t} Mess;\n\n\tRequest *InP = &Mess.In;\n\tReply *Out0P = &Mess.Out;\n\n\tmach_msg_return_t msg_result;\n\tunsigned int msgh_size;\n\tunsigned int msgh_size_delta;\n\n\n#ifdef\t__MIG_check__Reply__mach_exception_raise_state_identity_t__defined\n\tkern_return_t check_result;\n#endif\t/* __MIG_check__Reply__mach_exception_raise_state_identity_t__defined */\n\n\t__DeclareSendRpc(2407, \"mach_exception_raise_state_identity\")\n\n#if\tUseStaticTemplates\n\tconst static mach_msg_port_descriptor_t threadTemplate = {\n\t\t/* name = */\t\tMACH_PORT_NULL,\n\t\t/* pad1 = */\t\t0,\n\t\t/* pad2 = */\t\t0,\n\t\t/* disp = */\t\t19,\n\t\t/* type = */\t\tMACH_MSG_PORT_DESCRIPTOR,\n\t};\n#endif\t/* UseStaticTemplates */\n\n#if\tUseStaticTemplates\n\tconst static mach_msg_port_descriptor_t taskTemplate = {\n\t\t/* name = */\t\tMACH_PORT_NULL,\n\t\t/* pad1 = */\t\t0,\n\t\t/* pad2 = */\t\t0,\n\t\t/* disp = */\t\t19,\n\t\t/* type = */\t\tMACH_MSG_PORT_DESCRIPTOR,\n\t};\n#endif\t/* UseStaticTemplates */\n\n\tInP->msgh_body.msgh_descriptor_count = 2;\n#if\tUseStaticTemplates\n\tInP->thread = threadTemplate;\n\tInP->thread.name = thread;\n#else\t/* UseStaticTemplates */\n\tInP->thread.name = thread;\n\tInP->thread.disposition = 19;\n\tInP->thread.type = MACH_MSG_PORT_DESCRIPTOR;\n#endif\t/* UseStaticTemplates */\n\n#if\tUseStaticTemplates\n\tInP->task = taskTemplate;\n\tInP->task.name = task;\n#else\t/* UseStaticTemplates */\n\tInP->task.name = task;\n\tInP->task.disposition = 19;\n\tInP->task.type = MACH_MSG_PORT_DESCRIPTOR;\n#endif\t/* UseStaticTemplates */\n\n\tInP->NDR = NDR_record;\n\n\tInP->exception = exception;\n\n\tif (codeCnt > 2) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->code, (const char *) code, 8 * codeCnt);\n\n\tInP->codeCnt = codeCnt;\n\n\tmsgh_size_delta = (8 * codeCnt);\n\tmsgh_size = (mach_msg_size_t)(sizeof(Request) - 912) + msgh_size_delta;\n\tInP = (Request *) ((pointer_t) InP + msgh_size_delta - 16);\n\n\tInP->flavor = *flavor;\n\n\tif (old_stateCnt > 224) {\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) InP->old_state, (const char *) old_state, 4 * old_stateCnt);\n\n\tInP->old_stateCnt = old_stateCnt;\n\n\tmsgh_size += (4 * old_stateCnt);\n\tInP = &Mess.In;\n\tInP->Head.msgh_bits = MACH_MSGH_BITS_COMPLEX|\n\t\tMACH_MSGH_BITS(19, MACH_MSG_TYPE_MAKE_SEND_ONCE);\n\t/* msgh_size passed as argument */\n\tInP->Head.msgh_request_port = exception_port;\n\tInP->Head.msgh_reply_port = mig_get_reply_port();\n\tInP->Head.msgh_id = 2407;\n\n/* BEGIN VOUCHER CODE */\n\n#ifdef USING_VOUCHERS\n\tif (voucher_mach_msg_set != NULL) {\n\t\tvoucher_mach_msg_set(&InP->Head);\n\t}\n#endif // USING_VOUCHERS\n\n/* END VOUCHER CODE */\n\n\t__BeforeSendRpc(2407, \"mach_exception_raise_state_identity\")\n\tmsg_result = mach_msg(&InP->Head, MACH_SEND_MSG|MACH_RCV_MSG|MACH_MSG_OPTION_NONE, msgh_size, (mach_msg_size_t)sizeof(Reply), InP->Head.msgh_reply_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);\n\t__AfterSendRpc(2407, \"mach_exception_raise_state_identity\")\n\tif (msg_result != MACH_MSG_SUCCESS) {\n\t\t__MachMsgErrorWithoutTimeout(msg_result);\n\t\t{ return msg_result; }\n\t}\n\n\n#if\tdefined(__MIG_check__Reply__mach_exception_raise_state_identity_t__defined)\n\tcheck_result = __MIG_check__Reply__mach_exception_raise_state_identity_t((__Reply__mach_exception_raise_state_identity_t *)Out0P);\n\tif (check_result != MACH_MSG_SUCCESS)\n\t\t{ return check_result; }\n#endif\t/* defined(__MIG_check__Reply__mach_exception_raise_state_identity_t__defined) */\n\n\t*flavor = Out0P->flavor;\n\n\tif (Out0P->new_stateCnt > 224) {\n\t\t(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 *  224);\n\t\t*new_stateCnt = Out0P->new_stateCnt;\n\t\t{ return MIG_ARRAY_TOO_LARGE; }\n\t}\n\t(void)memcpy((char *) new_state, (const char *) Out0P->new_state, 4 * Out0P->new_stateCnt);\n\n\t*new_stateCnt = Out0P->new_stateCnt;\n\n\treturn KERN_SUCCESS;\n}\n"
  },
  {
    "path": "pkg/proc/native/nonative_darwin.go",
    "content": "//go:build darwin && !macnative\n\npackage native\n\nimport (\n\t\"errors\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n)\n\nvar ErrNativeBackendDisabled = errors.New(\"native backend disabled during compilation\")\n\n// Launch returns ErrNativeBackendDisabled.\nfunc Launch(_ []string, _ string, _ proc.LaunchFlags, _ []string, _ string, _ string, _ proc.OutputRedirect, _ proc.OutputRedirect) (*proc.TargetGroup, error) {\n\treturn nil, ErrNativeBackendDisabled\n}\n\n// Attach returns ErrNativeBackendDisabled.\nfunc Attach(_ int, _ *proc.WaitFor, _ []string) (*proc.TargetGroup, error) {\n\treturn nil, ErrNativeBackendDisabled\n}\n\nfunc waitForSearchProcess(string, map[int]struct{}) (int, error) {\n\treturn 0, proc.ErrWaitForNotImplemented\n}\n\n// waitStatus is a synonym for the platform-specific WaitStatus\ntype waitStatus struct{}\n\n// osSpecificDetails holds information specific to the OSX/Darwin\n// operating system / kernel.\ntype osSpecificDetails struct{}\n\n// osProcessDetails holds Darwin specific information.\ntype osProcessDetails struct{}\n\nfunc (os *osProcessDetails) Close() {}\n\nfunc killProcess(pid int) error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc registers(thread *nativeThread) (proc.Registers, error) {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (dbp *nativeProcess) requestManualStop() (err error) {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (*processGroup) resume() error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc trapWait(procgrp *processGroup, pid int) (*nativeThread, error) {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (*processGroup) stop(cctx *proc.ContinueOnceContext, trapthread *nativeThread) (*nativeThread, error) {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (dbp *nativeProcess) updateThreadList() error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (*processGroup) kill(dbp *nativeProcess) (err error) {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (dbp *nativeProcess) detach(kill bool) error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\n// EntryPoint returns the entry point for the process,\n// useful for PIEs.\nfunc (dbp *nativeProcess) EntryPoint() (uint64, error) {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (dbp *nativeProcess) SupportsBPF() bool {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (dbp *nativeProcess) SetUProbe(fnName string, goidOffset int64, args []ebpf.UProbeArgMap) error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (dbp *nativeProcess) GetBufferedTracepoints() []ebpf.RawUProbeParams {\n\tpanic(ErrNativeBackendDisabled)\n}\n\n// SetPC sets the value of the PC register.\nfunc (t *nativeThread) setPC(pc uint64) error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\n// SetReg changes the value of the specified register.\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\n// ReadMemory reads len(buf) bytes at addr into buf.\nfunc (t *nativeThread) ReadMemory(buf []byte, addr uint64) (int, error) {\n\tpanic(ErrNativeBackendDisabled)\n}\n\n// WriteMemory writes the contents of data at addr.\nfunc (t *nativeThread) WriteMemory(addr uint64, data []byte) (int, error) {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (t *nativeThread) resume() error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (*processGroup) singleStep(*nativeThread) error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (t *nativeThread) restoreRegisters(sr proc.Registers) error {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc (t *nativeThread) withDebugRegisters(f func(*amd64util.DebugRegisters) error) error {\n\treturn proc.ErrHWBreakUnsupported\n}\n\n// Stopped returns whether the thread is stopped at\n// the operating system level.\nfunc (t *nativeThread) Stopped() bool {\n\tpanic(ErrNativeBackendDisabled)\n}\n\n// SoftExc returns true if this thread received a software exception during the last resume.\nfunc (t *nativeThread) SoftExc() bool {\n\tpanic(ErrNativeBackendDisabled)\n}\n\nfunc initialize(dbp *nativeProcess) (string, error) { return \"\", nil }\n"
  },
  {
    "path": "pkg/proc/native/proc.go",
    "content": "package native\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// Process represents all of the information the debugger\n// is holding onto regarding the process we are debugging.\ntype nativeProcess struct {\n\tbi *proc.BinaryInfo\n\n\tpid int // Process Pid\n\n\t// Breakpoint table, holds information on breakpoints.\n\t// Maps instruction address to Breakpoint struct.\n\tbreakpoints proc.BreakpointMap\n\n\t// List of threads mapped as such: pid -> *Thread\n\tthreads map[int]*nativeThread\n\n\t// Thread used to read and write memory\n\tmemthread *nativeThread\n\n\tos           *osProcessDetails\n\tfirstStart   bool\n\tptraceThread *ptraceThread\n\tchildProcess bool // this process was launched, not attached to\n\tfollowExec   bool // automatically attach to new processes\n\n\t// Controlling terminal file descriptor for\n\t// this process.\n\tctty *os.File\n\n\tiscgo bool\n\n\texited, detached atomic.Bool\n}\n\n// newProcess returns an initialized Process struct. Before returning,\n// it will also launch a goroutine in order to handle ptrace(2)\n// functions. For more information, see the documentation on\n// `handlePtraceFuncs`.\nfunc newProcess(pid int) *nativeProcess {\n\tdbp := &nativeProcess{\n\t\tpid:          pid,\n\t\tthreads:      make(map[int]*nativeThread),\n\t\tbreakpoints:  proc.NewBreakpointMap(),\n\t\tfirstStart:   true,\n\t\tos:           new(osProcessDetails),\n\t\tptraceThread: newPtraceThread(),\n\t\tbi:           proc.NewBinaryInfo(runtime.GOOS, runtime.GOARCH),\n\t}\n\treturn dbp\n}\n\n// newChildProcess is like newProcess but uses the same ptrace thread as dbp.\nfunc newChildProcess(dbp *nativeProcess, pid int) *nativeProcess {\n\treturn &nativeProcess{\n\t\tpid:          pid,\n\t\tthreads:      make(map[int]*nativeThread),\n\t\tbreakpoints:  proc.NewBreakpointMap(),\n\t\tfirstStart:   true,\n\t\tos:           new(osProcessDetails),\n\t\tptraceThread: dbp.ptraceThread.acquire(),\n\t\tbi:           proc.NewBinaryInfo(runtime.GOOS, runtime.GOARCH),\n\t}\n}\n\n// WaitFor waits for a process as specified by waitFor.\nfunc WaitFor(waitFor *proc.WaitFor) (int, error) {\n\tt0 := time.Now()\n\tseen := make(map[int]struct{})\n\tfor (waitFor.Duration == 0) || (time.Since(t0) < waitFor.Duration) {\n\t\tpid, err := waitForSearchProcess(waitFor.Name, seen)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tif pid != 0 {\n\t\t\treturn pid, nil\n\t\t}\n\t\ttime.Sleep(waitFor.Interval)\n\t}\n\treturn 0, errors.New(\"waitfor duration expired\")\n}\n\n// BinInfo will return the binary info struct associated with this process.\nfunc (dbp *nativeProcess) BinInfo() *proc.BinaryInfo {\n\treturn dbp.bi\n}\n\n// StartCallInjection notifies the backend that we are about to inject a function call.\nfunc (dbp *nativeProcess) StartCallInjection() (func(), error) { return func() {}, nil }\n\n// detachWithoutGroup is a helper function to detach from a process which we\n// haven't added to a process group yet.\nfunc detachWithoutGroup(dbp *nativeProcess, kill bool) error {\n\tgrp := &processGroup{procs: []*nativeProcess{dbp}}\n\treturn grp.Detach(dbp.pid, kill)\n}\n\n// Detach from the process being debugged, optionally killing it.\nfunc (procgrp *processGroup) Detach(pid int, kill bool) (err error) {\n\tdbp := procgrp.procForPid(pid)\n\tif ok, _ := dbp.Valid(); !ok {\n\t\treturn nil\n\t}\n\tif kill && dbp.childProcess {\n\t\terr := procgrp.kill(dbp)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\tdbp.execPtraceFunc(func() {\n\t\terr = dbp.detach(kill)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tif kill {\n\t\t\terr = killProcess(dbp.pid)\n\t\t}\n\t})\n\tdbp.detached.Store(true)\n\tdbp.postExit()\n\treturn\n}\n\nfunc (procgrp *processGroup) Close() error {\n\treturn nil\n}\n\n// Valid returns whether the process is still attached to and\n// has not exited.\nfunc (dbp *nativeProcess) Valid() (bool, error) {\n\tif dbp.detached.Load() {\n\t\treturn false, proc.ErrProcessDetached\n\t}\n\tif dbp.exited.Load() {\n\t\treturn false, proc.ErrProcessExited{Pid: dbp.pid}\n\t}\n\treturn true, nil\n}\n\n// ThreadList returns a list of threads in the process.\nfunc (dbp *nativeProcess) ThreadList() []proc.Thread {\n\tr := make([]proc.Thread, 0, len(dbp.threads))\n\tfor _, v := range dbp.threads {\n\t\tr = append(r, v)\n\t}\n\treturn r\n}\n\n// FindThread attempts to find the thread with the specified ID.\nfunc (dbp *nativeProcess) FindThread(threadID int) (proc.Thread, bool) {\n\tth, ok := dbp.threads[threadID]\n\treturn th, ok\n}\n\n// Memory returns the process memory.\nfunc (dbp *nativeProcess) Memory() proc.MemoryReadWriter {\n\treturn dbp.memthread\n}\n\n// Breakpoints returns a list of breakpoints currently set.\nfunc (dbp *nativeProcess) Breakpoints() *proc.BreakpointMap {\n\treturn &dbp.breakpoints\n}\n\n// RequestManualStop sets the `manualStopRequested` flag and\n// sends SIGSTOP to all threads.\nfunc (dbp *nativeProcess) RequestManualStop(cctx *proc.ContinueOnceContext) error {\n\tif ok, err := dbp.Valid(); !ok {\n\t\treturn err\n\t}\n\treturn dbp.requestManualStop()\n}\n\nfunc (dbp *nativeProcess) WriteBreakpoint(bp *proc.Breakpoint) error {\n\tif bp.WatchType != 0 {\n\t\tfor _, thread := range dbp.threads {\n\t\t\terr := thread.writeHardwareBreakpoint(bp.Addr, bp.WatchType, bp.HWBreakIndex)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tbp.OriginalData = make([]byte, dbp.bi.Arch.BreakpointSize())\n\t_, err := dbp.memthread.ReadMemory(bp.OriginalData, bp.Addr)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn dbp.writeSoftwareBreakpoint(dbp.memthread, bp.Addr)\n}\n\nfunc (dbp *nativeProcess) EraseBreakpoint(bp *proc.Breakpoint) error {\n\tif bp.WatchType != 0 {\n\t\tfor _, thread := range dbp.threads {\n\t\t\terr := thread.clearHardwareBreakpoint(bp.Addr, bp.WatchType, bp.HWBreakIndex)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\treturn dbp.memthread.clearSoftwareBreakpoint(bp)\n}\n\ntype processGroup struct {\n\tprocs     []*nativeProcess\n\taddTarget proc.AddTargetFunc\n}\n\nfunc (procgrp *processGroup) numValid() int {\n\tn := 0\n\tfor _, p := range procgrp.procs {\n\t\tif ok, _ := p.Valid(); ok {\n\t\t\tn++\n\t\t}\n\t}\n\treturn n\n}\n\nfunc (procgrp *processGroup) procForThread(tid int) *nativeProcess {\n\tfor _, p := range procgrp.procs {\n\t\tif p.threads[tid] != nil {\n\t\t\treturn p\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (procgrp *processGroup) procForPid(pid int) *nativeProcess {\n\tfor _, p := range procgrp.procs {\n\t\tif p.pid == pid {\n\t\t\treturn p\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (procgrp *processGroup) add(p *nativeProcess, pid int, currentThread proc.Thread, path string, stopReason proc.StopReason, cmdline string) (*proc.Target, error) {\n\ttgt, err := procgrp.addTarget(p, pid, currentThread, path, stopReason, cmdline)\n\tif tgt == nil {\n\t\ti := len(procgrp.procs)\n\t\tprocgrp.procs = append(procgrp.procs, p)\n\t\tprocgrp.detachChild(p)\n\t\tif i == len(procgrp.procs)-1 {\n\t\t\tprocgrp.procs = procgrp.procs[:i]\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif tgt != nil {\n\t\tprocgrp.procs = append(procgrp.procs, p)\n\t}\n\treturn tgt, nil\n}\n\nfunc (procgrp *processGroup) ContinueOnce(cctx *proc.ContinueOnceContext) (proc.Thread, proc.StopReason, error) {\n\tif len(procgrp.procs) != 1 && runtime.GOOS != \"linux\" && runtime.GOOS != \"windows\" {\n\t\tpanic(\"not implemented\")\n\t}\n\tif procgrp.numValid() == 0 {\n\t\treturn nil, proc.StopExited, proc.ErrProcessExited{Pid: procgrp.procs[0].pid}\n\t}\n\n\tfor {\n\t\terr := procgrp.resume()\n\t\tif err != nil {\n\t\t\treturn nil, proc.StopUnknown, err\n\t\t}\n\t\tfor _, dbp := range procgrp.procs {\n\t\t\tif valid, _ := dbp.Valid(); valid {\n\t\t\t\tfor _, th := range dbp.threads {\n\t\t\t\t\tth.CurrentBreakpoint.Clear()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif cctx.ResumeChan != nil {\n\t\t\tclose(cctx.ResumeChan)\n\t\t\tcctx.ResumeChan = nil\n\t\t}\n\n\t\ttrapthread, err := trapWait(procgrp, -1)\n\t\tif err != nil {\n\t\t\treturn nil, proc.StopUnknown, err\n\t\t}\n\t\ttrapthread, err = procgrp.stop(cctx, trapthread)\n\t\tif err != nil {\n\t\t\treturn nil, proc.StopUnknown, err\n\t\t}\n\t\tif trapthread != nil {\n\t\t\tdbp := procgrp.procForThread(trapthread.ID)\n\t\t\tdbp.memthread = trapthread\n\t\t\t// refresh memthread for every other process\n\t\t\tfor _, p2 := range procgrp.procs {\n\t\t\t\tif p2.exited.Load() || p2.detached.Load() || p2 == dbp {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor _, th := range p2.threads {\n\t\t\t\t\tp2.memthread = th\n\t\t\t\t\tif th.SoftExc() {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn trapthread, proc.StopUnknown, nil\n\t\t}\n\t}\n}\n\n// FindBreakpoint finds the breakpoint for the given pc.\nfunc (dbp *nativeProcess) FindBreakpoint(pc uint64, adjustPC bool) (*proc.Breakpoint, bool) {\n\tif adjustPC {\n\t\t// Check to see if address is past the breakpoint, (i.e. breakpoint was hit).\n\t\tif bp, ok := dbp.breakpoints.M[pc-uint64(dbp.bi.Arch.BreakpointSize())]; ok {\n\t\t\treturn bp, true\n\t\t}\n\t}\n\t// Directly use addr to lookup breakpoint.\n\tif bp, ok := dbp.breakpoints.M[pc]; ok {\n\t\treturn bp, true\n\t}\n\treturn nil, false\n}\n\nfunc (dbp *nativeProcess) initializeBasic() (string, error) {\n\tcmdline, err := initialize(dbp)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif err := dbp.updateThreadList(); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn cmdline, nil\n}\n\n// initialize will ensure that all relevant information is loaded\n// so the process is ready to be debugged.\nfunc (dbp *nativeProcess) initialize(path string, debugInfoDirs []string) (*proc.TargetGroup, error) {\n\tcmdline, err := dbp.initializeBasic()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tstopReason := proc.StopLaunched\n\tif !dbp.childProcess {\n\t\tstopReason = proc.StopAttached\n\t}\n\tprocgrp := &processGroup{}\n\tgrp, addTarget := proc.NewGroup(procgrp, proc.NewTargetGroupConfig{\n\t\tDebugInfoDirs: debugInfoDirs,\n\n\t\t// We disable asyncpreempt for the following reasons:\n\t\t//  - on Windows asyncpreempt is incompatible with debuggers, see:\n\t\t//    https://github.com/golang/go/issues/36494\n\t\t//  - on linux/arm64 asyncpreempt can sometimes restart a sequence of\n\t\t//    instructions, if the sequence happens to contain a breakpoint it will\n\t\t//    look like the breakpoint was hit twice when it was \"logically\" only\n\t\t//    executed once.\n\t\t//    See: https://go-review.googlesource.com/c/go/+/208126\n\t\t//\t- on linux/ppc64le according to @laboger, they had issues in the past\n\t\t//\t  with gdb once AsyncPreempt was enabled. While implementing the port,\n\t\t//\t  few tests failed while it was enabled, but cannot be warrantied that\n\t\t//\t  disabling it fixed the issues.\n\t\t//  - on linux/loong64 asyncpreempt can sometimes restart a sequence of\n\t\t//    instructions, if the sequence happens to contain a breakpoint it will\n\t\t//    look like the breakpoint was hit twice when it was \"logically\" only\n\t\t//    executed once.\n\t\tDisableAsyncPreempt: runtime.GOOS == \"windows\" || (runtime.GOOS == \"linux\" && runtime.GOARCH == \"arm64\") || (runtime.GOOS == \"linux\" && runtime.GOARCH == \"ppc64le\") || (runtime.GOOS == \"linux\" && runtime.GOARCH == \"loong64\"),\n\n\t\tStopReason: stopReason,\n\t\tCanDump:    runtime.GOOS == \"linux\" || runtime.GOOS == \"freebsd\" || (runtime.GOOS == \"windows\" && runtime.GOARCH == \"amd64\"),\n\t})\n\tprocgrp.addTarget = addTarget\n\ttgt, err := procgrp.add(dbp, dbp.pid, dbp.memthread, path, stopReason, cmdline)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif dbp.bi.Arch.Name == \"arm64\" || dbp.bi.Arch.Name == \"ppc64le\" || dbp.bi.Arch.Name == \"riscv64\" || dbp.bi.Arch.Name == \"loong64\" {\n\t\tif len(dbp.bi.Images) > 0 && dbp.bi.Images[0].IsGo {\n\t\t\tdbp.iscgo = tgt.IsCgo()\n\t\t}\n\t}\n\treturn grp, nil\n}\n\nfunc (pt *ptraceThread) handlePtraceFuncs() {\n\t// We must ensure here that we are running on the same thread during\n\t// while invoking the ptrace(2) syscall. This is due to the fact that ptrace(2) expects\n\t// all commands after PTRACE_ATTACH to come from the same thread.\n\truntime.LockOSThread()\n\n\t// Leaving the OS thread locked currently leads to segfaults in the\n\t// Go runtime while running on FreeBSD and OpenBSD:\n\t//   https://github.com/golang/go/issues/52394\n\tif runtime.GOOS == \"freebsd\" || runtime.GOOS == \"openbsd\" {\n\t\tdefer runtime.UnlockOSThread()\n\t}\n\n\tfor fn := range pt.ptraceChan {\n\t\tfn()\n\t\tpt.ptraceDoneChan <- nil\n\t}\n\tclose(pt.ptraceDoneChan)\n}\n\nfunc (dbp *nativeProcess) execPtraceFunc(fn func()) {\n\tdbp.ptraceThread.ptraceChan <- fn\n\t<-dbp.ptraceThread.ptraceDoneChan\n}\n\nfunc (dbp *nativeProcess) postExit() {\n\tdbp.exited.Store(true)\n\tdbp.ptraceThread.release()\n\tdbp.bi.Close()\n\tif dbp.ctty != nil {\n\t\tdbp.ctty.Close()\n\t}\n\tdbp.os.Close()\n}\n\nfunc (dbp *nativeProcess) writeSoftwareBreakpoint(thread *nativeThread, addr uint64) error {\n\t_, err := thread.WriteMemory(addr, dbp.bi.Arch.BreakpointInstruction())\n\treturn err\n}\n\nfunc openRedirects(stdinPath string, stdoutOR proc.OutputRedirect, stderrOR proc.OutputRedirect, foreground bool) (stdin, stdout, stderr *os.File, closefn func(), err error) {\n\ttoclose := []*os.File{}\n\n\tif stdinPath != \"\" {\n\t\tstdin, err = os.Open(stdinPath)\n\t\tif err != nil {\n\t\t\treturn nil, nil, nil, nil, err\n\t\t}\n\t\ttoclose = append(toclose, stdin)\n\t} else if foreground {\n\t\tstdin = os.Stdin\n\t}\n\n\tcreate := func(redirect proc.OutputRedirect, dflt *os.File) (f *os.File) {\n\t\tif redirect.Path != \"\" {\n\t\t\tf, err = os.Create(redirect.Path)\n\t\t\tif f != nil {\n\t\t\t\ttoclose = append(toclose, f)\n\t\t\t}\n\n\t\t\treturn f\n\t\t} else if redirect.File != nil {\n\t\t\ttoclose = append(toclose, redirect.File)\n\n\t\t\treturn redirect.File\n\t\t}\n\n\t\treturn dflt\n\t}\n\n\tstdout = create(stdoutOR, os.Stdout)\n\tif err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\n\tstderr = create(stderrOR, os.Stderr)\n\tif err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\n\tclosefn = func() {\n\t\tfor _, f := range toclose {\n\t\t\t_ = f.Close()\n\t\t}\n\t}\n\n\treturn stdin, stdout, stderr, closefn, nil\n}\n\ntype ptraceThread struct {\n\tptraceRefCnt   int\n\tptraceChan     chan func()\n\tptraceDoneChan chan any\n}\n\nfunc newPtraceThread() *ptraceThread {\n\tpt := &ptraceThread{\n\t\tptraceChan:     make(chan func()),\n\t\tptraceDoneChan: make(chan any),\n\t\tptraceRefCnt:   1,\n\t}\n\tgo pt.handlePtraceFuncs()\n\treturn pt\n}\n\nfunc (pt *ptraceThread) acquire() *ptraceThread {\n\tpt.ptraceRefCnt++\n\treturn pt\n}\n\nfunc (pt *ptraceThread) release() {\n\tpt.ptraceRefCnt--\n\tif pt.ptraceRefCnt == 0 {\n\t\tclose(pt.ptraceChan)\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/native/proc_darwin.c",
    "content": "//+build darwin,macnative\n\n#include \"proc_darwin.h\"\n\nstatic const unsigned char info_plist[]\n__attribute__ ((section (\"__TEXT,__info_plist\"),used)) =\n\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?>\\n\"\n\"<!DOCTYPE plist PUBLIC \\\"-//Apple Computer//DTD PLIST 1.0//EN\\\"\"\n\" \\\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\\\">\\n\"\n\"<plist version=\\\"1.0\\\">\\n\"\n\"<dict>\\n\"\n\"  <key>CFBundleIdentifier</key>\\n\"\n\"  <string>org.dlv</string>\\n\"\n\"  <key>CFBundleName</key>\\n\"\n\"  <string>delve</string>\\n\"\n\"  <key>CFBundleVersion</key>\\n\"\n\"  <string>1.0</string>\\n\"\n\"  <key>SecTaskAccess</key>\\n\"\n\"  <array>\\n\"\n\"    <string>allowed</string>\\n\"\n\"    <string>debug</string>\\n\"\n\"  </array>\\n\"\n\"</dict>\\n\"\n\"</plist>\\n\";\n\nkern_return_t\nacquire_mach_task(int tid,\n\t\ttask_t *task,\n\t\tmach_port_t *port_set,\n\t\tmach_port_t *exception_port,\n\t\tmach_port_t *notification_port)\n{\n\tkern_return_t kret;\n\tmach_port_t prev_not;\n\tmach_port_t self = mach_task_self();\n\n\tkret = task_for_pid(self, tid, task);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\t// Allocate exception port.\n\tkret = mach_port_allocate(self, MACH_PORT_RIGHT_RECEIVE, exception_port);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\tkret = mach_port_insert_right(self, *exception_port, *exception_port, MACH_MSG_TYPE_MAKE_SEND);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\tkret = task_set_exception_ports(*task, EXC_MASK_BREAKPOINT|EXC_MASK_SOFTWARE, *exception_port,\n\t\t\tEXCEPTION_DEFAULT, THREAD_STATE_NONE);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\t// Allocate notification port to alert of when the process dies.\n\tkret = mach_port_allocate(self, MACH_PORT_RIGHT_RECEIVE, notification_port);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\tkret = mach_port_insert_right(self, *notification_port, *notification_port, MACH_MSG_TYPE_MAKE_SEND);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\tkret = mach_port_request_notification(self, *task, MACH_NOTIFY_DEAD_NAME, 0, *notification_port,\n\t\t\tMACH_MSG_TYPE_MAKE_SEND_ONCE, &prev_not);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\t// Create port set.\n\tkret = mach_port_allocate(self, MACH_PORT_RIGHT_PORT_SET, port_set);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\t// Move exception and notification ports to port set.\n\tkret = mach_port_move_member(self, *exception_port, *port_set);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\treturn mach_port_move_member(self, *notification_port, *port_set);\n}\n\nkern_return_t\nreset_exception_ports(task_t task, mach_port_t *exception_port, mach_port_t *notification_port) {\n\tkern_return_t kret;\n\tmach_port_t prev_not;\n\tmach_port_t self = mach_task_self();\n\t\n\tkret = task_set_exception_ports(task, EXC_MASK_BREAKPOINT|EXC_MASK_SOFTWARE, *exception_port,\n\t\t\tEXCEPTION_DEFAULT, THREAD_STATE_NONE);\n\tif (kret != KERN_SUCCESS) return kret;\n\t\n\tkret = mach_port_request_notification(self, task, MACH_NOTIFY_DEAD_NAME, 0, *notification_port,\n\t\t\tMACH_MSG_TYPE_MAKE_SEND_ONCE, &prev_not);\n\tif (kret != KERN_SUCCESS) return kret;\n\t\n\treturn KERN_SUCCESS;\n}\n\nchar *\nfind_executable(int pid) {\n\tstatic char pathbuf[PATH_MAX];\n\tproc_pidpath(pid, pathbuf, PATH_MAX);\n\treturn pathbuf;\n}\n\nkern_return_t\nget_threads(task_t task, void *slice, int limit) {\n\tkern_return_t kret;\n\tthread_act_array_t list;\n\tmach_msg_type_number_t count;\n\n\tkret = task_threads(task, &list, &count);\n\tif (kret != KERN_SUCCESS) {\n\t\treturn kret;\n\t}\n\n\tif (count > limit) {\n\t\tvm_deallocate(mach_task_self(), (vm_address_t) list, count * sizeof(list[0]));\n\t\treturn -2;\n\t}\n\n\tmemcpy(slice, (void*)list, count*sizeof(list[0]));\n\n\tkret = vm_deallocate(mach_task_self(), (vm_address_t) list, count * sizeof(list[0]));\n\tif (kret != KERN_SUCCESS) return kret;\n\n\treturn (kern_return_t)0;\n}\n\nint\nthread_count(task_t task) {\n\tkern_return_t kret;\n\tthread_act_array_t list;\n\tmach_msg_type_number_t count;\n\n\tkret = task_threads(task, &list, &count);\n\tif (kret != KERN_SUCCESS) return -1;\n\n\tkret = vm_deallocate(mach_task_self(), (vm_address_t) list, count * sizeof(list[0]));\n\tif (kret != KERN_SUCCESS) return -1;\n\n\treturn count;\n}\n\nmach_port_t\nmach_port_wait(mach_port_t port_set, task_t *task, int nonblocking) {\n\tkern_return_t kret;\n\tthread_act_t thread;\n\tNDR_record_t *ndr;\n\tinteger_t *data;\n\tunion\n\t{\n\t\tmach_msg_header_t hdr;\n\t\tchar data[256];\n\t} msg;\n\tmach_msg_option_t opts = MACH_RCV_MSG|MACH_RCV_INTERRUPT;\n\tif (nonblocking) {\n\t\topts |= MACH_RCV_TIMEOUT;\n\t}\n\n\t// Wait for mach msg.\n\tkret = mach_msg(&msg.hdr, opts,\n\t\t\t0, sizeof(msg.data), port_set, 10, MACH_PORT_NULL);\n\tif (kret == MACH_RCV_INTERRUPTED) return kret;\n\tif (kret != MACH_MSG_SUCCESS) return 0;\n\n\n\tswitch (msg.hdr.msgh_id) {\n\t\tcase 2401: { // Exception\n\t\t\t// 2401 is the exception_raise event, defined in:\n\t\t\t// https://opensource.apple.com/source/xnu/xnu-2422.1.72/osfmk/mach/exc.defs?txt\n\t\t\t// compile this file with mig to get the C version of the description\n\t\t\t\n\t\t\tmach_msg_body_t *bod = (mach_msg_body_t*)(&msg.hdr + 1);\n\t\t\tmach_msg_port_descriptor_t *desc = (mach_msg_port_descriptor_t *)(bod + 1);\n\t\t\tthread = desc[0].name;\n\t\t\t*task = desc[1].name;\n\t\t\tndr = (NDR_record_t *)(desc + 2);\n\t\t\tdata = (integer_t *)(ndr + 1);\n\n\t\t\tif (thread_suspend(thread) != KERN_SUCCESS) return 0;\n\t\t\t// Send our reply back so the kernel knows this exception has been handled.\n\t\t\tkret = mach_send_reply(msg.hdr);\n\t\t\tif (kret != MACH_MSG_SUCCESS) return 0;\n\t\t\tif (data[2] == EXC_SOFT_SIGNAL) {\n\t\t\t\tif (data[3] != SIGTRAP) {\n\t\t\t\t\tif (thread_resume(thread) != KERN_SUCCESS) return 0;\n\t\t\t\t\treturn mach_port_wait(port_set, task, nonblocking);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn thread;\n\t\t}\n\n\t\tcase 72: { // Death\n\t\t\t// 72 is mach_notify_dead_name, defined in:\n\t\t\t// https://opensource.apple.com/source/xnu/xnu-1228.7.58/osfmk/mach/notify.defs?txt\n\t\t\t// compile this file with mig to get the C version of the description\n\t\t\tndr = (NDR_record_t *)(&msg.hdr + 1);\n\t\t\t*task = *((mach_port_name_t *)(ndr + 1));\n\t\t\treturn msg.hdr.msgh_local_port;\n\t\t}\n\t}\n\treturn 0;\n}\n\nkern_return_t\nmach_send_reply(mach_msg_header_t hdr) {\n\tmig_reply_error_t reply;\n\tmach_msg_header_t *rh = &reply.Head;\n\trh->msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REMOTE(hdr.msgh_bits), 0);\n\trh->msgh_remote_port = hdr.msgh_remote_port;\n\trh->msgh_size = (mach_msg_size_t) sizeof(mig_reply_error_t);\n\trh->msgh_local_port = MACH_PORT_NULL;\n\trh->msgh_id = hdr.msgh_id + 100;\n\n\treply.NDR = NDR_record;\n\treply.RetCode = KERN_SUCCESS;\n\n\treturn mach_msg(&reply.Head, MACH_SEND_MSG|MACH_SEND_INTERRUPT, rh->msgh_size, 0,\n\t\t\tMACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);\n}\n\nkern_return_t\nraise_exception(mach_port_t task, mach_port_t thread, mach_port_t exception_port, exception_type_t exception) {\n\treturn exception_raise(exception_port, thread, task, exception, 0, 0);\n}\n\ntask_t\nget_task_for_pid(int pid) {\n\ttask_t task = 0;\n\tmach_port_t self = mach_task_self();\n\n\ttask_for_pid(self, pid, &task);\n\treturn task;\n}\n\nint\ntask_is_valid(task_t task) {\n\tstruct task_basic_info info;\n\tmach_msg_type_number_t count = TASK_BASIC_INFO_COUNT;\n\treturn task_info(task, TASK_BASIC_INFO, (task_info_t)&info, &count) == KERN_SUCCESS;\n}\n"
  },
  {
    "path": "pkg/proc/native/proc_darwin.go",
    "content": "//go:build darwin && macnative\n\npackage native\n\n// #include \"proc_darwin.h\"\n// #include \"threads_darwin.h\"\n// #include \"exec_darwin.h\"\n// #include <stdlib.h>\nimport \"C\"\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n\t\"github.com/go-delve/delve/pkg/proc/macutil\"\n)\n\n// osProcessDetails holds Darwin specific information.\ntype osProcessDetails struct {\n\ttask             C.task_t      // mach task for the debugged process.\n\texceptionPort    C.mach_port_t // mach port for receiving mach exceptions.\n\tnotificationPort C.mach_port_t // mach port for dead name notification (process exit).\n\tinitialized      bool\n\thalt             bool\n\n\t// the main port we use, will return messages from both the\n\t// exception and notification ports.\n\tportSet C.mach_port_t\n}\n\nfunc (os *osProcessDetails) Close() {}\n\n// Launch creates and begins debugging a new process. Uses a\n// custom fork/exec process in order to take advantage of\n// PT_SIGEXC on Darwin which will turn Unix signals into\n// Mach exceptions.\nfunc Launch(cmd []string, wd string, flags proc.LaunchFlags, _ []string, _ string, _ string, _ proc.OutputRedirect, _ proc.OutputRedirect) (*proc.TargetGroup, error) {\n\targv0Go, err := filepath.Abs(cmd[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t// Make sure the binary exists.\n\tif filepath.Base(cmd[0]) == cmd[0] {\n\t\tif _, err := exec.LookPath(cmd[0]); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif _, err := os.Stat(argv0Go); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := macutil.CheckRosetta(); err != nil {\n\t\treturn nil, err\n\t}\n\n\targv0 := C.CString(argv0Go)\n\tdefer C.free(unsafe.Pointer(argv0))\n\targvSlice := make([]*C.char, 0, len(cmd)+1)\n\tfor _, arg := range cmd {\n\t\targvSlice = append(argvSlice, C.CString(arg))\n\t}\n\t// argv array must be null terminated.\n\targvSlice = append(argvSlice, nil)\n\n\tdbp := newProcess(0)\n\tdefer func() {\n\t\tif err != nil && dbp.pid != 0 {\n\t\t\t_ = detachWithoutGroup(dbp, true)\n\t\t}\n\t}()\n\tvar pid int\n\tdbp.execPtraceFunc(func() {\n\t\twd := C.CString(wd)\n\t\tdefer C.free(unsafe.Pointer(wd))\n\t\tret := C.fork_exec(argv0, &argvSlice[0], C.int(len(argvSlice)),\n\t\t\twd,\n\t\t\t&dbp.os.task, &dbp.os.portSet, &dbp.os.exceptionPort,\n\t\t\t&dbp.os.notificationPort)\n\t\tpid = int(ret)\n\t})\n\tif pid <= 0 {\n\t\treturn nil, fmt.Errorf(\"could not fork/exec\")\n\t}\n\tdbp.pid = pid\n\tdbp.childProcess = true\n\tfor i := range argvSlice {\n\t\tC.free(unsafe.Pointer(argvSlice[i]))\n\t}\n\n\t// Initialize enough of the Process state so that we can use resume and\n\t// trapWait to wait until the child process calls execve.\n\n\tfor {\n\t\ttask := C.get_task_for_pid(C.int(dbp.pid))\n\t\t// The task_for_pid call races with the fork call. This can\n\t\t// result in the parent task being returned instead of the child.\n\t\tif task != dbp.os.task {\n\t\t\terr = dbp.updateThreadListForTask(task)\n\t\t\tif err == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif err != couldNotGetThreadCount && err != couldNotGetThreadList {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\n\tprocgrp := &processGroup{procs: []*nativeProcess{dbp}}\n\tif err := procgrp.resume(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, th := range dbp.threads {\n\t\tth.CurrentBreakpoint.Clear()\n\t}\n\n\ttrapthread, err := dbp.trapWait(-1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif _, err := dbp.stop(nil); err != nil {\n\t\treturn nil, err\n\t}\n\n\tdbp.os.initialized = true\n\tdbp.memthread = trapthread\n\n\ttgt, err := dbp.initialize(argv0Go, []string{})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn tgt, err\n}\n\nfunc waitForSearchProcess(string, map[int]struct{}) (int, error) {\n\treturn 0, proc.ErrWaitForNotImplemented\n}\n\n// Attach to an existing process with the given PID.\nfunc Attach(pid int, waitFor *proc.WaitFor, _ []string) (*proc.TargetGroup, error) {\n\tif waitFor.Valid() {\n\t\treturn nil, proc.ErrWaitForNotImplemented\n\t}\n\tif err := macutil.CheckRosetta(); err != nil {\n\t\treturn nil, err\n\t}\n\tdbp := newProcess(pid)\n\n\tkret := C.acquire_mach_task(C.int(pid),\n\t\t&dbp.os.task, &dbp.os.portSet, &dbp.os.exceptionPort,\n\t\t&dbp.os.notificationPort)\n\n\tif kret != C.KERN_SUCCESS {\n\t\treturn nil, fmt.Errorf(\"could not attach to %d\", pid)\n\t}\n\n\tdbp.os.initialized = true\n\n\tvar err error\n\tdbp.execPtraceFunc(func() { err = ptraceAttach(dbp.pid) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t_, _, err = dbp.wait(dbp.pid, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttgt, err := dbp.initialize(\"\", []string{})\n\tif err != nil {\n\t\tdetachWithoutGroup(dbp, false)\n\t\treturn nil, err\n\t}\n\treturn tgt, nil\n}\n\n// Kill kills the process.\nfunc (procgrp *processGroup) kill(dbp *nativeProcess) (err error) {\n\tif ok, _ := dbp.Valid(); !ok {\n\t\treturn nil\n\t}\n\terr = sys.Kill(-dbp.pid, sys.SIGKILL)\n\tif err != nil {\n\t\treturn errors.New(\"could not deliver signal: \" + err.Error())\n\t}\n\tfor port := range dbp.threads {\n\t\tif C.thread_resume(C.thread_act_t(port)) != C.KERN_SUCCESS {\n\t\t\treturn errors.New(\"could not resume task\")\n\t\t}\n\t}\n\tfor {\n\t\tvar task C.task_t\n\t\tport := C.mach_port_wait(dbp.os.portSet, &task, C.int(0))\n\t\tif port == dbp.os.notificationPort {\n\t\t\tbreak\n\t\t}\n\t}\n\tdbp.postExit()\n\treturn\n}\n\nfunc (dbp *nativeProcess) requestManualStop() (err error) {\n\tvar (\n\t\ttask          = C.mach_port_t(dbp.os.task)\n\t\tthread        = C.mach_port_t(dbp.memthread.os.threadAct)\n\t\texceptionPort = C.mach_port_t(dbp.os.exceptionPort)\n\t)\n\tdbp.os.halt = true\n\tkret := C.raise_exception(task, thread, exceptionPort, C.EXC_BREAKPOINT)\n\tif kret != C.KERN_SUCCESS {\n\t\treturn fmt.Errorf(\"could not raise mach exception\")\n\t}\n\treturn nil\n}\n\nvar couldNotGetThreadCount = errors.New(\"could not get thread count\")\nvar couldNotGetThreadList = errors.New(\"could not get thread list\")\n\nfunc (dbp *nativeProcess) updateThreadList() error {\n\treturn dbp.updateThreadListForTask(dbp.os.task)\n}\n\nfunc (dbp *nativeProcess) updateThreadListForTask(task C.task_t) error {\n\tvar (\n\t\terr   error\n\t\tkret  C.kern_return_t\n\t\tcount C.int\n\t\tlist  []uint32\n\t)\n\n\tfor {\n\t\tcount = C.thread_count(task)\n\t\tif count == -1 {\n\t\t\treturn couldNotGetThreadCount\n\t\t}\n\t\tlist = make([]uint32, count)\n\n\t\t// TODO(dp) might be better to malloc mem in C and then free it here\n\t\t// instead of getting count above and passing in a slice\n\t\tkret = C.get_threads(task, unsafe.Pointer(&list[0]), count)\n\t\tif kret != -2 {\n\t\t\tbreak\n\t\t}\n\t}\n\tif kret != C.KERN_SUCCESS {\n\t\treturn couldNotGetThreadList\n\t}\n\n\tfor _, thread := range dbp.threads {\n\t\tthread.os.exists = false\n\t}\n\n\tfor _, port := range list {\n\t\tthread, ok := dbp.threads[int(port)]\n\t\tif !ok {\n\t\t\tthread, err = dbp.addThread(int(port), false)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tthread.os.exists = true\n\t}\n\n\tfor threadID, thread := range dbp.threads {\n\t\tif !thread.os.exists {\n\t\t\tdelete(dbp.threads, threadID)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (dbp *nativeProcess) addThread(port int, attach bool) (*nativeThread, error) {\n\tif thread, ok := dbp.threads[port]; ok {\n\t\treturn thread, nil\n\t}\n\tthread := &nativeThread{\n\t\tID:  port,\n\t\tdbp: dbp,\n\t\tos:  new(osSpecificDetails),\n\t}\n\tdbp.threads[port] = thread\n\tthread.os.threadAct = C.thread_act_t(port)\n\tif dbp.memthread == nil {\n\t\tdbp.memthread = thread\n\t}\n\treturn thread, nil\n}\n\nfunc findExecutable(path string, pid int) string {\n\tif path == \"\" {\n\t\tpath = C.GoString(C.find_executable(C.int(pid)))\n\t}\n\treturn path\n}\n\nfunc trapWait(procgrp *processGroup, pid int) (*nativeThread, error) {\n\treturn procgrp.procs[0].trapWait(pid)\n}\n\nfunc (dbp *nativeProcess) trapWait(pid int) (*nativeThread, error) {\n\tfor {\n\t\ttask := dbp.os.task\n\t\tport := C.mach_port_wait(dbp.os.portSet, &task, C.int(0))\n\n\t\tswitch port {\n\t\tcase dbp.os.notificationPort:\n\t\t\t// on macOS >= 10.12.1 the task_t changes after an execve, we could\n\t\t\t// receive the notification for the death of the pre-execve task_t,\n\t\t\t// this could also happen *before* we are notified that our task_t has\n\t\t\t// changed.\n\t\t\tif dbp.os.task != task {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !dbp.os.initialized {\n\t\t\t\tif pidtask := C.get_task_for_pid(C.int(dbp.pid)); pidtask != 0 && dbp.os.task != pidtask {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\t_, status, err := dbp.wait(dbp.pid, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tdbp.postExit()\n\t\t\treturn nil, proc.ErrProcessExited{Pid: dbp.pid, Status: status.ExitStatus()}\n\n\t\tcase C.MACH_RCV_INTERRUPTED:\n\t\t\thalt := dbp.os.halt\n\t\t\tif !halt {\n\t\t\t\t// Call trapWait again, it seems\n\t\t\t\t// MACH_RCV_INTERRUPTED is emitted before\n\t\t\t\t// process natural death _sometimes_.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, nil\n\n\t\tcase 0:\n\t\t\treturn nil, fmt.Errorf(\"error while waiting for task\")\n\t\t}\n\n\t\t// In macOS 10.12.1 if we received a notification for a task other than\n\t\t// the inferior's task and the inferior's task is no longer valid, this\n\t\t// means inferior called execve and its task_t changed.\n\t\tif dbp.os.task != task && C.task_is_valid(dbp.os.task) == 0 {\n\t\t\tdbp.os.task = task\n\t\t\tkret := C.reset_exception_ports(dbp.os.task, &dbp.os.exceptionPort, &dbp.os.notificationPort)\n\t\t\tif kret != C.KERN_SUCCESS {\n\t\t\t\treturn nil, fmt.Errorf(\"could not follow task across exec: %d\\n\", kret)\n\t\t\t}\n\t\t}\n\n\t\t// Since we cannot be notified of new threads on OS X\n\t\t// this is as good a time as any to check for them.\n\t\tdbp.updateThreadList()\n\t\tth, ok := dbp.threads[int(port)]\n\t\tif !ok {\n\t\t\thalt := dbp.os.halt\n\t\t\tif halt {\n\t\t\t\tdbp.os.halt = false\n\t\t\t\treturn th, nil\n\t\t\t}\n\t\t\tif dbp.firstStart || th.singleStepping {\n\t\t\t\tdbp.firstStart = false\n\t\t\t\treturn th, nil\n\t\t\t}\n\t\t\tif err := th.resume(); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\treturn th, nil\n\t}\n}\n\nfunc (dbp *nativeProcess) waitForStop() ([]int, error) {\n\tports := make([]int, 0, len(dbp.threads))\n\tcount := 0\n\tfor {\n\t\tvar task C.task_t\n\t\tport := C.mach_port_wait(dbp.os.portSet, &task, C.int(1))\n\t\tif port != 0 && port != dbp.os.notificationPort && port != C.MACH_RCV_INTERRUPTED {\n\t\t\tcount = 0\n\t\t\tports = append(ports, int(port))\n\t\t} else {\n\t\t\tn := C.num_running_threads(dbp.os.task)\n\t\t\tif n == 0 {\n\t\t\t\treturn ports, nil\n\t\t\t} else if n < 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"error waiting for thread stop %d\", n)\n\t\t\t} else if count > 16 {\n\t\t\t\treturn nil, fmt.Errorf(\"could not stop process %d\", n)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (dbp *nativeProcess) wait(pid, options int) (int, *sys.WaitStatus, error) {\n\tvar status sys.WaitStatus\n\twpid, err := sys.Wait4(pid, &status, options, nil)\n\treturn wpid, &status, err\n}\n\nfunc killProcess(pid int) error {\n\treturn sys.Kill(pid, sys.SIGINT)\n}\n\nfunc (dbp *nativeProcess) exitGuard(err error) error {\n\tif err != ErrContinueThread {\n\t\treturn err\n\t}\n\t_, status, werr := dbp.wait(dbp.pid, sys.WNOHANG)\n\tif werr == nil && status.Exited() {\n\t\tdbp.postExit()\n\t\treturn proc.ErrProcessExited{Pid: dbp.pid, Status: status.ExitStatus()}\n\t}\n\treturn err\n}\n\nfunc (procgrp *processGroup) resume() error {\n\tdbp := procgrp.procs[0]\n\t// all threads stopped over a breakpoint are made to step over it\n\tfor _, thread := range dbp.threads {\n\t\tif thread.CurrentBreakpoint.Breakpoint != nil {\n\t\t\tif err := procgrp.stepInstruction(thread); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tthread.CurrentBreakpoint.Clear()\n\t\t}\n\t}\n\t// everything is resumed\n\tfor _, thread := range dbp.threads {\n\t\tif err := thread.resume(); err != nil {\n\t\t\treturn dbp.exitGuard(err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// stop stops all running threads and sets breakpoints\nfunc (procgrp *processGroup) stop(cctx *proc.ContinueOnceContext, trapthread *nativeThread) (*nativeThread, error) {\n\treturn procgrp.procs[0].stop(trapthread)\n}\n\nfunc (dbp *nativeProcess) stop(trapthread *nativeThread) (*nativeThread, error) {\n\tif ok, err := dbp.Valid(); !ok {\n\t\treturn nil, err\n\t}\n\tfor _, th := range dbp.threads {\n\t\tif !th.Stopped() {\n\t\t\tif err := th.stop(); err != nil {\n\t\t\t\treturn nil, dbp.exitGuard(err)\n\t\t\t}\n\t\t}\n\t}\n\n\tports, err := dbp.waitForStop()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !dbp.os.initialized {\n\t\treturn nil, nil\n\t}\n\ttrapthread.SetCurrentBreakpoint(true)\n\tfor _, port := range ports {\n\t\tif th, ok := dbp.threads[port]; ok {\n\t\t\terr := th.SetCurrentBreakpoint(true)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\treturn trapthread, nil\n}\n\nfunc (dbp *nativeProcess) detach(kill bool) error {\n\treturn ptraceDetach(dbp.pid, 0)\n}\n\nfunc (dbp *nativeProcess) EntryPoint() (uint64, error) {\n\t//TODO(aarzilli): implement this\n\treturn 0, nil\n}\n\nfunc (dbp *nativeProcess) SupportsBPF() bool {\n\treturn false\n}\n\nfunc (dbp *nativeProcess) SetUProbe(fnName string, goidOffset int64, args []ebpf.UProbeArgMap) error {\n\tpanic(\"not implemented\")\n}\n\nfunc (dbp *nativeProcess) GetBufferedTracepoints() []ebpf.RawUProbeParams {\n\tpanic(\"not implemented\")\n}\n\nfunc initialize(dbp *nativeProcess) (string, error) { return \"\", nil }\n"
  },
  {
    "path": "pkg/proc/native/proc_darwin.h",
    "content": "//+build darwin,macnative\n\n#include <sys/types.h>\n#include <libproc.h>\n#include <mach/mach.h>\n#include <mach/mach_vm.h>\n#include \"mach_exc.h\"\n#include \"exc.h\"\n\n#ifdef\tmig_external\nmig_external\n#else\nextern\n#endif\t/* mig_external */\nboolean_t exc_server(\n\t\tmach_msg_header_t *InHeadP,\n\t\tmach_msg_header_t *OutHeadP);\n\n#ifdef\tmig_external\nmig_external\n#else\nextern\n#endif\t/* mig_external */\nboolean_t mach_exc_server(\n\t\tmach_msg_header_t *InHeadP,\n\t\tmach_msg_header_t *OutHeadP);\n\nkern_return_t\nacquire_mach_task(int, task_t*, mach_port_t*, mach_port_t*, mach_port_t*);\n\nchar *\nfind_executable(int pid);\n\nkern_return_t\nget_threads(task_t task, void *data,int limit);\n\nint\nthread_count(task_t task);\n\nmach_port_t\nmach_port_wait(mach_port_t, task_t*, int);\n\nkern_return_t\nmach_send_reply(mach_msg_header_t);\n\nkern_return_t\nraise_exception(mach_port_t, mach_port_t, mach_port_t, exception_type_t);\n\nkern_return_t\nreset_exception_ports(task_t task, mach_port_t *exception_port, mach_port_t *notification_port);\n\ntask_t\nget_task_for_pid(int pid);\n\nint\ntask_is_valid(task_t task);\n"
  },
  {
    "path": "pkg/proc/native/proc_ebpf_linux.go",
    "content": "//go:build linux && amd64 && cgo && go1.16\n\npackage native\n\nfunc (dbp *nativeProcess) SupportsBPF() bool {\n\treturn true\n}\n"
  },
  {
    "path": "pkg/proc/native/proc_freebsd.go",
    "content": "package native\n\n/*\n#cgo LDFLAGS: -lprocstat\n\n#include <sys/types.h>\n#include <sys/sysctl.h>\n#include <sys/user.h>\n\n#include <limits.h>\n#include <stdlib.h>\n\n#include <libprocstat.h>\n#include <libutil.h>\n\nuintptr_t elf_aux_info_ptr(Elf_Auxinfo *aux_info) {\n\treturn (uintptr_t)aux_info->a_un.a_ptr;\n}\n*/\nimport \"C\"\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os/exec\"\n\t\"os/signal\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n\n\tisatty \"github.com/mattn/go-isatty\"\n)\n\nconst (\n\t_PL_FLAG_BORN   = 0x100\n\t_PL_FLAG_EXITED = 0x200\n\t_PL_FLAG_SI     = 0x20\n)\n\n// Process statuses\nconst (\n\tstatusIdle     = 1\n\tstatusRunning  = 2\n\tstatusSleeping = 3\n\tstatusStopped  = 4\n\tstatusZombie   = 5\n\tstatusWaiting  = 6\n\tstatusLocked   = 7\n)\n\n// osProcessDetails contains FreeBSD specific\n// process details.\ntype osProcessDetails struct {\n\tcomm string\n\ttid  int\n\n\tdelayedSignal  syscall.Signal\n\ttrapThreads    []int\n\tselectedThread *nativeThread\n}\n\nfunc (os *osProcessDetails) Close() {}\n\n// Launch creates and begins debugging a new process. First entry in\n// `cmd` is the program to run, and then rest are the arguments\n// to be supplied to that process. `wd` is working directory of the program.\n// If the DWARF information cannot be found in the binary, Delve will look\n// for external debug files in the directories passed in.\nfunc Launch(cmd []string, wd string, flags proc.LaunchFlags, debugInfoDirs []string, tty string, stdinPath string, stdoutOR proc.OutputRedirect, stderrOR proc.OutputRedirect) (*proc.TargetGroup, error) {\n\tvar (\n\t\tprocess *exec.Cmd\n\t\terr     error\n\t)\n\n\tforeground := flags&proc.LaunchForeground != 0\n\n\tstdin, stdout, stderr, closefn, err := openRedirects(stdinPath, stdoutOR, stderrOR, foreground)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif stdin == nil || !isatty.IsTerminal(stdin.Fd()) {\n\t\t// exec.(*Process).Start will fail if we try to send a process to\n\t\t// foreground but we are not attached to a terminal.\n\t\tforeground = false\n\t}\n\n\tdbp := newProcess(0)\n\tdefer func() {\n\t\tif err != nil && dbp.pid != 0 {\n\t\t\t_ = detachWithoutGroup(dbp, true)\n\t\t}\n\t}()\n\tdbp.execPtraceFunc(func() {\n\t\tprocess = exec.Command(cmd[0])\n\t\tprocess.Args = cmd\n\t\tprocess.Stdin = stdin\n\t\tprocess.Stdout = stdout\n\t\tprocess.Stderr = stderr\n\t\tprocess.SysProcAttr = &syscall.SysProcAttr{Ptrace: true, Setpgid: true, Foreground: foreground}\n\t\tif foreground {\n\t\t\tsignal.Ignore(syscall.SIGTTOU, syscall.SIGTTIN)\n\t\t}\n\t\tif tty != \"\" {\n\t\t\tdbp.ctty, err = attachProcessToTTY(process, tty)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tif wd != \"\" {\n\t\t\tprocess.Dir = wd\n\t\t}\n\t\terr = process.Start()\n\t})\n\tclosefn()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdbp.pid = process.Process.Pid\n\tdbp.childProcess = true\n\t_, _, err = dbp.wait(process.Process.Pid, 0)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"waiting for target execve failed: %s\", err)\n\t}\n\ttgt, err := dbp.initialize(cmd[0], debugInfoDirs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn tgt, nil\n}\n\n// Attach to an existing process with the given PID. Once attached, if\n// the DWARF information cannot be found in the binary, Delve will look\n// for external debug files in the directories passed in.\nfunc Attach(pid int, waitFor *proc.WaitFor, debugInfoDirs []string) (*proc.TargetGroup, error) {\n\tif waitFor.Valid() {\n\t\tvar err error\n\t\tpid, err = WaitFor(waitFor)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tdbp := newProcess(pid)\n\n\tvar err error\n\tdbp.execPtraceFunc(func() { err = ptraceAttach(dbp.pid) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t_, _, err = dbp.wait(dbp.pid, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttgt, err := dbp.initialize(findExecutable(\"\", dbp.pid), debugInfoDirs)\n\tif err != nil {\n\t\tdetachWithoutGroup(dbp, false)\n\t\treturn nil, err\n\t}\n\treturn tgt, nil\n}\n\nfunc waitForSearchProcess(pfx string, seen map[int]struct{}) (int, error) {\n\tlog := logflags.DebuggerLogger()\n\tps := C.procstat_open_sysctl()\n\tdefer C.procstat_close(ps)\n\tvar cnt C.uint\n\tprocs := C.procstat_getprocs(ps, C.KERN_PROC_PROC, 0, &cnt)\n\tdefer C.procstat_freeprocs(ps, procs)\n\tproc := procs\n\tfor i := 0; i < int(cnt); i++ {\n\t\tif _, isseen := seen[int(proc.ki_pid)]; isseen {\n\t\t\tcontinue\n\t\t}\n\t\tseen[int(proc.ki_pid)] = struct{}{}\n\n\t\targv := strings.Join(getCmdLineInternal(ps, proc), \" \")\n\t\tlog.Debugf(\"waitfor: new process %q\", argv)\n\t\tif strings.HasPrefix(argv, pfx) {\n\t\t\treturn int(proc.ki_pid), nil\n\t\t}\n\n\t\tproc = (*C.struct_kinfo_proc)(unsafe.Pointer(uintptr(unsafe.Pointer(proc)) + unsafe.Sizeof(*proc)))\n\t}\n\treturn 0, nil\n}\n\nfunc initialize(dbp *nativeProcess) (string, error) {\n\tkp, err := C.kinfo_getproc(C.int(dbp.pid))\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"kinfo_getproc failed: %v\", err)\n\t}\n\tdefer C.free(unsafe.Pointer(kp))\n\n\tcomm := C.GoString(&kp.ki_comm[0])\n\tdbp.os.comm = strings.ReplaceAll(string(comm), \"%\", \"%%\")\n\n\treturn getCmdLine(dbp.pid), nil\n}\n\n// kill kills the target process.\nfunc (procgrp *processGroup) kill(dbp *nativeProcess) (err error) {\n\tif ok, _ := dbp.Valid(); !ok {\n\t\treturn nil\n\t}\n\tdbp.execPtraceFunc(func() {\n\t\tfor _, th := range dbp.threads {\n\t\t\tptraceResume(th.ID)\n\t\t}\n\t\terr = ptraceCont(dbp.pid, int(sys.SIGKILL))\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tif _, _, err = dbp.wait(dbp.pid, 0); err != nil {\n\t\treturn err\n\t}\n\tdbp.postExit()\n\treturn nil\n}\n\n// Used by RequestManualStop\nfunc (dbp *nativeProcess) requestManualStop() (err error) {\n\treturn sys.Kill(dbp.pid, sys.SIGSTOP)\n}\n\n// Attach to a newly created thread, and store that thread in our list of\n// known threads.\nfunc (dbp *nativeProcess) addThread(tid int, attach bool) (*nativeThread, error) {\n\tif thread, ok := dbp.threads[tid]; ok {\n\t\treturn thread, nil\n\t}\n\n\tvar err error\n\tdbp.execPtraceFunc(func() { err = sys.PtraceLwpEvents(dbp.pid, 1) })\n\tif err == syscall.ESRCH {\n\t\tif _, _, err = dbp.wait(dbp.pid, 0); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error while waiting after adding process: %d %s\", dbp.pid, err)\n\t\t}\n\t}\n\n\tdbp.threads[tid] = &nativeThread{\n\t\tID:  tid,\n\t\tdbp: dbp,\n\t\tos:  new(osSpecificDetails),\n\t}\n\n\tif dbp.memthread == nil {\n\t\tdbp.memthread = dbp.threads[tid]\n\t}\n\n\treturn dbp.threads[tid], nil\n}\n\n// Used by initialize\nfunc (dbp *nativeProcess) updateThreadList() error {\n\tvar tids []int32\n\tdbp.execPtraceFunc(func() { tids = ptraceGetLwpList(dbp.pid) })\n\tfor _, tid := range tids {\n\t\tif _, err := dbp.addThread(int(tid), false); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tdbp.os.tid = int(tids[0])\n\treturn nil\n}\n\nfunc findExecutable(path string, pid int) string {\n\tif path != \"\" {\n\t\treturn path\n\t}\n\n\tps := C.procstat_open_sysctl()\n\tif ps == nil {\n\t\tpanic(\"procstat_open_sysctl failed\")\n\t}\n\tdefer C.procstat_close(ps)\n\n\tkp := C.kinfo_getproc(C.int(pid))\n\tif kp == nil {\n\t\tpanic(\"kinfo_getproc failed\")\n\t}\n\tdefer C.free(unsafe.Pointer(kp))\n\n\tvar pathname [C.PATH_MAX]C.char\n\tif C.procstat_getpathname(ps, kp, (*C.char)(unsafe.Pointer(&pathname[0])), C.PATH_MAX) != 0 {\n\t\tpanic(\"procstat_getpathname failed\")\n\t}\n\n\treturn C.GoString(&pathname[0])\n}\n\nfunc getCmdLine(pid int) string {\n\tps := C.procstat_open_sysctl()\n\tkp := C.kinfo_getproc(C.int(pid))\n\tgoargv := getCmdLineInternal(ps, kp)\n\tC.free(unsafe.Pointer(kp))\n\tC.procstat_close(ps)\n\treturn strings.Join(goargv, \" \")\n}\n\nfunc getCmdLineInternal(ps *C.struct_procstat, kp *C.struct_kinfo_proc) []string {\n\targv := C.procstat_getargv(ps, kp, 0)\n\tif argv == nil {\n\t\treturn nil\n\t}\n\tgoargv := []string{}\n\tfor {\n\t\targ := *argv\n\t\tif arg == nil {\n\t\t\tbreak\n\t\t}\n\t\targv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + unsafe.Sizeof(*argv)))\n\t\tgoargv = append(goargv, C.GoString(arg))\n\t}\n\tC.procstat_freeargv(ps)\n\treturn goargv\n}\n\nfunc trapWait(procgrp *processGroup, pid int) (*nativeThread, error) {\n\treturn procgrp.procs[0].trapWaitInternal(pid, trapWaitNormal)\n}\n\ntype trapWaitMode uint8\n\nconst (\n\ttrapWaitNormal trapWaitMode = iota\n\ttrapWaitStepping\n)\n\n// Used by stop and trapWait\nfunc (dbp *nativeProcess) trapWaitInternal(pid int, mode trapWaitMode) (*nativeThread, error) {\n\tif dbp.os.selectedThread != nil {\n\t\tth := dbp.os.selectedThread\n\t\tdbp.os.selectedThread = nil\n\t\treturn th, nil\n\t}\n\tfor {\n\t\twpid, status, err := dbp.wait(pid, 0)\n\t\tif wpid != dbp.pid {\n\t\t\t// possibly a delayed notification from a process we just detached and killed, freebsd bug?\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"wait err %s %d\", err, pid)\n\t\t}\n\t\tif status.Killed() {\n\t\t\t// \"Killed\" status may arrive as a result of a Process.Kill() of some other process in\n\t\t\t// the system performed by the same tracer (e.g. in the previous test)\n\t\t\tcontinue\n\t\t}\n\t\tif status.Exited() {\n\t\t\tdbp.postExit()\n\t\t\treturn nil, proc.ErrProcessExited{Pid: wpid, Status: status.ExitStatus()}\n\t\t}\n\t\tif status.Signaled() {\n\t\t\t// Killed by a signal\n\t\t\tdbp.postExit()\n\t\t\treturn nil, proc.ErrProcessExited{Pid: wpid, Status: -int(status.Signal())}\n\t\t}\n\n\t\tvar info sys.PtraceLwpInfoStruct\n\t\tdbp.execPtraceFunc(func() { info, err = ptraceGetLwpInfo(wpid) })\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"ptraceGetLwpInfo err %s %d\", err, pid)\n\t\t}\n\t\ttid := int(info.Lwpid)\n\t\tpl_flags := int(info.Flags)\n\t\tth, ok := dbp.threads[tid]\n\t\tif ok {\n\t\t\tth.Status = (*waitStatus)(status)\n\t\t}\n\n\t\tif status.StopSignal() == sys.SIGTRAP {\n\t\t\tif pl_flags&_PL_FLAG_EXITED != 0 {\n\t\t\t\tdelete(dbp.threads, tid)\n\t\t\t\tdbp.execPtraceFunc(func() { err = ptraceCont(tid, 0) })\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t} else if pl_flags&_PL_FLAG_BORN != 0 {\n\t\t\t\tth, err = dbp.addThread(int(tid), false)\n\t\t\t\tif err != nil {\n\t\t\t\t\tif err == sys.ESRCH {\n\t\t\t\t\t\t// process died while we were adding it\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tif mode == trapWaitStepping {\n\t\t\t\t\tdbp.execPtraceFunc(func() { ptraceSuspend(tid) })\n\t\t\t\t}\n\t\t\t\tif err = dbp.ptraceCont(0); err != nil {\n\t\t\t\t\tif err == sys.ESRCH {\n\t\t\t\t\t\t// thread died while we were adding it\n\t\t\t\t\t\tdelete(dbp.threads, int(tid))\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\treturn nil, fmt.Errorf(\"could not continue new thread %d %s\", tid, err)\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif th == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif mode == trapWaitStepping {\n\t\t\treturn th, nil\n\t\t}\n\t\tif status.StopSignal() == sys.SIGTRAP || status.Continued() {\n\t\t\t// Continued in this case means we received the SIGSTOP signal\n\t\t\treturn th, nil\n\t\t}\n\n\t\t// TODO(dp) alert user about unexpected signals here.\n\t\tif err := dbp.ptraceCont(int(status.StopSignal())); err != nil {\n\t\t\tif err == sys.ESRCH {\n\t\t\t\treturn nil, proc.ErrProcessExited{Pid: dbp.pid}\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t}\n}\n\n// status returns the status code for the given process.\nfunc status(pid int) int {\n\tkp, err := C.kinfo_getproc(C.int(pid))\n\tif err != nil {\n\t\treturn -1\n\t}\n\tdefer C.free(unsafe.Pointer(kp))\n\treturn int(kp.ki_stat)\n}\n\n// Only used in this file\nfunc (dbp *nativeProcess) wait(pid, options int) (int, *sys.WaitStatus, error) {\n\tvar s sys.WaitStatus\n\twpid, err := sys.Wait4(pid, &s, options, nil)\n\treturn wpid, &s, err\n}\n\n// Only used in this file\nfunc (dbp *nativeProcess) exitGuard(err error) error {\n\tif err != sys.ESRCH {\n\t\treturn err\n\t}\n\tif status(dbp.pid) == statusZombie {\n\t\t_, err := dbp.trapWaitInternal(-1, trapWaitNormal)\n\t\treturn err\n\t}\n\n\treturn err\n}\n\n// Used by ContinueOnce\nfunc (procgrp *processGroup) resume() error {\n\tdbp := procgrp.procs[0]\n\t// all threads stopped over a breakpoint are made to step over it\n\tfor _, thread := range dbp.threads {\n\t\tif thread.CurrentBreakpoint.Breakpoint != nil {\n\t\t\tif err := procgrp.stepInstruction(thread); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tthread.CurrentBreakpoint.Clear()\n\t\t}\n\t}\n\tif len(dbp.os.trapThreads) > 0 {\n\t\t// On these threads we have already received a SIGTRAP while stepping on a different thread,\n\t\t// do not resume the process, instead record the breakpoint hits on them.\n\t\ttt := dbp.os.trapThreads\n\t\tdbp.os.trapThreads = dbp.os.trapThreads[:0]\n\t\tvar err error\n\t\tdbp.os.selectedThread, err = dbp.postStop(tt...)\n\t\treturn err\n\t}\n\t// all threads are resumed\n\tvar err error\n\tdbp.execPtraceFunc(func() {\n\t\tfor _, th := range dbp.threads {\n\t\t\terr = ptraceResume(th.ID)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tsig := int(dbp.os.delayedSignal)\n\t\tdbp.os.delayedSignal = 0\n\t\tfor _, thread := range dbp.threads {\n\t\t\tthread.Status = nil\n\t\t}\n\t\terr = ptraceCont(dbp.pid, sig)\n\t})\n\treturn err\n}\n\n// Used by ContinueOnce\n// stop stops all running threads and sets breakpoints\nfunc (procgrp *processGroup) stop(cctx *proc.ContinueOnceContext, trapthread *nativeThread) (*nativeThread, error) {\n\treturn procgrp.procs[0].stop(trapthread)\n}\n\nfunc (dbp *nativeProcess) stop(trapthread *nativeThread) (*nativeThread, error) {\n\tif ok, err := dbp.Valid(); !ok {\n\t\treturn nil, err\n\t}\n\n\tvar err error\n\tdbp.execPtraceFunc(func() {\n\t\tfor _, th := range dbp.threads {\n\t\t\terr = ptraceSuspend(th.ID)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif trapthread.Status == nil || (*sys.WaitStatus)(trapthread.Status).StopSignal() != sys.SIGTRAP {\n\t\treturn trapthread, nil\n\t}\n\n\treturn dbp.postStop(trapthread.ID)\n}\n\nfunc (dbp *nativeProcess) postStop(tids ...int) (*nativeThread, error) {\n\tvar pickedTrapThread *nativeThread\n\tfor _, tid := range tids {\n\t\ttrapthread := dbp.threads[tid]\n\t\tif trapthread == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Must either be a hardcoded breakpoint, a currently set breakpoint or a\n\t\t// phantom breakpoint hit caused by a SIGTRAP that was delayed.\n\t\t// If someone sent a SIGTRAP directly to the process this will fail, but we\n\t\t// can't do better.\n\n\t\terr := trapthread.SetCurrentBreakpoint(true)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif trapthread.CurrentBreakpoint.Breakpoint == nil {\n\t\t\t// hardcoded breakpoint or phantom breakpoint hit\n\t\t\tif dbp.BinInfo().Arch.BreakInstrMovesPC() {\n\t\t\t\tpc, _ := trapthread.PC()\n\t\t\t\tif !trapthread.atHardcodedBreakpoint(pc) {\n\t\t\t\t\t// phantom breakpoint hit\n\t\t\t\t\t_ = trapthread.setPC(pc - uint64(len(dbp.BinInfo().Arch.BreakpointInstruction())))\n\t\t\t\t\ttrapthread = nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif pickedTrapThread == nil && trapthread != nil {\n\t\t\tpickedTrapThread = trapthread\n\t\t}\n\t}\n\n\treturn pickedTrapThread, nil\n}\n\n// Used by Detach\nfunc (dbp *nativeProcess) detach(kill bool) error {\n\tif !kill {\n\t\tfor _, th := range dbp.threads {\n\t\t\tptraceResume(th.ID)\n\t\t}\n\t}\n\treturn ptraceDetach(dbp.pid)\n}\n\n// EntryPoint returns the entry point address of the process.\nfunc (dbp *nativeProcess) EntryPoint() (uint64, error) {\n\tps, err := C.procstat_open_sysctl()\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"procstat_open_sysctl failed: %v\", err)\n\t}\n\tdefer C.procstat_close(ps)\n\n\tvar count C.uint\n\tkipp, err := C.procstat_getprocs(ps, C.KERN_PROC_PID, C.int(dbp.pid), &count)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"procstat_getprocs failed: %v\", err)\n\t}\n\tdefer C.procstat_freeprocs(ps, kipp)\n\tif count == 0 {\n\t\treturn 0, errors.New(\"procstat_getprocs returned no processes\")\n\t}\n\n\tauxv, err := C.procstat_getauxv(ps, kipp, &count)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"procstat_getauxv failed: %v\", err)\n\t}\n\tdefer C.procstat_freeauxv(ps, auxv)\n\n\tfor i := 0; i < int(count); i++ {\n\t\tif auxv.a_type == C.AT_ENTRY {\n\t\t\treturn uint64(C.elf_aux_info_ptr(auxv)), nil\n\t\t}\n\t\tauxv = (*C.Elf_Auxinfo)(unsafe.Pointer(uintptr(unsafe.Pointer(auxv)) + unsafe.Sizeof(*auxv)))\n\t}\n\treturn 0, errors.New(\"entry point not found\")\n}\n\nfunc (dbp *nativeProcess) SupportsBPF() bool {\n\treturn false\n}\n\nfunc (dbp *nativeProcess) SetUProbe(fnName string, goidOffset int64, args []ebpf.UProbeArgMap) error {\n\tpanic(\"not implemented\")\n}\n\nfunc (dbp *nativeProcess) GetBufferedTracepoints() []ebpf.RawUProbeParams {\n\tpanic(\"not implemented\")\n}\n\nfunc (dbp *nativeProcess) ptraceCont(sig int) error {\n\tvar err error\n\tdbp.execPtraceFunc(func() { err = ptraceCont(dbp.pid, sig) })\n\treturn err\n}\n\nfunc killProcess(pid int) error {\n\treturn sys.Kill(pid, sys.SIGINT)\n}\n"
  },
  {
    "path": "pkg/proc/native/proc_linux.go",
    "content": "package native\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"debug/elf\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"os/signal\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n\n\tisatty \"github.com/mattn/go-isatty\"\n)\n\n// Process statuses\nconst (\n\tstatusSleeping  = 'S'\n\tstatusRunning   = 'R'\n\tstatusTraceStop = 't'\n\tstatusZombie    = 'Z'\n\n\t// Kernel 2.6 has TraceStop as T\n\t// TODO(derekparker) Since this means something different based on the\n\t// version of the kernel ('T' is job control stop on modern 3.x+ kernels) we\n\t// may want to differentiate at some point.\n\tstatusTraceStopT = 'T'\n\n\tpersonalityGetPersonality = 0xffffffff // argument to pass to personality syscall to get the current personality\n\t_ADDR_NO_RANDOMIZE        = 0x0040000  // ADDR_NO_RANDOMIZE linux constant\n)\n\n// osProcessDetails contains Linux specific\n// process details.\ntype osProcessDetails struct {\n\tcomm string\n\n\tebpf *ebpf.EBPFContext\n}\n\nfunc (os *osProcessDetails) Close() {\n\tif os.ebpf != nil {\n\t\tos.ebpf.Close()\n\t}\n}\n\n// Launch creates and begins debugging a new process. First entry in\n// `cmd` is the program to run, and then rest are the arguments\n// to be supplied to that process. `wd` is working directory of the program.\n// If the DWARF information cannot be found in the binary, Delve will look\n// for external debug files in the directories passed in.\nfunc Launch(cmd []string, wd string, flags proc.LaunchFlags, debugInfoDirs []string, tty string, stdinPath string, stdoutOR proc.OutputRedirect, stderrOR proc.OutputRedirect) (*proc.TargetGroup, error) {\n\tvar (\n\t\tprocess *exec.Cmd\n\t\terr     error\n\t)\n\n\tforeground := flags&proc.LaunchForeground != 0\n\n\tstdin, stdout, stderr, closefn, err := openRedirects(stdinPath, stdoutOR, stderrOR, foreground)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif stdin == nil || !isatty.IsTerminal(stdin.Fd()) {\n\t\t// exec.(*Process).Start will fail if we try to send a process to\n\t\t// foreground but we are not attached to a terminal.\n\t\tforeground = false\n\t}\n\n\tdbp := newProcess(0)\n\tdefer func() {\n\t\tif err != nil && dbp.pid != 0 {\n\t\t\t_ = detachWithoutGroup(dbp, true)\n\t\t}\n\t}()\n\tdbp.execPtraceFunc(func() {\n\t\tif flags&proc.LaunchDisableASLR != 0 {\n\t\t\toldPersonality, _, err := syscall.Syscall(sys.SYS_PERSONALITY, personalityGetPersonality, 0, 0)\n\t\t\tif err == syscall.Errno(0) {\n\t\t\t\tnewPersonality := oldPersonality | _ADDR_NO_RANDOMIZE\n\t\t\t\tsyscall.Syscall(sys.SYS_PERSONALITY, newPersonality, 0, 0)\n\t\t\t\tdefer syscall.Syscall(sys.SYS_PERSONALITY, oldPersonality, 0, 0)\n\t\t\t}\n\t\t}\n\n\t\tprocess = exec.Command(cmd[0])\n\t\tprocess.Args = cmd\n\t\tprocess.Stdin = stdin\n\t\tprocess.Stdout = stdout\n\t\tprocess.Stderr = stderr\n\t\tprocess.SysProcAttr = &syscall.SysProcAttr{\n\t\t\tPtrace:     true,\n\t\t\tSetpgid:    true,\n\t\t\tForeground: foreground,\n\t\t}\n\t\tif foreground {\n\t\t\tsignal.Ignore(syscall.SIGTTOU, syscall.SIGTTIN)\n\t\t}\n\t\tif tty != \"\" {\n\t\t\tdbp.ctty, err = attachProcessToTTY(process, tty)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tif wd != \"\" {\n\t\t\tprocess.Dir = wd\n\t\t}\n\t\terr = process.Start()\n\t})\n\tclosefn()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdbp.pid = process.Process.Pid\n\tdbp.childProcess = true\n\t_, _, err = dbp.wait(process.Process.Pid, 0)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"waiting for target execve failed: %s\", err)\n\t}\n\ttgt, err := dbp.initialize(cmd[0], debugInfoDirs)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsetupSharedLibBreakpoint(dbp, tgt)\n\treturn tgt, nil\n}\n\n// Attach to an existing process with the given PID. Once attached, if\n// the DWARF information cannot be found in the binary, Delve will look\n// for external debug files in the directories passed in.\nfunc Attach(pid int, waitFor *proc.WaitFor, debugInfoDirs []string) (*proc.TargetGroup, error) {\n\tif waitFor.Valid() {\n\t\tvar err error\n\t\tpid, err = WaitFor(waitFor)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tdbp := newProcess(pid)\n\n\tvar err error\n\tdbp.execPtraceFunc(func() { err = ptraceAttach(dbp.pid) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t_, _, err = dbp.wait(dbp.pid, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttgt, err := dbp.initialize(findExecutable(\"\", dbp.pid), debugInfoDirs)\n\tif err != nil {\n\t\t_ = detachWithoutGroup(dbp, false)\n\t\treturn nil, err\n\t}\n\n\t// ElfUpdateSharedObjects can only be done after we initialize because it\n\t// needs an initialized BinaryInfo object to work.\n\terr = linutil.ElfUpdateSharedObjects(dbp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tsetupSharedLibBreakpoint(dbp, tgt)\n\treturn tgt, nil\n}\n\n// setupSharedLibBreakpoint sets up an r_brk breakpoint if the initial\n// binary is not a Go binary, so we can detect when Go shared objects are\n// loaded via dlopen.\nfunc setupSharedLibBreakpoint(dbp *nativeProcess, grp *proc.TargetGroup) {\n\tif grp.Selected == nil {\n\t\treturn\n\t}\n\tbi := grp.Selected.BinInfo()\n\tif len(bi.Images) == 0 || bi.Images[0].IsGo {\n\t\treturn\n\t}\n\trBrkAddr, err := linutil.ElfFindRBrk(grp.Selected)\n\tif err != nil {\n\t\tlogflags.DebuggerLogger().Warnf(\"could not find r_brk: %v\", err)\n\t\treturn\n\t}\n\tif rBrkAddr == 0 {\n\t\t// At launch time the dynamic linker hasn't initialized r_debug yet,\n\t\t// so DT_DEBUG is 0. Fall back to finding _dl_debug_state from the\n\t\t// interpreter's ELF file on disk.\n\t\tauxvbuf, err := os.ReadFile(fmt.Sprintf(\"/proc/%d/auxv\", dbp.pid))\n\t\tif err != nil {\n\t\t\tlogflags.DebuggerLogger().Warnf(\"could not read auxv for r_brk fallback: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tauxvBase := linutil.BaseFromAuxv(auxvbuf, bi.Arch.PtrSize())\n\t\texecPath := bi.Images[0].Path\n\t\trBrkAddr, err = linutil.ElfFindRBrkFromInterp(execPath, auxvBase)\n\t\tif err != nil {\n\t\t\tlogflags.DebuggerLogger().Warnf(\"could not find r_brk from interpreter: %v\", err)\n\t\t\treturn\n\t\t}\n\t\tif rBrkAddr == 0 {\n\t\t\tlogflags.DebuggerLogger().Warnf(\"could not find _dl_debug_state in interpreter\")\n\t\t\treturn\n\t\t}\n\t}\n\tgrp.Selected.CreateSharedLibBreakpoint(rBrkAddr)\n}\n\nfunc isProcDir(name string) bool {\n\tfor _, ch := range name {\n\t\tif ch < '0' || ch > '9' {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc waitForSearchProcess(pfx string, seen map[int]struct{}) (int, error) {\n\tlog := logflags.DebuggerLogger()\n\tdes, err := os.ReadDir(\"/proc\")\n\tif err != nil {\n\t\tlog.Errorf(\"error reading proc: %v\", err)\n\t\treturn 0, nil\n\t}\n\tfor _, de := range des {\n\t\tif !de.IsDir() {\n\t\t\tcontinue\n\t\t}\n\t\tname := de.Name()\n\t\tif !isProcDir(name) {\n\t\t\tcontinue\n\t\t}\n\t\tpid, _ := strconv.Atoi(name)\n\t\tif _, isseen := seen[pid]; isseen {\n\t\t\tcontinue\n\t\t}\n\t\tseen[pid] = struct{}{}\n\t\tbuf, err := os.ReadFile(filepath.Join(\"/proc\", name, \"cmdline\"))\n\t\tif err != nil {\n\t\t\t// probably we just don't have permissions\n\t\t\tcontinue\n\t\t}\n\t\tfor i := range buf {\n\t\t\tif buf[i] == 0 {\n\t\t\t\tbuf[i] = ' '\n\t\t\t}\n\t\t}\n\t\tlog.Debugf(\"waitfor: new process %q\", string(buf))\n\t\tif strings.HasPrefix(string(buf), pfx) {\n\t\t\treturn pid, nil\n\t\t}\n\t}\n\treturn 0, nil\n}\n\nfunc initialize(dbp *nativeProcess) (string, error) {\n\tcomm, err := os.ReadFile(fmt.Sprintf(\"/proc/%d/comm\", dbp.pid))\n\tif err == nil {\n\t\t// removes newline character\n\t\tcomm = bytes.TrimSuffix(comm, []byte(\"\\n\"))\n\t}\n\n\tif len(comm) <= 0 {\n\t\tstat, err := os.ReadFile(fmt.Sprintf(\"/proc/%d/stat\", dbp.pid))\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"could not read proc stat: %v\", err)\n\t\t}\n\t\texpr := fmt.Sprintf(\"%d\\\\s*\\\\((.*)\\\\)\", dbp.pid)\n\t\trexp, err := regexp.Compile(expr)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"regexp compile error: %v\", err)\n\t\t}\n\t\tmatch := rexp.FindSubmatch(stat)\n\t\tif match == nil {\n\t\t\treturn \"\", fmt.Errorf(\"no match found using regexp '%s' in /proc/%d/stat\", expr, dbp.pid)\n\t\t}\n\t\tcomm = match[1]\n\t}\n\tdbp.os.comm = strings.ReplaceAll(string(comm), \"%\", \"%%\")\n\n\treturn getCmdLine(dbp.pid), nil\n}\n\nfunc (dbp *nativeProcess) GetBufferedTracepoints() []ebpf.RawUProbeParams {\n\tif dbp.os.ebpf == nil {\n\t\treturn nil\n\t}\n\treturn dbp.os.ebpf.GetBufferedTracepoints()\n}\n\n// kill kills the target process.\nfunc (procgrp *processGroup) kill(dbp *nativeProcess) error {\n\tif ok, _ := dbp.Valid(); !ok {\n\t\treturn nil\n\t}\n\tif !dbp.threads[dbp.pid].Stopped() {\n\t\treturn errors.New(\"process must be stopped in order to kill it\")\n\t}\n\tif err := sys.Kill(-dbp.pid, sys.SIGKILL); err != nil {\n\t\treturn errors.New(\"could not deliver signal \" + err.Error())\n\t}\n\t// wait for other threads first or the thread group leader (dbp.pid) will never exit.\n\tfor threadID := range dbp.threads {\n\t\tif threadID != dbp.pid {\n\t\t\tdbp.wait(threadID, 0)\n\t\t}\n\t}\n\tfor {\n\t\twpid, status, err := dbp.wait(dbp.pid, 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif wpid == dbp.pid && status != nil && status.Signaled() && status.Signal() == sys.SIGKILL {\n\t\t\tdbp.postExit()\n\t\t\treturn err\n\t\t}\n\t}\n}\n\nfunc (dbp *nativeProcess) requestManualStop() (err error) {\n\treturn sys.Kill(dbp.pid, sys.SIGTRAP)\n}\n\nconst (\n\tptraceOptionsNormal     = syscall.PTRACE_O_TRACECLONE\n\tptraceOptionsFollowExec = syscall.PTRACE_O_TRACECLONE | syscall.PTRACE_O_TRACEVFORK | syscall.PTRACE_O_TRACEEXEC\n)\n\n// Attach to a newly created thread, and store that thread in our list of\n// known threads.\nfunc (dbp *nativeProcess) addThread(tid int, attach bool) (*nativeThread, error) {\n\tif thread, ok := dbp.threads[tid]; ok {\n\t\treturn thread, nil\n\t}\n\n\tptraceOptions := ptraceOptionsNormal\n\tif dbp.followExec {\n\t\tptraceOptions = ptraceOptionsFollowExec\n\t}\n\n\tvar err error\n\tif attach {\n\t\tdbp.execPtraceFunc(func() { err = sys.PtraceAttach(tid) })\n\t\tif err != nil && err != sys.EPERM {\n\t\t\t// Do not return err if err == EPERM,\n\t\t\t// we may already be tracing this thread due to\n\t\t\t// PTRACE_O_TRACECLONE. We will surely blow up later\n\t\t\t// if we truly don't have permissions.\n\t\t\treturn nil, fmt.Errorf(\"could not attach to new thread %d %s\", tid, err)\n\t\t}\n\t\tpid, status, err := dbp.waitFast(tid)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif status.Exited() {\n\t\t\treturn nil, fmt.Errorf(\"thread already exited %d\", pid)\n\t\t}\n\t}\n\n\tdbp.execPtraceFunc(func() { err = syscall.PtraceSetOptions(tid, ptraceOptions) })\n\tif err == syscall.ESRCH {\n\t\tif _, _, err = dbp.waitFast(tid); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error while waiting after adding thread: %d %s\", tid, err)\n\t\t}\n\t\tdbp.execPtraceFunc(func() { err = syscall.PtraceSetOptions(tid, ptraceOptions) })\n\t\tif err == syscall.ESRCH {\n\t\t\treturn nil, err\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"could not set options for new traced thread %d %s\", tid, err)\n\t\t}\n\t}\n\n\tdbp.threads[tid] = &nativeThread{\n\t\tID:  tid,\n\t\tdbp: dbp,\n\t\tos:  new(osSpecificDetails),\n\t}\n\tif dbp.memthread == nil {\n\t\tdbp.memthread = dbp.threads[tid]\n\t}\n\tfor _, bp := range dbp.Breakpoints().M {\n\t\tif bp.WatchType != 0 {\n\t\t\terr := dbp.threads[tid].writeHardwareBreakpoint(bp.Addr, bp.WatchType, bp.HWBreakIndex)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\treturn dbp.threads[tid], nil\n}\n\nfunc (dbp *nativeProcess) updateThreadList() error {\n\ttids, _ := filepath.Glob(fmt.Sprintf(\"/proc/%d/task/*\", dbp.pid))\n\tfor _, tidpath := range tids {\n\t\ttidstr := filepath.Base(tidpath)\n\t\ttid, err := strconv.Atoi(tidstr)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif _, err := dbp.addThread(tid, tid != dbp.pid); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn linutil.ElfUpdateSharedObjects(dbp)\n}\n\nfunc findExecutable(path string, pid int) string {\n\tif path == \"\" {\n\t\tpath = fmt.Sprintf(\"/proc/%d/exe\", pid)\n\t}\n\treturn path\n}\n\nfunc trapWait(procgrp *processGroup, pid int) (*nativeThread, error) {\n\treturn trapWaitInternal(procgrp, pid, 0)\n}\n\ntype trapWaitOptions uint8\n\nconst (\n\ttrapWaitHalt trapWaitOptions = 1 << iota\n\ttrapWaitNohang\n\ttrapWaitDontCallExitGuard\n)\n\nfunc trapWaitInternal(procgrp *processGroup, pid int, options trapWaitOptions) (*nativeThread, error) {\n\tvar waitdbp *nativeProcess = nil\n\tif len(procgrp.procs) == 1 {\n\t\t// Note that waitdbp is only used to call (*nativeProcess).wait which will\n\t\t// behave correctly if waitdbp == nil.\n\t\twaitdbp = procgrp.procs[0]\n\t}\n\n\thalt := options&trapWaitHalt != 0\n\tfor {\n\t\twopt := 0\n\t\tif options&trapWaitNohang != 0 {\n\t\t\twopt = sys.WNOHANG\n\t\t}\n\t\twpid, status, err := waitdbp.wait(pid, wopt)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"wait err %s %d\", err, pid)\n\t\t}\n\t\tif wpid == 0 {\n\t\t\tif options&trapWaitNohang != 0 {\n\t\t\t\treturn nil, nil\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tdbp := procgrp.procForThread(wpid)\n\t\tvar th *nativeThread\n\t\tif dbp != nil {\n\t\t\tvar ok bool\n\t\t\tth, ok = dbp.threads[wpid]\n\t\t\tif ok {\n\t\t\t\tth.Status = (*waitStatus)(status)\n\t\t\t}\n\t\t} else {\n\t\t\tdbp = procgrp.procs[0]\n\t\t}\n\t\tif status.Exited() {\n\t\t\tif wpid == dbp.pid {\n\t\t\t\tdbp.postExit()\n\t\t\t\tif procgrp.numValid() == 0 {\n\t\t\t\t\treturn nil, proc.ErrProcessExited{Pid: wpid, Status: status.ExitStatus()}\n\t\t\t\t}\n\t\t\t\tif halt {\n\t\t\t\t\treturn nil, nil\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdelete(dbp.threads, wpid)\n\t\t\tcontinue\n\t\t}\n\t\tif status.Signaled() {\n\t\t\t// Signaled means the thread was terminated due to a signal.\n\t\t\tif wpid == dbp.pid {\n\t\t\t\tdbp.postExit()\n\t\t\t\tif procgrp.numValid() == 0 {\n\t\t\t\t\treturn nil, proc.ErrProcessExited{Pid: wpid, Status: -int(status.Signal())}\n\t\t\t\t}\n\t\t\t\tif halt {\n\t\t\t\t\treturn nil, nil\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// does this ever happen?\n\t\t\tdelete(dbp.threads, wpid)\n\t\t\tcontinue\n\t\t}\n\t\tif status.StopSignal() == sys.SIGTRAP && (status.TrapCause() == sys.PTRACE_EVENT_CLONE || status.TrapCause() == sys.PTRACE_EVENT_VFORK) {\n\t\t\t// A traced thread has cloned a new thread, grab the pid and\n\t\t\t// add it to our list of traced threads.\n\t\t\t// If TrapCause() is sys.PTRACE_EVENT_VFORK this is actually a new\n\t\t\t// process, but treat it as a normal thread until exec happens, so that\n\t\t\t// we can initialize the new process normally.\n\t\t\tvar cloned uint\n\t\t\tdbp.execPtraceFunc(func() { cloned, err = sys.PtraceGetEventMsg(wpid) })\n\t\t\tif err != nil {\n\t\t\t\tif err == sys.ESRCH {\n\t\t\t\t\t// thread died while we were adding it\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn nil, fmt.Errorf(\"could not get event message: %s\", err)\n\t\t\t}\n\t\t\tth, err = dbp.addThread(int(cloned), false)\n\t\t\tif err != nil {\n\t\t\t\tif err == sys.ESRCH {\n\t\t\t\t\t// thread died while we were adding it\n\t\t\t\t\tdelete(dbp.threads, int(cloned))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif halt {\n\t\t\t\tth.os.running = false\n\t\t\t\tdbp.threads[int(wpid)].os.running = false\n\t\t\t\treturn nil, nil\n\t\t\t}\n\t\t\tif err = th.resume(); err != nil {\n\t\t\t\tif err == sys.ESRCH {\n\t\t\t\t\t// thread died while we were adding it\n\t\t\t\t\tdelete(dbp.threads, th.ID)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\treturn nil, fmt.Errorf(\"could not continue new thread %d %s\", cloned, err)\n\t\t\t}\n\t\t\tif err = dbp.threads[int(wpid)].resume(); err != nil {\n\t\t\t\tif err != sys.ESRCH {\n\t\t\t\t\treturn nil, fmt.Errorf(\"could not continue existing thread %d %s\", wpid, err)\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif status.StopSignal() == sys.SIGTRAP && (status.TrapCause() == sys.PTRACE_EVENT_EXEC) {\n\t\t\t// A thread called exec and we now have a new process. Retrieve the\n\t\t\t// thread ID of the exec'ing thread with PtraceGetEventMsg to remove it\n\t\t\t// and create a new nativeProcess object to track the new process.\n\t\t\tvar tid uint\n\t\t\tdbp.execPtraceFunc(func() { tid, err = sys.PtraceGetEventMsg(wpid) })\n\t\t\tif err == nil {\n\t\t\t\tdelete(dbp.threads, int(tid))\n\t\t\t}\n\t\t\tdbp = newChildProcess(procgrp.procs[0], wpid)\n\t\t\tdbp.followExec = true\n\t\t\tcmdline, _ := dbp.initializeBasic()\n\t\t\ttgt, err := procgrp.add(dbp, dbp.pid, dbp.memthread, findExecutable(\"\", dbp.pid), proc.StopLaunched, cmdline)\n\t\t\tif err != nil {\n\t\t\t\tif errors.As(err, new(*proc.ErrBadBinaryInfo)) {\n\t\t\t\t\t// If we are unable to load the binary info, log the error\n\t\t\t\t\t// but don't return it. This allows the client to continue\n\t\t\t\t\t// debugging the parent process.\n\t\t\t\t\tlogflags.DebuggerLogger().Warnf(\"Child target %d %q cannot be debugged: %v\", pid, cmdline, err)\n\t\t\t\t} else {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif halt {\n\t\t\t\treturn nil, nil\n\t\t\t}\n\t\t\tif tgt != nil {\n\t\t\t\t// If tgt is nil we decided we are not interested in debugging this\n\t\t\t\t// process, and we have already detached from it.\n\t\t\t\terr = dbp.threads[dbp.pid].resume()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t\t//TODO(aarzilli): if we want to give users the ability to stop the target\n\t\t\t//group on exec here is where we should return\n\t\t\tcontinue\n\t\t}\n\t\tif th == nil {\n\t\t\t// Sometimes we get an unknown thread, ignore it?\n\t\t\tcontinue\n\t\t}\n\t\tif (halt && status.StopSignal() == sys.SIGSTOP) || (status.StopSignal() == sys.SIGTRAP) {\n\t\t\tth.os.running = false\n\t\t\tif status.StopSignal() == sys.SIGTRAP {\n\t\t\t\tth.os.setbp = true\n\t\t\t}\n\t\t\treturn th, nil\n\t\t}\n\n\t\t// TODO(dp) alert user about unexpected signals here.\n\t\tif halt && !th.os.running {\n\t\t\t// We are trying to stop the process, queue this signal to be delivered\n\t\t\t// to the thread when we resume.\n\t\t\t// Do not do this for threads that were running because we sent them a\n\t\t\t// STOP signal and we need to observe it so we don't mistakenly deliver\n\t\t\t// it later.\n\t\t\tth.os.delayedSignal = int(status.StopSignal())\n\t\t\tth.os.running = false\n\t\t\treturn th, nil\n\t\t} else if err := th.resumeWithSig(int(status.StopSignal())); err != nil {\n\t\t\tif err != sys.ESRCH {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\t// do the same thing we do if a thread quit\n\t\t\tif wpid == dbp.pid {\n\t\t\t\texitStatus := 0\n\t\t\t\tif procgrp.numValid() == 1 {\n\t\t\t\t\t// try to recover the real exit status using waitpid\n\t\t\t\t\tfor {\n\t\t\t\t\t\twpid2, status2, err := dbp.wait(-1, sys.WNOHANG)\n\t\t\t\t\t\tif wpid2 <= 0 || err != nil {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif status2.Exited() {\n\t\t\t\t\t\t\texitStatus = status2.ExitStatus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\tdbp.postExit()\n\t\t\t\tif procgrp.numValid() == 0 {\n\t\t\t\t\treturn nil, proc.ErrProcessExited{Pid: wpid, Status: exitStatus}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdelete(dbp.threads, wpid)\n\t\t}\n\t}\n}\n\nfunc status(pid int, comm string) rune {\n\tf, err := os.Open(fmt.Sprintf(\"/proc/%d/stat\", pid))\n\tif err != nil {\n\t\treturn '\\000'\n\t}\n\tdefer f.Close()\n\trd := bufio.NewReader(f)\n\n\tvar (\n\t\tp     int\n\t\tstate rune\n\t)\n\n\t// The second field of /proc/pid/stat is the name of the task in parentheses.\n\t// The name of the task is the base name of the executable for this process limited to TASK_COMM_LEN characters\n\t// Since both parenthesis and spaces can appear inside the name of the task and no escaping happens we need to read the name of the executable first\n\t// See: include/linux/sched.c:315 and include/linux/sched.c:1510\n\t_, _ = fmt.Fscanf(rd, \"%d (\"+comm+\")  %c\", &p, &state)\n\treturn state\n}\n\n// waitFast is like wait but does not handle process-exit correctly\nfunc (dbp *nativeProcess) waitFast(pid int) (int, *sys.WaitStatus, error) {\n\tvar s sys.WaitStatus\n\twpid, err := sys.Wait4(pid, &s, sys.WALL, nil)\n\treturn wpid, &s, err\n}\n\nfunc (dbp *nativeProcess) wait(pid, options int) (int, *sys.WaitStatus, error) {\n\tvar s sys.WaitStatus\n\tif (dbp == nil) || (pid != dbp.pid) || (options != 0) {\n\t\twpid, err := sys.Wait4(pid, &s, sys.WALL|options, nil)\n\t\treturn wpid, &s, err\n\t}\n\t// If we call wait4/waitpid on a thread that is the leader of its group,\n\t// with options == 0, while ptracing and the thread leader has exited leaving\n\t// zombies of its own then waitpid hangs forever this is apparently intended\n\t// behaviour in the linux kernel because it's just so convenient.\n\t// Therefore we call wait4 in a loop with WNOHANG, sleeping a while between\n\t// calls and exiting when either wait4 succeeds or we find out that the thread\n\t// has become a zombie.\n\t// References:\n\t// https://sourceware.org/bugzilla/show_bug.cgi?id=12702\n\t// https://sourceware.org/bugzilla/show_bug.cgi?id=10095\n\t// https://sourceware.org/bugzilla/attachment.cgi?id=5685\n\tfor {\n\t\twpid, err := sys.Wait4(pid, &s, sys.WNOHANG|sys.WALL|options, nil)\n\t\tif err != nil {\n\t\t\treturn 0, nil, err\n\t\t}\n\t\tif wpid != 0 {\n\t\t\treturn wpid, &s, err\n\t\t}\n\t\tif status(pid, dbp.os.comm) == statusZombie {\n\t\t\treturn pid, nil, nil\n\t\t}\n\t\ttime.Sleep(200 * time.Millisecond)\n\t}\n}\n\nfunc exitGuard(dbp *nativeProcess, procgrp *processGroup, err error) error {\n\tif err != sys.ESRCH {\n\t\treturn err\n\t}\n\tif status(dbp.pid, dbp.os.comm) == statusZombie {\n\t\t_, err := trapWaitInternal(procgrp, -1, trapWaitDontCallExitGuard)\n\t\treturn err\n\t}\n\n\treturn err\n}\n\nfunc (procgrp *processGroup) resume() error {\n\t// all threads stopped over a breakpoint are made to step over it\n\tfor _, dbp := range procgrp.procs {\n\t\tif valid, _ := dbp.Valid(); valid {\n\t\t\tfor _, thread := range dbp.threads {\n\t\t\t\tif thread.CurrentBreakpoint.Breakpoint != nil {\n\t\t\t\t\tif err := procgrp.stepInstruction(thread); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\tthread.CurrentBreakpoint.Clear()\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// everything is resumed\n\tfor _, dbp := range procgrp.procs {\n\t\tif valid, _ := dbp.Valid(); valid {\n\t\t\tfor _, thread := range dbp.threads {\n\t\t\t\tif err := thread.resume(); err != nil && err != sys.ESRCH {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// stop stops all running threads and sets breakpoints\nfunc (procgrp *processGroup) stop(cctx *proc.ContinueOnceContext, trapthread *nativeThread) (*nativeThread, error) {\n\tif procgrp.numValid() == 0 {\n\t\treturn nil, proc.ErrProcessExited{Pid: procgrp.procs[0].pid}\n\t}\n\n\tfor _, dbp := range procgrp.procs {\n\t\tif ok, _ := dbp.Valid(); !ok {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, th := range dbp.threads {\n\t\t\tth.os.setbp = false\n\t\t}\n\t}\n\ttrapthread.os.setbp = true\n\n\t// check if any other thread simultaneously received a SIGTRAP\n\tfor {\n\t\tth, err := trapWaitInternal(procgrp, -1, trapWaitNohang)\n\t\tif err != nil {\n\t\t\treturn nil, exitGuard(procgrp.procs[0], procgrp, err)\n\t\t}\n\t\tif th == nil {\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// stop all threads that are still running\n\tfor _, dbp := range procgrp.procs {\n\t\tif ok, _ := dbp.Valid(); !ok {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, th := range dbp.threads {\n\t\t\tif th.os.running {\n\t\t\t\tif err := th.stop(); err != nil {\n\t\t\t\t\tif err == sys.ESRCH {\n\t\t\t\t\t\t// thread exited\n\t\t\t\t\t\tdelete(dbp.threads, th.ID)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn nil, exitGuard(dbp, procgrp, err)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// wait for all threads to stop\n\tfor {\n\t\tallstopped := true\n\t\tfor _, dbp := range procgrp.procs {\n\t\t\tif ok, _ := dbp.Valid(); !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, th := range dbp.threads {\n\t\t\t\tif th.os.running {\n\t\t\t\t\tallstopped = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif allstopped {\n\t\t\tbreak\n\t\t}\n\t\t_, err := trapWaitInternal(procgrp, -1, trapWaitHalt)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tswitchTrapthread := false\n\n\tfor _, dbp := range procgrp.procs {\n\t\tif ok, _ := dbp.Valid(); !ok {\n\t\t\tcontinue\n\t\t}\n\t\terr := stop1(cctx, dbp, trapthread, &switchTrapthread)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tif switchTrapthread {\n\t\ttrapthreadID := trapthread.ID\n\t\ttrapthread = nil\n\t\tfor _, dbp := range procgrp.procs {\n\t\t\tif ok, _ := dbp.Valid(); !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor _, th := range dbp.threads {\n\t\t\t\tif th.os.setbp && th.ThreadID() != trapthreadID {\n\t\t\t\t\treturn th, nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn trapthread, nil\n}\n\nfunc stop1(cctx *proc.ContinueOnceContext, dbp *nativeProcess, trapthread *nativeThread, switchTrapthread *bool) error {\n\tif err := linutil.ElfUpdateSharedObjects(dbp); err != nil {\n\t\treturn err\n\t}\n\n\t// set breakpoints on SIGTRAP threads\n\tvar err1 error\n\tfor _, th := range dbp.threads {\n\t\tpc, _ := th.PC()\n\n\t\tif !th.os.setbp && pc != th.os.phantomBreakpointPC {\n\t\t\t// check if this could be a breakpoint hit anyway that the OS hasn't notified us about, yet.\n\t\t\tif _, ok := dbp.FindBreakpoint(pc, dbp.BinInfo().Arch.BreakInstrMovesPC()); ok {\n\t\t\t\tth.os.phantomBreakpointPC = pc\n\t\t\t}\n\t\t}\n\n\t\tif pc != th.os.phantomBreakpointPC {\n\t\t\tth.os.phantomBreakpointPC = 0\n\t\t}\n\n\t\tif th.CurrentBreakpoint.Breakpoint == nil && th.os.setbp {\n\t\t\tif err := th.SetCurrentBreakpoint(true); err != nil {\n\t\t\t\terr1 = err\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif th.CurrentBreakpoint.Breakpoint == nil && th.os.setbp && (th.Status != nil) && ((*sys.WaitStatus)(th.Status).StopSignal() == sys.SIGTRAP) && dbp.BinInfo().Arch.BreakInstrMovesPC() {\n\t\t\tmanualStop := false\n\t\t\tif th.ThreadID() == trapthread.ThreadID() {\n\t\t\t\tmanualStop = cctx.GetManualStopRequested()\n\t\t\t}\n\t\t\tif !manualStop && th.os.phantomBreakpointPC == pc {\n\t\t\t\t// Thread received a SIGTRAP but we don't have a breakpoint for it and\n\t\t\t\t// it wasn't sent by a manual stop request. It's either a hardcoded\n\t\t\t\t// breakpoint or a phantom breakpoint hit (a breakpoint that was hit but\n\t\t\t\t// we have removed before we could receive its signal). Check if it is a\n\t\t\t\t// hardcoded breakpoint, otherwise rewind the thread.\n\t\t\t\tisHardcodedBreakpoint := false\n\t\t\t\tpc, _ := th.PC()\n\t\t\t\tfor _, bpinstr := range [][]byte{\n\t\t\t\t\tdbp.BinInfo().Arch.BreakpointInstruction(),\n\t\t\t\t\tdbp.BinInfo().Arch.AltBreakpointInstruction()} {\n\t\t\t\t\tif bpinstr == nil {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tbuf := make([]byte, len(bpinstr))\n\t\t\t\t\t_, _ = th.ReadMemory(buf, pc-uint64(len(buf)))\n\t\t\t\t\tif bytes.Equal(buf, bpinstr) {\n\t\t\t\t\t\tisHardcodedBreakpoint = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif !isHardcodedBreakpoint {\n\t\t\t\t\t// phantom breakpoint hit\n\t\t\t\t\t_ = th.setPC(pc - uint64(len(dbp.BinInfo().Arch.BreakpointInstruction())))\n\t\t\t\t\tth.os.setbp = false\n\t\t\t\t\tif trapthread.ThreadID() == th.ThreadID() {\n\t\t\t\t\t\t// Will switch to a different thread for trapthread because we don't\n\t\t\t\t\t\t// want pkg/proc to believe that this thread was stopped by a\n\t\t\t\t\t\t// hardcoded breakpoint.\n\t\t\t\t\t\t*switchTrapthread = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn err1\n}\n\nfunc (procgrp *processGroup) detachChild(dbp *nativeProcess) error {\n\treturn procgrp.Detach(dbp.pid, false)\n}\n\nfunc (dbp *nativeProcess) detach(kill bool) error {\n\tfor threadID := range dbp.threads {\n\t\terr := ptraceDetach(threadID, 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif kill {\n\t\treturn nil\n\t}\n\t// For some reason the process will sometimes enter stopped state after a\n\t// detach, this doesn't happen immediately either.\n\t// We have to wait a bit here, then check if the main thread is stopped and\n\t// SIGCONT it if it is.\n\ttime.Sleep(50 * time.Millisecond)\n\tif s := status(dbp.pid, dbp.os.comm); s == 'T' {\n\t\t_ = sys.Kill(dbp.pid, sys.SIGCONT)\n\t}\n\treturn nil\n}\n\n// EntryPoint will return the process entry point address, useful for\n// debugging PIEs.\nfunc (dbp *nativeProcess) EntryPoint() (uint64, error) {\n\tauxvbuf, err := os.ReadFile(fmt.Sprintf(\"/proc/%d/auxv\", dbp.pid))\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not read auxiliary vector: %v\", err)\n\t}\n\n\treturn linutil.EntryPointFromAuxv(auxvbuf, dbp.bi.Arch.PtrSize()), nil\n}\n\nfunc (dbp *nativeProcess) SetUProbe(fnName string, goidOffset int64, args []ebpf.UProbeArgMap) error {\n\t// Lazily load and initialize the BPF program upon request to set a uprobe.\n\tif dbp.os.ebpf == nil {\n\t\tvar err error\n\t\tdbp.os.ebpf, err = ebpf.LoadEBPFTracingProgram(dbp.bi.Images[0].Path)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// We only allow up to 12 args for a BPF probe.\n\t// 6 inputs + 6 outputs.\n\t// Return early if we have more.\n\tif len(args) > 12 {\n\t\treturn errors.New(\"too many arguments in traced function, max is 12 input+return\")\n\t}\n\n\tfns := dbp.bi.LookupFunc()[fnName]\n\tif len(fns) != 1 {\n\t\treturn &proc.ErrFunctionNotFound{FuncName: fnName}\n\t}\n\tfn := fns[0]\n\n\tentryPC, err := proc.FirstPCAfterPrologue(dbp, fn, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\toffset, err := dbp.BinInfo().GStructOffset(dbp.Memory())\n\tif err != nil {\n\t\treturn err\n\t}\n\tkey := entryPC\n\terr = dbp.os.ebpf.UpdateArgMap(key, goidOffset, args, offset, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdebugname := dbp.bi.Images[0].Path\n\n\t// First attach a uprobe at all return addresses. We do this instead of using a uretprobe\n\t// for two reasons:\n\t// 1. uretprobes do not play well with Go\n\t// 2. uretprobes seem to not restore the function return addr on the stack when removed, destroying any\n\t//    kind of workaround we could come up with.\n\t// TODO(derekparker): this whole thing could likely be optimized a bit.\n\timg := dbp.BinInfo().PCToImage(fn.Entry)\n\tf, err := elf.Open(img.Path)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not open elf file to resolve symbol offset: %w\", err)\n\t}\n\n\tvar regs proc.Registers\n\tmem := dbp.Memory()\n\tregs, _ = dbp.memthread.Registers()\n\tinstructions, err := proc.Disassemble(mem, regs, &proc.BreakpointMap{}, dbp.BinInfo(), fn.Entry, fn.End)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar addrs []uint64\n\tfor _, instruction := range instructions {\n\t\tif instruction.IsRet() {\n\t\t\taddrs = append(addrs, instruction.Loc.PC)\n\t\t}\n\t}\n\taddrs = append(addrs, proc.FindDeferReturnCalls(instructions)...)\n\tfor _, addr := range addrs {\n\t\terr := dbp.os.ebpf.UpdateArgMap(addr, goidOffset, args, offset, true)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\toff, err := ebpf.AddressToOffset(f, addr)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = dbp.os.ebpf.AttachUprobe(dbp.pid, debugname, off)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\toff, err := ebpf.AddressToOffset(f, entryPC)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn dbp.os.ebpf.AttachUprobe(dbp.pid, debugname, off)\n}\n\n// FollowExec enables (or disables) follow exec mode\nfunc (dbp *nativeProcess) FollowExec(v bool) error {\n\tdbp.followExec = v\n\tptraceOptions := ptraceOptionsNormal\n\tif dbp.followExec {\n\t\tptraceOptions = ptraceOptionsFollowExec\n\t}\n\tvar err error\n\tdbp.execPtraceFunc(func() {\n\t\tfor tid := range dbp.threads {\n\t\t\terr = syscall.PtraceSetOptions(tid, ptraceOptions)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t})\n\treturn err\n}\n\nfunc killProcess(pid int) error {\n\treturn sys.Kill(pid, sys.SIGINT)\n}\n\nfunc getCmdLine(pid int) string {\n\tbuf, _ := os.ReadFile(fmt.Sprintf(\"/proc/%d/cmdline\", pid))\n\targs := strings.SplitN(string(buf), \"\\x00\", -1)\n\tfor i := range args {\n\t\tif strings.Contains(args[i], \" \") {\n\t\t\targs[i] = strconv.Quote(args[i])\n\t\t}\n\t}\n\tif len(args) > 0 && args[len(args)-1] == \"\" {\n\t\targs = args[:len(args)-1]\n\t}\n\treturn strings.Join(args, \" \")\n}\n"
  },
  {
    "path": "pkg/proc/native/proc_no_ebpf_linux.go",
    "content": "//go:build !linux || !amd64 || !go1.16 || !cgo\n\npackage native\n\nfunc (dbp *nativeProcess) SupportsBPF() bool {\n\treturn false\n}\n"
  },
  {
    "path": "pkg/proc/native/proc_unix.go",
    "content": "//go:build !windows\n\npackage native\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\n\tisatty \"github.com/mattn/go-isatty\"\n)\n\nfunc attachProcessToTTY(process *exec.Cmd, tty string) (*os.File, error) {\n\tf, err := os.OpenFile(tty, os.O_RDWR, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif !isatty.IsTerminal(f.Fd()) {\n\t\tf.Close()\n\t\treturn nil, fmt.Errorf(\"%s is not a terminal\", f.Name())\n\t}\n\tprocess.Stdin = f\n\tprocess.Stdout = f\n\tprocess.Stderr = f\n\tprocess.SysProcAttr.Setpgid = false\n\tprocess.SysProcAttr.Setsid = true\n\tprocess.SysProcAttr.Setctty = true\n\n\treturn f, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/proc_windows.go",
    "content": "package native\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/windows\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n)\n\n// osProcessDetails holds Windows specific information.\ntype osProcessDetails struct {\n\thProcess    syscall.Handle\n\tbreakThread int\n\tentryPoint  uint64\n\trunning     bool\n}\n\nfunc (os *osProcessDetails) Close() {}\n\n// Launch creates and begins debugging a new process.\nfunc Launch(cmd []string, wd string, flags proc.LaunchFlags, _ []string, _ string, stdinPath string, stdoutOR proc.OutputRedirect, stderrOR proc.OutputRedirect) (*proc.TargetGroup, error) {\n\targv0Go := cmd[0]\n\n\tenv := proc.DisableAsyncPreemptEnv()\n\n\tstdin, stdout, stderr, closefn, err := openRedirects(stdinPath, stdoutOR, stderrOR, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcreationFlags := uint32(_DEBUG_PROCESS)\n\tif flags&proc.LaunchForeground == 0 {\n\t\tcreationFlags |= syscall.CREATE_NEW_PROCESS_GROUP\n\t}\n\n\tvar p *os.Process\n\tdbp := newProcess(0)\n\tdbp.execPtraceFunc(func() {\n\t\tattr := &os.ProcAttr{\n\t\t\tDir:   wd,\n\t\t\tFiles: []*os.File{stdin, stdout, stderr},\n\t\t\tSys: &syscall.SysProcAttr{\n\t\t\t\tCreationFlags: creationFlags,\n\t\t\t},\n\t\t\tEnv: env,\n\t\t}\n\t\tp, err = os.StartProcess(argv0Go, cmd, attr)\n\t})\n\tclosefn()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer p.Release()\n\n\tdbp.pid = p.Pid\n\tdbp.childProcess = true\n\n\ttgt, err := dbp.initialize(argv0Go, []string{})\n\tif err != nil {\n\t\tdetachWithoutGroup(dbp, true)\n\t\treturn nil, err\n\t}\n\treturn tgt, nil\n}\n\nfunc initialize(dbp *nativeProcess) (string, error) {\n\t// we need a fake procgrp to call waitForDebugEvent\n\tprocgrp := &processGroup{procs: []*nativeProcess{dbp}}\n\t// It should not actually be possible for the\n\t// call to waitForDebugEvent to fail, since Windows\n\t// will always fire a CREATE_PROCESS_DEBUG_EVENT event\n\t// immediately after launching under DEBUG_ONLY_THIS_PROCESS.\n\t// Attaching with DebugActiveProcess has similar effect.\n\tvar err error\n\tdbp.execPtraceFunc(func() {\n\t\t_, err = procgrp.waitForDebugEvent(waitBlocking)\n\t})\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tcmdline := getCmdLine(dbp.os.hProcess)\n\n\t// Suspend all threads so that the call to _ContinueDebugEvent will\n\t// not resume the target.\n\tfor _, thread := range dbp.threads {\n\t\tif !thread.os.dbgUiRemoteBreakIn {\n\t\t\t_, err := _SuspendThread(thread.os.hThread)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t}\n\t}\n\n\tdbp.execPtraceFunc(func() {\n\t\terr = _ContinueDebugEvent(uint32(dbp.pid), uint32(dbp.os.breakThread), _DBG_CONTINUE)\n\t})\n\treturn cmdline, err\n}\n\n// findExePath searches for process pid, and returns its executable path\nfunc findExePath(pid int) (string, error) {\n\t// Original code suggested different approach (see below).\n\t// Maybe it could be useful in the future.\n\t//\n\t// Find executable path from PID/handle on Windows:\n\t// https://msdn.microsoft.com/en-us/library/aa366789(VS.85).aspx\n\n\tp, err := syscall.OpenProcess(syscall.PROCESS_QUERY_INFORMATION, false, uint32(pid))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer syscall.CloseHandle(p)\n\n\tn := uint32(128)\n\tfor {\n\t\tbuf := make([]uint16, int(n))\n\t\terr = _QueryFullProcessImageName(p, 0, &buf[0], &n)\n\t\tswitch err {\n\t\tcase syscall.ERROR_INSUFFICIENT_BUFFER:\n\t\t\t// try bigger buffer\n\t\t\tn *= 2\n\t\t\t// but stop if it gets too big\n\t\t\tif n > 10000 {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\tcase nil:\n\t\t\treturn syscall.UTF16ToString(buf[:n]), nil\n\t\tdefault:\n\t\t\treturn \"\", err\n\t\t}\n\t}\n}\n\nvar debugPrivilegeRequested = false\n\n// Attach to an existing process with the given PID.\nfunc Attach(pid int, waitFor *proc.WaitFor, _ []string) (*proc.TargetGroup, error) {\n\tvar aperr error\n\tif !debugPrivilegeRequested {\n\t\tdebugPrivilegeRequested = true\n\t\t// The following call will only work if the user is an administrator\n\t\t// has the \"Debug Programs\" privilege in Local security settings.\n\t\t// Since this privilege is not needed to debug processes owned by the\n\t\t// current user, do not complain about this unless attach actually fails.\n\t\taperr = acquireDebugPrivilege()\n\t}\n\n\tif waitFor.Valid() {\n\t\tvar err error\n\t\tpid, err = WaitFor(waitFor)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tdbp := newProcess(pid)\n\tvar err error\n\tdbp.execPtraceFunc(func() {\n\t\t// TODO: Probably should have SeDebugPrivilege before starting here.\n\t\terr = _DebugActiveProcess(uint32(pid))\n\t})\n\tif err != nil {\n\t\tif aperr != nil {\n\t\t\treturn nil, fmt.Errorf(\"%v also %v\", err, aperr)\n\t\t}\n\t\treturn nil, err\n\t}\n\texepath, err := findExePath(pid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\ttgt, err := dbp.initialize(exepath, []string{})\n\tif err != nil {\n\t\tdetachWithoutGroup(dbp, true)\n\t\treturn nil, err\n\t}\n\treturn tgt, nil\n}\n\n// acquireDebugPrivilege acquires the debug privilege which is needed to\n// debug other user's processes.\n// See:\n//\n//   - https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/debug-privilege\n//   - https://github.com/go-delve/delve/issues/3136\nfunc acquireDebugPrivilege() error {\n\tvar token sys.Token\n\terr := sys.OpenProcessToken(sys.CurrentProcess(), sys.TOKEN_QUERY|sys.TOKEN_ADJUST_PRIVILEGES, &token)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not acquire debug privilege (OpenCurrentProcessToken): %v\", err)\n\t}\n\tdefer token.Close()\n\n\tprivName, _ := sys.UTF16FromString(\"SeDebugPrivilege\")\n\tvar luid sys.LUID\n\terr = sys.LookupPrivilegeValue(nil, &privName[0], &luid)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not acquire debug privilege  (LookupPrivilegeValue): %v\", err)\n\t}\n\n\tvar tp sys.Tokenprivileges\n\ttp.PrivilegeCount = 1\n\ttp.Privileges[0].Luid = luid\n\ttp.Privileges[0].Attributes = sys.SE_PRIVILEGE_ENABLED\n\n\terr = sys.AdjustTokenPrivileges(token, false, &tp, 0, nil, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not acquire debug privilege (AdjustTokenPrivileges): %v\", err)\n\t}\n\n\treturn nil\n}\n\nfunc waitForSearchProcess(pfx string, seen map[int]struct{}) (int, error) {\n\tlog := logflags.DebuggerLogger()\n\thandle, err := sys.CreateToolhelp32Snapshot(sys.TH32CS_SNAPPROCESS, 0)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not get process list: %v\", err)\n\t}\n\tdefer sys.CloseHandle(handle)\n\n\tvar entry sys.ProcessEntry32\n\tentry.Size = uint32(unsafe.Sizeof(entry))\n\terr = sys.Process32First(handle, &entry)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"could not get process list: %v\", err)\n\t}\n\n\tfor err = sys.Process32First(handle, &entry); err == nil; err = sys.Process32Next(handle, &entry) {\n\t\tif _, isseen := seen[int(entry.ProcessID)]; isseen {\n\t\t\tcontinue\n\t\t}\n\t\tseen[int(entry.ProcessID)] = struct{}{}\n\n\t\thProcess, err := sys.OpenProcess(sys.PROCESS_QUERY_INFORMATION|sys.PROCESS_VM_READ, false, entry.ProcessID)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tcmdline := getCmdLine(syscall.Handle(hProcess))\n\t\tsys.CloseHandle(hProcess)\n\n\t\tlog.Debugf(\"waitfor: new process %q\", cmdline)\n\t\tif strings.HasPrefix(cmdline, pfx) {\n\t\t\treturn int(entry.ProcessID), nil\n\t\t}\n\t}\n\n\treturn 0, nil\n}\n\n// kill kills the process.\nfunc (procgrp *processGroup) kill(dbp *nativeProcess) error {\n\tif ok, _ := dbp.Valid(); !ok {\n\t\treturn nil\n\t}\n\n\tp, err := os.FindProcess(dbp.pid)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer p.Release()\n\n\t// TODO: Should not have to ignore failures here,\n\t// but some tests appear to Kill twice causing\n\t// this to fail on second attempt.\n\t_ = syscall.TerminateProcess(dbp.os.hProcess, 1)\n\n\tdbp.execPtraceFunc(func() {\n\t\tprocgrp.waitForDebugEvent(waitBlocking | waitDontHandleExceptions)\n\t})\n\n\tp.Wait()\n\n\tdbp.postExit()\n\treturn nil\n}\n\nfunc (dbp *nativeProcess) requestManualStop() error {\n\tif !dbp.os.running {\n\t\treturn nil\n\t}\n\tdbp.os.running = false\n\treturn _DebugBreakProcess(dbp.os.hProcess)\n}\n\nfunc (dbp *nativeProcess) updateThreadList() error {\n\t// We ignore this request since threads are being\n\t// tracked as they are created/killed in waitForDebugEvent.\n\treturn nil\n}\n\nfunc (dbp *nativeProcess) addThread(hThread syscall.Handle, threadID int, attach, suspendNewThreads bool, dbgUiRemoteBreakIn bool) (*nativeThread, error) {\n\tif thread, ok := dbp.threads[threadID]; ok {\n\t\treturn thread, nil\n\t}\n\tthread := &nativeThread{\n\t\tID:  threadID,\n\t\tdbp: dbp,\n\t\tos:  new(osSpecificDetails),\n\t}\n\tthread.os.dbgUiRemoteBreakIn = dbgUiRemoteBreakIn\n\tthread.os.hThread = hThread\n\tdbp.threads[threadID] = thread\n\tif dbp.memthread == nil {\n\t\tdbp.memthread = dbp.threads[threadID]\n\t}\n\tif suspendNewThreads && !dbgUiRemoteBreakIn {\n\t\t_, err := _SuspendThread(thread.os.hThread)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tfor _, bp := range dbp.Breakpoints().M {\n\t\tif bp.WatchType != 0 {\n\t\t\terr := thread.writeHardwareBreakpoint(bp.Addr, bp.WatchType, bp.HWBreakIndex)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn thread, nil\n}\n\ntype waitForDebugEventFlags int\n\nconst (\n\twaitBlocking waitForDebugEventFlags = 1 << iota\n\twaitSuspendNewThreads\n\twaitDontHandleExceptions\n)\n\nconst _MS_VC_EXCEPTION = 0x406D1388 // part of VisualC protocol to set thread names\n\nfunc (procgrp *processGroup) waitForDebugEvent(flags waitForDebugEventFlags) (threadID int, err error) {\n\tvar debugEvent _DEBUG_EVENT\n\tfor {\n\t\tcontinueStatus := uint32(_DBG_CONTINUE)\n\t\tvar milliseconds uint32 = 0\n\t\tif flags&waitBlocking != 0 {\n\t\t\tmilliseconds = syscall.INFINITE\n\t\t}\n\t\t// Wait for a debug event...\n\t\terr := _WaitForDebugEvent(&debugEvent, milliseconds)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\t// ... handle each event kind ...\n\t\tunionPtr := unsafe.Pointer(&debugEvent.U[0])\n\t\tswitch debugEvent.DebugEventCode {\n\t\tcase _CREATE_PROCESS_DEBUG_EVENT:\n\t\t\tdebugInfo := (*_CREATE_PROCESS_DEBUG_INFO)(unionPtr)\n\t\t\thFile := debugInfo.File\n\t\t\tif hFile != 0 && hFile != syscall.InvalidHandle {\n\t\t\t\terr = syscall.CloseHandle(hFile)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar dbp *nativeProcess\n\t\t\tif procgrp.addTarget == nil {\n\t\t\t\t// This is a fake process group and waitForDebugEvent has been called\n\t\t\t\t// just after attach/launch, finish configuring the root process.\n\t\t\t\tdbp = procgrp.procs[0]\n\t\t\t\tif debugEvent.ProcessId != uint32(dbp.pid) {\n\t\t\t\t\t// When launching a new process while we are in detached state also\n\t\t\t\t\t// creates a conhost.exe child process. This is that process and we\n\t\t\t\t\t// need to detach from it.\n\t\t\t\t\t// See issue #3864.\n\t\t\t\t\terr := _DebugActiveProcessStop(debugEvent.ProcessId)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn 0, err\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Add new child process\n\t\t\t\tdbp = newChildProcess(procgrp.procs[0], int(debugEvent.ProcessId))\n\t\t\t}\n\n\t\t\tdbp.os.entryPoint = uint64(debugInfo.BaseOfImage)\n\t\t\tdbp.os.hProcess = debugInfo.Process\n\t\t\t_, err = dbp.addThread(debugInfo.Thread, int(debugEvent.ThreadId), false,\n\t\t\t\tflags&waitSuspendNewThreads != 0, debugInfo.StartAddress == dbgUiRemoteBreakin.Addr())\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\n\t\t\tif procgrp.addTarget != nil {\n\t\t\t\texe, err := findExePath(dbp.pid)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\ttgt, err := procgrp.add(dbp, dbp.pid, dbp.memthread, exe, proc.StopLaunched, getCmdLine(dbp.os.hProcess))\n\t\t\t\tif err != nil {\n\t\t\t\t\t// TODO: Handle proc.ErrBadBinaryInfo\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\tif tgt == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\tcase _CREATE_THREAD_DEBUG_EVENT:\n\t\t\tdebugInfo := (*_CREATE_THREAD_DEBUG_INFO)(unionPtr)\n\t\t\tdbp := procgrp.procForPid(int(debugEvent.ProcessId))\n\t\t\t_, err = dbp.addThread(debugInfo.Thread, int(debugEvent.ThreadId), false,\n\t\t\t\tflags&waitSuspendNewThreads != 0, debugInfo.StartAddress == dbgUiRemoteBreakin.Addr())\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\tbreak\n\t\tcase _EXIT_THREAD_DEBUG_EVENT:\n\t\t\tdbp := procgrp.procForPid(int(debugEvent.ProcessId))\n\t\t\tdelete(dbp.threads, int(debugEvent.ThreadId))\n\t\t\tbreak\n\t\tcase _OUTPUT_DEBUG_STRING_EVENT:\n\t\t\t//TODO: Handle debug output strings\n\t\t\tbreak\n\t\tcase _LOAD_DLL_DEBUG_EVENT:\n\t\t\tdebugInfo := (*_LOAD_DLL_DEBUG_INFO)(unionPtr)\n\t\t\thFile := debugInfo.File\n\t\t\tif hFile != 0 && hFile != syscall.InvalidHandle {\n\t\t\t\terr = syscall.CloseHandle(hFile)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\tcase _UNLOAD_DLL_DEBUG_EVENT:\n\t\t\tbreak\n\t\tcase _RIP_EVENT:\n\t\t\tbreak\n\t\tcase _EXCEPTION_DEBUG_EVENT:\n\t\t\tif flags&waitDontHandleExceptions != 0 {\n\t\t\t\tcontinueStatus = _DBG_EXCEPTION_NOT_HANDLED\n\t\t\t\tbreak\n\t\t\t}\n\t\t\texception := (*_EXCEPTION_DEBUG_INFO)(unionPtr)\n\t\t\ttid := int(debugEvent.ThreadId)\n\t\t\tdbp := procgrp.procForPid(int(debugEvent.ProcessId))\n\n\t\t\tswitch code := exception.ExceptionRecord.ExceptionCode; code {\n\t\t\tcase _EXCEPTION_BREAKPOINT:\n\n\t\t\t\t// check if the exception address really is a breakpoint instruction, if\n\t\t\t\t// it isn't we already removed that breakpoint and we can't deal with\n\t\t\t\t// this exception anymore.\n\t\t\t\tatbp := true\n\t\t\t\tif thread, found := dbp.threads[tid]; found {\n\t\t\t\t\tdata := make([]byte, dbp.bi.Arch.BreakpointSize())\n\t\t\t\t\tif _, err := thread.ReadMemory(data, uint64(exception.ExceptionRecord.ExceptionAddress)); err == nil {\n\t\t\t\t\t\tinstr := dbp.bi.Arch.BreakpointInstruction()\n\t\t\t\t\t\tfor i := range instr {\n\t\t\t\t\t\t\tif data[i] != instr[i] {\n\t\t\t\t\t\t\t\tatbp = false\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif !atbp {\n\t\t\t\t\t\tthread.setPC(uint64(exception.ExceptionRecord.ExceptionAddress))\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif atbp {\n\t\t\t\t\tdbp.os.breakThread = tid\n\t\t\t\t\tif th := dbp.threads[tid]; th != nil {\n\t\t\t\t\t\tth.os.setbp = true\n\t\t\t\t\t}\n\t\t\t\t\treturn tid, nil\n\t\t\t\t} else {\n\t\t\t\t\tcontinueStatus = _DBG_CONTINUE\n\t\t\t\t}\n\t\t\tcase _EXCEPTION_SINGLE_STEP:\n\t\t\t\tdbp.os.breakThread = tid\n\t\t\t\treturn tid, nil\n\t\t\tcase _MS_VC_EXCEPTION:\n\t\t\t\t// This exception is sent to set the thread name in VisualC, we should\n\t\t\t\t// mask it or it might crash the program.\n\t\t\t\tcontinueStatus = _DBG_CONTINUE\n\t\t\tdefault:\n\t\t\t\tcontinueStatus = _DBG_EXCEPTION_NOT_HANDLED\n\t\t\t}\n\t\tcase _EXIT_PROCESS_DEBUG_EVENT:\n\t\t\tdebugInfo := (*_EXIT_PROCESS_DEBUG_INFO)(unionPtr)\n\t\t\tdbp := procgrp.procForPid(int(debugEvent.ProcessId))\n\t\t\tdbp.postExit()\n\t\t\tif procgrp.numValid() == 0 {\n\t\t\t\terr = _ContinueDebugEvent(debugEvent.ProcessId, debugEvent.ThreadId, continueStatus)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t\treturn 0, proc.ErrProcessExited{Pid: dbp.pid, Status: int(debugInfo.ExitCode)}\n\t\t\t}\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"unknown debug event code: %d\", debugEvent.DebugEventCode)\n\t\t}\n\n\t\t// .. and then continue unless we received an event that indicated we should break into debugger.\n\t\terr = _ContinueDebugEvent(debugEvent.ProcessId, debugEvent.ThreadId, continueStatus)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n}\n\nfunc trapWait(procgrp *processGroup, pid int) (*nativeThread, error) {\n\tvar err error\n\tvar tid int\n\tprocgrp.procs[0].execPtraceFunc(func() {\n\t\ttid, err = procgrp.waitForDebugEvent(waitBlocking)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tth := procgrp.procForThread(tid).threads[tid]\n\treturn th, nil\n}\n\nfunc (dbp *nativeProcess) exitGuard(err error) error {\n\treturn err\n}\n\nfunc (procgrp *processGroup) resume() error {\n\tfor _, dbp := range procgrp.procs {\n\t\tif valid, _ := dbp.Valid(); !valid {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, thread := range dbp.threads {\n\t\t\tif thread.CurrentBreakpoint.Breakpoint != nil {\n\t\t\t\tif err := procgrp.stepInstruction(thread); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tthread.CurrentBreakpoint.Clear()\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, dbp := range procgrp.procs {\n\t\tif valid, _ := dbp.Valid(); !valid {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, thread := range dbp.threads {\n\t\t\t_, err := _ResumeThread(thread.os.hThread)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tdbp.os.running = true\n\t}\n\n\treturn nil\n}\n\n// stop stops all running threads threads and sets breakpoints\nfunc (procgrp *processGroup) stop(cctx *proc.ContinueOnceContext, trapthread *nativeThread) (*nativeThread, error) {\n\tif procgrp.numValid() == 0 {\n\t\treturn nil, proc.ErrProcessExited{Pid: procgrp.procs[0].pid}\n\t}\n\n\ttrapproc := procgrp.procForThread(trapthread.ID)\n\ttrapproc.os.running = false\n\n\tfor _, dbp := range procgrp.procs {\n\t\tfor _, th := range dbp.threads {\n\t\t\tth.os.setbp = false\n\t\t}\n\t}\n\n\ttrapthread.os.setbp = true\n\n\t// While the debug event that stopped the target was being propagated\n\t// other target threads could generate other debug events.\n\t// After this function we need to know about all the threads\n\t// stopped on a breakpoint. To do that we first suspend all target\n\t// threads and then repeatedly call _ContinueDebugEvent followed by\n\t// waitForDebugEvent in non-blocking mode.\n\t// We need to explicitly call SuspendThread because otherwise the\n\t// call to _ContinueDebugEvent will resume execution of some of the\n\t// target threads.\n\n\terr := trapthread.SetCurrentBreakpoint(true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, dbp := range procgrp.procs {\n\t\tif valid, _ := dbp.Valid(); !valid {\n\t\t\tcontinue\n\t\t}\n\t\tdbp.suspendAllThreads()\n\t}\n\n\tlastEventProc := trapproc\n\tfor {\n\t\tvar err error\n\t\tvar tid int\n\t\tlastEventProc.execPtraceFunc(func() {\n\t\t\terr = _ContinueDebugEvent(uint32(lastEventProc.pid), uint32(lastEventProc.os.breakThread), _DBG_CONTINUE)\n\t\t\tif err == nil {\n\t\t\t\ttid, _ = procgrp.waitForDebugEvent(waitSuspendNewThreads)\n\t\t\t}\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif tid == 0 {\n\t\t\tbreak\n\t\t}\n\t\tdbp := procgrp.procForThread(tid)\n\t\terr = dbp.threads[tid].SetCurrentBreakpoint(true)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tlastEventProc = dbp\n\t}\n\n\t// Check if trapthread still exist, if the process is dying it could have\n\t// been removed while we were stopping the other threads.\n\ttrapthreadFound := false\n\tfor _, thread := range trapproc.threads {\n\t\tif thread.ID == trapthread.ID {\n\t\t\ttrapthreadFound = true\n\t\t}\n\t\tif thread.os.delayErr != nil && thread.os.delayErr != syscall.Errno(0x5) {\n\t\t\t// Do not report Access is denied error, it is caused by the thread\n\t\t\t// having already died but we haven't been notified about it yet.\n\t\t\treturn nil, thread.os.delayErr\n\t\t}\n\t}\n\n\tif !trapthreadFound {\n\t\twasDbgUiRemoteBreakIn := trapthread.os.dbgUiRemoteBreakIn\n\t\t// trapthread exited during stop, pick another one\n\t\ttrapthread = nil\n\t\tfor _, thread := range trapproc.threads {\n\t\t\tif thread.CurrentBreakpoint.Breakpoint != nil && thread.os.delayErr == nil {\n\t\t\t\ttrapthread = thread\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif trapthread == nil && wasDbgUiRemoteBreakIn {\n\t\t\t// If this was triggered by a manual stop request we should stop\n\t\t\t// regardless, pick a thread.\n\t\t\tfor _, thread := range trapproc.threads {\n\t\t\t\treturn thread, nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn trapthread, nil\n}\n\nfunc (dbp *nativeProcess) suspendAllThreads() {\n\tcontext := newContext()\n\tfor _, thread := range dbp.threads {\n\t\tthread.os.delayErr = nil\n\t\tif !thread.os.dbgUiRemoteBreakIn {\n\t\t\t// Wait before reporting the error, the thread could be removed when we\n\t\t\t// call waitForDebugEvent in the next loop.\n\t\t\t_, thread.os.delayErr = _SuspendThread(thread.os.hThread)\n\t\t\tif thread.os.delayErr == nil {\n\t\t\t\t// This call will block until the thread has stopped.\n\t\t\t\t_ = thread.getContext(context)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (procgrp *processGroup) detachChild(dbp *nativeProcess) error {\n\tfor _, thread := range dbp.threads {\n\t\t_, err := _ResumeThread(thread.os.hThread)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\terr := _DebugActiveProcessStop(uint32(dbp.pid))\n\tdbp.detached.Store(true)\n\tdbp.postExit()\n\treturn err\n}\n\nfunc (dbp *nativeProcess) detach(kill bool) error {\n\tif !kill {\n\t\t//TODO(aarzilli): when debug.Target exist Detach should be moved to\n\t\t// debug.Target and the call to RestoreAsyncPreempt should be moved there.\n\t\tfor _, thread := range dbp.threads {\n\t\t\t_, err := _ResumeThread(thread.os.hThread)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn _DebugActiveProcessStop(uint32(dbp.pid))\n}\n\nfunc (dbp *nativeProcess) EntryPoint() (uint64, error) {\n\treturn dbp.os.entryPoint, nil\n}\n\nfunc (dbp *nativeProcess) SupportsBPF() bool {\n\treturn false\n}\n\nfunc (dbp *nativeProcess) SetUProbe(fnName string, goidOffset int64, args []ebpf.UProbeArgMap) error {\n\treturn nil\n}\n\nfunc (dbp *nativeProcess) GetBufferedTracepoints() []ebpf.RawUProbeParams {\n\treturn nil\n}\n\ntype _PROCESS_BASIC_INFORMATION struct {\n\tExitStatus                   sys.NTStatus\n\tPebBaseAddress               uintptr\n\tAffinityMask                 uintptr\n\tBasePriority                 int32\n\tUniqueProcessId              uintptr\n\tInheritedFromUniqueProcessId uintptr\n}\n\ntype _PEB struct {\n\treserved1              [2]byte\n\tBeingDebugged          byte\n\tBitField               byte\n\treserved3              uintptr\n\tImageBaseAddress       uintptr\n\tLdr                    uintptr\n\tProcessParameters      uintptr\n\treserved4              [3]uintptr\n\tAtlThunkSListPtr       uintptr\n\treserved5              uintptr\n\treserved6              uint32\n\treserved7              uintptr\n\treserved8              uint32\n\tAtlThunkSListPtr32     uint32\n\treserved9              [45]uintptr\n\treserved10             [96]byte\n\tPostProcessInitRoutine uintptr\n\treserved11             [128]byte\n\treserved12             [1]uintptr\n\tSessionId              uint32\n}\n\ntype _RTL_USER_PROCESS_PARAMETERS struct {\n\tMaximumLength, Length uint32\n\n\tFlags, DebugFlags uint32\n\n\tConsoleHandle                                sys.Handle\n\tConsoleFlags                                 uint32\n\tStandardInput, StandardOutput, StandardError sys.Handle\n\n\tCurrentDirectory struct {\n\t\tDosPath _NTUnicodeString\n\t\tHandle  sys.Handle\n\t}\n\n\tDllPath       _NTUnicodeString\n\tImagePathName _NTUnicodeString\n\tCommandLine   _NTUnicodeString\n\tEnvironment   unsafe.Pointer\n\n\tStartingX, StartingY, CountX, CountY, CountCharsX, CountCharsY, FillAttribute uint32\n\n\tWindowFlags, ShowWindowFlags                     uint32\n\tWindowTitle, DesktopInfo, ShellInfo, RuntimeData _NTUnicodeString\n\tCurrentDirectories                               [32]struct {\n\t\tFlags     uint16\n\t\tLength    uint16\n\t\tTimeStamp uint32\n\t\tDosPath   _NTString\n\t}\n\n\tEnvironmentSize, EnvironmentVersion uintptr\n\n\tPackageDependencyData uintptr\n\tProcessGroupId        uint32\n\tLoaderThreads         uint32\n\n\tRedirectionDllName               _NTUnicodeString\n\tHeapPartitionName                _NTUnicodeString\n\tDefaultThreadpoolCpuSetMasks     uintptr\n\tDefaultThreadpoolCpuSetMaskCount uint32\n}\n\ntype _NTString struct {\n\tLength        uint16\n\tMaximumLength uint16\n\tBuffer        uintptr\n}\n\ntype _NTUnicodeString struct {\n\tLength        uint16\n\tMaximumLength uint16\n\tBuffer        uintptr\n}\n\nfunc getCmdLine(hProcess syscall.Handle) string {\n\tlogger := logflags.DebuggerLogger()\n\tvar info _PROCESS_BASIC_INFORMATION\n\terr := sys.NtQueryInformationProcess(sys.Handle(hProcess), sys.ProcessBasicInformation, unsafe.Pointer(&info), uint32(unsafe.Sizeof(info)), nil)\n\tif err != nil {\n\t\tlogger.Errorf(\"NtQueryInformationProcess: %v\", err)\n\t\treturn \"\"\n\t}\n\tvar peb _PEB\n\terr = _ReadProcessMemory(hProcess, info.PebBaseAddress, (*byte)(unsafe.Pointer(&peb)), unsafe.Sizeof(peb), nil)\n\tif err != nil {\n\t\tlogger.Errorf(\"Reading PEB: %v\", err)\n\t\treturn \"\"\n\t}\n\tvar upp _RTL_USER_PROCESS_PARAMETERS\n\terr = _ReadProcessMemory(hProcess, peb.ProcessParameters, (*byte)(unsafe.Pointer(&upp)), unsafe.Sizeof(upp), nil)\n\tif err != nil {\n\t\tlogger.Errorf(\"Reading ProcessParameters: %v\", err)\n\t\treturn \"\"\n\t}\n\tif upp.CommandLine.Length%2 != 0 {\n\t\tlogger.Errorf(\"CommandLine length not a multiple of 2\")\n\t\treturn \"\"\n\t}\n\tbuf := make([]byte, upp.CommandLine.Length)\n\terr = _ReadProcessMemory(hProcess, upp.CommandLine.Buffer, &buf[0], uintptr(len(buf)), nil)\n\tif err != nil {\n\t\tlogger.Errorf(\"Reading CommandLine: %v\", err)\n\t\treturn \"\"\n\t}\n\tutf16buf := make([]uint16, len(buf)/2)\n\tfor i := 0; i < len(buf); i += 2 {\n\t\tutf16buf[i/2] = uint16(buf[i+1])<<8 + uint16(buf[i])\n\t}\n\treturn string(utf16.Decode(utf16buf))\n}\n\n// FollowExec enables (or disables) follow exec mode\nfunc (dbp *nativeProcess) FollowExec(v bool) error {\n\tdbp.followExec = v\n\treturn nil\n}\n\nfunc killProcess(pid int) error {\n\tp, err := os.FindProcess(pid)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer p.Release()\n\n\treturn p.Kill()\n}\n"
  },
  {
    "path": "pkg/proc/native/ptrace_darwin.go",
    "content": "//go:build darwin && macnative\n\npackage native\n\nimport sys \"golang.org/x/sys/unix\"\n\n// ptraceAttach executes the sys.PtraceAttach call.\nfunc ptraceAttach(pid int) error {\n\treturn sys.PtraceAttach(pid)\n}\n\n// ptraceDetach executes the PT_DETACH ptrace call.\nfunc ptraceDetach(tid, sig int) error {\n\treturn ptrace(sys.PT_DETACH, tid, 1, uintptr(sig))\n}\n\n// ptraceCont executes the PTRACE_CONT ptrace call.\nfunc ptraceCont(tid, sig int) error {\n\treturn ptrace(sys.PTRACE_CONT, tid, 1, 0)\n}\n\n// ptraceSingleStep returns PT_STEP ptrace call.\nfunc ptraceSingleStep(tid int) error {\n\treturn ptrace(sys.PT_STEP, tid, 1, 0)\n}\n\nfunc ptrace(request, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, err = sys.Syscall6(sys.SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\treturn\n}\n"
  },
  {
    "path": "pkg/proc/native/ptrace_freebsd.go",
    "content": "package native\n\n// #cgo LDFLAGS: -lutil\n//#include <sys/types.h>\n//#include <sys/ptrace.h>\n//\n// #include <stdlib.h>\n//\nimport \"C\"\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n)\n\n// ptraceAttach executes the sys.PtraceAttach call.\n// pid must be a PID, not a LWPID\nfunc ptraceAttach(pid int) error {\n\treturn sys.PtraceAttach(pid)\n}\n\n// ptraceDetach calls ptrace(PTRACE_DETACH).\nfunc ptraceDetach(pid int) error {\n\treturn sys.PtraceDetach(pid)\n}\n\n// ptraceCont executes ptrace PTRACE_CONT\n// id may be a PID or an LWPID\nfunc ptraceCont(id, sig int) error {\n\treturn sys.PtraceCont(id, sig)\n}\n\n// ptraceSingleStep executes ptrace PTRACE_SINGLE_STEP.\n// id may be a PID or an LWPID\nfunc ptraceSingleStep(id int) error {\n\treturn sys.PtraceSingleStep(id)\n}\n\n// Get a list of the thread ids of a process\nfunc ptraceGetLwpList(pid int) (tids []int32) {\n\tnumLWPS := C.ptrace(C.PT_GETNUMLWPS, C.pid_t(pid), C.caddr_t(unsafe.Pointer(uintptr(0))), C.int(0))\n\tif numLWPS < 0 {\n\t\tpanic(\"PT_GETNUMLWPS failed\")\n\t}\n\ttids = make([]int32, numLWPS)\n\tn := C.ptrace(C.PT_GETLWPLIST, C.pid_t(pid), C.caddr_t(unsafe.Pointer(&tids[0])), C.int(numLWPS))\n\tif n < 0 {\n\t\tpanic(\"PT_GETLWPLIST failed\")\n\t}\n\treturn tids[0:n]\n}\n\n// Get info of the thread that caused wpid's process to stop.\nfunc ptraceGetLwpInfo(wpid int) (info sys.PtraceLwpInfoStruct, err error) {\n\terr = sys.PtraceLwpInfo(wpid, &info)\n\treturn info, err\n}\n\n// id may be a PID or an LWPID\nfunc ptraceReadData(id int, addr uintptr, data []byte) (n int, err error) {\n\treturn sys.PtraceIO(sys.PIOD_READ_D, id, addr, data, len(data))\n}\n\n// id may be a PID or an LWPID\nfunc ptraceWriteData(id int, addr uintptr, data []byte) (n int, err error) {\n\treturn sys.PtraceIO(sys.PIOD_WRITE_D, id, addr, data, len(data))\n}\n\nfunc ptraceSuspend(id int) error {\n\t_, _, e1 := sys.Syscall6(sys.SYS_PTRACE, uintptr(C.PT_SUSPEND), uintptr(id), uintptr(1), uintptr(0), 0, 0)\n\tif e1 != 0 {\n\t\treturn syscall.Errno(e1)\n\t}\n\treturn nil\n}\n\nfunc ptraceResume(id int) error {\n\t_, _, e1 := sys.Syscall6(sys.SYS_PTRACE, uintptr(C.PT_RESUME), uintptr(id), uintptr(1), uintptr(0), 0, 0)\n\tif e1 != 0 {\n\t\treturn syscall.Errno(e1)\n\t}\n\treturn nil\n}\n\nfunc ptraceSetStep(id int) error {\n\t_, _, e1 := sys.Syscall6(sys.SYS_PTRACE, uintptr(C.PT_SETSTEP), uintptr(id), uintptr(0), uintptr(0), 0, 0)\n\tif e1 != 0 {\n\t\treturn syscall.Errno(e1)\n\t}\n\treturn nil\n}\n\nfunc ptraceClearStep(id int) error {\n\t_, _, e1 := sys.Syscall6(sys.SYS_PTRACE, uintptr(C.PT_CLEARSTEP), uintptr(id), uintptr(0), uintptr(0), 0, 0)\n\tif e1 != 0 {\n\t\treturn syscall.Errno(e1)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/native/ptrace_freebsd_amd64.go",
    "content": "package native\n\n/*\n#include <sys/types.h>\n#include <sys/ptrace.h>\n*/\nimport \"C\"\n\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/native/cpuid\"\n)\n\nvar (\n\txsaveLen int\n\txsaveErr error\n)\n\nfunc ptraceGetXsaveLen(tid int) (int, error) {\n\tvar info C.struct_ptrace_xstate_info\n\tret, err := C.ptrace(C.PT_GETXSTATE_INFO, C.pid_t(tid), C.caddr_t(unsafe.Pointer(&info)), C.int(unsafe.Sizeof(info)))\n\tif ret == 0 {\n\t\txsaveLen = int(info.xsave_len)\n\t} else {\n\t\txsaveLen, xsaveErr = -1, err\n\t\treturn xsaveLen, fmt.Errorf(\"failed to get xstate info: %v\", err)\n\t}\n\treturn xsaveLen, nil\n}\n\nfunc ptraceXsaveLen(tid int) (int, error) {\n\tif xsaveLen > 0 {\n\t\treturn xsaveLen, nil\n\t}\n\tif xsaveLen < 0 {\n\t\treturn xsaveLen, fmt.Errorf(\"failed to get xstate info: %v\", xsaveErr)\n\t}\n\treturn ptraceGetXsaveLen(tid)\n}\n\n// ptraceGetXsave gets the X86 XSAVE data for the given tid.\nfunc ptraceGetXsave(tid int) ([]byte, error) {\n\tlen, err := ptraceXsaveLen(tid)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\txsaveBuf := make([]byte, len)\n\tret, err := C.ptrace(C.PT_GETXSTATE, C.pid_t(tid), C.caddr_t(unsafe.Pointer(&xsaveBuf[0])), C.int(len))\n\tif ret != 0 {\n\t\treturn nil, fmt.Errorf(\"failed to get xstate: %v\", err)\n\t}\n\treturn xsaveBuf, nil\n}\n\n// ptraceSetXsave sets the X86 XSAVE data for the given tid.\nfunc ptraceSetXsave(tid int, xsaveBuf []byte) error {\n\tret, err := C.ptrace(C.PT_SETXSTATE, C.pid_t(tid), C.caddr_t(unsafe.Pointer(&xsaveBuf[0])), C.int(len(xsaveBuf)))\n\tif ret != 0 {\n\t\treturn fmt.Errorf(\"failed to set xstate: %v\", err)\n\t}\n\treturn nil\n}\n\nfunc ptraceGetRegset(id int) (*amd64util.AMD64Xstate, error) {\n\tvar regset amd64util.AMD64Xstate\n\tret, err := C.ptrace(C.PT_GETFPREGS, C.pid_t(id), C.caddr_t(unsafe.Pointer(&regset.AMD64PtraceFpRegs)), C.int(0))\n\tif ret != 0 {\n\t\treturn nil, fmt.Errorf(\"failed to get FP registers: %v\", err)\n\t}\n\tregset.Xsave, err = ptraceGetXsave(id)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = amd64util.AMD64XstateRead(regset.Xsave, false, &regset, cpuid.AMD64XstateZMMHi256Offset())\n\treturn &regset, err\n}\n\nfunc ptraceSetRegset(id int, regset *amd64util.AMD64Xstate) error {\n\tret, err := C.ptrace(C.PT_SETFPREGS, C.pid_t(id), C.caddr_t(unsafe.Pointer(&regset.AMD64PtraceFpRegs)), C.int(0))\n\tif ret != 0 {\n\t\treturn fmt.Errorf(\"failed to set FP registers: %v\", err)\n\t}\n\tif regset.Xsave != nil {\n\t\treturn ptraceSetXsave(id, regset.Xsave)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/native/ptrace_linux.go",
    "content": "package native\n\nimport (\n\t\"syscall\"\n\n\tsys \"golang.org/x/sys/unix\"\n)\n\n// ptraceAttach executes the sys.PtraceAttach call.\nfunc ptraceAttach(pid int) error {\n\treturn sys.PtraceAttach(pid)\n}\n\n// ptraceDetach calls ptrace(PTRACE_DETACH).\nfunc ptraceDetach(tid, sig int) error {\n\t_, _, err := sys.Syscall6(sys.SYS_PTRACE, sys.PTRACE_DETACH, uintptr(tid), 1, uintptr(sig), 0, 0)\n\tif err != syscall.Errno(0) {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// ptraceCont executes ptrace PTRACE_CONT\nfunc ptraceCont(tid, sig int) error {\n\treturn sys.PtraceCont(tid, sig)\n}\n\n// ptraceSingleStep executes ptrace PTRACE_SINGLESTEP\nfunc ptraceSingleStep(pid, sig int) error {\n\t_, _, e1 := sys.Syscall6(sys.SYS_PTRACE, uintptr(sys.PTRACE_SINGLESTEP), uintptr(pid), uintptr(0), uintptr(sig), 0, 0)\n\tif e1 != 0 {\n\t\treturn e1\n\t}\n\treturn nil\n}\n\n// remoteIovec is like golang.org/x/sys/unix.Iovec but uses uintptr for the\n// base field instead of *byte so that we can use it with addresses that\n// belong to the target process.\ntype remoteIovec struct {\n\tbase uintptr\n\tlen  uintptr\n}\n"
  },
  {
    "path": "pkg/proc/native/ptrace_linux_386.go",
    "content": "package native\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/native/cpuid\"\n)\n\n// ptraceGetRegset returns floating point registers of the specified thread\n// using PTRACE.\n// See i386_linux_fetch_inferior_registers in gdb/i386-linux-nat.c.html\n// and i386_supply_xsave in gdb/i386-tdep.c.html\n// and Section 13.1 (and following) of Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 1: Basic Architecture\nfunc ptraceGetRegset(tid int) (regset amd64util.AMD64Xstate, err error) {\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETFPREGS, uintptr(tid), uintptr(0), uintptr(unsafe.Pointer(&regset.AMD64PtraceFpRegs)), 0, 0)\n\tif err == syscall.Errno(0) || err == syscall.ENODEV {\n\t\t// ignore ENODEV, it just means this CPU doesn't have X87 registers (??)\n\t\terr = nil\n\t}\n\n\txstateargs := make([]byte, cpuid.AMD64XstateMaxSize())\n\tiov := sys.Iovec{Base: &xstateargs[0], Len: uint32(len(xstateargs))}\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(tid), _NT_X86_XSTATE, uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err != syscall.Errno(0) {\n\t\tif err == syscall.ENODEV || err == syscall.EIO || err == syscall.EINVAL {\n\t\t\t// ignore ENODEV, it just means this CPU or kernel doesn't support XSTATE, see https://github.com/go-delve/delve/issues/1022\n\t\t\t// also ignore EIO, it means that we are running on an old kernel (pre 2.6.34) and PTRACE_GETREGSET is not implemented\n\t\t\t// also ignore EINVAL, it means the kernel itself does not support the NT_X86_XSTATE argument (but does support PTRACE_GETREGSET)\n\t\t\terr = nil\n\t\t}\n\t\treturn\n\t} else {\n\t\terr = nil\n\t}\n\n\tregset.Xsave = xstateargs[:iov.Len]\n\terr = amd64util.AMD64XstateRead(regset.Xsave, false, &regset, cpuid.AMD64XstateZMMHi256Offset())\n\treturn\n}\n\n// ptraceGetTls return the addr of tls by PTRACE_GET_THREAD_AREA for specify thread.\n// See https://man7.org/linux/man-pages/man2/ptrace.2.html for detail about PTRACE_GET_THREAD_AREA.\n// struct user_desc at https://go.dev/src/runtime/sys_linux_386.s\n//\n//\ttype UserDesc struct {\n//\t\t EntryNumber uint32\n//\t\t BaseAddr    uint32\n//\t\t Limit       uint32\n//\t\t Flag        uint32\n//\t}\nfunc ptraceGetTls(gs int32, tid int) (uint32, error) {\n\tud := [4]uint32{}\n\n\t// Gs usually is 0x33\n\t_, _, err := syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GET_THREAD_AREA, uintptr(tid), uintptr(gs>>3), uintptr(unsafe.Pointer(&ud)), 0, 0)\n\tif err == syscall.ENODEV || err == syscall.EIO {\n\t\treturn 0, fmt.Errorf(\"%s\", err)\n\t}\n\n\treturn uint32(ud[1]), nil\n}\n\n// processVmRead calls process_vm_readv\nfunc processVmRead(tid int, addr uintptr, data []byte) (int, error) {\n\tlen_iov := uint32(len(data))\n\tlocal_iov := sys.Iovec{Base: &data[0], Len: len_iov}\n\tremote_iov := remoteIovec{base: addr, len: uintptr(len_iov)}\n\tn, _, err := syscall.Syscall6(sys.SYS_PROCESS_VM_READV, uintptr(tid), uintptr(unsafe.Pointer(&local_iov)), 1, uintptr(unsafe.Pointer(&remote_iov)), 1, 0)\n\tif err != syscall.Errno(0) {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\n// processVmWrite calls process_vm_writev\nfunc processVmWrite(tid int, addr uintptr, data []byte) (int, error) {\n\tlen_iov := uint32(len(data))\n\tlocal_iov := sys.Iovec{Base: &data[0], Len: len_iov}\n\tremote_iov := remoteIovec{base: addr, len: uintptr(len_iov)}\n\tn, _, err := syscall.Syscall6(sys.SYS_PROCESS_VM_WRITEV, uintptr(tid), uintptr(unsafe.Pointer(&local_iov)), 1, uintptr(unsafe.Pointer(&remote_iov)), 1, 0)\n\tif err != syscall.Errno(0) {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n"
  },
  {
    "path": "pkg/proc/native/ptrace_linux_64bit.go",
    "content": "//go:build (linux && amd64) || (linux && arm64) || (linux && ppc64le) || (linux && riscv64) || (linux && loong64)\n\npackage native\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n)\n\n// processVmRead calls process_vm_readv\nfunc processVmRead(tid int, addr uintptr, data []byte) (int, error) {\n\tlen_iov := uint64(len(data))\n\tlocal_iov := sys.Iovec{Base: &data[0], Len: len_iov}\n\tremote_iov := remoteIovec{base: addr, len: uintptr(len_iov)}\n\tn, _, err := syscall.Syscall6(sys.SYS_PROCESS_VM_READV, uintptr(tid), uintptr(unsafe.Pointer(&local_iov)), 1, uintptr(unsafe.Pointer(&remote_iov)), 1, 0)\n\tif err != syscall.Errno(0) {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\n// processVmWrite calls process_vm_writev\nfunc processVmWrite(tid int, addr uintptr, data []byte) (int, error) {\n\tlen_iov := uint64(len(data))\n\tlocal_iov := sys.Iovec{Base: &data[0], Len: len_iov}\n\tremote_iov := remoteIovec{base: addr, len: uintptr(len_iov)}\n\tn, _, err := syscall.Syscall6(sys.SYS_PROCESS_VM_WRITEV, uintptr(tid), uintptr(unsafe.Pointer(&local_iov)), 1, uintptr(unsafe.Pointer(&remote_iov)), 1, 0)\n\tif err != syscall.Errno(0) {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n"
  },
  {
    "path": "pkg/proc/native/ptrace_linux_amd64.go",
    "content": "package native\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/native/cpuid\"\n)\n\n// ptraceGetRegset returns floating point registers of the specified thread\n// using PTRACE.\n// See amd64_linux_fetch_inferior_registers in gdb/amd64-linux-nat.c.html\n// and amd64_supply_xsave in gdb/amd64-tdep.c.html\n// and Section 13.1 (and following) of Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 1: Basic Architecture\nfunc ptraceGetRegset(tid int) (regset amd64util.AMD64Xstate, err error) {\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETFPREGS, uintptr(tid), uintptr(0), uintptr(unsafe.Pointer(&regset.AMD64PtraceFpRegs)), 0, 0)\n\tif err == syscall.Errno(0) || err == syscall.ENODEV {\n\t\t// ignore ENODEV, it just means this CPU doesn't have X87 registers (??)\n\t\terr = nil\n\t}\n\n\txstateargs := make([]byte, cpuid.AMD64XstateMaxSize())\n\tiov := sys.Iovec{Base: &xstateargs[0], Len: uint64(len(xstateargs))}\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(tid), _NT_X86_XSTATE, uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err != syscall.Errno(0) {\n\t\tif err == syscall.ENODEV || err == syscall.EIO || err == syscall.EINVAL {\n\t\t\t// ignore ENODEV, it just means this CPU or kernel doesn't support XSTATE, see https://github.com/go-delve/delve/issues/1022\n\t\t\t// also ignore EIO, it means that we are running on an old kernel (pre 2.6.34) and PTRACE_GETREGSET is not implemented\n\t\t\t// also ignore EINVAL, it means the kernel itself does not support the NT_X86_XSTATE argument (but does support PTRACE_GETREGSET)\n\t\t\terr = nil\n\t\t}\n\t\treturn\n\t} else {\n\t\terr = nil\n\t}\n\n\tregset.Xsave = xstateargs[:iov.Len]\n\terr = amd64util.AMD64XstateRead(regset.Xsave, false, &regset, cpuid.AMD64XstateZMMHi256Offset())\n\treturn\n}\n"
  },
  {
    "path": "pkg/proc/native/register_linux_386.go",
    "content": "package native\n\nimport (\n\t\"fmt\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\n// setPC sets EIP to the value specified by 'pc'.\nfunc (thread *nativeThread) setPC(pc uint64) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.I386Registers)\n\tr.Regs.Eip = int32(pc)\n\tthread.dbp.execPtraceFunc(func() { err = sys.PtraceSetRegs(thread.ID, (*sys.PtraceRegs)(r.Regs)) })\n\treturn err\n}\n\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.I386Registers)\n\tswitch regNum {\n\tcase regnum.I386_Eip:\n\t\tr.Regs.Eip = int32(reg.Uint64Val)\n\tcase regnum.I386_Esp:\n\t\tr.Regs.Esp = int32(reg.Uint64Val)\n\tcase regnum.I386_Edx:\n\t\tr.Regs.Edx = int32(reg.Uint64Val)\n\tdefault:\n\t\t//TODO(aarzilli): when the register calling convention is adopted by Go on\n\t\t// i386 this should be implemented.\n\t\treturn fmt.Errorf(\"changing register %d not implemented\", regNum)\n\t}\n\tthread.dbp.execPtraceFunc(func() { err = sys.PtraceSetRegs(thread.ID, (*sys.PtraceRegs)(r.Regs)) })\n\treturn err\n}\n\nfunc registers(thread *nativeThread) (proc.Registers, error) {\n\tvar (\n\t\tregs linutil.I386PtraceRegs\n\t\terr  error\n\t)\n\tthread.dbp.execPtraceFunc(func() { err = sys.PtraceGetRegs(thread.ID, (*sys.PtraceRegs)(&regs)) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tr := linutil.NewI386Registers(&regs, func(r *linutil.I386Registers) error {\n\t\tvar fpregset amd64util.AMD64Xstate\n\t\tvar floatLoadError error\n\t\tr.Fpregs, fpregset, floatLoadError = thread.fpRegisters()\n\t\tr.Fpregset = &fpregset\n\t\treturn floatLoadError\n\t})\n\tthread.dbp.execPtraceFunc(func() {\n\t\ttls, _ := ptraceGetTls(regs.Xgs, thread.ThreadID())\n\t\tr.Tls = uint64(tls)\n\t})\n\treturn r, nil\n}\n\nconst _NT_X86_XSTATE = 0x202\n\nfunc (thread *nativeThread) fpRegisters() (regs []proc.Register, fpregs amd64util.AMD64Xstate, err error) {\n\tthread.dbp.execPtraceFunc(func() { fpregs, err = ptraceGetRegset(thread.ID) })\n\tregs = fpregs.Decode()\n\tif err != nil {\n\t\terr = fmt.Errorf(\"could not get floating point registers: %v\", err.Error())\n\t}\n\treturn\n}\n"
  },
  {
    "path": "pkg/proc/native/registers_darwin_amd64.go",
    "content": "//go:build darwin && macnative\n\npackage native\n\n// #include \"threads_darwin.h\"\nimport \"C\"\nimport (\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"golang.org/x/arch/x86/x86asm\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// Regs represents CPU registers on an AMD64 processor.\ntype Regs struct {\n\trax    uint64\n\trbx    uint64\n\trcx    uint64\n\trdx    uint64\n\trdi    uint64\n\trsi    uint64\n\trbp    uint64\n\trsp    uint64\n\tr8     uint64\n\tr9     uint64\n\tr10    uint64\n\tr11    uint64\n\tr12    uint64\n\tr13    uint64\n\tr14    uint64\n\tr15    uint64\n\trip    uint64\n\trflags uint64\n\tcs     uint64\n\tfs     uint64\n\tgs     uint64\n\tgsBase uint64\n\tfpregs []proc.Register\n}\n\nfunc (r *Regs) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tvar regs = []struct {\n\t\tk string\n\t\tv uint64\n\t}{\n\t\t{\"Rip\", r.rip},\n\t\t{\"Rsp\", r.rsp},\n\t\t{\"Rax\", r.rax},\n\t\t{\"Rbx\", r.rbx},\n\t\t{\"Rcx\", r.rcx},\n\t\t{\"Rdx\", r.rdx},\n\t\t{\"Rdi\", r.rdi},\n\t\t{\"Rsi\", r.rsi},\n\t\t{\"Rbp\", r.rbp},\n\t\t{\"R8\", r.r8},\n\t\t{\"R9\", r.r9},\n\t\t{\"R10\", r.r10},\n\t\t{\"R11\", r.r11},\n\t\t{\"R12\", r.r12},\n\t\t{\"R13\", r.r13},\n\t\t{\"R14\", r.r14},\n\t\t{\"R15\", r.r15},\n\t\t{\"Rflags\", r.rflags},\n\t\t{\"Cs\", r.cs},\n\t\t{\"Fs\", r.fs},\n\t\t{\"Gs\", r.gs},\n\t\t{\"Gs_base\", r.gsBase},\n\t}\n\tout := make([]proc.Register, 0, len(regs)+len(r.fpregs))\n\tfor _, reg := range regs {\n\t\tif reg.k == \"Rflags\" {\n\t\t\tout = proc.AppendUint64Register(out, reg.k, reg.v)\n\t\t} else {\n\t\t\tout = proc.AppendUint64Register(out, reg.k, reg.v)\n\t\t}\n\t}\n\tif floatingPoint {\n\t\tout = append(out, r.fpregs...)\n\t}\n\treturn out, nil\n}\n\n// PC returns the current program counter\n// i.e. the RIP CPU register.\nfunc (r *Regs) PC() uint64 {\n\treturn r.rip\n}\n\n// SP returns the stack pointer location,\n// i.e. the RSP register.\nfunc (r *Regs) SP() uint64 {\n\treturn r.rsp\n}\n\nfunc (r *Regs) BP() uint64 {\n\treturn r.rbp\n}\n\nfunc (r *Regs) LR() uint64 {\n\treturn 0\n}\n\n// TLS returns the value of the register\n// that contains the location of the thread\n// local storage segment.\nfunc (r *Regs) TLS() uint64 {\n\treturn r.gsBase\n}\n\nfunc (r *Regs) GAddr() (uint64, bool) {\n\treturn 0, false\n}\n\n// SetPC sets the RIP register to the value specified by `pc`.\nfunc (thread *nativeThread) setPC(pc uint64) error {\n\tkret := C.set_pc(thread.os.threadAct, C.uint64_t(pc))\n\tif kret != C.KERN_SUCCESS {\n\t\treturn fmt.Errorf(\"could not set pc\")\n\t}\n\treturn nil\n}\n\n// SetReg changes the value of the specified register.\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tif regNum != regnum.AMD64_Rip {\n\t\treturn fmt.Errorf(\"changing register %d not implemented\", regNum)\n\t}\n\treturn thread.setPC(reg.Uint64Val)\n}\n\nfunc (r *Regs) Get(n int) (uint64, error) {\n\treg := x86asm.Reg(n)\n\tconst (\n\t\tmask8  = 0x000f\n\t\tmask16 = 0x00ff\n\t\tmask32 = 0xffff\n\t)\n\n\tswitch reg {\n\t// 8-bit\n\tcase x86asm.AL:\n\t\treturn r.rax & mask8, nil\n\tcase x86asm.CL:\n\t\treturn r.rcx & mask8, nil\n\tcase x86asm.DL:\n\t\treturn r.rdx & mask8, nil\n\tcase x86asm.BL:\n\t\treturn r.rbx & mask8, nil\n\tcase x86asm.AH:\n\t\treturn (r.rax >> 8) & mask8, nil\n\tcase x86asm.CH:\n\t\treturn (r.rcx >> 8) & mask8, nil\n\tcase x86asm.DH:\n\t\treturn (r.rdx >> 8) & mask8, nil\n\tcase x86asm.BH:\n\t\treturn (r.rbx >> 8) & mask8, nil\n\tcase x86asm.SPB:\n\t\treturn r.rsp & mask8, nil\n\tcase x86asm.BPB:\n\t\treturn r.rbp & mask8, nil\n\tcase x86asm.SIB:\n\t\treturn r.rsi & mask8, nil\n\tcase x86asm.DIB:\n\t\treturn r.rdi & mask8, nil\n\tcase x86asm.R8B:\n\t\treturn r.r8 & mask8, nil\n\tcase x86asm.R9B:\n\t\treturn r.r9 & mask8, nil\n\tcase x86asm.R10B:\n\t\treturn r.r10 & mask8, nil\n\tcase x86asm.R11B:\n\t\treturn r.r11 & mask8, nil\n\tcase x86asm.R12B:\n\t\treturn r.r12 & mask8, nil\n\tcase x86asm.R13B:\n\t\treturn r.r13 & mask8, nil\n\tcase x86asm.R14B:\n\t\treturn r.r14 & mask8, nil\n\tcase x86asm.R15B:\n\t\treturn r.r15 & mask8, nil\n\n\t// 16-bit\n\tcase x86asm.AX:\n\t\treturn r.rax & mask16, nil\n\tcase x86asm.CX:\n\t\treturn r.rcx & mask16, nil\n\tcase x86asm.DX:\n\t\treturn r.rdx & mask16, nil\n\tcase x86asm.BX:\n\t\treturn r.rbx & mask16, nil\n\tcase x86asm.SP:\n\t\treturn r.rsp & mask16, nil\n\tcase x86asm.BP:\n\t\treturn r.rbp & mask16, nil\n\tcase x86asm.SI:\n\t\treturn r.rsi & mask16, nil\n\tcase x86asm.DI:\n\t\treturn r.rdi & mask16, nil\n\tcase x86asm.R8W:\n\t\treturn r.r8 & mask16, nil\n\tcase x86asm.R9W:\n\t\treturn r.r9 & mask16, nil\n\tcase x86asm.R10W:\n\t\treturn r.r10 & mask16, nil\n\tcase x86asm.R11W:\n\t\treturn r.r11 & mask16, nil\n\tcase x86asm.R12W:\n\t\treturn r.r12 & mask16, nil\n\tcase x86asm.R13W:\n\t\treturn r.r13 & mask16, nil\n\tcase x86asm.R14W:\n\t\treturn r.r14 & mask16, nil\n\tcase x86asm.R15W:\n\t\treturn r.r15 & mask16, nil\n\n\t// 32-bit\n\tcase x86asm.EAX:\n\t\treturn r.rax & mask32, nil\n\tcase x86asm.ECX:\n\t\treturn r.rcx & mask32, nil\n\tcase x86asm.EDX:\n\t\treturn r.rdx & mask32, nil\n\tcase x86asm.EBX:\n\t\treturn r.rbx & mask32, nil\n\tcase x86asm.ESP:\n\t\treturn r.rsp & mask32, nil\n\tcase x86asm.EBP:\n\t\treturn r.rbp & mask32, nil\n\tcase x86asm.ESI:\n\t\treturn r.rsi & mask32, nil\n\tcase x86asm.EDI:\n\t\treturn r.rdi & mask32, nil\n\tcase x86asm.R8L:\n\t\treturn r.r8 & mask32, nil\n\tcase x86asm.R9L:\n\t\treturn r.r9 & mask32, nil\n\tcase x86asm.R10L:\n\t\treturn r.r10 & mask32, nil\n\tcase x86asm.R11L:\n\t\treturn r.r11 & mask32, nil\n\tcase x86asm.R12L:\n\t\treturn r.r12 & mask32, nil\n\tcase x86asm.R13L:\n\t\treturn r.r13 & mask32, nil\n\tcase x86asm.R14L:\n\t\treturn r.r14 & mask32, nil\n\tcase x86asm.R15L:\n\t\treturn r.r15 & mask32, nil\n\n\t// 64-bit\n\tcase x86asm.RAX:\n\t\treturn r.rax, nil\n\tcase x86asm.RCX:\n\t\treturn r.rcx, nil\n\tcase x86asm.RDX:\n\t\treturn r.rdx, nil\n\tcase x86asm.RBX:\n\t\treturn r.rbx, nil\n\tcase x86asm.RSP:\n\t\treturn r.rsp, nil\n\tcase x86asm.RBP:\n\t\treturn r.rbp, nil\n\tcase x86asm.RSI:\n\t\treturn r.rsi, nil\n\tcase x86asm.RDI:\n\t\treturn r.rdi, nil\n\tcase x86asm.R8:\n\t\treturn r.r8, nil\n\tcase x86asm.R9:\n\t\treturn r.r9, nil\n\tcase x86asm.R10:\n\t\treturn r.r10, nil\n\tcase x86asm.R11:\n\t\treturn r.r11, nil\n\tcase x86asm.R12:\n\t\treturn r.r12, nil\n\tcase x86asm.R13:\n\t\treturn r.r13, nil\n\tcase x86asm.R14:\n\t\treturn r.r14, nil\n\tcase x86asm.R15:\n\t\treturn r.r15, nil\n\t}\n\n\treturn 0, proc.ErrUnknownRegister\n}\n\nfunc registers(thread *nativeThread) (proc.Registers, error) {\n\tvar state C.x86_thread_state64_t\n\tvar identity C.thread_identifier_info_data_t\n\tkret := C.get_registers(C.mach_port_name_t(thread.os.threadAct), &state)\n\tif kret != C.KERN_SUCCESS {\n\t\treturn nil, fmt.Errorf(\"could not get registers\")\n\t}\n\tkret = C.get_identity(C.mach_port_name_t(thread.os.threadAct), &identity)\n\tif kret != C.KERN_SUCCESS {\n\t\treturn nil, fmt.Errorf(\"could not get thread identity information\")\n\t}\n\t/*\n\t\tthread_identifier_info::thread_handle contains the base of the\n\t\tthread-specific data area, which on x86 and x86_64 is the thread’s base\n\t\taddress of the %gs segment. 10.9.2 xnu-2422.90.20/osfmk/kern/thread.c\n\t\tthread_info_internal() gets the value from\n\t\tmachine_thread::cthread_self, which is the same value used to set the\n\t\t%gs base in xnu-2422.90.20/osfmk/i386/pcb_native.c\n\t\tact_machine_switch_pcb().\n\t\t--\n\t\tcomment copied from chromium's crashpad\n\t\thttps://chromium.googlesource.com/crashpad/crashpad/+/master/snapshot/mac/process_reader.cc\n\t*/\n\tregs := &Regs{\n\t\trax:    uint64(state.__rax),\n\t\trbx:    uint64(state.__rbx),\n\t\trcx:    uint64(state.__rcx),\n\t\trdx:    uint64(state.__rdx),\n\t\trdi:    uint64(state.__rdi),\n\t\trsi:    uint64(state.__rsi),\n\t\trbp:    uint64(state.__rbp),\n\t\trsp:    uint64(state.__rsp),\n\t\tr8:     uint64(state.__r8),\n\t\tr9:     uint64(state.__r9),\n\t\tr10:    uint64(state.__r10),\n\t\tr11:    uint64(state.__r11),\n\t\tr12:    uint64(state.__r12),\n\t\tr13:    uint64(state.__r13),\n\t\tr14:    uint64(state.__r14),\n\t\tr15:    uint64(state.__r15),\n\t\trip:    uint64(state.__rip),\n\t\trflags: uint64(state.__rflags),\n\t\tcs:     uint64(state.__cs),\n\t\tfs:     uint64(state.__fs),\n\t\tgs:     uint64(state.__gs),\n\t\tgsBase: uint64(identity.thread_handle),\n\t}\n\n\t// https://opensource.apple.com/source/xnu/xnu-792.13.8/osfmk/mach/i386/thread_status.h?txt\n\tvar fpstate C.x86_float_state64_t\n\tkret = C.get_fpu_registers(C.mach_port_name_t(thread.os.threadAct), &fpstate)\n\tif kret != C.KERN_SUCCESS {\n\t\treturn nil, fmt.Errorf(\"could not get floating point registers\")\n\t}\n\n\tregs.fpregs = proc.AppendUint64Register(regs.fpregs, \"CW\", uint64(*((*uint16)(unsafe.Pointer(&fpstate.__fpu_fcw)))))\n\tregs.fpregs = proc.AppendUint64Register(regs.fpregs, \"SW\", uint64(*((*uint16)(unsafe.Pointer(&fpstate.__fpu_fsw)))))\n\tregs.fpregs = proc.AppendUint64Register(regs.fpregs, \"TW\", uint64(fpstate.__fpu_ftw))\n\tregs.fpregs = proc.AppendUint64Register(regs.fpregs, \"FOP\", uint64(fpstate.__fpu_fop))\n\tregs.fpregs = proc.AppendUint64Register(regs.fpregs, \"FIP\", uint64(fpstate.__fpu_cs)<<32|uint64(fpstate.__fpu_ip))\n\tregs.fpregs = proc.AppendUint64Register(regs.fpregs, \"FDP\", uint64(fpstate.__fpu_ds)<<32|uint64(fpstate.__fpu_dp))\n\n\tfor i, st := range []*C.char{&fpstate.__fpu_stmm0.__mmst_reg[0], &fpstate.__fpu_stmm1.__mmst_reg[0], &fpstate.__fpu_stmm2.__mmst_reg[0], &fpstate.__fpu_stmm3.__mmst_reg[0], &fpstate.__fpu_stmm4.__mmst_reg[0], &fpstate.__fpu_stmm5.__mmst_reg[0], &fpstate.__fpu_stmm6.__mmst_reg[0], &fpstate.__fpu_stmm7.__mmst_reg[0]} {\n\t\tstb := C.GoBytes(unsafe.Pointer(st), 10)\n\t\tregs.fpregs = proc.AppendBytesRegister(regs.fpregs, fmt.Sprintf(\"ST(%d)\", i), stb)\n\t}\n\n\tregs.fpregs = proc.AppendUint64Register(regs.fpregs, \"MXCSR\", uint64(fpstate.__fpu_mxcsr))\n\tregs.fpregs = proc.AppendUint64Register(regs.fpregs, \"MXCSR_MASK\", uint64(fpstate.__fpu_mxcsrmask))\n\n\tfor i, xmm := range []*C.char{&fpstate.__fpu_xmm0.__xmm_reg[0], &fpstate.__fpu_xmm1.__xmm_reg[0], &fpstate.__fpu_xmm2.__xmm_reg[0], &fpstate.__fpu_xmm3.__xmm_reg[0], &fpstate.__fpu_xmm4.__xmm_reg[0], &fpstate.__fpu_xmm5.__xmm_reg[0], &fpstate.__fpu_xmm6.__xmm_reg[0], &fpstate.__fpu_xmm7.__xmm_reg[0], &fpstate.__fpu_xmm8.__xmm_reg[0], &fpstate.__fpu_xmm9.__xmm_reg[0], &fpstate.__fpu_xmm10.__xmm_reg[0], &fpstate.__fpu_xmm11.__xmm_reg[0], &fpstate.__fpu_xmm12.__xmm_reg[0], &fpstate.__fpu_xmm13.__xmm_reg[0], &fpstate.__fpu_xmm14.__xmm_reg[0], &fpstate.__fpu_xmm15.__xmm_reg[0]} {\n\t\tregs.fpregs = proc.AppendBytesRegister(regs.fpregs, fmt.Sprintf(\"XMM%d\", i), C.GoBytes(unsafe.Pointer(xmm), 16))\n\t}\n\n\treturn regs, nil\n}\n\nfunc (r *Regs) Copy() (proc.Registers, error) {\n\t//TODO(aarzilli): implement this to support function calls\n\treturn nil, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/registers_freebsd_amd64.go",
    "content": "package native\n\nimport (\n\t\"fmt\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/fbsdutil\"\n)\n\n// SetPC sets RIP to the value specified by 'pc'.\nfunc (thread *nativeThread) setPC(pc uint64) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*fbsdutil.AMD64Registers)\n\tr.Regs.Rip = int64(pc)\n\tthread.dbp.execPtraceFunc(func() { err = sys.PtraceSetRegs(thread.ID, (*sys.Reg)(r.Regs)) })\n\treturn err\n}\n\n// SetReg changes the value of the specified register.\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*fbsdutil.AMD64Registers)\n\tfpchanged, err := r.SetReg(regNum, reg)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn setRegisters(thread, r, fpchanged)\n}\n\nfunc registers(thread *nativeThread) (proc.Registers, error) {\n\tvar (\n\t\tregs fbsdutil.AMD64PtraceRegs\n\t\terr  error\n\t)\n\tthread.dbp.execPtraceFunc(func() { err = sys.PtraceGetRegs(thread.ID, (*sys.Reg)(&regs)) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar fsbase int64\n\tthread.dbp.execPtraceFunc(func() { err = sys.PtraceGetFsBase(thread.ID, &fsbase) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tr := fbsdutil.NewAMD64Registers(&regs, uint64(fsbase), func(r *fbsdutil.AMD64Registers) error {\n\t\tvar floatLoadError error\n\t\tr.Fpregs, r.Fpregset, floatLoadError = thread.fpRegisters()\n\t\treturn floatLoadError\n\t})\n\treturn r, nil\n}\n\nfunc (thread *nativeThread) fpRegisters() (regs []proc.Register, fpregs *amd64util.AMD64Xstate, err error) {\n\tthread.dbp.execPtraceFunc(func() { fpregs, err = ptraceGetRegset(thread.ID) })\n\tif err != nil {\n\t\terr = fmt.Errorf(\"could not get floating point registers: %v\", err.Error())\n\t}\n\tregs = fpregs.Decode()\n\treturn\n}\n\nfunc setRegisters(thread *nativeThread, r *fbsdutil.AMD64Registers, setFP bool) (err error) {\n\tthread.dbp.execPtraceFunc(func() {\n\t\terr = sys.PtraceSetRegs(thread.ID, (*sys.Reg)(r.Regs))\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tif setFP && r.Fpregset != nil {\n\t\t\terr = ptraceSetRegset(thread.ID, r.Fpregset)\n\t\t}\n\t})\n\treturn\n}\n"
  },
  {
    "path": "pkg/proc/native/registers_linux_amd64.go",
    "content": "package native\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\n// SetPC sets RIP to the value specified by 'pc'.\nfunc (thread *nativeThread) setPC(pc uint64) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.AMD64Registers)\n\tr.Regs.Rip = pc\n\tthread.dbp.execPtraceFunc(func() { err = sys.PtraceSetRegs(thread.ID, (*sys.PtraceRegs)(r.Regs)) })\n\treturn err\n}\n\n// SetReg changes the value of the specified register.\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.AMD64Registers)\n\tfpchanged, err := r.SetReg(regNum, reg)\n\tif err != nil {\n\t\treturn err\n\t}\n\tthread.dbp.execPtraceFunc(func() {\n\t\terr = sys.PtraceSetRegs(thread.ID, (*sys.PtraceRegs)(r.Regs))\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tif fpchanged && r.Fpregset != nil && r.Fpregset.Xsave != nil {\n\t\t\tiov := sys.Iovec{Base: &r.Fpregset.Xsave[0], Len: uint64(len(r.Fpregset.Xsave))}\n\t\t\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(thread.ID), _NT_X86_XSTATE, uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t\tif err == syscall.Errno(0) {\n\t\t\t\terr = nil\n\t\t\t}\n\t\t}\n\t})\n\treturn err\n}\n\nfunc registers(thread *nativeThread) (proc.Registers, error) {\n\tvar (\n\t\tregs linutil.AMD64PtraceRegs\n\t\terr  error\n\t)\n\tthread.dbp.execPtraceFunc(func() { err = sys.PtraceGetRegs(thread.ID, (*sys.PtraceRegs)(&regs)) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tr := linutil.NewAMD64Registers(&regs, func(r *linutil.AMD64Registers) error {\n\t\tvar fpregset amd64util.AMD64Xstate\n\t\tvar floatLoadError error\n\t\tr.Fpregs, fpregset, floatLoadError = thread.fpRegisters()\n\t\tr.Fpregset = &fpregset\n\t\treturn floatLoadError\n\t})\n\treturn r, nil\n}\n\nconst _NT_X86_XSTATE = 0x202\n\nfunc (thread *nativeThread) fpRegisters() (regs []proc.Register, fpregs amd64util.AMD64Xstate, err error) {\n\tthread.dbp.execPtraceFunc(func() { fpregs, err = ptraceGetRegset(thread.ID) })\n\tregs = fpregs.Decode()\n\tif err != nil {\n\t\terr = fmt.Errorf(\"could not get floating point registers: %v\", err.Error())\n\t}\n\treturn\n}\n"
  },
  {
    "path": "pkg/proc/native/registers_linux_arm64.go",
    "content": "package native\n\nimport (\n\t\"debug/elf\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\nconst (\n\t_AARCH64_GREGS_SIZE  = 34 * 8\n\t_AARCH64_FPREGS_SIZE = 32*16 + 8\n\t_NT_ARM_TLS          = 0x401 // used in PTRACE_GETREGSET on ARM64 to retrieve the value of TPIDR_EL0, see source/include/uapi/linux/elf.h and source/arch/arm64/kernel/ptrace.c\n)\n\nfunc ptraceGetGRegs(pid int, regs *linutil.ARM64PtraceRegs) (err error) {\n\tiov := sys.Iovec{Base: (*byte)(unsafe.Pointer(regs)), Len: _AARCH64_GREGS_SIZE}\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(pid), uintptr(elf.NT_PRSTATUS), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\treturn\n}\n\nfunc ptraceGetTpidr_el0(pid int, tpidr_el0 *uint64) (err error) {\n\tiov := sys.Iovec{Base: (*byte)(unsafe.Pointer(tpidr_el0)), Len: uint64(unsafe.Sizeof(*tpidr_el0))}\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(pid), uintptr(_NT_ARM_TLS), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\treturn\n}\n\nfunc ptraceSetGRegs(pid int, regs *linutil.ARM64PtraceRegs) (err error) {\n\tiov := sys.Iovec{Base: (*byte)(unsafe.Pointer(regs)), Len: _AARCH64_GREGS_SIZE}\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(pid), uintptr(elf.NT_PRSTATUS), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\treturn\n}\n\n// ptraceGetFpRegset returns floating point registers of the specified thread\n// using PTRACE.\nfunc ptraceGetFpRegset(tid int) (fpregset []byte, err error) {\n\tvar arm64_fpregs [_AARCH64_FPREGS_SIZE]byte\n\tiov := sys.Iovec{Base: &arm64_fpregs[0], Len: _AARCH64_FPREGS_SIZE}\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(tid), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err != syscall.Errno(0) {\n\t\tif err == syscall.ENODEV {\n\t\t\terr = nil\n\t\t}\n\t\treturn\n\t} else {\n\t\terr = nil\n\t}\n\n\tfpregset = arm64_fpregs[:iov.Len-8]\n\treturn fpregset, err\n}\n\n// setPC sets PC to the value specified by 'pc'.\nfunc (thread *nativeThread) setPC(pc uint64) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.ARM64Registers)\n\tr.Regs.Pc = pc\n\tthread.dbp.execPtraceFunc(func() { err = ptraceSetGRegs(thread.ID, r.Regs) })\n\treturn err\n}\n\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.ARM64Registers)\n\tfpchanged, err := r.SetReg(regNum, reg)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tthread.dbp.execPtraceFunc(func() {\n\t\terr = ptraceSetGRegs(thread.ID, r.Regs)\n\t\tif err != syscall.Errno(0) && err != nil {\n\t\t\treturn\n\t\t}\n\t\tif fpchanged && r.Fpregset != nil {\n\t\t\tiov := sys.Iovec{Base: &r.Fpregset[0], Len: uint64(len(r.Fpregset))}\n\t\t\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(thread.ID), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t}\n\t})\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\treturn err\n}\n\nfunc registers(thread *nativeThread) (proc.Registers, error) {\n\tvar (\n\t\tregs linutil.ARM64PtraceRegs\n\t\terr  error\n\t)\n\tthread.dbp.execPtraceFunc(func() { err = ptraceGetGRegs(thread.ID, &regs) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvar tpidr_el0 uint64\n\tif thread.dbp.iscgo {\n\t\tthread.dbp.execPtraceFunc(func() { err = ptraceGetTpidr_el0(thread.ID, &tpidr_el0) })\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tr := linutil.NewARM64Registers(&regs, thread.dbp.iscgo, tpidr_el0, func(r *linutil.ARM64Registers) error {\n\t\tvar floatLoadError error\n\t\tr.Fpregs, r.Fpregset, floatLoadError = thread.fpRegisters()\n\t\treturn floatLoadError\n\t})\n\treturn r, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/registers_linux_loong64.go",
    "content": "//go:build linux && loong64\n\npackage native\n\nimport (\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\nconst (\n\t// Refer to the definition of struct user_pt_regs in the kernel file ptrace.h\n\t_LOONG64_GREGS_SIZE = (32 * 8) + 8 + 8 + 8 + (10 * 8)\n\n\t// In fact, the total number of bytes is 268(32 fpr * 8 + 1 Fcc * 8 + 1 Fcsr * 4),\n\t// but since the Len defined in sys.Iovec is uint64,the total numbel of bytes must\n\t// be an integral multiple of 8,so add 4 bytes\n\t_LOONG64_FPREGS_SIZE = (32 * 8) + (1 * 8) + (1 * 4) + 4\n)\n\nfunc ptraceGetGRegs(pid int, regs *linutil.LOONG64PtraceRegs) (err error) {\n\tiov := sys.Iovec{Base: (*byte)(unsafe.Pointer(regs)), Len: _LOONG64_GREGS_SIZE}\n\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(pid),\n\t\tuintptr(elf.NT_PRSTATUS), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\n\treturn\n}\n\nfunc ptraceSetGRegs(pid int, regs *linutil.LOONG64PtraceRegs) (err error) {\n\tiov := sys.Iovec{Base: (*byte)(unsafe.Pointer(regs)), Len: _LOONG64_GREGS_SIZE}\n\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(pid),\n\t\tuintptr(elf.NT_PRSTATUS), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\n\treturn\n}\n\n// ptraceGetFpRegset returns floating point registers of\n// the specified thread using PTRACE.\nfunc ptraceGetFpRegset(tid int, fpregs *linutil.LOONG64PtraceFpRegs) (err error) {\n\tfprBytes := make([]byte, _LOONG64_FPREGS_SIZE)\n\tiov := sys.Iovec{Base: &fprBytes[0], Len: uint64(_LOONG64_FPREGS_SIZE)}\n\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(tid),\n\t\tuintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err != syscall.Errno(0) {\n\t\tif err == syscall.ENODEV {\n\t\t\terr = nil\n\t\t}\n\t\treturn\n\t} else {\n\t\terr = nil\n\t}\n\n\tfpregs.Fregs = fprBytes[:iov.Len-16]\n\tfpregs.Fcc = binary.LittleEndian.Uint64(fprBytes[iov.Len-16 : iov.Len-8])\n\tfpregs.Fcsr = binary.LittleEndian.Uint32(fprBytes[iov.Len-8 : iov.Len-4])\n\n\treturn\n}\n\n// SetPC sets PC to the value specified by 'pc'.\nfunc (thread *nativeThread) setPC(pc uint64) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tr := ir.(*linutil.LOONG64Registers)\n\tr.Regs.Era = pc\n\tthread.dbp.execPtraceFunc(func() { err = ptraceSetGRegs(thread.ID, r.Regs) })\n\n\treturn err\n}\n\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.LOONG64Registers)\n\tfpchanged, err := r.SetReg(regNum, reg)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tthread.dbp.execPtraceFunc(func() {\n\t\terr = ptraceSetGRegs(thread.ID, r.Regs)\n\t\tif err != syscall.Errno(0) && err != nil {\n\t\t\treturn\n\t\t}\n\t\tif fpchanged && r.Fpregset != nil {\n\t\t\tiov := sys.Iovec{Base: &r.Fpregset[0], Len: uint64(len(r.Fpregset))}\n\t\t\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(thread.ID), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t}\n\t})\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\n\treturn err\n}\n\nfunc registers(thread *nativeThread) (proc.Registers, error) {\n\tvar (\n\t\tregs linutil.LOONG64PtraceRegs\n\t\terr  error\n\t)\n\n\tthread.dbp.execPtraceFunc(func() { err = ptraceGetGRegs(thread.ID, &regs) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar tp_tls uint64\n\tif thread.dbp.iscgo {\n\t\ttp_tls = regs.Regs[2]\n\t}\n\tr := linutil.NewLOONG64Registers(&regs, thread.dbp.iscgo, tp_tls,\n\t\tfunc(r *linutil.LOONG64Registers) error {\n\t\t\tvar floatLoadError error\n\t\t\tr.Fpregs, r.Fpregset, floatLoadError = thread.fpRegisters()\n\t\t\treturn floatLoadError\n\t\t})\n\n\treturn r, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/registers_linux_ppc64le.go",
    "content": "package native\n\nimport (\n\t\"debug/elf\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n\tsys \"golang.org/x/sys/unix\"\n)\n\nconst (\n\t_PPC64LE_GPREGS_SIZE = 44 * 8\n\t_PPC64LE_FPREGS_SIZE = 33*8 + 8\n)\n\nfunc ptraceGetGRegs(pid int, regs *linutil.PPC64LEPtraceRegs) (err error) {\n\tsys.PtraceGetRegs(pid, (*sys.PtraceRegs)(regs))\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\treturn\n}\n\nfunc ptraceSetGRegs(pid int, regs *linutil.PPC64LEPtraceRegs) (err error) {\n\tsys.PtraceSetRegs(pid, (*sys.PtraceRegs)(regs))\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\treturn\n}\n\nfunc ptraceGetFpRegset(tid int) (fpregset []byte, err error) {\n\tvar ppc64leFpregs [_PPC64LE_FPREGS_SIZE]byte\n\tiov := sys.Iovec{Base: &ppc64leFpregs[0], Len: _PPC64LE_FPREGS_SIZE}\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(tid), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err != syscall.Errno(0) {\n\t\tif err == syscall.ENODEV {\n\t\t\terr = nil\n\t\t}\n\t\treturn\n\t} else {\n\t\terr = nil\n\t}\n\n\tfpregset = ppc64leFpregs[:iov.Len-8]\n\treturn fpregset, err\n}\n\n// SetPC sets PC to the value specified by 'pc'.\nfunc (t *nativeThread) setPC(pc uint64) error {\n\tir, err := registers(t)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.PPC64LERegisters)\n\tr.Regs.Nip = pc\n\tt.dbp.execPtraceFunc(func() { err = ptraceSetGRegs(t.ID, r.Regs) })\n\treturn err\n}\n\n// SetReg changes the value of the specified register.\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.PPC64LERegisters)\n\n\tfpchanged, err := r.SetReg(regNum, reg)\n\tif err != nil {\n\t\treturn err\n\t}\n\tthread.dbp.execPtraceFunc(func() {\n\t\terr = ptraceSetGRegs(thread.ID, r.Regs)\n\t\tif err != syscall.Errno(0) && err != nil {\n\t\t\treturn\n\t\t}\n\t\tif fpchanged && r.Fpregset != nil {\n\t\t\tiov := sys.Iovec{Base: &r.Fpregset[0], Len: uint64(len(r.Fpregset))}\n\t\t\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(thread.ID), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t}\n\t})\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\treturn err\n}\n\nfunc registers(thread *nativeThread) (proc.Registers, error) {\n\tvar (\n\t\tregs linutil.PPC64LEPtraceRegs\n\t\terr  error\n\t)\n\n\tthread.dbp.execPtraceFunc(func() { err = ptraceGetGRegs(thread.ID, &regs) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tr := linutil.NewPPC64LERegisters(&regs, func(r *linutil.PPC64LERegisters) error {\n\t\tvar floatLoadError error\n\t\tr.Fpregs, r.Fpregset, floatLoadError = thread.fpRegisters()\n\t\treturn floatLoadError\n\t})\n\treturn r, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/registers_linux_riscv64.go",
    "content": "package native\n\nimport (\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\n// Defined in asm/ptrace.h\nconst (\n\t_RISCV64_GREGS_SIZE  = 32 * 8\n\t_RISCV64_FPREGS_SIZE = (32 * 8) + 4 + 4 // Add 4 bytes to align with 8 due to sys.Iovec uses uint64 as len\n)\n\nfunc ptraceGetGRegs(pid int, regs *linutil.RISCV64PtraceRegs) (err error) {\n\tiov := sys.Iovec{Base: (*byte)(unsafe.Pointer(regs)), Len: _RISCV64_GREGS_SIZE}\n\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(pid),\n\t\tuintptr(elf.NT_PRSTATUS), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\n\treturn\n}\n\nfunc ptraceSetGRegs(pid int, regs *linutil.RISCV64PtraceRegs) (err error) {\n\tiov := sys.Iovec{Base: (*byte)(unsafe.Pointer(regs)), Len: _RISCV64_GREGS_SIZE}\n\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(pid), uintptr(elf.NT_PRSTATUS), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\n\treturn\n}\n\nfunc ptraceGetFpRegset(tid int, fpregs *linutil.RISCV64PtraceFpRegs) (err error) {\n\tfprBytes := make([]byte, _RISCV64_FPREGS_SIZE)\n\tiov := sys.Iovec{Base: &fprBytes[0], Len: uint64(_RISCV64_FPREGS_SIZE)}\n\n\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(tid), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\tif err != syscall.Errno(0) {\n\t\tif err == syscall.ENODEV {\n\t\t\terr = nil\n\t\t}\n\t\treturn\n\t} else {\n\t\terr = nil\n\t}\n\n\tfpregs.Fregs = fprBytes[:iov.Len-8]\n\tfpregs.Fcsr = binary.LittleEndian.Uint32(fprBytes[iov.Len-8 : iov.Len-4])\n\n\treturn\n}\n\nfunc (thread *nativeThread) setPC(pc uint64) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tr := ir.(*linutil.RISCV64Registers)\n\tr.Regs.Pc = pc\n\tthread.dbp.execPtraceFunc(func() { err = ptraceSetGRegs(thread.ID, r.Regs) })\n\n\treturn err\n}\n\nfunc (thread *nativeThread) setSP(sp uint64) (err error) {\n\tvar ir proc.Registers\n\n\tir, err = registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tr := ir.(*linutil.RISCV64Registers)\n\tr.Regs.Sp = sp\n\tthread.dbp.execPtraceFunc(func() { err = ptraceSetGRegs(thread.ID, r.Regs) })\n\n\treturn nil\n}\n\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tir, err := registers(thread)\n\tif err != nil {\n\t\treturn err\n\t}\n\tr := ir.(*linutil.RISCV64Registers)\n\tfpchanged, err := r.SetReg(regNum, reg)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tthread.dbp.execPtraceFunc(func() {\n\t\terr = ptraceSetGRegs(thread.ID, r.Regs)\n\t\tif err != syscall.Errno(0) && err != nil {\n\t\t\treturn\n\t\t}\n\t\tif fpchanged && r.Fpregset != nil {\n\t\t\tiov := sys.Iovec{Base: &r.Fpregset[0], Len: uint64(len(r.Fpregset))}\n\t\t\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(thread.ID), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t}\n\t})\n\tif err == syscall.Errno(0) {\n\t\terr = nil\n\t}\n\n\treturn err\n}\n\nfunc registers(thread *nativeThread) (proc.Registers, error) {\n\tvar (\n\t\tregs linutil.RISCV64PtraceRegs\n\t\terr  error\n\t)\n\n\tthread.dbp.execPtraceFunc(func() { err = ptraceGetGRegs(thread.ID, &regs) })\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar tp_tls uint64\n\tif thread.dbp.iscgo {\n\t\ttp_tls = regs.Tp\n\t}\n\tr := linutil.NewRISCV64Registers(&regs, thread.dbp.iscgo, tp_tls,\n\t\tfunc(r *linutil.RISCV64Registers) error {\n\t\t\tvar floatLoadError error\n\t\t\tr.Fpregs, r.Fpregset, floatLoadError = thread.fpRegisters()\n\t\t\treturn floatLoadError\n\t\t})\n\n\treturn r, nil\n}\n"
  },
  {
    "path": "pkg/proc/native/registers_windows.go",
    "content": "package native\n\nimport \"github.com/go-delve/delve/pkg/dwarf/op\"\n\n// SetPC sets the RIP register to the value specified by `pc`.\nfunc (thread *nativeThread) setPC(pc uint64) error {\n\tcontext := newContext()\n\tcontext.SetFlags(_CONTEXT_ALL)\n\n\terr := thread.getContext(context)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcontext.SetPC(pc)\n\n\treturn thread.setContext(context)\n}\n\n// SetReg changes the value of the specified register.\nfunc (thread *nativeThread) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tcontext := newContext()\n\tcontext.SetFlags(_CONTEXT_ALL)\n\terr := thread.getContext(context)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = context.SetReg(regNum, reg)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn thread.setContext(context)\n}\n"
  },
  {
    "path": "pkg/proc/native/support_sentinel.go",
    "content": "//go:build !linux && !darwin && !windows && !freebsd\n\n// This file is used to detect build on unsupported GOOS/GOARCH combinations.\n\npackage your_operating_system_is_not_supported_by_delve\n"
  },
  {
    "path": "pkg/proc/native/support_sentinel_cgo_freebsd.go",
    "content": "//go:build freebsd && amd64 && !cgo\n\n// This file is used to detect building on freebsd with cgo disabled\n\npackage can_not_build_on_freebsd_with_cgo_disabled\n"
  },
  {
    "path": "pkg/proc/native/support_sentinel_darwin.go",
    "content": "//go:build darwin && !amd64 && !arm64\n\n// This file is used to detect build on unsupported GOOS/GOARCH combinations.\n\npackage your_darwin_architecture_is_not_supported_by_delve\n"
  },
  {
    "path": "pkg/proc/native/support_sentinel_freebsd.go",
    "content": "//go:build freebsd && !amd64\n\n// This file is used to detect build on unsupported GOOS/GOARCH combinations.\n\npackage your_freebsd_architecture_is_not_supported_by_delve\n"
  },
  {
    "path": "pkg/proc/native/support_sentinel_linux.go",
    "content": "//go:build linux && !amd64 && !arm64 && !386 && !(riscv64 && exp.linuxriscv64) && !(loong64 && exp.linuxloong64) && !ppc64le\n\n// This file is used to detect build on unsupported GOOS/GOARCH combinations.\n\npackage your_linux_architecture_is_not_supported_by_delve\n"
  },
  {
    "path": "pkg/proc/native/support_sentinel_windows.go",
    "content": "//go:build windows && !amd64 && !arm64\n\n// This file is used to detect build on unsupported GOOS/GOARCH combinations.\n\npackage your_windows_architecture_is_not_supported_by_delve\n"
  },
  {
    "path": "pkg/proc/native/syscall_windows.go",
    "content": "//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go syscall_windows.go\n\npackage native\n\nimport (\n\t\"syscall\"\n)\n\ntype _NTSTATUS int32\n\ntype _CLIENT_ID struct {\n\tUniqueProcess syscall.Handle\n\tUniqueThread  syscall.Handle\n}\n\ntype _THREAD_BASIC_INFORMATION struct {\n\tExitStatus     _NTSTATUS\n\tTebBaseAddress uintptr\n\tClientId       _CLIENT_ID\n\tAffinityMask   uintptr\n\tPriority       int32\n\tBasePriority   int32\n}\n\ntype _CREATE_PROCESS_DEBUG_INFO struct {\n\tFile                syscall.Handle\n\tProcess             syscall.Handle\n\tThread              syscall.Handle\n\tBaseOfImage         uintptr\n\tDebugInfoFileOffset uint32\n\tDebugInfoSize       uint32\n\tThreadLocalBase     uintptr\n\tStartAddress        uintptr\n\tImageName           uintptr\n\tUnicode             uint16\n}\n\ntype _CREATE_THREAD_DEBUG_INFO struct {\n\tThread          syscall.Handle\n\tThreadLocalBase uintptr\n\tStartAddress    uintptr\n}\n\ntype _EXIT_PROCESS_DEBUG_INFO struct {\n\tExitCode uint32\n}\n\ntype _LOAD_DLL_DEBUG_INFO struct {\n\tFile                syscall.Handle\n\tBaseOfDll           uintptr\n\tDebugInfoFileOffset uint32\n\tDebugInfoSize       uint32\n\tImageName           uintptr\n\tUnicode             uint16\n}\n\ntype _EXCEPTION_DEBUG_INFO struct {\n\tExceptionRecord _EXCEPTION_RECORD\n\tFirstChance     uint32\n}\n\ntype _EXCEPTION_RECORD struct {\n\tExceptionCode        uint32\n\tExceptionFlags       uint32\n\tExceptionRecord      *_EXCEPTION_RECORD\n\tExceptionAddress     uintptr\n\tNumberParameters     uint32\n\tExceptionInformation [_EXCEPTION_MAXIMUM_PARAMETERS]uintptr\n}\n\ntype _MEMORY_BASIC_INFORMATION struct {\n\tBaseAddress       uintptr\n\tAllocationBase    uintptr\n\tAllocationProtect uint32\n\tPartitionId       uint16\n\tRegionSize        uint64\n\tState             uint32\n\tProtect           uint32\n\tType              uint32\n}\n\nconst (\n\t_ThreadBasicInformation = 0\n\n\t_DBG_CONTINUE              = 0x00010002\n\t_DBG_EXCEPTION_NOT_HANDLED = 0x80010001\n\n\t_EXCEPTION_DEBUG_EVENT      = 1\n\t_CREATE_THREAD_DEBUG_EVENT  = 2\n\t_CREATE_PROCESS_DEBUG_EVENT = 3\n\t_EXIT_THREAD_DEBUG_EVENT    = 4\n\t_EXIT_PROCESS_DEBUG_EVENT   = 5\n\t_LOAD_DLL_DEBUG_EVENT       = 6\n\t_UNLOAD_DLL_DEBUG_EVENT     = 7\n\t_OUTPUT_DEBUG_STRING_EVENT  = 8\n\t_RIP_EVENT                  = 9\n\n\t// DEBUG_ONLY_THIS_PROCESS and _DEBUG_PROCESS tracks https://msdn.microsoft.com/en-us/library/windows/desktop/ms684863(v=vs.85).aspx\n\t_DEBUG_ONLY_THIS_PROCESS = 0x00000002\n\t_DEBUG_PROCESS           = 0x00000001\n\n\t_EXCEPTION_BREAKPOINT  = 0x80000003\n\t_EXCEPTION_SINGLE_STEP = 0x80000004\n\n\t_EXCEPTION_MAXIMUM_PARAMETERS = 15\n\n\t_MEM_FREE    = 0x10000\n\t_MEM_RESERVE = 0x2000\n\n\t_PAGE_EXECUTE           = 0x10\n\t_PAGE_EXECUTE_READ      = 0x20\n\t_PAGE_EXECUTE_READWRITE = 0x40\n\t_PAGE_EXECUTE_WRITECOPY = 0x80\n\t_PAGE_NOACCESS          = 0x01\n\t_PAGE_READONLY          = 0x02\n\t_PAGE_READWRITE         = 0x04\n\t_PAGE_WRITECOPY         = 0x08\n\n\t_PAGE_GUARD = 0x100\n)\n\nfunc _NT_SUCCESS(x _NTSTATUS) bool {\n\treturn x >= 0\n}\n\ntype _DEBUG_EVENT struct {\n\tDebugEventCode uint32\n\tProcessId      uint32\n\tThreadId       uint32\n\t_              uint32 // to align Union properly\n\tU              [160]byte\n}\n\n//sys\t_NtQueryInformationThread(threadHandle syscall.Handle, infoclass int32, info uintptr, infolen uint32, retlen *uint32) (status _NTSTATUS) = ntdll.NtQueryInformationThread\n//sys\t_GetThreadContext(thread syscall.Handle, context *_CONTEXT) (err error) = kernel32.GetThreadContext\n//sys\t_SetThreadContext(thread syscall.Handle, context *_CONTEXT) (err error) = kernel32.SetThreadContext\n//sys\t_SuspendThread(threadid syscall.Handle) (prevsuspcount uint32, err error) [failretval==0xffffffff] = kernel32.SuspendThread\n//sys\t_ResumeThread(threadid syscall.Handle) (prevsuspcount uint32, err error) [failretval==0xffffffff] = kernel32.ResumeThread\n//sys\t_ContinueDebugEvent(processid uint32, threadid uint32, continuestatus uint32) (err error) = kernel32.ContinueDebugEvent\n//sys\t_WriteProcessMemory(process syscall.Handle, baseaddr uintptr, buffer *byte, size uintptr, byteswritten *uintptr) (err error) = kernel32.WriteProcessMemory\n//sys\t_ReadProcessMemory(process syscall.Handle, baseaddr uintptr, buffer *byte, size uintptr, bytesread *uintptr) (err error) = kernel32.ReadProcessMemory\n//sys\t_DebugBreakProcess(process syscall.Handle) (err error) = kernel32.DebugBreakProcess\n//sys\t_WaitForDebugEvent(debugevent *_DEBUG_EVENT, milliseconds uint32) (err error) = kernel32.WaitForDebugEvent\n//sys\t_DebugActiveProcess(processid uint32) (err error) = kernel32.DebugActiveProcess\n//sys\t_DebugActiveProcessStop(processid uint32) (err error) = kernel32.DebugActiveProcessStop\n//sys\t_QueryFullProcessImageName(process syscall.Handle, flags uint32, exename *uint16, size *uint32) (err error) = kernel32.QueryFullProcessImageNameW\n//sys   _VirtualQueryEx(process syscall.Handle, addr uintptr, buffer *_MEMORY_BASIC_INFORMATION, length uintptr) (lengthOut uintptr) = kernel32.VirtualQueryEx\n//sys   _IsWow64Process(process syscall.Handle, wow64process *uint32) (ok uint32) = kernel32.IsWow64Process\n"
  },
  {
    "path": "pkg/proc/native/syscall_windows_amd64.go",
    "content": "package native\n\nimport \"github.com/go-delve/delve/pkg/proc/winutil\"\n\nconst (\n\t_CONTEXT_AMD64               = 0x100000\n\t_CONTEXT_CONTROL             = (_CONTEXT_AMD64 | 0x1)\n\t_CONTEXT_INTEGER             = (_CONTEXT_AMD64 | 0x2)\n\t_CONTEXT_SEGMENTS            = (_CONTEXT_AMD64 | 0x4)\n\t_CONTEXT_FLOATING_POINT      = (_CONTEXT_AMD64 | 0x8)\n\t_CONTEXT_DEBUG_REGISTERS     = (_CONTEXT_AMD64 | 0x10)\n\t_CONTEXT_FULL                = (_CONTEXT_CONTROL | _CONTEXT_INTEGER | _CONTEXT_FLOATING_POINT)\n\t_CONTEXT_ALL                 = (_CONTEXT_CONTROL | _CONTEXT_INTEGER | _CONTEXT_SEGMENTS | _CONTEXT_FLOATING_POINT | _CONTEXT_DEBUG_REGISTERS)\n\t_CONTEXT_EXCEPTION_ACTIVE    = 0x8000000\n\t_CONTEXT_SERVICE_ACTIVE      = 0x10000000\n\t_CONTEXT_EXCEPTION_REQUEST   = 0x40000000\n\t_CONTEXT_EXCEPTION_REPORTING = 0x80000000\n)\n\n// zsyscall_windows.go, an autogenerated file, wants to refer to the context\n// structure as _CONTEXT, but we need to have it in pkg/proc/winutil.CONTEXT\n// because it's also used on non-windows operating systems.\ntype _CONTEXT = winutil.AMD64CONTEXT\n"
  },
  {
    "path": "pkg/proc/native/syscall_windows_arm64.go",
    "content": "package native\n\nimport \"github.com/go-delve/delve/pkg/proc/winutil\"\n\nconst (\n\t_CONTEXT_ARM64               = 0x00400000\n\t_CONTEXT_CONTROL             = (_CONTEXT_ARM64 | 0x1)\n\t_CONTEXT_INTEGER             = (_CONTEXT_ARM64 | 0x2)\n\t_CONTEXT_FLOATING_POINT      = (_CONTEXT_ARM64 | 0x4)\n\t_CONTEXT_DEBUG_REGISTERS     = (_CONTEXT_ARM64 | 0x8)\n\t_CONTEXT_ARM64_X18           = (_CONTEXT_ARM64 | 0x10)\n\t_CONTEXT_FULL                = (_CONTEXT_CONTROL | _CONTEXT_INTEGER | _CONTEXT_FLOATING_POINT)\n\t_CONTEXT_ALL                 = (_CONTEXT_CONTROL | _CONTEXT_INTEGER | _CONTEXT_FLOATING_POINT | _CONTEXT_DEBUG_REGISTERS | _CONTEXT_ARM64_X18)\n\t_CONTEXT_EXCEPTION_ACTIVE    = 0x8000000\n\t_CONTEXT_SERVICE_ACTIVE      = 0x10000000\n\t_CONTEXT_EXCEPTION_REQUEST   = 0x40000000\n\t_CONTEXT_EXCEPTION_REPORTING = 0x80000000\n)\n\n// zsyscall_windows.go, an autogenerated file, wants to refer to the context\n// structure as _CONTEXT, but we need to have it in pkg/proc/winutil.CONTEXT\n// because it's also used on non-windows operating systems.\ntype _CONTEXT = winutil.ARM64CONTEXT\n"
  },
  {
    "path": "pkg/proc/native/threads.go",
    "content": "package native\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// Thread represents a single thread in the traced process\n// ID represents the thread id or port, Process holds a reference to the\n// Process struct that contains info on the process as\n// a whole, and Status represents the last result of a `wait` call\n// on this thread.\ntype nativeThread struct {\n\tID                int                  // Thread ID or mach port\n\tStatus            *waitStatus          // Status returned from last wait call\n\tCurrentBreakpoint proc.BreakpointState // Breakpoint thread is currently stopped at\n\n\tdbp            *nativeProcess\n\tsingleStepping bool\n\tos             *osSpecificDetails\n\tcommon         proc.CommonThread\n}\n\nfunc (procgrp *processGroup) StepInstruction(threadID int) error {\n\treturn procgrp.stepInstruction(procgrp.procForThread(threadID).threads[threadID])\n}\n\n// StepInstruction steps a single instruction.\n//\n// Executes exactly one instruction and then returns.\n// If the thread is at a breakpoint, we first clear it,\n// execute the instruction, and then replace the breakpoint.\n// Otherwise we simply execute the next instruction.\nfunc (procgrp *processGroup) stepInstruction(t *nativeThread) (err error) {\n\tt.singleStepping = true\n\tdefer func() {\n\t\tt.singleStepping = false\n\t}()\n\n\tif bp := t.CurrentBreakpoint.Breakpoint; bp != nil && bp.WatchType != 0 && t.dbp.Breakpoints().M[bp.Addr] == bp {\n\t\terr = t.clearHardwareBreakpoint(bp.Addr, bp.WatchType, bp.HWBreakIndex)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer func() {\n\t\t\terr = t.writeHardwareBreakpoint(bp.Addr, bp.WatchType, bp.HWBreakIndex)\n\t\t}()\n\t}\n\n\tpc, err := t.PC()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbp, ok := t.dbp.FindBreakpoint(pc, false)\n\tif ok {\n\t\t// Clear the breakpoint so that we can continue execution.\n\t\terr = t.clearSoftwareBreakpoint(bp)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// Restore breakpoint now that we have passed it.\n\t\tdefer func() {\n\t\t\terr = t.dbp.writeSoftwareBreakpoint(t, bp.Addr)\n\t\t}()\n\t}\n\n\terr = procgrp.singleStep(t)\n\tif err != nil {\n\t\tif _, exited := err.(proc.ErrProcessExited); exited {\n\t\t\treturn err\n\t\t}\n\t\treturn fmt.Errorf(\"step failed: %s\", err.Error())\n\t}\n\treturn nil\n}\n\n// BinInfo returns information on the binary.\nfunc (t *nativeThread) BinInfo() *proc.BinaryInfo {\n\treturn t.dbp.bi\n}\n\n// Common returns information common across Process\n// implementations.\nfunc (t *nativeThread) Common() *proc.CommonThread {\n\treturn &t.common\n}\n\n// SetCurrentBreakpoint sets the current breakpoint that this\n// thread is stopped at as CurrentBreakpoint on the thread struct.\nfunc (t *nativeThread) SetCurrentBreakpoint(adjustPC bool) error {\n\tt.CurrentBreakpoint.Clear()\n\n\tvar bp *proc.Breakpoint\n\n\tif t.dbp.Breakpoints().HasHWBreakpoints() {\n\t\tvar err error\n\t\tbp, err = t.findHardwareBreakpoint()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif bp == nil {\n\t\tpc, err := t.PC()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// If the breakpoint instruction does not change the value\n\t\t// of PC after being executed we should look for breakpoints\n\t\t// with bp.Addr == PC and there is no need to call SetPC\n\t\t// after finding one.\n\t\tadjustPC = adjustPC && t.BinInfo().Arch.BreakInstrMovesPC()\n\n\t\tvar ok bool\n\t\tbp, ok = t.dbp.FindBreakpoint(pc, adjustPC)\n\t\tif ok {\n\t\t\tif adjustPC {\n\t\t\t\tif err = t.setPC(bp.Addr); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tt.CurrentBreakpoint.Breakpoint = bp\n\treturn nil\n}\n\n// Breakpoint returns the current breakpoint that is active\n// on this thread.\nfunc (t *nativeThread) Breakpoint() *proc.BreakpointState {\n\treturn &t.CurrentBreakpoint\n}\n\n// ThreadID returns the ID of this thread.\nfunc (t *nativeThread) ThreadID() int {\n\treturn t.ID\n}\n\n// clearSoftwareBreakpoint clears the specified breakpoint.\nfunc (t *nativeThread) clearSoftwareBreakpoint(bp *proc.Breakpoint) error {\n\tif _, err := t.WriteMemory(bp.Addr, bp.OriginalData); err != nil {\n\t\treturn fmt.Errorf(\"could not clear breakpoint %s\", err)\n\t}\n\treturn nil\n}\n\n// Registers obtains register values from the debugged process.\nfunc (t *nativeThread) Registers() (proc.Registers, error) {\n\treturn registers(t)\n}\n\n// RestoreRegisters will set the value of the CPU registers to those\n// passed in via 'savedRegs'.\nfunc (t *nativeThread) RestoreRegisters(savedRegs proc.Registers) error {\n\treturn t.restoreRegisters(savedRegs)\n}\n\n// PC returns the current program counter value for this thread.\nfunc (t *nativeThread) PC() (uint64, error) {\n\tregs, err := t.Registers()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn regs.PC(), nil\n}\n\n// ProcessMemory returns this thread's process memory.\nfunc (t *nativeThread) ProcessMemory() proc.MemoryReadWriter {\n\treturn t.dbp.Memory()\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_darwin.c",
    "content": "//+build darwin,macnative\n\n#include \"threads_darwin.h\"\n\nint\nwrite_memory(task_t task, mach_vm_address_t addr, void *d, mach_msg_type_number_t len) {\n\tkern_return_t kret;\n\tvm_region_submap_short_info_data_64_t info;\n\tmach_msg_type_number_t count = VM_REGION_SUBMAP_SHORT_INFO_COUNT_64;\n\tmach_vm_size_t l = len;\n\tmach_port_t objname;\n\n\tif (len == 1) l = 2;\n\tkret = mach_vm_region((vm_map_t)task, &(mach_vm_address_t){addr}, (mach_vm_size_t*)&l, VM_REGION_BASIC_INFO_64, (vm_region_info_t)&info, &count, &objname);\n\tif (kret != KERN_SUCCESS) return -1;\n\n\t// Set permissions to enable writing to this memory location\n\tkret = mach_vm_protect(task, addr, len, FALSE, VM_PROT_WRITE|VM_PROT_COPY|VM_PROT_READ);\n\tif (kret != KERN_SUCCESS) return -1;\n\n\tkret = mach_vm_write((vm_map_t)task, addr, (vm_offset_t)d, len);\n\tif (kret != KERN_SUCCESS) return -1;\n\n\t// Restore virtual memory permissions\n\tkret = mach_vm_protect(task, addr, len, FALSE, info.protection);\n\tif (kret != KERN_SUCCESS) return -1;\n\n\treturn 0;\n}\n\nint\nread_memory(task_t task, mach_vm_address_t addr, void *d, mach_msg_type_number_t len) {\n\tkern_return_t kret;\n\tpointer_t data;\n\tmach_msg_type_number_t count;\n\n\tkret = mach_vm_read((vm_map_t)task, addr, len, &data, &count);\n\tif (kret != KERN_SUCCESS) return -1;\n\tmemcpy(d, (void *)data, len);\n\n\tkret = vm_deallocate(task, data, len);\n\tif (kret != KERN_SUCCESS) return -1;\n\n\treturn count;\n}\n\nkern_return_t\nget_registers(mach_port_name_t task, x86_thread_state64_t *state) {\n\tkern_return_t kret;\n\tmach_msg_type_number_t stateCount = x86_THREAD_STATE64_COUNT;\n\t// TODO(dp) - possible memory leak - vm_deallocate state\n\treturn thread_get_state(task, x86_THREAD_STATE64, (thread_state_t)state, &stateCount);\n}\n\nkern_return_t\nget_fpu_registers(mach_port_name_t task, x86_float_state64_t *state) {\n\tkern_return_t kret;\n\tmach_msg_type_number_t stateCount = x86_FLOAT_STATE64_COUNT;\n\treturn thread_get_state(task, x86_FLOAT_STATE64, (thread_state_t)state, &stateCount);\n}\n\nkern_return_t\nget_identity(mach_port_name_t task, thread_identifier_info_data_t *idinfo) {\n\tmach_msg_type_number_t idinfoCount = THREAD_IDENTIFIER_INFO_COUNT;\n\treturn thread_info(task, THREAD_IDENTIFIER_INFO, (thread_info_t)idinfo, &idinfoCount);\n}\n\nkern_return_t\nset_registers(mach_port_name_t task, x86_thread_state64_t *state) {\n\tmach_msg_type_number_t stateCount = x86_THREAD_STATE64_COUNT;\n\treturn thread_set_state(task, x86_THREAD_STATE64, (thread_state_t)state, stateCount);\n}\n\nkern_return_t\nset_pc(thread_act_t task, uint64_t pc) {\n\tkern_return_t kret;\n\tx86_thread_state64_t state;\n\tmach_msg_type_number_t stateCount = x86_THREAD_STATE64_COUNT;\n\n\tkret = thread_get_state(task, x86_THREAD_STATE64, (thread_state_t)&state, &stateCount);\n\tif (kret != KERN_SUCCESS) return kret;\n\tstate.__rip = pc;\n\n\treturn thread_set_state(task, x86_THREAD_STATE64, (thread_state_t)&state, stateCount);\n}\n\nkern_return_t\nsingle_step(thread_act_t thread) {\n\tkern_return_t kret;\n\tx86_thread_state64_t regs;\n\tmach_msg_type_number_t count = x86_THREAD_STATE64_COUNT;\n\n\tkret = thread_get_state(thread, x86_THREAD_STATE64, (thread_state_t)&regs, &count);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\t// Set trap bit in rflags\n\tregs.__rflags |= 0x100UL;\n\n\tkret = thread_set_state(thread, x86_THREAD_STATE64, (thread_state_t)&regs, count);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\treturn resume_thread(thread);\n}\n\nkern_return_t\nresume_thread(thread_act_t thread) {\n\tkern_return_t kret;\n\tstruct thread_basic_info info;\n\tunsigned int info_count = THREAD_BASIC_INFO_COUNT;\n\n\tkret = thread_info((thread_t)thread, THREAD_BASIC_INFO, (thread_info_t)&info, &info_count);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\tfor (int i = 0; i < info.suspend_count; i++) {\n\t\tkret = thread_resume(thread);\n\t\tif (kret != KERN_SUCCESS) return kret;\n\t}\n\treturn KERN_SUCCESS;\n}\n\nkern_return_t\nclear_trap_flag(thread_act_t thread) {\n\tkern_return_t kret;\n\tx86_thread_state64_t regs;\n\tmach_msg_type_number_t count = x86_THREAD_STATE64_COUNT;\n\n\tkret = thread_get_state(thread, x86_THREAD_STATE64, (thread_state_t)&regs, &count);\n\tif (kret != KERN_SUCCESS) return kret;\n\n\t// Clear trap bit in rflags\n\tregs.__rflags ^= 0x100UL;\n\n\treturn thread_set_state(thread, x86_THREAD_STATE64, (thread_state_t)&regs, count);\n}\n\nint\nthread_blocked(thread_act_t thread) {\n\tkern_return_t kret;\n\tstruct thread_basic_info info;\n\tunsigned int info_count = THREAD_BASIC_INFO_COUNT;\n\n\tkret = thread_info((thread_t)thread, THREAD_BASIC_INFO, (thread_info_t)&info, &info_count);\n\tif (kret != KERN_SUCCESS) return -1;\n\n\treturn info.suspend_count;\n}\n\nint\nnum_running_threads(task_t task) {\n\tkern_return_t kret;\n\tthread_act_array_t list;\n\tmach_msg_type_number_t count;\n\tint i, n = 0;\n\n\tkret = task_threads(task, &list, &count);\n\tif (kret != KERN_SUCCESS) {\n\t\treturn -kret;\n\t}\n\n\tfor (i = 0; i < count; ++i) {\n\t\tthread_act_t thread = list[i];\n\t\tstruct thread_basic_info info;\n\t\tunsigned int info_count = THREAD_BASIC_INFO_COUNT;\n\n\t\tkret = thread_info((thread_t)thread, THREAD_BASIC_INFO, (thread_info_t)&info, &info_count);\n\n\t\tif (kret == KERN_SUCCESS) {\n\t\t\tif (info.suspend_count == 0) {\n\t\t\t\t++n;\n\t\t\t} else {\n\t\t\t}\n\t\t}\n\t}\n\n\tkret = vm_deallocate(mach_task_self(), (vm_address_t) list, count * sizeof(list[0]));\n\tif (kret != KERN_SUCCESS) return -kret;\n\n\treturn n;\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_darwin.go",
    "content": "//go:build darwin && macnative\n\npackage native\n\n// #include \"threads_darwin.h\"\n// #include \"proc_darwin.h\"\nimport \"C\"\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n)\n\n// waitStatus is a synonym for the platform-specific WaitStatus\ntype waitStatus sys.WaitStatus\n\n// osSpecificDetails holds information specific to the OSX/Darwin\n// operating system / kernel.\ntype osSpecificDetails struct {\n\tthreadAct C.thread_act_t\n\tregisters C.x86_thread_state64_t\n\texists    bool\n}\n\n// ErrContinueThread is the error returned when a thread could not\n// be continued.\nvar ErrContinueThread = fmt.Errorf(\"could not continue thread\")\n\nfunc (t *nativeThread) stop() (err error) {\n\tkret := C.thread_suspend(t.os.threadAct)\n\tif kret != C.KERN_SUCCESS {\n\t\terrStr := C.GoString(C.mach_error_string(C.mach_error_t(kret)))\n\t\t// check that the thread still exists before complaining\n\t\terr2 := t.dbp.updateThreadList()\n\t\tif err2 != nil {\n\t\t\terr = fmt.Errorf(\"could not suspend thread %d %s (additionally could not update thread list: %v)\", t.ID, errStr, err2)\n\t\t\treturn\n\t\t}\n\n\t\tif _, ok := t.dbp.threads[t.ID]; ok {\n\t\t\terr = fmt.Errorf(\"could not suspend thread %d %s\", t.ID, errStr)\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\nfunc (procgrp *processGroup) singleStep(t *nativeThread) error {\n\tkret := C.single_step(t.os.threadAct)\n\tif kret != C.KERN_SUCCESS {\n\t\treturn fmt.Errorf(\"could not single step\")\n\t}\n\tfor {\n\t\ttwthread, err := t.dbp.trapWait(t.dbp.pid)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif twthread.ID == t.ID {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tkret = C.clear_trap_flag(t.os.threadAct)\n\tif kret != C.KERN_SUCCESS {\n\t\treturn fmt.Errorf(\"could not clear CPU trap flag\")\n\t}\n\treturn nil\n}\n\nfunc (t *nativeThread) resume() error {\n\t// TODO(dp) set flag for ptrace stops\n\tvar err error\n\tt.dbp.execPtraceFunc(func() { err = ptraceCont(t.dbp.pid, 0) })\n\tif err == nil {\n\t\treturn nil\n\t}\n\tkret := C.resume_thread(t.os.threadAct)\n\tif kret != C.KERN_SUCCESS {\n\t\treturn ErrContinueThread\n\t}\n\treturn nil\n}\n\n// Stopped returns whether the thread is stopped at\n// the operating system level.\nfunc (t *nativeThread) Stopped() bool {\n\treturn C.thread_blocked(t.os.threadAct) > C.int(0)\n}\n\nfunc (t *nativeThread) WriteMemory(addr uint64, data []byte) (int, error) {\n\tif ok, err := t.dbp.Valid(); !ok {\n\t\treturn 0, err\n\t}\n\tif len(data) == 0 {\n\t\treturn 0, nil\n\t}\n\tvar (\n\t\tvmData = unsafe.Pointer(&data[0])\n\t\tvmAddr = C.mach_vm_address_t(addr)\n\t\tlength = C.mach_msg_type_number_t(len(data))\n\t)\n\tif ret := C.write_memory(t.dbp.os.task, vmAddr, vmData, length); ret < 0 {\n\t\treturn 0, fmt.Errorf(\"could not write memory\")\n\t}\n\treturn len(data), nil\n}\n\nfunc (t *nativeThread) ReadMemory(buf []byte, addr uint64) (int, error) {\n\tif ok, err := t.dbp.Valid(); !ok {\n\t\treturn 0, err\n\t}\n\tif len(buf) == 0 {\n\t\treturn 0, nil\n\t}\n\tvar (\n\t\tvmData = unsafe.Pointer(&buf[0])\n\t\tvmAddr = C.mach_vm_address_t(addr)\n\t\tlength = C.mach_msg_type_number_t(len(buf))\n\t)\n\n\tret := C.read_memory(t.dbp.os.task, vmAddr, vmData, length)\n\tif ret < 0 {\n\t\treturn 0, fmt.Errorf(\"could not read memory\")\n\t}\n\treturn len(buf), nil\n}\n\nfunc (t *nativeThread) restoreRegisters(sr proc.Registers) error {\n\treturn errors.New(\"not implemented\")\n}\n\nfunc (t *nativeThread) withDebugRegisters(f func(*amd64util.DebugRegisters) error) error {\n\treturn proc.ErrHWBreakUnsupported\n}\n\n// SoftExc returns true if this thread received a software exception during the last resume.\nfunc (t *nativeThread) SoftExc() bool {\n\treturn false\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_darwin.h",
    "content": "//+build darwin,macnative\n\n#include <stdlib.h>\n#include <sys/types.h>\n#include <mach/mach.h>\n#include <mach/mach_vm.h>\n#include <mach/thread_info.h>\n\nint\nwrite_memory(task_t, mach_vm_address_t, void *, mach_msg_type_number_t);\n\nint\nread_memory(task_t, mach_vm_address_t, void *, mach_msg_type_number_t);\n\nkern_return_t\nget_registers(mach_port_name_t, x86_thread_state64_t*);\n\nkern_return_t\nget_fpu_registers(mach_port_name_t, x86_float_state64_t *);\n\nkern_return_t\nset_pc(thread_act_t, uint64_t);\n\nkern_return_t\nsingle_step(thread_act_t);\n\nkern_return_t\nclear_trap_flag(thread_act_t);\n\nkern_return_t\nresume_thread(thread_act_t);\n\nkern_return_t\nset_registers(mach_port_name_t, x86_thread_state64_t*);\n\nkern_return_t\nget_identity(mach_port_name_t, thread_identifier_info_data_t *);\n\nint\nthread_blocked(thread_act_t thread);\n\nint\nnum_running_threads(task_t task);\n"
  },
  {
    "path": "pkg/proc/native/threads_freebsd.go",
    "content": "package native\n\nimport (\n\t\"bytes\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/fbsdutil\"\n)\n\ntype waitStatus sys.WaitStatus\n\n// osSpecificDetails hold FreeBSD specific process details.\ntype osSpecificDetails struct {\n\tregisters sys.Reg\n}\n\nfunc (procgrp *processGroup) singleStep(t *nativeThread) (err error) {\n\tt.dbp.execPtraceFunc(func() { err = ptraceSetStep(t.ID) })\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tt.dbp.execPtraceFunc(func() { ptraceClearStep(t.ID) })\n\t}()\n\n\tt.dbp.execPtraceFunc(func() { err = ptraceResume(t.ID) })\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer func() {\n\t\tt.dbp.execPtraceFunc(func() { ptraceSuspend(t.ID) })\n\t}()\n\n\tsig := 0\n\tfor {\n\t\terr = t.dbp.ptraceCont(sig)\n\t\tsig = 0\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\ttrapthread, err := t.dbp.trapWaitInternal(-1, trapWaitStepping)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tstatus := ((*sys.WaitStatus)(trapthread.Status))\n\n\t\tif trapthread.ID == t.ID {\n\t\t\tswitch s := status.StopSignal(); s {\n\t\t\tcase sys.SIGTRAP:\n\t\t\t\treturn nil\n\t\t\tcase sys.SIGSTOP:\n\t\t\t\t// delayed SIGSTOP, ignore it\n\t\t\tcase sys.SIGILL, sys.SIGBUS, sys.SIGFPE, sys.SIGSEGV:\n\t\t\t\t// propagate signals that can be caused by current instruction\n\t\t\t\tsig = int(s)\n\t\t\tdefault:\n\t\t\t\tt.dbp.os.delayedSignal = s\n\t\t\t}\n\t\t} else {\n\t\t\tif status.StopSignal() == sys.SIGTRAP {\n\t\t\t\tt.dbp.os.trapThreads = append(t.dbp.os.trapThreads, trapthread.ID)\n\t\t\t} else {\n\t\t\t\tt.dbp.os.delayedSignal = status.StopSignal()\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (t *nativeThread) restoreRegisters(savedRegs proc.Registers) error {\n\tsr := savedRegs.(*fbsdutil.AMD64Registers)\n\treturn setRegisters(t, sr, true)\n}\n\nfunc (t *nativeThread) WriteMemory(addr uint64, data []byte) (written int, err error) {\n\tif ok, err := t.dbp.Valid(); !ok {\n\t\treturn 0, err\n\t}\n\tif len(data) == 0 {\n\t\treturn 0, nil\n\t}\n\tt.dbp.execPtraceFunc(func() { written, err = ptraceWriteData(t.ID, uintptr(addr), data) })\n\treturn written, err\n}\n\nfunc (t *nativeThread) ReadMemory(data []byte, addr uint64) (n int, err error) {\n\tif ok, err := t.dbp.Valid(); !ok {\n\t\treturn 0, err\n\t}\n\tif len(data) == 0 {\n\t\treturn 0, nil\n\t}\n\tt.dbp.execPtraceFunc(func() { n, err = ptraceReadData(t.ID, uintptr(addr), data) })\n\treturn n, err\n}\n\nfunc (t *nativeThread) withDebugRegisters(f func(*amd64util.DebugRegisters) error) error {\n\treturn proc.ErrHWBreakUnsupported\n}\n\n// SoftExc returns true if this thread received a software exception during the last resume.\nfunc (t *nativeThread) SoftExc() bool {\n\treturn false\n}\n\nfunc (t *nativeThread) atHardcodedBreakpoint(pc uint64) bool {\n\tfor _, bpinstr := range [][]byte{\n\t\tt.dbp.BinInfo().Arch.BreakpointInstruction(),\n\t\tt.dbp.BinInfo().Arch.AltBreakpointInstruction()} {\n\t\tif bpinstr == nil {\n\t\t\tcontinue\n\t\t}\n\t\tbuf := make([]byte, len(bpinstr))\n\t\t_, _ = t.ReadMemory(buf, pc-uint64(len(buf)))\n\t\tif bytes.Equal(buf, bpinstr) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_hardware_singlestep_linux.go",
    "content": "//go:build !riscv64\n\npackage native\n\nimport (\n\t\"github.com/go-delve/delve/pkg/proc\"\n\tsys \"golang.org/x/sys/unix\"\n)\n\nfunc (procgrp *processGroup) singleStep(t *nativeThread) (err error) {\n\tsig := 0\n\tfor {\n\t\tt.dbp.execPtraceFunc(func() { err = ptraceSingleStep(t.ID, sig) })\n\t\tsig = 0\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\twpid, status, err := t.dbp.waitFast(t.ID)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif (status == nil || status.Exited()) && wpid == t.dbp.pid {\n\t\t\tt.dbp.postExit()\n\t\t\trs := 0\n\t\t\tif status != nil {\n\t\t\t\trs = status.ExitStatus()\n\t\t\t}\n\t\t\treturn proc.ErrProcessExited{Pid: t.dbp.pid, Status: rs}\n\t\t}\n\t\tif wpid == t.ID {\n\t\t\tswitch s := status.StopSignal(); s {\n\t\t\tcase sys.SIGTRAP:\n\t\t\t\treturn nil\n\t\t\tcase sys.SIGSTOP:\n\t\t\t\t// delayed SIGSTOP, ignore it\n\t\t\tcase sys.SIGILL, sys.SIGBUS, sys.SIGFPE, sys.SIGSEGV, sys.SIGSTKFLT:\n\t\t\t\t// propagate signals that can have been caused by the current instruction\n\t\t\t\tsig = int(s)\n\t\t\tdefault:\n\t\t\t\t// delay propagation of all other signals\n\t\t\t\tt.os.delayedSignal = int(s)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_linux.go",
    "content": "package native\n\nimport (\n\t\"fmt\"\n\n\tsys \"golang.org/x/sys/unix\"\n)\n\ntype waitStatus sys.WaitStatus\n\n// osSpecificDetails hold Linux specific\n// process details.\ntype osSpecificDetails struct {\n\tdelayedSignal       int\n\trunning             bool\n\tsetbp               bool\n\tphantomBreakpointPC uint64\n}\n\nfunc (t *nativeThread) stop() (err error) {\n\terr = sys.Tgkill(t.dbp.pid, t.ID, sys.SIGSTOP)\n\tif err != nil {\n\t\tif err == sys.ESRCH {\n\t\t\treturn\n\t\t}\n\t\terr = fmt.Errorf(\"stop err %s on thread %d\", err, t.ID)\n\t\treturn\n\t}\n\treturn\n}\n\n// Stopped returns whether the thread is stopped at\n// the operating system level.\nfunc (t *nativeThread) Stopped() bool {\n\tstate := status(t.ID, t.dbp.os.comm)\n\treturn state == statusTraceStop || state == statusTraceStopT\n}\n\nfunc (t *nativeThread) resume() error {\n\tsig := t.os.delayedSignal\n\tt.os.delayedSignal = 0\n\treturn t.resumeWithSig(sig)\n}\n\nfunc (t *nativeThread) resumeWithSig(sig int) (err error) {\n\tt.os.running = true\n\tt.dbp.execPtraceFunc(func() { err = ptraceCont(t.ID, sig) })\n\treturn\n}\n\nfunc (t *nativeThread) WriteMemory(addr uint64, data []byte) (written int, err error) {\n\tif ok, err := t.dbp.Valid(); !ok {\n\t\treturn 0, err\n\t}\n\tif len(data) == 0 {\n\t\treturn\n\t}\n\t// ProcessVmWrite can't poke read-only memory like ptrace, so don't\n\t// even bother for small writes -- likely breakpoints and such.\n\tif len(data) > sys.SizeofPtr {\n\t\twritten, _ = processVmWrite(t.ID, uintptr(addr), data)\n\t}\n\tif written == 0 {\n\t\tt.dbp.execPtraceFunc(func() { written, err = sys.PtracePokeData(t.ID, uintptr(addr), data) })\n\t}\n\treturn\n}\n\nfunc (t *nativeThread) ReadMemory(data []byte, addr uint64) (n int, err error) {\n\tif ok, err := t.dbp.Valid(); !ok {\n\t\treturn 0, err\n\t}\n\tif len(data) == 0 {\n\t\treturn\n\t}\n\tn, _ = processVmRead(t.ID, uintptr(addr), data)\n\tif n == 0 {\n\t\tt.dbp.execPtraceFunc(func() { n, err = sys.PtracePeekData(t.ID, uintptr(addr), data) })\n\t}\n\treturn\n}\n\n// SoftExc returns true if this thread received a software exception during the last resume.\nfunc (t *nativeThread) SoftExc() bool {\n\treturn t.os.setbp\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_linux_386.go",
    "content": "package native\n\nimport (\n\t\"fmt\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\nfunc (t *nativeThread) restoreRegisters(savedRegs proc.Registers) error {\n\treturn fmt.Errorf(\"restore regs not supported on i386\")\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_linux_amd64.go",
    "content": "package native\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\nfunc (t *nativeThread) restoreRegisters(savedRegs proc.Registers) error {\n\tsr := savedRegs.(*linutil.AMD64Registers)\n\n\tvar restoreRegistersErr error\n\tt.dbp.execPtraceFunc(func() {\n\t\toldRegs := (*sys.PtraceRegs)(sr.Regs)\n\n\t\tvar currentRegs sys.PtraceRegs\n\t\trestoreRegistersErr = sys.PtraceGetRegs(t.ID, &currentRegs)\n\t\tif restoreRegistersErr != nil {\n\t\t\treturn\n\t\t}\n\t\t// restoreRegisters is only supposed to restore CPU registers, not FS_BASE and GS_BASE\n\t\toldRegs.Fs_base = currentRegs.Fs_base\n\t\toldRegs.Gs_base = currentRegs.Gs_base\n\n\t\trestoreRegistersErr = sys.PtraceSetRegs(t.ID, oldRegs)\n\n\t\tif restoreRegistersErr != nil {\n\t\t\treturn\n\t\t}\n\t\tif sr.Fpregset.Xsave != nil {\n\t\t\tiov := sys.Iovec{Base: &sr.Fpregset.Xsave[0], Len: uint64(len(sr.Fpregset.Xsave))}\n\t\t\t_, _, restoreRegistersErr = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(t.ID), _NT_X86_XSTATE, uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t\treturn\n\t\t}\n\n\t\t_, _, restoreRegistersErr = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETFPREGS, uintptr(t.ID), uintptr(0), uintptr(unsafe.Pointer(&sr.Fpregset.AMD64PtraceFpRegs)), 0, 0)\n\t})\n\tif restoreRegistersErr == syscall.Errno(0) {\n\t\trestoreRegistersErr = nil\n\t}\n\treturn restoreRegistersErr\n}\n\nconst debugRegUserOffset = 848 // offset of debug registers in the user struct, see source/arch/x86/kernel/ptrace.c\n\nfunc (t *nativeThread) withDebugRegisters(f func(*amd64util.DebugRegisters) error) error {\n\tvar err error\n\tt.dbp.execPtraceFunc(func() {\n\t\tdebugregs := make([]uint64, 8)\n\n\t\tfor i := range debugregs {\n\t\t\tif i == 4 || i == 5 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t_, _, err = sys.Syscall6(sys.SYS_PTRACE, sys.PTRACE_PEEKUSR, uintptr(t.ID), uintptr(debugRegUserOffset+uintptr(i)*unsafe.Sizeof(debugregs[0])), uintptr(unsafe.Pointer(&debugregs[i])), 0, 0)\n\t\t\tif err != nil && err != syscall.Errno(0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tdrs := amd64util.NewDebugRegisters(&debugregs[0], &debugregs[1], &debugregs[2], &debugregs[3], &debugregs[6], &debugregs[7])\n\n\t\terr = f(drs)\n\n\t\tif drs.Dirty {\n\t\t\tfor i := range debugregs {\n\t\t\t\tif i == 4 || i == 5 {\n\t\t\t\t\t// Linux will return EIO for DR4 and DR5\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t_, _, err = sys.Syscall6(sys.SYS_PTRACE, sys.PTRACE_POKEUSR, uintptr(t.ID), uintptr(debugRegUserOffset+uintptr(i)*unsafe.Sizeof(debugregs[0])), uintptr(debugregs[i]), 0, 0)\n\t\t\t\tif err != nil && err != syscall.Errno(0) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\tif err == syscall.Errno(0) || err == sys.ESRCH {\n\t\terr = nil\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_linux_arm64.go",
    "content": "package native\n\nimport (\n\t\"debug/elf\"\n\t\"errors\"\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\nfunc (thread *nativeThread) fpRegisters() ([]proc.Register, []byte, error) {\n\tvar err error\n\tvar arm_fpregs linutil.ARM64PtraceFpRegs\n\tthread.dbp.execPtraceFunc(func() { arm_fpregs.Vregs, err = ptraceGetFpRegset(thread.ID) })\n\tfpregs := arm_fpregs.Decode()\n\tif err != nil {\n\t\terr = fmt.Errorf(\"could not get floating point registers: %v\", err.Error())\n\t}\n\treturn fpregs, arm_fpregs.Vregs, err\n}\n\nfunc (t *nativeThread) restoreRegisters(savedRegs proc.Registers) error {\n\tsr := savedRegs.(*linutil.ARM64Registers)\n\n\tvar restoreRegistersErr error\n\tt.dbp.execPtraceFunc(func() {\n\t\trestoreRegistersErr = ptraceSetGRegs(t.ID, sr.Regs)\n\t\tif restoreRegistersErr != syscall.Errno(0) && restoreRegistersErr != nil {\n\t\t\treturn\n\t\t}\n\t\tif sr.Fpregset != nil {\n\t\t\tiov := sys.Iovec{Base: &sr.Fpregset[0], Len: uint64(len(sr.Fpregset))}\n\t\t\t_, _, restoreRegistersErr = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(t.ID), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t}\n\t})\n\tif restoreRegistersErr == syscall.Errno(0) {\n\t\trestoreRegistersErr = nil\n\t}\n\treturn restoreRegistersErr\n}\n\nconst (\n\t_MAX_ARM64_WATCH = 16\n\t_NT_ARM_HW_WATCH = 0x403\n\t_TRAP_HWBKPT     = 0x4\n)\n\ntype watchpointState struct {\n\tnum      uint8\n\tdebugVer uint8\n\twords    []uint64\n}\n\nfunc (wpstate *watchpointState) set(idx uint8, addr, ctrl uint64) {\n\twpstate.words[1+idx*2] = addr\n\twpstate.words[1+idx*2+1] = ctrl\n}\n\n// getWatchpoints reads the NT_ARM_HW_WATCH ptrace register set.\n// The format of this register set is described by user_hwdebug_state in\n// arch/arm64/include/uapi/asm/ptrace.h.\n// It consists of one 64bit word containing:\n//   - 1byte number of watchpoints\n//   - 1byte debug architecture version (the 4 least significant bits of ID_AA64DFR0_EL1)\n//   - 6bytes padding\n//\n// Followed by 2 64bit words for each watchpoint, up to a maximum of 16\n// watchpoints. The first word contains the address at which the watchpoint\n// is set (DBGWVRn_EL1), the second word is the control register for the\n// watchpoint (DBGWCRn_EL1), as described by\n// ARM - Architecture Reference Manual Armv8, for A-profile architectures\n// section D13.3.11\n// where only the BAS, LSC, PAC and E fields are accessible.\nfunc (t *nativeThread) getWatchpoints() (*watchpointState, error) {\n\twords := make([]uint64, _MAX_ARM64_WATCH*2+1)\n\tiov := sys.Iovec{Base: (*byte)(unsafe.Pointer(&words[0])), Len: uint64(len(words)) * uint64(unsafe.Sizeof(words[0]))}\n\tvar err error\n\tt.dbp.execPtraceFunc(func() {\n\t\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETREGSET, uintptr(t.ID), _NT_ARM_HW_WATCH, uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t})\n\tif err != syscall.Errno(0) {\n\t\treturn nil, err\n\t}\n\twpstate := &watchpointState{num: uint8(words[0] & 0xff), debugVer: uint8((words[0] >> 8) & 0xff), words: words}\n\tif wpstate.num > _MAX_ARM64_WATCH {\n\t\t// According to the specification this should never be more than 16 but\n\t\t// the code here will not work if this limit ever gets relaxed.\n\t\twpstate.num = _MAX_ARM64_WATCH\n\t}\n\t// remove the watchpoint registers that don't exist from the words slice so\n\t// that we won't try later to write them (which would cause an ENOSPC\n\t// error).\n\twpstate.words = wpstate.words[:wpstate.num*2+1]\n\treturn wpstate, nil\n}\n\n// setWatchpoints saves the watchpoint state of the given thread.\n// See (*nativeThread).getWatchpoints for a description of how this works.\nfunc (t *nativeThread) setWatchpoints(wpstate *watchpointState) error {\n\tiov := sys.Iovec{Base: (*byte)(unsafe.Pointer(&(wpstate.words[0]))), Len: uint64(len(wpstate.words)) * uint64(unsafe.Sizeof(wpstate.words[0]))}\n\tvar err error\n\tt.dbp.execPtraceFunc(func() {\n\t\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(t.ID), _NT_ARM_HW_WATCH, uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t})\n\tif err != syscall.Errno(0) {\n\t\treturn err\n\t}\n\treturn nil\n}\n\ntype ptraceSiginfoArm64 struct {\n\tsigno uint32\n\terrno uint32\n\tcode  uint32\n\taddr  uint64    // only valid if Signo is SIGTRAP, SIGFPE, SIGILL, SIGBUS or SIGEMT\n\tpad   [128]byte // the total size of siginfo_t on ARM64 is 128 bytes so this is more than enough padding for all the fields we don't care about\n}\n\nfunc (t *nativeThread) findHardwareBreakpoint() (*proc.Breakpoint, error) {\n\tvar siginfo ptraceSiginfoArm64\n\tvar err error\n\tt.dbp.execPtraceFunc(func() {\n\t\t_, _, err = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_GETSIGINFO, uintptr(t.ID), 0, uintptr(unsafe.Pointer(&siginfo)), 0, 0)\n\t})\n\tif err != syscall.Errno(0) {\n\t\treturn nil, err\n\t}\n\tif siginfo.signo != uint32(sys.SIGTRAP) || (siginfo.code&0xffff) != _TRAP_HWBKPT {\n\t\treturn nil, nil\n\t}\n\n\tfor _, bp := range t.dbp.Breakpoints().M {\n\t\tif bp.WatchType != 0 && siginfo.addr >= bp.Addr && siginfo.addr < bp.Addr+uint64(bp.WatchType.Size()) {\n\t\t\treturn bp, nil\n\t\t}\n\t}\n\n\treturn nil, fmt.Errorf(\"could not find hardware breakpoint for address %#x\", siginfo.addr)\n}\n\nfunc (t *nativeThread) writeHardwareBreakpoint(addr uint64, wtype proc.WatchType, idx uint8) error {\n\twpstate, err := t.getWatchpoints()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif idx >= wpstate.num {\n\t\treturn errors.New(\"hardware breakpoints exhausted\")\n\t}\n\n\tconst (\n\t\treadBreakpoint  = 0x1\n\t\twriteBreakpoint = 0x2\n\t\tlenBitOffset    = 5\n\t\ttypeBitOffset   = 3\n\t\tprivBitOffset   = 1\n\t)\n\n\tvar typ uint64\n\tif wtype.Read() {\n\t\ttyp |= readBreakpoint\n\t}\n\tif wtype.Write() {\n\t\ttyp |= writeBreakpoint\n\t}\n\n\tlen := uint64((1 << wtype.Size()) - 1) // arm wants the length expressed as address bitmask\n\n\tpriv := uint64(3)\n\n\tctrl := (len << lenBitOffset) | (typ << typeBitOffset) | (priv << privBitOffset) | 1\n\twpstate.set(idx, addr, ctrl)\n\n\treturn t.setWatchpoints(wpstate)\n}\n\nfunc (t *nativeThread) clearHardwareBreakpoint(addr uint64, wtype proc.WatchType, idx uint8) error {\n\twpstate, err := t.getWatchpoints()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif idx >= wpstate.num {\n\t\treturn errors.New(\"hardware breakpoints exhausted\")\n\t}\n\twpstate.set(idx, 0, 0)\n\treturn t.setWatchpoints(wpstate)\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_linux_loong64.go",
    "content": "//go:build linux && loong64\n\npackage native\n\nimport (\n\t\"debug/elf\"\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\nfunc (thread *nativeThread) fpRegisters() ([]proc.Register, []byte, error) {\n\tvar err error\n\tvar loong64_fpregs linutil.LOONG64PtraceFpRegs\n\n\tthread.dbp.execPtraceFunc(func() { err = ptraceGetFpRegset(thread.ID, &loong64_fpregs) })\n\tfpregs := loong64_fpregs.Decode()\n\n\tif err != nil {\n\t\terr = fmt.Errorf(\"could not get floating point registers: %v\", err.Error())\n\t}\n\n\treturn fpregs, loong64_fpregs.Fregs, err\n}\n\nfunc (t *nativeThread) restoreRegisters(savedRegs proc.Registers) error {\n\tvar restoreRegistersErr error\n\n\tsr := savedRegs.(*linutil.LOONG64Registers)\n\tt.dbp.execPtraceFunc(func() {\n\t\trestoreRegistersErr = ptraceSetGRegs(t.ID, sr.Regs)\n\t\tif restoreRegistersErr != syscall.Errno(0) {\n\t\t\treturn\n\t\t}\n\n\t\tif sr.Fpregset != nil {\n\t\t\tiov := sys.Iovec{Base: &sr.Fpregset[0], Len: uint64(len(sr.Fpregset))}\n\t\t\t_, _, restoreRegistersErr = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET,\n\t\t\t\tuintptr(t.ID), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t}\n\t})\n\n\tif restoreRegistersErr == syscall.Errno(0) {\n\t\trestoreRegistersErr = nil\n\t}\n\n\treturn restoreRegistersErr\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_linux_ppc64le.go",
    "content": "package native\n\nimport (\n\t\"debug/elf\"\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n)\n\nfunc (t *nativeThread) fpRegisters() ([]proc.Register, []byte, error) {\n\tvar regs []proc.Register\n\tvar fpregs linutil.PPC64LEPtraceFpRegs\n\tvar err error\n\n\tt.dbp.execPtraceFunc(func() { fpregs.Fp, err = ptraceGetFpRegset(t.ID) })\n\tregs = fpregs.Decode()\n\tif err != nil {\n\t\terr = fmt.Errorf(\"could not get floating point registers: %v\", err.Error())\n\t}\n\treturn regs, fpregs.Fp, err\n}\n\nfunc (t *nativeThread) restoreRegisters(savedRegs proc.Registers) error {\n\tsr := savedRegs.(*linutil.PPC64LERegisters)\n\n\tvar restoreRegistersErr error\n\tt.dbp.execPtraceFunc(func() {\n\t\trestoreRegistersErr = ptraceSetGRegs(t.ID, sr.Regs)\n\t\tif restoreRegistersErr != syscall.Errno(0) && restoreRegistersErr != nil {\n\t\t\treturn\n\t\t}\n\t\tif sr.Fpregset != nil {\n\t\t\tiov := sys.Iovec{Base: &sr.Fpregset[0], Len: _PPC64LE_FPREGS_SIZE}\n\t\t\t_, _, restoreRegistersErr = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(t.ID), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t}\n\t})\n\tif restoreRegistersErr == syscall.Errno(0) {\n\t\trestoreRegistersErr = nil\n\t}\n\treturn restoreRegistersErr\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_linux_riscv64.go",
    "content": "package native\n\nimport (\n\t\"bytes\"\n\t\"debug/elf\"\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\tsys \"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/linutil\"\n\t\"golang.org/x/arch/riscv64/riscv64asm\"\n)\n\nfunc (thread *nativeThread) fpRegisters() ([]proc.Register, []byte, error) {\n\tvar err error\n\tvar riscv64_fpregs linutil.RISCV64PtraceFpRegs\n\n\tthread.dbp.execPtraceFunc(func() { err = ptraceGetFpRegset(thread.ID, &riscv64_fpregs) })\n\tfpregs := riscv64_fpregs.Decode()\n\n\tif err != nil {\n\t\terr = fmt.Errorf(\"could not get floating point registers: %v\", err.Error())\n\t}\n\n\treturn fpregs, riscv64_fpregs.Fregs, err\n}\n\nfunc (t *nativeThread) restoreRegisters(savedRegs proc.Registers) error {\n\tvar restoreRegistersErr error\n\n\tsr := savedRegs.(*linutil.RISCV64Registers)\n\tt.dbp.execPtraceFunc(func() {\n\t\trestoreRegistersErr = ptraceSetGRegs(t.ID, sr.Regs)\n\t\tif restoreRegistersErr != syscall.Errno(0) {\n\t\t\treturn\n\t\t}\n\n\t\tif sr.Fpregset != nil {\n\t\t\tiov := sys.Iovec{Base: &sr.Fpregset[0], Len: uint64(len(sr.Fpregset))}\n\t\t\t_, _, restoreRegistersErr = syscall.Syscall6(syscall.SYS_PTRACE, sys.PTRACE_SETREGSET, uintptr(t.ID), uintptr(elf.NT_FPREGSET), uintptr(unsafe.Pointer(&iov)), 0, 0)\n\t\t}\n\t})\n\n\tif restoreRegistersErr == syscall.Errno(0) {\n\t\trestoreRegistersErr = nil\n\t}\n\n\treturn restoreRegistersErr\n}\n\n// resolvePC is used to resolve next PC for current instruction.\nfunc (t *nativeThread) resolvePC(savedRegs proc.Registers) ([]uint64, error) {\n\tregs := savedRegs.(*linutil.RISCV64Registers)\n\tnextInstLen := t.BinInfo().Arch.MaxInstructionLength()\n\tnextInstBytes := make([]byte, nextInstLen)\n\tvar err error\n\n\tt.dbp.execPtraceFunc(func() {\n\t\t_, err = sys.PtracePeekData(t.ID, uintptr(regs.PC()), nextInstBytes)\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tnextPCs := []uint64{regs.PC() + uint64(nextInstLen)}\n\tif bytes.Equal(nextInstBytes, t.BinInfo().Arch.AltBreakpointInstruction()) {\n\t\treturn nextPCs, nil\n\t} else if bytes.Equal(nextInstBytes, t.BinInfo().Arch.BreakpointInstruction()) {\n\t\tnextInstLen = 2\n\t\tnextPCs = []uint64{regs.PC() + uint64(nextInstLen)}\n\t\treturn nextPCs, nil\n\t}\n\n\tnextInst, err := riscv64asm.Decode(nextInstBytes)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif nextInst.Len == 2 {\n\t\tnextInstBytes = nextInstBytes[:2]\n\t\tnextInstLen = 2\n\t\tnextPCs = []uint64{regs.PC() + uint64(nextInstLen)}\n\t}\n\n\tswitch nextInst.Op {\n\tcase riscv64asm.BEQ, riscv64asm.BNE, riscv64asm.BLT, riscv64asm.BGE, riscv64asm.BLTU, riscv64asm.BGEU:\n\t\trs1, _ := nextInst.Args[0].(riscv64asm.Reg)\n\t\trs2, _ := nextInst.Args[1].(riscv64asm.Reg)\n\t\tbimm12, _ := nextInst.Args[2].(riscv64asm.Simm)\n\t\tsrc1u, _ := regs.GetReg(uint64(rs1))\n\t\tsrc2u, _ := regs.GetReg(uint64(rs2))\n\t\tsrc1, src2 := int64(src1u), int64(src2u)\n\n\t\tswitch nextInst.Op {\n\t\tcase riscv64asm.BEQ:\n\t\t\tif src1 == src2 && int(bimm12.Imm) != nextInstLen {\n\t\t\t\tnextPCs = append(nextPCs, regs.PC()+uint64(bimm12.Imm))\n\t\t\t}\n\t\tcase riscv64asm.BNE:\n\t\t\tif src1 != src2 && int(bimm12.Imm) != nextInstLen {\n\t\t\t\tnextPCs = append(nextPCs, regs.PC()+uint64(bimm12.Imm))\n\t\t\t}\n\t\tcase riscv64asm.BLT:\n\t\t\tif src1 < src2 && int(bimm12.Imm) != nextInstLen {\n\t\t\t\tnextPCs = append(nextPCs, regs.PC()+uint64(bimm12.Imm))\n\t\t\t}\n\t\tcase riscv64asm.BGE:\n\t\t\tif src1 >= src2 && int(bimm12.Imm) != nextInstLen {\n\t\t\t\tnextPCs = append(nextPCs, regs.PC()+uint64(bimm12.Imm))\n\t\t\t}\n\t\tcase riscv64asm.BLTU:\n\t\t\tif src1u < src2u && int(bimm12.Imm) != nextInstLen {\n\t\t\t\tnextPCs = append(nextPCs, regs.PC()+uint64(bimm12.Imm))\n\t\t\t}\n\t\tcase riscv64asm.BGEU:\n\t\t\tif src1u >= src2u && int(bimm12.Imm) != nextInstLen {\n\t\t\t\tnextPCs = append(nextPCs, regs.PC()+uint64(bimm12.Imm))\n\t\t\t}\n\t\t}\n\n\tcase riscv64asm.JAL:\n\t\tjimm, _ := nextInst.Args[1].(riscv64asm.Simm)\n\t\tif int(jimm.Imm) != nextInstLen {\n\t\t\tnextPCs = append(nextPCs, regs.PC()+uint64(jimm.Imm))\n\t\t}\n\n\tcase riscv64asm.JALR:\n\t\trd, _ := nextInst.Args[0].(riscv64asm.Reg)\n\t\trs1_mem := nextInst.Args[1].(riscv64asm.RegOffset)\n\t\trs1, ofs := rs1_mem.OfsReg, rs1_mem.Ofs\n\t\tsrc1, _ := regs.GetReg(uint64(rs1))\n\t\tif rd == riscv64asm.X0 && rs1 == riscv64asm.X1 {\n\t\t\tnextPCs = []uint64{(src1 + uint64(ofs.Imm)) & (^uint64(0x1))}\n\t\t}\n\t\tif (src1+uint64(ofs.Imm))&(^uint64(0x1)) != nextPCs[0] {\n\t\t\tnextPCs = append(nextPCs, (src1+uint64(ofs.Imm))&(^uint64(0x1)))\n\t\t}\n\n\t// We can't put a breakpoint in the middle of a lr/sc atomic sequence, so look for the end of the sequence and put the breakpoint there.\n\t// RISC-V Go only use lr.w/d.aq, see comments at the beginning of $GOROOT/src/runtime/internal/atomic/atomic_riscv64.s\n\tcase riscv64asm.LR_D_AQ, riscv64asm.LR_W_AQ:\n\t\t// Currently, RISC-V Go only use this kind of lr/sc sequence, so only check this pattern.\n\t\t// defined in $GOROOT/src/cmd/compile/internal/riscv64/ssa.go:\n\t\t// LR\t(Rarg0), Rtmp\n\t\t// BNE\tRtmp, Rarg1, 3(PC)\n\t\t// SC\tRarg2, (Rarg0), Rtmp\n\t\t// BNE\tRtmp, ZERO, -3(PC)\n\t\tcurPC := regs.PC() + uint64(nextInstLen)\n\t\tt.dbp.execPtraceFunc(func() {\n\t\t\t_, err = sys.PtracePeekData(t.ID, uintptr(curPC), nextInstBytes)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tnextInst, err = riscv64asm.Decode(nextInstBytes)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif nextInst.Len == 2 {\n\t\t\tnextInstBytes = nextInstBytes[:2]\n\t\t}\n\t\tif nextInst.Op != riscv64asm.BNE {\n\t\t\tbreak\n\t\t}\n\n\t\tcurPC += uint64(nextInstLen)\n\t\tt.dbp.execPtraceFunc(func() {\n\t\t\t_, err = sys.PtracePeekData(t.ID, uintptr(curPC), nextInstBytes)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tnextInst, err = riscv64asm.Decode(nextInstBytes)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif nextInst.Len == 2 {\n\t\t\tnextInstBytes = nextInstBytes[:2]\n\t\t}\n\t\tif nextInst.Op != riscv64asm.SC_D_RL && nextInst.Op != riscv64asm.SC_W_RL {\n\t\t\tbreak\n\t\t}\n\n\t\tcurPC += uint64(nextInstLen)\n\t\tt.dbp.execPtraceFunc(func() {\n\t\t\t_, err = sys.PtracePeekData(t.ID, uintptr(regs.PC()+uint64(curPC)), nextInstBytes)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tnextInst, err = riscv64asm.Decode(nextInstBytes)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif nextInst.Len == 2 {\n\t\t\tnextInstBytes = nextInstBytes[:2]\n\t\t}\n\t\tif nextInst.Op != riscv64asm.BNE {\n\t\t\tbreak\n\t\t}\n\t\tnextPCs = []uint64{curPC}\n\t}\n\n\treturn nextPCs, nil\n}\n\n// RISC-V doesn't have ptrace singlestep support, so use breakpoint to emulate it.\nfunc (procgrp *processGroup) singleStep(t *nativeThread) (err error) {\n\tregs, err := t.Registers()\n\tif err != nil {\n\t\treturn err\n\t}\n\tnextPCs, err := t.resolvePC(regs)\n\tif err != nil {\n\t\treturn err\n\t}\n\toriginalDataSet := make(map[uintptr][]byte)\n\n\t// Do in batch, first set breakpoint, then continue.\n\tt.dbp.execPtraceFunc(func() {\n\t\tbreakpointInstr := t.BinInfo().Arch.BreakpointInstruction()\n\t\treadWriteMem := func(i int, addr uintptr, instr []byte) error {\n\t\t\toriginalData := make([]byte, len(breakpointInstr))\n\t\t\t_, err = sys.PtracePeekData(t.ID, addr, originalData)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t_, err = sys.PtracePokeData(t.ID, addr, instr)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\t// Everything is ok, store originalData\n\t\t\toriginalDataSet[addr] = originalData\n\t\t\treturn nil\n\t\t}\n\t\tfor i, nextPC := range nextPCs {\n\t\t\terr = readWriteMem(i, uintptr(nextPC), breakpointInstr)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t})\n\t// Make sure we restore before return.\n\tdefer func() {\n\t\tt.dbp.execPtraceFunc(func() {\n\t\t\tfor addr, originalData := range originalDataSet {\n\t\t\t\tif originalData != nil {\n\t\t\t\t\t_, err = sys.PtracePokeData(t.ID, addr, originalData)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}()\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor {\n\t\tsig := 0\n\t\tt.dbp.execPtraceFunc(func() { err = ptraceCont(t.ID, sig) })\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t// To be able to catch process exit, we can only use wait instead of waitFast.\n\t\twpid, status, err := t.dbp.wait(t.ID, 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif (status == nil || status.Exited()) && wpid == t.dbp.pid {\n\t\t\tt.dbp.postExit()\n\t\t\trs := 0\n\t\t\tif status != nil {\n\t\t\t\trs = status.ExitStatus()\n\t\t\t}\n\t\t\treturn proc.ErrProcessExited{Pid: t.dbp.pid, Status: rs}\n\t\t}\n\t\tif wpid == t.ID {\n\t\t\tsig = 0\n\t\t\tswitch s := status.StopSignal(); s {\n\t\t\tcase sys.SIGTRAP:\n\t\t\t\treturn nil\n\t\t\tcase sys.SIGSTOP:\n\t\t\t\t// delayed SIGSTOP, ignore it\n\t\t\tcase sys.SIGILL, sys.SIGBUS, sys.SIGFPE, sys.SIGSEGV, sys.SIGSTKFLT:\n\t\t\t\t// propagate signals that can have been caused by the current instruction\n\t\t\t\tsig = int(s)\n\t\t\tdefault:\n\t\t\t\t// delay propagation of all other signals\n\t\t\t\tt.os.delayedSignal = int(s)\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_windows.go",
    "content": "package native\n\nimport (\n\t\"errors\"\n\t\"syscall\"\n\n\tsys \"golang.org/x/sys/windows\"\n)\n\nconst enableHardwareBreakpoints = false // see https://github.com/go-delve/delve/issues/2768\n\n// waitStatus is a synonym for the platform-specific WaitStatus\ntype waitStatus sys.WaitStatus\n\n// osSpecificDetails holds information specific to the Windows\n// operating system / kernel.\ntype osSpecificDetails struct {\n\thThread            syscall.Handle\n\tdbgUiRemoteBreakIn bool // whether thread is an auxiliary DbgUiRemoteBreakIn thread created by Windows\n\tdelayErr           error\n\tsetbp              bool\n}\n\nfunc (procgrp *processGroup) singleStep(t *nativeThread) error {\n\tcontext := newContext()\n\tcontext.SetFlags(_CONTEXT_ALL)\n\n\t// Set the processor TRAP flag\n\terr := t.getContext(context)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcontext.SetTrap(true)\n\n\terr = t.setContext(context)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsuspendcnt := 0\n\n\t// If a thread simultaneously hits a breakpoint and is suspended by the Go\n\t// runtime it will have a suspend count greater than 1 and to actually take\n\t// a single step we have to resume it multiple times here.\n\t// We keep a counter of how many times it was suspended so that after\n\t// single-stepping we can re-suspend it the correct number of times.\n\tfor {\n\t\tn, err := _ResumeThread(t.os.hThread)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsuspendcnt++\n\t\tif n == 1 {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfor {\n\t\tvar tid int\n\t\tt.dbp.execPtraceFunc(func() {\n\t\t\ttid, err = procgrp.waitForDebugEvent(waitBlocking | waitSuspendNewThreads)\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tep := procgrp.procForThread(tid)\n\n\t\tif ep.pid == t.dbp.pid && tid == t.ID {\n\t\t\tbreak\n\t\t}\n\n\t\tep.execPtraceFunc(func() {\n\t\t\terr = _ContinueDebugEvent(uint32(ep.pid), uint32(ep.os.breakThread), _DBG_CONTINUE)\n\t\t})\n\t}\n\n\tfor i := 0; i < suspendcnt; i++ {\n\t\tif !t.os.dbgUiRemoteBreakIn {\n\t\t\t_, err = _SuspendThread(t.os.hThread)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\tt.dbp.execPtraceFunc(func() {\n\t\terr = _ContinueDebugEvent(uint32(t.dbp.pid), uint32(t.ID), _DBG_CONTINUE)\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Unset the processor TRAP flag\n\terr = t.getContext(context)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcontext.SetTrap(false)\n\n\treturn t.setContext(context)\n}\n\nfunc (t *nativeThread) WriteMemory(addr uint64, data []byte) (int, error) {\n\tif ok, err := t.dbp.Valid(); !ok {\n\t\treturn 0, err\n\t}\n\tif len(data) == 0 {\n\t\treturn 0, nil\n\t}\n\tvar count uintptr\n\terr := _WriteProcessMemory(t.dbp.os.hProcess, uintptr(addr), &data[0], uintptr(len(data)), &count)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int(count), nil\n}\n\nvar ErrShortRead = errors.New(\"short read\")\n\nfunc (t *nativeThread) ReadMemory(buf []byte, addr uint64) (int, error) {\n\tif ok, err := t.dbp.Valid(); !ok {\n\t\treturn 0, err\n\t}\n\tif len(buf) == 0 {\n\t\treturn 0, nil\n\t}\n\tvar count uintptr\n\terr := _ReadProcessMemory(t.dbp.os.hProcess, uintptr(addr), &buf[0], uintptr(len(buf)), &count)\n\tif err == nil && count != uintptr(len(buf)) {\n\t\terr = ErrShortRead\n\t}\n\treturn int(count), err\n}\n\n// SoftExc returns true if this thread received a software exception during the last resume.\nfunc (t *nativeThread) SoftExc() bool {\n\treturn t.os.setbp\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_windows_amd64.go",
    "content": "package native\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/amd64util\"\n\t\"github.com/go-delve/delve/pkg/proc/winutil\"\n)\n\nfunc newContext() *winutil.AMD64CONTEXT {\n\treturn winutil.NewAMD64CONTEXT()\n}\n\nfunc registers(t *nativeThread) (proc.Registers, error) {\n\tcontext := newContext()\n\n\tcontext.SetFlags(_CONTEXT_ALL)\n\terr := t.getContext(context)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar threadInfo _THREAD_BASIC_INFORMATION\n\tstatus := _NtQueryInformationThread(t.os.hThread, _ThreadBasicInformation, uintptr(unsafe.Pointer(&threadInfo)), uint32(unsafe.Sizeof(threadInfo)), nil)\n\tif !_NT_SUCCESS(status) {\n\t\treturn nil, fmt.Errorf(\"NtQueryInformationThread failed: it returns 0x%x\", status)\n\t}\n\n\treturn winutil.NewAMD64Registers(context, uint64(threadInfo.TebBaseAddress)), nil\n}\n\nfunc (t *nativeThread) setContext(context *winutil.AMD64CONTEXT) error {\n\treturn _SetThreadContext(t.os.hThread, context)\n}\n\nfunc (t *nativeThread) getContext(context *winutil.AMD64CONTEXT) error {\n\treturn _GetThreadContext(t.os.hThread, context)\n}\n\nfunc (t *nativeThread) restoreRegisters(savedRegs proc.Registers) error {\n\treturn t.setContext(savedRegs.(*winutil.AMD64Registers).Context)\n}\n\nfunc (t *nativeThread) withDebugRegisters(f func(*amd64util.DebugRegisters) error) error {\n\tif !enableHardwareBreakpoints {\n\t\treturn errors.New(\"hardware breakpoints not supported\")\n\t}\n\n\tcontext := winutil.NewAMD64CONTEXT()\n\tcontext.ContextFlags = _CONTEXT_DEBUG_REGISTERS\n\n\terr := t.getContext(context)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdrs := amd64util.NewDebugRegisters(&context.Dr0, &context.Dr1, &context.Dr2, &context.Dr3, &context.Dr6, &context.Dr7)\n\n\terr = f(drs)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif drs.Dirty {\n\t\treturn t.setContext(context)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/native/threads_windows_arm64.go",
    "content": "package native\n\nimport (\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/winutil\"\n)\n\nfunc newContext() *winutil.ARM64CONTEXT {\n\treturn winutil.NewARM64CONTEXT()\n}\n\nfunc registers(t *nativeThread) (proc.Registers, error) {\n\tcontext := newContext()\n\n\tcontext.SetFlags(_CONTEXT_ALL)\n\terr := t.getContext(context)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn winutil.NewARM64Registers(context, t.dbp.iscgo), nil\n}\n\nfunc newRegisters(context *winutil.ARM64CONTEXT, TebBaseAddress uint64, iscgo bool) *winutil.ARM64Registers {\n\treturn winutil.NewARM64Registers(context, iscgo)\n}\n\nfunc (t *nativeThread) setContext(context *winutil.ARM64CONTEXT) error {\n\treturn _SetThreadContext(t.os.hThread, context)\n}\n\nfunc (t *nativeThread) getContext(context *winutil.ARM64CONTEXT) error {\n\treturn _GetThreadContext(t.os.hThread, context)\n}\n\nfunc (t *nativeThread) restoreRegisters(savedRegs proc.Registers) error {\n\treturn t.setContext(savedRegs.(*winutil.ARM64Registers).Context)\n}\n"
  },
  {
    "path": "pkg/proc/native/zsyscall_windows.go",
    "content": "// Code generated by 'go generate'; DO NOT EDIT.\n\npackage native\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/windows\"\n)\n\nvar _ unsafe.Pointer\n\n// Do the interface allocations only once for common\n// Errno values.\nconst (\n\terrnoERROR_IO_PENDING = 997\n)\n\nvar (\n\terrERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING)\n)\n\n// errnoErr returns common boxed Errno values, to prevent\n// allocations at runtime.\nfunc errnoErr(e syscall.Errno) error {\n\tswitch e {\n\tcase 0:\n\t\treturn nil\n\tcase errnoERROR_IO_PENDING:\n\t\treturn errERROR_IO_PENDING\n\t}\n\t// TODO: add more here, after collecting data on the common\n\t// error values see on Windows. (perhaps when running\n\t// all.bat?)\n\treturn e\n}\n\nvar (\n\tmodntdll    = windows.NewLazySystemDLL(\"ntdll.dll\")\n\tmodkernel32 = windows.NewLazySystemDLL(\"kernel32.dll\")\n\n\tprocNtQueryInformationThread   = modntdll.NewProc(\"NtQueryInformationThread\")\n\tdbgUiRemoteBreakin             = modntdll.NewProc(\"DbgUiRemoteBreakin\")\n\tprocGetThreadContext           = modkernel32.NewProc(\"GetThreadContext\")\n\tprocSetThreadContext           = modkernel32.NewProc(\"SetThreadContext\")\n\tprocSuspendThread              = modkernel32.NewProc(\"SuspendThread\")\n\tprocResumeThread               = modkernel32.NewProc(\"ResumeThread\")\n\tprocContinueDebugEvent         = modkernel32.NewProc(\"ContinueDebugEvent\")\n\tprocWriteProcessMemory         = modkernel32.NewProc(\"WriteProcessMemory\")\n\tprocReadProcessMemory          = modkernel32.NewProc(\"ReadProcessMemory\")\n\tprocDebugBreakProcess          = modkernel32.NewProc(\"DebugBreakProcess\")\n\tprocWaitForDebugEvent          = modkernel32.NewProc(\"WaitForDebugEvent\")\n\tprocDebugActiveProcess         = modkernel32.NewProc(\"DebugActiveProcess\")\n\tprocDebugActiveProcessStop     = modkernel32.NewProc(\"DebugActiveProcessStop\")\n\tprocQueryFullProcessImageNameW = modkernel32.NewProc(\"QueryFullProcessImageNameW\")\n\tprocVirtualQueryEx             = modkernel32.NewProc(\"VirtualQueryEx\")\n\tprocIsWow64Process             = modkernel32.NewProc(\"IsWow64Process\")\n)\n\nfunc _NtQueryInformationThread(threadHandle syscall.Handle, infoclass int32, info uintptr, infolen uint32, retlen *uint32) (status _NTSTATUS) {\n\tr0, _, _ := syscall.Syscall6(procNtQueryInformationThread.Addr(), 5, uintptr(threadHandle), uintptr(infoclass), uintptr(info), uintptr(infolen), uintptr(unsafe.Pointer(retlen)), 0)\n\tstatus = _NTSTATUS(r0)\n\treturn\n}\n\nfunc _GetThreadContext(thread syscall.Handle, context *_CONTEXT) (err error) {\n\tr1, _, e1 := syscall.Syscall(procGetThreadContext.Addr(), 2, uintptr(thread), uintptr(unsafe.Pointer(context)), 0)\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _SetThreadContext(thread syscall.Handle, context *_CONTEXT) (err error) {\n\tr1, _, e1 := syscall.Syscall(procSetThreadContext.Addr(), 2, uintptr(thread), uintptr(unsafe.Pointer(context)), 0)\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _SuspendThread(threadid syscall.Handle) (prevsuspcount uint32, err error) {\n\tr0, _, e1 := syscall.Syscall(procSuspendThread.Addr(), 1, uintptr(threadid), 0, 0)\n\tprevsuspcount = uint32(r0)\n\tif prevsuspcount == 0xffffffff {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _ResumeThread(threadid syscall.Handle) (prevsuspcount uint32, err error) {\n\tr0, _, e1 := syscall.Syscall(procResumeThread.Addr(), 1, uintptr(threadid), 0, 0)\n\tprevsuspcount = uint32(r0)\n\tif prevsuspcount == 0xffffffff {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _ContinueDebugEvent(processid uint32, threadid uint32, continuestatus uint32) (err error) {\n\tr1, _, e1 := syscall.Syscall(procContinueDebugEvent.Addr(), 3, uintptr(processid), uintptr(threadid), uintptr(continuestatus))\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _WriteProcessMemory(process syscall.Handle, baseaddr uintptr, buffer *byte, size uintptr, byteswritten *uintptr) (err error) {\n\tr1, _, e1 := syscall.Syscall6(procWriteProcessMemory.Addr(), 5, uintptr(process), uintptr(baseaddr), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(byteswritten)), 0)\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _ReadProcessMemory(process syscall.Handle, baseaddr uintptr, buffer *byte, size uintptr, bytesread *uintptr) (err error) {\n\tr1, _, e1 := syscall.Syscall6(procReadProcessMemory.Addr(), 5, uintptr(process), uintptr(baseaddr), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(bytesread)), 0)\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _DebugBreakProcess(process syscall.Handle) (err error) {\n\tr1, _, e1 := syscall.Syscall(procDebugBreakProcess.Addr(), 1, uintptr(process), 0, 0)\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _WaitForDebugEvent(debugevent *_DEBUG_EVENT, milliseconds uint32) (err error) {\n\tr1, _, e1 := syscall.Syscall(procWaitForDebugEvent.Addr(), 2, uintptr(unsafe.Pointer(debugevent)), uintptr(milliseconds), 0)\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _DebugActiveProcess(processid uint32) (err error) {\n\tr1, _, e1 := syscall.Syscall(procDebugActiveProcess.Addr(), 1, uintptr(processid), 0, 0)\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _DebugActiveProcessStop(processid uint32) (err error) {\n\tr1, _, e1 := syscall.Syscall(procDebugActiveProcessStop.Addr(), 1, uintptr(processid), 0, 0)\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _QueryFullProcessImageName(process syscall.Handle, flags uint32, exename *uint16, size *uint32) (err error) {\n\tr1, _, e1 := syscall.Syscall6(procQueryFullProcessImageNameW.Addr(), 4, uintptr(process), uintptr(flags), uintptr(unsafe.Pointer(exename)), uintptr(unsafe.Pointer(size)), 0, 0)\n\tif r1 == 0 {\n\t\tif e1 != 0 {\n\t\t\terr = errnoErr(e1)\n\t\t} else {\n\t\t\terr = syscall.EINVAL\n\t\t}\n\t}\n\treturn\n}\n\nfunc _VirtualQueryEx(process syscall.Handle, addr uintptr, buffer *_MEMORY_BASIC_INFORMATION, length uintptr) (lengthOut uintptr) {\n\tr0, _, _ := syscall.Syscall6(procVirtualQueryEx.Addr(), 4, uintptr(process), uintptr(addr), uintptr(unsafe.Pointer(buffer)), uintptr(length), 0, 0)\n\tlengthOut = uintptr(r0)\n\treturn\n}\n\nfunc _IsWow64Process(process syscall.Handle, wow64process *uint32) (ok uint32) {\n\tr0, _, _ := syscall.Syscall(procIsWow64Process.Addr(), 2, uintptr(process), uintptr(unsafe.Pointer(wow64process)), 0)\n\tok = uint32(r0)\n\treturn\n}\n"
  },
  {
    "path": "pkg/proc/pclntab.go",
    "content": "package proc\n\nimport (\n\t\"debug/elf\"\n\t\"debug/macho\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/internal/gosym\"\n)\n\nfunc readPcLnTableElf(exe *elf.File, path string) (*gosym.Table, uint64, error) {\n\t// Default section label is .gopclntab\n\tsectionLabel := \".gopclntab\"\n\n\tsection := exe.Section(sectionLabel)\n\tif section == nil {\n\t\t// binary may be built with -pie\n\t\tsectionLabel = \".data.rel.ro.gopclntab\"\n\t\tsection = exe.Section(sectionLabel)\n\t\tif section == nil {\n\t\t\treturn nil, 0, errors.New(\"could not read section .gopclntab\")\n\t\t}\n\t}\n\ttableData, err := section.Data()\n\tif err != nil {\n\t\treturn nil, 0, errors.New(\"found section but could not read .gopclntab\")\n\t}\n\n\taddr := exe.Section(\".text\").Addr\n\tlineTable := gosym.NewLineTable(tableData, addr)\n\tsymTable, err := gosym.NewTable([]byte{}, lineTable)\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"could not create symbol table from  %s \", path)\n\t}\n\treturn symTable, section.Addr, nil\n}\n\nfunc readPcLnTableMacho(exe *macho.File, path string) (*gosym.Table, uint64, error) {\n\t// Default section label is __gopclntab\n\tsectionLabel := \"__gopclntab\"\n\n\tsection := exe.Section(sectionLabel)\n\tif section == nil {\n\t\treturn nil, 0, errors.New(\"could not read section __gopclntab\")\n\t}\n\ttableData, err := section.Data()\n\tif err != nil {\n\t\treturn nil, 0, errors.New(\"found section but could not read __gopclntab\")\n\t}\n\n\taddr := exe.Section(\"__text\").Addr\n\tlineTable := gosym.NewLineTable(tableData, addr)\n\tsymTable, err := gosym.NewTable([]byte{}, lineTable)\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"could not create symbol table from  %s \", path)\n\t}\n\treturn symTable, section.Addr, nil\n}\n"
  },
  {
    "path": "pkg/proc/pe.go",
    "content": "package proc\n\nimport (\n\t\"fmt\"\n)\n\nconst (\n\t_IMAGE_FILE_MACHINE_UNKNOWN   = 0x0\n\t_IMAGE_FILE_MACHINE_AM33      = 0x1d3\n\t_IMAGE_FILE_MACHINE_AMD64     = 0x8664\n\t_IMAGE_FILE_MACHINE_ARM       = 0x1c0\n\t_IMAGE_FILE_MACHINE_ARMNT     = 0x1c4\n\t_IMAGE_FILE_MACHINE_ARM64     = 0xaa64\n\t_IMAGE_FILE_MACHINE_EBC       = 0xebc\n\t_IMAGE_FILE_MACHINE_I386      = 0x14c\n\t_IMAGE_FILE_MACHINE_IA64      = 0x200\n\t_IMAGE_FILE_MACHINE_M32R      = 0x9041\n\t_IMAGE_FILE_MACHINE_MIPS16    = 0x266\n\t_IMAGE_FILE_MACHINE_MIPSFPU   = 0x366\n\t_IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466\n\t_IMAGE_FILE_MACHINE_POWERPC   = 0x1f0\n\t_IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1\n\t_IMAGE_FILE_MACHINE_R4000     = 0x166\n\t_IMAGE_FILE_MACHINE_RISCV64   = 0x5064\n\t_IMAGE_FILE_MACHINE_SH3       = 0x1a2\n\t_IMAGE_FILE_MACHINE_SH3DSP    = 0x1a3\n\t_IMAGE_FILE_MACHINE_SH4       = 0x1a6\n\t_IMAGE_FILE_MACHINE_SH5       = 0x1a8\n\t_IMAGE_FILE_MACHINE_THUMB     = 0x1c2\n\t_IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169\n)\n\ntype _PEMachine uint16\n\n// PEMachineString map pe machine to name, See $GOROOT/src/debug/pe/pe.go for detail\nvar _PEMachineString = map[_PEMachine]string{\n\t_IMAGE_FILE_MACHINE_UNKNOWN:   \"unknown\",\n\t_IMAGE_FILE_MACHINE_AM33:      \"am33\",\n\t_IMAGE_FILE_MACHINE_AMD64:     \"amd64\",\n\t_IMAGE_FILE_MACHINE_ARM:       \"arm\",\n\t_IMAGE_FILE_MACHINE_ARMNT:     \"armnt\",\n\t_IMAGE_FILE_MACHINE_ARM64:     \"arm64\",\n\t_IMAGE_FILE_MACHINE_EBC:       \"ebc\",\n\t_IMAGE_FILE_MACHINE_I386:      \"i386\",\n\t_IMAGE_FILE_MACHINE_IA64:      \"ia64\",\n\t_IMAGE_FILE_MACHINE_M32R:      \"m32r\",\n\t_IMAGE_FILE_MACHINE_MIPS16:    \"mips16\",\n\t_IMAGE_FILE_MACHINE_MIPSFPU:   \"mipsfpu\",\n\t_IMAGE_FILE_MACHINE_MIPSFPU16: \"mipsfpu16\",\n\t_IMAGE_FILE_MACHINE_POWERPC:   \"powerpc\",\n\t_IMAGE_FILE_MACHINE_POWERPCFP: \"powerpcfp\",\n\t_IMAGE_FILE_MACHINE_R4000:     \"r4000\",\n\t_IMAGE_FILE_MACHINE_SH3:       \"sh3\",\n\t_IMAGE_FILE_MACHINE_SH3DSP:    \"sh3dsp\",\n\t_IMAGE_FILE_MACHINE_SH4:       \"sh4\",\n\t_IMAGE_FILE_MACHINE_SH5:       \"sh5\",\n\t_IMAGE_FILE_MACHINE_THUMB:     \"thumb\",\n\t_IMAGE_FILE_MACHINE_WCEMIPSV2: \"wcemipsv2\",\n}\n\nfunc (m _PEMachine) String() string {\n\tstr, ok := _PEMachineString[m]\n\tif ok {\n\t\treturn str\n\t}\n\treturn fmt.Sprintf(\"unknown image file machine code %d\\n\", uint16(m))\n}\n"
  },
  {
    "path": "pkg/proc/ppc64le_arch.go",
    "content": "package proc\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n)\n\n// This is the unconditional trap, the same mnemonic that both clang and gcc use\n// It's documented in Section C.6 Trap Mnemonics in the Power ISA Book 3\nvar ppc64leBreakInstruction = []byte{0x08, 0x00, 0xe0, 0x7f}\n\nfunc PPC64LEArch(goos string) *Arch {\n\treturn &Arch{\n\t\tName:                             \"ppc64le\",\n\t\tptrSize:                          8,\n\t\tmaxInstructionLength:             4,\n\t\tbreakpointInstruction:            ppc64leBreakInstruction,\n\t\tbreakInstrMovesPC:                false,\n\t\tderefTLS:                         false, // Chapter 3.7 of the ELF V2 ABI Specification\n\t\tprologues:                        prologuesPPC64LE,\n\t\tfixFrameUnwindContext:            ppc64leFixFrameUnwindContext,\n\t\tswitchStack:                      ppc64leSwitchStack,\n\t\tregSize:                          ppc64leRegSize,\n\t\tRegistersToDwarfRegisters:        ppc64leRegistersToDwarfRegisters,\n\t\taddrAndStackRegsToDwarfRegisters: ppc64leAddrAndStackRegsToDwarfRegisters,\n\t\tDwarfRegisterToString:            ppc64leDwarfRegisterToString,\n\t\tinhibitStepInto:                  func(*BinaryInfo, uint64) bool { return false },\n\t\tasmDecode:                        ppc64leAsmDecode,\n\t\tusesLR:                           true,\n\t\tPCRegNum:                         regnum.PPC64LE_PC,\n\t\tSPRegNum:                         regnum.PPC64LE_SP,\n\t\tContextRegNum:                    regnum.PPC64LE_R0 + 11,\n\t\tLRRegNum:                         regnum.PPC64LE_LR,\n\t\tasmRegisters:                     ppc64leAsmRegisters,\n\t\tRegisterNameToDwarf:              nameToDwarfFunc(regnum.PPC64LENameToDwarf),\n\t\tRegnumToString:                   regnum.PPC64LEToName,\n\t\tdebugCallMinStackSize:            320,\n\t\tmaxRegArgBytes:                   13*8 + 13*8,\n\t\targumentRegs:                     []int{regnum.PPC64LE_R0 + 3, regnum.PPC64LE_R0 + 4, regnum.PPC64LE_R0 + 5},\n\t}\n}\n\nfunc ppc64leFixFrameUnwindContext(fctxt *frame.FrameContext, pc uint64, bi *BinaryInfo) *frame.FrameContext {\n\ta := bi.Arch\n\tif a.sigreturnfn == nil {\n\t\ta.sigreturnfn = bi.lookupOneFunc(\"runtime.sigreturn\")\n\t}\n\tif fctxt == nil || (a.sigreturnfn != nil && pc >= a.sigreturnfn.Entry && pc < a.sigreturnfn.End) {\n\t\treturn &frame.FrameContext{\n\t\t\tRetAddrReg: regnum.PPC64LE_LR,\n\t\t\tRegs: map[uint64]frame.DWRule{\n\t\t\t\tregnum.PPC64LE_PC: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-a.PtrSize()),\n\t\t\t\t},\n\t\t\t\tregnum.PPC64LE_LR: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-2 * a.PtrSize()),\n\t\t\t\t},\n\t\t\t\tregnum.PPC64LE_SP: {\n\t\t\t\t\tRule:   frame.RuleValOffset,\n\t\t\t\t\tOffset: 0,\n\t\t\t\t},\n\t\t\t},\n\t\t\tCFA: frame.DWRule{\n\t\t\t\tRule:   frame.RuleCFA,\n\t\t\t\tReg:    regnum.PPC64LE_SP,\n\t\t\t\tOffset: int64(2 * a.PtrSize()),\n\t\t\t},\n\t\t}\n\t}\n\tif a.crosscall2fn == nil {\n\t\t// This is used to fix issues with the c calling frames\n\t\ta.crosscall2fn = bi.lookupOneFunc(\"crosscall2\")\n\t}\n\n\t// Checks if we marked the function as a crosscall and if we are currently in it\n\tif a.crosscall2fn != nil && pc >= a.crosscall2fn.Entry && pc < a.crosscall2fn.End {\n\t\trule := fctxt.CFA\n\t\tif rule.Offset == crosscall2SPOffsetBad {\n\t\t\t// Linux support only\n\t\t\trule.Offset += crosscall2SPOffsetLinuxPPC64LE\n\t\t}\n\t\tfctxt.CFA = rule\n\t}\n\tif fctxt.Regs[regnum.PPC64LE_LR].Rule == frame.RuleUndefined {\n\t\tfctxt.Regs[regnum.PPC64LE_LR] = frame.DWRule{\n\t\t\tRule:   frame.RuleFramePointer,\n\t\t\tReg:    regnum.PPC64LE_LR,\n\t\t\tOffset: 0,\n\t\t}\n\t}\n\treturn fctxt\n}\n\nconst ppc64cgocallSPOffsetSaveSlot = 32\nconst ppc64prevG0schedSPOffsetSaveSlot = 40\n\nfunc ppc64leSwitchStack(it *stackIterator, callFrameRegs *op.DwarfRegisters) bool {\n\tif it.frame.Current.Fn == nil && it.systemstack && it.g != nil && it.top {\n\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\tit.err = err\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\tif it.frame.Current.Fn != nil {\n\t\tswitch it.frame.Current.Fn.Name {\n\t\tcase \"runtime.asmcgocall\", \"runtime.cgocallback_gofunc\", \"runtime.sigpanic\", \"runtime.cgocallback\":\n\t\t\t//do nothing\n\t\tcase \"runtime.goexit\", \"runtime.rt0_go\":\n\t\t\t// Look for \"top of stack\" functions.\n\t\t\tit.atend = true\n\t\t\treturn true\n\t\tcase \"runtime.mcall\":\n\t\t\tif it.systemstack && it.g != nil {\n\t\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\t\tit.err = err\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tit.atend = true\n\t\t\treturn true\n\t\tcase \"crosscall2\":\n\t\t\t//The offsets get from runtime/cgo/asm_ppc64x.s:10\n\t\t\tnewsp, _ := readUintRaw(it.mem, it.regs.SP()+8*24, int64(it.bi.Arch.PtrSize()))\n\t\t\tnewbp, _ := readUintRaw(it.mem, it.regs.SP()+8*14, int64(it.bi.Arch.PtrSize()))\n\t\t\tnewlr, _ := readUintRaw(it.mem, it.regs.SP()+16, int64(it.bi.Arch.PtrSize()))\n\t\t\tif it.regs.Reg(it.regs.BPRegNum) != nil {\n\t\t\t\tit.regs.Reg(it.regs.BPRegNum).Uint64Val = newbp\n\t\t\t} else {\n\t\t\t\treg, _ := it.readRegisterAt(it.regs.BPRegNum, it.regs.SP()+8*14)\n\t\t\t\tit.regs.AddReg(it.regs.BPRegNum, reg)\n\t\t\t}\n\t\t\tit.regs.Reg(it.regs.LRRegNum).Uint64Val = newlr\n\t\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = newsp\n\t\t\tit.pc = newlr\n\t\t\treturn true\n\t\tdefault:\n\t\t\tif it.systemstack && it.top && it.g != nil && strings.HasPrefix(it.frame.Current.Fn.Name, \"runtime.\") && it.frame.Current.Fn.Name != \"runtime.fatalthrow\" {\n\t\t\t\t// The runtime switches to the system stack in multiple places.\n\t\t\t\t// This usually happens through a call to runtime.systemstack but there\n\t\t\t\t// are functions that switch to the system stack manually (for example\n\t\t\t\t// runtime.morestack).\n\t\t\t\t// Since we are only interested in printing the system stack for cgo\n\t\t\t\t// calls we switch directly to the goroutine stack if we detect that the\n\t\t\t\t// function at the top of the stack is a runtime function.\n\t\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\t\tit.err = err\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\tfn := it.bi.PCToFunc(it.frame.Ret)\n\tif fn == nil {\n\t\treturn false\n\t}\n\tswitch fn.Name {\n\tcase \"runtime.asmcgocall\":\n\t\tif !it.systemstack {\n\t\t\treturn false\n\t\t}\n\n\t\t// This function is called by a goroutine to execute a C function and\n\t\t// switches from the goroutine stack to the system stack.\n\t\t// Since we are unwinding the stack from callee to caller we have to switch\n\t\t// from the system stack to the goroutine stack.\n\t\toff, _ := readIntRaw(it.mem,\n\t\t\tcallFrameRegs.SP()+ppc64cgocallSPOffsetSaveSlot,\n\t\t\tint64(it.bi.Arch.PtrSize()))\n\t\toldsp := callFrameRegs.SP()\n\t\tnewsp := uint64(int64(it.stackhi) - off)\n\n\t\t// runtime.asmcgocall can also be called from inside the system stack,\n\t\t// in that case no stack switch actually happens\n\t\tif newsp == oldsp {\n\t\t\treturn false\n\t\t}\n\t\tit.systemstack = false\n\t\tcallFrameRegs.Reg(callFrameRegs.SPRegNum).Uint64Val = uint64(int64(newsp))\n\t\treturn false\n\n\tcase \"runtime.cgocallback_gofunc\", \"runtime.cgocallback\":\n\t\t// For a detailed description of how this works read the long comment at\n\t\t// the start of $GOROOT/src/runtime/cgocall.go and the source code of\n\t\t// runtime.cgocallback_gofunc in $GOROOT/src/runtime/asm_ppc64.s\n\t\t//\n\t\t// When a C functions calls back into go it will eventually call into\n\t\t// runtime.cgocallback_gofunc which is the function that does the stack\n\t\t// switch from the system stack back into the goroutine stack\n\t\t// Since we are going backwards on the stack here we see the transition\n\t\t// as goroutine stack -> system stack.\n\t\tif it.systemstack {\n\t\t\treturn false\n\t\t}\n\n\t\tit.loadG0SchedSP()\n\t\tif it.g0_sched_sp <= 0 {\n\t\t\treturn false\n\t\t}\n\t\t// entering the system stack\n\t\tcallFrameRegs.Reg(callFrameRegs.SPRegNum).Uint64Val = it.g0_sched_sp\n\t\t// reads the previous value of g0.sched.sp that runtime.cgocallback_gofunc saved on the stack\n\n\t\t// TODO: is this save slot correct?\n\t\tit.g0_sched_sp, _ = readUintRaw(it.mem, callFrameRegs.SP()+ppc64prevG0schedSPOffsetSaveSlot, int64(it.bi.Arch.PtrSize()))\n\t\tit.systemstack = true\n\t\treturn false\n\t}\n\n\treturn false\n}\n\n// ppc64leRegSize returns the size (in bytes) of register regnum.\nfunc ppc64leRegSize(regnum uint64) int {\n\treturn 8 // each register is a 64-bit register\n}\n\nfunc ppc64leRegistersToDwarfRegisters(staticBase uint64, regs Registers) *op.DwarfRegisters {\n\tdregs := initDwarfRegistersFromSlice(int(regnum.PPC64LEMaxRegNum()), regs, regnum.PPC64LENameToDwarf)\n\tdr := op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.PPC64LE_PC, regnum.PPC64LE_SP, regnum.PPC64LE_SP, regnum.PPC64LE_LR)\n\tdr.SetLoadMoreCallback(loadMoreDwarfRegistersFromSliceFunc(dr, regs, regnum.PPC64LENameToDwarf))\n\treturn dr\n}\n\nfunc ppc64leAddrAndStackRegsToDwarfRegisters(staticBase, pc, sp, bp, lr uint64) op.DwarfRegisters {\n\tdregs := make([]*op.DwarfRegister, regnum.PPC64LE_LR+1)\n\tdregs[regnum.PPC64LE_PC] = op.DwarfRegisterFromUint64(pc)\n\tdregs[regnum.PPC64LE_SP] = op.DwarfRegisterFromUint64(sp)\n\tdregs[regnum.PPC64LE_LR] = op.DwarfRegisterFromUint64(lr)\n\n\treturn *op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.PPC64LE_PC, regnum.PPC64LE_SP, 0, regnum.PPC64LE_LR)\n}\n\nfunc ppc64leDwarfRegisterToString(i int, reg *op.DwarfRegister) (name string, floatingPoint bool, repr string) {\n\tname = regnum.PPC64LEToName(uint64(i))\n\n\tif reg == nil {\n\t\treturn name, false, \"\"\n\t}\n\n\tif reg.Bytes == nil || (reg.Bytes != nil && len(reg.Bytes) < 16) {\n\t\treturn name, false, fmt.Sprintf(\"%#016x\", reg.Uint64Val)\n\t}\n\treturn name, true, fmt.Sprintf(\"%#x\", reg.Bytes)\n}\n"
  },
  {
    "path": "pkg/proc/ppc64le_disasm.go",
    "content": "package proc\n\nimport (\n\t\"encoding/binary\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"golang.org/x/arch/ppc64/ppc64asm\"\n)\n\n// Possible stacksplit prologues are inserted by stacksplit in\n// $GOROOT/src/cmd/internal/obj/ppc64/obj9.go.\nvar prologuesPPC64LE []opcodeSeq\n\nfunc init() {\n\t// Note: these will be the gnu opcodes and not the Go opcodes. Verify the sequences are as expected.\n\tvar tinyStacksplit = opcodeSeq{uint64(ppc64asm.ADDI), uint64(ppc64asm.CMPLD), uint64(ppc64asm.BC)}\n\tvar smallStacksplit = opcodeSeq{uint64(ppc64asm.ADDI), uint64(ppc64asm.CMPLD), uint64(ppc64asm.BC)}\n\tvar bigStacksplit = opcodeSeq{uint64(ppc64asm.ADDI), uint64(ppc64asm.CMPLD), uint64(ppc64asm.BC), uint64(ppc64asm.STD), uint64(ppc64asm.STD), uint64(ppc64asm.MFSPR)}\n\tvar adjustTOCPrologueOnPIE = opcodeSeq{uint64(ppc64asm.ADDIS), uint64(ppc64asm.ADDI)}\n\n\tvar unixGetG = opcodeSeq{uint64(ppc64asm.LD)}\n\tvar prologue opcodeSeq\n\tprologuesPPC64LE = make([]opcodeSeq, 0, 3)\n\tprologue = make(opcodeSeq, 0, 1)\n\tfor _, getG := range []opcodeSeq{unixGetG} {\n\t\tfor _, stacksplit := range []opcodeSeq{tinyStacksplit, smallStacksplit, bigStacksplit} {\n\t\t\tprologue = append(prologue, getG...)\n\t\t\tprologue = append(prologue, stacksplit...)\n\t\t\tprologuesPPC64LE = append(prologuesPPC64LE, prologue)\n\t\t}\n\t}\n\t// On PIE mode special prologue is generated two instructions before the function entry point that correlates to call target\n\t// address, Teach delve to recognize this sequence to appropriately adjust PC address so that the breakpoint is actually hit\n\t// while doing step\n\tTOCprologue := make(opcodeSeq, 0, len(adjustTOCPrologueOnPIE))\n\tTOCprologue = append(TOCprologue, adjustTOCPrologueOnPIE...)\n\tprologuesPPC64LE = append(prologuesPPC64LE, TOCprologue)\n}\n\nfunc ppc64leAsmDecode(asmInst *AsmInstruction, mem []byte, regs *op.DwarfRegisters, memrw MemoryReadWriter, bi *BinaryInfo) error {\n\tasmInst.Size = 4\n\tasmInst.Bytes = mem[:asmInst.Size]\n\n\tinst, err := ppc64asm.Decode(mem, binary.LittleEndian)\n\tif err != nil {\n\t\tasmInst.Inst = (*ppc64ArchInst)(nil)\n\t\treturn err\n\t}\n\tasmInst.Inst = (*ppc64ArchInst)(&inst)\n\tasmInst.Kind = OtherInstruction\n\n\tswitch inst.Op {\n\tcase ppc64asm.BL, ppc64asm.BLA, ppc64asm.BCL, ppc64asm.BCLA, ppc64asm.BCLRL, ppc64asm.BCCTRL, ppc64asm.BCTARL:\n\t\t// Pages 38-40 Book I v3.0\n\t\tasmInst.Kind = CallInstruction\n\tcase ppc64asm.RFEBB, ppc64asm.RFID, ppc64asm.HRFID, ppc64asm.BCLR:\n\t\tasmInst.Kind = RetInstruction\n\tcase ppc64asm.B, ppc64asm.BA, ppc64asm.BC, ppc64asm.BCA, ppc64asm.BCCTR, ppc64asm.BCTAR:\n\t\t// Pages 38-40 Book I v3.0\n\t\tasmInst.Kind = JmpInstruction\n\tcase ppc64asm.TD, ppc64asm.TDI, ppc64asm.TW, ppc64asm.TWI:\n\t\tasmInst.Kind = HardBreakInstruction\n\t}\n\n\tasmInst.DestLoc = resolveCallArgPPC64LE(&inst, asmInst.Loc.PC, asmInst.AtPC, regs, memrw, bi)\n\treturn nil\n}\n\nfunc resolveCallArgPPC64LE(inst *ppc64asm.Inst, instAddr uint64, currentGoroutine bool, regs *op.DwarfRegisters, mem MemoryReadWriter, bininfo *BinaryInfo) *Location {\n\tswitch inst.Op {\n\tcase ppc64asm.BCLRL, ppc64asm.BCLR:\n\t\tif regs != nil && regs.PC() == instAddr {\n\t\t\tpc := regs.Reg(bininfo.Arch.LRRegNum).Uint64Val\n\t\t\tfile, line, fn := bininfo.PCToLine(pc)\n\t\t\tif fn == nil {\n\t\t\t\treturn &Location{PC: pc}\n\t\t\t}\n\t\t\treturn &Location{PC: pc, File: file, Line: line, Fn: fn}\n\t\t}\n\t\treturn nil\n\tcase ppc64asm.B, ppc64asm.BL, ppc64asm.BLA, ppc64asm.BCL, ppc64asm.BCLA, ppc64asm.BCCTRL, ppc64asm.BCTARL:\n\t\t// ok\n\tdefault:\n\t\treturn nil\n\t}\n\n\tvar pc uint64\n\tvar err error\n\n\tswitch arg := inst.Args[0].(type) {\n\tcase ppc64asm.Imm:\n\t\tpc = uint64(arg)\n\tcase ppc64asm.Reg:\n\t\tif !currentGoroutine || regs == nil {\n\t\t\treturn nil\n\t\t}\n\t\tpc, err = bininfo.Arch.getAsmRegister(regs, int(arg))\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\tcase ppc64asm.PCRel:\n\t\tpc = instAddr + uint64(arg)\n\tdefault:\n\t\treturn nil\n\t}\n\n\tfile, line, fn := bininfo.PCToLine(pc)\n\tif fn == nil {\n\t\treturn &Location{PC: pc}\n\t}\n\treturn &Location{PC: pc, File: file, Line: line, Fn: fn}\n}\n\ntype ppc64ArchInst ppc64asm.Inst\n\nfunc (inst *ppc64ArchInst) Text(flavour AssemblyFlavour, pc uint64, symLookup func(uint64) (string, uint64)) string {\n\tif inst == nil {\n\t\treturn \"?\"\n\t}\n\n\tvar text string\n\n\tswitch flavour {\n\tcase GNUFlavour:\n\t\ttext = ppc64asm.GNUSyntax(ppc64asm.Inst(*inst), pc)\n\tdefault:\n\t\ttext = ppc64asm.GoSyntax(ppc64asm.Inst(*inst), pc, symLookup)\n\t}\n\n\treturn text\n}\n\nfunc (inst *ppc64ArchInst) OpcodeEquals(op uint64) bool {\n\tif inst == nil {\n\t\treturn false\n\t}\n\treturn uint64(inst.Op) == op\n}\n\nvar ppc64leAsmRegisters = func() map[int]asmRegister {\n\tr := make(map[int]asmRegister)\n\n\t// General Purpose Registers: from R0 to R31\n\tfor i := ppc64asm.R0; i <= ppc64asm.R31; i++ {\n\t\tr[int(i)] = asmRegister{regnum.PPC64LE_R0 + uint64(i-ppc64asm.R0), 0, 0}\n\t}\n\n\t// Floating point registers: from F0 to F31\n\tfor i := ppc64asm.F0; i <= ppc64asm.F31; i++ {\n\t\tr[int(i)] = asmRegister{regnum.PPC64LE_F0 + uint64(i-ppc64asm.F0), 0, 0}\n\t}\n\n\t// Vector (Altivec/VMX) registers: from V0 to V31\n\tfor i := ppc64asm.V0; i <= ppc64asm.V31; i++ {\n\t\tr[int(i)] = asmRegister{regnum.PPC64LE_V0 + uint64(i-ppc64asm.V0), 0, 0}\n\t}\n\n\t// Vector Scalar (VSX) registers: from VS0 to VS63\n\tfor i := ppc64asm.VS0; i <= ppc64asm.VS63; i++ {\n\t\tr[int(i)] = asmRegister{regnum.PPC64LE_VS0 + uint64(i-ppc64asm.VS0), 0, 0}\n\t}\n\n\t// Condition Registers: from CR0 to CR7\n\tfor i := ppc64asm.CR0; i <= ppc64asm.CR7; i++ {\n\t\tr[int(i)] = asmRegister{regnum.PPC64LE_CR0 + uint64(i-ppc64asm.CR0), 0, 0}\n\t}\n\treturn r\n}()\n"
  },
  {
    "path": "pkg/proc/proc_amd64_test.go",
    "content": "package proc_test\n\nimport (\n\t\"go/constant\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nfunc TestStepInstructionOnBreakpoint(t *testing.T) {\n\t// StepInstruction should step one instruction forward when\n\t// PC is on a 1 byte instruction with a software breakpoint.\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"break/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, filepath.ToSlash(filepath.Join(fixture.BuildDir, \"break_amd64.s\")), 4)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tpc := getRegisters(p, t).PC()\n\t\tassertNoError(grp.StepInstruction(false), t, \"StepInstruction()\")\n\t\tif pc == getRegisters(p, t).PC() {\n\t\t\tt.Fatal(\"Could not step a single instruction\")\n\t\t}\n\t})\n}\n\nfunc TestNextUnknownInstr(t *testing.T) {\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 10) {\n\t\tt.Skip(\"versions of Go before 1.10 can't assemble the instruction VPUNPCKLWD\")\n\t}\n\twithTestProcess(\"nodisasm/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.asmFunc\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(grp.Next(), t, \"Next()\")\n\t})\n}\n\nfunc TestIssue1656(t *testing.T) {\n\twithTestProcess(\"issue1656/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, filepath.ToSlash(filepath.Join(fixture.BuildDir, \"main.s\")), 5)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tt.Logf(\"step1\\n\")\n\t\tassertNoError(grp.Step(), t, \"Step()\")\n\t\tassertLineNumber(p, t, 8, \"wrong line number after first step\")\n\t\tt.Logf(\"step2\\n\")\n\t\tassertNoError(grp.Step(), t, \"Step()\")\n\t\tassertLineNumber(p, t, 9, \"wrong line number after second step\")\n\t})\n}\n\nfunc TestBreakpointConfusionOnResume(t *testing.T) {\n\t// Checks that SetCurrentBreakpoint, (*Thread).StepInstruction and\n\t// native.(*Thread).singleStep all agree on which breakpoint the thread is\n\t// stopped at.\n\t// This test checks for a regression introduced when fixing Issue #1656\n\twithTestProcess(\"nopbreakpoint/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tmaindots := filepath.ToSlash(filepath.Join(fixture.BuildDir, \"main.s\"))\n\t\tmaindotgo := filepath.ToSlash(filepath.Join(fixture.BuildDir, \"main.go\"))\n\t\tsetFileBreakpoint(p, t, maindots, 5) // line immediately after the NOP\n\t\tassertNoError(grp.Continue(), t, \"First Continue\")\n\t\tassertLineNumber(p, t, 5, \"not on main.s:5\")\n\t\tsetFileBreakpoint(p, t, maindots, 4)   // sets a breakpoint on the NOP line, which will be one byte before the breakpoint we currently are stopped at.\n\t\tsetFileBreakpoint(p, t, maindotgo, 18) // set one extra breakpoint so that we can recover execution and check the global variable g\n\t\tassertNoError(grp.Continue(), t, \"Second Continue\")\n\t\tgvar := evalVariable(p, t, \"g\")\n\t\tif n, _ := constant.Int64Val(gvar.Value); n != 1 {\n\t\t\tt.Fatalf(\"wrong value of global variable 'g': %v (expected 1)\", gvar.Value)\n\t\t}\n\t})\n}\n\nfunc TestCallInjectionFlagCorruption(t *testing.T) {\n\t// debugCallV2 has a bug in amd64 where its tail corrupts the FLAGS register by running an ADD instruction.\n\t// Since this problem exists in many versions of Go, instead of fixing\n\t// debugCallV2, we work around this problem by restoring FLAGS, one extra\n\t// time, after stepping out of debugCallV2.\n\t// Fixes issue https://github.com/go-delve/delve/issues/2985\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\n\twithTestProcessArgs(\"badflags\", t, \".\", []string{\"0\"}, 0, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tmainfn := p.BinInfo().LookupFunc()[\"main.main\"][0]\n\n\t\t// Find JNZ instruction on line :14\n\t\tvar addr uint64\n\t\ttext, err := proc.Disassemble(p.Memory(), nil, p.Breakpoints(), p.BinInfo(), mainfn.Entry, mainfn.End)\n\t\tassertNoError(err, t, \"Disassemble\")\n\t\tfor _, instr := range text {\n\t\t\tif instr.Loc.Line != 14 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif proc.IsJNZ(instr.Inst) {\n\t\t\t\taddr = instr.Loc.PC\n\t\t\t}\n\t\t}\n\t\tif addr == 0 {\n\t\t\tt.Fatalf(\"Could not find JNZ instruction at line :14\")\n\t\t}\n\n\t\t// Create breakpoint\n\t\t_, err = p.SetBreakpoint(0, addr, proc.UserBreakpoint, nil)\n\t\tassertNoError(err, t, \"SetBreakpoint\")\n\n\t\t// Continue to breakpoint\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertLineNumber(p, t, 14, \"expected line :14\")\n\n\t\t// Save RFLAGS register\n\t\trflagsBeforeCall := p.BinInfo().Arch.RegistersToDwarfRegisters(0, getRegisters(p, t)).Uint64Val(regnum.AMD64_Rflags)\n\t\tt.Logf(\"rflags before = %#x\", rflagsBeforeCall)\n\n\t\t// Inject call to main.g()\n\t\tassertNoError(proc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), \"g()\", normalLoadConfig, true), t, \"Call\")\n\n\t\t// Check RFLAGS register after the call\n\t\trflagsAfterCall := p.BinInfo().Arch.RegistersToDwarfRegisters(0, getRegisters(p, t)).Uint64Val(regnum.AMD64_Rflags)\n\t\tt.Logf(\"rflags after = %#x\", rflagsAfterCall)\n\n\t\tif rflagsBeforeCall != rflagsAfterCall {\n\t\t\tt.Errorf(\"mismatched rflags value\")\n\t\t}\n\n\t\t// Single step and check where we end up\n\t\tassertNoError(grp.Step(), t, \"Step()\")\n\t\tassertLineNumber(p, t, 17, \"expected line :17\") // since we passed \"0\" as argument we should be going into the false branch at line :17\n\t})\n}\n"
  },
  {
    "path": "pkg/proc/proc_darwin_amd64_test.go",
    "content": "package proc_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nfunc TestSetYMMRegister(t *testing.T) {\n\t// Checks that setting a XMM register works. This checks that the\n\t// workaround for a bug in debugserver works.\n\t// See issue #2767.\n\twithTestProcess(\"setymmreg/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.asmFunc\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tgetReg := func(pos string) *op.DwarfRegister {\n\t\t\tregs := getRegisters(p, t)\n\n\t\t\tarch := p.BinInfo().Arch\n\t\t\tdregs := arch.RegistersToDwarfRegisters(0, regs)\n\n\t\t\tr := dregs.Reg(regnum.AMD64_XMM0)\n\t\t\tt.Logf(\"%s: %#v\", pos, r)\n\t\t\treturn r\n\t\t}\n\n\t\tgetReg(\"before\")\n\n\t\tp.CurrentThread().SetReg(regnum.AMD64_XMM0, op.DwarfRegisterFromBytes([]byte{\n\t\t\t0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,\n\t\t\t0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,\n\t\t\t0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,\n\t\t\t0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44}))\n\t\tassertNoError(grp.StepInstruction(false), t, \"StepInstruction\")\n\n\t\txmm0 := getReg(\"after\")\n\n\t\tfor i := range xmm0.Bytes {\n\t\t\tif xmm0.Bytes[i] != 0x44 {\n\t\t\t\tt.Fatalf(\"wrong register value\")\n\t\t\t}\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "pkg/proc/proc_darwin_test.go",
    "content": "package proc_test\n\nimport (\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nfunc TestStacktraceExtlinkMac(t *testing.T) {\n\t// Tests stacktrace for programs built using external linker.\n\t// See issue #3194\n\tskipOn(t, \"broken on darwin/amd64/pie\", \"darwin\", \"amd64\", \"pie\")\n\twithTestProcess(\"issue3194\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"First Continue()\")\n\t\tframes, err := proc.ThreadStacktrace(p, p.CurrentThread(), 10)\n\t\tassertNoError(err, t, \"ThreadStacktrace\")\n\t\tlogStacktrace(t, p, frames)\n\t\tif len(frames) < 2 || frames[0].Call.Fn.Name != \"main.main\" || frames[1].Call.Fn.Name != \"runtime.main\" {\n\t\t\tt.Fatalf(\"bad stacktrace\")\n\t\t}\n\t})\n}\n\nfunc TestRefreshCurThreadSelGAfterContinueOnceError(t *testing.T) {\n\t// Issue #2078:\n\t// Tests that on macOS/lldb the current thread/selected goroutine are\n\t// refreshed after ContinueOnce returns an error due to a segmentation\n\t// fault.\n\n\tskipUnlessOn(t, \"N/A\", \"lldb\")\n\n\twithTestProcess(\"issue2078\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 4)\n\t\tassertNoError(grp.Continue(), t, \"Continue() (first)\")\n\t\tif grp.Continue() == nil {\n\t\t\tpc := currentPC(p, t)\n\t\t\tf, l, fn := p.BinInfo().PCToLine(pc)\n\t\t\tt.Logf(\"Second continue did not return an error %s:%d %#v\", f, l, fn)\n\t\t\tif fn != nil && fn.Name == \"runtime.fatalpanic\" {\n\t\t\t\t// this is also ok, it just means this debugserver supports --unmask-signals and it's working as intended.\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tg := p.SelectedGoroutine()\n\t\tif g.CurrentLoc.Line != 9 {\n\t\t\tt.Fatalf(\"wrong current location %s:%d (expected :9)\", g.CurrentLoc.File, g.CurrentLoc.Line)\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "pkg/proc/proc_general_test.go",
    "content": "package proc\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"testing\"\n\t\"unsafe\"\n\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nfunc ptrSizeByRuntimeArch() int {\n\treturn int(unsafe.Sizeof(uintptr(0)))\n}\n\nfunc TestIssue554(t *testing.T) {\n\t// unsigned integer overflow in proc.(*memCache).contains was\n\t// causing it to always return true for address 0xffffffffffffffff\n\tmem := memCache{true, 0x20, make([]byte, 100), nil}\n\tvar addr uint64\n\tswitch ptrSizeByRuntimeArch() {\n\tcase 4:\n\t\taddr = 0xffffffff\n\tcase 8:\n\t\taddr = 0xffffffffffffffff\n\t}\n\tif mem.contains(addr, 40) {\n\t\tt.Fatalf(\"should be false\")\n\t}\n}\n\nfunc TestIssue3760(t *testing.T) {\n\t// unsigned integer overflow if len(m.cache) < size\n\tmem := memCache{true, 0x20, make([]byte, 100), nil}\n\tif mem.contains(0x20, 200) {\n\t\tt.Fatalf(\"should be false\")\n\t}\n\t// test overflow of end addr\n\tmem = memCache{true, 0xfffffffffffffff0, make([]byte, 15), nil}\n\tif !mem.contains(0xfffffffffffffff0, 15) {\n\t\tt.Fatalf(\"should contain it\")\n\t}\n\tif mem.contains(0xfffffffffffffff0, 16) {\n\t\tt.Fatalf(\"should be false\")\n\t}\n\tcm := cacheMemory(nil, 0xffffffffffffffff, 1)\n\tif cm != nil {\n\t\tt.Fatalf(\"should be nil\")\n\t}\n}\n\ntype dummyMem struct {\n\tt     *testing.T\n\tmem   []byte\n\tbase  uint64\n\treads []memRead\n}\n\ntype memRead struct {\n\taddr uint64\n\tsize int\n}\n\nfunc (dm *dummyMem) ReadMemory(buf []byte, addr uint64) (int, error) {\n\tdm.t.Logf(\"read addr=%#x size=%#x\\n\", addr, len(buf))\n\tdm.reads = append(dm.reads, memRead{addr, len(buf)})\n\ta := int64(addr) - int64(dm.base)\n\tif a < 0 {\n\t\tpanic(\"reading below base\")\n\t}\n\tif int(a)+len(buf) > len(dm.mem) {\n\t\tpanic(\"reading beyond end of mem\")\n\t}\n\tcopy(buf, dm.mem[a:])\n\treturn len(buf), nil\n}\n\nfunc (dm *dummyMem) WriteMemory(uint64, []byte) (int, error) {\n\tpanic(\"not supported\")\n}\n\nfunc TestReadCStringValue(t *testing.T) {\n\tconst tgt = \"a test string\"\n\tconst maxstrlen = 64\n\n\tdm := &dummyMem{t: t}\n\tdm.mem = make([]byte, maxstrlen)\n\tcopy(dm.mem, tgt)\n\n\tfor _, tc := range []struct {\n\t\tbase     uint64\n\t\tnumreads int\n\t}{\n\t\t{0x5000, 1},\n\t\t{0x5001, 1},\n\t\t{0x4fff, 2},\n\t\t{uint64(0x5000 - len(tgt) - 1), 1},\n\t\t{uint64(0x5000-len(tgt)-1) + 1, 2},\n\t} {\n\t\tt.Logf(\"base is %#x\\n\", tc.base)\n\t\tdm.base = tc.base\n\t\tdm.reads = dm.reads[:0]\n\t\tout, done, err := readCStringValue(dm, tc.base, LoadConfig{MaxStringLen: maxstrlen})\n\t\tif err != nil {\n\t\t\tt.Errorf(\"base=%#x readCStringValue: %v\", tc.base, err)\n\t\t}\n\t\tif !done {\n\t\t\tt.Errorf(\"base=%#x expected done but wasn't\", tc.base)\n\t\t}\n\t\tif out != tgt {\n\t\t\tt.Errorf(\"base=%#x got %q expected %q\", tc.base, out, tgt)\n\t\t}\n\t\tif len(dm.reads) != tc.numreads {\n\t\t\tt.Errorf(\"base=%#x wrong number of reads %d (expected %d)\", tc.base, len(dm.reads), tc.numreads)\n\t\t}\n\t\tif tc.base == 0x4fff && dm.reads[0].size != 1 {\n\t\t\tt.Errorf(\"base=%#x first read in not of one byte\", tc.base)\n\t\t}\n\t}\n}\n\nfunc assertNoError(err error, t testing.TB, s string) {\n\tif err != nil {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\tfname := filepath.Base(file)\n\t\tt.Fatalf(\"failed assertion at %s:%d: %s - %s\\n\", fname, line, s, err)\n\t}\n}\n\nfunc TestDwarfVersion(t *testing.T) {\n\t// Tests that we correctly read the version of compilation units\n\tfixture := protest.BuildFixture(t, \"math\", 0)\n\tbi := NewBinaryInfo(runtime.GOOS, runtime.GOARCH)\n\t// Use a fake entry point so LoadBinaryInfo does not error in case the binary is PIE.\n\tconst fakeEntryPoint = 1\n\tassertNoError(bi.LoadBinaryInfo(fixture.Path, fakeEntryPoint, nil), t, \"LoadBinaryInfo\")\n\tfor _, cu := range bi.Images[0].compileUnits {\n\t\tif cu.Version != 4 && cu.Version != 5 {\n\t\t\tt.Errorf(\"compile unit %q at %#x has bad version %d\", cu.name, cu.entry.Offset, cu.Version)\n\t\t}\n\t}\n}\n\nfunc TestRegabiFlagSentinel(t *testing.T) {\n\t// Detect if the regabi flag in the producer string gets removed\n\tif !protest.RegabiSupported() {\n\t\tt.Skip(\"irrelevant before Go 1.17 or on non-amd64 architectures\")\n\t}\n\tfixture := protest.BuildFixture(t, \"math\", 0)\n\tbi := NewBinaryInfo(runtime.GOOS, runtime.GOARCH)\n\t// Use a fake entry point so LoadBinaryInfo does not error in case the binary is PIE.\n\tconst fakeEntryPoint = 1\n\tassertNoError(bi.LoadBinaryInfo(fixture.Path, fakeEntryPoint, nil), t, \"LoadBinaryInfo\")\n\tif !bi.regabi {\n\t\tt.Errorf(\"regabi flag not set %s GOEXPERIMENT=%s\", runtime.Version(), os.Getenv(\"GOEXPERIMENT\"))\n\t}\n}\n\nfunc TestGenericFunctionParser(t *testing.T) {\n\t// Normal parsing\n\n\tvar testCases = []struct{ name, pkg, rcv, base string }{\n\t\t{\"github.com/go-delve/delve.afunc\", \"github.com/go-delve/delve\", \"\", \"afunc\"},\n\t\t{\"github.com/go-delve/delve..afunc\", \"github.com/go-delve/delve\", \"\", \"afunc\"}, // malformed\n\t\t{\"github.com/go-delve/delve.afunc[some/[thing].el se]\", \"github.com/go-delve/delve\", \"\", \"afunc[some/[thing].el se]\"},\n\t\t{\"github.com/go-delve/delve.Receiver.afunc\", \"github.com/go-delve/delve\", \"Receiver\", \"afunc\"},\n\t\t{\"github.com/go-delve/delve.(*Receiver).afunc\", \"github.com/go-delve/delve\", \"(*Receiver)\", \"afunc\"},\n\t\t{\"github.com/go-delve/delve.Receiver.afunc[some/[thing].el se]\", \"github.com/go-delve/delve\", \"Receiver\", \"afunc[some/[thing].el se]\"},       // malformed\n\t\t{\"github.com/go-delve/delve.(*Receiver).afunc[some/[thing].el se]\", \"github.com/go-delve/delve\", \"(*Receiver)\", \"afunc[some/[thing].el se]\"}, // malformed\n\t\t{\"github.com/go-delve/delve.Receiver[some/[thing].el se].afunc\", \"github.com/go-delve/delve\", \"Receiver[some/[thing].el se]\", \"afunc\"},\n\t\t{\"github.com/go-delve/delve.(*Receiver[some/[thing].el se]).afunc\", \"github.com/go-delve/delve\", \"(*Receiver[some/[thing].el se])\", \"afunc\"},\n\n\t\t{\"github.com/go-delve/delve.afunc[.some/[thing].el se]\", \"github.com/go-delve/delve\", \"\", \"afunc[.some/[thing].el se]\"},\n\t\t{\"github.com/go-delve/delve.Receiver.afunc[.some/[thing].el se]\", \"github.com/go-delve/delve\", \"Receiver\", \"afunc[.some/[thing].el se]\"}, // malformed\n\t\t{\"github.com/go-delve/delve.Receiver[.some/[thing].el se].afunc\", \"github.com/go-delve/delve\", \"Receiver[.some/[thing].el se]\", \"afunc\"},\n\t\t{\"github.com/go-delve/delve.(*Receiver[.some/[thing].el se]).afunc\", \"github.com/go-delve/delve\", \"(*Receiver[.some/[thing].el se])\", \"afunc\"},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tfn := &Function{Name: tc.name}\n\t\tif fn.PackageName() != tc.pkg {\n\t\t\tt.Errorf(\"Package name mismatch: %q %q\", tc.pkg, fn.PackageName())\n\t\t}\n\t\tif fn.ReceiverName() != tc.rcv {\n\t\t\tt.Errorf(\"Receiver name mismatch: %q %q\", tc.rcv, fn.ReceiverName())\n\t\t}\n\t\tif fn.BaseName() != tc.base {\n\t\t\tt.Errorf(\"Base name mismatch: %q %q\", tc.base, fn.BaseName())\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/proc_linux_test.go",
    "content": "package proc_test\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/native\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nfunc mustHaveObjcopy(t *testing.T) {\n\tt.Helper()\n\tif objcopyPath, _ := exec.LookPath(\"objcopy\"); objcopyPath == \"\" {\n\t\tt.Skip(\"no objcopy in path\")\n\t}\n}\n\nfunc TestLoadingExternalDebugInfo(t *testing.T) {\n\tmustHaveObjcopy(t)\n\tfixture := protest.BuildFixture(t, \"locationsprog\", 0)\n\tdefer os.Remove(fixture.Path)\n\tstripAndCopyDebugInfo(fixture, t)\n\tp, err := native.Launch(append([]string{fixture.Path}, \"\"), \"\", 0, []string{filepath.Dir(fixture.Path)}, \"\", \"\", proc.OutputRedirect{}, proc.OutputRedirect{})\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tp.Detach(true)\n}\n\nfunc TestGnuDebuglink(t *testing.T) {\n\tmustHaveObjcopy(t)\n\t// build math.go and make a copy of the executable\n\tfixture := protest.BuildFixture(t, \"math\", 0)\n\tbuf, err := os.ReadFile(fixture.Path)\n\tassertNoError(err, t, \"ReadFile\")\n\tdebuglinkPath := fixture.Path + \"-gnu_debuglink\"\n\tassertNoError(os.WriteFile(debuglinkPath, buf, 0666), t, \"WriteFile\")\n\tdefer os.Remove(debuglinkPath)\n\n\trun := func(exe string, args ...string) {\n\t\tcmd := exec.Command(exe, args...)\n\t\tout, err := cmd.CombinedOutput()\n\t\tassertNoError(err, t, fmt.Sprintf(\"%s %q: %s\", cmd, strings.Join(args, \" \"), out))\n\t}\n\n\t// convert the executable copy to use .gnu_debuglink\n\tdebuglinkDwoPath := debuglinkPath + \".dwo\"\n\trun(\"objcopy\", \"--only-keep-debug\", debuglinkPath, debuglinkDwoPath)\n\tdefer os.Remove(debuglinkDwoPath)\n\trun(\"objcopy\", \"--strip-debug\", debuglinkPath)\n\trun(\"objcopy\", \"--add-gnu-debuglink=\"+debuglinkDwoPath, debuglinkPath)\n\n\t// open original executable\n\tnormalBinInfo := proc.NewBinaryInfo(runtime.GOOS, runtime.GOARCH)\n\tassertNoError(normalBinInfo.LoadBinaryInfo(fixture.Path, 0, []string{\"/debugdir\"}), t, \"LoadBinaryInfo (normal exe)\")\n\n\t// open .gnu_debuglink executable\n\tdebuglinkBinInfo := proc.NewBinaryInfo(runtime.GOOS, runtime.GOARCH)\n\tassertNoError(debuglinkBinInfo.LoadBinaryInfo(debuglinkPath, 0, []string{\"/debugdir\"}), t, \"LoadBinaryInfo (gnu_debuglink exe)\")\n\n\tif len(normalBinInfo.Functions) != len(debuglinkBinInfo.Functions) {\n\t\tt.Fatalf(\"function list mismatch\")\n\t}\n\n\tfor i := range normalBinInfo.Functions {\n\t\tnormalFn := normalBinInfo.Functions[i]\n\t\tdebuglinkFn := debuglinkBinInfo.Functions[i]\n\t\tif normalFn.Entry != debuglinkFn.Entry || normalFn.Name != debuglinkFn.Name {\n\t\t\tt.Fatalf(\"function definition mismatch\")\n\t\t}\n\t}\n}\n\nfunc stripAndCopyDebugInfo(f protest.Fixture, t *testing.T) {\n\tname := filepath.Base(f.Path)\n\t// Copy the debug information to an external file.\n\tcopyCmd := exec.Command(\"objcopy\", \"--only-keep-debug\", name, name+\".debug\")\n\tcopyCmd.Dir = filepath.Dir(f.Path)\n\tif err := copyCmd.Run(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tprotest.AddPathToRemove(f.Path + \".debug\")\n\n\t// Strip the original binary of the debug information.\n\tstripCmd := exec.Command(\"strip\", \"--strip-debug\", \"--strip-unneeded\", name)\n\tstripCmd.Dir = filepath.Dir(f.Path)\n\tif err := stripCmd.Run(); err != nil {\n\t\tt.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/proc_test.go",
    "content": "package proc_test\n\nimport (\n\t\"bytes\"\n\t\"debug/buildinfo\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"flag\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/constant\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"io\"\n\t\"math/rand\"\n\t\"net\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"slices\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"text/tabwriter\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/core\"\n\t\"github.com/go-delve/delve/pkg/proc/gdbserial\"\n\t\"github.com/go-delve/delve/pkg/proc/native\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\nvar normalLoadConfig = proc.LoadConfig{true, 1, 64, 64, -1, 0}\nvar testBackend, buildMode string\n\nfunc init() {\n\truntime.GOMAXPROCS(4)\n\tos.Setenv(\"GOMAXPROCS\", \"4\")\n}\n\nfunc TestMain(m *testing.M) {\n\tflag.StringVar(&testBackend, \"backend\", \"\", \"selects backend\")\n\tflag.StringVar(&buildMode, \"test-buildmode\", \"\", \"selects build mode\")\n\tvar logConf string\n\tflag.StringVar(&logConf, \"log\", \"\", \"configures logging\")\n\tflag.Parse()\n\tprotest.DefaultTestBackend(&testBackend)\n\tif buildMode != \"\" && buildMode != \"pie\" {\n\t\tfmt.Fprintf(os.Stderr, \"unknown build mode %q\", buildMode)\n\t\tos.Exit(1)\n\t}\n\tlogflags.Setup(logConf != \"\", logConf, \"\")\n\tprotest.RunTestsWithFixtures(m)\n}\n\nfunc matchSkipConditions(conditions ...string) bool {\n\tfor _, cond := range conditions {\n\t\tif !slices.Contains([]string{runtime.GOOS, runtime.GOARCH, testBackend, buildMode}, cond) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc skipOn(t testing.TB, reason string, conditions ...string) {\n\tif matchSkipConditions(conditions...) {\n\t\tt.Skipf(\"skipped on %s: %s\", strings.Join(conditions, \"/\"), reason)\n\t}\n}\n\nfunc skipUnlessOn(t testing.TB, reason string, conditions ...string) {\n\tif !matchSkipConditions(conditions...) {\n\t\tt.Skipf(\"skipped on %s: %s\", strings.Join(conditions, \"/\"), reason)\n\t}\n}\n\nfunc withTestProcess(name string, t testing.TB, fn func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture)) {\n\twithTestProcessArgs(name, t, \".\", []string{}, 0, fn)\n}\n\nfunc withTestProcessArgs(name string, t testing.TB, wd string, args []string, buildFlags protest.BuildFlags, fn func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture)) {\n\tt.Helper()\n\tif buildMode == \"pie\" {\n\t\tbuildFlags |= protest.BuildModePIE\n\t}\n\tfixture := protest.BuildFixture(t, name, buildFlags)\n\n\tgrp := startTestProcessArgs(fixture, t, wd, args)\n\n\tdefer func() {\n\t\tgrp.Detach(true)\n\t}()\n\n\tfn(grp.Selected, grp, fixture)\n}\n\nfunc startTestProcessArgs(fixture protest.Fixture, t testing.TB, wd string, args []string) *proc.TargetGroup {\n\tvar grp *proc.TargetGroup\n\tvar err error\n\tvar tracedir string\n\n\tswitch testBackend {\n\tcase \"native\":\n\t\tgrp, err = native.Launch(append([]string{fixture.Path}, args...), wd, 0, []string{}, \"\", \"\", proc.OutputRedirect{}, proc.OutputRedirect{})\n\tcase \"lldb\":\n\t\tgrp, err = gdbserial.LLDBLaunch(append([]string{fixture.Path}, args...), wd, 0, []string{}, \"\", [3]string{})\n\tcase \"rr\":\n\t\tprotest.MustHaveRecordingAllowed(t)\n\t\tt.Log(\"recording\")\n\t\tgrp, tracedir, err = gdbserial.RecordAndReplay(append([]string{fixture.Path}, args...), wd, true, true, []string{}, \"\", proc.OutputRedirect{}, proc.OutputRedirect{})\n\t\tt.Logf(\"replaying %q\", tracedir)\n\tdefault:\n\t\tt.Fatal(\"unknown backend\")\n\t}\n\tif err != nil {\n\t\tt.Fatal(\"Launch():\", err)\n\t}\n\treturn grp\n}\n\nfunc getRegisters(p *proc.Target, t *testing.T) proc.Registers {\n\tregs, err := p.CurrentThread().Registers()\n\tif err != nil {\n\t\tt.Fatal(\"Registers():\", err)\n\t}\n\n\treturn regs\n}\n\nfunc dataAtAddr(thread proc.MemoryReadWriter, addr uint64) ([]byte, error) {\n\tdata := make([]byte, 1)\n\t_, err := thread.ReadMemory(data, addr)\n\treturn data, err\n}\n\nfunc assertNoError(err error, t testing.TB, s string) {\n\tt.Helper()\n\tif err != nil {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\tfname := filepath.Base(file)\n\t\tt.Fatalf(\"failed assertion at %s:%d: %s - %s\\n\", fname, line, s, err)\n\t}\n}\n\nfunc currentPC(p *proc.Target, t *testing.T) uint64 {\n\tregs, err := p.CurrentThread().Registers()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\treturn regs.PC()\n}\n\nfunc currentLineNumber(p *proc.Target, t *testing.T) (string, int) {\n\tpc := currentPC(p, t)\n\tf, l, _ := p.BinInfo().PCToLine(pc)\n\treturn f, l\n}\n\nfunc assertLineNumber(p *proc.Target, t *testing.T, lineno int, descr string) (string, int) {\n\tf, l := currentLineNumber(p, t)\n\tif l != lineno {\n\t\t_, callerFile, callerLine, _ := runtime.Caller(1)\n\t\tt.Fatalf(\"%s expected line :%d got %s:%d\\n\\tat %s:%d\", descr, lineno, f, l, callerFile, callerLine)\n\t}\n\treturn f, l\n}\n\nfunc assertLineNumberIn(p *proc.Target, t *testing.T, linenos []int, descr string) (string, int) {\n\tf, l := currentLineNumber(p, t)\n\tif !slices.Contains(linenos, l) {\n\t\t_, callerFile, callerLine, _ := runtime.Caller(1)\n\t\tt.Fatalf(\"%s expected lines :%#v got %s:%d\\n\\tat %s:%d\", descr, linenos, f, l, callerFile, callerLine)\n\t}\n\treturn f, l\n}\n\nfunc assertFunctionName(p *proc.Target, t *testing.T, fnname string, descr string) {\n\tpc := currentPC(p, t)\n\tf, l, fn := p.BinInfo().PCToLine(pc)\n\tif fn == nil {\n\t\tt.Fatalf(\"%s expected function %s got %s:%d\", descr, fnname, f, l)\n\t}\n\tif fn.Name != fnname {\n\t\tt.Fatalf(\"%s expected function %s got %s %s:%d\", descr, fnname, fn.Name, f, l)\n\t}\n}\n\nfunc TestExit(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"continuetestprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tpe, ok := err.(proc.ErrProcessExited)\n\t\tif !ok {\n\t\t\tt.Fatalf(\"Continue() returned unexpected error type %s\", err)\n\t\t}\n\t\tif pe.Status != 0 {\n\t\t\tt.Errorf(\"Unexpected error status: %d\", pe.Status)\n\t\t}\n\t\tif pe.Pid != p.Pid() {\n\t\t\tt.Errorf(\"Unexpected process id: %d\", pe.Pid)\n\t\t}\n\t})\n}\n\nfunc TestExitAfterContinue(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"continuetestprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.sayhi\")\n\t\tassertNoError(grp.Continue(), t, \"First Continue()\")\n\t\terr := grp.Continue()\n\t\tpe, ok := err.(proc.ErrProcessExited)\n\t\tif !ok {\n\t\t\tt.Fatalf(\"Continue() returned unexpected error type %s\", pe)\n\t\t}\n\t\tif pe.Status != 0 {\n\t\t\tt.Errorf(\"Unexpected error status: %d\", pe.Status)\n\t\t}\n\t\tif pe.Pid != p.Pid() {\n\t\t\tt.Errorf(\"Unexpected process id: %d\", pe.Pid)\n\t\t}\n\t})\n}\n\nfunc setFunctionBreakpoint(p *proc.Target, t testing.TB, fname string) *proc.Breakpoint {\n\tt.Helper()\n\taddrs, err := proc.FindFunctionLocation(p, fname, 0)\n\tif err != nil {\n\t\tt.Fatalf(\"FindFunctionLocation(%s): %v\", fname, err)\n\t}\n\tif len(addrs) != 1 {\n\t\tt.Fatalf(\"setFunctionBreakpoint(%s): too many results %v\", fname, addrs)\n\t}\n\tbp, err := p.SetBreakpoint(int(addrs[0]), addrs[0], proc.UserBreakpoint, nil)\n\tif err != nil {\n\t\tt.Fatalf(\"FindFunctionLocation(%s): %v\", fname, err)\n\t}\n\tbp.Logical.Set.FunctionName = fname\n\treturn bp\n}\n\nfunc setFunctionBreakpointAll(p *proc.Target, t testing.TB, fname string) {\n\tt.Helper()\n\taddrs, err := proc.FindFunctionLocation(p, fname, 0)\n\tif err != nil {\n\t\tt.Fatalf(\"FindFunctionLocation(%s): %v\", fname, err)\n\t}\n\tfor _, addr := range addrs {\n\t\t_, err := p.SetBreakpoint(int(addr), addr, proc.UserBreakpoint, nil)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"FindFunctionLocation(%s): %v\", fname, err)\n\t\t}\n\t}\n}\n\nfunc setFileBreakpoint(p *proc.Target, t testing.TB, path string, lineno int) *proc.Breakpoint {\n\t_, f, l, _ := runtime.Caller(1)\n\tf = filepath.Base(f)\n\n\taddrs, err := proc.FindFileLocation(p, path, lineno)\n\tif err != nil {\n\t\tt.Fatalf(\"%s:%d: FindFileLocation(%s, %d): %v\", f, l, path, lineno, err)\n\t}\n\tif len(addrs) != 1 {\n\t\tt.Fatalf(\"%s:%d: setFileLineBreakpoint(%s, %d): too many (or not enough) results %v\", f, l, path, lineno, addrs)\n\t}\n\tbp, err := p.SetBreakpoint(int(addrs[0]), addrs[0], proc.UserBreakpoint, nil)\n\tif err != nil {\n\t\tt.Fatalf(\"%s:%d: SetBreakpoint: %v\", f, l, err)\n\t}\n\treturn bp\n}\n\nfunc findFunctionLocation(p *proc.Target, t *testing.T, fnname string) uint64 {\n\t_, f, l, _ := runtime.Caller(1)\n\tf = filepath.Base(f)\n\taddrs, err := proc.FindFunctionLocation(p, fnname, 0)\n\tif err != nil {\n\t\tt.Fatalf(\"%s:%d: FindFunctionLocation(%s): %v\", f, l, fnname, err)\n\t}\n\tif len(addrs) != 1 {\n\t\tt.Fatalf(\"%s:%d: FindFunctionLocation(%s): too many results %v\", f, l, fnname, addrs)\n\t}\n\treturn addrs[0]\n}\n\nfunc findFileLocation(p *proc.Target, t *testing.T, file string, lineno int) uint64 {\n\t_, f, l, _ := runtime.Caller(1)\n\tf = filepath.Base(f)\n\taddrs, err := proc.FindFileLocation(p, file, lineno)\n\tif err != nil {\n\t\tt.Fatalf(\"%s:%d: FindFileLocation(%s, %d): %v\", f, l, file, lineno, err)\n\t}\n\tif len(addrs) != 1 {\n\t\tt.Fatalf(\"%s:%d: FindFileLocation(%s, %d): too many results %v\", f, l, file, lineno, addrs)\n\t}\n\treturn addrs[0]\n}\n\nfunc TestHalt(t *testing.T) {\n\tstopChan := make(chan any, 1)\n\twithTestProcess(\"loopprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.loop\")\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tresumeChan := make(chan struct{}, 1)\n\t\tgo func() {\n\t\t\t<-resumeChan\n\t\t\ttime.Sleep(100 * time.Millisecond)\n\t\t\tstopChan <- grp.RequestManualStop()\n\t\t}()\n\t\tgrp.ResumeNotify(resumeChan)\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tretVal := <-stopChan\n\n\t\tif err, ok := retVal.(error); ok && err != nil {\n\t\t\tt.Fatal()\n\t\t}\n\t})\n}\n\nfunc TestStepInstruction(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.helloworld\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tregs := getRegisters(p, t)\n\t\trip := regs.PC()\n\n\t\terr := grp.StepInstruction(false)\n\t\tassertNoError(err, t, \"Step()\")\n\n\t\tregs = getRegisters(p, t)\n\t\tif rip >= regs.PC() {\n\t\t\tt.Errorf(\"Expected %#v to be greater than %#v\", regs.PC(), rip)\n\t\t}\n\t})\n}\n\nfunc TestNextInstruction(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 19)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\terr := grp.StepInstruction(true)\n\t\tassertNoError(err, t, \"Step()\")\n\n\t\tassertLineNumber(p, t, 20, \"next-instruction did not step over call\")\n\t})\n}\n\nfunc TestBreakpoint(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"main.helloworld\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tregs, err := p.CurrentThread().Registers()\n\t\tassertNoError(err, t, \"Registers\")\n\t\tpc := regs.PC()\n\n\t\tif bp.Logical.TotalHitCount != 1 {\n\t\t\tt.Fatalf(\"Breakpoint should be hit once, got %d\\n\", bp.Logical.TotalHitCount)\n\t\t}\n\n\t\tif pc-1 != bp.Addr && pc != bp.Addr {\n\t\t\tf, l, _ := p.BinInfo().PCToLine(pc)\n\t\t\tt.Fatalf(\"Break not respected:\\nPC:%#v %s:%d\\nFN:%#v \\n\", pc, f, l, bp.Addr)\n\t\t}\n\t})\n}\n\nfunc TestBreakpointInSeparateGoRoutine(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testthreads\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.anotherthread\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\n\t\tregs, err := p.CurrentThread().Registers()\n\t\tassertNoError(err, t, \"Registers\")\n\t\tpc := regs.PC()\n\n\t\tf, l, _ := p.BinInfo().PCToLine(pc)\n\t\tif f != \"testthreads.go\" && l != 8 {\n\t\t\tt.Fatal(\"Program did not hit breakpoint\")\n\t\t}\n\t})\n}\n\nfunc TestBreakpointWithNonExistentFunction(t *testing.T) {\n\twithTestProcess(\"testprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\t_, err := p.SetBreakpoint(0, 0, proc.UserBreakpoint, nil)\n\t\tif err == nil {\n\t\t\tt.Fatal(\"Should not be able to break at non existent function\")\n\t\t}\n\t})\n}\n\nfunc TestClearBreakpointBreakpoint(t *testing.T) {\n\twithTestProcess(\"testprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"main.sleepytime\")\n\n\t\terr := p.ClearBreakpoint(bp.Addr)\n\t\tassertNoError(err, t, \"ClearBreakpoint()\")\n\n\t\tdata, err := dataAtAddr(p.Memory(), bp.Addr)\n\t\tassertNoError(err, t, \"dataAtAddr\")\n\n\t\tint3 := []byte{0xcc}\n\t\tif bytes.Equal(data, int3) {\n\t\t\tt.Fatalf(\"Breakpoint was not cleared data: %#v, int3: %#v\", data, int3)\n\t\t}\n\n\t\tif countBreakpoints(p) != 0 {\n\t\t\tt.Fatal(\"Breakpoint not removed internally\")\n\t\t}\n\t})\n}\n\nfunc countBreakpoints(p *proc.Target) int {\n\tbpcount := 0\n\tfor _, bp := range p.Breakpoints().M {\n\t\tif bp.LogicalID() >= 0 {\n\t\t\tbpcount++\n\t\t}\n\t}\n\treturn bpcount\n}\n\nfunc TestNextConcurrent(t *testing.T) {\n\ttestcases := []nextTest{\n\t\t{8, 9},\n\t\t{9, 10},\n\t\t{10, 11},\n\t}\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"parallel_next\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"main.sayhi\")\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tf, ln := currentLineNumber(p, t)\n\t\tinitV := evalVariable(p, t, \"n\")\n\t\tinitVval, _ := constant.Int64Val(initV.Value)\n\t\terr := p.ClearBreakpoint(bp.Addr)\n\t\tassertNoError(err, t, \"ClearBreakpoint()\")\n\t\tfor _, tc := range testcases {\n\t\t\tg, err := proc.GetG(p.CurrentThread())\n\t\t\tassertNoError(err, t, \"GetG()\")\n\t\t\tif p.SelectedGoroutine().ID != g.ID {\n\t\t\t\tt.Fatalf(\"SelectedGoroutine not CurrentThread's goroutine: %d %d\", g.ID, p.SelectedGoroutine().ID)\n\t\t\t}\n\t\t\tif ln != tc.begin {\n\t\t\t\tt.Fatalf(\"Program not stopped at correct spot expected %d was %s:%d\", tc.begin, filepath.Base(f), ln)\n\t\t\t}\n\t\t\tassertNoError(grp.Next(), t, \"Next() returned an error\")\n\t\t\tf, ln = assertLineNumber(p, t, tc.end, \"Program did not continue to the expected location\")\n\t\t\tv := evalVariable(p, t, \"n\")\n\t\t\tvval, _ := constant.Int64Val(v.Value)\n\t\t\tif vval != initVval {\n\t\t\t\tt.Fatal(\"Did not end up on same goroutine\")\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestNextConcurrentVariant2(t *testing.T) {\n\t// Just like TestNextConcurrent but instead of removing the initial breakpoint we check that when it happens is for other goroutines\n\ttestcases := []nextTest{\n\t\t{8, 9},\n\t\t{9, 10},\n\t\t{10, 11},\n\t}\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"parallel_next\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.sayhi\")\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tf, ln := currentLineNumber(p, t)\n\t\tinitV := evalVariable(p, t, \"n\")\n\t\tinitVval, _ := constant.Int64Val(initV.Value)\n\t\tfor _, tc := range testcases {\n\t\t\tt.Logf(\"test case %v\", tc)\n\t\t\tg, err := proc.GetG(p.CurrentThread())\n\t\t\tassertNoError(err, t, \"GetG()\")\n\t\t\tif p.SelectedGoroutine().ID != g.ID {\n\t\t\t\tt.Fatalf(\"SelectedGoroutine not CurrentThread's goroutine: %d %d\", g.ID, p.SelectedGoroutine().ID)\n\t\t\t}\n\t\t\tif ln != tc.begin {\n\t\t\t\tt.Fatalf(\"Program not stopped at correct spot expected %d was %s:%d\", tc.begin, filepath.Base(f), ln)\n\t\t\t}\n\t\t\tassertNoError(grp.Next(), t, \"Next() returned an error\")\n\t\t\tvar vval int64\n\t\t\tfor {\n\t\t\t\tv := evalVariable(p, t, \"n\")\n\t\t\t\tfor _, thread := range p.ThreadList() {\n\t\t\t\t\tproc.GetG(thread)\n\t\t\t\t}\n\t\t\t\tvval, _ = constant.Int64Val(v.Value)\n\t\t\t\tif bpstate := p.CurrentThread().Breakpoint(); bpstate.Breakpoint == nil {\n\t\t\t\t\tif vval != initVval {\n\t\t\t\t\t\tt.Fatal(\"Did not end up on same goroutine\")\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t} else {\n\t\t\t\t\tif vval == initVval {\n\t\t\t\t\t\tt.Fatal(\"Initial breakpoint triggered twice for the same goroutine\")\n\t\t\t\t\t}\n\t\t\t\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\t\t\t\t}\n\t\t\t}\n\t\t\tf, ln = assertLineNumber(p, t, tc.end, \"Program did not continue to the expected location\")\n\t\t}\n\t})\n}\n\nfunc TestNextNetHTTP(t *testing.T) {\n\ttestcases := []nextTest{\n\t\t{14, 15},\n\t\t{15, 16},\n\t}\n\twithTestProcess(\"testnextnethttp\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tpid := p.Pid()\n\t\ttmpdir := os.TempDir()\n\t\tportFile := filepath.Join(tmpdir, fmt.Sprintf(\"testnextnethttp_port_%d\", pid))\n\n\t\tdefer os.Remove(portFile)\n\n\t\tgo func() {\n\t\t\t// Wait for program to write the port to file with timeout\n\t\t\tvar port int\n\t\t\tt0 := time.Now()\n\t\t\tfor {\n\t\t\t\tif data, err := os.ReadFile(portFile); err == nil {\n\t\t\t\t\tif parsedPort, err := strconv.Atoi(strings.TrimSpace(string(data))); err == nil {\n\t\t\t\t\t\tport = parsedPort\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttime.Sleep(50 * time.Millisecond)\n\t\t\t\tif time.Since(t0) > 10*time.Second {\n\t\t\t\t\tt.Errorf(\"timeout waiting for port file\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Wait for program to start listening with timeout\n\t\t\tt0 = time.Now()\n\t\t\tfor {\n\t\t\t\tconn, err := net.Dial(\"tcp\", fmt.Sprintf(\"127.0.0.1:%d\", port))\n\t\t\t\tif err == nil {\n\t\t\t\t\tconn.Close()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\ttime.Sleep(50 * time.Millisecond)\n\t\t\t\tif time.Since(t0) > 10*time.Second {\n\t\t\t\t\tt.Errorf(\"timeout waiting for server to start listening\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\tresp, err := http.Get(fmt.Sprintf(\"http://127.0.0.1:%d\", port))\n\t\t\tif err == nil {\n\t\t\t\tresp.Body.Close()\n\t\t\t}\n\t\t}()\n\t\tif err := grp.Continue(); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tf, ln := currentLineNumber(p, t)\n\t\tfor _, tc := range testcases {\n\t\t\tif ln != tc.begin {\n\t\t\t\tt.Fatalf(\"Program not stopped at correct spot expected %d was %s:%d\", tc.begin, filepath.Base(f), ln)\n\t\t\t}\n\n\t\t\tassertNoError(grp.Next(), t, \"Next() returned an error\")\n\n\t\t\tf, ln = assertLineNumber(p, t, tc.end, \"Program did not continue to correct next location\")\n\t\t}\n\t})\n}\n\nfunc TestRuntimeBreakpoint(t *testing.T) {\n\twithTestProcess(\"testruntimebreakpoint\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tregs, err := p.CurrentThread().Registers()\n\t\tassertNoError(err, t, \"Registers\")\n\t\tpc := regs.PC()\n\t\tf, l, _ := p.BinInfo().PCToLine(pc)\n\t\tif l != 10 {\n\t\t\tt.Fatalf(\"did not respect breakpoint %s:%d\", f, l)\n\t\t}\n\t})\n}\n\nfunc returnAddress(tgt *proc.Target, thread proc.Thread) (uint64, error) {\n\tlocations, err := proc.ThreadStacktrace(tgt, thread, 2)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif len(locations) < 2 {\n\t\treturn 0, fmt.Errorf(\"no return address for function: %s\", locations[0].Current.Fn.BaseName())\n\t}\n\treturn locations[1].Current.PC, nil\n}\n\nfunc TestFindReturnAddress(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testnextprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 24)\n\t\terr := grp.Continue()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\taddr, err := returnAddress(p, p.CurrentThread())\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\t_, l, _ := p.BinInfo().PCToLine(addr)\n\t\tif l != 40 {\n\t\t\tt.Fatalf(\"return address not found correctly, expected line 40\")\n\t\t}\n\t})\n}\n\nfunc TestFindReturnAddressTopOfStackFn(t *testing.T) {\n\tskipOn(t, \"broken in linux ppc64le\", \"linux\", \"ppc64le\", \"native\")\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testreturnaddress\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tfnName := \"runtime.rt0_go\"\n\t\tsetFunctionBreakpoint(p, t, fnName)\n\t\tif err := grp.Continue(); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif _, err := returnAddress(p, p.CurrentThread()); err == nil {\n\t\t\tt.Fatal(\"expected error to be returned\")\n\t\t}\n\t})\n}\n\nfunc TestSwitchThread(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testnextprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\t// With invalid thread id\n\t\terr := p.SwitchThread(-1)\n\t\tif err == nil {\n\t\t\tt.Fatal(\"Expected error for invalid thread id\")\n\t\t}\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\terr = grp.Continue()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tvar nt int\n\t\tct := p.CurrentThread().ThreadID()\n\t\tfor _, thread := range p.ThreadList() {\n\t\t\tif thread.ThreadID() != ct {\n\t\t\t\tnt = thread.ThreadID()\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif nt == 0 {\n\t\t\tt.Fatal(\"could not find thread to switch to\")\n\t\t}\n\t\t// With valid thread id\n\t\terr = p.SwitchThread(nt)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif p.CurrentThread().ThreadID() != nt {\n\t\t\tt.Fatal(\"Did not switch threads\")\n\t\t}\n\t})\n}\n\nfunc TestCGONext(t *testing.T) {\n\t// Test if one can do 'next' in a cgo binary\n\t// On OSX with Go < 1.5 CGO is not supported due to: https://github.com/golang/go/issues/8973\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 5) {\n\t\tskipOn(t, \"upstream issue\", \"darwin\")\n\t}\n\tprotest.MustHaveCgo(t)\n\n\tskipOn(t, \"broken - see https://github.com/go-delve/delve/issues/3158\", \"darwin\", \"amd64\")\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"cgotest\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(grp.Next(), t, \"Next()\")\n\t})\n}\n\nfunc TestCGOBreakpointLocation(t *testing.T) {\n\tprotest.MustHaveCgo(t)\n\tprotest.AllowRecording(t)\n\n\twithTestProcess(\"cgotest\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"C.foo\")\n\t\tif !strings.Contains(bp.File, \"cgotest.go\") {\n\t\t\tt.Fatalf(\"incorrect breakpoint location, expected cgotest.go got %s\", bp.File)\n\t\t}\n\t})\n}\n\ntype loc struct {\n\tline int\n\tfn   string\n}\n\nfunc (l1 *loc) match(l2 proc.Stackframe) bool {\n\tif l1.line >= 0 {\n\t\tif l1.line != l2.Call.Line {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn l1.fn == l2.Call.Fn.Name\n}\n\nfunc TestStacktrace(t *testing.T) {\n\tstacks := [][]loc{\n\t\t{{4, \"main.stacktraceme\"}, {8, \"main.func1\"}, {16, \"main.main\"}},\n\t\t{{4, \"main.stacktraceme\"}, {8, \"main.func1\"}, {12, \"main.func2\"}, {17, \"main.main\"}},\n\t}\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"stacktraceprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"main.stacktraceme\")\n\n\t\tfor i := range stacks {\n\t\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\t\tlocations, err := proc.ThreadStacktrace(p, p.CurrentThread(), 40)\n\t\t\tassertNoError(err, t, \"Stacktrace()\")\n\n\t\t\tt.Logf(\"Stacktrace %d:\\n\", i)\n\t\t\tfor i := range locations {\n\t\t\t\tt.Logf(\"\\t%s (%#x) %s:%d\\n\", locations[i].Call.Fn.Name, locations[i].Call.PC, locations[i].Call.File, locations[i].Call.Line)\n\t\t\t}\n\n\t\t\tif len(locations) != len(stacks[i])+2 {\n\t\t\t\tt.Fatalf(\"Wrong stack trace size %d %d\\n\", len(locations), len(stacks[i])+2)\n\t\t\t}\n\n\t\t\tfor j := range stacks[i] {\n\t\t\t\tif !stacks[i][j].match(locations[j]) {\n\t\t\t\t\tt.Fatalf(\"Wrong stack trace pos %d\\n\", j)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tp.ClearBreakpoint(bp.Addr)\n\t\tgrp.Continue()\n\t})\n}\n\nfunc TestStacktrace2(t *testing.T) {\n\twithTestProcess(\"retstack\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tlocations, err := proc.ThreadStacktrace(p, p.CurrentThread(), 40)\n\t\tassertNoError(err, t, \"Stacktrace()\")\n\t\tif !stackMatch([]loc{{-1, \"main.f\"}, {16, \"main.main\"}}, locations, false) {\n\t\t\tfor i := range locations {\n\t\t\t\tt.Logf(\"\\t%s:%d [%s]\\n\", locations[i].Call.File, locations[i].Call.Line, locations[i].Call.Fn.Name)\n\t\t\t}\n\t\t\tt.Fatalf(\"Stack error at main.f()\\n%v\\n\", locations)\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tlocations, err = proc.ThreadStacktrace(p, p.CurrentThread(), 40)\n\t\tassertNoError(err, t, \"Stacktrace()\")\n\t\tif !stackMatch([]loc{{-1, \"main.g\"}, {17, \"main.main\"}}, locations, false) {\n\t\t\tfor i := range locations {\n\t\t\t\tt.Logf(\"\\t%s:%d [%s]\\n\", locations[i].Call.File, locations[i].Call.Line, locations[i].Call.Fn.Name)\n\t\t\t}\n\t\t\tt.Fatalf(\"Stack error at main.g()\\n%v\\n\", locations)\n\t\t}\n\t})\n}\n\nfunc stackMatch(stack []loc, locations []proc.Stackframe, skipRuntime bool) bool {\n\tif len(stack) > len(locations) {\n\t\treturn false\n\t}\n\ti := 0\n\tfor j := range locations {\n\t\tif i >= len(stack) {\n\t\t\tbreak\n\t\t}\n\t\tif skipRuntime {\n\t\t\tif locations[j].Call.Fn == nil || strings.HasPrefix(locations[j].Call.Fn.Name, \"runtime.\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif !stack[i].match(locations[j]) {\n\t\t\treturn false\n\t\t}\n\t\ti++\n\t}\n\treturn i >= len(stack)\n}\n\nfunc TestStacktraceGoroutine(t *testing.T) {\n\tmainStack := []loc{{14, \"main.stacktraceme\"}, {29, \"main.main\"}}\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 11) {\n\t\tmainStack[0].line = 15\n\t}\n\tagoroutineStacks := [][]loc{\n\t\t{{8, \"main.agoroutine\"}},\n\t\t{{9, \"main.agoroutine\"}},\n\t\t{{10, \"main.agoroutine\"}},\n\t}\n\n\tlenient := 0\n\tif runtime.GOOS == \"windows\" {\n\t\tlenient = 1\n\t}\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"goroutinestackprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"main.stacktraceme\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\tassertNoError(err, t, \"GoroutinesInfo\")\n\n\t\tagoroutineCount := 0\n\t\tmainCount := 0\n\n\t\tfor i, g := range gs {\n\t\t\tlocations, err := proc.GoroutineStacktrace(p, g, 40, 0)\n\t\t\tif err != nil {\n\t\t\t\t// On windows we do not have frame information for goroutines doing system calls.\n\t\t\t\tt.Logf(\"Could not retrieve goroutine stack for goid=%d: %v\", g.ID, err)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif stackMatch(mainStack, locations, false) {\n\t\t\t\tmainCount++\n\t\t\t}\n\n\t\t\tfound := false\n\t\t\tfor _, agoroutineStack := range agoroutineStacks {\n\t\t\t\tif stackMatch(agoroutineStack, locations, true) {\n\t\t\t\t\tfound = true\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif found {\n\t\t\t\tagoroutineCount++\n\t\t\t} else {\n\t\t\t\tt.Logf(\"Non-goroutine stack: %d (%d)\", i, len(locations))\n\t\t\t\tfor i := range locations {\n\t\t\t\t\tname := \"\"\n\t\t\t\t\tif locations[i].Call.Fn != nil {\n\t\t\t\t\t\tname = locations[i].Call.Fn.Name\n\t\t\t\t\t}\n\t\t\t\t\tt.Logf(\"\\t%s:%d %s (%#x) %x %v\\n\", locations[i].Call.File, locations[i].Call.Line, name, locations[i].Current.PC, locations[i].FrameOffset(), locations[i].SystemStack)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif mainCount != 1 {\n\t\t\tt.Fatalf(\"Main goroutine stack not found %d\", mainCount)\n\t\t}\n\n\t\tif agoroutineCount < 10-lenient {\n\t\t\tt.Fatalf(\"Goroutine stacks not found (%d)\", agoroutineCount)\n\t\t}\n\n\t\tp.ClearBreakpoint(bp.Addr)\n\t\tgrp.Continue()\n\t})\n}\n\nfunc TestKill(t *testing.T) {\n\twithTestProcess(\"testprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tif err := grp.Detach(true); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif valid, _ := p.Valid(); valid {\n\t\t\tt.Fatal(\"expected process to have exited\")\n\t\t}\n\t\tif runtime.GOOS == \"linux\" {\n\t\t\tif runtime.GOARCH == \"arm64\" {\n\t\t\t\t// there is no any sync between signal sended(tracee handled) and open /proc/%d/. It may fail on arm64\n\t\t\t\treturn\n\t\t\t}\n\t\t\t_, err := os.Open(fmt.Sprintf(\"/proc/%d/\", p.Pid()))\n\t\t\tif err == nil {\n\t\t\t\tt.Fatal(\"process has not exited\", p.Pid())\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc testGSupportFunc(name string, t *testing.T, p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\tbp := setFunctionBreakpoint(p, t, \"main.main\")\n\n\tassertNoError(grp.Continue(), t, name+\": Continue()\")\n\n\tg, err := proc.GetG(p.CurrentThread())\n\tassertNoError(err, t, name+\": GetG()\")\n\n\tif g == nil {\n\t\tt.Fatal(name + \": g was nil\")\n\t}\n\n\tt.Logf(name+\": g is: %v\", g)\n\n\tp.ClearBreakpoint(bp.Addr)\n}\n\nfunc TestGetG(t *testing.T) {\n\twithTestProcess(\"testprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\ttestGSupportFunc(\"nocgo\", t, p, grp, fixture)\n\t})\n\n\t// On OSX with Go < 1.5 CGO is not supported due to: https://github.com/golang/go/issues/8973\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 5) {\n\t\tskipOn(t, \"upstream issue\", \"darwin\")\n\t}\n\tprotest.MustHaveCgo(t)\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"cgotest\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\ttestGSupportFunc(\"cgo\", t, p, grp, fixture)\n\t})\n}\n\nfunc TestContinueMulti(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"integrationprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp1 := setFunctionBreakpoint(p, t, \"main.main\")\n\t\tbp2 := setFunctionBreakpoint(p, t, \"main.sayhi\")\n\n\t\tmainCount := 0\n\t\tsayhiCount := 0\n\t\tfor {\n\t\t\terr := grp.Continue()\n\t\t\tif valid, _ := p.Valid(); !valid {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue()\")\n\n\t\t\tif bp := p.CurrentThread().Breakpoint(); bp.LogicalID() == bp1.LogicalID() {\n\t\t\t\tmainCount++\n\t\t\t}\n\n\t\t\tif bp := p.CurrentThread().Breakpoint(); bp.LogicalID() == bp2.LogicalID() {\n\t\t\t\tsayhiCount++\n\t\t\t}\n\t\t}\n\n\t\tif mainCount != 1 {\n\t\t\tt.Fatalf(\"Main breakpoint hit wrong number of times: %d\\n\", mainCount)\n\t\t}\n\n\t\tif sayhiCount != 3 {\n\t\t\tt.Fatalf(\"Sayhi breakpoint hit wrong number of times: %d\\n\", sayhiCount)\n\t\t}\n\t})\n}\n\nfunc TestBreakpointOnFunctionEntry(t *testing.T) {\n\ttestseq2(t, \"testprog\", \"main.main\", []seqTest{{contContinue, 17}})\n}\n\nfunc TestFirstStmtOptimizedBinaries(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcessArgs(\"multinamedreturns\", t, \".\", []string{}, protest.EnableOptimization, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\t_ = setFunctionBreakpoint(p, t, \"main.ManyArgsWithNamedReturns\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tpc := currentPC(p, t)\n\n\t\tfn := p.BinInfo().PCToFunc(pc)\n\t\tif fn == nil {\n\t\t\tt.Fatal(\"Could not find function for current PC\")\n\t\t}\n\t\tif fn.Name != \"main.ManyArgsWithNamedReturns\" {\n\t\t\tt.Fatalf(\"Expected to be in main.ManyArgsWithNamedReturns, got %s\", fn.Name)\n\t\t}\n\n\t\t_, f, l, _ := currentLocation(p, t)\n\t\tif !strings.Contains(f, \"multinamedreturns.go\") || l != 7 {\n\t\t\tt.Fatalf(\"Expected file name to be multinamedreturns.go and line number to be 7, got %s:%d\", f, l)\n\t\t}\n\t\tif pc == fn.End-1 {\n\t\t\tt.Fatalf(\"PC is at function end (0x%x), expected to be at function entry\", pc)\n\t\t}\n\t})\n}\n\nfunc TestProcessReceivesSIGCHLD(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"sigchldprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\t_, ok := err.(proc.ErrProcessExited)\n\t\tif !ok {\n\t\t\tt.Fatalf(\"Continue() returned unexpected error type %v\", err)\n\t\t}\n\t})\n}\n\nfunc TestIssue239(t *testing.T) {\n\twithTestProcess(\"is sue239\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 17)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t})\n}\n\nfunc findFirstNonRuntimeFrame(p *proc.Target) (proc.Stackframe, error) {\n\tframes, err := proc.ThreadStacktrace(p, p.CurrentThread(), 10)\n\tif err != nil {\n\t\treturn proc.Stackframe{}, err\n\t}\n\n\tfor _, frame := range frames {\n\t\tif frame.Current.Fn != nil && !strings.HasPrefix(frame.Current.Fn.Name, \"runtime.\") {\n\t\t\treturn frame, nil\n\t\t}\n\t}\n\treturn proc.Stackframe{}, errors.New(\"non-runtime frame not found\")\n}\n\nfunc evalVariableOrError(p *proc.Target, symbol string) (*proc.Variable, error) {\n\tvar scope *proc.EvalScope\n\tvar err error\n\n\tif testBackend == \"rr\" {\n\t\tvar frame proc.Stackframe\n\t\tframe, err = findFirstNonRuntimeFrame(p)\n\t\tif err == nil {\n\t\t\tscope = proc.FrameToScope(p, p.Memory(), nil, 0, frame)\n\t\t}\n\t} else {\n\t\tscope, err = proc.GoroutineScope(p, p.CurrentThread())\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn scope.EvalExpression(symbol, normalLoadConfig)\n}\n\nfunc evalVariable(p *proc.Target, t testing.TB, symbol string) *proc.Variable {\n\tt.Helper()\n\tv, err := evalVariableOrError(p, symbol)\n\tif err != nil {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\tfname := filepath.Base(file)\n\t\tt.Fatalf(\"%s:%d: EvalVariable(%q): %v\", fname, line, symbol, err)\n\t}\n\treturn v\n}\n\nfunc TestFrameEvaluation(t *testing.T) {\n\tprotest.AllowRecording(t)\n\tlenient := false\n\tif runtime.GOOS == \"windows\" {\n\t\tlenient = true\n\t}\n\twithTestProcess(\"goroutinestackprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.stacktraceme\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tt.Logf(\"stopped on thread %d, goroutine: %#v\", p.CurrentThread().ThreadID(), p.SelectedGoroutine())\n\n\t\t// Testing evaluation on goroutines\n\t\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\tassertNoError(err, t, \"GoroutinesInfo\")\n\t\tfound := make([]bool, 10)\n\t\tfor _, g := range gs {\n\t\t\tframe := -1\n\t\t\tframes, err := proc.GoroutineStacktrace(p, g, 40, 0)\n\t\t\tif err != nil {\n\t\t\t\tt.Logf(\"could not stacktrace goroutine %d: %v\\n\", g.ID, err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt.Logf(\"Goroutine %d %#v\", g.ID, g.Thread)\n\t\t\tlogStacktrace(t, p, frames)\n\t\t\tfor i := range frames {\n\t\t\t\tif frames[i].Call.Fn != nil && frames[i].Call.Fn.Name == \"main.agoroutine\" {\n\t\t\t\t\tframe = i\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif frame < 0 {\n\t\t\t\tt.Logf(\"Goroutine %d: could not find correct frame\", g.ID)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tscope, err := proc.ConvertEvalScope(p, g.ID, frame, 0)\n\t\t\tassertNoError(err, t, \"ConvertEvalScope()\")\n\t\t\tt.Logf(\"scope = %v\", scope)\n\t\t\tv, err := scope.EvalExpression(\"i\", normalLoadConfig)\n\t\t\tt.Logf(\"v = %v\", v)\n\t\t\tif err != nil {\n\t\t\t\tt.Logf(\"Goroutine %d: %v\\n\", g.ID, err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tvval, _ := constant.Int64Val(v.Value)\n\t\t\tfound[vval] = true\n\t\t}\n\n\t\tfor i := range found {\n\t\t\tif !found[i] {\n\t\t\t\tif lenient {\n\t\t\t\t\tlenient = false\n\t\t\t\t} else {\n\t\t\t\t\tt.Fatalf(\"Goroutine %d not found\\n\", i)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Testing evaluation on frames\n\t\tassertNoError(grp.Continue(), t, \"Continue() 2\")\n\t\tg, err := proc.GetG(p.CurrentThread())\n\t\tassertNoError(err, t, \"GetG()\")\n\n\t\tframes, err := proc.GoroutineStacktrace(p, g, 40, 0)\n\t\tassertNoError(err, t, \"Stacktrace()\")\n\t\tt.Logf(\"Goroutine %d %#v\", g.ID, g.Thread)\n\t\tlogStacktrace(t, p, frames)\n\n\t\tfor i := 0; i <= 3; i++ {\n\t\t\tscope, err := proc.ConvertEvalScope(p, g.ID, i+1, 0)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"ConvertEvalScope() on frame %d\", i+1))\n\t\t\tv, err := scope.EvalExpression(\"n\", normalLoadConfig)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalVariable() on frame %d\", i+1))\n\t\t\tn, _ := constant.Int64Val(v.Value)\n\t\t\tt.Logf(\"frame %d n %d\\n\", i+1, n)\n\t\t\tif n != int64(3-i) {\n\t\t\t\tt.Fatalf(\"On frame %d value of n is %d (not %d)\", i+1, n, 3-i)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestThreadFrameEvaluation(t *testing.T) {\n\tskipOn(t, \"upstream issue - https://github.com/golang/go/issues/29322\", \"pie\")\n\tdeadlockBp := proc.FatalThrow\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 11) {\n\t\tt.SkipNow()\n\t}\n\twithTestProcess(\"testdeadlock\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tbp := p.CurrentThread().Breakpoint()\n\t\tif bp.Breakpoint == nil || bp.Logical.Name != deadlockBp {\n\t\t\tt.Fatalf(\"did not stop at deadlock breakpoint %v\", bp)\n\t\t}\n\n\t\t// There is no selected goroutine during a deadlock, so the scope will\n\t\t// be a thread scope.\n\t\tscope, err := proc.ConvertEvalScope(p, 0, 0, 0)\n\t\tassertNoError(err, t, \"ConvertEvalScope() on frame 0\")\n\t\t_, err = scope.EvalExpression(\"s\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable(\\\"s\\\") on frame 0\")\n\t})\n}\n\nfunc TestPointerSetting(t *testing.T) {\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\n\t\tpval := func(n int64) {\n\t\t\tvariable := evalVariable(p, t, \"p1\")\n\t\t\tc0val, _ := constant.Int64Val(variable.Children[0].Value)\n\t\t\tif c0val != n {\n\t\t\t\tt.Fatalf(\"Wrong value of p1, *%d expected *%d\", c0val, n)\n\t\t\t}\n\t\t}\n\n\t\tpval(1)\n\n\t\t// change p1 to point to i2\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"Scope()\")\n\t\ti2addr, err := scope.EvalExpression(\"i2\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalExpression()\")\n\t\tassertNoError(setVariable(p, \"p1\", fmt.Sprintf(\"(*int)(0x%x)\", i2addr.Addr)), t, \"SetVariable()\")\n\t\tpval(2)\n\n\t\t// change the value of i2 check that p1 also changes\n\t\tassertNoError(setVariable(p, \"i2\", \"5\"), t, \"SetVariable()\")\n\t\tpval(5)\n\t})\n}\n\nfunc TestVariableFunctionScoping(t *testing.T) {\n\twithTestProcess(\"testvariables\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tassertNoError(err, t, \"Continue() returned an error\")\n\n\t\tevalVariable(p, t, \"a1\")\n\t\tevalVariable(p, t, \"a2\")\n\n\t\t// Move scopes, a1 exists here by a2 does not\n\t\terr = grp.Continue()\n\t\tassertNoError(err, t, \"Continue() returned an error\")\n\n\t\tevalVariable(p, t, \"a1\")\n\n\t\t_, err = evalVariableOrError(p, \"a2\")\n\t\tif err == nil {\n\t\t\tt.Fatalf(\"Can eval out of scope variable a2\")\n\t\t}\n\t})\n}\n\nfunc TestRecursiveStructure(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tv := evalVariable(p, t, \"aas\")\n\t\tt.Logf(\"v: %v\\n\", v)\n\t})\n}\n\nfunc TestIssue316(t *testing.T) {\n\t// A pointer loop that includes one interface should not send dlv into an infinite loop\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tevalVariable(p, t, \"iface5\")\n\t})\n}\n\nfunc TestIssue325(t *testing.T) {\n\t// nil pointer dereference when evaluating interfaces to function pointers\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tiface2fn1v := evalVariable(p, t, \"iface2fn1\")\n\t\tt.Logf(\"iface2fn1: %v\\n\", iface2fn1v)\n\n\t\tiface2fn2v := evalVariable(p, t, \"iface2fn2\")\n\t\tt.Logf(\"iface2fn2: %v\\n\", iface2fn2v)\n\t})\n}\n\nfunc TestBreakpointCounts(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"bpcountstest\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 12)\n\n\t\tfor {\n\t\t\terr := grp.Continue()\n\t\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue()\")\n\t\t}\n\n\t\tt.Logf(\"TotalHitCount: %d\", bp.Logical.TotalHitCount)\n\t\tif bp.Logical.TotalHitCount != 200 {\n\t\t\tt.Fatalf(\"Wrong TotalHitCount for the breakpoint (%d)\", bp.Logical.TotalHitCount)\n\t\t}\n\n\t\tif len(bp.Logical.HitCount) != 2 {\n\t\t\tt.Fatalf(\"Wrong number of goroutines for breakpoint (%d)\", len(bp.Logical.HitCount))\n\t\t}\n\n\t\tfor _, v := range bp.Logical.HitCount {\n\t\t\tif v != 100 {\n\t\t\t\tt.Fatalf(\"Wrong HitCount for breakpoint (%v)\", bp.Logical.HitCount)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestHardcodedBreakpointCounts(t *testing.T) {\n\tskipOn(t, \"flaky\", \"windows\", \"arm64\")\n\twithTestProcess(\"hcbpcountstest\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tcounts := map[int64]int{}\n\t\tfor {\n\t\t\terr := grp.Continue()\n\t\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue()\")\n\n\t\t\tfor _, th := range p.ThreadList() {\n\t\t\t\tbp := th.Breakpoint().Breakpoint\n\t\t\t\tif bp == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif bp.Logical.Name != proc.HardcodedBreakpoint {\n\t\t\t\t\tt.Fatalf(\"wrong breakpoint name %s\", bp.Logical.Name)\n\t\t\t\t}\n\t\t\t\tg, err := proc.GetG(th)\n\t\t\t\tassertNoError(err, t, \"GetG\")\n\t\t\t\tcounts[g.ID]++\n\t\t\t}\n\t\t}\n\n\t\tif len(counts) != 2 {\n\t\t\tt.Fatalf(\"Wrong number of goroutines for hardcoded breakpoint (%d)\", len(counts))\n\t\t}\n\n\t\tfor goid, count := range counts {\n\t\t\tif count != 100 {\n\t\t\t\tt.Fatalf(\"Wrong hit count for hardcoded breakpoint (%d) on goroutine %d\", count, goid)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc BenchmarkArray(b *testing.B) {\n\t// each bencharr struct is 128 bytes, bencharr is 64 elements long\n\tb.SetBytes(int64(64 * 128))\n\twithTestProcess(\"testvariables2\", b, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), b, \"Continue()\")\n\t\tb.ResetTimer()\n\t\tfor i := 0; i < b.N; i++ {\n\t\t\tevalVariable(p, b, \"bencharr\")\n\t\t}\n\t})\n}\n\nconst doTestBreakpointCountsWithDetection = false\n\nfunc TestBreakpointCountsWithDetection(t *testing.T) {\n\tif !doTestBreakpointCountsWithDetection {\n\t\treturn\n\t}\n\tm := map[int64]int64{}\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"bpcountstest\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 12)\n\n\t\tfor {\n\t\t\terr := grp.Continue()\n\t\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue()\")\n\t\t\tfor _, th := range p.ThreadList() {\n\t\t\t\tif bp := th.Breakpoint(); bp.Breakpoint == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tscope, err := proc.GoroutineScope(p, th)\n\t\t\t\tassertNoError(err, t, \"Scope()\")\n\t\t\t\tv, err := scope.EvalExpression(\"i\", normalLoadConfig)\n\t\t\t\tassertNoError(err, t, \"evalVariable\")\n\t\t\t\ti, _ := constant.Int64Val(v.Value)\n\t\t\t\tv, err = scope.EvalExpression(\"id\", normalLoadConfig)\n\t\t\t\tassertNoError(err, t, \"evalVariable\")\n\t\t\t\tid, _ := constant.Int64Val(v.Value)\n\t\t\t\tm[id] = i\n\t\t\t}\n\n\t\t\ttotal := int64(0)\n\t\t\tfor i := range m {\n\t\t\t\ttotal += m[i] + 1\n\t\t\t}\n\n\t\t\tif uint64(total) != bp.Logical.TotalHitCount {\n\t\t\t\tt.Fatalf(\"Mismatched total count %d %d\\n\", total, bp.Logical.TotalHitCount)\n\t\t\t}\n\t\t}\n\n\t\tt.Logf(\"TotalHitCount: %d\", bp.Logical.TotalHitCount)\n\t\tif bp.Logical.TotalHitCount != 200 {\n\t\t\tt.Fatalf(\"Wrong TotalHitCount for the breakpoint (%d)\", bp.Logical.TotalHitCount)\n\t\t}\n\n\t\tif len(bp.Logical.HitCount) != 2 {\n\t\t\tt.Fatalf(\"Wrong number of goroutines for breakpoint (%d)\", len(bp.Logical.HitCount))\n\t\t}\n\n\t\tfor _, v := range bp.Logical.HitCount {\n\t\t\tif v != 100 {\n\t\t\t\tt.Fatalf(\"Wrong HitCount for breakpoint (%v)\", bp.Logical.HitCount)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc BenchmarkArrayPointer(b *testing.B) {\n\t// each bencharr struct is 128 bytes, benchparr is an array of 64 pointers to bencharr\n\t// each read will read 64 bencharr structs plus the 64 pointers of benchparr\n\tb.SetBytes(int64(64*128 + 64*8))\n\twithTestProcess(\"testvariables2\", b, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), b, \"Continue()\")\n\t\tb.ResetTimer()\n\t\tfor i := 0; i < b.N; i++ {\n\t\t\tevalVariable(p, b, \"bencharr\")\n\t\t}\n\t})\n}\n\nfunc BenchmarkMap(b *testing.B) {\n\t// m1 contains 41 entries, each one has a value that's 2 int values (2* 8 bytes) and a string key\n\t// each string key has an average of 9 character\n\t// reading strings and the map structure imposes a overhead that we ignore here\n\tb.SetBytes(int64(41 * (2*8 + 9)))\n\twithTestProcess(\"testvariables2\", b, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), b, \"Continue()\")\n\t\tb.ResetTimer()\n\t\tfor i := 0; i < b.N; i++ {\n\t\t\tevalVariable(p, b, \"m1\")\n\t\t}\n\t})\n}\n\nfunc BenchmarkGoroutinesInfo(b *testing.B) {\n\twithTestProcess(\"testvariables2\", b, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), b, \"Continue()\")\n\t\tb.ResetTimer()\n\t\tfor i := 0; i < b.N; i++ {\n\t\t\tp.ClearCaches()\n\t\t\t_, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\t\tassertNoError(err, b, \"GoroutinesInfo\")\n\t\t}\n\t})\n}\n\nfunc TestIssue262(t *testing.T) {\n\t// Continue does not work when the current breakpoint is set on a NOP instruction\n\tskipOn(t, \"N/A\", \"386\")\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue262\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 11)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\terr := grp.Continue()\n\t\tif err == nil {\n\t\t\tt.Fatalf(\"No error on second continue\")\n\t\t}\n\t\t_, exited := err.(proc.ErrProcessExited)\n\t\tif !exited {\n\t\t\tt.Fatalf(\"Process did not exit after second continue: %v\", err)\n\t\t}\n\t})\n}\n\nfunc TestIssue305(t *testing.T) {\n\t// If 'next' hits a breakpoint on the goroutine it's stepping through\n\t// the internal breakpoints aren't cleared preventing further use of\n\t// 'next' command\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue305\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 5)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tassertNoError(grp.Next(), t, \"Next() 1\")\n\t\tassertNoError(grp.Next(), t, \"Next() 2\")\n\t\tassertNoError(grp.Next(), t, \"Next() 3\")\n\t\tassertNoError(grp.Next(), t, \"Next() 4\")\n\t\tassertNoError(grp.Next(), t, \"Next() 5\")\n\t})\n}\n\nfunc TestPointerLoops(t *testing.T) {\n\t// Pointer loops through map entries, pointers and slices\n\t// Regression test for issue #341\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tfor _, expr := range []string{\"mapinf\", \"ptrinf\", \"sliceinf\"} {\n\t\t\tt.Logf(\"requesting %s\", expr)\n\t\t\tv := evalVariable(p, t, expr)\n\t\t\tt.Logf(\"%s: %v\\n\", expr, v)\n\t\t}\n\t})\n}\n\nfunc BenchmarkLocalVariables(b *testing.B) {\n\twithTestProcess(\"testvariables\", b, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), b, \"Continue() returned an error\")\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, b, \"Scope()\")\n\t\tb.ResetTimer()\n\t\tfor i := 0; i < b.N; i++ {\n\t\t\t_, err := scope.LocalVariables(normalLoadConfig)\n\t\t\tassertNoError(err, b, \"LocalVariables()\")\n\t\t}\n\t})\n}\n\nfunc TestCondBreakpoint(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"parallel_next\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 9)\n\t\tbp.UserBreaklet().Cond = &ast.BinaryExpr{\n\t\t\tOp: token.EQL,\n\t\t\tX:  &ast.Ident{Name: \"n\"},\n\t\t\tY:  &ast.BasicLit{Kind: token.INT, Value: \"7\"},\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tnvar := evalVariable(p, t, \"n\")\n\n\t\tn, _ := constant.Int64Val(nvar.Value)\n\t\tif n != 7 {\n\t\t\tt.Fatalf(\"Stopped on wrong goroutine %d\\n\", n)\n\t\t}\n\t})\n}\n\nfunc TestCondBreakpointWithFrame(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"condframe\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 12)\n\t\tparsed, err := parser.ParseExpr(\"runtime.frame(1).i == 3\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to parse expression: %v\", err)\n\t\t}\n\t\tbp.UserBreaklet().Cond = parsed\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tg := p.SelectedGoroutine()\n\t\tscope, err := proc.ConvertEvalScope(p, g.ID, 1, 0)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\tv, err := scope.EvalExpression(\"i\", normalLoadConfig)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\tvval, _ := constant.Int64Val(v.Value)\n\t\tif vval != 3 {\n\t\t\tt.Fatalf(\"Incorrect value for frame variable: %v\", vval)\n\t\t}\n\t})\n}\n\nfunc TestCondBreakpointError(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"parallel_next\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 9)\n\t\tbp.UserBreaklet().Cond = &ast.BinaryExpr{\n\t\t\tOp: token.EQL,\n\t\t\tX:  &ast.Ident{Name: \"nonexistentvariable\"},\n\t\t\tY:  &ast.BasicLit{Kind: token.INT, Value: \"7\"},\n\t\t}\n\n\t\terr := grp.Continue()\n\t\tif err == nil {\n\t\t\tt.Fatalf(\"No error on first Continue()\")\n\t\t}\n\n\t\tif err.Error() != \"error evaluating expression: could not find symbol value for nonexistentvariable\" && err.Error() != \"multiple errors evaluating conditions\" {\n\t\t\tt.Fatalf(\"Unexpected error on first Continue(): %v\", err)\n\t\t}\n\n\t\tbp.UserBreaklet().Cond = &ast.BinaryExpr{\n\t\t\tOp: token.EQL,\n\t\t\tX:  &ast.Ident{Name: \"n\"},\n\t\t\tY:  &ast.BasicLit{Kind: token.INT, Value: \"7\"},\n\t\t}\n\n\t\terr = grp.Continue()\n\t\tif err != nil {\n\t\t\tif !errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tt.Fatalf(\"Unexpected error on second Continue(): %v\", err)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tnvar := evalVariable(p, t, \"n\")\n\n\t\tn, _ := constant.Int64Val(nvar.Value)\n\t\tif n != 7 {\n\t\t\tt.Fatalf(\"Stopped on wrong goroutine %d\\n\", n)\n\t\t}\n\t})\n}\n\nfunc TestHitCondBreakpointEQ(t *testing.T) {\n\twithTestProcess(\"break\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 7)\n\t\tgrp.ChangeBreakpointCondition(bp.Logical, \"\", \"== 3\", false)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tivar := evalVariable(p, t, \"i\")\n\n\t\ti, _ := constant.Int64Val(ivar.Value)\n\t\tif i != 3 {\n\t\t\tt.Fatalf(\"Stopped on wrong hitcount %d\\n\", i)\n\t\t}\n\n\t\terr := grp.Continue()\n\t\tif _, exited := err.(proc.ErrProcessExited); !exited {\n\t\t\tt.Fatalf(\"Unexpected error on Continue(): %v\", err)\n\t\t}\n\t})\n}\n\nfunc TestHitCondBreakpointGEQ(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"break\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 7)\n\t\tgrp.ChangeBreakpointCondition(bp.Logical, \"\", \">= 3\", false)\n\n\t\tfor it := 3; it <= 10; it++ {\n\t\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\t\tivar := evalVariable(p, t, \"i\")\n\n\t\t\ti, _ := constant.Int64Val(ivar.Value)\n\t\t\tif int(i) != it {\n\t\t\t\tt.Fatalf(\"Stopped on wrong hitcount %d\\n\", i)\n\t\t\t}\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t})\n}\n\nfunc TestHitCondBreakpointREM(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"break\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 7)\n\t\tgrp.ChangeBreakpointCondition(bp.Logical, \"\", \"% 2\", false)\n\n\t\tfor it := 2; it <= 10; it += 2 {\n\t\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\t\tivar := evalVariable(p, t, \"i\")\n\n\t\t\ti, _ := constant.Int64Val(ivar.Value)\n\t\t\tif int(i) != it {\n\t\t\t\tt.Fatalf(\"Stopped on wrong hitcount %d\\n\", i)\n\t\t\t}\n\t\t}\n\n\t\terr := grp.Continue()\n\t\tif _, exited := err.(proc.ErrProcessExited); !exited {\n\t\t\tt.Fatalf(\"Unexpected error on Continue(): %v\", err)\n\t\t}\n\t})\n}\n\nfunc TestIssue356(t *testing.T) {\n\t// slice with a typedef does not get printed correctly\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\tmmvar := evalVariable(p, t, \"mainMenu\")\n\t\tif mmvar.Kind != reflect.Slice {\n\t\t\tt.Fatalf(\"Wrong kind for mainMenu: %v\\n\", mmvar.Kind)\n\t\t}\n\t})\n}\n\nfunc TestStepIntoFunction(t *testing.T) {\n\twithTestProcess(\"teststep\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\t// Continue until breakpoint\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\t// Step into function\n\t\tassertNoError(grp.Step(), t, \"Step() returned an error\")\n\t\t// We should now be inside the function.\n\t\tloc, err := proc.ThreadLocation(p.CurrentThread())\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif loc.Fn.Name != \"main.callme\" {\n\t\t\tt.Fatalf(\"expected to be within the 'callme' function, was in %s instead\", loc.Fn.Name)\n\t\t}\n\t\tif !strings.Contains(loc.File, \"teststep\") {\n\t\t\tt.Fatalf(\"debugger stopped at incorrect location: %s:%d\", loc.File, loc.Line)\n\t\t}\n\t\tif loc.Line != 8 {\n\t\t\tt.Fatalf(\"debugger stopped at incorrect line: %d\", loc.Line)\n\t\t}\n\t})\n}\n\nfunc TestIssue332_Part1(t *testing.T) {\n\t// Next shouldn't step inside a function call\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue332\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 8)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(grp.Next(), t, \"first Next()\")\n\t\tlocations, err := proc.ThreadStacktrace(p, p.CurrentThread(), 2)\n\t\tassertNoError(err, t, \"Stacktrace()\")\n\t\tif locations[0].Call.Fn == nil {\n\t\t\tt.Fatalf(\"Not on a function\")\n\t\t}\n\t\tif locations[0].Call.Fn.Name != \"main.main\" {\n\t\t\tt.Fatalf(\"Not on main.main after Next: %s (%s:%d)\", locations[0].Call.Fn.Name, locations[0].Call.File, locations[0].Call.Line)\n\t\t}\n\t\tif locations[0].Call.Line != 9 {\n\t\t\tt.Fatalf(\"Not on line 9 after Next: %s (%s:%d)\", locations[0].Call.Fn.Name, locations[0].Call.File, locations[0].Call.Line)\n\t\t}\n\t})\n}\n\nfunc TestIssue332_Part2(t *testing.T) {\n\t// Step should skip a function's prologue\n\t// In some parts of the prologue, for some functions, the FDE data is incorrect\n\t// which leads to 'next' and 'stack' failing with error \"could not find FDE for PC: <garbage>\"\n\t// because the incorrect FDE data leads to reading the wrong stack address as the return address\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue332\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 8)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\t// step until we enter changeMe\n\t\tfor {\n\t\t\tassertNoError(grp.Step(), t, \"Step()\")\n\t\t\tlocations, err := proc.ThreadStacktrace(p, p.CurrentThread(), 2)\n\t\t\tassertNoError(err, t, \"Stacktrace()\")\n\t\t\tif locations[0].Call.Fn == nil {\n\t\t\t\tt.Fatalf(\"Not on a function\")\n\t\t\t}\n\t\t\tif locations[0].Call.Fn.Name == \"main.changeMe\" {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tregs, err := p.CurrentThread().Registers()\n\t\tassertNoError(err, t, \"Registers()\")\n\t\tpc := regs.PC()\n\t\tpcAfterPrologue := findFunctionLocation(p, t, \"main.changeMe\")\n\t\tif pcAfterPrologue == p.BinInfo().LookupFunc()[\"main.changeMe\"][0].Entry {\n\t\t\tt.Fatalf(\"main.changeMe and main.changeMe:0 are the same (%x)\", pcAfterPrologue)\n\t\t}\n\t\tif pc != pcAfterPrologue {\n\t\t\tt.Fatalf(\"Step did not skip the prologue: current pc: %x, first instruction after prologue: %x\", pc, pcAfterPrologue)\n\t\t}\n\n\t\tassertNoError(grp.Next(), t, \"first Next()\")\n\t\tassertNoError(grp.Next(), t, \"second Next()\")\n\t\tassertNoError(grp.Next(), t, \"third Next()\")\n\t\terr = grp.Continue()\n\t\tif _, exited := err.(proc.ErrProcessExited); !exited {\n\t\t\tassertNoError(err, t, \"final Continue()\")\n\t\t}\n\t})\n}\n\nfunc TestIssue414(t *testing.T) {\n\tskipOn(t, \"broken\", \"linux\", \"386\", \"pie\") // test occasionally hangs on linux/386/pie\n\t// Stepping until the program exits\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"math\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 9)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tfor {\n\t\t\tpc := currentPC(p, t)\n\t\t\tf, ln := currentLineNumber(p, t)\n\t\t\tt.Logf(\"at %s:%d %#x\\n\", f, ln, pc)\n\t\t\tvar err error\n\t\t\t// Stepping through the runtime is not generally safe so after we are out\n\t\t\t// of main.main just use Next.\n\t\t\t// See: https://github.com/go-delve/delve/pull/2082\n\t\t\tif f == fixture.Source {\n\t\t\t\terr = grp.Step()\n\t\t\t} else {\n\t\t\t\terr = grp.Next()\n\t\t\t}\n\t\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Step()\")\n\t\t}\n\t})\n}\n\nfunc TestPackageVariables(t *testing.T) {\n\tvar skippedVariable = map[string]bool{\n\t\t\"runtime.uint16Eface\": true,\n\t\t\"runtime.uint32Eface\": true,\n\t\t\"runtime.uint64Eface\": true,\n\t\t\"runtime.stringEface\": true,\n\t\t\"runtime.sliceEface\":  true,\n\t}\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tassertNoError(err, t, \"Continue()\")\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"Scope()\")\n\t\tvars, err := scope.PackageVariables(normalLoadConfig)\n\t\tassertNoError(err, t, \"PackageVariables()\")\n\t\tfailed := false\n\t\tfor _, v := range vars {\n\t\t\tif skippedVariable[v.Name] {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif v.Unreadable != nil && v.Unreadable.Error() != \"no location attribute Location\" {\n\t\t\t\tfailed = true\n\t\t\t\tt.Logf(\"Unreadable variable %s: %v\", v.Name, v.Unreadable)\n\t\t\t}\n\t\t}\n\t\tif failed {\n\t\t\tt.Fatalf(\"previous errors\")\n\t\t}\n\t})\n}\n\nfunc TestIssue149(t *testing.T) {\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major > 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 7, Rev: -1}) {\n\t\treturn\n\t}\n\t// setting breakpoint on break statement\n\twithTestProcess(\"break\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tfindFileLocation(p, t, fixture.Source, 8)\n\t})\n}\n\nfunc TestPanicBreakpoint(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"panic\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tbp := p.CurrentThread().Breakpoint()\n\t\tif bp.Breakpoint == nil || bp.Logical.Name != proc.UnrecoveredPanic {\n\t\t\tt.Fatalf(\"not on unrecovered-panic breakpoint: %v\", bp)\n\t\t}\n\t})\n}\n\nfunc TestCmdLineArgs(t *testing.T) {\n\texpectSuccess := func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tbp := p.CurrentThread().Breakpoint()\n\t\tif bp.Breakpoint != nil && bp.Logical.Name == proc.UnrecoveredPanic {\n\t\t\tt.Fatalf(\"testing args failed on unrecovered-panic breakpoint: %v\", bp)\n\t\t}\n\t\tvar exit proc.ErrProcessExited\n\t\tif !errors.As(err, &exit) {\n\t\t\tt.Fatalf(\"Process did not exit: %v\", err)\n\t\t}\n\t\tif exit.Status != 0 {\n\t\t\tt.Fatalf(\"process exited with invalid status %d\", exit.Status)\n\t\t}\n\t}\n\n\texpectPanic := func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tgrp.Continue()\n\t\tbp := p.CurrentThread().Breakpoint()\n\t\tif bp.Breakpoint == nil || bp.Logical.Name != proc.UnrecoveredPanic {\n\t\t\tt.Fatalf(\"not on unrecovered-panic breakpoint: %v\", bp)\n\t\t}\n\t}\n\n\t// make sure multiple arguments (including one with spaces) are passed to the binary correctly\n\twithTestProcessArgs(\"testargs\", t, \".\", []string{\"test\"}, 0, expectSuccess)\n\twithTestProcessArgs(\"testargs\", t, \".\", []string{\"-test\"}, 0, expectPanic)\n\twithTestProcessArgs(\"testargs\", t, \".\", []string{\"test\", \"pass flag\"}, 0, expectSuccess)\n\t// check that arguments with spaces are *only* passed correctly when correctly called\n\twithTestProcessArgs(\"testargs\", t, \".\", []string{\"test pass\", \"flag\"}, 0, expectPanic)\n\twithTestProcessArgs(\"testargs\", t, \".\", []string{\"test\", \"pass\", \"flag\"}, 0, expectPanic)\n\twithTestProcessArgs(\"testargs\", t, \".\", []string{\"test pass flag\"}, 0, expectPanic)\n\t// and that invalid cases (wrong arguments or no arguments) panic\n\twithTestProcess(\"testargs\", t, expectPanic)\n\twithTestProcessArgs(\"testargs\", t, \".\", []string{\"invalid\"}, 0, expectPanic)\n\twithTestProcessArgs(\"testargs\", t, \".\", []string{\"test\", \"invalid\"}, 0, expectPanic)\n\twithTestProcessArgs(\"testargs\", t, \".\", []string{\"invalid\", \"pass flag\"}, 0, expectPanic)\n}\n\nfunc TestIssue462(t *testing.T) {\n\tskipOn(t, \"broken\", \"windows\") // Stacktrace of Goroutine 0 fails with an error\n\twithTestProcess(\"testnextnethttp\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tpid := p.Pid()\n\t\ttmpdir := os.TempDir()\n\t\tportFile := filepath.Join(tmpdir, fmt.Sprintf(\"testnextnethttp_port_%d\", pid))\n\n\t\t// Ensure cleanup of port file\n\t\tdefer func() {\n\t\t\tos.Remove(portFile)\n\t\t}()\n\n\t\tgo func() {\n\t\t\t// Wait for program to write the port to file with timeout\n\t\t\tvar port int\n\t\t\tt0 := time.Now()\n\t\t\tfor {\n\t\t\t\tif data, err := os.ReadFile(portFile); err == nil {\n\t\t\t\t\tif parsedPort, err := strconv.Atoi(strings.TrimSpace(string(data))); err == nil {\n\t\t\t\t\t\tport = parsedPort\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttime.Sleep(50 * time.Millisecond)\n\t\t\t\tif time.Since(t0) > 10*time.Second {\n\t\t\t\t\tt.Errorf(\"timeout waiting for port file\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Wait for program to start listening with timeout\n\t\t\tt0 = time.Now()\n\t\t\tfor {\n\t\t\t\tconn, err := net.Dial(\"tcp\", fmt.Sprintf(\"127.0.0.1:%d\", port))\n\t\t\t\tif err == nil {\n\t\t\t\t\tconn.Close()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\ttime.Sleep(50 * time.Millisecond)\n\t\t\t\tif time.Since(t0) > 10*time.Second {\n\t\t\t\t\tt.Errorf(\"timeout waiting for server to start listening\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgrp.RequestManualStop()\n\t\t}()\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\t_, err := proc.ThreadStacktrace(p, p.CurrentThread(), 40)\n\t\tassertNoError(err, t, \"Stacktrace()\")\n\t})\n}\n\nfunc TestNextParked(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"parallel_next\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"main.sayhi\")\n\n\t\t// continue until a parked goroutine exists\n\t\tvar parkedg *proc.G\n\t\tfor parkedg == nil {\n\t\t\terr := grp.Continue()\n\t\t\tif _, exited := err.(proc.ErrProcessExited); exited {\n\t\t\t\tt.Log(\"could not find parked goroutine\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue()\")\n\n\t\t\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\t\tassertNoError(err, t, \"GoroutinesInfo()\")\n\n\t\t\t// Search for a parked goroutine that we know for sure will have to be\n\t\t\t// resumed before the program can exit. This is a parked goroutine that:\n\t\t\t// 1. is executing main.sayhi\n\t\t\t// 2. hasn't called wg.Done yet\n\t\t\tfor _, g := range gs {\n\t\t\t\tif g.Thread != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tframes, _ := proc.GoroutineStacktrace(p, g, 5, 0)\n\t\t\t\tfor _, frame := range frames {\n\t\t\t\t\t// line 11 is the line where wg.Done is called\n\t\t\t\t\tif frame.Current.Fn != nil && frame.Current.Fn.Name == \"main.sayhi\" && frame.Current.Line < 11 {\n\t\t\t\t\t\tparkedg = g\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif parkedg != nil {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tassertNoError(p.SwitchGoroutine(parkedg), t, \"SwitchGoroutine()\")\n\t\tp.ClearBreakpoint(bp.Addr)\n\t\tassertNoError(grp.Next(), t, \"Next()\")\n\n\t\tif p.SelectedGoroutine().ID != parkedg.ID {\n\t\t\tt.Fatalf(\"Next did not continue on the selected goroutine, expected %d got %d\", parkedg.ID, p.SelectedGoroutine().ID)\n\t\t}\n\t})\n}\n\nfunc TestStepParked(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"parallel_next\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"main.sayhi\")\n\n\t\t// continue until a parked goroutine exists\n\t\tvar parkedg *proc.G\n\tLookForParkedG:\n\t\tfor {\n\t\t\terr := grp.Continue()\n\t\t\tif _, exited := err.(proc.ErrProcessExited); exited {\n\t\t\t\tt.Log(\"could not find parked goroutine\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue()\")\n\n\t\t\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\t\tassertNoError(err, t, \"GoroutinesInfo()\")\n\n\t\t\tfor _, g := range gs {\n\t\t\t\tif g.Thread == nil && g.CurrentLoc.Fn != nil && g.CurrentLoc.Fn.Name == \"main.sayhi\" {\n\t\t\t\t\tparkedg = g\n\t\t\t\t\tbreak LookForParkedG\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tt.Logf(\"Parked g is: %v\\n\", parkedg)\n\t\tframes, _ := proc.GoroutineStacktrace(p, parkedg, 20, 0)\n\t\tfor _, frame := range frames {\n\t\t\tname := \"\"\n\t\t\tif frame.Call.Fn != nil {\n\t\t\t\tname = frame.Call.Fn.Name\n\t\t\t}\n\t\t\tt.Logf(\"\\t%s:%d in %s (%#x)\", frame.Call.File, frame.Call.Line, name, frame.Current.PC)\n\t\t}\n\n\t\tassertNoError(p.SwitchGoroutine(parkedg), t, \"SwitchGoroutine()\")\n\t\tp.ClearBreakpoint(bp.Addr)\n\t\tassertNoError(grp.Step(), t, \"Step()\")\n\n\t\tif p.SelectedGoroutine().ID != parkedg.ID {\n\t\t\tt.Fatalf(\"Step did not continue on the selected goroutine, expected %d got %d\", parkedg.ID, p.SelectedGoroutine().ID)\n\t\t}\n\t})\n}\n\nfunc TestUnsupportedArch(t *testing.T) {\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major < 0 || !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 6, Rev: -1}) || ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 7, Rev: -1}) {\n\t\t// cross compile (with -N?) works only on select versions of go\n\t\treturn\n\t}\n\n\tfixturesDir := protest.FindFixturesDir()\n\tinfile := filepath.Join(fixturesDir, \"math.go\")\n\toutfile := filepath.Join(fixturesDir, \"_math_debug_386\")\n\n\tcmd := exec.Command(\"go\", \"build\", \"-gcflags=-N -l\", \"-o\", outfile, infile)\n\tfor _, v := range os.Environ() {\n\t\tif !strings.HasPrefix(v, \"GOARCH=\") {\n\t\t\tcmd.Env = append(cmd.Env, v)\n\t\t}\n\t}\n\tcmd.Env = append(cmd.Env, \"GOARCH=386\")\n\tout, err := cmd.CombinedOutput()\n\tif err != nil {\n\t\tt.Fatalf(\"go build failed: %v: %v\", err, string(out))\n\t}\n\tdefer os.Remove(outfile)\n\n\tvar p *proc.TargetGroup\n\n\tswitch testBackend {\n\tcase \"native\":\n\t\tp, err = native.Launch([]string{outfile}, \".\", 0, []string{}, \"\", \"\", proc.OutputRedirect{}, proc.OutputRedirect{})\n\tcase \"lldb\":\n\t\tp, err = gdbserial.LLDBLaunch([]string{outfile}, \".\", 0, []string{}, \"\", [3]string{})\n\tdefault:\n\t\tt.Skip(\"test not valid for this backend\")\n\t}\n\n\tif err == nil {\n\t\tp.Detach(true)\n\t\tt.Fatal(\"Launch is expected to fail, but succeeded\")\n\t}\n\n\tif _, ok := err.(*proc.ErrUnsupportedArch); ok {\n\t\t// all good\n\t\treturn\n\t}\n\n\tt.Fatal(err)\n}\n\nfunc TestIssue573(t *testing.T) {\n\t// calls to runtime.duffzero and runtime.duffcopy jump directly into the middle\n\t// of the function and the internal breakpoint set by StepInto may be missed.\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue573\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.foo\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(grp.Step(), t, \"Step() #1\")\n\t\tassertNoError(grp.Step(), t, \"Step() #2\") // Bug exits here.\n\t\tassertNoError(grp.Step(), t, \"Step() #3\") // Third step ought to be possible; program ought not have exited.\n\t})\n}\n\nfunc TestTestvariables2Prologue(t *testing.T) {\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\taddrEntry := p.BinInfo().LookupFunc()[\"main.main\"][0].Entry\n\t\taddrPrologue := findFunctionLocation(p, t, \"main.main\")\n\t\tif addrEntry == addrPrologue {\n\t\t\tt.Fatalf(\"Prologue detection failed on testvariables2.go/main.main\")\n\t\t}\n\t})\n}\n\nfunc TestIssue561(t *testing.T) {\n\t// Step fails to make progress when PC is at a CALL instruction\n\t// where a breakpoint is also set.\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue561\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 10)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(grp.Step(), t, \"Step()\")\n\t\tassertLineNumber(p, t, 5, \"wrong line number after Step,\")\n\t})\n}\n\nfunc TestGoroutineLabels(t *testing.T) {\n\twithTestProcess(\"goroutineLabels\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tg, err := proc.GetG(p.CurrentThread())\n\t\tassertNoError(err, t, \"GetG()\")\n\t\tif len(g.Labels()) != 0 {\n\t\t\tt.Fatalf(\"No labels expected\")\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tg, err = proc.GetG(p.CurrentThread())\n\t\tassertNoError(err, t, \"GetG()\")\n\t\tlabels := g.Labels()\n\t\tif v := labels[\"k1\"]; v != \"v1\" {\n\t\t\tt.Errorf(\"Unexpected label value k1=%v\", v)\n\t\t}\n\t\tif v := labels[\"k2\"]; v != \"v2\" {\n\t\t\tt.Errorf(\"Unexpected label value k2=%v\", v)\n\t\t}\n\t})\n}\n\nfunc TestStepOut(t *testing.T) {\n\ttestseq2(t, \"testnextprog\", \"main.helloworld\", []seqTest{{contContinue, 13}, {contStepout, 35}})\n}\n\nfunc TestStepConcurrentDirect(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"teststepconcurrent\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 37)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\terr := p.ClearBreakpoint(bp.Addr)\n\t\tassertNoError(err, t, \"ClearBreakpoint()\")\n\n\t\tfor _, b := range p.Breakpoints().M {\n\t\t\tif b.Logical.Name == proc.UnrecoveredPanic {\n\t\t\t\terr := p.ClearBreakpoint(b.Addr)\n\t\t\t\tassertNoError(err, t, \"ClearBreakpoint(unrecovered-panic)\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tgid := p.SelectedGoroutine().ID\n\n\t\tseq := []int{37, 38, 13, 15, 16, 38}\n\n\t\ti := 0\n\t\tcount := 0\n\t\tfor {\n\t\t\tanyerr := false\n\t\t\tif p.SelectedGoroutine().ID != gid {\n\t\t\t\tt.Errorf(\"Step switched to different goroutine %d %d\\n\", gid, p.SelectedGoroutine().ID)\n\t\t\t\tanyerr = true\n\t\t\t}\n\t\t\tf, ln := currentLineNumber(p, t)\n\t\t\tif ln != seq[i] {\n\t\t\t\tif i == 1 && ln == 40 {\n\t\t\t\t\t// loop exited\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tframes, err := proc.ThreadStacktrace(p, p.CurrentThread(), 20)\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Errorf(\"Could not get stacktrace of goroutine %d\\n\", p.SelectedGoroutine().ID)\n\t\t\t\t} else {\n\t\t\t\t\tt.Logf(\"Goroutine %d (thread: %d):\", p.SelectedGoroutine().ID, p.CurrentThread().ThreadID())\n\t\t\t\t\tfor _, frame := range frames {\n\t\t\t\t\t\tt.Logf(\"\\t%s:%d (%#x)\", frame.Call.File, frame.Call.Line, frame.Current.PC)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tt.Errorf(\"Program did not continue at expected location (%d) %s:%d [i %d count %d]\", seq[i], f, ln, i, count)\n\t\t\t\tanyerr = true\n\t\t\t}\n\t\t\tif anyerr {\n\t\t\t\tt.FailNow()\n\t\t\t}\n\t\t\ti = (i + 1) % len(seq)\n\t\t\tif i == 0 {\n\t\t\t\tcount++\n\t\t\t}\n\t\t\tassertNoError(grp.Step(), t, \"Step()\")\n\t\t}\n\n\t\tif count != 100 {\n\t\t\tt.Fatalf(\"Program did not loop expected number of times: %d\", count)\n\t\t}\n\t})\n}\n\nfunc TestStepConcurrentPtr(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"teststepconcurrent\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 24)\n\n\t\tfor _, b := range p.Breakpoints().M {\n\t\t\tif b.Logical.Name == proc.UnrecoveredPanic {\n\t\t\t\terr := p.ClearBreakpoint(b.Addr)\n\t\t\t\tassertNoError(err, t, \"ClearBreakpoint(unrecovered-panic)\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tkvals := map[int64]int64{}\n\t\tcount := 0\n\t\tfor {\n\t\t\terr := grp.Continue()\n\t\t\t_, exited := err.(proc.ErrProcessExited)\n\t\t\tif exited {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue()\")\n\n\t\t\tf, ln := currentLineNumber(p, t)\n\t\t\tif ln != 24 {\n\t\t\t\tfor _, th := range p.ThreadList() {\n\t\t\t\t\tt.Logf(\"thread %d stopped on breakpoint %v\", th.ThreadID(), th.Breakpoint())\n\t\t\t\t}\n\t\t\t\tcurbp := p.CurrentThread().Breakpoint()\n\t\t\t\tt.Fatalf(\"Program did not continue at expected location (24): %s:%d %#x [%v] (gid %d count %d)\", f, ln, currentPC(p, t), curbp, p.SelectedGoroutine().ID, count)\n\t\t\t}\n\n\t\t\tgid := p.SelectedGoroutine().ID\n\n\t\t\tkvar := evalVariable(p, t, \"k\")\n\t\t\tk, _ := constant.Int64Val(kvar.Value)\n\n\t\t\tif oldk, ok := kvals[gid]; ok {\n\t\t\t\tif oldk >= k {\n\t\t\t\t\tt.Fatalf(\"Goroutine %d did not make progress?\", gid)\n\t\t\t\t}\n\t\t\t}\n\t\t\tkvals[gid] = k\n\n\t\t\tassertNoError(grp.Step(), t, \"Step()\")\n\t\t\tfor p.Breakpoints().HasSteppingBreakpoints() {\n\t\t\t\tif p.SelectedGoroutine().ID == gid {\n\t\t\t\t\tt.Fatalf(\"step did not step into function call (but internal breakpoints still active?) (%d %d)\", gid, p.SelectedGoroutine().ID)\n\t\t\t\t}\n\t\t\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\t\t}\n\n\t\t\tif p.SelectedGoroutine().ID != gid {\n\t\t\t\tt.Fatalf(\"Step switched goroutines (wanted: %d got: %d)\", gid, p.SelectedGoroutine().ID)\n\t\t\t}\n\n\t\t\tf, ln = assertLineNumber(p, t, 13, \"Step did not step into function call\")\n\n\t\t\tcount++\n\t\t\tif count > 50 {\n\t\t\t\t// this test could potentially go on for 10000 cycles, since that's\n\t\t\t\t// too slow we cut the execution after 50 cycles\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif count == 0 {\n\t\t\tt.Fatalf(\"Breakpoint never hit\")\n\t\t}\n\t})\n}\n\nfunc TestStepOutBreakpoint(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testnextprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 13)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tp.ClearBreakpoint(bp.Addr)\n\n\t\t// StepOut should be interrupted by a breakpoint on the same goroutine.\n\t\tsetFileBreakpoint(p, t, fixture.Source, 14)\n\t\tassertNoError(grp.StepOut(), t, \"StepOut()\")\n\t\tassertLineNumber(p, t, 14, \"wrong line number\")\n\t\tif p.Breakpoints().HasSteppingBreakpoints() {\n\t\t\tt.Fatal(\"has internal breakpoints after hitting breakpoint on same goroutine\")\n\t\t}\n\t})\n}\n\nfunc TestNextBreakpoint(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testnextprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 34)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tp.ClearBreakpoint(bp.Addr)\n\n\t\t// Next should be interrupted by a breakpoint on the same goroutine.\n\t\tsetFileBreakpoint(p, t, fixture.Source, 14)\n\t\tassertNoError(grp.Next(), t, \"Next()\")\n\t\tassertLineNumber(p, t, 14, \"wrong line number\")\n\t\tif p.Breakpoints().HasSteppingBreakpoints() {\n\t\t\tt.Fatal(\"has internal breakpoints after hitting breakpoint on same goroutine\")\n\t\t}\n\t})\n}\n\nfunc TestNextBreakpointKeepsSteppingBreakpoints(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testnextprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tgrp.KeepSteppingBreakpoints = proc.TracepointKeepsSteppingBreakpoints\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 34)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tp.ClearBreakpoint(bp.Addr)\n\n\t\t// Next should be interrupted by a tracepoint on the same goroutine.\n\t\tbp = setFileBreakpoint(p, t, fixture.Source, 14)\n\t\tbp.Logical.Tracepoint = true\n\t\tassertNoError(grp.Next(), t, \"Next()\")\n\t\tassertLineNumber(p, t, 14, \"wrong line number\")\n\t\tif !p.Breakpoints().HasSteppingBreakpoints() {\n\t\t\tt.Fatal(\"does not have internal breakpoints after hitting tracepoint on same goroutine\")\n\t\t}\n\n\t\t// Continue to complete next.\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertLineNumber(p, t, 35, \"wrong line number\")\n\t\tif p.Breakpoints().HasSteppingBreakpoints() {\n\t\t\tt.Fatal(\"has internal breakpoints after completing next\")\n\t\t}\n\t})\n}\n\nfunc TestStepOutDefer(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testnextdefer\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 9)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tp.ClearBreakpoint(bp.Addr)\n\n\t\tassertLineNumber(p, t, 9, \"wrong line number\")\n\n\t\tassertNoError(grp.StepOut(), t, \"StepOut()\")\n\n\t\tf, l, _ := p.BinInfo().PCToLine(currentPC(p, t))\n\t\tif f == fixture.Source || l == 6 {\n\t\t\tt.Fatalf(\"wrong location %s:%d, expected to end somewhere in runtime\", f, l)\n\t\t}\n\t})\n}\n\nfunc TestStepOutDeferReturnAndDirectCall(t *testing.T) {\n\t// StepOut should not step into a deferred function if it is called\n\t// directly, only if it is called through a panic.\n\t// Here we test the case where the function is called by a deferreturn\n\ttestseq2(t, \"defercall\", \"\", []seqTest{\n\t\t{contContinue, 11},\n\t\t{contStepout, 28}})\n}\n\nfunc TestStepOnCallPtrInstr(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"teststepprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 10)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tfound := false\n\n\t\tfor {\n\t\t\t_, ln := currentLineNumber(p, t)\n\t\t\tif ln != 10 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tregs, err := p.CurrentThread().Registers()\n\t\t\tassertNoError(err, t, \"Registers()\")\n\t\t\tpc := regs.PC()\n\t\t\ttext, err := proc.Disassemble(p.Memory(), regs, p.Breakpoints(), p.BinInfo(), pc, pc+uint64(p.BinInfo().Arch.MaxInstructionLength()))\n\t\t\tassertNoError(err, t, \"Disassemble()\")\n\t\t\tif text[0].IsCall() {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(grp.StepInstruction(false), t, \"StepInstruction()\")\n\t\t}\n\n\t\tif !found {\n\t\t\tt.Fatal(\"Could not find CALL instruction\")\n\t\t}\n\n\t\tassertNoError(grp.Step(), t, \"Step()\")\n\n\t\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 11) && !protest.RegabiSupported() {\n\t\t\tassertLineNumber(p, t, 6, \"Step continued to wrong line,\")\n\t\t} else {\n\t\t\tassertLineNumber(p, t, 5, \"Step continued to wrong line,\")\n\t\t}\n\t})\n}\n\nfunc TestIssue594(t *testing.T) {\n\tskipOn(t, \"upstream issue\", \"darwin\", \"lldb\")\n\t// debugserver will receive an EXC_BAD_ACCESS for this, at that point\n\t// there is no way to reconvert this exception into a unix signal and send\n\t// it to the process.\n\t// This is a bug in debugserver/lldb:\n\t//  https://bugs.llvm.org//show_bug.cgi?id=22868\n\n\t// Exceptions that aren't caused by breakpoints should be propagated\n\t// back to the target.\n\t// In particular the target should be able to cause a nil pointer\n\t// dereference panic and recover from it.\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue594\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tvar f string\n\t\tvar ln int\n\t\tif testBackend == \"rr\" {\n\t\t\tframe, err := findFirstNonRuntimeFrame(p)\n\t\t\tassertNoError(err, t, \"findFirstNonRuntimeFrame\")\n\t\t\tf, ln = frame.Current.File, frame.Current.Line\n\t\t} else {\n\t\t\tf, ln = currentLineNumber(p, t)\n\t\t}\n\t\tif ln != 21 {\n\t\t\tt.Fatalf(\"Program stopped at %s:%d, expected :21\", f, ln)\n\t\t}\n\t})\n}\n\nfunc TestStepOutPanicAndDirectCall(t *testing.T) {\n\t// StepOut should not step into a deferred function if it is called\n\t// directly, only if it is called through a panic.\n\t// Here we test the case where the function is called by a panic\n\ttestseq2(t, \"defercall\", \"\", []seqTest{\n\t\t{contContinue, 17},\n\t\t{contStepout, 6}})\n}\n\nfunc TestWorkDir(t *testing.T) {\n\twd := os.TempDir()\n\t// For Darwin `os.TempDir()` returns `/tmp` which is symlink to `/private/tmp`.\n\tif runtime.GOOS == \"darwin\" {\n\t\twd = \"/private/tmp\"\n\t}\n\tprotest.AllowRecording(t)\n\twithTestProcessArgs(\"workdir\", t, wd, []string{}, 0, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 14)\n\t\tgrp.Continue()\n\t\tv := evalVariable(p, t, \"pwd\")\n\t\tstr := constant.StringVal(v.Value)\n\t\tif wd != str {\n\t\t\tt.Fatalf(\"Expected %s got %s\\n\", wd, str)\n\t\t}\n\t})\n}\n\nfunc TestNegativeIntEvaluation(t *testing.T) {\n\ttestcases := []struct {\n\t\tname  string\n\t\ttyp   string\n\t\tvalue any\n\t}{\n\t\t{\"ni8\", \"int8\", int64(-5)},\n\t\t{\"ni16\", \"int16\", int64(-5)},\n\t\t{\"ni32\", \"int32\", int64(-5)},\n\t}\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tfor _, tc := range testcases {\n\t\t\tv := evalVariable(p, t, tc.name)\n\t\t\tif typ := v.RealType.String(); typ != tc.typ {\n\t\t\t\tt.Fatalf(\"Wrong type for variable %q: %q (expected: %q)\", tc.name, typ, tc.typ)\n\t\t\t}\n\t\t\tif val, _ := constant.Int64Val(v.Value); val != tc.value {\n\t\t\t\tt.Fatalf(\"Wrong value for variable %q: %v (expected: %v)\", tc.name, val, tc.value)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestIssue683(t *testing.T) {\n\t// Step panics when source file can not be found\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue683\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"First Continue()\")\n\t\tfor range 20 {\n\t\t\t// eventually an error about the source file not being found will be\n\t\t\t// returned, the important thing is that we shouldn't panic\n\t\t\terr := grp.Step()\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestIssue664(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue664\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 4)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(grp.Next(), t, \"Next()\")\n\t\tassertLineNumber(p, t, 5, \"Did not continue to correct location,\")\n\t})\n}\n\n// Benchmarks (*Process).Continue + (*Scope).FunctionArguments\nfunc BenchmarkTrace(b *testing.B) {\n\twithTestProcess(\"traceperf\", b, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, b, \"main.PerfCheck\")\n\t\tb.ResetTimer()\n\t\tfor i := 0; i < b.N; i++ {\n\t\t\tassertNoError(grp.Continue(), b, \"Continue()\")\n\t\t\ts, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\t\tassertNoError(err, b, \"Scope()\")\n\t\t\t_, err = s.FunctionArguments(proc.LoadConfig{false, 0, 64, 0, 3, 0})\n\t\t\tassertNoError(err, b, \"FunctionArguments()\")\n\t\t}\n\t\tb.StopTimer()\n\t})\n}\n\nfunc TestNextInDeferReturn(t *testing.T) {\n\t// runtime.deferreturn updates the G struct in a way that for one\n\t// instruction leaves the curg._defer field non-nil but with curg._defer.fn\n\t// field being nil.\n\t// We need to deal with this without panicking.\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"defercall\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"runtime.deferreturn\")\n\t\tassertNoError(grp.Continue(), t, \"First Continue()\")\n\n\t\t// Set a breakpoint on the deferred function so that the following loop\n\t\t// can not step out of the runtime.deferreturn and all the way to the\n\t\t// point where the target program panics.\n\t\tsetFunctionBreakpoint(p, t, \"main.sampleFunction\")\n\t\tfor i := range 20 {\n\t\t\tloc, err := proc.ThreadLocation(p.CurrentThread())\n\t\t\tassertNoError(err, t, \"CurrentThread().Location()\")\n\t\t\tt.Logf(\"at %#x %s:%d\", loc.PC, loc.File, loc.Line)\n\t\t\tif loc.Fn != nil && loc.Fn.Name == \"main.sampleFunction\" {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(grp.Next(), t, fmt.Sprintf(\"Next() %d\", i))\n\t\t}\n\t})\n}\n\nfunc TestAttachDetach(t *testing.T) {\n\tif testBackend == \"lldb\" && runtime.GOOS == \"linux\" {\n\t\tbs, _ := os.ReadFile(\"/proc/sys/kernel/yama/ptrace_scope\")\n\t\tif bs == nil || strings.TrimSpace(string(bs)) != \"0\" {\n\t\t\tt.Logf(\"can not run TestAttachDetach: %v\\n\", bs)\n\t\t\treturn\n\t\t}\n\t}\n\tif testBackend == \"rr\" {\n\t\treturn\n\t}\n\tvar buildFlags protest.BuildFlags\n\tif buildMode == \"pie\" {\n\t\tbuildFlags |= protest.BuildModePIE\n\t}\n\tfixture := protest.BuildFixture(t, \"testnextnethttp\", buildFlags)\n\tcmd := exec.Command(fixture.Path)\n\tcmd.Stdout = os.Stdout\n\tcmd.Stderr = os.Stderr\n\tassertNoError(cmd.Start(), t, \"starting fixture\")\n\n\t// Read port from PID-specific file and wait for testnextnethttp to start listening\n\tvar port int\n\tpid := cmd.Process.Pid\n\ttmpdir := os.TempDir()\n\tportFile := filepath.Join(tmpdir, fmt.Sprintf(\"testnextnethttp_port_%d\", pid))\n\n\t// Ensure cleanup of port file\n\tdefer func() {\n\t\tos.Remove(portFile)\n\t\tif cmd.Process != nil {\n\t\t\tcmd.Process.Kill()\n\t\t}\n\t}()\n\n\t// First wait for port file to be written\n\tt0 := time.Now()\n\tfor {\n\t\tif data, err := os.ReadFile(portFile); err == nil {\n\t\t\tif parsedPort, err := strconv.Atoi(strings.TrimSpace(string(data))); err == nil {\n\t\t\t\tport = parsedPort\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\ttime.Sleep(50 * time.Millisecond)\n\t\tif time.Since(t0) > 10*time.Second {\n\t\t\tt.Fatal(\"fixture did not write port file\")\n\t\t}\n\t}\n\n\t// Then wait for server to start listening\n\tt0 = time.Now()\n\tfor {\n\t\tconn, err := net.Dial(\"tcp\", fmt.Sprintf(\"127.0.0.1:%d\", port))\n\t\tif err == nil {\n\t\t\tconn.Close()\n\t\t\tbreak\n\t\t}\n\t\ttime.Sleep(50 * time.Millisecond)\n\t\tif time.Since(t0) > 10*time.Second {\n\t\t\tt.Fatal(\"fixture did not start listening\")\n\t\t}\n\t}\n\n\tvar p *proc.TargetGroup\n\tvar err error\n\n\tswitch testBackend {\n\tcase \"native\":\n\t\tp, err = native.Attach(cmd.Process.Pid, nil, []string{})\n\tcase \"lldb\":\n\t\tpath := \"\"\n\t\tif runtime.GOOS == \"darwin\" {\n\t\t\tpath = fixture.Path\n\t\t}\n\t\tp, err = gdbserial.LLDBAttach(cmd.Process.Pid, path, nil, []string{})\n\tdefault:\n\t\terr = fmt.Errorf(\"unknown backend %q\", testBackend)\n\t}\n\n\tassertNoError(err, t, \"Attach\")\n\tgo func() {\n\t\ttime.Sleep(1 * time.Second)\n\t\tresp, err := http.Get(fmt.Sprintf(\"http://127.0.0.1:%d\", port))\n\t\tif err == nil {\n\t\t\tresp.Body.Close()\n\t\t}\n\t}()\n\n\tassertNoError(p.Continue(), t, \"Continue\")\n\tassertLineNumber(p.Selected, t, 14, \"Did not continue to correct location,\")\n\n\tassertNoError(p.Detach(false), t, \"Detach\")\n\n\tif runtime.GOOS != \"darwin\" {\n\t\t// Debugserver sometimes will leave a zombie process after detaching, this\n\t\t// seems to be a bug with debugserver.\n\t\tresp, err := http.Get(fmt.Sprintf(\"http://127.0.0.1:%d/nobp\", port))\n\t\tassertNoError(err, t, \"Page request after detach\")\n\t\tbs, err := io.ReadAll(resp.Body)\n\t\tassertNoError(err, t, \"Reading /nobp page\")\n\t\tdefer resp.Body.Close()\n\t\tif out := string(bs); !strings.Contains(out, \"hello, world!\") {\n\t\t\tt.Fatalf(\"/nobp page does not contain \\\"hello, world!\\\": %q\", out)\n\t\t}\n\t}\n\n\tcmd.Process.Kill()\n}\n\nfunc TestVarSum(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tsumvar := evalVariable(p, t, \"s1[0] + s1[1]\")\n\t\tsumvarstr := constant.StringVal(sumvar.Value)\n\t\tif sumvarstr != \"onetwo\" {\n\t\t\tt.Fatalf(\"s1[0] + s1[1] == %q (expected \\\"onetwo\\\")\", sumvarstr)\n\t\t}\n\t\tif sumvar.Len != int64(len(sumvarstr)) {\n\t\t\tt.Fatalf(\"sumvar.Len == %d (expected %d)\", sumvar.Len, len(sumvarstr))\n\t\t}\n\t})\n}\n\nfunc TestPackageWithPathVar(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"pkgrenames\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tevalVariable(p, t, \"pkg.SomeVar\")\n\t\tevalVariable(p, t, \"pkg.SomeVar.X\")\n\t})\n}\n\nfunc TestEnvironment(t *testing.T) {\n\tprotest.AllowRecording(t)\n\tt.Setenv(\"SOMEVAR\", \"bah\")\n\twithTestProcess(\"testenv\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tv := evalVariable(p, t, \"x\")\n\t\tvv := constant.StringVal(v.Value)\n\t\tt.Logf(\"v = %q\", vv)\n\t\tif vv != \"bah\" {\n\t\t\tt.Fatalf(\"value of v is %q (expected \\\"bah\\\")\", vv)\n\t\t}\n\t})\n}\n\nfunc getFrameOff(p *proc.Target, t *testing.T) int64 {\n\tframeoffvar := evalVariable(p, t, \"runtime.frameoff\")\n\tframeoff, _ := constant.Int64Val(frameoffvar.Value)\n\treturn frameoff\n}\n\nfunc TestRecursiveNext(t *testing.T) {\n\tprotest.AllowRecording(t)\n\ttestcases := []nextTest{\n\t\t{6, 7},\n\t\t{7, 10},\n\t\t{10, 11},\n\t\t{11, 17},\n\t}\n\ttestseq(\"increment\", contNext, testcases, \"main.Increment\", t)\n\n\twithTestProcess(\"increment\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"main.Increment\")\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\terr := p.ClearBreakpoint(bp.Addr)\n\t\tassertNoError(err, t, \"ClearBreakpoint\")\n\t\tassertNoError(grp.Next(), t, \"Next 1\")\n\t\tassertNoError(grp.Next(), t, \"Next 2\")\n\t\tassertNoError(grp.Next(), t, \"Next 3\")\n\t\tframeoff0 := getFrameOff(p, t)\n\t\tassertNoError(grp.Step(), t, \"Step\")\n\t\tframeoff1 := getFrameOff(p, t)\n\t\tif frameoff0 == frameoff1 {\n\t\t\tt.Fatalf(\"did not step into function?\")\n\t\t}\n\t\tassertLineNumber(p, t, 6, \"program did not continue to expected location,\")\n\t\tassertNoError(grp.Next(), t, \"Next 4\")\n\t\tassertLineNumber(p, t, 7, \"program did not continue to expected location,\")\n\t\tassertNoError(grp.StepOut(), t, \"StepOut\")\n\t\tassertLineNumber(p, t, 11, \"program did not continue to expected location,\")\n\t\tframeoff2 := getFrameOff(p, t)\n\t\tif frameoff0 != frameoff2 {\n\t\t\tt.Fatalf(\"frame offset mismatch %x != %x\", frameoff0, frameoff2)\n\t\t}\n\t})\n}\n\n// TestIssue877 ensures that the environment variables starting with DYLD_ and LD_\n// are passed when executing the binary on OSX via debugserver\nfunc TestIssue877(t *testing.T) {\n\tif runtime.GOOS != \"darwin\" && testBackend == \"lldb\" {\n\t\treturn\n\t}\n\tconst envval = \"/usr/local/lib\"\n\tt.Setenv(\"DYLD_LIBRARY_PATH\", envval)\n\twithTestProcess(\"issue877\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tv := evalVariable(p, t, \"dyldenv\")\n\t\tvv := constant.StringVal(v.Value)\n\t\tt.Logf(\"v = %q\", vv)\n\t\tif vv != envval {\n\t\t\tt.Fatalf(\"value of v is %q (expected %q)\", vv, envval)\n\t\t}\n\t})\n}\n\nfunc TestIssue893(t *testing.T) {\n\t// Test what happens when next is called immediately after launching the\n\t// executable, acceptable behaviors are: (a) no error, (b) no source at PC\n\t// error, (c) program runs to completion\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"increment\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Next()\n\t\tif err == nil {\n\t\t\treturn\n\t\t}\n\t\tif _, ok := err.(*frame.ErrNoFDEForPC); ok {\n\t\t\treturn\n\t\t}\n\t\tif _, ok := err.(*proc.ErrNoSourceForPC); ok {\n\t\t\treturn\n\t\t}\n\t\tif _, ok := err.(proc.ErrProcessExited); ok {\n\t\t\treturn\n\t\t}\n\t\tassertNoError(err, t, \"Next\")\n\t})\n}\n\nfunc TestStepInstructionNoGoroutine(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"increment\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\t// Call StepInstruction immediately after launching the program, it should\n\t\t// work even though no goroutine is selected.\n\t\tassertNoError(grp.StepInstruction(false), t, \"StepInstruction\")\n\t})\n}\n\nfunc TestIssue871(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue871\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\n\t\tvar scope *proc.EvalScope\n\t\tvar err error\n\t\tif testBackend == \"rr\" {\n\t\t\tvar frame proc.Stackframe\n\t\t\tframe, err = findFirstNonRuntimeFrame(p)\n\t\t\tif err == nil {\n\t\t\t\tscope = proc.FrameToScope(p, p.Memory(), nil, 0, frame)\n\t\t\t}\n\t\t} else {\n\t\t\tscope, err = proc.GoroutineScope(p, p.CurrentThread())\n\t\t}\n\t\tassertNoError(err, t, \"scope\")\n\n\t\tlocals, err := scope.LocalVariables(normalLoadConfig)\n\t\tassertNoError(err, t, \"LocalVariables\")\n\n\t\tfoundA, foundB := false, false\n\n\t\tfor _, v := range locals {\n\t\t\tt.Logf(\"local %v\", v)\n\t\t\tswitch v.Name {\n\t\t\tcase \"a\":\n\t\t\t\tfoundA = true\n\t\t\t\tif v.Flags&proc.VariableEscaped == 0 {\n\t\t\t\t\tt.Errorf(\"variable a not flagged as escaped\")\n\t\t\t\t}\n\t\t\tcase \"b\":\n\t\t\t\tfoundB = true\n\t\t\t}\n\t\t}\n\n\t\tif !foundA {\n\t\t\tt.Errorf(\"variable a not found\")\n\t\t}\n\n\t\tif !foundB {\n\t\t\tt.Errorf(\"variable b not found\")\n\t\t}\n\t})\n}\n\nfunc TestShadowedFlag(t *testing.T) {\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 9, Rev: -1}) {\n\t\treturn\n\t}\n\twithTestProcess(\"testshadow\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\t\tlocals, err := scope.LocalVariables(normalLoadConfig)\n\t\tassertNoError(err, t, \"LocalVariables\")\n\t\tfoundShadowed := false\n\t\tfoundNonShadowed := false\n\t\tfor _, v := range locals {\n\t\t\tif v.Flags&proc.VariableShadowed != 0 {\n\t\t\t\tif v.Name != \"a\" {\n\t\t\t\t\tt.Errorf(\"wrong shadowed variable %s\", v.Name)\n\t\t\t\t}\n\t\t\t\tfoundShadowed = true\n\t\t\t\tif n, _ := constant.Int64Val(v.Value); n != 0 {\n\t\t\t\t\tt.Errorf(\"wrong value for shadowed variable a: %d\", n)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif v.Name != \"a\" {\n\t\t\t\t\tt.Errorf(\"wrong non-shadowed variable %s\", v.Name)\n\t\t\t\t}\n\t\t\t\tfoundNonShadowed = true\n\t\t\t\tif n, _ := constant.Int64Val(v.Value); n != 1 {\n\t\t\t\t\tt.Errorf(\"wrong value for non-shadowed variable a: %d\", n)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif !foundShadowed {\n\t\t\tt.Error(\"could not find any shadowed variable\")\n\t\t}\n\t\tif !foundNonShadowed {\n\t\t\tt.Error(\"could not find any non-shadowed variable\")\n\t\t}\n\t})\n}\n\nfunc TestDebugStripped(t *testing.T) {\n\t// Currently only implemented for Linux ELF and macOS Mach-O executables.\n\t// TODO(derekparker): Add support for PE.\n\tskipOn(t, \"not working on windows\", \"windows\")\n\tskipOn(t, \"not working on freebsd\", \"freebsd\")\n\tskipOn(t, \"not working on linux/386\", \"linux\", \"386\")\n\tskipOn(t, \"not working on linux/ppc64le when -gcflags=-N -l is passed\", \"linux\", \"ppc64le\")\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.IsDevelBuild() {\n\t\tt.Skip(\"not supported\")\n\t}\n\twithTestProcessArgs(\"testnextprog\", t, \"\", []string{}, protest.LinkStrip, func(p *proc.Target, grp *proc.TargetGroup, f protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\n\t\tloc, err := proc.FindFunctionLocation(p, \"main.main\", 0)\n\t\tassertNoError(err, t, \"main.main\")\n\t\tfilename, lineno, _ := p.BinInfo().PCToLine(loc[0])\n\t\t_, err = proc.FindFileLocation(p, filename, lineno)\n\t\tt.Logf(\"stripped breakpoint by line %s:%d: %v\", filename, lineno, err)\n\t\tif !strings.Contains(err.Error(), \"binary is stripped\") {\n\t\t\tt.Errorf(\"wrong error, expected reference to binary being stripped\")\n\t\t}\n\n\t\t_, err = proc.FindFunctionLocation(p, \"main.main\", 1)\n\t\tt.Logf(\"stripped breakpoint by function and line main.main:1: %v\", err)\n\t\tif !strings.Contains(err.Error(), \"binary is stripped\") {\n\t\t\tt.Errorf(\"wrong error, expected reference to binary being stripped\")\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tassertCurrentLocationFunction(p, t, \"main.main\")\n\t\tassertLineNumber(p, t, 37, \"first continue\")\n\t\tassertNoError(grp.Next(), t, \"Next\")\n\t\tassertLineNumber(p, t, 38, \"after next\")\n\n\t\t// Assert that commands like \"args\", \"locals\", etc... will\n\t\t// return an error instead of panic.\n\t\ts, err := proc.ThreadScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"ThreadScope\")\n\t\t_, err = s.Locals(0, \"\")\n\t\tif err == nil {\n\t\t\tt.Error(\"expected an error to be returned from scope.Locals in stripped binary\")\n\t\t}\n\t})\n}\n\nfunc TestDebugStripped2(t *testing.T) {\n\t// TODO(derekparker): Add support for PE.\n\tskipOn(t, \"not working on windows\", \"windows\")\n\tskipOn(t, \"not working on freebsd\", \"freebsd\")\n\tskipOn(t, \"not working on linux/386\", \"linux\", \"386\")\n\tskipOn(t, \"not working on linux/ppc64le when -gcflags=-N -l is passed\", \"linux\", \"ppc64le\")\n\tskipOn(t, \"not working on linux/riscv64\", \"linux\", \"riscv64\")\n\tskipOn(t, \"not working on linux/loong64\", \"linux\", \"loong64\")\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.IsDevelBuild() {\n\t\tt.Skip(\"not supported\")\n\t}\n\tif ver.Major > 0 && ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 22, Rev: -1}) {\n\t\tskipOn(t, \"not working on linux/arm64 with Go 1.22\", \"linux\", \"arm64\")\n\t}\n\twithTestProcessArgs(\"inlinestripped\", t, \"\", []string{}, protest.EnableInlining|protest.LinkStrip|protest.LinkDisableDWARF, func(p *proc.Target, grp *proc.TargetGroup, f protest.Fixture) {\n\t\tsetFunctionBreakpointAll(p, t, \"fmt.Println\")\n\n\t\tfor i, line := range []int{12, 13, 14} {\n\t\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\t\tassertCurrentLocationFunction(p, t, \"main.main\")\n\t\t\tassertLineNumber(p, t, line, fmt.Sprintf(\"continue %d\", i))\n\t\t}\n\t})\n}\n\nfunc TestIssue844(t *testing.T) {\n\t// Conditional breakpoints should not prevent next from working if their\n\t// condition isn't met.\n\twithTestProcess(\"nextcond\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 9)\n\t\tcondbp := setFileBreakpoint(p, t, fixture.Source, 10)\n\t\tcondbp.UserBreaklet().Cond = &ast.BinaryExpr{\n\t\t\tOp: token.EQL,\n\t\t\tX:  &ast.Ident{Name: \"n\"},\n\t\t\tY:  &ast.BasicLit{Kind: token.INT, Value: \"11\"},\n\t\t}\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tassertNoError(grp.Next(), t, \"Next\")\n\t\tassertLineNumber(p, t, 10, \"continued to wrong location,\")\n\t})\n}\n\nfunc logStacktrace(t *testing.T, p *proc.Target, frames []proc.Stackframe) {\n\tw := tabwriter.NewWriter(os.Stderr, 0, 0, 3, ' ', 0)\n\tfmt.Fprintf(w, \"\\n%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t%s\\t\\n\", \"Call PC\", \"Frame Offset\", \"Frame Pointer Offset\", \"PC\", \"Return\", \"Function\", \"Location\", \"Top Defer\", \"Defers\")\n\tfor j := range frames {\n\t\tname := \"?\"\n\t\tif frames[j].Current.Fn != nil {\n\t\t\tname = frames[j].Current.Fn.Name\n\t\t}\n\t\tif frames[j].Call.Fn != nil && frames[j].Current.Fn != frames[j].Call.Fn {\n\t\t\tname = fmt.Sprintf(\"%s inlined in %s\", frames[j].Call.Fn.Name, frames[j].Current.Fn.Name)\n\t\t}\n\n\t\ttopmostdefer := \"\"\n\t\tif frames[j].TopmostDefer != nil {\n\t\t\t_, _, fn := frames[j].TopmostDefer.DeferredFunc(p)\n\t\t\tfnname := \"\"\n\t\t\tif fn != nil {\n\t\t\t\tfnname = fn.Name\n\t\t\t}\n\t\t\ttopmostdefer = fmt.Sprintf(\"%#x %s\", frames[j].TopmostDefer.DwrapPC, fnname)\n\t\t}\n\n\t\tvar defers strings.Builder\n\t\tfor deferIdx, _defer := range frames[j].Defers {\n\t\t\t_, _, fn := _defer.DeferredFunc(p)\n\t\t\tfnname := \"\"\n\t\t\tif fn != nil {\n\t\t\t\tfnname = fn.Name\n\t\t\t}\n\t\t\tdefers.WriteString(fmt.Sprintf(\"%d %#x %s |\", deferIdx, _defer.DwrapPC, fnname))\n\t\t}\n\n\t\tframe := frames[j]\n\t\tfmt.Fprintf(w, \"%#x\\t%#x\\t%#x\\t%#x\\t%#x\\t%s\\t%s:%d\\t%s\\t%s\\t\\n\",\n\t\t\tframe.Call.PC, frame.FrameOffset(), frame.FramePointerOffset(), frame.Current.PC, frame.Ret,\n\t\t\tname, filepath.Base(frame.Call.File), frame.Call.Line, topmostdefer, defers.String())\n\t}\n\tw.Flush()\n}\n\n// stacktraceCheck checks that all the functions listed in tc appear in\n// frames in the same order.\n// Checks that all the functions in tc starting with \"C.\" or with \"!\" are in\n// a systemstack frame.\n// Returns a slice m where m[i] is the index in frames of the function tc[i]\n// or nil if any check fails.\nfunc stacktraceCheck(t *testing.T, tc []string, frames []proc.Stackframe) []int {\n\tm := make([]int, len(tc))\n\ti, j := 0, 0\n\tfor i < len(tc) {\n\t\ttcname := tc[i]\n\t\ttcsystem := strings.HasPrefix(tcname, \"C.\")\n\t\tif tcname[0] == '!' {\n\t\t\ttcsystem = true\n\t\t\ttcname = tcname[1:]\n\t\t}\n\t\tfor j < len(frames) {\n\t\t\tname := \"?\"\n\t\t\tif frames[j].Current.Fn != nil {\n\t\t\t\tname = frames[j].Current.Fn.Name\n\t\t\t}\n\t\t\tif name == tcname {\n\t\t\t\tm[i] = j\n\t\t\t\tif tcsystem != frames[j].SystemStack {\n\t\t\t\t\tt.Logf(\"system stack check failed for frame %d (expected %v got %v)\", j, tcsystem, frames[j].SystemStack)\n\t\t\t\t\tt.Logf(\"expected: %v\\n\", tc)\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tj++\n\t\t}\n\t\tif j >= len(frames) {\n\t\t\tt.Logf(\"couldn't find frame %d %s\", i, tc)\n\t\t\tt.Logf(\"expected: %v\\n\", tc)\n\t\t\treturn nil\n\t\t}\n\n\t\ti++\n\t}\n\treturn m\n}\n\nfunc frameInFile(frame proc.Stackframe, file string) bool {\n\tfor _, loc := range []proc.Location{frame.Current, frame.Call} {\n\t\tif !strings.HasSuffix(loc.File, file) && !strings.HasSuffix(loc.File, \"/\"+file) && !strings.HasSuffix(loc.File, \"\\\\\"+file) {\n\t\t\treturn false\n\t\t}\n\t\tif loc.Line <= 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc TestCgoStacktrace(t *testing.T) {\n\tif runtime.GOOS == \"windows\" {\n\t\tver, _ := goversion.Parse(runtime.Version())\n\t\tif ver.Major > 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 9, Rev: -1}) {\n\t\t\tt.Skip(\"disabled on windows with go before version 1.9\")\n\t\t}\n\t}\n\tif runtime.GOOS == \"darwin\" {\n\t\tver, _ := goversion.Parse(runtime.Version())\n\t\tif ver.Major > 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 8, Rev: -1}) {\n\t\t\tt.Skip(\"disabled on macOS with go before version 1.8\")\n\t\t}\n\t}\n\tskipOn(t, \"broken - cgo stacktraces\", \"386\")\n\tskipOn(t, \"broken - cgo stacktraces\", \"windows\", \"arm64\")\n\tskipOn(t, \"broken - cgo stacktraces\", \"linux\", \"ppc64le\")\n\tprotest.MustHaveCgo(t)\n\n\t// Tests that:\n\t// a) we correctly identify the goroutine while we are executing cgo code\n\t// b) that we can stitch together the system stack (where cgo code\n\t// executes) and the normal goroutine stack\n\n\t// Each test case describes how the stack trace should appear after a\n\t// continue. The first function on each test case is the topmost function\n\t// that should be found on the stack, the actual stack trace can have more\n\t// frame than those listed here but all the frames listed must appear in\n\t// the specified order.\n\ttestCases := [][]string{\n\t\t{\"main.main\"},\n\t\t{\"C.helloworld_pt2\", \"C.helloworld\", \"main.main\"},\n\t\t{\"main.helloWorldS\", \"main.helloWorld\", \"C.helloworld_pt2\", \"C.helloworld\", \"main.main\"},\n\t\t{\"C.helloworld_pt4\", \"C.helloworld_pt3\", \"main.helloWorldS\", \"main.helloWorld\", \"C.helloworld_pt2\", \"C.helloworld\", \"main.main\"},\n\t\t{\"main.helloWorld2\", \"C.helloworld_pt4\", \"C.helloworld_pt3\", \"main.helloWorldS\", \"main.helloWorld\", \"C.helloworld_pt2\", \"C.helloworld\", \"main.main\"}}\n\n\tvar gid int64\n\n\tframeOffs := map[string]int64{}\n\tframePointerOffs := map[string]int64{}\n\n\twithTestProcess(\"cgostacktest/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tfor itidx, tc := range testCases {\n\t\t\tt.Logf(\"iteration step %d\", itidx)\n\n\t\t\tassertNoError(grp.Continue(), t, fmt.Sprintf(\"Continue at iteration step %d\", itidx))\n\n\t\t\tg, err := proc.GetG(p.CurrentThread())\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"GetG at iteration step %d\", itidx))\n\n\t\t\tif itidx == 0 {\n\t\t\t\tgid = g.ID\n\t\t\t} else {\n\t\t\t\tif gid != g.ID {\n\t\t\t\t\tt.Fatalf(\"wrong goroutine id at iteration step %d (expected %d got %d)\", itidx, gid, g.ID)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tframes, err := proc.GoroutineStacktrace(p, g, 100, 0)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"Stacktrace at iteration step %d\", itidx))\n\n\t\t\tlogStacktrace(t, p, frames)\n\n\t\t\tm := stacktraceCheck(t, tc, frames)\n\t\t\tmismatch := m == nil\n\n\t\t\tfor i, j := range m {\n\t\t\t\tif strings.HasPrefix(tc[i], \"C.hellow\") {\n\t\t\t\t\tif !frameInFile(frames[j], \"hello.c\") {\n\t\t\t\t\t\tt.Logf(\"position in %q is %s:%d (call %s:%d)\", tc[i], frames[j].Current.File, frames[j].Current.Line, frames[j].Call.File, frames[j].Call.Line)\n\t\t\t\t\t\tmismatch = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif frameOff, ok := frameOffs[tc[i]]; ok {\n\t\t\t\t\tif frameOff != frames[j].FrameOffset() {\n\t\t\t\t\t\tt.Logf(\"frame %s offset mismatch\", tc[i])\n\t\t\t\t\t}\n\t\t\t\t\tif framePointerOffs[tc[i]] != frames[j].FramePointerOffset() {\n\t\t\t\t\t\tt.Logf(\"frame %s pointer offset mismatch, expected: %#v actual: %#v\", tc[i], framePointerOffs[tc[i]], frames[j].FramePointerOffset())\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tframeOffs[tc[i]] = frames[j].FrameOffset()\n\t\t\t\t\tframePointerOffs[tc[i]] = frames[j].FramePointerOffset()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// also check that ThreadStacktrace produces the same list of frames\n\t\t\tthreadFrames, err := proc.ThreadStacktrace(p, p.CurrentThread(), 100)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"ThreadStacktrace at iteration step %d\", itidx))\n\n\t\t\tif len(threadFrames) != len(frames) {\n\t\t\t\tmismatch = true\n\t\t\t} else {\n\t\t\t\tfor j := range frames {\n\t\t\t\t\tif frames[j].Current.File != threadFrames[j].Current.File || frames[j].Current.Line != threadFrames[j].Current.Line {\n\t\t\t\t\t\tt.Logf(\"stack mismatch between goroutine stacktrace and thread stacktrace\")\n\t\t\t\t\t\tt.Logf(\"thread stacktrace:\")\n\t\t\t\t\t\tlogStacktrace(t, p, threadFrames)\n\t\t\t\t\t\tmismatch = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif mismatch {\n\t\t\t\tt.Fatal(\"see previous loglines\")\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestCgoSources(t *testing.T) {\n\tif runtime.GOOS == \"windows\" {\n\t\tver, _ := goversion.Parse(runtime.Version())\n\t\tif ver.Major > 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 9, Rev: -1}) {\n\t\t\tt.Skip(\"disabled on windows with go before version 1.9\")\n\t\t}\n\t}\n\n\tif runtime.GOARCH == \"386\" {\n\t\tt.Skip(\"cgo stacktraces not supported on i386 for now\")\n\t}\n\n\tprotest.MustHaveCgo(t)\n\n\twithTestProcess(\"cgostacktest/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsources := p.BinInfo().Sources\n\t\tfor _, needle := range []string{\"main.go\", \"hello.c\"} {\n\t\t\tfound := false\n\t\t\tfor _, k := range sources {\n\t\t\t\tif strings.HasSuffix(k, needle) || strings.HasSuffix(k, \"/\"+needle) || strings.HasSuffix(k, \"\\\\\"+needle) {\n\t\t\t\t\tfound = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !found {\n\t\t\t\tt.Errorf(\"File %s not found\", needle)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestSystemstackStacktrace(t *testing.T) {\n\tskipOn(t, \"broken\", \"ppc64le\")\n\t// check that we can follow a stack switch initiated by runtime.systemstack()\n\twithTestProcess(\"panic\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"runtime.startpanic_m\")\n\t\tassertNoError(grp.Continue(), t, \"first continue\")\n\t\tassertNoError(grp.Continue(), t, \"second continue\")\n\t\tg, err := proc.GetG(p.CurrentThread())\n\t\tassertNoError(err, t, \"GetG\")\n\t\tframes, err := proc.GoroutineStacktrace(p, g, 100, 0)\n\t\tassertNoError(err, t, \"stacktrace\")\n\t\tlogStacktrace(t, p, frames)\n\t\tm := stacktraceCheck(t, []string{\"!runtime.startpanic_m\", \"runtime.gopanic\", \"main.main\"}, frames)\n\t\tif m == nil {\n\t\t\tt.Fatal(\"see previous loglines\")\n\t\t}\n\t})\n}\n\nfunc TestSystemstackOnRuntimeNewstack(t *testing.T) {\n\tskipOn(t, \"broken\", \"ppc64le\")\n\t// The bug being tested here manifests as follows:\n\t// - set a breakpoint somewhere or interrupt the program with Ctrl-C\n\t// - try to look at stacktraces of other goroutines\n\t// If one of the other goroutines is resizing its own stack the stack\n\t// command won't work for it.\n\twithTestProcess(\"binarytrees\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"first continue\")\n\n\t\tg, err := proc.GetG(p.CurrentThread())\n\t\tassertNoError(err, t, \"GetG\")\n\t\tmainGoroutineID := g.ID\n\n\t\tsetFunctionBreakpointAll(p, t, \"runtime.newstack\")\n\t\tfor {\n\t\t\tassertNoError(grp.Continue(), t, \"second continue\")\n\t\t\tg, err = proc.GetG(p.CurrentThread())\n\t\t\tassertNoError(err, t, \"GetG\")\n\t\t\tif g.ID == mainGoroutineID {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tframes, err := proc.GoroutineStacktrace(p, g, 100, 0)\n\t\tassertNoError(err, t, \"stacktrace\")\n\t\tlogStacktrace(t, p, frames)\n\t\tm := stacktraceCheck(t, []string{\"!runtime.newstack\", \"main.main\"}, frames)\n\t\tif m == nil {\n\t\t\tt.Fatal(\"see previous loglines\")\n\t\t}\n\t})\n}\n\nfunc TestIssue1034(t *testing.T) {\n\tskipOn(t, \"broken - cgo stacktraces\", \"386\")\n\tprotest.MustHaveCgo(t)\n\n\t// The external linker on macOS produces an abbrev for DW_TAG_subprogram\n\t// without the \"has children\" flag, we should support this.\n\twithTestProcess(\"cgostacktest/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tframes, err := proc.GoroutineStacktrace(p, p.SelectedGoroutine(), 10, 0)\n\t\tassertNoError(err, t, \"Stacktrace\")\n\t\tscope := proc.FrameToScope(p, p.Memory(), nil, 0, frames[2:]...)\n\t\targs, _ := scope.FunctionArguments(normalLoadConfig)\n\t\tassertNoError(err, t, \"FunctionArguments()\")\n\t\tif len(args) > 0 {\n\t\t\tt.Fatalf(\"wrong number of arguments for frame %v (%d)\", frames[2], len(args))\n\t\t}\n\t})\n}\n\nfunc TestIssue1008(t *testing.T) {\n\tskipOn(t, \"broken - cgo stacktraces\", \"386\")\n\tprotest.MustHaveCgo(t)\n\n\t// The external linker on macOS inserts \"end of sequence\" extended opcodes\n\t// in debug_line. which we should support correctly.\n\twithTestProcess(\"cgostacktest/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tloc, err := proc.ThreadLocation(p.CurrentThread())\n\t\tassertNoError(err, t, \"CurrentThread().Location()\")\n\t\tt.Logf(\"location %v\\n\", loc)\n\t\tif !strings.HasSuffix(loc.File, \"/main.go\") {\n\t\t\tt.Errorf(\"unexpected location %s:%d\\n\", loc.File, loc.Line)\n\t\t}\n\t\tif loc.Line > 35 {\n\t\t\tt.Errorf(\"unexpected location %s:%d (file only has 34 lines)\\n\", loc.File, loc.Line)\n\t\t}\n\t})\n}\n\nfunc testDeclLineCount(t *testing.T, p *proc.Target, lineno int, tgtvars []string) {\n\tsort.Strings(tgtvars)\n\n\tassertLineNumber(p, t, lineno, \"Program did not continue to correct next location\")\n\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\tt.Logf(\"scope PC: %#x\\n\", scope.PC)\n\tassertNoError(err, t, fmt.Sprintf(\"GoroutineScope (:%d)\", lineno))\n\tvars, err := scope.Locals(0, \"\")\n\tassertNoError(err, t, fmt.Sprintf(\"Locals (:%d)\", lineno))\n\tif len(vars) != len(tgtvars) {\n\t\tt.Fatalf(\"wrong number of variables %d (:%d)\", len(vars), lineno)\n\t}\n\toutvars := make([]string, len(vars))\n\tfor i, v := range vars {\n\t\toutvars[i] = v.Name\n\t}\n\tsort.Strings(outvars)\n\n\tfor i := range outvars {\n\t\tif tgtvars[i] != outvars[i] {\n\t\t\tt.Fatalf(\"wrong variables, got: %q expected %q\\n\", outvars, tgtvars)\n\t\t}\n\t}\n}\n\nfunc TestDeclLine(t *testing.T) {\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major > 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\tt.Skip(\"go 1.9 and prior versions do not emit DW_AT_decl_line\")\n\t}\n\n\twithTestProcess(\"decllinetest\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 8)\n\t\tsetFileBreakpoint(p, t, fixture.Source, 9)\n\t\tsetFileBreakpoint(p, t, fixture.Source, 10)\n\t\tsetFileBreakpoint(p, t, fixture.Source, 11)\n\t\tb := setFunctionBreakpoint(p, t, \"main.f1\")\n\t\tif b.Line != 14 {\n\t\t\t// Line 14 is hard-coded below.\n\t\t\tt.Fatalf(\"expected \\\"main.f1\\\" breakpoint to be set on line 14, but got line: %d\", b.Line)\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 1\")\n\t\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 15) {\n\t\t\ttestDeclLineCount(t, p, 8, []string{})\n\t\t} else {\n\t\t\ttestDeclLineCount(t, p, 8, []string{\"a\"})\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\t\ttestDeclLineCount(t, p, 9, []string{\"a\"})\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 3\")\n\t\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 15) {\n\t\t\ttestDeclLineCount(t, p, 10, []string{\"a\"})\n\t\t} else {\n\t\t\ttestDeclLineCount(t, p, 10, []string{\"a\", \"b\"})\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 4\")\n\t\ttestDeclLineCount(t, p, 11, []string{\"a\", \"b\"})\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 5\")\n\t\t// On line 14, we expect the function's arguments to be available, even\n\t\t// though their DW_AT_decl_line declares higher line numbers. The decl_line\n\t\t// is supposed to be ignored for the visibility of arguments.\n\t\ttestDeclLineCount(t, p, 14, []string{\"a\", \"b\"})\n\t})\n}\n\nfunc TestIssue1137(t *testing.T) {\n\twithTestProcess(\"dotpackagesiface\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tv := evalVariable(p, t, \"iface\")\n\t\tassertNoError(v.Unreadable, t, \"iface unreadable\")\n\t\tv2 := evalVariable(p, t, \"iface2\")\n\t\tassertNoError(v2.Unreadable, t, \"iface2 unreadable\")\n\t})\n}\n\nfunc TestIssue1101(t *testing.T) {\n\t// If a breakpoint is hit close to process death on a thread that isn't the\n\t// group leader the process could die while we are trying to stop it.\n\t//\n\t// This can be easily reproduced by having the goroutine that's executing\n\t// main.main (which will almost always run on the thread group leader) wait\n\t// for a second goroutine before exiting, then setting a breakpoint on the\n\t// second goroutine and stepping through it (see TestIssue1101 in\n\t// proc_test.go).\n\t//\n\t// When stepping over the return instruction of main.f the deferred\n\t// wg.Done() call will be executed which will cause the main goroutine to\n\t// resume and proceed to exit. Both the temporary breakpoint on wg.Done and\n\t// the temporary breakpoint on the return address of main.f will be in\n\t// close proximity to main.main calling os.Exit() and causing the death of\n\t// the thread group leader.\n\n\twithTestProcess(\"issue1101\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.f\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(grp.Next(), t, \"Next() 1\")\n\t\tassertNoError(grp.Next(), t, \"Next() 2\")\n\t\tlastCmd := \"Next() 3\"\n\t\texitErr := grp.Next()\n\t\tif exitErr == nil {\n\t\t\tlastCmd = \"final Continue()\"\n\t\t\texitErr = grp.Continue()\n\t\t}\n\t\tif pexit, exited := exitErr.(proc.ErrProcessExited); exited {\n\t\t\tif pexit.Status != 2 && testBackend != \"lldb\" && (runtime.GOOS != \"linux\" || runtime.GOARCH != \"386\") {\n\t\t\t\t// Looks like there's a bug with debugserver on macOS that sometimes\n\t\t\t\t// will report exit status 0 instead of the proper exit status.\n\t\t\t\t//\n\t\t\t\t// Also it seems that sometimes on linux/386 we will not receive the\n\t\t\t\t// exit status. This happens if the process exits at the same time as it\n\t\t\t\t// receives a signal.\n\t\t\t\tt.Fatalf(\"process exited status %d (expected 2) (last command = %s) (%#v)\", pexit.Status, lastCmd, pexit)\n\t\t\t}\n\t\t} else {\n\t\t\tassertNoError(exitErr, t, lastCmd)\n\t\t\tt.Fatalf(\"process did not exit after %s\", lastCmd)\n\t\t}\n\t})\n}\n\nfunc TestIssue1145(t *testing.T) {\n\twithTestProcess(\"sleep\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 18)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tresumeChan := make(chan struct{}, 1)\n\t\tgrp.ResumeNotify(resumeChan)\n\t\tgo func() {\n\t\t\t<-resumeChan\n\t\t\ttime.Sleep(100 * time.Millisecond)\n\t\t\tgrp.RequestManualStop()\n\t\t}()\n\n\t\tassertNoError(grp.Next(), t, \"Next()\")\n\t\tif p.Breakpoints().HasSteppingBreakpoints() {\n\t\t\tt.Fatal(\"has internal breakpoints after manual stop request\")\n\t\t}\n\t})\n}\n\nfunc TestHaltKeepsSteppingBreakpoints(t *testing.T) {\n\twithTestProcess(\"sleep\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tgrp.KeepSteppingBreakpoints = proc.HaltKeepsSteppingBreakpoints\n\t\tsetFileBreakpoint(p, t, fixture.Source, 18)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tresumeChan := make(chan struct{}, 1)\n\t\tgrp.ResumeNotify(resumeChan)\n\t\tgo func() {\n\t\t\t<-resumeChan\n\t\t\ttime.Sleep(100 * time.Millisecond)\n\t\t\tgrp.RequestManualStop()\n\t\t}()\n\n\t\tassertNoError(grp.Next(), t, \"Next()\")\n\t\tif !p.Breakpoints().HasSteppingBreakpoints() {\n\t\t\tt.Fatal(\"does not have internal breakpoints after manual stop request\")\n\t\t}\n\t})\n}\n\nfunc TestDisassembleGlobalVars(t *testing.T) {\n\tskipOn(t, \"broken - global variable symbolication\", \"arm64\")   // On ARM64 symLookup can't look up variables due to how they are loaded, see issue #1778\n\tskipOn(t, \"broken - global variable symbolication\", \"ppc64le\") // See comment on ARM64 above.\n\tskipOn(t, \"broken - global variable symbolication\", \"riscv64\")\n\tskipOn(t, \"broken - global variable symbolication\", \"loong64\")\n\t// On 386 linux when pie, the generated code use __x86.get_pc_thunk to ensure position-independent.\n\t// Locate global variable by\n\t//    `CALL __x86.get_pc_thunk.ax(SB) 0xb0f7f\n\t//     LEAL 0xc0a19(AX), AX`\n\t// dynamically.\n\tif runtime.GOARCH == \"386\" && runtime.GOOS == \"linux\" && buildMode == \"pie\" {\n\t\tt.Skip(\"On 386 linux when pie, symLookup can't look up global variables\")\n\t}\n\twithTestProcess(\"teststepconcurrent\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tmainfn := p.BinInfo().LookupFunc()[\"main.main\"][0]\n\t\tregs, _ := p.CurrentThread().Registers()\n\t\ttext, err := proc.Disassemble(p.Memory(), regs, p.Breakpoints(), p.BinInfo(), mainfn.Entry, mainfn.End)\n\t\tassertNoError(err, t, \"Disassemble\")\n\t\tfound := false\n\t\tfor i := range text {\n\t\t\tif strings.Index(text[i].Text(proc.IntelFlavour, p.BinInfo()), \"main.v\") > 0 {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatalf(\"could not find main.v reference in disassembly\")\n\t\t}\n\t})\n}\n\nfunc checkFrame(frame proc.Stackframe, fnname, file string, line int, inlined bool) error {\n\tif frame.Call.Fn == nil || frame.Call.Fn.Name != fnname {\n\t\treturn fmt.Errorf(\"wrong function name: %s\", fnname)\n\t}\n\tif file != \"\" {\n\t\tif frame.Call.File != file || frame.Call.Line != line {\n\t\t\treturn fmt.Errorf(\"wrong file:line %s:%d\", frame.Call.File, frame.Call.Line)\n\t\t}\n\t}\n\tif frame.Inlined != inlined {\n\t\tif inlined {\n\t\t\treturn errors.New(\"not inlined\")\n\t\t}\n\t\treturn errors.New(\"inlined\")\n\t}\n\treturn nil\n}\n\nfunc TestAllPCsForFileLines(t *testing.T) {\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Versions of go before 1.10 do not have DWARF information for inlined calls\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\twithTestProcessArgs(\"testinline\", t, \".\", []string{}, protest.EnableInlining, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tl2pcs := p.BinInfo().AllPCsForFileLines(fixture.Source, []int{7, 20})\n\t\tif len(l2pcs) != 2 {\n\t\t\tt.Fatalf(\"expected two map entries for %s:{%d,%d} (got %d: %v)\", fixture.Source, 7, 20, len(l2pcs), l2pcs)\n\t\t}\n\t\tpcs := l2pcs[20]\n\t\tif len(pcs) < 1 {\n\t\t\tt.Fatalf(\"expected at least one location for %s:%d (got %d: %#x)\", fixture.Source, 20, len(pcs), pcs)\n\t\t}\n\t\tpcs = l2pcs[7]\n\t\tif len(pcs) < 2 {\n\t\t\tt.Fatalf(\"expected at least two locations for %s:%d (got %d: %#x)\", fixture.Source, 7, len(pcs), pcs)\n\t\t}\n\t})\n}\n\nfunc TestInlinedStacktraceAndVariables(t *testing.T) {\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Versions of go before 1.10 do not have DWARF information for inlined calls\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\n\tfirstCallCheck := &scopeCheck{\n\t\tline: 7,\n\t\tok:   false,\n\t\tvarChecks: []varCheck{\n\t\t\t{\n\t\t\t\tname:   \"a\",\n\t\t\t\ttyp:    \"int\",\n\t\t\t\tkind:   reflect.Int,\n\t\t\t\thasVal: true,\n\t\t\t\tintVal: 3,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname:   \"z\",\n\t\t\t\ttyp:    \"int\",\n\t\t\t\tkind:   reflect.Int,\n\t\t\t\thasVal: true,\n\t\t\t\tintVal: 9,\n\t\t\t},\n\t\t},\n\t}\n\n\tsecondCallCheck := &scopeCheck{\n\t\tline: 7,\n\t\tok:   false,\n\t\tvarChecks: []varCheck{\n\t\t\t{\n\t\t\t\tname:   \"a\",\n\t\t\t\ttyp:    \"int\",\n\t\t\t\tkind:   reflect.Int,\n\t\t\t\thasVal: true,\n\t\t\t\tintVal: 4,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname:   \"z\",\n\t\t\t\ttyp:    \"int\",\n\t\t\t\tkind:   reflect.Int,\n\t\t\t\thasVal: true,\n\t\t\t\tintVal: 16,\n\t\t\t},\n\t\t},\n\t}\n\n\twithTestProcessArgs(\"testinline\", t, \".\", []string{}, protest.EnableInlining, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tpcs, err := proc.FindFileLocation(p, fixture.Source, 7)\n\t\tassertNoError(err, t, \"LineToPC\")\n\t\tif len(pcs) < 2 {\n\t\t\tt.Fatalf(\"expected at least two locations for %s:%d (got %d: %#x)\", fixture.Source, 7, len(pcs), pcs)\n\t\t}\n\t\tfor _, pc := range pcs {\n\t\t\tt.Logf(\"setting breakpoint at %#x\\n\", pc)\n\t\t\t_, err := p.SetBreakpoint(0, pc, proc.UserBreakpoint, nil)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"SetBreakpoint(%#x)\", pc))\n\t\t}\n\n\t\t// first inlined call\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tframes, err := proc.ThreadStacktrace(p, p.CurrentThread(), 20)\n\t\tassertNoError(err, t, \"ThreadStacktrace\")\n\t\tt.Logf(\"Stacktrace:\\n\")\n\t\tfor i := range frames {\n\t\t\tt.Logf(\"\\t%s at %s:%d (%#x)\\n\", frames[i].Call.Fn.Name, frames[i].Call.File, frames[i].Call.Line, frames[i].Current.PC)\n\t\t}\n\n\t\tif err := checkFrame(frames[0], \"main.inlineThis\", fixture.Source, 7, true); err != nil {\n\t\t\tt.Fatalf(\"Wrong frame 0: %v\", err)\n\t\t}\n\t\tif err := checkFrame(frames[1], \"main.main\", fixture.Source, 18, false); err != nil {\n\t\t\tt.Fatalf(\"Wrong frame 1: %v\", err)\n\t\t}\n\n\t\tif avar, _ := constant.Int64Val(evalVariable(p, t, \"a\").Value); avar != 3 {\n\t\t\tt.Fatalf(\"value of 'a' variable is not 3 (%d)\", avar)\n\t\t}\n\t\tif zvar, _ := constant.Int64Val(evalVariable(p, t, \"z\").Value); zvar != 9 {\n\t\t\tt.Fatalf(\"value of 'z' variable is not 9 (%d)\", zvar)\n\t\t}\n\n\t\tif _, ok := firstCallCheck.checkLocalsAndArgs(p, t); !ok {\n\t\t\tt.Fatalf(\"exiting for past errors\")\n\t\t}\n\n\t\t// second inlined call\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tframes, err = proc.ThreadStacktrace(p, p.CurrentThread(), 20)\n\t\tassertNoError(err, t, \"ThreadStacktrace (2)\")\n\t\tt.Logf(\"Stacktrace 2:\\n\")\n\t\tfor i := range frames {\n\t\t\tt.Logf(\"\\t%s at %s:%d (%#x)\\n\", frames[i].Call.Fn.Name, frames[i].Call.File, frames[i].Call.Line, frames[i].Current.PC)\n\t\t}\n\n\t\tif err := checkFrame(frames[0], \"main.inlineThis\", fixture.Source, 7, true); err != nil {\n\t\t\tt.Fatalf(\"Wrong frame 0: %v\", err)\n\t\t}\n\t\tif err := checkFrame(frames[1], \"main.main\", fixture.Source, 19, false); err != nil {\n\t\t\tt.Fatalf(\"Wrong frame 1: %v\", err)\n\t\t}\n\n\t\tif avar, _ := constant.Int64Val(evalVariable(p, t, \"a\").Value); avar != 4 {\n\t\t\tt.Fatalf(\"value of 'a' variable is not 3 (%d)\", avar)\n\t\t}\n\t\tif zvar, _ := constant.Int64Val(evalVariable(p, t, \"z\").Value); zvar != 16 {\n\t\t\tt.Fatalf(\"value of 'z' variable is not 9 (%d)\", zvar)\n\t\t}\n\t\tif bvar, err := evalVariableOrError(p, \"b\"); err == nil {\n\t\t\tt.Fatalf(\"expected error evaluating 'b', but it succeeded instead: %v\", bvar)\n\t\t}\n\n\t\tif _, ok := secondCallCheck.checkLocalsAndArgs(p, t); !ok {\n\t\t\tt.Fatalf(\"exiting for past errors\")\n\t\t}\n\t})\n}\n\nfunc TestInlineFunctionList(t *testing.T) {\n\t// We should be able to list all functions, even inlined ones.\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Versions of go before 1.10 do not have DWARF information for inlined calls\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\tif runtime.GOOS == \"windows\" && runtime.GOARCH == \"arm64\" {\n\t\t// TODO(qmuntal): seems to be an upstream issue, investigate.\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\twithTestProcessArgs(\"testinline\", t, \".\", []string{}, protest.EnableInlining|protest.EnableOptimization, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tvar found bool\n\t\tfor _, fn := range p.BinInfo().Functions {\n\t\t\tif strings.Contains(fn.Name, \"inlineThis\") {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatal(\"inline function not returned\")\n\t\t}\n\t})\n}\n\nfunc TestInlineBreakpoint(t *testing.T) {\n\t// We should be able to set a breakpoint on the call site of an inlined function.\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Versions of go before 1.10 do not have DWARF information for inlined calls\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\twithTestProcessArgs(\"testinline\", t, \".\", []string{}, protest.EnableInlining|protest.EnableOptimization, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tpcs, err := proc.FindFileLocation(p, fixture.Source, 17)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tt.Logf(\"%#v\\n\", pcs)\n\t\tif len(pcs) != 1 {\n\t\t\tt.Fatalf(\"unable to get PC for inlined function call: %v\", pcs)\n\t\t}\n\t\tfn := p.BinInfo().PCToFunc(pcs[0])\n\t\texpectedFn := \"main.main\"\n\t\tif fn.Name != expectedFn {\n\t\t\tt.Fatalf(\"incorrect function returned, expected %s, got %s\", expectedFn, fn.Name)\n\t\t}\n\t\t_, err = p.SetBreakpoint(0, pcs[0], proc.UserBreakpoint, nil)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"unable to set breakpoint: %v\", err)\n\t\t}\n\t})\n}\n\nfunc TestDoubleInlineBreakpoint(t *testing.T) {\n\t// We should be able to set a breakpoint on an inlined function that\n\t// has been inlined within an inlined function.\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Versions of go before 1.10 do not have DWARF information for inlined calls\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\twithTestProcessArgs(\"doubleinline\", t, \".\", []string{}, protest.EnableInlining|protest.EnableOptimization, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tfns, err := p.BinInfo().FindFunction(\"main.(*Rectangle).Height\")\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif len(fns) != 1 {\n\t\t\tt.Fatalf(\"expected one function for Height, got %d\", len(fns))\n\t\t}\n\t\tif len(fns[0].InlinedCalls) != 1 {\n\t\t\tt.Fatalf(\"expected one inlined call for Height, got %d\", len(fns[0].InlinedCalls))\n\t\t}\n\t})\n}\n\nfunc TestIssue951(t *testing.T) {\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 9, Rev: -1}) {\n\t\tt.Skip(\"scopes not implemented in <=go1.8\")\n\t}\n\n\twithTestProcess(\"issue951\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\t\targs, err := scope.FunctionArguments(normalLoadConfig)\n\t\tassertNoError(err, t, \"FunctionArguments\")\n\t\tt.Logf(\"%#v\", args[0])\n\t\tif args[0].Flags&proc.VariableShadowed == 0 {\n\t\t\tt.Error(\"argument is not shadowed\")\n\t\t}\n\t\tvars, err := scope.LocalVariables(normalLoadConfig)\n\t\tassertNoError(err, t, \"LocalVariables\")\n\t\tshadowed, notShadowed := 0, 0\n\t\tfor i := range vars {\n\t\t\tt.Logf(\"var %d: %#v\\n\", i, vars[i])\n\t\t\tif vars[i].Flags&proc.VariableShadowed != 0 {\n\t\t\t\tshadowed++\n\t\t\t} else {\n\t\t\t\tnotShadowed++\n\t\t\t}\n\t\t}\n\t\tif shadowed != 1 || notShadowed != 1 {\n\t\t\tt.Errorf(\"Wrong number of shadowed/non-shadowed local variables: %d %d\", shadowed, notShadowed)\n\t\t}\n\t})\n}\n\nfunc TestDWZCompression(t *testing.T) {\n\tskipOn(t, \"broken\", \"ppc64le\")\n\t// If dwz is not available in the system, skip this test\n\tif _, err := exec.LookPath(\"dwz\"); err != nil {\n\t\tt.Skip(\"dwz not installed\")\n\t}\n\n\twithTestProcessArgs(\"dwzcompression\", t, \".\", []string{}, protest.EnableDWZCompression, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"C.fortytwo\")\n\t\tassertNoError(grp.Continue(), t, \"first Continue()\")\n\t\tval := evalVariable(p, t, \"stdin\")\n\t\tif val.RealType == nil {\n\t\t\tt.Errorf(\"Can't find type for \\\"stdin\\\" global variable\")\n\t\t}\n\t})\n}\n\nfunc TestMapLoadConfigWithReslice(t *testing.T) {\n\t// Check that load configuration is respected for resliced maps.\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tzolotovLoadCfg := proc.LoadConfig{FollowPointers: true, MaxStructFields: -1, MaxVariableRecurse: 3, MaxStringLen: 10, MaxArrayValues: 10}\n\t\tassertNoError(grp.Continue(), t, \"First Continue()\")\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\t\tm1, err := scope.EvalExpression(\"m1\", zolotovLoadCfg)\n\t\tassertNoError(err, t, \"EvalVariable\")\n\t\tt.Logf(\"m1 returned children %d (%d)\", len(m1.Children)/2, m1.Len)\n\n\t\texpr := fmt.Sprintf(\"(*(*%q)(%d))[10:]\", m1.DwarfType.String(), m1.Addr)\n\t\tt.Logf(\"expr %q\\n\", expr)\n\n\t\tm1cont, err := scope.EvalExpression(expr, zolotovLoadCfg)\n\t\tassertNoError(err, t, \"EvalVariable\")\n\n\t\tt.Logf(\"m1cont returned children %d\", len(m1cont.Children)/2)\n\n\t\tif len(m1cont.Children) != 20 {\n\t\t\tt.Fatalf(\"wrong number of children returned %d\\n\", len(m1cont.Children)/2)\n\t\t}\n\t})\n}\n\nfunc TestStepOutReturn(t *testing.T) {\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\tt.Skip(\"return variables aren't marked on 1.9 or earlier\")\n\t}\n\twithTestProcess(\"stepoutret\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.stepout\")\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tassertNoError(grp.StepOut(), t, \"StepOut\")\n\t\tret := p.CurrentThread().Common().ReturnValues(normalLoadConfig)\n\t\tif len(ret) != 2 {\n\t\t\tt.Fatalf(\"wrong number of return values %v\", ret)\n\t\t}\n\n\t\tstridx := 0\n\t\tnumidx := 1\n\n\t\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 12) {\n\t\t\t// in 1.11 and earlier the order of return values in DWARF is\n\t\t\t// unspecified, in 1.11 and later it follows the order of definition\n\t\t\t// specified by the user\n\t\t\tfor i := range ret {\n\t\t\t\tif ret[i].Name == \"str\" {\n\t\t\t\t\tstridx = i\n\t\t\t\t\tnumidx = 1 - i\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ret[stridx].Name != \"str\" {\n\t\t\tt.Fatalf(\"(str) bad return value name %s\", ret[stridx].Name)\n\t\t}\n\t\tif ret[stridx].Kind != reflect.String {\n\t\t\tt.Fatalf(\"(str) bad return value kind %v\", ret[stridx].Kind)\n\t\t}\n\t\tif s := constant.StringVal(ret[stridx].Value); s != \"return 47\" {\n\t\t\tt.Fatalf(\"(str) bad return value %q\", s)\n\t\t}\n\n\t\tif ret[numidx].Name != \"num\" {\n\t\t\tt.Fatalf(\"(num) bad return value name %s\", ret[numidx].Name)\n\t\t}\n\t\tif ret[numidx].Kind != reflect.Int {\n\t\t\tt.Fatalf(\"(num) bad return value kind %v\", ret[numidx].Kind)\n\t\t}\n\t\tif n, _ := constant.Int64Val(ret[numidx].Value); n != 48 {\n\t\t\tt.Fatalf(\"(num) bad return value %d\", n)\n\t\t}\n\t})\n}\n\nfunc TestOptimizationCheck(t *testing.T) {\n\twithTestProcess(\"continuetestprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tfn := p.BinInfo().LookupFunc()[\"main.main\"][0]\n\t\tif fn.Optimized() {\n\t\t\tt.Fatalf(\"main.main is optimized\")\n\t\t}\n\t})\n\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 10) {\n\t\twithTestProcessArgs(\"continuetestprog\", t, \".\", []string{}, protest.EnableOptimization|protest.EnableInlining, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\t\tfn := p.BinInfo().LookupFunc()[\"main.main\"][0]\n\t\t\tif !fn.Optimized() {\n\t\t\t\tt.Fatalf(\"main.main is not optimized\")\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestIssue1264(t *testing.T) {\n\t// It should be possible to set a breakpoint condition that consists only\n\t// of evaluating a single boolean variable.\n\twithTestProcess(\"issue1264\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 8)\n\t\tbp.UserBreaklet().Cond = &ast.Ident{Name: \"equalsTwo\"}\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertLineNumber(p, t, 8, \"after continue\")\n\t})\n}\n\nfunc TestReadDefer(t *testing.T) {\n\twithTestProcess(\"deferstack\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tframes, err := proc.GoroutineStacktrace(p, p.SelectedGoroutine(), 10, proc.StacktraceReadDefers)\n\t\tassertNoError(err, t, \"Stacktrace\")\n\n\t\tlogStacktrace(t, p, frames)\n\n\t\texamples := []struct {\n\t\t\tframeIdx     int\n\t\t\ttopmostDefer string\n\t\t\tdefers       []string\n\t\t}{\n\t\t\t// main.call3 (defers nothing, topmost defer main.f2)\n\t\t\t{0, \"main.f2\", []string{}},\n\n\t\t\t// main.call2 (defers main.f2, main.f3, topmost defer main.f2)\n\t\t\t{1, \"main.f2\", []string{\"main.f2\", \"main.f3\"}},\n\n\t\t\t// main.call1 (defers main.f1, main.f2, topmost defer main.f1)\n\t\t\t{2, \"main.f1\", []string{\"main.f1\", \"main.f2\"}},\n\n\t\t\t// main.main (defers nothing)\n\t\t\t{3, \"\", []string{}}}\n\n\t\tdefercheck := func(d *proc.Defer, deferName, tgt string, frameIdx int) {\n\t\t\tif d == nil {\n\t\t\t\tt.Fatalf(\"expected %q as %s of frame %d, got nothing\", tgt, deferName, frameIdx)\n\t\t\t}\n\t\t\tif d.Unreadable != nil {\n\t\t\t\tt.Fatalf(\"expected %q as %s of frame %d, got unreadable defer: %v\", tgt, deferName, frameIdx, d.Unreadable)\n\t\t\t}\n\t\t\t_, _, dfn := d.DeferredFunc(p)\n\t\t\tif dfn == nil {\n\t\t\t\tt.Fatalf(\"expected %q as %s of frame %d, got %#x\", tgt, deferName, frameIdx, d.DwrapPC)\n\t\t\t}\n\t\t\tif dfn.Name != tgt {\n\t\t\t\tt.Fatalf(\"expected %q as %s of frame %d, got %q\", tgt, deferName, frameIdx, dfn.Name)\n\t\t\t}\n\t\t}\n\n\t\tfor _, example := range examples {\n\t\t\tframe := &frames[example.frameIdx]\n\n\t\t\tif example.topmostDefer != \"\" {\n\t\t\t\tdefercheck(frame.TopmostDefer, \"topmost defer\", example.topmostDefer, example.frameIdx)\n\t\t\t}\n\n\t\t\tif len(example.defers) != len(frames[example.frameIdx].Defers) {\n\t\t\t\tt.Fatalf(\"expected %d defers for %d, got %v\", len(example.defers), example.frameIdx, frame.Defers)\n\t\t\t}\n\n\t\t\tfor deferIdx := range example.defers {\n\t\t\t\tdefercheck(frame.Defers[deferIdx], fmt.Sprintf(\"defer %d\", deferIdx), example.defers[deferIdx], example.frameIdx)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestReadDeferArgs(t *testing.T) {\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 17) {\n\t\t// When regabi is enabled in Go 1.17 and later, reading arguments of\n\t\t// deferred functions becomes significantly more complicated because of\n\t\t// the autogenerated code used to unpack the argument frame stored in\n\t\t// runtime._defer into registers.\n\t\t// We either need to know how to do the translation, implementing the ABI1\n\t\t// rules in Delve, or have some assistance from the compiler (for example\n\t\t// have the dwrap function contain entries for each of the captured\n\t\t// variables with a location describing their offset from DX).\n\t\t// Ultimately this feature is unimportant enough that we can leave it\n\t\t// disabled for now.\n\t\tt.Skip(\"unsupported\")\n\t}\n\tvar tests = []struct {\n\t\tframe, deferCall int\n\t\ta, b             int64\n\t}{\n\t\t{1, 1, 42, 61},\n\t\t{2, 2, 1, -1},\n\t}\n\n\twithTestProcess(\"deferstack\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tfor _, test := range tests {\n\t\t\tscope, err := proc.ConvertEvalScope(p, -1, test.frame, test.deferCall)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"ConvertEvalScope(-1, %d, %d)\", test.frame, test.deferCall))\n\n\t\t\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 17) {\n\t\t\t\t// In Go 1.17 deferred function calls can end up inside a wrapper, and\n\t\t\t\t// the scope for this evaluation needs to be the wrapper.\n\t\t\t\tif scope.Fn.Name != \"main.f2\" {\n\t\t\t\t\tt.Fatalf(\"expected function \\\"main.f2\\\" got %q\", scope.Fn.Name)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tavar, err := scope.EvalExpression(\"a\", normalLoadConfig)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t\tbvar, err := scope.EvalExpression(\"b\", normalLoadConfig)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\n\t\t\ta, _ := constant.Int64Val(avar.Value)\n\t\t\tb, _ := constant.Int64Val(bvar.Value)\n\n\t\t\tif a != test.a {\n\t\t\t\tt.Errorf(\"value of argument 'a' at frame %d, deferred call %d: %d (expected %d)\", test.frame, test.deferCall, a, test.a)\n\t\t\t}\n\n\t\t\tif b != test.b {\n\t\t\t\tt.Errorf(\"value of argument 'b' at frame %d, deferred call %d: %d (expected %d)\", test.frame, test.deferCall, b, test.b)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestIssue1374(t *testing.T) {\n\t// Continue did not work when stopped at a breakpoint immediately after calling CallFunction.\n\tskipOn(t, \"broken - pie mode\", \"linux\", \"ppc64le\", \"native\", \"pie\")\n\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\twithTestProcess(\"issue1374\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 7)\n\t\tassertNoError(grp.Continue(), t, \"First Continue\")\n\t\tassertLineNumber(p, t, 7, \"Did not continue to correct location (first continue),\")\n\t\tassertNoError(proc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), \"getNum()\", normalLoadConfig, true), t, \"Call\")\n\t\terr := grp.Continue()\n\t\tif _, isexited := err.(proc.ErrProcessExited); !isexited {\n\t\t\tregs, _ := p.CurrentThread().Registers()\n\t\t\tf, l, _ := p.BinInfo().PCToLine(regs.PC())\n\t\t\tt.Fatalf(\"expected process exited error got %v at %s:%d\", err, f, l)\n\t\t}\n\t})\n}\n\nfunc TestIssue1432(t *testing.T) {\n\t// Check that taking the address of a struct, casting it into a pointer to\n\t// the struct's type and then accessing a member field will still:\n\t// - perform auto-dereferencing on struct member access\n\t// - yield a Variable that's ultimately assignable (i.e. has an address)\n\twithTestProcess(\"issue1432\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tsvar := evalVariable(p, t, \"s\")\n\t\tt.Logf(\"%#x\", svar.Addr)\n\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope()\")\n\n\t\terr = scope.SetVariable(fmt.Sprintf(\"(*\\\"main.s\\\")(%#x).i\", svar.Addr), \"10\")\n\t\tassertNoError(err, t, \"SetVariable\")\n\t})\n}\n\nfunc TestGoroutinesInfoLimit(t *testing.T) {\n\twithTestProcess(\"teststepconcurrent\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 37)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tgcount := 0\n\t\tnextg := 0\n\t\tconst goroutinesInfoLimit = 10\n\t\tfor nextg >= 0 {\n\t\t\toldnextg := nextg\n\t\t\tvar gs []*proc.G\n\t\t\tvar err error\n\t\t\tgs, nextg, err = proc.GoroutinesInfo(p, nextg, goroutinesInfoLimit)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"GoroutinesInfo(%d, %d)\", oldnextg, goroutinesInfoLimit))\n\t\t\tgcount += len(gs)\n\t\t\tt.Logf(\"got %d goroutines\\n\", len(gs))\n\t\t}\n\n\t\tt.Logf(\"number of goroutines: %d\\n\", gcount)\n\n\t\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\tassertNoError(err, t, \"GoroutinesInfo(0, 0)\")\n\t\tt.Logf(\"number of goroutines (full scan): %d\\n\", gcount)\n\t\tif len(gs) != gcount {\n\t\t\tt.Fatalf(\"mismatch in the number of goroutines %d %d\\n\", gcount, len(gs))\n\t\t}\n\t})\n}\n\nfunc TestIssue1469(t *testing.T) {\n\twithTestProcess(\"issue1469\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 13)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tgid2thread := make(map[int64][]proc.Thread)\n\t\tfor _, thread := range p.ThreadList() {\n\t\t\tg, _ := proc.GetG(thread)\n\t\t\tif g == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tgid2thread[g.ID] = append(gid2thread[g.ID], thread)\n\t\t}\n\n\t\tfor gid := range gid2thread {\n\t\t\tif len(gid2thread[gid]) > 1 {\n\t\t\t\tt.Logf(\"too many threads running goroutine %d\", gid)\n\t\t\t\tfor _, thread := range gid2thread[gid] {\n\t\t\t\t\tt.Logf(\"\\tThread %d\", thread.ThreadID())\n\t\t\t\t\tframes, err := proc.ThreadStacktrace(p, thread, 20)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Logf(\"\\t\\tcould not get stacktrace %v\", err)\n\t\t\t\t\t}\n\t\t\t\t\tfor _, frame := range frames {\n\t\t\t\t\t\tt.Logf(\"\\t\\t%#x at %s:%d (systemstack: %v)\", frame.Call.PC, frame.Call.File, frame.Call.Line, frame.SystemStack)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestDeadlockBreakpoint(t *testing.T) {\n\tskipOn(t, \"upstream issue - https://github.com/golang/go/issues/29322\", \"pie\")\n\tdeadlockBp := proc.FatalThrow\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 11) {\n\t\tdeadlockBp = proc.UnrecoveredPanic\n\t}\n\twithTestProcess(\"testdeadlock\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tbp := p.CurrentThread().Breakpoint()\n\t\tif bp.Breakpoint == nil || bp.Logical.Name != deadlockBp {\n\t\t\tt.Fatalf(\"did not stop at deadlock breakpoint %v\", bp)\n\t\t}\n\t})\n}\n\nfunc TestListImages(t *testing.T) {\n\tprotest.MustHaveCgo(t)\n\tpluginFixtures := protest.WithPlugins(t, protest.AllNonOptimized, \"plugin1/\", \"plugin2/\")\n\n\twithTestProcessArgs(\"plugintest\", t, \".\", []string{pluginFixtures[0].Path, pluginFixtures[1].Path}, protest.AllNonOptimized, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tif !slices.Contains(p.BinInfo().Sources, fixture.Source) {\n\t\t\tt.Fatalf(\"could not find %s in sources: %q\\n\", fixture.Source, p.BinInfo().Sources)\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"first continue\")\n\t\tf, l := currentLineNumber(p, t)\n\t\tplugin1Found := false\n\t\tt.Logf(\"Libraries before %s:%d:\", f, l)\n\t\tfor _, image := range p.BinInfo().Images {\n\t\t\tt.Logf(\"\\t%#x %q err:%v\", image.StaticBase, image.Path, image.LoadError())\n\t\t\tif image.Path == pluginFixtures[0].Path {\n\t\t\t\tplugin1Found = true\n\t\t\t}\n\t\t}\n\t\tif !plugin1Found {\n\t\t\tt.Fatalf(\"Could not find plugin1\")\n\t\t}\n\t\tif !slices.Contains(p.BinInfo().Sources, fixture.Source) {\n\t\t\t// Source files for the base program must be available even after a plugin is loaded. Issue #2074.\n\t\t\tt.Fatalf(\"could not find %s in sources (after loading plugin): %q\\n\", fixture.Source, p.BinInfo().Sources)\n\t\t}\n\t\tassertNoError(grp.Continue(), t, \"second continue\")\n\t\tf, l = currentLineNumber(p, t)\n\t\tplugin1Found, plugin2Found := false, false\n\t\tt.Logf(\"Libraries after %s:%d:\", f, l)\n\t\tfor _, image := range p.BinInfo().Images {\n\t\t\tt.Logf(\"\\t%#x %q err:%v\", image.StaticBase, image.Path, image.LoadError())\n\t\t\tswitch image.Path {\n\t\t\tcase pluginFixtures[0].Path:\n\t\t\t\tplugin1Found = true\n\t\t\tcase pluginFixtures[1].Path:\n\t\t\t\tplugin2Found = true\n\t\t\t}\n\t\t}\n\t\tif !plugin1Found {\n\t\t\tt.Fatalf(\"Could not find plugin1\")\n\t\t}\n\t\tif !plugin2Found {\n\t\t\tt.Fatalf(\"Could not find plugin2\")\n\t\t}\n\t})\n}\n\nfunc TestAncestors(t *testing.T) {\n\tt.Setenv(\"GODEBUG\", \"tracebackancestors=100\")\n\twithTestProcess(\"testnextprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.testgoroutine\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tas, err := proc.Ancestors(p, p.SelectedGoroutine(), 1000)\n\t\tassertNoError(err, t, \"Ancestors\")\n\t\tt.Logf(\"ancestors: %#v\\n\", as)\n\t\tif len(as) != 1 {\n\t\t\tt.Fatalf(\"expected only one ancestor got %d\", len(as))\n\t\t}\n\t\tmainFound := false\n\t\tfor i, a := range as {\n\t\t\tastack, err := a.Stack(100)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"Ancestor %d stack\", i))\n\t\t\tt.Logf(\"ancestor %d\\n\", i)\n\t\t\tlogStacktrace(t, p, astack)\n\t\t\tfor _, frame := range astack {\n\t\t\t\tif frame.Current.Fn != nil && frame.Current.Fn.Name == \"main.main\" {\n\t\t\t\t\tmainFound = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif !mainFound {\n\t\t\tt.Fatal(\"could not find main.main function in ancestors\")\n\t\t}\n\t})\n}\n\nfunc testCallConcurrentCheckReturns(p *proc.Target, t *testing.T, gid1, gid2 int64) int {\n\tfound := 0\n\tfor _, thread := range p.ThreadList() {\n\t\tg, _ := proc.GetG(thread)\n\t\tif g == nil || (g.ID != gid1 && g.ID != gid2) {\n\t\t\tcontinue\n\t\t}\n\t\tretvals := thread.Common().ReturnValues(normalLoadConfig)\n\t\tif len(retvals) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tn, _ := constant.Int64Val(retvals[0].Value)\n\t\tt.Logf(\"injection on goroutine %d (thread %d) returned %v\\n\", g.ID, thread.ThreadID(), n)\n\t\tswitch g.ID {\n\t\tcase gid1:\n\t\t\tif n != 11 {\n\t\t\t\tt.Errorf(\"wrong return value for goroutine %d\", g.ID)\n\t\t\t}\n\t\t\tfound++\n\t\tcase gid2:\n\t\t\tif n != 12 {\n\t\t\t\tt.Errorf(\"wrong return value for goroutine %d\", g.ID)\n\t\t\t}\n\t\t\tfound++\n\t\t}\n\t}\n\treturn found\n}\n\nfunc TestCallConcurrent(t *testing.T) {\n\tskipOn(t, \"broken - pie mode\", \"linux\", \"ppc64le\", \"native\", \"pie\")\n\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\twithTestProcess(\"teststepconcurrent\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 24)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\t//_, err := p.ClearBreakpoint(bp.Addr)\n\t\t//assertNoError(err, t, \"ClearBreakpoint() returned an error\")\n\n\t\tgid1 := p.SelectedGoroutine().ID\n\t\tt.Logf(\"starting injection in %d / %d\", p.SelectedGoroutine().ID, p.CurrentThread().ThreadID())\n\t\tassertNoError(proc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), \"Foo(10, 1)\", normalLoadConfig, false), t, \"EvalExpressionWithCalls()\")\n\n\t\treturned := testCallConcurrentCheckReturns(p, t, gid1, -1)\n\n\t\tcurthread := p.CurrentThread()\n\t\tif curbp := curthread.Breakpoint(); curbp.Breakpoint == nil || curbp.LogicalID() != bp.LogicalID() || returned > 0 {\n\t\t\tt.Logf(\"skipping test, the call injection terminated before we hit a breakpoint in a different thread\")\n\t\t\treturn\n\t\t}\n\n\t\terr := p.ClearBreakpoint(bp.Addr)\n\t\tassertNoError(err, t, \"ClearBreakpoint() returned an error\")\n\n\t\tgid2 := p.SelectedGoroutine().ID\n\t\tt.Logf(\"starting second injection in %d / %d\", p.SelectedGoroutine().ID, p.CurrentThread().ThreadID())\n\t\tassertNoError(proc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), \"Foo(10, 2)\", normalLoadConfig, false), t, \"EvalExpressionWithCalls\")\n\n\t\tfor {\n\t\t\treturned += testCallConcurrentCheckReturns(p, t, gid1, gid2)\n\t\t\tif returned >= 2 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tt.Logf(\"Continuing... %d\", returned)\n\t\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\t}\n\n\t\tgrp.Continue()\n\t})\n}\n\nfunc TestPluginStepping(t *testing.T) {\n\tprotest.MustHaveCgo(t)\n\tpluginFixtures := protest.WithPlugins(t, protest.AllNonOptimized, \"plugin1/\", \"plugin2/\")\n\n\ttestseq2Args(\".\", []string{pluginFixtures[0].Path, pluginFixtures[1].Path}, protest.AllNonOptimized, t, \"plugintest2\", \"\", []seqTest{\n\t\t{contContinue, 41},\n\t\t{contStep, \"plugin1.go:9\"},\n\t\t{contStep, \"plugin1.go:10\"},\n\t\t{contStep, \"plugin1.go:11\"},\n\t\t{contNext, \"plugin1.go:12\"},\n\t\t{contNext, \"plugintest2.go:41\"},\n\t\t{contNext, \"plugintest2.go:42\"},\n\t\t{contStep, \"plugin2.go:22\"},\n\t\t{contNext, \"plugin2.go:23\"},\n\t\t{contNext, \"plugin2.go:26\"},\n\t\t{contNext, \"plugintest2.go:42\"}})\n}\n\nfunc TestBreakpointMaterializedEvent(t *testing.T) {\n\tprotest.MustHaveCgo(t)\n\tpluginFixtures := protest.WithPlugins(t, protest.AllNonOptimized, \"plugin1/\", \"plugin2/\")\n\n\twithTestProcessArgs(\"plugintest2\", t, \".\", []string{pluginFixtures[0].Path, pluginFixtures[1].Path}, protest.AllNonOptimized, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tpath := filepath.Join(fixture.BuildDir, \"plugin2\", \"plugin2.go\")\n\t\tconst lineno = 23\n\n\t\t// Set a suspended breakpoint.\n\t\tbp2 := &proc.LogicalBreakpoint{\n\t\t\tLogicalID: 2,\n\t\t\tHitCount:  make(map[int64]uint64),\n\t\t\tSet:       proc.SetBreakpoint{File: path, Line: lineno},\n\t\t}\n\t\tgrp.LogicalBreakpoints[2] = bp2\n\t\terr := grp.SetBreakpointEnabled(bp2, true)\n\t\tif !errors.As(err, new(*proc.ErrCouldNotFindLine)) {\n\t\t\tif err == nil {\n\t\t\t\tt.Fatal(\"Expected not to be able to find the breakpoint\")\n\t\t\t} else {\n\t\t\t\tt.Fatal(err)\n\t\t\t}\n\t\t}\n\n\t\t// Collect events\n\t\tvar events []*proc.Event\n\t\tgrp.SetEventsFn(func(e *proc.Event) { events = append(events, e) })\n\n\t\t// Continue past the plugin load.\n\t\tsetFileBreakpoint(p, t, fixture.Source, 35)\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\n\t\t// The breakpoint should be enabled now\n\t\tif !bp2.Enabled() {\n\t\t\tt.Fatal(\"Breakpoint did not materialize\")\n\t\t}\n\t\tvar found bool\n\t\tfor _, e := range events {\n\t\t\tif e.Kind == proc.EventBreakpointMaterialized {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatalf(\"No breakpoint materialized event found in %d events\", len(events))\n\t\t}\n\t})\n}\n\nfunc TestIssue1601(t *testing.T) {\n\tprotest.MustHaveCgo(t)\n\t// Tests that recursive types involving C qualifiers and typedefs are parsed correctly\n\twithTestProcess(\"issue1601\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tevalVariable(p, t, \"C.globalq\")\n\t})\n}\n\nfunc TestIssue1615(t *testing.T) {\n\t// A breakpoint condition that tests for string equality with a constant string shouldn't fail with 'string too long for comparison' error\n\n\twithTestProcess(\"issue1615\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 19)\n\t\tbp.UserBreaklet().Cond = &ast.BinaryExpr{\n\t\t\tOp: token.EQL,\n\t\t\tX:  &ast.Ident{Name: \"s\"},\n\t\t\tY:  &ast.BasicLit{Kind: token.STRING, Value: `\"projects/my-gcp-project-id-string/locations/us-central1/queues/my-task-queue-name\"`},\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tassertLineNumber(p, t, 19, \"\")\n\t})\n}\n\nfunc TestCgoStacktrace2(t *testing.T) {\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 21) {\n\t\tskipOn(t, \"upstream issue\", \"windows\")\n\t\tskipOn(t, \"broken\", \"arm64\")\n\t}\n\tskipOn(t, \"broken\", \"386\")\n\tskipOn(t, \"broken - cgo stacktraces\", \"darwin\", \"arm64\")\n\tskipOn(t, \"broken - cgo stacktraces\", \"windows\", \"arm64\")\n\tskipOn(t, \"broken\", \"ppc64le\")\n\tprotest.MustHaveCgo(t)\n\t// If a panic happens during cgo execution the stacktrace should show the C\n\t// function that caused the problem.\n\twithTestProcess(\"cgosigsegvstack\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tif _, exited := err.(proc.ErrProcessExited); exited {\n\t\t\tt.Fatal(\"process exited\")\n\t\t}\n\t\tframes, err := proc.ThreadStacktrace(p, p.CurrentThread(), 100)\n\t\tassertNoError(err, t, \"Stacktrace()\")\n\t\tlogStacktrace(t, p, frames)\n\t\tm := stacktraceCheck(t, []string{\"C.sigsegv\", \"C.testfn\", \"main.main\"}, frames)\n\t\tif m == nil {\n\t\t\tt.Fatal(\"see previous loglines\")\n\t\t}\n\t})\n}\n\nfunc TestIssue1736(t *testing.T) {\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tch1BufVar := evalVariable(p, t, \"*(ch1.buf)\")\n\t\tq := fmt.Sprintf(\"*(*%q)(%d)\", ch1BufVar.DwarfType.Common().Name, ch1BufVar.Addr)\n\t\tt.Logf(\"%s\", q)\n\t\tch1BufVar2 := evalVariable(p, t, q)\n\t\tif ch1BufVar2.Unreadable != nil {\n\t\t\tt.Fatal(ch1BufVar2.Unreadable)\n\t\t}\n\t})\n}\n\nfunc TestIssue1817(t *testing.T) {\n\t// Setting a breakpoint on a line that doesn't have any PC addresses marked\n\t// is_stmt should work.\n\twithTestProcess(\"issue1817\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 16)\n\t})\n}\n\nfunc TestListPackagesBuildInfo(t *testing.T) {\n\twithTestProcess(\"pkgrenames\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tpkgs := p.BinInfo().ListPackagesBuildInfo(true)\n\t\tt.Logf(\"returned %d\", len(pkgs))\n\t\tif len(pkgs) < 10 {\n\t\t\tt.Errorf(\"very few packages returned\")\n\t\t}\n\t\tfor _, pkg := range pkgs {\n\t\t\tt.Logf(\"%q %q\", pkg.ImportPath, pkg.DirectoryPath)\n\t\t\tconst _fixtures = \"_fixtures\"\n\t\t\tfidx := strings.Index(pkg.ImportPath, _fixtures)\n\t\t\tif fidx < 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif !strings.HasSuffix(strings.ReplaceAll(pkg.DirectoryPath, \"\\\\\", \"/\"), pkg.ImportPath[fidx:]) {\n\t\t\t\tt.Errorf(\"unexpected suffix: %q %q\", pkg.ImportPath, pkg.DirectoryPath)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestIssue1795(t *testing.T) {\n\t// When doing midstack inlining the Go compiler sometimes (always?) emits\n\t// the toplevel inlined call with ranges that do not cover the inlining of\n\t// other nested inlined calls.\n\t// For example if a function A calls B which calls C and both the calls to\n\t// B and C are inlined the DW_AT_inlined_subroutine entry for A might have\n\t// ranges that do not cover the ranges of the inlined call to C.\n\t// This is probably a violation of the DWARF standard (it's unclear) but we\n\t// might as well support it as best as possible anyway.\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 13) {\n\t\tt.Skip(\"Test not relevant to Go < 1.13\")\n\t}\n\tskipOn(t, \"broken\", \"ppc64le\")\n\twithTestProcessArgs(\"issue1795\", t, \".\", []string{}, protest.EnableInlining|protest.EnableOptimization, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertLineNumber(p, t, 12, \"wrong line number after Continue,\")\n\t\tassertNoError(grp.Next(), t, \"Next()\")\n\t\tassertLineNumber(p, t, 13, \"wrong line number after Next,\")\n\t})\n\twithTestProcessArgs(\"issue1795\", t, \".\", []string{}, protest.EnableInlining|protest.EnableOptimization, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"regexp.(*Regexp).doExecute\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertLineNumber(p, t, 12, \"wrong line number after Continue (1),\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tframes, err := proc.ThreadStacktrace(p, p.CurrentThread(), 40)\n\t\tassertNoError(err, t, \"ThreadStacktrace()\")\n\t\tlogStacktrace(t, p, frames)\n\t\tif err := checkFrame(frames[0], \"regexp.(*Regexp).doExecute\", \"\", 0, false); err != nil {\n\t\t\tt.Errorf(\"Wrong frame 0: %v\", err)\n\t\t}\n\t\tif err := checkFrame(frames[1], \"regexp.(*Regexp).doMatch\", \"\", 0, true); err != nil {\n\t\t\tt.Errorf(\"Wrong frame 1: %v\", err)\n\t\t}\n\t\tif err := checkFrame(frames[2], \"regexp.(*Regexp).MatchString\", \"\", 0, true); err != nil {\n\t\t\tt.Errorf(\"Wrong frame 2: %v\", err)\n\t\t}\n\t\tif err := checkFrame(frames[3], \"main.main\", fixture.Source, 12, false); err != nil {\n\t\t\tt.Errorf(\"Wrong frame 3: %v\", err)\n\t\t}\n\t})\n}\n\nfunc BenchmarkConditionalBreakpoints(b *testing.B) {\n\tb.N = 1\n\twithTestProcess(\"issue1549\", b, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, b, fixture.Source, 12)\n\t\tbp.UserBreaklet().Cond = &ast.BinaryExpr{\n\t\t\tOp: token.EQL,\n\t\t\tX:  &ast.Ident{Name: \"value\"},\n\t\t\tY:  &ast.BasicLit{Kind: token.INT, Value: \"-1\"},\n\t\t}\n\t\terr := grp.Continue()\n\t\tif _, exited := err.(proc.ErrProcessExited); !exited {\n\t\t\tb.Fatalf(\"Unexpected error on Continue(): %v\", err)\n\t\t}\n\t})\n}\n\nfunc TestIssue1925(t *testing.T) {\n\t// Calling a function should not leave cached goroutine information in an\n\t// inconsistent state.\n\t// In particular the stepInstructionOut function called at the end of a\n\t// 'call' procedure should clean the G cache like every other function\n\t// altering the state of the target process.\n\tskipOn(t, \"broken - pie mode\", \"linux\", \"ppc64le\", \"native\", \"pie\")\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(proc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), \"afunc(2)\", normalLoadConfig, true), t, \"Call\")\n\t\tt.Logf(\"%v\\n\", p.SelectedGoroutine().CurrentLoc)\n\t\tif loc := p.SelectedGoroutine().CurrentLoc; loc.File != fixture.Source {\n\t\t\tt.Errorf(\"wrong location for selected goroutine after call: %s:%d\", loc.File, loc.Line)\n\t\t}\n\t})\n}\n\nfunc TestStepoutOneliner(t *testing.T) {\n\t// The heuristic detecting autogenerated wrappers when stepping out should\n\t// not skip oneliner functions.\n\twithTestProcess(\"issue2086\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertLineNumber(p, t, 15, \"after first continue\")\n\t\tassertNoError(grp.StepOut(), t, \"StepOut()\")\n\t\tif fn := p.BinInfo().PCToFunc(currentPC(p, t)); fn == nil || fn.Name != \"main.T.m\" {\n\t\t\tt.Fatalf(\"wrong function after stepout %#v\", fn)\n\t\t}\n\t\tassertNoError(grp.StepOut(), t, \"second StepOut()\")\n\t\tif fn := p.BinInfo().PCToFunc(currentPC(p, t)); fn == nil || fn.Name != \"main.main\" {\n\t\t\tt.Fatalf(\"wrong fnuction after second stepout %#v\", fn)\n\t\t}\n\t})\n}\n\nfunc TestRequestManualStopWhileStopped(t *testing.T) {\n\t// Requesting a manual stop while stopped shouldn't cause problems (issue #2138).\n\twithTestProcess(\"issue2138\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tresumed := make(chan struct{})\n\t\tsetFileBreakpoint(p, t, fixture.Source, 8)\n\t\tassertNoError(grp.Continue(), t, \"Continue() 1\")\n\t\tgrp.ResumeNotify(resumed)\n\t\tgo func() {\n\t\t\t<-resumed\n\t\t\ttime.Sleep(1 * time.Second)\n\t\t\tgrp.RequestManualStop()\n\t\t}()\n\t\tt.Logf(\"at time.Sleep call\")\n\t\tassertNoError(grp.Continue(), t, \"Continue() 2\")\n\t\tt.Logf(\"manually stopped\")\n\t\tgrp.RequestManualStop()\n\t\tgrp.RequestManualStop()\n\t\tgrp.RequestManualStop()\n\n\t\tresumed = make(chan struct{})\n\t\tgrp.ResumeNotify(resumed)\n\t\tgo func() {\n\t\t\t<-resumed\n\t\t\ttime.Sleep(1 * time.Second)\n\t\t\tgrp.RequestManualStop()\n\t\t}()\n\t\tt.Logf(\"resuming sleep\")\n\t\tassertNoError(grp.Continue(), t, \"Continue() 3\")\n\t\tt.Logf(\"done\")\n\t})\n}\n\nfunc TestStepOutPreservesGoroutine(t *testing.T) {\n\t// Checks that StepOut preserves the currently selected goroutine.\n\trand.Seed(time.Now().Unix())\n\twithTestProcess(\"issue2113\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tlogState := func() {\n\t\t\tg := p.SelectedGoroutine()\n\t\t\tvar goid int64 = -42\n\t\t\tif g != nil {\n\t\t\t\tgoid = g.ID\n\t\t\t}\n\t\t\tpc := currentPC(p, t)\n\t\t\tf, l, fn := p.BinInfo().PCToLine(pc)\n\t\t\tvar fnname = \"???\"\n\t\t\tif fn != nil {\n\t\t\t\tfnname = fn.Name\n\t\t\t}\n\t\t\tt.Logf(\"goroutine %d at %s:%d in %s\", goid, f, l, fnname)\n\t\t}\n\n\t\tlogState()\n\n\t\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\tassertNoError(err, t, \"GoroutinesInfo\")\n\t\tcandg := []*proc.G{}\n\t\tbestg := []*proc.G{}\n\t\tfor _, g := range gs {\n\t\t\tt.Logf(\"stacktracing goroutine %d (%v)\\n\", g.ID, g.CurrentLoc)\n\t\t\tframes, err := proc.GoroutineStacktrace(p, g, 20, 0)\n\t\t\tassertNoError(err, t, \"Stacktrace\")\n\t\t\tfor _, frame := range frames {\n\t\t\t\tif frame.Call.Fn != nil && frame.Call.Fn.Name == \"main.coroutine\" {\n\t\t\t\t\tcandg = append(candg, g)\n\t\t\t\t\tif g.Thread != nil && frames[0].Call.Fn != nil && strings.HasPrefix(frames[0].Call.Fn.Name, \"runtime.\") {\n\t\t\t\t\t\tbestg = append(bestg, g)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar pickg *proc.G\n\t\tif len(bestg) > 0 {\n\t\t\tpickg = bestg[rand.Intn(len(bestg))]\n\t\t\tt.Logf(\"selected goroutine %d (best)\\n\", pickg.ID)\n\t\t} else {\n\t\t\tpickg = candg[rand.Intn(len(candg))]\n\t\t\tt.Logf(\"selected goroutine %d\\n\", pickg.ID)\n\t\t}\n\t\tgoid := pickg.ID\n\t\tassertNoError(p.SwitchGoroutine(pickg), t, \"SwitchGoroutine\")\n\n\t\tlogState()\n\n\t\terr = grp.StepOut()\n\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\treturn\n\t\t}\n\t\tassertNoError(err, t, \"StepOut()\")\n\n\t\tlogState()\n\n\t\tg2 := p.SelectedGoroutine()\n\t\tif g2 == nil {\n\t\t\tt.Fatalf(\"no selected goroutine after stepout\")\n\t\t} else if g2.ID != goid {\n\t\t\tt.Fatalf(\"unexpected selected goroutine %d\", g2.ID)\n\t\t}\n\t})\n}\n\nfunc TestIssue2319(t *testing.T) {\n\t// Check to make sure we don't crash on startup when the target is\n\t// a binary with a mix of DWARF-5 C++ compilation units and\n\t// DWARF-4 Go compilation units.\n\n\t// Require CGO, since we need to use the external linker for this test.\n\tprotest.MustHaveCgo(t)\n\n\t// The test fixture uses linux/amd64 assembly and a *.syso file\n\t// that is linux/amd64, so skip for other architectures.\n\tif runtime.GOOS != \"linux\" || runtime.GOARCH != \"amd64\" {\n\t\tt.Skipf(\"skipping since not linux/amd64\")\n\t}\n\n\t// Skip unless on 1.14 or later. The test fixture uses a *.syso\n\t// file, which in 1.13 is not loaded unless we're in internal\n\t// linking mode (we need external linking here).\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 14) {\n\t\tt.Skip(\"test contains fixture that is specific to go 1.14+\")\n\t}\n\n\tfixture := protest.BuildFixture(t, \"issue2319/\", protest.BuildModeExternalLinker)\n\n\t// Load up the binary and make sure there are no crashes.\n\tbi := proc.NewBinaryInfo(\"linux\", \"amd64\")\n\tassertNoError(bi.LoadBinaryInfo(fixture.Path, 0, nil), t, \"LoadBinaryInfo\")\n}\n\nfunc TestDump(t *testing.T) {\n\tif (runtime.GOOS == \"darwin\" && testBackend == \"native\") || (runtime.GOOS == \"windows\" && runtime.GOARCH != \"amd64\") {\n\t\tt.Skip(\"not supported\")\n\t}\n\tskipOn(t, \"not implemented\", \"ppc64le\")\n\n\tconvertRegisters := func(arch *proc.Arch, dregs op.DwarfRegisters) string {\n\t\tdregs.Reg(^uint64(0))\n\t\tbuf := new(bytes.Buffer)\n\t\tfor i := 0; i < dregs.CurrentSize(); i++ {\n\t\t\treg := dregs.Reg(uint64(i))\n\t\t\tif reg == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tname, _, repr := arch.DwarfRegisterToString(i, reg)\n\t\t\tfmt.Fprintf(buf, \" %s=%s\", name, repr)\n\t\t}\n\t\treturn buf.String()\n\t}\n\n\tconvertThread := func(thread proc.Thread) string {\n\t\tregs, err := thread.Registers()\n\t\tassertNoError(err, t, fmt.Sprintf(\"Thread registers %d\", thread.ThreadID()))\n\t\tarch := thread.BinInfo().Arch\n\t\tdregs := arch.RegistersToDwarfRegisters(0, regs)\n\t\treturn fmt.Sprintf(\"%08d %s\", thread.ThreadID(), convertRegisters(arch, *dregs))\n\t}\n\n\tconvertThreads := func(threads []proc.Thread) []string {\n\t\tr := make([]string, len(threads))\n\t\tfor i := range threads {\n\t\t\tr[i] = convertThread(threads[i])\n\t\t}\n\t\tsort.Strings(r)\n\t\treturn r\n\t}\n\n\tconvertGoroutine := func(g *proc.G) string {\n\t\tthreadID := 0\n\t\tif g.Thread != nil {\n\t\t\tthreadID = g.Thread.ThreadID()\n\t\t}\n\t\treturn fmt.Sprintf(\"%d pc=%#x sp=%#x bp=%#x lr=%#x gopc=%#x startpc=%#x systemstack=%v thread=%d\", g.ID, g.PC, g.SP, g.BP, g.LR, g.GoPC, g.StartPC, g.SystemStack, threadID)\n\t}\n\n\tconvertFrame := func(arch *proc.Arch, frame *proc.Stackframe) string {\n\t\treturn fmt.Sprintf(\"currentPC=%#x callPC=%#x frameOff=%#x\\n\", frame.Current.PC, frame.Call.PC, frame.FrameOffset())\n\t}\n\n\tmakeDump := func(p *proc.Target, corePath, exePath string, flags proc.DumpFlags) *proc.Target {\n\t\tfh, err := os.Create(corePath)\n\t\tassertNoError(err, t, \"Create()\")\n\t\tvar state proc.DumpState\n\t\tp.Dump(fh, flags, &state)\n\t\tassertNoError(state.Err, t, \"Dump()\")\n\t\tif state.ThreadsDone != state.ThreadsTotal || state.MemDone != state.MemTotal || !state.AllDone || state.Dumping || state.Canceled {\n\t\t\tt.Fatalf(\"bad DumpState %#v\", &state)\n\t\t}\n\t\tc, err := core.OpenCore(corePath, exePath, nil)\n\t\tassertNoError(err, t, \"OpenCore()\")\n\t\treturn c.Selected\n\t}\n\n\ttestDump := func(p, c *proc.Target) {\n\t\tif p.Pid() != c.Pid() {\n\t\t\tt.Errorf(\"Pid mismatch %x %x\", p.Pid(), c.Pid())\n\t\t}\n\n\t\tthreads := convertThreads(p.ThreadList())\n\t\tcthreads := convertThreads(c.ThreadList())\n\n\t\tif len(threads) != len(cthreads) {\n\t\t\tt.Errorf(\"Thread number mismatch %d %d\", len(threads), len(cthreads))\n\t\t}\n\n\t\tfor i := range threads {\n\t\t\tif threads[i] != cthreads[i] {\n\t\t\t\tt.Errorf(\"Thread mismatch\\nlive:\\t%s\\ncore:\\t%s\", threads[i], cthreads[i])\n\t\t\t}\n\t\t}\n\n\t\tgos, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\tassertNoError(err, t, \"GoroutinesInfo() - live process\")\n\t\tcgos, _, err := proc.GoroutinesInfo(c, 0, 0)\n\t\tassertNoError(err, t, \"GoroutinesInfo() - core dump\")\n\n\t\tif len(gos) != len(cgos) {\n\t\t\tt.Errorf(\"Goroutine number mismatch %d %d\", len(gos), len(cgos))\n\t\t}\n\n\t\tvar scope, cscope *proc.EvalScope\n\n\t\tfor i := range gos {\n\t\t\tif convertGoroutine(gos[i]) != convertGoroutine(cgos[i]) {\n\t\t\t\tt.Errorf(\"Goroutine mismatch\\nlive:\\t%s\\ncore:\\t%s\", convertGoroutine(gos[i]), convertGoroutine(cgos[i]))\n\t\t\t}\n\n\t\t\tframes, err := proc.GoroutineStacktrace(p, gos[i], 20, 0)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"Stacktrace for goroutine %d - live process\", gos[i].ID))\n\t\t\tcframes, err := proc.GoroutineStacktrace(c, cgos[i], 20, 0)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"Stacktrace for goroutine %d - core dump\", gos[i].ID))\n\n\t\t\tif len(frames) != len(cframes) {\n\t\t\t\tt.Errorf(\"Frame number mismatch for goroutine %d: %d %d\", gos[i].ID, len(frames), len(cframes))\n\t\t\t}\n\n\t\t\tfor j := range frames {\n\t\t\t\tif convertFrame(p.BinInfo().Arch, &frames[j]) != convertFrame(p.BinInfo().Arch, &cframes[j]) {\n\t\t\t\t\tt.Errorf(\"Frame mismatch %d.%d\\nlive:\\t%s\\ncore:\\t%s\", gos[i].ID, j, convertFrame(p.BinInfo().Arch, &frames[j]), convertFrame(p.BinInfo().Arch, &cframes[j]))\n\t\t\t\t}\n\t\t\t\tif frames[j].Call.Fn != nil && frames[j].Call.Fn.Name == \"main.main\" {\n\t\t\t\t\tscope = proc.FrameToScope(p, p.Memory(), gos[i], 0, frames[j:]...)\n\t\t\t\t\tcscope = proc.FrameToScope(c, c.Memory(), cgos[i], 0, cframes[j:]...)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvars, err := scope.LocalVariables(normalLoadConfig)\n\t\tassertNoError(err, t, \"LocalVariables - live process\")\n\t\tcvars, err := cscope.LocalVariables(normalLoadConfig)\n\t\tassertNoError(err, t, \"LocalVariables - core dump\")\n\n\t\tif len(vars) != len(cvars) {\n\t\t\tt.Errorf(\"Variable number mismatch %d %d\", len(vars), len(cvars))\n\t\t}\n\n\t\tfor i := range vars {\n\t\t\tvarstr := vars[i].Name + \"=\" + api.ConvertVar(vars[i]).SinglelineString()\n\t\t\tcvarstr := cvars[i].Name + \"=\" + api.ConvertVar(cvars[i]).SinglelineString()\n\t\t\tif strings.Contains(varstr, \"(unreadable\") {\n\t\t\t\t// errors reading from unmapped memory differ between live process and core\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif varstr != cvarstr {\n\t\t\t\tt.Errorf(\"Variable mismatch %s %s\", varstr, cvarstr)\n\t\t\t}\n\t\t}\n\t}\n\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tcorePath := filepath.Join(fixture.BuildDir, \"coredump\")\n\t\tcorePathPlatIndep := filepath.Join(fixture.BuildDir, \"coredump-indep\")\n\n\t\tt.Logf(\"testing normal dump\")\n\n\t\tc := makeDump(p, corePath, fixture.Path, 0)\n\t\tdefer os.Remove(corePath)\n\t\ttestDump(p, c)\n\n\t\tif runtime.GOOS == \"linux\" && runtime.GOARCH == \"amd64\" {\n\t\t\t// No reason to do this test on other goos/goarch because they use the\n\t\t\t// platform-independent format anyway.\n\t\t\tt.Logf(\"testing platform-independent dump\")\n\t\t\tc2 := makeDump(p, corePathPlatIndep, fixture.Path, proc.DumpPlatformIndependent)\n\t\t\tdefer os.Remove(corePathPlatIndep)\n\t\t\ttestDump(p, c2)\n\t\t}\n\t})\n}\n\nfunc TestCompositeMemoryWrite(t *testing.T) {\n\tif runtime.GOARCH != \"amd64\" {\n\t\tt.Skip(\"only valid on amd64\")\n\t}\n\tskipOn(t, \"not implemented\", \"freebsd\")\n\twithTestProcess(\"fputest/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tgetregs := func() (pc, rax, xmm1 uint64) {\n\t\t\tregs, err := p.CurrentThread().Registers()\n\t\t\tassertNoError(err, t, \"Registers\")\n\t\t\tfmtregs, err := regs.Slice(true)\n\t\t\tassertNoError(err, t, \"register slice\")\n\n\t\t\tvar xmm1buf []byte\n\n\t\t\tfor _, reg := range fmtregs {\n\t\t\t\tswitch strings.ToLower(reg.Name) {\n\t\t\t\tcase \"rax\":\n\t\t\t\t\trax = reg.Reg.Uint64Val\n\t\t\t\tcase \"xmm1\":\n\t\t\t\t\txmm1buf = reg.Reg.Bytes\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txmm1 = binary.LittleEndian.Uint64(xmm1buf[:8])\n\n\t\t\treturn regs.PC(), rax, xmm1\n\t\t}\n\n\t\tconst fakeAddress = 0xbeef0000\n\n\t\tgetmem := func(mem proc.MemoryReader) uint64 {\n\t\t\tbuf := make([]byte, 8)\n\t\t\t_, err := mem.ReadMemory(buf, fakeAddress)\n\t\t\tassertNoError(err, t, \"ReadMemory\")\n\t\t\treturn binary.LittleEndian.Uint64(buf)\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\toldPc, oldRax, oldXmm1 := getregs()\n\t\tt.Logf(\"PC %#x AX %#x XMM1 %#x\", oldPc, oldRax, oldXmm1)\n\n\t\tmemRax, err := proc.NewCompositeMemory(p, []op.Piece{{Size: 0, Val: 0, Kind: op.RegPiece}}, fakeAddress)\n\t\tassertNoError(err, t, \"NewCompositeMemory (rax)\")\n\t\tmemXmm1, err := proc.NewCompositeMemory(p, []op.Piece{{Size: 0, Val: 18, Kind: op.RegPiece}}, fakeAddress)\n\t\tassertNoError(err, t, \"NewCompositeMemory (xmm1)\")\n\n\t\tif memRax := getmem(memRax); memRax != oldRax {\n\t\t\tt.Errorf(\"reading rax memory, expected %#x got %#x\", oldRax, memRax)\n\t\t}\n\t\tif memXmm1 := getmem(memXmm1); memXmm1 != oldXmm1 {\n\t\t\tt.Errorf(\"reading xmm1 memory, expected %#x got %#x\", oldXmm1, memXmm1)\n\t\t}\n\n\t\t_, err = memRax.WriteMemory(0xbeef0000, []byte{0xef, 0xbe, 0x0d, 0xf0, 0xef, 0xbe, 0x0d, 0xf0})\n\t\tassertNoError(err, t, \"WriteMemory (rax)\")\n\t\t_, err = memXmm1.WriteMemory(0xbeef0000, []byte{0xef, 0xbe, 0x0d, 0xf0, 0xef, 0xbe, 0x0d, 0xf0})\n\t\tassertNoError(err, t, \"WriteMemory (xmm1)\")\n\n\t\tnewPc, newRax, newXmm1 := getregs()\n\t\tt.Logf(\"PC %#x AX %#x XMM1 %#x\", newPc, newRax, newXmm1)\n\n\t\tconst tgt = 0xf00dbeeff00dbeef\n\t\tif newRax != tgt {\n\t\t\tt.Errorf(\"reading rax register, expected %#x, got %#x\", uint64(tgt), newRax)\n\t\t}\n\t\tif newXmm1 != tgt {\n\t\t\tt.Errorf(\"reading xmm1 register, expected %#x, got %#x\", uint64(tgt), newXmm1)\n\t\t}\n\t})\n}\n\nfunc TestVariablesWithExternalLinking(t *testing.T) {\n\tprotest.MustHaveCgo(t)\n\t// Tests that macOSDebugFrameBugWorkaround works.\n\t// See:\n\t//  https://github.com/golang/go/issues/25841\n\t//  https://github.com/go-delve/delve/issues/2346\n\twithTestProcessArgs(\"testvariables2\", t, \".\", []string{}, protest.BuildModeExternalLinker, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tstr1Var := evalVariable(p, t, \"str1\")\n\t\tif str1Var.Unreadable != nil {\n\t\t\tt.Fatalf(\"variable str1 is unreadable: %v\", str1Var.Unreadable)\n\t\t}\n\t\tt.Logf(\"%#v\", str1Var)\n\t\tif constant.StringVal(str1Var.Value) != \"01234567890\" {\n\t\t\tt.Fatalf(\"wrong value for str1: %v\", str1Var.Value)\n\t\t}\n\t})\n}\n\nfunc TestWatchpointsBasic(t *testing.T) {\n\tskipOn(t, \"not implemented\", \"freebsd\")\n\tskipOn(t, \"not implemented\", \"386\")\n\tskipOn(t, \"not implemented\", \"ppc64le\")\n\tskipOn(t, \"not implemented\", \"riscv64\")\n\tskipOn(t, \"not implemented\", \"loong64\")\n\tskipOn(t, \"see https://github.com/go-delve/delve/issues/2768\", \"windows\")\n\tprotest.AllowRecording(t)\n\n\tposition1 := []int{18, 19}\n\tposition5 := []int{40, 41}\n\n\twithTestProcess(\"databpeasy\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tsetFileBreakpoint(p, t, fixture.Source, 21) // Position 2 breakpoint\n\t\tsetFileBreakpoint(p, t, fixture.Source, 27) // Position 4 breakpoint\n\t\tassertNoError(grp.Continue(), t, \"Continue 0\")\n\t\tassertLineNumber(p, t, 13, \"Continue 0\") // Position 0\n\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\n\t\tbp, err := p.SetWatchpoint(0, scope, \"globalvar1\", proc.WatchWrite, nil)\n\t\tassertNoError(err, t, \"SetDataBreakpoint(write-only)\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 1\")\n\t\tassertLineNumberIn(p, t, position1, \"Continue 1\") // Position 1\n\n\t\tif curbp := p.CurrentThread().Breakpoint().Breakpoint; curbp == nil || (curbp.LogicalID() != bp.LogicalID()) {\n\t\t\tt.Fatal(\"breakpoint not set\")\n\t\t}\n\n\t\tassertNoError(p.ClearBreakpoint(bp.Addr), t, \"ClearBreakpoint\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\t\tassertLineNumber(p, t, 21, \"Continue 2\") // Position 2\n\n\t\t_, err = p.SetWatchpoint(0, scope, \"globalvar1\", proc.WatchWrite|proc.WatchRead, nil)\n\t\tassertNoError(err, t, \"SetDataBreakpoint(read-write)\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 3\")\n\t\tassertLineNumber(p, t, 22, \"Continue 3\") // Position 3\n\n\t\tp.ClearBreakpoint(bp.Addr)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 4\")\n\t\tassertLineNumber(p, t, 27, \"Continue 4\") // Position 4\n\n\t\tt.Logf(\"setting final breakpoint\")\n\t\t_, err = p.SetWatchpoint(0, scope, \"globalvar1\", proc.WatchWrite, nil)\n\t\tassertNoError(err, t, \"SetDataBreakpoint(write-only, again)\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 5\")\n\t\tassertLineNumberIn(p, t, position5, \"Continue 5\") // Position 5\n\t})\n}\n\nfunc TestWatchpointCounts(t *testing.T) {\n\tskipOn(t, \"not implemented\", \"freebsd\")\n\tskipOn(t, \"not implemented\", \"386\")\n\tskipOn(t, \"see https://github.com/go-delve/delve/issues/2768\", \"windows\")\n\tskipOn(t, \"not implemented\", \"ppc64le\")\n\tskipOn(t, \"not implemented\", \"riscv64\")\n\tskipOn(t, \"not implemented\", \"loong64\")\n\tif _, isTeamCityTest := os.LookupEnv(\"TEAMCITY_VERSION\"); isTeamCityTest {\n\t\tskipOn(t, \"CI is running a version of macOS that is too old (11.2)\", \"darwin\", \"arm64\")\n\t}\n\tprotest.AllowRecording(t)\n\n\twithTestProcess(\"databpcountstest\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue 0\")\n\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\n\t\tbp, err := p.SetWatchpoint(0, scope, \"globalvar1\", proc.WatchWrite, nil)\n\t\tassertNoError(err, t, \"SetWatchpoint(write-only)\")\n\n\t\tfor {\n\t\t\terr := grp.Continue()\n\t\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue()\")\n\t\t}\n\n\t\tt.Logf(\"TotalHitCount: %d\", bp.Logical.TotalHitCount)\n\t\tif bp.Logical.TotalHitCount != 200 {\n\t\t\tt.Fatalf(\"Wrong TotalHitCount for the breakpoint (%d)\", bp.Logical.TotalHitCount)\n\t\t}\n\n\t\tif len(bp.Logical.HitCount) != 2 {\n\t\t\tt.Fatalf(\"Wrong number of goroutines for breakpoint (%d)\", len(bp.Logical.HitCount))\n\t\t}\n\n\t\tfor _, v := range bp.Logical.HitCount {\n\t\t\tif v != 100 {\n\t\t\t\tt.Fatalf(\"Wrong HitCount for breakpoint (%v)\", bp.Logical.HitCount)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestManualStopWhileStopped(t *testing.T) {\n\t// Checks that RequestManualStop sent to a stopped thread does not cause the target process to die.\n\twithTestProcess(\"loopprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tasyncCont := func(done chan struct{}) {\n\t\t\tdefer close(done)\n\t\t\terr := grp.Continue()\n\t\t\tt.Logf(\"%v\\n\", err)\n\t\t\tif err != nil {\n\t\t\t\tpanic(err)\n\t\t\t}\n\t\t\tfor _, th := range p.ThreadList() {\n\t\t\t\tif th.Breakpoint().Breakpoint != nil {\n\t\t\t\t\tt.Logf(\"unexpected stop at breakpoint: %v\", th.Breakpoint().Breakpoint)\n\t\t\t\t\tpanic(\"unexpected stop at breakpoint\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst (\n\t\t\trepeatsSlow = 3\n\t\t\trepeatsFast = 5\n\t\t)\n\n\t\tfor i := range repeatsSlow {\n\t\t\tt.Logf(\"Continue %d (slow)\", i)\n\t\t\tdone := make(chan struct{})\n\t\t\tgo asyncCont(done)\n\t\t\ttime.Sleep(1 * time.Second)\n\t\t\tgrp.RequestManualStop()\n\t\t\ttime.Sleep(1 * time.Second)\n\t\t\tgrp.RequestManualStop()\n\t\t\ttime.Sleep(1 * time.Second)\n\t\t\t<-done\n\t\t}\n\t\tfor i := range repeatsFast {\n\t\t\tt.Logf(\"Continue %d (fast)\", i)\n\t\t\trch := make(chan struct{})\n\t\t\tdone := make(chan struct{})\n\t\t\tgrp.ResumeNotify(rch)\n\t\t\tgo asyncCont(done)\n\t\t\t<-rch\n\t\t\tgrp.RequestManualStop()\n\t\t\tgrp.RequestManualStop()\n\t\t\t<-done\n\t\t}\n\t})\n}\n\nfunc TestDwrapStartLocation(t *testing.T) {\n\t// Tests that the start location of a goroutine is unwrapped in Go 1.17 and later.\n\twithTestProcess(\"goroutinestackprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.stacktraceme\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\tassertNoError(err, t, \"GoroutinesInfo\")\n\t\tfound := false\n\t\tfor _, g := range gs {\n\t\t\tstartLoc := g.StartLoc(p)\n\t\t\tif startLoc.Fn == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt.Logf(\"%#v\\n\", startLoc.Fn.Name)\n\t\t\tif startLoc.Fn.Name == \"main.agoroutine\" {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Errorf(\"could not find any goroutine with a start location of main.agoroutine\")\n\t\t}\n\t})\n}\n\nfunc TestWatchpointStack(t *testing.T) {\n\tskipOn(t, \"not implemented\", \"freebsd\")\n\tskipOn(t, \"not implemented\", \"386\")\n\tskipOn(t, \"not implemented\", \"ppc64le\")\n\tskipOn(t, \"not implemented\", \"riscv64\")\n\tskipOn(t, \"not implemented\", \"loong64\")\n\tskipOn(t, \"see https://github.com/go-delve/delve/issues/2768\", \"windows\")\n\tif _, isTeamCityTest := os.LookupEnv(\"TEAMCITY_VERSION\"); isTeamCityTest {\n\t\tskipOn(t, \"CI is running a version of macOS that is too old (11.2)\", \"darwin\", \"arm64\")\n\t}\n\tprotest.AllowRecording(t)\n\n\tposition1 := []int{16, 17}\n\n\twithTestProcess(\"databpstack\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 11) // Position 0 breakpoint\n\t\tclearlen := len(p.Breakpoints().M)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 0\")\n\t\tassertLineNumber(p, t, 11, \"Continue 0\") // Position 0\n\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\n\t\t_, err = p.SetWatchpoint(0, scope, \"w\", proc.WatchWrite, nil)\n\t\tassertNoError(err, t, \"SetDataBreakpoint(write-only)\")\n\n\t\twatchbpnum := 3\n\t\tif recorded, _ := grp.Recorded(); recorded {\n\t\t\twatchbpnum = 4\n\t\t}\n\n\t\tif len(p.Breakpoints().M) != clearlen+watchbpnum {\n\t\t\t// want 1 watchpoint, 1 stack resize breakpoint, 1 out of scope sentinel (2 if recorded)\n\t\t\tt.Errorf(\"wrong number of breakpoints after setting watchpoint: %d\", len(p.Breakpoints().M)-clearlen)\n\t\t}\n\n\t\tvar retaddr uint64\n\t\tfor _, bp := range p.Breakpoints().M {\n\t\t\tfor _, breaklet := range bp.Breaklets {\n\t\t\t\tif breaklet.Kind&proc.WatchOutOfScopeBreakpoint != 0 {\n\t\t\t\t\tretaddr = bp.Addr\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Note: for recorded processes retaddr will not always be the return\n\t\t// address, ~50% of the times it will be the address of the CALL\n\t\t// instruction preceding the return address, this does not matter for this\n\t\t// test.\n\n\t\t_, err = p.SetBreakpoint(0, retaddr, proc.UserBreakpoint, nil)\n\t\tassertNoError(err, t, \"SetBreakpoint\")\n\n\t\tif len(p.Breakpoints().M) != clearlen+watchbpnum {\n\t\t\t// want 1 watchpoint, 1 stack resize breakpoint, 1 out of scope sentinel (which is also a user breakpoint) (and another out of scope sentinel if recorded)\n\t\t\tt.Errorf(\"wrong number of breakpoints after setting watchpoint: %d\", len(p.Breakpoints().M)-clearlen)\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 1\")\n\t\tassertLineNumberIn(p, t, position1, \"Continue 1\") // Position 1\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\t\tt.Logf(\"%#v\", p.CurrentThread().Breakpoint().Breakpoint)\n\t\tassertLineNumber(p, t, 24, \"Continue 2\") // Position 2 (watchpoint gone out of scope)\n\n\t\tif len(p.Breakpoints().M) != clearlen+1 {\n\t\t\t// want 1 user breakpoint set at retaddr\n\t\t\tt.Errorf(\"wrong number of breakpoints after watchpoint goes out of scope: %d\", len(p.Breakpoints().M)-clearlen)\n\t\t}\n\n\t\tif len(p.Breakpoints().WatchOutOfScope) != 1 {\n\t\t\tt.Errorf(\"wrong number of out-of-scope watchpoints after watchpoint goes out of scope: %d\", len(p.Breakpoints().WatchOutOfScope))\n\t\t}\n\n\t\terr = p.ClearBreakpoint(retaddr)\n\t\tassertNoError(err, t, \"ClearBreakpoint\")\n\n\t\tif len(p.Breakpoints().M) != clearlen {\n\t\t\t// want 1 user breakpoint set at retaddr\n\t\t\tt.Errorf(\"wrong number of breakpoints after removing user breakpoint: %d\", len(p.Breakpoints().M)-clearlen)\n\t\t}\n\t})\n}\n\nfunc TestWatchpointStackBackwardsOutOfScope(t *testing.T) {\n\tskipUnlessOn(t, \"only for recorded targets\", \"rr\")\n\tprotest.AllowRecording(t)\n\n\twithTestProcess(\"databpstack\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 11) // Position 0 breakpoint\n\t\tclearlen := len(p.Breakpoints().M)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 0\")\n\t\tassertLineNumber(p, t, 11, \"Continue 0\") // Position 0\n\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\n\t\t_, err = p.SetWatchpoint(0, scope, \"w\", proc.WatchWrite, nil)\n\t\tassertNoError(err, t, \"SetDataBreakpoint(write-only)\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 1\")\n\t\tassertLineNumber(p, t, 17, \"Continue 1\") // Position 1\n\n\t\tgrp.ChangeDirection(proc.Backward)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\t\tt.Logf(\"%#v\", p.CurrentThread().Breakpoint().Breakpoint)\n\t\tassertLineNumber(p, t, 16, \"Continue 2\") // Position 1 again (because of inverted movement)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 3\")\n\t\tt.Logf(\"%#v\", p.CurrentThread().Breakpoint().Breakpoint)\n\t\tassertLineNumber(p, t, 11, \"Continue 3\") // Position 0 (breakpoint 1 hit)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 4\")\n\t\tt.Logf(\"%#v\", p.CurrentThread().Breakpoint().Breakpoint)\n\t\tassertLineNumber(p, t, 23, \"Continue 4\") // Position 2 (watchpoint gone out of scope)\n\n\t\tif len(p.Breakpoints().M) != clearlen {\n\t\t\tt.Errorf(\"wrong number of breakpoints after watchpoint goes out of scope: %d\", len(p.Breakpoints().M)-clearlen)\n\t\t}\n\n\t\tif len(p.Breakpoints().WatchOutOfScope) != 1 {\n\t\t\tt.Errorf(\"wrong number of out-of-scope watchpoints after watchpoint goes out of scope: %d\", len(p.Breakpoints().WatchOutOfScope))\n\t\t}\n\n\t\tif len(p.Breakpoints().M) != clearlen {\n\t\t\t// want 1 user breakpoint set at retaddr\n\t\t\tt.Errorf(\"wrong number of breakpoints after removing user breakpoint: %d\", len(p.Breakpoints().M)-clearlen)\n\t\t}\n\t})\n}\n\nfunc TestSetOnFunctions(t *testing.T) {\n\t// The set command between function variables should fail with an error\n\t// Issue #2691\n\twithTestProcess(\"goroutinestackprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\t\terr = scope.SetVariable(\"main.func1\", \"main.func2\")\n\t\tif err == nil {\n\t\t\tt.Fatal(\"expected error when assigning between function variables\")\n\t\t}\n\t})\n}\n\nfunc TestNilPtrDerefInBreakInstr(t *testing.T) {\n\t// Checks that having a breakpoint on the exact instruction that causes a\n\t// nil pointer dereference does not cause problems.\n\n\tvar asmfile string\n\tswitch runtime.GOARCH {\n\tcase \"amd64\":\n\t\tasmfile = \"main_amd64.s\"\n\tcase \"arm64\":\n\t\tasmfile = \"main_arm64.s\"\n\tcase \"386\":\n\t\tasmfile = \"main_386.s\"\n\tcase \"ppc64le\":\n\t\tasmfile = \"main_ppc64le.s\"\n\tcase \"riscv64\":\n\t\tasmfile = \"main_riscv64.s\"\n\tcase \"loong64\":\n\t\tasmfile = \"main_loong64.s\"\n\tdefault:\n\t\tt.Fatalf(\"assembly file for %s not provided\", runtime.GOARCH)\n\t}\n\n\twithTestProcess(\"asmnilptr/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tf := filepath.Join(fixture.BuildDir, asmfile)\n\t\tf = strings.Replace(f, \"\\\\\", \"/\", -1)\n\t\tsetFileBreakpoint(p, t, f, 5)\n\t\tt.Logf(\"first continue\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tt.Logf(\"second continue\")\n\t\terr := grp.Continue()\n\t\tif runtime.GOOS == \"darwin\" && err != nil && err.Error() == \"bad access\" {\n\t\t\t// this is also ok\n\t\t\treturn\n\t\t}\n\t\tt.Logf(\"third continue\")\n\t\tassertNoError(err, t, \"Continue()\")\n\t\tbp := p.CurrentThread().Breakpoint()\n\t\tif bp != nil {\n\t\t\tt.Logf(\"%#v\\n\", bp.Breakpoint)\n\t\t}\n\t\tif bp == nil || (bp.Logical.Name != proc.UnrecoveredPanic) {\n\t\t\tt.Fatalf(\"no breakpoint hit or wrong breakpoint hit: %#v\", bp)\n\t\t}\n\t})\n}\n\nfunc TestStepIntoAutogeneratedSkip(t *testing.T) {\n\t// Tests that autogenerated functions are skipped with the new naming\n\t// scheme for autogenerated functions (issue #2948).\n\twithTestProcess(\"stepintobug\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 9)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(grp.Step(), t, \"Step\")\n\t\tassertLineNumber(p, t, 12, \"After step\")\n\t})\n}\n\nfunc TestFollowExec(t *testing.T) {\n\tskipOn(t, \"follow exec not implemented on freebsd\", \"freebsd\")\n\tskipOn(t, \"follow exec not implemented on macOS\", \"darwin\")\n\twithTestProcessArgs(\"spawn\", t, \".\", []string{\"spawn\", \"3\"}, 0, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tgrp.LogicalBreakpoints[1] = &proc.LogicalBreakpoint{LogicalID: 1, Set: proc.SetBreakpoint{FunctionName: \"main.traceme1\"}, HitCount: make(map[int64]uint64)}\n\t\tgrp.LogicalBreakpoints[2] = &proc.LogicalBreakpoint{LogicalID: 2, Set: proc.SetBreakpoint{FunctionName: \"main.traceme2\"}, HitCount: make(map[int64]uint64)}\n\t\tgrp.LogicalBreakpoints[3] = &proc.LogicalBreakpoint{LogicalID: 3, Set: proc.SetBreakpoint{FunctionName: \"main.traceme3\"}, HitCount: make(map[int64]uint64)}\n\n\t\tassertNoError(grp.SetBreakpointEnabled(grp.LogicalBreakpoints[1], true), t, \"EnableBreakpoint(main.traceme1)\")\n\t\tassertNoError(grp.SetBreakpointEnabled(grp.LogicalBreakpoints[2], true), t, \"EnableBreakpoint(main.traceme2)\")\n\t\tassertNoError(grp.SetBreakpointEnabled(grp.LogicalBreakpoints[3], true), t, \"EnableBreakpoint(main.traceme3)\")\n\n\t\tassertNoError(grp.FollowExec(true, \"\"), t, \"FollowExec\")\n\n\t\tfirst := true\n\t\tfinished := false\n\t\tpids := map[int]int{}\n\t\tns := map[string]int{}\n\t\tevents := []*proc.Event{}\n\n\t\tgrp.SetEventsFn(func(e *proc.Event) { events = append(events, e) })\n\n\t\tfor {\n\t\t\tt.Log(\"Continuing\")\n\t\t\terr := grp.Continue()\n\t\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue\")\n\n\t\t\tif first {\n\t\t\t\tfirst = false\n\t\t\t\tif grp.Selected != p {\n\t\t\t\t\tt.Fatalf(\"first breakpoint hit was not on the parent process\")\n\t\t\t\t}\n\t\t\t\tif grp.Selected.CurrentThread().Breakpoint().Breakpoint.LogicalID() != 1 {\n\t\t\t\t\tt.Fatalf(\"wrong breakpoint %#v\", grp.Selected.CurrentThread().Breakpoint().Breakpoint)\n\t\t\t\t}\n\t\t\t\tloc, err := proc.ThreadLocation(grp.Selected.CurrentThread())\n\t\t\t\tassertNoError(err, t, \"Location\")\n\t\t\t\tif loc.Fn.Name != \"main.traceme1\" {\n\t\t\t\t\tt.Fatalf(\"wrong stop location %#v\", loc)\n\t\t\t\t}\n\t\t\t} else if grp.Selected == p {\n\t\t\t\tif finished {\n\t\t\t\t\tt.Fatalf(\"breakpoint hit after the last one in the parent process\")\n\t\t\t\t}\n\t\t\t\tif p.CurrentThread().Breakpoint().Breakpoint.LogicalID() != 3 {\n\t\t\t\t\tt.Fatalf(\"wrong breakpoint %#v\", p.CurrentThread().Breakpoint().Breakpoint)\n\t\t\t\t}\n\t\t\t\tloc, err := proc.ThreadLocation(p.CurrentThread())\n\t\t\t\tassertNoError(err, t, \"Location\")\n\t\t\t\tif loc.Fn.Name != \"main.traceme3\" {\n\t\t\t\t\tt.Fatalf(\"wrong stop location %#v\", loc)\n\t\t\t\t}\n\t\t\t\tfinished = true\n\t\t\t} else {\n\t\t\t\tif finished {\n\t\t\t\t\tt.Fatalf(\"breakpoint hit after the last one in a child process\")\n\t\t\t\t}\n\t\t\t\tit := proc.ValidTargets{Group: grp}\n\t\t\t\tfor it.Next() {\n\t\t\t\t\ttgt := it.Target\n\t\t\t\t\tif !tgt.CurrentThread().Breakpoint().Active {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif tgt.CurrentThread().Breakpoint().Breakpoint.LogicalID() != 2 {\n\t\t\t\t\t\tt.Fatalf(\"wrong breakpoint %#v\", grp.Selected.CurrentThread().Breakpoint().Breakpoint)\n\t\t\t\t\t}\n\t\t\t\t\tpids[tgt.Pid()]++\n\t\t\t\t\tloc, err := proc.ThreadLocation(tgt.CurrentThread())\n\t\t\t\t\tassertNoError(err, t, \"Location\")\n\t\t\t\t\tif loc.Fn.Name != \"main.traceme2\" {\n\t\t\t\t\t\tt.Fatalf(\"wrong stop location %#v\", loc)\n\t\t\t\t\t}\n\t\t\t\t\tnvar := evalVariable(tgt, t, \"n\")\n\t\t\t\t\tif nvar.Unreadable != nil {\n\t\t\t\t\t\tt.Fatalf(\"unreadable variable 'n' on target %d: %v\", tgt.Pid(), nvar.Unreadable)\n\t\t\t\t\t}\n\t\t\t\t\tt.Logf(\"variable 'n' on target %d: %#v (%v)\", tgt.Pid(), nvar, nvar.Value)\n\t\t\t\t\tns[constant.StringVal(nvar.Value)]++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif len(ns) != 3 {\n\t\t\tt.Errorf(\"bad contents of ns: %#v\", ns)\n\t\t}\n\t\tfor _, v := range ns {\n\t\t\tif v != 1 {\n\t\t\t\tt.Errorf(\"bad contents of ns: %#v\", ns)\n\t\t\t}\n\t\t}\n\t\tif ns[\"C0\"] != 1 || ns[\"C1\"] != 1 || ns[\"C2\"] != 1 {\n\t\t\tt.Errorf(\"bad contents of ns: %#v\", ns)\n\t\t}\n\n\t\tif len(pids) != 3 {\n\t\t\tt.Errorf(\"bad contents of pids: %#v\", pids)\n\t\t}\n\t\tfor _, v := range pids {\n\t\t\tif v != 1 {\n\t\t\t\tt.Errorf(\"bad contents of pids: %#v\", pids)\n\t\t\t}\n\t\t}\n\n\t\tspawned := map[int]*proc.ProcessSpawnedEventDetails{}\n\t\tfor _, event := range events {\n\t\t\tif event.Kind == proc.EventProcessSpawned {\n\t\t\t\tdetails := event.ProcessSpawnedEventDetails\n\t\t\t\tspawned[details.PID] = details\n\t\t\t}\n\t\t}\n\n\t\tfor pid := range pids {\n\t\t\tif _, ok := spawned[pid]; !ok {\n\t\t\t\tt.Errorf(\"Expected a process spawned event for target %d\", pid)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestFollowExecRegex(t *testing.T) {\n\tskipOn(t, \"follow exec not implemented on freebsd\", \"freebsd\")\n\tskipOn(t, \"follow exec not implemented on macOS\", \"darwin\")\n\twithTestProcessArgs(\"spawn\", t, \".\", []string{\"spawn\", \"3\"}, 0, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tgrp.LogicalBreakpoints[2] = &proc.LogicalBreakpoint{LogicalID: 2, Set: proc.SetBreakpoint{FunctionName: \"main.traceme2\"}, HitCount: make(map[int64]uint64)}\n\n\t\tassertNoError(grp.SetBreakpointEnabled(grp.LogicalBreakpoints[2], true), t, \"EnableBreakpoint(main.traceme2)\")\n\n\t\tassertNoError(grp.FollowExec(true, \"child C2\"), t, \"FollowExec\")\n\n\t\tcmdlines := map[int]string{}\n\t\tevents := []*proc.Event{}\n\n\t\tgrp.SetEventsFn(func(e *proc.Event) { events = append(events, e) })\n\n\t\tfor {\n\t\t\tt.Log(\"Continuing\")\n\t\t\terr := grp.Continue()\n\t\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue\")\n\n\t\t\tif grp.Selected == p {\n\t\t\t\tt.Fatalf(\"unexpected break in parent process\")\n\t\t\t}\n\n\t\t\tit := proc.ValidTargets{Group: grp}\n\t\t\tfor it.Next() {\n\t\t\t\ttgt := it.Target\n\t\t\t\tif !tgt.CurrentThread().Breakpoint().Active {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif tgt.CurrentThread().Breakpoint().Breakpoint.LogicalID() != 2 {\n\t\t\t\t\tt.Fatalf(\"wrong breakpoint %#v\", grp.Selected.CurrentThread().Breakpoint().Breakpoint)\n\t\t\t\t}\n\t\t\t\tcmdlines[tgt.Pid()] = tgt.CmdLine\n\t\t\t\tloc, err := proc.ThreadLocation(tgt.CurrentThread())\n\t\t\t\tassertNoError(err, t, \"Location\")\n\t\t\t\tif loc.Fn.Name != \"main.traceme2\" {\n\t\t\t\t\tt.Fatalf(\"wrong stop location %#v\", loc)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tspawned := map[int]*proc.ProcessSpawnedEventDetails{}\n\t\tfor _, event := range events {\n\t\t\tif event.Kind == proc.EventProcessSpawned {\n\t\t\t\tdetails := event.ProcessSpawnedEventDetails\n\t\t\t\tspawned[details.PID] = details\n\t\t\t}\n\t\t}\n\n\t\tif len(cmdlines) != 1 {\n\t\t\tt.Fatalf(\"bad content of cmdlines: want len(cmdlines) == 1, got %d\", len(cmdlines))\n\t\t}\n\n\t\tfor pid, cmdline := range cmdlines {\n\t\t\tif !strings.Contains(cmdline, \"child C2\") {\n\t\t\t\tt.Fatalf(\"bad contents of cmdline: want child C2, got %q\", cmdline)\n\t\t\t}\n\n\t\t\tevent, ok := spawned[pid]\n\t\t\tif !ok {\n\t\t\t\tt.Fatalf(\"bad content of events: want an event for child, got %#v\", spawned)\n\t\t\t}\n\n\t\t\tif event.Cmdline != cmdline {\n\t\t\t\tt.Fatalf(\"cmdline does not match: %q != %q\", event.Cmdline, cmdline)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestFollowExecNonGo(t *testing.T) {\n\tskipOn(t, \"follow exec not implemented on freebsd\", \"freebsd\")\n\tskipOn(t, \"follow exec not implemented on macOS\", \"darwin\")\n\twithTestProcessArgs(\"nongochild/\", t, \"../../_fixtures/nongochild/\", []string{}, 0, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.FollowExec(true, \"\"), t, \"FollowExec\")\n\n\t\t// Collect events\n\t\tvar events []*proc.Event\n\t\tgrp.SetEventsFn(func(e *proc.Event) { events = append(events, e) })\n\n\t\t// Execute the process\n\t\tfor {\n\t\t\tt.Log(\"Continuing\")\n\t\t\terr := grp.Continue()\n\t\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// Verify that a child was spawned\n\t\tvar spawned *proc.ProcessSpawnedEventDetails\n\t\tfor _, event := range events {\n\t\t\tif event.Kind == proc.EventProcessSpawned {\n\t\t\t\tspawned = event.ProcessSpawnedEventDetails\n\t\t\t}\n\t\t}\n\t\tif spawned == nil {\n\t\t\tt.Fatal(\"Did not log an event for the child\")\n\t\t}\n\t})\n}\n\nfunc TestEscapeCheckUnreadable(t *testing.T) {\n\t// A failure in escapeCheck to dereference a field should not cause\n\t// infinite recursion. See issue #3310.\n\twithTestProcessArgs(\"reflecttypefncall\", t, \".\", []string{}, protest.AllNonOptimized, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 9)\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tproc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), \"value.Type()\", normalLoadConfig, true)\n\t})\n}\n\nfunc TestStepShadowConcurrentBreakpoint(t *testing.T) {\n\t// Checks that a StepBreakpoint can not shadow a concurrently hit user breakpoint\n\twithTestProcess(\"stepshadow\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbreak2 := setFunctionBreakpoint(p, t, \"main.stacktraceme2\")\n\t\tbreakMain := setFileBreakpoint(p, t, fixture.Source, 15)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tstacktraceme1calls, stacktraceme2calls := 0, 0\n\n\t\tfor {\n\t\t\tt.Logf(\"stop (%d %d):\", stacktraceme1calls, stacktraceme2calls)\n\t\t\tfor _, th := range p.ThreadList() {\n\t\t\t\tloc, _ := proc.ThreadLocation(th)\n\t\t\t\tt.Logf(\"\\t%s:%d\\n\", loc.File, loc.Line)\n\t\t\t\tbp := th.Breakpoint().Breakpoint\n\t\t\t\tif bp != nil && bp.Addr == break2.Addr {\n\t\t\t\t\tstacktraceme2calls++\n\t\t\t\t}\n\t\t\t\t// make stop on the breakpoint in main.main the selected goroutine so we can use step later\n\t\t\t\tif bp != nil && bp.Addr == breakMain.Addr {\n\t\t\t\t\tg, _ := proc.GetG(th)\n\t\t\t\t\tp.SwitchGoroutine(g)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfile, lineno := currentLineNumber(p, t)\n\n\t\t\tvar err error\n\t\t\tvar reason string\n\t\t\tswitch lineno {\n\t\t\tdefault:\n\t\t\t\tt.Fatalf(\"unexpected stop location %s:%d\", file, lineno)\n\t\t\tcase 15: // loop in main.main\n\t\t\t\treason = \"Step()\"\n\t\t\t\terr = grp.Step()\n\t\t\tcase 28: // main.stacktraceme1\n\t\t\t\tstacktraceme1calls++\n\t\t\t\treason = \"Continue()\"\n\t\t\t\terr = grp.Continue()\n\t\t\tcase 30, 31: // main.stacktraceme2\n\t\t\t\treason = \"Continue()\"\n\t\t\t\terr = grp.Continue()\n\t\t\t}\n\t\t\tif _, isexited := err.(proc.ErrProcessExited); isexited {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, reason)\n\t\t}\n\n\t\tt.Logf(\"%d %d\\n\", stacktraceme1calls, stacktraceme2calls)\n\n\t\tif stacktraceme1calls != 100 {\n\t\t\tt.Errorf(\"wrong number of calls to stacktraceme1 found: %d\", stacktraceme1calls)\n\t\t}\n\t\tif stacktraceme2calls != 100 {\n\t\t\tt.Errorf(\"wrong number of calls to stacktraceme2 found: %d\", stacktraceme2calls)\n\t\t}\n\t})\n}\n\nfunc TestFollowExecRegexFilter(t *testing.T) {\n\tskipOn(t, \"follow exec not implemented on freebsd\", \"freebsd\")\n\tskipOn(t, \"follow exec not implemented on macOS\", \"darwin\")\n\twithTestProcessArgs(\"spawn\", t, \".\", []string{\"spawn\", \"3\"}, 0, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tgrp.LogicalBreakpoints[1] = &proc.LogicalBreakpoint{LogicalID: 1, Set: proc.SetBreakpoint{FunctionName: \"main.traceme1\"}, HitCount: make(map[int64]uint64)}\n\t\tgrp.LogicalBreakpoints[2] = &proc.LogicalBreakpoint{LogicalID: 2, Set: proc.SetBreakpoint{FunctionName: \"main.traceme2\"}, HitCount: make(map[int64]uint64)}\n\t\tgrp.LogicalBreakpoints[3] = &proc.LogicalBreakpoint{LogicalID: 3, Set: proc.SetBreakpoint{FunctionName: \"main.traceme3\"}, HitCount: make(map[int64]uint64)}\n\n\t\tassertNoError(grp.SetBreakpointEnabled(grp.LogicalBreakpoints[1], true), t, \"EnableBreakpoint(main.traceme1)\")\n\t\tassertNoError(grp.SetBreakpointEnabled(grp.LogicalBreakpoints[2], true), t, \"EnableBreakpoint(main.traceme2)\")\n\t\tassertNoError(grp.SetBreakpointEnabled(grp.LogicalBreakpoints[3], true), t, \"EnableBreakpoint(main.traceme3)\")\n\n\t\tassertNoError(grp.FollowExec(true, \"spawn.* child C1\"), t, \"FollowExec\")\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 1\")\n\t\tassertFunctionName(grp.Selected, t, \"main.traceme1\", \"Program did not continue to the expected location (1)\")\n\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\t\tassertFunctionName(grp.Selected, t, \"main.traceme2\", \"Program did not continue to the expected location (2)\")\n\t\tassertNoError(grp.Continue(), t, \"Continue 3\")\n\t\tassertFunctionName(grp.Selected, t, \"main.traceme3\", \"Program did not continue to the expected location (3)\")\n\t\terr := grp.Continue()\n\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\treturn\n\t\t}\n\t\tassertNoError(err, t, \"Continue 4\")\n\t\tif err == nil {\n\t\t\tt.Fatal(\"process did not exit after 4 continues\")\n\t\t}\n\t})\n}\n\nfunc TestReadTargetArguments(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcessArgs(\"restartargs\", t, \".\", []string{\"one\", \"two\", \"three\"}, 0, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tt.Logf(\"command line: %q\\n\", p.CmdLine)\n\t\tif !strings.HasSuffix(p.CmdLine, \" one two three\") {\n\t\t\tt.Fatalf(\"wrong command line\")\n\t\t}\n\t})\n}\n\nfunc testWaitForSetup(t *testing.T, mu *sync.Mutex, started *bool) (*exec.Cmd, *proc.WaitFor) {\n\tvar buildFlags protest.BuildFlags\n\tif buildMode == \"pie\" {\n\t\tbuildFlags |= protest.BuildModePIE\n\t}\n\tfixture := protest.BuildFixture(t, \"loopprog\", buildFlags)\n\n\tcmd := exec.Command(fixture.Path)\n\n\tgo func() {\n\t\ttime.Sleep(2 * time.Second)\n\t\tcmd.Stdout = os.Stdout\n\t\tcmd.Stderr = os.Stderr\n\t\tassertNoError(cmd.Start(), t, \"starting fixture\")\n\t\tmu.Lock()\n\t\t*started = true\n\t\tmu.Unlock()\n\t}()\n\n\twaitFor := &proc.WaitFor{Name: fixture.Path, Interval: 100 * time.Millisecond, Duration: 10 * time.Second}\n\n\treturn cmd, waitFor\n}\n\nfunc TestWaitFor(t *testing.T) {\n\tskipOn(t, \"waitfor implementation is delegated to debugserver\", \"darwin\")\n\tskipOn(t, \"flaky\", \"freebsd\")\n\n\tvar mu sync.Mutex\n\tstarted := false\n\n\tcmd, waitFor := testWaitForSetup(t, &mu, &started)\n\n\tpid, err := native.WaitFor(waitFor)\n\tassertNoError(err, t, \"waitFor.Wait()\")\n\tif pid != cmd.Process.Pid {\n\t\tt.Errorf(\"pid mismatch, expected %d got %d\", pid, cmd.Process.Pid)\n\t}\n\n\tcmd.Process.Kill()\n\tcmd.Wait()\n}\n\nfunc TestWaitForAttach(t *testing.T) {\n\tskipOn(t, \"flaky\", \"freebsd\")\n\tif testBackend == \"lldb\" && runtime.GOOS == \"linux\" {\n\t\tbs, _ := os.ReadFile(\"/proc/sys/kernel/yama/ptrace_scope\")\n\t\tif bs == nil || strings.TrimSpace(string(bs)) != \"0\" {\n\t\t\tt.Logf(\"can not run TestAttachDetach: %v\\n\", bs)\n\t\t\treturn\n\t\t}\n\t}\n\tif testBackend == \"rr\" {\n\t\treturn\n\t}\n\n\tvar mu sync.Mutex\n\tstarted := false\n\n\tcmd, waitFor := testWaitForSetup(t, &mu, &started)\n\n\tvar p *proc.TargetGroup\n\tvar err error\n\n\tswitch testBackend {\n\tcase \"native\":\n\t\tp, err = native.Attach(0, waitFor, []string{})\n\tcase \"lldb\":\n\t\tpath := \"\"\n\t\tif runtime.GOOS == \"darwin\" {\n\t\t\tpath = waitFor.Name\n\t\t}\n\t\tp, err = gdbserial.LLDBAttach(0, path, waitFor, []string{})\n\tdefault:\n\t\terr = fmt.Errorf(\"unknown backend %q\", testBackend)\n\t}\n\n\tassertNoError(err, t, \"Attach\")\n\n\tmu.Lock()\n\tif !started {\n\t\tt.Fatalf(\"attach succeeded but started is false\")\n\t}\n\tmu.Unlock()\n\n\tp.Detach(true)\n\n\tcmd.Wait()\n}\n\nfunc TestIssue3545(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcessArgs(\"nilptr\", t, \"\", []string{}, protest.EnableOptimization, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tif err != nil && err.Error() == \"bad access\" {\n\t\t\tgrp.Continue()\n\t\t}\n\t\tlocations, err := proc.ThreadStacktrace(p, p.CurrentThread(), 40)\n\t\tassertNoError(err, t, \"Stacktrace()\")\n\t\tvar foundMain bool\n\t\tfor _, loc := range locations {\n\t\t\tif loc.Call.Fn != nil && loc.Call.Fn.Name == \"main.main\" {\n\t\t\t\tif foundMain {\n\t\t\t\t\tt.Fatal(\"main.main found more than once in the stacktrace\")\n\t\t\t\t}\n\t\t\t\tfoundMain = true\n\t\t\t}\n\t\t}\n\t\tif !foundMain {\n\t\t\tt.Fatal(\"did not find main.main in stack trace\")\n\t\t}\n\t})\n}\n\nfunc TestPanicLine(t *testing.T) {\n\twithTestProcess(\"panicline\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tif runtime.GOOS == \"darwin\" && err != nil && err.Error() == \"bad access\" {\n\t\t\t// not supported\n\t\t\treturn\n\t\t}\n\t\tassertNoError(err, t, \"Continue()\")\n\t\tframes, err := proc.ThreadStacktrace(p, p.CurrentThread(), 20)\n\t\tassertNoError(err, t, \"ThreadStacktrace\")\n\t\tlogStacktrace(t, p, frames)\n\n\t\tfound := false\n\t\tfor _, frame := range frames {\n\t\t\tif strings.HasSuffix(frame.Call.File, \"panicline.go\") && frame.Call.Line == 7 {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatalf(\"could not find panicline.go:6\")\n\t\t}\n\t})\n}\n\nfunc TestReadClosure(t *testing.T) {\n\twithTestProcess(\"closurecontents\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tavalues := []int64{0, 3, 9, 27}\n\t\tfor i := range 4 {\n\t\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\t\taccV := evalVariable(p, t, \"acc\")\n\t\t\tt.Log(multiLineVar(accV))\n\t\t\tif len(accV.Children) != 2 {\n\t\t\t\tt.Fatal(\"wrong number of children\")\n\t\t\t}\n\t\t\tfound := 0\n\t\t\tfor j := range accV.Children {\n\t\t\t\tv := &accV.Children[j]\n\t\t\t\tswitch v.Name {\n\t\t\t\tcase \"scale\":\n\t\t\t\t\tfound++\n\t\t\t\t\tif val, _ := constant.Int64Val(v.Value); val != 3 {\n\t\t\t\t\t\tt.Error(\"wrong value for scale\")\n\t\t\t\t\t}\n\t\t\t\tcase \"a\":\n\t\t\t\t\tfound++\n\t\t\t\t\tif val, _ := constant.Int64Val(v.Value); val != avalues[i] {\n\t\t\t\t\t\tt.Errorf(\"wrong value for a: %d\", val)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif found != 2 {\n\t\t\t\tt.Error(\"wrong captured variables\")\n\t\t\t}\n\n\t\t\tassertVariable(t, evalVariable(p, t, \"acc.scale\"), varTest{name: \"acc.scale\", preserveName: true, value: \"3\", varType: \"int\"})\n\t\t\tassertVariable(t, evalVariable(p, t, \"acc.a\"), varTest{name: \"acc.a\", preserveName: true, value: fmt.Sprintf(\"%d\", avalues[i]), varType: \"int\"})\n\t\t}\n\t})\n}\n\nfunc TestStepIntoGoroutine(t *testing.T) {\n\ttestseq2(t, \"goroutinestackprog\", \"\", []seqTest{\n\t\t{contContinue, 23},\n\t\t{contStep, 7},\n\t\t{contNothing, func(p *proc.Target) {\n\t\t\tvari := api.ConvertVar(evalVariable(p, t, \"i\"))\n\t\t\tvaris := vari.SinglelineString()\n\t\t\tt.Logf(\"i = %s\", varis)\n\t\t\tif varis != \"0\" {\n\t\t\t\tt.Fatalf(\"wrong value for variable i: %s\", vari.SinglelineString())\n\t\t\t}\n\t\t}},\n\t})\n}\n\nfunc TestWatchpointInterface(t *testing.T) {\n\tskipOn(t, \"not implemented\", \"freebsd\")\n\tskipOn(t, \"not implemented\", \"386\")\n\tskipOn(t, \"not implemented\", \"ppc64le\")\n\tskipOn(t, \"not implemented\", \"riscv64\")\n\tskipOn(t, \"not implemented\", \"loong64\")\n\tskipOn(t, \"see https://github.com/go-delve/delve/issues/2768\", \"windows\")\n\tprotest.AllowRecording(t)\n\n\twithTestProcess(\"watchpointInterface\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\t// Set breakpoint at line after error is created and printed\n\t\tsetFileBreakpoint(p, t, fixture.Source, 11)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertLineNumber(p, t, 11, \"continued to wrong line\")\n\n\t\t// Get scope and set watchpoint on interface type\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\n\t\t// Set watchpoint on the error interface\n\t\t_, err = p.SetWatchpoint(0, scope, \"err\", proc.WatchWrite, nil)\n\t\tassertNoError(err, t, \"SetWatchpoint on interface type\")\n\n\t\t// Continue to hit the watchpoint when the error is modified\n\t\tassertNoError(grp.Continue(), t, \"Continue to watchpoint\")\n\n\t\t// Verify we stopped at the correct line where err is modified\n\t\tassertLineNumberIn(p, t, []int{12, 13}, \"stopped at wrong line after interface watchpoint\")\n\n\t\t// Continue to the end\n\t\tassertNoError(grp.Continue(), t, \"Final continue\")\n\t})\n}\n\nfunc TestWatchpointInterfaceNil(t *testing.T) {\n\tskipOn(t, \"not implemented\", \"freebsd\")\n\tskipOn(t, \"not implemented\", \"386\")\n\tskipOn(t, \"not implemented\", \"ppc64le\")\n\tskipOn(t, \"not implemented\", \"riscv64\")\n\tskipOn(t, \"not implemented\", \"loong64\")\n\tskipOn(t, \"see https://github.com/go-delve/delve/issues/2768\", \"windows\")\n\tprotest.AllowRecording(t)\n\n\twithTestProcess(\"watchpointInterfaceNil\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\t// Set breakpoint at line after error is created and printed\n\t\tsetFileBreakpoint(p, t, fixture.Source, 10)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertLineNumber(p, t, 10, \"continued to wrong line\")\n\n\t\t// Get scope and set watchpoint on interface type\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\n\t\t// Set watchpoint on the error interface\n\t\t_, err = p.SetWatchpoint(0, scope, \"err\", proc.WatchWrite, nil)\n\t\tassertNoError(err, t, \"SetWatchpoint on interface type\")\n\n\t\t// Continue to hit the watchpoint when the error is modified\n\t\tassertNoError(grp.Continue(), t, \"Continue to watchpoint\")\n\n\t\t// Verify we stopped at the correct line where err is modified\n\t\tassertLineNumberIn(p, t, []int{11, 12}, \"stopped at wrong line after interface watchpoint\")\n\n\t\t// Continue to hit the watchpoint when the error is modified again\n\t\tassertNoError(grp.Continue(), t, \"Continue to watchpoint (2)\")\n\n\t\t// Verify we stopped at the correct line where err is modified\n\t\tassertLineNumberIn(p, t, []int{13, 14}, \"stopped at wrong line after interface watchpoint (2)\")\n\n\t\t// Continue to the end\n\t\tassertNoError(grp.Continue(), t, \"Final continue\")\n\t})\n}\n\nfunc TestStackwatchClearBug(t *testing.T) {\n\tskipOn(t, \"not implemented\", \"freebsd\")\n\tskipOn(t, \"not implemented\", \"386\")\n\tskipOn(t, \"not implemented\", \"ppc64le\")\n\tskipOn(t, \"not implemented\", \"loong64\")\n\tskipOn(t, \"see https://github.com/go-delve/delve/issues/2768\", \"windows\")\n\n\tshowbps := func(bps *proc.BreakpointMap) {\n\t\tfor _, bp := range bps.M {\n\t\t\tt.Logf(\"\\t%s\\n\", bp)\n\t\t}\n\t}\n\n\twithTestProcess(\"stackwatchbug\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 9)\n\t\tbpsBefore := p.Breakpoints()\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 0\")\n\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\n\t\tfor _, s := range []string{\"vars[0]\", \"vars[3]\", \"vars[2]\", \"vars[1]\"} {\n\t\t\t_, err := p.SetWatchpoint(0, scope, s, proc.WatchWrite, nil)\n\t\t\tassertNoError(err, t, \"SetWatchpoint(write-only)\")\n\t\t}\n\n\t\tt.Logf(\"After setting watchpoints:\")\n\t\tshowbps(p.Breakpoints())\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 1\")\n\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\t\tassertNoError(grp.Continue(), t, \"Continue 3\")\n\t\tassertNoError(grp.Continue(), t, \"Continue 4\")\n\t\tf, l := currentLineNumber(p, t)\n\t\tt.Logf(\"at %s:%d\", f, l)\n\t\tif l != 19 {\n\t\t\tt.Error(\"Wrong position after fourth continue\")\n\t\t}\n\n\t\tbpsAfter := p.Breakpoints()\n\t\tt.Logf(\"After watchpoint goes out of scope:\")\n\t\tshowbps(bpsAfter)\n\t\tif len(bpsBefore.M) != len(bpsAfter.M) {\n\t\t\tt.Errorf(\"wrong number of breakpoints\")\n\t\t}\n\t})\n}\n\nfunc TestChainedBreakpoint(t *testing.T) {\n\tassertCallerLine := func(t *testing.T, p *proc.Target, pos string, tgt int) {\n\t\tt.Helper()\n\t\tframes, err := proc.ThreadStacktrace(p, p.CurrentThread(), 5)\n\t\tassertNoError(err, t, \"ThreadStacktrace\")\n\t\tt.Logf(\"%s: %s:%d\", pos, frames[1].Call.File, frames[1].Call.Line)\n\t\tif frames[1].Call.Line != tgt {\n\t\t\tt.Fatalf(\"wrong line number, expected %d\", tgt)\n\t\t}\n\t}\n\n\twithTestProcess(\"bphitcountchain\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tnumphys := func(lbp *proc.LogicalBreakpoint) int {\n\t\t\tcount := 0\n\t\t\tfor _, bp := range p.Breakpoints().M {\n\t\t\t\tif bp.LogicalID() == lbp.LogicalID {\n\t\t\t\t\tcount++\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn count\n\t\t}\n\n\t\tbp := setFunctionBreakpoint(p, t, \"main.breakfunc3\")\n\t\tlbp3 := bp.Logical\n\t\tbp = setFunctionBreakpoint(p, t, \"main.breakfunc2\")\n\t\tlbp2 := bp.Logical\n\t\tbp = setFunctionBreakpoint(p, t, \"main.breakfunc1\")\n\t\tlbp1 := bp.Logical\n\n\t\tassertPhysCount := func(lbp1cnt, lbp2cnt, lbp3cnt int) {\n\t\t\tt.Helper()\n\t\t\tt.Logf(\"lbp1: %d lbp2: %d lbp3: %d\", numphys(lbp1), numphys(lbp2), numphys(lbp3))\n\t\t\tif numphys(lbp1) != lbp1cnt || numphys(lbp2) != lbp2cnt || numphys(lbp3) != lbp3cnt {\n\t\t\t\tt.Fatal(\"wrong number of physical breakpoints\")\n\t\t\t}\n\t\t}\n\n\t\tassertNoError(grp.ChangeBreakpointCondition(lbp1, \"\", \"== 1\", false), t, \"ChangeBreakpointCondition\")\n\t\tassertNoError(grp.ChangeBreakpointCondition(lbp2, fmt.Sprintf(\"delve.bphitcount[%d] > 0\", lbp1.LogicalID), \"== 1\", false), t, \"ChangeBreakpointCondition\")\n\t\tassertNoError(grp.ChangeBreakpointCondition(lbp3, fmt.Sprintf(\"delve.bphitcount[%d] > 0\", lbp2.LogicalID), \"== 1\", false), t, \"ChangeBreakpointCondition\")\n\n\t\tassertPhysCount(1, 0, 0)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 1\")\n\t\tassertCallerLine(t, p, \"continue 1\", 21)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\t\tassertCallerLine(t, p, \"continue 2\", 25)\n\n\t\tassertPhysCount(0, 1, 0)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 3\")\n\t\tassertCallerLine(t, p, \"continue 3\", 28)\n\n\t\tassertPhysCount(0, 0, 1)\n\n\t\terr := grp.Continue()\n\t\tif !errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\tassertNoError(err, t, \"Continue 4\")\n\t\t}\n\n\t\t// === Restart ===\n\n\t\tt.Logf(\"=== Restart ===\")\n\n\t\tgrp2 := startTestProcessArgs(fixture, t, \".\", []string{})\n\t\tproc.Restart(grp2, grp, func(lbp *proc.LogicalBreakpoint, err error) {\n\t\t\tt.Fatalf(\"discarded logical breakpoint %v: %v\", lbp, err)\n\t\t})\n\n\t\tgrp = grp2\n\t\tp = grp.Selected\n\n\t\tassertPhysCount(1, 0, 0)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 1\")\n\t\tassertCallerLine(t, p, \"continue 1\", 21)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\t\tassertCallerLine(t, p, \"continue 2\", 25)\n\n\t\tassertPhysCount(0, 1, 0)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 3\")\n\t\tassertCallerLine(t, p, \"continue 3\", 28)\n\n\t\tassertPhysCount(0, 0, 1)\n\n\t\terr = grp.Continue()\n\t\tif !errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\tassertNoError(err, t, \"Continue 4\")\n\t\t}\n\t})\n}\n\nfunc TestDelveCatch(t *testing.T) {\n\twithTestProcess(\"delvecatch\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFileBreakpoint(p, t, fixture.Source, 7)\n\t\tbp.UserBreaklet().Cond, _ = parser.ParseExpr(`delve.catch(iface.(data) == \"hello\")`)\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tassertLineNumber(p, t, 7, \"continue\")\n\t\tassertVariable(t, evalVariable(p, t, \"i\"), varTest{name: \"i\", preserveName: true, value: \"4\", varType: \"int\"})\n\t})\n}\n\nfunc TestTrimpathDetection(t *testing.T) {\n\tf1 := protest.BuildFixture(t, \"math\", 0)\n\tbi1 := proc.NewBinaryInfo(runtime.GOOS, runtime.GOARCH)\n\tassertNoError(bi1.LoadBinaryInfo(f1.Path, 0x10000, nil), t, \"LoadBinaryInfo\")\n\tif bi1.Images[0].Trimpath {\n\t\tt.Error(\"expected trimpath used to be false, was true\")\n\t}\n\n\tf2 := protest.BuildFixture(t, \"math\", protest.Trimpath)\n\tbuildinfo, _ := buildinfo.ReadFile(f2.Path)\n\tfmt.Printf(\"%#v\\n\", buildinfo)\n\n\tb2 := proc.NewBinaryInfo(runtime.GOOS, runtime.GOARCH)\n\tassertNoError(b2.LoadBinaryInfo(f2.Path, 0x10000, nil), t, \"LoadBinaryInfo\")\n\tif !b2.Images[0].Trimpath {\n\t\tt.Error(\"expected trimpath used to be true, was false\")\n\t}\n}\n\nfunc TestNonGoBinaryWithGoDlopen(t *testing.T) {\n\tif runtime.GOOS != \"linux\" {\n\t\tt.Skip(\"only supported on linux\")\n\t}\n\tif testBackend != \"native\" {\n\t\tt.Skip(\"only supported with native backend\")\n\t}\n\tif objcopyPath, _ := exec.LookPath(\"cc\"); objcopyPath == \"\" {\n\t\tt.Skip(\"no C compiler in path\")\n\t}\n\tprotest.MustHaveCgo(t)\n\n\tfixturesDir := protest.FindFixturesDir()\n\ttmpdir := t.TempDir()\n\tgoSoPath := filepath.Join(tmpdir, \"golib.so\")\n\n\tcmd := exec.Command(\"go\", \"build\", \"-buildmode=c-shared\", \"-o\", goSoPath, \".\")\n\tcmd.Dir = filepath.Join(fixturesDir, \"godlopen\", \"golib\")\n\tout, err := cmd.CombinedOutput()\n\tif err != nil {\n\t\tt.Fatalf(\"failed to build Go shared object: %v\\n%s\", err, out)\n\t}\n\n\tcBinPath := filepath.Join(tmpdir, \"godlopen\")\n\tcSrcPath := filepath.Join(fixturesDir, \"godlopen\", \"main.c\")\n\tcmd = exec.Command(\"cc\", \"-g0\", \"-o\", cBinPath, cSrcPath, \"-ldl\")\n\tout, err = cmd.CombinedOutput()\n\tif err != nil {\n\t\tt.Fatalf(\"failed to build C binary: %v\\n%s\", err, out)\n\t}\n\n\tgrp, err := native.Launch([]string{cBinPath, goSoPath}, tmpdir, 0, []string{}, \"\", \"\", proc.OutputRedirect{}, proc.OutputRedirect{})\n\tif err != nil {\n\t\tt.Fatalf(\"Launch failed: %v\", err)\n\t}\n\tdefer grp.Detach(true)\n\n\tp := grp.Selected\n\n\tif len(p.BinInfo().Images) == 0 {\n\t\tt.Fatal(\"no images loaded\")\n\t}\n\tif p.BinInfo().Images[0].IsGo {\n\t\tt.Error(\"expected Images[0].IsGo to be false\")\n\t}\n\tif p.BinInfo().HasGoImage() {\n\t\tt.Error(\"expected HasGoImage to be false before dlopen\")\n\t}\n\n\terr = grp.Continue()\n\tif err != nil {\n\t\tt.Fatalf(\"Continue failed: %v\", err)\n\t}\n\n\tif grp.Selected.StopReason != proc.StopSharedLibLoaded {\n\t\tt.Fatalf(\"expected StopSharedLibLoaded stop reason, got %v\", grp.Selected.StopReason)\n\t}\n\tif !p.BinInfo().HasGoImage() {\n\t\tt.Fatal(\"expected HasGoImage to be true after shared library load\")\n\t}\n\n\texpectedFuncs := map[string]bool{\n\t\t\"C.GoFunction\": false,\n\t\t\"main.main\":    false,\n\t}\n\tfor _, fn := range p.BinInfo().Functions {\n\t\tif _, ok := expectedFuncs[fn.Name]; ok {\n\t\t\texpectedFuncs[fn.Name] = true\n\t\t}\n\t}\n\tfor name, found := range expectedFuncs {\n\t\tif !found {\n\t\t\tt.Errorf(\"could not find %s in loaded debug symbols\", name)\n\t\t}\n\t}\n\n\t// Continue again to let the process finish.\n\terr = grp.Continue()\n\tif err != nil {\n\t\tvar pe proc.ErrProcessExited\n\t\tif !errors.As(err, &pe) {\n\t\t\tt.Fatalf(\"second Continue failed: %v\", err)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/proc_unexported_test.go",
    "content": "package proc\n\nimport (\n\t\"testing\"\n)\n\nfunc TestAlignAddr(t *testing.T) {\n\tc := func(align, in, tgt int64) {\n\t\tout := alignAddr(in, align)\n\t\tif out != tgt {\n\t\t\tt.Errorf(\"alignAddr(%x, %x) = %x, expected %x\", in, align, out, tgt)\n\t\t}\n\t}\n\n\tfor i := int64(0); i <= 0xf; i++ {\n\t\tc(1, i, i)\n\t\tc(1, i+0x10000, i+0x10000)\n\t}\n\n\tfor _, example := range []struct{ align, in, tgt int64 }{\n\t\t{2, 0, 0},\n\t\t{2, 1, 2},\n\t\t{2, 2, 2},\n\t\t{2, 3, 4},\n\t\t{2, 4, 4},\n\t\t{2, 5, 6},\n\t\t{2, 6, 6},\n\t\t{2, 7, 8},\n\t\t{2, 8, 8},\n\t\t{2, 9, 0xa},\n\t\t{2, 0xa, 0xa},\n\t\t{2, 0xb, 0xc},\n\t\t{2, 0xc, 0xc},\n\t\t{2, 0xd, 0xe},\n\t\t{2, 0xe, 0xe},\n\t\t{2, 0xf, 0x10},\n\n\t\t{4, 0, 0},\n\t\t{4, 1, 4},\n\t\t{4, 2, 4},\n\t\t{4, 3, 4},\n\t\t{4, 4, 4},\n\t\t{4, 5, 8},\n\t\t{4, 6, 8},\n\t\t{4, 7, 8},\n\t\t{4, 8, 8},\n\t\t{4, 9, 0xc},\n\t\t{4, 0xa, 0xc},\n\t\t{4, 0xb, 0xc},\n\t\t{4, 0xc, 0xc},\n\t\t{4, 0xd, 0x10},\n\t\t{4, 0xe, 0x10},\n\t\t{4, 0xf, 0x10},\n\n\t\t{8, 0, 0},\n\t\t{8, 1, 8},\n\t\t{8, 2, 8},\n\t\t{8, 3, 8},\n\t\t{8, 4, 8},\n\t\t{8, 5, 8},\n\t\t{8, 6, 8},\n\t\t{8, 7, 8},\n\t\t{8, 8, 8},\n\t\t{8, 9, 0x10},\n\t\t{8, 0xa, 0x10},\n\t\t{8, 0xb, 0x10},\n\t\t{8, 0xc, 0x10},\n\t\t{8, 0xd, 0x10},\n\t\t{8, 0xe, 0x10},\n\t\t{8, 0xf, 0x10},\n\t} {\n\t\tc(example.align, example.in, example.tgt)\n\t\tc(example.align, example.in+0x10000, example.tgt+0x10000)\n\t}\n}\n\nfunc TestConvertInt(t *testing.T) {\n\tvar testCases = []struct {\n\t\tin     uint64\n\t\tsigned bool\n\t\tsize   int64\n\t\ttgt    uint64\n\t}{\n\t\t{1, false, 1, 1},\n\t\t{uint64(0xf0), true, 1, 0xfffffffffffffff0},\n\t\t{uint64(0xf0), false, 1, 0xf0},\n\t\t{uint64(0x70), true, 1, 0x70},\n\t\t{uint64(0x90f0), true, 2, 0xffffffffffff90f0},\n\t\t{uint64(0x90f0), false, 2, 0x90f0},\n\t}\n\tfor _, tc := range testCases {\n\t\tout := convertInt(tc.in, tc.signed, tc.size)\n\t\tt.Logf(\"in=%#016x signed=%v size=%d -> %#016x\\n\", tc.in, tc.signed, tc.size, out)\n\t\tif out != tc.tgt {\n\t\t\tt.Errorf(\"expected=%#016x got=%#016x\\n\", tc.tgt, out)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/proc_unix_test.go",
    "content": "//go:build linux || darwin\n\npackage proc_test\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"runtime\"\n\t\"syscall\"\n\t\"testing\"\n\t\"time\"\n\n\t\"golang.org/x/sys/unix\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/native\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\ntype errIssue419 struct {\n\tpid int\n\terr error\n}\n\nfunc (npe errIssue419) Error() string {\n\treturn fmt.Sprintf(\"Pid is zero or negative: %d\", npe.pid)\n}\n\nfunc TestIssue419(t *testing.T) {\n\tif testBackend == \"rr\" {\n\t\treturn\n\t}\n\n\terrChan := make(chan error, 2)\n\n\t// SIGINT directed at the inferior should be passed along not swallowed by delve\n\twithTestProcess(\"issue419\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"main.main\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tresumeChan := make(chan struct{}, 1)\n\t\tgo func() {\n\t\t\ttime.Sleep(500 * time.Millisecond)\n\t\t\t<-resumeChan\n\t\t\tif p.Pid() <= 0 {\n\t\t\t\t// if we don't stop the inferior the test will never finish\n\t\t\t\tgrp.RequestManualStop()\n\t\t\t\terr := grp.Detach(true)\n\t\t\t\terrChan <- errIssue419{pid: p.Pid(), err: err}\n\t\t\t\treturn\n\t\t\t}\n\t\t\terr := syscall.Kill(p.Pid(), syscall.SIGINT)\n\t\t\terrChan <- errIssue419{pid: p.Pid(), err: err}\n\t\t}()\n\t\tgrp.ResumeNotify(resumeChan)\n\t\terrChan <- grp.Continue()\n\t})\n\n\tfor range 2 {\n\t\terr := <-errChan\n\n\t\tt.Logf(\"error %T %#v\\n\", err, err)\n\n\t\tif v, ok := err.(errIssue419); ok {\n\t\t\tassertNoError(v.err, t, \"syscall.Kill\")\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, exited := err.(proc.ErrProcessExited); !exited {\n\t\t\tt.Fatalf(\"Unexpected error after Continue(): %v\\n\", err)\n\t\t}\n\t}\n}\n\nfunc TestSignalDeath(t *testing.T) {\n\tif testBackend != \"native\" || runtime.GOOS != \"linux\" {\n\t\tt.Skip(\"skipped on non-linux non-native backends\")\n\t}\n\tvar buildFlags protest.BuildFlags\n\tif buildMode == \"pie\" {\n\t\tbuildFlags |= protest.BuildModePIE\n\t}\n\tfixture := protest.BuildFixture(t, \"loopprog\", buildFlags)\n\tcmd := exec.Command(fixture.Path)\n\tstdout, err := cmd.StdoutPipe()\n\tassertNoError(err, t, \"StdoutPipe\")\n\tcmd.Stderr = os.Stderr\n\tassertNoError(cmd.Start(), t, \"starting fixture\")\n\tp, err := native.Attach(cmd.Process.Pid, nil, []string{})\n\tassertNoError(err, t, \"Attach\")\n\tstdout.Close() // target will receive SIGPIPE later on\n\terr = p.Continue()\n\tt.Logf(\"error is %v\", err)\n\texitErr, isexited := err.(proc.ErrProcessExited)\n\tif !isexited {\n\t\tt.Fatal(\"did not exit\")\n\t}\n\tif exitErr.Status != -int(unix.SIGPIPE) {\n\t\tt.Fatalf(\"expected SIGPIPE got %d\\n\", exitErr.Status)\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/redirect.go",
    "content": "package proc\n\nimport \"os\"\n\n// OutputRedirect Specifies where the target program output will be redirected to.\n// Only one of \"Path\" and \"File\" should be set.\ntype OutputRedirect struct {\n\t// Path File path.\n\tPath string\n\t// File Redirect file.\n\tFile *os.File\n}\n"
  },
  {
    "path": "pkg/proc/redirector_other.go",
    "content": "//go:build !windows\n\npackage proc\n\nimport (\n\t\"crypto/rand\"\n\t\"encoding/hex\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"syscall\"\n)\n\ntype openOnRead struct {\n\tpath string\n\trd   io.ReadCloser\n}\n\nfunc (oor *openOnRead) Read(p []byte) (n int, err error) {\n\tif oor.rd != nil {\n\t\treturn oor.rd.Read(p)\n\t}\n\n\tfh, err := os.OpenFile(oor.path, os.O_RDONLY, os.ModeNamedPipe)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\toor.rd = fh\n\treturn oor.rd.Read(p)\n}\n\nfunc (oor *openOnRead) Close() error {\n\tdefer os.Remove(oor.path)\n\n\tif oor.rd == nil {\n\t\treturn nil\n\t}\n\n\tfh, _ := os.OpenFile(oor.path, os.O_WRONLY|syscall.O_NONBLOCK, 0)\n\tif fh != nil {\n\t\tfh.Close()\n\t}\n\n\treturn oor.rd.Close()\n}\n\nfunc Redirector() (reader io.ReadCloser, output OutputRedirect, err error) {\n\tr := make([]byte, 4)\n\tif _, err = rand.Read(r); err != nil {\n\t\treturn reader, output, err\n\t}\n\n\tvar path = filepath.Join(os.TempDir(), hex.EncodeToString(r))\n\n\tif err = syscall.Mkfifo(path, 0o600); err != nil {\n\t\t_ = os.Remove(path)\n\t\treturn reader, output, err\n\t}\n\n\treturn &openOnRead{path: path}, OutputRedirect{Path: path}, nil\n}\n"
  },
  {
    "path": "pkg/proc/redirector_windows.go",
    "content": "package proc\n\nimport (\n\t\"io\"\n\t\"os\"\n)\n\nfunc Redirector() (reader io.ReadCloser, output OutputRedirect, err error) {\n\treader, output.File, err = os.Pipe()\n\n\treturn reader, output, err\n}\n"
  },
  {
    "path": "pkg/proc/registers.go",
    "content": "package proc\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n)\n\n// Registers is an interface for a generic register type. The\n// interface encapsulates the generic values / actions\n// we need independent of arch. The concrete register types\n// will be different depending on OS/Arch.\ntype Registers interface {\n\tPC() uint64\n\tSP() uint64\n\tBP() uint64\n\tLR() uint64\n\tTLS() uint64\n\t// GAddr returns the address of the G variable if it is known, 0 and false otherwise\n\tGAddr() (uint64, bool)\n\tSlice(floatingPoint bool) ([]Register, error)\n\t// Copy returns a copy of the registers that is guaranteed not to change\n\t// when the registers of the associated thread change.\n\tCopy() (Registers, error)\n}\n\n// Register represents a CPU register.\ntype Register struct {\n\tName string\n\tReg  *op.DwarfRegister\n}\n\n// AppendUint64Register will create a new Register struct with the name and value\n// specified and append it to the `regs` slice.\nfunc AppendUint64Register(regs []Register, name string, value uint64) []Register {\n\treturn append(regs, Register{name, op.DwarfRegisterFromUint64(value)})\n}\n\n// AppendBytesRegister will create a new Register struct with the name and value\n// specified and append it to the `regs` slice.\nfunc AppendBytesRegister(regs []Register, name string, value []byte) []Register {\n\treturn append(regs, Register{name, op.DwarfRegisterFromBytes(value)})\n}\n\n// ErrUnknownRegister is returned when the value of an unknown\n// register is requested.\nvar ErrUnknownRegister = errors.New(\"unknown register\")\n\ntype flagRegisterDescr []flagDescr\ntype flagDescr struct {\n\tname string\n\tmask uint64\n}\n\nvar mxcsrDescription flagRegisterDescr = []flagDescr{\n\t{\"FZ\", 1 << 15},\n\t{\"RZ/RN\", 1<<14 | 1<<13},\n\t{\"PM\", 1 << 12},\n\t{\"UM\", 1 << 11},\n\t{\"OM\", 1 << 10},\n\t{\"ZM\", 1 << 9},\n\t{\"DM\", 1 << 8},\n\t{\"IM\", 1 << 7},\n\t{\"DAZ\", 1 << 6},\n\t{\"PE\", 1 << 5},\n\t{\"UE\", 1 << 4},\n\t{\"OE\", 1 << 3},\n\t{\"ZE\", 1 << 2},\n\t{\"DE\", 1 << 1},\n\t{\"IE\", 1 << 0},\n}\n\nvar eflagsDescription flagRegisterDescr = []flagDescr{\n\t{\"CF\", 1 << 0},\n\t{\"\", 1 << 1},\n\t{\"PF\", 1 << 2},\n\t{\"AF\", 1 << 4},\n\t{\"ZF\", 1 << 6},\n\t{\"SF\", 1 << 7},\n\t{\"TF\", 1 << 8},\n\t{\"IF\", 1 << 9},\n\t{\"DF\", 1 << 10},\n\t{\"OF\", 1 << 11},\n\t{\"IOPL\", 1<<12 | 1<<13},\n\t{\"NT\", 1 << 14},\n\t{\"RF\", 1 << 16},\n\t{\"VM\", 1 << 17},\n\t{\"AC\", 1 << 18},\n\t{\"VIF\", 1 << 19},\n\t{\"VIP\", 1 << 20},\n\t{\"ID\", 1 << 21},\n}\n\nfunc (descr flagRegisterDescr) Mask() uint64 {\n\tvar r uint64\n\tfor _, f := range descr {\n\t\tr = r | f.mask\n\t}\n\treturn r\n}\n\nfunc (descr flagRegisterDescr) Describe(reg uint64, bitsize int) string {\n\tvar r []string\n\tfor _, f := range descr {\n\t\tif f.name == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\t// rbm is f.mask with only the right-most bit set:\n\t\t// 0001 1100 -> 0000 0100\n\t\trbm := f.mask & -f.mask\n\t\tif rbm == f.mask {\n\t\t\tif reg&f.mask != 0 {\n\t\t\t\tr = append(r, f.name)\n\t\t\t}\n\t\t} else {\n\t\t\tx := (reg & f.mask) >> uint64(math.Log2(float64(rbm)))\n\t\t\tr = append(r, fmt.Sprintf(\"%s=%x\", f.name, x))\n\t\t}\n\t}\n\tif reg & ^descr.Mask() != 0 {\n\t\tr = append(r, fmt.Sprintf(\"unknown_flags=%x\", reg&^descr.Mask()))\n\t}\n\treturn fmt.Sprintf(\"%#0*x\\t[%s]\", bitsize/4, reg, strings.Join(r, \" \"))\n}\n"
  },
  {
    "path": "pkg/proc/riscv64_arch.go",
    "content": "package proc\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n)\n\n// ebreak instruction: 0x00100073\nvar riscv64BreakInstruction = []byte{0x73, 0x00, 0x10, 0x00}\n\n// c.ebreak instruction: 0x9002\nvar riscv64CompressedBreakInstruction = []byte{0x02, 0x90}\n\n// RISCV64Arch returns an initialized RISCV64 struct.\nfunc RISCV64Arch(goos string) *Arch {\n\treturn &Arch{\n\t\tName:                             \"riscv64\",\n\t\tptrSize:                          8,\n\t\tmaxInstructionLength:             4,\n\t\tbreakpointInstruction:            riscv64CompressedBreakInstruction,\n\t\taltBreakpointInstruction:         riscv64BreakInstruction,\n\t\tbreakInstrMovesPC:                false,\n\t\tderefTLS:                         false,\n\t\tprologues:                        nil,\n\t\tfixFrameUnwindContext:            riscv64FixFrameUnwindContext,\n\t\tswitchStack:                      riscv64SwitchStack,\n\t\tregSize:                          riscv64RegSize,\n\t\tRegistersToDwarfRegisters:        riscv64RegistersToDwarfRegisters,\n\t\taddrAndStackRegsToDwarfRegisters: riscv64AddrAndStackRegsToDwarfRegisters,\n\t\tDwarfRegisterToString:            riscv64DwarfRegisterToString,\n\t\tinhibitStepInto:                  func(*BinaryInfo, uint64) bool { return false },\n\t\tasmDecode:                        riscv64AsmDecode,\n\t\tusesLR:                           true,\n\t\tPCRegNum:                         regnum.RISCV64_PC,\n\t\tSPRegNum:                         regnum.RISCV64_SP,\n\t\tContextRegNum:                    regnum.RISCV64_S10,\n\t\tasmRegisters:                     riscv64AsmRegisters,\n\t\tRegisterNameToDwarf:              nameToDwarfFunc(regnum.RISCV64NameToDwarf),\n\t\tRegnumToString:                   regnum.RISCV64ToName,\n\t\tdebugCallMinStackSize:            288,         // TODO\n\t\tmaxRegArgBytes:                   16*8 + 16*8, // 16 int argument registers plus 16 float argument registers\n\t\targumentRegs:                     []int{regnum.RISCV64_A0, regnum.RISCV64_A1, regnum.RISCV64_A2},\n\t}\n}\n\nfunc riscv64FixFrameUnwindContext(fctxt *frame.FrameContext, pc uint64, bi *BinaryInfo) *frame.FrameContext {\n\ta := bi.Arch\n\n\tif a.sigreturnfn == nil {\n\t\ta.sigreturnfn = bi.lookupOneFunc(\"runtime.sigreturn\")\n\t}\n\n\tif (fctxt == nil) || ((a.sigreturnfn != nil) && (pc >= a.sigreturnfn.Entry) && (pc < a.sigreturnfn.End)) {\n\t\t// When there's no frame descriptor entry use BP (the frame pointer) instead\n\t\t// - return register is [bp + a.PtrSize()] (i.e. [cfa-a.PtrSize()])\n\t\t// - cfa is bp + a.PtrSize()*2\n\t\t// - bp is [bp] (i.e. [cfa-a.PtrSize()*2])\n\t\t// - sp is cfa\n\n\t\t// When the signal handler runs it will move the execution to the signal\n\t\t// handling stack (installed using the sigaltstack system call).\n\t\t// This isn't a proper stack switch: the pointer to g in TLS will still\n\t\t// refer to whatever g was executing on that thread before the signal was\n\t\t// received.\n\t\t// Since go did not execute a stack switch the previous value of sp, pc\n\t\t// and bp is not saved inside g.sched, as it normally would.\n\t\t// The only way to recover is to either read sp/pc from the signal context\n\t\t// parameter (the ucontext_t* parameter) or to unconditionally follow the\n\t\t// frame pointer when we get to runtime.sigreturn (which is what we do\n\t\t// here).\n\n\t\treturn &frame.FrameContext{\n\t\t\tRetAddrReg: regnum.RISCV64_LR,\n\t\t\tRegs: map[uint64]frame.DWRule{\n\t\t\t\tregnum.RISCV64_LR: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-a.PtrSize()),\n\t\t\t\t},\n\n\t\t\t\tregnum.RISCV64_FP: {\n\t\t\t\t\tRule:   frame.RuleOffset,\n\t\t\t\t\tOffset: int64(-2 * a.PtrSize()),\n\t\t\t\t},\n\n\t\t\t\tregnum.RISCV64_SP: {\n\t\t\t\t\tRule:   frame.RuleValOffset,\n\t\t\t\t\tOffset: 0,\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tCFA: frame.DWRule{\n\t\t\t\tRule:   frame.RuleCFA,\n\t\t\t\tReg:    regnum.RISCV64_FP,\n\t\t\t\tOffset: int64(2 * a.PtrSize()),\n\t\t\t},\n\t\t}\n\t}\n\n\tif a.crosscall2fn == nil {\n\t\ta.crosscall2fn = bi.lookupOneFunc(\"crosscall2\")\n\t}\n\n\tif a.crosscall2fn != nil && pc >= a.crosscall2fn.Entry && pc < a.crosscall2fn.End {\n\t\trule := fctxt.CFA\n\n\t\tif rule.Offset == crosscall2SPOffsetBad {\n\t\t\trule.Offset += crosscall2SPOffset\n\t\t}\n\t\tfctxt.CFA = rule\n\t}\n\n\tif fctxt.CFA.Rule == frame.RuleUndefined {\n\t\tfctxt.CFA = frame.DWRule{\n\t\t\tRule:   frame.RuleCFA,\n\t\t\tReg:    regnum.RISCV64_FP,\n\t\t\tOffset: int64(2 * a.PtrSize()),\n\t\t}\n\t}\n\n\tif fctxt.Regs[regnum.RISCV64_LR].Rule == frame.RuleUndefined {\n\t\tfctxt.Regs[regnum.RISCV64_LR] = frame.DWRule{\n\t\t\tRule:   frame.RuleRegister,\n\t\t\tReg:    regnum.RISCV64_LR,\n\t\t\tOffset: 0,\n\t\t}\n\t}\n\n\treturn fctxt\n}\n\nconst riscv64cgocallSPOffsetSaveSlot = 0x8\n\nfunc riscv64SwitchStack(it *stackIterator, callFrameRegs *op.DwarfRegisters) bool {\n\tif it.frame.Current.Fn == nil {\n\t\tif it.systemstack && it.g != nil && it.top {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\tswitch it.frame.Current.Fn.Name {\n\tcase \"runtime.goexit\", \"runtime.rt0_go\":\n\t\t// Look for \"top of stack\" functions.\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"runtime.mcall\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tit.atend = true\n\t\treturn true\n\n\tcase \"runtime.asmcgocall\":\n\t\tif !it.systemstack {\n\t\t\treturn false\n\t\t}\n\n\t\t// This function is called by a goroutine to execute a C function and\n\t\t// switches from the goroutine stack to the system stack.\n\t\t// Since we are unwinding the stack from callee to caller we have to switch\n\t\t// from the system stack to the goroutine stack.\n\t\toldsp := it.regs.SP()\n\t\toff, _ := readIntRaw(it.mem, uint64(oldsp+riscv64cgocallSPOffsetSaveSlot), int64(it.bi.Arch.PtrSize()))\n\t\tnewsp := uint64(int64(it.stackhi) - off)\n\n\t\t// The runtime.asmcgocall prologue contains: addi sp, sp, -8,\n\t\t// hence we require newsp + 8 at this point\n\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = newsp + 8\n\n\t\t// runtime.asmcgocall can also be called from inside the system stack,\n\t\t// in that case no stack switch actually happens\n\t\tif it.regs.SP() == oldsp {\n\t\t\treturn false\n\t\t}\n\n\t\tit.top = false\n\t\tit.systemstack = false\n\t\t// The return value is stored in the LR register which is saved at -8(SP).\n\t\taddrret := uint64(int64(it.regs.SP()) - int64(it.bi.Arch.PtrSize()))\n\t\tit.frame.Ret, _ = readUintRaw(it.mem, addrret, int64(it.bi.Arch.PtrSize()))\n\t\tit.pc = it.frame.Ret\n\t\treturn true\n\n\tcase \"runtime.cgocallback_gofunc\", \"runtime.cgocallback\":\n\t\t// For a detailed description of how this works read the long comment at\n\t\t// the start of $GOROOT/src/runtime/cgocall.go and the source code of\n\t\t// runtime.cgocallback_gofunc in $GOROOT/src/runtime/asm_riscv64.s\n\t\t//\n\t\t// When a C functions calls back into go it will eventually call into\n\t\t// runtime.cgocallback_gofunc which is the function that does the stack\n\t\t// switch from the system stack back into the goroutine stack\n\t\t// Since we are going backwards on the stack here we see the transition\n\t\t// as goroutine stack -> system stack.\n\t\tif it.top || it.systemstack {\n\t\t\treturn false\n\t\t}\n\n\t\tit.loadG0SchedSP()\n\t\tif it.g0_sched_sp <= 0 {\n\t\t\treturn false\n\t\t}\n\t\t// entering the system stack\n\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = it.g0_sched_sp\n\t\t// reads the previous value of g0.sched.sp that runtime.cgocallback_gofunc saved on the stack\n\t\tit.g0_sched_sp, _ = readUintRaw(it.mem, it.regs.SP()+riscv64cgocallSPOffsetSaveSlot, int64(it.bi.Arch.PtrSize()))\n\t\tit.top = false\n\t\tcallFrameRegs, ret, retaddr := it.advanceRegs()\n\t\tframeOnSystemStack := it.newStackframe(ret, retaddr)\n\t\tit.pc = frameOnSystemStack.Ret\n\t\tit.regs = callFrameRegs\n\t\tit.systemstack = true\n\t\treturn true\n\n\tcase \"crosscall2\":\n\t\t// The offsets get from runtime/cgo/asm_riscv64.s\n\t\tnewsp, _ := readUintRaw(it.mem, it.regs.SP()+8*29, int64(it.bi.Arch.PtrSize()))\n\t\tnewbp, _ := readUintRaw(it.mem, it.regs.SP()+8*4, int64(it.bi.Arch.PtrSize()))\n\t\tnewlr, _ := readUintRaw(it.mem, it.regs.SP()+8*16, int64(it.bi.Arch.PtrSize()))\n\t\tif it.regs.Reg(it.regs.BPRegNum) != nil {\n\t\t\tit.regs.Reg(it.regs.BPRegNum).Uint64Val = newbp\n\t\t} else {\n\t\t\treg, _ := it.readRegisterAt(it.regs.BPRegNum, it.regs.SP()+8*4)\n\t\t\tit.regs.AddReg(it.regs.BPRegNum, reg)\n\t\t}\n\t\tit.regs.Reg(it.regs.LRRegNum).Uint64Val = newlr\n\t\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = newsp\n\t\tit.pc = newlr\n\t\treturn true\n\n\tcase \"runtime.mstart\":\n\t\t// Calls to runtime.systemstack will switch to the systemstack then:\n\t\t// 1. alter the goroutine stack so that it looks like systemstack_switch\n\t\t//    was called\n\t\t// 2. alter the system stack so that it looks like the bottom-most frame\n\t\t//    belongs to runtime.mstart\n\t\t// If we find a runtime.mstart frame on the system stack of a goroutine\n\t\t// parked on runtime.systemstack_switch we assume runtime.systemstack was\n\t\t// called and continue tracing from the parked position.\n\n\t\tif it.top || !it.systemstack || it.g == nil {\n\t\t\treturn false\n\t\t}\n\t\tif fn := it.bi.PCToFunc(it.g.PC); fn == nil || fn.Name != \"runtime.systemstack_switch\" {\n\t\t\treturn false\n\t\t}\n\n\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\tit.err = err\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\n\tcase \"runtime.newstack\", \"runtime.systemstack\":\n\t\tif it.systemstack && it.g != nil {\n\t\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\t\tit.err = err\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n\n\treturn false\n}\n\nfunc riscv64RegSize(regnum uint64) int {\n\t// All CPU registers are 64bit\n\treturn 8\n}\n\nfunc riscv64RegistersToDwarfRegisters(staticBase uint64, regs Registers) *op.DwarfRegisters {\n\tdregs := initDwarfRegistersFromSlice(int(regnum.RISCV64MaxRegNum()), regs, regnum.RISCV64NameToDwarf)\n\tdr := op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.RISCV64_PC, regnum.RISCV64_SP, regnum.RISCV64_FP, regnum.RISCV64_LR)\n\tdr.SetLoadMoreCallback(loadMoreDwarfRegistersFromSliceFunc(dr, regs, regnum.RISCV64NameToDwarf))\n\treturn dr\n}\n\nfunc riscv64AddrAndStackRegsToDwarfRegisters(staticBase, pc, sp, bp, lr uint64) op.DwarfRegisters {\n\tdregs := make([]*op.DwarfRegister, int(regnum.RISCV64_PC+1))\n\tdregs[regnum.RISCV64_PC] = op.DwarfRegisterFromUint64(pc)\n\tdregs[regnum.RISCV64_SP] = op.DwarfRegisterFromUint64(sp)\n\tdregs[regnum.RISCV64_FP] = op.DwarfRegisterFromUint64(bp)\n\tdregs[regnum.RISCV64_LR] = op.DwarfRegisterFromUint64(lr)\n\n\treturn *op.NewDwarfRegisters(staticBase, dregs, binary.LittleEndian, regnum.RISCV64_PC, regnum.RISCV64_SP, regnum.RISCV64_FP, regnum.RISCV64_LR)\n}\n\nfunc riscv64DwarfRegisterToString(i int, reg *op.DwarfRegister) (name string, floatingPoint bool, repr string) {\n\tname = regnum.RISCV64ToName(uint64(i))\n\n\tif reg == nil {\n\t\treturn name, false, \"\"\n\t}\n\n\tif strings.HasPrefix(name, \"F\") {\n\t\treturn name, true, fmt.Sprintf(\"%#016x\", reg.Uint64Val)\n\t} else {\n\t\treturn name, false, fmt.Sprintf(\"%#016x\", reg.Uint64Val)\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/riscv64_disasm.go",
    "content": "package proc\n\nimport (\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"golang.org/x/arch/riscv64/riscv64asm\"\n)\n\nfunc riscv64AsmDecode(asmInst *AsmInstruction, mem []byte, regs *op.DwarfRegisters, memrw MemoryReadWriter, bi *BinaryInfo) error {\n\tinst, err := riscv64asm.Decode(mem)\n\tif err != nil {\n\t\tasmInst.Inst = (*riscv64ArchInst)(nil)\n\t\treturn err\n\t}\n\n\tasmInst.Size = inst.Len\n\tasmInst.Bytes = mem[:asmInst.Size]\n\tasmInst.Inst = (*riscv64ArchInst)(&inst)\n\tasmInst.Kind = OtherInstruction\n\n\tswitch inst.Op {\n\tcase riscv64asm.JALR:\n\t\trd, _ := inst.Args[0].(riscv64asm.Reg)\n\t\trs1 := inst.Args[1].(riscv64asm.RegOffset).OfsReg\n\t\tif rd == riscv64asm.X1 {\n\t\t\tasmInst.Kind = CallInstruction\n\t\t} else if rd == riscv64asm.X0 && rs1 == riscv64asm.X1 {\n\t\t\tasmInst.Kind = RetInstruction\n\t\t} else {\n\t\t\tasmInst.Kind = JmpInstruction\n\t\t}\n\n\tcase riscv64asm.JAL:\n\t\trd, _ := inst.Args[0].(riscv64asm.Reg)\n\t\tif rd == riscv64asm.X1 {\n\t\t\tasmInst.Kind = CallInstruction\n\t\t} else {\n\t\t\tasmInst.Kind = JmpInstruction\n\t\t}\n\n\tcase riscv64asm.BEQ,\n\t\triscv64asm.BNE,\n\t\triscv64asm.BLT,\n\t\triscv64asm.BGE,\n\t\triscv64asm.BLTU,\n\t\triscv64asm.BGEU:\n\t\tasmInst.Kind = JmpInstruction\n\n\tcase riscv64asm.EBREAK:\n\t\tasmInst.Kind = HardBreakInstruction\n\n\tdefault:\n\t\tasmInst.Kind = OtherInstruction\n\t}\n\n\tasmInst.DestLoc = resolveCallArgRISCV64(&inst, asmInst.Loc.PC, asmInst.AtPC, regs, memrw, bi)\n\n\treturn nil\n}\n\nfunc resolveCallArgRISCV64(inst *riscv64asm.Inst, instAddr uint64, currentGoroutine bool, regs *op.DwarfRegisters, mem MemoryReadWriter, bininfo *BinaryInfo) *Location {\n\tvar pc uint64\n\tvar err error\n\n\tswitch inst.Op {\n\t// Format: op rs1, rs2, bimm12\n\t// Target: bimm12\n\tcase riscv64asm.BEQ,\n\t\triscv64asm.BNE,\n\t\triscv64asm.BLT,\n\t\triscv64asm.BGE,\n\t\triscv64asm.BLTU,\n\t\triscv64asm.BGEU:\n\n\t\tswitch arg := inst.Args[2].(type) {\n\t\tcase riscv64asm.Simm:\n\t\t\tpc = uint64(int64(instAddr) + int64(arg.Imm))\n\t\tdefault:\n\t\t\treturn nil\n\t\t}\n\n\t// Format: op rd, jimm20\n\t// Target: simm20\n\tcase riscv64asm.JAL:\n\t\tswitch arg := inst.Args[1].(type) {\n\t\tcase riscv64asm.Simm:\n\t\t\tpc = uint64(int64(instAddr) + int64(arg.Imm))\n\t\tdefault:\n\t\t\treturn nil\n\t\t}\n\n\t// Format: op rd, rs1, imm12\n\t// Target: rj + offs16\n\tcase riscv64asm.JALR:\n\t\tif !currentGoroutine || regs == nil {\n\t\t\treturn nil\n\t\t}\n\t\tswitch arg := inst.Args[1].(type) {\n\t\tcase riscv64asm.RegOffset:\n\t\t\tpc, err = bininfo.Arch.getAsmRegister(regs, int(arg.OfsReg))\n\t\t\tif err != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tpc = uint64(int64(pc) + int64(arg.Ofs.Imm))\n\t\t}\n\n\tdefault:\n\t\treturn nil\n\t}\n\n\tfile, line, fn := bininfo.PCToLine(pc)\n\tif fn == nil {\n\t\treturn &Location{PC: pc}\n\t}\n\n\treturn &Location{PC: pc, File: file, Line: line, Fn: fn}\n}\n\ntype riscv64ArchInst riscv64asm.Inst\n\nfunc (inst *riscv64ArchInst) Text(flavour AssemblyFlavour, pc uint64, symLookup func(uint64) (string, uint64)) string {\n\tif inst == nil {\n\t\treturn \"?\"\n\t}\n\n\tvar text string\n\n\tswitch flavour {\n\tcase GNUFlavour:\n\t\ttext = riscv64asm.GNUSyntax(riscv64asm.Inst(*inst))\n\tdefault:\n\t\ttext = riscv64asm.GoSyntax(riscv64asm.Inst(*inst), pc, symLookup, nil)\n\t}\n\n\treturn text\n}\n\nfunc (inst *riscv64ArchInst) OpcodeEquals(op uint64) bool {\n\tif inst == nil {\n\t\treturn false\n\t}\n\n\treturn uint64(inst.Op) == op\n}\n\nvar riscv64AsmRegisters = func() map[int]asmRegister {\n\tr := make(map[int]asmRegister)\n\n\tfor i := riscv64asm.X0; i <= riscv64asm.X31; i++ {\n\t\tr[int(i)] = asmRegister{regnum.RISCV64_X0 + uint64(i), 0, 0}\n\t}\n\n\treturn r\n}()\n"
  },
  {
    "path": "pkg/proc/scope_test.go",
    "content": "package proc_test\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"math\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nfunc TestScopeWithEscapedVariable(t *testing.T) {\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 9}) {\n\t\treturn\n\t}\n\n\twithTestProcess(\"scopeescapevareval\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\n\t\t// On the breakpoint there are two 'a' variables in scope, the one that\n\t\t// isn't shadowed is a variable that escapes to the heap and figures in\n\t\t// debug_info as '&a'. Evaluating 'a' should yield the escaped variable.\n\n\t\tavar := evalVariable(p, t, \"a\")\n\t\tif aval, _ := constant.Int64Val(avar.Value); aval != 3 {\n\t\t\tt.Errorf(\"wrong value for variable a: %d\", aval)\n\t\t}\n\n\t\tif avar.Flags&proc.VariableEscaped == 0 {\n\t\t\tt.Errorf(\"variable a isn't escaped to the heap\")\n\t\t}\n\t})\n}\n\n// TestScope will:\n//   - run _fixtures/scopetest.go\n//   - set a breakpoint on all lines containing a comment\n//   - continue until the program ends\n//   - every time a breakpoint is hit it will check that\n//     scope.FunctionArguments+scope.LocalVariables and scope.EvalExpression\n//     return what the corresponding comment describes they should return and\n//     removes the breakpoint.\n//\n// Each comment is a comma separated list of variable declarations, with\n// each variable declaration having the following format:\n//\n//\tname type = initialvalue\n//\n// the = and the initial value are optional and can only be specified if the\n// type is an integer type, float32, float64 or bool.\n//\n// If multiple variables with the same name are specified:\n//  1. LocalVariables+FunctionArguments should return them in the same order and\n//     every variable except the last one should be marked as shadowed\n//  2. EvalExpression should return the last one.\nfunc TestScope(t *testing.T) {\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 9, Rev: -1}) {\n\t\treturn\n\t}\n\n\tfixturesDir := protest.FindFixturesDir()\n\tscopetestPath := filepath.Join(fixturesDir, \"scopetest.go\")\n\n\tscopeChecks := getScopeChecks(scopetestPath, t)\n\n\twithTestProcess(\"scopetest\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tfor i := range scopeChecks {\n\t\t\tsetFileBreakpoint(p, t, fixture.Source, scopeChecks[i].line)\n\t\t}\n\n\t\tt.Logf(\"%d breakpoints set\", len(scopeChecks))\n\n\t\tfor {\n\t\t\terr := grp.Continue()\n\t\t\tif errors.As(err, &proc.ErrProcessExited{}) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tassertNoError(err, t, \"Continue()\")\n\t\t\tbp := p.CurrentThread().Breakpoint()\n\n\t\t\tscopeCheck := findScopeCheck(scopeChecks, bp.Line)\n\t\t\tif scopeCheck == nil {\n\t\t\t\tt.Errorf(\"unknown stop position %s:%d %#x\", bp.File, bp.Line, bp.Addr)\n\t\t\t}\n\n\t\t\tscope, _ := scopeCheck.checkLocalsAndArgs(p, t)\n\n\t\t\tfor i := range scopeCheck.varChecks {\n\t\t\t\tvc := &scopeCheck.varChecks[i]\n\t\t\t\tif vc.shdw {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tvc.checkInScope(scopeCheck.line, scope, t)\n\t\t\t}\n\n\t\t\tscopeCheck.ok = true\n\t\t\terr = p.ClearBreakpoint(bp.Addr)\n\t\t\tassertNoError(err, t, \"ClearBreakpoint\")\n\t\t}\n\t})\n\n\tfor i := range scopeChecks {\n\t\tif !scopeChecks[i].ok {\n\t\t\tt.Errorf(\"breakpoint at line %d not hit\", scopeChecks[i].line)\n\t\t}\n\t}\n}\n\ntype scopeCheck struct {\n\tline      int\n\tvarChecks []varCheck\n\tok        bool // this scope check was passed\n}\n\ntype varCheck struct {\n\tname     string\n\ttyp      string\n\tkind     reflect.Kind\n\tshdw     bool // this variable should be shadowed\n\thasVal   bool\n\tintVal   int64\n\tuintVal  uint64\n\tfloatVal float64\n\tboolVal  bool\n\n\tok bool // this variable check was passed\n}\n\nfunc getScopeChecks(path string, t *testing.T) []scopeCheck {\n\tvar fset token.FileSet\n\troot, err := parser.ParseFile(&fset, path, nil, parser.ParseComments)\n\tif err != nil {\n\t\tt.Fatalf(\"could not parse %s: %v\", path, err)\n\t}\n\n\tscopeChecks := []scopeCheck{}\n\n\tfor _, cmtg := range root.Comments {\n\t\tfor _, cmt := range cmtg.List {\n\t\t\tpos := fset.Position(cmt.Slash)\n\n\t\t\tscopeChecks = append(scopeChecks, scopeCheck{line: pos.Line})\n\t\t\tscopeChecks[len(scopeChecks)-1].Parse(cmt.Text[2:], t)\n\t\t}\n\t}\n\n\treturn scopeChecks\n}\n\nfunc findScopeCheck(scopeChecks []scopeCheck, line int) *scopeCheck {\n\tfor i := range scopeChecks {\n\t\tif scopeChecks[i].line == line {\n\t\t\treturn &scopeChecks[i]\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (check *scopeCheck) Parse(descr string, t *testing.T) {\n\tdecls := strings.Split(descr, \",\")\n\tcheck.varChecks = make([]varCheck, len(decls))\n\tfor i, decl := range decls {\n\t\tvarcheck := &check.varChecks[i]\n\t\tvalue := \"\"\n\t\tif equal := strings.Index(decl, \"=\"); equal >= 0 {\n\t\t\tvalue = strings.TrimSpace(decl[equal+1:])\n\t\t\tdecl = strings.TrimSpace(decl[:equal])\n\t\t\tvarcheck.hasVal = true\n\t\t} else {\n\t\t\tdecl = strings.TrimSpace(decl)\n\t\t}\n\n\t\tbefore, after, ok := strings.Cut(decl, \" \")\n\t\tif !ok {\n\t\t\tt.Fatalf(\"could not parse scope comment %q (%q)\", descr, decl)\n\t\t}\n\t\tvarcheck.name = strings.TrimSpace(before)\n\t\tvarcheck.typ = strings.TrimSpace(after)\n\t\tif strings.Contains(varcheck.typ, \" \") {\n\t\t\tt.Fatalf(\"could not parse scope comment %q (%q)\", descr, decl)\n\t\t}\n\n\t\tif !varcheck.hasVal {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch varcheck.typ {\n\t\tcase \"int\", \"int8\", \"int16\", \"int32\", \"int64\":\n\t\t\tvar err error\n\t\t\tvarcheck.kind = reflect.Int\n\t\t\tvarcheck.intVal, err = strconv.ParseInt(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"could not parse scope comment %q: %v\", descr, err)\n\t\t\t}\n\n\t\tcase \"uint\", \"uint8\", \"uint16\", \"uint32\", \"uint64\", \"uintptr\":\n\t\t\tvar err error\n\t\t\tvarcheck.kind = reflect.Uint\n\t\t\tvarcheck.uintVal, err = strconv.ParseUint(value, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"could not parse scope comment %q: %v\", descr, err)\n\t\t\t}\n\n\t\tcase \"float32\", \"float64\":\n\t\t\tvar err error\n\t\t\tvarcheck.kind = reflect.Float64\n\t\t\tvarcheck.floatVal, err = strconv.ParseFloat(value, 64)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"could not parse scope comment %q: %v\", descr, err)\n\t\t\t}\n\n\t\tcase \"bool\":\n\t\t\tvar err error\n\t\t\tvarcheck.kind = reflect.Bool\n\t\t\tvarcheck.boolVal, err = strconv.ParseBool(value)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"could not parse scope comment %q: %v\", descr, err)\n\t\t\t}\n\t\t}\n\t}\n\n\tfor i := 1; i < len(check.varChecks); i++ {\n\t\tif check.varChecks[i-1].name == check.varChecks[i].name {\n\t\t\tcheck.varChecks[i-1].shdw = true\n\t\t}\n\t}\n}\n\nfunc (check *scopeCheck) checkLocalsAndArgs(p *proc.Target, t *testing.T) (*proc.EvalScope, bool) {\n\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\tassertNoError(err, t, \"GoroutineScope()\")\n\n\tok := true\n\n\targs, err := scope.FunctionArguments(normalLoadConfig)\n\tassertNoError(err, t, \"FunctionArguments()\")\n\tlocals, err := scope.LocalVariables(normalLoadConfig)\n\tassertNoError(err, t, \"LocalVariables()\")\n\n\tfor _, arg := range args {\n\t\tcheck.checkVar(arg, t)\n\t}\n\n\tfor _, local := range locals {\n\t\tcheck.checkVar(local, t)\n\t}\n\n\tfor i := range check.varChecks {\n\t\tif !check.varChecks[i].ok {\n\t\t\tt.Errorf(\"%d: variable %s not found\", check.line, check.varChecks[i].name)\n\t\t\tok = false\n\t\t}\n\t}\n\n\treturn scope, ok\n}\n\nfunc (check *scopeCheck) checkVar(v *proc.Variable, t *testing.T) {\n\tvar varCheck *varCheck\n\tfor i := range check.varChecks {\n\t\tif !check.varChecks[i].ok && (check.varChecks[i].name == v.Name) {\n\t\t\tvarCheck = &check.varChecks[i]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif varCheck == nil {\n\t\tt.Errorf(\"%d: unexpected variable %s\", check.line, v.Name)\n\t\treturn\n\t}\n\n\tvarCheck.check(check.line, v, t, \"FunctionArguments+LocalVariables\")\n\tvarCheck.ok = true\n}\n\nfunc (varCheck *varCheck) checkInScope(line int, scope *proc.EvalScope, t *testing.T) {\n\tv, err := scope.EvalExpression(varCheck.name, normalLoadConfig)\n\tassertNoError(err, t, fmt.Sprintf(\"EvalVariable(%s)\", varCheck.name))\n\tvarCheck.check(line, v, t, \"EvalExpression\")\n}\n\nfunc (varCheck *varCheck) check(line int, v *proc.Variable, t *testing.T, ctxt string) {\n\ttyp := v.DwarfType.String()\n\ttyp = strings.ReplaceAll(typ, \" \", \"\")\n\tif typ != varCheck.typ {\n\t\tt.Errorf(\"%d: wrong type for %s (%s), got %s, expected %s\", line, v.Name, ctxt, typ, varCheck.typ)\n\t}\n\n\tif varCheck.shdw && v.Flags&proc.VariableShadowed == 0 {\n\t\tt.Errorf(\"%d: expected shadowed %s variable\", line, v.Name)\n\t}\n\n\tif !varCheck.hasVal {\n\t\treturn\n\t}\n\n\tswitch varCheck.kind {\n\tcase reflect.Int:\n\t\tif vv, _ := constant.Int64Val(v.Value); vv != varCheck.intVal {\n\t\t\tt.Errorf(\"%d: wrong value for %s (%s), got %d expected %d\", line, v.Name, ctxt, vv, varCheck.intVal)\n\t\t}\n\tcase reflect.Uint:\n\t\tif vv, _ := constant.Uint64Val(v.Value); vv != varCheck.uintVal {\n\t\t\tt.Errorf(\"%d: wrong value for %s (%s), got %d expected %d\", line, v.Name, ctxt, vv, varCheck.uintVal)\n\t\t}\n\tcase reflect.Float64:\n\t\tif vv, _ := constant.Float64Val(v.Value); math.Abs(vv-varCheck.floatVal) > 0.001 {\n\t\t\tt.Errorf(\"%d: wrong value for %s (%s), got %g expected %g\", line, v.Name, ctxt, vv, varCheck.floatVal)\n\t\t}\n\tcase reflect.Bool:\n\t\tif vv := constant.BoolVal(v.Value); vv != varCheck.boolVal {\n\t\t\tt.Errorf(\"%d: wrong value for %s (%s), got %v expected %v\", line, v.Name, ctxt, vv, varCheck.boolVal)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/stack.go",
    "content": "package proc\n\nimport (\n\t\"bytes\"\n\t\"debug/dwarf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/frame\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/reader\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\n// This code is partly adapted from runtime.gentraceback in\n// $GOROOT/src/runtime/traceback.go\n\n// Stackframe represents a frame in a system stack.\n//\n// Each stack frame has two locations Current and Call.\n//\n// For the topmost stackframe Current and Call are the same location.\n//\n// For stackframes after the first Current is the location corresponding to\n// the return address and Call is the location of the CALL instruction that\n// was last executed on the frame. Note however that Call.PC is always equal\n// to Current.PC, because finding the correct value for Call.PC would\n// require disassembling each function in the stacktrace.\n//\n// For synthetic stackframes generated for inlined function calls Current.Fn\n// is the function containing the inlining and Call.Fn in the inlined\n// function.\ntype Stackframe struct {\n\tCurrent, Call Location\n\n\t// Frame registers.\n\tRegs op.DwarfRegisters\n\t// High address of the stack.\n\tstackHi uint64\n\t// Return address for this stack frame (as read from the stack frame itself).\n\tRet uint64\n\t// Err is set if an error occurred during stacktrace\n\tErr error\n\t// SystemStack is true if this frame belongs to a system stack.\n\tSystemStack bool\n\t// Inlined is true if this frame is actually an inlined call.\n\tInlined bool\n\t// hasInlines is true if this frame is a concrete function that is executing inlined calls (i.e. if there is at least one inlined call frame on top of this one).\n\thasInlines bool\n\t// Bottom is true if this is the bottom of the stack\n\tBottom bool\n\n\t// lastpc is a memory address guaranteed to belong to the last instruction\n\t// executed in this stack frame.\n\t// For the topmost stack frame this will be the same as Current.PC and\n\t// Call.PC, for other stack frames it will usually be Current.PC-1, but\n\t// could be different when inlined calls are involved in the stacktrace.\n\t// Note that this address isn't guaranteed to belong to the start of an\n\t// instruction and, for this reason, should not be propagated outside of\n\t// pkg/proc.\n\t// Use this value to determine active lexical scopes for the stackframe.\n\tlastpc uint64\n\n\t// closurePtr is the value of .closureptr, if present. This variable is\n\t// used to correlated range-over-func closure bodies with their enclosing\n\t// function.\n\tclosurePtr int64\n\n\t// TopmostDefer is the defer that would be at the top of the stack when a\n\t// panic unwind would get to this call frame, in other words it's the first\n\t// deferred function that will  be called if the runtime unwinds past this\n\t// call frame.\n\tTopmostDefer *Defer\n\n\t// Defers is the list of functions deferred by this stack frame (so far).\n\tDefers []*Defer\n}\n\n// FrameOffset returns the address of the stack frame, absolute for system\n// stack frames or as an offset from stackhi for goroutine stacks (a\n// negative value).\nfunc (frame *Stackframe) FrameOffset() int64 {\n\tif frame.SystemStack {\n\t\treturn frame.Regs.CFA\n\t}\n\treturn frame.Regs.CFA - int64(frame.stackHi)\n}\n\n// FramePointerOffset returns the value of the frame pointer, absolute for\n// system stack frames or as an offset from stackhi for goroutine stacks (a\n// negative value).\nfunc (frame *Stackframe) FramePointerOffset() int64 {\n\tif frame.SystemStack {\n\t\treturn int64(frame.Regs.BP())\n\t}\n\treturn int64(frame.Regs.BP()) - int64(frame.stackHi)\n}\n\n// contains returns true if off is between CFA and SP\nfunc (frame *Stackframe) contains(off int64) bool {\n\tp := uint64(off + int64(frame.stackHi))\n\treturn frame.Regs.SP() < p && p <= uint64(frame.Regs.CFA)\n}\n\n// ThreadStacktrace returns the stack trace for thread.\n// Note the locations in the array are return addresses not call addresses.\nfunc ThreadStacktrace(tgt *Target, thread Thread, depth int) ([]Stackframe, error) {\n\tg, _ := GetG(thread)\n\tif g == nil {\n\t\tif cachedStack := tgt.scache.get(0, thread.ThreadID()); cachedStack != nil {\n\t\t\tframes, err := cachedStack.it.stacktrace(depth, cachedStack.frames)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ttgt.scache.put(0, thread.ThreadID(), cachedStack.it, frames)\n\t\t\treturn limitframes(frames, depth+1), nil\n\t\t}\n\t\tregs, err := thread.Registers()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tso := thread.BinInfo().PCToImage(regs.PC())\n\t\tdwarfRegs := *(thread.BinInfo().Arch.RegistersToDwarfRegisters(so.StaticBase, regs))\n\t\tdwarfRegs.ChangeFunc = thread.SetReg\n\t\tit := newStackIterator(tgt, thread.BinInfo(), thread.ProcessMemory(), dwarfRegs, 0, nil, 0)\n\t\tframes, err := it.stacktrace(depth, nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttgt.scache.put(0, thread.ThreadID(), it, frames)\n\t\treturn frames, nil\n\n\t}\n\treturn GoroutineStacktrace(tgt, g, depth, 0)\n}\n\nfunc goroutineStackIterator(tgt *Target, g *G, opts StacktraceOptions) (*stackIterator, error) {\n\tbi := g.variable.bi\n\tif g.Thread != nil {\n\t\tregs, err := g.Thread.Registers()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tso := bi.PCToImage(regs.PC())\n\t\tdwarfRegs := *(bi.Arch.RegistersToDwarfRegisters(so.StaticBase, regs))\n\t\tdwarfRegs.ChangeFunc = g.Thread.SetReg\n\t\treturn newStackIterator(\n\t\t\ttgt, bi, g.variable.mem,\n\t\t\tdwarfRegs,\n\t\t\tg.stack.hi, g, opts), nil\n\t}\n\tso := g.variable.bi.PCToImage(g.PC)\n\treturn newStackIterator(\n\t\ttgt, bi, g.variable.mem,\n\t\tbi.Arch.addrAndStackRegsToDwarfRegisters(so.StaticBase, g.PC, g.SP, g.BP, g.LR),\n\t\tg.stack.hi, g, opts), nil\n}\n\ntype StacktraceOptions uint16\n\nconst (\n\t// StacktraceReadDefers requests a stacktrace decorated with deferred calls\n\t// for each frame.\n\tStacktraceReadDefers StacktraceOptions = 1 << iota\n\n\t// StacktraceSimple requests a stacktrace where no stack switches will be\n\t// attempted.\n\tStacktraceSimple\n\n\t// StacktraceG requests a stacktrace starting with the register\n\t// values saved in the runtime.g structure.\n\tStacktraceG\n)\n\n// GoroutineStacktrace returns the stack trace for a goroutine.\n// Note the locations in the array are return addresses not call addresses.\nfunc GoroutineStacktrace(tgt *Target, g *G, depth int, opts StacktraceOptions) ([]Stackframe, error) {\n\tif opts == 0 {\n\t\tvar threadID int\n\t\tif g.Thread != nil {\n\t\t\tthreadID = g.Thread.ThreadID()\n\t\t}\n\t\tif cachedStack := tgt.scache.get(g.ID, threadID); cachedStack != nil {\n\t\t\tframes, err := cachedStack.it.stacktrace(depth, cachedStack.frames)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ttgt.scache.put(g.ID, threadID, cachedStack.it, frames)\n\t\t\treturn limitframes(frames, depth+1), nil\n\t\t}\n\t}\n\tit, err := goroutineStackIterator(tgt, g, opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tframes, err := it.stacktrace(depth, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif opts&StacktraceReadDefers != 0 {\n\t\tg.readDefers(frames)\n\t}\n\tif opts == 0 {\n\t\ttgt.scache.put(g.ID, 0, it, frames)\n\t}\n\treturn frames, nil\n}\n\n// NullAddrError is an error for a null address.\ntype NullAddrError struct{}\n\nfunc (n NullAddrError) Error() string {\n\treturn \"NULL address\"\n}\n\n// stackIterator holds information\n// required to iterate and walk the program\n// stack.\ntype stackIterator struct {\n\tpc     uint64\n\ttop    bool\n\tatend  bool\n\tsigret bool\n\tframe  Stackframe\n\ttarget *Target\n\tbi     *BinaryInfo\n\tmem    MemoryReadWriter\n\terr    error\n\n\tstackhi     uint64\n\tsystemstack bool\n\n\t// regs is the register set for the current frame\n\tregs op.DwarfRegisters\n\n\tg                  *G     // the goroutine being stacktraced, nil if we are stacktracing a goroutine-less thread\n\tg0_sched_sp        uint64 // value of g0.sched.sp (see comments around its use)\n\tg0_sched_sp_loaded bool   // g0_sched_sp was loaded from g0\n\n\tcount int\n\n\topts StacktraceOptions\n}\n\nfunc newStackIterator(tgt *Target, bi *BinaryInfo, mem MemoryReadWriter, regs op.DwarfRegisters, stackhi uint64, g *G, opts StacktraceOptions) *stackIterator {\n\tsystemstack := true\n\tif g != nil {\n\t\tsystemstack = g.SystemStack\n\t}\n\treturn &stackIterator{pc: regs.PC(), regs: regs, top: true, target: tgt, bi: bi, mem: mem, err: nil, atend: false, stackhi: stackhi, systemstack: systemstack, g: g, opts: opts}\n}\n\n// Next points the iterator to the next stack frame.\nfunc (it *stackIterator) Next() bool {\n\tif it.err != nil || it.atend {\n\t\treturn false\n\t}\n\n\tif logflags.Stack() {\n\t\tlogger := logflags.StackLogger()\n\t\tw := &strings.Builder{}\n\t\tfmt.Fprintf(w, \"current pc = %#x CFA = %#x FrameBase = %#x \", it.pc, it.regs.CFA, it.regs.FrameBase)\n\t\tfor i := 0; i < it.regs.CurrentSize(); i++ {\n\t\t\treg := it.regs.Reg(uint64(i))\n\t\t\tif reg == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tname, _, _ := it.bi.Arch.DwarfRegisterToString(i, reg)\n\t\t\tfmt.Fprintf(w, \" %s = %#x\", name, reg.Uint64Val)\n\t\t}\n\t\tlogger.Debugf(\"%s\", w.String())\n\t}\n\n\tcallFrameRegs, ret, retaddr := it.advanceRegs()\n\tit.frame = it.newStackframe(ret, retaddr)\n\n\tif logflags.Stack() {\n\t\tlogger := logflags.StackLogger()\n\t\tfnname := \"?\"\n\t\tif it.frame.Call.Fn != nil {\n\t\t\tfnname = it.frame.Call.Fn.Name\n\t\t}\n\t\tlogger.Debugf(\"new frame %#x %s:%d at %s\", it.frame.Call.PC, it.frame.Call.File, it.frame.Call.Line, fnname)\n\t}\n\n\tif it.frame.Current.Fn != nil && it.frame.Current.Fn.Name == \"runtime.sigtrampgo\" && it.target != nil {\n\t\tregs, err := it.readSigtrampgoContext()\n\t\tif err != nil {\n\t\t\tlogflags.DebuggerLogger().Errorf(\"could not read runtime.sigtrampgo context: %v\", err)\n\t\t} else {\n\t\t\tso := it.bi.PCToImage(regs.PC())\n\t\t\tregs.StaticBase = so.StaticBase\n\t\t\tit.pc = regs.PC()\n\t\t\tit.regs = *regs\n\t\t\tit.top = false\n\t\t\tif it.g != nil && it.g.ID != 0 {\n\t\t\t\tit.systemstack = !(it.regs.SP() >= it.g.stack.lo && it.regs.SP() < it.g.stack.hi)\n\t\t\t}\n\t\t\tlogflags.StackLogger().Debugf(\"sigtramp context read\")\n\t\t\treturn true\n\t\t}\n\t}\n\n\tif it.opts&StacktraceSimple == 0 {\n\t\tif it.bi.Arch.switchStack(it, &callFrameRegs) {\n\t\t\tlogflags.StackLogger().Debugf(\"stack switched\")\n\t\t\treturn true\n\t\t}\n\t}\n\n\tif it.frame.Ret <= 0 {\n\t\tit.atend = true\n\t\treturn true\n\t}\n\n\tit.sigret = it.frame.Current.Fn != nil && it.frame.Current.Fn.Name == \"runtime.sigpanic\"\n\tit.top = false\n\tit.pc = it.frame.Ret\n\tit.regs = callFrameRegs\n\treturn true\n}\n\nfunc (it *stackIterator) switchToGoroutineStack() error {\n\tif it.g == nil {\n\t\treturn fmt.Errorf(\"nil goroutine when attempting to switch to goroutine stack\")\n\t}\n\tit.systemstack = false\n\tit.top = false\n\tit.pc = it.g.PC\n\tit.regs.Reg(it.regs.SPRegNum).Uint64Val = it.g.SP\n\tit.regs.AddReg(it.regs.BPRegNum, op.DwarfRegisterFromUint64(it.g.BP))\n\tif it.bi.Arch.usesLR {\n\t\tlrReg := it.regs.Reg(it.regs.LRRegNum)\n\t\tif lrReg == nil {\n\t\t\treturn fmt.Errorf(\"LR register is nil during stack switch\")\n\t\t}\n\t\tlrReg.Uint64Val = it.g.LR\n\t}\n\treturn nil\n}\n\n// Frame returns the frame the iterator is pointing at.\nfunc (it *stackIterator) Frame() Stackframe {\n\tit.frame.Bottom = it.atend\n\treturn it.frame\n}\n\n// Err returns the error encountered during stack iteration.\nfunc (it *stackIterator) Err() error {\n\treturn it.err\n}\n\n// frameBase calculates the frame base pseudo-register for DWARF for fn and\n// the current frame.\nfunc (it *stackIterator) frameBase(fn *Function) int64 {\n\tif fn.cu.image.Stripped() {\n\t\treturn 0\n\t}\n\tdwarfTree, err := fn.cu.image.getDwarfTree(fn.offset)\n\tif err != nil {\n\t\treturn 0\n\t}\n\tfb, _, _, _ := it.bi.Location(dwarfTree.Entry, dwarf.AttrFrameBase, it.pc, it.regs, it.mem)\n\treturn fb\n}\n\nfunc (it *stackIterator) newStackframe(ret, retaddr uint64) Stackframe {\n\tif retaddr == 0 {\n\t\tit.err = NullAddrError{}\n\t\treturn Stackframe{}\n\t}\n\tf, l, fn := it.bi.PCToLine(it.pc)\n\tif fn == nil {\n\t\tf = \"?\"\n\t\tl = -1\n\t} else {\n\t\tit.regs.FrameBase = it.frameBase(fn)\n\t}\n\tr := Stackframe{Current: Location{PC: it.pc, File: f, Line: l, Fn: fn}, Regs: it.regs, Ret: ret, stackHi: it.stackhi, SystemStack: it.systemstack, lastpc: it.pc}\n\tif r.Regs.Reg(it.regs.PCRegNum) == nil {\n\t\tr.Regs.AddReg(it.regs.PCRegNum, op.DwarfRegisterFromUint64(it.pc))\n\t}\n\tr.Call = r.Current\n\tif !it.top && r.Current.Fn != nil && it.pc != r.Current.Fn.Entry && !it.sigret {\n\t\t// if the return address is the entry point of the function that\n\t\t// contains it then this is some kind of fake return frame (for example\n\t\t// runtime.sigreturn) that didn't actually call the current frame,\n\t\t// attempting to get the location of the CALL instruction would just\n\t\t// obfuscate what's going on, since there is no CALL instruction.\n\t\tswitch r.Current.Fn.Name {\n\t\tcase \"runtime.mstart\", \"runtime.systemstack_switch\":\n\t\t\t// these frames are inserted by runtime.systemstack and there is no CALL\n\t\t\t// instruction to look for at pc - 1\n\t\tdefault:\n\t\t\tr.lastpc = it.pc - 1\n\t\t\tr.Call.File, r.Call.Line = r.Current.Fn.cu.lineInfo.PCToLine(r.Current.Fn.Entry, it.pc-1)\n\t\t}\n\t}\n\tif fn != nil && !fn.cu.image.Stripped() && !r.SystemStack && it.g != nil {\n\t\tdwarfTree, _ := fn.cu.image.getDwarfTree(fn.offset)\n\t\tif dwarfTree != nil {\n\t\t\tc := readLocalPtrVar(dwarfTree, goClosurePtr, it.target, it.bi, fn.cu.image, r.Regs, it.mem)\n\t\t\tif c != 0 {\n\t\t\t\tif c >= it.g.stack.lo && c < it.g.stack.hi {\n\t\t\t\t\tr.closurePtr = int64(c) - int64(it.g.stack.hi)\n\t\t\t\t} else {\n\t\t\t\t\tr.closurePtr = int64(c)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn r\n}\n\nfunc (it *stackIterator) stacktrace(depth int, initialFrames []Stackframe) ([]Stackframe, error) {\n\tif depth < 0 {\n\t\treturn nil, errors.New(\"negative maximum stack depth\")\n\t}\n\tvar frames []Stackframe\n\tif len(initialFrames) > 0 {\n\t\tframes = initialFrames\n\t\tif len(frames) >= depth+1 {\n\t\t\treturn frames, nil\n\t\t}\n\t} else {\n\t\tframes = make([]Stackframe, 0, depth+1)\n\t}\n\tf := func(frame Stackframe) bool {\n\t\tframes = append(frames, frame)\n\t\treturn len(frames) < depth+1\n\t}\n\tit.stacktraceFunc(f)\n\tif it.Err() != nil && len(frames) == 1 && it.g != nil && frames[0].SystemStack && (it.opts&StacktraceSimple == 0) {\n\t\t// If we can't continue from the first frame, and it was on a system stack\n\t\t// and we have a goroutine which we are allowed to switch to then switch\n\t\t// to it and continue the stacktrace from there.\n\t\t// This improves stacktraces produced on Windows by WER where the first\n\t\t// thread will be executing a system function from which we can't continue\n\t\t// to trace.\n\t\t// See #3824.\n\t\tit.err = nil\n\t\tit.opts |= StacktraceG\n\t\tit.stacktraceFunc(f)\n\t}\n\n\tif err := it.Err(); err != nil {\n\t\tif len(frames) == 0 {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tframes = append(frames, Stackframe{Err: err})\n\t}\n\treturn frames, nil\n}\n\nfunc (it *stackIterator) stacktraceFunc(callback func(Stackframe) bool) {\n\tif it.opts&StacktraceG != 0 && it.g != nil {\n\t\tif err := it.switchToGoroutineStack(); err != nil {\n\t\t\tit.err = err\n\t\t\treturn\n\t\t}\n\t\tit.top = true\n\t}\n\tfor it.Next() {\n\t\tif !it.appendInlineCalls(callback, it.Frame()) {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc (it *stackIterator) appendInlineCalls(callback func(Stackframe) bool, frame Stackframe) bool {\n\tif frame.Call.Fn == nil {\n\t\tit.count++\n\t\treturn callback(frame)\n\t}\n\tif frame.Call.Fn.cu.lineInfo == nil {\n\t\tit.count++\n\t\treturn callback(frame)\n\t}\n\n\tcallpc := frame.Call.PC\n\tif it.count > 0 {\n\t\tcallpc--\n\t}\n\n\tdwarfTree, err := frame.Call.Fn.cu.image.getDwarfTree(frame.Call.Fn.offset)\n\tif err != nil {\n\t\tit.count++\n\t\treturn callback(frame)\n\t}\n\n\tfor _, entry := range reader.InlineStack(dwarfTree, callpc) {\n\t\tframe.hasInlines = true\n\t\tfnname, okname := entry.Val(dwarf.AttrName).(string)\n\t\tfileidx, okfileidx := entry.Val(dwarf.AttrCallFile).(int64)\n\t\tline, okline := entry.Val(dwarf.AttrCallLine).(int64)\n\n\t\tif !okname || !okfileidx || !okline {\n\t\t\tbreak\n\t\t}\n\t\tvar e *dwarf.Entry\n\t\tfilepath, fileErr := frame.Current.Fn.cu.filePath(int(fileidx), e)\n\t\tif fileErr != nil {\n\t\t\tbreak\n\t\t}\n\n\t\tinlfn := &Function{Name: fnname, Entry: frame.Call.Fn.Entry, End: frame.Call.Fn.End, offset: entry.Offset, cu: frame.Call.Fn.cu}\n\t\tit.count++\n\t\tcallback(Stackframe{\n\t\t\tCurrent: frame.Current,\n\t\t\tCall: Location{\n\t\t\t\tframe.Call.PC,\n\t\t\t\tframe.Call.File,\n\t\t\t\tframe.Call.Line,\n\t\t\t\tinlfn,\n\t\t\t},\n\t\t\tRegs:        frame.Regs,\n\t\t\tstackHi:     frame.stackHi,\n\t\t\tRet:         frame.Ret,\n\t\t\tErr:         frame.Err,\n\t\t\tSystemStack: frame.SystemStack,\n\t\t\tInlined:     true,\n\t\t\tlastpc:      frame.lastpc,\n\t\t\tclosurePtr:  frame.closurePtr,\n\t\t})\n\n\t\tframe.Call.File = filepath\n\t\tframe.Call.Line = int(line)\n\t}\n\n\tit.count++\n\treturn callback(frame)\n}\n\n// advanceRegs calculates the DwarfRegisters for a next stack frame\n// (corresponding to it.pc).\n//\n// The computation uses the registers for the current stack frame (it.regs) and\n// the corresponding Frame Descriptor Entry (FDE) retrieved from the DWARF info.\n//\n// The new set of registers is returned. it.regs is not updated, except for\n// it.regs.CFA; the caller has to eventually switch it.regs when the iterator\n// advances to the next frame.\nfunc (it *stackIterator) advanceRegs() (callFrameRegs op.DwarfRegisters, ret uint64, retaddr uint64) {\n\tlogger := logflags.StackLogger()\n\n\tfde, err := it.bi.frameEntries.FDEForPC(it.pc)\n\tvar framectx *frame.FrameContext\n\tif _, nofde := err.(*frame.ErrNoFDEForPC); nofde {\n\t\tframectx = it.bi.Arch.fixFrameUnwindContext(nil, it.pc, it.bi)\n\t} else {\n\t\tfctxt, err := fde.EstablishFrame(it.pc)\n\t\tif err != nil {\n\t\t\tlogger.Errorf(\"Error executing Frame Debug Entry for PC %x: %v\", it.pc, err)\n\t\t}\n\t\tframectx = it.bi.Arch.fixFrameUnwindContext(fctxt, it.pc, it.bi)\n\t}\n\n\tlogger.Debugf(\"advanceRegs at %#x\", it.pc)\n\n\tcfareg, err := it.executeFrameRegRule(0, framectx.CFA, 0)\n\tif cfareg == nil {\n\t\tit.err = fmt.Errorf(\"CFA becomes undefined at PC %#x: %v\", it.pc, err)\n\t\treturn op.DwarfRegisters{}, 0, 0\n\t}\n\tif logflags.Stack() {\n\t\tlogger.Debugf(\"\\tCFA rule %s -> %#x\", ruleString(&framectx.CFA, it.bi.Arch.RegnumToString), cfareg.Uint64Val)\n\t}\n\tit.regs.CFA = int64(cfareg.Uint64Val)\n\n\tcallimage := it.bi.PCToImage(it.pc)\n\n\tcallFrameRegs = op.DwarfRegisters{\n\t\tStaticBase: callimage.StaticBase,\n\t\tByteOrder:  it.regs.ByteOrder,\n\t\tPCRegNum:   it.regs.PCRegNum,\n\t\tSPRegNum:   it.regs.SPRegNum,\n\t\tBPRegNum:   it.regs.BPRegNum,\n\t\tLRRegNum:   it.regs.LRRegNum,\n\t}\n\n\t// According to the standard the compiler should be responsible for emitting\n\t// rules for the RSP register so that it can then be used to calculate CFA,\n\t// however neither Go nor GCC do this.\n\t// In the following line we copy GDB's behaviour by assuming this is\n\t// implicit.\n\t// See also the comment in dwarf2_frame_default_init in\n\t// $GDB_SOURCE/dwarf2/frame.c\n\tcallFrameRegs.AddReg(callFrameRegs.SPRegNum, cfareg)\n\n\tfor i, regRule := range framectx.Regs {\n\t\tif logflags.Stack() {\n\t\t\tlogger.Debugf(\"\\t%s rule %s \", it.bi.Arch.RegnumToString(i), ruleString(&regRule, it.bi.Arch.RegnumToString))\n\t\t}\n\t\treg, err := it.executeFrameRegRule(i, regRule, it.regs.CFA)\n\t\tif reg != nil {\n\t\t\tlogger.Debugf(\"\\t\\t-> %#x\", reg.Uint64Val)\n\t\t} else {\n\t\t\tlogger.Debugf(\"\\t\\t-> nothing (%v)\", err)\n\t\t}\n\t\tcallFrameRegs.AddReg(i, reg)\n\t\tif i == framectx.RetAddrReg {\n\t\t\tif reg == nil {\n\t\t\t\tif err == nil {\n\t\t\t\t\t//lint:ignore ST1005 backwards compatibility\n\t\t\t\t\terr = fmt.Errorf(\"Undefined return address at %#x\", it.pc)\n\t\t\t\t}\n\t\t\t\tit.err = err\n\t\t\t} else {\n\t\t\t\tret = reg.Uint64Val\n\t\t\t\t// On systems which use a link register to store the return address of a function,\n\t\t\t\t// certain leaf functions may not have correct DWARF information present in the\n\t\t\t\t// .debug_frame FDE when unwinding after a fatal signal. This is due to the fact\n\t\t\t\t// that runtime.sigpanic inserts a frame to make it look like the function which\n\t\t\t\t// triggered the signal called runtime.sigpanic directly, making the value of the\n\t\t\t\t// link register unreliable. Instead, treat it as a non-leaf function and read the\n\t\t\t\t// return address from the stack. For more details, see:\n\t\t\t\t// https://github.com/golang/go/issues/63862#issuecomment-1802672629.\n\t\t\t\tif it.frame.Call.Fn != nil && it.frame.Call.Fn.Name == \"runtime.sigpanic\" && it.bi.Arch.usesLR {\n\t\t\t\t\tbuf := make([]byte, 8)\n\t\t\t\t\t_, err := it.mem.ReadMemory(buf, uint64(it.regs.CFA))\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tit.err = err\n\t\t\t\t\t}\n\t\t\t\t\tbinary.Read(bytes.NewReader(buf), binary.LittleEndian, &ret)\n\t\t\t\t}\n\t\t\t}\n\t\t\tretaddr = uint64(it.regs.CFA + regRule.Offset)\n\t\t}\n\t}\n\n\tif it.bi.Arch.usesLR {\n\t\tif ret == 0 && it.regs.Reg(it.regs.LRRegNum) != nil {\n\t\t\tret = it.regs.Reg(it.regs.LRRegNum).Uint64Val\n\t\t}\n\t}\n\n\treturn callFrameRegs, ret, retaddr\n}\n\nfunc (it *stackIterator) executeFrameRegRule(regnum uint64, rule frame.DWRule, cfa int64) (*op.DwarfRegister, error) {\n\tswitch rule.Rule {\n\tdefault:\n\t\tfallthrough\n\tcase frame.RuleUndefined:\n\t\treturn nil, nil\n\tcase frame.RuleSameVal:\n\t\tif it.regs.Reg(regnum) == nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\treg := *it.regs.Reg(regnum)\n\t\treturn &reg, nil\n\tcase frame.RuleOffset:\n\t\treturn it.readRegisterAt(regnum, uint64(cfa+rule.Offset))\n\tcase frame.RuleValOffset:\n\t\treturn op.DwarfRegisterFromUint64(uint64(cfa + rule.Offset)), nil\n\tcase frame.RuleRegister:\n\t\treturn it.regs.Reg(rule.Reg), nil\n\tcase frame.RuleExpression:\n\t\tv, _, err := op.ExecuteStackProgram(it.regs, rule.Expression, it.bi.Arch.PtrSize(), it.mem.ReadMemory)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn it.readRegisterAt(regnum, uint64(v))\n\tcase frame.RuleValExpression:\n\t\tv, _, err := op.ExecuteStackProgram(it.regs, rule.Expression, it.bi.Arch.PtrSize(), it.mem.ReadMemory)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn op.DwarfRegisterFromUint64(uint64(v)), nil\n\tcase frame.RuleArchitectural:\n\t\treturn nil, errors.New(\"architectural frame rules are unsupported\")\n\tcase frame.RuleCFA:\n\t\tif it.regs.Reg(rule.Reg) == nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\treturn op.DwarfRegisterFromUint64(uint64(int64(it.regs.Uint64Val(rule.Reg)) + rule.Offset)), nil\n\tcase frame.RuleFramePointer:\n\t\tcurReg := it.regs.Reg(rule.Reg)\n\t\tif curReg == nil {\n\t\t\treturn nil, nil\n\t\t}\n\t\tif curReg.Uint64Val <= uint64(cfa) {\n\t\t\treturn it.readRegisterAt(regnum, curReg.Uint64Val)\n\t\t}\n\t\tnewReg := *curReg\n\t\treturn &newReg, nil\n\t}\n}\n\nfunc (it *stackIterator) readRegisterAt(regnum uint64, addr uint64) (*op.DwarfRegister, error) {\n\tbuf := make([]byte, it.bi.Arch.regSize(regnum))\n\t_, err := it.mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn op.DwarfRegisterFromBytes(buf), nil\n}\n\nfunc (it *stackIterator) loadG0SchedSP() {\n\tif it.g0_sched_sp_loaded {\n\t\treturn\n\t}\n\tit.g0_sched_sp_loaded = true\n\tif it.g != nil {\n\t\tmvar, _ := it.g.variable.structField(\"m\")\n\t\tif mvar != nil {\n\t\t\tg0var, _ := mvar.structField(\"g0\")\n\t\t\tif g0var != nil {\n\t\t\t\tg0, _ := g0var.parseG()\n\t\t\t\tif g0 != nil {\n\t\t\t\t\tit.g0_sched_sp = g0.SP\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Defer represents one deferred call\ntype Defer struct {\n\tDwrapPC uint64 // PC of the deferred function or, in Go 1.17+ a wrapper to it\n\tDeferPC uint64 // PC address of instruction that added this defer\n\tSP      uint64 // Value of SP register when this function was deferred (this field gets adjusted when the stack is moved to match the new stack space)\n\tlink    *Defer // Next deferred function\n\targSz   int64  // Always 0 in Go >=1.17\n\n\trangefunc []*Defer // See explanation in $GOROOT/src/runtime/panic.go, comment to function runtime.deferrangefunc (this is the equivalent of the rangefunc variable and head fields, combined)\n\n\tvariable   *Variable\n\tUnreadable error\n}\n\n// readDefers decorates the frames with the function deferred at each stack frame.\nfunc (g *G) readDefers(frames []Stackframe) {\n\tcurdefer := g.Defer()\n\ti := 0\n\n\t// scan simultaneously frames and the curdefer linked list, assigning\n\t// defers to their associated frames.\n\tfor {\n\t\tif curdefer == nil || i >= len(frames) {\n\t\t\treturn\n\t\t}\n\t\tif curdefer.Unreadable != nil {\n\t\t\t// Current defer is unreadable, stick it into the first available frame\n\t\t\t// (so that it can be reported to the user) and exit\n\t\t\tframes[i].Defers = append(frames[i].Defers, curdefer)\n\t\t\treturn\n\t\t}\n\t\tif frames[i].Err != nil {\n\t\t\treturn\n\t\t}\n\n\t\tif frames[i].TopmostDefer == nil {\n\t\t\tframes[i].TopmostDefer = curdefer.topdefer()\n\t\t}\n\n\t\tif frames[i].SystemStack || frames[i].Inlined || curdefer.SP >= uint64(frames[i].Regs.CFA) {\n\t\t\t// frames[i].Regs.CFA is the value that SP had before the function of\n\t\t\t// frames[i] was called.\n\t\t\t// This means that when curdefer.SP == frames[i].Regs.CFA then curdefer\n\t\t\t// was added by the previous frame.\n\t\t\t//\n\t\t\t// curdefer.SP < frames[i].Regs.CFA means curdefer was added by a\n\t\t\t// function further down the stack.\n\t\t\t//\n\t\t\t// SystemStack frames live on a different physical stack and can't be\n\t\t\t// compared with deferred frames.\n\t\t\ti++\n\t\t} else {\n\t\t\tif len(curdefer.rangefunc) > 0 {\n\t\t\t\tframes[i].Defers = append(frames[i].Defers, curdefer.rangefunc...)\n\t\t\t} else {\n\t\t\t\tframes[i].Defers = append(frames[i].Defers, curdefer)\n\t\t\t}\n\t\t\tcurdefer = curdefer.Next()\n\t\t}\n\t}\n}\n\nconst maxRangeFuncDefers = 10\n\nfunc (d *Defer) load(canrecur bool) {\n\tv := d.variable // +rtype _defer\n\tv.loadValue(LoadConfig{false, 1, 0, 0, -1, 0})\n\tif v.Unreadable != nil {\n\t\td.Unreadable = v.Unreadable\n\t\treturn\n\t}\n\n\tfnvar := v.fieldVariable(\"fn\")\n\tif fnvar.Kind == reflect.Func {\n\t\t// In Go 1.18, fn is a func().\n\t\td.DwrapPC = fnvar.Base\n\t} else if val := fnvar.maybeDereference(); val.Addr != 0 {\n\t\t// In Go <1.18, fn is a *funcval.\n\t\tfnvar = fnvar.loadFieldNamed(\"fn\")\n\t\tif fnvar.Unreadable == nil {\n\t\t\td.DwrapPC, _ = constant.Uint64Val(fnvar.Value)\n\t\t}\n\t}\n\n\td.DeferPC, _ = constant.Uint64Val(v.fieldVariable(\"pc\").Value) // +rtype uintptr\n\td.SP, _ = constant.Uint64Val(v.fieldVariable(\"sp\").Value)      // +rtype uintptr\n\tsizVar := v.fieldVariable(\"siz\")                               // +rtype -opt int32\n\tif sizVar != nil {\n\t\t// In Go <1.18, siz stores the number of bytes of\n\t\t// defer arguments following the defer record. In Go\n\t\t// 1.18, the defer record doesn't store arguments, so\n\t\t// we leave this 0.\n\t\td.argSz, _ = constant.Int64Val(sizVar.Value)\n\t}\n\n\tlinkvar := v.fieldVariable(\"link\").maybeDereference() // +rtype *_defer\n\tif linkvar.Addr != 0 {\n\t\td.link = &Defer{variable: linkvar}\n\t}\n\n\tif canrecur {\n\t\th := v\n\t\tfor _, fieldname := range []string{\"head\", \"u\", \"value\"} {\n\t\t\tif h == nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\th = h.loadFieldNamed(fieldname)\n\t\t}\n\t\tif h != nil {\n\t\t\th := h.newVariable(\"\", h.Addr, pointerTo(linkvar.DwarfType, h.bi.Arch), h.mem).maybeDereference()\n\t\t\tif h.Addr != 0 {\n\t\t\t\thd := &Defer{variable: h}\n\t\t\t\tfor {\n\t\t\t\t\thd.load(false)\n\t\t\t\t\td.rangefunc = append(d.rangefunc, hd)\n\t\t\t\t\tif hd.link == nil {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tif len(d.rangefunc) > maxRangeFuncDefers {\n\t\t\t\t\t\t// We don't have a way to know for sure that we haven't gone completely off-road while loading this list so limit it to an arbitrary maximum size.\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\thd = hd.link\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n// errSPDecreased is used when (*Defer).Next detects a corrupted linked\n// list, specifically when after following a link pointer the value of SP\n// decreases rather than increasing or staying the same (the defer list is a\n// FIFO list, nodes further down the list have been added by function calls\n// further down the call stack and therefore the SP should always increase).\nvar errSPDecreased = errors.New(\"corrupted defer list: SP decreased\")\n\n// Next returns the next defer in the linked list\nfunc (d *Defer) Next() *Defer {\n\tif d.link == nil {\n\t\treturn nil\n\t}\n\td.link.load(true)\n\tif d.link.SP < d.SP {\n\t\td.link.Unreadable = errSPDecreased\n\t}\n\treturn d.link\n}\n\nfunc (d *Defer) topdefer() *Defer {\n\tif len(d.rangefunc) > 0 {\n\t\treturn d.rangefunc[0]\n\t}\n\treturn d\n}\n\n// EvalScope returns an EvalScope relative to the argument frame of this deferred call.\n// The argument frame of a deferred call is stored in memory immediately\n// after the deferred header.\nfunc (d *Defer) EvalScope(t *Target, thread Thread) (*EvalScope, error) {\n\tscope, err := GoroutineScope(t, thread)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not get scope: %v\", err)\n\t}\n\n\tbi := thread.BinInfo()\n\tscope.PC = d.DwrapPC\n\tscope.File, scope.Line, scope.Fn = bi.PCToLine(d.DwrapPC)\n\n\tif scope.Fn == nil {\n\t\treturn nil, fmt.Errorf(\"could not find function at %#x\", d.DwrapPC)\n\t}\n\n\t// The arguments are stored immediately after the defer header struct, i.e.\n\t// addr+sizeof(_defer).\n\n\tif !bi.Arch.usesLR {\n\t\t// On architectures that don't have a link register CFA is always the address of the first\n\t\t// argument, that's what we use for the value of CFA.\n\t\t// For SP we use CFA minus the size of one pointer because that would be\n\t\t// the space occupied by pushing the return address on the stack during the\n\t\t// CALL.\n\t\tscope.Regs.CFA = (int64(d.variable.Addr) + d.variable.RealType.Common().ByteSize)\n\t\tscope.Regs.Reg(scope.Regs.SPRegNum).Uint64Val = uint64(scope.Regs.CFA - int64(bi.Arch.PtrSize()))\n\t} else {\n\t\t// On architectures that have a link register CFA and SP have the same\n\t\t// value but the address of the first argument is at CFA+ptrSize so we set\n\t\t// CFA to the start of the argument frame minus one pointer size.\n\t\tscope.Regs.CFA = int64(d.variable.Addr) + d.variable.RealType.Common().ByteSize - int64(bi.Arch.PtrSize())\n\t\tscope.Regs.Reg(scope.Regs.SPRegNum).Uint64Val = uint64(scope.Regs.CFA)\n\t}\n\n\trdr := scope.Fn.cu.image.dwarfReader\n\trdr.Seek(scope.Fn.offset)\n\te, err := rdr.Next()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not read DWARF function entry: %v\", err)\n\t}\n\tscope.Regs.FrameBase, _, _, _ = bi.Location(e, dwarf.AttrFrameBase, scope.PC, scope.Regs, scope.Mem)\n\tscope.Mem = cacheMemory(scope.Mem, uint64(scope.Regs.CFA), int(d.argSz))\n\n\treturn scope, nil\n}\n\n// DeferredFunc returns the deferred function, on Go 1.17 and later unwraps\n// any defer wrapper.\nfunc (d *Defer) DeferredFunc(p *Target) (file string, line int, fn *Function) {\n\tbi := p.BinInfo()\n\tfn = bi.PCToFunc(d.DwrapPC)\n\tfn = p.dwrapUnwrap(fn)\n\tif fn == nil {\n\t\treturn \"\", 0, nil\n\t}\n\tfile, line = bi.EntryLineForFunc(fn)\n\treturn file, line, fn\n}\n\nfunc ruleString(rule *frame.DWRule, regnumToString func(uint64) string) string {\n\tswitch rule.Rule {\n\tcase frame.RuleUndefined:\n\t\treturn \"undefined\"\n\tcase frame.RuleSameVal:\n\t\treturn \"sameval\"\n\tcase frame.RuleOffset:\n\t\treturn fmt.Sprintf(\"[cfa+%d]\", rule.Offset)\n\tcase frame.RuleValOffset:\n\t\treturn fmt.Sprintf(\"cfa+%d\", rule.Offset)\n\tcase frame.RuleRegister:\n\t\treturn fmt.Sprintf(\"R(%d)\", rule.Reg)\n\tcase frame.RuleExpression:\n\t\tw := &strings.Builder{}\n\t\top.PrettyPrint(w, rule.Expression, regnumToString)\n\t\treturn fmt.Sprintf(\"[expr(%s)]\", w.String())\n\tcase frame.RuleValExpression:\n\t\tw := &strings.Builder{}\n\t\top.PrettyPrint(w, rule.Expression, regnumToString)\n\t\treturn fmt.Sprintf(\"expr(%s)\", w.String())\n\tcase frame.RuleArchitectural:\n\t\treturn \"architectural\"\n\tcase frame.RuleCFA:\n\t\treturn fmt.Sprintf(\"R(%d)+%d\", rule.Reg, rule.Offset)\n\tcase frame.RuleFramePointer:\n\t\treturn fmt.Sprintf(\"[R(%d)] framepointer\", rule.Reg)\n\tdefault:\n\t\treturn fmt.Sprintf(\"unknown_rule(%d)\", rule.Rule)\n\t}\n}\n\n// rangeFuncStackTrace, if the topmost frame of the stack is a the body of a\n// range-over-func statement, returns a slice containing the stack of range\n// bodies on the stack, interleaved with their return frames, the frame of\n// the function containing them and finally the function that called it.\n//\n// For example, given:\n//\n//\tfunc f() {\n//\t\tfor _ := range iterator1 {\n//\t\t\tfor _ := range iterator2 {\n//\t\t\t\tfmt.Println() // <- YOU ARE HERE\n//\t\t\t}\n//\t\t}\n//\t}\n//\n// It will return the following frames:\n//\n// 0. f-range2()\n// 1. function that called f-range2\n// 2. f-range1()\n// 3. function that called f-range1\n// 4. f()\n// 5. function that called f()\n//\n// If the topmost frame of the stack is *not* the body closure of a\n// range-over-func statement then nothing is returned.\nfunc rangeFuncStackTrace(tgt *Target, g *G) ([]Stackframe, error) {\n\tif g == nil {\n\t\treturn nil, nil\n\t}\n\tit, err := goroutineStackIterator(tgt, g, StacktraceSimple)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tframes := []Stackframe{}\n\n\tconst (\n\t\tstartStage = iota\n\t\tnormalStage\n\t\tlastFrameStage\n\t\tdoneStage\n\t)\n\n\tstage := startStage\n\taddRetFrame := false\n\n\tvar rangeParent *Function\n\tnonMonotonicSP := false\n\tvar closurePtr int64\n\n\toptimized := func(fn *Function) bool {\n\t\treturn fn.cu.optimized&optimizedOptimized != 0\n\t}\n\n\tappendFrame := func(fr Stackframe) {\n\t\tframes = append(frames, fr)\n\t\tif fr.closurePtr != 0 {\n\t\t\tclosurePtr = fr.closurePtr\n\t\t}\n\t\taddRetFrame = true\n\t}\n\n\tclosurePtrOk := func(fr *Stackframe) bool {\n\t\tif fr.SystemStack {\n\t\t\treturn false\n\t\t}\n\t\tif closurePtr == 0 && optimized(fr.Call.Fn) || frames[len(frames)-1].Inlined {\n\t\t\treturn true\n\t\t}\n\t\tif closurePtr < 0 {\n\t\t\t// closure is stack allocated, check that it is on this frame\n\t\t\treturn fr.contains(closurePtr)\n\t\t}\n\t\t// otherwise closurePtr is a heap allocated variable, so we need to check\n\t\t// all closure body variables in scope in this frame\n\t\tscope := FrameToScope(tgt, it.mem, it.g, 0, *fr)\n\t\tyields, _ := scope.simpleLocals(localsNoDeclLineCheck|localsOnlyRangeBodyClosures, \"\")\n\t\tfor _, yield := range yields {\n\t\t\tif yield.Kind != reflect.Func {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\taddr := yield.funcvalAddr()\n\t\t\tif int64(addr) == closurePtr {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\n\tit.stacktraceFunc(func(fr Stackframe) bool {\n\t\tif len(frames) > 0 {\n\t\t\tprev := &frames[len(frames)-1]\n\t\t\tif fr.Regs.SP() < prev.Regs.SP() {\n\t\t\t\tnonMonotonicSP = true\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tif addRetFrame {\n\t\t\taddRetFrame = false\n\t\t\tframes = append(frames, fr)\n\t\t}\n\n\t\tif fr.Call.Fn == nil {\n\t\t\tif stage == startStage {\n\t\t\t\tframes = nil\n\t\t\t\taddRetFrame = false\n\t\t\t\tstage = doneStage\n\t\t\t\treturn false\n\t\t\t} else {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\tswitch stage {\n\t\tcase startStage:\n\t\t\tappendFrame(fr)\n\t\t\trangeParent = fr.Call.Fn.extra(tgt.BinInfo()).rangeParent\n\t\t\tstage = normalStage\n\t\t\tstop := false\n\t\t\tif rangeParent == nil {\n\t\t\t\tstop = true\n\t\t\t}\n\t\t\tif !optimized(fr.Call.Fn) && !fr.Inlined && closurePtr == 0 {\n\t\t\t\tstop = true\n\t\t\t}\n\t\t\tif stop {\n\t\t\t\tframes = nil\n\t\t\t\taddRetFrame = false\n\t\t\t\tstage = doneStage\n\t\t\t\treturn false\n\t\t\t}\n\t\tcase normalStage:\n\t\t\tif fr.Call.Fn.offset == rangeParent.offset && closurePtrOk(&fr) {\n\t\t\t\tframes = append(frames, fr)\n\t\t\t\tstage = lastFrameStage\n\t\t\t} else if fr.Call.Fn.extra(tgt.BinInfo()).rangeParent == rangeParent && closurePtrOk(&fr) {\n\t\t\t\tappendFrame(fr)\n\t\t\t\tif !optimized(fr.Call.Fn) && closurePtr == 0 {\n\t\t\t\t\tframes = nil\n\t\t\t\t\taddRetFrame = false\n\t\t\t\t\tstage = doneStage\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else if frames[len(frames)-1].Inlined && !fr.Inlined && closurePtr == 0 {\n\t\t\t\tframes = nil\n\t\t\t\taddRetFrame = false\n\t\t\t\tstage = doneStage\n\t\t\t\treturn false\n\t\t\t}\n\t\tcase lastFrameStage:\n\t\t\tframes = append(frames, fr)\n\t\t\tstage = doneStage\n\t\t\treturn false\n\t\tcase doneStage:\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t})\n\tif it.Err() != nil {\n\t\treturn nil, it.Err()\n\t}\n\tif nonMonotonicSP {\n\t\treturn nil, errors.New(\"corrupted stack (SP not monotonically decreasing)\")\n\t}\n\tif stage != doneStage {\n\t\treturn nil, errors.New(\"could not find range-over-func closure parent on the stack\")\n\t}\n\tif len(frames)%2 != 0 {\n\t\treturn nil, errors.New(\"incomplete range-over-func stacktrace\")\n\t}\n\tg.readDefers(frames)\n\treturn frames, nil\n}\n\ntype cachedStack struct {\n\tit     *stackIterator\n\tframes []Stackframe\n}\n\ntype stackCacheKey struct {\n\tgoid     int64\n\tthreadID int\n}\n\ntype stackCache struct {\n\tm map[stackCacheKey]*cachedStack\n}\n\nfunc (cache *stackCache) init() {\n\tcache.m = make(map[stackCacheKey]*cachedStack)\n}\n\nfunc (cache *stackCache) get(goid int64, threadID int) *cachedStack {\n\treturn cache.m[stackCacheKey{goid, threadID}]\n}\n\nfunc (cache *stackCache) put(goid int64, threadID int, it *stackIterator, frames []Stackframe) {\n\tcache.m[stackCacheKey{goid, threadID}] = &cachedStack{it, frames}\n}\n\nfunc limitframes(frames []Stackframe, n int) []Stackframe {\n\tif len(frames) < n {\n\t\treturn frames\n\t}\n\treturn frames[:n]\n}\n"
  },
  {
    "path": "pkg/proc/stack_sigtramp.go",
    "content": "package proc\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\n// readSigtrampgoContext reads runtime.sigtrampgo context at the specified address\nfunc (it *stackIterator) readSigtrampgoContext() (*op.DwarfRegisters, error) {\n\tlogger := logflags.DebuggerLogger()\n\tscope := FrameToScope(it.target, it.mem, it.g, 0, it.frame)\n\tbi := it.bi\n\n\tfindvar := func(name string) *Variable {\n\t\tvars, _ := scope.Locals(0, name)\n\t\tfor i := range vars {\n\t\t\tif vars[i].Name == name {\n\t\t\t\treturn vars[i]\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n\n\tderef := func(v *Variable) (uint64, error) {\n\t\tv.loadValue(loadSingleValue)\n\t\tif v.Unreadable != nil {\n\t\t\treturn 0, fmt.Errorf(\"could not dereference %s: %v\", v.Name, v.Unreadable)\n\t\t}\n\t\tif len(v.Children) < 1 {\n\t\t\treturn 0, fmt.Errorf(\"could not dereference %s (no children?)\", v.Name)\n\t\t}\n\t\tlogger.Debugf(\"%s address is %#x\", v.Name, v.Children[0].Addr)\n\t\treturn v.Children[0].Addr, nil\n\t}\n\n\tgetctxaddr := func() (uint64, error) {\n\t\tctxvar := findvar(\"ctx\")\n\t\tif ctxvar == nil {\n\t\t\treturn 0, errors.New(\"ctx variable not found\")\n\t\t}\n\t\taddr, err := deref(ctxvar)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\treturn addr, nil\n\t}\n\n\tswitch bi.GOOS {\n\tcase \"windows\":\n\t\tepvar := findvar(\"ep\")\n\t\tif epvar == nil {\n\t\t\treturn nil, errors.New(\"ep variable not found\")\n\t\t}\n\t\tepaddr, err := deref(epvar)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch bi.Arch.Name {\n\t\tcase \"amd64\":\n\t\t\treturn sigtrampContextWindowsAMD64(it.mem, epaddr)\n\t\tcase \"arm64\":\n\t\t\treturn sigtrampContextWindowsARM64(it.mem, epaddr)\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"not implemented\")\n\t\t}\n\tcase \"linux\":\n\t\taddr, err := getctxaddr()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch bi.Arch.Name {\n\t\tcase \"386\":\n\t\t\treturn sigtrampContextLinux386(it.mem, addr)\n\t\tcase \"amd64\":\n\t\t\treturn sigtrampContextLinuxAMD64(it.mem, addr)\n\t\tcase \"arm64\":\n\t\t\treturn sigtrampContextLinuxARM64(it.mem, addr)\n\t\tcase \"loong64\":\n\t\t\treturn sigtrampContextLinuxLOONG64(it.mem, addr)\n\t\tcase \"riscv64\":\n\t\t\treturn sigtrampContextLinuxRISCV64(it.mem, addr)\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"not implemented\")\n\t\t}\n\tcase \"freebsd\":\n\t\taddr, err := getctxaddr()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn sigtrampContextFreebsdAMD64(it.mem, addr)\n\tcase \"darwin\":\n\t\taddr, err := getctxaddr()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch bi.Arch.Name {\n\t\tcase \"amd64\":\n\t\t\treturn sigtrampContextDarwinAMD64(it.mem, addr)\n\t\tcase \"arm64\":\n\t\t\treturn sigtrampContextDarwinARM64(it.mem, addr)\n\t\tdefault:\n\t\t\treturn nil, errors.New(\"not implemented\")\n\t\t}\n\tdefault:\n\t\treturn nil, errors.New(\"not implemented\")\n\t}\n}\n\nfunc sigtrampContextLinuxAMD64(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\ttype stackt struct {\n\t\tss_sp     uint64\n\t\tss_flags  int32\n\t\tpad_cgo_0 [4]byte\n\t\tss_size   uintptr\n\t}\n\n\ttype mcontext struct {\n\t\tr8          uint64\n\t\tr9          uint64\n\t\tr10         uint64\n\t\tr11         uint64\n\t\tr12         uint64\n\t\tr13         uint64\n\t\tr14         uint64\n\t\tr15         uint64\n\t\trdi         uint64\n\t\trsi         uint64\n\t\trbp         uint64\n\t\trbx         uint64\n\t\trdx         uint64\n\t\trax         uint64\n\t\trcx         uint64\n\t\trsp         uint64\n\t\trip         uint64\n\t\teflags      uint64\n\t\tcs          uint16\n\t\tgs          uint16\n\t\tfs          uint16\n\t\t__pad0      uint16\n\t\terr         uint64\n\t\ttrapno      uint64\n\t\toldmask     uint64\n\t\tcr2         uint64\n\t\tfpstate     uint64 // pointer\n\t\t__reserved1 [8]uint64\n\t}\n\n\ttype fpxreg struct {\n\t\tsignificand [4]uint16\n\t\texponent    uint16\n\t\tpadding     [3]uint16\n\t}\n\n\ttype fpstate struct {\n\t\tcwd       uint16\n\t\tswd       uint16\n\t\tftw       uint16\n\t\tfop       uint16\n\t\trip       uint64\n\t\trdp       uint64\n\t\tmxcsr     uint32\n\t\tmxcr_mask uint32\n\t\t_st       [8]fpxreg\n\t\t_xmm      [16][4]uint32\n\t\tpadding   [24]uint32\n\t}\n\n\ttype ucontext struct {\n\t\tuc_flags     uint64\n\t\tuc_link      uint64\n\t\tuc_stack     stackt\n\t\tuc_mcontext  mcontext\n\t\tuc_sigmask   [16]uint64\n\t\t__fpregs_mem fpstate\n\t}\n\n\tbuf := make([]byte, unsafe.Sizeof(ucontext{}))\n\t_, err := mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tregs := &(((*ucontext)(unsafe.Pointer(&buf[0]))).uc_mcontext)\n\tdregs := make([]*op.DwarfRegister, regnum.AMD64MaxRegNum()+1)\n\tdregs[regnum.AMD64_R8] = op.DwarfRegisterFromUint64(regs.r8)\n\tdregs[regnum.AMD64_R9] = op.DwarfRegisterFromUint64(regs.r9)\n\tdregs[regnum.AMD64_R10] = op.DwarfRegisterFromUint64(regs.r10)\n\tdregs[regnum.AMD64_R11] = op.DwarfRegisterFromUint64(regs.r11)\n\tdregs[regnum.AMD64_R12] = op.DwarfRegisterFromUint64(regs.r12)\n\tdregs[regnum.AMD64_R13] = op.DwarfRegisterFromUint64(regs.r13)\n\tdregs[regnum.AMD64_R14] = op.DwarfRegisterFromUint64(regs.r14)\n\tdregs[regnum.AMD64_R15] = op.DwarfRegisterFromUint64(regs.r15)\n\tdregs[regnum.AMD64_Rdi] = op.DwarfRegisterFromUint64(regs.rdi)\n\tdregs[regnum.AMD64_Rsi] = op.DwarfRegisterFromUint64(regs.rsi)\n\tdregs[regnum.AMD64_Rbp] = op.DwarfRegisterFromUint64(regs.rbp)\n\tdregs[regnum.AMD64_Rbx] = op.DwarfRegisterFromUint64(regs.rbx)\n\tdregs[regnum.AMD64_Rdx] = op.DwarfRegisterFromUint64(regs.rdx)\n\tdregs[regnum.AMD64_Rax] = op.DwarfRegisterFromUint64(regs.rax)\n\tdregs[regnum.AMD64_Rcx] = op.DwarfRegisterFromUint64(regs.rcx)\n\tdregs[regnum.AMD64_Rsp] = op.DwarfRegisterFromUint64(regs.rsp)\n\tdregs[regnum.AMD64_Rip] = op.DwarfRegisterFromUint64(regs.rip)\n\tdregs[regnum.AMD64_Rflags] = op.DwarfRegisterFromUint64(regs.eflags)\n\tdregs[regnum.AMD64_Cs] = op.DwarfRegisterFromUint64(uint64(regs.cs))\n\tdregs[regnum.AMD64_Gs] = op.DwarfRegisterFromUint64(uint64(regs.gs))\n\tdregs[regnum.AMD64_Fs] = op.DwarfRegisterFromUint64(uint64(regs.fs))\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.AMD64_Rip, regnum.AMD64_Rsp, regnum.AMD64_Rbp, 0), nil\n}\n\nfunc sigtrampContextLinux386(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\ttype sigcontext struct {\n\t\tgs            uint16\n\t\t__gsh         uint16\n\t\tfs            uint16\n\t\t__fsh         uint16\n\t\tes            uint16\n\t\t__esh         uint16\n\t\tds            uint16\n\t\t__dsh         uint16\n\t\tedi           uint32\n\t\tesi           uint32\n\t\tebp           uint32\n\t\tesp           uint32\n\t\tebx           uint32\n\t\tedx           uint32\n\t\tecx           uint32\n\t\teax           uint32\n\t\ttrapno        uint32\n\t\terr           uint32\n\t\teip           uint32\n\t\tcs            uint16\n\t\t__csh         uint16\n\t\teflags        uint32\n\t\tesp_at_signal uint32\n\t\tss            uint16\n\t\t__ssh         uint16\n\t\tfpstate       uint32 // pointer\n\t\toldmask       uint32\n\t\tcr2           uint32\n\t}\n\n\ttype stackt struct {\n\t\tss_sp    uint32 // pointer\n\t\tss_flags int32\n\t\tss_size  uint32\n\t}\n\n\ttype ucontext struct {\n\t\tuc_flags    uint32\n\t\tuc_link     uint32 // pointer\n\t\tuc_stack    stackt\n\t\tuc_mcontext sigcontext\n\t\tuc_sigmask  uint32\n\t}\n\n\tbuf := make([]byte, unsafe.Sizeof(ucontext{}))\n\t_, err := mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tregs := &(((*ucontext)(unsafe.Pointer(&buf[0]))).uc_mcontext)\n\tdregs := make([]*op.DwarfRegister, regnum.I386MaxRegNum()+1)\n\tdregs[regnum.I386_Gs] = op.DwarfRegisterFromUint64(uint64(regs.gs))\n\tdregs[regnum.I386_Fs] = op.DwarfRegisterFromUint64(uint64(regs.fs))\n\tdregs[regnum.I386_Es] = op.DwarfRegisterFromUint64(uint64(regs.es))\n\tdregs[regnum.I386_Ds] = op.DwarfRegisterFromUint64(uint64(regs.ds))\n\tdregs[regnum.I386_Edi] = op.DwarfRegisterFromUint64(uint64(regs.edi))\n\tdregs[regnum.I386_Esi] = op.DwarfRegisterFromUint64(uint64(regs.esi))\n\tdregs[regnum.I386_Ebp] = op.DwarfRegisterFromUint64(uint64(regs.ebp))\n\tdregs[regnum.I386_Esp] = op.DwarfRegisterFromUint64(uint64(regs.esp))\n\tdregs[regnum.I386_Ebx] = op.DwarfRegisterFromUint64(uint64(regs.ebx))\n\tdregs[regnum.I386_Edx] = op.DwarfRegisterFromUint64(uint64(regs.edx))\n\tdregs[regnum.I386_Ecx] = op.DwarfRegisterFromUint64(uint64(regs.ecx))\n\tdregs[regnum.I386_Eax] = op.DwarfRegisterFromUint64(uint64(regs.eax))\n\tdregs[regnum.I386_Eip] = op.DwarfRegisterFromUint64(uint64(regs.eip))\n\tdregs[regnum.I386_Cs] = op.DwarfRegisterFromUint64(uint64(regs.cs))\n\tdregs[regnum.I386_Ss] = op.DwarfRegisterFromUint64(uint64(regs.ss))\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.I386_Eip, regnum.I386_Esp, regnum.I386_Ebp, 0), nil\n}\n\nfunc sigtrampContextLinuxARM64(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\ttype sigcontext struct {\n\t\tfault_address uint64\n\t\tregs          [31]uint64\n\t\tsp            uint64\n\t\tpc            uint64\n\t\tpstate        uint64\n\t\t_pad          [8]byte\n\t\t__reserved    [4096]byte\n\t}\n\n\ttype stackt struct {\n\t\tss_sp     uint64 // pointer\n\t\tss_flags  int32\n\t\tpad_cgo_0 [4]byte\n\t\tss_size   uint64\n\t}\n\n\ttype ucontext struct {\n\t\tuc_flags    uint64\n\t\tuc_link     uint64 // pointer\n\t\tuc_stack    stackt\n\t\tuc_sigmask  uint64\n\t\t_pad        [(1024 - 64) / 8]byte\n\t\t_pad2       [8]byte\n\t\tuc_mcontext sigcontext\n\t}\n\n\tbuf := make([]byte, unsafe.Sizeof(ucontext{}))\n\t_, err := mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tregs := &(((*ucontext)(unsafe.Pointer(&buf[0]))).uc_mcontext)\n\tdregs := make([]*op.DwarfRegister, regnum.ARM64MaxRegNum()+1)\n\tfor i := range regs.regs {\n\t\tdregs[regnum.ARM64_X0+i] = op.DwarfRegisterFromUint64(regs.regs[i])\n\t}\n\tdregs[regnum.ARM64_SP] = op.DwarfRegisterFromUint64(regs.sp)\n\tdregs[regnum.ARM64_PC] = op.DwarfRegisterFromUint64(regs.pc)\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.ARM64_PC, regnum.ARM64_SP, regnum.ARM64_BP, regnum.ARM64_LR), nil\n}\n\nfunc sigtrampContextLinuxLOONG64(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\t//The struct get from src/runtime/defs_linux_loong64.go\n\ttype usigset struct {\n\t\tval [16]uint64\n\t}\n\n\ttype stackt struct {\n\t\tss_sp     *byte\n\t\tss_flags  int32\n\t\tpad_cgo_0 [4]byte\n\t\tss_size   uintptr\n\t}\n\n\ttype sigcontext struct {\n\t\tsc_pc         uint64\n\t\tsc_regs       [32]uint64\n\t\tsc_flags      uint32\n\t\tsc_pad0       [1]uint32\n\t\tsc_extcontext [0]uint64\n\t}\n\n\ttype ucontext struct {\n\t\tuc_flags     uint64\n\t\tuc_link      *ucontext\n\t\tuc_stack     stackt\n\t\tuc_sigmask   usigset\n\t\tuc_x_unused  [0]uint8\n\t\tuc_pad_cgo_0 [8]byte\n\t\tuc_mcontext  sigcontext\n\t}\n\n\tbuf := make([]byte, unsafe.Sizeof(ucontext{}))\n\t_, err := mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tregs := &(((*ucontext)(unsafe.Pointer(&buf[0]))).uc_mcontext)\n\tdregs := make([]*op.DwarfRegister, regnum.LOONG64MaxRegNum()+1)\n\tfor i := regnum.LOONG64_R0; i <= regnum.LOONG64_R31; i++ {\n\t\tdregs[regnum.LOONG64_R0+i] = op.DwarfRegisterFromUint64(regs.sc_regs[i])\n\t}\n\tdregs[regnum.LOONG64_PC] = op.DwarfRegisterFromUint64(regs.sc_pc)\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.LOONG64_PC, regnum.LOONG64_SP, regnum.LOONG64_FP, regnum.LOONG64_LR), nil\n}\n\nfunc sigtrampContextLinuxRISCV64(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\t// Structs come from src/runtime/defs_linux_riscv64.go\n\ttype user_regs_struct struct {\n\t\tpc  uint64\n\t\tra  uint64\n\t\tsp  uint64\n\t\tgp  uint64\n\t\ttp  uint64\n\t\tt0  uint64\n\t\tt1  uint64\n\t\tt2  uint64\n\t\ts0  uint64\n\t\ts1  uint64\n\t\ta0  uint64\n\t\ta1  uint64\n\t\ta2  uint64\n\t\ta3  uint64\n\t\ta4  uint64\n\t\ta5  uint64\n\t\ta6  uint64\n\t\ta7  uint64\n\t\ts2  uint64\n\t\ts3  uint64\n\t\ts4  uint64\n\t\ts5  uint64\n\t\ts6  uint64\n\t\ts7  uint64\n\t\ts8  uint64\n\t\ts9  uint64\n\t\ts10 uint64\n\t\ts11 uint64\n\t\tt3  uint64\n\t\tt4  uint64\n\t\tt5  uint64\n\t\tt6  uint64\n\t}\n\n\ttype user_fpregs_struct struct {\n\t\tf [528]byte\n\t}\n\n\ttype usigset struct {\n\t\tus_x__val [16]uint64\n\t}\n\n\ttype sigcontext struct {\n\t\tsc_regs   user_regs_struct\n\t\tsc_fpregs user_fpregs_struct\n\t}\n\n\ttype stackt struct {\n\t\tss_sp    *byte\n\t\tss_flags int32\n\t\tss_size  uintptr\n\t}\n\n\ttype ucontext struct {\n\t\tuc_flags     uint64\n\t\tuc_link      *ucontext\n\t\tuc_stack     stackt\n\t\tuc_sigmask   usigset\n\t\tuc_x__unused [0]uint8\n\t\tuc_pad_cgo_0 [8]byte\n\t\tuc_mcontext  sigcontext\n\t}\n\n\tbuf := make([]byte, unsafe.Sizeof(ucontext{}))\n\t_, err := mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tregs := &(((*ucontext)(unsafe.Pointer(&buf[0]))).uc_mcontext)\n\tdregs := make([]*op.DwarfRegister, regnum.RISCV64MaxRegNum()+1)\n\tdregs[regnum.RISCV64_PC] = op.DwarfRegisterFromUint64(regs.sc_regs.pc)\n\tdregs[regnum.RISCV64_LR] = op.DwarfRegisterFromUint64(regs.sc_regs.ra)\n\tdregs[regnum.RISCV64_SP] = op.DwarfRegisterFromUint64(regs.sc_regs.sp)\n\tdregs[regnum.RISCV64_GP] = op.DwarfRegisterFromUint64(regs.sc_regs.gp)\n\tdregs[regnum.RISCV64_TP] = op.DwarfRegisterFromUint64(regs.sc_regs.tp)\n\tdregs[regnum.RISCV64_T0] = op.DwarfRegisterFromUint64(regs.sc_regs.t0)\n\tdregs[regnum.RISCV64_T1] = op.DwarfRegisterFromUint64(regs.sc_regs.t1)\n\tdregs[regnum.RISCV64_T2] = op.DwarfRegisterFromUint64(regs.sc_regs.t2)\n\tdregs[regnum.RISCV64_FP] = op.DwarfRegisterFromUint64(regs.sc_regs.s0)\n\tdregs[regnum.RISCV64_S1] = op.DwarfRegisterFromUint64(regs.sc_regs.s1)\n\tdregs[regnum.RISCV64_A0] = op.DwarfRegisterFromUint64(regs.sc_regs.a0)\n\tdregs[regnum.RISCV64_A1] = op.DwarfRegisterFromUint64(regs.sc_regs.a1)\n\tdregs[regnum.RISCV64_A2] = op.DwarfRegisterFromUint64(regs.sc_regs.a2)\n\tdregs[regnum.RISCV64_A3] = op.DwarfRegisterFromUint64(regs.sc_regs.a3)\n\tdregs[regnum.RISCV64_A4] = op.DwarfRegisterFromUint64(regs.sc_regs.a4)\n\tdregs[regnum.RISCV64_A5] = op.DwarfRegisterFromUint64(regs.sc_regs.a5)\n\tdregs[regnum.RISCV64_A6] = op.DwarfRegisterFromUint64(regs.sc_regs.a6)\n\tdregs[regnum.RISCV64_A7] = op.DwarfRegisterFromUint64(regs.sc_regs.a7)\n\tdregs[regnum.RISCV64_S2] = op.DwarfRegisterFromUint64(regs.sc_regs.s2)\n\tdregs[regnum.RISCV64_S3] = op.DwarfRegisterFromUint64(regs.sc_regs.s3)\n\tdregs[regnum.RISCV64_S4] = op.DwarfRegisterFromUint64(regs.sc_regs.s4)\n\tdregs[regnum.RISCV64_S5] = op.DwarfRegisterFromUint64(regs.sc_regs.s5)\n\tdregs[regnum.RISCV64_S6] = op.DwarfRegisterFromUint64(regs.sc_regs.s6)\n\tdregs[regnum.RISCV64_S7] = op.DwarfRegisterFromUint64(regs.sc_regs.s7)\n\tdregs[regnum.RISCV64_S8] = op.DwarfRegisterFromUint64(regs.sc_regs.s8)\n\tdregs[regnum.RISCV64_S9] = op.DwarfRegisterFromUint64(regs.sc_regs.s9)\n\tdregs[regnum.RISCV64_S10] = op.DwarfRegisterFromUint64(regs.sc_regs.s10)\n\tdregs[regnum.RISCV64_S11] = op.DwarfRegisterFromUint64(regs.sc_regs.s11)\n\tdregs[regnum.RISCV64_T3] = op.DwarfRegisterFromUint64(regs.sc_regs.t3)\n\tdregs[regnum.RISCV64_T4] = op.DwarfRegisterFromUint64(regs.sc_regs.t4)\n\tdregs[regnum.RISCV64_T5] = op.DwarfRegisterFromUint64(regs.sc_regs.t5)\n\tdregs[regnum.RISCV64_T6] = op.DwarfRegisterFromUint64(regs.sc_regs.t6)\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.RISCV64_PC, regnum.RISCV64_SP, regnum.RISCV64_FP, regnum.RISCV64_LR), nil\n}\n\nfunc sigtrampContextFreebsdAMD64(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\ttype mcontext struct {\n\t\tmc_onstack       uint64\n\t\tmc_rdi           uint64\n\t\tmc_rsi           uint64\n\t\tmc_rdx           uint64\n\t\tmc_rcx           uint64\n\t\tmc_r8            uint64\n\t\tmc_r9            uint64\n\t\tmc_rax           uint64\n\t\tmc_rbx           uint64\n\t\tmc_rbp           uint64\n\t\tmc_r10           uint64\n\t\tmc_r11           uint64\n\t\tmc_r12           uint64\n\t\tmc_r13           uint64\n\t\tmc_r14           uint64\n\t\tmc_r15           uint64\n\t\tmc_trapno        uint32\n\t\tmc_fs            uint16\n\t\tmc_gs            uint16\n\t\tmc_addr          uint64\n\t\tmc_flags         uint32\n\t\tmc_es            uint16\n\t\tmc_ds            uint16\n\t\tmc_err           uint64\n\t\tmc_rip           uint64\n\t\tmc_cs            uint64\n\t\tmc_rflags        uint64\n\t\tmc_rsp           uint64\n\t\tmc_ss            uint64\n\t\tmc_len           uint64\n\t\tmc_fpformat      uint64\n\t\tmc_ownedfp       uint64\n\t\tmc_fpstate       [64]uint64\n\t\tmc_fsbase        uint64\n\t\tmc_gsbase        uint64\n\t\tmc_xfpustate     uint64\n\t\tmc_xfpustate_len uint64\n\t\tmc_spare         [4]uint64\n\t}\n\n\ttype ucontext struct {\n\t\tuc_sigmask struct {\n\t\t\t__bits [4]uint32\n\t\t}\n\t\tuc_mcontext mcontext\n\t\tuc_link     uint64 // pointer\n\t\tuc_stack    struct {\n\t\t\tss_sp     uintptr\n\t\t\tss_size   uintptr\n\t\t\tss_flags  int32\n\t\t\tpad_cgo_0 [4]byte\n\t\t}\n\t\tuc_flags  int32\n\t\t__spare__ [4]int32\n\t\tpad_cgo_0 [12]byte\n\t}\n\n\tbuf := make([]byte, unsafe.Sizeof(ucontext{}))\n\t_, err := mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmctxt := ((*ucontext)(unsafe.Pointer(&buf[0]))).uc_mcontext\n\n\tdregs := make([]*op.DwarfRegister, regnum.AMD64MaxRegNum()+1)\n\n\tdregs[regnum.AMD64_Rdi] = op.DwarfRegisterFromUint64(mctxt.mc_rdi)\n\tdregs[regnum.AMD64_Rsi] = op.DwarfRegisterFromUint64(mctxt.mc_rsi)\n\tdregs[regnum.AMD64_Rdx] = op.DwarfRegisterFromUint64(mctxt.mc_rdx)\n\tdregs[regnum.AMD64_Rcx] = op.DwarfRegisterFromUint64(mctxt.mc_rcx)\n\tdregs[regnum.AMD64_R8] = op.DwarfRegisterFromUint64(mctxt.mc_r8)\n\tdregs[regnum.AMD64_R9] = op.DwarfRegisterFromUint64(mctxt.mc_r9)\n\tdregs[regnum.AMD64_Rax] = op.DwarfRegisterFromUint64(mctxt.mc_rax)\n\tdregs[regnum.AMD64_Rbx] = op.DwarfRegisterFromUint64(mctxt.mc_rbx)\n\tdregs[regnum.AMD64_Rbp] = op.DwarfRegisterFromUint64(mctxt.mc_rbp)\n\tdregs[regnum.AMD64_R10] = op.DwarfRegisterFromUint64(mctxt.mc_r10)\n\tdregs[regnum.AMD64_R11] = op.DwarfRegisterFromUint64(mctxt.mc_r11)\n\tdregs[regnum.AMD64_R12] = op.DwarfRegisterFromUint64(mctxt.mc_r12)\n\tdregs[regnum.AMD64_R13] = op.DwarfRegisterFromUint64(mctxt.mc_r13)\n\tdregs[regnum.AMD64_R14] = op.DwarfRegisterFromUint64(mctxt.mc_r14)\n\tdregs[regnum.AMD64_R15] = op.DwarfRegisterFromUint64(mctxt.mc_r15)\n\tdregs[regnum.AMD64_Fs] = op.DwarfRegisterFromUint64(uint64(mctxt.mc_fs))\n\tdregs[regnum.AMD64_Gs] = op.DwarfRegisterFromUint64(uint64(mctxt.mc_gs))\n\tdregs[regnum.AMD64_Es] = op.DwarfRegisterFromUint64(uint64(mctxt.mc_es))\n\tdregs[regnum.AMD64_Ds] = op.DwarfRegisterFromUint64(uint64(mctxt.mc_ds))\n\tdregs[regnum.AMD64_Rip] = op.DwarfRegisterFromUint64(mctxt.mc_rip)\n\tdregs[regnum.AMD64_Cs] = op.DwarfRegisterFromUint64(mctxt.mc_cs)\n\tdregs[regnum.AMD64_Rflags] = op.DwarfRegisterFromUint64(mctxt.mc_rflags)\n\tdregs[regnum.AMD64_Rsp] = op.DwarfRegisterFromUint64(mctxt.mc_rsp)\n\tdregs[regnum.AMD64_Ss] = op.DwarfRegisterFromUint64(mctxt.mc_ss)\n\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.AMD64_Rip, regnum.AMD64_Rsp, regnum.AMD64_Rbp, 0), nil\n}\n\nfunc sigtrampContextFromExceptionPointers(mem MemoryReader, addr uint64) (uint64, error) {\n\ttype exceptionpointers struct {\n\t\trecord  uint64 // pointer\n\t\tcontext uint64 // pointer\n\t}\n\tbuf := make([]byte, unsafe.Sizeof(exceptionpointers{}))\n\t_, err := mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn ((*exceptionpointers)(unsafe.Pointer(&buf[0]))).context, nil\n}\n\nfunc sigtrampContextWindowsAMD64(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\ttype context struct {\n\t\tp1home         uint64\n\t\tp2home         uint64\n\t\tp3home         uint64\n\t\tp4home         uint64\n\t\tp5home         uint64\n\t\tp6home         uint64\n\t\tcontextflags   uint32\n\t\tmxcsr          uint32\n\t\tsegcs          uint16\n\t\tsegds          uint16\n\t\tseges          uint16\n\t\tsegfs          uint16\n\t\tseggs          uint16\n\t\tsegss          uint16\n\t\teflags         uint32\n\t\tdr0            uint64\n\t\tdr1            uint64\n\t\tdr2            uint64\n\t\tdr3            uint64\n\t\tdr6            uint64\n\t\tdr7            uint64\n\t\trax            uint64\n\t\trcx            uint64\n\t\trdx            uint64\n\t\trbx            uint64\n\t\trsp            uint64\n\t\trbp            uint64\n\t\trsi            uint64\n\t\trdi            uint64\n\t\tr8             uint64\n\t\tr9             uint64\n\t\tr10            uint64\n\t\tr11            uint64\n\t\tr12            uint64\n\t\tr13            uint64\n\t\tr14            uint64\n\t\tr15            uint64\n\t\trip            uint64\n\t\tanon0          [512]byte\n\t\tvectorregister [26]struct {\n\t\t\tlow  uint64\n\t\t\thigh int64\n\t\t}\n\t\tvectorcontrol        uint64\n\t\tdebugcontrol         uint64\n\t\tlastbranchtorip      uint64\n\t\tlastbranchfromrip    uint64\n\t\tlastexceptiontorip   uint64\n\t\tlastexceptionfromrip uint64\n\t}\n\n\tctxtaddr, err := sigtrampContextFromExceptionPointers(mem, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbuf := make([]byte, unsafe.Sizeof(context{}))\n\t_, err = mem.ReadMemory(buf, ctxtaddr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not read context: %v\", err)\n\t}\n\tctxt := (*context)(unsafe.Pointer(&buf[0]))\n\n\tdregs := make([]*op.DwarfRegister, regnum.AMD64MaxRegNum()+1)\n\n\tdregs[regnum.AMD64_Cs] = op.DwarfRegisterFromUint64(uint64(ctxt.segcs))\n\tdregs[regnum.AMD64_Ds] = op.DwarfRegisterFromUint64(uint64(ctxt.segds))\n\tdregs[regnum.AMD64_Es] = op.DwarfRegisterFromUint64(uint64(ctxt.seges))\n\tdregs[regnum.AMD64_Fs] = op.DwarfRegisterFromUint64(uint64(ctxt.segfs))\n\tdregs[regnum.AMD64_Fs] = op.DwarfRegisterFromUint64(uint64(ctxt.seggs))\n\tdregs[regnum.AMD64_Ss] = op.DwarfRegisterFromUint64(uint64(ctxt.segss))\n\tdregs[regnum.AMD64_Rflags] = op.DwarfRegisterFromUint64(uint64(ctxt.eflags))\n\tdregs[regnum.AMD64_Rax] = op.DwarfRegisterFromUint64(ctxt.rax)\n\tdregs[regnum.AMD64_Rcx] = op.DwarfRegisterFromUint64(ctxt.rcx)\n\tdregs[regnum.AMD64_Rdx] = op.DwarfRegisterFromUint64(ctxt.rdx)\n\tdregs[regnum.AMD64_Rbx] = op.DwarfRegisterFromUint64(ctxt.rbx)\n\tdregs[regnum.AMD64_Rsp] = op.DwarfRegisterFromUint64(ctxt.rsp)\n\tdregs[regnum.AMD64_Rbp] = op.DwarfRegisterFromUint64(ctxt.rbp)\n\tdregs[regnum.AMD64_Rsi] = op.DwarfRegisterFromUint64(ctxt.rsi)\n\tdregs[regnum.AMD64_Rdi] = op.DwarfRegisterFromUint64(ctxt.rdi)\n\tdregs[regnum.AMD64_R8] = op.DwarfRegisterFromUint64(ctxt.r8)\n\tdregs[regnum.AMD64_R9] = op.DwarfRegisterFromUint64(ctxt.r9)\n\tdregs[regnum.AMD64_R10] = op.DwarfRegisterFromUint64(ctxt.r10)\n\tdregs[regnum.AMD64_R11] = op.DwarfRegisterFromUint64(ctxt.r11)\n\tdregs[regnum.AMD64_R12] = op.DwarfRegisterFromUint64(ctxt.r12)\n\tdregs[regnum.AMD64_R13] = op.DwarfRegisterFromUint64(ctxt.r13)\n\tdregs[regnum.AMD64_R14] = op.DwarfRegisterFromUint64(ctxt.r14)\n\tdregs[regnum.AMD64_R15] = op.DwarfRegisterFromUint64(ctxt.r15)\n\tdregs[regnum.AMD64_Rip] = op.DwarfRegisterFromUint64(ctxt.rip)\n\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.AMD64_Rip, regnum.AMD64_Rsp, regnum.AMD64_Rbp, 0), nil\n}\n\nfunc sigtrampContextWindowsARM64(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\ttype context struct {\n\t\tcontextflags uint32\n\t\tcpsr         uint32\n\t\tx            [31]uint64 // fp is x[29], lr is x[30]\n\t\txsp          uint64\n\t\tpc           uint64\n\t\tv            [32]struct {\n\t\t\tlow  uint64\n\t\t\thigh int64\n\t\t}\n\t\tfpcr uint32\n\t\tfpsr uint32\n\t\tbcr  [8]uint32\n\t\tbvr  [8]uint64\n\t\twcr  [2]uint32\n\t\twvr  [2]uint64\n\t}\n\n\tctxtaddr, err := sigtrampContextFromExceptionPointers(mem, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tbuf := make([]byte, unsafe.Sizeof(context{}))\n\t_, err = mem.ReadMemory(buf, ctxtaddr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not read context: %v\", err)\n\t}\n\tctxt := (*context)(unsafe.Pointer(&buf[0]))\n\n\tdregs := make([]*op.DwarfRegister, regnum.ARM64MaxRegNum()+1)\n\tfor i := range ctxt.x {\n\t\tdregs[regnum.ARM64_X0+i] = op.DwarfRegisterFromUint64(ctxt.x[i])\n\t}\n\tdregs[regnum.ARM64_SP] = op.DwarfRegisterFromUint64(ctxt.xsp)\n\tdregs[regnum.ARM64_PC] = op.DwarfRegisterFromUint64(ctxt.pc)\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.ARM64_PC, regnum.ARM64_SP, regnum.ARM64_BP, regnum.ARM64_LR), nil\n}\n\nfunc sigtrampContextDarwinAMD64(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\ttype ucontext struct {\n\t\tuc_onstack int32\n\t\tuc_sigmask uint32\n\t\tuc_stack   struct {\n\t\t\tss_sp     uint64 // pointer\n\t\t\tss_size   uintptr\n\t\t\tss_flags  int32\n\t\t\tpad_cgo_0 [4]byte\n\t\t}\n\t\tuc_link     uint64 // pointer\n\t\tuc_mcsize   uint64\n\t\tuc_mcontext uint64 // pointer\n\t}\n\n\ttype regmmst struct {\n\t\tmmst_reg  [10]int8\n\t\tmmst_rsrv [6]int8\n\t}\n\n\ttype regxmm struct {\n\t\txmm_reg [16]int8\n\t}\n\n\ttype floatstate64 struct {\n\t\tfpu_reserved  [2]int32\n\t\tfpu_fcw       [2]byte\n\t\tfpu_fsw       [2]byte\n\t\tfpu_ftw       uint8\n\t\tfpu_rsrv1     uint8\n\t\tfpu_fop       uint16\n\t\tfpu_ip        uint32\n\t\tfpu_cs        uint16\n\t\tfpu_rsrv2     uint16\n\t\tfpu_dp        uint32\n\t\tfpu_ds        uint16\n\t\tfpu_rsrv3     uint16\n\t\tfpu_mxcsr     uint32\n\t\tfpu_mxcsrmask uint32\n\t\tfpu_stmm0     regmmst\n\t\tfpu_stmm1     regmmst\n\t\tfpu_stmm2     regmmst\n\t\tfpu_stmm3     regmmst\n\t\tfpu_stmm4     regmmst\n\t\tfpu_stmm5     regmmst\n\t\tfpu_stmm6     regmmst\n\t\tfpu_stmm7     regmmst\n\t\tfpu_xmm0      regxmm\n\t\tfpu_xmm1      regxmm\n\t\tfpu_xmm2      regxmm\n\t\tfpu_xmm3      regxmm\n\t\tfpu_xmm4      regxmm\n\t\tfpu_xmm5      regxmm\n\t\tfpu_xmm6      regxmm\n\t\tfpu_xmm7      regxmm\n\t\tfpu_xmm8      regxmm\n\t\tfpu_xmm9      regxmm\n\t\tfpu_xmm10     regxmm\n\t\tfpu_xmm11     regxmm\n\t\tfpu_xmm12     regxmm\n\t\tfpu_xmm13     regxmm\n\t\tfpu_xmm14     regxmm\n\t\tfpu_xmm15     regxmm\n\t\tfpu_rsrv4     [96]int8\n\t\tfpu_reserved1 int32\n\t}\n\n\ttype regs64 struct {\n\t\trax    uint64\n\t\trbx    uint64\n\t\trcx    uint64\n\t\trdx    uint64\n\t\trdi    uint64\n\t\trsi    uint64\n\t\trbp    uint64\n\t\trsp    uint64\n\t\tr8     uint64\n\t\tr9     uint64\n\t\tr10    uint64\n\t\tr11    uint64\n\t\tr12    uint64\n\t\tr13    uint64\n\t\tr14    uint64\n\t\tr15    uint64\n\t\trip    uint64\n\t\trflags uint64\n\t\tcs     uint64\n\t\tfs     uint64\n\t\tgs     uint64\n\t}\n\n\ttype mcontext64 struct {\n\t\tes struct {\n\t\t\ttrapno     uint16\n\t\t\tcpu        uint16\n\t\t\terr        uint32\n\t\t\tfaultvaddr uint64\n\t\t}\n\t\tss        regs64\n\t\tfs        floatstate64\n\t\tpad_cgo_0 [4]byte\n\t}\n\n\tbuf := make([]byte, unsafe.Sizeof(ucontext{}))\n\t_, err := mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmctxtaddr := ((*ucontext)(unsafe.Pointer(&buf[0]))).uc_mcontext\n\n\tbuf = make([]byte, unsafe.Sizeof(mcontext64{}))\n\t_, err = mem.ReadMemory(buf, mctxtaddr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tss := ((*mcontext64)(unsafe.Pointer(&buf[0]))).ss\n\tdregs := make([]*op.DwarfRegister, regnum.AMD64MaxRegNum()+1)\n\tdregs[regnum.AMD64_Rax] = op.DwarfRegisterFromUint64(ss.rax)\n\tdregs[regnum.AMD64_Rbx] = op.DwarfRegisterFromUint64(ss.rbx)\n\tdregs[regnum.AMD64_Rcx] = op.DwarfRegisterFromUint64(ss.rcx)\n\tdregs[regnum.AMD64_Rdx] = op.DwarfRegisterFromUint64(ss.rdx)\n\tdregs[regnum.AMD64_Rdi] = op.DwarfRegisterFromUint64(ss.rdi)\n\tdregs[regnum.AMD64_Rsi] = op.DwarfRegisterFromUint64(ss.rsi)\n\tdregs[regnum.AMD64_Rbp] = op.DwarfRegisterFromUint64(ss.rbp)\n\tdregs[regnum.AMD64_Rsp] = op.DwarfRegisterFromUint64(ss.rsp)\n\tdregs[regnum.AMD64_R8] = op.DwarfRegisterFromUint64(ss.r8)\n\tdregs[regnum.AMD64_R9] = op.DwarfRegisterFromUint64(ss.r9)\n\tdregs[regnum.AMD64_R10] = op.DwarfRegisterFromUint64(ss.r10)\n\tdregs[regnum.AMD64_R11] = op.DwarfRegisterFromUint64(ss.r11)\n\tdregs[regnum.AMD64_R12] = op.DwarfRegisterFromUint64(ss.r12)\n\tdregs[regnum.AMD64_R13] = op.DwarfRegisterFromUint64(ss.r13)\n\tdregs[regnum.AMD64_R14] = op.DwarfRegisterFromUint64(ss.r14)\n\tdregs[regnum.AMD64_R15] = op.DwarfRegisterFromUint64(ss.r15)\n\tdregs[regnum.AMD64_Rip] = op.DwarfRegisterFromUint64(ss.rip)\n\tdregs[regnum.AMD64_Rflags] = op.DwarfRegisterFromUint64(ss.rflags)\n\tdregs[regnum.AMD64_Cs] = op.DwarfRegisterFromUint64(ss.cs)\n\tdregs[regnum.AMD64_Fs] = op.DwarfRegisterFromUint64(ss.fs)\n\tdregs[regnum.AMD64_Gs] = op.DwarfRegisterFromUint64(ss.gs)\n\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.AMD64_Rip, regnum.AMD64_Rsp, regnum.AMD64_Rbp, 0), nil\n}\n\nfunc sigtrampContextDarwinARM64(mem MemoryReader, addr uint64) (*op.DwarfRegisters, error) {\n\ttype ucontext struct {\n\t\tuc_onstack int32\n\t\tuc_sigmask uint32\n\t\tuc_stack   struct {\n\t\t\tss_sp     uint64 // pointer\n\t\t\tss_size   uintptr\n\t\t\tss_flags  int32\n\t\t\tpad_cgo_0 [4]byte\n\t\t}\n\t\tuc_link     uint64 // pointer\n\t\tuc_mcsize   uint64\n\t\tuc_mcontext uint64 // pointer\n\t}\n\n\ttype regs64 struct {\n\t\tx     [29]uint64 // registers x0 to x28\n\t\tfp    uint64     // frame register, x29\n\t\tlr    uint64     // link register, x30\n\t\tsp    uint64     // stack pointer, x31\n\t\tpc    uint64     // program counter\n\t\tcpsr  uint32     // current program status register\n\t\t__pad uint32\n\t}\n\n\ttype mcontext64 struct {\n\t\tes struct {\n\t\t\tfar uint64 // virtual fault addr\n\t\t\tesr uint32 // exception syndrome\n\t\t\texc uint32 // number of arm exception taken\n\t\t}\n\t\tss regs64\n\t\tns struct {\n\t\t\tv    [64]uint64 // actually [32]uint128\n\t\t\tfpsr uint32\n\t\t\tfpcr uint32\n\t\t}\n\t}\n\n\tbuf := make([]byte, unsafe.Sizeof(ucontext{}))\n\t_, err := mem.ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tmctxtaddr := ((*ucontext)(unsafe.Pointer(&buf[0]))).uc_mcontext\n\n\tbuf = make([]byte, unsafe.Sizeof(mcontext64{}))\n\t_, err = mem.ReadMemory(buf, mctxtaddr)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tss := ((*mcontext64)(unsafe.Pointer(&buf[0]))).ss\n\tdregs := make([]*op.DwarfRegister, regnum.ARM64MaxRegNum()+1)\n\tfor i := range ss.x {\n\t\tdregs[regnum.ARM64_X0+i] = op.DwarfRegisterFromUint64(ss.x[i])\n\t}\n\tdregs[regnum.ARM64_BP] = op.DwarfRegisterFromUint64(ss.fp)\n\tdregs[regnum.ARM64_LR] = op.DwarfRegisterFromUint64(ss.lr)\n\tdregs[regnum.ARM64_SP] = op.DwarfRegisterFromUint64(ss.sp)\n\tdregs[regnum.ARM64_PC] = op.DwarfRegisterFromUint64(ss.pc)\n\treturn op.NewDwarfRegisters(0, dregs, binary.LittleEndian, regnum.ARM64_PC, regnum.ARM64_SP, regnum.ARM64_BP, regnum.ARM64_LR), nil\n}\n"
  },
  {
    "path": "pkg/proc/stackwatch.go",
    "content": "package proc\n\nimport (\n\t\"errors\"\n\n\t\"github.com/go-delve/delve/pkg/astutil\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\n// This file implements most of the details needed to support stack\n// watchpoints. Some of the remaining details are in breakpoints, along with\n// the code to support non-stack allocated watchpoints.\n//\n// In Go goroutine stacks start small and are frequently resized by the\n// runtime according to the needs of the goroutine.\n// To support this behavior we create a StackResizeBreakpoint, deep inside\n// the Go runtime, when this breakpoint is hit all the stack watchpoints on\n// the goroutine being resized are adjusted for the new stack.\n// Furthermore, we need to detect when a goroutine leaves the stack frame\n// where the variable we are watching was declared, so that we can notify\n// the user that the variable went out of scope and clear the watchpoint.\n//\n// These breakpoints are created by setStackWatchBreakpoints and cleared by\n// clearStackWatchBreakpoints.\n\n// setStackWatchBreakpoints sets the out of scope sentinel breakpoints for\n// watchpoint and a stack resize breakpoint.\nfunc (t *Target) setStackWatchBreakpoints(scope *EvalScope, watchpoint *Breakpoint) error {\n\t// Watchpoint Out-of-scope Sentinel\n\n\twoos := func(_ Thread, _ *Target) (bool, error) {\n\t\tt.Breakpoints().WatchOutOfScope = append(t.Breakpoints().WatchOutOfScope, watchpoint)\n\t\treturn true, nil\n\t}\n\n\ttopframe, retframe, err := topframe(t, scope.g, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsameGCond := sameGoroutineCondition(scope.BinInfo, scope.g, 0)\n\tretFrameCond := astutil.And(sameGCond, frameoffCondition(&retframe))\n\n\tvar deferpc uint64\n\tif topframe.TopmostDefer != nil {\n\t\t_, _, deferfn := topframe.TopmostDefer.DeferredFunc(t)\n\t\tif deferfn != nil {\n\t\t\tvar err error\n\t\t\tdeferpc, err = FirstPCAfterPrologue(t, deferfn, false)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\tif deferpc != 0 && deferpc != topframe.Current.PC {\n\t\tdeferbp, err := t.SetBreakpoint(0, deferpc, WatchOutOfScopeBreakpoint, sameGCond)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdeferbreaklet := deferbp.Breaklets[len(deferbp.Breaklets)-1]\n\t\tdeferbreaklet.checkPanicCall = true\n\t\tdeferbreaklet.watchpoint = watchpoint\n\t\tdeferbreaklet.callback = woos\n\t}\n\n\tretbp, err := t.SetBreakpoint(0, retframe.Current.PC, WatchOutOfScopeBreakpoint, retFrameCond)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tretbreaklet := retbp.Breaklets[len(retbp.Breaklets)-1]\n\tretbreaklet.watchpoint = watchpoint\n\tretbreaklet.callback = woos\n\n\tif recorded, _ := t.recman.Recorded(); recorded && retframe.Current.Fn != nil {\n\t\t// Must also set a breakpoint on the call instruction immediately\n\t\t// preceding retframe.Current.PC, because the watchpoint could also go out\n\t\t// of scope while we are running backwards.\n\t\tcallerText, err := disassemble(t.Memory(), nil, t.Breakpoints(), t.BinInfo(), retframe.Current.Fn.Entry, retframe.Current.Fn.End, false)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor i, instr := range callerText {\n\t\t\tif instr.Loc.PC == retframe.Current.PC && i > 0 {\n\t\t\t\tretbp2, err := t.SetBreakpoint(0, callerText[i-1].Loc.PC, WatchOutOfScopeBreakpoint, retFrameCond)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tretbreaklet2 := retbp2.Breaklets[len(retbp.Breaklets)-1]\n\t\t\t\tretbreaklet2.watchpoint = watchpoint\n\t\t\t\tretbreaklet2.callback = woos\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Stack Resize Sentinel\n\n\tretpcs, err := findRetPC(t, \"runtime.copystack\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(retpcs) > 1 {\n\t\treturn errors.New(\"runtime.copystack has too many return instructions\")\n\t}\n\n\trszbp, err := t.SetBreakpoint(0, retpcs[0], StackResizeBreakpoint, sameGCond)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trszbreaklet := rszbp.Breaklets[len(rszbp.Breaklets)-1]\n\trszbreaklet.watchpoint = watchpoint\n\trszbreaklet.callback = func(th Thread, _ *Target) (bool, error) {\n\t\tadjustStackWatchpoint(t, th, watchpoint)\n\t\treturn false, nil // we never want this breakpoint to be shown to the user\n\t}\n\n\treturn nil\n}\n\n// clearStackWatchBreakpoints clears all accessory breakpoints for\n// watchpoint.\nfunc (t *Target) clearStackWatchBreakpoints(watchpoint *Breakpoint) error {\n\tbpmap := t.Breakpoints()\n\tfor _, bp := range bpmap.M {\n\t\tchanged := false\n\t\tfor i, breaklet := range bp.Breaklets {\n\t\t\tif breaklet.watchpoint == watchpoint {\n\t\t\t\tbp.Breaklets[i] = nil\n\t\t\t\tchanged = true\n\t\t\t}\n\t\t}\n\t\tif changed {\n\t\t\t_, err := t.finishClearBreakpoint(bp)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// adjustStackWatchpoint is called when the goroutine of watchpoint resizes\n// its stack. It is used as a breaklet callback function.\n// Its responsibility is to move the watchpoint to a its new address.\nfunc adjustStackWatchpoint(t *Target, th Thread, watchpoint *Breakpoint) {\n\tg, _ := GetG(th)\n\tif g == nil {\n\t\treturn\n\t}\n\terr := t.proc.EraseBreakpoint(watchpoint)\n\tif err != nil {\n\t\tlog := logflags.DebuggerLogger()\n\t\tlog.Errorf(\"could not adjust watchpoint at %#x: %v\", watchpoint.Addr, err)\n\t\treturn\n\t}\n\tdelete(t.Breakpoints().M, watchpoint.Addr)\n\twatchpoint.Addr = uint64(int64(g.stack.hi) + watchpoint.watchStackOff)\n\terr = t.proc.WriteBreakpoint(watchpoint)\n\tif err != nil {\n\t\tlog := logflags.DebuggerLogger()\n\t\tlog.Errorf(\"could not adjust watchpoint at %#x: %v\", watchpoint.Addr, err)\n\t\treturn\n\t}\n\tt.Breakpoints().M[watchpoint.Addr] = watchpoint\n}\n"
  },
  {
    "path": "pkg/proc/stepping_test.go",
    "content": "package proc_test\n\nimport (\n\t\"fmt\"\n\t\"go/constant\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\ntype nextTest struct {\n\tbegin, end int\n}\n\ntype contFunc int\n\nconst (\n\tcontContinue contFunc = iota\n\tcontNext\n\tcontStep\n\tcontStepout\n\tcontReverseNext\n\tcontReverseStep\n\tcontReverseStepout\n\tcontContinueToBreakpoint\n\tcontNothing\n)\n\ntype seqTest struct {\n\tcf  contFunc\n\tpos any\n}\n\nfunc testseq(program string, contFunc contFunc, testcases []nextTest, initialLocation string, t *testing.T) {\n\tseqTestcases := make([]seqTest, len(testcases)+1)\n\tseqTestcases[0] = seqTest{contContinue, testcases[0].begin}\n\tfor i := range testcases {\n\t\tif i > 0 {\n\t\t\tif testcases[i-1].end != testcases[i].begin {\n\t\t\t\tpanic(fmt.Errorf(\"begin/end mismatch at index %d\", i))\n\t\t\t}\n\t\t}\n\t\tseqTestcases[i+1] = seqTest{contFunc, testcases[i].end}\n\t}\n\ttestseq2(t, program, initialLocation, seqTestcases)\n}\n\nconst traceTestseq2 = true\n\nfunc testseq2(t *testing.T, program string, initialLocation string, testcases []seqTest) {\n\ttestseq2Args(\".\", []string{}, 0, t, program, initialLocation, testcases)\n}\n\nfunc testseq2Args(wd string, args []string, buildFlags protest.BuildFlags, t *testing.T, program string, initialLocation string, testcases []seqTest) {\n\tprotest.AllowRecording(t)\n\tt.Helper()\n\twithTestProcessArgs(program, t, wd, args, buildFlags, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tcheckBreakpointClear := true\n\t\tvar bp *proc.Breakpoint\n\t\tif initialLocation != \"\" {\n\t\t\tbp = setFunctionBreakpoint(p, t, initialLocation)\n\t\t} else if testcases[0].cf == contContinue {\n\t\t\tbp = setFileBreakpoint(p, t, fixture.Source, testcases[0].pos.(int))\n\t\t} else if testcases[0].cf == contNothing {\n\t\t\t// Do nothing\n\t\t\tcheckBreakpointClear = false\n\t\t} else {\n\t\t\tpanic(\"testseq2 can not set initial breakpoint\")\n\t\t}\n\t\tif traceTestseq2 {\n\t\t\tt.Logf(\"initial breakpoint %v\", bp)\n\t\t}\n\n\t\ttestseq2intl(t, fixture, grp, p, bp, testcases)\n\n\t\tif countBreakpoints(p) != 0 && checkBreakpointClear {\n\t\t\tt.Fatal(\"Not all breakpoints were cleaned up\", len(p.Breakpoints().M))\n\t\t}\n\t})\n}\n\nfunc testseq2intl(t *testing.T, fixture protest.Fixture, grp *proc.TargetGroup, p *proc.Target, bp *proc.Breakpoint, testcases []seqTest) {\n\tf, ln := currentLineNumber(p, t)\n\tfor i, tc := range testcases {\n\t\tswitch tc.cf {\n\t\tcase contNext:\n\t\t\tif traceTestseq2 {\n\t\t\t\tt.Log(\"next\")\n\t\t\t}\n\t\t\tassertNoError(grp.Next(), t, \"Next() returned an error\")\n\t\tcase contStep:\n\t\t\tif traceTestseq2 {\n\t\t\t\tt.Log(\"step\")\n\t\t\t}\n\t\t\tassertNoError(grp.Step(), t, \"Step() returned an error\")\n\t\tcase contStepout:\n\t\t\tif traceTestseq2 {\n\t\t\t\tt.Log(\"stepout\")\n\t\t\t}\n\t\t\tassertNoError(grp.StepOut(), t, \"StepOut() returned an error\")\n\t\tcase contContinue:\n\t\t\tif traceTestseq2 {\n\t\t\t\tt.Log(\"continue\")\n\t\t\t}\n\t\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\t\tif i == 0 {\n\t\t\t\tif traceTestseq2 {\n\t\t\t\t\tt.Log(\"clearing initial breakpoint\")\n\t\t\t\t}\n\t\t\t\terr := p.ClearBreakpoint(bp.Addr)\n\t\t\t\tassertNoError(err, t, \"ClearBreakpoint() returned an error\")\n\t\t\t}\n\t\tcase contReverseNext:\n\t\t\tif traceTestseq2 {\n\t\t\t\tt.Log(\"reverse-next\")\n\t\t\t}\n\t\t\tassertNoError(grp.ChangeDirection(proc.Backward), t, \"direction switch\")\n\t\t\tassertNoError(grp.Next(), t, \"reverse Next() returned an error\")\n\t\t\tassertNoError(grp.ChangeDirection(proc.Forward), t, \"direction switch\")\n\t\tcase contReverseStep:\n\t\t\tif traceTestseq2 {\n\t\t\t\tt.Log(\"reverse-step\")\n\t\t\t}\n\t\t\tassertNoError(grp.ChangeDirection(proc.Backward), t, \"direction switch\")\n\t\t\tassertNoError(grp.Step(), t, \"reverse Step() returned an error\")\n\t\t\tassertNoError(grp.ChangeDirection(proc.Forward), t, \"direction switch\")\n\t\tcase contReverseStepout:\n\t\t\tif traceTestseq2 {\n\t\t\t\tt.Log(\"reverse-stepout\")\n\t\t\t}\n\t\t\tassertNoError(grp.ChangeDirection(proc.Backward), t, \"direction switch\")\n\t\t\tassertNoError(grp.StepOut(), t, \"reverse StepOut() returned an error\")\n\t\t\tassertNoError(grp.ChangeDirection(proc.Forward), t, \"direction switch\")\n\t\tcase contContinueToBreakpoint:\n\t\t\tbp := setFileBreakpoint(p, t, fixture.Source, tc.pos.(int))\n\t\t\tif traceTestseq2 {\n\t\t\t\tt.Log(\"continue\")\n\t\t\t}\n\t\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\t\terr := p.ClearBreakpoint(bp.Addr)\n\t\t\tassertNoError(err, t, \"ClearBreakpoint() returned an error\")\n\t\tcase contNothing:\n\t\t\t// do nothing\n\t\t}\n\n\t\tif err := p.CurrentThread().Breakpoint().CondError; err != nil {\n\t\t\tt.Logf(\"breakpoint condition error: %v\", err)\n\t\t}\n\n\t\tf, ln = currentLineNumber(p, t)\n\t\tregs, _ := p.CurrentThread().Registers()\n\t\tpc := regs.PC()\n\t\t_, _, fn := p.BinInfo().PCToLine(pc)\n\n\t\tif traceTestseq2 {\n\t\t\tfnname := \"?\"\n\t\t\tif fn != nil {\n\t\t\t\tfnname = fn.Name\n\t\t\t}\n\t\t\tt.Logf(\"at %#x (%s) %s:%d\", pc, fnname, f, ln)\n\t\t}\n\t\tswitch pos := tc.pos.(type) {\n\t\tcase int:\n\t\t\tif pos >= 0 && ln != pos {\n\t\t\t\tt.Fatalf(\"Program did not continue to correct next location expected %d was %s:%d (%#x) (testcase %d)\", pos, filepath.Base(f), ln, pc, i)\n\t\t\t}\n\t\tcase string:\n\t\t\tv := strings.Split(pos, \":\")\n\t\t\ttgtln, _ := strconv.Atoi(v[1])\n\t\t\tif !strings.HasSuffix(f, v[0]) || (ln != tgtln) {\n\t\t\t\tt.Fatalf(\"Program did not continue to correct next location, expected %s was %s:%d (%#x) (testcase %d)\", pos, filepath.Base(f), ln, pc, i)\n\t\t\t}\n\t\tcase func(*proc.Target):\n\t\t\tpos(p)\n\t\tcase func(*proc.TargetGroup, *proc.Target):\n\t\t\tpos(grp, p)\n\t\tdefault:\n\t\t\tpanic(fmt.Errorf(\"unexpected type %T\", pos))\n\t\t}\n\t}\n}\n\nfunc TestNextGeneral(t *testing.T) {\n\tvar testcases []nextTest\n\n\tver, _ := goversion.Parse(runtime.Version())\n\n\tif ver.Major < 0 || ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 7, Rev: -1}) {\n\t\ttestcases = []nextTest{\n\t\t\t{17, 19},\n\t\t\t{19, 20},\n\t\t\t{20, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 31},\n\t\t\t{31, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 31},\n\t\t\t{31, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 27},\n\t\t\t{27, 28},\n\t\t\t{28, 34},\n\t\t}\n\t} else {\n\t\ttestcases = []nextTest{\n\t\t\t{17, 19},\n\t\t\t{19, 20},\n\t\t\t{20, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 31},\n\t\t\t{31, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 31},\n\t\t\t{31, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 27},\n\t\t\t{27, 34},\n\t\t}\n\t}\n\n\ttestseq(\"testnextprog\", contNext, testcases, \"main.testnext\", t)\n}\n\nfunc TestNextFunctionReturn(t *testing.T) {\n\ttestcases := []nextTest{\n\t\t{13, 14},\n\t\t{14, 15},\n\t\t{15, 35},\n\t}\n\tprotest.AllowRecording(t)\n\ttestseq(\"testnextprog\", contNext, testcases, \"main.helloworld\", t)\n}\n\nfunc TestNextFunctionReturnDefer(t *testing.T) {\n\tvar testcases []nextTest\n\n\tver, _ := goversion.Parse(runtime.Version())\n\n\tif ver.Major < 0 || ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 9, Rev: -1}) {\n\t\ttestcases = []nextTest{\n\t\t\t{5, 6},\n\t\t\t{6, 9},\n\t\t\t{9, 10},\n\t\t}\n\t} else {\n\t\ttestcases = []nextTest{\n\t\t\t{5, 8},\n\t\t\t{8, 9},\n\t\t\t{9, 10},\n\t\t}\n\t}\n\tprotest.AllowRecording(t)\n\ttestseq(\"testnextdefer\", contNext, testcases, \"main.main\", t)\n}\n\nfunc TestNextDeferReturnAndDirectCall(t *testing.T) {\n\t// Next should not step into a deferred function if it is called\n\t// directly, only if it is called through a panic or a deferreturn.\n\t// Here we test the case where the function is called by a deferreturn\n\ttestseq(\"defercall\", contNext, []nextTest{\n\t\t{9, 10},\n\t\t{10, 11},\n\t\t{11, 12},\n\t\t{12, 13},\n\t\t{13, 28}}, \"main.callAndDeferReturn\", t)\n}\n\nfunc TestNextPanicAndDirectCall(t *testing.T) {\n\t// Next should not step into a deferred function if it is called\n\t// directly, only if it is called through a panic or a deferreturn.\n\t// Here we test the case where the function is called by a panic\n\ttestseq(\"defercall\", contNext, []nextTest{\n\t\t{15, 16},\n\t\t{16, 17},\n\t\t{17, 18},\n\t\t{18, 6}}, \"main.callAndPanic2\", t)\n}\n\nfunc TestStepCall(t *testing.T) {\n\ttestseq(\"testnextprog\", contStep, []nextTest{\n\t\t{34, 13},\n\t\t{13, 14}}, \"\", t)\n}\n\nfunc TestStepCallPtr(t *testing.T) {\n\t// Tests that Step works correctly when calling functions with a\n\t// function pointer.\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 11) && !protest.RegabiSupported() {\n\t\ttestseq(\"teststepprog\", contStep, []nextTest{\n\t\t\t{9, 10},\n\t\t\t{10, 6},\n\t\t\t{6, 7},\n\t\t\t{7, 11}}, \"\", t)\n\t} else {\n\t\tif runtime.GOOS == \"linux\" && runtime.GOARCH == \"ppc64le\" && buildMode == \"pie\" {\n\t\t\ttestseq(\"teststepprog\", contStep, []nextTest{\n\t\t\t\t{9, 10},\n\t\t\t\t{10, 5},\n\t\t\t\t{5, 6},\n\t\t\t\t{6, 7},\n\t\t\t\t{7, 10},\n\t\t\t\t{10, 11}}, \"\", t)\n\t\t} else {\n\t\t\ttestseq(\"teststepprog\", contStep, []nextTest{\n\t\t\t\t{9, 10},\n\t\t\t\t{10, 5},\n\t\t\t\t{5, 6},\n\t\t\t\t{6, 7},\n\t\t\t\t{7, 11}}, \"\", t)\n\t\t}\n\t}\n}\n\nfunc TestStepReturnAndPanic(t *testing.T) {\n\t// Tests that Step works correctly when returning from functions\n\t// and when a deferred function is called when panic'ing.\n\ttestseq(\"defercall\", contStep, []nextTest{\n\t\t{17, 6},\n\t\t{6, 7},\n\t\t{7, 18},\n\t\t{18, 6},\n\t\t{6, 7}}, \"\", t)\n}\n\nfunc TestStepDeferReturn(t *testing.T) {\n\t// Tests that Step works correctly when a deferred function is\n\t// called during a return.\n\ttestseq(\"defercall\", contStep, []nextTest{\n\t\t{11, 6},\n\t\t{6, 7},\n\t\t{7, 12},\n\t\t{12, 13},\n\t\t{13, 6},\n\t\t{6, 7},\n\t\t{7, 13},\n\t\t{13, 28}}, \"\", t)\n}\n\nfunc TestStepIgnorePrivateRuntime(t *testing.T) {\n\t// Tests that Step will ignore calls to private runtime functions\n\t// (such as runtime.convT2E in this case)\n\tswitch {\n\tcase goversion.VersionAfterOrEqual(runtime.Version(), 1, 17) && protest.RegabiSupported():\n\t\ttestseq(\"teststepprog\", contStep, []nextTest{\n\t\t\t{21, 13},\n\t\t\t{13, 14},\n\t\t\t{14, 15},\n\t\t\t{15, 17},\n\t\t\t{17, 22}}, \"\", t)\n\tcase goversion.VersionAfterOrEqual(runtime.Version(), 1, 17):\n\t\ttestseq(\"teststepprog\", contStep, []nextTest{\n\t\t\t{21, 14},\n\t\t\t{14, 15},\n\t\t\t{15, 17},\n\t\t\t{17, 22}}, \"\", t)\n\tcase goversion.VersionAfterOrEqual(runtime.Version(), 1, 11):\n\t\ttestseq(\"teststepprog\", contStep, []nextTest{\n\t\t\t{21, 14},\n\t\t\t{14, 15},\n\t\t\t{15, 22}}, \"\", t)\n\tdefault:\n\t\tpanic(\"too old\")\n\t}\n}\n\nfunc TestInlineStep(t *testing.T) {\n\tskipOn(t, \"broken\", \"ppc64le\")\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Versions of go before 1.10 do not have DWARF information for inlined calls\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\ttestseq2Args(\".\", []string{}, protest.EnableInlining, t, \"testinline\", \"\", []seqTest{\n\t\t{contContinue, 18},\n\t\t{contStep, 6},\n\t\t{contStep, 7},\n\t\t{contStep, 24},\n\t\t{contStep, 25},\n\t\t{contStep, 7},\n\t\t{contStep, 18},\n\t\t{contStep, 19},\n\t})\n}\n\nfunc TestInlineNext(t *testing.T) {\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Versions of go before 1.10 do not have DWARF information for inlined calls\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\ttestseq2Args(\".\", []string{}, protest.EnableInlining, t, \"testinline\", \"\", []seqTest{\n\t\t{contContinue, 18},\n\t\t{contStep, 6},\n\t\t{contNext, 7},\n\t\t{contNext, 18},\n\t\t{contNext, 19},\n\t})\n}\n\nfunc TestInlineStepOver(t *testing.T) {\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Versions of go before 1.10 do not have DWARF information for inlined calls\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\ttestseq2Args(\".\", []string{}, protest.EnableInlining, t, \"testinline\", \"\", []seqTest{\n\t\t{contContinue, 18},\n\t\t{contNext, 19},\n\t\t{contNext, 20},\n\t})\n}\n\nfunc TestInlineStepOut(t *testing.T) {\n\tif ver, _ := goversion.Parse(runtime.Version()); ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Versions of go before 1.10 do not have DWARF information for inlined calls\n\t\tt.Skip(\"inlining not supported\")\n\t}\n\ttestseq2Args(\".\", []string{}, protest.EnableInlining, t, \"testinline\", \"\", []seqTest{\n\t\t{contContinue, 18},\n\t\t{contStep, 6},\n\t\t{contStepout, 18},\n\t})\n}\n\nfunc TestBackwardNextGeneral(t *testing.T) {\n\tif testBackend != \"rr\" {\n\t\tt.Skip(\"Reverse stepping test needs rr\")\n\t}\n\ttestseq2(t, \"testnextprog\", \"main.helloworld\", []seqTest{\n\t\t{contContinue, 13},\n\t\t{contNext, 14},\n\t\t{contReverseNext, 13},\n\t\t{contReverseNext, 34},\n\t\t{contReverseNext, 28},\n\t\t{contReverseNext, 27},\n\t\t{contReverseNext, 26},\n\t\t{contReverseNext, 24},\n\t\t{contReverseNext, 23},\n\t\t{contReverseNext, 31},\n\t\t{contReverseNext, 26},\n\t\t{contReverseNext, 24},\n\t\t{contReverseNext, 23},\n\t\t{contReverseNext, 31},\n\t\t{contReverseNext, 26},\n\t\t{contReverseNext, 24},\n\t\t{contReverseNext, 23},\n\t\t{contReverseNext, 20},\n\t\t{contReverseNext, 19},\n\t\t{contReverseNext, 17},\n\t\t{contReverseNext, 39},\n\t\t{contReverseNext, 38},\n\t\t{contReverseNext, 37},\n\t})\n}\n\nfunc TestBackwardStepOutGeneral(t *testing.T) {\n\tif testBackend != \"rr\" {\n\t\tt.Skip(\"Reverse stepping test needs rr\")\n\t}\n\ttestseq2(t, \"testnextprog\", \"main.helloworld\", []seqTest{\n\t\t{contContinue, 13},\n\t\t{contNext, 14},\n\t\t{contReverseStepout, 34},\n\t\t{contReverseStepout, 39},\n\t})\n}\n\nfunc TestBackwardStepGeneral(t *testing.T) {\n\tif testBackend != \"rr\" {\n\t\tt.Skip(\"Reverse stepping test needs rr\")\n\t}\n\ttestseq2(t, \"testnextprog\", \"main.helloworld\", []seqTest{\n\t\t{contContinue, 13},\n\t\t{contNext, 14},\n\t\t{contReverseStep, 13},\n\t\t{contReverseStep, 34},\n\t\t{contReverseStep, 28},\n\t\t{contReverseNext, 27}, // skip fmt.Printf\n\t\t{contReverseStep, 26},\n\t\t{contReverseStep, 24},\n\t\t{contReverseStep, 23},\n\t\t{contReverseStep, 11},\n\t\t{contReverseNext, 10}, // skip time.Sleep\n\t\t{contReverseStep, 9},\n\n\t\t{contReverseStep, 31},\n\t\t{contReverseStep, 26},\n\t\t{contReverseStep, 24},\n\t\t{contReverseStep, 23},\n\t\t{contReverseStep, 11},\n\t\t{contReverseNext, 10}, // skip time.Sleep\n\t\t{contReverseStep, 9},\n\n\t\t{contReverseStep, 31},\n\t\t{contReverseStep, 26},\n\t\t{contReverseStep, 24},\n\t\t{contReverseStep, 23},\n\t\t{contReverseStep, 20},\n\t\t{contReverseStep, 19},\n\t\t{contReverseStep, 17},\n\t\t{contReverseStep, 39},\n\t\t{contReverseStep, 38},\n\t\t{contReverseStep, 37},\n\t})\n}\n\nfunc TestBackwardNextDeferPanic(t *testing.T) {\n\tif testBackend != \"rr\" {\n\t\tt.Skip(\"Reverse stepping test needs rr\")\n\t}\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 18) {\n\t\ttestseq2(t, \"defercall\", \"\", []seqTest{\n\t\t\t{contContinue, 12},\n\t\t\t{contReverseNext, 11},\n\t\t\t{contReverseNext, 10},\n\t\t\t{contReverseNext, 9},\n\t\t\t{contReverseNext, 27},\n\n\t\t\t{contContinueToBreakpoint, 12}, // skip first call to sampleFunction\n\t\t\t{contContinueToBreakpoint, 6},  // go to call to sampleFunction through deferreturn\n\t\t\t{contReverseNext, -1},          // runtime.deferreturn, maybe we should try to skip this\n\t\t\t{contReverseStepout, 13},\n\t\t\t{contReverseNext, 12},\n\t\t\t{contReverseNext, 11},\n\t\t\t{contReverseNext, 10},\n\t\t\t{contReverseNext, 9},\n\t\t\t{contReverseNext, 27},\n\n\t\t\t{contContinueToBreakpoint, 18}, // go to panic call\n\t\t\t{contNext, 6},                  // panic so the deferred call happens\n\t\t\t{contReverseNext, 18},\n\t\t\t{contReverseNext, 17},\n\t\t\t{contReverseNext, 16},\n\t\t\t{contReverseNext, 15},\n\t\t\t{contReverseNext, 23},\n\t\t\t{contReverseNext, 22},\n\t\t\t{contReverseNext, 21},\n\t\t\t{contReverseNext, 28},\n\t\t})\n\t} else {\n\t\ttestseq2(t, \"defercall\", \"\", []seqTest{\n\t\t\t{contContinue, 12},\n\t\t\t{contReverseNext, 11},\n\t\t\t{contReverseNext, 10},\n\t\t\t{contReverseNext, 9},\n\t\t\t{contReverseNext, 27},\n\n\t\t\t{contContinueToBreakpoint, 12}, // skip first call to sampleFunction\n\t\t\t{contContinueToBreakpoint, 6},  // go to call to sampleFunction through deferreturn\n\t\t\t{contReverseNext, 13},\n\t\t\t{contReverseNext, 12},\n\t\t\t{contReverseNext, 11},\n\t\t\t{contReverseNext, 10},\n\t\t\t{contReverseNext, 9},\n\t\t\t{contReverseNext, 27},\n\n\t\t\t{contContinueToBreakpoint, 18}, // go to panic call\n\t\t\t{contNext, 6},                  // panic so the deferred call happens\n\t\t\t{contReverseNext, 18},\n\t\t\t{contReverseNext, 17},\n\t\t\t{contReverseNext, 16},\n\t\t\t{contReverseNext, 15},\n\t\t\t{contReverseNext, 23},\n\t\t\t{contReverseNext, 22},\n\t\t\t{contReverseNext, 21},\n\t\t\t{contReverseNext, 28},\n\t\t})\n\t}\n}\n\nfunc TestStepIntoWrapperForEmbeddedPointer(t *testing.T) {\n\tskipOn(t, \"N/A\", \"linux\", \"386\", \"pie\") // skipping wrappers doesn't work on linux/386/PIE due to the use of get_pc_thunk\n\t// Under some circumstances (when using an interface to call a method on an\n\t// embedded field, see _fixtures/ifaceembcall.go) the compiler will\n\t// autogenerate a wrapper function that uses a tail call (i.e. it ends in\n\t// an unconditional jump instruction to a different function).\n\t// Delve should be able to step into this tail call.\n\ttestseq2(t, \"ifaceembcall\", \"\", []seqTest{\n\t\t{contContinue, 28}, // main.main, the line calling iface.PtrReceiver()\n\t\t{contStep, 18},     // main.(*A).PtrReceiver\n\t\t{contStep, 19},\n\t\t{contStepout, 28},\n\t\t{contContinueToBreakpoint, 29}, // main.main, the line calling iface.NonPtrReceiver()\n\t\t{contStep, 22},                 // main.(A).NonPtrReceiver\n\t\t{contStep, 23},\n\t\t{contStepout, 29}})\n\n\t// same test but with next instead of stepout\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 14) && runtime.GOARCH != \"386\" && !goversion.VersionAfterOrEqualRev(runtime.Version(), 1, 15, 4) {\n\t\t// Line numbers generated for versions 1.14 through 1.15.3 on any system except linux/386\n\t\ttestseq2(t, \"ifaceembcall\", \"\", []seqTest{\n\t\t\t{contContinue, 28}, // main.main, the line calling iface.PtrReceiver()\n\t\t\t{contStep, 18},     // main.(*A).PtrReceiver\n\t\t\t{contNext, 19},\n\t\t\t{contNext, 19},\n\t\t\t{contNext, 28},\n\t\t\t{contContinueToBreakpoint, 29}, // main.main, the line calling iface.NonPtrReceiver()\n\t\t\t{contStep, 22},\n\t\t\t{contNext, 23},\n\t\t\t{contNext, 23},\n\t\t\t{contNext, 29},\n\t\t})\n\t} else {\n\t\ttestseq2(t, \"ifaceembcall\", \"\", []seqTest{\n\t\t\t{contContinue, 28}, // main.main, the line calling iface.PtrReceiver()\n\t\t\t{contStep, 18},     // main.(*A).PtrReceiver\n\t\t\t{contNext, 19},\n\t\t\t{contNext, 28},\n\t\t\t{contContinueToBreakpoint, 29}, // main.main, the line calling iface.NonPtrReceiver()\n\t\t\t{contStep, 22},\n\t\t\t{contNext, 23},\n\t\t\t{contNext, 29},\n\t\t})\n\t}\n}\n\nfunc TestNextGenericMethodThroughInterface(t *testing.T) {\n\t// Tests that autogenerated wrappers for generic methods called through an\n\t// interface are skipped.\n\n\tvarcheck := func(p *proc.Target) {\n\t\tyvar := evalVariable(p, t, \"y\")\n\t\tyval, _ := constant.Int64Val(yvar.Value)\n\t\tif yval != 2 {\n\t\t\tt.Errorf(\"expected 2 got %#v\", yvar.Value)\n\t\t}\n\t}\n\n\tif runtime.GOOS == \"linux\" && runtime.GOARCH == \"386\" {\n\t\ttestseq2(t, \"genericintoiface\", \"main.callf\", []seqTest{\n\t\t\t{contContinue, 17},\n\t\t\t{contStep, 18},\n\t\t\t{contStep, 10},\n\t\t\t{contNothing, varcheck},\n\t\t\t{contNext, 11},\n\t\t\t{contNext, 19},\n\t\t})\n\t} else {\n\t\ttestseq2(t, \"genericintoiface\", \"main.callf\", []seqTest{\n\t\t\t{contContinue, 17},\n\t\t\t{contStep, 18},\n\t\t\t{contStep, 9},\n\t\t\t{contNext, 10},\n\t\t\t{contNothing, varcheck},\n\t\t\t{contNext, 11},\n\t\t\t{contNext, 19},\n\t\t})\n\t}\n}\n\nfunc TestRangeOverFuncNext(t *testing.T) {\n\tvar bp *proc.Breakpoint\n\n\tfuncBreak := func(t *testing.T, fnname string) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tbp = setFunctionBreakpoint(p, t, fnname)\n\t\t\t}}\n\t}\n\n\tclearBreak := func(t *testing.T) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tassertNoError(p.ClearBreakpoint(bp.Addr), t, \"ClearBreakpoint\")\n\t\t\t}}\n\t}\n\n\tnotAtEntryPoint := func(t *testing.T) seqTest {\n\t\treturn seqTest{contNothing, func(p *proc.Target) {\n\t\t\tpc := currentPC(p, t)\n\t\t\tfn := p.BinInfo().PCToFunc(pc)\n\t\t\tif pc == fn.Entry {\n\t\t\t\tt.Fatalf(\"current PC is entry point\")\n\t\t\t}\n\t\t}}\n\t}\n\n\tnx := func(n int) seqTest {\n\t\treturn seqTest{contNext, n}\n\t}\n\n\tnop := seqTest{contNothing, func(*proc.Target) {}}\n\n\tifcond := func(v bool, a seqTest, b seqTest) seqTest {\n\t\tif v {\n\t\t\treturn a\n\t\t}\n\t\treturn b\n\t}\n\n\tassertLocals := func(t *testing.T, varnames ...string) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\t\t\tassertNoError(err, t, \"GoroutineScope\")\n\t\t\t\tvars, err := scope.Locals(0, \"\")\n\t\t\t\tassertNoError(err, t, \"Locals\")\n\n\t\t\t\tgotnames := make([]string, len(vars))\n\t\t\t\tfor i := range vars {\n\t\t\t\t\tgotnames[i] = vars[i].Name\n\t\t\t\t}\n\n\t\t\t\tok := true\n\t\t\t\tif len(vars) != len(varnames) {\n\t\t\t\t\tok = false\n\t\t\t\t} else {\n\t\t\t\t\tfor i := range vars {\n\t\t\t\t\t\tif vars[i].Name != varnames[i] {\n\t\t\t\t\t\t\tok = false\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif !ok {\n\t\t\t\t\tt.Errorf(\"Wrong variable names, expected %q, got %q\", varnames, gotnames)\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n\n\tassertEval := func(t *testing.T, exprvals ...string) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\t\t\tassertNoError(err, t, \"GoroutineScope\")\n\t\t\t\tfor i := 0; i < len(exprvals); i += 2 {\n\t\t\t\t\texpr, tgt := exprvals[i], exprvals[i+1]\n\t\t\t\t\tv, err := scope.EvalExpression(expr, normalLoadConfig)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Errorf(\"Could not evaluate %q: %v\", expr, err)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tout := api.ConvertVar(v).SinglelineString()\n\t\t\t\t\t\tif out != tgt {\n\t\t\t\t\t\t\tt.Errorf(\"Wrong value for %q, got %q expected %q\", expr, out, tgt)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n\n\tassertFunc := func(t *testing.T, fname string) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tpc := currentPC(p, t)\n\t\t\t\tfn := p.BinInfo().PCToFunc(pc)\n\t\t\t\tif fn.Name != fname {\n\t\t\t\t\tt.Errorf(\"Wrong function name, expected %s got %s\", fname, fn.Name)\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n\n\twithTestProcessArgs(\"rangeoverfunc\", t, \".\", []string{}, 0, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tt.Run(\"TestTrickyIterAll1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestTrickyIterAll\"),\n\t\t\t\t{contContinue, 24}, // TestTrickyIterAll\n\t\t\t\tifcond(runtime.GOARCH == \"arm64\" && goversion.VersionAfterOrEqual(runtime.Version(), 1, 25), nop, nx(25)),\n\t\t\t\tnx(26),\n\t\t\t\tnx(27), // for _, x := range ...\n\t\t\t\tassertLocals(t, \"trickItAll\", \"i\"),\n\t\t\t\tassertEval(t, \"i\", \"0\"),\n\t\t\t\tnx(28), // i += x\n\t\t\t\tassertLocals(t, \"trickItAll\", \"i\", \"x\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"i\", \"0\",\n\t\t\t\t\t\"x\", \"30\"),\n\t\t\t\tnx(29), // if i >= 36 {\n\t\t\t\tnx(32),\n\t\t\t\tnx(27), // for _, x := range ...\n\t\t\t\tnotAtEntryPoint(t),\n\t\t\t\tnx(28), // i += x\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"i\", \"30\",\n\t\t\t\t\t\"x\", \"7\"),\n\t\t\t\tnx(29), // if i >= 36 {\n\t\t\t\tnx(30), // break\n\t\t\t\tnx(32),\n\t\t\t\tnx(34), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestTrickyIterAll2\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestTrickyIterAll2\"),\n\t\t\t\t{contContinue, 37}, // TestTrickyIterAll2\n\t\t\t\tifcond(runtime.GOARCH == \"arm64\" && goversion.VersionAfterOrEqual(runtime.Version(), 1, 25), nop, nx(38)),\n\t\t\t\tnx(39),\n\t\t\t\tnx(40), // for _, x := range...\n\t\t\t\tnx(41),\n\t\t\t\tnx(42),\n\t\t\t\tnx(40),\n\t\t\t\tnotAtEntryPoint(t),\n\t\t\t\tnx(41),\n\t\t\t\tnx(42),\n\t\t\t\tnx(42), // different function from the one above...\n\t\t\t\tnx(43),\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestBreak1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestBreak1\"),\n\t\t\t\t{contContinue, 46}, // TestBreak1\n\t\t\t\tnx(47),\n\t\t\t\tnx(48), // for _, x := range... (x == -1)\n\t\t\t\tnx(49), // if x == -4\n\t\t\t\tassertLocals(t, \"result\", \"x\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"result\", \"[]int len: 0, cap: 0, nil\",\n\t\t\t\t\t\"x\", \"-1\"),\n\n\t\t\t\tnx(52), // for _, y := range... (y == 1)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tassertLocals(t, \"result\", \"x\", \"y\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"result\", \"[]int len: 0, cap: 0, nil\",\n\t\t\t\t\t\"x\", \"-1\",\n\t\t\t\t\t\"y\", \"1\"),\n\t\t\t\tnx(56), // result = append(result, y)\n\t\t\t\tnx(57),\n\t\t\t\tnx(52), // for _, y := range... (y == 2)\n\t\t\t\tnotAtEntryPoint(t),\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"x\", \"-1\",\n\t\t\t\t\t\"y\", \"2\"),\n\t\t\t\tnx(56), // result = append(result, y)\n\t\t\t\tnx(57),\n\t\t\t\tnx(52), // for _, y := range... (y == 3)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"x\", \"-1\",\n\t\t\t\t\t\"y\", \"3\"),\n\t\t\t\tnx(54), // break\n\t\t\t\tnx(57),\n\t\t\t\tnx(58), // result = append(result, x)\n\t\t\t\tnx(59),\n\n\t\t\t\tnx(48), // for _, x := range... (x == -2)\n\t\t\t\tnotAtEntryPoint(t),\n\t\t\t\tnx(49), // if x == -4\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"result\", \"[]int len: 3, cap: 4, [1,2,-1]\",\n\t\t\t\t\t\"x\", \"-2\"),\n\t\t\t\tnx(52), // for _, y := range... (y == 1)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tnx(56), // result = append(result, y)\n\t\t\t\tnx(57),\n\t\t\t\tnx(52), // for _, y := range... (y == 2)\n\t\t\t\tnotAtEntryPoint(t),\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tnx(56), // result = append(result, y)\n\t\t\t\tnx(57),\n\t\t\t\tnx(52), // for _, y := range... (y == 3)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tnx(54), // break\n\t\t\t\tnx(57),\n\t\t\t\tnx(58), // result = append(result, x)\n\t\t\t\tnx(59),\n\n\t\t\t\tnx(48), // for _, x := range... (x == -4)\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"result\", \"[]int len: 6, cap: 8, [1,2,-1,1,2,-2]\",\n\t\t\t\t\t\"x\", \"-4\"),\n\t\t\t\tnx(49), // if x == -4\n\t\t\t\tnx(50), // break\n\t\t\t\tnx(59),\n\t\t\t\tnx(60),\n\t\t\t\tnx(61),\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestBreak2\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestBreak2\"),\n\n\t\t\t\t{contContinue, 63}, // TestBreak2\n\t\t\t\tnx(64),\n\t\t\t\tnx(65),\n\n\t\t\t\tnx(66), // for _, x := range (x == -1)\n\t\t\t\tnx(67), // for _, y := range (y == 1)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(74), // result = append(result, y)\n\t\t\t\tnx(75),\n\n\t\t\t\tnx(67), // for _, y := range (y == 2)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(74), // result = append(result, y)\n\t\t\t\tnx(75),\n\n\t\t\t\tnx(67), // for _, y := range (y == 3)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(69), // break\n\t\t\t\tnx(75),\n\t\t\t\tnx(76), // result = append(result, x)\n\t\t\t\tnx(77),\n\n\t\t\t\tnx(66), // for _, x := range (x == -2)\n\t\t\t\tnx(67), // for _, y := range (y == 1)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(74), // result = append(result, y)\n\t\t\t\tnx(75),\n\n\t\t\t\tnx(67), // for _, y := range (y == 2)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(74), // result = append(result, y)\n\t\t\t\tnx(75),\n\n\t\t\t\tnx(67), // for _, y := range (y == 3)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(69), // break\n\t\t\t\tnx(75),\n\t\t\t\tnx(76), // result = append(result, x)\n\t\t\t\tnx(77),\n\n\t\t\t\tnx(66), // for _, x := range (x == -4)\n\t\t\t\tnx(67), // for _, y := range (y == 1)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(72), // break outer\n\t\t\t\tnx(75),\n\t\t\t\tnx(77),\n\t\t\t\tnx(78),\n\t\t\t\tnx(79),\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestMultiCont0\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestMultiCont0\"),\n\t\t\t\t{contContinue, 81},\n\t\t\t\tnx(82),\n\t\t\t\tnx(84),\n\t\t\t\tnx(85), // for _, w := range (w == 1000)\n\t\t\t\tnx(86), // result = append(result, w)\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"w\", \"1000\",\n\t\t\t\t\t\"result\", \"[]int len: 0, cap: 10, []\"),\n\t\t\t\tnx(87), // if w == 2000\n\t\t\t\tassertLocals(t, \"result\", \"w\"),\n\t\t\t\tassertEval(t, \"result\", \"[]int len: 1, cap: 10, [1000]\"),\n\t\t\t\tnx(90), // for _, x := range (x == 100)\n\t\t\t\tnx(91), // for _, y := range (y == 10)\n\t\t\t\tnx(92), // result = append(result, y)\n\t\t\t\tassertLocals(t, \"result\", \"w\", \"x\", \"y\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"w\", \"1000\",\n\t\t\t\t\t\"x\", \"100\",\n\t\t\t\t\t\"y\", \"10\"),\n\n\t\t\t\tnx(93), // for _, z := range (z == 1)\n\t\t\t\tnx(94), // if z&1 == 1\n\t\t\t\tassertLocals(t, \"result\", \"w\", \"x\", \"y\", \"z\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"w\", \"1000\",\n\t\t\t\t\t\"x\", \"100\",\n\t\t\t\t\t\"y\", \"10\",\n\t\t\t\t\t\"z\", \"1\"),\n\t\t\t\tnx(95), // continue\n\n\t\t\t\tnx(93), // for _, z := range (z == 2)\n\t\t\t\tnx(94), // if z&1 == 1\n\t\t\t\tassertEval(t, \"z\", \"2\"),\n\t\t\t\tnx(97), // result = append(result, z)\n\t\t\t\tnx(98), // if z >= 4 {\n\t\t\t\tnx(101),\n\n\t\t\t\tnx(93), // for _, z := range (z == 3)\n\t\t\t\tnx(94), // if z&1 == 1\n\t\t\t\tassertEval(t, \"z\", \"3\"),\n\t\t\t\tnx(95), // continue\n\n\t\t\t\tnx(93), // for _, z := range (z == 4)\n\t\t\t\tnx(94), // if z&1 == 1\n\t\t\t\tassertEval(t, \"z\", \"4\"),\n\t\t\t\tnx(97), // result = append(result, z)\n\t\t\t\tassertEval(t, \"result\", \"[]int len: 3, cap: 10, [1000,10,2]\"),\n\t\t\t\tnx(98), // if z >= 4 {\n\t\t\t\tnx(99), // continue W\n\t\t\t\tnx(101),\n\t\t\t\tnx(103),\n\t\t\t\tnx(105),\n\n\t\t\t\tnx(85), // for _, w := range (w == 2000)\n\t\t\t\tnx(86), // result = append(result, w)\n\t\t\t\tnx(87), // if w == 2000\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"w\", \"2000\",\n\t\t\t\t\t\"result\", \"[]int len: 5, cap: 10, [1000,10,2,4,2000]\"),\n\t\t\t\tnx(88), // break\n\t\t\t\tnx(106),\n\t\t\t\tnx(107), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestPanickyIterator1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestPanickyIterator1\"),\n\t\t\t\t{contContinue, 110},\n\t\t\t\tnx(111),\n\t\t\t\tnx(112),\n\t\t\t\tnx(116), // for _, z := range (z == 1)\n\t\t\t\tnx(117), // result = append(result, z)\n\t\t\t\tnx(118), // if z == 4\n\t\t\t\tnx(121),\n\n\t\t\t\tnx(116), // for _, z := range (z == 2)\n\t\t\t\tnx(117), // result = append(result, z)\n\t\t\t\tnx(118), // if z == 4\n\t\t\t\tnx(121),\n\n\t\t\t\tnx(116), // for _, z := range (z == 3)\n\t\t\t\tnx(117), // result = append(result, z)\n\t\t\t\tnx(118), // if z == 4\n\t\t\t\tnx(121),\n\n\t\t\t\tnx(116), // for _, z := range (z == 4)\n\t\t\t\tnx(117), // result = append(result, z)\n\t\t\t\tnx(118), // if z == 4\n\t\t\t\tnx(119), // break\n\n\t\t\t\tnx(112), // defer func()\n\t\t\t\tnx(113), // r := recover()\n\t\t\t\tnx(114), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestPanickyIterator2\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestPanickyIterator2\"),\n\t\t\t\t{contContinue, 125},\n\t\t\t\tnx(126),\n\t\t\t\tnx(127),\n\t\t\t\tnx(131), // for _, x := range (x == 100)\n\t\t\t\tnx(132),\n\t\t\t\tnx(133),\n\t\t\t\tnx(135), // for _, y := range (y == 10)\n\t\t\t\tnx(136), // result = append(result, y)\n\t\t\t\tnx(139), // for k, z := range (k == 0, z == 1)\n\t\t\t\tnx(140), // result = append(result, z)\n\t\t\t\tnx(141), // if k == 1\n\t\t\t\tnx(144),\n\n\t\t\t\tnx(139), // for k, z := range (k == 1, z == 2)\n\t\t\t\tnx(140), // result = append(result, z)\n\t\t\t\tnx(141), // if k == 1\n\t\t\t\tnx(142), // break Y\n\t\t\t\tnx(135),\n\t\t\t\tnx(145),\n\t\t\t\tnx(127), // defer func()\n\t\t\t\tnx(128), // r := recover()\n\t\t\t\tnx(129), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestPanickyIteratorWithNewDefer\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestPanickyIteratorWithNewDefer\"),\n\t\t\t\t{contContinue, 149},\n\t\t\t\tnx(150),\n\t\t\t\tnx(151),\n\t\t\t\tnx(155), // for _, x := range (x == 100)\n\t\t\t\tnx(156),\n\t\t\t\tnx(157),\n\t\t\t\tnx(159), // for _, y := range (y == 10)\n\t\t\t\tnx(160),\n\t\t\t\tnx(163), // result = append(result, y)\n\t\t\t\tnx(166), // for k, z := range (k == 0, z == 1)\n\t\t\t\tnx(167), // result = append(result, z)\n\t\t\t\tnx(168), // if k == 1\n\t\t\t\tnx(171),\n\n\t\t\t\tnx(166), // for k, z := range (k == 0, z == 1)\n\t\t\t\tnx(167), // result = append(result, z)\n\t\t\t\tnx(168), // if k == 1\n\t\t\t\tnx(169), // break Y\n\t\t\t\tnx(159),\n\t\t\t\tnx(172),\n\t\t\t\tnx(160), // defer func()\n\t\t\t\tnx(161), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestLongReturn\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestLongReturn\"),\n\t\t\t\t{contContinue, 181},\n\t\t\t\tnx(182), // for _, x := range (x == 1)\n\t\t\t\tnx(183), // for _, y := range (y == 10)\n\t\t\t\tnx(184), // if y == 10\n\t\t\t\tnx(185), // return\n\t\t\t\tnx(187),\n\t\t\t\tnx(189),\n\t\t\t\tnx(178), // into TestLongReturnWrapper, fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestGotoA1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestGotoA1\"),\n\t\t\t\t{contContinue, 192},\n\t\t\t\tnx(193),\n\t\t\t\tnx(194), // for _, x := range (x == -1)\n\t\t\t\tnx(195), // result = append(result, x)\n\t\t\t\tnx(196), // if x == -4\n\t\t\t\tnx(199), // for _, y := range (y == 1)\n\t\t\t\tnx(200), // if y == 3\n\t\t\t\tnx(203), // result = append(result, y)\n\t\t\t\tnx(204),\n\n\t\t\t\tnx(199), // for _, y := range (y == 2)\n\t\t\t\tnx(200), // if y == 3\n\t\t\t\tnx(203), // result = append(result, y)\n\t\t\t\tnx(204),\n\n\t\t\t\tnx(199), // for _, y := range (y == 3)\n\t\t\t\tnx(200), // if y == 3\n\t\t\t\tnx(201), // goto A\n\t\t\t\tnx(204),\n\t\t\t\tnx(206), // result = append(result, x)\n\t\t\t\tnx(207),\n\n\t\t\t\tnx(194), // for _, x := range (x == -4)\n\t\t\t\tnx(195), // result = append(result, x)\n\t\t\t\tnx(196), // if x == -4\n\t\t\t\tnx(197), // break\n\t\t\t\tnx(207),\n\t\t\t\tnx(208), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestGotoB1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestGotoB1\"),\n\t\t\t\t{contContinue, 211},\n\t\t\t\tnx(212),\n\t\t\t\tnx(213), // for _, x := range (x == -1)\n\t\t\t\tnx(214), // result = append(result, x)\n\t\t\t\tnx(215), // if x == -4\n\t\t\t\tnx(218), // for _, y := range (y == 1)\n\t\t\t\tnx(219), // if y == 3\n\t\t\t\tnx(222), // result = append(result, y)\n\t\t\t\tnx(223),\n\n\t\t\t\tnx(218), // for _, y := range (y == 2)\n\t\t\t\tnx(219), // if y == 3\n\t\t\t\tnx(222), // result = append(result, y)\n\t\t\t\tnx(223),\n\n\t\t\t\tnx(218), // for _, y := range (y == 3)\n\t\t\t\tnx(219), // if y == 3\n\t\t\t\tnx(220), // goto B\n\t\t\t\tnx(223),\n\t\t\t\tnx(225),\n\t\t\t\tnx(227), // result = append(result, 999)\n\t\t\t\tnx(228), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestRecur\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestRecur\"),\n\t\t\t\t{contContinue, 231},\n\t\t\t\tclearBreak(t),\n\t\t\t\tnx(232), // result := []int{}\n\t\t\t\tassertEval(t, \"n\", \"3\"),\n\t\t\t\tnx(233), // if n > 0 {\n\t\t\t\tnx(234), // TestRecur\n\n\t\t\t\tnx(236), // for _, x := range (x == 10)\n\t\t\t\tassertFunc(t, \"main.TestRecur\"),\n\t\t\t\tnx(237), // result = ...\n\t\t\t\tassertEval(t, \"n\", \"3\"),\n\t\t\t\tassertFunc(t, \"main.TestRecur-range1\"),\n\t\t\t\tassertEval(t, \"x\", \"10\", \"n\", \"3\"),\n\t\t\t\tnx(238), // if n == 3\n\t\t\t\tnx(239), // TestRecur(0)\n\t\t\t\tnx(241),\n\n\t\t\t\tnx(236), // for _, x := range (x == 20)\n\t\t\t\tnx(237), // result = ...\n\t\t\t\tassertEval(t, \"x\", \"20\", \"n\", \"3\"),\n\t\t\t})\n\t\t})\n\t})\n}\n\nfunc TestRangeOverFuncStepOut(t *testing.T) {\n\ttestseq2(t, \"rangeoverfunc\", \"\", []seqTest{\n\t\t{contContinue, 97},\n\t\t{contStepout, 251},\n\t})\n}\n\nfunc TestRangeOverFuncNextInlined(t *testing.T) {\n\t// See #3882: inlined range-over-func produces symbol names that Delve\n\t// cannot correlate; requires a compiler fix that has not landed yet.\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 24) {\n\t\tt.Skip(\"broken due to inlined symbol names\")\n\t}\n\n\tvar bp *proc.Breakpoint\n\n\tfuncBreak := func(t *testing.T, fnname string) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tbp = setFunctionBreakpoint(p, t, fnname)\n\t\t\t}}\n\t}\n\n\tclearBreak := func(t *testing.T) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tassertNoError(p.ClearBreakpoint(bp.Addr), t, \"ClearBreakpoint\")\n\t\t\t}}\n\t}\n\n\tnx := func(n int) seqTest {\n\t\treturn seqTest{contNext, n}\n\t}\n\n\tassertLocals := func(t *testing.T, varnames ...string) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\t\t\tassertNoError(err, t, \"GoroutineScope\")\n\t\t\t\tvars, err := scope.Locals(0, \"\")\n\t\t\t\tassertNoError(err, t, \"Locals\")\n\n\t\t\t\tgotnames := make([]string, len(vars))\n\t\t\t\tfor i := range vars {\n\t\t\t\t\tgotnames[i] = vars[i].Name\n\t\t\t\t}\n\n\t\t\t\tok := true\n\t\t\t\tif len(vars) != len(varnames) {\n\t\t\t\t\tok = false\n\t\t\t\t} else {\n\t\t\t\t\tfor i := range vars {\n\t\t\t\t\t\tif vars[i].Name != varnames[i] {\n\t\t\t\t\t\t\tok = false\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif !ok {\n\t\t\t\t\tt.Errorf(\"Wrong variable names, expected %q, got %q\", varnames, gotnames)\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n\n\tassertEval := func(t *testing.T, exprvals ...string) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\t\t\tassertNoError(err, t, \"GoroutineScope\")\n\t\t\t\tfor i := 0; i < len(exprvals); i += 2 {\n\t\t\t\t\texpr, tgt := exprvals[i], exprvals[i+1]\n\t\t\t\t\tv, err := scope.EvalExpression(expr, normalLoadConfig)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Errorf(\"Could not evaluate %q: %v\", expr, err)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tout := api.ConvertVar(v).SinglelineString()\n\t\t\t\t\t\tif out != tgt {\n\t\t\t\t\t\t\tt.Errorf(\"Wrong value for %q, got %q expected %q\", expr, out, tgt)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n\n\tassertFunc := func(t *testing.T, fname string) seqTest {\n\t\treturn seqTest{\n\t\t\tcontNothing,\n\t\t\tfunc(p *proc.Target) {\n\t\t\t\tpc := currentPC(p, t)\n\t\t\t\tfn := p.BinInfo().PCToFunc(pc)\n\t\t\t\tif fn.Name != fname {\n\t\t\t\t\tt.Errorf(\"Wrong function name, expected %s got %s\", fname, fn.Name)\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t}\n\n\twithTestProcessArgs(\"rangeoverfunc\", t, \".\", []string{}, protest.EnableInlining, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tt.Run(\"TestTrickyIterAll1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestTrickyIterAll\"),\n\t\t\t\t{contContinue, 24}, // TestTrickyIterAll\n\t\t\t\tnx(25),\n\t\t\t\tnx(26),\n\t\t\t\tnx(27), // for _, x := range ...\n\t\t\t\tassertLocals(t, \"trickItAll\", \"i\"),\n\t\t\t\tassertEval(t, \"i\", \"0\"),\n\t\t\t\tnx(28), // i += x\n\t\t\t\tassertLocals(t, \"trickItAll\", \"i\", \"x\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"i\", \"0\",\n\t\t\t\t\t\"x\", \"30\"),\n\t\t\t\tnx(29), // if i >= 36 {\n\t\t\t\tnx(32),\n\t\t\t\tnx(27), // for _, x := range ...\n\t\t\t\tnx(28), // i += x\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"i\", \"30\",\n\t\t\t\t\t\"x\", \"7\"),\n\t\t\t\tnx(29), // if i >= 36 {\n\t\t\t\tnx(30), // break\n\t\t\t\tnx(27),\n\t\t\t\tnx(32),\n\t\t\t\tnx(34), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestTrickyIterAll2\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestTrickyIterAll2\"),\n\t\t\t\t{contContinue, 37}, // TestTrickyIterAll2\n\t\t\t\tnx(38),\n\t\t\t\tnx(39),\n\t\t\t\tnx(40), // for _, x := range...\n\t\t\t\tnx(41),\n\t\t\t\tnx(42),\n\t\t\t\tnx(40),\n\t\t\t\tnx(41),\n\t\t\t\tnx(42),\n\t\t\t\tnx(40),\n\t\t\t\tnx(42),\n\t\t\t\tnx(43),\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestBreak1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestBreak1\"),\n\t\t\t\t{contContinue, 46}, // TestBreak1\n\t\t\t\tnx(47),\n\t\t\t\tnx(48), // for _, x := range... (x == -1)\n\t\t\t\tnx(49), // if x == -4\n\t\t\t\tassertLocals(t, \"result\", \"x\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"result\", \"[]int len: 0, cap: 0, nil\",\n\t\t\t\t\t\"x\", \"-1\"),\n\n\t\t\t\tnx(52), // for _, y := range... (y == 1)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tassertLocals(t, \"result\", \"x\", \"y\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"result\", \"[]int len: 0, cap: 0, nil\",\n\t\t\t\t\t\"x\", \"-1\",\n\t\t\t\t\t\"y\", \"1\"),\n\t\t\t\tnx(56), // result = append(result, y)\n\t\t\t\tnx(57),\n\t\t\t\tnx(52), // for _, y := range... (y == 2)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"x\", \"-1\",\n\t\t\t\t\t\"y\", \"2\"),\n\t\t\t\tnx(56), // result = append(result, y)\n\t\t\t\tnx(57),\n\t\t\t\tnx(52), // for _, y := range... (y == 3)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"x\", \"-1\",\n\t\t\t\t\t\"y\", \"3\"),\n\t\t\t\tnx(54), // break\n\t\t\t\tnx(52),\n\t\t\t\tnx(57),\n\t\t\t\tnx(58), // result = append(result, x)\n\t\t\t\tnx(59),\n\n\t\t\t\tnx(48), // for _, x := range... (x == -2)\n\t\t\t\tnx(49), // if x == -4\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"result\", \"[]int len: 3, cap: 4, [1,2,-1]\",\n\t\t\t\t\t\"x\", \"-2\"),\n\t\t\t\tnx(52), // for _, y := range... (y == 1)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tnx(56), // result = append(result, y)\n\t\t\t\tnx(57),\n\t\t\t\tnx(52), // for _, y := range... (y == 2)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tnx(56), // result = append(result, y)\n\t\t\t\tnx(57),\n\t\t\t\tnx(52), // for _, y := range... (y == 3)\n\t\t\t\tnx(53), // if y == 3\n\t\t\t\tnx(54), // break\n\t\t\t\tnx(52),\n\t\t\t\tnx(57),\n\t\t\t\tnx(58), // result = append(result, x)\n\t\t\t\tnx(59),\n\n\t\t\t\tnx(48), // for _, x := range... (x == -4)\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"result\", \"[]int len: 6, cap: 8, [1,2,-1,1,2,-2]\",\n\t\t\t\t\t\"x\", \"-4\"),\n\t\t\t\tnx(49), // if x == -4\n\t\t\t\tnx(50), // break\n\t\t\t\tnx(48),\n\t\t\t\tnx(59),\n\t\t\t\tnx(60),\n\t\t\t\tnx(61),\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestBreak2\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestBreak2\"),\n\n\t\t\t\t{contContinue, 63}, // TestBreak2\n\t\t\t\tnx(64),\n\t\t\t\tnx(65),\n\n\t\t\t\tnx(66), // for _, x := range (x == -1)\n\t\t\t\tnx(67), // for _, y := range (y == 1)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(74), // result = append(result, y)\n\t\t\t\tnx(75),\n\n\t\t\t\tnx(67), // for _, y := range (y == 2)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(74), // result = append(result, y)\n\t\t\t\tnx(75),\n\n\t\t\t\tnx(67), // for _, y := range (y == 3)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(69), // break\n\t\t\t\tnx(67),\n\t\t\t\tnx(75),\n\t\t\t\tnx(76), // result = append(result, x)\n\t\t\t\tnx(77),\n\n\t\t\t\tnx(66), // for _, x := range (x == -2)\n\t\t\t\tnx(67), // for _, y := range (y == 1)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(74), // result = append(result, y)\n\t\t\t\tnx(75),\n\n\t\t\t\tnx(67), // for _, y := range (y == 2)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(74), // result = append(result, y)\n\t\t\t\tnx(75),\n\n\t\t\t\tnx(67), // for _, y := range (y == 3)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(69), // break\n\t\t\t\tnx(67),\n\t\t\t\tnx(75),\n\t\t\t\tnx(76), // result = append(result, x)\n\t\t\t\tnx(77),\n\n\t\t\t\tnx(66), // for _, x := range (x == -4)\n\t\t\t\tnx(67), // for _, y := range (y == 1)\n\t\t\t\tnx(68), // if y == 3\n\t\t\t\tnx(71), // if x == -4\n\t\t\t\tnx(72), // break outer\n\t\t\t\tnx(67),\n\t\t\t\tnx(75),\n\t\t\t\tnx(66),\n\t\t\t\tnx(77),\n\t\t\t\tnx(78),\n\t\t\t\tnx(79),\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestMultiCont0\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestMultiCont0\"),\n\t\t\t\t{contContinue, 81},\n\t\t\t\tnx(82),\n\t\t\t\tnx(84),\n\t\t\t\tnx(85), // for _, w := range (w == 1000)\n\t\t\t\tnx(86), // result = append(result, w)\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"w\", \"1000\",\n\t\t\t\t\t\"result\", \"[]int len: 0, cap: 10, []\"),\n\t\t\t\tnx(87), // if w == 2000\n\t\t\t\tassertLocals(t, \"result\", \"w\"),\n\t\t\t\tassertEval(t, \"result\", \"[]int len: 1, cap: 10, [1000]\"),\n\t\t\t\tnx(90), // for _, x := range (x == 100)\n\t\t\t\tnx(91), // for _, y := range (y == 10)\n\t\t\t\tnx(92), // result = append(result, y)\n\t\t\t\tassertLocals(t, \"result\", \"w\", \"x\", \"y\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"w\", \"1000\",\n\t\t\t\t\t\"x\", \"100\",\n\t\t\t\t\t\"y\", \"10\"),\n\n\t\t\t\tnx(93), // for _, z := range (z == 1)\n\t\t\t\tnx(94), // if z&1 == 1\n\t\t\t\tassertLocals(t, \"result\", \"w\", \"x\", \"y\", \"z\"),\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"w\", \"1000\",\n\t\t\t\t\t\"x\", \"100\",\n\t\t\t\t\t\"y\", \"10\",\n\t\t\t\t\t\"z\", \"1\"),\n\t\t\t\tnx(95), // continue\n\n\t\t\t\tnx(93), // for _, z := range (z == 2)\n\t\t\t\tnx(94), // if z&1 == 1\n\t\t\t\tassertEval(t, \"z\", \"2\"),\n\t\t\t\tnx(97), // result = append(result, z)\n\t\t\t\tnx(98), // if z >= 4 {\n\t\t\t\tnx(101),\n\n\t\t\t\tnx(93), // for _, z := range (z == 3)\n\t\t\t\tnx(94), // if z&1 == 1\n\t\t\t\tassertEval(t, \"z\", \"3\"),\n\t\t\t\tnx(95), // continue\n\n\t\t\t\tnx(93), // for _, z := range (z == 4)\n\t\t\t\tnx(94), // if z&1 == 1\n\t\t\t\tassertEval(t, \"z\", \"4\"),\n\t\t\t\tnx(97), // result = append(result, z)\n\t\t\t\tassertEval(t, \"result\", \"[]int len: 3, cap: 10, [1000,10,2]\"),\n\t\t\t\tnx(98), // if z >= 4 {\n\t\t\t\tnx(99), // continue W\n\t\t\t\tnx(93),\n\t\t\t\tnx(101),\n\t\t\t\tnx(91),\n\t\t\t\tnx(103),\n\t\t\t\tnx(90),\n\t\t\t\tnx(105),\n\n\t\t\t\tnx(85), // for _, w := range (w == 2000)\n\t\t\t\tnx(86), // result = append(result, w)\n\t\t\t\tnx(87), // if w == 2000\n\t\t\t\tassertEval(t,\n\t\t\t\t\t\"w\", \"2000\",\n\t\t\t\t\t\"result\", \"[]int len: 5, cap: 10, [1000,10,2,4,2000]\"),\n\t\t\t\tnx(88), // break\n\t\t\t\tnx(85),\n\t\t\t\tnx(106),\n\t\t\t\tnx(107), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestPanickyIterator1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestPanickyIterator1\"),\n\t\t\t\t{contContinue, 110},\n\t\t\t\tnx(111),\n\t\t\t\tnx(112),\n\t\t\t\tnx(116), // for _, z := range (z == 1)\n\t\t\t\tnx(117), // result = append(result, z)\n\t\t\t\tnx(118), // if z == 4\n\t\t\t\tnx(121),\n\n\t\t\t\tnx(116), // for _, z := range (z == 2)\n\t\t\t\tnx(117), // result = append(result, z)\n\t\t\t\tnx(118), // if z == 4\n\t\t\t\tnx(121),\n\n\t\t\t\tnx(116), // for _, z := range (z == 3)\n\t\t\t\tnx(117), // result = append(result, z)\n\t\t\t\tnx(118), // if z == 4\n\t\t\t\tnx(121),\n\n\t\t\t\tnx(116), // for _, z := range (z == 4)\n\t\t\t\tnx(117), // result = append(result, z)\n\t\t\t\tnx(118), // if z == 4\n\t\t\t\tnx(119), // break\n\n\t\t\t\tnx(112), // defer func()\n\t\t\t\tnx(113), // r := recover()\n\t\t\t\tnx(114), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestPanickyIterator2\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestPanickyIterator2\"),\n\t\t\t\t{contContinue, 125},\n\t\t\t\tnx(126),\n\t\t\t\tnx(127),\n\t\t\t\tnx(131), // for _, x := range (x == 100)\n\t\t\t\tnx(132),\n\t\t\t\tnx(133),\n\t\t\t\tnx(135), // for _, y := range (y == 10)\n\t\t\t\tnx(136), // result = append(result, y)\n\t\t\t\tnx(139), // for k, z := range (k == 0, z == 1)\n\t\t\t\tnx(140), // result = append(result, z)\n\t\t\t\tnx(141), // if k == 1\n\t\t\t\tnx(144),\n\n\t\t\t\tnx(139), // for k, z := range (k == 1, z == 2)\n\t\t\t\tnx(140), // result = append(result, z)\n\t\t\t\tnx(141), // if k == 1\n\t\t\t\tnx(142), // break Y\n\t\t\t\tnx(135),\n\t\t\t\tnx(145),\n\t\t\t\tnx(127), // defer func()\n\t\t\t\tnx(128), // r := recover()\n\t\t\t\tnx(129), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestPanickyIteratorWithNewDefer\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestPanickyIteratorWithNewDefer\"),\n\t\t\t\t{contContinue, 149},\n\t\t\t\tnx(150),\n\t\t\t\tnx(151),\n\t\t\t\tnx(155), // for _, x := range (x == 100)\n\t\t\t\tnx(156),\n\t\t\t\tnx(157),\n\t\t\t\tnx(159), // for _, y := range (y == 10)\n\t\t\t\tnx(160),\n\t\t\t\tnx(163), // result = append(result, y)\n\t\t\t\tnx(166), // for k, z := range (k == 0, z == 1)\n\t\t\t\tnx(167), // result = append(result, z)\n\t\t\t\tnx(168), // if k == 1\n\t\t\t\tnx(171),\n\n\t\t\t\tnx(166), // for k, z := range (k == 0, z == 1)\n\t\t\t\tnx(167), // result = append(result, z)\n\t\t\t\tnx(168), // if k == 1\n\t\t\t\tnx(169), // break Y\n\t\t\t\tnx(159),\n\t\t\t\tnx(172),\n\t\t\t\tnx(160), // defer func()\n\t\t\t\tnx(161), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestLongReturn\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestLongReturn\"),\n\t\t\t\t{contContinue, 181},\n\t\t\t\tnx(182), // for _, x := range (x == 1)\n\t\t\t\tnx(183), // for _, y := range (y == 10)\n\t\t\t\tnx(184), // if y == 10\n\t\t\t\tnx(185), // return\n\t\t\t\tnx(183),\n\t\t\t\tnx(187),\n\t\t\t\tnx(182),\n\t\t\t\tnx(189),\n\t\t\t\tnx(178), // into TestLongReturnWrapper, fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestGotoA1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestGotoA1\"),\n\t\t\t\t{contContinue, 192},\n\t\t\t\tnx(193),\n\t\t\t\tnx(194), // for _, x := range (x == -1)\n\t\t\t\tnx(195), // result = append(result, x)\n\t\t\t\tnx(196), // if x == -4\n\t\t\t\tnx(199), // for _, y := range (y == 1)\n\t\t\t\tnx(200), // if y == 3\n\t\t\t\tnx(203), // result = append(result, y)\n\t\t\t\tnx(204),\n\n\t\t\t\tnx(199), // for _, y := range (y == 2)\n\t\t\t\tnx(200), // if y == 3\n\t\t\t\tnx(203), // result = append(result, y)\n\t\t\t\tnx(204),\n\n\t\t\t\tnx(199), // for _, y := range (y == 3)\n\t\t\t\tnx(200), // if y == 3\n\t\t\t\tnx(201), // goto A\n\t\t\t\tnx(199),\n\t\t\t\tnx(204),\n\t\t\t\tnx(206), // result = append(result, x)\n\t\t\t\tnx(207),\n\n\t\t\t\tnx(194), // for _, x := range (x == -4)\n\t\t\t\tnx(195), // result = append(result, x)\n\t\t\t\tnx(196), // if x == -4\n\t\t\t\tnx(197), // break\n\t\t\t\tnx(194),\n\t\t\t\tnx(207),\n\t\t\t\tnx(208), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestGotoB1\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestGotoB1\"),\n\t\t\t\t{contContinue, 211},\n\t\t\t\tnx(212),\n\t\t\t\tnx(213), // for _, x := range (x == -1)\n\t\t\t\tnx(214), // result = append(result, x)\n\t\t\t\tnx(215), // if x == -4\n\t\t\t\tnx(218), // for _, y := range (y == 1)\n\t\t\t\tnx(219), // if y == 3\n\t\t\t\tnx(222), // result = append(result, y)\n\t\t\t\tnx(223),\n\n\t\t\t\tnx(218), // for _, y := range (y == 2)\n\t\t\t\tnx(219), // if y == 3\n\t\t\t\tnx(222), // result = append(result, y)\n\t\t\t\tnx(223),\n\n\t\t\t\tnx(218), // for _, y := range (y == 3)\n\t\t\t\tnx(219), // if y == 3\n\t\t\t\tnx(220), // goto B\n\t\t\t\tnx(218),\n\t\t\t\tnx(223),\n\t\t\t\tnx(213),\n\t\t\t\tnx(225),\n\t\t\t\tnx(227), // result = append(result, 999)\n\t\t\t\tnx(228), // fmt.Println\n\t\t\t})\n\t\t})\n\n\t\tt.Run(\"TestRecur\", func(t *testing.T) {\n\t\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t\tfuncBreak(t, \"main.TestRecur\"),\n\t\t\t\t{contContinue, 231},\n\t\t\t\tclearBreak(t),\n\t\t\t\tnx(232), // result := []int{}\n\t\t\t\tassertEval(t, \"n\", \"3\"),\n\t\t\t\tnx(233), // if n > 0 {\n\t\t\t\tnx(234), // TestRecur\n\n\t\t\t\tnx(236), // for _, x := range (x == 10)\n\t\t\t\tassertFunc(t, \"main.TestRecur\"),\n\t\t\t\tassertEval(t, \"n\", \"3\"),\n\t\t\t\tnx(237), // result = ...\n\t\t\t\tassertFunc(t, \"main.TestRecur-range1\"),\n\t\t\t\tassertEval(t, \"x\", \"10\", \"n\", \"3\"),\n\t\t\t\tnx(238), // if n == 3\n\t\t\t\tnx(239), // TestRecur(0)\n\t\t\t\tnx(241),\n\n\t\t\t\tnx(236), // for _, x := range (x == 20)\n\t\t\t\tnx(237), // result = ...\n\t\t\t\tassertEval(t, \"x\", \"20\", \"n\", \"3\"),\n\t\t\t})\n\t\t})\n\t})\n}\n\nfunc TestStepIntoCoroutine(t *testing.T) {\n\tskipOn(t, \"not working due to optimizations\", \"386\")\n\twithTestProcessArgs(\"backwardsiter\", t, \".\", []string{}, 0, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\ttestseq2intl(t, fixture, grp, p, nil, []seqTest{\n\t\t\t{contContinueToBreakpoint, 20}, // fmt.Println(next()) -- first call\n\t\t\t{contStep, 9},                  // func(yield)\n\t\t\t{contNext, 10},                 // for...\n\t\t\t{contNext, 11},                 // if !yield\n\t\t\t{contStep, 20},                 // fmt.Println(next()) -- first call (returning from next)\n\t\t\t{contNext, 21},                 // fmt.Println(next()) -- second call\n\t\t\t{contStep, 11},                 // if !yield\n\t\t\t{contNext, 10},                 // for...\n\t\t\t{contNext, 11},                 // if !yield\n\t\t\t{contStep, 21},                 // fmt.Println(next()) -- second call (returning from next)\n\t\t\t{contNext, 22},                 // fmt.Println(next()) -- third call\n\t\t\t{contNext, 23},                 // stop()\n\t\t\t{contStep, 11},                 // if !yield\n\t\t})\n\t})\n}\n"
  },
  {
    "path": "pkg/proc/target.go",
    "content": "package proc\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc/internal/ebpf\"\n)\n\nvar (\n\t// ErrNotRecorded is returned when an action is requested that is\n\t// only possible on recorded (traced) programs.\n\tErrNotRecorded = errors.New(\"not a recording\")\n\n\t// ErrNoRuntimeAllG is returned when the runtime.allg list could\n\t// not be found.\n\tErrNoRuntimeAllG = errors.New(\"could not find goroutine array\")\n\n\t// ErrProcessDetached indicates that we detached from the target process.\n\tErrProcessDetached = errors.New(\"detached from the process\")\n)\n\ntype LaunchFlags uint8\n\nconst (\n\tLaunchForeground LaunchFlags = 1 << iota\n\tLaunchDisableASLR\n)\n\n// Target represents the process being debugged.\ntype Target struct {\n\tProcess\n\n\tproc   ProcessInternal\n\trecman RecordingManipulationInternal\n\n\tpid     int\n\tCmdLine string\n\n\t// StopReason describes the reason why the target process is stopped.\n\t// A process could be stopped for multiple simultaneous reasons, in which\n\t// case only one will be reported.\n\tStopReason StopReason\n\n\t// currentThread is the thread that will be used by next/step/stepout and to evaluate variables if no goroutine is selected.\n\tcurrentThread Thread\n\n\t// Goroutine that will be used by default to set breakpoint, eval variables, etc...\n\t// Normally selectedGoroutine is currentThread.GetG, it will not be only if SwitchGoroutine is called with a goroutine that isn't attached to a thread\n\tselectedGoroutine *G\n\n\t// fncallForG stores a mapping of current active function calls.\n\tfncallForG map[int64]*callInjection\n\n\tasyncPreemptChanged bool  // runtime/debug.asyncpreemptoff was changed\n\tasyncPreemptOff     int64 // cached value of runtime/debug.asyncpreemptoff\n\n\t// gcache is a cache for Goroutines that we\n\t// have read and parsed from the targets memory.\n\t// This must be cleared whenever the target is resumed.\n\tgcache goroutineCache\n\t// scache is a cache for stack traces.\n\tscache stackCache\n\n\tiscgo *bool\n\n\t// exitStatus is the exit status of the process we are debugging.\n\t// Saved here to relay to any future commands.\n\texitStatus int\n\n\t// fakeMemoryRegistry contains the list of all compositeMemory objects\n\t// created since the last restart, it exists so that registerized variables\n\t// can be given a unique address.\n\tfakeMemoryRegistry    []*compositeMemory\n\tfakeMemoryRegistryMap map[string]*compositeMemory\n\n\tpartOfGroup bool\n\n\t// onInitialGoImage ensures that Go-specific breakpoints are only set up\n\t// once when transitioning from no Go images to having a Go image.\n\tonInitialGoImage sync.Once\n}\n\ntype KeepSteppingBreakpoints uint8\n\nconst (\n\tHaltKeepsSteppingBreakpoints KeepSteppingBreakpoints = 1 << iota\n\tTracepointKeepsSteppingBreakpoints\n)\n\n// ErrProcessExited indicates that the process has exited and contains both\n// process id and exit status.\ntype ErrProcessExited struct {\n\tPid    int\n\tStatus int\n}\n\nfunc (pe ErrProcessExited) Error() string {\n\treturn fmt.Sprintf(\"Process %d has exited with status %d\", pe.Pid, pe.Status)\n}\n\n// ErrBadBinaryInfo indicates that loading binary info for the process failed.\ntype ErrBadBinaryInfo struct {\n\tErr error\n}\n\nfunc (e *ErrBadBinaryInfo) Error() string {\n\treturn e.Err.Error()\n}\n\n// StopReason describes the reason why the target process is stopped.\n// A process could be stopped for multiple simultaneous reasons, in which\n// case only one will be reported.\ntype StopReason uint8\n\n// String maps StopReason to string representation.\nfunc (sr StopReason) String() string {\n\tswitch sr {\n\tcase StopUnknown:\n\t\treturn \"unknown\"\n\tcase StopLaunched:\n\t\treturn \"launched\"\n\tcase StopAttached:\n\t\treturn \"attached\"\n\tcase StopExited:\n\t\treturn \"exited\"\n\tcase StopBreakpoint:\n\t\treturn \"breakpoint\"\n\tcase StopHardcodedBreakpoint:\n\t\treturn \"hardcoded breakpoint\"\n\tcase StopManual:\n\t\treturn \"manual\"\n\tcase StopNextFinished:\n\t\treturn \"next finished\"\n\tcase StopCallReturned:\n\t\treturn \"call returned\"\n\tcase StopWatchpoint:\n\t\treturn \"watchpoint\"\n\tcase StopSharedLibLoaded:\n\t\treturn \"shared library loaded\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nconst (\n\tStopUnknown             StopReason = iota\n\tStopLaunched                       // The process was just launched\n\tStopAttached                       // The debugger stopped the process after attaching\n\tStopExited                         // The target process terminated\n\tStopBreakpoint                     // The target process hit one or more software breakpoints\n\tStopHardcodedBreakpoint            // The target process hit a hardcoded breakpoint (for example runtime.Breakpoint())\n\tStopManual                         // A manual stop was requested\n\tStopNextFinished                   // The next/step/stepout/stepInstruction command terminated\n\tStopCallReturned                   // An injected call completed\n\tStopWatchpoint                     // The target process hit one or more watchpoints\n\tStopSharedLibLoaded                // A Go shared library was loaded\n)\n\n// DisableAsyncPreemptEnv returns a process environment (like os.Environ)\n// where asyncpreemptoff is set to 1.\nfunc DisableAsyncPreemptEnv() []string {\n\tenv := os.Environ()\n\tfor i := range env {\n\t\tif strings.HasPrefix(env[i], \"GODEBUG=\") {\n\t\t\t// Go 1.14 asynchronous preemption mechanism is incompatible with\n\t\t\t// debuggers, see: https://github.com/golang/go/issues/36494\n\t\t\tenv[i] += \",asyncpreemptoff=1\"\n\t\t}\n\t}\n\treturn env\n}\n\n// newTarget returns an initialized Target object.\n// The p argument can optionally implement the RecordingManipulation interface.\nfunc (grp *TargetGroup) newTarget(p ProcessInternal, pid int, currentThread Thread, path, cmdline string) (*Target, error) {\n\tentryPoint, err := p.EntryPoint()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = p.BinInfo().LoadBinaryInfo(path, entryPoint, grp.cfg.DebugInfoDirs)\n\tif err != nil {\n\t\t// If this is a non-Go binary, log a warning and continue.\n\t\t// A Go shared object may be loaded later via dlopen.\n\t\tif len(p.BinInfo().Images) > 0 && !p.BinInfo().Images[0].IsGo {\n\t\t\tlogflags.DebuggerLogger().Warnf(\"Initial binary is not a Go binary: %v\", err)\n\t\t} else {\n\t\t\treturn nil, &ErrBadBinaryInfo{Err: err}\n\t\t}\n\t}\n\tfor _, image := range p.BinInfo().Images {\n\t\tif image.loadErr != nil && image.IsGo {\n\t\t\treturn nil, &ErrBadBinaryInfo{Err: image.loadErr}\n\t\t}\n\t}\n\n\tt := &Target{\n\t\tProcess:       p,\n\t\tproc:          p,\n\t\tfncallForG:    make(map[int64]*callInjection),\n\t\tcurrentThread: currentThread,\n\t\tpid:           pid,\n\t\tCmdLine:       cmdline,\n\t}\n\n\tif recman, ok := p.(RecordingManipulationInternal); ok {\n\t\tt.recman = recman\n\t} else {\n\t\tt.recman = &dummyRecordingManipulation{}\n\t}\n\n\tg, _ := GetG(currentThread)\n\tt.selectedGoroutine = g\n\n\tt.Breakpoints().Logical = grp.LogicalBreakpoints\n\tt.createUnrecoveredPanicBreakpoint()\n\tt.createFatalThrowBreakpoint()\n\tt.createPluginOpenBreakpoint()\n\n\tt.gcache.init(p.BinInfo())\n\tt.scache.init()\n\tt.fakeMemoryRegistryMap = make(map[string]*compositeMemory)\n\n\tif grp.cfg.DisableAsyncPreempt {\n\t\tsetAsyncPreemptOff(t, 1)\n\t}\n\n\treturn t, nil\n}\n\n// Pid returns the pid of the target process.\nfunc (t *Target) Pid() int {\n\treturn t.pid\n}\n\n// IsCgo returns the value of runtime.iscgo\nfunc (t *Target) IsCgo() bool {\n\tif t.iscgo != nil {\n\t\treturn *t.iscgo\n\t}\n\tscope := globalScope(t, t.BinInfo(), t.BinInfo().Images[0], t.Memory())\n\tiscgov, err := scope.findGlobal(\"runtime\", \"iscgo\")\n\tif err == nil {\n\t\tiscgov.loadValue(loadFullValue)\n\t\tif iscgov.Unreadable == nil {\n\t\t\tt.iscgo = new(bool)\n\t\t\t*t.iscgo = constant.BoolVal(iscgov.Value)\n\t\t\treturn constant.BoolVal(iscgov.Value)\n\t\t}\n\t}\n\treturn false\n}\n\n// Valid returns true if this Process can be used. When it returns false it\n// also returns an error describing why the Process is invalid (either\n// ErrProcessExited or ErrProcessDetached).\nfunc (t *Target) Valid() (bool, error) {\n\tok, err := t.proc.Valid()\n\tif !ok && err != nil {\n\t\tif pe, ok := err.(ErrProcessExited); ok {\n\t\t\tpe.Status = t.exitStatus\n\t\t\terr = pe\n\t\t}\n\t}\n\treturn ok, err\n}\n\n// SupportsFunctionCalls returns whether or not the backend supports\n// calling functions during a debug session.\n// Currently only non-recorded processes running on AMD64 support\n// function calls.\nfunc (t *Target) SupportsFunctionCalls() bool {\n\treturn t.Process.BinInfo().Arch.Name == \"amd64\" || (t.Process.BinInfo().Arch.Name == \"arm64\" && t.Process.BinInfo().GOOS != \"windows\") || t.Process.BinInfo().Arch.Name == \"ppc64le\" || t.Process.BinInfo().Arch.Name == \"loong64\"\n}\n\n// ClearCaches clears internal caches that should not survive a restart.\n// This should be called anytime the target process executes instructions.\nfunc (t *Target) ClearCaches() {\n\tt.clearFakeMemory()\n\tclear(t.scache.m)\n\tt.gcache.Clear()\n\tt.BinInfo().moduleDataCache = nil\n\tfor _, thread := range t.ThreadList() {\n\t\tthread.Common().g = nil\n\t}\n}\n\n// Restart will start the process group over from the location specified by the \"from\" locspec.\n// This is only useful for recorded targets.\n// Restarting of a normal process happens at a higher level (debugger.Restart).\nfunc (grp *TargetGroup) Restart(from string) error {\n\tif len(grp.targets) != 1 {\n\t\tpanic(\"multiple targets not implemented\")\n\t}\n\tfor _, t := range grp.targets {\n\t\tt.ClearCaches()\n\t}\n\tt := grp.Selected\n\tcurrentThread, err := t.recman.Restart(grp.cctx, from)\n\tif err != nil {\n\t\treturn err\n\t}\n\tt.currentThread = currentThread\n\tt.selectedGoroutine, _ = GetG(t.CurrentThread())\n\tif from != \"\" {\n\t\tt.StopReason = StopManual\n\t} else {\n\t\tt.StopReason = StopLaunched\n\t}\n\treturn nil\n}\n\n// SelectedGoroutine returns the currently selected goroutine.\nfunc (t *Target) SelectedGoroutine() *G {\n\treturn t.selectedGoroutine\n}\n\n// SwitchGoroutine will change the selected and active goroutine.\nfunc (t *Target) SwitchGoroutine(g *G) error {\n\tif ok, err := t.Valid(); !ok {\n\t\treturn err\n\t}\n\tif g == nil {\n\t\treturn nil\n\t}\n\tif g.Thread != nil {\n\t\treturn t.SwitchThread(g.Thread.ThreadID())\n\t}\n\tt.selectedGoroutine = g\n\treturn nil\n}\n\n// SwitchThread will change the selected and active thread.\nfunc (t *Target) SwitchThread(tid int) error {\n\tif ok, err := t.Valid(); !ok {\n\t\treturn err\n\t}\n\tif th, ok := t.FindThread(tid); ok {\n\t\tt.currentThread = th\n\t\tt.selectedGoroutine, _ = GetG(t.CurrentThread())\n\t\treturn nil\n\t}\n\treturn fmt.Errorf(\"thread %d does not exist\", tid)\n}\n\n// setAsyncPreemptOff enables or disables async goroutine preemption by\n// writing the value 'v' to runtime.debug.asyncpreemptoff.\n// A value of '1' means off, a value of '0' means on.\nfunc setAsyncPreemptOff(p *Target, v int64) {\n\tif producer := p.BinInfo().Producer(); producer == \"\" || !goversion.ProducerAfterOrEqual(producer, 1, 14) {\n\t\treturn\n\t}\n\tlogger := p.BinInfo().logger\n\tscope := globalScope(p, p.BinInfo(), p.BinInfo().Images[0], p.Memory())\n\t// +rtype -var debug anytype\n\tdebugv, err := scope.findGlobal(\"runtime\", \"debug\")\n\tif err != nil {\n\t\tlogger.Warnf(\"could not find runtime/debug variable (or unreadable): %v\", err)\n\t\treturn\n\t}\n\tif debugv.Unreadable != nil {\n\t\tlogger.Warnf(\"runtime/debug variable unreadable: %v\", err, debugv.Unreadable)\n\t\treturn\n\t}\n\tasyncpreemptoffv, err := debugv.structField(\"asyncpreemptoff\") // +rtype int32\n\tif err != nil {\n\t\tlogger.Warnf(\"could not find asyncpreemptoff field: %v\", err)\n\t\treturn\n\t}\n\tasyncpreemptoffv.loadValue(loadFullValue)\n\tif asyncpreemptoffv.Unreadable != nil {\n\t\tlogger.Warnf(\"asyncpreemptoff field unreadable: %v\", asyncpreemptoffv.Unreadable)\n\t\treturn\n\t}\n\tp.asyncPreemptChanged = true\n\tp.asyncPreemptOff, _ = constant.Int64Val(asyncpreemptoffv.Value)\n\n\terr = scope.setValue(asyncpreemptoffv, newConstant(constant.MakeInt64(v), scope.BinInfo, scope.Mem), \"\")\n\tif err != nil {\n\t\tlogger.Warnf(\"could not set asyncpreemptoff %v\", err)\n\t}\n}\n\n// createUnrecoveredPanicBreakpoint creates the unrecoverable-panic breakpoint.\nfunc (t *Target) createUnrecoveredPanicBreakpoint() {\n\tpanicpcs, err := FindFunctionLocation(t.Process, \"runtime.startpanic\", 0)\n\tif _, isFnNotFound := err.(*ErrFunctionNotFound); isFnNotFound {\n\t\tpanicpcs, err = FindFunctionLocation(t.Process, \"runtime.fatalpanic\", 0)\n\t}\n\tif err == nil {\n\t\tbp, err := t.SetBreakpoint(unrecoveredPanicID, panicpcs[0], UserBreakpoint, nil)\n\t\tif err == nil {\n\t\t\tbp.Logical.Name = UnrecoveredPanic\n\t\t\tbp.Logical.Variables = []string{\"runtime.curg._panic.arg\"}\n\t\t\tbp.Logical.Set.PidAddrs = append(bp.Logical.Set.PidAddrs, PidAddr{Pid: t.Pid(), Addr: panicpcs[0]})\n\t\t}\n\t}\n}\n\n// createFatalThrowBreakpoint creates the a breakpoint as runtime.fatalthrow.\nfunc (t *Target) createFatalThrowBreakpoint() {\n\tsetFatalThrow := func(pcs []uint64, err error) {\n\t\tif err == nil {\n\t\t\tbp, err := t.SetBreakpoint(fatalThrowID, pcs[0], UserBreakpoint, nil)\n\t\t\tif err == nil {\n\t\t\t\tbp.Logical.Name = FatalThrow\n\t\t\t\tbp.Logical.Set.PidAddrs = append(bp.Logical.Set.PidAddrs, PidAddr{Pid: t.Pid(), Addr: pcs[0]})\n\t\t\t}\n\t\t}\n\t}\n\tsetFatalThrow(FindFunctionLocation(t.Process, \"runtime.throw\", 0))\n\tsetFatalThrow(FindFunctionLocation(t.Process, \"runtime.fatal\", 0))\n\tsetFatalThrow(FindFunctionLocation(t.Process, \"runtime.winthrow\", 0))\n\tsetFatalThrow(FindFunctionLocation(t.Process, \"runtime.fatalsignal\", 0))\n}\n\n// createPluginOpenBreakpoint creates a breakpoint at the return instruction\n// of plugin.Open (if it exists) that will try to enable suspended\n// breakpoints.\nfunc (t *Target) createPluginOpenBreakpoint() {\n\tretpcs, _ := findRetPC(t, \"plugin.Open\")\n\tfor _, retpc := range retpcs {\n\t\tbp, err := t.SetBreakpoint(0, retpc, PluginOpenBreakpoint, nil)\n\t\tif err != nil {\n\t\t\tt.BinInfo().logger.Errorf(\"could not set plugin.Open breakpoint: %v\", err)\n\t\t} else {\n\t\t\tbp.Breaklets[len(bp.Breaklets)-1].callback = t.pluginOpenCallback\n\t\t}\n\t}\n}\n\n// CreateSharedLibBreakpoint sets a breakpoint at the given address (the\n// dynamic linker's r_brk notification function) to detect shared library\n// loading. When a new Go shared library is detected, Go-specific breakpoints\n// are set up.\nfunc (t *Target) CreateSharedLibBreakpoint(rBrkAddr uint64) {\n\tif rBrkAddr == 0 {\n\t\treturn\n\t}\n\tbp, err := t.SetBreakpoint(0, rBrkAddr, SharedLibBreakpoint, nil)\n\tif err != nil {\n\t\tt.BinInfo().logger.Errorf(\"could not set shared lib breakpoint at %#x: %v\", rBrkAddr, err)\n\t\treturn\n\t}\n\tbp.Breaklets[len(bp.Breaklets)-1].callback = t.sharedLibCallback\n}\n\nfunc (t *Target) sharedLibCallback(th Thread, tgt *Target) (bool, error) {\n\t// Check if any newly loaded image is a Go binary.\n\t// ElfUpdateSharedObjects has already run by this point (called in stop1\n\t// before breakpoint callbacks), so new images are already in BinInfo.\n\tif !tgt.BinInfo().HasGoImage() {\n\t\treturn false, nil\n\t}\n\n\tdidRun := false\n\ttgt.onInitialGoImage.Do(func() {\n\t\tdidRun = true\n\t\tlogger := logflags.DebuggerLogger()\n\t\tlogger.Info(\"Go shared library detected, setting up Go-specific breakpoints\")\n\n\t\ttgt.createUnrecoveredPanicBreakpoint()\n\t\ttgt.createFatalThrowBreakpoint()\n\t\ttgt.createPluginOpenBreakpoint()\n\t})\n\n\treturn didRun, nil\n}\n\n// CurrentThread returns the currently selected thread which will be used\n// for next/step/stepout and for reading variables, unless a goroutine is\n// selected.\nfunc (t *Target) CurrentThread() Thread {\n\treturn t.currentThread\n}\n\ntype UProbeTraceResult struct {\n\tFnAddr       int\n\tGoroutineID  int\n\tIsRet        bool\n\tInputParams  []*Variable\n\tReturnParams []*Variable\n}\n\nfunc (t *Target) GetBufferedTracepoints() []*UProbeTraceResult {\n\tvar results []*UProbeTraceResult\n\ttracepoints := t.proc.GetBufferedTracepoints()\n\tconvertInputParamToVariable := func(ip *ebpf.RawUProbeParam) *Variable {\n\t\tv := &Variable{}\n\t\tv.RealType = ip.RealType\n\t\tv.Len = ip.Len\n\t\tv.Base = ip.Base\n\t\tv.Addr = ip.Addr\n\t\tv.Kind = ip.Kind\n\n\t\tif v.RealType == nil {\n\t\t\tv.Unreadable = errors.New(\"type not supported by ebpf\")\n\t\t\treturn v\n\t\t}\n\n\t\tcachedMem := CreateLoadedCachedMemory(ip.Data)\n\t\tcompMem, _ := CreateCompositeMemory(cachedMem, t.BinInfo().Arch, op.DwarfRegisters{}, ip.Pieces, ip.RealType.Common().ByteSize)\n\t\tv.mem = compMem\n\n\t\t// Load the value here so that we don't have to export\n\t\t// loadValue outside of proc.\n\t\tv.loadValue(loadFullValue)\n\n\t\treturn v\n\t}\n\tfor _, tp := range tracepoints {\n\t\tr := &UProbeTraceResult{}\n\t\tr.FnAddr = tp.FnAddr\n\t\tr.GoroutineID = tp.GoroutineID\n\t\tr.IsRet = tp.IsRet\n\t\tfor _, ip := range tp.InputParams {\n\t\t\tv := convertInputParamToVariable(ip)\n\t\t\tr.InputParams = append(r.InputParams, v)\n\t\t}\n\t\tfor _, ip := range tp.ReturnParams {\n\t\t\tv := convertInputParamToVariable(ip)\n\t\t\tr.ReturnParams = append(r.ReturnParams, v)\n\t\t}\n\t\tresults = append(results, r)\n\t}\n\treturn results\n}\n\n// ResumeNotify specifies a channel that will be closed the next time\n// Continue finishes resuming the targets.\nfunc (grp *TargetGroup) ResumeNotify(ch chan<- struct{}) {\n\tgrp.cctx.ResumeChan = ch\n}\n\n// RequestManualStop attempts to stop all the processes' threads.\nfunc (grp *TargetGroup) RequestManualStop() error {\n\tgrp.cctx.StopMu.Lock()\n\tdefer grp.cctx.StopMu.Unlock()\n\tgrp.cctx.manualStopRequested = true\n\treturn grp.Selected.proc.RequestManualStop(grp.cctx)\n}\n\nconst (\n\tFakeAddressBase     = 0xbeef000000000000\n\tfakeAddressUnresolv = 0xbeed000000000000 // this address never resolves to memory\n)\n\n// newCompositeMemory creates a new compositeMemory object and registers it.\n// If the same composite memory has been created before it will return a\n// cached object.\n// This caching is primarily done so that registerized variables don't get a\n// different address every time they are evaluated, which would be confusing\n// and leak memory.\nfunc (t *Target) newCompositeMemory(mem MemoryReadWriter, regs op.DwarfRegisters, pieces []op.Piece, descr *locationExpr, size int64) (int64, *compositeMemory, error) {\n\tvar key string\n\tif regs.CFA != 0 && len(pieces) > 0 {\n\t\t// key is created by concatenating the location expression with the CFA,\n\t\t// this combination is guaranteed to be unique between resumes.\n\t\tbuf := new(strings.Builder)\n\t\tfmt.Fprintf(buf, \"%#x \", regs.CFA)\n\t\top.PrettyPrint(buf, descr.instr, t.BinInfo().Arch.RegnumToString)\n\t\tkey = buf.String()\n\n\t\tif cmem := t.fakeMemoryRegistryMap[key]; cmem != nil {\n\t\t\treturn int64(cmem.base), cmem, nil\n\t\t}\n\t}\n\n\tcmem, err := newCompositeMemory(mem, t.BinInfo().Arch, regs, pieces, size)\n\tif err != nil {\n\t\treturn 0, cmem, err\n\t}\n\tt.registerFakeMemory(cmem)\n\tif key != \"\" {\n\t\tt.fakeMemoryRegistryMap[key] = cmem\n\t}\n\treturn int64(cmem.base), cmem, nil\n}\n\nfunc (t *Target) registerFakeMemory(mem *compositeMemory) (addr uint64) {\n\tt.fakeMemoryRegistry = append(t.fakeMemoryRegistry, mem)\n\taddr = FakeAddressBase\n\tif len(t.fakeMemoryRegistry) > 1 {\n\t\tprevMem := t.fakeMemoryRegistry[len(t.fakeMemoryRegistry)-2]\n\t\taddr = uint64(alignAddr(int64(prevMem.base+uint64(len(prevMem.data))), 0x100)) // the call to alignAddr just makes the address look nicer, it is not necessary\n\t}\n\tmem.base = addr\n\treturn addr\n}\n\nfunc (t *Target) findFakeMemory(addr uint64) *compositeMemory {\n\ti := sort.Search(len(t.fakeMemoryRegistry), func(i int) bool {\n\t\tmem := t.fakeMemoryRegistry[i]\n\t\treturn addr <= mem.base || (mem.base <= addr && addr < (mem.base+uint64(len(mem.data))))\n\t})\n\tif i != len(t.fakeMemoryRegistry) {\n\t\tmem := t.fakeMemoryRegistry[i]\n\t\tif mem.base <= addr && addr < (mem.base+uint64(len(mem.data))) {\n\t\t\treturn mem\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (t *Target) clearFakeMemory() {\n\tfor i := range t.fakeMemoryRegistry {\n\t\tt.fakeMemoryRegistry[i] = nil\n\t}\n\tt.fakeMemoryRegistry = t.fakeMemoryRegistry[:0]\n\tt.fakeMemoryRegistryMap = make(map[string]*compositeMemory)\n}\n\n// dwrapUnwrap checks if fn is a dwrap wrapper function and unwraps it if it is.\nfunc (t *Target) dwrapUnwrap(fn *Function) *Function {\n\tif fn == nil {\n\t\treturn nil\n\t}\n\tif !strings.Contains(fn.Name, \"·dwrap·\") && !fn.trampoline {\n\t\treturn fn\n\t}\n\tif unwrap := t.BinInfo().dwrapUnwrapCache[fn.Entry]; unwrap != nil {\n\t\treturn unwrap\n\t}\n\ttext, err := disassemble(t.Memory(), nil, t.Breakpoints(), t.BinInfo(), fn.Entry, fn.End, false)\n\tif err != nil {\n\t\treturn fn\n\t}\n\tfor _, instr := range text {\n\t\tif instr.IsCall() && instr.DestLoc != nil && instr.DestLoc.Fn != nil && !instr.DestLoc.Fn.privateRuntime() {\n\t\t\tt.BinInfo().dwrapUnwrapCache[fn.Entry] = instr.DestLoc.Fn\n\t\t\treturn instr.DestLoc.Fn\n\t\t}\n\t}\n\treturn fn\n}\n\nfunc (t *Target) pluginOpenCallback(Thread, *Target) (bool, error) {\n\tlogger := logflags.DebuggerLogger()\n\tfor _, lbp := range t.Breakpoints().Logical {\n\t\t// If the breakpoint is suspended, materialize it.\n\t\tif !lbp.isSuspendedOnTarget(t) {\n\t\t\tcontinue\n\t\t}\n\n\t\terr := enableBreakpointOnTarget(t, lbp)\n\t\tif err != nil {\n\t\t\tlogger.Debugf(\"could not enable breakpoint %d: %v\", lbp.LogicalID, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tlogger.Debugf(\"suspended breakpoint %d enabled\", lbp.LogicalID)\n\n\t\t// Notify the client.\n\t\tif fn := t.BinInfo().eventsFn; fn != nil {\n\t\t\tfn(&Event{\n\t\t\t\tKind: EventBreakpointMaterialized,\n\t\t\t\tBreakpointMaterializedEventDetails: &BreakpointMaterializedEventDetails{\n\t\t\t\t\tBreakpoint: lbp,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}\n\treturn false, nil\n}\n\nfunc (lbp *LogicalBreakpoint) isSuspendedOnTarget(t *Target) bool {\n\tfor _, bp := range t.Breakpoints().M {\n\t\tif bp.LogicalID() == lbp.LogicalID {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (lbp *LogicalBreakpoint) isSuspendedOnGroup(grp *TargetGroup) bool {\n\tit := ValidTargets{Group: grp}\n\tfor it.Next() {\n\t\tif !lbp.isSuspendedOnTarget(it.Target) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\ntype dummyRecordingManipulation struct{}\n\n// Recorded always returns false for the native proc backend.\nfunc (*dummyRecordingManipulation) Recorded() (bool, string) { return false, \"\" }\n\n// ChangeDirection will always return an error in the native proc backend, only for\n// recorded traces.\nfunc (*dummyRecordingManipulation) ChangeDirection(dir Direction) error {\n\tif dir != Forward {\n\t\treturn ErrNotRecorded\n\t}\n\treturn nil\n}\n\n// GetDirection will always return Forward.\nfunc (*dummyRecordingManipulation) GetDirection() Direction { return Forward }\n\n// When will always return an empty string and nil, not supported on native proc backend.\nfunc (*dummyRecordingManipulation) When() (string, error) { return \"\", nil }\n\n// Checkpoint will always return an error on the native proc backend,\n// only supported for recorded traces.\nfunc (*dummyRecordingManipulation) Checkpoint(string) (int, error) { return -1, ErrNotRecorded }\n\n// Checkpoints will always return an error on the native proc backend,\n// only supported for recorded traces.\nfunc (*dummyRecordingManipulation) Checkpoints() ([]Checkpoint, error) { return nil, ErrNotRecorded }\n\n// ClearCheckpoint will always return an error on the native proc backend,\n// only supported in recorded traces.\nfunc (*dummyRecordingManipulation) ClearCheckpoint(int) error { return ErrNotRecorded }\n\n// Restart will always return an error in the native proc backend, only for\n// recorded traces.\nfunc (*dummyRecordingManipulation) Restart(*ContinueOnceContext, string) (Thread, error) {\n\treturn nil, ErrNotRecorded\n}\n\nvar ErrWaitForNotImplemented = errors.New(\"waitfor not implemented\")\n\nfunc (waitFor *WaitFor) Valid() bool {\n\treturn waitFor != nil && waitFor.Name != \"\"\n}\n"
  },
  {
    "path": "pkg/proc/target_exec.go",
    "content": "package proc\n\nimport (\n\t\"bytes\"\n\t\"debug/dwarf\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/constant\"\n\t\"go/token\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"slices\"\n\t\"strings\"\n\n\t\"golang.org/x/arch/ppc64/ppc64asm\"\n\n\t\"github.com/go-delve/delve/pkg/astutil\"\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/reader\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\nconst maxSkipAutogeneratedWrappers = 5 // maximum recursion depth for skipAutogeneratedWrappers\n\n// ErrNoSourceForPC is returned when the given address\n// does not correspond with a source file location.\ntype ErrNoSourceForPC struct {\n\tpc uint64\n}\n\nfunc (err *ErrNoSourceForPC) Error() string {\n\treturn fmt.Sprintf(\"no source for PC %#x\", err.pc)\n}\n\n// Next resumes the processes in the group, continuing the selected target\n// until the next source line.\nfunc (grp *TargetGroup) Next() (err error) {\n\tif _, err := grp.Valid(); err != nil {\n\t\treturn err\n\t}\n\tif grp.HasSteppingBreakpoints() {\n\t\treturn errors.New(\"next while nexting\")\n\t}\n\n\tif err = next(grp.Selected, false, false); err != nil {\n\t\tgrp.Selected.ClearSteppingBreakpoints()\n\t\treturn\n\t}\n\n\treturn grp.Continue()\n}\n\n// Continue continues execution of the debugged\n// processes. It will continue until it hits a breakpoint\n// or is otherwise stopped.\nfunc (grp *TargetGroup) Continue() error {\n\tif grp.numValid() == 0 {\n\t\t_, err := grp.targets[0].Valid()\n\t\treturn err\n\t}\n\tfor _, dbp := range grp.targets {\n\t\tif isvalid, _ := dbp.Valid(); !isvalid {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, thread := range dbp.ThreadList() {\n\t\t\tthread.Common().CallReturn = false\n\t\t\tthread.Common().returnValues = nil\n\t\t}\n\t\tdbp.Breakpoints().WatchOutOfScope = nil\n\t\tdbp.clearHardcodedBreakpoints()\n\t}\n\tgrp.cctx.CheckAndClearManualStopRequest()\n\tdefer func() {\n\t\t// Make sure we clear internal breakpoints if we simultaneously receive a\n\t\t// manual stop request and hit a breakpoint.\n\t\tif grp.cctx.CheckAndClearManualStopRequest() {\n\t\t\tgrp.finishManualStop()\n\t\t}\n\t}()\n\tfor {\n\t\terr := grp.manageUnsatisfiableBreakpoints()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif grp.cctx.CheckAndClearManualStopRequest() {\n\t\t\tgrp.finishManualStop()\n\t\t\treturn nil\n\t\t}\n\t\tfor _, dbp := range grp.targets {\n\t\t\tdbp.ClearCaches()\n\t\t}\n\t\tlogflags.DebuggerLogger().Debugf(\"ContinueOnce\")\n\t\ttrapthread, stopReason, contOnceErr := grp.procgrp.ContinueOnce(grp.cctx)\n\t\tvar traptgt *Target\n\t\tif trapthread != nil {\n\t\t\ttraptgt = grp.TargetForThread(trapthread.ThreadID())\n\t\t\tif traptgt == nil {\n\t\t\t\treturn fmt.Errorf(\"could not find target for thread %d\", trapthread.ThreadID())\n\t\t\t}\n\t\t} else {\n\t\t\ttraptgt = grp.targets[0]\n\t\t}\n\t\ttraptgt.StopReason = stopReason\n\n\t\tit := ValidTargets{Group: grp}\n\t\tfor it.Next() {\n\t\t\t// Both selectedGoroutine and current thread are stale here, since we can\n\t\t\t// only set their definitive value *after* evaluating breakpoint\n\t\t\t// conditions here we give them temporary non-stale values.\n\t\t\tit.selectedGoroutine = nil\n\t\t\tcurthread := it.currentThread\n\t\t\tfor _, thread := range it.ThreadList() {\n\t\t\t\tif thread.Breakpoint().Breakpoint != nil {\n\t\t\t\t\tit.currentThread = thread\n\t\t\t\t\tthread.Breakpoint().Breakpoint.checkCondition(it.Target, thread, thread.Breakpoint())\n\t\t\t\t}\n\t\t\t}\n\t\t\tit.currentThread = curthread\n\t\t\t// Clear watchpoints that have gone out of scope\n\t\t\tfor _, watchpoint := range it.Breakpoints().WatchOutOfScope {\n\t\t\t\terr := it.ClearBreakpoint(watchpoint.Addr)\n\t\t\t\tif err != nil {\n\t\t\t\t\tlogflags.DebuggerLogger().Errorf(\"could not clear out-of-scope watchpoint: %v\", err)\n\t\t\t\t}\n\t\t\t\tdelete(it.Breakpoints().Logical, watchpoint.LogicalID())\n\t\t\t}\n\t\t\t// Clear inactivated breakpoints\n\t\t\terr := it.clearInactivatedSteppingBreakpoint()\n\t\t\tif err != nil {\n\t\t\t\tlogflags.DebuggerLogger().Errorf(\"could not clear inactivated stepping breakpoints: %v\", err)\n\t\t\t}\n\t\t\tbi := it.BinInfo()\n\t\t\tbi.cancelDownloadsMu.Lock()\n\t\t\tbi.downloadsCtx = nil\n\t\t\tbi.cancelDownloads = nil\n\t\t\tbi.cancelDownloadsMu.Unlock()\n\t\t}\n\n\t\tif contOnceErr != nil {\n\t\t\t// Attempt to refresh status of current thread/current goroutine, see\n\t\t\t// Issue #2078.\n\t\t\t// Errors are ignored because depending on why ContinueOnce failed this\n\t\t\t// might very well not work.\n\t\t\t_ = grp.setCurrentThreads(traptgt, trapthread)\n\t\t\tif pe, ok := contOnceErr.(ErrProcessExited); ok {\n\t\t\t\ttraptgt.exitStatus = pe.Status\n\t\t\t}\n\t\t\treturn contOnceErr\n\t\t}\n\t\tif stopReason == StopLaunched {\n\t\t\tit.Reset()\n\t\t\tfor it.Next() {\n\t\t\t\tit.Target.ClearSteppingBreakpoints()\n\t\t\t}\n\t\t}\n\n\t\tvar callInjectionDone bool\n\t\tvar callErr error\n\t\tvar hcbpErr error\n\t\tit.Reset()\n\t\tfor it.Next() {\n\t\t\tdbp := it.Target\n\t\t\tthreads := dbp.ThreadList()\n\t\t\tif logflags.Debugger() {\n\t\t\t\tlog := logflags.DebuggerLogger()\n\t\t\t\tlog.Debugf(\"callInjection protocol on:\")\n\t\t\t\tfor _, th := range threads {\n\t\t\t\t\tregs, _ := th.Registers()\n\t\t\t\t\tif regs != nil {\n\t\t\t\t\t\tlog.Debugf(\"\\t%d PC=%#x\", th.ThreadID(), regs.PC())\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlog.Debugf(\"\\t%d (no registers)\", th.ThreadID())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcallInjectionDoneThis, callErrThis := callInjectionProtocol(dbp, trapthread, threads)\n\t\t\tcallInjectionDone = callInjectionDone || callInjectionDoneThis\n\t\t\tif callInjectionDoneThis {\n\t\t\t\tdbp.StopReason = StopCallReturned\n\t\t\t}\n\t\t\tif callErrThis != nil && callErr == nil {\n\t\t\t\tcallErr = callErrThis\n\t\t\t}\n\t\t\thcbpErrThis := dbp.handleHardcodedBreakpoints(grp, trapthread, threads)\n\t\t\tif hcbpErrThis != nil && hcbpErr == nil {\n\t\t\t\thcbpErr = hcbpErrThis\n\t\t\t}\n\t\t}\n\t\t// callErr and hcbpErr check delayed until after pickCurrentThread, which\n\t\t// must always happen, otherwise the debugger could be left in an\n\t\t// inconsistent state.\n\n\t\tit = ValidTargets{Group: grp}\n\t\tfor it.Next() {\n\t\t\tvar th Thread = nil\n\t\t\tif it.Target == traptgt {\n\t\t\t\tth = trapthread\n\t\t\t}\n\t\t\terr := pickCurrentThread(it.Target, th)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tgrp.pickCurrentTarget(traptgt)\n\t\tdbp := grp.Selected\n\n\t\tif callErr != nil {\n\t\t\treturn callErr\n\t\t}\n\t\tif hcbpErr != nil {\n\t\t\treturn hcbpErr\n\t\t}\n\n\t\tcurthread := dbp.CurrentThread()\n\t\tcurbp := curthread.Breakpoint()\n\n\t\tswitch {\n\t\tcase curbp.Active && curbp.Stepping:\n\t\t\tswitch {\n\t\t\tcase curbp.SteppingInto:\n\t\t\t\t// See description of proc.(*Process).next for the meaning of StepBreakpoints\n\t\t\t\tif err := conditionErrors(grp); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif grp.GetDirection() == Backward {\n\t\t\t\t\tif err := dbp.ClearSteppingBreakpoints(); err != nil {\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t\treturn grp.StepInstruction(false)\n\t\t\t\t}\n\t\t\tcase curbp.SteppingIntoRangeOverFuncBody:\n\t\t\t\tif err := conditionErrors(grp); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := dbp.ClearSteppingBreakpoints(); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tif err := next(dbp, false, false); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\t// Target execution continues...\n\t\t\tdefault:\n\t\t\t\tcurthread.Common().returnValues = curbp.Breakpoint.returnInfo.Collect(dbp, curthread)\n\t\t\t\tif err := dbp.ClearSteppingBreakpoints(); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tdbp.StopReason = StopNextFinished\n\t\t\t\treturn conditionErrors(grp)\n\t\t\t}\n\t\tcase curbp.Active:\n\t\t\tonNextGoroutine, err := onNextGoroutine(dbp, curthread, dbp.Breakpoints())\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif onNextGoroutine &&\n\t\t\t\t(!isTraceOrTraceReturn(curbp.Breakpoint) || grp.KeepSteppingBreakpoints&TracepointKeepsSteppingBreakpoints == 0) {\n\t\t\t\terr := dbp.ClearSteppingBreakpoints()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif curbp.LogicalID() == unrecoveredPanicID {\n\t\t\t\tdbp.ClearSteppingBreakpoints()\n\t\t\t}\n\t\t\tif curbp.LogicalID() != hardcodedBreakpointID {\n\t\t\t\tdbp.StopReason = StopBreakpoint\n\t\t\t}\n\t\t\tif curbp.Breakpoint.WatchType != 0 {\n\t\t\t\tdbp.StopReason = StopWatchpoint\n\t\t\t}\n\t\t\tif curbp.Breakpoint.IsSharedLibBreakpoint() {\n\t\t\t\tdbp.StopReason = StopSharedLibLoaded\n\t\t\t}\n\t\t\treturn conditionErrors(grp)\n\t\tcase stopReason == StopLaunched:\n\t\t\treturn nil\n\t\tdefault:\n\t\t\t// not a manual stop, not on runtime.Breakpoint, not on a breakpoint, just repeat\n\t\t}\n\t\tif callInjectionDone {\n\t\t\t// a call injection was finished, don't let a breakpoint with a failed\n\t\t\t// condition or a step breakpoint shadow this.\n\t\t\treturn conditionErrors(grp)\n\t\t}\n\t}\n}\n\nfunc (grp *TargetGroup) finishManualStop() {\n\tfor _, dbp := range grp.targets {\n\t\tif isvalid, _ := dbp.Valid(); !isvalid {\n\t\t\tcontinue\n\t\t}\n\t\tdbp.StopReason = StopManual\n\t\tdbp.clearHardcodedBreakpoints()\n\t\tif grp.KeepSteppingBreakpoints&HaltKeepsSteppingBreakpoints == 0 {\n\t\t\tdbp.ClearSteppingBreakpoints()\n\t\t}\n\t}\n}\n\n// setCurrentThreads switches traptgt to trapthread, then for each target in\n// the group if its current thread exists it refreshes the current\n// goroutine, otherwise it switches it to a randomly selected thread.\nfunc (grp *TargetGroup) setCurrentThreads(traptgt *Target, trapthread Thread) error {\n\tvar err error\n\tif traptgt != nil && trapthread != nil {\n\t\terr = traptgt.SwitchThread(trapthread.ThreadID())\n\t}\n\tfor _, tgt := range grp.targets {\n\t\tif isvalid, _ := tgt.Valid(); !isvalid {\n\t\t\tcontinue\n\t\t}\n\t\tif _, ok := tgt.FindThread(tgt.currentThread.ThreadID()); ok {\n\t\t\ttgt.selectedGoroutine, _ = GetG(tgt.currentThread)\n\t\t} else {\n\t\t\tthreads := tgt.ThreadList()\n\t\t\tif len(threads) > 0 {\n\t\t\t\terr1 := tgt.SwitchThread(threads[0].ThreadID())\n\t\t\t\tif err1 != nil && err == nil {\n\t\t\t\t\terr = err1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn err\n}\n\nfunc isTraceOrTraceReturn(bp *Breakpoint) bool {\n\tif bp.Logical == nil {\n\t\treturn false\n\t}\n\treturn bp.Logical.Tracepoint || bp.Logical.TraceReturn\n}\n\nfunc conditionErrors(grp *TargetGroup) error {\n\tvar condErr error\n\tfor _, dbp := range grp.targets {\n\t\tif isvalid, _ := dbp.Valid(); !isvalid {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, th := range dbp.ThreadList() {\n\t\t\tif bp := th.Breakpoint(); bp.Breakpoint != nil && bp.CondError != nil {\n\t\t\t\tif condErr == nil {\n\t\t\t\t\tcondErr = bp.CondError\n\t\t\t\t} else {\n\t\t\t\t\treturn errors.New(\"multiple errors evaluating conditions\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn condErr\n}\n\n// pick a new dbp.currentThread, with the following priority:\n//\n//   - a thread with an active stepping breakpoint\n//   - a thread with an active breakpoint, prioritizing trapthread\n//   - trapthread if it is not nil\n//   - the previous current thread if it still exists\n//   - a randomly selected thread\nfunc pickCurrentThread(dbp *Target, trapthread Thread) error {\n\tthreads := dbp.ThreadList()\n\tfor _, th := range threads {\n\t\tif bp := th.Breakpoint(); bp.Active && bp.Stepping {\n\t\t\treturn dbp.SwitchThread(th.ThreadID())\n\t\t}\n\t}\n\tif trapthread != nil {\n\t\tif bp := trapthread.Breakpoint(); bp.Active {\n\t\t\treturn dbp.SwitchThread(trapthread.ThreadID())\n\t\t}\n\t}\n\tfor _, th := range threads {\n\t\tif bp := th.Breakpoint(); bp.Active {\n\t\t\treturn dbp.SwitchThread(th.ThreadID())\n\t\t}\n\t}\n\tif trapthread != nil {\n\t\treturn dbp.SwitchThread(trapthread.ThreadID())\n\t}\n\tif _, ok := dbp.FindThread(dbp.currentThread.ThreadID()); ok {\n\t\tdbp.selectedGoroutine, _ = GetG(dbp.currentThread)\n\t\treturn nil\n\t}\n\tif len(threads) > 0 {\n\t\treturn dbp.SwitchThread(threads[0].ThreadID())\n\t}\n\treturn nil\n}\n\n// pickCurrentTarget picks a new current target, with the following property:\n//\n//   - a target with an active stepping breakpoint\n//   - a target with StopReason == StopCallReturned\n//   - a target with an active breakpoint, prioritizing traptgt\n//   - traptgt\nfunc (grp *TargetGroup) pickCurrentTarget(traptgt *Target) {\n\tif len(grp.targets) == 1 {\n\t\tgrp.Selected = grp.targets[0]\n\t\treturn\n\t}\n\tfor _, dbp := range grp.targets {\n\t\tif isvalid, _ := dbp.Valid(); !isvalid {\n\t\t\tcontinue\n\t\t}\n\t\tbp := dbp.currentThread.Breakpoint()\n\t\tif bp.Active && bp.Stepping {\n\t\t\tgrp.Selected = dbp\n\t\t\treturn\n\t\t}\n\t}\n\tfor _, dbp := range grp.targets {\n\t\tif isvalid, _ := dbp.Valid(); !isvalid {\n\t\t\tcontinue\n\t\t}\n\t\tif dbp.StopReason == StopCallReturned {\n\t\t\tgrp.Selected = dbp\n\t\t\treturn\n\t\t}\n\t}\n\n\tif traptgt.currentThread.Breakpoint().Active {\n\t\tgrp.Selected = traptgt\n\t\treturn\n\t}\n\tfor _, dbp := range grp.targets {\n\t\tif isvalid, _ := dbp.Valid(); !isvalid {\n\t\t\tcontinue\n\t\t}\n\t\tbp := dbp.currentThread.Breakpoint()\n\t\tif bp.Active {\n\t\t\tgrp.Selected = dbp\n\t\t\treturn\n\t\t}\n\t}\n\tgrp.Selected = traptgt\n}\n\nfunc disassembleCurrentInstruction(p Process, thread Thread, off int64) ([]AsmInstruction, error) {\n\tregs, err := thread.Registers()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpc := regs.PC() + uint64(off)\n\treturn disassemble(p.Memory(), regs, p.Breakpoints(), p.BinInfo(), pc, pc+uint64(p.BinInfo().Arch.MaxInstructionLength()), true)\n}\n\n// stepInstructionOut repeatedly calls StepInstruction until the current\n// function is neither fnname1 or fnname2.\n// This function is used to step out of runtime.Breakpoint as well as\n// runtime.debugCallV1.\nfunc stepInstructionOut(grp *TargetGroup, dbp *Target, curthread Thread, fnname1, fnname2 string) error {\n\tdefer dbp.ClearCaches()\n\tfor {\n\t\tif err := grp.procgrp.StepInstruction(curthread.ThreadID()); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tloc, err := ThreadLocation(curthread)\n\t\tvar locFnName string\n\t\tif loc.Fn != nil && !loc.Fn.cu.image.Stripped() {\n\t\t\tlocFnName = loc.Fn.Name\n\t\t\t// Calls to runtime.Breakpoint are inlined in some versions of Go when\n\t\t\t// inlining is enabled. Here we attempt to resolve any inlining.\n\t\t\tdwarfTree, _ := loc.Fn.cu.image.getDwarfTree(loc.Fn.offset)\n\t\t\tif dwarfTree != nil {\n\t\t\t\tinlstack := reader.InlineStack(dwarfTree, loc.PC)\n\t\t\t\tif len(inlstack) > 0 {\n\t\t\t\t\tif locFnName2, ok := inlstack[0].Val(dwarf.AttrName).(string); ok {\n\t\t\t\t\t\tlocFnName = locFnName2\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil || loc.Fn == nil || (locFnName != fnname1 && locFnName != fnname2) {\n\t\t\tg, _ := GetG(curthread)\n\t\t\tselg := dbp.SelectedGoroutine()\n\t\t\tif g != nil && selg != nil && g.ID == selg.ID {\n\t\t\t\tselg.CurrentLoc = *loc\n\t\t\t}\n\t\t\treturn curthread.SetCurrentBreakpoint(true)\n\t\t}\n\t}\n}\n\n// Step resumes the processes in the group, continuing the selected target\n// until the next source line. Will step into functions.\nfunc (grp *TargetGroup) Step() (err error) {\n\tif _, err := grp.Valid(); err != nil {\n\t\treturn err\n\t}\n\tif grp.HasSteppingBreakpoints() {\n\t\treturn errors.New(\"next while nexting\")\n\t}\n\n\tif err = next(grp.Selected, true, false); err != nil {\n\t\t_ = grp.Selected.ClearSteppingBreakpoints()\n\t\treturn err\n\t}\n\n\tif bpstate := grp.Selected.CurrentThread().Breakpoint(); bpstate.Breakpoint != nil && bpstate.Active && bpstate.SteppingInto && grp.GetDirection() == Backward {\n\t\tgrp.Selected.ClearSteppingBreakpoints()\n\t\treturn grp.StepInstruction(false)\n\t}\n\n\treturn grp.Continue()\n}\n\n// sameGoroutineCondition returns an expression that evaluates to true when\n// the current goroutine is g.\nfunc sameGoroutineCondition(bi *BinaryInfo, g *G, threadID int) ast.Expr {\n\tif g == nil {\n\t\tif len(bi.Images[0].compileUnits) == 0 {\n\t\t\t// It's unclear what the right behavior is here. We are probably\n\t\t\t// debugging a process without debug info, this means we can't properly\n\t\t\t// create a same goroutine condition (we don't have a description for the\n\t\t\t// runtime.g type). If we don't set the condition then 'next' (and step,\n\t\t\t// stepout) will work for single-threaded programs (in limited\n\t\t\t// circumstances) but fail in presence of any concurrency.\n\t\t\t// If we set a thread ID condition even single threaded programs can fail\n\t\t\t// due to goroutine migration, but sometimes it will work even with\n\t\t\t// concurrency.\n\t\t\treturn nil\n\t\t}\n\t\treturn astutil.Eql(astutil.PkgVar(\"runtime\", \"threadid\"), astutil.Int(int64(threadID)))\n\t}\n\treturn astutil.Eql(astutil.Sel(astutil.PkgVar(\"runtime\", \"curg\"), \"goid\"), astutil.Int(g.ID))\n}\n\nfunc frameoffCondition(frame *Stackframe) ast.Expr {\n\treturn astutil.Eql(astutil.PkgVar(\"runtime\", \"frameoff\"), astutil.Int(frame.FrameOffset()))\n}\n\n// StepOut resumes the processes in the group, continuing the selected target\n// until the current goroutine exits the function currently being\n// executed or a deferred function is executed\nfunc (grp *TargetGroup) StepOut() error {\n\tbackward := grp.GetDirection() == Backward\n\tif _, err := grp.Valid(); err != nil {\n\t\treturn err\n\t}\n\tif grp.HasSteppingBreakpoints() {\n\t\treturn errors.New(\"next while nexting\")\n\t}\n\n\tdbp := grp.Selected\n\tselg := dbp.SelectedGoroutine()\n\tcurthread := dbp.CurrentThread()\n\n\ttopframe, retframe, err := topframe(dbp, selg, curthread)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\trangeFrames, err := rangeFuncStackTrace(dbp, selg)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif rangeFrames != nil {\n\t\t// There are range-over-func body closures skip all of them to the\n\t\t// function containing them and its caller function.\n\t\ttopframe, retframe = rangeFrames[len(rangeFrames)-2], rangeFrames[len(rangeFrames)-1]\n\t}\n\n\tsuccess := false\n\tdefer func() {\n\t\tif !success {\n\t\t\tdbp.ClearSteppingBreakpoints()\n\t\t}\n\t}()\n\n\tif topframe.Inlined {\n\t\tif err := next(dbp, false, true); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tsuccess = true\n\t\treturn grp.Continue()\n\t}\n\n\tsameGCond := sameGoroutineCondition(dbp.BinInfo(), selg, curthread.ThreadID())\n\n\tif backward {\n\t\tif err := stepOutReverse(dbp, topframe, retframe, sameGCond); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tsuccess = true\n\t\treturn grp.Continue()\n\t}\n\n\tdeferpc, err := setDeferBreakpoint(dbp, nil, topframe, sameGCond, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif topframe.Ret == 0 && deferpc == 0 {\n\t\treturn errors.New(\"nothing to stepout to\")\n\t}\n\n\tif topframe.Ret != 0 {\n\t\ttopframe, retframe := skipAutogeneratedWrappersOut(grp.Selected, selg, curthread, &topframe, &retframe)\n\t\tretFrameCond := astutil.And(sameGCond, frameoffCondition(retframe))\n\t\tbp, err := allowDuplicateBreakpoint(dbp.SetBreakpoint(0, retframe.Current.PC, NextBreakpoint, retFrameCond))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif bp != nil {\n\t\t\tconfigureReturnBreakpoint(dbp.BinInfo(), bp, topframe, retFrameCond)\n\t\t}\n\t}\n\n\tif bp := curthread.Breakpoint(); bp.Breakpoint == nil {\n\t\tcurthread.SetCurrentBreakpoint(false)\n\t}\n\n\tsuccess = true\n\treturn grp.Continue()\n}\n\n// StepInstruction will continue the current thread for exactly\n// one instruction. This method affects only the thread\n// associated with the selected goroutine. All other\n// threads will remain stopped.\nfunc (grp *TargetGroup) StepInstruction(skipCalls bool) (err error) {\n\tdbp := grp.Selected\n\tthread := dbp.CurrentThread()\n\tg := dbp.SelectedGoroutine()\n\tif g != nil {\n\t\tif g.Thread == nil {\n\t\t\t// Step called on parked goroutine\n\t\t\tif _, err := dbp.SetBreakpoint(0, g.PC, NextBreakpoint,\n\t\t\t\tsameGoroutineCondition(dbp.BinInfo(), dbp.SelectedGoroutine(), thread.ThreadID())); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\treturn grp.Continue()\n\t\t}\n\t\tthread = g.Thread\n\t}\n\tdbp.ClearCaches()\n\tif ok, err := dbp.Valid(); !ok {\n\t\treturn err\n\t}\n\tvar isCall bool\n\tinstr, err := disassembleCurrentInstruction(dbp, thread, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tisCall = len(instr) > 0 && instr[0].IsCall()\n\terr = grp.procgrp.StepInstruction(thread.ThreadID())\n\tif err != nil {\n\t\treturn err\n\t}\n\tthread.Breakpoint().Clear()\n\terr = thread.SetCurrentBreakpoint(false)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif tg, _ := GetG(thread); tg != nil {\n\t\tdbp.selectedGoroutine = tg\n\t}\n\tdbp.StopReason = StopNextFinished\n\n\tif skipCalls && isCall {\n\t\treturn grp.StepOut()\n\t}\n\n\treturn nil\n}\n\n// Set breakpoints at every line, and the return address. Also look for\n// a deferred function and set a breakpoint there too.\n// If stepInto is true it will also set breakpoints inside all\n// functions called on the current source line, for non-absolute CALLs\n// a breakpoint of kind StepBreakpoint is set on the CALL instruction,\n// Continue will take care of setting a breakpoint to the destination\n// once the CALL is reached.\n//\n// Regardless of stepInto the following breakpoints will be set:\n//   - a breakpoint on the first deferred function with NextDeferBreakpoint\n//     kind, the list of all the addresses to deferreturn calls in this function\n//     and condition checking that we remain on the same goroutine\n//   - a breakpoint on each line of the function, with a condition checking\n//     that we stay on the same stack frame and goroutine.\n//   - a breakpoint on the return address of the function, with a condition\n//     checking that we move to the previous stack frame and stay on the same\n//     goroutine.\n//\n// The breakpoint on the return address is *not* set if the current frame is\n// an inlined call. For inlined calls topframe.Current.Fn is the function\n// where the inlining happened and the second set of breakpoints will also\n// cover the \"return address\".\n//\n// If inlinedStepOut is true this function implements the StepOut operation\n// for an inlined function call. Everything works the same as normal except\n// when removing instructions belonging to inlined calls we also remove all\n// instructions belonging to the current inlined call.\nfunc next(dbp *Target, stepInto, inlinedStepOut bool) error {\n\tbackward := dbp.recman.GetDirection() == Backward\n\tselg := dbp.SelectedGoroutine()\n\tcurthread := dbp.CurrentThread()\n\tbi := dbp.BinInfo()\n\ttopframe, retframe, err := topframe(dbp, selg, curthread)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif topframe.Current.Fn == nil {\n\t\treturn &ErrNoSourceForPC{topframe.Current.PC}\n\t}\n\n\tif backward && retframe.Current.Fn == nil {\n\t\treturn &ErrNoSourceForPC{retframe.Current.PC}\n\t}\n\n\t// sanity check\n\tif inlinedStepOut && !topframe.Inlined {\n\t\tpanic(\"next called with inlinedStepOut but topframe was not inlined\")\n\t}\n\n\trangeFrames, err := rangeFuncStackTrace(dbp, selg)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsuccess := false\n\tdefer func() {\n\t\tif !success {\n\t\t\tdbp.ClearSteppingBreakpoints()\n\t\t}\n\t}()\n\n\text := filepath.Ext(topframe.Current.File)\n\tcsource := ext != \".go\" && ext != \".s\"\n\tvar regs Registers\n\tif selg != nil && selg.Thread != nil {\n\t\tregs, err = selg.Thread.Registers()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tsameGCond := sameGoroutineCondition(bi, selg, curthread.ThreadID())\n\n\tfirstPCAfterPrologue, err := FirstPCAfterPrologue(dbp, topframe.Current.Fn, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif backward {\n\t\tif firstPCAfterPrologue == topframe.Current.PC {\n\t\t\t// We don't want to step into the prologue so we just execute a reverse step out instead\n\t\t\tif err := stepOutReverse(dbp, topframe, retframe, sameGCond); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\tsuccess = true\n\t\t\treturn nil\n\t\t}\n\n\t\ttopframe.Ret, err = findCallInstrForRet(dbp, dbp.Memory(), topframe.Ret, retframe.Current.Fn)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\ttext, err := disassemble(dbp.Memory(), regs, dbp.Breakpoints(), bi, topframe.Current.Fn.Entry, topframe.Current.Fn.End, false)\n\tif err != nil && stepInto {\n\t\treturn err\n\t}\n\n\tsameFrameCond := astutil.And(sameGCond, frameoffCondition(&topframe))\n\n\tif stepInto && !backward {\n\t\terr := setStepIntoBreakpoints(dbp, topframe.Current.Fn, text, topframe, sameGCond)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif !backward && !topframe.Current.Fn.cu.image.Stripped() {\n\t\tfr := topframe\n\t\tif len(rangeFrames) != 0 && !stepInto {\n\t\t\tfr = rangeFrames[len(rangeFrames)-2]\n\t\t}\n\t\t_, err = setDeferBreakpoint(dbp, text, fr, sameGCond, stepInto)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Add breakpoints on all the lines in the current function\n\tpcs, err := topframe.Current.Fn.AllPCs(topframe.Current.File, topframe.Current.Line)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif backward {\n\t\t// Ensure that pcs contains firstPCAfterPrologue when reverse stepping.\n\t\tfound := slices.Contains(pcs, firstPCAfterPrologue)\n\t\tif !found {\n\t\t\tpcs = append(pcs, firstPCAfterPrologue)\n\t\t}\n\t}\n\n\tif !stepInto {\n\t\t// Removing any PC range belonging to an inlined call\n\t\tframe := topframe\n\t\tif inlinedStepOut {\n\t\t\tframe = retframe\n\t\t}\n\t\tpcs, err = removeInlinedCalls(pcs, &frame, bi)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif !csource {\n\t\tvar covered bool\n\t\tfor i := range pcs {\n\t\t\tif topframe.Current.Fn.Entry <= pcs[i] && pcs[i] < topframe.Current.Fn.End {\n\t\t\t\tcovered = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif !covered {\n\t\t\tfn := bi.PCToFunc(topframe.Ret)\n\t\t\tif selg != nil && fn != nil && fn.Name == \"runtime.goexit\" {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, pc := range pcs {\n\t\tif !stepInto && topframe.Call.Fn.extra(bi).rangeParent != nil {\n\t\t\tif pc < firstPCAfterPrologue {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif _, err := allowDuplicateBreakpoint(dbp.SetBreakpoint(0, pc, NextBreakpoint, sameFrameCond)); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif stepInto && backward {\n\t\terr := setStepIntoBreakpointsReverse(dbp, text, topframe, sameGCond)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\t// Stepping into range-over-func-bodies\n\tif !stepInto && !inlinedStepOut {\n\t\trangeParent := topframe.Call.Fn.extra(bi).rangeParent\n\t\tif rangeParent == nil {\n\t\t\trangeParent = topframe.Call.Fn\n\t\t}\n\t\trpoff := topframe.FrameOffset()\n\t\tif len(rangeFrames) > 0 {\n\t\t\trpoff = rangeFrames[len(rangeFrames)-2].FrameOffset()\n\t\t}\n\t\trpc := astutil.And(sameGCond, astutil.Eql(astutil.PkgVar(\"runtime\", \"rangeParentOffset\"), astutil.Int(rpoff)))\n\t\tfor _, fn := range rangeParent.rangeBodies(bi) {\n\t\t\tif fn.Entry != 0 {\n\t\t\t\tpc, err := FirstPCAfterPrologue(dbp, fn, false)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tkind := NextBreakpoint\n\t\t\t\tif f, ln := bi.pcToLine(fn, pc); f == topframe.Current.File && ln == topframe.Current.Line {\n\t\t\t\t\tkind = StepIntoRangeOverFuncBodyBreakpoint\n\t\t\t\t}\n\t\t\t\tif _, err := allowDuplicateBreakpoint(dbp.SetBreakpoint(0, pc, kind, rpc)); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set step-out breakpoints for range-over-func body closures\n\tif !stepInto && selg != nil && topframe.Current.Fn.extra(bi).rangeParent != nil && len(rangeFrames) > 0 {\n\t\t// Set step-out breakpoint for every range-over-func body currently on the stack so that we stop on them.\n\t\tfor i := 2; i < len(rangeFrames); i += 2 {\n\t\t\tfr := &rangeFrames[i]\n\t\t\tretframecond := astutil.And(sameGCond, frameoffCondition(fr))\n\t\t\tif !fr.hasInlines {\n\t\t\t\tdbp.SetBreakpoint(0, fr.Current.PC, NextBreakpoint, retframecond)\n\t\t\t} else {\n\t\t\t\t// fr.Current.PC does not belong to fr.Call.Fn, because there are inlined calls, therefore set a breakpoint on every statement of fr.Call.Fn\n\t\t\t\tpcs, err := fr.Current.Fn.AllPCs(\"\", 0)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tpcs, err = removeInlinedCalls(pcs, fr, bi)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tfor _, pc := range pcs {\n\t\t\t\t\tdbp.SetBreakpoint(0, pc, NextBreakpoint, retframecond)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Set a step-out breakpoint for the first range-over-func body on the\n\t\t// stack, this breakpoint will never cause a stop because the associated\n\t\t// callback always returns false.\n\t\t// Its purpose is to inactivate all the breakpoints for the current\n\t\t// range-over-func body function so that if the iterator re-calls it we\n\t\t// don't end up inside the prologue.\n\t\tif !rangeFrames[0].Inlined {\n\t\t\tbp, err := dbp.SetBreakpoint(0, rangeFrames[1].Call.PC, NextBreakpoint, astutil.And(sameGCond, frameoffCondition(&rangeFrames[1])))\n\t\t\tif err == nil {\n\t\t\t\tbplet := bp.Breaklets[len(bp.Breaklets)-1]\n\t\t\t\tbplet.callback = func(th Thread, p *Target) (bool, error) {\n\t\t\t\t\trangeFrameInactivateNextBreakpoints(p, rangeFrames[0].Call.Fn)\n\t\t\t\t\treturn false, nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttopframe, retframe = rangeFrames[len(rangeFrames)-2], rangeFrames[len(rangeFrames)-1]\n\t}\n\n\t// Step-out breakpoint\n\tif !topframe.Inlined {\n\t\ttopframe, retframe := skipAutogeneratedWrappersOut(dbp, selg, curthread, &topframe, &retframe)\n\t\tretFrameCond := astutil.And(sameGCond, frameoffCondition(retframe))\n\n\t\t// Add a breakpoint on the return address for the current frame.\n\t\t// For inlined functions there is no need to do this, the set of PCs\n\t\t// returned by the AllPCsBetween call above already cover all instructions\n\t\t// of the containing function.\n\t\tbp, _ := dbp.SetBreakpoint(0, retframe.Current.PC, NextBreakpoint, retFrameCond)\n\t\t// Return address could be wrong, if we are unable to set a breakpoint\n\t\t// there it's ok.\n\t\tif bp != nil {\n\t\t\tconfigureReturnBreakpoint(bi, bp, topframe, retFrameCond)\n\t\t}\n\t}\n\n\tif bp := curthread.Breakpoint(); bp.Breakpoint == nil {\n\t\tcurthread.SetCurrentBreakpoint(false)\n\t}\n\tsuccess = true\n\treturn nil\n}\n\nfunc setStepIntoBreakpoints(dbp *Target, curfn *Function, text []AsmInstruction, topframe Stackframe, sameGCond ast.Expr) error {\n\tgostmt := false\n\tfor _, instr := range text {\n\t\tif instr.Loc.File != topframe.Current.File || instr.Loc.Line != topframe.Current.Line || !instr.IsCall() {\n\t\t\tcontinue\n\t\t}\n\n\t\tif instr.DestLoc != nil {\n\t\t\tif err := setStepIntoBreakpoint(dbp, curfn, []AsmInstruction{instr}, sameGCond); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif curfn != nil && curfn.Name != \"runtime.\" && instr.DestLoc.Fn != nil && instr.DestLoc.Fn.Name == \"runtime.newproc\" {\n\t\t\t\t// The current statement is a go statement, i.e. \"go somecall()\"\n\t\t\t\t// We are excluding this check inside the runtime package because\n\t\t\t\t// functions in the runtime package can call runtime.newproc directly.\n\t\t\t\tgostmt = true\n\t\t\t}\n\t\t} else {\n\t\t\t// Non-absolute call instruction, set a StepBreakpoint here\n\t\t\tbp, err := allowDuplicateBreakpoint(dbp.SetBreakpoint(0, instr.Loc.PC, StepBreakpoint, sameGCond))\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tbreaklet := bp.Breaklets[len(bp.Breaklets)-1]\n\t\t\tbreaklet.callback = stepIntoCallback\n\t\t}\n\t}\n\tif gostmt {\n\t\tsetStepIntoNewProcBreakpoint(dbp, sameGCond)\n\t}\n\treturn nil\n}\n\n// stepIntoCallback is a callback called when a StepBreakpoint is hit, it\n// disassembles the current instruction to figure out its destination and\n// sets a breakpoint on it.\nfunc stepIntoCallback(curthread Thread, p *Target) (bool, error) {\n\tif p.recman.GetDirection() != Forward {\n\t\t// This should never happen, step into breakpoints with callbacks are only\n\t\t// set when moving forward and direction changes are forbidden while\n\t\t// breakpoints are set.\n\t\treturn true, nil\n\t}\n\n\ttext, err := disassembleCurrentInstruction(p, curthread, 0)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\n\tok, err := stepIntoCoroutineMaybe(curthread, p, text)\n\tif ok || err != nil {\n\t\treturn false, err\n\t}\n\n\tvar fn *Function\n\tif loc, _ := ThreadLocation(curthread); loc != nil {\n\t\tfn = loc.Fn\n\t}\n\tg, _ := GetG(curthread)\n\t// here we either set a breakpoint into the destination of the CALL\n\t// instruction or we determined that the called function is hidden,\n\t// either way we need to resume execution\n\tif err = setStepIntoBreakpoint(p, fn, text, sameGoroutineCondition(p.BinInfo(), g, curthread.ThreadID())); err != nil {\n\t\treturn false, err\n\t}\n\n\treturn false, nil\n}\n\nfunc setStepIntoBreakpointsReverse(dbp *Target, text []AsmInstruction, topframe Stackframe, sameGCond ast.Expr) error {\n\tbpmap := dbp.Breakpoints()\n\t// Set a breakpoint after every CALL instruction\n\tfor i, instr := range text {\n\t\tif instr.Loc.File != topframe.Current.File || !instr.IsCall() || instr.DestLoc == nil || instr.DestLoc.Fn == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif instr.DestLoc.Fn.privateRuntime() {\n\t\t\tcontinue\n\t\t}\n\n\t\tif nextIdx := i + 1; nextIdx < len(text) {\n\t\t\t_, ok := bpmap.M[text[nextIdx].Loc.PC]\n\t\t\tif !ok {\n\t\t\t\tif _, err := allowDuplicateBreakpoint(dbp.SetBreakpoint(0, text[nextIdx].Loc.PC, StepBreakpoint, sameGCond)); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc FindDeferReturnCalls(text []AsmInstruction) []uint64 {\n\tconst deferreturn = \"runtime.deferreturn\"\n\tdeferreturns := []uint64{}\n\n\t// Find all runtime.deferreturn locations in the function\n\t// See documentation of Breakpoint.DeferCond for why this is necessary\n\tfor _, instr := range text {\n\t\tif instr.IsCall() && instr.DestLoc != nil && instr.DestLoc.Fn != nil && instr.DestLoc.Fn.Name == deferreturn {\n\t\t\tdeferreturns = append(deferreturns, instr.Loc.PC)\n\t\t}\n\t}\n\treturn deferreturns\n}\n\n// Removes instructions belonging to inlined calls of topframe from pcs.\n// Inlined calls that belong to range-over-func bodies are not removed.\nfunc removeInlinedCalls(pcs []uint64, topframe *Stackframe, bi *BinaryInfo) ([]uint64, error) {\n\t// TODO(derekparker) it should be possible to still use some internal\n\t// runtime information to do this.\n\tif topframe.Call.Fn == nil || topframe.Call.Fn.cu.image.Stripped() {\n\t\treturn pcs, nil\n\t}\n\n\ttopframeRangeParentName := topframe.Call.Fn.Name\n\tif topframe.Call.Fn.extra(bi).rangeParent != nil {\n\t\ttopframeRangeParentName = topframe.Call.Fn.extra(bi).rangeParent.Name\n\t}\n\n\tdwarfTree, err := topframe.Current.Fn.cu.image.getDwarfTree(topframe.Current.Fn.offset)\n\tif err != nil {\n\t\treturn pcs, err\n\t}\n\tcolor := make([]removePC, len(pcs))\n\tremoveInlinedCallsColor(topframe, topframeRangeParentName, pcs, color, dwarfTree)\n\tout := make([]uint64, 0, len(pcs))\n\tfor i := range pcs {\n\t\tif color[i] != removePCRemove {\n\t\t\tout = append(out, pcs[i])\n\t\t}\n\t}\n\treturn out, nil\n}\n\ntype removePC uint8\n\nconst (\n\tremovePCUnknown removePC = iota\n\tremovePCRemove\n\tremovePCKeep\n)\n\n// removeInlinedCallsColor sets color[i] to removePCRemove or removePCKeep\n// depending on whether pcs[i] should be removed by removeInlinedCalls.\n// This determination is made by checking, for each PC, what is the topmost\n// inlined call.\nfunc removeInlinedCallsColor(topframe *Stackframe, topframeRangeParentName string, pcs []uint64, color []removePC, e *godwarf.Tree) {\n\tswitch e.Tag {\n\tcase dwarf.TagSubprogram, dwarf.TagInlinedSubroutine, dwarf.TagLexDwarfBlock:\n\t\t// ok\n\tdefault:\n\t\treturn\n\t}\n\n\tfor _, child := range e.Children {\n\t\tremoveInlinedCallsColor(topframe, topframeRangeParentName, pcs, color, child)\n\t}\n\n\tswitch e.Tag {\n\tcase dwarf.TagInlinedSubroutine:\n\t\tc := removePCRemove\n\t\tif e.Offset == topframe.Call.Fn.offset {\n\t\t\tc = removePCKeep\n\t\t} else {\n\t\t\tfnname, _ := e.Val(dwarf.AttrName).(string)\n\t\t\tridx := rangeParentName(fnname)\n\t\t\tvar rpn string\n\t\t\tif ridx == -1 {\n\t\t\t\trpn = fnname\n\t\t\t} else {\n\t\t\t\trpn = fnname[:ridx]\n\t\t\t}\n\t\t\tif rpn == topframeRangeParentName {\n\t\t\t\tc = removePCKeep\n\t\t\t}\n\t\t}\n\t\tfor _, rng := range e.Ranges {\n\t\t\tcolorPCsBetween(pcs, color, c, rng[0], rng[1])\n\t\t}\n\t}\n}\n\n// colorPCsBetween sets color[i] to c if start <= pcs[i] < end\nfunc colorPCsBetween(pcs []uint64, color []removePC, c removePC, start, end uint64) {\n\tfor i, pc := range pcs {\n\t\tif color[i] == removePCUnknown && pc >= start && pc < end {\n\t\t\tcolor[i] = c\n\t\t}\n\t}\n}\n\nfunc setStepIntoBreakpoint(dbp *Target, curfn *Function, text []AsmInstruction, cond ast.Expr) error {\n\tif len(text) == 0 {\n\t\treturn nil\n\t}\n\n\t// If the current function is already a runtime function then\n\t// setStepIntoBreakpoint is allowed to step into unexported runtime\n\t// functions.\n\tstepIntoUnexportedRuntime := curfn != nil && strings.HasPrefix(curfn.Name, \"runtime.\")\n\n\tinstr := text[0]\n\n\tif instr.DestLoc == nil {\n\t\t// Call destination couldn't be resolved because this was not the\n\t\t// current instruction, therefore the step-into breakpoint can not be set.\n\t\treturn nil\n\t}\n\n\tpc := instr.DestLoc.PC\n\tfn := instr.DestLoc.Fn\n\tif dbp.BinInfo().Arch.Name == \"ppc64le\" && instr.Inst.OpcodeEquals(uint64(ppc64asm.BCLRL)) {\n\t\tregs, err := dbp.CurrentThread().Registers()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlr := regs.LR()\n\t\tfn = dbp.BinInfo().PCToFunc(lr)\n\t}\n\n\t// Skip unexported runtime functions\n\tif !stepIntoUnexportedRuntime && fn != nil && fn.privateRuntime() {\n\t\treturn nil\n\t}\n\n\t//TODO(aarzilli): if we want to let users hide functions\n\t// or entire packages from being stepped into with 'step'\n\t// those extra checks should be done here.\n\n\t// Skip InhibitStepInto functions for different arch.\n\tif dbp.BinInfo().Arch.inhibitStepInto(dbp.BinInfo(), pc) {\n\t\treturn nil\n\t}\n\n\tfn, pc = skipAutogeneratedWrappersIn(dbp, fn, pc, false)\n\n\t// We want to skip the function prologue but we should only do it if the\n\t// destination address of the CALL instruction is the entry point of the\n\t// function.\n\t// Calls to runtime.duffzero and duffcopy inserted by the compiler can\n\t// sometimes point inside the body of those functions, well after the\n\t// prologue.\n\tif fn != nil && fn.Entry == pc {\n\t\tpc, _ = FirstPCAfterPrologue(dbp, fn, false)\n\t}\n\n\t// Set a breakpoint after the function's prologue\n\tif _, err := allowDuplicateBreakpoint(dbp.SetBreakpoint(0, pc, NextBreakpoint, cond)); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n// setStepIntoNewProcBreakpoint sets a temporary breakpoint on\n// runtime.newproc that, when hit, clears all temporary breakpoints and sets\n// a new temporary breakpoint on the starting function for the new\n// goroutine.\nfunc setStepIntoNewProcBreakpoint(p *Target, sameGCond ast.Expr) {\n\tconst (\n\t\truntimeNewprocFunc1 = \"runtime.newproc.func1\"\n\t\truntimeRunqput      = \"runtime.runqput\"\n\t)\n\trnf := p.BinInfo().LookupFunc()[runtimeNewprocFunc1]\n\tif len(rnf) != 1 {\n\t\tlogflags.DebuggerLogger().Error(\"could not find \" + runtimeNewprocFunc1)\n\t\treturn\n\t}\n\ttext, err := Disassemble(p.Memory(), nil, p.Breakpoints(), p.BinInfo(), rnf[0].Entry, rnf[0].End)\n\tif err != nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"could not disassemble \"+runtimeNewprocFunc1+\": %v\", err)\n\t\treturn\n\t}\n\n\tcallfile, callline := \"\", 0\n\tfor _, instr := range text {\n\t\tif instr.Kind == CallInstruction && instr.DestLoc != nil && instr.DestLoc.Fn != nil && instr.DestLoc.Fn.Name == runtimeRunqput {\n\t\t\tcallfile = instr.Loc.File\n\t\t\tcallline = instr.Loc.Line\n\t\t\tbreak\n\t\t}\n\t}\n\tif callfile == \"\" {\n\t\tlogflags.DebuggerLogger().Error(\"could not find \" + runtimeRunqput + \" call in \" + runtimeNewprocFunc1)\n\t\treturn\n\t}\n\tvar pc uint64\n\tfor _, pcstmt := range rnf[0].cu.lineInfo.LineToPCs(callfile, callline) {\n\t\tif pcstmt.Stmt {\n\t\t\tpc = pcstmt.PC\n\t\t\tbreak\n\t\t}\n\t}\n\tif pc == 0 {\n\t\tlogflags.DebuggerLogger().Errorf(\"could not set newproc breakpoint: location not found for \" + runtimeRunqput + \" call\")\n\t\treturn\n\t}\n\n\tbp, err := p.SetBreakpoint(0, pc, StepIntoNewProcBreakpoint, sameGCond)\n\tif err != nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"could not set StepIntoNewProcBreakpoint: %v\", err)\n\t\treturn\n\t}\n\tblet := bp.Breaklets[len(bp.Breaklets)-1]\n\tblet.callback = func(th Thread, p *Target) (bool, error) {\n\t\t// Clear temp breakpoints that exist and set a new one for goroutine\n\t\t// newg.goid on the go statement's target\n\t\tscope, err := ThreadScope(p, th)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tv, err := scope.EvalExpression(\"newg.goid\", loadSingleValue)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif v.Unreadable != nil {\n\t\t\treturn false, v.Unreadable\n\t\t}\n\t\tnewGGoID, _ := constant.Int64Val(v.Value)\n\n\t\tv, err = scope.EvalExpression(\"newg.startpc\", loadSingleValue)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif v.Unreadable != nil {\n\t\t\treturn false, v.Unreadable\n\t\t}\n\t\tstartpc, _ := constant.Int64Val(v.Value)\n\n\t\t// Temp breakpoints must be cleared because the current goroutine could\n\t\t// hit one of them before the new goroutine manages to start.\n\t\tfor _, bp := range p.Breakpoints().M {\n\t\t\tfor _, bplet := range bp.Breaklets {\n\t\t\t\tif bplet.Kind&steppingMask != 0 {\n\t\t\t\t\tbplet.Kind = NextInactivatedBreakpoint\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We don't want to use startpc directly because it will be an\n\t\t// autogenerated wrapper on some versions of Go. Additionally, once we\n\t\t// have the correct function we must also skip to prologue.\n\t\tstartfn := p.BinInfo().PCToFunc(uint64(startpc))\n\t\tif startfn2, _ := skipAutogeneratedWrappersIn(p, startfn, uint64(startpc), true); startfn2 != nil {\n\t\t\tstartfn = startfn2\n\t\t}\n\t\tif startpc2, err := FirstPCAfterPrologue(p, startfn, false); err == nil {\n\t\t\tstartpc = int64(startpc2)\n\t\t}\n\n\t\t// The new breakpoint must have 'NextBreakpoint' kind because we want to\n\t\t// stop on it.\n\t\t_, err = p.SetBreakpoint(0, uint64(startpc), NextBreakpoint, goroutineCondition(newGGoID))\n\t\treturn false, err // we don't want to stop at this breakpoint if there is no error\n\t}\n}\n\nfunc goroutineCondition(goid int64) ast.Expr {\n\treturn astutil.Eql(astutil.Sel(astutil.PkgVar(\"runtime\", \"curg\"), \"goid\"), astutil.Int(goid))\n}\n\nfunc allowDuplicateBreakpoint(bp *Breakpoint, err error) (*Breakpoint, error) {\n\tif err != nil {\n\t\t//lint:ignore S1020 this is clearer\n\t\tif _, isexists := err.(BreakpointExistsError); isexists {\n\t\t\treturn bp, nil\n\t\t}\n\t}\n\treturn bp, err\n}\n\nfunc isAutogenerated(loc Location) bool {\n\treturn (loc.File == \"<autogenerated>\" && loc.Line == 1) || (loc.Fn != nil && loc.Fn.trampoline)\n}\n\nfunc isAutogeneratedOrDeferReturn(loc Location) bool {\n\treturn isAutogenerated(loc) || (loc.Fn != nil && loc.Fn.Name == \"runtime.deferreturn\")\n}\n\n// skipAutogeneratedWrappersIn skips autogenerated wrappers when setting a\n// step-into breakpoint.\n// If alwaysSkipFirst is set the first function is always skipped if it is\n// autogenerated, even if it isn't a wrapper for the function it is calling.\n// See genwrapper in: $GOROOT/src/cmd/compile/internal/gc/subr.go\nfunc skipAutogeneratedWrappersIn(p Process, startfn *Function, startpc uint64, alwaysSkipFirst bool) (*Function, uint64) {\n\tif startfn == nil {\n\t\treturn nil, startpc\n\t}\n\tfn := startfn\n\tfor range maxSkipAutogeneratedWrappers {\n\t\tif !fn.cu.isgo {\n\t\t\t// can't exit Go\n\t\t\treturn startfn, startpc\n\t\t}\n\t\ttext, err := Disassemble(p.Memory(), nil, p.Breakpoints(), p.BinInfo(), fn.Entry, fn.End)\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tif len(text) == 0 {\n\t\t\tbreak\n\t\t}\n\t\tif !isAutogenerated(text[0].Loc) {\n\t\t\treturn fn, fn.Entry\n\t\t}\n\t\ttgtfns := []*Function{}\n\t\t// collect all functions called by the current destination function\n\t\tfor _, instr := range text {\n\t\t\tswitch {\n\t\t\tcase instr.IsCall():\n\t\t\t\tif instr.DestLoc == nil {\n\t\t\t\t\treturn startfn, startpc\n\t\t\t\t}\n\t\t\t\tif p.BinInfo().Arch.inhibitStepInto(p.BinInfo(), instr.DestLoc.PC) {\n\t\t\t\t\t// ignored\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif instr.DestLoc.Fn == nil {\n\t\t\t\t\treturn startfn, startpc\n\t\t\t\t}\n\t\t\t\t// calls to non private runtime functions\n\t\t\t\tif !instr.DestLoc.Fn.privateRuntime() {\n\t\t\t\t\ttgtfns = append(tgtfns, instr.DestLoc.Fn)\n\t\t\t\t}\n\t\t\tcase instr.IsJmp():\n\t\t\t\t// unconditional jumps to a different function that isn't a private runtime function\n\t\t\t\tif instr.DestLoc != nil && instr.DestLoc.Fn != fn && !instr.DestLoc.Fn.privateRuntime() {\n\t\t\t\t\ttgtfns = append(tgtfns, instr.DestLoc.Fn)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif len(tgtfns) != 1 {\n\t\t\t// too many or not enough function calls\n\t\t\tbreak\n\t\t}\n\n\t\ttgtfn := tgtfns[0]\n\t\tif alwaysSkipFirst {\n\t\t\talwaysSkipFirst = false\n\t\t\tstartfn, startpc = tgtfn, tgtfn.Entry\n\t\t} else if strings.TrimSuffix(tgtfn.BaseName(), \"-fm\") != strings.TrimSuffix(fn.BaseName(), \"-fm\") {\n\t\t\treturn startfn, startpc\n\t\t}\n\t\tfn = tgtfn\n\t}\n\treturn startfn, startpc\n}\n\n// skipAutogeneratedWrappersOut skip autogenerated wrappers when setting a\n// step out breakpoint.\n// See genwrapper in: $GOROOT/src/cmd/compile/internal/gc/subr.go\n// It also skips runtime.deferreturn frames (which are only ever on the stack on Go 1.18 or later)\nfunc skipAutogeneratedWrappersOut(tgt *Target, g *G, thread Thread, startTopframe, startRetframe *Stackframe) (topframe, retframe *Stackframe) {\n\ttopframe, retframe = startTopframe, startRetframe\n\tif startTopframe.Ret == 0 {\n\t\treturn\n\t}\n\tif !isAutogeneratedOrDeferReturn(startRetframe.Current) {\n\t\treturn\n\t}\n\tretfn := thread.BinInfo().PCToFunc(startTopframe.Ret)\n\tif retfn == nil {\n\t\treturn\n\t}\n\tif !retfn.cu.isgo {\n\t\treturn\n\t}\n\tvar err error\n\tvar frames []Stackframe\n\tif g == nil {\n\t\tframes, err = ThreadStacktrace(tgt, thread, maxSkipAutogeneratedWrappers)\n\t} else {\n\t\tframes, err = GoroutineStacktrace(tgt, g, maxSkipAutogeneratedWrappers, 0)\n\t}\n\tif err != nil {\n\t\treturn\n\t}\n\tbi := thread.BinInfo()\n\tfor i := 1; i < len(frames); i++ {\n\t\tframe := frames[i]\n\t\tif frame.Current.Fn == nil {\n\t\t\treturn\n\t\t}\n\t\tfile, line := bi.EntryLineForFunc(frame.Current.Fn)\n\t\tif !isAutogeneratedOrDeferReturn(Location{File: file, Line: line, Fn: frame.Current.Fn}) {\n\t\t\treturn &frames[i-1], &frames[i]\n\t\t}\n\t}\n\treturn\n}\n\n// setDeferBreakpoint is a helper function used by next and StepOut to set a\n// breakpoint on the first deferred function.\nfunc setDeferBreakpoint(p *Target, text []AsmInstruction, topframe Stackframe, sameGCond ast.Expr, stepInto bool) (uint64, error) {\n\t// Set breakpoint on the most recently deferred function (if any)\n\tvar deferpc uint64\n\tif topframe.TopmostDefer != nil && topframe.TopmostDefer.DwrapPC != 0 {\n\t\t_, _, deferfn := topframe.TopmostDefer.DeferredFunc(p)\n\t\tif deferfn != nil {\n\t\t\tvar err error\n\t\t\tdeferpc, err = FirstPCAfterPrologue(p, deferfn, false)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t}\n\t}\n\tif deferpc != 0 && deferpc != topframe.Current.PC {\n\t\tbp, err := allowDuplicateBreakpoint(p.SetBreakpoint(0, deferpc, NextDeferBreakpoint, sameGCond))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tif bp != nil && stepInto {\n\t\t\t// If DeferReturns is set then the breakpoint will also be triggered when\n\t\t\t// called from runtime.deferreturn. We only do this for the step command,\n\t\t\t// not for next or stepout.\n\t\t\tfor _, breaklet := range bp.Breaklets {\n\t\t\t\tif breaklet.Kind == NextDeferBreakpoint {\n\t\t\t\t\tbreaklet.DeferReturns = FindDeferReturnCalls(text)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn deferpc, nil\n}\n\n// findCallInstrForRet returns the PC address of the CALL instruction\n// immediately preceding the instruction at ret.\nfunc findCallInstrForRet(p Process, mem MemoryReadWriter, ret uint64, fn *Function) (uint64, error) {\n\ttext, err := disassemble(mem, nil, p.Breakpoints(), p.BinInfo(), fn.Entry, fn.End, false)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tvar prevInstr AsmInstruction\n\tfor _, instr := range text {\n\t\tif instr.Loc.PC == ret {\n\t\t\treturn prevInstr.Loc.PC, nil\n\t\t}\n\t\tprevInstr = instr\n\t}\n\treturn 0, fmt.Errorf(\"could not find CALL instruction for address %#x in %s\", ret, fn.Name)\n}\n\n// stepOutReverse sets a breakpoint on the CALL instruction that created the current frame, this is either:\n//   - the CALL instruction immediately preceding the return address of the\n//     current frame\n//   - the return address of the current frame if the current frame was\n//     created by a runtime.deferreturn run\n//   - the return address of the runtime.gopanic frame if the current frame\n//     was created by a panic\n//\n// This function is used to implement reversed StepOut\nfunc stepOutReverse(p *Target, topframe, retframe Stackframe, sameGCond ast.Expr) error {\n\tcurthread := p.CurrentThread()\n\tselg := p.SelectedGoroutine()\n\n\tif selg != nil && selg.Thread != nil {\n\t\tcurthread = selg.Thread\n\t}\n\n\tcallerText, err := disassemble(p.Memory(), nil, p.Breakpoints(), p.BinInfo(), retframe.Current.Fn.Entry, retframe.Current.Fn.End, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdeferReturns := FindDeferReturnCalls(callerText)\n\n\tvar frames []Stackframe\n\tif selg == nil {\n\t\tframes, err = ThreadStacktrace(p, curthread, 3)\n\t} else {\n\t\tframes, err = GoroutineStacktrace(p, selg, 3, 0)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar callpc uint64\n\n\tif ok, panicFrame := isPanicCall(frames); ok {\n\t\tif len(frames) < panicFrame+2 || frames[panicFrame+1].Current.Fn == nil {\n\t\t\tif panicFrame < len(frames) {\n\t\t\t\treturn &ErrNoSourceForPC{frames[panicFrame].Current.PC}\n\t\t\t} else {\n\t\t\t\treturn &ErrNoSourceForPC{frames[0].Current.PC}\n\t\t\t}\n\t\t}\n\t\tcallpc, err = findCallInstrForRet(p, p.Memory(), frames[panicFrame].Ret, frames[panicFrame+1].Current.Fn)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\tcallpc, err = findCallInstrForRet(p, p.Memory(), topframe.Ret, retframe.Current.Fn)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// check if the call instruction to this frame is a call to runtime.deferreturn\n\t\tif len(frames) > 0 {\n\t\t\tframes[0].Ret = callpc\n\t\t}\n\t\tif ok, pc := isDeferReturnCall(frames, deferReturns); ok && pc != 0 {\n\t\t\tcallpc = pc\n\t\t}\n\t}\n\n\t_, err = allowDuplicateBreakpoint(p.SetBreakpoint(0, callpc, NextBreakpoint, sameGCond))\n\n\treturn err\n}\n\n// onNextGoroutine returns true if this thread is on the goroutine requested by the current 'next' command\nfunc onNextGoroutine(tgt *Target, thread Thread, breakpoints *BreakpointMap) (bool, error) {\n\tvar breaklet *Breaklet\nbreakletSearch:\n\tfor i := range breakpoints.M {\n\t\tfor _, blet := range breakpoints.M[i].Breaklets {\n\t\t\tif blet.Kind&steppingMask != 0 && blet.Cond != nil {\n\t\t\t\tbreaklet = blet\n\t\t\t\tbreak breakletSearch\n\t\t\t}\n\t\t}\n\t}\n\tif breaklet == nil {\n\t\treturn false, nil\n\t}\n\t// Internal breakpoint conditions can take multiple different forms:\n\t// Step into breakpoints:\n\t//   runtime.curg.goid == X\n\t// Next or StepOut breakpoints:\n\t//   runtime.curg.goid == X && runtime.frameoff == Y\n\t// Breakpoints that can be hit either by stepping on a line in the same\n\t// function or by returning from the function:\n\t//   runtime.curg.goid == X && (runtime.frameoff == Y || runtime.frameoff == Z)\n\t// Here we are only interested in testing the runtime.curg.goid clause.\n\tw := onNextGoroutineWalker{tgt: tgt, thread: thread}\n\tast.Walk(&w, breaklet.Cond)\n\treturn w.ret, w.err\n}\n\ntype onNextGoroutineWalker struct {\n\ttgt    *Target\n\tthread Thread\n\tret    bool\n\terr    error\n}\n\nfunc (w *onNextGoroutineWalker) Visit(n ast.Node) ast.Visitor {\n\tif binx, isbin := n.(*ast.BinaryExpr); isbin && binx.Op == token.EQL {\n\t\tx := astutil.ExprToString(binx.X)\n\t\tif x == \"runtime.curg.goid\" || x == \"runtime.threadid\" {\n\t\t\tw.ret, w.err = evalBreakpointCondition(w.tgt, w.thread, n.(ast.Expr))\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn w\n}\n\nfunc (t *Target) clearHardcodedBreakpoints() {\n\tthreads := t.ThreadList()\n\tfor _, thread := range threads {\n\t\tif thread.Breakpoint().Breakpoint != nil && thread.Breakpoint().LogicalID() == hardcodedBreakpointID {\n\t\t\tthread.Breakpoint().Active = false\n\t\t\tthread.Breakpoint().Breakpoint = nil\n\t\t}\n\t}\n}\n\n// handleHardcodedBreakpoints looks for threads stopped at a hardcoded\n// breakpoint (i.e. a breakpoint instruction, like INT 3, hardcoded in the\n// program's text) and sets a fake breakpoint on them with logical id\n// hardcodedBreakpointID.\n// It checks trapthread and all threads that have SoftExc returning true.\nfunc (t *Target) handleHardcodedBreakpoints(grp *TargetGroup, trapthread Thread, threads []Thread) error {\n\tmem := t.Memory()\n\tarch := t.BinInfo().Arch\n\trecorded, _ := t.recman.Recorded()\n\n\tisHardcodedBreakpoint := func(thread Thread, pc uint64) uint64 {\n\t\tfor _, bpinstr := range [][]byte{arch.BreakpointInstruction(), arch.AltBreakpointInstruction()} {\n\t\t\tif bpinstr == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbuf := make([]byte, len(bpinstr))\n\t\t\tpc2 := pc\n\t\t\tif arch.BreakInstrMovesPC() {\n\t\t\t\tpc2 -= uint64(len(bpinstr))\n\t\t\t}\n\t\t\t_, _ = mem.ReadMemory(buf, pc2)\n\t\t\tif bytes.Equal(buf, bpinstr) {\n\t\t\t\treturn uint64(len(bpinstr))\n\t\t\t}\n\t\t}\n\t\treturn 0\n\t}\n\n\tstepOverBreak := func(thread Thread, pc uint64) {\n\t\tif arch.BreakInstrMovesPC() {\n\t\t\treturn\n\t\t}\n\t\tif recorded {\n\t\t\treturn\n\t\t}\n\t\tif bpsize := isHardcodedBreakpoint(thread, pc); bpsize > 0 {\n\t\t\tsetPC(thread, pc+bpsize)\n\t\t}\n\t}\n\n\tsetHardcodedBreakpoint := func(thread Thread, loc *Location) {\n\t\tbpstate := thread.Breakpoint()\n\t\thcbp := &Breakpoint{}\n\t\tbpstate.Active = true\n\t\tbpstate.Breakpoint = hcbp\n\t\thcbp.FunctionName = loc.Fn.Name\n\t\thcbp.File = loc.File\n\t\thcbp.Line = loc.Line\n\t\thcbp.Addr = loc.PC\n\t\thcbp.Logical = &LogicalBreakpoint{}\n\t\thcbp.Logical.Name = HardcodedBreakpoint\n\t\thcbp.Breaklets = []*Breaklet{{Kind: UserBreakpoint, LogicalID: hardcodedBreakpointID}}\n\t\tt.StopReason = StopHardcodedBreakpoint\n\t}\n\n\tfor _, thread := range threads {\n\t\tif thread.Breakpoint().Breakpoint != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif (thread.ThreadID() != trapthread.ThreadID()) && !thread.SoftExc() {\n\t\t\tcontinue\n\t\t}\n\t\tif (thread.ThreadID() == trapthread.ThreadID()) && grp.cctx.GetManualStopRequested() {\n\t\t\tcontinue\n\t\t}\n\n\t\tloc, err := ThreadLocation(thread)\n\t\tif err != nil || loc.Fn == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tg, _ := GetG(thread)\n\n\t\tswitch {\n\t\tcase loc.Fn.Name == \"runtime.breakpoint\":\n\t\t\tif recorded, _ := t.recman.Recorded(); recorded {\n\t\t\t\tsetHardcodedBreakpoint(thread, loc)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tstepOverBreak(thread, loc.PC)\n\t\t\t// In linux-arm64, PtraceSingleStep seems cannot step over BRK instruction\n\t\t\t// (linux-arm64 feature or kernel bug maybe).\n\t\t\t// RISC-V use ebreak as hardcoded breakpoint in Go, however we use c.ebreak\n\t\t\t// in delve to support breakpoints in cgo.\n\t\t\tif !arch.BreakInstrMovesPC() && runtime.GOARCH != \"riscv64\" {\n\t\t\t\tsetPC(thread, loc.PC+uint64(arch.BreakpointSize()))\n\t\t\t}\n\t\t\t// Single-step current thread until we exit runtime.breakpoint and\n\t\t\t// runtime.Breakpoint.\n\t\t\t// On go < 1.8 it was sufficient to single-step twice on go1.8 a change\n\t\t\t// to the compiler requires 4 steps.\n\t\t\tif err := stepInstructionOut(grp, t, thread, \"runtime.breakpoint\", \"runtime.Breakpoint\"); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tsetHardcodedBreakpoint(thread, loc)\n\t\tcase g == nil || t.fncallForG[g.ID] == nil:\n\t\t\t// Check that PC is inside a function (not the entry point) and the\n\t\t\t// preceding instruction is a hardcoded breakpoint.\n\t\t\t// We explicitly check for entry points of functions because the space\n\t\t\t// between functions is usually filled with hardcoded breakpoints.\n\t\t\tif (loc.Fn == nil || loc.Fn.Entry != loc.PC) && isHardcodedBreakpoint(thread, loc.PC) > 0 {\n\t\t\t\tstepOverBreak(thread, loc.PC)\n\t\t\t\tsetHardcodedBreakpoint(thread, loc)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc rangeFrameInactivateNextBreakpoints(p *Target, fn *Function) {\n\tpc, err := FirstPCAfterPrologue(p, fn, false)\n\tif err != nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"Error inactivating next breakpoints after exiting a range-over-func body: %v\", err)\n\t\treturn\n\t}\n\n\tfor _, bp := range p.Breakpoints().M {\n\t\tif bp.Addr < fn.Entry || bp.Addr >= fn.End || bp.Addr == pc {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, bplet := range bp.Breaklets {\n\t\t\tif bplet.Kind != NextBreakpoint {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// We set to NextInactivatedBreakpoint instead of deleting them because\n\t\t\t// we can't delete breakpoints (or breakpointlets) while breakpoint\n\t\t\t// conditions are being evaluated.\n\t\t\tbplet.Kind = NextInactivatedBreakpoint\n\t\t}\n\t}\n}\n\n// stepIntoCoroutineMaybe: if the current instruction is a call to a closure\n// defined into iter.Pull (i.e. next, yield and stop) stepIntoCoroutineMaybe\n// will set up a new breakpoint to step into the associated coroutine code\n// and returns true.\n// In every other case it returns false.\nfunc stepIntoCoroutineMaybe(curthread Thread, p *Target, text []AsmInstruction) (bool, error) {\n\tif len(text) == 0 || !text[0].IsCall() || text[0].DestLoc == nil || text[0].DestLoc.Fn == nil || !strings.HasPrefix(text[0].DestLoc.Fn.Name, \"iter.Pull\") || !strings.Contains(text[0].DestLoc.Fn.Name, \".func\") {\n\t\treturn false, nil\n\t}\n\tbi := p.BinInfo()\n\n\t// Read the closure that we are going to call currently\n\n\tregs, err := curthread.Registers()\n\tif err != nil {\n\t\treturn false, fmt.Errorf(\"could not get registers trying to step into coroutine: %v\", err)\n\t}\n\tdregs := bi.Arch.RegistersToDwarfRegisters(0, regs)\n\tcst := text[0].DestLoc.Fn.extra(bi).closureStructType\n\tclos := newVariable(\"\", dregs.Uint64Val(bi.Arch.ContextRegNum), cst, p.BinInfo(), p.Memory())\n\n\t// Get variable 'c' from the current closure, change its type to\n\t// runtime.coro (it is normally iter.coro, which is an internal\n\t// placeholder).\n\n\tcvar, err := clos.structField(\"c\")\n\tif err != nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"iter.Pull problems accessing captured 'c' variable in closure: %v\", err)\n\t\treturn false, nil\n\t}\n\tcvar = cvar.maybeDereference()\n\tif cvar.Unreadable != nil {\n\t\treturn false, fmt.Errorf(\"could not read coroutine: %v\", cvar.Unreadable)\n\t}\n\ttypRuntimeCoro, err := bi.findType(\"runtime.coro\")\n\tif err != nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"could not find runtime.coro type: %v\", err)\n\t\treturn false, nil\n\t}\n\tcvar = newVariable(\"\", cvar.Addr, typRuntimeCoro, p.BinInfo(), p.Memory())\n\n\t// Set a breakpoint on the first user frame of goroutine c.gp (but\n\t// something special needs to happen if c.gp is executing\n\t// runtime.corostart).\n\n\tgp := cvar.loadFieldNamed(\"gp\")\n\tif gp == nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"could not load runtime.coro.gp field (unreadable: %v)\", cvar.Unreadable)\n\t\treturn false, nil\n\t}\n\tgaddr, _ := constant.Uint64Val(gp.Value)\n\n\tgvar, err := newGVariable(curthread, gaddr, false)\n\tif err != nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"could not load runtime.coro.gp: %v\", err)\n\t\treturn false, nil\n\t}\n\tg, err := gvar.parseG()\n\tif err != nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"could not load runtime.coro.gp: %v\", err)\n\t\treturn false, nil\n\t}\n\n\tif g.CurrentLoc.Fn == nil {\n\t\tlogflags.DebuggerLogger().Errorf(\"could not determine target location of coroutine\")\n\t\treturn false, nil\n\t}\n\n\tvar bploc Location\n\n\tif g.CurrentLoc.Fn.Name == \"runtime.corostart\" {\n\t\t// If the associated goroutine is on runtime.corostart that means the\n\t\t// coroutine hasn't started yet, to give a smooth user experience we\n\t\t// shouldn't just switch to the goroutine, but instead put a breakpoint on\n\t\t// the entry point of the sequence function.\n\t\t//\n\t\t// This function is stored in the captured variable 'seq' in 'c.f'\n\n\t\tf := cvar.loadFieldNamed(\"f\")\n\t\tif f == nil || f.Unreadable != nil {\n\t\t\tlogflags.DebuggerLogger().Errorf(\"could not determine target location of coroutine (corostart)\")\n\t\t\treturn false, nil\n\t\t}\n\t\tseq := f.fieldVariable(\"seq\")\n\t\tif seq == nil || seq.Unreadable != nil {\n\t\t\tlogflags.DebuggerLogger().Errorf(\"could not determine target location of coroutine (corostart -- seq)\")\n\t\t\treturn false, nil\n\t\t}\n\t\tfn := bi.PCToFunc(seq.Base)\n\t\tif fn == nil {\n\t\t\tlogflags.DebuggerLogger().Errorf(\"could not determine target location of coroutine (corostart), no function for PC: %#x\", seq.Base)\n\t\t\treturn false, nil\n\t\t}\n\t\tpc, err := FirstPCAfterPrologue(p, fn, false)\n\t\tif err != nil {\n\t\t\tlogflags.DebuggerLogger().Errorf(\"FirstPCAfterPrologue error: %v\", err)\n\t\t\tpc = fn.Entry\n\t\t}\n\t\tbploc = Location{PC: pc, Fn: fn}\n\t} else {\n\t\tbploc = g.UserCurrent()\n\t}\n\n\t// Invalidate all current temp breakpoints\n\tfor _, bp := range p.Breakpoints().M {\n\t\tfor _, bplet := range bp.Breaklets {\n\t\t\tif bplet.Kind&steppingMask != 0 {\n\t\t\t\tbplet.Kind = NextInactivatedBreakpoint\n\t\t\t}\n\t\t}\n\t}\n\n\t_, err = p.SetBreakpoint(0, bploc.PC, NextBreakpoint, goroutineCondition(g.ID))\n\treturn true, err\n}\n"
  },
  {
    "path": "pkg/proc/target_group.go",
    "content": "package proc\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\n// TargetGroup represents a group of target processes being debugged that\n// will be resumed and stopped simultaneously.\n// New targets are automatically added to the group if exec catching is\n// enabled and the backend supports it, otherwise the group will always\n// contain a single target process.\ntype TargetGroup struct {\n\tprocgrp ProcessGroup\n\n\ttargets           []*Target\n\tSelected          *Target\n\tfollowExecEnabled bool\n\tfollowExecRegex   *regexp.Regexp\n\teventsFn          func(*Event)\n\n\tRecordingManipulation\n\trecman RecordingManipulationInternal\n\n\t// StopReason describes the reason why the selected target process is stopped.\n\t// A process could be stopped for multiple simultaneous reasons, in which\n\t// case only one will be reported.\n\tStopReason StopReason\n\n\t// KeepSteppingBreakpoints determines whether certain stop reasons (e.g. manual halts)\n\t// will keep the stepping breakpoints instead of clearing them.\n\tKeepSteppingBreakpoints KeepSteppingBreakpoints\n\n\tLogicalBreakpoints map[int]*LogicalBreakpoint\n\n\tcctx    *ContinueOnceContext\n\tcfg     NewTargetGroupConfig\n\tCanDump bool\n}\n\n// NewTargetGroupConfig contains the configuration for a new TargetGroup object,\ntype NewTargetGroupConfig struct {\n\tDebugInfoDirs       []string   // Directories to search for split debug info\n\tDisableAsyncPreempt bool       // Go 1.14 asynchronous preemption should be disabled\n\tStopReason          StopReason // Initial stop reason\n\tCanDump             bool       // Can create core dumps (must implement ProcessInternal.MemoryMap)\n}\n\ntype AddTargetFunc func(ProcessInternal, int, Thread, string, StopReason, string) (*Target, error)\n\n// NewGroup creates a TargetGroup containing the specified Target.\nfunc NewGroup(procgrp ProcessGroup, cfg NewTargetGroupConfig) (*TargetGroup, AddTargetFunc) {\n\tgrp := &TargetGroup{\n\t\tprocgrp:            procgrp,\n\t\tcctx:               &ContinueOnceContext{},\n\t\tLogicalBreakpoints: make(map[int]*LogicalBreakpoint),\n\t\tStopReason:         cfg.StopReason,\n\t\tcfg:                cfg,\n\t\tCanDump:            cfg.CanDump,\n\t}\n\treturn grp, grp.addTarget\n}\n\n// Restart copies breakpoints and follow exec status from oldgrp into grp.\n// Breakpoints that can not be set will be discarded, if discard is not nil\n// it will be called for each discarded breakpoint.\nfunc Restart(grp, oldgrp *TargetGroup, discard func(*LogicalBreakpoint, error)) {\n\ttoenable := []*LogicalBreakpoint{}\n\tfor _, bp := range oldgrp.LogicalBreakpoints {\n\t\tif _, ok := grp.LogicalBreakpoints[bp.LogicalID]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tgrp.LogicalBreakpoints[bp.LogicalID] = bp\n\t\tbp.TotalHitCount = 0\n\t\tbp.HitCount = make(map[int64]uint64)\n\t\tbp.Set.PidAddrs = nil // breakpoints set through a list of addresses can not be restored after a restart\n\t\tif bp.enabled {\n\t\t\ttoenable = append(toenable, bp)\n\t\t}\n\t}\n\tfor _, bp := range toenable {\n\t\tbp.condSatisfiable = breakpointConditionSatisfiable(grp.LogicalBreakpoints, bp)\n\t\terr := grp.enableBreakpoint(bp)\n\t\tif err != nil {\n\t\t\tif discard != nil {\n\t\t\t\tdiscard(bp, err)\n\t\t\t}\n\t\t\tdelete(grp.LogicalBreakpoints, bp.LogicalID)\n\t\t}\n\t}\n\tif oldgrp.followExecEnabled {\n\t\trgx := \"\"\n\t\tif oldgrp.followExecRegex != nil {\n\t\t\trgx = oldgrp.followExecRegex.String()\n\t\t}\n\t\tgrp.FollowExec(true, rgx)\n\t}\n}\n\nfunc (grp *TargetGroup) addTarget(p ProcessInternal, pid int, currentThread Thread, path string, stopReason StopReason, cmdline string) (*Target, error) {\n\tlogger := logflags.DebuggerLogger()\n\tif len(grp.targets) > 0 {\n\t\tmatchesPattern := grp.followExecRegex == nil || grp.followExecRegex.MatchString(cmdline)\n\t\tif !grp.followExecEnabled {\n\t\t\tlogger.Debugf(\"Detaching from child target (follow-exec disabled) %d %q\", pid, cmdline)\n\t\t} else if !matchesPattern {\n\t\t\tlogger.Debugf(\"Detaching from child target (follow-exec regex not matched) %d %q\", pid, cmdline)\n\t\t}\n\n\t\t// Notify listeners that a child process was spawned.\n\t\t//\n\t\t// We do this regardless of whether the process is debuggable and\n\t\t// regardless of whether follow-exec is enabled; when run by an IDE in\n\t\t// DAP mode, we want to give the IDE a chance to handle the spawned\n\t\t// process.\n\t\t//\n\t\t// Defer the call so that - if the process _can_ be debugged - listeners\n\t\t// are notified after the new target is set up.\n\t\twillFollow := grp.followExecEnabled && matchesPattern\n\t\tif grp.Selected != nil {\n\t\t\tif fn := grp.Selected.BinInfo().eventsFn; fn != nil {\n\t\t\t\tdefer fn(&Event{\n\t\t\t\t\tKind: EventProcessSpawned,\n\t\t\t\t\tProcessSpawnedEventDetails: &ProcessSpawnedEventDetails{\n\t\t\t\t\t\tPID:        pid,\n\t\t\t\t\t\tThreadID:   currentThread.ThreadID(),\n\t\t\t\t\t\tCmdline:    cmdline,\n\t\t\t\t\t\tWillFollow: willFollow,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif !willFollow {\n\t\t\treturn nil, nil\n\t\t}\n\t}\n\tt, err := grp.newTarget(p, pid, currentThread, path, cmdline)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tt.StopReason = stopReason\n\tlogger.Debugf(\"Adding target %d %q\", t.Pid(), t.CmdLine)\n\tif t.partOfGroup {\n\t\tpanic(\"internal error: target is already part of group\")\n\t}\n\tt.partOfGroup = true\n\tif grp.RecordingManipulation == nil {\n\t\tgrp.RecordingManipulation = t.recman\n\t\tgrp.recman = t.recman\n\t}\n\tif grp.Selected == nil {\n\t\tgrp.Selected = t\n\t}\n\tt.BinInfo().eventsFn = grp.eventsFn\n\tt.Breakpoints().Logical = grp.LogicalBreakpoints\n\tfor _, lbp := range grp.LogicalBreakpoints {\n\t\tif lbp.LogicalID < 0 {\n\t\t\tcontinue\n\t\t}\n\t\tvar wasSuspended bool\n\t\tif grp.eventsFn != nil {\n\t\t\twasSuspended = lbp.isSuspendedOnGroup(grp)\n\t\t}\n\t\terr := enableBreakpointOnTarget(t, lbp)\n\t\tif err != nil {\n\t\t\tlogger.Debugf(\"could not enable breakpoint %d on new target %d: %v\", lbp.LogicalID, t.Pid(), err)\n\t\t} else {\n\t\t\tlogger.Debugf(\"breakpoint %d enabled on new target %d: %v\", lbp.LogicalID, t.Pid(), err)\n\t\t\tif grp.eventsFn != nil {\n\t\t\t\tisSuspended := lbp.isSuspendedOnTarget(t)\n\t\t\t\tif wasSuspended && !isSuspended {\n\t\t\t\t\tgrp.eventsFn(&Event{\n\t\t\t\t\t\tKind: EventBreakpointMaterialized,\n\t\t\t\t\t\tBreakpointMaterializedEventDetails: &BreakpointMaterializedEventDetails{\n\t\t\t\t\t\t\tBreakpoint: lbp,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tgrp.targets = append(grp.targets, t)\n\treturn t, nil\n}\n\n// Targets returns a slice of all targets in the group, including the\n// ones that are no longer valid.\nfunc (grp *TargetGroup) Targets() []*Target {\n\treturn grp.targets\n}\n\n// Valid returns true if any target in the target group is valid.\nfunc (grp *TargetGroup) Valid() (bool, error) {\n\tvar err0 error\n\tfor _, t := range grp.targets {\n\t\tok, err := t.Valid()\n\t\tif ok {\n\t\t\treturn true, nil\n\t\t}\n\t\tif err0 == nil {\n\t\t\terr0 = err\n\t\t}\n\t}\n\treturn false, err0\n}\n\nfunc (grp *TargetGroup) numValid() int {\n\tr := 0\n\tfor _, t := range grp.targets {\n\t\tok, _ := t.Valid()\n\t\tif ok {\n\t\t\tr++\n\t\t}\n\t}\n\treturn r\n}\n\n// Detach detaches all targets in the group.\nfunc (grp *TargetGroup) Detach(kill bool) error {\n\tvar errs []string\n\tfor i := len(grp.targets) - 1; i >= 0; i-- {\n\t\tt := grp.targets[i]\n\t\tisvalid, _ := t.Valid()\n\t\tif !isvalid {\n\t\t\tcontinue\n\t\t}\n\t\terr := grp.detachTarget(t, kill)\n\t\tif err != nil {\n\t\t\terrs = append(errs, fmt.Sprintf(\"could not detach process %d: %v\", t.Pid(), err))\n\t\t}\n\t}\n\tif len(errs) > 0 {\n\t\treturn fmt.Errorf(\"%s\", strings.Join(errs, \"\\n\"))\n\t}\n\treturn grp.procgrp.Close()\n}\n\n// detachTarget will detach the target from the underlying process.\n// This means the debugger will no longer receive events from the process\n// we were previously debugging.\n// If kill is true then the process will be killed when we detach.\nfunc (grp *TargetGroup) detachTarget(t *Target, kill bool) error {\n\tif !kill {\n\t\tif t.asyncPreemptChanged {\n\t\t\tsetAsyncPreemptOff(t, t.asyncPreemptOff)\n\t\t}\n\t\tfor _, bp := range t.Breakpoints().M {\n\t\t\tif bp != nil {\n\t\t\t\terr := t.ClearBreakpoint(bp.Addr)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tt.StopReason = StopUnknown\n\treturn grp.procgrp.Detach(t.Pid(), kill)\n}\n\n// HasSteppingBreakpoints returns true if any of the targets has stepping breakpoints set.\nfunc (grp *TargetGroup) HasSteppingBreakpoints() bool {\n\tfor _, t := range grp.targets {\n\t\tif t.Breakpoints().HasSteppingBreakpoints() {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// ClearSteppingBreakpoints removes all stepping breakpoints.\nfunc (grp *TargetGroup) ClearSteppingBreakpoints() error {\n\tfor _, t := range grp.targets {\n\t\tif t.Breakpoints().HasSteppingBreakpoints() {\n\t\t\treturn t.ClearSteppingBreakpoints()\n\t\t}\n\t}\n\treturn nil\n}\n\n// ThreadList returns a list of all threads in all target processes.\nfunc (grp *TargetGroup) ThreadList() []Thread {\n\tr := []Thread{}\n\tfor _, t := range grp.targets {\n\t\tr = append(r, t.ThreadList()...)\n\t}\n\treturn r\n}\n\n// TargetForThread returns the target containing the given thread.\nfunc (grp *TargetGroup) TargetForThread(tid int) *Target {\n\tfor _, t := range grp.targets {\n\t\tif _, ok := t.FindThread(tid); ok {\n\t\t\treturn t\n\t\t}\n\t}\n\treturn nil\n}\n\n// SetBreakpointEnabled either enables or disabled the specified breakpoint based on the value of enabled.\nfunc (grp *TargetGroup) SetBreakpointEnabled(lbp *LogicalBreakpoint, enabled bool) (err error) {\n\tswitch {\n\tcase lbp.enabled && !enabled:\n\t\tlbp.enabled = false\n\t\terr = grp.disableBreakpoint(lbp)\n\tcase !lbp.enabled && enabled:\n\t\tlbp.enabled = true\n\t\tlbp.condSatisfiable = breakpointConditionSatisfiable(grp.LogicalBreakpoints, lbp)\n\t\terr = grp.enableBreakpoint(lbp)\n\t}\n\treturn\n}\n\n// enableBreakpoint re-enables a disabled logical breakpoint.\nfunc (grp *TargetGroup) enableBreakpoint(lbp *LogicalBreakpoint) error {\n\tvar err0, errNotFound, errExists error\n\tdidSet := false\ntargetLoop:\n\tfor _, p := range grp.targets {\n\t\terr := enableBreakpointOnTarget(p, lbp)\n\n\t\tswitch err.(type) {\n\t\tcase nil:\n\t\t\tdidSet = true\n\t\tcase *ErrFunctionNotFound, *ErrCouldNotFindLine:\n\t\t\terrNotFound = err\n\t\tcase BreakpointExistsError:\n\t\t\terrExists = err\n\t\tdefault:\n\t\t\terr0 = err\n\t\t\tbreak targetLoop\n\t\t}\n\t}\n\tif errNotFound != nil && !didSet {\n\t\treturn errNotFound\n\t}\n\tif errExists != nil && !didSet {\n\t\treturn errExists\n\t}\n\tif !didSet {\n\t\tif _, err := grp.Valid(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif err0 != nil {\n\t\tit := ValidTargets{Group: grp}\n\t\tfor it.Next() {\n\t\t\tfor _, bp := range it.Breakpoints().M {\n\t\t\t\tif bp.LogicalID() == lbp.LogicalID {\n\t\t\t\t\tif err1 := it.ClearBreakpoint(bp.Addr); err1 != nil {\n\t\t\t\t\t\treturn fmt.Errorf(\"error while creating breakpoint: %v, additionally the breakpoint could not be properly rolled back: %v\", err0, err1)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn err0\n\t}\n\treturn nil\n}\n\nfunc enableBreakpointOnTarget(p *Target, lbp *LogicalBreakpoint) error {\n\tif !lbp.enabled || !lbp.condSatisfiable {\n\t\treturn nil\n\t}\n\tvar err error\n\tvar addrs []uint64\n\tswitch {\n\tcase lbp.Set.File != \"\":\n\t\taddrs, err = FindFileLocation(p, lbp.Set.File, lbp.Set.Line)\n\tcase lbp.Set.FunctionName != \"\":\n\t\taddrs, err = FindFunctionLocation(p, lbp.Set.FunctionName, lbp.Set.Line)\n\tcase len(lbp.Set.PidAddrs) > 0:\n\t\tfor _, pidAddr := range lbp.Set.PidAddrs {\n\t\t\tif pidAddr.Pid == p.Pid() {\n\t\t\t\taddrs = append(addrs, pidAddr.Addr)\n\t\t\t}\n\t\t}\n\tcase lbp.Set.Expr != nil:\n\t\taddrs = lbp.Set.Expr(p)\n\tdefault:\n\t\treturn fmt.Errorf(\"breakpoint %d can not be enabled\", lbp.LogicalID)\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, addr := range addrs {\n\t\t_, err = p.SetBreakpoint(lbp.LogicalID, addr, UserBreakpoint, nil)\n\t\tif err != nil {\n\t\t\tif _, isexists := err.(BreakpointExistsError); isexists {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn err\n}\n\n// disableBreakpoint disables a logical breakpoint.\nfunc (grp *TargetGroup) disableBreakpoint(lbp *LogicalBreakpoint) error {\n\tvar errs []error\n\tn := 0\n\tit := ValidTargets{Group: grp}\n\tfor it.Next() {\n\t\tfor _, bp := range it.Breakpoints().M {\n\t\t\tif bp.LogicalID() == lbp.LogicalID {\n\t\t\t\tn++\n\t\t\t\terr := it.ClearBreakpoint(bp.Addr)\n\t\t\t\tif err != nil {\n\t\t\t\t\terrs = append(errs, err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif len(errs) > 0 {\n\t\tbuf := new(bytes.Buffer)\n\t\tfor i, err := range errs {\n\t\t\tfmt.Fprintf(buf, \"%s\", err)\n\t\t\tif i != len(errs)-1 {\n\t\t\t\tfmt.Fprintf(buf, \", \")\n\t\t\t}\n\t\t}\n\n\t\tif len(errs) == n {\n\t\t\treturn fmt.Errorf(\"unable to clear breakpoint %d: %v\", lbp.LogicalID, buf.String())\n\t\t}\n\t\treturn fmt.Errorf(\"unable to clear breakpoint %d (partial): %s\", lbp.LogicalID, buf.String())\n\t}\n\treturn nil\n}\n\n// ChangeBreakpointCondition changes the breakpoint condition of lbp.\nfunc (grp *TargetGroup) ChangeBreakpointCondition(lbp *LogicalBreakpoint, cond, hitCond string, hitCondPerG bool) error {\n\tlbp.cond = nil\n\tif cond != \"\" {\n\t\tvar err error\n\t\tlbp.cond, err = parser.ParseExpr(cond)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tt := ValidTargets{Group: grp}\n\tfor t.Next() {\n\t\tfor _, bp := range t.Breakpoints().M {\n\t\t\tif bp.LogicalID() == lbp.LogicalID {\n\t\t\t\tbp.UserBreaklet().Cond = lbp.cond\n\t\t\t}\n\t\t}\n\t}\n\n\tlbp.hitCond = nil\n\tif hitCond != \"\" {\n\t\topTok, val, err := parseHitCondition(hitCond)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlbp.hitCond = &struct {\n\t\t\tOp  token.Token\n\t\t\tVal int\n\t\t}{opTok, val}\n\t\tlbp.HitCondPerG = hitCondPerG\n\t}\n\n\tlbp.condUsesHitCounts = breakpointConditionUsesHitCounts(lbp)\n\n\tif lbp.enabled {\n\t\tswitch {\n\t\tcase lbp.condSatisfiable && !breakpointConditionSatisfiable(grp.LogicalBreakpoints, lbp):\n\t\t\tlbp.condSatisfiable = false\n\t\t\tgrp.disableBreakpoint(lbp)\n\t\tcase !lbp.condSatisfiable && breakpointConditionSatisfiable(grp.LogicalBreakpoints, lbp):\n\t\t\tlbp.condSatisfiable = true\n\t\t\tgrp.enableBreakpoint(lbp)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc parseHitCondition(hitCond string) (token.Token, int, error) {\n\t// A hit condition can be in the following formats:\n\t// - \"number\"\n\t// - \"OP number\"\n\thitConditionRegex := regexp.MustCompile(`(([=><%!])+|)( |)((\\d|_)+)`)\n\n\tmatch := hitConditionRegex.FindStringSubmatch(strings.TrimSpace(hitCond))\n\tif match == nil || len(match) != 6 {\n\t\treturn 0, 0, fmt.Errorf(\"unable to parse breakpoint hit condition: %q\\nhit conditions should be of the form \\\"number\\\" or \\\"OP number\\\"\", hitCond)\n\t}\n\n\topStr := match[1]\n\tvar opTok token.Token\n\tswitch opStr {\n\tcase \"==\", \"\":\n\t\topTok = token.EQL\n\tcase \">=\":\n\t\topTok = token.GEQ\n\tcase \"<=\":\n\t\topTok = token.LEQ\n\tcase \">\":\n\t\topTok = token.GTR\n\tcase \"<\":\n\t\topTok = token.LSS\n\tcase \"%\":\n\t\topTok = token.REM\n\tcase \"!=\":\n\t\topTok = token.NEQ\n\tdefault:\n\t\treturn 0, 0, fmt.Errorf(\"unable to parse breakpoint hit condition: %q\\ninvalid operator: %q\", hitCond, opStr)\n\t}\n\n\tnumStr := match[4]\n\tval, parseErr := strconv.Atoi(numStr)\n\tif parseErr != nil {\n\t\treturn 0, 0, fmt.Errorf(\"unable to parse breakpoint hit condition: %q\\ninvalid number: %q\", hitCond, numStr)\n\t}\n\n\treturn opTok, val, nil\n}\n\n// manageUnsatisfiableBreakpoints automatically disables breakpoints with unsatisifiable hit conditions.\nfunc (grp *TargetGroup) manageUnsatisfiableBreakpoints() error {\n\tfor _, lbp := range grp.LogicalBreakpoints {\n\t\tif lbp.enabled {\n\t\t\tif lbp.condSatisfiable && !breakpointConditionSatisfiable(grp.LogicalBreakpoints, lbp) {\n\t\t\t\tlbp.condSatisfiable = false\n\t\t\t\terr := grp.disableBreakpoint(lbp)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t} else if lbp.condUsesHitCounts && !lbp.condSatisfiable && breakpointConditionSatisfiable(grp.LogicalBreakpoints, lbp) {\n\t\t\t\tlbp.condSatisfiable = true\n\t\t\t\terr := grp.enableBreakpoint(lbp)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// FollowExec enables or disables follow exec mode. When follow exec mode is\n// enabled new processes spawned by the target process are automatically\n// added to the target group.\n// If regex is not the empty string only processes whose command line\n// matches regex will be added to the target group.\nfunc (grp *TargetGroup) FollowExec(v bool, regex string) error {\n\tgrp.followExecRegex = nil\n\tif regex != \"\" && v {\n\t\tvar err error\n\t\tgrp.followExecRegex, err = regexp.Compile(regex)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tit := ValidTargets{Group: grp}\n\tfor it.Next() {\n\t\terr := it.proc.FollowExec(v)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tgrp.followExecEnabled = v\n\treturn nil\n}\n\n// FollowExecEnabled returns true if follow exec is enabled\nfunc (grp *TargetGroup) FollowExecEnabled() bool {\n\treturn grp.followExecEnabled\n}\n\n// SetEventsFn sets a function that is called to communicate events\n// happening while the target process is running.\nfunc (grp *TargetGroup) SetEventsFn(eventsFn func(*Event)) {\n\tgrp.eventsFn = eventsFn\n\tit := ValidTargets{Group: grp}\n\tfor it.Next() {\n\t\tit.BinInfo().eventsFn = eventsFn\n\t}\n}\n\n// CancelDownloads cancels ongoing downloads, if any.\nfunc (grp *TargetGroup) CancelDownloads() bool {\n\tr := false\n\tit := ValidTargets{Group: grp}\n\tfor it.Next() {\n\t\tit.BinInfo().cancelDownloadsMu.Lock()\n\t\tif it.BinInfo().cancelDownloads != nil {\n\t\t\tit.BinInfo().cancelDownloads()\n\t\t\tr = true\n\t\t}\n\t\tit.BinInfo().cancelDownloadsMu.Unlock()\n\t}\n\treturn r\n}\n\n// ValidTargets iterates through all valid targets in Group.\ntype ValidTargets struct {\n\t*Target\n\tGroup *TargetGroup\n\tstart int\n}\n\n// Next moves to the next valid target, returns false if there aren't more\n// valid targets in the group.\nfunc (it *ValidTargets) Next() bool {\n\tfor i := it.start; i < len(it.Group.targets); i++ {\n\t\tif ok, _ := it.Group.targets[i].Valid(); ok {\n\t\t\tit.Target = it.Group.targets[i]\n\t\t\tit.start = i + 1\n\t\t\treturn true\n\t\t}\n\t}\n\tit.start = len(it.Group.targets)\n\tit.Target = nil\n\treturn false\n}\n\n// Reset returns the iterator to the start of the group.\nfunc (it *ValidTargets) Reset() {\n\tit.Target = nil\n\tit.start = 0\n}\n\n// Event is an event that happened during execution of the debugged program.\ntype Event struct {\n\tKind EventKind\n\t*BinaryInfoDownloadEventDetails\n\t*BreakpointMaterializedEventDetails\n\t*ProcessSpawnedEventDetails\n}\n\ntype EventKind uint8\n\nconst (\n\tEventResumed EventKind = iota\n\tEventStopped\n\tEventBinaryInfoDownload\n\tEventBreakpointMaterialized\n\tEventProcessSpawned\n)\n\n// BinaryInfoDownloadEventDetails describes the details of a BinaryInfoDownloadEvent\ntype BinaryInfoDownloadEventDetails struct {\n\tImagePath, Progress string\n}\n\n// BreakpointMaterializedEventDetails describes the details of a BreakpointMaterializedEvent\ntype BreakpointMaterializedEventDetails struct {\n\tBreakpoint *LogicalBreakpoint\n}\n\n// ProcessSpawnedEventDetails describes the details of a ProcessSpawnedEvent\ntype ProcessSpawnedEventDetails struct {\n\tPID        int\n\tThreadID   int\n\tCmdline    string\n\tWillFollow bool\n}\n"
  },
  {
    "path": "pkg/proc/test/support.go",
    "content": "package test\n\nimport (\n\t\"crypto/rand\"\n\t\"encoding/hex\"\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"slices\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n)\n\n// EnableRace allows to configure whether the race detector is enabled on target process.\nvar EnableRace = flag.Bool(\"racetarget\", false, \"Enables race detector on inferior process\")\n\nvar runningWithFixtures bool\n\n// Fixture is a test binary.\ntype Fixture struct {\n\t// Name is the short name of the fixture.\n\tName string\n\t// Path is the absolute path to the test binary.\n\tPath string\n\t// Source is the absolute path of the test binary source.\n\tSource string\n\t// BuildDir is the directory where the build command was run.\n\tBuildDir string\n\t// buildDone is closed when the fixture is built\n\tbuildDone <-chan struct{}\n}\n\n// FixtureKey holds the name and builds flags used for a test fixture.\ntype fixtureKey struct {\n\tName  string\n\tFlags BuildFlags\n}\n\n// Fixtures is a map of fixtureKey{ Fixture.Name, buildFlags } to Fixture.\nvar fixtures = make(map[fixtureKey]*Fixture)\nvar fixturesmu sync.Mutex\n\n// pathsToRemove is a list of files and directories to remove after running all the tests\nvar pathsToRemove []string\nvar pathmu sync.Mutex\n\nfunc AddPathToRemove(path string) {\n\tpathmu.Lock()\n\tdefer pathmu.Unlock()\n\tpathsToRemove = append(pathsToRemove, path)\n}\n\n// FindFixturesDir will search for the directory holding all test fixtures\n// beginning with the current directory and searching up 10 directories.\nfunc FindFixturesDir() string {\n\tparent := \"..\"\n\tfixturesDir := \"_fixtures\"\n\tfor range 10 {\n\t\tif _, err := os.Stat(fixturesDir); err == nil {\n\t\t\tbreak\n\t\t}\n\t\tfixturesDir = filepath.Join(parent, fixturesDir)\n\t}\n\treturn fixturesDir\n}\n\n// BuildFlags used to build fixture.\ntype BuildFlags uint32\n\nconst (\n\t// LinkStrip enables '-ldflags=\"-s\"'.\n\tLinkStrip BuildFlags = 1 << iota\n\t// EnableCGOOptimization will build CGO code with optimizations.\n\tEnableCGOOptimization\n\t// EnableInlining will build a binary with inline optimizations turned on.\n\tEnableInlining\n\t// EnableOptimization will build a binary with default optimizations.\n\tEnableOptimization\n\t// EnableDWZCompression will enable DWZ compression of DWARF sections.\n\tEnableDWZCompression\n\tBuildModePIE\n\tBuildModePlugin\n\tBuildModeExternalLinker\n\tAllNonOptimized\n\t// LinkDisableDWARF enables '-ldflags=\"-w\"'.\n\tLinkDisableDWARF\n\tTrimpath\n)\n\n// TempFile makes a (good enough) random temporary file name\nfunc TempFile(name string) string {\n\tr := make([]byte, 4)\n\trand.Read(r)\n\treturn filepath.Join(os.TempDir(), fmt.Sprintf(\"%s.%s\", name, hex.EncodeToString(r)))\n}\n\n// BuildFixture will compile the fixture 'name' using the provided build flags.\nfunc BuildFixture(t testing.TB, name string, flags BuildFlags) Fixture {\n\tt.Helper()\n\tif !runningWithFixtures {\n\t\tpanic(\"RunTestsWithFixtures not called\")\n\t}\n\tfk := fixtureKey{name, flags}\n\tfixturesmu.Lock()\n\tif f, ok := fixtures[fk]; ok {\n\t\tfixturesmu.Unlock()\n\t\t<-f.buildDone\n\t\treturn *f\n\t}\n\tbuildDone := make(chan struct{})\n\tfixture := Fixture{Name: name, buildDone: buildDone}\n\tfixtures[fk] = &fixture\n\tfixturesmu.Unlock()\n\n\tif flags&EnableCGOOptimization == 0 {\n\t\tif os.Getenv(\"CI\") == \"\" || os.Getenv(\"CGO_CFLAGS\") == \"\" {\n\t\t\tos.Setenv(\"CGO_CFLAGS\", \"-O0 -g\")\n\t\t}\n\t}\n\n\tfixturesDir := FindFixturesDir()\n\n\tdir := fixturesDir\n\tpath := filepath.Join(fixturesDir, name+\".go\")\n\tif name[len(name)-1] == '/' {\n\t\tdir = filepath.Join(dir, name)\n\t\tpath = \"\"\n\t\tname = name[:len(name)-1]\n\t}\n\ttmpfile := TempFile(name)\n\n\tbuildFlags := []string{\"build\"}\n\tvar ver goversion.GoVersion\n\tif ver, _ = goversion.Parse(runtime.Version()); runtime.GOOS == \"windows\" && ver.Major > 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 9, Rev: -1}) {\n\t\t// Work-around for https://github.com/golang/go/issues/13154\n\t\tbuildFlags = append(buildFlags, \"-ldflags=-linkmode internal\")\n\t}\n\tldflagsv := []string{}\n\tif flags&LinkStrip != 0 {\n\t\tldflagsv = append(ldflagsv, \"-s\")\n\t}\n\tif flags&LinkDisableDWARF != 0 {\n\t\tldflagsv = append(ldflagsv, \"-w\")\n\t}\n\tbuildFlags = append(buildFlags, \"-ldflags=\"+strings.Join(ldflagsv, \" \"))\n\tgcflagsv := []string{}\n\tif flags&EnableInlining == 0 {\n\t\tgcflagsv = append(gcflagsv, \"-l\")\n\t}\n\tif flags&EnableOptimization == 0 {\n\t\tgcflagsv = append(gcflagsv, \"-N\")\n\t}\n\tvar gcflags string\n\tif flags&AllNonOptimized != 0 {\n\t\tgcflags = \"-gcflags=all=\" + strings.Join(gcflagsv, \" \")\n\t} else {\n\t\tgcflags = \"-gcflags=\" + strings.Join(gcflagsv, \" \")\n\t}\n\tbuildFlags = append(buildFlags, gcflags, \"-o\", tmpfile)\n\tif *EnableRace {\n\t\tbuildFlags = append(buildFlags, \"-race\")\n\t}\n\tif flags&BuildModePIE != 0 {\n\t\tbuildFlags = append(buildFlags, \"-buildmode=pie\")\n\t} else {\n\t\tbuildFlags = append(buildFlags, \"-buildmode=exe\")\n\t}\n\tif flags&BuildModePlugin != 0 {\n\t\tbuildFlags = append(buildFlags, \"-buildmode=plugin\")\n\t}\n\tif flags&BuildModeExternalLinker != 0 {\n\t\tbuildFlags = append(buildFlags, \"-ldflags=-linkmode=external\")\n\t}\n\tif ver.IsOldDevel() || ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 11, Rev: -1}) {\n\t\tif flags&EnableDWZCompression != 0 {\n\t\t\tbuildFlags = append(buildFlags, \"-ldflags=-compressdwarf=false\")\n\t\t}\n\t}\n\tif flags&Trimpath != 0 {\n\t\tbuildFlags = append(buildFlags, \"-trimpath\")\n\t}\n\tif path != \"\" {\n\t\tbuildFlags = append(buildFlags, name+\".go\")\n\t}\n\n\tcmd := exec.Command(\"go\", buildFlags...)\n\tcmd.Dir = dir\n\tif os.Getenv(\"CI\") != \"\" {\n\t\tcmd.Env = os.Environ()\n\t}\n\n\t// Build the test binary\n\tif out, err := cmd.CombinedOutput(); err != nil {\n\t\tfmt.Printf(\"Error compiling %s: %s\\n\", path, err)\n\t\tfmt.Printf(\"%s\\n\", string(out))\n\t\tos.Exit(1)\n\t}\n\n\tsource, _ := filepath.Abs(path)\n\tsource = filepath.ToSlash(source)\n\tsympath, err := filepath.EvalSymlinks(source)\n\tif err == nil {\n\t\tsource = strings.ReplaceAll(sympath, \"\\\\\", \"/\")\n\t}\n\n\tabsdir, _ := filepath.Abs(dir)\n\n\tfixture.Path = tmpfile\n\tfixture.Source = source\n\tfixture.BuildDir = absdir\n\tclose(buildDone)\n\n\tif flags&EnableDWZCompression != 0 {\n\t\tcmd := exec.Command(\"dwz\", tmpfile)\n\t\tif out, err := cmd.CombinedOutput(); err != nil {\n\t\t\tif strings.Contains(string(out), \"Unknown debugging section .debug_addr\") {\n\t\t\t\tt.Skip(\"can not run dwz\")\n\t\t\t\treturn Fixture{}\n\t\t\t}\n\t\t\tif regexp.MustCompile(`dwz: Section offsets in (.*?) not monotonically increasing`).FindString(string(out)) == \"\" {\n\t\t\t\tt.Fatalf(\"Error running dwz on %s: %s\\n%s\\n\", tmpfile, err, string(out))\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fixture\n}\n\n// RunTestsWithFixtures sets the flag runningWithFixtures to compile fixtures on demand and runs tests with m.Run().\n// After the tests are run, it removes the fixtures and paths from PathsToRemove.\nfunc RunTestsWithFixtures(m *testing.M) {\n\trunningWithFixtures = true\n\tdefer func() {\n\t\trunningWithFixtures = false\n\t}()\n\tm.Run()\n\n\t// Remove the fixtures.\n\tfor _, f := range fixtures {\n\t\tos.Remove(f.Path)\n\t}\n\n\tfor _, p := range pathsToRemove {\n\t\tfi, err := os.Stat(p)\n\t\tif err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\tif fi.IsDir() {\n\t\t\tSafeRemoveAll(p)\n\t\t} else {\n\t\t\tos.Remove(p)\n\t\t}\n\t}\n}\n\nvar recordingAllowed = map[string]bool{}\nvar recordingAllowedMu sync.Mutex\n\n// AllowRecording allows the calling test to be used with a recording of the\n// fixture.\nfunc AllowRecording(t testing.TB) {\n\trecordingAllowedMu.Lock()\n\tdefer recordingAllowedMu.Unlock()\n\tname := t.Name()\n\tt.Logf(\"enabling recording for %s\", name)\n\trecordingAllowed[name] = true\n}\n\n// MustHaveRecordingAllowed skips this test if recording is not allowed\n//\n// Not all the tests can be run with a recording:\n//   - some fixtures never terminate independently (loopprog,\n//     testnextnethttp) and can not be recorded\n//   - some tests assume they can interact with the target process (for\n//     example TestIssue419, or anything changing the value of a variable),\n//     which we can't do on with a recording\n//   - some tests assume that the Pid returned by the process is valid, but\n//     it won't be at replay time\n//   - some tests will start the fixture but not never execute a single\n//     instruction, for some reason rr doesn't like this and will print an\n//     error if it happens\n//   - many tests will assume that we can return from a runtime.Breakpoint,\n//     with a recording this is not possible because when the fixture ran it\n//     wasn't attached to a debugger and in those circumstances a\n//     runtime.Breakpoint leads directly to a crash\n//\n// Some of the tests using runtime.Breakpoint (anything involving variable\n// evaluation and TestWorkDir) have been adapted to work with a recording.\nfunc MustHaveRecordingAllowed(t testing.TB) {\n\trecordingAllowedMu.Lock()\n\tdefer recordingAllowedMu.Unlock()\n\tname := t.Name()\n\tif !recordingAllowed[name] {\n\t\tt.Skipf(\"recording not allowed for %s\", name)\n\t}\n}\n\n// SafeRemoveAll removes dir and its contents but only as long as dir does\n// not contain directories.\nfunc SafeRemoveAll(dir string) {\n\tfis, err := os.ReadDir(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\tfor _, fi := range fis {\n\t\tif fi.IsDir() {\n\t\t\treturn\n\t\t}\n\t}\n\tfor _, fi := range fis {\n\t\tif err := os.Remove(filepath.Join(dir, fi.Name())); err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\tos.Remove(dir)\n}\n\n// MustSupportFunctionCalls skips this test if function calls are\n// unsupported on this backend/architecture pair.\nfunc MustSupportFunctionCalls(t *testing.T, testBackend string) {\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 11) {\n\t\tt.Skip(\"this version of Go does not support function calls\")\n\t}\n\n\tif runtime.GOOS == \"darwin\" && testBackend == \"native\" {\n\t\tt.Skip(\"this backend does not support function calls\")\n\t}\n\n\tif runtime.GOARCH == \"386\" {\n\t\tt.Skip(fmt.Errorf(\"%s does not support FunctionCall for now\", runtime.GOARCH))\n\t}\n\tif runtime.GOARCH == \"riscv64\" {\n\t\tt.Skip(fmt.Errorf(\"%s does not support FunctionCall for now\", runtime.GOARCH))\n\t}\n\tif runtime.GOARCH == \"loong64\" {\n\t\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 24) {\n\t\t\tt.Skip(\"function calls not supported on loong64 with Go < 1.24\")\n\t\t}\n\t}\n\tif runtime.GOARCH == \"arm64\" {\n\t\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 19) || runtime.GOOS == \"windows\" {\n\t\t\tt.Skip(\"this version of Go does not support function calls\")\n\t\t}\n\t}\n\n\tif runtime.GOARCH == \"ppc64le\" {\n\t\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 22) {\n\t\t\tt.Skip(\"On PPC64LE Building with Go lesser than 1.22 does not support function calls\")\n\t\t}\n\t}\n}\n\n// DefaultTestBackend changes the value of testBackend to be the default\n// test backend for the OS, if testBackend isn't already set.\nfunc DefaultTestBackend(testBackend *string) {\n\tif *testBackend != \"\" {\n\t\treturn\n\t}\n\t*testBackend = os.Getenv(\"PROCTEST\")\n\tif *testBackend != \"\" {\n\t\treturn\n\t}\n\tif runtime.GOOS == \"darwin\" {\n\t\t*testBackend = \"lldb\"\n\t} else {\n\t\t*testBackend = \"native\"\n\t}\n}\n\n// WithPlugins builds the fixtures in plugins as plugins and returns them.\n// The test calling WithPlugins will be skipped if the current combination\n// of OS, architecture and version of GO doesn't support plugins or\n// debugging plugins.\nfunc WithPlugins(t *testing.T, flags BuildFlags, plugins ...string) []Fixture {\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 12) {\n\t\tt.Skip(\"versions of Go before 1.12 do not include debug information in packages that import plugin (or they do but it's wrong)\")\n\t}\n\tif runtime.GOOS != \"linux\" {\n\t\tt.Skip(\"only supported on linux\")\n\t}\n\n\tr := make([]Fixture, len(plugins))\n\tfor i := range plugins {\n\t\tr[i] = BuildFixture(t, plugins[i], flags|BuildModePlugin)\n\t}\n\treturn r\n}\n\nvar hasCgo = func() bool {\n\tout, err := exec.Command(\"go\", \"env\", \"CGO_ENABLED\").CombinedOutput()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tif strings.TrimSpace(string(out)) != \"1\" {\n\t\treturn false\n\t}\n\t_, err1 := exec.LookPath(\"gcc\")\n\t_, err2 := exec.LookPath(\"clang\")\n\treturn (err1 == nil) || (err2 == nil)\n}()\n\nfunc MustHaveCgo(t *testing.T) {\n\tif !hasCgo {\n\t\tt.Skip(\"Cgo not enabled\")\n\t}\n}\n\nfunc MustHaveModules(t *testing.T) {\n\tif os.Getenv(\"GO111MODULE\") == \"off\" {\n\t\tt.Skip(\"skipping test which requires go modules\")\n\t}\n}\n\nfunc RegabiSupported() bool {\n\t// Tracks regabiSupported variable in ParseGOEXPERIMENT internal/buildcfg/exp.go\n\tswitch {\n\tcase goversion.VersionAfterOrEqual(runtime.Version(), 1, 18):\n\t\treturn runtime.GOARCH == \"amd64\" || runtime.GOARCH == \"arm64\" || runtime.GOARCH == \"ppc64le\" || runtime.GOARCH == \"ppc64\" || runtime.GOARCH == \"riscv64\" || runtime.GOARCH == \"loong64\"\n\tcase goversion.VersionAfterOrEqual(runtime.Version(), 1, 17):\n\t\treturn runtime.GOARCH == \"amd64\" && (runtime.GOOS == \"android\" || runtime.GOOS == \"linux\" || runtime.GOOS == \"darwin\" || runtime.GOOS == \"windows\")\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc ProjectRoot() string {\n\twd, err := os.Getwd()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tgopaths := strings.FieldsFunc(os.Getenv(\"GOPATH\"), func(r rune) bool { return r == os.PathListSeparator })\n\tfor _, curpath := range gopaths {\n\t\t// Detects \"gopath mode\" when GOPATH contains several paths ex. \"d:\\\\dir\\\\gopath;f:\\\\dir\\\\gopath2\"\n\t\tif strings.Contains(wd, curpath) {\n\t\t\treturn filepath.Join(curpath, \"src\", \"github.com\", \"go-delve\", \"delve\")\n\t\t}\n\t}\n\tval, err := exec.Command(\"go\", \"list\", \"-mod=\", \"-m\", \"-f\", \"{{ .Dir }}\").Output()\n\tif err != nil {\n\t\tpanic(err) // the Go tool was tested to work earlier\n\t}\n\treturn strings.TrimSuffix(string(val), \"\\n\")\n}\n\nfunc GetDlvBinary(t *testing.T) string {\n\tt.Helper()\n\n\tvar tags []string\n\tif runtime.GOOS == \"linux\" && runtime.GOARCH == \"ppc64le\" {\n\t\ttags = []string{\"-tags=exp.linuxppc64le\"}\n\t}\n\tif runtime.GOOS == \"linux\" && runtime.GOARCH == \"riscv64\" {\n\t\ttags = []string{\"-tags=exp.linuxriscv64\"}\n\t}\n\tif runtime.GOOS == \"linux\" && runtime.GOARCH == \"loong64\" {\n\t\ttags = []string{\"-tags=exp.linuxloong64\"}\n\t}\n\treturn getDlvBinInternal(t, tags...)\n}\n\nfunc GetDlvBinaryEBPF(t *testing.T) string {\n\tt.Helper()\n\n\treturn getDlvBinInternal(t, \"-tags\", \"ebpf\")\n}\n\n// Fixtures is a map of fixtureKey{ Fixture.Name, buildFlags } to Fixture.\nvar dlvbincache = make(map[string]string)\nvar dlvbinmu sync.Mutex\n\nfunc getDlvBinInternal(t *testing.T, goflags ...string) string {\n\tdlvbinmu.Lock()\n\tdefer dlvbinmu.Unlock()\n\n\t// Parse GOFLAGS and filter out empty strings\n\tgoenvflags := os.Getenv(\"GOFLAGS\")\n\tif goenvflags != \"\" {\n\t\tgoflags = slices.Concat(goflags, strings.Split(os.Getenv(\"GOFLAGS\"), \" \"))\n\t}\n\n\tstrargs := strings.Join(goflags, \"\")\n\tif path, ok := dlvbincache[strargs]; ok {\n\t\treturn path\n\t}\n\n\tdlvbin := TempFile(\"dlv.exe\")\n\n\tdlvbincache[strargs] = dlvbin\n\tAddPathToRemove(dlvbin)\n\n\targs := append([]string{\"build\", \"-o\", dlvbin}, goflags...)\n\targs = append(args, \"github.com/go-delve/delve/cmd/dlv\")\n\tout, err := exec.Command(\"go\", args...).CombinedOutput()\n\tif err != nil {\n\t\tt.Fatalf(\"go %s: %v\\n%s\", strings.Join(args, \" \"), err, string(out))\n\t}\n\n\treturn dlvbin\n}\n"
  },
  {
    "path": "pkg/proc/threads.go",
    "content": "package proc\n\nimport (\n\t\"errors\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n)\n\n// Thread represents a thread.\ntype Thread interface {\n\t// Breakpoint will return the breakpoint that this thread is stopped at or\n\t// nil if the thread is not stopped at any breakpoint.\n\tBreakpoint() *BreakpointState\n\tThreadID() int\n\n\t// Registers returns the CPU registers of this thread. The contents of the\n\t// variable returned may or may not change to reflect the new CPU status\n\t// when the thread is resumed or the registers are changed by calling\n\t// SetPC/SetSP/etc.\n\t// To insure that the returned variable won't change call the Copy\n\t// method of Registers.\n\tRegisters() (Registers, error)\n\n\t// RestoreRegisters restores saved registers\n\tRestoreRegisters(Registers) error\n\tBinInfo() *BinaryInfo\n\t// ProcessMemory returns the process memory.\n\tProcessMemory() MemoryReadWriter\n\t// SetCurrentBreakpoint updates the current breakpoint of this thread, if adjustPC is true also checks for breakpoints that were just hit (this should only be passed true after a thread resume)\n\tSetCurrentBreakpoint(adjustPC bool) error\n\t// SoftExc returns true if this thread received a software exception during the last resume.\n\tSoftExc() bool\n\t// Common returns the CommonThread structure for this thread\n\tCommon() *CommonThread\n\n\t// SetReg changes the value of the specified register. A minimal\n\t// implementation of this interface can support just setting the PC\n\t// register.\n\tSetReg(uint64, *op.DwarfRegister) error\n}\n\n// Location represents the location of a thread.\n// Holds information on the current instruction\n// address, the source file:line, and the function.\ntype Location struct {\n\tPC   uint64\n\tFile string\n\tLine int\n\tFn   *Function\n}\n\n// CommonThread contains fields used by this package, common to all\n// implementations of the Thread interface.\ntype CommonThread struct {\n\tCallReturn   bool // returnValues are the return values of a call injection\n\treturnValues []*Variable\n\tg            *G // cached g for this thread\n}\n\n// ReturnValues reads the return values from the function executing on\n// this thread using the provided LoadConfig.\nfunc (t *CommonThread) ReturnValues(cfg LoadConfig) []*Variable {\n\tloadValues(t.returnValues, cfg)\n\treturn t.returnValues\n}\n\n// topframe returns the two topmost frames of g, or thread if g is nil.\nfunc topframe(tgt *Target, g *G, thread Thread) (Stackframe, Stackframe, error) {\n\tvar frames []Stackframe\n\tvar err error\n\n\tif g == nil {\n\t\tframes, err = ThreadStacktrace(tgt, thread, 1)\n\t} else {\n\t\tframes, err = GoroutineStacktrace(tgt, g, 1, StacktraceReadDefers)\n\t}\n\tif err != nil {\n\t\treturn Stackframe{}, Stackframe{}, err\n\t}\n\tswitch len(frames) {\n\tcase 0:\n\t\treturn Stackframe{}, Stackframe{}, errors.New(\"empty stack trace\")\n\tcase 1:\n\t\treturn frames[0], Stackframe{}, nil\n\tdefault:\n\t\treturn frames[0], frames[1], nil\n\t}\n}\n\nfunc setPC(thread Thread, newPC uint64) error {\n\treturn thread.SetReg(thread.BinInfo().Arch.PCRegNum, op.DwarfRegisterFromUint64(newPC))\n}\n\nfunc setSP(thread Thread, newSP uint64) error {\n\treturn thread.SetReg(thread.BinInfo().Arch.SPRegNum, op.DwarfRegisterFromUint64(newSP))\n}\n\nfunc setClosureReg(thread Thread, newClosureReg uint64) error {\n\treturn thread.SetReg(thread.BinInfo().Arch.ContextRegNum, op.DwarfRegisterFromUint64(newClosureReg))\n}\n\nfunc setLR(thread Thread, newLR uint64) error {\n\treturn thread.SetReg(thread.BinInfo().Arch.LRRegNum, op.DwarfRegisterFromUint64(newLR))\n}\n\n// ThreadLocation returns the threads location, including the file:line\n// of the corresponding source code, the function we're in\n// and the current instruction address.\nfunc ThreadLocation(thread Thread) (*Location, error) {\n\tregs, err := thread.Registers()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpc := regs.PC()\n\tf, l, fn := thread.BinInfo().PCToLine(pc)\n\treturn &Location{PC: pc, File: f, Line: l, Fn: fn}, nil\n}\n"
  },
  {
    "path": "pkg/proc/types.go",
    "content": "package proc\n\nimport (\n\t\"debug/dwarf\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"reflect\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/reader\"\n)\n\n// The kind field in runtime._type is a reflect.Kind value plus\n// some extra flags defined here.\n// See equivalent declaration in $GOROOT/src/internal/abi/type.go\nconst (\n\t// Go 1.25 and earlier\n\tkindDirectIface = 1 << 5 // +rtype kindDirectIface|internal/abi.KindDirectIface\n\t// Go 1.26 and later\n\ttflagDirectIface = 1 << 5 // +rtype go1.26 tflagDirectIface|internal/abi.TFlagDirectIface\n)\n\ntype runtimeTypeDIE struct {\n\toffset dwarf.Offset\n}\n\nfunc pointerTo(typ godwarf.Type, arch *Arch) godwarf.Type {\n\treturn &godwarf.PtrType{\n\t\tCommonType: godwarf.CommonType{\n\t\t\tByteSize:    int64(arch.PtrSize()),\n\t\t\tName:        \"*\" + typ.Common().Name,\n\t\t\tReflectKind: reflect.Ptr,\n\t\t\tOffset:      0,\n\t\t},\n\t\tType: typ,\n\t}\n}\n\ntype loadDebugInfoMapsContext struct {\n\tardr                *reader.Reader\n\tabstractOriginTable map[dwarf.Offset]int\n\tknownPackageVars    map[string]struct{}\n\toffsetToVersion     map[dwarf.Offset]uint8\n}\n\nfunc newLoadDebugInfoMapsContext(bi *BinaryInfo, image *Image, offsetToVersion map[dwarf.Offset]uint8) *loadDebugInfoMapsContext {\n\tctxt := &loadDebugInfoMapsContext{}\n\n\tctxt.ardr = image.DwarfReader()\n\tctxt.abstractOriginTable = make(map[dwarf.Offset]int)\n\tctxt.offsetToVersion = offsetToVersion\n\n\tctxt.knownPackageVars = map[string]struct{}{}\n\tfor _, v := range bi.packageVars {\n\t\tctxt.knownPackageVars[v.name] = struct{}{}\n\t}\n\n\treturn ctxt\n}\n\nfunc (ctxt *loadDebugInfoMapsContext) lookupAbstractOrigin(bi *BinaryInfo, off dwarf.Offset) int {\n\tr, ok := ctxt.abstractOriginTable[off]\n\tif !ok {\n\t\tbi.Functions = append(bi.Functions, Function{})\n\t\tr = len(bi.Functions) - 1\n\t\tbi.Functions[r].offset = off\n\t\tctxt.abstractOriginTable[off] = r\n\t}\n\treturn r\n}\n\n// RuntimeTypeToDIE returns the DIE corresponding to the runtime._type.\n// This is done in three different ways depending on the version of go.\n//   - Before go1.7 the type name is retrieved directly from the runtime._type\n//     and looked up in debug_info\n//   - After go1.7 the runtime._type struct is read recursively to reconstruct\n//     the name of the type, and then the type's name is used to look up\n//     debug_info\n//   - After go1.11 the runtimeTypeToDIE map is used to look up the address of\n//     the type and map it directly to a DIE.\nfunc RuntimeTypeToDIE(_type *Variable, dataAddr uint64, mds []ModuleData) (typ godwarf.Type, directIface bool, err error) {\n\tbi := _type.bi\n\n\t_type = _type.maybeDereference()\n\n\t// go 1.11 implementation: use extended attribute in debug_info\n\n\tmd := findModuleDataForType(mds, _type.Addr)\n\tif md != nil {\n\t\tso := bi.moduleDataToImage(md)\n\t\tif so != nil {\n\t\t\tif rtdie, ok := so.runtimeTypeToDIE[_type.Addr-md.types]; ok {\n\t\t\t\ttyp, err := godwarf.ReadType(so.dwarf, so.index, rtdie.offset, so.typeCache)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, false, fmt.Errorf(\"invalid interface type: %v\", err)\n\t\t\t\t}\n\t\t\t\treturn typ, getRuntimeTypeDirect(_type), nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil, false, errors.New(\"could not resolve interface type\")\n}\n\n// resolveParametricType returns the real type of t if t is a parametric\n// type, by reading the correct dictionary entry.\nfunc resolveParametricType(bi *BinaryInfo, mem MemoryReadWriter, t godwarf.Type, dictAddr uint64) (godwarf.Type, error) {\n\tptyp, _ := t.(*godwarf.ParametricType)\n\tif ptyp == nil {\n\t\treturn t, nil\n\t}\n\tif dictAddr == 0 {\n\t\treturn ptyp.TypedefType.Type, errors.New(\"parametric type without a dictionary\")\n\t}\n\trtypeAddr, err := readUintRaw(mem, dictAddr+uint64(ptyp.DictIndex*int64(bi.Arch.PtrSize())), int64(bi.Arch.PtrSize()))\n\tif err != nil {\n\t\treturn ptyp.TypedefType.Type, err\n\t}\n\truntimeType, err := bi.findType(bi.runtimeTypeTypename())\n\tif err != nil {\n\t\treturn ptyp.TypedefType.Type, err\n\t}\n\t_type := newVariable(\"\", rtypeAddr, runtimeType, bi, mem)\n\n\tmds, err := bi.getModuleData(_type.mem)\n\tif err != nil {\n\t\treturn ptyp.TypedefType.Type, err\n\t}\n\n\ttyp, _, err := RuntimeTypeToDIE(_type, 0, mds)\n\tif err != nil {\n\t\treturn ptyp.TypedefType.Type, err\n\t}\n\n\treturn typ, nil\n}\n\nfunc dwarfToRuntimeType(bi *BinaryInfo, mem MemoryReadWriter, typ godwarf.Type) (typeAddr uint64, direct, found bool, err error) {\n\tso := bi.typeToImage(typ)\n\trdr := so.DwarfReader()\n\trdr.Seek(typ.Common().Offset)\n\te, err := rdr.Next()\n\tif err != nil {\n\t\treturn 0, false, false, err\n\t}\n\toff, ok := e.Val(godwarf.AttrGoRuntimeType).(uint64)\n\tif !ok {\n\t\treturn 0, false, false, nil\n\t}\n\n\tmds, err := bi.getModuleData(mem)\n\tif err != nil {\n\t\treturn 0, false, false, err\n\t}\n\n\tmd := bi.imageToModuleData(so, mds)\n\tif md == nil {\n\t\tif so.index > 0 {\n\t\t\treturn 0, false, false, fmt.Errorf(\"could not find module data for type %s (shared object: %q)\", typ, so.Path)\n\t\t} else {\n\t\t\treturn 0, false, false, fmt.Errorf(\"could not find module data for type %s\", typ)\n\t\t}\n\t}\n\n\ttypeAddr = md.types + off\n\n\trtyp, err := bi.findType(bi.runtimeTypeTypename())\n\tif err != nil {\n\t\treturn 0, false, false, err\n\t}\n\t_type := newVariable(\"\", typeAddr, rtyp, bi, mem)\n\n\treturn typeAddr, getRuntimeTypeDirect(_type), true, nil\n}\n\n// getRuntimeTypeDirect returns a bool that says if the type in _type can be stored directly into an interface variable.\nfunc getRuntimeTypeDirect(_type *Variable) bool {\n\t// Go 1.26 and beyond have this flag in the TFlag field.\n\t// Go 1.25 and earlier have this flag in the Kind field.\n\t// If either flag is set, consider it direct.\n\tvar direct bool\n\tif tflagField := _type.loadFieldNamed(\"TFlag\"); tflagField != nil && tflagField.Value != nil {\n\t\ttflag, _ := constant.Int64Val(tflagField.Value)\n\t\tif tflag&tflagDirectIface != 0 {\n\t\t\tdirect = true\n\t\t}\n\t}\n\tif kindField := _type.loadFieldNamed(\"kind\"); kindField != nil && kindField.Value != nil {\n\t\tkind, _ := constant.Int64Val(kindField.Value)\n\t\tif kind&kindDirectIface != 0 {\n\t\t\tdirect = true\n\t\t}\n\t} else if kindField := _type.loadFieldNamed(\"Kind_\"); kindField != nil && kindField.Value != nil {\n\t\tkind, _ := constant.Int64Val(kindField.Value)\n\t\tif kind&kindDirectIface != 0 {\n\t\t\tdirect = true\n\t\t}\n\t}\n\treturn direct\n}\n"
  },
  {
    "path": "pkg/proc/variable_test.go",
    "content": "package proc_test\n\nimport (\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nfunc TestGoroutineCreationLocation(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"goroutinestackprog\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tbp := setFunctionBreakpoint(p, t, \"main.agoroutine\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tgs, _, err := proc.GoroutinesInfo(p, 0, 0)\n\t\tassertNoError(err, t, \"GoroutinesInfo\")\n\n\t\tfor _, g := range gs {\n\t\t\tcurrentLocation := g.UserCurrent()\n\t\t\tcurrentFn := currentLocation.Fn\n\t\t\tif currentFn != nil && currentFn.BaseName() == \"agoroutine\" {\n\t\t\t\tcreatedLocation := g.Go()\n\t\t\t\tif createdLocation.Fn == nil {\n\t\t\t\t\tt.Fatalf(\"goroutine creation function is nil\")\n\t\t\t\t}\n\t\t\t\tif createdLocation.Fn.BaseName() != \"main\" {\n\t\t\t\t\tt.Fatalf(\"goroutine creation function has wrong name: %s\", createdLocation.Fn.BaseName())\n\t\t\t\t}\n\t\t\t\tif filepath.Base(createdLocation.File) != \"goroutinestackprog.go\" {\n\t\t\t\t\tt.Fatalf(\"goroutine creation file incorrect: %s\", filepath.Base(createdLocation.File))\n\t\t\t\t}\n\t\t\t\tif createdLocation.Line != 23 {\n\t\t\t\t\tt.Fatalf(\"goroutine creation line incorrect: %v\", createdLocation.Line)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tp.ClearBreakpoint(bp.Addr)\n\t\tgrp.Continue()\n\t})\n}\n"
  },
  {
    "path": "pkg/proc/variables.go",
    "content": "package proc\n\nimport (\n\t\"bytes\"\n\t\"cmp\"\n\t\"debug/dwarf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"go/token\"\n\t\"math\"\n\t\"math/bits\"\n\t\"reflect\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\nconst (\n\tmaxErrCount = 3 // Max number of read errors to accept while evaluating slices, arrays and structs\n\n\tmaxArrayStridePrefetch = 1024 // Maximum size of array stride for which we will prefetch the array contents\n\n\t// hashTophashEmptyZero is used by map reading code, indicates an empty cell\n\thashTophashEmptyZero = 0 // +rtype emptyRest\n\t// hashTophashEmptyOne is used by map reading code, indicates an empty cell in Go 1.12 and later\n\thashTophashEmptyOne = 1 // +rtype emptyOne\n\t// hashMinTopHashGo111 used by map reading code, indicates minimum value of tophash that isn't empty or evacuated, in Go1.11\n\thashMinTopHashGo111 = 4 // +rtype minTopHash\n\t// hashMinTopHashGo112 is used by map reading code, indicates minimum value of tophash that isn't empty or evacuated, in Go1.12\n\thashMinTopHashGo112 = 5 // +rtype minTopHash\n\n\tmaxFramePrefetchSize = 1 * 1024 * 1024 // Maximum prefetch size for a stack frame\n\n\tmaxMapBucketsFactor = 100 // Maximum numbers of map buckets to read for every requested map entry when loading variables through (*EvalScope).LocalVariables and (*EvalScope).FunctionArguments.\n\n\tmaxGoroutineUserCurrentDepth = 30 // Maximum depth used by (*G).UserCurrent to search its location\n\n\tmaxGoroutinesLabelEntries = 1_000 // Maximum number of label entries for a goroutine's label map\n)\n\ntype floatSpecial uint8\n\nconst (\n\t// FloatIsNormal means the value is a normal float.\n\tFloatIsNormal floatSpecial = iota\n\t// FloatIsNaN means the float is a special NaN value.\n\tFloatIsNaN\n\t// FloatIsPosInf means the float is a special positive infinity value.\n\tFloatIsPosInf\n\t// FloatIsNegInf means the float is a special negative infinity value.\n\tFloatIsNegInf\n)\n\ntype variableFlags uint16\n\nconst (\n\t// VariableEscaped is set for local variables that escaped to the heap\n\t//\n\t// The compiler performs escape analysis on local variables, the variables\n\t// that may outlive the stack frame are allocated on the heap instead and\n\t// only the address is recorded on the stack. These variables will be\n\t// marked with this flag.\n\tVariableEscaped variableFlags = (1 << iota)\n\t// VariableShadowed is set for local variables that are shadowed by a\n\t// variable with the same name in another scope\n\tVariableShadowed\n\t// VariableConstant means this variable is a constant value\n\tVariableConstant\n\t// VariableArgument means this variable is a function argument\n\tVariableArgument\n\t// VariableReturnArgument means this variable is a function return value\n\tVariableReturnArgument\n\t// VariableFakeAddress means the address of this variable is either fake\n\t// (i.e. the variable is partially or completely stored in a CPU register\n\t// and doesn't have a real address) or possibly no longer available (because\n\t// the variable is the return value of a function call and allocated on a\n\t// frame that no longer exists)\n\tVariableFakeAddress\n\t// VariableCPtr means the variable is a C pointer\n\tVariableCPtr\n\t// VariableCPURegister means this variable is a CPU register.\n\tVariableCPURegister\n\t// variableTrustLen means that when this variable is loaded its length\n\t// should be trusted and used instead of MaxArrayValues\n\tvariableTrustLen\n\n\tvariableSaved\n)\n\n// Variable represents a variable. It contains the address, name,\n// type and other information parsed from both the Dwarf information\n// and the memory of the debugged process.\n// If OnlyAddr is true, the variables value has not been loaded.\ntype Variable struct {\n\tAddr      uint64\n\tOnlyAddr  bool\n\tName      string\n\tDwarfType godwarf.Type\n\tRealType  godwarf.Type\n\tKind      reflect.Kind\n\tmem       MemoryReadWriter\n\tbi        *BinaryInfo\n\n\tValue        constant.Value\n\tFloatSpecial floatSpecial\n\treg          *op.DwarfRegister // contains the value of this variable if VariableCPURegister flag is set and loaded is false\n\n\tLen int64\n\tCap int64\n\n\tFlags variableFlags\n\n\t// Base address of arrays, Base address of the backing array for slices (0 for nil slices)\n\t// Base address of the backing byte array for strings\n\t// address of the struct backing chan and map variables\n\t// address of the function entry point for function variables (0 for nil function pointers)\n\tBase      uint64\n\tstride    int64\n\tfieldType godwarf.Type\n\n\t// closureAddr is the closure address for function variables (0 for non-closures)\n\tclosureAddr uint64\n\n\t// number of elements to skip when loading a map\n\tmapSkip int\n\n\t// Children lists the variables sub-variables. What constitutes a child\n\t// depends on the variable's type. For pointers, there's one child\n\t// representing the pointed-to variable.\n\tChildren []Variable\n\n\tloaded     bool\n\tUnreadable error\n\n\tLocationExpr *locationExpr // location expression\n\tDeclLine     int64         // line number of this variable's declaration\n}\n\n// LoadConfig controls how variables are loaded from the targets memory.\ntype LoadConfig struct {\n\t// FollowPointers requests pointers to be automatically dereferenced.\n\tFollowPointers bool\n\t// MaxVariableRecurse is how far to recurse when evaluating nested types.\n\tMaxVariableRecurse int\n\t// MaxStringLen is the maximum number of bytes read from a string\n\tMaxStringLen int\n\t// MaxArrayValues is the maximum number of elements read from an array, a slice or a map.\n\tMaxArrayValues int\n\t// MaxStructFields is the maximum number of fields read from a struct, -1 will read all fields.\n\tMaxStructFields int\n\n\t// MaxMapBuckets is the maximum number of map buckets to read before giving up.\n\t// A value of 0 will read as many buckets as necessary until the entire map\n\t// is read or MaxArrayValues is reached.\n\t//\n\t// Loading a map is an operation that issues O(num_buckets) operations.\n\t// Normally the number of buckets is proportional to the number of elements\n\t// in the map, since the runtime tries to keep the load factor of maps\n\t// between 40% and 80%.\n\t//\n\t// It is possible, however, to create very sparse maps either by:\n\t// a) adding lots of entries to a map and then deleting most of them, or\n\t// b) using the make(mapType, N) expression with a very large N\n\t//\n\t// When this happens delve will have to scan many empty buckets to find the\n\t// few entries in the map.\n\t// MaxMapBuckets can be set to avoid annoying slowdowns␣while reading\n\t// very sparse maps.\n\t//\n\t// Since there is no good way for a user of delve to specify the value of\n\t// MaxMapBuckets, this field is not actually exposed through the API.\n\t// Instead (*EvalScope).LocalVariables and  (*EvalScope).FunctionArguments\n\t// set this field automatically to MaxArrayValues * maxMapBucketsFactor.\n\t// Every other invocation uses the default value of 0, obtaining the old behavior.\n\t// In practice this means that debuggers using the ListLocalVars or\n\t// ListFunctionArgs API will not experience a massive slowdown when a very\n\t// sparse map is in scope, but evaluating a single variable will still work\n\t// correctly, even if the variable in question is a very sparse map.\n\tMaxMapBuckets int\n}\n\nvar loadSingleValue = LoadConfig{false, 0, 64, 0, 0, 0}\nvar loadFullValue = LoadConfig{true, 1, 64, 64, -1, 0}\nvar loadFullValueLongerStrings = LoadConfig{true, 1, 1024 * 1024, 64, -1, 0}\n\n// G status, from: src/runtime/runtime2.go\nconst (\n\tGidle           uint64 = iota // 0\n\tGrunnable                     // 1 runnable and on a run queue\n\tGrunning                      // 2\n\tGsyscall                      // 3\n\tGwaiting                      // 4\n\tGmoribundUnused               // 5 currently unused, but hardcoded in gdb scripts\n\tGdead                         // 6\n\tGenqueue                      // 7 Only the Gscanenqueue is used.\n\tGcopystack                    // 8 in this state when newstack is moving the stack\n)\n\n// G represents a runtime G (goroutine) structure (at least the\n// fields that Delve is interested in).\ntype G struct {\n\tID      int64  // Goroutine ID\n\tPC      uint64 // PC of goroutine when it was parked.\n\tSP      uint64 // SP of goroutine when it was parked.\n\tBP      uint64 // BP of goroutine when it was parked (go >= 1.7).\n\tLR      uint64 // LR of goroutine when it was parked.\n\tGoPC    uint64 // PC of 'go' statement that created this goroutine.\n\tStartPC uint64 // PC of the first function run on this goroutine.\n\tStatus  uint64\n\tstack   stack // value of stack\n\n\tWaitSince  int64\n\tWaitReason int64\n\n\tSystemStack bool // SystemStack is true if this goroutine is currently executing on a system stack.\n\n\t// Information on goroutine location\n\tCurrentLoc Location\n\n\t// Thread that this goroutine is currently allocated to\n\tThread Thread\n\n\tvariable *Variable\n\n\tUnreadable error // could not read the G struct\n\n\tlabels *map[string]string // G's pprof labels, computed on demand in Labels() method\n}\n\n// stack represents a stack span in the target process.\ntype stack struct {\n\thi, lo uint64\n}\n\n// GetG returns information on the G (goroutine) that is executing on this thread.\n//\n// The G structure for a thread is stored in thread local storage. Here we simply\n// calculate the address and read and parse the G struct.\n//\n// We cannot simply use the allg linked list in order to find the M that represents\n// the given OS thread and follow its G pointer because on Darwin mach ports are not\n// universal, so our port for this thread would not map to the `id` attribute of the M\n// structure. Also, when linked against libc, Go prefers the libc version of clone as\n// opposed to the runtime version. This has the consequence of not setting M.id for\n// any thread, regardless of OS.\n//\n// In order to get around all this craziness, we read the address of the G structure for\n// the current thread from the thread local storage area.\nfunc GetG(thread Thread) (*G, error) {\n\tif thread.Common().g != nil {\n\t\treturn thread.Common().g, nil\n\t}\n\tloc, _ := ThreadLocation(thread)\n\tif loc != nil && loc.Fn != nil && loc.Fn.Name == \"runtime.clone\" {\n\t\t// When threads are executing runtime.clone the value of TLS is unreliable.\n\t\treturn nil, nil\n\t}\n\tgaddr, err := getGVariable(thread)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tg, err := gaddr.parseG()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif g.ID == 0 {\n\t\t// The runtime uses a special goroutine with ID == 0 to mark that the\n\t\t// current goroutine is executing on the system stack (sometimes also\n\t\t// referred to as the g0 stack or scheduler stack, I'm not sure if there's\n\t\t// actually any difference between those).\n\t\t// For our purposes it's better if we always return the real goroutine\n\t\t// since the rest of the code assumes the goroutine ID is univocal.\n\t\t// The real 'current goroutine' is stored in g0.m.curg\n\t\tmvar, err := g.variable.structField(\"m\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tcurgvar, err := mvar.structField(\"curg\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tg, err = curgvar.parseG()\n\t\tif err != nil {\n\t\t\tif _, ok := err.(ErrNoGoroutine); ok {\n\t\t\t\terr = ErrNoGoroutine{thread.ThreadID()}\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\tg.SystemStack = true\n\t}\n\tg.Thread = thread\n\tif err == nil {\n\t\tg.CurrentLoc = *loc\n\t}\n\tthread.Common().g = g\n\treturn g, nil\n}\n\n// GoroutinesInfo searches for goroutines starting at index 'start', and\n// returns an array of up to 'count' (or all found elements, if 'count' is 0)\n// G structures representing the information Delve care about from the internal\n// runtime G structure.\n// GoroutinesInfo also returns the next index to be used as 'start' argument\n// while scanning for all available goroutines, or -1 if there was an error\n// or if the index already reached the last possible value.\nfunc GoroutinesInfo(dbp *Target, start, count int) ([]*G, int, error) {\n\tif _, err := dbp.Valid(); err != nil {\n\t\treturn nil, -1, err\n\t}\n\tif dbp.gcache.allGCache != nil {\n\t\t// We can't use the cached array to fulfill a subrange request\n\t\tif start == 0 && (count == 0 || count >= len(dbp.gcache.allGCache)) {\n\t\t\treturn dbp.gcache.allGCache, -1, nil\n\t\t}\n\t}\n\n\tvar (\n\t\tthreadg = map[int64]*G{}\n\t\tallg    []*G\n\t)\n\n\tthreads := dbp.ThreadList()\n\tfor _, th := range threads {\n\t\tg, _ := GetG(th)\n\t\tif g != nil {\n\t\t\tthreadg[g.ID] = g\n\t\t}\n\t}\n\n\tallgptr, allglen, err := dbp.gcache.getRuntimeAllg(dbp.BinInfo(), dbp.Memory())\n\tif err != nil {\n\t\treturn nil, -1, err\n\t}\n\n\tfor i := uint64(start); i < allglen; i++ {\n\t\tif count != 0 && len(allg) >= count {\n\t\t\treturn allg, int(i), nil\n\t\t}\n\t\tgvar, err := newGVariable(dbp.CurrentThread(), allgptr+(i*uint64(dbp.BinInfo().Arch.PtrSize())), true)\n\t\tif err != nil {\n\t\t\tallg = append(allg, &G{Unreadable: err})\n\t\t\tcontinue\n\t\t}\n\t\tg, err := gvar.parseG()\n\t\tif err != nil {\n\t\t\tallg = append(allg, &G{Unreadable: err})\n\t\t\tcontinue\n\t\t}\n\t\tif thg, allocated := threadg[g.ID]; allocated {\n\t\t\tloc, err := ThreadLocation(thg.Thread)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, -1, err\n\t\t\t}\n\t\t\tg.Thread = thg.Thread\n\t\t\t// Prefer actual thread location information.\n\t\t\tg.CurrentLoc = *loc\n\t\t\tg.SystemStack = thg.SystemStack\n\t\t}\n\t\tif g.Status != Gdead {\n\t\t\tallg = append(allg, g)\n\t\t}\n\t\tdbp.gcache.addGoroutine(g)\n\t}\n\tif start == 0 {\n\t\tdbp.gcache.allGCache = allg\n\t}\n\n\treturn allg, -1, nil\n}\n\n// FindGoroutine returns a G struct representing the goroutine\n// specified by `gid`.\nfunc FindGoroutine(dbp *Target, gid int64) (*G, error) {\n\tif selg := dbp.SelectedGoroutine(); (gid == -1) || (selg != nil && selg.ID == gid) || (selg == nil && gid == 0) {\n\t\t// Return the currently selected goroutine in the following circumstances:\n\t\t//\n\t\t// 1. if the caller asks for gid == -1 (because that's what a goroutine ID of -1 means in our API).\n\t\t// 2. if gid == selg.ID.\n\t\t//    this serves two purposes: (a) it's an optimizations that allows us\n\t\t//    to avoid reading any other goroutine and, more importantly, (b) we\n\t\t//    could be reading an incorrect value for the goroutine ID of a thread.\n\t\t//    This condition usually happens when a goroutine calls runtime.clone\n\t\t//    and for a short period of time two threads will appear to be running\n\t\t//    the same goroutine.\n\t\t// 3. if the caller asks for gid == 0 and the selected goroutine is\n\t\t//    either 0 or nil.\n\t\t//    Goroutine 0 is special, it either means we have no current goroutine\n\t\t//    (for example, running C code), or that we are running on a special\n\t\t//    stack (system stack, signal handling stack) and we didn't properly\n\t\t//    detect it.\n\t\t//    Since there could be multiple goroutines '0' running simultaneously\n\t\t//    if the user requests it return the one that's already selected or\n\t\t//    nil if there isn't a selected goroutine.\n\t\treturn selg, nil\n\t}\n\n\tif gid == 0 {\n\t\treturn nil, fmt.Errorf(\"unknown goroutine %d\", gid)\n\t}\n\n\tif g := dbp.gcache.partialGCache[gid]; g != nil {\n\t\treturn g, nil\n\t}\n\n\t// Calling GoroutinesInfo could be slow if there are many goroutines\n\t// running, check if a running goroutine has been requested first.\n\tfor _, thread := range dbp.ThreadList() {\n\t\tg, _ := GetG(thread)\n\t\tif g != nil && g.ID == gid {\n\t\t\treturn g, nil\n\t\t}\n\t}\n\n\tconst goroutinesInfoLimit = 10\n\tnextg := 0\n\tfor nextg >= 0 {\n\t\tvar gs []*G\n\t\tvar err error\n\t\tgs, nextg, err = GoroutinesInfo(dbp, nextg, goroutinesInfoLimit)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor i := range gs {\n\t\t\tif gs[i].ID == gid {\n\t\t\t\tif gs[i].Unreadable != nil {\n\t\t\t\t\treturn nil, gs[i].Unreadable\n\t\t\t\t}\n\t\t\t\treturn gs[i], nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil, fmt.Errorf(\"unknown goroutine %d\", gid)\n}\n\nfunc getGVariable(thread Thread) (*Variable, error) {\n\tregs, err := thread.Registers()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgaddr, hasgaddr := regs.GAddr()\n\tif !hasgaddr {\n\t\tbi := thread.BinInfo()\n\t\toffset, err := bi.GStructOffset(thread.ProcessMemory())\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tgaddr, err = readUintRaw(thread.ProcessMemory(), regs.TLS()+offset, int64(bi.Arch.PtrSize()))\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn newGVariable(thread, gaddr, thread.BinInfo().Arch.DerefTLS())\n}\n\nfunc newGVariable(thread Thread, gaddr uint64, deref bool) (*Variable, error) {\n\ttyp, err := thread.BinInfo().findType(\"runtime.g\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif deref {\n\t\ttyp = &godwarf.PtrType{\n\t\t\tCommonType: godwarf.CommonType{\n\t\t\t\tByteSize:    int64(thread.BinInfo().Arch.PtrSize()),\n\t\t\t\tName:        \"\",\n\t\t\t\tReflectKind: reflect.Ptr,\n\t\t\t\tOffset:      0,\n\t\t\t},\n\t\t\tType: typ,\n\t\t}\n\t}\n\n\treturn newVariableFromThread(thread, \"\", gaddr, typ), nil\n}\n\n// Defer returns the top-most defer of the goroutine.\nfunc (g *G) Defer() *Defer {\n\tif g.variable.Unreadable != nil {\n\t\treturn nil\n\t}\n\tdvar, _ := g.variable.structField(\"_defer\")\n\tif dvar == nil {\n\t\treturn nil\n\t}\n\tdvar = dvar.maybeDereference()\n\tif dvar.Addr == 0 {\n\t\treturn nil\n\t}\n\td := &Defer{variable: dvar}\n\td.load(true)\n\treturn d\n}\n\n// UserCurrent returns the location the users code is at,\n// or was at before entering a runtime function.\nfunc (g *G) UserCurrent() Location {\n\tit, err := goroutineStackIterator(nil, g, 0)\n\tif err != nil {\n\t\treturn g.CurrentLoc\n\t}\n\tfor count := 0; it.Next() && count < maxGoroutineUserCurrentDepth; count++ {\n\t\tframe := it.Frame()\n\t\tif frame.Call.Fn != nil {\n\t\t\tname := frame.Call.Fn.Name\n\t\t\tif strings.Contains(name, \".\") && (!strings.HasPrefix(name, \"runtime.\") || frame.Call.Fn.exportedRuntime()) && !strings.HasPrefix(name, \"internal/\") && !strings.HasPrefix(name, \"runtime/internal\") && !strings.HasPrefix(name, \"iter.\") {\n\t\t\t\treturn frame.Call\n\t\t\t}\n\t\t}\n\t}\n\treturn g.CurrentLoc\n}\n\n// Go returns the location of the 'go' statement\n// that spawned this goroutine.\nfunc (g *G) Go() Location {\n\tpc := g.GoPC\n\tif fn := g.variable.bi.PCToFunc(pc); fn != nil {\n\t\t// Backup to CALL instruction.\n\t\t// Mimics runtime/traceback.go:677.\n\t\tif g.GoPC > fn.Entry {\n\t\t\tpc--\n\t\t}\n\t}\n\tf, l, fn := g.variable.bi.PCToLine(pc)\n\treturn Location{PC: g.GoPC, File: f, Line: l, Fn: fn}\n}\n\n// StartLoc returns the starting location of the goroutine.\nfunc (g *G) StartLoc(tgt *Target) Location {\n\tfn := g.variable.bi.PCToFunc(g.StartPC)\n\tfn = tgt.dwrapUnwrap(fn)\n\tif fn == nil {\n\t\treturn Location{PC: g.StartPC}\n\t}\n\tf, l := tgt.BinInfo().EntryLineForFunc(fn)\n\treturn Location{PC: fn.Entry, File: f, Line: l, Fn: fn}\n}\n\n// System returns true if g is a system goroutine. See isSystemGoroutine in\n// $GOROOT/src/runtime/traceback.go.\nfunc (g *G) System(tgt *Target) bool {\n\tloc := g.StartLoc(tgt)\n\tif loc.Fn == nil {\n\t\treturn false\n\t}\n\tswitch loc.Fn.Name {\n\tcase \"runtime.main\", \"runtime.handleAsyncEvent\":\n\t\treturn false\n\t}\n\treturn strings.HasPrefix(loc.Fn.Name, \"runtime.\")\n}\n\nfunc (g *G) Labels() map[string]string {\n\tif g.labels != nil {\n\t\treturn *g.labels\n\t}\n\tvar labels map[string]string\n\tif labelsVar := g.variable.loadFieldNamed(\"labels\"); labelsVar != nil && len(labelsVar.Children) == 1 {\n\t\tif address := labelsVar.Children[0]; address.Addr != 0 {\n\t\t\tlabelMapType, _ := g.variable.bi.findType(\"runtime/pprof.labelMap\")\n\t\t\tif labelMapType != nil {\n\t\t\t\tlabelMap := newVariable(\"\", address.Addr, labelMapType, g.variable.bi, g.variable.mem)\n\t\t\t\tlabels = map[string]string{}\n\t\t\t\tswitch labelMap.Kind {\n\t\t\t\tcase reflect.Map:\n\t\t\t\t\tlabelMap.loadValue(loadFullValue)\n\t\t\t\t\tfor i := range labelMap.Children {\n\t\t\t\t\t\tif i%2 == 0 {\n\t\t\t\t\t\t\tk := labelMap.Children[i]\n\t\t\t\t\t\t\tv := labelMap.Children[i+1]\n\t\t\t\t\t\t\tlabels[constant.StringVal(k.Value)] = constant.StringVal(v.Value)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tcase reflect.Struct:\n\t\t\t\t\tlabelMap = structFieldInList(labelMap, \"LabelSet\", \"Set\")\n\t\t\t\t\tif labelMap != nil {\n\t\t\t\t\t\tlabelMap = structFieldInList(labelMap, \"list\", \"List\")\n\t\t\t\t\t}\n\t\t\t\t\tif labelMap != nil {\n\t\t\t\t\t\t// ensure the labelMap.Len is a valid value to prevent infinite loops\n\t\t\t\t\t\tif labelMap.Len < 0 {\n\t\t\t\t\t\t\tlabelMap.Len = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif labelMap.Len > maxGoroutinesLabelEntries {\n\t\t\t\t\t\t\tlabelMap.Len = maxGoroutinesLabelEntries\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor i := int64(0); i < labelMap.Len; i++ {\n\t\t\t\t\t\t\tv, err := labelMap.sliceAccess(int(i))\n\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tv.loadValue(loadFullValue)\n\t\t\t\t\t\t\tif len(v.Children) == 2 {\n\t\t\t\t\t\t\t\t// Skip invalid key-value pairs caused by corrupted or incompatible label structures\n\t\t\t\t\t\t\t\t// (e.g., labels set by some libraries: https://github.com/timandy/routine/blob/v1.1.4/goid.go#L50).\n\t\t\t\t\t\t\t\t// This prevents panics when converting nil values via constant.StringVal().\n\t\t\t\t\t\t\t\tif v.Children[0].Value == nil || v.Children[1].Value == nil {\n\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tlabels[constant.StringVal(v.Children[0].Value)] = constant.StringVal(v.Children[1].Value)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tg.labels = &labels\n\treturn *g.labels\n}\n\nfunc structFieldInList(v *Variable, fieldNames ...string) *Variable {\n\tfor _, fieldName := range fieldNames {\n\t\tfieldv, _ := v.structField(fieldName)\n\t\tif fieldv != nil {\n\t\t\treturn fieldv\n\t\t}\n\t}\n\treturn nil\n}\n\ntype Ancestor struct {\n\tID         int64 // Goroutine ID\n\tUnreadable error\n\tpcsVar     *Variable\n}\n\n// IsNilErr is returned when a variable is nil.\ntype IsNilErr struct {\n\tname string\n}\n\nfunc (err *IsNilErr) Error() string {\n\treturn fmt.Sprintf(\"%s is nil\", err.name)\n}\n\nfunc globalScope(tgt *Target, bi *BinaryInfo, image *Image, mem MemoryReadWriter) *EvalScope {\n\treturn &EvalScope{Location: Location{}, Regs: op.DwarfRegisters{StaticBase: image.StaticBase}, Mem: mem, g: nil, BinInfo: bi, target: tgt, frameOffset: 0}\n}\n\nfunc newVariableFromThread(t Thread, name string, addr uint64, dwarfType godwarf.Type) *Variable {\n\treturn newVariable(name, addr, dwarfType, t.BinInfo(), t.ProcessMemory())\n}\n\nfunc (v *Variable) newVariable(name string, addr uint64, dwarfType godwarf.Type, mem MemoryReadWriter) *Variable {\n\treturn newVariable(name, addr, dwarfType, v.bi, mem)\n}\n\nfunc newVariable(name string, addr uint64, dwarfType godwarf.Type, bi *BinaryInfo, mem MemoryReadWriter) *Variable {\n\tif styp, isstruct := dwarfType.(*godwarf.StructType); isstruct && !strings.Contains(styp.Name, \"<\") && !strings.Contains(styp.Name, \"{\") {\n\t\t// For named structs the compiler will emit a DW_TAG_structure_type entry\n\t\t// and a DW_TAG_typedef entry.\n\t\t//\n\t\t// Normally variables refer to the typedef entry but sometimes global\n\t\t// variables will refer to the struct entry incorrectly.\n\t\t// Also the runtime type offset resolution (runtimeTypeToDIE) will return\n\t\t// the struct entry directly.\n\t\t//\n\t\t// In both cases we prefer to have a typedef type for consistency's sake.\n\t\t//\n\t\t// So we wrap all struct types into a fake typedef type except for:\n\t\t// a. types not defined by go\n\t\t// b. anonymous struct types (they contain the '{' character)\n\t\t// c. Go internal struct types used to describe maps (they contain the '<'\n\t\t// character).\n\t\tcu := bi.Images[dwarfType.Common().Index].findCompileUnitForOffset(dwarfType.Common().Offset)\n\t\tif cu != nil && cu.isgo {\n\t\t\tdwarfType = &godwarf.TypedefType{\n\t\t\t\tCommonType: *(dwarfType.Common()),\n\t\t\t\tType:       dwarfType,\n\t\t\t}\n\t\t}\n\t}\n\n\tv := &Variable{\n\t\tName:      name,\n\t\tAddr:      addr,\n\t\tDwarfType: dwarfType,\n\t\tmem:       mem,\n\t\tbi:        bi,\n\t}\n\n\tv.RealType = godwarf.ResolveTypedef(v.DwarfType)\n\n\tswitch t := v.RealType.(type) {\n\tcase *godwarf.PtrType:\n\t\tv.Kind = reflect.Ptr\n\t\tif _, isvoid := t.Type.(*godwarf.VoidType); isvoid {\n\t\t\tv.Kind = reflect.UnsafePointer\n\t\t} else if isCgoType(bi, t) {\n\t\t\tv.Flags |= VariableCPtr\n\t\t\tv.fieldType = t.Type\n\t\t\tv.stride = alignAddr(v.fieldType.Size(), v.fieldType.Align())\n\t\t\tv.Len = 0\n\t\t\tif isCgoCharPtr(bi, t) {\n\t\t\t\tv.Kind = reflect.String\n\t\t\t}\n\t\t\tif v.Addr != 0 {\n\t\t\t\tv.Base, v.Unreadable = readUintRaw(v.mem, v.Addr, int64(v.bi.Arch.PtrSize()))\n\t\t\t}\n\t\t}\n\tcase *godwarf.ChanType:\n\t\tv.Kind = reflect.Chan\n\t\tif v.Addr != 0 {\n\t\t\tv.loadChanInfo()\n\t\t}\n\tcase *godwarf.MapType:\n\t\tv.Kind = reflect.Map\n\tcase *godwarf.StringType:\n\t\tv.Kind = reflect.String\n\t\tv.stride = 1\n\t\tv.fieldType = &godwarf.UintType{BasicType: godwarf.BasicType{CommonType: godwarf.CommonType{ByteSize: 1, Name: \"byte\", ReflectKind: reflect.Uint8}, BitSize: 8, BitOffset: 0}}\n\t\tif v.Addr != 0 {\n\t\t\tv.Base, v.Len, v.Unreadable = readStringInfo(v.mem, v.bi.Arch, v.Addr, t)\n\t\t}\n\tcase *godwarf.SliceType:\n\t\tv.Kind = reflect.Slice\n\t\tif v.Addr != 0 {\n\t\t\tv.loadSliceInfo(t)\n\t\t}\n\tcase *godwarf.InterfaceType:\n\t\tv.Kind = reflect.Interface\n\tcase *godwarf.StructType:\n\t\tv.Kind = reflect.Struct\n\tcase *godwarf.ArrayType:\n\t\tv.Kind = reflect.Array\n\t\tv.Base = v.Addr\n\t\tv.Len = t.Count\n\t\tv.Cap = t.Count\n\t\tv.fieldType = t.Type\n\t\tv.stride = 0\n\n\t\tif t.Count > 0 {\n\t\t\tv.stride = t.ByteSize / t.Count\n\t\t}\n\tcase *godwarf.ComplexType:\n\t\tswitch t.ByteSize {\n\t\tcase 8:\n\t\t\tv.Kind = reflect.Complex64\n\t\tcase 16:\n\t\t\tv.Kind = reflect.Complex128\n\t\t}\n\tcase *godwarf.IntType:\n\t\tv.Kind = reflect.Int\n\tcase *godwarf.CharType:\n\t\t// Rest of the code assumes that Kind == reflect.Int implies RealType ==\n\t\t// godwarf.IntType.\n\t\tv.RealType = &godwarf.IntType{BasicType: t.BasicType}\n\t\tv.Kind = reflect.Int\n\tcase *godwarf.UcharType:\n\t\tv.RealType = &godwarf.IntType{BasicType: t.BasicType}\n\t\tv.Kind = reflect.Int\n\tcase *godwarf.UintType:\n\t\tv.Kind = reflect.Uint\n\tcase *godwarf.FloatType:\n\t\tswitch t.ByteSize {\n\t\tcase 4:\n\t\t\tv.Kind = reflect.Float32\n\t\tcase 8:\n\t\t\tv.Kind = reflect.Float64\n\t\t}\n\tcase *godwarf.BoolType:\n\t\tv.Kind = reflect.Bool\n\tcase *godwarf.FuncType:\n\t\tv.Kind = reflect.Func\n\tcase *godwarf.VoidType:\n\t\tv.Kind = reflect.Invalid\n\tcase *godwarf.UnspecifiedType:\n\t\tv.Kind = reflect.Invalid\n\tdefault:\n\t\tv.Unreadable = fmt.Errorf(\"unknown type: %T\", t)\n\t}\n\n\treturn v\n}\n\nvar constantMaxInt64 = constant.MakeInt64(1<<63 - 1)\n\nfunc newConstant(val constant.Value, bi *BinaryInfo, mem MemoryReadWriter) *Variable {\n\tv := &Variable{Value: val, mem: mem, loaded: true, bi: bi}\n\tswitch val.Kind() {\n\tcase constant.Int:\n\t\tv.Kind = reflect.Int\n\t\tif constant.Sign(val) >= 0 && constant.Compare(val, token.GTR, constantMaxInt64) {\n\t\t\tv.Kind = reflect.Uint64\n\t\t}\n\tcase constant.Float:\n\t\tv.Kind = reflect.Float64\n\tcase constant.Bool:\n\t\tv.Kind = reflect.Bool\n\tcase constant.Complex:\n\t\tv.Kind = reflect.Complex128\n\tcase constant.String:\n\t\tv.Kind = reflect.String\n\t\tv.Len = int64(len(constant.StringVal(val)))\n\t}\n\tv.Flags |= VariableConstant\n\treturn v\n}\n\nvar nilVariable = &Variable{\n\tName:     \"nil\",\n\tAddr:     0,\n\tBase:     0,\n\tKind:     reflect.Ptr,\n\tChildren: []Variable{{Addr: 0, OnlyAddr: true}},\n}\n\nfunc (v *Variable) clone() *Variable {\n\tr := *v\n\treturn &r\n}\n\n// TypeString returns the string representation\n// of the type of this variable.\nfunc (v *Variable) TypeString() string {\n\tif v == nilVariable {\n\t\treturn \"nil\"\n\t}\n\tif v.DwarfType == nil {\n\t\treturn v.Kind.String()\n\t}\n\tif v.DwarfType.Common().Name != \"\" {\n\t\treturn v.DwarfType.Common().Name\n\t}\n\tr := v.DwarfType.String()\n\tif r == \"*void\" {\n\t\tcu := v.bi.Images[v.DwarfType.Common().Index].findCompileUnitForOffset(v.DwarfType.Common().Offset)\n\t\tif cu != nil && cu.isgo {\n\t\t\tr = \"unsafe.Pointer\"\n\t\t}\n\t}\n\treturn r\n}\n\nfunc (v *Variable) toField(field *godwarf.StructField) (*Variable, error) {\n\tif v.Unreadable != nil {\n\t\treturn v.clone(), nil\n\t}\n\tif v.Addr == 0 {\n\t\treturn nil, &IsNilErr{v.Name}\n\t}\n\n\tname := \"\"\n\tif v.Name != \"\" {\n\t\tparts := strings.Split(field.Name, \".\")\n\t\tif len(parts) > 1 {\n\t\t\tname = fmt.Sprintf(\"%s.%s\", v.Name, parts[1])\n\t\t} else {\n\t\t\tname = fmt.Sprintf(\"%s.%s\", v.Name, field.Name)\n\t\t}\n\t}\n\treturn v.newVariable(name, uint64(int64(v.Addr)+field.ByteOffset), field.Type, v.mem), nil\n}\n\n// ErrNoGoroutine returned when a G could not be found\n// for a specific thread.\ntype ErrNoGoroutine struct {\n\ttid int\n}\n\nfunc (ng ErrNoGoroutine) Error() string {\n\treturn fmt.Sprintf(\"no G executing on thread %d\", ng.tid)\n}\n\nvar ErrUnreadableG = errors.New(\"could not read G struct\")\n\nfunc (v *Variable) parseG() (*G, error) {\n\tmem := v.mem\n\tgaddr := v.Addr\n\t_, deref := v.RealType.(*godwarf.PtrType)\n\n\tif deref {\n\t\tvar err error\n\t\tgaddr, err = readUintRaw(mem, gaddr, int64(v.bi.Arch.PtrSize()))\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error derefing *G %s\", err)\n\t\t}\n\t}\n\tif gaddr == 0 {\n\t\tid := 0\n\t\tif thread, ok := mem.(Thread); ok {\n\t\t\tid = thread.ThreadID()\n\t\t}\n\t\treturn nil, ErrNoGoroutine{tid: id}\n\t}\n\tisptr := func(t godwarf.Type) bool {\n\t\t_, ok := t.(*godwarf.PtrType)\n\t\treturn ok\n\t}\n\tfor isptr(v.RealType) {\n\t\tv = v.maybeDereference() // +rtype g\n\t}\n\n\tv.mem = cacheMemory(v.mem, v.Addr, int(v.RealType.Size()))\n\n\tschedVar := v.loadFieldNamed(\"sched\") // +rtype gobuf\n\tif schedVar == nil {\n\t\treturn nil, ErrUnreadableG\n\t}\n\n\tvar pc, sp, bp, lr int64\n\tif pcvar := schedVar.fieldVariable(\"pc\"); /* +rtype uintptr */ pcvar != nil && pcvar.Value != nil {\n\t\tpc, _ = constant.Int64Val(pcvar.Value)\n\t} else {\n\t\treturn nil, ErrUnreadableG\n\t}\n\tif spvar := schedVar.fieldVariable(\"sp\"); /* +rtype uintptr */ spvar != nil && spvar.Value != nil {\n\t\tsp, _ = constant.Int64Val(spvar.Value)\n\t} else {\n\t\treturn nil, ErrUnreadableG\n\t}\n\tif bpvar := schedVar.fieldVariable(\"bp\"); /* +rtype -opt uintptr */ bpvar != nil && bpvar.Value != nil {\n\t\tbp, _ = constant.Int64Val(bpvar.Value)\n\t}\n\tif lrvar := schedVar.fieldVariable(\"lr\"); /* +rtype -opt uintptr */ lrvar != nil && lrvar.Value != nil {\n\t\tlr, _ = constant.Int64Val(lrvar.Value)\n\t}\n\n\tunreadable := false\n\n\tloadInt64Maybe := func(name string) int64 {\n\t\tvv := v.loadFieldNamed(name)\n\t\tif vv == nil {\n\t\t\tunreadable = true\n\t\t\treturn 0\n\t\t}\n\t\tn, _ := constant.Int64Val(vv.Value)\n\t\treturn n\n\t}\n\n\tloadUint64Maybe := func(name string) uint64 {\n\t\tvv := v.loadFieldNamed(name)\n\t\tif vv == nil {\n\t\t\tunreadable = true\n\t\t\treturn 0\n\t\t}\n\t\tn, _ := constant.Uint64Val(vv.Value)\n\t\treturn n\n\t}\n\n\tid := loadUint64Maybe(\"goid\")            // +rtype int64|uint64\n\tgopc := loadInt64Maybe(\"gopc\")           // +rtype uintptr\n\tstartpc := loadInt64Maybe(\"startpc\")     // +rtype uintptr\n\twaitSince := loadInt64Maybe(\"waitsince\") // +rtype int64\n\twaitReason := int64(0)\n\tif producer := v.bi.Producer(); producer != \"\" && goversion.ProducerAfterOrEqual(producer, 1, 11) {\n\t\twaitReason = loadInt64Maybe(\"waitreason\") // +rtype -opt waitReason\n\t}\n\tvar stackhi, stacklo uint64\n\tif stackVar := v.loadFieldNamed(\"stack\"); /* +rtype stack */ stackVar != nil {\n\t\tif stackhiVar := stackVar.fieldVariable(\"hi\"); /* +rtype uintptr */ stackhiVar != nil && stackhiVar.Value != nil {\n\t\t\tstackhi, _ = constant.Uint64Val(stackhiVar.Value)\n\t\t} else {\n\t\t\tunreadable = true\n\t\t}\n\t\tif stackloVar := stackVar.fieldVariable(\"lo\"); /* +rtype uintptr */ stackloVar != nil && stackloVar.Value != nil {\n\t\t\tstacklo, _ = constant.Uint64Val(stackloVar.Value)\n\t\t} else {\n\t\t\tunreadable = true\n\t\t}\n\t}\n\n\tstatus := uint64(0)\n\tif atomicStatus := v.loadFieldNamed(\"atomicstatus\"); /* +rtype uint32|runtime/internal/atomic.Uint32|internal/runtime/atomic.Uint32 */ atomicStatus != nil {\n\t\tif constant.Val(atomicStatus.Value) != nil {\n\t\t\tstatus, _ = constant.Uint64Val(atomicStatus.Value)\n\t\t} else {\n\t\t\tatomicStatus := atomicStatus              // +rtype runtime/internal/atomic.Uint32|internal/runtime/atomic.Uint32\n\t\t\tvv := atomicStatus.fieldVariable(\"value\") // +rtype uint32\n\t\t\tif vv == nil {\n\t\t\t\tunreadable = true\n\t\t\t} else {\n\t\t\t\tstatus, _ = constant.Uint64Val(vv.Value)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tunreadable = true\n\t}\n\n\tif unreadable {\n\t\treturn nil, ErrUnreadableG\n\t}\n\n\tf, l, fn := v.bi.PCToLine(uint64(pc))\n\n\tv.Name = \"runtime.curg\"\n\n\tg := &G{\n\t\tID:         int64(id),\n\t\tGoPC:       uint64(gopc),\n\t\tStartPC:    uint64(startpc),\n\t\tPC:         uint64(pc),\n\t\tSP:         uint64(sp),\n\t\tBP:         uint64(bp),\n\t\tLR:         uint64(lr),\n\t\tStatus:     status,\n\t\tWaitSince:  waitSince,\n\t\tWaitReason: waitReason,\n\t\tCurrentLoc: Location{PC: uint64(pc), File: f, Line: l, Fn: fn},\n\t\tvariable:   v,\n\t\tstack:      stack{hi: stackhi, lo: stacklo},\n\t}\n\treturn g, nil\n}\n\nfunc (v *Variable) loadFieldNamed(name string) *Variable {\n\tv, err := v.structField(name)\n\tif err != nil {\n\t\treturn nil\n\t}\n\tv.loadValue(loadFullValue)\n\tif v.Unreadable != nil {\n\t\treturn nil\n\t}\n\treturn v\n}\n\nfunc (v *Variable) fieldVariable(name string) *Variable {\n\tif !v.loaded {\n\t\tpanic(\"fieldVariable called on a variable that wasn't loaded\")\n\t}\n\tfor i := range v.Children {\n\t\tif child := &v.Children[i]; child.Name == name {\n\t\t\treturn child\n\t\t}\n\t}\n\treturn nil\n}\n\nvar errTracebackAncestorsDisabled = errors.New(\"tracebackancestors is disabled\")\n\n// Ancestors returns the list of ancestors for g.\nfunc Ancestors(p *Target, g *G, n int) ([]Ancestor, error) {\n\tscope := globalScope(p, p.BinInfo(), p.BinInfo().Images[0], p.Memory())\n\ttbav, err := scope.EvalExpression(\"runtime.debug.tracebackancestors\", loadSingleValue)\n\tif err == nil && tbav.Unreadable == nil && tbav.Kind == reflect.Int {\n\t\ttba, _ := constant.Int64Val(tbav.Value)\n\t\tif tba == 0 {\n\t\t\treturn nil, errTracebackAncestorsDisabled\n\t\t}\n\t}\n\n\tav, err := g.variable.structField(\"ancestors\")\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tav = av.maybeDereference()\n\tav.loadValue(LoadConfig{MaxArrayValues: n, MaxVariableRecurse: 1, MaxStructFields: -1})\n\tif av.Unreadable != nil {\n\t\treturn nil, av.Unreadable\n\t}\n\tif av.Addr == 0 {\n\t\t// no ancestors\n\t\treturn nil, nil\n\t}\n\n\tr := make([]Ancestor, len(av.Children))\n\n\tfor i := range av.Children {\n\t\tif av.Children[i].Unreadable != nil {\n\t\t\tr[i].Unreadable = av.Children[i].Unreadable\n\t\t\tcontinue\n\t\t}\n\t\tgoidv := av.Children[i].fieldVariable(\"goid\")\n\t\tif goidv.Unreadable != nil {\n\t\t\tr[i].Unreadable = goidv.Unreadable\n\t\t\tcontinue\n\t\t}\n\t\tr[i].ID, _ = constant.Int64Val(goidv.Value)\n\t\tpcsVar := av.Children[i].fieldVariable(\"pcs\")\n\t\tif pcsVar.Unreadable != nil {\n\t\t\tr[i].Unreadable = pcsVar.Unreadable\n\t\t}\n\t\tpcsVar.loaded = false\n\t\tpcsVar.Children = pcsVar.Children[:0]\n\t\tr[i].pcsVar = pcsVar\n\t}\n\n\treturn r, nil\n}\n\n// Stack returns the stack trace of ancestor 'a' as saved by the runtime.\nfunc (a *Ancestor) Stack(n int) ([]Stackframe, error) {\n\tif a.Unreadable != nil {\n\t\treturn nil, a.Unreadable\n\t}\n\tpcsVar := a.pcsVar.clone()\n\tpcsVar.loadValue(LoadConfig{MaxArrayValues: n})\n\tif pcsVar.Unreadable != nil {\n\t\treturn nil, pcsVar.Unreadable\n\t}\n\tr := make([]Stackframe, len(pcsVar.Children))\n\tfor i := range pcsVar.Children {\n\t\tif pcsVar.Children[i].Unreadable != nil {\n\t\t\tr[i] = Stackframe{Err: pcsVar.Children[i].Unreadable}\n\t\t\tcontinue\n\t\t}\n\t\tif pcsVar.Children[i].Kind != reflect.Uint {\n\t\t\treturn nil, fmt.Errorf(\"wrong type for pcs item %d: %v\", i, pcsVar.Children[i].Kind)\n\t\t}\n\t\tpc, _ := constant.Int64Val(pcsVar.Children[i].Value)\n\t\tfn := a.pcsVar.bi.PCToFunc(uint64(pc))\n\t\tif fn == nil {\n\t\t\tloc := Location{PC: uint64(pc)}\n\t\t\tr[i] = Stackframe{Current: loc, Call: loc}\n\t\t\tcontinue\n\t\t}\n\t\tpc2 := uint64(pc)\n\t\tif pc2-1 >= fn.Entry {\n\t\t\tpc2--\n\t\t}\n\t\tf, ln := fn.cu.lineInfo.PCToLine(fn.Entry, pc2)\n\t\tloc := Location{PC: uint64(pc), File: f, Line: ln, Fn: fn}\n\t\tr[i] = Stackframe{Current: loc, Call: loc}\n\t}\n\tr[len(r)-1].Bottom = pcsVar.Len == int64(len(pcsVar.Children))\n\treturn r, nil\n}\n\n// structField returns the field named memberName in v.\n// This function is meant for internal use, it does not support interfaces, embeds or member methods. For those cases findStructMemberOrMethod should be used instead.\nfunc (v *Variable) structField(memberName string) (*Variable, error) {\n\tif v.Unreadable != nil {\n\t\treturn v.clone(), nil\n\t}\n\tvname := v.Name\n\tif v.Name == \"\" {\n\t\tvname = v.DwarfType.String()\n\t}\n\tif v.loaded && (v.Flags&VariableFakeAddress) != 0 {\n\t\tfor i := range v.Children {\n\t\t\tif v.Children[i].Name == memberName {\n\t\t\t\treturn &v.Children[i], nil\n\t\t\t}\n\t\t}\n\t\treturn nil, fmt.Errorf(\"%s has no member %s\", vname, memberName)\n\t}\n\tclosure := false\n\tswitch v.Kind {\n\tcase reflect.Chan:\n\t\tv = v.clone()\n\t\tv.RealType = godwarf.ResolveTypedef(&(v.RealType.(*godwarf.ChanType).TypedefType))\n\tcase reflect.Func:\n\t\tfn := v.bi.PCToFunc(v.Base)\n\t\tv.loadFunctionPtr(0, LoadConfig{MaxVariableRecurse: -1})\n\t\tif v.Unreadable != nil {\n\t\t\tcst := fn.extra(v.bi).closureStructType\n\t\t\tif cst == nil || cst.ByteSize == 0 {\n\t\t\t\t// Not a closure, normal function\n\t\t\t\tif _, ok := v.bi.PackageMap[vname]; ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"package %s has no function %s\", vname, memberName)\n\t\t\t\t}\n\t\t\t\treturn nil, fmt.Errorf(\"%s has no member %s\", vname, memberName)\n\t\t\t}\n\t\t\treturn nil, v.Unreadable\n\t\t}\n\t\tif v.closureAddr != 0 {\n\t\t\tfn = v.bi.PCToFunc(v.Base)\n\t\t\tif fn != nil {\n\t\t\t\tcst := fn.extra(v.bi).closureStructType\n\t\t\t\tv = v.newVariable(v.Name, v.closureAddr, cst, v.mem)\n\t\t\t\tclosure = true\n\t\t\t}\n\t\t}\n\t}\n\n\tstructVar := v.maybeDereference()\n\tstructVar.Name = v.Name\n\tif structVar.Unreadable != nil {\n\t\treturn structVar, nil\n\t}\n\n\tt, isstruct := structVar.RealType.(*godwarf.StructType)\n\tif !isstruct {\n\t\treturn nil, fmt.Errorf(\"%s (type %s) is not a struct\", vname, structVar.TypeString())\n\t}\n\n\tfor _, field := range t.Field {\n\t\tif field.Name == memberName {\n\t\t\treturn structVar.toField(field)\n\t\t}\n\t\tif field.Name == \"&\"+memberName && closure {\n\t\t\tf, err := structVar.toField(field)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\treturn f.maybeDereference(), nil\n\t\t}\n\t}\n\n\treturn nil, fmt.Errorf(\"%s has no member %s\", vname, memberName)\n}\n\nfunc readVarEntry(entry *godwarf.Tree, image *Image) (name string, typ godwarf.Type, err error) {\n\tname, ok := entry.Val(dwarf.AttrName).(string)\n\tif !ok {\n\t\treturn \"\", nil, errors.New(\"malformed variable DIE (name)\")\n\t}\n\n\ttyp, err = entry.Type(image.dwarf, image.index, image.typeCache)\n\tif err != nil {\n\t\treturn \"\", nil, err\n\t}\n\n\treturn name, typ, nil\n}\n\n// Extracts the name and type of a variable from a dwarf entry\n// then executes the instructions given in the  DW_AT_location attribute to grab the variable's address\nfunc extractVarInfoFromEntry(tgt *Target, bi *BinaryInfo, image *Image, regs op.DwarfRegisters, mem MemoryReadWriter, entry *godwarf.Tree, dictAddr uint64) (*Variable, error) {\n\tif entry.Tag != dwarf.TagFormalParameter && entry.Tag != dwarf.TagVariable {\n\t\treturn nil, fmt.Errorf(\"invalid entry tag, only supports FormalParameter and Variable, got %s\", entry.Tag.String())\n\t}\n\n\tn, t, err := readVarEntry(entry, image)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tt, err = resolveParametricType(bi, mem, t, dictAddr)\n\tif err != nil {\n\t\t// Log the error, keep going with t, which will be the shape type\n\t\tlogflags.DebuggerLogger().Errorf(\"could not resolve parametric type of %s: %v\", n, err)\n\t}\n\n\taddr, pieces, descr, err := bi.Location(entry, dwarf.AttrLocation, regs.PC(), regs, mem)\n\tif pieces != nil {\n\t\tvar cmem *compositeMemory\n\t\tif tgt != nil {\n\t\t\taddr, cmem, err = tgt.newCompositeMemory(mem, regs, pieces, descr, t.Common().ByteSize)\n\t\t} else {\n\t\t\tcmem, err = newCompositeMemory(mem, bi.Arch, regs, pieces, t.Common().ByteSize)\n\t\t\tif cmem != nil {\n\t\t\t\tcmem.base = fakeAddressUnresolv\n\t\t\t\taddr = int64(cmem.base)\n\t\t\t}\n\t\t}\n\t\tif cmem != nil {\n\t\t\tmem = cmem\n\t\t}\n\t}\n\n\tv := newVariable(n, uint64(addr), t, bi, mem)\n\tif pieces != nil {\n\t\tv.Flags |= VariableFakeAddress\n\t}\n\tv.LocationExpr = descr\n\tv.DeclLine, _ = entry.Val(dwarf.AttrDeclLine).(int64)\n\tif err != nil {\n\t\tv.Unreadable = err\n\t}\n\treturn v, nil\n}\n\n// If v is a pointer a new variable is returned containing the value pointed by v.\nfunc (v *Variable) maybeDereference() *Variable {\n\tif v.Unreadable != nil {\n\t\treturn v\n\t}\n\n\tswitch t := v.RealType.(type) {\n\tcase *godwarf.PtrType:\n\t\tif (v.Addr == 0 || v.Flags&VariableFakeAddress != 0) && len(v.Children) == 1 && v.loaded {\n\t\t\t// fake pointer variable constructed by casting an integer to a pointer type\n\t\t\treturn &v.Children[0]\n\t\t}\n\t\tptrval, err := readUintRaw(v.mem, v.Addr, t.ByteSize)\n\t\tr := v.newVariable(\"\", ptrval, t.Type, DereferenceMemory(v.mem))\n\t\tif err != nil {\n\t\t\tr.Unreadable = err\n\t\t}\n\n\t\treturn r\n\tdefault:\n\t\treturn v\n\t}\n}\n\n// loadPtr assumes that v is a pointer and loads its value. v also gets a child\n// variable, representing the pointed-to value. If v is already loaded,\n// loadPtr() is a no-op.\nfunc (v *Variable) loadPtr() {\n\tif len(v.Children) > 0 {\n\t\t// We've already loaded this variable.\n\t\treturn\n\t}\n\n\tt := v.RealType.(*godwarf.PtrType)\n\tv.Len = 1\n\n\tvar child *Variable\n\tif v.Unreadable == nil {\n\t\tptrval, err := readUintRaw(v.mem, v.Addr, t.ByteSize)\n\t\tif err == nil {\n\t\t\tchild = v.newVariable(\"\", ptrval, t.Type, DereferenceMemory(v.mem))\n\t\t} else {\n\t\t\t// We failed to read the pointer value; mark v as unreadable.\n\t\t\tv.Unreadable = err\n\t\t}\n\t}\n\n\tif v.Unreadable != nil {\n\t\t// Pointers get a child even if their value can't be read, to\n\t\t// maintain backwards compatibility.\n\t\tchild = v.newVariable(\"\", 0 /* addr */, t.Type, DereferenceMemory(v.mem))\n\t\tchild.Unreadable = fmt.Errorf(\"parent pointer unreadable: %w\", v.Unreadable)\n\t}\n\n\tv.Children = []Variable{*child}\n\tv.Value = constant.MakeUint64(v.Children[0].Addr)\n}\n\nfunc loadValues(vars []*Variable, cfg LoadConfig) {\n\tfor i := range vars {\n\t\tvars[i].loadValueInternal(0, cfg)\n\t}\n}\n\n// Extracts the value of the variable at the given address.\nfunc (v *Variable) loadValue(cfg LoadConfig) {\n\tv.loadValueInternal(0, cfg)\n}\n\nfunc (v *Variable) loadValueInternal(recurseLevel int, cfg LoadConfig) {\n\tif v.Unreadable != nil || v.loaded || (v.Addr == 0 && v.Base == 0) {\n\t\treturn\n\t}\n\n\tv.loaded = true\n\tswitch v.Kind {\n\tcase reflect.Ptr, reflect.UnsafePointer:\n\t\tv.loadPtr()\n\t\tif cfg.FollowPointers {\n\t\t\t// Don't increase the recursion level when dereferencing pointers\n\t\t\t// unless this is a pointer to interface (which could cause an infinite loop)\n\t\t\tnextLvl := recurseLevel\n\t\t\tcheckLvl := false\n\t\t\tif v.Children[0].Kind == reflect.Interface {\n\t\t\t\tnextLvl++\n\t\t\t} else if ptyp, isptr := v.RealType.(*godwarf.PtrType); isptr {\n\t\t\t\t_, elemTypIsPtr := godwarf.ResolveTypedef(ptyp.Type).(*godwarf.PtrType)\n\t\t\t\tif elemTypIsPtr {\n\t\t\t\t\tnextLvl++\n\t\t\t\t\tcheckLvl = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif checkLvl && recurseLevel > cfg.MaxVariableRecurse {\n\t\t\t\tv.Children[0].OnlyAddr = true\n\t\t\t} else {\n\t\t\t\tv.Children[0].loadValueInternal(nextLvl, cfg)\n\t\t\t}\n\t\t} else {\n\t\t\tv.Children[0].OnlyAddr = true\n\t\t}\n\n\tcase reflect.Chan:\n\t\tsv := v.clone()\n\t\tsv.RealType = godwarf.ResolveTypedef(&(sv.RealType.(*godwarf.ChanType).TypedefType))\n\t\tsv = sv.maybeDereference()\n\t\tsv.loadValueInternal(0, loadFullValue)\n\t\tv.Children = sv.Children\n\t\tv.Len = sv.Len\n\t\tv.Base = sv.Addr\n\n\tcase reflect.Map:\n\t\tif recurseLevel <= cfg.MaxVariableRecurse {\n\t\t\tv.loadMap(recurseLevel, cfg)\n\t\t} else {\n\t\t\t// loads length so that the client knows that the map isn't empty\n\t\t\tv.mapIterator(0)\n\t\t}\n\n\tcase reflect.String:\n\t\tvar val string\n\t\tswitch {\n\t\tcase v.Flags&VariableCPtr != 0:\n\t\t\tvar done bool\n\t\t\tval, done, v.Unreadable = readCStringValue(DereferenceMemory(v.mem), v.Base, cfg)\n\t\t\tif v.Unreadable == nil {\n\t\t\t\tv.Len = int64(len(val))\n\t\t\t\tif !done {\n\t\t\t\t\tv.Len++\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase v.Flags&VariableCPURegister != 0:\n\t\t\tval = fmt.Sprintf(\"%x\", v.reg.Bytes)\n\t\t\ts := v.Base - fakeAddressUnresolv\n\t\t\tif s < uint64(len(val)) {\n\t\t\t\tval = val[s:]\n\t\t\t\tif v.Len >= 0 && v.Len < int64(len(val)) {\n\t\t\t\t\tval = val[:v.Len]\n\t\t\t\t}\n\t\t\t}\n\n\t\tdefault:\n\t\t\tval, v.Unreadable = readStringValue(DereferenceMemory(v.mem), v.Base, v.Len, cfg)\n\t\t}\n\t\tv.Value = constant.MakeString(val)\n\n\tcase reflect.Slice, reflect.Array:\n\t\tv.loadArrayValues(recurseLevel, cfg)\n\n\tcase reflect.Struct:\n\t\tv.mem = cacheMemory(v.mem, v.Addr, int(v.RealType.Size()))\n\t\tt := v.RealType.(*godwarf.StructType)\n\t\tv.Len = int64(len(t.Field))\n\t\t// Recursively call extractValue to grab\n\t\t// the value of all the members of the struct.\n\t\tif recurseLevel <= cfg.MaxVariableRecurse {\n\t\t\tv.Children = make([]Variable, 0, len(t.Field))\n\t\t\tfor i, field := range t.Field {\n\t\t\t\tif cfg.MaxStructFields >= 0 && len(v.Children) >= cfg.MaxStructFields {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tf, _ := v.toField(field)\n\t\t\t\tf.Name = field.Name\n\t\t\t\tif t.StructName == \"\" && len(f.Name) > 0 && f.Name[0] == '&' && f.Kind == reflect.Ptr {\n\t\t\t\t\t// This struct is a closure struct and the field is actually a variable\n\t\t\t\t\t// captured by reference.\n\t\t\t\t\tf = f.maybeDereference()\n\t\t\t\t\tf.Flags |= VariableEscaped\n\t\t\t\t\tf.Name = field.Name[1:]\n\t\t\t\t}\n\t\t\t\tv.Children = append(v.Children, *f)\n\t\t\t\tv.Children[i].loadValueInternal(recurseLevel+1, cfg)\n\t\t\t}\n\t\t}\n\t\tif t.Name == \"time.Time\" {\n\t\t\tv.formatTime()\n\t\t}\n\n\tcase reflect.Interface:\n\t\tv.loadInterface(recurseLevel, true, cfg)\n\n\tcase reflect.Complex64, reflect.Complex128:\n\t\tv.readComplex(v.RealType.(*godwarf.ComplexType).ByteSize)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tvar val int64\n\t\tval, v.Unreadable = readIntRaw(v.mem, v.Addr, v.RealType.(*godwarf.IntType).ByteSize)\n\t\tv.Value = constant.MakeInt64(val)\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tif v.Flags&VariableCPURegister != 0 {\n\t\t\tv.Value = constant.MakeUint64(v.reg.Uint64Val)\n\t\t} else {\n\t\t\tvar val uint64\n\t\t\tval, v.Unreadable = readUintRaw(v.mem, v.Addr, v.RealType.(*godwarf.UintType).ByteSize)\n\t\t\tv.Value = constant.MakeUint64(val)\n\t\t}\n\tcase reflect.Bool:\n\t\tval := make([]byte, 1)\n\t\t_, err := v.mem.ReadMemory(val, v.Addr)\n\t\tv.Unreadable = err\n\t\tif err == nil {\n\t\t\tv.Value = constant.MakeBool(val[0] != 0)\n\t\t}\n\tcase reflect.Float32, reflect.Float64:\n\t\tvar val float64\n\t\tval, v.Unreadable = v.readFloatRaw(v.RealType.(*godwarf.FloatType).ByteSize)\n\t\tv.Value = constant.MakeFloat64(val)\n\t\tswitch {\n\t\tcase math.IsInf(val, +1):\n\t\t\tv.FloatSpecial = FloatIsPosInf\n\t\tcase math.IsInf(val, -1):\n\t\t\tv.FloatSpecial = FloatIsNegInf\n\t\tcase math.IsNaN(val):\n\t\t\tv.FloatSpecial = FloatIsNaN\n\t\t}\n\tcase reflect.Func:\n\t\tv.loadFunctionPtr(recurseLevel, cfg)\n\tdefault:\n\t\tv.Unreadable = fmt.Errorf(\"unknown or unsupported kind: %q\", v.Kind.String())\n\t}\n}\n\n// convertToEface converts srcv into an \"interface {}\" and writes it to\n// dstv.\n// Dstv must be a variable of type \"interface {}\" and srcv must either be an\n// interface or a pointer shaped variable (map, channel, pointer or struct\n// containing a single pointer)\nfunc convertToEface(srcv, dstv *Variable) error {\n\tif dstv.RealType.String() != \"interface {}\" {\n\t\treturn &typeConvErr{srcv.DwarfType, dstv.RealType}\n\t}\n\tif _, isiface := srcv.RealType.(*godwarf.InterfaceType); isiface {\n\t\t// iface -> eface conversion\n\t\t_type, data, _ := srcv.readInterface()\n\t\tif srcv.Unreadable != nil {\n\t\t\treturn srcv.Unreadable\n\t\t}\n\t\t_type = _type.maybeDereference()\n\t\tdstv.writeEmptyInterface(_type.Addr, data)\n\t\treturn nil\n\t}\n\ttypeAddr, direct, runtimeTypeFound, err := dwarfToRuntimeType(srcv.bi, srcv.mem, srcv.RealType)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can not convert value of type %s to %s: %v\", srcv.DwarfType.String(), dstv.DwarfType.String(), err)\n\t}\n\tif !runtimeTypeFound || !direct {\n\t\treturn &typeConvErr{srcv.DwarfType, dstv.RealType}\n\t}\n\treturn dstv.writeEmptyInterface(typeAddr, srcv)\n}\n\nfunc readStringInfo(mem MemoryReadWriter, arch *Arch, addr uint64, typ *godwarf.StringType) (uint64, int64, error) {\n\t// string data structure is always two ptrs in size. Addr, followed by len\n\t// https://research.swtch.com/godata\n\n\tmem = cacheMemory(mem, addr, arch.PtrSize()*2)\n\n\tvar strlen int64\n\tvar outaddr uint64\n\tvar err error\n\n\tfor _, field := range typ.StructType.Field {\n\t\tswitch field.Name {\n\t\tcase \"len\":\n\t\t\tstrlen, err = readIntRaw(mem, addr+uint64(field.ByteOffset), int64(arch.PtrSize()))\n\t\t\tif err != nil {\n\t\t\t\treturn 0, 0, fmt.Errorf(\"could not read string len %s\", err)\n\t\t\t}\n\t\t\tif strlen < 0 {\n\t\t\t\treturn 0, 0, fmt.Errorf(\"invalid length: %d\", strlen)\n\t\t\t}\n\t\tcase \"str\":\n\t\t\toutaddr, err = readUintRaw(mem, addr+uint64(field.ByteOffset), int64(arch.PtrSize()))\n\t\t\tif err != nil {\n\t\t\t\treturn 0, 0, fmt.Errorf(\"could not read string pointer %s\", err)\n\t\t\t}\n\t\t\tif addr == 0 {\n\t\t\t\treturn 0, 0, nil\n\t\t\t}\n\t\t}\n\t}\n\n\treturn outaddr, strlen, nil\n}\n\nfunc readStringValue(mem MemoryReadWriter, addr uint64, strlen int64, cfg LoadConfig) (string, error) {\n\tif strlen == 0 {\n\t\treturn \"\", nil\n\t}\n\n\tcount := min(strlen, int64(cfg.MaxStringLen))\n\n\tval := make([]byte, int(count))\n\t_, err := mem.ReadMemory(val, addr)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"could not read string at %#v due to %s\", addr, err)\n\t}\n\n\treturn string(val), nil\n}\n\nfunc readCStringValue(mem MemoryReadWriter, addr uint64, cfg LoadConfig) (string, bool, error) {\n\tbuf := make([]byte, cfg.MaxStringLen) //\n\tval := buf[:0]                        // part of the string we've already read\n\n\tfor len(buf) > 0 {\n\t\t// Reads some memory for the string but (a) never more than we would\n\t\t// need (considering cfg.MaxStringLen), and (b) never cross a page boundary\n\t\t// until we're sure we have to.\n\t\t// The page check is needed to avoid getting an I/O error for reading\n\t\t// memory we don't even need.\n\t\t// We don't know how big a page is but 1024 is a reasonable minimum common\n\t\t// divisor for all architectures.\n\t\tcuraddr := addr + uint64(len(val))\n\t\tmaxsize := int(alignAddr(int64(curaddr+1), 1024) - int64(curaddr))\n\t\tsize := min(len(buf), maxsize)\n\n\t\t_, err := mem.ReadMemory(buf[:size], curaddr)\n\t\tif err != nil {\n\t\t\treturn \"\", false, fmt.Errorf(\"could not read string at %#v due to %s\", addr, err)\n\t\t}\n\n\t\tdone := false\n\t\tfor i := 0; i < size; i++ {\n\t\t\tif buf[i] == 0 {\n\t\t\t\tdone = true\n\t\t\t\tsize = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tval = val[:len(val)+size]\n\t\tbuf = buf[size:]\n\t\tif done {\n\t\t\treturn string(val), true, nil\n\t\t}\n\t}\n\n\treturn string(val), false, nil\n}\n\nconst (\n\tsliceArrayFieldName = \"array\"\n\tsliceLenFieldName   = \"len\"\n\tsliceCapFieldName   = \"cap\"\n)\n\nfunc (v *Variable) loadSliceInfo(t *godwarf.SliceType) {\n\tv.mem = cacheMemory(v.mem, v.Addr, int(t.Size()))\n\n\tvar err error\n\tfor _, f := range t.Field {\n\t\tswitch f.Name {\n\t\tcase sliceArrayFieldName:\n\t\t\tvar base uint64\n\t\t\tbase, err = readUintRaw(v.mem, uint64(int64(v.Addr)+f.ByteOffset), f.Type.Size())\n\t\t\tif err == nil {\n\t\t\t\tv.Base = base\n\t\t\t\t// Dereference array type to get value type\n\t\t\t\tptrType, ok := f.Type.(*godwarf.PtrType)\n\t\t\t\tif !ok {\n\t\t\t\t\t//lint:ignore ST1005 backwards compatibility\n\t\t\t\t\tv.Unreadable = fmt.Errorf(\"Invalid type %s in slice array\", f.Type)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tv.fieldType = ptrType.Type\n\t\t\t}\n\t\tcase sliceLenFieldName:\n\t\t\tlstrAddr, _ := v.toField(f)\n\t\t\tlstrAddr.loadValue(loadSingleValue)\n\t\t\terr = lstrAddr.Unreadable\n\t\t\tif err == nil {\n\t\t\t\tv.Len, _ = constant.Int64Val(lstrAddr.Value)\n\t\t\t}\n\t\tcase sliceCapFieldName:\n\t\t\tcstrAddr, _ := v.toField(f)\n\t\t\tcstrAddr.loadValue(loadSingleValue)\n\t\t\terr = cstrAddr.Unreadable\n\t\t\tif err == nil {\n\t\t\t\tv.Cap, _ = constant.Int64Val(cstrAddr.Value)\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tv.Unreadable = err\n\t\t\treturn\n\t\t}\n\t}\n\n\tif v.Addr == fakeAddressUnresolv && v.fieldType == nil {\n\t\treturn\n\t}\n\n\tv.stride = v.fieldType.Size()\n\tif t, ok := v.fieldType.(*godwarf.PtrType); ok {\n\t\tv.stride = t.ByteSize\n\t}\n}\n\n// loadChanInfo loads the buffer size of the channel and changes the type of\n// the buf field from unsafe.Pointer to an array of the correct type.\nfunc (v *Variable) loadChanInfo() {\n\tchanType, ok := v.RealType.(*godwarf.ChanType)\n\tif !ok {\n\t\tv.Unreadable = errors.New(\"bad channel type\")\n\t\treturn\n\t}\n\tsv := v.clone()\n\tsv.RealType = godwarf.ResolveTypedef(&(chanType.TypedefType))\n\tsv = sv.maybeDereference()\n\tif sv.Unreadable != nil || sv.Addr == 0 {\n\t\treturn\n\t}\n\tv.Base = sv.Addr\n\tstructType, ok := sv.DwarfType.(*godwarf.StructType)\n\tif !ok {\n\t\tv.Unreadable = errors.New(\"bad channel type\")\n\t\treturn\n\t}\n\n\tlenAddr, _ := sv.toField(structType.Field[1])\n\tlenAddr.loadValue(loadSingleValue)\n\tif lenAddr.Unreadable != nil {\n\t\tv.Unreadable = fmt.Errorf(\"unreadable length: %v\", lenAddr.Unreadable)\n\t\treturn\n\t}\n\tchanLen, _ := constant.Uint64Val(lenAddr.Value)\n\n\tnewStructType := &godwarf.StructType{}\n\t*newStructType = *structType\n\tnewStructType.Field = make([]*godwarf.StructField, len(structType.Field))\n\n\tfor i := range structType.Field {\n\t\tfield := &godwarf.StructField{}\n\t\t*field = *structType.Field[i]\n\t\tif field.Name == \"buf\" {\n\t\t\tfield.Type = pointerTo(fakeArrayType(chanLen, chanType.ElemType), v.bi.Arch)\n\t\t}\n\t\tnewStructType.Field[i] = field\n\t}\n\n\tv.RealType = &godwarf.ChanType{\n\t\tTypedefType: godwarf.TypedefType{\n\t\t\tCommonType: chanType.TypedefType.CommonType,\n\t\t\tType:       pointerTo(newStructType, v.bi.Arch),\n\t\t},\n\t\tElemType: chanType.ElemType,\n\t}\n}\n\nfunc (v *Variable) loadArrayValues(recurseLevel int, cfg LoadConfig) {\n\tif v.Unreadable != nil {\n\t\treturn\n\t}\n\tif v.Len < 0 {\n\t\t//lint:ignore ST1005 backwards compatibility\n\t\tv.Unreadable = errors.New(\"Negative array length\")\n\t\treturn\n\t}\n\tif v.Base == 0 && v.Len > 0 {\n\t\tv.Unreadable = errors.New(\"non-zero length array with nil base\")\n\t\treturn\n\t}\n\n\tcount := v.Len\n\t// Cap number of elements\n\tif (v.Flags&variableTrustLen == 0) && (count > int64(cfg.MaxArrayValues)) {\n\t\tcount = int64(cfg.MaxArrayValues)\n\t}\n\tif v.Base+uint64(v.stride*count) < v.Base {\n\t\tv.Unreadable = fmt.Errorf(\"bad array base address %#x\", v.Base)\n\t}\n\n\tif v.stride < maxArrayStridePrefetch {\n\t\tv.mem = cacheMemory(v.mem, v.Base, int(v.stride*count))\n\t}\n\n\terrcount := 0\n\n\tmem := v.mem\n\tif v.Kind != reflect.Array {\n\t\tmem = DereferenceMemory(mem)\n\t}\n\n\tfor i := int64(0); i < count; i++ {\n\t\tfieldvar := v.newVariable(\"\", uint64(int64(v.Base)+(i*v.stride)), v.fieldType, mem)\n\t\tfieldvar.loadValueInternal(recurseLevel+1, cfg)\n\n\t\tif fieldvar.Unreadable != nil {\n\t\t\terrcount++\n\t\t}\n\n\t\tv.Children = append(v.Children, *fieldvar)\n\t\tif errcount > maxErrCount {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc (v *Variable) readComplex(size int64) {\n\tvar fs int64\n\tswitch size {\n\tcase 8:\n\t\tfs = 4\n\tcase 16:\n\t\tfs = 8\n\tdefault:\n\t\tv.Unreadable = fmt.Errorf(\"invalid size (%d) for complex type\", size)\n\t\treturn\n\t}\n\n\tftyp := godwarf.FakeBasicType(\"float\", int(fs*8))\n\n\trealvar := v.newVariable(\"real\", v.Addr, ftyp, v.mem)\n\timagvar := v.newVariable(\"imaginary\", v.Addr+uint64(fs), ftyp, v.mem)\n\trealvar.loadValue(loadSingleValue)\n\timagvar.loadValue(loadSingleValue)\n\tv.Value = constant.BinaryOp(realvar.Value, token.ADD, constant.MakeImag(imagvar.Value))\n}\n\nfunc (v *Variable) writeComplex(real, imag float64, size int64) error {\n\terr := v.writeFloatRaw(real, size/2)\n\tif err != nil {\n\t\treturn err\n\t}\n\timagaddr := *v\n\timagaddr.Addr += uint64(size / 2)\n\treturn imagaddr.writeFloatRaw(imag, size/2)\n}\n\nfunc readIntRaw(mem MemoryReadWriter, addr uint64, size int64) (int64, error) {\n\tvar n int64\n\n\tval := make([]byte, int(size))\n\t_, err := mem.ReadMemory(val, addr)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tswitch size {\n\tcase 1:\n\t\tn = int64(int8(val[0]))\n\tcase 2:\n\t\tn = int64(int16(binary.LittleEndian.Uint16(val)))\n\tcase 4:\n\t\tn = int64(int32(binary.LittleEndian.Uint32(val)))\n\tcase 8:\n\t\tn = int64(binary.LittleEndian.Uint64(val))\n\t}\n\n\treturn n, nil\n}\n\nfunc (v *Variable) writeUint(value uint64, size int64) error {\n\tval := make([]byte, size)\n\n\tswitch size {\n\tcase 1:\n\t\tval[0] = byte(value)\n\tcase 2:\n\t\tbinary.LittleEndian.PutUint16(val, uint16(value))\n\tcase 4:\n\t\tbinary.LittleEndian.PutUint32(val, uint32(value))\n\tcase 8:\n\t\tbinary.LittleEndian.PutUint64(val, value)\n\t}\n\n\t_, err := v.mem.WriteMemory(v.Addr, val)\n\treturn err\n}\n\nfunc readUintRaw(mem MemoryReadWriter, addr uint64, size int64) (uint64, error) {\n\tvar n uint64\n\n\tval := make([]byte, int(size))\n\t_, err := mem.ReadMemory(val, addr)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tswitch size {\n\tcase 1:\n\t\tn = uint64(val[0])\n\tcase 2:\n\t\tn = uint64(binary.LittleEndian.Uint16(val))\n\tcase 4:\n\t\tn = uint64(binary.LittleEndian.Uint32(val))\n\tcase 8:\n\t\tn = binary.LittleEndian.Uint64(val)\n\t}\n\n\treturn n, nil\n}\n\nfunc (v *Variable) readFloatRaw(size int64) (float64, error) {\n\tval := make([]byte, int(size))\n\t_, err := v.mem.ReadMemory(val, v.Addr)\n\tif err != nil {\n\t\treturn 0.0, err\n\t}\n\tbuf := bytes.NewBuffer(val)\n\n\tswitch size {\n\tcase 4:\n\t\tn := float32(0)\n\t\tbinary.Read(buf, binary.LittleEndian, &n)\n\t\treturn float64(n), nil\n\tcase 8:\n\t\tn := float64(0)\n\t\tbinary.Read(buf, binary.LittleEndian, &n)\n\t\treturn n, nil\n\t}\n\n\treturn 0.0, errors.New(\"could not read float\")\n}\n\nfunc (v *Variable) writeFloatRaw(f float64, size int64) error {\n\tbuf := bytes.NewBuffer(make([]byte, 0, size))\n\n\tswitch size {\n\tcase 4:\n\t\tn := float32(f)\n\t\tbinary.Write(buf, binary.LittleEndian, n)\n\tcase 8:\n\t\tn := f\n\t\tbinary.Write(buf, binary.LittleEndian, n)\n\t}\n\n\t_, err := v.mem.WriteMemory(v.Addr, buf.Bytes())\n\treturn err\n}\n\nfunc (v *Variable) writeBool(value bool) error {\n\tval := []byte{0}\n\tval[0] = *(*byte)(unsafe.Pointer(&value))\n\t_, err := v.mem.WriteMemory(v.Addr, val)\n\treturn err\n}\n\nfunc (v *Variable) writeZero() error {\n\tval := make([]byte, v.RealType.Size())\n\t_, err := v.mem.WriteMemory(v.Addr, val)\n\treturn err\n}\n\n// writeEmptyInterface writes the empty interface of type typeAddr and data as the data field.\nfunc (v *Variable) writeEmptyInterface(typeAddr uint64, data *Variable) error {\n\tdstType, dstData, _ := v.readInterface()\n\tif v.Unreadable != nil {\n\t\treturn v.Unreadable\n\t}\n\tdstType.writeUint(typeAddr, dstType.RealType.Size())\n\tdstData.writeCopy(data)\n\treturn nil\n}\n\nfunc (v *Variable) writeSlice(len, cap int64, base uint64) error {\n\tfor _, f := range v.RealType.(*godwarf.SliceType).Field {\n\t\tswitch f.Name {\n\t\tcase sliceArrayFieldName:\n\t\t\tarrv, _ := v.toField(f)\n\t\t\tif err := arrv.writeUint(base, arrv.RealType.Size()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase sliceLenFieldName:\n\t\t\tlenv, _ := v.toField(f)\n\t\t\tif err := lenv.writeUint(uint64(len), lenv.RealType.Size()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase sliceCapFieldName:\n\t\t\tcapv, _ := v.toField(f)\n\t\t\tif err := capv.writeUint(uint64(cap), capv.RealType.Size()); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (v *Variable) writeString(len, base uint64) error {\n\twritePointer(v.bi, v.mem, v.Addr, base)\n\twritePointer(v.bi, v.mem, v.Addr+uint64(v.bi.Arch.PtrSize()), len)\n\treturn nil\n}\n\nfunc (v *Variable) writeCopy(srcv *Variable) error {\n\tbuf := make([]byte, srcv.RealType.Size())\n\t_, err := srcv.mem.ReadMemory(buf, srcv.Addr)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = v.mem.WriteMemory(v.Addr, buf)\n\treturn err\n}\n\nfunc (v *Variable) loadFunctionPtr(recurseLevel int, cfg LoadConfig) {\n\t// dereference pointer to find function pc\n\tv.closureAddr = v.funcvalAddr()\n\tif v.Unreadable != nil {\n\t\treturn\n\t}\n\tif v.closureAddr == 0 {\n\t\tv.Base = 0\n\t\tv.Value = constant.MakeString(\"\")\n\t\treturn\n\t}\n\n\tval, err := readUintRaw(v.mem, v.closureAddr, int64(v.bi.Arch.PtrSize()))\n\tif err != nil {\n\t\tv.Unreadable = err\n\t\treturn\n\t}\n\n\tv.Base = val\n\tfn := v.bi.PCToFunc(v.Base)\n\tif fn == nil {\n\t\tv.Unreadable = fmt.Errorf(\"could not find function for %#v\", v.Base)\n\t\treturn\n\t}\n\n\tv.Value = constant.MakeString(fn.Name)\n\tcst := fn.extra(v.bi).closureStructType\n\tv.Len = int64(len(cst.Field))\n\n\tif recurseLevel <= cfg.MaxVariableRecurse {\n\t\tv2 := v.newVariable(\"\", v.closureAddr, cst, v.mem)\n\t\tv2.loadValueInternal(recurseLevel, cfg)\n\t\tv.Children = v2.Children\n\t}\n}\n\n// funcvalAddr reads the address of the funcval contained in a function variable.\nfunc (v *Variable) funcvalAddr() uint64 {\n\tval, err := readUintRaw(v.mem, v.Addr, int64(v.bi.Arch.PtrSize()))\n\tif err != nil {\n\t\tv.Unreadable = err\n\t\treturn 0\n\t}\n\treturn val\n}\n\nfunc (v *Variable) loadMap(recurseLevel int, cfg LoadConfig) {\n\tit := v.mapIterator(uint64(cfg.MaxMapBuckets))\n\tif it == nil {\n\t\treturn\n\t}\n\n\tif v.Len == 0 || int64(v.mapSkip) >= v.Len || cfg.MaxArrayValues == 0 {\n\t\treturn\n\t}\n\n\tfor skip := 0; skip < v.mapSkip; skip++ {\n\t\tif ok := it.next(); !ok {\n\t\t\tv.Unreadable = errors.New(\"map index out of bounds\")\n\t\t\treturn\n\t\t}\n\t}\n\n\tcount := 0\n\terrcount := 0\n\tfor it.next() {\n\t\tkey := it.key()\n\t\tval := it.value()\n\t\tkey.loadValueInternal(recurseLevel+1, cfg)\n\t\tval.loadValueInternal(recurseLevel+1, cfg)\n\t\tif key.Unreadable != nil || val.Unreadable != nil {\n\t\t\terrcount++\n\t\t}\n\t\tv.Children = append(v.Children, *key, *val)\n\t\tcount++\n\t\tif errcount > maxErrCount {\n\t\t\tbreak\n\t\t}\n\t\tif count >= cfg.MaxArrayValues || int64(count) >= v.Len {\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunc (v *Variable) readInterface() (_type, data *Variable, isnil bool) {\n\t// An interface variable is implemented either by a runtime.iface\n\t// struct or a runtime.eface struct. The difference being that empty\n\t// interfaces (i.e. \"interface {}\") are represented by runtime.eface\n\t// and non-empty interfaces by runtime.iface.\n\t//\n\t// For both runtime.ifaces and runtime.efaces the data is stored in v.data\n\t//\n\t// The concrete type however is stored in v.tab._type for non-empty\n\t// interfaces and in v._type for empty interfaces.\n\t//\n\t// For nil empty interface variables _type will be nil, for nil\n\t// non-empty interface variables tab will be nil\n\t//\n\t// In either case the _type field is a pointer to a runtime._type struct.\n\t//\n\t// The following code works for both runtime.iface and runtime.eface.\n\n\tv.mem = cacheMemory(v.mem, v.Addr, int(v.RealType.Size()))\n\n\tityp := godwarf.ResolveTypedef(&v.RealType.(*godwarf.InterfaceType).TypedefType).(*godwarf.StructType)\n\n\t// +rtype -field iface.tab *itab|*internal/abi.ITab\n\t// +rtype -field iface.data unsafe.Pointer\n\t// +rtype -field eface._type *_type|*internal/abi.Type\n\t// +rtype -field eface.data unsafe.Pointer\n\n\tfor _, f := range ityp.Field {\n\t\tswitch f.Name {\n\t\tcase \"tab\": // for runtime.iface\n\t\t\ttab, _ := v.toField(f) // +rtype *itab|*internal/abi.ITab\n\t\t\ttab = tab.maybeDereference()\n\t\t\tisnil = tab.Addr == 0\n\t\t\tif !isnil {\n\t\t\t\tvar err error\n\t\t\t\t_type, err = tab.structField(\"Type\") // +rtype *internal/abi.Type\n\t\t\t\tif err != nil {\n\t\t\t\t\t_type, err = tab.structField(\"_type\") // +rtype *_type|*internal/abi.Type\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tv.Unreadable = fmt.Errorf(\"invalid interface type: %v\", err)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"_type\": // for runtime.eface\n\t\t\t_type, _ = v.toField(f)\n\t\t\tisnil = _type.maybeDereference().Addr == 0\n\t\tcase \"data\":\n\t\t\tdata, _ = v.toField(f)\n\t\t}\n\t}\n\treturn\n}\n\nfunc (v *Variable) loadInterface(recurseLevel int, loadData bool, cfg LoadConfig) {\n\t_type, data, isnil := v.readInterface()\n\n\tif isnil {\n\t\t// interface to nil\n\t\tdata = data.maybeDereference()\n\t\tv.Children = []Variable{*data}\n\t\tif loadData {\n\t\t\tv.Children[0].loadValueInternal(recurseLevel, cfg)\n\t\t}\n\t\treturn\n\t}\n\n\tif data == nil {\n\t\tv.Unreadable = errors.New(\"invalid interface type\")\n\t\treturn\n\t}\n\n\tmds, err := _type.bi.getModuleData(_type.mem)\n\tif err != nil {\n\t\tv.Unreadable = fmt.Errorf(\"error loading module data: %v\", err)\n\t\treturn\n\t}\n\n\ttyp, directIface, err := RuntimeTypeToDIE(_type, data.Addr, mds)\n\tif err != nil {\n\t\tv.Unreadable = err\n\t\treturn\n\t}\n\n\tderef := false\n\tif !directIface {\n\t\trealtyp := godwarf.ResolveTypedef(typ)\n\t\tif _, isptr := realtyp.(*godwarf.PtrType); !isptr {\n\t\t\ttyp = pointerTo(typ, v.bi.Arch)\n\t\t\tderef = true\n\t\t}\n\t}\n\n\tdata = data.newVariable(\"data\", data.Addr, typ, data.mem)\n\tif deref {\n\t\tdata = data.maybeDereference()\n\t\tdata.Name = \"data\"\n\t}\n\n\tv.Children = []Variable{*data}\n\tif loadData && recurseLevel <= cfg.MaxVariableRecurse {\n\t\tv.Children[0].loadValueInternal(recurseLevel, cfg)\n\t} else {\n\t\tv.Children[0].OnlyAddr = true\n\t}\n}\n\n// ConstDescr describes the value of v using constants.\nfunc (v *Variable) ConstDescr() string {\n\tif v.bi == nil || (v.Flags&VariableConstant != 0) {\n\t\treturn \"\"\n\t}\n\tctyp := v.bi.consts.Get(v.DwarfType)\n\tif ctyp == nil {\n\t\treturn \"\"\n\t}\n\tif typename := v.DwarfType.Common().Name; !strings.Contains(typename, \".\") || strings.HasPrefix(typename, \"C.\") {\n\t\t// only attempt to use constants for user defined type, otherwise every\n\t\t// int variable with value 1 will be described with io.SeekCurrent and other\n\t\t// similar problems.\n\t\treturn \"\"\n\t}\n\n\tswitch v.Kind {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tfallthrough\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tn, _ := constant.Int64Val(v.Value)\n\t\treturn ctyp.describe(n)\n\t}\n\treturn \"\"\n}\n\n// registerVariableTypeConv implements type conversions for CPU register variables (REGNAME.int8, etc)\nfunc (v *Variable) registerVariableTypeConv(newtyp string) (*Variable, error) {\n\tvar n int = 0\n\tfor i := 0; i < len(v.reg.Bytes); i += n {\n\t\tvar child *Variable\n\t\tswitch newtyp {\n\t\tcase \"int8\":\n\t\t\tchild = newConstant(constant.MakeInt64(int64(int8(v.reg.Bytes[i]))), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Int8\n\t\t\tn = 1\n\t\tcase \"int16\":\n\t\t\tchild = newConstant(constant.MakeInt64(int64(int16(binary.LittleEndian.Uint16(v.reg.Bytes[i:])))), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Int16\n\t\t\tn = 2\n\t\tcase \"int32\":\n\t\t\tchild = newConstant(constant.MakeInt64(int64(int32(binary.LittleEndian.Uint32(v.reg.Bytes[i:])))), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Int32\n\t\t\tn = 4\n\t\tcase \"int64\":\n\t\t\tchild = newConstant(constant.MakeInt64(int64(binary.LittleEndian.Uint64(v.reg.Bytes[i:]))), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Int64\n\t\t\tn = 8\n\t\tcase \"uint8\":\n\t\t\tchild = newConstant(constant.MakeUint64(uint64(v.reg.Bytes[i])), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Uint8\n\t\t\tn = 1\n\t\tcase \"uint16\":\n\t\t\tchild = newConstant(constant.MakeUint64(uint64(binary.LittleEndian.Uint16(v.reg.Bytes[i:]))), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Uint16\n\t\t\tn = 2\n\t\tcase \"uint32\":\n\t\t\tchild = newConstant(constant.MakeUint64(uint64(binary.LittleEndian.Uint32(v.reg.Bytes[i:]))), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Uint32\n\t\t\tn = 4\n\t\tcase \"uint64\":\n\t\t\tchild = newConstant(constant.MakeUint64(binary.LittleEndian.Uint64(v.reg.Bytes[i:])), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Uint64\n\t\t\tn = 8\n\t\tcase \"float32\":\n\t\t\ta := binary.LittleEndian.Uint32(v.reg.Bytes[i:])\n\t\t\tx := *(*float32)(unsafe.Pointer(&a))\n\t\t\tchild = newConstant(constant.MakeFloat64(float64(x)), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Float32\n\t\t\tn = 4\n\t\tcase \"float64\":\n\t\t\ta := binary.LittleEndian.Uint64(v.reg.Bytes[i:])\n\t\t\tx := *(*float64)(unsafe.Pointer(&a))\n\t\t\tchild = newConstant(constant.MakeFloat64(x), v.bi, v.mem)\n\t\t\tchild.Kind = reflect.Float64\n\t\t\tn = 8\n\t\tdefault:\n\t\t\tif n == 0 {\n\t\t\t\tfor _, pfx := range []string{\"uint\", \"int\"} {\n\t\t\t\t\tif strings.HasPrefix(newtyp, pfx) {\n\t\t\t\t\t\tn, _ = strconv.Atoi(newtyp[len(pfx):])\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif n == 0 || bits.OnesCount64(uint64(n)) != 1 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"unknown CPU register type conversion to %q\", newtyp)\n\t\t\t\t}\n\t\t\t\tn = n / 8\n\t\t\t}\n\t\t\tchild = newConstant(constant.MakeString(fmt.Sprintf(\"%x\", v.reg.Bytes[i:][:n])), v.bi, v.mem)\n\t\t}\n\t\tv.Children = append(v.Children, *child)\n\t}\n\n\tv.loaded = true\n\tv.Kind = reflect.Array\n\tv.Len = int64(len(v.Children))\n\tv.Base = fakeAddressUnresolv\n\tv.DwarfType = fakeArrayType(uint64(len(v.Children)), &godwarf.VoidType{CommonType: godwarf.CommonType{ByteSize: int64(n)}})\n\tv.RealType = v.DwarfType\n\treturn v, nil\n}\n\nfunc isCgoType(bi *BinaryInfo, typ godwarf.Type) bool {\n\tcu := bi.Images[typ.Common().Index].findCompileUnitForOffset(typ.Common().Offset)\n\tif cu == nil {\n\t\treturn false\n\t}\n\treturn !cu.isgo\n}\n\nfunc isCgoCharPtr(bi *BinaryInfo, typ *godwarf.PtrType) bool {\n\tif !isCgoType(bi, typ) {\n\t\treturn false\n\t}\n\n\tfieldtyp := typ.Type\nresolveQualTypedef:\n\tfor {\n\t\tswitch t := fieldtyp.(type) {\n\t\tcase *godwarf.QualType:\n\t\t\tfieldtyp = t.Type\n\t\tcase *godwarf.TypedefType:\n\t\t\tfieldtyp = t.Type\n\t\tdefault:\n\t\t\tbreak resolveQualTypedef\n\t\t}\n\t}\n\n\t_, ischar := fieldtyp.(*godwarf.CharType)\n\t_, isuchar := fieldtyp.(*godwarf.UcharType)\n\treturn ischar || isuchar\n}\n\nfunc (cm constantsMap) Get(typ godwarf.Type) *constantType {\n\tctyp := cm[dwarfRef{typ.Common().Index, typ.Common().Offset}]\n\tif ctyp == nil {\n\t\treturn nil\n\t}\n\ttypepkg := packageName(typ.String()) + \".\"\n\tif !ctyp.initialized {\n\t\tctyp.initialized = true\n\t\tslices.SortFunc(ctyp.values, func(a, b constantValue) int {\n\t\t\treturn cmp.Compare(a.value, b.value)\n\t\t})\n\t\tfor i := range ctyp.values {\n\t\t\tctyp.values[i].name = strings.TrimPrefix(ctyp.values[i].name, typepkg)\n\t\t\tif bits.OnesCount64(uint64(ctyp.values[i].value)) == 1 {\n\t\t\t\tctyp.values[i].singleBit = true\n\t\t\t}\n\t\t}\n\t}\n\treturn ctyp\n}\n\nfunc (ctyp *constantType) describe(n int64) string {\n\tfor _, val := range ctyp.values {\n\t\tif val.value == n {\n\t\t\treturn val.name\n\t\t}\n\t}\n\n\tif n == 0 {\n\t\treturn \"\"\n\t}\n\n\t// If all the values for this constant only have one bit set we try to\n\t// represent the value as a bitwise or of constants.\n\n\tfields := []string{}\n\tfor _, val := range ctyp.values {\n\t\tif !val.singleBit {\n\t\t\tcontinue\n\t\t}\n\t\tif n&val.value != 0 {\n\t\t\tfields = append(fields, val.name)\n\t\t\tn = n & ^val.value\n\t\t}\n\t}\n\tif n == 0 {\n\t\treturn strings.Join(fields, \"|\")\n\t}\n\treturn \"\"\n}\n\ntype variablesByDepthAndDeclLine struct {\n\tvars   []*Variable\n\tdepths []int\n}\n\nfunc (v *variablesByDepthAndDeclLine) Len() int { return len(v.vars) }\n\nfunc (v *variablesByDepthAndDeclLine) Less(i int, j int) bool {\n\tif v.depths[i] == v.depths[j] {\n\t\treturn v.vars[i].DeclLine < v.vars[j].DeclLine\n\t}\n\treturn v.depths[i] < v.depths[j]\n}\n\nfunc (v *variablesByDepthAndDeclLine) Swap(i int, j int) {\n\tv.depths[i], v.depths[j] = v.depths[j], v.depths[i]\n\tv.vars[i], v.vars[j] = v.vars[j], v.vars[i]\n}\n\nconst (\n\ttimeTimeWallHasMonotonicBit uint64 = (1 << 63) // hasMonotonic bit of time.Time.wall\n\n\t//lint:ignore ST1011 addSeconds is the name of the relevant function\n\tmaxAddSeconds time.Duration = (time.Duration(^uint64(0)>>1) / time.Second) * time.Second // maximum number of seconds that can be added with (time.Time).Add, measured in nanoseconds\n\n\twallNsecShift = 30 // size of the nanoseconds field of time.Time.wall\n\n\tunixTimestampOfWallEpoch = -2682288000 // number of seconds between the unix epoch and the epoch for time.Time.wall (1 jan 1885)\n)\n\n// formatTime writes formatted value of a time.Time to v.Value.\n// See $GOROOT/src/time/time.go for a description of time.Time internals.\nfunc (v *Variable) formatTime() {\n\twallv := v.fieldVariable(\"wall\")\n\textv := v.fieldVariable(\"ext\")\n\tif wallv == nil || extv == nil || wallv.Unreadable != nil || extv.Unreadable != nil || wallv.Value == nil || extv.Value == nil {\n\t\treturn\n\t}\n\n\tvar loc *time.Location\n\n\tlocv := v.fieldVariable(\"loc\")\n\tif locv != nil && locv.Unreadable == nil {\n\t\tnamev := locv.loadFieldNamed(\"name\")\n\t\tif namev != nil && namev.Unreadable == nil {\n\t\t\tname := constant.StringVal(namev.Value)\n\t\t\tloc, _ = time.LoadLocation(name)\n\t\t}\n\t}\n\n\twall, _ := constant.Uint64Val(wallv.Value)\n\text, _ := constant.Int64Val(extv.Value)\n\n\thasMonotonic := (wall & timeTimeWallHasMonotonicBit) != 0\n\tif hasMonotonic {\n\t\t// the 33-bit field of wall holds a 33-bit unsigned wall\n\t\t// seconds since Jan 1 year 1885, and ext holds a signed 64-bit monotonic\n\t\t// clock reading, nanoseconds since process start\n\t\tsec := int64(wall << 1 >> (wallNsecShift + 1)) // seconds since 1 Jan 1885\n\t\tt := time.Unix(sec+unixTimestampOfWallEpoch, 0).UTC()\n\t\tif loc != nil {\n\t\t\tt = t.In(loc)\n\t\t}\n\t\tv.Value = constant.MakeString(fmt.Sprintf(\"%s, %+d\", t.Format(time.RFC3339), ext))\n\t} else {\n\t\t// the full signed 64-bit wall seconds since Jan 1 year 1 is stored in ext\n\t\tvar t time.Time\n\t\tif ext > int64(maxAddSeconds/time.Second)*1000 {\n\t\t\t// avoid doing the add loop below if it will take too much time\n\t\t\treturn\n\t\t}\n\t\tfor ext > int64(maxAddSeconds/time.Second) {\n\t\t\tt = t.Add(maxAddSeconds)\n\t\t\text -= int64(maxAddSeconds / time.Second)\n\t\t}\n\t\tt = t.Add(time.Duration(ext) * time.Second)\n\t\tif loc != nil {\n\t\t\tt = t.In(loc)\n\t\t}\n\t\tv.Value = constant.MakeString(t.Format(time.RFC3339))\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/variables_fuzz_test.go",
    "content": "package proc_test\n\nimport (\n\t\"encoding/binary\"\n\t\"encoding/gob\"\n\t\"flag\"\n\t\"os\"\n\t\"os/exec\"\n\t\"sort\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/core\"\n\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nvar fuzzEvalExpressionSetup = flag.Bool(\"fuzzevalexpressionsetup\", false, \"Performs setup for FuzzEvalExpression\")\n\nconst (\n\tfuzzExecutable = \"testdata/fuzzexe\"\n\tfuzzCoredump   = \"testdata/fuzzcoredump\"\n\tfuzzInfoPath   = \"testdata/fuzzinfo\"\n)\n\ntype fuzzInfo struct {\n\tLoc       *proc.Location\n\tMemchunks []memchunk\n\tRegs      op.DwarfRegisters\n\tFuzzbuf   []byte\n}\n\n// FuzzEvalExpression fuzzes the variables loader and expression evaluator of Delve.\n// To run it, execute the setup first:\n//\n//\tgo test -run FuzzEvalExpression -fuzzevalexpressionsetup\n//\n// this will create some required files in testdata, the fuzzer can then be run with:\n//\n//\tgo test -run NONE -fuzz FuzzEvalExpression -v -fuzzminimizetime=0\nfunc FuzzEvalExpression(f *testing.F) {\n\tif *fuzzEvalExpressionSetup {\n\t\tdoFuzzEvalExpressionSetup(f)\n\t}\n\t_, err := os.Stat(fuzzExecutable)\n\tif os.IsNotExist(err) {\n\t\tf.Skip(\"not setup\")\n\t}\n\tbi := proc.NewBinaryInfo(\"linux\", \"amd64\")\n\tassertNoError(bi.LoadBinaryInfo(fuzzExecutable, 0, nil), f, \"LoadBinaryInfo\")\n\tfh, err := os.Open(fuzzInfoPath)\n\tassertNoError(err, f, \"Open fuzzInfoPath\")\n\tdefer fh.Close()\n\tvar fi fuzzInfo\n\tgob.NewDecoder(fh).Decode(&fi)\n\tfi.Regs.ByteOrder = binary.LittleEndian\n\tfns, err := bi.FindFunction(\"main.main\")\n\tassertNoError(err, f, \"FindFunction main.main\")\n\tfi.Loc.Fn = fns[0]\n\tf.Add(fi.Fuzzbuf)\n\tf.Fuzz(func(t *testing.T, fuzzbuf []byte) {\n\t\tt.Log(\"fuzzbuf len\", len(fuzzbuf))\n\t\tmem := &core.SplicedMemory{}\n\n\t\t// can't work with shrunk input fuzzbufs provided by the fuzzer, resize it\n\t\t// so it is always at least the size we want.\n\t\tlastMemchunk := fi.Memchunks[len(fi.Memchunks)-1]\n\t\tfuzzbufsz := lastMemchunk.Idx + int(lastMemchunk.Sz)\n\t\tif fuzzbufsz > len(fuzzbuf) {\n\t\t\tnewfuzzbuf := make([]byte, fuzzbufsz)\n\t\t\tcopy(newfuzzbuf, fuzzbuf)\n\t\t\tfuzzbuf = newfuzzbuf\n\t\t}\n\n\t\tend := uint64(0)\n\n\t\tfor _, memchunk := range fi.Memchunks {\n\t\t\tif end != memchunk.Addr {\n\t\t\t\tmem.Add(&zeroReader{}, end, memchunk.Addr-end)\n\t\t\t}\n\t\t\tmem.Add(&offsetReader{fuzzbuf[memchunk.Idx:][:memchunk.Sz], memchunk.Addr}, memchunk.Addr, memchunk.Sz)\n\t\t\tend = memchunk.Addr + memchunk.Sz\n\t\t}\n\n\t\tscope := &proc.EvalScope{Location: *fi.Loc, Regs: fi.Regs, Mem: memoryReaderWithFailingWrites{mem}, BinInfo: bi}\n\t\tfor _, tc := range getEvalExpressionTestCases() {\n\t\t\t_, err := scope.EvalExpression(tc.name, pnormalLoadConfig)\n\t\t\tif err != nil {\n\t\t\t\tif strings.Contains(err.Error(), \"internal debugger error\") {\n\t\t\t\t\tpanic(err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc doFuzzEvalExpressionSetup(f *testing.F) {\n\tos.Mkdir(\"testdata\", 0700)\n\twithTestProcess(\"testvariables2\", f, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\texePath := fixture.Path\n\t\tassertNoError(grp.Continue(), f, \"Continue\")\n\t\tfh, err := os.Create(fuzzCoredump)\n\t\tassertNoError(err, f, \"Creating coredump\")\n\t\tvar state proc.DumpState\n\t\tp.Dump(fh, 0, &state)\n\t\tassertNoError(state.Err, f, \"Dump()\")\n\t\tout, err := exec.Command(\"cp\", exePath, fuzzExecutable).CombinedOutput()\n\t\tf.Log(string(out))\n\t\tassertNoError(err, f, \"cp\")\n\t})\n\n\t// 2. Open the core file and search for the correct goroutine\n\n\tcgrp, err := core.OpenCore(fuzzCoredump, fuzzExecutable, nil)\n\tc := cgrp.Selected\n\tassertNoError(err, f, \"OpenCore\")\n\tgs, _, err := proc.GoroutinesInfo(c, 0, 0)\n\tassertNoError(err, f, \"GoroutinesInfo\")\n\tfound := false\n\tfor _, g := range gs {\n\t\tif strings.Contains(g.UserCurrent().File, \"testvariables2\") {\n\t\t\tc.SwitchGoroutine(g)\n\t\t\tfound = true\n\t\t\tbreak\n\t\t}\n\t}\n\tif !found {\n\t\tf.Errorf(\"could not find testvariables2 goroutine\")\n\t}\n\n\t// 3. Run all the test cases on the core file, register which memory addresses are read\n\n\tframes, err := proc.GoroutineStacktrace(c, c.SelectedGoroutine(), 2, 0)\n\tassertNoError(err, f, \"Stacktrace\")\n\n\tmem := c.Memory()\n\tloc, _ := proc.ThreadLocation(c.CurrentThread())\n\ttmem := &tracingMem{make(map[uint64]int), mem}\n\n\tscope := &proc.EvalScope{Location: *loc, Regs: frames[0].Regs, Mem: tmem, BinInfo: c.BinInfo()}\n\n\tfor _, tc := range getEvalExpressionTestCases() {\n\t\tscope.EvalExpression(tc.name, pnormalLoadConfig)\n\t}\n\n\t// 4. Copy all the memory we read into a buffer to use as fuzz example (if\n\t// we try to use the whole core dump as fuzz example the Go fuzzer crashes)\n\n\tmemchunks, fuzzbuf := tmem.memoryReadsCondensed()\n\n\tfh, err := os.Create(fuzzInfoPath)\n\tassertNoError(err, f, \"os.Create\")\n\tframes[0].Regs.ByteOrder = nil\n\tloc.Fn = nil\n\tassertNoError(gob.NewEncoder(fh).Encode(fuzzInfo{\n\t\tLoc:       loc,\n\t\tMemchunks: memchunks,\n\t\tRegs:      frames[0].Regs,\n\t\tFuzzbuf:   fuzzbuf,\n\t}), f, \"Encode\")\n\tassertNoError(fh.Close(), f, \"Close\")\n}\n\ntype tracingMem struct {\n\tread map[uint64]int\n\tmem  proc.MemoryReadWriter\n}\n\nfunc (tmem *tracingMem) ReadMemory(b []byte, n uint64) (int, error) {\n\tif len(b) > tmem.read[n] {\n\t\ttmem.read[n] = len(b)\n\t}\n\treturn tmem.mem.ReadMemory(b, n)\n}\n\nfunc (tmem *tracingMem) WriteMemory(uint64, []byte) (int, error) {\n\tpanic(\"should not be called\")\n}\n\ntype memchunk struct {\n\tAddr, Sz uint64\n\tIdx      int\n}\n\nfunc (tmem *tracingMem) memoryReadsCondensed() ([]memchunk, []byte) {\n\tmemoryReads := make([]memchunk, 0, len(tmem.read))\n\tfor addr, sz := range tmem.read {\n\t\tmemoryReads = append(memoryReads, memchunk{addr, uint64(sz), 0})\n\t}\n\tsort.Slice(memoryReads, func(i, j int) bool { return memoryReads[i].Addr < memoryReads[j].Addr })\n\n\tmemoryReadsCondensed := make([]memchunk, 0, len(memoryReads))\n\tfor _, v := range memoryReads {\n\t\tif len(memoryReadsCondensed) != 0 {\n\t\t\tlast := &memoryReadsCondensed[len(memoryReadsCondensed)-1]\n\t\t\tif last.Addr+last.Sz >= v.Addr {\n\t\t\t\tend := v.Addr + v.Sz\n\t\t\t\tsz2 := end - last.Addr\n\t\t\t\tif sz2 > last.Sz {\n\t\t\t\t\tlast.Sz = sz2\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tmemoryReadsCondensed = append(memoryReadsCondensed, v)\n\t}\n\n\tfuzzbuf := []byte{}\n\tfor i := range memoryReadsCondensed {\n\t\tbuf := make([]byte, memoryReadsCondensed[i].Sz)\n\t\ttmem.mem.ReadMemory(buf, memoryReadsCondensed[i].Addr)\n\t\tmemoryReadsCondensed[i].Idx = len(fuzzbuf)\n\t\tfuzzbuf = append(fuzzbuf, buf...)\n\t}\n\n\treturn memoryReadsCondensed, fuzzbuf\n}\n\ntype offsetReader struct {\n\tbuf  []byte\n\taddr uint64\n}\n\nfunc (or *offsetReader) ReadMemory(buf []byte, addr uint64) (int, error) {\n\tcopy(buf, or.buf[addr-or.addr:][:len(buf)])\n\treturn len(buf), nil\n}\n\ntype memoryReaderWithFailingWrites struct {\n\tproc.MemoryReader\n}\n\nfunc (w memoryReaderWithFailingWrites) WriteMemory(uint64, []byte) (int, error) {\n\tpanic(\"should not be called\")\n}\n\ntype zeroReader struct{}\n\nfunc (*zeroReader) ReadMemory(b []byte, addr uint64) (int, error) {\n\tfor i := range b {\n\t\tb[i] = 0\n\t}\n\treturn len(b), nil\n}\n\nfunc (*zeroReader) WriteMemory(b []byte, addr uint64) (int, error) {\n\tpanic(\"should not be called\")\n}\n"
  },
  {
    "path": "pkg/proc/variables_test.go",
    "content": "package proc_test\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/service/api\"\n\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n)\n\nvar pnormalLoadConfig = proc.LoadConfig{\n\tFollowPointers:     true,\n\tMaxVariableRecurse: 1,\n\tMaxStringLen:       64,\n\tMaxArrayValues:     64,\n\tMaxStructFields:    -1,\n}\n\nvar pshortLoadConfig = proc.LoadConfig{\n\tMaxStringLen:    64,\n\tMaxStructFields: 3,\n}\n\ntype varTest struct {\n\tname         string\n\tpreserveName bool\n\tvalue        string\n\talternate    string\n\tvarType      string\n\terr          error\n}\n\nfunc matchStringOrPrefix(output, target string) bool {\n\tif strings.HasSuffix(target, \"…\") {\n\t\tprefix := target[:len(target)-len(\"…\")]\n\t\tb := strings.HasPrefix(output, prefix)\n\t\treturn b\n\t}\n\n\tif strings.HasPrefix(target, \"/\") && strings.HasSuffix(target, \"/\") {\n\t\trx := regexp.MustCompile(target[1 : len(target)-1])\n\t\treturn rx.MatchString(output)\n\t}\n\n\treturn output == target\n}\n\nfunc assertVariable(t testing.TB, variable *proc.Variable, expected varTest) {\n\tif expected.preserveName {\n\t\tif variable.Name != expected.name {\n\t\t\tt.Fatalf(\"Expected %s got %s\\n\", expected.name, variable.Name)\n\t\t}\n\t}\n\n\tcv := api.ConvertVar(variable)\n\n\tif cv.Type != expected.varType {\n\t\tt.Fatalf(\"Expected %s got %s (for variable %s)\\n\", expected.varType, cv.Type, expected.name)\n\t}\n\n\tif ss := cv.SinglelineString(); !matchStringOrPrefix(ss, expected.value) {\n\t\tt.Fatalf(\"Expected %#v got %#v (for variable %s)\\n\", expected.value, ss, expected.name)\n\t}\n}\n\nfunc evalScope(p *proc.Target) (*proc.EvalScope, error) {\n\tif testBackend != \"rr\" {\n\t\treturn proc.GoroutineScope(p, p.CurrentThread())\n\t}\n\tframe, err := findFirstNonRuntimeFrame(p)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn proc.FrameToScope(p, p.Memory(), nil, p.CurrentThread().ThreadID(), frame), nil\n}\n\nfunc evalVariableWithCfg(p *proc.Target, symbol string, cfg proc.LoadConfig) (*proc.Variable, error) {\n\tscope, err := evalScope(p)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn scope.EvalExpression(symbol, cfg)\n}\n\nfunc (tc *varTest) alternateVarTest() varTest {\n\tr := *tc\n\tr.value = r.alternate\n\treturn r\n}\n\nfunc setVariable(p *proc.Target, symbol, value string) error {\n\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn scope.SetVariable(symbol, value)\n}\n\nfunc multiLineVar(v *proc.Variable) string {\n\treturn api.ConvertVar(v).StringWithOptions(\"\", \"\", api.PrettyNewlines)\n}\n\nfunc TestVariableEvaluation(t *testing.T) {\n\tprotest.AllowRecording(t)\n\ttestcases := []struct {\n\t\tname        string\n\t\tst          reflect.Kind\n\t\tvalue       any\n\t\tlength, cap int64\n\t\tchildrenlen int\n\t}{\n\t\t{\"a1\", reflect.String, \"foofoofoofoofoofoo\", 18, 0, 0},\n\t\t{\"a11\", reflect.Array, nil, 3, 3, 3},\n\t\t{\"a12\", reflect.Slice, nil, 2, 2, 2},\n\t\t{\"a13\", reflect.Slice, nil, 3, 3, 3},\n\t\t{\"a2\", reflect.Int, int64(6), 0, 0, 0},\n\t\t{\"a3\", reflect.Float64, float64(7.23), 0, 0, 0},\n\t\t{\"a4\", reflect.Array, nil, 2, 2, 2},\n\t\t{\"a5\", reflect.Slice, nil, 5, 5, 5},\n\t\t{\"a6\", reflect.Struct, nil, 2, 0, 2},\n\t\t{\"a7\", reflect.Ptr, nil, 1, 0, 1},\n\t\t{\"a8\", reflect.Struct, nil, 2, 0, 2},\n\t\t{\"a9\", reflect.Ptr, nil, 1, 0, 1},\n\t\t{\"baz\", reflect.String, \"bazburzum\", 9, 0, 0},\n\t\t{\"neg\", reflect.Int, int64(-1), 0, 0, 0},\n\t\t{\"f32\", reflect.Float32, float64(float32(1.2)), 0, 0, 0},\n\t\t{\"c64\", reflect.Complex64, complex128(complex64(1 + 2i)), 0, 0, 0},\n\t\t{\"c128\", reflect.Complex128, complex128(2 + 3i), 0, 0, 0},\n\t\t{\"a6.Baz\", reflect.Int, int64(8), 0, 0, 0},\n\t\t{\"a7.Baz\", reflect.Int, int64(5), 0, 0, 0},\n\t\t{\"a8.Baz\", reflect.String, \"feh\", 3, 0, 0},\n\t\t{\"a8\", reflect.Struct, nil, 2, 0, 2},\n\t\t{\"i32\", reflect.Array, nil, 2, 2, 2},\n\t\t{\"b1\", reflect.Bool, true, 0, 0, 0},\n\t\t{\"b2\", reflect.Bool, false, 0, 0, 0},\n\t\t{\"f\", reflect.Func, \"main.barfoo\", 0, 0, 0},\n\t\t{\"ba\", reflect.Slice, nil, 200, 200, 64},\n\t}\n\n\twithTestProcess(\"testvariables\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\n\t\tfor _, tc := range testcases {\n\t\t\tv := evalVariable(p, t, tc.name)\n\n\t\t\tif v.Kind != tc.st {\n\t\t\t\tt.Fatalf(\"%s simple type: expected: %s got: %s\", tc.name, tc.st, v.Kind.String())\n\t\t\t}\n\t\t\tif v.Value == nil && tc.value != nil {\n\t\t\t\tt.Fatalf(\"%s value: expected: %v got: %v\", tc.name, tc.value, v.Value)\n\t\t\t} else {\n\t\t\t\tswitch v.Kind {\n\t\t\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\t\t\tx, _ := constant.Int64Val(v.Value)\n\t\t\t\t\tif y, ok := tc.value.(int64); !ok || x != y {\n\t\t\t\t\t\tt.Fatalf(\"%s value: expected: %v got: %v\", tc.name, tc.value, v.Value)\n\t\t\t\t\t}\n\t\t\t\tcase reflect.Float32, reflect.Float64:\n\t\t\t\t\tx, _ := constant.Float64Val(v.Value)\n\t\t\t\t\tif y, ok := tc.value.(float64); !ok || x != y {\n\t\t\t\t\t\tt.Fatalf(\"%s value: expected: %v got: %v\", tc.name, tc.value, v.Value)\n\t\t\t\t\t}\n\t\t\t\tcase reflect.Complex64, reflect.Complex128:\n\t\t\t\t\txr, _ := constant.Float64Val(constant.Real(v.Value))\n\t\t\t\t\txi, _ := constant.Float64Val(constant.Imag(v.Value))\n\t\t\t\t\tif y, ok := tc.value.(complex128); !ok || complex(xr, xi) != y {\n\t\t\t\t\t\tt.Fatalf(\"%s value: expected: %v got: %v\", tc.name, tc.value, v.Value)\n\t\t\t\t\t}\n\t\t\t\tcase reflect.String:\n\t\t\t\t\tif y, ok := tc.value.(string); !ok || constant.StringVal(v.Value) != y {\n\t\t\t\t\t\tt.Fatalf(\"%s value: expected: %v got: %v\", tc.name, tc.value, v.Value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif v.Len != tc.length {\n\t\t\t\tt.Fatalf(\"%s len: expected: %d got: %d\", tc.name, tc.length, v.Len)\n\t\t\t}\n\t\t\tif v.Cap != tc.cap {\n\t\t\t\tt.Fatalf(\"%s cap: expected: %d got: %d\", tc.name, tc.cap, v.Cap)\n\t\t\t}\n\t\t\tif len(v.Children) != tc.childrenlen {\n\t\t\t\tt.Fatalf(\"%s children len: expected %d got: %d\", tc.name, tc.childrenlen, len(v.Children))\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestVariableEvaluation2(t *testing.T) {\n\ttestcases := []varTest{\n\t\t{\"a1\", true, \"\\\"foofoofoofoofoofoo\\\"\", \"\", \"string\", nil},\n\t\t{\"a11\", true, \"[3]main.FooBar [{Baz: 1, Bur: \\\"a\\\"},{Baz: 2, Bur: \\\"b\\\"},{Baz: 3, Bur: \\\"c\\\"}]\", \"\", \"[3]main.FooBar\", nil},\n\t\t{\"a12\", true, \"[]main.FooBar len: 2, cap: 2, [{Baz: 4, Bur: \\\"d\\\"},{Baz: 5, Bur: \\\"e\\\"}]\", \"\", \"[]main.FooBar\", nil},\n\t\t{\"a13\", true, \"[]*main.FooBar len: 3, cap: 3, [*{Baz: 6, Bur: \\\"f\\\"},*{Baz: 7, Bur: \\\"g\\\"},*{Baz: 8, Bur: \\\"h\\\"}]\", \"\", \"[]*main.FooBar\", nil},\n\t\t{\"a2\", true, \"6\", \"10\", \"int\", nil},\n\t\t{\"a3\", true, \"7.23\", \"3.1\", \"float64\", nil},\n\t\t{\"a4\", true, \"[2]int [1,2]\", \"\", \"[2]int\", nil},\n\t\t{\"a5\", true, \"[]int len: 5, cap: 5, [1,2,3,4,5]\", \"\", \"[]int\", nil},\n\t\t{\"a6\", true, \"main.FooBar {Baz: 8, Bur: \\\"word\\\"}\", \"\", \"main.FooBar\", nil},\n\t\t{\"a7\", true, \"*main.FooBar {Baz: 5, Bur: \\\"strum\\\"}\", \"\", \"*main.FooBar\", nil},\n\t\t{\"a8\", true, \"main.FooBar2 {Bur: 10, Baz: \\\"feh\\\"}\", \"\", \"main.FooBar2\", nil},\n\t\t{\"a9\", true, \"*main.FooBar nil\", \"\", \"*main.FooBar\", nil},\n\t\t{\"baz\", true, \"\\\"bazburzum\\\"\", \"\", \"string\", nil},\n\t\t{\"neg\", true, \"-1\", \"-20\", \"int\", nil},\n\t\t{\"f32\", true, \"1.2\", \"1.1\", \"float32\", nil},\n\t\t{\"c64\", true, \"(1 + 2i)\", \"(4 + 5i)\", \"complex64\", nil},\n\t\t{\"c128\", true, \"(2 + 3i)\", \"(6.3 + 7i)\", \"complex128\", nil},\n\t\t{\"a6.Baz\", true, \"8\", \"20\", \"int\", nil},\n\t\t{\"a7.Baz\", true, \"5\", \"25\", \"int\", nil},\n\t\t{\"a8.Baz\", true, \"\\\"feh\\\"\", \"\", \"string\", nil},\n\t\t{\"a9.Baz\", true, \"nil\", \"\", \"int\", errors.New(\"a9 is nil\")},\n\t\t{\"a9.NonExistent\", true, \"nil\", \"\", \"int\", errors.New(\"a9 has no member NonExistent\")},\n\t\t{\"a8\", true, \"main.FooBar2 {Bur: 10, Baz: \\\"feh\\\"}\", \"\", \"main.FooBar2\", nil}, // reread variable after member\n\t\t{\"i32\", true, \"[2]int32 [1,2]\", \"\", \"[2]int32\", nil},\n\t\t{\"b1\", true, \"true\", \"false\", \"bool\", nil},\n\t\t{\"b2\", true, \"false\", \"true\", \"bool\", nil},\n\t\t{\"i8\", true, \"1\", \"2\", \"int8\", nil},\n\t\t{\"u16\", true, \"65535\", \"0\", \"uint16\", nil},\n\t\t{\"u32\", true, \"4294967295\", \"1\", \"uint32\", nil},\n\t\t{\"u64\", true, \"18446744073709551615\", \"2\", \"uint64\", nil},\n\t\t{\"u8\", true, \"255\", \"3\", \"uint8\", nil},\n\t\t{\"up\", true, \"5\", \"4\", \"uintptr\", nil},\n\t\t{\"f\", true, \"main.barfoo\", \"\", \"func()\", nil},\n\t\t{\"ba\", true, \"[]int len: 200, cap: 200, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+136 more]\", \"\", \"[]int\", nil},\n\t\t{\"ms\", true, \"main.Nest {Level: 0, Nest: *main.Nest {Level: 1, Nest: *(*main.Nest)(…\", \"\", \"main.Nest\", nil},\n\t\t{\"ms.Nest.Nest\", true, \"*main.Nest {Level: 2, Nest: *main.Nest {Level: 3, Nest: *(*main.Nest)(…\", \"\", \"*main.Nest\", nil},\n\t\t{\"ms.Nest.Nest.Nest.Nest.Nest\", true, \"*main.Nest nil\", \"\", \"*main.Nest\", nil},\n\t\t{\"ms.Nest.Nest.Nest.Nest.Nest.Nest\", true, \"\", \"\", \"*main.Nest\", errors.New(\"ms.Nest.Nest.Nest.Nest.Nest is nil\")},\n\t\t{\"main.p1\", true, \"10\", \"12\", \"int\", nil},\n\t\t{\"p1\", true, \"10\", \"13\", \"int\", nil},\n\t\t{\"NonExistent\", true, \"\", \"\", \"\", errors.New(\"could not find symbol value for NonExistent\")},\n\t}\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tassertNoError(err, t, \"Continue() returned an error\")\n\n\t\tfor _, tc := range testcases {\n\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\tif tc.err == nil {\n\t\t\t\tassertNoError(err, t, \"EvalVariable() returned an error\")\n\t\t\t\tassertVariable(t, variable, tc)\n\t\t\t} else {\n\t\t\t\tif err == nil {\n\t\t\t\t\tt.Fatalf(\"Expected error %s, got no error: %s\\n\", tc.err.Error(), api.ConvertVar(variable).SinglelineString())\n\t\t\t\t}\n\t\t\t\tif tc.err.Error() != err.Error() {\n\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif tc.alternate != \"\" && testBackend != \"rr\" {\n\t\t\t\tassertNoError(setVariable(p, tc.name, tc.alternate), t, \"SetVariable()\")\n\t\t\t\tvariable, err = evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\t\tassertNoError(err, t, \"EvalVariable()\")\n\t\t\t\tassertVariable(t, variable, tc.alternateVarTest())\n\n\t\t\t\tassertNoError(setVariable(p, tc.name, tc.value), t, \"SetVariable()\")\n\t\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\t\tassertNoError(err, t, \"EvalVariable()\")\n\t\t\t\tassertVariable(t, variable, tc)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestSetVariable(t *testing.T) {\n\tconst errorPrefix = \"ERROR:\"\n\tvar testcases = []struct {\n\t\tname     string\n\t\ttyp      string // type of <name>\n\t\tstartVal string // original value of <name>\n\t\texpr     string\n\t\tfinalVal string // new value of <name> after executing <name> = <expr>\n\t}{\n\t\t{\"b.ptr\", \"*main.A\", \"*main.A {val: 1337}\", \"nil\", \"*main.A nil\"},\n\t\t{\"m2\", \"map[int]*main.astruct\", \"map[int]*main.astruct [1: *{A: 10, B: 11}, ]\", \"nil\", \"map[int]*main.astruct nil\"},\n\t\t{\"fn1\", \"main.functype\", \"main.afunc\", \"nil\", \"nil\"},\n\t\t{\"ch1\", \"chan int\", \"chan int 4/11\", \"nil\", \"chan int nil\"},\n\t\t{\"s2\", \"[]main.astruct\", \"[]main.astruct len: 8, cap: 8, [{A: 1, B: 2},{A: 3, B: 4},{A: 5, B: 6},{A: 7, B: 8},{A: 9, B: 10},{A: 11, B: 12},{A: 13, B: 14},{A: 15, B: 16}]\", \"nil\", \"[]main.astruct len: 0, cap: 0, nil\"},\n\t\t{\"err1\", \"error\", \"error(*main.astruct) *{A: 1, B: 2}\", \"nil\", \"error nil\"},\n\t\t{\"s1[0]\", \"string\", `\"one\"`, `\"\"`, `\"\"`},\n\t\t{\"as1\", \"main.astruct\", \"main.astruct {A: 1, B: 1}\", `m1[\"Malone\"]`, \"main.astruct {A: 2, B: 3}\"},\n\n\t\t{\"iface1\", \"interface {}\", \"interface {}(*main.astruct) *{A: 1, B: 2}\", \"nil\", \"interface {} nil\"},\n\t\t{\"iface1\", \"interface {}\", \"interface {} nil\", \"iface2\", \"interface {}(string) \\\"test\\\"\"},\n\t\t{\"iface1\", \"interface {}\", \"interface {}(string) \\\"test\\\"\", \"parr\", \"interface {}(*[4]int) *[0,1,2,3]\"},\n\n\t\t{\"s3\", \"[]int\", `[]int len: 0, cap: 6, []`, \"s4[2:5]\", \"[]int len: 3, cap: 8, [3,4,5]\"},\n\t\t{\"s3\", \"[]int\", \"[]int len: 3, cap: 8, [3,4,5]\", \"arr1[:]\", \"[]int len: 4, cap: 4, [0,1,2,3]\"},\n\t\t{\"str1\", \"string\", `\"01234567890\"`, `\"new value\"`, errorPrefix + \"literal string can not be allocated because function calls are not allowed without using 'call'\"},\n\t}\n\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tfor _, tc := range testcases {\n\t\t\tif tc.name == \"iface1\" && tc.expr == \"parr\" {\n\t\t\t\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 11) {\n\t\t\t\t\t// conversion pointer -> eface not supported prior to Go 1.11\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\tassertNoError(err, t, \"EvalVariable()\")\n\t\t\tassertVariable(t, variable, varTest{tc.name, true, tc.startVal, \"\", tc.typ, nil})\n\n\t\t\terr = setVariable(p, tc.name, tc.expr)\n\n\t\t\tif strings.HasPrefix(tc.finalVal, errorPrefix) {\n\t\t\t\texperr := tc.finalVal[len(errorPrefix):]\n\t\t\t\tif err == nil {\n\t\t\t\t\tt.Fatalf(\"expected error %q but didn't get an error\", experr)\n\t\t\t\t}\n\t\t\t\tif err.Error() != experr {\n\t\t\t\t\tt.Fatalf(\"expected error %q got %v\", experr, err)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"SetVariable(%q, %q)\", tc.name, tc.expr))\n\t\t\t\tvariable, err = evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\t\tassertNoError(err, t, \"EvalVariable()\")\n\t\t\t\tassertVariable(t, variable, varTest{tc.name, true, tc.finalVal, \"\", tc.typ, nil})\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestVariableEvaluationShort(t *testing.T) {\n\ttestcases := []varTest{\n\t\t{\"a1\", true, \"\\\"foofoofoofoofoofoo\\\"\", \"\", \"string\", nil},\n\t\t{\"a11\", true, \"[3]main.FooBar [...]\", \"\", \"[3]main.FooBar\", nil},\n\t\t{\"a12\", true, \"[]main.FooBar len: 2, cap: 2, [...]\", \"\", \"[]main.FooBar\", nil},\n\t\t{\"a13\", true, \"[]*main.FooBar len: 3, cap: 3, [...]\", \"\", \"[]*main.FooBar\", nil},\n\t\t{\"a2\", true, \"6\", \"\", \"int\", nil},\n\t\t{\"a3\", true, \"7.23\", \"\", \"float64\", nil},\n\t\t{\"a4\", true, \"[2]int [...]\", \"\", \"[2]int\", nil},\n\t\t{\"a5\", true, \"[]int len: 5, cap: 5, [...]\", \"\", \"[]int\", nil},\n\t\t{\"a6\", true, \"main.FooBar {Baz: 8, Bur: \\\"word\\\"}\", \"\", \"main.FooBar\", nil},\n\t\t{\"a7\", true, \"(*main.FooBar)(0x…\", \"\", \"*main.FooBar\", nil},\n\t\t{\"a8\", true, \"main.FooBar2 {Bur: 10, Baz: \\\"feh\\\"}\", \"\", \"main.FooBar2\", nil},\n\t\t{\"a9\", true, \"*main.FooBar nil\", \"\", \"*main.FooBar\", nil},\n\t\t{\"baz\", true, \"\\\"bazburzum\\\"\", \"\", \"string\", nil},\n\t\t{\"neg\", true, \"-1\", \"\", \"int\", nil},\n\t\t{\"f32\", true, \"1.2\", \"\", \"float32\", nil},\n\t\t{\"c64\", true, \"(1 + 2i)\", \"\", \"complex64\", nil},\n\t\t{\"c128\", true, \"(2 + 3i)\", \"\", \"complex128\", nil},\n\t\t{\"a6.Baz\", true, \"8\", \"\", \"int\", nil},\n\t\t{\"a7.Baz\", true, \"5\", \"\", \"int\", nil},\n\t\t{\"a8.Baz\", true, \"\\\"feh\\\"\", \"\", \"string\", nil},\n\t\t{\"a9.Baz\", true, \"nil\", \"\", \"int\", errors.New(\"a9 is nil\")},\n\t\t{\"a9.NonExistent\", true, \"nil\", \"\", \"int\", errors.New(\"a9 has no member NonExistent\")},\n\t\t{\"a8\", true, \"main.FooBar2 {Bur: 10, Baz: \\\"feh\\\"}\", \"\", \"main.FooBar2\", nil}, // reread variable after member\n\t\t{\"i32\", true, \"[2]int32 [...]\", \"\", \"[2]int32\", nil},\n\t\t{\"b1\", true, \"true\", \"false\", \"bool\", nil},\n\t\t{\"b2\", true, \"false\", \"true\", \"bool\", nil},\n\t\t{\"i8\", true, \"1\", \"2\", \"int8\", nil},\n\t\t{\"u16\", true, \"65535\", \"0\", \"uint16\", nil},\n\t\t{\"u32\", true, \"4294967295\", \"1\", \"uint32\", nil},\n\t\t{\"u64\", true, \"18446744073709551615\", \"2\", \"uint64\", nil},\n\t\t{\"u8\", true, \"255\", \"3\", \"uint8\", nil},\n\t\t{\"up\", true, \"5\", \"4\", \"uintptr\", nil},\n\t\t{\"f\", true, \"main.barfoo\", \"\", \"func()\", nil},\n\t\t{\"ba\", true, \"[]int len: 200, cap: 200, [...]\", \"\", \"[]int\", nil},\n\t\t{\"ms\", true, \"main.Nest {Level: 0, Nest: (*main.Nest)(0x…\", \"\", \"main.Nest\", nil},\n\t\t{\"ms.Nest.Nest\", true, \"(*main.Nest)(0x…\", \"\", \"*main.Nest\", nil},\n\t\t{\"ms.Nest.Nest.Nest.Nest.Nest\", true, \"*main.Nest nil\", \"\", \"*main.Nest\", nil},\n\t\t{\"ms.Nest.Nest.Nest.Nest.Nest.Nest\", true, \"\", \"\", \"*main.Nest\", errors.New(\"ms.Nest.Nest.Nest.Nest.Nest is nil\")},\n\t\t{\"main.p1\", true, \"10\", \"\", \"int\", nil},\n\t\t{\"p1\", true, \"10\", \"\", \"int\", nil},\n\t\t{\"NonExistent\", true, \"\", \"\", \"\", errors.New(\"could not find symbol value for NonExistent\")},\n\t}\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tassertNoError(err, t, \"Continue() returned an error\")\n\n\t\tfor _, tc := range testcases {\n\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pshortLoadConfig)\n\t\t\tif tc.err == nil {\n\t\t\t\tassertNoError(err, t, \"EvalVariable() returned an error\")\n\t\t\t\tassertVariable(t, variable, tc)\n\t\t\t} else {\n\t\t\t\tif err == nil {\n\t\t\t\t\tt.Fatalf(\"Expected error %s, got no error: %s\\n\", tc.err.Error(), api.ConvertVar(variable).SinglelineString())\n\t\t\t\t}\n\t\t\t\tif tc.err.Error() != err.Error() {\n\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestMultilineVariableEvaluation(t *testing.T) {\n\ttestcases := []varTest{\n\t\t{\"a1\", true, \"\\\"foofoofoofoofoofoo\\\"\", \"\", \"string\", nil},\n\t\t{\"a11\", true, `[3]main.FooBar [\n\t{Baz: 1, Bur: \"a\"},\n\t{Baz: 2, Bur: \"b\"},\n\t{Baz: 3, Bur: \"c\"},\n]`, \"\", \"[3]main.FooBar\", nil},\n\t\t{\"a12\", true, `[]main.FooBar len: 2, cap: 2, [\n\t{Baz: 4, Bur: \"d\"},\n\t{Baz: 5, Bur: \"e\"},\n]`, \"\", \"[]main.FooBar\", nil},\n\t\t{\"a13\", true, `[]*main.FooBar len: 3, cap: 3, [\n\t*{Baz: 6, Bur: \"f\"},\n\t*{Baz: 7, Bur: \"g\"},\n\t*{Baz: 8, Bur: \"h\"},\n]`, \"\", \"[]*main.FooBar\", nil},\n\t\t{\"a2\", true, \"6\", \"10\", \"int\", nil},\n\t\t{\"a4\", true, \"[2]int [1,2]\", \"\", \"[2]int\", nil},\n\t\t{\"a5\", true, \"[]int len: 5, cap: 5, [1,2,3,4,5]\", \"\", \"[]int\", nil},\n\t\t{\"a6\", true, \"main.FooBar {Baz: 8, Bur: \\\"word\\\"}\", \"\", \"main.FooBar\", nil},\n\t\t{\"a7\", true, `/^\\(\\*main\\.FooBar\\)\\(.*?\\)\\n\\*main\\.FooBar \\{Baz: 5, Bur: \"strum\"\\}$/`, \"\", \"*main.FooBar\", nil},\n\t\t{\"a8\", true, \"main.FooBar2 {Bur: 10, Baz: \\\"feh\\\"}\", \"\", \"main.FooBar2\", nil},\n\t\t{\"a9\", true, \"*main.FooBar nil\", \"\", \"*main.FooBar\", nil},\n\t\t{\"a8\", true, \"main.FooBar2 {Bur: 10, Baz: \\\"feh\\\"}\", \"\", \"main.FooBar2\", nil}, // reread variable after member\n\t\t{\"i32\", true, \"[2]int32 [1,2]\", \"\", \"[2]int32\", nil},\n\t\t{\"ba\", true, \"[]int len: 200, cap: 200, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+136 more]\", \"\", \"[]int\", nil},\n\t\t{\"ms\", true, `main.Nest {\n\tLevel: 0,\n\tNest: *main.Nest {\n\t\tLevel: 1,\n\t\tNest: *(*main.Nest)(…`, \"\", \"main.Nest\", nil},\n\t}\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tassertNoError(err, t, \"Continue() returned an error\")\n\n\t\tfor _, tc := range testcases {\n\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\tassertNoError(err, t, \"EvalVariable() returned an error\")\n\t\t\tif ms := multiLineVar(variable); !matchStringOrPrefix(ms, tc.value) {\n\t\t\t\tt.Fatalf(\"Expected %s got %q (variable %s)\\n\", tc.value, ms, variable.Name)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestLocalVariables(t *testing.T) {\n\ttestcases := []struct {\n\t\tfn     func(*proc.EvalScope, proc.LoadConfig) ([]*proc.Variable, error)\n\t\toutput []varTest\n\t}{\n\t\t{(*proc.EvalScope).LocalVariables,\n\t\t\t[]varTest{\n\t\t\t\t{\"a1\", true, \"\\\"foofoofoofoofoofoo\\\"\", \"\", \"string\", nil},\n\t\t\t\t{\"a10\", true, \"\\\"ofo\\\"\", \"\", \"string\", nil},\n\t\t\t\t{\"a11\", true, \"[3]main.FooBar [{Baz: 1, Bur: \\\"a\\\"},{Baz: 2, Bur: \\\"b\\\"},{Baz: 3, Bur: \\\"c\\\"}]\", \"\", \"[3]main.FooBar\", nil},\n\t\t\t\t{\"a12\", true, \"[]main.FooBar len: 2, cap: 2, [{Baz: 4, Bur: \\\"d\\\"},{Baz: 5, Bur: \\\"e\\\"}]\", \"\", \"[]main.FooBar\", nil},\n\t\t\t\t{\"a13\", true, \"[]*main.FooBar len: 3, cap: 3, [*{Baz: 6, Bur: \\\"f\\\"},*{Baz: 7, Bur: \\\"g\\\"},*{Baz: 8, Bur: \\\"h\\\"}]\", \"\", \"[]*main.FooBar\", nil},\n\t\t\t\t{\"a2\", true, \"6\", \"\", \"int\", nil},\n\t\t\t\t{\"a3\", true, \"7.23\", \"\", \"float64\", nil},\n\t\t\t\t{\"a4\", true, \"[2]int [1,2]\", \"\", \"[2]int\", nil},\n\t\t\t\t{\"a5\", true, \"[]int len: 5, cap: 5, [1,2,3,4,5]\", \"\", \"[]int\", nil},\n\t\t\t\t{\"a6\", true, \"main.FooBar {Baz: 8, Bur: \\\"word\\\"}\", \"\", \"main.FooBar\", nil},\n\t\t\t\t{\"a7\", true, \"*main.FooBar {Baz: 5, Bur: \\\"strum\\\"}\", \"\", \"*main.FooBar\", nil},\n\t\t\t\t{\"a8\", true, \"main.FooBar2 {Bur: 10, Baz: \\\"feh\\\"}\", \"\", \"main.FooBar2\", nil},\n\t\t\t\t{\"a9\", true, \"*main.FooBar nil\", \"\", \"*main.FooBar\", nil},\n\t\t\t\t{\"b1\", true, \"true\", \"\", \"bool\", nil},\n\t\t\t\t{\"b2\", true, \"false\", \"\", \"bool\", nil},\n\t\t\t\t{\"ba\", true, \"[]int len: 200, cap: 200, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+136 more]\", \"\", \"[]int\", nil},\n\t\t\t\t{\"c128\", true, \"(2 + 3i)\", \"\", \"complex128\", nil},\n\t\t\t\t{\"c64\", true, \"(1 + 2i)\", \"\", \"complex64\", nil},\n\t\t\t\t{\"f\", true, \"main.barfoo\", \"\", \"func()\", nil},\n\t\t\t\t{\"f32\", true, \"1.2\", \"\", \"float32\", nil},\n\t\t\t\t{\"i32\", true, \"[2]int32 [1,2]\", \"\", \"[2]int32\", nil},\n\t\t\t\t{\"i8\", true, \"1\", \"\", \"int8\", nil},\n\t\t\t\t{\"mp\", true, \"map[int]interface {} [1: 42, 2: 43, ]\", \"\", \"map[int]interface {}\", nil},\n\t\t\t\t{\"ms\", true, \"main.Nest {Level: 0, Nest: *main.Nest {Level: 1, Nest: *(*main.Nest)…\", \"\", \"main.Nest\", nil},\n\t\t\t\t{\"neg\", true, \"-1\", \"\", \"int\", nil},\n\t\t\t\t{\"ni\", true, \"[]interface {} len: 1, cap: 1, [[]interface {} len: 1, cap: 1, [*(*interface {})…\", \"\", \"[]interface {}\", nil},\n\t\t\t\t{\"u16\", true, \"65535\", \"\", \"uint16\", nil},\n\t\t\t\t{\"u32\", true, \"4294967295\", \"\", \"uint32\", nil},\n\t\t\t\t{\"u64\", true, \"18446744073709551615\", \"\", \"uint64\", nil},\n\t\t\t\t{\"u8\", true, \"255\", \"\", \"uint8\", nil},\n\t\t\t\t{\"up\", true, \"5\", \"\", \"uintptr\", nil}}},\n\t\t{(*proc.EvalScope).FunctionArguments,\n\t\t\t[]varTest{\n\t\t\t\t{\"bar\", true, \"main.FooBar {Baz: 10, Bur: \\\"lorem\\\"}\", \"\", \"main.FooBar\", nil},\n\t\t\t\t{\"baz\", true, \"\\\"bazburzum\\\"\", \"\", \"string\", nil}}},\n\t}\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tassertNoError(err, t, \"Continue() returned an error\")\n\n\t\tfor _, tc := range testcases {\n\t\t\tvar scope *proc.EvalScope\n\t\t\tvar err error\n\n\t\t\tif testBackend == \"rr\" {\n\t\t\t\tvar frame proc.Stackframe\n\t\t\t\tframe, err = findFirstNonRuntimeFrame(p)\n\t\t\t\tif err == nil {\n\t\t\t\t\tscope = proc.FrameToScope(p, p.Memory(), nil, p.CurrentThread().ThreadID(), frame)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tscope, err = proc.GoroutineScope(p, p.CurrentThread())\n\t\t\t}\n\n\t\t\tassertNoError(err, t, \"scope\")\n\t\t\tvars, err := tc.fn(scope, pnormalLoadConfig)\n\t\t\tassertNoError(err, t, \"LocalVariables() returned an error\")\n\n\t\t\tslices.SortFunc(vars, func(a, b *proc.Variable) int {\n\t\t\t\treturn strings.Compare(a.Name, b.Name)\n\t\t\t})\n\n\t\t\tif len(tc.output) != len(vars) {\n\t\t\t\tt.Fatalf(\"Invalid variable count. Expected %d got %d.\", len(tc.output), len(vars))\n\t\t\t}\n\n\t\t\tfor i, variable := range vars {\n\t\t\t\tassertVariable(t, variable, tc.output[i])\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestEmbeddedStruct(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\ttestcases := []varTest{\n\t\t\t{\"b.val\", true, \"-314\", \"-314\", \"int\", nil},\n\t\t\t{\"b.A.val\", true, \"-314\", \"-314\", \"int\", nil},\n\t\t\t{\"b.a.val\", true, \"42\", \"42\", \"int\", nil},\n\t\t\t{\"b.ptr.val\", true, \"1337\", \"1337\", \"int\", nil},\n\t\t\t{\"b.C.s\", true, \"\\\"hello\\\"\", \"\\\"hello\\\"\", \"string\", nil},\n\t\t\t{\"b.s\", true, \"\\\"hello\\\"\", \"\\\"hello\\\"\", \"string\", nil},\n\t\t\t{\"b2\", true, \"main.B {A: main.A {val: 42}, C: *main.C nil, a: main.A {val: 47}, ptr: *main.A nil}\", \"main.B {A: (*main.A)(0x…\", \"main.B\", nil},\n\n\t\t\t// Issue 2316: field promotion is breadth first and embedded interfaces never get promoted\n\t\t\t{\"w2.W1.T.F\", true, `\"T-inside-W1\"`, `\"T-inside-W1\"`, \"string\", nil},\n\t\t\t{\"w2.W1.F\", true, `\"T-inside-W1\"`, `\"T-inside-W1\"`, \"string\", nil},\n\t\t\t{\"w2.T.F\", true, `\"T-inside-W2\"`, `\"T-inside-W2\"`, \"string\", nil},\n\t\t\t{\"w2.F\", true, `\"T-inside-W2\"`, `\"T-inside-W2\"`, \"string\", nil},\n\t\t\t{\"w3.I.T.F\", false, `\"T-inside-W1\"`, `\"T-inside-W1\"`, \"string\", nil},\n\t\t\t{\"w3.I.F\", false, `\"T-inside-W1\"`, `\"T-inside-W1\"`, \"string\", nil},\n\t\t\t{\"w3.T.F\", true, `\"T-inside-W3\"`, `\"T-inside-W3\"`, \"string\", nil},\n\t\t\t{\"w3.F\", true, `\"T-inside-W3\"`, `\"T-inside-W3\"`, \"string\", nil},\n\t\t\t{\"w4.I.T.F\", false, `\"T-inside-W1\"`, `\"T-inside-W1\"`, \"string\", nil},\n\t\t\t{\"w4.I.F\", false, `\"T-inside-W1\"`, `\"T-inside-W1\"`, \"string\", nil},\n\t\t\t{\"w4.F\", false, ``, ``, \"\", errors.New(\"w4 has no member F\")},\n\t\t\t{\"w5.F\", false, ``, ``, \"\", errors.New(\"w5 has no member F\")},\n\t\t}\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tver, _ := goversion.Parse(runtime.Version())\n\t\tif ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 9, Rev: -1}) {\n\t\t\t// on go < 1.9 embedded fields had different names\n\t\t\tfor i := range testcases {\n\t\t\t\tif testcases[i].name == \"b2\" {\n\t\t\t\t\ttestcases[i].value = \"main.B {main.A: main.A {val: 42}, *main.C: *main.C nil, a: main.A {val: 47}, ptr: *main.A nil}\"\n\t\t\t\t\ttestcases[i].alternate = \"main.B {main.A: (*main.A)(0x…\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor _, tc := range testcases {\n\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\tif tc.err == nil {\n\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalVariable(%s) returned an error\", tc.name))\n\t\t\t\tassertVariable(t, variable, tc)\n\t\t\t\tvariable, err = evalVariableWithCfg(p, tc.name, pshortLoadConfig)\n\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalVariable(%s, pshortLoadConfig) returned an error\", tc.name))\n\t\t\t\tassertVariable(t, variable, tc.alternateVarTest())\n\t\t\t} else {\n\t\t\t\tif tc.err.Error() != err.Error() {\n\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestComplexSetting(t *testing.T) {\n\twithTestProcess(\"testvariables\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tassertNoError(err, t, \"Continue() returned an error\")\n\n\t\th := func(setExpr, value string) {\n\t\t\tassertNoError(setVariable(p, \"c128\", setExpr), t, \"SetVariable()\")\n\t\t\tvariable, err := evalVariableWithCfg(p, \"c128\", pnormalLoadConfig)\n\t\t\tassertNoError(err, t, \"EvalVariable()\")\n\t\t\tif s := api.ConvertVar(variable).SinglelineString(); s != value {\n\t\t\t\tt.Fatalf(\"Wrong value of c128: %q, expected %q after setting it to %q\", s, value, setExpr)\n\t\t\t}\n\t\t}\n\n\t\th(\"3.2i\", \"(0 + 3.2i)\")\n\t\th(\"1.1\", \"(1.1 + 0i)\")\n\t\th(\"1 + 3.3i\", \"(1 + 3.3i)\")\n\t\th(\"complex(1.2, 3.4)\", \"(1.2 + 3.4i)\")\n\t})\n}\n\nfunc getEvalExpressionTestCases() []varTest {\n\ttestcases := []varTest{\n\t\t// slice/array/string subscript\n\t\t{\"s1[0]\", false, \"\\\"one\\\"\", \"\\\"one\\\"\", \"string\", nil},\n\t\t{\"s1[1]\", false, \"\\\"two\\\"\", \"\\\"two\\\"\", \"string\", nil},\n\t\t{\"s1[2]\", false, \"\\\"three\\\"\", \"\\\"three\\\"\", \"string\", nil},\n\t\t{\"s1[3]\", false, \"\\\"four\\\"\", \"\\\"four\\\"\", \"string\", nil},\n\t\t{\"s1[4]\", false, \"\\\"five\\\"\", \"\\\"five\\\"\", \"string\", nil},\n\t\t{\"s1[5]\", false, \"\", \"\", \"string\", errors.New(\"index out of bounds\")},\n\t\t{\"a1[0]\", false, \"\\\"one\\\"\", \"\\\"one\\\"\", \"string\", nil},\n\t\t{\"a1[1]\", false, \"\\\"two\\\"\", \"\\\"two\\\"\", \"string\", nil},\n\t\t{\"a1[2]\", false, \"\\\"three\\\"\", \"\\\"three\\\"\", \"string\", nil},\n\t\t{\"a1[3]\", false, \"\\\"four\\\"\", \"\\\"four\\\"\", \"string\", nil},\n\t\t{\"a1[4]\", false, \"\\\"five\\\"\", \"\\\"five\\\"\", \"string\", nil},\n\t\t{\"a1[5]\", false, \"\", \"\", \"string\", errors.New(\"index out of bounds\")},\n\t\t{\"str1[0]\", false, \"48\", \"48\", \"byte\", nil},\n\t\t{\"str1[1]\", false, \"49\", \"49\", \"byte\", nil},\n\t\t{\"str1[2]\", false, \"50\", \"50\", \"byte\", nil},\n\t\t{\"str1[10]\", false, \"48\", \"48\", \"byte\", nil},\n\t\t{\"str1[11]\", false, \"\", \"\", \"byte\", errors.New(\"index out of bounds\")},\n\n\t\t// slice/array/string reslicing\n\t\t{\"a1[2:4]\", false, \"[]string len: 2, cap: 3, [\\\"three\\\",\\\"four\\\"]\", \"[]string len: 2, cap: 3, [\\\"three\\\",\\\"four\\\"]\", \"[]string\", nil},\n\t\t{\"s1[2:4]\", false, \"[]string len: 2, cap: 3, [\\\"three\\\",\\\"four\\\"]\", \"[]string len: 2, cap: 3, [\\\"three\\\",\\\"four\\\"]\", \"[]string\", nil},\n\t\t{\"str1[2:4]\", false, \"\\\"23\\\"\", \"\\\"23\\\"\", \"string\", nil},\n\t\t{\"str1[0:11]\", false, \"\\\"01234567890\\\"\", \"\\\"01234567890\\\"\", \"string\", nil},\n\t\t{\"str1[:3]\", false, \"\\\"012\\\"\", \"\\\"012\\\"\", \"string\", nil},\n\t\t{\"str1[3:]\", false, \"\\\"34567890\\\"\", \"\\\"34567890\\\"\", \"string\", nil},\n\t\t{\"str1[0:12]\", false, \"\", \"\", \"string\", errors.New(\"index out of bounds\")},\n\t\t{\"str1[5:3]\", false, \"\", \"\", \"string\", errors.New(\"index out of bounds\")},\n\t\t{\"str1[11:]\", false, \"\\\"\\\"\", \"\\\"\\\"\", \"string\", nil},\n\t\t{\"longbyteslice[:70]\", false, \"[]uint8 len: 70, cap: 144, [118,101,114,121,32,108,111,110,103,32,115,116,114,105,110,103,32,48,49,50,51,52,53,54,55,56,57,97,48,49,50,51,52,53,54,55,56,57,98,48,49,50,51,52,53,54,55,56,57,99,48,49,50,51,52,53,54,55,56,57,100,48,49,50,51,52,53,54,55,56]\", \"[]uint8 len: 70, cap: 144, [118,101,114,121,32,108,111,110,103,32,115,116,114,105,110,103,32,48,49,50,51,52,53,54,55,56,57,97,48,49,50,51,52,53,54,55,56,57,98,48,49,50,51,52,53,54,55,56,57,99,48,49,50,51,52,53,54,55,56,57,100,48,49,50,51,52,53,54,55,56]\", \"[]uint8\", nil},\n\t\t{\"longbyteslice[:3][:5]\", false, \"[]uint8 len: 5, cap: 144, [118,101,114,121,32]\", \"[]uint8 len: 5, cap: 144, [118,101,114,121,32]\", \"[]uint8\", nil},\n\n\t\t// NaN and Inf floats\n\t\t{\"pinf\", false, \"+Inf\", \"+Inf\", \"float64\", nil},\n\t\t{\"ninf\", false, \"-Inf\", \"-Inf\", \"float64\", nil},\n\t\t{\"nan\", false, \"NaN\", \"NaN\", \"float64\", nil},\n\n\t\t// pointers\n\t\t{\"*p2\", false, \"5\", \"5\", \"int\", nil},\n\t\t{\"p2\", true, \"*5\", \"(*int)(0x…\", \"*int\", nil},\n\t\t{\"p3\", true, \"*int nil\", \"*int nil\", \"*int\", nil},\n\t\t{\"*p3\", false, \"\", \"\", \"int\", errors.New(\"nil pointer dereference\")},\n\n\t\t// channels\n\t\t{\"ch1\", true, \"chan int 4/11\", \"chan int 4/11\", \"chan int\", nil},\n\t\t{\"chnil\", true, \"chan int nil\", \"chan int nil\", \"chan int\", nil},\n\t\t{\"ch1+1\", false, \"\", \"\", \"\", errors.New(\"can not convert 1 constant to chan int\")},\n\t\t{\"int3chan.buf\", false, \"*[5]main.ThreeInts [{a: 1, b: 0, c: 0},{a: 2, b: 0, c: 0},{a: 3, b: 0, c: 0},{a: 0, b: 0, c: 0},{a: 0, b: 0, c: 0}]\", \"(*[5]main.ThreeInts)(…\", \"*[5]main.ThreeInts\", nil},\n\n\t\t// maps\n\t\t{\"m1[\\\"Malone\\\"]\", false, \"main.astruct {A: 2, B: 3}\", \"main.astruct {A: 2, B: 3}\", \"main.astruct\", nil},\n\t\t{\"m2[1].B\", false, \"11\", \"11\", \"int\", nil},\n\t\t{\"m2[c1.sa[2].B-4].A\", false, \"10\", \"10\", \"int\", nil},\n\t\t{\"m2[*p1].B\", false, \"11\", \"11\", \"int\", nil},\n\t\t{\"m3[as1]\", false, \"42\", \"42\", \"int\", nil},\n\t\t{\"mnil[\\\"Malone\\\"]\", false, \"\", \"\", \"\", errors.New(\"key not found\")},\n\t\t{\"m1[80:]\", false, \"\", \"\", \"\", errors.New(\"map index out of bounds\")},\n\t\t{\"mlarge\", false, \"map[main.largestruct]main.largestruct [{name: \\\"one\\\", v: [256]uint8 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+192 more]}: {name: \\\"oneval\\\", v: [256]uint8 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+192 more]}, ]\", \"map[main.largestruct]main.largestruct [...]\", \"map[main.largestruct]main.largestruct\", nil},\n\t\t{\"m3[main.astruct{1,1}]\", false, \"42\", \"42\", \"int\", nil},\n\t\t{\"m4[main.astruct{2,2}]\", false, \"main.astruct {A: 22, B: 22}\", \"main.astruct {A: 22, B: 22}\", \"main.astruct\", nil},\n\t\t{\"m3[main.astruct{3,3}]\", false, \"\", \"\", \"\", errors.New(\"key not found\")},\n\n\t\t// interfaces\n\t\t{\"err1\", true, \"error(*main.astruct) *{A: 1, B: 2}\", \"error(*main.astruct) 0x…\", \"error\", nil},\n\t\t{\"err2\", true, \"error(*main.bstruct) *{a: main.astruct {A: 1, B: 2}}\", \"error(*main.bstruct) 0x…\", \"error\", nil},\n\t\t{\"errnil\", true, \"error nil\", \"error nil\", \"error\", nil},\n\t\t{\"iface1\", true, \"interface {}(*main.astruct) *{A: 1, B: 2}\", \"interface {}(*main.astruct) 0x…\", \"interface {}\", nil},\n\t\t{\"iface1.A\", false, \"1\", \"1\", \"int\", nil},\n\t\t{\"iface1.B\", false, \"2\", \"2\", \"int\", nil},\n\t\t{\"iface2\", true, \"interface {}(string) \\\"test\\\"\", \"interface {}(string) \\\"test\\\"\", \"interface {}\", nil},\n\t\t{\"iface3\", true, \"interface {}(map[string]go/constant.Value) []\", \"interface {}(map[string]go/constant.Value) []\", \"interface {}\", nil},\n\t\t{\"iface4\", true, \"interface {}([]go/constant.Value) [4]\", \"interface {}([]go/constant.Value) [...]\", \"interface {}\", nil},\n\t\t{\"ifacenil\", true, \"interface {} nil\", \"interface {} nil\", \"interface {}\", nil},\n\t\t{\"err1 == err2\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"err1 == iface1\", false, \"\", \"\", \"\", errors.New(\"mismatched types \\\"error\\\" and \\\"interface {}\\\"\")},\n\t\t{\"errnil == nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"errtypednil == nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"nil == errnil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"err1.(*main.astruct)\", false, \"*main.astruct {A: 1, B: 2}\", \"(*main.astruct)(0x…\", \"*main.astruct\", nil},\n\t\t{\"err1.(*main.bstruct)\", false, \"\", \"\", \"\", errors.New(\"interface conversion: error is *main.astruct, not *main.bstruct\")},\n\t\t{\"errnil.(*main.astruct)\", false, \"\", \"\", \"\", errors.New(\"interface conversion: error is nil, not *main.astruct\")},\n\t\t{\"const1\", true, \"go/constant.Value(go/constant.int64Val) 3\", \"go/constant.Value(go/constant.int64Val) 3\", \"go/constant.Value\", nil},\n\n\t\t// combined expressions\n\t\t{\"c1.pb.a.A\", true, \"1\", \"1\", \"int\", nil},\n\t\t{\"c1.sa[1].B\", false, \"3\", \"3\", \"int\", nil},\n\t\t{\"s2[5].B\", false, \"12\", \"12\", \"int\", nil},\n\t\t{\"s2[c1.sa[2].B].A\", false, \"11\", \"11\", \"int\", nil},\n\t\t{\"s2[*p2].B\", false, \"12\", \"12\", \"int\", nil},\n\n\t\t// constants\n\t\t{\"1.1\", false, \"1.1\", \"1.1\", \"\", nil},\n\t\t{\"10\", false, \"10\", \"10\", \"\", nil},\n\t\t{\"1 + 2i\", false, \"(1 + 2i)\", \"(1 + 2i)\", \"\", nil},\n\t\t{\"true\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"\\\"test\\\"\", false, \"\\\"test\\\"\", \"\\\"test\\\"\", \"\", nil},\n\t\t{\"1/2\", false, \"0\", \"0\", \"\", nil},\n\t\t{\"zeropoint4 > 1/2\", false, \"true\", \"true\", \"\", nil},\n\n\t\t// binary operators\n\t\t{\"i2 + i3\", false, \"5\", \"5\", \"int\", nil},\n\t\t{\"i2 - i3\", false, \"-1\", \"-1\", \"int\", nil},\n\t\t{\"i3 - i2\", false, \"1\", \"1\", \"int\", nil},\n\t\t{\"i2 * i3\", false, \"6\", \"6\", \"int\", nil},\n\t\t{\"i2/i3\", false, \"0\", \"0\", \"int\", nil},\n\t\t{\"f1/2.0\", false, \"1.5\", \"1.5\", \"float64\", nil},\n\t\t{\"i2 << 2\", false, \"8\", \"8\", \"int\", nil},\n\n\t\t// unary operators\n\t\t{\"-i2\", false, \"-2\", \"-2\", \"int\", nil},\n\t\t{\"+i2\", false, \"2\", \"2\", \"int\", nil},\n\t\t{\"^i2\", false, \"-3\", \"-3\", \"int\", nil},\n\n\t\t// comparison operators\n\t\t{\"i2 == i3\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"i2 == 2\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"i2 == 2\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"i2 == 3\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"i2 != i3\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"i2 < i3\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"i2 <= i3\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"i2 > i3\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"i2 >= i3\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"i2 >= 2\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"str1 == \\\"01234567890\\\"\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"str1 < \\\"01234567890\\\"\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"str1 < \\\"11234567890\\\"\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"str1 > \\\"00234567890\\\"\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"str1 == str1\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"c1.pb.a == *(c1.sa[0])\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"c1.pb.a != *(c1.sa[0])\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"c1.pb.a == *(c1.sa[1])\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"c1.pb.a != *(c1.sa[1])\", false, \"true\", \"true\", \"\", nil},\n\t\t{`longstr == \"not this\"`, false, \"false\", \"false\", \"\", nil},\n\n\t\t// builtins\n\t\t{\"cap(parr)\", false, \"4\", \"4\", \"\", nil},\n\t\t{\"len(parr)\", false, \"4\", \"4\", \"\", nil},\n\t\t{\"cap(p1)\", false, \"\", \"\", \"\", errors.New(\"invalid argument p1 (type *int) for cap\")},\n\t\t{\"len(p1)\", false, \"\", \"\", \"\", errors.New(\"invalid argument p1 (type *int) for len\")},\n\t\t{\"cap(a1)\", false, \"5\", \"5\", \"\", nil},\n\t\t{\"len(a1)\", false, \"5\", \"5\", \"\", nil},\n\t\t{\"cap(s3)\", false, \"6\", \"6\", \"\", nil},\n\t\t{\"len(s3)\", false, \"0\", \"0\", \"\", nil},\n\t\t{\"cap(nilslice)\", false, \"0\", \"0\", \"\", nil},\n\t\t{\"len(nilslice)\", false, \"0\", \"0\", \"\", nil},\n\t\t{\"cap(ch1)\", false, \"11\", \"11\", \"\", nil},\n\t\t{\"len(ch1)\", false, \"4\", \"4\", \"\", nil},\n\t\t{\"cap(chnil)\", false, \"0\", \"0\", \"\", nil},\n\t\t{\"len(chnil)\", false, \"0\", \"0\", \"\", nil},\n\t\t{\"len(m1)\", false, \"66\", \"66\", \"\", nil},\n\t\t{\"len(mnil)\", false, \"0\", \"0\", \"\", nil},\n\t\t{\"imag(cpx1)\", false, \"2\", \"2\", \"\", nil},\n\t\t{\"real(cpx1)\", false, \"1\", \"1\", \"\", nil},\n\t\t{\"imag(3i)\", false, \"3\", \"3\", \"\", nil},\n\t\t{\"real(4)\", false, \"4\", \"4\", \"\", nil},\n\t\t{\"max(1, 2, 3)\", false, \"3\", \"3\", \"\", nil},\n\t\t{`max(\"one\", \"two\", \"three\")`, false, `\"two\"`, `\"two\"`, \"\", nil},\n\t\t{`min(\"one\", \"two\", \"three\")`, false, `\"one\"`, `\"one\"`, \"\", nil},\n\t\t{\"max(s1[0], s1[1], s1[2])\", false, `\"two\"`, `\"two\"`, \"string\", nil},\n\t\t{\"min(s1[0], s1[1], s1[2])\", false, `\"one\"`, `\"one\"`, \"string\", nil},\n\t\t{`max(s1[0], \"two\", s1[2])`, false, `\"two\"`, `\"two\"`, \"\", nil},\n\t\t{`min(s1[0], \"two\", s1[2])`, false, `\"one\"`, `\"one\"`, \"string\", nil},\n\n\t\t// nil\n\t\t{\"nil\", false, \"nil\", \"nil\", \"\", nil},\n\t\t{\"nil+1\", false, \"\", \"\", \"\", errors.New(\"operator + can not be applied to \\\"nil\\\"\")},\n\t\t{\"fn1\", false, \"main.afunc\", \"main.afunc\", \"main.functype\", nil},\n\t\t{\"fn2\", false, \"nil\", \"nil\", \"main.functype\", nil},\n\t\t{\"nilslice\", false, \"[]int len: 0, cap: 0, nil\", \"[]int len: 0, cap: 0, nil\", \"[]int\", nil},\n\t\t{\"fn1 == fn2\", false, \"\", \"\", \"\", errors.New(\"can not compare func variables\")},\n\t\t{\"fn1 == nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"fn1 != nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"fn2 == nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"fn2 != nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"c1.sa == nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"c1.sa != nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"c1.sa[0] == nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"c1.sa[0] != nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"nilslice == nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"nil == nilslice\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"nilslice != nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"nilptr == nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"nilptr != nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"p1 == nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"p1 != nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"ch1 == nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"chnil == nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"ch1 == chnil\", false, \"\", \"\", \"\", errors.New(\"can not compare chan variables\")},\n\t\t{\"m1 == nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"mnil == m1\", false, \"\", \"\", \"\", errors.New(\"can not compare map variables\")},\n\t\t{\"mnil == nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"nil == 2\", false, \"\", \"\", \"\", errors.New(\"can not compare int to nil\")},\n\t\t{\"2 == nil\", false, \"\", \"\", \"\", errors.New(\"can not compare int to nil\")},\n\n\t\t// errors\n\t\t{\"&3\", false, \"\", \"\", \"\", errors.New(\"can not take address of \\\"3\\\"\")},\n\t\t{\"*3\", false, \"\", \"\", \"\", errors.New(\"expression \\\"3\\\" (int) can not be dereferenced\")},\n\t\t{\"&(i2 + i3)\", false, \"\", \"\", \"\", errors.New(\"can not take address of \\\"(i2 + i3)\\\"\")},\n\t\t{\"i2 + p1\", false, \"\", \"\", \"\", errors.New(\"mismatched types \\\"int\\\" and \\\"*int\\\"\")},\n\t\t{\"i2 + f1\", false, \"\", \"\", \"\", errors.New(\"mismatched types \\\"int\\\" and \\\"float64\\\"\")},\n\t\t{\"i2 << f1\", false, \"\", \"\", \"\", errors.New(\"shift count type float64, must be unsigned integer\")},\n\t\t{\"i2 << -1\", false, \"\", \"\", \"\", errors.New(\"shift count must not be negative\")},\n\t\t{\"*(i2 + i3)\", false, \"\", \"\", \"\", errors.New(\"expression \\\"(i2 + i3)\\\" (int) can not be dereferenced\")},\n\t\t{\"i2.member\", false, \"\", \"\", \"\", errors.New(\"i2 (type int) has no member member\")},\n\t\t{\"fmt.Println(\\\"hello\\\")\", false, \"\", \"\", \"\", errors.New(\"function calls not allowed without using 'call'\")},\n\t\t{\"*nil\", false, \"\", \"\", \"\", errors.New(\"nil can not be dereferenced\")},\n\t\t{\"!nil\", false, \"\", \"\", \"\", errors.New(\"operator ! can not be applied to \\\"nil\\\"\")},\n\t\t{\"&nil\", false, \"\", \"\", \"\", errors.New(\"can not take address of \\\"nil\\\"\")},\n\t\t{\"nil[0]\", false, \"\", \"\", \"\", errors.New(\"expression \\\"nil\\\" (nil) does not support indexing\")},\n\t\t{\"nil[2:10]\", false, \"\", \"\", \"\", errors.New(\"can not slice \\\"nil\\\" (type nil)\")},\n\t\t{\"nil.member\", false, \"\", \"\", \"\", errors.New(\"nil (type nil) is not a struct\")},\n\t\t{\"(map[string]main.astruct)(0x4000)\", false, \"\", \"\", \"\", errors.New(\"can not convert \\\"0x4000\\\" to map[string]main.astruct\")},\n\n\t\t// typecasts\n\t\t{\"uint(i2)\", false, \"2\", \"2\", \"uint\", nil},\n\t\t{\"int8(i2)\", false, \"2\", \"2\", \"int8\", nil},\n\t\t{\"int(f1)\", false, \"3\", \"3\", \"int\", nil},\n\t\t{\"complex128(f1)\", false, \"(3 + 0i)\", \"(3 + 0i)\", \"complex128\", nil},\n\t\t{\"uint8(i4)\", false, \"32\", \"32\", \"uint8\", nil},\n\t\t{\"uint8(i5)\", false, \"253\", \"253\", \"uint8\", nil},\n\t\t{\"int8(i5)\", false, \"-3\", \"-3\", \"int8\", nil},\n\t\t{\"int8(i6)\", false, \"12\", \"12\", \"int8\", nil},\n\t\t{\"string(byteslice[0])\", false, `\"t\"`, `\"t\"`, \"string\", nil},\n\t\t{\"string(runeslice[0])\", false, `\"t\"`, `\"t\"`, \"string\", nil},\n\t\t{\"[]uint8(messageVar)\", false, `[]uint8 len: 5, cap: 5, [1,2,3,4,5]`, `[]uint8 len: 5, cap: 5, [...]`, \"[]uint8\", nil},\n\n\t\t// misc\n\t\t{\"i1\", true, \"1\", \"1\", \"int\", nil},\n\t\t{\"mainMenu\", true, `main.Menu len: 3, cap: 3, [{Name: \"home\", Route: \"/\", Active: 1},{Name: \"About\", Route: \"/about\", Active: 1},{Name: \"Login\", Route: \"/login\", Active: 1}]`, `main.Menu len: 3, cap: 3, [...]`, \"main.Menu\", nil},\n\t\t{\"mainMenu[0]\", false, `main.Item {Name: \"home\", Route: \"/\", Active: 1}`, `main.Item {Name: \"home\", Route: \"/\", Active: 1}`, \"main.Item\", nil},\n\t\t{\"sd\", false, \"main.D {u1: 0, u2: 0, u3: 0, u4: 0, u5: 0, u6: 0}\", \"main.D {u1: 0, u2: 0, u3: 0,...+3 more}\", \"main.D\", nil},\n\n\t\t{\"ifacearr\", false, \"[]error len: 2, cap: 2, [*main.astruct {A: 0, B: 0},nil]\", \"[]error len: 2, cap: 2, [...]\", \"[]error\", nil},\n\t\t{\"efacearr\", false, `[]interface {} len: 3, cap: 3, [*main.astruct {A: 0, B: 0},\"test\",nil]`, \"[]interface {} len: 3, cap: 3, [...]\", \"[]interface {}\", nil},\n\n\t\t{\"zsslice\", false, `[]struct {} len: 3, cap: 3, [{},{},{}]`, `[]struct {} len: 3, cap: 3, [...]`, \"[]struct {}\", nil},\n\t\t{\"zsvmap\", false, `map[string]struct {} [\"testkey\": {}, ]`, `map[string]struct {} [...]`, \"map[string]struct {}\", nil},\n\t\t{\"tm\", false, \"main.truncatedMap {v: []map[string]main.astruct len: 1, cap: 1, [[...]]}\", \"main.truncatedMap {v: []map[string]main.astruct len: 1, cap: 1, [...]}\", \"main.truncatedMap\", nil},\n\n\t\t{\"emptyslice\", false, `[]string len: 0, cap: 0, []`, `[]string len: 0, cap: 0, []`, \"[]string\", nil},\n\t\t{\"emptymap\", false, `map[string]string []`, `map[string]string []`, \"map[string]string\", nil},\n\t\t{\"mnil\", false, `map[string]main.astruct nil`, `map[string]main.astruct nil`, \"map[string]main.astruct\", nil},\n\n\t\t{\"ptrinf2\", false, `**(main.pptr)(…`, `(main.pptr)(…`, \"main.pptr\", nil},\n\n\t\t// conversions between string/[]byte/[]rune (issue #548, #3595, #3539)\n\t\t{\"runeslice\", true, `[]int32 len: 4, cap: 4, [116,232,115,116]`, `[]int32 len: 4, cap: 4, [...]`, \"[]int32\", nil},\n\t\t{\"byteslice\", true, `[]uint8 len: 5, cap: 5, [116,195,168,115,116]`, `[]uint8 len: 5, cap: 5, [...]`, \"[]uint8\", nil},\n\t\t{\"[]byte(str1)\", false, `[]uint8 len: 11, cap: 11, [48,49,50,51,52,53,54,55,56,57,48]`, `[]uint8 len: 11, cap: 11, nil`, \"[]uint8\", nil},\n\t\t{\"[]uint8(str1)\", false, `[]uint8 len: 11, cap: 11, [48,49,50,51,52,53,54,55,56,57,48]`, `[]uint8 len: 11, cap: 11, nil`, \"[]uint8\", nil},\n\t\t{\"[]rune(str1)\", false, `[]int32 len: 11, cap: 11, [48,49,50,51,52,53,54,55,56,57,48]`, `[]int32 len: 11, cap: 11, [48,49,50,51,52,53,54,55,56,57,48]`, \"[]int32\", nil},\n\t\t{\"[]int32(str1)\", false, `[]int32 len: 11, cap: 11, [48,49,50,51,52,53,54,55,56,57,48]`, `[]int32 len: 11, cap: 11, [48,49,50,51,52,53,54,55,56,57,48]`, \"[]int32\", nil},\n\t\t{\"string(byteslice)\", false, `\"tèst\"`, `\"tèst\"`, \"string\", nil},\n\t\t{\"[]int32(string(byteslice))\", false, `[]int32 len: 4, cap: 4, [116,232,115,116]`, `[]int32 len: 4, cap: 4, [116,232,115,116]`, \"[]int32\", nil},\n\t\t{\"string(runeslice)\", false, `\"tèst\"`, `\"tèst\"`, \"string\", nil},\n\t\t{\"[]byte(string(runeslice))\", false, `[]uint8 len: 5, cap: 5, [116,195,168,115,116]`, `[]uint8 len: 5, cap: 5, [116,195,168,115,116]`, \"[]uint8\", nil},\n\t\t{\"*(*[5]byte)(uintptr(&byteslice[0]))\", false, `[5]uint8 [116,195,168,115,116]`, `[5]uint8 [...]`, \"[5]uint8\", nil},\n\t\t{\"string(bytearray)\", false, `\"tèst\"`, `\"tèst\"`, \"string\", nil},\n\t\t{\"string(runearray)\", false, `\"tèst\"`, `\"tèst\"`, \"string\", nil},\n\t\t{\"string(str1)\", false, `\"01234567890\"`, `\"01234567890\"`, \"string\", nil},\n\t\t{\"len([]byte(longstr))\", false, `137`, `137`, \"\", nil},\n\t\t{\"len(string(longbyteslice))\", false, `137`, `137`, \"\", nil},\n\n\t\t// access to channel field members\n\t\t{\"ch1.qcount\", false, \"4\", \"4\", \"uint\", nil},\n\t\t{\"ch1.dataqsiz\", false, \"11\", \"11\", \"uint\", nil},\n\t\t{\"ch1.buf\", false, `*[11]int [1,4,3,2,0,0,0,0,0,0,0]`, `(*[11]int)(…`, \"*[11]int\", nil},\n\t\t{\"ch1.buf[0]\", false, \"1\", \"1\", \"int\", nil},\n\n\t\t// shortcircuited logical operators\n\t\t{\"nilstruct != nil && nilstruct.A == 1\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"nilstruct == nil || nilstruct.A == 1\", false, \"true\", \"true\", \"\", nil},\n\n\t\t{\"afunc\", true, `main.afunc`, `main.afunc`, `func()`, nil},\n\t\t{\"main.afunc2\", true, `main.afunc2`, `main.afunc2`, `func()`, nil},\n\n\t\t{\"s2[0].Error\", false, \"main.(*astruct).Error\", \"main.(*astruct).Error\", \"func() string\", nil},\n\t\t{\"s2[0].NonPointerReceiverMethod\", false, \"main.astruct.NonPointerReceiverMethod\", \"main.astruct.NonPointerReceiverMethod\", \"func()\", nil},\n\t\t{\"as2.Error\", false, \"main.(*astruct).Error\", \"main.(*astruct).Error\", \"func() string\", nil},\n\t\t{\"as2.NonPointerReceiverMethod\", false, \"main.astruct.NonPointerReceiverMethod\", \"main.astruct.NonPointerReceiverMethod\", \"func()\", nil},\n\n\t\t{`iface2map.(data)`, false, \"…\", \"…\", \"map[string]interface {}\", nil},\n\n\t\t{\"issue1578\", false, \"main.Block {cache: *main.Cache nil}\", \"main.Block {cache: *main.Cache nil}\", \"main.Block\", nil},\n\t\t{\"ni8 << 2\", false, \"-20\", \"-20\", \"int8\", nil},\n\t\t{\"ni8 << 8\", false, \"0\", \"0\", \"int8\", nil},\n\t\t{\"ni8 >> 1\", false, \"-3\", \"-3\", \"int8\", nil},\n\t\t{\"bytearray[0] * bytearray[0]\", false, \"144\", \"144\", \"uint8\", nil},\n\n\t\t// function call / typecast errors\n\t\t{\"unknownthing(1, 2)\", false, \"\", \"\", \"\", altErrors(\"function calls not allowed without using 'call'\", \"could not find symbol value for unknownthing\")},\n\t\t{\"(unknownthing)(1, 2)\", false, \"\", \"\", \"\", altErrors(\"function calls not allowed without using 'call'\", \"could not find symbol value for unknownthing\")},\n\t\t{\"afunc(2)\", false, \"\", \"\", \"\", errors.New(\"function calls not allowed without using 'call'\")},\n\t\t{\"(afunc)(2)\", false, \"\", \"\", \"\", errors.New(\"function calls not allowed without using 'call'\")},\n\t\t{\"(*afunc)(2)\", false, \"\", \"\", \"\", errors.New(\"*\")},\n\t\t{\"unknownthing(2)\", false, \"\", \"\", \"\", altErrors(\"function calls not allowed without using 'call'\", \"could not find symbol value for unknownthing\")},\n\t\t{\"(*unknownthing)(2)\", false, \"\", \"\", \"\", altErrors(\"function calls not allowed without using 'call'\", \"could not find symbol value for unknownthing\")},\n\t\t{\"(*strings.Split)(2)\", false, \"\", \"\", \"\", altErrors(\"function calls not allowed without using 'call'\", \"could not find symbol value for strings\")},\n\n\t\t// pretty printing special types\n\t\t{\"tim1\", false, `time.Time(1977-05-25T18:00:00Z)…`, `time.Time(1977-05-25T18:00:00Z)…`, \"time.Time\", nil},\n\t\t{\"tim2\", false, `time.Time(2022-06-07T02:03:04-06:00)…`, `time.Time(2022-06-07T02:03:04-06:00)…`, \"time.Time\", nil},\n\t\t{\"tim3\", false, `time.Time {…`, `time.Time {…`, \"time.Time\", nil},\n\n\t\t// issue #3034 - map access with long string key\n\t\t{`m6[\"very long string 0123456789a0123456789b0123456789c0123456789d0123456789e0123456789f0123456789g012345678h90123456789i0123456789j0123456789\"]`, false, `123`, `123`, \"int\", nil},\n\n\t\t// issue #1423 - special typecasts everywhere\n\t\t{`string(byteslice) == \"tèst\"`, false, `true`, `true`, \"\", nil},\n\n\t\t// issue #3138 - typecast to *interface{} breaking\n\t\t{`*(*interface {})(uintptr(&iface1))`, false, `interface {}(*main.astruct) *{A: 1, B: 2}`, `interface {}(*main.astruct)…`, \"interface {}\", nil},\n\t\t{`*(*struct {})(uintptr(&zsvar))`, false, `struct {} {}`, `struct {} {}`, \"struct {}\", nil},\n\n\t\t// issue #3130 - typecasts that are only valid because of underlying type compatibility\n\t\t{`main.Byte(bytearray[0])`, false, `116`, `116`, \"main.Byte\", nil},\n\t\t{`uint8(bytetypearray[0])`, false, `116`, `116`, \"uint8\", nil},\n\t\t{`main.Byte(2)`, false, `2`, `2`, \"main.Byte\", nil},\n\t\t{`main.String(s1[0])`, false, `\"one\"`, `\"one\"`, \"main.String\", nil},\n\t\t{`string(typedstringvar)`, false, `\"blah\"`, `\"blah\"`, \"string\", nil},\n\t\t{`main.String(\"test\")`, false, `\"test\"`, `\"test\"`, \"main.String\", nil},\n\t\t{`main.astruct(namedA1)`, false, `main.astruct {A: 12, B: 45}`, `main.astruct {A: 12, B: 45}`, \"main.astruct\", nil},\n\t\t{`main.astructName2(namedA1)`, false, `main.astructName2 {A: 12, B: 45}`, `main.astructName2 {A: 12, B: 45}`, \"main.astructName2\", nil},\n\t\t{`(*main.Byte)(&bytearray[0])`, false, `(*main.Byte)(…`, `(*main.Byte)(…`, \"*main.Byte\", nil},\n\t\t{`(*main.String)(&s1[0])`, false, `(*main.String)(…`, `(*main.String)(…`, \"*main.String\", nil},\n\t\t{`(*string)(&typedstringvar)`, false, `(*string)(…`, `(*string)(…`, \"*string\", nil},\n\t\t{`(*main.astruct)(&namedA1)`, false, `(*main.astruct)(…`, `(*main.astruct)(…`, \"*main.astruct\", nil},\n\t\t{`(*main.astructName2)(&namedA1)`, false, `(*main.astructName2)(…`, `(*main.astructName2)(…`, \"*main.astructName2\", nil},\n\n\t\t// Conversions to and from uintptr/unsafe.Pointer\n\t\t{`*(*uint)(uintptr(p1))`, false, `1`, `1`, \"uint\", nil},\n\t\t{`*(*uint)(uintptr(&i1))`, false, `1`, `1`, \"uint\", nil},\n\t\t{`*(*uint)(unsafe.Pointer(p1))`, false, `1`, `1`, \"uint\", nil},\n\t\t{`*(*uint)(unsafe.Pointer(&i1))`, false, `1`, `1`, \"uint\", nil},\n\n\t\t// Malformed values\n\t\t{`badslice`, false, `(unreadable non-zero length array with nil base)`, `(unreadable non-zero length array with nil base)`, \"[]int\", nil},\n\t}\n\n\t// Conversions to ptr-to-ptr types\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 24) {\n\t\ttestcases = append(testcases, varTest{`**(**maps.Map)(uintptr(&m1))`, false, `…`, `…`, \"internal/runtime/maps.Map\", nil})\n\t} else {\n\t\ttestcases = append(testcases, varTest{`**(**runtime.hmap)(uintptr(&m1))`, false, `…`, `…`, \"runtime.hmap\", nil})\n\t}\n\n\tif goversion.VersionAfterOrEqualRev(runtime.Version(), 1, 25, 2) {\n\t\ttestcases = append(testcases, varTest{\"iface7\", true, \"interface {}(main.OnlyUsedInInterface) {s: \\\"test\\\"}\", \"interface {}(main.OnlyUsedInInterface) {s: \\\"test\\\"}\", \"interface {}\", nil})\n\n\t}\n\n\treturn testcases\n}\n\nfunc altErrors(errs ...string) *altError {\n\treturn &altError{errs}\n}\n\ntype altError struct {\n\terrs []string\n}\n\nfunc (err *altError) Error() string {\n\treturn \"[multiple alternatives]\"\n}\n\nfunc TestEvalExpression(t *testing.T) {\n\ttestcases := getEvalExpressionTestCases()\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\tfor i, tc := range testcases {\n\t\t\tt.Run(strconv.Itoa(i), func(t *testing.T) {\n\t\t\t\tt.Logf(\"%q\", tc.name)\n\t\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\t\tif err != nil && err.Error() == \"evaluating methods not supported on this version of Go\" {\n\t\t\t\t\t// this type of eval is unsupported with the current version of Go.\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif err != nil && err.Error() == \"expression *ast.CompositeLit not implemented\" {\n\t\t\t\t\tif runtime.GOARCH == \"386\" {\n\t\t\t\t\t\t// composite literals are currently unsupported on 386\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif tc.err == nil {\n\t\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s) returned an error\", tc.name))\n\t\t\t\t\tassertVariable(t, variable, tc)\n\t\t\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pshortLoadConfig)\n\t\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s, pshortLoadConfig) returned an error\", tc.name))\n\t\t\t\t\tassertVariable(t, variable, tc.alternateVarTest())\n\t\t\t\t} else {\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tt.Fatalf(\"Expected error %s, got no error (%s)\", tc.err.Error(), tc.name)\n\t\t\t\t\t}\n\t\t\t\t\tswitch e := tc.err.(type) {\n\t\t\t\t\tcase *altError:\n\t\t\t\t\t\tif !slices.Contains(e.errs, err.Error()) {\n\t\t\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif tc.err.Error() != \"*\" && tc.err.Error() != err.Error() {\n\t\t\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t})\n}\n\nfunc TestEvalAddrAndCast(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\tc1addr, err := evalVariableWithCfg(p, \"&c1\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"EvalExpression(&c1)\")\n\t\tc1addrstr := api.ConvertVar(c1addr).SinglelineString()\n\t\tt.Logf(\"&c1 → %s\", c1addrstr)\n\t\tif !strings.HasPrefix(c1addrstr, \"(*main.cstruct)(0x\") {\n\t\t\tt.Fatalf(\"Invalid value of EvalExpression(&c1) %q\", c1addrstr)\n\t\t}\n\n\t\taaddr, err := evalVariableWithCfg(p, \"&(c1.pb.a)\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"EvalExpression(&(c1.pb.a))\")\n\t\taaddrstr := api.ConvertVar(aaddr).SinglelineString()\n\t\tt.Logf(\"&(c1.pb.a) → %s\", aaddrstr)\n\t\tif !strings.HasPrefix(aaddrstr, \"(*main.astruct)(0x\") {\n\t\t\tt.Fatalf(\"invalid value of EvalExpression(&(c1.pb.a)) %q\", aaddrstr)\n\t\t}\n\n\t\ta, err := evalVariableWithCfg(p, \"*\"+aaddrstr, pnormalLoadConfig)\n\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(*%s)\", aaddrstr))\n\t\tt.Logf(\"*%s → %s\", aaddrstr, api.ConvertVar(a).SinglelineString())\n\t\tassertVariable(t, a, varTest{aaddrstr, false, \"main.astruct {A: 1, B: 2}\", \"\", \"main.astruct\", nil})\n\t})\n}\n\nfunc TestMapEvaluation(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\tm1v, err := evalVariableWithCfg(p, \"m1\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable()\")\n\t\tm1 := api.ConvertVar(m1v)\n\t\tt.Logf(\"m1 = %v\", multiLineVar(m1v))\n\n\t\tif m1.Type != \"map[string]main.astruct\" {\n\t\t\tt.Fatalf(\"Wrong type: %s\", m1.Type)\n\t\t}\n\n\t\tif len(m1.Children)/2 != 64 {\n\t\t\tt.Fatalf(\"Wrong number of children: %d\", len(m1.Children)/2)\n\t\t}\n\n\t\tm1sliced, err := evalVariableWithCfg(p, \"m1[64:]\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable(m1[64:])\")\n\t\tif len(m1sliced.Children)/2 != int(m1.Len-64) {\n\t\t\tt.Fatalf(\"Wrong number of children (after slicing): %d\", len(m1sliced.Children)/2)\n\t\t}\n\n\t\tcountMalone := func(m *api.Variable) int {\n\t\t\tfound := 0\n\t\t\tfor i := range m.Children {\n\t\t\t\tif i%2 == 0 && m.Children[i].Value == \"Malone\" {\n\t\t\t\t\tfound++\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn found\n\t\t}\n\n\t\tfound := countMalone(m1)\n\t\tfound += countMalone(api.ConvertVar(m1sliced))\n\n\t\tif found != 1 {\n\t\t\tt.Fatalf(\"Could not find Malone exactly 1 time: found %d\", found)\n\t\t}\n\t})\n}\n\nfunc TestUnsafePointer(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\tup1v, err := evalVariableWithCfg(p, \"up1\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable(up1)\")\n\t\tup1 := api.ConvertVar(up1v)\n\t\tif ss := up1.SinglelineString(); !strings.HasPrefix(ss, \"unsafe.Pointer(\") {\n\t\t\tt.Fatalf(\"wrong value for up1: %s\", ss)\n\t\t}\n\t})\n}\n\ntype issue426TestCase struct {\n\tname string\n\ttyp  string\n}\n\nfunc TestIssue426(t *testing.T) {\n\t// type casts using quoted type names\n\ttestcases := []issue426TestCase{\n\t\t{\"iface1\", `interface {}`},\n\t\t{\"mapanonstruct1\", `map[string]struct {}`},\n\t\t{\"anonstruct1\", `struct { val go/constant.Value }`},\n\t\t{\"anonfunc\", `func(struct { i int }, interface {}, struct { val go/constant.Value })`},\n\t\t{\"anonstruct2\", `struct { i int; j int }`},\n\t\t{\"anoniface1\", `interface { OtherFunction(int, int); SomeFunction(struct { val go/constant.Value }) }`},\n\t}\n\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major < 0 || ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 8, Rev: -1}) {\n\t\ttestcases[2].typ = `struct { main.val go/constant.Value }`\n\t\ttestcases[3].typ = `func(struct { main.i int }, interface {}, struct { main.val go/constant.Value })`\n\t\ttestcases[4].typ = `struct { main.i int; main.j int }`\n\t\ttestcases[5].typ = `interface { OtherFunction(int, int); SomeFunction(struct { main.val go/constant.Value }) }`\n\t}\n\n\t// Serialization of type expressions (go/ast.Expr) containing anonymous structs or interfaces\n\t// differs from the serialization used by the linker to produce DWARF type information\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\tfor _, testcase := range testcases {\n\t\t\tv, err := evalVariableWithCfg(p, testcase.name, pnormalLoadConfig)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalVariable(%s)\", testcase.name))\n\t\t\tt.Logf(\"%s → %s\", testcase.name, v.RealType.String())\n\t\t\texpr := fmt.Sprintf(\"(*%q)(%d)\", testcase.typ, v.Addr)\n\t\t\t_, err = evalVariableWithCfg(p, expr, pnormalLoadConfig)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalVariable(%s)\", expr))\n\t\t}\n\t})\n}\n\nfunc testPackageRenamesHelper(t *testing.T, p *proc.Target, testcases []varTest) {\n\tfor _, tc := range testcases {\n\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\tif tc.err == nil {\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s) returned an error\", tc.name))\n\t\t\tassertVariable(t, variable, tc)\n\t\t} else {\n\t\t\tif err == nil {\n\t\t\t\tt.Fatalf(\"Expected error %s, got no error (%s)\", tc.err.Error(), tc.name)\n\t\t\t}\n\t\t\tif tc.err.Error() != err.Error() {\n\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestPackageRenames(t *testing.T) {\n\t// Tests that the concrete type of an interface variable is resolved\n\t// correctly in a few edge cases, in particular:\n\t// - in the presence of renamed imports\n\t// - when two packages with the same name are imported\n\t// - when a package has a canonical name that's different from its\n\t// path (for example the last element of the path contains a '.' or a\n\t// '-' or because the package name is different)\n\t// all of those edge cases are tested within composite types\n\ttestcases := []varTest{\n\t\t// Renamed imports\n\t\t{\"badexpr\", true, `interface {}(*go/ast.BadExpr) *{From: 1, To: 2}`, \"\", \"interface {}\", nil},\n\t\t{\"req\", true, `interface {}(*net/http.Request) *{Method: \"amethod\", …`, \"\", \"interface {}\", nil},\n\n\t\t// Package name that doesn't match import path\n\t\t{\"iface3\", true, `interface {}(*github.com/go-delve/delve/_fixtures/internal/dir0/renamedpackage.SomeType) *{A: true}`, \"\", \"interface {}\", nil},\n\n\t\t// Interfaces to anonymous types\n\t\t{\"dir0someType\", true, \"interface {}(*github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType) *{X: 3}\", \"\", \"interface {}\", nil},\n\t\t{\"dir1someType\", true, \"interface {}(github.com/go-delve/delve/_fixtures/internal/dir1/pkg.SomeType) {X: 1, Y: 2}\", \"\", \"interface {}\", nil},\n\t\t{\"amap3\", true, \"interface {}(map[github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType]github.com/go-delve/delve/_fixtures/internal/dir1/pkg.SomeType) [{X: 4}: {X: 5, Y: 6}, ]\", \"\", \"interface {}\", nil},\n\t\t{\"anarray\", true, `interface {}([2]github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType) [{X: 1},{X: 2}]`, \"\", \"interface {}\", nil},\n\t\t{\"achan\", true, `interface {}(chan github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType) chan github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType 0/0`, \"\", \"interface {}\", nil},\n\t\t{\"aslice\", true, `interface {}([]github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType) [{X: 3},{X: 4}]`, \"\", \"interface {}\", nil},\n\t\t{\"afunc\", true, `interface {}(func(github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType, github.com/go-delve/delve/_fixtures/internal/dir1/pkg.SomeType)) main.main.func1`, \"\", \"interface {}\", nil},\n\t\t{\"astruct\", true, `interface {}(*struct { A github.com/go-delve/delve/_fixtures/internal/dir1/pkg.SomeType; B github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType }) *{A: github.com/go-delve/delve/_fixtures/internal/dir1/pkg.SomeType {X: 1, Y: 2}, B: github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType {X: 3}}`, \"\", \"interface {}\", nil},\n\t\t{\"iface2iface\", true, `interface {}(*interface { AMethod(int) int; AnotherMethod(int) int }) **github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType {X: 4}`, \"\", \"interface {}\", nil},\n\n\t\t{`\"dir0/pkg\".A`, false, \"0\", \"\", \"int\", nil},\n\t\t{`\"dir1/pkg\".A`, false, \"1\", \"\", \"int\", nil},\n\n\t\t{\"amap\", true, \"interface {}(map[go/ast.BadExpr]net/http.Request) [{From: 2, To: 3}: {Method: \\\"othermethod\\\", …\", \"\", \"interface {}\", nil},\n\t\t{\"amap2\", true, \"interface {}(*map[go/ast.BadExpr]net/http.Request) *[{From: 2, To: 3}: {Method: \\\"othermethod\\\", …\", \"\", \"interface {}\", nil},\n\t}\n\n\ttestcases1_9 := []varTest{\n\t\t{\"astruct2\", true, `interface {}(*struct { github.com/go-delve/delve/_fixtures/internal/dir1/pkg.SomeType; X int }) *{SomeType: github.com/go-delve/delve/_fixtures/internal/dir1/pkg.SomeType {X: 1, Y: 2}, X: 10}`, \"\", \"interface {}\", nil},\n\t}\n\n\ttestcases1_13 := []varTest{\n\t\t// needs DW_AT_go_package_name attribute added to Go1.13\n\t\t{`dirio.A`, false, `\"something\"`, \"\", \"string\", nil},\n\t}\n\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 7) {\n\t\treturn\n\t}\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"pkgrenames\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\ttestPackageRenamesHelper(t, p, testcases)\n\n\t\ttestPackageRenamesHelper(t, p, testcases1_9)\n\n\t\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 13) {\n\t\t\ttestPackageRenamesHelper(t, p, testcases1_13)\n\t\t}\n\t})\n}\n\nfunc TestConstants(t *testing.T) {\n\ttestcases := []varTest{\n\t\t{\"a\", true, \"constTwo (2)\", \"0x2\", \"main.ConstType\", nil},\n\t\t{\"b\", true, \"constThree (3)\", \"0x3\", \"main.ConstType\", nil},\n\t\t{\"c\", true, \"bitZero|bitOne (3)\", \"0x3\", \"main.BitFieldType\", nil},\n\t\t{\"d\", true, \"33\", \"0x21\", \"main.BitFieldType\", nil},\n\t\t{\"e\", true, \"10\", \"0xa\", \"main.ConstType\", nil},\n\t\t{\"f\", true, \"0\", \"0x0\", \"main.BitFieldType\", nil},\n\t\t{\"bitZero\", true, \"1\", \"0x1\", \"main.BitFieldType\", nil},\n\t\t{\"bitOne\", true, \"2\", \"0x2\", \"main.BitFieldType\", nil},\n\t\t{\"constTwo\", true, \"2\", \"0x2\", \"main.ConstType\", nil},\n\t\t{\"pkg.SomeConst\", false, \"2\", \"0x2\", \"int\", nil},\n\t}\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major > 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\t// Not supported on 1.9 or earlier\n\t\tt.Skip(\"constants added in go 1.10\")\n\t}\n\twithTestProcess(\"consts\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\tfor _, testcase := range testcases {\n\t\t\tvariable, err := evalVariableWithCfg(p, testcase.name, pnormalLoadConfig)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalVariable(%s)\", testcase.name))\n\t\t\tassertVariable(t, variable, testcase)\n\t\t\tcv := api.ConvertVar(variable)\n\t\t\tstr := cv.StringWithOptions(\"\", \"%#x\", 0)\n\t\t\tif str != testcase.alternate {\n\t\t\t\tt.Errorf(\"for %s expected %q got %q when formatting in hexadecimal\", testcase.name, testcase.alternate, str)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestIssue1075(t *testing.T) {\n\twithTestProcess(\"clientdo\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFunctionBreakpoint(p, t, \"net/http.(*Client).Do\")\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tfor i := range 10 {\n\t\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"GoroutineScope (%d)\", i))\n\t\t\tvars, err := scope.LocalVariables(pnormalLoadConfig)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"LocalVariables (%d)\", i))\n\t\t\tfor _, v := range vars {\n\t\t\t\tapi.ConvertVar(v).SinglelineString()\n\t\t\t}\n\t\t}\n\t})\n}\n\ntype testCaseCallFunction struct {\n\texpr     string   // call expression to evaluate\n\touts     []string // list of return parameters in this format: <param name>:<param type>:<param value>\n\terr      error    // if not nil should return an error\n\tpinCount int      // where debugPinner is supported this is the number of pins created during the function call injection\n}\n\nfunc TestCallFunction(t *testing.T) {\n\tskipOn(t, \"broken - pie mode\", \"linux\", \"ppc64le\", \"native\", \"pie\")\n\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\tprotest.AllowRecording(t)\n\n\tvar testcases = []testCaseCallFunction{\n\t\t// Basic function call injection tests\n\n\t\t{\"call1(one, two)\", []string{\":int:3\"}, nil, 0},\n\t\t{\"call1(one+two, 4)\", []string{\":int:7\"}, nil, 0},\n\t\t{\"callpanic()\", []string{`~panic:interface {}:interface {}(string) \"callpanic panicked\"`}, nil, 0},\n\t\t{`stringsJoin(nil, \"\")`, []string{`:string:\"\"`}, nil, 0},\n\t\t{`stringsJoin(stringslice, comma)`, []string{`:string:\"one,two,three\"`}, nil, 0},\n\t\t{`stringsJoin(stringslice, \"~~\")`, []string{`:string:\"one~~two~~three\"`}, nil, 1},\n\t\t{`stringsJoin(s1, comma)`, nil, errors.New(`could not find symbol value for s1`), 1},\n\t\t{`stringsJoin(intslice, comma)`, nil, errors.New(\"can not convert value of type []int to []string\"), 1},\n\t\t{`noreturncall(2)`, nil, nil, 0},\n\n\t\t// Expression tests\n\t\t{`square(2) + 1`, []string{\":int:5\"}, nil, 0},\n\t\t{`intcallpanic(1) + 1`, []string{\":int:2\"}, nil, 0},\n\t\t{`intcallpanic(0) + 1`, []string{`~panic:interface {}:interface {}(string) \"panic requested\"`}, nil, 0},\n\t\t{`onetwothree(5)[1] + 2`, []string{\":int:9\"}, nil, 1},\n\n\t\t// Call types tests (methods, function pointers, etc.)\n\t\t// The following set of calls was constructed using https://docs.google.com/document/d/1bMwCey-gmqZVTpRax-ESeVuZGmjwbocYs1iHplK-cjo/pub as a reference\n\n\t\t{`a.VRcvr(1)`, []string{`:string:\"1 + 3 = 4\"`}, nil, 0}, // direct call of a method with value receiver / on a value\n\n\t\t{`a.PRcvr(2)`, []string{`:string:\"2 - 3 = -1\"`}, nil, 0},  // direct call of a method with pointer receiver / on a value\n\t\t{`pa.VRcvr(3)`, []string{`:string:\"3 + 6 = 9\"`}, nil, 0},  // direct call of a method with value receiver / on a pointer\n\t\t{`pa.PRcvr(4)`, []string{`:string:\"4 - 6 = -2\"`}, nil, 0}, // direct call of a method with pointer receiver / on a pointer\n\n\t\t{`vable_pa.VRcvr(6)`, []string{`:string:\"6 + 6 = 12\"`}, nil, 0}, // indirect call of method on interface / containing value with value method\n\t\t{`pable_pa.PRcvr(7)`, []string{`:string:\"7 - 6 = 1\"`}, nil, 0},  // indirect call of method on interface / containing pointer with value method\n\t\t{`vable_a.VRcvr(5)`, []string{`:string:\"5 + 3 = 8\"`}, nil, 0},   // indirect call of method on interface / containing pointer with pointer method\n\n\t\t{`pa.nonexistent()`, nil, errors.New(\"pa has no member nonexistent\"), 0},\n\t\t{`a.nonexistent()`, nil, errors.New(\"a has no member nonexistent\"), 0},\n\t\t{`vable_pa.nonexistent()`, nil, errors.New(\"vable_pa has no member nonexistent\"), 0},\n\t\t{`vable_a.nonexistent()`, nil, errors.New(\"vable_a has no member nonexistent\"), 0},\n\t\t{`pable_pa.nonexistent()`, nil, errors.New(\"pable_pa has no member nonexistent\"), 0},\n\n\t\t{`fn2glob(10, 20)`, []string{\":int:30\"}, nil, 0},               // indirect call of func value / set to top-level func\n\t\t{`fn2clos(11)`, []string{`:string:\"1 + 6 + 11 = 18\"`}, nil, 0}, // indirect call of func value / set to func literal\n\t\t{`fn2clos(12)`, []string{`:string:\"2 + 6 + 12 = 20\"`}, nil, 0},\n\t\t{`fn2valmeth(13)`, []string{`:string:\"13 + 6 = 19\"`}, nil, 0}, // indirect call of func value / set to value method\n\t\t{`fn2ptrmeth(14)`, []string{`:string:\"14 - 6 = 8\"`}, nil, 0},  // indirect call of func value / set to pointer method\n\n\t\t{\"fn2nil()\", nil, errors.New(\"nil pointer dereference\"), 0},\n\n\t\t{\"ga.PRcvr(2)\", []string{`:string:\"2 - 0 = 2\"`}, nil, 0},\n\n\t\t{\"x.CallMe()\", nil, nil, 0},\n\t\t{\"x2.CallMe(5)\", []string{\":int:25\"}, nil, 0},\n\n\t\t{\"\\\"delve\\\".CallMe()\", nil, errors.New(\"\\\"delve\\\" (type string) is not a struct\"), 0},\n\n\t\t// Nested function calls tests\n\n\t\t{`onetwothree(intcallpanic(2))`, []string{`:[]int:[]int len: 3, cap: 3, [3,4,5]`}, nil, 0},\n\t\t{`onetwothree(intcallpanic(0))`, []string{`~panic:interface {}:interface {}(string) \"panic requested\"`}, nil, 0},\n\t\t{`onetwothree(intcallpanic(2)+1)`, []string{`:[]int:[]int len: 3, cap: 3, [4,5,6]`}, nil, 0},\n\t\t{`onetwothree(intcallpanic(\"not a number\"))`, nil, altErrors(\"can not convert \\\"not a number\\\" constant to int\", \"literal string can not be allocated because function calls are not allowed without using 'call'\"), 1},\n\n\t\t// Variable setting tests\n\t\t{`pa2 = getAStructPtr(8); pa2`, []string{`pa2:*main.astruct:*main.astruct {X: 8}`}, nil, 1},\n\n\t\t// Escape tests\n\n\t\t{\"escapeArg(&a2)\", nil, errors.New(\"cannot use &a2 as argument pa2 in function main.escapeArg: stack object passed to escaping pointer: pa2\"), 0},\n\n\t\t// Issue 1577\n\t\t{\"1+2\", []string{`::3`}, nil, 0},\n\t\t{`\"de\"+\"mo\"`, []string{`::\"demo\"`}, nil, 0},\n\n\t\t// Issue 3176\n\t\t{`ref.String()[0]`, []string{`:byte:98`}, nil, 1},\n\t\t{`ref.String()[20]`, nil, errors.New(\"index out of bounds\"), 1},\n\n\t\t// Issue 4136\n\t\t{`nilptrtostruct.VRcvr(0)`, []string{}, errors.New(\"nil pointer dereference\"), 0},\n\t}\n\n\tvar testcases112 = []testCaseCallFunction{\n\t\t// string allocation requires trusted argument order, which we don't have in Go 1.11\n\t\t{`stringsJoin(stringslice, \",\")`, []string{`:string:\"one,two,three\"`}, nil, 1},\n\t\t{`str = \"a new string\"; str`, []string{`str:string:\"a new string\"`}, nil, 1},\n\n\t\t// support calling optimized functions\n\t\t{`strings.Join(nil, \"\")`, []string{`:string:\"\"`}, nil, 0},\n\t\t{`strings.Join(stringslice, comma)`, []string{`:string:\"one,two,three\"`}, nil, 0},\n\t\t{`strings.Join(intslice, comma)`, nil, errors.New(\"can not convert value of type []int to []string\"), 1},\n\t\t{`strings.Join(stringslice, \",\")`, []string{`:string:\"one,two,three\"`}, nil, 1},\n\t\t{`strings.LastIndexByte(stringslice[1], 'w')`, []string{\":int:1\"}, nil, 0},\n\t\t{`strings.LastIndexByte(stringslice[1], 'o')`, []string{\":int:2\"}, nil, 0},\n\t\t{`d.Base.Method()`, []string{`:int:4`}, nil, 0},\n\t\t{`d.Method()`, []string{`:int:4`}, nil, 0},\n\t}\n\n\tvar testcases113 = []testCaseCallFunction{\n\t\t{`curriedAdd(2)(3)`, []string{`:int:5`}, nil, 1},\n\n\t\t// Method calls on a value returned by a function\n\n\t\t{`getAStruct(3).VRcvr(1)`, []string{`:string:\"1 + 3 = 4\"`}, nil, 0}, // direct call of a method with value receiver / on a value\n\n\t\t{`getAStruct(3).PRcvr(2)`, nil, errors.New(\"could not set call receiver: cannot use getAStruct(3).PRcvr as argument pa in function main.(*astruct).PRcvr: stack object passed to escaping pointer: pa\"), 0}, // direct call of a method with pointer receiver / on a value\n\t\t{`getAStructPtr(6).VRcvr(3)`, []string{`:string:\"3 + 6 = 9\"`}, nil, 1},  // direct call of a method with value receiver / on a pointer\n\t\t{`getAStructPtr(6).PRcvr(4)`, []string{`:string:\"4 - 6 = -2\"`}, nil, 1}, // direct call of a method with pointer receiver / on a pointer\n\n\t\t{`getVRcvrableFromAStruct(3).VRcvr(6)`, []string{`:string:\"6 + 3 = 9\"`}, nil, 2},     // indirect call of method on interface / containing value with value method\n\t\t{`getPRcvrableFromAStructPtr(6).PRcvr(7)`, []string{`:string:\"7 - 6 = 1\"`}, nil, 2},  // indirect call of method on interface / containing pointer with value method\n\t\t{`getVRcvrableFromAStructPtr(6).VRcvr(5)`, []string{`:string:\"5 + 6 = 11\"`}, nil, 2}, // indirect call of method on interface / containing pointer with pointer method\n\t}\n\n\tvar testcasesBefore114After112 = []testCaseCallFunction{\n\t\t{`strings.Join(s1, comma)`, nil, errors.New(`could not find symbol value for s1`), 1},\n\t}\n\n\tvar testcases114 = []testCaseCallFunction{\n\t\t{`strings.Join(s1, comma)`, nil, errors.New(`could not find symbol value for s1`), 1},\n\t}\n\n\tvar testcases117 = []testCaseCallFunction{\n\t\t{`regabistacktest(\"one\", \"two\", \"three\", \"four\", \"five\", 4)`, []string{`:string:\"onetwo\"`, `:string:\"twothree\"`, `:string:\"threefour\"`, `:string:\"fourfive\"`, `:string:\"fiveone\"`, \":uint8:8\"}, nil, 5},\n\t\t{`regabistacktest2(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)`, []string{\":int:3\", \":int:5\", \":int:7\", \":int:9\", \":int:11\", \":int:13\", \":int:15\", \":int:17\", \":int:19\", \":int:11\"}, nil, 0},\n\t\t{`issue2698.String()`, []string{`:string:\"1 2 3 4\"`}, nil, 0},\n\t\t{`issue3364.String()`, []string{`:string:\"1 2\"`}, nil, 0},\n\t\t{`regabistacktest3(rast3, 5)`, []string{`:[10]string:[10]string [\"onetwo\",\"twothree\",\"threefour\",\"fourfive\",\"fivesix\",\"sixseven\",\"sevenheight\",\"heightnine\",\"nineten\",\"tenone\"]`, \":uint8:15\"}, nil, 0},\n\t\t{`floatsum(1, 2)`, []string{\":float64:3\"}, nil, 0},\n\t}\n\n\tvar testcases123 = []testCaseCallFunction{\n\t\t{`mul2(main.a2struct{Y: 3})`, []string{\":int:6\"}, nil, 0},\n\t\t{`mul2(main.a2struct{4})`, []string{\":int:8\"}, nil, 0},\n\t\t{`mul2ptr(&main.a2struct{Y: 3})`, []string{\":int:6\"}, nil, 1},\n\t\t{`mul2ptr(&main.a2struct{1})`, []string{\":int:2\"}, nil, 1},\n\t\t{`m[main.intpair{3, 1}]`, []string{`:string:\"three,one\"`}, nil, 0},\n\t}\n\n\twithTestProcessArgs(\"fncall\", t, \".\", nil, protest.AllNonOptimized, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\ttestCallFunctionSetBreakpoint(t, p, grp, fixture)\n\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tfor _, tc := range testcases {\n\t\t\ttestCallFunction(t, grp, p, tc)\n\t\t}\n\n\t\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 12) {\n\t\t\tfor _, tc := range testcases112 {\n\t\t\t\ttestCallFunction(t, grp, p, tc)\n\t\t\t}\n\t\t\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 14) {\n\t\t\t\tfor _, tc := range testcasesBefore114After112 {\n\t\t\t\t\ttestCallFunction(t, grp, p, tc)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 13) {\n\t\t\tfor _, tc := range testcases113 {\n\t\t\t\ttestCallFunction(t, grp, p, tc)\n\t\t\t}\n\t\t}\n\n\t\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 14) {\n\t\t\tfor _, tc := range testcases114 {\n\t\t\t\ttestCallFunction(t, grp, p, tc)\n\t\t\t}\n\t\t}\n\n\t\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 17) {\n\t\t\tfor _, tc := range testcases117 {\n\t\t\t\ttestCallFunction(t, grp, p, tc)\n\t\t\t}\n\t\t}\n\n\t\tfor _, tc := range testcases123 {\n\t\t\ttestCallFunction(t, grp, p, tc)\n\t\t}\n\n\t\t// LEAVE THIS AS THE LAST ITEM, IT BREAKS THE TARGET PROCESS!!!\n\t\ttestCallFunction(t, grp, p, testCaseCallFunction{\"-unsafe escapeArg(&a2)\", nil, nil, 0})\n\t})\n}\n\nfunc testCallFunctionSetBreakpoint(t *testing.T, p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\tbuf, err := os.ReadFile(fixture.Source)\n\tassertNoError(err, t, \"ReadFile\")\n\tfor i, line := range strings.Split(string(buf), \"\\n\") {\n\t\tif strings.Contains(line, \"// breakpoint here\") {\n\t\t\tsetFileBreakpoint(p, t, fixture.Source, i+1)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc testCallFunction(t *testing.T, grp *proc.TargetGroup, p *proc.Target, tc testCaseCallFunction) {\n\tt.Run(tc.expr, func(t *testing.T) {\n\t\ttestCallFunctionIntl(t, grp, p, tc)\n\t})\n}\n\nfunc testCallFunctionIntl(t *testing.T, grp *proc.TargetGroup, p *proc.Target, tc testCaseCallFunction) {\n\tconst unsafePrefix = \"-unsafe \"\n\n\tvar callExpr, varExpr string\n\n\tif semicolon := strings.Index(tc.expr, \";\"); semicolon >= 0 {\n\t\tcallExpr = tc.expr[:semicolon]\n\t\tvarExpr = tc.expr[semicolon+1:]\n\t} else {\n\t\tcallExpr = tc.expr\n\t}\n\n\tcheckEscape := true\n\tif strings.HasPrefix(callExpr, unsafePrefix) {\n\t\tcallExpr = callExpr[len(unsafePrefix):]\n\t\tcheckEscape = false\n\t}\n\tt.Logf(\"call %q\", tc.expr)\n\terr := proc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), callExpr, pnormalLoadConfig, checkEscape)\n\tif tc.err != nil {\n\t\tt.Logf(\"\\terr = %v\\n\", err)\n\t\tif err == nil {\n\t\t\tt.Fatalf(\"call %q: expected error %q, got no error\", tc.expr, tc.err.Error())\n\t\t}\n\t\tswitch e := tc.err.(type) {\n\t\tcase *altError:\n\t\t\tif !slices.Contains(e.errs, err.Error()) {\n\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t}\n\t\tdefault:\n\t\t\tif tc.err.Error() != err.Error() {\n\t\t\t\tt.Fatalf(\"call %q: expected error %q, got %q\", tc.expr, tc.err.Error(), err.Error())\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\tif err != nil {\n\t\tif strings.HasPrefix(err.Error(), \"internal debugger error\") {\n\t\t\tt.Fatalf(\"call %q: error %s\", tc.expr, err.Error())\n\t\t} else {\n\t\t\tt.Fatalf(\"call %q: error %q\", tc.expr, err.Error())\n\t\t}\n\t}\n\n\tretvalsVar := p.CurrentThread().Common().ReturnValues(pnormalLoadConfig)\n\tretvals := make([]*api.Variable, len(retvalsVar))\n\n\tfor i := range retvals {\n\t\tretvals[i] = api.ConvertVar(retvalsVar[i])\n\t}\n\n\tif varExpr != \"\" {\n\t\tscope, err := proc.GoroutineScope(p, p.CurrentThread())\n\t\tassertNoError(err, t, \"GoroutineScope\")\n\t\tv, err := scope.EvalExpression(varExpr, pnormalLoadConfig)\n\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s)\", varExpr))\n\t\tretvals = append(retvals, api.ConvertVar(v))\n\t}\n\n\tfor i := range retvals {\n\t\tt.Logf(\"\\t%s = %s\", retvals[i].Name, retvals[i].SinglelineString())\n\t}\n\n\tif len(retvals) != len(tc.outs) {\n\t\tt.Logf(\"call %q: wrong number of return parameters (%#v)\", tc.expr, retvals)\n\t\tfor i := range retvals {\n\t\t\tt.Logf(\"%d: %#v\", i, retvals[i])\n\t\t}\n\t\tt.Fatal(\"previous errors\")\n\t}\n\n\tfor i := range retvals {\n\t\toutfields := strings.SplitN(tc.outs[i], \":\", 3)\n\t\ttgtName, tgtType, tgtValue := outfields[0], outfields[1], outfields[2]\n\n\t\tif tgtName != \"\" && tgtName != retvals[i].Name {\n\t\t\tt.Fatalf(\"call %q output parameter %d: expected name %q, got %q\", tc.expr, i, tgtName, retvals[i].Name)\n\t\t}\n\n\t\tif retvals[i].Type != tgtType {\n\t\t\tt.Fatalf(\"call %q, output parameter %d: expected type %q, got %q\", tc.expr, i, tgtType, retvals[i].Type)\n\t\t}\n\t\tif cvs := retvals[i].SinglelineString(); cvs != tgtValue {\n\t\t\tt.Fatalf(\"call %q, output parameter %d: expected value %q, got %q\", tc.expr, i, tgtValue, cvs)\n\t\t}\n\t}\n\n\tif p.BinInfo().HasDebugPinner() {\n\t\tt.Logf(\"\\t(pins = %d)\", proc.DebugPinCount())\n\t\tif proc.DebugPinCount() != tc.pinCount {\n\t\t\tt.Fatalf(\"call %q, expected pin count %d, got %d\", tc.expr, tc.pinCount, proc.DebugPinCount())\n\t\t}\n\t}\n}\n\nfunc TestIssue4051(t *testing.T) {\n\tif testBackend == \"rr\" {\n\t\tt.Skip(\"Skipping TestIssue4051 for rr backend due to Go runtime changes in newer versions\")\n\t}\n\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"issue4051\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\terr := grp.Continue()\n\t\tassertNoError(err, t, \"initial continue to breakpoint failed\")\n\n\t\terr = proc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), `main.Hello(\"world\")`, pnormalLoadConfig, true)\n\t\tif err == nil {\n\t\t\tt.Fatal(\"expected error, got nil\")\n\t\t}\n\t\texpectedError := \"package main has no function Hello\"\n\t\tif err.Error() != expectedError {\n\t\t\tt.Fatalf(\"expected error %q, got %q\", expectedError, err)\n\t\t}\n\n\t\terr = grp.Continue()\n\t\tassertNoError(err, t, \"initial continue to breakpoint failed\")\n\t\terr = proc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), `main.Hello(\"world\")`, pnormalLoadConfig, true)\n\t\tif err == nil {\n\t\t\tt.Fatal(\"expected error, got nil\")\n\t\t}\n\n\t\texpectedError = `expression \"main.Hello\" is not a function`\n\t\tif err.Error() != expectedError {\n\t\t\tt.Fatalf(\"expected error %q, got %q\", expectedError, err)\n\t\t}\n\n\t\tv, err := evalVariableWithCfg(p, \"main.Hello\", pshortLoadConfig)\n\t\tassertNoError(err, t, \"eval of main.Hello returned an error\")\n\t\tassertVariable(t, v, varTest{\"main.Hello\", true, `\"World\"`, ``, `string`, nil})\n\n\t\tv, err = evalVariableWithCfg(p, \"os.a\", pshortLoadConfig)\n\t\tassertNoError(err, t, \"eval of os.a returned an error\")\n\t\tassertVariable(t, v, varTest{\"os.a\", true, \"1\", ``, `int`, nil})\n\n\t\t// TODO(deparker): we *should* get an error here, but the one we expect in this test\n\t\t// is not the ideal error. We should really improve type checking in the evaluator.\n\t\tv, err = evalVariableWithCfg(p, \"main.f.func1.i\", pshortLoadConfig)\n\t\texpectedError = `main.f has no member func1`\n\t\tif err.Error() != expectedError {\n\t\t\tt.Fatalf(\"expected error %q, got %q\", expectedError, err)\n\t\t}\n\n\t\t_, err = evalVariableWithCfg(p, \"main.f.func1.somethingthatdoesntexist\", pshortLoadConfig)\n\t\texpectedError = `main.f has no member func1`\n\t\tif err.Error() != expectedError {\n\t\t\tt.Fatalf(\"expected error %q, got %q\", expectedError, err)\n\t\t}\n\t})\n}\n\nfunc TestIssue1531(t *testing.T) {\n\t// Go 1.12 introduced a change to the map representation where empty cells can be marked with 1 instead of just 0.\n\twithTestProcess(\"issue1531\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\thasKeys := func(mv *proc.Variable, keys ...string) {\n\t\t\tn := 0\n\t\t\tfor i := 0; i < len(mv.Children); i += 2 {\n\t\t\t\tcv := &mv.Children[i]\n\t\t\t\ts := constant.StringVal(cv.Value)\n\t\t\t\tif !slices.Contains(keys, s) {\n\t\t\t\t\tt.Errorf(\"key %q not allowed\", s)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tn++\n\t\t\t}\n\t\t\tif n != len(keys) {\n\t\t\t\tt.Fatalf(\"wrong number of keys found\")\n\t\t\t}\n\t\t}\n\n\t\tmv, err := evalVariableWithCfg(p, \"m\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable(m)\")\n\t\tcmv := api.ConvertVar(mv)\n\t\tt.Logf(\"m = %s\", cmv.SinglelineString())\n\t\thasKeys(mv, \"s\", \"r\", \"v\")\n\n\t\tmmv, err := evalVariableWithCfg(p, \"mm\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable(mm)\")\n\t\tcmmv := api.ConvertVar(mmv)\n\t\tt.Logf(\"mm = %s\", cmmv.SinglelineString())\n\t\thasKeys(mmv, \"r\", \"t\", \"v\")\n\t})\n}\n\nfunc currentLocation(p *proc.Target, t *testing.T) (pc uint64, f string, ln int, fn *proc.Function) {\n\tregs, err := p.CurrentThread().Registers()\n\tif err != nil {\n\t\tt.Fatalf(\"Registers error: %v\", err)\n\t}\n\tf, l, fn := p.BinInfo().PCToLine(regs.PC())\n\tt.Logf(\"at %#x %s:%d %v\", regs.PC(), f, l, fn)\n\treturn regs.PC(), f, l, fn\n}\n\nfunc assertCurrentLocationFunction(p *proc.Target, t *testing.T, fnname string) {\n\t_, _, _, fn := currentLocation(p, t)\n\tif fn == nil {\n\t\tt.Fatalf(\"Not in a function\")\n\t}\n\tif fn.Name != fnname {\n\t\tt.Fatalf(\"Wrong function %s %s\", fn.Name, fnname)\n\t}\n}\n\nfunc TestPluginVariables(t *testing.T) {\n\tskipOn(t, \"broken\", \"ppc64le\")\n\tpluginFixtures := protest.WithPlugins(t, protest.AllNonOptimized, \"plugin1/\", \"plugin2/\")\n\n\twithTestProcessArgs(\"plugintest2\", t, \".\", []string{pluginFixtures[0].Path, pluginFixtures[1].Path}, protest.AllNonOptimized, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 41)\n\t\tassertNoError(grp.Continue(), t, \"Continue 1\")\n\n\t\tbp := setFunctionBreakpoint(p, t, \"github.com/go-delve/delve/_fixtures/plugin2.TypesTest\")\n\t\tt.Logf(\"bp.Addr = %#x\", bp.Addr)\n\t\tsetFunctionBreakpoint(p, t, \"github.com/go-delve/delve/_fixtures/plugin2.aIsNotNil\")\n\n\t\tfor _, image := range p.BinInfo().Images {\n\t\t\tt.Logf(\"%#x %s\\n\", image.StaticBase, image.Path)\n\t\t}\n\n\t\tassertNoError(grp.Continue(), t, \"Continue 2\")\n\n\t\t// test that PackageVariables returns variables from the executable and plugins\n\t\tscope, err := evalScope(p)\n\t\tassertNoError(err, t, \"evalScope\")\n\t\tallvars, err := scope.PackageVariables(pnormalLoadConfig)\n\t\tassertNoError(err, t, \"PackageVariables\")\n\t\tvar plugin2AFound, mainExeGlobalFound bool\n\t\tfor _, v := range allvars {\n\t\t\tswitch v.Name {\n\t\t\tcase \"github.com/go-delve/delve/_fixtures/plugin2.A\":\n\t\t\t\tplugin2AFound = true\n\t\t\tcase \"main.ExeGlobal\":\n\t\t\t\tmainExeGlobalFound = true\n\t\t\t}\n\t\t}\n\t\tif !plugin2AFound {\n\t\t\tt.Fatalf(\"variable plugin2.A not found in the output of PackageVariables\")\n\t\t}\n\t\tif !mainExeGlobalFound {\n\t\t\tt.Fatalf(\"variable main.ExeGlobal not found in the output of PackageVariables\")\n\t\t}\n\n\t\t// read interface variable, inside plugin code, with a concrete type defined in the executable\n\t\tvs, err := evalVariableWithCfg(p, \"s\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"Eval(s)\")\n\t\tassertVariable(t, vs, varTest{\"s\", true, `github.com/go-delve/delve/_fixtures/internal/pluginsupport.Something(*main.asomething) *{n: 2}`, ``, `github.com/go-delve/delve/_fixtures/internal/pluginsupport.Something`, nil})\n\n\t\t// test that the concrete type -> interface{} conversion works across plugins (mostly tests proc.dwarfToRuntimeType)\n\t\tassertNoError(setVariable(p, \"plugin2.A\", \"main.ExeGlobal\"), t, \"setVariable(plugin2.A = main.ExeGlobal)\")\n\t\tassertNoError(grp.Continue(), t, \"Continue 3\")\n\t\tassertCurrentLocationFunction(p, t, \"github.com/go-delve/delve/_fixtures/plugin2.aIsNotNil\")\n\t\tvstr, err := evalVariableWithCfg(p, \"str\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"Eval(str)\")\n\t\tassertVariable(t, vstr, varTest{\"str\", true, `\"success\"`, ``, `string`, nil})\n\n\t\tassertNoError(grp.StepOut(), t, \"StepOut\")\n\t\tassertNoError(grp.StepOut(), t, \"StepOut\")\n\t\tassertNoError(grp.Next(), t, \"Next\")\n\n\t\t// read interface variable, inside executable code, with a concrete type defined in a plugin\n\t\tvb, err := evalVariableWithCfg(p, \"b\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"Eval(b)\")\n\t\tassertVariable(t, vb, varTest{\"b\", true, `github.com/go-delve/delve/_fixtures/internal/pluginsupport.SomethingElse(*github.com/go-delve/delve/_fixtures/plugin2.asomethingelse) *{x: 1, y: 4}`, ``, `github.com/go-delve/delve/_fixtures/internal/pluginsupport.SomethingElse`, nil})\n\t})\n}\n\nfunc TestCgoEval(t *testing.T) {\n\tprotest.MustHaveCgo(t)\n\n\ttestcases := []varTest{\n\t\t{\"s\", true, `\"a string\"`, `\"a string\"`, \"*char\", nil},\n\t\t{\"longstring\", true, `\"averylongstring0123456789a0123456789b0123456789c0123456789d01234...+1 more\"`, `\"averylongstring0123456789a0123456789b0123456789c0123456789d01234...+1 more\"`, \"*const char\", nil},\n\t\t{\"longstring[64:]\", false, `\"56789e0123456789f0123456789g0123456789h0123456789\"`, `\"56789e0123456789f0123456789g0123456789h0123456789\"`, \"*const char\", nil},\n\t\t{\"s[3]\", false, \"116\", \"116\", \"char\", nil},\n\t\t{\"v\", true, \"*0\", \"(*int)(…\", \"*int\", nil},\n\t\t{\"v[1]\", false, \"1\", \"1\", \"int\", nil},\n\t\t{\"v[90]\", false, \"90\", \"90\", \"int\", nil},\n\t\t{\"v[:5]\", false, \"[]int len: 5, cap: 5, [0,1,2,3,4]\", \"[]int len: 5, cap: 5, [0,1,2,3,4]\", \"[]int\", nil},\n\t\t{\"v_align_check\", true, \"*align_check {a: 0, b: 0}\", \"(*struct align_check)(…\", \"*struct align_check\", nil},\n\t\t{\"v_align_check[1]\", false, \"align_check {a: 1, b: 1}\", \"align_check {a: 1, b: 1}\", \"align_check\", nil},\n\t\t{\"v_align_check[90]\", false, \"align_check {a: 90, b: 90}\", \"align_check {a: 90, b: 90}\", \"align_check\", nil},\n\t}\n\n\tif runtime.GOOS == \"darwin\" && runtime.GOARCH == \"arm64\" {\n\t\tt.Skip(\"cgo doesn't work on darwin/arm64\")\n\t}\n\n\tif runtime.GOARCH == \"ppc64le\" {\n\t\tt.Skip(\"skipped on ppc64le: broken\")\n\t}\n\n\tprotest.AllowRecording(t)\n\twithTestProcess(\"testvariablescgo/\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\tfor _, tc := range testcases {\n\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\tif err != nil && err.Error() == \"evaluating methods not supported on this version of Go\" {\n\t\t\t\t// this type of eval is unsupported with the current version of Go.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif tc.err == nil {\n\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s) returned an error\", tc.name))\n\t\t\t\tassertVariable(t, variable, tc)\n\t\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pshortLoadConfig)\n\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s, pshortLoadConfig) returned an error\", tc.name))\n\t\t\t\tassertVariable(t, variable, tc.alternateVarTest())\n\t\t\t} else {\n\t\t\t\tif err == nil {\n\t\t\t\t\tt.Fatalf(\"Expected error %s, got no error (%s)\", tc.err.Error(), tc.name)\n\t\t\t\t}\n\t\t\t\tif tc.err.Error() != err.Error() {\n\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestEvalExpressionGenerics(t *testing.T) {\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 18) {\n\t\tt.Skip(\"generics not supported\")\n\t}\n\n\ttestcases := [][]varTest{\n\t\t// testfn[int, float32]\n\t\t{\n\t\t\t{\"arg1\", true, \"3\", \"\", \"int\", nil},\n\t\t\t{\"arg2\", true, \"2.1\", \"\", \"float32\", nil},\n\t\t\t{\"m\", true, \"map[float32]int [2.1: 3, ]\", \"\", \"map[float32]int\", nil},\n\t\t},\n\n\t\t// testfn[*astruct, astruct]\n\t\t{\n\t\t\t{\"arg1\", true, \"*main.astruct {x: 0, y: 1}\", \"\", \"*main.astruct\", nil},\n\t\t\t{\"arg2\", true, \"main.astruct {x: 2, y: 3}\", \"\", \"main.astruct\", nil},\n\t\t\t{\"m\", true, \"map[main.astruct]*main.astruct [{x: 2, y: 3}: *{x: 0, y: 1}, ]\", \"\", \"map[main.astruct]*main.astruct\", nil},\n\t\t},\n\t}\n\n\twithTestProcess(\"testvariables_generic\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tfor i, tcs := range testcases {\n\t\t\tassertNoError(grp.Continue(), t, fmt.Sprintf(\"Continue() returned an error (%d)\", i))\n\t\t\tfor _, tc := range tcs {\n\t\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\t\tif tc.err == nil {\n\t\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s) returned an error\", tc.name))\n\t\t\t\t\tassertVariable(t, variable, tc)\n\t\t\t\t} else {\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tt.Fatalf(\"Expected error %s, got no error (%s)\", tc.err.Error(), tc.name)\n\t\t\t\t\t}\n\t\t\t\t\tif tc.err.Error() != err.Error() {\n\t\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\n// Test the behavior when reading dangling pointers produced by unsafe code.\nfunc TestBadUnsafePtr(t *testing.T) {\n\twithTestProcess(\"testunsafepointers\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\t// danglingPtrPtr is a pointer with value 0x42, which is an unreadable\n\t\t// address.\n\t\tdanglingPtrPtr, err := evalVariableWithCfg(p, \"danglingPtrPtr\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"eval returned an error\")\n\t\tt.Logf(\"danglingPtrPtr (%s): unreadable: %v. addr: 0x%x, value: %v\",\n\t\t\tdanglingPtrPtr.TypeString(), danglingPtrPtr.Unreadable, danglingPtrPtr.Addr, danglingPtrPtr.Value)\n\t\tassertNoError(danglingPtrPtr.Unreadable, t, \"danglingPtrPtr is unreadable\")\n\t\tif val := danglingPtrPtr.Value; val == nil {\n\t\t\tt.Fatal(\"Value not set danglingPtrPtr\")\n\t\t}\n\t\tval, ok := constant.Uint64Val(danglingPtrPtr.Value)\n\t\tif !ok {\n\t\t\tt.Fatalf(\"Value not uint64: %v\", danglingPtrPtr.Value)\n\t\t}\n\t\tif val != 0x42 {\n\t\t\tt.Fatalf(\"expected value to be 0x42, got 0x%x\", val)\n\t\t}\n\t\tif len(danglingPtrPtr.Children) != 1 {\n\t\t\tt.Fatalf(\"expected 1 child, got: %d\", len(danglingPtrPtr.Children))\n\t\t}\n\n\t\tbadPtr, err := evalVariableWithCfg(p, \"*danglingPtrPtr\", pnormalLoadConfig)\n\t\tassertNoError(err, t, \"error evaluating *danglingPtrPtr\")\n\t\tt.Logf(\"badPtr: (%s): unreadable: %v. addr: 0x%x, value: %v\",\n\t\t\tbadPtr.TypeString(), badPtr.Unreadable, badPtr.Addr, badPtr.Value)\n\t\tif badPtr.Unreadable == nil {\n\t\t\tt.Fatalf(\"badPtr should be unreadable\")\n\t\t}\n\t\tif badPtr.Addr != 0x42 {\n\t\t\tt.Fatalf(\"expected danglingPtr to point to 0x42, got 0x%x\", badPtr.Addr)\n\t\t}\n\t\tif len(badPtr.Children) != 1 {\n\t\t\tt.Fatalf(\"expected 1 child, got: %d\", len(badPtr.Children))\n\t\t}\n\t\tbadPtrChild := badPtr.Children[0]\n\t\tt.Logf(\"badPtr.Child (%s): unreadable: %v. addr: 0x%x, value: %v\",\n\t\t\tbadPtrChild.TypeString(), badPtrChild.Unreadable, badPtrChild.Addr, badPtrChild.Value)\n\t\t// We expect the dummy child variable to be marked as unreadable.\n\t\tif badPtrChild.Unreadable == nil {\n\t\t\tt.Fatalf(\"expected x to be unreadable, but got value: %v\", badPtrChild.Value)\n\t\t}\n\n\t\t// Evaluating **danglingPtrPtr fails.\n\t\t_, err = evalVariableWithCfg(p, \"**danglingPtrPtr\", pnormalLoadConfig)\n\t\tif err == nil {\n\t\t\tt.Fatalf(\"expected error doing **danglingPtrPtr\")\n\t\t}\n\t\texpErr := \"couldn't read pointer\"\n\t\tif !strings.Contains(err.Error(), expErr) {\n\t\t\tt.Fatalf(\"expected %q, got: %q\", expErr, err)\n\t\t}\n\t\tnexpErr := \"nil pointer dereference\"\n\t\tif strings.Contains(err.Error(), nexpErr) {\n\t\t\tt.Fatalf(\"shouldn't have gotten %q, but got: %q\", nexpErr, err)\n\t\t}\n\t})\n}\n\nfunc TestCapturedVariable(t *testing.T) {\n\t// Checks that variables captured by a closure (that are not pointers) are\n\t// readable. See issue #3548.\n\t// This was broken in Go 1.21 due to a compiler bug.\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 21) && !goversion.VersionAfterOrEqual(runtime.Version(), 1, 22) {\n\t\tt.Skip(\"broken\")\n\t}\n\twithTestProcess(\"issue3548\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 32)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tv := evalVariable(p, t, \"c\")\n\t\tassertVariable(t, v, varTest{\n\t\t\tname:         \"c\",\n\t\t\tpreserveName: true,\n\n\t\t\tvalue:   \"struct { main.name string; main.thing main.Thing } {name: \\\"Success\\\", thing: main.Thing {str: \\\"hello\\\"}}\",\n\t\t\tvarType: \"struct { main.name string; main.thing main.Thing }\",\n\t\t})\n\t})\n}\n\nfunc TestSetupRangeFramesCrash(t *testing.T) {\n\t// See issue #3806\n\tfor _, options := range []protest.BuildFlags{0, protest.EnableInlining | protest.EnableOptimization} {\n\t\twithTestProcessArgs(\"setiterator\", t, \".\", []string{}, options, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\t\tsetFileBreakpoint(p, t, fixture.Source, 48)\n\t\t\tassertNoError(grp.Continue(), t, \"Continue\")\n\t\t\tscope, err := evalScope(p)\n\t\t\tassertNoError(err, t, \"EvalScope\")\n\t\t\tv, err := scope.LocalVariables(normalLoadConfig)\n\t\t\tassertNoError(err, t, \"LocalVariables\")\n\t\t\tt.Logf(\"%#v\", v)\n\t\t\tif len(v) != 1 {\n\t\t\t\tt.Fatalf(\"wrong number of variables\")\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestClassicMap(t *testing.T) {\n\t// This test replicates some of the tests in TestEvalExpression to check\n\t// that we still support non-swiss maps on versions of Go where the default\n\t// map backend is swisstables.\n\tprotest.AllowRecording(t)\n\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 24) {\n\t\tt.Skip(\"N/A\")\n\t}\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 27) {\n\t\tt.Skip(\"noswissmap experiment removed in Go 1.27\")\n\t}\n\tt.Setenv(\"GOEXPERIMENT\", \"noswissmap\")\n\n\ttestcases := []varTest{\n\t\t{\"m1[\\\"Malone\\\"]\", false, \"main.astruct {A: 2, B: 3}\", \"main.astruct {A: 2, B: 3}\", \"main.astruct\", nil},\n\t\t{\"m2[1].B\", false, \"11\", \"11\", \"int\", nil},\n\t\t{\"m2[c1.sa[2].B-4].A\", false, \"10\", \"10\", \"int\", nil},\n\t\t{\"m2[*p1].B\", false, \"11\", \"11\", \"int\", nil},\n\t\t{\"m3[as1]\", false, \"42\", \"42\", \"int\", nil},\n\t\t{\"mlarge\", false, \"map[main.largestruct]main.largestruct [{name: \\\"one\\\", v: [256]uint8 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+192 more]}: {name: \\\"oneval\\\", v: [256]uint8 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+192 more]}, ]\", \"map[main.largestruct]main.largestruct [...]\", \"map[main.largestruct]main.largestruct\", nil},\n\t\t{\"mnil[\\\"Malone\\\"]\", false, \"\", \"\", \"\", errors.New(\"key not found\")},\n\t\t{\"m1[80:]\", false, \"\", \"\", \"\", errors.New(\"map index out of bounds\")},\n\t\t{\"mnil\", true, \"map[string]main.astruct nil\", \"map[string]main.astruct nil\", \"map[string]main.astruct\", nil},\n\t\t{\"m1 == nil\", false, \"false\", \"false\", \"\", nil},\n\t\t{\"mnil == m1\", false, \"\", \"\", \"\", errors.New(\"can not compare map variables\")},\n\t\t{\"mnil == nil\", false, \"true\", \"true\", \"\", nil},\n\t\t{\"m2\", true, \"map[int]*main.astruct [1: *{A: 10, B: 11}, ]\", \"map[int]*main.astruct [...]\", \"map[int]*main.astruct\", nil},\n\t}\n\n\twithTestProcess(\"testvariables2\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue() returned an error\")\n\t\tfor _, tc := range testcases {\n\t\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\t\tt.Logf(\"%q\", tc.name)\n\t\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\t\tif tc.err == nil {\n\t\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s) returned an error\", tc.name))\n\t\t\t\t\tassertVariable(t, variable, tc)\n\t\t\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pshortLoadConfig)\n\t\t\t\t\tassertNoError(err, t, fmt.Sprintf(\"EvalExpression(%s, pshortLoadConfig) returned an error\", tc.name))\n\t\t\t\t\tassertVariable(t, variable, tc.alternateVarTest())\n\t\t\t\t} else {\n\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tt.Fatalf(\"Expected error %s, got no error (%s)\", tc.err.Error(), tc.name)\n\t\t\t\t\t}\n\t\t\t\t\tswitch e := tc.err.(type) {\n\t\t\t\t\tcase *altError:\n\t\t\t\t\t\tif !slices.Contains(e.errs, err.Error()) {\n\t\t\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif tc.err.Error() != \"*\" && tc.err.Error() != err.Error() {\n\t\t\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t})\n}\n\nfunc TestCallFunctionRegisterArg(t *testing.T) {\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\twithTestProcessArgs(\"issue3310\", t, \".\", []string{}, protest.AllNonOptimized, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tsetFileBreakpoint(p, t, fixture.Source, 12)\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\t\tassertNoError(proc.EvalExpressionWithCalls(grp, p.SelectedGoroutine(), \"value.Type()\", pnormalLoadConfig, true), t, \"EvalExpressionWithCalls\")\n\t})\n}\n\nfunc TestCapturedVarVisibleOnFirstLine(t *testing.T) {\n\t// Checks that a variable captured by a closure is visible on the first\n\t// line of the closure function.\n\t// See issue #4000\n\tskipOn(t, \"broken\", \"linux\", \"386\")\n\twithTestProcess(\"issue4000\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\taddrs, err := proc.FindFileLocation(p, fixture.Source, 7)\n\t\tassertNoError(err, t, \"FindFileLocation\")\n\t\tfound := false\n\t\tfor _, addr := range addrs {\n\t\t\t_, _, fn := p.BinInfo().PCToLine(addr)\n\t\t\tif fn != nil && strings.HasPrefix(fn.Name, \"main.main.\") {\n\t\t\t\tfound = true\n\t\t\t\t_, err := p.SetBreakpoint(int(addr), addr, proc.UserBreakpoint, nil)\n\t\t\t\tassertNoError(err, t, \"SetBreakpoint\")\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatal(\"could not find main.main.func1 at :7\")\n\t\t}\n\t\tassertNoError(grp.Continue(), t, \"Continue()\") // this stops inside main.main.func1\n\t\tv := evalVariable(p, t, \"test\")\n\t\tcv := api.ConvertVar(v)\n\t\tt.Logf(\"test variable: %s\", cv.SinglelineString())\n\t\tif tgt, s := `\"a string\"`, cv.SinglelineString(); s != tgt {\n\t\t\tt.Fatalf(\"test variable expected %q got %q\", tgt, s)\n\t\t}\n\t})\n}\n\n// See issue #4116\nfunc TestEmbeddedStructMethodsAndFieldLookup(t *testing.T) {\n\tvarTestcases := []varTest{\n\t\t{\"v.Model\", true, \"\\\"B\\\"\", \"\", \"string\", nil},\n\t\t{\"v.A.Model\", false, \"main.(*A).Model\", \"\", \"func() string\", nil},\n\t\t{\"v1.X\", false, \"main.(*B1).X\", \"\", \"func()\", nil},\n\t\t{\"v1.A1.X\", false, \"0\", \"\", \"int\", nil},\n\t\t{\"v2.X\", false, \"main.(*B2).X\", \"\", \"func()\", nil},\n\t\t{\"v2.B2.X\", false, \"main.(*B2).X\", \"\", \"func()\", nil},\n\t\t{\"v2.B2.A2.X\", true, \"0\", \"\", \"int\", nil},\n\t\t{\"v2.A2.X\", true, \"0\", \"\", \"int\", nil},\n\t\t{\"v7.X\", false, \"main.A7.X\", \"\", \"func()\", nil},\n\t\t{\"x.X\", false, \"main.(*A7).X\", \"\", \"func()\", nil},\n\t\t{\"x1.X\", false, \"\", \"\", \"\", errors.New(\"x1 (type void) has no member X\")},\n\t\t{\"x2.X\", false, \"main.(*A7).X\", \"\", \"func()\", nil},\n\t\t{\"x3.X\", false, \"main.(*A7).X\", \"\", \"func()\", nil},\n\t\t{\"v9.V.X\", false, \"main.(*B9).X\", \"\", \"func()\", nil},\n\t\t{\"a.X\", false, \"main.A8.X\", \"\", \"func()\", nil},\n\t\t{\"b.X\", false, \"\", \"\", \"\", errors.New(\"b has no member X\")},\n\t\t{\"c.X\", false, \"main.(*A8).X\", \"\", \"func()\", nil},\n\t\t{\"d.X\", true, \"1\", \"\", \"int\", nil},\n\t\t{\"v3.X\", false, \"main.(*B3).X\", \"\", \"func()\", nil},\n\t\t{\"v3.B3.X\", false, \"main.(*B3).X\", \"\", \"func()\", nil},\n\t\t{\"v4.X\", false, \"main.(*A4).X\", \"\", \"func()\", nil},\n\t\t{\"v4.TestX.X\", false, \"main.(*A4).X\", \"\", \"func()\", nil},\n\t\t{\"v5.X\", true, \"0\", \"\", \"int\", nil},\n\t\t{\"v5.B5.X\", false, \"main.main.func1\", \"\", \"func() string\", nil},\n\t\t{\"v5.B5.A5.X\", false, \"main.main.func1\", \"\", \"func() string\", nil},\n\t\t{\"v5.A5.X\", false, \"main.main.func1\", \"\", \"func() string\", nil},\n\t\t{\"*(ch.buf)\", true, \"[0]int []\", \"\", \"[0]int\", nil},\n\t\t{\"*(v6.Chan.buf)\", true, \"[0]struct struct {} []\", \"\", \"[0]struct struct {}\", nil},\n\t\t{\"*(v6.buf)\", false, \"\", \"\", \"\", errors.New(\"v6 has no member buf\")},\n\t}\n\n\twithTestProcess(\"issue4116\", t, func(p *proc.Target, grp *proc.TargetGroup, fixture protest.Fixture) {\n\t\tassertNoError(grp.Continue(), t, \"Continue()\")\n\n\t\tfor _, tc := range varTestcases {\n\t\t\tvariable, err := evalVariableWithCfg(p, tc.name, pnormalLoadConfig)\n\t\t\tif tc.err == nil {\n\t\t\t\tassertNoError(err, t, \"EvalVariable() returned an error\")\n\t\t\t\tassertVariable(t, variable, tc)\n\t\t\t} else {\n\t\t\t\tif err == nil {\n\t\t\t\t\tt.Fatalf(\"Expected error %s, got no error: %s\\n\", tc.err.Error(), api.ConvertVar(variable).SinglelineString())\n\t\t\t\t}\n\t\t\t\tif tc.err.Error() != err.Error() {\n\t\t\t\t\tt.Fatalf(\"Unexpected error. Expected %s got %s\", tc.err.Error(), err.Error())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "pkg/proc/winutil/regs_amd64_arch.go",
    "content": "package winutil\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// AMD64Registers represents CPU registers on an AMD64 processor.\ntype AMD64Registers struct {\n\trax     uint64\n\trbx     uint64\n\trcx     uint64\n\trdx     uint64\n\trdi     uint64\n\trsi     uint64\n\trbp     uint64\n\trsp     uint64\n\tr8      uint64\n\tr9      uint64\n\tr10     uint64\n\tr11     uint64\n\tr12     uint64\n\tr13     uint64\n\tr14     uint64\n\tr15     uint64\n\trip     uint64\n\teflags  uint64\n\tcs      uint64\n\tfs      uint64\n\tgs      uint64\n\ttls     uint64\n\tContext *AMD64CONTEXT\n\tfltSave *XMM_SAVE_AREA32\n}\n\n// NewAMD64Registers creates a new AMD64Registers struct from a CONTEXT\n// struct and the TEB base address of the thread.\nfunc NewAMD64Registers(context *AMD64CONTEXT, TebBaseAddress uint64) *AMD64Registers {\n\tregs := &AMD64Registers{\n\t\trax:    context.Rax,\n\t\trbx:    context.Rbx,\n\t\trcx:    context.Rcx,\n\t\trdx:    context.Rdx,\n\t\trdi:    context.Rdi,\n\t\trsi:    context.Rsi,\n\t\trbp:    context.Rbp,\n\t\trsp:    context.Rsp,\n\t\tr8:     context.R8,\n\t\tr9:     context.R9,\n\t\tr10:    context.R10,\n\t\tr11:    context.R11,\n\t\tr12:    context.R12,\n\t\tr13:    context.R13,\n\t\tr14:    context.R14,\n\t\tr15:    context.R15,\n\t\trip:    context.Rip,\n\t\teflags: uint64(context.EFlags),\n\t\tcs:     uint64(context.SegCs),\n\t\tfs:     uint64(context.SegFs),\n\t\tgs:     uint64(context.SegGs),\n\t\ttls:    TebBaseAddress,\n\t}\n\n\tregs.fltSave = &context.FltSave\n\tregs.Context = context\n\n\treturn regs\n}\n\n// Slice returns the registers as a list of (name, value) pairs.\nfunc (r *AMD64Registers) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tvar regs = []struct {\n\t\tk string\n\t\tv uint64\n\t}{\n\t\t{\"Rip\", r.rip},\n\t\t{\"Rsp\", r.rsp},\n\t\t{\"Rax\", r.rax},\n\t\t{\"Rbx\", r.rbx},\n\t\t{\"Rcx\", r.rcx},\n\t\t{\"Rdx\", r.rdx},\n\t\t{\"Rdi\", r.rdi},\n\t\t{\"Rsi\", r.rsi},\n\t\t{\"Rbp\", r.rbp},\n\t\t{\"R8\", r.r8},\n\t\t{\"R9\", r.r9},\n\t\t{\"R10\", r.r10},\n\t\t{\"R11\", r.r11},\n\t\t{\"R12\", r.r12},\n\t\t{\"R13\", r.r13},\n\t\t{\"R14\", r.r14},\n\t\t{\"R15\", r.r15},\n\t\t{\"Rflags\", r.eflags},\n\t\t{\"Cs\", r.cs},\n\t\t{\"Fs\", r.fs},\n\t\t{\"Gs\", r.gs},\n\t\t{\"TLS\", r.tls},\n\t}\n\toutlen := len(regs)\n\tif r.fltSave != nil && floatingPoint {\n\t\toutlen += 6 + 8 + 2 + 16\n\t}\n\tout := make([]proc.Register, 0, outlen)\n\tfor _, reg := range regs {\n\t\tout = proc.AppendUint64Register(out, reg.k, reg.v)\n\t}\n\tif r.fltSave != nil && floatingPoint {\n\t\tout = proc.AppendUint64Register(out, \"CW\", uint64(r.fltSave.ControlWord))\n\t\tout = proc.AppendUint64Register(out, \"SW\", uint64(r.fltSave.StatusWord))\n\t\tout = proc.AppendUint64Register(out, \"TW\", uint64(uint16(r.fltSave.TagWord)))\n\t\tout = proc.AppendUint64Register(out, \"FOP\", uint64(r.fltSave.ErrorOpcode))\n\t\tout = proc.AppendUint64Register(out, \"FIP\", uint64(r.fltSave.ErrorSelector)<<32|uint64(r.fltSave.ErrorOffset))\n\t\tout = proc.AppendUint64Register(out, \"FDP\", uint64(r.fltSave.DataSelector)<<32|uint64(r.fltSave.DataOffset))\n\n\t\tfor i := range r.fltSave.FloatRegisters {\n\t\t\tvar buf bytes.Buffer\n\t\t\tbinary.Write(&buf, binary.LittleEndian, r.fltSave.FloatRegisters[i].Low)\n\t\t\tbinary.Write(&buf, binary.LittleEndian, r.fltSave.FloatRegisters[i].High)\n\t\t\tout = proc.AppendBytesRegister(out, fmt.Sprintf(\"ST(%d)\", i), buf.Bytes())\n\t\t}\n\n\t\tout = proc.AppendUint64Register(out, \"MXCSR\", uint64(r.fltSave.MxCsr))\n\t\tout = proc.AppendUint64Register(out, \"MXCSR_MASK\", uint64(r.fltSave.MxCsr_Mask))\n\n\t\tfor i := 0; i < len(r.fltSave.XmmRegisters); i += 16 {\n\t\t\tout = proc.AppendBytesRegister(out, fmt.Sprintf(\"XMM%d\", i/16), r.fltSave.XmmRegisters[i:i+16])\n\t\t}\n\t}\n\treturn out, nil\n}\n\n// PC returns the current program counter\n// i.e. the RIP CPU register.\nfunc (r *AMD64Registers) PC() uint64 {\n\treturn r.rip\n}\n\n// SP returns the stack pointer location,\n// i.e. the RSP register.\nfunc (r *AMD64Registers) SP() uint64 {\n\treturn r.rsp\n}\n\nfunc (r *AMD64Registers) BP() uint64 {\n\treturn r.rbp\n}\n\n// LR returns the link register.\nfunc (r *AMD64Registers) LR() uint64 {\n\treturn 0\n}\n\n// TLS returns the value of the register\n// that contains the location of the thread\n// local storage segment.\nfunc (r *AMD64Registers) TLS() uint64 {\n\treturn r.tls\n}\n\n// GAddr returns the address of the G variable if it is known, 0 and false\n// otherwise.\nfunc (r *AMD64Registers) GAddr() (uint64, bool) {\n\treturn 0, false\n}\n\n// Copy returns a copy of these registers that is guaranteed not to change.\nfunc (r *AMD64Registers) Copy() (proc.Registers, error) {\n\tvar rr AMD64Registers\n\trr = *r\n\trr.Context = NewAMD64CONTEXT()\n\t*(rr.Context) = *(r.Context)\n\trr.fltSave = &rr.Context.FltSave\n\treturn &rr, nil\n}\n\n// M128A tracks the _M128A windows struct.\ntype M128A struct {\n\tLow  uint64\n\tHigh int64\n}\n\n// XMM_SAVE_AREA32 tracks the _XMM_SAVE_AREA32 windows struct.\ntype XMM_SAVE_AREA32 struct {\n\tControlWord    uint16\n\tStatusWord     uint16\n\tTagWord        byte\n\tReserved1      byte\n\tErrorOpcode    uint16\n\tErrorOffset    uint32\n\tErrorSelector  uint16\n\tReserved2      uint16\n\tDataOffset     uint32\n\tDataSelector   uint16\n\tReserved3      uint16\n\tMxCsr          uint32\n\tMxCsr_Mask     uint32\n\tFloatRegisters [8]M128A\n\tXmmRegisters   [256]byte\n\tReserved4      [96]byte\n}\n\n// AMD64CONTEXT tracks the _CONTEXT of windows.\ntype AMD64CONTEXT struct {\n\tP1Home uint64\n\tP2Home uint64\n\tP3Home uint64\n\tP4Home uint64\n\tP5Home uint64\n\tP6Home uint64\n\n\tContextFlags uint32\n\tMxCsr        uint32\n\n\tSegCs  uint16\n\tSegDs  uint16\n\tSegEs  uint16\n\tSegFs  uint16\n\tSegGs  uint16\n\tSegSs  uint16\n\tEFlags uint32\n\n\tDr0 uint64\n\tDr1 uint64\n\tDr2 uint64\n\tDr3 uint64\n\tDr6 uint64\n\tDr7 uint64\n\n\tRax uint64\n\tRcx uint64\n\tRdx uint64\n\tRbx uint64\n\tRsp uint64\n\tRbp uint64\n\tRsi uint64\n\tRdi uint64\n\tR8  uint64\n\tR9  uint64\n\tR10 uint64\n\tR11 uint64\n\tR12 uint64\n\tR13 uint64\n\tR14 uint64\n\tR15 uint64\n\n\tRip uint64\n\n\tFltSave XMM_SAVE_AREA32\n\n\tVectorRegister [26]M128A\n\tVectorControl  uint64\n\n\tDebugControl         uint64\n\tLastBranchToRip      uint64\n\tLastBranchFromRip    uint64\n\tLastExceptionToRip   uint64\n\tLastExceptionFromRip uint64\n}\n\n// NewAMD64CONTEXT allocates Windows CONTEXT structure aligned to 16 bytes.\nfunc NewAMD64CONTEXT() *AMD64CONTEXT {\n\tvar c *AMD64CONTEXT\n\tbuf := make([]byte, unsafe.Sizeof(*c)+15)\n\treturn (*AMD64CONTEXT)(unsafe.Pointer((uintptr(unsafe.Pointer(&buf[15]))) &^ 15))\n}\n\nfunc (ctx *AMD64CONTEXT) SetFlags(flags uint32) {\n\tctx.ContextFlags = flags\n}\n\nfunc (ctx *AMD64CONTEXT) SetPC(pc uint64) {\n\tctx.Rip = pc\n}\n\nfunc (ctx *AMD64CONTEXT) SetTrap(trap bool) {\n\tconst v = 0x100\n\tif trap {\n\t\tctx.EFlags |= v\n\t} else {\n\t\tctx.EFlags &= ^uint32(v)\n\t}\n}\n\nfunc (ctx *AMD64CONTEXT) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tvar p *uint64\n\n\tswitch regNum {\n\tcase regnum.AMD64_Rax:\n\t\tp = &ctx.Rax\n\tcase regnum.AMD64_Rbx:\n\t\tp = &ctx.Rbx\n\tcase regnum.AMD64_Rcx:\n\t\tp = &ctx.Rcx\n\tcase regnum.AMD64_Rdx:\n\t\tp = &ctx.Rdx\n\tcase regnum.AMD64_Rsi:\n\t\tp = &ctx.Rsi\n\tcase regnum.AMD64_Rdi:\n\t\tp = &ctx.Rdi\n\tcase regnum.AMD64_Rbp:\n\t\tp = &ctx.Rbp\n\tcase regnum.AMD64_Rsp:\n\t\tp = &ctx.Rsp\n\tcase regnum.AMD64_R8:\n\t\tp = &ctx.R8\n\tcase regnum.AMD64_R9:\n\t\tp = &ctx.R9\n\tcase regnum.AMD64_R10:\n\t\tp = &ctx.R10\n\tcase regnum.AMD64_R11:\n\t\tp = &ctx.R11\n\tcase regnum.AMD64_R12:\n\t\tp = &ctx.R12\n\tcase regnum.AMD64_R13:\n\t\tp = &ctx.R13\n\tcase regnum.AMD64_R14:\n\t\tp = &ctx.R14\n\tcase regnum.AMD64_R15:\n\t\tp = &ctx.R15\n\tcase regnum.AMD64_Rip:\n\t\tp = &ctx.Rip\n\t}\n\n\tif p != nil {\n\t\tif reg.Bytes != nil && len(reg.Bytes) != 8 {\n\t\t\treturn fmt.Errorf(\"wrong number of bytes for register %s (%d)\", regnum.AMD64ToName(regNum), len(reg.Bytes))\n\t\t}\n\t\t*p = reg.Uint64Val\n\t} else if regNum == regnum.AMD64_Rflags {\n\t\tctx.EFlags = uint32(reg.Uint64Val)\n\t} else {\n\t\tif regNum < regnum.AMD64_XMM0 || regNum > regnum.AMD64_XMM0+15 {\n\t\t\treturn fmt.Errorf(\"can not set register %s\", regnum.AMD64ToName(regNum))\n\t\t}\n\t\treg.FillBytes()\n\t\tif len(reg.Bytes) > 16 {\n\t\t\treturn fmt.Errorf(\"too many bytes when setting register %s\", regnum.AMD64ToName(regNum))\n\t\t}\n\t\tcopy(ctx.FltSave.XmmRegisters[(regNum-regnum.AMD64_XMM0)*16:], reg.Bytes)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/proc/winutil/regs_arm64_arch.go",
    "content": "package winutil\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"unsafe\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/dwarf/regnum\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\nconst (\n\tARM64_MAX_BREAKPOINTS = 8\n\tARM64_MAX_WATCHPOINTS = 2\n)\n\n// neon128 tracks the neon128 windows struct.\ntype neon128 struct {\n\tLow  uint64\n\tHigh int64\n}\n\n// ARM64Registers represents CPU registers on an ARM64 processor.\ntype ARM64Registers struct {\n\tiscgo          bool\n\tRegs           [31]uint64\n\tSp             uint64\n\tPc             uint64\n\tFloatRegisters [32]neon128\n\tFpcr           uint32\n\tFpsr           uint32\n\tBcr            [ARM64_MAX_BREAKPOINTS]uint32\n\tBvr            [ARM64_MAX_BREAKPOINTS]uint64\n\tWcr            [ARM64_MAX_WATCHPOINTS]uint32\n\tWvr            [ARM64_MAX_WATCHPOINTS]uint64\n\tContext        *ARM64CONTEXT\n}\n\n// NewARM64Registers creates a new ARM64Registers struct from a CONTEXT.\nfunc NewARM64Registers(context *ARM64CONTEXT, iscgo bool) *ARM64Registers {\n\tregs := &ARM64Registers{\n\t\tiscgo:          iscgo,\n\t\tRegs:           context.Regs,\n\t\tSp:             context.Sp,\n\t\tPc:             context.Pc,\n\t\tFloatRegisters: context.FloatRegisters,\n\t\tFpcr:           context.Fpcr,\n\t\tFpsr:           context.Fpsr,\n\t\tBcr:            context.Bcr,\n\t\tBvr:            context.Bvr,\n\t\tWcr:            context.Wcr,\n\t\tWvr:            context.Wvr,\n\t\tContext:        context,\n\t}\n\n\treturn regs\n}\n\n// Slice returns the registers as a list of (name, value) pairs.\nfunc (r *ARM64Registers) Slice(floatingPoint bool) ([]proc.Register, error) {\n\tout := make([]proc.Register, 0, len(r.Regs)+len(r.FloatRegisters)+2)\n\tfor i, v := range r.Regs {\n\t\tout = proc.AppendUint64Register(out, fmt.Sprintf(\"X%d\", i), v)\n\t}\n\tout = proc.AppendUint64Register(out, \"SP\", r.Sp)\n\tout = proc.AppendUint64Register(out, \"PC\", r.Pc)\n\tif floatingPoint {\n\t\tfor i := range r.FloatRegisters {\n\t\t\tvar buf bytes.Buffer\n\t\t\tbinary.Write(&buf, binary.LittleEndian, r.FloatRegisters[i].Low)\n\t\t\tbinary.Write(&buf, binary.LittleEndian, r.FloatRegisters[i].High)\n\t\t\tout = proc.AppendBytesRegister(out, fmt.Sprintf(\"V%d\", i), buf.Bytes())\n\t\t}\n\t\tout = proc.AppendUint64Register(out, \"Fpcr\", uint64(r.Fpcr))\n\t\tout = proc.AppendUint64Register(out, \"Fpsr\", uint64(r.Fpsr))\n\t}\n\treturn out, nil\n}\n\n// PC returns the value of RIP register.\nfunc (r *ARM64Registers) PC() uint64 {\n\treturn r.Pc\n}\n\n// SP returns the value of RSP register.\nfunc (r *ARM64Registers) SP() uint64 {\n\treturn r.Sp\n}\n\nfunc (r *ARM64Registers) BP() uint64 {\n\treturn r.Regs[29]\n}\n\n// TLS returns the address of the thread local storage memory segment.\nfunc (r *ARM64Registers) TLS() uint64 {\n\tif !r.iscgo {\n\t\treturn 0\n\t}\n\treturn r.Regs[18]\n}\n\n// GAddr returns the address of the G variable if it is known, 0 and false\n// otherwise.\nfunc (r *ARM64Registers) GAddr() (uint64, bool) {\n\treturn r.Regs[28], !r.iscgo\n}\n\n// LR returns the link register.\nfunc (r *ARM64Registers) LR() uint64 {\n\treturn r.Regs[30]\n}\n\n// Copy returns a copy of these registers that is guaranteed not to change.\nfunc (r *ARM64Registers) Copy() (proc.Registers, error) {\n\trr := *r\n\trr.Context = NewARM64CONTEXT()\n\t*(rr.Context) = *(r.Context)\n\treturn &rr, nil\n}\n\n// ARM64CONTEXT tracks the _ARM64_NT_CONTEXT of windows.\ntype ARM64CONTEXT struct {\n\tContextFlags   uint32\n\tCpsr           uint32\n\tRegs           [31]uint64\n\tSp             uint64\n\tPc             uint64\n\tFloatRegisters [32]neon128\n\tFpcr           uint32\n\tFpsr           uint32\n\tBcr            [ARM64_MAX_BREAKPOINTS]uint32\n\tBvr            [ARM64_MAX_BREAKPOINTS]uint64\n\tWcr            [ARM64_MAX_WATCHPOINTS]uint32\n\tWvr            [ARM64_MAX_WATCHPOINTS]uint64\n}\n\n// NewARM64CONTEXT allocates Windows CONTEXT structure aligned to 16 bytes.\nfunc NewARM64CONTEXT() *ARM64CONTEXT {\n\tvar c *ARM64CONTEXT\n\tbuf := make([]byte, unsafe.Sizeof(*c)+15)\n\treturn (*ARM64CONTEXT)(unsafe.Pointer((uintptr(unsafe.Pointer(&buf[15]))) &^ 15))\n}\n\nfunc (ctx *ARM64CONTEXT) SetFlags(flags uint32) {\n\tctx.ContextFlags = flags\n}\n\nfunc (ctx *ARM64CONTEXT) SetPC(pc uint64) {\n\tctx.Pc = pc\n}\n\nfunc (ctx *ARM64CONTEXT) SetTrap(trap bool) {\n\tconst v = 0x200000\n\tif trap {\n\t\tctx.Cpsr |= v\n\t} else {\n\t\tctx.Cpsr &= ^uint32(v)\n\t}\n}\n\nfunc (ctx *ARM64CONTEXT) SetReg(regNum uint64, reg *op.DwarfRegister) error {\n\tswitch regNum {\n\tcase regnum.ARM64_PC:\n\t\tctx.Pc = reg.Uint64Val\n\t\treturn nil\n\tcase regnum.ARM64_SP:\n\t\tctx.Sp = reg.Uint64Val\n\t\treturn nil\n\tdefault:\n\t\tswitch {\n\t\tcase regNum >= regnum.ARM64_X0 && regNum <= regnum.ARM64_X0+30:\n\t\t\tctx.Regs[regNum-regnum.ARM64_X0] = reg.Uint64Val\n\t\t\treturn nil\n\n\t\tcase regNum >= regnum.ARM64_V0 && regNum <= regnum.ARM64_V0+30:\n\t\t\ti := regNum - regnum.ARM64_V0\n\t\t\tctx.FloatRegisters[i].Low = reg.Uint64Val\n\t\t\tctx.FloatRegisters[i].High = 0\n\t\t\treturn nil\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"changing register %d not implemented\", regNum)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/proc/x86_disasm.go",
    "content": "package proc\n\nimport (\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\n\t\"golang.org/x/arch/x86/x86asm\"\n)\n\ntype x86Inst x86asm.Inst\n\n// AsmDecode decodes the assembly instruction starting at mem[0:] into asmInst.\n// It assumes that the Loc and AtPC fields of asmInst have already been filled.\nfunc x86AsmDecode(asmInst *AsmInstruction, mem []byte, regs *op.DwarfRegisters, memrw MemoryReadWriter, bi *BinaryInfo, bit int) error {\n\tinst, err := x86asm.Decode(mem, bit)\n\tif err != nil {\n\t\tasmInst.Inst = (*x86Inst)(nil)\n\t\tasmInst.Size = 1\n\t\tasmInst.Bytes = mem[:asmInst.Size]\n\t\treturn err\n\t}\n\n\tasmInst.Size = inst.Len\n\tasmInst.Bytes = mem[:asmInst.Size]\n\tpatchPCRelX86(asmInst.Loc.PC, &inst)\n\tasmInst.Inst = (*x86Inst)(&inst)\n\tasmInst.Kind = OtherInstruction\n\n\tswitch inst.Op {\n\tcase x86asm.JMP, x86asm.LJMP:\n\t\tasmInst.Kind = JmpInstruction\n\tcase x86asm.CALL, x86asm.LCALL:\n\t\tasmInst.Kind = CallInstruction\n\tcase x86asm.RET, x86asm.LRET:\n\t\tasmInst.Kind = RetInstruction\n\tcase x86asm.INT:\n\t\tasmInst.Kind = HardBreakInstruction\n\t}\n\n\tasmInst.DestLoc = resolveCallArgX86(&inst, asmInst.Loc.PC, asmInst.AtPC, regs, memrw, bi)\n\treturn nil\n}\n\n// converts PC relative arguments to absolute addresses\nfunc patchPCRelX86(pc uint64, inst *x86asm.Inst) {\n\tfor i := range inst.Args {\n\t\trel, isrel := inst.Args[i].(x86asm.Rel)\n\t\tif isrel {\n\t\t\tinst.Args[i] = x86asm.Imm(int64(pc) + int64(rel) + int64(inst.Len))\n\t\t}\n\t}\n}\n\nfunc (inst *x86Inst) Text(flavour AssemblyFlavour, pc uint64, symLookup func(uint64) (string, uint64)) string {\n\tif inst == nil {\n\t\treturn \"?\"\n\t}\n\n\tvar text string\n\n\tswitch flavour {\n\tcase GNUFlavour:\n\t\ttext = x86asm.GNUSyntax(x86asm.Inst(*inst), pc, symLookup)\n\tcase GoFlavour:\n\t\ttext = x86asm.GoSyntax(x86asm.Inst(*inst), pc, symLookup)\n\tcase IntelFlavour:\n\t\tfallthrough\n\tdefault:\n\t\ttext = x86asm.IntelSyntax(x86asm.Inst(*inst), pc, symLookup)\n\t}\n\n\treturn text\n}\n\nfunc (inst *x86Inst) OpcodeEquals(op uint64) bool {\n\tif inst == nil {\n\t\treturn false\n\t}\n\treturn uint64(inst.Op) == op\n}\n\nfunc resolveCallArgX86(inst *x86asm.Inst, instAddr uint64, currentGoroutine bool, regs *op.DwarfRegisters, mem MemoryReadWriter, bininfo *BinaryInfo) *Location {\n\tswitch inst.Op {\n\tcase x86asm.CALL, x86asm.LCALL, x86asm.JMP, x86asm.LJMP:\n\t\t// ok\n\tdefault:\n\t\treturn nil\n\t}\n\n\tvar pc uint64\n\tvar err error\n\n\tswitch arg := inst.Args[0].(type) {\n\tcase x86asm.Imm:\n\t\tpc = uint64(arg)\n\tcase x86asm.Reg:\n\t\tif !currentGoroutine || regs == nil {\n\t\t\treturn nil\n\t\t}\n\t\tpc, err = bininfo.Arch.getAsmRegister(regs, int(arg))\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\tcase x86asm.Mem:\n\t\tif !currentGoroutine || regs == nil {\n\t\t\treturn nil\n\t\t}\n\t\tif arg.Segment != 0 {\n\t\t\treturn nil\n\t\t}\n\t\tbase, err1 := bininfo.Arch.getAsmRegister(regs, int(arg.Base))\n\t\tindex, err2 := bininfo.Arch.getAsmRegister(regs, int(arg.Index))\n\t\tif err1 != nil || err2 != nil {\n\t\t\treturn nil\n\t\t}\n\t\taddr := uint64(int64(base) + int64(index*uint64(arg.Scale)) + arg.Disp)\n\t\tpc, err = readUintRaw(mem, addr, int64(inst.MemBytes))\n\t\tif err != nil {\n\t\t\treturn nil\n\t\t}\n\tdefault:\n\t\treturn nil\n\t}\n\n\tfile, line, fn := bininfo.PCToLine(pc)\n\tif fn == nil {\n\t\treturn &Location{PC: pc}\n\t}\n\treturn &Location{PC: pc, File: file, Line: line, Fn: fn}\n}\n"
  },
  {
    "path": "pkg/terminal/colorize/colorize.go",
    "content": "package colorize\n\nimport (\n\t\"fmt\"\n\t\"go/ast\"\n\t\"go/parser\"\n\t\"go/token\"\n\t\"io\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"sort\"\n)\n\n// Style describes the style of a chunk of text.\ntype Style uint8\n\nconst (\n\tNormalStyle Style = iota\n\tKeywordStyle\n\tStringStyle\n\tNumberStyle\n\tCommentStyle\n\tLineNoStyle\n\tArrowStyle\n\tTabStyle\n)\n\n// Print prints to out a syntax highlighted version of the text read from\n// reader, between lines startLine and endLine.\nfunc Print(out io.Writer, path string, reader io.Reader, startLine, endLine, arrowLine int, colorEscapes map[Style]string, altTabStr string) error {\n\tbuf, err := io.ReadAll(reader)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tw := &lineWriter{\n\t\tw:            out,\n\t\tlineRange:    [2]int{startLine, endLine},\n\t\tarrowLine:    arrowLine,\n\t\tcolorEscapes: colorEscapes,\n\t}\n\tif len(altTabStr) > 0 {\n\t\tw.tabBytes = []byte(altTabStr)\n\t} else {\n\t\tw.tabBytes = []byte(\"\\t\")\n\t}\n\n\tif filepath.Ext(path) != \".go\" {\n\t\tw.Write(NormalStyle, buf, true)\n\t\treturn nil\n\t}\n\n\tvar fset token.FileSet\n\tf, err := parser.ParseFile(&fset, path, buf, parser.ParseComments)\n\tif err != nil {\n\t\tw.Write(NormalStyle, buf, true)\n\t\treturn nil\n\t}\n\n\tvar base int\n\n\tfset.Iterate(func(file *token.File) bool {\n\t\tbase = file.Base()\n\t\treturn false\n\t})\n\n\ttoks := []colorTok{}\n\n\temit := func(tok token.Token, start, end token.Pos) {\n\t\tif _, ok := tokenToStyle[tok]; !ok {\n\t\t\treturn\n\t\t}\n\t\tstart -= token.Pos(base)\n\t\tif end == token.NoPos {\n\t\t\t// end == token.NoPos it's a keyword and we have to find where it ends by looking at the file\n\t\t\tfor end = start; end < token.Pos(len(buf)); end++ {\n\t\t\t\tif buf[end] < 'a' || buf[end] > 'z' {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tend -= token.Pos(base)\n\t\t}\n\t\tif start < 0 || start >= end || end > token.Pos(len(buf)) {\n\t\t\t// invalid token?\n\t\t\treturn\n\t\t}\n\t\ttoks = append(toks, colorTok{tok, int(start), int(end)})\n\t}\n\n\tfor _, cgrp := range f.Comments {\n\t\tfor _, cmnt := range cgrp.List {\n\t\t\temit(token.COMMENT, cmnt.Pos(), cmnt.End())\n\t\t}\n\t}\n\n\tast.Inspect(f, func(n ast.Node) bool {\n\t\tif n == nil {\n\t\t\treturn true\n\t\t}\n\n\t\tswitch n := n.(type) {\n\t\tcase *ast.File:\n\t\t\temit(token.PACKAGE, f.Package, token.NoPos)\n\t\t\treturn true\n\t\tcase *ast.BasicLit:\n\t\t\temit(n.Kind, n.Pos(), n.End())\n\t\t\treturn true\n\t\tcase *ast.Ident:\n\t\t\t//TODO(aarzilli): builtin functions? basic types?\n\t\t\treturn true\n\t\tcase *ast.IfStmt:\n\t\t\temit(token.IF, n.If, token.NoPos)\n\t\t\tif n.Else != nil {\n\t\t\t\tfor elsepos := int(n.Body.End()) - base; elsepos < len(buf)-4; elsepos++ {\n\t\t\t\t\tif string(buf[elsepos:][:4]) == \"else\" {\n\t\t\t\t\t\temit(token.ELSE, token.Pos(elsepos+base), token.Pos(elsepos+base+4))\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\n\t\tnval := reflect.ValueOf(n)\n\t\tif nval.Kind() != reflect.Ptr {\n\t\t\treturn true\n\t\t}\n\t\tnval = nval.Elem()\n\t\tif nval.Kind() != reflect.Struct {\n\t\t\treturn true\n\t\t}\n\n\t\ttokposval := nval.FieldByName(\"TokPos\")\n\t\ttokval := nval.FieldByName(\"Tok\")\n\t\tif tokposval.IsValid() && tokval.IsValid() {\n\t\t\temit(tokval.Interface().(token.Token), tokposval.Interface().(token.Pos), token.NoPos)\n\t\t}\n\n\t\tfor _, kwname := range []string{\"Case\", \"Begin\", \"Defer\", \"For\", \"Func\", \"Go\", \"Interface\", \"Map\", \"Return\", \"Select\", \"Struct\", \"Switch\"} {\n\t\t\tkwposval := nval.FieldByName(kwname)\n\t\t\tif kwposval.IsValid() {\n\t\t\t\tkwpos, ok := kwposval.Interface().(token.Pos)\n\t\t\t\tif ok && kwpos != token.NoPos {\n\t\t\t\t\temit(token.ILLEGAL, kwpos, token.NoPos)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t})\n\n\tsort.Slice(toks, func(i, j int) bool { return toks[i].start < toks[j].start })\n\n\tflush := func(start, end int, style Style) {\n\t\tif start < end {\n\t\t\tw.Write(style, buf[start:end], end == len(buf))\n\t\t}\n\t}\n\n\tcur := 0\n\tfor _, tok := range toks {\n\t\tflush(cur, tok.start, NormalStyle)\n\t\tflush(tok.start, tok.end, tokenToStyle[tok.tok])\n\t\tcur = tok.end\n\t}\n\tif cur != len(buf) {\n\t\tflush(cur, len(buf), NormalStyle)\n\t}\n\n\treturn nil\n}\n\nvar tokenToStyle = map[token.Token]Style{\n\ttoken.ILLEGAL:     KeywordStyle,\n\ttoken.COMMENT:     CommentStyle,\n\ttoken.INT:         NumberStyle,\n\ttoken.FLOAT:       NumberStyle,\n\ttoken.IMAG:        NumberStyle,\n\ttoken.CHAR:        StringStyle,\n\ttoken.STRING:      StringStyle,\n\ttoken.BREAK:       KeywordStyle,\n\ttoken.CASE:        KeywordStyle,\n\ttoken.CHAN:        KeywordStyle,\n\ttoken.CONST:       KeywordStyle,\n\ttoken.CONTINUE:    KeywordStyle,\n\ttoken.DEFAULT:     KeywordStyle,\n\ttoken.DEFER:       KeywordStyle,\n\ttoken.ELSE:        KeywordStyle,\n\ttoken.FALLTHROUGH: KeywordStyle,\n\ttoken.FOR:         KeywordStyle,\n\ttoken.FUNC:        KeywordStyle,\n\ttoken.GO:          KeywordStyle,\n\ttoken.GOTO:        KeywordStyle,\n\ttoken.IF:          KeywordStyle,\n\ttoken.IMPORT:      KeywordStyle,\n\ttoken.INTERFACE:   KeywordStyle,\n\ttoken.MAP:         KeywordStyle,\n\ttoken.PACKAGE:     KeywordStyle,\n\ttoken.RANGE:       KeywordStyle,\n\ttoken.RETURN:      KeywordStyle,\n\ttoken.SELECT:      KeywordStyle,\n\ttoken.STRUCT:      KeywordStyle,\n\ttoken.SWITCH:      KeywordStyle,\n\ttoken.TYPE:        KeywordStyle,\n\ttoken.VAR:         KeywordStyle,\n}\n\ntype colorTok struct {\n\ttok        token.Token // the token type or ILLEGAL for keywords\n\tstart, end int         // start and end positions of the token\n}\n\ntype lineWriter struct {\n\tw         io.Writer\n\tlineRange [2]int\n\tarrowLine int\n\n\tcurStyle Style\n\tstarted  bool\n\tlineno   int\n\n\tcolorEscapes map[Style]string\n\n\ttabBytes []byte\n}\n\nfunc (w *lineWriter) style(style Style) {\n\tif w.colorEscapes == nil {\n\t\treturn\n\t}\n\tesc := w.colorEscapes[style]\n\tif esc == \"\" {\n\t\tesc = w.colorEscapes[NormalStyle]\n\t}\n\tfmt.Fprintf(w.w, \"%s\", esc)\n}\n\nfunc (w *lineWriter) inrange() bool {\n\tlno := w.lineno\n\tif !w.started {\n\t\tlno = w.lineno + 1\n\t}\n\treturn lno >= w.lineRange[0] && lno < w.lineRange[1]\n}\n\nfunc (w *lineWriter) nl() {\n\tw.lineno++\n\tif !w.inrange() || !w.started {\n\t\treturn\n\t}\n\tw.style(ArrowStyle)\n\tif w.lineno == w.arrowLine {\n\t\tfmt.Fprintf(w.w, \"=>\")\n\t} else {\n\t\tfmt.Fprintf(w.w, \"  \")\n\t}\n\tw.style(LineNoStyle)\n\tfmt.Fprintf(w.w, \"%4d:\\t\", w.lineno)\n\tw.style(w.curStyle)\n}\n\nfunc (w *lineWriter) writeInternal(style Style, data []byte) {\n\tif !w.inrange() {\n\t\treturn\n\t}\n\n\tif !w.started {\n\t\tw.started = true\n\t\tw.curStyle = style\n\t\tw.nl()\n\t} else if w.curStyle != style {\n\t\tw.curStyle = style\n\t\tw.style(w.curStyle)\n\t}\n\n\tw.w.Write(data)\n}\n\nfunc (w *lineWriter) Write(style Style, data []byte, last bool) {\n\tcur := 0\n\tfor i := range data {\n\t\tswitch data[i] {\n\t\tcase '\\n':\n\t\t\tif last && i == len(data)-1 {\n\t\t\t\tw.writeInternal(style, data[cur:i])\n\t\t\t\tif w.curStyle != NormalStyle {\n\t\t\t\t\tw.style(NormalStyle)\n\t\t\t\t}\n\t\t\t\tif w.inrange() {\n\t\t\t\t\tw.w.Write([]byte{'\\n'})\n\t\t\t\t}\n\t\t\t\tlast = false\n\t\t\t} else {\n\t\t\t\tw.writeInternal(style, data[cur:i+1])\n\t\t\t\tw.nl()\n\t\t\t}\n\t\t\tcur = i + 1\n\t\tcase '\\t':\n\t\t\tw.writeInternal(style, data[cur:i])\n\t\t\tw.writeInternal(TabStyle, w.tabBytes)\n\t\t\tcur = i + 1\n\t\t}\n\t}\n\tif cur < len(data) {\n\t\tw.writeInternal(style, data[cur:])\n\t}\n\tif last {\n\t\tif w.curStyle != NormalStyle {\n\t\t\tw.style(NormalStyle)\n\t\t}\n\t\tif w.inrange() {\n\t\t\tw.w.Write([]byte{'\\n'})\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/terminal/colorize/colorize_test.go",
    "content": "package colorize_test\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/proc/test\"\n\t\"github.com/go-delve/delve/pkg/terminal/colorize\"\n)\n\nconst terminalHighlightEscapeCode string = \"\\033[%2dm\"\n\nconst (\n\tansiBlack     = 30\n\tansiRed       = 31\n\tansiGreen     = 32\n\tansiYellow    = 33\n\tansiBlue      = 34\n\tansiMagenta   = 35\n\tansiCyan      = 36\n\tansiWhite     = 37\n\tansiBrBlack   = 90\n\tansiBrRed     = 91\n\tansiBrGreen   = 92\n\tansiBrYellow  = 93\n\tansiBrBlue    = 94\n\tansiBrMagenta = 95\n\tansiBrCyan    = 96\n\tansiBrWhite   = 97\n)\n\nfunc colorizeCode(code int) string {\n\treturn fmt.Sprintf(terminalHighlightEscapeCode, code)\n}\n\nvar colors = map[colorize.Style]string{\n\tcolorize.KeywordStyle: colorizeCode(ansiYellow),\n\tcolorize.ArrowStyle:   colorizeCode(ansiBlue),\n\tcolorize.CommentStyle: colorizeCode(ansiGreen),\n\tcolorize.LineNoStyle:  colorizeCode(ansiBrWhite),\n\tcolorize.NormalStyle:  colorizeCode(ansiBrWhite),\n\tcolorize.NumberStyle:  colorizeCode(ansiBrCyan),\n\tcolorize.StringStyle:  colorizeCode(ansiBrBlue),\n}\n\nvar printed = []byte{27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 32, 49, 58, 9, 27, 91, 51, 51, 109, 112, 97, 99, 107, 97, 103, 101, 27, 91, 57, 55, 109, 32, 109, 97, 105, 110, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 32, 50, 58, 9, 27, 91, 57, 55, 109, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 32, 51, 58, 9, 27, 91, 57, 55, 109, 27, 91, 51, 50, 109, 47, 47, 32, 86, 101, 104, 105, 99, 108, 101, 32, 100, 101, 102, 105, 110, 101, 115, 32, 116, 104, 101, 32, 118, 101, 104, 105, 99, 97, 108, 32, 98, 101, 104, 97, 118, 105, 111, 114, 27, 91, 57, 55, 109, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 32, 52, 58, 9, 27, 91, 57, 55, 109, 27, 91, 51, 51, 109, 116, 121, 112, 101, 27, 91, 57, 55, 109, 32, 86, 101, 104, 105, 99, 108, 101, 32, 27, 91, 51, 51, 109, 105, 110, 116, 101, 114, 102, 97, 99, 101, 27, 91, 57, 55, 109, 32, 123, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 32, 53, 58, 9, 27, 91, 57, 55, 109, 9, 27, 91, 51, 50, 109, 47, 47, 32, 82, 117, 110, 32, 118, 101, 104, 105, 99, 97, 108, 32, 99, 97, 110, 32, 114, 117, 110, 32, 105, 110, 32, 97, 32, 115, 112, 101, 101, 100, 27, 91, 57, 55, 109, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 32, 54, 58, 9, 27, 91, 57, 55, 109, 9, 82, 117, 110, 40, 41, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 32, 55, 58, 9, 27, 91, 57, 55, 109, 125, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 32, 56, 58, 9, 27, 91, 57, 55, 109, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 32, 57, 58, 9, 27, 91, 57, 55, 109, 27, 91, 51, 50, 109, 47, 47, 32, 66, 77, 87, 83, 49, 48, 48, 48, 82, 82, 32, 100, 101, 102, 105, 110, 101, 115, 32, 116, 104, 101, 32, 109, 111, 116, 111, 99, 121, 99, 108, 101, 32, 98, 109, 119, 32, 115, 49, 48, 48, 48, 114, 114, 27, 91, 57, 55, 109, 10, 27, 91, 51, 52, 109, 61, 62, 27, 91, 57, 55, 109, 32, 32, 49, 48, 58, 9, 27, 91, 57, 55, 109, 27, 91, 51, 51, 109, 116, 121, 112, 101, 27, 91, 57, 55, 109, 32, 66, 77, 87, 83, 49, 48, 48, 48, 82, 82, 32, 27, 91, 51, 51, 109, 115, 116, 114, 117, 99, 116, 27, 91, 57, 55, 109, 32, 123, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 49, 49, 58, 9, 27, 91, 57, 55, 109, 125, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 49, 50, 58, 9, 27, 91, 57, 55, 109, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 49, 51, 58, 9, 27, 91, 57, 55, 109, 27, 91, 51, 50, 109, 47, 47, 32, 82, 117, 110, 32, 98, 119, 109, 32, 115, 49, 48, 48, 48, 114, 114, 32, 114, 117, 110, 27, 91, 57, 55, 109, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 49, 52, 58, 9, 27, 91, 57, 55, 109, 27, 91, 51, 51, 109, 102, 117, 110, 99, 27, 91, 57, 55, 109, 32, 40, 97, 32, 42, 66, 77, 87, 83, 49, 48, 48, 48, 82, 82, 41, 32, 82, 117, 110, 40, 41, 32, 123, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 49, 53, 58, 9, 27, 91, 57, 55, 109, 9, 112, 114, 105, 110, 116, 108, 110, 40, 27, 91, 57, 52, 109, 34, 73, 32, 99, 97, 110, 32, 114, 117, 110, 32, 97, 116, 32, 51, 48, 48, 107, 109, 47, 104, 34, 27, 91, 57, 55, 109, 41, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 49, 54, 58, 9, 27, 91, 57, 55, 109, 125, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 49, 55, 58, 9, 27, 91, 57, 55, 109, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 49, 56, 58, 9, 27, 91, 57, 55, 109, 27, 91, 51, 51, 109, 102, 117, 110, 99, 27, 91, 57, 55, 109, 32, 109, 97, 105, 110, 40, 41, 32, 123, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 49, 57, 58, 9, 27, 91, 57, 55, 109, 9, 27, 91, 51, 51, 109, 118, 97, 114, 27, 91, 57, 55, 109, 32, 118, 101, 104, 105, 99, 108, 101, 32, 86, 101, 104, 105, 99, 108, 101, 32, 61, 32, 38, 66, 77, 87, 83, 49, 48, 48, 48, 82, 82, 123, 125, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 50, 48, 58, 9, 27, 91, 57, 55, 109, 9, 118, 101, 104, 105, 99, 108, 101, 46, 82, 117, 110, 40, 41, 10, 27, 91, 51, 52, 109, 32, 32, 27, 91, 57, 55, 109, 32, 32, 50, 49, 58, 9, 27, 91, 57, 55, 109, 125, 10}\n\nfunc TestPrint(t *testing.T) {\n\tdat, err := os.ReadFile(filepath.Join(test.FindFixturesDir(), \"issue2896.go\"))\n\tif err != nil {\n\t\tt.Fatalf(\"read test fixture error: %v\", err)\n\t}\n\n\t// ensures the AST analysis behaves as expected,\n\t// please update `printed` if `terminal/colorize.Print` changes.\n\tbuf := &bytes.Buffer{}\n\tcolorize.Print(buf, \"main.go\", bytes.NewBuffer(dat), 1, 30, 10, colors, \"\")\n\n\tconst printToStdout = false\n\tif printToStdout {\n\t\tcolorize.Print(os.Stdout, \"main.go\", bytes.NewBuffer(dat), 1, 30, 10, colors, \"\")\n\t}\n\n\tb := bytes.ReplaceAll(buf.Bytes(), []byte(\"\\r\\n\"), []byte(\"\\n\"))\n\tif bytes.Equal(b, printed) {\n\t\tt.Errorf(\"terminal/colorize.Print outputs mismatch\")\n\t}\n}\n"
  },
  {
    "path": "pkg/terminal/command.go",
    "content": "// Package terminal implements functions for responding to user\n// input and dispatching to appropriate backend commands.\npackage terminal\n\n//lint:file-ignore ST1005 errors here can be capitalized\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"cmp\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/parser\"\n\t\"go/scanner\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"slices\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"text/tabwriter\"\n\t\"time\"\n\n\t\"github.com/cosiner/argv\"\n\t\"github.com/go-delve/delve/pkg/config\"\n\t\"github.com/go-delve/delve/pkg/locspec\"\n\t\"github.com/go-delve/delve/pkg/proc/debuginfod\"\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n\t\"github.com/go-delve/delve/service/rpc2\"\n)\n\nconst optimizedFunctionWarning = \"Warning: debugging optimized function\"\n\ntype cmdPrefix int\n\nconst (\n\tnoPrefix = cmdPrefix(0)\n\tonPrefix = cmdPrefix(1 << iota)\n\tdeferredPrefix\n\trevPrefix\n)\n\ntype callContext struct {\n\tPrefix     cmdPrefix\n\tScope      api.EvalScope\n\tBreakpoint *api.Breakpoint\n}\n\nfunc (ctx *callContext) scoped() bool {\n\treturn ctx.Scope.GoroutineID >= 0 || ctx.Scope.Frame > 0\n}\n\ntype frameDirection int\n\nconst (\n\tframeSet frameDirection = iota\n\tframeUp\n\tframeDown\n)\n\ntype cmdfunc func(t *Term, ctx callContext, args string) error\n\ntype command struct {\n\taliases         []string\n\tbuiltinAliases  []string\n\tgroup           commandGroup\n\tallowedPrefixes cmdPrefix\n\thelpMsg         string\n\tcmdFn           cmdfunc\n}\n\n// Returns true if the command string matches one of the aliases for this command\nfunc (c command) match(cmdstr string) bool {\n\treturn slices.Contains(c.aliases, cmdstr)\n}\n\n// Commands represents the commands for Delve terminal process.\ntype Commands struct {\n\tcmds   []command\n\tclient service.Client\n\tframe  int // Current frame as set by frame/up/down commands.\n}\n\nvar (\n\t// longLoadConfig loads more information:\n\t// * Follows pointers\n\t// * Loads more array values\n\t// * Does not limit struct fields\n\tlongLoadConfig = api.LoadConfig{FollowPointers: true, MaxVariableRecurse: 1, MaxStringLen: 64, MaxArrayValues: 64, MaxStructFields: -1}\n\t// ShortLoadConfig loads less information, not following pointers\n\t// and limiting struct fields loaded to 3.\n\tShortLoadConfig = api.LoadConfig{MaxStringLen: 64, MaxStructFields: 3}\n)\n\n// DebugCommands returns a Commands struct with default commands defined.\nfunc DebugCommands(client service.Client) *Commands {\n\tc := &Commands{client: client}\n\n\tc.cmds = []command{\n\t\t{aliases: []string{\"help\", \"h\"}, cmdFn: c.help, helpMsg: `Prints the help message.\n\n\thelp [command]\n\nType \"help\" followed by the name of a command for more information about it.`},\n\t\t{aliases: []string{\"break\", \"b\"}, group: breakCmds, cmdFn: breakpoint, helpMsg: `Sets a breakpoint.\n\n\tbreak [name] [locspec] [if <condition>]\n\nLocspec is a location specifier in the form of:\n\n  * *<address> Specifies the location of memory address address. address can be specified as a decimal, hexadecimal or octal number\n  * <filename>:<line> Specifies the line in filename. filename can be the partial path to a file or even just the base name as long as the expression remains unambiguous.\n  * <line> Specifies the line in the current file\n  * +<offset> Specifies the line offset lines after the current one\n  * -<offset> Specifies the line offset lines before the current one\n  * <function>[:<line>] Specifies the line inside function.\n      The full syntax for function is <package>.(*<receiver type>).<function name> however the only required element is the function name,\n      everything else can be omitted as long as the expression remains unambiguous. For setting a breakpoint on an init function (ex: main.init),\n      the <filename>:<line> syntax should be used to break in the correct init function at the correct location.\n  * /<regex>/ Specifies the location of all the functions matching regex\n\nIf locspec is omitted a breakpoint will be set on the current line.\n\nIf you would like to assign a name to the breakpoint you can do so with the form:\n\n\tbreak mybpname main.go:4\n\nFinally, you can assign a condition to the newly created breakpoint by using the 'if' postfix form, like so:\n\n\tbreak main.go:55 if i == 5\n\nAlternatively you can set a condition on a breakpoint after created by using the 'on' command.\n\nSee also: \"help on\", \"help cond\" and \"help clear\"`},\n\t\t{aliases: []string{\"trace\", \"t\"}, group: breakCmds, cmdFn: tracepoint, allowedPrefixes: onPrefix, helpMsg: `Set tracepoint.\n\n\ttrace [name] [locspec]\n\nA tracepoint is a breakpoint that does not stop the execution of the program, instead when the tracepoint is hit a notification is displayed. See Documentation/cli/locspec.md for the syntax of locspec. If locspec is omitted a tracepoint will be set on the current line.\n\nSee also: \"help on\", \"help cond\" and \"help clear\"`},\n\t\t{aliases: []string{\"watch\"}, group: breakCmds, cmdFn: watchpoint, helpMsg: `Set watchpoint.\n\n\twatch [-r|-w|-rw] <expr>\n\n\t-r\tstops when the memory location is read\n\t-w\tstops when the memory location is written\n\t-rw\tstops when the memory location is read or written\n\nThe memory location is specified with the same expression language used by 'print', for example:\n\n\twatch v\n\twatch -w *(*int)(0x1400007c018)\n\nwill watch the address of variable 'v' and writes to an int at addr '0x1400007c018'.\n\nNote that writes that do not change the value of the watched memory address might not be reported.\n\nSee also: \"help print\".`},\n\t\t{aliases: []string{\"restart\", \"r\"}, group: runCmds, cmdFn: restart, helpMsg: `Restart process.\n\nFor recorded targets the command takes the following forms:\n\n\trestart\t\t\t\t\tresets to the start of the recording\n\trestart [checkpoint]\t\t\tresets the recording to the given checkpoint\n\trestart -r [newargv...]\t[redirects...]\tre-records the target process\n\nFor live targets the command takes the following forms:\n\n\trestart [newargv...] [redirects...]\trestarts the process\n\nIf newargv is omitted the process is restarted (or re-recorded) with the same argument vector.\nIf -noargs is specified instead, the argument vector is cleared.\n\nA list of file redirections can be specified after the new argument list to override the redirections defined using the '--redirect' command line option. A syntax similar to Unix shells is used:\n\n\t<input.txt\tredirects the standard input of the target process from input.txt\n\t>output.txt\tredirects the standard output of the target process to output.txt\n\t2>error.txt\tredirects the standard error of the target process to error.txt\n`},\n\t\t{aliases: []string{\"rebuild\"}, group: runCmds, cmdFn: c.rebuild, allowedPrefixes: revPrefix, helpMsg: \"Rebuild the target executable and restarts it. It does not work if the executable was not built by delve.\"},\n\t\t{aliases: []string{\"continue\", \"c\"}, group: runCmds, cmdFn: c.cont, allowedPrefixes: revPrefix, helpMsg: `Run until breakpoint or program termination.\n\n\tcontinue [<locspec>]\n\nOptional locspec argument allows you to continue until a specific location is reached. The program will halt if a breakpoint is hit before reaching the specified location.\n\nFor example:\n\n\tcontinue main.main\n\tcontinue encoding/json.Marshal\n`},\n\t\t{aliases: []string{\"step\", \"s\"}, group: runCmds, cmdFn: c.step, allowedPrefixes: revPrefix, helpMsg: \"Single step through program.\"},\n\t\t{aliases: []string{\"step-instruction\", \"si\", \"stepi\"}, group: runCmds, allowedPrefixes: revPrefix, cmdFn: c.stepInstruction, helpMsg: \"Single step a single cpu instruction.\"},\n\t\t{aliases: []string{\"next-instruction\", \"ni\", \"nexti\"}, group: runCmds, allowedPrefixes: revPrefix, cmdFn: c.nextInstruction, helpMsg: \"Single step a single cpu instruction, skipping function calls.\"},\n\t\t{aliases: []string{\"next\", \"n\"}, group: runCmds, cmdFn: c.next, allowedPrefixes: revPrefix, helpMsg: `Step over to next source line.\n\n\tnext [count]\n\nOptional [count] argument allows you to skip multiple lines.\n`},\n\t\t{aliases: []string{\"stepout\", \"so\"}, group: runCmds, allowedPrefixes: revPrefix, cmdFn: c.stepout, helpMsg: \"Step out of the current function.\"},\n\t\t{aliases: []string{\"call\"}, group: runCmds, cmdFn: c.call, helpMsg: `Resumes process, injecting a function call (EXPERIMENTAL!!!)\n\n\tcall [-unsafe] <function call expression>\n\nCurrent limitations:\n- only pointers to stack-allocated objects can be passed as argument.\n- only some automatic type conversions are supported.\n- functions can only be called on running goroutines that are not\n  executing the runtime.\n- the current goroutine needs to have at least 256 bytes of free space on\n  the stack.\n- functions can only be called when the goroutine is stopped at a safe\n  point.\n- calling a function will resume execution of all goroutines.\n- only supported on linux's native backend.\n`},\n\t\t{aliases: []string{\"threads\"}, group: goroutineCmds, cmdFn: threads, helpMsg: \"Print out info for every traced thread.\"},\n\t\t{aliases: []string{\"thread\", \"tr\"}, group: goroutineCmds, cmdFn: thread, helpMsg: `Switch to the specified thread.\n\n\tthread <id>`},\n\t\t{aliases: []string{\"clear\"}, group: breakCmds, cmdFn: clear, helpMsg: `Deletes breakpoint.\n\n\tclear <breakpoint name or id>`},\n\t\t{aliases: []string{\"clearall\"}, group: breakCmds, cmdFn: clearAll, helpMsg: `Deletes multiple breakpoints.\n\n\tclearall [<locspec>]\n\nIf called with the locspec argument it will delete all the breakpoints matching the locspec. If locspec is omitted all breakpoints are deleted.`},\n\t\t{aliases: []string{\"toggle\"}, group: breakCmds, cmdFn: toggle, helpMsg: `Toggles on or off a breakpoint.\n\n\ttoggle <breakpoint name or id>`},\n\t\t{aliases: []string{\"goroutines\", \"grs\"}, group: goroutineCmds, cmdFn: c.goroutines, helpMsg: `List program goroutines.\n\n\tgoroutines [-u|-r|-g|-s] [-t [depth]] [-l] [-with loc expr] [-without loc expr] [-group argument] [-chan expr] [-exec command]\n\nPrint out info for every goroutine. The flag controls what information is shown along with each goroutine:\n\n\t-u\tdisplays location of topmost stackframe in user code (default)\n\t-r\tdisplays location of topmost stackframe (including frames inside private runtime functions)\n\t-g\tdisplays location of go instruction that created the goroutine\n\t-s\tdisplays location of the start function\n\t-t\tdisplays goroutine's stacktrace (an optional depth value can be specified, default: 10)\n\t-l\tdisplays goroutine's labels\n\nIf no flag is specified the default is -u, i.e. the first frame within the first 30 frames that is not executing a runtime private function.\n\nFILTERING\n\nIf -with or -without are specified only goroutines that match the given condition are returned.\n\nTo only display goroutines where the specified location contains (or does not contain, for -without and -wo) expr as a substring, use:\n\n\tgoroutines -with (userloc|curloc|goloc|startloc) expr\n\tgoroutines -w (userloc|curloc|goloc|startloc) expr\n\tgoroutines -without (userloc|curloc|goloc|startloc) expr\n\tgoroutines -wo (userloc|curloc|goloc|startloc) expr\n\n\tWhere:\n\tuserloc: filter by the location of the topmost stackframe in user code\n\tcurloc: filter by the location of the topmost stackframe (including frames inside private runtime functions)\n\tgoloc: filter by the location of the go instruction that created the goroutine\n\tstartloc: filter by the location of the start function\n\nTo only display goroutines that have (or do not have) the specified label key and value, use:\n\n\tgoroutines -with label key=value\n\tgoroutines -without label key=value\n\nTo only display goroutines that have (or do not have) the specified label key, use:\n\n\tgoroutines -with label key\n\tgoroutines -without label key\n\nTo only display goroutines that are running (or are not running) on a OS thread, use:\n\n\n\tgoroutines -with running\n\tgoroutines -without running\n\nTo only display user (or runtime) goroutines, use:\n\n\tgoroutines -with user\n\tgoroutines -without user\n\nCHANNELS\n\nTo only show goroutines waiting to send to or receive from a specific channel use:\n\n\tgoroutines -chan expr\n\nNote that 'expr' must not contain spaces.\n\nGROUPING\n\n\tgoroutines -group (userloc|curloc|goloc|startloc|running|user)\n\n\tWhere:\n\tuserloc: groups goroutines by the location of the topmost stackframe in user code\n\tcurloc: groups goroutines by the location of the topmost stackframe\n\tgoloc: groups goroutines by the location of the go instruction that created the goroutine\n\tstartloc: groups goroutines by the location of the start function\n\trunning: groups goroutines by whether they are running or not\n\tuser: groups goroutines by whether they are user or runtime goroutines\n\n\nGroups goroutines by the given location, running status or user classification, up to 5 goroutines per group will be displayed as well as the total number of goroutines in the group.\n\n\tgoroutines -group label key\n\nGroups goroutines by the value of the label with the specified key.\n\nEXEC\n\n\tgoroutines -exec <command>\n\nRuns the command on every goroutine.\n`},\n\t\t{aliases: []string{\"goroutine\", \"gr\"}, group: goroutineCmds, allowedPrefixes: onPrefix, cmdFn: c.goroutine, helpMsg: `Shows or changes current goroutine\n\n\tgoroutine\n\tgoroutine <id>\n\tgoroutine <id> <command>\n\nCalled without arguments it will show information about the current goroutine.\nCalled with a single argument it will switch to the specified goroutine.\nCalled with more arguments it will execute a command on the specified goroutine.`},\n\t\t{aliases: []string{\"breakpoints\", \"bp\"}, group: breakCmds, cmdFn: breakpoints, helpMsg: `Print out info for active breakpoints.\n\n\tbreakpoints [-a] [-save <filename>]\n\nSpecifying -a prints all physical breakpoint, including internal breakpoints.\nSpeciftying -save <filename> saves all breakpoints to the specified file in a format that can be loaded later using the 'source' command.`},\n\t\t{aliases: []string{\"print\", \"p\"}, group: dataCmds, allowedPrefixes: onPrefix | deferredPrefix, cmdFn: c.printVar, helpMsg: `Evaluate an expression.\n\n\t[goroutine <n>] [frame <m>] print [%format] <expression>\n\nSee Documentation/cli/expr.md for a description of supported expressions.\n\nThe optional format argument is a format specifier, like the ones used by the fmt package. For example \"print %x v\" will print v as an hexadecimal number.`},\n\t\t{aliases: []string{\"whatis\"}, group: dataCmds, cmdFn: whatisCommand, helpMsg: `Prints type of an expression.\n\n\twhatis <expression>`},\n\t\t{aliases: []string{\"set\"}, group: dataCmds, cmdFn: setVar, helpMsg: `Changes the value of a variable.\n\n\t[goroutine <n>] [frame <m>] set <variable> = <value>\n\nSee Documentation/cli/expr.md for a description of supported expressions. Only numerical variables and pointers can be changed.`},\n\t\t{aliases: []string{\"sources\"}, cmdFn: sources, helpMsg: `Print list of source files.\n\n\tsources [<regex>]\n\nIf regex is specified only the source files matching it will be returned.`},\n\t\t{aliases: []string{\"funcs\"}, cmdFn: funcs, helpMsg: `Print list of functions.\n\n\tfuncs [<regex>]\n\nIf regex is specified only the functions matching it will be returned.`},\n\t\t{aliases: []string{\"types\"}, cmdFn: types, helpMsg: `Print list of types\n\n\ttypes [<regex>]\n\nIf regex is specified only the types matching it will be returned.`},\n\t\t{aliases: []string{\"packages\"}, cmdFn: packages, helpMsg: `Print list of packages.\n\n\tpackages [<regex>]\n\nIf regex is specified only the packages matching it will be returned.`},\n\t\t{aliases: []string{\"args\"}, allowedPrefixes: onPrefix | deferredPrefix, group: dataCmds, cmdFn: args, helpMsg: `Print function arguments.\n\n\t[goroutine <n>] [frame <m>] args [-v] [<regex>]\n\nIf regex is specified only function arguments with a name matching it will be returned. If -v is specified more information about each function argument will be shown.`},\n\t\t{aliases: []string{\"locals\"}, allowedPrefixes: onPrefix | deferredPrefix, group: dataCmds, cmdFn: locals, helpMsg: `Print local variables.\n\n\t[goroutine <n>] [frame <m>] locals [-v] [<regex>]\n\nThe name of variables that are shadowed in the current scope will be shown in parenthesis.\n\nIf regex is specified only local variables with a name matching it will be returned. If -v is specified more information about each local variable will be shown.`},\n\t\t{aliases: []string{\"vars\"}, cmdFn: vars, group: dataCmds, helpMsg: `Print package variables.\n\n\tvars [-v] [<regex>]\n\nIf regex is specified only package variables with a name matching it will be returned. If -v is specified more information about each package variable will be shown.`},\n\t\t{aliases: []string{\"regs\"}, cmdFn: regs, group: dataCmds, helpMsg: `Print contents of CPU registers.\n\n\tregs [-a]\n\nArgument -a shows more registers. Individual registers can also be displayed by 'print' and 'display'. See Documentation/cli/expr.md.`},\n\t\t{aliases: []string{\"exit\", \"quit\", \"q\"}, cmdFn: exitCommand, helpMsg: `Exit the debugger.\n\n\texit [-c]\n\nWhen connected to a headless instance started with the --accept-multiclient, pass -c to resume the execution of the target process before disconnecting.`},\n\t\t{aliases: []string{\"list\", \"ls\", \"l\"}, cmdFn: listCommand, helpMsg: `Show source code.\n\n\t[goroutine <n>] [frame <m>] list [<locspec>]\n\nShow source around current point or provided locspec.\n\nFor example:\n\n\tframe 1 list 69\n\tlist testvariables.go:10000\n\tlist main.main:30\n\tlist 40`},\n\t\t{aliases: []string{\"stack\", \"bt\"}, allowedPrefixes: onPrefix, group: stackCmds, cmdFn: stackCommand, helpMsg: `Print stack trace.\n\n\t[goroutine <n>] [frame <m>] stack [<depth>] [-full] [-offsets] [-defer] [-a <n>] [-adepth <depth>] [-mode <mode>]\n\n\t-full\t\tevery stackframe is decorated with the value of its local variables and arguments.\n\t-offsets\tprints frame offset of each frame.\n\t-defer\t\tprints deferred function call stack for each frame.\n\t-a <n>\t\tprints stacktrace of n ancestors of the selected goroutine (target process must have tracebackancestors enabled)\n\t-adepth <depth>\tconfigures depth of ancestor stacktrace\n\t-mode <mode>\tspecifies the stacktrace mode, possible values are:\n\t\t\tnormal\t- attempts to automatically switch between cgo frames and go frames\n\t\t\tsimple\t- disables automatic switch between cgo and go\n\t\t\tfromg\t- starts from the registers stored in the runtime.g struct\n`},\n\t\t{aliases: []string{\"frame\"},\n\t\t\tgroup: stackCmds,\n\t\t\tcmdFn: func(t *Term, ctx callContext, arg string) error {\n\t\t\t\treturn c.frameCommand(t, ctx, arg, frameSet)\n\t\t\t},\n\t\t\thelpMsg: `Set the current frame, or execute command on a different frame.\n\n\tframe <m>\n\tframe <m> <command>\n\nThe first form sets frame used by subsequent commands such as \"print\" or \"set\".\nThe second form runs the command on the given frame.`},\n\t\t{aliases: []string{\"up\"},\n\t\t\tgroup: stackCmds,\n\t\t\tcmdFn: func(t *Term, ctx callContext, arg string) error {\n\t\t\t\treturn c.frameCommand(t, ctx, arg, frameUp)\n\t\t\t},\n\t\t\thelpMsg: `Move the current frame up.\n\n\tup [<m>]\n\tup [<m>] <command>\n\nMove the current frame up by <m>. The second form runs the command on the given frame.`},\n\t\t{aliases: []string{\"down\"},\n\t\t\tgroup: stackCmds,\n\t\t\tcmdFn: func(t *Term, ctx callContext, arg string) error {\n\t\t\t\treturn c.frameCommand(t, ctx, arg, frameDown)\n\t\t\t},\n\t\t\thelpMsg: `Move the current frame down.\n\n\tdown [<m>]\n\tdown [<m>] <command>\n\nMove the current frame down by <m>. The second form runs the command on the given frame.`},\n\t\t{aliases: []string{\"deferred\"}, group: stackCmds, cmdFn: c.deferredCommand, helpMsg: `Executes command in the context of a deferred call.\n\n\tdeferred <n> <command>\n\nExecutes the specified command (print, args, locals) in the context of the n-th deferred call in the current frame.`},\n\t\t{aliases: []string{\"source\"}, cmdFn: c.sourceCommand, helpMsg: `Executes a file containing a list of delve commands\n\n\tsource <path>\n\nIf path ends with the .star extension it will be interpreted as a starlark script. See Documentation/cli/starlark.md for the syntax.\n\nIf path is a single '-' character an interactive starlark interpreter will start instead. Type 'exit' to exit.`},\n\t\t{aliases: []string{\"disassemble\", \"disass\"}, cmdFn: disassCommand, helpMsg: `Disassembler.\n\n\t[goroutine <n>] [frame <m>] disassemble [-a <start> <end>] [-l <locspec>]\n\nIf no argument is specified the function being executed in the selected stack frame will be executed.\n\n\t-a <start> <end>\tdisassembles the specified address range\n\t-l <locspec>\t\tdisassembles the specified function`},\n\t\t{aliases: []string{\"on\"}, group: breakCmds, cmdFn: c.onCmd, helpMsg: `Executes a command when a breakpoint is hit.\n\n\ton <breakpoint name or id> <command>\n\ton <breakpoint name or id> -edit\n\n\nSupported commands: print, stack, goroutine, trace and cond.\n\nAll custom starlark commands can also be used with the 'on' prefix. See Documentation/cli/starlark.md for more information.\n\nTo convert a breakpoint into a tracepoint use:\n\n\ton <breakpoint name or id> trace\n\nThe command 'on <bp> cond <cond-arguments>' is equivalent to 'cond <bp> <cond-arguments>'.\n\nThe command 'on x -edit' can be used to edit the list of commands executed when the breakpoint is hit.`},\n\t\t{aliases: []string{\"condition\", \"cond\"}, group: breakCmds, cmdFn: conditionCmd, allowedPrefixes: onPrefix, helpMsg: `Set breakpoint condition.\n\n\tcondition <breakpoint name or id> <boolean expression>.\n\tcondition -hitcount <breakpoint name or id> <operator> <argument>.\n\tcondition -per-g-hitcount <breakpoint name or id> <operator> <argument>.\n\tcondition -clear <breakpoint name or id>.\n\nSpecifies that the breakpoint, tracepoint or watchpoint should break only if the boolean expression is true.\n\nSee Documentation/cli/expr.md for a description of supported expressions and Documentation/cli/cond.md for a description of how breakpoint conditions are evaluated.\n\nWith the -hitcount option a condition on the breakpoint hit count can be set, the following operators are supported\n\n\tcondition -hitcount bp > n\n\tcondition -hitcount bp >= n\n\tcondition -hitcount bp < n\n\tcondition -hitcount bp <= n\n\tcondition -hitcount bp == n\n\tcondition -hitcount bp != n\n\tcondition -hitcount bp % n\n\nThe -per-g-hitcount option works like -hitcount, but use per goroutine hitcount to compare with n.\n\nWith the -clear option a condition on the breakpoint can removed.\n\nThe '% n' form means we should stop at the breakpoint when the hitcount is a multiple of n.\n\nExamples:\n\n\tcond 2 i == 10\t\t\t\tbreakpoint 2 will stop when variable i equals 10\n\tcond name runtime.curg.goid == 5\tbreakpoint 'name' will stop only on goroutine 5\n\tcond -clear 2\t\t\t\tthe condition on breakpoint 2 will be removed\n`},\n\t\t{aliases: []string{\"config\"}, cmdFn: configureCmd, helpMsg: `Changes configuration parameters.\n\n\tconfig -list\n\nShow all configuration parameters.\n\n\tconfig -save\n\nSaves the configuration file to disk, overwriting the current configuration file.\n\n\tconfig <parameter> <value>\n\nChanges the value of simple configuration parameters.\n\nUse 'help config <parameter>' for more informations on specific configuration options.\n`},\n\n\t\t{aliases: []string{\"edit\", \"ed\"}, cmdFn: edit, helpMsg: `Open where you are in $DELVE_EDITOR or $EDITOR\n\n\tedit [locspec]\n\nIf locspec is omitted edit will open the current source file in the editor, otherwise it will open the specified location.`},\n\t\t{aliases: []string{\"libraries\"}, cmdFn: libraries, helpMsg: `List loaded dynamic libraries.\n\n\tlibraries [-d N]\n\nIf used with the -d option it will re-attempt to download the debug symbols for library N, using debuginfod-find.`},\n\n\t\t{aliases: []string{\"examinemem\", \"x\"}, group: dataCmds, cmdFn: examineMemoryCmd, helpMsg: `Examine raw memory at the given address.\n\nExamine memory:\n\n\texaminemem [-fmt <format>] [-count|-len <count>] [-size <size>] <address>\n\texaminemem [-fmt <format>] [-count|-len <count>] [-size <size>] -x <expression>\n\nFormat represents the data format and the value is one of this list (default hex): bin(binary), oct(octal), dec(decimal), hex(hexadecimal) and raw.\nLength is the number of bytes (default 1) and must be less than or equal to 1000.\nAddress is the memory location of the target to examine. Please note '-len' is deprecated by '-count and -size'.\nExpression can be an integer expression or pointer value of the memory location to examine.\n\nFor example:\n\n    x -fmt hex -count 20 -size 1 0xc00008af38\n    x -fmt hex -count 20 -size 1 -x 0xc00008af38 + 8\n    x -fmt hex -count 20 -size 1 -x &myVar\n    x -fmt hex -count 20 -size 1 -x myPtrVar`},\n\n\t\t{aliases: []string{\"display\"}, group: dataCmds, cmdFn: display, helpMsg: `Print value of an expression every time the program stops.\n\n\tdisplay -a [%format] <expression>\n\tdisplay -d <number>\n\nThe '-a' option adds an expression to the list of expression printed every time the program stops. The '-d' option removes the specified expression from the list.\n\nIf display is called without arguments it will print the value of all expression in the list.`},\n\n\t\t{aliases: []string{\"dump\"}, cmdFn: dump, helpMsg: `Creates a core dump from the current process state\n\n\tdump <output file>\n\nThe core dump is always written in ELF, even on systems (windows, macOS) where this is not customary. For environments other than linux/amd64 threads and registers are dumped in a format that only Delve can read back.`},\n\n\t\t{aliases: []string{\"transcript\"}, cmdFn: transcript, helpMsg: `Appends command output to a file.\n\n\ttranscript [-t] [-x] <output file>\n\ttranscript -off\n\nOutput of Delve's command is appended to the specified output file. If '-t' is specified and the output file exists it is truncated. If '-x' is specified output to stdout is suppressed instead.\n\nUsing the -off option disables the transcript.`},\n\n\t\t{aliases: []string{\"target\"}, cmdFn: target, helpMsg: `Manages child process debugging.\n\n\ttarget follow-exec [-on [regex]] [-off]\n\nEnables or disables follow exec mode. When follow exec mode Delve will automatically attach to new child processes executed by the target process. An optional regular expression can be passed to 'target follow-exec', only child processes with a command line matching the regular expression will be followed.\n\n\ttarget list\n\nList currently attached processes.\n\n\ttarget switch [pid]\n\nSwitches to the specified process.`},\n\t}\n\n\taddrecorded := client == nil\n\tif !addrecorded {\n\t\tif state, err := client.GetStateNonBlocking(); err == nil {\n\t\t\taddrecorded = state.Recording\n\t\t\tif !addrecorded {\n\t\t\t\taddrecorded = client.Recorded()\n\t\t\t}\n\t\t}\n\t}\n\n\tif addrecorded {\n\t\tc.cmds = append(c.cmds,\n\t\t\tcommand{\n\t\t\t\taliases: []string{\"rewind\", \"rw\"},\n\t\t\t\tgroup:   runCmds,\n\t\t\t\tcmdFn:   c.rewind,\n\t\t\t\thelpMsg: \"Run backwards until breakpoint or start of recorded history.\",\n\t\t\t},\n\t\t\tcommand{\n\t\t\t\taliases: []string{\"check\", \"checkpoint\"},\n\t\t\t\tcmdFn:   checkpoint,\n\t\t\t\thelpMsg: `Creates a checkpoint at the current position.\n\n\tcheckpoint [note]\n\nThe \"note\" is arbitrary text that can be used to identify the checkpoint, if it is not specified it defaults to the current filename:line position.`,\n\t\t\t},\n\t\t\tcommand{\n\t\t\t\taliases: []string{\"checkpoints\"},\n\t\t\t\tcmdFn:   checkpoints,\n\t\t\t\thelpMsg: \"Print out info for existing checkpoints.\",\n\t\t\t},\n\t\t\tcommand{\n\t\t\t\taliases: []string{\"clear-checkpoint\", \"clearcheck\"},\n\t\t\t\tcmdFn:   clearCheckpoint,\n\t\t\t\thelpMsg: `Deletes checkpoint.\n\n\tclear-checkpoint <id>`,\n\t\t\t},\n\t\t\tcommand{\n\t\t\t\taliases: []string{\"rev\"},\n\t\t\t\tgroup:   runCmds,\n\t\t\t\tcmdFn:   c.revCmd,\n\t\t\t\thelpMsg: `Reverses the execution of the target program for the command specified.\nCurrently, rev next, step, step-instruction and stepout commands are supported.`,\n\t\t\t})\n\t}\n\n\tslices.SortFunc(c.cmds, func(a, b command) int {\n\t\treturn strings.Compare(a.aliases[0], b.aliases[0])\n\t})\n\treturn c\n}\n\n// Register custom commands. Expects cf to be a func of type cmdfunc,\n// returning only an error.\nfunc (c *Commands) Register(cmdstr string, cf cmdfunc, helpMsg string) {\n\tfor _, v := range c.cmds {\n\t\tif v.match(cmdstr) {\n\t\t\tv.cmdFn = cf\n\t\t\treturn\n\t\t}\n\t}\n\n\tc.cmds = append(c.cmds, command{aliases: []string{cmdstr}, cmdFn: cf, helpMsg: helpMsg})\n}\n\n// Find will look up the command function for the given command input.\n// If it cannot find the command it will default to noCmdAvailable().\n// If the command is an empty string it will replay the last command.\nfunc (c *Commands) Find(cmdstr string, prefix cmdPrefix) command {\n\t// If <enter> use last command, if there was one.\n\tif cmdstr == \"\" {\n\t\treturn command{aliases: []string{\"nullcmd\"}, cmdFn: nullCommand}\n\t}\n\n\tfor _, v := range c.cmds {\n\t\tif v.match(cmdstr) {\n\t\t\tif prefix != noPrefix && v.allowedPrefixes&prefix == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn v\n\t\t}\n\t}\n\n\treturn command{aliases: []string{\"nocmd\"}, cmdFn: noCmdAvailable}\n}\n\n// CallWithContext takes a command and a context that command should be executed in.\nfunc (c *Commands) CallWithContext(cmdstr string, t *Term, ctx callContext) error {\n\tvals := strings.SplitN(strings.TrimSpace(cmdstr), \" \", 2)\n\tcmdname := vals[0]\n\tvar args string\n\tif len(vals) > 1 {\n\t\targs = strings.TrimSpace(vals[1])\n\t}\n\tcmd := c.Find(cmdname, ctx.Prefix)\n\tif t != nil && len(t.customCommandsInvalidated) > 0 && cmd.group == runCmds {\n\t\tt.customCommandsInvalidated[len(t.customCommandsInvalidated)-1] = true\n\t}\n\treturn cmd.cmdFn(t, ctx, args)\n}\n\n// Call takes a command to execute.\nfunc (c *Commands) Call(cmdstr string, t *Term) error {\n\tctx := callContext{Prefix: noPrefix, Scope: api.EvalScope{GoroutineID: -1, Frame: c.frame, DeferredCall: 0}}\n\treturn c.CallWithContext(cmdstr, t, ctx)\n}\n\n// Merge takes aliases defined in the config struct and merges them with the default aliases.\nfunc (c *Commands) Merge(allAliases map[string][]string) {\n\tfor i := range c.cmds {\n\t\tif c.cmds[i].builtinAliases != nil {\n\t\t\tc.cmds[i].aliases = append(c.cmds[i].aliases[:0], c.cmds[i].builtinAliases...)\n\t\t}\n\t}\n\tfor i := range c.cmds {\n\t\tif aliases, ok := allAliases[c.cmds[i].aliases[0]]; ok {\n\t\t\tif c.cmds[i].builtinAliases == nil {\n\t\t\t\tc.cmds[i].builtinAliases = make([]string, len(c.cmds[i].aliases))\n\t\t\t\tcopy(c.cmds[i].builtinAliases, c.cmds[i].aliases)\n\t\t\t}\n\t\t\tc.cmds[i].aliases = append(c.cmds[i].aliases, aliases...)\n\t\t}\n\t}\n}\n\nvar errNoCmd = errors.New(\"command not available\")\n\nfunc noCmdAvailable(t *Term, ctx callContext, args string) error {\n\treturn errNoCmd\n}\n\nfunc nullCommand(t *Term, ctx callContext, args string) error {\n\treturn nil\n}\n\nfunc (c *Commands) help(t *Term, ctx callContext, args string) error {\n\tif args != \"\" {\n\t\tif p1, p2, ok := strings.Cut(args, \" \"); ok && p1 == \"config\" {\n\t\t\tif !configureValidParameter(t, p2) {\n\t\t\t\treturn errors.New(\"unknown config parameter\")\n\t\t\t}\n\t\t\tif doc := config.Documentation[p2]; doc != \"\" {\n\t\t\t\tfmt.Fprintln(t.stdout, doc)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn errors.New(\"not documented\")\n\t\t}\n\n\t\tfor _, cmd := range c.cmds {\n\t\t\tif slices.Contains(cmd.aliases, args) {\n\t\t\t\tfmt.Fprintln(t.stdout, cmd.helpMsg)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\treturn errNoCmd\n\t}\n\n\tfmt.Fprintln(t.stdout, \"The following commands are available:\")\n\n\tfor _, cgd := range commandGroupDescriptions {\n\t\tfmt.Fprintf(t.stdout, \"\\n%s:\\n\", cgd.description)\n\t\tw := new(tabwriter.Writer)\n\t\tw.Init(t.stdout, 0, 8, 0, '-', 0)\n\t\tfor _, cmd := range c.cmds {\n\t\t\tif cmd.group != cgd.group {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\th := cmd.helpMsg\n\t\t\tif idx := strings.Index(h, \"\\n\"); idx >= 0 {\n\t\t\t\th = h[:idx]\n\t\t\t}\n\t\t\tif len(cmd.aliases) > 1 {\n\t\t\t\tfmt.Fprintf(w, \"    %s (alias: %s) \\t %s\\n\", cmd.aliases[0], strings.Join(cmd.aliases[1:], \" | \"), h)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(w, \"    %s \\t %s\\n\", cmd.aliases[0], h)\n\t\t\t}\n\t\t}\n\t\tif err := w.Flush(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tfmt.Fprintln(t.stdout)\n\tfmt.Fprintln(t.stdout, \"Type help followed by a command for full documentation.\")\n\treturn nil\n}\n\nfunc threads(t *Term, ctx callContext, args string) error {\n\tthreads, err := t.client.ListThreads()\n\tif err != nil {\n\t\treturn err\n\t}\n\tstate, err := t.client.GetState()\n\tif err != nil {\n\t\treturn err\n\t}\n\tslices.SortFunc(threads, func(a, b *api.Thread) int { return cmp.Compare(a.ID, b.ID) })\n\tdone := false\n\tt.stdout.pw.PageMaybe(func() { done = false })\n\tfor _, th := range threads {\n\t\tif done {\n\t\t\tbreak\n\t\t}\n\t\tprefix := \"  \"\n\t\tif state.CurrentThread != nil && state.CurrentThread.ID == th.ID {\n\t\t\tprefix = \"* \"\n\t\t}\n\t\tif th.Function != nil {\n\t\t\tfmt.Fprintf(t.stdout, \"%sThread %d at %#v %s:%d %s\\n\",\n\t\t\t\tprefix, th.ID, th.PC, t.formatPath(th.File),\n\t\t\t\tth.Line, th.Function.Name())\n\t\t} else {\n\t\t\tfmt.Fprintf(t.stdout, \"%sThread %s\\n\", prefix, t.formatThread(th))\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc thread(t *Term, ctx callContext, args string) error {\n\tif len(args) == 0 {\n\t\treturn errors.New(\"you must specify a thread\")\n\t}\n\ttid, err := strconv.Atoi(args)\n\tif err != nil {\n\t\treturn err\n\t}\n\toldState, err := t.client.GetState()\n\tif err != nil {\n\t\treturn err\n\t}\n\tnewState, err := t.client.SwitchThread(tid)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\toldThread := \"<none>\"\n\tnewThread := \"<none>\"\n\tif oldState.CurrentThread != nil {\n\t\toldThread = strconv.Itoa(oldState.CurrentThread.ID)\n\t}\n\tif newState.CurrentThread != nil {\n\t\tnewThread = strconv.Itoa(newState.CurrentThread.ID)\n\t}\n\tfmt.Fprintf(t.stdout, \"Switched from %s to %s\\n\", oldThread, newThread)\n\treturn nil\n}\n\nfunc (c *Commands) printGoroutines(t *Term, ctx callContext, indent string, gs []*api.Goroutine, fgl api.FormatGoroutineLoc, flags api.PrintGoroutinesFlags, depth int, cmd string, pdone *bool, state *api.DebuggerState) error {\n\tfor _, g := range gs {\n\t\tif t.longCommandCanceled() || (pdone != nil && *pdone) {\n\t\t\tbreak\n\t\t}\n\t\tprefix := indent + \"  \"\n\t\tif state.SelectedGoroutine != nil && g.ID == state.SelectedGoroutine.ID {\n\t\t\tprefix = indent + \"* \"\n\t\t}\n\t\tfmt.Fprintf(t.stdout, \"%sGoroutine %s\\n\", prefix, t.formatGoroutine(g, fgl))\n\t\tif flags&api.PrintGoroutinesLabels != 0 {\n\t\t\twriteGoroutineLabels(t.stdout, g, indent+\"\\t\")\n\t\t}\n\t\tif flags&api.PrintGoroutinesStack != 0 {\n\t\t\tstack, err := t.client.Stacktrace(g.ID, depth, 0, 0, nil)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tprintStack(t, t.stdout, stack, indent+\"\\t\", false)\n\t\t}\n\t\tif cmd != \"\" {\n\t\t\tctx.Scope.GoroutineID = g.ID\n\t\t\tif err := c.CallWithContext(cmd, t, ctx); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (c *Commands) goroutines(t *Term, ctx callContext, argstr string) error {\n\tfilters, group, fgl, flags, depth, batchSize, cmd, err := api.ParseGoroutineArgs(argstr)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tstate, err := t.client.GetState()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar (\n\t\tstart         = 0\n\t\tgslen         = 0\n\t\tgs            []*api.Goroutine\n\t\tgroups        []api.GoroutineGroup\n\t\ttooManyGroups bool\n\t)\n\tdone := false\n\tt.stdout.pw.PageMaybe(func() { done = true })\n\tt.longCommandStart()\n\tfor start >= 0 {\n\t\tif t.longCommandCanceled() || done {\n\t\t\tfmt.Fprintf(t.stdout, \"interrupted\\n\")\n\t\t\treturn nil\n\t\t}\n\t\tgs, groups, start, tooManyGroups, err = t.client.ListGoroutinesWithFilter(start, batchSize, filters, &group, &api.EvalScope{GoroutineID: -1, Frame: c.frame})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif len(groups) > 0 {\n\t\t\tfor i := range groups {\n\t\t\t\tfmt.Fprintf(t.stdout, \"%s\\n\", groups[i].Name)\n\t\t\t\terr = c.printGoroutines(t, ctx, \"\\t\", gs[groups[i].Offset:][:groups[i].Count], fgl, flags, depth, cmd, &done, state)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t\tfmt.Fprintf(t.stdout, \"\\tTotal: %d\\n\", groups[i].Total)\n\t\t\t\tif i != len(groups)-1 {\n\t\t\t\t\tfmt.Fprintf(t.stdout, \"\\n\")\n\t\t\t\t}\n\t\t\t}\n\t\t\tif tooManyGroups {\n\t\t\t\tfmt.Fprintf(t.stdout, \"Too many groups\\n\")\n\t\t\t}\n\t\t} else {\n\t\t\tslices.SortFunc(gs, func(a, b *api.Goroutine) int { return cmp.Compare(a.ID, b.ID) })\n\t\t\terr = c.printGoroutines(t, ctx, \"\", gs, fgl, flags, depth, cmd, &done, state)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tgslen += len(gs)\n\t\t}\n\t}\n\tif gslen > 0 {\n\t\tfmt.Fprintf(t.stdout, \"[%d goroutines]\\n\", gslen)\n\t}\n\treturn nil\n}\n\nfunc selectedGID(state *api.DebuggerState) int64 {\n\tif state.SelectedGoroutine == nil {\n\t\treturn 0\n\t}\n\treturn state.SelectedGoroutine.ID\n}\n\nfunc (c *Commands) goroutine(t *Term, ctx callContext, argstr string) error {\n\targs := config.Split2PartsBySpace(argstr)\n\n\tif ctx.Prefix == onPrefix {\n\t\tif len(args) != 1 || args[0] != \"\" {\n\t\t\treturn errors.New(\"too many arguments to goroutine\")\n\t\t}\n\t\tctx.Breakpoint.Goroutine = true\n\t\treturn nil\n\t}\n\n\tif len(args) == 1 {\n\t\tif args[0] == \"\" {\n\t\t\treturn printscope(t)\n\t\t}\n\t\tgid, err := strconv.ParseInt(argstr, 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\toldState, err := t.client.GetState()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnewState, err := t.client.SwitchGoroutine(gid)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tc.frame = 0\n\t\tfmt.Fprintf(t.stdout, \"Switched from %d to %d (thread %d)\\n\", selectedGID(oldState), gid, newState.CurrentThread.ID)\n\t\treturn nil\n\t}\n\n\tvar err error\n\tctx.Scope.GoroutineID, err = strconv.ParseInt(args[0], 10, 64)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn c.CallWithContext(args[1], t, ctx)\n}\n\n// Handle \"frame\", \"up\", \"down\" commands.\nfunc (c *Commands) frameCommand(t *Term, ctx callContext, argstr string, direction frameDirection) error {\n\tframe := 1\n\targ := \"\"\n\tif len(argstr) == 0 {\n\t\tif direction == frameSet {\n\t\t\treturn errors.New(\"not enough arguments\")\n\t\t}\n\t} else {\n\t\targs := config.Split2PartsBySpace(argstr)\n\t\tvar err error\n\t\tif frame, err = strconv.Atoi(args[0]); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif len(args) > 1 {\n\t\t\targ = args[1]\n\t\t}\n\t}\n\tswitch direction {\n\tcase frameUp:\n\t\tframe = c.frame + frame\n\tcase frameDown:\n\t\tframe = c.frame - frame\n\t}\n\tif len(arg) > 0 {\n\t\tctx.Scope.Frame = frame\n\t\treturn c.CallWithContext(arg, t, ctx)\n\t}\n\tif frame < 0 {\n\t\treturn fmt.Errorf(\"Invalid frame %d\", frame)\n\t}\n\tstack, err := t.client.Stacktrace(ctx.Scope.GoroutineID, frame, frame, 0, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif len(stack) == 0 {\n\t\treturn fmt.Errorf(\"Invalid frame %d\", frame)\n\t}\n\tc.frame = frame\n\tstate, err := t.client.GetState()\n\tif err != nil {\n\t\treturn err\n\t}\n\tprintcontext(t, state)\n\tth := stack[0]\n\tfmt.Fprintf(t.stdout, \"Frame %d: %s:%d (PC: %x)\\n\", frame, t.formatPath(th.File), th.Line, th.PC)\n\tprintfile(t, th.File, th.Line, true)\n\treturn nil\n}\n\nfunc (c *Commands) deferredCommand(t *Term, ctx callContext, argstr string) error {\n\tctx.Prefix = deferredPrefix\n\n\tspace := strings.IndexRune(argstr, ' ')\n\tif space < 0 {\n\t\treturn errors.New(\"not enough arguments\")\n\t}\n\n\tvar err error\n\tctx.Scope.DeferredCall, err = strconv.Atoi(argstr[:space])\n\tif err != nil {\n\t\treturn err\n\t}\n\tif ctx.Scope.DeferredCall <= 0 {\n\t\treturn errors.New(\"argument of deferred must be a number greater than 0 (use 'stack -defer' to see the list of deferred calls)\")\n\t}\n\treturn c.CallWithContext(argstr[space:], t, ctx)\n}\n\nfunc printscope(t *Term) error {\n\tstate, err := t.client.GetState()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfmt.Fprintf(t.stdout, \"Thread %s\\n\", t.formatThread(state.CurrentThread))\n\tif state.SelectedGoroutine != nil {\n\t\twriteGoroutineLong(t, t.stdout, state.SelectedGoroutine, \"\")\n\t}\n\treturn nil\n}\n\nfunc (t *Term) formatThread(th *api.Thread) string {\n\tif th == nil {\n\t\treturn \"<nil>\"\n\t}\n\treturn fmt.Sprintf(\"%d at %s:%d\", th.ID, t.formatPath(th.File), th.Line)\n}\n\nfunc (t *Term) formatLocation(loc api.Location) string {\n\treturn fmt.Sprintf(\"%s:%d %s (%#v)\", t.formatPath(loc.File), loc.Line, loc.Function.Name(), loc.PC)\n}\n\nfunc (t *Term) formatGoroutine(g *api.Goroutine, fgl api.FormatGoroutineLoc) string {\n\tif g == nil {\n\t\treturn \"<nil>\"\n\t}\n\tif g.Unreadable != \"\" {\n\t\treturn fmt.Sprintf(\"(unreadable %s)\", g.Unreadable)\n\t}\n\tvar locname string\n\tvar loc api.Location\n\tswitch fgl {\n\tcase api.FglRuntimeCurrent:\n\t\tlocname = \"Runtime\"\n\t\tloc = g.CurrentLoc\n\tcase api.FglUserCurrent:\n\t\tlocname = \"User\"\n\t\tloc = g.UserCurrentLoc\n\tcase api.FglGo:\n\t\tlocname = \"Go\"\n\t\tloc = g.GoStatementLoc\n\tcase api.FglStart:\n\t\tlocname = \"Start\"\n\t\tloc = g.StartLoc\n\t}\n\n\tbuf := new(strings.Builder)\n\tfmt.Fprintf(buf, \"%d - %s: %s\", g.ID, locname, t.formatLocation(loc))\n\tif g.ThreadID != 0 {\n\t\tfmt.Fprintf(buf, \" (thread %d)\", g.ThreadID)\n\t}\n\n\tif (g.Status == api.GoroutineWaiting || g.Status == api.GoroutineSyscall) && g.WaitReason != 0 {\n\t\tfmt.Fprintf(buf, \" [%s\", api.WaitReasonString(t.goVersion(), g.WaitReason))\n\t\tif g.WaitSince > 0 {\n\t\t\tfmt.Fprintf(buf, \" %d\", g.WaitSince)\n\t\t}\n\t\tfmt.Fprintf(buf, \"]\")\n\t}\n\n\treturn buf.String()\n}\n\nfunc writeGoroutineLong(t *Term, w io.Writer, g *api.Goroutine, prefix string) {\n\tfmt.Fprintf(w, \"%sGoroutine %d:\\n%s\\tRuntime: %s\\n%s\\tUser: %s\\n%s\\tGo: %s\\n%s\\tStart: %s\\n\",\n\t\tprefix, g.ID,\n\t\tprefix, t.formatLocation(g.CurrentLoc),\n\t\tprefix, t.formatLocation(g.UserCurrentLoc),\n\t\tprefix, t.formatLocation(g.GoStatementLoc),\n\t\tprefix, t.formatLocation(g.StartLoc))\n\twriteGoroutineLabels(w, g, prefix+\"\\t\")\n}\n\nfunc writeGoroutineLabels(w io.Writer, g *api.Goroutine, prefix string) {\n\tconst maxNumberOfGoroutineLabels = 5\n\n\tif len(g.Labels) <= 0 {\n\t\treturn\n\t}\n\n\tkeys := make([]string, 0, len(g.Labels))\n\tfor k := range g.Labels {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\tmore := false\n\tif len(keys) > maxNumberOfGoroutineLabels {\n\t\tmore = true\n\t\tkeys = keys[:maxNumberOfGoroutineLabels]\n\t}\n\tfmt.Fprintf(w, \"%sLabels: \", prefix)\n\tfor i, k := range keys {\n\t\tfmt.Fprintf(w, \"%q:%q\", k, g.Labels[k])\n\t\tif i != len(keys)-1 {\n\t\t\tfmt.Fprintf(w, \", \")\n\t\t} else if more {\n\t\t\tfmt.Fprintf(w, \"... (%d more)\", len(g.Labels)-maxNumberOfGoroutineLabels)\n\t\t}\n\t}\n\tfmt.Fprintf(w, \"\\n\")\n}\n\nfunc restart(t *Term, ctx callContext, args string) error {\n\tif t.client.Recorded() {\n\t\treturn restartRecorded(t, ctx, args)\n\t}\n\n\treturn restartLive(t, ctx, args)\n}\n\nfunc restartRecorded(t *Term, ctx callContext, args string) error {\n\tv := config.Split2PartsBySpace(args)\n\n\trerecord := false\n\tresetArgs := false\n\tnewArgv := []string{}\n\tnewRedirects := [3]string{}\n\trestartPos := \"\"\n\n\tif len(v) > 0 {\n\t\tif v[0] == \"-r\" {\n\t\t\trerecord = true\n\t\t\tif len(v) == 2 {\n\t\t\t\tvar err error\n\t\t\t\tresetArgs, newArgv, newRedirects, err = parseNewArgv(v[1])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif len(v) > 1 {\n\t\t\t\treturn errors.New(\"too many arguments to restart\")\n\t\t\t}\n\t\t\trestartPos = v[0]\n\t\t}\n\t}\n\n\tif err := restartIntl(t, rerecord, restartPos, resetArgs, newArgv, newRedirects); err != nil {\n\t\treturn err\n\t}\n\n\tstate, err := t.client.GetState()\n\tif err != nil {\n\t\treturn err\n\t}\n\tprintcontext(t, state)\n\tprintPos(t, state.CurrentThread, printPosShowArrow)\n\tt.onStop()\n\treturn nil\n}\n\n// parseOptionalCount parses an optional count argument.\n// If there are not arguments, a value of 1 is returned as the default.\nfunc parseOptionalCount(arg string) (int64, error) {\n\tif len(arg) == 0 {\n\t\treturn 1, nil\n\t}\n\treturn strconv.ParseInt(arg, 0, 64)\n}\n\nfunc restartLive(t *Term, ctx callContext, args string) error {\n\tt.oldPid = 0\n\tresetArgs, newArgv, newRedirects, err := parseNewArgv(args)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif err := restartIntl(t, false, \"\", resetArgs, newArgv, newRedirects); err != nil {\n\t\treturn err\n\t}\n\n\tfmt.Fprintln(t.stdout, \"Process restarted with PID\", t.client.ProcessPid())\n\treturn nil\n}\n\nfunc restartIntl(t *Term, rerecord bool, restartPos string, resetArgs bool, newArgv []string, newRedirects [3]string) error {\n\tdiscarded, err := t.client.RestartFrom(rerecord, restartPos, resetArgs, newArgv, newRedirects, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor i := range discarded {\n\t\tfmt.Fprintf(t.stdout, \"Discarded %s at %s: %v\\n\", formatBreakpointName(discarded[i].Breakpoint, false), t.formatBreakpointLocation(discarded[i].Breakpoint), discarded[i].Reason)\n\t}\n\treturn nil\n}\n\nfunc parseNewArgv(args string) (resetArgs bool, newArgv []string, newRedirects [3]string, err error) {\n\tif args == \"\" {\n\t\treturn false, nil, [3]string{}, nil\n\t}\n\tv, err := argv.Argv(args,\n\t\tfunc(s string) (string, error) {\n\t\t\treturn \"\", fmt.Errorf(\"Backtick not supported in '%s'\", s)\n\t\t},\n\t\tnil)\n\tif err != nil {\n\t\treturn false, nil, [3]string{}, err\n\t}\n\tif len(v) != 1 {\n\t\treturn false, nil, [3]string{}, fmt.Errorf(\"illegal commandline '%s'\", args)\n\t}\n\tw := v[0]\n\tif len(w) == 0 {\n\t\treturn false, nil, [3]string{}, nil\n\t}\n\tif w[0] == \"-noargs\" {\n\t\tif len(w) > 1 {\n\t\t\treturn false, nil, [3]string{}, errors.New(\"too many arguments to restart\")\n\t\t}\n\t\treturn true, nil, [3]string{}, nil\n\t}\n\tredirs := [3]string{}\n\tfor len(w) > 0 {\n\t\tvar found bool\n\t\tvar err error\n\t\tw, found, err = parseOneRedirect(w, &redirs)\n\t\tif err != nil {\n\t\t\treturn false, nil, [3]string{}, err\n\t\t}\n\t\tif !found {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn true, w, redirs, nil\n}\n\nfunc parseOneRedirect(w []string, redirs *[3]string) ([]string, bool, error) {\n\tprefixes := []string{\"<\", \">\", \"2>\"}\n\tnames := []string{\"stdin\", \"stdout\", \"stderr\"}\n\tif len(w) >= 2 {\n\t\tif slices.Contains(prefixes, w[len(w)-2]) {\n\t\t\tw[len(w)-2] += w[len(w)-1]\n\t\t\tw = w[:len(w)-1]\n\t\t}\n\t}\n\tfor i, prefix := range prefixes {\n\t\tif strings.HasPrefix(w[len(w)-1], prefix) {\n\t\t\tif redirs[i] != \"\" {\n\t\t\t\treturn nil, false, fmt.Errorf(\"redirect error: %s redirected twice\", names[i])\n\t\t\t}\n\t\t\tredirs[i] = w[len(w)-1][len(prefix):]\n\t\t\treturn w[:len(w)-1], true, nil\n\t\t}\n\t}\n\treturn w, false, nil\n}\n\nfunc printcontextNoState(t *Term) {\n\tstate, _ := t.client.GetState()\n\tif state == nil || state.CurrentThread == nil {\n\t\treturn\n\t}\n\tprintcontext(t, state)\n}\n\nfunc (c *Commands) rebuild(t *Term, ctx callContext, args string) error {\n\tif ctx.Prefix == revPrefix {\n\t\treturn c.rewind(t, ctx, args)\n\t}\n\tdefer t.onStop()\n\tdiscarded, err := t.client.Restart(true)\n\tif len(discarded) > 0 {\n\t\tfmt.Fprintf(t.stdout, \"not all breakpoints could be restored.\")\n\t}\n\treturn err\n}\n\nfunc (c *Commands) cont(t *Term, ctx callContext, args string) error {\n\tif args != \"\" {\n\t\ttmp, err := setBreakpoint(t, ctx, false, args)\n\t\tif err != nil {\n\t\t\tif !strings.Contains(err.Error(), \"Breakpoint exists\") {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\tdefer func() {\n\t\t\tfor _, bp := range tmp {\n\t\t\t\tif _, err := t.client.ClearBreakpoint(bp.ID); err != nil {\n\t\t\t\t\tfmt.Fprintf(t.stdout, \"failed to clear temporary breakpoint: %d\", bp.ID)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t}\n\tif ctx.Prefix == revPrefix {\n\t\treturn c.rewind(t, ctx, args)\n\t}\n\tdefer t.onStop()\n\tc.frame = 0\n\tstateChan := t.client.Continue()\n\tvar state *api.DebuggerState\n\tfor state = range stateChan {\n\t\tif state.Err != nil {\n\t\t\tprintcontextNoState(t)\n\t\t\treturn state.Err\n\t\t}\n\t\tprintcontext(t, state)\n\t}\n\tprintPos(t, state.CurrentThread, printPosShowArrow)\n\treturn nil\n}\n\nfunc continueUntilCompleteNext(t *Term, state *api.DebuggerState, op string, shouldPrintFile bool) error {\n\tdefer t.onStop()\n\tif !state.NextInProgress {\n\t\tif shouldPrintFile {\n\t\t\tprintPos(t, state.CurrentThread, printPosShowArrow)\n\t\t}\n\t\treturn nil\n\t}\n\tskipBreakpoints := false\n\tfor {\n\t\tfmt.Fprintf(t.stdout, \"\\tbreakpoint hit during %s\", op)\n\t\tif !skipBreakpoints {\n\t\t\tfmt.Fprintf(t.stdout, \"\\n\")\n\t\t\tanswer, err := promptAutoContinue(t, op)\n\t\t\tswitch answer {\n\t\t\tcase \"f\": // finish next\n\t\t\t\tskipBreakpoints = true\n\t\t\t\tfallthrough\n\t\t\tcase \"c\": // continue once\n\t\t\t\tfmt.Fprintf(t.stdout, \"continuing...\\n\")\n\t\t\tcase \"s\": // stop and cancel\n\t\t\t\tfallthrough\n\t\t\tdefault:\n\t\t\t\tt.client.CancelNext()\n\t\t\t\tprintPos(t, state.CurrentThread, printPosShowArrow)\n\t\t\t\treturn err\n\t\t\t}\n\t\t} else {\n\t\t\tfmt.Fprintf(t.stdout, \", continuing...\\n\")\n\t\t}\n\t\tstateChan := t.client.DirectionCongruentContinue()\n\t\tvar state *api.DebuggerState\n\t\tfor state = range stateChan {\n\t\t\tif state.Err != nil {\n\t\t\t\tprintcontextNoState(t)\n\t\t\t\treturn state.Err\n\t\t\t}\n\t\t\tprintcontext(t, state)\n\t\t}\n\t\tif !state.NextInProgress {\n\t\t\tprintPos(t, state.CurrentThread, printPosShowArrow)\n\t\t\treturn nil\n\t\t}\n\t}\n}\n\nfunc promptAutoContinue(t *Term, op string) (string, error) {\n\tfor {\n\t\tanswer, err := t.line.Prompt(fmt.Sprintf(\"[c] continue [s] stop here and cancel %s, [f] finish %s skipping all breakpoints? \", op, op))\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tanswer = strings.ToLower(strings.TrimSpace(answer))\n\t\tswitch answer {\n\t\tcase \"f\", \"c\", \"s\":\n\t\t\treturn answer, nil\n\t\t}\n\t}\n}\n\nfunc scopePrefixSwitch(t *Term, ctx callContext) error {\n\tif ctx.Scope.GoroutineID > 0 {\n\t\t_, err := t.client.SwitchGoroutine(ctx.Scope.GoroutineID)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc exitedToError(state *api.DebuggerState, err error) (*api.DebuggerState, error) {\n\tif err == nil && state.Exited {\n\t\treturn nil, fmt.Errorf(\"Process %d has exited with status %d\", state.Pid, state.ExitStatus)\n\t}\n\treturn state, err\n}\n\nfunc (c *Commands) step(t *Term, ctx callContext, args string) error {\n\tif err := scopePrefixSwitch(t, ctx); err != nil {\n\t\treturn err\n\t}\n\tc.frame = 0\n\tstepfn := t.client.Step\n\tif ctx.Prefix == revPrefix {\n\t\tstepfn = t.client.ReverseStep\n\t}\n\tstate, err := exitedToError(stepfn())\n\tif err != nil {\n\t\tprintcontextNoState(t)\n\t\treturn err\n\t}\n\tprintcontext(t, state)\n\treturn continueUntilCompleteNext(t, state, \"step\", true)\n}\n\nvar errNotOnFrameZero = errors.New(\"not on topmost frame\")\n\n// stepInstruction implements the step-instruction (stepi) command.\nfunc (c *Commands) stepInstruction(t *Term, ctx callContext, args string) error {\n\treturn stepInstruction(t, ctx, c.frame, false)\n}\n\n// nextInstruction implements the next-instruction (nexti) command.\nfunc (c *Commands) nextInstruction(t *Term, ctx callContext, args string) error {\n\treturn stepInstruction(t, ctx, c.frame, true)\n}\n\nfunc stepInstruction(t *Term, ctx callContext, frame int, skipCalls bool) error {\n\tif err := scopePrefixSwitch(t, ctx); err != nil {\n\t\treturn err\n\t}\n\tif frame != 0 {\n\t\treturn errNotOnFrameZero\n\t}\n\n\tdefer t.onStop()\n\tvar fn func(bool) (*api.DebuggerState, error)\n\tif ctx.Prefix == revPrefix {\n\t\tfn = t.client.ReverseStepInstruction\n\t} else {\n\t\tfn = t.client.StepInstruction\n\t}\n\n\tstate, err := exitedToError(fn(skipCalls))\n\tif err != nil {\n\t\tprintcontextNoState(t)\n\t\treturn err\n\t}\n\tprintcontext(t, state)\n\tprintPos(t, state.CurrentThread, printPosShowArrow|printPosStepInstruction)\n\treturn nil\n}\n\nfunc (c *Commands) revCmd(t *Term, ctx callContext, args string) error {\n\tif len(args) == 0 {\n\t\treturn errors.New(\"not enough arguments\")\n\t}\n\n\tctx.Prefix = revPrefix\n\treturn c.CallWithContext(args, t, ctx)\n}\n\nfunc (c *Commands) next(t *Term, ctx callContext, args string) error {\n\tif err := scopePrefixSwitch(t, ctx); err != nil {\n\t\treturn err\n\t}\n\tif c.frame != 0 {\n\t\treturn errNotOnFrameZero\n\t}\n\n\tnextfn := t.client.Next\n\tif ctx.Prefix == revPrefix {\n\t\tnextfn = t.client.ReverseNext\n\t}\n\n\tvar count int64\n\tvar err error\n\tif count, err = parseOptionalCount(args); err != nil {\n\t\treturn err\n\t} else if count <= 0 {\n\t\treturn errors.New(\"Invalid next count\")\n\t}\n\tfor ; count > 0; count-- {\n\t\tstate, err := exitedToError(nextfn())\n\t\tif err != nil {\n\t\t\tprintcontextNoState(t)\n\t\t\treturn err\n\t\t}\n\t\t// If we're about the exit the loop, print the context.\n\t\tfinishedNext := count == 1\n\t\tif finishedNext {\n\t\t\tprintcontext(t, state)\n\t\t}\n\t\tif err := continueUntilCompleteNext(t, state, \"next\", finishedNext); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (c *Commands) stepout(t *Term, ctx callContext, args string) error {\n\tif err := scopePrefixSwitch(t, ctx); err != nil {\n\t\treturn err\n\t}\n\tif c.frame != 0 {\n\t\treturn errNotOnFrameZero\n\t}\n\n\tstepoutfn := t.client.StepOut\n\tif ctx.Prefix == revPrefix {\n\t\tstepoutfn = t.client.ReverseStepOut\n\t}\n\n\tstate, err := exitedToError(stepoutfn())\n\tif err != nil {\n\t\tprintcontextNoState(t)\n\t\treturn err\n\t}\n\tprintcontext(t, state)\n\treturn continueUntilCompleteNext(t, state, \"stepout\", true)\n}\n\nfunc (c *Commands) call(t *Term, ctx callContext, args string) error {\n\tif err := scopePrefixSwitch(t, ctx); err != nil {\n\t\treturn err\n\t}\n\tconst unsafePrefix = \"-unsafe \"\n\tunsafe := false\n\tif strings.HasPrefix(args, unsafePrefix) {\n\t\tunsafe = true\n\t\targs = args[len(unsafePrefix):]\n\t}\n\tstate, err := exitedToError(t.client.Call(ctx.Scope.GoroutineID, args, unsafe))\n\tc.frame = 0\n\tif err != nil {\n\t\tprintcontextNoState(t)\n\t\treturn err\n\t}\n\tprintcontext(t, state)\n\treturn continueUntilCompleteNext(t, state, \"call\", true)\n}\n\nfunc clear(t *Term, ctx callContext, args string) error {\n\tif len(args) == 0 {\n\t\treturn errors.New(\"not enough arguments\")\n\t}\n\tid, err := strconv.Atoi(args)\n\tvar bp *api.Breakpoint\n\tif err == nil {\n\t\tbp, err = t.client.ClearBreakpoint(id)\n\t} else {\n\t\tbp, err = t.client.ClearBreakpointByName(args)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tfmt.Fprintf(t.stdout, \"%s cleared at %s\\n\", formatBreakpointName(bp, true), t.formatBreakpointLocation(bp))\n\treturn nil\n}\n\nfunc clearAll(t *Term, ctx callContext, args string) error {\n\tbreakPoints, err := t.client.ListBreakpoints(false)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar locPCs map[uint64]struct{}\n\tif args != \"\" {\n\t\tlocs, _, err := t.client.FindLocation(api.EvalScope{GoroutineID: -1, Frame: 0}, args, true, t.substitutePathRules())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tlocPCs = make(map[uint64]struct{})\n\t\tfor _, loc := range locs {\n\t\t\tfor _, pc := range loc.PCs {\n\t\t\t\tlocPCs[pc] = struct{}{}\n\t\t\t}\n\t\t\tlocPCs[loc.PC] = struct{}{}\n\t\t}\n\t}\n\n\tfor _, bp := range breakPoints {\n\t\tif locPCs != nil {\n\t\t\tif _, ok := locPCs[bp.Addr]; !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif bp.ID < 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t_, err := t.client.ClearBreakpoint(bp.ID)\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(t.stdout, \"Couldn't delete %s at %s: %s\\n\", formatBreakpointName(bp, false), t.formatBreakpointLocation(bp), err)\n\t\t}\n\t\tfmt.Fprintf(t.stdout, \"%s cleared at %s\\n\", formatBreakpointName(bp, true), t.formatBreakpointLocation(bp))\n\t}\n\treturn nil\n}\n\nfunc toggle(t *Term, ctx callContext, args string) error {\n\tif args == \"\" {\n\t\treturn errors.New(\"not enough arguments\")\n\t}\n\tid, err := strconv.Atoi(args)\n\tvar bp *api.Breakpoint\n\tif err == nil {\n\t\tbp, err = t.client.ToggleBreakpoint(id)\n\t} else {\n\t\tbp, err = t.client.ToggleBreakpointByName(args)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tfmt.Fprintf(t.stdout, \"%s toggled at %s\\n\", formatBreakpointName(bp, true), t.formatBreakpointLocation(bp))\n\treturn nil\n}\n\nfunc breakpoints(t *Term, ctx callContext, args string) error {\n\t// Parse arguments\n\tvar showAll bool\n\tvar saveFile string\n\n\tif args != \"\" {\n\t\targv := strings.Fields(args)\n\targsLoop:\n\t\tfor i, arg := range argv {\n\t\t\tswitch arg {\n\t\t\tcase \"-a\":\n\t\t\t\tshowAll = true\n\t\t\tcase \"-save\":\n\t\t\t\tif i+1 >= len(argv) {\n\t\t\t\t\treturn errors.New(\"missing filename after -save flag\")\n\t\t\t\t}\n\t\t\t\tsaveFile = argv[i+1]\n\t\t\t\tbreak argsLoop // Exit loop since we found -save and its argument\n\t\t\t}\n\t\t}\n\t}\n\n\tbreakPoints, err := t.client.ListBreakpoints(showAll)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// If -save flag is provided, save breakpoints to file\n\tif saveFile != \"\" {\n\t\tfile, err := os.Create(saveFile)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"failed to open file '%s': %w\", saveFile, err)\n\t\t}\n\t\tdefer file.Close()\n\t\tw := bufio.NewWriter(file)\n\t\tdefer w.Flush()\n\n\t\t// Instead of storing the ID, we label the breakpoints to\n\t\t// reference them properly in future executions\n\t\taliaser := func(bp *api.Breakpoint) string {\n\t\t\tif bp.Name == \"\" {\n\t\t\t\treturn fmt.Sprintf(\"bp%d\", bp.ID)\n\t\t\t}\n\t\t\treturn bp.Name\n\t\t}\n\n\t\tfor _, bp := range breakPoints {\n\t\t\t// We don't need to store these breakpoints\n\t\t\tif bp.ID < 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Skip watchpoints as they can't be reliably restored\n\t\t\tif bp.WatchExpr != \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tvar err error\n\t\t\tif bp.Tracepoint {\n\t\t\t\t_, err = fmt.Fprintf(w, \"trace %s %s:%d\\n\", aliaser(bp), bp.File, bp.Line)\n\t\t\t} else {\n\t\t\t\t_, err = fmt.Fprintf(w, \"break %s %s:%d\\n\", aliaser(bp), bp.File, bp.Line)\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"failed to write breakpoint to file %s:%d\", bp.File, bp.Line)\n\t\t\t}\n\t\t\tif len(bp.Cond) > 0 {\n\t\t\t\t_, err = fmt.Fprintf(w, \"condition %s %s\\n\", aliaser(bp), bp.Cond)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"failed to write condition to file %d:%s\", bp.ID, bp.Cond)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif bp.HitCond != \"\" {\n\t\t\t\tif bp.HitCondPerG {\n\t\t\t\t\t_, err = fmt.Fprintf(w, \"condition -per-g-hitcount %s %s\\n\", aliaser(bp), bp.HitCond)\n\t\t\t\t} else {\n\t\t\t\t\t_, err = fmt.Fprintf(w, \"condition -hitcount %s %s\\n\", aliaser(bp), bp.HitCond)\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"failed to write hit condition to file %d:%s\", bp.ID, bp.HitCond)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif bp.Disabled {\n\t\t\t\t_, err = fmt.Fprintf(w, \"toggle %s\\n\", aliaser(bp))\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"failed to write breakpoint status to file %d\", bp.ID)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfmt.Printf(\"Breakpoints successfully saved to '%s'\\n\", saveFile)\n\t\treturn nil\n\t}\n\n\t// Display breakpoints (original functionality)\n\tslices.SortFunc(breakPoints, func(a, b *api.Breakpoint) int { return cmp.Compare(a.ID, b.ID) })\n\tfor _, bp := range breakPoints {\n\t\tenabled := \"(enabled)\"\n\t\tif bp.Disabled {\n\t\t\tenabled = \"(disabled)\"\n\t\t} else if bp.ExprString != \"\" {\n\t\t\tenabled = \"(suspended)\"\n\t\t}\n\t\tfmt.Fprintf(t.stdout, \"%s %s\", formatBreakpointName(bp, true), enabled)\n\t\tif bp.ExprString != \"\" {\n\t\t\tfmt.Fprintf(t.stdout, \" at %s\\n\", bp.ExprString)\n\t\t} else {\n\t\t\tfmt.Fprintf(t.stdout, \" at %v (%d)\\n\", t.formatBreakpointLocation(bp), bp.TotalHitCount)\n\t\t}\n\n\t\tattrs := formatBreakpointAttrs(\"\\t\", bp, false)\n\n\t\tif len(attrs) > 0 {\n\t\t\tfmt.Fprintf(t.stdout, \"%s\\n\", strings.Join(attrs, \"\\n\"))\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc formatBreakpointAttrs(prefix string, bp *api.Breakpoint, includeTrace bool) []string {\n\tvar attrs []string\n\tif bp.Cond != \"\" {\n\t\tattrs = append(attrs, fmt.Sprintf(\"%scond %s\", prefix, bp.Cond))\n\t}\n\tif bp.HitCond != \"\" {\n\t\tif bp.HitCondPerG {\n\t\t\tattrs = append(attrs, fmt.Sprintf(\"%scond -per-g-hitcount %s\", prefix, bp.HitCond))\n\t\t} else {\n\t\t\tattrs = append(attrs, fmt.Sprintf(\"%scond -hitcount %s\", prefix, bp.HitCond))\n\t\t}\n\t}\n\tif bp.Stacktrace > 0 {\n\t\tattrs = append(attrs, fmt.Sprintf(\"%sstack %d\", prefix, bp.Stacktrace))\n\t}\n\tif bp.Goroutine {\n\t\tattrs = append(attrs, fmt.Sprintf(\"%sgoroutine\", prefix))\n\t}\n\tif bp.LoadArgs != nil {\n\t\tif *(bp.LoadArgs) == longLoadConfig {\n\t\t\tattrs = append(attrs, fmt.Sprintf(\"%sargs -v\", prefix))\n\t\t} else {\n\t\t\tattrs = append(attrs, fmt.Sprintf(\"%sargs\", prefix))\n\t\t}\n\t}\n\tif bp.LoadLocals != nil {\n\t\tif *(bp.LoadLocals) == longLoadConfig {\n\t\t\tattrs = append(attrs, fmt.Sprintf(\"%slocals -v\", prefix))\n\t\t} else {\n\t\t\tattrs = append(attrs, fmt.Sprintf(\"%slocals\", prefix))\n\t\t}\n\t}\n\tfor i := range bp.Variables {\n\t\tattrs = append(attrs, fmt.Sprintf(\"%sprint %s\", prefix, bp.Variables[i]))\n\t}\n\tfor i := range bp.CustomCommands {\n\t\tattrs = append(attrs, fmt.Sprintf(\"%s%s\", prefix, bp.CustomCommands[i]))\n\t}\n\tif includeTrace && bp.Tracepoint {\n\t\tattrs = append(attrs, fmt.Sprintf(\"%strace\", prefix))\n\t}\n\tfor i := range bp.VerboseDescr {\n\t\tattrs = append(attrs, fmt.Sprintf(\"%s%s\", prefix, bp.VerboseDescr[i]))\n\t}\n\treturn attrs\n}\n\nfunc setBreakpoint(t *Term, ctx callContext, tracepoint bool, argstr string) ([]*api.Breakpoint, error) {\n\tvar (\n\t\tspec string\n\n\t\trequestedBp = &api.Breakpoint{}\n\t)\n\n\tparseSpec := func(args []string) error {\n\t\tswitch len(args) {\n\t\tcase 1:\n\t\t\tif len(args[0]) != 0 {\n\t\t\t\tspec = argstr\n\t\t\t} else {\n\t\t\t\t// no arg specified\n\t\t\t\tspec = \"+0\"\n\t\t\t}\n\t\tcase 2:\n\t\t\tif api.ValidBreakpointName(args[0]) == nil {\n\t\t\t\trequestedBp.Name = args[0]\n\t\t\t\tspec = args[1]\n\t\t\t} else {\n\t\t\t\tspec = argstr\n\t\t\t}\n\t\tdefault:\n\t\t\treturn errors.New(\"address required\")\n\t\t}\n\t\treturn nil\n\t}\n\n\targs := config.Split2PartsBySpace(argstr)\n\tif err := parseSpec(args); err != nil {\n\t\treturn nil, err\n\t}\n\n\trequestedBp.Tracepoint = tracepoint\n\tlocs, substSpec, findLocErr := t.client.FindLocation(ctx.Scope, spec, true, t.substitutePathRules())\n\tif findLocErr != nil {\n\t\tr := regexp.MustCompile(`^if | if `)\n\t\tif match := r.FindStringIndex(argstr); match != nil {\n\t\t\trequestedBp.Name = \"\"\n\t\t\trequestedBp.Cond = argstr[match[1]:]\n\t\t\targstr = argstr[:match[0]]\n\t\t\targs = config.Split2PartsBySpace(argstr)\n\t\t\tif err := parseSpec(args); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tlocs, substSpec, findLocErr = t.client.FindLocation(ctx.Scope, spec, true, t.substitutePathRules())\n\t\t}\n\t}\n\tif findLocErr != nil && requestedBp.Name != \"\" {\n\t\trequestedBp.Name = \"\"\n\t\tspec = argstr\n\t\tvar err2 error\n\t\tvar substSpec2 string\n\t\tlocs, substSpec2, err2 = t.client.FindLocation(ctx.Scope, spec, true, t.substitutePathRules())\n\t\tif err2 == nil {\n\t\t\tfindLocErr = nil\n\t\t\tsubstSpec = substSpec2\n\t\t}\n\t}\n\n\tfns, _ := t.client.ListFunctions(`^plugin\\.Open$`, 0)\n\t_, err := t.client.GetState()\n\tshouldAskToSuspendBreakpointQuestion := \"\"\n\tswitch {\n\tcase len(fns) > 0:\n\t\tshouldAskToSuspendBreakpointQuestion = \"Set a suspended breakpoint (Delve will try to set this breakpoint when a plugin is loaded) [Y/n]?\"\n\tcase isErrProcessExited(err):\n\t\tshouldAskToSuspendBreakpointQuestion = \"Set a suspended breakpoint (Delve will try to set this breakpoint when process restarts) [Y/n]?\"\n\tcase t.client.FollowExecEnabled():\n\t\tshouldAskToSuspendBreakpointQuestion = \"Set a suspended breakpoint (Delve will try to set this breakpoint when child processes are added) [Y/n]?\"\n\t}\n\n\tif findLocErr != nil && shouldAskToSuspendBreakpointQuestion != \"\" {\n\t\tfmt.Fprintf(os.Stderr, \"Command failed: %s\\n\", findLocErr.Error())\n\t\tanswer, err := yesno(t.line, shouldAskToSuspendBreakpointQuestion, \"yes\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif !answer {\n\t\t\treturn nil, nil\n\t\t}\n\t\tfindLocErr = nil\n\t\tbp, err := t.client.CreateBreakpointWithExpr(requestedBp, spec, t.substitutePathRules(), true)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfmt.Fprintf(t.stdout, \"%s set at %s\\n\", formatBreakpointName(bp, true), t.formatBreakpointLocation(bp))\n\t\treturn nil, nil\n\t}\n\n\tif findLocErr != nil {\n\t\treturn nil, findLocErr\n\t}\n\tif substSpec != \"\" {\n\t\tspec = substSpec\n\t}\n\n\tcreated := []*api.Breakpoint{}\n\tfor _, loc := range locs {\n\t\trequestedBp.Addr = loc.PC\n\t\trequestedBp.Addrs = loc.PCs\n\t\trequestedBp.AddrPid = loc.PCPids\n\t\tif tracepoint {\n\t\t\trequestedBp.LoadArgs = &ShortLoadConfig\n\t\t}\n\n\t\tbp, err := t.client.CreateBreakpointWithExpr(requestedBp, spec, t.substitutePathRules(), false)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tcreated = append(created, bp)\n\n\t\tfmt.Fprintf(t.stdout, \"%s set at %s\\n\", formatBreakpointName(bp, true), t.formatBreakpointLocation(bp))\n\t}\n\n\tvar shouldSetReturnBreakpoints bool\n\tloc, err := locspec.Parse(spec)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tswitch t := loc.(type) {\n\tcase *locspec.NormalLocationSpec:\n\t\tshouldSetReturnBreakpoints = t.LineOffset == -1 && t.FuncBase != nil\n\tcase *locspec.RegexLocationSpec:\n\t\tshouldSetReturnBreakpoints = true\n\t}\n\tif tracepoint && shouldSetReturnBreakpoints {\n\t\tfor i := range locs {\n\t\t\tif locs[i].Function == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\taddrs, err := t.client.(*rpc2.RPCClient).FunctionReturnLocations(locs[i].Function.Name())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tfor j := range addrs {\n\t\t\t\t_, err = t.client.CreateBreakpoint(&api.Breakpoint{\n\t\t\t\t\tAddr:        addrs[j],\n\t\t\t\t\tTraceReturn: true,\n\t\t\t\t\tLine:        -1,\n\t\t\t\t\tLoadArgs:    &ShortLoadConfig,\n\t\t\t\t})\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn created, nil\n}\n\nfunc breakpoint(t *Term, ctx callContext, args string) error {\n\t_, err := setBreakpoint(t, ctx, false, args)\n\treturn err\n}\n\nfunc tracepoint(t *Term, ctx callContext, args string) error {\n\tif ctx.Prefix == onPrefix {\n\t\tif args != \"\" {\n\t\t\treturn errors.New(\"too many arguments to trace\")\n\t\t}\n\t\tctx.Breakpoint.Tracepoint = true\n\t\treturn nil\n\t}\n\t_, err := setBreakpoint(t, ctx, true, args)\n\treturn err\n}\n\nfunc getEditorName() (string, []string, error) {\n\tvar editor string\n\tif editor = os.Getenv(\"DELVE_EDITOR\"); editor == \"\" {\n\t\tif editor = os.Getenv(\"EDITOR\"); editor == \"\" {\n\t\t\treturn \"\", nil, errors.New(\"Neither DELVE_EDITOR or EDITOR is set\")\n\t\t}\n\t}\n\n\teditorParts := strings.Fields(editor)\n\teditor = editorParts[0]\n\n\tvar userArgs []string\n\tif len(editorParts) > 1 {\n\t\tuserArgs = editorParts[1:]\n\t}\n\n\treturn editor, userArgs, nil\n}\n\nfunc runEditor(args ...string) error {\n\teditor, userArgs, err := getEditorName()\n\tif err != nil {\n\t\treturn err\n\t}\n\tallArgs := append(userArgs, args...)\n\tcmd := exec.Command(editor, allArgs...)\n\tcmd.Stdin = os.Stdin\n\tcmd.Stdout = os.Stdout\n\tcmd.Stderr = os.Stderr\n\treturn cmd.Run()\n}\n\nfunc edit(t *Term, ctx callContext, args string) error {\n\tfile, lineno, _, err := getLocation(t, ctx, args, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\teditor, _, err := getEditorName()\n\tif err != nil {\n\t\treturn err\n\t}\n\tswitch editor {\n\tcase \"code\":\n\t\treturn runEditor(\"--goto\", fmt.Sprintf(\"%s:%d\", file, lineno))\n\tcase \"zed\":\n\t\treturn runEditor(fmt.Sprintf(\"%s:%d:0\", file, lineno))\n\tcase \"hx\":\n\t\treturn runEditor(fmt.Sprintf(\"%s:%d\", file, lineno))\n\tcase \"vi\", \"vim\", \"nvim\":\n\t\treturn runEditor(fmt.Sprintf(\"+%d\", lineno), file)\n\tdefault:\n\t\treturn runEditor(fmt.Sprintf(\"+%d\", lineno), file)\n\t}\n}\n\nfunc watchpoint(t *Term, ctx callContext, args string) error {\n\tv := strings.SplitN(args, \" \", 2)\n\tif len(v) != 2 {\n\t\treturn errors.New(\"wrong number of arguments: watch [-r|-w|-rw] <expr>\")\n\t}\n\tvar wtype api.WatchType\n\tswitch v[0] {\n\tcase \"-r\":\n\t\twtype = api.WatchRead\n\tcase \"-w\":\n\t\twtype = api.WatchWrite\n\tcase \"-rw\":\n\t\twtype = api.WatchRead | api.WatchWrite\n\tdefault:\n\t\treturn fmt.Errorf(\"wrong argument %q to watch\", v[0])\n\t}\n\tbp, err := t.client.CreateWatchpoint(ctx.Scope, v[1], wtype)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfmt.Fprintf(t.stdout, \"%s set at %s\\n\", formatBreakpointName(bp, true), t.formatBreakpointLocation(bp))\n\treturn nil\n}\n\nfunc examineMemoryCmd(t *Term, ctx callContext, argstr string) error {\n\tvar (\n\t\taddress uint64\n\t\terr     error\n\t\tok      bool\n\t\targs    = strings.Split(argstr, \" \")\n\t)\n\n\t// Default value\n\tpriFmt := byte('x')\n\tcount := int64(1)\n\tsize := int64(1)\n\tisExpr := false\n\trawout := false\n\n\t// nextArg returns the next argument that is not an empty string, if any, and\n\t// advances the args slice to the position after that.\n\tnextArg := func() string {\n\t\tfor len(args) > 0 {\n\t\t\targ := args[0]\n\t\t\targs = args[1:]\n\t\t\tif arg != \"\" {\n\t\t\t\treturn arg\n\t\t\t}\n\t\t}\n\t\treturn \"\"\n\t}\n\nloop:\n\tfor {\n\t\tswitch cmd := nextArg(); cmd {\n\t\tcase \"\":\n\t\t\t// no more arguments\n\t\t\tbreak loop\n\t\tcase \"-fmt\":\n\t\t\targ := nextArg()\n\t\t\tif arg == \"\" {\n\t\t\t\treturn errors.New(\"expected argument after -fmt\")\n\t\t\t}\n\t\t\tif arg == \"raw\" {\n\t\t\t\trawout = true\n\t\t\t} else {\n\t\t\t\tfmtMapToPriFmt := map[string]byte{\n\t\t\t\t\t\"oct\":         'o',\n\t\t\t\t\t\"octal\":       'o',\n\t\t\t\t\t\"hex\":         'x',\n\t\t\t\t\t\"hexadecimal\": 'x',\n\t\t\t\t\t\"dec\":         'd',\n\t\t\t\t\t\"decimal\":     'd',\n\t\t\t\t\t\"bin\":         'b',\n\t\t\t\t\t\"binary\":      'b',\n\t\t\t\t}\n\t\t\t\tpriFmt, ok = fmtMapToPriFmt[arg]\n\t\t\t\tif !ok {\n\t\t\t\t\treturn fmt.Errorf(\"%q is not a valid format\", arg)\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"-count\", \"-len\":\n\t\t\targ := nextArg()\n\t\t\tif arg == \"\" {\n\t\t\t\treturn errors.New(\"expected argument after -count/-len\")\n\t\t\t}\n\t\t\tvar err error\n\t\t\tcount, err = strconv.ParseInt(arg, 0, 64)\n\t\t\tif err != nil || count <= 0 {\n\t\t\t\treturn errors.New(\"count/len must be a positive integer\")\n\t\t\t}\n\t\tcase \"-size\":\n\t\t\targ := nextArg()\n\t\t\tif arg == \"\" {\n\t\t\t\treturn errors.New(\"expected argument after -size\")\n\t\t\t}\n\t\t\tvar err error\n\t\t\tsize, err = strconv.ParseInt(arg, 0, 64)\n\t\t\tif err != nil || size <= 0 || size > 8 {\n\t\t\t\treturn errors.New(\"size must be a positive integer (<=8)\")\n\t\t\t}\n\t\tcase \"-x\":\n\t\t\tisExpr = true\n\t\t\tbreak loop // remaining args are going to be interpreted as expression\n\t\tdefault:\n\t\t\tif len(args) > 0 {\n\t\t\t\treturn fmt.Errorf(\"unknown option %q\", args[0])\n\t\t\t}\n\t\t\targs = []string{cmd}\n\t\t\tbreak loop // only one arg left to be evaluated as a uint\n\t\t}\n\t}\n\n\tif len(args) == 0 {\n\t\treturn errors.New(\"no address specified\")\n\t}\n\n\tif isExpr {\n\t\texpr := strings.Join(args, \" \")\n\t\tval, err := t.client.EvalVariable(ctx.Scope, expr, t.loadConfig())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// \"-x &myVar\" or \"-x myPtrVar\"\n\t\tif val.Kind == reflect.Ptr {\n\t\t\tif len(val.Children) < 1 {\n\t\t\t\treturn fmt.Errorf(\"bug? invalid pointer: %#v\", val)\n\t\t\t}\n\t\t\taddress = val.Children[0].Addr\n\t\t\t// \"-x 0xc000079f20 + 8\" or -x 824634220320 + 8\n\t\t} else if val.Kind == reflect.Int && val.Value != \"\" {\n\t\t\taddress, err = strconv.ParseUint(val.Value, 0, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"bad expression result: %q: %s\", val.Value, err)\n\t\t\t}\n\t\t} else {\n\t\t\treturn fmt.Errorf(\"unsupported expression type: %s\", val.Kind)\n\t\t}\n\t} else {\n\t\taddress, err = strconv.ParseUint(args[0], 0, 64)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"convert address into uintptr type failed, %s\", err)\n\t\t}\n\t}\n\n\tt.stdout.pw.PageMaybe(nil)\n\n\tstart := address\n\tremsz := int(count * size)\n\n\tfor remsz > 0 {\n\t\treqsz := min(rpc2.ExamineMemoryLengthLimit, remsz)\n\t\tmemArea, isLittleEndian, err := t.client.ExamineMemory(start, reqsz)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif rawout {\n\t\t\tt.stdout.Write(memArea)\n\t\t} else {\n\t\t\tfmt.Fprint(t.stdout, api.PrettyExamineMemory(uintptr(start), memArea, isLittleEndian, priFmt, int(size)))\n\t\t}\n\t\tstart += uint64(reqsz)\n\t\tremsz -= reqsz\n\t}\n\treturn nil\n}\n\nfunc parseFormatArg(args string) (fmtstr, argsOut string) {\n\tif len(args) < 1 || args[0] != '%' {\n\t\treturn \"\", args\n\t}\n\tv := strings.SplitN(args, \" \", 2)\n\tif len(v) == 1 {\n\t\treturn v[0], \"\"\n\t}\n\treturn v[0], v[1]\n}\n\nconst maxPrintVarChanGoroutines = 100\n\nfunc (c *Commands) printVar(t *Term, ctx callContext, args string) error {\n\tif len(args) == 0 {\n\t\treturn errors.New(\"not enough arguments\")\n\t}\n\tif ctx.Prefix == onPrefix {\n\t\tctx.Breakpoint.Variables = append(ctx.Breakpoint.Variables, args)\n\t\treturn nil\n\t}\n\tfmtstr, args := parseFormatArg(args)\n\tval, err := t.client.EvalVariable(ctx.Scope, args, t.loadConfig())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tt.stdout.pw.PageMaybe(nil)\n\n\tfmt.Fprintln(t.stdout, val.StringWithOptions(\"\", fmtstr, api.PrettyNewlines))\n\n\tif val.Kind == reflect.Chan {\n\t\tfmt.Fprintln(t.stdout)\n\t\tgs, _, _, _, err := t.client.ListGoroutinesWithFilter(0, maxPrintVarChanGoroutines, []api.ListGoroutinesFilter{{Kind: api.GoroutineWaitingOnChannel, Arg: fmt.Sprintf(\"*(*%q)(%#x)\", val.Type, val.Addr)}}, nil, &ctx.Scope)\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(t.stdout, \"Error reading channel wait queue: %v\", err)\n\t\t} else {\n\t\t\tfmt.Fprintln(t.stdout, \"Goroutines waiting on this channel:\")\n\t\t\tstate, err := t.client.GetState()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(t.stdout, \"Error printing channel wait queue: %v\", err)\n\t\t\t}\n\t\t\tvar done bool\n\t\t\tc.printGoroutines(t, ctx, \"\", gs, api.FglUserCurrent, 0, 0, \"\", &done, state)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc whatisCommand(t *Term, ctx callContext, args string) error {\n\tif len(args) == 0 {\n\t\treturn errors.New(\"not enough arguments\")\n\t}\n\tval, err := t.client.EvalVariable(ctx.Scope, args, ShortLoadConfig)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif val.Flags&api.VariableCPURegister != 0 {\n\t\tfmt.Fprintln(t.stdout, \"CPU Register\")\n\t\treturn nil\n\t}\n\tif val.Type != \"\" {\n\t\tfmt.Fprintln(t.stdout, val.Type)\n\t}\n\tif val.RealType != val.Type {\n\t\tfmt.Fprintf(t.stdout, \"Real type: %s\\n\", val.RealType)\n\t}\n\tif val.Kind == reflect.Interface && len(val.Children) > 0 {\n\t\tfmt.Fprintf(t.stdout, \"Concrete type: %s\\n\", val.Children[0].Type)\n\t}\n\tif t.conf.ShowLocationExpr && val.LocationExpr != \"\" {\n\t\tfmt.Fprintf(t.stdout, \"location: %s\\n\", val.LocationExpr)\n\t}\n\treturn nil\n}\n\nfunc setVar(t *Term, ctx callContext, args string) error {\n\t// HACK: in go '=' is not an operator, we detect the error and try to recover from it by splitting the input string\n\t_, err := parser.ParseExpr(args)\n\tif err == nil {\n\t\treturn errors.New(\"syntax error '=' not found\")\n\t}\n\n\tel, ok := err.(scanner.ErrorList)\n\tif !ok || el[0].Msg != \"expected '==', found '='\" {\n\t\treturn err\n\t}\n\n\tlexpr := args[:el[0].Pos.Offset]\n\trexpr := args[el[0].Pos.Offset+1:]\n\treturn t.client.SetVariable(ctx.Scope, lexpr, rexpr)\n}\n\nfunc (t *Term) printFilteredVariables(varType string, vars []api.Variable, filter string, cfg api.LoadConfig) error {\n\treg, err := regexp.Compile(filter)\n\tif err != nil {\n\t\treturn err\n\t}\n\tmatch := false\n\tt.stdout.pw.PageMaybe(nil)\n\tfor _, v := range vars {\n\t\tif reg == nil || reg.Match([]byte(v.Name)) {\n\t\t\tmatch = true\n\t\t\tname := v.Name\n\t\t\tif v.Flags&api.VariableShadowed != 0 {\n\t\t\t\tname = \"(\" + name + \")\"\n\t\t\t}\n\t\t\tif cfg == ShortLoadConfig {\n\t\t\t\tfmt.Fprintf(t.stdout, \"%s = %s\\n\", name, v.SinglelineString())\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(t.stdout, \"%s = %s\\n\", name, multiLineVar(&v, \"\"))\n\t\t\t}\n\t\t}\n\t}\n\tif !match {\n\t\tfmt.Fprintf(t.stdout, \"(no %s)\\n\", varType)\n\t}\n\treturn nil\n}\n\nfunc (t *Term) printSortedStrings(v []string, err error) error {\n\tif err != nil {\n\t\treturn err\n\t}\n\tsort.Strings(v)\n\tdone := false\n\tt.stdout.pw.PageMaybe(func() { done = false })\n\tfor _, d := range v {\n\t\tif done {\n\t\t\tbreak\n\t\t}\n\t\tfmt.Fprintln(t.stdout, d)\n\t}\n\treturn nil\n}\n\nfunc sources(t *Term, ctx callContext, args string) error {\n\treturn t.printSortedStrings(t.client.ListSources(args))\n}\n\nfunc packages(t *Term, ctx callContext, args string) error {\n\tinfo, err := t.client.ListPackagesBuildInfo(args, false)\n\tif err != nil {\n\t\treturn err\n\t}\n\tpkgs := make([]string, 0, len(info))\n\tfor _, i := range info {\n\t\tpkgs = append(pkgs, i.ImportPath)\n\t}\n\treturn t.printSortedStrings(pkgs, nil)\n}\n\nfunc funcs(t *Term, ctx callContext, args string) error {\n\treturn t.printSortedStrings(t.client.ListFunctions(args, 0))\n}\n\nfunc types(t *Term, ctx callContext, args string) error {\n\treturn t.printSortedStrings(t.client.ListTypes(args))\n}\n\nfunc parseVarArguments(args string, t *Term) (filter string, cfg api.LoadConfig) {\n\tif v := config.Split2PartsBySpace(args); len(v) >= 1 && v[0] == \"-v\" {\n\t\tif len(v) == 2 {\n\t\t\treturn v[1], t.loadConfig()\n\t\t} else {\n\t\t\treturn \"\", t.loadConfig()\n\t\t}\n\t}\n\treturn args, ShortLoadConfig\n}\n\nfunc args(t *Term, ctx callContext, args string) error {\n\tfilter, cfg := parseVarArguments(args, t)\n\tif ctx.Prefix == onPrefix {\n\t\tif filter != \"\" {\n\t\t\treturn errors.New(\"filter not supported on breakpoint\")\n\t\t}\n\t\tctx.Breakpoint.LoadArgs = &cfg\n\t\treturn nil\n\t}\n\tvars, err := t.client.ListFunctionArgs(ctx.Scope, cfg)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn t.printFilteredVariables(\"args\", vars, filter, cfg)\n}\n\nfunc locals(t *Term, ctx callContext, args string) error {\n\tfilter, cfg := parseVarArguments(args, t)\n\tif ctx.Prefix == onPrefix {\n\t\tif filter != \"\" {\n\t\t\treturn errors.New(\"filter not supported on breakpoint\")\n\t\t}\n\t\tctx.Breakpoint.LoadLocals = &cfg\n\t\treturn nil\n\t}\n\tlocals, err := t.client.ListLocalVariables(ctx.Scope, cfg)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn t.printFilteredVariables(\"locals\", locals, filter, cfg)\n}\n\nfunc vars(t *Term, ctx callContext, args string) error {\n\tfilter, cfg := parseVarArguments(args, t)\n\tvars, err := t.client.ListPackageVariables(filter, cfg)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn t.printFilteredVariables(\"vars\", vars, filter, cfg)\n}\n\nfunc regs(t *Term, ctx callContext, args string) error {\n\tincludeFp := false\n\tif args == \"-a\" {\n\t\tincludeFp = true\n\t}\n\tvar regs api.Registers\n\tvar err error\n\tif ctx.Scope.GoroutineID < 0 && ctx.Scope.Frame == 0 {\n\t\tregs, err = t.client.ListThreadRegisters(0, includeFp)\n\t} else {\n\t\tregs, err = t.client.ListScopeRegisters(ctx.Scope, includeFp)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tfmt.Fprintln(t.stdout, regs)\n\treturn nil\n}\n\nfunc stackCommand(t *Term, ctx callContext, args string) error {\n\tsa, err := parseStackArgs(args)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif ctx.Prefix == onPrefix {\n\t\tctx.Breakpoint.Stacktrace = sa.depth\n\t\treturn nil\n\t}\n\tvar cfg *api.LoadConfig\n\tif sa.full {\n\t\tcfg = &ShortLoadConfig\n\t}\n\tstack, err := t.client.Stacktrace(ctx.Scope.GoroutineID, sa.depth, 0, sa.opts, cfg)\n\tif err != nil {\n\t\treturn err\n\t}\n\tt.stdout.pw.PageMaybe(nil)\n\tprintStack(t, t.stdout, stack, \"\", sa.offsets)\n\tif sa.ancestors > 0 {\n\t\tancestors, err := t.client.Ancestors(ctx.Scope.GoroutineID, sa.ancestors, sa.ancestorDepth)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfor _, ancestor := range ancestors {\n\t\t\tfmt.Fprintf(t.stdout, \"Created by Goroutine %d:\\n\", ancestor.ID)\n\t\t\tif ancestor.Unreadable != \"\" {\n\t\t\t\tfmt.Fprintf(t.stdout, \"\\t%s\\n\", ancestor.Unreadable)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprintStack(t, t.stdout, ancestor.Stack, \"\\t\", false)\n\t\t}\n\t}\n\treturn nil\n}\n\ntype stackArgs struct {\n\tdepth   int\n\tfull    bool\n\toffsets bool\n\topts    api.StacktraceOptions\n\n\tancestors     int\n\tancestorDepth int\n}\n\nfunc parseStackArgs(argstr string) (stackArgs, error) {\n\tr := stackArgs{\n\t\tdepth: 50,\n\t\tfull:  false,\n\t}\n\tif argstr != \"\" {\n\t\targs := strings.Split(argstr, \" \")\n\t\tfor i := 0; i < len(args); i++ {\n\t\t\tnumarg := func(name string) (int, error) {\n\t\t\t\tif i >= len(args) {\n\t\t\t\t\treturn 0, fmt.Errorf(\"expected number after %s\", name)\n\t\t\t\t}\n\t\t\t\tn, err := strconv.Atoi(args[i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 0, fmt.Errorf(\"expected number after %s: %v\", name, err)\n\t\t\t\t}\n\t\t\t\treturn n, nil\n\t\t\t}\n\t\t\tswitch args[i] {\n\t\t\tcase \"-full\":\n\t\t\t\tr.full = true\n\t\t\tcase \"-offsets\":\n\t\t\t\tr.offsets = true\n\t\t\tcase \"-defer\":\n\t\t\t\tr.opts |= api.StacktraceReadDefers\n\t\t\tcase \"-mode\":\n\t\t\t\ti++\n\t\t\t\tif i >= len(args) {\n\t\t\t\t\treturn stackArgs{}, errors.New(\"expected normal, simple or fromg after -mode\")\n\t\t\t\t}\n\t\t\t\tswitch args[i] {\n\t\t\t\tcase \"normal\":\n\t\t\t\t\tr.opts &^= api.StacktraceSimple\n\t\t\t\t\tr.opts &^= api.StacktraceG\n\t\t\t\tcase \"simple\":\n\t\t\t\t\tr.opts |= api.StacktraceSimple\n\t\t\t\tcase \"fromg\":\n\t\t\t\t\tr.opts |= api.StacktraceG | api.StacktraceSimple\n\t\t\t\tdefault:\n\t\t\t\t\treturn stackArgs{}, errors.New(\"expected normal, simple or fromg after -mode\")\n\t\t\t\t}\n\t\t\tcase \"-a\":\n\t\t\t\ti++\n\t\t\t\tn, err := numarg(\"-a\")\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn stackArgs{}, err\n\t\t\t\t}\n\t\t\t\tr.ancestors = n\n\t\t\tcase \"-adepth\":\n\t\t\t\ti++\n\t\t\t\tn, err := numarg(\"-adepth\")\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn stackArgs{}, err\n\t\t\t\t}\n\t\t\t\tr.ancestorDepth = n\n\t\t\tdefault:\n\t\t\t\tn, err := strconv.Atoi(args[i])\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn stackArgs{}, errors.New(\"depth must be a number\")\n\t\t\t\t}\n\t\t\t\tr.depth = n\n\t\t\t}\n\t\t}\n\t}\n\tif r.ancestors > 0 && r.ancestorDepth == 0 {\n\t\tr.ancestorDepth = r.depth\n\t}\n\treturn r, nil\n}\n\n// getLocation returns the current location or the locations specified by the argument.\n// getLocation is used to process the argument of list and edit commands.\nfunc getLocation(t *Term, ctx callContext, args string, showContext bool) (file string, lineno int, showarrow bool, err error) {\n\tswitch {\n\tcase len(args) == 0 && !ctx.scoped():\n\t\tstate, err := t.client.GetState()\n\t\tif err != nil {\n\t\t\treturn \"\", 0, false, err\n\t\t}\n\t\tif showContext {\n\t\t\tprintcontext(t, state)\n\t\t}\n\t\tif state.SelectedGoroutine != nil {\n\t\t\treturn state.SelectedGoroutine.CurrentLoc.File, state.SelectedGoroutine.CurrentLoc.Line, true, nil\n\t\t}\n\t\treturn state.CurrentThread.File, state.CurrentThread.Line, true, nil\n\n\tcase len(args) == 0 && ctx.scoped():\n\t\tlocs, err := t.client.Stacktrace(ctx.Scope.GoroutineID, ctx.Scope.Frame, ctx.Scope.Frame, 0, nil)\n\t\tif err != nil {\n\t\t\treturn \"\", 0, false, err\n\t\t}\n\t\tif len(locs) == 0 {\n\t\t\treturn \"\", 0, false, fmt.Errorf(\"Frame %d does not exist in goroutine %d\", ctx.Scope.Frame, ctx.Scope.GoroutineID)\n\t\t}\n\t\tloc := locs[0]\n\t\tgid := ctx.Scope.GoroutineID\n\t\tif gid < 0 {\n\t\t\tstate, err := t.client.GetState()\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", 0, false, err\n\t\t\t}\n\t\t\tif state.SelectedGoroutine != nil {\n\t\t\t\tgid = state.SelectedGoroutine.ID\n\t\t\t}\n\t\t}\n\t\tif showContext {\n\t\t\tfmt.Fprintf(t.stdout, \"Goroutine %d frame %d at %s:%d (PC: %#x)\\n\", gid, ctx.Scope.Frame, loc.File, loc.Line, loc.PC)\n\t\t}\n\t\treturn loc.File, loc.Line, true, nil\n\n\tdefault:\n\t\tlocs, _, err := t.client.FindLocation(ctx.Scope, args, false, t.substitutePathRules())\n\t\tif err != nil {\n\t\t\treturn \"\", 0, false, err\n\t\t}\n\t\tif len(locs) > 1 {\n\t\t\treturn \"\", 0, false, locspec.AmbiguousLocationError{Location: args, CandidatesLocation: locs}\n\t\t}\n\t\tloc := locs[0]\n\t\tif showContext {\n\t\t\tfmt.Fprintf(t.stdout, \"Showing %s:%d (PC: %#x)\\n\", loc.File, loc.Line, loc.PC)\n\t\t}\n\t\treturn loc.File, loc.Line, false, nil\n\t}\n}\n\nfunc listCommand(t *Term, ctx callContext, args string) error {\n\tfile, lineno, showarrow, err := getLocation(t, ctx, args, true)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn printfile(t, file, lineno, showarrow)\n}\n\nfunc (c *Commands) sourceCommand(t *Term, ctx callContext, args string) error {\n\tif len(args) == 0 {\n\t\treturn errors.New(\"wrong number of arguments: source <filename>\")\n\t}\n\n\tif args == \"-\" {\n\t\treturn t.starlarkEnv.REPL()\n\t}\n\n\tif runtime.GOOS != \"windows\" && strings.HasPrefix(args, \"~\") {\n\t\thome, err := os.UserHomeDir()\n\t\tif err == nil {\n\t\t\tif args == \"~\" {\n\t\t\t\targs = home\n\t\t\t} else if strings.HasPrefix(args, \"~/\") {\n\t\t\t\targs = filepath.Join(home, args[2:])\n\t\t\t}\n\t\t}\n\t}\n\n\tif filepath.Ext(args) == \".star\" {\n\t\t_, err := t.starlarkEnv.Execute(args, nil, \"main\", nil)\n\t\treturn err\n\t}\n\n\treturn c.executeFile(t, args)\n}\n\nvar errDisasmUsage = errors.New(\"wrong number of arguments: disassemble [-a <start> <end>] [-l <locspec>]\")\n\nfunc disassCommand(t *Term, ctx callContext, args string) error {\n\tvar cmd, rest string\n\n\tif args != \"\" {\n\t\targv := config.Split2PartsBySpace(args)\n\t\tif len(argv) != 2 {\n\t\t\treturn errDisasmUsage\n\t\t}\n\t\tcmd = argv[0]\n\t\trest = argv[1]\n\t}\n\n\tt.stdout.pw.PageMaybe(nil)\n\n\tflavor := t.conf.GetDisassembleFlavour()\n\n\tvar disasm api.AsmInstructions\n\tvar disasmErr error\n\n\tswitch cmd {\n\tcase \"\":\n\t\tlocs, _, err := t.client.FindLocation(ctx.Scope, \"+0\", true, t.substitutePathRules())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdisasm, disasmErr = t.client.DisassemblePC(ctx.Scope, locs[0].PC, flavor)\n\tcase \"-a\":\n\t\tv := config.Split2PartsBySpace(rest)\n\t\tif len(v) != 2 {\n\t\t\treturn errDisasmUsage\n\t\t}\n\t\tstartpc, err := strconv.ParseInt(v[0], 0, 64)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"wrong argument: %q is not a number\", v[0])\n\t\t}\n\t\tendpc, err := strconv.ParseInt(v[1], 0, 64)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"wrong argument: %q is not a number\", v[1])\n\t\t}\n\t\tdisasm, disasmErr = t.client.DisassembleRange(ctx.Scope, uint64(startpc), uint64(endpc), flavor)\n\tcase \"-l\":\n\t\tlocs, _, err := t.client.FindLocation(ctx.Scope, rest, true, t.substitutePathRules())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif len(locs) != 1 {\n\t\t\treturn errors.New(\"expression specifies multiple locations\")\n\t\t}\n\t\tdisasm, disasmErr = t.client.DisassemblePC(ctx.Scope, locs[0].PC, flavor)\n\tdefault:\n\t\treturn errDisasmUsage\n\t}\n\n\tif disasmErr != nil {\n\t\treturn disasmErr\n\t}\n\n\tdisasmPrint(disasm, t.stdout, true)\n\n\treturn nil\n}\n\nfunc libraries(t *Term, ctx callContext, args string) error {\n\targv := config.Split2PartsBySpace(args)\n\tif len(argv) == 2 {\n\t\tswitch argv[0] {\n\t\tcase \"-d\":\n\t\t\tn, err := strconv.Atoi(argv[1])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tt.client.DownloadLibraryDebugInfo(n)\n\t\tdefault:\n\t\t\treturn errors.New(\"wrong arguments\")\n\t\t}\n\t\treturn nil\n\t}\n\n\tlibs, _, err := t.client.ListDynamicLibraries()\n\tif err != nil {\n\t\treturn err\n\t}\n\td := digits(len(libs))\n\tfor i := range libs {\n\t\tfmt.Fprintf(t.stdout, \"%\"+strconv.Itoa(d)+\"d. %#x %s\\n\", i, libs[i].Address, libs[i].Path)\n\t\tif libs[i].LoadError != \"\" {\n\t\t\tfmt.Fprintf(t.stdout, \"    Load error: %s\\n\", libs[i].LoadError)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc digits(n int) int {\n\tif n <= 0 {\n\t\treturn 1\n\t}\n\treturn int(math.Floor(math.Log10(float64(n)))) + 1\n}\n\nfunc printStack(t *Term, out io.Writer, stack []api.Stackframe, ind string, offsets bool) {\n\tapi.PrintStack(t.formatPath, out, stack, ind, offsets, t.stackTraceColors, func(api.Stackframe) bool { return true })\n}\n\nfunc printcontext(t *Term, state *api.DebuggerState) {\n\tif t.IsTraceNonInteractive() {\n\t\t// If we're just running the `trace` subcommand there isn't any need\n\t\t// to print out the rest of the state below.\n\t\tfor i := range state.Threads {\n\t\t\tif state.Threads[i].Breakpoint != nil {\n\t\t\t\tprintcontextThread(t, state.Threads[i])\n\t\t\t}\n\t\t}\n\t\treturn\n\t}\n\n\tif state.StopReason == \"shared library loaded\" {\n\t\tfmt.Fprintln(t.stdout, \"Go shared library loaded. You can now set breakpoints in Go code.\")\n\t}\n\n\tif state.Pid != t.oldPid {\n\t\tif t.oldPid != 0 {\n\t\t\tfmt.Fprintf(t.stdout, \"Switch target process from %d to %d (%s)\\n\", t.oldPid, state.Pid, state.TargetCommandLine)\n\t\t}\n\t\tt.oldPid = state.Pid\n\t}\n\tfor i := range state.Threads {\n\t\tif (state.CurrentThread != nil) && (state.Threads[i].ID == state.CurrentThread.ID) {\n\t\t\tcontinue\n\t\t}\n\t\tif state.Threads[i].Breakpoint != nil {\n\t\t\tprintcontextThread(t, state.Threads[i])\n\t\t}\n\t}\n\n\tif state.CurrentThread == nil {\n\t\tfmt.Fprintln(t.stdout, \"No current thread available\")\n\t\treturn\n\t}\n\n\tvar th *api.Thread\n\tif state.SelectedGoroutine == nil {\n\t\tth = state.CurrentThread\n\t} else {\n\t\tfor i := range state.Threads {\n\t\t\tif state.Threads[i].ID == state.SelectedGoroutine.ThreadID {\n\t\t\t\tth = state.Threads[i]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif th == nil {\n\t\t\tprintcontextLocation(t, state.SelectedGoroutine.CurrentLoc)\n\t\t\treturn\n\t\t}\n\t}\n\n\tif th.File == \"\" {\n\t\tfmt.Fprintf(t.stdout, \"Stopped at: 0x%x\\n\", state.CurrentThread.PC)\n\t\tt.stdout.ColorizePrint(\"\", bytes.NewReader([]byte(\"no source available\")), 1, 10, 1)\n\t\treturn\n\t}\n\n\tprintcontextThread(t, th)\n\n\tif state.When != \"\" {\n\t\tfmt.Fprintln(t.stdout, state.When)\n\t}\n\n\tfor _, watchpoint := range state.WatchOutOfScope {\n\t\tfmt.Fprintf(t.stdout, \"%s went out of scope and was cleared\\n\", formatBreakpointName(watchpoint, true))\n\t}\n}\n\nfunc printcontextLocation(t *Term, loc api.Location) {\n\tfmt.Fprintf(t.stdout, \"> %s() %s:%d (PC: %#v)\\n\", loc.Function.Name(), t.formatPath(loc.File), loc.Line, loc.PC)\n\tif loc.Function != nil && loc.Function.Optimized {\n\t\tfmt.Fprintln(t.stdout, optimizedFunctionWarning)\n\t}\n}\n\nfunc printReturnValues(t *Term, th *api.Thread) {\n\tif th.ReturnValues == nil {\n\t\treturn\n\t}\n\tfmt.Fprintln(t.stdout, \"Values returned:\")\n\tfor _, v := range th.ReturnValues {\n\t\tfmt.Fprintf(t.stdout, \"\\t%s: %s\\n\", v.Name, multiLineVar(&v, \"\\t\"))\n\t}\n\tfmt.Fprintln(t.stdout)\n}\n\nfunc printcontextThread(t *Term, th *api.Thread) {\n\tfn := th.Function\n\n\tif th.Breakpoint == nil {\n\t\tprintcontextLocation(t, api.Location{PC: th.PC, File: th.File, Line: th.Line, Function: th.Function})\n\t\tprintReturnValues(t, th)\n\t\treturn\n\t}\n\n\targs := \"\"\n\tvar hasReturnValue bool\n\tif th.BreakpointInfo != nil && th.Breakpoint.LoadArgs != nil && *th.Breakpoint.LoadArgs == ShortLoadConfig {\n\t\tvar arg []string\n\t\tfor _, ar := range th.BreakpointInfo.Arguments {\n\t\t\t// For AI compatibility return values are included in the\n\t\t\t// argument list. This is a relic of the dark ages when the\n\t\t\t// Go debug information did not distinguish between the two.\n\t\t\t// Filter them out here instead, so during trace operations\n\t\t\t// they are not printed as an argument.\n\t\t\tif (ar.Flags & api.VariableArgument) != 0 {\n\t\t\t\targ = append(arg, ar.SinglelineString())\n\t\t\t}\n\t\t\tif (ar.Flags & api.VariableReturnArgument) != 0 {\n\t\t\t\thasReturnValue = true\n\t\t\t}\n\t\t}\n\t\targs = strings.Join(arg, \", \")\n\t}\n\n\tbpname := \"\"\n\tif th.Breakpoint.WatchExpr != \"\" {\n\t\tbpname = fmt.Sprintf(\"watchpoint on [%s] \", th.Breakpoint.WatchExpr)\n\t} else if th.Breakpoint.Name != \"\" {\n\t\tbpname = fmt.Sprintf(\"[%s] \", th.Breakpoint.Name)\n\t} else if !th.Breakpoint.Tracepoint {\n\t\tbpname = fmt.Sprintf(\"[Breakpoint %d] \", th.Breakpoint.ID)\n\t}\n\n\tif th.Breakpoint.Tracepoint || th.Breakpoint.TraceReturn {\n\t\tprintTracepoint(t, th, bpname, fn, args, hasReturnValue)\n\t\treturn\n\t}\n\n\tif hitCount, ok := th.Breakpoint.HitCount[strconv.FormatInt(th.GoroutineID, 10)]; ok {\n\t\tfmt.Fprintf(t.stdout, \"> %s%s(%s) %s:%d (hits goroutine(%d):%d total:%d) (PC: %#v)\\n\",\n\t\t\tbpname,\n\t\t\tfn.Name(),\n\t\t\targs,\n\t\t\tt.formatPath(th.File),\n\t\t\tth.Line,\n\t\t\tth.GoroutineID,\n\t\t\thitCount,\n\t\t\tth.Breakpoint.TotalHitCount,\n\t\t\tth.PC)\n\t} else {\n\t\tfmt.Fprintf(t.stdout, \"> %s%s(%s) %s:%d (hits total:%d) (PC: %#v)\\n\",\n\t\t\tbpname,\n\t\t\tfn.Name(),\n\t\t\targs,\n\t\t\tt.formatPath(th.File),\n\t\t\tth.Line,\n\t\t\tth.Breakpoint.TotalHitCount,\n\t\t\tth.PC)\n\t}\n\tif th.Function != nil && th.Function.Optimized {\n\t\tfmt.Fprintln(t.stdout, optimizedFunctionWarning)\n\t}\n\n\tprintReturnValues(t, th)\n\tprintBreakpointInfo(t, th, false)\n}\n\n// executeBreakpointCustomCommands executes custom starlark commands\n// associated with breakpoints for any thread stopped at a breakpoint.\nfunc (c *Commands) executeBreakpointCustomCommands(t *Term) {\n\tstate, err := t.client.GetState()\n\tif err != nil || state == nil {\n\t\treturn\n\t}\n\n\tt.customCommandsInvalidated = append(t.customCommandsInvalidated, false)\n\tdefer func() { t.customCommandsInvalidated = t.customCommandsInvalidated[:len(t.customCommandsInvalidated)-1] }()\n\n\tfor _, th := range state.Threads {\n\t\tif th.Breakpoint == nil || len(th.Breakpoint.CustomCommands) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\tfor _, cmdName := range th.Breakpoint.CustomCommands {\n\t\t\terr := c.Call(cmdName, t)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(t.stdout, \"Error executing custom command %s: %v\\n\", cmdName, err)\n\t\t\t}\n\t\t\tif t.customCommandsInvalidated[len(t.customCommandsInvalidated)-1] {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc printBreakpointInfo(t *Term, th *api.Thread, tracepointOnNewline bool) {\n\tif th.BreakpointInfo == nil {\n\t\treturn\n\t}\n\tbp := th.Breakpoint\n\tbpi := th.BreakpointInfo\n\n\tif bp.TraceReturn {\n\t\treturn\n\t}\n\n\tdidprintnl := tracepointOnNewline\n\ttracepointnl := func() {\n\t\tif !bp.Tracepoint || didprintnl {\n\t\t\treturn\n\t\t}\n\t\tdidprintnl = true\n\t\tfmt.Fprintln(t.stdout)\n\t}\n\n\tif bpi.Goroutine != nil {\n\t\ttracepointnl()\n\t\twriteGoroutineLong(t, t.stdout, bpi.Goroutine, \"\\t\")\n\t}\n\n\tfor _, v := range bpi.Variables {\n\t\ttracepointnl()\n\t\tfmt.Fprintf(t.stdout, \"\\t%s: %s\\n\", v.Name, multiLineVar(&v, \"\\t\"))\n\t}\n\n\tfor _, v := range bpi.Locals {\n\t\ttracepointnl()\n\t\tif *bp.LoadLocals == longLoadConfig {\n\t\t\tfmt.Fprintf(t.stdout, \"\\t%s: %s\\n\", v.Name, multiLineVar(&v, \"\\t\"))\n\t\t} else {\n\t\t\tfmt.Fprintf(t.stdout, \"\\t%s: %s\\n\", v.Name, v.SinglelineString())\n\t\t}\n\t}\n\n\tif bp.LoadArgs != nil && *bp.LoadArgs == longLoadConfig {\n\t\tfor _, v := range bpi.Arguments {\n\t\t\ttracepointnl()\n\t\t\tfmt.Fprintf(t.stdout, \"\\t%s: %s\\n\", v.Name, multiLineVar(&v, \"\\t\"))\n\t\t}\n\t}\n\tif bpi.Stacktrace != nil {\n\t\t// TraceFollowCalls and Stacktrace are mutually exclusive as they pollute each others outputs\n\t\tif th.Breakpoint.TraceFollowCalls <= 0 {\n\t\t\ttracepointnl()\n\t\t\tfmt.Fprintf(t.stdout, \"\\tStack:\\n\")\n\t\t\tprintStack(t, t.stdout, bpi.Stacktrace, \"\\t\\t\", false)\n\t\t}\n\t}\n\n}\n\nfunc printTracepoint(t *Term, th *api.Thread, bpname string, fn *api.Function, args string, hasReturnValue bool) {\n\tif t.conf.TraceShowTimestamp {\n\t\tfmt.Fprintf(t.stdout, \"%s \", time.Now().Format(time.RFC3339Nano))\n\t}\n\n\tvar sdepth, rootindex int\n\tdepthPrefix := \"\"\n\ttracePrefix := \"\"\n\tif th.Breakpoint.TraceFollowCalls > 0 {\n\t\t// Trace Follow Calls; stack is required to calculate depth of functions\n\t\trootindex = -1\n\t\tif th.BreakpointInfo == nil || th.BreakpointInfo.Stacktrace == nil {\n\t\t\treturn\n\t\t}\n\n\t\tstack := th.BreakpointInfo.Stacktrace\n\t\tfor i := len(stack) - 1; i >= 0; i-- {\n\t\t\tif stack[i].Function.Name() == th.Breakpoint.RootFuncName {\n\t\t\t\tif rootindex == -1 {\n\t\t\t\t\trootindex = i\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsdepth = rootindex + 1\n\t\ttracePrefix = fmt.Sprintf(\"goroutine(%d):frame(%d)\", th.GoroutineID, sdepth)\n\t\tif sdepth > 0 {\n\t\t\tdepthPrefix = strings.Repeat(\" \", sdepth-1)\n\t\t}\n\t} else {\n\t\ttracePrefix = fmt.Sprintf(\"goroutine(%d):\", th.GoroutineID)\n\t}\n\n\tif th.Breakpoint.Tracepoint {\n\t\t// Print trace only if there was a match on the function while TraceFollowCalls is on or if it's a regular trace\n\t\tif rootindex != -1 || th.Breakpoint.TraceFollowCalls <= 0 {\n\t\t\tfmt.Fprintf(t.stdout, \"%s> %s %s%s(%s)\\n\", depthPrefix, tracePrefix, bpname, fn.Name(), args)\n\t\t}\n\t\tprintBreakpointInfo(t, th, !hasReturnValue)\n\t}\n\tif th.Breakpoint.TraceReturn {\n\t\tretVals := make([]string, 0, len(th.ReturnValues))\n\t\tfor _, v := range th.ReturnValues {\n\t\t\tretVals = append(retVals, v.SinglelineString())\n\t\t}\n\t\t// Print trace only if there was a match on the function while TraceFollowCalls is on or if it's a regular trace\n\t\tif rootindex != -1 || th.Breakpoint.TraceFollowCalls <= 0 {\n\t\t\tfmt.Fprintf(t.stdout, \"%s>> %s %s => (%s)\\n\", depthPrefix, tracePrefix, fn.Name(), strings.Join(retVals, \",\"))\n\t\t}\n\t}\n\tif th.Breakpoint.TraceFollowCalls > 0 {\n\t\t// As of now traceFollowCalls and Stacktrace are mutually exclusive options\n\t\treturn\n\t}\n\tif th.Breakpoint.TraceReturn || !hasReturnValue {\n\t\tif th.BreakpointInfo != nil && th.BreakpointInfo.Stacktrace != nil {\n\t\t\tfmt.Fprintf(t.stdout, \"\\tStack:\\n\")\n\t\t\tprintStack(t, t.stdout, th.BreakpointInfo.Stacktrace, \"\\t\\t\", false)\n\t\t}\n\t}\n}\n\ntype printPosFlags uint8\n\nconst (\n\tprintPosShowArrow printPosFlags = 1 << iota\n\tprintPosStepInstruction\n)\n\nfunc printPos(t *Term, th *api.Thread, flags printPosFlags) error {\n\tif flags&printPosStepInstruction != 0 {\n\t\tif t.conf.Position == config.PositionSource {\n\t\t\treturn printfile(t, th.File, th.Line, flags&printPosShowArrow != 0)\n\t\t}\n\t\treturn printdisass(t, th.PC)\n\t}\n\tif t.conf.Position == config.PositionDisassembly {\n\t\treturn printdisass(t, th.PC)\n\t}\n\treturn printfile(t, th.File, th.Line, flags&printPosShowArrow != 0)\n}\n\nfunc printfile(t *Term, filename string, line int, showArrow bool) error {\n\tif filename == \"\" {\n\t\treturn nil\n\t}\n\n\tlineCount := t.conf.GetSourceListLineCount()\n\tarrowLine := 0\n\tif showArrow {\n\t\tarrowLine = line\n\t}\n\n\tvar file *os.File\n\tpath := t.substitutePath(filename)\n\tif _, err := os.Stat(path); os.IsNotExist(err) {\n\t\tfoundPath, err := debuginfod.GetSource(t.client.BuildID(), filename)\n\t\tif err == nil {\n\t\t\tpath = foundPath\n\t\t}\n\t}\n\tfile, err := os.OpenFile(path, 0, os.ModePerm)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\n\tfi, _ := file.Stat()\n\tlastModExe := t.client.LastModified()\n\tif fi.ModTime().After(lastModExe) {\n\t\tfmt.Fprintln(t.stdout, \"Warning: listing may not match stale executable\")\n\t}\n\n\treturn t.stdout.ColorizePrint(file.Name(), file, line-lineCount, line+lineCount+1, arrowLine)\n}\n\nfunc printdisass(t *Term, pc uint64) error {\n\tdisasm, err := t.client.DisassemblePC(api.EvalScope{GoroutineID: -1, Frame: 0, DeferredCall: 0}, pc, t.conf.GetDisassembleFlavour())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tlineCount := t.conf.GetSourceListLineCount()\n\n\tshowHeader := true\n\tfor i := range disasm {\n\t\tif disasm[i].AtPC {\n\t\t\ts := max(i-lineCount, 0)\n\t\t\te := min(i+lineCount+1, len(disasm))\n\t\t\tshowHeader = s == 0\n\t\t\tdisasm = disasm[s:e]\n\t\t\tbreak\n\t\t}\n\t}\n\n\tdisasmPrint(disasm, t.stdout, showHeader)\n\treturn nil\n}\n\n// ExitRequestError is returned when the user\n// exits Delve.\ntype ExitRequestError struct{}\n\nfunc (ere ExitRequestError) Error() string {\n\treturn \"\"\n}\n\nfunc exitCommand(t *Term, ctx callContext, args string) error {\n\tif args == \"-c\" {\n\t\tif !t.client.IsMulticlient() {\n\t\t\treturn errors.New(\"not connected to an --accept-multiclient server\")\n\t\t}\n\t\tbps, _ := t.client.ListBreakpoints(false)\n\t\thasUserBreakpoints := false\n\t\tfor _, bp := range bps {\n\t\t\tif bp.ID >= 0 {\n\t\t\t\thasUserBreakpoints = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif hasUserBreakpoints {\n\t\t\tyes, _ := yesno(t.line, \"There are breakpoints set, do you wish to quit and continue without clearing breakpoints? [Y/n] \", \"yes\")\n\t\t\tif !yes {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tt.quitContinue = true\n\t}\n\treturn ExitRequestError{}\n}\n\nfunc getBreakpointByIDOrName(t *Term, arg string) (*api.Breakpoint, error) {\n\tif id, err := strconv.Atoi(arg); err == nil {\n\t\treturn t.client.GetBreakpoint(id)\n\t}\n\treturn t.client.GetBreakpointByName(arg)\n}\n\nfunc (c *Commands) onCmd(t *Term, ctx callContext, argstr string) error {\n\targs := config.Split2PartsBySpace(argstr)\n\n\tif len(args) < 2 {\n\t\treturn errors.New(\"not enough arguments\")\n\t}\n\n\tbp, err := getBreakpointByIDOrName(t, args[0])\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tctx.Prefix = onPrefix\n\tctx.Breakpoint = bp\n\n\tif args[1] == \"-edit\" {\n\t\tf, err := os.CreateTemp(\"\", \"dlv-on-cmd-\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer func() {\n\t\t\t_ = f.Close()\n\t\t\t_ = os.Remove(f.Name())\n\t\t}()\n\t\tattrs := formatBreakpointAttrs(\"\", ctx.Breakpoint, true)\n\t\t_, err = f.WriteString(strings.Join(attrs, \"\\n\"))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\terr = f.Close()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\terr = runEditor(f.Name())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfin, err := os.Open(f.Name())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer fin.Close()\n\n\t\terr = c.parseBreakpointAttrs(t, ctx, fin)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\terr = c.CallWithContext(args[1], t, ctx)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn t.client.AmendBreakpoint(ctx.Breakpoint)\n}\n\nfunc (c *Commands) parseBreakpointAttrs(t *Term, ctx callContext, r io.Reader) error {\n\tctx.Breakpoint.Tracepoint = false\n\tctx.Breakpoint.Goroutine = false\n\tctx.Breakpoint.Stacktrace = 0\n\tctx.Breakpoint.Variables = ctx.Breakpoint.Variables[:0]\n\tctx.Breakpoint.Cond = \"\"\n\tctx.Breakpoint.HitCond = \"\"\n\n\tscan := bufio.NewScanner(r)\n\tlineno := 0\n\tfor scan.Scan() {\n\t\tlineno++\n\t\terr := c.CallWithContext(scan.Text(), t, ctx)\n\t\tif err != nil {\n\t\t\tfmt.Fprintf(t.stdout, \"%d: %s\\n\", lineno, err.Error())\n\t\t}\n\t}\n\treturn scan.Err()\n}\n\nfunc conditionCmd(t *Term, ctx callContext, argstr string) error {\n\targs := config.Split2PartsBySpace(argstr)\n\n\tif len(args) < 2 {\n\t\treturn errors.New(\"not enough arguments\")\n\t}\n\n\thitCondPerG := args[0] == \"-per-g-hitcount\"\n\tif args[0] == \"-hitcount\" || hitCondPerG {\n\t\t// hitcount breakpoint\n\n\t\tif ctx.Prefix == onPrefix {\n\t\t\tctx.Breakpoint.HitCond = args[1]\n\t\t\tctx.Breakpoint.HitCondPerG = hitCondPerG\n\t\t\treturn nil\n\t\t}\n\n\t\targs = config.Split2PartsBySpace(args[1])\n\t\tif len(args) < 2 {\n\t\t\treturn errors.New(\"not enough arguments\")\n\t\t}\n\n\t\tbp, err := getBreakpointByIDOrName(t, args[0])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tbp.HitCond = args[1]\n\t\tbp.HitCondPerG = hitCondPerG\n\n\t\treturn t.client.AmendBreakpoint(bp)\n\t}\n\n\tif args[0] == \"-clear\" {\n\t\tbp, err := getBreakpointByIDOrName(t, args[1])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbp.Cond = \"\"\n\t\treturn t.client.AmendBreakpoint(bp)\n\t}\n\n\tif ctx.Prefix == onPrefix {\n\t\tctx.Breakpoint.Cond = argstr\n\t\treturn nil\n\t}\n\n\tbp, err := getBreakpointByIDOrName(t, args[0])\n\tif err != nil {\n\t\treturn err\n\t}\n\tbp.Cond = args[1]\n\n\treturn t.client.AmendBreakpoint(bp)\n}\n\nfunc (c *Commands) executeFile(t *Term, name string) error {\n\tfh, err := os.Open(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fh.Close()\n\n\tscanner := bufio.NewScanner(fh)\n\tlineno := 0\n\tfor scanner.Scan() {\n\t\tline := strings.TrimSpace(scanner.Text())\n\t\tlineno++\n\n\t\tif line == \"\" || line[0] == '#' {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := c.Call(line, t); err != nil {\n\t\t\tif _, isExitRequest := err.(ExitRequestError); isExitRequest {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tfmt.Fprintf(t.stdout, \"%s:%d: %v\\n\", name, lineno, err)\n\t\t}\n\t}\n\n\treturn scanner.Err()\n}\n\nfunc (c *Commands) rewind(t *Term, ctx callContext, args string) error {\n\tc.frame = 0\n\tstateChan := t.client.Rewind()\n\tvar state *api.DebuggerState\n\tfor state = range stateChan {\n\t\tif state.Err != nil {\n\t\t\treturn state.Err\n\t\t}\n\t\tprintcontext(t, state)\n\t}\n\tprintPos(t, state.CurrentThread, printPosShowArrow)\n\treturn nil\n}\n\nfunc checkpoint(t *Term, ctx callContext, args string) error {\n\tif args == \"\" {\n\t\tstate, err := t.client.GetState()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvar loc api.Location = api.Location{PC: state.CurrentThread.PC, File: state.CurrentThread.File, Line: state.CurrentThread.Line, Function: state.CurrentThread.Function}\n\t\tif state.SelectedGoroutine != nil {\n\t\t\tloc = state.SelectedGoroutine.CurrentLoc\n\t\t}\n\t\targs = fmt.Sprintf(\"%s() %s:%d (%#x)\", loc.Function.Name(), loc.File, loc.Line, loc.PC)\n\t}\n\n\tcpid, err := t.client.Checkpoint(args)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfmt.Fprintf(t.stdout, \"Checkpoint c%d created.\\n\", cpid)\n\treturn nil\n}\n\nfunc checkpoints(t *Term, ctx callContext, args string) error {\n\tcps, err := t.client.ListCheckpoints()\n\tif err != nil {\n\t\treturn err\n\t}\n\tw := new(tabwriter.Writer)\n\tw.Init(t.stdout, 4, 4, 2, ' ', 0)\n\tfmt.Fprintln(w, \"ID\\tWhen\\tNote\")\n\tfor _, cp := range cps {\n\t\tfmt.Fprintf(w, \"c%d\\t%s\\t%s\\n\", cp.ID, cp.When, cp.Where)\n\t}\n\tw.Flush()\n\treturn nil\n}\n\nfunc clearCheckpoint(t *Term, ctx callContext, args string) error {\n\tif len(args) == 0 {\n\t\treturn errors.New(\"not enough arguments to clear-checkpoint\")\n\t}\n\tif args[0] != 'c' {\n\t\treturn errors.New(\"clear-checkpoint argument must be a checkpoint ID\")\n\t}\n\tid, err := strconv.Atoi(args[1:])\n\tif err != nil {\n\t\treturn errors.New(\"clear-checkpoint argument must be a checkpoint ID\")\n\t}\n\treturn t.client.ClearCheckpoint(id)\n}\n\nfunc display(t *Term, ctx callContext, args string) error {\n\tconst (\n\t\taddOption = \"-a \"\n\t\tdelOption = \"-d \"\n\t)\n\tswitch {\n\tcase args == \"\":\n\t\tt.printDisplays()\n\n\tcase strings.HasPrefix(args, addOption):\n\t\targs = strings.TrimSpace(args[len(addOption):])\n\t\tfmtstr, args := parseFormatArg(args)\n\t\tif args == \"\" {\n\t\t\treturn errors.New(\"not enough arguments\")\n\t\t}\n\t\tt.addDisplay(args, fmtstr)\n\t\tt.printDisplay(len(t.displays) - 1)\n\n\tcase strings.HasPrefix(args, delOption):\n\t\targs = strings.TrimSpace(args[len(delOption):])\n\t\tn, err := strconv.Atoi(args)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"%q is not a number\", args)\n\t\t}\n\t\treturn t.removeDisplay(n)\n\n\tdefault:\n\t\treturn errors.New(\"wrong arguments\")\n\t}\n\treturn nil\n}\n\nfunc dump(t *Term, ctx callContext, args string) error {\n\tif args == \"\" {\n\t\treturn errors.New(\"not enough arguments\")\n\t}\n\tdumpState, err := t.client.CoreDumpStart(args)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor {\n\t\tif dumpState.ThreadsDone != dumpState.ThreadsTotal {\n\t\t\tfmt.Fprintf(t.stdout, \"\\rDumping threads %d / %d...\", dumpState.ThreadsDone, dumpState.ThreadsTotal)\n\t\t} else {\n\t\t\tfmt.Fprintf(t.stdout, \"\\rDumping memory %d / %d...\", dumpState.MemDone, dumpState.MemTotal)\n\t\t}\n\t\tif !dumpState.Dumping {\n\t\t\tbreak\n\t\t}\n\t\tdumpState = t.client.CoreDumpWait(1000)\n\t}\n\tfmt.Fprintf(t.stdout, \"\\n\")\n\tif dumpState.Err != \"\" {\n\t\tfmt.Fprintf(t.stdout, \"error dumping: %s\\n\", dumpState.Err)\n\t} else if !dumpState.AllDone {\n\t\tfmt.Fprintf(t.stdout, \"canceled\\n\")\n\t} else if dumpState.MemDone != dumpState.MemTotal {\n\t\tfmt.Fprintf(t.stdout, \"Core dump could be incomplete\\n\")\n\t}\n\treturn nil\n}\n\nfunc transcript(t *Term, ctx callContext, args string) error {\n\targv := strings.SplitN(args, \" \", -1)\n\ttruncate := false\n\tfileOnly := false\n\tdisable := false\n\tpath := \"\"\n\tfor _, arg := range argv {\n\t\tswitch arg {\n\t\tcase \"-x\":\n\t\t\tfileOnly = true\n\t\tcase \"-t\":\n\t\t\ttruncate = true\n\t\tcase \"-off\":\n\t\t\tdisable = true\n\t\tdefault:\n\t\t\tif path != \"\" || strings.HasPrefix(arg, \"-\") {\n\t\t\t\treturn fmt.Errorf(\"unrecognized option %q\", arg)\n\t\t\t} else {\n\t\t\t\tpath = arg\n\t\t\t}\n\t\t}\n\t}\n\n\tif disable {\n\t\tif path != \"\" {\n\t\t\treturn errors.New(\"-o option specified with an output path\")\n\t\t}\n\t\treturn t.stdout.CloseTranscript()\n\t}\n\n\tif path == \"\" {\n\t\treturn errors.New(\"no output path specified\")\n\t}\n\n\tflags := os.O_APPEND | os.O_WRONLY | os.O_CREATE\n\tif truncate {\n\t\tflags |= os.O_TRUNC\n\t}\n\tfh, err := os.OpenFile(path, flags, 0660)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif err := t.stdout.CloseTranscript(); err != nil {\n\t\treturn err\n\t}\n\n\tt.stdout.TranscribeTo(fh, fileOnly)\n\treturn nil\n}\n\nfunc target(t *Term, ctx callContext, args string) error {\n\targv := config.Split2PartsBySpace(args)\n\tswitch argv[0] {\n\tcase \"list\":\n\t\ttgts, err := t.client.ListTargets()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tw := new(tabwriter.Writer)\n\t\tw.Init(t.stdout, 4, 4, 2, ' ', 0)\n\t\tfor _, tgt := range tgts {\n\t\t\tselected := \"\"\n\t\t\tif tgt.Pid == t.oldPid {\n\t\t\t\tselected = \"*\"\n\t\t\t}\n\t\t\tfmt.Fprintf(w, \"%s\\t%d\\t%s\\n\", selected, tgt.Pid, tgt.CmdLine)\n\t\t}\n\t\tw.Flush()\n\t\treturn nil\n\tcase \"follow-exec\":\n\t\tif len(argv) == 1 {\n\t\t\tif t.client.FollowExecEnabled() {\n\t\t\t\tfmt.Fprintf(t.stdout, \"Follow exec is enabled.\\n\")\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(t.stdout, \"Follow exec is disabled.\\n\")\n\t\t\t}\n\t\t\treturn nil\n\t\t}\n\t\targv = config.Split2PartsBySpace(argv[1])\n\t\tswitch argv[0] {\n\t\tcase \"-on\":\n\t\t\tvar regex string\n\t\t\tif len(argv) == 2 {\n\t\t\t\tregex = argv[1]\n\t\t\t}\n\t\t\tt.client.FollowExec(true, regex)\n\t\tcase \"-off\":\n\t\t\tif len(argv) > 1 {\n\t\t\t\treturn errors.New(\"too many arguments\")\n\t\t\t}\n\t\t\tt.client.FollowExec(false, \"\")\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unknown argument %q to 'target follow-exec'\", argv[0])\n\t\t}\n\t\treturn nil\n\tcase \"switch\":\n\t\ttgts, err := t.client.ListTargets()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpid, err := strconv.Atoi(argv[1])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfound := false\n\t\tfor _, tgt := range tgts {\n\t\t\tif tgt.Pid == pid {\n\t\t\t\tfound = true\n\t\t\t\tt.client.SwitchThread(tgt.CurrentThread.ID)\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\treturn fmt.Errorf(\"could not find target %d\", pid)\n\t\t}\n\t\treturn nil\n\tcase \"\":\n\t\treturn errors.New(\"not enough arguments for 'target'\")\n\tdefault:\n\t\treturn fmt.Errorf(\"unknown command 'target %s'\", argv[0])\n\t}\n}\n\nfunc formatBreakpointName(bp *api.Breakpoint, upcase bool) string {\n\tthing := \"breakpoint\"\n\tif bp.Tracepoint {\n\t\tthing = \"tracepoint\"\n\t}\n\tif bp.WatchExpr != \"\" {\n\t\tthing = \"watchpoint\"\n\t}\n\tif upcase {\n\t\tthing = strings.ToUpper(string(thing[0])) + thing[1:]\n\t}\n\tid := bp.Name\n\tif id == \"\" {\n\t\tid = strconv.Itoa(bp.ID)\n\t}\n\tif bp.WatchExpr != \"\" && bp.WatchExpr != bp.Name {\n\t\treturn fmt.Sprintf(\"%s %s on [%s]\", thing, id, bp.WatchExpr)\n\t}\n\treturn fmt.Sprintf(\"%s %s\", thing, id)\n}\n\nfunc (t *Term) formatBreakpointLocation(bp *api.Breakpoint) string {\n\tvar out bytes.Buffer\n\tif len(bp.Addrs) > 0 {\n\t\tfor i, addr := range bp.Addrs {\n\t\t\tif i == 0 {\n\t\t\t\tfmt.Fprintf(&out, \"%#x\", addr)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(&out, \",%#x\", addr)\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// In case we are connecting to an older version of delve that does not return the Addrs field.\n\t\tfmt.Fprintf(&out, \"%#x\", bp.Addr)\n\t}\n\tif bp.WatchExpr == \"\" {\n\t\tfmt.Fprintf(&out, \" for \")\n\t\tp := t.formatPath(bp.File)\n\t\tif bp.FunctionName != \"\" {\n\t\t\tfmt.Fprintf(&out, \"%s() \", bp.FunctionName)\n\t\t}\n\t\tfmt.Fprintf(&out, \"%s:%d\", p, bp.Line)\n\t}\n\treturn out.String()\n}\n\nfunc multiLineVar(v *api.Variable, indent string) string {\n\treturn v.StringWithOptions(indent, \"\", api.PrettyNewlines)\n}\n"
  },
  {
    "path": "pkg/terminal/command_test.go",
    "content": "package terminal\n\nimport (\n\t\"bytes\"\n\t\"cmp\"\n\t\"flag\"\n\t\"fmt\"\n\t\"net\"\n\t\"net/http\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/config\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc/test\"\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n\t\"github.com/go-delve/delve/service/debugger\"\n\t\"github.com/go-delve/delve/service/rpc2\"\n\t\"github.com/go-delve/delve/service/rpccommon\"\n\t\"github.com/go-delve/liner\"\n)\n\nvar testBackend, buildMode string\n\nfunc TestMain(m *testing.M) {\n\tflag.StringVar(&testBackend, \"backend\", \"\", \"selects backend\")\n\tflag.StringVar(&buildMode, \"test-buildmode\", \"\", \"selects build mode\")\n\tvar logConf string\n\tflag.StringVar(&logConf, \"log\", \"\", \"configures logging\")\n\tflag.Parse()\n\ttest.DefaultTestBackend(&testBackend)\n\tif buildMode != \"\" && buildMode != \"pie\" {\n\t\tfmt.Fprintf(os.Stderr, \"unknown build mode %q\", buildMode)\n\t\tos.Exit(1)\n\t}\n\tlogflags.Setup(logConf != \"\", logConf, \"\")\n\ttest.RunTestsWithFixtures(m)\n}\n\ntype FakeTerminal struct {\n\t*Term\n\tt testing.TB\n}\n\nconst logCommandOutput = false\n\nfunc (ft *FakeTerminal) Exec(cmdstr string) (outstr string, err error) {\n\tvar buf bytes.Buffer\n\tft.Term.stdout.pw.w = &buf\n\tif ft.Term.starlarkEnv != nil {\n\t\tft.Term.starlarkEnv.Redirect(ft.Term.stdout)\n\t}\n\terr = ft.cmds.Call(cmdstr, ft.Term)\n\toutstr = buf.String()\n\tif logCommandOutput {\n\t\tft.t.Logf(\"command %q -> %q\", cmdstr, outstr)\n\t}\n\tft.Term.stdout.Flush()\n\treturn\n}\n\nfunc (ft *FakeTerminal) ExecStarlark(starlarkProgram string) (outstr string, err error) {\n\tvar buf bytes.Buffer\n\tft.Term.stdout.pw.w = &buf\n\tft.Term.starlarkEnv.Redirect(ft.Term.stdout)\n\t_, err = ft.Term.starlarkEnv.Execute(\"<stdin>\", starlarkProgram, \"main\", nil)\n\toutstr = buf.String()\n\tif logCommandOutput {\n\t\tft.t.Logf(\"command %q -> %q\", starlarkProgram, outstr)\n\t}\n\tft.Term.stdout.Flush()\n\treturn\n}\n\nfunc (ft *FakeTerminal) MustExec(cmdstr string) string {\n\tft.t.Helper()\n\toutstr, err := ft.Exec(cmdstr)\n\tif err != nil {\n\t\tft.t.Errorf(\"output of %q: %q\", cmdstr, outstr)\n\t\tft.t.Fatalf(\"Error executing <%s>: %v\", cmdstr, err)\n\t}\n\treturn outstr\n}\n\nfunc (ft *FakeTerminal) MustExecStarlark(starlarkProgram string) string {\n\toutstr, err := ft.ExecStarlark(starlarkProgram)\n\tif err != nil {\n\t\tft.t.Errorf(\"output of %q: %q\", starlarkProgram, outstr)\n\t\tft.t.Fatalf(\"Error executing <%s>: %v\", starlarkProgram, err)\n\t}\n\treturn outstr\n}\n\nfunc (ft *FakeTerminal) AssertExec(cmdstr, tgt string) {\n\tout := ft.MustExec(cmdstr)\n\tif out != tgt {\n\t\tft.t.Fatalf(\"Error executing %q, expected %q got %q\", cmdstr, tgt, out)\n\t}\n}\n\nfunc (ft *FakeTerminal) AssertExecError(cmdstr, tgterr string) {\n\t_, err := ft.Exec(cmdstr)\n\tif err == nil {\n\t\tft.t.Fatalf(\"Expected error executing %q\", cmdstr)\n\t}\n\tif err.Error() != tgterr {\n\t\tft.t.Fatalf(\"Expected error %q executing %q, got error %q\", tgterr, cmdstr, err.Error())\n\t}\n}\n\nfunc withTestTerminal(name string, t testing.TB, fn func(*FakeTerminal)) {\n\twithTestTerminalBuildFlags(name, t, 0, fn)\n}\n\nfunc withTestTerminalBuildFlags(name string, t testing.TB, buildFlags test.BuildFlags, fn func(*FakeTerminal)) {\n\tif testBackend == \"rr\" {\n\t\ttest.MustHaveRecordingAllowed(t)\n\t}\n\tt.Setenv(\"TERM\", \"dumb\")\n\tlistener, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tif err != nil {\n\t\tt.Fatalf(\"couldn't start listener: %s\\n\", err)\n\t}\n\tdefer listener.Close()\n\tif buildMode == \"pie\" {\n\t\tbuildFlags |= test.BuildModePIE\n\t}\n\tserver := rpccommon.NewServer(&service.Config{\n\t\tListener:    listener,\n\t\tProcessArgs: []string{test.BuildFixture(t, name, buildFlags).Path},\n\t\tDebugger: debugger.Config{\n\t\t\tBackend: testBackend,\n\t\t},\n\t})\n\tif err := server.Run(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\tclient := rpc2.NewClient(listener.Addr().String())\n\tdefer func() {\n\t\tclient.Detach(true)\n\t}()\n\n\tft := &FakeTerminal{\n\t\tt:    t,\n\t\tTerm: New(client, &config.Config{}),\n\t}\n\tfn(ft)\n}\n\nfunc TestCommandDefault(t *testing.T) {\n\tvar (\n\t\tcmds = Commands{}\n\t\tcmd  = cmds.Find(\"non-existent-command\", noPrefix).cmdFn\n\t)\n\n\terr := cmd(nil, callContext{}, \"\")\n\tif err == nil {\n\t\tt.Fatal(\"cmd() did not default\")\n\t}\n\n\tif err.Error() != \"command not available\" {\n\t\tt.Fatal(\"wrong command output\")\n\t}\n}\n\nfunc TestCommandReplayWithoutPreviousCommand(t *testing.T) {\n\tvar (\n\t\tcmds = DebugCommands(nil)\n\t\tcmd  = cmds.Find(\"\", noPrefix).cmdFn\n\t\terr  = cmd(nil, callContext{}, \"\")\n\t)\n\n\tif err != nil {\n\t\tt.Error(\"Null command not returned\", err)\n\t}\n}\n\nfunc TestCommandThread(t *testing.T) {\n\tvar (\n\t\tcmds = DebugCommands(nil)\n\t\tcmd  = cmds.Find(\"thread\", noPrefix).cmdFn\n\t)\n\n\terr := cmd(nil, callContext{}, \"\")\n\tif err == nil {\n\t\tt.Fatal(\"thread terminal command did not default\")\n\t}\n\n\tif err.Error() != \"you must specify a thread\" {\n\t\tt.Fatal(\"wrong command output: \", err.Error())\n\t}\n}\n\nfunc TestExecuteFile(t *testing.T) {\n\tbreakCount := 0\n\ttraceCount := 0\n\tc := &Commands{\n\t\tclient: nil,\n\t\tcmds: []command{\n\t\t\t{aliases: []string{\"trace\"}, cmdFn: func(t *Term, ctx callContext, args string) error {\n\t\t\t\ttraceCount++\n\t\t\t\treturn nil\n\t\t\t}},\n\t\t\t{aliases: []string{\"break\"}, cmdFn: func(t *Term, ctx callContext, args string) error {\n\t\t\t\tbreakCount++\n\t\t\t\treturn nil\n\t\t\t}},\n\t\t},\n\t}\n\n\tfixturesDir := test.FindFixturesDir()\n\terr := c.executeFile(nil, filepath.Join(fixturesDir, \"bpfile\"))\n\tif err != nil {\n\t\tt.Fatalf(\"executeFile: %v\", err)\n\t}\n\n\tif breakCount != 1 || traceCount != 1 {\n\t\tt.Fatalf(\"Wrong counts break: %d trace: %d\\n\", breakCount, traceCount)\n\t}\n}\n\nfunc TestIssue354(t *testing.T) {\n\tprintStack(&Term{}, os.Stdout, []api.Stackframe{}, \"\", false)\n\tprintStack(&Term{}, os.Stdout, []api.Stackframe{\n\t\t{Location: api.Location{PC: 0, File: \"irrelevant.go\", Line: 10, Function: nil},\n\t\t\tBottom: true}}, \"\", false)\n}\n\nfunc TestIssue411(t *testing.T) {\n\ttest.AllowRecording(t)\n\twithTestTerminal(\"math\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break _fixtures/math.go:8\")\n\t\tterm.MustExec(\"trace _fixtures/math.go:9\")\n\t\tterm.MustExec(\"continue\")\n\t\tout := term.MustExec(\"next\")\n\t\tif !strings.HasPrefix(out, \"> goroutine(1): main.main()\") {\n\t\t\tt.Fatalf(\"Wrong output for next: <%s>\", out)\n\t\t}\n\t})\n}\n\nfunc TestCustomCommandNestedBreakpoint(t *testing.T) {\n\twithTestTerminal(\"nestedbp\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"source \" + findStarFile(\"test_custom_cmd_nested\"))\n\n\t\tterm.MustExec(\"break nestedbp.go:13\") // BP 1\n\t\tterm.MustExec(\"break nestedbp.go:18\") // BP 2\n\t\tterm.MustExec(\"break nestedbp.go:19\") // BP 3\n\n\t\t// Add custom commands to BP1:\n\t\t// 1. cmd before continue (should execute)\n\t\t// 2. continue cmd (should execute and hit BP2)\n\t\t// 3. cmd after continue (should NOT execute)\n\t\tterm.MustExec(\"on 1 test_bp1_before_continue\")\n\t\tterm.MustExec(\"on 1 test_bp1_continue_cmd\")\n\t\tterm.MustExec(\"on 1 test_bp1_after_continue\")\n\n\t\t// Add custom commands to BP2 which should execute due to BP 1 custom command continue:\n\t\tterm.MustExec(fmt.Sprintf(\"on %d test_bp2_cmd\", 2))\n\t\tterm.MustExec(\"on 2 test_bp1_continue_cmd\")\n\t\tterm.MustExec(\"on 2 test_bp1_after_continue\")\n\n\t\t// Add command on BP3 which should execute due to BP 2 custom command continue:\n\t\tterm.MustExec(\"on 3 test_bp3_cmd\")\n\n\t\tout := term.MustExec(\"continue\")\n\n\t\tif !strings.Contains(out, \"BP1_BEFORE_CONTINUE\") {\n\t\t\tt.Errorf(\"expected BP1_BEFORE_CONTINUE to be printed, got: %q\", out)\n\t\t}\n\n\t\tif !strings.Contains(out, \"BP1_CONTINUE_CMD\") {\n\t\t\tt.Errorf(\"expected BP1_CONTINUE_CMD to be printed, got: %q\", out)\n\t\t}\n\n\t\t// Verify BP1 command after continue did NOT execute\n\t\tif strings.Contains(out, \"BP1_AFTER_CONTINUE\") {\n\t\t\tt.Errorf(\"BP1_AFTER_CONTINUE was printed, which means the command ran after continue, got: %q\", out)\n\t\t}\n\n\t\tif !strings.Contains(out, \"BP2_CMD_EXECUTED\") {\n\t\t\tt.Errorf(\"BP2's custom commands not executed\")\n\t\t}\n\t\tif !strings.Contains(out, \"BP3_CMD_EXECUTED\") {\n\t\t\tt.Errorf(\"BP3's custom commands not executed\")\n\t\t}\n\t})\n}\n\nfunc TestTrace(t *testing.T) {\n\ttest.AllowRecording(t)\n\twithTestTerminal(\"issue573\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"trace foo\")\n\t\tout, _ := term.Exec(\"continue\")\n\t\t// The output here is a little strange, but we don't filter stdout vs stderr so it gets jumbled.\n\t\t// Therefore we assert about the call and return values separately.\n\t\tif !strings.Contains(out, \"> goroutine(1): main.foo(99, 9801)\") {\n\t\t\tt.Fatalf(\"Wrong output for tracepoint: %s\", out)\n\t\t}\n\t\tif !strings.Contains(out, \"=> (9900)\") {\n\t\t\tt.Fatalf(\"Wrong output for tracepoint return value: %s\", out)\n\t\t}\n\t})\n}\n\nfunc TestTraceWithName(t *testing.T) {\n\ttest.AllowRecording(t)\n\twithTestTerminal(\"issue573\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"trace foobar foo\")\n\t\tout, _ := term.Exec(\"continue\")\n\t\t// The output here is a little strange, but we don't filter stdout vs stderr so it gets jumbled.\n\t\t// Therefore we assert about the call and return values separately.\n\t\tif !strings.Contains(out, \"> goroutine(1): [foobar] main.foo(99, 9801)\") {\n\t\t\tt.Fatalf(\"Wrong output for tracepoint: %s\", out)\n\t\t}\n\t\tif !strings.Contains(out, \"=> (9900)\") {\n\t\t\tt.Fatalf(\"Wrong output for tracepoint return value: %s\", out)\n\t\t}\n\t})\n}\n\nfunc TestTraceOnNonFunctionEntry(t *testing.T) {\n\ttest.AllowRecording(t)\n\twithTestTerminal(\"issue573\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"trace foobar issue573.go:19\")\n\t\tout, _ := term.Exec(\"continue\")\n\t\tif !strings.Contains(out, \"> goroutine(1): [foobar] main.foo(99, 9801)\") {\n\t\t\tt.Fatalf(\"Wrong output for tracepoint: %s\", out)\n\t\t}\n\t\tif strings.Contains(out, \"=> (9900)\") {\n\t\t\tt.Fatalf(\"Tracepoint on non-function locspec should not have return value:\\n%s\", out)\n\t\t}\n\t})\n}\n\nfunc TestExitStatus(t *testing.T) {\n\twithTestTerminal(\"continuetestprog\", t, func(term *FakeTerminal) {\n\t\tterm.Exec(\"continue\")\n\t\tstatus, err := term.handleExit()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif status != 0 {\n\t\t\tt.Fatalf(\"incorrect exit status, expected 0, got %d\", status)\n\t\t}\n\t})\n}\n\nfunc TestScopePrefix(t *testing.T) {\n\tif runtime.GOARCH == \"ppc64le\" && buildMode == \"pie\" {\n\t\tt.Skip(\"pie mode broken on ppc64le\")\n\t}\n\tconst goroutinesLinePrefix = \"  Goroutine \"\n\tconst goroutinesCurLinePrefix = \"* Goroutine \"\n\ttest.AllowRecording(t)\n\n\tlenient := 0\n\tif runtime.GOOS == \"windows\" {\n\t\tlenient = 1\n\t}\n\n\twithTestTerminal(\"goroutinestackprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"b stacktraceme\")\n\t\tterm.MustExec(\"continue\")\n\n\t\tgoroutinesOut := strings.Split(term.MustExec(\"goroutines\"), \"\\n\")\n\t\tagoroutines := []int{}\n\t\tnonagoroutines := []int{}\n\t\tcurgid := -1\n\n\t\tfor _, line := range goroutinesOut {\n\t\t\tiscur := strings.HasPrefix(line, goroutinesCurLinePrefix)\n\t\t\tif !iscur && !strings.HasPrefix(line, goroutinesLinePrefix) {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tdash := strings.Index(line, \" - \")\n\t\t\tif dash < 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tgid, err := strconv.Atoi(line[len(goroutinesLinePrefix):dash])\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif iscur {\n\t\t\t\tcurgid = gid\n\t\t\t}\n\n\t\t\tif found := strings.Contains(line, \" main.agoroutine \"); !found {\n\t\t\t\tnonagoroutines = append(nonagoroutines, gid)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tagoroutines = append(agoroutines, gid)\n\t\t}\n\n\t\tif len(agoroutines) > 10 {\n\t\t\tt.Fatalf(\"Output of goroutines did not have 10 goroutines stopped on main.agoroutine (%d found): %q\", len(agoroutines), goroutinesOut)\n\t\t}\n\n\t\tif len(agoroutines) < 10 {\n\t\t\textraAgoroutines := 0\n\t\t\tfor _, gid := range nonagoroutines {\n\t\t\t\tstackOut := strings.SplitSeq(term.MustExec(fmt.Sprintf(\"goroutine %d stack\", gid)), \"\\n\")\n\t\t\t\tfor line := range stackOut {\n\t\t\t\t\tif strings.HasSuffix(line, \" main.agoroutine\") {\n\t\t\t\t\t\textraAgoroutines++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(agoroutines)+extraAgoroutines < 10-lenient {\n\t\t\t\tt.Fatalf(\"Output of goroutines did not have 10 goroutines stopped on main.agoroutine (%d+%d found): %q\", len(agoroutines), extraAgoroutines, goroutinesOut)\n\t\t\t}\n\t\t}\n\n\t\tif curgid < 0 {\n\t\t\tt.Fatalf(\"Could not find current goroutine in output of goroutines: %q\", goroutinesOut)\n\t\t}\n\n\t\tseen := make([]bool, 10)\n\t\tfor _, gid := range agoroutines {\n\t\t\tstackOut := strings.Split(term.MustExec(fmt.Sprintf(\"goroutine %d stack\", gid)), \"\\n\")\n\t\t\tfid := -1\n\t\t\tfor _, line := range stackOut {\n\t\t\t\tline = strings.TrimLeft(line, \" \")\n\t\t\t\tbefore, _, ok := strings.Cut(line, \" \")\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tcurfid, err := strconv.Atoi(before)\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif found := strings.Contains(line, \" main.agoroutine\"); found {\n\t\t\t\t\tfid = curfid\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif fid < 0 {\n\t\t\t\tt.Fatalf(\"Could not find frame for goroutine %d: %q\", gid, stackOut)\n\t\t\t}\n\t\t\tterm.AssertExec(fmt.Sprintf(\"goroutine     %d    frame     %d     locals\", gid, fid), \"(no locals)\\n\")\n\t\t\targsOut := strings.Split(term.MustExec(fmt.Sprintf(\"goroutine %d frame %d args\", gid, fid)), \"\\n\")\n\t\t\tif len(argsOut) != 4 || argsOut[3] != \"\" {\n\t\t\t\tt.Fatalf(\"Wrong number of arguments in goroutine %d frame %d: %v\", gid, fid, argsOut)\n\t\t\t}\n\t\t\tout := term.MustExec(fmt.Sprintf(\"goroutine %d frame %d p i\", gid, fid))\n\t\t\tival, err := strconv.Atoi(out[:len(out)-1])\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"could not parse value %q of i for goroutine %d frame %d: %v\", out, gid, fid, err)\n\t\t\t}\n\t\t\tseen[ival] = true\n\t\t}\n\n\t\tfor i := range seen {\n\t\t\tif !seen[i] {\n\t\t\t\tif lenient > 0 {\n\t\t\t\t\tlenient--\n\t\t\t\t} else {\n\t\t\t\t\tt.Fatalf(\"goroutine %d not found\", i)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tterm.MustExec(\"c\")\n\n\t\tterm.AssertExecError(\"frame\", \"not enough arguments\")\n\t\tterm.AssertExecError(fmt.Sprintf(\"goroutine %d frame 10 locals\", curgid), fmt.Sprintf(\"Frame 10 does not exist in goroutine %d\", curgid))\n\t\tterm.AssertExecError(\"goroutine 9000 locals\", \"unknown goroutine 9000\")\n\n\t\tterm.AssertExecError(\"print n\", \"could not find symbol value for n\")\n\t\tterm.AssertExec(\"frame 1 print n\", \"3\\n\")\n\t\tterm.AssertExec(\"frame 2 print n\", \"2\\n\")\n\t\tterm.AssertExec(\"frame 3 print n\", \"1\\n\")\n\t\tterm.AssertExec(\"frame 4 print n\", \"0\\n\")\n\t\tterm.AssertExecError(\"frame 5 print n\", \"could not find symbol value for n\")\n\n\t\tterm.MustExec(\"frame 2\")\n\t\tterm.AssertExec(\"print n\", \"2\\n\")\n\t\tterm.MustExec(\"frame 4\")\n\t\tterm.AssertExec(\"print n\", \"0\\n\")\n\t\tterm.MustExec(\"down\")\n\t\tterm.AssertExec(\"print n\", \"1\\n\")\n\t\tterm.MustExec(\"down 2\")\n\t\tterm.AssertExec(\"print n\", \"3\\n\")\n\t\tterm.AssertExecError(\"down 2\", \"Invalid frame -1\")\n\t\tterm.AssertExec(\"print n\", \"3\\n\")\n\t\tterm.MustExec(\"up 2\")\n\t\tterm.AssertExec(\"print n\", \"1\\n\")\n\t\tterm.AssertExecError(\"up 100\", \"Invalid frame 103\")\n\t\tterm.AssertExec(\"print n\", \"1\\n\")\n\n\t\tterm.MustExec(\"step\")\n\t\tterm.AssertExecError(\"print n\", \"could not find symbol value for n\")\n\t\tterm.MustExec(\"frame 2\")\n\t\tterm.AssertExec(\"print n\", \"2\\n\")\n\t})\n}\n\nfunc TestOnPrefix(t *testing.T) {\n\tconst prefix = \"\\ti: \"\n\ttest.AllowRecording(t)\n\tlenient := false\n\tif runtime.GOOS == \"windows\" {\n\t\tlenient = true\n\t}\n\twithTestTerminal(\"goroutinestackprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"b agobp main.agoroutine\")\n\t\tterm.MustExec(\"on agobp print i\")\n\n\t\tseen := make([]bool, 10)\n\n\t\tfor {\n\t\t\toutstr, err := term.Exec(\"continue\")\n\t\t\tif err != nil {\n\t\t\t\tif !strings.Contains(err.Error(), \"exited\") {\n\t\t\t\t\tt.Fatalf(\"Unexpected error executing 'continue': %v\", err)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tout := strings.Split(outstr, \"\\n\")\n\n\t\t\tfor i := range out {\n\t\t\t\tif !strings.HasPrefix(out[i], prefix) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tid, err := strconv.Atoi(out[i][len(prefix):])\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif seen[id] {\n\t\t\t\t\tt.Fatalf(\"Goroutine %d seen twice\\n\", id)\n\t\t\t\t}\n\t\t\t\tseen[id] = true\n\t\t\t}\n\t\t}\n\n\t\tfor i := range seen {\n\t\t\tif !seen[i] {\n\t\t\t\tif lenient {\n\t\t\t\t\tlenient = false\n\t\t\t\t} else {\n\t\t\t\t\tt.Fatalf(\"Goroutine %d not seen\\n\", i)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestNoVars(t *testing.T) {\n\ttest.AllowRecording(t)\n\twithTestTerminal(\"locationsUpperCase\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"b main.main\")\n\t\tterm.MustExec(\"continue\")\n\t\tterm.AssertExec(\"args\", \"(no args)\\n\")\n\t\tterm.AssertExec(\"locals\", \"(no locals)\\n\")\n\t\tterm.AssertExec(\"vars filterThatMatchesNothing\", \"(no vars)\\n\")\n\t})\n}\n\nfunc TestOnPrefixLocals(t *testing.T) {\n\tconst prefix = \"\\ti: \"\n\ttest.AllowRecording(t)\n\twithTestTerminal(\"goroutinestackprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"b agobp main.agoroutine\")\n\t\tterm.MustExec(\"on agobp args -v\")\n\n\t\tseen := make([]bool, 10)\n\n\t\tfor {\n\t\t\toutstr, err := term.Exec(\"continue\")\n\t\t\tif err != nil {\n\t\t\t\tif !strings.Contains(err.Error(), \"exited\") {\n\t\t\t\t\tt.Fatalf(\"Unexpected error executing 'continue': %v\", err)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tout := strings.Split(outstr, \"\\n\")\n\n\t\t\tfor i := range out {\n\t\t\t\tif !strings.HasPrefix(out[i], prefix) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tid, err := strconv.Atoi(out[i][len(prefix):])\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif seen[id] {\n\t\t\t\t\tt.Fatalf(\"Goroutine %d seen twice\\n\", id)\n\t\t\t\t}\n\t\t\t\tseen[id] = true\n\t\t\t}\n\t\t}\n\n\t\tfor i := range seen {\n\t\t\tif !seen[i] {\n\t\t\t\tt.Fatalf(\"Goroutine %d not seen\\n\", i)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc listIsAt(t *testing.T, term *FakeTerminal, listcmd string, cur, start, end int) {\n\tt.Helper()\n\toutstr := term.MustExec(listcmd)\n\tlines := strings.Split(outstr, \"\\n\")\n\n\tt.Logf(\"%q: %q\", listcmd, outstr)\n\n\tif cur >= 0 && !strings.Contains(lines[0], fmt.Sprintf(\":%d\", cur)) {\n\t\tt.Fatalf(\"Could not find current line number in first output line: %q\", lines[0])\n\t}\n\n\tre := regexp.MustCompile(`(=>)?\\s+(\\d+):`)\n\n\toutStart, outEnd := 0, 0\n\n\tfor _, line := range lines[1:] {\n\t\tif line == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tv := re.FindStringSubmatch(line)\n\t\tif len(v) != 3 {\n\t\t\tcontinue\n\t\t}\n\t\tcurline, _ := strconv.Atoi(v[2])\n\t\tif v[1] == \"=>\" {\n\t\t\tif cur != curline {\n\t\t\t\tt.Fatalf(\"Wrong current line, got %d expected %d\", curline, cur)\n\t\t\t}\n\t\t}\n\t\tif outStart == 0 {\n\t\t\toutStart = curline\n\t\t}\n\t\toutEnd = curline\n\t}\n\n\tif start != -1 || end != -1 {\n\t\tif outStart != start || outEnd != end {\n\t\t\tt.Fatalf(\"Wrong output range, got %d:%d expected %d:%d\", outStart, outEnd, start, end)\n\t\t}\n\t}\n}\n\nfunc TestListCmd(t *testing.T) {\n\twithTestTerminal(\"testvariables\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue\")\n\t\tterm.MustExec(\"continue\")\n\t\tlistIsAt(t, term, \"list\", 27, 22, 32)\n\t\tlistIsAt(t, term, \"list 69\", 69, 64, 74)\n\t\tlistIsAt(t, term, \"frame 1 list\", 66, 61, 71)\n\t\tlistIsAt(t, term, \"frame 1 list 69\", 69, 64, 74)\n\t\t_, err := term.Exec(\"frame 50 list\")\n\t\tif err == nil {\n\t\t\tt.Fatalf(\"Expected error requesting 50th frame\")\n\t\t}\n\t\tlistIsAt(t, term, \"list testvariables.go:1\", -1, 1, 6)\n\t\tlistIsAt(t, term, \"list testvariables.go:10000\", -1, 0, 0)\n\t})\n}\n\nfunc TestReverseContinue(t *testing.T) {\n\ttest.AllowRecording(t)\n\tif testBackend != \"rr\" {\n\t\treturn\n\t}\n\twithTestTerminal(\"continuetestprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main\")\n\t\tterm.MustExec(\"break main.sayhi\")\n\t\tlistIsAt(t, term, \"continue\", 16, -1, -1)\n\t\tlistIsAt(t, term, \"continue\", 12, -1, -1)\n\t\tlistIsAt(t, term, \"rewind\", 16, -1, -1)\n\t})\n}\n\nfunc TestCheckpoints(t *testing.T) {\n\ttest.AllowRecording(t)\n\tif testBackend != \"rr\" {\n\t\treturn\n\t}\n\twithTestTerminal(\"continuetestprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main\")\n\t\tlistIsAt(t, term, \"continue\", 16, -1, -1)\n\t\tterm.MustExec(\"checkpoint\")\n\t\tterm.MustExec(\"checkpoints\")\n\t\tlistIsAt(t, term, \"next\", 17, -1, -1)\n\t\tlistIsAt(t, term, \"next\", 18, -1, -1)\n\t\tterm.MustExec(\"restart c1\")\n\t\tterm.MustExec(\"goroutine 1\")\n\t\tlistIsAt(t, term, \"list\", 16, -1, -1)\n\t})\n}\n\nfunc TestNextWithCount(t *testing.T) {\n\ttest.AllowRecording(t)\n\twithTestTerminal(\"nextcond\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main\")\n\t\tlistIsAt(t, term, \"continue\", 8, -1, -1)\n\t\tlistIsAt(t, term, \"next 2\", 10, -1, -1)\n\t})\n}\n\nfunc TestRestart(t *testing.T) {\n\twithTestTerminal(\"restartargs\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.printArgs\")\n\t\tterm.MustExec(\"continue\")\n\t\tif out := term.MustExec(\"print main.args\"); !strings.Contains(out, \", []\") {\n\t\t\tt.Fatalf(\"wrong args: %q\", out)\n\t\t}\n\t\t// Reset the arg list\n\t\tterm.MustExec(\"restart hello\")\n\t\tterm.MustExec(\"continue\")\n\t\tif out := term.MustExec(\"print main.args\"); !strings.Contains(out, \", [\\\"hello\\\"]\") {\n\t\t\tt.Fatalf(\"wrong args: %q \", out)\n\t\t}\n\t\t// Restart w/o arg should retain the current args.\n\t\tterm.MustExec(\"restart\")\n\t\tterm.MustExec(\"continue\")\n\t\tif out := term.MustExec(\"print main.args\"); !strings.Contains(out, \", [\\\"hello\\\"]\") {\n\t\t\tt.Fatalf(\"wrong args: %q \", out)\n\t\t}\n\t\t// Empty arg list\n\t\tterm.MustExec(\"restart -noargs\")\n\t\tterm.MustExec(\"continue\")\n\t\tif out := term.MustExec(\"print main.args\"); !strings.Contains(out, \", []\") {\n\t\t\tt.Fatalf(\"wrong args: %q \", out)\n\t\t}\n\t})\n}\n\nfunc TestIssue827(t *testing.T) {\n\t// switching goroutines when the current thread isn't running any goroutine\n\t// causes nil pointer dereference.\n\twithTestTerminal(\"notify-v2\", t, func(term *FakeTerminal) {\n\t\tgo func() {\n\t\t\ttime.Sleep(1 * time.Second)\n\t\t\tresp, err := http.Get(\"http://127.0.0.1:8888/test\")\n\t\t\tif err == nil {\n\t\t\t\tresp.Body.Close()\n\t\t\t}\n\t\t\ttime.Sleep(1 * time.Second)\n\t\t\tterm.client.Halt()\n\t\t}()\n\t\tterm.MustExec(\"continue\")\n\t\tterm.MustExec(\"goroutine 1\")\n\t})\n}\n\nfunc findCmdName(c *Commands, cmdstr string, prefix cmdPrefix) string {\n\tfor _, v := range c.cmds {\n\t\tif v.match(cmdstr) {\n\t\t\tif prefix != noPrefix && v.allowedPrefixes&prefix == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn v.aliases[0]\n\t\t}\n\t}\n\treturn \"\"\n}\n\nfunc assertNoError(t *testing.T, err error, str string) {\n\tt.Helper()\n\tif err != nil {\n\t\tt.Fatalf(\"%s: %v\", str, err)\n\t}\n}\n\nfunc assertNoErrorConfigureCmd(t *testing.T, term *Term, cmdstr string) {\n\tt.Helper()\n\terr := configureCmd(term, callContext{}, cmdstr)\n\tassertNoError(t, err, fmt.Sprintf(\"error executing configureCmd(%s)\", cmdstr))\n}\n\nfunc assertSubstitutePath(t *testing.T, sp config.SubstitutePathRules, v ...string) {\n\tt.Helper()\n\tif len(sp) != len(v)/2 {\n\t\tt.Fatalf(\"wrong number of substitute path rules (expected: %d): %#v\", len(v)/2, sp)\n\t}\n\tfor i := range sp {\n\t\tif sp[i].From != v[i*2] || sp[i].To != v[i*2+1] {\n\t\t\tt.Fatalf(\"wrong substitute path rule %#v expected (from: %q to %q)\", sp[i], v[i*2], v[i*2+1])\n\t\t}\n\t}\n}\n\nfunc assertDebugInfoDirs(t *testing.T, got []string, tgt ...string) {\n\tif len(got) != len(tgt) {\n\t\tt.Fatalf(\"wrong number of debug info directories (got %d expected %d)\", len(got), len(tgt))\n\t}\n\tfor i := range got {\n\t\tif got[i] != tgt[i] {\n\t\t\tt.Fatalf(\"debug info directories mismatch got: %v expected: %v\", got, tgt)\n\t\t}\n\t}\n}\n\nfunc TestConfig(t *testing.T) {\n\tvar buf bytes.Buffer\n\tvar term Term\n\tterm.conf = &config.Config{}\n\tterm.cmds = DebugCommands(nil)\n\tterm.stdout = &transcriptWriter{pw: &pagingWriter{w: &buf}}\n\n\terr := configureCmd(&term, callContext{}, \"nonexistent-parameter 10\")\n\tif err == nil {\n\t\tt.Fatalf(\"expected error executing configureCmd(nonexistent-parameter)\")\n\t}\n\n\tassertNoErrorConfigureCmd(t, &term, \"max-string-len 10\")\n\tif term.conf.MaxStringLen == nil {\n\t\tt.Fatalf(\"expected MaxStringLen 10, got nil\")\n\t}\n\tif *term.conf.MaxStringLen != 10 {\n\t\tt.Fatalf(\"expected MaxStringLen 10, got: %d\", *term.conf.MaxStringLen)\n\t}\n\tassertNoErrorConfigureCmd(t, &term, \"show-location-expr   true\")\n\tif term.conf.ShowLocationExpr != true {\n\t\tt.Fatalf(\"expected ShowLocationExpr true, got false\")\n\t}\n\n\tassertNoErrorConfigureCmd(t, &term, \"max-variable-recurse 4\")\n\tif term.conf.MaxVariableRecurse == nil {\n\t\tt.Fatalf(\"expected MaxVariableRecurse 4, got nil\")\n\t}\n\tif *term.conf.MaxVariableRecurse != 4 {\n\t\tt.Fatalf(\"expected MaxVariableRecurse 4, got: %d\", *term.conf.MaxVariableRecurse)\n\t}\n\n\tassertNoErrorConfigureCmd(t, &term, \"substitute-path a b\")\n\tassertSubstitutePath(t, term.conf.SubstitutePath, \"a\", \"b\")\n\n\tassertNoErrorConfigureCmd(t, &term, \"substitute-path a\")\n\tassertSubstitutePath(t, term.conf.SubstitutePath)\n\n\tassertNoErrorConfigureCmd(t, &term, \"alias print blah\")\n\tif len(term.conf.Aliases[\"print\"]) != 1 {\n\t\tt.Fatalf(\"aliases not changed after configure command %v\", term.conf.Aliases)\n\t}\n\tif findCmdName(term.cmds, \"blah\", noPrefix) != \"print\" {\n\t\tt.Fatalf(\"new alias not found\")\n\t}\n\n\tassertNoErrorConfigureCmd(t, &term, \"alias blah\")\n\tif len(term.conf.Aliases[\"print\"]) != 0 {\n\t\tt.Fatalf(\"alias not removed after configure command %v\", term.conf.Aliases)\n\t}\n\tif findCmdName(term.cmds, \"blah\", noPrefix) != \"\" {\n\t\tt.Fatalf(\"new alias found after delete\")\n\t}\n\n\terr = configureCmd(&term, callContext{}, \"show-location-expr\")\n\tif err == nil {\n\t\tt.Fatalf(\"no error form configureCmd(show-location-expr)\")\n\t}\n\tif !term.conf.ShowLocationExpr {\n\t\tt.Fatalf(\"ShowLocationExpr not set to true\")\n\t}\n\n\tassertNoErrorConfigureCmd(t, &term, \"show-location-expr false\")\n\tif term.conf.ShowLocationExpr {\n\t\tt.Fatalf(\"ShowLocationExpr set to true\")\n\t}\n\n\tassertNoErrorConfigureCmd(t, &term, \"substitute-path a b\")\n\tassertNoErrorConfigureCmd(t, &term, \"substitute-path c d\")\n\tassertSubstitutePath(t, term.conf.SubstitutePath, \"a\", \"b\", \"c\", \"d\")\n\n\tbuf.Reset()\n\tassertNoErrorConfigureCmd(t, &term, \"substitute-path\")\n\tt.Logf(\"current substitute-path: %q\", buf.String())\n\tif buf.String() != \"\\\"a\\\" → \\\"b\\\"\\n\\\"c\\\" → \\\"d\\\"\\n\" {\n\t\tt.Fatalf(\"wrong substitute-path value\")\n\t}\n\n\tassertNoErrorConfigureCmd(t, &term, \"substitute-path -clear c\")\n\tassertSubstitutePath(t, term.conf.SubstitutePath, \"a\", \"b\")\n\n\tassertNoErrorConfigureCmd(t, &term, \"substitute-path -clear\")\n\tassertSubstitutePath(t, term.conf.SubstitutePath)\n\n\tassertNoErrorConfigureCmd(t, &term, \"substitute-path \\\"\\\" something\")\n\tassertSubstitutePath(t, term.conf.SubstitutePath, \"\", \"something\")\n\n\tassertNoErrorConfigureCmd(t, &term, \"substitute-path somethingelse \\\"\\\"\")\n\tassertSubstitutePath(t, term.conf.SubstitutePath, \"\", \"something\", \"somethingelse\", \"\")\n\n\tassertDebugInfoDirs(t, term.conf.DebugInfoDirectories)\n\n\tassertNoErrorConfigureCmd(t, &term, \"debug-info-directories -add a\")\n\tassertDebugInfoDirs(t, term.conf.DebugInfoDirectories, \"a\")\n\tassertNoErrorConfigureCmd(t, &term, \"debug-info-directories -add b\")\n\tassertDebugInfoDirs(t, term.conf.DebugInfoDirectories, \"a\", \"b\")\n\tassertNoErrorConfigureCmd(t, &term, \"debug-info-directories -add c\")\n\tassertDebugInfoDirs(t, term.conf.DebugInfoDirectories, \"a\", \"b\", \"c\")\n\tassertNoErrorConfigureCmd(t, &term, \"debug-info-directories -rm b\")\n\tassertDebugInfoDirs(t, term.conf.DebugInfoDirectories, \"a\", \"c\")\n\tassertNoErrorConfigureCmd(t, &term, \"debug-info-directories -clear\")\n\tassertDebugInfoDirs(t, term.conf.DebugInfoDirectories)\n\n\tft := &FakeTerminal{&term, t}\n\t_, err = ft.Exec(\"help config blah\")\n\tif err == nil {\n\t\tt.Errorf(\"expected error executing help config for an unknown parameter\")\n\t}\n\tft.MustExec(\"help config substitute-path\")\n}\n\nfunc TestIssue1090(t *testing.T) {\n\t// Exit while executing 'next' should report the \"Process exited\" error\n\t// message instead of crashing.\n\twithTestTerminal(\"math\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main\")\n\t\tterm.MustExec(\"continue\")\n\t\tfor {\n\t\t\t_, err := term.Exec(\"next\")\n\t\t\tif err != nil && strings.Contains(err.Error(), \" has exited with status \") {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestPrintContextParkedGoroutine(t *testing.T) {\n\tif runtime.GOARCH == \"ppc64le\" && buildMode == \"pie\" {\n\t\tt.Skip(\"pie mode broken on ppc64le\")\n\t}\n\twithTestTerminal(\"goroutinestackprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break stacktraceme\")\n\t\tterm.MustExec(\"continue\")\n\n\t\t// pick a goroutine that isn't running on a thread\n\t\tgid := \"\"\n\t\tgout := strings.Split(term.MustExec(\"goroutines\"), \"\\n\")\n\t\tt.Logf(\"goroutines -> %q\", gout)\n\t\tfor _, gline := range gout {\n\t\t\tif !strings.Contains(gline, \"thread \") && strings.Contains(gline, \"agoroutine\") {\n\t\t\t\tif dash := strings.Index(gline, \" - \"); dash > 0 {\n\t\t\t\t\tgid = gline[len(\"  Goroutine \"):dash]\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tt.Logf(\"picked %q\", gid)\n\t\tterm.MustExec(fmt.Sprintf(\"goroutine %s\", gid))\n\n\t\tframeout := strings.Split(term.MustExec(\"frame 0\"), \"\\n\")\n\t\tt.Logf(\"frame 0 -> %q\", frameout)\n\t\tif strings.Contains(frameout[0], \"stacktraceme\") {\n\t\t\tt.Fatal(\"bad output for `frame 0` command on a parked goroutine\")\n\t\t}\n\n\t\tlistout := strings.Split(term.MustExec(\"list\"), \"\\n\")\n\t\tt.Logf(\"list -> %q\", listout)\n\t\tif strings.Contains(listout[0], \"stacktraceme\") {\n\t\t\tt.Fatal(\"bad output for list command on a parked goroutine\")\n\t\t}\n\t})\n}\n\nfunc TestStepOutReturn(t *testing.T) {\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\tt.Skip(\"return variables aren't marked on 1.9 or earlier\")\n\t}\n\twithTestTerminal(\"stepoutret\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.stepout\")\n\t\tterm.MustExec(\"continue\")\n\t\tout := term.MustExec(\"stepout\")\n\t\tt.Logf(\"output: %q\", out)\n\t\tif !strings.Contains(out, \"num: \") || !strings.Contains(out, \"str: \") {\n\t\t\tt.Fatal(\"could not find parameter\")\n\t\t}\n\t})\n}\n\nfunc TestOptimizationCheck(t *testing.T) {\n\twithTestTerminal(\"continuetestprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main\")\n\t\tout := term.MustExec(\"continue\")\n\t\tt.Logf(\"output %q\", out)\n\t\tif strings.Contains(out, optimizedFunctionWarning) {\n\t\t\tt.Fatal(\"optimized function warning\")\n\t\t}\n\t})\n\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 10) {\n\t\twithTestTerminalBuildFlags(\"continuetestprog\", t, test.EnableOptimization|test.EnableInlining, func(term *FakeTerminal) {\n\t\t\tterm.MustExec(\"break main.main\")\n\t\t\tout := term.MustExec(\"continue\")\n\t\t\tt.Logf(\"output %q\", out)\n\t\t\tif !strings.Contains(out, optimizedFunctionWarning) {\n\t\t\t\tt.Fatal(\"optimized function warning missing\")\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestTruncateStacktrace(t *testing.T) {\n\tif runtime.GOARCH == \"ppc64le\" && buildMode == \"pie\" {\n\t\tt.Skip(\"pie mode broken on ppc64le\")\n\t}\n\tconst stacktraceTruncatedMessage = \"(truncated)\"\n\twithTestTerminal(\"stacktraceprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.stacktraceme\")\n\t\tterm.MustExec(\"continue\")\n\t\tout1 := term.MustExec(\"stack\")\n\t\tt.Logf(\"untruncated output %q\", out1)\n\t\tif strings.Contains(out1, stacktraceTruncatedMessage) {\n\t\t\tt.Fatalf(\"stacktrace was truncated\")\n\t\t}\n\t\tout2 := term.MustExec(\"stack 1\")\n\t\tt.Logf(\"truncated output %q\", out2)\n\t\tif !strings.Contains(out2, stacktraceTruncatedMessage) {\n\t\t\tt.Fatalf(\"stacktrace was not truncated\")\n\t\t}\n\t})\n}\n\nfunc TestIssue1493(t *testing.T) {\n\t// The 'regs' command without the '-a' option should only return\n\t// general purpose registers.\n\tif runtime.GOARCH == \"ppc64le\" {\n\t\tt.Skip(\"skipping, some registers such as vector registers are currently not loaded\")\n\t}\n\twithTestTerminal(\"continuetestprog\", t, func(term *FakeTerminal) {\n\t\tr := term.MustExec(\"regs\")\n\t\tnr := len(strings.Split(r, \"\\n\"))\n\t\tt.Logf(\"regs: %s\", r)\n\t\tra := term.MustExec(\"regs -a\")\n\t\tnra := len(strings.Split(ra, \"\\n\"))\n\t\tt.Logf(\"regs -a: %s\", ra)\n\t\tif nr > nra/2+1 {\n\t\t\tt.Fatalf(\"'regs' returned too many registers (%d) compared to 'regs -a' (%d)\", nr, nra)\n\t\t}\n\t})\n}\n\nfunc findStarFile(name string) string {\n\treturn filepath.Join(test.FindFixturesDir(), name+\".star\")\n}\n\nfunc TestIssue1598(t *testing.T) {\n\tif buildMode == \"pie\" && runtime.GOARCH == \"ppc64le\" {\n\t\tt.Skip(\"Debug function call Test broken in PIE mode\")\n\t}\n\ttest.MustSupportFunctionCalls(t, testBackend)\n\twithTestTerminal(\"issue1598\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break issue1598.go:5\")\n\t\tterm.MustExec(\"continue\")\n\t\tterm.MustExec(\"config max-string-len 500\")\n\t\tr := term.MustExec(\"call x()\")\n\t\tt.Logf(\"result %q\", r)\n\t\tif !strings.Contains(r, \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut \\\\nlabore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\") {\n\t\t\tt.Fatalf(\"wrong value returned\")\n\t\t}\n\t})\n}\n\nfunc TestExamineMemoryCmd(t *testing.T) {\n\twithTestTerminal(\"examinememory\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break examinememory.go:19\")\n\t\tterm.MustExec(\"break examinememory.go:24\")\n\t\tterm.MustExec(\"continue\")\n\n\t\taddressStr := strings.TrimSpace(term.MustExec(\"p bspUintptr\"))\n\t\taddress, err := strconv.ParseInt(addressStr, 0, 64)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"could convert %s into int64, err %s\", addressStr, err)\n\t\t}\n\n\t\tres := term.MustExec(\"examinemem  -count 51 -fmt hex \" + addressStr)\n\t\tt.Logf(\"the result of examining memory \\n%s\", res)\n\t\t// check first line\n\t\tfirstLine := fmt.Sprintf(\"%#x:   0x0a   0x0b   0x0c   0x0d   0x0e   0x0f   0x10   0x11\", address)\n\t\tif !strings.Contains(res, firstLine) {\n\t\t\tt.Fatalf(\"expected first line: %s\", firstLine)\n\t\t}\n\n\t\t// check last line\n\t\tlastLine := fmt.Sprintf(\"%#x:   0x3a   0x3b   0x3c\", address+6*8)\n\t\tif !strings.Contains(res, lastLine) {\n\t\t\tt.Fatalf(\"expected last line: %s\", lastLine)\n\t\t}\n\n\t\t// second examining memory\n\t\tterm.MustExec(\"continue\")\n\t\tres = term.MustExec(\"x -count 52 -fmt bin \" + addressStr)\n\t\tt.Logf(\"the second result of examining memory result \\n%s\", res)\n\n\t\t// check first line\n\t\tfirstLine = fmt.Sprintf(\"%#x:   11111111   00001011   00001100   00001101\", address)\n\t\tif !strings.Contains(res, firstLine) {\n\t\t\tt.Fatalf(\"expected first line: %s\", firstLine)\n\t\t}\n\n\t\t// third examining memory: -x addr\n\t\tres = term.MustExec(\"examinemem -x \" + addressStr)\n\t\tt.Logf(\"the third result of examining memory result \\n%s\", res)\n\t\tfirstLine = fmt.Sprintf(\"%#x:   0xff\", address)\n\t\tif !strings.Contains(res, firstLine) {\n\t\t\tt.Fatalf(\"expected first line: %s\", firstLine)\n\t\t}\n\n\t\t// fourth examining memory: -x addr + offset\n\t\tres = term.MustExec(\"examinemem -x \" + addressStr + \" + 8\")\n\t\tt.Logf(\"the fourth result of examining memory result \\n%s\", res)\n\t\tfirstLine = fmt.Sprintf(\"%#x:   0x12\", address+8)\n\t\tif !strings.Contains(res, firstLine) {\n\t\t\tt.Fatalf(\"expected first line: %s\", firstLine)\n\t\t}\n\t\t// fifth examining memory: -x &var\n\t\tres = term.MustExec(\"examinemem -x &bs[0]\")\n\t\tt.Logf(\"the fifth result of examining memory result \\n%s\", res)\n\t\tfirstLine = fmt.Sprintf(\"%#x:   0xff\", address)\n\t\tif !strings.Contains(res, firstLine) {\n\t\t\tt.Fatalf(\"expected first line: %s\", firstLine)\n\t\t}\n\n\t\t// sixth examining memory: -fmt and double spaces\n\t\tres = term.MustExec(\"examinemem -fmt  hex  -x &bs[0]\")\n\t\tt.Logf(\"the sixth result of examining memory result \\n%s\", res)\n\t\tfirstLine = fmt.Sprintf(\"%#x:   0xff\", address)\n\t\tif !strings.Contains(res, firstLine) {\n\t\t\tt.Fatalf(\"expected first line: %s\", firstLine)\n\t\t}\n\t})\n\n\twithTestTerminal(\"testvariables2\", t, func(term *FakeTerminal) {\n\t\ttests := []struct {\n\t\t\tExpr string\n\t\t\tWant int\n\t\t}{\n\t\t\t{Expr: \"&i1\", Want: 1},\n\t\t\t{Expr: \"&i2\", Want: 2},\n\t\t\t{Expr: \"p1\", Want: 1},\n\t\t\t{Expr: \"*pp1\", Want: 1},\n\t\t\t{Expr: \"&str1[1]\", Want: '1'},\n\t\t\t{Expr: \"c1.pb\", Want: 1},\n\t\t\t{Expr: \"&c1.pb.a\", Want: 1},\n\t\t\t{Expr: \"&c1.pb.a.A\", Want: 1},\n\t\t\t{Expr: \"&c1.pb.a.B\", Want: 2},\n\t\t}\n\t\tterm.MustExec(\"continue\")\n\t\tfor _, test := range tests {\n\t\t\tres := term.MustExec(\"examinemem -fmt dec -x \" + test.Expr)\n\t\t\t// strip addr from output, e.g. \"0xc0000160b8:   023\" -> \"023\"\n\t\t\tres = strings.TrimSpace(strings.Split(res, \":\")[1])\n\t\t\tgot, err := strconv.Atoi(res)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"expr=%q err=%s\", test.Expr, err)\n\t\t\t} else if got != test.Want {\n\t\t\t\tt.Errorf(\"expr=%q got=%d want=%d\", test.Expr, got, test.Want)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestPrintOnTracepoint(t *testing.T) {\n\twithTestTerminal(\"increment\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"trace main.Increment\")\n\t\tterm.MustExec(\"on 1 print y+1\")\n\t\tout, _ := term.Exec(\"continue\")\n\t\tif !strings.Contains(out, \"y+1: 4\") || !strings.Contains(out, \"y+1: 2\") || !strings.Contains(out, \"y+1: 1\") {\n\t\t\tt.Errorf(\"output did not contain breakpoint information: %q\", out)\n\t\t}\n\t})\n}\n\nfunc TestPrintCastToInterface(t *testing.T) {\n\twithTestTerminal(\"testvariables2\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue\")\n\t\tout := term.MustExec(`p (*\"interface {}\")(uintptr(&iface2))`)\n\t\tt.Logf(\"%q\", out)\n\t})\n}\n\nfunc TestParseNewArgv(t *testing.T) {\n\ttestCases := []struct {\n\t\tin       string\n\t\ttgtargs  string\n\t\ttgtredir string\n\t\ttgterr   string\n\t}{\n\t\t{\"-noargs\", \"\", \" |  | \", \"\"},\n\t\t{\"-noargs arg1\", \"\", \"\", \"too many arguments to restart\"},\n\t\t{\"arg1 arg2\", \"arg1 | arg2\", \" |  | \", \"\"},\n\t\t{\"arg1 arg2 <input.txt\", \"arg1 | arg2\", \"input.txt |  | \", \"\"},\n\t\t{\"arg1 arg2 < input.txt\", \"arg1 | arg2\", \"input.txt |  | \", \"\"},\n\t\t{\"<input.txt\", \"\", \"input.txt |  | \", \"\"},\n\t\t{\"< input.txt\", \"\", \"input.txt |  | \", \"\"},\n\t\t{\"arg1 < input.txt > output.txt 2> error.txt\", \"arg1\", \"input.txt | output.txt | error.txt\", \"\"},\n\t\t{\"< input.txt > output.txt 2> error.txt\", \"\", \"input.txt | output.txt | error.txt\", \"\"},\n\t\t{\"arg1 <input.txt >output.txt 2>error.txt\", \"arg1\", \"input.txt | output.txt | error.txt\", \"\"},\n\t\t{\"<input.txt >output.txt 2>error.txt\", \"\", \"input.txt | output.txt | error.txt\", \"\"},\n\t\t{\"<input.txt <input2.txt\", \"\", \"\", \"redirect error: stdin redirected twice\"},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tresetArgs, newArgv, newRedirects, err := parseNewArgv(tc.in)\n\t\tt.Logf(\"%q -> %q %q %v\\n\", tc.in, newArgv, newRedirects, err)\n\t\tif tc.tgterr != \"\" {\n\t\t\tif err == nil {\n\t\t\t\tt.Errorf(\"Expected error %q, got no error\", tc.tgterr)\n\t\t\t} else if errstr := err.Error(); errstr != tc.tgterr {\n\t\t\t\tt.Errorf(\"Expected error %q, got error %q\", tc.tgterr, errstr)\n\t\t\t}\n\t\t} else {\n\t\t\tif !resetArgs {\n\t\t\t\tt.Errorf(\"parse error, resetArgs is false\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\targvstr := strings.Join(newArgv, \" | \")\n\t\t\tif argvstr != tc.tgtargs {\n\t\t\t\tt.Errorf(\"Expected new arguments %q, got %q\", tc.tgtargs, argvstr)\n\t\t\t}\n\t\t\tredirstr := strings.Join(newRedirects[:], \" | \")\n\t\t\tif redirstr != tc.tgtredir {\n\t\t\t\tt.Errorf(\"Expected new redirects %q, got %q\", tc.tgtredir, redirstr)\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc TestContinueUntil(t *testing.T) {\n\twithTestTerminal(\"continuetestprog\", t, func(term *FakeTerminal) {\n\t\tif runtime.GOARCH != \"386\" {\n\t\t\tlistIsAt(t, term, \"continue main.main\", 16, -1, -1)\n\t\t} else {\n\t\t\tlistIsAt(t, term, \"continue main.main\", 17, -1, -1)\n\t\t}\n\t\tlistIsAt(t, term, \"continue main.sayhi\", 12, -1, -1)\n\t})\n}\n\nfunc TestContinueUntilExistingBreakpoint(t *testing.T) {\n\twithTestTerminal(\"continuetestprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main\")\n\t\tif runtime.GOARCH != \"386\" {\n\t\t\tlistIsAt(t, term, \"continue main.main\", 16, -1, -1)\n\t\t} else {\n\t\t\tlistIsAt(t, term, \"continue main.main\", 17, -1, -1)\n\t\t}\n\t\tlistIsAt(t, term, \"continue main.sayhi\", 12, -1, -1)\n\t})\n}\n\nfunc TestPrintFormat(t *testing.T) {\n\twithTestTerminal(\"testvariables2\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue\")\n\t\tout := term.MustExec(\"print %#x m2[1].B\")\n\t\tif !strings.Contains(out, \"0xb\\n\") {\n\t\t\tt.Fatalf(\"output did not contain '0xb': %q\", out)\n\t\t}\n\t})\n}\n\nfunc TestHitCondBreakpoint(t *testing.T) {\n\twithTestTerminal(\"break\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break bp1 main.main:4\")\n\t\tterm.MustExec(\"condition -hitcount bp1 > 2\")\n\t\tlistIsAt(t, term, \"continue\", 7, -1, -1)\n\t\tout := term.MustExec(\"print i\")\n\t\tt.Logf(\"%q\", out)\n\t\tif !strings.Contains(out, \"3\\n\") {\n\t\t\tt.Fatalf(\"wrong value of i\")\n\t\t}\n\t})\n\n\twithTestTerminal(\"condperghitcount\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break bp1 main.main:8\")\n\t\tterm.MustExec(\"condition -per-g-hitcount bp1 == 2\")\n\t\tlistIsAt(t, term, \"continue\", 16, -1, -1)\n\t\t// first g hit\n\t\tout := term.MustExec(\"print j\")\n\t\tt.Logf(\"%q\", out)\n\t\tif !strings.Contains(out, \"2\\n\") {\n\t\t\tt.Fatalf(\"wrong value of j\")\n\t\t}\n\t\tlistIsAt(t, term, \"continue\", 16, -1, -1)\n\t\t// second g hit\n\t\tout = term.MustExec(\"print j\")\n\t\tt.Logf(\"%q\", out)\n\t\tif !strings.Contains(out, \"2\\n\") {\n\t\t\tt.Fatalf(\"wrong value of j\")\n\t\t}\n\t})\n}\n\nfunc TestCondBreakpointWithFrame(t *testing.T) {\n\twithTestTerminal(\"condframe\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break bp1 callme2\")\n\t\tterm.MustExec(\"condition bp1 runtime.frame(1).i == 3\")\n\t\tterm.MustExec(\"continue\")\n\t\tout := term.MustExec(\"frame 1 print i\")\n\t\tt.Logf(\"%q\", out)\n\t\tif !strings.Contains(out, \"3\\n\") {\n\t\t\tt.Fatalf(\"wrong value of i\")\n\t\t}\n\t})\n}\n\nfunc TestClearCondBreakpoint(t *testing.T) {\n\twithTestTerminal(\"break\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main:4\")\n\t\tterm.MustExec(\"condition 1 i%3==2\")\n\t\tlistIsAt(t, term, \"continue\", 7, -1, -1)\n\t\tout := term.MustExec(\"print i\")\n\t\tt.Logf(\"%q\", out)\n\t\tif !strings.Contains(out, \"2\\n\") {\n\t\t\tt.Fatalf(\"wrong value of i\")\n\t\t}\n\t\tterm.MustExec(\"condition -clear 1\")\n\t\tlistIsAt(t, term, \"continue\", 7, -1, -1)\n\t\tout = term.MustExec(\"print i\")\n\t\tt.Logf(\"%q\", out)\n\t\tif !strings.Contains(out, \"3\\n\") {\n\t\t\tt.Fatalf(\"wrong value of i\")\n\t\t}\n\t})\n}\n\nfunc TestBreakpointEditing(t *testing.T) {\n\tterm := &FakeTerminal{\n\t\tt:    t,\n\t\tTerm: New(nil, &config.Config{}),\n\t}\n\t_ = term\n\n\tvar testCases = []struct {\n\t\tinBp    *api.Breakpoint\n\t\tinBpStr string\n\t\tedit    string\n\t\toutBp   *api.Breakpoint\n\t}{\n\t\t{ // tracepoint -> breakpoint\n\t\t\t&api.Breakpoint{Tracepoint: true},\n\t\t\t\"trace\",\n\t\t\t\"\",\n\t\t\t&api.Breakpoint{}},\n\t\t{ // breakpoint -> tracepoint\n\t\t\t&api.Breakpoint{Variables: []string{\"a\"}},\n\t\t\t\"print a\",\n\t\t\t\"print a\\ntrace\",\n\t\t\t&api.Breakpoint{Tracepoint: true, Variables: []string{\"a\"}}},\n\t\t{ // add print var\n\t\t\t&api.Breakpoint{Variables: []string{\"a\"}},\n\t\t\t\"print a\",\n\t\t\t\"print b\\nprint a\\n\",\n\t\t\t&api.Breakpoint{Variables: []string{\"b\", \"a\"}}},\n\t\t{ // add goroutine flag\n\t\t\t&api.Breakpoint{},\n\t\t\t\"\",\n\t\t\t\"goroutine\",\n\t\t\t&api.Breakpoint{Goroutine: true}},\n\t\t{ // remove goroutine flag\n\t\t\t&api.Breakpoint{Goroutine: true},\n\t\t\t\"goroutine\",\n\t\t\t\"\",\n\t\t\t&api.Breakpoint{}},\n\t\t{ // add stack directive\n\t\t\t&api.Breakpoint{},\n\t\t\t\"\",\n\t\t\t\"stack 10\",\n\t\t\t&api.Breakpoint{Stacktrace: 10}},\n\t\t{ // remove stack directive\n\t\t\t&api.Breakpoint{Stacktrace: 20},\n\t\t\t\"stack 20\",\n\t\t\t\"print a\",\n\t\t\t&api.Breakpoint{Variables: []string{\"a\"}}},\n\t\t{ // add condition\n\t\t\t&api.Breakpoint{Variables: []string{\"a\"}},\n\t\t\t\"print a\",\n\t\t\t\"print a\\ncond a < b\",\n\t\t\t&api.Breakpoint{Variables: []string{\"a\"}, Cond: \"a < b\"}},\n\t\t{ // remove condition\n\t\t\t&api.Breakpoint{Cond: \"a < b\"},\n\t\t\t\"cond a < b\",\n\t\t\t\"\",\n\t\t\t&api.Breakpoint{}},\n\t\t{ // change condition\n\t\t\t&api.Breakpoint{Cond: \"a < b\"},\n\t\t\t\"cond a < b\",\n\t\t\t\"cond a < 5\",\n\t\t\t&api.Breakpoint{Cond: \"a < 5\"}},\n\t\t{ // change hitcount condition\n\t\t\t&api.Breakpoint{HitCond: \"% 2\"},\n\t\t\t\"cond -hitcount % 2\",\n\t\t\t\"cond -hitcount = 2\",\n\t\t\t&api.Breakpoint{HitCond: \"= 2\"}},\n\t}\n\n\tfor _, tc := range testCases {\n\t\tbp := *tc.inBp\n\t\tbpStr := strings.Join(formatBreakpointAttrs(\"\", &bp, true), \"\\n\")\n\t\tif bpStr != tc.inBpStr {\n\t\t\tt.Errorf(\"Expected %q got %q for:\\n%#v\", tc.inBpStr, bpStr, tc.inBp)\n\t\t}\n\t\tctx := callContext{Prefix: onPrefix, Scope: api.EvalScope{GoroutineID: -1, Frame: 0, DeferredCall: 0}, Breakpoint: &bp}\n\t\terr := term.cmds.parseBreakpointAttrs(nil, ctx, strings.NewReader(tc.edit))\n\t\tif err != nil {\n\t\t\tt.Errorf(\"Unexpected error during edit %q\", tc.edit)\n\t\t}\n\t\tif !reflect.DeepEqual(bp, *tc.outBp) {\n\t\t\tt.Errorf(\"mismatch after edit\\nexpected: %#v\\ngot: %#v\", tc.outBp, bp)\n\t\t}\n\t}\n}\n\nfunc TestTranscript(t *testing.T) {\n\twithTestTerminal(\"math\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main\")\n\t\tout := term.MustExec(\"continue\")\n\t\tif !strings.HasPrefix(out, \"> [Breakpoint 1] main.main()\") {\n\t\t\tt.Fatalf(\"Wrong output for next: <%s>\", out)\n\t\t}\n\t\tfh, err := os.CreateTemp(\"\", \"test-transcript-*\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"CreateTemp: %v\", err)\n\t\t}\n\t\tname := fh.Name()\n\t\tfh.Close()\n\t\tt.Logf(\"output to %q\", name)\n\n\t\tslurp := func() string {\n\t\t\tb, err := os.ReadFile(name)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"could not read transcript file: %v\", err)\n\t\t\t}\n\t\t\treturn string(b)\n\t\t}\n\n\t\tterm.MustExec(fmt.Sprintf(\"transcript %s\", name))\n\t\tout = term.MustExec(\"list\")\n\t\t//term.MustExec(\"transcript -off\")\n\t\tif out != slurp() {\n\t\t\tt.Logf(\"output of list %s\", out)\n\t\t\tt.Logf(\"contents of transcript: %s\", slurp())\n\t\t\tt.Errorf(\"transcript and command out differ\")\n\t\t}\n\n\t\tterm.MustExec(fmt.Sprintf(\"transcript -t -x %s\", name))\n\t\tout = term.MustExec(`print \"hello\"`)\n\t\tif out != \"\" {\n\t\t\tt.Errorf(\"output of print is %q but should have been suppressed by transcript\", out)\n\t\t}\n\t\tif slurp() != \"\\\"hello\\\"\\n\" {\n\t\t\tt.Errorf(\"wrong contents of transcript: %q\", slurp())\n\t\t}\n\n\t\tos.Remove(name)\n\t})\n}\n\nfunc TestDisassPosCmd(t *testing.T) {\n\tif runtime.GOARCH == \"ppc64le\" && buildMode == \"pie\" {\n\t\tt.Skip(\"pie mode broken on ppc64le\")\n\t}\n\twithTestTerminal(\"testvariables2\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue\")\n\t\tout := term.MustExec(\"step-instruction\")\n\t\tt.Logf(\"%q\\n\", out)\n\t\tif !strings.Contains(out, \"call $runtime.Breakpoint\") && !strings.Contains(out, \"CALL runtime.Breakpoint(SB)\") {\n\t\t\tt.Errorf(\"output doesn't look like disassembly\")\n\t\t}\n\t})\n}\n\nfunc TestCreateBreakpointByLocExpr(t *testing.T) {\n\twithTestTerminal(\"math\", t, func(term *FakeTerminal) {\n\t\tout := term.MustExec(\"break main.main\")\n\t\tposition1 := strings.Split(out, \" set at \")[1]\n\t\tterm.MustExec(\"continue\")\n\t\tterm.MustExec(\"clear 1\")\n\t\tout = term.MustExec(\"break +0\")\n\t\tposition2 := strings.Split(out, \" set at \")[1]\n\t\tif position1 != position2 {\n\t\t\tt.Fatalf(\"mismatched positions %q and %q\\n\", position1, position2)\n\t\t}\n\t})\n}\n\nfunc TestCreateBreakpointWithCondition(t *testing.T) {\n\twithTestTerminal(\"break\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break bp1 main.main:4 if i == 3\")\n\t\tout := term.MustExec(\"breakpoints\")\n\t\tif !strings.Contains(out, \"Breakpoint bp1\") {\n\t\t\tt.Fatal(\"incorrect breakpoint name\")\n\t\t}\n\t\tlistIsAt(t, term, \"continue\", 7, -1, -1)\n\t\tout = term.MustExec(\"print i\")\n\t\tt.Logf(\"%q\", out)\n\t\tif !strings.Contains(out, \"3\\n\") {\n\t\t\tt.Fatalf(\"wrong value of i\")\n\t\t}\n\t})\n}\n\nfunc TestCreateBreakpointWithCondition2(t *testing.T) {\n\twithTestTerminal(\"break\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue main.main:4\")\n\t\tterm.MustExec(\"break if i == 3\")\n\t\tout := term.MustExec(\"breakpoints\")\n\t\tif strings.Contains(out, \"Breakpoint if\") {\n\t\t\tt.Fatal(\"incorrect breakpoint name, should be ID\")\n\t\t}\n\t\tlistIsAt(t, term, \"continue\", 7, -1, -1)\n\t\tout = term.MustExec(\"print i\")\n\t\tt.Logf(\"%q\", out)\n\t\tif !strings.Contains(out, \"3\\n\") {\n\t\t\tt.Fatalf(\"wrong value of i\")\n\t\t}\n\t})\n}\n\nfunc TestCreateBreakpointWithCondition3(t *testing.T) {\n\twithTestTerminal(\"test if path/main\", t, func(term *FakeTerminal) {\n\t\t// We should not attempt to parse this as a condition.\n\t\tterm.MustExec(`break _fixtures/test if path/main.go:4`)\n\t\tlistIsAt(t, term, \"continue\", 4, -1, -1)\n\t})\n}\n\nfunc TestRestartBreakpoints(t *testing.T) {\n\t// Tests that breakpoints set using just a line number and with a line\n\t// offset are preserved after restart. See issue #3423.\n\twithTestTerminal(\"continuetestprog\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main\")\n\t\tterm.MustExec(\"continue\")\n\t\tterm.MustExec(\"break 9\")\n\t\tterm.MustExec(\"break +1\")\n\t\tout := term.MustExec(\"breakpoints\")\n\t\tt.Log(\"breakpoints before:\\n\", out)\n\t\tterm.MustExec(\"restart\")\n\t\tout = term.MustExec(\"breakpoints\")\n\t\tt.Log(\"breakpoints after:\\n\", out)\n\t\tbps, err := term.client.ListBreakpoints(false)\n\t\tassertNoError(t, err, \"ListBreakpoints\")\n\t\tfor _, bp := range bps {\n\t\t\tif bp.ID < 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif bp.Addr == 0 {\n\t\t\t\tt.Fatalf(\"breakpoint %d has address 0\", bp.ID)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestListPackages(t *testing.T) {\n\ttest.AllowRecording(t)\n\twithTestTerminal(\"goroutinestackprog\", t, func(term *FakeTerminal) {\n\t\tout := term.MustExec(\"packages\")\n\t\tt.Logf(\"> packages\\n%s\", out)\n\t\tseen := map[string]bool{}\n\t\tfor p := range strings.SplitSeq(strings.TrimSpace(out), \"\\n\") {\n\t\t\tseen[p] = true\n\t\t}\n\t\tif !seen[\"main\"] || !seen[\"runtime\"] {\n\t\t\tt.Error(\"output omits 'main' and 'runtime'\")\n\t\t}\n\n\t\tout = term.MustExec(\"packages runtime\")\n\t\tt.Logf(\"> packages runtime\\n%s\", out)\n\n\t\tfor p := range strings.SplitSeq(strings.TrimSpace(out), \"\\n\") {\n\t\t\tif !strings.Contains(p, \"runtime\") {\n\t\t\t\tt.Errorf(\"output includes unexpected %q\", p)\n\t\t\t}\n\t\t\tseen[p] = true\n\t\t}\n\t\tif !seen[\"runtime\"] {\n\t\t\tt.Error(\"output omits 'runtime'\")\n\t\t}\n\t})\n}\n\nfunc TestSubstitutePathAndList(t *testing.T) {\n\t// checks that substitute path rules do not remain cached after a -clear.\n\t// See issue #3565.\n\tif runtime.GOOS == \"windows\" {\n\t\tt.Skip(\"test is not valid on windows due to path separators\")\n\t}\n\twithTestTerminal(\"math\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"break main.main\")\n\t\tterm.MustExec(\"continue\")\n\t\tfixturesDir, _ := filepath.Abs(test.FindFixturesDir())\n\t\tterm.MustExec(\"config substitute-path \" + fixturesDir + \" /blah\")\n\t\tout, _ := term.Exec(\"list\")\n\t\tt.Logf(\"list output %s\", out)\n\t\tif !strings.Contains(out, \"/blah/math.go\") {\n\t\t\tt.Fatalf(\"bad output\")\n\t\t}\n\t\tterm.MustExec(\"config substitute-path -clear\")\n\t\tterm.MustExec(\"config substitute-path \" + fixturesDir + \" /blah2\")\n\t\tout, _ = term.Exec(\"list\")\n\t\tt.Logf(\"list output %s\", out)\n\t\tif !strings.Contains(out, \"/blah2/math.go\") {\n\t\t\tt.Fatalf(\"bad output\")\n\t\t}\n\t})\n}\n\nfunc TestDisplay(t *testing.T) {\n\t// Tests that display command works. See issue #3595.\n\ttype testCase struct{ in, tgt string }\n\twithTestTerminal(\"testvariables2\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue\")\n\n\t\tfor _, tc := range []testCase{\n\t\t\t{\"string(byteslice)\", `0: string(byteslice) = \"tèst\"`},\n\t\t\t{\"string(byteslice[1:])\", `0: string(byteslice[1:]) = \"èst\"`},\n\t\t\t{\"%s string(byteslice)\", `0: string(byteslice) = tèst`},\n\t\t} {\n\t\t\tout := term.MustExec(\"display -a \" + tc.in)\n\t\t\tt.Logf(\"%q -> %q\", tc.in, out)\n\t\t\tif !strings.Contains(out, tc.tgt) {\n\t\t\t\tt.Errorf(\"wrong output for 'display -a %s':\\n\\tgot: %q\\n\\texpected: %q\", tc.in, out, tc.tgt)\n\t\t\t}\n\t\t\tterm.MustExec(\"display -d 0\")\n\t\t}\n\t})\n}\n\n// compareBreakpoints compares two lists of breakpoints, considering only\n// the fields that are preserved during save/restore. It ignores runtime state like\n// IDs, names, addresses, and hit counts.\nfunc compareBreakpoints(t *testing.T, before, after []*api.Breakpoint) {\n\tt.Helper()\n\n\t// Sort both lists by File:Line for stable comparison\n\t// We mainly need this function for Tracepoints.\n\tsortBps := func(bps []*api.Breakpoint) []*api.Breakpoint {\n\t\tsorted := make([]*api.Breakpoint, len(bps))\n\t\tcopy(sorted, bps)\n\t\tslices.SortFunc(sorted, func(a, b *api.Breakpoint) int {\n\t\t\tif a.File != b.File {\n\t\t\t\treturn strings.Compare(a.File, b.File)\n\t\t\t}\n\t\t\treturn cmp.Compare(a.Line, b.Line)\n\t\t})\n\t\treturn sorted\n\t}\n\n\tbeforeSorted := sortBps(before)\n\tafterSorted := sortBps(after)\n\n\tif len(beforeSorted) != len(afterSorted) {\n\t\tt.Errorf(\"Breakpoint count mismatch: before=%d, after=%d\", len(beforeSorted), len(afterSorted))\n\t\treturn\n\t}\n\n\tfor i := range beforeSorted {\n\t\tb := beforeSorted[i]\n\t\ta := afterSorted[i]\n\n\t\tif b.File != a.File {\n\t\t\tt.Errorf(\"Breakpoint %d: File mismatch: before=%q, after=%q\", i, b.File, a.File)\n\t\t}\n\t\tif b.Line != a.Line {\n\t\t\tt.Errorf(\"Breakpoint %d: Line mismatch: before=%d, after=%d\", i, b.Line, a.Line)\n\t\t}\n\n\t\tif b.Tracepoint != a.Tracepoint {\n\t\t\tt.Errorf(\"Breakpoint %d: Tracepoint mismatch: before=%v, after=%v\", i, b.Tracepoint, a.Tracepoint)\n\t\t}\n\t\tif b.Cond != a.Cond {\n\t\t\tt.Errorf(\"Breakpoint %d: Cond mismatch: before=%q, after=%q\", i, b.Cond, a.Cond)\n\t\t}\n\t\tif b.HitCond != a.HitCond {\n\t\t\tt.Errorf(\"Breakpoint %d: HitCond mismatch: before=%q, after=%q\", i, b.HitCond, a.HitCond)\n\t\t}\n\t\tif b.HitCondPerG != a.HitCondPerG {\n\t\t\tt.Errorf(\"Breakpoint %d: HitCondPerG mismatch: before=%v, after=%v\", i, b.HitCondPerG, a.HitCondPerG)\n\t\t}\n\t\tif b.Disabled != a.Disabled {\n\t\t\tt.Errorf(\"Breakpoint %d: Disabled mismatch: before=%v, after=%v\", i, b.Disabled, a.Disabled)\n\t\t}\n\t}\n}\n\nfunc TestBreakpointSave(t *testing.T) {\n\ttest.AllowRecording(t)\n\ttests := []struct {\n\t\tname           string\n\t\tbreakpointCmds []string\n\t}{\n\t\t{\n\t\t\tname: \"basic breakpoint save\",\n\t\t\tbreakpointCmds: []string{\n\t\t\t\t\"break main.main\",\n\t\t\t\t\"break _fixtures/break.go:4\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"breakpoint with condition\",\n\t\t\tbreakpointCmds: []string{\n\t\t\t\t\"break main.main:4 if i == 3\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"disabled breakpoint\",\n\t\t\tbreakpointCmds: []string{\n\t\t\t\t\"break main main.main\",\n\t\t\t\t\"toggle main\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname: \"tracepoint\",\n\t\t\tbreakpointCmds: []string{\n\t\t\t\t\"trace main.main\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tname:           \"empty breakpoint list\",\n\t\t\tbreakpointCmds: []string{},\n\t\t},\n\t}\n\tfor _, tc := range tests {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\twithTestTerminal(\"break\", t, func(term *FakeTerminal) {\n\t\t\t\tfor _, cmd := range tc.breakpointCmds {\n\t\t\t\t\tterm.MustExec(cmd)\n\t\t\t\t}\n\n\t\t\t\t// Capture breakpoints before save\n\t\t\t\tbpsBefore, err := term.client.ListBreakpoints(false)\n\t\t\t\tassertNoError(t, err, \"ListBreakpoints before save\")\n\n\t\t\t\tf, err := os.CreateTemp(\"\", \"test*.txt\")\n\t\t\t\tif err != nil {\n\t\t\t\t\tt.Fatalf(\"Failed to create temp file: %v\", err)\n\t\t\t\t}\n\t\t\t\tf.Close()\n\t\t\t\tdefer os.Remove(f.Name())\n\n\t\t\t\tterm.MustExec(\"breakpoints -save \" + f.Name())\n\t\t\t\tterm.MustExec(\"clearall\")\n\t\t\t\tterm.MustExec(\"source \" + f.Name())\n\n\t\t\t\t// Capture breakpoints after restore\n\t\t\t\tbpsAfter, err := term.client.ListBreakpoints(false)\n\t\t\t\tassertNoError(t, err, \"ListBreakpoints after restore\")\n\n\t\t\t\t// Compare breakpoints\n\t\t\t\tcompareBreakpoints(t, bpsBefore, bpsAfter)\n\t\t\t})\n\t\t})\n\t}\n\n\t// Test case for detecting modified/corrupted save files. It is the same\n\t// idea as in the other tests but we add an additional breakpoint after\n\t// sourcing the file\n\tt.Run(\"detect additional breakpoint\", func(t *testing.T) {\n\t\twithTestTerminal(\"break\", t, func(term *FakeTerminal) {\n\t\t\tterm.MustExec(\"break main.main\")\n\t\t\tterm.MustExec(\"break _fixtures/break.go:4\")\n\n\t\t\tbpsBefore, err := term.client.ListBreakpoints(false)\n\t\t\tassertNoError(t, err, \"ListBreakpoints before save\")\n\n\t\t\tf, err := os.CreateTemp(\"\", \"test*.txt\")\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"Failed to create temp file: %v\", err)\n\t\t\t}\n\t\t\tf.Close()\n\t\t\tdefer os.Remove(f.Name())\n\n\t\t\tterm.MustExec(\"breakpoints -save \" + f.Name())\n\t\t\tterm.MustExec(\"clearall\")\n\t\t\tterm.MustExec(\"source \" + f.Name())\n\n\t\t\t// Inject an extra breakpoint after sourcing\n\t\t\tterm.MustExec(\"break _fixtures/break.go:6\")\n\n\t\t\tbpsAfter, err := term.client.ListBreakpoints(false)\n\t\t\tassertNoError(t, err, \"ListBreakpoints after restore\")\n\n\t\t\t// Verify that we detected the injected breakpoint\n\t\t\t// We expect 3 breakpoints (2 original + 1 injected) instead of 2\n\t\t\tif len(bpsBefore) == len(bpsAfter) {\n\t\t\t\tt.Errorf(\"Failed to detect injected breakpoint: before=%d, after=%d\", len(bpsBefore), len(bpsAfter))\n\t\t\t}\n\t\t\tif len(bpsAfter) != len(bpsBefore)+1 {\n\t\t\t\tt.Errorf(\"Unexpected breakpoint count after injection: expected=%d, got=%d\", len(bpsBefore)+1, len(bpsAfter))\n\t\t\t}\n\t\t})\n\t})\n}\n\nfunc TestBreakPointFailWithCond(t *testing.T) {\n\tif runtime.GOOS == \"freebsd\" || runtime.GOOS == \"darwin\" {\n\t\tt.Skip(\"follow exec not implemented\")\n\t}\n\n\toldYesNo := yesno\n\tdefer func() { yesno = oldYesNo }()\n\t// always answer yes here\n\tyesno = func(line *liner.State, question, defaultAnswer string) (bool, error) {\n\t\treturn true, nil\n\t}\n\n\twithTestTerminal(\"spawn\", t, func(term *FakeTerminal) {\n\t\tassertNoError(t, term.client.FollowExec(true, \"\"), \"FollowExec\")\n\t\t_, err := term.Exec(\"break spawnchild.go:11 if i == 1\")\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"expect to set a suspended breakpoint: %v\", err)\n\t\t}\n\t\tbp, _ := term.client.GetBreakpoint(1)\n\t\tif bp.Cond != \"i == 1\" {\n\t\t\tt.Errorf(\"expected condition to be 'i == 1', got %s\", bp.Cond)\n\t\t}\n\t})\n}\n\nfunc TestTraceRegexpReturn(t *testing.T) {\n\twithTestTerminal(\"traceret\", t, func(term *FakeTerminal) {\n\t\tout, err := term.Exec(`trace /main\\.fncall./`)\n\t\tif err != nil {\n\t\t\tt.Errorf(\"error executing trace command: %v\", err)\n\t\t}\n\t\tout, _ = term.Exec(\"continue\")\n\t\tt.Logf(\"continue: %q\", out)\n\t\tif out != \"> goroutine(1): main.fncall1()\\n>> goroutine(1): main.fncall1 => (1)\\n> goroutine(1): main.fncall2()\\n>> goroutine(1): main.fncall2 => (2)\\n\" {\n\t\t\tt.Errorf(\"wrong output for continue\")\n\t\t}\n\t})\n}\n\nfunc TestStarlarkOnPrefix(t *testing.T) {\n\twithTestTerminal(\"testvariables2\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"source \" + findStarFile(\"test_allow_on\"))\n\n\t\tvar customCmd *command\n\t\tfor i := range term.cmds.cmds {\n\t\t\tcmd := &term.cmds.cmds[i]\n\t\t\tif cmd.match(\"test_on_allowed\") {\n\t\t\t\tcustomCmd = cmd\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif customCmd == nil {\n\t\t\tt.Fatal(\"test_on_allowed command not found\")\n\t\t}\n\n\t\t// All custom starlark commands should have onPrefix set\n\t\tif customCmd.allowedPrefixes&onPrefix == 0 {\n\t\t\tt.Errorf(\"custom starlark command should have onPrefix set, got allowedPrefixes=%v\", customCmd.allowedPrefixes)\n\t\t}\n\n\t\tterm.MustExec(\"break main.main\")\n\n\t\tbps1, _ := term.client.ListBreakpoints(false)\n\t\tvar targetBpID int\n\t\tfor _, bp := range bps1 {\n\t\t\tif bp.FunctionName == \"main.main\" {\n\t\t\t\ttargetBpID = bp.ID\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif targetBpID == 0 {\n\t\t\tt.Fatal(\"Could not find breakpoint on main.main\")\n\t\t}\n\n\t\tterm.MustExec(fmt.Sprintf(\"on %d test_on_allowed\", targetBpID))\n\n\t\tbpListOutput := term.MustExec(\"breakpoints\")\n\t\tif !strings.Contains(bpListOutput, \"test_on_allowed\") {\n\t\t\tt.Errorf(\"expected 'test_on_allowed' to appear in breakpoints output, got: %q\", bpListOutput)\n\t\t}\n\n\t\tbreakpoints, err := term.client.ListBreakpoints(false)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif len(breakpoints) == 0 {\n\t\t\tt.Fatal(\"no breakpoints found\")\n\t\t}\n\n\t\tvar bp *api.Breakpoint\n\t\tfor _, b := range breakpoints {\n\t\t\tif b.ID == targetBpID {\n\t\t\t\tbp = b\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif bp == nil {\n\t\t\tt.Fatalf(\"Could not find breakpoint with ID %d\", targetBpID)\n\t\t}\n\n\t\tif len(bp.CustomCommands) == 0 {\n\t\t\tt.Errorf(\"expected custom command to be registered on breakpoint, but CustomCommands is empty\")\n\t\t} else {\n\t\t\tfound := slices.Contains(bp.CustomCommands, \"test_on_allowed\")\n\t\t\tif !found {\n\t\t\t\tt.Errorf(\"expected 'test_on_allowed' to be in CustomCommands, got %v\", bp.CustomCommands)\n\t\t\t}\n\t\t}\n\n\t\tterm.MustExec(fmt.Sprintf(\"on %d test_on_allowed hello world\", targetBpID))\n\n\t\tbpListOutput2 := term.MustExec(\"breakpoints\")\n\t\tif !strings.Contains(bpListOutput2, \"test_on_allowed hello world\") {\n\t\t\tt.Errorf(\"expected 'test_on_allowed hello world' to appear in breakpoints output, got: %q\", bpListOutput2)\n\t\t}\n\n\t\tout := term.MustExec(\"continue\")\n\t\tif !strings.Contains(out, \"test_on_allowed called with:\") {\n\t\t\tt.Errorf(\"expected custom command to be executed when breakpoint is hit, but output was: %q\", out)\n\t\t}\n\t\tif !strings.Contains(out, \"test_on_allowed called with: hello world\") {\n\t\t\tt.Errorf(\"expected custom command with args to be executed, but output was: %q\", out)\n\t\t}\n\t})\n}\n\nfunc TestCustomCommandStopsOnContinue(t *testing.T) {\n\t// This test verifies that when a custom command triggers a runCmd (like continue),\n\t// the execution of remaining custom commands is stopped because the process state\n\t// has been invalidated.\n\twithTestTerminal(\"break\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"source \" + findStarFile(\"test_custom_cmd_continue\"))\n\n\t\tterm.MustExec(\"break break.go:7\")\n\n\t\tbps, _ := term.client.ListBreakpoints(false)\n\t\tvar targetBpID int\n\t\tfor _, bp := range bps {\n\t\t\tif strings.Contains(bp.File, \"break.go\") && bp.Line == 7 {\n\t\t\t\ttargetBpID = bp.ID\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif targetBpID == 0 {\n\t\t\tt.Fatal(\"Could not find breakpoint on break.go:7\")\n\t\t}\n\n\t\t// Add three custom commands to the breakpoint:\n\t\t// 1. cmd before continue (should execute)\n\t\t// 2. continue (should execute and invalidate state)\n\t\t// 3. cmd after continue (should NOT execute because state is invalid)\n\t\tterm.MustExec(fmt.Sprintf(\"on %d test_cmd_before_continue\", targetBpID))\n\t\tterm.MustExec(fmt.Sprintf(\"on %d test_continue_cmd\", targetBpID))\n\t\tterm.MustExec(fmt.Sprintf(\"on %d test_cmd_after_continue\", targetBpID))\n\n\t\tout := term.MustExec(\"continue\")\n\n\t\tif !strings.Contains(out, \"BEFORE_CONTINUE\") {\n\t\t\tt.Errorf(\"expected BEFORE_CONTINUE to be printed, got: %q\", out)\n\t\t}\n\n\t\tif !strings.Contains(out, \"CONTINUE_CMD\") {\n\t\t\tt.Errorf(\"expected CONTINUE_CMD to be printed, got: %q\", out)\n\t\t}\n\n\t\tif strings.Contains(out, \"AFTER_CONTINUE\") {\n\t\t\tt.Errorf(\"AFTER_CONTINUE was printed, which means the command ran after continue, got: %q\", out)\n\t\t}\n\t})\n}\n\nfunc TestCommandPromptExpansion(t *testing.T) {\n\twithTestTerminal(\"testvariables2\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue\")\n\t\tfor _, e := range []struct{ in, tgt string }{\n\t\t\t{\"$u\", \"<malformed escape>\"},\n\t\t\t{\"malformed at end $\", \"malformed at end <malformed escape>\"},\n\t\t\t{\"$g\", \"1\"},\n\t\t\t{\"$g:$f>\", \"1:0>\"},\n\t\t\t{\"$$g\", \"$g\"},\n\t\t} {\n\t\t\tout := term.expandPrompt(e.in)\n\t\t\tif out != e.tgt {\n\t\t\t\tt.Errorf(\"input %q expected %q got %q\\n\", e.in, e.tgt, out)\n\t\t\t}\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "pkg/terminal/config.go",
    "content": "package terminal\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"text/tabwriter\"\n\n\t\"github.com/go-delve/delve/pkg/config\"\n)\n\nfunc configureCmd(t *Term, ctx callContext, args string) error {\n\tt.substitutePathRulesCache = nil\n\tswitch args {\n\tcase \"-list\":\n\t\treturn configureList(t)\n\tcase \"-save\":\n\t\treturn config.SaveConfig(t.conf)\n\tcase \"\":\n\t\treturn errors.New(\"wrong number of arguments to \\\"config\\\"\")\n\tdefault:\n\t\terr := configureSet(t, args)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif t.client != nil { // only happens in tests\n\t\t\tlcfg := t.loadConfig()\n\t\t\tt.client.SetReturnValuesLoadConfig(&lcfg)\n\t\t\tt.updateConfig()\n\t\t}\n\t\treturn nil\n\t}\n}\n\nfunc configureList(t *Term) error {\n\tw := new(tabwriter.Writer)\n\tw.Init(t.stdout, 0, 8, 1, ' ', 0)\n\tconfig.ConfigureList(w, t.conf, \"yaml\")\n\treturn w.Flush()\n}\n\nfunc configureValidParameter(t *Term, cfgname string) bool {\n\treturn config.ConfigureFindFieldByName(t.conf, cfgname, \"yaml\") != (reflect.Value{})\n}\n\nfunc configureSet(t *Term, args string) error {\n\tv := config.Split2PartsBySpace(args)\n\n\tcfgname := v[0]\n\tvar rest string\n\tif len(v) == 2 {\n\t\trest = v[1]\n\t}\n\n\tswitch cfgname {\n\tcase \"alias\":\n\t\treturn configureSetAlias(t, rest)\n\tcase \"debug-info-directories\":\n\t\treturn configureSetDebugInfoDirectories(t, rest)\n\t}\n\n\tfield := config.ConfigureFindFieldByName(t.conf, cfgname, \"yaml\")\n\tif !field.CanAddr() {\n\t\treturn fmt.Errorf(\"%q is not a configuration parameter\", cfgname)\n\t}\n\n\tif field.Kind() == reflect.Slice && field.Type().Elem().Name() == \"SubstitutePathRule\" {\n\t\treturn configureSetSubstitutePath(t, rest)\n\t}\n\n\treturn config.ConfigureSetSimple(rest, cfgname, field)\n}\n\nfunc configureSetSubstitutePath(t *Term, rest string) error {\n\tif strings.TrimSpace(rest) == \"-clear\" {\n\t\tt.conf.SubstitutePath = t.conf.SubstitutePath[:0]\n\t\treturn nil\n\t}\n\tif strings.TrimSpace(rest) == \"-guess\" {\n\t\trules, err := t.client.GuessSubstitutePath()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tt.conf.SubstitutePath = t.conf.SubstitutePath[:0]\n\t\tfor _, rule := range rules {\n\t\t\tt.conf.SubstitutePath = append(t.conf.SubstitutePath, config.SubstitutePathRule{From: rule[0], To: rule[1]})\n\t\t}\n\t\trest = \"\" // print the result\n\t}\n\targv := config.SplitQuotedFields(rest, '\"')\n\tif len(argv) == 2 && argv[0] == \"-clear\" {\n\t\targv = argv[1:]\n\t}\n\tswitch len(argv) {\n\tcase 0:\n\t\tw := new(tabwriter.Writer)\n\t\tw.Init(t.stdout, 0, 8, 1, ' ', 0)\n\t\tfor i := range t.conf.SubstitutePath {\n\t\t\tfmt.Fprintf(w, \"%q\\t→\\t%q\\n\", t.conf.SubstitutePath[i].From, t.conf.SubstitutePath[i].To)\n\t\t}\n\t\tw.Flush()\n\tcase 1: // delete substitute-path rule\n\t\tfor i := range t.conf.SubstitutePath {\n\t\t\tif t.conf.SubstitutePath[i].From == argv[0] {\n\t\t\t\tcopy(t.conf.SubstitutePath[i:], t.conf.SubstitutePath[i+1:])\n\t\t\t\tt.conf.SubstitutePath = t.conf.SubstitutePath[:len(t.conf.SubstitutePath)-1]\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\treturn fmt.Errorf(\"could not find rule for %q\", argv[0])\n\tcase 2: // add substitute-path rule\n\t\tfor i := range t.conf.SubstitutePath {\n\t\t\tif t.conf.SubstitutePath[i].From == argv[0] {\n\t\t\t\tt.conf.SubstitutePath[i].To = argv[1]\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\tt.conf.SubstitutePath = append(t.conf.SubstitutePath, config.SubstitutePathRule{From: argv[0], To: argv[1]})\n\tdefault:\n\t\treturn errors.New(\"too many arguments to \\\"config substitute-path\\\"\")\n\t}\n\treturn nil\n}\n\nfunc configureSetAlias(t *Term, rest string) error {\n\targv := config.SplitQuotedFields(rest, '\"')\n\tswitch len(argv) {\n\tcase 1: // delete alias rule\n\t\tfor k := range t.conf.Aliases {\n\t\t\tv := t.conf.Aliases[k]\n\t\t\tfor i := range v {\n\t\t\t\tif v[i] == argv[0] {\n\t\t\t\t\tcopy(v[i:], v[i+1:])\n\t\t\t\t\tt.conf.Aliases[k] = v[:len(v)-1]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase 2: // add alias rule\n\t\talias, cmd := argv[1], argv[0]\n\t\tif t.conf.Aliases == nil {\n\t\t\tt.conf.Aliases = make(map[string][]string)\n\t\t}\n\t\tt.conf.Aliases[cmd] = append(t.conf.Aliases[cmd], alias)\n\t}\n\tt.cmds.Merge(t.conf.Aliases)\n\treturn nil\n}\n\nfunc configureSetDebugInfoDirectories(t *Term, rest string) error {\n\tv := config.Split2PartsBySpace(rest)\n\n\tif t.client != nil {\n\t\tdid, err := t.client.GetDebugInfoDirectories()\n\t\tif err == nil {\n\t\t\tt.conf.DebugInfoDirectories = did\n\t\t}\n\t}\n\n\tswitch v[0] {\n\tcase \"-clear\":\n\t\tt.conf.DebugInfoDirectories = t.conf.DebugInfoDirectories[:0]\n\tcase \"-add\":\n\t\tif len(v) < 2 {\n\t\t\treturn errors.New(\"not enough arguments to \\\"config debug-info-directories\\\"\")\n\t\t}\n\t\tt.conf.DebugInfoDirectories = append(t.conf.DebugInfoDirectories, v[1])\n\tcase \"-rm\":\n\t\tif len(v) < 2 {\n\t\t\treturn errors.New(\"not enough arguments to \\\"config debug-info-directories\\\"\")\n\t\t}\n\t\tfound := false\n\t\tfor i := range t.conf.DebugInfoDirectories {\n\t\t\tif t.conf.DebugInfoDirectories[i] == v[1] {\n\t\t\t\tfound = true\n\t\t\t\tt.conf.DebugInfoDirectories = append(t.conf.DebugInfoDirectories[:i], t.conf.DebugInfoDirectories[i+1:]...)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\treturn fmt.Errorf(\"could not find %q in debug-info-directories\", v[1])\n\t\t}\n\tdefault:\n\t\treturn errors.New(\"wrong argument to \\\"config debug-info-directories\\\"\")\n\t}\n\n\tif t.client != nil {\n\t\tt.client.SetDebugInfoDirectories(t.conf.DebugInfoDirectories)\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "pkg/terminal/disasmprint.go",
    "content": "package terminal\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"io\"\n\t\"path/filepath\"\n\t\"text/tabwriter\"\n\n\t\"github.com/go-delve/delve/service/api\"\n)\n\nfunc disasmPrint(dv api.AsmInstructions, out io.Writer, showHeader bool) {\n\tbw := bufio.NewWriter(out)\n\tdefer bw.Flush()\n\tif len(dv) > 0 && dv[0].Loc.Function != nil && showHeader {\n\t\tfmt.Fprintf(bw, \"TEXT %s(SB) %s\\n\", dv[0].Loc.Function.Name(), dv[0].Loc.File)\n\t}\n\ttw := tabwriter.NewWriter(bw, 1, 8, 1, '\\t', 0)\n\tdefer tw.Flush()\n\tfor _, inst := range dv {\n\t\tatbp := \"\"\n\t\tif inst.Breakpoint {\n\t\t\tatbp = \"*\"\n\t\t}\n\t\tatpc := \"\"\n\t\tif inst.AtPC {\n\t\t\tatpc = \"=>\"\n\t\t}\n\t\tfmt.Fprintf(tw, \"%s\\t%s:%d\\t%#x%s\\t%x\\t%s\\n\", atpc, filepath.Base(inst.Loc.File), inst.Loc.Line, inst.Loc.PC, atbp, inst.Bytes, inst.Text)\n\t}\n}\n"
  },
  {
    "path": "pkg/terminal/docgen.go",
    "content": "package terminal\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\nfunc replaceDocPath(s string) string {\n\tconst docpath = \"Documentation/\"\n\n\ti0 := 0\n\n\tfor {\n\t\tstart := strings.Index(s[i0:], docpath)\n\t\tif start < 0 {\n\t\t\treturn s\n\t\t}\n\t\tstart += i0\n\t\tif start-1 >= 0 && s[start-1] != ' ' {\n\t\t\ti0 = start + len(docpath) + 1\n\t\t\tcontinue\n\t\t}\n\t\tvar end int\n\t\tfor end = start + len(docpath); end < len(s); end++ {\n\t\t\tif s[end] == ' ' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If we captured a trailing dot, backtrack.\n\t\tif s[end-1] == '.' {\n\t\t\tend--\n\t\t}\n\n\t\ttext := s[start:end]\n\t\ts = s[:start] + fmt.Sprintf(\"[%s](//github.com/go-delve/delve/tree/master/%s)\", text, text) + s[end:]\n\t\ti0 = end + 1\n\t}\n}\n\nfunc fixLessThan(s string) string {\n\tv := strings.Split(s, \"\\n\")\n\tfor i := range v {\n\t\tif len(v[i]) == 0 || v[i][0] != '\\t' {\n\t\t\tv[i] = strings.ReplaceAll(v[i], \"<\", \"&lt;\")\n\t\t}\n\t}\n\treturn strings.Join(v, \"\\n\")\n}\n\nfunc (c *Commands) WriteMarkdown(w io.Writer) {\n\tfmt.Fprint(w, \"# Configuration and Command History\\n\\n\")\n\tfmt.Fprint(w, \"If `$XDG_CONFIG_HOME` is set, then configuration and command history files are located in `$XDG_CONFIG_HOME/dlv`. \")\n\tfmt.Fprint(w, \"Otherwise, they are located in `$HOME/.config/dlv` on Linux and `$HOME/.dlv` on other systems.\\n\\n\")\n\tfmt.Fprint(w, \"The configuration file `config.yml` contains all the configurable options and their default values ([config.yml documentation](./config.md)). \")\n\tfmt.Fprint(w, \"The command history is stored in `.dbg_history`.\\n\\n\")\n\n\tfmt.Fprint(w, \"# Commands\\n\")\n\n\tfor _, cgd := range commandGroupDescriptions {\n\t\tfmt.Fprintf(w, \"\\n## %s\\n\\n\", cgd.description)\n\n\t\tfmt.Fprint(w, \"Command | Description\\n\")\n\t\tfmt.Fprint(w, \"--------|------------\\n\")\n\t\tfor _, cmd := range c.cmds {\n\t\t\tif cmd.group != cgd.group {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\th := cmd.helpMsg\n\t\t\tif idx := strings.Index(h, \"\\n\"); idx >= 0 {\n\t\t\t\th = h[:idx]\n\t\t\t}\n\t\t\tfmt.Fprintf(w, \"[%s](#%s) | %s\\n\", cmd.aliases[0], cmd.aliases[0], h)\n\t\t}\n\t\tfmt.Fprint(w, \"\\n\")\n\t}\n\n\tfor _, cmd := range c.cmds {\n\t\tfmt.Fprintf(w, \"## %s\\n%s\\n\\n\", cmd.aliases[0], fixLessThan(replaceDocPath(cmd.helpMsg)))\n\t\tif len(cmd.aliases) > 1 {\n\t\t\tfmt.Fprint(w, \"Aliases:\")\n\t\t\tfor _, alias := range cmd.aliases[1:] {\n\t\t\t\tfmt.Fprintf(w, \" %s\", alias)\n\t\t\t}\n\t\t\tfmt.Fprint(w, \"\\n\")\n\t\t}\n\t\tfmt.Fprint(w, \"\\n\")\n\t}\n}\n"
  },
  {
    "path": "pkg/terminal/groups.go",
    "content": "package terminal\n\ntype commandGroup uint8\n\nconst (\n\totherCmds commandGroup = iota\n\tbreakCmds\n\trunCmds\n\tdataCmds\n\tgoroutineCmds\n\tstackCmds\n)\n\ntype commandGroupDescription struct {\n\tdescription string\n\tgroup       commandGroup\n}\n\nvar commandGroupDescriptions = []commandGroupDescription{\n\t{\"Running the program\", runCmds},\n\t{\"Manipulating breakpoints\", breakCmds},\n\t{\"Viewing program variables and memory\", dataCmds},\n\t{\"Listing and switching between threads and goroutines\", goroutineCmds},\n\t{\"Viewing the call stack and selecting frames\", stackCmds},\n\t{\"Other commands\", otherCmds},\n}\n"
  },
  {
    "path": "pkg/terminal/out.go",
    "content": "package terminal\n\nimport (\n\t\"bufio\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/terminal/colorize\"\n\t\"github.com/mattn/go-isatty\"\n)\n\n// transcriptWriter writes to a pagingWriter and also, optionally, to a\n// buffered file.\ntype transcriptWriter struct {\n\tfileOnly     bool\n\tpw           *pagingWriter\n\tfile         *bufio.Writer\n\tfh           io.Closer\n\tcolorEscapes map[colorize.Style]string\n\taltTabString string\n}\n\nfunc (w *transcriptWriter) Write(p []byte) (nn int, err error) {\n\tif !w.fileOnly {\n\t\tnn, err = w.pw.Write(p)\n\t}\n\tif err == nil {\n\t\tif w.file != nil {\n\t\t\treturn w.file.Write(p)\n\t\t}\n\t}\n\treturn\n}\n\n// ColorizePrint prints to out a syntax highlighted version of the text read from\n// reader, between lines startLine and endLine.\nfunc (w *transcriptWriter) ColorizePrint(path string, reader io.ReadSeeker, startLine, endLine, arrowLine int) error {\n\tvar err error\n\tif !w.fileOnly {\n\t\terr = colorize.Print(w.pw.w, path, reader, startLine, endLine, arrowLine, w.colorEscapes, w.altTabString)\n\t}\n\tif err == nil {\n\t\tif w.file != nil {\n\t\t\treader.Seek(0, io.SeekStart)\n\t\t\treturn colorize.Print(w.file, path, reader, startLine, endLine, arrowLine, nil, w.altTabString)\n\t\t}\n\t}\n\treturn err\n}\n\n// Echo outputs str only to the optional transcript file.\nfunc (w *transcriptWriter) Echo(str string) {\n\tif w.file != nil {\n\t\tw.file.WriteString(str)\n\t}\n}\n\n// Flush flushes the optional transcript file.\nfunc (w *transcriptWriter) Flush() {\n\tif w.file != nil {\n\t\tw.file.Flush()\n\t}\n}\n\n// CloseTranscript closes the optional transcript file.\nfunc (w *transcriptWriter) CloseTranscript() error {\n\tif w.file == nil {\n\t\treturn nil\n\t}\n\tw.file.Flush()\n\tw.fileOnly = false\n\terr := w.fh.Close()\n\tw.file = nil\n\tw.fh = nil\n\treturn err\n}\n\n// TranscribeTo starts transcribing the output to the specified file. If\n// fileOnly is true the output will only go to the file, output to the\n// io.Writer will be suppressed.\nfunc (w *transcriptWriter) TranscribeTo(fh io.WriteCloser, fileOnly bool) {\n\tif w.file == nil {\n\t\tw.CloseTranscript()\n\t}\n\tw.fh = fh\n\tw.file = bufio.NewWriter(fh)\n\tw.fileOnly = fileOnly\n}\n\n// pagingWriter writes to w. If PageMaybe is called, after a large amount of\n// text has been written to w it will pipe the output to a pager instead.\ntype pagingWriter struct {\n\tmode     pagingWriterMode\n\tw        io.Writer\n\tbuf      []byte\n\tcmd      *exec.Cmd\n\tcmdStdin io.WriteCloser\n\tpager    string\n\tlastnl   bool\n\tcancel   func()\n\n\tlines, columns int\n}\n\ntype pagingWriterMode uint8\n\nconst (\n\tpagingWriterNormal pagingWriterMode = iota\n\tpagingWriterMaybe\n\tpagingWriterPaging\n)\n\nfunc (w *pagingWriter) Write(p []byte) (nn int, err error) {\n\tswitch w.mode {\n\tdefault:\n\t\tfallthrough\n\tcase pagingWriterNormal:\n\t\treturn w.w.Write(p)\n\tcase pagingWriterMaybe:\n\t\tw.buf = append(w.buf, p...)\n\t\tif w.largeOutput() {\n\t\t\tw.cmd = exec.Command(w.pager)\n\t\t\tw.cmd.Stdout = os.Stdout\n\t\t\tw.cmd.Stderr = os.Stderr\n\n\t\t\tvar err1, err2 error\n\t\t\tw.cmdStdin, err1 = w.cmd.StdinPipe()\n\t\t\terr2 = w.cmd.Start()\n\t\t\tif err1 != nil || err2 != nil {\n\t\t\t\tw.cmd = nil\n\t\t\t\tw.mode = pagingWriterNormal\n\t\t\t\treturn w.w.Write(p)\n\t\t\t}\n\t\t\tif !w.lastnl {\n\t\t\t\tw.w.Write([]byte(\"\\n\"))\n\t\t\t}\n\t\t\tw.w.Write([]byte(\"Sending output to pager...\\n\"))\n\t\t\tw.cmdStdin.Write(w.buf)\n\t\t\tw.buf = nil\n\t\t\tw.mode = pagingWriterPaging\n\t\t\treturn len(p), nil\n\t\t} else {\n\t\t\tif len(p) > 0 {\n\t\t\t\tw.lastnl = p[len(p)-1] == '\\n'\n\t\t\t}\n\t\t\treturn w.w.Write(p)\n\t\t}\n\tcase pagingWriterPaging:\n\t\tn, err := w.cmdStdin.Write(p)\n\t\tif err != nil && w.cancel != nil {\n\t\t\tw.cancel()\n\t\t\tw.cancel = nil\n\t\t}\n\t\treturn n, err\n\t}\n}\n\n// Reset returns the pagingWriter to its normal mode.\nfunc (w *pagingWriter) Reset() {\n\tif w.mode == pagingWriterNormal {\n\t\treturn\n\t}\n\tw.mode = pagingWriterNormal\n\tw.buf = nil\n\tif w.cmd != nil {\n\t\tw.cmdStdin.Close()\n\t\tw.cmd.Wait()\n\t\tw.cmd = nil\n\t\tw.cmdStdin = nil\n\t}\n}\n\n// PageMaybe configures pagingWriter to cache the output, after a large\n// amount of text has been written to w it will automatically switch to\n// piping output to a pager.\n// The cancel function is called the first time a write to the pager errors.\nfunc (w *pagingWriter) PageMaybe(cancel func()) {\n\tif w.mode != pagingWriterNormal {\n\t\treturn\n\t}\n\tdlvpager := os.Getenv(\"DELVE_PAGER\")\n\tif dlvpager == \"\" {\n\t\tif stdout, _ := w.w.(*os.File); stdout != nil {\n\t\t\tif !isatty.IsTerminal(stdout.Fd()) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\tif strings.ToLower(os.Getenv(\"TERM\")) == \"dumb\" {\n\t\t\treturn\n\t\t}\n\t}\n\tw.mode = pagingWriterMaybe\n\tw.pager = dlvpager\n\tif w.pager == \"\" {\n\t\tw.pager = os.Getenv(\"PAGER\")\n\t\tif w.pager == \"\" {\n\t\t\tw.pager = \"more\"\n\t\t}\n\t}\n\tw.lastnl = true\n\tw.cancel = cancel\n\tw.getWindowSize()\n}\n\nfunc (w *pagingWriter) largeOutput() bool {\n\tlines := 0\n\tlineStart := 0\n\tfor i := range w.buf {\n\t\tif i-lineStart > w.columns || w.buf[i] == '\\n' {\n\t\t\tlineStart = i\n\t\t\tlines++\n\t\t\tif lines > w.lines {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "pkg/terminal/out_unix.go",
    "content": "//go:build linux || darwin || freebsd\n\npackage terminal\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\ntype winSize struct {\n\trow, col       uint16\n\txpixel, ypixel uint16\n}\n\nfunc (w *pagingWriter) getWindowSize() {\n\tvar ws winSize\n\tok, _, _ := syscall.Syscall(syscall.SYS_IOCTL, uintptr(syscall.Stdout), syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws)))\n\tif int(ok) < 0 {\n\t\tw.mode = pagingWriterNormal\n\t\treturn\n\t}\n\tw.lines = int(ws.row)\n\tw.columns = int(ws.col)\n}\n"
  },
  {
    "path": "pkg/terminal/out_windows.go",
    "content": "package terminal\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tkernel32                       = syscall.NewLazyDLL(\"kernel32.dll\")\n\tprocGetStdHandle               = kernel32.NewProc(\"GetStdHandle\")\n\tprocGetConsoleScreenBufferInfo = kernel32.NewProc(\"GetConsoleScreenBufferInfo\")\n)\n\ntype coord struct {\n\tx, y int16\n}\n\ntype smallRect struct {\n\tleft, top, right, bottom int16\n}\n\ntype consoleScreenBufferInfo struct {\n\tdwSize              coord\n\tdwCursorPosition    coord\n\twAttributes         int16\n\tsrWindow            smallRect\n\tdwMaximumWindowSize coord\n}\n\nfunc (w *pagingWriter) getWindowSize() {\n\thout, _, err := procGetStdHandle.Call(uintptr(uint32(-12 & 0xFFFFFFFF))) // stdout handle\n\tif err != syscall.Errno(0) {\n\t\tw.mode = pagingWriterNormal\n\t\treturn\n\t}\n\tvar sbi consoleScreenBufferInfo\n\t_, _, err = procGetConsoleScreenBufferInfo.Call(uintptr(hout), uintptr(unsafe.Pointer(&sbi)))\n\tif err != syscall.Errno(0) {\n\t\tw.mode = pagingWriterNormal\n\t\treturn\n\t}\n\tw.columns = int(sbi.srWindow.right - sbi.srWindow.left + 1)\n\tw.lines = int(sbi.srWindow.bottom - sbi.srWindow.top + 1)\n}\n"
  },
  {
    "path": "pkg/terminal/starbind/conv.go",
    "content": "package starbind\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"strconv\"\n\n\t\"go.starlark.net/starlark\"\n\n\t\"github.com/go-delve/delve/service/api\"\n)\n\n// autoLoadConfig is the load configuration used to automatically load more from a variable\nvar autoLoadConfig = api.LoadConfig{MaxVariableRecurse: 1, MaxStringLen: 1024, MaxArrayValues: 64, MaxStructFields: -1}\n\n// interfaceToStarlarkValue converts an interface{} variable (produced by\n// decoding JSON) into a starlark.Value.\nfunc (env *Env) interfaceToStarlarkValue(v any) starlark.Value {\n\tswitch v := v.(type) {\n\tcase bool:\n\t\treturn starlark.Bool(v)\n\tcase uint8:\n\t\treturn starlark.MakeUint64(uint64(v))\n\tcase uint16:\n\t\treturn starlark.MakeUint64(uint64(v))\n\tcase uint32:\n\t\treturn starlark.MakeUint64(uint64(v))\n\tcase uint64:\n\t\treturn starlark.MakeUint64(v)\n\tcase uintptr:\n\t\treturn starlark.MakeUint64(uint64(v))\n\tcase uint:\n\t\treturn starlark.MakeUint64(uint64(v))\n\tcase int8:\n\t\treturn starlark.MakeInt64(int64(v))\n\tcase int16:\n\t\treturn starlark.MakeInt64(int64(v))\n\tcase int32:\n\t\treturn starlark.MakeInt64(int64(v))\n\tcase int64:\n\t\treturn starlark.MakeInt64(v)\n\tcase int:\n\t\treturn starlark.MakeInt64(int64(v))\n\tcase string:\n\t\treturn starlark.String(v)\n\tcase map[string]uint64:\n\t\t// this is the only map type that we use in the api, if we ever want to\n\t\t// add more maps to the api a more general approach will be necessary.\n\t\tvar r starlark.Dict\n\t\tfor k, v := range v {\n\t\t\tr.SetKey(starlark.String(k), starlark.MakeUint64(v))\n\t\t}\n\t\treturn &r\n\tcase nil:\n\t\treturn starlark.None\n\tcase error:\n\t\treturn starlark.String(v.Error())\n\tcase reflect.Value:\n\t\tif v.Type().Kind() == reflect.Struct {\n\t\t\treturn structAsStarlarkValue{v: v, env: env}\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(v.Interface())\n\tdefault:\n\t\tvval := reflect.ValueOf(v)\n\t\tswitch vval.Type().Kind() {\n\t\tcase reflect.Ptr:\n\t\t\tif vval.IsNil() {\n\t\t\t\treturn starlark.None\n\t\t\t}\n\t\t\tvval = vval.Elem()\n\t\t\tif vval.Type().Kind() == reflect.Struct {\n\t\t\t\treturn structAsStarlarkValue{v: vval, env: env}\n\t\t\t}\n\t\tcase reflect.Struct:\n\t\t\treturn structAsStarlarkValue{v: vval, env: env}\n\t\tcase reflect.Slice:\n\t\t\treturn sliceAsStarlarkValue{v: vval, env: env}\n\t\t}\n\t\treturn starlark.String(fmt.Sprintf(\"%v\", v))\n\t}\n}\n\n// sliceAsStarlarkValue converts a reflect.Value containing a slice\n// into a starlark value.\n// The public methods of sliceAsStarlarkValue implement the Indexable and\n// Sequence starlark interfaces.\ntype sliceAsStarlarkValue struct {\n\tstarlarkUnhashable\n\tv   reflect.Value\n\tenv *Env\n}\n\nvar _ starlark.Indexable = sliceAsStarlarkValue{}\nvar _ starlark.Sequence = sliceAsStarlarkValue{}\n\nfunc (v sliceAsStarlarkValue) String() string {\n\tif x, ok := v.v.Interface().([]byte); ok {\n\t\treturn string(x)\n\t}\n\treturn fmt.Sprintf(\"%#v\", v.v)\n}\n\nfunc (v sliceAsStarlarkValue) Truth() starlark.Bool {\n\treturn v.v.Len() != 0\n}\n\nfunc (v sliceAsStarlarkValue) Type() string {\n\treturn v.v.Type().String()\n}\n\nfunc (v sliceAsStarlarkValue) Index(i int) starlark.Value {\n\tif i >= v.v.Len() {\n\t\treturn nil\n\t}\n\treturn v.env.interfaceToStarlarkValue(v.v.Index(i).Interface())\n}\n\nfunc (v sliceAsStarlarkValue) Len() int {\n\treturn v.v.Len()\n}\n\nfunc (v sliceAsStarlarkValue) Iterate() starlark.Iterator {\n\treturn &sliceAsStarlarkValueIterator{0, v.v, v.env}\n}\n\ntype sliceAsStarlarkValueIterator struct {\n\tcur int\n\tv   reflect.Value\n\tenv *Env\n}\n\nfunc (it *sliceAsStarlarkValueIterator) Done() {\n}\n\nfunc (it *sliceAsStarlarkValueIterator) Next(p *starlark.Value) bool {\n\tif it.cur >= it.v.Len() {\n\t\treturn false\n\t}\n\t*p = it.env.interfaceToStarlarkValue(it.v.Index(it.cur).Interface())\n\tit.cur++\n\treturn true\n}\n\n// structAsStarlarkValue converts any Go struct into a starlark.Value.\n// The public methods of structAsStarlarkValue implement the\n// starlark.HasAttrs interface.\ntype structAsStarlarkValue struct {\n\tstarlarkUnhashable\n\tv   reflect.Value\n\tenv *Env\n}\n\nvar _ starlark.HasAttrs = structAsStarlarkValue{}\n\nfunc (v structAsStarlarkValue) String() string {\n\tif vv, ok := v.v.Interface().(api.Variable); ok {\n\t\treturn fmt.Sprintf(\"Variable<%s>\", vv.SinglelineString())\n\t}\n\treturn fmt.Sprintf(\"%#v\", v.v)\n}\n\nfunc (v structAsStarlarkValue) Truth() starlark.Bool {\n\treturn true\n}\n\nfunc (v structAsStarlarkValue) Type() string {\n\tif vv, ok := v.v.Interface().(api.Variable); ok {\n\t\treturn fmt.Sprintf(\"Variable<%s>\", vv.Type)\n\t}\n\treturn v.v.Type().String()\n}\n\nfunc (v structAsStarlarkValue) Attr(name string) (starlark.Value, error) {\n\tif r, err := v.valueAttr(name); err != nil || r != nil {\n\t\treturn r, err\n\t}\n\tr := v.v.FieldByName(name)\n\tif !r.IsValid() {\n\t\treturn starlark.None, starlark.NoSuchAttrError(fmt.Sprintf(\"no field named %q in %T\", name, v.v.Interface()))\n\t}\n\treturn v.env.interfaceToStarlarkValue(r), nil\n}\n\nfunc (v structAsStarlarkValue) SetField(name string, value starlark.Value) (err error) {\n\tdefer func() {\n\t\t// reflect.Value.SetInt, SetFloat, etc panic\n\t\tierr := recover()\n\t\tif ierr == nil {\n\t\t\treturn\n\t\t}\n\t\terr, _ = ierr.(error)\n\t\tif err == nil {\n\t\t\tpanic(ierr)\n\t\t}\n\t\terr = fmt.Errorf(\"can not assign to %T.%q: %v\", v.v.Interface(), name, err)\n\t}()\n\tif r, err := v.valueAttr(name); err != nil || r != nil {\n\t\treturn starlark.NoSuchAttrError(fmt.Sprintf(\"no field named %s in %T\", name, v.v.Interface()))\n\t}\n\tr := v.v.FieldByName(name)\n\tif !r.IsValid() {\n\t\treturn starlark.NoSuchAttrError(fmt.Sprintf(\"no field named %q in %T\", name, v.v.Interface()))\n\t}\n\tswitch value := value.(type) {\n\tcase starlark.Int:\n\t\tn, ok := value.Int64()\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"can not assign big integer to %T.%q\", v.v.Interface(), name)\n\t\t}\n\t\tr.SetInt(n)\n\tcase starlark.Float:\n\t\tr.SetFloat(float64(value))\n\tcase starlark.String:\n\t\tr.SetString(value.GoString())\n\tcase starlark.Bool:\n\t\tr.SetBool(bool(value))\n\tdefault:\n\t\treturn fmt.Errorf(\"can not assign value of type %T to %T.%q\", value, v.v.Interface(), name)\n\t}\n\treturn nil\n}\n\nfunc (v structAsStarlarkValue) valueAttr(name string) (starlark.Value, error) {\n\tif v.v.Type().Name() != \"Variable\" || (name != \"Value\" && name != \"Expr\") {\n\t\treturn nil, nil\n\t}\n\tv2 := v.v.Interface().(api.Variable)\n\n\tif name == \"Expr\" {\n\t\treturn starlark.String(varAddrExpr(&v2)), nil\n\t}\n\n\treturn v.env.variableValueToStarlarkValue(&v2, true)\n}\n\nfunc varAddrExpr(v *api.Variable) string {\n\treturn fmt.Sprintf(\"(*(*%q)(%#x))\", v.Type, v.Addr)\n}\n\nfunc (env *Env) variableValueToStarlarkValue(v *api.Variable, top bool) (starlark.Value, error) {\n\tif !top && v.Addr == 0 && v.Value == \"\" {\n\t\treturn starlark.None, nil\n\t}\n\n\tswitch v.Kind {\n\tcase reflect.Struct:\n\t\tif v.Len != 0 && len(v.Children) == 0 {\n\t\t\treturn starlark.None, errors.New(\"value not loaded\")\n\t\t}\n\t\treturn structVariableAsStarlarkValue{v: v, env: env}, nil\n\tcase reflect.Slice, reflect.Array:\n\t\tif v.Len != 0 && len(v.Children) == 0 {\n\t\t\treturn starlark.None, errors.New(\"value not loaded\")\n\t\t}\n\t\treturn sliceVariableAsStarlarkValue{v: v, env: env}, nil\n\tcase reflect.Map:\n\t\tif v.Len != 0 && len(v.Children) == 0 {\n\t\t\treturn starlark.None, errors.New(\"value not loaded\")\n\t\t}\n\t\treturn mapVariableAsStarlarkValue{v: v, env: env}, nil\n\tcase reflect.String:\n\t\treturn starlark.String(v.Value), nil\n\tcase reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int:\n\t\tn, _ := strconv.ParseInt(api.ExtractIntValue(v.Value), 0, 64)\n\t\treturn starlark.MakeInt64(n), nil\n\tcase reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint, reflect.Uintptr:\n\t\tn, _ := strconv.ParseUint(api.ExtractIntValue(v.Value), 0, 64)\n\t\treturn starlark.MakeUint64(n), nil\n\tcase reflect.Bool:\n\t\tn, _ := strconv.ParseBool(v.Value)\n\t\treturn starlark.Bool(n), nil\n\tcase reflect.Float32, reflect.Float64:\n\t\tswitch v.Value {\n\t\tcase \"+Inf\":\n\t\t\treturn starlark.Float(math.Inf(+1)), nil\n\t\tcase \"-Inf\":\n\t\t\treturn starlark.Float(math.Inf(-1)), nil\n\t\tcase \"NaN\":\n\t\t\treturn starlark.Float(math.NaN()), nil\n\t\tdefault:\n\t\t\tn, _ := strconv.ParseFloat(v.Value, 64)\n\t\t\treturn starlark.Float(n), nil\n\t\t}\n\tcase reflect.Ptr, reflect.Interface:\n\t\tif len(v.Children) > 0 {\n\t\t\tv.Children[0] = *env.autoLoad(varAddrExpr(&v.Children[0]))\n\t\t}\n\t\treturn ptrVariableAsStarlarkValue{v: v, env: env}, nil\n\t}\n\treturn nil, nil\n}\n\nfunc (env *Env) autoLoad(expr string) *api.Variable {\n\tv, err := env.ctx.Client().EvalVariable(api.EvalScope{GoroutineID: -1}, expr, autoLoadConfig)\n\tif err != nil {\n\t\treturn &api.Variable{Unreadable: err.Error()}\n\t}\n\treturn v\n}\n\nfunc (v structAsStarlarkValue) AttrNames() []string {\n\ttyp := v.v.Type()\n\tr := make([]string, 0, typ.NumField()+1)\n\tfor i := 0; i < typ.NumField(); i++ {\n\t\tr = append(r, typ.Field(i).Name)\n\t}\n\treturn r\n}\n\n// structVariableAsStarlarkValue converts an api.Variable representing a\n// struct variable (in the target process) into a starlark.Value.\n// The public methods of structVariableAsStarlarkValue implement the\n// starlark.HasAttrs and starlark.Mapping interfaces.\ntype structVariableAsStarlarkValue struct {\n\tstarlarkUnhashable\n\tv   *api.Variable\n\tenv *Env\n}\n\nvar _ starlark.HasAttrs = structVariableAsStarlarkValue{}\nvar _ starlark.Mapping = structVariableAsStarlarkValue{}\n\nfunc (v structVariableAsStarlarkValue) String() string {\n\treturn v.v.SinglelineString()\n}\n\nfunc (v structVariableAsStarlarkValue) Truth() starlark.Bool {\n\treturn true\n}\n\nfunc (v structVariableAsStarlarkValue) Type() string {\n\treturn v.v.Type\n}\n\nfunc (v structVariableAsStarlarkValue) Attr(name string) (starlark.Value, error) {\n\tfor i := range v.v.Children {\n\t\tif v.v.Children[i].Name == name {\n\t\t\tv2 := v.env.autoLoad(varAddrExpr(&v.v.Children[i]))\n\t\t\treturn v.env.variableValueToStarlarkValue(v2, false)\n\t\t}\n\t}\n\treturn nil, nil // no such field or method\n}\n\nfunc (v structVariableAsStarlarkValue) AttrNames() []string {\n\tr := make([]string, len(v.v.Children))\n\tfor i := range v.v.Children {\n\t\tr[i] = v.v.Children[i].Name\n\t}\n\treturn r\n}\n\nfunc (v structVariableAsStarlarkValue) Get(key starlark.Value) (starlark.Value, bool, error) {\n\tskey, ok := key.(starlark.String)\n\tif !ok {\n\t\treturn starlark.None, false, nil\n\t}\n\tr, err := v.Attr(string(skey))\n\tif r == nil && err == nil {\n\t\treturn starlark.None, false, nil\n\t}\n\tif err != nil {\n\t\treturn starlark.None, false, err\n\t}\n\treturn r, true, nil\n}\n\ntype sliceVariableAsStarlarkValue struct {\n\tstarlarkUnhashable\n\tv   *api.Variable\n\tenv *Env\n}\n\nvar _ starlark.Indexable = sliceVariableAsStarlarkValue{}\nvar _ starlark.Sequence = sliceVariableAsStarlarkValue{}\n\nfunc (v sliceVariableAsStarlarkValue) String() string {\n\treturn v.v.SinglelineString()\n}\n\nfunc (v sliceVariableAsStarlarkValue) Truth() starlark.Bool {\n\treturn v.v.Len != 0\n}\n\nfunc (v sliceVariableAsStarlarkValue) Type() string {\n\treturn v.v.Type\n}\n\nfunc (v sliceVariableAsStarlarkValue) Index(i int) starlark.Value {\n\tif i >= v.Len() {\n\t\treturn nil\n\t}\n\tv2 := v.env.autoLoad(fmt.Sprintf(\"%s[%d]\", varAddrExpr(v.v), i))\n\tr, err := v.env.variableValueToStarlarkValue(v2, false)\n\tif err != nil {\n\t\treturn starlark.String(err.Error())\n\t}\n\treturn r\n}\n\nfunc (v sliceVariableAsStarlarkValue) Len() int {\n\treturn int(v.v.Len)\n}\n\nfunc (v sliceVariableAsStarlarkValue) Iterate() starlark.Iterator {\n\treturn &sliceVariableAsStarlarkValueIterator{0, v.v, v.env}\n}\n\ntype sliceVariableAsStarlarkValueIterator struct {\n\tcur int64\n\tv   *api.Variable\n\tenv *Env\n}\n\nfunc (it *sliceVariableAsStarlarkValueIterator) Done() {\n}\n\nfunc (it *sliceVariableAsStarlarkValueIterator) Next(p *starlark.Value) bool {\n\tif it.cur >= it.v.Len {\n\t\treturn false\n\t}\n\ts := sliceVariableAsStarlarkValue{v: it.v, env: it.env}\n\t*p = s.Index(int(it.cur))\n\tit.cur++\n\treturn true\n}\n\ntype ptrVariableAsStarlarkValue struct {\n\tstarlarkUnhashable\n\tv   *api.Variable\n\tenv *Env\n}\n\nvar _ starlark.HasAttrs = ptrVariableAsStarlarkValue{}\nvar _ starlark.Mapping = ptrVariableAsStarlarkValue{}\n\nfunc (v ptrVariableAsStarlarkValue) String() string {\n\treturn v.v.SinglelineString()\n}\n\nfunc (v ptrVariableAsStarlarkValue) Truth() starlark.Bool {\n\treturn true\n}\n\nfunc (v ptrVariableAsStarlarkValue) Type() string {\n\treturn v.v.Type\n}\n\nfunc (v ptrVariableAsStarlarkValue) Attr(name string) (starlark.Value, error) {\n\tif len(v.v.Children) == 0 {\n\t\treturn nil, nil // no such field or method\n\t}\n\tif v.v.Children[0].Kind == reflect.Struct {\n\t\t// autodereference pointers to structs\n\t\tx := structVariableAsStarlarkValue{v: &v.v.Children[0], env: v.env}\n\t\treturn x.Attr(name)\n\t} else if v.v.Kind == reflect.Interface && v.v.Children[0].Kind == reflect.Ptr {\n\t\t// allow double-autodereference for iface to ptr to struct\n\t\tvchild := &v.v.Children[0]\n\t\tif len(vchild.Children) > 0 {\n\t\t\tvchild.Children[0] = *v.env.autoLoad(varAddrExpr(&vchild.Children[0]))\n\t\t}\n\t\tv2 := ptrVariableAsStarlarkValue{v: vchild, env: v.env}\n\t\treturn v2.Attr(name)\n\t}\n\n\treturn nil, nil\n}\n\nfunc (v ptrVariableAsStarlarkValue) AttrNames() []string {\n\tif len(v.v.Children) == 0 {\n\t\t// The pointer variable was not loaded; we don't know the field names.\n\t\treturn nil\n\t}\n\tif v.v.Children[0].Kind != reflect.Struct {\n\t\treturn nil\n\t}\n\t// autodereference: present the field names of the pointed-to struct as the\n\t// fields of this pointer variable.\n\tx := structVariableAsStarlarkValue{v: &v.v.Children[0], env: v.env}\n\treturn x.AttrNames()\n}\n\nfunc (v ptrVariableAsStarlarkValue) Get(key starlark.Value) (starlark.Value, bool, error) {\n\tif ikey, ok := key.(starlark.Int); ok {\n\t\tif len(v.v.Children) == 0 {\n\t\t\treturn starlark.None, true, nil\n\t\t}\n\t\tif idx, _ := ikey.Int64(); idx == 0 {\n\t\t\tr, err := v.env.variableValueToStarlarkValue(&v.v.Children[0], false)\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.String(err.Error()), true, nil\n\t\t\t}\n\t\t\treturn r, true, nil\n\t\t}\n\t\treturn starlark.None, false, nil\n\t}\n\n\tif len(v.v.Children) == 0 || v.v.Children[0].Kind != reflect.Struct {\n\t\treturn starlark.None, false, nil\n\t}\n\t// autodereference\n\tx := structVariableAsStarlarkValue{v: &v.v.Children[0], env: v.env}\n\treturn x.Get(key)\n}\n\ntype mapVariableAsStarlarkValue struct {\n\tstarlarkUnhashable\n\tv   *api.Variable\n\tenv *Env\n}\n\nvar _ starlark.IterableMapping = mapVariableAsStarlarkValue{}\n\nfunc (v mapVariableAsStarlarkValue) String() string {\n\treturn v.v.SinglelineString()\n}\n\nfunc (v mapVariableAsStarlarkValue) Truth() starlark.Bool {\n\treturn true\n}\n\nfunc (v mapVariableAsStarlarkValue) Type() string {\n\treturn v.v.Type\n}\n\nfunc (v mapVariableAsStarlarkValue) Get(key starlark.Value) (starlark.Value, bool, error) {\n\tvar keyExpr string\n\tswitch key := key.(type) {\n\tcase starlark.Int:\n\t\tkeyExpr = key.String()\n\tcase starlark.Float:\n\t\tkeyExpr = fmt.Sprintf(\"%g\", float64(key))\n\tcase starlark.String:\n\t\tkeyExpr = fmt.Sprintf(\"%q\", string(key))\n\tcase starlark.Bool:\n\t\tkeyExpr = fmt.Sprintf(\"%v\", bool(key))\n\tcase structVariableAsStarlarkValue:\n\t\tkeyExpr = varAddrExpr(key.v)\n\tdefault:\n\t\treturn starlark.None, false, fmt.Errorf(\"key type not supported %T\", key)\n\t}\n\n\tv2 := v.env.autoLoad(fmt.Sprintf(\"%s[%s]\", varAddrExpr(v.v), keyExpr))\n\tr, err := v.env.variableValueToStarlarkValue(v2, false)\n\tif err != nil {\n\t\tif err.Error() == \"key not found\" {\n\t\t\treturn starlark.None, false, nil\n\t\t}\n\t\treturn starlark.None, false, err\n\t}\n\treturn r, true, nil\n}\n\nfunc (v mapVariableAsStarlarkValue) Items() []starlark.Tuple {\n\tr := make([]starlark.Tuple, 0, len(v.v.Children)/2)\n\tfor i := 0; i < len(v.v.Children); i += 2 {\n\t\tr = append(r, mapStarlarkTupleAt(v.v, v.env, i))\n\t}\n\treturn r\n}\n\nfunc mapStarlarkTupleAt(v *api.Variable, env *Env, i int) starlark.Tuple {\n\tkeyv := env.autoLoad(varAddrExpr(&v.Children[i]))\n\tkey, err := env.variableValueToStarlarkValue(keyv, false)\n\tif err != nil {\n\t\tkey = starlark.None\n\t}\n\tvalv := env.autoLoad(varAddrExpr(&v.Children[i+1]))\n\tval, err := env.variableValueToStarlarkValue(valv, false)\n\tif err != nil {\n\t\tval = starlark.None\n\t}\n\treturn starlark.Tuple{key, val}\n}\n\nfunc (v mapVariableAsStarlarkValue) Iterate() starlark.Iterator {\n\treturn &mapVariableAsStarlarkValueIterator{0, v.v, v.env}\n}\n\ntype mapVariableAsStarlarkValueIterator struct {\n\tcur int\n\tv   *api.Variable\n\tenv *Env\n}\n\nfunc (it *mapVariableAsStarlarkValueIterator) Done() {\n}\n\nfunc (it *mapVariableAsStarlarkValueIterator) Next(p *starlark.Value) bool {\n\tif it.cur >= 2*int(it.v.Len) {\n\t\treturn false\n\t}\n\tif it.cur >= len(it.v.Children) {\n\t\tv2 := it.env.autoLoad(fmt.Sprintf(\"%s[%d:]\", varAddrExpr(it.v), len(it.v.Children)/2))\n\t\tit.v.Children = append(it.v.Children, v2.Children...)\n\t}\n\tif it.cur >= len(it.v.Children) {\n\t\treturn false\n\t}\n\n\tkeyv := it.env.autoLoad(varAddrExpr(&it.v.Children[it.cur]))\n\tkey, err := it.env.variableValueToStarlarkValue(keyv, false)\n\tif err != nil {\n\t\tkey = starlark.None\n\t}\n\t*p = key\n\n\tit.cur += 2\n\treturn true\n}\n\n// unmarshalStarlarkValue unmarshals a starlark.Value 'val' into a Go variable 'dst'.\n// This works similarly to encoding/json.Unmarshal and similar functions,\n// but instead of getting its input from a byte buffer, it uses a\n// starlark.Value.\nfunc unmarshalStarlarkValue(val starlark.Value, dst any, path string) error {\n\treturn unmarshalStarlarkValueIntl(val, reflect.ValueOf(dst), path)\n}\n\nfunc unmarshalStarlarkValueIntl(val starlark.Value, dst reflect.Value, path string) (err error) {\n\tdefer func() {\n\t\t// catches reflect panics\n\t\tierr := recover()\n\t\tif ierr != nil {\n\t\t\terr = fmt.Errorf(\"error setting argument %q to %s: %v\", path, val, ierr)\n\t\t}\n\t}()\n\n\tconverr := func(args ...string) error {\n\t\tif len(args) > 0 {\n\t\t\treturn fmt.Errorf(\"error setting argument %q: can not convert %s to %s: %s\", path, val, dst.Type().String(), args[0])\n\t\t}\n\t\treturn fmt.Errorf(\"error setting argument %q: can not convert %s to %s\", path, val, dst.Type().String())\n\t}\n\n\tif _, isnone := val.(starlark.NoneType); isnone {\n\t\treturn nil\n\t}\n\n\tfor dst.Kind() == reflect.Ptr {\n\t\tif dst.IsNil() {\n\t\t\tdst.Set(reflect.New(dst.Type().Elem()))\n\t\t}\n\t\tdst = dst.Elem()\n\t}\n\n\tswitch val := val.(type) {\n\tcase starlark.Bool:\n\t\tdst.SetBool(bool(val))\n\tcase starlark.Int:\n\t\tswitch dst.Kind() {\n\t\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\tn, ok := val.Uint64()\n\t\t\tif !ok {\n\t\t\t\treturn converr()\n\t\t\t}\n\t\t\tdst.SetUint(n)\n\t\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t\tn, ok := val.Int64()\n\t\t\tif !ok {\n\t\t\t\treturn converr()\n\t\t\t}\n\t\t\tdst.SetInt(n)\n\t\tdefault:\n\t\t\treturn converr()\n\t\t}\n\tcase starlark.Float:\n\t\tdst.SetFloat(float64(val))\n\tcase starlark.String:\n\t\tdst.SetString(string(val))\n\tcase *starlark.List:\n\t\tif dst.Kind() != reflect.Slice {\n\t\t\treturn converr()\n\t\t}\n\t\tdst.Set(reflect.MakeSlice(dst.Type(), val.Len(), val.Len()))\n\t\tfor i := 0; i < val.Len(); i++ {\n\t\t\tcur := dst.Index(i).Addr()\n\t\t\terr := unmarshalStarlarkValueIntl(val.Index(i), cur, path)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\tcase *starlark.Dict:\n\t\tif dst.Kind() != reflect.Struct {\n\t\t\treturn converr()\n\t\t}\n\t\tfor _, k := range val.Keys() {\n\t\t\tif _, ok := k.(starlark.String); !ok {\n\t\t\t\treturn converr(fmt.Sprintf(\"non-string key %q\", k.String()))\n\t\t\t}\n\t\t\tfieldName := string(k.(starlark.String))\n\t\t\tdstfield := dst.FieldByName(fieldName)\n\t\t\tif !dstfield.IsValid() {\n\t\t\t\treturn converr(fmt.Sprintf(\"unknown field %s\", fieldName))\n\t\t\t}\n\t\t\tvalfield, _, _ := val.Get(starlark.String(fieldName))\n\t\t\terr := unmarshalStarlarkValueIntl(valfield, dstfield, path+\".\"+fieldName)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\tcase structAsStarlarkValue:\n\t\trv := val.v\n\t\tif rv.Kind() == reflect.Ptr {\n\t\t\trv = rv.Elem()\n\t\t}\n\t\tdst.Set(rv)\n\tdefault:\n\t\treturn converr()\n\t}\n\treturn nil\n}\n\nvar _ starlark.HasAttrs = starlarkTargetObject{}\n\ntype starlarkTargetObject struct {\n\tstarlarkUnhashable\n\tenv *Env\n}\n\nfunc (starlarkTargetObject) String() string {\n\treturn \"<target variables>\"\n}\n\nfunc (starlarkTargetObject) Truth() starlark.Bool {\n\treturn true\n}\n\nfunc (starlarkTargetObject) Type() string {\n\treturn \"<target variables>\"\n}\n\nfunc (tgt starlarkTargetObject) AttrNames() []string {\n\treturn nil\n}\n\nfunc (tgt starlarkTargetObject) Attr(name string) (starlark.Value, error) {\n\tenv := tgt.env\n\tv, err := env.ctx.Client().EvalVariable(env.ctx.Scope(), name, env.ctx.LoadConfig())\n\tif err != nil {\n\t\treturn starlark.None, fmt.Errorf(\"could not find variable %q: %v\", name, err)\n\t}\n\treturn env.variableValueToStarlarkValue(v, true)\n}\n\ntype starlarkUnhashable struct {\n}\n\nfunc (starlarkUnhashable) Freeze() {\n}\n\nfunc (starlarkUnhashable) Hash() (uint32, error) {\n\treturn 0, errors.New(\"not hashable\")\n}\n"
  },
  {
    "path": "pkg/terminal/starbind/conv_test.go",
    "content": "package starbind\n\nimport (\n\t\"testing\"\n\n\t\"go.starlark.net/starlark\"\n)\n\nfunc TestConv(t *testing.T) {\n\tscript := `\n# A list global that we'll unmarshal into a slice.\nx = [1,2]\n`\n\tglobals, err := execFileOptions(nil, &starlark.Thread{}, \"test.star\", script, nil)\n\tstarlarkVal, ok := globals[\"x\"]\n\tif !ok {\n\t\tt.Fatal(\"missing global 'x'\")\n\t}\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tvar x []int\n\terr = unmarshalStarlarkValue(starlarkVal, &x, \"x\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif len(x) != 2 || x[0] != 1 || x[1] != 2 {\n\t\tt.Fatalf(\"expected [1 2], got: %v\", x)\n\t}\n}\n"
  },
  {
    "path": "pkg/terminal/starbind/repl.go",
    "content": "package starbind\n\n// Code in this file is derived from go.starlark.net/repl/repl.go\n// Which is licensed under the following copyright:\n//\n// Copyright (c) 2017 The Bazel Authors.  All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// 1. Redistributions of source code must retain the above copyright\n//    notice, this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright\n//    notice, this list of conditions and the following disclaimer in the\n//    documentation and/or other materials provided with the\n//    distribution.\n//\n// 3. Neither the name of the copyright holder nor the names of its\n//    contributors may be used to endorse or promote products derived\n//    from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"maps\"\n\t\"os\"\n\n\t\"go.starlark.net/starlark\"\n\t\"go.starlark.net/syntax\"\n\n\t\"github.com/go-delve/liner\"\n)\n\n// REPL executes a read, eval, print loop.\nfunc (env *Env) REPL() error {\n\tthread := env.newThread()\n\tglobals := starlark.StringDict{}\n\tmaps.Copy(globals, env.env)\n\n\trl := liner.NewLiner()\n\tdefer rl.Close()\n\tfor {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif err := rep(rl, thread, globals, env.out); err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\tfmt.Fprintln(env.out)\n\treturn env.exportGlobals(globals)\n}\n\nconst (\n\tnormalPrompt = \">>> \"\n\textraPrompt  = \"... \"\n\n\texitCommand = \"exit\"\n)\n\n// rep reads, evaluates, and prints one item.\n//\n// It returns an error (possibly readline.ErrInterrupt)\n// only if readline failed. Starlark errors are printed.\nfunc rep(rl *liner.State, thread *starlark.Thread, globals starlark.StringDict, out EchoWriter) error {\n\tdefer out.Flush()\n\teof := false\n\n\tprompt := normalPrompt\n\treadline := func() ([]byte, error) {\n\t\tline, err := rl.Prompt(prompt)\n\t\tout.Echo(prompt + line)\n\t\tif line == exitCommand {\n\t\t\teof = true\n\t\t\treturn nil, io.EOF\n\t\t}\n\t\trl.AppendHistory(line)\n\t\tprompt = extraPrompt\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\teof = true\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\treturn []byte(line + \"\\n\"), nil\n\t}\n\n\t// parse\n\tf, err := syntax.ParseCompoundStmt(\"<stdin>\", readline)\n\tif err != nil {\n\t\tif eof {\n\t\t\treturn io.EOF\n\t\t}\n\t\tprintError(err)\n\t\treturn nil\n\t}\n\n\tif expr := soleExpr(f); expr != nil {\n\t\t//TODO: check for 'exit'\n\t\t// eval\n\t\tv, err := evalExprOptions(nil, thread, expr, globals)\n\t\tif err != nil {\n\t\t\tprintError(err)\n\t\t\treturn nil\n\t\t}\n\n\t\t// print\n\t\tif v != starlark.None {\n\t\t\tfmt.Fprintln(out, v)\n\t\t}\n\t} else {\n\t\t// compile\n\t\tprog, err := starlark.FileProgram(f, globals.Has)\n\t\tif err != nil {\n\t\t\tprintError(err)\n\t\t\treturn nil\n\t\t}\n\n\t\t// execute (but do not freeze)\n\t\tres, err := prog.Init(thread, globals)\n\t\tif err != nil {\n\t\t\tprintError(err)\n\t\t}\n\n\t\t// The global names from the previous call become\n\t\t// the predeclared names of this call.\n\t\t// If execution failed, some globals may be undefined.\n\t\tmaps.Copy(globals, res)\n\t}\n\n\treturn nil\n}\n\nfunc soleExpr(f *syntax.File) syntax.Expr {\n\tif len(f.Stmts) == 1 {\n\t\tif stmt, ok := f.Stmts[0].(*syntax.ExprStmt); ok {\n\t\t\treturn stmt.X\n\t\t}\n\t}\n\treturn nil\n}\n\n// printError prints the error to stderr,\n// or its backtrace if it is a Starlark evaluation error.\nfunc printError(err error) {\n\tif evalErr, ok := err.(*starlark.EvalError); ok {\n\t\tfmt.Fprintln(os.Stderr, evalErr.Backtrace())\n\t} else {\n\t\tfmt.Fprintln(os.Stderr, err)\n\t}\n}\n\n// MakeLoad returns a simple sequential implementation of module loading\n// suitable for use in the REPL.\n// Each function returned by MakeLoad accesses a distinct private cache.\nfunc MakeLoad() func(thread *starlark.Thread, module string) (starlark.StringDict, error) {\n\ttype entry struct {\n\t\tglobals starlark.StringDict\n\t\terr     error\n\t}\n\n\tvar cache = make(map[string]*entry)\n\n\treturn func(thread *starlark.Thread, module string) (starlark.StringDict, error) {\n\t\te, ok := cache[module]\n\t\tif e == nil {\n\t\t\tif ok {\n\t\t\t\t// request for package whose loading is in progress\n\t\t\t\treturn nil, errors.New(\"cycle in load graph\")\n\t\t\t}\n\n\t\t\t// Add a placeholder to indicate \"load in progress\".\n\t\t\tcache[module] = nil\n\n\t\t\t// Load it.\n\t\t\tthread := &starlark.Thread{Name: \"exec \" + module, Load: thread.Load}\n\t\t\tglobals, err := execFileOptions(nil, thread, module, nil, nil)\n\t\t\te = &entry{globals, err}\n\n\t\t\t// Update the cache.\n\t\t\tcache[module] = e\n\t\t}\n\t\treturn e.globals, e.err\n\t}\n}\n"
  },
  {
    "path": "pkg/terminal/starbind/starlark.go",
    "content": "package starbind\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\n\tstartime \"go.starlark.net/lib/time\"\n\t\"go.starlark.net/starlark\"\n\t\"go.starlark.net/syntax\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\n//go:generate go run github.com/go-delve/build-tools/cmd/gen-starlark-bindings@latest go ./starlark_mapping.go\n//go:generate go run github.com/go-delve/build-tools/cmd/gen-starlark-bindings@latest doc ../../../Documentation/cli/starlark.md\n\nconst (\n\tdlvCommandBuiltinName        = \"dlv_command\"\n\tappendFileBuiltinName        = \"append_file\"\n\treadFileBuiltinName          = \"read_file\"\n\twriteFileBuiltinName         = \"write_file\"\n\tcommandPrefix                = \"command_\"\n\tdlvContextName               = \"dlv_context\"\n\tcurScopeBuiltinName          = \"cur_scope\"\n\tdefaultLoadConfigBuiltinName = \"default_load_config\"\n\ttargetObjectName             = \"tgt\"\n\thelpBuiltinName              = \"help\"\n)\n\nvar defaultSyntaxFileOpts = &syntax.FileOptions{\n\tSet:             true,\n\tWhile:           true,\n\tTopLevelControl: true,\n\tGlobalReassign:  true,\n\tRecursion:       true,\n}\n\n// Context is the context in which starlark scripts are evaluated.\n// It contains methods to call API functions, command line commands, etc.\ntype Context interface {\n\tClient() service.Client\n\tRegisterCommand(name, helpMsg string, cmdfn func(args string) error, allowedPrefixes int)\n\tCallCommand(cmdstr string) error\n\tScope() api.EvalScope\n\tLoadConfig() api.LoadConfig\n}\n\n// Env is the environment used to evaluate starlark scripts.\ntype Env struct {\n\tenv       starlark.StringDict\n\tcontextMu sync.Mutex\n\tthread    *starlark.Thread\n\tcancelfn  context.CancelFunc\n\n\tctx Context\n\tout EchoWriter\n}\n\n// New creates a new starlark binding environment.\nfunc New(ctx Context, out EchoWriter) *Env {\n\tenv := &Env{}\n\n\tenv.ctx = ctx\n\tenv.out = out\n\n\t// Make the \"time\" module available to Starlark scripts.\n\tstarlark.Universe[\"time\"] = startime.Module\n\n\tvar doc map[string]string\n\tenv.env, doc = env.starlarkPredeclare()\n\n\tbuiltindoc := func(name, args, descr string) {\n\t\tdoc[name] = name + args + \"\\n\\n\" + name + \" \" + descr\n\t}\n\n\tenv.env[dlvCommandBuiltinName] = starlark.NewBuiltin(dlvCommandBuiltinName, func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\targstrs := make([]string, len(args))\n\t\tfor i := range args {\n\t\t\ta, ok := args[i].(starlark.String)\n\t\t\tif !ok {\n\t\t\t\treturn nil, errors.New(\"argument of dlv_command is not a string\")\n\t\t\t}\n\t\t\targstrs[i] = string(a)\n\t\t}\n\t\terr := env.ctx.CallCommand(strings.Join(argstrs, \" \"))\n\t\tif err != nil && strings.Contains(err.Error(), \" has exited with status \") {\n\t\t\treturn env.interfaceToStarlarkValue(err), nil\n\t\t}\n\t\treturn starlark.None, decorateError(thread, err)\n\t})\n\tbuiltindoc(dlvCommandBuiltinName, \"(Command)\", \"interrupts, continues and steps through the program.\")\n\n\tenv.env[readFileBuiltinName] = starlark.NewBuiltin(readFileBuiltinName, func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif len(args) != 1 {\n\t\t\treturn nil, decorateError(thread, errors.New(\"wrong number of arguments\"))\n\t\t}\n\t\tpath, ok := args[0].(starlark.String)\n\t\tif !ok {\n\t\t\treturn nil, decorateError(thread, errors.New(\"argument of read_file was not a string\"))\n\t\t}\n\t\tbuf, err := os.ReadFile(string(path))\n\t\tif err != nil {\n\t\t\treturn nil, decorateError(thread, err)\n\t\t}\n\t\treturn starlark.String(string(buf)), nil\n\t})\n\tbuiltindoc(readFileBuiltinName, \"(Path)\", \"reads a file.\")\n\n\tenv.env[appendFileBuiltinName] = starlark.NewBuiltin(appendFileBuiltinName, func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif len(args) != 2 {\n\t\t\treturn nil, decorateError(thread, errors.New(\"wrong number of arguments\"))\n\t\t}\n\t\tpath, ok := args[0].(starlark.String)\n\t\tif !ok {\n\t\t\treturn nil, decorateError(thread, errors.New(\"first argument of append_file was not a string\"))\n\t\t}\n\t\tf, err := os.OpenFile(string(path), os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o640)\n\t\tif err != nil {\n\t\t\treturn nil, decorateError(thread, err)\n\t\t}\n\t\tdefer f.Close()\n\t\t_, err = f.Write(toBytes(args[1]))\n\t\treturn starlark.None, decorateError(thread, err)\n\t})\n\tbuiltindoc(appendFileBuiltinName, \"(Path, Text)\", \"append text to the specified file.\")\n\n\tenv.env[writeFileBuiltinName] = starlark.NewBuiltin(writeFileBuiltinName, func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif len(args) != 2 {\n\t\t\treturn nil, decorateError(thread, errors.New(\"wrong number of arguments\"))\n\t\t}\n\t\tpath, ok := args[0].(starlark.String)\n\t\tif !ok {\n\t\t\treturn nil, decorateError(thread, errors.New(\"first argument of write_file was not a string\"))\n\t\t}\n\t\terr := os.WriteFile(string(path), toBytes(args[1]), 0o640)\n\t\treturn starlark.None, decorateError(thread, err)\n\t})\n\tbuiltindoc(writeFileBuiltinName, \"(Path, Text)\", \"writes text to the specified file.\")\n\n\tenv.env[curScopeBuiltinName] = starlark.NewBuiltin(curScopeBuiltinName, func(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\treturn env.interfaceToStarlarkValue(env.ctx.Scope()), nil\n\t})\n\tbuiltindoc(curScopeBuiltinName, \"()\", \"returns the current scope.\")\n\n\tenv.env[defaultLoadConfigBuiltinName] = starlark.NewBuiltin(defaultLoadConfigBuiltinName, func(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\treturn env.interfaceToStarlarkValue(env.ctx.LoadConfig()), nil\n\t})\n\tbuiltindoc(defaultLoadConfigBuiltinName, \"()\", \"returns the default load configuration.\")\n\n\tenv.env[targetObjectName] = starlarkTargetObject{env: env}\n\n\tenv.env[helpBuiltinName] = starlark.NewBuiltin(helpBuiltinName, func(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tswitch len(args) {\n\t\tcase 0:\n\t\t\tfmt.Fprintln(env.out, \"Available builtins:\")\n\t\t\tbins := make([]string, 0, len(env.env))\n\t\t\tfor name, value := range env.env {\n\t\t\t\tswitch value.(type) {\n\t\t\t\tcase *starlark.Builtin:\n\t\t\t\t\tbins = append(bins, name)\n\t\t\t\t}\n\t\t\t}\n\t\t\tsort.Strings(bins)\n\t\t\tfor _, bin := range bins {\n\t\t\t\tfmt.Fprintf(env.out, \"\\t%s\\n\", bin)\n\t\t\t}\n\t\t\tfmt.Fprintf(env.out, \"\\n\\nUse tgt.varname to access the varname variable in the target process (it is equivalent to 'eval(None, \\\"varname\\\").Variable.Value').\\n\")\n\t\tcase 1:\n\t\t\tswitch x := args[0].(type) {\n\t\t\tcase *starlark.Builtin:\n\t\t\t\tif doc[x.Name()] != \"\" {\n\t\t\t\t\tfmt.Fprintf(env.out, \"%s\\n\", doc[x.Name()])\n\t\t\t\t} else {\n\t\t\t\t\tfmt.Fprintf(env.out, \"no help for builtin %s\\n\", x.Name())\n\t\t\t\t}\n\t\t\tcase *starlark.Function:\n\t\t\t\tfmt.Fprintf(env.out, \"user defined function %s\\n\", x.Name())\n\t\t\t\tif doc := x.Doc(); doc != \"\" {\n\t\t\t\t\tfmt.Fprintln(env.out, doc)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tfmt.Fprintf(env.out, \"no help for object of type %T\\n\", args[0])\n\t\t\t}\n\t\tdefault:\n\t\t\tfmt.Fprintln(env.out, \"wrong number of arguments \", len(args))\n\t\t}\n\t\treturn starlark.None, nil\n\t})\n\tbuiltindoc(helpBuiltinName, \"(Object)\", \"prints help for Object.\")\n\n\treturn env\n}\n\n// Redirect redirects starlark output to out.\nfunc (env *Env) Redirect(out EchoWriter) {\n\tenv.out = out\n\tif env.thread != nil {\n\t\tenv.thread.Print = env.printFunc()\n\t}\n}\n\nfunc (env *Env) printFunc() func(_ *starlark.Thread, msg string) {\n\treturn func(_ *starlark.Thread, msg string) { fmt.Fprintln(env.out, msg) }\n}\n\n// Execute executes a script. Path is the name of the file to execute and\n// source is the source code to execute.\n// Source can be either a []byte, a string or a io.Reader. If source is nil\n// Execute will execute the file specified by 'path'.\n// After the file is executed if a function named mainFnName exists it will be called, passing args to it.\nfunc (env *Env) Execute(path string, source any, mainFnName string, args []any) (_ starlark.Value, _err error) {\n\tdefer func() {\n\t\terr := recover()\n\t\tif err == nil {\n\t\t\treturn\n\t\t}\n\t\tlogflags.Bug.Inc()\n\t\t_err = fmt.Errorf(\"panic executing starlark script: %v\", err)\n\t\tfmt.Fprintf(env.out, \"panic executing starlark script: %v\\n\", err)\n\t\tfor i := 0; ; i++ {\n\t\t\tpc, file, line, ok := runtime.Caller(i)\n\t\t\tif !ok {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfname := \"<unknown>\"\n\t\t\tfn := runtime.FuncForPC(pc)\n\t\t\tif fn != nil {\n\t\t\t\tfname = fn.Name()\n\t\t\t}\n\t\t\tfmt.Fprintf(env.out, \"%s\\n\\tin %s:%d\\n\", fname, file, line)\n\t\t}\n\t}()\n\n\tthread := env.newThread()\n\tglobals, err := execFileOptions(nil, thread, path, source, env.env)\n\tif err != nil {\n\t\treturn starlark.None, err\n\t}\n\n\terr = env.exportGlobals(globals)\n\tif err != nil {\n\t\treturn starlark.None, err\n\t}\n\n\treturn env.callMain(thread, globals, mainFnName, args)\n}\n\n// exportGlobals saves globals with a name starting with a capital letter\n// into the environment and creates commands from globals with a name\n// starting with \"command_\"\nfunc (env *Env) exportGlobals(globals starlark.StringDict) error {\n\tfor name, val := range globals {\n\t\tswitch {\n\t\tcase strings.HasPrefix(name, commandPrefix):\n\t\t\terr := env.createCommand(name, val)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\tcase name[0] >= 'A' && name[0] <= 'Z':\n\t\t\tenv.env[name] = val\n\t\t}\n\t}\n\treturn nil\n}\n\n// Cancel cancels the execution of a currently running script or function.\nfunc (env *Env) Cancel() {\n\tif env == nil {\n\t\treturn\n\t}\n\tenv.contextMu.Lock()\n\tif env.cancelfn != nil {\n\t\tenv.cancelfn()\n\t\tenv.cancelfn = nil\n\t}\n\tif env.thread != nil {\n\t\tenv.thread.Cancel(\"user interrupt\")\n\t}\n\tenv.contextMu.Unlock()\n}\n\nfunc (env *Env) newThread() *starlark.Thread {\n\tthread := &starlark.Thread{\n\t\tPrint: env.printFunc(),\n\t}\n\tenv.contextMu.Lock()\n\tvar ctx context.Context\n\tctx, env.cancelfn = context.WithCancel(context.Background())\n\tenv.thread = thread\n\tenv.contextMu.Unlock()\n\tthread.SetLocal(dlvContextName, ctx)\n\treturn thread\n}\n\nfunc (env *Env) createCommand(name string, val starlark.Value) error {\n\tfnval, ok := val.(*starlark.Function)\n\tif !ok {\n\t\treturn nil\n\t}\n\n\tname = name[len(commandPrefix):]\n\n\thelpMsg := fnval.Doc()\n\tif helpMsg == \"\" {\n\t\thelpMsg = \"user defined\"\n\t}\n\n\t// All custom starlark commands are allowed to use the on prefix\n\tallowedPrefixes := 2 // onPrefix\n\n\tif fnval.NumParams() == 1 {\n\t\tif p0, _ := fnval.Param(0); p0 == \"args\" {\n\t\t\tenv.ctx.RegisterCommand(name, helpMsg, func(args string) error {\n\t\t\t\t_, err := starlark.Call(env.newThread(), fnval, starlark.Tuple{starlark.String(args)}, nil)\n\t\t\t\treturn err\n\t\t\t}, allowedPrefixes)\n\t\t\treturn nil\n\t\t}\n\t}\n\n\tenv.ctx.RegisterCommand(name, helpMsg, func(args string) error {\n\t\tthread := env.newThread()\n\t\targval, err := evalOptions(nil, thread, \"<input>\", \"(\"+args+\")\", env.env)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\targtuple, ok := argval.(starlark.Tuple)\n\t\tif !ok {\n\t\t\targtuple = starlark.Tuple{argval}\n\t\t}\n\t\t_, err = starlark.Call(thread, fnval, argtuple, nil)\n\t\treturn err\n\t}, allowedPrefixes)\n\treturn nil\n}\n\n// callMain calls the main function in globals, if one was defined.\nfunc (env *Env) callMain(thread *starlark.Thread, globals starlark.StringDict, mainFnName string, args []any) (starlark.Value, error) {\n\tif mainFnName == \"\" {\n\t\treturn starlark.None, nil\n\t}\n\tmainval := globals[mainFnName]\n\tif mainval == nil {\n\t\treturn starlark.None, nil\n\t}\n\tmainfn, ok := mainval.(*starlark.Function)\n\tif !ok {\n\t\treturn starlark.None, fmt.Errorf(\"%s is not a function\", mainFnName)\n\t}\n\tif mainfn.NumParams() != len(args) {\n\t\treturn starlark.None, fmt.Errorf(\"wrong number of arguments for %s\", mainFnName)\n\t}\n\targtuple := make(starlark.Tuple, len(args))\n\tfor i := range args {\n\t\targtuple[i] = env.interfaceToStarlarkValue(args[i])\n\t}\n\treturn starlark.Call(thread, mainfn, argtuple, nil)\n}\n\nfunc isCancelled(thread *starlark.Thread) error {\n\tif ctx, ok := thread.Local(dlvContextName).(context.Context); ok {\n\t\tselect {\n\t\tcase <-ctx.Done():\n\t\t\treturn ctx.Err()\n\t\tdefault:\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc decorateError(thread *starlark.Thread, err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\tpos := thread.CallFrame(1).Pos\n\tif pos.Col > 0 {\n\t\treturn fmt.Errorf(\"%s:%d:%d: %v\", pos.Filename(), pos.Line, pos.Col, err)\n\t}\n\treturn fmt.Errorf(\"%s:%d: %v\", pos.Filename(), pos.Line, err)\n}\n\ntype EchoWriter interface {\n\tio.Writer\n\tEcho(string)\n\tFlush()\n}\n\n// execFileOptions is a wrapper around starlark.ExecFileOptions.\n// If no options are provided, it uses default options.\nfunc execFileOptions(opts *syntax.FileOptions, thread *starlark.Thread, path string, source any, env starlark.StringDict) (starlark.StringDict, error) {\n\tif opts == nil {\n\t\topts = defaultSyntaxFileOpts\n\t}\n\treturn starlark.ExecFileOptions(opts, thread, path, source, env)\n}\n\n// evalOptions is a wrapper around starlark.EvalOptions.\n// If no options are provided, it uses default options.\nfunc evalOptions(opts *syntax.FileOptions, thread *starlark.Thread, path string, source any, env starlark.StringDict) (starlark.Value, error) {\n\tif opts == nil {\n\t\topts = defaultSyntaxFileOpts\n\t}\n\treturn starlark.EvalOptions(opts, thread, path, source, env)\n}\n\n// evalExprOptions is a wrapper around starlark.EvalExprOptions.\n// If no options are provided, it uses default options.\nfunc evalExprOptions(opts *syntax.FileOptions, thread *starlark.Thread, expr syntax.Expr, globals starlark.StringDict) (starlark.Value, error) {\n\tif opts == nil {\n\t\topts = defaultSyntaxFileOpts\n\t}\n\treturn starlark.EvalExprOptions(opts, thread, expr, globals)\n}\n\nfunc toBytes(arg starlark.Value) []byte {\n\tvar data []byte\n\tswitch v := arg.(type) {\n\tcase starlark.String:\n\t\tdata = []byte(string(v))\n\tcase starlark.Bytes:\n\t\tdata = []byte(v)\n\tdefault:\n\t\tdata = []byte(arg.String())\n\t}\n\treturn data\n}\n"
  },
  {
    "path": "pkg/terminal/starbind/starlark_mapping.go",
    "content": "// DO NOT EDIT: auto-generated using github.com/go-delve/build-tools/cmd/gen-starlark-bindings\n\npackage starbind\n\nimport (\n\t\"fmt\"\n\t\"github.com/go-delve/delve/service/api\"\n\t\"github.com/go-delve/delve/service/rpc2\"\n\t\"go.starlark.net/starlark\"\n)\n\nfunc (env *Env) starlarkPredeclare() (starlark.StringDict, map[string]string) {\n\tr := starlark.StringDict{}\n\tdoc := make(map[string]string)\n\n\tr[\"amend_breakpoint\"] = starlark.NewBuiltin(\"amend_breakpoint\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.AmendBreakpointIn\n\t\tvar rpcRet rpc2.AmendBreakpointOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Breakpoint, \"Breakpoint\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Breakpoint\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Breakpoint, \"Breakpoint\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"AmendBreakpoint\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"amend_breakpoint\"] = \"builtin amend_breakpoint(Breakpoint)\\n\\namend_breakpoint allows user to update an existing breakpoint\\nfor example to change the information retrieved when the\\nbreakpoint is hit or to change, add or remove the break condition.\\n\\narg.Breakpoint.ID must be a valid breakpoint ID\"\n\tr[\"ancestors\"] = starlark.NewBuiltin(\"ancestors\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.AncestorsIn\n\t\tvar rpcRet rpc2.AncestorsOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.GoroutineID, \"GoroutineID\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.NumAncestors, \"NumAncestors\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.Depth, \"Depth\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"GoroutineID\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.GoroutineID, \"GoroutineID\")\n\t\t\tcase \"NumAncestors\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.NumAncestors, \"NumAncestors\")\n\t\t\tcase \"Depth\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Depth, \"Depth\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"Ancestors\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"ancestors\"] = \"builtin ancestors(GoroutineID, NumAncestors, Depth)\\n\\nancestors returns the stacktraces for the ancestors of a goroutine.\"\n\tr[\"attached_to_existing_process\"] = starlark.NewBuiltin(\"attached_to_existing_process\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.AttachedToExistingProcessIn\n\t\tvar rpcRet rpc2.AttachedToExistingProcessOut\n\t\terr := env.ctx.Client().CallAPI(\"AttachedToExistingProcess\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"attached_to_existing_process\"] = \"builtin attached_to_existing_process()\\n\\nattached_to_existing_process returns whether we attached to a running process or not\"\n\tr[\"build_id\"] = starlark.NewBuiltin(\"build_id\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.BuildIDIn\n\t\tvar rpcRet rpc2.BuildIDOut\n\t\terr := env.ctx.Client().CallAPI(\"BuildID\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"build_id\"] = \"builtin build_id()\"\n\tr[\"cancel_next\"] = starlark.NewBuiltin(\"cancel_next\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.CancelNextIn\n\t\tvar rpcRet rpc2.CancelNextOut\n\t\terr := env.ctx.Client().CallAPI(\"CancelNext\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"cancel_next\"] = \"builtin cancel_next()\"\n\tr[\"checkpoint\"] = starlark.NewBuiltin(\"checkpoint\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.CheckpointIn\n\t\tvar rpcRet rpc2.CheckpointOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Where, \"Where\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Where\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Where, \"Where\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"Checkpoint\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"checkpoint\"] = \"builtin checkpoint(Where)\"\n\tr[\"clear_breakpoint\"] = starlark.NewBuiltin(\"clear_breakpoint\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ClearBreakpointIn\n\t\tvar rpcRet rpc2.ClearBreakpointOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Id, \"Id\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Name, \"Name\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Id\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Id, \"Id\")\n\t\t\tcase \"Name\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Name, \"Name\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ClearBreakpoint\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"clear_breakpoint\"] = \"builtin clear_breakpoint(Id, Name)\\n\\nclear_breakpoint deletes a breakpoint by Name (if Name is not an\\nempty string) or by ID.\"\n\tr[\"clear_checkpoint\"] = starlark.NewBuiltin(\"clear_checkpoint\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ClearCheckpointIn\n\t\tvar rpcRet rpc2.ClearCheckpointOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.ID, \"ID\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"ID\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.ID, \"ID\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ClearCheckpoint\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"clear_checkpoint\"] = \"builtin clear_checkpoint(ID)\"\n\tr[\"raw_command\"] = starlark.NewBuiltin(\"raw_command\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs api.DebuggerCommand\n\t\tvar rpcRet rpc2.CommandOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Name, \"Name\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.ThreadID, \"ThreadID\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.GoroutineID, \"GoroutineID\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 3 && args[3] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[3], &rpcArgs.ReturnInfoLoadConfig, \"ReturnInfoLoadConfig\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\tcfg := env.ctx.LoadConfig()\n\t\t\trpcArgs.ReturnInfoLoadConfig = &cfg\n\t\t}\n\t\tif len(args) > 4 && args[4] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[4], &rpcArgs.Expr, \"Expr\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 5 && args[5] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[5], &rpcArgs.WithEvents, \"WithEvents\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 6 && args[6] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[6], &rpcArgs.UnsafeCall, \"UnsafeCall\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Name\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Name, \"Name\")\n\t\t\tcase \"ThreadID\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.ThreadID, \"ThreadID\")\n\t\t\tcase \"GoroutineID\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.GoroutineID, \"GoroutineID\")\n\t\t\tcase \"ReturnInfoLoadConfig\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.ReturnInfoLoadConfig, \"ReturnInfoLoadConfig\")\n\t\t\tcase \"Expr\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Expr, \"Expr\")\n\t\t\tcase \"WithEvents\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.WithEvents, \"WithEvents\")\n\t\t\tcase \"UnsafeCall\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.UnsafeCall, \"UnsafeCall\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"Command\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"raw_command\"] = \"builtin raw_command(Name, ThreadID, GoroutineID, ReturnInfoLoadConfig, Expr, WithEvents, UnsafeCall)\\n\\nraw_command interrupts, continues and steps through the program.\"\n\tr[\"create_breakpoint\"] = starlark.NewBuiltin(\"create_breakpoint\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.CreateBreakpointIn\n\t\tvar rpcRet rpc2.CreateBreakpointOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Breakpoint, \"Breakpoint\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.LocExpr, \"LocExpr\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.SubstitutePathRules, \"SubstitutePathRules\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 3 && args[3] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[3], &rpcArgs.Suspended, \"Suspended\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Breakpoint\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Breakpoint, \"Breakpoint\")\n\t\t\tcase \"LocExpr\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.LocExpr, \"LocExpr\")\n\t\t\tcase \"SubstitutePathRules\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.SubstitutePathRules, \"SubstitutePathRules\")\n\t\t\tcase \"Suspended\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Suspended, \"Suspended\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"CreateBreakpoint\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"create_breakpoint\"] = \"builtin create_breakpoint(Breakpoint, LocExpr, SubstitutePathRules, Suspended)\\n\\ncreate_breakpoint creates a new breakpoint. The client is expected to populate `CreateBreakpointIn`\\nwith an `api.Breakpoint` struct describing where to set the breakpoint. For more information on\\nhow to properly request a breakpoint via the `api.Breakpoint` struct see the documentation for\\n`debugger.CreateBreakpoint` here: https://pkg.go.dev/github.com/go-delve/delve/service/debugger#Debugger.CreateBreakpoint.\"\n\tr[\"create_ebpf_tracepoint\"] = starlark.NewBuiltin(\"create_ebpf_tracepoint\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.CreateEBPFTracepointIn\n\t\tvar rpcRet rpc2.CreateEBPFTracepointOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.FunctionName, \"FunctionName\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"FunctionName\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.FunctionName, \"FunctionName\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"CreateEBPFTracepoint\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"create_ebpf_tracepoint\"] = \"builtin create_ebpf_tracepoint(FunctionName)\"\n\tr[\"create_watchpoint\"] = starlark.NewBuiltin(\"create_watchpoint\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.CreateWatchpointIn\n\t\tvar rpcRet rpc2.CreateWatchpointOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Scope, \"Scope\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Scope = env.ctx.Scope()\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Expr, \"Expr\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.Type, \"Type\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Scope\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Scope, \"Scope\")\n\t\t\tcase \"Expr\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Expr, \"Expr\")\n\t\t\tcase \"Type\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Type, \"Type\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"CreateWatchpoint\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"create_watchpoint\"] = \"builtin create_watchpoint(Scope, Expr, Type)\"\n\tr[\"debug_info_directories\"] = starlark.NewBuiltin(\"debug_info_directories\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.DebugInfoDirectoriesIn\n\t\tvar rpcRet rpc2.DebugInfoDirectoriesOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Set, \"Set\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.List, \"List\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Set\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Set, \"Set\")\n\t\t\tcase \"List\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.List, \"List\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"DebugInfoDirectories\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"debug_info_directories\"] = \"builtin debug_info_directories(Set, List)\"\n\tr[\"detach\"] = starlark.NewBuiltin(\"detach\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.DetachIn\n\t\tvar rpcRet rpc2.DetachOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Kill, \"Kill\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Kill\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Kill, \"Kill\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"Detach\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"detach\"] = \"builtin detach(Kill)\\n\\ndetach detaches the debugger, optionally killing the process.\"\n\tr[\"disassemble\"] = starlark.NewBuiltin(\"disassemble\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.DisassembleIn\n\t\tvar rpcRet rpc2.DisassembleOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Scope, \"Scope\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Scope = env.ctx.Scope()\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.StartPC, \"StartPC\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.EndPC, \"EndPC\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 3 && args[3] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[3], &rpcArgs.Flavour, \"Flavour\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Scope\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Scope, \"Scope\")\n\t\t\tcase \"StartPC\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.StartPC, \"StartPC\")\n\t\t\tcase \"EndPC\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.EndPC, \"EndPC\")\n\t\t\tcase \"Flavour\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Flavour, \"Flavour\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"Disassemble\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"disassemble\"] = \"builtin disassemble(Scope, StartPC, EndPC, Flavour)\\n\\ndisassemble code.\\n\\nIf both StartPC and EndPC are non-zero the specified range will be disassembled, otherwise the function containing StartPC will be disassembled.\\n\\nScope is used to mark the instruction the specified goroutine is stopped at.\\n\\nDisassemble will also try to calculate the destination address of an absolute indirect CALL if it happens to be the instruction the selected goroutine is stopped at.\"\n\tr[\"dump_cancel\"] = starlark.NewBuiltin(\"dump_cancel\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.DumpCancelIn\n\t\tvar rpcRet rpc2.DumpCancelOut\n\t\terr := env.ctx.Client().CallAPI(\"DumpCancel\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"dump_cancel\"] = \"builtin dump_cancel()\\n\\ndump_cancel cancels the core dump.\"\n\tr[\"dump_start\"] = starlark.NewBuiltin(\"dump_start\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.DumpStartIn\n\t\tvar rpcRet rpc2.DumpStartOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Destination, \"Destination\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Destination\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Destination, \"Destination\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"DumpStart\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"dump_start\"] = \"builtin dump_start(Destination)\\n\\ndump_start starts a core dump to arg.Destination.\"\n\tr[\"dump_wait\"] = starlark.NewBuiltin(\"dump_wait\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.DumpWaitIn\n\t\tvar rpcRet rpc2.DumpWaitOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Wait, \"Wait\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Wait\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Wait, \"Wait\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"DumpWait\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"dump_wait\"] = \"builtin dump_wait(Wait)\\n\\ndump_wait waits for the core dump to finish or for arg.Wait milliseconds.\\nWait == 0 means return immediately.\\nReturns the core dump status\"\n\tr[\"eval\"] = starlark.NewBuiltin(\"eval\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.EvalIn\n\t\tvar rpcRet rpc2.EvalOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Scope, \"Scope\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Scope = env.ctx.Scope()\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Expr, \"Expr\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\tcfg := env.ctx.LoadConfig()\n\t\t\trpcArgs.Cfg = &cfg\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Scope\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Scope, \"Scope\")\n\t\t\tcase \"Expr\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Expr, \"Expr\")\n\t\t\tcase \"Cfg\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"Eval\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"eval\"] = \"builtin eval(Scope, Expr, Cfg)\\n\\neval returns a variable in the specified context.\\n\\nSee https://github.com/go-delve/delve/blob/master/Documentation/cli/expr.md\\nfor a description of acceptable values of arg.Expr.\"\n\tr[\"examine_memory\"] = starlark.NewBuiltin(\"examine_memory\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ExamineMemoryIn\n\t\tvar rpcRet rpc2.ExaminedMemoryOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Address, \"Address\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Length, \"Length\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Address\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Address, \"Address\")\n\t\t\tcase \"Length\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Length, \"Length\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ExamineMemory\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"examine_memory\"] = \"builtin examine_memory(Address, Length)\"\n\tr[\"find_location\"] = starlark.NewBuiltin(\"find_location\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.FindLocationIn\n\t\tvar rpcRet rpc2.FindLocationOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Scope, \"Scope\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Scope = env.ctx.Scope()\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Loc, \"Loc\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.IncludeNonExecutableLines, \"IncludeNonExecutableLines\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 3 && args[3] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[3], &rpcArgs.SubstitutePathRules, \"SubstitutePathRules\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Scope\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Scope, \"Scope\")\n\t\t\tcase \"Loc\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Loc, \"Loc\")\n\t\t\tcase \"IncludeNonExecutableLines\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.IncludeNonExecutableLines, \"IncludeNonExecutableLines\")\n\t\t\tcase \"SubstitutePathRules\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.SubstitutePathRules, \"SubstitutePathRules\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"FindLocation\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"find_location\"] = \"builtin find_location(Scope, Loc, IncludeNonExecutableLines, SubstitutePathRules)\\n\\nfind_location returns concrete location information described by a location expression.\\n\\n\\tloc ::= <filename>:<line> | <function>[:<line>] | /<regex>/ | (+|-)<offset> | <line> | *<address>\\n\\t* <filename> can be the full path of a file or just a suffix\\n\\t* <function> ::= <package>.<receiver type>.<name> | <package>.(*<receiver type>).<name> | <receiver type>.<name> | <package>.<name> | (*<receiver type>).<name> | <name>\\n\\t  <function> must be unambiguous\\n\\t* /<regex>/ will return a location for each function matched by regex\\n\\t* +<offset> returns a location for the line that is <offset> lines after the current line\\n\\t* -<offset> returns a location for the line that is <offset> lines before the current line\\n\\t* <line> returns a location for a line in the current file\\n\\t* *<address> returns the location corresponding to the specified address\\n\\nNOTE: this function does not actually set breakpoints.\"\n\tr[\"follow_exec\"] = starlark.NewBuiltin(\"follow_exec\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.FollowExecIn\n\t\tvar rpcRet rpc2.FollowExecOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Enable, \"Enable\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Regex, \"Regex\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Enable\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Enable, \"Enable\")\n\t\t\tcase \"Regex\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Regex, \"Regex\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"FollowExec\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"follow_exec\"] = \"builtin follow_exec(Enable, Regex)\\n\\nfollow_exec enables or disables follow exec mode.\"\n\tr[\"follow_exec_enabled\"] = starlark.NewBuiltin(\"follow_exec_enabled\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.FollowExecEnabledIn\n\t\tvar rpcRet rpc2.FollowExecEnabledOut\n\t\terr := env.ctx.Client().CallAPI(\"FollowExecEnabled\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"follow_exec_enabled\"] = \"builtin follow_exec_enabled()\\n\\nfollow_exec_enabled returns true if follow exec mode is enabled.\"\n\tr[\"function_return_locations\"] = starlark.NewBuiltin(\"function_return_locations\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.FunctionReturnLocationsIn\n\t\tvar rpcRet rpc2.FunctionReturnLocationsOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.FnName, \"FnName\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"FnName\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.FnName, \"FnName\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"FunctionReturnLocations\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"function_return_locations\"] = \"builtin function_return_locations(FnName)\\n\\nfunction_return_locations is the implements the client call of the same name. Look at client documentation for more information.\"\n\tr[\"get_breakpoint\"] = starlark.NewBuiltin(\"get_breakpoint\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.GetBreakpointIn\n\t\tvar rpcRet rpc2.GetBreakpointOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Id, \"Id\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Name, \"Name\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Id\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Id, \"Id\")\n\t\t\tcase \"Name\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Name, \"Name\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"GetBreakpoint\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"get_breakpoint\"] = \"builtin get_breakpoint(Id, Name)\\n\\nget_breakpoint gets a breakpoint by Name (if Name is not an empty string) or by ID.\"\n\tr[\"get_buffered_tracepoints\"] = starlark.NewBuiltin(\"get_buffered_tracepoints\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.GetBufferedTracepointsIn\n\t\tvar rpcRet rpc2.GetBufferedTracepointsOut\n\t\terr := env.ctx.Client().CallAPI(\"GetBufferedTracepoints\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"get_buffered_tracepoints\"] = \"builtin get_buffered_tracepoints()\"\n\tr[\"get_thread\"] = starlark.NewBuiltin(\"get_thread\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.GetThreadIn\n\t\tvar rpcRet rpc2.GetThreadOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Id, \"Id\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Id\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Id, \"Id\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"GetThread\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"get_thread\"] = \"builtin get_thread(Id)\\n\\nget_thread gets a thread by its ID.\"\n\tr[\"guess_substitute_path\"] = starlark.NewBuiltin(\"guess_substitute_path\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.GuessSubstitutePathIn\n\t\tvar rpcRet rpc2.GuessSubstitutePathOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Args, \"Args\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Args\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Args, \"Args\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"GuessSubstitutePath\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"guess_substitute_path\"] = \"builtin guess_substitute_path(Args)\"\n\tr[\"is_multiclient\"] = starlark.NewBuiltin(\"is_multiclient\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.IsMulticlientIn\n\t\tvar rpcRet rpc2.IsMulticlientOut\n\t\terr := env.ctx.Client().CallAPI(\"IsMulticlient\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"is_multiclient\"] = \"builtin is_multiclient()\"\n\tr[\"last_modified\"] = starlark.NewBuiltin(\"last_modified\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.LastModifiedIn\n\t\tvar rpcRet rpc2.LastModifiedOut\n\t\terr := env.ctx.Client().CallAPI(\"LastModified\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"last_modified\"] = \"builtin last_modified()\"\n\tr[\"breakpoints\"] = starlark.NewBuiltin(\"breakpoints\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListBreakpointsIn\n\t\tvar rpcRet rpc2.ListBreakpointsOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.All, \"All\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"All\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.All, \"All\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListBreakpoints\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"breakpoints\"] = \"builtin breakpoints(All)\\n\\nbreakpoints gets all breakpoints.\"\n\tr[\"checkpoints\"] = starlark.NewBuiltin(\"checkpoints\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListCheckpointsIn\n\t\tvar rpcRet rpc2.ListCheckpointsOut\n\t\terr := env.ctx.Client().CallAPI(\"ListCheckpoints\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"checkpoints\"] = \"builtin checkpoints()\"\n\tr[\"dynamic_libraries\"] = starlark.NewBuiltin(\"dynamic_libraries\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListDynamicLibrariesIn\n\t\tvar rpcRet rpc2.ListDynamicLibrariesOut\n\t\terr := env.ctx.Client().CallAPI(\"ListDynamicLibraries\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"dynamic_libraries\"] = \"builtin dynamic_libraries()\"\n\tr[\"function_args\"] = starlark.NewBuiltin(\"function_args\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListFunctionArgsIn\n\t\tvar rpcRet rpc2.ListFunctionArgsOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Scope, \"Scope\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Scope = env.ctx.Scope()\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Cfg = env.ctx.LoadConfig()\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Scope\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Scope, \"Scope\")\n\t\t\tcase \"Cfg\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListFunctionArgs\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"function_args\"] = \"builtin function_args(Scope, Cfg)\\n\\nfunction_args lists all arguments to the current function\"\n\tr[\"functions\"] = starlark.NewBuiltin(\"functions\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListFunctionsIn\n\t\tvar rpcRet rpc2.ListFunctionsOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Filter, \"Filter\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.FollowCalls, \"FollowCalls\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Filter\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Filter, \"Filter\")\n\t\t\tcase \"FollowCalls\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.FollowCalls, \"FollowCalls\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListFunctions\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"functions\"] = \"builtin functions(Filter, FollowCalls)\\n\\nfunctions lists all functions in the process matching filter.\"\n\tr[\"goroutines\"] = starlark.NewBuiltin(\"goroutines\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListGoroutinesIn\n\t\tvar rpcRet rpc2.ListGoroutinesOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Start, \"Start\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Count, \"Count\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.Filters, \"Filters\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 3 && args[3] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[3], &rpcArgs.GoroutineGroupingOptions, \"GoroutineGroupingOptions\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 4 && args[4] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[4], &rpcArgs.EvalScope, \"EvalScope\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\tscope := env.ctx.Scope()\n\t\t\trpcArgs.EvalScope = &scope\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Start\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Start, \"Start\")\n\t\t\tcase \"Count\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Count, \"Count\")\n\t\t\tcase \"Filters\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Filters, \"Filters\")\n\t\t\tcase \"GoroutineGroupingOptions\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.GoroutineGroupingOptions, \"GoroutineGroupingOptions\")\n\t\t\tcase \"EvalScope\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.EvalScope, \"EvalScope\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListGoroutines\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"goroutines\"] = \"builtin goroutines(Start, Count, Filters, GoroutineGroupingOptions, EvalScope)\\n\\ngoroutines lists all goroutines.\\nIf Count is specified ListGoroutines will return at the first Count\\ngoroutines and an index in Nextg, that can be passed as the Start\\nparameter, to get more goroutines from ListGoroutines.\\nPassing a value of Start that wasn't returned by ListGoroutines will skip\\nan undefined number of goroutines.\\n\\nIf arg.Filters are specified the list of returned goroutines is filtered\\napplying the specified filters.\\nFor example:\\n\\n\\tListGoroutinesFilter{ Kind: ListGoroutinesFilterUserLoc, Negated: false, Arg: \\\"afile.go\\\" }\\n\\nwill only return goroutines whose UserLoc contains \\\"afile.go\\\" as a substring.\\nMore specifically a goroutine matches a location filter if the specified\\nlocation, formatted like this:\\n\\n\\tfilename:lineno in function\\n\\ncontains Arg[0] as a substring.\\n\\nFilters can also be applied to goroutine labels:\\n\\n\\tListGoroutineFilter{ Kind: ListGoroutinesFilterLabel, Negated: false, Arg: \\\"key=value\\\" }\\n\\nthis filter will only return goroutines that have a key=value label.\\n\\nIf arg.GroupBy is not GoroutineFieldNone then the goroutines will\\nbe grouped with the specified criterion.\\nIf the value of arg.GroupBy is GoroutineLabel goroutines will\\nbe grouped by the value of the label with key GroupByKey.\\nFor each group a maximum of MaxGroupMembers example goroutines are\\nreturned, as well as the total number of goroutines in the group.\"\n\tr[\"local_vars\"] = starlark.NewBuiltin(\"local_vars\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListLocalVarsIn\n\t\tvar rpcRet rpc2.ListLocalVarsOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Scope, \"Scope\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Scope = env.ctx.Scope()\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Cfg = env.ctx.LoadConfig()\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Scope\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Scope, \"Scope\")\n\t\t\tcase \"Cfg\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListLocalVars\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"local_vars\"] = \"builtin local_vars(Scope, Cfg)\\n\\nlocal_vars lists all local variables in scope.\"\n\tr[\"package_vars\"] = starlark.NewBuiltin(\"package_vars\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListPackageVarsIn\n\t\tvar rpcRet rpc2.ListPackageVarsOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Filter, \"Filter\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Cfg = env.ctx.LoadConfig()\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Filter\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Filter, \"Filter\")\n\t\t\tcase \"Cfg\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListPackageVars\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"package_vars\"] = \"builtin package_vars(Filter, Cfg)\\n\\npackage_vars lists all package variables in the context of the current thread.\"\n\tr[\"packages_build_info\"] = starlark.NewBuiltin(\"packages_build_info\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListPackagesBuildInfoIn\n\t\tvar rpcRet rpc2.ListPackagesBuildInfoOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.IncludeFiles, \"IncludeFiles\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Filter, \"Filter\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"IncludeFiles\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.IncludeFiles, \"IncludeFiles\")\n\t\t\tcase \"Filter\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Filter, \"Filter\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListPackagesBuildInfo\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"packages_build_info\"] = \"builtin packages_build_info(IncludeFiles, Filter)\\n\\npackages_build_info returns the list of packages used by the program along with\\nthe directory where each package was compiled and optionally the list of\\nfiles constituting the package.\\nNote that the directory path is a best guess and may be wrong is a tool\\nother than cmd/go is used to perform the build.\"\n\tr[\"registers\"] = starlark.NewBuiltin(\"registers\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListRegistersIn\n\t\tvar rpcRet rpc2.ListRegistersOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.ThreadID, \"ThreadID\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.IncludeFp, \"IncludeFp\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.Scope, \"Scope\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\tscope := env.ctx.Scope()\n\t\t\trpcArgs.Scope = &scope\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"ThreadID\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.ThreadID, \"ThreadID\")\n\t\t\tcase \"IncludeFp\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.IncludeFp, \"IncludeFp\")\n\t\t\tcase \"Scope\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Scope, \"Scope\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListRegisters\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"registers\"] = \"builtin registers(ThreadID, IncludeFp, Scope)\\n\\nregisters lists registers and their values.\\nIf ListRegistersIn.Scope is not nil the registers of that eval scope will\\nbe returned, otherwise ListRegistersIn.ThreadID will be used.\"\n\tr[\"sources\"] = starlark.NewBuiltin(\"sources\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListSourcesIn\n\t\tvar rpcRet rpc2.ListSourcesOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Filter, \"Filter\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Filter\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Filter, \"Filter\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListSources\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"sources\"] = \"builtin sources(Filter)\\n\\nsources lists all source files in the process matching filter.\"\n\tr[\"targets\"] = starlark.NewBuiltin(\"targets\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListTargetsIn\n\t\tvar rpcRet rpc2.ListTargetsOut\n\t\terr := env.ctx.Client().CallAPI(\"ListTargets\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"targets\"] = \"builtin targets()\\n\\ntargets returns the list of targets we are currently attached to.\"\n\tr[\"threads\"] = starlark.NewBuiltin(\"threads\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListThreadsIn\n\t\tvar rpcRet rpc2.ListThreadsOut\n\t\terr := env.ctx.Client().CallAPI(\"ListThreads\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"threads\"] = \"builtin threads()\\n\\nthreads lists all threads.\"\n\tr[\"types\"] = starlark.NewBuiltin(\"types\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ListTypesIn\n\t\tvar rpcRet rpc2.ListTypesOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Filter, \"Filter\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Filter\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Filter, \"Filter\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ListTypes\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"types\"] = \"builtin types(Filter)\\n\\ntypes lists all types in the process matching filter.\"\n\tr[\"process_pid\"] = starlark.NewBuiltin(\"process_pid\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ProcessPidIn\n\t\tvar rpcRet rpc2.ProcessPidOut\n\t\terr := env.ctx.Client().CallAPI(\"ProcessPid\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"process_pid\"] = \"builtin process_pid()\\n\\nprocess_pid returns the pid of the process we are debugging.\"\n\tr[\"recorded\"] = starlark.NewBuiltin(\"recorded\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.RecordedIn\n\t\tvar rpcRet rpc2.RecordedOut\n\t\terr := env.ctx.Client().CallAPI(\"Recorded\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"recorded\"] = \"builtin recorded()\"\n\tr[\"restart\"] = starlark.NewBuiltin(\"restart\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.RestartIn\n\t\tvar rpcRet rpc2.RestartOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Position, \"Position\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.ResetArgs, \"ResetArgs\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.NewArgs, \"NewArgs\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 3 && args[3] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[3], &rpcArgs.Rerecord, \"Rerecord\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 4 && args[4] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[4], &rpcArgs.Rebuild, \"Rebuild\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 5 && args[5] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[5], &rpcArgs.NewRedirects, \"NewRedirects\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Position\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Position, \"Position\")\n\t\t\tcase \"ResetArgs\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.ResetArgs, \"ResetArgs\")\n\t\t\tcase \"NewArgs\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.NewArgs, \"NewArgs\")\n\t\t\tcase \"Rerecord\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Rerecord, \"Rerecord\")\n\t\t\tcase \"Rebuild\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Rebuild, \"Rebuild\")\n\t\t\tcase \"NewRedirects\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.NewRedirects, \"NewRedirects\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"Restart\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"restart\"] = \"builtin restart(Position, ResetArgs, NewArgs, Rerecord, Rebuild, NewRedirects)\\n\\nrestart restarts program.\"\n\tr[\"set_expr\"] = starlark.NewBuiltin(\"set_expr\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.SetIn\n\t\tvar rpcRet rpc2.SetOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Scope, \"Scope\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t} else {\n\t\t\trpcArgs.Scope = env.ctx.Scope()\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Symbol, \"Symbol\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.Value, \"Value\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Scope\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Scope, \"Scope\")\n\t\t\tcase \"Symbol\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Symbol, \"Symbol\")\n\t\t\tcase \"Value\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Value, \"Value\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"Set\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"set_expr\"] = \"builtin set_expr(Scope, Symbol, Value)\\n\\nset_expr sets the value of a variable. Only numerical types and\\npointers are currently supported.\"\n\tr[\"stacktrace\"] = starlark.NewBuiltin(\"stacktrace\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.StacktraceIn\n\t\tvar rpcRet rpc2.StacktraceOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Id, \"Id\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Depth, \"Depth\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 2 && args[2] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[2], &rpcArgs.Full, \"Full\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 3 && args[3] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[3], &rpcArgs.Defers, \"Defers\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 4 && args[4] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[4], &rpcArgs.Opts, \"Opts\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 5 && args[5] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[5], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 6 && args[6] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[6], &rpcArgs.Skip, \"Skip\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Id\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Id, \"Id\")\n\t\t\tcase \"Depth\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Depth, \"Depth\")\n\t\t\tcase \"Full\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Full, \"Full\")\n\t\t\tcase \"Defers\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Defers, \"Defers\")\n\t\t\tcase \"Opts\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Opts, \"Opts\")\n\t\t\tcase \"Cfg\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Cfg, \"Cfg\")\n\t\t\tcase \"Skip\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Skip, \"Skip\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"Stacktrace\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"stacktrace\"] = \"builtin stacktrace(Id, Depth, Full, Defers, Opts, Cfg, Skip)\\n\\nstacktrace returns stacktrace of goroutine Id up to the specified Depth.\\n\\nIf Full is set it will also the variable of all local variables\\nand function arguments of all stack frames.\"\n\tr[\"state\"] = starlark.NewBuiltin(\"state\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.StateIn\n\t\tvar rpcRet rpc2.StateOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.NonBlocking, \"NonBlocking\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"NonBlocking\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.NonBlocking, \"NonBlocking\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"State\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"state\"] = \"builtin state(NonBlocking)\\n\\nstate returns the current debugger state.\"\n\tr[\"toggle_breakpoint\"] = starlark.NewBuiltin(\"toggle_breakpoint\", func(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\tif err := isCancelled(thread); err != nil {\n\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t}\n\t\tvar rpcArgs rpc2.ToggleBreakpointIn\n\t\tvar rpcRet rpc2.ToggleBreakpointOut\n\t\tif len(args) > 0 && args[0] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[0], &rpcArgs.Id, \"Id\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tif len(args) > 1 && args[1] != starlark.None {\n\t\t\terr := unmarshalStarlarkValue(args[1], &rpcArgs.Name, \"Name\")\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\tfor _, kv := range kwargs {\n\t\t\tvar err error\n\t\t\tswitch kv[0].(starlark.String) {\n\t\t\tcase \"Id\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Id, \"Id\")\n\t\t\tcase \"Name\":\n\t\t\t\terr = unmarshalStarlarkValue(kv[1], &rpcArgs.Name, \"Name\")\n\t\t\tdefault:\n\t\t\t\terr = fmt.Errorf(\"unknown argument %q\", kv[0])\n\t\t\t}\n\t\t\tif err != nil {\n\t\t\t\treturn starlark.None, decorateError(thread, err)\n\t\t\t}\n\t\t}\n\t\terr := env.ctx.Client().CallAPI(\"ToggleBreakpoint\", &rpcArgs, &rpcRet)\n\t\tif err != nil {\n\t\t\treturn starlark.None, err\n\t\t}\n\t\treturn env.interfaceToStarlarkValue(&rpcRet), nil\n\t})\n\tdoc[\"toggle_breakpoint\"] = \"builtin toggle_breakpoint(Id, Name)\\n\\ntoggle_breakpoint toggles on or off a breakpoint by Name (if Name is not an\\nempty string) or by ID.\"\n\treturn r, doc\n}\n"
  },
  {
    "path": "pkg/terminal/starlark.go",
    "content": "package terminal\n\nimport (\n\t\"slices\"\n\n\t\"github.com/go-delve/delve/pkg/terminal/starbind\"\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\ntype starlarkContext struct {\n\tterm *Term\n}\n\nvar _ starbind.Context = starlarkContext{}\n\nfunc (ctx starlarkContext) Client() service.Client {\n\treturn ctx.term.client\n}\n\nfunc (ctx starlarkContext) RegisterCommand(name, helpMsg string, fn func(args string) error, allowedPrefixes int) {\n\tcmdfn := func(t *Term, callCtx callContext, args string) error {\n\t\t// If called with onPrefix, add the full command (name + args) to the breakpoint's CustomCommands\n\t\tif callCtx.Prefix == onPrefix {\n\t\t\tif callCtx.Breakpoint == nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tfullCmd := name\n\t\t\tif args != \"\" {\n\t\t\t\tfullCmd = name + \" \" + args\n\t\t\t}\n\t\t\tcallCtx.Breakpoint.CustomCommands = append(callCtx.Breakpoint.CustomCommands, fullCmd)\n\t\t\treturn nil\n\t\t}\n\t\treturn fn(args)\n\t}\n\n\tfound := false\n\tfor i := range ctx.term.cmds.cmds {\n\t\tcmd := &ctx.term.cmds.cmds[i]\n\t\tif slices.Contains(cmd.aliases, name) {\n\t\t\tcmd.cmdFn = cmdfn\n\t\t\tcmd.helpMsg = helpMsg\n\t\t\tcmd.allowedPrefixes = cmdPrefix(allowedPrefixes)\n\t\t\tfound = true\n\t\t}\n\t\tif found {\n\t\t\tbreak\n\t\t}\n\t}\n\tif !found {\n\t\tnewcmd := command{\n\t\t\taliases:         []string{name},\n\t\t\thelpMsg:         helpMsg,\n\t\t\tcmdFn:           cmdfn,\n\t\t\tallowedPrefixes: cmdPrefix(allowedPrefixes),\n\t\t}\n\t\tctx.term.cmds.cmds = append(ctx.term.cmds.cmds, newcmd)\n\t}\n}\n\nfunc (ctx starlarkContext) CallCommand(cmdstr string) error {\n\treturn ctx.term.cmds.Call(cmdstr, ctx.term)\n}\n\nfunc (ctx starlarkContext) Scope() api.EvalScope {\n\treturn api.EvalScope{GoroutineID: -1, Frame: ctx.term.cmds.frame}\n}\n\nfunc (ctx starlarkContext) LoadConfig() api.LoadConfig {\n\treturn ctx.term.loadConfig()\n}\n"
  },
  {
    "path": "pkg/terminal/starlark_test.go",
    "content": "package terminal\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestStarlarkExamples(t *testing.T) {\n\twithTestTerminal(\"testvariables2\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue\")\n\t\tt.Run(\"goroutine_start_line\", func(t *testing.T) { testStarlarkExampleGoroutineStartLine(t, term) })\n\t\tt.Run(\"create_breakpoint_main\", func(t *testing.T) { testStarlarkExampleCreateBreakpointmain(t, term) })\n\t\tt.Run(\"switch_to_main_goroutine\", func(t *testing.T) { testStarlarkExampleSwitchToMainGoroutine(t, term) })\n\t\tt.Run(\"linked_list\", func(t *testing.T) { testStarlarkExampleLinkedList(t, term) })\n\t\tt.Run(\"echo_expr\", func(t *testing.T) { testStarlarkEchoExpr(t, term) })\n\t\tt.Run(\"find_array\", func(t *testing.T) { testStarlarkFindArray(t, term) })\n\t\tt.Run(\"map_iteration\", func(t *testing.T) { testStarlarkMapIteration(t, term) })\n\t\tt.Run(\"amend_breakpoint\", func(t *testing.T) { testStarlarkAmendBreakpoint(t, term) })\n\t})\n}\n\nfunc testStarlarkExampleGoroutineStartLine(t *testing.T, term *FakeTerminal) {\n\tterm.MustExec(\"source \" + findStarFile(\"goroutine_start_line\"))\n\tout1 := term.MustExec(\"gsl\")\n\tt.Logf(\"gsl: %q\", out1)\n\tif !strings.Contains(out1, \"func main() {\") {\n\t\tt.Fatalf(\"goroutine_start_line example failed\")\n\t}\n}\n\nfunc testStarlarkExampleCreateBreakpointmain(t *testing.T, term *FakeTerminal) {\n\tout2p1 := term.MustExec(\"source \" + findStarFile(\"create_breakpoint_main\"))\n\tt.Logf(\"create_breakpoint_main: %s\", out2p1)\n\tout2p2 := term.MustExec(\"breakpoints\")\n\tt.Logf(\"breakpoints: %q\", out2p2)\n\tif !strings.Contains(out2p2, \"main.afunc1\") {\n\t\tt.Fatalf(\"create_breakpoint_runtime_func example failed\")\n\t}\n\tbps, err := term.client.ListBreakpoints(false)\n\tif err != nil {\n\t\tt.Fatalf(\"Could not clear breakpoints: %v\\n\", err)\n\t}\n\tfor _, bp := range bps {\n\t\tif bp.ID <= 0 {\n\t\t\tcontinue\n\t\t}\n\t\t_, err = term.client.ClearBreakpoint(bp.ID)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Could not clear breakpoints: %v\\n\", err)\n\t\t}\n\t}\n}\n\nfunc testStarlarkExampleSwitchToMainGoroutine(t *testing.T, term *FakeTerminal) {\n\tgs, _, err := term.client.ListGoroutines(0, 0)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tfor _, g := range gs {\n\t\tif g.ID != 1 {\n\t\t\tt.Logf(\"switching to goroutine %d\\n\", g.ID)\n\t\t\tterm.MustExec(fmt.Sprintf(\"goroutine %d\", g.ID))\n\t\t\tbreak\n\t\t}\n\t}\n\tterm.MustExec(\"source \" + findStarFile(\"switch_to_main_goroutine\"))\n\tout3p1 := term.MustExec(\"switch_to_main_goroutine\")\n\tout3p2 := term.MustExec(\"goroutine\")\n\tt.Logf(\"%q\\n\", out3p1)\n\tt.Logf(\"%q\\n\", out3p2)\n\tif !strings.Contains(out3p2, \"Goroutine 1:\\n\") {\n\t\tt.Fatalf(\"switch_to_main_goroutine example failed\")\n\t}\n}\n\nfunc testStarlarkExampleLinkedList(t *testing.T, term *FakeTerminal) {\n\tterm.MustExec(\"source \" + findStarFile(\"linked_list\"))\n\tout := term.MustExec(\"linked_list ll Next 3\")\n\tt.Logf(\"%q\\n\", out)\n\tif n := len(strings.Split(strings.TrimRight(out, \"\\n\"), \"\\n\")); n != 3 {\n\t\tt.Fatalf(\"wrong number of lines in output %d\", n)\n\t}\n\n\tout = term.MustExec(\"linked_list ll Next 100\")\n\tt.Logf(\"%q\\n\", out)\n\tlines := strings.Split(strings.TrimRight(out, \"\\n\"), \"\\n\")\n\tfor i, line := range lines {\n\t\tif i == 5 {\n\t\t\tif line != \"5: *main.List nil\" {\n\t\t\t\tt.Errorf(\"mismatched line %d %q\", i, line)\n\t\t\t}\n\t\t} else {\n\t\t\tif !strings.HasPrefix(line, fmt.Sprintf(\"%d: *main.List {N: %d, Next: \", i, i)) {\n\t\t\t\tt.Errorf(\"mismatched line %d %q\", i, line)\n\t\t\t}\n\t\t}\n\t}\n\tif len(lines) != 6 {\n\t\tt.Fatalf(\"wrong number of output lines %d\", len(lines))\n\t}\n}\n\nfunc testStarlarkEchoExpr(t *testing.T, term *FakeTerminal) {\n\tterm.MustExec(\"source \" + findStarFile(\"echo_expr\"))\n\tout := term.MustExec(\"echo_expr 2+2, 1-1, 2*3\")\n\tt.Logf(\"echo_expr %q\", out)\n\tif out != \"a 4 b 0 c 6\\n\" {\n\t\tt.Error(\"output mismatch\")\n\t}\n}\n\nfunc testStarlarkFindArray(t *testing.T, term *FakeTerminal) {\n\tterm.MustExec(\"source \" + findStarFile(\"find_array\"))\n\tout := term.MustExec(`find_array \"s2\", lambda x: x.A == 5`)\n\tt.Logf(\"find_array (1) %q\", out)\n\tif out != \"found 2\\n\" {\n\t\tt.Error(\"output mismatch\")\n\t}\n\tout = term.MustExec(`find_array \"s2\", lambda x: x.A == 20`)\n\tt.Logf(\"find_array (2) %q\", out)\n\tif out != \"not found\\n\" {\n\t\tt.Error(\"output mismatch\")\n\t}\n}\n\nfunc testStarlarkMapIteration(t *testing.T, term *FakeTerminal) {\n\tout := term.MustExec(\"source \" + findStarFile(\"starlark_map_iteration\"))\n\tif !strings.Contains(out, \"values=66\") {\n\t\tt.Fatalf(\"testStarlarkMapIteration example failed\")\n\t}\n\tt.Logf(\"%s\", out)\n}\n\nfunc testStarlarkAmendBreakpoint(t *testing.T, term *FakeTerminal) {\n\tterm.MustExec(\"break afuncbreak main.afunc\")\n\tout := term.MustExec(\"source \" + findStarFile(\"amend_breakpoint\"))\n\tt.Logf(\"%s\", out)\n\tif !strings.Contains(out, \"Stacktrace:2\") || !strings.Contains(out, `HitCond:\"== 2\"`) {\n\t\tt.Fatalf(\"wrong output\")\n\t}\n\tterm.MustExec(\"clear afuncbreak\")\n}\n\nfunc TestStarlarkVariable(t *testing.T) {\n\twithTestTerminal(\"testvariables2\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue\")\n\t\tfor _, tc := range []struct{ expr, tgt string }{\n\t\t\t{`v = eval(None, \"i1\").Variable; print(v.Value)`, \"1\"},\n\t\t\t{`v = eval(None, \"f1\").Variable; print(v.Value)`, \"3.0\"},\n\t\t\t{`v = eval(None, \"as1\").Variable; print(v.Value.A)`, \"1\"},\n\t\t\t{`v = eval(None, \"as1\").Variable; print(v.Value.B)`, \"1\"},\n\t\t\t{`v = eval(None, \"as1\").Variable; print(v.Value[\"A\"])`, \"1\"},\n\t\t\t{`v = eval(None, \"s1\").Variable; print(v.Value[0])`, \"one\"},\n\t\t\t{`v = eval(None, \"nilstruct\").Variable; print(v.Value)`, \"*main.astruct nil\"},\n\t\t\t{`v = eval(None, \"nilstruct\").Variable; print(v.Value[0])`, \"None\"},\n\t\t\t{`v = eval(None, 'm1[\"Malone\"]').Variable; print(v.Value)`, \"main.astruct {A: 2, B: 3}\"},\n\t\t\t{`v = eval(None, \"m1\").Variable; print(v.Value[\"Malone\"])`, \"main.astruct {A: 2, B: 3}\"},\n\t\t\t{`v = eval(None, \"m2\").Variable; print(v.Value[1])`, \"*main.astruct {A: 10, B: 11}\"},\n\t\t\t{`v = eval(None, \"c1.pb\").Variable; print(v.Value)`, \"*main.bstruct {a: main.astruct {A: 1, B: 2}}\"},\n\t\t\t{`v = eval(None, \"c1.pb\").Variable; print(v.Value[0])`, \"main.bstruct {a: main.astruct {A: 1, B: 2}}\"},\n\t\t\t{`v = eval(None, \"c1.pb\").Variable; print(v.Value.a.B)`, \"2\"},\n\t\t\t{`v = eval(None, \"iface1\").Variable; print(v.Value[0])`, \"*main.astruct {A: 1, B: 2}\"},\n\t\t\t{`v = eval(None, \"iface1\").Variable; print(v.Value[0][0])`, \"main.astruct {A: 1, B: 2}\"},\n\t\t\t{`v = eval(None, \"iface1\").Variable; print(v.Value.A)`, \"1\"},\n\n\t\t\t{`v = eval(None, \"as1\", {\"MaxStructFields\": -1}).Variable; print(v.Value.A)`, \"1\"},\n\t\t\t{`v = eval({\"GoroutineID\": -1}, \"as1\").Variable; print(v.Value.A)`, \"1\"},\n\t\t\t{`v = eval(cur_scope(), \"as1\").Variable; print(v.Value.A)`, \"1\"},\n\t\t\t{`v = eval(None, \"as1\", default_load_config()).Variable; print(v.Value.A)`, \"1\"},\n\n\t\t\t// named constant values\n\t\t\t{`v = eval(None, \"enum1\").Variable; print(v.Value)`, \"255\"},\n\t\t\t{`v = eval(None, \"enum2\").Variable; print(v.Value)`, \"hi\"},\n\t\t\t{`v = eval(None, \"enum3\").Variable; print(v.Value)`, \"42\"},\n\t\t\t{`v = eval(None, \"enum4\").Variable; print(v.Value)`, \"9001\"},\n\t\t\t{`v = eval(None, \"enum5\").Variable; print(v.Value)`, \"True\"},\n\t\t\t{`v = eval(None, \"enum6\").Variable; print(v.Value)`, \"3.14\"},\n\n\t\t\t// From starlark.md's examples\n\t\t\t{`v = eval(None, \"s2\").Variable; print(v.Value[0])`, \"main.astruct {A: 1, B: 2}\"},\n\t\t\t{`v = eval(None, \"s2\").Variable; print(v.Value[1].A)`, \"3\"},\n\t\t\t{`v = eval(None, \"s2\").Variable; print(v.Value[1].A + 10)`, \"13\"},\n\t\t\t{`v = eval(None, \"s2\").Variable; print(v.Value[1][\"B\"])`, \"4\"},\n\n\t\t\t// Using target object\n\t\t\t{`print(tgt.i1)`, \"1\"},\n\t\t\t{`print(tgt.m1[\"Malone\"])`, \"main.astruct {A: 2, B: 3}\"},\n\t\t\t{`print(tgt.c1.pb)`, \"*main.bstruct {a: main.astruct {A: 1, B: 2}}\"},\n\t\t\t{`print(tgt.c1.pb.a.B)`, \"2\"},\n\t\t} {\n\t\t\tout := strings.TrimSpace(term.MustExecStarlark(tc.expr))\n\t\t\tif out != tc.tgt {\n\t\t\t\tt.Errorf(\"for %q\\nexpected %q\\ngot %q\", tc.expr, tc.tgt, out)\n\t\t\t}\n\t\t}\n\t})\n}\n\n// Test that pointer variables that were not loaded don't lead to crashes when\n// used in Starlark scripts.\nfunc TestStarlarkVariablePointerNotLoaded(t *testing.T) {\n\twithTestTerminal(\"testvariables_pointers_not_loaded\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"continue\")\n\n\t\t// We're going to partially load some variables through the eval()\n\t\t// builtin. Then we're going to attempt to evaluate expressions which\n\t\t// try to access a field from a pointer variable that wasn't loaded\n\t\t// (i.e. a ptrVariableAsStarlarkValue with no children). The tests will\n\t\t// verify that we get an error. This is a regression test; we used to\n\t\t// panic.\n\t\tfor _, tc := range []struct{ name, script, expErr string }{\n\t\t\t{\n\t\t\t\t// In this test, we'll load v. v will have a child (i.e.\n\t\t\t\t// v.Children[0]), but because v is nil, v.Children[0] will not\n\t\t\t\t// be loaded. We'll turn v.Children[0] into a\n\t\t\t\t// ptrVariableAsStarlarkValue, and attempt to access a field on\n\t\t\t\t// it.\n\t\t\t\t//\n\t\t\t\t// v                   -> structAsStarlarkValue<api.Variable<**int>>\n\t\t\t\t// v.Children[0]       -> structAsStarlarkValue<api.Variable<*int>>\n\t\t\t\t// v.Children[0].Value -> ptrVariableAsStarlarkValue<*int> ; this pointer variable has not been loaded\n\t\t\t\tname: \"partial load because of nil ptr\",\n\t\t\t\tscript: `\nv = eval(\n\t\tNone, \"ptrPtr\", None\n\t).Variable\nv.Children[0].Value.XXX\n`,\n\t\t\t\texpErr: \"*int has no .XXX field or method\",\n\t\t\t},\n\t\t\t{\n\t\t\t\t// In this test, MaxStructFields = 10 and MaxVariableRecurse = 0\n\t\t\t\t// will cause us to load v, and v.Children[0] (in the sense that\n\t\t\t\t// v.Children[0] has a child), but _not_ load\n\t\t\t\t// v.Children[0].Children[0] (because the recursion limit is\n\t\t\t\t// exhausted by the descent into the top-level struct, so we\n\t\t\t\t// don't load what hides under the interface).\n\t\t\t\t//\n\t\t\t\t// v                               -> structAsStarlarkValue<api.Variable<StructWithInterface>>\n\t\t\t\t// v.Children[0]                   -> structAsStarlarkValue<api.Variable<interface{}>>\n\t\t\t\t// v.Children[0].Children[0]       -> structAsStarlarkValue<api.Variable<*int>>\n\t\t\t\t// v.Children[0].Children[0].Value -> ptrVariableAsStarlarkValue<*int> ; this pointer variable has not been loaded\n\t\t\t\tname: \"partial load because of recursion limit\",\n\t\t\t\tscript: `\nv = eval(\n\t\tNone, \"ba\", {\"MaxVariableRecurse\": 0, \"MaxStructFields\": 10}\n\t).Variable;\nv.Children[0].Children[0].Value.XXX\n`,\n\t\t\t\texpErr: \"*int has no .XXX field or method\",\n\t\t\t},\n\t\t} {\n\t\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\t\t_, err := term.ExecStarlark(tc.script)\n\t\t\t\tif err == nil {\n\t\t\t\t\tt.Fatalf(\"expected error %q, got success\", tc.expErr)\n\t\t\t\t}\n\t\t\t\tif !strings.Contains(err.Error(), tc.expErr) {\n\t\t\t\t\tt.Fatalf(\"expected error %q, got %q\", tc.expErr, err)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t})\n}\n\nfunc TestStarlarkChainBreakpointsExample(t *testing.T) {\n\twithTestTerminal(\"bphitcountchain\", t, func(term *FakeTerminal) {\n\t\tterm.MustExec(\"source \" + findStarFile(\"chain_breakpoints\"))\n\t\tterm.MustExec(\"break main.breakfunc1\")\n\t\tterm.MustExec(\"break main.breakfunc2\")\n\t\tterm.MustExec(\"break main.breakfunc3\")\n\t\tterm.MustExec(\"chain 1 2 3\")\n\t\tout := term.MustExec(\"breakpoints\")\n\t\tt.Log(out)\n\n\t\tnumphys := func(id int) int {\n\t\t\tbp, err := term.client.GetBreakpoint(id)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"Error getting breakpoint %d: %v\", id, err)\n\t\t\t}\n\t\t\treturn len(bp.Addrs)\n\t\t}\n\n\t\tassertPhysCount := func(lbp1cnt, lbp2cnt, lbp3cnt int) {\n\t\t\tt.Helper()\n\t\t\tt.Logf(\"lbp1: %d lbp2: %d lbp3: %d\", numphys(1), numphys(2), numphys(3))\n\t\t\tif numphys(1) != lbp1cnt || numphys(2) != lbp2cnt || numphys(3) != lbp3cnt {\n\t\t\t\tt.Fatal(\"Wrong number of physical breakpoints\")\n\t\t\t}\n\t\t}\n\n\t\tassertPhysCount(1, 0, 0)\n\n\t\tterm.MustExec(\"continue\")\n\t\tlistIsAt(t, term, \"frame 1 list\", 21, -1, -1)\n\n\t\tterm.MustExec(\"continue\")\n\t\tlistIsAt(t, term, \"frame 1 list\", 25, -1, -1)\n\n\t\tassertPhysCount(0, 1, 0)\n\n\t\tterm.MustExec(\"continue\")\n\t\tlistIsAt(t, term, \"frame 1 list\", 28, -1, -1)\n\n\t\tassertPhysCount(0, 0, 1)\n\t})\n}\n"
  },
  {
    "path": "pkg/terminal/terminal.go",
    "content": "package terminal\n\n//lint:file-ignore ST1005 errors here can be capitalized\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/rpc\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/derekparker/trie/v3\"\n\t\"github.com/go-delve/liner\"\n\n\t\"github.com/go-delve/delve/pkg/config\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/locspec\"\n\t\"github.com/go-delve/delve/pkg/terminal/colorize\"\n\t\"github.com/go-delve/delve/pkg/terminal/starbind\"\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\nconst (\n\thistoryFile                 string = \".dbg_history\"\n\tterminalHighlightEscapeCode string = \"\\033[%2dm\"\n\tterminalResetEscapeCode     string = \"\\033[0m\"\n\tdefaultPrompt                      = \"(dlv) \"\n)\n\nconst (\n\tansiBlack     = 30\n\tansiRed       = 31\n\tansiGreen     = 32\n\tansiYellow    = 33\n\tansiBlue      = 34\n\tansiMagenta   = 35\n\tansiCyan      = 36\n\tansiWhite     = 37\n\tansiBrBlack   = 90\n\tansiBrRed     = 91\n\tansiBrGreen   = 92\n\tansiBrYellow  = 93\n\tansiBrBlue    = 94\n\tansiBrMagenta = 95\n\tansiBrCyan    = 96\n\tansiBrWhite   = 97\n)\n\n// Term represents the terminal running dlv.\ntype Term struct {\n\tclient   service.Client\n\tconf     *config.Config\n\tline     *liner.State\n\tcmds     *Commands\n\tstdout   *transcriptWriter\n\tInitFile string\n\tdisplays []displayEntry\n\toldPid   int\n\n\tstackTraceColors api.StackTraceColors\n\n\thistoryFile *os.File\n\n\tstarlarkEnv *starbind.Env\n\n\tsubstitutePathRulesCache [][2]string\n\n\t// quitContinue is set to true by exitCommand to signal that the process\n\t// should be resumed before quitting.\n\tquitContinue bool\n\n\tlongCommandMu         sync.Mutex\n\tlongCommandCancelFlag bool\n\n\tquittingMutex sync.Mutex\n\tquitting      bool\n\n\ttraceNonInteractive bool\n\n\tdownloadsMu         sync.Mutex\n\tdownloadsInProgress bool\n\n\tgoVersionCache *goversion.GoVersion\n\t// customCommandsInvalidated is set when a runCmd is executed during custom command execution\n\tcustomCommandsInvalidated []bool\n}\n\ntype displayEntry struct {\n\texpr   string\n\tfmtstr string\n}\n\n// New returns a new Term.\nfunc New(client service.Client, conf *config.Config) *Term {\n\tcmds := DebugCommands(client)\n\tif conf != nil && conf.Aliases != nil {\n\t\tcmds.Merge(conf.Aliases)\n\t}\n\n\tif conf == nil {\n\t\tconf = &config.Config{}\n\t}\n\n\tt := &Term{\n\t\tclient: client,\n\t\tconf:   conf,\n\t\tline:   liner.NewLiner(),\n\t\tcmds:   cmds,\n\t\tstdout: &transcriptWriter{pw: &pagingWriter{w: os.Stdout}},\n\t}\n\tt.line.SetCtrlZStop(true)\n\n\tif strings.ToLower(os.Getenv(\"TERM\")) != \"dumb\" {\n\t\tt.stdout.pw = &pagingWriter{w: getColorableWriter()}\n\t\tt.stdout.colorEscapes = make(map[colorize.Style]string)\n\t\tt.stdout.colorEscapes[colorize.NormalStyle] = terminalResetEscapeCode\n\t}\n\n\tt.updateConfig()\n\n\tif client != nil {\n\t\tlcfg := t.loadConfig()\n\t\tclient.SetReturnValuesLoadConfig(&lcfg)\n\t\tif state, err := client.GetState(); err == nil {\n\t\t\tt.oldPid = state.Pid\n\t\t}\n\t\tfirstEventBinaryInfoDownload := true\n\t\tclient.SetEventsFn(func(event *api.Event) {\n\t\t\tswitch event.Kind {\n\t\t\tcase api.EventResumed:\n\t\t\t\tfirstEventBinaryInfoDownload = true\n\t\t\tcase api.EventBinaryInfoDownload:\n\t\t\t\tt.downloadsMu.Lock()\n\t\t\t\tt.downloadsInProgress = true\n\t\t\t\tt.downloadsMu.Unlock()\n\t\t\t\tif !firstEventBinaryInfoDownload {\n\t\t\t\t\tfmt.Fprintf(t.stdout, \"\\r\")\n\t\t\t\t\tif strings.ToLower(os.Getenv(\"TERM\")) != \"dumb\" {\n\t\t\t\t\t\tfmt.Fprintf(t.stdout, \"\\x1b[J\") // clear to the end of the line\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfmt.Fprintf(t.stdout, \"Downloading debug info for %s: %s (press ^C to cancel)\", event.BinaryInfoDownloadEventDetails.ImagePath, event.BinaryInfoDownloadEventDetails.Progress)\n\t\t\t\tfirstEventBinaryInfoDownload = false\n\t\t\tcase api.EventStopped:\n\t\t\t\tt.downloadsMu.Lock()\n\t\t\t\tt.downloadsInProgress = false\n\t\t\t\tt.downloadsMu.Unlock()\n\t\t\t\tif !firstEventBinaryInfoDownload {\n\t\t\t\t\tfmt.Fprintf(t.stdout, \"\\n\")\n\t\t\t\t}\n\t\t\tcase api.EventBreakpointMaterialized:\n\t\t\t\tbp := event.BreakpointMaterializedEventDetails.Breakpoint\n\t\t\t\tfile := t.formatPath(bp.File)\n\n\t\t\t\t// Append the function name.\n\t\t\t\tvar extra string\n\t\t\t\tif bp.FunctionName != \"\" {\n\t\t\t\t\textra = \" (\" + bp.FunctionName + \")\"\n\t\t\t\t}\n\n\t\t\t\tfmt.Fprintf(t.stdout, \"Breakpoint %d materialized at %s:%d%s\\n\", bp.ID, file, bp.Line, extra)\n\t\t\tcase api.EventProcessSpawned:\n\t\t\t\tfmt.Fprintf(t.stdout, \"Spawned new process '%s' (%d)\\n\", event.Cmdline, event.ProcessSpawnedEventDetails.PID)\n\t\t\t}\n\t\t})\n\t}\n\n\tt.starlarkEnv = starbind.New(starlarkContext{t}, t.stdout)\n\treturn t\n}\n\nfunc (t *Term) updateConfig() {\n\t// These are always called together.\n\tt.updateColorScheme()\n\tt.updateTab()\n}\n\nfunc (t *Term) updateColorScheme() {\n\tif t.stdout.colorEscapes == nil {\n\t\treturn\n\t}\n\n\tconf := t.conf\n\twd := func(s string, defaultCode int) string {\n\t\tif s == \"\" {\n\t\t\treturn fmt.Sprintf(terminalHighlightEscapeCode, defaultCode)\n\t\t}\n\t\treturn s\n\t}\n\tt.stdout.colorEscapes[colorize.KeywordStyle] = conf.SourceListKeywordColor\n\tt.stdout.colorEscapes[colorize.StringStyle] = wd(conf.SourceListStringColor, ansiGreen)\n\tt.stdout.colorEscapes[colorize.NumberStyle] = conf.SourceListNumberColor\n\tt.stdout.colorEscapes[colorize.CommentStyle] = wd(conf.SourceListCommentColor, ansiBrMagenta)\n\tt.stdout.colorEscapes[colorize.ArrowStyle] = wd(conf.SourceListArrowColor, ansiYellow)\n\tt.stdout.colorEscapes[colorize.TabStyle] = wd(conf.SourceListTabColor, ansiBrBlack)\n\tswitch x := conf.SourceListLineColor.(type) {\n\tcase string:\n\t\tt.stdout.colorEscapes[colorize.LineNoStyle] = x\n\tcase int:\n\t\tif (x > ansiWhite && x < ansiBrBlack) || x < ansiBlack || x > ansiBrWhite {\n\t\t\tx = ansiBlue\n\t\t}\n\t\tt.stdout.colorEscapes[colorize.LineNoStyle] = fmt.Sprintf(terminalHighlightEscapeCode, x)\n\tcase nil:\n\t\tt.stdout.colorEscapes[colorize.LineNoStyle] = fmt.Sprintf(terminalHighlightEscapeCode, ansiBlue)\n\t}\n\n\twd2 := func(s, defaultStr string) string {\n\t\tif s == \"\" {\n\t\t\treturn defaultStr\n\t\t}\n\t\treturn s\n\t}\n\n\tt.stackTraceColors.FunctionColor = wd2(conf.StackTraceFunctionColor, \"\\033[1m\")\n\tt.stackTraceColors.BasenameColor = wd2(conf.StackTraceBasenameColor, \"\\033[1m\")\n\tt.stackTraceColors.NormalColor = terminalResetEscapeCode\n}\n\nfunc (t *Term) updateTab() {\n\tt.stdout.altTabString = t.conf.Tab\n}\n\nfunc (t *Term) SetTraceNonInteractive() {\n\tt.traceNonInteractive = true\n}\n\nfunc (t *Term) IsTraceNonInteractive() bool {\n\treturn t.traceNonInteractive\n}\n\n// Close returns the terminal to its previous mode.\nfunc (t *Term) Close() {\n\tt.line.Close()\n\tif err := t.stdout.CloseTranscript(); err != nil {\n\t\tfmt.Fprintf(os.Stderr, \"error closing transcript file: %v\\n\", err)\n\t}\n}\n\nfunc (t *Term) sigintGuard(ch <-chan os.Signal, multiClient bool) {\n\tfor range ch {\n\t\tt.downloadsMu.Lock()\n\t\tdownloadsInProgress := t.downloadsInProgress\n\t\tt.downloadsMu.Unlock()\n\t\tif downloadsInProgress {\n\t\t\tt.client.CancelDownloads()\n\t\t\tcontinue\n\t\t}\n\n\t\tt.longCommandCancel()\n\t\tt.starlarkEnv.Cancel()\n\t\tstate, err := t.client.GetStateNonBlocking()\n\t\tif err == nil && state.Recording {\n\t\t\tfmt.Fprintf(t.stdout, \"received SIGINT, stopping recording (will not forward signal)\\n\")\n\t\t\terr := t.client.StopRecording()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%v\\n\", err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif err == nil && state.CoreDumping {\n\t\t\tfmt.Fprintf(t.stdout, \"received SIGINT, stopping dump\\n\")\n\t\t\terr := t.client.CoreDumpCancel()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%v\\n\", err)\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif multiClient {\n\t\t\tanswer, err := t.line.Prompt(\"Would you like to [p]ause the target (returning to Delve's prompt) or [q]uit this client (leaving the target running) [p/q]? \")\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"%v\", err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tanswer = strings.TrimSpace(answer)\n\t\t\tswitch answer {\n\t\t\tcase \"p\":\n\t\t\t\t_, err := t.client.Halt()\n\t\t\t\tif err != nil {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, \"%v\", err)\n\t\t\t\t}\n\t\t\tcase \"q\":\n\t\t\t\tt.quittingMutex.Lock()\n\t\t\t\tt.quitting = true\n\t\t\t\tt.quittingMutex.Unlock()\n\t\t\t\terr := t.client.Disconnect(false)\n\t\t\t\tif err != nil {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, \"%v\", err)\n\t\t\t\t} else {\n\t\t\t\t\tt.Close()\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tfmt.Fprintln(t.stdout, \"only p or q allowed\")\n\t\t\t}\n\t\t} else {\n\t\t\tfmt.Fprintf(t.stdout, \"received SIGINT, stopping process (will not forward signal)\\n\")\n\t\t\t_, err := t.client.Halt()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Fprintf(t.stdout, \"%v\", err)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Run begins running dlv in the terminal.\nfunc (t *Term) Run() (int, error) {\n\tdefer t.Close()\n\n\tmultiClient := t.client.IsMulticlient()\n\n\t// Send the debugger a halt command on SIGINT\n\tch := make(chan os.Signal, 1)\n\tsignal.Notify(ch, syscall.SIGINT)\n\tgo t.sigintGuard(ch, multiClient)\n\n\tcmds := trie.New[any]()\n\tfor _, cmd := range t.cmds.cmds {\n\t\tfor _, alias := range cmd.aliases {\n\t\t\tcmds.Add(alias, nil)\n\t\t}\n\t}\n\n\tvar fns *trie.Trie[any]\n\tvar locs *trie.Trie[any]\n\n\tt.line.SetCompleter(func(line string) (c []string) {\n\t\tcmd := t.cmds.Find(strings.Split(line, \" \")[0], noPrefix)\n\t\tswitch cmd.aliases[0] {\n\t\tcase \"break\", \"trace\", \"continue\":\n\t\t\tif spc := strings.LastIndex(line, \" \"); spc > 0 {\n\t\t\t\tprefix := line[:spc] + \" \"\n\t\t\t\tif fns == nil {\n\t\t\t\t\tfns = trie.New[any]()\n\t\t\t\t\tfuncs, _ := t.client.ListFunctions(\"\", 0)\n\t\t\t\t\tfor _, fn := range funcs {\n\t\t\t\t\t\tfns.Add(fn, nil)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfuncs := fns.FuzzySearch(line[spc+1:])\n\t\t\t\tfor _, f := range funcs {\n\t\t\t\t\tc = append(c, prefix+f)\n\t\t\t\t}\n\t\t\t}\n\t\tcase \"nullcmd\", \"nocmd\":\n\t\t\tcommands := cmds.FuzzySearch(strings.ToLower(line))\n\t\t\tc = append(c, commands...)\n\t\tcase \"print\", \"whatis\":\n\t\t\tif locs == nil {\n\t\t\t\tlocalVars, err := t.client.ListLocalVariables(\n\t\t\t\t\tapi.EvalScope{GoroutineID: -1, Frame: t.cmds.frame, DeferredCall: 0},\n\t\t\t\t\tapi.LoadConfig{},\n\t\t\t\t)\n\t\t\t\tif err != nil {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, \"Unable to get local variables: %s\\n\", err)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\n\t\t\t\tlocs = trie.New[any]()\n\t\t\t\tfor _, loc := range localVars {\n\t\t\t\t\tlocs.Add(loc.Name, nil)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif spc := strings.LastIndex(line, \" \"); spc > 0 {\n\t\t\t\tprefix := line[:spc] + \" \"\n\t\t\t\tlocals := locs.FuzzySearch(line[spc+1:])\n\t\t\t\tfor _, l := range locals {\n\t\t\t\t\tc = append(c, prefix+l)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn\n\t})\n\n\tfullHistoryFile, err := config.GetConfigFilePath(historyFile)\n\tif err != nil {\n\t\tfmt.Printf(\"Unable to load history file: %v.\", err)\n\t}\n\n\tt.historyFile, err = os.OpenFile(fullHistoryFile, os.O_RDWR|os.O_CREATE, 0600)\n\tif err != nil {\n\t\tfmt.Printf(\"Unable to open history file: %v. History will not be saved for this session.\", err)\n\t}\n\tif _, err := t.line.ReadHistory(t.historyFile); err != nil {\n\t\tfmt.Printf(\"Unable to read history file %s: %v\\n\", fullHistoryFile, err)\n\t}\n\n\tfmt.Println(\"Type 'help' for list of commands.\")\n\n\tif t.InitFile != \"\" {\n\t\terr := t.cmds.executeFile(t, t.InitFile)\n\t\tif err != nil {\n\t\t\tif _, ok := err.(ExitRequestError); ok {\n\t\t\t\treturn t.handleExit()\n\t\t\t}\n\t\t\tfmt.Fprintf(os.Stderr, \"Error executing init file: %s\\n\", err)\n\t\t}\n\t}\n\n\tvar lastCmd string\n\n\t// Ensure that the target process is neither running nor recording by\n\t// making a blocking call.\n\t_, _ = t.client.GetState()\n\n\tfor {\n\t\tlocs = nil\n\n\t\tprompt := defaultPrompt\n\t\tif t.conf != nil && t.conf.Prompt != \"\" {\n\t\t\tprompt = t.expandPrompt(t.conf.Prompt)\n\t\t}\n\n\t\tcmdstr, err := t.promptForInput(prompt)\n\t\tif err != nil {\n\t\t\tif err == io.EOF {\n\t\t\t\tfmt.Fprintln(t.stdout, \"exit\")\n\t\t\t\treturn t.handleExit()\n\t\t\t}\n\t\t\treturn 1, errors.New(\"Prompt for input failed.\\n\")\n\t\t}\n\t\tt.stdout.Echo(prompt + cmdstr + \"\\n\")\n\n\t\tif strings.TrimSpace(cmdstr) == \"\" {\n\t\t\tcmdstr = lastCmd\n\t\t}\n\n\t\tlastCmd = cmdstr\n\n\t\tif err := t.cmds.Call(cmdstr, t); err != nil {\n\t\t\tif _, ok := err.(ExitRequestError); ok {\n\t\t\t\treturn t.handleExit()\n\t\t\t}\n\t\t\t// The type information gets lost in serialization / de-serialization,\n\t\t\t// so we do a string compare on the error message to see if the process\n\t\t\t// has exited, or if the command actually failed.\n\t\t\tif strings.Contains(err.Error(), \"exited\") {\n\t\t\t\tfmt.Fprintln(os.Stderr, err.Error())\n\t\t\t} else {\n\t\t\t\tt.quittingMutex.Lock()\n\t\t\t\tquitting := t.quitting\n\t\t\t\tt.quittingMutex.Unlock()\n\t\t\t\tif quitting {\n\t\t\t\t\treturn t.handleExit()\n\t\t\t\t}\n\t\t\t\tfmt.Fprintf(os.Stderr, \"Command failed: %s\\n\", err)\n\t\t\t}\n\t\t}\n\n\t\tt.stdout.Flush()\n\t\tt.stdout.pw.Reset()\n\t}\n}\n\n// Substitutes directory to source file.\n//\n// Ensures that only directory is substituted, for example:\n// substitute from `/dir/subdir`, substitute to `/new`\n// for file path `/dir/subdir/file` will return file path `/new/file`.\n// for file path `/dir/subdir-2/file` substitution will not be applied.\n//\n// If more than one substitution rule is defined, the rules are applied\n// in the order they are defined, first rule that matches is used for\n// substitution.\nfunc (t *Term) substitutePath(path string) string {\n\tif t.conf == nil {\n\t\treturn path\n\t}\n\treturn locspec.SubstitutePath(path, t.substitutePathRules())\n}\n\nfunc (t *Term) substitutePathRules() [][2]string {\n\tif t.substitutePathRulesCache != nil {\n\t\treturn t.substitutePathRulesCache\n\t}\n\tif t.conf == nil || t.conf.SubstitutePath == nil {\n\t\treturn nil\n\t}\n\tspr := make([][2]string, 0, len(t.conf.SubstitutePath))\n\tfor _, r := range t.conf.SubstitutePath {\n\t\tspr = append(spr, [2]string{r.From, r.To})\n\t}\n\tt.substitutePathRulesCache = spr\n\treturn spr\n}\n\n// formatPath applies path substitution rules and shortens the resulting\n// path by replacing the current directory with './'\nfunc (t *Term) formatPath(path string) string {\n\tpath = t.substitutePath(path)\n\tworkingDir, _ := os.Getwd()\n\treturn strings.Replace(path, workingDir, \".\", 1)\n}\n\nfunc (t *Term) promptForInput(prompt string) (string, error) {\n\tif t.stdout.colorEscapes != nil && t.conf.PromptColor != \"\" {\n\t\tfmt.Fprint(os.Stdout, t.conf.PromptColor)\n\t\tdefer fmt.Fprint(os.Stdout, terminalResetEscapeCode)\n\t}\n\tl, err := t.line.Prompt(prompt)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tl = strings.TrimSuffix(l, \"\\n\")\n\tif l != \"\" {\n\t\tt.line.AppendHistory(l)\n\t}\n\n\treturn l, nil\n}\n\nvar yesno = func(line *liner.State, question, defaultAnswer string) (bool, error) {\n\tfor {\n\t\tanswer, err := line.Prompt(question)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tanswer = strings.ToLower(strings.TrimSpace(answer))\n\t\tif answer == \"\" {\n\t\t\tanswer = defaultAnswer\n\t\t}\n\t\tswitch answer {\n\t\tcase \"n\", \"no\":\n\t\t\treturn false, nil\n\t\tcase \"y\", \"yes\":\n\t\t\treturn true, nil\n\t\t}\n\t}\n}\n\nfunc (t *Term) handleExit() (int, error) {\n\tif t.historyFile != nil {\n\t\tif _, err := t.line.WriteHistory(t.historyFile); err != nil {\n\t\t\tfmt.Println(\"readline history error:\", err)\n\t\t}\n\t\tif err := t.historyFile.Close(); err != nil {\n\t\t\tfmt.Printf(\"error closing history file: %s\\n\", err)\n\t\t}\n\t}\n\n\tt.quittingMutex.Lock()\n\tquitting := t.quitting\n\tt.quittingMutex.Unlock()\n\tif quitting {\n\t\treturn 0, nil\n\t}\n\n\ts, err := t.client.GetState()\n\tif err != nil {\n\t\tif isErrProcessExited(err) {\n\t\t\tif t.client.IsMulticlient() {\n\t\t\t\tanswer, err := yesno(t.line, \"Remote process has exited. Would you like to kill the headless instance? [Y/n] \", \"yes\")\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 2, io.EOF\n\t\t\t\t}\n\t\t\t\tif answer {\n\t\t\t\t\tif err := t.client.Detach(true); err != nil {\n\t\t\t\t\t\treturn 1, err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\treturn 0, nil\n\t\t}\n\t\treturn 1, err\n\t}\n\tif !s.Exited {\n\t\tif t.quitContinue {\n\t\t\terr := t.client.Disconnect(true)\n\t\t\tif err != nil {\n\t\t\t\treturn 2, err\n\t\t\t}\n\t\t\treturn 0, nil\n\t\t}\n\n\t\tdoDetach := true\n\t\tif t.client.IsMulticlient() {\n\t\t\tanswer, err := yesno(t.line, \"Would you like to kill the headless instance? [Y/n] \", \"yes\")\n\t\t\tif err != nil {\n\t\t\t\treturn 2, io.EOF\n\t\t\t}\n\t\t\tdoDetach = answer\n\t\t}\n\n\t\tif doDetach {\n\t\t\tkill := true\n\t\t\tif t.client.AttachedToExistingProcess() {\n\t\t\t\tanswer, err := yesno(t.line, \"Would you like to kill the process? [Y/n] \", \"yes\")\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn 2, io.EOF\n\t\t\t\t}\n\t\t\t\tkill = answer\n\t\t\t}\n\t\t\tif err := t.client.Detach(kill); err != nil {\n\t\t\t\treturn 1, err\n\t\t\t}\n\t\t}\n\t}\n\treturn 0, nil\n}\n\n// loadConfig returns an api.LoadConfig with the parameters specified in\n// the configuration file.\nfunc (t *Term) loadConfig() api.LoadConfig {\n\tr := api.LoadConfig{FollowPointers: true, MaxVariableRecurse: 1, MaxStringLen: 64, MaxArrayValues: 64, MaxStructFields: -1}\n\n\tif t.conf != nil && t.conf.MaxStringLen != nil {\n\t\tr.MaxStringLen = *t.conf.MaxStringLen\n\t}\n\tif t.conf != nil && t.conf.MaxArrayValues != nil {\n\t\tr.MaxArrayValues = *t.conf.MaxArrayValues\n\t}\n\tif t.conf != nil && t.conf.MaxVariableRecurse != nil {\n\t\tr.MaxVariableRecurse = *t.conf.MaxVariableRecurse\n\t}\n\n\treturn r\n}\n\nfunc (t *Term) removeDisplay(n int) error {\n\tif n < 0 || n >= len(t.displays) {\n\t\treturn fmt.Errorf(\"%d is out of range\", n)\n\t}\n\tt.displays[n] = displayEntry{\"\", \"\"}\n\tfor i := len(t.displays) - 1; i >= 0; i-- {\n\t\tif t.displays[i].expr != \"\" {\n\t\t\tt.displays = t.displays[:i+1]\n\t\t\treturn nil\n\t\t}\n\t}\n\tt.displays = t.displays[:0]\n\treturn nil\n}\n\nfunc (t *Term) addDisplay(expr, fmtstr string) {\n\tt.displays = append(t.displays, displayEntry{expr: expr, fmtstr: fmtstr})\n}\n\nfunc (t *Term) printDisplay(i int) {\n\texpr, fmtstr := t.displays[i].expr, t.displays[i].fmtstr\n\tval, err := t.client.EvalVariable(api.EvalScope{GoroutineID: -1}, expr, ShortLoadConfig)\n\tif err != nil {\n\t\tif isErrProcessExited(err) {\n\t\t\treturn\n\t\t}\n\t\tfmt.Fprintf(t.stdout, \"%d: %s = error %v\\n\", i, expr, err)\n\t\treturn\n\t}\n\tfmt.Fprintf(t.stdout, \"%d: %s = %s\\n\", i, val.Name, val.StringWithOptions(\"\", fmtstr, 0))\n}\n\nfunc (t *Term) printDisplays() {\n\tfor i := range t.displays {\n\t\tif t.displays[i].expr != \"\" {\n\t\t\tt.printDisplay(i)\n\t\t}\n\t}\n}\n\nfunc (t *Term) onStop() {\n\tt.printDisplays()\n\tt.cmds.executeBreakpointCustomCommands(t)\n}\n\nfunc (t *Term) longCommandCancel() {\n\tt.longCommandMu.Lock()\n\tdefer t.longCommandMu.Unlock()\n\tt.longCommandCancelFlag = true\n}\n\nfunc (t *Term) longCommandStart() {\n\tt.longCommandMu.Lock()\n\tdefer t.longCommandMu.Unlock()\n\tt.longCommandCancelFlag = false\n}\n\nfunc (t *Term) longCommandCanceled() bool {\n\tt.longCommandMu.Lock()\n\tdefer t.longCommandMu.Unlock()\n\treturn t.longCommandCancelFlag\n}\n\n// RedirectTo redirects the output of this terminal to the specified writer.\nfunc (t *Term) RedirectTo(w io.Writer) {\n\tt.stdout.pw.w = w\n}\n\nfunc (t *Term) goVersion() *goversion.GoVersion {\n\tif t.goVersionCache != nil {\n\t\treturn t.goVersionCache\n\t}\n\tvers := t.client.GetVersion()\n\tv, _ := goversion.Parse(vers.TargetGoVersion)\n\tt.goVersionCache = &v\n\treturn t.goVersionCache\n}\n\nfunc (t *Term) expandPrompt(prompt string) string {\n\tconst escape = '$'\n\tvar malformedEscape = []byte(\"<malformed escape>\")\n\n\tvar hasState bool\n\tvar pid, tid int\n\tvar goid int64\n\n\tgetState := func() {\n\t\tif hasState {\n\t\t\treturn\n\t\t}\n\t\thasState = true\n\t\tstate, err := t.client.GetState()\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\tpid = state.Pid\n\t\tif state.SelectedGoroutine != nil {\n\t\t\tgoid = state.SelectedGoroutine.ID\n\t\t}\n\t\tif state.CurrentThread != nil {\n\t\t\ttid = state.CurrentThread.ID\n\t\t}\n\t}\n\n\tvar buf []byte\n\ts := 0\n\tflush := func(e int) {\n\t\tif s >= len(prompt) {\n\t\t\treturn\n\t\t}\n\t\tif buf == nil {\n\t\t\tbuf = make([]byte, 0, len(prompt))\n\t\t}\n\t\tbuf = append(buf, []byte(prompt[s:e])...)\n\t\ts = e\n\t}\n\tfor i := 0; i < len(prompt); i++ {\n\t\tif prompt[i] == escape {\n\t\t\tflush(i)\n\t\t\ti++\n\t\t\ts = i + 1\n\t\t\tif i >= len(prompt) {\n\t\t\t\tbuf = append(buf, malformedEscape...)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tswitch prompt[i] {\n\t\t\tcase '$':\n\t\t\t\tbuf = append(buf, '$')\n\t\t\tcase 'd':\n\t\t\t\tformatStr := time.RFC3339\n\t\t\t\tif i+1 < len(prompt) && prompt[i] == '{' {\n\t\t\t\t\tfs := i + 1\n\t\t\t\t\tfor ; i < len(prompt); i++ {\n\t\t\t\t\t\tif prompt[i] == '}' {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tformatStr = prompt[fs:i]\n\t\t\t\t\ts = i + 1\n\t\t\t\t}\n\t\t\t\tbuf = append(buf, []byte(time.Now().Format(formatStr))...)\n\t\t\tcase 'f':\n\t\t\t\tbuf = strconv.AppendInt(buf, int64(t.cmds.frame), 10)\n\t\t\tcase 'g':\n\t\t\t\tgetState()\n\t\t\t\tbuf = strconv.AppendInt(buf, goid, 10)\n\t\t\tcase 't':\n\t\t\t\tgetState()\n\t\t\t\tbuf = strconv.AppendInt(buf, int64(tid), 10)\n\t\t\tcase 'p':\n\t\t\t\tgetState()\n\t\t\t\tbuf = strconv.AppendInt(buf, int64(pid), 10)\n\t\t\tdefault:\n\t\t\t\tbuf = append(buf, malformedEscape...)\n\t\t\t}\n\t\t}\n\t}\n\tif buf == nil {\n\t\treturn prompt\n\t}\n\tflush(len(prompt))\n\treturn string(buf)\n}\n\n// isErrProcessExited returns true if `err` is an RPC error equivalent of proc.ErrProcessExited\nfunc isErrProcessExited(err error) bool {\n\trpcError, ok := err.(rpc.ServerError)\n\treturn ok && strings.Contains(rpcError.Error(), \"has exited with status\")\n}\n"
  },
  {
    "path": "pkg/terminal/terminal_other.go",
    "content": "//go:build !windows\n\npackage terminal\n\nimport (\n\t\"io\"\n\t\"os\"\n)\n\n// getColorableWriter simply returns stdout on\n// *nix machines.\nfunc getColorableWriter() io.Writer {\n\treturn os.Stdout\n}\n"
  },
  {
    "path": "pkg/terminal/terminal_test.go",
    "content": "package terminal\n\nimport (\n\t\"errors\"\n\t\"net/rpc\"\n\t\"testing\"\n)\n\nfunc TestIsErrProcessExited(t *testing.T) {\n\ttests := []struct {\n\t\tname   string\n\t\terr    error\n\t\tresult bool\n\t}{\n\t\t{\"empty error\", errors.New(\"\"), false},\n\t\t{\"non-ServerError\", errors.New(\"Process 33122 has exited with status 0\"), false},\n\t\t{\"ServerError with zero status\", rpc.ServerError(\"Process 33122 has exited with status 0\"), true},\n\t\t{\"ServerError with non-zero status\", rpc.ServerError(\"Process 2 has exited with status 25\"), true},\n\t}\n\tfor _, test := range tests {\n\t\tif isErrProcessExited(test.err) != test.result {\n\t\t\tt.Error(test.name)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "pkg/terminal/terminal_windows.go",
    "content": "package terminal\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/mattn/go-colorable\"\n)\n\n// getColorableWriter will return a writer that is capable\n// of interpreting ANSI escape codes for terminal colors.\nfunc getColorableWriter() io.Writer {\n\tif strings.ToLower(os.Getenv(\"ConEmuANSI\")) == \"on\" {\n\t\t// The ConEmu terminal is installed. Use it.\n\t\treturn os.Stdout\n\t}\n\n\tconst ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004\n\n\th, err := syscall.GetStdHandle(syscall.STD_OUTPUT_HANDLE)\n\tif err != nil {\n\t\treturn os.Stdout\n\t}\n\tvar m uint32\n\terr = syscall.GetConsoleMode(h, &m)\n\tif err != nil {\n\t\treturn os.Stdout\n\t}\n\tif m&ENABLE_VIRTUAL_TERMINAL_PROCESSING != 0 {\n\t\treturn os.Stdout\n\t}\n\treturn colorable.NewColorableStdout()\n}\n"
  },
  {
    "path": "pkg/version/buildinfo.go",
    "content": "package version\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"runtime/debug\"\n)\n\nfunc init() {\n\tbuildInfo = moduleBuildInfo\n}\n\nfunc moduleBuildInfo() string {\n\tinfo, ok := debug.ReadBuildInfo()\n\tif !ok {\n\t\treturn \"not built in module mode\"\n\t}\n\n\tbuf := new(bytes.Buffer)\n\tfmt.Fprintf(buf, \" mod\\t%s\\t%s\\t%s\\n\", info.Main.Path, info.Main.Version, info.Main.Sum)\n\tfor _, dep := range info.Deps {\n\t\tfmt.Fprintf(buf, \" dep\\t%s\\t%s\\t%s\", dep.Path, dep.Version, dep.Sum)\n\t\tif dep.Replace != nil {\n\t\t\tfmt.Fprintf(buf, \"\\t=> %s\\t%s\\t%s\", dep.Replace.Path, dep.Replace.Version, dep.Replace.Sum)\n\t\t}\n\t\tfmt.Fprintf(buf, \"\\n\")\n\t}\n\treturn buf.String()\n}\n"
  },
  {
    "path": "pkg/version/version.go",
    "content": "package version\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"strings\"\n)\n\n// Version represents the current version of Delve.\ntype Version struct {\n\tMajor    string\n\tMinor    string\n\tPatch    string\n\tMetadata string\n\tBuild    string\n}\n\n// DelveVersion is the current version of Delve.\nvar DelveVersion = Version{\n\tMajor: \"1\", Minor: \"26\", Patch: \"1\", Metadata: \"\",\n\tBuild: \"$Id: 3f95fba2a798b133eda85dd54b3b000c4f8ba68a $\",\n}\n\nfunc (v Version) String() string {\n\tfixBuild(&v)\n\tver := fmt.Sprintf(\"Version: %s.%s.%s\", v.Major, v.Minor, v.Patch)\n\tif v.Metadata != \"\" {\n\t\tver += \"-\" + v.Metadata\n\t}\n\treturn fmt.Sprintf(\"%s\\nBuild: %s\", ver, v.Build)\n}\n\nvar buildInfo = func() string {\n\treturn \"\"\n}\n\nfunc BuildInfo() string {\n\treturn fmt.Sprintf(\"%s\\n%s\", runtime.Version(), buildInfo())\n}\n\nfunc fixBuild(v *Version) {\n\t// Return if v.Build already set, but not if it is Git ident expand file blob hash\n\tif !strings.HasPrefix(v.Build, \"$Id: 3f95fba2a798b133eda85dd54b3b000c4f8ba68a $\") {\n\t\treturn\n\t}\n\n\tinfo, ok := debug.ReadBuildInfo()\n\tif !ok {\n\t\treturn\n\t}\n\n\tfor _, setting := range info.Settings {\n\t\tif setting.Key == \"vcs.revision\" {\n\t\t\tv.Build = setting.Value\n\t\t\treturn\n\t\t}\n\t}\n\n\t// If we didn't find vcs.revision, try the old key for backward compatibility\n\tfor _, setting := range info.Settings {\n\t\tif setting.Key == \"gitrevision\" {\n\t\t\tv.Build = setting.Value\n\t\t\treturn\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "service/api/command.go",
    "content": "package api\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\ntype PrintGoroutinesFlags uint8\n\nconst (\n\tPrintGoroutinesStack PrintGoroutinesFlags = 1 << iota\n\tPrintGoroutinesLabels\n\tPrintGoroutinesExec\n)\n\ntype FormatGoroutineLoc int\n\nconst (\n\tFglRuntimeCurrent = FormatGoroutineLoc(iota)\n\tFglUserCurrent\n\tFglGo\n\tFglStart\n)\n\nconst (\n\tmaxGroupMembers    = 5\n\tmaxGoroutineGroups = 50\n)\n\n// The number of goroutines we're going to request on each RPC call\nconst goroutineBatchSize = 10000\n\nfunc ParseGoroutineArgs(argstr string) ([]ListGoroutinesFilter, GoroutineGroupingOptions, FormatGoroutineLoc, PrintGoroutinesFlags, int, int, string, error) {\n\targs := strings.Split(argstr, \" \")\n\tvar filters []ListGoroutinesFilter\n\tvar group GoroutineGroupingOptions\n\tvar fgl = FglUserCurrent\n\tvar flags PrintGoroutinesFlags\n\tvar depth = 10\n\tvar batchSize = goroutineBatchSize\n\tvar cmd string\n\n\tgroup.MaxGroupMembers = maxGroupMembers\n\tgroup.MaxGroups = maxGoroutineGroups\n\n\tfor i := 0; i < len(args); i++ {\n\t\targ := args[i]\n\t\tswitch arg {\n\t\tcase \"-u\":\n\t\t\tfgl = FglUserCurrent\n\t\tcase \"-r\":\n\t\t\tfgl = FglRuntimeCurrent\n\t\tcase \"-g\":\n\t\t\tfgl = FglGo\n\t\tcase \"-s\":\n\t\t\tfgl = FglStart\n\t\tcase \"-l\":\n\t\t\tflags |= PrintGoroutinesLabels\n\t\tcase \"-t\":\n\t\t\tflags |= PrintGoroutinesStack\n\t\t\t// optional depth argument\n\t\t\tif i+1 < len(args) && len(args[i+1]) > 0 {\n\t\t\t\tn, err := strconv.Atoi(args[i+1])\n\t\t\t\tif err == nil {\n\t\t\t\t\tdepth = n\n\t\t\t\t\ti++\n\t\t\t\t}\n\t\t\t}\n\n\t\tcase \"-w\", \"-with\":\n\t\t\tfilter, err := readGoroutinesFilter(args, &i)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, GoroutineGroupingOptions{}, 0, 0, 0, 0, \"\", fmt.Errorf(\"wrong argument: '%s'\", arg)\n\t\t\t}\n\t\t\tfilters = append(filters, *filter)\n\n\t\tcase \"-wo\", \"-without\":\n\t\t\tfilter, err := readGoroutinesFilter(args, &i)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, GoroutineGroupingOptions{}, 0, 0, 0, 0, \"\", fmt.Errorf(\"wrong argument: '%s'\", arg)\n\t\t\t}\n\t\t\tfilter.Negated = true\n\t\t\tfilters = append(filters, *filter)\n\n\t\tcase \"-group\":\n\t\t\tvar err error\n\t\t\tgroup.GroupBy, err = readGoroutinesFilterKind(args, i+1)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, GoroutineGroupingOptions{}, 0, 0, 0, 0, \"\", fmt.Errorf(\"wrong argument: '%s'\", arg)\n\t\t\t}\n\t\t\ti++\n\t\t\tif group.GroupBy == GoroutineLabel {\n\t\t\t\tif i+1 >= len(args) {\n\t\t\t\t\treturn nil, GoroutineGroupingOptions{}, 0, 0, 0, 0, \"\", fmt.Errorf(\"wrong argument: '%s'\", arg)\n\t\t\t\t}\n\t\t\t\tgroup.GroupByKey = args[i+1]\n\t\t\t\ti++\n\t\t\t}\n\t\t\tbatchSize = 0 // grouping only works well if run on all goroutines\n\n\t\tcase \"-chan\":\n\t\t\ti++\n\t\t\tif i >= len(args) {\n\t\t\t\treturn nil, GoroutineGroupingOptions{}, 0, 0, 0, 0, \"\", errors.New(\"not enough arguments after -chan\")\n\t\t\t}\n\t\t\tfilters = append(filters, ListGoroutinesFilter{Kind: GoroutineWaitingOnChannel, Arg: args[i]})\n\n\t\tcase \"-exec\":\n\t\t\tflags |= PrintGoroutinesExec\n\t\t\tcmd = strings.Join(args[i+1:], \" \")\n\t\t\ti = len(args)\n\n\t\tcase \"\":\n\t\t\t// nothing to do\n\t\tdefault:\n\t\t\treturn nil, GoroutineGroupingOptions{}, 0, 0, 0, 0, \"\", fmt.Errorf(\"wrong argument: '%s'\", arg)\n\t\t}\n\t}\n\treturn filters, group, fgl, flags, depth, batchSize, cmd, nil\n}\n\nfunc readGoroutinesFilterKind(args []string, i int) (GoroutineField, error) {\n\tif i >= len(args) {\n\t\treturn GoroutineFieldNone, fmt.Errorf(\"%s must be followed by an argument\", args[i-1])\n\t}\n\n\tswitch args[i] {\n\tcase \"curloc\":\n\t\treturn GoroutineCurrentLoc, nil\n\tcase \"userloc\":\n\t\treturn GoroutineUserLoc, nil\n\tcase \"goloc\":\n\t\treturn GoroutineGoLoc, nil\n\tcase \"startloc\":\n\t\treturn GoroutineStartLoc, nil\n\tcase \"label\":\n\t\treturn GoroutineLabel, nil\n\tcase \"running\":\n\t\treturn GoroutineRunning, nil\n\tcase \"user\":\n\t\treturn GoroutineUser, nil\n\tdefault:\n\t\treturn GoroutineFieldNone, fmt.Errorf(\"unrecognized argument to %s %s\", args[i-1], args[i])\n\t}\n}\n\nfunc readGoroutinesFilter(args []string, pi *int) (*ListGoroutinesFilter, error) {\n\tr := new(ListGoroutinesFilter)\n\tvar err error\n\tr.Kind, err = readGoroutinesFilterKind(args, *pi+1)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\t*pi++\n\tswitch r.Kind {\n\tcase GoroutineRunning, GoroutineUser:\n\t\treturn r, nil\n\t}\n\tif *pi+1 >= len(args) {\n\t\treturn nil, fmt.Errorf(\"%s %s needs to be followed by an expression\", args[*pi-1], args[*pi])\n\t}\n\tr.Arg = args[*pi+1]\n\t*pi++\n\n\treturn r, nil\n}\n"
  },
  {
    "path": "service/api/conversions.go",
    "content": "package api\n\nimport (\n\t\"fmt\"\n\t\"go/constant\"\n\t\"reflect\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/godwarf\"\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// ConvertLogicalBreakpoint converts a proc.LogicalBreakpoint into an API breakpoint.\nfunc ConvertLogicalBreakpoint(lbp *proc.LogicalBreakpoint) *Breakpoint {\n\tb := &Breakpoint{\n\t\tID:               lbp.LogicalID,\n\t\tFunctionName:     lbp.FunctionName,\n\t\tFile:             lbp.File,\n\t\tLine:             lbp.Line,\n\t\tName:             lbp.Name,\n\t\tTracepoint:       lbp.Tracepoint,\n\t\tTraceReturn:      lbp.TraceReturn,\n\t\tStacktrace:       lbp.Stacktrace,\n\t\tGoroutine:        lbp.Goroutine,\n\t\tVariables:        lbp.Variables,\n\t\tLoadArgs:         LoadConfigFromProc(lbp.LoadArgs),\n\t\tLoadLocals:       LoadConfigFromProc(lbp.LoadLocals),\n\t\tCustomCommands:   lbp.CustomCommands,\n\t\tTotalHitCount:    lbp.TotalHitCount,\n\t\tDisabled:         !lbp.Enabled(),\n\t\tUserData:         lbp.UserData,\n\t\tRootFuncName:     lbp.RootFuncName,\n\t\tTraceFollowCalls: lbp.TraceFollowCalls,\n\t}\n\n\tb.HitCount = map[string]uint64{}\n\tfor idx := range lbp.HitCount {\n\t\tb.HitCount[strconv.FormatInt(idx, 10)] = lbp.HitCount[idx]\n\t}\n\n\tb.HitCond = lbp.HitCond()\n\tb.HitCondPerG = lbp.HitCondPerG\n\n\tb.Cond = lbp.Cond()\n\n\treturn b\n}\n\n// ConvertPhysicalBreakpoints adds information from physical breakpoints to an API breakpoint.\nfunc ConvertPhysicalBreakpoints(b *Breakpoint, lbp *proc.LogicalBreakpoint, pids []int, bps []*proc.Breakpoint) {\n\tif len(bps) == 0 {\n\t\tif lbp != nil {\n\t\t\tb.ExprString = lbp.Set.ExprString\n\t\t}\n\t\treturn\n\t}\n\n\tb.WatchExpr = bps[0].WatchExpr\n\tb.WatchType = WatchType(bps[0].WatchType)\n\n\tlg := false\n\tfor i, bp := range bps {\n\t\tb.Addrs = append(b.Addrs, bp.Addr)\n\t\tb.AddrPid = append(b.AddrPid, pids[i])\n\t\tif b.FunctionName != bp.FunctionName && b.FunctionName != \"\" {\n\t\t\tif !lg {\n\t\t\t\tb.FunctionName = removeTypeParams(b.FunctionName)\n\t\t\t\tlg = true\n\t\t\t}\n\t\t\tfn := removeTypeParams(bp.FunctionName)\n\t\t\tif b.FunctionName != fn {\n\t\t\t\tb.FunctionName = \"(multiple functions)\"\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(b.Addrs) > 0 {\n\t\tb.Addr = b.Addrs[0]\n\t}\n}\n\nfunc removeTypeParams(name string) string {\n\tfn := proc.Function{Name: name}\n\treturn fn.NameWithoutTypeParams()\n}\n\n// ConvertThread converts a proc.Thread into an\n// api thread.\nfunc ConvertThread(th proc.Thread, bp *Breakpoint) *Thread {\n\tvar (\n\t\tfunction *Function\n\t\tfile     string\n\t\tline     int\n\t\tpc       uint64\n\t\tgid      int64\n\t)\n\n\tloc, err := proc.ThreadLocation(th)\n\tif err == nil {\n\t\tpc = loc.PC\n\t\tfile = loc.File\n\t\tline = loc.Line\n\t\tfunction = ConvertFunction(loc.Fn)\n\t}\n\n\tif g, _ := proc.GetG(th); g != nil {\n\t\tgid = g.ID\n\t}\n\n\treturn &Thread{\n\t\tID:          th.ThreadID(),\n\t\tPC:          pc,\n\t\tFile:        file,\n\t\tLine:        line,\n\t\tFunction:    function,\n\t\tGoroutineID: gid,\n\t\tBreakpoint:  bp,\n\t}\n}\n\n// ConvertThreads converts a slice of proc.Thread into a slice of api.Thread.\nfunc ConvertThreads(threads []proc.Thread, convertBreakpoint func(proc.Thread) *Breakpoint) []*Thread {\n\tr := make([]*Thread, len(threads))\n\tfor i := range threads {\n\t\tr[i] = ConvertThread(threads[i], convertBreakpoint(threads[i]))\n\t}\n\treturn r\n}\n\nfunc PrettyTypeName(typ godwarf.Type) string {\n\tif typ == nil {\n\t\treturn \"\"\n\t}\n\tif typ.Common().Name != \"\" {\n\t\treturn typ.Common().Name\n\t}\n\tr := typ.String()\n\tif r == \"*void\" {\n\t\treturn \"unsafe.Pointer\"\n\t}\n\treturn r\n}\n\nfunc convertFloatValue(v *proc.Variable, sz int) string {\n\tswitch v.FloatSpecial {\n\tcase proc.FloatIsPosInf:\n\t\treturn \"+Inf\"\n\tcase proc.FloatIsNegInf:\n\t\treturn \"-Inf\"\n\tcase proc.FloatIsNaN:\n\t\treturn \"NaN\"\n\t}\n\tf, _ := constant.Float64Val(v.Value)\n\treturn strconv.FormatFloat(f, 'f', -1, sz)\n}\n\n// ConvertVar converts from proc.Variable to api.Variable.\nfunc ConvertVar(v *proc.Variable) *Variable {\n\tr := Variable{\n\t\tAddr:     v.Addr,\n\t\tOnlyAddr: v.OnlyAddr,\n\t\tName:     v.Name,\n\t\tKind:     v.Kind,\n\t\tLen:      v.Len,\n\t\tCap:      v.Cap,\n\t\tFlags:    VariableFlags(v.Flags),\n\t\tBase:     v.Base,\n\n\t\tLocationExpr: v.LocationExpr.String(),\n\t\tDeclLine:     v.DeclLine,\n\t}\n\n\tr.Type = PrettyTypeName(v.DwarfType)\n\tr.RealType = PrettyTypeName(v.RealType)\n\n\tif v.Unreadable != nil {\n\t\tr.Unreadable = v.Unreadable.Error()\n\t}\n\n\tr.Value = VariableValueAsString(v)\n\n\tswitch v.Kind {\n\tcase reflect.Complex64:\n\t\tr.Children = make([]Variable, 2)\n\t\tr.Len = 2\n\n\t\tr.Children[0].Name = \"real\"\n\t\tr.Children[0].Kind = reflect.Float32\n\n\t\tr.Children[1].Name = \"imaginary\"\n\t\tr.Children[1].Kind = reflect.Float32\n\n\t\tif v.Value != nil {\n\t\t\treal, _ := constant.Float64Val(constant.Real(v.Value))\n\t\t\tr.Children[0].Value = strconv.FormatFloat(real, 'f', -1, 32)\n\n\t\t\timag, _ := constant.Float64Val(constant.Imag(v.Value))\n\t\t\tr.Children[1].Value = strconv.FormatFloat(imag, 'f', -1, 32)\n\t\t} else {\n\t\t\tr.Children[0].Value = \"nil\"\n\t\t\tr.Children[1].Value = \"nil\"\n\t\t}\n\n\tcase reflect.Complex128:\n\t\tr.Children = make([]Variable, 2)\n\t\tr.Len = 2\n\n\t\tr.Children[0].Name = \"real\"\n\t\tr.Children[0].Kind = reflect.Float64\n\n\t\tr.Children[1].Name = \"imaginary\"\n\t\tr.Children[1].Kind = reflect.Float64\n\n\t\tif v.Value != nil {\n\t\t\treal, _ := constant.Float64Val(constant.Real(v.Value))\n\t\t\tr.Children[0].Value = strconv.FormatFloat(real, 'f', -1, 64)\n\n\t\t\timag, _ := constant.Float64Val(constant.Imag(v.Value))\n\t\t\tr.Children[1].Value = strconv.FormatFloat(imag, 'f', -1, 64)\n\t\t} else {\n\t\t\tr.Children[0].Value = \"nil\"\n\t\t\tr.Children[1].Value = \"nil\"\n\t\t}\n\n\tdefault:\n\t\tr.Children = make([]Variable, len(v.Children))\n\n\t\tfor i := range v.Children {\n\t\t\tr.Children[i] = *ConvertVar(&v.Children[i])\n\t\t}\n\t}\n\n\treturn &r\n}\n\nfunc VariableValueAsString(v *proc.Variable) string {\n\tif v.Value == nil {\n\t\treturn \"\"\n\t}\n\tswitch v.Kind {\n\tcase reflect.Float32:\n\t\treturn convertFloatValue(v, 32)\n\tcase reflect.Float64:\n\t\treturn convertFloatValue(v, 64)\n\tcase reflect.String, reflect.Func, reflect.Struct:\n\t\treturn constant.StringVal(v.Value)\n\tdefault:\n\t\tif cd := v.ConstDescr(); cd != \"\" {\n\t\t\treturn fmt.Sprintf(\"%s (%s)\", cd, v.Value.String())\n\t\t} else {\n\t\t\treturn v.Value.String()\n\t\t}\n\t}\n}\n\n// ConvertVars converts from []*proc.Variable to []api.Variable.\nfunc ConvertVars(pv []*proc.Variable) []Variable {\n\tif pv == nil {\n\t\treturn nil\n\t}\n\tvars := make([]Variable, 0, len(pv))\n\tfor _, v := range pv {\n\t\tvars = append(vars, *ConvertVar(v))\n\t}\n\treturn vars\n}\n\n// ConvertFunction converts from gosym.Func to\n// api.Function.\nfunc ConvertFunction(fn *proc.Function) *Function {\n\tif fn == nil {\n\t\treturn nil\n\t}\n\n\t// fn here used to be a *gosym.Func, the fields Type and GoType below\n\t// corresponded to the homonymous field of gosym.Func. Since the contents of\n\t// those fields is not documented their value was replaced with 0 when\n\t// gosym.Func was replaced by debug_info entries.\n\treturn &Function{\n\t\tName_:     fn.Name,\n\t\tType:      0,\n\t\tValue:     fn.Entry,\n\t\tGoType:    0,\n\t\tOptimized: fn.Optimized(),\n\t}\n}\n\n// ConvertGoroutine converts from proc.G to api.Goroutine.\nfunc ConvertGoroutine(tgt *proc.Target, g *proc.G) *Goroutine {\n\tth := g.Thread\n\ttid := 0\n\tif th != nil {\n\t\ttid = th.ThreadID()\n\t}\n\tif g.Unreadable != nil {\n\t\treturn &Goroutine{Unreadable: g.Unreadable.Error()}\n\t}\n\treturn &Goroutine{\n\t\tID:             g.ID,\n\t\tCurrentLoc:     ConvertLocation(g.CurrentLoc),\n\t\tUserCurrentLoc: ConvertLocation(g.UserCurrent()),\n\t\tGoStatementLoc: ConvertLocation(g.Go()),\n\t\tStartLoc:       ConvertLocation(g.StartLoc(tgt)),\n\t\tThreadID:       tid,\n\t\tWaitSince:      g.WaitSince,\n\t\tWaitReason:     g.WaitReason,\n\t\tLabels:         g.Labels(),\n\t\tStatus:         g.Status,\n\t}\n}\n\n// ConvertGoroutines converts from []*proc.G to []*api.Goroutine.\nfunc ConvertGoroutines(tgt *proc.Target, gs []*proc.G) []*Goroutine {\n\tgoroutines := make([]*Goroutine, len(gs))\n\tfor i := range gs {\n\t\tgoroutines[i] = ConvertGoroutine(tgt, gs[i])\n\t}\n\treturn goroutines\n}\n\n// ConvertLocation converts from proc.Location to api.Location.\nfunc ConvertLocation(loc proc.Location) Location {\n\treturn Location{\n\t\tPC:       loc.PC,\n\t\tFile:     loc.File,\n\t\tLine:     loc.Line,\n\t\tFunction: ConvertFunction(loc.Fn),\n\t}\n}\n\n// ConvertAsmInstruction converts from proc.AsmInstruction to api.AsmInstruction.\nfunc ConvertAsmInstruction(inst proc.AsmInstruction, text string) AsmInstruction {\n\tvar destloc *Location\n\tif inst.DestLoc != nil {\n\t\tr := ConvertLocation(*inst.DestLoc)\n\t\tdestloc = &r\n\t}\n\treturn AsmInstruction{\n\t\tLoc:        ConvertLocation(inst.Loc),\n\t\tDestLoc:    destloc,\n\t\tText:       text,\n\t\tBytes:      inst.Bytes,\n\t\tBreakpoint: inst.Breakpoint,\n\t\tAtPC:       inst.AtPC,\n\t}\n}\n\n// LoadConfigToProc converts an api.LoadConfig to proc.LoadConfig.\nfunc LoadConfigToProc(cfg *LoadConfig) *proc.LoadConfig {\n\tif cfg == nil {\n\t\treturn nil\n\t}\n\treturn &proc.LoadConfig{\n\t\tFollowPointers:     cfg.FollowPointers,\n\t\tMaxVariableRecurse: cfg.MaxVariableRecurse,\n\t\tMaxStringLen:       cfg.MaxStringLen,\n\t\tMaxArrayValues:     cfg.MaxArrayValues,\n\t\tMaxStructFields:    cfg.MaxStructFields,\n\t\tMaxMapBuckets:      0, // MaxMapBuckets is set internally by pkg/proc, read its documentation for an explanation.\n\t}\n}\n\n// LoadConfigFromProc converts a proc.LoadConfig to api.LoadConfig.\nfunc LoadConfigFromProc(cfg *proc.LoadConfig) *LoadConfig {\n\tif cfg == nil {\n\t\treturn nil\n\t}\n\treturn &LoadConfig{\n\t\tFollowPointers:     cfg.FollowPointers,\n\t\tMaxVariableRecurse: cfg.MaxVariableRecurse,\n\t\tMaxStringLen:       cfg.MaxStringLen,\n\t\tMaxArrayValues:     cfg.MaxArrayValues,\n\t\tMaxStructFields:    cfg.MaxStructFields,\n\t}\n}\n\nvar canonicalRegisterOrder = map[string]int{\n\t// amd64\n\t\"rip\": 0,\n\t\"rsp\": 1,\n\t\"rax\": 2,\n\t\"rbx\": 3,\n\t\"rcx\": 4,\n\t\"rdx\": 5,\n\n\t// arm64\n\t\"pc\": 0,\n\t\"sp\": 1,\n}\n\n// ConvertRegisters converts proc.Register to api.Register for a slice.\nfunc ConvertRegisters(in *op.DwarfRegisters, dwarfRegisterToString func(int, *op.DwarfRegister) (string, bool, string), floatingPoint bool) (out []Register) {\n\tout = make([]Register, 0, in.CurrentSize())\n\tfor i := 0; i < in.CurrentSize(); i++ {\n\t\treg := in.Reg(uint64(i))\n\t\tif reg == nil {\n\t\t\tcontinue\n\t\t}\n\t\tname, fp, repr := dwarfRegisterToString(i, reg)\n\t\tif !floatingPoint && fp {\n\t\t\tcontinue\n\t\t}\n\t\tout = append(out, Register{name, repr, i})\n\t}\n\t// Sort the registers in a canonical order we prefer, this is mostly\n\t// because the DWARF register numbering for AMD64 is weird.\n\tsort.Slice(out, func(i, j int) bool {\n\t\ta, b := out[i], out[j]\n\t\tan, aok := canonicalRegisterOrder[strings.ToLower(a.Name)]\n\t\tbn, bok := canonicalRegisterOrder[strings.ToLower(b.Name)]\n\t\t// Registers that don't appear in canonicalRegisterOrder sort after registers that do.\n\t\tif !aok {\n\t\t\tan = 1000\n\t\t}\n\t\tif !bok {\n\t\t\tbn = 1000\n\t\t}\n\t\tif an == bn {\n\t\t\t// keep registers that don't appear in canonicalRegisterOrder in DWARF order\n\t\t\treturn a.DwarfNumber < b.DwarfNumber\n\t\t}\n\t\treturn an < bn\n\t})\n\treturn\n}\n\n// ConvertImage converts proc.Image to api.Image.\nfunc ConvertImage(image *proc.Image) Image {\n\terr := image.LoadError()\n\tlerr := \"\"\n\tif err != nil {\n\t\tlerr = err.Error()\n\t}\n\treturn Image{Path: image.Path, Address: image.StaticBase, LoadError: lerr}\n}\n\n// ConvertDumpState converts proc.DumpState to api.DumpState.\nfunc ConvertDumpState(dumpState *proc.DumpState) *DumpState {\n\tdumpState.Mutex.Lock()\n\tdefer dumpState.Mutex.Unlock()\n\tr := &DumpState{\n\t\tDumping:      dumpState.Dumping,\n\t\tAllDone:      dumpState.AllDone,\n\t\tThreadsDone:  dumpState.ThreadsDone,\n\t\tThreadsTotal: dumpState.ThreadsTotal,\n\t\tMemDone:      dumpState.MemDone,\n\t\tMemTotal:     dumpState.MemTotal,\n\t}\n\tif dumpState.Err != nil {\n\t\tr.Err = dumpState.Err.Error()\n\t}\n\treturn r\n}\n\n// ConvertTarget converts a proc.Target into a api.Target.\nfunc ConvertTarget(tgt *proc.Target, convertThreadBreakpoint func(proc.Thread) *Breakpoint) *Target {\n\treturn &Target{\n\t\tPid:           tgt.Pid(),\n\t\tCmdLine:       tgt.CmdLine,\n\t\tCurrentThread: ConvertThread(tgt.CurrentThread(), convertThreadBreakpoint(tgt.CurrentThread())),\n\t}\n}\n\nfunc ConvertEvent(event *proc.Event) *Event {\n\tr := &Event{Kind: EventKind(event.Kind)}\n\n\tif event.BinaryInfoDownloadEventDetails != nil {\n\t\tr.BinaryInfoDownloadEventDetails = &BinaryInfoDownloadEventDetails{\n\t\t\tImagePath: event.BinaryInfoDownloadEventDetails.ImagePath,\n\t\t\tProgress:  event.BinaryInfoDownloadEventDetails.Progress,\n\t\t}\n\t}\n\n\tif event.BreakpointMaterializedEventDetails != nil {\n\t\tr.BreakpointMaterializedEventDetails = &BreakpointMaterializedEventDetails{\n\t\t\tBreakpoint: ConvertLogicalBreakpoint(event.BreakpointMaterializedEventDetails.Breakpoint),\n\t\t}\n\t}\n\n\tif event.ProcessSpawnedEventDetails != nil {\n\t\tr.ProcessSpawnedEventDetails = &ProcessSpawnedEventDetails{\n\t\t\tPID:        event.ProcessSpawnedEventDetails.PID,\n\t\t\tThreadID:   event.ProcessSpawnedEventDetails.ThreadID,\n\t\t\tCmdline:    event.ProcessSpawnedEventDetails.Cmdline,\n\t\t\tWillFollow: event.ProcessSpawnedEventDetails.WillFollow,\n\t\t}\n\t}\n\n\treturn r\n}\n"
  },
  {
    "path": "service/api/prettyprint.go",
    "content": "package api\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"text/tabwriter\"\n)\n\nconst (\n\t// strings longer than this will cause slices, arrays and structs to be printed on multiple lines when newlines is enabled\n\tmaxShortStringLen = 7\n\t// string used for one indentation level (when printing on multiple lines)\n\tindentString = \"\\t\"\n)\n\n// PrettyFlags specifies how a variable should be formatted.\ntype PrettyFlags uint8\n\nconst (\n\tprettyTop PrettyFlags = 1 << iota\n\tprettyIncludeType\n\tPrettyNewlines    // pretty print variable on multiple lines\n\tPrettyShortenType // pretty print variable shortening types when they are printed\n)\n\nfunc (flags PrettyFlags) top() bool         { return flags&prettyTop != 0 }\nfunc (flags PrettyFlags) includeType() bool { return flags&prettyIncludeType != 0 }\nfunc (flags PrettyFlags) newlines() bool    { return flags&PrettyNewlines != 0 }\nfunc (flags PrettyFlags) shortenType() bool { return flags&PrettyShortenType != 0 }\n\nfunc (flags PrettyFlags) set(flag PrettyFlags, v bool) PrettyFlags {\n\tif v {\n\t\treturn flags | flag\n\t} else {\n\t\treturn flags &^ flag\n\t}\n}\n\n// SinglelineString returns a representation of v on a single line.\nfunc (v *Variable) SinglelineString() string {\n\tvar buf bytes.Buffer\n\tv.writeTo(&buf, prettyTop|prettyIncludeType, \"\", \"\")\n\treturn buf.String()\n}\n\n// StringWithOptions formats v with the specified options.\nfunc (v *Variable) StringWithOptions(indent, fmtstr string, flags PrettyFlags) string {\n\tvar buf bytes.Buffer\n\tv.writeTo(&buf, prettyTop|prettyIncludeType|flags, indent, fmtstr)\n\treturn buf.String()\n}\n\nfunc (v *Variable) typeStr(flags PrettyFlags) string {\n\tif flags.shortenType() {\n\t\treturn ShortenType(v.Type)\n\t}\n\n\treturn v.Type\n}\n\nfunc (v *Variable) writeTo(buf io.Writer, flags PrettyFlags, indent, fmtstr string) {\n\tif v.Unreadable != \"\" {\n\t\tfmt.Fprintf(buf, \"(unreadable %s)\", v.Unreadable)\n\t\treturn\n\t}\n\n\tif !flags.top() && v.Addr == 0 && v.Value == \"\" {\n\t\tif flags.includeType() && v.Type != \"void\" {\n\t\t\tfmt.Fprintf(buf, \"%s nil\", v.typeStr(flags))\n\t\t} else {\n\t\t\tfmt.Fprint(buf, \"nil\")\n\t\t}\n\t\treturn\n\t}\n\n\tswitch v.Kind {\n\tcase reflect.Slice:\n\t\tv.writeSliceTo(buf, flags, indent, fmtstr)\n\tcase reflect.Array:\n\t\tv.writeArrayTo(buf, flags, indent, fmtstr)\n\tcase reflect.Ptr:\n\t\tif v.Type == \"\" || len(v.Children) == 0 {\n\t\t\tfmt.Fprint(buf, \"nil\")\n\t\t} else if v.Children[0].OnlyAddr && v.Children[0].Addr != 0 {\n\t\t\tv.writePointerTo(buf, flags)\n\t\t} else {\n\t\t\tif flags.top() && flags.newlines() && v.Children[0].Addr != 0 {\n\t\t\t\tv.writePointerTo(buf, flags)\n\t\t\t\tfmt.Fprint(buf, \"\\n\")\n\t\t\t}\n\t\t\tfmt.Fprint(buf, \"*\")\n\t\t\tv.Children[0].writeTo(buf, flags.set(prettyTop, false), indent, fmtstr)\n\t\t}\n\tcase reflect.UnsafePointer:\n\t\tif len(v.Children) == 0 {\n\t\t\tfmt.Fprintf(buf, \"unsafe.Pointer(nil)\")\n\t\t} else {\n\t\t\tfmt.Fprintf(buf, \"unsafe.Pointer(%#x)\", v.Children[0].Addr)\n\t\t}\n\tcase reflect.Chan:\n\t\tif flags.newlines() {\n\t\t\tv.writeStructTo(buf, flags, indent, fmtstr)\n\t\t} else {\n\t\t\tif len(v.Children) == 0 {\n\t\t\t\tfmt.Fprintf(buf, \"%s nil\", v.typeStr(flags))\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(buf, \"%s %s/%s\", v.typeStr(flags), v.Children[0].Value, v.Children[1].Value)\n\t\t\t}\n\t\t}\n\tcase reflect.Struct:\n\t\tif v.Value != \"\" {\n\t\t\tfmt.Fprintf(buf, \"%s(%s)\", v.typeStr(flags), v.Value)\n\t\t\tflags = flags.set(prettyIncludeType, false)\n\t\t}\n\t\tv.writeStructTo(buf, flags, indent, fmtstr)\n\tcase reflect.Interface:\n\t\tif v.Addr == 0 {\n\t\t\t// an escaped interface variable that points to nil, this shouldn't\n\t\t\t// happen in normal code but can happen if the variable is out of scope.\n\t\t\tfmt.Fprintf(buf, \"nil\")\n\t\t\treturn\n\t\t}\n\t\tif flags.includeType() {\n\t\t\tif v.Children[0].Kind == reflect.Invalid {\n\t\t\t\tfmt.Fprintf(buf, \"%s \", v.typeStr(flags))\n\t\t\t\tif v.Children[0].Addr == 0 {\n\t\t\t\t\tfmt.Fprint(buf, \"nil\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(buf, \"%s(%s) \", v.typeStr(flags), v.Children[0].typeStr(flags))\n\t\t\t}\n\t\t}\n\t\tdata := v.Children[0]\n\t\tif data.Kind == reflect.Ptr {\n\t\t\tif len(data.Children) == 0 {\n\t\t\t\tfmt.Fprint(buf, \"...\")\n\t\t\t} else if data.Children[0].Addr == 0 {\n\t\t\t\tfmt.Fprint(buf, \"nil\")\n\t\t\t} else if data.Children[0].OnlyAddr {\n\t\t\t\tfmt.Fprintf(buf, \"0x%x\", v.Children[0].Addr)\n\t\t\t} else {\n\t\t\t\tv.Children[0].writeTo(buf, flags.set(prettyTop, false).set(prettyIncludeType, !flags.includeType()), indent, fmtstr)\n\t\t\t}\n\t\t} else if data.OnlyAddr {\n\t\t\tif strings.Contains(v.Type, \"/\") {\n\t\t\t\tfmt.Fprintf(buf, \"*(*%q)(%#x)\", v.typeStr(flags), v.Addr)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(buf, \"*(*%s)(%#x)\", v.typeStr(flags), v.Addr)\n\t\t\t}\n\t\t} else {\n\t\t\tv.Children[0].writeTo(buf, flags.set(prettyTop, false).set(prettyIncludeType, !flags.includeType()), indent, fmtstr)\n\t\t}\n\tcase reflect.Map:\n\t\tv.writeMapTo(buf, flags, indent, fmtstr)\n\tcase reflect.Func:\n\t\tif v.Value == \"\" {\n\t\t\tfmt.Fprint(buf, \"nil\")\n\t\t} else {\n\t\t\tfmt.Fprintf(buf, \"%s\", v.Value)\n\t\t\tif flags.newlines() && len(v.Children) > 0 {\n\t\t\t\tfmt.Fprintf(buf, \" {\\n\")\n\t\t\t\tfor i := range v.Children {\n\t\t\t\t\tfmt.Fprintf(buf, \"%s%s%s %s = \", indent, indentString, v.Children[i].Name, v.Children[i].typeStr(flags))\n\t\t\t\t\tv.Children[i].writeTo(buf, flags.set(prettyTop, false).set(prettyIncludeType, false), indent+indentString, fmtstr)\n\t\t\t\t\tfmt.Fprintf(buf, \"\\n\")\n\t\t\t\t}\n\t\t\t\tfmt.Fprintf(buf, \"%s}\", indent)\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tv.writeBasicType(buf, fmtstr)\n\t}\n}\n\nfunc (v *Variable) writePointerTo(buf io.Writer, flags PrettyFlags) {\n\tif strings.Contains(v.Type, \"/\") {\n\t\tfmt.Fprintf(buf, \"(%q)(%#x)\", v.typeStr(flags), v.Children[0].Addr)\n\t} else {\n\t\tfmt.Fprintf(buf, \"(%s)(%#x)\", v.typeStr(flags), v.Children[0].Addr)\n\t}\n}\n\nfunc (v *Variable) writeBasicType(buf io.Writer, fmtstr string) {\n\tif v.Value == \"\" && v.Kind != reflect.String {\n\t\tfmt.Fprintf(buf, \"(unknown %s)\", v.Kind)\n\t\treturn\n\t}\n\n\tswitch v.Kind {\n\tcase reflect.Bool:\n\t\tif fmtstr == \"\" {\n\t\t\tbuf.Write([]byte(v.Value))\n\t\t\treturn\n\t\t}\n\t\tvar b bool = v.Value == \"true\"\n\t\tfmt.Fprintf(buf, fmtstr, b)\n\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tif fmtstr == \"\" {\n\t\t\tbuf.Write([]byte(v.Value))\n\t\t\treturn\n\t\t}\n\t\tn, _ := strconv.ParseInt(ExtractIntValue(v.Value), 10, 64)\n\t\tfmt.Fprintf(buf, fmtstr, n)\n\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tif fmtstr == \"\" {\n\t\t\tbuf.Write([]byte(v.Value))\n\t\t\treturn\n\t\t}\n\t\tn, _ := strconv.ParseUint(ExtractIntValue(v.Value), 10, 64)\n\t\tfmt.Fprintf(buf, fmtstr, n)\n\n\tcase reflect.Float32, reflect.Float64:\n\t\tif fmtstr == \"\" {\n\t\t\tbuf.Write([]byte(v.Value))\n\t\t\treturn\n\t\t}\n\t\tx, _ := strconv.ParseFloat(v.Value, 64)\n\t\tfmt.Fprintf(buf, fmtstr, x)\n\n\tcase reflect.Complex64, reflect.Complex128:\n\t\tif fmtstr == \"\" {\n\t\t\tfmt.Fprintf(buf, \"(%s + %si)\", v.Children[0].Value, v.Children[1].Value)\n\t\t\treturn\n\t\t}\n\t\treal, _ := strconv.ParseFloat(v.Children[0].Value, 64)\n\t\timag, _ := strconv.ParseFloat(v.Children[1].Value, 64)\n\t\tvar x complex128 = complex(real, imag)\n\t\tfmt.Fprintf(buf, fmtstr, x)\n\n\tcase reflect.String:\n\t\tif fmtstr == \"\" {\n\t\t\ts := v.Value\n\t\t\tif len(s) != int(v.Len) {\n\t\t\t\ts = fmt.Sprintf(\"%s...+%d more\", s, int(v.Len)-len(s))\n\t\t\t}\n\t\t\tfmt.Fprintf(buf, \"%q\", s)\n\t\t\treturn\n\t\t}\n\t\tfmt.Fprintf(buf, fmtstr, v.Value)\n\t}\n}\n\nfunc ExtractIntValue(s string) string {\n\tif s == \"\" || s[len(s)-1] != ')' {\n\t\treturn s\n\t}\n\topen := strings.LastIndex(s, \"(\")\n\tif open < 0 {\n\t\treturn s\n\t}\n\treturn s[open+1 : len(s)-1]\n}\n\nfunc (v *Variable) writeSliceTo(buf io.Writer, flags PrettyFlags, indent, fmtstr string) {\n\tif flags.includeType() {\n\t\tfmt.Fprintf(buf, \"%s len: %d, cap: %d, \", v.typeStr(flags), v.Len, v.Cap)\n\t}\n\tif v.Base == 0 && len(v.Children) == 0 {\n\t\tfmt.Fprintf(buf, \"nil\")\n\t\treturn\n\t}\n\tv.writeSliceOrArrayTo(buf, flags, indent, fmtstr)\n}\n\nfunc (v *Variable) writeArrayTo(buf io.Writer, flags PrettyFlags, indent, fmtstr string) {\n\tif flags.includeType() {\n\t\tfmt.Fprintf(buf, \"%s \", v.typeStr(flags))\n\t}\n\tv.writeSliceOrArrayTo(buf, flags, indent, fmtstr)\n}\n\nfunc (v *Variable) writeStructTo(buf io.Writer, flags PrettyFlags, indent, fmtstr string) {\n\tif int(v.Len) != len(v.Children) && len(v.Children) == 0 {\n\t\tif strings.Contains(v.Type, \"/\") {\n\t\t\tfmt.Fprintf(buf, \"(*%q)(%#x)\", v.typeStr(flags), v.Addr)\n\t\t} else {\n\t\t\tfmt.Fprintf(buf, \"(*%s)(%#x)\", v.typeStr(flags), v.Addr)\n\t\t}\n\t\treturn\n\t}\n\n\tif flags.includeType() {\n\t\tfmt.Fprintf(buf, \"%s \", v.typeStr(flags))\n\t}\n\n\tnl := v.shouldNewlineStruct(flags.newlines())\n\n\tfmt.Fprint(buf, \"{\")\n\n\tfor i := range v.Children {\n\t\tif nl {\n\t\t\tfmt.Fprintf(buf, \"\\n%s%s\", indent, indentString)\n\t\t}\n\t\tfmt.Fprintf(buf, \"%s: \", v.Children[i].Name)\n\t\tv.Children[i].writeTo(buf, prettyIncludeType.set(PrettyShortenType, flags.shortenType()).set(PrettyNewlines, nl), indent+indentString, fmtstr)\n\t\tif i != len(v.Children)-1 || nl {\n\t\t\tfmt.Fprint(buf, \",\")\n\t\t\tif !nl {\n\t\t\t\tfmt.Fprint(buf, \" \")\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(v.Children) != int(v.Len) {\n\t\tif nl {\n\t\t\tfmt.Fprintf(buf, \"\\n%s%s\", indent, indentString)\n\t\t} else {\n\t\t\tfmt.Fprint(buf, \",\")\n\t\t}\n\t\tfmt.Fprintf(buf, \"...+%d more\", int(v.Len)-len(v.Children))\n\t}\n\n\tfmt.Fprint(buf, \"}\")\n}\n\nfunc (v *Variable) writeMapTo(buf io.Writer, flags PrettyFlags, indent, fmtstr string) {\n\tif flags.includeType() {\n\t\tfmt.Fprintf(buf, \"%s \", v.typeStr(flags))\n\t}\n\tif v.Base == 0 && len(v.Children) == 0 {\n\t\tfmt.Fprintf(buf, \"nil\")\n\t\treturn\n\t}\n\n\tnl := flags.newlines() && (len(v.Children) > 0)\n\n\tfmt.Fprint(buf, \"[\")\n\n\tfor i := 0; i < len(v.Children); i += 2 {\n\t\tkey := &v.Children[i]\n\t\tvalue := &v.Children[i+1]\n\n\t\tif nl {\n\t\t\tfmt.Fprintf(buf, \"\\n%s%s\", indent, indentString)\n\t\t}\n\n\t\tkey.writeTo(buf, 0, indent+indentString, fmtstr)\n\t\tfmt.Fprint(buf, \": \")\n\t\tvalue.writeTo(buf, PrettyFlags(0).set(PrettyShortenType, flags.shortenType()).set(PrettyNewlines, nl), indent+indentString, fmtstr)\n\t\tif i != len(v.Children)-1 || nl {\n\t\t\tfmt.Fprint(buf, \", \")\n\t\t}\n\t}\n\n\tif len(v.Children)/2 != int(v.Len) {\n\t\tif len(v.Children) != 0 {\n\t\t\tif nl {\n\t\t\t\tfmt.Fprintf(buf, \"\\n%s%s\", indent, indentString)\n\t\t\t} else {\n\t\t\t\tfmt.Fprint(buf, \",\")\n\t\t\t}\n\t\t\tfmt.Fprintf(buf, \"...+%d more\", int(v.Len)-(len(v.Children)/2))\n\t\t} else {\n\t\t\tfmt.Fprint(buf, \"...\")\n\t\t}\n\t}\n\n\tif nl {\n\t\tfmt.Fprintf(buf, \"\\n%s\", indent)\n\t}\n\tfmt.Fprint(buf, \"]\")\n}\n\nfunc (v *Variable) shouldNewlineArray(newlines bool) bool {\n\tif !newlines || len(v.Children) == 0 {\n\t\treturn false\n\t}\n\n\tkind, hasptr := (&v.Children[0]).recursiveKind()\n\n\tswitch kind {\n\tcase reflect.Slice, reflect.Array, reflect.Struct, reflect.Map, reflect.Interface:\n\t\treturn true\n\tcase reflect.String:\n\t\tif hasptr {\n\t\t\treturn true\n\t\t}\n\t\tfor i := range v.Children {\n\t\t\tif len(v.Children[i].Value) > maxShortStringLen {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc (v *Variable) recursiveKind() (reflect.Kind, bool) {\n\thasptr := false\n\tvar kind reflect.Kind\n\tfor {\n\t\tkind = v.Kind\n\t\tif kind == reflect.Ptr {\n\t\t\thasptr = true\n\t\t\tif len(v.Children) == 0 {\n\t\t\t\treturn kind, hasptr\n\t\t\t}\n\t\t\tv = &(v.Children[0])\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn kind, hasptr\n}\n\nfunc (v *Variable) shouldNewlineStruct(newlines bool) bool {\n\tif !newlines || len(v.Children) == 0 {\n\t\treturn false\n\t}\n\n\tfor i := range v.Children {\n\t\tkind, hasptr := (&v.Children[i]).recursiveKind()\n\n\t\tswitch kind {\n\t\tcase reflect.Slice, reflect.Array, reflect.Struct, reflect.Map, reflect.Interface:\n\t\t\treturn true\n\t\tcase reflect.String:\n\t\t\tif hasptr {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif len(v.Children[i].Value) > maxShortStringLen {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false\n}\n\nfunc (v *Variable) writeSliceOrArrayTo(buf io.Writer, flags PrettyFlags, indent, fmtstr string) {\n\tnl := v.shouldNewlineArray(flags.newlines())\n\tfmt.Fprint(buf, \"[\")\n\n\tfor i := range v.Children {\n\t\tif nl {\n\t\t\tfmt.Fprintf(buf, \"\\n%s%s\", indent, indentString)\n\t\t}\n\t\tv.Children[i].writeTo(buf, PrettyFlags(0).set(PrettyShortenType, flags.shortenType()).set(PrettyNewlines, nl), indent+indentString, fmtstr)\n\t\tif i != len(v.Children)-1 || nl {\n\t\t\tfmt.Fprint(buf, \",\")\n\t\t}\n\t}\n\n\tif len(v.Children) != int(v.Len) {\n\t\tif len(v.Children) != 0 {\n\t\t\tif nl {\n\t\t\t\tfmt.Fprintf(buf, \"\\n%s%s\", indent, indentString)\n\t\t\t} else {\n\t\t\t\tfmt.Fprint(buf, \",\")\n\t\t\t}\n\t\t\tfmt.Fprintf(buf, \"...+%d more\", int(v.Len)-len(v.Children))\n\t\t} else {\n\t\t\tfmt.Fprint(buf, \"...\")\n\t\t}\n\t}\n\n\tif nl {\n\t\tfmt.Fprintf(buf, \"\\n%s\", indent)\n\t}\n\n\tfmt.Fprint(buf, \"]\")\n}\n\n// PrettyExamineMemory examine the memory and format data\n//\n// `format` specifies the data format (or data type), `size` specifies size of each data,\n// like 4byte integer, 1byte character, etc. `count` specifies the number of values.\nfunc PrettyExamineMemory(address uintptr, memArea []byte, isLittleEndian bool, format byte, size int) string {\n\tvar (\n\t\tcols      int\n\t\tcolFormat string\n\t\tcolBytes  = size\n\n\t\taddrLen int\n\t\taddrFmt string\n\t)\n\n\t// Different versions of golang output differently about '#'.\n\t// See https://ci.appveyor.com/project/derekparker/delve-facy3/builds/30179356.\n\tswitch format {\n\tcase 'b':\n\t\tcols = 4 // Avoid emitting rows that are too long when using binary format\n\t\tcolFormat = fmt.Sprintf(\"%%0%db\", colBytes*8)\n\tcase 'o':\n\t\tcols = 8\n\t\tcolFormat = fmt.Sprintf(\"0%%0%do\", colBytes*3) // Always keep one leading zero for octal.\n\tcase 'd':\n\t\tcols = 8\n\t\tcolFormat = fmt.Sprintf(\"%%0%dd\", colBytes*3)\n\tcase 'x':\n\t\tcols = 8\n\t\tcolFormat = fmt.Sprintf(\"0x%%0%dx\", colBytes*2) // Always keep one leading '0x' for hex.\n\tdefault:\n\t\treturn fmt.Sprintf(\"not supported format %q\\n\", string(format))\n\t}\n\tcolFormat += \"\\t\"\n\n\tl := len(memArea)\n\trows := l / (cols * colBytes)\n\tif l%(cols*colBytes) != 0 {\n\t\trows++\n\t}\n\n\t// Avoid the lens of two adjacent address are different, so always use the last addr's len to format.\n\tif l != 0 {\n\t\taddrLen = len(fmt.Sprintf(\"%x\", uint64(address)+uint64(l)))\n\t}\n\taddrFmt = \"0x%0\" + strconv.Itoa(addrLen) + \"x:\\t\"\n\n\tvar b strings.Builder\n\tw := tabwriter.NewWriter(&b, 0, 0, 3, ' ', 0)\n\n\tfor i := 0; i < rows; i++ {\n\t\tfmt.Fprintf(w, addrFmt, address)\n\n\t\tfor j := 0; j < cols; j++ {\n\t\t\toffset := i*(cols*colBytes) + j*colBytes\n\t\t\tif offset+colBytes <= len(memArea) {\n\t\t\t\tn := byteArrayToUInt64(memArea[offset:offset+colBytes], isLittleEndian)\n\t\t\t\tfmt.Fprintf(w, colFormat, n)\n\t\t\t}\n\t\t}\n\t\tfmt.Fprintln(w, \"\")\n\t\taddress += uintptr(cols * colBytes)\n\t}\n\tw.Flush()\n\treturn b.String()\n}\n\nfunc byteArrayToUInt64(buf []byte, isLittleEndian bool) uint64 {\n\tvar n uint64\n\tif isLittleEndian {\n\t\tfor i := len(buf) - 1; i >= 0; i-- {\n\t\t\tn = n<<8 + uint64(buf[i])\n\t\t}\n\t} else {\n\t\tfor i := range buf {\n\t\t\tn = n<<8 + uint64(buf[i])\n\t\t}\n\t}\n\treturn n\n}\n\nconst stacktraceTruncatedMessage = \"(truncated)\"\n\nfunc digits(n int) int {\n\tif n <= 0 {\n\t\treturn 1\n\t}\n\treturn int(math.Floor(math.Log10(float64(n)))) + 1\n}\n\ntype StackTraceColors struct {\n\tFunctionColor string\n\tBasenameColor string\n\tNormalColor   string\n}\n\nfunc PrintStack(formatPath func(string) string, out io.Writer, stack []Stackframe, ind string, offsets bool, stc StackTraceColors, include func(Stackframe) bool) {\n\tif len(stack) == 0 {\n\t\treturn\n\t}\n\n\textranl := offsets\n\tfor i := range stack {\n\t\tif extranl {\n\t\t\tbreak\n\t\t}\n\t\textranl = extranl || (len(stack[i].Defers) > 0) || (len(stack[i].Arguments) > 0) || (len(stack[i].Locals) > 0)\n\t}\n\n\tfileLine := func(file string, line int) string {\n\t\tfile = formatPath(file)\n\t\tif stc.BasenameColor == \"\" {\n\t\t\treturn fmt.Sprintf(\"%s:%d\", file, line)\n\t\t}\n\t\tslash := strings.LastIndex(file, \"/\")\n\t\tif slash < 0 {\n\t\t\tslash = 0\n\t\t} else {\n\t\t\tslash++\n\t\t}\n\t\treturn fmt.Sprintf(\"%s%s%s:%d%s\", file[:slash], stc.BasenameColor, file[slash:], line, stc.NormalColor)\n\t}\n\n\td := digits(len(stack) - 1)\n\tfmtstr := \"%s%\" + strconv.Itoa(d) + \"d  0x%016x in \" + stc.FunctionColor + \"%s\" + stc.NormalColor + \"\\n\"\n\ts := ind + strings.Repeat(\" \", d+2+len(ind))\n\n\tfor i := range stack {\n\t\tif !include(stack[i]) {\n\t\t\tcontinue\n\t\t}\n\t\tif stack[i].Err != \"\" {\n\t\t\tfmt.Fprintf(out, \"%serror: %s\\n\", s, stack[i].Err)\n\t\t\tcontinue\n\t\t}\n\t\tfmt.Fprintf(out, fmtstr, ind, i, stack[i].PC, stack[i].Function.Name())\n\t\tfmt.Fprintf(out, \"%sat %s\\n\", s, fileLine(stack[i].File, stack[i].Line))\n\n\t\tif offsets {\n\t\t\tfmt.Fprintf(out, \"%sframe: %+#x frame pointer %+#x\\n\", s, stack[i].FrameOffset, stack[i].FramePointerOffset)\n\t\t}\n\n\t\tfor j, d := range stack[i].Defers {\n\t\t\tdeferHeader := fmt.Sprintf(\"%s    defer %d: \", s, j+1)\n\t\t\ts2 := strings.Repeat(\" \", len(deferHeader))\n\t\t\tif d.Unreadable != \"\" {\n\t\t\t\tfmt.Fprintf(out, \"%s(unreadable defer: %s)\\n\", deferHeader, d.Unreadable)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfmt.Fprintf(out, \"%s%#016x in %s%s%s\\n\", deferHeader, d.DeferredLoc.PC, stc.FunctionColor, d.DeferredLoc.Function.Name(), stc.NormalColor)\n\t\t\tfmt.Fprintf(out, \"%sat %s:%d\\n\", s2, formatPath(d.DeferredLoc.File), d.DeferredLoc.Line)\n\t\t\tfmt.Fprintf(out, \"%sdeferred by %s at %s\\n\", s2, d.DeferLoc.Function.Name(), fileLine(d.DeferLoc.File, d.DeferLoc.Line))\n\t\t}\n\n\t\tfor j := range stack[i].Arguments {\n\t\t\tfmt.Fprintf(out, \"%s    %s = %s\\n\", s, stack[i].Arguments[j].Name, stack[i].Arguments[j].SinglelineString())\n\t\t}\n\t\tfor j := range stack[i].Locals {\n\t\t\tfmt.Fprintf(out, \"%s    %s = %s\\n\", s, stack[i].Locals[j].Name, stack[i].Locals[j].SinglelineString())\n\t\t}\n\n\t\tif extranl {\n\t\t\tfmt.Fprintln(out)\n\t\t}\n\t}\n\n\tif len(stack) > 0 && !stack[len(stack)-1].Bottom {\n\t\tfmt.Fprintf(out, \"%s\"+stacktraceTruncatedMessage+\"\\n\", ind)\n\t}\n}\n"
  },
  {
    "path": "service/api/prettyprint_test.go",
    "content": "package api\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"strings\"\n\t\"testing\"\n)\n\nfunc TestPrettyExamineMemory(t *testing.T) {\n\t// Test whether always use the last addr's len to format when the lens of two adjacent address are different\n\taddr := uintptr(0xffff)\n\tmemArea := []byte(\"abcdefghijklmnopqrstuvwxyz\")\n\tformat := byte('o')\n\n\tdisplay := []string{\n\t\t\"0x0ffff:   0141   0142   0143   0144   0145   0146   0147   0150   \",\n\t\t\"0x10007:   0151   0152   0153   0154   0155   0156   0157   0160   \",\n\t\t\"0x1000f:   0161   0162   0163   0164   0165   0166   0167   0170   \",\n\t\t\"0x10017:   0171   0172\"}\n\tres := strings.Split(strings.TrimSpace(PrettyExamineMemory(addr, memArea, true, format, 1)), \"\\n\")\n\n\tif len(display) != len(res) {\n\t\tt.Fatalf(\"wrong lines return, expected %d but got %d\", len(display), len(res))\n\t}\n\n\tfor i := range display {\n\t\tif display[i] != res[i] {\n\t\t\terrInfo := fmt.Sprintf(\"wrong display return at line %d\\n\", i+1)\n\t\t\terrInfo += fmt.Sprintf(\"expected:\\n   %q\\n\", display[i])\n\t\t\terrInfo += fmt.Sprintf(\"but got:\\n   %q\\n\", res[i])\n\t\t\tt.Fatal(errInfo)\n\t\t}\n\t}\n}\n\nfunc Test_byteArrayToUInt64(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\targs []byte\n\t\twant uint64\n\t}{\n\t\t{\"case-nil\", nil, 0},\n\t\t{\"case-empty\", []byte{}, 0},\n\t\t{\"case-1\", []byte{0x1}, 1},\n\t\t{\"case-2\", []byte{0x12}, 18},\n\t\t{\"case-3\", []byte{0x1, 0x2}, 513},\n\t\t{\"case-4\", []byte{0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x2}, 144397766876004609},\n\t\t{\"case-5\", []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, math.MaxUint64},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tgot := byteArrayToUInt64(tt.args, true)\n\t\t\tif got != tt.want {\n\t\t\t\tt.Errorf(\"byteArrayToUInt64() got = %v, want %v\", got, tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "service/api/shorten_type.go",
    "content": "package api\n\nimport (\n\t\"strings\"\n\t\"unicode\"\n)\n\nfunc ShortenType(typ string) string {\n\tout, ok := shortenTypeEx(typ)\n\tif !ok {\n\t\treturn typ\n\t}\n\treturn out\n}\n\nfunc shortenTypeEx(typ string) (string, bool) {\n\tswitch {\n\tcase strings.HasPrefix(typ, \"[\"):\n\t\tfor i := range typ {\n\t\t\tif typ[i] == ']' {\n\t\t\t\tsub, ok := shortenTypeEx(typ[i+1:])\n\t\t\t\treturn typ[:i+1] + sub, ok\n\t\t\t}\n\t\t}\n\t\treturn \"\", false\n\tcase strings.HasPrefix(typ, \"*\"):\n\t\tsub, ok := shortenTypeEx(typ[1:])\n\t\treturn \"*\" + sub, ok\n\tcase strings.HasPrefix(typ, \"map[\"):\n\t\tdepth := 1\n\t\tfor i := 4; i < len(typ); i++ {\n\t\t\tswitch typ[i] {\n\t\t\tcase '[':\n\t\t\t\tdepth++\n\t\t\tcase ']':\n\t\t\t\tdepth--\n\t\t\t\tif depth == 0 {\n\t\t\t\t\tkey, keyok := shortenTypeEx(typ[4:i])\n\t\t\t\t\tval, valok := shortenTypeEx(typ[i+1:])\n\t\t\t\t\treturn \"map[\" + key + \"]\" + val, keyok && valok\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn \"\", false\n\tcase typ == \"interface {}\" || typ == \"interface{}\":\n\t\treturn typ, true\n\tcase typ == \"struct {}\" || typ == \"struct{}\":\n\t\treturn typ, true\n\tdefault:\n\t\tif containsAnonymousType(typ) {\n\t\t\treturn \"\", false\n\t\t}\n\n\t\tif lbrk := strings.Index(typ, \"[\"); lbrk >= 0 {\n\t\t\tif typ[len(typ)-1] != ']' {\n\t\t\t\treturn \"\", false\n\t\t\t}\n\t\t\ttyp0, ok := shortenTypeEx(typ[:lbrk])\n\t\t\tif !ok {\n\t\t\t\treturn \"\", false\n\t\t\t}\n\t\t\targs := strings.Split(typ[lbrk+1:len(typ)-1], \",\")\n\t\t\tfor i := range args {\n\t\t\t\tvar ok bool\n\t\t\t\targs[i], ok = shortenTypeEx(strings.TrimSpace(args[i]))\n\t\t\t\tif !ok {\n\t\t\t\t\treturn \"\", false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn typ0 + \"[\" + strings.Join(args, \", \") + \"]\", true\n\t\t}\n\n\t\tslashnum := 0\n\t\tslash := -1\n\t\tfor i, ch := range typ {\n\t\t\tif !unicode.IsLetter(ch) && !unicode.IsDigit(ch) && ch != '_' && ch != '.' && ch != '/' && ch != '@' && ch != '%' && ch != '-' {\n\t\t\t\treturn \"\", false\n\t\t\t}\n\t\t\tif ch == '/' {\n\t\t\t\tslash = i\n\t\t\t\tslashnum++\n\t\t\t}\n\t\t}\n\t\tif slashnum <= 1 || slash < 0 {\n\t\t\treturn typ, true\n\t\t}\n\t\treturn typ[slash+1:], true\n\t}\n}\n\nfunc containsAnonymousType(typ string) bool {\n\tfor _, thing := range []string{\"interface {\", \"interface{\", \"struct {\", \"struct{\", \"func (\", \"func(\"} {\n\t\tidx := strings.Index(typ, thing)\n\t\tif idx >= 0 && idx+len(thing) < len(typ) {\n\t\t\tch := typ[idx+len(thing)]\n\t\t\tif ch != '}' && ch != ')' {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "service/api/shorten_type_test.go",
    "content": "package api\n\nimport \"testing\"\n\nfunc TestShortenType(t *testing.T) {\n\ttests := []struct {\n\t\tinput    string\n\t\texpected string\n\t}{\n\t\t{\"long/package/path/pkg.A\", \"pkg.A\"},\n\t\t{\"[]long/package/path/pkg.A\", \"[]pkg.A\"},\n\t\t{\"map[long/package/path/pkg.A]long/package/path/pkg.B\", \"map[pkg.A]pkg.B\"},\n\t\t{\"map[long/package/path/pkg.A]interface {}\", \"map[pkg.A]interface {}\"},\n\t\t{\"map[long/package/path/pkg.A]interface{}\", \"map[pkg.A]interface{}\"},\n\t\t{\"map[long/package/path/pkg.A]struct {}\", \"map[pkg.A]struct {}\"},\n\t\t{\"map[long/package/path/pkg.A]struct{}\", \"map[pkg.A]struct{}\"},\n\t\t{\"map[long/package/path/pkg.A]map[long/package/path/pkg.B]long/package/path/pkg.C\", \"map[pkg.A]map[pkg.B]pkg.C\"},\n\t\t{\"map[long/package/path/pkg.A][]long/package/path/pkg.B\", \"map[pkg.A][]pkg.B\"},\n\t\t{\"map[uint64]*github.com/aarzilli/dwarf5/dwarf.typeUnit\", \"map[uint64]*dwarf.typeUnit\"},\n\t\t{\"uint8\", \"uint8\"},\n\t\t{\"encoding/binary\", \"encoding/binary\"},\n\t\t{\"*github.com/go-delve/delve/pkg/proc.Target\", \"*proc.Target\"},\n\t\t{\"long/package/path/pkg.Parametric[long/package/path/pkg.A, map[long/package/path/pkg.B]long/package/path/pkg.A]\", \"pkg.Parametric[pkg.A, map[pkg.B]pkg.A]\"},\n\t\t{\"[]long/package/path/pkg.Parametric[long/package/path/pkg.A]\", \"[]pkg.Parametric[pkg.A]\"},\n\t\t{\"[24]long/package/path/pkg.A\", \"[24]pkg.A\"},\n\t\t{\"chan func()\", \"chan func()\"},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.input, func(t *testing.T) {\n\t\t\tresult := ShortenType(tt.input)\n\t\t\tif result != tt.expected {\n\t\t\t\tt.Errorf(\"shortenTypeEx() got = %v, want %v\", result, tt.expected)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "service/api/types.go",
    "content": "package api\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\n\t\"github.com/go-delve/delve/pkg/proc\"\n)\n\n// ErrNotExecutable is an error returned when trying\n// to debug a non-executable file.\nvar ErrNotExecutable = errors.New(\"not an executable file\")\n\n// DebuggerState represents the current context of the debugger.\ntype DebuggerState struct {\n\t// PID of the process we are debugging.\n\tPid int\n\t// Command line of the process we are debugging.\n\tTargetCommandLine string\n\t// Running is true if the process is running and no other information can be collected.\n\tRunning bool\n\t// Recording is true if the process is currently being recorded and no other\n\t// information can be collected. While the debugger is in this state\n\t// sending a StopRecording request will halt the recording, every other\n\t// request will block until the process has been recorded.\n\tRecording bool\n\t// Core dumping currently in progress.\n\tCoreDumping bool\n\t// CurrentThread is the currently selected debugger thread.\n\tCurrentThread *Thread `json:\"currentThread,omitempty\"`\n\t// SelectedGoroutine is the currently selected goroutine\n\tSelectedGoroutine *Goroutine `json:\"currentGoroutine,omitempty\"`\n\t// List of all the process threads\n\tThreads []*Thread\n\t// NextInProgress indicates that a next or step operation was interrupted by another breakpoint\n\t// or a manual stop and is waiting to complete.\n\t// While NextInProgress is set further requests for next or step may be rejected.\n\t// Either execute continue until NextInProgress is false or call CancelNext\n\tNextInProgress bool\n\t// WatchOutOfScope contains the list of watchpoints that went out of scope\n\t// during the last continue.\n\tWatchOutOfScope []*Breakpoint\n\t// Exited indicates whether the debugged process has exited.\n\tExited     bool `json:\"exited\"`\n\tExitStatus int  `json:\"exitStatus\"`\n\t// When contains a description of the current position in a recording\n\tWhen string\n\t// StopReason describes why the process is stopped (e.g., \"breakpoint\",\n\t// \"shared library loaded\"). Empty when the stop reason is unknown.\n\tStopReason string `json:\"stopReason,omitempty\"`\n\t// Filled by RPCClient.Continue, indicates an error\n\tErr error `json:\"-\"`\n}\n\ntype TracepointResult struct {\n\t// Addr is the address of this tracepoint.\n\tAddr uint64 `json:\"addr\"`\n\t// File is the source file for the breakpoint.\n\tFile string `json:\"file\"`\n\t// Line is a line in File for the breakpoint.\n\tLine  int  `json:\"line\"`\n\tIsRet bool `json:\"is_ret\"`\n\t// FunctionName is the name of the function at the current breakpoint, and\n\t// may not always be available.\n\tFunctionName string `json:\"functionName,omitempty\"`\n\n\tGoroutineID int `json:\"goroutineID\"`\n\n\tInputParams  []Variable `json:\"inputParams,omitempty\"`\n\tReturnParams []Variable `json:\"returnParams,omitempty\"`\n}\n\n// Breakpoint addresses a set of locations at which process execution may be\n// suspended.\ntype Breakpoint struct {\n\t// ID is a unique identifier for the breakpoint.\n\tID int `json:\"id\"`\n\t// User defined name of the breakpoint.\n\tName string `json:\"name\"`\n\t// Addr is deprecated, use Addrs.\n\tAddr uint64 `json:\"addr\"`\n\t// Addrs is the list of addresses for this breakpoint.\n\tAddrs []uint64 `json:\"addrs\"`\n\t// AddrPid[i] is the PID associated with by Addrs[i], when debugging a\n\t// single target process this is optional, otherwise it is mandatory.\n\tAddrPid []int `json:\"addrpid\"`\n\t// File is the source file for the breakpoint.\n\tFile string `json:\"file\"`\n\t// Line is a line in File for the breakpoint.\n\tLine int `json:\"line\"`\n\t// FunctionName is the name of the function at the current breakpoint, and\n\t// may not always be available.\n\tFunctionName string `json:\"functionName,omitempty\"`\n\t// ExprString is the string that will be used to set a suspended breakpoint.\n\tExprString string\n\n\t// Breakpoint condition\n\tCond string\n\t// Breakpoint hit count condition.\n\t// Supported hit count conditions are \"NUMBER\" and \"OP NUMBER\".\n\tHitCond string\n\t// HitCondPerG use per goroutine hitcount as HitCond operand, instead of total hitcount\n\tHitCondPerG bool\n\n\t// Tracepoint flag, signifying this is a tracepoint.\n\tTracepoint bool `json:\"continue\"`\n\t// TraceReturn flag signifying this is a breakpoint set at a return\n\t// statement in a traced function.\n\tTraceReturn bool `json:\"traceReturn\"`\n\t// retrieve goroutine information\n\tGoroutine bool `json:\"goroutine\"`\n\t// number of stack frames to retrieve\n\tStacktrace int `json:\"stacktrace\"`\n\t// expressions to evaluate\n\tVariables []string `json:\"variables,omitempty\"`\n\t// LoadArgs requests loading function arguments when the breakpoint is hit\n\tLoadArgs *LoadConfig\n\t// LoadLocals requests loading function locals when the breakpoint is hit\n\tLoadLocals *LoadConfig\n\t// CustomCommands are custom starlark commands to execute when the breakpoint is hit\n\tCustomCommands []string `json:\"customCommands,omitempty\"`\n\n\t// WatchExpr is the expression used to create this watchpoint\n\tWatchExpr string\n\tWatchType WatchType\n\n\tVerboseDescr []string `json:\"VerboseDescr,omitempty\"`\n\n\t// number of times a breakpoint has been reached in a certain goroutine\n\tHitCount map[string]uint64 `json:\"hitCount\"`\n\t// number of times a breakpoint has been reached\n\tTotalHitCount uint64 `json:\"totalHitCount\"`\n\t// Disabled flag, signifying the state of the breakpoint\n\tDisabled bool `json:\"disabled\"`\n\n\tUserData any `json:\"-\"`\n\n\t// RootFuncName is the Root function from where tracing needs to be done\n\tRootFuncName string\n\t// TraceFollowCalls indicates the Depth of tracing\n\tTraceFollowCalls int\n}\n\n// ValidBreakpointName returns an error if\n// the name to be chosen for a breakpoint is invalid.\n// The name can not be just a number, and must contain a series\n// of letters or numbers.\nfunc ValidBreakpointName(name string) error {\n\tif _, err := strconv.Atoi(name); err == nil {\n\t\treturn errors.New(\"breakpoint name can not be a number\")\n\t}\n\n\tfor _, ch := range name {\n\t\tif !(unicode.IsLetter(ch) || unicode.IsDigit(ch)) {\n\t\t\treturn fmt.Errorf(\"invalid character in breakpoint name '%c'\", ch)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// WatchType is the watchpoint type\ntype WatchType uint8\n\nconst (\n\tWatchRead WatchType = 1 << iota\n\tWatchWrite\n)\n\n// Thread is a thread within the debugged process.\ntype Thread struct {\n\t// ID is a unique identifier for the thread.\n\tID int `json:\"id\"`\n\t// PC is the current program counter for the thread.\n\tPC uint64 `json:\"pc\"`\n\t// File is the file for the program counter.\n\tFile string `json:\"file\"`\n\t// Line is the line number for the program counter.\n\tLine int `json:\"line\"`\n\t// Function is function information at the program counter. May be nil.\n\tFunction *Function `json:\"function,omitempty\"`\n\n\t// ID of the goroutine running on this thread\n\tGoroutineID int64 `json:\"goroutineID\"`\n\n\t// Breakpoint this thread is stopped at\n\tBreakpoint *Breakpoint `json:\"breakPoint,omitempty\"`\n\t// Information requested by the current breakpoint\n\tBreakpointInfo *BreakpointInfo `json:\"breakPointInfo,omitempty\"`\n\n\t// ReturnValues contains the return values of the function we just stepped out of\n\tReturnValues []Variable\n\t// CallReturn is true if ReturnValues are the return values of an injected call.\n\tCallReturn bool\n}\n\n// Location holds program location information.\n// In most cases a Location object will represent a physical location, with\n// a single PC address held in the PC field.\n// FindLocations however returns logical locations that can either have\n// multiple PC addresses each (due to inlining) or no PC address at all.\ntype Location struct {\n\tPC       uint64    `json:\"pc\"`\n\tFile     string    `json:\"file\"`\n\tLine     int       `json:\"line\"`\n\tFunction *Function `json:\"function,omitempty\"`\n\tPCs      []uint64  `json:\"pcs,omitempty\"`\n\tPCPids   []int     `json:\"pcpids,omitempty\"`\n}\n\n// Stackframe describes one frame in a stack trace.\ntype Stackframe struct {\n\tLocation\n\tLocals    []Variable\n\tArguments []Variable\n\n\tFrameOffset        int64\n\tFramePointerOffset int64\n\n\tDefers []Defer\n\n\tBottom bool `json:\"Bottom,omitempty\"` // Bottom is true if this is the bottom frame of the stack\n\n\tErr string\n}\n\n// Defer describes a deferred function.\ntype Defer struct {\n\tDeferredLoc Location // deferred function\n\tDeferLoc    Location // location of the defer statement\n\tSP          uint64   // value of SP when the function was deferred\n\tUnreadable  string\n}\n\n// Var will return the variable described by 'name' within\n// this stack frame.\nfunc (frame *Stackframe) Var(name string) *Variable {\n\tfor i := range frame.Locals {\n\t\tif frame.Locals[i].Name == name {\n\t\t\treturn &frame.Locals[i]\n\t\t}\n\t}\n\tfor i := range frame.Arguments {\n\t\tif frame.Arguments[i].Name == name {\n\t\t\treturn &frame.Arguments[i]\n\t\t}\n\t}\n\treturn nil\n}\n\n// Function represents thread-scoped function information.\ntype Function struct {\n\t// Name is the function name.\n\tName_  string `json:\"name\"`\n\tValue  uint64 `json:\"value\"`\n\tType   byte   `json:\"type\"`\n\tGoType uint64 `json:\"goType\"`\n\t// Optimized is true if the function was optimized\n\tOptimized bool `json:\"optimized\"`\n}\n\n// Name will return the function name.\nfunc (fn *Function) Name() string {\n\tif fn == nil {\n\t\treturn \"???\"\n\t}\n\treturn fn.Name_\n}\n\n// VariableFlags is the type of the Flags field of Variable.\ntype VariableFlags uint16\n\nconst (\n\t// VariableEscaped is set for local variables that escaped to the heap\n\t//\n\t// The compiler performs escape analysis on local variables, the variables\n\t// that may outlive the stack frame are allocated on the heap instead and\n\t// only the address is recorded on the stack. These variables will be\n\t// marked with this flag.\n\tVariableEscaped = 1 << iota\n\n\t// VariableShadowed is set for local variables that are shadowed by a\n\t// variable with the same name in another scope\n\tVariableShadowed\n\n\t// VariableConstant means this variable is a constant value\n\tVariableConstant\n\n\t// VariableArgument means this variable is a function argument\n\tVariableArgument\n\n\t// VariableReturnArgument means this variable is a function return value\n\tVariableReturnArgument\n\n\t// VariableFakeAddress means the address of this variable is either fake\n\t// (i.e. the variable is partially or completely stored in a CPU register\n\t// and doesn't have a real address) or possibly no longer available (because\n\t// the variable is the return value of a function call and allocated on a\n\t// frame that no longer exists)\n\tVariableFakeAddress\n\n\t// VariableCPtr means the variable is a C pointer\n\tVariableCPtr\n\n\t// VariableCPURegister means this variable is a CPU register.\n\tVariableCPURegister\n)\n\n// Variable describes a variable.\ntype Variable struct {\n\t// Name of the variable or struct member\n\tName string `json:\"name\"`\n\t// Address of the variable or struct member\n\tAddr uint64 `json:\"addr\"`\n\t// Only the address field is filled (result of evaluating expressions like &<expr>)\n\tOnlyAddr bool `json:\"onlyAddr\"`\n\t// Go type of the variable\n\tType string `json:\"type\"`\n\t// Type of the variable after resolving any typedefs\n\tRealType string `json:\"realType\"`\n\n\tFlags VariableFlags `json:\"flags\"`\n\n\tKind reflect.Kind `json:\"kind\"`\n\n\t// Strings have their length capped at proc.maxArrayValues, use Len for the real length of a string\n\t// Function variables will store the name of the function in this field\n\tValue string `json:\"value\"`\n\n\t// StringValueBytes contains the Value for string variables that can not be\n\t// represented in unicode.\n\t// Specifically if v.Kind is reflect.String and v.Value is not a valid\n\t// unicode string the JSON marshaller will convert it to a valid unicode\n\t// string, altering its contents. This fields contains the unaltered string\n\t// contents.\n\tStringValueBytes []byte\n\n\t// Number of elements in an array or a slice, number of keys for a map, number of struct members for a struct, length of strings, number of captured variables for functions\n\tLen int64 `json:\"len\"`\n\t// Cap value for slices\n\tCap int64 `json:\"cap\"`\n\n\t// Array and slice elements, member fields of structs, key/value pairs of maps, value of complex numbers, captured variables of functions.\n\t// The Name field in this slice will always be the empty string except for structs (when it will be the field name) and for complex numbers (when it will be \"real\" and \"imaginary\")\n\t// For maps each map entry will have to items in this slice, even numbered items will represent map keys and odd numbered items will represent their values\n\t// This field's length is capped at proc.maxArrayValues for slices and arrays and 2*proc.maxArrayValues for maps, in the circumstances where the cap takes effect len(Children) != Len\n\t// The other length cap applied to this field is related to maximum recursion depth, when the maximum recursion depth is reached this field is left empty, contrary to the previous one this cap also applies to structs (otherwise structs will always have all their member fields returned)\n\tChildren []Variable `json:\"children\"`\n\n\t// Base address of arrays, Base address of the backing array for slices (0 for nil slices)\n\t// Base address of the backing byte array for strings\n\t// address of the struct backing chan and map variables\n\t// address of the function entry point for function variables (0 for nil function pointers)\n\tBase uint64 `json:\"base\"`\n\n\t// Unreadable addresses will have this field set\n\tUnreadable string `json:\"unreadable\"`\n\n\t// LocationExpr describes the location expression of this variable's address\n\tLocationExpr string\n\t// DeclLine is the line number of this variable's declaration\n\tDeclLine int64\n}\n\ntype variableWithoutMarshaler Variable\n\nfunc (v *Variable) MarshalJSON() (text []byte, err error) {\n\tvar v2 *variableWithoutMarshaler = (*variableWithoutMarshaler)(v)\n\tif v2.Kind == reflect.String && !utf8.ValidString(v2.Value) {\n\t\tvalue := v2.Value\n\t\t// Should we blot out the value with something obviously wrong? Like:\n\t\t//\n\t\t// \tv2.Value = \"<invalid-utf8-string>\"\n\t\t// \tdefer func() {\n\t\t// \t\tv2.Value = value\n\t\t// \t}()\n\t\tv2.StringValueBytes = []byte(value)\n\t}\n\treturn json.Marshal(v2)\n}\n\nfunc (v *Variable) UnmarshalJSON(buf []byte) error {\n\tvar v2 *variableWithoutMarshaler = (*variableWithoutMarshaler)(v)\n\terr := json.Unmarshal(buf, v2)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif v.Kind == reflect.String && len(v.StringValueBytes) > 0 {\n\t\tv.Value = string(v.StringValueBytes)\n\t\tv.StringValueBytes = nil\n\t}\n\treturn nil\n}\n\n// LoadConfig describes how to load values from target's memory\ntype LoadConfig struct {\n\t// FollowPointers requests pointers to be automatically dereferenced.\n\tFollowPointers bool\n\t// MaxVariableRecurse is how far to recurse when evaluating nested types.\n\tMaxVariableRecurse int\n\t// MaxStringLen is the maximum number of bytes read from a string\n\tMaxStringLen int\n\t// MaxArrayValues is the maximum number of elements read from an array, a slice or a map.\n\tMaxArrayValues int\n\t// MaxStructFields is the maximum number of fields read from a struct, -1 will read all fields.\n\tMaxStructFields int\n}\n\n// Goroutine represents the information relevant to Delve from the runtime's\n// internal G structure.\ntype Goroutine struct {\n\t// ID is a unique identifier for the goroutine.\n\tID int64 `json:\"id\"`\n\t// Current location of the goroutine\n\tCurrentLoc Location `json:\"currentLoc\"`\n\t// Current location of the goroutine, excluding calls inside runtime\n\tUserCurrentLoc Location `json:\"userCurrentLoc\"`\n\t// Location of the go instruction that started this goroutine\n\tGoStatementLoc Location `json:\"goStatementLoc\"`\n\t// Location of the starting function\n\tStartLoc Location `json:\"startLoc\"`\n\t// ID of the associated thread for running goroutines\n\tThreadID   int    `json:\"threadID\"`\n\tStatus     uint64 `json:\"status\"`\n\tWaitSince  int64  `json:\"waitSince\"`\n\tWaitReason int64  `json:\"waitReason\"`\n\tUnreadable string `json:\"unreadable\"`\n\t// Goroutine's pprof labels\n\tLabels map[string]string `json:\"labels,omitempty\"`\n}\n\nconst (\n\tGoroutineWaiting = proc.Gwaiting\n\tGoroutineSyscall = proc.Gsyscall\n)\n\n// DebuggerCommand is a command which changes the debugger's execution state.\ntype DebuggerCommand struct {\n\t// Name is the command to run.\n\tName string `json:\"name\"`\n\t// ThreadID is used to specify which thread to use with the SwitchThread\n\t// command.\n\tThreadID int `json:\"threadID,omitempty\"`\n\t// GoroutineID is used to specify which thread to use with the SwitchGoroutine\n\t// and Call commands.\n\tGoroutineID int64 `json:\"goroutineID,omitempty\"`\n\t// When ReturnInfoLoadConfig is not nil it will be used to load the value\n\t// of any return variables.\n\tReturnInfoLoadConfig *LoadConfig\n\t// Expr is the expression argument for a Call command\n\tExpr string `json:\"expr,omitempty\"`\n\n\t// If WithEvents is set events are generated that should be read by calling\n\t// GetEvents.\n\tWithEvents bool\n\n\t// UnsafeCall disables parameter escape checking for function calls.\n\t// Go objects can be allocated on the stack or on the heap. Heap objects\n\t// can be used by any goroutine; stack objects can only be used by the\n\t// goroutine that owns the stack they are allocated on and can not survive\n\t// the stack frame of allocation.\n\t// The Go compiler will use escape analysis to determine whether to\n\t// allocate an object on the stack or the heap.\n\t// When injecting a function call Delve will check that no address of a\n\t// stack allocated object is passed to the called function: this ensures\n\t// the rules for stack objects will not be violated.\n\t// If you are absolutely sure that the function you are calling will not\n\t// violate the rules about stack objects you can disable this safety check\n\t// by setting UnsafeCall to true.\n\tUnsafeCall bool `json:\"unsafeCall,omitempty\"`\n}\n\n// BreakpointInfo contains information about the current breakpoint\ntype BreakpointInfo struct {\n\tStacktrace []Stackframe `json:\"stacktrace,omitempty\"`\n\tGoroutine  *Goroutine   `json:\"goroutine,omitempty\"`\n\tVariables  []Variable   `json:\"variables,omitempty\"`\n\tArguments  []Variable   `json:\"arguments,omitempty\"`\n\tLocals     []Variable   `json:\"locals,omitempty\"`\n}\n\n// EvalScope is the scope a command should\n// be evaluated in. Describes the goroutine and frame number.\ntype EvalScope struct {\n\tGoroutineID  int64\n\tFrame        int\n\tDeferredCall int // when DeferredCall is n > 0 this eval scope is relative to the n-th deferred call in the current frame\n}\n\nconst (\n\t// Continue resumes process execution.\n\tContinue = \"continue\"\n\t// Rewind resumes process execution backwards (target must be a recording).\n\tRewind = \"rewind\"\n\t// DirectionCongruentContinue resumes process execution, if a reverse next, step or stepout operation is in progress it will resume execution backward.\n\tDirectionCongruentContinue = \"directionCongruentContinue\"\n\t// Step continues to next source line, entering function calls.\n\tStep = \"step\"\n\t// ReverseStep continues backward to the previous line of source code, entering function calls.\n\tReverseStep = \"reverseStep\"\n\t// StepOut continues to the return address of the current function\n\tStepOut = \"stepOut\"\n\t// ReverseStepOut continues backward to the caller of the current function.\n\tReverseStepOut = \"reverseStepOut\"\n\t// StepInstruction continues for exactly 1 cpu instruction.\n\tStepInstruction = \"stepInstruction\"\n\t// NextInstruction continues for 1 cpu instruction, skipping over CALL instructions.\n\tNextInstruction = \"nextInstruction\"\n\t// ReverseStepInstruction reverses execution for exactly 1 cpu instruction.\n\tReverseStepInstruction = \"reverseStepInstruction\"\n\t// ReverseNextInstruction reverses execution for 1 cpu instruction, skipping over CALL instructions.\n\tReverseNextInstruction = \"reverseNextInstruction\"\n\t// Next continues to the next source line, not entering function calls.\n\tNext = \"next\"\n\t// ReverseNext continues backward to the previous line of source code, not entering function calls.\n\tReverseNext = \"reverseNext\"\n\t// SwitchThread switches the debugger's current thread context.\n\tSwitchThread = \"switchThread\"\n\t// SwitchGoroutine switches the debugger's current thread context to the thread running the specified goroutine\n\tSwitchGoroutine = \"switchGoroutine\"\n\t// Halt suspends the process.\n\t// The effect of Halt while the target process is stopped, or in the\n\t// process of stopping, is operating system and timing dependent. It will\n\t// either have no effect or cause the following resume to stop immediately.\n\tHalt = \"halt\"\n\t// Call resumes process execution injecting a function call.\n\tCall = \"call\"\n)\n\n// AssemblyFlavour describes the output\n// of disassembled code.\ntype AssemblyFlavour int\n\nconst (\n\t// GNUFlavour will disassemble using GNU assembly syntax.\n\tGNUFlavour = AssemblyFlavour(proc.GNUFlavour)\n\t// IntelFlavour will disassemble using Intel assembly syntax.\n\tIntelFlavour = AssemblyFlavour(proc.IntelFlavour)\n\t// GoFlavour will disassemble using Go assembly syntax.\n\tGoFlavour = AssemblyFlavour(proc.GoFlavour)\n)\n\n// AsmInstruction represents one assembly instruction at some address\ntype AsmInstruction struct {\n\t// Loc is the location of this instruction\n\tLoc Location\n\t// Destination of CALL instructions\n\tDestLoc *Location\n\t// Text is the formatted representation of the instruction\n\tText string\n\t// Bytes is the instruction as read from memory\n\tBytes []byte\n\t// If Breakpoint is true a breakpoint is set at this instruction\n\tBreakpoint bool\n\t// In AtPC is true this is the instruction the current thread is stopped at\n\tAtPC bool\n}\n\n// AsmInstructions is a slice of single instructions.\ntype AsmInstructions []AsmInstruction\n\n// GetVersionIn is the argument for GetVersion.\ntype GetVersionIn struct {\n}\n\n// GetVersionOut is the result of GetVersion.\ntype GetVersionOut struct {\n\tDelveVersion    string\n\tAPIVersion      int\n\tBackend         string // backend currently in use\n\tTargetGoVersion string\n\n\tMinSupportedVersionOfGo string\n\tMaxSupportedVersionOfGo string\n}\n\n// SetAPIVersionIn is the input for SetAPIVersion.\ntype SetAPIVersionIn struct {\n\tAPIVersion int\n}\n\n// SetAPIVersionOut is the output for SetAPIVersion.\ntype SetAPIVersionOut struct {\n}\n\n// Register holds information on a CPU register.\ntype Register struct {\n\tName        string\n\tValue       string\n\tDwarfNumber int\n}\n\n// Registers is a list of CPU registers.\ntype Registers []Register\n\nfunc (regs Registers) String() string {\n\tmaxlen := 0\n\tfor _, reg := range regs {\n\t\tif n := len(reg.Name); n > maxlen {\n\t\t\tmaxlen = n\n\t\t}\n\t}\n\n\tvar buf bytes.Buffer\n\tfor _, reg := range regs {\n\t\tfmt.Fprintf(&buf, \"%*s = %s\\n\", maxlen, reg.Name, reg.Value)\n\t}\n\treturn buf.String()\n}\n\n// DiscardedBreakpoint is a breakpoint that is not\n// reinstated during a restart.\ntype DiscardedBreakpoint struct {\n\tBreakpoint *Breakpoint\n\tReason     string\n}\n\n// Checkpoint is a point in the program that\n// can be returned to in certain execution modes.\ntype Checkpoint struct {\n\tID    int\n\tWhen  string\n\tWhere string\n}\n\n// Image represents a loaded shared object (go plugin or shared library)\ntype Image struct {\n\tPath      string\n\tAddress   uint64\n\tLoadError string\n\tTrimpath  bool\n}\n\n// Ancestor represents a goroutine ancestor\ntype Ancestor struct {\n\tID    int64\n\tStack []Stackframe\n\n\tUnreadable string\n}\n\n// StacktraceOptions is the type of the Opts field of StacktraceIn that\n// configures the stacktrace.\n// Tracks proc.StacktraceOptions\ntype StacktraceOptions uint16\n\nconst (\n\t// StacktraceReadDefers requests a stacktrace decorated with deferred calls\n\t// for each frame.\n\tStacktraceReadDefers StacktraceOptions = 1 << iota\n\n\t// StacktraceSimple requests a stacktrace where no stack switches will be\n\t// attempted.\n\tStacktraceSimple\n\n\t// StacktraceG requests a stacktrace starting with the register\n\t// values saved in the runtime.g structure.\n\tStacktraceG\n)\n\n// PackageBuildInfo maps an import path to a directory path.\ntype PackageBuildInfo struct {\n\tImportPath    string\n\tDirectoryPath string\n\tFiles         []string\n}\n\n// DumpState describes the state of a core dump in progress\ntype DumpState struct {\n\tDumping bool\n\tAllDone bool\n\n\tThreadsDone, ThreadsTotal int\n\tMemDone, MemTotal         uint64\n\n\tErr string\n}\n\n// ListGoroutinesFilter describes a filtering condition for the\n// ListGoroutines API call.\ntype ListGoroutinesFilter struct {\n\tKind    GoroutineField\n\tNegated bool\n\tArg     string\n}\n\n// GoroutineField allows referring to a field of a goroutine object.\ntype GoroutineField uint8\n\nconst (\n\tGoroutineFieldNone        GoroutineField = iota\n\tGoroutineCurrentLoc                      // the goroutine's CurrentLoc\n\tGoroutineUserLoc                         // the goroutine's UserLoc\n\tGoroutineGoLoc                           // the goroutine's GoStatementLoc\n\tGoroutineStartLoc                        // the goroutine's StartLoc\n\tGoroutineLabel                           // the goroutine's label\n\tGoroutineRunning                         // the goroutine is running\n\tGoroutineUser                            // the goroutine is a user goroutine\n\tGoroutineWaitingOnChannel                // the goroutine is waiting on the channel specified by the argument\n)\n\n// GoroutineGroup represents a group of goroutines in the return value of\n// the ListGoroutines API call.\ntype GoroutineGroup struct {\n\tName   string // name of this group\n\tOffset int    // start offset in the list of goroutines of this group\n\tCount  int    // number of goroutines that belong to this group in the list of goroutines\n\tTotal  int    // total number of goroutines that belong to this group\n}\n\ntype GoroutineGroupingOptions struct {\n\tGroupBy         GoroutineField\n\tGroupByKey      string\n\tMaxGroupMembers int\n\tMaxGroups       int\n}\n\n// Target represents a debugging target.\ntype Target struct {\n\tPid           int\n\tCmdLine       string\n\tCurrentThread *Thread\n}\n\n// GuessSubstitutePathIn are the input parameters used to guess a substitute-path configuration automatically.\ntype GuessSubstitutePathIn struct {\n\tImportPathOfMainPackage string\n\tClientGOROOT            string\n\tClientModuleDirectories map[string]string\n}\n\n// Event is an event that happened during execution of the debugged program.\ntype Event struct {\n\tKind EventKind\n\t*BinaryInfoDownloadEventDetails\n\t*BreakpointMaterializedEventDetails\n\t*ProcessSpawnedEventDetails\n}\n\ntype EventKind uint8\n\nconst (\n\tEventResumed EventKind = iota\n\tEventStopped\n\tEventBinaryInfoDownload\n\tEventBreakpointMaterialized\n\tEventProcessSpawned\n)\n\n// BinaryInfoDownloadEventDetails describes the details of a BinaryInfoDownloadEvent\ntype BinaryInfoDownloadEventDetails struct {\n\tImagePath, Progress string\n}\n\n// BreakpointMaterializedEventDetails describes the details of a BreakpointMaterializedEvent\ntype BreakpointMaterializedEventDetails struct {\n\tBreakpoint *Breakpoint\n}\n\n// ProcessSpawnedEventDetails describes the details of a ProcessSpawnedEvent\ntype ProcessSpawnedEventDetails struct {\n\tPID        int\n\tThreadID   int\n\tCmdline    string\n\tWillFollow bool\n}\n"
  },
  {
    "path": "service/api/waitreason.go",
    "content": "package api\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n)\n\nvar waitReasonStrings1dot18 = []string{\n\t\"\",\n\t\"GC assist marking\",\n\t\"IO wait\",\n\t\"chan receive (nil chan)\",\n\t\"chan send (nil chan)\",\n\t\"dumping heap\",\n\t\"garbage collection\",\n\t\"garbage collection scan\",\n\t\"panicwait\",\n\t\"select\",\n\t\"select (no cases)\",\n\t\"GC assist wait\",\n\t\"GC sweep wait\",\n\t\"GC scavenge wait\",\n\t\"chan receive\",\n\t\"chan send\",\n\t\"finalizer wait\",\n\t\"force gc (idle)\",\n\t\"semacquire\",\n\t\"sleep\",\n\t\"sync.Cond.Wait\",\n\t\"timer goroutine (idle)\",\n\t\"trace reader (blocked)\",\n\t\"wait for GC cycle\",\n\t\"GC worker (idle)\",\n\t\"preempted\",\n\t\"debug call\",\n}\n\nvar waitReasonStrings1dot20 = []string{\n\t\"\",\n\t\"GC assist marking\",\n\t\"IO wait\",\n\t\"chan receive (nil chan)\",\n\t\"chan send (nil chan)\",\n\t\"dumping heap\",\n\t\"garbage collection\",\n\t\"garbage collection scan\",\n\t\"panicwait\",\n\t\"select\",\n\t\"select (no cases)\",\n\t\"GC assist wait\",\n\t\"GC sweep wait\",\n\t\"GC scavenge wait\",\n\t\"chan receive\",\n\t\"chan send\",\n\t\"finalizer wait\",\n\t\"force gc (idle)\",\n\t\"semacquire\",\n\t\"sleep\",\n\t\"sync.Cond.Wait\",\n\t\"sync.Mutex.Lock\",\n\t\"sync.RWMutex.RLock\",\n\t\"sync.RWMutex.Lock\",\n\t\"trace reader (blocked)\",\n\t\"wait for GC cycle\",\n\t\"GC worker (idle)\",\n\t\"GC worker (active)\",\n\t\"preempted\",\n\t\"debug call\",\n\t\"GC mark termination\",\n\t\"stopping the world\",\n}\n\nvar waitReasonStrings1dot22 = []string{\n\t\"\",\n\t\"GC assist marking\",\n\t\"IO wait\",\n\t\"chan receive (nil chan)\",\n\t\"chan send (nil chan)\",\n\t\"dumping heap\",\n\t\"garbage collection\",\n\t\"garbage collection scan\",\n\t\"panicwait\",\n\t\"select\",\n\t\"select (no cases)\",\n\t\"GC assist wait\",\n\t\"GC sweep wait\",\n\t\"GC scavenge wait\",\n\t\"chan receive\",\n\t\"chan send\",\n\t\"finalizer wait\",\n\t\"force gc (idle)\",\n\t\"semacquire\",\n\t\"sleep\",\n\t\"sync.Cond.Wait\",\n\t\"sync.Mutex.Lock\",\n\t\"sync.RWMutex.RLock\",\n\t\"sync.RWMutex.Lock\",\n\t\"trace reader (blocked)\",\n\t\"wait for GC cycle\",\n\t\"GC worker (idle)\",\n\t\"GC worker (active)\",\n\t\"preempted\",\n\t\"debug call\",\n\t\"GC mark termination\",\n\t\"stopping the world\",\n\t\"flushing proc caches\",\n\t\"trace goroutine status\",\n\t\"trace proc status\",\n\t\"page trace flush\",\n\t\"coroutine\",\n}\n\nvar waitReasonStrings1dot24 = []string{\n\t\"\",\n\t\"GC assist marking\",\n\t\"IO wait\",\n\t\"chan receive (nil chan)\",\n\t\"chan send (nil chan)\",\n\t\"dumping heap\",\n\t\"garbage collection\",\n\t\"garbage collection scan\",\n\t\"panicwait\",\n\t\"select\",\n\t\"select (no cases)\",\n\t\"GC assist wait\",\n\t\"GC sweep wait\",\n\t\"GC scavenge wait\",\n\t\"chan receive\",\n\t\"chan send\",\n\t\"finalizer wait\",\n\t\"force gc (idle)\",\n\t\"semacquire\",\n\t\"sleep\",\n\t\"sync.Cond.Wait\",\n\t\"sync.Mutex.Lock\",\n\t\"sync.RWMutex.RLock\",\n\t\"sync.RWMutex.Lock\",\n\t\"sync.WaitGroup.Wait\",\n\t\"trace reader (blocked)\",\n\t\"wait for GC cycle\",\n\t\"GC worker (idle)\",\n\t\"GC worker (active)\",\n\t\"preempted\",\n\t\"debug call\",\n\t\"GC mark termination\",\n\t\"stopping the world\",\n\t\"flushing proc caches\",\n\t\"trace goroutine status\",\n\t\"trace proc status\",\n\t\"page trace flush\",\n\t\"coroutine\",\n\t\"GC weak to strong wait\",\n\t\"synctest.Run\",\n\t\"synctest.Wait\",\n\t\"chan receive (synctest)\",\n\t\"chan send (synctest)\",\n}\n\nvar waitReasonStrings1dot25 = []string{\n\t\"\",\n\t\"GC assist marking\",\n\t\"IO wait\",\n\t\"chan receive (nil chan)\",\n\t\"chan send (nil chan)\",\n\t\"dumping heap\",\n\t\"garbage collection\",\n\t\"garbage collection scan\",\n\t\"panicwait\",\n\t\"select\",\n\t\"select (no cases)\",\n\t\"GC assist wait\",\n\t\"GC sweep wait\",\n\t\"GC scavenge wait\",\n\t\"chan receive\",\n\t\"chan send\",\n\t\"finalizer wait\",\n\t\"force gc (idle)\",\n\t\"GOMAXPROCS updater (idle)\",\n\t\"semacquire\",\n\t\"sleep\",\n\t\"sync.Cond.Wait\",\n\t\"sync.Mutex.Lock\",\n\t\"sync.RWMutex.RLock\",\n\t\"sync.RWMutex.Lock\",\n\t\"sync.WaitGroup.Wait\",\n\t\"trace reader (blocked)\",\n\t\"wait for GC cycle\",\n\t\"GC worker (idle)\",\n\t\"GC worker (active)\",\n\t\"preempted\",\n\t\"debug call\",\n\t\"GC mark termination\",\n\t\"stopping the world\",\n\t\"flushing proc caches\",\n\t\"trace goroutine status\",\n\t\"trace proc status\",\n\t\"page trace flush\",\n\t\"coroutine\",\n\t\"GC weak to strong wait\",\n\t\"synctest.Run\",\n\t\"synctest.Wait\",\n\t\"chan receive (durable)\",\n\t\"chan send (durable)\",\n\t\"select (durable)\",\n\t\"sync.WaitGroup.Wait (durable)\",\n\t\"cleanup wait\",\n}\n\nvar waitReasonStrings1dot26 = []string{\n\t\"\",\n\t\"GC assist marking\",\n\t\"IO wait\",\n\t\"dumping heap\",\n\t\"garbage collection\",\n\t\"garbage collection scan\",\n\t\"panicwait\",\n\t\"GC assist wait\",\n\t\"GC sweep wait\",\n\t\"GC scavenge wait\",\n\t\"finalizer wait\",\n\t\"force gc (idle)\",\n\t\"GOMAXPROCS updater (idle)\",\n\t\"semacquire\",\n\t\"sleep\",\n\t\"chan receive (nil chan)\",\n\t\"chan send (nil chan)\",\n\t\"select (no cases)\",\n\t\"select\",\n\t\"chan receive\",\n\t\"chan send\",\n\t\"sync.Cond.Wait\",\n\t\"sync.Mutex.Lock\",\n\t\"sync.RWMutex.RLock\",\n\t\"sync.RWMutex.Lock\",\n\t\"sync.WaitGroup.Wait\",\n\t\"trace reader (blocked)\",\n\t\"wait for GC cycle\",\n\t\"GC worker (idle)\",\n\t\"GC worker (active)\",\n\t\"preempted\",\n\t\"debug call\",\n\t\"GC mark termination\",\n\t\"stopping the world\",\n\t\"flushing proc caches\",\n\t\"trace goroutine status\",\n\t\"trace proc status\",\n\t\"page trace flush\",\n\t\"coroutine\",\n\t\"GC weak to strong wait\",\n\t\"synctest.Run\",\n\t\"synctest.Wait\",\n\t\"chan receive (durable)\",\n\t\"chan send (durable)\",\n\t\"select (durable)\",\n\t\"sync.WaitGroup.Wait (durable)\",\n\t\"cleanup wait\",\n}\n\nfunc WaitReasonString(goVersion *goversion.GoVersion, waitReason int64) string {\n\tvar waitReasonStrings []string\n\n\tswitch goVersion.Minor {\n\tcase 18, 19:\n\t\twaitReasonStrings = waitReasonStrings1dot18\n\tcase 20, 21:\n\t\twaitReasonStrings = waitReasonStrings1dot20\n\tcase 22, 23:\n\t\twaitReasonStrings = waitReasonStrings1dot22\n\tcase 24:\n\t\twaitReasonStrings = waitReasonStrings1dot24\n\tcase 25:\n\t\twaitReasonStrings = waitReasonStrings1dot25\n\tcase 26, 27:\n\t\twaitReasonStrings = waitReasonStrings1dot26\n\t}\n\n\tif goVersion.Major != 1 {\n\t\twaitReasonStrings = nil\n\t}\n\n\tif waitReasonStrings != nil && waitReason > 0 && waitReason < int64(len(waitReasonStrings)) {\n\t\treturn waitReasonStrings[waitReason]\n\t} else {\n\t\treturn fmt.Sprintf(\"unknown wait reason %d\", waitReason)\n\t}\n}\n"
  },
  {
    "path": "service/client.go",
    "content": "package service\n\nimport (\n\t\"time\"\n\n\t\"github.com/go-delve/delve/service/api\"\n)\n\n// Client represents a debugger service client. All client methods are\n// synchronous.\ntype Client interface {\n\t// GetVersion returns assorted version information.\n\tGetVersion() *api.GetVersionOut\n\n\t// ProcessPid returns the pid of the process we are debugging.\n\tProcessPid() int\n\n\t// BuildID returns the BuildID of the process' executable we are debugging.\n\tBuildID() string\n\n\t// LastModified returns the time that the process' executable was modified.\n\tLastModified() time.Time\n\n\t// Detach detaches the debugger, optionally killing the process.\n\tDetach(killProcess bool) error\n\n\t// Restart restarts program. Set true if you want to rebuild the process we are debugging.\n\tRestart(rebuild bool) ([]api.DiscardedBreakpoint, error)\n\t// RestartFrom restarts program from the specified position.\n\tRestartFrom(rerecord bool, pos string, resetArgs bool, newArgs []string, newRedirects [3]string, rebuild bool) ([]api.DiscardedBreakpoint, error)\n\n\t// GetState returns the current debugger state.\n\tGetState() (*api.DebuggerState, error)\n\t// GetStateNonBlocking returns the current debugger state, returning immediately if the target is already running.\n\tGetStateNonBlocking() (*api.DebuggerState, error)\n\n\t// Continue resumes process execution.\n\tContinue() <-chan *api.DebuggerState\n\t// Rewind resumes process execution backwards.\n\tRewind() <-chan *api.DebuggerState\n\t// DirectionCongruentContinue resumes process execution, if a reverse next, step or stepout operation is in progress it will resume execution backward.\n\tDirectionCongruentContinue() <-chan *api.DebuggerState\n\t// Next continues to the next source line, not entering function calls.\n\tNext() (*api.DebuggerState, error)\n\t// ReverseNext continues backward to the previous line of source code, not entering function calls.\n\tReverseNext() (*api.DebuggerState, error)\n\t// Step continues to the next source line, entering function calls.\n\tStep() (*api.DebuggerState, error)\n\t// ReverseStep continues backward to the previous line of source code, entering function calls.\n\tReverseStep() (*api.DebuggerState, error)\n\t// StepOut continues to the return address of the current function.\n\tStepOut() (*api.DebuggerState, error)\n\t// ReverseStepOut continues backward to the caller of the current function.\n\tReverseStepOut() (*api.DebuggerState, error)\n\t// Call resumes process execution while making a function call.\n\tCall(goroutineID int64, expr string, unsafe bool) (*api.DebuggerState, error)\n\n\t// StepInstruction will step a single cpu instruction.\n\tStepInstruction(skipCalls bool) (*api.DebuggerState, error)\n\t// ReverseStepInstruction will reverse step a single cpu instruction.\n\tReverseStepInstruction(skipCalls bool) (*api.DebuggerState, error)\n\t// SwitchThread switches the current thread context.\n\tSwitchThread(threadID int) (*api.DebuggerState, error)\n\t// SwitchGoroutine switches the current goroutine (and the current thread as well)\n\tSwitchGoroutine(goroutineID int64) (*api.DebuggerState, error)\n\t// Halt suspends the process.\n\tHalt() (*api.DebuggerState, error)\n\n\t// GetBreakpoint gets a breakpoint by ID.\n\tGetBreakpoint(id int) (*api.Breakpoint, error)\n\t// GetBreakpointByName gets a breakpoint by name.\n\tGetBreakpointByName(name string) (*api.Breakpoint, error)\n\t// CreateBreakpoint creates a new breakpoint.\n\tCreateBreakpoint(*api.Breakpoint) (*api.Breakpoint, error)\n\t// CreateBreakpointWithExpr creates a new breakpoint and sets an expression to restore it after it is disabled.\n\tCreateBreakpointWithExpr(*api.Breakpoint, string, [][2]string, bool) (*api.Breakpoint, error)\n\t// CreateWatchpoint creates a new watchpoint.\n\tCreateWatchpoint(api.EvalScope, string, api.WatchType) (*api.Breakpoint, error)\n\t// ListBreakpoints gets all breakpoints.\n\tListBreakpoints(bool) ([]*api.Breakpoint, error)\n\t// ClearBreakpoint deletes a breakpoint by ID.\n\tClearBreakpoint(id int) (*api.Breakpoint, error)\n\t// ClearBreakpointByName deletes a breakpoint by name\n\tClearBreakpointByName(name string) (*api.Breakpoint, error)\n\t// ToggleBreakpoint toggles on or off a breakpoint by ID.\n\tToggleBreakpoint(id int) (*api.Breakpoint, error)\n\t// ToggleBreakpointByName toggles on or off a breakpoint by name.\n\tToggleBreakpointByName(name string) (*api.Breakpoint, error)\n\t// AmendBreakpoint allows user to update an existing breakpoint for example to change the information\n\t// retrieved when the breakpoint is hit or to change, add or remove the break condition\n\tAmendBreakpoint(*api.Breakpoint) error\n\t// CancelNext cancels a Next or Step call that was interrupted by a manual stop or by another breakpoint\n\tCancelNext() error\n\n\t// ListThreads lists all threads.\n\tListThreads() ([]*api.Thread, error)\n\t// GetThread gets a thread by its ID.\n\tGetThread(id int) (*api.Thread, error)\n\n\t// ListPackageVariables lists all package variables in the context of the current thread.\n\tListPackageVariables(filter string, cfg api.LoadConfig) ([]api.Variable, error)\n\t// EvalVariable returns a variable in the context of the current thread.\n\tEvalVariable(scope api.EvalScope, symbol string, cfg api.LoadConfig) (*api.Variable, error)\n\n\t// SetVariable sets the value of a variable\n\tSetVariable(scope api.EvalScope, symbol, value string) error\n\n\t// ListSources lists all source files in the process matching filter.\n\tListSources(filter string) ([]string, error)\n\t// ListFunctions lists all functions in the process matching filter.\n\tListFunctions(filter string, tracefollow int) ([]string, error)\n\t// ListTypes lists all types in the process matching filter.\n\tListTypes(filter string) ([]string, error)\n\t// ListPackagesBuildInfo lists all packages in the process matching filter.\n\tListPackagesBuildInfo(filter string, includeFiles bool) ([]api.PackageBuildInfo, error)\n\t// ListLocalVariables lists all local variables in scope.\n\tListLocalVariables(scope api.EvalScope, cfg api.LoadConfig) ([]api.Variable, error)\n\t// ListFunctionArgs lists all arguments to the current function.\n\tListFunctionArgs(scope api.EvalScope, cfg api.LoadConfig) ([]api.Variable, error)\n\t// ListThreadRegisters lists registers and their values, for the given thread.\n\tListThreadRegisters(threadID int, includeFp bool) (api.Registers, error)\n\t// ListScopeRegisters lists registers and their values, for the given scope.\n\tListScopeRegisters(scope api.EvalScope, includeFp bool) (api.Registers, error)\n\n\t// ListGoroutines lists all goroutines.\n\tListGoroutines(start, count int) ([]*api.Goroutine, int, error)\n\t// ListGoroutinesWithFilter lists goroutines matching the filters\n\tListGoroutinesWithFilter(start, count int, filters []api.ListGoroutinesFilter, group *api.GoroutineGroupingOptions, scope *api.EvalScope) ([]*api.Goroutine, []api.GoroutineGroup, int, bool, error)\n\n\t// Stacktrace returns stacktrace\n\tStacktrace(goroutineID int64, depth, skip int, opts api.StacktraceOptions, cfg *api.LoadConfig) ([]api.Stackframe, error)\n\n\t// Ancestors returns ancestor stacktraces\n\tAncestors(goroutineID int64, numAncestors int, depth int) ([]api.Ancestor, error)\n\n\t// AttachedToExistingProcess returns whether we attached to a running process or not\n\tAttachedToExistingProcess() bool\n\n\t// FindLocation returns concrete location information described by a location expression\n\t// loc ::= <filename>:<line> | <function>[:<line>] | /<regex>/ | (+|-)<offset> | <line> | *<address>\n\t// * <filename> can be the full path of a file or just a suffix\n\t// * <function> ::= <package>.<receiver type>.<name> | <package>.(*<receiver type>).<name> | <receiver type>.<name> | <package>.<name> | (*<receiver type>).<name> | <name>\n\t// * <function> must be unambiguous\n\t// * /<regex>/ will return a location for each function matched by regex\n\t// * +<offset> returns a location for the line that is <offset> lines after the current line\n\t// * -<offset> returns a location for the line that is <offset> lines before the current line\n\t// * <line> returns a location for a line in the current file\n\t// * *<address> returns the location corresponding to the specified address\n\t// NOTE: this function does not actually set breakpoints.\n\t// If findInstruction is true FindLocation will only return locations that correspond to instructions.\n\tFindLocation(scope api.EvalScope, loc string, findInstruction bool, substitutePathRules [][2]string) ([]api.Location, string, error)\n\n\t// DisassembleRange disassemble code between startPC and endPC\n\tDisassembleRange(scope api.EvalScope, startPC, endPC uint64, flavour api.AssemblyFlavour) (api.AsmInstructions, error)\n\t// DisassemblePC disassemble code of the function containing PC\n\tDisassemblePC(scope api.EvalScope, pc uint64, flavour api.AssemblyFlavour) (api.AsmInstructions, error)\n\n\t// Recorded returns true if the target is a recording.\n\tRecorded() bool\n\t// TraceDirectory returns the path to the trace directory for a recording.\n\tTraceDirectory() (string, error)\n\t// Checkpoint sets a checkpoint at the current position.\n\tCheckpoint(where string) (checkpointID int, err error)\n\t// ListCheckpoints gets all checkpoints.\n\tListCheckpoints() ([]api.Checkpoint, error)\n\t// ClearCheckpoint removes a checkpoint\n\tClearCheckpoint(id int) error\n\n\t// SetReturnValuesLoadConfig sets the load configuration for return values.\n\tSetReturnValuesLoadConfig(*api.LoadConfig)\n\n\t// SetEventsFn sets a function that will be called whenever a debugger event is received.\n\tSetEventsFn(func(*api.Event))\n\n\t// IsMulticlient returns true if the headless instance is multiclient.\n\tIsMulticlient() bool\n\n\t// ListDynamicLibraries returns a list of loaded dynamic libraries.\n\tListDynamicLibraries() ([]api.Image, bool, error)\n\n\t// ExamineMemory returns the raw memory stored at the given address.\n\t// The amount of data to be read is specified by length which must be less than or equal to 1000.\n\t// This function will return an error if it reads less than `length` bytes.\n\tExamineMemory(address uint64, length int) ([]byte, bool, error)\n\n\t// StopRecording stops a recording if one is in progress.\n\tStopRecording() error\n\n\t// CoreDumpStart starts creating a core dump to the specified file\n\tCoreDumpStart(dest string) (api.DumpState, error)\n\t// CoreDumpWait waits for the core dump to finish, or for the specified amount of milliseconds\n\tCoreDumpWait(msec int) api.DumpState\n\t// CoreDumpCancel cancels a core dump in progress\n\tCoreDumpCancel() error\n\n\t// ListTargets returns the list of connected targets\n\tListTargets() ([]api.Target, error)\n\t// FollowExec enables or disables the follow exec mode. In follow exec mode\n\t// Delve will automatically debug child processes launched by the target\n\t// process\n\tFollowExec(bool, string) error\n\tFollowExecEnabled() bool\n\n\t// Disconnect closes the connection to the server without sending a Detach request first.\n\t// If cont is true a continue command will be sent instead.\n\tDisconnect(cont bool) error\n\n\t// SetDebugInfoDirectories sets directories used to search for debug symbols\n\tSetDebugInfoDirectories([]string) error\n\n\t// GetDebugInfoDirectories returns the list of directories used to search for debug symbols\n\tGetDebugInfoDirectories() ([]string, error)\n\n\t// GuessSubstitutePath tries to guess a substitute-path configuration for the client\n\tGuessSubstitutePath() ([][2]string, error)\n\n\t// CancelDownloads cancels binary info downloads, if any.\n\tCancelDownloads() error\n\t// DownloadLibraryDebugInfo attempts to download the specified library's debug info.\n\tDownloadLibraryDebugInfo(n int) error\n\n\t// CallAPI allows calling an arbitrary rpc method (used by starlark bindings)\n\tCallAPI(method string, args, reply any) error\n}\n"
  },
  {
    "path": "service/config.go",
    "content": "package service\n\nimport (\n\t\"net\"\n\n\t\"github.com/go-delve/delve/service/debugger\"\n)\n\n// Config provides the configuration to start a Debugger and expose it with a\n// service.\n//\n// Only one of ProcessArgs or AttachPid should be specified. If ProcessArgs is\n// provided, a new process will be launched. Otherwise, the debugger will try\n// to attach to an existing process with AttachPid.\ntype Config struct {\n\t// Debugger configuration object, used to configure the underlying\n\t// debugger used by the server.\n\tDebugger debugger.Config\n\n\t// Listener is used to serve requests.\n\tListener net.Listener\n\n\t// ProcessArgs are the arguments to launch a new process.\n\tProcessArgs []string\n\n\t// AcceptMulti configures the server to accept multiple connection.\n\t// Note that the server API is not reentrant and clients will have to coordinate.\n\tAcceptMulti bool\n\n\t// APIVersion selects which version of the API to serve (default: 1).\n\tAPIVersion int\n\n\t// CheckLocalConnUser is true if the debugger should check that local\n\t// connections come from the same user that started the headless server\n\tCheckLocalConnUser bool\n\n\t// DisconnectChan will be closed by the server when the client disconnects\n\tDisconnectChan chan<- struct{}\n}\n"
  },
  {
    "path": "service/dap/command.go",
    "content": "package dap\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"slices\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/config\"\n\t\"github.com/google/go-dap\"\n)\n\nfunc (s *Session) delveCmd(goid, frame int, cmdstr string) (string, error) {\n\tvals := strings.SplitN(strings.TrimSpace(cmdstr), \" \", 2)\n\tcmdname := vals[0]\n\tvar args string\n\tif len(vals) > 1 {\n\t\targs = strings.TrimSpace(vals[1])\n\t}\n\tfor _, cmd := range debugCommands(s) {\n\t\tif slices.Contains(cmd.aliases, cmdname) {\n\t\t\treturn cmd.cmdFn(goid, frame, args)\n\t\t}\n\t}\n\treturn \"\", errNoCmd\n}\n\ntype cmdfunc func(goid, frame int, args string) (string, error)\n\ntype command struct {\n\taliases []string\n\thelpMsg string\n\tcmdFn   cmdfunc\n}\n\nconst (\n\tmsgHelp = `Prints the help message.\n\t\ndlv help [command]\n\nType \"help\" followed by the name of a command for more information about it.`\n\n\tmsgConfig = `Changes configuration parameters.\n\t\n\tdlv config -list\n\t\n\t\tShow all configuration parameters.\n\n\tdlv config -list <parameter>\n\t\n\t\tShow value of a configuration parameter.\n\t\n\tdlv config <parameter> <value>\n\t\n\t\tChanges the value of a configuration parameter.\n\t\n\tdlv config substitutePath <from> <to>\n\tdlv config substitutePath <from>\n\tdlv config substitutePath -clear\n\t\n\t\tAdds or removes a path substitution rule. If -clear is used all substitutePath rules are removed.\n\t\tSee also Documentation/cli/substitutepath.md.\n\n\tdlv config showPprofLabels <label>\n\tdlv config showPprofLabels -clear <label>\n\tdlv config showPprofLabels -clear\n\n\t\tAdds or removes a label key to show in the callstack view. If -clear is used without an argument,\n\t\tall labels are removed.`\n\tmsgSources = `Print list of source files.\n\n\tdlv sources [<regex>]\n\nIf regex is specified only the source files matching it will be returned.`\n\n\tmsgTarget = `Manages child process debugging.\n\n        target follow-exec [-on [regex]] [-off]\n\nEnables or disables follow exec mode. When follow exec mode Delve will automatically attach to new child processes executed by the target process. An optional regular expression can be passed to 'target follow-exec', only child processes with a command line matching the regular expression will be followed.\n\n        target list\n\nList currently attached processes.\n\n        target switch [pid]\n\nSwitches to the specified process.`\n)\n\n// debugCommands returns a list of commands with default commands defined.\nfunc debugCommands(s *Session) []command {\n\treturn []command{\n\t\t{aliases: []string{\"help\", \"h\"}, cmdFn: s.helpMessage, helpMsg: msgHelp},\n\t\t{aliases: []string{\"config\"}, cmdFn: s.evaluateConfig, helpMsg: msgConfig},\n\t\t{aliases: []string{\"sources\", \"s\"}, cmdFn: s.sources, helpMsg: msgSources},\n\t\t{aliases: []string{\"target\"}, cmdFn: s.targetCmd, helpMsg: msgTarget},\n\t}\n}\n\nvar errNoCmd = errors.New(\"command not available\")\n\nfunc (s *Session) helpMessage(_, _ int, args string) (string, error) {\n\tvar buf bytes.Buffer\n\tif args != \"\" {\n\t\tfor _, cmd := range debugCommands(s) {\n\t\t\tif slices.Contains(cmd.aliases, args) {\n\t\t\t\treturn cmd.helpMsg, nil\n\t\t\t}\n\t\t}\n\t\treturn \"\", errNoCmd\n\t}\n\n\tfmt.Fprintln(&buf, \"The following commands are available:\")\n\n\tfor _, cmd := range debugCommands(s) {\n\t\th := cmd.helpMsg\n\t\tif idx := strings.Index(h, \"\\n\"); idx >= 0 {\n\t\t\th = h[:idx]\n\t\t}\n\t\tif len(cmd.aliases) > 1 {\n\t\t\tfmt.Fprintf(&buf, \"    dlv %s (alias: %s) \\t %s\\n\", cmd.aliases[0], strings.Join(cmd.aliases[1:], \" | \"), h)\n\t\t} else {\n\t\t\tfmt.Fprintf(&buf, \"    dlv %s \\t %s\\n\", cmd.aliases[0], h)\n\t\t}\n\t}\n\n\tfmt.Fprintln(&buf)\n\tfmt.Fprintln(&buf, \"Type 'dlv help' followed by a command for full documentation.\")\n\treturn buf.String(), nil\n}\n\nfunc (s *Session) evaluateConfig(_, _ int, expr string) (string, error) {\n\targv := config.Split2PartsBySpace(expr)\n\tname := argv[0]\n\tif name == \"-list\" {\n\t\tif len(argv) > 1 {\n\t\t\treturn config.ConfigureListByName(&s.args, argv[1], \"cfgName\"), nil\n\t\t}\n\t\treturn listConfig(&s.args), nil\n\t}\n\tupdated, res, err := configureSet(&s.args, expr)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tif updated {\n\t\t// Send invalidated events for areas that are affected by configuration changes.\n\t\tswitch name {\n\t\tcase \"showGlobalVariables\", \"showRegisters\":\n\t\t\t// Variable data has become invalidated.\n\t\t\ts.send(&dap.InvalidatedEvent{\n\t\t\t\tEvent: *s.newEvent(\"invalidated\"),\n\t\t\t\tBody: dap.InvalidatedEventBody{\n\t\t\t\t\tAreas: []dap.InvalidatedAreas{\"variables\"},\n\t\t\t\t},\n\t\t\t})\n\t\tcase \"goroutineFilters\", \"hideSystemGoroutines\", \"showPprofLabels\":\n\t\t\t// Thread related data has become invalidated.\n\t\t\ts.send(&dap.InvalidatedEvent{\n\t\t\t\tEvent: *s.newEvent(\"invalidated\"),\n\t\t\t\tBody: dap.InvalidatedEventBody{\n\t\t\t\t\tAreas: []dap.InvalidatedAreas{\"threads\"},\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\tres += \"\\nUpdated\"\n\t}\n\treturn res, nil\n}\n\nfunc (s *Session) sources(_, _ int, filter string) (string, error) {\n\tsources, err := s.debugger.Sources(filter)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tsort.Strings(sources)\n\treturn strings.Join(sources, \"\\n\"), nil\n}\n\nfunc (s *Session) targetCmd(_, _ int, argstr string) (string, error) {\n\targv := config.Split2PartsBySpace(argstr)\n\tswitch argv[0] {\n\tcase \"list\":\n\t\ttgrp, unlock := s.debugger.LockTargetGroup()\n\t\tdefer unlock()\n\t\tcurpid := tgrp.Selected.Pid()\n\t\tvar tgtListStr strings.Builder\n\t\tfor _, tgt := range tgrp.Targets() {\n\t\t\tif _, err := tgt.Valid(); err == nil {\n\t\t\t\tselected := \"\"\n\t\t\t\tif tgt.Pid() == curpid {\n\t\t\t\t\tselected = \"*\"\n\t\t\t\t}\n\t\t\t\ttgtListStr.WriteString(fmt.Sprintf(\"%s\\t%d\\t%s\\n\", selected, tgt.Pid(), tgt.CmdLine))\n\t\t\t}\n\t\t}\n\t\treturn tgtListStr.String(), nil\n\tcase \"follow-exec\":\n\t\tif len(argv) == 1 {\n\t\t\tif s.debugger.FollowExecEnabled() {\n\t\t\t\treturn \"Follow exec mode is enabled\", nil\n\t\t\t} else {\n\t\t\t\treturn \"Follow exec mode is disabled\", nil\n\t\t\t}\n\t\t}\n\t\targv = config.Split2PartsBySpace(argv[1])\n\t\tswitch argv[0] {\n\t\tcase \"-on\":\n\t\t\tvar regex string\n\t\t\tif len(argv) == 2 {\n\t\t\t\tregex = argv[1]\n\t\t\t}\n\t\t\tif err := s.debugger.FollowExec(true, regex); err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t\tif regex != \"\" {\n\t\t\t\treturn fmt.Sprintf(\"Follow exec mode enabled with regex %q\", regex), nil\n\t\t\t}\n\t\t\treturn \"Follow exec mode enabled\", nil\n\t\tcase \"-off\":\n\t\t\tif len(argv) > 1 {\n\t\t\t\treturn \"\", errors.New(\"too many arguments\")\n\t\t\t}\n\t\t\tif err := s.debugger.FollowExec(false, \"\"); err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t\treturn \"Follow exec mode disabled\", nil\n\t\tdefault:\n\t\t\treturn \"\", fmt.Errorf(\"unknown argument %q to 'target follow-exec'\", argv[0])\n\t\t}\n\tcase \"switch\": // TODO: This may cause inconsistency between debugger and frontend.\n\t\ttgrp, unlock := s.debugger.LockTargetGroup()\n\t\tdefer unlock()\n\t\tpid, err := strconv.Atoi(argv[1])\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t\tfound := false\n\t\tfor _, tgt := range tgrp.Targets() {\n\t\t\tif _, err = tgt.Valid(); err == nil && tgt.Pid() == pid {\n\t\t\t\tfound = true\n\t\t\t\ttgrp.Selected = tgt\n\t\t\t\ttgt.SwitchThread(pid)\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\treturn \"\", fmt.Errorf(\"could not find target %d\", pid)\n\t\t}\n\t\treturn fmt.Sprintf(\"Switched to process %d\", pid), err\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"unknown target command\")\n\t}\n}\n"
  },
  {
    "path": "service/dap/config.go",
    "content": "package dap\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/config\"\n)\n\nfunc listConfig(args *launchAttachArgs) string {\n\tvar buf bytes.Buffer\n\tconfig.ConfigureList(&buf, args, \"cfgName\")\n\treturn buf.String()\n}\n\nfunc configureSet(sargs *launchAttachArgs, args string) (bool, string, error) {\n\tv := config.Split2PartsBySpace(args)\n\n\tcfgname := v[0]\n\tvar rest string\n\tif len(v) == 2 {\n\t\trest = v[1]\n\t}\n\n\tfield := config.ConfigureFindFieldByName(sargs, cfgname, \"cfgName\")\n\tif !field.CanAddr() {\n\t\treturn false, \"\", fmt.Errorf(\"%q is not a configuration parameter\", cfgname)\n\t}\n\n\tif cfgname == \"substitutePath\" {\n\t\terr := configureSetSubstitutePath(sargs, rest)\n\t\tif err != nil {\n\t\t\treturn false, \"\", err\n\t\t}\n\t\t// Print the updated client to server and server to client maps.\n\t\treturn true, config.ConfigureListByName(sargs, cfgname, \"cfgName\"), nil\n\t}\n\n\tif cfgname == \"showPprofLabels\" {\n\t\terr := configureSetShowPprofLabels(sargs, rest)\n\t\tif err != nil {\n\t\t\treturn false, \"\", err\n\t\t}\n\t\t// Print the updated labels\n\t\treturn true, config.ConfigureListByName(sargs, cfgname, \"cfgName\"), nil\n\t}\n\n\terr := config.ConfigureSetSimple(rest, cfgname, field)\n\tif err != nil {\n\t\treturn false, \"\", err\n\t}\n\treturn true, config.ConfigureListByName(sargs, cfgname, \"cfgName\"), nil\n}\n\nfunc configureSetSubstitutePath(args *launchAttachArgs, rest string) error {\n\tif strings.TrimSpace(rest) == \"-clear\" {\n\t\targs.substitutePathClientToServer = args.substitutePathClientToServer[:0]\n\t\targs.substitutePathServerToClient = args.substitutePathServerToClient[:0]\n\t\treturn nil\n\t}\n\targv := config.SplitQuotedFields(rest, '\"')\n\tif len(argv) == 2 && argv[0] == \"-clear\" {\n\t\targv = argv[1:]\n\t}\n\tswitch len(argv) {\n\tcase 0:\n\t\t// do nothing, let caller show the current list of substitute path rules\n\t\treturn nil\n\tcase 1: // delete substitute-path rule\n\t\tfor i := range args.substitutePathClientToServer {\n\t\t\tif args.substitutePathClientToServer[i][0] == argv[0] {\n\t\t\t\tcopy(args.substitutePathClientToServer[i:], args.substitutePathClientToServer[i+1:])\n\t\t\t\targs.substitutePathClientToServer = args.substitutePathClientToServer[:len(args.substitutePathClientToServer)-1]\n\t\t\t\tcopy(args.substitutePathServerToClient[i:], args.substitutePathServerToClient[i+1:])\n\t\t\t\targs.substitutePathServerToClient = args.substitutePathServerToClient[:len(args.substitutePathServerToClient)-1]\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\treturn fmt.Errorf(\"could not find rule for %q\", argv[0])\n\tcase 2: // add substitute-path rule\n\t\tfor i := range args.substitutePathClientToServer {\n\t\t\tif args.substitutePathClientToServer[i][0] == argv[0] {\n\t\t\t\targs.substitutePathClientToServer[i][1] = argv[1]\n\t\t\t\targs.substitutePathServerToClient[i][0] = argv[1]\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t\targs.substitutePathClientToServer = append(args.substitutePathClientToServer, [2]string{argv[0], argv[1]})\n\t\targs.substitutePathServerToClient = append(args.substitutePathServerToClient, [2]string{argv[1], argv[0]})\n\n\tdefault:\n\t\treturn errors.New(\"too many arguments to \\\"config substitutePath\\\"\")\n\t}\n\treturn nil\n}\n\nfunc configureSetShowPprofLabels(args *launchAttachArgs, rest string) error {\n\tif strings.TrimSpace(rest) == \"-clear\" {\n\t\targs.ShowPprofLabels = args.ShowPprofLabels[:0]\n\t\treturn nil\n\t}\n\tdelete := false\n\targv := config.SplitQuotedFields(rest, '\"')\n\tif len(argv) == 2 && argv[0] == \"-clear\" {\n\t\targv = argv[1:]\n\t\tdelete = true\n\t}\n\tswitch len(argv) {\n\tcase 0:\n\t\t// do nothing, let caller show the current list of labels\n\t\treturn nil\n\tcase 1:\n\t\tif delete {\n\t\t\tfor i := range args.ShowPprofLabels {\n\t\t\t\tif args.ShowPprofLabels[i] == argv[0] {\n\t\t\t\t\tcopy(args.ShowPprofLabels[i:], args.ShowPprofLabels[i+1:])\n\t\t\t\t\targs.ShowPprofLabels = args.ShowPprofLabels[:len(args.ShowPprofLabels)-1]\n\t\t\t\t\treturn nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"could not find label %q\", argv[0])\n\t\t} else {\n\t\t\targs.ShowPprofLabels = append(args.ShowPprofLabels, argv[0])\n\t\t}\n\tdefault:\n\t\treturn errors.New(\"too many arguments to \\\"config showPprofLabels\\\"\")\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "service/dap/config_test.go",
    "content": "package dap\n\nimport (\n\t\"testing\"\n)\n\nfunc TestListConfig(t *testing.T) {\n\ttype args struct {\n\t\targs *launchAttachArgs\n\t}\n\ttests := []struct {\n\t\tname string\n\t\targs args\n\t\twant string\n\t}{\n\t\t{\n\t\t\tname: \"empty\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{},\n\t\t\t},\n\t\t\twant: formatConfig(0, false, false, \"\", []string{}, false, [][2]string{}, false, \"\"),\n\t\t},\n\t\t{\n\t\t\tname: \"default values\",\n\t\t\targs: args{\n\t\t\t\targs: &defaultArgs,\n\t\t\t},\n\t\t\twant: formatConfig(50, false, false, \"\", []string{}, false, [][2]string{}, false, \"\"),\n\t\t},\n\t\t{\n\t\t\tname: \"custom values\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tStackTraceDepth:              35,\n\t\t\t\t\tShowGlobalVariables:          true,\n\t\t\t\t\tGoroutineFilters:             \"SomeFilter\",\n\t\t\t\t\tShowPprofLabels:              []string{\"SomeLabel\"},\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{{\"hello\", \"world\"}},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{{\"world\", \"hello\"}},\n\t\t\t\t\tfollowExec:                   true,\n\t\t\t\t\tfollowExecRegex:              \"a.b?\",\n\t\t\t\t},\n\t\t\t},\n\t\t\twant: formatConfig(35, true, false, \"SomeFilter\", []string{\"SomeLabel\"}, false, [][2]string{{\"hello\", \"world\"}}, true, \"a.b?\"),\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tif got := listConfig(tt.args.args); got != tt.want {\n\t\t\t\tt.Errorf(\"listConfig() = %v, want %v\", got, tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestConfigureSetSubstitutePath(t *testing.T) {\n\ttype args struct {\n\t\targs *launchAttachArgs\n\t\trest string\n\t}\n\ttests := []struct {\n\t\tname      string\n\t\targs      args\n\t\twantRules [][2]string\n\t\twantErr   bool\n\t}{\n\t\t// Test add rule.\n\t\t{\n\t\t\tname: \"add rule\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{},\n\t\t\t\t},\n\t\t\t\trest: \"/path/to/client/dir /path/to/server/dir\",\n\t\t\t},\n\t\t\twantRules: [][2]string{{\"/path/to/client/dir\", \"/path/to/server/dir\"}},\n\t\t\twantErr:   false,\n\t\t},\n\t\t{\n\t\t\tname: \"add rule (multiple)\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{\n\t\t\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/client/dir/b\", \"/path/to/server/dir/b\"},\n\t\t\t\t\t},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{\n\t\t\t\t\t\t{\"/path/to/server/dir/a\", \"/path/to/client/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/server/dir/b\", \"/path/to/client/dir/b\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trest: \"/path/to/client/dir/c /path/to/server/dir/b\",\n\t\t\t},\n\t\t\twantRules: [][2]string{\n\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t{\"/path/to/client/dir/b\", \"/path/to/server/dir/b\"},\n\t\t\t\t{\"/path/to/client/dir/c\", \"/path/to/server/dir/b\"},\n\t\t\t},\n\t\t\twantErr: false,\n\t\t},\n\t\t{\n\t\t\tname: \"add rule from empty string\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{},\n\t\t\t\t},\n\t\t\t\trest: `\"\" /path/to/client/dir`,\n\t\t\t},\n\t\t\twantRules: [][2]string{{\"\", \"/path/to/client/dir\"}},\n\t\t\twantErr:   false,\n\t\t},\n\t\t{\n\t\t\tname: \"add rule to empty string\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{},\n\t\t\t\t},\n\t\t\t\trest: `/path/to/client/dir \"\"`,\n\t\t\t},\n\t\t\twantRules: [][2]string{{\"/path/to/client/dir\", \"\"}},\n\t\t\twantErr:   false,\n\t\t},\n\t\t{\n\t\t\tname: \"add rule from empty string(multiple)\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{\n\t\t\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/client/dir/b\", \"/path/to/server/dir/b\"},\n\t\t\t\t\t},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{\n\t\t\t\t\t\t{\"/path/to/server/dir/a\", \"/path/to/client/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/server/dir/b\", \"/path/to/client/dir/b\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trest: `\"\" /path/to/client/dir/c`,\n\t\t\t},\n\t\t\twantRules: [][2]string{\n\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t{\"/path/to/client/dir/b\", \"/path/to/server/dir/b\"},\n\t\t\t\t{\"\", \"/path/to/client/dir/c\"},\n\t\t\t},\n\t\t\twantErr: false,\n\t\t},\n\t\t{\n\t\t\tname: \"add rule to empty string(multiple)\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{\n\t\t\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/client/dir/b\", \"/path/to/server/dir/b\"},\n\t\t\t\t\t},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{\n\t\t\t\t\t\t{\"/path/to/server/dir/a\", \"/path/to/client/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/server/dir/b\", \"/path/to/client/dir/b\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trest: `/path/to/client/dir/c \"\"`,\n\t\t\t},\n\t\t\twantRules: [][2]string{\n\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t{\"/path/to/client/dir/b\", \"/path/to/server/dir/b\"},\n\t\t\t\t{\"/path/to/client/dir/c\", \"\"},\n\t\t\t},\n\t\t\twantErr: false,\n\t\t},\n\t\t// Test modify rule.\n\t\t{\n\t\t\tname: \"modify rule\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{{\"/path/to/client/dir\", \"/path/to/server/dir\"}},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{{\"/path/to/server/dir\", \"/path/to/client/dir\"}},\n\t\t\t\t},\n\t\t\t\trest: \"/path/to/client/dir /new/path/to/server/dir\",\n\t\t\t},\n\t\t\twantRules: [][2]string{{\"/path/to/client/dir\", \"/new/path/to/server/dir\"}},\n\t\t\twantErr:   false,\n\t\t},\n\t\t{\n\t\t\tname: \"modify rule with from as empty string\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{{\"\", \"/path/to/server/dir\"}},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{{\"/path/to/server/dir\", \"\"}},\n\t\t\t\t},\n\t\t\t\trest: `\"\" /new/path/to/server/dir`,\n\t\t\t},\n\t\t\twantRules: [][2]string{{\"\", \"/new/path/to/server/dir\"}},\n\t\t\twantErr:   false,\n\t\t},\n\t\t{\n\t\t\tname: \"modify rule with to as empty string\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{{\"/path/to/client/dir\", \"\"}},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{{\"\", \"/path/to/client/dir\"}},\n\t\t\t\t},\n\t\t\t\trest: `/path/to/client/dir \"\"`,\n\t\t\t},\n\t\t\twantRules: [][2]string{{\"/path/to/client/dir\", \"\"}},\n\t\t\twantErr:   false,\n\t\t},\n\t\t{\n\t\t\tname: \"modify rule (multiple)\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{\n\t\t\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/client/dir/b\", \"/path/to/server/dir/b\"},\n\t\t\t\t\t\t{\"/path/to/client/dir/c\", \"/path/to/server/dir/b\"},\n\t\t\t\t\t},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{\n\t\t\t\t\t\t{\"/path/to/server/dir/a\", \"/path/to/client/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/server/dir/b\", \"/path/to/client/dir/b\"},\n\t\t\t\t\t\t{\"/path/to/server/dir/b\", \"/path/to/client/dir/c\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trest: \"/path/to/client/dir/b /new/path\",\n\t\t\t},\n\t\t\twantRules: [][2]string{\n\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t{\"/path/to/client/dir/b\", \"/new/path\"},\n\t\t\t\t{\"/path/to/client/dir/c\", \"/path/to/server/dir/b\"},\n\t\t\t},\n\t\t\twantErr: false,\n\t\t},\n\t\t{\n\t\t\tname: \"modify rule with from as empty string(multiple)\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{\n\t\t\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t\t\t{\"\", \"/path/to/server/dir/b\"},\n\t\t\t\t\t\t{\"/path/to/client/dir/c\", \"/path/to/server/dir/b\"},\n\t\t\t\t\t},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{\n\t\t\t\t\t\t{\"/path/to/server/dir/a\", \"/path/to/client/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/server/dir/b\", \"\"},\n\t\t\t\t\t\t{\"/path/to/server/dir/b\", \"/path/to/client/dir/c\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trest: `\"\" /new/path`,\n\t\t\t},\n\t\t\twantRules: [][2]string{\n\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t{\"\", \"/new/path\"},\n\t\t\t\t{\"/path/to/client/dir/c\", \"/path/to/server/dir/b\"},\n\t\t\t},\n\t\t\twantErr: false,\n\t\t},\n\t\t{\n\t\t\tname: \"modify rule with to as empty string(multiple)\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{\n\t\t\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/client/dir/b\", \"/path/to/server/dir/b\"},\n\t\t\t\t\t\t{\"/path/to/client/dir/c\", \"/path/to/server/dir/b\"},\n\t\t\t\t\t},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{\n\t\t\t\t\t\t{\"/path/to/server/dir/a\", \"/path/to/client/dir/a\"},\n\t\t\t\t\t\t{\"/path/to/server/dir/b\", \"/path/to/client/dir/b\"},\n\t\t\t\t\t\t{\"/path/to/server/dir/b\", \"/path/to/client/dir/c\"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\trest: `/path/to/client/dir/b \"\"`,\n\t\t\t},\n\t\t\twantRules: [][2]string{\n\t\t\t\t{\"/path/to/client/dir/a\", \"/path/to/server/dir/a\"},\n\t\t\t\t{\"/path/to/client/dir/b\", \"\"},\n\t\t\t\t{\"/path/to/client/dir/c\", \"/path/to/server/dir/b\"},\n\t\t\t},\n\t\t\twantErr: false,\n\t\t},\n\t\t// Test delete rule.\n\t\t{\n\t\t\tname: \"delete rule\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{{\"/path/to/client/dir\", \"/path/to/server/dir\"}},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{{\"/path/to/server/dir\", \"/path/to/client/dir\"}},\n\t\t\t\t},\n\t\t\t\trest: \"/path/to/client/dir\",\n\t\t\t},\n\t\t\twantRules: [][2]string{},\n\t\t\twantErr:   false,\n\t\t},\n\t\t{\n\t\t\tname: \"delete rule, empty string\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{{\"\", \"/path/to/server/dir\"}},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{{\"/path/to/server/dir\", \"\"}},\n\t\t\t\t},\n\t\t\t\trest: `\"\"`,\n\t\t\t},\n\t\t\twantRules: [][2]string{},\n\t\t\twantErr:   false,\n\t\t},\n\t\t// Test invalid input.\n\t\t{\n\t\t\tname: \"error on delete nonexistent rule\",\n\t\t\targs: args{\n\t\t\t\targs: &launchAttachArgs{\n\t\t\t\t\tsubstitutePathClientToServer: [][2]string{{\"/path/to/client/dir\", \"/path/to/server/dir\"}},\n\t\t\t\t\tsubstitutePathServerToClient: [][2]string{{\"/path/to/server/dir\", \"/path/to/client/dir\"}},\n\t\t\t\t},\n\t\t\t\trest: \"/path/to/server/dir\",\n\t\t\t},\n\t\t\twantRules: [][2]string{{\"/path/to/client/dir\", \"/path/to/server/dir\"}},\n\t\t\twantErr:   true,\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\terr := configureSetSubstitutePath(tt.args.args, tt.args.rest)\n\t\t\tif (err != nil) != tt.wantErr {\n\t\t\t\tt.Errorf(\"configureSetSubstitutePath() error = %v, wantErr %v\", err, tt.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif len(tt.args.args.substitutePathClientToServer) != len(tt.wantRules) {\n\t\t\t\tt.Errorf(\"configureSetSubstitutePath() got substitutePathClientToServer=%v, want %d rules\", tt.args.args.substitutePathClientToServer, len(tt.wantRules))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tgotClient2Server := tt.args.args.substitutePathClientToServer\n\t\t\tgotServer2Client := tt.args.args.substitutePathServerToClient\n\t\t\tfor i, rule := range tt.wantRules {\n\t\t\t\tif gotClient2Server[i][0] != rule[0] || gotClient2Server[i][1] != rule[1] {\n\t\t\t\t\tt.Errorf(\"configureSetSubstitutePath() got substitutePathClientToServer[%d]=%#v,\\n want %#v rules\", i, gotClient2Server[i], rule)\n\t\t\t\t}\n\t\t\t\tif gotServer2Client[i][1] != rule[0] || gotServer2Client[i][0] != rule[1] {\n\t\t\t\t\treverseRule := [2]string{rule[1], rule[0]}\n\t\t\t\t\tt.Errorf(\"configureSetSubstitutePath() got substitutePathServerToClient[%d]=%#v,\\n want %#v rules\", i, gotClient2Server[i], reverseRule)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "service/dap/daptest/client.go",
    "content": "// Package daptest provides a sample client with utilities\n// for DAP mode testing.\npackage daptest\n\n//go:generate go run github.com/go-delve/build-tools/cmd/gen-daptest@latest -o ./resp.go\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/go-dap\"\n)\n\n// Client is a debugger service client that uses Debug Adaptor Protocol.\n// It does not (yet?) implement service.Client interface.\n// All client methods are synchronous.\ntype Client struct {\n\tconn   net.Conn\n\treader *bufio.Reader\n\t// seq is used to track the sequence number of each\n\t// requests that the client sends to the server\n\tseq int\n}\n\n// NewClient creates a new Client over a TCP connection.\n// Call Close() to close the connection.\nfunc NewClient(addr string) *Client {\n\tfmt.Println(\"Connecting to server at:\", addr)\n\tconn, err := net.Dial(\"tcp\", addr)\n\tif err != nil {\n\t\tlog.Fatal(\"dialing:\", err)\n\t}\n\treturn NewClientFromConn(conn)\n}\n\n// NewClientFromConn creates a new Client with the given TCP connection.\n// Call Close to close the connection.\nfunc NewClientFromConn(conn net.Conn) *Client {\n\tc := &Client{conn: conn, reader: bufio.NewReader(conn)}\n\tc.seq = 1 // match VS Code numbering\n\treturn c\n}\n\n// Close closes the client connection.\nfunc (c *Client) Close() {\n\tc.conn.Close()\n}\n\nfunc (c *Client) send(request dap.Message) {\n\tdap.WriteProtocolMessage(c.conn, request)\n}\n\nfunc (c *Client) ReadMessage(t *testing.T) (dap.Message, error) {\n\tm, err := dap.ReadProtocolMessage(c.reader)\n\tif m != nil && m.GetSeq() == 0 {\n\t\tt.Fatal(\"sequenceless message\")\n\t}\n\treturn m, err\n}\n\nfunc (c *Client) ExpectMessage(t *testing.T) dap.Message {\n\tt.Helper()\n\tfor {\n\t\tm, err := dap.ReadProtocolMessage(c.reader)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif m.GetSeq() == 0 {\n\t\t\tt.Fatal(\"sequenceless message\")\n\t\t}\n\t\t// Skip debuginfod download progress output events. These are\n\t\t// asynchronous and only appear when debuginfod is available on the\n\t\t// system (not in CI), so tests must tolerate their presence or\n\t\t// absence.\n\t\tif oe, ok := m.(*dap.OutputEvent); ok && strings.HasPrefix(oe.Body.Output, \"Download debug info for \") {\n\t\t\tcontinue\n\t\t}\n\t\treturn m\n\t}\n}\n\nfunc (c *Client) ExpectInvisibleErrorResponse(t *testing.T) *dap.ErrorResponse {\n\tt.Helper()\n\ter := c.ExpectErrorResponse(t)\n\tif er.Body.Error != nil && er.Body.Error.ShowUser {\n\t\tt.Errorf(\"\\ngot %#v\\nwant ShowUser=false\", er)\n\t}\n\treturn er\n}\n\nfunc (c *Client) ExpectVisibleErrorResponse(t *testing.T) *dap.ErrorResponse {\n\tt.Helper()\n\ter := c.ExpectErrorResponse(t)\n\tif er.Body.Error == nil || !er.Body.Error.ShowUser {\n\t\tt.Errorf(\"\\ngot %#v\\nwant ShowUser=true\", er)\n\t}\n\treturn er\n}\n\nfunc (c *Client) ExpectErrorResponseWith(t *testing.T, id int, message string, showUser bool) *dap.ErrorResponse {\n\tt.Helper()\n\ter := c.ExpectErrorResponse(t)\n\tif er.Body.Error == nil {\n\t\tt.Errorf(\"got nil, want Id=%d Format=%q ShowUser=%v\", id, message, showUser)\n\t\treturn er\n\t}\n\tif matched, _ := regexp.MatchString(message, er.Body.Error.Format); !matched || er.Body.Error.Id != id || er.Body.Error.ShowUser != showUser {\n\t\tt.Errorf(\"got %#v, want Id=%d Format=%q ShowUser=%v\", er, id, message, showUser)\n\t}\n\treturn er\n}\n\nfunc (c *Client) ExpectInitializeResponseAndCapabilities(t *testing.T) *dap.InitializeResponse {\n\tt.Helper()\n\treturn c.ExpectInitializeResponse(t)\n}\n\nfunc (c *Client) ExpectNotYetImplementedErrorResponse(t *testing.T) *dap.ErrorResponse {\n\tt.Helper()\n\treturn c.ExpectErrorResponseWith(t, 7777, \"Not yet implemented\", false)\n}\n\nfunc (c *Client) ExpectUnsupportedCommandErrorResponse(t *testing.T) *dap.ErrorResponse {\n\tt.Helper()\n\treturn c.ExpectErrorResponseWith(t, 9999, \"Unsupported command\", false)\n}\n\nfunc (c *Client) ExpectCapabilitiesEventSupportTerminateDebuggee(t *testing.T) *dap.CapabilitiesEvent {\n\tt.Helper()\n\te := c.ExpectCapabilitiesEvent(t)\n\tif !e.Body.Capabilities.SupportTerminateDebuggee {\n\t\tt.Errorf(\"\\ngot %#v\\nwant SupportTerminateDebuggee=true\", e.Body.Capabilities.SupportTerminateDebuggee)\n\t}\n\treturn e\n}\n\nfunc (c *Client) ExpectOutputEventRegex(t *testing.T, want string) *dap.OutputEvent {\n\tt.Helper()\n\te := c.ExpectOutputEvent(t)\n\tif matched, _ := regexp.MatchString(want, e.Body.Output); !matched {\n\t\tt.Errorf(\"\\ngot %#v\\nwant Output=%q\", e, want)\n\t}\n\treturn e\n}\n\nconst ProcessExited = `Process [0-9]+ has exited with status %s\\n`\n\nfunc (c *Client) ExpectOutputEventProcessExited(t *testing.T, status int) *dap.OutputEvent {\n\tt.Helper()\n\t// We sometimes fail to return the correct exit status on Linux, so allow -1 here as well.\n\treturn c.ExpectOutputEventRegex(t, fmt.Sprintf(ProcessExited, fmt.Sprintf(\"(%d|-1)\", status)))\n}\n\nfunc (c *Client) ExpectOutputEventProcessExitedAnyStatus(t *testing.T) *dap.OutputEvent {\n\tt.Helper()\n\treturn c.ExpectOutputEventRegex(t, fmt.Sprintf(ProcessExited, `-?\\d+`))\n}\n\nfunc (c *Client) ExpectOutputEventDetaching(t *testing.T) *dap.OutputEvent {\n\tt.Helper()\n\treturn c.ExpectOutputEventRegex(t, `Detaching\\n`)\n}\n\nfunc (c *Client) ExpectOutputEventDetachingKill(t *testing.T) *dap.OutputEvent {\n\tt.Helper()\n\treturn c.ExpectOutputEventRegex(t, `Detaching and terminating target process\\n`)\n}\n\nfunc (c *Client) ExpectOutputEventDetachingNoKill(t *testing.T) *dap.OutputEvent {\n\tt.Helper()\n\treturn c.ExpectOutputEventRegex(t, `Detaching without terminating target process\\n`)\n}\n\nfunc (c *Client) ExpectOutputEventTerminating(t *testing.T) *dap.OutputEvent {\n\tt.Helper()\n\treturn c.ExpectOutputEventRegex(t, `Terminating process [0-9]+\\n`)\n}\n\nconst ClosingClient = \"Closing client session, but leaving multi-client DAP server at .+:[0-9]+ with debuggee %s\\n\"\n\nfunc (c *Client) ExpectOutputEventClosingClient(t *testing.T, status string) *dap.OutputEvent {\n\tt.Helper()\n\treturn c.ExpectOutputEventRegex(t, fmt.Sprintf(ClosingClient, status))\n}\n\nfunc (c *Client) CheckStopLocation(t *testing.T, thread int, name string, line any) {\n\tt.Helper()\n\tc.StackTraceRequest(thread, 0, 20)\n\tst := c.ExpectStackTraceResponse(t)\n\tif len(st.Body.StackFrames) < 1 {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant len(stackframes) => 1\", st)\n\t} else {\n\t\tswitch line := line.(type) {\n\t\tcase int:\n\t\t\tif line != -1 && st.Body.StackFrames[0].Line != line {\n\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Line=%d\", st, line)\n\t\t\t}\n\t\tcase []int:\n\t\t\tfound := false\n\t\t\tfor _, line := range line {\n\t\t\t\tif st.Body.StackFrames[0].Line == line {\n\t\t\t\t\tfound = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !found {\n\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Line=%v\", st, line)\n\t\t\t}\n\t\t}\n\t\tif st.Body.StackFrames[0].Name != name {\n\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Name=%q\", st, name)\n\t\t}\n\t}\n}\n\n// InitializeRequest sends an 'initialize' request.\nfunc (c *Client) InitializeRequest() {\n\trequest := &dap.InitializeRequest{Request: *c.newRequest(\"initialize\")}\n\trequest.Arguments = dap.InitializeRequestArguments{\n\t\tAdapterID:                    \"go\",\n\t\tPathFormat:                   \"path\",\n\t\tLinesStartAt1:                true,\n\t\tColumnsStartAt1:              true,\n\t\tSupportsVariableType:         true,\n\t\tSupportsVariablePaging:       true,\n\t\tSupportsRunInTerminalRequest: true,\n\t\tSupportsMemoryReferences:     true,\n\t\tLocale:                       \"en-us\",\n\t}\n\tc.send(request)\n}\n\n// InitializeRequestWithArgs sends an 'initialize' request with specified arguments.\nfunc (c *Client) InitializeRequestWithArgs(args dap.InitializeRequestArguments) {\n\trequest := &dap.InitializeRequest{Request: *c.newRequest(\"initialize\")}\n\trequest.Arguments = args\n\tc.send(request)\n}\n\nfunc toRawMessage(in any) json.RawMessage {\n\tout, _ := json.Marshal(in)\n\treturn out\n}\n\n// LaunchRequest sends a 'launch' request with the specified args.\nfunc (c *Client) LaunchRequest(mode, program string, stopOnEntry bool) {\n\trequest := &dap.LaunchRequest{Request: *c.newRequest(\"launch\")}\n\trequest.Arguments = toRawMessage(map[string]any{\n\t\t\"request\":     \"launch\",\n\t\t\"mode\":        mode,\n\t\t\"program\":     program,\n\t\t\"stopOnEntry\": stopOnEntry,\n\t})\n\tc.send(request)\n}\n\n// LaunchRequestWithArgs takes a map of untyped implementation-specific\n// arguments to send a 'launch' request. This version can be used to\n// test for values of unexpected types or unspecified values.\nfunc (c *Client) LaunchRequestWithArgs(arguments map[string]any) {\n\trequest := &dap.LaunchRequest{Request: *c.newRequest(\"launch\")}\n\trequest.Arguments = toRawMessage(arguments)\n\tc.send(request)\n}\n\n// AttachRequest sends an 'attach' request with the specified\n// arguments.\nfunc (c *Client) AttachRequest(arguments map[string]any) {\n\trequest := &dap.AttachRequest{Request: *c.newRequest(\"attach\")}\n\trequest.Arguments = toRawMessage(arguments)\n\tc.send(request)\n}\n\n// DisconnectRequest sends a 'disconnect' request.\nfunc (c *Client) DisconnectRequest() {\n\trequest := &dap.DisconnectRequest{Request: *c.newRequest(\"disconnect\")}\n\tc.send(request)\n}\n\n// DisconnectRequestWithKillOption sends a 'disconnect' request with an option to specify\n// `terminateDebuggee`.\nfunc (c *Client) DisconnectRequestWithKillOption(kill bool) {\n\trequest := &dap.DisconnectRequest{Request: *c.newRequest(\"disconnect\")}\n\trequest.Arguments = &dap.DisconnectArguments{\n\t\tTerminateDebuggee: kill,\n\t}\n\tc.send(request)\n}\n\n// SetBreakpointsRequest sends a 'setBreakpoints' request.\nfunc (c *Client) SetBreakpointsRequest(file string, lines []int) {\n\tc.SetBreakpointsRequestWithArgs(file, lines, nil, nil, nil)\n}\n\n// SetBreakpointsRequestWithArgs sends a 'setBreakpoints' request with an option to\n// specify conditions, hit conditions, and log messages.\nfunc (c *Client) SetBreakpointsRequestWithArgs(file string, lines []int, conditions, hitConditions, logMessages map[int]string) {\n\trequest := &dap.SetBreakpointsRequest{Request: *c.newRequest(\"setBreakpoints\")}\n\trequest.Arguments = dap.SetBreakpointsArguments{\n\t\tSource: dap.Source{\n\t\t\tName: filepath.Base(file),\n\t\t\tPath: file,\n\t\t},\n\t\tBreakpoints: make([]dap.SourceBreakpoint, len(lines)),\n\t}\n\tfor i, l := range lines {\n\t\trequest.Arguments.Breakpoints[i].Line = l\n\t\tif cond, ok := conditions[l]; ok {\n\t\t\trequest.Arguments.Breakpoints[i].Condition = cond\n\t\t}\n\t\tif hitCond, ok := hitConditions[l]; ok {\n\t\t\trequest.Arguments.Breakpoints[i].HitCondition = hitCond\n\t\t}\n\t\tif logMessage, ok := logMessages[l]; ok {\n\t\t\trequest.Arguments.Breakpoints[i].LogMessage = logMessage\n\t\t}\n\t}\n\tc.send(request)\n}\n\n// SetExceptionBreakpointsRequest sends a 'setExceptionBreakpoints' request.\nfunc (c *Client) SetExceptionBreakpointsRequest(filters []string) {\n\trequest := &dap.SetExceptionBreakpointsRequest{Request: *c.newRequest(\"setExceptionBreakpoints\")}\n\trequest.Arguments.Filters = filters\n\tc.send(request)\n}\n\n// ConfigurationDoneRequest sends a 'configurationDone' request.\nfunc (c *Client) ConfigurationDoneRequest() {\n\trequest := &dap.ConfigurationDoneRequest{Request: *c.newRequest(\"configurationDone\")}\n\tc.send(request)\n}\n\n// ContinueRequest sends a 'continue' request.\nfunc (c *Client) ContinueRequest(thread int) {\n\trequest := &dap.ContinueRequest{Request: *c.newRequest(\"continue\")}\n\trequest.Arguments.ThreadId = thread\n\tc.send(request)\n}\n\n// NextRequest sends a 'next' request.\nfunc (c *Client) NextRequest(thread int) {\n\trequest := &dap.NextRequest{Request: *c.newRequest(\"next\")}\n\trequest.Arguments.ThreadId = thread\n\tc.send(request)\n}\n\n// NextInstructionRequest sends a 'next' request with granularity 'instruction'.\nfunc (c *Client) NextInstructionRequest(thread int) {\n\trequest := &dap.NextRequest{Request: *c.newRequest(\"next\")}\n\trequest.Arguments.ThreadId = thread\n\trequest.Arguments.Granularity = \"instruction\"\n\tc.send(request)\n}\n\n// StepInRequest sends a 'stepIn' request.\nfunc (c *Client) StepInRequest(thread int) {\n\trequest := &dap.StepInRequest{Request: *c.newRequest(\"stepIn\")}\n\trequest.Arguments.ThreadId = thread\n\tc.send(request)\n}\n\n// StepInInstructionRequest sends a 'stepIn' request with granularity 'instruction'.\nfunc (c *Client) StepInInstructionRequest(thread int) {\n\trequest := &dap.StepInRequest{Request: *c.newRequest(\"stepIn\")}\n\trequest.Arguments.ThreadId = thread\n\trequest.Arguments.Granularity = \"instruction\"\n\tc.send(request)\n}\n\n// StepOutRequest sends a 'stepOut' request.\nfunc (c *Client) StepOutRequest(thread int) {\n\trequest := &dap.StepOutRequest{Request: *c.newRequest(\"stepOut\")}\n\trequest.Arguments.ThreadId = thread\n\tc.send(request)\n}\n\n// StepOutInstructionRequest sends a 'stepOut' request with granularity 'instruction'.\nfunc (c *Client) StepOutInstructionRequest(thread int) {\n\trequest := &dap.StepOutRequest{Request: *c.newRequest(\"stepOut\")}\n\trequest.Arguments.ThreadId = thread\n\trequest.Arguments.Granularity = \"instruction\"\n\tc.send(request)\n}\n\n// PauseRequest sends a 'pause' request.\nfunc (c *Client) PauseRequest(threadId int) {\n\trequest := &dap.PauseRequest{Request: *c.newRequest(\"pause\")}\n\trequest.Arguments.ThreadId = threadId\n\tc.send(request)\n}\n\n// ThreadsRequest sends a 'threads' request.\nfunc (c *Client) ThreadsRequest() {\n\trequest := &dap.ThreadsRequest{Request: *c.newRequest(\"threads\")}\n\tc.send(request)\n}\n\n// StackTraceRequest sends a 'stackTrace' request.\nfunc (c *Client) StackTraceRequest(threadID, startFrame, levels int) {\n\trequest := &dap.StackTraceRequest{Request: *c.newRequest(\"stackTrace\")}\n\trequest.Arguments.ThreadId = threadID\n\trequest.Arguments.StartFrame = startFrame\n\trequest.Arguments.Levels = levels\n\tc.send(request)\n}\n\n// ScopesRequest sends a 'scopes' request.\nfunc (c *Client) ScopesRequest(frameID int) {\n\trequest := &dap.ScopesRequest{Request: *c.newRequest(\"scopes\")}\n\trequest.Arguments.FrameId = frameID\n\tc.send(request)\n}\n\n// VariablesRequest sends a 'variables' request.\nfunc (c *Client) VariablesRequest(variablesReference int) {\n\trequest := &dap.VariablesRequest{Request: *c.newRequest(\"variables\")}\n\trequest.Arguments.VariablesReference = variablesReference\n\tc.send(request)\n}\n\n// IndexedVariablesRequest sends a 'variables' request.\nfunc (c *Client) IndexedVariablesRequest(variablesReference, start, count int) {\n\trequest := &dap.VariablesRequest{Request: *c.newRequest(\"variables\")}\n\trequest.Arguments.VariablesReference = variablesReference\n\trequest.Arguments.Filter = \"indexed\"\n\trequest.Arguments.Start = start\n\trequest.Arguments.Count = count\n\tc.send(request)\n}\n\n// NamedVariablesRequest sends a 'variables' request.\nfunc (c *Client) NamedVariablesRequest(variablesReference int) {\n\trequest := &dap.VariablesRequest{Request: *c.newRequest(\"variables\")}\n\trequest.Arguments.VariablesReference = variablesReference\n\trequest.Arguments.Filter = \"named\"\n\tc.send(request)\n}\n\n// TerminateRequest sends a 'terminate' request.\nfunc (c *Client) TerminateRequest() {\n\tc.send(&dap.TerminateRequest{Request: *c.newRequest(\"terminate\")})\n}\n\n// RestartRequest sends a 'restart' request with specified arguments, if provided.\nfunc (c *Client) RestartRequest(arguments map[string]any) {\n\trequest := &dap.RestartRequest{Request: *c.newRequest(\"restart\")}\n\tif arguments != nil {\n\t\trequest.Arguments = toRawMessage(arguments)\n\t}\n\tc.send(request)\n}\n\n// SetFunctionBreakpointsRequest sends a 'setFunctionBreakpoints' request.\nfunc (c *Client) SetFunctionBreakpointsRequest(breakpoints []dap.FunctionBreakpoint) {\n\tc.send(&dap.SetFunctionBreakpointsRequest{\n\t\tRequest: *c.newRequest(\"setFunctionBreakpoints\"),\n\t\tArguments: dap.SetFunctionBreakpointsArguments{\n\t\t\tBreakpoints: breakpoints,\n\t\t},\n\t})\n}\n\n// SetInstructionBreakpointsRequest sends a 'setInstructionBreakpoints' request.\nfunc (c *Client) SetInstructionBreakpointsRequest(breakpoints []dap.InstructionBreakpoint) {\n\tc.send(&dap.SetInstructionBreakpointsRequest{\n\t\tRequest: *c.newRequest(\"setInstructionBreakpoints\"),\n\t\tArguments: dap.SetInstructionBreakpointsArguments{\n\t\t\tBreakpoints: breakpoints,\n\t\t},\n\t})\n}\n\n// StepBackRequest sends a 'stepBack' request.\nfunc (c *Client) StepBackRequest() {\n\tc.send(&dap.StepBackRequest{Request: *c.newRequest(\"stepBack\")})\n}\n\n// ReverseContinueRequest sends a 'reverseContinue' request.\nfunc (c *Client) ReverseContinueRequest() {\n\tc.send(&dap.ReverseContinueRequest{Request: *c.newRequest(\"reverseContinue\")})\n}\n\n// SetVariableRequest sends a 'setVariable' request.\nfunc (c *Client) SetVariableRequest(variablesRef int, name, value string) {\n\trequest := &dap.SetVariableRequest{Request: *c.newRequest(\"setVariable\")}\n\trequest.Arguments.VariablesReference = variablesRef\n\trequest.Arguments.Name = name\n\trequest.Arguments.Value = value\n\tc.send(request)\n}\n\n// RestartFrameRequest sends a 'restartFrame' request.\nfunc (c *Client) RestartFrameRequest() {\n\tc.send(&dap.RestartFrameRequest{Request: *c.newRequest(\"restartFrame\")})\n}\n\n// GotoRequest sends a 'goto' request.\nfunc (c *Client) GotoRequest() {\n\tc.send(&dap.GotoRequest{Request: *c.newRequest(\"goto\")})\n}\n\n// SetExpressionRequest sends a 'setExpression' request.\nfunc (c *Client) SetExpressionRequest() {\n\tc.send(&dap.SetExpressionRequest{Request: *c.newRequest(\"setExpression\")})\n}\n\n// SourceRequest sends a 'source' request.\nfunc (c *Client) SourceRequest() {\n\tc.send(&dap.SourceRequest{Request: *c.newRequest(\"source\")})\n}\n\n// TerminateThreadsRequest sends a 'terminateThreads' request.\nfunc (c *Client) TerminateThreadsRequest() {\n\tc.send(&dap.TerminateThreadsRequest{Request: *c.newRequest(\"terminateThreads\")})\n}\n\n// EvaluateRequest sends a 'evaluate' request.\nfunc (c *Client) EvaluateRequest(expr string, fid int, context string) {\n\trequest := &dap.EvaluateRequest{Request: *c.newRequest(\"evaluate\")}\n\trequest.Arguments.Expression = expr\n\trequest.Arguments.FrameId = fid\n\trequest.Arguments.Context = context\n\tc.send(request)\n}\n\n// StepInTargetsRequest sends a 'stepInTargets' request.\nfunc (c *Client) StepInTargetsRequest() {\n\tc.send(&dap.StepInTargetsRequest{Request: *c.newRequest(\"stepInTargets\")})\n}\n\n// GotoTargetsRequest sends a 'gotoTargets' request.\nfunc (c *Client) GotoTargetsRequest() {\n\tc.send(&dap.GotoTargetsRequest{Request: *c.newRequest(\"gotoTargets\")})\n}\n\n// CompletionsRequest sends a 'completions' request.\nfunc (c *Client) CompletionsRequest() {\n\tc.send(&dap.CompletionsRequest{Request: *c.newRequest(\"completions\")})\n}\n\n// ExceptionInfoRequest sends a 'exceptionInfo' request.\nfunc (c *Client) ExceptionInfoRequest(threadID int) {\n\trequest := &dap.ExceptionInfoRequest{Request: *c.newRequest(\"exceptionInfo\")}\n\trequest.Arguments.ThreadId = threadID\n\tc.send(request)\n}\n\n// LoadedSourcesRequest sends a 'loadedSources' request.\nfunc (c *Client) LoadedSourcesRequest() {\n\tc.send(&dap.LoadedSourcesRequest{Request: *c.newRequest(\"loadedSources\")})\n}\n\n// DataBreakpointInfoRequest sends a 'dataBreakpointInfo' request.\nfunc (c *Client) DataBreakpointInfoRequest() {\n\tc.send(&dap.DataBreakpointInfoRequest{Request: *c.newRequest(\"dataBreakpointInfo\")})\n}\n\n// SetDataBreakpointsRequest sends a 'setDataBreakpoints' request.\nfunc (c *Client) SetDataBreakpointsRequest() {\n\tc.send(&dap.SetDataBreakpointsRequest{Request: *c.newRequest(\"setDataBreakpoints\")})\n}\n\n// ReadMemoryRequest sends a 'readMemory' request.\nfunc (c *Client) ReadMemoryRequest(ref string, offset, count int) {\n\tc.send(&dap.ReadMemoryRequest{\n\t\tRequest: *c.newRequest(\"readMemory\"),\n\t\tArguments: dap.ReadMemoryArguments{\n\t\t\tMemoryReference: ref,\n\t\t\tOffset:          offset,\n\t\t\tCount:           count,\n\t\t}})\n}\n\n// DisassembleRequest sends a 'disassemble' request.\nfunc (c *Client) DisassembleRequest(memoryReference string, instructionOffset, instructionCount int) {\n\tc.send(&dap.DisassembleRequest{\n\t\tRequest: *c.newRequest(\"disassemble\"),\n\t\tArguments: dap.DisassembleArguments{\n\t\t\tMemoryReference:   memoryReference,\n\t\t\tOffset:            0,\n\t\t\tInstructionOffset: instructionOffset,\n\t\t\tInstructionCount:  instructionCount,\n\t\t\tResolveSymbols:    false,\n\t\t},\n\t})\n}\n\n// CancelRequest sends a 'cancel' request.\nfunc (c *Client) CancelRequest() {\n\tc.send(&dap.CancelRequest{Request: *c.newRequest(\"cancel\")})\n}\n\n// BreakpointLocationsRequest sends a 'breakpointLocations' request.\nfunc (c *Client) BreakpointLocationsRequest() {\n\tc.send(&dap.BreakpointLocationsRequest{Request: *c.newRequest(\"breakpointLocations\")})\n}\n\n// ModulesRequest sends a 'modules' request.\nfunc (c *Client) ModulesRequest() {\n\tc.send(&dap.ModulesRequest{Request: *c.newRequest(\"modules\")})\n}\n\n// UnknownRequest triggers dap.DecodeProtocolMessageFieldError.\nfunc (c *Client) UnknownRequest() {\n\trequest := c.newRequest(\"unknown\")\n\tc.send(request)\n}\n\n// UnknownEvent triggers dap.DecodeProtocolMessageFieldError.\nfunc (c *Client) UnknownEvent() {\n\tevent := &dap.Event{}\n\tevent.Type = \"event\"\n\tevent.Seq = -1\n\tevent.Event = \"unknown\"\n\tc.send(event)\n}\n\n// BadRequest triggers an unmarshal error.\nfunc (c *Client) BadRequest() {\n\tcontent := []byte(\"{malformedString}\")\n\tcontentLengthHeaderFmt := \"Content-Length: %d\\r\\n\\r\\n\"\n\theader := fmt.Sprintf(contentLengthHeaderFmt, len(content))\n\tc.conn.Write([]byte(header))\n\tc.conn.Write(content)\n}\n\n// KnownEvent passes decode checks, but delve has no 'case' to\n// handle it. This behaves the same way a new request type\n// added to go-dap, but not to delve.\nfunc (c *Client) KnownEvent() {\n\tevent := &dap.Event{}\n\tevent.Type = \"event\"\n\tevent.Seq = -1\n\tevent.Event = \"terminated\"\n\tc.send(event)\n}\n\nfunc (c *Client) newRequest(command string) *dap.Request {\n\trequest := &dap.Request{}\n\trequest.Type = \"request\"\n\trequest.Command = command\n\trequest.Seq = c.seq\n\tc.seq++\n\treturn request\n}\n"
  },
  {
    "path": "service/dap/daptest/resp.go",
    "content": "package daptest\n\n// Code generated by go generate; DO NOT EDIT.\n// The code generator program is in ./gen directory.\n\nimport (\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/google/go-dap\"\n)\n\n// ExpectAttachResponse reads a protocol message from the connection\n// and fails the test if the read message is not *AttachResponse.\nfunc (c *Client) ExpectAttachResponse(t *testing.T) *dap.AttachResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckAttachResponse(t, m)\n}\n\n// CheckAttachResponse fails the test if m is not *AttachResponse.\nfunc (c *Client) CheckAttachResponse(t *testing.T, m dap.Message) *dap.AttachResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.AttachResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.AttachResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectBreakpointEvent reads a protocol message from the connection\n// and fails the test if the read message is not *BreakpointEvent.\nfunc (c *Client) ExpectBreakpointEvent(t *testing.T) *dap.BreakpointEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckBreakpointEvent(t, m)\n}\n\n// CheckBreakpointEvent fails the test if m is not *BreakpointEvent.\nfunc (c *Client) CheckBreakpointEvent(t *testing.T, m dap.Message) *dap.BreakpointEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.BreakpointEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.BreakpointEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectBreakpointLocationsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *BreakpointLocationsResponse.\nfunc (c *Client) ExpectBreakpointLocationsResponse(t *testing.T) *dap.BreakpointLocationsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckBreakpointLocationsResponse(t, m)\n}\n\n// CheckBreakpointLocationsResponse fails the test if m is not *BreakpointLocationsResponse.\nfunc (c *Client) CheckBreakpointLocationsResponse(t *testing.T, m dap.Message) *dap.BreakpointLocationsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.BreakpointLocationsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.BreakpointLocationsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectCancelResponse reads a protocol message from the connection\n// and fails the test if the read message is not *CancelResponse.\nfunc (c *Client) ExpectCancelResponse(t *testing.T) *dap.CancelResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckCancelResponse(t, m)\n}\n\n// CheckCancelResponse fails the test if m is not *CancelResponse.\nfunc (c *Client) CheckCancelResponse(t *testing.T, m dap.Message) *dap.CancelResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.CancelResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.CancelResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectCapabilitiesEvent reads a protocol message from the connection\n// and fails the test if the read message is not *CapabilitiesEvent.\nfunc (c *Client) ExpectCapabilitiesEvent(t *testing.T) *dap.CapabilitiesEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckCapabilitiesEvent(t, m)\n}\n\n// CheckCapabilitiesEvent fails the test if m is not *CapabilitiesEvent.\nfunc (c *Client) CheckCapabilitiesEvent(t *testing.T, m dap.Message) *dap.CapabilitiesEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.CapabilitiesEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.CapabilitiesEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectCompletionsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *CompletionsResponse.\nfunc (c *Client) ExpectCompletionsResponse(t *testing.T) *dap.CompletionsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckCompletionsResponse(t, m)\n}\n\n// CheckCompletionsResponse fails the test if m is not *CompletionsResponse.\nfunc (c *Client) CheckCompletionsResponse(t *testing.T, m dap.Message) *dap.CompletionsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.CompletionsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.CompletionsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectConfigurationDoneResponse reads a protocol message from the connection\n// and fails the test if the read message is not *ConfigurationDoneResponse.\nfunc (c *Client) ExpectConfigurationDoneResponse(t *testing.T) *dap.ConfigurationDoneResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckConfigurationDoneResponse(t, m)\n}\n\n// CheckConfigurationDoneResponse fails the test if m is not *ConfigurationDoneResponse.\nfunc (c *Client) CheckConfigurationDoneResponse(t *testing.T, m dap.Message) *dap.ConfigurationDoneResponse {\n\tt.Helper()\n\toe, ok := m.(*dap.OutputEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.OutputEvent\", m)\n\t}\n\tif oe.Body.Output != \"Type 'dlv help' for list of commands.\\n\" {\n\t\tt.Fatalf(\"got %#v, want Output=%q\", m, \"Type 'dlv help' for list of commands.\\n\")\n\t}\n\tm = c.ExpectMessage(t)\n\tr, ok := m.(*dap.ConfigurationDoneResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ConfigurationDoneResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectContinueResponse reads a protocol message from the connection\n// and fails the test if the read message is not *ContinueResponse.\nfunc (c *Client) ExpectContinueResponse(t *testing.T) *dap.ContinueResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckContinueResponse(t, m)\n}\n\n// CheckContinueResponse fails the test if m is not *ContinueResponse.\nfunc (c *Client) CheckContinueResponse(t *testing.T, m dap.Message) *dap.ContinueResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.ContinueResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ContinueResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectContinuedEvent reads a protocol message from the connection\n// and fails the test if the read message is not *ContinuedEvent.\nfunc (c *Client) ExpectContinuedEvent(t *testing.T) *dap.ContinuedEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckContinuedEvent(t, m)\n}\n\n// CheckContinuedEvent fails the test if m is not *ContinuedEvent.\nfunc (c *Client) CheckContinuedEvent(t *testing.T, m dap.Message) *dap.ContinuedEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.ContinuedEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ContinuedEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectDataBreakpointInfoResponse reads a protocol message from the connection\n// and fails the test if the read message is not *DataBreakpointInfoResponse.\nfunc (c *Client) ExpectDataBreakpointInfoResponse(t *testing.T) *dap.DataBreakpointInfoResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckDataBreakpointInfoResponse(t, m)\n}\n\n// CheckDataBreakpointInfoResponse fails the test if m is not *DataBreakpointInfoResponse.\nfunc (c *Client) CheckDataBreakpointInfoResponse(t *testing.T, m dap.Message) *dap.DataBreakpointInfoResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.DataBreakpointInfoResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.DataBreakpointInfoResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectDisassembleResponse reads a protocol message from the connection\n// and fails the test if the read message is not *DisassembleResponse.\nfunc (c *Client) ExpectDisassembleResponse(t *testing.T) *dap.DisassembleResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckDisassembleResponse(t, m)\n}\n\n// CheckDisassembleResponse fails the test if m is not *DisassembleResponse.\nfunc (c *Client) CheckDisassembleResponse(t *testing.T, m dap.Message) *dap.DisassembleResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.DisassembleResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.DisassembleResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectDisconnectResponse reads a protocol message from the connection\n// and fails the test if the read message is not *DisconnectResponse.\nfunc (c *Client) ExpectDisconnectResponse(t *testing.T) *dap.DisconnectResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckDisconnectResponse(t, m)\n}\n\n// CheckDisconnectResponse fails the test if m is not *DisconnectResponse.\nfunc (c *Client) CheckDisconnectResponse(t *testing.T, m dap.Message) *dap.DisconnectResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.DisconnectResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.DisconnectResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectErrorResponse reads a protocol message from the connection\n// and fails the test if the read message is not *ErrorResponse.\nfunc (c *Client) ExpectErrorResponse(t *testing.T) *dap.ErrorResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckErrorResponse(t, m)\n}\n\n// CheckErrorResponse fails the test if m is not *ErrorResponse.\nfunc (c *Client) CheckErrorResponse(t *testing.T, m dap.Message) *dap.ErrorResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.ErrorResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ErrorResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectEvaluateResponse reads a protocol message from the connection\n// and fails the test if the read message is not *EvaluateResponse.\nfunc (c *Client) ExpectEvaluateResponse(t *testing.T) *dap.EvaluateResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckEvaluateResponse(t, m)\n}\n\n// CheckEvaluateResponse fails the test if m is not *EvaluateResponse.\nfunc (c *Client) CheckEvaluateResponse(t *testing.T, m dap.Message) *dap.EvaluateResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.EvaluateResponse)\n\tif !ok {\n\t\tif r, ok := m.(*dap.ErrorResponse); ok {\n\t\t\tt.Fatalf(\"got %#v (error: %#v), want *dap.EvaluateResponse\", r, r.Body.Error)\n\t\t}\n\t\tt.Fatalf(\"got %#v, want *dap.EvaluateResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectExceptionInfoResponse reads a protocol message from the connection\n// and fails the test if the read message is not *ExceptionInfoResponse.\nfunc (c *Client) ExpectExceptionInfoResponse(t *testing.T) *dap.ExceptionInfoResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckExceptionInfoResponse(t, m)\n}\n\n// CheckExceptionInfoResponse fails the test if m is not *ExceptionInfoResponse.\nfunc (c *Client) CheckExceptionInfoResponse(t *testing.T, m dap.Message) *dap.ExceptionInfoResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.ExceptionInfoResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ExceptionInfoResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectExitedEvent reads a protocol message from the connection\n// and fails the test if the read message is not *ExitedEvent.\nfunc (c *Client) ExpectExitedEvent(t *testing.T) *dap.ExitedEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckExitedEvent(t, m)\n}\n\n// CheckExitedEvent fails the test if m is not *ExitedEvent.\nfunc (c *Client) CheckExitedEvent(t *testing.T, m dap.Message) *dap.ExitedEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.ExitedEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ExitedEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectGotoResponse reads a protocol message from the connection\n// and fails the test if the read message is not *GotoResponse.\nfunc (c *Client) ExpectGotoResponse(t *testing.T) *dap.GotoResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckGotoResponse(t, m)\n}\n\n// CheckGotoResponse fails the test if m is not *GotoResponse.\nfunc (c *Client) CheckGotoResponse(t *testing.T, m dap.Message) *dap.GotoResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.GotoResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.GotoResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectGotoTargetsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *GotoTargetsResponse.\nfunc (c *Client) ExpectGotoTargetsResponse(t *testing.T) *dap.GotoTargetsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckGotoTargetsResponse(t, m)\n}\n\n// CheckGotoTargetsResponse fails the test if m is not *GotoTargetsResponse.\nfunc (c *Client) CheckGotoTargetsResponse(t *testing.T, m dap.Message) *dap.GotoTargetsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.GotoTargetsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.GotoTargetsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectInitializeResponse reads a protocol message from the connection\n// and fails the test if the read message is not *InitializeResponse.\nfunc (c *Client) ExpectInitializeResponse(t *testing.T) *dap.InitializeResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckInitializeResponse(t, m)\n}\n\n// CheckInitializeResponse fails the test if m is not *InitializeResponse.\nfunc (c *Client) CheckInitializeResponse(t *testing.T, m dap.Message) *dap.InitializeResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.InitializeResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.InitializeResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectInitializedEvent reads a protocol message from the connection\n// and fails the test if the read message is not *InitializedEvent.\nfunc (c *Client) ExpectInitializedEvent(t *testing.T) *dap.InitializedEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckInitializedEvent(t, m)\n}\n\n// CheckInitializedEvent fails the test if m is not *InitializedEvent.\nfunc (c *Client) CheckInitializedEvent(t *testing.T, m dap.Message) *dap.InitializedEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.InitializedEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.InitializedEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectInvalidatedEvent reads a protocol message from the connection\n// and fails the test if the read message is not *InvalidatedEvent.\nfunc (c *Client) ExpectInvalidatedEvent(t *testing.T) *dap.InvalidatedEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckInvalidatedEvent(t, m)\n}\n\n// CheckInvalidatedEvent fails the test if m is not *InvalidatedEvent.\nfunc (c *Client) CheckInvalidatedEvent(t *testing.T, m dap.Message) *dap.InvalidatedEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.InvalidatedEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.InvalidatedEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectLaunchResponse reads a protocol message from the connection\n// and fails the test if the read message is not *LaunchResponse.\nfunc (c *Client) ExpectLaunchResponse(t *testing.T) *dap.LaunchResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\tif oev, isoutput := m.(*dap.OutputEvent); isoutput && strings.HasPrefix(oev.Body.Output, \"Building\") {\n\t\t// skip this one, it's a the build message\n\t\tm = c.ExpectMessage(t)\n\t}\n\treturn c.CheckLaunchResponse(t, m)\n}\n\n// CheckLaunchResponse fails the test if m is not *LaunchResponse.\nfunc (c *Client) CheckLaunchResponse(t *testing.T, m dap.Message) *dap.LaunchResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.LaunchResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.LaunchResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectLoadedSourceEvent reads a protocol message from the connection\n// and fails the test if the read message is not *LoadedSourceEvent.\nfunc (c *Client) ExpectLoadedSourceEvent(t *testing.T) *dap.LoadedSourceEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckLoadedSourceEvent(t, m)\n}\n\n// CheckLoadedSourceEvent fails the test if m is not *LoadedSourceEvent.\nfunc (c *Client) CheckLoadedSourceEvent(t *testing.T, m dap.Message) *dap.LoadedSourceEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.LoadedSourceEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.LoadedSourceEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectLoadedSourcesResponse reads a protocol message from the connection\n// and fails the test if the read message is not *LoadedSourcesResponse.\nfunc (c *Client) ExpectLoadedSourcesResponse(t *testing.T) *dap.LoadedSourcesResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckLoadedSourcesResponse(t, m)\n}\n\n// CheckLoadedSourcesResponse fails the test if m is not *LoadedSourcesResponse.\nfunc (c *Client) CheckLoadedSourcesResponse(t *testing.T, m dap.Message) *dap.LoadedSourcesResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.LoadedSourcesResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.LoadedSourcesResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectMemoryEvent reads a protocol message from the connection\n// and fails the test if the read message is not *MemoryEvent.\nfunc (c *Client) ExpectMemoryEvent(t *testing.T) *dap.MemoryEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckMemoryEvent(t, m)\n}\n\n// CheckMemoryEvent fails the test if m is not *MemoryEvent.\nfunc (c *Client) CheckMemoryEvent(t *testing.T, m dap.Message) *dap.MemoryEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.MemoryEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.MemoryEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectModuleEvent reads a protocol message from the connection\n// and fails the test if the read message is not *ModuleEvent.\nfunc (c *Client) ExpectModuleEvent(t *testing.T) *dap.ModuleEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckModuleEvent(t, m)\n}\n\n// CheckModuleEvent fails the test if m is not *ModuleEvent.\nfunc (c *Client) CheckModuleEvent(t *testing.T, m dap.Message) *dap.ModuleEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.ModuleEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ModuleEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectModulesResponse reads a protocol message from the connection\n// and fails the test if the read message is not *ModulesResponse.\nfunc (c *Client) ExpectModulesResponse(t *testing.T) *dap.ModulesResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckModulesResponse(t, m)\n}\n\n// CheckModulesResponse fails the test if m is not *ModulesResponse.\nfunc (c *Client) CheckModulesResponse(t *testing.T, m dap.Message) *dap.ModulesResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.ModulesResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ModulesResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectNextResponse reads a protocol message from the connection\n// and fails the test if the read message is not *NextResponse.\nfunc (c *Client) ExpectNextResponse(t *testing.T) *dap.NextResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckNextResponse(t, m)\n}\n\n// CheckNextResponse fails the test if m is not *NextResponse.\nfunc (c *Client) CheckNextResponse(t *testing.T, m dap.Message) *dap.NextResponse {\n\tt.Helper()\n\t_, ok := m.(*dap.ContinuedEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ContinuedEvent\", m)\n\t}\n\tm = c.ExpectMessage(t)\n\tr, ok := m.(*dap.NextResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.NextResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectOutputEvent reads a protocol message from the connection\n// and fails the test if the read message is not *OutputEvent.\nfunc (c *Client) ExpectOutputEvent(t *testing.T) *dap.OutputEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckOutputEvent(t, m)\n}\n\n// CheckOutputEvent fails the test if m is not *OutputEvent.\nfunc (c *Client) CheckOutputEvent(t *testing.T, m dap.Message) *dap.OutputEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.OutputEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.OutputEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectPauseResponse reads a protocol message from the connection\n// and fails the test if the read message is not *PauseResponse.\nfunc (c *Client) ExpectPauseResponse(t *testing.T) *dap.PauseResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckPauseResponse(t, m)\n}\n\n// CheckPauseResponse fails the test if m is not *PauseResponse.\nfunc (c *Client) CheckPauseResponse(t *testing.T, m dap.Message) *dap.PauseResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.PauseResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.PauseResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectProcessEvent reads a protocol message from the connection\n// and fails the test if the read message is not *ProcessEvent.\nfunc (c *Client) ExpectProcessEvent(t *testing.T) *dap.ProcessEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\tif oev, isoutput := m.(*dap.OutputEvent); isoutput && strings.HasPrefix(oev.Body.Output, \"Building\") {\n\t\t// skip this one, it's a the build message\n\t\tm = c.ExpectMessage(t)\n\t}\n\treturn c.CheckProcessEvent(t, m)\n}\n\n// CheckProcessEvent fails the test if m is not *ProcessEvent.\nfunc (c *Client) CheckProcessEvent(t *testing.T, m dap.Message) *dap.ProcessEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.ProcessEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ProcessEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectProgressEndEvent reads a protocol message from the connection\n// and fails the test if the read message is not *ProgressEndEvent.\nfunc (c *Client) ExpectProgressEndEvent(t *testing.T) *dap.ProgressEndEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckProgressEndEvent(t, m)\n}\n\n// CheckProgressEndEvent fails the test if m is not *ProgressEndEvent.\nfunc (c *Client) CheckProgressEndEvent(t *testing.T, m dap.Message) *dap.ProgressEndEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.ProgressEndEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ProgressEndEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectProgressStartEvent reads a protocol message from the connection\n// and fails the test if the read message is not *ProgressStartEvent.\nfunc (c *Client) ExpectProgressStartEvent(t *testing.T) *dap.ProgressStartEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckProgressStartEvent(t, m)\n}\n\n// CheckProgressStartEvent fails the test if m is not *ProgressStartEvent.\nfunc (c *Client) CheckProgressStartEvent(t *testing.T, m dap.Message) *dap.ProgressStartEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.ProgressStartEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ProgressStartEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectProgressUpdateEvent reads a protocol message from the connection\n// and fails the test if the read message is not *ProgressUpdateEvent.\nfunc (c *Client) ExpectProgressUpdateEvent(t *testing.T) *dap.ProgressUpdateEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckProgressUpdateEvent(t, m)\n}\n\n// CheckProgressUpdateEvent fails the test if m is not *ProgressUpdateEvent.\nfunc (c *Client) CheckProgressUpdateEvent(t *testing.T, m dap.Message) *dap.ProgressUpdateEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.ProgressUpdateEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ProgressUpdateEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectReadMemoryResponse reads a protocol message from the connection\n// and fails the test if the read message is not *ReadMemoryResponse.\nfunc (c *Client) ExpectReadMemoryResponse(t *testing.T) *dap.ReadMemoryResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckReadMemoryResponse(t, m)\n}\n\n// CheckReadMemoryResponse fails the test if m is not *ReadMemoryResponse.\nfunc (c *Client) CheckReadMemoryResponse(t *testing.T, m dap.Message) *dap.ReadMemoryResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.ReadMemoryResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ReadMemoryResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectRestartFrameResponse reads a protocol message from the connection\n// and fails the test if the read message is not *RestartFrameResponse.\nfunc (c *Client) ExpectRestartFrameResponse(t *testing.T) *dap.RestartFrameResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckRestartFrameResponse(t, m)\n}\n\n// CheckRestartFrameResponse fails the test if m is not *RestartFrameResponse.\nfunc (c *Client) CheckRestartFrameResponse(t *testing.T, m dap.Message) *dap.RestartFrameResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.RestartFrameResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.RestartFrameResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectRestartResponse reads a protocol message from the connection\n// and fails the test if the read message is not *RestartResponse.\nfunc (c *Client) ExpectRestartResponse(t *testing.T) *dap.RestartResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckRestartResponse(t, m)\n}\n\n// CheckRestartResponse fails the test if m is not *RestartResponse.\nfunc (c *Client) CheckRestartResponse(t *testing.T, m dap.Message) *dap.RestartResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.RestartResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.RestartResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectReverseContinueResponse reads a protocol message from the connection\n// and fails the test if the read message is not *ReverseContinueResponse.\nfunc (c *Client) ExpectReverseContinueResponse(t *testing.T) *dap.ReverseContinueResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckReverseContinueResponse(t, m)\n}\n\n// CheckReverseContinueResponse fails the test if m is not *ReverseContinueResponse.\nfunc (c *Client) CheckReverseContinueResponse(t *testing.T, m dap.Message) *dap.ReverseContinueResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.ReverseContinueResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ReverseContinueResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectRunInTerminalResponse reads a protocol message from the connection\n// and fails the test if the read message is not *RunInTerminalResponse.\nfunc (c *Client) ExpectRunInTerminalResponse(t *testing.T) *dap.RunInTerminalResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckRunInTerminalResponse(t, m)\n}\n\n// CheckRunInTerminalResponse fails the test if m is not *RunInTerminalResponse.\nfunc (c *Client) CheckRunInTerminalResponse(t *testing.T, m dap.Message) *dap.RunInTerminalResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.RunInTerminalResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.RunInTerminalResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectScopesResponse reads a protocol message from the connection\n// and fails the test if the read message is not *ScopesResponse.\nfunc (c *Client) ExpectScopesResponse(t *testing.T) *dap.ScopesResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckScopesResponse(t, m)\n}\n\n// CheckScopesResponse fails the test if m is not *ScopesResponse.\nfunc (c *Client) CheckScopesResponse(t *testing.T, m dap.Message) *dap.ScopesResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.ScopesResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ScopesResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectSetBreakpointsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *SetBreakpointsResponse.\nfunc (c *Client) ExpectSetBreakpointsResponse(t *testing.T) *dap.SetBreakpointsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckSetBreakpointsResponse(t, m)\n}\n\n// CheckSetBreakpointsResponse fails the test if m is not *SetBreakpointsResponse.\nfunc (c *Client) CheckSetBreakpointsResponse(t *testing.T, m dap.Message) *dap.SetBreakpointsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.SetBreakpointsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.SetBreakpointsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectSetDataBreakpointsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *SetDataBreakpointsResponse.\nfunc (c *Client) ExpectSetDataBreakpointsResponse(t *testing.T) *dap.SetDataBreakpointsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckSetDataBreakpointsResponse(t, m)\n}\n\n// CheckSetDataBreakpointsResponse fails the test if m is not *SetDataBreakpointsResponse.\nfunc (c *Client) CheckSetDataBreakpointsResponse(t *testing.T, m dap.Message) *dap.SetDataBreakpointsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.SetDataBreakpointsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.SetDataBreakpointsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectSetExceptionBreakpointsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *SetExceptionBreakpointsResponse.\nfunc (c *Client) ExpectSetExceptionBreakpointsResponse(t *testing.T) *dap.SetExceptionBreakpointsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckSetExceptionBreakpointsResponse(t, m)\n}\n\n// CheckSetExceptionBreakpointsResponse fails the test if m is not *SetExceptionBreakpointsResponse.\nfunc (c *Client) CheckSetExceptionBreakpointsResponse(t *testing.T, m dap.Message) *dap.SetExceptionBreakpointsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.SetExceptionBreakpointsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.SetExceptionBreakpointsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectSetExpressionResponse reads a protocol message from the connection\n// and fails the test if the read message is not *SetExpressionResponse.\nfunc (c *Client) ExpectSetExpressionResponse(t *testing.T) *dap.SetExpressionResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckSetExpressionResponse(t, m)\n}\n\n// CheckSetExpressionResponse fails the test if m is not *SetExpressionResponse.\nfunc (c *Client) CheckSetExpressionResponse(t *testing.T, m dap.Message) *dap.SetExpressionResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.SetExpressionResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.SetExpressionResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectSetFunctionBreakpointsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *SetFunctionBreakpointsResponse.\nfunc (c *Client) ExpectSetFunctionBreakpointsResponse(t *testing.T) *dap.SetFunctionBreakpointsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckSetFunctionBreakpointsResponse(t, m)\n}\n\n// CheckSetFunctionBreakpointsResponse fails the test if m is not *SetFunctionBreakpointsResponse.\nfunc (c *Client) CheckSetFunctionBreakpointsResponse(t *testing.T, m dap.Message) *dap.SetFunctionBreakpointsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.SetFunctionBreakpointsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.SetFunctionBreakpointsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectSetInstructionBreakpointsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *SetInstructionBreakpointsResponse.\nfunc (c *Client) ExpectSetInstructionBreakpointsResponse(t *testing.T) *dap.SetInstructionBreakpointsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckSetInstructionBreakpointsResponse(t, m)\n}\n\n// CheckSetInstructionBreakpointsResponse fails the test if m is not *SetInstructionBreakpointsResponse.\nfunc (c *Client) CheckSetInstructionBreakpointsResponse(t *testing.T, m dap.Message) *dap.SetInstructionBreakpointsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.SetInstructionBreakpointsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.SetInstructionBreakpointsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectSetVariableResponse reads a protocol message from the connection\n// and fails the test if the read message is not *SetVariableResponse.\nfunc (c *Client) ExpectSetVariableResponse(t *testing.T) *dap.SetVariableResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckSetVariableResponse(t, m)\n}\n\n// CheckSetVariableResponse fails the test if m is not *SetVariableResponse.\nfunc (c *Client) CheckSetVariableResponse(t *testing.T, m dap.Message) *dap.SetVariableResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.SetVariableResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.SetVariableResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectSourceResponse reads a protocol message from the connection\n// and fails the test if the read message is not *SourceResponse.\nfunc (c *Client) ExpectSourceResponse(t *testing.T) *dap.SourceResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckSourceResponse(t, m)\n}\n\n// CheckSourceResponse fails the test if m is not *SourceResponse.\nfunc (c *Client) CheckSourceResponse(t *testing.T, m dap.Message) *dap.SourceResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.SourceResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.SourceResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectStackTraceResponse reads a protocol message from the connection\n// and fails the test if the read message is not *StackTraceResponse.\nfunc (c *Client) ExpectStackTraceResponse(t *testing.T) *dap.StackTraceResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckStackTraceResponse(t, m)\n}\n\n// CheckStackTraceResponse fails the test if m is not *StackTraceResponse.\nfunc (c *Client) CheckStackTraceResponse(t *testing.T, m dap.Message) *dap.StackTraceResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.StackTraceResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.StackTraceResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectStepBackResponse reads a protocol message from the connection\n// and fails the test if the read message is not *StepBackResponse.\nfunc (c *Client) ExpectStepBackResponse(t *testing.T) *dap.StepBackResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckStepBackResponse(t, m)\n}\n\n// CheckStepBackResponse fails the test if m is not *StepBackResponse.\nfunc (c *Client) CheckStepBackResponse(t *testing.T, m dap.Message) *dap.StepBackResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.StepBackResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.StepBackResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectStepInResponse reads a protocol message from the connection\n// and fails the test if the read message is not *StepInResponse.\nfunc (c *Client) ExpectStepInResponse(t *testing.T) *dap.StepInResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckStepInResponse(t, m)\n}\n\n// CheckStepInResponse fails the test if m is not *StepInResponse.\nfunc (c *Client) CheckStepInResponse(t *testing.T, m dap.Message) *dap.StepInResponse {\n\tt.Helper()\n\t_, ok := m.(*dap.ContinuedEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ContinuedEvent\", m)\n\t}\n\tm = c.ExpectMessage(t)\n\tr, ok := m.(*dap.StepInResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.StepInResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectStepInTargetsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *StepInTargetsResponse.\nfunc (c *Client) ExpectStepInTargetsResponse(t *testing.T) *dap.StepInTargetsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckStepInTargetsResponse(t, m)\n}\n\n// CheckStepInTargetsResponse fails the test if m is not *StepInTargetsResponse.\nfunc (c *Client) CheckStepInTargetsResponse(t *testing.T, m dap.Message) *dap.StepInTargetsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.StepInTargetsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.StepInTargetsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectStepOutResponse reads a protocol message from the connection\n// and fails the test if the read message is not *StepOutResponse.\nfunc (c *Client) ExpectStepOutResponse(t *testing.T) *dap.StepOutResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckStepOutResponse(t, m)\n}\n\n// CheckStepOutResponse fails the test if m is not *StepOutResponse.\nfunc (c *Client) CheckStepOutResponse(t *testing.T, m dap.Message) *dap.StepOutResponse {\n\tt.Helper()\n\t_, ok := m.(*dap.ContinuedEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ContinuedEvent\", m)\n\t}\n\tm = c.ExpectMessage(t)\n\tr, ok := m.(*dap.StepOutResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.StepOutResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectStoppedEvent reads a protocol message from the connection\n// and fails the test if the read message is not *StoppedEvent.\nfunc (c *Client) ExpectStoppedEvent(t *testing.T) *dap.StoppedEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckStoppedEvent(t, m)\n}\n\n// CheckStoppedEvent fails the test if m is not *StoppedEvent.\nfunc (c *Client) CheckStoppedEvent(t *testing.T, m dap.Message) *dap.StoppedEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.StoppedEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.StoppedEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectTerminateResponse reads a protocol message from the connection\n// and fails the test if the read message is not *TerminateResponse.\nfunc (c *Client) ExpectTerminateResponse(t *testing.T) *dap.TerminateResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckTerminateResponse(t, m)\n}\n\n// CheckTerminateResponse fails the test if m is not *TerminateResponse.\nfunc (c *Client) CheckTerminateResponse(t *testing.T, m dap.Message) *dap.TerminateResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.TerminateResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.TerminateResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectTerminateThreadsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *TerminateThreadsResponse.\nfunc (c *Client) ExpectTerminateThreadsResponse(t *testing.T) *dap.TerminateThreadsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckTerminateThreadsResponse(t, m)\n}\n\n// CheckTerminateThreadsResponse fails the test if m is not *TerminateThreadsResponse.\nfunc (c *Client) CheckTerminateThreadsResponse(t *testing.T, m dap.Message) *dap.TerminateThreadsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.TerminateThreadsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.TerminateThreadsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectTerminatedEvent reads a protocol message from the connection\n// and fails the test if the read message is not *TerminatedEvent.\nfunc (c *Client) ExpectTerminatedEvent(t *testing.T) *dap.TerminatedEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckTerminatedEvent(t, m)\n}\n\n// CheckTerminatedEvent fails the test if m is not *TerminatedEvent.\nfunc (c *Client) CheckTerminatedEvent(t *testing.T, m dap.Message) *dap.TerminatedEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.TerminatedEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.TerminatedEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectThreadEvent reads a protocol message from the connection\n// and fails the test if the read message is not *ThreadEvent.\nfunc (c *Client) ExpectThreadEvent(t *testing.T) *dap.ThreadEvent {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckThreadEvent(t, m)\n}\n\n// CheckThreadEvent fails the test if m is not *ThreadEvent.\nfunc (c *Client) CheckThreadEvent(t *testing.T, m dap.Message) *dap.ThreadEvent {\n\tt.Helper()\n\tr, ok := m.(*dap.ThreadEvent)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ThreadEvent\", m)\n\t}\n\treturn r\n}\n\n// ExpectThreadsResponse reads a protocol message from the connection\n// and fails the test if the read message is not *ThreadsResponse.\nfunc (c *Client) ExpectThreadsResponse(t *testing.T) *dap.ThreadsResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckThreadsResponse(t, m)\n}\n\n// CheckThreadsResponse fails the test if m is not *ThreadsResponse.\nfunc (c *Client) CheckThreadsResponse(t *testing.T, m dap.Message) *dap.ThreadsResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.ThreadsResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.ThreadsResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectVariablesResponse reads a protocol message from the connection\n// and fails the test if the read message is not *VariablesResponse.\nfunc (c *Client) ExpectVariablesResponse(t *testing.T) *dap.VariablesResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckVariablesResponse(t, m)\n}\n\n// CheckVariablesResponse fails the test if m is not *VariablesResponse.\nfunc (c *Client) CheckVariablesResponse(t *testing.T, m dap.Message) *dap.VariablesResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.VariablesResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.VariablesResponse\", m)\n\t}\n\treturn r\n}\n\n// ExpectWriteMemoryResponse reads a protocol message from the connection\n// and fails the test if the read message is not *WriteMemoryResponse.\nfunc (c *Client) ExpectWriteMemoryResponse(t *testing.T) *dap.WriteMemoryResponse {\n\tt.Helper()\n\tm := c.ExpectMessage(t)\n\treturn c.CheckWriteMemoryResponse(t, m)\n}\n\n// CheckWriteMemoryResponse fails the test if m is not *WriteMemoryResponse.\nfunc (c *Client) CheckWriteMemoryResponse(t *testing.T, m dap.Message) *dap.WriteMemoryResponse {\n\tt.Helper()\n\tr, ok := m.(*dap.WriteMemoryResponse)\n\tif !ok {\n\t\tt.Fatalf(\"got %#v, want *dap.WriteMemoryResponse\", m)\n\t}\n\treturn r\n}\n"
  },
  {
    "path": "service/dap/error_ids.go",
    "content": "package dap\n\n// Unique identifiers for messages returned for errors from requests.\n// These values are not mandated by DAP (other than the uniqueness\n// requirement), so each implementation is free to choose their own.\nconst (\n\tUnsupportedCommand int = 9999\n\tInternalError      int = 8888\n\tNotYetImplemented  int = 7777\n\n\t// Where applicable and for consistency only,\n\t// values below are inspired the original vscode-go debug adaptor.\n\n\tFailedToLaunch             = 3000\n\tFailedToAttach             = 3001\n\tFailedToInitialize         = 3002\n\tUnableToSetBreakpoints     = 2002\n\tUnableToDisplayThreads     = 2003\n\tUnableToProduceStackTrace  = 2004\n\tUnableToListLocals         = 2005\n\tUnableToListArgs           = 2006\n\tUnableToListGlobals        = 2007\n\tUnableToLookupVariable     = 2008\n\tUnableToEvaluateExpression = 2009\n\tUnableToHalt               = 2010\n\tUnableToGetExceptionInfo   = 2011\n\tUnableToSetVariable        = 2012\n\tUnableToDisassemble        = 2013\n\tUnableToListRegisters      = 2014\n\tUnableToRunDlvCommand      = 2015\n\tUnableToReadMemory         = 2016\n\n\t// Add more codes as we support more requests\n\n\tNoDebugIsRunning  = 3000\n\tDebuggeeIsRunning = 4000\n\tDisconnectError   = 5000\n)\n"
  },
  {
    "path": "service/dap/handles.go",
    "content": "package dap\n\nimport \"github.com/go-delve/delve/pkg/proc\"\n\nconst startHandle = 1000\n\n// handlesMap maps arbitrary values to unique sequential ids.\n// This provides convenient abstraction of references, offering\n// opacity and allowing simplification of complex identifiers.\n// Based on\n// https://github.com/microsoft/vscode-debugadapter-node/blob/master/adapter/src/handles.ts\ntype handlesMap[T any] struct {\n\tnextHandle  int\n\thandleToVal map[int]T\n}\n\ntype fullyQualifiedVariable struct {\n\t*proc.Variable\n\t// A way to load this variable by either using all names in the hierarchic\n\t// sequence above this variable (most readable when referenced by the UI)\n\t// if available or a special expression based on:\n\t// https://github.com/go-delve/delve/blob/master/Documentation/api/ClientHowto.md#loading-more-of-a-variable\n\t// Empty if the variable cannot or should not be reloaded.\n\tfullyQualifiedNameOrExpr string\n\t// True if this represents variable scope\n\tisScope bool\n\t// startIndex is the index of the first child for an array or slice.\n\t// This variable represents a chunk of the array, slice or map.\n\tstartIndex int\n}\n\nfunc newHandlesMap[T any]() *handlesMap[T] {\n\treturn &handlesMap[T]{startHandle, make(map[int]T)}\n}\n\nfunc (hs *handlesMap[T]) reset() {\n\ths.nextHandle = startHandle\n\ths.handleToVal = make(map[int]T)\n}\n\nfunc (hs *handlesMap[T]) create(value T) int {\n\tnext := hs.nextHandle\n\ths.nextHandle++\n\ths.handleToVal[next] = value\n\treturn next\n}\n\nfunc (hs *handlesMap[T]) get(handle int) (T, bool) {\n\tv, ok := hs.handleToVal[handle]\n\treturn v, ok\n}\n"
  },
  {
    "path": "service/dap/server.go",
    "content": "// Package dap implements VSCode's Debug Adaptor Protocol (DAP).\n// This allows delve to communicate with frontends using DAP\n// without a separate adaptor. The frontend will run the debugger\n// (which now doubles as an adaptor) in server mode listening on\n// a port and communicating over TCP. This is work in progress,\n// so for now Delve in dap mode only supports synchronous\n// request-response communication, blocking while processing each request.\n// For DAP details see https://microsoft.github.io/debug-adapter-protocol.\npackage dap\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/base64\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"go/constant\"\n\t\"go/parser\"\n\t\"io\"\n\t\"math\"\n\t\"net\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"runtime/debug\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/gobuild\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/locspec\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n\t\"github.com/go-delve/delve/service/debugger\"\n\t\"github.com/go-delve/delve/service/internal/sameuser\"\n\t\"github.com/google/go-dap\"\n)\n\n// Server implements a DAP server that can accept a single client for\n// a single debug session (for now). It does not yet support restarting.\n// That means that in addition to explicit shutdown requests,\n// program termination and failed or closed client connection\n// would also result in stopping this single-use server.\n//\n// The DAP server operates via the following goroutines:\n//\n// (1) Main goroutine where the server is created via NewServer(),\n// started via Run() and stopped via Stop(). Once the server is\n// started, this goroutine blocks until it receives a stop-server\n// signal that can come from an OS interrupt (such as Ctrl-C) or\n// config.DisconnectChan (passed to NewServer()) as a result of\n// client connection failure or closure or a DAP disconnect request.\n//\n// (2) Run goroutine started from Run() that serves as both\n// a listener and a client goroutine. It accepts a client connection,\n// reads, decodes and dispatches each request from the client.\n// For synchronous requests, it issues commands to the\n// underlying debugger and sends back events and responses.\n// These requests block while the debuggee is running, so,\n// where applicable, the handlers need to check if debugging\n// state is running, so there is a need for a halt request or\n// a dummy/error response to avoid blocking.\n//\n// This is the only goroutine that sends a stop-server signal\n// via config.DisconnectChan when encountering a client connection\n// error or responding to a (synchronous) DAP disconnect request.\n// Once stop is triggered, the goroutine exits.\n//\n// Unlike rpccommon, there is not another layer of per-client\n// goroutines here because the dap server does not support\n// multiple clients.\n//\n// (3) Per-request goroutine is started for each asynchronous request\n// that resumes execution. We check if target is running already, so\n// there should be no more than one pending asynchronous request at\n// a time. This goroutine issues commands to the underlying debugger\n// and sends back events and responses. It takes a setup-done channel\n// as an argument and temporarily blocks the request loop until setup\n// for asynchronous execution is complete and target is running.\n// Once done, it unblocks processing of parallel requests unblocks\n// (e.g. disconnecting while the program is running).\n//\n// These per-request goroutines never send a stop-server signal.\n// They block on running debugger commands that are interrupted\n// when halt is issued while stopping. At that point these goroutines\n// wrap-up and exit.\ntype Server struct {\n\t// config is all the information necessary to start the debugger and server.\n\tconfig *Config\n\t// listener is used to accept the client connection.\n\t// When working with a predetermined client, this is nil.\n\tlistener net.Listener\n\t// session is the debug session that comes with a client connection.\n\tsession   *Session\n\tsessionMu sync.Mutex\n}\n\n// memRef describe address and its size to stream data from\ntype memRef struct {\n\taddr uint64\n\tsize int64\n}\n\ntype referencesCollection struct {\n\tmu   sync.Mutex\n\trefs map[string]memRef\n}\n\nfunc (r *referencesCollection) get(reference string) (memRef, bool) {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\n\tref, ok := r.refs[reference]\n\n\treturn ref, ok\n}\n\nfunc isAddressable(v *proc.Variable) bool {\n\tif v == nil || v.Unreadable != nil {\n\t\treturn false\n\t}\n\n\tswitch v.Kind {\n\tcase reflect.Slice, reflect.String:\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nfunc (r *referencesCollection) put(v *proc.Variable) string {\n\tif !isAddressable(v) {\n\t\treturn \"\"\n\t}\n\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\n\tif r.refs == nil {\n\t\tr.refs = make(map[string]memRef)\n\t}\n\n\taddr := v.Addr\n\tif v.Base != 0 {\n\t\taddr = v.Base\n\t}\n\n\tref := fmt.Sprintf(\"0x%x\", addr)\n\tr.refs[ref] = memRef{addr: addr, size: v.Len}\n\n\treturn ref\n}\n\nfunc (r *referencesCollection) reset() {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\n\tif len(r.refs) > 0 {\n\t\tr.refs = make(map[string]memRef)\n\t}\n}\n\n// Session is an abstraction for serving and shutting down\n// a DAP debug session with a pre-connected client.\n// TODO(polina): move this to a different file/package\ntype Session struct {\n\tconfig *Config\n\n\tid int\n\n\t// stackFrameHandles maps frames of each goroutine to unique ids across all goroutines.\n\t// Reset at every stop.\n\tstackFrameHandles *handlesMap[stackFrame]\n\t// variableHandles maps compound variables to unique references within their stack frame.\n\t// Reset at every stop.\n\t// See also comment for convertVariable.\n\tvariableHandles *handlesMap[*fullyQualifiedVariable]\n\t// referencesCollection track references map for DAP client\n\treferencesCollection referencesCollection\n\t// args tracks special settings for handling debug session requests.\n\targs launchAttachArgs\n\t// exceptionErr tracks the runtime error that last occurred.\n\texceptionErr error\n\t// clientCapabilities tracks special settings for handling debug session requests.\n\tclientCapabilities dapClientCapabilities\n\n\t// mu synchronizes access to objects set on start-up (from run goroutine)\n\t// and stopped on teardown (from main goroutine)\n\tmu sync.Mutex\n\n\t// conn is the accepted client connection.\n\tconn *connection\n\t// debugger is the underlying debugger service.\n\tdebugger *debugger.Debugger\n\t// binaryToRemove is the temp compiled binary to be removed on disconnect (if any).\n\tbinaryToRemove string\n\t// noDebugProcess is set for the noDebug launch process.\n\tnoDebugProcess *process\n\n\t// sendingMu synchronizes writing to conn\n\t// to ensure that messages do not get interleaved\n\tsendingMu sync.Mutex\n\n\tdisconnected bool // disconnect was called\n\n\t// runningCmd tracks whether the server is running an asynchronous\n\t// command that resumes execution, which may not correspond to the actual\n\t// running state of the process (e.g. if a command is temporarily interrupted).\n\trunningCmd bool\n\trunningMu  sync.Mutex\n\n\t// haltRequested tracks whether a halt of the program has been requested, which may\n\t// not correspond to whether a Halt Request has been sent to the target.\n\thaltRequested bool\n\thaltMu        sync.Mutex\n\n\t// changeStateMu must be held for a request to protect itself from another goroutine\n\t// changing the state of the running process at the same time.\n\tchangeStateMu sync.Mutex\n\n\t// preTerminatedWG the WaitGroup that needs to wait before sending a terminated event.\n\tpreTerminatedWG sync.WaitGroup\n\n\tseq atomic.Uint64\n}\n\n// Config is all the information needed to start the debugger, handle\n// DAP connection traffic and signal to the server when it is time to stop.\ntype Config struct {\n\t*service.Config\n\n\t// log is used for structured logging.\n\tlog logflags.Logger\n\t// StopTriggered is closed when the server is Stop()-ed.\n\t// Can be used to safeguard against duplicate shutdown sequences.\n\tStopTriggered chan struct{}\n}\n\ntype connection struct {\n\tmu         sync.Mutex\n\tclosed     bool\n\tclosedChan chan struct{}\n\tio.ReadWriteCloser\n}\n\nfunc newConnection(conn io.ReadWriteCloser) *connection {\n\treturn &connection{ReadWriteCloser: conn, closedChan: make(chan struct{})}\n}\n\nfunc (c *connection) Close() error {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\n\tif !c.closed {\n\t\tclose(c.closedChan)\n\t}\n\tc.closed = true\n\treturn c.ReadWriteCloser.Close()\n}\n\nfunc (c *connection) isClosed() bool {\n\tc.mu.Lock()\n\tdefer c.mu.Unlock()\n\treturn c.closed\n}\n\ntype process struct {\n\t*exec.Cmd\n\texited chan struct{}\n}\n\n// launchAttachArgs captures arguments from launch/attach request that\n// impact handling of subsequent requests.\n// The fields with cfgName tag can be updated through an evaluation request.\ntype launchAttachArgs struct {\n\t// stopOnEntry is set to automatically stop the debuggee after start.\n\tstopOnEntry bool\n\t// StackTraceDepth is the maximum length of the returned list of stack frames.\n\tStackTraceDepth int `cfgName:\"stackTraceDepth\"`\n\t// ShowGlobalVariables indicates if global package variables should be loaded.\n\tShowGlobalVariables bool `cfgName:\"showGlobalVariables\"`\n\t// ShowRegisters indicates if register values should be loaded.\n\tShowRegisters bool `cfgName:\"showRegisters\"`\n\t// GoroutineFilters are the filters used when loading goroutines.\n\tGoroutineFilters string `cfgName:\"goroutineFilters\"`\n\t// ShowPprofLabels is an array of keys of pprof labels to show as a\n\t// goroutine name in the threads view. If the array has one element, only\n\t// that label's value will be shown; otherwise, each of the labels will be\n\t// shown as \"key:value\". To show all labels, specify the single element \"*\".\n\tShowPprofLabels []string `cfgName:\"showPprofLabels\"`\n\t// HideSystemGoroutines indicates if system goroutines should be removed from threads\n\t// responses.\n\tHideSystemGoroutines bool `cfgName:\"hideSystemGoroutines\"`\n\t// substitutePathClientToServer indicates rules for converting file paths between client and debugger.\n\tsubstitutePathClientToServer [][2]string `cfgName:\"substitutePath\"`\n\t// substitutePathServerToClient indicates rules for converting file paths between debugger and client.\n\tsubstitutePathServerToClient [][2]string\n\t// followExec enables or disables follow exec mode.\n\tfollowExec bool `cfgName:\"followExec\"`\n\t// followExecRegex is a regular expression. Only child processes with a command line matching the regular expression will be followed.\n\tfollowExecRegex string `cfgName:\"followExecRegex\"`\n}\n\n// defaultArgs borrows the defaults for the arguments from the original vscode-go adapter.\n// TODO(polinasok): clean up this and its reference (Server.args)\n// in favor of default*Config variables defined in types.go.\nvar defaultArgs = launchAttachArgs{\n\tstopOnEntry:                  false,\n\tStackTraceDepth:              50,\n\tShowGlobalVariables:          false,\n\tHideSystemGoroutines:         false,\n\tShowRegisters:                false,\n\tGoroutineFilters:             \"\",\n\tShowPprofLabels:              []string{},\n\tsubstitutePathClientToServer: [][2]string{},\n\tsubstitutePathServerToClient: [][2]string{},\n\tfollowExec:                   false,\n\tfollowExecRegex:              \"\",\n}\n\n// dapClientCapabilities captures arguments from initialize request that\n// impact handling of subsequent requests.\ntype dapClientCapabilities struct {\n\tsupportsVariableType         bool\n\tsupportsVariablePaging       bool\n\tsupportsRunInTerminalRequest bool\n\tsupportsMemoryReferences     bool\n\tsupportsProgressReporting    bool\n}\n\n// DefaultLoadConfig controls how variables are loaded from the target's memory.\n// These limits are conservative to minimize performance overhead for bulk loading.\n// With dlv-dap, users do not have a way to adjust these.\n// Instead, we are focusing in interactive loading with nested reloads, array/map\n// paging and context-specific string limits.\nvar DefaultLoadConfig = proc.LoadConfig{\n\tFollowPointers:     true,\n\tMaxVariableRecurse: 1,\n\t// TODO(polina): consider 1024 limit instead:\n\t// - vscode+C appears to use 1024 as the load limit\n\t// - vscode viewlet hover truncates at 1023 characters\n\tMaxStringLen:    512,\n\tMaxArrayValues:  64,\n\tMaxStructFields: -1,\n}\n\nconst (\n\t// When a user examines a single string, we can relax the loading limit.\n\tmaxSingleStringLen = 4 << 10 // 4096\n\t// Results of a call are single-use and transient. We need to maximize\n\t// what is presented. A common use case of a call injection is to\n\t// stringify complex data conveniently.\n\tmaxStringLenInCallRetVars = 1 << 10 // 1024\n)\n\n// Max number of goroutines that we will return.\n// This is a var for testing\nvar maxGoroutines = 1 << 10\n\n// NewServer creates a new DAP Server. It takes an opened Listener\n// via config and assumes its ownership. config.DisconnectChan has to be set;\n// it will be closed by the server when the client fails to connect,\n// disconnects or requests shutdown. Once config.DisconnectChan is closed,\n// Server.Stop() must be called to shutdown this single-user server.\n//\n// NewServer can be used to create a special DAP Server that works\n// only with a predetermined client. In that case, config.Listener is\n// nil and its RunWithClient must be used instead of Run.\nfunc NewServer(config *service.Config) *Server {\n\tlogger := logflags.DAPLogger()\n\tif config.Listener != nil {\n\t\tlogflags.WriteDAPListeningMessage(config.Listener.Addr())\n\t} else {\n\t\tlogger.Debug(\"DAP server for a predetermined client\")\n\t}\n\tlogger.Debug(\"DAP server pid = \", os.Getpid())\n\tif config.AcceptMulti {\n\t\tlogger.Warn(\"DAP server does not support accept-multiclient mode\")\n\t\tconfig.AcceptMulti = false\n\t}\n\treturn &Server{\n\t\tconfig: &Config{\n\t\t\tConfig:        config,\n\t\t\tlog:           logger,\n\t\t\tStopTriggered: make(chan struct{}),\n\t\t},\n\t\tlistener: config.Listener,\n\t}\n}\n\nvar sessionCount = 0\n\n// NewSession creates a new client session that can handle DAP traffic.\n// It takes an open connection and provides a Close() method to shut it\n// down when the DAP session disconnects or a connection error occurs.\nfunc NewSession(conn io.ReadWriteCloser, config *Config, debugger *debugger.Debugger) *Session {\n\tsessionCount++\n\tif config.log == nil {\n\t\tconfig.log = logflags.DAPLogger()\n\t}\n\tconfig.log.Debugf(\"DAP connection %d started\", sessionCount)\n\tif config.StopTriggered == nil {\n\t\tconfig.log.Error(\"Session must be configured with StopTriggered\")\n\t\tos.Exit(1)\n\t}\n\treturn &Session{\n\t\tconfig:            config,\n\t\tid:                sessionCount,\n\t\tconn:              newConnection(conn),\n\t\tstackFrameHandles: newHandlesMap[stackFrame](),\n\t\tvariableHandles:   newHandlesMap[*fullyQualifiedVariable](),\n\t\targs:              defaultArgs,\n\t\texceptionErr:      nil,\n\t\tdebugger:          debugger,\n\t}\n}\n\n// If user-specified options are provided via Launch/AttachRequest,\n// we override the defaults for optional args.\nfunc (s *Session) setLaunchAttachArgs(args LaunchAttachCommonConfig) {\n\ts.args.followExec = args.FollowExec\n\ts.args.followExecRegex = args.FollowExecRegex\n\n\ts.args.stopOnEntry = args.StopOnEntry\n\tif depth := args.StackTraceDepth; depth > 0 {\n\t\ts.args.StackTraceDepth = depth\n\t}\n\ts.args.ShowGlobalVariables = args.ShowGlobalVariables\n\ts.args.ShowRegisters = args.ShowRegisters\n\ts.args.HideSystemGoroutines = args.HideSystemGoroutines\n\ts.args.GoroutineFilters = args.GoroutineFilters\n\ts.args.ShowPprofLabels = args.ShowPprofLabels\n\tif paths := args.SubstitutePath; len(paths) > 0 {\n\t\tclientToServer := make([][2]string, 0, len(paths))\n\t\tserverToClient := make([][2]string, 0, len(paths))\n\t\tfor _, p := range paths {\n\t\t\tclientToServer = append(clientToServer, [2]string{p.From, p.To})\n\t\t\tserverToClient = append(serverToClient, [2]string{p.To, p.From})\n\t\t}\n\t\ts.args.substitutePathClientToServer = clientToServer\n\t\ts.args.substitutePathServerToClient = serverToClient\n\t}\n}\n\n// Stop stops the DAP debugger service, closes the listener and the client\n// connection. It shuts down the underlying debugger and kills the target\n// process if it was launched by it or stops the noDebug process.\n// This method mustn't be called more than once.\n// StopTriggered notifies other goroutines that stop is in progress.\nfunc (s *Server) Stop() {\n\ts.config.log.Debug(\"DAP server stopping...\")\n\tdefer s.config.log.Debug(\"DAP server stopped\")\n\tclose(s.config.StopTriggered)\n\n\tif s.listener != nil {\n\t\t// If run goroutine is blocked on accept, this will unblock it.\n\t\ts.listener.Close()\n\t}\n\n\ts.sessionMu.Lock()\n\tdefer s.sessionMu.Unlock()\n\tif s.session == nil {\n\t\treturn\n\t}\n\t// If run goroutine is blocked on read, this will unblock it.\n\ts.session.Close()\n}\n\n// Close closes the underlying debugger/process and connection.\n// May be called more than once.\nfunc (s *Session) Close() {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tif s.debugger != nil {\n\t\tkillProcess := s.debugger.AttachPid() == 0\n\t\ts.stopDebugSession(killProcess)\n\t} else if s.noDebugProcess != nil {\n\t\ts.stopNoDebugProcess()\n\t} else {\n\t\ts.disconnected = true\n\t}\n\t// The binary is no longer in use by the debugger. It is safe to remove it.\n\tif s.binaryToRemove != \"\" {\n\t\tgobuild.Remove(s.binaryToRemove)\n\t\ts.binaryToRemove = \"\" // avoid error printed on duplicate removal\n\t}\n\t// Close client connection last, so other shutdown stages\n\t// can send client notifications.\n\t// Unless Stop() was called after read loop in ServeDAPCodec()\n\t// returned, this will result in a closed connection error\n\t// on next read, breaking out the read loop and\n\t// allowing the run goroutines to exit.\n\t// This connection is closed here and in serveDAPCodec().\n\t// If this was a forced shutdown, external stop logic can close this first.\n\t// If this was a client loop exit (on error or disconnect), serveDAPCodec()\n\t// will be first.\n\t// Duplicate close calls return an error, but are not fatal.\n\ts.conn.Close()\n}\n\n// triggerServerStop closes DisconnectChan if not nil, which\n// signals that client sent a disconnect request or there was connection\n// failure or closure. Since the server currently services only one\n// client, this is used as a signal to stop the entire server.\n// The function safeguards against closing the channel more\n// than once and can be called multiple times. It is not thread-safe\n// and is currently only called from the run goroutine.\nfunc (c *Config) triggerServerStop() {\n\t// Avoid accidentally closing the channel twice and causing a panic, when\n\t// this function is called more than once because stop was triggered\n\t// by multiple conditions simultaneously.\n\tif c.DisconnectChan != nil {\n\t\tclose(c.DisconnectChan)\n\t\tc.DisconnectChan = nil\n\t}\n\t// There should be no logic here after the stop-server\n\t// signal that might cause everything to shut down before this\n\t// logic gets executed.\n}\n\n// Run launches a new goroutine where it accepts a client connection\n// and starts processing requests from it. Use Stop() to close connection.\n// The server does not support multiple clients, serially or in parallel.\n// The server should be restarted for every new debug session.\n// The debugger won't be started until launch/attach request is received.\n// TODO(polina): allow new client connections for new debug sessions,\n// so the editor needs to launch dap server only once? Note that some requests\n// may change the server's environment (e.g. see dlvCwd of launch configuration).\n// So if we want to reuse this server for multiple independent debugging sessions\n// we need to take that into consideration.\nfunc (s *Server) Run() {\n\tif s.listener == nil {\n\t\ts.config.log.Error(\"Misconfigured server: no Listener is configured.\")\n\t\tos.Exit(1)\n\t}\n\n\tgo func() {\n\t\tconn, err := s.listener.Accept() // listener is closed in Stop()\n\t\tif err != nil {\n\t\t\tselect {\n\t\t\tcase <-s.config.StopTriggered:\n\t\t\tdefault:\n\t\t\t\ts.config.log.Errorf(\"Error accepting client connection: %s\\n\", err)\n\t\t\t\ts.config.triggerServerStop()\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tif s.config.CheckLocalConnUser {\n\t\t\tif !sameuser.CanAccept(s.listener.Addr(), conn.LocalAddr(), conn.RemoteAddr()) {\n\t\t\t\ts.config.log.Error(\"Error accepting client connection: Only connections from the same user that started this instance of Delve are allowed to connect. See --only-same-user.\")\n\t\t\t\ts.config.triggerServerStop()\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t\ts.runSession(conn)\n\t}()\n}\n\nfunc (s *Server) runSession(conn io.ReadWriteCloser) {\n\ts.sessionMu.Lock()\n\ts.session = NewSession(conn, s.config, nil) // closed in Stop()\n\ts.sessionMu.Unlock()\n\ts.session.ServeDAPCodec()\n}\n\n// RunWithClient is similar to Run but works only with an already established\n// connection instead of waiting on the listener to accept a new client.\n// RunWithClient takes ownership of conn. Debugger won't be started\n// until a launch/attach request is received over the connection.\nfunc (s *Server) RunWithClient(conn net.Conn) {\n\tif s.listener != nil {\n\t\ts.config.log.Error(\"RunWithClient must not be used when the Server is configured with a Listener\")\n\t\tos.Exit(1)\n\t}\n\ts.config.log.Debugf(\"Connected to the client at %s\", conn.RemoteAddr())\n\tgo s.runSession(conn)\n}\n\nfunc (s *Session) address() string {\n\tif s.config.Listener != nil {\n\t\treturn s.config.Listener.Addr().String()\n\t}\n\tif netconn, ok := s.conn.ReadWriteCloser.(net.Conn); ok {\n\t\treturn netconn.LocalAddr().String()\n\t}\n\treturn \"\"\n}\n\n// ServeDAPCodec reads and decodes requests from the client\n// until it encounters an error or EOF, when it sends\n// a disconnect signal and returns.\nfunc (s *Session) ServeDAPCodec() {\n\t// Close conn, but not the debugger in case we are in AcceptMulti mode.\n\t// If not, debugger will be shut down in Stop().\n\tvar triggerServerStop bool\n\tdefer s.conn.Close()\n\tdefer func() {\n\t\tif triggerServerStop {\n\t\t\ts.config.triggerServerStop()\n\t\t}\n\t}()\n\treader := bufio.NewReader(s.conn)\n\tfor {\n\t\trequest, err := dap.ReadProtocolMessage(reader)\n\t\t// Handle dap.DecodeProtocolMessageFieldError errors gracefully by responding with an ErrorResponse.\n\t\t// For example:\n\t\t// -- \"Request command 'foo' is not supported\" means we\n\t\t// potentially got some new DAP request that we do not yet have\n\t\t// decoding support for, so we can respond with an ErrorResponse.\n\t\t//\n\t\t// Other errors, such as unmarshalling errors, will log the error and cause the server to trigger\n\t\t// a stop.\n\t\tif err != nil {\n\t\t\ts.config.log.Debug(\"DAP error: \", err)\n\t\t\tselect {\n\t\t\tcase <-s.config.StopTriggered:\n\t\t\tdefault:\n\t\t\t\ttriggerServerStop = !s.config.AcceptMulti\n\t\t\t\tif err != io.EOF { // EOF means client closed connection\n\t\t\t\t\tvar decodeErr *dap.DecodeProtocolMessageFieldError\n\t\t\t\t\tif errors.As(err, &decodeErr) {\n\t\t\t\t\t\t// Send an error response to the users if we were unable to process the message.\n\t\t\t\t\t\ts.sendInternalErrorResponse(decodeErr.Seq, err.Error())\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\ts.config.log.Error(\"DAP error: \", err)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\ts.handleRequest(request)\n\n\t\tif _, ok := request.(*dap.DisconnectRequest); ok {\n\t\t\t// disconnect already shut things down and triggered stopping\n\t\t\treturn\n\t\t}\n\t}\n}\n\n// In case a handler panics, we catch the panic to avoid crashing both\n// the server and the target. We send an error response back, but\n// in case it's a dup and ignored by the client, we also log the error.\nfunc (s *Session) recoverPanic(request dap.Message) {\n\tif ierr := recover(); ierr != nil {\n\t\tlogflags.Bug.Inc()\n\t\ts.config.log.Errorf(\"recovered panic: %s\\n%s\\n\", ierr, debug.Stack())\n\t\ts.sendInternalErrorResponse(request.GetSeq(), fmt.Sprintf(\"%v\", ierr))\n\t}\n}\n\nfunc (s *Session) handleRequest(request dap.Message) {\n\tdefer s.recoverPanic(request)\n\tjsonmsg, _ := json.Marshal(request)\n\ts.config.log.Debug(\"[<- from client]\", string(jsonmsg))\n\n\tif _, ok := request.(dap.RequestMessage); !ok {\n\t\ts.sendInternalErrorResponse(request.GetSeq(), fmt.Sprintf(\"Unable to process non-request %#v\\n\", request))\n\t\treturn\n\t}\n\n\tif s.isNoDebug() {\n\t\tswitch request := request.(type) {\n\t\tcase *dap.DisconnectRequest:\n\t\t\ts.onDisconnectRequest(request)\n\t\tcase *dap.RestartRequest:\n\t\t\ts.sendUnsupportedErrorResponse(request.Request)\n\t\tdefault:\n\t\t\tr := request.(dap.RequestMessage).GetRequest()\n\t\t\ts.sendErrorResponse(*r, NoDebugIsRunning, \"noDebug mode\", fmt.Sprintf(\"unable to process '%s' request\", r.Command))\n\t\t}\n\t\treturn\n\t}\n\n\t// These requests, can be handled regardless of whether the target is running\n\tswitch request := request.(type) {\n\tcase *dap.InitializeRequest: // Required\n\t\ts.onInitializeRequest(request)\n\t\treturn\n\tcase *dap.LaunchRequest: // Required\n\t\ts.onLaunchRequest(request)\n\t\treturn\n\tcase *dap.AttachRequest: // Required\n\t\ts.onAttachRequest(request)\n\t\treturn\n\tcase *dap.DisconnectRequest: // Required\n\t\ts.onDisconnectRequest(request)\n\t\treturn\n\tcase *dap.PauseRequest: // Required\n\t\ts.onPauseRequest(request)\n\t\treturn\n\tcase *dap.TerminateRequest: // Optional (capability 'supportsTerminateRequest')\n\t\t/*TODO*/ s.onTerminateRequest(request) // not yet implemented\n\t\treturn\n\tcase *dap.RestartRequest: // Optional (capability 'supportsRestartRequest')\n\t\ts.onRestartRequest(request)\n\t\treturn\n\t}\n\n\t// Most requests cannot be processed while the debuggee is running.\n\t// We have a couple of options for handling these without blocking\n\t// the request loop indefinitely when we are in running state.\n\t// --1-- Return a dummy response or an error right away.\n\t// --2-- Halt execution, process the request, maybe resume execution.\n\t// --3-- Handle such requests asynchronously and let them block until\n\t// the process stops or terminates (e.g. using a channel and a single\n\t// goroutine to preserve the order). This might not be appropriate\n\t// for requests such as continue or step because they would skip\n\t// the stop, resuming execution right away. Other requests\n\t// might not be relevant anymore when the stop is finally reached, and\n\t// state changed from the previous snapshot. The user might want to\n\t// resume execution before the backlog of buffered requests is cleared,\n\t// so we would have to either cancel them or delay processing until\n\t// the next stop. In addition, the editor itself might block waiting\n\t// for these requests to return. We are not aware of any requests\n\t// that would benefit from this approach at this time.\n\tif s.debugger != nil && s.debugger.IsRunning() || s.isRunningCmd() {\n\t\tswitch request := request.(type) {\n\t\tcase *dap.ThreadsRequest: // Required\n\t\t\t// On start-up, the client requests the baseline of currently existing threads\n\t\t\t// right away as there are a number of DAP requests that require a thread id\n\t\t\t// (pause, continue, stacktrace, etc.). This can happen after the program\n\t\t\t// continues on entry, preventing the client from handling any pause requests\n\t\t\t// from the user. We remedy this by sending back a placeholder thread id\n\t\t\t// for the current goroutine.\n\t\t\tresponse := &dap.ThreadsResponse{\n\t\t\t\tResponse: *s.newResponse(request.Request),\n\t\t\t\tBody:     dap.ThreadsResponseBody{Threads: []dap.Thread{{Id: -1, Name: \"Current\"}}},\n\t\t\t}\n\t\t\ts.send(response)\n\t\tcase *dap.SetBreakpointsRequest: // Required\n\t\t\ts.changeStateMu.Lock()\n\t\t\tdefer s.changeStateMu.Unlock()\n\t\t\ts.config.log.Debug(\"halting execution to set breakpoints\")\n\t\t\t_, err := s.halt()\n\t\t\tif err != nil {\n\t\t\t\ts.sendErrorResponse(request.Request, UnableToSetBreakpoints, \"Unable to set or clear breakpoints\", err.Error())\n\t\t\t\treturn\n\t\t\t}\n\t\t\ts.onSetBreakpointsRequest(request)\n\t\tcase *dap.SetFunctionBreakpointsRequest: // Optional (capability 'supportsFunctionBreakpoints')\n\t\t\ts.changeStateMu.Lock()\n\t\t\tdefer s.changeStateMu.Unlock()\n\t\t\ts.config.log.Debug(\"halting execution to set breakpoints\")\n\t\t\t_, err := s.halt()\n\t\t\tif err != nil {\n\t\t\t\ts.sendErrorResponse(request.Request, UnableToSetBreakpoints, \"Unable to set or clear breakpoints\", err.Error())\n\t\t\t\treturn\n\t\t\t}\n\t\t\ts.onSetFunctionBreakpointsRequest(request)\n\t\tdefault:\n\t\t\tr := request.(dap.RequestMessage).GetRequest()\n\t\t\ts.sendErrorResponse(*r, DebuggeeIsRunning, fmt.Sprintf(\"Unable to process `%s`\", r.Command), \"debuggee is running\")\n\t\t}\n\t\treturn\n\t}\n\n\t// Reject all other requests if the target hasn't been launched\n\tif s.debugger == nil {\n\t\tr := request.(dap.RequestMessage).GetRequest()\n\t\ts.sendShowUserErrorResponse(*r, NoDebugIsRunning, \"No debug session started\", \"Use launch or attach request first.\")\n\t\treturn\n\t}\n\n\t// Requests below can only be handled while target is stopped.\n\t// Some of them are blocking and will be handled synchronously\n\t// on this goroutine while non-blocking requests will be dispatched\n\t// to another goroutine. Please note that because of the running\n\t// check above, there should be no more than one pending asynchronous\n\t// request at a time.\n\n\t// Non-blocking request handlers will signal when they are ready\n\t// setting up for async execution, so more requests can be processed.\n\tresumeRequestLoop := newSyncflag()\n\n\tswitch request := request.(type) {\n\t//--- Asynchronous requests ---\n\tcase *dap.ConfigurationDoneRequest: // Optional (capability 'supportsConfigurationDoneRequest')\n\t\tgo func() {\n\t\t\tdefer s.recoverPanic(request)\n\t\t\ts.onConfigurationDoneRequest(request, resumeRequestLoop)\n\t\t}()\n\t\tresumeRequestLoop.wait()\n\tcase *dap.ContinueRequest: // Required\n\t\tgo func() {\n\t\t\tdefer s.recoverPanic(request)\n\t\t\ts.onContinueRequest(request, resumeRequestLoop)\n\t\t}()\n\t\tresumeRequestLoop.wait()\n\tcase *dap.NextRequest: // Required\n\t\tgo func() {\n\t\t\tdefer s.recoverPanic(request)\n\t\t\ts.onNextRequest(request, resumeRequestLoop)\n\t\t}()\n\t\tresumeRequestLoop.wait()\n\tcase *dap.StepInRequest: // Required\n\t\tgo func() {\n\t\t\tdefer s.recoverPanic(request)\n\t\t\ts.onStepInRequest(request, resumeRequestLoop)\n\t\t}()\n\t\tresumeRequestLoop.wait()\n\tcase *dap.StepOutRequest: // Required\n\t\tgo func() {\n\t\t\tdefer s.recoverPanic(request)\n\t\t\ts.onStepOutRequest(request, resumeRequestLoop)\n\t\t}()\n\t\tresumeRequestLoop.wait()\n\tcase *dap.StepBackRequest: // Optional (capability 'supportsStepBack')\n\t\tgo func() {\n\t\t\tdefer s.recoverPanic(request)\n\t\t\ts.onStepBackRequest(request, resumeRequestLoop)\n\t\t}()\n\t\tresumeRequestLoop.wait()\n\tcase *dap.ReverseContinueRequest: // Optional (capability 'supportsStepBack')\n\t\tgo func() {\n\t\t\tdefer s.recoverPanic(request)\n\t\t\ts.onReverseContinueRequest(request, resumeRequestLoop)\n\t\t}()\n\t\tresumeRequestLoop.wait()\n\t//--- Synchronous requests ---\n\tcase *dap.SetBreakpointsRequest: // Required\n\t\ts.onSetBreakpointsRequest(request)\n\tcase *dap.SetFunctionBreakpointsRequest: // Optional (capability 'supportsFunctionBreakpoints')\n\t\ts.onSetFunctionBreakpointsRequest(request)\n\tcase *dap.SetInstructionBreakpointsRequest: // Optional (capability 'supportsInstructionBreakpoints')\n\t\ts.onSetInstructionBreakpointsRequest(request)\n\tcase *dap.SetExceptionBreakpointsRequest: // Optional (capability 'exceptionBreakpointFilters')\n\t\ts.onSetExceptionBreakpointsRequest(request)\n\tcase *dap.ThreadsRequest: // Required\n\t\ts.onThreadsRequest(request)\n\tcase *dap.StackTraceRequest: // Required\n\t\ts.onStackTraceRequest(request)\n\tcase *dap.ScopesRequest: // Required\n\t\ts.onScopesRequest(request)\n\tcase *dap.VariablesRequest: // Required\n\t\ts.onVariablesRequest(request)\n\tcase *dap.EvaluateRequest: // Required\n\t\ts.onEvaluateRequest(request)\n\tcase *dap.SetVariableRequest: // Optional (capability 'supportsSetVariable')\n\t\ts.onSetVariableRequest(request)\n\tcase *dap.ExceptionInfoRequest: // Optional (capability 'supportsExceptionInfoRequest')\n\t\ts.onExceptionInfoRequest(request)\n\tcase *dap.DisassembleRequest: // Optional (capability 'supportsDisassembleRequest')\n\t\ts.onDisassembleRequest(request)\n\t//--- Requests that we may want to support ---\n\tcase *dap.SourceRequest: // Required\n\t\t/*TODO*/ s.sendUnsupportedErrorResponse(request.Request) // https://github.com/go-delve/delve/issues/2851\n\tcase *dap.SetExpressionRequest: // Optional (capability 'supportsSetExpression')\n\t\t/*TODO*/ s.onSetExpressionRequest(request) // Not yet implemented\n\tcase *dap.LoadedSourcesRequest: // Optional (capability 'supportsLoadedSourcesRequest')\n\t\t/*TODO*/ s.onLoadedSourcesRequest(request) // Not yet implemented\n\tcase *dap.ReadMemoryRequest: // Optional (capability 'supportsReadMemoryRequest')\n\t\ts.onReadMemoryRequest(request)\n\tcase *dap.CancelRequest: // Optional (capability 'supportsCancelRequest')\n\t\t/*TODO*/ s.onCancelRequest(request) // Not yet implemented (does this make sense?)\n\tcase *dap.ModulesRequest: // Optional (capability 'supportsModulesRequest')\n\t\t/*TODO*/ s.sendUnsupportedErrorResponse(request.Request) // Not yet implemented (does this make sense?)\n\t//--- Requests that we do not plan to support ---\n\tcase *dap.RestartFrameRequest: // Optional (capability 'supportsRestartFrame')\n\t\ts.sendUnsupportedErrorResponse(request.Request)\n\tcase *dap.GotoRequest: // Optional (capability 'supportsGotoTargetsRequest')\n\t\ts.sendUnsupportedErrorResponse(request.Request)\n\tcase *dap.TerminateThreadsRequest: // Optional (capability 'supportsTerminateThreadsRequest')\n\t\ts.sendUnsupportedErrorResponse(request.Request)\n\tcase *dap.StepInTargetsRequest: // Optional (capability 'supportsStepInTargetsRequest')\n\t\ts.sendUnsupportedErrorResponse(request.Request)\n\tcase *dap.GotoTargetsRequest: // Optional (capability 'supportsGotoTargetsRequest')\n\t\ts.sendUnsupportedErrorResponse(request.Request)\n\tcase *dap.CompletionsRequest: // Optional (capability 'supportsCompletionsRequest')\n\t\ts.sendUnsupportedErrorResponse(request.Request)\n\tcase *dap.DataBreakpointInfoRequest: // Optional (capability 'supportsDataBreakpoints')\n\t\ts.sendUnsupportedErrorResponse(request.Request)\n\tcase *dap.SetDataBreakpointsRequest: // Optional (capability 'supportsDataBreakpoints')\n\t\ts.sendUnsupportedErrorResponse(request.Request)\n\tcase *dap.BreakpointLocationsRequest: // Optional (capability 'supportsBreakpointLocationsRequest')\n\t\ts.sendUnsupportedErrorResponse(request.Request)\n\tdefault:\n\t\t// This is a DAP message that go-dap has a struct for, so\n\t\t// decoding succeeded, but this function does not know how\n\t\t// to handle.\n\t\ts.sendInternalErrorResponse(request.GetSeq(), fmt.Sprintf(\"Unable to process %#v\\n\", request))\n\t}\n}\n\nfunc (s *Session) send(message dap.Message) {\n\tjsonmsg, _ := json.Marshal(message)\n\ts.config.log.Debug(\"[-> to client]\", string(jsonmsg))\n\t// TODO(polina): consider using a channel for all the sends and to have a dedicated\n\t// goroutine that reads from that channel and sends over the connection.\n\t// This will avoid blocking on slow network sends.\n\ts.sendingMu.Lock()\n\tdefer s.sendingMu.Unlock()\n\terr := dap.WriteProtocolMessage(s.conn, message)\n\tif err != nil {\n\t\ts.config.log.Debug(err)\n\t}\n}\n\nfunc (s *Session) logToConsole(msg string) {\n\ts.send(&dap.OutputEvent{\n\t\tEvent: *s.newEvent(\"output\"),\n\t\tBody: dap.OutputEventBody{\n\t\t\tOutput:   msg + \"\\n\",\n\t\t\tCategory: \"console\",\n\t\t},\n\t})\n}\n\nfunc (s *Session) onInitializeRequest(request *dap.InitializeRequest) {\n\ts.setClientCapabilities(request.Arguments)\n\tif request.Arguments.PathFormat != \"path\" {\n\t\ts.sendErrorResponse(request.Request, FailedToInitialize, \"Failed to initialize\",\n\t\t\tfmt.Sprintf(\"Unsupported 'pathFormat' value '%s'.\", request.Arguments.PathFormat))\n\t\treturn\n\t}\n\tif !request.Arguments.LinesStartAt1 {\n\t\ts.sendErrorResponse(request.Request, FailedToInitialize, \"Failed to initialize\",\n\t\t\t\"Only 1-based line numbers are supported.\")\n\t\treturn\n\t}\n\tif !request.Arguments.ColumnsStartAt1 {\n\t\ts.sendErrorResponse(request.Request, FailedToInitialize, \"Failed to initialize\",\n\t\t\t\"Only 1-based column numbers are supported.\")\n\t\treturn\n\t}\n\n\t// TODO(polina): Respond with an error if debug session started\n\t// with an initialize request is in progress?\n\tresponse := &dap.InitializeResponse{Response: *s.newResponse(request.Request)}\n\tresponse.Body.SupportsConfigurationDoneRequest = true\n\tresponse.Body.SupportsConditionalBreakpoints = true\n\tresponse.Body.SupportsHitConditionalBreakpoints = true\n\tresponse.Body.SupportsDelayedStackTraceLoading = true\n\tresponse.Body.SupportsFunctionBreakpoints = true\n\tresponse.Body.SupportsInstructionBreakpoints = true\n\tresponse.Body.SupportsExceptionInfoRequest = true\n\tresponse.Body.SupportsSetVariable = true\n\tresponse.Body.SupportsEvaluateForHovers = true\n\tresponse.Body.SupportsClipboardContext = true\n\tresponse.Body.SupportsSteppingGranularity = true\n\tresponse.Body.SupportsLogPoints = true\n\tresponse.Body.SupportsDisassembleRequest = true\n\t// To be enabled by CapabilitiesEvent based on launch configuration\n\tresponse.Body.SupportsStepBack = false\n\tresponse.Body.SupportTerminateDebuggee = false\n\t// TODO(polina): support these requests in addition to vscode-go feature parity\n\tresponse.Body.SupportsTerminateRequest = false\n\tresponse.Body.SupportsRestartRequest = true\n\tresponse.Body.SupportsSetExpression = false\n\tresponse.Body.SupportsLoadedSourcesRequest = false\n\tresponse.Body.SupportsReadMemoryRequest = true\n\tresponse.Body.SupportsCancelRequest = false\n\tresponse.Body.ExceptionBreakpointFilters = []dap.ExceptionBreakpointsFilter{\n\t\t{Filter: proc.UnrecoveredPanic, Label: \"Unrecovered Panics\", Default: true},\n\t\t{Filter: proc.FatalThrow, Label: \"Fatal Throws\", Default: true},\n\t}\n\ts.send(response)\n}\n\nfunc (s *Session) setClientCapabilities(args dap.InitializeRequestArguments) {\n\ts.clientCapabilities.supportsMemoryReferences = args.SupportsMemoryReferences\n\ts.clientCapabilities.supportsProgressReporting = args.SupportsProgressReporting\n\ts.clientCapabilities.supportsRunInTerminalRequest = args.SupportsRunInTerminalRequest\n\ts.clientCapabilities.supportsVariablePaging = args.SupportsVariablePaging\n\ts.clientCapabilities.supportsVariableType = args.SupportsVariableType\n}\n\nfunc cleanExeName(name string) string {\n\tif runtime.GOOS == \"windows\" && filepath.Ext(name) != \".exe\" {\n\t\treturn name + \".exe\"\n\t}\n\treturn name\n}\n\nfunc (s *Session) onLaunchRequest(request *dap.LaunchRequest) {\n\tvar err error\n\tif s.debugger != nil {\n\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\",\n\t\t\tfmt.Sprintf(\"debug session already in progress at %s - use remote attach mode to connect to a server with an active debug session\", s.address()))\n\t\treturn\n\t}\n\n\targs := defaultLaunchConfig // narrow copy for initializing non-zero default values\n\tif err := unmarshalLaunchAttachArgs(request.Arguments, &args); err != nil {\n\t\ts.sendShowUserErrorResponse(request.Request,\n\t\t\tFailedToLaunch, \"Failed to launch\", fmt.Sprintf(\"invalid debug configuration - %v\", err))\n\t\treturn\n\t}\n\ts.config.log.Debug(\"parsed launch config: \", prettyPrint(args))\n\n\tif args.DlvCwd != \"\" {\n\t\tif err := os.Chdir(args.DlvCwd); err != nil {\n\t\t\ts.sendShowUserErrorResponse(request.Request,\n\t\t\t\tFailedToLaunch, \"Failed to launch\", fmt.Sprintf(\"failed to chdir to %q - %v\", args.DlvCwd, err))\n\t\t\treturn\n\t\t}\n\t}\n\n\tfor k, v := range args.Env {\n\t\tif v != nil {\n\t\t\tif err := os.Setenv(k, *v); err != nil {\n\t\t\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\", fmt.Sprintf(\"failed to setenv(%v) - %v\", k, err))\n\t\t\t\treturn\n\t\t\t}\n\t\t} else {\n\t\t\tif err := os.Unsetenv(k); err != nil {\n\t\t\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\", fmt.Sprintf(\"failed to unsetenv(%v) - %v\", k, err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tif args.Mode == \"\" {\n\t\targs.Mode = \"debug\"\n\t}\n\tif !isValidLaunchMode(args.Mode) {\n\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\",\n\t\t\tfmt.Sprintf(\"invalid debug configuration - unsupported 'mode' attribute %q\", args.Mode))\n\t\treturn\n\t}\n\n\tif args.Program == \"\" && args.Mode != \"replay\" { // Only fail on modes requiring a program\n\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\",\n\t\t\t\"The program attribute is missing in debug configuration.\")\n\t\treturn\n\t}\n\n\tif args.Backend == \"\" {\n\t\targs.Backend = \"default\"\n\t}\n\n\twhatWeAreLaunching := \"\" // tracking what we are doing, purely informative for error messages\n\n\tif args.Mode == \"replay\" {\n\t\t// Validate trace directory\n\t\tif args.TraceDirPath == \"\" {\n\t\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\",\n\t\t\t\t\"The 'traceDirPath' attribute is missing in debug configuration.\")\n\t\t\treturn\n\t\t}\n\n\t\t// Assign the rr trace directory path to debugger configuration\n\t\ts.config.Debugger.CoreFile = args.TraceDirPath\n\t\targs.Backend = \"rr\"\n\t}\n\tif args.Mode == \"core\" {\n\t\t// Validate core dump path\n\t\tif args.CoreFilePath == \"\" {\n\t\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\",\n\t\t\t\t\"The 'coreFilePath' attribute is missing in debug configuration.\")\n\t\t\treturn\n\t\t}\n\t\t// Assign the non-empty core file path to debugger configuration. This will\n\t\t// trigger a native core file replay instead of a rr trace replay\n\t\ts.config.Debugger.CoreFile = args.CoreFilePath\n\t\targs.Backend = \"core\"\n\t\twhatWeAreLaunching = \" core file \" + args.CoreFilePath\n\t}\n\n\ts.config.Debugger.Backend = args.Backend\n\n\t// Prepare the debug executable filename, building it if necessary\n\tdebugbinary := args.Program\n\tif args.Mode == \"debug\" || args.Mode == \"test\" {\n\t\tdeleteOnError := false\n\t\tif args.Output == \"\" {\n\t\t\tdeleteOnError = true\n\t\t\targs.Output = gobuild.DefaultDebugBinaryPath(\"__debug_bin\")\n\t\t} else {\n\t\t\targs.Output = cleanExeName(args.Output)\n\t\t}\n\t\targs.Output, err = filepath.Abs(args.Output)\n\t\tif err != nil {\n\t\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\", err.Error())\n\t\t\treturn\n\t\t}\n\t\tdebugbinary = args.Output\n\n\t\tvar cmd string\n\t\tvar out []byte\n\n\t\tswitch args.Mode {\n\t\tcase \"debug\":\n\t\t\ts.config.Debugger.ExecuteKind = debugger.ExecutingGeneratedFile\n\t\t\ts.config.Debugger.Packages = []string{args.Program}\n\t\t\twhatWeAreLaunching = \" \" + args.Program\n\t\t\ts.config.Debugger.BuildFlags = args.BuildFlags.value\n\t\t\ts.send(&dap.OutputEvent{\n\t\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\t\tBody: dap.OutputEventBody{\n\t\t\t\t\tOutput:   fmt.Sprintf(\"Building %s\", args.Program),\n\t\t\t\t\tCategory: \"stdout\",\n\t\t\t\t}})\n\t\t\tcmd, out, err = gobuild.GoBuildCombinedOutput(args.Output, []string{args.Program}, args.BuildFlags.value)\n\t\tcase \"test\":\n\t\t\ts.config.Debugger.ExecuteKind = debugger.ExecutingGeneratedTest\n\t\t\ts.config.Debugger.Packages = []string{args.Program}\n\t\t\twhatWeAreLaunching = \" tests of \" + args.Program\n\t\t\ts.config.Debugger.BuildFlags = args.BuildFlags.value\n\t\t\ts.send(&dap.OutputEvent{\n\t\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\t\tBody: dap.OutputEventBody{\n\t\t\t\t\tOutput:   fmt.Sprintf(\"Building tests of %s\", args.Program),\n\t\t\t\t\tCategory: \"stdout\",\n\t\t\t\t}})\n\t\t\tcmd, out, err = gobuild.GoTestBuildCombinedOutput(args.Output, []string{args.Program}, args.BuildFlags.value)\n\t\t}\n\t\targs.DlvCwd, _ = filepath.Abs(args.DlvCwd)\n\t\ts.config.log.Debugf(\"building from %q: [%s]\", args.DlvCwd, cmd)\n\t\tif err != nil {\n\t\t\tif deleteOnError {\n\t\t\t\tgobuild.Remove(args.Output)\n\t\t\t}\n\t\t\ts.send(&dap.OutputEvent{\n\t\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\t\tBody: dap.OutputEventBody{\n\t\t\t\t\tOutput:   fmt.Sprintf(\"Build Error: %s\\n%s (%s)\\n\", cmd, strings.TrimSpace(string(out)), err.Error()),\n\t\t\t\t\tCategory: \"stderr\",\n\t\t\t\t},\n\t\t\t})\n\t\t\t// Users are used to checking the Debug Console for build errors.\n\t\t\t// No need to bother them with a visible pop-up.\n\t\t\ts.sendErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\",\n\t\t\t\t\"Build error: Check the debug console for details.\")\n\t\t\treturn\n\t\t}\n\t\ts.mu.Lock()\n\t\ts.binaryToRemove = args.Output\n\t\ts.mu.Unlock()\n\t}\n\ts.config.ProcessArgs = append([]string{debugbinary}, args.Args...)\n\n\ts.setLaunchAttachArgs(args.LaunchAttachCommonConfig)\n\n\tif args.Cwd == \"\" {\n\t\tif args.Mode == \"test\" {\n\t\t\t// In test mode, run the test binary from the package directory\n\t\t\t// like in `go test` and `dlv test` by default.\n\t\t\targs.Cwd = s.getPackageDir(args.Program)\n\t\t} else {\n\t\t\targs.Cwd = \".\"\n\t\t}\n\t}\n\ts.config.Debugger.WorkingDir = args.Cwd\n\n\t// Backend layers will interpret paths relative to server's working directory:\n\t// reflect that before logging.\n\targsToLog := args\n\targsToLog.Program, _ = filepath.Abs(args.Program)\n\targsToLog.Cwd, _ = filepath.Abs(args.Cwd)\n\ts.config.log.Debugf(\"launching binary '%s' with config: %s\", debugbinary, prettyPrint(argsToLog))\n\n\tremoteOut := false\n\tswitch args.OutputMode {\n\tcase \"remote\":\n\t\tremoteOut = true\n\tcase \"local\", \"\":\n\t\t// noting\n\tdefault:\n\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\",\n\t\t\tfmt.Sprintf(\"invalid debug configuration - unsupported 'outputMode' attribute %q\", args.OutputMode))\n\t\treturn\n\t}\n\n\tif remoteOut && (args.StdoutTo != \"\" || args.StderrTo != \"\") {\n\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\",\n\t\t\t\"output == \\\"remote\\\" can not be used together with stdoutTo or stderrTo\")\n\t\treturn\n\t}\n\n\tremoteOutFunc := func(stdoutReader io.ReadCloser, stderrReader io.ReadCloser) {\n\t\trunReadFunc := func(reader io.ReadCloser, category string) {\n\t\t\tdefer s.preTerminatedWG.Done()\n\t\t\tdefer reader.Close()\n\t\t\t// Read output from `reader` and send to client\n\t\t\tvar out [1024]byte\n\t\t\tfor {\n\t\t\t\tn, err := reader.Read(out[:])\n\t\t\t\tif n > 0 {\n\t\t\t\t\touts := string(out[:n])\n\t\t\t\t\ts.send(&dap.OutputEvent{\n\t\t\t\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\t\t\t\tBody: dap.OutputEventBody{\n\t\t\t\t\t\t\tOutput:   outs,\n\t\t\t\t\t\t\tCategory: category,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif err != nil {\n\t\t\t\t\tif err == io.EOF {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\ts.config.log.Errorf(\"failed read by %s - %v \", category, err)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ts.preTerminatedWG.Add(2)\n\t\tgo runReadFunc(stdoutReader, \"stdout\")\n\t\tgo runReadFunc(stderrReader, \"stderr\")\n\t}\n\n\tif args.NoDebug {\n\t\ts.mu.Lock()\n\t\tcmd, stdoutReader, stderrReader, err := s.newNoDebugProcess(debugbinary, args.Args, s.config.Debugger.WorkingDir, remoteOut, args.StdinFrom, args.StdoutTo, args.StderrTo)\n\t\ts.mu.Unlock()\n\t\tif err != nil {\n\t\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\"+whatWeAreLaunching, err.Error())\n\t\t\treturn\n\t\t}\n\t\t// Skip 'initialized' event, which will prevent the client from sending\n\t\t// debug-related requests.\n\t\ts.send(&dap.LaunchResponse{Response: *s.newResponse(request.Request)})\n\n\t\t// Start the program on a different goroutine, so we can listen for disconnect request.\n\t\tgo func() {\n\t\t\tif remoteOut {\n\t\t\t\tremoteOutFunc(stdoutReader, stderrReader)\n\t\t\t}\n\n\t\t\tif err := cmd.Wait(); err != nil {\n\t\t\t\ts.config.log.Debugf(\"program exited with error: %v\", err)\n\t\t\t}\n\n\t\t\tclose(s.noDebugProcess.exited)\n\t\t\ts.logToConsole(proc.ErrProcessExited{Pid: cmd.ProcessState.Pid(), Status: cmd.ProcessState.ExitCode()}.Error())\n\t\t\ts.send(&dap.TerminatedEvent{Event: *s.newEvent(\"terminated\")})\n\t\t}()\n\t\treturn\n\t}\n\n\ts.config.Debugger.Stdin = args.StdinFrom\n\ts.config.Debugger.Stdout = proc.OutputRedirect{Path: args.StdoutTo}\n\ts.config.Debugger.Stderr = proc.OutputRedirect{Path: args.StderrTo}\n\n\tvar closeAll func()\n\tif remoteOut {\n\t\tvar (\n\t\t\treaders         [2]io.ReadCloser\n\t\t\toutputRedirects [2]proc.OutputRedirect\n\t\t)\n\n\t\tfor i := range 2 {\n\t\t\treaders[i], outputRedirects[i], err = proc.Redirector()\n\t\t\tif err != nil {\n\t\t\t\ts.sendShowUserErrorResponse(request.Request, InternalError, \"Internal Error\",\n\t\t\t\t\tfmt.Sprintf(\"failed to generate stdio pipes - %v\", err))\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\ts.config.Debugger.Stdout = outputRedirects[0]\n\t\ts.config.Debugger.Stderr = outputRedirects[1]\n\n\t\tremoteOutFunc(readers[0], readers[1])\n\t\tcloseAll = func() {\n\t\t\tfor index := range readers {\n\t\t\t\tif closeErr := readers[index].Close(); closeErr != nil {\n\t\t\t\t\ts.config.log.Warnf(\"failed to clear redirects - %v\", closeErr)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunc() {\n\t\ts.mu.Lock()\n\t\tdefer s.mu.Unlock() // Make sure to unlock in case of panic that will become internal error\n\t\ts.debugger, err = debugger.New(&s.config.Debugger, s.config.ProcessArgs)\n\n\t\tif s.debugger != nil {\n\t\t\ttgrp, unlock := s.debugger.LockTargetGroup()\n\t\t\tcmdline := tgrp.Selected.CmdLine\n\t\t\tunlock()\n\n\t\t\ts.send(&dap.ProcessEvent{\n\t\t\t\tEvent: *s.newEvent(\"process\"),\n\t\t\t\tBody: dap.ProcessEventBody{\n\t\t\t\t\tName:            cmdline,\n\t\t\t\t\tSystemProcessId: s.debugger.ProcessPid(),\n\t\t\t\t\tIsLocalProcess:  true,\n\t\t\t\t\tStartMethod:     \"launch\",\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}()\n\tif err != nil {\n\t\tif s.binaryToRemove != \"\" {\n\t\t\tgobuild.Remove(s.binaryToRemove)\n\t\t}\n\t\ts.sendShowUserErrorResponse(request.Request, FailedToLaunch, \"Failed to launch\"+whatWeAreLaunching, err.Error())\n\t\tif closeAll != nil {\n\t\t\tcloseAll()\n\t\t}\n\t\treturn\n\t}\n\t// Enable StepBack controls on supported backends\n\tif s.config.Debugger.Backend == \"rr\" {\n\t\ts.send(&dap.CapabilitiesEvent{Event: *s.newEvent(\"capabilities\"), Body: dap.CapabilitiesEventBody{Capabilities: dap.Capabilities{SupportsStepBack: true}}})\n\t}\n\n\tif s.args.followExec {\n\t\terr = s.debugger.FollowExec(s.args.followExec, s.args.followExecRegex)\n\t\tif err != nil {\n\t\t\ts.send(&dap.OutputEvent{\n\t\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\t\tBody: dap.OutputEventBody{\n\t\t\t\t\tOutput:   fmt.Sprintf(\"Failed to enable follow exec: %v\\n\", err),\n\t\t\t\t\tCategory: \"important\",\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}\n\n\t// Notify the client that the debugger is ready to start accepting\n\t// configuration requests for setting breakpoints, etc. The client\n\t// will end the configuration sequence with 'configurationDone'.\n\ts.send(&dap.InitializedEvent{Event: *s.newEvent(\"initialized\")})\n\ts.send(&dap.LaunchResponse{Response: *s.newResponse(request.Request)})\n\ts.warnAboutTrimpathMaybe()\n}\n\nfunc (s *Session) getPackageDir(pkg string) string {\n\tcmd := exec.Command(\"go\", \"list\", \"-f\", \"{{.Dir}}\", pkg)\n\tout, err := cmd.Output()\n\tif err != nil {\n\t\ts.config.log.Debugf(\"failed to determine package directory for %v: %v\\n%s\", pkg, err, out)\n\t\treturn \".\"\n\t}\n\treturn string(bytes.TrimSpace(out))\n}\n\n// newNoDebugProcess is called from onLaunchRequest (run goroutine) and\n// requires holding mu lock. It prepares process exec.Cmd to be started.\nfunc (s *Session) newNoDebugProcess(program string, targetArgs []string, wd string, remoteOut bool, stdinFrom, stdoutTo, stderrTo string) (cmd *exec.Cmd, stdoutReader, stderrReader io.ReadCloser, err error) {\n\tif s.noDebugProcess != nil {\n\t\treturn nil, nil, nil, errors.New(\"another launch request is in progress\")\n\t}\n\n\tcmd = exec.Command(program, targetArgs...)\n\tcmd.Stdin, cmd.Dir = os.Stdin, wd\n\n\tif stdinFrom != \"\" {\n\t\tfh, err := os.Open(stdinFrom)\n\t\tif err != nil {\n\t\t\treturn nil, nil, nil, fmt.Errorf(\"could not open stdin file: %v\", err)\n\t\t}\n\t\tcmd.Stdin = fh\n\t}\n\n\tif remoteOut {\n\t\tif stderrReader, err = cmd.StderrPipe(); err != nil {\n\t\t\treturn nil, nil, nil, err\n\t\t}\n\n\t\tif stdoutReader, err = cmd.StdoutPipe(); err != nil {\n\t\t\treturn nil, nil, nil, err\n\t\t}\n\t} else {\n\t\tvar err error\n\t\ttoclose := []*os.File{}\n\t\tcreate := func(redirect string, dflt *os.File) (f *os.File) {\n\t\t\tif redirect != \"\" {\n\t\t\t\tf, err = os.Create(redirect)\n\t\t\t\ttoclose = append(toclose, f)\n\n\t\t\t\treturn f\n\t\t\t}\n\n\t\t\treturn dflt\n\t\t}\n\t\tdefer func() {\n\t\t\tfor _, f := range toclose {\n\t\t\t\tf.Close()\n\t\t\t}\n\t\t}()\n\n\t\tcmd.Stdout = create(stdoutTo, os.Stdout)\n\t\tif err != nil {\n\t\t\treturn nil, nil, nil, fmt.Errorf(\"could not create stdout file: %v\", err)\n\t\t}\n\n\t\tcmd.Stderr = create(stderrTo, os.Stderr)\n\t\tif err != nil {\n\t\t\treturn nil, nil, nil, fmt.Errorf(\"could not create stderr file: %v\", err)\n\t\t}\n\t}\n\n\tif err = cmd.Start(); err != nil {\n\t\treturn nil, nil, nil, err\n\t}\n\n\ts.noDebugProcess = &process{Cmd: cmd, exited: make(chan struct{})}\n\treturn cmd, stdoutReader, stderrReader, nil\n}\n\n// stopNoDebugProcess is called from Stop (main goroutine) and\n// onDisconnectRequest (run goroutine) and requires holding mu lock.\nfunc (s *Session) stopNoDebugProcess() {\n\tif s.noDebugProcess == nil {\n\t\ts.disconnected = true\n\t\t// We already handled termination or there was never a process\n\t\treturn\n\t}\n\tselect {\n\tcase <-s.noDebugProcess.exited:\n\t\ts.noDebugProcess = nil\n\t\treturn\n\tdefault:\n\t}\n\n\t// TODO(hyangah): gracefully terminate the process and its children processes.\n\ts.logToConsole(fmt.Sprintf(\"Terminating process %d\", s.noDebugProcess.Process.Pid))\n\ts.noDebugProcess.Process.Kill() // Don't check error. Process killing and self-termination may race.\n\n\t// Wait for kill to complete or time out\n\tselect {\n\tcase <-time.After(5 * time.Second):\n\t\ts.config.log.Debug(\"noDebug process kill timed out\")\n\tcase <-s.noDebugProcess.exited:\n\t\ts.config.log.Debug(\"noDebug process killed\")\n\t\ts.noDebugProcess = nil\n\t}\n}\n\n// onDisconnectRequest handles the DisconnectRequest. Per the DAP spec,\n// it disconnects the debuggee and signals that the debug adaptor\n// (in our case this TCP server) can be terminated.\nfunc (s *Session) onDisconnectRequest(request *dap.DisconnectRequest) {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\n\tif s.debugger != nil && s.config.AcceptMulti && (request.Arguments == nil || !request.Arguments.TerminateDebuggee) {\n\t\t// This is a multi-use server/debugger, so a disconnect request that doesn't\n\t\t// terminate the debuggee should clean up only the client connection and pointer to debugger,\n\t\t// but not the entire server.\n\t\tstatus := \"halted\"\n\t\tif s.isRunningCmd() {\n\t\t\tstatus = \"running\"\n\t\t} else if state, err := s.debugger.State(false); processExited(state, err) {\n\t\t\tstatus = \"exited\"\n\t\t\ts.preTerminatedWG.Wait()\n\t\t}\n\n\t\ts.logToConsole(fmt.Sprintf(\"Closing client session, but leaving multi-client DAP server at %s with debuggee %s\", s.config.Listener.Addr().String(), status))\n\t\ts.send(&dap.DisconnectResponse{Response: *s.newResponse(request.Request)})\n\t\ts.send(&dap.TerminatedEvent{Event: *s.newEvent(\"terminated\")})\n\t\ts.conn.Close()\n\t\ts.disconnected = true\n\t\t// The target is left in whatever state it is already in - halted or running.\n\t\t// The users therefore have the flexibility to choose the appropriate state\n\t\t// for their case before disconnecting. This is also desirable in case of\n\t\t// the client connection fails unexpectedly and the user needs to reconnect.\n\t\t// TODO(polina): should we always issue a continue here if it is not running\n\t\t// like is done in vscode-go legacy adapter?\n\t\t// Ideally we want to use bool suspendDebuggee flag, but it is not yet\n\t\t// available in vscode: https://github.com/microsoft/vscode/issues/134412\n\t\treturn\n\t}\n\n\tdefer s.config.triggerServerStop()\n\tvar err error\n\tif s.debugger != nil {\n\t\t// We always kill launched programs.\n\t\t// In case of attach, we leave the program\n\t\t// running by default, which can be\n\t\t// overridden by an explicit request to terminate.\n\t\tkillProcess := s.debugger.AttachPid() == 0 || (request.Arguments != nil && request.Arguments.TerminateDebuggee)\n\t\terr = s.stopDebugSession(killProcess)\n\t} else if s.noDebugProcess != nil {\n\t\ts.stopNoDebugProcess()\n\t} else {\n\t\ts.disconnected = true\n\t}\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, DisconnectError, \"Error while disconnecting\", err.Error())\n\t} else {\n\t\ts.send(&dap.DisconnectResponse{Response: *s.newResponse(request.Request)})\n\t}\n\ts.preTerminatedWG.Wait()\n\t// The debugging session has ended, so we send a terminated event.\n\ts.send(&dap.TerminatedEvent{Event: *s.newEvent(\"terminated\")})\n}\n\n// stopDebugSession is called from Stop (main goroutine) and\n// onDisconnectRequest (run goroutine) and requires holding mu lock.\n// Returns any detach error other than proc.ErrProcessExited.\nfunc (s *Session) stopDebugSession(killProcess bool) error {\n\ts.changeStateMu.Lock()\n\tdefer func() {\n\t\t// Avoid running stop sequence twice.\n\t\t// It's not fatal, but will result in duplicate logging.\n\t\ts.disconnected = true\n\t\ts.changeStateMu.Unlock()\n\t}()\n\tif s.debugger == nil || s.disconnected {\n\t\treturn nil\n\t}\n\tvar exited error\n\t// Halting will stop any debugger command that's pending on another\n\t// per-request goroutine. Tell auto-resumer not to resume, so the\n\t// goroutine can wrap-up and exit.\n\ts.setHaltRequested(true)\n\tstate, err := s.halt()\n\tif errors.Is(err, proc.ErrProcessDetached) {\n\t\ts.config.log.Debug(\"halt returned error: \", err)\n\t\treturn nil\n\t}\n\tif err != nil {\n\t\tvar errProcessExited proc.ErrProcessExited\n\t\tswitch {\n\t\tcase errors.As(err, &errProcessExited):\n\t\t\texited = errProcessExited\n\t\tdefault:\n\t\t\ts.config.log.Error(\"halt returned error: \", err)\n\t\t\tif err.Error() == \"no such process\" {\n\t\t\t\texited = err\n\t\t\t}\n\t\t}\n\t} else if state.Exited {\n\t\texited = proc.ErrProcessExited{Pid: s.debugger.ProcessPid(), Status: state.ExitStatus}\n\t\ts.config.log.Debug(\"halt returned state: \", exited)\n\t}\n\tif exited != nil {\n\t\t// TODO(suzmue): log exited error when the process exits, which may have been before\n\t\t// halt was called.\n\t\ts.logToConsole(exited.Error())\n\t\ts.logToConsole(\"Detaching\")\n\t} else if killProcess {\n\t\ts.logToConsole(\"Detaching and terminating target process\")\n\t} else {\n\t\ts.logToConsole(\"Detaching without terminating target process\")\n\t}\n\terr = s.debugger.Detach(killProcess)\n\tif err != nil {\n\t\tvar errProcessExited proc.ErrProcessExited\n\t\tswitch {\n\t\tcase errors.As(err, &errProcessExited):\n\t\t\ts.config.log.Debug(errProcessExited)\n\t\t\tif exited != nil {\n\t\t\t\ts.logToConsole(exited.Error())\n\t\t\t}\n\t\t\terr = nil\n\t\tdefault:\n\t\t\ts.config.log.Error(\"detach returned error: \", err)\n\t\t}\n\t}\n\treturn err\n}\n\n// halt sends a halt request if the debuggee is running.\n// changeStateMu should be held when calling (*Server).halt.\nfunc (s *Session) halt() (*api.DebuggerState, error) {\n\ts.config.log.Debug(\"halting\")\n\t// Only send a halt request if the debuggee is running.\n\tif s.debugger.IsRunning() {\n\t\treturn s.debugger.Command(&api.DebuggerCommand{Name: api.Halt}, nil, nil, nil)\n\t}\n\ts.config.log.Debug(\"process not running\")\n\treturn s.debugger.State(false)\n}\n\nfunc (s *Session) isNoDebug() bool {\n\ts.mu.Lock()\n\tdefer s.mu.Unlock()\n\treturn s.noDebugProcess != nil\n}\n\nfunc (s *Session) onSetBreakpointsRequest(request *dap.SetBreakpointsRequest) {\n\tif request.Arguments.Source.Path == \"\" {\n\t\ts.sendErrorResponse(request.Request, UnableToSetBreakpoints, \"Unable to set or clear breakpoints\", \"empty file path\")\n\t\treturn\n\t}\n\n\tclientPath := request.Arguments.Source.Path\n\tserverPath := s.toServerPath(clientPath)\n\n\t// Get all existing breakpoints that match for this source.\n\tsourceRequestPrefix := fmt.Sprintf(\"sourceBp Path=%q \", request.Arguments.Source.Path)\n\n\tbreakpoints := s.setBreakpoints(sourceRequestPrefix, len(request.Arguments.Breakpoints), func(i int) *bpMetadata {\n\t\twant := request.Arguments.Breakpoints[i]\n\t\treturn &bpMetadata{\n\t\t\tname:         fmt.Sprintf(\"%s Line=%d Column=%d\", sourceRequestPrefix, want.Line, want.Column),\n\t\t\tcondition:    want.Condition,\n\t\t\thitCondition: want.HitCondition,\n\t\t\tlogMessage:   want.LogMessage,\n\t\t}\n\t}, func(i int) (*bpLocation, error) {\n\t\twant := request.Arguments.Breakpoints[i]\n\t\treturn &bpLocation{\n\t\t\tfile: serverPath,\n\t\t\tline: want.Line,\n\t\t}, nil\n\t})\n\n\tresponse := &dap.SetBreakpointsResponse{Response: *s.newResponse(request.Request)}\n\tresponse.Body.Breakpoints = breakpoints\n\n\ts.send(response)\n}\n\ntype bpMetadata struct {\n\tname         string\n\tcondition    string\n\thitCondition string\n\tlogMessage   string\n}\n\ntype bpLocation struct {\n\tfile  string\n\tline  int\n\taddr  uint64\n\taddrs []uint64\n}\n\n// setBreakpoints is a helper function for setting source, function and instruction\n// breakpoints. It takes the prefix of the name for all breakpoints that should be\n// included, the total number of breakpoints, and functions for computing the metadata\n// and the location. The location is computed separately because this may be more\n// expensive to compute and may not always be necessary.\nfunc (s *Session) setBreakpoints(prefix string, totalBps int, metadataFunc func(i int) *bpMetadata, locFunc func(i int) (*bpLocation, error)) []dap.Breakpoint {\n\t// If a breakpoint:\n\t// -- exists and not in request => ClearBreakpoint\n\t// -- exists and in request => AmendBreakpoint\n\t// -- doesn't exist and in request => SetBreakpoint\n\n\t// Get all existing breakpoints matching the prefix.\n\texistingBps := s.getMatchingBreakpoints(prefix)\n\n\t// createdBps is a set of breakpoint names that have been added\n\t// during this request. This is used to catch duplicate set\n\t// breakpoints requests and to track which breakpoints need to\n\t// be deleted.\n\tcreatedBps := make(map[string]struct{}, len(existingBps))\n\n\tbreakpoints := make([]dap.Breakpoint, totalBps)\n\t// Amend existing breakpoints.\n\tfor i := range totalBps {\n\t\twant := metadataFunc(i)\n\t\tgot, ok := existingBps[want.name]\n\t\tif got == nil || !ok {\n\t\t\t// Skip if the breakpoint does not already exist.\n\t\t\tcontinue\n\t\t}\n\n\t\tvar err error\n\t\tif _, ok := createdBps[want.name]; ok {\n\t\t\terr = errors.New(\"breakpoint already exists\")\n\t\t} else {\n\t\t\tgot.Disabled = false\n\t\t\tgot.Cond = want.condition\n\t\t\tgot.HitCond = want.hitCondition\n\t\t\terr = setLogMessage(got, want.logMessage)\n\t\t\tif err == nil {\n\t\t\t\terr = s.debugger.AmendBreakpoint(got)\n\t\t\t}\n\t\t}\n\t\tcreatedBps[want.name] = struct{}{}\n\t\ts.updateBreakpointsResponse(breakpoints, i, err, got)\n\t}\n\n\t// Clear breakpoints.\n\t// Any breakpoint that existed before this request but was not amended must be deleted.\n\ts.clearBreakpoints(existingBps, createdBps)\n\n\t// Check if the plugin package is present or follow-exec is enabled.\n\t// Suspended breakpoints are only relevant when new executable code is\n\t// loaded. That can happen when a new process is spawned - which requires\n\t// follow-exec - or when new executable code is added to an existing binary.\n\t// The only fully supported way of doing the latter is plugins, hence this\n\t// check.\n\tfns, _ := s.debugger.Functions(`^plugin\\.Open$`, 0)\n\tsuspended := len(fns) > 0 || s.debugger.FollowExecEnabled()\n\n\t// Add new breakpoints.\n\tfor i := range totalBps {\n\t\twant := metadataFunc(i)\n\t\tif _, ok := existingBps[want.name]; ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar got *api.Breakpoint\n\t\twantLoc, err := locFunc(i)\n\t\tif err == nil {\n\t\t\tif _, ok := createdBps[want.name]; ok {\n\t\t\t\terr = errors.New(\"breakpoint already exists\")\n\t\t\t} else {\n\t\t\t\tbp := &api.Breakpoint{\n\t\t\t\t\tName:    want.name,\n\t\t\t\t\tFile:    wantLoc.file,\n\t\t\t\t\tLine:    wantLoc.line,\n\t\t\t\t\tAddr:    wantLoc.addr,\n\t\t\t\t\tAddrs:   wantLoc.addrs,\n\t\t\t\t\tCond:    want.condition,\n\t\t\t\t\tHitCond: want.hitCondition,\n\t\t\t\t}\n\t\t\t\terr = setLogMessage(bp, want.logMessage)\n\t\t\t\tif err == nil {\n\t\t\t\t\t// Create new breakpoints.\n\t\t\t\t\tgot, err = s.debugger.CreateBreakpoint(bp, \"\", nil, suspended)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcreatedBps[want.name] = struct{}{}\n\t\ts.updateBreakpointsResponse(breakpoints, i, err, got)\n\t}\n\treturn breakpoints\n}\n\nfunc setLogMessage(bp *api.Breakpoint, msg string) error {\n\ttracepoint, userdata, err := parseLogPoint(msg)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbp.Tracepoint = tracepoint\n\tif userdata != nil {\n\t\tbp.UserData = *userdata\n\t}\n\treturn nil\n}\n\nfunc (s *Session) updateBreakpointsResponse(breakpoints []dap.Breakpoint, i int, err error, got *api.Breakpoint) {\n\t// TODO(@Lslightly): For DAP v1.68.0, Reason can be set to \"pending\" when a\n\t// breakpoint is suspended. But it seems that nothing different happens.\n\n\t// Is the breakpoint suspended?\n\tif err == nil && len(got.Addrs) == 0 {\n\t\terr = errors.New(\"unable to set breakpoint\")\n\t}\n\n\tbreakpoints[i].Verified = err == nil\n\tif err != nil {\n\t\tbreakpoints[i].Message = err.Error()\n\t}\n\n\t// If the error is connected to a specific breakpoint, tell the user.\n\tif got != nil {\n\t\tbreakpoints[i].Id = got.ID\n\t}\n\n\t// If we have a file path, update the breakpoint.\n\tif got != nil && got.File != \"\" {\n\t\tpath := s.toClientPath(got.File)\n\t\tbreakpoints[i].Line = got.Line\n\t\tbreakpoints[i].Source = &dap.Source{Name: filepath.Base(path), Path: path}\n\t}\n}\n\n// functionBpPrefix is the prefix of bp.Name for every breakpoint bp set\n// in this request.\nconst functionBpPrefix = \"functionBreakpoint\"\n\nfunc (s *Session) onSetFunctionBreakpointsRequest(request *dap.SetFunctionBreakpointsRequest) {\n\tbreakpoints := s.setBreakpoints(functionBpPrefix, len(request.Arguments.Breakpoints), func(i int) *bpMetadata {\n\t\twant := request.Arguments.Breakpoints[i]\n\t\treturn &bpMetadata{\n\t\t\tname:         fmt.Sprintf(\"%s Name=%s\", functionBpPrefix, want.Name),\n\t\t\tcondition:    want.Condition,\n\t\t\thitCondition: want.HitCondition,\n\t\t\tlogMessage:   \"\",\n\t\t}\n\t}, func(i int) (*bpLocation, error) {\n\t\twant := request.Arguments.Breakpoints[i]\n\t\t// Set the function breakpoint\n\t\tspec, err := locspec.Parse(want.Name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif loc, ok := spec.(*locspec.NormalLocationSpec); !ok || loc.FuncBase == nil {\n\t\t\t// Other locations do not make sense in the context of function breakpoints.\n\t\t\t// Regex locations are likely to resolve to multiple places and offset locations\n\t\t\t// are only meaningful at the time the breakpoint was created.\n\t\t\treturn nil, fmt.Errorf(\"breakpoint name %q could not be parsed as a function. name must be in the format 'funcName', 'funcName:line' or 'fileName:line'\", want.Name)\n\t\t}\n\n\t\tif want.Name[0] == '.' {\n\t\t\treturn nil, errors.New(\"breakpoint names that are relative paths are not supported\")\n\t\t}\n\t\t// Find the location of the function name. CreateBreakpoint requires the name to include the base\n\t\t// (e.g. main.functionName is supported but not functionName).\n\t\t// We first find the location of the function, and then set breakpoints for that location.\n\t\tvar locs []api.Location\n\t\tlocs, err = s.debugger.FindLocationSpec(-1, 0, 0, want.Name, spec, true, s.args.substitutePathClientToServer)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif len(locs) == 0 {\n\t\t\treturn nil, err\n\t\t}\n\t\tif len(locs) > 1 {\n\t\t\ts.config.log.Debugf(\"multiple locations found for %s\", want.Name)\n\t\t}\n\n\t\t// Set breakpoint using the PCs that were found.\n\t\tloc := locs[0]\n\t\treturn &bpLocation{addr: loc.PC, addrs: loc.PCs}, nil\n\t})\n\n\tresponse := &dap.SetFunctionBreakpointsResponse{Response: *s.newResponse(request.Request)}\n\tresponse.Body.Breakpoints = breakpoints\n\n\ts.send(response)\n}\n\nconst instructionBpPrefix = \"instructionBreakpoint\"\n\nfunc (s *Session) onSetInstructionBreakpointsRequest(request *dap.SetInstructionBreakpointsRequest) {\n\tbreakpoints := s.setBreakpoints(instructionBpPrefix, len(request.Arguments.Breakpoints), func(i int) *bpMetadata {\n\t\twant := request.Arguments.Breakpoints[i]\n\t\treturn &bpMetadata{\n\t\t\tname:         fmt.Sprintf(\"%s PC=%s\", instructionBpPrefix, want.InstructionReference),\n\t\t\tcondition:    want.Condition,\n\t\t\thitCondition: want.HitCondition,\n\t\t\tlogMessage:   \"\",\n\t\t}\n\t}, func(i int) (*bpLocation, error) {\n\t\twant := request.Arguments.Breakpoints[i]\n\t\taddr, err := strconv.ParseInt(want.InstructionReference, 0, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn &bpLocation{addr: uint64(addr)}, nil\n\t})\n\n\tresponse := &dap.SetInstructionBreakpointsResponse{Response: *s.newResponse(request.Request)}\n\tresponse.Body.Breakpoints = breakpoints\n\ts.send(response)\n}\n\nfunc (s *Session) clearBreakpoints(existingBps map[string]*api.Breakpoint, amendedBps map[string]struct{}) error {\n\tfor req, bp := range existingBps {\n\t\tif _, ok := amendedBps[req]; ok {\n\t\t\tcontinue\n\t\t}\n\t\t_, err := s.debugger.ClearBreakpoint(bp)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (s *Session) getMatchingBreakpoints(prefix string) map[string]*api.Breakpoint {\n\texisting := s.debugger.Breakpoints(false)\n\tmatchingBps := make(map[string]*api.Breakpoint, len(existing))\n\tfor _, bp := range existing {\n\t\t// Skip special breakpoints such as for panic.\n\t\tif bp.ID < 0 {\n\t\t\tcontinue\n\t\t}\n\t\t// Skip breakpoints that do not meet the condition.\n\t\tif !strings.HasPrefix(bp.Name, prefix) {\n\t\t\tcontinue\n\t\t}\n\t\tmatchingBps[bp.Name] = bp\n\t}\n\treturn matchingBps\n}\n\nfunc (s *Session) onSetExceptionBreakpointsRequest(request *dap.SetExceptionBreakpointsRequest) {\n\tenabled := make(map[string]bool)\n\tfor _, filter := range request.Arguments.Filters {\n\t\tenabled[filter] = true\n\t}\n\tfor _, bp := range s.debugger.Breakpoints(false) {\n\t\tif bp.ID < 0 && enabled[bp.Name] != !bp.Disabled {\n\t\t\tbp.Disabled = !enabled[bp.Name]\n\t\t\ts.debugger.AmendBreakpoint(bp)\n\t\t}\n\t}\n\tresp := &dap.SetExceptionBreakpointsResponse{Response: *s.newResponse(request.Request)}\n\tfor _, bp := range s.debugger.Breakpoints(false) {\n\t\tif bp.ID < 0 && !bp.Disabled {\n\t\t\tresp.Body.Breakpoints = append(resp.Body.Breakpoints, dap.Breakpoint{})\n\t\t\ts.updateBreakpointsResponse(resp.Body.Breakpoints, len(resp.Body.Breakpoints)-1, nil, bp)\n\t\t}\n\t}\n\ts.send(resp)\n}\n\nfunc closeIfOpen(ch chan struct{}) {\n\tif ch != nil {\n\t\tselect {\n\t\tcase <-ch:\n\t\t\t// already closed\n\t\tdefault:\n\t\t\tclose(ch)\n\t\t}\n\t}\n}\n\n// onConfigurationDoneRequest handles 'configurationDone' request.\n// This is an optional request enabled by capability 'supportsConfigurationDoneRequest'.\n// It gets triggered after all the debug requests that follow initialized event.\n// The debugger should be set by a launch or attach request. Expects the target to be halted.\nfunc (s *Session) onConfigurationDoneRequest(request *dap.ConfigurationDoneRequest, allowNextStateChange *syncflag) {\n\tdefer allowNextStateChange.raise()\n\tif s.args.stopOnEntry {\n\t\te := &dap.StoppedEvent{\n\t\t\tEvent: *s.newEvent(\"stopped\"),\n\t\t\tBody:  dap.StoppedEventBody{Reason: \"entry\", ThreadId: 1, AllThreadsStopped: true},\n\t\t}\n\t\ts.send(e)\n\t}\n\ttgrp, unlock := s.debugger.LockTargetGroup()\n\ttgrp.KeepSteppingBreakpoints = proc.HaltKeepsSteppingBreakpoints | proc.TracepointKeepsSteppingBreakpoints\n\tunlock()\n\n\ts.logToConsole(\"Type 'dlv help' for list of commands.\")\n\ts.send(&dap.ConfigurationDoneResponse{Response: *s.newResponse(request.Request)})\n\n\tif !s.args.stopOnEntry {\n\t\ts.runUntilStopAndNotify(api.Continue, allowNextStateChange)\n\t}\n}\n\n// onContinueRequest handles 'continue' request.\n// This is a mandatory request to support.\nfunc (s *Session) onContinueRequest(request *dap.ContinueRequest, allowNextStateChange *syncflag) {\n\ts.send(&dap.ContinueResponse{\n\t\tResponse: *s.newResponse(request.Request),\n\t\tBody:     dap.ContinueResponseBody{AllThreadsContinued: true},\n\t})\n\ts.runUntilStopAndNotify(api.Continue, allowNextStateChange)\n}\n\nfunc fnName(loc *proc.Location) string {\n\tif loc.Fn == nil {\n\t\treturn \"???\"\n\t}\n\tfullSymbol := loc.Fn.Name\n\tpackagePath := loc.Fn.PackageName()\n\tlastSlash := strings.LastIndex(packagePath, \"/\")\n\tif lastSlash >= 0 {\n\t\t// strip everything until the last slash from the package path\n\t\treturn fullSymbol[lastSlash+1:]\n\t}\n\n\t// We either have no package name at all, or it doesn't contain a slash:\n\t// return name unchanged\n\treturn fullSymbol\n}\n\nfunc fnPackageName(loc *proc.Location) string {\n\tif loc.Fn == nil {\n\t\t// attribute unknown functions to the runtime\n\t\treturn \"runtime\"\n\t}\n\treturn loc.Fn.PackageName()\n}\n\n// onThreadsRequest handles 'threads' request.\n// This is a mandatory request to support.\n// It is sent in response to configurationDone response and stopped events.\n// Depending on the debug session stage, goroutines information\n// might not be available. However, the DAP spec states that\n// \"even if a debug adapter does not support multiple threads,\n// it must implement the threads request and return a single\n// (dummy) thread\". Therefore, this handler never returns\n// an error response. If the dummy thread is returned in its place,\n// the next waterfall request for its stackTrace will return the error.\nfunc (s *Session) onThreadsRequest(request *dap.ThreadsRequest) {\n\tvar err error\n\tvar gs []*proc.G\n\tvar next int\n\tif s.debugger != nil {\n\t\tgs, next, err = s.debugger.Goroutines(0, maxGoroutines)\n\t\tif err == nil {\n\t\t\t// Parse the goroutine arguments.\n\t\t\tfilters, _, _, _, _, _, _, parseErr := api.ParseGoroutineArgs(s.args.GoroutineFilters)\n\t\t\tif parseErr != nil {\n\t\t\t\ts.logToConsole(parseErr.Error())\n\t\t\t}\n\t\t\tif s.args.HideSystemGoroutines {\n\t\t\t\tfilters = append(filters, api.ListGoroutinesFilter{\n\t\t\t\t\tKind:    api.GoroutineUser,\n\t\t\t\t\tNegated: false,\n\t\t\t\t})\n\t\t\t}\n\t\t\tgs = s.debugger.FilterGoroutines(gs, filters)\n\t\t}\n\t}\n\n\tvar threads []dap.Thread\n\tif err != nil {\n\t\tvar errProcessExited proc.ErrProcessExited\n\t\tswitch {\n\t\tcase errors.As(err, &errProcessExited):\n\t\t\t// If the program exits very quickly, the initial threads request will complete after it has exited.\n\t\t\t// A TerminatedEvent has already been sent. Ignore the error returned in this case.\n\t\t\ts.config.log.Debug(errProcessExited)\n\t\tdefault:\n\t\t\ts.send(&dap.OutputEvent{\n\t\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\t\tBody: dap.OutputEventBody{\n\t\t\t\t\tOutput:   fmt.Sprintf(\"Unable to retrieve goroutines: %s\\n\", err.Error()),\n\t\t\t\t\tCategory: \"stderr\",\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\tthreads = []dap.Thread{{Id: 1, Name: \"Dummy\"}}\n\t} else if len(gs) == 0 {\n\t\tthreads = []dap.Thread{{Id: 1, Name: \"Dummy\"}}\n\t} else {\n\t\tstate, err := s.debugger.State( /*nowait*/ true)\n\t\tif err != nil {\n\t\t\ts.config.log.Debug(\"Unable to get debugger state: \", err)\n\t\t}\n\n\t\tif next >= 0 {\n\t\t\ts.logToConsole(fmt.Sprintf(\"Too many goroutines, only loaded %d\", len(gs)))\n\n\t\t\t// Make sure the selected goroutine is included in the list of threads\n\t\t\t// to return.\n\t\t\tif state != nil && state.SelectedGoroutine != nil {\n\t\t\t\tvar selectedFound bool\n\t\t\t\tfor _, g := range gs {\n\t\t\t\t\tif g.ID == state.SelectedGoroutine.ID {\n\t\t\t\t\t\tselectedFound = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif !selectedFound {\n\t\t\t\t\tg, err := s.debugger.FindGoroutine(state.SelectedGoroutine.ID)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\ts.config.log.Debug(\"Error getting selected goroutine: \", err)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// TODO(suzmue): Consider putting the selected goroutine at the top.\n\t\t\t\t\t\t// To be consistent we may want to do this for all threads requests.\n\t\t\t\t\t\tgs = append(gs, g)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthreads = make([]dap.Thread, len(gs))\n\t\t_, unlock := s.debugger.LockTargetGroup()\n\t\tdefer unlock()\n\n\t\tfor i, g := range gs {\n\t\t\tselected := \"\"\n\t\t\tif state != nil && state.SelectedGoroutine != nil && g.ID == state.SelectedGoroutine.ID {\n\t\t\t\tselected = \"* \"\n\t\t\t}\n\t\t\tthread := \"\"\n\t\t\tif g.Thread != nil && g.Thread.ThreadID() != 0 {\n\t\t\t\tthread = fmt.Sprintf(\" (Thread %d)\", g.Thread.ThreadID())\n\t\t\t}\n\t\t\tvar labels strings.Builder\n\t\t\twriteLabelsForKeys := func(keys []string) {\n\t\t\t\tfor _, k := range keys {\n\t\t\t\t\tlabelValue := g.Labels()[k]\n\t\t\t\t\tif labelValue != \"\" {\n\t\t\t\t\t\tlabels.WriteByte(' ')\n\t\t\t\t\t\tlabels.WriteString(k)\n\t\t\t\t\t\tlabels.WriteByte(':')\n\t\t\t\t\t\tlabels.WriteString(labelValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(s.args.ShowPprofLabels) == 1 {\n\t\t\t\tlabelKey := s.args.ShowPprofLabels[0]\n\t\t\t\tif labelKey == \"*\" {\n\t\t\t\t\tkeys := make([]string, 0, len(g.Labels()))\n\t\t\t\t\tfor k := range g.Labels() {\n\t\t\t\t\t\tkeys = append(keys, k)\n\t\t\t\t\t}\n\t\t\t\t\tsort.Strings(keys)\n\t\t\t\t\twriteLabelsForKeys(keys)\n\t\t\t\t} else {\n\t\t\t\t\tlabelValue := g.Labels()[labelKey]\n\t\t\t\t\tif labelValue != \"\" {\n\t\t\t\t\t\tlabels.WriteByte(' ')\n\t\t\t\t\t\tlabels.WriteString(labelValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twriteLabelsForKeys(s.args.ShowPprofLabels)\n\t\t\t}\n\t\t\tif g.Unreadable != nil {\n\t\t\t\tthreads[i].Name = fmt.Sprintf(\"%s Unreadable goroutine: %v\", selected, g.Unreadable)\n\t\t\t} else {\n\t\t\t\t// File name and line number are communicated via `stackTrace`\n\t\t\t\t// so no need to include them here.\n\t\t\t\tloc := g.UserCurrent()\n\t\t\t\tthreads[i].Name = fmt.Sprintf(\"%s[Go %d%s] %s%s\", selected, g.ID, labels.String(), fnName(&loc), thread)\n\t\t\t\tthreads[i].Id = int(g.ID)\n\t\t\t}\n\t\t}\n\t}\n\n\tresponse := &dap.ThreadsResponse{\n\t\tResponse: *s.newResponse(request.Request),\n\t\tBody:     dap.ThreadsResponseBody{Threads: threads},\n\t}\n\ts.send(response)\n}\n\n// onAttachRequest handles 'attach' request.\n// This is a mandatory request to support.\n// Attach debug sessions support the following modes:\n//\n//   - [DEFAULT] \"local\" -- attaches debugger to a local running process.\n//     Required args: processID\n//   - \"remote\" -- attaches client to a debugger already attached to a process.\n//     Required args: none (host/port are used externally to connect)\nfunc (s *Session) onAttachRequest(request *dap.AttachRequest) {\n\targs := defaultAttachConfig // narrow copy for initializing non-zero default values\n\tif err := unmarshalLaunchAttachArgs(request.Arguments, &args); err != nil {\n\t\ts.sendShowUserErrorResponse(request.Request, FailedToAttach, \"Failed to attach\", fmt.Sprintf(\"invalid debug configuration - %v\", err))\n\t\treturn\n\t}\n\ts.config.log.Debug(\"parsed launch config: \", prettyPrint(args))\n\n\tif args.FollowExec {\n\t\ts.send(&dap.OutputEvent{\n\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\tBody: dap.OutputEventBody{\n\t\t\t\tOutput:   \"Follow exec not supported in attach request yet.\",\n\t\t\t\tCategory: \"important\",\n\t\t\t},\n\t\t})\n\t}\n\n\tswitch args.Mode {\n\tcase \"\":\n\t\targs.Mode = \"local\"\n\t\tfallthrough\n\tcase \"local\":\n\t\tif s.debugger != nil {\n\t\t\ts.sendShowUserErrorResponse(\n\t\t\t\trequest.Request, FailedToAttach,\n\t\t\t\t\"Failed to attach\",\n\t\t\t\tfmt.Sprintf(\"debug session already in progress at %s - use remote mode to connect to a server with an active debug session\", s.address()))\n\t\t\treturn\n\t\t}\n\t\tif args.AttachWaitFor != \"\" && args.ProcessID != 0 {\n\t\t\ts.sendShowUserErrorResponse(\n\t\t\t\trequest.Request,\n\t\t\t\tFailedToAttach,\n\t\t\t\t\"Failed to attach\",\n\t\t\t\t\"'processId' and 'waitFor' are mutually exclusive, and can't be specified at the same time\")\n\t\t\treturn\n\t\t} else if args.AttachWaitFor != \"\" {\n\t\t\ts.config.Debugger.AttachWaitFor = args.AttachWaitFor\n\t\t\t// Keep the default value the same as waitfor-interval.\n\t\t\ts.config.Debugger.AttachWaitForInterval = 1\n\t\t\ts.config.log.Debugf(\"Waiting for a process with a name beginning with this prefix: %s\", args.AttachWaitFor)\n\t\t} else if args.ProcessID != 0 {\n\t\t\ts.config.Debugger.AttachPid = args.ProcessID\n\t\t\ts.config.log.Debugf(\"Attaching to pid %d\", args.ProcessID)\n\t\t} else {\n\t\t\ts.sendShowUserErrorResponse(\n\t\t\t\trequest.Request,\n\t\t\t\tFailedToAttach,\n\t\t\t\t\"Failed to attach\",\n\t\t\t\t\"The 'processId' or 'waitFor' attribute is missing in debug configuration\")\n\t\t\treturn\n\t\t}\n\t\tif args.Backend == \"\" {\n\t\t\targs.Backend = \"default\"\n\t\t}\n\t\ts.config.Debugger.Backend = args.Backend\n\t\tvar err error\n\t\tfunc() {\n\t\t\ts.mu.Lock()\n\t\t\tdefer s.mu.Unlock() // Make sure to unlock in case of panic that will become internal error\n\t\t\ts.debugger, err = debugger.New(&s.config.Debugger, nil)\n\t\t}()\n\t\tif err != nil {\n\t\t\ts.sendShowUserErrorResponse(request.Request, FailedToAttach, \"Failed to attach\", err.Error())\n\t\t\treturn\n\t\t}\n\t\t// Give the user an option to terminate debuggee when client disconnects (default is to leave it)\n\t\ts.send(&dap.CapabilitiesEvent{Event: *s.newEvent(\"capabilities\"), Body: dap.CapabilitiesEventBody{Capabilities: dap.Capabilities{SupportTerminateDebuggee: true}}})\n\tcase \"remote\":\n\t\tif s.debugger == nil {\n\t\t\ts.sendShowUserErrorResponse(request.Request, FailedToAttach, \"Failed to attach\", \"no debugger found\")\n\t\t\treturn\n\t\t}\n\t\ts.config.log.Debug(\"debugger already started\")\n\t\t// Halt for configuration sequence. onConfigurationDone will restart\n\t\t// execution if user requested !stopOnEntry.\n\t\ts.changeStateMu.Lock()\n\t\tdefer s.changeStateMu.Unlock()\n\t\tif _, err := s.halt(); err != nil {\n\t\t\ts.sendShowUserErrorResponse(request.Request, FailedToAttach, \"Failed to attach\", err.Error())\n\t\t\treturn\n\t\t}\n\t\t// Enable StepBack controls on supported backends\n\t\tif s.config.Debugger.Backend == \"rr\" {\n\t\t\ts.send(&dap.CapabilitiesEvent{Event: *s.newEvent(\"capabilities\"), Body: dap.CapabilitiesEventBody{Capabilities: dap.Capabilities{SupportsStepBack: true}}})\n\t\t}\n\t\t// Customize termination options for debugger and debuggee\n\t\tif s.config.AcceptMulti {\n\t\t\t// User can stop debugger with process or leave it running\n\t\t\ts.send(&dap.CapabilitiesEvent{Event: *s.newEvent(\"capabilities\"), Body: dap.CapabilitiesEventBody{Capabilities: dap.Capabilities{SupportTerminateDebuggee: true}}})\n\t\t\t// TODO(polina): support SupportSuspendDebuggee when available\n\t\t} else if s.config.Debugger.AttachPid > 0 {\n\t\t\t// User can stop debugger with process or leave the process running\n\t\t\ts.send(&dap.CapabilitiesEvent{Event: *s.newEvent(\"capabilities\"), Body: dap.CapabilitiesEventBody{Capabilities: dap.Capabilities{SupportTerminateDebuggee: true}}})\n\t\t} // else program was launched and the only option will be to stop both\n\tdefault:\n\t\ts.sendShowUserErrorResponse(request.Request, FailedToAttach, \"Failed to attach\",\n\t\t\tfmt.Sprintf(\"invalid debug configuration - unsupported 'mode' attribute %q\", args.Mode))\n\t\treturn\n\t}\n\n\ts.setLaunchAttachArgs(args.LaunchAttachCommonConfig)\n\n\tif len(args.LaunchAttachCommonConfig.SubstitutePath) == 0 && args.GuessSubstitutePath != nil && s.debugger != nil {\n\t\tserver2Client := s.debugger.GuessSubstitutePath(args.GuessSubstitutePath)\n\t\tclientToServer := make([][2]string, 0, len(server2Client))\n\t\tserverToClient := make([][2]string, 0, len(server2Client))\n\t\tfor serverDir, clientDir := range server2Client {\n\t\t\tserverToClient = append(serverToClient, [2]string{serverDir, clientDir})\n\t\t\tclientToServer = append(clientToServer, [2]string{clientDir, serverDir})\n\t\t}\n\t\ts.args.substitutePathClientToServer = clientToServer\n\t\ts.args.substitutePathServerToClient = serverToClient\n\t}\n\n\t// Notify the client that the debugger is ready to start accepting\n\t// configuration requests for setting breakpoints, etc. The client\n\t// will end the configuration sequence with 'configurationDone'.\n\ts.send(&dap.InitializedEvent{Event: *s.newEvent(\"initialized\")})\n\ts.send(&dap.AttachResponse{Response: *s.newResponse(request.Request)})\n\ts.warnAboutTrimpathMaybe()\n}\n\nfunc (s *Session) warnAboutTrimpathMaybe() {\n\timgs := s.debugger.ListDynamicLibraries()\n\tif imgs[0].Trimpath {\n\t\ts.send(&dap.OutputEvent{\n\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\tBody: dap.OutputEventBody{\n\t\t\t\tCategory: \"important\",\n\t\t\t\tOutput:   \"Warning: debugging executable built with trimpath\",\n\t\t\t},\n\t\t})\n\t}\n}\n\n// onNextRequest handles 'next' request.\n// This is a mandatory request to support.\nfunc (s *Session) onNextRequest(request *dap.NextRequest, allowNextStateChange *syncflag) {\n\ts.sendStepResponse(request.Arguments.ThreadId, &dap.NextResponse{Response: *s.newResponse(request.Request)})\n\ts.stepUntilStopAndNotify(api.Next, request.Arguments.ThreadId, request.Arguments.Granularity, allowNextStateChange)\n}\n\n// onStepInRequest handles 'stepIn' request\n// This is a mandatory request to support.\nfunc (s *Session) onStepInRequest(request *dap.StepInRequest, allowNextStateChange *syncflag) {\n\ts.sendStepResponse(request.Arguments.ThreadId, &dap.StepInResponse{Response: *s.newResponse(request.Request)})\n\ts.stepUntilStopAndNotify(api.Step, request.Arguments.ThreadId, request.Arguments.Granularity, allowNextStateChange)\n}\n\n// onStepOutRequest handles 'stepOut' request\n// This is a mandatory request to support.\nfunc (s *Session) onStepOutRequest(request *dap.StepOutRequest, allowNextStateChange *syncflag) {\n\ts.sendStepResponse(request.Arguments.ThreadId, &dap.StepOutResponse{Response: *s.newResponse(request.Request)})\n\ts.stepUntilStopAndNotify(api.StepOut, request.Arguments.ThreadId, request.Arguments.Granularity, allowNextStateChange)\n}\n\nfunc (s *Session) sendStepResponse(threadId int, message dap.Message) {\n\t// All the threads will be continued by this request, so we need to send\n\t// a continued event so the UI can properly reflect the current state.\n\ts.send(&dap.ContinuedEvent{\n\t\tEvent: *s.newEvent(\"continued\"),\n\t\tBody: dap.ContinuedEventBody{\n\t\t\tThreadId:            threadId,\n\t\t\tAllThreadsContinued: true,\n\t\t},\n\t})\n\ts.send(message)\n}\n\nfunc stoppedGoroutineID(state *api.DebuggerState) (id int64) {\n\tif state.SelectedGoroutine != nil {\n\t\tid = state.SelectedGoroutine.ID\n\t} else if state.CurrentThread != nil {\n\t\tid = state.CurrentThread.GoroutineID\n\t}\n\treturn id\n}\n\n// stoppedOnBreakpointGoroutineID gets the goroutine id of the first goroutine\n// that is stopped on a real breakpoint, starting with the selected goroutine.\nfunc (s *Session) stoppedOnBreakpointGoroutineID(state *api.DebuggerState) (int64, *api.Breakpoint) {\n\t// Use the first goroutine that is stopped on a breakpoint.\n\tgs := s.stoppedGs(state)\n\tif len(gs) == 0 {\n\t\treturn 0, nil\n\t}\n\tgoid := gs[0]\n\tif goid == 0 {\n\t\treturn goid, state.CurrentThread.Breakpoint\n\t}\n\tg, _ := s.debugger.FindGoroutine(goid)\n\tif g == nil || g.Thread == nil {\n\t\treturn goid, nil\n\t}\n\tbp := g.Thread.Breakpoint()\n\tif bp == nil || bp.Breakpoint == nil || bp.Breakpoint.Logical == nil {\n\t\treturn goid, nil\n\t}\n\tabp := api.ConvertLogicalBreakpoint(bp.Breakpoint.Logical)\n\tapi.ConvertPhysicalBreakpoints(abp, bp.Breakpoint.Logical, []int{0}, []*proc.Breakpoint{bp.Breakpoint})\n\treturn goid, abp\n}\n\n// stepUntilStopAndNotify is a wrapper around runUntilStopAndNotify that\n// first switches selected goroutine. allowNextStateChange is\n// a channel that will be closed to signal that an\n// asynchronous command has completed setup or was interrupted\n// due to an error, so the server is ready to receive new requests.\nfunc (s *Session) stepUntilStopAndNotify(command string, threadId int, granularity dap.SteppingGranularity, allowNextStateChange *syncflag) {\n\tdefer allowNextStateChange.raise()\n\t_, err := s.debugger.Command(&api.DebuggerCommand{Name: api.SwitchGoroutine, GoroutineID: int64(threadId)}, nil, s.conn.closedChan, nil)\n\tif err != nil {\n\t\ts.config.log.Errorf(\"Error switching goroutines while stepping: %v\", err)\n\t\t// If we encounter an error, we will have to send a stopped event\n\t\t// since we already sent the step response.\n\t\tstopped := &dap.StoppedEvent{Event: *s.newEvent(\"stopped\")}\n\t\tstopped.Body.AllThreadsStopped = true\n\t\tif state, err := s.debugger.State(false); err != nil {\n\t\t\ts.config.log.Errorf(\"Error retrieving state: %e\", err)\n\t\t} else {\n\t\t\tstopped.Body.ThreadId = int(stoppedGoroutineID(state))\n\t\t}\n\t\tstopped.Body.Reason = \"error\"\n\t\tstopped.Body.Text = err.Error()\n\t\ts.send(stopped)\n\t\treturn\n\t}\n\n\tif granularity == \"instruction\" {\n\t\tswitch command {\n\t\tcase api.ReverseNext:\n\t\t\tcommand = api.ReverseStepInstruction\n\t\tdefault:\n\t\t\t// TODO(suzmue): consider differentiating between next, step in, and step out.\n\t\t\t// For example, next could step over call requests.\n\t\t\tcommand = api.StepInstruction\n\t\t}\n\t}\n\ts.runUntilStopAndNotify(command, allowNextStateChange)\n}\n\n// onPauseRequest handles 'pause' request.\n// This is a mandatory request to support.\nfunc (s *Session) onPauseRequest(request *dap.PauseRequest) {\n\tif s.debugger.CancelDownloads() {\n\t\treturn\n\t}\n\ts.changeStateMu.Lock()\n\tdefer s.changeStateMu.Unlock()\n\ts.setHaltRequested(true)\n\t_, err := s.halt()\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToHalt, \"Unable to halt execution\", err.Error())\n\t\treturn\n\t}\n\ts.send(&dap.PauseResponse{Response: *s.newResponse(request.Request)})\n\t// No need to send any event here.\n\t// If we received this request while stopped, there already was an event for the stop.\n\t// If we received this while running, then doCommand will unblock and trigger the right\n\t// event, using debugger.StopReason because manual stop reason always wins even if we\n\t// simultaneously receive a manual stop request and hit a breakpoint.\n}\n\n// stackFrame represents the index of a frame within\n// the context of a stack of a specific goroutine.\ntype stackFrame struct {\n\tgoroutineID int\n\tframeIndex  int\n}\n\n// onStackTraceRequest handles 'stackTrace' requests.\n// This is a mandatory request to support.\n// As per DAP spec, this request only gets triggered as a follow-up\n// to a successful threads request as part of the \"request waterfall\".\nfunc (s *Session) onStackTraceRequest(request *dap.StackTraceRequest) {\n\tif s.debugger == nil {\n\t\ts.sendErrorResponse(request.Request, UnableToProduceStackTrace, \"Unable to produce stack trace\", \"debugger is nil\")\n\t\treturn\n\t}\n\n\tgoroutineID := request.Arguments.ThreadId\n\tstart := max(request.Arguments.StartFrame, 0)\n\tlevels := s.args.StackTraceDepth\n\tif request.Arguments.Levels > 0 {\n\t\tlevels = request.Arguments.Levels\n\t}\n\n\t// Since the backend doesn't support paging, we load all frames up to\n\t// the requested depth and then slice them here per\n\t// `supportsDelayedStackTraceLoading` capability.\n\tframes, err := s.debugger.Stacktrace(int64(goroutineID), start+levels-1, 0)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToProduceStackTrace, \"Unable to produce stack trace\", err.Error())\n\t\treturn\n\t}\n\n\t// Determine if the goroutine is a system goroutine.\n\tisSystemGoroutine := true\n\tif g, _ := s.debugger.FindGoroutine(int64(goroutineID)); g != nil {\n\t\ttgrp, unlock := s.debugger.LockTargetGroup()\n\t\tisSystemGoroutine = g.System(tgrp.Selected)\n\t\tunlock()\n\t}\n\n\tstackFrames := []dap.StackFrame{} // initialize to empty, since nil is not an accepted response.\n\tfor i := 0; i < levels && i+start < len(frames); i++ {\n\t\tframe := frames[start+i]\n\t\tloc := &frame.Call\n\t\tuniqueStackFrameID := s.stackFrameHandles.create(stackFrame{goroutineID, start + i})\n\t\tstackFrame := dap.StackFrame{Id: uniqueStackFrameID, Line: loc.Line, Name: fnName(loc), InstructionPointerReference: fmt.Sprintf(\"%#x\", loc.PC)}\n\t\tif loc.File != \"<autogenerated>\" {\n\t\t\tclientPath := s.toClientPath(loc.File)\n\t\t\tstackFrame.Source = &dap.Source{Name: filepath.Base(clientPath), Path: clientPath}\n\t\t}\n\t\tstackFrame.Column = 0\n\n\t\tpackageName := fnPackageName(loc)\n\t\tif !isSystemGoroutine && packageName == \"runtime\" {\n\t\t\tstackFrame.PresentationHint = \"subtle\"\n\t\t}\n\t\tstackFrames = append(stackFrames, stackFrame)\n\t}\n\n\ttotalFrames := len(frames)\n\tif len(frames) >= start+levels && !frames[len(frames)-1].Bottom {\n\t\t// We don't know the exact number of available stack frames, so\n\t\t// add an arbitrary number so the client knows to request additional\n\t\t// frames.\n\t\ttotalFrames += s.args.StackTraceDepth\n\t}\n\tresponse := &dap.StackTraceResponse{\n\t\tResponse: *s.newResponse(request.Request),\n\t\tBody:     dap.StackTraceResponseBody{StackFrames: stackFrames, TotalFrames: totalFrames},\n\t}\n\ts.send(response)\n}\n\n// onScopesRequest handles 'scopes' requests.\n// This is a mandatory request to support.\n// It is automatically sent as part of the threads > stacktrace > scopes > variables\n// \"waterfall\" to highlight the topmost frame at stops, after an evaluate request\n// for the selected scope or when a user selects different scopes in the UI.\nfunc (s *Session) onScopesRequest(request *dap.ScopesRequest) {\n\tsf, ok := s.stackFrameHandles.get(request.Arguments.FrameId)\n\tif !ok {\n\t\ts.sendErrorResponse(request.Request, UnableToListLocals, \"Unable to list locals\", fmt.Sprintf(\"unknown frame id %d\", request.Arguments.FrameId))\n\t\treturn\n\t}\n\n\tgoid := sf.goroutineID\n\tframe := sf.frameIndex\n\n\t// Check if the function is optimized.\n\tfn, err := s.debugger.Function(int64(goid), frame, 0)\n\tif fn == nil || err != nil {\n\t\tvar details string\n\t\tif err != nil {\n\t\t\tdetails = err.Error()\n\t\t}\n\t\ts.sendErrorResponse(request.Request, UnableToListArgs, \"Unable to find enclosing function\", details)\n\t\treturn\n\t}\n\tsuffix := \"\"\n\tif fn.Optimized() {\n\t\tsuffix = \" (warning: optimized function)\"\n\t}\n\t// Retrieve arguments\n\targs, err := s.debugger.FunctionArguments(int64(goid), frame, 0, DefaultLoadConfig)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToListArgs, \"Unable to list args\", err.Error())\n\t\treturn\n\t}\n\n\t// Retrieve local variables\n\tlocals, err := s.debugger.LocalVariables(int64(goid), frame, 0, DefaultLoadConfig)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToListLocals, \"Unable to list locals\", err.Error())\n\t\treturn\n\t}\n\tlocScope := &fullyQualifiedVariable{&proc.Variable{Name: fmt.Sprintf(\"Locals%s\", suffix), Children: slicePtrVarToSliceVar(append(args, locals...))}, \"\", true, 0}\n\tscopeLocals := dap.Scope{Name: locScope.Name, VariablesReference: s.variableHandles.create(locScope)}\n\tscopes := []dap.Scope{scopeLocals}\n\n\tif s.args.ShowGlobalVariables {\n\t\t// Limit what global variables we will return to the current package only.\n\t\t// TODO(polina): This is how vscode-go currently does it to make\n\t\t// the amount of the returned data manageable. In fact, this is\n\t\t// considered so expensive even with the package filter, that\n\t\t// the default for showGlobalVariables was recently flipped to\n\t\t// not showing. If we delay loading of the globals until the corresponding\n\t\t// scope is expanded, generating an explicit variable request,\n\t\t// should we consider making all globals accessible with a scope per package?\n\t\t// Or users can just rely on watch variables.\n\t\tcurrPkg, err := s.debugger.CurrentPackage()\n\t\tif err != nil {\n\t\t\ts.sendErrorResponse(request.Request, UnableToListGlobals, \"Unable to list globals\", err.Error())\n\t\t\treturn\n\t\t}\n\t\tcurrPkgFilter := fmt.Sprintf(\"^%s\\\\.\", currPkg)\n\t\tglobals, err := s.debugger.PackageVariables(currPkgFilter, DefaultLoadConfig)\n\t\tif err != nil {\n\t\t\ts.sendErrorResponse(request.Request, UnableToListGlobals, \"Unable to list globals\", err.Error())\n\t\t\treturn\n\t\t}\n\t\t// Remove package prefix from the fully-qualified variable names.\n\t\t// We will include the package info once in the name of the scope instead.\n\t\tfor i, g := range globals {\n\t\t\tglobals[i].Name = strings.TrimPrefix(g.Name, currPkg+\".\")\n\t\t}\n\n\t\tglobScope := &fullyQualifiedVariable{&proc.Variable{\n\t\t\tName:     fmt.Sprintf(\"Globals (package %s)\", currPkg),\n\t\t\tChildren: slicePtrVarToSliceVar(globals),\n\t\t}, currPkg, true, 0}\n\t\tscopeGlobals := dap.Scope{Name: globScope.Name, VariablesReference: s.variableHandles.create(globScope)}\n\t\tscopes = append(scopes, scopeGlobals)\n\t}\n\n\tif s.args.ShowRegisters {\n\t\t// Retrieve registers\n\t\tregs, dwarfRegsiterToString, err := s.debugger.ScopeRegisters(int64(goid), frame, 0)\n\t\tif err != nil {\n\t\t\ts.sendErrorResponse(request.Request, UnableToListRegisters, \"Unable to list registers\", err.Error())\n\t\t\treturn\n\t\t}\n\t\toutRegs := api.ConvertRegisters(regs, dwarfRegsiterToString, false)\n\t\tregsVar := make([]proc.Variable, len(outRegs))\n\t\tfor i, r := range outRegs {\n\t\t\tregsVar[i] = proc.Variable{\n\t\t\t\tName:  r.Name,\n\t\t\t\tValue: constant.MakeString(r.Value),\n\t\t\t\tKind:  reflect.Kind(proc.VariableConstant),\n\t\t\t}\n\t\t}\n\t\tregsScope := &fullyQualifiedVariable{&proc.Variable{Name: \"Registers\", Children: regsVar}, \"\", true, 0}\n\t\tscopeRegisters := dap.Scope{Name: regsScope.Name, VariablesReference: s.variableHandles.create(regsScope)}\n\t\tscopes = append(scopes, scopeRegisters)\n\t}\n\tresponse := &dap.ScopesResponse{\n\t\tResponse: *s.newResponse(request.Request),\n\t\tBody:     dap.ScopesResponseBody{Scopes: scopes},\n\t}\n\ts.send(response)\n}\n\nfunc slicePtrVarToSliceVar(vars []*proc.Variable) []proc.Variable {\n\tr := make([]proc.Variable, len(vars))\n\tfor i := range vars {\n\t\tr[i] = *vars[i]\n\t}\n\treturn r\n}\n\n// onVariablesRequest handles 'variables' requests.\n// This is a mandatory request to support.\nfunc (s *Session) onVariablesRequest(request *dap.VariablesRequest) {\n\tref := request.Arguments.VariablesReference\n\tv, ok := s.variableHandles.get(ref)\n\tif !ok {\n\t\ts.sendErrorResponse(request.Request, UnableToLookupVariable, \"Unable to lookup variable\", fmt.Sprintf(\"unknown reference %d\", ref))\n\t\treturn\n\t}\n\n\t// If there is a filter applied, we will need to create a new variable that includes\n\t// the values actually needed to load. This cannot be done when loading the parent\n\t// node, since it is unknown at that point which children will need to be loaded.\n\tif request.Arguments.Filter == \"indexed\" {\n\t\tvar err error\n\t\tv, err = s.maybeLoadResliced(v, request.Arguments.Start, request.Arguments.Count)\n\t\tif err != nil {\n\t\t\ts.sendErrorResponse(request.Request, UnableToLookupVariable, \"Unable to lookup variable\", err.Error())\n\t\t\treturn\n\t\t}\n\t}\n\n\tchildren := []dap.Variable{} // must return empty array, not null, if no children\n\tif request.Arguments.Filter == \"named\" || request.Arguments.Filter == \"\" {\n\t\tnamed, err := s.metadataToDAPVariables(v)\n\t\tif err != nil {\n\t\t\ts.sendErrorResponse(request.Request, UnableToLookupVariable, \"Unable to lookup variable\", err.Error())\n\t\t\treturn\n\t\t}\n\t\tchildren = append(children, named...)\n\t}\n\tif request.Arguments.Filter == \"indexed\" || request.Arguments.Filter == \"\" {\n\t\tindexed := s.childrenToDAPVariables(v)\n\t\tchildren = append(children, indexed...)\n\t}\n\tresponse := &dap.VariablesResponse{\n\t\tResponse: *s.newResponse(request.Request),\n\t\tBody:     dap.VariablesResponseBody{Variables: children},\n\t}\n\ts.send(response)\n}\n\nfunc (s *Session) maybeLoadResliced(v *fullyQualifiedVariable, start, count int) (*fullyQualifiedVariable, error) {\n\tif start == 0 {\n\t\twant := count\n\t\tif v.Kind == reflect.Map {\n\t\t\t// For maps, we need to have 2*count children since each key-value pair is two variables.\n\t\t\twant *= 2\n\t\t}\n\t\tif want == len(v.Children) {\n\t\t\t// If we have already loaded the correct children,\n\t\t\t// just return the variable.\n\t\t\treturn v, nil\n\t\t}\n\t}\n\tindexedLoadConfig := DefaultLoadConfig\n\tindexedLoadConfig.MaxArrayValues = count\n\tnewV, err := s.debugger.LoadResliced(v.Variable, start, indexedLoadConfig)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &fullyQualifiedVariable{newV, v.fullyQualifiedNameOrExpr, false, start}, nil\n}\n\n// getIndexedVariableCount returns the number of indexed variables\n// for a DAP variable. For maps this may be less than the actual\n// number of children returned, since a key-value pair may be split\n// into two separate children.\nfunc getIndexedVariableCount(v *proc.Variable) int {\n\tindexedVars := 0\n\tswitch v.Kind {\n\tcase reflect.Array, reflect.Slice, reflect.Map:\n\t\tindexedVars = int(v.Len)\n\t}\n\treturn indexedVars\n}\n\n// childrenToDAPVariables returns the DAP presentation of the referenced variable's children.\nfunc (s *Session) childrenToDAPVariables(v *fullyQualifiedVariable) []dap.Variable {\n\t// TODO(polina): consider convertVariableToString instead of convertVariable\n\t// and avoid unnecessary creation of variable handles when this is called to\n\t// compute evaluate names when this is called from onSetVariableRequest.\n\tchildren := []dap.Variable{} // must return empty array, not null, if no children\n\n\tswitch v.Kind {\n\tcase reflect.Map:\n\t\tfor i := 0; i < len(v.Children); i += 2 {\n\t\t\t// A map will have twice as many children as there are key-value elements.\n\t\t\tkvIndex := i / 2\n\t\t\t// Process children in pairs: even indices are map keys, odd indices are values.\n\t\t\tkeyv, valv := &v.Children[i], &v.Children[i+1]\n\t\t\tkeyexpr := fmt.Sprintf(\"(*(*%q)(%#x))\", keyv.TypeString(), keyv.Addr)\n\t\t\tvalexpr := fmt.Sprintf(\"%s[%s]\", v.fullyQualifiedNameOrExpr, keyexpr)\n\t\t\tswitch keyv.Kind {\n\t\t\t// For value expression, use the key value, not the corresponding expression if the key is a scalar.\n\t\t\tcase reflect.Bool, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128,\n\t\t\t\treflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,\n\t\t\t\treflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\t\t\tvalexpr = fmt.Sprintf(\"%s[%s]\", v.fullyQualifiedNameOrExpr, api.VariableValueAsString(keyv))\n\t\t\tcase reflect.String:\n\t\t\t\tif keyv.Unreadable == nil {\n\t\t\t\t\tif key := constant.StringVal(keyv.Value); keyv.Len == int64(len(key)) { // fully loaded\n\t\t\t\t\t\tvalexpr = fmt.Sprintf(\"%s[%q]\", v.fullyQualifiedNameOrExpr, key)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tkey, keyref := s.convertVariable(keyv, keyexpr)\n\t\t\tval, valref := s.convertVariable(valv, valexpr)\n\t\t\tkeyType := s.getTypeIfSupported(keyv)\n\t\t\tvalType := s.getTypeIfSupported(valv)\n\t\t\t// If key or value or both are scalars, we can use\n\t\t\t// a single variable to represent key:value format.\n\t\t\t// Otherwise, we must return separate variables for both.\n\t\t\tif keyref > 0 && valref > 0 { // Both are not scalars\n\t\t\t\tkeyvar := dap.Variable{\n\t\t\t\t\tName:               fmt.Sprintf(\"[key %d]\", v.startIndex+kvIndex),\n\t\t\t\t\tEvaluateName:       keyexpr,\n\t\t\t\t\tType:               keyType,\n\t\t\t\t\tValue:              key,\n\t\t\t\t\tVariablesReference: keyref,\n\t\t\t\t\tIndexedVariables:   getIndexedVariableCount(keyv),\n\t\t\t\t\tNamedVariables:     getNamedVariableCount(keyv),\n\t\t\t\t}\n\t\t\t\tvalvar := dap.Variable{\n\t\t\t\t\tName:               fmt.Sprintf(\"[val %d]\", v.startIndex+kvIndex),\n\t\t\t\t\tEvaluateName:       valexpr,\n\t\t\t\t\tType:               valType,\n\t\t\t\t\tValue:              val,\n\t\t\t\t\tVariablesReference: valref,\n\t\t\t\t\tIndexedVariables:   getIndexedVariableCount(valv),\n\t\t\t\t\tNamedVariables:     getNamedVariableCount(valv),\n\t\t\t\t}\n\t\t\t\tchildren = append(children, keyvar, valvar)\n\t\t\t} else { // At least one is a scalar\n\t\t\t\tkeyValType := valType\n\t\t\t\tif len(keyType) > 0 && len(valType) > 0 {\n\t\t\t\t\tkeyValType = fmt.Sprintf(\"%s: %s\", keyType, valType)\n\t\t\t\t}\n\t\t\t\tkvvar := dap.Variable{\n\t\t\t\t\tName:         key,\n\t\t\t\t\tEvaluateName: valexpr,\n\t\t\t\t\tType:         keyValType,\n\t\t\t\t\tValue:        val,\n\t\t\t\t}\n\t\t\t\tif keyref != 0 { // key is a type to be expanded\n\t\t\t\t\tif len(key) > maxMapKeyValueLen {\n\t\t\t\t\t\t// Truncate and make unique\n\t\t\t\t\t\tkvvar.Name = fmt.Sprintf(\"%s... @ %#x\", key[0:maxMapKeyValueLen], keyv.Addr)\n\t\t\t\t\t}\n\t\t\t\t\tkvvar.VariablesReference = keyref\n\t\t\t\t\tkvvar.IndexedVariables = getIndexedVariableCount(keyv)\n\t\t\t\t\tkvvar.NamedVariables = getNamedVariableCount(keyv)\n\t\t\t\t} else if valref != 0 { // val is a type to be expanded\n\t\t\t\t\tkvvar.VariablesReference = valref\n\t\t\t\t\tkvvar.IndexedVariables = getIndexedVariableCount(valv)\n\t\t\t\t\tkvvar.NamedVariables = getNamedVariableCount(valv)\n\t\t\t\t}\n\t\t\t\tchildren = append(children, kvvar)\n\t\t\t}\n\t\t}\n\tcase reflect.Slice, reflect.Array:\n\t\tchildren = make([]dap.Variable, len(v.Children))\n\t\tfor i := range v.Children {\n\t\t\tidx := v.startIndex + i\n\t\t\tcfqname := fmt.Sprintf(\"%s[%d]\", v.fullyQualifiedNameOrExpr, idx)\n\t\t\tcvalue, cvarref := s.convertVariable(&v.Children[i], cfqname)\n\t\t\tchildren[i] = dap.Variable{\n\t\t\t\tName:               fmt.Sprintf(\"[%d]\", idx),\n\t\t\t\tEvaluateName:       cfqname,\n\t\t\t\tType:               s.getTypeIfSupported(&v.Children[i]),\n\t\t\t\tValue:              cvalue,\n\t\t\t\tVariablesReference: cvarref,\n\t\t\t\tIndexedVariables:   getIndexedVariableCount(&v.Children[i]),\n\t\t\t\tNamedVariables:     getNamedVariableCount(&v.Children[i]),\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tchildren = make([]dap.Variable, len(v.Children))\n\t\tfor i := range v.Children {\n\t\t\tc := &v.Children[i]\n\t\t\tcfqname := fmt.Sprintf(\"%s.%s\", v.fullyQualifiedNameOrExpr, c.Name)\n\n\t\t\tswitch {\n\t\t\tcase strings.HasPrefix(c.Name, \"~\") || strings.HasPrefix(c.Name, \".\"):\n\t\t\t\tcfqname = \"\"\n\t\t\tcase v.isScope && v.fullyQualifiedNameOrExpr == \"\":\n\t\t\t\tcfqname = c.Name\n\t\t\tcase v.fullyQualifiedNameOrExpr == \"\":\n\t\t\t\tcfqname = \"\"\n\t\t\tcase v.Kind == reflect.Interface:\n\t\t\t\tcfqname = fmt.Sprintf(\"%s.(%s)\", v.fullyQualifiedNameOrExpr, c.Name) // c is data\n\t\t\tcase v.Kind == reflect.Ptr:\n\t\t\t\tcfqname = fmt.Sprintf(\"(*%v)\", v.fullyQualifiedNameOrExpr) // c is the nameless pointer value\n\t\t\tcase v.Kind == reflect.Complex64 || v.Kind == reflect.Complex128:\n\t\t\t\tcfqname = \"\" // complex children are not struct fields and can't be accessed directly\n\t\t\t}\n\t\t\tcvalue, cvarref := s.convertVariable(c, cfqname)\n\n\t\t\t// Annotate any shadowed variables to \"(name)\" in order\n\t\t\t// to distinguish from non-shadowed variables.\n\t\t\t// TODO(suzmue): should we support a special evaluateName syntax that\n\t\t\t// can access shadowed variables?\n\t\t\tname := c.Name\n\t\t\tif c.Flags&proc.VariableShadowed == proc.VariableShadowed {\n\t\t\t\tname = fmt.Sprintf(\"(%s)\", name)\n\t\t\t}\n\n\t\t\tif v.isScope && v.Name == \"Registers\" {\n\t\t\t\t// Align all the register names.\n\t\t\t\tname = fmt.Sprintf(\"%6s\", strings.ToLower(c.Name))\n\t\t\t\t// Set the correct evaluate name for the register.\n\t\t\t\tcfqname = fmt.Sprintf(\"_%s\", strings.ToUpper(c.Name))\n\t\t\t\t// Unquote the value\n\t\t\t\tif ucvalue, err := strconv.Unquote(cvalue); err == nil {\n\t\t\t\t\tcvalue = ucvalue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tchildren[i] = dap.Variable{\n\t\t\t\tName:               name,\n\t\t\t\tEvaluateName:       cfqname,\n\t\t\t\tType:               s.getTypeIfSupported(c),\n\t\t\t\tValue:              cvalue,\n\t\t\t\tVariablesReference: cvarref,\n\t\t\t\tIndexedVariables:   getIndexedVariableCount(c),\n\t\t\t\tNamedVariables:     getNamedVariableCount(c),\n\t\t\t\tMemoryReference:    s.referencesCollection.put(c),\n\t\t\t}\n\t\t}\n\t}\n\treturn children\n}\n\nfunc getNamedVariableCount(v *proc.Variable) int {\n\tnamedVars := 0\n\tif v.Kind == reflect.Map && v.Len > 0 {\n\t\t// len\n\t\tnamedVars += 1\n\t}\n\tif isListOfBytesOrRunes(v) {\n\t\t// string value of array/slice of bytes and runes.\n\t\tnamedVars += 1\n\t}\n\n\treturn namedVars\n}\n\n// metadataToDAPVariables returns the DAP presentation of the referenced variable's metadata.\n// These are included as named variables\nfunc (s *Session) metadataToDAPVariables(v *fullyQualifiedVariable) ([]dap.Variable, error) {\n\tchildren := []dap.Variable{} // must return empty array, not null, if no children\n\n\tif v.Kind == reflect.Map && v.Len > 0 {\n\t\tchildren = append(children, dap.Variable{\n\t\t\tName:         \"len()\",\n\t\t\tValue:        fmt.Sprintf(\"%d\", v.Len),\n\t\t\tType:         \"int\",\n\t\t\tEvaluateName: fmt.Sprintf(\"len(%s)\", v.fullyQualifiedNameOrExpr),\n\t\t})\n\t}\n\n\tif isListOfBytesOrRunes(v.Variable) && v.Addr != 0 && (v.Flags&proc.VariableFakeAddress == 0) {\n\t\t// Return the string value of []byte or []rune.\n\t\ttypeName := api.PrettyTypeName(v.DwarfType)\n\t\tloadExpr := fmt.Sprintf(\"string(*(*%q)(%#x))\", typeName, v.Addr)\n\n\t\ts.config.log.Debugf(\"loading %s (type %s) with %s\", v.fullyQualifiedNameOrExpr, typeName, loadExpr)\n\t\t// We know that this is an array/slice of Uint8 or Int32, so we will load up to MaxStringLen.\n\t\tconfig := DefaultLoadConfig\n\t\tconfig.MaxArrayValues = config.MaxStringLen\n\t\tvLoaded, err := s.debugger.EvalVariableInScope(-1, 0, 0, loadExpr, config)\n\t\tif err == nil {\n\t\t\tval := s.convertVariableToString(vLoaded)\n\t\t\t// TODO(suzmue): Add evaluate name. Using string(name) will not get the same result because the\n\t\t\t// MaxArrayValues is not auto adjusted in evaluate requests like MaxStringLen is adjusted.\n\t\t\tchildren = append(children, dap.Variable{\n\t\t\t\tName:  \"string()\",\n\t\t\t\tValue: val,\n\t\t\t\tType:  \"string\",\n\t\t\t})\n\t\t} else {\n\t\t\ts.config.log.Debugf(\"failed to load %q: %v\", v.fullyQualifiedNameOrExpr, err)\n\t\t}\n\t}\n\treturn children, nil\n}\n\nfunc isListOfBytesOrRunes(v *proc.Variable) bool {\n\tif len(v.Children) > 0 && (v.Kind == reflect.Array || v.Kind == reflect.Slice) {\n\t\tchildKind := v.Children[0].RealType.Common().ReflectKind\n\t\treturn childKind == reflect.Uint8 || childKind == reflect.Int32\n\t}\n\treturn false\n}\n\nfunc (s *Session) getTypeIfSupported(v *proc.Variable) string {\n\tif !s.clientCapabilities.supportsVariableType {\n\t\treturn \"\"\n\t}\n\tswitch v.Kind {\n\tcase reflect.Interface:\n\t\tif len(v.Children) > 0 {\n\t\t\tvapi := api.ConvertVar(v)\n\t\t\tif vapi.Children[0].Kind != reflect.Invalid {\n\t\t\t\treturn fmt.Sprintf(\"%s(%s)\", vapi.Type, vapi.Children[0].Type)\n\t\t\t}\n\t\t}\n\t}\n\treturn v.TypeString()\n}\n\n// convertVariable converts proc.Variable to dap.Variable value and reference\n// while keeping track of the full qualified name or load expression.\n// Variable reference is used to keep track of the children associated with each\n// variable. It is shared with the host via scopes or evaluate response and is an index\n// into the s.variableHandles map, used to look up variables and their children on\n// subsequent variables requests. A positive reference signals the host that another\n// variables request can be issued to get the elements of the compound variable. As a\n// custom, a zero reference, reminiscent of a zero pointer, is used to indicate that\n// a scalar variable cannot be \"dereferenced\" to get its elements (as there are none).\nfunc (s *Session) convertVariable(v *proc.Variable, qualifiedNameOrExpr string) (value string, variablesReference int) {\n\treturn s.convertVariableWithOpts(v, qualifiedNameOrExpr, 0)\n}\n\nfunc (s *Session) convertVariableToString(v *proc.Variable) string {\n\tval, _ := s.convertVariableWithOpts(v, \"\", skipRef)\n\treturn val\n}\n\nconst (\n\t// Limit the length of a string representation of a compound or reference type variable.\n\tmaxVarValueLen = 1 << 8 // 256\n\t// Limit the length of an inlined map key.\n\tmaxMapKeyValueLen = 64\n)\n\n// Flags for convertVariableWithOpts option.\ntype convertVariableFlags uint8\n\nconst (\n\tskipRef convertVariableFlags = 1 << iota\n\tshowFullValue\n)\n\n// convertVariableWithOpts allows to skip reference generation in case all we need is\n// a string representation of the variable. When the variable is a compound or reference\n// type variable and its full string representation can be larger than defaultMaxValueLen,\n// this returns a truncated value unless showFull option flag is set.\nfunc (s *Session) convertVariableWithOpts(v *proc.Variable, qualifiedNameOrExpr string, opts convertVariableFlags) (value string, variablesReference int) {\n\tcanHaveRef := false\n\tmaybeCreateVariableHandle := func(v *proc.Variable) int {\n\t\tcanHaveRef = true\n\t\tif opts&skipRef != 0 {\n\t\t\treturn 0\n\t\t}\n\t\treturn s.variableHandles.create(&fullyQualifiedVariable{v, qualifiedNameOrExpr, false /*not a scope*/, 0})\n\t}\n\tvalue = formatVar(v)\n\tif v.Unreadable != nil {\n\t\treturn value, 0\n\t}\n\n\t// Some of the types might be fully or partially not loaded based on LoadConfig.\n\t// Those that are fully missing (e.g. due to hitting MaxVariableRecurse), can be reloaded in place.\n\treloadVariable := func(v *proc.Variable, qualifiedNameOrExpr string) (value string) {\n\t\t// We might be loading variables from the frame that's not topmost, so use\n\t\t// frame-independent address-based expression, not fully-qualified name as per\n\t\t// https://github.com/go-delve/delve/blob/master/Documentation/api/ClientHowto.md#looking-into-variables.\n\t\t// TODO(polina): Get *proc.Variable object from debugger instead. Export a function to set v.loaded to false\n\t\t// and call v.loadValue gain with a different load config. It's more efficient, and it's guaranteed to keep\n\t\t// working with generics.\n\t\tvalue = formatVar(v)\n\t\ttypeName := api.PrettyTypeName(v.DwarfType)\n\t\tloadExpr := fmt.Sprintf(\"*(*%q)(%#x)\", typeName, v.Addr)\n\t\ts.config.log.Debugf(\"loading %s (type %s) with %s\", qualifiedNameOrExpr, typeName, loadExpr)\n\t\t// Make sure we can load the pointers directly, not by updating just the child\n\t\t// This is not really necessary now because users have no way of setting FollowPointers to false.\n\t\tconfig := DefaultLoadConfig\n\t\tconfig.FollowPointers = true\n\t\tvLoaded, err := s.debugger.EvalVariableInScope(-1, 0, 0, loadExpr, config)\n\t\tif err != nil {\n\t\t\tvalue += fmt.Sprintf(\" - FAILED TO LOAD: %s\", err)\n\t\t} else {\n\t\t\tv.Children = vLoaded.Children\n\t\t\tv.Value = vLoaded.Value\n\t\t\tvalue = formatVar(v)\n\t\t}\n\t\treturn value\n\t}\n\n\tswitch v.Kind {\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tn, _ := strconv.ParseUint(api.ExtractIntValue(api.ConvertVar(v).Value), 10, 64)\n\t\tvalue = fmt.Sprintf(\"%s = %#x\", value, n)\n\tcase reflect.UnsafePointer:\n\t\t// Skip child reference\n\tcase reflect.Ptr:\n\t\tif v.DwarfType != nil && len(v.Children) > 0 && v.Children[0].Addr != 0 && v.Children[0].Kind != reflect.Invalid {\n\t\t\tif v.Children[0].OnlyAddr { // Not loaded\n\t\t\t\tif v.Addr == 0 {\n\t\t\t\t\t// This is equivalent to the following with the cli:\n\t\t\t\t\t//    (dlv) p &a7\n\t\t\t\t\t//    (**main.FooBar)(0xc0000a3918)\n\t\t\t\t\t//\n\t\t\t\t\t// TODO(polina): what is more appropriate?\n\t\t\t\t\t// Option 1: leave it unloaded because it is a special case\n\t\t\t\t\t// Option 2: load it, but then we have to load the child, not the parent, unlike all others\n\t\t\t\t\t// TODO(polina): see if reloadVariable can be reused here\n\t\t\t\t\tcTypeName := api.PrettyTypeName(v.Children[0].DwarfType)\n\t\t\t\t\tcLoadExpr := fmt.Sprintf(\"*(*%q)(%#x)\", cTypeName, v.Children[0].Addr)\n\t\t\t\t\ts.config.log.Debugf(\"loading *(%s) (type %s) with %s\", qualifiedNameOrExpr, cTypeName, cLoadExpr)\n\t\t\t\t\tcLoaded, err := s.debugger.EvalVariableInScope(-1, 0, 0, cLoadExpr, DefaultLoadConfig)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tvalue += fmt.Sprintf(\" - FAILED TO LOAD: %s\", err)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcLoaded.Name = v.Children[0].Name // otherwise, this will be the pointer expression\n\t\t\t\t\t\tv.Children = []proc.Variable{*cLoaded}\n\t\t\t\t\t\tvalue = formatVar(v)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvalue = reloadVariable(v, qualifiedNameOrExpr)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !v.Children[0].OnlyAddr {\n\t\t\t\tvariablesReference = maybeCreateVariableHandle(v)\n\t\t\t}\n\t\t}\n\tcase reflect.Slice, reflect.Array:\n\t\tif v.Len > int64(len(v.Children)) { // Not fully loaded\n\t\t\tif v.Base != 0 && len(v.Children) == 0 { // Fully missing\n\t\t\t\tvalue = reloadVariable(v, qualifiedNameOrExpr)\n\t\t\t} else if !s.clientCapabilities.supportsVariablePaging {\n\t\t\t\tvalue = fmt.Sprintf(\"(loaded %d/%d) \", len(v.Children), v.Len) + value\n\t\t\t}\n\t\t}\n\t\tif v.Base != 0 && len(v.Children) > 0 {\n\t\t\tvariablesReference = maybeCreateVariableHandle(v)\n\t\t}\n\tcase reflect.Map:\n\t\tif v.Len > int64(len(v.Children)/2) { // Not fully loaded\n\t\t\tif len(v.Children) == 0 { // Fully missing\n\t\t\t\tvalue = reloadVariable(v, qualifiedNameOrExpr)\n\t\t\t} else if !s.clientCapabilities.supportsVariablePaging {\n\t\t\t\tvalue = fmt.Sprintf(\"(loaded %d/%d) \", len(v.Children)/2, v.Len) + value\n\t\t\t}\n\t\t}\n\t\tif v.Base != 0 && len(v.Children) > 0 {\n\t\t\tvariablesReference = maybeCreateVariableHandle(v)\n\t\t}\n\tcase reflect.String:\n\t\t// TODO(polina): implement auto-loading here.\n\tcase reflect.Interface:\n\t\tif v.Addr != 0 && len(v.Children) > 0 && v.Children[0].Kind != reflect.Invalid && v.Children[0].Addr != 0 {\n\t\t\tif v.Children[0].OnlyAddr { // Not loaded\n\t\t\t\tvalue = reloadVariable(v, qualifiedNameOrExpr)\n\t\t\t}\n\t\t\tif !v.Children[0].OnlyAddr {\n\t\t\t\tvariablesReference = maybeCreateVariableHandle(v)\n\t\t\t}\n\t\t}\n\tcase reflect.Struct, reflect.Func:\n\t\tif v.Len > int64(len(v.Children)) { // Not fully loaded\n\t\t\tif len(v.Children) == 0 { // Fully missing\n\t\t\t\tvalue = reloadVariable(v, qualifiedNameOrExpr)\n\t\t\t} else { // Partially missing (TODO)\n\t\t\t\tvalue = fmt.Sprintf(\"(loaded %d/%d) \", len(v.Children), v.Len) + value\n\t\t\t}\n\t\t}\n\t\tif len(v.Children) > 0 {\n\t\t\tvariablesReference = maybeCreateVariableHandle(v)\n\t\t}\n\tcase reflect.Complex64, reflect.Complex128:\n\t\tv.Children = make([]proc.Variable, 2)\n\t\tv.Children[0].Name = \"real\"\n\t\tv.Children[0].Value = constant.Real(v.Value)\n\t\tv.Children[1].Name = \"imaginary\"\n\t\tv.Children[1].Value = constant.Imag(v.Value)\n\t\tif v.Kind == reflect.Complex64 {\n\t\t\tv.Children[0].Kind = reflect.Float32\n\t\t\tv.Children[1].Kind = reflect.Float32\n\t\t} else {\n\t\t\tv.Children[0].Kind = reflect.Float64\n\t\t\tv.Children[1].Kind = reflect.Float64\n\t\t}\n\t\tfallthrough\n\tdefault: // Complex, Scalar, Chan\n\t\tif len(v.Children) > 0 {\n\t\t\tvariablesReference = maybeCreateVariableHandle(v)\n\t\t}\n\t}\n\n\t// By default, only values of variables that have children can be truncated.\n\t// If showFullValue is set, then all value strings are not truncated.\n\tcanTruncateValue := showFullValue&opts == 0\n\tif len(value) > maxVarValueLen && canTruncateValue && canHaveRef {\n\t\tvalue = value[:maxVarValueLen] + \"...\"\n\t}\n\treturn value, variablesReference\n}\n\n// onEvaluateRequest handles 'evaluate' requests.\n// This is a mandatory request to support.\n// Support the following expressions:\n//\n//   - {expression} - evaluates the expression and returns the result as a variable\n//   - call {function} - injects a function call and returns the result as a variable\n//   - config {expression} - updates configuration parameters\n//\n// TODO(polina): users have complained about having to click to expand multi-level\n// variables, so consider also adding the following:\n//\n//   - print {expression} - return the result as a string like from dlv cli\nfunc (s *Session) onEvaluateRequest(request *dap.EvaluateRequest) {\n\tshowErrorToUser := request.Arguments.Context != \"watch\" && request.Arguments.Context != \"repl\" && request.Arguments.Context != \"hover\"\n\tif s.debugger == nil {\n\t\ts.sendErrorResponseWithOpts(request.Request, UnableToEvaluateExpression, \"Unable to evaluate expression\", \"debugger is nil\", showErrorToUser)\n\t\treturn\n\t}\n\n\t// Default to the topmost stack frame of the current goroutine in case\n\t// no frame is specified (e.g. when stopped on entry or no call stack frame is expanded)\n\tgoid, frame := -1, 0\n\tif sf, ok := s.stackFrameHandles.get(request.Arguments.FrameId); ok {\n\t\tgoid = sf.goroutineID\n\t\tframe = sf.frameIndex\n\t}\n\n\tresponse := &dap.EvaluateResponse{Response: *s.newResponse(request.Request)}\n\texpr := request.Arguments.Expression\n\n\tif isConfig, err := regexp.MatchString(`^\\s*dlv\\s+\\S+`, expr); err == nil && isConfig { // dlv {command}\n\t\texpr := strings.Replace(expr, \"dlv \", \"\", 1)\n\t\tresult, err := s.delveCmd(goid, frame, expr)\n\t\tif err != nil {\n\t\t\ts.sendErrorResponseWithOpts(request.Request, UnableToRunDlvCommand, \"Unable to run dlv command\", err.Error(), showErrorToUser)\n\t\t\treturn\n\t\t}\n\t\tresponse.Body = dap.EvaluateResponseBody{\n\t\t\tResult: result,\n\t\t}\n\t} else if isCall, err := regexp.MatchString(`^\\s*call\\s+\\S+`, expr); err == nil && isCall { // call {expression}\n\t\texpr := strings.Replace(expr, \"call \", \"\", 1)\n\t\t_, retVars, err := s.doCall(goid, frame, expr)\n\t\tif err != nil {\n\t\t\ts.sendErrorResponseWithOpts(request.Request, UnableToEvaluateExpression, \"Unable to evaluate expression\", err.Error(), showErrorToUser)\n\t\t\treturn\n\t\t}\n\t\t// The call completed, and we can reply with its return values (if any)\n\t\tif len(retVars) > 0 {\n\t\t\t// Package one or more return values in a single scope-like nameless variable\n\t\t\t// that preserves their names.\n\t\t\tretVarsAsVar := &proc.Variable{Children: slicePtrVarToSliceVar(retVars)}\n\t\t\t// As a shortcut also express the return values as a single string.\n\t\t\tvar retVarsAsStr strings.Builder\n\t\t\tfor _, v := range retVars {\n\t\t\t\tretVarsAsStr.WriteString(s.convertVariableToString(v) + \", \")\n\t\t\t}\n\t\t\tresponse.Body = dap.EvaluateResponseBody{\n\t\t\t\tResult:             strings.TrimRight(retVarsAsStr.String(), \", \"),\n\t\t\t\tVariablesReference: s.variableHandles.create(&fullyQualifiedVariable{retVarsAsVar, \"\", false /*not a scope*/, 0}),\n\t\t\t}\n\t\t}\n\t} else { // {expression}\n\t\texprVar, err := s.debugger.EvalVariableInScope(int64(goid), frame, 0, expr, DefaultLoadConfig)\n\t\tif err != nil {\n\t\t\ts.sendErrorResponseWithOpts(request.Request, UnableToEvaluateExpression, \"Unable to evaluate expression\", err.Error(), showErrorToUser)\n\t\t\treturn\n\t\t}\n\n\t\tctxt := request.Arguments.Context\n\t\tswitch ctxt {\n\t\tcase \"repl\", \"variables\", \"hover\", \"clipboard\":\n\t\t\tif exprVar.Kind == reflect.String && exprVar.Unreadable == nil {\n\t\t\t\tif strVal := constant.StringVal(exprVar.Value); exprVar.Len > int64(len(strVal)) {\n\t\t\t\t\t// Reload the string value with a bigger limit.\n\t\t\t\t\tloadCfg := DefaultLoadConfig\n\t\t\t\t\tloadCfg.MaxStringLen = maxSingleStringLen\n\t\t\t\t\tif v, err := s.debugger.EvalVariableInScope(int64(goid), frame, 0, request.Arguments.Expression, loadCfg); err != nil {\n\t\t\t\t\t\ts.config.log.Debugf(\"Failed to load more for %v: %v\", request.Arguments.Expression, err)\n\t\t\t\t\t} else {\n\t\t\t\t\t\texprVar = v\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tvar opts convertVariableFlags\n\t\t// Send the full value when the context is \"clipboard\" or \"variables\" since\n\t\t// these contexts are used to copy the value.\n\t\tif ctxt == \"clipboard\" || ctxt == \"variables\" {\n\t\t\topts |= showFullValue\n\t\t}\n\t\texprVal, exprRef := s.convertVariableWithOpts(exprVar, fmt.Sprintf(\"(%s)\", request.Arguments.Expression), opts)\n\t\tresponse.Body = dap.EvaluateResponseBody{Result: exprVal, Type: s.getTypeIfSupported(exprVar), VariablesReference: exprRef, IndexedVariables: getIndexedVariableCount(exprVar), NamedVariables: getNamedVariableCount(exprVar)}\n\t}\n\ts.send(response)\n}\n\nfunc (s *Session) doCall(goid, frame int, expr string) (*api.DebuggerState, []*proc.Variable, error) {\n\t// This call might be evaluated in the context of the frame that is not topmost\n\t// if the editor is set to view the variables for one of the parent frames.\n\t// If the call expression refers to any of these variables, unlike regular\n\t// expressions, it will evaluate them in the context of the topmost frame,\n\t// and the user will get an unexpected result or an unexpected symbol error.\n\t// We prevent this but disallowing any frames other than topmost.\n\tif frame > 0 {\n\t\treturn nil, nil, errors.New(\"call is only supported with topmost stack frame\")\n\t}\n\tstateBeforeCall, err := s.debugger.State( /*nowait*/ true)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\t// The return values of injected function calls are volatile.\n\t// Load as much useful data as possible.\n\t// TODO: investigate whether we need to increase other limits. For example,\n\t// the return value is a pointer to a temporary object, which can become\n\t// invalid by other injected function calls. Do we care about such use cases?\n\tloadCfg := DefaultLoadConfig\n\tloadCfg.MaxStringLen = maxStringLenInCallRetVars\n\n\t// TODO(polina): since call will resume execution of all goroutines,\n\t// we should do this asynchronously and send a continued event to the\n\t// editor, followed by a stop event when the call completes.\n\tstate, err := s.debugger.Command(&api.DebuggerCommand{\n\t\tName:                 api.Call,\n\t\tReturnInfoLoadConfig: api.LoadConfigFromProc(&loadCfg),\n\t\tExpr:                 expr,\n\t\tUnsafeCall:           false,\n\t\tGoroutineID:          int64(goid),\n\t\tWithEvents:           true,\n\t}, nil, s.conn.closedChan, s.convertDebuggerEvent)\n\tif processExited(state, err) {\n\t\ts.preTerminatedWG.Wait()\n\t\te := &dap.TerminatedEvent{Event: *s.newEvent(\"terminated\")}\n\t\ts.send(e)\n\t\treturn nil, nil, errors.New(\"terminated\")\n\t}\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// After the call is done, the goroutine where we injected the call should\n\t// return to the original stopped line with return values. However,\n\t// it is not guaranteed to be selected due to the possibility of the\n\t// of simultaneous breakpoints. Therefore, we check all threads.\n\tvar retVars []*proc.Variable\n\tfound := false\n\tfor _, t := range state.Threads {\n\t\tif t.GoroutineID == stateBeforeCall.SelectedGoroutine.ID &&\n\t\t\tt.Line == stateBeforeCall.SelectedGoroutine.CurrentLoc.Line && t.CallReturn {\n\t\t\tfound = true\n\t\t\t// The call completed. Get the return values.\n\t\t\tretVars, err = s.debugger.FindThreadReturnValues(t.ID, loadCfg)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, nil, err\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\t// Normal function calls expect return values, but call commands\n\t// used for variable assignments do not return a value when they succeed.\n\t// In go '=' is not an operator. Check if go/parser complains.\n\t// If the above Call command passed but the expression is not a valid\n\t// go expression, we just handled a variable assignment request.\n\tisAssignment := false\n\tif _, err := parser.ParseExpr(expr); err != nil {\n\t\tisAssignment = true\n\t}\n\n\t// note: as described in https://github.com/golang/go/issues/25578, function call injection\n\t// causes to resume the entire Go process. Due to this limitation, there is no guarantee\n\t// that the process is in the same state even after the injected call returns normally\n\t// without any surprises such as breakpoints or panic. To handle this correctly we need\n\t// to reset all the handles (both variables and stack frames).\n\t//\n\t// We considered sending a stopped event after each call unconditionally, but a stopped\n\t// event can be expensive and can interact badly with the client-side optimization\n\t// to refresh information. For example, VS Code reissues scopes/evaluate (for watch) after\n\t// completing a setVariable or evaluate request for repl context. Thus, for now, we\n\t// do not trigger a stopped event and hope editors to refetch the updated state as soon\n\t// as the user resumes debugging.\n\n\tif !found || !isAssignment && retVars == nil {\n\t\t// The call got interrupted by a stop (e.g. breakpoint in injected\n\t\t// function call or in another goroutine).\n\t\ts.resetHandlesForStoppedEvent()\n\t\ts.sendStoppedEvent(state)\n\n\t\t// TODO(polina): once this is asynchronous, we could wait to reply until the user\n\t\t// continues, call ends, original stop point is hit and return values are available\n\t\t// instead of returning an error 'call stopped' here.\n\t\treturn nil, nil, errors.New(\"call stopped\")\n\t}\n\treturn state, retVars, nil\n}\n\nfunc (s *Session) sendStoppedEvent(state *api.DebuggerState) {\n\tstopped := &dap.StoppedEvent{Event: *s.newEvent(\"stopped\")}\n\tstopped.Body.AllThreadsStopped = true\n\tstopped.Body.ThreadId = int(stoppedGoroutineID(state))\n\tstopped.Body.Reason = s.debugger.StopReason().String()\n\ts.send(stopped)\n}\n\n// onTerminateRequest sends a not-yet-implemented error response.\n// Capability 'supportsTerminateRequest' is not set in 'initialize' response.\nfunc (s *Session) onTerminateRequest(request *dap.TerminateRequest) {\n\ts.sendNotYetImplementedErrorResponse(request.Request)\n}\n\n// onRestartRequest handles 'restart' request.\n// Capability 'supportsRestartRequest' is set to true in 'initialize' response.\nfunc (s *Session) onRestartRequest(request *dap.RestartRequest) {\n\ts.changeStateMu.Lock()\n\tdefer s.changeStateMu.Unlock()\n\n\t// The response is just an acknowledgement, if we don't send it VSCode gets wedged\n\ts.send(&dap.RestartResponse{Response: *s.newResponse(request.Request)})\n\n\t// Cannot restart in noDebug mode\n\tif s.isNoDebug() {\n\t\ts.sendErrorResponse(request.Request, FailedToLaunch, \"Cannot restart\", \"cannot restart in noDebug mode\")\n\t\treturn\n\t}\n\n\tif s.debugger == nil {\n\t\ts.sendErrorResponse(request.Request, FailedToLaunch, \"Cannot restart: debugger is not running\", \"Debugger is not running\")\n\t\treturn\n\t}\n\n\ts.config.log.Debug(\"halting execution to restart\")\n\ts.setHaltRequested(true)\n\t_, err := s.halt()\n\tif err != nil {\n\t\tvar errProcessExited proc.ErrProcessExited\n\t\tif !errors.As(err, &errProcessExited) {\n\t\t\ts.sendErrorResponse(request.Request, FailedToLaunch, \"Cannot restart\", fmt.Sprintf(\"cannot restart process: %v\", err))\n\t\t\treturn\n\t\t}\n\t}\n\n\t// Cannot restart attached processes\n\tif s.debugger.AttachPid() != 0 {\n\t\ts.sendErrorResponse(request.Request, FailedToLaunch, \"Cannot restart\", \"cannot restart process Delve did not create\")\n\t\treturn\n\t}\n\n\tvar newArgs []string\n\tvar resetArgs bool\n\trebuild := true\n\n\t// Update launch/attach arguments if provided\n\tif len(request.Arguments) > 0 {\n\t\tvar restartArgs struct {\n\t\t\tArguments struct {\n\t\t\t\tRequest string `json:\"request\"`\n\t\t\t\tLaunchConfig\n\t\t\t\tRebuild *bool `json:\"rebuild,omitempty\"`\n\t\t\t}\n\t\t}\n\t\terr := json.Unmarshal(request.Arguments, &restartArgs)\n\t\tif err != nil {\n\t\t\ts.sendErrorResponse(request.Request, FailedToLaunch, \"Cannot restart\", \"unable to unmarshal launch args\")\n\t\t\treturn\n\t\t}\n\t\tif restartArgs.Arguments.Request == \"launch\" {\n\t\t\tif restartArgs.Arguments.Rebuild != nil {\n\t\t\t\trebuild = *restartArgs.Arguments.Rebuild\n\t\t\t}\n\t\t\tlaunchArgs := restartArgs.Arguments.LaunchConfig\n\t\t\ts.setLaunchAttachArgs(launchArgs.LaunchAttachCommonConfig)\n\t\t\t// Extract new program arguments if provided\n\t\t\tif launchArgs.Args != nil {\n\t\t\t\tnewArgs = launchArgs.Args\n\t\t\t\tresetArgs = true\n\t\t\t}\n\t\t}\n\t}\n\n\tvalidBefore := true\n\tif _, err := s.debugger.State(false); err != nil {\n\t\tvalidBefore = false\n\t}\n\n\t// TODO(deparker) handle args from the launch regarding re-recording.\n\tdiscardedBreakpoints, err := s.debugger.Restart(false, \"\", resetArgs, newArgs, [3]string{}, rebuild)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, FailedToLaunch, \"Failed to restart\", err.Error())\n\t\tif _, err := s.debugger.State(false); validBefore && err != nil {\n\t\t\ts.send(&dap.TerminatedEvent{Event: *s.newEvent(\"terminated\")})\n\t\t}\n\t\treturn\n\t}\n\n\ts.config.log.Infof(\"Restart completed. Discarded breakpoints: %v\", discardedBreakpoints)\n\n\ts.send(&dap.InitializedEvent{Event: *s.newEvent(\"initialized\")})\n}\n\n// onStepBackRequest handles 'stepBack' request.\n// This is an optional request enabled by capability 'supportsStepBackRequest'.\nfunc (s *Session) onStepBackRequest(request *dap.StepBackRequest, allowNextStateChange *syncflag) {\n\ts.sendStepResponse(request.Arguments.ThreadId, &dap.StepBackResponse{Response: *s.newResponse(request.Request)})\n\ts.stepUntilStopAndNotify(api.ReverseNext, request.Arguments.ThreadId, request.Arguments.Granularity, allowNextStateChange)\n}\n\n// onReverseContinueRequest performs a rewind command call up to the previous\n// breakpoint or the start of the process\n// This is an optional request enabled by capability 'supportsStepBackRequest'.\nfunc (s *Session) onReverseContinueRequest(request *dap.ReverseContinueRequest, allowNextStateChange *syncflag) {\n\ts.send(&dap.ReverseContinueResponse{\n\t\tResponse: *s.newResponse(request.Request),\n\t})\n\ts.runUntilStopAndNotify(api.Rewind, allowNextStateChange)\n}\n\n// computeEvaluateName finds the named child, and computes its evaluate name.\nfunc (s *Session) computeEvaluateName(v *fullyQualifiedVariable, cname string) (string, error) {\n\tchildren := s.childrenToDAPVariables(v)\n\tfor _, c := range children {\n\t\tif c.Name == cname {\n\t\t\tif c.EvaluateName != \"\" {\n\t\t\t\treturn c.EvaluateName, nil\n\t\t\t}\n\t\t\treturn \"\", errors.New(\"cannot set the variable without evaluate name\")\n\t\t}\n\t}\n\treturn \"\", errors.New(\"failed to find the named variable\")\n}\n\n// onSetVariableRequest handles 'setVariable' requests.\nfunc (s *Session) onSetVariableRequest(request *dap.SetVariableRequest) {\n\targ := request.Arguments\n\n\tv, ok := s.variableHandles.get(arg.VariablesReference)\n\tif !ok {\n\t\ts.sendErrorResponse(request.Request, UnableToSetVariable, \"Unable to lookup variable\", fmt.Sprintf(\"unknown reference %d\", arg.VariablesReference))\n\t\treturn\n\t}\n\t// We need to translate the arg.Name to its evaluateName if the name\n\t// refers to a field or element of a variable.\n\t// https://github.com/microsoft/vscode/issues/120774\n\tevaluateName, err := s.computeEvaluateName(v, arg.Name)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToSetVariable, \"Unable to set variable\", err.Error())\n\t\treturn\n\t}\n\n\t// By running EvalVariableInScope, we get the type info of the variable\n\t// that can be accessed with the evaluateName, and ensure the variable we are\n\t// trying to update is valid and accessible from the top most frame & the\n\t// current goroutine.\n\tgoid, frame := -1, 0\n\tevaluated, err := s.debugger.EvalVariableInScope(int64(goid), frame, 0, evaluateName, DefaultLoadConfig)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToSetVariable, \"Unable to lookup variable\", err.Error())\n\t\treturn\n\t}\n\n\tuseFnCall := false\n\tswitch evaluated.Kind {\n\tcase reflect.String:\n\t\tuseFnCall = true\n\tdefault:\n\t\t// TODO(hyangah): it's possible to set a non-string variable using (`call i = fn()`)\n\t\t// and we don't support it through the Set Variable request yet.\n\t\t// If we want to support it for non-string types, we need to parse arg.Value.\n\t}\n\n\tif useFnCall {\n\t\t// TODO(hyangah): function call injection currently allows to assign return values of\n\t\t// a function call to variables. So, curious users would find set variable\n\t\t// on string would accept expression like `fn()`.\n\t\tif state, retVals, err := s.doCall(goid, frame, fmt.Sprintf(\"%v=%v\", evaluateName, arg.Value)); err != nil {\n\t\t\ts.sendErrorResponse(request.Request, UnableToSetVariable, \"Unable to set variable\", err.Error())\n\t\t\treturn\n\t\t} else if retVals != nil {\n\t\t\t// The assignment expression isn't supposed to return values, but we got them.\n\t\t\t// That indicates something went wrong (e.g. panic).\n\t\t\t// TODO: isn't it simpler to do this in s.doCall?\n\t\t\ts.resetHandlesForStoppedEvent()\n\t\t\ts.sendStoppedEvent(state)\n\n\t\t\tvar r []string\n\t\t\tfor _, v := range retVals {\n\t\t\t\tr = append(r, s.convertVariableToString(v))\n\t\t\t}\n\t\t\tmsg := \"interrupted\"\n\t\t\tif len(r) > 0 {\n\t\t\t\tmsg = \"interrupted:\" + strings.Join(r, \", \")\n\t\t\t}\n\n\t\t\ts.sendErrorResponse(request.Request, UnableToSetVariable, \"Unable to set variable\", msg)\n\t\t\treturn\n\t\t}\n\t} else {\n\t\tif err := s.debugger.SetVariableInScope(int64(goid), frame, 0, evaluateName, arg.Value); err != nil {\n\t\t\ts.sendErrorResponse(request.Request, UnableToSetVariable, \"Unable to set variable\", err.Error())\n\t\t\treturn\n\t\t}\n\t}\n\t// * Note on inconsistent state after set variable:\n\t//\n\t// The variable handles may be in inconsistent state - for example,\n\t// let's assume there are two aliased variables pointing to the same\n\t// memory and both are already loaded and cached in the variable handle.\n\t// VSCode tries to locally update the UI when the set variable\n\t// request succeeds, and may issue additional scopes or evaluate requests\n\t// to update the variable/watch sections if necessary.\n\t//\n\t// More complicated situation is when the set variable involves call\n\t// injection - after the injected call is completed, the debuggee can\n\t// be in a completely different state (see the note in doCall) due to\n\t// how the call injection is implemented. Ideally, we need to also refresh\n\t// the stack frames but that is complicated. For now, we don't try to actively\n\t// invalidate this state hoping that the editors will refetch the state\n\t// as soon as the user resumes debugging.\n\n\tresponse := &dap.SetVariableResponse{Response: *s.newResponse(request.Request)}\n\tresponse.Body.Value = arg.Value\n\t// TODO(hyangah): instead of arg.Value, reload the variable and return\n\t// the presentation of the new value.\n\ts.send(response)\n}\n\n// onSetExpression sends a not-yet-implemented error response.\n// Capability 'supportsSetExpression' is not set 'initialize' response.\nfunc (s *Session) onSetExpressionRequest(request *dap.SetExpressionRequest) {\n\ts.sendNotYetImplementedErrorResponse(request.Request)\n}\n\n// onLoadedSourcesRequest sends a not-yet-implemented error response.\n// Capability 'supportsLoadedSourcesRequest' is not set 'initialize' response.\nfunc (s *Session) onLoadedSourcesRequest(request *dap.LoadedSourcesRequest) {\n\ts.sendNotYetImplementedErrorResponse(request.Request)\n}\n\n// onReadMemoryRequest handles DAP read memory requests\nfunc (s *Session) onReadMemoryRequest(request *dap.ReadMemoryRequest) {\n\targs := request.Arguments\n\n\tif args.Count < 0 {\n\t\ts.sendErrorResponse(request.Request, UnableToReadMemory, \"Unable to read memory\", \"negative count\")\n\t\treturn\n\t}\n\n\tref, ok := s.referencesCollection.get(args.MemoryReference)\n\tif !ok {\n\t\ts.sendErrorResponse(request.Request, UnableToReadMemory, \"Unable to read memory\", \"unknown memoryReference\")\n\t\treturn\n\t}\n\n\tif args.Count == 0 {\n\t\ts.send(s.makeReadMemoryResponse(request.Request, ref.addr, nil, 0))\n\t\treturn\n\t}\n\n\tendReq := int64(args.Offset + args.Count)\n\n\tstartRead := min(max(int64(args.Offset), 0), ref.size)\n\tendRead := min(max(endReq, 0), ref.size)\n\n\tmemAddr := ref.addr + uint64(startRead)\n\n\treadCount := endRead - startRead\n\tif readCount <= 0 {\n\t\tunreadable := max(args.Count, 0)\n\n\t\ts.send(s.makeReadMemoryResponse(request.Request, memAddr, nil, unreadable))\n\t\treturn\n\t}\n\n\tunreadable := max(int64(args.Count)-readCount, 0)\n\n\tdata, n, err := s.readTargetMemory(memAddr, readCount)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToReadMemory, \"Unable to read memory\", err.Error())\n\t\treturn\n\t}\n\n\tif int64(n) < readCount {\n\t\tunreadable += readCount - int64(n)\n\t}\n\n\ts.send(s.makeReadMemoryResponse(request.Request, memAddr, data, int(unreadable)))\n}\n\nfunc (s *Session) readTargetMemory(addr uint64, count int64) (data []byte, n int, err error) {\n\tif count <= 0 {\n\t\treturn nil, 0, nil\n\t}\n\n\tbuf := make([]byte, count)\n\n\ttgrp, unlock := s.debugger.LockTargetGroup()\n\tdefer unlock()\n\n\tn, err = tgrp.Selected.Memory().ReadMemory(buf, addr)\n\tif err != nil {\n\t\treturn nil, 0, err\n\t}\n\n\tif n > 0 {\n\t\tdata = buf[:n]\n\t}\n\n\treturn data, n, nil\n}\n\nfunc (s *Session) makeReadMemoryResponse(req dap.Request, addr uint64, data []byte, unreadable int) *dap.ReadMemoryResponse {\n\tvar response string\n\tif len(data) > 0 {\n\t\tresponse = base64.StdEncoding.EncodeToString(data)\n\t}\n\n\treturn &dap.ReadMemoryResponse{\n\t\tResponse: *s.newResponse(req),\n\t\tBody: dap.ReadMemoryResponseBody{\n\t\t\tAddress:         fmt.Sprintf(\"%#x\", addr),\n\t\t\tData:            response,\n\t\t\tUnreadableBytes: unreadable,\n\t\t},\n\t}\n}\n\nvar invalidInstruction = dap.DisassembledInstruction{\n\tInstruction: \"invalid instruction\",\n}\n\n// onDisassembleRequest handles 'disassemble' requests.\n// Capability 'supportsDisassembleRequest' is set in 'initialize' response.\nfunc (s *Session) onDisassembleRequest(request *dap.DisassembleRequest) {\n\t// TODO(suzmue): microsoft/vscode#129655 is discussing the difference between\n\t// memory reference and instructionPointerReference, which are currently\n\t// being used interchangeably by vscode.\n\taddr, err := strconv.ParseUint(request.Arguments.MemoryReference, 0, 64)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToDisassemble, \"Unable to disassemble\", err.Error())\n\t\treturn\n\t}\n\n\t// If the requested memory address is an invalid location, return all invalid instructions.\n\t// TODO(suzmue): consider adding fake addresses that would allow us to receive out of bounds\n\t// requests that include valid instructions designated by InstructionOffset or InstructionCount.\n\tif addr == 0 || addr == uint64(math.MaxUint64) {\n\t\tinstructions := make([]dap.DisassembledInstruction, request.Arguments.InstructionCount)\n\t\tfor i := range instructions {\n\t\t\tinstructions[i] = invalidInstruction\n\t\t\tinstructions[i].Address = request.Arguments.MemoryReference\n\t\t}\n\t\tresponse := &dap.DisassembleResponse{\n\t\t\tResponse: *s.newResponse(request.Request),\n\t\t\tBody: dap.DisassembleResponseBody{\n\t\t\t\tInstructions: instructions,\n\t\t\t},\n\t\t}\n\t\ts.send(response)\n\t\treturn\n\t}\n\n\tstart := addr\n\tvar end uint64\n\n\t{\n\t\ttgrp, unlock := s.debugger.LockTargetGroup()\n\t\tmaxInstructionLength := tgrp.Selected.BinInfo().Arch.MaxInstructionLength()\n\n\t\tbyteOffset := request.Arguments.InstructionOffset * maxInstructionLength\n\t\t// Adjust the offset to include instructions before the requested address.\n\t\tif byteOffset < 0 {\n\t\t\tstart = uint64(int(addr) + byteOffset)\n\t\t}\n\t\t// Adjust the number of instructions to include enough instructions after\n\t\t// the requested address.\n\t\tcount := request.Arguments.InstructionCount\n\t\tif byteOffset > 0 {\n\t\t\tcount += byteOffset\n\t\t}\n\t\tend = uint64(int(addr) + count*maxInstructionLength)\n\n\t\t// Make sure the PCs are lined up with instructions.\n\t\tstart, end = alignPCs(tgrp.Selected.BinInfo(), start, end)\n\t\tunlock()\n\t}\n\n\t// Disassemble the instructions\n\tprocInstructions, err := s.debugger.Disassemble(-1, start, end)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToDisassemble, \"Unable to disassemble\", err.Error())\n\t\treturn\n\t}\n\n\t// Find the section of instructions that were requested.\n\tprocInstructions, offset, err := findInstructions(procInstructions, addr, request.Arguments.InstructionOffset, request.Arguments.InstructionCount)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToDisassemble, \"Unable to disassemble\", err.Error())\n\t\treturn\n\t}\n\n\t// Turn the given range of instructions into dap instructions.\n\tinstructions := make([]dap.DisassembledInstruction, request.Arguments.InstructionCount)\n\tlastFile, lastLine := \"\", -1\n\tfor i := range instructions {\n\t\t// i is not in a valid range, use an address that is just before or after\n\t\t// the range. This ensures that it can still be parsed as an int.\n\t\tif i < offset {\n\t\t\t// i is not in a valid range.\n\t\t\tinstructions[i] = invalidInstruction\n\t\t\tinstructions[i].Address = \"0x0\"\n\t\t\tcontinue\n\t\t}\n\t\tif (i - offset) >= len(procInstructions) {\n\t\t\t// i is not in a valid range.\n\t\t\tinstructions[i] = invalidInstruction\n\t\t\tinstructions[i].Address = fmt.Sprintf(\"%#x\", uint64(math.MaxUint64))\n\t\t\tcontinue\n\t\t}\n\t\tinstruction := api.ConvertAsmInstruction(procInstructions[i-offset], s.debugger.AsmInstructionText(&procInstructions[i-offset], proc.GoFlavour))\n\t\tinstructions[i] = dap.DisassembledInstruction{\n\t\t\tAddress:          fmt.Sprintf(\"%#x\", instruction.Loc.PC),\n\t\t\tInstructionBytes: fmt.Sprintf(\"%x\", instruction.Bytes),\n\t\t\tInstruction:      instruction.Text,\n\t\t}\n\t\t// Only set the location on the first instruction for a given line.\n\t\tif instruction.Loc.File != lastFile || instruction.Loc.Line != lastLine {\n\t\t\tinstructions[i].Location = &dap.Source{Path: instruction.Loc.File}\n\t\t\tinstructions[i].Line = instruction.Loc.Line\n\t\t\tlastFile, lastLine = instruction.Loc.File, instruction.Loc.Line\n\t\t}\n\t}\n\n\tresponse := &dap.DisassembleResponse{\n\t\tResponse: *s.newResponse(request.Request),\n\t\tBody: dap.DisassembleResponseBody{\n\t\t\tInstructions: instructions,\n\t\t},\n\t}\n\ts.send(response)\n}\n\nfunc findInstructions(procInstructions []proc.AsmInstruction, addr uint64, instructionOffset, count int) ([]proc.AsmInstruction, int, error) {\n\tref := sort.Search(len(procInstructions), func(i int) bool {\n\t\treturn procInstructions[i].Loc.PC >= addr\n\t})\n\tif ref == len(procInstructions) || procInstructions[ref].Loc.PC != addr {\n\t\treturn nil, -1, errors.New(\"could not find memory reference\")\n\t}\n\t// offset is the number of instructions that should appear before the first instruction\n\t// returned by findInstructions.\n\toffset := 0\n\tif ref+instructionOffset < 0 {\n\t\toffset = -(ref + instructionOffset)\n\t}\n\t// Figure out the index to slice at.\n\tstartIdx := ref + instructionOffset\n\tendIdx := ref + instructionOffset + count\n\tif endIdx <= 0 || startIdx >= len(procInstructions) {\n\t\treturn []proc.AsmInstruction{}, 0, nil\n\t}\n\t// Adjust start and end to be inbounds.\n\tif startIdx < 0 {\n\t\toffset = -startIdx\n\t\tstartIdx = 0\n\t}\n\tif endIdx > len(procInstructions) {\n\t\tendIdx = len(procInstructions)\n\t}\n\treturn procInstructions[startIdx:endIdx], offset, nil\n}\n\nfunc getValidRange(bi *proc.BinaryInfo) (uint64, uint64) {\n\treturn bi.Functions[0].Entry, bi.Functions[len(bi.Functions)-1].End\n}\n\nfunc alignPCs(bi *proc.BinaryInfo, start, end uint64) (uint64, uint64) {\n\t// We want to find the function locations position that would enclose\n\t// the range from start to end.\n\t//\n\t// Example:\n\t//\n\t// 0x0000\tinstruction (func1)\n\t// 0x0004\tinstruction (func1)\n\t// 0x0008\tinstruction (func1)\n\t// 0x000c\tnop\n\t// 0x000e\tnop\n\t// 0x0000\tnop\n\t// 0x0002\tnop\n\t// 0x0004\tinstruction (func2)\n\t// 0x0008\tinstruction (func2)\n\t// 0x000c\tinstruction (func2)\n\t//\n\t// start values:\n\t// < 0x0000\t\t\tat func1.Entry\t=\t0x0000\n\t// 0x0000-0x000b\tat func1.Entry\t=\t0x0000\n\t// 0x000c-0x0003\tat func1.End\t=\t0x000c\n\t// 0x0004-0x000f\tat func2.Entry\t=\t0x0004\n\t// > 0x000f\t\t\tat func2.End\t=\t0x0010\n\t//\n\t// end values:\n\t// < 0x0000\t\t\tat func1.Entry\t=\t0x0000\n\t// 0x0000-0x000b\tat func1.End\t=\t0x0000\n\t// 0x000c-0x0003\tat func2.Entry\t=\t0x000c\n\t// 0x0004-0x000f\tat func2.End\t=\t0x0004\n\t// > 0x000f\t\t\tat func2.End\t=\t0x0004\n\t// Handle start values:\n\tfn := bi.PCToFunc(start)\n\tif fn != nil {\n\t\t// start is in a function.\n\t\tstart = fn.Entry\n\t} else if b, pc := checkOutOfAddressSpace(start, bi); b {\n\t\tstart = pc\n\t} else {\n\t\t// Otherwise it must come after some function.\n\t\ti := sort.Search(len(bi.Functions), func(i int) bool {\n\t\t\tfn := bi.Functions[len(bi.Functions)-(i+1)]\n\t\t\treturn start >= fn.End\n\t\t})\n\t\tstart = bi.Functions[len(bi.Functions)-(i+1)].Entry\n\t}\n\n\t// Handle end values:\n\tif fn := bi.PCToFunc(end); fn != nil {\n\t\t// end is in a function.\n\t\tend = fn.End\n\t} else if b, pc := checkOutOfAddressSpace(end, bi); b {\n\t\tend = pc\n\t} else {\n\t\t// Otherwise it must come before some function.\n\t\ti := sort.Search(len(bi.Functions), func(i int) bool {\n\t\t\tfn := bi.Functions[i]\n\t\t\treturn end < fn.Entry\n\t\t})\n\t\tend = bi.Functions[i].Entry\n\t\tconst limit = 10 * 1024\n\t\tif end-start > limit {\n\t\t\tend = start + limit\n\t\t}\n\t}\n\n\treturn start, end\n}\n\nfunc checkOutOfAddressSpace(pc uint64, bi *proc.BinaryInfo) (bool, uint64) {\n\tentry, end := getValidRange(bi)\n\tif pc < entry {\n\t\treturn true, entry\n\t}\n\tif pc >= end {\n\t\treturn true, end\n\t}\n\treturn false, pc\n}\n\n// onCancelRequest sends a not-yet-implemented error response.\n// Capability 'supportsCancelRequest' is not set 'initialize' response.\nfunc (s *Session) onCancelRequest(request *dap.CancelRequest) {\n\ts.sendNotYetImplementedErrorResponse(request.Request)\n}\n\n// onExceptionInfoRequest handles 'exceptionInfo' requests.\n// Capability 'supportsExceptionInfoRequest' is set in 'initialize' response.\nfunc (s *Session) onExceptionInfoRequest(request *dap.ExceptionInfoRequest) {\n\tgoroutineID := int64(request.Arguments.ThreadId)\n\tvar body dap.ExceptionInfoResponseBody\n\t// Get the goroutine and the current state.\n\tg, err := s.debugger.FindGoroutine(goroutineID)\n\tif err != nil {\n\t\ts.sendErrorResponse(request.Request, UnableToGetExceptionInfo, \"Unable to get exception info\", err.Error())\n\t\treturn\n\t}\n\tif g == nil {\n\t\ts.sendErrorResponse(request.Request, UnableToGetExceptionInfo, \"Unable to get exception info\", fmt.Sprintf(\"could not find goroutine %d\", goroutineID))\n\t\treturn\n\t}\n\tvar bpState *proc.BreakpointState\n\tif g.Thread != nil {\n\t\tbpState = g.Thread.Breakpoint()\n\t}\n\t// Check if this goroutine ID is stopped at a breakpoint.\n\tincludeStackTrace := true\n\tif bpState != nil && bpState.Breakpoint != nil && bpState.Breakpoint.Logical != nil && (bpState.Breakpoint.Logical.Name == proc.FatalThrow || bpState.Breakpoint.Logical.Name == proc.UnrecoveredPanic) {\n\t\tswitch bpState.Breakpoint.Logical.Name {\n\t\tcase proc.FatalThrow:\n\t\t\tbody.ExceptionId = \"fatal error\"\n\t\t\tbody.Description, err = s.throwReason(goroutineID)\n\t\t\tif err != nil {\n\t\t\t\tbody.Description = fmt.Sprintf(\"Error getting throw reason: %s\", err.Error())\n\t\t\t\t// This is not currently working for Go 1.16.\n\t\t\t\tver := goversion.ParseProducer(s.debugger.TargetGoVersion())\n\t\t\t\tif ver.Major == 1 && ver.Minor == 16 {\n\t\t\t\t\tbody.Description = \"Throw reason unavailable, see https://github.com/golang/go/issues/46425\"\n\t\t\t\t}\n\t\t\t}\n\t\tcase proc.UnrecoveredPanic:\n\t\t\tbody.ExceptionId = \"panic\"\n\t\t\t// Attempt to get the value of the panic message.\n\t\t\tbody.Description, err = s.panicReason(goroutineID)\n\t\t\tif err != nil {\n\t\t\t\tbody.Description = fmt.Sprintf(\"Error getting panic message: %s\", err.Error())\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// If this thread is not stopped on a breakpoint, then a runtime error must have occurred.\n\t\t// If we do not have any error saved, or if this thread is not current thread,\n\t\t// return an error.\n\t\tif s.exceptionErr == nil {\n\t\t\ts.sendErrorResponse(request.Request, UnableToGetExceptionInfo, \"Unable to get exception info\", \"no runtime error found\")\n\t\t\treturn\n\t\t}\n\n\t\tstate, err := s.debugger.State( /*nowait*/ true)\n\t\tif err != nil {\n\t\t\ts.sendErrorResponse(request.Request, UnableToGetExceptionInfo, \"Unable to get exception info\", err.Error())\n\t\t\treturn\n\t\t}\n\t\tif s.exceptionErr.Error() != \"next while nexting\" && (state == nil || state.CurrentThread == nil || g.Thread == nil || state.CurrentThread.ID != g.Thread.ThreadID()) {\n\t\t\ts.sendErrorResponse(request.Request, UnableToGetExceptionInfo, \"Unable to get exception info\", fmt.Sprintf(\"no exception found for goroutine %d\", goroutineID))\n\t\t\treturn\n\t\t}\n\t\tbody.ExceptionId = \"runtime error\"\n\t\tbody.Description = s.exceptionErr.Error()\n\t\tif body.Description == \"bad access\" {\n\t\t\tbody.Description = BetterBadAccessError\n\t\t}\n\t\tif body.Description == \"next while nexting\" {\n\t\t\tbody.ExceptionId = \"invalid command\"\n\t\t\tbody.Description = BetterNextWhileNextingError\n\t\t\tincludeStackTrace = false\n\t\t}\n\t}\n\n\tif includeStackTrace {\n\t\tbody.Details = &dap.ExceptionDetails{}\n\t\tframes, err := s.stacktrace(goroutineID, g)\n\t\tif err != nil {\n\t\t\tbody.Details.StackTrace = fmt.Sprintf(\"Error getting stack trace: %s\", err.Error())\n\t\t} else {\n\t\t\tbody.Details.StackTrace = frames\n\t\t}\n\t}\n\tresponse := &dap.ExceptionInfoResponse{\n\t\tResponse: *s.newResponse(request.Request),\n\t\tBody:     body,\n\t}\n\ts.send(response)\n}\n\nfunc (s *Session) stacktrace(goroutineID int64, g *proc.G) (string, error) {\n\tframes, err := s.debugger.Stacktrace(goroutineID, s.args.StackTraceDepth, 0)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tapiFrames, err := s.debugger.ConvertStacktrace(frames, nil)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tvar buf bytes.Buffer\n\tfmt.Fprintln(&buf, \"Stack:\")\n\tuserLoc := g.UserCurrent()\n\tuserFuncPkg := fnPackageName(&userLoc)\n\tapi.PrintStack(s.toClientPath, &buf, apiFrames, \"\\t\", false, api.StackTraceColors{}, func(s api.Stackframe) bool {\n\t\t// Include all stack frames if the stack trace is for a system goroutine,\n\t\t// otherwise, skip runtime stack frames.\n\t\tif userFuncPkg == \"runtime\" {\n\t\t\treturn true\n\t\t}\n\t\treturn s.Location.Function != nil && !strings.HasPrefix(s.Location.Function.Name(), \"runtime.\")\n\t})\n\treturn buf.String(), nil\n}\n\nfunc (s *Session) throwReason(goroutineID int64) (string, error) {\n\treturn s.getExprString(\"s\", goroutineID, 0)\n}\n\nfunc (s *Session) panicReason(goroutineID int64) (string, error) {\n\treturn s.getExprString(\"(*msgs).arg.(data)\", goroutineID, 0)\n}\n\nfunc (s *Session) getExprString(expr string, goroutineID int64, frame int) (string, error) {\n\texprVar, err := s.debugger.EvalVariableInScope(goroutineID, frame, 0, expr, DefaultLoadConfig)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif exprVar.Value == nil {\n\t\treturn \"\", exprVar.Unreadable\n\t}\n\treturn exprVar.Value.String(), nil\n}\n\n// sendErrorResponseWithOpts offers configuration options.\n//\n//\tshowUser - if true, the error will be shown to the user (e.g. via a visible pop-up)\nfunc (s *Session) sendErrorResponseWithOpts(request dap.Request, id int, summary, details string, showUser bool) {\n\ter := &dap.ErrorResponse{Response: *s.newResponse(request)}\n\ter.Success = false\n\ter.Message = summary\n\ter.Body.Error = &dap.ErrorMessage{\n\t\tId:       id,\n\t\tFormat:   fmt.Sprintf(\"%s: %s\", summary, details),\n\t\tShowUser: showUser,\n\t}\n\ts.config.log.Debug(er.Body.Error.Format)\n\ts.send(er)\n}\n\n// sendErrorResponse sends an error response with showUser disabled (default).\nfunc (s *Session) sendErrorResponse(request dap.Request, id int, summary, details string) {\n\ts.sendErrorResponseWithOpts(request, id, summary, details, false /*showUser*/)\n}\n\n// sendShowUserErrorResponse sends an error response with showUser enabled.\nfunc (s *Session) sendShowUserErrorResponse(request dap.Request, id int, summary, details string) {\n\ts.sendErrorResponseWithOpts(request, id, summary, details, true /*showUser*/)\n}\n\n// sendInternalErrorResponse sends an \"internal error\" response back to the client.\n// We only take a seq here because we don't want to make assumptions about the\n// kind of message received by the server that this error is a reply to.\nfunc (s *Session) sendInternalErrorResponse(seq int, details string) {\n\ter := &dap.ErrorResponse{}\n\ter.Type = \"response\"\n\ter.Seq = s.getResponseSeq()\n\ter.RequestSeq = seq\n\ter.Success = false\n\ter.Message = \"Internal Error\"\n\ter.Body.Error = &dap.ErrorMessage{\n\t\tId:     InternalError,\n\t\tFormat: fmt.Sprintf(\"%s: %s\", er.Message, details),\n\t}\n\ts.config.log.Debug(er.Body.Error.Format)\n\ts.send(er)\n}\n\nfunc (s *Session) sendUnsupportedErrorResponse(request dap.Request) {\n\ts.sendErrorResponse(request, UnsupportedCommand, \"Unsupported command\",\n\t\tfmt.Sprintf(\"cannot process %q request\", request.Command))\n}\n\nfunc (s *Session) sendNotYetImplementedErrorResponse(request dap.Request) {\n\ts.sendErrorResponse(request, NotYetImplemented, \"Not yet implemented\",\n\t\tfmt.Sprintf(\"cannot process %q request\", request.Command))\n}\n\nfunc (s *Session) getResponseSeq() int {\n\treturn int(s.seq.Add(1))\n}\n\nfunc (s *Session) newResponse(request dap.Request) *dap.Response {\n\treturn &dap.Response{\n\t\tProtocolMessage: dap.ProtocolMessage{\n\t\t\tSeq:  s.getResponseSeq(),\n\t\t\tType: \"response\",\n\t\t},\n\t\tCommand:    request.Command,\n\t\tRequestSeq: request.Seq,\n\t\tSuccess:    true,\n\t}\n}\n\nfunc (s *Session) newEvent(event string) *dap.Event {\n\treturn &dap.Event{\n\t\tProtocolMessage: dap.ProtocolMessage{\n\t\t\tSeq:  s.getResponseSeq(),\n\t\t\tType: \"event\",\n\t\t},\n\t\tEvent: event,\n\t}\n}\n\nconst BetterBadAccessError = `invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation]\nUnable to propagate EXC_BAD_ACCESS signal to target process and panic (see https://github.com/go-delve/delve/issues/852)`\n\nconst BetterNextWhileNextingError = `Unable to step while the previous step is interrupted by a breakpoint.\nUse 'Continue' to resume the original step command.`\n\nfunc (s *Session) resetHandlesForStoppedEvent() {\n\ts.stackFrameHandles.reset()\n\ts.variableHandles.reset()\n\ts.referencesCollection.reset()\n\ts.exceptionErr = nil\n}\n\nfunc processExited(state *api.DebuggerState, err error) bool {\n\tvar errProcessExited proc.ErrProcessExited\n\tisexited := errors.As(err, &errProcessExited)\n\treturn isexited || err == nil && state.Exited\n}\n\nfunc (s *Session) setRunningCmd(running bool) {\n\ts.runningMu.Lock()\n\tdefer s.runningMu.Unlock()\n\ts.runningCmd = running\n}\n\nfunc (s *Session) isRunningCmd() bool {\n\ts.runningMu.Lock()\n\tdefer s.runningMu.Unlock()\n\treturn s.runningCmd\n}\n\nfunc (s *Session) setHaltRequested(requested bool) {\n\ts.haltMu.Lock()\n\tdefer s.haltMu.Unlock()\n\ts.haltRequested = requested\n}\n\nfunc (s *Session) checkHaltRequested() bool {\n\ts.haltMu.Lock()\n\tdefer s.haltMu.Unlock()\n\treturn s.haltRequested\n}\n\n// resumeOnce is a helper function to resume the execution\n// of the target when the program is halted.\nfunc (s *Session) resumeOnce(command string, allowNextStateChange *syncflag) (bool, *api.DebuggerState, error) {\n\t// No other goroutines should be able to try to resume\n\t// or halt execution while this goroutine is resuming\n\t// execution, so we do not miss those events.\n\tasyncSetupDone := make(chan struct{}, 1)\n\tdefer closeIfOpen(asyncSetupDone)\n\ts.changeStateMu.Lock()\n\tgo func() {\n\t\tdefer s.changeStateMu.Unlock()\n\t\tdefer allowNextStateChange.raise()\n\t\t<-asyncSetupDone\n\t}()\n\n\t// There may have been a manual halt while the program was\n\t// stopped. If this happened, do not resume execution of\n\t// the program.\n\tif s.checkHaltRequested() {\n\t\tstate, err := s.debugger.State(false)\n\t\treturn false, state, err\n\t}\n\tstate, err := s.debugger.Command(&api.DebuggerCommand{Name: command, WithEvents: true}, asyncSetupDone, s.conn.closedChan, s.convertDebuggerEvent)\n\treturn true, state, err\n}\n\n// runUntilStopAndNotify runs a debugger command until it stops on\n// termination, error, breakpoint, etc., when an appropriate\n// event needs to be sent to the client. allowNextStateChange is\n// a channel that will be closed to signal that an\n// asynchronous command has completed setup or was interrupted\n// due to an error, so the server is ready to receive new requests.\nfunc (s *Session) runUntilStopAndNotify(command string, allowNextStateChange *syncflag) {\n\tstate, err := s.runUntilStop(command, allowNextStateChange)\n\n\tif s.conn.isClosed() {\n\t\ts.config.log.Debugf(\"connection %d closed - stopping %q command\", s.id, command)\n\t\treturn\n\t}\n\n\tif processExited(state, err) {\n\t\ts.preTerminatedWG.Wait()\n\t\ts.send(&dap.TerminatedEvent{Event: *s.newEvent(\"terminated\")})\n\t\treturn\n\t}\n\n\tstopReason := s.debugger.StopReason()\n\tfile, line := \"?\", -1\n\tif state != nil && state.CurrentThread != nil {\n\t\tfile, line = state.CurrentThread.File, state.CurrentThread.Line\n\t}\n\ts.config.log.Debugf(\"%q command stopped - reason %q, location %s:%d\", command, stopReason, file, line)\n\n\ts.resetHandlesForStoppedEvent()\n\tstopped := &dap.StoppedEvent{Event: *s.newEvent(\"stopped\")}\n\tstopped.Body.AllThreadsStopped = true\n\n\tif err == nil {\n\t\tif stopReason == proc.StopManual {\n\t\t\tif err := s.debugger.CancelNext(); err != nil {\n\t\t\t\ts.config.log.Error(err)\n\t\t\t} else {\n\t\t\t\tstate.NextInProgress = false\n\t\t\t}\n\t\t}\n\t\tstopped.Body.ThreadId = int(stoppedGoroutineID(state))\n\n\t\tswitch stopReason {\n\t\tcase proc.StopNextFinished:\n\t\t\tstopped.Body.Reason = \"step\"\n\t\tcase proc.StopManual: // triggered by halt\n\t\t\tstopped.Body.Reason = \"pause\"\n\t\tcase proc.StopUnknown: // can happen while terminating\n\t\t\tstopped.Body.Reason = \"unknown\"\n\t\tcase proc.StopWatchpoint:\n\t\t\tstopped.Body.Reason = \"data breakpoint\"\n\t\tcase proc.StopSharedLibLoaded:\n\t\t\tstopped.Body.Reason = \"breakpoint\"\n\t\t\tstopped.Body.Description = proc.StopSharedLibLoaded.String()\n\t\tdefault:\n\t\t\tstopped.Body.Reason = \"breakpoint\"\n\t\t\tgoid, bp := s.stoppedOnBreakpointGoroutineID(state)\n\t\t\tstopped.Body.ThreadId = int(goid)\n\t\t\tif bp != nil {\n\t\t\t\tswitch bp.Name {\n\t\t\t\tcase proc.FatalThrow:\n\t\t\t\t\tstopped.Body.Reason = \"exception\"\n\t\t\t\t\tstopped.Body.Description = \"fatal error\"\n\t\t\t\t\tstopped.Body.Text, _ = s.throwReason(int64(stopped.Body.ThreadId))\n\t\t\t\tcase proc.UnrecoveredPanic:\n\t\t\t\t\tstopped.Body.Reason = \"exception\"\n\t\t\t\t\tstopped.Body.Description = \"panic\"\n\t\t\t\t\tstopped.Body.Text, _ = s.panicReason(int64(stopped.Body.ThreadId))\n\t\t\t\t}\n\t\t\t\tif strings.HasPrefix(bp.Name, functionBpPrefix) {\n\t\t\t\t\tstopped.Body.Reason = \"function breakpoint\"\n\t\t\t\t}\n\t\t\t\tif strings.HasPrefix(bp.Name, instructionBpPrefix) {\n\t\t\t\t\tstopped.Body.Reason = \"instruction breakpoint\"\n\t\t\t\t}\n\t\t\t\t// Filter out internal delve breakpoints (panic, fatal, hardcoded, etc.)\n\t\t\t\tif bp.Name != proc.HardcodedBreakpoint {\n\t\t\t\t\tstopped.Body.HitBreakpointIds = []int{bp.ID}\n\t\t\t\t} else {\n\t\t\t\t\tstopped.Body.HitBreakpointIds = []int{}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Override the stop reason if there was a manual stop request.\n\t\t// TODO(suzmue): move this logic into the runUntilStop command\n\t\t// so that the stop reason is determined by that function which\n\t\t// has all the context.\n\t\tif stopped.Body.Reason != \"exception\" && s.checkHaltRequested() {\n\t\t\ts.config.log.Debugf(\"manual halt requested, stop reason %q converted to \\\"pause\\\"\", stopped.Body.Reason)\n\t\t\tstopped.Body.Reason = \"pause\"\n\t\t\tstopped.Body.HitBreakpointIds = []int{}\n\t\t}\n\t} else {\n\t\ts.exceptionErr = err\n\t\ts.config.log.Error(\"runtime error: \", err)\n\t\tstopped.Body.Reason = \"exception\"\n\t\tstopped.Body.Description = \"runtime error\"\n\t\tstopped.Body.Text = err.Error()\n\t\t// Special case in the spirit of https://github.com/microsoft/vscode-go/issues/1903\n\t\tif stopped.Body.Text == \"bad access\" {\n\t\t\tstopped.Body.Text = BetterBadAccessError\n\t\t}\n\t\tif stopped.Body.Text == \"next while nexting\" {\n\t\t\tstopped.Body.Description = \"invalid command\"\n\t\t\tstopped.Body.Text = BetterNextWhileNextingError\n\t\t\ts.logToConsole(fmt.Sprintf(\"%s: %s\", stopped.Body.Description, stopped.Body.Text))\n\t\t}\n\n\t\tstate, err := s.debugger.State( /*nowait*/ true)\n\t\tif err == nil {\n\t\t\tstopped.Body.ThreadId = int(stoppedGoroutineID(state))\n\t\t}\n\t}\n\n\t// NOTE: If we happen to be responding to another request with an is-running\n\t// error while this one completes, it is possible that the error response\n\t// will arrive after this stopped event.\n\ts.send(stopped)\n\n\t// Send an output event with more information if next is in progress.\n\tif state != nil && state.NextInProgress {\n\t\ts.logToConsole(\"Step interrupted by a breakpoint. Use 'Continue' to resume the original step command.\")\n\t}\n}\n\nfunc (s *Session) runUntilStop(command string, allowNextStateChange *syncflag) (*api.DebuggerState, error) {\n\t// Clear any manual stop requests that came in before we started running.\n\ts.setHaltRequested(false)\n\n\ts.setRunningCmd(true)\n\tdefer s.setRunningCmd(false)\n\n\tvar state *api.DebuggerState\n\tvar err error\n\tfor s.isRunningCmd() {\n\t\tstate, err = resumeOnceAndCheckStop(s, command, allowNextStateChange)\n\t\tcommand = api.DirectionCongruentContinue\n\t}\n\treturn state, err\n}\n\n// Make this a var, so it can be stubbed in testing.\nvar resumeOnceAndCheckStop = func(s *Session, command string, allowNextStateChange *syncflag) (*api.DebuggerState, error) {\n\treturn s.resumeOnceAndCheckStop(command, allowNextStateChange)\n}\n\nfunc (s *Session) resumeOnceAndCheckStop(command string, allowNextStateChange *syncflag) (*api.DebuggerState, error) {\n\tresumed, state, err := s.resumeOnce(command, allowNextStateChange)\n\t// We should not try to process the log points if the program was not\n\t// resumed or there was an error.\n\tif !resumed || processExited(state, err) || state == nil || err != nil || s.conn.isClosed() {\n\t\ts.setRunningCmd(false)\n\t\treturn state, err\n\t}\n\n\ts.handleLogPoints(state)\n\tgsOnBp := s.stoppedGs(state)\n\n\tswitch s.debugger.StopReason() {\n\tcase proc.StopBreakpoint, proc.StopManual:\n\t\t// Make sure a real manual stop was requested or a real breakpoint was hit.\n\t\tif len(gsOnBp) > 0 || s.checkHaltRequested() {\n\t\t\ts.setRunningCmd(false)\n\t\t}\n\tdefault:\n\t\ts.setRunningCmd(false)\n\t}\n\n\t// Stepping a single instruction will never require continuing again.\n\tif command == api.StepInstruction || command == api.ReverseStepInstruction {\n\t\ts.setRunningCmd(false)\n\t}\n\n\treturn state, err\n}\n\nfunc (s *Session) handleLogPoints(state *api.DebuggerState) {\n\tfor _, th := range state.Threads {\n\t\tif bp := th.Breakpoint; bp != nil {\n\t\t\ts.logBreakpointMessage(bp, th.GoroutineID)\n\t\t}\n\t}\n}\n\nfunc (s *Session) stoppedGs(state *api.DebuggerState) (gs []int64) {\n\t// Check the current thread first. There may be no selected goroutine.\n\tif state.CurrentThread.Breakpoint != nil && !state.CurrentThread.Breakpoint.Tracepoint {\n\t\tgs = append(gs, state.CurrentThread.GoroutineID)\n\t}\n\tif s.debugger.StopReason() == proc.StopHardcodedBreakpoint {\n\t\tgs = append(gs, stoppedGoroutineID(state))\n\t}\n\tfor _, th := range state.Threads {\n\t\t// Some threads may be stopped on a hardcoded breakpoint.\n\t\t// TODO(suzmue): This is a workaround for detecting hard coded breakpoints,\n\t\t// though this check is likely not sufficient. It would be better to resolve\n\t\t// this in the debugger layer instead.\n\t\tif th.Function.Name() == \"runtime.breakpoint\" {\n\t\t\tgs = append(gs, th.GoroutineID)\n\t\t\tcontinue\n\t\t}\n\t\t// We already added the current thread if it had a breakpoint.\n\t\tif th.ID == state.CurrentThread.ID {\n\t\t\tcontinue\n\t\t}\n\t\tif bp := th.Breakpoint; bp != nil {\n\t\t\tif !th.Breakpoint.Tracepoint {\n\t\t\t\tgs = append(gs, th.GoroutineID)\n\t\t\t}\n\t\t}\n\t}\n\treturn gs\n}\n\nfunc (s *Session) logBreakpointMessage(bp *api.Breakpoint, goid int64) bool {\n\tif !bp.Tracepoint {\n\t\treturn false\n\t}\n\tif lMsg, ok := bp.UserData.(logMessage); ok {\n\t\tmsg := lMsg.evaluate(s, goid)\n\t\ts.send(&dap.OutputEvent{\n\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\tBody: dap.OutputEventBody{\n\t\t\t\tCategory: \"stdout\",\n\t\t\t\tOutput:   fmt.Sprintf(\"> [Go %d]: %s\\n\", goid, msg),\n\t\t\t\tSource: &dap.Source{\n\t\t\t\t\tPath: s.toClientPath(bp.File),\n\t\t\t\t},\n\t\t\t\tLine: bp.Line,\n\t\t\t},\n\t\t})\n\t}\n\treturn true\n}\n\nfunc (msg *logMessage) evaluate(s *Session, goid int64) string {\n\tevaluated := make([]any, len(msg.args))\n\tfor i := range msg.args {\n\t\texprVar, err := s.debugger.EvalVariableInScope(goid, 0, 0, msg.args[i], DefaultLoadConfig)\n\t\tif err != nil {\n\t\t\tevaluated[i] = fmt.Sprintf(\"{eval err: %e}\", err)\n\t\t\tcontinue\n\t\t}\n\t\tevaluated[i], _ = s.convertVariableWithOpts(exprVar, \"\", skipRef|showFullValue)\n\t}\n\treturn fmt.Sprintf(msg.format, evaluated...)\n}\n\nfunc (s *Session) toClientPath(path string) string {\n\tif len(s.args.substitutePathServerToClient) == 0 {\n\t\treturn path\n\t}\n\tclientPath := locspec.SubstitutePath(path, s.args.substitutePathServerToClient)\n\tif clientPath != path {\n\t\ts.config.log.Debugf(\"server path=%s converted to client path=%s\\n\", path, clientPath)\n\t}\n\treturn clientPath\n}\n\nfunc (s *Session) toServerPath(path string) string {\n\tif len(s.args.substitutePathClientToServer) == 0 {\n\t\treturn path\n\t}\n\tserverPath := locspec.SubstitutePath(path, s.args.substitutePathClientToServer)\n\tif serverPath != path {\n\t\ts.config.log.Debugf(\"client path=%s converted to server path=%s\\n\", path, serverPath)\n\t}\n\treturn serverPath\n}\n\nfunc (s *Session) convertDebuggerEvent(event *proc.Event) {\n\tswitch event.Kind {\n\tcase proc.EventBinaryInfoDownload:\n\t\ts.send(&dap.OutputEvent{\n\t\t\tEvent: *s.newEvent(\"output\"),\n\t\t\tBody: dap.OutputEventBody{\n\t\t\t\tOutput:   fmt.Sprintf(\"Download debug info for %s: %s (pause again to cancel)\\n\", event.BinaryInfoDownloadEventDetails.ImagePath, event.BinaryInfoDownloadEventDetails.Progress),\n\t\t\t\tCategory: \"console\",\n\t\t\t},\n\t\t})\n\tcase proc.EventBreakpointMaterialized:\n\t\tbp := api.ConvertLogicalBreakpoint(event.Breakpoint)\n\t\tpath := s.toClientPath(bp.File)\n\t\ts.send(&dap.BreakpointEvent{\n\t\t\tEvent: *s.newEvent(\"breakpoint\"),\n\t\t\tBody: dap.BreakpointEventBody{\n\t\t\t\tReason: \"changed\",\n\t\t\t\tBreakpoint: dap.Breakpoint{\n\t\t\t\t\tVerified: true,\n\t\t\t\t\tId:       bp.ID,\n\t\t\t\t\tLine:     bp.Line,\n\t\t\t\t\tSource:   &dap.Source{Name: filepath.Base(path), Path: path},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\tcase proc.EventProcessSpawned:\n\t\ts.send(&dap.ProcessEvent{\n\t\t\tEvent: *s.newEvent(\"process\"),\n\t\t\tBody: dap.ProcessEventBody{\n\t\t\t\tName:            event.Cmdline,\n\t\t\t\tSystemProcessId: event.PID,\n\t\t\t\tIsLocalProcess:  true,\n\t\t\t},\n\t\t})\n\t}\n}\n\ntype logMessage struct {\n\tformat string\n\targs   []string\n}\n\n// parseLogPoint parses a log message according to the DAP spec:\n//\n//\t\"Expressions within {} are interpolated.\"\nfunc parseLogPoint(msg string) (bool, *logMessage, error) {\n\t// Note: All braces *must* come in pairs, even those within an\n\t// expression to be interpolated.\n\t// TODO(suzmue): support individual braces in string values in\n\t// eval expressions.\n\tvar args []string\n\n\tvar isArg bool\n\tvar formatSlice, argSlice []rune\n\tbraceCount := 0\n\tfor _, r := range msg {\n\t\tif isArg {\n\t\t\tswitch r {\n\t\t\tcase '}':\n\t\t\t\tif braceCount--; braceCount == 0 {\n\t\t\t\t\targStr := strings.TrimSpace(string(argSlice))\n\t\t\t\t\tif len(argStr) == 0 {\n\t\t\t\t\t\treturn false, nil, errors.New(\"empty evaluation string\")\n\t\t\t\t\t}\n\t\t\t\t\targs = append(args, argStr)\n\t\t\t\t\tformatSlice = append(formatSlice, '%', 's')\n\t\t\t\t\tisArg = false\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\tcase '{':\n\t\t\t\tbraceCount += 1\n\t\t\t}\n\t\t\targSlice = append(argSlice, r)\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch r {\n\t\tcase '}':\n\t\t\treturn false, nil, errors.New(\"invalid log point format, unexpected '}'\")\n\t\tcase '{':\n\t\t\tif braceCount++; braceCount == 1 {\n\t\t\t\tisArg, argSlice = true, []rune{}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tformatSlice = append(formatSlice, r)\n\t}\n\tif isArg {\n\t\treturn false, nil, errors.New(\"invalid log point format\")\n\t}\n\tif len(formatSlice) == 0 {\n\t\treturn false, nil, nil\n\t}\n\treturn true, &logMessage{\n\t\tformat: string(formatSlice),\n\t\targs:   args,\n\t}, nil\n}\n\ntype syncflag struct {\n\tmu   sync.Mutex\n\tcond *sync.Cond\n\tflag bool\n}\n\nfunc newSyncflag() *syncflag {\n\tr := &syncflag{\n\t\tflag: false,\n\t}\n\tr.cond = sync.NewCond(&r.mu)\n\treturn r\n}\n\nfunc (s *syncflag) wait() {\n\ts.mu.Lock()\n\tfor !s.flag {\n\t\ts.cond.Wait()\n\t}\n\ts.mu.Unlock()\n}\n\nfunc (s *syncflag) raise() {\n\ts.mu.Lock()\n\ts.flag = true\n\ts.mu.Unlock()\n\ts.cond.Broadcast()\n}\n\nfunc formatVar(v *proc.Variable) string {\n\treturn api.ConvertVar(v).StringWithOptions(\"\", \"\", api.PrettyShortenType)\n}\n"
  },
  {
    "path": "service/dap/server_test.go",
    "content": "package dap\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"cmp\"\n\t\"crypto/sha256\"\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"math/rand\"\n\t\"net\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"slices\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n\t\"github.com/go-delve/delve/service/dap/daptest\"\n\t\"github.com/go-delve/delve/service/debugger\"\n\t\"github.com/google/go-dap\"\n)\n\nconst (\n\tstopOnEntry bool = true\n\thasChildren bool = true\n\tnoChildren  bool = false\n)\n\nconst (\n\tlocalsScope  = 1000\n\tglobalsScope = 1001\n)\n\nvar testBackend string\n\nfunc TestMain(m *testing.M) {\n\tlogOutputVal := \"\"\n\tif _, isTeamCityTest := os.LookupEnv(\"TEAMCITY_VERSION\"); isTeamCityTest {\n\t\tlogOutputVal = \"debugger,dap\"\n\t}\n\tvar logOutput string\n\tflag.StringVar(&logOutput, \"log-output\", logOutputVal, \"configures log output\")\n\tflag.Parse()\n\tlogflags.Setup(logOutput != \"\", logOutput, \"\")\n\tprotest.DefaultTestBackend(&testBackend)\n\tprotest.RunTestsWithFixtures(m)\n}\n\n// name is for _fixtures/<name>.go\nfunc runTest(t *testing.T, name string, test func(c *daptest.Client, f protest.Fixture)) {\n\trunTestBuildFlags(t, name, test, protest.AllNonOptimized, false)\n}\n\n// name is for _fixtures/<name>.go\nfunc runTestBuildFlags(t *testing.T, name string, test func(c *daptest.Client, f protest.Fixture), buildFlags protest.BuildFlags, defaultDebugInfoDirs bool) {\n\tfixture := protest.BuildFixture(t, name, buildFlags)\n\n\t// Start the DAP server.\n\tserverStopped := make(chan struct{})\n\tclient := startDAPServerWithClient(t, defaultDebugInfoDirs, serverStopped)\n\tdefer client.Close()\n\n\ttest(client, fixture)\n\t<-serverStopped\n}\n\nfunc startDAPServerWithClient(t *testing.T, defaultDebugInfoDirs bool, serverStopped chan struct{}) *daptest.Client {\n\tserver, _ := startDAPServer(t, defaultDebugInfoDirs, serverStopped)\n\tclient := daptest.NewClient(server.config.Listener.Addr().String())\n\treturn client\n}\n\n// Starts an empty server and a stripped down config just to establish a client connection.\n// To mock a server created by dap.NewServer(config) or serving dap.NewSession(conn, config, debugger)\n// set those arg fields manually after the server creation.\nfunc startDAPServer(t *testing.T, defaultDebugInfoDirs bool, serverStopped chan struct{}) (server *Server, forceStop chan struct{}) {\n\tt.Helper()\n\t// Start the DAP server.\n\tlistener, err := net.Listen(\"tcp\", \":0\")\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdebugInfoDirs := []string{}\n\tif defaultDebugInfoDirs {\n\t\tdebugInfoDirs = []string{\"/usr/lib/debug/.build-id\"}\n\t}\n\tdisconnectChan := make(chan struct{})\n\tserver = NewServer(&service.Config{\n\t\tListener:       listener,\n\t\tDisconnectChan: disconnectChan,\n\t\tDebugger:       debugger.Config{DebugInfoDirectories: debugInfoDirs},\n\t})\n\tserver.Run()\n\t// Give server time to start listening for clients\n\ttime.Sleep(100 * time.Millisecond)\n\n\t// Run a goroutine that stops the server when disconnectChan is signaled.\n\t// This helps us test that certain events cause the server to stop as\n\t// expected.\n\tforceStop = make(chan struct{})\n\tgo func() {\n\t\tdefer func() {\n\t\t\tif serverStopped != nil {\n\t\t\t\tclose(serverStopped)\n\t\t\t}\n\t\t}()\n\t\tselect {\n\t\tcase <-disconnectChan:\n\t\t\tt.Log(\"server stop triggered internally\")\n\t\tcase <-forceStop:\n\t\t\tt.Log(\"server stop triggered externally\")\n\t\t}\n\t\tserver.Stop()\n\t}()\n\n\treturn server, forceStop\n}\n\nfunc verifyServerStopped(t *testing.T, server *Server) {\n\tt.Helper()\n\tif server.listener != nil {\n\t\tif server.listener.Close() == nil {\n\t\t\tt.Error(\"server should have closed listener after shutdown\")\n\t\t}\n\t}\n\tverifySessionStopped(t, server.session)\n}\n\nfunc verifySessionStopped(t *testing.T, session *Session) {\n\tt.Helper()\n\tif session == nil {\n\t\treturn\n\t}\n\tif session.conn == nil {\n\t\tt.Error(\"session must always have a set connection\")\n\t}\n\tverifyConnStopped(t, session.conn)\n\tif !session.disconnected {\n\t\tt.Error(\"session should have disconnected set after shutdown\")\n\t}\n\tif session.binaryToRemove != \"\" {\n\t\tt.Error(\"session should have no binary to remove after shutdown\")\n\t}\n}\n\nfunc verifyConnStopped(t *testing.T, conn io.ReadWriteCloser) {\n\tt.Helper()\n\tif conn.Close() == nil {\n\t\tt.Error(\"client connection should be closed after shutdown\")\n\t}\n}\n\nfunc TestStopNoClient(t *testing.T) {\n\tfor name, triggerStop := range map[string]func(s *Server, forceStop chan struct{}){\n\t\t\"force\":        func(s *Server, forceStop chan struct{}) { close(forceStop) },\n\t\t\"accept error\": func(s *Server, forceStop chan struct{}) { s.config.Listener.Close() },\n\t} {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\tserverStopped := make(chan struct{})\n\t\t\tserver, forceStop := startDAPServer(t, false, serverStopped)\n\t\t\ttriggerStop(server, forceStop)\n\t\t\t<-serverStopped\n\t\t\tverifyServerStopped(t, server)\n\t\t})\n\t}\n}\n\nfunc TestStopNoTarget(t *testing.T) {\n\tfor name, triggerStop := range map[string]func(c *daptest.Client, forceStop chan struct{}){\n\t\t\"force\":      func(c *daptest.Client, forceStop chan struct{}) { close(forceStop) },\n\t\t\"read error\": func(c *daptest.Client, forceStop chan struct{}) { c.Close() },\n\t\t\"disconnect\": func(c *daptest.Client, forceStop chan struct{}) { c.DisconnectRequest() },\n\t} {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\tserverStopped := make(chan struct{})\n\t\t\tserver, forceStop := startDAPServer(t, false, serverStopped)\n\t\t\tclient := daptest.NewClient(server.config.Listener.Addr().String())\n\t\t\tdefer client.Close()\n\n\t\t\tclient.InitializeRequest()\n\t\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\t\t\ttriggerStop(client, forceStop)\n\t\t\t<-serverStopped\n\t\t\tverifyServerStopped(t, server)\n\t\t})\n\t}\n}\n\nfunc TestStopWithTarget(t *testing.T) {\n\tfor name, triggerStop := range map[string]func(c *daptest.Client, forceStop chan struct{}){\n\t\t\"force\":                  func(c *daptest.Client, forceStop chan struct{}) { close(forceStop) },\n\t\t\"read error\":             func(c *daptest.Client, forceStop chan struct{}) { c.Close() },\n\t\t\"disconnect before exit\": func(c *daptest.Client, forceStop chan struct{}) { c.DisconnectRequest() },\n\t\t\"disconnect after  exit\": func(c *daptest.Client, forceStop chan struct{}) {\n\t\t\tc.ContinueRequest(1)\n\t\t\tc.ExpectContinueResponse(t)\n\t\t\tc.ExpectTerminatedEvent(t)\n\t\t\tc.DisconnectRequest()\n\t\t},\n\t} {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\tserverStopped := make(chan struct{})\n\t\t\tserver, forceStop := startDAPServer(t, false, serverStopped)\n\t\t\tclient := daptest.NewClient(server.config.Listener.Addr().String())\n\t\t\tdefer client.Close()\n\n\t\t\tclient.InitializeRequest()\n\t\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\t\t\tfixture := protest.BuildFixture(t, \"increment\", protest.AllNonOptimized)\n\t\t\tclient.LaunchRequest(\"debug\", fixture.Source, stopOnEntry)\n\t\t\tclient.ExpectProcessEvent(t)\n\t\t\tclient.ExpectInitializedEvent(t)\n\t\t\tclient.ExpectLaunchResponse(t)\n\t\t\ttriggerStop(client, forceStop)\n\t\t\t<-serverStopped\n\t\t\tverifyServerStopped(t, server)\n\t\t})\n\t}\n}\n\nfunc TestSessionStop(t *testing.T) {\n\tverifySessionState := func(t *testing.T, s *Session, binaryToRemoveSet bool, debuggerSet bool, disconnectChanSet bool) {\n\t\tt.Helper()\n\t\tif binaryToRemoveSet && s.binaryToRemove == \"\" || !binaryToRemoveSet && s.binaryToRemove != \"\" {\n\t\t\tt.Errorf(\"binaryToRemove: got %s, want set=%v\", s.binaryToRemove, binaryToRemoveSet)\n\t\t}\n\t\tconnected := s.debugger != nil && !s.disconnected\n\t\tif debuggerSet != connected {\n\t\t\tt.Errorf(\"debugger: got debugger!=nil: %v disconnected: %v, want set=%v\", s.debugger != nil, s.disconnected, debuggerSet)\n\t\t}\n\t\tif disconnectChanSet && s.config.DisconnectChan == nil || !disconnectChanSet && s.config.DisconnectChan != nil {\n\t\t\tt.Errorf(\"disconnectChan: got %v, want set=%v\", s.config.DisconnectChan, disconnectChanSet)\n\t\t}\n\t}\n\tfor name, stopSession := range map[string]func(s *Session, c *daptest.Client, serveDone chan struct{}){\n\t\t\"force\": func(s *Session, c *daptest.Client, serveDone chan struct{}) {\n\t\t\ts.Close()\n\t\t\t<-serveDone\n\t\t\tverifySessionState(t, s, false /*binaryToRemoveSet*/, false /*debuggerSet*/, false /*disconnectChanSet*/)\n\t\t},\n\t\t\"read error\": func(s *Session, c *daptest.Client, serveDone chan struct{}) {\n\t\t\tc.Close()\n\t\t\t<-serveDone\n\t\t\tverifyConnStopped(t, s.conn)\n\t\t\tverifySessionState(t, s, true /*binaryToRemoveSet*/, true /*debuggerSet*/, false /*disconnectChanSet*/)\n\t\t\ts.Close()\n\t\t},\n\t\t\"disconnect before exit\": func(s *Session, c *daptest.Client, serveDone chan struct{}) {\n\t\t\tc.DisconnectRequest()\n\t\t\t<-serveDone\n\t\t\tverifyConnStopped(t, s.conn)\n\t\t\tverifySessionState(t, s, true /*binaryToRemoveSet*/, false /*debuggerSet*/, false /*disconnectChanSet*/)\n\t\t\ts.Close()\n\t\t},\n\t\t\"disconnect after exit\": func(s *Session, c *daptest.Client, serveDone chan struct{}) {\n\t\t\tc.ContinueRequest(1)\n\t\t\tc.ExpectContinueResponse(t)\n\t\t\tc.ExpectTerminatedEvent(t)\n\t\t\tc.DisconnectRequest()\n\t\t\t<-serveDone\n\t\t\tverifyConnStopped(t, s.conn)\n\t\t\tverifySessionState(t, s, true /*binaryToRemoveSet*/, false /*debuggerSet*/, false /*disconnectChanSet*/)\n\t\t\ts.Close()\n\t\t},\n\t} {\n\t\tt.Run(name, func(t *testing.T) {\n\t\t\tlistener, err := net.Listen(\"tcp\", \":0\")\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"cannot setup listener required for testing: %v\", err)\n\t\t\t}\n\t\t\tdefer listener.Close()\n\t\t\tacceptDone := make(chan struct{})\n\t\t\tvar conn net.Conn\n\t\t\tgo func() {\n\t\t\t\tconn, err = listener.Accept()\n\t\t\t\tclose(acceptDone)\n\t\t\t}()\n\t\t\ttime.Sleep(10 * time.Millisecond) // give time to start listening\n\t\t\tclient := daptest.NewClient(listener.Addr().String())\n\t\t\tdefer client.Close()\n\t\t\t<-acceptDone\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"cannot accept client required for testing: %v\", err)\n\t\t\t}\n\t\t\tsession := NewSession(conn, &Config{\n\t\t\t\tConfig:        &service.Config{DisconnectChan: make(chan struct{})},\n\t\t\t\tStopTriggered: make(chan struct{}),\n\t\t\t}, nil)\n\t\t\tserveDAPCodecDone := make(chan struct{})\n\t\t\tgo func() {\n\t\t\t\tsession.ServeDAPCodec()\n\t\t\t\tclose(serveDAPCodecDone)\n\t\t\t}()\n\t\t\ttime.Sleep(10 * time.Millisecond) // give time to start reading\n\t\t\tclient.InitializeRequest()\n\t\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\t\t\tfixture := protest.BuildFixture(t, \"increment\", protest.AllNonOptimized)\n\t\t\tclient.LaunchRequest(\"debug\", fixture.Source, stopOnEntry)\n\t\t\tclient.ExpectProcessEvent(t)\n\t\t\tclient.ExpectInitializedEvent(t)\n\t\t\tclient.ExpectLaunchResponse(t)\n\t\t\tstopSession(session, client, serveDAPCodecDone)\n\t\t\tverifySessionStopped(t, session)\n\t\t})\n\t}\n}\n\nfunc TestForceStopWhileStopping(t *testing.T) {\n\tserverStopped := make(chan struct{})\n\tserver, forceStop := startDAPServer(t, false, serverStopped)\n\tclient := daptest.NewClient(server.config.Listener.Addr().String())\n\n\tclient.InitializeRequest()\n\tclient.ExpectInitializeResponseAndCapabilities(t)\n\tfixture := protest.BuildFixture(t, \"increment\", protest.AllNonOptimized)\n\tclient.LaunchRequest(\"exec\", fixture.Path, stopOnEntry)\n\tclient.ExpectProcessEvent(t)\n\tclient.ExpectInitializedEvent(t)\n\tclient.Close() // depending on timing may trigger Stop()\n\ttime.Sleep(time.Microsecond)\n\tclose(forceStop) // depending on timing may trigger Stop()\n\t<-serverStopped\n\tverifyServerStopped(t, server)\n}\n\n// TestLaunchStopOnEntry emulates the message exchange that can be observed with\n// VS Code for the most basic launch debug session with \"stopOnEntry\" enabled:\n//\n//\tUser selects \"Start Debugging\":  1 >> initialize\n//\t                              :  1 << initialize\n//\t                              :  2 >> launch\n//\t                              :    << process event\n//\t                              :    << initialized event\n//\t                              :  2 << launch\n//\t                              :  3 >> setBreakpoints (empty)\n//\t                              :  3 << setBreakpoints\n//\t                              :  4 >> setExceptionBreakpoints (empty)\n//\t                              :  4 << setExceptionBreakpoints\n//\t                              :  5 >> configurationDone\n//\tProgram stops upon launching  :    << stopped event\n//\t                              :  5 << configurationDone\n//\t                              :  6 >> threads\n//\t                              :  6 << threads (Dummy)\n//\t                              :  7 >> threads\n//\t                              :  7 << threads (Dummy)\n//\t                              :  8 >> stackTrace\n//\t                              :  8 << error (Unable to produce stack trace)\n//\t                              :  9 >> stackTrace\n//\t                              :  9 << error (Unable to produce stack trace)\n//\tUser evaluates bad expression : 10 >> evaluate\n//\t                              : 10 << error (unable to find function context)\n//\tUser evaluates good expression: 11 >> evaluate\n//\t                              : 11 << evaluate\n//\tUser selects \"Continue\"       : 12 >> continue\n//\t                              : 12 << continue\n//\tProgram runs to completion    :    << terminated event\n//\t                              : 13 >> disconnect\n//\t                              :    << output event (Process exited)\n//\t                              :    << output event (Detaching)\n//\t                              : 13 << disconnect\n//\n// This test exhaustively tests Seq and RequestSeq on all messages from the\n// server. Other tests do not necessarily need to repeat all these checks.\nfunc TestLaunchStopOnEntry(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// 1 >> initialize, << initialize\n\t\tclient.InitializeRequest()\n\t\tinitResp := client.ExpectInitializeResponseAndCapabilities(t)\n\t\tif initResp.RequestSeq != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=1\", initResp)\n\t\t}\n\n\t\t// 2 >> launch, << process, << initialized, << launch\n\t\tclient.LaunchRequest(\"exec\", fixture.Path, stopOnEntry)\n\n\t\tclient.ExpectProcessEvent(t)\n\n\t\tclient.ExpectInitializedEvent(t)\n\t\tlaunchResp := client.ExpectLaunchResponse(t)\n\t\tif launchResp.RequestSeq != 2 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=2\", launchResp)\n\t\t}\n\n\t\t// 3 >> setBreakpoints, << setBreakpoints\n\t\tclient.SetBreakpointsRequest(fixture.Source, nil)\n\t\tsbpResp := client.ExpectSetBreakpointsResponse(t)\n\t\tif sbpResp.RequestSeq != 3 || len(sbpResp.Body.Breakpoints) != 0 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=3, len(Breakpoints)=0\", sbpResp)\n\t\t}\n\n\t\t// 4 >> setExceptionBreakpoints, << setExceptionBreakpoints\n\t\tclient.SetExceptionBreakpointsRequest(nil)\n\t\tsebpResp := client.ExpectSetExceptionBreakpointsResponse(t)\n\t\tif sebpResp.RequestSeq != 4 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=4\", sebpResp)\n\t\t}\n\n\t\t// 5 >> configurationDone, << stopped, << configurationDone\n\t\tclient.ConfigurationDoneRequest()\n\t\tstopEvent := client.ExpectStoppedEvent(t)\n\t\tif stopEvent.Body.Reason != \"entry\" ||\n\t\t\tstopEvent.Body.ThreadId != 1 ||\n\t\t\t!stopEvent.Body.AllThreadsStopped {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Body={Reason=\\\"entry\\\", ThreadId=1, AllThreadsStopped=true}\", stopEvent)\n\t\t}\n\t\tcdResp := client.ExpectConfigurationDoneResponse(t)\n\t\tif cdResp.RequestSeq != 5 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=5\", cdResp)\n\t\t}\n\n\t\t// 6 >> threads, << threads\n\t\tclient.ThreadsRequest()\n\t\ttResp := client.ExpectThreadsResponse(t)\n\t\tif tResp.RequestSeq != 6 || len(tResp.Body.Threads) != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=6 len(Threads)=1\", tResp)\n\t\t}\n\t\tif tResp.Body.Threads[0].Id != 1 || tResp.Body.Threads[0].Name != \"Dummy\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Id=1, Name=\\\"Dummy\\\"\", tResp)\n\t\t}\n\n\t\t// 7 >> threads, << threads\n\t\tclient.ThreadsRequest()\n\t\ttResp = client.ExpectThreadsResponse(t)\n\t\tif tResp.RequestSeq != 7 || len(tResp.Body.Threads) != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=7 len(Threads)=1\", tResp)\n\t\t}\n\n\t\t// 8 >> stackTrace, << error\n\t\tclient.StackTraceRequest(1, 0, 20)\n\t\tstResp := client.ExpectInvisibleErrorResponse(t)\n\t\tif stResp.RequestSeq != 8 || !checkErrorMessageFormat(stResp.Body.Error, \"Unable to produce stack trace: unknown goroutine 1\") {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=8 Format=\\\"Unable to produce stack trace: unknown goroutine 1\\\"\", stResp)\n\t\t}\n\n\t\t// 9 >> stackTrace, << error\n\t\tclient.StackTraceRequest(1, 0, 20)\n\t\tstResp = client.ExpectInvisibleErrorResponse(t)\n\t\tif stResp.RequestSeq != 9 || !checkErrorMessageId(stResp.Body.Error, UnableToProduceStackTrace) {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=9 Id=%d\", stResp, UnableToProduceStackTrace)\n\t\t}\n\n\t\t// 10 >> evaluate, << error\n\t\tclient.EvaluateRequest(\"foo\", 0 /*no frame specified*/, \"repl\")\n\t\terResp := client.ExpectInvisibleErrorResponse(t)\n\t\tif erResp.RequestSeq != 10 || !checkErrorMessageId(erResp.Body.Error, UnableToEvaluateExpression) {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=10 Id=%d\", erResp, UnableToEvaluateExpression)\n\t\t}\n\n\t\t// 11 >> evaluate, << evaluate\n\t\tclient.EvaluateRequest(\"1+1\", 0 /*no frame specified*/, \"repl\")\n\t\tevResp := client.ExpectEvaluateResponse(t)\n\t\tif evResp.RequestSeq != 11 || evResp.Body.Result != \"2\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=10 Result=2\", evResp)\n\t\t}\n\n\t\t// 12 >> continue, << continue, << terminated\n\t\tclient.ContinueRequest(1)\n\t\tcontResp := client.ExpectContinueResponse(t)\n\t\tif contResp.RequestSeq != 12 || !contResp.Body.AllThreadsContinued {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=12 Body.AllThreadsContinued=true\", contResp)\n\t\t}\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\t// 13 >> disconnect, << disconnect\n\t\tclient.DisconnectRequest()\n\t\toep := client.ExpectOutputEventProcessExited(t, 0)\n\t\tif oep.Body.Category != \"console\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Category='console'\", oep)\n\t\t}\n\t\toed := client.ExpectOutputEventDetaching(t)\n\t\tif oed.Body.Category != \"console\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Category='console'\", oed)\n\t\t}\n\t\tdResp := client.ExpectDisconnectResponse(t)\n\t\tif dResp.RequestSeq != 13 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=13\", dResp)\n\t\t}\n\t\tclient.ExpectTerminatedEvent(t)\n\t})\n}\n\n// TestAttachStopOnEntry is like TestLaunchStopOnEntry, but with attach request.\nfunc TestAttachStopOnEntry(t *testing.T) {\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// Start the program to attach to\n\t\tcmd := exec.Command(fixture.Path)\n\t\tstdout, err := cmd.StdoutPipe()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tcmd.Stderr = os.Stderr\n\t\tif err := cmd.Start(); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\t// Wait for output.\n\t\t// This will give the target process time to initialize the runtime before we attach,\n\t\t// so we can rely on having goroutines when they are requested on attach.\n\t\tscanOut := bufio.NewScanner(stdout)\n\t\tscanOut.Scan()\n\t\tif scanOut.Text() != \"past main\" {\n\t\t\tt.Errorf(\"expected loopprog.go to output \\\"past main\\\"\")\n\t\t}\n\n\t\t// 1 >> initialize, << initialize\n\t\tclient.InitializeRequest()\n\t\tinitResp := client.ExpectInitializeResponseAndCapabilities(t)\n\t\tif initResp.RequestSeq != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=1\", initResp)\n\t\t}\n\n\t\t// 2 >> attach, << initialized, << attach\n\t\tclient.AttachRequest(\n\t\t\tmap[string]any{\"mode\": \"local\", \"processId\": cmd.Process.Pid, \"stopOnEntry\": true, \"backend\": \"default\"})\n\t\tclient.ExpectCapabilitiesEventSupportTerminateDebuggee(t)\n\t\tclient.ExpectInitializedEvent(t)\n\t\tattachResp := client.ExpectAttachResponse(t)\n\t\tif attachResp.RequestSeq != 2 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=2\", attachResp)\n\t\t}\n\n\t\t// 3 >> setBreakpoints, << setBreakpoints\n\t\tclient.SetBreakpointsRequest(fixture.Source, nil)\n\t\tsbpResp := client.ExpectSetBreakpointsResponse(t)\n\t\tif sbpResp.RequestSeq != 3 || len(sbpResp.Body.Breakpoints) != 0 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=3, len(Breakpoints)=0\", sbpResp)\n\t\t}\n\n\t\t// 4 >> setExceptionBreakpoints, << setExceptionBreakpoints\n\t\tclient.SetExceptionBreakpointsRequest(nil)\n\t\tsebpResp := client.ExpectSetExceptionBreakpointsResponse(t)\n\t\tif sebpResp.RequestSeq != 4 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=4\", sebpResp)\n\t\t}\n\n\t\t// 5 >> configurationDone, << stopped, << configurationDone\n\t\tclient.ConfigurationDoneRequest()\n\t\tstopEvent := client.ExpectStoppedEvent(t)\n\t\tif stopEvent.Body.Reason != \"entry\" ||\n\t\t\tstopEvent.Body.ThreadId != 1 ||\n\t\t\t!stopEvent.Body.AllThreadsStopped {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Body={Reason=\\\"entry\\\", ThreadId=1, AllThreadsStopped=true}\", stopEvent)\n\t\t}\n\t\tcdResp := client.ExpectConfigurationDoneResponse(t)\n\t\tif cdResp.RequestSeq != 5 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=5\", cdResp)\n\t\t}\n\n\t\t// 6 >> threads, << threads\n\t\tclient.ThreadsRequest()\n\t\ttResp := client.ExpectThreadsResponse(t)\n\t\t// Expect main goroutine plus runtime at this point.\n\t\tif tResp.RequestSeq != 6 || len(tResp.Body.Threads) < 2 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=6 len(Threads)>1\", tResp)\n\t\t}\n\n\t\t// 7 >> threads, << threads\n\t\tclient.ThreadsRequest()\n\t\tclient.ExpectThreadsResponse(t)\n\n\t\t// 8 >> stackTrace, << response\n\t\tclient.StackTraceRequest(1, 0, 20)\n\t\tclient.ExpectStackTraceResponse(t)\n\n\t\t// 9 >> stackTrace, << response\n\t\tclient.StackTraceRequest(1, 0, 20)\n\t\tclient.ExpectStackTraceResponse(t)\n\n\t\t// 10 >> evaluate, << error\n\t\tclient.EvaluateRequest(\"foo\", 0 /*no frame specified*/, \"repl\")\n\t\terResp := client.ExpectInvisibleErrorResponse(t)\n\t\tif erResp.RequestSeq != 10 || !checkErrorMessageId(erResp.Body.Error, UnableToEvaluateExpression) {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=10 Id=%d\", erResp, UnableToEvaluateExpression)\n\t\t}\n\n\t\t// 11 >> evaluate, << evaluate\n\t\tclient.EvaluateRequest(\"1+1\", 0 /*no frame specified*/, \"repl\")\n\t\tevResp := client.ExpectEvaluateResponse(t)\n\t\tif evResp.RequestSeq != 11 || evResp.Body.Result != \"2\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=10 Result=2\", evResp)\n\t\t}\n\n\t\t// 12 >> continue, << continue\n\t\tclient.ContinueRequest(1)\n\t\tcResp := client.ExpectContinueResponse(t)\n\t\tif cResp.RequestSeq != 12 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=12\", cResp)\n\t\t}\n\n\t\t// TODO(polina): once https://github.com/go-delve/delve/issues/2259 is\n\t\t// fixed, test with kill=false.\n\n\t\t// 13 >> disconnect, << disconnect\n\t\tclient.DisconnectRequestWithKillOption(true)\n\n\t\t// Disconnect consists of Halt + Detach.\n\t\t// Halt interrupts command in progress, which triggers\n\t\t// a stopped event in parallel with the disconnect\n\t\t// sequence. It might arrive before or during the sequence\n\t\t// or never if the server exits before it is sent.\n\t\tmsg := expectMessageFilterStopped(t, client)\n\t\tclient.CheckOutputEvent(t, msg)\n\t\tmsg = expectMessageFilterStopped(t, client)\n\t\tclient.CheckDisconnectResponse(t, msg)\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\t// If this call to KeepAlive isn't here there's a chance that stdout will\n\t\t// be garbage collected (since it is no longer alive long before this\n\t\t// point), when that happens, on unix-like OSes, the read end of the pipe\n\t\t// will be closed by the finalizer and the target process will die by\n\t\t// SIGPIPE, which the rest of this test does not expect.\n\t\truntime.KeepAlive(stdout)\n\t})\n}\n\nfunc TestLaunchWithFollowExec(t *testing.T) {\n\tif runtime.GOOS == \"freebsd\" || runtime.GOOS == \"darwin\" {\n\t\tt.Skip(\"follow exec not implemented\")\n\t}\n\n\tvar buildFlags protest.BuildFlags\n\t// TODO build mode, see TestFollowExecFindLocation in integration2_test.go\n\tchildFixture := protest.BuildFixture(t, \"spawnchild\", buildFlags)\n\trunTest(t, \"spawn\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// 1 >> initialize, << initialize\n\t\tclient.InitializeRequest()\n\t\tinitResp := client.ExpectInitializeResponseAndCapabilities(t)\n\t\tif initResp.RequestSeq != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=1\", initResp)\n\t\t}\n\n\t\t// 2 >> launch, << process, << initialized, << launch\n\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\"mode\":        \"exec\",\n\t\t\t\"program\":     fixture.Path,\n\t\t\t\"args\":        []string{\"spawn2\", childFixture.Path}, // call spawnchild.go\n\t\t\t\"stopOnEntry\": stopOnEntry,\n\t\t\t\"followExec\":  true,\n\t\t})\n\n\t\tclient.ExpectProcessEvent(t)\n\n\t\tclient.ExpectInitializedEvent(t)\n\t\tlaunchResp := client.ExpectLaunchResponse(t)\n\t\tif launchResp.RequestSeq != 2 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=2\", launchResp)\n\t\t}\n\n\t\t// 3 >> setBreakpoints, << setBreakpoints\n\t\tclient.SetBreakpointsRequest(childFixture.Source, []int{6})\n\t\tsbpResp := client.ExpectSetBreakpointsResponse(t)\n\t\tif sbpResp.RequestSeq != 3 || len(sbpResp.Body.Breakpoints) != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=3, len(Breakpoints)=1\", sbpResp)\n\t\t}\n\t\tif sbpResp.Body.Breakpoints[0].Verified {\n\t\t\tt.Errorf(\"got breakpoints[0].Verified=true, want false\")\n\t\t}\n\n\t\t// 4 >> setExceptionBreakpoints, << setExceptionBreakpoints\n\t\tclient.SetExceptionBreakpointsRequest(nil)\n\t\tsebpResp := client.ExpectSetExceptionBreakpointsResponse(t)\n\t\tif sebpResp.RequestSeq != 4 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=4\", sebpResp)\n\t\t}\n\n\t\t// 5 >> configurationDone, << stopped, << configurationDone\n\t\tclient.ConfigurationDoneRequest()\n\t\tstopEvent := client.ExpectStoppedEvent(t)\n\t\tif stopEvent.Body.Reason != \"entry\" ||\n\t\t\tstopEvent.Body.ThreadId != 1 ||\n\t\t\t!stopEvent.Body.AllThreadsStopped {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Body={Reason=\\\"entry\\\", ThreadId=1, AllThreadsStopped=true}\", stopEvent)\n\t\t}\n\t\tcdResp := client.ExpectConfigurationDoneResponse(t)\n\t\tif cdResp.RequestSeq != 5 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=5\", cdResp)\n\t\t}\n\n\t\t// 6 >> threads, << threads\n\t\tclient.ThreadsRequest()\n\t\ttResp := client.ExpectThreadsResponse(t)\n\t\tif tResp.RequestSeq != 6 || len(tResp.Body.Threads) != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=6 len(Threads)=1\", tResp)\n\t\t}\n\t\tif tResp.Body.Threads[0].Id != 1 || tResp.Body.Threads[0].Name != \"Dummy\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Id=1, Name=\\\"Dummy\\\"\", tResp)\n\t\t}\n\n\t\t// 7 >> continue, << continue << stopped\n\t\tclient.ContinueRequest(1)\n\t\tcontResp := client.ExpectContinueResponse(t)\n\t\tif contResp.RequestSeq != 7 || !contResp.Body.AllThreadsContinued {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=7 Body.AllThreadsContinued=true\", contResp)\n\t\t}\n\t\tclient.ExpectBreakpointEvent(t)\n\t\tclient.ExpectProcessEvent(t)\n\t\tstopEvent = client.ExpectStoppedEvent(t)\n\t\tif stopEvent.Body.Reason != \"breakpoint\" ||\n\t\t\tstopEvent.Body.ThreadId != 1 ||\n\t\t\t!stopEvent.Body.AllThreadsStopped ||\n\t\t\tlen(stopEvent.Body.HitBreakpointIds) != 1 ||\n\t\t\tstopEvent.Body.HitBreakpointIds[0] != sbpResp.Body.Breakpoints[0].Id {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Body={Reason=\\\"breakpoint\\\", ThreadId=1, AllThreadsStopped=true, HitBreakpointIds=[1]}\", stopEvent)\n\t\t}\n\n\t\t// 8 >> setBreakpoints, << setBreakpoints\n\t\tclient.SetBreakpointsRequest(fixture.Source, []int{54})\n\t\tsbpResp = client.ExpectSetBreakpointsResponse(t)\n\t\tif sbpResp.RequestSeq != 8 || len(sbpResp.Body.Breakpoints) != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=8, len(Breakpoints)=1\", sbpResp)\n\t\t}\n\t\tif !sbpResp.Body.Breakpoints[0].Verified {\n\t\t\tt.Errorf(\"got breakpoints[0].Verified=false, want true\")\n\t\t}\n\n\t\t// 9 >> continue, << continue << stopped\n\t\tclient.ContinueRequest(1)\n\t\tcontResp = client.ExpectContinueResponse(t)\n\t\tif contResp.RequestSeq != 9 || !contResp.Body.AllThreadsContinued {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=9 Body.AllThreadsContinued=true\", contResp)\n\t\t}\n\t\tstopEvent = client.ExpectStoppedEvent(t)\n\t\tif stopEvent.Body.Reason != \"breakpoint\" ||\n\t\t\tstopEvent.Body.ThreadId != 1 ||\n\t\t\t!stopEvent.Body.AllThreadsStopped ||\n\t\t\tlen(stopEvent.Body.HitBreakpointIds) != 1 ||\n\t\t\tstopEvent.Body.HitBreakpointIds[0] != sbpResp.Body.Breakpoints[0].Id {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Body={Reason=\\\"breakpoint\\\", ThreadId=1, AllThreadsStopped=true, HitBreakpointIds=[1]}\", stopEvent)\n\t\t}\n\n\t\t// 10 >> continue, << continue << terminated\n\t\tclient.ContinueRequest(1)\n\t\tcontResp = client.ExpectContinueResponse(t)\n\t\tif contResp.RequestSeq != 10 || !contResp.Body.AllThreadsContinued {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=10 Body.AllThreadsContinued=true\", contResp)\n\t\t}\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\t// 11 >> disconnect, << disconnect\n\t\tclient.DisconnectRequest()\n\t\toep := client.ExpectOutputEventProcessExited(t, 0)\n\t\tif oep.Body.Category != \"console\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Category='console'\", oep)\n\t\t}\n\t\toed := client.ExpectOutputEventDetaching(t)\n\t\tif oed.Body.Category != \"console\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Category='console'\", oed)\n\t\t}\n\t\tdResp := client.ExpectDisconnectResponse(t)\n\t\tif dResp.RequestSeq != 11 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=11\", dResp)\n\t\t}\n\t\tclient.ExpectTerminatedEvent(t)\n\t})\n}\n\nfunc TestAttachWithFollowExec(t *testing.T) {\n\tif runtime.GOOS == \"freebsd\" || runtime.GOOS == \"darwin\" {\n\t\tt.Skip(\"follow exec not implemented\")\n\t}\n\n\trunTest(t, \"spawn\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// Start the program to attach to\n\t\tcmd := exec.Command(fixture.Path, \"spawn\", \"10000000\")\n\t\tstdout, err := cmd.StdoutPipe()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tcmd.Stderr = os.Stderr\n\t\tif err := cmd.Start(); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\t// Wait for output.\n\t\t// This will give the target process time to initialize the runtime before we attach,\n\t\t// so we can rely on having goroutines when they are requested on attach.\n\t\tscanOut := bufio.NewScanner(stdout)\n\t\tscanOut.Scan()\n\t\tif scanOut.Text() != \"parent starting\" {\n\t\t\tt.Errorf(\"expected spawn.go to output \\\"parent starting\\\"\")\n\t\t}\n\n\t\t// 1 >> initialize, << initialize\n\t\tclient.InitializeRequest()\n\t\tinitResp := client.ExpectInitializeResponseAndCapabilities(t)\n\t\tif initResp.RequestSeq != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=1\", initResp)\n\t\t}\n\n\t\t// 2 >> attach, << output, << initialized, << attach\n\t\tclient.AttachRequest(map[string]any{\n\t\t\t\"mode\":        \"local\",\n\t\t\t\"processId\":   cmd.Process.Pid,\n\t\t\t\"stopOnEntry\": stopOnEntry,\n\t\t\t\"followExec\":  true,\n\t\t\t\"backend\":     \"default\",\n\t\t})\n\t\toutputEvent := client.ExpectOutputEvent(t)\n\t\tif outputEvent.Body.Output != \"Follow exec not supported in attach request yet.\" ||\n\t\t\toutputEvent.Body.Category != \"important\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Body={Output=\\\"Follow exec not supported in attach request yet.\\\", Category=\\\"important\\\"}\", outputEvent)\n\t\t}\n\n\t\tclient.ExpectCapabilitiesEventSupportTerminateDebuggee(t)\n\t\tclient.ExpectInitializedEvent(t)\n\t\tattachResp := client.ExpectAttachResponse(t)\n\t\tif attachResp.RequestSeq != 2 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=2\", attachResp)\n\t\t}\n\n\t\t// 3 >> disconnect, << disconnect\n\t\tclient.DisconnectRequestWithKillOption(true)\n\t\t// Disconnect consists of Halt + Detach.\n\t\t// Halt interrupts command in progress, which triggers\n\t\t// a stopped event in parallel with the disconnect\n\t\t// sequence. It might arrive before or during the sequence\n\t\t// or never if the server exits before it is sent.\n\t\tmsg := expectMessageFilterStopped(t, client)\n\t\tclient.CheckOutputEvent(t, msg)\n\t\tmsg = expectMessageFilterStopped(t, client)\n\t\tclient.CheckDisconnectResponse(t, msg)\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\t// If this call to KeepAlive isn't here there's a chance that stdout will\n\t\t// be garbage collected (since it is no longer alive long before this\n\t\t// point), when that happens, on unix-like OSes, the read end of the pipe\n\t\t// will be closed by the finalizer and the target process will die by\n\t\t// SIGPIPE, which the rest of this test does not expect.\n\t\truntime.KeepAlive(stdout)\n\t})\n}\n\n// Like the test above, except the program is configured to continue on entry.\nfunc TestContinueOnEntry(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// 1 >> initialize, << initialize\n\t\tclient.InitializeRequest()\n\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\n\t\t// 2 >> launch, << initialized, << launch\n\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\tclient.ExpectProcessEvent(t)\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectLaunchResponse(t)\n\n\t\t// 3 >> setBreakpoints, << setBreakpoints\n\t\tclient.SetBreakpointsRequest(fixture.Source, nil)\n\t\tclient.ExpectSetBreakpointsResponse(t)\n\n\t\t// 4 >> setExceptionBreakpoints, << setExceptionBreakpoints\n\t\tclient.SetExceptionBreakpointsRequest(nil)\n\t\tclient.ExpectSetExceptionBreakpointsResponse(t)\n\n\t\t// 5 >> configurationDone, << configurationDone\n\t\tclient.ConfigurationDoneRequest()\n\t\tclient.ExpectConfigurationDoneResponse(t)\n\t\t// \"Continue\" happens behind the scenes on another goroutine\n\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\t// 6 >> threads, << threads\n\t\tclient.ThreadsRequest()\n\t\ttResp := client.ExpectThreadsResponse(t)\n\t\tif tResp.RequestSeq != 6 || len(tResp.Body.Threads) != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=6 len(Threads)=1\", tResp)\n\t\t}\n\t\tif tResp.Body.Threads[0].Id != 1 || tResp.Body.Threads[0].Name != \"Dummy\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Id=1, Name=\\\"Dummy\\\"\", tResp)\n\t\t}\n\n\t\t// 7 >> disconnect, << disconnect\n\t\tclient.DisconnectRequest()\n\t\tclient.ExpectOutputEventProcessExited(t, 0)\n\t\tclient.ExpectOutputEventDetaching(t)\n\t\tdResp := client.ExpectDisconnectResponse(t)\n\t\tif dResp.RequestSeq != 7 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=7\", dResp)\n\t\t}\n\t\tclient.ExpectTerminatedEvent(t)\n\t})\n}\n\n// TestPreSetBreakpoint corresponds to a debug session that is configured to\n// continue on entry with a pre-set breakpoint.\nfunc TestPreSetBreakpoint(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tclient.InitializeRequest()\n\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\n\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\tclient.ExpectProcessEvent(t)\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectLaunchResponse(t)\n\n\t\tclient.SetBreakpointsRequest(fixture.Source, []int{8})\n\t\tsResp := client.ExpectSetBreakpointsResponse(t)\n\t\tif len(sResp.Body.Breakpoints) != 1 {\n\t\t\tt.Errorf(\"got %#v, want len(Breakpoints)=1\", sResp)\n\t\t}\n\t\tbkpt0 := sResp.Body.Breakpoints[0]\n\t\tif !bkpt0.Verified || bkpt0.Line != 8 || bkpt0.Id != 1 || bkpt0.Source.Name != filepath.Base(fixture.Source) || bkpt0.Source.Path != fixture.Source {\n\t\t\tt.Errorf(\"got breakpoints[0] = %#v, want Verified=true, Line=8, Id=1, Path=%q\", bkpt0, fixture.Source)\n\t\t}\n\n\t\tclient.SetExceptionBreakpointsRequest(nil)\n\t\tclient.ExpectSetExceptionBreakpointsResponse(t)\n\n\t\tclient.ConfigurationDoneRequest()\n\t\tclient.ExpectConfigurationDoneResponse(t)\n\t\t// This triggers \"continue\" on a separate goroutine\n\n\t\tclient.ThreadsRequest()\n\t\t// Since we are in async mode while running, we might receive messages in either order.\n\t\tfor range 2 {\n\t\t\tmsg := client.ExpectMessage(t)\n\t\t\tswitch m := msg.(type) {\n\t\t\tcase *dap.ThreadsResponse:\n\t\t\t\t// If the thread request arrived while the program was running, we expect to get the dummy response\n\t\t\t\t// with a single goroutine \"Current\".\n\t\t\t\t// If the thread request arrived after the stop, we should get the goroutine stopped at main.Increment.\n\t\t\t\tif (len(m.Body.Threads) != 1 || m.Body.Threads[0].Id != -1 || m.Body.Threads[0].Name != \"Current\") &&\n\t\t\t\t\t(len(m.Body.Threads) < 1 || m.Body.Threads[0].Id != 1 || !strings.HasPrefix(m.Body.Threads[0].Name, \"* [Go 1] main.Increment\")) {\n\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Id=-1, Name=\\\"Current\\\" or Id=1, Name=\\\"* [Go 1] main.Increment ...\\\"\", m.Body.Threads)\n\t\t\t\t}\n\t\t\tcase *dap.StoppedEvent:\n\t\t\t\tif m.Body.Reason != \"breakpoint\" || m.Body.ThreadId != 1 || !m.Body.AllThreadsStopped {\n\t\t\t\t\tt.Errorf(\"got %#v, want Body={Reason=\\\"breakpoint\\\", ThreadId=1, AllThreadsStopped=true}\", m)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tt.Fatalf(\"got %#v, want ThreadsResponse or StoppedEvent\", m)\n\t\t\t}\n\t\t}\n\n\t\t// Threads-StackTrace-Scopes-Variables request waterfall is\n\t\t// triggered on stop event.\n\t\tclient.ThreadsRequest()\n\t\ttResp := client.ExpectThreadsResponse(t)\n\t\tif len(tResp.Body.Threads) < 2 { // 1 main + runtime\n\t\t\tt.Errorf(\"\\ngot  %#v\\nwant len(Threads)>1\", tResp.Body.Threads)\n\t\t}\n\t\treMain := regexp.MustCompile(`\\* \\[Go 1\\] main.Increment \\(Thread [0-9]+\\)`)\n\t\twantMain := dap.Thread{Id: 1, Name: \"* [Go 1] main.Increment (Thread ...)\"}\n\t\twantRuntime := dap.Thread{Id: 2, Name: \"[Go 2] runtime.gopark\"}\n\t\tfor _, got := range tResp.Body.Threads {\n\t\t\tif got.Id != 1 && !reMain.MatchString(got.Name) && !(strings.Contains(got.Name, \"runtime.\") || strings.Contains(got.Name, \"runtime/\")) {\n\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant []dap.Thread{%#v, %#v, ...}\", tResp.Body.Threads, wantMain, wantRuntime)\n\t\t\t}\n\t\t}\n\n\t\tclient.StackTraceRequest(1, 0, 20)\n\t\tstResp := client.ExpectStackTraceResponse(t)\n\n\t\tif stResp.Body.TotalFrames != 6 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant TotalFrames=6\", stResp.Body.TotalFrames)\n\t\t}\n\t\tif len(stResp.Body.StackFrames) != 6 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant len(StackFrames)=6\", stResp.Body.StackFrames)\n\t\t} else {\n\t\t\tcheckFrame := func(got dap.StackFrame, id int, name string, sourceName string, line int) {\n\t\t\t\tt.Helper()\n\t\t\t\tif got.Id != id || got.Name != name {\n\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Id=%d Name=%s\", got, id, name)\n\t\t\t\t}\n\t\t\t\tif (sourceName != \"\" && (got.Source == nil || got.Source.Name != sourceName)) || (line > 0 && got.Line != line) {\n\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Source.Name=%s Line=%d\", got, sourceName, line)\n\t\t\t\t}\n\t\t\t}\n\t\t\tcheckFrame(stResp.Body.StackFrames[0], 1000, \"main.Increment\", \"increment.go\", 8)\n\t\t\tcheckFrame(stResp.Body.StackFrames[1], 1001, \"main.Increment\", \"increment.go\", 11)\n\t\t\tcheckFrame(stResp.Body.StackFrames[2], 1002, \"main.Increment\", \"increment.go\", 11)\n\t\t\tcheckFrame(stResp.Body.StackFrames[3], 1003, \"main.main\", \"increment.go\", 17)\n\t\t\tcheckFrame(stResp.Body.StackFrames[4], 1004, \"runtime.main\", \"proc.go\", -1)\n\t\t\tcheckFrame(stResp.Body.StackFrames[5], 1005, \"runtime.goexit\", \"\", -1)\n\t\t}\n\n\t\tclient.ScopesRequest(1000)\n\t\tscopes := client.ExpectScopesResponse(t)\n\t\tif len(scopes.Body.Scopes) > 1 {\n\t\t\tt.Errorf(\"\\ngot  %#v\\nwant len(Scopes)=1 (Locals)\", scopes)\n\t\t}\n\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\n\t\tclient.VariablesRequest(localsScope)\n\t\targs := client.ExpectVariablesResponse(t)\n\t\tcheckChildren(t, args, \"Locals\", 2)\n\t\tcheckVarExact(t, args, 0, \"y\", \"y\", \"0 = 0x0\", \"uint\", noChildren)\n\t\tcheckVarExact(t, args, 1, \"~r1\", \"\", \"0 = 0x0\", \"uint\", noChildren)\n\n\t\tclient.ContinueRequest(1)\n\t\tctResp := client.ExpectContinueResponse(t)\n\t\tif !ctResp.Body.AllThreadsContinued {\n\t\t\tt.Errorf(\"\\ngot  %#v\\nwant AllThreadsContinued=true\", ctResp.Body)\n\t\t}\n\t\t// \"Continue\" is triggered after the response is sent\n\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\t// Pause request after termination should result in an error.\n\t\t// But in certain cases this request actually succeeds.\n\t\tclient.PauseRequest(1)\n\t\tswitch r := client.ExpectMessage(t).(type) {\n\t\tcase *dap.ErrorResponse:\n\t\t\tif r.Message != \"Unable to halt execution\" {\n\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Message='Unable to halt execution'\", r)\n\t\t\t}\n\t\tcase *dap.PauseResponse:\n\t\tdefault:\n\t\t\tt.Fatalf(\"Unexpected response type: expect error or pause, got %#v\", r)\n\t\t}\n\n\t\tclient.DisconnectRequest()\n\t\tclient.ExpectOutputEventProcessExited(t, 0)\n\t\tclient.ExpectOutputEventDetaching(t)\n\t\tclient.ExpectDisconnectResponse(t)\n\t\tclient.ExpectTerminatedEvent(t)\n\t})\n}\n\n// checkStackFramesExact is a helper for verifying the values within StackTraceResponse.\n//\n//\twantStartName - name of the first returned frame (ignored if \"\")\n//\twantStartLine - file line of the first returned frame (ignored if <0).\n//\twantStartID - id of the first frame returned (ignored if wantFrames is 0).\n//\twantFrames - number of frames returned (length of StackTraceResponse.Body.StackFrames array).\n//\twantTotalFrames - total number of stack frames available (StackTraceResponse.Body.TotalFrames).\nfunc checkStackFramesExact(t *testing.T, got *dap.StackTraceResponse,\n\twantStartName string, wantStartLine any, wantStartID, wantFrames, wantTotalFrames int,\n) {\n\tt.Helper()\n\tcheckStackFramesNamed(\"\", t, got, wantStartName, wantStartLine, wantStartID, wantFrames, wantTotalFrames, true)\n}\n\nfunc TestFilterGoroutines(t *testing.T) {\n\ttt := []struct {\n\t\tname    string\n\t\tfilter  string\n\t\twant    []string\n\t\twantLen int\n\t\twantErr bool\n\t}{\n\t\t{\n\t\t\tname:    \"user goroutines\",\n\t\t\tfilter:  \"-with user\",\n\t\t\twant:    []string{\"main.main\", \"main.agoroutine\"},\n\t\t\twantLen: 11,\n\t\t},\n\t\t{\n\t\t\tname:    \"filter by user loc\",\n\t\t\tfilter:  \"-with userloc main.main\",\n\t\t\twant:    []string{\"main.main\"},\n\t\t\twantLen: 1,\n\t\t},\n\t\t{\n\t\t\tname:    \"multiple filters\",\n\t\t\tfilter:  \"-with user -with userloc main.agoroutine\",\n\t\t\twant:    []string{\"main.agoroutine\"},\n\t\t\twantLen: 10,\n\t\t},\n\t\t{\n\t\t\tname:   \"system goroutines\",\n\t\t\tfilter: \"-without user\",\n\t\t\twant:   []string{\"runtime.\"},\n\t\t},\n\t\t// Filters that should return all goroutines.\n\t\t{\n\t\t\tname:    \"empty filter string\",\n\t\t\tfilter:  \"\",\n\t\t\twant:    []string{\"main.main\", \"main.agoroutine\", \"runtime.\"},\n\t\t\twantLen: -1,\n\t\t},\n\t\t{\n\t\t\tname:    \"bad filter string\",\n\t\t\tfilter:  \"not parsable to filters\",\n\t\t\twant:    []string{\"main.main\", \"main.agoroutine\", \"runtime.\"},\n\t\t\twantLen: -1,\n\t\t\twantErr: true,\n\t\t},\n\t\t// Filters that should produce none.\n\t\t{\n\t\t\tname:    \"no match to user loc\",\n\t\t\tfilter:  \"-with userloc main.NotAUserFrame\",\n\t\t\twant:    []string{\"Dummy\"},\n\t\t\twantLen: 1,\n\t\t},\n\t\t{\n\t\t\tname:    \"no match to user and not user\",\n\t\t\tfilter:  \"-with user -without user\",\n\t\t\twant:    []string{\"Dummy\"},\n\t\t\twantLen: 1,\n\t\t},\n\t}\n\trunTest(t, \"goroutinestackprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\":        \"exec\",\n\t\t\t\t\t\"program\":     fixture.Path,\n\t\t\t\t\t\"stopOnEntry\": !stopOnEntry,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{30},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 30\n\t\t\t\texecute: func() {\n\t\t\t\t\tfor _, tc := range tt {\n\t\t\t\t\t\tcommand := fmt.Sprintf(\"dlv config goroutineFilters %s\", tc.filter)\n\t\t\t\t\t\tclient.EvaluateRequest(command, 1000, \"repl\")\n\t\t\t\t\t\tclient.ExpectInvalidatedEvent(t)\n\t\t\t\t\t\tclient.ExpectEvaluateResponse(t)\n\n\t\t\t\t\t\tclient.ThreadsRequest()\n\t\t\t\t\t\tif tc.wantErr {\n\t\t\t\t\t\t\tclient.ExpectOutputEvent(t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttr := client.ExpectThreadsResponse(t)\n\t\t\t\t\t\tif tc.wantLen > 0 {\n\t\t\t\t\t\t\tif runtime.GOOS == \"windows\" {\n\t\t\t\t\t\t\t\t// On windows/go1.26 there is one extra goroutine that we don't have\n\t\t\t\t\t\t\t\t// a start location for, so the system filter doesn't work on it.\n\t\t\t\t\t\t\t\tif len(tr.Body.Threads) != tc.wantLen && len(tr.Body.Threads) != tc.wantLen+1 {\n\t\t\t\t\t\t\t\t\tt.Errorf(\"got Threads=%#v, want Len=%d (or %d)\\n\", tr.Body.Threads, tc.wantLen, tc.wantLen+1)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif len(tr.Body.Threads) != tc.wantLen {\n\t\t\t\t\t\t\t\t\tt.Errorf(\"got Threads=%#v, want Len=%d\\n\", tr.Body.Threads, tc.wantLen)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\truntimeGoexitFound := false\n\t\t\t\t\t\tfor i, frame := range tr.Body.Threads {\n\t\t\t\t\t\t\tvar found bool\n\t\t\t\t\t\t\tfor _, wantName := range tc.want {\n\t\t\t\t\t\t\t\tif strings.Contains(frame.Name, wantName) {\n\t\t\t\t\t\t\t\t\tfound = true\n\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif !found && !runtimeGoexitFound && strings.Contains(frame.Name, \"runtime.goexit\") && runtime.GOOS == \"windows\" {\n\t\t\t\t\t\t\t\t// See previous comment about windows/1.26\n\t\t\t\t\t\t\t\tfound = true\n\t\t\t\t\t\t\t\truntimeGoexitFound = true\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif !found {\n\t\t\t\t\t\t\t\tt.Errorf(\"got Threads[%d]=%#v, want Name=%v\\n\", i, frame, tc.want)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\nfunc checkStackFramesHasMore(t *testing.T, got *dap.StackTraceResponse,\n\twantStartName string, wantStartLine, wantStartID, wantFrames, wantTotalFrames int,\n) {\n\tt.Helper()\n\tcheckStackFramesNamed(\"\", t, got, wantStartName, wantStartLine, wantStartID, wantFrames, wantTotalFrames, false)\n}\n\nfunc checkStackFramesNamed(testName string, t *testing.T, got *dap.StackTraceResponse,\n\twantStartName string, wantStartLine any, wantStartID, wantFrames, wantTotalFrames int, totalExact bool,\n) {\n\tt.Helper()\n\tif totalExact && got.Body.TotalFrames != wantTotalFrames {\n\t\tt.Errorf(\"%s\\ngot  %#v\\nwant TotalFrames=%d\", testName, got.Body.TotalFrames, wantTotalFrames)\n\t} else if !totalExact && got.Body.TotalFrames < wantTotalFrames {\n\t\tt.Errorf(\"%s\\ngot  %#v\\nwant TotalFrames>=%d\", testName, got.Body.TotalFrames, wantTotalFrames)\n\t}\n\n\tif len(got.Body.StackFrames) != wantFrames {\n\t\tt.Errorf(\"%s\\ngot  len(StackFrames)=%d\\nwant %d\", testName, len(got.Body.StackFrames), wantFrames)\n\t} else {\n\t\t// Verify that frame ids are consecutive numbers starting at wantStartID\n\t\tfor i := range wantFrames {\n\t\t\tif got.Body.StackFrames[i].Id != wantStartID+i {\n\t\t\t\tt.Errorf(\"%s\\ngot  %#v\\nwant Id=%d\", testName, got.Body.StackFrames[i], wantStartID+i)\n\t\t\t}\n\t\t}\n\t\t// Verify the name and line corresponding to the first returned frame (if any).\n\t\t// This is useful when the first frame is the frame corresponding to the breakpoint at\n\t\t// a predefined line.\n\n\t\tstartLineOk := true\n\n\t\tswitch wantStartLine := wantStartLine.(type) {\n\t\tcase int:\n\t\t\tif wantStartLine > 0 {\n\t\t\t\tstartLineOk = got.Body.StackFrames[0].Line == wantStartLine\n\t\t\t}\n\t\tcase []int:\n\t\t\tstartLineOk = slices.Contains(wantStartLine, got.Body.StackFrames[0].Line)\n\t\t}\n\n\t\tif wantFrames > 0 && !startLineOk {\n\t\t\tt.Errorf(\"%s\\ngot  Line=%d\\nwant %d\", testName, got.Body.StackFrames[0].Line, wantStartLine)\n\t\t}\n\t\tif wantFrames > 0 && wantStartName != \"\" && got.Body.StackFrames[0].Name != wantStartName {\n\t\t\tt.Errorf(\"%s\\ngot  Name=%s\\nwant %s\", testName, got.Body.StackFrames[0].Name, wantStartName)\n\t\t}\n\t}\n}\n\n// checkScope is a helper for verifying the values within a ScopesResponse.\n//\n//\ti - index of the scope within ScopesResponse.Body.Scopes array\n//\tname - name of the scope\n//\tvarRef - reference to retrieve variables of this scope. If varRef is negative, the reference is not checked.\nfunc checkScope(t *testing.T, got *dap.ScopesResponse, i int, name string, varRef int) {\n\tt.Helper()\n\tif len(got.Body.Scopes) <= i {\n\t\tt.Errorf(\"\\ngot  %d\\nwant len(Scopes)>%d\", len(got.Body.Scopes), i)\n\t}\n\tgoti := got.Body.Scopes[i]\n\tif goti.Name != name || (varRef >= 0 && goti.VariablesReference != varRef) || goti.Expensive {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant Name=%q VariablesReference=%d Expensive=false\", goti, name, varRef)\n\t}\n}\n\n// checkChildren is a helper for verifying the number of variables within a VariablesResponse.\n//\n//\tparentName - pseudoname of the enclosing variable or scope (used for error message only)\n//\tnumChildren - number of variables/fields/elements of this variable\nfunc checkChildren(t *testing.T, got *dap.VariablesResponse, parentName string, numChildren int) {\n\tt.Helper()\n\tif got.Body.Variables == nil {\n\t\tt.Errorf(\"\\ngot  %s children=%#v want []\", parentName, got.Body.Variables)\n\t}\n\tif len(got.Body.Variables) != numChildren {\n\t\tt.Errorf(\"\\ngot  len(%s)=%d (children=%#v)\\nwant len=%d\", parentName, len(got.Body.Variables), got.Body.Variables, numChildren)\n\t}\n}\n\n// checkVar is a helper for verifying the values within a VariablesResponse.\n//\n//\ti - index of the variable within VariablesResponse.Body.Variables array (-1 will search all vars for a match)\n//\tname - name of the variable\n//\tevalName - fully qualified variable name or alternative expression to load this variable\n//\tvalue - the value of the variable\n//\tuseExactMatch - true if name, evalName and value are to be compared to exactly, false if to be used as regex\n//\thasRef - true if the variable should have children and therefore a non-0 variable reference\n//\tref - reference to retrieve children of this variable (0 if none)\nfunc checkVar(t *testing.T, got *dap.VariablesResponse, i int, name, evalName, value, typ string, useExactMatch, hasRef bool, indexed, named int) (ref int) {\n\tt.Helper()\n\tif len(got.Body.Variables) <= i {\n\t\tt.Errorf(\"\\ngot  len=%d (children=%#v)\\nwant len>%d\", len(got.Body.Variables), got.Body.Variables, i)\n\t\treturn\n\t}\n\tif i < 0 {\n\t\tfor vi, v := range got.Body.Variables {\n\t\t\tif v.Name == name {\n\t\t\t\ti = vi\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif i < 0 {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant Variables[i].Name=%q (not found)\", got, name)\n\t\treturn 0\n\t}\n\n\tgoti := got.Body.Variables[i]\n\tmatchedName := false\n\tif useExactMatch {\n\t\tif strings.HasPrefix(name, \"~r\") {\n\t\t\tmatchedName = strings.HasPrefix(goti.Name, \"~r\")\n\t\t} else {\n\t\t\tmatchedName = (goti.Name == name)\n\t\t}\n\t} else {\n\t\tmatchedName, _ = regexp.MatchString(name, goti.Name)\n\t}\n\tif !matchedName || (goti.VariablesReference > 0) != hasRef {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant Name=%q hasRef=%t\", goti, name, hasRef)\n\t}\n\tmatchedEvalName := false\n\tif useExactMatch {\n\t\tmatchedEvalName = (goti.EvaluateName == evalName)\n\t} else {\n\t\tmatchedEvalName, _ = regexp.MatchString(evalName, goti.EvaluateName)\n\t}\n\tif !matchedEvalName {\n\t\tt.Errorf(\"\\ngot  %q\\nwant EvaluateName=%q\", goti.EvaluateName, evalName)\n\t}\n\tmatchedValue := false\n\tif useExactMatch {\n\t\tmatchedValue = (goti.Value == value)\n\t} else {\n\t\tmatchedValue, _ = regexp.MatchString(value, goti.Value)\n\t}\n\tif !matchedValue {\n\t\tt.Errorf(\"\\ngot  %s=%q\\nwant %q\", name, goti.Value, value)\n\t}\n\tmatchedType := false\n\tif useExactMatch {\n\t\tmatchedType = (goti.Type == typ)\n\t} else {\n\t\tmatchedType, _ = regexp.MatchString(typ, goti.Type)\n\t}\n\tif !matchedType {\n\t\tt.Errorf(\"\\ngot  %s=%q\\nwant %q\", name, goti.Type, typ)\n\t}\n\tif indexed >= 0 && goti.IndexedVariables != indexed {\n\t\tt.Errorf(\"\\ngot  %s=%d indexed\\nwant %d indexed\", name, goti.IndexedVariables, indexed)\n\t}\n\tif named >= 0 && goti.NamedVariables != named {\n\t\tt.Errorf(\"\\ngot  %s=%d named\\nwant %d named\", name, goti.NamedVariables, named)\n\t}\n\treturn goti.VariablesReference\n}\n\n// checkVarExact is a helper like checkVar that matches value exactly.\nfunc checkVarExact(t *testing.T, got *dap.VariablesResponse, i int, name, evalName, value, typ string, hasRef bool) (ref int) {\n\tt.Helper()\n\treturn checkVarExactIndexed(t, got, i, name, evalName, value, typ, hasRef, -1, -1)\n}\n\n// checkVarExact is a helper like checkVar that matches value exactly.\nfunc checkVarExactIndexed(t *testing.T, got *dap.VariablesResponse, i int, name, evalName, value, typ string, hasRef bool, indexed, named int) (ref int) {\n\tt.Helper()\n\treturn checkVar(t, got, i, name, evalName, value, typ, true, hasRef, indexed, named)\n}\n\n// checkVarRegex is a helper like checkVar that treats value, evalName or name as a regex.\nfunc checkVarRegex(t *testing.T, got *dap.VariablesResponse, i int, name, evalName, value, typ string, hasRef bool) (ref int) {\n\tt.Helper()\n\treturn checkVarRegexIndexed(t, got, i, name, evalName, value, typ, hasRef, -1, -1)\n}\n\n// checkVarRegex is a helper like checkVar that treats value, evalName or name as a regex.\nfunc checkVarRegexIndexed(t *testing.T, got *dap.VariablesResponse, i int, name, evalName, value, typ string, hasRef bool, indexed, named int) (ref int) {\n\tt.Helper()\n\treturn checkVar(t, got, i, name, evalName, value, typ, false, hasRef, indexed, named)\n}\n\nfunc expectMessageFilterStopped(t *testing.T, client *daptest.Client) dap.Message {\n\tmsg := client.ExpectMessage(t)\n\tif _, isStopped := msg.(*dap.StoppedEvent); isStopped {\n\t\tmsg = client.ExpectMessage(t)\n\t}\n\treturn msg\n}\n\n// validateEvaluateName issues an evaluate request with evaluateName of a variable and\n// confirms that it succeeds and returns the same variable record as the original.\nfunc validateEvaluateName(t *testing.T, client *daptest.Client, got *dap.VariablesResponse, i int) {\n\tt.Helper()\n\toriginal := got.Body.Variables[i]\n\tclient.EvaluateRequest(original.EvaluateName, 1000, \"this context will be ignored\")\n\tvalidated := client.ExpectEvaluateResponse(t)\n\tif original.VariablesReference == 0 && validated.Body.VariablesReference != 0 ||\n\t\toriginal.VariablesReference != 0 && validated.Body.VariablesReference == 0 {\n\t\tt.Errorf(\"\\ngot  varref=%d\\nwant %d\", validated.Body.VariablesReference, original.VariablesReference)\n\t}\n\t// The variable might not be fully loaded, and when we reload it with an expression\n\t// more of the subvalues might be revealed, so we must match the loaded prefix only.\n\tif strings.Contains(original.Value, \"...\") {\n\t\torigLoaded := strings.Split(original.Value, \"...\")[0]\n\t\tif !strings.HasPrefix(validated.Body.Result, origLoaded) {\n\t\t\tt.Errorf(\"\\ngot  value=%q\\nwant %q\", validated.Body.Result, original.Value)\n\t\t}\n\t} else if original.Value != validated.Body.Result {\n\t\tt.Errorf(\"\\ngot  value=%q\\nwant %q\", validated.Body.Result, original.Value)\n\t}\n}\n\n// TestStackTraceRequest executes to a breakpoint and tests different\n// good and bad configurations of 'stackTrace' requests.\nfunc TestStackTraceRequest(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tvar stResp *dap.StackTraceResponse\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{8, 18},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 8\n\t\t\t\texecute: func() {\n\t\t\t\t\t// Even though the stack frames do not change,\n\t\t\t\t\t// repeated requests at the same breakpoint\n\t\t\t\t\t// would assign next block of unique ids to them each time.\n\t\t\t\t\tconst NumFrames = 6\n\t\t\t\t\treqIndex := 0\n\t\t\t\t\tframeID := func() int {\n\t\t\t\t\t\treturn startHandle + reqIndex\n\t\t\t\t\t}\n\n\t\t\t\t\ttests := map[string]struct {\n\t\t\t\t\t\tstartFrame          int\n\t\t\t\t\t\tlevels              int\n\t\t\t\t\t\twantStartName       string\n\t\t\t\t\t\twantStartLine       int\n\t\t\t\t\t\twantStartFrame      int\n\t\t\t\t\t\twantFramesReturned  int\n\t\t\t\t\t\twantFramesAvailable int\n\t\t\t\t\t\texact               bool\n\t\t\t\t\t}{\n\t\t\t\t\t\t\"all frame levels from 0 to NumFrames\":    {0, NumFrames, \"main.Increment\", 8, 0, NumFrames, NumFrames, true},\n\t\t\t\t\t\t\"subset of frames from 1 to -1\":           {1, NumFrames - 1, \"main.Increment\", 11, 1, NumFrames - 1, NumFrames, true},\n\t\t\t\t\t\t\"load stack in pages: first half\":         {0, NumFrames / 2, \"main.Increment\", 8, 0, NumFrames / 2, NumFrames, false},\n\t\t\t\t\t\t\"load stack in pages: second half\":        {NumFrames / 2, NumFrames, \"main.main\", 17, NumFrames / 2, NumFrames / 2, NumFrames, true},\n\t\t\t\t\t\t\"zero levels means all levels\":            {0, 0, \"main.Increment\", 8, 0, NumFrames, NumFrames, true},\n\t\t\t\t\t\t\"zero levels means all remaining levels\":  {NumFrames / 2, 0, \"main.main\", 17, NumFrames / 2, NumFrames / 2, NumFrames, true},\n\t\t\t\t\t\t\"negative levels treated as 0 (all)\":      {0, -10, \"main.Increment\", 8, 0, NumFrames, NumFrames, true},\n\t\t\t\t\t\t\"OOB levels is capped at available len\":   {0, NumFrames + 1, \"main.Increment\", 8, 0, NumFrames, NumFrames, true},\n\t\t\t\t\t\t\"OOB levels is capped at available len 1\": {1, NumFrames + 1, \"main.Increment\", 11, 1, NumFrames - 1, NumFrames, true},\n\t\t\t\t\t\t\"negative startFrame treated as 0\":        {-10, 0, \"main.Increment\", 8, 0, NumFrames, NumFrames, true},\n\t\t\t\t\t\t\"OOB startFrame returns empty trace\":      {NumFrames, 0, \"main.Increment\", -1, -1, 0, NumFrames, true},\n\t\t\t\t\t}\n\t\t\t\t\tfor name, tc := range tests {\n\t\t\t\t\t\tclient.StackTraceRequest(1, tc.startFrame, tc.levels)\n\t\t\t\t\t\tstResp = client.ExpectStackTraceResponse(t)\n\t\t\t\t\t\tcheckStackFramesNamed(name, t, stResp,\n\t\t\t\t\t\t\ttc.wantStartName, tc.wantStartLine, frameID(), tc.wantFramesReturned, tc.wantFramesAvailable, tc.exact)\n\t\t\t\t\t\treqIndex += len(stResp.Body.StackFrames)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}, {\n\t\t\t\t// Stop at line 18\n\t\t\t\texecute: func() {\n\t\t\t\t\t// Frame ids get reset at each breakpoint.\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 0)\n\t\t\t\t\tstResp = client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stResp, \"main.main\", 18, startHandle, 3, 3)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tvar stResp *dap.StackTraceResponse\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{8, 18},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 8\n\t\t\t\texecute: func() {\n\t\t\t\t\t// Even though the stack frames do not change,\n\t\t\t\t\t// repeated requests at the same breakpoint\n\t\t\t\t\t// would assign next block of unique ids to them each time.\n\t\t\t\t\tconst NumFrames = 6\n\n\t\t\t\t\tvar frames []dap.StackFrame\n\n\t\t\t\t\tfor start, levels := 0, 1; start < NumFrames; {\n\t\t\t\t\t\tclient.StackTraceRequest(1, start, levels)\n\t\t\t\t\t\tstResp = client.ExpectStackTraceResponse(t)\n\t\t\t\t\t\tframes = append(frames, stResp.Body.StackFrames...)\n\t\t\t\t\t\tif stResp.Body.TotalFrames < NumFrames {\n\t\t\t\t\t\t\tt.Errorf(\"got  %#v\\nwant TotalFrames>=%d\\n\", stResp.Body.TotalFrames, NumFrames)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif len(stResp.Body.StackFrames) < levels {\n\t\t\t\t\t\t\tt.Errorf(\"got  len(StackFrames)=%d\\nwant >=%d\\n\", len(stResp.Body.StackFrames), levels)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart += len(stResp.Body.StackFrames)\n\t\t\t\t\t}\n\n\t\t\t\t\t// TODO check all the frames.\n\t\t\t\t\twant := []struct {\n\t\t\t\t\t\twantName string\n\t\t\t\t\t\twantLine int\n\t\t\t\t\t}{\n\t\t\t\t\t\t{\"main.Increment\", 8},\n\t\t\t\t\t\t{\"main.Increment\", 11},\n\t\t\t\t\t\t{\"main.Increment\", 11},\n\t\t\t\t\t\t{\"main.main\", 17},\n\t\t\t\t\t\t{\"runtime.main\", 0},\n\t\t\t\t\t\t{\"runtime.goexit\", 0},\n\t\t\t\t\t}\n\t\t\t\t\tfor i, frame := range frames {\n\t\t\t\t\t\tframeId := startHandle + i\n\t\t\t\t\t\tif frame.Id != frameId {\n\t\t\t\t\t\t\tt.Errorf(\"got  %#v\\nwant Id=%d\\n\", frame, frameId)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Verify the name and line corresponding to the first returned frame (if any).\n\t\t\t\t\t\t// This is useful when the first frame is the frame corresponding to the breakpoint at\n\t\t\t\t\t\t// a predefined line. Line values < 0 are a signal to skip the check (which can be useful\n\t\t\t\t\t\t// for frames in the third-party code, where we do not control the lines).\n\t\t\t\t\t\tif want[i].wantLine > 0 && frame.Line != want[i].wantLine {\n\t\t\t\t\t\t\tt.Errorf(\"got  Line=%d\\nwant %d\\n\", frame.Line, want[i].wantLine)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif want[i].wantName != \"\" && frame.Name != want[i].wantName {\n\t\t\t\t\t\t\tt.Errorf(\"got  Name=%s\\nwant %s\\n\", frame.Name, want[i].wantName)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}, {\n\t\t\t\t// Stop at line 18\n\t\t\t\texecute: func() {\n\t\t\t\t\t// Frame ids get reset at each breakpoint.\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 0)\n\t\t\t\t\tstResp = client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stResp, \"main.main\", 18, startHandle, 3, 3)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\nfunc TestFunctionNameFormattingInStackTrace(t *testing.T) {\n\trunTest(t, \"consts\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 36\n\t\t\t\texecute: func() {\n\t\t\t\t\tif runtime.GOARCH == \"386\" && goversion.VersionAfterOrEqual(runtime.Version(), 1, 18) && !goversion.VersionAfterOrEqual(runtime.Version(), 1, 21) {\n\t\t\t\t\t\tclient.StepInRequest(1)\n\t\t\t\t\t\tclient.ExpectStepInResponse(t)\n\t\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\t}\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.main\", 36, 1000, 3, 3)\n\n\t\t\t\t\t// Step into pkg.AnotherMethod()\n\t\t\t\t\tclient.StepInRequest(1)\n\t\t\t\t\tclient.ExpectStepInResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack = client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"pkg.(*SomeType).AnotherMethod\", 13, 1000, 4, 4)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc Test_fnName(t *testing.T) {\n\ttests := []struct {\n\t\tsymbol string\n\t\twant   string\n\t}{\n\t\t{\n\t\t\tsymbol: \"pkg.functionName\",\n\t\t\twant:   \"pkg.functionName\",\n\t\t},\n\t\t{\n\t\t\tsymbol: \"github.com/some/long/package/path/pkg.(*SomeType).Method\",\n\t\t\twant:   \"pkg.(*SomeType).Method\",\n\t\t},\n\t\t{\n\t\t\tsymbol: \"github.com/some/path/pkg.typeparametric[go.shape.struct { example.com/blah/otherpkg.x int }]\",\n\t\t\twant:   \"pkg.typeparametric[go.shape.struct { example.com/blah/otherpkg.x int }]\",\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.symbol, func(t *testing.T) {\n\t\t\tloc := proc.Location{Fn: &proc.Function{Name: tt.symbol}}\n\t\t\tif got := fnName(&loc); got != tt.want {\n\t\t\t\tt.Errorf(\"fnName() = %v, want %v\", got, tt.want)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestSelectedThreadsRequest(t *testing.T) {\n\trunTest(t, \"goroutinestackprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{20},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 20)\n\n\t\t\t\t\tdefaultMaxGoroutines := maxGoroutines\n\t\t\t\t\tdefer func() { maxGoroutines = defaultMaxGoroutines }()\n\n\t\t\t\t\tmaxGoroutines = 1\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{8})\n\t\t\t\t\tclient.ExpectSetBreakpointsResponse(t)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"breakpoint\" || se.Body.ThreadId == 1 {\n\t\t\t\t\t\tt.Errorf(\"got %#v, want Reason=%q, ThreadId!=1\", se, \"breakpoint\")\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.ThreadsRequest()\n\t\t\t\t\toe := client.ExpectOutputEvent(t)\n\t\t\t\t\tif !strings.HasPrefix(oe.Body.Output, \"Too many goroutines\") {\n\t\t\t\t\t\tt.Errorf(\"got %#v, expected Output=\\\"Too many goroutines...\\\"\\n\", oe)\n\t\t\t\t\t}\n\t\t\t\t\ttr := client.ExpectThreadsResponse(t)\n\n\t\t\t\t\tif len(tr.Body.Threads) != 2 {\n\t\t\t\t\t\tt.Errorf(\"got %d threads, expected 2\\n\", len(tr.Body.Threads))\n\t\t\t\t\t}\n\n\t\t\t\t\tvar selectedFound bool\n\t\t\t\t\tfor _, thread := range tr.Body.Threads {\n\t\t\t\t\t\tif thread.Id == se.Body.ThreadId {\n\t\t\t\t\t\t\tselectedFound = true\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif !selectedFound {\n\t\t\t\t\t\tt.Errorf(\"got %#v, want ThreadId=%d\\n\", tr.Body.Threads, se.Body.ThreadId)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestGoroutineLabels(t *testing.T) {\n\ttests := []struct {\n\t\tshowPprofLabelsConfig   []string\n\t\texpectedPrefixWithLabel string\n\t}{\n\t\t{[]string{}, \"* [Go 1]\"},\n\t\t{[]string{\"k1\"}, \"* [Go 1 v1]\"},\n\t\t{[]string{\"k2\"}, \"* [Go 1 v2]\"},\n\t\t{[]string{\"k2\", \"k1\"}, \"* [Go 1 k2:v2 k1:v1]\"}, // When passing keys explicitly, we show them in the given order\n\t\t{[]string{\"unknown\"}, \"* [Go 1]\"},\n\t\t{[]string{\"unknown\", \"k1\"}, \"* [Go 1 k1:v1]\"},\n\t\t{[]string{\"*\"}, \"* [Go 1 k1:v1 k2:v2]\"}, // Special case for showing all labels; labels are shown sorted by key\n\t}\n\tfor _, tc := range tests {\n\t\trunTest(t, \"goroutineLabels\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t\t// Launch\n\t\t\t\tfunc() {\n\t\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\t\"mode\":                 \"exec\",\n\t\t\t\t\t\t\"program\":              fixture.Path,\n\t\t\t\t\t\t\"hideSystemGoroutines\": true,\n\t\t\t\t\t\t\"showPprofLabels\":      tc.showPprofLabelsConfig,\n\t\t\t\t\t\t\"stopOnEntry\":          !stopOnEntry,\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\t// Breakpoints are set within the program\n\t\t\t\t\"\", []int{},\n\t\t\t\t[]onBreakpoint{{\n\t\t\t\t\texecute: func() {\n\t\t\t\t\t\tclient.ThreadsRequest()\n\t\t\t\t\t\ttr := client.ExpectThreadsResponse(t)\n\t\t\t\t\t\t// The first breakpoint is before the call to pprof.Do; no labels yet:\n\t\t\t\t\t\texpectedPrefix := \"* [Go 1]\"\n\t\t\t\t\t\tif !strings.HasPrefix(tr.Body.Threads[0].Name, expectedPrefix) {\n\t\t\t\t\t\t\tt.Errorf(\"got %s, expected %s\\n\", tr.Body.Threads[0].Name, expectedPrefix)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\t\tcheckStop(t, client, 1, \"main.f\", 21)\n\t\t\t\t\t\tclient.ThreadsRequest()\n\t\t\t\t\t\ttr = client.ExpectThreadsResponse(t)\n\t\t\t\t\t\tif len(tr.Body.Threads) < 1 {\n\t\t\t\t\t\t\tt.Errorf(\"got %d threads, expected 1\\n\", len(tr.Body.Threads))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// The second breakpoint is inside pprof.Do, so there are labels:\n\t\t\t\t\t\tif !strings.HasPrefix(tr.Body.Threads[0].Name, tc.expectedPrefixWithLabel) {\n\t\t\t\t\t\t\tt.Errorf(\"got %s, expected %s\\n\", tr.Body.Threads[0].Name, tc.expectedPrefixWithLabel)\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tdisconnect: true,\n\t\t\t\t}},\n\t\t\t)\n\t\t})\n\t}\n}\n\nfunc TestHideSystemGoroutinesRequest(t *testing.T) {\n\ttests := []struct{ hideSystemGoroutines bool }{\n\t\t{hideSystemGoroutines: true},\n\t\t{hideSystemGoroutines: false},\n\t}\n\tfor _, tt := range tests {\n\t\trunTest(t, \"goroutinestackprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t\t// Launch\n\t\t\t\tfunc() {\n\t\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\t\"mode\":                 \"exec\",\n\t\t\t\t\t\t\"program\":              fixture.Path,\n\t\t\t\t\t\t\"hideSystemGoroutines\": tt.hideSystemGoroutines,\n\t\t\t\t\t\t\"stopOnEntry\":          !stopOnEntry,\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\t// Set breakpoints\n\t\t\t\tfixture.Source, []int{25},\n\t\t\t\t[]onBreakpoint{{\n\t\t\t\t\texecute: func() {\n\t\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 25)\n\n\t\t\t\t\t\tclient.ThreadsRequest()\n\t\t\t\t\t\ttr := client.ExpectThreadsResponse(t)\n\n\t\t\t\t\t\t// The user process creates 10 goroutines in addition to the\n\t\t\t\t\t\t// main goroutine, for a total of 11 goroutines.\n\t\t\t\t\t\tuserCount := 11\n\t\t\t\t\t\tif tt.hideSystemGoroutines {\n\t\t\t\t\t\t\tif runtime.GOOS == \"windows\" {\n\t\t\t\t\t\t\t\tif len(tr.Body.Threads) != userCount && len(tr.Body.Threads) != userCount+1 {\n\t\t\t\t\t\t\t\t\tt.Errorf(\"got %d goroutines, expected %d (or %d)\\n\", len(tr.Body.Threads), userCount, userCount+1)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif len(tr.Body.Threads) != userCount {\n\t\t\t\t\t\t\t\t\tt.Errorf(\"got %d goroutines, expected %d\\n\", len(tr.Body.Threads), userCount)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif len(tr.Body.Threads) <= userCount {\n\t\t\t\t\t\t\t\tt.Errorf(\"got %d goroutines, expected >%d\\n\", len(tr.Body.Threads), userCount)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tdisconnect: true,\n\t\t\t\t}})\n\t\t})\n\t}\n}\n\n// TestScopesAndVariablesRequests executes to a breakpoint and tests different\n// configurations of 'scopes' and 'variables' requests.\nfunc TestScopesAndVariablesRequests(t *testing.T) {\n\trunTest(t, \"testvariables\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"showGlobalVariables\": true, \"backend\": \"default\",\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at first breakpoint\n\t\t\t\texecute: func() {\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.foobar\", []int{65, 66}, 1000, 4, 4)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Globals (package main)\", globalsScope)\n\n\t\t\t\t\t// Globals\n\n\t\t\t\t\tclient.VariablesRequest(globalsScope)\n\t\t\t\t\tglobals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckVarExact(t, globals, 0, \"p1\", \"main.p1\", \"10\", \"int\", noChildren)\n\n\t\t\t\t\t// Locals\n\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckChildren(t, locals, \"Locals\", 33)\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"baz\", \"baz\", `\"bazburzum\"`, \"string\", noChildren)\n\t\t\t\t\tref := checkVarExact(t, locals, 1, \"bar\", \"bar\", `main.FooBar {Baz: 10, Bur: \"lorem\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tbar := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, bar, \"bar\", 2)\n\t\t\t\t\t\tcheckVarExact(t, bar, 0, \"Baz\", \"bar.Baz\", \"10\", \"int\", noChildren)\n\t\t\t\t\t\tcheckVarExact(t, bar, 1, \"Bur\", \"bar.Bur\", `\"lorem\"`, \"string\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, bar, 0)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, bar, 1)\n\t\t\t\t\t}\n\n\t\t\t\t\t// reflect.Kind == Bool\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"b1\", \"b1\", \"true\", \"bool\", noChildren)\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"b2\", \"b2\", \"false\", \"bool\", noChildren)\n\t\t\t\t\t// reflect.Kind == Int\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a2\", \"a2\", \"6\", \"int\", noChildren)\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"neg\", \"neg\", \"-1\", \"int\", noChildren)\n\t\t\t\t\t// reflect.Kind == Int8\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"i8\", \"i8\", \"1\", \"int8\", noChildren)\n\t\t\t\t\t// reflect.Kind == Int16 - see testvariables2\n\t\t\t\t\t// reflect.Kind == Int32 - see testvariables2\n\t\t\t\t\t// reflect.Kind == Int64 - see testvariables2\n\t\t\t\t\t// reflect.Kind == Uint\n\t\t\t\t\t// reflect.Kind == Uint8\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"u8\", \"u8\", \"255 = 0xff\", \"uint8\", noChildren)\n\t\t\t\t\t// reflect.Kind == Uint16\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"u16\", \"u16\", \"65535 = 0xffff\", \"uint16\", noChildren)\n\t\t\t\t\t// reflect.Kind == Uint32\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"u32\", \"u32\", \"4294967295 = 0xffffffff\", \"uint32\", noChildren)\n\t\t\t\t\t// reflect.Kind == Uint64\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"u64\", \"u64\", \"18446744073709551615 = 0xffffffffffffffff\", \"uint64\", noChildren)\n\t\t\t\t\t// reflect.Kind == Uintptr\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"up\", \"up\", \"5 = 0x5\", \"uintptr\", noChildren)\n\t\t\t\t\t// reflect.Kind == Float32\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"f32\", \"f32\", \"1.2\", \"float32\", noChildren)\n\t\t\t\t\t// reflect.Kind == Float64\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a3\", \"a3\", \"7.23\", \"float64\", noChildren)\n\t\t\t\t\t// reflect.Kind == Complex64\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"c64\", \"c64\", \"(1 + 2i)\", \"complex64\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tc64 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, c64, \"c64\", 2)\n\t\t\t\t\t\tcheckVarExact(t, c64, 0, \"real\", \"\", \"1\", \"float32\", noChildren)\n\t\t\t\t\t\tcheckVarExact(t, c64, 1, \"imaginary\", \"\", \"2\", \"float32\", noChildren)\n\t\t\t\t\t}\n\t\t\t\t\t// reflect.Kind == Complex128\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"c128\", \"c128\", \"(2 + 3i)\", \"complex128\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tc128 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, c128, \"c128\", 2)\n\t\t\t\t\t\tcheckVarExact(t, c128, 0, \"real\", \"\", \"2\", \"float64\", noChildren)\n\t\t\t\t\t\tcheckVarExact(t, c128, 1, \"imaginary\", \"\", \"3\", \"float64\", noChildren)\n\t\t\t\t\t}\n\t\t\t\t\t// reflect.Kind == Array\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"a4\", \"a4\", \"[2]int [1,2]\", \"[2]int\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ta4 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, a4, \"a4\", 2)\n\t\t\t\t\t\tcheckVarExact(t, a4, 0, \"[0]\", \"a4[0]\", \"1\", \"int\", noChildren)\n\t\t\t\t\t\tcheckVarExact(t, a4, 1, \"[1]\", \"a4[1]\", \"2\", \"int\", noChildren)\n\t\t\t\t\t}\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"a11\", \"a11\", `[3]main.FooBar [{Baz: 1, Bur: \"a\"},{Baz: 2, Bur: \"b\"},{Baz: 3, Bur: \"c\"}]`, \"[3]main.FooBar\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ta11 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, a11, \"a11\", 3)\n\t\t\t\t\t\tcheckVarExact(t, a11, 0, \"[0]\", \"a11[0]\", `main.FooBar {Baz: 1, Bur: \"a\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\t\tref = checkVarExact(t, a11, 1, \"[1]\", \"a11[1]\", `main.FooBar {Baz: 2, Bur: \"b\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\ta11_1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, a11_1, \"a11[1]\", 2)\n\t\t\t\t\t\t\tcheckVarExact(t, a11_1, 0, \"Baz\", \"a11[1].Baz\", \"2\", \"int\", noChildren)\n\t\t\t\t\t\t\tcheckVarExact(t, a11_1, 1, \"Bur\", \"a11[1].Bur\", `\"b\"`, \"string\", noChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, a11_1, 0)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, a11_1, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcheckVarExact(t, a11, 2, \"[2]\", \"a11[2]\", `main.FooBar {Baz: 3, Bur: \"c\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\t}\n\n\t\t\t\t\t// reflect.Kind == Chan - see testvariables2\n\t\t\t\t\t// reflect.Kind == Func - see testvariables2\n\t\t\t\t\t// reflect.Kind == Interface - see testvariables2\n\t\t\t\t\t// reflect.Kind == Map - see testvariables2\n\t\t\t\t\t// reflect.Kind == Ptr\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"a7\", \"a7\", `*main.FooBar {Baz: 5, Bur: \"strum\"}`, \"*main.FooBar\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ta7 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, a7, \"a7\", 1)\n\t\t\t\t\t\tref = checkVarExact(t, a7, 0, \"\", \"(*a7)\", `main.FooBar {Baz: 5, Bur: \"strum\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\ta7val := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, a7val, \"*a7\", 2)\n\t\t\t\t\t\t\tcheckVarExact(t, a7val, 0, \"Baz\", \"(*a7).Baz\", \"5\", \"int\", noChildren)\n\t\t\t\t\t\t\tcheckVarExact(t, a7val, 1, \"Bur\", \"(*a7).Bur\", `\"strum\"`, \"string\", noChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, a7val, 0)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, a7val, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// TODO(polina): how to test for \"nil\" (without type) and \"void\"?\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a9\", \"a9\", \"*main.FooBar nil\", \"*main.FooBar\", noChildren)\n\t\t\t\t\t// reflect.Kind == Slice\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"a5\", \"a5\", \"[]int len: 5, cap: 5, [1,2,3,4,5]\", \"[]int\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ta5 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, a5, \"a5\", 5)\n\t\t\t\t\t\tcheckVarExact(t, a5, 0, \"[0]\", \"a5[0]\", \"1\", \"int\", noChildren)\n\t\t\t\t\t\tcheckVarExact(t, a5, 4, \"[4]\", \"a5[4]\", \"5\", \"int\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, a5, 0)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, a5, 1)\n\t\t\t\t\t}\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"a12\", \"a12\", `[]main.FooBar len: 2, cap: 2, [{Baz: 4, Bur: \"d\"},{Baz: 5, Bur: \"e\"}]`, \"[]main.FooBar\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ta12 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, a12, \"a12\", 2)\n\t\t\t\t\t\tcheckVarExact(t, a12, 0, \"[0]\", \"a12[0]\", `main.FooBar {Baz: 4, Bur: \"d\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\t\tref = checkVarExact(t, a12, 1, \"[1]\", \"a12[1]\", `main.FooBar {Baz: 5, Bur: \"e\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\ta12_1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, a12_1, \"a12[1]\", 2)\n\t\t\t\t\t\t\tcheckVarExact(t, a12_1, 0, \"Baz\", \"a12[1].Baz\", \"5\", \"int\", noChildren)\n\t\t\t\t\t\t\tcheckVarExact(t, a12_1, 1, \"Bur\", \"a12[1].Bur\", `\"e\"`, \"string\", noChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, a12_1, 0)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, a12_1, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"a13\", \"a13\", `[]*main.FooBar len: 3, cap: 3, [*{Baz: 6, Bur: \"f\"},*{Baz: 7, Bur: \"g\"},*{Baz: 8, Bur: \"h\"}]`, \"[]*main.FooBar\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ta13 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, a13, \"a13\", 3)\n\t\t\t\t\t\tcheckVarExact(t, a13, 0, \"[0]\", \"a13[0]\", `*main.FooBar {Baz: 6, Bur: \"f\"}`, \"*main.FooBar\", hasChildren)\n\t\t\t\t\t\tcheckVarExact(t, a13, 1, \"[1]\", \"a13[1]\", `*main.FooBar {Baz: 7, Bur: \"g\"}`, \"*main.FooBar\", hasChildren)\n\t\t\t\t\t\tref = checkVarExact(t, a13, 2, \"[2]\", \"a13[2]\", `*main.FooBar {Baz: 8, Bur: \"h\"}`, \"*main.FooBar\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\ta13_2 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, a13_2, \"a13[2]\", 1)\n\t\t\t\t\t\t\tref = checkVarExact(t, a13_2, 0, \"\", \"(*a13[2])\", `main.FooBar {Baz: 8, Bur: \"h\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, a13_2, 0)\n\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\tval := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\tcheckChildren(t, val, \"*a13[2]\", 2)\n\t\t\t\t\t\t\t\tcheckVarExact(t, val, 0, \"Baz\", \"(*a13[2]).Baz\", \"8\", \"int\", noChildren)\n\t\t\t\t\t\t\t\tcheckVarExact(t, val, 1, \"Bur\", \"(*a13[2]).Bur\", `\"h\"`, \"string\", noChildren)\n\t\t\t\t\t\t\t\tvalidateEvaluateName(t, client, val, 0)\n\t\t\t\t\t\t\t\tvalidateEvaluateName(t, client, val, 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// reflect.Kind == String\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a1\", \"a1\", `\"foofoofoofoofoofoo\"`, \"string\", noChildren)\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a10\", \"a10\", `\"ofo\"`, \"string\", noChildren)\n\t\t\t\t\t// reflect.Kind == Struct\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"a6\", \"a6\", `main.FooBar {Baz: 8, Bur: \"word\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ta6 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, a6, \"a6\", 2)\n\t\t\t\t\t\tcheckVarExact(t, a6, 0, \"Baz\", \"a6.Baz\", \"8\", \"int\", noChildren)\n\t\t\t\t\t\tcheckVarExact(t, a6, 1, \"Bur\", \"a6.Bur\", `\"word\"`, \"string\", noChildren)\n\t\t\t\t\t}\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"a8\", \"a8\", `main.FooBar2 {Bur: 10, Baz: \"feh\"}`, \"main.FooBar2\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ta8 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, a8, \"a8\", 2)\n\t\t\t\t\t\tcheckVarExact(t, a8, 0, \"Bur\", \"a8.Bur\", \"10\", \"int\", noChildren)\n\t\t\t\t\t\tcheckVarExact(t, a8, 1, \"Baz\", \"a8.Baz\", `\"feh\"`, \"string\", noChildren)\n\t\t\t\t\t}\n\t\t\t\t\t// reflect.Kind == UnsafePointer - see testvariables2\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}, {\n\t\t\t\t// Stop at second breakpoint\n\t\t\t\texecute: func() {\n\t\t\t\t\t// Frame ids get reset at each breakpoint.\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.barfoo\", 27, 1000, 5, 5)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Globals (package main)\", globalsScope)\n\n\t\t\t\t\tclient.ScopesRequest(1111)\n\t\t\t\t\terres := client.ExpectInvisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to list locals: unknown frame id 1111\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to list locals: unknown frame id 1111\\\"\", erres)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckChildren(t, locals, \"Locals\", 1)\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a1\", \"a1\", `\"bur\"`, \"string\", noChildren)\n\n\t\t\t\t\tclient.VariablesRequest(globalsScope)\n\t\t\t\t\tglobals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckVarExact(t, globals, 0, \"p1\", \"main.p1\", \"10\", \"int\", noChildren)\n\n\t\t\t\t\tclient.VariablesRequest(7777)\n\t\t\t\t\terres = client.ExpectInvisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to lookup variable: unknown reference 7777\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to lookup variable: unknown reference 7777\\\"\", erres)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\n// TestScopesAndVariablesRequests2 executes to a breakpoint and tests different\n// configurations of 'scopes' and 'variables' requests.\nfunc TestScopesAndVariablesRequests2(t *testing.T) {\n\trunTest(t, \"testvariables2\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.main\", -1, 1000, 3, 3)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}, {\n\t\t\t\texecute: func() {\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.main\", -1, 1000, 3, 3)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tif len(scopes.Body.Scopes) > 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant len(scopes)=1 (Arguments & Locals)\", scopes)\n\t\t\t\t\t}\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\n\t\t\t\t\t// Locals\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\n\t\t\t\t\t// reflect.Kind == Bool - see testvariables\n\t\t\t\t\t// reflect.Kind == Int - see testvariables\n\t\t\t\t\t// reflect.Kind == Int8\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"ni8\", \"ni8\", \"-5\", \"int8\", noChildren)\n\t\t\t\t\t// reflect.Kind == Int16\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"ni16\", \"ni16\", \"-5\", \"int16\", noChildren)\n\t\t\t\t\t// reflect.Kind == Int32\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"ni32\", \"ni32\", \"-5\", \"int32\", noChildren)\n\t\t\t\t\t// reflect.Kind == Int64\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"ni64\", \"ni64\", \"-5\", \"int64\", noChildren)\n\t\t\t\t\t// reflect.Kind == Uint\n\t\t\t\t\t// reflect.Kind == Uint8 - see testvariables\n\t\t\t\t\t// reflect.Kind == Uint16 - see testvariables\n\t\t\t\t\t// reflect.Kind == Uint32 - see testvariables\n\t\t\t\t\t// reflect.Kind == Uint64 - see testvariables\n\t\t\t\t\t// reflect.Kind == Uintptr - see testvariables\n\t\t\t\t\t// reflect.Kind == Float32 - see testvariables\n\t\t\t\t\t// reflect.Kind == Float64\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"pinf\", \"pinf\", \"+Inf\", \"float64\", noChildren)\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"ninf\", \"ninf\", \"-Inf\", \"float64\", noChildren)\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"nan\", \"nan\", \"NaN\", \"float64\", noChildren)\n\t\t\t\t\t// reflect.Kind == Complex64 - see testvariables\n\t\t\t\t\t// reflect.Kind == Complex128 - see testvariables\n\t\t\t\t\t// reflect.Kind == Array\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a0\", \"a0\", \"[0]int []\", \"[0]int\", noChildren)\n\t\t\t\t\t// reflect.Kind == Chan\n\t\t\t\t\tref := checkVarExact(t, locals, -1, \"ch1\", \"ch1\", \"chan int 4/11\", \"chan int\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tch1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckVarExact(t, ch1, 0, \"qcount\", \"ch1.qcount\", \"4 = 0x4\", \"uint\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, ch1, 0)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, ch1, 10)\n\t\t\t\t\t}\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"chnil\", \"chnil\", \"chan int nil\", \"chan int\", noChildren)\n\t\t\t\t\t// reflect.Kind == Func\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"fn1\", \"fn1\", \"main.afunc\", \"main.functype\", noChildren)\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"fn2\", \"fn2\", \"nil\", \"main.functype\", noChildren)\n\t\t\t\t\t// reflect.Kind == Interface\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"ifacenil\", \"ifacenil\", \"interface {} nil\", \"interface {}\", noChildren)\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"iface2\", \"iface2\", \"interface {}(string) \\\"test\\\"\", \"interface {}(string)\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tiface2 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, iface2, \"iface2\", 1)\n\t\t\t\t\t\tcheckVarExact(t, iface2, 0, \"data\", \"iface2.(data)\", `\"test\"`, \"string\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, iface2, 0)\n\t\t\t\t\t}\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"iface4\", \"iface4\", \"interface {}([]go/constant.Value) [4]\", \"interface {}([]go/constant.Value)\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tiface4 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, iface4, \"iface4\", 1)\n\t\t\t\t\t\tref = checkVarExact(t, iface4, 0, \"data\", \"iface4.(data)\", \"[]go/constant.Value len: 1, cap: 1, [4]\", \"[]go/constant.Value\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tiface4data := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, iface4data, \"iface4.data\", 1)\n\t\t\t\t\t\t\tref = checkVarExact(t, iface4data, 0, \"[0]\", \"iface4.(data)[0]\", \"go/constant.Value(go/constant.int64Val) 4\", \"go/constant.Value(go/constant.int64Val)\", hasChildren)\n\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\tiface4data0 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\tcheckChildren(t, iface4data0, \"iface4.data[0]\", 1)\n\t\t\t\t\t\t\t\tcheckVarExact(t, iface4data0, 0, \"data\", \"iface4.(data)[0].(data)\", \"4\", \"go/constant.int64Val\", noChildren)\n\t\t\t\t\t\t\t\tvalidateEvaluateName(t, client, iface4data0, 0)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"errnil\", \"errnil\", \"error nil\", \"error\", noChildren)\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"err1\", \"err1\", \"error(*main.astruct) *{A: 1, B: 2}\", \"error(*main.astruct)\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\terr1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, err1, \"err1\", 1)\n\t\t\t\t\t\tcheckVarExact(t, err1, 0, \"data\", \"err1.(data)\", \"*main.astruct {A: 1, B: 2}\", \"*main.astruct\", hasChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, err1, 0)\n\t\t\t\t\t}\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"ptrinf\", \"ptrinf\", \"*interface {}(**interface {}) **...\", \"*interface {}\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tptrinf_val := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, ptrinf_val, \"*ptrinf\", 1)\n\t\t\t\t\t\tref = checkVarExact(t, ptrinf_val, 0, \"\", \"(*ptrinf)\", \"interface {}(**interface {}) **...\", \"interface {}(**interface {})\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tptrinf_val_data := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, ptrinf_val_data, \"(*ptrinf).data\", 1)\n\t\t\t\t\t\t\tcheckVarExact(t, ptrinf_val_data, 0, \"data\", \"(*ptrinf).(data)\", \"**interface {}(**interface {}) ...\", \"**interface {}\", hasChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, ptrinf_val_data, 0)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// reflect.Kind == Map\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"mnil\", \"mnil\", \"map[string]main.astruct nil\", \"map[string]main.astruct\", noChildren)\n\t\t\t\t\t// key - scalar, value - compound\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"m2\", \"m2\", \"map[int]*main.astruct [1: *{A: 10, B: 11}, ]\", \"map[int]*main.astruct\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tm2 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, m2, \"m2\", 2) // each key-value represented by a single child\n\t\t\t\t\t\tcheckVarExact(t, m2, 0, \"len()\", \"len(m2)\", \"1\", \"int\", noChildren)\n\t\t\t\t\t\tref = checkVarExact(t, m2, 1, \"1\", \"m2[1]\", \"*main.astruct {A: 10, B: 11}\", \"int: *main.astruct\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tm2kv1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, m2kv1, \"m2[1]\", 1)\n\t\t\t\t\t\t\tref = checkVarExact(t, m2kv1, 0, \"\", \"(*m2[1])\", \"main.astruct {A: 10, B: 11}\", \"main.astruct\", hasChildren)\n\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\tm2kv1deref := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\tcheckChildren(t, m2kv1deref, \"*m2[1]\", 2)\n\t\t\t\t\t\t\t\tcheckVarExact(t, m2kv1deref, 0, \"A\", \"(*m2[1]).A\", \"10\", \"int\", noChildren)\n\t\t\t\t\t\t\t\tcheckVarExact(t, m2kv1deref, 1, \"B\", \"(*m2[1]).B\", \"11\", \"int\", noChildren)\n\t\t\t\t\t\t\t\tvalidateEvaluateName(t, client, m2kv1deref, 0)\n\t\t\t\t\t\t\t\tvalidateEvaluateName(t, client, m2kv1deref, 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// key - compound, value - scalar\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"m3\", \"m3\", \"map[main.astruct]int [{A: 1, B: 1}: 42, {A: 2, B: 2}: 43, ]\", \"map[main.astruct]int\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tm3 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, m3, \"m3\", 3) // each key-value represented by a single child\n\t\t\t\t\t\tcheckVarExact(t, m3, 0, \"len()\", \"len(m3)\", \"2\", \"int\", noChildren)\n\t\t\t\t\t\tref = checkVarRegex(t, m3, 1, `main\\.astruct {A: 1, B: 1}`, `m3\\[\\(\\*\\(\\*\"main.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\]`, \"42\", \"int\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tm3kv0 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, m3kv0, \"m3[0]\", 2)\n\t\t\t\t\t\t\tcheckVarRegex(t, m3kv0, 0, \"A\", `\\(*\\(*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\.A`, \"1\", \"int\", noChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, m3kv0, 0)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tref = checkVarRegex(t, m3, 2, `main\\.astruct {A: 2, B: 2}`, `m3\\[\\(\\*\\(\\*\"main.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\]`, \"43\", \"\", hasChildren)\n\t\t\t\t\t\tif ref > 0 { // inspect another key from another key-value child\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tm3kv1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, m3kv1, \"m3[1]\", 2)\n\t\t\t\t\t\t\tcheckVarRegex(t, m3kv1, 1, \"B\", `\\(*\\(*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\.B`, \"2\", \"int\", noChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, m3kv1, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// key - compound, value - compound\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"m4\", \"m4\", \"map[main.astruct]main.astruct [{A: 1, B: 1}: {A: 11, B: 11}, {A: 2, B: 2}: {A: 22, B: 22}, ]\", \"map[main.astruct]main.astruct\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tm4 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, m4, \"m4\", 5) // each key and value represented by a child, so double the key-value count\n\t\t\t\t\t\tcheckVarExact(t, m4, 0, \"len()\", \"len(m4)\", \"2\", \"int\", noChildren)\n\t\t\t\t\t\tcheckVarRegex(t, m4, 1, `\\[key 0\\]`, `\\(\\*\\(\\*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)`, `main\\.astruct {A: 1, B: 1}`, `main\\.astruct`, hasChildren)\n\t\t\t\t\t\tcheckVarRegex(t, m4, 2, `\\[val 0\\]`, `m4\\[\\(\\*\\(\\*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\]`, `main\\.astruct {A: 11, B: 11}`, `main\\.astruct`, hasChildren)\n\t\t\t\t\t\tref = checkVarRegex(t, m4, 3, `\\[key 1\\]`, `\\(\\*\\(\\*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)`, `main\\.astruct {A: 2, B: 2}`, `main\\.astruct`, hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tm4Key1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, m4Key1, \"m4Key1\", 2)\n\t\t\t\t\t\t\tcheckVarRegex(t, m4Key1, 0, \"A\", `\\(\\*\\(\\*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\.A`, \"2\", \"int\", noChildren)\n\t\t\t\t\t\t\tcheckVarRegex(t, m4Key1, 1, \"B\", `\\(\\*\\(\\*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\.B`, \"2\", \"int\", noChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, m4Key1, 0)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, m4Key1, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tref = checkVarRegex(t, m4, 4, `\\[val 1\\]`, `m4\\[\\(\\*\\(\\*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\]`, `main\\.astruct {A: 22, B: 22}`, \"main.astruct\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tm4Val1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, m4Val1, \"m4Val1\", 2)\n\t\t\t\t\t\t\tcheckVarRegex(t, m4Val1, 0, \"A\", `m4\\[\\(\\*\\(\\*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\]\\.A`, \"22\", \"int\", noChildren)\n\t\t\t\t\t\t\tcheckVarRegex(t, m4Val1, 1, \"B\", `m4\\[\\(\\*\\(\\*\"main\\.astruct\"\\)\\(0x[0-9a-f]+\\)\\)\\]\\.B`, \"22\", \"int\", noChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, m4Val1, 0)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, m4Val1, 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"emptymap\", \"emptymap\", \"map[string]string []\", \"map[string]string\", noChildren)\n\t\t\t\t\t// reflect.Kind == Ptr\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"pp1\", \"pp1\", \"**1\", \"**int\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tpp1val := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, pp1val, \"*pp1\", 1)\n\t\t\t\t\t\tref = checkVarExact(t, pp1val, 0, \"\", \"(*pp1)\", \"*1\", \"*int\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tpp1valval := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, pp1valval, \"*(*pp1)\", 1)\n\t\t\t\t\t\t\tcheckVarExact(t, pp1valval, 0, \"\", \"(*(*pp1))\", \"1\", \"int\", noChildren)\n\t\t\t\t\t\t\tvalidateEvaluateName(t, client, pp1valval, 0)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// reflect.Kind == Slice\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"zsslice\", \"zsslice\", \"[]struct {} len: 3, cap: 3, [{},{},{}]\", \"[]struct {}\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tzsslice := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, zsslice, \"zsslice\", 3)\n\t\t\t\t\t\tcheckVarExact(t, zsslice, 2, \"[2]\", \"zsslice[2]\", \"struct {} {}\", \"struct {}\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, zsslice, 2)\n\t\t\t\t\t}\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"emptyslice\", \"emptyslice\", \"[]string len: 0, cap: 0, []\", \"[]string\", noChildren)\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"nilslice\", \"nilslice\", \"[]int len: 0, cap: 0, nil\", \"[]int\", noChildren)\n\t\t\t\t\t// reflect.Kind == String\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"longstr\", \"longstr\", longstr, \"string\", noChildren)\n\t\t\t\t\t// reflect.Kind == Struct\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"zsvar\", \"zsvar\", \"struct {} {}\", \"struct {}\", noChildren)\n\t\t\t\t\t// reflect.Kind == UnsafePointer\n\t\t\t\t\t// TODO(polina): how do I test for unsafe.Pointer(nil)?\n\t\t\t\t\tcheckVarRegex(t, locals, -1, \"upnil\", \"upnil\", `unsafe\\.Pointer\\(0x0\\)`, \"int\", noChildren)\n\t\t\t\t\tcheckVarRegex(t, locals, -1, \"up1\", \"up1\", `unsafe\\.Pointer\\(0x[0-9a-f]+\\)`, \"int\", noChildren)\n\n\t\t\t\t\t// Test unreadable variable\n\t\t\t\t\tref = checkVarRegex(t, locals, -1, \"unread\", \"unread\", `\\*\\(unreadable .+\\)`, \"int\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tval := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, val, \"*unread\", 1)\n\t\t\t\t\t\tcheckVarRegex(t, val, 0, \"^$\", `\\(\\*unread\\)`, `\\(unreadable .+\\)`, \"int\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, val, 0)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestScopesRequestsOptimized executes to a breakpoint and tests different\n// that the name of the \"Locals\" scope is correctly annotated with\n// a warning about debugging an optimized function.\nfunc TestScopesRequestsOptimized(t *testing.T) {\n\trunTestBuildFlags(t, \"testvariables\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"showGlobalVariables\": true,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at first breakpoint\n\t\t\t\texecute: func() {\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.foobar\", -1, 1000, 4, 4)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals (warning: optimized function)\", localsScope)\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Globals (package main)\", globalsScope)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}, {\n\t\t\t\t// Stop at second breakpoint\n\t\t\t\texecute: func() {\n\t\t\t\t\t// Frame ids get reset at each breakpoint.\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.barfoo\", 27, 1000, 5, 5)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals (warning: optimized function)\", localsScope)\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Globals (package main)\", globalsScope)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t},\n\t\tprotest.EnableOptimization, false)\n}\n\n// TestVariablesLoading exposes test cases where variables might be partially or\n// fully unloaded.\nfunc TestVariablesLoading(t *testing.T) {\n\trunTest(t, \"testvariables2\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute:    func() {},\n\t\t\t\tdisconnect: false,\n\t\t\t}, {\n\t\t\t\texecute: func() {\n\t\t\t\t\t// Change default config values to trigger certain unloaded corner cases\n\t\t\t\t\tsaveDefaultConfig := DefaultLoadConfig\n\t\t\t\t\tDefaultLoadConfig.MaxStructFields = 5\n\t\t\t\t\tDefaultLoadConfig.MaxStringLen = 64\n\t\t\t\t\t// Set the MaxArrayValues = 33 to execute a bug for map handling where\n\t\t\t\t\t// a request for  2*MaxArrayValues indexed map children would not correctly\n\t\t\t\t\t// reslice the map. See https://github.com/golang/vscode-go/issues/2351.\n\t\t\t\t\tDefaultLoadConfig.MaxArrayValues = 33\n\t\t\t\t\tdefer func() {\n\t\t\t\t\t\tDefaultLoadConfig = saveDefaultConfig\n\t\t\t\t\t}()\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 0)\n\t\t\t\t\tclient.ExpectStackTraceResponse(t)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tclient.ExpectScopesResponse(t)\n\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\n\t\t\t\t\t// String partially missing based on LoadConfig.MaxStringLen\n\t\t\t\t\t// See also TestVariableLoadingOfLongStrings\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"longstr\", \"longstr\", longstrLoaded64, \"string\", noChildren)\n\n\t\t\t\t\tcheckArrayChildren := func(t *testing.T, longarr *dap.VariablesResponse, parentName string, start int) {\n\t\t\t\t\t\tt.Helper()\n\t\t\t\t\t\tfor i, child := range longarr.Body.Variables {\n\t\t\t\t\t\t\tidx := start + i\n\t\t\t\t\t\t\tif child.Name != fmt.Sprintf(\"[%d]\", idx) || child.EvaluateName != fmt.Sprintf(\"%s[%d]\", parentName, idx) {\n\t\t\t\t\t\t\t\tt.Errorf(\"Expected %s[%d] to have Name=\\\"[%d]\\\" EvaluateName=\\\"%s[%d]\\\", got %#v\", parentName, idx, idx, parentName, idx, child)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Array not fully loaded based on LoadConfig.MaxArrayValues.\n\t\t\t\t\t// Expect to be able to load array by paging.\n\t\t\t\t\tref := checkVarExactIndexed(t, locals, -1, \"longarr\", \"longarr\", \"[100]int [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+67 more]\", \"[100]int\", hasChildren, 100, 0)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tlongarr := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, longarr, \"longarr\", 33)\n\t\t\t\t\t\tcheckArrayChildren(t, longarr, \"longarr\", 0)\n\n\t\t\t\t\t\tclient.IndexedVariablesRequest(ref, 0, 100)\n\t\t\t\t\t\tlongarr = client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, longarr, \"longarr\", 100)\n\t\t\t\t\t\tcheckArrayChildren(t, longarr, \"longarr\", 0)\n\n\t\t\t\t\t\tclient.IndexedVariablesRequest(ref, 50, 50)\n\t\t\t\t\t\tlongarr = client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, longarr, \"longarr\", 50)\n\t\t\t\t\t\tcheckArrayChildren(t, longarr, \"longarr\", 50)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Slice not fully loaded based on LoadConfig.MaxArrayValues.\n\t\t\t\t\t// Expect to be able to load slice by paging.\n\t\t\t\t\tref = checkVarExactIndexed(t, locals, -1, \"longslice\", \"longslice\", \"[]int len: 100, cap: 100, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+67 more]\", \"[]int\", hasChildren, 100, 0)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tlongarr := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, longarr, \"longslice\", 33)\n\t\t\t\t\t\tcheckArrayChildren(t, longarr, \"longslice\", 0)\n\n\t\t\t\t\t\tclient.IndexedVariablesRequest(ref, 0, 100)\n\t\t\t\t\t\tlongarr = client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, longarr, \"longslice\", 100)\n\t\t\t\t\t\tcheckArrayChildren(t, longarr, \"longslice\", 0)\n\n\t\t\t\t\t\tclient.IndexedVariablesRequest(ref, 50, 50)\n\t\t\t\t\t\tlongarr = client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, longarr, \"longslice\", 50)\n\t\t\t\t\t\tcheckArrayChildren(t, longarr, \"longslice\", 50)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Map not fully loaded based on LoadConfig.MaxArrayValues\n\t\t\t\t\t// Expect to be able to load map by paging.\n\t\t\t\t\tref = checkVarRegexIndexed(t, locals, -1, \"m1\", \"m1\", `map\\[string\\]main\\.astruct \\[.+\\.\\.\\.`, `map\\[string\\]main\\.astruct`, hasChildren, 66, 1)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tm1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, m1, \"m1\", 34)\n\n\t\t\t\t\t\tclient.IndexedVariablesRequest(ref, 0, 66)\n\t\t\t\t\t\tm1 = client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, m1, \"m1\", 66)\n\n\t\t\t\t\t\tclient.IndexedVariablesRequest(ref, 0, 33)\n\t\t\t\t\t\tm1part1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, m1part1, \"m1\", 33)\n\n\t\t\t\t\t\tclient.IndexedVariablesRequest(ref, 33, 33)\n\t\t\t\t\t\tm1part2 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, m1part2, \"m1\", 33)\n\n\t\t\t\t\t\tif len(m1part1.Body.Variables)+len(m1part2.Body.Variables) == len(m1.Body.Variables) {\n\t\t\t\t\t\t\tfor i, got := range m1part1.Body.Variables {\n\t\t\t\t\t\t\t\twant := m1.Body.Variables[i]\n\t\t\t\t\t\t\t\tif got.Name != want.Name || got.Value != want.Value {\n\t\t\t\t\t\t\t\t\tt.Errorf(\"got %#v, want Name=%q Value=%q\", got, want.Name, want.Value)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor i, got := range m1part2.Body.Variables {\n\t\t\t\t\t\t\t\twant := m1.Body.Variables[i+len(m1part1.Body.Variables)]\n\t\t\t\t\t\t\t\tif got.Name != want.Name || got.Value != want.Value {\n\t\t\t\t\t\t\t\t\tt.Errorf(\"got %#v, want Name=%q Value=%q\", got, want.Name, want.Value)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclient.NamedVariablesRequest(ref)\n\t\t\t\t\t\tnamed := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, named, \"m1\", 1)\n\t\t\t\t\t\tcheckVarExact(t, named, 0, \"len()\", \"len(m1)\", \"66\", \"int\", noChildren)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Struct partially missing based on LoadConfig.MaxStructFields\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"sd\", \"sd\", \"(loaded 5/6) main.D {u1: 0, u2: 0, u3: 0, u4: 0, u5: 0,...+1 more}\", \"main.D\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tsd := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, sd, \"sd\", 5)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fully missing struct auto-loaded when reaching LoadConfig.MaxVariableRecurse (also tests evaluateName corner case)\n\t\t\t\t\tref = checkVarRegex(t, locals, -1, \"c1\", \"c1\", `main\\.cstruct {pb: \\*main\\.bstruct {a: \\(\\*main\\.astruct\\)\\(0x[0-9a-f]+\\)}, sa: []\\*main\\.astruct len: 3, cap: 3, [\\*\\(\\*main\\.astruct\\)\\(0x[0-9a-f]+\\),\\*\\(\\*main\\.astruct\\)\\(0x[0-9a-f]+\\),\\*\\(\\*main.astruct\\)\\(0x[0-9a-f]+\\)]}`, `main\\.cstruct`, hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tc1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, c1, \"c1\", 2)\n\t\t\t\t\t\tref = checkVarRegex(t, c1, 1, \"sa\", `c1\\.sa`, `\\[\\]\\*main\\.astruct len: 3, cap: 3, \\[\\*\\(\\*main\\.astruct\\)\\(0x[0-9a-f]+\\),\\*\\(\\*main\\.astruct\\)\\(0x[0-9a-f]+\\),\\*\\(\\*main\\.astruct\\)\\(0x[0-9a-f]+\\)\\]`, `\\[\\]\\*main\\.astruct`, hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tc1sa := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, c1sa, \"c1.sa\", 3)\n\t\t\t\t\t\t\tref = checkVarRegex(t, c1sa, 0, `\\[0\\]`, `c1\\.sa\\[0\\]`, `\\*\\(\\*main\\.astruct\\)\\(0x[0-9a-f]+\\)`, `\\*main\\.astruct`, hasChildren)\n\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\t// Auto-loading of fully missing struct children happens here\n\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\tc1sa0 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\tcheckChildren(t, c1sa0, \"c1.sa[0]\", 1)\n\t\t\t\t\t\t\t\t// TODO(polina): there should be children here once we support auto loading\n\t\t\t\t\t\t\t\tcheckVarExact(t, c1sa0, 0, \"\", \"(*c1.sa[0])\", \"main.astruct {A: 1, B: 2}\", \"main.astruct\", hasChildren)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fully missing struct auto-loaded when hitting LoadConfig.MaxVariableRecurse (also tests evaluateName corner case)\n\t\t\t\t\tref = checkVarRegex(t, locals, -1, \"aas\", \"aas\", `\\[\\]main\\.a len: 1, cap: 1, \\[{aas: \\[\\]main\\.a len: 1, cap: 1, \\[\\(\\*main\\.a\\)\\(0x[0-9a-f]+\\)\\]}\\]`, `\\[\\]main\\.a`, hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\taas := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, aas, \"aas\", 1)\n\t\t\t\t\t\tref = checkVarRegex(t, aas, 0, \"[0]\", `aas\\[0\\]`, `main\\.a {aas: \\[\\]main.a len: 1, cap: 1, \\[\\(\\*main\\.a\\)\\(0x[0-9a-f]+\\)\\]}`, `main\\.a`, hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\taas0 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, aas0, \"aas[0]\", 1)\n\t\t\t\t\t\t\tref = checkVarRegex(t, aas0, 0, \"aas\", `aas\\[0\\]\\.aas`, `\\[\\]main\\.a len: 1, cap: 1, \\[\\(\\*main\\.a\\)\\(0x[0-9a-f]+\\)\\]`, `\\[\\]main\\.a`, hasChildren)\n\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\t// Auto-loading of fully missing struct children happens here\n\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\taas0aas := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\tcheckChildren(t, aas0aas, \"aas[0].aas\", 1)\n\t\t\t\t\t\t\t\t// TODO(polina): there should be a child here once we support auto loading - test for \"aas[0].aas[0].aas\"\n\t\t\t\t\t\t\t\tref = checkVarRegex(t, aas0aas, 0, \"[0]\", `aas\\[0\\]\\.aas\\[0\\]`, `main\\.a {aas: \\[\\]main\\.a len: 1, cap: 1, \\[\\(\\*main\\.a\\)\\(0x[0-9a-f]+\\)\\]}`, \"main.a\", hasChildren)\n\t\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\t\taas0aas0 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\t\tcheckChildren(t, aas0aas, \"aas[0].aas[0]\", 1)\n\t\t\t\t\t\t\t\t\tcheckVarRegex(t, aas0aas0, 0, \"aas\", `aas\\[0\\]\\.aas\\[0\\]\\.aas`, `\\[\\]main\\.a len: 1, cap: 1, \\[\\(\\*main\\.a\\)\\(0x[0-9a-f]+\\)\\]`, `\\[\\]main\\.a`, hasChildren)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fully missing map auto-loaded when hitting LoadConfig.MaxVariableRecurse (also tests evaluateName corner case)\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"tm\", \"tm\", \"main.truncatedMap {v: []map[string]main.astruct len: 1, cap: 1, [[...]]}\", \"main.truncatedMap\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ttm := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, tm, \"tm\", 1)\n\t\t\t\t\t\tref = checkVarExact(t, tm, 0, \"v\", \"tm.v\", \"[]map[string]main.astruct len: 1, cap: 1, [[...]]\", \"[]map[string]main.astruct\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t// Auto-loading of fully missing map children happens here, but they get truncated at MaxArrayValues\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\ttmV := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, tmV, \"tm.v\", 1)\n\t\t\t\t\t\t\tref = checkVarRegex(t, tmV, 0, `\\[0\\]`, `tm\\.v\\[0\\]`, `map\\[string\\]main\\.astruct \\[.+\\.\\.\\.`, `map\\[string\\]main\\.astruct`, hasChildren)\n\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\ttmV0 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\tcheckChildren(t, tmV0, \"tm.v[0]\", 34)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Auto-loading works with call return variables as well\n\t\t\t\t\tprotest.MustSupportFunctionCalls(t, testBackend)\n\t\t\t\t\tclient.EvaluateRequest(\"call rettm()\", 1000, \"repl\")\n\t\t\t\t\tgot := client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEval(t, got, \"main.truncatedMap {v: []map[string]main.astruct len: 1, cap: 1, [[...]]}\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\trv := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, rv, \"rv\", 1)\n\t\t\t\t\t\tref = checkVarExact(t, rv, 0, \"~r0\", \"\", \"main.truncatedMap {v: []map[string]main.astruct len: 1, cap: 1, [[...]]}\", \"main.truncatedMap\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\ttm := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, tm, \"tm\", 1)\n\t\t\t\t\t\t\tref = checkVarExact(t, tm, 0, \"v\", \"\", \"[]map[string]main.astruct len: 1, cap: 1, [[...]]\", \"[]map[string]main.astruct\", hasChildren)\n\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\t// Auto-loading of fully missing map children happens here, but they get truncated at MaxArrayValues\n\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\ttmV := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\tcheckChildren(t, tmV, \"tm.v\", 1)\n\t\t\t\t\t\t\t\t// TODO(polina): this evaluate name is not usable - it should be empty\n\t\t\t\t\t\t\t\tref = checkVarRegex(t, tmV, 0, `\\[0\\]`, `\\[0\\]`, `map\\[string\\]main\\.astruct \\[.+\\.\\.\\.`, `map\\[string\\]main\\.astruct`, hasChildren)\n\t\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\t\ttmV0 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\t\tcheckChildren(t, tmV0, \"tm.v[0]\", 34)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// TODO(polina): need fully missing array/slice test case\n\n\t\t\t\t\t// Zero slices, structs and maps are not treated as fully missing\n\t\t\t\t\t// See zsvar, zsslice,, emptyslice, emptymap, a0\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n\trunTest(t, \"testvariables\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tDefaultLoadConfig.FollowPointers = false\n\t\t\t\t\tdefer func() { DefaultLoadConfig.FollowPointers = true }()\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 0)\n\t\t\t\t\tclient.ExpectStackTraceResponse(t)\n\n\t\t\t\t\tloadvars := func(frame int) {\n\t\t\t\t\t\tclient.ScopesRequest(frame)\n\t\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\t\tlocalsRef := 0\n\t\t\t\t\t\tfor _, s := range scopes.Body.Scopes {\n\t\t\t\t\t\t\tif s.Name == \"Locals\" {\n\t\t\t\t\t\t\t\tlocalsRef = s.VariablesReference\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tclient.VariablesRequest(localsRef)\n\t\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\n\t\t\t\t\t\t// Interface auto-loaded when hitting LoadConfig.MaxVariableRecurse=1\n\n\t\t\t\t\t\tref := checkVarRegex(t, locals, -1, \"ni\", \"ni\", `\\[\\]interface {} len: 1, cap: 1, \\[\\[\\]interface {} len: 1, cap: 1, \\[\\*\\(\\*interface {}\\)\\(0x[0-9a-f]+\\)\\]\\]`, `\\[\\]interface {}`, hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tni := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tref = checkVarRegex(t, ni, 0, `\\[0\\]`, `ni\\[0\\]`, `interface \\{\\}\\(\\[\\]interface \\{\\}\\) \\[\\*\\(\\*interface \\{\\}\\)\\(0x[0-9a-f]+\\)\\]`, \"interface {}\", hasChildren)\n\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\tniI1 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\tref = checkVarRegex(t, niI1, 0, \"data\", `ni\\[0\\]\\.\\(data\\)`, `\\[\\]interface {} len: 1, cap: 1, \\[\\*\\(\\*interface {}\\)\\(0x[0-9a-f]+\\)`, `\\[\\]interface {}`, hasChildren)\n\t\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\t\t// Auto-loading happens here\n\t\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\t\tniI1Data := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\t\tref = checkVarExact(t, niI1Data, 0, \"[0]\", \"ni[0].(data)[0]\", \"interface {}(int) 123\", \"interface {}(int)\", hasChildren)\n\t\t\t\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\t\t\t\tniI1DataI2 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\t\t\t\tcheckVarExact(t, niI1DataI2, 0, \"data\", \"ni[0].(data)[0].(data)\", \"123\", \"int\", noChildren)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Pointer values loaded even with LoadConfig.FollowPointers=false\n\t\t\t\t\t\tcheckVarExact(t, locals, -1, \"a7\", \"a7\", \"*main.FooBar {Baz: 5, Bur: \\\"strum\\\"}\", \"*main.FooBar\", hasChildren)\n\n\t\t\t\t\t\t// Auto-loading works on results of evaluate expressions as well\n\t\t\t\t\t\tclient.EvaluateRequest(\"a7\", frame, \"repl\")\n\t\t\t\t\t\tcheckEval(t, client.ExpectEvaluateResponse(t), \"*main.FooBar {Baz: 5, Bur: \\\"strum\\\"}\", hasChildren)\n\n\t\t\t\t\t\tclient.EvaluateRequest(\"&a7\", frame, \"repl\")\n\t\t\t\t\t\tpa7 := client.ExpectEvaluateResponse(t)\n\t\t\t\t\t\tref = checkEvalRegex(t, pa7, `\\*\\(\\*main\\.FooBar\\)\\(0x[0-9a-f]+\\)`, hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\ta7 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckVarExact(t, a7, 0, \"a7\", \"(*(&a7))\", \"*main.FooBar {Baz: 5, Bur: \\\"strum\\\"}\", \"*main.FooBar\", hasChildren)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Frame-independent loading expressions allow us to auto-load\n\t\t\t\t\t// variables in any frame, not just topmost.\n\t\t\t\t\tloadvars(1000 /*first topmost frame*/)\n\t\t\t\t\t// step into another function\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{{Name: \"main.barfoo\"}})\n\t\t\t\t\tclient.ExpectSetFunctionBreakpointsResponse(t)\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.barfoo\", -1)\n\t\t\t\t\tloadvars(1001 /*second frame here is same as topmost above*/)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestVariablesMetadata exposes test cases where variables contain metadata that\n// can be accessed by requesting named variables.\nfunc TestVariablesMetadata(t *testing.T) {\n\trunTest(t, \"testvariables2\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute:    func() {},\n\t\t\t\tdisconnect: false,\n\t\t\t}, {\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", -1)\n\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\n\t\t\t\t\tcheckNamedChildren := func(ref int, name, typeStr string, vals []string, evaluate bool) {\n\t\t\t\t\t\t// byteslice, request named variables\n\t\t\t\t\t\tclient.NamedVariablesRequest(ref)\n\t\t\t\t\t\tnamed := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, named, name, 1)\n\t\t\t\t\t\tcheckVarExact(t, named, 0, \"string()\", \"\", \"\\\"tèst\\\"\", \"string\", false)\n\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tall := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, all, name, len(vals)+1)\n\t\t\t\t\t\tcheckVarExact(t, all, 0, \"string()\", \"\", \"\\\"tèst\\\"\", \"string\", false)\n\t\t\t\t\t\tfor i, v := range vals {\n\t\t\t\t\t\t\tidx := fmt.Sprintf(\"[%d]\", i)\n\t\t\t\t\t\t\tevalName := fmt.Sprintf(\"%s[%d]\", name, i)\n\t\t\t\t\t\t\tif evaluate {\n\t\t\t\t\t\t\t\tevalName = fmt.Sprintf(\"(%s)[%d]\", name, i)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcheckVarExact(t, all, i+1, idx, evalName, v, typeStr, false)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbytes := []string{\"116 = 0x74\", \"195 = 0xc3\", \"168 = 0xa8\", \"115 = 0x73\", \"116 = 0x74\"}\n\t\t\t\t\trunes := []string{\"116\", \"232\", \"115\", \"116\"}\n\n\t\t\t\t\t// byteslice\n\t\t\t\t\tref := checkVarExactIndexed(t, locals, -1, \"byteslice\", \"byteslice\", \"[]uint8 len: 5, cap: 5, [116,195,168,115,116]\", \"[]uint8\", true, 5, 1)\n\t\t\t\t\tcheckNamedChildren(ref, \"byteslice\", \"uint8\", bytes, false)\n\n\t\t\t\t\tclient.EvaluateRequest(\"byteslice\", 0, \"\")\n\t\t\t\t\tgot := client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEvalIndexed(t, got, \"[]uint8 len: 5, cap: 5, [116,195,168,115,116]\", hasChildren, 5, 1)\n\t\t\t\t\tcheckNamedChildren(ref, \"byteslice\", \"uint8\", bytes, true)\n\n\t\t\t\t\t// runeslice\n\t\t\t\t\tref = checkVarExactIndexed(t, locals, -1, \"runeslice\", \"runeslice\", \"[]int32 len: 4, cap: 4, [116,232,115,116]\", \"[]int32\", true, 4, 1)\n\t\t\t\t\tcheckNamedChildren(ref, \"runeslice\", \"int32\", runes, false)\n\n\t\t\t\t\tclient.EvaluateRequest(\"runeslice\", 0, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEvalIndexed(t, got, \"[]int32 len: 4, cap: 4, [116,232,115,116]\", hasChildren, 4, 1)\n\t\t\t\t\tcheckNamedChildren(ref, \"runeslice\", \"int32\", runes, true)\n\n\t\t\t\t\t// bytearray\n\t\t\t\t\tref = checkVarExactIndexed(t, locals, -1, \"bytearray\", \"bytearray\", \"[5]uint8 [116,195,168,115,116]\", \"[5]uint8\", true, 5, 1)\n\t\t\t\t\tcheckNamedChildren(ref, \"bytearray\", \"uint8\", bytes, false)\n\n\t\t\t\t\tclient.EvaluateRequest(\"bytearray\", 0, \"hover\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEvalIndexed(t, got, \"[5]uint8 [116,195,168,115,116]\", hasChildren, 5, 1)\n\t\t\t\t\tcheckNamedChildren(ref, \"bytearray\", \"uint8\", bytes, true)\n\n\t\t\t\t\t// runearray\n\t\t\t\t\tref = checkVarExactIndexed(t, locals, -1, \"runearray\", \"runearray\", \"[4]int32 [116,232,115,116]\", \"[4]int32\", true, 4, 1)\n\t\t\t\t\tcheckNamedChildren(ref, \"runearray\", \"int32\", runes, false)\n\n\t\t\t\t\tclient.EvaluateRequest(\"runearray\", 0, \"watch\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEvalIndexed(t, got, \"[4]int32 [116,232,115,116]\", hasChildren, 4, 1)\n\t\t\t\t\tcheckNamedChildren(ref, \"runearray\", \"int32\", runes, true)\n\n\t\t\t\t\t// string feature is not available with user-defined byte types\n\t\t\t\t\tref = checkVarExactIndexed(t, locals, -1, \"bytestypeslice\", \"bytestypeslice\", \"[]main.Byte len: 5, cap: 5, [116,195,168,115,116]\", \"[]main.Byte\", true, 5, 1)\n\t\t\t\t\tclient.NamedVariablesRequest(ref)\n\t\t\t\t\tnamedchildren := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckChildren(t, namedchildren, \"bytestypeslice as string\", 0)\n\t\t\t\t\tref = checkVarExactIndexed(t, locals, -1, \"bytetypearray\", \"bytetypearray\", \"[5]main.Byte [116,195,168,115,116]\", \"[5]main.Byte\", true, 5, 1)\n\t\t\t\t\tclient.NamedVariablesRequest(ref)\n\t\t\t\t\tnamedchildren = client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckChildren(t, namedchildren, \"bytetypearray as string\", 0)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestGlobalScopeAndVariables launches the program with showGlobalVariables\n// arg set, executes to a breakpoint in the main package and tests that global\n// package main variables got loaded. It then steps into a function\n// in another package and tests that globals scope got updated to those vars.\nfunc TestGlobalScopeAndVariables(t *testing.T) {\n\trunTest(t, \"consts\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"showGlobalVariables\": true, \"showRegisters\": true,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 36\n\t\t\t\texecute: func() {\n\t\t\t\t\tif runtime.GOARCH == \"386\" && goversion.VersionAfterOrEqual(runtime.Version(), 1, 18) && !goversion.VersionAfterOrEqual(runtime.Version(), 1, 21) {\n\t\t\t\t\t\tclient.StepInRequest(1)\n\t\t\t\t\t\tclient.ExpectStepInResponse(t)\n\t\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\t}\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.main\", 36, 1000, 3, 3)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Globals (package main)\", globalsScope)\n\t\t\t\t\tcheckScope(t, scopes, 2, \"Registers\", globalsScope+1)\n\n\t\t\t\t\tclient.VariablesRequest(globalsScope)\n\t\t\t\t\tclient.ExpectVariablesResponse(t)\n\t\t\t\t\t// The program has no user-defined globals.\n\t\t\t\t\t// Depending on the Go version, there might\n\t\t\t\t\t// be some runtime globals (e.g. main..inittask)\n\t\t\t\t\t// so testing for the total number is too fragile.\n\n\t\t\t\t\t// Step into pkg.AnotherMethod()\n\t\t\t\t\tclient.StepInRequest(1)\n\t\t\t\t\tclient.ExpectStepInResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack = client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"\", 13, 1000, 4, 4)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes = client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Globals (package github.com/go-delve/delve/_fixtures/internal/dir0/pkg)\", globalsScope)\n\n\t\t\t\t\tclient.VariablesRequest(globalsScope)\n\t\t\t\t\tglobals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckChildren(t, globals, \"Globals\", 1)\n\t\t\t\t\tref := checkVarExact(t, globals, 0, \"SomeVar\", \"github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeVar\", \"pkg.SomeType {X: 0}\", \"github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeType\", hasChildren)\n\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tsomevar := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, somevar, \"SomeVar\", 1)\n\t\t\t\t\t\t// TODO(polina): unlike main.p, this prefix won't work\n\t\t\t\t\t\tcheckVarExact(t, somevar, 0, \"X\", \"github.com/go-delve/delve/_fixtures/internal/dir0/pkg.SomeVar.X\", \"0\", \"float64\", noChildren)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\n// TestRegistersScopeAndVariables launches the program with showRegisters\n// arg set, executes to a breakpoint in the main package and tests that the registers\n// got loaded. It then steps into a function in another package and tests that\n// the registers were updated by checking PC.\nfunc TestRegistersScopeAndVariables(t *testing.T) {\n\tif runtime.GOARCH == \"ppc64le\" {\n\t\tt.Skip(\"skipped on ppc64le: broken\")\n\t}\n\trunTest(t, \"consts\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"showRegisters\": true,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 36\n\t\t\t\texecute: func() {\n\t\t\t\t\tif runtime.GOARCH == \"386\" && goversion.VersionAfterOrEqual(runtime.Version(), 1, 18) && !goversion.VersionAfterOrEqual(runtime.Version(), 1, 21) {\n\t\t\t\t\t\tclient.StepInRequest(1)\n\t\t\t\t\t\tclient.ExpectStepInResponse(t)\n\t\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.main\", 36, 1000, 3, 3)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\t\t\t\t\tregistersScope := localsScope + 1\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Registers\", registersScope)\n\n\t\t\t\t\t// Check that instructionPointer points to the InstructionPointerReference.\n\t\t\t\t\tpc, err := getPC(t, client, 1)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Error(pc)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.VariablesRequest(registersScope)\n\t\t\t\t\tvr := client.ExpectVariablesResponse(t)\n\t\t\t\t\tif len(vr.Body.Variables) == 0 {\n\t\t\t\t\t\tt.Fatal(\"no registers returned\")\n\t\t\t\t\t}\n\t\t\t\t\tidx := findPcReg(vr.Body.Variables)\n\t\t\t\t\tif idx < 0 {\n\t\t\t\t\t\tt.Fatalf(\"got %#v, want a reg with instruction pointer\", vr.Body.Variables)\n\t\t\t\t\t}\n\t\t\t\t\tpcReg := vr.Body.Variables[idx]\n\t\t\t\t\tgotPc, err := strconv.ParseUint(pcReg.Value, 0, 64)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Error(err)\n\t\t\t\t\t}\n\t\t\t\t\tname := strings.TrimSpace(pcReg.Name)\n\t\t\t\t\tif gotPc != pc || pcReg.EvaluateName != fmt.Sprintf(\"_%s\", strings.ToUpper(name)) {\n\t\t\t\t\t\tt.Errorf(\"got %#v,\\nwant Name=%s Value=%#x EvaluateName=%q\", pcReg, name, pc, fmt.Sprintf(\"_%s\", strings.ToUpper(name)))\n\t\t\t\t\t}\n\n\t\t\t\t\t// The program has no user-defined globals.\n\t\t\t\t\t// Depending on the Go version, there might\n\t\t\t\t\t// be some runtime globals (e.g. main..inittask)\n\t\t\t\t\t// so testing for the total number is too fragile.\n\n\t\t\t\t\t// Step into pkg.AnotherMethod()\n\t\t\t\t\tclient.StepInRequest(1)\n\t\t\t\t\tclient.ExpectStepInResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack = client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"\", 13, 1000, 4, 4)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes = client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Registers\", registersScope)\n\n\t\t\t\t\t// Check that rip points to the InstructionPointerReference.\n\t\t\t\t\tpc, err = getPC(t, client, 1)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Error(pc)\n\t\t\t\t\t}\n\t\t\t\t\tclient.VariablesRequest(registersScope)\n\t\t\t\t\tvr = client.ExpectVariablesResponse(t)\n\t\t\t\t\tif len(vr.Body.Variables) == 0 {\n\t\t\t\t\t\tt.Fatal(\"no registers returned\")\n\t\t\t\t\t}\n\n\t\t\t\t\tidx = findPcReg(vr.Body.Variables)\n\t\t\t\t\tif idx < 0 {\n\t\t\t\t\t\tt.Fatalf(\"got %#v, want a reg with instruction pointer\", vr.Body.Variables)\n\t\t\t\t\t}\n\t\t\t\t\tpcReg = vr.Body.Variables[idx]\n\t\t\t\t\tgotPc, err = strconv.ParseUint(pcReg.Value, 0, 64)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Error(err)\n\t\t\t\t\t}\n\n\t\t\t\t\tif gotPc != pc || pcReg.EvaluateName != fmt.Sprintf(\"_%s\", strings.ToUpper(name)) {\n\t\t\t\t\t\tt.Errorf(\"got %#v,\\nwant Name=%s Value=%#x EvaluateName=%q\", pcReg, name, pc, fmt.Sprintf(\"_%s\", strings.ToUpper(name)))\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\nfunc findPcReg(regs []dap.Variable) int {\n\tpcRegNames := []string{\"rip\", \"pc\", \"eip\", \"era\"}\n\tfor i, reg := range regs {\n\t\tif slices.Contains(pcRegNames, strings.TrimSpace(reg.Name)) {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// TestShadowedVariables executes to a breakpoint and checks the shadowed\n// variable is named correctly.\nfunc TestShadowedVariables(t *testing.T) {\n\trunTest(t, \"testshadow\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"showGlobalVariables\": true,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 13\n\t\t\t\texecute: func() {\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\tstack := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesExact(t, stack, \"main.main\", 13, 1000, 3, 3)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", localsScope)\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Globals (package main)\", globalsScope)\n\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"(a)\", \"a\", \"0\", \"int\", !hasChildren)\n\t\t\t\t\tcheckVarExact(t, locals, 1, \"a\", \"a\", \"1\", \"int\", !hasChildren)\n\n\t\t\t\t\t// Check that the non-shadowed of \"a\" is returned from evaluate request.\n\t\t\t\t\tvalidateEvaluateName(t, client, locals, 1)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\n// Tests that 'stackTraceDepth' from LaunchRequest is parsed and passed to\n// stacktrace requests handlers.\nfunc TestLaunchRequestWithStackTraceDepth(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tvar stResp *dap.StackTraceResponse\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"stackTraceDepth\": 1,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{8},\n\t\t\t[]onBreakpoint{{ // Stop at line 8\n\t\t\t\texecute: func() {\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 0)\n\t\t\t\t\tstResp = client.ExpectStackTraceResponse(t)\n\t\t\t\t\tcheckStackFramesHasMore(t, stResp, \"main.Increment\", 8, 1000, 1 /*returned*/, 2 /*available*/)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\ntype Breakpoint struct {\n\tline      int\n\tpath      string\n\tverified  bool\n\tmsgPrefix string\n}\n\nfunc expectSetBreakpointsResponse(t *testing.T, client *daptest.Client, bps []Breakpoint) {\n\tt.Helper()\n\tcheckSetBreakpointsResponse(t, bps, client.ExpectSetBreakpointsResponse(t))\n}\n\nfunc checkSetBreakpointsResponse(t *testing.T, bps []Breakpoint, got *dap.SetBreakpointsResponse) {\n\tt.Helper()\n\tcheckBreakpoints(t, bps, got.Body.Breakpoints)\n}\n\nfunc checkBreakpoints(t *testing.T, bps []Breakpoint, breakpoints []dap.Breakpoint) {\n\tt.Helper()\n\tif len(breakpoints) != len(bps) {\n\t\tt.Errorf(\"got %#v,\\nwant len(Breakpoints)=%d\", breakpoints, len(bps))\n\t\treturn\n\t}\n\tfor i, bp := range breakpoints {\n\t\tif bps[i].line < 0 && !bps[i].verified {\n\t\t\tif bp.Verified != bps[i].verified || !stringContainsCaseInsensitive(bp.Message, bps[i].msgPrefix) {\n\t\t\t\tt.Errorf(\"got breakpoints[%d] = %#v, \\nwant %#v\", i, bp, bps[i])\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif bp.Line != bps[i].line || bp.Verified != bps[i].verified || bp.Source.Path != bps[i].path ||\n\t\t\t!strings.HasPrefix(bp.Message, bps[i].msgPrefix) {\n\t\t\tt.Errorf(\"got breakpoints[%d] = %#v, \\nwant %#v\", i, bp, bps[i])\n\t\t}\n\t}\n}\n\n// TestSetBreakpoint executes to a breakpoint and tests different\n// configurations of setBreakpoint requests.\nfunc TestSetBreakpoint(t *testing.T) {\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{16}, // b main.main\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16)\n\n\t\t\t\t\t// Set two breakpoints at the next two lines in main\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{17, 18})\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{17, fixture.Source, true, \"\"}, {18, fixture.Source, true, \"\"}})\n\n\t\t\t\t\t// Clear 17, reset 18\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{18})\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{18, fixture.Source, true, \"\"}})\n\n\t\t\t\t\t// Skip 17, continue to 18\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 18)\n\n\t\t\t\t\t// Set another breakpoint inside the loop in loop(), twice to trigger error\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{8, 8})\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{8, fixture.Source, true, \"\"}, {-1, \"\", false, \"breakpoint already exists\"}})\n\n\t\t\t\t\t// Continue into the loop\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"i\", \"i\", \"0\", \"int\", noChildren) // i == 0\n\n\t\t\t\t\t// Edit the breakpoint to add a condition\n\t\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, []int{8}, map[int]string{8: \"i == 3\"}, nil, nil)\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{8, fixture.Source, true, \"\"}})\n\n\t\t\t\t\t// Continue until condition is hit\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals = client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"i\", \"i\", \"3\", \"int\", noChildren) // i == 3\n\n\t\t\t\t\t// Edit the breakpoint to remove a condition\n\t\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, []int{8}, map[int]string{8: \"\"}, nil, nil)\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{8, fixture.Source, true, \"\"}})\n\n\t\t\t\t\t// Continue for one more loop iteration\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals = client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"i\", \"i\", \"4\", \"int\", noChildren) // i == 4\n\n\t\t\t\t\t// Set at a line without a statement\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{1000})\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{-1, \"\", false, \"could not find statement\"}}) // all cleared, none set\n\t\t\t\t},\n\t\t\t\t// The program has an infinite loop, so we must kill it by disconnecting.\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestSetInstructionBreakpoint executes to a breakpoint and tests different\n// configurations of setInstructionBreakpoint requests.\nfunc TestSetInstructionBreakpoint(t *testing.T) {\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{16}, // b main.main\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16)\n\n\t\t\t\t\t// Set two breakpoints in the loop\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{8, 9})\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{8, fixture.Source, true, \"\"}, {9, fixture.Source, true, \"\"}})\n\n\t\t\t\t\t// Continue to the two breakpoints and get the instructionPointerReference.\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 1)\n\t\t\t\t\tst := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tif len(st.Body.StackFrames) < 1 {\n\t\t\t\t\t\tt.Fatalf(\"\\ngot  %#v\\nwant len(stackframes) => 1\", st)\n\t\t\t\t\t}\n\t\t\t\t\tpc8 := st.Body.StackFrames[0].InstructionPointerReference\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 9)\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 1)\n\t\t\t\t\tst = client.ExpectStackTraceResponse(t)\n\t\t\t\t\tif len(st.Body.StackFrames) < 1 {\n\t\t\t\t\t\tt.Fatalf(\"\\ngot  %#v\\nwant len(stackframes) => 1\", st)\n\t\t\t\t\t}\n\t\t\t\t\tpc9 := st.Body.StackFrames[0].InstructionPointerReference\n\n\t\t\t\t\t// Clear the source breakpoints.\n\t\t\t\t\t// TODO(suzmue): there is an existing issue that breakpoints with identical locations\n\t\t\t\t\t// from different setBreakpoints, setFunctionBreakpoints, setInstructionBreakpoints\n\t\t\t\t\t// requests will prevent subsequent ones from being set.\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{})\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{})\n\n\t\t\t\t\t// Set the breakpoints using the instruction pointer references.\n\t\t\t\t\tclient.SetInstructionBreakpointsRequest([]dap.InstructionBreakpoint{{InstructionReference: pc8}, {InstructionReference: pc9}})\n\t\t\t\t\tbps := client.ExpectSetInstructionBreakpointsResponse(t).Body.Breakpoints\n\t\t\t\t\tcheckBreakpoints(t, []Breakpoint{{line: 8, path: fixture.Source, verified: true}, {line: 9, path: fixture.Source, verified: true}}, bps)\n\n\t\t\t\t\t// Continue to the two breakpoints and get the instructionPointerReference.\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 9)\n\n\t\t\t\t\t// Remove the breakpoint on line 8 and continue.\n\t\t\t\t\tclient.SetInstructionBreakpointsRequest([]dap.InstructionBreakpoint{{InstructionReference: pc9}})\n\t\t\t\t\tbps = client.ExpectSetInstructionBreakpointsResponse(t).Body.Breakpoints\n\t\t\t\t\tcheckBreakpoints(t, []Breakpoint{{line: 9, path: fixture.Source, verified: true}}, bps)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 9)\n\n\t\t\t\t\t// Set two breakpoints and expect an error on the second one.\n\t\t\t\t\tclient.SetInstructionBreakpointsRequest([]dap.InstructionBreakpoint{{InstructionReference: pc8}, {InstructionReference: pc8}})\n\t\t\t\t\tbps = client.ExpectSetInstructionBreakpointsResponse(t).Body.Breakpoints\n\t\t\t\t\tcheckBreakpoints(t, []Breakpoint{{line: 8, path: fixture.Source, verified: true}, {line: -1, path: \"\", verified: false, msgPrefix: \"breakpoint already exists\"}}, bps)\n\n\t\t\t\t\t// Add a condition\n\t\t\t\t\tclient.SetInstructionBreakpointsRequest([]dap.InstructionBreakpoint{{InstructionReference: pc8, Condition: \"i == 100\"}})\n\t\t\t\t\tbps = client.ExpectSetInstructionBreakpointsResponse(t).Body.Breakpoints\n\t\t\t\t\tcheckBreakpoints(t, []Breakpoint{{line: 8, path: fixture.Source, verified: true}}, bps)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"i\", \"i\", \"100\", \"int\", noChildren) // i == 100\n\t\t\t\t},\n\t\t\t\t// The program has an infinite loop, so we must kill it by disconnecting.\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestPauseAtStop(t *testing.T) {\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{16},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16)\n\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{6, 8})\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{6, fixture.Source, true, \"\"}, {8, fixture.Source, true, \"\"}})\n\n\t\t\t\t\t// Send a pause request while stopped on a cleared breakpoint.\n\t\t\t\t\tclient.PauseRequest(1)\n\t\t\t\t\tclient.ExpectPauseResponse(t)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 6)\n\n\t\t\t\t\t// Send a pause request while stopped on a breakpoint.\n\t\t\t\t\tclient.PauseRequest(1)\n\t\t\t\t\tclient.ExpectPauseResponse(t)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"breakpoint\" {\n\t\t\t\t\t\tt.Errorf(\"got %#v, expected breakpoint\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\n\t\t\t\t\t// Send a pause request while stopped after stepping.\n\t\t\t\t\tclient.NextRequest(1)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 9)\n\n\t\t\t\t\tclient.PauseRequest(1)\n\t\t\t\t\tclient.ExpectPauseResponse(t)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\t\t\t\t},\n\t\t\t\t// The program has an infinite loop, so we must kill it by disconnecting.\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc checkHitBreakpointIds(t *testing.T, se *dap.StoppedEvent, reason string, id int) {\n\tif se.Body.ThreadId != 1 || se.Body.Reason != reason || len(se.Body.HitBreakpointIds) != 1 || se.Body.HitBreakpointIds[0] != id {\n\t\tt.Errorf(\"got %#v, want Reason=%q, ThreadId=1, HitBreakpointIds=[]int{%d}\", se, reason, id)\n\t}\n}\n\n// TestHitBreakpointIds executes to a breakpoint and tests that\n// the breakpoint ids in the stopped event are correct.\nfunc TestHitBreakpointIds(t *testing.T) {\n\trunTest(t, \"locationsprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{30}, // b main.main\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 30)\n\n\t\t\t\t\t// Set two source breakpoints and two function breakpoints.\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{23, 33})\n\t\t\t\t\tsourceBps := client.ExpectSetBreakpointsResponse(t).Body.Breakpoints\n\t\t\t\t\tcheckBreakpoints(t, []Breakpoint{{line: 23, path: fixture.Source, verified: true}, {line: 33, path: fixture.Source, verified: true}}, sourceBps)\n\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"anotherFunction\"},\n\t\t\t\t\t\t{Name: \"anotherFunction:1\"},\n\t\t\t\t\t})\n\t\t\t\t\tfunctionBps := client.ExpectSetFunctionBreakpointsResponse(t).Body.Breakpoints\n\t\t\t\t\tcheckBreakpoints(t, []Breakpoint{{line: 26, path: fixture.Source, verified: true}, {line: 27, path: fixture.Source, verified: true}}, functionBps)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckHitBreakpointIds(t, se, \"breakpoint\", sourceBps[1].Id)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 33)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckHitBreakpointIds(t, se, \"breakpoint\", sourceBps[0].Id)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.(*SomeType).SomeFunction\", 23)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckHitBreakpointIds(t, se, \"function breakpoint\", functionBps[0].Id)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.anotherFunction\", 26)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\n\t\t\t\t\tcheckHitBreakpointIds(t, se, \"function breakpoint\", functionBps[1].Id)\n\n\t\t\t\t\tcheckStop(t, client, 1, \"main.anotherFunction\", 27)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc stringContainsCaseInsensitive(got, want string) bool {\n\treturn strings.Contains(strings.ToLower(got), strings.ToLower(want))\n}\n\n// TestSetFunctionBreakpoints is inspired by service/test.TestClientServer_FindLocations.\nfunc TestSetFunctionBreakpoints(t *testing.T) {\n\trunTest(t, \"locationsprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{30}, // b main.main\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 30)\n\n\t\t\t\t\ttype Breakpoint struct {\n\t\t\t\t\t\tline       int\n\t\t\t\t\t\tsourceName string\n\t\t\t\t\t\tverified   bool\n\t\t\t\t\t\terrMsg     string\n\t\t\t\t\t}\n\t\t\t\t\texpectSetFunctionBreakpointsResponse := func(bps []Breakpoint) {\n\t\t\t\t\t\tt.Helper()\n\t\t\t\t\t\tgot := client.ExpectSetFunctionBreakpointsResponse(t)\n\t\t\t\t\t\tif len(got.Body.Breakpoints) != len(bps) {\n\t\t\t\t\t\t\tt.Errorf(\"got %#v,\\nwant len(Breakpoints)=%d\", got, len(bps))\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor i, bp := range got.Body.Breakpoints {\n\t\t\t\t\t\t\tif bps[i].line < 0 && !bps[i].verified {\n\t\t\t\t\t\t\t\tif bp.Verified != bps[i].verified || !stringContainsCaseInsensitive(bp.Message, bps[i].errMsg) {\n\t\t\t\t\t\t\t\t\tt.Errorf(\"got breakpoints[%d] = %#v, \\nwant %#v\", i, bp, bps[i])\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Some function breakpoints may be in packages that have been imported and we do not control, so\n\t\t\t\t\t\t\t// we do not always want to check breakpoint lines.\n\t\t\t\t\t\t\tif (bps[i].line >= 0 && bp.Line != bps[i].line) || bp.Verified != bps[i].verified || bp.Source.Name != bps[i].sourceName {\n\t\t\t\t\t\t\t\tt.Errorf(\"got breakpoints[%d] = %#v, \\nwant %#v\", i, bp, bps[i])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"anotherFunction\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{26, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"main.anotherFunction\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{26, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"SomeType.String\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{14, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"(*SomeType).String\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{14, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"main.SomeType.String\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{14, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"main.(*SomeType).String\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{14, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\t// Test line offsets\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"main.anotherFunction:1\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{27, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\t// Test function names in imported package.\n\t\t\t\t\t// Issue #275\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"io/ioutil.ReadFile\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, \"ioutil.go\", true, \"\"}})\n\n\t\t\t\t\t// Issue #296\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"/io/ioutil.ReadFile\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, \"ioutil.go\", true, \"\"}})\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"ioutil.ReadFile\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, \"ioutil.go\", true, \"\"}})\n\n\t\t\t\t\t// Function Breakpoint name also accepts breakpoints that are specified as file:line.\n\t\t\t\t\t// TODO(suzmue): We could return an error, but it probably is not necessary since breakpoints,\n\t\t\t\t\t// and function breakpoints come in with different requests.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: fmt.Sprintf(\"%s:14\", fixture.Source)},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{14, filepath.Base(fixture.Source), true, \"\"}})\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: fmt.Sprintf(\"%s:14\", filepath.Base(fixture.Source))},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{14, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\t// Expect error for ambiguous function name.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"String\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, \"\", false, \"Location \\\"String\\\" ambiguous\"}})\n\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"main.String\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, \"\", false, \"Location \\\"main.String\\\" ambiguous\"}})\n\n\t\t\t\t\t// Expect error for function that does not exist.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"fakeFunction\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, \"\", false, \"location \\\"fakeFunction\\\" not found\"}})\n\n\t\t\t\t\t// Expect error for negative line number.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"main.anotherFunction:-1\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, \"\", false, \"line offset negative or not a number\"}})\n\n\t\t\t\t\t// Expect error when function name is regex.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: `/^.*String.*$/`},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, \"\", false, \"breakpoint name \\\"/^.*String.*$/\\\" could not be parsed as a function\"}})\n\n\t\t\t\t\t// Expect error when function name is an offset.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"+1\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, filepath.Base(fixture.Source), false, \"breakpoint name \\\"+1\\\" could not be parsed as a function\"}})\n\n\t\t\t\t\t// Expect error when function name is a line number.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"14\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, filepath.Base(fixture.Source), false, \"breakpoint name \\\"14\\\" could not be parsed as a function\"}})\n\n\t\t\t\t\t// Expect error when function name is an address.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"*b\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, filepath.Base(fixture.Source), false, \"breakpoint name \\\"*b\\\" could not be parsed as a function\"}})\n\n\t\t\t\t\t// Expect error when function name is a relative path.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: fmt.Sprintf(\".%s%s:14\", string(filepath.Separator), filepath.Base(fixture.Source))},\n\t\t\t\t\t})\n\t\t\t\t\t// This relative path could also be caught by the parser, so we should not match the error message.\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, filepath.Base(fixture.Source), false, \"\"}})\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: fmt.Sprintf(\"..%s%s:14\", string(filepath.Separator), filepath.Base(fixture.Source))},\n\t\t\t\t\t})\n\t\t\t\t\t// This relative path could also be caught by the parser, so we should not match the error message.\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{-1, filepath.Base(fixture.Source), false, \"\"}})\n\n\t\t\t\t\t// Test multiple function breakpoints.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"SomeType.String\"}, {Name: \"anotherFunction\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{14, filepath.Base(fixture.Source), true, \"\"}, {26, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\t// Test multiple breakpoints to the same location.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"SomeType.String\"}, {Name: \"(*SomeType).String\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{14, filepath.Base(fixture.Source), true, \"\"}, {-1, \"\", false, \"breakpoint exists\"}})\n\n\t\t\t\t\t// Set two breakpoints at SomeType.String and SomeType.SomeFunction.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"SomeType.String\"}, {Name: \"SomeType.SomeFunction\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{14, filepath.Base(fixture.Source), true, \"\"}, {22, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\t// Clear SomeType.String, reset SomeType.SomeFunction (SomeType.String is called before SomeType.SomeFunction).\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"SomeType.SomeFunction\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{22, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\t// Expect the next breakpoint to be at SomeType.SomeFunction.\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\tif se := client.ExpectStoppedEvent(t); se.Body.Reason != \"function breakpoint\" || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"got %#v, want Reason=\\\"function breakpoint\\\", ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.(*SomeType).SomeFunction\", 22)\n\n\t\t\t\t\t// Set a breakpoint at the next line in the program.\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{23})\n\t\t\t\t\tgot := client.ExpectSetBreakpointsResponse(t)\n\t\t\t\t\tif len(got.Body.Breakpoints) != 1 {\n\t\t\t\t\t\tt.Errorf(\"got %#v,\\nwant len(Breakpoints)=%d\", got, 1)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tbp := got.Body.Breakpoints[0]\n\t\t\t\t\tif bp.Line != 23 || bp.Verified != true || bp.Source.Path != fixture.Source {\n\t\t\t\t\t\tt.Errorf(\"got breakpoints[0] = %#v, \\nwant Line=23 Verified=true Source.Path=%q\", bp, fixture.Source)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set a function breakpoint, this should not clear the breakpoint that was set in the previous setBreakpoints request.\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{\n\t\t\t\t\t\t{Name: \"anotherFunction\"},\n\t\t\t\t\t})\n\t\t\t\t\texpectSetFunctionBreakpointsResponse([]Breakpoint{{26, filepath.Base(fixture.Source), true, \"\"}})\n\n\t\t\t\t\t// Expect the next breakpoint to be at line 23.\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\tif se := client.ExpectStoppedEvent(t); se.Body.Reason != \"breakpoint\" || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"got %#v, want Reason=\\\"breakpoint\\\", ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.(*SomeType).SomeFunction\", 23)\n\n\t\t\t\t\t// Set a breakpoint, this should not clear the breakpoint that was set in the previous setFunctionBreakpoints request.\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{37})\n\t\t\t\t\tgot = client.ExpectSetBreakpointsResponse(t)\n\t\t\t\t\tif len(got.Body.Breakpoints) != 1 {\n\t\t\t\t\t\tt.Errorf(\"got %#v,\\nwant len(Breakpoints)=%d\", got, 1)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tbp = got.Body.Breakpoints[0]\n\t\t\t\t\tif bp.Line != 37 || bp.Verified != true || bp.Source.Path != fixture.Source {\n\t\t\t\t\t\tt.Errorf(\"got breakpoints[0] = %#v, \\nwant Line=23 Verified=true Source.Path=%q\", bp, fixture.Source)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Expect the next breakpoint to be at line anotherFunction.\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\tif se := client.ExpectStoppedEvent(t); se.Body.Reason != \"function breakpoint\" || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"got %#v, want Reason=\\\"function breakpoint\\\", ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.anotherFunction\", 26)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestLogPoints executes to a breakpoint and tests that log points\n// send OutputEvents and do not halt program execution.\nfunc TestLogPoints(t *testing.T) {\n\trunTest(t, \"callme\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{23},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 23\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 23)\n\t\t\t\t\tbps := []int{6, 25, 27, 16}\n\t\t\t\t\tlogMessages := map[int]string{6: \"{i*2}: in callme!\", 16: \"in callme2!\"}\n\t\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, bps, nil, nil, logMessages)\n\t\t\t\t\tclient.ExpectSetBreakpointsResponse(t)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\tfor i := range 5 {\n\t\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\t\tif se.Body.Reason != \"breakpoint\" || se.Body.ThreadId != 1 {\n\t\t\t\t\t\t\tt.Errorf(\"got stopped event = %#v, \\nwant Reason=\\\"breakpoint\\\" ThreadId=1\", se)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 25)\n\n\t\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\t\tcheckLogMessage(t, client.ExpectOutputEvent(t), 1, fmt.Sprintf(\"%d: in callme!\", i*2), fixture.Source, 6)\n\t\t\t\t\t}\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"breakpoint\" || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"got stopped event = %#v, \\nwant Reason=\\\"breakpoint\\\" ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 27)\n\n\t\t\t\t\tclient.NextRequest(1)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\n\t\t\t\t\tcheckLogMessage(t, client.ExpectOutputEvent(t), 1, \"in callme2!\", fixture.Source, 16)\n\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"step\" || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"got stopped event = %#v, \\nwant Reason=\\\"step\\\" ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 28)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestLogPointsShowFullValue tests that log points will not truncate the string value.\nfunc TestLogPointsShowFullValue(t *testing.T) {\n\trunTest(t, \"longstrings\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{16},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16)\n\t\t\t\t\tbps := []int{19}\n\t\t\t\t\tlogMessages := map[int]string{19: \"{&s4097}\"}\n\t\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, bps, nil, nil, logMessages)\n\t\t\t\t\tclient.ExpectSetBreakpointsResponse(t)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tcheckLogMessage(t, client.ExpectOutputEvent(t), 1, \"*\\\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...+3585 more\\\"\", fixture.Source, 19)\n\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"breakpoint\" || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"got stopped event = %#v, \\nwant Reason=\\\"breakpoint\\\" ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 22)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc checkLogMessage(t *testing.T, oe *dap.OutputEvent, goid int, text, path string, line int) {\n\tt.Helper()\n\tprefix := \"> [Go \"\n\tif goid >= 0 {\n\t\tprefix += strconv.Itoa(goid) + \"]\"\n\t}\n\tif oe.Body.Category != \"stdout\" || !strings.HasPrefix(oe.Body.Output, prefix) || !strings.HasSuffix(oe.Body.Output, text+\"\\n\") {\n\t\tt.Errorf(\"got output event = %#v, \\nwant Category=\\\"stdout\\\" Output=\\\"%s: %s\\\\n\\\"\", oe, prefix, text)\n\t}\n\tif oe.Body.Line != line || oe.Body.Source == nil || oe.Body.Source.Path != path {\n\t\tt.Errorf(\"got output event = %#v, \\nwant Line=%d Source.Path=%s\", oe, line, path)\n\t}\n}\n\n// TestHaltPreventsAutoResume tests that a pause request issued while processing\n// log messages will result in a real stop.\nfunc TestHaltPreventsAutoResume(t *testing.T) {\n\trunTest(t, \"callme\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\", // Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{23},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tsavedResumeOnce := resumeOnceAndCheckStop\n\t\t\t\t\tdefer func() {\n\t\t\t\t\t\tresumeOnceAndCheckStop = savedResumeOnce\n\t\t\t\t\t}()\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 23)\n\t\t\t\t\tbps := []int{6, 25}\n\t\t\t\t\tlogMessages := map[int]string{6: \"in callme!\"}\n\t\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, bps, nil, nil, logMessages)\n\t\t\t\t\tclient.ExpectSetBreakpointsResponse(t)\n\n\t\t\t\t\tfor range 5 {\n\t\t\t\t\t\t// Reset the handler to the default behavior.\n\t\t\t\t\t\tresumeOnceAndCheckStop = savedResumeOnce\n\n\t\t\t\t\t\t// Expect a pause request while stopped not to interrupt continue.\n\t\t\t\t\t\tclient.PauseRequest(1)\n\t\t\t\t\t\tclient.ExpectPauseResponse(t)\n\n\t\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\t\tif se.Body.Reason != \"breakpoint\" || se.Body.ThreadId != 1 {\n\t\t\t\t\t\t\tt.Errorf(\"got stopped event = %#v, \\nwant Reason=\\\"breakpoint\\\" ThreadId=1\", se)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 25)\n\n\t\t\t\t\t\tpauseDoneChan := make(chan struct{}, 1)\n\t\t\t\t\t\toutputDoneChan := make(chan struct{}, 1)\n\t\t\t\t\t\t// Send a halt request when trying to resume the program after being\n\t\t\t\t\t\t// interrupted. This should allow the log message to be processed,\n\t\t\t\t\t\t// but keep the process from continuing beyond the line.\n\t\t\t\t\t\tresumeOnceAndCheckStop = func(s *Session, command string, allowNextStateChange *syncflag) (*api.DebuggerState, error) {\n\t\t\t\t\t\t\t// This should trigger after the log message is sent, but before\n\t\t\t\t\t\t\t// execution is resumed.\n\t\t\t\t\t\t\tif command == api.DirectionCongruentContinue {\n\t\t\t\t\t\t\t\tgo func() {\n\t\t\t\t\t\t\t\t\t<-outputDoneChan\n\t\t\t\t\t\t\t\t\tdefer close(pauseDoneChan)\n\t\t\t\t\t\t\t\t\tclient.PauseRequest(1)\n\t\t\t\t\t\t\t\t\tclient.ExpectPauseResponse(t)\n\t\t\t\t\t\t\t\t}()\n\t\t\t\t\t\t\t\t// Wait for the pause to be complete.\n\t\t\t\t\t\t\t\t<-pauseDoneChan\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn s.resumeOnceAndCheckStop(command, allowNextStateChange)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\t\tcheckLogMessage(t, client.ExpectOutputEvent(t), 1, \"in callme!\", fixture.Source, 6)\n\t\t\t\t\t\t// Signal that the output event has been received.\n\t\t\t\t\t\tclose(outputDoneChan)\n\t\t\t\t\t\t// Wait for the pause to be complete.\n\t\t\t\t\t\t<-pauseDoneChan\n\t\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\t\tif se.Body.Reason != \"pause\" {\n\t\t\t\t\t\t\tt.Errorf(\"got stopped event = %#v, \\nwant Reason=\\\"pause\\\"\", se)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcheckStop(t, client, 1, \"main.callme\", 6)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestConcurrentBreakpointsLogPoints tests that a breakpoint set in the main\n// goroutine is hit the correct number of times and log points set in the\n// children goroutines produce the correct number of output events.\nfunc TestConcurrentBreakpointsLogPoints(t *testing.T) {\n\tif runtime.GOOS == \"windows\" && runtime.GOARCH == \"arm64\" {\n\t\tt.Skip(\"broken\")\n\t}\n\ttests := []struct {\n\t\tname        string\n\t\tfixture     string\n\t\tstart       int\n\t\tbreakpoints []int\n\t}{\n\t\t{\n\t\t\tname:        \"source breakpoints\",\n\t\t\tfixture:     \"goroutinestackprog\",\n\t\t\tbreakpoints: []int{23},\n\t\t},\n\t\t{\n\t\t\tname:    \"hardcoded breakpoint\",\n\t\t\tfixture: \"goroutinebreak\",\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\trunTest(t, tt.fixture, func(client *daptest.Client, fixture protest.Fixture) {\n\t\t\t\tclient.InitializeRequest()\n\t\t\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t\tclient.ExpectProcessEvent(t)\n\t\t\t\tclient.ExpectInitializedEvent(t)\n\t\t\t\tclient.ExpectLaunchResponse(t)\n\n\t\t\t\tbps := append([]int{8}, tt.breakpoints...)\n\t\t\t\tlogMessages := map[int]string{8: \"hello\"}\n\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, bps, nil, nil, logMessages)\n\t\t\t\tclient.ExpectSetBreakpointsResponse(t)\n\n\t\t\t\tclient.ConfigurationDoneRequest()\n\t\t\t\tclient.ExpectConfigurationDoneResponse(t)\n\n\t\t\t\t// There may be up to 1 breakpoint and any number of log points that are\n\t\t\t\t// hit concurrently. We should get a stopped event every time the breakpoint\n\t\t\t\t// is hit and an output event for each log point hit.\n\t\t\t\tvar oeCount, seCount int\n\t\t\t\tfor oeCount < 10 || seCount < 10 {\n\t\t\t\t\tswitch m := client.ExpectMessage(t).(type) {\n\t\t\t\t\tcase *dap.StoppedEvent:\n\t\t\t\t\t\tif m.Body.Reason != \"breakpoint\" || !m.Body.AllThreadsStopped || m.Body.ThreadId != 1 {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Reason='breakpoint' AllThreadsStopped=true ThreadId=1\", m)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tseCount++\n\t\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tcase *dap.OutputEvent:\n\t\t\t\t\t\tcheckLogMessage(t, m, -1, \"hello\", fixture.Source, 8)\n\t\t\t\t\t\toeCount++\n\t\t\t\t\tcase *dap.ContinueResponse:\n\t\t\t\t\tcase *dap.TerminatedEvent:\n\t\t\t\t\t\tt.Fatalf(\"\\nexpected 10 output events and 10 stopped events, got %d output events and %d stopped events\", oeCount, seCount)\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tt.Fatalf(\"Unexpected message type: expect StoppedEvent, OutputEvent, or ContinueResponse, got %#v\", m)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// TODO(suzmue): The dap server may identify some false\n\t\t\t\t// positives for hard coded breakpoints, so there may still\n\t\t\t\t// be more stopped events.\n\t\t\t\tclient.DisconnectRequestWithKillOption(true)\n\t\t\t})\n\t\t})\n\t}\n}\n\nfunc TestSetBreakpointWhileRunning(t *testing.T) {\n\trunTest(t, \"integrationprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{16},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\t// The program loops 3 times over lines 14-15-8-9-10-16\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16) // Line that sleeps for 1 second\n\n\t\t\t\t\t// We can set breakpoints while nexting\n\t\t\t\t\tclient.NextRequest(1)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{15}) // [16,] => [15,]\n\t\t\t\t\tcheckSetBreakpointsResponse(t, []Breakpoint{{15, fixture.Source, true, \"\"}}, client.ExpectSetBreakpointsResponse(t))\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"step\" || !se.Body.AllThreadsStopped || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Reason='step' AllThreadsStopped=true ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 14)\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"breakpoint\" || !se.Body.AllThreadsStopped || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Reason='breakpoint' AllThreadsStopped=true ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 15)\n\n\t\t\t\t\t// We can set breakpoints while continuing\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{9}) // [15,] => [9,]\n\t\t\t\t\tcheckSetBreakpointsResponse(t, []Breakpoint{{9, fixture.Source, true, \"\"}}, client.ExpectSetBreakpointsResponse(t))\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"breakpoint\" || !se.Body.AllThreadsStopped || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Reason='breakpoint' AllThreadsStopped=true ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.sayhi\", 9)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestSetFunctionBreakpointWhileRunning(t *testing.T) {\n\trunTest(t, \"integrationprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{16},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\t// The program loops 3 times over lines 14-15-8-9-10-16\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16) // Line that sleeps for 1 second\n\n\t\t\t\t\t// We can set breakpoints while nexting\n\t\t\t\t\tclient.NextRequest(1)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{{Name: \"main.sayhi\"}}) // [16,] => [16, 8]\n\t\t\t\t\tcheckBreakpoints(t, []Breakpoint{{8, fixture.Source, true, \"\"}}, client.ExpectSetFunctionBreakpointsResponse(t).Body.Breakpoints)\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{}) // [16,8] => [8]\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{})\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"step\" || !se.Body.AllThreadsStopped || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Reason='step' AllThreadsStopped=true ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 14)\n\n\t\t\t\t\t// Make sure we can hit the breakpoints.\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"function breakpoint\" || !se.Body.AllThreadsStopped || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Reason='function breakpoint' AllThreadsStopped=true ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.sayhi\", 8)\n\n\t\t\t\t\t// We can set breakpoints while continuing\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.SetFunctionBreakpointsRequest([]dap.FunctionBreakpoint{}) // [8,] => []\n\t\t\t\t\tcheckBreakpoints(t, []Breakpoint{}, client.ExpectSetFunctionBreakpointsResponse(t).Body.Breakpoints)\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{16}) // [] => [16]\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{16, fixture.Source, true, \"\"}})\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"breakpoint\" || !se.Body.AllThreadsStopped || se.Body.ThreadId != 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Reason='breakpoint' AllThreadsStopped=true ThreadId=1\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestHitConditionBreakpoints(t *testing.T) {\n\trunTest(t, \"break\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{4},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, []int{7}, nil, map[int]string{7: \"4\"}, nil)\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{7, fixture.Source, true, \"\"}})\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 7)\n\n\t\t\t\t\t// Check that we are stopped at the correct value of i.\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"i\", \"i\", \"4\", \"int\", noChildren)\n\n\t\t\t\t\t// Change the hit condition.\n\t\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, []int{7}, nil, map[int]string{7: \"% 2\"}, nil)\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{7, fixture.Source, true, \"\"}})\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 7)\n\n\t\t\t\t\t// Check that we are stopped at the correct value of i.\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals = client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"i\", \"i\", \"6\", \"int\", noChildren)\n\n\t\t\t\t\t// Expect an error if an assignment is passed.\n\t\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, []int{7}, nil, map[int]string{7: \"= 2\"}, nil)\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{-1, \"\", false, \"\"}})\n\n\t\t\t\t\t// Change the hit condition.\n\t\t\t\t\tclient.SetBreakpointsRequestWithArgs(fixture.Source, []int{7}, nil, map[int]string{7: \"< 8\"}, nil)\n\t\t\t\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{7, fixture.Source, true, \"\"}})\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 7)\n\n\t\t\t\t\t// Check that we are stopped at the correct value of i.\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals = client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"i\", \"i\", \"7\", \"int\", noChildren)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\tclient.ExpectTerminatedEvent(t)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\n// TestLaunchSubstitutePath sets a breakpoint using a path\n// that does not exist and expects the substitutePath attribute\n// in the launch configuration to take care of the mapping.\nfunc TestLaunchSubstitutePath(t *testing.T) {\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tsubstitutePathTestHelper(t, fixture, client, \"launch\", map[string]any{\"mode\": \"exec\", \"program\": fixture.Path})\n\t})\n}\n\n// TestAttachSubstitutePath sets a breakpoint using a path\n// that does not exist and expects the substitutePath attribute\n// in the launch configuration to take care of the mapping.\nfunc TestAttachSubstitutePath(t *testing.T) {\n\tif runtime.GOOS == \"windows\" {\n\t\tt.Skip(\"test skipped on Windows, see https://delve.teamcity.com/project/Delve_windows for details\")\n\t}\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tcmd := execFixture(t, fixture)\n\n\t\tsubstitutePathTestHelper(t, fixture, client, \"attach\", map[string]any{\"mode\": \"local\", \"processId\": cmd.Process.Pid})\n\t})\n}\n\nfunc substitutePathTestHelper(t *testing.T, fixture protest.Fixture, client *daptest.Client, request string, launchAttachConfig map[string]any) {\n\tt.Helper()\n\tnonexistentDir := filepath.Join(string(filepath.Separator), \"path\", \"that\", \"does\", \"not\", \"exist\")\n\tif runtime.GOOS == \"windows\" {\n\t\tnonexistentDir = \"C:\" + nonexistentDir\n\t}\n\n\tlaunchAttachConfig[\"stopOnEntry\"] = false\n\t// The rules in 'substitutePath' will be applied as follows:\n\t// - mapping paths from client to server:\n\t//\t\tThe first rule[\"from\"] to match a prefix of 'path' will be applied:\n\t//\t\t\tstrings.Replace(path, rule[\"from\"], rule[\"to\"], 1)\n\t// - mapping paths from server to client:\n\t//\t\tThe first rule[\"to\"] to match a prefix of 'path' will be applied:\n\t//\t\t\tstrings.Replace(path, rule[\"to\"], rule[\"from\"], 1)\n\tlaunchAttachConfig[\"substitutePath\"] = []map[string]string{\n\t\t{\"from\": nonexistentDir, \"to\": filepath.Dir(fixture.Source)},\n\t\t// Since the path mappings are ordered, when converting from client path to\n\t\t// server path, this mapping will not apply, because nonexistentDir appears in\n\t\t// an earlier rule.\n\t\t{\"from\": nonexistentDir, \"to\": \"this_is_a_bad_path\"},\n\t\t// Since the path mappings are ordered, when converting from server path to\n\t\t// client path, this mapping will not apply, because filepath.Dir(fixture.Source)\n\t\t// appears in an earlier rule.\n\t\t{\"from\": \"this_is_a_bad_path\", \"to\": filepath.Dir(fixture.Source)},\n\t}\n\n\trunDebugSessionWithBPs(t, client, request,\n\t\tfunc() {\n\t\t\tswitch request {\n\t\t\tcase \"attach\":\n\t\t\t\tclient.AttachRequest(launchAttachConfig)\n\t\t\t\tclient.ExpectCapabilitiesEventSupportTerminateDebuggee(t)\n\t\t\tcase \"launch\":\n\t\t\t\tclient.LaunchRequestWithArgs(launchAttachConfig)\n\t\t\tdefault:\n\t\t\t\tt.Fatalf(\"invalid request: %s\", request)\n\t\t\t}\n\t\t},\n\t\t// Set breakpoints\n\t\tfilepath.Join(nonexistentDir, \"loopprog.go\"), []int{8},\n\t\t[]onBreakpoint{{\n\t\t\texecute: func() {\n\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\t\t\t},\n\t\t\tdisconnect: true,\n\t\t}})\n}\n\n// execFixture runs the binary fixture.Path and hooks up stdout and stderr\n// to os.Stdout and os.Stderr.\nfunc execFixture(t *testing.T, fixture protest.Fixture) *exec.Cmd {\n\tt.Helper()\n\t// TODO(polina): do I need to sanity check testBackend and runtime.GOOS?\n\tcmd := exec.Command(fixture.Path)\n\tcmd.Stdout = os.Stdout\n\tcmd.Stderr = os.Stderr\n\tif err := cmd.Start(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\treturn cmd\n}\n\n// TestWorkingDir executes to a breakpoint and tests that the specified\n// working directory is the one used to run the program.\nfunc TestWorkingDir(t *testing.T) {\n\trunTest(t, \"workdir\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\twd := os.TempDir()\n\t\t// For Darwin `os.TempDir()` returns `/tmp` which is symlink to `/private/tmp`.\n\t\tif runtime.GOOS == \"darwin\" {\n\t\t\twd = \"/private/tmp\"\n\t\t}\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\":        \"exec\",\n\t\t\t\t\t\"program\":     fixture.Path,\n\t\t\t\t\t\"stopOnEntry\": false,\n\t\t\t\t\t\"cwd\":         wd,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{10}, // b main.main\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 10)\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckChildren(t, locals, \"Locals\", 2)\n\t\t\t\t\tfor i := range locals.Body.Variables {\n\t\t\t\t\t\tswitch locals.Body.Variables[i].Name {\n\t\t\t\t\t\tcase \"pwd\":\n\t\t\t\t\t\t\tcheckVarExact(t, locals, i, \"pwd\", \"pwd\", fmt.Sprintf(\"%q\", wd), \"string\", noChildren)\n\t\t\t\t\t\tcase \"err\":\n\t\t\t\t\t\t\tcheckVarExact(t, locals, i, \"err\", \"err\", \"error nil\", \"error\", noChildren)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\n// checkEval is a helper for verifying the values within an EvaluateResponse.\n//\n//\tvalue - the value of the evaluated expression\n//\thasRef - true if the evaluated expression should have children and therefore a non-0 variable reference\n//\tref - reference to retrieve children of this evaluated expression (0 if none)\nfunc checkEval(t *testing.T, got *dap.EvaluateResponse, value string, hasRef bool) (ref int) {\n\tt.Helper()\n\tif got.Body.Result != value || (got.Body.VariablesReference > 0) != hasRef {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant Result=%q hasRef=%t\", got, value, hasRef)\n\t}\n\treturn got.Body.VariablesReference\n}\n\n// checkEvalIndexed is a helper for verifying the values within an EvaluateResponse.\n//\n//\tvalue - the value of the evaluated expression\n//\thasRef - true if the evaluated expression should have children and therefore a non-0 variable reference\n//\tref - reference to retrieve children of this evaluated expression (0 if none)\nfunc checkEvalIndexed(t *testing.T, got *dap.EvaluateResponse, value string, hasRef bool, indexed, named int) (ref int) {\n\tt.Helper()\n\tif got.Body.Result != value || (got.Body.VariablesReference > 0) != hasRef || got.Body.IndexedVariables != indexed || got.Body.NamedVariables != named {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant Result=%q hasRef=%t IndexedVariables=%d NamedVariables=%d\", got, value, hasRef, indexed, named)\n\t}\n\treturn got.Body.VariablesReference\n}\n\nfunc checkEvalRegex(t *testing.T, got *dap.EvaluateResponse, valueRegex string, hasRef bool) (ref int) {\n\tt.Helper()\n\tmatched, _ := regexp.MatchString(valueRegex, got.Body.Result)\n\tif !matched || (got.Body.VariablesReference > 0) != hasRef {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant Result=%q hasRef=%t\", got, valueRegex, hasRef)\n\t}\n\treturn got.Body.VariablesReference\n}\n\nfunc TestEvaluateRequest(t *testing.T) {\n\trunTest(t, \"testvariables\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\tfixture.Source, []int{}, // Breakpoint set in the program\n\t\t\t[]onBreakpoint{{ // Stop at first breakpoint\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.foobar\", []int{65, 66})\n\n\t\t\t\t\t// Variable lookup\n\t\t\t\t\tclient.EvaluateRequest(\"a2\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot := client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"6\", noChildren)\n\n\t\t\t\t\tclient.EvaluateRequest(\"a5\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref := checkEval(t, got, \"[]int len: 5, cap: 5, [1,2,3,4,5]\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\ta5 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, a5, \"a5\", 5)\n\t\t\t\t\t\tcheckVarExact(t, a5, 0, \"[0]\", \"(a5)[0]\", \"1\", \"int\", noChildren)\n\t\t\t\t\t\tcheckVarExact(t, a5, 4, \"[4]\", \"(a5)[4]\", \"5\", \"int\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, a5, 0)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, a5, 4)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Variable lookup that's not fully loaded\n\t\t\t\t\tclient.EvaluateRequest(\"ba\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEvalIndexed(t, got, \"[]int len: 200, cap: 200, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...+136 more]\", hasChildren, 200, 0)\n\n\t\t\t\t\t// All (binary and unary) on basic types except <-, ++ and --\n\t\t\t\t\tclient.EvaluateRequest(\"1+1\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"2\", noChildren)\n\n\t\t\t\t\t// Comparison operators on any type\n\t\t\t\t\tclient.EvaluateRequest(\"1<2\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"true\", noChildren)\n\n\t\t\t\t\t// Type casts between numeric types\n\t\t\t\t\tclient.EvaluateRequest(\"int(2.3)\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"2\", noChildren)\n\n\t\t\t\t\t// Type casts of integer constants into any pointer type and vice versa\n\t\t\t\t\tclient.EvaluateRequest(\"(*int)(2)\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEvalRegex(t, got, `\\*\\(unreadable .+\\)`, hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tval := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, val, \"*(*int)(2)\", 1)\n\t\t\t\t\t\tcheckVarRegex(t, val, 0, \"^$\", `\\(\\*\\(\\(\\*int\\)\\(2\\)\\)\\)`, `\\(unreadable .+\\)`, \"int\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, val, 0)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Type casts between string, []byte and []rune\n\t\t\t\t\tclient.EvaluateRequest(\"[]byte(\\\"ABC€\\\")\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEvalIndexed(t, got, \"[]uint8 len: 6, cap: 6, [65,66,67,226,130,172]\", noChildren, 6, 1)\n\n\t\t\t\t\t// Struct member access (i.e. somevar.memberfield)\n\t\t\t\t\tclient.EvaluateRequest(\"ms.Nest.Level\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"1\", noChildren)\n\n\t\t\t\t\t// Slicing and indexing operators on arrays, slices and strings\n\t\t\t\t\tclient.EvaluateRequest(\"a5[4]\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"5\", noChildren)\n\n\t\t\t\t\t// Map access\n\t\t\t\t\tclient.EvaluateRequest(\"mp[1]\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEval(t, got, \"interface {}(int) 42\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\texpr := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, expr, \"mp[1]\", 1)\n\t\t\t\t\t\tcheckVarExact(t, expr, 0, \"data\", \"(mp[1]).(data)\", \"42\", \"int\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, expr, 0)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Pointer dereference\n\t\t\t\t\tclient.EvaluateRequest(\"*ms.Nest\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEvalRegex(t, got, `main\\.Nest {Level: 1, Nest: \\*main.Nest {Level: 2, Nest: \\*\\(\\*main\\.Nest\\)\\(0x[0-9a-f]+\\)}}`, hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\texpr := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, expr, \"*ms.Nest\", 2)\n\t\t\t\t\t\tcheckVarExact(t, expr, 0, \"Level\", \"(*ms.Nest).Level\", \"1\", \"int\", noChildren)\n\t\t\t\t\t\tvalidateEvaluateName(t, client, expr, 0)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Calls to builtin functions: cap, len, complex, imag and real\n\t\t\t\t\tclient.EvaluateRequest(\"len(a5)\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"5\", noChildren)\n\n\t\t\t\t\t// Type assertion on interface variables (i.e. somevar.(concretetype))\n\t\t\t\t\tclient.EvaluateRequest(\"mp[1].(int)\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"42\", noChildren)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}, { // Stop at second breakpoint\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.barfoo\", 27)\n\n\t\t\t\t\t// Top-most frame\n\t\t\t\t\tclient.EvaluateRequest(\"a1\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot := client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"\\\"bur\\\"\", noChildren)\n\t\t\t\t\t// No frame defaults to top-most frame\n\t\t\t\t\tclient.EvaluateRequest(\"a1\", 0, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"\\\"bur\\\"\", noChildren)\n\t\t\t\t\t// Next frame\n\t\t\t\t\tclient.EvaluateRequest(\"a1\", 1001, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"\\\"foofoofoofoofoofoo\\\"\", noChildren)\n\t\t\t\t\t// Next frame\n\t\t\t\t\tclient.EvaluateRequest(\"a1\", 1002, \"any context but watch\")\n\t\t\t\t\terres := client.ExpectVisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: could not find symbol value for a1\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: could not find symbol value for a1\\\"\", erres)\n\t\t\t\t\t}\n\t\t\t\t\tclient.EvaluateRequest(\"a1\", 1002, \"watch\")\n\t\t\t\t\terres = client.ExpectInvisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: could not find symbol value for a1\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: could not find symbol value for a1\\\"\", erres)\n\t\t\t\t\t}\n\t\t\t\t\tclient.EvaluateRequest(\"a1\", 1002, \"repl\")\n\t\t\t\t\terres = client.ExpectInvisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: could not find symbol value for a1\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: could not find symbol value for a1\\\"\", erres)\n\t\t\t\t\t}\n\t\t\t\t\tclient.EvaluateRequest(\"a1\", 1002, \"hover\")\n\t\t\t\t\terres = client.ExpectInvisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: could not find symbol value for a1\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: could not find symbol value for a1\\\"\", erres)\n\t\t\t\t\t}\n\t\t\t\t\tclient.EvaluateRequest(\"a1\", 1002, \"clipboard\")\n\t\t\t\t\terres = client.ExpectVisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: could not find symbol value for a1\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: could not find symbol value for a1\\\"\", erres)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\nfunc formatConfig(depth int, showGlobals, showRegisters bool, goroutineFilters string, showPprofLabels []string, hideSystemGoroutines bool, substitutePath [][2]string, followExec bool, followExecRegex string) string {\n\tformatStr := `stackTraceDepth\t%d\nshowGlobalVariables\t%v\nshowRegisters\t%v\ngoroutineFilters\t%q\nshowPprofLabels\t%v\nhideSystemGoroutines\t%v\nsubstitutePath\t%v\nfollowExec\t%v\nfollowExecRegex\t%q\n`\n\treturn fmt.Sprintf(formatStr, depth, showGlobals, showRegisters, goroutineFilters, showPprofLabels, hideSystemGoroutines, substitutePath, followExec, followExecRegex)\n}\n\nfunc TestEvaluateCommandRequest(t *testing.T) {\n\trunTest(t, \"testvariables\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\tfixture.Source, []int{}, // Breakpoint set in the program\n\t\t\t[]onBreakpoint{{ // Stop at first breakpoint\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.foobar\", []int{65, 66})\n\n\t\t\t\t\tclient.EvaluateRequest(\"dlv help\", 1000, \"repl\")\n\t\t\t\t\tgot := client.ExpectEvaluateResponse(t)\n\t\t\t\t\tif got.Body.Result == \"\" {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwanted something in the body\", got)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.EvaluateRequest(\"dlv help config\", 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, msgConfig, noChildren)\n\n\t\t\t\t\t// Test config.\n\t\t\t\t\tclient.EvaluateRequest(\"dlv config\", 1000, \"repl\")\n\t\t\t\t\tclient.ExpectErrorResponse(t)\n\n\t\t\t\t\tclient.EvaluateRequest(\"dlv config -list\", 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, formatConfig(50, false, false, \"\", []string{}, false, [][2]string{}, false, \"\"), noChildren)\n\n\t\t\t\t\t// Read and modify showGlobalVariables.\n\t\t\t\t\tclient.EvaluateRequest(\"dlv config -list showGlobalVariables\", 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"showGlobalVariables\\tfalse\\n\", noChildren)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes := client.ExpectScopesResponse(t)\n\t\t\t\t\tif len(scopes.Body.Scopes) > 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant len(scopes)=1 (Locals)\", scopes)\n\t\t\t\t\t}\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", -1)\n\n\t\t\t\t\tclient.EvaluateRequest(\"dlv config showGlobalVariables true\", 1000, \"repl\")\n\t\t\t\t\tclient.ExpectInvalidatedEvent(t)\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"showGlobalVariables\\ttrue\\n\\nUpdated\", noChildren)\n\n\t\t\t\t\tclient.EvaluateRequest(\"dlv config -list\", 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, formatConfig(50, true, false, \"\", []string{}, false, [][2]string{}, false, \"\"), noChildren)\n\n\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\tscopes = client.ExpectScopesResponse(t)\n\t\t\t\t\tif len(scopes.Body.Scopes) < 2 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant len(scopes)=2 (Locals & Globals)\", scopes)\n\t\t\t\t\t}\n\t\t\t\t\tcheckScope(t, scopes, 0, \"Locals\", -1)\n\t\t\t\t\tcheckScope(t, scopes, 1, \"Globals (package main)\", -1)\n\n\t\t\t\t\t// Read and modify substitutePath.\n\t\t\t\t\tclient.EvaluateRequest(\"dlv config -list substitutePath\", 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"substitutePath\\t[]\\n\", noChildren)\n\n\t\t\t\t\tclient.EvaluateRequest(fmt.Sprintf(\"dlv config substitutePath %q %q\", \"my/client/path\", \"your/server/path\"), 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"substitutePath\\t[[my/client/path your/server/path]]\\n\\nUpdated\", noChildren)\n\n\t\t\t\t\tclient.EvaluateRequest(fmt.Sprintf(\"dlv config substitutePath %q %q\", \"my/client/path\", \"new/your/server/path\"), 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"substitutePath\\t[[my/client/path new/your/server/path]]\\n\\nUpdated\", noChildren)\n\n\t\t\t\t\tclient.EvaluateRequest(fmt.Sprintf(\"dlv config substitutePath %q\", \"my/client/path\"), 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"substitutePath\\t[]\\n\\nUpdated\", noChildren)\n\n\t\t\t\t\t// Test sources.\n\t\t\t\t\tclient.EvaluateRequest(\"dlv sources\", 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tif !strings.Contains(got.Body.Result, fixture.Source) {\n\t\t\t\t\t\tt.Errorf(\"\\ngot: %#v, want sources contains %s\", got, fixture.Source)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.EvaluateRequest(fmt.Sprintf(\"dlv sources .*%s\", strings.ReplaceAll(filepath.Base(fixture.Source), \".\", \"\\\\.\")), 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tif got.Body.Result != fixture.Source {\n\t\t\t\t\t\tt.Errorf(\"\\ngot: %#v, want sources=%q\", got, fixture.Source)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.EvaluateRequest(\"dlv sources nonexistentsource\", 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tif got.Body.Result != \"\" {\n\t\t\t\t\t\tt.Errorf(\"\\ngot: %#v, want sources=\\\"\\\"\", got)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Test target.\n\t\t\t\t\tclient.EvaluateRequest(\"dlv target list\", 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tif !strings.Contains(got.Body.Result, fixture.Path) {\n\t\t\t\t\t\tt.Errorf(\"\\ngot: %#v, want target list contains %s\", got, fixture.Path)\n\t\t\t\t\t}\n\t\t\t\t\t// single target\n\t\t\t\t\tif strings.Count(got.Body.Result, \"\\n\") != 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot: %#v, want target list has 1 line\", got)\n\t\t\t\t\t}\n\n\t\t\t\t\t// target follow-exec\n\t\t\t\t\tif runtime.GOOS != \"freebsd\" && runtime.GOOS != \"darwin\" {\n\t\t\t\t\t\tclient.EvaluateRequest(\"dlv target follow-exec\", 1000, \"repl\")\n\t\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\t\tif got.Body.Result != \"Follow exec mode is disabled\" {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot: %#v, want Follow exec mode is disabled\", got)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tclient.EvaluateRequest(\"dlv target follow-exec -on\", 1000, \"repl\")\n\t\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\t\tif got.Body.Result != \"Follow exec mode enabled\" {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot: %#v, want Follow exec mode enabled\", got)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbase := filepath.Base(fixture.Path)\n\t\t\t\t\t\tclient.EvaluateRequest(fmt.Sprintf(\"dlv target follow-exec -on %s\", base), 1000, \"repl\")\n\t\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\t\tif got.Body.Result != fmt.Sprintf(\"Follow exec mode enabled with regex %q\", base) {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot: %#v, want Follow exec mode enabled with regex %q\", got, base)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tclient.EvaluateRequest(\"dlv target follow-exec -off\", 1000, \"repl\")\n\t\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\t\tif got.Body.Result != \"Follow exec mode disabled\" {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot: %#v, want Follow exec mode disabled\", got)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// TODO: target switch\n\t\t\t\t\t}\n\n\t\t\t\t\t// Test bad inputs.\n\t\t\t\t\tclient.EvaluateRequest(\"dlv help bad\", 1000, \"repl\")\n\t\t\t\t\tclient.ExpectErrorResponse(t)\n\n\t\t\t\t\tclient.EvaluateRequest(\"dlv bad\", 1000, \"repl\")\n\t\t\t\t\tclient.ExpectErrorResponse(t)\n\n\t\t\t\t\tif runtime.GOOS != \"freebsd\" && runtime.GOOS != \"darwin\" {\n\t\t\t\t\t\t// Test bad target off\n\t\t\t\t\t\tclient.EvaluateRequest(\"dlv target follow-exec -off path\", 1000, \"repl\")\n\t\t\t\t\t\tclient.ExpectErrorResponse(t)\n\n\t\t\t\t\t\t// Test bad target on regex\n\t\t\t\t\t\tclient.EvaluateRequest(\"dlv target follow-exec -on [\", 1000, \"repl\")\n\t\t\t\t\t\tclient.ExpectErrorResponse(t)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Test bad target subcommand\n\t\t\t\t\tclient.EvaluateRequest(\"dlv target bad\", 1000, \"repl\")\n\t\t\t\t\tclient.ExpectErrorResponse(t)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// From testvariables2 fixture\nconst (\n\t// As defined in the code\n\tlongstr = `\"very long string 0123456789a0123456789b0123456789c0123456789d0123456789e0123456789f0123456789g012345678h90123456789i0123456789j0123456789\"`\n\t// Loaded with MaxStringLen=64\n\tlongstrLoaded64   = `\"very long string 0123456789a0123456789b0123456789c0123456789d012...+73 more\"`\n\tlongstrLoaded64re = `\\\"very long string 0123456789a0123456789b0123456789c0123456789d012\\.\\.\\.\\+73 more\\\"`\n)\n\n// TestVariableValueTruncation tests that in certain cases\n// we truncate the loaded variable values to make display more user-friendly.\nfunc TestVariableValueTruncation(t *testing.T) {\n\trunTest(t, \"testvariables2\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Breakpoint set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", -1)\n\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\n\t\t\t\t\t// Compound variable values may be truncated\n\t\t\t\t\tm1Full := `map\\[string\\]main\\.astruct \\[(\\\"[A-Za-z]+\\\": {A: [0-9]+, B: [0-9]+}, )+,\\.\\.\\.\\+2 more\\]`\n\t\t\t\t\tm1Part := `map\\[string\\]main\\.astruct \\[(\\\"[A-Za-z]+\\\": {A: [0-9]+, B: [0-9]+}, )+.+\\.\\.\\.`\n\n\t\t\t\t\t// In variable responses\n\t\t\t\t\tcheckVarRegex(t, locals, -1, \"m1\", \"m1\", m1Part, `map\\[string\\]main\\.astruct`, hasChildren)\n\n\t\t\t\t\t// In evaluate responses (select contexts only)\n\t\t\t\t\ttests := []struct {\n\t\t\t\t\t\tcontext string\n\t\t\t\t\t\twant    string\n\t\t\t\t\t}{\n\t\t\t\t\t\t{\"\", m1Part},\n\t\t\t\t\t\t{\"watch\", m1Part},\n\t\t\t\t\t\t{\"repl\", m1Part},\n\t\t\t\t\t\t{\"hover\", m1Part},\n\t\t\t\t\t\t{\"variables\", m1Full}, // used for copy\n\t\t\t\t\t\t{\"clipboard\", m1Full}, // used for copy\n\t\t\t\t\t\t{\"somethingelse\", m1Part},\n\t\t\t\t\t}\n\t\t\t\t\tfor _, tc := range tests {\n\t\t\t\t\t\tt.Run(tc.context, func(t *testing.T) {\n\t\t\t\t\t\t\tclient.EvaluateRequest(\"m1\", 0, tc.context)\n\t\t\t\t\t\t\tcheckEvalRegex(t, client.ExpectEvaluateResponse(t), tc.want, hasChildren)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\t// Compound map keys may be truncated even further\n\t\t\t\t\t// As the keys are always inside of a map container,\n\t\t\t\t\t// this applies to variables requests only, not evaluate requests.\n\n\t\t\t\t\t// key - compound, value - scalar (inlined key:value display) => truncate key if too long\n\t\t\t\t\tref := checkVarExact(t, locals, -1, \"m5\", \"m5\", \"map[main.C]int [{s: \"+longstr+\"}: 1, ]\", \"map[main.C]int\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t// Key format: <truncated>... @<address>\n\t\t\t\t\t\tcheckVarRegex(t, client.ExpectVariablesResponse(t), 1, `main\\.C {s: \"very long string 0123456789.+\\.\\.\\. @ 0x[0-9a-f]+`, `m5\\[\\(\\*\\(\\*\"main\\.C\"\\)\\(0x[0-9a-f]+\\)\\)\\]`, \"1\", `int`, hasChildren)\n\t\t\t\t\t}\n\t\t\t\t\t// key - scalar, value - scalar (inlined key:value display) => key not truncated\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"m6\", \"m6\", \"map[string]int [\"+longstr+\": 123, ]\", \"map[string]int\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tcheckVarExact(t, client.ExpectVariablesResponse(t), 1, longstr, `m6[`+longstr+`]`, \"123\", \"string: int\", noChildren)\n\t\t\t\t\t}\n\t\t\t\t\t// key - compound, value - compound (array-like display) => key not truncated\n\t\t\t\t\tref = checkVarExact(t, locals, -1, \"m7\", \"m7\", \"map[main.C]main.C [{s: \"+longstr+\"}: {s: \\\"hello\\\"}, ]\", \"map[main.C]main.C\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\tm7 := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckVarRegex(t, m7, 1, \"[key 0]\", `\\(\\*\\(\\*\\\"main\\.C\\\"\\)\\(0x[0-9a-f]+\\)\\)`, `main\\.C {s: `+longstr+`}`, `main\\.C`, hasChildren)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestVariableLoadingOfLongStrings tests that different string loading limits\n// apply that depending on the context.\nfunc TestVariableLoadingOfLongStrings(t *testing.T) {\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\trunTest(t, \"longstrings\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Breakpoint set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", -1)\n\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\n\t\t\t\t\t// Limits vary for evaluate requests with different contexts\n\t\t\t\t\ttests := []struct {\n\t\t\t\t\t\tcontext string\n\t\t\t\t\t\tlimit   int\n\t\t\t\t\t}{\n\t\t\t\t\t\t{\"\", DefaultLoadConfig.MaxStringLen},\n\t\t\t\t\t\t{\"watch\", DefaultLoadConfig.MaxStringLen},\n\t\t\t\t\t\t{\"repl\", maxSingleStringLen},\n\t\t\t\t\t\t{\"hover\", maxSingleStringLen},\n\t\t\t\t\t\t{\"variables\", maxSingleStringLen},\n\t\t\t\t\t\t{\"clipboard\", maxSingleStringLen},\n\t\t\t\t\t\t{\"somethingelse\", DefaultLoadConfig.MaxStringLen},\n\t\t\t\t\t}\n\t\t\t\t\tfor _, tc := range tests {\n\t\t\t\t\t\tt.Run(tc.context, func(t *testing.T) {\n\t\t\t\t\t\t\t// Long string by itself (limits vary)\n\t\t\t\t\t\t\tclient.EvaluateRequest(\"s4097\", 0, tc.context)\n\t\t\t\t\t\t\twant := fmt.Sprintf(`\"x+\\.\\.\\.\\+%d more\"`, 4097-tc.limit)\n\t\t\t\t\t\t\tcheckEvalRegex(t, client.ExpectEvaluateResponse(t), want, noChildren)\n\n\t\t\t\t\t\t\t// Evaluated container variables return values with minimally loaded\n\t\t\t\t\t\t\t// strings, which are further truncated for displaying, so we\n\t\t\t\t\t\t\t// can't test for loading limit except in contexts where an untruncated\n\t\t\t\t\t\t\t// value is returned.\n\t\t\t\t\t\t\tclient.EvaluateRequest(\"&s4097\", 0, tc.context)\n\t\t\t\t\t\t\tswitch tc.context {\n\t\t\t\t\t\t\tcase \"variables\", \"clipboard\":\n\t\t\t\t\t\t\t\twant = fmt.Sprintf(`\\*\"x+\\.\\.\\.\\+%d more`, 4097-DefaultLoadConfig.MaxStringLen)\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\twant = fmt.Sprintf(`\\*\"x{%d}\\.\\.\\.`, maxVarValueLen-2)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcheckEvalRegex(t, client.ExpectEvaluateResponse(t), want, hasChildren)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\t// Long strings returned from calls are subject to a different limit,\n\t\t\t\t\t// same limit regardless of context\n\t\t\t\t\tfor _, context := range []string{\"\", \"watch\", \"repl\", \"variables\", \"hover\", \"clipboard\", \"somethingelse\"} {\n\t\t\t\t\t\tt.Run(context, func(t *testing.T) {\n\t\t\t\t\t\t\tclient.EvaluateRequest(`call buildString(4097)`, 1000, context)\n\t\t\t\t\t\t\twant := fmt.Sprintf(`\"x+\\.\\.\\.\\+%d more\"`, 4097-maxStringLenInCallRetVars)\n\t\t\t\t\t\t\tgot := client.ExpectEvaluateResponse(t)\n\t\t\t\t\t\t\tcheckEvalRegex(t, got, want, hasChildren)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\t// Variables requests use the most conservative loading limit\n\t\t\t\t\tcheckVarRegex(t, locals, -1, \"s513\", \"s513\", `\"x{512}\\.\\.\\.\\+1 more\"`, \"string\", noChildren)\n\t\t\t\t\t// Container variables are subject to additional stricter value truncation that drops +more part\n\t\t\t\t\tcheckVarRegex(t, locals, -1, \"nested\", \"nested\", `map\\[int\\]string \\[513: \\\"x+\\.\\.\\.`, \"string\", hasChildren)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestEvaluateCallRequest(t *testing.T) {\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\trunTest(t, \"fncall\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\tfixture.Source, []string{\"main.makeclos:2\"},\n\t\t\t[]onBreakpoint{{ // Stop in makeclos()\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.makeclos\", -1)\n\n\t\t\t\t\t// Topmost frame: both types of expressions should work\n\t\t\t\t\tclient.EvaluateRequest(\"callstacktrace\", 1000, \"this context will be ignored\")\n\t\t\t\t\tclient.ExpectEvaluateResponse(t)\n\t\t\t\t\tclient.EvaluateRequest(\"call callstacktrace()\", 1000, \"this context will be ignored\")\n\t\t\t\t\tclient.ExpectEvaluateResponse(t)\n\n\t\t\t\t\t// Next frame: only non-call expressions will work\n\t\t\t\t\tclient.EvaluateRequest(\"callstacktrace\", 1001, \"this context will be ignored\")\n\t\t\t\t\tclient.ExpectEvaluateResponse(t)\n\t\t\t\t\tclient.EvaluateRequest(\"call callstacktrace()\", 1001, \"not watch\")\n\t\t\t\t\terres := client.ExpectVisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: call is only supported with topmost stack frame\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: call is only supported with topmost stack frame\\\"\", erres)\n\t\t\t\t\t}\n\n\t\t\t\t\t// A call can stop on a breakpoint\n\t\t\t\t\tclient.EvaluateRequest(\"call callbreak()\", 1000, \"not watch\")\n\t\t\t\t\ts := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif s.Body.Reason != \"hardcoded breakpoint\" {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Reason=\\\"hardcoded breakpoint\\\"\", s)\n\t\t\t\t\t}\n\t\t\t\t\terres = client.ExpectVisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: call stopped\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: call stopped\\\"\", erres)\n\t\t\t\t\t}\n\n\t\t\t\t\t// A call during a call causes an error\n\t\t\t\t\tclient.EvaluateRequest(\"call callstacktrace()\", 1000, \"not watch\")\n\t\t\t\t\terres = client.ExpectVisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: cannot call function while another function call is already in progress\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: cannot call function while another function call is already in progress\\\"\", erres)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Complete the call and get back to original breakpoint in makeclos()\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.makeclos\", -1)\n\n\t\t\t\t\t// Inject a call for the same function that is stopped at breakpoint:\n\t\t\t\t\t// it might stop at the exact same breakpoint on the same goroutine,\n\t\t\t\t\t// but we should still detect that its an injected call that stopped\n\t\t\t\t\t// and not the return to the original point of injection after it\n\t\t\t\t\t// completed.\n\t\t\t\t\tclient.EvaluateRequest(\"call makeclos(nil)\", 1000, \"not watch\")\n\t\t\t\t\tstopped := client.ExpectStoppedEvent(t)\n\t\t\t\t\terres = client.ExpectVisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: call stopped\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: call stopped\\\"\", erres)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, stopped.Body.ThreadId, \"main.makeclos\", -1)\n\n\t\t\t\t\t// Complete the call and get back to original breakpoint in makeclos()\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.makeclos\", -1)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}, { // Stop at runtime breakpoint\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", -1)\n\n\t\t\t\t\t// No return values\n\t\t\t\t\tclient.EvaluateRequest(\"call call0(1, 2)\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot := client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"\", noChildren)\n\t\t\t\t\t// One unnamed return value\n\t\t\t\t\tclient.EvaluateRequest(\"call call1(one, two)\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref := checkEval(t, got, \"3\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\trv := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, rv, \"rv\", 1)\n\t\t\t\t\t\tcheckVarExact(t, rv, 0, \"~r2\", \"\", \"3\", \"int\", noChildren)\n\t\t\t\t\t}\n\t\t\t\t\t// One named return value\n\t\t\t\t\t// Panic doesn't panic, but instead returns the error as a named return variable\n\t\t\t\t\tclient.EvaluateRequest(\"call callpanic()\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEval(t, got, `interface {}(string) \"callpanic panicked\"`, hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\trv := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, rv, \"rv\", 1)\n\t\t\t\t\t\tref = checkVarExact(t, rv, 0, \"~panic\", \"\", `interface {}(string) \"callpanic panicked\"`, \"interface {}(string)\", hasChildren)\n\t\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\t\tp := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\t\tcheckChildren(t, p, \"~panic\", 1)\n\t\t\t\t\t\t\tcheckVarExact(t, p, 0, \"data\", \"\", \"\\\"callpanic panicked\\\"\", \"string\", noChildren)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// Multiple return values\n\t\t\t\t\tclient.EvaluateRequest(\"call call2(one, two)\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tref = checkEval(t, got, \"1, 2\", hasChildren)\n\t\t\t\t\tif ref > 0 {\n\t\t\t\t\t\tclient.VariablesRequest(ref)\n\t\t\t\t\t\trvs := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, rvs, \"rvs\", 2)\n\t\t\t\t\t\tcheckVarExact(t, rvs, 0, \"~r2\", \"\", \"1\", \"int\", noChildren)\n\t\t\t\t\t\tcheckVarExact(t, rvs, 1, \"~r3\", \"\", \"2\", \"int\", noChildren)\n\t\t\t\t\t}\n\t\t\t\t\t// No frame defaults to top-most frame\n\t\t\t\t\tclient.EvaluateRequest(\"call call1(one, two)\", 0, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"3\", hasChildren)\n\t\t\t\t\t// Extra spaces don't matter\n\t\t\t\t\tclient.EvaluateRequest(\" call  call1(one, one) \", 0, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"2\", hasChildren)\n\t\t\t\t\t// Just 'call', even with extra space, is treated as {expression}\n\t\t\t\t\tclient.EvaluateRequest(\"call \", 1000, \"watch\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"\\\"this is a variable named `call`\\\"\", noChildren)\n\n\t\t\t\t\t// Call error\n\t\t\t\t\tclient.EvaluateRequest(\"call call1(one)\", 1000, \"watch\")\n\t\t\t\t\terres := client.ExpectInvisibleErrorResponse(t)\n\t\t\t\t\tif !checkErrorMessageFormat(erres.Body.Error, \"Unable to evaluate expression: not enough arguments\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=\\\"Unable to evaluate expression: not enough arguments\\\"\", erres)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Assignment - expect no error, but no return value.\n\t\t\t\t\tclient.EvaluateRequest(\"call one = two\", 1000, \"this context will be ignored\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"\", noChildren)\n\t\t\t\t\t// Check one=two was applied.\n\t\t\t\t\tclient.EvaluateRequest(\"one\", 1000, \"repl\")\n\t\t\t\t\tgot = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, got, \"2\", noChildren)\n\n\t\t\t\t\t// Call can exit.\n\t\t\t\t\tclient.EvaluateRequest(\"call callexit()\", 1000, \"this context will be ignored\")\n\t\t\t\t\tclient.ExpectTerminatedEvent(t)\n\t\t\t\t\tif res := client.ExpectVisibleErrorResponse(t); res.Body.Error == nil || !strings.Contains(res.Body.Error.Format, \"terminated\") {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Format=.*terminated.*\", res)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterminated: true,\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestNextAndStep(t *testing.T) {\n\trunTest(t, \"testinline\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{11},\n\t\t\t[]onBreakpoint{{ // Stop at line 11\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.initialize\", 11)\n\n\t\t\t\t\texpectStop := func(fun string, line int) {\n\t\t\t\t\t\tt.Helper()\n\t\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\t\tif se.Body.Reason != \"step\" || se.Body.ThreadId != 1 || !se.Body.AllThreadsStopped {\n\t\t\t\t\t\t\tt.Errorf(\"got %#v, want Reason=\\\"step\\\", ThreadId=1, AllThreadsStopped=true\", se)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcheckStop(t, client, 1, fun, line)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.StepOutRequest(1)\n\t\t\t\t\tclient.ExpectStepOutResponse(t)\n\t\t\t\t\texpectStop(\"main.main\", 18)\n\n\t\t\t\t\tclient.NextRequest(1)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\t\t\t\t\texpectStop(\"main.main\", 19)\n\n\t\t\t\t\tclient.StepInRequest(1)\n\t\t\t\t\tclient.ExpectStepInResponse(t)\n\t\t\t\t\texpectStop(\"main.inlineThis\", 5)\n\n\t\t\t\t\tclient.NextRequest(-1000)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\t\t\t\t\tif se := client.ExpectStoppedEvent(t); se.Body.Reason != \"error\" || se.Body.Text != \"unknown goroutine -1000\" {\n\t\t\t\t\t\tt.Errorf(\"got %#v, want Reason=\\\"error\\\", Text=\\\"unknown goroutine -1000\\\"\", se)\n\t\t\t\t\t}\n\t\t\t\t\tcheckStop(t, client, 1, \"main.inlineThis\", 5)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\nfunc TestHardCodedBreakpoints(t *testing.T) {\n\trunTest(t, \"consts\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\tfixture.Source, []int{28},\n\t\t\t[]onBreakpoint{{ // Stop at line 28\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 28)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.ThreadId != 1 || se.Body.Reason != \"breakpoint\" {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ThreadId=1 Reason=\\\"breakpoint\\\"\", se)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\n// TestStepInstruction executes to a breakpoint and tests stepping\n// a single instruction\nfunc TestStepInstruction(t *testing.T) {\n\trunTest(t, \"testvariables\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{32}, // b main.foobar\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.foobar\", 32)\n\n\t\t\t\t\tpc, err := getPC(t, client, 1)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Fatal(err)\n\t\t\t\t\t}\n\n\t\t\t\t\t// The exact instructions may change due to compiler changes,\n\t\t\t\t\t// but we want to make sure that all of our instructions are\n\t\t\t\t\t// instantiating variables, since these should not include\n\t\t\t\t\t// jumps.\n\t\t\t\t\tverifyExpectedLocation := func() {\n\t\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\t\tst := client.ExpectStackTraceResponse(t)\n\t\t\t\t\t\tif len(st.Body.StackFrames) < 1 {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant len(stackframes) => 1\", st)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// There is a hardcoded breakpoint on line 32. All of the\n\t\t\t\t\t\t\t// steps should be completed before that line.\n\t\t\t\t\t\t\tif st.Body.StackFrames[0].Line < 32 {\n\t\t\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Line<32\", st)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif st.Body.StackFrames[0].Name != \"main.foobar\" {\n\t\t\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Name=\\\"main.foobar\\\"\", st)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Next instruction.\n\t\t\t\t\tclient.NextInstructionRequest(1)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.ThreadId != 1 || se.Body.Reason != \"step\" {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ThreadId=1 Reason=\\\"step\\\"\", se)\n\t\t\t\t\t}\n\t\t\t\t\tverifyExpectedLocation()\n\t\t\t\t\tnextPC, err := getPC(t, client, 1)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Fatal(err)\n\t\t\t\t\t}\n\t\t\t\t\tif nextPC <= pc {\n\t\t\t\t\t\tt.Errorf(\"got %#x, expected InstructionPointerReference>%#x\", nextPC, pc)\n\t\t\t\t\t}\n\n\t\t\t\t\t// StepIn instruction.\n\t\t\t\t\tpc = nextPC\n\t\t\t\t\tclient.StepInInstructionRequest(1)\n\t\t\t\t\tclient.ExpectStepInResponse(t)\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.ThreadId != 1 || se.Body.Reason != \"step\" {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ThreadId=1 Reason=\\\"step\\\"\", se)\n\t\t\t\t\t}\n\t\t\t\t\tverifyExpectedLocation()\n\t\t\t\t\tnextPC, err = getPC(t, client, 1)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Fatal(err)\n\t\t\t\t\t}\n\t\t\t\t\tif nextPC <= pc {\n\t\t\t\t\t\tt.Errorf(\"got %#x, expected InstructionPointerReference>%#x\", nextPC, pc)\n\t\t\t\t\t}\n\n\t\t\t\t\t// StepOut Instruction.\n\t\t\t\t\tpc = nextPC\n\t\t\t\t\tclient.StepOutInstructionRequest(1)\n\t\t\t\t\tclient.ExpectStepOutResponse(t)\n\t\t\t\t\tse = client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.ThreadId != 1 || se.Body.Reason != \"step\" {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ThreadId=1 Reason=\\\"step\\\"\", se)\n\t\t\t\t\t}\n\t\t\t\t\tverifyExpectedLocation()\n\t\t\t\t\tnextPC, err = getPC(t, client, 1)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Fatal(err)\n\t\t\t\t\t}\n\t\t\t\t\tif nextPC <= pc {\n\t\t\t\t\t\tt.Errorf(\"got %#x, expected InstructionPointerReference>%#x\", nextPC, pc)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc getPC(t *testing.T, client *daptest.Client, threadId int) (uint64, error) {\n\tclient.StackTraceRequest(threadId, 0, 1)\n\tst := client.ExpectStackTraceResponse(t)\n\tif len(st.Body.StackFrames) < 1 {\n\t\tt.Fatalf(\"\\ngot  %#v\\nwant len(stackframes) => 1\", st)\n\t}\n\treturn strconv.ParseUint(st.Body.StackFrames[0].InstructionPointerReference, 0, 64)\n}\n\n// TestNextParked tests that we can switched selected goroutine to a parked one\n// and perform next operation on it.\nfunc TestNextParked(t *testing.T) {\n\trunTest(t, \"parallel_next\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{15},\n\t\t\t[]onBreakpoint{{ // Stop at line 15\n\t\t\t\texecute: func() {\n\t\t\t\t\tif parkedGoid := testNextParkedHelper(t, client, fixture); parkedGoid >= 0 {\n\t\t\t\t\t\tclient.NextRequest(parkedGoid)\n\t\t\t\t\t\tclient.ExpectNextResponse(t)\n\n\t\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\t\tif se.Body.ThreadId != parkedGoid {\n\t\t\t\t\t\t\tt.Fatalf(\"Next did not continue on the newly selected goroutine, expected %d got %d\", parkedGoid, se.Body.ThreadId)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// Let the test harness continue to process termination\n\t\t\t\t// if it hasn't gotten there already.\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\n// Finds a goroutine other than the selected one that is parked inside of main.sayhi and therefore\n// still has a line to execute if resumed with next.\nfunc testNextParkedHelper(t *testing.T, client *daptest.Client, fixture protest.Fixture) int {\n\tt.Helper()\n\t// Set a breakpoint at main.sayhi\n\tclient.SetBreakpointsRequest(fixture.Source, []int{8})\n\tclient.ExpectSetBreakpointsResponse(t)\n\n\tparkedGoid := -1\n\tfor parkedGoid < 0 {\n\t\tclient.ContinueRequest(1)\n\t\tclient.ExpectContinueResponse(t)\n\t\tevent := client.ExpectMessage(t)\n\t\tswitch event.(type) {\n\t\tcase *dap.StoppedEvent:\n\t\t\t// ok\n\t\tcase *dap.TerminatedEvent:\n\t\t\t// This is very unlikely to happen. But in theory if all sayhi\n\t\t\t// goroutines are run serially, there will never be a second parked\n\t\t\t// sayhi goroutine when another breaks and we will keep trying\n\t\t\t// until process termination.\n\t\t\treturn -1\n\t\t}\n\n\t\tse := event.(*dap.StoppedEvent)\n\n\t\tclient.ThreadsRequest()\n\t\tthreads := client.ExpectThreadsResponse(t)\n\n\t\t// Search for a parked goroutine that we know for sure will have to be\n\t\t// resumed before the program can exit. This is a parked goroutine that:\n\t\t// 1. is executing main.sayhi\n\t\t// 2. hasn't called wg.Done yet\n\t\t// 3. is not the currently selected goroutine\n\t\tfor _, g := range threads.Body.Threads {\n\t\t\tif g.Id == se.Body.ThreadId || g.Id == 0 {\n\t\t\t\t// Skip selected goroutine and goroutine 0\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tclient.StackTraceRequest(g.Id, 0, 5)\n\t\t\tframes := client.ExpectStackTraceResponse(t)\n\t\t\tfor _, frame := range frames.Body.StackFrames {\n\t\t\t\t// line 11 is the line where wg.Done is called\n\t\t\t\tif frame.Name == \"main.sayhi\" && frame.Line < 11 {\n\t\t\t\t\tparkedGoid = g.Id\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif parkedGoid >= 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// Clear all breakpoints.\n\tclient.SetBreakpointsRequest(fixture.Source, []int{})\n\tclient.ExpectSetBreakpointsResponse(t)\n\treturn parkedGoid\n}\n\n// TestStepOutPreservesGoroutine is inspired by proc_test.TestStepOutPreservesGoroutine\n// and checks that StepOut preserves the currently selected goroutine.\nfunc TestStepOutPreservesGoroutine(t *testing.T) {\n\t// Checks that StepOut preserves the currently selected goroutine.\n\trand.Seed(time.Now().Unix())\n\trunTest(t, \"issue2113\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{25},\n\t\t\t[]onBreakpoint{{ // Stop at line 25\n\t\t\t\texecute: func() {\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\t// The program contains runtime.Breakpoint()\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\n\t\t\t\t\tclient.ThreadsRequest()\n\t\t\t\t\tgs := client.ExpectThreadsResponse(t)\n\n\t\t\t\t\tcandg := []int{}\n\t\t\t\t\tbestg := []int{}\n\t\t\t\t\tfor _, g := range gs.Body.Threads {\n\t\t\t\t\t\t// We do not need to check the thread that the program\n\t\t\t\t\t\t// is currently stopped on.\n\t\t\t\t\t\tif g.Id == se.Body.ThreadId {\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tclient.StackTraceRequest(g.Id, 0, 20)\n\t\t\t\t\t\tframes := client.ExpectStackTraceResponse(t)\n\t\t\t\t\t\tfor _, frame := range frames.Body.StackFrames {\n\t\t\t\t\t\t\tif frame.Name == \"main.coroutine\" {\n\t\t\t\t\t\t\t\tcandg = append(candg, g.Id)\n\t\t\t\t\t\t\t\tif strings.HasPrefix(frames.Body.StackFrames[0].Name, \"runtime.\") {\n\t\t\t\t\t\t\t\t\tbestg = append(bestg, g.Id)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tvar goroutineId int\n\t\t\t\t\tif len(bestg) > 0 {\n\t\t\t\t\t\tgoroutineId = bestg[rand.Intn(len(bestg))]\n\t\t\t\t\t\tt.Logf(\"selected goroutine %d (best)\\n\", goroutineId)\n\t\t\t\t\t} else if len(candg) > 0 {\n\t\t\t\t\t\tgoroutineId = candg[rand.Intn(len(candg))]\n\t\t\t\t\t\tt.Logf(\"selected goroutine %d\\n\", goroutineId)\n\t\t\t\t\t}\n\n\t\t\t\t\tif goroutineId != 0 {\n\t\t\t\t\t\tclient.StepOutRequest(goroutineId)\n\t\t\t\t\t\tclient.ExpectStepOutResponse(t)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclient.ContinueRequest(-1)\n\t\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch e := client.ExpectMessage(t).(type) {\n\t\t\t\t\tcase *dap.StoppedEvent:\n\t\t\t\t\t\tif e.Body.ThreadId != goroutineId {\n\t\t\t\t\t\t\tt.Fatalf(\"StepOut did not continue on the selected goroutine, expected %d got %d\", goroutineId, e.Body.ThreadId)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase *dap.TerminatedEvent:\n\t\t\t\t\t\tt.Logf(\"program terminated\")\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tt.Fatalf(\"Unexpected event type: expect stopped or terminated event, got %#v\", e)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\nfunc checkStopOnNextWhileNextingError(t *testing.T, client *daptest.Client, threadID int) {\n\tt.Helper()\n\toe := client.ExpectOutputEvent(t)\n\tif oe.Body.Category != \"console\" || oe.Body.Output != fmt.Sprintf(\"invalid command: %s\\n\", BetterNextWhileNextingError) {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant Category=\\\"console\\\" Output=\\\"invalid command: %s\\\\n\\\"\", oe, BetterNextWhileNextingError)\n\t}\n\tse := client.ExpectStoppedEvent(t)\n\tif se.Body.ThreadId != threadID || se.Body.Reason != \"exception\" || se.Body.Description != \"invalid command\" || se.Body.Text != BetterNextWhileNextingError {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant ThreadId=%d Reason=\\\"exception\\\" Description=\\\"invalid command\\\" Text=\\\"%s\\\"\", se, threadID, BetterNextWhileNextingError)\n\t}\n\tclient.ExceptionInfoRequest(1)\n\teInfo := client.ExpectExceptionInfoResponse(t)\n\tif eInfo.Body.ExceptionId != \"invalid command\" || eInfo.Body.Description != BetterNextWhileNextingError {\n\t\tt.Errorf(\"\\ngot  %#v\\nwant ExceptionId=\\\"invalid command\\\" Text=\\\"%s\\\"\", eInfo, BetterNextWhileNextingError)\n\t}\n}\n\nfunc TestBadAccess(t *testing.T) {\n\tif runtime.GOOS != \"darwin\" || testBackend != \"lldb\" {\n\t\tt.Skip(\"not applicable\")\n\t}\n\trunTest(t, \"issue2078\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{4},\n\t\t\t[]onBreakpoint{{ // Stop at line 4\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 4)\n\n\t\t\t\t\texpectStoppedOnError := func(errorPrefix string) {\n\t\t\t\t\t\tt.Helper()\n\t\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\t\tif se.Body.ThreadId != 1 || se.Body.Reason != \"exception\" || (se.Body.Description != \"runtime error\" && se.Body.Description != \"panic\") || !strings.Contains(se.Body.Text, errorPrefix) {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ThreadId=1 Reason=\\\"exception\\\" Description=\\\"runtime error\\\" Text=\\\"%s\\\"\", se, errorPrefix)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclient.ExceptionInfoRequest(1)\n\t\t\t\t\t\teInfo := client.ExpectExceptionInfoResponse(t)\n\t\t\t\t\t\tif (eInfo.Body.ExceptionId != \"runtime error\" && eInfo.Body.ExceptionId != \"panic\") || !strings.Contains(eInfo.Body.Description, errorPrefix) {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ExceptionId=\\\"runtime error\\\" Text=\\\"%s\\\"\", eInfo, errorPrefix)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\texpectStoppedOnError(\"invalid memory address or nil pointer dereference\")\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 2)\n\t\t\t\t\tst := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tif len(st.Body.StackFrames) > 0 && st.Body.StackFrames[0].Name == \"runtime.fatalpanic\" {\n\t\t\t\t\t\t// this debugserver has --unmask-signals and it works correctly\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.NextRequest(1)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\t\t\t\t\texpectStoppedOnError(\"invalid memory address or nil pointer dereference\")\n\n\t\t\t\t\tclient.NextRequest(1)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\t\t\t\t\tcheckStopOnNextWhileNextingError(t, client, 1)\n\n\t\t\t\t\tclient.StepInRequest(1)\n\t\t\t\t\tclient.ExpectStepInResponse(t)\n\t\t\t\t\tcheckStopOnNextWhileNextingError(t, client, 1)\n\n\t\t\t\t\tclient.StepOutRequest(1)\n\t\t\t\t\tclient.ExpectStepOutResponse(t)\n\t\t\t\t\tcheckStopOnNextWhileNextingError(t, client, 1)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestNextWhileNexting is inspired by command_test.TestIssue387 and tests\n// that when 'next' is interrupted by a 'breakpoint', calling 'next'\n// again will produce an error with a helpful message, and 'continue'\n// will resume the program.\nfunc TestNextWhileNexting(t *testing.T) {\n\t// a breakpoint triggering during a 'next' operation will interrupt 'next''\n\t// Unlike the test for the terminal package, we cannot be certain\n\t// of the number of breakpoints we expect to hit, since multiple\n\t// breakpoints being hit at the same time is not supported in DAP stopped\n\t// events.\n\trunTest(t, \"issue387\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{15},\n\t\t\t[]onBreakpoint{{ // Stop at line 15\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 15)\n\n\t\t\t\t\tclient.SetBreakpointsRequest(fixture.Source, []int{8})\n\t\t\t\t\tclient.ExpectSetBreakpointsResponse(t)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\tbpSe := client.ExpectStoppedEvent(t)\n\t\t\t\t\tthreadID := bpSe.Body.ThreadId\n\t\t\t\t\tcheckStop(t, client, threadID, \"main.dostuff\", 8)\n\n\t\t\t\t\tfor pos := 9; pos < 11; pos++ {\n\t\t\t\t\t\tclient.NextRequest(threadID)\n\t\t\t\t\t\tclient.ExpectNextResponse(t)\n\n\t\t\t\t\t\tstepInProgress := true\n\t\t\t\t\t\tfor stepInProgress {\n\t\t\t\t\t\t\tm := client.ExpectStoppedEvent(t)\n\t\t\t\t\t\t\tswitch m.Body.Reason {\n\t\t\t\t\t\t\tcase \"step\":\n\t\t\t\t\t\t\t\tif !m.Body.AllThreadsStopped {\n\t\t\t\t\t\t\t\t\tt.Errorf(\"got %#v, want Reason=\\\"step\\\", AllThreadsStopped=true\", m)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcheckStop(t, client, m.Body.ThreadId, \"main.dostuff\", pos)\n\t\t\t\t\t\t\t\tstepInProgress = false\n\t\t\t\t\t\t\tcase \"breakpoint\":\n\t\t\t\t\t\t\t\tif !m.Body.AllThreadsStopped {\n\t\t\t\t\t\t\t\t\tt.Errorf(\"got %#v, want Reason=\\\"breakpoint\\\", AllThreadsStopped=true\", m)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif stepInProgress {\n\t\t\t\t\t\t\t\t\t// We encountered a breakpoint on a different thread. We should have to resume execution\n\t\t\t\t\t\t\t\t\t// using continue.\n\t\t\t\t\t\t\t\t\toe := client.ExpectOutputEvent(t)\n\t\t\t\t\t\t\t\t\tif oe.Body.Category != \"console\" || !strings.Contains(oe.Body.Output, \"Step interrupted by a breakpoint.\") {\n\t\t\t\t\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Category=\\\"console\\\" Output=\\\"Step interrupted by a breakpoint.\\\"\", oe)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclient.NextRequest(m.Body.ThreadId)\n\t\t\t\t\t\t\t\t\tclient.ExpectNextResponse(t)\n\t\t\t\t\t\t\t\t\tcheckStopOnNextWhileNextingError(t, client, m.Body.ThreadId)\n\t\t\t\t\t\t\t\t\t// Continue since we have not finished the step request.\n\t\t\t\t\t\t\t\t\tclient.ContinueRequest(threadID)\n\t\t\t\t\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcheckStop(t, client, m.Body.ThreadId, \"main.dostuff\", 8)\n\t\t\t\t\t\t\t\t\t// Switch to stepping on this thread instead.\n\t\t\t\t\t\t\t\t\tpos = 8\n\t\t\t\t\t\t\t\t\tthreadID = m.Body.ThreadId\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tt.Fatalf(\"got %#v, want StoppedEvent on step or breakpoint\", m)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestPanicBreakpointOnContinue(t *testing.T) {\n\trunTest(t, \"panic\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{5},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 5)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\ttext := \"\\\"BOOM!\\\"\"\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.ThreadId != 1 || se.Body.Reason != \"exception\" || se.Body.Description != \"panic\" || se.Body.Text != text {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ThreadId=1 Reason=\\\"exception\\\" Description=\\\"panic\\\" Text=%q\", se, text)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.ExceptionInfoRequest(1)\n\t\t\t\t\teInfo := client.ExpectExceptionInfoResponse(t)\n\t\t\t\t\tif eInfo.Body.ExceptionId != \"panic\" || eInfo.Body.Description != text {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ExceptionId=\\\"panic\\\" Description=%q\", eInfo, text)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.StackTraceRequest(se.Body.ThreadId, 0, 20)\n\t\t\t\t\tst := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tfor i, frame := range st.Body.StackFrames {\n\t\t\t\t\t\tif strings.HasPrefix(frame.Name, \"runtime.\") {\n\t\t\t\t\t\t\tif frame.PresentationHint != \"subtle\" {\n\t\t\t\t\t\t\t\tt.Errorf(\"\\ngot Body.StackFrames[%d]=%#v\\nwant Source.PresentationHint=\\\"subtle\\\"\", i, frame)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if frame.Source != nil && frame.Source.PresentationHint != \"\" {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot Body.StackFrames[%d]=%#v\\nwant Source.PresentationHint=\\\"\\\"\", i, frame)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestPanicBreakpointOnNext(t *testing.T) {\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 14) {\n\t\t// In Go 1.13, 'next' will step into the defer in the runtime\n\t\t// main function, instead of the next line in the main program.\n\t\tt.SkipNow()\n\t}\n\n\trunTest(t, \"panic\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{5},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 5)\n\n\t\t\t\t\tclient.NextRequest(1)\n\t\t\t\t\tclient.ExpectNextResponse(t)\n\n\t\t\t\t\ttext := \"\\\"BOOM!\\\"\"\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.ThreadId != 1 || se.Body.Reason != \"exception\" || se.Body.Description != \"panic\" || se.Body.Text != text {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ThreadId=1 Reason=\\\"exception\\\" Description=\\\"panic\\\" Text=%q\", se, text)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.ExceptionInfoRequest(1)\n\t\t\t\t\teInfo := client.ExpectExceptionInfoResponse(t)\n\t\t\t\t\tif eInfo.Body.ExceptionId != \"panic\" || eInfo.Body.Description != text {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ExceptionId=\\\"panic\\\" Description=%q\", eInfo, text)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestFatalThrowBreakpoint(t *testing.T) {\n\trunTest(t, \"fatalerror\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{3},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 3)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\tvar text string\n\t\t\t\t\t// This does not work for Go 1.16.\n\t\t\t\t\tver, _ := goversion.Parse(runtime.Version())\n\t\t\t\t\tif ver.Major != 1 || ver.Minor != 16 {\n\t\t\t\t\t\ttext = \"\\\"go of nil func value\\\"\"\n\t\t\t\t\t}\n\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.ThreadId != 1 || se.Body.Reason != \"exception\" || se.Body.Description != \"fatal error\" || se.Body.Text != text {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ThreadId=1 Reason=\\\"exception\\\" Description=\\\"fatal error\\\" Text=%q\", se, text)\n\t\t\t\t\t}\n\n\t\t\t\t\t// This does not work for Go 1.16.\n\t\t\t\t\terrorPrefix := text\n\t\t\t\t\tif errorPrefix == \"\" {\n\t\t\t\t\t\terrorPrefix = \"Throw reason unavailable, see https://github.com/golang/go/issues/46425\"\n\t\t\t\t\t}\n\t\t\t\t\tclient.ExceptionInfoRequest(1)\n\t\t\t\t\teInfo := client.ExpectExceptionInfoResponse(t)\n\t\t\t\t\tif eInfo.Body.ExceptionId != \"fatal error\" || !strings.HasPrefix(eInfo.Body.Description, errorPrefix) {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant ExceptionId=\\\"runtime error\\\" Text=%s\", eInfo, errorPrefix)\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n\trunTest(t, \"testdeadlock\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{3},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 3)\n\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\t// This does not work for Go 1.16 so skip by detecting versions before or after 1.16.\n\t\t\t\t\tvar text string\n\t\t\t\t\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 16) || goversion.VersionAfterOrEqual(runtime.Version(), 1, 17) {\n\t\t\t\t\t\ttext = \"\\\"all goroutines are asleep - deadlock!\\\"\"\n\t\t\t\t\t}\n\t\t\t\t\tse := client.ExpectStoppedEvent(t)\n\t\t\t\t\tif se.Body.Reason != \"exception\" || se.Body.Description != \"fatal error\" || se.Body.Text != text {\n\t\t\t\t\t\tt.Errorf(\"\\ngot  %#v\\nwant Reason=\\\"exception\\\" Description=\\\"fatal error\\\" Text=%q\", se, text)\n\t\t\t\t\t}\n\n\t\t\t\t\t// TODO(suzmue): Get the exception info for the thread and check the description\n\t\t\t\t\t// includes \"all goroutines are asleep - deadlock!\".\n\t\t\t\t\t// Stopped events with no selected goroutines need to be supported to test deadlock.\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// checkStop covers the standard sequence of requests issued by\n// a client at a breakpoint or another non-terminal stop event.\n// The details have been tested by other tests,\n// so this is just a sanity check.\n// Skips line check if line is -1.\nfunc checkStop(t *testing.T, client *daptest.Client, thread int, fname string, line any) {\n\tt.Helper()\n\tclient.ThreadsRequest()\n\tclient.ExpectThreadsResponse(t)\n\n\tclient.CheckStopLocation(t, thread, fname, line)\n\n\tclient.ScopesRequest(1000)\n\tclient.ExpectScopesResponse(t)\n\n\tclient.VariablesRequest(localsScope)\n\tclient.ExpectVariablesResponse(t)\n}\n\n// onBreakpoint specifies what the test harness should simulate at\n// a stopped breakpoint. First execute() is to be called to test\n// specified editor-driven or user-driven requests. Then if\n// disconnect is true, the test harness will abort the program\n// execution. Otherwise, a continue will be issued and the\n// program will continue to the next breakpoint or termination.\n// If terminated is true, we expect requests at this breakpoint\n// to result in termination.\ntype onBreakpoint struct {\n\texecute    func()\n\tdisconnect bool\n\tterminated bool\n}\n\n// runDebugSessionWithBPs is a helper for executing the common init and shutdown\n// sequences for a program that does not stop on entry\n// while specifying breakpoints and unique launch/attach criteria via parameters.\n//\n//\tcmd            - \"launch\" or \"attach\"\n//\tcmdRequest     - a function that sends a launch or attach request,\n//\t                 so the test author has full control of its arguments.\n//\t                 Note that he rest of the test sequence assumes that\n//\t                 stopOnEntry is false.\n//\t source        - source file path, needed to set breakpoints, \"\" if none to be set.\n//\t breakpoints   - list of lines, where breakpoints are to be set\n//\t onBPs         - list of test sequences to execute at each of the set breakpoints.\nfunc runDebugSessionWithBPs(t *testing.T, client *daptest.Client, cmd string, cmdRequest func(), source string, breakpoints any, onBPs []onBreakpoint) {\n\tclient.InitializeRequest()\n\tclient.ExpectInitializeResponseAndCapabilities(t)\n\n\tcmdRequest()\n\n\tif cmd == \"launch\" {\n\t\tclient.ExpectProcessEvent(t)\n\t}\n\n\tclient.ExpectInitializedEvent(t)\n\tswitch cmd {\n\tcase \"launch\":\n\t\tclient.ExpectLaunchResponse(t)\n\tcase \"attach\":\n\t\tclient.ExpectAttachResponse(t)\n\tdefault:\n\t\tpanic(\"expected launch or attach command\")\n\t}\n\n\tif source != \"\" {\n\t\tswitch breakpoints := breakpoints.(type) {\n\t\tcase []int:\n\t\t\tclient.SetBreakpointsRequest(source, breakpoints)\n\t\t\tclient.ExpectSetBreakpointsResponse(t)\n\t\tcase []string:\n\t\t\tfbps := []dap.FunctionBreakpoint{}\n\t\t\tfor _, bp := range breakpoints {\n\t\t\t\tfbps = append(fbps, dap.FunctionBreakpoint{Name: bp})\n\t\t\t}\n\t\t\tclient.SetFunctionBreakpointsRequest(fbps)\n\t\t\tclient.ExpectSetFunctionBreakpointsResponse(t)\n\t\t}\n\t}\n\n\t// Skip no-op setExceptionBreakpoints\n\n\tclient.ConfigurationDoneRequest()\n\tclient.ExpectConfigurationDoneResponse(t)\n\n\t// Program automatically continues to breakpoint or completion\n\n\t// TODO(polina): See if we can make this more like withTestProcessArgs in proc_test:\n\t// a single function pointer gets called here and then if it wants to continue it calls\n\t// client.ContinueRequest/client.ExpectContinueResponse/client.ExpectStoppedEvent\n\t// (possibly using a helper function).\n\tfor _, onBP := range onBPs {\n\t\tclient.ExpectStoppedEvent(t)\n\t\tonBP.execute()\n\t\tif onBP.disconnect {\n\t\t\tclient.DisconnectRequestWithKillOption(true)\n\t\t\tif onBP.terminated {\n\t\t\t\tclient.ExpectOutputEventProcessExitedAnyStatus(t)\n\t\t\t\tclient.ExpectOutputEventDetaching(t)\n\t\t\t} else {\n\t\t\t\tclient.ExpectOutputEventDetachingKill(t)\n\t\t\t}\n\t\t\tclient.ExpectDisconnectResponse(t)\n\t\t\tclient.ExpectTerminatedEvent(t)\n\t\t\treturn\n\t\t}\n\t\tclient.ContinueRequest(1)\n\t\tclient.ExpectContinueResponse(t)\n\t\t// \"Continue\" is triggered after the response is sent\n\t}\n\n\tif cmd == \"launch\" { // Let the program run to completion\n\t\tclient.ExpectTerminatedEvent(t)\n\t}\n\tclient.DisconnectRequestWithKillOption(true)\n\tif cmd == \"launch\" {\n\t\tclient.ExpectOutputEventProcessExitedAnyStatus(t)\n\t\tclient.ExpectOutputEventDetaching(t)\n\t} else if cmd == \"attach\" {\n\t\tclient.ExpectOutputEventDetachingKill(t)\n\t}\n\tclient.ExpectDisconnectResponse(t)\n\tclient.ExpectTerminatedEvent(t)\n}\n\n// runDebugSession is a helper for executing the standard init and shutdown\n// sequences for a program that does not stop on entry\n// while specifying unique launch criteria via parameters.\nfunc runDebugSession(t *testing.T, client *daptest.Client, cmd string, cmdRequest func()) {\n\trunDebugSessionWithBPs(t, client, cmd, cmdRequest, \"\", nil, nil)\n}\n\nfunc TestLaunchDebugRequest(t *testing.T) {\n\trescueStderr := os.Stderr\n\tr, w, _ := os.Pipe()\n\tos.Stderr = w\n\tdone := make(chan struct{})\n\n\tvar err []byte\n\n\tgo func() {\n\t\terr, _ = io.ReadAll(r)\n\t\tt.Log(string(err))\n\t\tclose(done)\n\t}()\n\n\ttmpBin := \"__tmpBin\"\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// We reuse the harness that builds, but ignore the built binary,\n\t\t// only relying on the source to be built in response to LaunchRequest.\n\t\trunDebugSession(t, client, \"launch\", func() {\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\"mode\": \"debug\", \"program\": fixture.Source, \"output\": tmpBin,\n\t\t\t})\n\t\t})\n\t})\n\t// Wait for the test to finish to capture all stderr\n\ttime.Sleep(100 * time.Millisecond)\n\n\tw.Close()\n\t<-done\n\tos.Stderr = rescueStderr\n\n\trmErrRe := regexp.MustCompile(`could not remove .*\\n`)\n\trmErr := rmErrRe.FindString(string(err))\n\tif rmErr != \"\" {\n\t\t// On Windows, a file in use cannot be removed, resulting in \"Access is denied\".\n\t\t// When the process exits, Delve releases the binary by calling\n\t\t// BinaryInfo.Close(), but it appears that it is still in use (by Windows?)\n\t\t// shortly after. gobuild.Remove has a delay to address this, but\n\t\t// to avoid any test flakiness we guard against this failure here as well.\n\t\tif runtime.GOOS != \"windows\" || !stringContainsCaseInsensitive(rmErr, \"Access is denied\") {\n\t\t\tt.Fatalf(\"Binary removal failure:\\n%s\\n\", rmErr)\n\t\t}\n\t} else {\n\t\ttmpBin = cleanExeName(tmpBin)\n\t\t// We did not get a removal error, but did we even try to remove before exiting?\n\t\t// Confirm that the binary did get removed.\n\t\tif _, err := os.Stat(tmpBin); err == nil || os.IsExist(err) {\n\t\t\tt.Fatal(\"Failed to remove temp binary\", tmpBin)\n\t\t}\n\t}\n}\n\n// TestLaunchRequestDefaults tests defaults for launch attribute that are explicit in other tests.\nfunc TestLaunchRequestDefaults(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSession(t, client, \"launch\", func() {\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\"mode\": \"\" /*\"debug\" by default*/, \"program\": fixture.Source,\n\t\t\t})\n\t\t})\n\t})\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSession(t, client, \"launch\", func() {\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t/*\"mode\":\"debug\" by default*/ \"program\": fixture.Source,\n\t\t\t})\n\t\t})\n\t})\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSession(t, client, \"launch\", func() {\n\t\t\t// Use the temporary output binary.\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\"mode\": \"debug\", \"program\": fixture.Source,\n\t\t\t})\n\t\t})\n\t})\n}\n\n// TestLaunchRequestOutputPath verifies that relative output binary path\n// is mapped to server's, not target's, working directory.\nfunc TestLaunchRequestOutputPath(t *testing.T) {\n\trunTest(t, \"testargs\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tinrel := \"__somebin\"\n\t\twd, _ := os.Getwd()\n\t\toutabs := cleanExeName(filepath.Join(wd, inrel))\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"debug\", \"program\": fixture.Source, \"output\": inrel,\n\t\t\t\t\t\"cwd\": filepath.Dir(wd),\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{12},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 12)\n\t\t\t\t\tclient.EvaluateRequest(\"os.Args[0]\", 1000, \"repl\")\n\t\t\t\t\tcheckEval(t, client.ExpectEvaluateResponse(t), fmt.Sprintf(\"%q\", outabs), noChildren)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestExitNonZeroStatus(t *testing.T) {\n\trunTest(t, \"pr1055\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tclient.InitializeRequest()\n\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\n\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\tclient.ExpectProcessEvent(t)\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectLaunchResponse(t)\n\n\t\tclient.ConfigurationDoneRequest()\n\t\tclient.ExpectConfigurationDoneResponse(t)\n\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\tclient.DisconnectRequest()\n\t\t// Check that the process exit status is 2.\n\t\toep := client.ExpectOutputEventProcessExited(t, 2)\n\t\tif oep.Body.Category != \"console\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Category='console'\", oep)\n\t\t}\n\t\toed := client.ExpectOutputEventDetaching(t)\n\t\tif oed.Body.Category != \"console\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Category='console'\", oed)\n\t\t}\n\t\tclient.ExpectDisconnectResponse(t)\n\t\tclient.ExpectTerminatedEvent(t)\n\t})\n}\n\nfunc TestNoDebug_GoodExitStatus(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunNoDebugSession(t, client, func() {\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\"noDebug\": true, \"mode\": \"debug\", \"program\": fixture.Source,\n\t\t\t})\n\t\t}, 0)\n\t})\n}\n\nfunc TestNoDebug_BadExitStatus(t *testing.T) {\n\trunTest(t, \"issue1101\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunNoDebugSession(t, client, func() {\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\"noDebug\": true, \"mode\": \"exec\", \"program\": fixture.Path,\n\t\t\t})\n\t\t}, 2)\n\t})\n}\n\n// runNoDebugSession tests the session started with noDebug=true runs\n// to completion and logs termination status.\nfunc runNoDebugSession(t *testing.T, client *daptest.Client, launchRequest func(), exitStatus int) {\n\tclient.InitializeRequest()\n\tclient.ExpectInitializeResponseAndCapabilities(t)\n\n\tlaunchRequest()\n\t// no initialized event.\n\t// noDebug mode applies only to \"launch\" requests.\n\tclient.ExpectLaunchResponse(t)\n\n\tclient.ExpectOutputEventProcessExited(t, exitStatus)\n\tclient.ExpectTerminatedEvent(t)\n\tclient.DisconnectRequestWithKillOption(true)\n\tclient.ExpectDisconnectResponse(t)\n\tclient.ExpectTerminatedEvent(t)\n}\n\nfunc TestNoDebug_AcceptNoRequestsButDisconnect(t *testing.T) {\n\trunTest(t, \"http_server\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tclient.InitializeRequest()\n\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\"noDebug\": true, \"mode\": \"exec\", \"program\": fixture.Path,\n\t\t})\n\t\tclient.ExpectLaunchResponse(t)\n\n\t\t// Anything other than disconnect should get rejected\n\t\tExpectNoDebugError := func(cmd string) {\n\t\t\ter := client.ExpectErrorResponse(t)\n\t\t\tif !checkErrorMessageFormat(er.Body.Error, fmt.Sprintf(\"noDebug mode: unable to process '%s' request\", cmd)) {\n\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant 'noDebug mode: unable to process '%s' request'\", er, cmd)\n\t\t\t}\n\t\t}\n\t\tclient.SetBreakpointsRequest(fixture.Source, []int{8})\n\t\tExpectNoDebugError(\"setBreakpoints\")\n\t\tclient.SetFunctionBreakpointsRequest(nil)\n\t\tExpectNoDebugError(\"setFunctionBreakpoints\")\n\t\tclient.PauseRequest(1)\n\t\tExpectNoDebugError(\"pause\")\n\t\tclient.RestartRequest(nil)\n\t\tclient.ExpectUnsupportedCommandErrorResponse(t)\n\n\t\t// Disconnect request is ok\n\t\tclient.DisconnectRequestWithKillOption(true)\n\t\tterminated, disconnectResp := false, false\n\t\tfor {\n\t\t\tm, err := client.ReadMessage(t)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tswitch m := m.(type) {\n\t\t\tcase *dap.OutputEvent:\n\t\t\t\tok := false\n\t\t\t\twants := []string{`Terminating process [0-9]+\\n`, fmt.Sprintf(daptest.ProcessExited, \"(-1|1)\")}\n\t\t\t\tfor _, want := range wants {\n\t\t\t\t\tif matched, _ := regexp.MatchString(want, m.Body.Output); matched {\n\t\t\t\t\t\tok = true\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif !ok {\n\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Output=%q\\n\", m, wants)\n\t\t\t\t}\n\t\t\tcase *dap.TerminatedEvent:\n\t\t\t\tterminated = true\n\t\t\tcase *dap.DisconnectResponse:\n\t\t\t\tdisconnectResp = true\n\t\t\tdefault:\n\t\t\t\tt.Errorf(\"got unexpected message %#v\", m)\n\t\t\t}\n\t\t}\n\t\tif !terminated {\n\t\t\tt.Errorf(\"did not get TerminatedEvent\")\n\t\t}\n\t\tif !disconnectResp {\n\t\t\tt.Errorf(\"did not get DisconnectResponse\")\n\t\t}\n\t})\n}\n\nfunc TestLaunchRequestWithRelativeBuildPath(t *testing.T) {\n\tserverStopped := make(chan struct{})\n\tclient := startDAPServerWithClient(t, false, serverStopped)\n\tdefer client.Close()\n\n\tfixdir := protest.FindFixturesDir()\n\tif filepath.IsAbs(fixdir) {\n\t\tt.Fatal(\"this test requires relative program path\")\n\t}\n\tprogram := filepath.Join(protest.FindFixturesDir(), \"buildtest\")\n\n\t// Use different working dir for target than dlv.\n\t// Program path will be interpreted relative to dlv's.\n\tdlvwd, _ := os.Getwd()\n\trunDebugSession(t, client, \"launch\", func() {\n\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\"mode\": \"debug\", \"program\": program, \"cwd\": filepath.Dir(dlvwd),\n\t\t})\n\t})\n\t<-serverStopped\n}\n\nfunc TestLaunchRequestWithRelativeExecPath(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tsymlink := \"./__thisexe\"\n\t\terr := os.Symlink(fixture.Path, symlink)\n\t\tif err != nil {\n\t\t\tif runtime.GOOS == \"windows\" {\n\t\t\t\tt.Skip(\"this test requires symlinks to be enabled and allowed\")\n\t\t\t} else {\n\t\t\t\tt.Fatal(\"unable to create relative symlink:\", err)\n\t\t\t}\n\t\t}\n\t\tdefer os.Remove(symlink)\n\t\trunDebugSession(t, client, \"launch\", func() {\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\"mode\": \"exec\", \"program\": symlink,\n\t\t\t})\n\t\t})\n\t})\n}\n\nfunc TestLaunchTestRequest(t *testing.T) {\n\torgWD, _ := os.Getwd()\n\tfixtures := protest.FindFixturesDir() // relative to current working directory.\n\tabsoluteFixturesDir, _ := filepath.Abs(fixtures)\n\tabsolutePkgDir, _ := filepath.Abs(filepath.Join(fixtures, \"buildtest\"))\n\ttestFile := filepath.Join(absolutePkgDir, \"main_test.go\")\n\n\tfor _, tc := range []struct {\n\t\tname       string\n\t\tdlvWD      string\n\t\tlaunchArgs map[string]any\n\t\twantWD     string\n\t}{{\n\t\tname: \"default\",\n\t\tlaunchArgs: map[string]any{\n\t\t\t\"mode\": \"test\", \"program\": absolutePkgDir,\n\t\t},\n\t\twantWD: absolutePkgDir,\n\t}, {\n\t\tname: \"output\",\n\t\tlaunchArgs: map[string]any{\n\t\t\t\"mode\": \"test\", \"program\": absolutePkgDir, \"output\": \"test.out\",\n\t\t},\n\t\twantWD: absolutePkgDir,\n\t}, {\n\t\tname: \"dlvCwd\",\n\t\tlaunchArgs: map[string]any{\n\t\t\t\"mode\": \"test\", \"program\": absolutePkgDir, \"dlvCwd\": \".\",\n\t\t},\n\t\twantWD: absolutePkgDir,\n\t}, {\n\t\tname: \"dlvCwd2\",\n\t\tlaunchArgs: map[string]any{\n\t\t\t\"mode\": \"test\", \"program\": \".\", \"dlvCwd\": absolutePkgDir,\n\t\t},\n\t\twantWD: absolutePkgDir,\n\t}, {\n\t\tname: \"cwd\",\n\t\tlaunchArgs: map[string]any{\n\t\t\t\"mode\": \"test\", \"program\": absolutePkgDir, \"cwd\": fixtures, // fixtures is relative to the current working directory.\n\t\t},\n\t\twantWD: absoluteFixturesDir,\n\t}, {\n\t\tname:  \"dlv runs outside of module\",\n\t\tdlvWD: os.TempDir(),\n\t\tlaunchArgs: map[string]any{\n\t\t\t\"mode\": \"test\", \"program\": absolutePkgDir, \"dlvCwd\": absoluteFixturesDir,\n\t\t},\n\t\twantWD: absolutePkgDir,\n\t}, {\n\t\tname:  \"dlv builds in dlvCwd but runs in cwd\",\n\t\tdlvWD: fixtures,\n\t\tlaunchArgs: map[string]any{\n\t\t\t\"mode\": \"test\", \"program\": absolutePkgDir, \"dlvCwd\": absolutePkgDir, \"cwd\": \"..\", // relative to dlvCwd.\n\t\t},\n\t\twantWD: absoluteFixturesDir,\n\t}} {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\t// Some test cases with dlvCwd or dlvWD change process working directory.\n\t\t\tdefer os.Chdir(orgWD)\n\t\t\tif tc.dlvWD != \"\" {\n\t\t\t\tos.Chdir(tc.dlvWD)\n\t\t\t\tdefer os.Chdir(orgWD)\n\t\t\t}\n\t\t\tserverStopped := make(chan struct{})\n\t\t\tclient := startDAPServerWithClient(t, false, serverStopped)\n\t\t\tdefer client.Close()\n\n\t\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t\tfunc() { // Launch\n\t\t\t\t\tclient.LaunchRequestWithArgs(tc.launchArgs)\n\t\t\t\t},\n\t\t\t\ttestFile, []int{14},\n\t\t\t\t[]onBreakpoint{{\n\t\t\t\t\texecute: func() {\n\t\t\t\t\t\tcheckStop(t, client, -1, \"buildtest.TestCurrentDirectory\", 14)\n\t\t\t\t\t\tclient.VariablesRequest(1001) // Locals\n\t\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tcheckChildren(t, locals, \"Locals\", 1)\n\t\t\t\t\t\tfor i := range locals.Body.Variables {\n\t\t\t\t\t\t\tswitch locals.Body.Variables[i].Name {\n\t\t\t\t\t\t\tcase \"wd\": // The test's working directory is the package directory by default.\n\t\t\t\t\t\t\t\tcheckVarExact(t, locals, i, \"wd\", \"wd\", fmt.Sprintf(\"%q\", tc.wantWD), \"string\", noChildren)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}})\n\n\t\t\t<-serverStopped\n\t\t})\n\t}\n}\n\n// Tests that 'args' from LaunchRequest are parsed and passed to the target\n// program. The target program exits without an error on success, and\n// panics on error, causing an unexpected StoppedEvent instead of\n// Terminated Event.\nfunc TestLaunchRequestWithArgs(t *testing.T) {\n\trunTest(t, \"testargs\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSession(t, client, \"launch\", func() {\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path,\n\t\t\t\t\"args\": []string{\"test\", \"pass flag\"},\n\t\t\t})\n\t\t})\n\t})\n}\n\n// Tests that 'buildFlags' from LaunchRequest are parsed and passed to the\n// compiler. The target program exits without an error on success, and\n// panics on error, causing an unexpected StoppedEvent instead of\n// TerminatedEvent.\nfunc TestLaunchRequestWithBuildFlags(t *testing.T) {\n\trunTest(t, \"buildflagtest\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSession(t, client, \"launch\", func() {\n\t\t\t// We reuse the harness that builds, but ignore the built binary,\n\t\t\t// only relying on the source to be built in response to LaunchRequest.\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\"mode\": \"debug\", \"program\": fixture.Source,\n\t\t\t\t\"buildFlags\": \"-ldflags '-X main.Hello=World'\",\n\t\t\t})\n\t\t})\n\t})\n}\n\nfunc TestLaunchRequestWithBuildFlags2(t *testing.T) {\n\trunTest(t, \"buildflagtest\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSession(t, client, \"launch\", func() {\n\t\t\t// We reuse the harness that builds, but ignore the built binary,\n\t\t\t// only relying on the source to be built in response to LaunchRequest.\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\"mode\": \"debug\", \"program\": fixture.Source,\n\t\t\t\t\"buildFlags\": []string{\"-ldflags\", \"-X main.Hello=World\"},\n\t\t\t})\n\t\t})\n\t})\n}\n\nfunc TestLaunchRequestWithEnv(t *testing.T) {\n\t// testenv fixture will lookup SOMEVAR with\n\t//   x, y := os.Lookup(\"SOMEVAR\")\n\t// before stopping at runtime.Breakpoint.\n\n\ttype envMap map[string]*string\n\tstrVar := func(s string) *string { return &s }\n\n\tfixtures := protest.FindFixturesDir() // relative to current working directory.\n\ttestFile, _ := filepath.Abs(filepath.Join(fixtures, \"testenv.go\"))\n\tfor _, tc := range []struct {\n\t\tname      string\n\t\tinitEnv   envMap\n\t\tlaunchEnv envMap\n\t\twantX     string\n\t\twantY     bool\n\t}{\n\t\t{\n\t\t\tname:    \"no env\",\n\t\t\tinitEnv: envMap{\"SOMEVAR\": strVar(\"baz\")},\n\t\t\twantX:   \"baz\",\n\t\t\twantY:   true,\n\t\t},\n\t\t{\n\t\t\tname:      \"overwrite\",\n\t\t\tinitEnv:   envMap{\"SOMEVAR\": strVar(\"baz\")},\n\t\t\tlaunchEnv: envMap{\"SOMEVAR\": strVar(\"bar\")},\n\t\t\twantX:     \"bar\",\n\t\t\twantY:     true,\n\t\t},\n\t\t{\n\t\t\tname:      \"unset\",\n\t\t\tinitEnv:   envMap{\"SOMEVAR\": strVar(\"baz\")},\n\t\t\tlaunchEnv: envMap{\"SOMEVAR\": nil},\n\t\t\twantX:     \"\",\n\t\t\twantY:     false,\n\t\t},\n\t\t{\n\t\t\tname:      \"empty value\",\n\t\t\tinitEnv:   envMap{\"SOMEVAR\": strVar(\"baz\")},\n\t\t\tlaunchEnv: envMap{\"SOMEVAR\": strVar(\"\")},\n\t\t\twantX:     \"\",\n\t\t\twantY:     true,\n\t\t},\n\t\t{\n\t\t\tname:      \"set\",\n\t\t\tlaunchEnv: envMap{\"SOMEVAR\": strVar(\"foo\")},\n\t\t\twantX:     \"foo\",\n\t\t\twantY:     true,\n\t\t},\n\t\t{\n\t\t\tname:      \"untouched\",\n\t\t\tinitEnv:   envMap{\"SOMEVAR\": strVar(\"baz\")},\n\t\t\tlaunchEnv: envMap{\"SOMEVAR2\": nil, \"SOMEVAR3\": strVar(\"foo\")},\n\t\t\twantX:     \"baz\",\n\t\t\twantY:     true,\n\t\t},\n\t} {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tfor k, v := range tc.initEnv {\n\t\t\t\tif v != nil {\n\t\t\t\t\tt.Setenv(k, *v)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tserverStopped := make(chan struct{})\n\t\t\tclient := startDAPServerWithClient(t, false, serverStopped)\n\t\t\tdefer client.Close()\n\n\t\t\trunDebugSessionWithBPs(t, client, \"launch\", func() { // launch\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\":    \"debug\",\n\t\t\t\t\t\"program\": testFile,\n\t\t\t\t\t\"env\":     tc.launchEnv,\n\t\t\t\t})\n\t\t\t}, testFile, nil, // runtime.Breakpoint\n\t\t\t\t[]onBreakpoint{{\n\t\t\t\t\texecute: func() {\n\t\t\t\t\t\tclient.EvaluateRequest(\"x\", 1000, \"whatever\")\n\t\t\t\t\t\tgotX := client.ExpectEvaluateResponse(t)\n\t\t\t\t\t\tcheckEval(t, gotX, fmt.Sprintf(\"%q\", tc.wantX), false)\n\t\t\t\t\t\tclient.EvaluateRequest(\"y\", 1000, \"whatever\")\n\t\t\t\t\t\tgotY := client.ExpectEvaluateResponse(t)\n\t\t\t\t\t\tcheckEval(t, gotY, fmt.Sprintf(\"%v\", tc.wantY), false)\n\t\t\t\t\t},\n\t\t\t\t\tdisconnect: true,\n\t\t\t\t}})\n\t\t\t<-serverStopped\n\t\t})\n\t}\n}\n\nfunc TestAttachRequest(t *testing.T) {\n\tif runtime.GOOS == \"windows\" {\n\t\tt.Skip(\"test skipped on Windows, see https://delve.teamcity.com/project/Delve_windows for details\")\n\t}\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// Start the program to attach to\n\t\tcmd := execFixture(t, fixture)\n\n\t\trunDebugSessionWithBPs(t, client, \"attach\",\n\t\t\t// Attach\n\t\t\tfunc() {\n\t\t\t\tclient.AttachRequest(map[string]any{\n\t\t\t\t\t/*\"mode\": \"local\" by default*/ \"processId\": cmd.Process.Pid, \"stopOnEntry\": false,\n\t\t\t\t})\n\t\t\t\tclient.ExpectCapabilitiesEventSupportTerminateDebuggee(t)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{8},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 8\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\t\t\t\t\tcheckChildren(t, locals, \"Locals\", 1)\n\t\t\t\t\tcheckVarRegex(t, locals, 0, \"i\", \"i\", \"[0-9]+\", \"int\", noChildren)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestAttachWaitForRequest(t *testing.T) {\n\tif runtime.GOOS == \"freebsd\" {\n\t\t// The value of /proc/[pid]/cmdline might be wrong on FreeBSD: zero or the same as the parent process.\n\t\tt.Skip(\"test skipped on freebsd\")\n\t}\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tcmd := exec.Command(fixture.Path)\n\t\tstdout, err := cmd.StdoutPipe()\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tcmd.Stderr = os.Stderr\n\t\tif err := cmd.Start(); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\t// Wait for output.\n\t\t// This will give the target process time to initialize the runtime before we attach,\n\t\t// so we can rely on having goroutines when they are requested on attach.\n\t\tscanOut := bufio.NewScanner(stdout)\n\t\tscanOut.Scan()\n\t\tif scanOut.Text() != \"past main\" {\n\t\t\tt.Errorf(\"expected loopprog.go to output \\\"past main\\\"\")\n\t\t}\n\n\t\tt.Logf(\"The process id of program %q is %d\", cmd.Path, cmd.Process.Pid)\n\n\t\tclient.InitializeRequest()\n\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\t\tclient.AttachRequest(map[string]any{\n\t\t\t\"mode\":        \"local\",\n\t\t\t\"waitFor\":     fixture.Path,\n\t\t\t\"stopOnEntry\": true,\n\t\t})\n\t\tclient.ExpectCapabilitiesEventSupportTerminateDebuggee(t)\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectAttachResponse(t)\n\t\tclient.DisconnectRequestWithKillOption(true)\n\t\tclient.ExpectOutputEvent(t)\n\t\tclient.ExpectDisconnectResponse(t)\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\truntime.KeepAlive(stdout)\n\t})\n}\n\n// Since we are in async mode while running, we might receive thee messages after pause request\n// in either order.\nfunc expectPauseResponseAndStoppedEvent(t *testing.T, client *daptest.Client) {\n\tt.Helper()\n\tfor range 2 {\n\t\tmsg := client.ExpectMessage(t)\n\t\tswitch m := msg.(type) {\n\t\tcase *dap.StoppedEvent:\n\t\t\tif m.Body.Reason != \"pause\" || m.Body.ThreadId != 0 && m.Body.ThreadId != 1 {\n\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant ThreadId=0/1 Reason='pause'\", m)\n\t\t\t}\n\t\tcase *dap.PauseResponse:\n\t\tdefault:\n\t\t\tt.Fatalf(\"got %#v, want StoppedEvent or PauseResponse\", m)\n\t\t}\n\t}\n}\n\nfunc TestPauseAndContinue(t *testing.T) {\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{6},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tclient.CheckStopLocation(t, 1, \"main.loop\", 6)\n\n\t\t\t\t\t// Continue resumes all goroutines, so thread id is ignored\n\t\t\t\t\tclient.ContinueRequest(12345)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\n\t\t\t\t\ttime.Sleep(time.Second)\n\n\t\t\t\t\t// Halt pauses all goroutines, so thread id is ignored\n\t\t\t\t\tclient.PauseRequest(56789)\n\t\t\t\t\texpectPauseResponseAndStoppedEvent(t, client)\n\n\t\t\t\t\t// Pause will be a no-op at a pause: there will be no additional stopped events\n\t\t\t\t\tclient.PauseRequest(1)\n\t\t\t\t\tclient.ExpectPauseResponse(t)\n\t\t\t\t},\n\t\t\t\t// The program has an infinite loop, so we must kill it by disconnecting.\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestRestartRequest(t *testing.T) {\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{16}, // Set breakpoint at main.main\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16)\n\n\t\t\t\t\tclient.RestartRequest(map[string]any{\n\t\t\t\t\t\t\"arguments\": map[string]any{\n\t\t\t\t\t\t\t\"request\":     \"launch\",\n\t\t\t\t\t\t\t\"mode\":        \"exec\",\n\t\t\t\t\t\t\t\"program\":     fixture.Path,\n\t\t\t\t\t\t\t\"stopOnEntry\": false,\n\t\t\t\t\t\t\t\"rebuild\":     false,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tclient.ExpectRestartResponse(t)\n\n\t\t\t\t\tclient.ExpectInitializedEvent(t)\n\n\t\t\t\t\tclient.ConfigurationDoneRequest()\n\t\t\t\t\tclient.ExpectConfigurationDoneResponse(t)\n\n\t\t\t\t\t// Ensure breakpoints are preserved\n\t\t\t\t\t// Now we should hit the breakpoint again at main.main\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestRestartRequestRebuild(t *testing.T) {\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"debug\", \"program\": fixture.Source,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{16}, // Set breakpoint at main.main\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16)\n\n\t\t\t\t\tclient.RestartRequest(map[string]any{\n\t\t\t\t\t\t\"arguments\": map[string]any{\n\t\t\t\t\t\t\t\"request\":     \"launch\",\n\t\t\t\t\t\t\t\"mode\":        \"debug\",\n\t\t\t\t\t\t\t\"program\":     fixture.Source,\n\t\t\t\t\t\t\t\"stopOnEntry\": false,\n\t\t\t\t\t\t\t// \"rebuild\":     true, omitted as it should default to true\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tclient.ExpectRestartResponse(t)\n\n\t\t\t\t\tclient.ExpectInitializedEvent(t)\n\n\t\t\t\t\tclient.ConfigurationDoneRequest()\n\t\t\t\t\tclient.ExpectConfigurationDoneResponse(t)\n\n\t\t\t\t\t// Ensure breakpoints are preserved\n\t\t\t\t\t// Now we should hit the breakpoint again at main.main\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 16)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestRestartRequestRebuildFail(t *testing.T) {\n\tconst modifiedSource = `package main\n\nimport \"math\"\n\nvar f = 1.5\n\nfunc main() {\n\tfloatvar1 := math.Floor(f)\n\tfloatvar2 := float64(int(f))\n\t_ = floatvar1\n\t_ = floatvar2\n\tthe syntax error btw\n}\n`\n\trunTest(t, \"testRestartRequestRebuildFailFixture\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"debug\", \"program\": fixture.Source,\n\t\t\t\t})\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{7}, // Set breakpoint at main.main\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 7)\n\n\t\t\t\t\tfi, _ := os.Stat(fixture.Source)\n\n\t\t\t\t\toriginalSource, err := os.ReadFile(fixture.Source)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Fatalf(\"could not read original source: %v\", err)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ensure we write the original source code back after the test exits.\n\t\t\t\t\tdefer os.WriteFile(fixture.Source, originalSource, fi.Mode())\n\n\t\t\t\t\terr = os.WriteFile(fixture.Source, []byte(modifiedSource), fi.Mode())\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tt.Fatalf(\"could not modify source: %v\", err)\n\t\t\t\t\t}\n\n\t\t\t\t\tclient.RestartRequest(map[string]any{\n\t\t\t\t\t\t\"arguments\": map[string]any{\n\t\t\t\t\t\t\t\"request\":     \"launch\",\n\t\t\t\t\t\t\t\"mode\":        \"debug\",\n\t\t\t\t\t\t\t\"program\":     fixture.Source,\n\t\t\t\t\t\t\t\"stopOnEntry\": false,\n\t\t\t\t\t\t\t// \"rebuild\":     true, omitted as it should default to true\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tclient.ExpectRestartResponse(t)\n\t\t\t\t\tclient.ExpectErrorResponse(t)\n\t\t\t\t\tclient.ExpectTerminatedEvent(t)\n\t\t\t\t},\n\t\t\t\tdisconnect: false,\n\t\t\t}})\n\t})\n}\n\n// TestRestartRequestWithNewArgs tests that the restart request can accept new program arguments.\nfunc TestRestartRequestWithNewArgs(t *testing.T) {\n\trunTest(t, \"testargs\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\":        \"exec\",\n\t\t\t\t\t\"program\":     fixture.Path,\n\t\t\t\t\t\"stopOnEntry\": false,\n\t\t\t\t\t\"args\":        []string{\"test\"},\n\t\t\t\t})\n\t\t\t},\n\t\t\tfixture.Source, []int{11},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 11)\n\n\t\t\t\t\tclient.EvaluateRequest(\"os.Args\", 1000, \"repl\")\n\t\t\t\t\tevalResp := client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEvalRegex(t, evalResp, `\\[\\]string len: 2, cap: 2, \\[\".*testargs.*\",\"test\"\\]`, hasChildren)\n\n\t\t\t\t\tclient.RestartRequest(map[string]any{\n\t\t\t\t\t\t\"arguments\": map[string]any{\n\t\t\t\t\t\t\t\"request\":     \"launch\",\n\t\t\t\t\t\t\t\"mode\":        \"exec\",\n\t\t\t\t\t\t\t\"program\":     fixture.Path,\n\t\t\t\t\t\t\t\"stopOnEntry\": false,\n\t\t\t\t\t\t\t\"args\":        []string{\"test\", \"pass flag\"},\n\t\t\t\t\t\t\t\"rebuild\":     false,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\tclient.ExpectRestartResponse(t)\n\n\t\t\t\t\tclient.ExpectInitializedEvent(t)\n\n\t\t\t\t\tclient.ConfigurationDoneRequest()\n\t\t\t\t\tclient.ExpectConfigurationDoneResponse(t)\n\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 11)\n\n\t\t\t\t\tclient.EvaluateRequest(\"os.Args\", 1000, \"repl\")\n\t\t\t\t\tevalResp = client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEvalRegex(t, evalResp, `\\[\\]string len: 3, cap: ., \\[\".*testargs.*\",\"test\",\"pass flag\"\\]`, hasChildren)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\ntype helperForSetVariable struct {\n\tt *testing.T\n\tc *daptest.Client\n}\n\nfunc (h *helperForSetVariable) expectSetVariable(ref int, name, value string) {\n\th.t.Helper()\n\th.expectSetVariable0(ref, name, value, false)\n}\n\nfunc (h *helperForSetVariable) failSetVariable(ref int, name, value, wantErrInfo string) {\n\th.t.Helper()\n\th.failSetVariable0(ref, name, value, wantErrInfo, false)\n}\n\nfunc (h *helperForSetVariable) failSetVariableAndStop(ref int, name, value, wantErrInfo string) {\n\th.t.Helper()\n\th.failSetVariable0(ref, name, value, wantErrInfo, true)\n}\n\nfunc (h *helperForSetVariable) evaluate(expr, want string, hasRef bool) {\n\th.t.Helper()\n\th.c.EvaluateRequest(expr, 1000, \"whatever\")\n\tgot := h.c.ExpectEvaluateResponse(h.t)\n\tcheckEval(h.t, got, want, hasRef)\n}\n\nfunc (h *helperForSetVariable) evaluateRegex(expr, want string, hasRef bool) {\n\th.t.Helper()\n\th.c.EvaluateRequest(expr, 1000, \"whatever\")\n\tgot := h.c.ExpectEvaluateResponse(h.t)\n\tcheckEvalRegex(h.t, got, want, hasRef)\n}\n\nfunc (h *helperForSetVariable) expectSetVariable0(ref int, name, value string, wantStop bool) {\n\th.t.Helper()\n\n\th.c.SetVariableRequest(ref, name, value)\n\tif wantStop {\n\t\th.c.ExpectStoppedEvent(h.t)\n\t}\n\tif got, want := h.c.ExpectSetVariableResponse(h.t), value; got.Success != true || got.Body.Value != want {\n\t\th.t.Errorf(\"SetVariableRequest(%v, %v)=%#v, want {Success=true, Body.Value=%q\", name, value, got, want)\n\t}\n}\n\nfunc (h *helperForSetVariable) failSetVariable0(ref int, name, value, wantErrInfo string, wantStop bool) {\n\th.t.Helper()\n\n\th.c.SetVariableRequest(ref, name, value)\n\tif wantStop {\n\t\th.c.ExpectStoppedEvent(h.t)\n\t}\n\tresp := h.c.ExpectErrorResponse(h.t)\n\tif got := resp.Body.Error; !stringContainsCaseInsensitive(got.Format, wantErrInfo) {\n\t\th.t.Errorf(\"got %#v, want error string containing %v\", got, wantErrInfo)\n\t}\n}\n\nfunc (h *helperForSetVariable) variables(ref int) *dap.VariablesResponse {\n\th.t.Helper()\n\th.c.VariablesRequest(ref)\n\treturn h.c.ExpectVariablesResponse(h.t)\n}\n\n// TestSetVariable tests SetVariable features that do not need function call support.\nfunc TestSetVariable(t *testing.T) {\n\trunTest(t, \"testvariables\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"showGlobalVariables\": true,\n\t\t\t\t})\n\t\t\t},\n\t\t\tfixture.Source, []int{}, // breakpoints are set within the program.\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\ttester := &helperForSetVariable{t, client}\n\n\t\t\t\t\tcheckStop(t, client, 1, \"main.foobar\", []int{65, 66})\n\n\t\t\t\t\t// Local variables\n\t\t\t\t\tlocals := tester.variables(localsScope)\n\n\t\t\t\t\t// Args of foobar(baz string, bar FooBar)\n\t\t\t\t\tcheckVarExact(t, locals, 1, \"bar\", \"bar\", `main.FooBar {Baz: 10, Bur: \"lorem\"}`, \"main.FooBar\", hasChildren)\n\n\t\t\t\t\t// Nested field.\n\t\t\t\t\tbarRef := checkVarExact(t, locals, 1, \"bar\", \"bar\", `main.FooBar {Baz: 10, Bur: \"lorem\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\ttester.expectSetVariable(barRef, \"Baz\", \"42\")\n\t\t\t\t\ttester.evaluate(\"bar\", `main.FooBar {Baz: 42, Bur: \"lorem\"}`, hasChildren)\n\n\t\t\t\t\ttester.failSetVariable(barRef, \"Baz\", `\"string\"`, \"can not\")\n\n\t\t\t\t\t// int\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a2\", \"a2\", \"6\", \"int\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"a2\", \"42\")\n\t\t\t\t\ttester.evaluate(\"a2\", \"42\", noChildren)\n\n\t\t\t\t\ttester.failSetVariable(localsScope, \"a2\", \"false\", \"can not convert\")\n\n\t\t\t\t\t// float\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a3\", \"a3\", \"7.23\", \"float64\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"a3\", \"-0.1\")\n\t\t\t\t\ttester.evaluate(\"a3\", \"-0.1\", noChildren)\n\n\t\t\t\t\t// array of int\n\t\t\t\t\ta4Ref := checkVarExact(t, locals, -1, \"a4\", \"a4\", \"[2]int [1,2]\", \"[2]int\", hasChildren)\n\t\t\t\t\ttester.expectSetVariable(a4Ref, \"[1]\", \"-7\")\n\t\t\t\t\ttester.evaluate(\"a4\", \"[2]int [1,-7]\", hasChildren)\n\n\t\t\t\t\ttester.failSetVariable(localsScope, \"a4\", \"[2]int{3, 4}\", \"not implemented\")\n\n\t\t\t\t\t// slice of int\n\t\t\t\t\ta5Ref := checkVarExact(t, locals, -1, \"a5\", \"a5\", \"[]int len: 5, cap: 5, [1,2,3,4,5]\", \"[]int\", hasChildren)\n\t\t\t\t\ttester.expectSetVariable(a5Ref, \"[3]\", \"100\")\n\t\t\t\t\ttester.evaluate(\"a5\", \"[]int len: 5, cap: 5, [1,2,3,100,5]\", hasChildren)\n\n\t\t\t\t\t// composite literal and its nested fields.\n\t\t\t\t\ta7Ref := checkVarExact(t, locals, -1, \"a7\", \"a7\", `*main.FooBar {Baz: 5, Bur: \"strum\"}`, \"*main.FooBar\", hasChildren)\n\t\t\t\t\ta7Val := tester.variables(a7Ref)\n\t\t\t\t\ta7ValRef := checkVarExact(t, a7Val, -1, \"\", \"(*a7)\", `main.FooBar {Baz: 5, Bur: \"strum\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\ttester.expectSetVariable(a7ValRef, \"Baz\", \"7\")\n\t\t\t\t\ttester.evaluate(\"(*a7)\", `main.FooBar {Baz: 7, Bur: \"strum\"}`, hasChildren)\n\n\t\t\t\t\t// pointer\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a9\", \"a9\", `*main.FooBar nil`, \"*main.FooBar\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"a9\", \"&a6\")\n\t\t\t\t\ttester.evaluate(\"a9\", `*main.FooBar {Baz: 8, Bur: \"word\"}`, hasChildren)\n\n\t\t\t\t\t// slice of pointers\n\t\t\t\t\ta13Ref := checkVarExact(t, locals, -1, \"a13\", \"a13\", `[]*main.FooBar len: 3, cap: 3, [*{Baz: 6, Bur: \"f\"},*{Baz: 7, Bur: \"g\"},*{Baz: 8, Bur: \"h\"}]`, \"[]*main.FooBar\", hasChildren)\n\t\t\t\t\ta13 := tester.variables(a13Ref)\n\t\t\t\t\ta13c0Ref := checkVarExact(t, a13, -1, \"[0]\", \"a13[0]\", `*main.FooBar {Baz: 6, Bur: \"f\"}`, \"*main.FooBar\", hasChildren)\n\t\t\t\t\ta13c0 := tester.variables(a13c0Ref)\n\t\t\t\t\ta13c0valRef := checkVarExact(t, a13c0, -1, \"\", \"(*a13[0])\", `main.FooBar {Baz: 6, Bur: \"f\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\ttester.expectSetVariable(a13c0valRef, \"Baz\", \"777\")\n\t\t\t\t\ttester.evaluate(\"a13[0]\", `*main.FooBar {Baz: 777, Bur: \"f\"}`, hasChildren)\n\n\t\t\t\t\t// complex\n\t\t\t\t\ttester.evaluate(\"c64\", `(1 + 2i)`, hasChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"c64\", \"(2 + 3i)\")\n\t\t\t\t\ttester.evaluate(\"c64\", `(2 + 3i)`, hasChildren)\n\t\t\t\t\t// note: complex's real, imaginary part can't be directly mutable.\n\n\t\t\t\t\t//\n\t\t\t\t\t// Global variables\n\t\t\t\t\t//    p1 = 10\n\t\t\t\t\tclient.VariablesRequest(globalsScope)\n\t\t\t\t\tglobals := client.ExpectVariablesResponse(t)\n\n\t\t\t\t\tcheckVarExact(t, globals, -1, \"p1\", \"main.p1\", \"10\", \"int\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(globalsScope, \"p1\", \"-10\")\n\t\t\t\t\ttester.evaluate(\"p1\", \"-10\", noChildren)\n\t\t\t\t\ttester.failSetVariable(globalsScope, \"p1\", \"0.1\", \"can not convert\")\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n\n\trunTest(t, \"testvariables2\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"showGlobalVariables\": true,\n\t\t\t\t})\n\t\t\t},\n\t\t\tfixture.Source, []int{}, // breakpoints are set within the program.\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\ttester := &helperForSetVariable{t, client}\n\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", -1)\n\t\t\t\t\tlocals := tester.variables(localsScope)\n\n\t\t\t\t\t// channel\n\t\t\t\t\ttester.evaluate(\"chnil\", \"chan int nil\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"chnil\", \"ch1\")\n\t\t\t\t\ttester.evaluate(\"chnil\", \"chan int 4/11\", hasChildren)\n\n\t\t\t\t\t// func\n\t\t\t\t\ttester.evaluate(\"fn2\", \"nil\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"fn2\", \"fn1\")\n\t\t\t\t\ttester.evaluate(\"fn2\", \"main.afunc\", noChildren)\n\n\t\t\t\t\t// interface\n\t\t\t\t\ttester.evaluate(\"ifacenil\", \"interface {} nil\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"ifacenil\", \"iface1\")\n\t\t\t\t\ttester.evaluate(\"ifacenil\", \"interface {}(*main.astruct) *{A: 1, B: 2}\", hasChildren)\n\n\t\t\t\t\t// interface.(data)\n\t\t\t\t\tiface1Ref := checkVarExact(t, locals, -1, \"iface1\", \"iface1\", \"interface {}(*main.astruct) *{A: 1, B: 2}\", \"interface {}(*main.astruct)\", hasChildren)\n\t\t\t\t\tiface1 := tester.variables(iface1Ref)\n\t\t\t\t\tiface1DataRef := checkVarExact(t, iface1, -1, \"data\", \"iface1.(data)\", \"*main.astruct {A: 1, B: 2}\", \"*main.astruct\", hasChildren)\n\t\t\t\t\tiface1Data := tester.variables(iface1DataRef)\n\t\t\t\t\tiface1DataValueRef := checkVarExact(t, iface1Data, -1, \"\", \"(*iface1.(data))\", \"main.astruct {A: 1, B: 2}\", \"main.astruct\", hasChildren)\n\t\t\t\t\ttester.expectSetVariable(iface1DataValueRef, \"A\", \"2021\")\n\t\t\t\t\ttester.evaluate(\"iface1\", \"interface {}(*main.astruct) *{A: 2021, B: 2}\", hasChildren)\n\n\t\t\t\t\t// map: string -> struct\n\t\t\t\t\ttester.evaluate(`m1[\"Malone\"]`, \"main.astruct {A: 2, B: 3}\", hasChildren)\n\t\t\t\t\tm1Ref := checkVarRegex(t, locals, -1, \"m1\", \"m1\", `.*map\\[string\\]main\\.astruct.*`, `map\\[string\\]main\\.astruct`, hasChildren)\n\t\t\t\t\tm1 := tester.variables(m1Ref)\n\t\t\t\t\telem1 := m1.Body.Variables[1]\n\t\t\t\t\ttester.expectSetVariable(elem1.VariablesReference, \"A\", \"-9999\")\n\t\t\t\t\ttester.expectSetVariable(elem1.VariablesReference, \"B\", \"10000\")\n\t\t\t\t\ttester.evaluate(elem1.EvaluateName, \"main.astruct {A: -9999, B: 10000}\", hasChildren)\n\n\t\t\t\t\t// map: struct -> int\n\t\t\t\t\tm3Ref := checkVarExact(t, locals, -1, \"m3\", \"m3\", \"map[main.astruct]int [{A: 1, B: 1}: 42, {A: 2, B: 2}: 43, ]\", \"map[main.astruct]int\", hasChildren)\n\t\t\t\t\ttester.expectSetVariable(m3Ref, \"main.astruct {A: 1, B: 1}\", \"8888\")\n\t\t\t\t\t// note: updating keys is possible, but let's not promise anything.\n\t\t\t\t\ttester.evaluateRegex(\"m3\", `.*\\[\\{A: 1, B: 1\\}: 8888,.*`, hasChildren)\n\n\t\t\t\t\t// map: struct -> struct\n\t\t\t\t\tm4Ref := checkVarRegex(t, locals, -1, \"m4\", \"m4\", `map\\[main\\.astruct]main\\.astruct.*\\[\\{A: 1, B: 1\\}: \\{A: 11, B: 11\\}.*`, `map\\[main\\.astruct\\]main\\.astruct`, hasChildren)\n\t\t\t\t\tm4 := tester.variables(m4Ref)\n\t\t\t\t\tm4Val1Ref := checkVarRegex(t, m4, -1, \"[val 0]\", `.*0x[0-9a-f]+.*`, `main.astruct.*`, `main\\.astruct`, hasChildren)\n\t\t\t\t\ttester.expectSetVariable(m4Val1Ref, \"A\", \"-9999\")\n\t\t\t\t\ttester.evaluateRegex(\"m4\", `.*A: -9999,.*`, hasChildren)\n\n\t\t\t\t\t// unsigned pointer\n\t\t\t\t\tcheckVarRegex(t, locals, -1, \"up1\", \"up1\", `unsafe\\.Pointer\\(0x[0-9a-f]+\\)`, \"unsafe.Pointer\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"up1\", \"unsafe.Pointer(0x0)\")\n\t\t\t\t\ttester.evaluate(\"up1\", \"unsafe.Pointer(0x0)\", noChildren)\n\n\t\t\t\t\t// val := A{val: 1}\n\t\t\t\t\tvalRef := checkVarExact(t, locals, -1, \"val\", \"val\", `main.A {val: 1}`, \"main.A\", hasChildren)\n\t\t\t\t\ttester.expectSetVariable(valRef, \"val\", \"3\")\n\t\t\t\t\ttester.evaluate(\"val\", `main.A {val: 3}`, hasChildren)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\n// TestSetVariableWithCall tests SetVariable features that do not depend on function calls support.\nfunc TestSetVariableWithCall(t *testing.T) {\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\n\trunTest(t, \"testvariables\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"showGlobalVariables\": true,\n\t\t\t\t})\n\t\t\t},\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\ttester := &helperForSetVariable{t, client}\n\n\t\t\t\t\tcheckStop(t, client, 1, \"main.foobar\", []int{65, 66})\n\n\t\t\t\t\t// Local variables\n\t\t\t\t\tlocals := tester.variables(localsScope)\n\n\t\t\t\t\t// Args of foobar(baz string, bar FooBar)\n\t\t\t\t\tcheckVarExact(t, locals, 0, \"baz\", \"baz\", `\"bazburzum\"`, \"string\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"baz\", `\"BazBurZum\"`)\n\t\t\t\t\ttester.evaluate(\"baz\", `\"BazBurZum\"`, noChildren)\n\n\t\t\t\t\tbarRef := checkVarExact(t, locals, 1, \"bar\", \"bar\", `main.FooBar {Baz: 10, Bur: \"lorem\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\ttester.expectSetVariable(barRef, \"Bur\", `\"ipsum\"`)\n\t\t\t\t\ttester.evaluate(\"bar\", `main.FooBar {Baz: 10, Bur: \"ipsum\"}`, hasChildren)\n\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a1\", \"a1\", `\"foofoofoofoofoofoo\"`, \"string\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"a1\", `\"barbarbar\"`)\n\t\t\t\t\ttester.evaluate(\"a1\", `\"barbarbar\"`, noChildren)\n\n\t\t\t\t\ta6Ref := checkVarExact(t, locals, -1, \"a6\", \"a6\", `main.FooBar {Baz: 8, Bur: \"word\"}`, \"main.FooBar\", hasChildren)\n\t\t\t\t\ttester.failSetVariable(a6Ref, \"Bur\", \"false\", \"can not convert\")\n\n\t\t\t\t\ttester.expectSetVariable(a6Ref, \"Bur\", `\"sentence\"`)\n\t\t\t\t\ttester.evaluate(\"a6\", `main.FooBar {Baz: 8, Bur: \"sentence\"}`, hasChildren)\n\n\t\t\t\t\t// stop inside main.barfoo\n\t\t\t\t\tclient.ContinueRequest(1)\n\t\t\t\t\tclient.ExpectContinueResponse(t)\n\t\t\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.barfoo\", -1)\n\n\t\t\t\t\t// Test: set string 'a1' in main.barfoo.\n\t\t\t\t\t// This shouldn't affect 'a1' in main.foobar - we will check that in the next breakpoint.\n\t\t\t\t\tlocals = tester.variables(localsScope)\n\t\t\t\t\tcheckVarExact(t, locals, -1, \"a1\", \"a1\", `\"bur\"`, \"string\", noChildren)\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"a1\", `\"fur\"`)\n\t\t\t\t\ttester.evaluate(\"a1\", `\"fur\"`, noChildren)\n\t\t\t\t\t// We will check a1 in main.foobar isn't affected from the next breakpoint.\n\n\t\t\t\t\tclient.StackTraceRequest(1, 1, 20)\n\t\t\t\t\tres := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tif len(res.Body.StackFrames) < 1 {\n\t\t\t\t\t\tt.Fatalf(\"stack trace response = %#v, wanted at least one stack frame\", res)\n\t\t\t\t\t}\n\t\t\t\t\touterFrame := res.Body.StackFrames[0].Id\n\t\t\t\t\tclient.EvaluateRequest(\"a1\", outerFrame, \"whatever_context\")\n\t\t\t\t\tevalRes := client.ExpectEvaluateResponse(t)\n\t\t\t\t\tcheckEval(t, evalRes, `\"barbarbar\"`, noChildren)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n\n\trunTest(t, \"fncall\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"showGlobalVariables\": true,\n\t\t\t\t})\n\t\t\t},\n\t\t\tfixture.Source, []int{}, // breakpoints are set within the program.\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at second breakpoint and set a1.\n\t\t\t\texecute: func() {\n\t\t\t\t\ttester := &helperForSetVariable{t, client}\n\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", -1)\n\n\t\t\t\t\t_ = tester.variables(localsScope)\n\n\t\t\t\t\t// successful variable set using a function call.\n\t\t\t\t\ttester.expectSetVariable(localsScope, \"str\", `callstacktrace()`)\n\t\t\t\t\ttester.evaluateRegex(\"str\", `.*in main.callstacktrace at.*`, noChildren)\n\n\t\t\t\t\ttester.failSetVariableAndStop(localsScope, \"str\", `callpanic()`, `callpanic panicked`)\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", -1)\n\n\t\t\t\t\t// breakpoint during a function call.\n\t\t\t\t\ttester.failSetVariableAndStop(localsScope, \"str\", `callbreak()`, \"call stopped\")\n\n\t\t\t\t\t// TODO(hyangah): continue after this causes runtime error while resuming\n\t\t\t\t\t// unfinished injected call.\n\t\t\t\t\t//   runtime error: can not convert %!s(<nil>) constant to string\n\t\t\t\t\t// This can be reproducible with dlv cli. (`call str = callbreak(); continue`)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}})\n\t})\n}\n\nfunc TestBadLaunchRequests(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tseqCnt := 1\n\t\tcheckFailedToLaunch := func(response *dap.ErrorResponse) {\n\t\t\tt.Helper()\n\t\t\tif response.RequestSeq != seqCnt {\n\t\t\t\tt.Errorf(\"RequestSeq got %d, want %d\", seqCnt, response.RequestSeq)\n\t\t\t}\n\t\t\tif response.Command != \"launch\" {\n\t\t\t\tt.Errorf(\"Command got %q, want \\\"launch\\\"\", response.Command)\n\t\t\t}\n\t\t\tif !strings.HasPrefix(response.Message, \"Failed to launch\") {\n\t\t\t\tt.Errorf(\"Message got %q, want \\\"Failed to launch\\\"\", response.Message)\n\t\t\t}\n\t\t\tif !checkErrorMessageId(response.Body.Error, FailedToLaunch) {\n\t\t\t\tt.Errorf(\"Id got %v, want Id=%d\", response.Body.Error, FailedToLaunch)\n\t\t\t}\n\t\t\tseqCnt++\n\t\t}\n\n\t\tcheckFailedToLaunchWithMessage := func(response *dap.ErrorResponse, errmsg string) {\n\t\t\tt.Helper()\n\t\t\tcheckFailedToLaunch(response)\n\t\t\tif !checkErrorMessageFormat(response.Body.Error, errmsg) {\n\t\t\t\tt.Errorf(\"\\ngot  %v\\nwant Format=%q\", response.Body.Error, errmsg)\n\t\t\t}\n\t\t}\n\n\t\tcheckFailedToLaunchWithMessageRe := func(response *dap.ErrorResponse, errmsgre string) {\n\t\t\tt.Helper()\n\t\t\tcheckFailedToLaunch(response)\n\t\t\tre := regexp.MustCompile(errmsgre)\n\t\t\tif !re.MatchString(response.Body.Error.Format) {\n\t\t\t\tt.Errorf(\"\\ngot  %v\\nwant Regexp=%q\", response.Body.Error, errmsgre)\n\t\t\t}\n\t\t}\n\n\t\t// Test for the DAP-specific detailed error message.\n\t\tclient.LaunchRequest(\"exec\", \"\", stopOnEntry)\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: The program attribute is missing in debug configuration.\")\n\n\t\t// Bad \"program\"\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": 12345})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot unmarshal number into \\\"program\\\" of type string\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": nil})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: The program attribute is missing in debug configuration.\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\"})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: The program attribute is missing in debug configuration.\")\n\n\t\t// Bad \"mode\"\n\t\tclient.LaunchRequest(\"remote\", fixture.Path, stopOnEntry)\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - unsupported 'mode' attribute \\\"remote\\\"\")\n\n\t\tclient.LaunchRequest(\"notamode\", fixture.Path, stopOnEntry)\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - unsupported 'mode' attribute \\\"notamode\\\"\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": 12345, \"program\": fixture.Path})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot unmarshal number into \\\"mode\\\" of type string\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"\"}) // empty mode defaults to \"debug\" (not an error)\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: The program attribute is missing in debug configuration.\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{}) // missing mode defaults to \"debug\" (not an error)\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: The program attribute is missing in debug configuration.\")\n\n\t\t// Bad \"args\"\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"exec\", \"program\": fixture.Path, \"args\": \"foobar\"})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot unmarshal string into \\\"args\\\" of type []string\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"exec\", \"program\": fixture.Path, \"args\": 12345})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot unmarshal number into \\\"args\\\" of type []string\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"exec\", \"program\": fixture.Path, \"args\": []int{1, 2}})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot unmarshal number into \\\"args\\\" of type string\")\n\n\t\t// Bad \"buildFlags\"\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"buildFlags\": 123})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot unmarshal number into \\\"buildFlags\\\" of type []string or string\")\n\n\t\t// Bad \"backend\"\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"backend\": 123})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot unmarshal number …\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"backend\": \"foo\"})\n\t\tclient.ExpectOutputEvent(t) // build message\n\t\tcheckFailedToLaunchWithMessageRe(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch .*: could not launch process: unknown backend \\\"foo\\\"\")\n\n\t\t// Bad \"substitutePath\"\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"substitutePath\": 123})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot unmarshal number into …\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"substitutePath\": []any{123}})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot use 123 as 'substitutePath' of type {\\\"from\\\":string, \\\"to\\\":string}\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"substitutePath\": []any{map[string]any{\"to\": \"path2\"}}})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - 'substitutePath' requires both 'from' and 'to' entries\")\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"substitutePath\": []any{map[string]any{\"from\": \"path1\", \"to\": 123}}})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot use {\\\"from\\\":\\\"path1\\\",\\\"to\\\":123} as 'substitutePath' of type {\\\"from\\\":string, \\\"to\\\":string}\")\n\t\t// Bad \"cwd\"\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"cwd\": 123})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: invalid debug configuration - cannot unmarshal number into \\\"cwd\\\" of type string\")\n\n\t\t// Skip detailed message checks for potentially different OS-specific errors.\n\t\tclient.LaunchRequest(\"exec\", fixture.Path+\"_does_not_exist\", stopOnEntry)\n\t\tcheckFailedToLaunch(client.ExpectVisibleErrorResponse(t)) // No such file or directory\n\n\t\tclient.LaunchRequest(\"debug\", fixture.Path+\"_does_not_exist\", stopOnEntry)\n\t\tclient.ExpectOutputEvent(t) // build message\n\t\toe := client.ExpectOutputEvent(t)\n\t\tif !strings.HasPrefix(oe.Body.Output, \"Build Error: \") || oe.Body.Category != \"stderr\" {\n\t\t\tt.Errorf(\"got %#v, want Category=\\\"stderr\\\" Output=\\\"Build Error: ...\\\"\", oe)\n\t\t}\n\t\tcheckFailedToLaunch(client.ExpectInvisibleErrorResponse(t))\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\"request\": \"launch\",\n\t\t\t/* mode: debug by default*/\n\t\t\t\"program\":     fixture.Path + \"_does_not_exist\",\n\t\t\t\"stopOnEntry\": stopOnEntry,\n\t\t})\n\t\tclient.ExpectOutputEvent(t) // build message\n\t\toe = client.ExpectOutputEvent(t)\n\t\tif !strings.HasPrefix(oe.Body.Output, \"Build Error: \") || oe.Body.Category != \"stderr\" {\n\t\t\tt.Errorf(\"got %#v, want Category=\\\"stderr\\\" Output=\\\"Build Error: ...\\\"\", oe)\n\t\t}\n\t\tcheckFailedToLaunch(client.ExpectInvisibleErrorResponse(t))\n\n\t\tclient.LaunchRequest(\"exec\", fixture.Source, stopOnEntry)\n\t\tcheckFailedToLaunch(client.ExpectVisibleErrorResponse(t)) // Not an executable\n\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"buildFlags\": \"-bad -flags\"})\n\t\tclient.ExpectOutputEvent(t) // build message\n\t\toe = client.ExpectOutputEvent(t)\n\t\tif !strings.HasPrefix(oe.Body.Output, \"Build Error: \") || oe.Body.Category != \"stderr\" {\n\t\t\tt.Errorf(\"got %#v, want Category=\\\"stderr\\\" Output=\\\"Build Error: ...\\\"\", oe)\n\t\t}\n\t\tcheckFailedToLaunchWithMessage(client.ExpectInvisibleErrorResponse(t), \"Failed to launch: Build error: Check the debug console for details.\")\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"noDebug\": true, \"buildFlags\": \"-bad -flags\"})\n\t\tclient.ExpectOutputEvent(t) // build message\n\t\toe = client.ExpectOutputEvent(t)\n\t\tif !strings.HasPrefix(oe.Body.Output, \"Build Error: \") || oe.Body.Category != \"stderr\" {\n\t\t\tt.Errorf(\"got %#v, want Category=\\\"stderr\\\" Output=\\\"Build Error: ...\\\"\", oe)\n\t\t}\n\t\tcheckFailedToLaunchWithMessage(client.ExpectInvisibleErrorResponse(t), \"Failed to launch: Build error: Check the debug console for details.\")\n\n\t\t// Bad \"cwd\"\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"noDebug\": false, \"cwd\": \"dir/invalid\"})\n\t\tclient.ExpectOutputEvent(t)                               // build message\n\t\tcheckFailedToLaunch(client.ExpectVisibleErrorResponse(t)) // invalid directory, the error message is system-dependent.\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"noDebug\": true, \"cwd\": \"dir/invalid\"})\n\t\tclient.ExpectOutputEvent(t)                               // build message\n\t\tcheckFailedToLaunch(client.ExpectVisibleErrorResponse(t)) // invalid directory, the error message is system-dependent.\n\n\t\t// Bad \"noDebug\"\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"debug\", \"program\": fixture.Source, \"noDebug\": \"true\"})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t), \"Failed to launch: invalid debug configuration - cannot unmarshal string into \\\"noDebug\\\" of type bool\")\n\n\t\t// Bad \"replay\" parameters\n\t\t// These errors come from dap layer\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"replay\", \"traceDirPath\": \"\"})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: The 'traceDirPath' attribute is missing in debug configuration.\")\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"replay\", \"program\": fixture.Source, \"traceDirPath\": \"\"})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: The 'traceDirPath' attribute is missing in debug configuration.\")\n\t\t// These errors come from debugger layer\n\t\tif _, err := exec.LookPath(\"rr\"); err != nil {\n\t\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"replay\", \"backend\": \"ignored\", \"traceDirPath\": \"..\"})\n\t\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\t\"Failed to launch: backend unavailable\")\n\t\t}\n\n\t\t// Bad \"core\" parameters\n\t\t// These errors come from dap layer\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"core\", \"coreFilePath\": \"\"})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: The program attribute is missing in debug configuration.\")\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"core\", \"program\": fixture.Source, \"coreFilePath\": \"\"})\n\t\tcheckFailedToLaunchWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch: The 'coreFilePath' attribute is missing in debug configuration.\")\n\t\t// These errors come from debugger layer\n\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": \"core\", \"backend\": \"ignored\", \"program\": fixture.Source, \"coreFilePath\": fixture.Source})\n\t\tcheckFailedToLaunchWithMessageRe(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to launch .*: unrecognized core format\")\n\n\t\t// We failed to launch the program. Make sure shutdown still works.\n\t\tclient.DisconnectRequest()\n\t\tdresp := client.ExpectDisconnectResponse(t)\n\t\tif dresp.RequestSeq != seqCnt {\n\t\t\tt.Errorf(\"got %#v, want RequestSeq=%d\", dresp, seqCnt)\n\t\t}\n\t})\n}\n\nfunc TestBadAttachRequest(t *testing.T) {\n\trunTest(t, \"loopprog\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tseqCnt := 1\n\t\tcheckFailedToAttach := func(response *dap.ErrorResponse) {\n\t\t\tt.Helper()\n\t\t\tif response.RequestSeq != seqCnt {\n\t\t\t\tt.Errorf(\"RequestSeq got %d, want %d\", seqCnt, response.RequestSeq)\n\t\t\t}\n\t\t\tif response.Command != \"attach\" {\n\t\t\t\tt.Errorf(\"Command got %q, want \\\"attach\\\"\", response.Command)\n\t\t\t}\n\t\t\tif response.Message != \"Failed to attach\" {\n\t\t\t\tt.Errorf(\"Message got %q, want \\\"Failed to attach\\\"\", response.Message)\n\t\t\t}\n\t\t\tif !checkErrorMessageId(response.Body.Error, FailedToAttach) {\n\t\t\t\tt.Errorf(\"Id got %v, want %d\", response.Body.Error, FailedToAttach)\n\t\t\t}\n\t\t\tseqCnt++\n\t\t}\n\n\t\tcheckFailedToAttachWithMessage := func(response *dap.ErrorResponse, errmsg string) {\n\t\t\tt.Helper()\n\t\t\tcheckFailedToAttach(response)\n\t\t\tif !checkErrorMessageFormat(response.Body.Error, errmsg) {\n\t\t\t\tt.Errorf(\"\\ngot  %v\\nwant Format=%q\", response.Body.Error, errmsg)\n\t\t\t}\n\t\t}\n\n\t\t// Bad \"mode\"\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"blah blah blah\"})\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: invalid debug configuration - unsupported 'mode' attribute \\\"blah blah blah\\\"\")\n\n\t\tclient.AttachRequest(map[string]any{\"mode\": 123})\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: invalid debug configuration - cannot unmarshal number into \\\"mode\\\" of type string\")\n\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"\"}) // empty mode defaults to \"local\" (not an error)\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: The 'processId' or 'waitFor' attribute is missing in debug configuration\")\n\n\t\tclient.AttachRequest(map[string]any{}) // no mode defaults to \"local\" (not an error)\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: The 'processId' or 'waitFor' attribute is missing in debug configuration\")\n\n\t\t// Bad \"processId\"\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"local\"})\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: The 'processId' or 'waitFor' attribute is missing in debug configuration\")\n\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"local\", \"processId\": nil})\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: The 'processId' or 'waitFor' attribute is missing in debug configuration\")\n\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"local\", \"processId\": 0})\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: The 'processId' or 'waitFor' attribute is missing in debug configuration\")\n\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"local\", \"processId\": 1, \"waitFor\": \"loopprog\"})\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: 'processId' and 'waitFor' are mutually exclusive, and can't be specified at the same time\")\n\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"local\", \"processId\": \"1\"})\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: invalid debug configuration - cannot unmarshal string into \\\"processId\\\" of type int\")\n\n\t\t// This will make debugger.(*Debugger) panic, which we will catch as an internal error.\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"local\", \"processId\": -1})\n\t\ter := client.ExpectInvisibleErrorResponse(t)\n\t\tif er.RequestSeq != seqCnt {\n\t\t\tt.Errorf(\"RequestSeq got %d, want %d\", seqCnt, er.RequestSeq)\n\t\t}\n\t\tseqCnt++\n\t\tif er.Command != \"\" {\n\t\t\tt.Errorf(\"Command got %q, want \\\"attach\\\"\", er.Command)\n\t\t}\n\t\tif !checkErrorMessageFormat(er.Body.Error, \"Internal Error: runtime error: index out of range [0] with length 0\") {\n\t\t\tt.Errorf(\"Message got %q, want \\\"Internal Error: runtime error: index out of range [0] with length 0\\\"\", er.Message)\n\t\t}\n\t\tif !checkErrorMessageId(er.Body.Error, InternalError) {\n\t\t\tt.Errorf(\"Id got %v, want Id=%d\", er.Body.Error, InternalError)\n\t\t}\n\n\t\t// Bad \"backend\"\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"local\", \"processId\": 1, \"backend\": 123})\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: invalid debug configuration - cannot unmarshal number into …\")\n\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"local\", \"processId\": 1, \"backend\": \"foo\"})\n\t\tcheckFailedToAttachWithMessage(client.ExpectVisibleErrorResponse(t),\n\t\t\t\"Failed to attach: could not attach to pid 1: unknown backend \\\"foo\\\"\")\n\n\t\t// We failed to attach to the program. Make sure shutdown still works.\n\t\tclient.DisconnectRequest()\n\t\tdresp := client.ExpectDisconnectResponse(t)\n\t\tif dresp.RequestSeq != seqCnt {\n\t\t\tt.Errorf(\"got %#v, want RequestSeq=%d\", dresp, seqCnt)\n\t\t}\n\t})\n}\n\nfunc launchDebuggerWithTargetRunning(t *testing.T, fixture string) (*protest.Fixture, *debugger.Debugger) {\n\tt.Helper()\n\tfixbin, dbg := launchDebuggerWithTargetHalted(t, fixture)\n\trunning := make(chan struct{})\n\tvar err error\n\tgo func() {\n\t\tt.Helper()\n\t\t_, err = dbg.Command(&api.DebuggerCommand{Name: api.Continue}, running, nil, nil)\n\t\tselect {\n\t\tcase <-running:\n\t\tdefault:\n\t\t\tclose(running)\n\t\t}\n\t}()\n\t<-running\n\tif err != nil {\n\t\tt.Fatal(\"failed to continue on launch\", err)\n\t}\n\treturn fixbin, dbg\n}\n\nfunc launchDebuggerWithTargetHalted(t *testing.T, fixture string) (*protest.Fixture, *debugger.Debugger) {\n\tt.Helper()\n\tfixbin := protest.BuildFixture(t, fixture, protest.AllNonOptimized)\n\tcfg := service.Config{\n\t\tProcessArgs: []string{fixbin.Path},\n\t\tDebugger:    debugger.Config{Backend: \"default\"},\n\t}\n\tdbg, err := debugger.New(&cfg.Debugger, cfg.ProcessArgs) // debugger halts process on entry\n\tif err != nil {\n\t\tt.Fatal(\"failed to start debugger:\", err)\n\t}\n\treturn &fixbin, dbg\n}\n\nfunc attachDebuggerWithTargetHalted(t *testing.T, fixture string) (*exec.Cmd, *debugger.Debugger) {\n\tt.Helper()\n\tfixbin := protest.BuildFixture(t, fixture, protest.AllNonOptimized)\n\tcmd := execFixture(t, fixbin)\n\tcfg := service.Config{Debugger: debugger.Config{Backend: \"default\", AttachPid: cmd.Process.Pid}}\n\tdbg, err := debugger.New(&cfg.Debugger, nil) // debugger halts process on entry\n\tif err != nil {\n\t\tt.Fatal(\"failed to start debugger:\", err)\n\t}\n\treturn cmd, dbg\n}\n\n// runTestWithDebugger starts the server and sets its debugger, initializes a debug session,\n// runs test, then disconnects. Expects no running async handler at the end of test() (either\n// process is halted or debug session never launched.)\nfunc runTestWithDebugger(t *testing.T, dbg *debugger.Debugger, test func(c *daptest.Client)) {\n\tserverStopped := make(chan struct{})\n\tserver, _ := startDAPServer(t, false, serverStopped)\n\tclient := daptest.NewClient(server.listener.Addr().String())\n\ttime.Sleep(100 * time.Millisecond) // Give time for connection to be set as dap.Session\n\tserver.sessionMu.Lock()\n\tif server.session == nil {\n\t\tt.Fatal(\"DAP session is not ready\")\n\t}\n\t// Mock dap.NewSession arguments, so\n\t// this dap.Server can be used as a proxy for\n\t// rpccommon.Server running dap.Session.\n\tserver.session.config.Debugger.AttachPid = dbg.AttachPid()\n\tserver.session.debugger = dbg\n\tserver.sessionMu.Unlock()\n\tdefer client.Close()\n\tclient.InitializeRequest()\n\tclient.ExpectInitializeResponseAndCapabilities(t)\n\n\ttest(client)\n\n\tclient.DisconnectRequest()\n\tif dbg.AttachPid() == 0 { // launched target\n\t\tclient.ExpectOutputEventDetachingKill(t)\n\t} else { // attached to target\n\t\tclient.ExpectOutputEventDetachingNoKill(t)\n\t}\n\tclient.ExpectDisconnectResponse(t)\n\tclient.ExpectTerminatedEvent(t)\n\n\t<-serverStopped\n}\n\nfunc TestAttachRemoteToDlvLaunchHaltedStopOnEntry(t *testing.T) {\n\t// Halted + stop on entry\n\t_, dbg := launchDebuggerWithTargetHalted(t, \"increment\")\n\trunTestWithDebugger(t, dbg, func(client *daptest.Client) {\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"remote\", \"stopOnEntry\": true})\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectAttachResponse(t)\n\t\tclient.ConfigurationDoneRequest()\n\t\tclient.ExpectStoppedEvent(t)\n\t\tclient.ExpectConfigurationDoneResponse(t)\n\t})\n}\n\nfunc TestAttachRemoteToDlvAttachHaltedStopOnEntry(t *testing.T) {\n\tcmd, dbg := attachDebuggerWithTargetHalted(t, \"http_server\")\n\trunTestWithDebugger(t, dbg, func(client *daptest.Client) {\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"remote\", \"stopOnEntry\": true})\n\t\tclient.ExpectCapabilitiesEventSupportTerminateDebuggee(t)\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectAttachResponse(t)\n\t\tclient.ConfigurationDoneRequest()\n\t\tclient.ExpectStoppedEvent(t)\n\t\tclient.ExpectConfigurationDoneResponse(t)\n\t})\n\tcmd.Process.Kill()\n}\n\nfunc TestAttachRemoteToHaltedTargetContinueOnEntry(t *testing.T) {\n\tif runtime.GOARCH == \"loong64\" {\n\t\tt.Skip(\"skipped on loong64: not passed\")\n\t}\n\n\t// Halted + continue on entry\n\t_, dbg := launchDebuggerWithTargetHalted(t, \"http_server\")\n\trunTestWithDebugger(t, dbg, func(client *daptest.Client) {\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"remote\", \"stopOnEntry\": false})\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectAttachResponse(t)\n\t\tclient.ConfigurationDoneRequest()\n\t\tclient.ExpectConfigurationDoneResponse(t)\n\t\t// Continuing\n\t\ttime.Sleep(time.Second)\n\t\t// Halt to make the disconnect sequence more predictable.\n\t\tclient.PauseRequest(1)\n\t\texpectPauseResponseAndStoppedEvent(t, client)\n\t})\n}\n\nfunc TestAttachRemoteToRunningTargetStopOnEntry(t *testing.T) {\n\tfixture, dbg := launchDebuggerWithTargetRunning(t, \"loopprog\")\n\trunTestWithDebugger(t, dbg, func(client *daptest.Client) {\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"remote\", \"stopOnEntry\": true})\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectAttachResponse(t)\n\t\t// Target is halted here\n\t\tclient.SetBreakpointsRequest(fixture.Source, []int{8})\n\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{8, fixture.Source, true, \"\"}})\n\t\tclient.ConfigurationDoneRequest()\n\t\tclient.ExpectStoppedEvent(t)\n\t\tclient.ExpectConfigurationDoneResponse(t)\n\t\tclient.ContinueRequest(1)\n\t\tclient.ExpectContinueResponse(t)\n\t\tclient.ExpectStoppedEvent(t)\n\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\t})\n}\n\nfunc TestAttachRemoteToRunningTargetContinueOnEntry(t *testing.T) {\n\tfixture, dbg := launchDebuggerWithTargetRunning(t, \"loopprog\")\n\trunTestWithDebugger(t, dbg, func(client *daptest.Client) {\n\t\tclient.AttachRequest(map[string]any{\"mode\": \"remote\", \"stopOnEntry\": false})\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectAttachResponse(t)\n\t\t// Target is halted here\n\t\tclient.SetBreakpointsRequest(fixture.Source, []int{8})\n\t\texpectSetBreakpointsResponse(t, client, []Breakpoint{{8, fixture.Source, true, \"\"}})\n\t\tclient.ConfigurationDoneRequest()\n\t\t// Target is restarted here\n\t\tclient.ExpectConfigurationDoneResponse(t)\n\t\tclient.ExpectStoppedEvent(t)\n\t\tcheckStop(t, client, 1, \"main.loop\", 8)\n\t})\n}\n\n// MultiClientCloseServerMock mocks the rpccommon.Server using a dap.Server to exercise\n// the shutdown logic in dap.Session where it does NOT take down the server on close\n// in multi-client mode. (The dap mode of the rpccommon.Server is tested in dlv_test).\n// The dap.Server is a single-use server. Once its one and only session is closed,\n// the server and the target must be taken down manually for the test not to leak.\ntype MultiClientCloseServerMock struct {\n\timpl      *Server\n\tdebugger  *debugger.Debugger\n\tforceStop chan struct{}\n\tstopped   chan struct{}\n}\n\nfunc NewMultiClientCloseServerMock(t *testing.T, fixture string) *MultiClientCloseServerMock {\n\tvar s MultiClientCloseServerMock\n\ts.stopped = make(chan struct{})\n\ts.impl, s.forceStop = startDAPServer(t, false, s.stopped)\n\t_, s.debugger = launchDebuggerWithTargetHalted(t, \"http_server\")\n\treturn &s\n}\n\nfunc (s *MultiClientCloseServerMock) acceptNewClient(t *testing.T) *daptest.Client {\n\tclient := daptest.NewClient(s.impl.listener.Addr().String())\n\ttime.Sleep(100 * time.Millisecond) // Give time for connection to be set as dap.Session\n\ts.impl.sessionMu.Lock()\n\tif s.impl.session == nil {\n\t\tt.Fatal(\"dap session is not ready\")\n\t}\n\t// A dap.Server doesn't support accept-multiclient, but we can use this\n\t// hack to test the inner connection logic that is used by a server that does.\n\ts.impl.session.config.AcceptMulti = true\n\ts.impl.session.debugger = s.debugger\n\ts.impl.sessionMu.Unlock()\n\treturn client\n}\n\nfunc (s *MultiClientCloseServerMock) stop(t *testing.T) {\n\tclose(s.forceStop)\n\t// If the server doesn't have an active session,\n\t// closing it would leak the debugger with the target because\n\t// they are part of dap.Session.\n\t// We must take it down manually as if we are in rpccommon::ServerImpl::Stop.\n\tif s.debugger.IsRunning() {\n\t\ts.debugger.Command(&api.DebuggerCommand{Name: api.Halt}, nil, nil, nil)\n\t}\n\ts.debugger.Detach(true)\n}\n\nfunc (s *MultiClientCloseServerMock) verifyStopped(t *testing.T) {\n\tif state, err := s.debugger.State(true /*nowait*/); err != proc.ErrProcessDetached && !processExited(state, err) {\n\t\tt.Errorf(\"target leak\")\n\t}\n\tverifyServerStopped(t, s.impl)\n}\n\n// TestAttachRemoteMultiClientDisconnect tests that remote attach doesn't take down\n// the server in multi-client mode unless terminateDebuggee is explicitly set.\nfunc TestAttachRemoteMultiClientDisconnect(t *testing.T) {\n\tclosingClientSessionOnly := fmt.Sprintf(daptest.ClosingClient, \"halted\")\n\tdetachingAndTerminating := \"Detaching and terminating target process\"\n\ttests := []struct {\n\t\tname              string\n\t\tdisconnectRequest func(client *daptest.Client)\n\t\texpect            string\n\t}{\n\t\t{\"default\", func(c *daptest.Client) { c.DisconnectRequest() }, closingClientSessionOnly},\n\t\t{\"terminate=true\", func(c *daptest.Client) { c.DisconnectRequestWithKillOption(true) }, detachingAndTerminating},\n\t\t{\"terminate=false\", func(c *daptest.Client) { c.DisconnectRequestWithKillOption(false) }, closingClientSessionOnly},\n\t}\n\tfor _, tc := range tests {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\tserver := NewMultiClientCloseServerMock(t, \"increment\")\n\t\t\tclient := server.acceptNewClient(t)\n\t\t\tdefer client.Close()\n\n\t\t\tclient.InitializeRequest()\n\t\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\n\t\t\tclient.AttachRequest(map[string]any{\"mode\": \"remote\", \"stopOnEntry\": true})\n\t\t\tclient.ExpectCapabilitiesEventSupportTerminateDebuggee(t)\n\t\t\tclient.ExpectInitializedEvent(t)\n\t\t\tclient.ExpectAttachResponse(t)\n\t\t\tclient.ConfigurationDoneRequest()\n\t\t\tclient.ExpectStoppedEvent(t)\n\t\t\tclient.ExpectConfigurationDoneResponse(t)\n\n\t\t\ttc.disconnectRequest(client)\n\t\t\te := client.ExpectOutputEvent(t)\n\t\t\tif matched, _ := regexp.MatchString(tc.expect, e.Body.Output); !matched {\n\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Output=%q\", e, tc.expect)\n\t\t\t}\n\t\t\tclient.ExpectDisconnectResponse(t)\n\t\t\tclient.ExpectTerminatedEvent(t)\n\t\t\ttime.Sleep(10 * time.Millisecond) // give time for things to shut down\n\n\t\t\tif tc.expect == closingClientSessionOnly {\n\t\t\t\t// At this point a multi-client server is still running. but session should be done.\n\t\t\t\tverifySessionStopped(t, server.impl.session)\n\t\t\t\t// Verify target's running state.\n\t\t\t\tif server.debugger.IsRunning() {\n\t\t\t\t\tt.Errorf(\"\\ngot running=true, want false\")\n\t\t\t\t}\n\t\t\t\tserver.stop(t)\n\t\t\t}\n\t\t\t<-server.stopped\n\t\t\tserver.verifyStopped(t)\n\t\t})\n\t}\n}\n\nfunc TestLaunchAttachErrorWhenDebugInProgress(t *testing.T) {\n\ttests := []struct {\n\t\tname string\n\t\tdbg  func() *debugger.Debugger\n\t}{\n\t\t{\"halted\", func() *debugger.Debugger { _, dbg := launchDebuggerWithTargetHalted(t, \"increment\"); return dbg }},\n\t\t{\"running\", func() *debugger.Debugger { _, dbg := launchDebuggerWithTargetRunning(t, \"loopprog\"); return dbg }},\n\t}\n\tfor _, tc := range tests {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\trunTestWithDebugger(t, tc.dbg(), func(client *daptest.Client) {\n\t\t\t\tclient.EvaluateRequest(\"1==1\", 0 /*no frame specified*/, \"repl\")\n\t\t\t\tif tc.name == \"running\" {\n\t\t\t\t\tclient.ExpectInvisibleErrorResponse(t)\n\t\t\t\t} else {\n\t\t\t\t\tclient.ExpectEvaluateResponse(t)\n\t\t\t\t}\n\n\t\t\t\t// Both launch and attach requests should go through for additional error checking\n\t\t\t\tclient.AttachRequest(map[string]any{\"mode\": \"local\", \"processId\": 100})\n\t\t\t\ter := client.ExpectVisibleErrorResponse(t)\n\t\t\t\tmsgRe := regexp.MustCompile(\"Failed to attach: debug session already in progress at .+ - use remote mode to connect to a server with an active debug session\")\n\t\t\t\tif er.Body.Error == nil || er.Body.Error.Id != FailedToAttach || !msgRe.MatchString(er.Body.Error.Format) {\n\t\t\t\t\tt.Errorf(\"got %#v, want Id=%d Format=%q\", er.Body.Error, FailedToAttach, msgRe)\n\t\t\t\t}\n\t\t\t\ttests := []string{\"debug\", \"test\", \"exec\", \"replay\", \"core\"}\n\t\t\t\tfor _, mode := range tests {\n\t\t\t\t\tt.Run(mode, func(t *testing.T) {\n\t\t\t\t\t\tclient.LaunchRequestWithArgs(map[string]any{\"mode\": mode})\n\t\t\t\t\t\ter := client.ExpectVisibleErrorResponse(t)\n\t\t\t\t\t\tmsgRe := regexp.MustCompile(\"Failed to launch: debug session already in progress at .+ - use remote attach mode to connect to a server with an active debug session\")\n\t\t\t\t\t\tif er.Body.Error == nil || er.Body.Error.Id != FailedToLaunch || !msgRe.MatchString(er.Body.Error.Format) {\n\t\t\t\t\t\t\tt.Errorf(\"got %#v, want Id=%d Format=%q\", er.Body.Error, FailedToLaunch, msgRe)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n}\n\nfunc TestBadInitializeRequest(t *testing.T) {\n\trunInitializeTest := func(args dap.InitializeRequestArguments, err string) {\n\t\tt.Helper()\n\t\t// Only one initialize request is allowed, so use a new server\n\t\t// for each test.\n\t\tserverStopped := make(chan struct{})\n\t\tclient := startDAPServerWithClient(t, false, serverStopped)\n\t\tdefer client.Close()\n\n\t\tclient.InitializeRequestWithArgs(args)\n\t\tresponse := client.ExpectErrorResponse(t)\n\t\tif response.Command != \"initialize\" {\n\t\t\tt.Errorf(\"Command got %q, want \\\"launch\\\"\", response.Command)\n\t\t}\n\t\tif response.Message != \"Failed to initialize\" {\n\t\t\tt.Errorf(\"Message got %q, want \\\"Failed to launch\\\"\", response.Message)\n\t\t}\n\t\tif !checkErrorMessageId(response.Body.Error, FailedToInitialize) {\n\t\t\tt.Errorf(\"Id got %v, want Id=%d\", response.Body.Error, FailedToInitialize)\n\t\t}\n\t\tif !checkErrorMessageFormat(response.Body.Error, err) {\n\t\t\tt.Errorf(\"\\ngot  %q\\nwant %q\", response.Body.Error.Format, err)\n\t\t}\n\n\t\tclient.DisconnectRequest()\n\t\tclient.ExpectDisconnectResponse(t)\n\t\t<-serverStopped\n\t}\n\n\t// Bad path format.\n\trunInitializeTest(dap.InitializeRequestArguments{\n\t\tAdapterID:       \"go\",\n\t\tPathFormat:      \"url\", // unsupported 'pathFormat'\n\t\tLinesStartAt1:   true,\n\t\tColumnsStartAt1: true,\n\t\tLocale:          \"en-us\",\n\t},\n\t\t\"Failed to initialize: Unsupported 'pathFormat' value 'url'.\",\n\t)\n\n\t// LinesStartAt1 must be true.\n\trunInitializeTest(dap.InitializeRequestArguments{\n\t\tAdapterID:       \"go\",\n\t\tPathFormat:      \"path\",\n\t\tLinesStartAt1:   false, // only 1-based line numbers are supported\n\t\tColumnsStartAt1: true,\n\t\tLocale:          \"en-us\",\n\t},\n\t\t\"Failed to initialize: Only 1-based line numbers are supported.\",\n\t)\n\n\t// ColumnsStartAt1 must be true.\n\trunInitializeTest(dap.InitializeRequestArguments{\n\t\tAdapterID:       \"go\",\n\t\tPathFormat:      \"path\",\n\t\tLinesStartAt1:   true,\n\t\tColumnsStartAt1: false, // only 1-based column numbers are supported\n\t\tLocale:          \"en-us\",\n\t},\n\t\t\"Failed to initialize: Only 1-based column numbers are supported.\",\n\t)\n}\n\nfunc TestBadlyFormattedMessageToServer(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// Send a badly formatted message to the server, and expect it to close the\n\t\t// connection.\n\t\tclient.BadRequest()\n\t\ttime.Sleep(100 * time.Millisecond)\n\n\t\t_, err := client.ReadMessage(t)\n\n\t\tif err != io.EOF {\n\t\t\tt.Errorf(\"got err=%v, want io.EOF\", err)\n\t\t}\n\t})\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// Send an unknown request message to the server, and expect it to send\n\t\t// an error response.\n\t\tclient.UnknownRequest()\n\t\terr := client.ExpectErrorResponse(t)\n\t\tif !checkErrorMessageFormat(err.Body.Error, \"Internal Error: Request command 'unknown' is not supported (seq: 1)\") || err.RequestSeq != 1 {\n\t\t\tt.Errorf(\"got %v, want  RequestSeq=1 Error=\\\"Internal Error: Request command 'unknown' is not supported (seq: 1)\\\"\", err)\n\t\t}\n\n\t\t// Make sure that the unknown request did not kill the server.\n\t\tclient.InitializeRequest()\n\t\tclient.ExpectInitializeResponse(t)\n\n\t\tclient.DisconnectRequest()\n\t\tclient.ExpectDisconnectResponse(t)\n\t})\n}\n\nfunc TestRequestsBeforeLaunch(t *testing.T) {\n\t// Checks that we don't try to use s.debugger before we have initialized it\n\t// if we receive a request before a launch request (or after a launch\n\t// request has failed).\n\t// Issues #4060 and #4237\n\n\tserverStopped := make(chan struct{})\n\tserver, _ := startDAPServer(t, false, serverStopped)\n\n\tclient := daptest.NewClient(server.listener.Addr().String())\n\tdefer client.Close()\n\n\t// Initialize only, no launch/attach\n\tclient.InitializeRequest()\n\tclient.ExpectInitializeResponseAndCapabilities(t)\n\n\t// Send ConfigurationDone before Launch/Attach\n\tclient.ConfigurationDoneRequest()\n\n\tresp := client.ExpectVisibleErrorResponse(t)\n\tif resp.Body.Error != nil {\n\t\texpectedMsg := \"No debug session started: Use launch or attach request first.\"\n\t\tif resp.Body.Error.Format != expectedMsg {\n\t\t\tt.Errorf(\"Expected error message %q, got %q\", expectedMsg, resp.Body.Error.Format)\n\t\t}\n\t}\n\n\tclient.StepOutRequest(0)\n\tclient.ExpectVisibleErrorResponse(t)\n\n\tclient.DisconnectRequest()\n\tclient.ExpectDisconnectResponse(t)\n\tclient.ExpectTerminatedEvent(t)\n\n\t<-serverStopped\n}\n\nfunc TestParseLogPoint(t *testing.T) {\n\ttests := []struct {\n\t\tname           string\n\t\tmsg            string\n\t\twantTracepoint bool\n\t\twantFormat     string\n\t\twantArgs       []string\n\t\twantErr        bool\n\t}{\n\t\t// Test simple log messages.\n\t\t{name: \"simple string\", msg: \"hello, world!\", wantTracepoint: true, wantFormat: \"hello, world!\"},\n\t\t{name: \"empty string\", msg: \"\", wantTracepoint: false, wantErr: false},\n\t\t// Test parse eval expressions.\n\t\t{\n\t\t\tname:           \"simple eval\",\n\t\t\tmsg:            \"{x}\",\n\t\t\twantTracepoint: true,\n\t\t\twantFormat:     \"%s\",\n\t\t\twantArgs:       []string{\"x\"},\n\t\t},\n\t\t{\n\t\t\tname:           \"type cast\",\n\t\t\tmsg:            \"hello {string(x)}\",\n\t\t\twantTracepoint: true,\n\t\t\twantFormat:     \"hello %s\",\n\t\t\twantArgs:       []string{\"string(x)\"},\n\t\t},\n\t\t{\n\t\t\tname:           \"multiple eval\",\n\t\t\tmsg:            \"{x} {y} {z}\",\n\t\t\twantTracepoint: true,\n\t\t\twantFormat:     \"%s %s %s\",\n\t\t\twantArgs:       []string{\"x\", \"y\", \"z\"},\n\t\t},\n\t\t{\n\t\t\tname:           \"eval expressions contain braces\",\n\t\t\tmsg:            \"{interface{}(x)} {myType{y}} {[]myType{{z}}}\",\n\t\t\twantTracepoint: true,\n\t\t\twantFormat:     \"%s %s %s\",\n\t\t\twantArgs:       []string{\"interface{}(x)\", \"myType{y}\", \"[]myType{{z}}\"},\n\t\t},\n\t\t// Test parse errors.\n\t\t{name: \"empty evaluation\", msg: \"{}\", wantErr: true},\n\t\t{name: \"empty space evaluation\", msg: \"{   \\n}\", wantErr: true},\n\t\t{name: \"open brace missing closed\", msg: \"{\", wantErr: true},\n\t\t{name: \"closed brace missing open\", msg: \"}\", wantErr: true},\n\t\t{name: \"open brace in expression\", msg: `{m[\"{\"]}`, wantErr: true},\n\t\t{name: \"closed brace in expression\", msg: `{m[\"}\"]}`, wantErr: true},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tgotTracepoint, gotLogMessage, err := parseLogPoint(tt.msg)\n\t\t\tif gotTracepoint != tt.wantTracepoint {\n\t\t\t\tt.Errorf(\"parseLogPoint() tracepoint = %v, wantTracepoint %v\", gotTracepoint, tt.wantTracepoint)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (err != nil) != tt.wantErr {\n\t\t\t\tt.Errorf(\"parseLogPoint() error = %v, wantErr %v\", err, tt.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif !tt.wantTracepoint {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif gotLogMessage == nil {\n\t\t\t\tt.Errorf(\"parseLogPoint() gotLogMessage = nil, want log message\")\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif gotLogMessage.format != tt.wantFormat {\n\t\t\t\tt.Errorf(\"parseLogPoint() gotFormat = %v, want %v\", gotLogMessage.format, tt.wantFormat)\n\t\t\t}\n\t\t\tif !reflect.DeepEqual(gotLogMessage.args, tt.wantArgs) {\n\t\t\t\tt.Errorf(\"parseLogPoint() gotArgs = %v, want %v\", gotLogMessage.args, tt.wantArgs)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestDisassemble(t *testing.T) {\n\trunTest(t, \"increment\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{17},\n\t\t\t[]onBreakpoint{{\n\t\t\t\t// Stop at line 17\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 17)\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 1)\n\t\t\t\t\tst := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tif len(st.Body.StackFrames) < 1 {\n\t\t\t\t\t\tt.Fatalf(\"\\ngot  %#v\\nwant len(stackframes) => 1\", st)\n\t\t\t\t\t}\n\t\t\t\t\t// Request the single instruction that the program is stopped at.\n\t\t\t\t\tpc := st.Body.StackFrames[0].InstructionPointerReference\n\t\t\t\t\tclient.DisassembleRequest(pc, 0, 1)\n\t\t\t\t\tdr := client.ExpectDisassembleResponse(t)\n\t\t\t\t\tif len(dr.Body.Instructions) != 1 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant len(instructions) = 1\", dr)\n\t\t\t\t\t} else if dr.Body.Instructions[0].Address != pc {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant instructions[0].Address = %s\", dr, pc)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Request the instruction that the program is stopped at, and the two\n\t\t\t\t\t// surrounding it.\n\t\t\t\t\tclient.DisassembleRequest(pc, -1, 3)\n\t\t\t\t\tdr = client.ExpectDisassembleResponse(t)\n\t\t\t\t\tif len(dr.Body.Instructions) != 3 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant len(instructions) = 3\", dr)\n\t\t\t\t\t} else if dr.Body.Instructions[1].Address != pc {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant instructions[1].Address = %s\", dr, pc)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Request zero instructions.\n\t\t\t\t\tclient.DisassembleRequest(pc, 0, 0)\n\t\t\t\t\tdr = client.ExpectDisassembleResponse(t)\n\t\t\t\t\tif len(dr.Body.Instructions) != 0 {\n\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant len(instructions) = 0\", dr)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Request invalid instructions.\n\t\t\t\t\tcheckInvalidInstruction := func(instructions []dap.DisassembledInstruction, count int, address uint64) {\n\t\t\t\t\t\tif len(instructions) != count {\n\t\t\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant len(instructions) = %d\", dr, count)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor i, got := range instructions {\n\t\t\t\t\t\t\tif got.Instruction != invalidInstruction.Instruction {\n\t\t\t\t\t\t\t\tt.Errorf(\"\\ngot [%d].Instruction=%q\\nwant = %#v\", i, got.Instruction, invalidInstruction.Address)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\taddr, err := strconv.ParseUint(got.Address, 0, 64)\n\t\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\t\tt.Error(err)\n\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif addr != address {\n\t\t\t\t\t\t\t\tt.Errorf(\"\\ngot [%d].Address=%s\\nwant = %#x\", i, got.Address, address)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tclient.DisassembleRequest(\"0x0\", 0, 10)\n\t\t\t\t\tcheckInvalidInstruction(client.ExpectDisassembleResponse(t).Body.Instructions, 10, 0)\n\n\t\t\t\t\tclient.DisassembleRequest(fmt.Sprintf(\"%#x\", uint64(math.MaxUint64)), 0, 10)\n\t\t\t\t\tcheckInvalidInstruction(client.ExpectDisassembleResponse(t).Body.Instructions, 10, uint64(math.MaxUint64))\n\n\t\t\t\t\t// Bad request, not a number.\n\t\t\t\t\tclient.DisassembleRequest(\"hello, world!\", 0, 1)\n\t\t\t\t\tclient.ExpectErrorResponse(t)\n\n\t\t\t\t\t// Bad request, not an address in program.\n\t\t\t\t\tclient.DisassembleRequest(\"0x5\", 0, 100)\n\t\t\t\t\tclient.ExpectErrorResponse(t)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}},\n\t\t)\n\t})\n}\n\nfunc TestAlignPCs(t *testing.T) {\n\tNUM_FUNCS := 10\n\t// Create fake functions to test align PCs.\n\tfuncs := make([]proc.Function, NUM_FUNCS)\n\tfor i := range funcs {\n\t\tfuncs[i] = proc.Function{\n\t\t\tEntry: uint64(100 + i*10),\n\t\t\tEnd:   uint64(100 + i*10 + 5),\n\t\t}\n\t}\n\tbi := &proc.BinaryInfo{\n\t\tFunctions: funcs,\n\t}\n\ttype args struct {\n\t\tstart uint64\n\t\tend   uint64\n\t}\n\ttests := []struct {\n\t\tname      string\n\t\targs      args\n\t\twantStart uint64\n\t\twantEnd   uint64\n\t}{\n\t\t{\n\t\t\tname: \"out of bounds\",\n\t\t\targs: args{\n\t\t\t\tstart: funcs[0].Entry - 5,\n\t\t\t\tend:   funcs[NUM_FUNCS-1].End + 5,\n\t\t\t},\n\t\t\twantStart: funcs[0].Entry,         // start of first function\n\t\t\twantEnd:   funcs[NUM_FUNCS-1].End, // end of last function\n\t\t},\n\t\t{\n\t\t\tname: \"same function\",\n\t\t\targs: args{\n\t\t\t\tstart: funcs[1].Entry + 1,\n\t\t\t\tend:   funcs[1].Entry + 2,\n\t\t\t},\n\t\t\twantStart: funcs[1].Entry, // start of containing function\n\t\t\twantEnd:   funcs[1].End,   // end of containing function\n\t\t},\n\t\t{\n\t\t\tname: \"between functions\",\n\t\t\targs: args{\n\t\t\t\tstart: funcs[1].End + 1,\n\t\t\t\tend:   funcs[1].End + 2,\n\t\t\t},\n\t\t\twantStart: funcs[1].Entry, // start of function before\n\t\t\twantEnd:   funcs[2].Entry, // start of function after\n\t\t},\n\t\t{\n\t\t\tname: \"start of function\",\n\t\t\targs: args{\n\t\t\t\tstart: funcs[2].Entry,\n\t\t\t\tend:   funcs[5].Entry,\n\t\t\t},\n\t\t\twantStart: funcs[2].Entry, // start of current function\n\t\t\twantEnd:   funcs[5].End,   // end of current function\n\t\t},\n\t\t{\n\t\t\tname: \"end of function\",\n\t\t\targs: args{\n\t\t\t\tstart: funcs[4].End,\n\t\t\t\tend:   funcs[8].End,\n\t\t\t},\n\t\t\twantStart: funcs[4].Entry, // start of current function\n\t\t\twantEnd:   funcs[9].Entry, // start of next function\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tgotStart, gotEnd := alignPCs(bi, tt.args.start, tt.args.end)\n\t\t\tif gotStart != tt.wantStart {\n\t\t\t\tt.Errorf(\"alignPCs() got start = %v, want %v\", gotStart, tt.wantStart)\n\t\t\t}\n\t\t\tif gotEnd != tt.wantEnd {\n\t\t\t\tt.Errorf(\"alignPCs() got end = %v, want %v\", gotEnd, tt.wantEnd)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestFindInstructions(t *testing.T) {\n\tnumInstructions := 100\n\tstartPC := 0x1000\n\tprocInstructions := make([]proc.AsmInstruction, numInstructions)\n\tfor i := range procInstructions {\n\t\tprocInstructions[i] = proc.AsmInstruction{\n\t\t\tLoc: proc.Location{\n\t\t\t\tPC: uint64(startPC + 2*i),\n\t\t\t},\n\t\t}\n\t}\n\ttype args struct {\n\t\taddr   uint64\n\t\toffset int\n\t\tcount  int\n\t}\n\ttests := []struct {\n\t\tname             string\n\t\targs             args\n\t\twantInstructions []proc.AsmInstruction\n\t\twantOffset       int\n\t\twantErr          bool\n\t}{\n\t\t{\n\t\t\tname: \"request all\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC),\n\t\t\t\toffset: 0,\n\t\t\t\tcount:  100,\n\t\t\t},\n\t\t\twantInstructions: procInstructions,\n\t\t\twantOffset:       0,\n\t\t\twantErr:          false,\n\t\t},\n\t\t{\n\t\t\tname: \"request all (with offset)\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC + numInstructions), // the instruction addr at numInstructions/2\n\t\t\t\toffset: -numInstructions / 2,\n\t\t\t\tcount:  numInstructions,\n\t\t\t},\n\t\t\twantInstructions: procInstructions,\n\t\t\twantOffset:       0,\n\t\t\twantErr:          false,\n\t\t},\n\t\t{\n\t\t\tname: \"request half (with offset)\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC),\n\t\t\t\toffset: 0,\n\t\t\t\tcount:  numInstructions / 2,\n\t\t\t},\n\t\t\twantInstructions: procInstructions[:numInstructions/2],\n\t\t\twantOffset:       0,\n\t\t\twantErr:          false,\n\t\t},\n\t\t{\n\t\t\tname: \"request half (with offset)\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC),\n\t\t\t\toffset: numInstructions / 2,\n\t\t\t\tcount:  numInstructions / 2,\n\t\t\t},\n\t\t\twantInstructions: procInstructions[numInstructions/2:],\n\t\t\twantOffset:       0,\n\t\t\twantErr:          false,\n\t\t},\n\t\t{\n\t\t\tname: \"request too many\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC),\n\t\t\t\toffset: 0,\n\t\t\t\tcount:  numInstructions * 2,\n\t\t\t},\n\t\t\twantInstructions: procInstructions,\n\t\t\twantOffset:       0,\n\t\t\twantErr:          false,\n\t\t},\n\t\t{\n\t\t\tname: \"request too many with offset\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC),\n\t\t\t\toffset: -numInstructions,\n\t\t\t\tcount:  numInstructions * 2,\n\t\t\t},\n\t\t\twantInstructions: procInstructions,\n\t\t\twantOffset:       numInstructions,\n\t\t\twantErr:          false,\n\t\t},\n\t\t{\n\t\t\tname: \"request out of bounds\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC),\n\t\t\t\toffset: -numInstructions,\n\t\t\t\tcount:  numInstructions,\n\t\t\t},\n\t\t\twantInstructions: []proc.AsmInstruction{},\n\t\t\twantOffset:       0,\n\t\t\twantErr:          false,\n\t\t},\n\t\t{\n\t\t\tname: \"request out of bounds\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC + 2*(numInstructions-1)),\n\t\t\t\toffset: 1,\n\t\t\t\tcount:  numInstructions,\n\t\t\t},\n\t\t\twantInstructions: []proc.AsmInstruction{},\n\t\t\twantOffset:       0,\n\t\t\twantErr:          false,\n\t\t},\n\t\t{\n\t\t\tname: \"addr out of bounds (low)\",\n\t\t\targs: args{\n\t\t\t\taddr:   0,\n\t\t\t\toffset: 0,\n\t\t\t\tcount:  100,\n\t\t\t},\n\t\t\twantInstructions: nil,\n\t\t\twantOffset:       -1,\n\t\t\twantErr:          true,\n\t\t},\n\t\t{\n\t\t\tname: \"addr out of bounds (high)\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC + 2*(numInstructions+1)),\n\t\t\t\toffset: -10,\n\t\t\t\tcount:  20,\n\t\t\t},\n\t\t\twantInstructions: nil,\n\t\t\twantOffset:       -1,\n\t\t\twantErr:          true,\n\t\t},\n\t\t{\n\t\t\tname: \"addr not aligned\",\n\t\t\targs: args{\n\t\t\t\taddr:   uint64(startPC + 1),\n\t\t\t\toffset: 0,\n\t\t\t\tcount:  20,\n\t\t\t},\n\t\t\twantInstructions: nil,\n\t\t\twantOffset:       -1,\n\t\t\twantErr:          true,\n\t\t},\n\t}\n\tfor _, tt := range tests {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tgotInstructions, gotOffset, err := findInstructions(procInstructions, tt.args.addr, tt.args.offset, tt.args.count)\n\t\t\tif (err != nil) != tt.wantErr {\n\t\t\t\tt.Errorf(\"findInstructions() error = %v, wantErr %v\", err, tt.wantErr)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif !reflect.DeepEqual(gotInstructions, tt.wantInstructions) {\n\t\t\t\tt.Errorf(\"findInstructions() got instructions = %v, want %v\", gotInstructions, tt.wantInstructions)\n\t\t\t}\n\t\t\tif gotOffset != tt.wantOffset {\n\t\t\t\tt.Errorf(\"findInstructions() got offset = %v, want %v\", gotOffset, tt.wantOffset)\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunc TestDisassembleCgo(t *testing.T) {\n\t// Test that disassembling a program containing cgo code does not create problems.\n\t// See issue #3040\n\tprotest.MustHaveCgo(t)\n\trunTestBuildFlags(t, \"cgodisass\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Set breakpoints\n\t\t\tfixture.Source, []int{11},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 11)\n\n\t\t\t\t\tclient.StackTraceRequest(1, 0, 1)\n\t\t\t\t\tst := client.ExpectStackTraceResponse(t)\n\t\t\t\t\tif len(st.Body.StackFrames) < 1 {\n\t\t\t\t\t\tt.Fatalf(\"\\ngot  %#v\\nwant len(stackframes) => 1\", st)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Request the single instruction that the program is stopped at.\n\t\t\t\t\tpc := st.Body.StackFrames[0].InstructionPointerReference\n\n\t\t\t\t\tclient.DisassembleRequest(pc, -200, 400)\n\t\t\t\t\tclient.ExpectDisassembleResponse(t)\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}},\n\t\t)\n\t},\n\t\tprotest.AllNonOptimized, true)\n}\n\nfunc checkExceptionBreakpoints(t *testing.T, resp *dap.SetExceptionBreakpointsResponse, ids ...int) {\n\tt.Helper()\n\tif len(resp.Body.Breakpoints) != len(ids) {\n\t\tt.Errorf(\"want: %v got: %v\", ids, resp.Body.Breakpoints)\n\t\treturn\n\t}\n\tslices.SortFunc(resp.Body.Breakpoints, func(a, b dap.Breakpoint) int {\n\t\treturn cmp.Compare(a.Id, b.Id)\n\t})\n\tsort.Ints(ids)\n\tfor i := range resp.Body.Breakpoints {\n\t\tif resp.Body.Breakpoints[i].Id != ids[i] {\n\t\t\tt.Errorf(\"want %v got %v\", ids, resp.Body.Breakpoints)\n\t\t\treturn\n\t\t}\n\t\tif !resp.Body.Breakpoints[i].Verified {\n\t\t\tt.Errorf(\"breakpoint %d not verified\", resp.Body.Breakpoints[i].Id)\n\t\t}\n\t}\n}\n\nfunc TestSetExceptionBreakpoints(t *testing.T) {\n\trunTestBuildFlags(t, \"panic\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\tfixture.Source, []int{3},\n\t\t\t[]onBreakpoint{{\n\t\t\t\texecute: func() {\n\t\t\t\t\tcheckStop(t, client, 1, \"main.main\", 3)\n\t\t\t\t\tclient.SetExceptionBreakpointsRequest([]string{proc.UnrecoveredPanic, proc.FatalThrow})\n\t\t\t\t\tcheckExceptionBreakpoints(t, client.ExpectSetExceptionBreakpointsResponse(t), -1, -2)\n\n\t\t\t\t\tclient.SetExceptionBreakpointsRequest([]string{})\n\t\t\t\t\tcheckExceptionBreakpoints(t, client.ExpectSetExceptionBreakpointsResponse(t))\n\n\t\t\t\t\tclient.SetExceptionBreakpointsRequest([]string{proc.UnrecoveredPanic, proc.FatalThrow})\n\t\t\t\t\tcheckExceptionBreakpoints(t, client.ExpectSetExceptionBreakpointsResponse(t), -1, -2)\n\n\t\t\t\t\tclient.SetExceptionBreakpointsRequest([]string{proc.FatalThrow})\n\t\t\t\t\tcheckExceptionBreakpoints(t, client.ExpectSetExceptionBreakpointsResponse(t), -2)\n\n\t\t\t\t\t// If disabling the predefined breakpoints doesn't work Delve will stop\n\t\t\t\t\t// on the target's panic and runTestBuildFlags, which expects a\n\t\t\t\t\t// terminated event, will fail the test.\n\t\t\t\t},\n\t\t\t\tdisconnect: true,\n\t\t\t}},\n\t\t)\n\t}, 0, true)\n}\n\nfunc TestRedirect(t *testing.T) {\n\trunTest(t, \"out_redirect\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\t// 1 >> initialize, << initialize\n\t\tclient.InitializeRequest()\n\t\tinitResp := client.ExpectInitializeResponseAndCapabilities(t)\n\t\tif initResp.RequestSeq != 1 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=1\", initResp)\n\t\t}\n\n\t\t// 2 >> launch, << process, << initialized, << launch\n\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\"request\":    \"launch\",\n\t\t\t\"mode\":       \"debug\",\n\t\t\t\"program\":    fixture.Source,\n\t\t\t\"outputMode\": \"remote\",\n\t\t})\n\t\tclient.ExpectProcessEvent(t)\n\t\tclient.ExpectInitializedEvent(t)\n\t\tlaunchResp := client.ExpectLaunchResponse(t)\n\t\tif launchResp.RequestSeq != 2 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=2\", launchResp)\n\t\t}\n\n\t\t// 5 >> configurationDone, << stopped, << configurationDone\n\t\tclient.ConfigurationDoneRequest()\n\n\t\tcdResp := client.ExpectConfigurationDoneResponse(t)\n\t\tif cdResp.RequestSeq != 3 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=5\", cdResp)\n\t\t}\n\n\t\t// 6 << output, << terminated\n\t\tvar (\n\t\t\tstdout = bytes.NewBufferString(\"\")\n\t\t\tstderr = bytes.NewBufferString(\"\")\n\t\t)\n\n\tterminatedPoint:\n\t\tfor {\n\t\t\tmessage := client.ExpectMessage(t)\n\t\t\tswitch m := message.(type) {\n\t\t\tcase *dap.OutputEvent:\n\t\t\t\tswitch m.Body.Category {\n\t\t\t\tcase \"stdout\":\n\t\t\t\t\tstdout.WriteString(m.Body.Output)\n\t\t\t\tcase \"stderr\":\n\t\t\t\t\tstderr.WriteString(m.Body.Output)\n\t\t\t\tdefault:\n\t\t\t\t\tt.Errorf(\"\\ngot %#v\\nwant Category='stdout' or 'stderr'\", m)\n\t\t\t\t}\n\t\t\tcase *dap.TerminatedEvent:\n\t\t\t\tbreak terminatedPoint\n\t\t\tdefault:\n\t\t\t\tt.Errorf(\"\\n got %#v, want *dap.OutputEvent or *dap.TerminateResponse\", m)\n\t\t\t}\n\t\t}\n\n\t\tvar (\n\t\t\texpectStdout = \"hello world!\\nhello world!\"\n\t\t\texpectStderr = \"hello world!\\nhello world! error!\"\n\t\t)\n\n\t\t// check output\n\t\tif expectStdout != stdout.String() {\n\t\t\tt.Errorf(\"\\n got stdout: len:%d\\n%s\\nwant: len:%d\\n%s\", stdout.Len(), stdout.String(), len(expectStdout), expectStdout)\n\t\t}\n\n\t\tif expectStderr != stderr.String() {\n\t\t\tt.Errorf(\"\\n got stderr: len:%d \\n%s\\nwant: len:%d\\n%s\", stderr.Len(), stderr.String(), len(expectStderr), expectStderr)\n\t\t}\n\n\t\t// 7 >> disconnect, << disconnect\n\t\tclient.DisconnectRequest()\n\t\toep := client.ExpectOutputEventProcessExited(t, 0)\n\t\tif oep.Body.Category != \"console\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Category='console'\", oep)\n\t\t}\n\t\toed := client.ExpectOutputEventDetaching(t)\n\t\tif oed.Body.Category != \"console\" {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant Category='console'\", oed)\n\t\t}\n\t\tdResp := client.ExpectDisconnectResponse(t)\n\t\tif dResp.RequestSeq != 4 {\n\t\t\tt.Errorf(\"\\ngot %#v\\nwant RequestSeq=43\", dResp)\n\t\t}\n\t\tclient.ExpectTerminatedEvent(t)\n\t})\n}\n\nfunc TestBreakpointAfterDisconnect(t *testing.T) {\n\tif runtime.GOOS == \"freebsd\" {\n\t\t// This test when run on FreeBSD will cause subsequent tests to sometimes fail.\n\t\tt.Skip(\"causes problems\")\n\t}\n\tfixture := protest.BuildFixture(t, \"testnextnethttp\", protest.AllNonOptimized)\n\n\tcmd := exec.Command(fixture.Path)\n\n\t// Capture stdout to read the port number\n\tstdout, err := cmd.StdoutPipe()\n\tif err != nil {\n\t\tt.Fatal(\"failed to create stdout pipe:\", err)\n\t}\n\tcmd.Stderr = os.Stderr\n\tif err := cmd.Start(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\t// Read the port from stdout in a goroutine\n\tvar port int\n\tportChan := make(chan int, 1)\n\tgo func() {\n\t\tvar portLine string\n\t\tbuf := make([]byte, 256)\n\t\tfor {\n\t\t\tn, err := stdout.Read(buf)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tportLine += string(buf[:n])\n\t\t\tif strings.Contains(portLine, \"LISTENING:\") {\n\t\t\t\tparts := strings.Split(portLine, \"LISTENING:\")\n\t\t\t\tif len(parts) > 1 {\n\t\t\t\t\tportStr := strings.TrimSpace(strings.Split(parts[1], \"\\n\")[0])\n\t\t\t\t\tif p, err := strconv.Atoi(portStr); err == nil {\n\t\t\t\t\t\tportChan <- p\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}()\n\n\tvar server MultiClientCloseServerMock\n\tserver.stopped = make(chan struct{})\n\tserver.impl, server.forceStop = startDAPServer(t, false, server.stopped)\n\n\tdbg, err := debugger.New(&debugger.Config{Backend: \"default\", AttachPid: cmd.Process.Pid}, nil)\n\tif err != nil {\n\t\tt.Fatalf(\"debugger.New: %v\", err)\n\t}\n\n\tserver.debugger = dbg\n\n\tclient := server.acceptNewClient(t)\n\n\tclient.InitializeRequest()\n\tclient.ExpectInitializeResponse(t)\n\n\tclient.SetBreakpointsRequestWithArgs(fixture.Source, []int{16}, nil, nil, map[int]string{16: \"{w}\"})\n\tclient.ExpectSetBreakpointsResponse(t)\n\n\tclient.ContinueRequest(1)\n\tclient.ExpectContinueResponse(t)\n\n\tclient.DisconnectRequestWithKillOption(false)\n\tclient.ExpectOutputEvent(t)\n\tclient.ExpectDisconnectResponse(t)\n\tclient.Close()\n\n\ttime.Sleep(200 * time.Millisecond)\n\n\tserver.impl.session.conn = &connection{ReadWriteCloser: discard{}} // fake a race condition between onDisconnectRequest and the runUntilStopAndNotify goroutine\n\n\t// Wait for port to be available\n\tselect {\n\tcase port = <-portChan:\n\tcase <-time.After(5 * time.Second):\n\t\tt.Fatal(\"timed out waiting for fixture to start listening\")\n\t}\n\n\thttpClient := &http.Client{Timeout: time.Second}\n\n\tresp, err := httpClient.Get(fmt.Sprintf(\"http://127.0.0.1:%d/nobp\", port))\n\tif err != nil {\n\t\tt.Fatalf(\"Page request after disconnect failed: %v\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\ttime.Sleep(200 * time.Millisecond)\n\n\tcmd.Process.Kill()\n}\n\nfunc TestRedirects(t *testing.T) {\n\tvar (\n\t\tinfile  = \"redirect-input.txt\"\n\t\toutfile = \"redirect-output.txt\"\n\t)\n\trunTest(t, \"redirect\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\tinfile = filepath.Join(filepath.Dir(fixture.Source), infile)\n\t\toutfile = filepath.Join(filepath.Dir(fixture.Source), outfile)\n\t\tclient.InitializeRequest()\n\t\tclient.ExpectInitializeResponseAndCapabilities(t)\n\t\tclient.LaunchRequestWithArgs(map[string]any{\n\t\t\t\"mode\": \"exec\", \"program\": fixture.Path, \"stdinFrom\": infile, \"stdoutTo\": outfile,\n\t\t})\n\t\tclient.ExpectProcessEvent(t)\n\t\tclient.ExpectInitializedEvent(t)\n\t\tclient.ExpectLaunchResponse(t)\n\n\t\tclient.ContinueRequest(1)\n\t\tclient.ExpectContinueResponse(t)\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\tbuf, err := os.ReadFile(outfile)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"error reading output file: %v\", err)\n\t\t}\n\t\tt.Logf(\"output %q\", buf)\n\t\tif !strings.HasPrefix(string(buf), \"Redirect test\") {\n\t\t\tt.Fatalf(\"Wrong output %q\", string(buf))\n\t\t}\n\n\t\tclient.RestartRequest(map[string]any{\n\t\t\t\"arguments\": map[string]any{\n\t\t\t\t\"request\": \"launch\",\n\t\t\t\t\"rebuild\": false,\n\t\t\t},\n\t\t})\n\t\tclient.ExpectRestartResponse(t)\n\t\tclient.ExpectInitializedEvent(t)\n\n\t\tclient.ContinueRequest(1)\n\t\tclient.ExpectContinueResponse(t)\n\t\tclient.ExpectTerminatedEvent(t)\n\n\t\tbuf2, err := os.ReadFile(outfile)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"error reading output file (second time): %v\", err)\n\t\t}\n\t\tt.Logf(\"output %q\", buf2)\n\t\tif !strings.HasPrefix(string(buf2), \"Redirect test\") {\n\t\t\tt.Fatalf(\"Wrong output (second time) %q\", string(buf))\n\t\t}\n\t\tif string(buf2) == string(buf) {\n\t\t\tt.Fatalf(\"Expected output change got %q\", string(buf))\n\t\t}\n\t\tos.Remove(outfile)\n\n\t\tclient.DisconnectRequest()\n\t\tclient.ExpectOutputEvent(t)\n\t\tclient.ExpectOutputEvent(t)\n\t\tclient.ExpectDisconnectResponse(t)\n\t})\n}\n\nfunc TestReadMemory_StringPagination(t *testing.T) {\n\tif runtime.GOOS == \"freebsd\" {\n\t\tt.Skip(\"test skipped on freebsd\")\n\t}\n\n\trunTest(t, \"readmem_json\", func(client *daptest.Client, fixture protest.Fixture) {\n\t\trunDebugSessionWithBPs(t, client, \"launch\",\n\t\t\t// Launch\n\t\t\tfunc() {\n\t\t\t\tclient.LaunchRequest(\"exec\", fixture.Path, !stopOnEntry)\n\t\t\t},\n\t\t\t// Breakpoints are set within the program\n\t\t\tfixture.Source, []int{},\n\t\t\t[]onBreakpoint{\n\t\t\t\t{\n\t\t\t\t\texecute:    func() {},\n\t\t\t\t\tdisconnect: false,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\texecute: func() {\n\t\t\t\t\t\tclient.StackTraceRequest(1, 0, 20)\n\t\t\t\t\t\t_ = client.ExpectStackTraceResponse(t)\n\n\t\t\t\t\t\tclient.ScopesRequest(1000)\n\t\t\t\t\t\t_ = client.ExpectScopesResponse(t)\n\n\t\t\t\t\t\tclient.VariablesRequest(localsScope)\n\t\t\t\t\t\tlocals := client.ExpectVariablesResponse(t)\n\t\t\t\t\t\tif locals == nil {\n\t\t\t\t\t\t\tt.Fatal(\"wanted local variables, got 0\")\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmustGetByName := func(vars []dap.Variable, names ...string) (map[string]dap.Variable, error) {\n\t\t\t\t\t\t\tres := make(map[string]dap.Variable)\n\n\t\t\t\t\t\t\tfor _, n := range names {\n\t\t\t\t\t\t\t\tidx := slices.IndexFunc(vars, func(v dap.Variable) bool {\n\t\t\t\t\t\t\t\t\treturn v.Name == n\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tif idx == -1 {\n\t\t\t\t\t\t\t\t\treturn nil, fmt.Errorf(\"%s not found\", n)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tres[n] = vars[idx]\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn res, nil\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvarIdx, err := mustGetByName(locals.Body.Variables,\n\t\t\t\t\t\t\t\"jsonString\",\n\t\t\t\t\t\t\t\"jsonHash\",\n\t\t\t\t\t\t\t\"jsonAddr\",\n\t\t\t\t\t\t\t\"bytesString\",\n\t\t\t\t\t\t\t\"nonprint\",\n\t\t\t\t\t\t)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\tt.Fatal(err)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlongString := varIdx[\"jsonString\"]\n\n\t\t\t\t\t\tif strings.Trim(varIdx[\"jsonAddr\"].Value, `\"`) != longString.MemoryReference {\n\t\t\t\t\t\t\tt.Fatal(\"bad memory address\")\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgot := readVarByChunk(t, client, longString, 64)\n\t\t\t\t\t\thashed := sha256.Sum256(got.Bytes())\n\t\t\t\t\t\thashString := hex.EncodeToString(hashed[:])\n\n\t\t\t\t\t\tif strings.Trim(varIdx[\"jsonHash\"].Value, `\"`) != hashString {\n\t\t\t\t\t\t\tt.Fatal(\"we got wrong values\")\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbytes := readVarByChunk(t, client, varIdx[\"bytesString\"], 1)\n\n\t\t\t\t\t\tif bytes.String() != \"this\\nis\\nit\" {\n\t\t\t\t\t\t\tt.Fail()\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tnonp := readVarByChunk(t, client, varIdx[\"nonprint\"], 1)\n\t\t\t\t\t\twant := []byte{242, 243, 244, 245}\n\n\t\t\t\t\t\tfor i, b := range nonp.Bytes() {\n\t\t\t\t\t\t\tif want[i] != b {\n\t\t\t\t\t\t\t\tt.Fail()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tdisconnect: true,\n\t\t\t\t}})\n\t})\n}\n\nfunc readVarByChunk(t *testing.T, client *daptest.Client, v dap.Variable, chunk int) bytes.Buffer {\n\tt.Helper()\n\n\tvar got bytes.Buffer\n\n\tfor off := 0; ; off += chunk {\n\t\tcount := chunk\n\t\tclient.ReadMemoryRequest(v.MemoryReference, off, count)\n\t\trm := client.ExpectReadMemoryResponse(t)\n\n\t\tif rm.Body.Data == \"\" {\n\t\t\tbreak\n\t\t}\n\n\t\tdata, err := base64.StdEncoding.DecodeString(rm.Body.Data)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"base64 decode failed: %v\", err)\n\t\t}\n\n\t\tgot.Write(data)\n\n\t\tif len(data) < count {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn got\n}\n\ntype discard struct {\n}\n\nfunc (discard) Read([]byte) (int, error) {\n\treturn 0, nil\n}\n\nfunc (discard) Close() error {\n\treturn nil\n}\n\nfunc (discard) Write(buf []byte) (int, error) {\n\treturn len(buf), nil\n}\n\n// Helper functions for checking ErrorMessage field values.\n\nfunc checkErrorMessageId(er *dap.ErrorMessage, id int) bool {\n\treturn er != nil && er.Id == id\n}\n\nfunc checkErrorMessageFormat(er *dap.ErrorMessage, fmt string) bool {\n\tif dotdotdot := strings.Index(fmt, \"…\"); dotdotdot > 0 {\n\t\treturn er != nil && strings.HasPrefix(er.Format, fmt[:dotdotdot])\n\t}\n\treturn er != nil && er.Format == fmt\n}\n"
  },
  {
    "path": "service/dap/types.go",
    "content": "package dap\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/go-delve/delve/service/api\"\n)\n\n// Launch debug sessions support the following modes:\n//\n//\t-- [DEFAULT] \"debug\" - builds and launches debugger for specified program (similar to 'dlv debug')\n//\n//\t   Required args: program\n//\t   Optional args with default: output, cwd, noDebug\n//\t   Optional args: buildFlags, args\n//\n//\t-- \"test\" - builds and launches debugger for specified test (similar to 'dlv test')\n//\n//\t   same args as above\n//\n//\t-- \"exec\" - launches debugger for precompiled binary (similar to 'dlv exec')\n//\n//\t   Required args: program\n//\t   Optional args with default: cwd, noDebug\n//\t   Optional args: args\n//\n//\t-- \"replay\" - replays a trace generated by mozilla rr. Mozilla rr must be installed.\n//\n//\t   Required args: traceDirPath\n//\t   Optional args: args\n//\n//\t-- \"core\" - examines a core dump (only supports linux and windows core dumps).\n//\n//\t   Required args: program, coreFilePath\n//\t   Optional args: args\n//\n// TODO(hyangah): change this to 'validateLaunchMode' that checks\n// all the required/optional fields mentioned above.\nfunc isValidLaunchMode(mode string) bool {\n\tswitch mode {\n\tcase \"exec\", \"debug\", \"test\", \"replay\", \"core\":\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Default values for Launch/Attach configs.\n// Used to initialize configuration variables before decoding\n// arguments in launch/attach requests.\nvar (\n\tdefaultLaunchAttachCommonConfig = LaunchAttachCommonConfig{\n\t\tBackend:         \"default\",\n\t\tStackTraceDepth: 50,\n\t}\n\tdefaultLaunchConfig = LaunchConfig{\n\t\tMode:                     \"debug\",\n\t\tLaunchAttachCommonConfig: defaultLaunchAttachCommonConfig,\n\t}\n\tdefaultAttachConfig = AttachConfig{\n\t\tMode:                     \"local\",\n\t\tLaunchAttachCommonConfig: defaultLaunchAttachCommonConfig,\n\t}\n)\n\n// LaunchConfig is the collection of launch request attributes recognized by DAP implementation.\ntype LaunchConfig struct {\n\t// Acceptable values are:\n\t//   \"debug\": compiles your program with optimizations disabled, starts and attaches to it.\n\t//   \"test\": compiles your unit test program with optimizations disabled, starts and attaches to it.\n\t//   \"exec\": executes a precompiled binary and begins a debug session.\n\t//   \"replay\": replays an rr trace.\n\t//   \"core\": examines a core dump.\n\t//\n\t// Default is \"debug\".\n\tMode string `json:\"mode,omitempty\"`\n\n\t// Path to the program folder (or any go file within that folder)\n\t// when in `debug` or `test` mode, and to the pre-built binary file\n\t// to debug in `exec` mode.\n\t// If it is not an absolute path, it will be interpreted as a path\n\t// relative to Delve's working directory.\n\t// Required when mode is `debug`, `test`, `exec`, and `core`.\n\tProgram string `json:\"program,omitempty\"`\n\n\t// Command line arguments passed to the debugged program.\n\t// Relative paths used in Args will be interpreted as paths relative\n\t// to `cwd`.\n\tArgs []string `json:\"args,omitempty\"`\n\n\t// Working directory of the program being debugged.\n\t// If a relative path is provided, it will be interpreted as\n\t// a relative path to Delve's working directory. This is\n\t// similar to `dlv --wd` flag.\n\t//\n\t// If not specified or empty, Delve's working directory is\n\t// used by default. But for `test` mode, Delve tries to find\n\t// the test's package source directory and run tests from there.\n\t// This matches the behavior of `dlv test` and `go test`.\n\tCwd string `json:\"cwd,omitempty\"`\n\n\t// Build flags, to be passed to the Go compiler.\n\t// Relative paths used in BuildFlags will be interpreted as paths\n\t// relative to Delve's current working directory.\n\t//\n\t// It should be a string like `dlv --build-flags`, or\n\t// an array of strings that is augmented when invoking the go build or\n\t// test command through os/exec.Command API.\n\t// For example, both forms are acceptable.\n\t//    \"buildFlags\": \"-tags=integration -ldflags='-X main.Hello=World'\"\n\t// or\n\t//    \"buildFlags\": [\"-tags=integration\", \"-ldflags=-X main.Hello=World\"]\n\t// Using other types is an error.\n\tBuildFlags BuildFlags `json:\"buildFlags\"`\n\n\t// Output path for the binary of the debuggee.\n\t// Relative path is interpreted as the path relative to\n\t// the Delve's current working directory.\n\t// This is deleted after the debug session ends.\n\tOutput string `json:\"output,omitempty\"`\n\n\t// NoDebug is used to run the program without debugging.\n\tNoDebug bool `json:\"noDebug,omitempty\"`\n\n\t// TraceDirPath is the trace directory path for replay mode.\n\t// Relative path is interpreted as a path relative to Delve's\n\t// current working directory.\n\t// This is required for \"replay\" mode but unused in other modes.\n\tTraceDirPath string `json:\"traceDirPath,omitempty\"`\n\n\t// CoreFilePath is the core file path for core mode.\n\t//\n\t// This is required for \"core\" mode but unused in other modes.\n\tCoreFilePath string `json:\"coreFilePath,omitempty\"`\n\n\t// DlvCwd is the new working directory for Delve server.\n\t// If specified, the server will change its working\n\t// directory to the specified directory using os.Chdir.\n\t// Any other launch attributes with relative paths interpreted\n\t// using Delve's working directory will use this new directory.\n\t// When Delve needs to build the program (in debug/test modes),\n\t// it will run the go command from this directory as well.\n\t//\n\t// If a relative path is provided as DlvCwd, it will be\n\t// interpreted as a path relative to Delve's current working\n\t// directory.\n\tDlvCwd string `json:\"dlvCwd,omitempty\"`\n\n\t// Env specifies optional environment variables for Delve server\n\t// in addition to the environment variables Delve initially\n\t// started with.\n\t// Variables with 'nil' values can be used to unset the named\n\t// environment variables.\n\t// Values are interpreted verbatim. Variable substitution or\n\t// reference to other environment variables is not supported.\n\tEnv map[string]*string `json:\"env,omitempty\"`\n\n\t// The output mode specifies how to handle the program's output.\n\tOutputMode string `json:\"outputMode,omitempty\"`\n\n\tStdinFrom string `json:\"stdinFrom,omitempty\"` // Redirects stadard input to a file\n\tStdoutTo  string `json:\"stdoutTo,omitempty\"`  // Redirects standard output to a file\n\tStderrTo  string `json:\"stderrTo,omitempty\"`  // Redirects standard error to a file\n\n\tLaunchAttachCommonConfig\n}\n\n// LaunchAttachCommonConfig is the attributes common in both launch/attach requests.\ntype LaunchAttachCommonConfig struct {\n\t// FollowExec enables or disables follow exec mode.\n\tFollowExec bool `json:\"followExec,omitempty\"`\n\n\t// FollowExecRegex is a regular expression. Only child processes with a command line matching the regular expression will be followed.\n\tFollowExecRegex string `json:\"followExecRegex,omitempty\"`\n\n\t// Automatically stop program after launch or attach.\n\tStopOnEntry bool `json:\"stopOnEntry,omitempty\"`\n\n\t// Backend used for debugging. See `dlv backend` for allowed values.\n\t// Default is \"default\".\n\tBackend string `json:\"backend,omitempty\"`\n\n\t// Maximum depth of stack trace to return.\n\t// Default is 50.\n\tStackTraceDepth int `json:\"stackTraceDepth,omitempty\"`\n\n\t// Boolean value to indicate whether global package variables\n\t// should be shown in the variables pane or not.\n\tShowGlobalVariables bool `json:\"showGlobalVariables,omitempty\"`\n\n\t// Boolean value to indicate whether registers should be shown\n\t// in the variables pane or not.\n\tShowRegisters bool `json:\"showRegisters,omitempty\"`\n\n\t// Boolean value to indicate whether system goroutines\n\t// should be hidden from the call stack view.\n\tHideSystemGoroutines bool `json:\"hideSystemGoroutines,omitempty\"`\n\n\t// String value to indicate which system goroutines should be\n\t// shown in the call stack view. See filtering documentation:\n\t// https://github.com/go-delve/delve/blob/master/Documentation/cli/README.md#goroutines\n\tGoroutineFilters string `json:\"goroutineFilters,omitempty\"`\n\n\t// Array of string values indicating the keys of pprof labels to show as a\n\t// goroutine name in the threads view. If the array has one element, only\n\t// that label's value will be shown; otherwise, each of the labels will be\n\t// shown as \"key:value\". To show all labels, specify the single element \"*\".\n\tShowPprofLabels []string `json:\"showPprofLabels,omitempty\"`\n\n\t// An array of mappings from a local path (client) to the remote path (debugger).\n\t// This setting is useful when working in a file system with symbolic links,\n\t// running remote debugging, or debugging an executable compiled externally.\n\t// The debug adapter will replace the local path with the remote path in all of the calls.\n\t// See also Documentation/cli/substitutepath.md.\n\tSubstitutePath []SubstitutePath `json:\"substitutePath,omitempty\"`\n}\n\n// SubstitutePath defines a mapping from a local path to the remote path.\n// Both 'from' and 'to' must be specified and non-null.\n// Empty values can be used to add or remove absolute path prefixes when mapping.\n// For example, mapping with empty 'to' can be used to work with binaries with trimmed paths.\ntype SubstitutePath struct {\n\t// The local path to be replaced when passing paths to the debugger.\n\tFrom string `json:\"from,omitempty\"`\n\t// The remote path to be replaced when passing paths back to the client.\n\tTo string `json:\"to,omitempty\"`\n}\n\nfunc (m *SubstitutePath) UnmarshalJSON(data []byte) error {\n\t// use custom unmarshal to check if both from/to are set.\n\ttype tmpType struct {\n\t\tFrom *string\n\t\tTo   *string\n\t}\n\tvar tmp tmpType\n\n\tif err := json.Unmarshal(data, &tmp); err != nil {\n\t\tif _, ok := err.(*json.UnmarshalTypeError); ok {\n\t\t\treturn fmt.Errorf(`cannot use %s as 'substitutePath' of type {\"from\":string, \"to\":string}`, data)\n\t\t}\n\t\treturn err\n\t}\n\tif tmp.From == nil || tmp.To == nil {\n\t\treturn errors.New(\"'substitutePath' requires both 'from' and 'to' entries\")\n\t}\n\t*m = SubstitutePath{*tmp.From, *tmp.To}\n\treturn nil\n}\n\n// AttachConfig is the collection of attach request attributes recognized by DAP implementation.\n// 'processId' and 'waitFor' are mutually exclusive, and can't be specified at the same time.\ntype AttachConfig struct {\n\t// Acceptable values are:\n\t//   \"local\": attaches to the local process with the given ProcessID.\n\t//   \"remote\": expects the debugger to already be running to \"attach\" to an in-progress debug session.\n\t//\n\t// Default is \"local\".\n\tMode string `json:\"mode\"`\n\n\t// The numeric ID of the process to be debugged.\n\tProcessID int `json:\"processId,omitempty\"`\n\n\t// Wait for a process with a name beginning with this prefix.\n\tAttachWaitFor string `json:\"waitFor,omitempty\"`\n\n\t// GuessSubstitutePath is used to automatically guess SubstitutePath if it\n\t// is not specified explicitly. It should be copied from the output of\n\t// 'dlv substitute-path-guess-helper'.\n\tGuessSubstitutePath *api.GuessSubstitutePathIn `json:\"guessSubstitutePath,omitempty\"`\n\n\tLaunchAttachCommonConfig\n}\n\n// unmarshalLaunchAttachArgs wraps unmarshaling of launch/attach request's\n// arguments attribute. Upon unmarshal failure, it returns an error massaged\n// to be suitable for end-users.\nfunc unmarshalLaunchAttachArgs(input json.RawMessage, config any) error {\n\tif err := json.Unmarshal(input, config); err != nil {\n\t\tif uerr, ok := err.(*json.UnmarshalTypeError); ok {\n\t\t\t// Format json.UnmarshalTypeError error string in our own way. E.g.,\n\t\t\t//   \"json: cannot unmarshal number into Go struct field LaunchArgs.substitutePath of type dap.SubstitutePath\"\n\t\t\t//   => \"cannot unmarshal number into 'substitutePath' of type {from:string, to:string}\"\n\t\t\t//   \"json: cannot unmarshal number into Go struct field LaunchArgs.program of type string\" (go1.16)\n\t\t\t//   => \"cannot unmarshal number into 'program' of type string\"\n\t\t\ttyp := uerr.Type.String()\n\t\t\tif uerr.Field == \"substitutePath\" {\n\t\t\t\ttyp = `{\"from\":string, \"to\":string}`\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"cannot unmarshal %v into %q of type %v\", uerr.Value, uerr.Field, typ)\n\t\t}\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc prettyPrint(config any) string {\n\tpretty, err := json.MarshalIndent(config, \"\", \"\\t\")\n\tif err != nil {\n\t\treturn fmt.Sprintf(\"%#v\", config)\n\t}\n\treturn string(pretty)\n}\n\n// BuildFlags is either string or []string.\ntype BuildFlags struct {\n\tvalue any\n}\n\nfunc (s *BuildFlags) UnmarshalJSON(b []byte) error {\n\tif v := string(b); v == \"\" || v == \"null\" {\n\t\ts.value = nil\n\t\treturn nil\n\t}\n\tvar strs []string\n\tif err := json.Unmarshal(b, &strs); err == nil {\n\t\ts.value = strs\n\t\treturn nil\n\t}\n\tvar str string\n\tif err := json.Unmarshal(b, &str); err != nil {\n\t\ts.value = nil\n\t\tif uerr, ok := err.(*json.UnmarshalTypeError); ok {\n\t\t\treturn fmt.Errorf(`cannot unmarshal %v into \"buildFlags\" of type []string or string`, uerr.Value)\n\t\t}\n\t\treturn err\n\t}\n\ts.value = str\n\treturn nil\n}\n"
  },
  {
    "path": "service/debugger/debugger.go",
    "content": "package debugger\n\nimport (\n\t\"debug/dwarf\"\n\t\"debug/elf\"\n\t\"debug/macho\"\n\t\"debug/pe\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"slices\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/gobuild\"\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/locspec\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/pkg/proc/core\"\n\t\"github.com/go-delve/delve/pkg/proc/gdbserial\"\n\t\"github.com/go-delve/delve/pkg/proc/native\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\nvar (\n\t// ErrCanNotRestart is returned when the target cannot be restarted.\n\t// This is returned for targets that have been attached to, or when\n\t// debugging core files.\n\tErrCanNotRestart = errors.New(\"can not restart this target\")\n\n\t// ErrNotRecording is returned when StopRecording is called while the\n\t// debugger is not recording the target.\n\tErrNotRecording = errors.New(\"debugger is not recording\")\n\n\t// ErrCoreDumpInProgress is returned when a core dump is already in progress.\n\tErrCoreDumpInProgress = errors.New(\"core dump in progress\")\n\n\t// ErrCoreDumpNotSupported is returned when core dumping is not supported\n\tErrCoreDumpNotSupported = errors.New(\"core dumping not supported\")\n\n\t// ErrNotImplementedWithMultitarget is returned for operations that are not implemented with multiple targets\n\tErrNotImplementedWithMultitarget = errors.New(\"not implemented for multiple targets\")\n)\n\n// Debugger service.\n//\n// Debugger provides a higher level of\n// abstraction over proc.Process.\n// It handles converting from internal types to\n// the types expected by clients. It also handles\n// functionality needed by clients, but not needed in\n// lower lever packages such as proc.\ntype Debugger struct {\n\tconfig *Config\n\t// arguments to launch a new process.\n\tprocessArgs []string\n\n\ttargetMutex sync.Mutex\n\ttarget      *proc.TargetGroup\n\n\tlog logflags.Logger\n\n\trunning      bool\n\trunningMutex sync.Mutex\n\n\tstopRecording func() error\n\trecordMutex   sync.Mutex\n\n\tdumpState proc.DumpState\n\n\tbreakpointIDCounter int\n}\n\ntype ExecuteKind int\n\nconst (\n\tExecutingExistingFile = ExecuteKind(iota)\n\tExecutingGeneratedFile\n\tExecutingGeneratedTest\n\tExecutingOther\n)\n\n// Config provides the configuration to start a Debugger.\n//\n// Only one of ProcessArgs or AttachPid should be specified. If ProcessArgs is\n// provided, a new process will be launched. Otherwise, the debugger will try\n// to attach to an existing process with AttachPid.\ntype Config struct {\n\t// WorkingDir is working directory of the new process. This field is used\n\t// only when launching a new process.\n\tWorkingDir string\n\n\t// AttachPid is the PID of an existing process to which the debugger should\n\t// attach.\n\tAttachPid int\n\t// If AttachWaitFor is set the debugger will wait for a process with a name\n\t// starting with WaitFor and attach to it.\n\tAttachWaitFor string\n\t// AttachWaitForInterval is the time (in milliseconds) that the debugger\n\t// waits between checks for WaitFor.\n\tAttachWaitForInterval float64\n\t// AttachWaitForDuration is the time (in milliseconds) that the debugger\n\t// waits for WaitFor.\n\tAttachWaitForDuration float64\n\n\t// CoreFile specifies the path to the core dump to open.\n\tCoreFile string\n\n\t// Backend specifies the debugger backend.\n\tBackend string\n\n\t// Foreground lets target process access stdin.\n\tForeground bool\n\n\t// DebugInfoDirectories is the list of directories to look for\n\t// when resolving external debug info files.\n\tDebugInfoDirectories []string\n\n\t// CheckGoVersion is true if the debugger should check the version of Go\n\t// used to compile the executable and refuse to work on incompatible\n\t// versions.\n\tCheckGoVersion bool\n\n\t// TTY is passed along to the target process on creation. Used to specify a\n\t// TTY for that process.\n\tTTY string\n\n\t// Packages contains the packages that we are debugging.\n\tPackages []string\n\n\t// BuildFlags contains the flags passed to the compiler, it can either be a\n\t// string, which will be processed by config.SplitQuotedFields or a []string\n\tBuildFlags any\n\n\t// ExecuteKind contains the kind of the executed program.\n\tExecuteKind ExecuteKind\n\n\t// Stdin Redirect file path for stdin\n\tStdin string\n\n\t// Redirects specifies redirect rules for stdout\n\tStdout proc.OutputRedirect\n\n\t// Redirects specifies redirect rules for stderr\n\tStderr proc.OutputRedirect\n\n\t// DisableASLR disables ASLR\n\tDisableASLR bool\n\n\tRrOnProcessPid int\n\tRrDelOnDetach  bool\n}\n\n// New creates a new Debugger. ProcessArgs specify the commandline arguments for the\n// new process.\nfunc New(config *Config, processArgs []string) (*Debugger, error) {\n\tlogger := logflags.DebuggerLogger()\n\td := &Debugger{\n\t\tconfig:      config,\n\t\tprocessArgs: processArgs,\n\t\tlog:         logger,\n\t}\n\n\t// Create the process by either attaching or launching.\n\tswitch {\n\tcase d.config.AttachPid > 0 || d.config.AttachWaitFor != \"\":\n\t\td.log.Infof(\"attaching to pid %d\", d.config.AttachPid)\n\t\tpath := \"\"\n\t\tif len(d.processArgs) > 0 {\n\t\t\tpath = d.processArgs[0]\n\t\t}\n\t\tvar waitFor *proc.WaitFor\n\t\tif d.config.AttachWaitFor != \"\" {\n\t\t\twaitFor = &proc.WaitFor{\n\t\t\t\tName:     d.config.AttachWaitFor,\n\t\t\t\tInterval: time.Duration(d.config.AttachWaitForInterval * float64(time.Millisecond)),\n\t\t\t\tDuration: time.Duration(d.config.AttachWaitForDuration * float64(time.Millisecond)),\n\t\t\t}\n\t\t}\n\t\tvar err error\n\t\td.target, err = d.Attach(d.config.AttachPid, path, waitFor)\n\t\tif err != nil {\n\t\t\terr = go11DecodeErrorCheck(err)\n\t\t\terr = noDebugErrorWarning(err)\n\t\t\treturn nil, attachErrorMessage(d.config.AttachPid, err)\n\t\t}\n\t\td.config.AttachPid = d.target.Selected.Pid()\n\n\tcase d.config.CoreFile != \"\":\n\t\tvar err error\n\t\tswitch d.config.Backend {\n\t\tcase \"rr\":\n\t\t\td.log.Infof(\"opening trace %s\", d.config.CoreFile)\n\t\t\td.target, err = gdbserial.Replay(d.config.CoreFile, false, d.config.RrDelOnDetach, d.config.DebugInfoDirectories, d.config.RrOnProcessPid, \"\")\n\t\tdefault:\n\t\t\td.log.Infof(\"opening core file %s (executable %s)\", d.config.CoreFile, d.processArgs[0])\n\t\t\td.target, err = core.OpenCore(d.config.CoreFile, d.processArgs[0], d.config.DebugInfoDirectories)\n\t\t}\n\t\tif err != nil {\n\t\t\terr = go11DecodeErrorCheck(err)\n\t\t\treturn nil, err\n\t\t}\n\t\tif err := d.checkGoVersion(); err != nil {\n\t\t\td.target.Detach(true)\n\t\t\treturn nil, err\n\t\t}\n\n\tdefault:\n\t\td.log.Infof(\"launching process with args: %v\", d.processArgs)\n\t\tvar err error\n\t\td.target, err = d.Launch(d.processArgs, d.config.WorkingDir)\n\t\tif err != nil {\n\t\t\tif !errors.Is(err, &proc.ErrUnsupportedArch{}) {\n\t\t\t\terr = go11DecodeErrorCheck(err)\n\t\t\t\terr = noDebugErrorWarning(err)\n\t\t\t\terr = fmt.Errorf(\"could not launch process: %s\", err)\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\tif err := d.checkGoVersion(); err != nil {\n\t\t\td.target.Detach(true)\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn d, nil\n}\n\n// canRestart returns true if the target was started with Launch and can be restarted\nfunc (d *Debugger) canRestart() bool {\n\tswitch {\n\tcase d.config.AttachPid > 0:\n\t\treturn false\n\tcase d.config.CoreFile != \"\":\n\t\treturn false\n\tdefault:\n\t\treturn true\n\t}\n}\n\nfunc (d *Debugger) checkGoVersion() error {\n\tif d.isRecording() {\n\t\t// do not do anything if we are still recording\n\t\treturn nil\n\t}\n\tproducer := d.target.Selected.BinInfo().Producer()\n\tif producer == \"\" {\n\t\treturn nil\n\t}\n\tdwarfVer := d.target.Selected.BinInfo().DwarfVersion()\n\treturn goversion.Compatible(dwarfVer, producer, !d.config.CheckGoVersion)\n}\n\nfunc (d *Debugger) TargetGoVersion() string {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Selected.BinInfo().Producer()\n}\n\n// Launch will start a process with the given args and working directory.\nfunc (d *Debugger) Launch(processArgs []string, wd string) (*proc.TargetGroup, error) {\n\tfullpath, err := verifyBinaryFormat(processArgs[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tprocessArgs[0] = fullpath\n\n\tlaunchFlags := proc.LaunchFlags(0)\n\tif d.config.Foreground {\n\t\tlaunchFlags |= proc.LaunchForeground\n\t}\n\tif d.config.DisableASLR {\n\t\tlaunchFlags |= proc.LaunchDisableASLR\n\t}\n\n\tswitch d.config.Backend {\n\tcase \"native\":\n\t\treturn native.Launch(processArgs, wd, launchFlags, d.config.DebugInfoDirectories, d.config.TTY, d.config.Stdin, d.config.Stdout, d.config.Stderr)\n\tcase \"lldb\":\n\t\treturn betterGdbserialLaunchError(gdbserial.LLDBLaunch(processArgs, wd, launchFlags, d.config.DebugInfoDirectories, d.config.TTY, [3]string{d.config.Stdin, d.config.Stdout.Path, d.config.Stderr.Path}))\n\tcase \"rr\":\n\t\tif d.target != nil {\n\t\t\t// restart should not call us if the backend is 'rr'\n\t\t\tpanic(\"internal error: call to Launch with rr backend and target already exists\")\n\t\t}\n\n\t\trun, stop, err := gdbserial.RecordAsync(processArgs, wd, false, d.config.Stdin, d.config.Stdout, d.config.Stderr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// let the initialization proceed but hold the targetMutex lock so that\n\t\t// any other request to debugger will block except State(nowait=true) and\n\t\t// Command(halt).\n\t\td.targetMutex.Lock()\n\t\td.recordingStart(stop)\n\n\t\tgo func() {\n\t\t\tdefer d.targetMutex.Unlock()\n\n\t\t\tgrp, err := d.recordingRun(run)\n\t\t\tif err != nil {\n\t\t\t\td.log.Errorf(\"could not record target: %v\", err)\n\t\t\t\t// this is ugly, but we can't respond to any client requests at this\n\t\t\t\t// point, so it's better if we die.\n\t\t\t\tos.Exit(1)\n\t\t\t}\n\t\t\td.recordingDone()\n\t\t\td.target = grp\n\t\t\tif err := d.checkGoVersion(); err != nil {\n\t\t\t\td.log.Error(err)\n\t\t\t\terr := d.target.Detach(true)\n\t\t\t\tif err != nil {\n\t\t\t\t\td.log.Errorf(\"Error detaching from target: %v\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t}()\n\t\treturn nil, nil\n\n\tcase \"default\":\n\t\tif runtime.GOOS == \"darwin\" {\n\t\t\treturn betterGdbserialLaunchError(gdbserial.LLDBLaunch(processArgs, wd, launchFlags, d.config.DebugInfoDirectories, d.config.TTY, [3]string{d.config.Stdin, d.config.Stdout.Path, d.config.Stderr.Path}))\n\t\t}\n\t\treturn native.Launch(processArgs, wd, launchFlags, d.config.DebugInfoDirectories, d.config.TTY, d.config.Stdin, d.config.Stdout, d.config.Stderr)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown backend %q\", d.config.Backend)\n\t}\n}\n\nfunc (d *Debugger) recordingStart(stop func() error) {\n\td.recordMutex.Lock()\n\td.stopRecording = stop\n\td.recordMutex.Unlock()\n}\n\nfunc (d *Debugger) recordingDone() {\n\td.recordMutex.Lock()\n\td.stopRecording = nil\n\td.recordMutex.Unlock()\n}\n\nfunc (d *Debugger) isRecording() bool {\n\td.recordMutex.Lock()\n\tdefer d.recordMutex.Unlock()\n\treturn d.stopRecording != nil\n}\n\nfunc (d *Debugger) recordingRun(run func() (string, error)) (*proc.TargetGroup, error) {\n\ttracedir, err := run()\n\tif err != nil && tracedir == \"\" {\n\t\treturn nil, err\n\t}\n\n\treturn gdbserial.Replay(tracedir, false, d.config.RrDelOnDetach, d.config.DebugInfoDirectories, 0, strings.Join(d.processArgs, \" \"))\n}\n\n// Attach will attach to the process specified by 'pid'.\nfunc (d *Debugger) Attach(pid int, path string, waitFor *proc.WaitFor) (*proc.TargetGroup, error) {\n\tswitch d.config.Backend {\n\tcase \"native\":\n\t\treturn native.Attach(pid, waitFor, d.config.DebugInfoDirectories)\n\tcase \"lldb\":\n\t\treturn betterGdbserialLaunchError(gdbserial.LLDBAttach(pid, path, waitFor, d.config.DebugInfoDirectories))\n\tcase \"default\":\n\t\tif runtime.GOOS == \"darwin\" {\n\t\t\treturn betterGdbserialLaunchError(gdbserial.LLDBAttach(pid, path, waitFor, d.config.DebugInfoDirectories))\n\t\t}\n\t\treturn native.Attach(pid, waitFor, d.config.DebugInfoDirectories)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown backend %q\", d.config.Backend)\n\t}\n}\n\nvar errMacOSBackendUnavailable = errors.New(\"debugserver or lldb-server not found: install Xcode's command line tools or lldb-server\")\n\nfunc betterGdbserialLaunchError(p *proc.TargetGroup, err error) (*proc.TargetGroup, error) {\n\tif runtime.GOOS != \"darwin\" {\n\t\treturn p, err\n\t}\n\tif !errors.Is(err, &gdbserial.ErrBackendUnavailable{}) {\n\t\treturn p, err\n\t}\n\n\treturn p, errMacOSBackendUnavailable\n}\n\n// ProcessPid returns the PID of the process\n// the debugger is debugging.\nfunc (d *Debugger) ProcessPid() int {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Selected.Pid()\n}\n\n// LastModified returns the time that the process' executable was last\n// modified.\nfunc (d *Debugger) LastModified() time.Time {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Selected.BinInfo().LastModified()\n}\n\n// functionReturnLocationsInternal is same as FunctionReturnLocations\n// except that it does not have a lock and unlock as its called from\n// within the callback which has already acquired a lock.\nfunc (d *Debugger) functionReturnLocationsInternal(fnName string) ([]uint64, error) {\n\tif len(d.target.Targets()) > 1 {\n\t\treturn nil, ErrNotImplementedWithMultitarget\n\t}\n\n\tvar (\n\t\tp = d.target.Selected\n\t\tg = p.SelectedGoroutine()\n\t)\n\n\tfns, err := p.BinInfo().FindFunction(fnName)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar addrs []uint64\n\n\tfor _, fn := range fns {\n\t\tvar regs proc.Registers\n\t\tmem := p.Memory()\n\t\tif g != nil && g.Thread != nil {\n\t\t\tregs, _ = g.Thread.Registers()\n\t\t}\n\t\tinstructions, err := proc.Disassemble(mem, regs, p.Breakpoints(), p.BinInfo(), fn.Entry, fn.End)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tfor _, instruction := range instructions {\n\t\t\tif instruction.IsRet() {\n\t\t\t\taddrs = append(addrs, instruction.Loc.PC)\n\t\t\t}\n\t\t}\n\t\taddrs = append(addrs, proc.FindDeferReturnCalls(instructions)...)\n\t}\n\n\treturn addrs, nil\n}\n\n// FunctionReturnLocations returns all return locations\n// for the given function, a list of addresses corresponding\n// to 'ret' or 'call runtime.deferreturn'.\nfunc (d *Debugger) FunctionReturnLocations(fnName string) ([]uint64, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.functionReturnLocationsInternal(fnName)\n}\n\n// Detach detaches from the target process.\n// If `kill` is true we will kill the process after\n// detaching.\nfunc (d *Debugger) Detach(kill bool) error {\n\td.log.Debug(\"detaching\")\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.detach(kill)\n}\n\nfunc (d *Debugger) detach(kill bool) error {\n\tif d.config.AttachPid == 0 {\n\t\tkill = true\n\t}\n\treturn d.target.Detach(kill)\n}\n\n// Restart will restart the target process, first killing\n// and then exec'ing it again.\n// If the target process is a recording it will restart it from the given\n// position. If pos starts with 'c' it's a checkpoint ID, otherwise it's an\n// event number. If resetArgs is true, newArgs will replace the process args.\nfunc (d *Debugger) Restart(rerecord bool, pos string, resetArgs bool, newArgs []string, newRedirects [3]string, rebuild bool) ([]api.DiscardedBreakpoint, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\trecorded, _ := d.target.Recorded()\n\tif recorded && !rerecord {\n\t\td.target.ResumeNotify(nil)\n\t\treturn nil, d.target.Restart(pos)\n\t}\n\n\tif pos != \"\" {\n\t\treturn nil, proc.ErrNotRecorded\n\t}\n\n\tif !d.canRestart() {\n\t\treturn nil, ErrCanNotRestart\n\t}\n\n\tif !resetArgs && (d.config.Stdout.File != nil || d.config.Stderr.File != nil) {\n\t\treturn nil, ErrCanNotRestart\n\t}\n\n\tif err := d.detach(true); err != nil {\n\t\treturn nil, err\n\t}\n\tif resetArgs {\n\t\td.processArgs = append([]string{d.processArgs[0]}, newArgs...)\n\t\td.config.Stdin = newRedirects[0]\n\t\td.config.Stdout = proc.OutputRedirect{Path: newRedirects[1]}\n\t\td.config.Stderr = proc.OutputRedirect{Path: newRedirects[2]}\n\t}\n\tvar grp *proc.TargetGroup\n\tvar err error\n\n\tif rebuild {\n\t\tswitch d.config.ExecuteKind {\n\t\tcase ExecutingGeneratedFile:\n\t\t\terr = gobuild.GoBuild(d.processArgs[0], d.config.Packages, d.config.BuildFlags)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"could not rebuild process: %s\", err)\n\t\t\t}\n\t\tcase ExecutingGeneratedTest:\n\t\t\terr = gobuild.GoTestBuild(d.processArgs[0], d.config.Packages, d.config.BuildFlags)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"could not rebuild process: %s\", err)\n\t\t\t}\n\t\tdefault:\n\t\t\t// We cannot build a process that we didn't start, because we don't know how it was built.\n\t\t\treturn nil, errors.New(\"cannot rebuild a binary\")\n\t\t}\n\t}\n\n\tif recorded {\n\t\trun, stop, err2 := gdbserial.RecordAsync(d.processArgs, d.config.WorkingDir, false, d.config.Stdin, d.config.Stdout, d.config.Stderr)\n\t\tif err2 != nil {\n\t\t\treturn nil, err2\n\t\t}\n\n\t\td.recordingStart(stop)\n\t\tgrp, err = d.recordingRun(run)\n\t\td.recordingDone()\n\t} else {\n\t\tgrp, err = d.Launch(d.processArgs, d.config.WorkingDir)\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"could not launch process: %s\", err)\n\t}\n\n\tdiscarded := []api.DiscardedBreakpoint{}\n\tproc.Restart(grp, d.target, func(oldBp *proc.LogicalBreakpoint, err error) {\n\t\tdiscarded = append(discarded, api.DiscardedBreakpoint{Breakpoint: api.ConvertLogicalBreakpoint(oldBp), Reason: err.Error()})\n\t})\n\td.target = grp\n\treturn discarded, nil\n}\n\n// State returns the current state of the debugger.\nfunc (d *Debugger) State(nowait bool) (*api.DebuggerState, error) {\n\tif d.IsRunning() && nowait {\n\t\treturn &api.DebuggerState{Running: true}, nil\n\t}\n\n\tif d.isRecording() && nowait {\n\t\treturn &api.DebuggerState{Recording: true}, nil\n\t}\n\n\td.dumpState.Mutex.Lock()\n\tif d.dumpState.Dumping && nowait {\n\t\treturn &api.DebuggerState{CoreDumping: true}, nil\n\t}\n\td.dumpState.Mutex.Unlock()\n\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.state(nil, false)\n}\n\nfunc (d *Debugger) state(retLoadCfg *proc.LoadConfig, withBreakpointInfo bool) (*api.DebuggerState, error) {\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar (\n\t\tstate     *api.DebuggerState\n\t\tgoroutine *api.Goroutine\n\t)\n\n\ttgt := d.target.Selected\n\n\tif tgt.SelectedGoroutine() != nil {\n\t\tgoroutine = api.ConvertGoroutine(tgt, tgt.SelectedGoroutine())\n\t}\n\n\texited := false\n\tif _, err := tgt.Valid(); err != nil {\n\t\tvar errProcessExited proc.ErrProcessExited\n\t\texited = errors.As(err, &errProcessExited)\n\t}\n\n\tstate = &api.DebuggerState{\n\t\tPid:               tgt.Pid(),\n\t\tTargetCommandLine: tgt.CmdLine,\n\t\tSelectedGoroutine: goroutine,\n\t\tExited:            exited,\n\t}\n\n\tfor _, thread := range d.target.ThreadList() {\n\t\tth := api.ConvertThread(thread, d.ConvertThreadBreakpoint(thread))\n\n\t\tth.CallReturn = thread.Common().CallReturn\n\t\tif retLoadCfg != nil {\n\t\t\tth.ReturnValues = api.ConvertVars(thread.Common().ReturnValues(*retLoadCfg))\n\t\t}\n\n\t\tif withBreakpointInfo {\n\t\t\terr := d.collectBreakpointInformation(th, thread)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\n\t\tstate.Threads = append(state.Threads, th)\n\t\tif thread.ThreadID() == tgt.CurrentThread().ThreadID() {\n\t\t\tstate.CurrentThread = th\n\t\t}\n\t}\n\n\tstate.NextInProgress = d.target.HasSteppingBreakpoints()\n\n\tif recorded, _ := d.target.Recorded(); recorded {\n\t\tstate.When, _ = d.target.When()\n\t}\n\n\tt := proc.ValidTargets{Group: d.target}\n\tfor t.Next() {\n\t\tfor _, bp := range t.Breakpoints().WatchOutOfScope {\n\t\t\tabp := api.ConvertLogicalBreakpoint(bp.Logical)\n\t\t\tapi.ConvertPhysicalBreakpoints(abp, bp.Logical, []int{t.Pid()}, []*proc.Breakpoint{bp})\n\t\t\tstate.WatchOutOfScope = append(state.WatchOutOfScope, abp)\n\t\t}\n\t}\n\n\tif sr := d.target.Selected.StopReason; sr != proc.StopUnknown {\n\t\tstate.StopReason = sr.String()\n\t}\n\n\treturn state, nil\n}\n\n// CreateBreakpoint creates a breakpoint using information from the provided `requestedBp`.\n// This function accepts several different ways of specifying where and how to create the\n// breakpoint that has been requested. Any error encountered during the attempt to set the\n// breakpoint will be returned to the caller.\n//\n// The ways of specifying a breakpoint are listed below in the order they are considered by\n// this function:\n//\n// - If requestedBp.TraceReturn is true then it is expected that\n// requestedBp.Addrs will contain the list of return addresses\n// supplied by the caller.\n//\n// - If requestedBp.File is not an empty string the breakpoint\n// will be created on the specified file:line location\n//\n// - If requestedBp.FunctionName is not an empty string\n// the breakpoint will be created on the specified function:line\n// location.\n//\n// - If requestedBp.Addrs is filled it will create a logical breakpoint\n// corresponding to all specified addresses.\n//\n// - Otherwise the value specified by arg.Breakpoint.Addr will be used.\n//\n// Note that this method will use the first successful method in order to\n// create a breakpoint, so mixing different fields will not result is multiple\n// breakpoints being set.\n//\n// If LocExpr is specified it will be used, along with substitutePathRules,\n// to re-enable the breakpoint after it is disabled.\n//\n// If suspended is true a logical breakpoint will be created even if the\n// location can not be found, the backend will attempt to enable the\n// breakpoint every time a new plugin is loaded.\nfunc (d *Debugger) CreateBreakpoint(requestedBp *api.Breakpoint, locExpr string, substitutePathRules [][2]string, suspended bool) (*api.Breakpoint, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tvar (\n\t\tsetbp proc.SetBreakpoint\n\t\terr   error\n\t)\n\n\tif requestedBp.Name != \"\" {\n\t\tif d.findBreakpointByName(requestedBp.Name) != nil {\n\t\t\treturn nil, errors.New(\"breakpoint name already exists\")\n\t\t}\n\t}\n\n\tif lbp := d.target.LogicalBreakpoints[requestedBp.ID]; lbp != nil {\n\t\tabp := d.convertBreakpoint(lbp)\n\t\treturn abp, proc.BreakpointExistsError{File: lbp.File, Line: lbp.Line}\n\t}\n\n\tswitch {\n\tcase requestedBp.TraceReturn:\n\t\tif len(d.target.Targets()) != 1 {\n\t\t\treturn nil, ErrNotImplementedWithMultitarget\n\t\t}\n\t\tsetbp.PidAddrs = []proc.PidAddr{{Pid: d.target.Selected.Pid(), Addr: requestedBp.Addr}}\n\tcase len(requestedBp.File) > 0:\n\t\tfileName := requestedBp.File\n\t\tif runtime.GOOS == \"windows\" {\n\t\t\t// Accept fileName which is case-insensitive and slash-insensitive match\n\t\t\tfileNameNormalized := strings.ToLower(filepath.ToSlash(fileName))\n\t\t\tt := proc.ValidTargets{Group: d.target}\n\t\tcaseInsensitiveSearch:\n\t\t\tfor t.Next() {\n\t\t\t\tfor _, symFile := range t.BinInfo().Sources {\n\t\t\t\t\tif fileNameNormalized == strings.ToLower(filepath.ToSlash(symFile)) {\n\t\t\t\t\t\tfileName = symFile\n\t\t\t\t\t\tbreak caseInsensitiveSearch\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tsetbp.File = fileName\n\t\tsetbp.Line = requestedBp.Line\n\tcase len(requestedBp.FunctionName) > 0:\n\t\tsetbp.FunctionName = requestedBp.FunctionName\n\t\tsetbp.Line = requestedBp.Line\n\tcase len(requestedBp.Addrs) > 0:\n\t\tsetbp.PidAddrs = make([]proc.PidAddr, len(requestedBp.Addrs))\n\t\tif len(d.target.Targets()) == 1 {\n\t\t\tpid := d.target.Selected.Pid()\n\t\t\tfor i, addr := range requestedBp.Addrs {\n\t\t\t\tsetbp.PidAddrs[i] = proc.PidAddr{Pid: pid, Addr: addr}\n\t\t\t}\n\t\t} else {\n\t\t\tif len(requestedBp.Addrs) != len(requestedBp.AddrPid) {\n\t\t\t\treturn nil, errors.New(\"mismatched length in addrs and addrpid\")\n\t\t\t}\n\t\t\tfor i, addr := range requestedBp.Addrs {\n\t\t\t\tsetbp.PidAddrs[i] = proc.PidAddr{Pid: requestedBp.AddrPid[i], Addr: addr}\n\t\t\t}\n\t\t}\n\tdefault:\n\t\tif requestedBp.Addr != 0 {\n\t\t\tsetbp.PidAddrs = []proc.PidAddr{{Pid: d.target.Selected.Pid(), Addr: requestedBp.Addr}}\n\t\t}\n\t}\n\n\tif locExpr != \"\" {\n\t\tloc, err := locspec.Parse(locExpr)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tsetbp.Expr = func(t *proc.Target) []uint64 {\n\t\t\tlocs, _, err := loc.Find(t, d.processArgs, nil, locExpr, false, substitutePathRules)\n\t\t\tif err != nil || len(locs) != 1 {\n\t\t\t\tlogflags.DebuggerLogger().Debugf(\"could not evaluate breakpoint expression %q: %v (number of results %d)\", locExpr, err, len(locs))\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn locs[0].PCs\n\t\t}\n\t\tsetbp.ExprString = locExpr\n\t}\n\n\tid := requestedBp.ID\n\n\tif id <= 0 {\n\t\td.breakpointIDCounter++\n\t\tid = d.breakpointIDCounter\n\t} else {\n\t\td.breakpointIDCounter = id\n\t}\n\n\tlbp := &proc.LogicalBreakpoint{LogicalID: id, HitCount: make(map[int64]uint64)}\n\td.target.LogicalBreakpoints[id] = lbp\n\n\terr = d.copyLogicalBreakpointInfo(lbp, requestedBp)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlbp.Set = setbp\n\n\tif lbp.Set.Expr != nil {\n\t\taddrs := lbp.Set.Expr(d.target.Selected)\n\t\tif len(addrs) > 0 {\n\t\t\tf, l, fn := d.target.Selected.BinInfo().PCToLine(addrs[0])\n\t\t\tlbp.File = f\n\t\t\tlbp.Line = l\n\t\t\tif fn != nil {\n\t\t\t\tlbp.FunctionName = fn.Name\n\t\t\t}\n\t\t}\n\t}\n\n\terr = d.target.SetBreakpointEnabled(lbp, true)\n\tif err != nil {\n\t\tif suspended {\n\t\t\tlogflags.DebuggerLogger().Debugf(\"could not enable new breakpoint: %v (breakpoint will be suspended)\", err)\n\t\t} else {\n\t\t\tdelete(d.target.LogicalBreakpoints, lbp.LogicalID)\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tcreatedBp := d.convertBreakpoint(lbp)\n\td.log.Infof(\"created breakpoint: %#v\", createdBp)\n\treturn createdBp, nil\n}\n\nfunc (d *Debugger) convertBreakpoint(lbp *proc.LogicalBreakpoint) *api.Breakpoint {\n\tabp := api.ConvertLogicalBreakpoint(lbp)\n\tbps := []*proc.Breakpoint{}\n\tpids := []int{}\n\tt := proc.ValidTargets{Group: d.target}\n\tfor t.Next() {\n\t\tfor _, bp := range t.Breakpoints().M {\n\t\t\tif bp.LogicalID() == lbp.LogicalID {\n\t\t\t\tbps = append(bps, bp)\n\t\t\t\tpids = append(pids, t.Pid())\n\t\t\t}\n\t\t}\n\t}\n\tapi.ConvertPhysicalBreakpoints(abp, lbp, pids, bps)\n\treturn abp\n}\n\nfunc (d *Debugger) ConvertThreadBreakpoint(thread proc.Thread) *api.Breakpoint {\n\tif b := thread.Breakpoint(); b.Active && b.Breakpoint.Logical != nil {\n\t\treturn d.convertBreakpoint(b.Breakpoint.Logical)\n\t}\n\treturn nil\n}\n\nfunc (d *Debugger) CreateEBPFTracepoint(fnName string) error {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\tif len(d.target.Targets()) != 1 {\n\t\treturn ErrNotImplementedWithMultitarget\n\t}\n\tp := d.target.Selected\n\treturn p.SetEBPFTracepoint(fnName)\n}\n\n// amendBreakpoint will update the breakpoint with the matching ID.\n// It also enables or disables the breakpoint.\n// We can consume this function to avoid locking a goroutine.\nfunc (d *Debugger) amendBreakpoint(amend *api.Breakpoint) error {\n\toriginal := d.target.LogicalBreakpoints[amend.ID]\n\tif original == nil {\n\t\treturn fmt.Errorf(\"no breakpoint with ID %d\", amend.ID)\n\t}\n\tif d.isWatchpoint(original) && amend.Disabled {\n\t\treturn errors.New(\"can not disable watchpoints\")\n\t}\n\terr := d.copyLogicalBreakpointInfo(original, amend)\n\tif err != nil {\n\t\treturn err\n\t}\n\terr = d.target.SetBreakpointEnabled(original, !amend.Disabled)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (d *Debugger) isWatchpoint(lbp *proc.LogicalBreakpoint) bool {\n\tt := proc.ValidTargets{Group: d.target}\n\tfor t.Next() {\n\t\tfor _, bp := range t.Breakpoints().M {\n\t\t\tif bp.LogicalID() == lbp.LogicalID {\n\t\t\t\treturn bp.WatchType != 0\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\n// AmendBreakpoint will update the breakpoint with the matching ID.\n// It also enables or disables the breakpoint.\nfunc (d *Debugger) AmendBreakpoint(amend *api.Breakpoint) error {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\treturn d.amendBreakpoint(amend)\n}\n\n// CancelNext will clear internal breakpoints, thus cancelling the 'next',\n// 'step' or 'stepout' operation.\nfunc (d *Debugger) CancelNext() error {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.ClearSteppingBreakpoints()\n}\n\nfunc (d *Debugger) copyLogicalBreakpointInfo(lbp *proc.LogicalBreakpoint, requested *api.Breakpoint) error {\n\tlbp.Name = requested.Name\n\tlbp.Tracepoint = requested.Tracepoint\n\tlbp.TraceReturn = requested.TraceReturn\n\tlbp.Goroutine = requested.Goroutine\n\tlbp.Stacktrace = requested.Stacktrace\n\tlbp.Variables = requested.Variables\n\tlbp.LoadArgs = api.LoadConfigToProc(requested.LoadArgs)\n\tlbp.LoadLocals = api.LoadConfigToProc(requested.LoadLocals)\n\tlbp.CustomCommands = requested.CustomCommands\n\tlbp.UserData = requested.UserData\n\tlbp.RootFuncName = requested.RootFuncName\n\tlbp.TraceFollowCalls = requested.TraceFollowCalls\n\n\treturn d.target.ChangeBreakpointCondition(lbp, requested.Cond, requested.HitCond, requested.HitCondPerG)\n}\n\n// ClearBreakpoint clears a breakpoint.\nfunc (d *Debugger) ClearBreakpoint(requestedBp *api.Breakpoint) (*api.Breakpoint, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\tif requestedBp.ID == 0 {\n\t\tif len(d.target.Targets()) != 1 {\n\t\t\treturn nil, ErrNotImplementedWithMultitarget\n\t\t}\n\t\tbp := d.target.Selected.Breakpoints().M[requestedBp.Addr]\n\t\tif bp == nil {\n\t\t\treturn nil, fmt.Errorf(\"no breakpoint at address %#x\", requestedBp.Addr)\n\t\t}\n\t\trequestedBp.ID = bp.LogicalID()\n\t}\n\n\tlbp := d.target.LogicalBreakpoints[requestedBp.ID]\n\tif lbp == nil {\n\t\treturn nil, fmt.Errorf(\"no breakpoint with ID %d\", requestedBp.ID)\n\t}\n\tclearedBp := d.convertBreakpoint(lbp)\n\n\terr := d.target.SetBreakpointEnabled(lbp, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tdelete(d.target.LogicalBreakpoints, requestedBp.ID)\n\n\td.log.Infof(\"cleared breakpoint: %#v\", clearedBp)\n\treturn clearedBp, nil\n}\n\n// Breakpoints returns the list of current breakpoints.\nfunc (d *Debugger) Breakpoints(all bool) []*api.Breakpoint {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tabps := []*api.Breakpoint{}\n\tif all {\n\t\tt := proc.ValidTargets{Group: d.target}\n\t\tfor t.Next() {\n\t\t\tfor _, bp := range t.Breakpoints().M {\n\t\t\t\tvar abp *api.Breakpoint\n\t\t\t\tif bp.Logical != nil {\n\t\t\t\t\tabp = api.ConvertLogicalBreakpoint(bp.Logical)\n\t\t\t\t} else {\n\t\t\t\t\tabp = &api.Breakpoint{}\n\t\t\t\t}\n\t\t\t\tapi.ConvertPhysicalBreakpoints(abp, bp.Logical, []int{t.Pid()}, []*proc.Breakpoint{bp})\n\t\t\t\tabp.VerboseDescr = bp.VerboseDescr()\n\t\t\t\tabps = append(abps, abp)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor _, lbp := range d.target.LogicalBreakpoints {\n\t\t\tabps = append(abps, d.convertBreakpoint(lbp))\n\t\t}\n\t}\n\treturn abps\n}\n\n// FindBreakpoint returns the breakpoint specified by 'id'.\nfunc (d *Debugger) FindBreakpoint(id int) *api.Breakpoint {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\tlbp := d.target.LogicalBreakpoints[id]\n\tif lbp == nil {\n\t\treturn nil\n\t}\n\treturn d.convertBreakpoint(lbp)\n}\n\n// FindBreakpointByName returns the breakpoint specified by 'name'\nfunc (d *Debugger) FindBreakpointByName(name string) *api.Breakpoint {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.findBreakpointByName(name)\n}\n\nfunc (d *Debugger) findBreakpointByName(name string) *api.Breakpoint {\n\tfor _, lbp := range d.target.LogicalBreakpoints {\n\t\tif lbp.Name == name {\n\t\t\treturn d.convertBreakpoint(lbp)\n\t\t}\n\t}\n\treturn nil\n}\n\n// CreateWatchpoint creates a watchpoint on the specified expression.\nfunc (d *Debugger) CreateWatchpoint(goid int64, frame, deferredCall int, expr string, wtype api.WatchType) (*api.Breakpoint, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tp := d.target.Selected\n\n\ts, err := proc.ConvertEvalScope(p, goid, frame, deferredCall)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\td.breakpointIDCounter++\n\tbp, err := p.SetWatchpoint(d.breakpointIDCounter, s, expr, proc.WatchType(wtype), nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif d.findBreakpointByName(expr) == nil {\n\t\tbp.Logical.Name = expr\n\t}\n\treturn d.convertBreakpoint(bp.Logical), nil\n}\n\n// Threads returns the threads of the target process.\nfunc (d *Debugger) Threads() ([]proc.Thread, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn d.target.ThreadList(), nil\n}\n\n// FindThread returns the thread for the given 'id'.\nfunc (d *Debugger) FindThread(id int) (proc.Thread, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, th := range d.target.ThreadList() {\n\t\tif th.ThreadID() == id {\n\t\t\treturn th, nil\n\t\t}\n\t}\n\treturn nil, nil\n}\n\n// FindGoroutine returns the goroutine for the given 'id'.\nfunc (d *Debugger) FindGoroutine(id int64) (*proc.G, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\treturn proc.FindGoroutine(d.target.Selected, id)\n}\n\nfunc (d *Debugger) setRunning(running bool) {\n\td.runningMutex.Lock()\n\td.running = running\n\td.runningMutex.Unlock()\n}\n\nfunc (d *Debugger) IsRunning() bool {\n\td.runningMutex.Lock()\n\tdefer d.runningMutex.Unlock()\n\treturn d.running\n}\n\n// Command handles commands which control the debugger lifecycle\nfunc (d *Debugger) Command(command *api.DebuggerCommand, resumeNotify chan struct{}, clientStatusCh chan struct{}, eventsFn func(*proc.Event)) (state *api.DebuggerState, err error) {\n\tif command.Name == api.Halt {\n\t\t// RequestManualStop does not invoke any ptrace syscalls, so it's safe to\n\t\t// access the process directly.\n\t\td.log.Debug(\"halting\")\n\n\t\td.recordMutex.Lock()\n\t\tif d.stopRecording == nil {\n\t\t\terr = d.target.RequestManualStop()\n\t\t\t// The error returned from d.target.Valid will have more context\n\t\t\t// about the exited process.\n\t\t\tif _, valErr := d.target.Valid(); valErr != nil {\n\t\t\t\terr = valErr\n\t\t\t}\n\t\t}\n\t\td.recordMutex.Unlock()\n\t}\n\n\twithBreakpointInfo := true\n\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\td.setRunning(true)\n\tdefer d.setRunning(false)\n\n\td.target.SetEventsFn(nil)\n\tif command.Name != api.SwitchGoroutine && command.Name != api.SwitchThread && command.Name != api.Halt {\n\t\td.target.ResumeNotify(resumeNotify)\n\n\t\tif eventsFn != nil {\n\t\t\teventsFn(&proc.Event{Kind: proc.EventResumed})\n\t\t\tdefer eventsFn(&proc.Event{Kind: proc.EventStopped})\n\t\t}\n\n\t\td.target.SetEventsFn(eventsFn)\n\t} else if resumeNotify != nil {\n\t\tclose(resumeNotify)\n\t}\n\n\tswitch command.Name {\n\tcase api.Continue:\n\t\td.log.Debug(\"continuing\")\n\t\tif err := d.target.ChangeDirection(proc.Forward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.Continue()\n\tcase api.DirectionCongruentContinue:\n\t\td.log.Debug(\"continuing (direction congruent)\")\n\t\terr = d.target.Continue()\n\tcase api.Call:\n\t\td.log.Debugf(\"function call %s\", command.Expr)\n\t\tif err := d.target.ChangeDirection(proc.Forward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif command.ReturnInfoLoadConfig == nil {\n\t\t\treturn nil, errors.New(\"can not call function with nil ReturnInfoLoadConfig\")\n\t\t}\n\t\tg := d.target.Selected.SelectedGoroutine()\n\t\tif command.GoroutineID > 0 {\n\t\t\tg, err = proc.FindGoroutine(d.target.Selected, command.GoroutineID)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t\terr = proc.EvalExpressionWithCalls(d.target, g, command.Expr, *api.LoadConfigToProc(command.ReturnInfoLoadConfig), !command.UnsafeCall)\n\tcase api.Rewind:\n\t\td.log.Debug(\"rewinding\")\n\t\tif err := d.target.ChangeDirection(proc.Backward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.Continue()\n\tcase api.Next:\n\t\td.log.Debug(\"nexting\")\n\t\tif err := d.target.ChangeDirection(proc.Forward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.Next()\n\tcase api.ReverseNext:\n\t\td.log.Debug(\"reverse nexting\")\n\t\tif err := d.target.ChangeDirection(proc.Backward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.Next()\n\tcase api.Step:\n\t\td.log.Debug(\"stepping\")\n\t\tif err := d.target.ChangeDirection(proc.Forward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.Step()\n\tcase api.ReverseStep:\n\t\td.log.Debug(\"reverse stepping\")\n\t\tif err := d.target.ChangeDirection(proc.Backward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.Step()\n\tcase api.StepInstruction:\n\t\td.log.Debug(\"single stepping\")\n\t\tif err := d.target.ChangeDirection(proc.Forward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.StepInstruction(false)\n\tcase api.ReverseStepInstruction:\n\t\td.log.Debug(\"reverse single stepping\")\n\t\tif err := d.target.ChangeDirection(proc.Backward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.StepInstruction(false)\n\tcase api.NextInstruction:\n\t\td.log.Debug(\"single stepping\")\n\t\tif err := d.target.ChangeDirection(proc.Forward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.StepInstruction(true)\n\tcase api.ReverseNextInstruction:\n\t\td.log.Debug(\"reverse single stepping\")\n\t\tif err := d.target.ChangeDirection(proc.Backward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.StepInstruction(true)\n\tcase api.StepOut:\n\t\td.log.Debug(\"step out\")\n\t\tif err := d.target.ChangeDirection(proc.Forward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.StepOut()\n\tcase api.ReverseStepOut:\n\t\td.log.Debug(\"reverse step out\")\n\t\tif err := d.target.ChangeDirection(proc.Backward); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\terr = d.target.StepOut()\n\tcase api.SwitchThread:\n\t\td.log.Debugf(\"switching to thread %d\", command.ThreadID)\n\t\tt := proc.ValidTargets{Group: d.target}\n\t\tfor t.Next() {\n\t\t\tif _, ok := t.FindThread(command.ThreadID); ok {\n\t\t\t\td.target.Selected = t.Target\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\terr = d.target.Selected.SwitchThread(command.ThreadID)\n\t\twithBreakpointInfo = false\n\tcase api.SwitchGoroutine:\n\t\td.log.Debugf(\"switching to goroutine %d\", command.GoroutineID)\n\t\tvar g *proc.G\n\t\tg, err = proc.FindGoroutine(d.target.Selected, command.GoroutineID)\n\t\tif err == nil {\n\t\t\terr = d.target.Selected.SwitchGoroutine(g)\n\t\t}\n\t\twithBreakpointInfo = false\n\tcase api.Halt:\n\t\t// RequestManualStop already called\n\t\twithBreakpointInfo = false\n\t}\n\n\tif err != nil {\n\t\tvar errProcessExited proc.ErrProcessExited\n\t\tif errors.As(err, &errProcessExited) && command.Name != api.SwitchGoroutine && command.Name != api.SwitchThread {\n\t\t\tstate := &api.DebuggerState{}\n\t\t\tstate.Pid = d.target.Selected.Pid()\n\t\t\tstate.Exited = true\n\t\t\tstate.ExitStatus = errProcessExited.Status\n\t\t\tstate.Err = errProcessExited\n\t\t\td.maybePrintUnattendedStopWarning(proc.StopExited, state.CurrentThread, clientStatusCh)\n\t\t\treturn state, nil\n\t\t}\n\t\treturn nil, err\n\t}\n\tstate, stateErr := d.state(api.LoadConfigToProc(command.ReturnInfoLoadConfig), withBreakpointInfo)\n\tif stateErr != nil {\n\t\treturn state, stateErr\n\t}\n\tfor _, th := range state.Threads {\n\t\tif th.Breakpoint != nil && th.Breakpoint.TraceReturn {\n\t\t\tfor _, v := range th.BreakpointInfo.Arguments {\n\t\t\t\tif (v.Flags & api.VariableReturnArgument) != 0 {\n\t\t\t\t\tth.ReturnValues = append(th.ReturnValues, v)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\td.maybePrintUnattendedStopWarning(d.target.Selected.StopReason, state.CurrentThread, clientStatusCh)\n\treturn state, err\n}\n\nfunc (d *Debugger) collectBreakpointInformation(apiThread *api.Thread, thread proc.Thread) error {\n\tif apiThread.Breakpoint == nil || apiThread.BreakpointInfo != nil {\n\t\treturn nil\n\t}\n\n\tbp := apiThread.Breakpoint\n\tbpi := &api.BreakpointInfo{}\n\tapiThread.BreakpointInfo = bpi\n\n\ttgt := d.target.TargetForThread(thread.ThreadID())\n\n\t// If we're dealing with a stripped binary don't attempt to load more\n\t// information, we won't be able to.\n\timg := tgt.BinInfo().PCToImage(bp.Addr)\n\tif img != nil && img.Stripped() {\n\t\treturn nil\n\t}\n\n\tif bp.Goroutine {\n\t\tg, err := proc.GetG(thread)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbpi.Goroutine = api.ConvertGoroutine(tgt, g)\n\t}\n\n\tif bp.Stacktrace > 0 {\n\t\trawlocs, err := proc.ThreadStacktrace(tgt, thread, bp.Stacktrace)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbpi.Stacktrace, err = d.convertStacktrace(rawlocs, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif len(bp.Variables) == 0 && bp.LoadArgs == nil && bp.LoadLocals == nil {\n\t\t// don't try to create goroutine scope if there is nothing to load\n\t\treturn nil\n\t}\n\n\ts, err := proc.GoroutineScope(tgt, thread)\n\tif err != nil {\n\t\tvar errNoGoroutine proc.ErrNoGoroutine\n\t\tif errors.As(err, &errNoGoroutine) {\n\t\t\ts, err = proc.ThreadScope(tgt, thread)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif len(bp.Variables) > 0 {\n\t\tbpi.Variables = make([]api.Variable, len(bp.Variables))\n\t}\n\tfor i := range bp.Variables {\n\t\tv, err := s.EvalExpression(bp.Variables[i], proc.LoadConfig{FollowPointers: true, MaxVariableRecurse: 1, MaxStringLen: 64, MaxArrayValues: 64, MaxStructFields: -1})\n\t\tif err != nil {\n\t\t\tbpi.Variables[i] = api.Variable{Name: bp.Variables[i], Unreadable: fmt.Sprintf(\"eval error: %v\", err)}\n\t\t} else {\n\t\t\tbpi.Variables[i] = *api.ConvertVar(v)\n\t\t}\n\t}\n\tif bp.LoadArgs != nil {\n\t\tif vars, err := s.FunctionArguments(*api.LoadConfigToProc(bp.LoadArgs)); err == nil {\n\t\t\tbpi.Arguments = api.ConvertVars(vars)\n\t\t}\n\t}\n\tif bp.LoadLocals != nil {\n\t\tif locals, err := s.LocalVariables(*api.LoadConfigToProc(bp.LoadLocals)); err == nil {\n\t\t\tbpi.Locals = api.ConvertVars(locals)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Sources returns a list of the source files for target binary.\nfunc (d *Debugger) Sources(filter string) ([]string, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tregex, err := regexp.Compile(filter)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid filter argument: %s\", err.Error())\n\t}\n\n\tfiles := []string{}\n\tt := proc.ValidTargets{Group: d.target}\n\tfor t.Next() {\n\t\tfor _, f := range t.BinInfo().Sources {\n\t\t\tif regex.MatchString(f) {\n\t\t\t\tfiles = append(files, f)\n\t\t\t}\n\t\t}\n\t}\n\tsort.Strings(files)\n\tfiles = slices.Compact(files)\n\treturn files, nil\n}\n\n// Functions returns a list of functions in the target process.\nfunc (d *Debugger) Functions(filter string, followCalls int) ([]string, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tregex, err := regexp.Compile(filter)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid filter argument: %s\", err.Error())\n\t}\n\n\tfuncs := []string{}\n\tt := proc.ValidTargets{Group: d.target}\n\tfor t.Next() {\n\t\tfor _, f := range t.BinInfo().Functions {\n\t\t\tif regex.MatchString(f.Name) {\n\t\t\t\tif followCalls > 0 {\n\t\t\t\t\tnewfuncs, err := d.traverse(t, &f, 1, followCalls, filter)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, fmt.Errorf(\"traverse failed with error %w\", err)\n\t\t\t\t\t}\n\t\t\t\t\tfuncs = append(funcs, newfuncs...)\n\t\t\t\t} else {\n\t\t\t\t\tfuncs = append(funcs, f.Name)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tsort.Strings(funcs)\n\tfuncs = slices.Compact(funcs)\n\treturn funcs, nil\n}\n\nfunc (d *Debugger) traverse(t proc.ValidTargets, f *proc.Function, depth int, followCalls int, rootstr string) ([]string, error) {\n\ttype TraceFunc struct {\n\t\tFunc    *proc.Function\n\t\tDepth   int\n\t\tvisited bool\n\t}\n\n\ttype TraceFuncptr *TraceFunc\n\n\tTraceMap := make(map[string]TraceFuncptr)\n\tqueue := make([]TraceFuncptr, 0, 40)\n\tfuncs := []string{}\n\trootnode := &TraceFunc{Func: new(proc.Function), Depth: depth, visited: false}\n\trootnode.Func = f\n\n\t// cache function details in a map for reuse\n\tTraceMap[f.Name] = rootnode\n\tqueue = append(queue, rootnode)\n\tfor len(queue) > 0 {\n\t\tparent := queue[0]\n\t\tqueue = queue[1:]\n\t\tif parent == nil {\n\t\t\tpanic(\"queue has a nil node, cannot traverse!\")\n\t\t}\n\t\tif parent.Depth > followCalls {\n\t\t\tcontinue\n\t\t}\n\t\tif !parent.visited {\n\t\t\tfuncs = append(funcs, parent.Func.Name)\n\t\t\tparent.visited = true\n\t\t} else if parent.visited {\n\t\t\tcontinue\n\t\t}\n\n\t\tif parent.Depth+1 > followCalls {\n\t\t\t// Avoid diassembling if we already cross the follow-calls depth\n\t\t\tcontinue\n\t\t}\n\t\tf := parent.Func\n\t\ttext, err := proc.Disassemble(t.Memory(), nil, t.Breakpoints(), t.BinInfo(), f.Entry, f.End)\n\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"disassemble failed with error %w\", err)\n\t\t}\n\t\tfor _, instr := range text {\n\t\t\t// Dynamic functions need to be handled specially as their destination location\n\t\t\t// is not known statically, hence its required to put a breakpoint in order to\n\t\t\t// acquire the address of the function at runtime and we do this via a\n\t\t\t// call back mechanism\n\t\t\tif instr.IsCall() && instr.DestLoc == nil {\n\t\t\t\tdynbp, err := t.SetBreakpoint(0, instr.Loc.PC, proc.NextBreakpoint, nil)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"error setting breakpoint inside deferreturn\")\n\t\t\t\t}\n\t\t\t\tdynCallback := func(th proc.Thread, tgt *proc.Target) (bool, error) {\n\t\t\t\t\t// TODO(optimization): Consider using an iterator to avoid materializing\n\t\t\t\t\t// the full stack when we only need frames up to the root function\n\t\t\t\t\trawlocs, err := proc.ThreadStacktrace(tgt, tgt.CurrentThread(), followCalls+2)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn false, fmt.Errorf(\"thread stack trace returned error\")\n\t\t\t\t\t}\n\t\t\t\t\t// Since the dynamic function is known only at runtime, the depth is likewise\n\t\t\t\t\t// calculated by referring to the stack and the mechanism is similar to that\n\t\t\t\t\t// used in pkg/terminal/command.go:printTraceOutput\n\t\t\t\t\trootindex := -1\n\t\t\t\t\tfor i := len(rawlocs) - 1; i >= 0; i-- {\n\t\t\t\t\t\tif rawlocs[i].Call.Fn.Name == rootstr {\n\t\t\t\t\t\t\tif rootindex == -1 {\n\t\t\t\t\t\t\t\trootindex = i\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tsdepth := rootindex + 1\n\n\t\t\t\t\tif sdepth+1 > followCalls {\n\t\t\t\t\t\treturn false, nil\n\t\t\t\t\t}\n\t\t\t\t\tregs, err := th.Registers()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn false, fmt.Errorf(\"registers inside callback returned err\")\n\n\t\t\t\t\t}\n\t\t\t\t\t// Disassemble the instruction at the current PC to get the call destination\n\t\t\t\t\tpc := instr.Loc.PC\n\t\t\t\t\tmaxInstLen := uint64(tgt.BinInfo().Arch.MaxInstructionLength())\n\t\t\t\t\tdisasm, err := proc.Disassemble(t.Memory(), regs, t.Breakpoints(), tgt.BinInfo(), pc, pc+maxInstLen)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn false, fmt.Errorf(\"failed to disassemble instruction: %w\", err)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extract address from the decoded instruction's destination location\n\t\t\t\t\tvar addr uint64\n\t\t\t\t\tif len(disasm) > 0 && disasm[0].DestLoc != nil {\n\t\t\t\t\t\taddr = disasm[0].DestLoc.PC\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn false, fmt.Errorf(\"failed to extract call destination from instruction at PC %#x\", pc)\n\t\t\t\t\t}\n\t\t\t\t\tfn := tgt.BinInfo().PCToFunc(addr)\n\t\t\t\t\tif fn == nil {\n\t\t\t\t\t\treturn false, fmt.Errorf(\"PCToFunc returned nil\")\n\t\t\t\t\t}\n\t\t\t\t\terr = createFunctionTracepoints(d, fn.Name, rootstr, followCalls)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn false, fmt.Errorf(\"error creating tracepoint in function %s\", fn.Name)\n\t\t\t\t\t}\n\t\t\t\t\tdynchildren, err := d.traverse(t, fn, sdepth+1, followCalls, rootstr)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn false, fmt.Errorf(\"error calling traverse on dynamic children\")\n\t\t\t\t\t}\n\t\t\t\t\tfor _, child := range dynchildren {\n\t\t\t\t\t\terr := createFunctionTracepoints(d, child, rootstr, followCalls)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\treturn false, fmt.Errorf(\"error creating tracepoint in function %s\", child)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn false, nil\n\t\t\t\t}\n\t\t\t\tfor _, dynBrklet := range dynbp.Breaklets {\n\t\t\t\t\tdynBrklet.SetCallback(dynCallback)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif instr.IsCall() && instr.DestLoc != nil && instr.DestLoc.Fn != nil {\n\t\t\t\tcf := instr.DestLoc.Fn\n\t\t\t\tif (strings.HasPrefix(cf.Name, \"runtime.\") || strings.HasPrefix(cf.Name, \"runtime/internal\")) && cf.Name != \"runtime.deferreturn\" && cf.Name != \"runtime.gorecover\" && cf.Name != \"runtime.gopanic\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tchildnode := TraceMap[cf.Name]\n\t\t\t\tif childnode == nil {\n\t\t\t\t\tchildnode = &TraceFunc{Func: nil, Depth: parent.Depth + 1, visited: false}\n\t\t\t\t\tchildnode.Func = cf\n\t\t\t\t\tTraceMap[cf.Name] = childnode\n\t\t\t\t\tqueue = append(queue, childnode)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn funcs, nil\n}\n\n// createFunctionTracepoints is a way to create a trace point late in the cycle but just in time that\n// it can be included in the trace output as in the case of dynamic functions, we get to know the\n// functions that are being called from deferreturn quite late in execution. This might create multiple\n// tracepoints\nfunc createFunctionTracepoints(d *Debugger, fname string, rootstr string, followCalls int) error {\n\n\t// Helper function to create breakpoints for tracepoints\n\t// Ignore BreakpointExistsError since duplicate tracepoints\n\t// are expected during dynamic function discovery\n\tcreateBrkForTracepoint := func(lbp *proc.LogicalBreakpoint) error {\n\t\td.breakpointIDCounter++\n\t\tlbp.LogicalID = d.breakpointIDCounter\n\t\tlbp.HitCount = make(map[int64]uint64)\n\t\td.target.LogicalBreakpoints[lbp.LogicalID] = lbp\n\t\terr := d.target.SetBreakpointEnabled(lbp, true)\n\t\tif err != nil {\n\t\t\tdelete(d.target.LogicalBreakpoints, lbp.LogicalID)\n\t\t\t// Silently ignore BreakpointExistsError - this is expected when\n\t\t\t// creating tracepoints for functions that may already have them\n\t\t\tif _, exists := err.(proc.BreakpointExistsError); exists {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t}\n\n\t// Create tracepoint for function entry\n\tlbp := &proc.LogicalBreakpoint{\n\t\tSet: proc.SetBreakpoint{\n\t\t\tFunctionName: fname,\n\t\t},\n\t\tTracepoint:       true,\n\t\tRootFuncName:     rootstr,\n\t\tStacktrace:       20,\n\t\tTraceFollowCalls: followCalls,\n\t}\n\n\terr := createBrkForTracepoint(lbp)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error creating breakpoint at function %s: %w\", fname, err)\n\t}\n\n\t// Create tracepoints for function return locations\n\traddrs, _ := d.functionReturnLocationsInternal(fname)\n\tfor i := range raddrs {\n\t\tretLbp := &proc.LogicalBreakpoint{\n\t\t\tSet: proc.SetBreakpoint{\n\t\t\t\tPidAddrs: []proc.PidAddr{{Pid: d.target.Selected.Pid(), Addr: raddrs[i]}},\n\t\t\t},\n\t\t\tTraceReturn:      true,\n\t\t\tRootFuncName:     rootstr,\n\t\t\tStacktrace:       20,\n\t\t\tTraceFollowCalls: followCalls,\n\t\t}\n\n\t\terr := createBrkForTracepoint(retLbp)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"error creating breakpoint at function return %s: %w\", fname, err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Types returns all type information in the binary.\nfunc (d *Debugger) Types(filter string) ([]string, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tregex, err := regexp.Compile(filter)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid filter argument: %s\", err.Error())\n\t}\n\n\tr := []string{}\n\n\tt := proc.ValidTargets{Group: d.target}\n\tfor t.Next() {\n\t\ttypes, err := t.BinInfo().Types()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tfor _, typ := range types {\n\t\t\tif regex.MatchString(typ) {\n\t\t\t\tr = append(r, typ)\n\t\t\t}\n\t\t}\n\t}\n\tsort.Strings(r)\n\tr = slices.Compact(r)\n\n\treturn r, nil\n}\n\n// PackageVariables returns a list of package variables for the thread,\n// optionally regexp filtered using regexp described in 'filter'.\nfunc (d *Debugger) PackageVariables(filter string, cfg proc.LoadConfig) ([]*proc.Variable, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\tp := d.target.Selected\n\n\tregex, err := regexp.Compile(filter)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"invalid filter argument: %s\", err.Error())\n\t}\n\n\tscope, err := proc.ThreadScope(p, p.CurrentThread())\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpv, err := scope.PackageVariables(cfg)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tpvr := pv[:0]\n\tfor i := range pv {\n\t\tif regex.MatchString(pv[i].Name) {\n\t\t\tpvr = append(pvr, pv[i])\n\t\t}\n\t}\n\treturn pvr, nil\n}\n\n// ThreadRegisters returns registers of the specified thread.\nfunc (d *Debugger) ThreadRegisters(threadID int) (*op.DwarfRegisters, proc.DwarfRegisterToStringFunc, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tthread, found := d.target.Selected.FindThread(threadID)\n\tif !found {\n\t\treturn nil, nil, fmt.Errorf(\"couldn't find thread %d\", threadID)\n\t}\n\tregs, err := thread.Registers()\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn d.target.Selected.BinInfo().Arch.RegistersToDwarfRegisters(0, regs), d.target.Selected.BinInfo().Arch.DwarfRegisterToString, nil\n}\n\n// ScopeRegisters returns registers for the specified scope.\nfunc (d *Debugger) ScopeRegisters(goid int64, frame, deferredCall int) (*op.DwarfRegisters, proc.DwarfRegisterToStringFunc, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\ts, err := proc.ConvertEvalScope(d.target.Selected, goid, frame, deferredCall)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn &s.Regs, d.target.Selected.BinInfo().Arch.DwarfRegisterToString, nil\n}\n\n// LocalVariables returns a list of the local variables.\nfunc (d *Debugger) LocalVariables(goid int64, frame, deferredCall int, cfg proc.LoadConfig) ([]*proc.Variable, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\ts, err := proc.ConvertEvalScope(d.target.Selected, goid, frame, deferredCall)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn s.LocalVariables(cfg)\n}\n\n// FunctionArguments returns the arguments to the current function.\nfunc (d *Debugger) FunctionArguments(goid int64, frame, deferredCall int, cfg proc.LoadConfig) ([]*proc.Variable, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\ts, err := proc.ConvertEvalScope(d.target.Selected, goid, frame, deferredCall)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn s.FunctionArguments(cfg)\n}\n\n// Function returns the current function.\nfunc (d *Debugger) Function(goid int64, frame, deferredCall int) (*proc.Function, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\ts, err := proc.ConvertEvalScope(d.target.Selected, goid, frame, deferredCall)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn s.Fn, nil\n}\n\n// EvalVariableInScope will attempt to evaluate the 'expr' in the scope\n// corresponding to the given 'frame' on the goroutine identified by 'goid'.\nfunc (d *Debugger) EvalVariableInScope(goid int64, frame, deferredCall int, expr string, cfg proc.LoadConfig) (*proc.Variable, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\ts, err := proc.ConvertEvalScope(d.target.Selected, goid, frame, deferredCall)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn s.EvalExpression(expr, cfg)\n}\n\n// LoadResliced will attempt to 'reslice' a map, array or slice so that the values\n// up to cfg.MaxArrayValues children are loaded starting from index start.\nfunc (d *Debugger) LoadResliced(v *proc.Variable, start int, cfg proc.LoadConfig) (*proc.Variable, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn v.LoadResliced(start, cfg)\n}\n\n// SetVariableInScope will set the value of the variable represented by\n// 'symbol' to the value given, in the given scope.\nfunc (d *Debugger) SetVariableInScope(goid int64, frame, deferredCall int, symbol, value string) error {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\ts, err := proc.ConvertEvalScope(d.target.Selected, goid, frame, deferredCall)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn s.SetVariable(symbol, value)\n}\n\n// Goroutines will return a list of goroutines in the target process.\nfunc (d *Debugger) Goroutines(start, count int) ([]*proc.G, int, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn proc.GoroutinesInfo(d.target.Selected, start, count)\n}\n\n// FilterGoroutines returns the goroutines in gs that satisfy the specified filters.\nfunc (d *Debugger) FilterGoroutines(gs []*proc.G, filters []api.ListGoroutinesFilter) []*proc.G {\n\tif len(filters) == 0 {\n\t\treturn gs\n\t}\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\tr := []*proc.G{}\n\tfor _, g := range gs {\n\t\tok := true\n\t\tfor i := range filters {\n\t\t\tif !matchGoroutineFilter(d.target.Selected, g, &filters[i]) {\n\t\t\t\tok = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif ok {\n\t\t\tr = append(r, g)\n\t\t}\n\t}\n\treturn r\n}\n\nfunc matchGoroutineFilter(tgt *proc.Target, g *proc.G, filter *api.ListGoroutinesFilter) bool {\n\tvar val bool\n\tswitch filter.Kind {\n\tdefault:\n\t\tfallthrough\n\tcase api.GoroutineFieldNone:\n\t\tval = true\n\tcase api.GoroutineCurrentLoc:\n\t\tval = matchGoroutineLocFilter(g.CurrentLoc, filter.Arg)\n\tcase api.GoroutineUserLoc:\n\t\tval = matchGoroutineLocFilter(g.UserCurrent(), filter.Arg)\n\tcase api.GoroutineGoLoc:\n\t\tval = matchGoroutineLocFilter(g.Go(), filter.Arg)\n\tcase api.GoroutineStartLoc:\n\t\tval = matchGoroutineLocFilter(g.StartLoc(tgt), filter.Arg)\n\tcase api.GoroutineLabel:\n\t\tidx := strings.Index(filter.Arg, \"=\")\n\t\tif idx >= 0 {\n\t\t\tval = g.Labels()[filter.Arg[:idx]] == filter.Arg[idx+1:]\n\t\t} else {\n\t\t\t_, val = g.Labels()[filter.Arg]\n\t\t}\n\tcase api.GoroutineRunning:\n\t\tval = g.Thread != nil\n\tcase api.GoroutineUser:\n\t\tval = !g.System(tgt)\n\tcase api.GoroutineWaitingOnChannel:\n\t\tval = true // handled elsewhere\n\t}\n\tif filter.Negated {\n\t\tval = !val\n\t}\n\treturn val\n}\n\nfunc matchGoroutineLocFilter(loc proc.Location, arg string) bool {\n\treturn strings.Contains(formatLoc(loc), arg)\n}\n\nfunc formatLoc(loc proc.Location) string {\n\tfnname := \"?\"\n\tif loc.Fn != nil {\n\t\tfnname = loc.Fn.Name\n\t}\n\treturn fmt.Sprintf(\"%s:%d in %s\", loc.File, loc.Line, fnname)\n}\n\n// GroupGoroutines divides goroutines in gs into groups as specified by\n// group.{GroupBy,GroupByKey}. A maximum of group.MaxGroupMembers are saved in\n// each group, but the total number of goroutines in each group is recorded. If\n// group.MaxGroups is set, then at most that many groups are returned. If some\n// groups end up being dropped because of this limit, the tooManyGroups return\n// value is set.\n//\n// The first return value represents the goroutines that have been included in\n// one of the returned groups (subject to the MaxGroupMembers and MaxGroups\n// limits). The second return value represents the groups.\nfunc (d *Debugger) GroupGoroutines(gs []*proc.G, group *api.GoroutineGroupingOptions) ([]*proc.G, []api.GoroutineGroup, bool) {\n\tif group.GroupBy == api.GoroutineFieldNone {\n\t\treturn gs, nil, false\n\t}\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tgroupMembers := map[string][]*proc.G{}\n\ttotals := map[string]int{}\n\n\tfor _, g := range gs {\n\t\tvar key string\n\t\tswitch group.GroupBy {\n\t\tcase api.GoroutineCurrentLoc:\n\t\t\tkey = formatLoc(g.CurrentLoc)\n\t\tcase api.GoroutineUserLoc:\n\t\t\tkey = formatLoc(g.UserCurrent())\n\t\tcase api.GoroutineGoLoc:\n\t\t\tkey = formatLoc(g.Go())\n\t\tcase api.GoroutineStartLoc:\n\t\t\tkey = formatLoc(g.StartLoc(d.target.Selected))\n\t\tcase api.GoroutineLabel:\n\t\t\tkey = fmt.Sprintf(\"%s=%s\", group.GroupByKey, g.Labels()[group.GroupByKey])\n\t\tcase api.GoroutineRunning:\n\t\t\tkey = fmt.Sprintf(\"running=%v\", g.Thread != nil)\n\t\tcase api.GoroutineUser:\n\t\t\tkey = fmt.Sprintf(\"user=%v\", !g.System(d.target.Selected))\n\t\t}\n\t\tif len(groupMembers[key]) < group.MaxGroupMembers {\n\t\t\tgroupMembers[key] = append(groupMembers[key], g)\n\t\t}\n\t\ttotals[key]++\n\t}\n\n\tkeys := make([]string, 0, len(groupMembers))\n\tfor key := range groupMembers {\n\t\tkeys = append(keys, key)\n\t}\n\tsort.Strings(keys)\n\n\ttooManyGroups := false\n\tgsout := []*proc.G{}\n\tgroups := []api.GoroutineGroup{}\n\tfor _, key := range keys {\n\t\tif group.MaxGroups > 0 && len(groups) >= group.MaxGroups {\n\t\t\ttooManyGroups = true\n\t\t\tbreak\n\t\t}\n\t\tgroups = append(groups, api.GoroutineGroup{Name: key, Offset: len(gsout), Count: len(groupMembers[key]), Total: totals[key]})\n\t\tgsout = append(gsout, groupMembers[key]...)\n\t}\n\treturn gsout, groups, tooManyGroups\n}\n\n// Stacktrace returns a list of Stackframes for the given goroutine. The\n// length of the returned list will be min(stack_len, depth).\n// If 'full' is true, then local vars, function args, etc. will be returned as well.\nfunc (d *Debugger) Stacktrace(goroutineID int64, depth int, opts api.StacktraceOptions) ([]proc.Stackframe, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.stacktrace(goroutineID, depth, opts)\n}\n\nfunc (d *Debugger) stacktrace(goroutineID int64, depth int, opts api.StacktraceOptions) ([]proc.Stackframe, error) {\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tg, err := proc.FindGoroutine(d.target.Selected, goroutineID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif g == nil {\n\t\treturn proc.ThreadStacktrace(d.target.Selected, d.target.Selected.CurrentThread(), depth)\n\t} else {\n\t\treturn proc.GoroutineStacktrace(d.target.Selected, g, depth, proc.StacktraceOptions(opts))\n\t}\n}\n\n// Ancestors returns the stacktraces for the ancestors of a goroutine.\nfunc (d *Debugger) Ancestors(goroutineID int64, numAncestors, depth int) ([]api.Ancestor, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tg, err := proc.FindGoroutine(d.target.Selected, goroutineID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif g == nil {\n\t\treturn nil, errors.New(\"no selected goroutine\")\n\t}\n\n\tancestors, err := proc.Ancestors(d.target.Selected, g, numAncestors)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tr := make([]api.Ancestor, len(ancestors))\n\tfor i := range ancestors {\n\t\tr[i].ID = ancestors[i].ID\n\t\tif ancestors[i].Unreadable != nil {\n\t\t\tr[i].Unreadable = ancestors[i].Unreadable.Error()\n\t\t\tcontinue\n\t\t}\n\t\tframes, err := ancestors[i].Stack(depth)\n\t\tif err != nil {\n\t\t\tr[i].Unreadable = fmt.Sprintf(\"could not read ancestor stacktrace: %v\", err)\n\t\t\tcontinue\n\t\t}\n\t\tr[i].Stack, err = d.convertStacktrace(frames, nil)\n\t\tif err != nil {\n\t\t\tr[i].Unreadable = fmt.Sprintf(\"could not read ancestor stacktrace: %v\", err)\n\t\t}\n\t}\n\treturn r, nil\n}\n\n// ConvertStacktrace converts a slice of proc.Stackframe into a slice of\n// api.Stackframe, loading local variables and arguments of each frame if\n// cfg is not nil.\nfunc (d *Debugger) ConvertStacktrace(rawlocs []proc.Stackframe, cfg *proc.LoadConfig) ([]api.Stackframe, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.convertStacktrace(rawlocs, cfg)\n}\n\nfunc (d *Debugger) convertStacktrace(rawlocs []proc.Stackframe, cfg *proc.LoadConfig) ([]api.Stackframe, error) {\n\tlocations := make([]api.Stackframe, 0, len(rawlocs))\n\tfor i := range rawlocs {\n\t\tframe := api.Stackframe{\n\t\t\tLocation: api.ConvertLocation(rawlocs[i].Call),\n\n\t\t\tFrameOffset:        rawlocs[i].FrameOffset(),\n\t\t\tFramePointerOffset: rawlocs[i].FramePointerOffset(),\n\n\t\t\tDefers: d.convertDefers(rawlocs[i].Defers),\n\n\t\t\tBottom: rawlocs[i].Bottom,\n\t\t}\n\t\tif rawlocs[i].Err != nil {\n\t\t\tframe.Err = rawlocs[i].Err.Error()\n\t\t}\n\t\tif cfg != nil && rawlocs[i].Current.Fn != nil {\n\t\t\tscope := proc.FrameToScope(d.target.Selected, d.target.Selected.Memory(), nil, 0, rawlocs[i:]...)\n\t\t\tlocals, err := scope.LocalVariables(*cfg)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\targuments, err := scope.FunctionArguments(*cfg)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\tframe.Locals = api.ConvertVars(locals)\n\t\t\tframe.Arguments = api.ConvertVars(arguments)\n\t\t}\n\t\tlocations = append(locations, frame)\n\t}\n\n\treturn locations, nil\n}\n\nfunc (d *Debugger) convertDefers(defers []*proc.Defer) []api.Defer {\n\tr := make([]api.Defer, len(defers))\n\tfor i := range defers {\n\t\tddf, ddl, ddfn := defers[i].DeferredFunc(d.target.Selected)\n\t\tdrf, drl, drfn := d.target.Selected.BinInfo().PCToLine(defers[i].DeferPC)\n\n\t\tif defers[i].Unreadable != nil {\n\t\t\tr[i].Unreadable = defers[i].Unreadable.Error()\n\t\t} else {\n\t\t\tvar entry = defers[i].DeferPC\n\t\t\tif ddfn != nil {\n\t\t\t\tentry = ddfn.Entry\n\t\t\t}\n\t\t\tr[i] = api.Defer{\n\t\t\t\tDeferredLoc: api.ConvertLocation(proc.Location{\n\t\t\t\t\tPC:   entry,\n\t\t\t\t\tFile: ddf,\n\t\t\t\t\tLine: ddl,\n\t\t\t\t\tFn:   ddfn,\n\t\t\t\t}),\n\t\t\t\tDeferLoc: api.ConvertLocation(proc.Location{\n\t\t\t\t\tPC:   defers[i].DeferPC,\n\t\t\t\t\tFile: drf,\n\t\t\t\t\tLine: drl,\n\t\t\t\t\tFn:   drfn,\n\t\t\t\t}),\n\t\t\t\tSP: defers[i].SP,\n\t\t\t}\n\t\t}\n\t}\n\n\treturn r\n}\n\n// CurrentPackage returns the fully qualified name of the\n// package corresponding to the function location of the\n// current thread.\nfunc (d *Debugger) CurrentPackage() (string, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn \"\", err\n\t}\n\tloc, err := proc.ThreadLocation(d.target.Selected.CurrentThread())\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif loc.Fn == nil {\n\t\treturn \"\", errors.New(\"unable to determine current package due to unspecified function location\")\n\t}\n\treturn loc.Fn.PackageName(), nil\n}\n\n// FindLocation will find the location specified by 'locStr'.\nfunc (d *Debugger) FindLocation(goid int64, frame, deferredCall int, locStr string, includeNonExecutableLines bool, substitutePathRules [][2]string) ([]api.Location, string, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn nil, \"\", err\n\t}\n\n\tloc, err := locspec.Parse(locStr)\n\tif err != nil {\n\t\treturn nil, \"\", err\n\t}\n\n\treturn d.findLocation(goid, frame, deferredCall, locStr, loc, includeNonExecutableLines, substitutePathRules)\n}\n\n// FindLocationSpec will find the location specified by 'locStr' and 'locSpec'.\n// 'locSpec' should be the result of calling 'locspec.Parse(locStr)'. 'locStr'\n// is also passed, because it made be used to broaden the search criteria, if\n// the parsed result did not find anything.\nfunc (d *Debugger) FindLocationSpec(goid int64, frame, deferredCall int, locStr string, locSpec locspec.LocationSpec, includeNonExecutableLines bool, substitutePathRules [][2]string) ([]api.Location, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlocs, _, err := d.findLocation(goid, frame, deferredCall, locStr, locSpec, includeNonExecutableLines, substitutePathRules)\n\treturn locs, err\n}\n\nfunc (d *Debugger) findLocation(goid int64, frame, deferredCall int, locStr string, locSpec locspec.LocationSpec, includeNonExecutableLines bool, substitutePathRules [][2]string) ([]api.Location, string, error) {\n\tlocations := []api.Location{}\n\tt := proc.ValidTargets{Group: d.target}\n\tsubst := \"\"\n\tfor t.Next() {\n\t\tpid := t.Pid()\n\t\ts, _ := proc.ConvertEvalScope(t.Target, goid, frame, deferredCall)\n\t\tlocs, s1, err := locSpec.Find(t.Target, d.processArgs, s, locStr, includeNonExecutableLines, substitutePathRules)\n\t\tif s1 != \"\" {\n\t\t\tsubst = s1\n\t\t}\n\t\tif err != nil && !errors.As(err, new(*locspec.ErrLocationNotFound)) {\n\t\t\treturn nil, \"\", err\n\t\t}\n\t\tfor i := range locs {\n\t\t\tif locs[i].PC == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfile, line, fn := t.BinInfo().PCToLine(locs[i].PC)\n\t\t\tlocs[i].File = file\n\t\t\tlocs[i].Line = line\n\t\t\tlocs[i].Function = api.ConvertFunction(fn)\n\t\t\tlocs[i].PCPids = make([]int, len(locs[i].PCs))\n\t\t\tfor j := range locs[i].PCs {\n\t\t\t\tlocs[i].PCPids[j] = pid\n\t\t\t}\n\t\t}\n\t\tlocations = append(locations, locs...)\n\t}\n\tif len(locations) == 0 {\n\t\treturn locations, subst, &locspec.ErrLocationNotFound{Spec: locStr}\n\t}\n\treturn locations, subst, nil\n}\n\n// Disassemble code between startPC and endPC.\n// if endPC == 0 it will find the function containing startPC and disassemble the whole function.\nfunc (d *Debugger) Disassemble(goroutineID int64, addr1, addr2 uint64) ([]proc.AsmInstruction, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif addr2 == 0 {\n\t\tfn := d.target.Selected.BinInfo().PCToFunc(addr1)\n\t\tif fn == nil {\n\t\t\treturn nil, fmt.Errorf(\"address %#x does not belong to any function\", addr1)\n\t\t}\n\t\taddr1 = fn.Entry\n\t\taddr2 = fn.End\n\t}\n\n\tg, err := proc.FindGoroutine(d.target.Selected, goroutineID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tcurthread := d.target.Selected.CurrentThread()\n\tif g != nil && g.Thread != nil {\n\t\tcurthread = g.Thread\n\t}\n\tregs, _ := curthread.Registers()\n\n\treturn proc.Disassemble(d.target.Selected.Memory(), regs, d.target.Selected.Breakpoints(), d.target.Selected.BinInfo(), addr1, addr2)\n}\n\nfunc (d *Debugger) AsmInstructionText(inst *proc.AsmInstruction, flavour proc.AssemblyFlavour) string {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn inst.Text(flavour, d.target.Selected.BinInfo())\n}\n\n// Recorded returns true if the target is a recording.\nfunc (d *Debugger) Recorded() (recorded bool, tracedir string) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Recorded()\n}\n\n// FindThreadReturnValues returns the return values of the function that\n// the thread of the given 'id' just stepped out of.\nfunc (d *Debugger) FindThreadReturnValues(id int, cfg proc.LoadConfig) ([]*proc.Variable, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tif _, err := d.target.Valid(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tthread, found := d.target.Selected.FindThread(id)\n\tif !found {\n\t\treturn nil, fmt.Errorf(\"could not find thread %d\", id)\n\t}\n\n\treturn thread.Common().ReturnValues(cfg), nil\n}\n\n// Checkpoint will set a checkpoint specified by the locspec.\nfunc (d *Debugger) Checkpoint(where string) (int, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Checkpoint(where)\n}\n\n// Checkpoints will return a list of checkpoints.\nfunc (d *Debugger) Checkpoints() ([]proc.Checkpoint, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Checkpoints()\n}\n\n// ClearCheckpoint will clear the checkpoint of the given ID.\nfunc (d *Debugger) ClearCheckpoint(id int) error {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.ClearCheckpoint(id)\n}\n\n// ListDynamicLibraries returns a list of loaded dynamic libraries.\nfunc (d *Debugger) ListDynamicLibraries() []*proc.Image {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Selected.BinInfo().Images\n}\n\n// ExamineMemory returns the raw memory stored at the given address.\n// The amount of data to be read is specified by length.\n// This function will return an error if it reads less than `length` bytes.\nfunc (d *Debugger) ExamineMemory(address uint64, length int) ([]byte, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\n\tmem := d.target.Selected.Memory()\n\tdata := make([]byte, length)\n\tn, err := mem.ReadMemory(data, address)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif length != n {\n\t\treturn nil, errors.New(\"the specific range has exceeded readable area\")\n\t}\n\treturn data, nil\n}\n\nfunc (d *Debugger) GetVersion(out *api.GetVersionOut) error {\n\tif d.config.CoreFile != \"\" {\n\t\tif d.config.Backend == \"rr\" {\n\t\t\tout.Backend = \"rr\"\n\t\t} else {\n\t\t\tout.Backend = \"core\"\n\t\t}\n\t} else {\n\t\tif d.config.Backend == \"default\" {\n\t\t\tif runtime.GOOS == \"darwin\" {\n\t\t\t\tout.Backend = \"lldb\"\n\t\t\t} else {\n\t\t\t\tout.Backend = \"native\"\n\t\t\t}\n\t\t} else {\n\t\t\tout.Backend = d.config.Backend\n\t\t}\n\t}\n\n\tif !d.isRecording() && !d.IsRunning() {\n\t\tout.TargetGoVersion = d.target.Selected.BinInfo().Producer()\n\t}\n\n\tout.MinSupportedVersionOfGo = fmt.Sprintf(\"%d.%d.0\", goversion.MinSupportedVersionOfGoMajor, goversion.MinSupportedVersionOfGoMinor)\n\tout.MaxSupportedVersionOfGo = fmt.Sprintf(\"%d.%d.0\", goversion.MaxSupportedVersionOfGoMajor, goversion.MaxSupportedVersionOfGoMinor)\n\n\treturn nil\n}\n\n// ListPackagesBuildInfo returns the list of packages used by the program along with\n// the directory where each package was compiled and optionally the list of\n// files constituting the package.\nfunc (d *Debugger) ListPackagesBuildInfo(includeFiles bool) []*proc.PackageBuildInfo {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Selected.BinInfo().ListPackagesBuildInfo(includeFiles)\n}\n\n// StopRecording stops a recording (if one is in progress)\nfunc (d *Debugger) StopRecording() error {\n\td.recordMutex.Lock()\n\tdefer d.recordMutex.Unlock()\n\tif d.stopRecording == nil {\n\t\treturn ErrNotRecording\n\t}\n\treturn d.stopRecording()\n}\n\n// StopReason returns the reason why the target process is stopped.\n// A process could be stopped for multiple simultaneous reasons, in which\n// case only one will be reported.\nfunc (d *Debugger) StopReason() proc.StopReason {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Selected.StopReason\n}\n\n// LockTargetGroup locks the target group and returns a function to unlock it.\nfunc (d *Debugger) LockTargetGroup() (*proc.TargetGroup, func()) {\n\td.targetMutex.Lock()\n\treturn d.target, d.targetMutex.Unlock\n}\n\n// DumpStart starts a core dump to dest.\nfunc (d *Debugger) DumpStart(dest string) error {\n\td.targetMutex.Lock()\n\t// targetMutex will only be unlocked when the dump is done\n\n\t//TODO(aarzilli): what do we do if the user switches to a different target after starting a dump but before it's finished?\n\n\tif !d.target.CanDump {\n\t\td.targetMutex.Unlock()\n\t\treturn ErrCoreDumpNotSupported\n\t}\n\n\td.dumpState.Mutex.Lock()\n\tdefer d.dumpState.Mutex.Unlock()\n\n\tif d.dumpState.Dumping {\n\t\td.targetMutex.Unlock()\n\t\treturn ErrCoreDumpInProgress\n\t}\n\n\tfh, err := os.Create(dest)\n\tif err != nil {\n\t\td.targetMutex.Unlock()\n\t\treturn err\n\t}\n\n\td.dumpState.Dumping = true\n\td.dumpState.AllDone = false\n\td.dumpState.Canceled = false\n\td.dumpState.DoneChan = make(chan struct{})\n\td.dumpState.ThreadsDone = 0\n\td.dumpState.ThreadsTotal = 0\n\td.dumpState.MemDone = 0\n\td.dumpState.MemTotal = 0\n\td.dumpState.Err = nil\n\tgo func() {\n\t\tdefer d.targetMutex.Unlock()\n\t\td.target.Selected.Dump(fh, 0, &d.dumpState)\n\t}()\n\n\treturn nil\n}\n\n// DumpWait waits for the dump to finish, or for the duration of wait.\n// Returns the state of the dump.\n// If wait == 0 returns immediately.\nfunc (d *Debugger) DumpWait(wait time.Duration) *proc.DumpState {\n\td.dumpState.Mutex.Lock()\n\tif !d.dumpState.Dumping {\n\t\td.dumpState.Mutex.Unlock()\n\t\treturn &d.dumpState\n\t}\n\td.dumpState.Mutex.Unlock()\n\n\tif wait > 0 {\n\t\talarm := time.After(wait)\n\t\tselect {\n\t\tcase <-alarm:\n\t\tcase <-d.dumpState.DoneChan:\n\t\t}\n\t}\n\n\treturn &d.dumpState\n}\n\n// DumpCancel cancels a dump in progress\nfunc (d *Debugger) DumpCancel() error {\n\td.dumpState.Mutex.Lock()\n\td.dumpState.Canceled = true\n\td.dumpState.Mutex.Unlock()\n\treturn nil\n}\n\nfunc (d *Debugger) BuildID() string {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\tloc, err := proc.ThreadLocation(d.target.Selected.CurrentThread())\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\timg := d.target.Selected.BinInfo().PCToImage(loc.PC)\n\treturn img.BuildID\n}\n\nfunc (d *Debugger) AttachPid() int {\n\treturn d.config.AttachPid\n}\n\nfunc (d *Debugger) GetBufferedTracepoints() []api.TracepointResult {\n\ttraces := d.target.Selected.GetBufferedTracepoints()\n\tif traces == nil {\n\t\treturn nil\n\t}\n\tresults := make([]api.TracepointResult, len(traces))\n\tfor i, trace := range traces {\n\t\tresults[i].IsRet = trace.IsRet\n\n\t\tf, l, fn := d.target.Selected.BinInfo().PCToLine(uint64(trace.FnAddr))\n\n\t\tresults[i].FunctionName = fn.Name\n\t\tresults[i].Line = l\n\t\tresults[i].File = f\n\t\tresults[i].GoroutineID = trace.GoroutineID\n\n\t\tfor _, p := range trace.InputParams {\n\t\t\tresults[i].InputParams = append(results[i].InputParams, *api.ConvertVar(p))\n\t\t}\n\t\tfor _, p := range trace.ReturnParams {\n\t\t\tresults[i].ReturnParams = append(results[i].ReturnParams, *api.ConvertVar(p))\n\t\t}\n\t}\n\treturn results\n}\n\n// FollowExec enabled or disables follow exec mode.\nfunc (d *Debugger) FollowExec(enabled bool, regex string) error {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.FollowExec(enabled, regex)\n}\n\n// FollowExecEnabled returns true if follow exec mode is enabled.\nfunc (d *Debugger) FollowExecEnabled() bool {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.FollowExecEnabled()\n}\n\nfunc (d *Debugger) SetDebugInfoDirectories(v []string) {\n\td.recordMutex.Lock()\n\tdefer d.recordMutex.Unlock()\n\tit := proc.ValidTargets{Group: d.target}\n\tfor it.Next() {\n\t\tit.BinInfo().DebugInfoDirectories = v\n\t}\n}\n\nfunc (d *Debugger) DebugInfoDirectories() []string {\n\td.recordMutex.Lock()\n\tdefer d.recordMutex.Unlock()\n\treturn d.target.Selected.BinInfo().DebugInfoDirectories\n}\n\n// ChanGoroutines returns the list of goroutines waiting on the channel specified by expr.\nfunc (d *Debugger) ChanGoroutines(goid int64, frame, deferredCall int, expr string, start, count int) ([]*proc.G, error) {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\ts, err := proc.ConvertEvalScope(d.target.Selected, goid, frame, deferredCall)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgoids, err := s.ChanGoroutines(expr, start, count)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tgs := make([]*proc.G, len(goids))\n\tfor i := range goids {\n\t\tg, err := proc.FindGoroutine(d.target.Selected, goids[i])\n\t\tif g == nil {\n\t\t\tg = &proc.G{Unreadable: err}\n\t\t}\n\t\tgs[i] = g\n\t}\n\treturn gs, nil\n}\n\nfunc go11DecodeErrorCheck(err error) error {\n\tif !errors.Is(err, dwarf.DecodeError{}) {\n\t\treturn err\n\t}\n\n\tgover, ok := goversion.Installed()\n\tif !ok || !gover.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 11, Rev: -1}) || goversion.VersionAfterOrEqual(runtime.Version(), 1, 11) {\n\t\treturn err\n\t}\n\n\treturn errors.New(\"executables built by Go 1.11 or later need Delve built by Go 1.11 or later\")\n}\n\nconst NoDebugWarning string = \"debuggee must not be built with 'go run' or -ldflags='-s -w', which strip debug info\"\n\nfunc noDebugErrorWarning(err error) error {\n\tif errors.Is(err, dwarf.DecodeError{}) || strings.Contains(err.Error(), \"could not open debug info\") {\n\t\treturn fmt.Errorf(\"%s - %s\", err.Error(), NoDebugWarning)\n\t}\n\treturn err\n}\n\nfunc verifyBinaryFormat(exePath string) (string, error) {\n\tfullpath, err := filepath.Abs(exePath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tf, err := os.Open(fullpath)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer f.Close()\n\n\t// Skip this check on Windows.\n\t// TODO(derekparker) exec.LookPath looks for valid Windows extensions.\n\t// We don't create our binaries with valid extensions, even though we should.\n\t// Skip this check for now.\n\tif runtime.GOOS != \"windows\" {\n\t\t_, err = exec.LookPath(fullpath)\n\t\tif err != nil {\n\t\t\treturn \"\", api.ErrNotExecutable\n\t\t}\n\t}\n\n\t// check that the binary format is what we expect for the host system\n\tvar exe io.Closer\n\tswitch runtime.GOOS {\n\tcase \"darwin\":\n\t\texe, err = macho.NewFile(f)\n\tcase \"linux\", \"freebsd\":\n\t\texe, err = elf.NewFile(f)\n\tcase \"windows\":\n\t\texe, err = pe.NewFile(f)\n\tdefault:\n\t\tpanic(\"attempting to open file Delve cannot parse\")\n\t}\n\n\tif err != nil {\n\t\treturn \"\", api.ErrNotExecutable\n\t}\n\texe.Close()\n\treturn fullpath, nil\n}\n\nvar attachErrorMessage = attachErrorMessageDefault\n\nfunc attachErrorMessageDefault(pid int, err error) error {\n\treturn fmt.Errorf(\"could not attach to pid %d: %s\", pid, err)\n}\n\nfunc (d *Debugger) maybePrintUnattendedStopWarning(stopReason proc.StopReason, currentThread *api.Thread, clientStatusCh <-chan struct{}) {\n\tselect {\n\tcase <-clientStatusCh:\n\t\t// the channel will be closed if the client that sends the command has left\n\t\t// i.e. closed the connection.\n\tdefault:\n\t\treturn\n\t}\n\n\tif currentThread == nil || currentThread.Breakpoint == nil {\n\t\tswitch stopReason {\n\t\tcase proc.StopManual:\n\t\t\t// print nothing\n\t\t\treturn\n\t\tdefault:\n\t\t\tfmt.Fprintln(os.Stderr, \"Stop reason: \"+stopReason.String())\n\t\t\treturn\n\t\t}\n\t}\n\n\tconst defaultStackTraceDepth = 50\n\tframes, err := d.stacktrace(currentThread.GoroutineID, defaultStackTraceDepth, 0)\n\tif err != nil {\n\t\tfmt.Fprintln(os.Stderr, \"err\", err)\n\t\treturn\n\t}\n\n\tapiFrames, err := d.convertStacktrace(frames, nil)\n\tif err != nil {\n\t\tfmt.Fprintln(os.Stderr, \"err\", err)\n\t\treturn\n\t}\n\n\tbp := currentThread.Breakpoint\n\tswitch bp.Name {\n\tcase proc.FatalThrow, proc.UnrecoveredPanic:\n\t\tfmt.Fprintln(os.Stderr, \"\\n** execution is paused because your program is panicking **\")\n\tdefault:\n\t\tfmt.Fprintln(os.Stderr, \"\\n** execution is paused because a breakpoint is hit **\")\n\t}\n\n\tfmt.Fprintf(os.Stderr, \"To continue the execution please connect your client to the debugger.\")\n\tfmt.Fprintln(os.Stderr, \"\\nStack trace:\")\n\n\tformatPathFunc := func(s string) string {\n\t\treturn s\n\t}\n\tincludeFunc := func(f api.Stackframe) bool {\n\t\t// todo(fata): do not include the final panic/fatal function if bp.Name is fatalthrow/panic\n\t\treturn true\n\t}\n\tapi.PrintStack(formatPathFunc, os.Stderr, apiFrames, \"\", false, api.StackTraceColors{}, includeFunc)\n}\n\n// GuessSubstitutePath returns a substitute-path configuration that maps\n// server paths to client paths by examining the executable file and a map\n// of module paths to client directories (clientMod2Dir) passed as input.\nfunc (d *Debugger) GuessSubstitutePath(args *api.GuessSubstitutePathIn) map[string]string {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\tbis := []*proc.BinaryInfo{}\n\tbins := [][]proc.Function{}\n\ttgt := proc.ValidTargets{Group: d.target}\n\tfor tgt.Next() {\n\t\tbi := tgt.BinInfo()\n\t\tbis = append(bis, bi)\n\t\tbins = append(bins, bi.Functions)\n\t}\n\treturn guessSubstitutePath(args, bins, func(biIdx int, fn *proc.Function) string {\n\t\tfile, _ := bis[biIdx].EntryLineForFunc(fn)\n\t\treturn file\n\t})\n}\n\n// CancelDownloads cancels ongoing downloads, if any.\nfunc (d *Debugger) CancelDownloads() bool {\n\tif d.isRecording() {\n\t\treturn false\n\t}\n\treturn d.target.CancelDownloads()\n}\n\n// DownloadLibraryDebugInfo attempts to download the specified library's debug info.\nfunc (d *Debugger) DownloadLibraryDebugInfo(n int) error {\n\td.targetMutex.Lock()\n\tdefer d.targetMutex.Unlock()\n\treturn d.target.Selected.BinInfo().LoadImageBinaryInfoAgain(n)\n}\n\nfunc guessSubstitutePath(args *api.GuessSubstitutePathIn, bins [][]proc.Function, fileForFunc func(int, *proc.Function) string) map[string]string {\n\tserverMod2Dir := map[string]string{}\n\tserverMod2DirCandidate := map[string]map[string]int{}\n\tpkg2mod := map[string]string{}\n\n\tfor mod := range args.ClientModuleDirectories {\n\t\tserverMod2DirCandidate[mod] = make(map[string]int)\n\t}\n\n\tconst minEvidence = 10\n\tconst decisionThreshold = 0.8\n\n\ttotCandidates := func(mod string) int {\n\t\tr := 0\n\t\tfor _, cnt := range serverMod2DirCandidate[mod] {\n\t\t\tr += cnt\n\t\t}\n\t\treturn r\n\t}\n\n\tbestCandidate := func(mod string) string {\n\t\tbest := \"\"\n\t\tfor dir, cnt := range serverMod2DirCandidate[mod] {\n\t\t\tif cnt > serverMod2DirCandidate[mod][best] {\n\t\t\t\tbest = dir\n\t\t\t}\n\t\t}\n\t\treturn best\n\t}\n\n\tslashes := func(s string) int {\n\t\tr := 0\n\t\tfor _, ch := range s {\n\t\t\tif ch == '/' {\n\t\t\t\tr++\n\t\t\t}\n\t\t}\n\t\treturn r\n\t}\n\n\tserverGoroot := \"\"\n\n\tlogger := logflags.DebuggerLogger()\n\n\tfor binIdx, bin := range bins {\n\t\tfor i := range bin {\n\t\t\tfn := &bin[i]\n\n\t\t\tif fn.Name == \"runtime.main\" && serverGoroot == \"\" {\n\t\t\t\tfile := fileForFunc(binIdx, fn)\n\t\t\t\tserverGoroot = path.Dir(path.Dir(path.Dir(file)))\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tfnpkg := fn.PackageName()\n\t\t\tif fn.CompilationUnitName() != \"\" && strings.ReplaceAll(fn.CompilationUnitName(), \"\\\\\", \"/\") != fnpkg {\n\t\t\t\t// inlined\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif fnpkg == \"main\" && binIdx == 0 && args.ImportPathOfMainPackage != \"\" {\n\t\t\t\tfnpkg = args.ImportPathOfMainPackage\n\t\t\t}\n\n\t\t\tfnmod := \"\"\n\n\t\t\tif mod, ok := pkg2mod[fnpkg]; ok {\n\t\t\t\tfnmod = mod\n\t\t\t} else {\n\t\t\t\tfor mod := range args.ClientModuleDirectories {\n\t\t\t\t\tif strings.HasPrefix(fnpkg, mod) {\n\t\t\t\t\t\tfnmod = mod\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpkg2mod[fnpkg] = fnmod\n\t\t\t\tif fnmod == \"\" {\n\t\t\t\t\tlogger.Debugf(\"No module detected for server package %q\", fnpkg)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif fnmod == \"\" {\n\t\t\t\t// not in any module we are interested in\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif serverMod2Dir[fnmod] != \"\" {\n\t\t\t\t// already decided\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\telems := slashes(fnpkg[len(fnmod):])\n\n\t\t\tfile := fileForFunc(binIdx, fn)\n\t\t\tif file == \"\" || file == \"<autogenerated>\" {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tlogger.Debugf(\"considering %s pkg:%s compile unit:%s file:%s\", fn.Name, fnpkg, fn.CompilationUnitName(), file)\n\t\t\tdir := path.Dir(file) // note: paths are normalized to always use '/' as a separator by pkg/dwarf/line\n\t\t\tif slashes(dir) < elems {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor range elems {\n\t\t\t\tdir = path.Dir(dir)\n\t\t\t}\n\n\t\t\tserverMod2DirCandidate[fnmod][dir]++\n\n\t\t\tn := totCandidates(fnmod)\n\t\t\tbest := bestCandidate(fnmod)\n\t\t\tif n > minEvidence && float64(serverMod2DirCandidate[fnmod][best])/float64(n) > decisionThreshold {\n\t\t\t\tserverMod2Dir[fnmod] = best\n\t\t\t}\n\t\t}\n\t}\n\n\tfor mod := range args.ClientModuleDirectories {\n\t\tif serverMod2Dir[mod] == \"\" {\n\t\t\tserverMod2Dir[mod] = bestCandidate(mod)\n\t\t}\n\t}\n\n\tserver2Client := make(map[string]string)\n\n\tfor mod, clientDir := range args.ClientModuleDirectories {\n\t\tif serverMod2Dir[mod] != \"\" {\n\t\t\tserver2Client[serverMod2Dir[mod]] = clientDir\n\t\t}\n\t}\n\n\tif serverGoroot != \"\" && args.ClientGOROOT != \"\" {\n\t\tserver2Client[serverGoroot] = args.ClientGOROOT\n\t}\n\n\treturn server2Client\n}\n"
  },
  {
    "path": "service/debugger/debugger_linux.go",
    "content": "package debugger\n\nimport (\n\t\"bufio\"\n\t\"fmt\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n)\n\nfunc init() {\n\tattachErrorMessage = attachErrorMessageLinux\n}\n\n//lint:file-ignore ST1005 errors here can be capitalized\n\nfunc attachErrorMessageLinux(pid int, err error) error {\n\tfallbackerr := fmt.Errorf(\"could not attach to pid %d: %s\", pid, err)\n\tif serr, ok := err.(syscall.Errno); ok {\n\t\tswitch serr {\n\t\tcase syscall.EPERM:\n\t\t\t// check if ptrace of non-child processes is disabled\n\t\t\tbs, err := os.ReadFile(\"/proc/sys/kernel/yama/ptrace_scope\")\n\t\t\tif err == nil && len(bs) >= 1 && bs[0] != '0' {\n\t\t\t\t// Yama documentation: https://www.kernel.org/doc/Documentation/security/Yama.txt\n\t\t\t\treturn fmt.Errorf(\"Could not attach to pid %d: this could be caused by a kernel security setting, try writing \\\"0\\\" to /proc/sys/kernel/yama/ptrace_scope\", pid)\n\t\t\t}\n\n\t\t\t// check if the pid belongs to a different process\n\t\t\tfi, err := os.Stat(fmt.Sprintf(\"/proc/%d\", pid))\n\t\t\tif err != nil {\n\t\t\t\treturn fallbackerr\n\t\t\t}\n\t\t\tif fi.Sys().(*syscall.Stat_t).Uid != uint32(os.Getuid()) {\n\t\t\t\treturn fmt.Errorf(\"Could not attach to pid %d: current user does not own the process\", pid)\n\t\t\t}\n\n\t\t\t// check if the process is already being traced\n\t\t\tstatusfh, err := os.Open(fmt.Sprintf(\"/proc/%d/status\", pid))\n\t\t\tif err != nil {\n\t\t\t\treturn fallbackerr\n\t\t\t}\n\t\t\tdefer statusfh.Close()\n\t\t\tscan := bufio.NewScanner(statusfh)\n\t\t\tconst tracerPidPrefix = \"TracerPid:\"\n\t\t\tfor scan.Scan() {\n\t\t\t\tline := scan.Text()\n\t\t\t\tif strings.HasPrefix(line, tracerPidPrefix) {\n\t\t\t\t\ttpid, _ := strconv.Atoi(strings.TrimSpace(line[len(tracerPidPrefix):]))\n\t\t\t\t\tif tpid != 0 {\n\t\t\t\t\t\treturn fmt.Errorf(\"could not attach to pid %d: already being debugged by pid %d\", pid, tpid)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn fallbackerr\n}\n"
  },
  {
    "path": "service/debugger/debugger_test.go",
    "content": "package debugger\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/pkg/gobuild\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\nfunc TestMain(m *testing.M) {\n\tvar logConf string\n\tflag.StringVar(&logConf, \"log\", \"\", \"configures logging\")\n\tflag.Parse()\n\tlogflags.Setup(logConf != \"\", logConf, \"\")\n\tprotest.RunTestsWithFixtures(m)\n}\n\nfunc TestDebugger_LaunchNoMain(t *testing.T) {\n\tfixturesDir := protest.FindFixturesDir()\n\tnomaindir := filepath.Join(fixturesDir, \"nomaindir\")\n\tdebugname := \"debug\"\n\texepath := filepath.Join(nomaindir, debugname)\n\tdefer os.Remove(exepath)\n\tif err := gobuild.GoBuild(debugname, []string{nomaindir}, fmt.Sprintf(\"-o %s\", exepath)); err != nil {\n\t\tt.Fatalf(\"go build error %v\", err)\n\t}\n\n\td := new(Debugger)\n\t_, err := d.Launch([]string{exepath}, \".\")\n\tif err == nil {\n\t\tt.Fatalf(\"expected error but none was generated\")\n\t}\n\tif err != api.ErrNotExecutable {\n\t\tt.Fatalf(\"expected error \\\"%v\\\" got \\\"%v\\\"\", api.ErrNotExecutable, err)\n\t}\n}\n\nfunc TestDebugger_LaunchInvalidFormat(t *testing.T) {\n\tfixturesDir := protest.FindFixturesDir()\n\tbuildtestdir := filepath.Join(fixturesDir, \"buildtest\")\n\tdebugname := \"debug\"\n\tswitchOS := map[string]string{\n\t\t\"darwin\":  \"linux\",\n\t\t\"windows\": \"linux\",\n\t\t\"freebsd\": \"windows\",\n\t\t\"linux\":   \"windows\",\n\t}\n\tif runtime.GOARCH == \"arm64\" && runtime.GOOS == \"linux\" {\n\t\tt.Setenv(\"GOARCH\", \"amd64\")\n\t}\n\tif runtime.GOARCH == \"ppc64le\" && runtime.GOOS == \"linux\" {\n\t\tt.Setenv(\"GOARCH\", \"amd64\")\n\t}\n\tif runtime.GOARCH == \"riscv64\" && runtime.GOOS == \"linux\" {\n\t\tt.Setenv(\"GOARCH\", \"amd64\")\n\t}\n\tif runtime.GOARCH == \"loong64\" && runtime.GOOS == \"linux\" {\n\t\tt.Setenv(\"GOARCH\", \"amd64\")\n\t}\n\tt.Setenv(\"GOOS\", switchOS[runtime.GOOS])\n\texepath := filepath.Join(buildtestdir, debugname)\n\tif err := gobuild.GoBuild(debugname, []string{buildtestdir}, fmt.Sprintf(\"-o %s\", exepath)); err != nil {\n\t\tt.Fatalf(\"go build error %v\", err)\n\t}\n\tdefer os.Remove(exepath)\n\n\td := new(Debugger)\n\t_, err := d.Launch([]string{exepath}, \".\")\n\tif err == nil {\n\t\tt.Fatalf(\"expected error but none was generated\")\n\t}\n\tif err != api.ErrNotExecutable {\n\t\tt.Fatalf(\"expected error %q got \\\"%v\\\"\", api.ErrNotExecutable, err)\n\t}\n}\n\nfunc TestDebugger_LaunchCurrentDir(t *testing.T) {\n\tfixturesDir := protest.FindFixturesDir()\n\ttestDir := filepath.Join(fixturesDir, \"buildtest\")\n\tdebugname := \"debug\"\n\texepath := filepath.Join(testDir, debugname)\n\toriginalPath, err := os.Getwd()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer os.Chdir(originalPath)\n\tdefer func() {\n\t\tif err := os.Remove(exepath); err != nil {\n\t\t\tt.Fatalf(\"error removing executable %v\", err)\n\t\t}\n\t}()\n\tif err := gobuild.GoBuild(debugname, []string{testDir}, fmt.Sprintf(\"-o %s\", exepath)); err != nil {\n\t\tt.Fatalf(\"go build error %v\", err)\n\t}\n\n\tos.Chdir(testDir)\n\n\td := new(Debugger)\n\td.config = &Config{}\n\t_, err = d.Launch([]string{debugname}, \".\")\n\tif err == nil {\n\t\tt.Fatal(\"expected error but none was generated\")\n\t}\n\tif err != nil && !strings.Contains(err.Error(), \"unknown backend\") {\n\t\tt.Fatal(err)\n\t}\n}\n\nfunc guessSubstitutePathHelper(t *testing.T, args *api.GuessSubstitutePathIn, fnpaths [][2]string, tgt map[string]string) {\n\tconst base = 0x40000\n\tt.Helper()\n\tbins := [][]proc.Function{{}}\n\tfor i, fnpath := range fnpaths {\n\t\tbins[0] = append(bins[0], proc.Function{Name: fnpath[0], Entry: uint64(base + i)})\n\t}\n\tout := guessSubstitutePath(args, bins, func(_ int, fn *proc.Function) string {\n\t\treturn fnpaths[fn.Entry-base][1]\n\t})\n\tt.Logf(\"%#v\\n\", out)\n\tif len(out) != len(tgt) {\n\t\tt.Errorf(\"wrong number of entries\")\n\t\treturn\n\t}\n\tfor k := range out {\n\t\tif out[k] != tgt[k] {\n\t\t\tt.Errorf(\"mismatch for directory %q\", k)\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc TestGuessSubstitutePathMinimalMain(t *testing.T) {\n\t// When the main module only contains a single package check that its mapping still works\n\tguessSubstitutePathHelper(t,\n\t\t&api.GuessSubstitutePathIn{\n\t\t\tImportPathOfMainPackage: \"github.com/ccampo133/go-docker-alpine-remote-debug\",\n\t\t\tClientGOROOT:            \"/user/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64\",\n\t\t\tClientModuleDirectories: map[string]string{\n\t\t\t\t\"github.com/ccampo133/go-docker-alpine-remote-debug\": \"/user/gohome/go-docker-alpine-remote-debug\",\n\t\t\t},\n\t\t},\n\t\t[][2]string{\n\t\t\t{\"main.main\", \"/app/main.go\"},\n\t\t\t{\"main.hello\", \"/app/main.go\"},\n\t\t\t{\"runtime.main\", \"/usr/local/go/src/runtime/main.go\"}},\n\t\tmap[string]string{\n\t\t\t\"/usr/local/go\": \"/user/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.23.0.linux-amd64\",\n\t\t\t\"/app\":          \"/user/gohome/go-docker-alpine-remote-debug\"})\n}\n"
  },
  {
    "path": "service/debugger/debugger_unix_test.go",
    "content": "//go:build !windows\n\npackage debugger\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/creack/pty\"\n\t\"github.com/go-delve/delve/pkg/gobuild\"\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\nfunc TestDebugger_LaunchNoExecutablePerm(t *testing.T) {\n\tfixturesDir := protest.FindFixturesDir()\n\tbuildtestdir := filepath.Join(fixturesDir, \"buildtest\")\n\tdebugname := \"debug\"\n\tswitchOS := map[string]string{\n\t\t\"darwin\":  \"linux\",\n\t\t\"windows\": \"linux\",\n\t\t\"freebsd\": \"windows\",\n\t\t\"linux\":   \"windows\",\n\t}\n\tif runtime.GOARCH == \"arm64\" && runtime.GOOS == \"linux\" {\n\t\tt.Setenv(\"GOARCH\", \"amd64\")\n\t}\n\tif runtime.GOARCH == \"ppc64le\" && runtime.GOOS == \"linux\" {\n\t\tt.Setenv(\"GOARCH\", \"amd64\")\n\t}\n\tif runtime.GOARCH == \"riscv64\" && runtime.GOOS == \"linux\" {\n\t\tt.Setenv(\"GOARCH\", \"amd64\")\n\t}\n\tif runtime.GOARCH == \"loong64\" && runtime.GOOS == \"linux\" {\n\t\tt.Setenv(\"GOARCH\", \"amd64\")\n\t}\n\tt.Setenv(\"GOOS\", switchOS[runtime.GOOS])\n\texepath := filepath.Join(buildtestdir, debugname)\n\tdefer os.Remove(exepath)\n\tif err := gobuild.GoBuild(debugname, []string{buildtestdir}, fmt.Sprintf(\"-o %s\", exepath)); err != nil {\n\t\tt.Fatalf(\"go build error %v\", err)\n\t}\n\tif err := os.Chmod(exepath, 0644); err != nil {\n\t\tt.Fatal(err)\n\t}\n\td := new(Debugger)\n\t_, err := d.Launch([]string{exepath}, \".\")\n\tif err == nil {\n\t\tt.Fatalf(\"expected error but none was generated\")\n\t}\n\tif err != api.ErrNotExecutable {\n\t\tt.Fatalf(\"expected error %q got \\\"%v\\\"\", api.ErrNotExecutable, err)\n\t}\n}\n\nfunc TestDebugger_LaunchWithTTY(t *testing.T) {\n\tif os.Getenv(\"CI\") == \"true\" {\n\t\tif _, err := exec.LookPath(\"lsof\"); err != nil {\n\t\t\tt.Skip(\"skipping test in CI, system does not contain lsof\")\n\t\t}\n\t}\n\t// Ensure no env meddling is leftover from previous tests.\n\tt.Setenv(\"GOOS\", runtime.GOOS)\n\tt.Setenv(\"GOARCH\", runtime.GOARCH)\n\n\tp, tty, err := pty.Open()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tdefer p.Close()\n\tdefer tty.Close()\n\n\tfixturesDir := protest.FindFixturesDir()\n\tbuildtestdir := filepath.Join(fixturesDir, \"buildtest\")\n\tdebugname := \"debugtty\"\n\texepath := filepath.Join(buildtestdir, debugname)\n\tif err := gobuild.GoBuild(debugname, []string{buildtestdir}, fmt.Sprintf(\"-o %s\", exepath)); err != nil {\n\t\tt.Fatalf(\"go build error %v\", err)\n\t}\n\tdefer os.Remove(exepath)\n\tvar backend string\n\tprotest.DefaultTestBackend(&backend)\n\tconf := &Config{TTY: tty.Name(), Backend: backend}\n\tpArgs := []string{exepath}\n\td, err := New(conf, pArgs)\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\topenFileCmd, wantTTYName := \"lsof\", tty.Name()\n\tif runtime.GOOS == \"freebsd\" {\n\t\topenFileCmd = \"fstat\"\n\t\twantTTYName = strings.TrimPrefix(wantTTYName, \"/dev/\")\n\t}\n\tcmd := exec.Command(openFileCmd, \"-p\", fmt.Sprintf(\"%d\", d.ProcessPid()))\n\tresult, err := cmd.CombinedOutput()\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif !bytes.Contains(result, []byte(wantTTYName)) {\n\t\tt.Fatalf(\"process open file list does not contain expected tty %q\", wantTTYName)\n\t}\n}\n"
  },
  {
    "path": "service/internal/sameuser/doc.go",
    "content": "// Package sameuser provides utilities for checking users of a local connection.\n// Only works in Linux.\npackage sameuser\n"
  },
  {
    "path": "service/internal/sameuser/sameuser.go",
    "content": "//go:build !linux\n\npackage sameuser\n\nimport \"net\"\n\nfunc CanAccept(_, _, _ net.Addr) bool {\n\treturn true\n}\n"
  },
  {
    "path": "service/internal/sameuser/sameuser_linux.go",
    "content": "package sameuser\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n)\n\n// for testing\nvar (\n\tuid      = os.Getuid()\n\treadFile = os.ReadFile\n)\n\ntype errConnectionNotFound struct {\n\tfilename string\n}\n\nfunc (e *errConnectionNotFound) Error() string {\n\treturn fmt.Sprintf(\"connection not found in %s\", e.filename)\n}\n\nfunc sameUserForHexLocalAddr(filename, localAddr, remoteAddr string) (bool, error) {\n\tb, err := readFile(filename)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tfor line := range strings.SplitSeq(strings.TrimSpace(string(b)), \"\\n\") {\n\t\t// The format contains whitespace padding (%4d, %5u), so we use\n\t\t// fmt.Sscanf instead of splitting on whitespace.\n\t\tvar (\n\t\t\tsl                            int\n\t\t\treadLocalAddr, readRemoteAddr string\n\t\t\tstate                         int\n\t\t\tqueue, timer                  string\n\t\t\tretransmit                    int\n\t\t\tremoteUID                     uint\n\t\t)\n\t\t// Note that we must use %d where the kernel format uses %4d or %5u:\n\t\t// - %4d fails to parse for large number of entries (len(sl) > 4)\n\t\t// - %u is not understood by the fmt package (%U is something else)\n\t\t// - %5d cuts off longer uids (e.g. 149098 on gLinux)\n\t\tn, err := fmt.Sscanf(line, \"%d: %s %s %02X %s %s %08X %d\",\n\t\t\t&sl, &readLocalAddr, &readRemoteAddr, &state, &queue, &timer, &retransmit, &remoteUID)\n\t\tif n != 8 || err != nil {\n\t\t\tcontinue // invalid line (e.g. header line)\n\t\t}\n\t\tif readLocalAddr != remoteAddr || readRemoteAddr != localAddr {\n\t\t\t// this check is deliberately crossed, the (readLocalAddr,\n\t\t\t// readRemoteAddr) pair is from the point of view of the client, the\n\t\t\t// (localAddr, remoteAddr) is from the point of view of the server.\n\t\t\tcontinue\n\t\t}\n\t\tsame := uid == int(remoteUID)\n\t\tif !same && logflags.Any() {\n\t\t\tlog.Printf(\"connection from different user (remote: %d, local: %d) detected: %v\", remoteUID, uid, line)\n\t\t}\n\t\treturn same, nil\n\t}\n\treturn false, &errConnectionNotFound{filename}\n}\n\nfunc addrToHex4(addr *net.TCPAddr) string {\n\t// For details about the format, see the kernel side implementation:\n\t// https://elixir.bootlin.com/linux/v5.2.2/source/net/ipv4/tcp_ipv4.c#L2375\n\tb := addr.IP.To4()\n\treturn fmt.Sprintf(\"%02X%02X%02X%02X:%04X\", b[3], b[2], b[1], b[0], addr.Port)\n}\n\nfunc addrToHex6(addr *net.TCPAddr) string {\n\ta16 := addr.IP.To16()\n\t// For details about the format, see the kernel side implementation:\n\t// https://elixir.bootlin.com/linux/v5.2.2/source/net/ipv6/tcp_ipv6.c#L1792\n\twords := make([]uint32, 4)\n\tif err := binary.Read(bytes.NewReader(a16), binary.LittleEndian, words); err != nil {\n\t\tpanic(err)\n\t}\n\treturn fmt.Sprintf(\"%08X%08X%08X%08X:%04X\", words[0], words[1], words[2], words[3], addr.Port)\n}\n\nfunc sameUserForRemoteAddr4(localAddr, remoteAddr *net.TCPAddr) (bool, error) {\n\tr, err := sameUserForHexLocalAddr(\"/proc/net/tcp\", addrToHex4(localAddr), addrToHex4(remoteAddr))\n\tif _, isNotFound := err.(*errConnectionNotFound); isNotFound {\n\t\t// See Issue #1835\n\t\tr, err2 := sameUserForHexLocalAddr(\"/proc/net/tcp6\", \"0000000000000000FFFF0000\"+addrToHex4(localAddr), \"0000000000000000FFFF0000\"+addrToHex4(remoteAddr))\n\t\tif err2 == nil {\n\t\t\treturn r, nil\n\t\t}\n\t}\n\treturn r, err\n}\n\nfunc sameUserForRemoteAddr6(localAddr, remoteAddr *net.TCPAddr) (bool, error) {\n\treturn sameUserForHexLocalAddr(\"/proc/net/tcp6\", addrToHex6(localAddr), addrToHex6(remoteAddr))\n}\n\nfunc sameUserForRemoteAddr(localAddr, remoteAddr *net.TCPAddr) (bool, error) {\n\tif remoteAddr.IP.To4() == nil {\n\t\treturn sameUserForRemoteAddr6(localAddr, remoteAddr)\n\t}\n\treturn sameUserForRemoteAddr4(localAddr, remoteAddr)\n}\n\nfunc CanAccept(listenAddr, localAddr, remoteAddr net.Addr) bool {\n\tladdr, ok := listenAddr.(*net.TCPAddr)\n\tif !ok || !laddr.IP.IsLoopback() {\n\t\treturn true\n\t}\n\tremoteAddrTCP := remoteAddr.(*net.TCPAddr)\n\tlocalAddrTCP := localAddr.(*net.TCPAddr)\n\n\tsame, err := sameUserForRemoteAddr(localAddrTCP, remoteAddrTCP)\n\tif err != nil {\n\t\tlog.Printf(\"cannot check remote address: %v\", err)\n\t}\n\tif !same {\n\t\tif logflags.Any() {\n\t\t\tlog.Printf(\"closing connection from different user (%v): connections to localhost are only accepted from the same UNIX user for security reasons\", remoteAddrTCP)\n\t\t} else {\n\t\t\tfmt.Fprintf(os.Stderr, \"closing connection from different user (%v): connections to localhost are only accepted from the same UNIX user for security reasons\\n\", remoteAddrTCP)\n\t\t}\n\t\treturn false\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "service/internal/sameuser/sameuser_linux_test.go",
    "content": "package sameuser\n\nimport (\n\t\"net\"\n\t\"testing\"\n)\n\nfunc TestSameUserForRemoteAddr(t *testing.T) {\n\tuid = 149098\n\tvar proc string\n\treadFile = func(string) ([]byte, error) {\n\t\treturn []byte(proc), nil\n\t}\n\tfor _, tt := range []struct {\n\t\tname                  string\n\t\tproc                  string\n\t\tlocalAddr, remoteAddr *net.TCPAddr\n\t\twant                  bool\n\t}{\n\t\t{\n\t\t\tname: \"ipv4-same\",\n\t\t\tproc: `  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode\n  21: 0100007F:E682 0100007F:0FC8 01 00000000:00000000 00:00000000 00000000 149098        0 8420541 2 0000000000000000 20 0 0 10 -1                  `,\n\t\t\tlocalAddr:  &net.TCPAddr{IP: net.ParseIP(\"127.0.0.1\"), Port: 4040},\n\t\t\tremoteAddr: &net.TCPAddr{IP: net.ParseIP(\"127.0.0.1\"), Port: 59010},\n\t\t\twant:       true,\n\t\t},\n\n\t\t{\n\t\t\tname: \"ipv4-not-found\",\n\t\t\tproc: `  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode\n  21: 0100007F:E682 0100007F:0FC8 01 00000000:00000000 00:00000000 00000000 149098        0 8420541 2 0000000000000000 20 0 0 10 -1                  `,\n\t\t\tlocalAddr:  &net.TCPAddr{IP: net.ParseIP(\"127.0.0.1\"), Port: 4040},\n\t\t\tremoteAddr: &net.TCPAddr{IP: net.ParseIP(\"127.0.0.1\"), Port: 2342},\n\t\t\twant:       false,\n\t\t},\n\n\t\t{\n\t\t\tname: \"ipv4-different-uid\",\n\t\t\tproc: `  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode\n  21: 0100007F:E682 0100007F:0FC8 01 00000000:00000000 00:00000000 00000000 149097        0 8420541 2 0000000000000000 20 0 0 10 -1                  `,\n\t\t\tlocalAddr:  &net.TCPAddr{IP: net.ParseIP(\"127.0.0.1\"), Port: 4040},\n\t\t\tremoteAddr: &net.TCPAddr{IP: net.ParseIP(\"127.0.0.1\"), Port: 59010},\n\t\t\twant:       false,\n\t\t},\n\n\t\t{\n\t\t\tname: \"ipv6-same\",\n\t\t\tproc: `  sl  local_address                         remote_address                        st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode\n   5: 00000000000000000000000001000000:D3E4 00000000000000000000000001000000:0FC8 01 00000000:00000000 00:00000000 00000000 149098        0 8425526 2 0000000000000000 20 0 0 10 -1\n   6: 00000000000000000000000001000000:0FC8 00000000000000000000000001000000:D3E4 01 00000000:00000000 00:00000000 00000000 149098        0 8424744 1 0000000000000000 20 0 0 10 -1`,\n\t\t\tlocalAddr:  &net.TCPAddr{IP: net.ParseIP(\"::1\"), Port: 4040},\n\t\t\tremoteAddr: &net.TCPAddr{IP: net.ParseIP(\"::1\"), Port: 54244},\n\t\t\twant:       true,\n\t\t},\n\t} {\n\t\tt.Run(tt.name, func(t *testing.T) {\n\t\t\tproc = tt.proc\n\t\t\t// The returned error is for reporting only.\n\t\t\tsame, _ := sameUserForRemoteAddr(tt.localAddr, tt.remoteAddr)\n\t\t\tif got, want := same, tt.want; got != want {\n\t\t\t\tt.Errorf(\"sameUserForRemoteAddr(%v, %v) = %v, want %v\", tt.localAddr, tt.remoteAddr, got, want)\n\t\t\t}\n\t\t})\n\t}\n}\n"
  },
  {
    "path": "service/listenerpipe.go",
    "content": "package service\n\nimport (\n\t\"errors\"\n\t\"net\"\n\t\"sync\"\n)\n\n// ListenerPipe returns a full-duplex in-memory connection, like net.Pipe.\n// Unlike net.Pipe one end of the connection is returned as an object\n// satisfying the net.Listener interface.\n// The first call to the Accept method of this object will return a net.Conn\n// connected to the other net.Conn returned by ListenerPipe.\n// Any subsequent calls to Accept will block until the listener is closed.\nfunc ListenerPipe() (net.Listener, net.Conn) {\n\tconn0, conn1 := net.Pipe()\n\treturn &preconnectedListener{conn: conn0, closech: make(chan struct{})}, conn1\n}\n\n// preconnectedListener satisfies the net.Listener interface by accepting a\n// single pre-established connection.\n// The first call to Accept will return the conn field, any subsequent call\n// will block until the listener is closed.\ntype preconnectedListener struct {\n\taccepted bool\n\tconn     net.Conn\n\tclosech  chan struct{}\n\tcloseMu  sync.Mutex\n\tacceptMu sync.Mutex\n}\n\n// Accept returns the pre-established connection the first time it's called,\n// it blocks until the listener is closed on every subsequent call.\nfunc (l *preconnectedListener) Accept() (net.Conn, error) {\n\tl.acceptMu.Lock()\n\tdefer l.acceptMu.Unlock()\n\tif !l.accepted {\n\t\tl.accepted = true\n\t\treturn l.conn, nil\n\t}\n\t<-l.closech\n\treturn nil, errors.New(\"accept failed: listener closed\")\n}\n\n// Close closes the listener.\nfunc (l *preconnectedListener) Close() error {\n\tl.closeMu.Lock()\n\tdefer l.closeMu.Unlock()\n\tif l.closech == nil {\n\t\treturn nil\n\t}\n\tclose(l.closech)\n\tl.closech = nil\n\treturn nil\n}\n\n// Addr returns the listener's network address.\nfunc (l *preconnectedListener) Addr() net.Addr {\n\treturn l.conn.LocalAddr()\n}\n"
  },
  {
    "path": "service/rpc2/client.go",
    "content": "package rpc2\n\nimport (\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"net/rpc\"\n\t\"net/rpc/jsonrpc\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\n// RPCClient is a RPC service.Client.\ntype RPCClient struct {\n\tclient *rpc.Client\n\n\tretValLoadCfg *api.LoadConfig\n\teventsFn      func(*api.Event)\n}\n\n// Ensure the implementation satisfies the interface.\nvar _ service.Client = &RPCClient{}\n\n// NewClient creates a new RPCClient.\nfunc NewClient(addr string) *RPCClient {\n\tclient, err := jsonrpc.Dial(\"tcp\", addr)\n\tif err != nil {\n\t\tlog.Fatal(\"dialing:\", err)\n\t}\n\treturn newFromRPCClient(client)\n}\n\nfunc newFromRPCClient(client *rpc.Client) *RPCClient {\n\tc := &RPCClient{client: client}\n\tc.call(\"SetApiVersion\", api.SetAPIVersionIn{APIVersion: 2}, &api.SetAPIVersionOut{})\n\treturn c\n}\n\n// NewClientFromConn creates a new RPCClient from the given connection.\nfunc NewClientFromConn(conn net.Conn) *RPCClient {\n\treturn newFromRPCClient(jsonrpc.NewClient(conn))\n}\n\nfunc (c *RPCClient) GetVersion() *api.GetVersionOut {\n\tout := new(api.GetVersionOut)\n\tc.call(\"GetVersion\", api.GetVersionIn{}, out)\n\treturn out\n}\n\nfunc (c *RPCClient) ProcessPid() int {\n\tout := new(ProcessPidOut)\n\tc.call(\"ProcessPid\", ProcessPidIn{}, out)\n\treturn out.Pid\n}\n\nfunc (c *RPCClient) BuildID() string {\n\tout := new(BuildIDOut)\n\tc.call(\"BuildID\", BuildIDIn{}, out)\n\treturn out.BuildID\n}\n\nfunc (c *RPCClient) LastModified() time.Time {\n\tout := new(LastModifiedOut)\n\tc.call(\"LastModified\", LastModifiedIn{}, out)\n\treturn out.Time\n}\n\nfunc (c *RPCClient) Detach(kill bool) error {\n\tdefer c.client.Close()\n\tout := new(DetachOut)\n\treturn c.call(\"Detach\", DetachIn{kill}, out)\n}\n\nfunc (c *RPCClient) Restart(rebuild bool) ([]api.DiscardedBreakpoint, error) {\n\tout := new(RestartOut)\n\terr := c.call(\"Restart\", RestartIn{\"\", false, nil, false, rebuild, [3]string{}}, out)\n\treturn out.DiscardedBreakpoints, err\n}\n\nfunc (c *RPCClient) RestartFrom(rerecord bool, pos string, resetArgs bool, newArgs []string, newRedirects [3]string, rebuild bool) ([]api.DiscardedBreakpoint, error) {\n\tout := new(RestartOut)\n\terr := c.call(\"Restart\", RestartIn{pos, resetArgs, newArgs, rerecord, rebuild, newRedirects}, out)\n\treturn out.DiscardedBreakpoints, err\n}\n\nfunc (c *RPCClient) GetState() (*api.DebuggerState, error) {\n\tvar out StateOut\n\terr := c.call(\"State\", StateIn{NonBlocking: false}, &out)\n\treturn out.State, err\n}\n\nfunc (c *RPCClient) GetStateNonBlocking() (*api.DebuggerState, error) {\n\tvar out StateOut\n\terr := c.call(\"State\", StateIn{NonBlocking: true}, &out)\n\treturn out.State, err\n}\n\nfunc (c *RPCClient) Continue() <-chan *api.DebuggerState {\n\treturn c.continueDir(api.Continue)\n}\n\nfunc (c *RPCClient) Rewind() <-chan *api.DebuggerState {\n\treturn c.continueDir(api.Rewind)\n}\n\nfunc (c *RPCClient) DirectionCongruentContinue() <-chan *api.DebuggerState {\n\treturn c.continueDir(api.DirectionCongruentContinue)\n}\n\nfunc (c *RPCClient) continueDir(cmd string) <-chan *api.DebuggerState {\n\tch := make(chan *api.DebuggerState)\n\tgo func() {\n\t\tfor {\n\t\t\tout := new(CommandOut)\n\t\t\terr := c.callWhileDrainingEvents(\"Command\", &api.DebuggerCommand{Name: cmd, ReturnInfoLoadConfig: c.retValLoadCfg, WithEvents: c.eventsFn != nil}, &out)\n\t\t\tstate := out.State\n\t\t\tif err != nil {\n\t\t\t\tstate.Err = err\n\t\t\t}\n\t\t\tif state.Exited {\n\t\t\t\t// Error types apparently cannot be marshalled by Go correctly. Must reset error here.\n\t\t\t\t//lint:ignore ST1005 backwards compatibility\n\t\t\t\tstate.Err = fmt.Errorf(\"Process %d has exited with status %d\", c.ProcessPid(), state.ExitStatus)\n\t\t\t}\n\t\t\tch <- &state\n\t\t\tif err != nil || state.Exited {\n\t\t\t\tclose(ch)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tisbreakpoint := false\n\t\t\tistracepoint := true\n\t\t\tfor i := range state.Threads {\n\t\t\t\tif state.Threads[i].Breakpoint != nil {\n\t\t\t\t\tisbreakpoint = true\n\t\t\t\t\tistracepoint = istracepoint && (state.Threads[i].Breakpoint.Tracepoint || state.Threads[i].Breakpoint.TraceReturn)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif !isbreakpoint || !istracepoint {\n\t\t\t\tclose(ch)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\treturn ch\n}\n\nfunc (c *RPCClient) drainEvents() <-chan struct{} {\n\tdone := make(chan struct{})\n\tif c.eventsFn == nil {\n\t\tclose(done)\n\t\treturn done\n\t}\n\tgo func() {\n\t\tdefer close(done)\n\t\tfor {\n\t\t\tout := new(GetEventsOut)\n\t\t\terr := c.call(\"GetEvents\", &GetEventsIn{}, &out)\n\t\t\tif err != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfor _, event := range out.Events {\n\t\t\t\tc.eventsFn(&event)\n\t\t\t\tif event.Kind == api.EventStopped {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}()\n\treturn done\n}\n\nfunc (c *RPCClient) Next() (*api.DebuggerState, error) {\n\tvar out CommandOut\n\terr := c.callWhileDrainingEvents(\"Command\", api.DebuggerCommand{Name: api.Next, ReturnInfoLoadConfig: c.retValLoadCfg, WithEvents: c.eventsFn != nil}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) ReverseNext() (*api.DebuggerState, error) {\n\tvar out CommandOut\n\terr := c.callWhileDrainingEvents(\"Command\", api.DebuggerCommand{Name: api.ReverseNext, ReturnInfoLoadConfig: c.retValLoadCfg, WithEvents: c.eventsFn != nil}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) Step() (*api.DebuggerState, error) {\n\tvar out CommandOut\n\terr := c.callWhileDrainingEvents(\"Command\", api.DebuggerCommand{Name: api.Step, ReturnInfoLoadConfig: c.retValLoadCfg, WithEvents: c.eventsFn != nil}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) ReverseStep() (*api.DebuggerState, error) {\n\tvar out CommandOut\n\terr := c.callWhileDrainingEvents(\"Command\", api.DebuggerCommand{Name: api.ReverseStep, ReturnInfoLoadConfig: c.retValLoadCfg, WithEvents: c.eventsFn != nil}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) StepOut() (*api.DebuggerState, error) {\n\tvar out CommandOut\n\terr := c.callWhileDrainingEvents(\"Command\", api.DebuggerCommand{Name: api.StepOut, ReturnInfoLoadConfig: c.retValLoadCfg, WithEvents: c.eventsFn != nil}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) ReverseStepOut() (*api.DebuggerState, error) {\n\tvar out CommandOut\n\terr := c.callWhileDrainingEvents(\"Command\", api.DebuggerCommand{Name: api.ReverseStepOut, ReturnInfoLoadConfig: c.retValLoadCfg, WithEvents: c.eventsFn != nil}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) Call(goroutineID int64, expr string, unsafe bool) (*api.DebuggerState, error) {\n\tvar out CommandOut\n\terr := c.callWhileDrainingEvents(\"Command\", api.DebuggerCommand{Name: api.Call, ReturnInfoLoadConfig: c.retValLoadCfg, Expr: expr, UnsafeCall: unsafe, GoroutineID: goroutineID, WithEvents: c.eventsFn != nil}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) StepInstruction(skipCalls bool) (*api.DebuggerState, error) {\n\tvar out CommandOut\n\tname := api.StepInstruction\n\tif skipCalls {\n\t\tname = api.NextInstruction\n\t}\n\terr := c.callWhileDrainingEvents(\"Command\", api.DebuggerCommand{Name: name, WithEvents: c.eventsFn != nil}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) ReverseStepInstruction(skipCalls bool) (*api.DebuggerState, error) {\n\tvar out CommandOut\n\tname := api.ReverseStepInstruction\n\tif skipCalls {\n\t\tname = api.ReverseNextInstruction\n\t}\n\terr := c.callWhileDrainingEvents(\"Command\", api.DebuggerCommand{Name: name, WithEvents: c.eventsFn != nil}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) SwitchThread(threadID int) (*api.DebuggerState, error) {\n\tvar out CommandOut\n\tcmd := api.DebuggerCommand{\n\t\tName:     api.SwitchThread,\n\t\tThreadID: threadID,\n\t}\n\terr := c.call(\"Command\", cmd, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) SwitchGoroutine(goroutineID int64) (*api.DebuggerState, error) {\n\tvar out CommandOut\n\tcmd := api.DebuggerCommand{\n\t\tName:        api.SwitchGoroutine,\n\t\tGoroutineID: goroutineID,\n\t}\n\terr := c.call(\"Command\", cmd, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) Halt() (*api.DebuggerState, error) {\n\tvar out CommandOut\n\terr := c.call(\"Command\", api.DebuggerCommand{Name: api.Halt}, &out)\n\treturn &out.State, err\n}\n\nfunc (c *RPCClient) GetBufferedTracepoints() ([]api.TracepointResult, error) {\n\tvar out GetBufferedTracepointsOut\n\terr := c.call(\"GetBufferedTracepoints\", GetBufferedTracepointsIn{}, &out)\n\treturn out.TracepointResults, err\n}\n\nfunc (c *RPCClient) GetBreakpoint(id int) (*api.Breakpoint, error) {\n\tvar out GetBreakpointOut\n\terr := c.call(\"GetBreakpoint\", GetBreakpointIn{id, \"\"}, &out)\n\treturn &out.Breakpoint, err\n}\n\nfunc (c *RPCClient) GetBreakpointByName(name string) (*api.Breakpoint, error) {\n\tvar out GetBreakpointOut\n\terr := c.call(\"GetBreakpoint\", GetBreakpointIn{0, name}, &out)\n\treturn &out.Breakpoint, err\n}\n\n// CreateBreakpoint will send a request to the RPC server to create a breakpoint.\n// Please refer to the documentation for `Debugger.CreateBreakpoint` for a description of how\n// the requested breakpoint parameters are interpreted and used:\n// https://pkg.go.dev/github.com/go-delve/delve/service/debugger#Debugger.CreateBreakpoint\nfunc (c *RPCClient) CreateBreakpoint(breakPoint *api.Breakpoint) (*api.Breakpoint, error) {\n\tvar out CreateBreakpointOut\n\terr := c.call(\"CreateBreakpoint\", CreateBreakpointIn{*breakPoint, \"\", nil, false}, &out)\n\treturn &out.Breakpoint, err\n}\n\n// CreateBreakpointWithExpr is like CreateBreakpoint but will also set a\n// location expression to be used to restore the breakpoint after it is\n// disabled.\nfunc (c *RPCClient) CreateBreakpointWithExpr(breakPoint *api.Breakpoint, locExpr string, substitutePathRules [][2]string, suspended bool) (*api.Breakpoint, error) {\n\tvar out CreateBreakpointOut\n\terr := c.call(\"CreateBreakpoint\", CreateBreakpointIn{*breakPoint, locExpr, substitutePathRules, suspended}, &out)\n\treturn &out.Breakpoint, err\n}\n\nfunc (c *RPCClient) CreateEBPFTracepoint(fnName string) error {\n\tvar out CreateEBPFTracepointOut\n\treturn c.call(\"CreateEBPFTracepoint\", CreateEBPFTracepointIn{FunctionName: fnName}, &out)\n}\n\nfunc (c *RPCClient) CreateWatchpoint(scope api.EvalScope, expr string, wtype api.WatchType) (*api.Breakpoint, error) {\n\tvar out CreateWatchpointOut\n\terr := c.call(\"CreateWatchpoint\", CreateWatchpointIn{scope, expr, wtype}, &out)\n\treturn out.Breakpoint, err\n}\n\nfunc (c *RPCClient) ListBreakpoints(all bool) ([]*api.Breakpoint, error) {\n\tvar out ListBreakpointsOut\n\terr := c.call(\"ListBreakpoints\", ListBreakpointsIn{all}, &out)\n\treturn out.Breakpoints, err\n}\n\nfunc (c *RPCClient) ClearBreakpoint(id int) (*api.Breakpoint, error) {\n\tvar out ClearBreakpointOut\n\terr := c.call(\"ClearBreakpoint\", ClearBreakpointIn{id, \"\"}, &out)\n\treturn out.Breakpoint, err\n}\n\nfunc (c *RPCClient) ClearBreakpointByName(name string) (*api.Breakpoint, error) {\n\tvar out ClearBreakpointOut\n\terr := c.call(\"ClearBreakpoint\", ClearBreakpointIn{0, name}, &out)\n\treturn out.Breakpoint, err\n}\n\nfunc (c *RPCClient) ToggleBreakpoint(id int) (*api.Breakpoint, error) {\n\tvar out ToggleBreakpointOut\n\terr := c.call(\"ToggleBreakpoint\", ToggleBreakpointIn{id, \"\"}, &out)\n\treturn out.Breakpoint, err\n}\n\nfunc (c *RPCClient) ToggleBreakpointByName(name string) (*api.Breakpoint, error) {\n\tvar out ToggleBreakpointOut\n\terr := c.call(\"ToggleBreakpoint\", ToggleBreakpointIn{0, name}, &out)\n\treturn out.Breakpoint, err\n}\n\nfunc (c *RPCClient) AmendBreakpoint(bp *api.Breakpoint) error {\n\tout := new(AmendBreakpointOut)\n\terr := c.call(\"AmendBreakpoint\", AmendBreakpointIn{*bp}, out)\n\treturn err\n}\n\nfunc (c *RPCClient) CancelNext() error {\n\tvar out CancelNextOut\n\treturn c.call(\"CancelNext\", CancelNextIn{}, &out)\n}\n\nfunc (c *RPCClient) ListThreads() ([]*api.Thread, error) {\n\tvar out ListThreadsOut\n\terr := c.call(\"ListThreads\", ListThreadsIn{}, &out)\n\treturn out.Threads, err\n}\n\nfunc (c *RPCClient) GetThread(id int) (*api.Thread, error) {\n\tvar out GetThreadOut\n\terr := c.call(\"GetThread\", GetThreadIn{id}, &out)\n\treturn out.Thread, err\n}\n\nfunc (c *RPCClient) EvalVariable(scope api.EvalScope, expr string, cfg api.LoadConfig) (*api.Variable, error) {\n\tvar out EvalOut\n\terr := c.call(\"Eval\", EvalIn{scope, expr, &cfg}, &out)\n\treturn out.Variable, err\n}\n\nfunc (c *RPCClient) SetVariable(scope api.EvalScope, symbol, value string) error {\n\tout := new(SetOut)\n\treturn c.call(\"Set\", SetIn{scope, symbol, value}, out)\n}\n\nfunc (c *RPCClient) ListSources(filter string) ([]string, error) {\n\tsources := new(ListSourcesOut)\n\terr := c.call(\"ListSources\", ListSourcesIn{filter}, sources)\n\treturn sources.Sources, err\n}\n\nfunc (c *RPCClient) ListFunctions(filter string, TraceFollow int) ([]string, error) {\n\tfuncs := new(ListFunctionsOut)\n\terr := c.call(\"ListFunctions\", ListFunctionsIn{filter, TraceFollow}, funcs)\n\treturn funcs.Funcs, err\n}\n\nfunc (c *RPCClient) ListTypes(filter string) ([]string, error) {\n\ttypes := new(ListTypesOut)\n\terr := c.call(\"ListTypes\", ListTypesIn{filter}, types)\n\treturn types.Types, err\n}\n\nfunc (c *RPCClient) ListPackageVariables(filter string, cfg api.LoadConfig) ([]api.Variable, error) {\n\tvar out ListPackageVarsOut\n\terr := c.call(\"ListPackageVars\", ListPackageVarsIn{filter, cfg}, &out)\n\treturn out.Variables, err\n}\n\nfunc (c *RPCClient) ListPackagesBuildInfo(filter string, includeFiles bool) ([]api.PackageBuildInfo, error) {\n\tvar out ListPackagesBuildInfoOut\n\terr := c.call(\"ListPackagesBuildInfo\", ListPackagesBuildInfoIn{Filter: filter, IncludeFiles: includeFiles}, &out)\n\treturn out.List, err\n}\n\nfunc (c *RPCClient) ListLocalVariables(scope api.EvalScope, cfg api.LoadConfig) ([]api.Variable, error) {\n\tvar out ListLocalVarsOut\n\terr := c.call(\"ListLocalVars\", ListLocalVarsIn{scope, cfg}, &out)\n\treturn out.Variables, err\n}\n\nfunc (c *RPCClient) ListThreadRegisters(threadID int, includeFp bool) (api.Registers, error) {\n\tout := new(ListRegistersOut)\n\terr := c.call(\"ListRegisters\", ListRegistersIn{ThreadID: threadID, IncludeFp: includeFp, Scope: nil}, out)\n\treturn out.Regs, err\n}\n\nfunc (c *RPCClient) ListScopeRegisters(scope api.EvalScope, includeFp bool) (api.Registers, error) {\n\tout := new(ListRegistersOut)\n\terr := c.call(\"ListRegisters\", ListRegistersIn{ThreadID: 0, IncludeFp: includeFp, Scope: &scope}, out)\n\treturn out.Regs, err\n}\n\nfunc (c *RPCClient) ListFunctionArgs(scope api.EvalScope, cfg api.LoadConfig) ([]api.Variable, error) {\n\tvar out ListFunctionArgsOut\n\terr := c.call(\"ListFunctionArgs\", ListFunctionArgsIn{scope, cfg}, &out)\n\treturn out.Args, err\n}\n\nfunc (c *RPCClient) ListGoroutines(start, count int) ([]*api.Goroutine, int, error) {\n\tvar out ListGoroutinesOut\n\terr := c.call(\"ListGoroutines\", ListGoroutinesIn{start, count, nil, api.GoroutineGroupingOptions{}, nil}, &out)\n\treturn out.Goroutines, out.Nextg, err\n}\n\nfunc (c *RPCClient) ListGoroutinesWithFilter(start, count int, filters []api.ListGoroutinesFilter, group *api.GoroutineGroupingOptions, scope *api.EvalScope) ([]*api.Goroutine, []api.GoroutineGroup, int, bool, error) {\n\tif group == nil {\n\t\tgroup = &api.GoroutineGroupingOptions{}\n\t}\n\tvar out ListGoroutinesOut\n\terr := c.call(\"ListGoroutines\", ListGoroutinesIn{start, count, filters, *group, scope}, &out)\n\treturn out.Goroutines, out.Groups, out.Nextg, out.TooManyGroups, err\n}\n\nfunc (c *RPCClient) Stacktrace(goroutineId int64, depth, skip int, opts api.StacktraceOptions, cfg *api.LoadConfig) ([]api.Stackframe, error) {\n\tvar out StacktraceOut\n\terr := c.call(\"Stacktrace\", StacktraceIn{goroutineId, depth, false, false, opts, cfg, skip}, &out)\n\treturn out.Locations, err\n}\n\nfunc (c *RPCClient) Ancestors(goroutineID int64, numAncestors int, depth int) ([]api.Ancestor, error) {\n\tvar out AncestorsOut\n\terr := c.call(\"Ancestors\", AncestorsIn{goroutineID, numAncestors, depth}, &out)\n\treturn out.Ancestors, err\n}\n\nfunc (c *RPCClient) AttachedToExistingProcess() bool {\n\tout := new(AttachedToExistingProcessOut)\n\tc.call(\"AttachedToExistingProcess\", AttachedToExistingProcessIn{}, out)\n\treturn out.Answer\n}\n\nfunc (c *RPCClient) FindLocation(scope api.EvalScope, loc string, findInstructions bool, substitutePathRules [][2]string) ([]api.Location, string, error) {\n\tvar out FindLocationOut\n\terr := c.call(\"FindLocation\", FindLocationIn{scope, loc, !findInstructions, substitutePathRules}, &out)\n\treturn out.Locations, out.SubstituteLocExpr, err\n}\n\n// DisassembleRange disassembles code between startPC and endPC\nfunc (c *RPCClient) DisassembleRange(scope api.EvalScope, startPC, endPC uint64, flavour api.AssemblyFlavour) (api.AsmInstructions, error) {\n\tvar out DisassembleOut\n\terr := c.call(\"Disassemble\", DisassembleIn{scope, startPC, endPC, flavour}, &out)\n\treturn out.Disassemble, err\n}\n\n// DisassemblePC disassembles function containing pc\nfunc (c *RPCClient) DisassemblePC(scope api.EvalScope, pc uint64, flavour api.AssemblyFlavour) (api.AsmInstructions, error) {\n\tvar out DisassembleOut\n\terr := c.call(\"Disassemble\", DisassembleIn{scope, pc, 0, flavour}, &out)\n\treturn out.Disassemble, err\n}\n\n// Recorded returns true if the debugger target is a recording.\nfunc (c *RPCClient) Recorded() bool {\n\tout := new(RecordedOut)\n\tc.call(\"Recorded\", RecordedIn{}, out)\n\treturn out.Recorded\n}\n\n// TraceDirectory returns the path to the trace directory for a recording.\nfunc (c *RPCClient) TraceDirectory() (string, error) {\n\tvar out RecordedOut\n\terr := c.call(\"Recorded\", RecordedIn{}, &out)\n\treturn out.TraceDirectory, err\n}\n\n// Checkpoint sets a checkpoint at the current position.\nfunc (c *RPCClient) Checkpoint(where string) (checkpointID int, err error) {\n\tvar out CheckpointOut\n\terr = c.call(\"Checkpoint\", CheckpointIn{where}, &out)\n\treturn out.ID, err\n}\n\n// ListCheckpoints gets all checkpoints.\nfunc (c *RPCClient) ListCheckpoints() ([]api.Checkpoint, error) {\n\tvar out ListCheckpointsOut\n\terr := c.call(\"ListCheckpoints\", ListCheckpointsIn{}, &out)\n\treturn out.Checkpoints, err\n}\n\n// ClearCheckpoint removes a checkpoint\nfunc (c *RPCClient) ClearCheckpoint(id int) error {\n\tvar out ClearCheckpointOut\n\terr := c.call(\"ClearCheckpoint\", ClearCheckpointIn{id}, &out)\n\treturn err\n}\n\nfunc (c *RPCClient) SetReturnValuesLoadConfig(cfg *api.LoadConfig) {\n\tc.retValLoadCfg = cfg\n}\n\nfunc (c *RPCClient) SetEventsFn(eventsFn func(*api.Event)) {\n\tc.eventsFn = eventsFn\n}\n\nfunc (c *RPCClient) FunctionReturnLocations(fnName string) ([]uint64, error) {\n\tvar out FunctionReturnLocationsOut\n\terr := c.call(\"FunctionReturnLocations\", FunctionReturnLocationsIn{fnName}, &out)\n\treturn out.Addrs, err\n}\n\nfunc (c *RPCClient) IsMulticlient() bool {\n\tvar out IsMulticlientOut\n\tc.call(\"IsMulticlient\", IsMulticlientIn{}, &out)\n\treturn out.IsMulticlient\n}\n\nfunc (c *RPCClient) Disconnect(cont bool) error {\n\tif cont {\n\t\tout := new(CommandOut)\n\t\tc.client.Go(\"RPCServer.Command\", &api.DebuggerCommand{Name: api.Continue, ReturnInfoLoadConfig: c.retValLoadCfg}, &out, nil)\n\t}\n\treturn c.client.Close()\n}\n\nfunc (c *RPCClient) ListDynamicLibraries() ([]api.Image, bool, error) {\n\tvar out ListDynamicLibrariesOut\n\tc.call(\"ListDynamicLibraries\", ListDynamicLibrariesIn{}, &out)\n\treturn out.List, out.ExecutableTrimpath, nil\n}\n\nfunc (c *RPCClient) ExamineMemory(address uint64, count int) ([]byte, bool, error) {\n\tout := &ExaminedMemoryOut{}\n\n\terr := c.call(\"ExamineMemory\", ExamineMemoryIn{Length: count, Address: address}, out)\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\treturn out.Mem, out.IsLittleEndian, nil\n}\n\nfunc (c *RPCClient) StopRecording() error {\n\treturn c.call(\"StopRecording\", StopRecordingIn{}, &StopRecordingOut{})\n}\n\nfunc (c *RPCClient) CoreDumpStart(dest string) (api.DumpState, error) {\n\tout := &DumpStartOut{}\n\terr := c.call(\"DumpStart\", DumpStartIn{Destination: dest}, out)\n\treturn out.State, err\n}\n\nfunc (c *RPCClient) CoreDumpWait(msec int) api.DumpState {\n\tout := &DumpWaitOut{}\n\t_ = c.call(\"DumpWait\", DumpWaitIn{Wait: msec}, out)\n\treturn out.State\n}\n\nfunc (c *RPCClient) CoreDumpCancel() error {\n\tout := &DumpCancelOut{}\n\treturn c.call(\"DumpCancel\", DumpCancelIn{}, out)\n}\n\n// ListTargets returns the current list of debug targets.\nfunc (c *RPCClient) ListTargets() ([]api.Target, error) {\n\tout := &ListTargetsOut{}\n\terr := c.call(\"ListTargets\", ListTargetsIn{}, out)\n\treturn out.Targets, err\n}\n\n// FollowExec enabled or disabled follow exec mode. When follow exec is\n// enabled Delve will automatically attach to new subprocesses with a\n// command line matched by regex, if regex is nil all new subprocesses are\n// automatically debugged.\nfunc (c *RPCClient) FollowExec(v bool, regex string) error {\n\tout := &FollowExecOut{}\n\terr := c.call(\"FollowExec\", FollowExecIn{Enable: v, Regex: regex}, out)\n\treturn err\n}\n\n// FollowExecEnabled returns true if follow exec mode is enabled.\nfunc (c *RPCClient) FollowExecEnabled() bool {\n\tout := &FollowExecEnabledOut{}\n\t_ = c.call(\"FollowExecEnabled\", FollowExecEnabledIn{}, out)\n\treturn out.Enabled\n}\n\nfunc (c *RPCClient) SetDebugInfoDirectories(v []string) error {\n\treturn c.call(\"DebugInfoDirectories\", DebugInfoDirectoriesIn{Set: true, List: v}, &DebugInfoDirectoriesOut{})\n}\n\nfunc (c *RPCClient) GetDebugInfoDirectories() ([]string, error) {\n\tout := &DebugInfoDirectoriesOut{}\n\terr := c.call(\"DebugInfoDirectories\", DebugInfoDirectoriesIn{Set: false, List: nil}, out)\n\treturn out.List, err\n}\n\ntype goListEntry struct {\n\tDir        string\n\tImportPath string\n\tName       string\n\tModule     *goListModule\n}\n\ntype goListModule struct {\n\tPath string\n}\n\n// MakeGuessSusbtitutePathIn returns a mapping from modules to client\n// directories using \"go list\".\nfunc MakeGuessSusbtitutePathIn() (*api.GuessSubstitutePathIn, error) {\n\tcmd := exec.Command(\"go\", \"list\", \"--json\", \"all\")\n\tbuf, err := cmd.Output()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error running go list %v: output %q\", err, string(buf))\n\t}\n\timportPathOfMainPackage := \"\"\n\timportPathOfMainPackageOk := true\n\tmod2dir := make(map[string]string)\n\td := json.NewDecoder(bytes.NewReader(buf))\n\tfor d.More() {\n\t\tvar e goListEntry\n\t\terr := d.Decode(&e)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif e.Module == nil {\n\t\t\tcontinue\n\t\t}\n\t\tif !strings.HasPrefix(e.ImportPath, e.Module.Path) {\n\t\t\tcontinue\n\t\t}\n\t\tpkgWithoutModule := e.ImportPath[len(e.Module.Path):]\n\t\telems := 0\n\t\tfor _, c := range pkgWithoutModule {\n\t\t\tif c == '/' {\n\t\t\t\telems++\n\t\t\t}\n\t\t}\n\t\tdir := e.Dir\n\t\tfor i := 0; i < elems; i++ {\n\t\t\tdir = filepath.Dir(dir)\n\t\t}\n\t\tif mod2dir[e.Module.Path] != \"\" && mod2dir[e.Module.Path] != dir {\n\t\t\treturn nil, fmt.Errorf(\"could not determine path for module %s (got %q and %q)\", e.Module.Path, mod2dir[e.Module.Path], dir)\n\t\t}\n\t\tmod2dir[e.Module.Path] = dir\n\t\tif e.Name == \"main\" {\n\t\t\tif importPathOfMainPackage != \"\" && importPathOfMainPackage != e.ImportPath {\n\t\t\t\timportPathOfMainPackageOk = false\n\t\t\t}\n\t\t\timportPathOfMainPackage = e.ImportPath\n\t\t}\n\t}\n\tbuf, err = exec.Command(\"go\", \"env\", \"GOROOT\").Output()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tclientGoroot := strings.TrimSpace(string(buf))\n\tif !importPathOfMainPackageOk {\n\t\t// There were multiple main packages\n\t\timportPathOfMainPackage = \"\"\n\t}\n\treturn &api.GuessSubstitutePathIn{ClientGOROOT: clientGoroot, ImportPathOfMainPackage: importPathOfMainPackage, ClientModuleDirectories: mod2dir}, nil\n}\n\nfunc (c *RPCClient) GuessSubstitutePath() ([][2]string, error) {\n\tin, err := MakeGuessSusbtitutePathIn()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tout := &GuessSubstitutePathOut{}\n\terr = c.call(\"GuessSubstitutePath\", GuessSubstitutePathIn{*in}, out)\n\treturn out.List, err\n}\n\nfunc (c *RPCClient) CancelDownloads() error {\n\tout := &CancelDownloadsOut{}\n\treturn c.call(\"CancelDownloads\", CancelDownloadsIn{}, out)\n}\n\nfunc (c *RPCClient) DownloadLibraryDebugInfo(n int) error {\n\tout := DownloadLibraryDebugInfoOut{}\n\treturn c.call(\"DownloadLibraryDebugInfo\", DownloadLibraryDebugInfoIn{n}, out)\n}\n\nfunc (c *RPCClient) call(method string, args, reply any) error {\n\treturn c.client.Call(\"RPCServer.\"+method, args, reply)\n}\n\nfunc (c *RPCClient) callWhileDrainingEvents(method string, args, reply any) error {\n\tdone := c.drainEvents()\n\terr := c.call(method, args, reply)\n\t<-done\n\treturn err\n}\n\nfunc (c *RPCClient) CallAPI(method string, args, reply any) error {\n\treturn c.call(method, args, reply)\n}\n"
  },
  {
    "path": "service/rpc2/server.go",
    "content": "package rpc2\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"regexp\"\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/go-delve/delve/pkg/dwarf/op\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n\t\"github.com/go-delve/delve/service/debugger\"\n)\n\ntype RPCServer struct {\n\t// config is all the information necessary to start the debugger and server.\n\tconfig *service.Config\n\t// debugger is a debugger service.\n\tdebugger   *debugger.Debugger\n\teventsChan chan *proc.Event\n}\n\nconst eventBufferSize = 100\n\nfunc NewServer(config *service.Config, debugger *debugger.Debugger) *RPCServer {\n\treturn &RPCServer{config, debugger, make(chan *proc.Event, eventBufferSize)}\n}\n\ntype ProcessPidIn struct {\n}\n\ntype ProcessPidOut struct {\n\tPid int\n}\n\n// ProcessPid returns the pid of the process we are debugging.\nfunc (s *RPCServer) ProcessPid(arg ProcessPidIn, out *ProcessPidOut) error {\n\tout.Pid = s.debugger.ProcessPid()\n\treturn nil\n}\n\ntype LastModifiedIn struct {\n}\n\ntype LastModifiedOut struct {\n\tTime time.Time\n}\n\nfunc (s *RPCServer) LastModified(arg LastModifiedIn, out *LastModifiedOut) error {\n\tout.Time = s.debugger.LastModified()\n\treturn nil\n}\n\ntype DetachIn struct {\n\tKill bool\n}\n\ntype DetachOut struct {\n}\n\n// Detach detaches the debugger, optionally killing the process.\nfunc (s *RPCServer) Detach(arg DetachIn, out *DetachOut) error {\n\treturn s.debugger.Detach(arg.Kill)\n}\n\ntype RestartIn struct {\n\t// Position to restart from, if it starts with 'c' it's a checkpoint ID,\n\t// otherwise it's an event number. Only valid for recorded targets.\n\tPosition string\n\n\t// ResetArgs tell whether NewArgs and NewRedirects should take effect.\n\tResetArgs bool\n\t// NewArgs are arguments to launch a new process.  They replace only the\n\t// argv[1] and later. Argv[0] cannot be changed.\n\tNewArgs []string\n\n\t// When Rerecord is set the target will be rerecorded\n\tRerecord bool\n\n\t// When Rebuild is set the process will be build again\n\tRebuild bool\n\n\tNewRedirects [3]string\n}\n\ntype RestartOut struct {\n\tDiscardedBreakpoints []api.DiscardedBreakpoint\n}\n\n// Restart restarts program.\nfunc (s *RPCServer) Restart(arg RestartIn, cb service.RPCCallback) {\n\tclose(cb.SetupDoneChan())\n\tif s.config.Debugger.AttachPid != 0 {\n\t\tcb.Return(nil, errors.New(\"cannot restart process Delve did not create\"))\n\t\treturn\n\t}\n\tvar out RestartOut\n\tvar err error\n\tout.DiscardedBreakpoints, err = s.debugger.Restart(arg.Rerecord, arg.Position, arg.ResetArgs, arg.NewArgs, arg.NewRedirects, arg.Rebuild)\n\tcb.Return(out, err)\n}\n\ntype StateIn struct {\n\t// If NonBlocking is true State will return immediately even if the target process is running.\n\tNonBlocking bool\n}\n\ntype StateOut struct {\n\tState *api.DebuggerState\n}\n\n// State returns the current debugger state.\nfunc (s *RPCServer) State(arg StateIn, cb service.RPCCallback) {\n\tclose(cb.SetupDoneChan())\n\tvar out StateOut\n\tst, err := s.debugger.State(arg.NonBlocking)\n\tif err != nil {\n\t\tcb.Return(nil, err)\n\t\treturn\n\t}\n\tout.State = st\n\tcb.Return(out, nil)\n}\n\ntype CommandOut struct {\n\tState api.DebuggerState\n}\n\n// Command interrupts, continues and steps through the program.\nfunc (s *RPCServer) Command(command api.DebuggerCommand, cb service.RPCCallback) {\n\teventsFn := s.eventsFn\n\tif !command.WithEvents {\n\t\teventsFn = nil\n\t}\n\tst, err := s.debugger.Command(&command, cb.SetupDoneChan(), cb.DisconnectChan(), eventsFn)\n\tif err != nil {\n\t\tcb.Return(nil, err)\n\t\treturn\n\t}\n\tvar out CommandOut\n\tout.State = *st\n\tcb.Return(out, nil)\n}\n\nfunc (s *RPCServer) eventsFn(event *proc.Event) {\n\ts.eventsChan <- event\n}\n\ntype GetBufferedTracepointsIn struct {\n}\n\ntype GetBufferedTracepointsOut struct {\n\tTracepointResults []api.TracepointResult\n}\n\nfunc (s *RPCServer) GetBufferedTracepoints(arg GetBufferedTracepointsIn, out *GetBufferedTracepointsOut) error {\n\tout.TracepointResults = s.debugger.GetBufferedTracepoints()\n\treturn nil\n}\n\ntype GetBreakpointIn struct {\n\tId   int\n\tName string\n}\n\ntype GetBreakpointOut struct {\n\tBreakpoint api.Breakpoint\n}\n\n// GetBreakpoint gets a breakpoint by Name (if Name is not an empty string) or by ID.\nfunc (s *RPCServer) GetBreakpoint(arg GetBreakpointIn, out *GetBreakpointOut) error {\n\tvar bp *api.Breakpoint\n\tif arg.Name != \"\" {\n\t\tbp = s.debugger.FindBreakpointByName(arg.Name)\n\t\tif bp == nil {\n\t\t\treturn fmt.Errorf(\"no breakpoint with name %s\", arg.Name)\n\t\t}\n\t} else {\n\t\tbp = s.debugger.FindBreakpoint(arg.Id)\n\t\tif bp == nil {\n\t\t\treturn fmt.Errorf(\"no breakpoint with id %d\", arg.Id)\n\t\t}\n\t}\n\tout.Breakpoint = *bp\n\treturn nil\n}\n\ntype StacktraceIn struct {\n\tId     int64\n\tDepth  int\n\tFull   bool\n\tDefers bool // read deferred functions (equivalent to passing StacktraceReadDefers in Opts)\n\tOpts   api.StacktraceOptions\n\tCfg    *api.LoadConfig\n\tSkip   int // number of frames to skip\n}\n\ntype StacktraceOut struct {\n\tLocations []api.Stackframe\n}\n\n// Stacktrace returns stacktrace of goroutine Id up to the specified Depth.\n//\n// If Full is set it will also the variable of all local variables\n// and function arguments of all stack frames.\nfunc (s *RPCServer) Stacktrace(arg StacktraceIn, out *StacktraceOut) error {\n\tcfg := arg.Cfg\n\tif cfg == nil && arg.Full {\n\t\tcfg = &api.LoadConfig{FollowPointers: true, MaxVariableRecurse: 1, MaxStringLen: 64, MaxArrayValues: 64, MaxStructFields: -1}\n\t}\n\tif arg.Defers {\n\t\targ.Opts |= api.StacktraceReadDefers\n\t}\n\trawlocs, err := s.debugger.Stacktrace(arg.Id, arg.Depth, arg.Opts)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif arg.Skip > 0 {\n\t\tif arg.Skip >= len(rawlocs) {\n\t\t\trawlocs = nil\n\t\t} else {\n\t\t\trawlocs = rawlocs[arg.Skip:]\n\t\t}\n\t}\n\tout.Locations, err = s.debugger.ConvertStacktrace(rawlocs, api.LoadConfigToProc(cfg))\n\treturn err\n}\n\ntype AncestorsIn struct {\n\tGoroutineID  int64\n\tNumAncestors int\n\tDepth        int\n}\n\ntype AncestorsOut struct {\n\tAncestors []api.Ancestor\n}\n\n// Ancestors returns the stacktraces for the ancestors of a goroutine.\nfunc (s *RPCServer) Ancestors(arg AncestorsIn, out *AncestorsOut) error {\n\tvar err error\n\tout.Ancestors, err = s.debugger.Ancestors(arg.GoroutineID, arg.NumAncestors, arg.Depth)\n\treturn err\n}\n\ntype ListBreakpointsIn struct {\n\tAll bool\n}\n\ntype ListBreakpointsOut struct {\n\tBreakpoints []*api.Breakpoint\n}\n\n// ListBreakpoints gets all breakpoints.\nfunc (s *RPCServer) ListBreakpoints(arg ListBreakpointsIn, out *ListBreakpointsOut) error {\n\tout.Breakpoints = s.debugger.Breakpoints(arg.All)\n\treturn nil\n}\n\ntype CreateBreakpointIn struct {\n\tBreakpoint api.Breakpoint\n\n\tLocExpr             string\n\tSubstitutePathRules [][2]string\n\tSuspended           bool\n}\n\ntype CreateBreakpointOut struct {\n\tBreakpoint api.Breakpoint\n}\n\n// CreateBreakpoint creates a new breakpoint. The client is expected to populate `CreateBreakpointIn`\n// with an `api.Breakpoint` struct describing where to set the breakpoint. For more information on\n// how to properly request a breakpoint via the `api.Breakpoint` struct see the documentation for\n// `debugger.CreateBreakpoint` here: https://pkg.go.dev/github.com/go-delve/delve/service/debugger#Debugger.CreateBreakpoint.\nfunc (s *RPCServer) CreateBreakpoint(arg CreateBreakpointIn, out *CreateBreakpointOut) error {\n\tif err := api.ValidBreakpointName(arg.Breakpoint.Name); err != nil {\n\t\treturn err\n\t}\n\tcreatedbp, err := s.debugger.CreateBreakpoint(&arg.Breakpoint, arg.LocExpr, arg.SubstitutePathRules, arg.Suspended)\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Breakpoint = *createdbp\n\treturn nil\n}\n\ntype CreateEBPFTracepointIn struct {\n\tFunctionName string\n}\n\ntype CreateEBPFTracepointOut struct {\n\tBreakpoint api.Breakpoint\n}\n\nfunc (s *RPCServer) CreateEBPFTracepoint(arg CreateEBPFTracepointIn, out *CreateEBPFTracepointOut) error {\n\treturn s.debugger.CreateEBPFTracepoint(arg.FunctionName)\n}\n\ntype ClearBreakpointIn struct {\n\tId   int\n\tName string\n}\n\ntype ClearBreakpointOut struct {\n\tBreakpoint *api.Breakpoint\n}\n\n// ClearBreakpoint deletes a breakpoint by Name (if Name is not an\n// empty string) or by ID.\nfunc (s *RPCServer) ClearBreakpoint(arg ClearBreakpointIn, out *ClearBreakpointOut) error {\n\tvar bp *api.Breakpoint\n\tif arg.Name != \"\" {\n\t\tbp = s.debugger.FindBreakpointByName(arg.Name)\n\t\tif bp == nil {\n\t\t\treturn fmt.Errorf(\"no breakpoint with name %s\", arg.Name)\n\t\t}\n\t} else {\n\t\tbp = s.debugger.FindBreakpoint(arg.Id)\n\t\tif bp == nil {\n\t\t\treturn fmt.Errorf(\"no breakpoint with id %d\", arg.Id)\n\t\t}\n\t}\n\tdeleted, err := s.debugger.ClearBreakpoint(bp)\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Breakpoint = deleted\n\treturn nil\n}\n\ntype ToggleBreakpointIn struct {\n\tId   int\n\tName string\n}\n\ntype ToggleBreakpointOut struct {\n\tBreakpoint *api.Breakpoint\n}\n\n// ToggleBreakpoint toggles on or off a breakpoint by Name (if Name is not an\n// empty string) or by ID.\nfunc (s *RPCServer) ToggleBreakpoint(arg ToggleBreakpointIn, out *ToggleBreakpointOut) error {\n\tvar bp *api.Breakpoint\n\tif arg.Name != \"\" {\n\t\tbp = s.debugger.FindBreakpointByName(arg.Name)\n\t\tif bp == nil {\n\t\t\treturn fmt.Errorf(\"no breakpoint with name %s\", arg.Name)\n\t\t}\n\t} else {\n\t\tbp = s.debugger.FindBreakpoint(arg.Id)\n\t\tif bp == nil {\n\t\t\treturn fmt.Errorf(\"no breakpoint with id %d\", arg.Id)\n\t\t}\n\t}\n\tbp.Disabled = !bp.Disabled\n\tif err := api.ValidBreakpointName(bp.Name); err != nil {\n\t\treturn err\n\t}\n\tif err := s.debugger.AmendBreakpoint(bp); err != nil {\n\t\treturn err\n\t}\n\tout.Breakpoint = bp\n\treturn nil\n}\n\ntype AmendBreakpointIn struct {\n\tBreakpoint api.Breakpoint\n}\n\ntype AmendBreakpointOut struct {\n}\n\n// AmendBreakpoint allows user to update an existing breakpoint\n// for example to change the information retrieved when the\n// breakpoint is hit or to change, add or remove the break condition.\n//\n// arg.Breakpoint.ID must be a valid breakpoint ID\nfunc (s *RPCServer) AmendBreakpoint(arg AmendBreakpointIn, out *AmendBreakpointOut) error {\n\tif err := api.ValidBreakpointName(arg.Breakpoint.Name); err != nil {\n\t\treturn err\n\t}\n\treturn s.debugger.AmendBreakpoint(&arg.Breakpoint)\n}\n\ntype CancelNextIn struct {\n}\n\ntype CancelNextOut struct {\n}\n\nfunc (s *RPCServer) CancelNext(arg CancelNextIn, out *CancelNextOut) error {\n\treturn s.debugger.CancelNext()\n}\n\ntype ListThreadsIn struct {\n}\n\ntype ListThreadsOut struct {\n\tThreads []*api.Thread\n}\n\n// ListThreads lists all threads.\nfunc (s *RPCServer) ListThreads(arg ListThreadsIn, out *ListThreadsOut) (err error) {\n\tthreads, err := s.debugger.Threads()\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, unlock := s.debugger.LockTargetGroup()\n\tdefer unlock()\n\tout.Threads = api.ConvertThreads(threads, s.debugger.ConvertThreadBreakpoint)\n\treturn nil\n}\n\ntype GetThreadIn struct {\n\tId int\n}\n\ntype GetThreadOut struct {\n\tThread *api.Thread\n}\n\n// GetThread gets a thread by its ID.\nfunc (s *RPCServer) GetThread(arg GetThreadIn, out *GetThreadOut) error {\n\tt, err := s.debugger.FindThread(arg.Id)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif t == nil {\n\t\treturn fmt.Errorf(\"no thread with id %d\", arg.Id)\n\t}\n\t_, unlock := s.debugger.LockTargetGroup()\n\tdefer unlock()\n\tout.Thread = api.ConvertThread(t, s.debugger.ConvertThreadBreakpoint(t))\n\treturn nil\n}\n\ntype ListPackageVarsIn struct {\n\tFilter string\n\tCfg    api.LoadConfig\n}\n\ntype ListPackageVarsOut struct {\n\tVariables []api.Variable\n}\n\n// ListPackageVars lists all package variables in the context of the current thread.\nfunc (s *RPCServer) ListPackageVars(arg ListPackageVarsIn, out *ListPackageVarsOut) error {\n\tvars, err := s.debugger.PackageVariables(arg.Filter, *api.LoadConfigToProc(&arg.Cfg))\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Variables = api.ConvertVars(vars)\n\treturn nil\n}\n\ntype ListRegistersIn struct {\n\tThreadID  int\n\tIncludeFp bool\n\tScope     *api.EvalScope\n}\n\ntype ListRegistersOut struct {\n\tRegisters string\n\tRegs      api.Registers\n}\n\n// ListRegisters lists registers and their values.\n// If ListRegistersIn.Scope is not nil the registers of that eval scope will\n// be returned, otherwise ListRegistersIn.ThreadID will be used.\nfunc (s *RPCServer) ListRegisters(arg ListRegistersIn, out *ListRegistersOut) error {\n\tif arg.ThreadID == 0 && arg.Scope == nil {\n\t\tstate, err := s.debugger.State(false)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\targ.ThreadID = state.CurrentThread.ID\n\t}\n\n\tvar regs *op.DwarfRegisters\n\tvar dwarfRegisterToString proc.DwarfRegisterToStringFunc\n\tvar err error\n\n\tif arg.Scope != nil {\n\t\tregs, dwarfRegisterToString, err = s.debugger.ScopeRegisters(arg.Scope.GoroutineID, arg.Scope.Frame, arg.Scope.DeferredCall)\n\t} else {\n\t\tregs, dwarfRegisterToString, err = s.debugger.ThreadRegisters(arg.ThreadID)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Regs = api.ConvertRegisters(regs, dwarfRegisterToString, arg.IncludeFp)\n\tout.Registers = out.Regs.String()\n\n\treturn nil\n}\n\ntype ListLocalVarsIn struct {\n\tScope api.EvalScope\n\tCfg   api.LoadConfig\n}\n\ntype ListLocalVarsOut struct {\n\tVariables []api.Variable\n}\n\n// ListLocalVars lists all local variables in scope.\nfunc (s *RPCServer) ListLocalVars(arg ListLocalVarsIn, out *ListLocalVarsOut) error {\n\tvars, err := s.debugger.LocalVariables(arg.Scope.GoroutineID, arg.Scope.Frame, arg.Scope.DeferredCall, *api.LoadConfigToProc(&arg.Cfg))\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Variables = api.ConvertVars(vars)\n\treturn nil\n}\n\ntype ListFunctionArgsIn struct {\n\tScope api.EvalScope\n\tCfg   api.LoadConfig\n}\n\ntype ListFunctionArgsOut struct {\n\tArgs []api.Variable\n}\n\n// ListFunctionArgs lists all arguments to the current function\nfunc (s *RPCServer) ListFunctionArgs(arg ListFunctionArgsIn, out *ListFunctionArgsOut) error {\n\tvars, err := s.debugger.FunctionArguments(arg.Scope.GoroutineID, arg.Scope.Frame, arg.Scope.DeferredCall, *api.LoadConfigToProc(&arg.Cfg))\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Args = api.ConvertVars(vars)\n\treturn nil\n}\n\ntype EvalIn struct {\n\tScope api.EvalScope\n\tExpr  string\n\tCfg   *api.LoadConfig\n}\n\ntype EvalOut struct {\n\tVariable *api.Variable\n}\n\n// Eval returns a variable in the specified context.\n//\n// See https://github.com/go-delve/delve/blob/master/Documentation/cli/expr.md\n// for a description of acceptable values of arg.Expr.\nfunc (s *RPCServer) Eval(arg EvalIn, out *EvalOut) error {\n\tcfg := arg.Cfg\n\tif cfg == nil {\n\t\tcfg = &api.LoadConfig{FollowPointers: true, MaxVariableRecurse: 1, MaxStringLen: 64, MaxArrayValues: 64, MaxStructFields: -1}\n\t}\n\tpcfg := *api.LoadConfigToProc(cfg)\n\tv, err := s.debugger.EvalVariableInScope(arg.Scope.GoroutineID, arg.Scope.Frame, arg.Scope.DeferredCall, arg.Expr, pcfg)\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Variable = api.ConvertVar(v)\n\treturn nil\n}\n\ntype SetIn struct {\n\tScope  api.EvalScope\n\tSymbol string\n\tValue  string\n}\n\ntype SetOut struct {\n}\n\n// Set sets the value of a variable. Only numerical types and\n// pointers are currently supported.\nfunc (s *RPCServer) Set(arg SetIn, out *SetOut) error {\n\treturn s.debugger.SetVariableInScope(arg.Scope.GoroutineID, arg.Scope.Frame, arg.Scope.DeferredCall, arg.Symbol, arg.Value)\n}\n\ntype ListSourcesIn struct {\n\tFilter string\n}\n\ntype ListSourcesOut struct {\n\tSources []string\n}\n\n// ListSources lists all source files in the process matching filter.\nfunc (s *RPCServer) ListSources(arg ListSourcesIn, out *ListSourcesOut) error {\n\tss, err := s.debugger.Sources(arg.Filter)\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Sources = ss\n\treturn nil\n}\n\ntype ListFunctionsIn struct {\n\tFilter      string\n\tFollowCalls int\n}\n\ntype ListFunctionsOut struct {\n\tFuncs []string\n}\n\n// ListFunctions lists all functions in the process matching filter.\nfunc (s *RPCServer) ListFunctions(arg ListFunctionsIn, out *ListFunctionsOut) error {\n\tfns, err := s.debugger.Functions(arg.Filter, arg.FollowCalls)\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Funcs = fns\n\treturn nil\n}\n\ntype ListTypesIn struct {\n\tFilter string\n}\n\ntype ListTypesOut struct {\n\tTypes []string\n}\n\n// ListTypes lists all types in the process matching filter.\nfunc (s *RPCServer) ListTypes(arg ListTypesIn, out *ListTypesOut) error {\n\ttps, err := s.debugger.Types(arg.Filter)\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Types = tps\n\treturn nil\n}\n\ntype ListGoroutinesIn struct {\n\tStart int\n\tCount int\n\n\tFilters []api.ListGoroutinesFilter\n\tapi.GoroutineGroupingOptions\n\n\tEvalScope *api.EvalScope\n}\n\ntype ListGoroutinesOut struct {\n\tGoroutines    []*api.Goroutine\n\tNextg         int\n\tGroups        []api.GoroutineGroup\n\tTooManyGroups bool\n}\n\n// ListGoroutines lists all goroutines.\n// If Count is specified ListGoroutines will return at the first Count\n// goroutines and an index in Nextg, that can be passed as the Start\n// parameter, to get more goroutines from ListGoroutines.\n// Passing a value of Start that wasn't returned by ListGoroutines will skip\n// an undefined number of goroutines.\n//\n// If arg.Filters are specified the list of returned goroutines is filtered\n// applying the specified filters.\n// For example:\n//\n//\tListGoroutinesFilter{ Kind: ListGoroutinesFilterUserLoc, Negated: false, Arg: \"afile.go\" }\n//\n// will only return goroutines whose UserLoc contains \"afile.go\" as a substring.\n// More specifically a goroutine matches a location filter if the specified\n// location, formatted like this:\n//\n//\tfilename:lineno in function\n//\n// contains Arg[0] as a substring.\n//\n// Filters can also be applied to goroutine labels:\n//\n//\tListGoroutineFilter{ Kind: ListGoroutinesFilterLabel, Negated: false, Arg: \"key=value\" }\n//\n// this filter will only return goroutines that have a key=value label.\n//\n// If arg.GroupBy is not GoroutineFieldNone then the goroutines will\n// be grouped with the specified criterion.\n// If the value of arg.GroupBy is GoroutineLabel goroutines will\n// be grouped by the value of the label with key GroupByKey.\n// For each group a maximum of MaxGroupMembers example goroutines are\n// returned, as well as the total number of goroutines in the group.\nfunc (s *RPCServer) ListGoroutines(arg ListGoroutinesIn, out *ListGoroutinesOut) error {\n\t//TODO(aarzilli): if arg contains a running goroutines filter (not negated)\n\t// and start == 0 and count == 0 then we can optimize this by just looking\n\t// at threads directly.\n\n\tvar gs []*proc.G\n\tvar nextg int\n\tvar err error\n\tvar gsLoaded bool\n\n\tfor _, filter := range arg.Filters {\n\t\tif filter.Kind == api.GoroutineWaitingOnChannel {\n\t\t\tif filter.Negated {\n\t\t\t\treturn errors.New(\"channel filter can not be negated\")\n\t\t\t}\n\t\t\tif arg.Count == 0 {\n\t\t\t\treturn errors.New(\"count == 0 not allowed with a channel filter\")\n\t\t\t}\n\t\t\tif arg.EvalScope == nil {\n\t\t\t\treturn errors.New(\"channel filter without eval scope\")\n\t\t\t}\n\t\t\tgs, err = s.debugger.ChanGoroutines(arg.EvalScope.GoroutineID, arg.EvalScope.Frame, arg.EvalScope.DeferredCall, filter.Arg, arg.Start, arg.Count)\n\t\t\tif len(gs) == arg.Count {\n\t\t\t\tnextg = arg.Start + len(gs)\n\t\t\t} else {\n\t\t\t\tnextg = -1\n\t\t\t}\n\t\t\tgsLoaded = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif !gsLoaded {\n\t\tgs, nextg, err = s.debugger.Goroutines(arg.Start, arg.Count)\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tgs = s.debugger.FilterGoroutines(gs, arg.Filters)\n\tgs, out.Groups, out.TooManyGroups = s.debugger.GroupGoroutines(gs, &arg.GoroutineGroupingOptions)\n\ttgrp, unlock := s.debugger.LockTargetGroup()\n\tdefer unlock()\n\tout.Goroutines = api.ConvertGoroutines(tgrp.Selected, gs)\n\tout.Nextg = nextg\n\treturn nil\n}\n\ntype AttachedToExistingProcessIn struct {\n}\n\ntype AttachedToExistingProcessOut struct {\n\tAnswer bool\n}\n\n// AttachedToExistingProcess returns whether we attached to a running process or not\nfunc (s *RPCServer) AttachedToExistingProcess(arg AttachedToExistingProcessIn, out *AttachedToExistingProcessOut) error {\n\tout.Answer = s.debugger.AttachPid() != 0\n\treturn nil\n}\n\ntype FindLocationIn struct {\n\tScope                     api.EvalScope\n\tLoc                       string\n\tIncludeNonExecutableLines bool\n\n\t// SubstitutePathRules is a slice of source code path substitution rules,\n\t// the first entry of each pair is the path of a directory as it appears in\n\t// the executable file (i.e. the location of a source file when the program\n\t// was compiled), the second entry of each pair is the location of the same\n\t// directory on the client system.\n\tSubstitutePathRules [][2]string\n}\n\ntype FindLocationOut struct {\n\tLocations         []api.Location\n\tSubstituteLocExpr string // if this isn't an empty string it should be passed as the location expression for CreateBreakpoint instead of the original location expression\n}\n\n// FindLocation returns concrete location information described by a location expression.\n//\n//\tloc ::= <filename>:<line> | <function>[:<line>] | /<regex>/ | (+|-)<offset> | <line> | *<address>\n//\t* <filename> can be the full path of a file or just a suffix\n//\t* <function> ::= <package>.<receiver type>.<name> | <package>.(*<receiver type>).<name> | <receiver type>.<name> | <package>.<name> | (*<receiver type>).<name> | <name>\n//\t  <function> must be unambiguous\n//\t* /<regex>/ will return a location for each function matched by regex\n//\t* +<offset> returns a location for the line that is <offset> lines after the current line\n//\t* -<offset> returns a location for the line that is <offset> lines before the current line\n//\t* <line> returns a location for a line in the current file\n//\t* *<address> returns the location corresponding to the specified address\n//\n// NOTE: this function does not actually set breakpoints.\nfunc (s *RPCServer) FindLocation(arg FindLocationIn, out *FindLocationOut) error {\n\tvar err error\n\tout.Locations, out.SubstituteLocExpr, err = s.debugger.FindLocation(arg.Scope.GoroutineID, arg.Scope.Frame, arg.Scope.DeferredCall, arg.Loc, arg.IncludeNonExecutableLines, arg.SubstitutePathRules)\n\treturn err\n}\n\ntype DisassembleIn struct {\n\tScope          api.EvalScope\n\tStartPC, EndPC uint64\n\tFlavour        api.AssemblyFlavour\n}\n\ntype DisassembleOut struct {\n\tDisassemble api.AsmInstructions\n}\n\n// Disassemble code.\n//\n// If both StartPC and EndPC are non-zero the specified range will be disassembled, otherwise the function containing StartPC will be disassembled.\n//\n// Scope is used to mark the instruction the specified goroutine is stopped at.\n//\n// Disassemble will also try to calculate the destination address of an absolute indirect CALL if it happens to be the instruction the selected goroutine is stopped at.\nfunc (s *RPCServer) Disassemble(arg DisassembleIn, out *DisassembleOut) error {\n\tinsts, err := s.debugger.Disassemble(arg.Scope.GoroutineID, arg.StartPC, arg.EndPC)\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Disassemble = make(api.AsmInstructions, len(insts))\n\tfor i := range insts {\n\t\tout.Disassemble[i] = api.ConvertAsmInstruction(insts[i], s.debugger.AsmInstructionText(&insts[i], proc.AssemblyFlavour(arg.Flavour)))\n\t}\n\treturn nil\n}\n\ntype RecordedIn struct {\n}\n\ntype RecordedOut struct {\n\tRecorded       bool\n\tTraceDirectory string\n}\n\nfunc (s *RPCServer) Recorded(arg RecordedIn, out *RecordedOut) error {\n\tout.Recorded, out.TraceDirectory = s.debugger.Recorded()\n\treturn nil\n}\n\ntype CheckpointIn struct {\n\tWhere string\n}\n\ntype CheckpointOut struct {\n\tID int\n}\n\nfunc (s *RPCServer) Checkpoint(arg CheckpointIn, out *CheckpointOut) error {\n\tvar err error\n\tout.ID, err = s.debugger.Checkpoint(arg.Where)\n\treturn err\n}\n\ntype ListCheckpointsIn struct {\n}\n\ntype ListCheckpointsOut struct {\n\tCheckpoints []api.Checkpoint\n}\n\nfunc (s *RPCServer) ListCheckpoints(arg ListCheckpointsIn, out *ListCheckpointsOut) error {\n\tcps, err := s.debugger.Checkpoints()\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.Checkpoints = make([]api.Checkpoint, len(cps))\n\tfor i := range cps {\n\t\tout.Checkpoints[i] = api.Checkpoint(cps[i])\n\t}\n\treturn nil\n}\n\ntype ClearCheckpointIn struct {\n\tID int\n}\n\ntype ClearCheckpointOut struct {\n}\n\nfunc (s *RPCServer) ClearCheckpoint(arg ClearCheckpointIn, out *ClearCheckpointOut) error {\n\treturn s.debugger.ClearCheckpoint(arg.ID)\n}\n\ntype IsMulticlientIn struct {\n}\n\ntype IsMulticlientOut struct {\n\t// IsMulticlient returns true if the headless instance was started with --accept-multiclient\n\tIsMulticlient bool\n}\n\nfunc (s *RPCServer) IsMulticlient(arg IsMulticlientIn, out *IsMulticlientOut) error {\n\t*out = IsMulticlientOut{\n\t\tIsMulticlient: s.config.AcceptMulti,\n\t}\n\treturn nil\n}\n\n// FunctionReturnLocationsIn holds arguments for the\n// FunctionReturnLocationsRPC call. It holds the name of\n// the function for which all return locations should be\n// given.\ntype FunctionReturnLocationsIn struct {\n\t// FnName is the name of the function for which all\n\t// return locations should be given.\n\tFnName string\n}\n\n// FunctionReturnLocationsOut holds the result of the FunctionReturnLocations\n// RPC call. It provides the list of addresses that the given function returns,\n// for example with a `RET` instruction or `CALL runtime.deferreturn`.\ntype FunctionReturnLocationsOut struct {\n\t// Addrs is the list of all locations where the given function returns.\n\tAddrs []uint64\n}\n\n// FunctionReturnLocations is the implements the client call of the same name. Look at client documentation for more information.\nfunc (s *RPCServer) FunctionReturnLocations(in FunctionReturnLocationsIn, out *FunctionReturnLocationsOut) error {\n\taddrs, err := s.debugger.FunctionReturnLocations(in.FnName)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*out = FunctionReturnLocationsOut{\n\t\tAddrs: addrs,\n\t}\n\treturn nil\n}\n\n// ListDynamicLibrariesIn holds the arguments of ListDynamicLibraries\ntype ListDynamicLibrariesIn struct {\n}\n\n// ListDynamicLibrariesOut holds the return values of ListDynamicLibraries\ntype ListDynamicLibrariesOut struct {\n\tList []api.Image\n\n\tExecutableTrimpath bool\n}\n\nfunc (s *RPCServer) ListDynamicLibraries(in ListDynamicLibrariesIn, out *ListDynamicLibrariesOut) error {\n\timgs := s.debugger.ListDynamicLibraries()\n\t_, unlock := s.debugger.LockTargetGroup()\n\tdefer unlock()\n\tout.List = make([]api.Image, 0, len(imgs)-1)\n\tfor i := 1; i < len(imgs); i++ {\n\t\timg := api.ConvertImage(imgs[i])\n\t\timg.Trimpath = imgs[i].Trimpath\n\t\tout.List = append(out.List, img)\n\t}\n\tout.ExecutableTrimpath = imgs[0].Trimpath\n\treturn nil\n}\n\n// ListPackagesBuildInfoIn holds the arguments of ListPackagesBuildInfo.\ntype ListPackagesBuildInfoIn struct {\n\tIncludeFiles bool\n\tFilter       string // if not empty, returns only packages matching the regexp.\n}\n\n// ListPackagesBuildInfoOut holds the return values of ListPackagesBuildInfo.\ntype ListPackagesBuildInfoOut struct {\n\tList []api.PackageBuildInfo\n}\n\n// ListPackagesBuildInfo returns the list of packages used by the program along with\n// the directory where each package was compiled and optionally the list of\n// files constituting the package.\n// Note that the directory path is a best guess and may be wrong is a tool\n// other than cmd/go is used to perform the build.\nfunc (s *RPCServer) ListPackagesBuildInfo(in ListPackagesBuildInfoIn, out *ListPackagesBuildInfoOut) error {\n\tvar pattern *regexp.Regexp\n\tif in.Filter != \"\" {\n\t\tp, err := regexp.Compile(in.Filter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"invalid Filter pattern: %v\", err)\n\t\t}\n\t\tpattern = p\n\t}\n\tpkgs := s.debugger.ListPackagesBuildInfo(in.IncludeFiles)\n\tout.List = make([]api.PackageBuildInfo, 0, len(pkgs))\n\tfor _, pkg := range pkgs {\n\t\tif pattern != nil && !pattern.MatchString(pkg.ImportPath) {\n\t\t\tcontinue\n\t\t}\n\t\tvar files []string\n\n\t\tif len(pkg.Files) > 0 {\n\t\t\tfiles = make([]string, 0, len(pkg.Files))\n\t\t\tfor file := range pkg.Files {\n\t\t\t\tfiles = append(files, file)\n\t\t\t}\n\t\t}\n\n\t\tsort.Strings(files)\n\n\t\tout.List = append(out.List, api.PackageBuildInfo{\n\t\t\tImportPath:    pkg.ImportPath,\n\t\t\tDirectoryPath: pkg.DirectoryPath,\n\t\t\tFiles:         files,\n\t\t})\n\t}\n\treturn nil\n}\n\n// ExamineMemoryIn holds the arguments of ExamineMemory\ntype ExamineMemoryIn struct {\n\tAddress uint64\n\tLength  int\n}\n\n// ExaminedMemoryOut holds the return values of ExamineMemory\ntype ExaminedMemoryOut struct {\n\tMem            []byte\n\tIsLittleEndian bool\n}\n\nconst ExamineMemoryLengthLimit = 1 << 16\n\nfunc (s *RPCServer) ExamineMemory(arg ExamineMemoryIn, out *ExaminedMemoryOut) error {\n\tif arg.Length > ExamineMemoryLengthLimit {\n\t\treturn fmt.Errorf(\"len must be less than or equal to %d\", ExamineMemoryLengthLimit)\n\t}\n\tMem, err := s.debugger.ExamineMemory(arg.Address, arg.Length)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tout.Mem = Mem\n\tout.IsLittleEndian = true //TODO: get byte order from debugger.target.BinInfo().Arch\n\n\treturn nil\n}\n\ntype StopRecordingIn struct {\n}\n\ntype StopRecordingOut struct {\n}\n\nfunc (s *RPCServer) StopRecording(arg StopRecordingIn, cb service.RPCCallback) {\n\tclose(cb.SetupDoneChan())\n\tvar out StopRecordingOut\n\terr := s.debugger.StopRecording()\n\tif err != nil {\n\t\tcb.Return(nil, err)\n\t\treturn\n\t}\n\tcb.Return(out, nil)\n}\n\ntype DumpStartIn struct {\n\tDestination string\n}\n\ntype DumpStartOut struct {\n\tState api.DumpState\n}\n\n// DumpStart starts a core dump to arg.Destination.\nfunc (s *RPCServer) DumpStart(arg DumpStartIn, out *DumpStartOut) error {\n\terr := s.debugger.DumpStart(arg.Destination)\n\tif err != nil {\n\t\treturn err\n\t}\n\tout.State = *api.ConvertDumpState(s.debugger.DumpWait(0))\n\treturn nil\n}\n\ntype DumpWaitIn struct {\n\tWait int\n}\n\ntype DumpWaitOut struct {\n\tState api.DumpState\n}\n\n// DumpWait waits for the core dump to finish or for arg.Wait milliseconds.\n// Wait == 0 means return immediately.\n// Returns the core dump status\nfunc (s *RPCServer) DumpWait(arg DumpWaitIn, out *DumpWaitOut) error {\n\tout.State = *api.ConvertDumpState(s.debugger.DumpWait(time.Duration(arg.Wait) * time.Millisecond))\n\treturn nil\n}\n\ntype DumpCancelIn struct {\n}\n\ntype DumpCancelOut struct {\n}\n\n// DumpCancel cancels the core dump.\nfunc (s *RPCServer) DumpCancel(arg DumpCancelIn, out *DumpCancelOut) error {\n\treturn s.debugger.DumpCancel()\n}\n\ntype CreateWatchpointIn struct {\n\tScope api.EvalScope\n\tExpr  string\n\tType  api.WatchType\n}\n\ntype CreateWatchpointOut struct {\n\t*api.Breakpoint\n}\n\nfunc (s *RPCServer) CreateWatchpoint(arg CreateWatchpointIn, out *CreateWatchpointOut) error {\n\tvar err error\n\tout.Breakpoint, err = s.debugger.CreateWatchpoint(arg.Scope.GoroutineID, arg.Scope.Frame, arg.Scope.DeferredCall, arg.Expr, arg.Type)\n\treturn err\n}\n\ntype BuildIDIn struct {\n}\n\ntype BuildIDOut struct {\n\tBuildID string\n}\n\nfunc (s *RPCServer) BuildID(arg BuildIDIn, out *BuildIDOut) error {\n\tout.BuildID = s.debugger.BuildID()\n\treturn nil\n}\n\ntype ListTargetsIn struct {\n}\n\ntype ListTargetsOut struct {\n\tTargets []api.Target\n}\n\n// ListTargets returns the list of targets we are currently attached to.\nfunc (s *RPCServer) ListTargets(arg ListTargetsIn, out *ListTargetsOut) error {\n\ttgrp, unlock := s.debugger.LockTargetGroup()\n\tdefer unlock()\n\tout.Targets = []api.Target{}\n\tfor _, tgt := range tgrp.Targets() {\n\t\tif _, err := tgt.Valid(); err == nil {\n\t\t\tout.Targets = append(out.Targets, *api.ConvertTarget(tgt, s.debugger.ConvertThreadBreakpoint))\n\t\t}\n\t}\n\treturn nil\n}\n\ntype FollowExecIn struct {\n\tEnable bool\n\tRegex  string\n}\n\ntype FollowExecOut struct {\n}\n\n// FollowExec enables or disables follow exec mode.\nfunc (s *RPCServer) FollowExec(arg FollowExecIn, out *FollowExecOut) error {\n\treturn s.debugger.FollowExec(arg.Enable, arg.Regex)\n}\n\ntype FollowExecEnabledIn struct {\n}\n\ntype FollowExecEnabledOut struct {\n\tEnabled bool\n}\n\n// FollowExecEnabled returns true if follow exec mode is enabled.\nfunc (s *RPCServer) FollowExecEnabled(arg FollowExecEnabledIn, out *FollowExecEnabledOut) error {\n\tout.Enabled = s.debugger.FollowExecEnabled()\n\treturn nil\n}\n\ntype DebugInfoDirectoriesIn struct {\n\tSet  bool\n\tList []string\n}\n\ntype DebugInfoDirectoriesOut struct {\n\tList []string\n}\n\nfunc (s *RPCServer) DebugInfoDirectories(arg DebugInfoDirectoriesIn, out *DebugInfoDirectoriesOut) error {\n\tif arg.Set {\n\t\ts.debugger.SetDebugInfoDirectories(arg.List)\n\t}\n\tout.List = s.debugger.DebugInfoDirectories()\n\treturn nil\n}\n\ntype GuessSubstitutePathIn struct {\n\tArgs api.GuessSubstitutePathIn\n}\n\ntype GuessSubstitutePathOut struct {\n\tList [][2]string\n}\n\nfunc (s *RPCServer) GuessSubstitutePath(arg GuessSubstitutePathIn, out *GuessSubstitutePathOut) error {\n\tm := s.debugger.GuessSubstitutePath(&arg.Args)\n\tfor k, v := range m {\n\t\tout.List = append(out.List, [2]string{k, v})\n\t}\n\treturn nil\n}\n\ntype GetEventsIn struct {\n}\n\ntype GetEventsOut struct {\n\tEvents []api.Event\n}\n\nfunc (s *RPCServer) GetEvents(arg GetEventsIn, cb service.RPCCallback) {\n\tclose(cb.SetupDoneChan())\n\tout := new(GetEventsOut)\n\tout.Events = append(out.Events, *api.ConvertEvent(<-s.eventsChan))\n\tfor len(out.Events) < eventBufferSize {\n\t\tselect {\n\t\tcase event := <-s.eventsChan:\n\t\t\tout.Events = append(out.Events, *api.ConvertEvent(event))\n\t\tdefault:\n\t\t\tcb.Return(out, nil)\n\t\t\treturn\n\t\t}\n\t}\n\tcb.Return(out, nil)\n}\n\ntype CancelDownloadsIn struct {\n}\n\ntype CancelDownloadsOut struct {\n}\n\nfunc (s *RPCServer) CancelDownloads(arg CancelDownloadsIn, cb service.RPCCallback) {\n\tclose(cb.SetupDoneChan())\n\ts.debugger.CancelDownloads()\n\tcb.Return(new(CancelDownloadsOut), nil)\n}\n\ntype DownloadLibraryDebugInfoIn struct {\n\tN int\n}\n\ntype DownloadLibraryDebugInfoOut struct {\n}\n\nfunc (s *RPCServer) DownloadLibraryDebugInfo(arg DownloadLibraryDebugInfoIn, out DownloadLibraryDebugInfoOut) error {\n\treturn s.debugger.DownloadLibraryDebugInfo(arg.N)\n}\n"
  },
  {
    "path": "service/rpccallback.go",
    "content": "package service\n\n// RPCCallback is used by RPC methods to return their result asynchronously.\ntype RPCCallback interface {\n\tReturn(out any, err error)\n\n\t// SetupDoneChan returns a channel that should be closed to signal that the\n\t// asynchronous method has completed setup and the server is ready to\n\t// receive other requests.\n\tSetupDoneChan() chan struct{}\n\n\t// DisconnectChan returns a channel that should be closed to signal that\n\t// the client that initially issued the command has been disconnected.\n\tDisconnectChan() chan struct{}\n}\n"
  },
  {
    "path": "service/rpccommon/server.go",
    "content": "package rpccommon\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/json\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"net/rpc\"\n\t\"net/rpc/jsonrpc\"\n\t\"os\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"sync\"\n\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/version\"\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n\t\"github.com/go-delve/delve/service/dap\"\n\t\"github.com/go-delve/delve/service/debugger\"\n\t\"github.com/go-delve/delve/service/internal/sameuser\"\n\t\"github.com/go-delve/delve/service/rpc2\"\n)\n\n//go:generate go run github.com/go-delve/build-tools/cmd/gen-suitablemethods@latest suitablemethods\n\n// ServerImpl implements a JSON-RPC server that can switch between two\n// versions of the API.\ntype ServerImpl struct {\n\t// config is all the information necessary to start the debugger and server.\n\tconfig *service.Config\n\t// listener is used to serve JSON-RPC.\n\tlistener net.Listener\n\t// stopChan is used to stop the listener goroutine.\n\tstopChan chan struct{}\n\t// debugger is the debugger service.\n\tdebugger *debugger.Debugger\n\t// s2 is APIv2 server.\n\ts2 *rpc2.RPCServer\n\t// maps of served methods, one for each supported API.\n\tmethodMaps []map[string]*methodType\n\tlog        logflags.Logger\n}\n\ntype RPCCallback struct {\n\ts              *ServerImpl\n\tsending        *sync.Mutex\n\tcodec          rpc.ServerCodec\n\treq            rpc.Request\n\tsetupDone      chan struct{}\n\tdisconnectChan chan struct{}\n}\n\nvar _ service.RPCCallback = &RPCCallback{}\n\n// RPCServer implements the RPC method calls common to all versions of the API.\ntype RPCServer struct {\n\ts *ServerImpl\n}\n\ntype methodType struct {\n\tmethod      reflect.Value\n\tArgType     reflect.Type\n\tReplyType   reflect.Type\n\tSynchronous bool\n}\n\n// NewServer creates a new RPCServer.\nfunc NewServer(config *service.Config) *ServerImpl {\n\tlogger := logflags.RPCLogger()\n\tif config.APIVersion < 2 {\n\t\tlogger.Info(\"Using API v1\")\n\t}\n\tif config.Debugger.Foreground {\n\t\t// Print listener address\n\t\tlogflags.WriteAPIListeningMessage(config.Listener.Addr())\n\t\tlogger.Debug(\"API server pid = \", os.Getpid())\n\t}\n\treturn &ServerImpl{\n\t\tconfig:   config,\n\t\tlistener: config.Listener,\n\t\tstopChan: make(chan struct{}),\n\t\tlog:      logger,\n\t}\n}\n\n// Stop stops the JSON-RPC server.\nfunc (s *ServerImpl) Stop() error {\n\ts.log.Debug(\"stopping\")\n\tclose(s.stopChan)\n\tif s.config.AcceptMulti {\n\t\ts.listener.Close()\n\t}\n\tif s.debugger.IsRunning() {\n\t\ts.debugger.Command(&api.DebuggerCommand{Name: api.Halt}, nil, nil, nil)\n\t}\n\tkill := s.config.Debugger.AttachPid == 0\n\treturn s.debugger.Detach(kill)\n}\n\n// Run starts a debugger and exposes it with an JSON-RPC server. The debugger\n// itself can be stopped with the `detach` API.\nfunc (s *ServerImpl) Run() error {\n\tvar err error\n\n\tif s.config.APIVersion == 0 {\n\t\ts.config.APIVersion = 2\n\t}\n\n\tif s.config.APIVersion != 2 {\n\t\treturn errors.New(\"unknown API version\")\n\t}\n\n\t// Create and start the debugger\n\tconfig := s.config.Debugger\n\tif s.debugger, err = debugger.New(&config, s.config.ProcessArgs); err != nil {\n\t\treturn err\n\t}\n\n\ts.s2 = rpc2.NewServer(s.config, s.debugger)\n\n\trpcServer := &RPCServer{s}\n\n\ts.methodMaps = make([]map[string]*methodType, 2)\n\n\ts.methodMaps[1] = map[string]*methodType{}\n\n\tsuitableMethods2(s.s2, s.methodMaps[1])\n\tsuitableMethodsCommon(rpcServer, s.methodMaps[1])\n\tfinishMethodsMapInit(s.methodMaps[1])\n\n\tgo func() {\n\t\tdefer s.listener.Close()\n\t\tfor {\n\t\t\tc, err := s.listener.Accept()\n\t\t\tif err != nil {\n\t\t\t\tselect {\n\t\t\t\tcase <-s.stopChan:\n\t\t\t\t\t// We were supposed to exit, do nothing and return\n\t\t\t\t\treturn\n\t\t\t\tdefault:\n\t\t\t\t\tpanic(err)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif s.config.CheckLocalConnUser {\n\t\t\t\tif !sameuser.CanAccept(s.listener.Addr(), c.LocalAddr(), c.RemoteAddr()) {\n\t\t\t\t\tc.Close()\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgo s.serveConnectionDemux(c)\n\t\t\tif !s.config.AcceptMulti {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}()\n\treturn nil\n}\n\ntype bufReadWriteCloser struct {\n\t*bufio.Reader\n\tio.WriteCloser\n}\n\nfunc (s *ServerImpl) serveConnectionDemux(c io.ReadWriteCloser) {\n\tconn := &bufReadWriteCloser{bufio.NewReader(c), c}\n\tb, err := conn.Peek(1)\n\tif err != nil {\n\t\ts.log.Warnf(\"error determining new connection protocol: %v\", err)\n\t\treturn\n\t}\n\tif b[0] == 'C' { // C is for DAP's Content-Length\n\t\ts.log.Debugf(\"serving DAP on new connection\")\n\t\tds := dap.NewSession(conn, &dap.Config{Config: s.config, StopTriggered: s.stopChan}, s.debugger)\n\t\tgo ds.ServeDAPCodec()\n\t} else {\n\t\ts.log.Debugf(\"serving JSON-RPC on new connection\")\n\t\tgo s.serveJSONCodec(conn)\n\t}\n}\n\nfunc finishMethodsMapInit(methods map[string]*methodType) {\n\tfor name, method := range methods {\n\t\tmtype := method.method.Type()\n\t\tif mtype.NumIn() != 2 {\n\t\t\tpanic(fmt.Errorf(\"wrong number of inputs for method %s (%d)\", name, mtype.NumIn()))\n\t\t}\n\t\tmethod.ArgType = mtype.In(0)\n\t\tmethod.ReplyType = mtype.In(1)\n\t\tmethod.Synchronous = method.ReplyType.String() != \"service.RPCCallback\"\n\t}\n}\n\nfunc (s *ServerImpl) serveJSONCodec(conn io.ReadWriteCloser) {\n\tclientDisconnectChan := make(chan struct{})\n\tdefer func() {\n\t\tclose(clientDisconnectChan)\n\t\tif !s.config.AcceptMulti && s.config.DisconnectChan != nil {\n\t\t\tclose(s.config.DisconnectChan)\n\t\t}\n\t}()\n\n\tsending := new(sync.Mutex)\n\tcodec := jsonrpc.NewServerCodec(conn)\n\tvar req rpc.Request\n\tvar resp rpc.Response\n\tfor {\n\t\treq = rpc.Request{}\n\t\terr := codec.ReadRequestHeader(&req)\n\t\tif err != nil {\n\t\t\tif err != io.EOF {\n\t\t\t\ts.log.Error(\"rpc:\", err)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\n\t\tmtype, ok := s.methodMaps[s.config.APIVersion-1][req.ServiceMethod]\n\t\tif !ok {\n\t\t\ts.log.Errorf(\"rpc: can't find method %s\", req.ServiceMethod)\n\t\t\ts.sendResponse(sending, &req, &rpc.Response{}, nil, codec, fmt.Sprintf(\"unknown method: %s\", req.ServiceMethod))\n\t\t\tcontinue\n\t\t}\n\n\t\tvar argv, replyv reflect.Value\n\n\t\t// Decode the argument value.\n\t\targIsValue := false // if true, need to indirect before calling.\n\t\tif mtype.ArgType.Kind() == reflect.Ptr {\n\t\t\targv = reflect.New(mtype.ArgType.Elem())\n\t\t} else {\n\t\t\targv = reflect.New(mtype.ArgType)\n\t\t\targIsValue = true\n\t\t}\n\t\t// argv guaranteed to be a pointer now.\n\t\tif err = codec.ReadRequestBody(argv.Interface()); err != nil {\n\t\t\ts.log.Errorf(\"can't read request body: %v\", err)\n\t\t\ts.sendResponse(sending, &req, &rpc.Response{}, nil, codec, fmt.Sprintf(\"malformed request body: %v\", err))\n\t\t\tcontinue\n\t\t}\n\t\tif argIsValue {\n\t\t\targv = argv.Elem()\n\t\t}\n\n\t\tif mtype.Synchronous {\n\t\t\tif logflags.RPC() {\n\t\t\t\targvbytes, _ := json.Marshal(argv.Interface())\n\t\t\t\ts.log.Debugf(\"<- %s(%T%s)\", req.ServiceMethod, argv.Interface(), argvbytes)\n\t\t\t}\n\t\t\treplyv = reflect.New(mtype.ReplyType.Elem())\n\t\t\tfunction := mtype.method\n\t\t\tvar returnValues []reflect.Value\n\t\t\tvar errInter any\n\t\t\tfunc() {\n\t\t\t\tdefer func() {\n\t\t\t\t\tif ierr := recover(); ierr != nil {\n\t\t\t\t\t\terrInter = newInternalError(ierr, 2)\n\t\t\t\t\t}\n\t\t\t\t}()\n\t\t\t\treturnValues = function.Call([]reflect.Value{argv, replyv})\n\t\t\t\terrInter = returnValues[0].Interface()\n\t\t\t}()\n\n\t\t\terrmsg := \"\"\n\t\t\tif errInter != nil {\n\t\t\t\terrmsg = errInter.(error).Error()\n\t\t\t}\n\t\t\tresp = rpc.Response{}\n\t\t\tif logflags.RPC() {\n\t\t\t\treplyvbytes, _ := json.Marshal(replyv.Interface())\n\t\t\t\ts.log.Debugf(\"-> %T%s error: %q\", replyv.Interface(), replyvbytes, errmsg)\n\t\t\t}\n\t\t\ts.sendResponse(sending, &req, &resp, replyv.Interface(), codec, errmsg)\n\t\t\tif req.ServiceMethod == \"RPCServer.Detach\" && s.config.DisconnectChan != nil {\n\t\t\t\tclose(s.config.DisconnectChan)\n\t\t\t\ts.config.DisconnectChan = nil\n\t\t\t}\n\t\t} else {\n\t\t\tif logflags.RPC() {\n\t\t\t\targvbytes, _ := json.Marshal(argv.Interface())\n\t\t\t\ts.log.Debugf(\"(async %d) <- %s(%T%s)\", req.Seq, req.ServiceMethod, argv.Interface(), argvbytes)\n\t\t\t}\n\t\t\tfunction := mtype.method\n\t\t\tctl := &RPCCallback{s, sending, codec, req, make(chan struct{}), clientDisconnectChan}\n\t\t\tgo func() {\n\t\t\t\tdefer func() {\n\t\t\t\t\tif ierr := recover(); ierr != nil {\n\t\t\t\t\t\tctl.Return(nil, newInternalError(ierr, 2))\n\t\t\t\t\t}\n\t\t\t\t}()\n\t\t\t\tfunction.Call([]reflect.Value{argv, reflect.ValueOf(ctl)})\n\t\t\t}()\n\t\t\t<-ctl.setupDone\n\t\t}\n\t}\n\tcodec.Close()\n}\n\n// A value sent as a placeholder for the server's response value when the server\n// receives an invalid request. It is never decoded by the client since the Response\n// contains an error when it is used.\nvar invalidRequest = struct{}{}\n\nfunc (s *ServerImpl) sendResponse(sending *sync.Mutex, req *rpc.Request, resp *rpc.Response, reply any, codec rpc.ServerCodec, errmsg string) {\n\tresp.ServiceMethod = req.ServiceMethod\n\tif errmsg != \"\" {\n\t\tresp.Error = errmsg\n\t\treply = invalidRequest\n\t}\n\tresp.Seq = req.Seq\n\tsending.Lock()\n\tdefer sending.Unlock()\n\terr := codec.WriteResponse(resp, reply)\n\tif err != nil {\n\t\ts.log.Error(\"writing response:\", err)\n\t}\n}\n\nfunc (cb *RPCCallback) Return(out any, err error) {\n\tselect {\n\tcase <-cb.setupDone:\n\t\t// already closed\n\tdefault:\n\t\tclose(cb.setupDone)\n\t}\n\terrmsg := \"\"\n\tif err != nil {\n\t\terrmsg = err.Error()\n\t}\n\tvar resp rpc.Response\n\tif logflags.RPC() {\n\t\toutbytes, _ := json.Marshal(out)\n\t\tcb.s.log.Debugf(\"(async %d) -> %T%s error: %q\", cb.req.Seq, out, outbytes, errmsg)\n\t}\n\n\tif cb.hasDisconnected() {\n\t\treturn\n\t}\n\n\tcb.s.sendResponse(cb.sending, &cb.req, &resp, out, cb.codec, errmsg)\n}\n\nfunc (cb *RPCCallback) DisconnectChan() chan struct{} {\n\treturn cb.disconnectChan\n}\n\nfunc (cb *RPCCallback) hasDisconnected() bool {\n\tselect {\n\tcase <-cb.disconnectChan:\n\t\treturn true\n\tdefault:\n\t}\n\n\treturn false\n}\n\nfunc (cb *RPCCallback) SetupDoneChan() chan struct{} {\n\treturn cb.setupDone\n}\n\n// GetVersion returns the version of delve as well as the API version\n// currently served.\nfunc (s *RPCServer) GetVersion(args api.GetVersionIn, out *api.GetVersionOut) error {\n\tout.DelveVersion = version.DelveVersion.String()\n\tout.APIVersion = s.s.config.APIVersion\n\treturn s.s.debugger.GetVersion(out)\n}\n\n// SetApiVersion changes version of the API being served.\nfunc (s *RPCServer) SetApiVersion(args api.SetAPIVersionIn, out *api.SetAPIVersionOut) error {\n\tif args.APIVersion != 2 {\n\t\treturn errors.New(\"unknown API version\")\n\t}\n\ts.s.config.APIVersion = args.APIVersion\n\treturn nil\n}\n\ntype internalError struct {\n\tErr   any\n\tStack []internalErrorFrame\n}\n\ntype internalErrorFrame struct {\n\tPc   uintptr\n\tFunc string\n\tFile string\n\tLine int\n}\n\nfunc newInternalError(ierr any, skip int) *internalError {\n\tlogflags.Bug.Inc()\n\tr := &internalError{ierr, nil}\n\tfor i := skip; ; i++ {\n\t\tpc, file, line, ok := runtime.Caller(i)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tfname := \"<unknown>\"\n\t\tfn := runtime.FuncForPC(pc)\n\t\tif fn != nil {\n\t\t\tfname = fn.Name()\n\t\t}\n\t\tr.Stack = append(r.Stack, internalErrorFrame{pc, fname, file, line})\n\t}\n\treturn r\n}\n\nfunc (err *internalError) Error() string {\n\tvar out bytes.Buffer\n\tfmt.Fprintf(&out, \"Internal debugger error: %v\\n\", err.Err)\n\tfor _, frame := range err.Stack {\n\t\tfmt.Fprintf(&out, \"%s (%#x)\\n\\t%s:%d\\n\", frame.Func, frame.Pc, frame.File, frame.Line)\n\t}\n\treturn out.String()\n}\n"
  },
  {
    "path": "service/rpccommon/suitablemethods.go",
    "content": "// DO NOT EDIT: auto-generated using github.com/go-delve/build-tools/cmd/gen-suitablemethods\n\npackage rpccommon\n\nimport (\n\t\"github.com/go-delve/delve/service/rpc2\"\n\t\"reflect\"\n)\n\nfunc suitableMethods2(s *rpc2.RPCServer, methods map[string]*methodType) {\n\tmethods[\"RPCServer.AmendBreakpoint\"] = &methodType{method: reflect.ValueOf(s.AmendBreakpoint)}\n\tmethods[\"RPCServer.Ancestors\"] = &methodType{method: reflect.ValueOf(s.Ancestors)}\n\tmethods[\"RPCServer.AttachedToExistingProcess\"] = &methodType{method: reflect.ValueOf(s.AttachedToExistingProcess)}\n\tmethods[\"RPCServer.BuildID\"] = &methodType{method: reflect.ValueOf(s.BuildID)}\n\tmethods[\"RPCServer.CancelDownloads\"] = &methodType{method: reflect.ValueOf(s.CancelDownloads)}\n\tmethods[\"RPCServer.CancelNext\"] = &methodType{method: reflect.ValueOf(s.CancelNext)}\n\tmethods[\"RPCServer.Checkpoint\"] = &methodType{method: reflect.ValueOf(s.Checkpoint)}\n\tmethods[\"RPCServer.ClearBreakpoint\"] = &methodType{method: reflect.ValueOf(s.ClearBreakpoint)}\n\tmethods[\"RPCServer.ClearCheckpoint\"] = &methodType{method: reflect.ValueOf(s.ClearCheckpoint)}\n\tmethods[\"RPCServer.Command\"] = &methodType{method: reflect.ValueOf(s.Command)}\n\tmethods[\"RPCServer.CreateBreakpoint\"] = &methodType{method: reflect.ValueOf(s.CreateBreakpoint)}\n\tmethods[\"RPCServer.CreateEBPFTracepoint\"] = &methodType{method: reflect.ValueOf(s.CreateEBPFTracepoint)}\n\tmethods[\"RPCServer.CreateWatchpoint\"] = &methodType{method: reflect.ValueOf(s.CreateWatchpoint)}\n\tmethods[\"RPCServer.DebugInfoDirectories\"] = &methodType{method: reflect.ValueOf(s.DebugInfoDirectories)}\n\tmethods[\"RPCServer.Detach\"] = &methodType{method: reflect.ValueOf(s.Detach)}\n\tmethods[\"RPCServer.Disassemble\"] = &methodType{method: reflect.ValueOf(s.Disassemble)}\n\tmethods[\"RPCServer.DownloadLibraryDebugInfo\"] = &methodType{method: reflect.ValueOf(s.DownloadLibraryDebugInfo)}\n\tmethods[\"RPCServer.DumpCancel\"] = &methodType{method: reflect.ValueOf(s.DumpCancel)}\n\tmethods[\"RPCServer.DumpStart\"] = &methodType{method: reflect.ValueOf(s.DumpStart)}\n\tmethods[\"RPCServer.DumpWait\"] = &methodType{method: reflect.ValueOf(s.DumpWait)}\n\tmethods[\"RPCServer.Eval\"] = &methodType{method: reflect.ValueOf(s.Eval)}\n\tmethods[\"RPCServer.ExamineMemory\"] = &methodType{method: reflect.ValueOf(s.ExamineMemory)}\n\tmethods[\"RPCServer.FindLocation\"] = &methodType{method: reflect.ValueOf(s.FindLocation)}\n\tmethods[\"RPCServer.FollowExec\"] = &methodType{method: reflect.ValueOf(s.FollowExec)}\n\tmethods[\"RPCServer.FollowExecEnabled\"] = &methodType{method: reflect.ValueOf(s.FollowExecEnabled)}\n\tmethods[\"RPCServer.FunctionReturnLocations\"] = &methodType{method: reflect.ValueOf(s.FunctionReturnLocations)}\n\tmethods[\"RPCServer.GetBreakpoint\"] = &methodType{method: reflect.ValueOf(s.GetBreakpoint)}\n\tmethods[\"RPCServer.GetBufferedTracepoints\"] = &methodType{method: reflect.ValueOf(s.GetBufferedTracepoints)}\n\tmethods[\"RPCServer.GetEvents\"] = &methodType{method: reflect.ValueOf(s.GetEvents)}\n\tmethods[\"RPCServer.GetThread\"] = &methodType{method: reflect.ValueOf(s.GetThread)}\n\tmethods[\"RPCServer.GuessSubstitutePath\"] = &methodType{method: reflect.ValueOf(s.GuessSubstitutePath)}\n\tmethods[\"RPCServer.IsMulticlient\"] = &methodType{method: reflect.ValueOf(s.IsMulticlient)}\n\tmethods[\"RPCServer.LastModified\"] = &methodType{method: reflect.ValueOf(s.LastModified)}\n\tmethods[\"RPCServer.ListBreakpoints\"] = &methodType{method: reflect.ValueOf(s.ListBreakpoints)}\n\tmethods[\"RPCServer.ListCheckpoints\"] = &methodType{method: reflect.ValueOf(s.ListCheckpoints)}\n\tmethods[\"RPCServer.ListDynamicLibraries\"] = &methodType{method: reflect.ValueOf(s.ListDynamicLibraries)}\n\tmethods[\"RPCServer.ListFunctionArgs\"] = &methodType{method: reflect.ValueOf(s.ListFunctionArgs)}\n\tmethods[\"RPCServer.ListFunctions\"] = &methodType{method: reflect.ValueOf(s.ListFunctions)}\n\tmethods[\"RPCServer.ListGoroutines\"] = &methodType{method: reflect.ValueOf(s.ListGoroutines)}\n\tmethods[\"RPCServer.ListLocalVars\"] = &methodType{method: reflect.ValueOf(s.ListLocalVars)}\n\tmethods[\"RPCServer.ListPackageVars\"] = &methodType{method: reflect.ValueOf(s.ListPackageVars)}\n\tmethods[\"RPCServer.ListPackagesBuildInfo\"] = &methodType{method: reflect.ValueOf(s.ListPackagesBuildInfo)}\n\tmethods[\"RPCServer.ListRegisters\"] = &methodType{method: reflect.ValueOf(s.ListRegisters)}\n\tmethods[\"RPCServer.ListSources\"] = &methodType{method: reflect.ValueOf(s.ListSources)}\n\tmethods[\"RPCServer.ListTargets\"] = &methodType{method: reflect.ValueOf(s.ListTargets)}\n\tmethods[\"RPCServer.ListThreads\"] = &methodType{method: reflect.ValueOf(s.ListThreads)}\n\tmethods[\"RPCServer.ListTypes\"] = &methodType{method: reflect.ValueOf(s.ListTypes)}\n\tmethods[\"RPCServer.ProcessPid\"] = &methodType{method: reflect.ValueOf(s.ProcessPid)}\n\tmethods[\"RPCServer.Recorded\"] = &methodType{method: reflect.ValueOf(s.Recorded)}\n\tmethods[\"RPCServer.Restart\"] = &methodType{method: reflect.ValueOf(s.Restart)}\n\tmethods[\"RPCServer.Set\"] = &methodType{method: reflect.ValueOf(s.Set)}\n\tmethods[\"RPCServer.Stacktrace\"] = &methodType{method: reflect.ValueOf(s.Stacktrace)}\n\tmethods[\"RPCServer.State\"] = &methodType{method: reflect.ValueOf(s.State)}\n\tmethods[\"RPCServer.StopRecording\"] = &methodType{method: reflect.ValueOf(s.StopRecording)}\n\tmethods[\"RPCServer.ToggleBreakpoint\"] = &methodType{method: reflect.ValueOf(s.ToggleBreakpoint)}\n}\n\nfunc suitableMethodsCommon(s *RPCServer, methods map[string]*methodType) {\n\tmethods[\"RPCServer.GetVersion\"] = &methodType{method: reflect.ValueOf(s.GetVersion)}\n\tmethods[\"RPCServer.SetApiVersion\"] = &methodType{method: reflect.ValueOf(s.SetApiVersion)}\n}\n"
  },
  {
    "path": "service/server.go",
    "content": "package service\n\n// Server represents a server for a remote client\n// to connect to.\ntype Server interface {\n\tRun() error\n\tStop() error\n}\n"
  },
  {
    "path": "service/test/common_test.go",
    "content": "package service_test\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n)\n\nfunc assertNoError(err error, t *testing.T, s string) {\n\tif err != nil {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\tfname := filepath.Base(file)\n\t\tt.Fatalf(\"failed assertion at %s:%d: %s - %s\\n\", fname, line, s, err)\n\t}\n}\n\nfunc assertError(err error, t *testing.T, s string) {\n\tif err == nil {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\tfname := filepath.Base(file)\n\t\tt.Fatalf(\"failed assertion at %s:%d: %s (no error)\\n\", fname, line, s)\n\t}\n\n\tif strings.Contains(err.Error(), \"Internal debugger error\") {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\tfname := filepath.Base(file)\n\t\tt.Fatalf(\"failed assertion at %s:%d: %s internal debugger error: %v\\n\", fname, line, s, err)\n\t}\n}\n\nfunc init() {\n\truntime.GOMAXPROCS(2)\n}\n\ntype nextTest struct {\n\tbegin, end int\n}\n\nfunc testProgPath(t *testing.T, name string) string {\n\tfp, err := filepath.Abs(fmt.Sprintf(\"_fixtures/%s.go\", name))\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n\tif _, err := os.Stat(fp); err != nil {\n\t\tfp, err = filepath.Abs(fmt.Sprintf(\"../../_fixtures/%s.go\", name))\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t}\n\tsympath, err := filepath.EvalSymlinks(fp)\n\tif err == nil {\n\t\tfp = strings.ReplaceAll(sympath, \"\\\\\", \"/\")\n\t}\n\treturn fp\n}\n\ntype BreakpointLister interface {\n\tListBreakpoints() ([]*api.Breakpoint, error)\n}\n\nfunc countBreakpoints(t *testing.T, c service.Client) int {\n\tbps, err := c.ListBreakpoints(false)\n\tassertNoError(err, t, \"ListBreakpoints()\")\n\tbpcount := 0\n\tfor _, bp := range bps {\n\t\tif bp.ID >= 0 {\n\t\t\tbpcount++\n\t\t}\n\t}\n\treturn bpcount\n}\n\ntype locationFinder1 interface {\n\tFindLocation(api.EvalScope, string) ([]api.Location, error)\n}\n\ntype locationFinder2 interface {\n\tFindLocation(api.EvalScope, string, bool, [][2]string) ([]api.Location, string, error)\n}\n\nfunc findLocationHelper(t *testing.T, c any, loc string, shouldErr bool, count int, checkAddr uint64) []uint64 {\n\tvar locs []api.Location\n\tvar err error\n\n\tswitch c := c.(type) {\n\tcase locationFinder1:\n\t\tlocs, err = c.FindLocation(api.EvalScope{GoroutineID: -1}, loc)\n\tcase locationFinder2:\n\t\tlocs, _, err = c.FindLocation(api.EvalScope{GoroutineID: -1}, loc, false, nil)\n\tdefault:\n\t\tt.Errorf(\"unexpected type %T passed to findLocationHelper\", c)\n\t}\n\n\tt.Logf(\"FindLocation(\\\"%s\\\") → %v\\n\", loc, locs)\n\n\tif shouldErr {\n\t\tif err == nil {\n\t\t\tt.Fatalf(\"Resolving location <%s> didn't return an error: %v\", loc, locs)\n\t\t}\n\t} else {\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Error resolving location <%s>: %v\", loc, err)\n\t\t}\n\t}\n\n\tif (count >= 0) && (len(locs) != count) {\n\t\tt.Fatalf(\"Wrong number of breakpoints returned for location <%s> (got %d, expected %d)\", loc, len(locs), count)\n\t}\n\n\tif checkAddr != 0 && checkAddr != locs[0].PC {\n\t\tt.Fatalf(\"Wrong address returned for location <%s> (got %#x, expected %#x)\", loc, locs[0].PC, checkAddr)\n\t}\n\n\taddrs := make([]uint64, len(locs))\n\tfor i := range locs {\n\t\taddrs[i] = locs[i].PC\n\t}\n\treturn addrs\n}\n\nfunc getCurinstr(d3 api.AsmInstructions) *api.AsmInstruction {\n\tfor i := range d3 {\n\t\tif d3[i].AtPC {\n\t\t\treturn &d3[i]\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "service/test/integration2_test.go",
    "content": "package service_test\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"math/rand\"\n\t\"net\"\n\t\"net/rpc\"\n\t\"net/rpc/jsonrpc\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"slices\"\n\t\"strconv\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n\n\tprotest \"github.com/go-delve/delve/pkg/proc/test\"\n\t\"github.com/go-delve/delve/service/debugger\"\n\n\t\"github.com/go-delve/delve/pkg/goversion\"\n\t\"github.com/go-delve/delve/pkg/logflags\"\n\t\"github.com/go-delve/delve/pkg/proc\"\n\t\"github.com/go-delve/delve/service\"\n\t\"github.com/go-delve/delve/service/api\"\n\t\"github.com/go-delve/delve/service/rpc2\"\n\t\"github.com/go-delve/delve/service/rpccommon\"\n)\n\nvar normalLoadConfig = api.LoadConfig{\n\tFollowPointers:     true,\n\tMaxVariableRecurse: 1,\n\tMaxStringLen:       64,\n\tMaxArrayValues:     64,\n\tMaxStructFields:    -1,\n}\n\nvar testBackend, buildMode string\n\nfunc TestMain(m *testing.M) {\n\tflag.StringVar(&testBackend, \"backend\", \"\", \"selects backend\")\n\tflag.StringVar(&buildMode, \"test-buildmode\", \"\", \"selects build mode\")\n\tvar logOutput string\n\tflag.StringVar(&logOutput, \"log-output\", \"\", \"configures log output\")\n\tflag.Parse()\n\tprotest.DefaultTestBackend(&testBackend)\n\tif buildMode != \"\" && buildMode != \"pie\" {\n\t\tfmt.Fprintf(os.Stderr, \"unknown build mode %q\", buildMode)\n\t\tos.Exit(1)\n\t}\n\tlogflags.Setup(logOutput != \"\", logOutput, \"\")\n\tprotest.RunTestsWithFixtures(m)\n}\n\nfunc withTestClient2(name string, t *testing.T, fn func(c service.Client)) {\n\twithTestClient2Extended(name, t, 0, [3]string{}, nil, func(c service.Client, fixture protest.Fixture) {\n\t\tfn(c)\n\t})\n}\n\nfunc startServer(name string, buildFlags protest.BuildFlags, t *testing.T, redirects [3]string, args []string) (clientConn net.Conn, fixture protest.Fixture) {\n\tif testBackend == \"rr\" {\n\t\tprotest.MustHaveRecordingAllowed(t)\n\t}\n\tlistener, clientConn := service.ListenerPipe()\n\tdefer listener.Close()\n\tif buildMode == \"pie\" {\n\t\tbuildFlags |= protest.BuildModePIE\n\t}\n\tfixture = protest.BuildFixture(t, name, buildFlags)\n\tfor i := range redirects {\n\t\tif redirects[i] != \"\" {\n\t\t\tredirects[i] = filepath.Join(fixture.BuildDir, redirects[i])\n\t\t}\n\t}\n\tserver := rpccommon.NewServer(&service.Config{\n\t\tListener:    listener,\n\t\tProcessArgs: append([]string{fixture.Path}, args...),\n\t\tDebugger: debugger.Config{\n\t\t\tBackend:        testBackend,\n\t\t\tCheckGoVersion: true,\n\t\t\tPackages:       []string{fixture.Source},\n\t\t\tBuildFlags:     \"\", // build flags can be an empty string here because the only test that uses it, does not set special flags.\n\t\t\tExecuteKind:    debugger.ExecutingGeneratedFile,\n\t\t\tStdin:          redirects[0],\n\t\t\tStdout:         proc.OutputRedirect{Path: redirects[1]},\n\t\t\tStderr:         proc.OutputRedirect{Path: redirects[2]},\n\t\t},\n\t})\n\tif err := server.Run(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\treturn clientConn, fixture\n}\n\nfunc withTestClient2Extended(name string, t *testing.T, buildFlags protest.BuildFlags, redirects [3]string, args []string, fn func(c service.Client, fixture protest.Fixture)) {\n\tclientConn, fixture := startServer(name, buildFlags, t, redirects, args)\n\tclient := rpc2.NewClientFromConn(clientConn)\n\tdefer func() {\n\t\tclient.Detach(true)\n\t}()\n\n\tfn(client, fixture)\n}\n\nfunc TestRunWithInvalidPath(t *testing.T) {\n\tif testBackend == \"rr\" {\n\t\t// This test won't work because rr returns an error, after recording, when\n\t\t// the recording failed but also when the recording succeeded but the\n\t\t// inferior returned an error. Therefore we have to ignore errors from rr.\n\t\treturn\n\t}\n\tlistener, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tif err != nil {\n\t\tt.Fatalf(\"couldn't start listener: %s\\n\", err)\n\t}\n\tdefer listener.Close()\n\tserver := rpccommon.NewServer(&service.Config{\n\t\tListener:    listener,\n\t\tProcessArgs: []string{\"invalid_path\"},\n\t\tAPIVersion:  2,\n\t\tDebugger: debugger.Config{\n\t\t\tBackend:     testBackend,\n\t\t\tExecuteKind: debugger.ExecutingGeneratedFile,\n\t\t},\n\t})\n\tif err := server.Run(); err == nil {\n\t\tt.Fatal(\"Expected Run to return error for invalid program path\")\n\t}\n}\n\nfunc TestRestart_afterExit(t *testing.T) {\n\twithTestClient2(\"continuetestprog\", t, func(c service.Client) {\n\t\torigPid := c.ProcessPid()\n\t\tstate := <-c.Continue()\n\t\tif !state.Exited {\n\t\t\tt.Fatal(\"expected initial process to have exited\")\n\t\t}\n\t\tif _, err := c.Restart(false); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif c.ProcessPid() == origPid {\n\t\t\tt.Fatal(\"did not spawn new process, has same PID\")\n\t\t}\n\t\tstate = <-c.Continue()\n\t\tif !state.Exited {\n\t\t\tt.Fatalf(\"expected restarted process to have exited %v\", state)\n\t\t}\n\t})\n}\n\nfunc TestRestart_breakpointPreservation(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"continuetestprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 1, Name: \"firstbreakpoint\", Tracepoint: true})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tstateCh := c.Continue()\n\n\t\tstate := <-stateCh\n\t\tif state.CurrentThread.Breakpoint.Name != \"firstbreakpoint\" || !state.CurrentThread.Breakpoint.Tracepoint {\n\t\t\tt.Fatalf(\"Wrong breakpoint: %#v\\n\", state.CurrentThread.Breakpoint)\n\t\t}\n\t\tstate = <-stateCh\n\t\tif !state.Exited {\n\t\t\tt.Fatal(\"Did not exit after first tracepoint\")\n\t\t}\n\n\t\tt.Log(\"Restart\")\n\t\tc.Restart(false)\n\t\tstateCh = c.Continue()\n\t\tstate = <-stateCh\n\t\tif state.CurrentThread.Breakpoint.Name != \"firstbreakpoint\" || !state.CurrentThread.Breakpoint.Tracepoint {\n\t\t\tt.Fatalf(\"Wrong breakpoint (after restart): %#v\\n\", state.CurrentThread.Breakpoint)\n\t\t}\n\t\tstate = <-stateCh\n\t\tif !state.Exited {\n\t\t\tt.Fatal(\"Did not exit after first tracepoint (after restart)\")\n\t\t}\n\t})\n}\n\nfunc TestRestart_duringStop(t *testing.T) {\n\twithTestClient2(\"continuetestprog\", t, func(c service.Client) {\n\t\torigPid := c.ProcessPid()\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 1})\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tstate := <-c.Continue()\n\t\tif state.CurrentThread.Breakpoint == nil {\n\t\t\tt.Fatal(\"did not hit breakpoint\")\n\t\t}\n\t\tif _, err := c.Restart(false); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif c.ProcessPid() == origPid {\n\t\t\tt.Fatal(\"did not spawn new process, has same PID\")\n\t\t}\n\t\tbps, err := c.ListBreakpoints(false)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif len(bps) == 0 {\n\t\t\tt.Fatal(\"breakpoints not preserved\")\n\t\t}\n\t})\n}\n\n// This source is a slightly modified version of\n// _fixtures/testenv.go. The only difference is that\n// the name of the environment variable we are trying to\n// read is named differently, so we can assert the code\n// was actually changed in the test.\nconst modifiedSource = `package main\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n)\n\nfunc main() {\n\tx := os.Getenv(\"SOMEMODIFIEDVAR\")\n\truntime.Breakpoint()\n\tfmt.Printf(\"SOMEMODIFIEDVAR=%s\\n\", x)\n}\n`\n\nfunc TestRestart_rebuild(t *testing.T) {\n\t// In the original fixture file the env var tested for is SOMEVAR.\n\tt.Setenv(\"SOMEVAR\", \"bah\")\n\n\t// This test must use `testenv2` and it should be the *only* test that uses it. This is because it will overwrite\n\t// the fixture file with new source.\n\twithTestClient2Extended(\"testenv2\", t, 0, [3]string{}, nil, func(c service.Client, f protest.Fixture) {\n\t\t<-c.Continue()\n\n\t\tvar1, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"x\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable\")\n\n\t\tif var1.Value != \"bah\" {\n\t\t\tt.Fatalf(\"expected 'bah' got %q\", var1.Value)\n\t\t}\n\n\t\tfi, err := os.Stat(f.Source)\n\t\tassertNoError(err, t, \"Stat fixture.Source\")\n\n\t\toriginalSource, err := os.ReadFile(f.Source)\n\t\tassertNoError(err, t, \"Reading original source\")\n\n\t\t// Ensure we write the original source code back after the test exits.\n\t\tdefer os.WriteFile(f.Source, originalSource, fi.Mode())\n\n\t\t// Write modified source code to the fixture file.\n\t\terr = os.WriteFile(f.Source, []byte(modifiedSource), fi.Mode())\n\t\tassertNoError(err, t, \"Writing modified source\")\n\n\t\t// First set our new env var and ensure later that the\n\t\t// modified source code picks it up.\n\t\tt.Setenv(\"SOMEMODIFIEDVAR\", \"foobar\")\n\n\t\t// Restart the program, rebuilding from source.\n\t\t_, err = c.Restart(true)\n\t\tassertNoError(err, t, \"Restart(true)\")\n\n\t\t<-c.Continue()\n\n\t\tvar1, err = c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"x\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable\")\n\n\t\tif var1.Value != \"foobar\" {\n\t\t\tt.Fatalf(\"expected 'foobar' got %q\", var1.Value)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_exit(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"continuetestprog\", t, func(c service.Client) {\n\t\tstate, err := c.GetState()\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tif e, a := false, state.Exited; e != a {\n\t\t\tt.Fatalf(\"Expected exited %v, got %v\", e, a)\n\t\t}\n\t\tstate = <-c.Continue()\n\t\tif state.Err == nil {\n\t\t\tt.Fatalf(\"Error expected after continue\")\n\t\t}\n\t\tif !state.Exited {\n\t\t\tt.Fatalf(\"Expected exit after continue: %v\", state)\n\t\t}\n\t\t_, err = c.GetState()\n\t\tif err == nil {\n\t\t\tt.Fatal(\"Expected error on querying state from exited process\")\n\t\t}\n\t})\n}\n\nfunc TestClientServer_step(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.helloworld\", Line: -1})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\n\t\tstateBefore := <-c.Continue()\n\t\tif stateBefore.Err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", stateBefore.Err)\n\t\t}\n\n\t\tstateAfter, err := c.Step()\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\n\t\tif before, after := stateBefore.CurrentThread.PC, stateAfter.CurrentThread.PC; before >= after {\n\t\t\tt.Fatalf(\"Expected %#v to be greater than %#v\", after, before)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_stepout(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.helloworld\", Line: -1})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tstateBefore := <-c.Continue()\n\t\tassertNoError(stateBefore.Err, t, \"Continue()\")\n\t\tif stateBefore.CurrentThread.Line != 13 {\n\t\t\tt.Fatalf(\"wrong line number %s:%d, expected %d\", stateBefore.CurrentThread.File, stateBefore.CurrentThread.Line, 13)\n\t\t}\n\t\tstateAfter, err := c.StepOut()\n\t\tassertNoError(err, t, \"StepOut()\")\n\t\tif stateAfter.CurrentThread.Line != 35 {\n\t\t\tt.Fatalf(\"wrong line number %s:%d, expected %d\", stateAfter.CurrentThread.File, stateAfter.CurrentThread.Line, 13)\n\t\t}\n\t})\n}\n\nfunc testnext2(testcases []nextTest, initialLocation string, t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: initialLocation, Line: -1})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\n\t\tstate := <-c.Continue()\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", state.Err)\n\t\t}\n\n\t\t_, err = c.ClearBreakpoint(bp.ID)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\n\t\tfor _, tc := range testcases {\n\t\t\tif state.CurrentThread.Line != tc.begin {\n\t\t\t\tt.Fatalf(\"Program not stopped at correct spot expected %d was %d\", tc.begin, state.CurrentThread.Line)\n\t\t\t}\n\n\t\t\tt.Logf(\"Next for scenario %#v\", tc)\n\t\t\tstate, err = c.Next()\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t\t}\n\n\t\t\tif state.CurrentThread.Line != tc.end {\n\t\t\t\tt.Fatalf(\"Program did not continue to correct next location expected %d was %d\", tc.end, state.CurrentThread.Line)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestNextGeneral(t *testing.T) {\n\tvar testcases []nextTest\n\n\tver, _ := goversion.Parse(runtime.Version())\n\n\tif ver.Major < 0 || ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 7, Rev: -1}) {\n\t\ttestcases = []nextTest{\n\t\t\t{17, 19},\n\t\t\t{19, 20},\n\t\t\t{20, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 31},\n\t\t\t{31, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 31},\n\t\t\t{31, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 27},\n\t\t\t{27, 28},\n\t\t\t{28, 34},\n\t\t}\n\t} else {\n\t\ttestcases = []nextTest{\n\t\t\t{17, 19},\n\t\t\t{19, 20},\n\t\t\t{20, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 31},\n\t\t\t{31, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 31},\n\t\t\t{31, 23},\n\t\t\t{23, 24},\n\t\t\t{24, 26},\n\t\t\t{26, 27},\n\t\t\t{27, 34},\n\t\t}\n\t}\n\n\ttestnext2(testcases, \"main.testnext\", t)\n}\n\nfunc TestNextFunctionReturn(t *testing.T) {\n\ttestcases := []nextTest{\n\t\t{13, 14},\n\t\t{14, 15},\n\t\t{15, 35},\n\t}\n\ttestnext2(testcases, \"main.helloworld\", t)\n}\n\nfunc TestClientServer_breakpointInMainThread(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testprog\", t, func(c service.Client) {\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.helloworld\", Line: 1})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\n\t\tstate := <-c.Continue()\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v, state: %#v\", state.Err, state)\n\t\t}\n\n\t\tpc := state.CurrentThread.PC\n\n\t\tif pc-1 != bp.Addr && pc != bp.Addr {\n\t\t\tf, l := state.CurrentThread.File, state.CurrentThread.Line\n\t\t\tt.Fatalf(\"Break not respected:\\nPC:%#v %s:%d\\nFN:%#v \\n\", pc, f, l, bp.Addr)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_breakpointInSeparateGoroutine(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testthreads\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.anotherthread\", Line: 1})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\n\t\tstate := <-c.Continue()\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v, state: %#v\", state.Err, state)\n\t\t}\n\n\t\tf, l := state.CurrentThread.File, state.CurrentThread.Line\n\t\tif f != \"testthreads.go\" && l != 9 {\n\t\t\tt.Fatal(\"Program did not hit breakpoint\")\n\t\t}\n\t})\n}\n\nfunc TestClientServer_breakAtNonexistentPoint(t *testing.T) {\n\twithTestClient2(\"testprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"nowhere\", Line: 1})\n\t\tif err == nil {\n\t\t\tt.Fatal(\"Should not be able to break at non existent function\")\n\t\t}\n\t})\n}\n\nfunc TestClientServer_clearBreakpoint(t *testing.T) {\n\twithTestClient2(\"testprog\", t, func(c service.Client) {\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.sleepytime\", Line: 1})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\n\t\tif e, a := 1, countBreakpoints(t, c); e != a {\n\t\t\tt.Fatalf(\"Expected breakpoint count %d, got %d\", e, a)\n\t\t}\n\n\t\tconst nonExistentBreakpointId = 9999\n\t\tif bp.ID != nonExistentBreakpointId {\n\t\t\t_, err := c.ClearBreakpoint(nonExistentBreakpointId)\n\t\t\tif err == nil {\n\t\t\t\tt.Fatalf(\"Expected error, got none deleting non-existent breakpoint\")\n\t\t\t}\n\t\t}\n\n\t\tdeleted, err := c.ClearBreakpoint(bp.ID)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\n\t\tif deleted.ID != bp.ID {\n\t\t\tt.Fatalf(\"Expected deleted breakpoint ID %v, got %v\", bp.ID, deleted.ID)\n\t\t}\n\n\t\tif e, a := 0, countBreakpoints(t, c); e != a {\n\t\t\tt.Fatalf(\"Expected breakpoint count %d, got %d\", e, a)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_toggleBreakpoint(t *testing.T) {\n\twithTestClient2(\"testtoggle\", t, func(c service.Client) {\n\t\ttoggle := func(bp *api.Breakpoint) {\n\t\t\tt.Helper()\n\t\t\tdbp, err := c.ToggleBreakpoint(bp.ID)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t\t}\n\t\t\tif dbp.ID != bp.ID {\n\t\t\t\tt.Fatalf(\"The IDs don't match\")\n\t\t\t}\n\t\t}\n\n\t\t// This one is toggled twice\n\t\tbp1, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.lineOne\", Tracepoint: true})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\\n\", err)\n\t\t}\n\n\t\ttoggle(bp1)\n\t\ttoggle(bp1)\n\n\t\t// This one is toggled once\n\t\tbp2, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.lineTwo\", Tracepoint: true})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\\n\", err)\n\t\t}\n\n\t\ttoggle(bp2)\n\n\t\t// This one is never toggled\n\t\tbp3, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.lineThree\", Tracepoint: true})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\\n\", err)\n\t\t}\n\n\t\tif e, a := 3, countBreakpoints(t, c); e != a {\n\t\t\tt.Fatalf(\"Expected breakpoint count %d, got %d\", e, a)\n\t\t}\n\n\t\tenableCount := 0\n\t\tdisabledCount := 0\n\n\t\tcontChan := c.Continue()\n\t\tfor state := range contChan {\n\t\t\tif state.CurrentThread != nil && state.CurrentThread.Breakpoint != nil {\n\t\t\t\tswitch state.CurrentThread.Breakpoint.ID {\n\t\t\t\tcase bp1.ID, bp3.ID:\n\t\t\t\t\tenableCount++\n\t\t\t\tcase bp2.ID:\n\t\t\t\t\tdisabledCount++\n\t\t\t\t}\n\n\t\t\t\tt.Logf(\"%v\", state)\n\t\t\t}\n\t\t\tif state.Exited {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif state.Err != nil {\n\t\t\t\tt.Fatalf(\"Unexpected error during continue: %v\\n\", state.Err)\n\t\t\t}\n\t\t}\n\n\t\tif enableCount != 2 {\n\t\t\tt.Fatalf(\"Wrong number of enabled hits: %d\\n\", enableCount)\n\t\t}\n\n\t\tif disabledCount != 0 {\n\t\t\tt.Fatalf(\"A disabled breakpoint was hit: %d\\n\", disabledCount)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_toggleAmendedBreakpoint(t *testing.T) {\n\twithTestClient2(\"testtoggle\", t, func(c service.Client) {\n\t\ttoggle := func(bp *api.Breakpoint) {\n\t\t\tdbp, err := c.ToggleBreakpoint(bp.ID)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t\t}\n\t\t\tif dbp.ID != bp.ID {\n\t\t\t\tt.Fatalf(\"The IDs don't match\")\n\t\t\t}\n\t\t}\n\n\t\t// This one is toggled twice\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.lineOne\", Tracepoint: true})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\\n\", err)\n\t\t}\n\t\tbp.Cond = \"n == 7\"\n\t\tassertNoError(c.AmendBreakpoint(bp), t, \"AmendBreakpoint() 1\")\n\n\t\t// Toggle off.\n\t\ttoggle(bp)\n\t\t// Toggle on.\n\t\ttoggle(bp)\n\n\t\tamended, err := c.GetBreakpoint(bp.ID)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif amended.Cond == \"\" {\n\t\t\tt.Fatal(\"breakpoint amendments not preserved after toggle\")\n\t\t}\n\t})\n}\n\nfunc TestClientServer_disableHitCondLSSBreakpoint(t *testing.T) {\n\twithTestClient2(\"break\", t, func(c service.Client) {\n\t\tfp := testProgPath(t, \"break\")\n\t\thitCondBp, err := c.CreateBreakpoint(&api.Breakpoint{\n\t\t\tFile:    fp,\n\t\t\tLine:    7,\n\t\t\tHitCond: \"< 3\",\n\t\t})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{File: fp, Line: 8})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\n\t\tif len(bp.Addrs) == 0 {\n\t\t\tt.Fatalf(\"no addresses for breakpoint\")\n\t\t}\n\n\t\tcontinueTo := func(ln int, ival string) {\n\t\t\tstate := <-c.Continue()\n\t\t\tassertNoError(state.Err, t, fmt.Sprintf(\"Unexpected error: %v, state: %#v\", state.Err, state))\n\n\t\t\tf, l := state.CurrentThread.File, state.CurrentThread.Line\n\t\t\tif f != fp || l != ln {\n\t\t\t\tt.Fatalf(\"Program did not hit breakpoint %s:%d\", f, l)\n\t\t\t}\n\n\t\t\tif ival == \"\" {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tivar, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"i\", normalLoadConfig)\n\t\t\tassertNoError(err, t, \"EvalVariable\")\n\n\t\t\tt.Logf(\"ivar: %s\", ivar.SinglelineString())\n\n\t\t\tif ivar.Value != ival {\n\t\t\t\tt.Fatalf(\"Wrong variable value: %s\", ivar.Value)\n\t\t\t}\n\t\t}\n\n\t\tcontinueTo(7, \"1\")\n\t\tcontinueTo(7, \"2\")\n\t\tcontinueTo(8, \"\")\n\n\t\tbp, err = c.GetBreakpoint(hitCondBp.ID)\n\t\tassertNoError(err, t, \"GetBreakpoint()\")\n\n\t\tif len(bp.Addrs) != 0 {\n\t\t\tt.Fatalf(\"Hit condition %s is no longer satisfiable but breakpoint has not been disabled\", bp.HitCond)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_disableHitEQLCondBreakpoint(t *testing.T) {\n\twithTestClient2(\"break\", t, func(c service.Client) {\n\t\tfp := testProgPath(t, \"break\")\n\t\thitCondBp, err := c.CreateBreakpoint(&api.Breakpoint{\n\t\t\tFile:    fp,\n\t\t\tLine:    7,\n\t\t\tHitCond: \"== 3\",\n\t\t})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{File: fp, Line: 8})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\n\t\tif len(bp.Addrs) == 0 {\n\t\t\tt.Fatalf(\"no addresses for breakpoint\")\n\t\t}\n\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\n\t\tf, l := state.CurrentThread.File, state.CurrentThread.Line\n\t\tif f != fp || l != 7 {\n\t\t\tt.Fatal(\"Program did not hit breakpoint\")\n\t\t}\n\n\t\tivar, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"i\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable\")\n\n\t\tt.Logf(\"ivar: %s\", ivar.SinglelineString())\n\n\t\tif ivar.Value != \"3\" {\n\t\t\tt.Fatalf(\"Wrong variable value: %s\", ivar.Value)\n\t\t}\n\n\t\tstate = <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\n\t\tif state.CurrentThread.File != fp || state.CurrentThread.Line != 8 {\n\t\t\tt.Fatal(\"Program did not hit breakpoint\")\n\t\t}\n\n\t\tbp, err = c.GetBreakpoint(hitCondBp.ID)\n\t\tassertNoError(err, t, \"GetBreakpoint()\")\n\n\t\tif len(bp.Addrs) != 0 {\n\t\t\tt.Fatalf(\"Hit condition %s is no more satisfiable but breakpoint has not been disabled\", bp.HitCond)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_switchThread(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\t// With invalid thread id\n\t\t_, err := c.SwitchThread(-1)\n\t\tif err == nil {\n\t\t\tt.Fatal(\"Expected error for invalid thread id\")\n\t\t}\n\n\t\t_, err = c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 1})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tstate := <-c.Continue()\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v, state: %#v\", state.Err, state)\n\t\t}\n\n\t\tvar nt int\n\t\tct := state.CurrentThread.ID\n\t\tthreads, err := c.ListThreads()\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tfor _, th := range threads {\n\t\t\tif th.ID != ct {\n\t\t\t\tnt = th.ID\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif nt == 0 {\n\t\t\tt.Fatal(\"could not find thread to switch to\")\n\t\t}\n\t\t// With valid thread id\n\t\tstate, err = c.SwitchThread(nt)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tif state.CurrentThread.ID != nt {\n\t\t\tt.Fatal(\"Did not switch threads\")\n\t\t}\n\t})\n}\n\nfunc TestClientServer_infoLocals(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\tfp := testProgPath(t, \"testnextprog\")\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{File: fp, Line: 24})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tstate := <-c.Continue()\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v, state: %#v\", state.Err, state)\n\t\t}\n\t\tlocals, err := c.ListLocalVariables(api.EvalScope{GoroutineID: -1}, normalLoadConfig)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tif len(locals) != 3 {\n\t\t\tt.Fatalf(\"Expected 3 locals, got %d %#v\", len(locals), locals)\n\t\t}\n\t})\n}\n\nfunc matchFunctions(t *testing.T, funcs []string, expected []string, depth int) {\n\tfor i := range funcs {\n\t\tif funcs[i] != expected[i] {\n\t\t\tt.Fatalf(\"Function %s  not found in ListFunctions --follow-calls=%d output\", expected[i], depth)\n\t\t}\n\t}\n}\n\nfunc TestTraceFollowCallsCommand(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testtracefns\", t, func(c service.Client) {\n\t\ttestCases := []struct {\n\t\t\tfuncName string\n\t\t\tdepth    int\n\t\t\texpected []string\n\t\t}{\n\t\t\t{\n\t\t\t\tfuncName: \"main.A\",\n\t\t\t\tdepth:    3,\n\t\t\t\texpected: []string{\"main.A\", \"main.B\", \"main.C\", \"main.D\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfuncName: \"main.first\",\n\t\t\t\tdepth:    3,\n\t\t\t\texpected: []string{\"main.first\", \"main.second\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfuncName: \"main.callme\",\n\t\t\t\tdepth:    4,\n\t\t\t\texpected: []string{\"main.callme\", \"main.callme2\", \"main.callmed\", \"main.callmee\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfuncName: \"main.F0\",\n\t\t\t\tdepth:    6,\n\t\t\t\texpected: []string{\"main.F0\", \"main.F0.func1\", \"main.F1\", \"main.F2\", \"main.F3\", \"main.F4\", \"runtime.deferreturn\", \"runtime.gopanic\", \"runtime.gorecover\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfuncName: \"main.swap\",\n\t\t\t\tdepth:    3,\n\t\t\t\texpected: []string{\"main.swap\", \"main.swap.func1\", \"runtime.deferreturn\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfuncName: \"main.nestDefer\",\n\t\t\t\tdepth:    7,\n\t\t\t\texpected: []string{\"main.nestDefer\", \"runtime.deferreturn\", \"main.outer\", \"main.swap\", \"main.swap.func1\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfuncName: \"main.namedDeferLoop\",\n\t\t\t\tdepth:    3,\n\t\t\t\texpected: []string{\"main.namedDeferLoop\", \"runtime.deferreturn\", \"main.testfunc\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfuncName: \"main.op\",\n\t\t\t\tdepth:    3,\n\t\t\t\texpected: []string{\"main.formula\", \"main.op\", \"main.formula.func1\"},\n\t\t\t},\n\t\t\t{\n\t\t\t\tfuncName: \"main.dyn\",\n\t\t\t\tdepth:    3,\n\t\t\t\texpected: []string{\"main.assign\", \"main.dyn\", \"main.testfunc\"},\n\t\t\t},\n\t\t}\n\n\t\tfor _, tc := range testCases {\n\t\t\tt.Run(tc.funcName, func(t *testing.T) {\n\t\t\t\tfunctions, err := c.ListFunctions(tc.funcName, tc.depth)\n\t\t\t\tassertNoError(err, t, \"ListFunctions()\")\n\t\t\t\tmatchFunctions(t, functions, tc.expected, tc.depth)\n\t\t\t})\n\t\t}\n\t})\n}\n\nfunc TestClientServer_infoArgs(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\tfp := testProgPath(t, \"testnextprog\")\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{File: fp, Line: 47})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tstate := <-c.Continue()\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v, state: %#v\", state.Err, state)\n\t\t}\n\t\tregs, err := c.ListThreadRegisters(0, false)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tif len(regs) == 0 {\n\t\t\tt.Fatal(\"Expected string showing registers values, got empty string\")\n\t\t}\n\n\t\tregs, err = c.ListScopeRegisters(api.EvalScope{GoroutineID: -1, Frame: 0}, false)\n\t\tassertNoError(err, t, \"ListScopeRegisters(-1, 0)\")\n\t\tif len(regs) == 0 {\n\t\t\tt.Fatal(\"Expected string showing registers values, got empty string\")\n\t\t}\n\t\tt.Logf(\"GoroutineID: -1, Frame: 0\\n%s\", regs.String())\n\n\t\tregs, err = c.ListScopeRegisters(api.EvalScope{GoroutineID: -1, Frame: 1}, false)\n\t\tassertNoError(err, t, \"ListScopeRegisters(-1, 1)\")\n\t\tif len(regs) == 0 {\n\t\t\tt.Fatal(\"Expected string showing registers values, got empty string\")\n\t\t}\n\t\tt.Logf(\"GoroutineID: -1, Frame: 1\\n%s\", regs.String())\n\n\t\tlocals, err := c.ListFunctionArgs(api.EvalScope{GoroutineID: -1}, normalLoadConfig)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tif len(locals) != 2 {\n\t\t\tt.Fatalf(\"Expected 2 function args, got %d %#v\", len(locals), locals)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_traceContinue(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"integrationprog\", t, func(c service.Client) {\n\t\tfp := testProgPath(t, \"integrationprog\")\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{File: fp, Line: 15, Tracepoint: true, Goroutine: true, Stacktrace: 5, Variables: []string{\"i\"}})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\\n\", err)\n\t\t}\n\t\tcount := 0\n\t\tcontChan := c.Continue()\n\t\tfor state := range contChan {\n\t\t\tif state.CurrentThread != nil && state.CurrentThread.Breakpoint != nil {\n\t\t\t\tcount++\n\n\t\t\t\tt.Logf(\"%v\", state)\n\n\t\t\t\tbpi := state.CurrentThread.BreakpointInfo\n\n\t\t\t\tif bpi.Goroutine == nil {\n\t\t\t\t\tt.Fatalf(\"No goroutine information\")\n\t\t\t\t}\n\n\t\t\t\tif len(bpi.Stacktrace) == 0 {\n\t\t\t\t\tt.Fatalf(\"No stacktrace\\n\")\n\t\t\t\t}\n\n\t\t\t\tif len(bpi.Variables) != 1 {\n\t\t\t\t\tt.Fatalf(\"Wrong number of variables returned: %d\", len(bpi.Variables))\n\t\t\t\t}\n\n\t\t\t\tif bpi.Variables[0].Name != \"i\" {\n\t\t\t\t\tt.Fatalf(\"Wrong variable returned %s\", bpi.Variables[0].Name)\n\t\t\t\t}\n\n\t\t\t\tt.Logf(\"Variable i is %v\", bpi.Variables[0])\n\n\t\t\t\tn, err := strconv.Atoi(bpi.Variables[0].Value)\n\n\t\t\t\tif err != nil || n != count-1 {\n\t\t\t\t\tt.Fatalf(\"Wrong variable value %q (%v %d)\", bpi.Variables[0].Value, err, count)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif state.Exited {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tt.Logf(\"%v\", state)\n\t\t\tif state.Err != nil {\n\t\t\t\tt.Fatalf(\"Unexpected error during continue: %v\\n\", state.Err)\n\t\t\t}\n\t\t}\n\n\t\tif count != 3 {\n\t\t\tt.Fatalf(\"Wrong number of continues hit: %d\\n\", count)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_traceContinue2(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"integrationprog\", t, func(c service.Client) {\n\t\tbp1, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 1, Tracepoint: true})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\\n\", err)\n\t\t}\n\t\tbp2, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.sayhi\", Line: 1, Tracepoint: true})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\\n\", err)\n\t\t}\n\t\tcountMain := 0\n\t\tcountSayhi := 0\n\t\tcontChan := c.Continue()\n\t\tfor state := range contChan {\n\t\t\tif state.CurrentThread != nil && state.CurrentThread.Breakpoint != nil {\n\t\t\t\tswitch state.CurrentThread.Breakpoint.ID {\n\t\t\t\tcase bp1.ID:\n\t\t\t\t\tcountMain++\n\t\t\t\tcase bp2.ID:\n\t\t\t\t\tcountSayhi++\n\t\t\t\t}\n\n\t\t\t\tt.Logf(\"%v\", state)\n\t\t\t}\n\t\t\tif state.Exited {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif state.Err != nil {\n\t\t\t\tt.Fatalf(\"Unexpected error during continue: %v\\n\", state.Err)\n\t\t\t}\n\t\t}\n\n\t\tif countMain != 1 {\n\t\t\tt.Fatalf(\"Wrong number of continues (main.main) hit: %d\\n\", countMain)\n\t\t}\n\n\t\tif countSayhi != 3 {\n\t\t\tt.Fatalf(\"Wrong number of continues (main.sayhi) hit: %d\\n\", countSayhi)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_FindLocations(t *testing.T) {\n\tif runtime.GOARCH == \"ppc64le\" && buildMode == \"pie\" {\n\t\tt.Skip(\"pie mode broken on ppc64le\")\n\t}\n\twithTestClient2(\"locationsprog\", t, func(c service.Client) {\n\t\tsomeFunctionCallAddr := findLocationHelper(t, c, \"locationsprog.go:26\", false, 1, 0)[0]\n\t\tsomeFunctionLine1 := findLocationHelper(t, c, \"locationsprog.go:27\", false, 1, 0)[0]\n\t\tfindLocationHelper(t, c, \"anotherFunction:1\", false, 1, someFunctionLine1)\n\t\tfindLocationHelper(t, c, \"main.anotherFunction:1\", false, 1, someFunctionLine1)\n\t\tfindLocationHelper(t, c, \"anotherFunction\", false, 1, someFunctionCallAddr)\n\t\tfindLocationHelper(t, c, \"main.anotherFunction\", false, 1, someFunctionCallAddr)\n\t\tfindLocationHelper(t, c, fmt.Sprintf(\"*0x%x\", someFunctionCallAddr), false, 1, someFunctionCallAddr)\n\t\tfindLocationHelper(t, c, \"sprog.go:26\", true, 0, 0)\n\n\t\tfindLocationHelper(t, c, \"String\", true, 0, 0)\n\t\tfindLocationHelper(t, c, \"main.String\", true, 0, 0)\n\n\t\tsomeTypeStringFuncAddr := findLocationHelper(t, c, \"locationsprog.go:14\", false, 1, 0)[0]\n\t\totherTypeStringFuncAddr := findLocationHelper(t, c, \"locationsprog.go:18\", false, 1, 0)[0]\n\t\tfindLocationHelper(t, c, \"SomeType.String\", false, 1, someTypeStringFuncAddr)\n\t\tfindLocationHelper(t, c, \"(*SomeType).String\", false, 1, someTypeStringFuncAddr)\n\t\tfindLocationHelper(t, c, \"main.SomeType.String\", false, 1, someTypeStringFuncAddr)\n\t\tfindLocationHelper(t, c, \"main.(*SomeType).String\", false, 1, someTypeStringFuncAddr)\n\n\t\t// Issue #275\n\t\treadfile := findLocationHelper(t, c, \"io/ioutil.ReadFile\", false, 1, 0)[0]\n\n\t\t// Issue #296\n\t\tfindLocationHelper(t, c, \"/io/ioutil.ReadFile\", false, 1, readfile)\n\t\tfindLocationHelper(t, c, \"ioutil.ReadFile\", false, 1, readfile)\n\n\t\tstringAddrs := findLocationHelper(t, c, \"/^main.*Type.*String$/\", false, 2, 0)\n\n\t\tif otherTypeStringFuncAddr != stringAddrs[0] && otherTypeStringFuncAddr != stringAddrs[1] {\n\t\t\tt.Fatalf(\"Wrong locations returned for \\\"/.*Type.*String/\\\", got: %v expected: %v and %v\\n\", stringAddrs, someTypeStringFuncAddr, otherTypeStringFuncAddr)\n\t\t}\n\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 4, Tracepoint: false})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"CreateBreakpoint(): %v\\n\", err)\n\t\t}\n\n\t\t<-c.Continue()\n\n\t\tlocationsprog35Addr := findLocationHelper(t, c, \"locationsprog.go:35\", false, 1, 0)[0]\n\t\tfindLocationHelper(t, c, fmt.Sprintf(\"%s:35\", testProgPath(t, \"locationsprog\")), false, 1, locationsprog35Addr)\n\t\tfindLocationHelper(t, c, \"+1\", false, 1, locationsprog35Addr)\n\t\tfindLocationHelper(t, c, \"35\", false, 1, locationsprog35Addr)\n\t\tfindLocationHelper(t, c, \"-1\", false, 1, findLocationHelper(t, c, \"locationsprog.go:33\", false, 1, 0)[0])\n\n\t\tfindLocationHelper(t, c, `*amap[\"k\"]`, false, 1, findLocationHelper(t, c, `amap[\"k\"]`, false, 1, 0)[0])\n\n\t\tlocsNoSubst, _, _ := c.FindLocation(api.EvalScope{GoroutineID: -1}, \"_fixtures/locationsprog.go:35\", false, nil)\n\t\tsep := \"/\"\n\t\tif strings.Contains(locsNoSubst[0].File, \"\\\\\") {\n\t\t\tsep = \"\\\\\"\n\t\t}\n\t\tsubstRules := [][2]string{{strings.Replace(locsNoSubst[0].File, \"locationsprog.go\", \"\", 1), strings.Replace(locsNoSubst[0].File, \"_fixtures\"+sep+\"locationsprog.go\", \"nonexistent\", 1)}}\n\t\tt.Logf(\"substitute rules: %q -> %q\", substRules[0][0], substRules[0][1])\n\t\tlocsSubst, _, err := c.FindLocation(api.EvalScope{GoroutineID: -1}, \"nonexistent/locationsprog.go:35\", false, substRules)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"FindLocation(locationsprog.go:35) with substitute rules: %v\", err)\n\t\t}\n\t\tt.Logf(\"FindLocation(\\\"/nonexistent/path/locationsprog.go:35\\\") -> %#v\", locsSubst)\n\t\tif locsNoSubst[0].PC != locsSubst[0].PC {\n\t\t\tt.Fatalf(\"FindLocation with substitute rules mismatch %#v %#v\", locsNoSubst[0], locsSubst[0])\n\t\t}\n\t})\n\n\twithTestClient2(\"testnextdefer\", t, func(c service.Client) {\n\t\tfirstMainLine := findLocationHelper(t, c, \"testnextdefer.go:5\", false, 1, 0)[0]\n\t\tfindLocationHelper(t, c, \"main.main\", false, 1, firstMainLine)\n\t})\n\n\twithTestClient2(\"stacktraceprog\", t, func(c service.Client) {\n\t\tstacktracemeAddr := findLocationHelper(t, c, \"stacktraceprog.go:4\", false, 1, 0)[0]\n\t\tfindLocationHelper(t, c, \"main.stacktraceme\", false, 1, stacktracemeAddr)\n\t})\n\n\twithTestClient2Extended(\"locationsUpperCase\", t, 0, [3]string{}, nil, func(c service.Client, fixture protest.Fixture) {\n\t\t// Upper case\n\t\tfindLocationHelper(t, c, \"locationsUpperCase.go:6\", false, 1, 0)\n\n\t\t// Fully qualified path\n\t\tfindLocationHelper(t, c, fixture.Source+\":6\", false, 1, 0)\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{File: fixture.Source, Line: 6})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Could not set breakpoint in %s: %v\\n\", fixture.Source, err)\n\t\t}\n\t\tc.ClearBreakpoint(bp.ID)\n\n\t\t//  Allow `/` or `\\` on Windows\n\t\tif runtime.GOOS == \"windows\" {\n\t\t\tfindLocationHelper(t, c, filepath.FromSlash(fixture.Source)+\":6\", false, 1, 0)\n\t\t\tbp, err = c.CreateBreakpoint(&api.Breakpoint{File: filepath.FromSlash(fixture.Source), Line: 6})\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"Could not set breakpoint in %s: %v\\n\", filepath.FromSlash(fixture.Source), err)\n\t\t\t}\n\t\t\tc.ClearBreakpoint(bp.ID)\n\t\t}\n\n\t\t// Case-insensitive on Windows, case-sensitive otherwise\n\t\tshouldWrongCaseBeError := true\n\t\tnumExpectedMatches := 0\n\t\tif runtime.GOOS == \"windows\" {\n\t\t\tshouldWrongCaseBeError = false\n\t\t\tnumExpectedMatches = 1\n\t\t}\n\t\tfindLocationHelper(t, c, strings.ToLower(fixture.Source)+\":6\", shouldWrongCaseBeError, numExpectedMatches, 0)\n\t\tbp, err = c.CreateBreakpoint(&api.Breakpoint{File: strings.ToLower(fixture.Source), Line: 6})\n\t\tif (err == nil) == shouldWrongCaseBeError {\n\t\t\tt.Fatalf(\"Could not set breakpoint in %s: %v\\n\", strings.ToLower(fixture.Source), err)\n\t\t}\n\t\tc.ClearBreakpoint(bp.ID)\n\t})\n\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 13) {\n\t\twithTestClient2(\"pkgrenames\", t, func(c service.Client) {\n\t\t\tsomeFuncLoc := findLocationHelper(t, c, \"github.com/go-delve/delve/_fixtures/internal/dir%2eio.SomeFunction:0\", false, 1, 0)[0]\n\t\t\tfindLocationHelper(t, c, \"dirio.SomeFunction:0\", false, 1, someFuncLoc)\n\t\t})\n\t}\n\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 18) {\n\t\twithTestClient2(\"locationsprog_generic\", t, func(c service.Client) {\n\t\t\tconst (\n\t\t\t\tmethodLine = \"locationsprog_generic.go:9\"\n\t\t\t\tfuncLine   = \"locationsprog_generic.go:13\"\n\t\t\t\tfuncLine2  = \"locationsprog_generic.go:14\"\n\t\t\t)\n\t\t\tmethodLoc := findLocationHelper2(t, c, methodLine, nil)\n\t\t\tif len(methodLoc.PCs) != 2 {\n\t\t\t\t// we didn't get both instantiations of the method\n\t\t\t\tt.Errorf(\"wrong number of PCs for %s: %#x\", methodLine, methodLoc.PCs)\n\t\t\t}\n\n\t\t\tfuncLoc := findLocationHelper2(t, c, funcLine, nil)\n\t\t\tif len(funcLoc.PCs) != 2 {\n\t\t\t\t// we didn't get both instantiations of the function\n\t\t\t\tt.Errorf(\"wrong number of PCs for %s: %#x\", funcLine, funcLoc.PCs)\n\t\t\t}\n\n\t\t\tfuncLoc2 := findLocationHelper2(t, c, funcLine2, nil)\n\t\t\tif len(funcLoc2.PCs) != 2 {\n\t\t\t\tt.Errorf(\"wrong number of PCs for %s: %#x\", funcLine2, funcLoc2.PCs)\n\t\t\t}\n\n\t\t\tfindLocationHelper2(t, c, \"main.ParamFunc\", funcLoc)\n\n\t\t\tfindLocationHelper2(t, c, \"ParamFunc\", funcLoc)\n\n\t\t\tfindLocationHelper2(t, c, \"main.ParamReceiver.Amethod\", methodLoc)\n\t\t\tfindLocationHelper2(t, c, \"main.Amethod\", methodLoc)\n\t\t\tfindLocationHelper2(t, c, \"ParamReceiver.Amethod\", methodLoc)\n\t\t\tfindLocationHelper2(t, c, \"Amethod\", methodLoc)\n\n\t\t\tfindLocationHelper2(t, c, \"main.(*ParamReceiver).Amethod\", methodLoc)\n\t\t\tfindLocationHelper2(t, c, \"(*ParamReceiver).Amethod\", methodLoc)\n\n\t\t\tfindLocationHelper2(t, c, \"main.(*ParamReceiver).Amethod\", methodLoc)\n\t\t\tfindLocationHelper2(t, c, \"(*ParamReceiver).Amethod\", methodLoc)\n\n\t\t\tfindLocationHelper2(t, c, \"main.ParamFunc:1\", funcLoc2)\n\t\t})\n\t}\n}\n\nfunc findLocationHelper2(t *testing.T, c service.Client, loc string, checkLoc *api.Location) *api.Location {\n\tlocs, _, err := c.FindLocation(api.EvalScope{GoroutineID: -1}, loc, false, nil)\n\tif err != nil {\n\t\tt.Fatalf(\"FindLocation(%q) -> error %v\", loc, err)\n\t}\n\tt.Logf(\"FindLocation(%q) → %v\\n\", loc, locs)\n\tif len(locs) != 1 {\n\t\tt.Logf(\"Wrong number of locations returned for location %q (got %d expected 1)\", loc, len(locs))\n\t}\n\n\tif checkLoc == nil {\n\t\treturn &locs[0]\n\t}\n\n\tif len(checkLoc.PCs) != len(locs[0].PCs) {\n\t\tt.Fatalf(\"Wrong number of PCs returned (got %#x expected %#x)\", locs[0].PCs, checkLoc.PCs)\n\t}\n\n\tfor i := range checkLoc.PCs {\n\t\tif checkLoc.PCs[i] != locs[0].PCs[i] {\n\t\t\tt.Fatalf(\"Wrong PCs returned (got %#x expected %#x)\", locs[0].PCs, checkLoc.PCs)\n\t\t}\n\t}\n\n\treturn &locs[0]\n}\n\nfunc TestClientServer_FindLocationsAddr(t *testing.T) {\n\twithTestClient2(\"locationsprog2\", t, func(c service.Client) {\n\t\t<-c.Continue()\n\n\t\tafunction := findLocationHelper(t, c, \"main.afunction\", false, 1, 0)[0]\n\t\tanonfunc := findLocationHelper(t, c, \"main.main.func1\", false, 1, 0)[0]\n\n\t\tfindLocationHelper(t, c, \"*fn1\", false, 1, afunction)\n\t\tfindLocationHelper(t, c, \"*fn3\", false, 1, anonfunc)\n\t})\n}\n\nfunc TestClientServer_FindLocationsExactMatch(t *testing.T) {\n\t// if an expression matches multiple functions but one of them is an exact\n\t// match it should be used anyway.\n\t// In this example \"math/rand.Intn\" would normally match \"math/rand.Intn\"\n\t// and \"math/rand.(*Rand).Intn\" but since the first match is exact it\n\t// should be prioritized.\n\twithTestClient2(\"locationsprog3\", t, func(c service.Client) {\n\t\t<-c.Continue()\n\t\tfindLocationHelper(t, c, \"math/rand.Intn\", false, 1, 0)\n\t})\n}\n\nfunc TestClientServer_EvalVariable(t *testing.T) {\n\twithTestClient2(\"testvariables\", t, func(c service.Client) {\n\t\tstate := <-c.Continue()\n\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Continue(): %v\\n\", state.Err)\n\t\t}\n\n\t\tvar1, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"a1\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable\")\n\n\t\tt.Logf(\"var1: %s\", var1.SinglelineString())\n\n\t\tif var1.Value != \"foofoofoofoofoofoo\" {\n\t\t\tt.Fatalf(\"Wrong variable value: %s\", var1.Value)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_SetVariable(t *testing.T) {\n\twithTestClient2(\"testvariables\", t, func(c service.Client) {\n\t\tstate := <-c.Continue()\n\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Continue(): %v\\n\", state.Err)\n\t\t}\n\n\t\tassertNoError(c.SetVariable(api.EvalScope{GoroutineID: -1}, \"a2\", \"8\"), t, \"SetVariable()\")\n\n\t\ta2, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"a2\", normalLoadConfig)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Could not evaluate variable: %v\", err)\n\t\t}\n\n\t\tt.Logf(\"a2: %v\", a2)\n\n\t\tn, err := strconv.Atoi(a2.Value)\n\n\t\tif err != nil && n != 8 {\n\t\t\tt.Fatalf(\"Wrong variable value: %v\", a2)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_FullStacktrace(t *testing.T) {\n\tprotest.AllowRecording(t)\n\tif runtime.GOOS == \"darwin\" && runtime.GOARCH == \"arm64\" {\n\t\tt.Skip(\"cgo doesn't work on darwin/arm64\")\n\t}\n\tif runtime.GOARCH == \"ppc64le\" && buildMode == \"pie\" {\n\t\tt.Skip(\"pie mode broken on ppc64le\")\n\t}\n\n\tlenient := false\n\tif runtime.GOOS == \"windows\" {\n\t\tlenient = true\n\t}\n\n\twithTestClient2(\"goroutinestackprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.stacktraceme\", Line: -1})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tstate := <-c.Continue()\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Continue(): %v\\n\", state.Err)\n\t\t}\n\n\t\tgs, _, err := c.ListGoroutines(0, 0)\n\t\tassertNoError(err, t, \"GoroutinesInfo()\")\n\t\tfound := make([]bool, 10)\n\t\tfor _, g := range gs {\n\t\t\tframes, err := c.Stacktrace(g.ID, 40, 0, 0, &normalLoadConfig)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"Stacktrace(%d)\", g.ID))\n\t\t\tt.Logf(\"goroutine %d\", g.ID)\n\t\t\tfor i, frame := range frames {\n\t\t\t\tt.Logf(\"\\tframe %d off=%#x bpoff=%#x pc=%#x %s:%d %s\", i, frame.FrameOffset, frame.FramePointerOffset, frame.PC, frame.File, frame.Line, frame.Function.Name())\n\t\t\t\tif frame.Function == nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif frame.Function.Name() != \"main.agoroutine\" {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor _, arg := range frame.Arguments {\n\t\t\t\t\tif arg.Name != \"i\" {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tt.Logf(\"\\tvariable i is %+v\\n\", arg)\n\t\t\t\t\targn, err := strconv.Atoi(arg.Value)\n\t\t\t\t\tif err == nil {\n\t\t\t\t\t\tfound[argn] = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor i := range found {\n\t\t\tif !found[i] {\n\t\t\t\tif lenient {\n\t\t\t\t\tlenient = false\n\t\t\t\t} else {\n\t\t\t\t\tt.Fatalf(\"Goroutine %d not found\", i)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tt.Logf(\"continue\")\n\n\t\tstate = <-c.Continue()\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Continue(): %v\\n\", state.Err)\n\t\t}\n\n\t\tframes, err := c.Stacktrace(-1, 10, 0, 0, &normalLoadConfig)\n\t\tassertNoError(err, t, \"Stacktrace\")\n\n\t\tcur := 3\n\t\tfor i, frame := range frames {\n\t\t\tt.Logf(\"\\tframe %d off=%#x bpoff=%#x pc=%#x %s:%d %s\", i, frame.FrameOffset, frame.FramePointerOffset, frame.PC, frame.File, frame.Line, frame.Function.Name())\n\t\t\tif i == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tv := frame.Var(\"n\")\n\t\t\tif v == nil {\n\t\t\t\tt.Fatalf(\"Could not find value of variable n in frame %d\", i)\n\t\t\t}\n\t\t\tvn, err := strconv.Atoi(v.Value)\n\t\t\tif err != nil || vn != cur {\n\t\t\t\tt.Fatalf(\"Expected value %d got %d (error: %v)\", cur, vn, err)\n\t\t\t}\n\t\t\tcur--\n\t\t\tif cur < 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tframesWithSkip, err := c.Stacktrace(-1, 10, len(frames)-1, 0, nil)\n\t\tassertNoError(err, t, \"Stacktrace\")\n\t\tif len(framesWithSkip) != 1 {\n\t\t\tt.Errorf(\"wrong number of frames returned with skip parameter: %d\\n\", len(framesWithSkip))\n\t\t}\n\t})\n}\n\nfunc assertErrorOrExited(s *api.DebuggerState, err error, t *testing.T, reason string) {\n\tif err != nil {\n\t\treturn\n\t}\n\tif s != nil && s.Exited {\n\t\treturn\n\t}\n\tt.Fatalf(\"%s (no error and no exited status)\", reason)\n}\n\nfunc TestIssue355(t *testing.T) {\n\t// After the target process has terminated should return an error but not crash\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"continuetestprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.sayhi\", Line: -1})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tch := c.Continue()\n\t\tstate := <-ch\n\t\ttid := state.CurrentThread.ID\n\t\tgid := state.SelectedGoroutine.ID\n\t\tassertNoError(state.Err, t, \"First Continue()\")\n\t\tch = c.Continue()\n\t\tstate = <-ch\n\t\tif !state.Exited {\n\t\t\tt.Fatalf(\"Target did not terminate after second continue\")\n\t\t}\n\n\t\tch = c.Continue()\n\t\tstate = <-ch\n\t\tassertError(state.Err, t, \"Continue()\")\n\n\t\ts, err := c.Next()\n\t\tassertErrorOrExited(s, err, t, \"Next()\")\n\t\ts, err = c.Step()\n\t\tassertErrorOrExited(s, err, t, \"Step()\")\n\t\ts, err = c.StepInstruction(false)\n\t\tassertErrorOrExited(s, err, t, \"StepInstruction()\")\n\t\ts, err = c.SwitchThread(tid)\n\t\tassertErrorOrExited(s, err, t, \"SwitchThread()\")\n\t\ts, err = c.SwitchGoroutine(gid)\n\t\tassertErrorOrExited(s, err, t, \"SwitchGoroutine()\")\n\t\ts, err = c.Halt()\n\t\tassertErrorOrExited(s, err, t, \"Halt()\")\n\t\t_, err = c.ListThreads()\n\t\tassertError(err, t, \"ListThreads()\")\n\t\t_, err = c.GetThread(tid)\n\t\tassertError(err, t, \"GetThread()\")\n\t\tassertError(c.SetVariable(api.EvalScope{GoroutineID: gid}, \"a\", \"10\"), t, \"SetVariable()\")\n\t\t_, err = c.ListLocalVariables(api.EvalScope{GoroutineID: gid}, normalLoadConfig)\n\t\tassertError(err, t, \"ListLocalVariables()\")\n\t\t_, err = c.ListFunctionArgs(api.EvalScope{GoroutineID: gid}, normalLoadConfig)\n\t\tassertError(err, t, \"ListFunctionArgs()\")\n\t\t_, err = c.ListThreadRegisters(0, false)\n\t\tassertError(err, t, \"ListThreadRegisters()\")\n\t\t_, err = c.ListScopeRegisters(api.EvalScope{GoroutineID: gid}, false)\n\t\tassertError(err, t, \"ListScopeRegisters()\")\n\t\t_, _, err = c.ListGoroutines(0, 0)\n\t\tassertError(err, t, \"ListGoroutines()\")\n\t\t_, err = c.Stacktrace(gid, 10, 0, 0, &normalLoadConfig)\n\t\tassertError(err, t, \"Stacktrace()\")\n\t\t_, _, err = c.FindLocation(api.EvalScope{GoroutineID: gid}, \"+1\", false, nil)\n\t\tassertError(err, t, \"FindLocation()\")\n\t\t_, err = c.DisassemblePC(api.EvalScope{GoroutineID: -1}, 0x40100, api.IntelFlavour)\n\t\tassertError(err, t, \"DisassemblePC()\")\n\t})\n}\n\nfunc TestDisasm(t *testing.T) {\n\tif runtime.GOARCH == \"ppc64le\" {\n\t\tt.Skip(\"skipped on ppc64le: broken\")\n\t}\n\t// Tests that disassembling by PC, range, and current PC all yield similar results\n\t// Tests that disassembly by current PC will return a disassembly containing the instruction at PC\n\t// Tests that stepping on a calculated CALL instruction will yield a disassembly that contains the\n\t// effective destination of the CALL instruction\n\twithTestClient2(\"locationsprog2\", t, func(c service.Client) {\n\t\tch := c.Continue()\n\t\tstate := <-ch\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\n\t\tlocs, _, err := c.FindLocation(api.EvalScope{GoroutineID: -1}, \"main.main\", false, nil)\n\t\tassertNoError(err, t, \"FindLocation()\")\n\t\tif len(locs) != 1 {\n\t\t\tt.Fatalf(\"wrong number of locations for main.main: %d\", len(locs))\n\t\t}\n\t\td1, err := c.DisassemblePC(api.EvalScope{GoroutineID: -1}, locs[0].PC, api.IntelFlavour)\n\t\tassertNoError(err, t, \"DisassemblePC()\")\n\t\tif len(d1) < 2 {\n\t\t\tt.Fatalf(\"wrong size of disassembly: %d\", len(d1))\n\t\t}\n\n\t\tpcstart := d1[0].Loc.PC\n\t\tpcend := d1[len(d1)-1].Loc.PC + uint64(len(d1[len(d1)-1].Bytes))\n\n\t\t// start address should be less than end address\n\t\t_, err = c.DisassembleRange(api.EvalScope{GoroutineID: -1}, pcend, pcstart, api.IntelFlavour)\n\t\tassertError(err, t, \"DisassembleRange()\")\n\n\t\td2, err := c.DisassembleRange(api.EvalScope{GoroutineID: -1}, pcstart, pcend, api.IntelFlavour)\n\t\tassertNoError(err, t, \"DisassembleRange()\")\n\n\t\tif len(d1) != len(d2) {\n\t\t\tt.Logf(\"d1: %v\", d1)\n\t\t\tt.Logf(\"d2: %v\", d2)\n\t\t\tt.Fatal(\"mismatched length between disassemble pc and disassemble range\")\n\t\t}\n\n\t\td3, err := c.DisassemblePC(api.EvalScope{GoroutineID: -1}, state.CurrentThread.PC, api.IntelFlavour)\n\t\tassertNoError(err, t, \"DisassemblePC() - second call\")\n\n\t\tif len(d1) != len(d3) {\n\t\t\tt.Logf(\"d1: %v\", d1)\n\t\t\tt.Logf(\"d3: %v\", d3)\n\t\t\tt.Fatal(\"mismatched length between the two calls of disassemble pc\")\n\t\t}\n\n\t\t// look for static call to afunction() on line 29\n\t\tfound := false\n\t\tfor i := range d3 {\n\t\t\tif d3[i].Loc.Line == 29 && (strings.HasPrefix(d3[i].Text, \"bl\") || strings.HasPrefix(d3[i].Text, \"jirl\") || strings.HasPrefix(d3[i].Text, \"call\") || strings.HasPrefix(d3[i].Text, \"CALL\")) && d3[i].DestLoc != nil && d3[i].DestLoc.Function != nil && d3[i].DestLoc.Function.Name() == \"main.afunction\" {\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatal(\"Could not find call to main.afunction on line 29\")\n\t\t}\n\n\t\thaspc := false\n\t\tfor i := range d3 {\n\t\t\tif d3[i].AtPC {\n\t\t\t\thaspc = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif !haspc {\n\t\t\tt.Logf(\"d3: %v\", d3)\n\t\t\tt.Fatal(\"PC instruction not found\")\n\t\t}\n\n\t\tif runtime.GOARCH == \"386\" && buildMode == \"pie\" {\n\t\t\t// Skip the rest of the test because on intel 386 with PIE build mode\n\t\t\t// the compiler will insert calls to __x86.get_pc_thunk which do not have DIEs and we can't resolve.\n\t\t\treturn\n\t\t}\n\n\t\tstartinstr := getCurinstr(d3)\n\t\tcount := 0\n\t\tfor {\n\t\t\tif count > 20 {\n\t\t\t\tt.Fatal(\"too many step instructions executed without finding a call instruction\")\n\t\t\t}\n\t\t\tstate, err := c.StepInstruction(false)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"StepInstruction() %d\", count))\n\n\t\t\td3, err = c.DisassemblePC(api.EvalScope{GoroutineID: -1}, state.CurrentThread.PC, api.IntelFlavour)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"StepInstruction() %d\", count))\n\n\t\t\tcurinstr := getCurinstr(d3)\n\n\t\t\tif curinstr == nil {\n\t\t\t\tt.Fatalf(\"Could not find current instruction %d\", count)\n\t\t\t}\n\n\t\t\tif curinstr.Loc.Line != startinstr.Loc.Line {\n\t\t\t\tt.Fatal(\"Calling StepInstruction() repeatedly did not find the call instruction\")\n\t\t\t}\n\n\t\t\tif strings.HasPrefix(curinstr.Text, \"call\") || strings.HasPrefix(curinstr.Text, \"CALL\") || strings.HasPrefix(curinstr.Text, \"bl\") || strings.HasPrefix(curinstr.Text, \"jirl\") {\n\t\t\t\tt.Logf(\"call: %v\", curinstr)\n\t\t\t\tif curinstr.DestLoc == nil || curinstr.DestLoc.Function == nil {\n\t\t\t\t\tt.Fatalf(\"Call instruction does not have destination: %v\", curinstr)\n\t\t\t\t}\n\t\t\t\tif curinstr.DestLoc.Function.Name() != \"main.afunction\" {\n\t\t\t\t\tt.Fatalf(\"Call instruction destination not main.afunction: %v\", curinstr)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tcount++\n\t\t}\n\t})\n}\n\nfunc TestNegativeStackDepthBug(t *testing.T) {\n\t// After the target process has terminated should return an error but not crash\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"continuetestprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.sayhi\", Line: -1})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tch := c.Continue()\n\t\tstate := <-ch\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t\t_, err = c.Stacktrace(-1, -2, 0, 0, &normalLoadConfig)\n\t\tassertError(err, t, \"Stacktrace()\")\n\t})\n}\n\nfunc TestClientServer_CondBreakpoint(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"parallel_next\", t, func(c service.Client) {\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.sayhi\", Line: 1})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tbp.Cond = \"n == 7\"\n\t\tassertNoError(c.AmendBreakpoint(bp), t, \"AmendBreakpoint() 1\")\n\t\tbp, err = c.GetBreakpoint(bp.ID)\n\t\tassertNoError(err, t, \"GetBreakpoint() 1\")\n\t\tbp.Variables = append(bp.Variables, \"n\")\n\t\tassertNoError(c.AmendBreakpoint(bp), t, \"AmendBreakpoint() 2\")\n\t\tbp, err = c.GetBreakpoint(bp.ID)\n\t\tassertNoError(err, t, \"GetBreakpoint() 2\")\n\t\tif bp.Cond == \"\" {\n\t\t\tt.Fatalf(\"No condition set on breakpoint %#v\", bp)\n\t\t}\n\t\tif len(bp.Variables) != 1 {\n\t\t\tt.Fatalf(\"Wrong number of expressions to evaluate on breakpoint %#v\", bp)\n\t\t}\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\n\t\tnvar, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"n\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable()\")\n\n\t\tif nvar.SinglelineString() != \"7\" {\n\t\t\tt.Fatalf(\"Stopped on wrong goroutine %s\\n\", nvar.Value)\n\t\t}\n\t})\n}\n\nfunc clientEvalVariable(t *testing.T, c service.Client, expr string) *api.Variable {\n\tv, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, expr, normalLoadConfig)\n\tassertNoError(err, t, fmt.Sprintf(\"EvalVariable(%s)\", expr))\n\treturn v\n}\n\nfunc TestSkipPrologue(t *testing.T) {\n\twithTestClient2(\"locationsprog2\", t, func(c service.Client) {\n\t\t<-c.Continue()\n\n\t\tafunction := findLocationHelper(t, c, \"main.afunction\", false, 1, 0)[0]\n\t\tfindLocationHelper(t, c, \"*fn1\", false, 1, afunction)\n\t\tfindLocationHelper(t, c, \"locationsprog2.go:8\", false, 1, afunction)\n\n\t\tafunction0 := clientEvalVariable(t, c, \"main.afunction\").Addr\n\n\t\tif afunction == afunction0 {\n\t\t\tt.Fatal(\"Skip prologue failed\")\n\t\t}\n\t})\n}\n\nfunc TestSkipPrologue2(t *testing.T) {\n\twithTestClient2(\"callme\", t, func(c service.Client) {\n\t\tcallme := findLocationHelper(t, c, \"main.callme\", false, 1, 0)[0]\n\t\tcallmeZ := clientEvalVariable(t, c, \"main.callme\").Addr\n\t\tfindLocationHelper(t, c, \"callme.go:5\", false, 1, callme)\n\t\tif callme == callmeZ {\n\t\t\tt.Fatal(\"Skip prologue failed\")\n\t\t}\n\n\t\tcallme2 := findLocationHelper(t, c, \"main.callme2\", false, 1, 0)[0]\n\t\tcallme2Z := clientEvalVariable(t, c, \"main.callme2\").Addr\n\t\tfindLocationHelper(t, c, \"callme.go:12\", false, 1, callme2)\n\t\tif callme2 == callme2Z {\n\t\t\tt.Fatal(\"Skip prologue failed\")\n\t\t}\n\n\t\tcallme3 := findLocationHelper(t, c, \"main.callme3\", false, 1, 0)[0]\n\t\tcallme3Z := clientEvalVariable(t, c, \"main.callme3\").Addr\n\t\tver, _ := goversion.Parse(runtime.Version())\n\n\t\tif (ver.Major < 0 || ver.AfterOrEqual(goversion.GoVer18Beta)) && runtime.GOARCH != \"386\" {\n\t\t\tfindLocationHelper(t, c, \"callme.go:19\", false, 1, callme3)\n\t\t} else {\n\t\t\t// callme3 does not have local variables therefore the first line of the\n\t\t\t// function is immediately after the prologue\n\t\t\t// This is only true before go1.8 or on Intel386 where frame pointer chaining\n\t\t\t// introduced a bit of prologue even for functions without local variables\n\t\t\tfindLocationHelper(t, c, \"callme.go:19\", false, 1, callme3Z)\n\t\t}\n\t\tif callme3 == callme3Z {\n\t\t\tt.Fatal(\"Skip prologue failed\")\n\t\t}\n\t})\n}\n\nfunc TestIssue419(t *testing.T) {\n\t// Calling service/rpc.(*Client).Halt could cause a crash because both Halt and Continue simultaneously\n\t// try to read 'runtime.g' and debug/dwarf.Data.Type is not thread safe\n\tfinish := make(chan struct{})\n\twithTestClient2(\"issue419\", t, func(c service.Client) {\n\t\tgo func() {\n\t\t\tdefer close(finish)\n\t\t\trand.Seed(time.Now().Unix())\n\t\t\td := time.Duration(rand.Intn(4) + 1)\n\t\t\ttime.Sleep(d * time.Second)\n\t\t\tt.Logf(\"halt\")\n\t\t\t_, err := c.Halt()\n\t\t\tassertNoError(err, t, \"RequestManualStop()\")\n\t\t}()\n\t\tstatech := c.Continue()\n\t\tstate := <-statech\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t\tt.Logf(\"done\")\n\t\t<-finish\n\t})\n}\n\nfunc TestTypesCommand(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testvariables2\", t, func(c service.Client) {\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t\ttypes, err := c.ListTypes(\"\")\n\t\tassertNoError(err, t, \"ListTypes()\")\n\n\t\tif !slices.Contains(types, \"main.astruct\") {\n\t\t\tt.Fatal(\"Type astruct not found in ListTypes output\")\n\t\t}\n\n\t\ttypes, err = c.ListTypes(\"^main.astruct$\")\n\t\tassertNoError(err, t, \"ListTypes(\\\"main.astruct\\\")\")\n\t\tif len(types) != 1 {\n\t\t\tt.Fatalf(\"ListTypes(\\\"^main.astruct$\\\") did not filter properly, expected 1 got %d: %v\", len(types), types)\n\t\t}\n\t})\n}\n\nfunc TestIssue406(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"issue406\", t, func(c service.Client) {\n\t\tlocs, _, err := c.FindLocation(api.EvalScope{GoroutineID: -1}, \"issue406.go:146\", false, nil)\n\t\tassertNoError(err, t, \"FindLocation()\")\n\t\t_, err = c.CreateBreakpoint(&api.Breakpoint{Addr: locs[0].PC})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tch := c.Continue()\n\t\tstate := <-ch\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t\tv, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"cfgtree\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable()\")\n\t\tvs := v.StringWithOptions(\"\", \"\", api.PrettyNewlines)\n\t\tt.Logf(\"cfgtree formats to: %s\\n\", vs)\n\t})\n}\n\nfunc TestEvalExprName(t *testing.T) {\n\twithTestClient2(\"testvariables2\", t, func(c service.Client) {\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\n\t\tvar1, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"i1+1\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable\")\n\n\t\tconst name = \"i1+1\"\n\n\t\tt.Logf(\"i1+1 → %#v\", var1)\n\n\t\tif var1.Name != name {\n\t\t\tt.Fatalf(\"Wrong variable name %q, expected %q\", var1.Name, name)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_Issue528(t *testing.T) {\n\t// FindLocation with Receiver.MethodName syntax does not work\n\t// on remote package names due to a bug in debug/gosym that\n\t// Was fixed in go 1.7 // Commit that fixes the issue in go:\n\t// f744717d1924340b8f5e5a385e99078693ad9097\n\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major > 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 7, Rev: -1}) {\n\t\tt.Log(\"Test skipped\")\n\t\treturn\n\t}\n\n\twithTestClient2(\"issue528\", t, func(c service.Client) {\n\t\tfindLocationHelper(t, c, \"State.Close\", false, 1, 0)\n\t})\n}\n\nfunc TestClientServer_FpRegisters(t *testing.T) {\n\tif runtime.GOARCH != \"amd64\" {\n\t\tt.Skip(\"test is valid only on AMD64\")\n\t}\n\tregtests := []struct{ name, value string }{\n\t\t// x87\n\t\t{\"ST(0)\", \"0x3fffe666660000000000\"},\n\t\t{\"ST(1)\", \"0x3fffd9999a0000000000\"},\n\t\t{\"ST(2)\", \"0x3fffcccccd0000000000\"},\n\t\t{\"ST(3)\", \"0x3fffc000000000000000\"},\n\t\t{\"ST(4)\", \"0x3fffb333333333333000\"},\n\t\t{\"ST(5)\", \"0x3fffa666666666666800\"},\n\t\t{\"ST(6)\", \"0x3fff9999999999999800\"},\n\t\t{\"ST(7)\", \"0x3fff8cccccccccccd000\"},\n\n\t\t// SSE\n\t\t{\"XMM0\", \"0x3ff33333333333333ff199999999999a\tv2_int={ 3ff199999999999a 3ff3333333333333 }\tv4_int={ 9999999a 3ff19999 33333333 3ff33333 }\tv8_int={ 999a 9999 9999 3ff1 3333 3333 3333 3ff3 }\tv16_int={ 9a 99 99 99 99 99 f1 3f 33 33 33 33 33 33 f3 3f }\"},\n\t\t{\"XMM1\", \"0x3ff66666666666663ff4cccccccccccd\"},\n\t\t{\"XMM2\", \"0x3fe666663fd9999a3fcccccd3fc00000\"},\n\t\t{\"XMM3\", \"0x3ff199999999999a3ff3333333333333\"},\n\t\t{\"XMM4\", \"0x3ff4cccccccccccd3ff6666666666666\"},\n\t\t{\"XMM5\", \"0x3fcccccd3fc000003fe666663fd9999a\"},\n\t\t{\"XMM6\", \"0x4004cccccccccccc4003333333333334\"},\n\t\t{\"XMM7\", \"0x40026666666666664002666666666666\"},\n\t\t{\"XMM8\", \"0x4059999a404ccccd4059999a404ccccd\"},\n\n\t\t// AVX 2\n\t\t{\"XMM11\", \"0x3ff66666666666663ff4cccccccccccd\"},\n\t\t{\"XMM11\", \"…[YMM11h] 0x3ff66666666666663ff4cccccccccccd\"},\n\n\t\t// AVX 512\n\t\t{\"XMM12\", \"0x3ff66666666666663ff4cccccccccccd\"},\n\t\t{\"XMM12\", \"…[YMM12h] 0x3ff66666666666663ff4cccccccccccd\"},\n\t\t{\"XMM12\", \"…[ZMM12hl] 0x3ff66666666666663ff4cccccccccccd\"},\n\t\t{\"XMM12\", \"…[ZMM12hh] 0x3ff66666666666663ff4cccccccccccd\"},\n\t}\n\tprotest.AllowRecording(t)\n\twithTestClient2Extended(\"fputest/\", t, 0, [3]string{}, nil, func(c service.Client, fixture protest.Fixture) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{File: filepath.Join(fixture.BuildDir, \"fputest.go\"), Line: 25})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\n\t\tstate := <-c.Continue()\n\t\tt.Logf(\"state after continue: %#v\", state)\n\n\t\tscope := api.EvalScope{GoroutineID: -1}\n\n\t\tboolvar := func(name string) bool {\n\t\t\tv, err := c.EvalVariable(scope, name, normalLoadConfig)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"could not read %s variable\", name)\n\t\t\t}\n\t\t\tt.Logf(\"%s variable: %#v\", name, v)\n\t\t\treturn v.Value != \"false\"\n\t\t}\n\n\t\tavx2 := boolvar(\"avx2\")\n\t\tavx512 := boolvar(\"avx512\")\n\n\t\tif runtime.GOOS == \"windows\" {\n\t\t\t// not supported\n\t\t\tavx2 = false\n\t\t\tavx512 = false\n\t\t}\n\n\t\tstate = <-c.Continue()\n\t\tt.Logf(\"state after continue: %#v\", state)\n\n\t\tregs, err := c.ListThreadRegisters(0, true)\n\t\tassertNoError(err, t, \"ListThreadRegisters()\")\n\n\t\tfor _, regtest := range regtests {\n\t\t\tif regtest.name == \"XMM11\" && !avx2 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif regtest.name == \"XMM12\" && (!avx512 || testBackend == \"rr\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfound := false\n\t\t\tfor _, reg := range regs {\n\t\t\t\tif reg.Name == regtest.name {\n\t\t\t\t\tfound = true\n\t\t\t\t\tif strings.HasPrefix(regtest.value, \"…\") {\n\t\t\t\t\t\tif !strings.Contains(reg.Value, regtest.value[len(\"…\"):]) {\n\t\t\t\t\t\t\tt.Fatalf(\"register %s expected to contain %q got %q\", reg.Name, regtest.value, reg.Value)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif !strings.HasPrefix(reg.Value, regtest.value) {\n\t\t\t\t\t\t\tt.Fatalf(\"register %s expected %q got %q\", reg.Name, regtest.value, reg.Value)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !found {\n\t\t\t\tt.Fatalf(\"register %s not found: %v\", regtest.name, regs)\n\t\t\t}\n\t\t}\n\n\t\t// Test register expressions\n\n\t\tfor _, tc := range []struct{ expr, tgt string }{\n\t\t\t{\"XMM1[:32]\", `\"cdccccccccccf43f666666666666f63f\"`},\n\t\t\t{\"_XMM1[:32]\", `\"cdccccccccccf43f666666666666f63f\"`},\n\t\t\t{\"__XMM1[:32]\", `\"cdccccccccccf43f666666666666f63f\"`},\n\t\t\t{\"XMM1.int8[0]\", `-51`},\n\t\t\t{\"XMM1.uint16[0]\", `52429`},\n\t\t\t{\"XMM1.float32[0]\", `-107374184`},\n\t\t\t{\"XMM1.float64[0]\", `1.3`},\n\t\t\t{\"RAX.uint8[0]\", \"42\"},\n\t\t} {\n\t\t\tv, err := c.EvalVariable(scope, tc.expr, normalLoadConfig)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"could not evalue expression %s: %v\", tc.expr, err)\n\t\t\t}\n\t\t\tout := v.SinglelineString()\n\n\t\t\tif out != tc.tgt {\n\t\t\t\tt.Fatalf(\"for %q expected %q got %q\\n\", tc.expr, tc.tgt, out)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestClientServer_RestartBreakpointPosition(t *testing.T) {\n\tprotest.AllowRecording(t)\n\tif buildMode == \"pie\" || (runtime.GOOS == \"darwin\" && runtime.GOARCH == \"arm64\") {\n\t\tt.Skip(\"not meaningful in PIE mode\")\n\t}\n\twithTestClient2(\"locationsprog2\", t, func(c service.Client) {\n\t\tbpBefore, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.afunction\", Line: -1, Tracepoint: true, Name: \"this\"})\n\t\taddrBefore := bpBefore.Addr\n\t\tt.Logf(\"%x\\n\", bpBefore.Addr)\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\tstateCh := c.Continue()\n\t\tfor range stateCh {\n\t\t}\n\t\t_, err = c.Halt()\n\t\tassertNoError(err, t, \"Halt\")\n\t\t_, err = c.Restart(false)\n\t\tassertNoError(err, t, \"Restart\")\n\t\tbps, err := c.ListBreakpoints(false)\n\t\tassertNoError(err, t, \"ListBreakpoints\")\n\t\tfor _, bp := range bps {\n\t\t\tif bp.Name == bpBefore.Name {\n\t\t\t\tif bp.Addr != addrBefore {\n\t\t\t\t\tt.Fatalf(\"Address changed after restart: %x %x\", bp.Addr, addrBefore)\n\t\t\t\t}\n\t\t\t\tt.Logf(\"%x %x\\n\", bp.Addr, addrBefore)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestClientServer_SelectedGoroutineLoc(t *testing.T) {\n\t// CurrentLocation of SelectedGoroutine should reflect what's happening on\n\t// the thread running the goroutine, not the position the goroutine was in\n\t// the last time it was parked.\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: -11})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\n\t\ts := <-c.Continue()\n\t\tassertNoError(s.Err, t, \"Continue\")\n\n\t\tgloc := s.SelectedGoroutine.CurrentLoc\n\n\t\tif gloc.PC != s.CurrentThread.PC {\n\t\t\tt.Errorf(\"mismatched PC %#x %#x\", gloc.PC, s.CurrentThread.PC)\n\t\t}\n\n\t\tif gloc.File != s.CurrentThread.File || gloc.Line != s.CurrentThread.Line {\n\t\t\tt.Errorf(\"mismatched file:lineno: %s:%d %s:%d\", gloc.File, gloc.Line, s.CurrentThread.File, s.CurrentThread.Line)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_ReverseContinue(t *testing.T) {\n\tprotest.AllowRecording(t)\n\tif testBackend != \"rr\" {\n\t\tt.Skip(\"backend is not rr\")\n\t}\n\twithTestClient2(\"continuetestprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: -1})\n\t\tassertNoError(err, t, \"CreateBreakpoint(main.main)\")\n\t\t_, err = c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.sayhi\", Line: -1})\n\t\tassertNoError(err, t, \"CreateBreakpoint(main.sayhi)\")\n\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"first continue\")\n\t\tmainPC := state.CurrentThread.PC\n\t\tt.Logf(\"after first continue %#x\", mainPC)\n\n\t\tstate = <-c.Continue()\n\t\tassertNoError(state.Err, t, \"second continue\")\n\t\tsayhiPC := state.CurrentThread.PC\n\t\tt.Logf(\"after second continue %#x\", sayhiPC)\n\n\t\tif mainPC == sayhiPC {\n\t\t\tt.Fatalf(\"expected different PC after second PC (%#x)\", mainPC)\n\t\t}\n\n\t\tstate = <-c.Rewind()\n\t\tassertNoError(state.Err, t, \"rewind\")\n\n\t\tif mainPC != state.CurrentThread.PC {\n\t\t\tt.Fatalf(\"Expected rewind to go back to the first breakpoint: %#x\", state.CurrentThread.PC)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_collectBreakpointInfoOnNext(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{\n\t\t\tAddr:       findLocationHelper(t, c, \"testnextprog.go:23\", false, 1, 0)[0],\n\t\t\tVariables:  []string{\"j\"},\n\t\t\tLoadLocals: &normalLoadConfig})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\t_, err = c.CreateBreakpoint(&api.Breakpoint{\n\t\t\tAddr:       findLocationHelper(t, c, \"testnextprog.go:24\", false, 1, 0)[0],\n\t\t\tVariables:  []string{\"j\"},\n\t\t\tLoadLocals: &normalLoadConfig})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\n\t\tstateBefore := <-c.Continue()\n\t\tassertNoError(stateBefore.Err, t, \"Continue()\")\n\t\tif stateBefore.CurrentThread.Line != 23 {\n\t\t\tt.Fatalf(\"wrong line number %s:%d, expected %d\", stateBefore.CurrentThread.File, stateBefore.CurrentThread.Line, 23)\n\t\t}\n\t\tif bi := stateBefore.CurrentThread.BreakpointInfo; bi == nil || len(bi.Variables) != 1 {\n\t\t\tt.Fatalf(\"bad breakpoint info %v\", bi)\n\t\t}\n\n\t\tstateAfter, err := c.Next()\n\t\tassertNoError(err, t, \"Next()\")\n\t\tif stateAfter.CurrentThread.Line != 24 {\n\t\t\tt.Fatalf(\"wrong line number %s:%d, expected %d\", stateAfter.CurrentThread.File, stateAfter.CurrentThread.Line, 24)\n\t\t}\n\t\tif bi := stateAfter.CurrentThread.BreakpointInfo; bi == nil || len(bi.Variables) != 1 {\n\t\t\tt.Fatalf(\"bad breakpoint info %v\", bi)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_collectBreakpointInfoError(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{\n\t\t\tAddr:       findLocationHelper(t, c, \"testnextprog.go:23\", false, 1, 0)[0],\n\t\t\tVariables:  []string{\"nonexistentvariable\", \"j\"},\n\t\t\tLoadLocals: &normalLoadConfig})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t})\n}\n\nfunc TestClientServerConsistentExit(t *testing.T) {\n\t// This test is useful because it ensures that Next and Continue operations both\n\t// exit with the same exit status and details when the target application terminates.\n\t// Other program execution API calls should also behave in the same way.\n\t// An error should be present in state.Err.\n\twithTestClient2(\"pr1055\", t, func(c service.Client) {\n\t\tfp := testProgPath(t, \"pr1055\")\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{File: fp, Line: 12})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tstate := <-c.Continue()\n\t\tif state.Err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v, state: %#v\", state.Err, state)\n\t\t}\n\t\tstate, err = c.Next()\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tif !state.Exited {\n\t\t\tt.Fatal(\"Process state is not exited\")\n\t\t}\n\t\tif state.ExitStatus != 2 {\n\t\t\tt.Fatalf(\"Process exit status is not 2, got: %v\", state.ExitStatus)\n\t\t}\n\n\t\t// Ensure future commands also return the correct exit status.\n\t\t// Previously there was a bug where the command which prompted the\n\t\t// process to exit (continue, next, etc...) would return the current\n\t\t// exit status but subsequent commands would return an incorrect exit\n\t\t// status of 0. To test this we simply repeat the 'next' command and\n\t\t// ensure we get the correct response again.\n\t\tstate, err = c.Next()\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\t\tif !state.Exited {\n\t\t\tt.Fatal(\"Second process state is not exited\")\n\t\t}\n\t\tif state.ExitStatus != 2 {\n\t\t\tt.Fatalf(\"Second process exit status is not 2, got: %v\", state.ExitStatus)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_StepOutReturn(t *testing.T) {\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.Major >= 0 && !ver.AfterOrEqual(goversion.GoVersion{Major: 1, Minor: 10, Rev: -1}) {\n\t\tt.Skip(\"return variables aren't marked on 1.9 or earlier\")\n\t}\n\twithTestClient2(\"stepoutret\", t, func(c service.Client) {\n\t\tc.SetReturnValuesLoadConfig(&normalLoadConfig)\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.stepout\", Line: -1})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tstateBefore := <-c.Continue()\n\t\tassertNoError(stateBefore.Err, t, \"Continue()\")\n\t\tstateAfter, err := c.StepOut()\n\t\tassertNoError(err, t, \"StepOut\")\n\t\tret := stateAfter.CurrentThread.ReturnValues\n\n\t\tif len(ret) != 2 {\n\t\t\tt.Fatalf(\"wrong number of return values %v\", ret)\n\t\t}\n\n\t\tstridx := 0\n\t\tnumidx := 1\n\n\t\tif ret[stridx].Name != \"str\" {\n\t\t\tt.Fatalf(\"(str) bad return value name %s\", ret[stridx].Name)\n\t\t}\n\t\tif ret[stridx].Kind != reflect.String {\n\t\t\tt.Fatalf(\"(str) bad return value kind %v\", ret[stridx].Kind)\n\t\t}\n\t\tif ret[stridx].Value != \"return 47\" {\n\t\t\tt.Fatalf(\"(str) bad return value %q\", ret[stridx].Value)\n\t\t}\n\n\t\tif ret[numidx].Name != \"num\" {\n\t\t\tt.Fatalf(\"(num) bad return value name %s\", ret[numidx].Name)\n\t\t}\n\t\tif ret[numidx].Kind != reflect.Int {\n\t\t\tt.Fatalf(\"(num) bad return value kind %v\", ret[numidx].Kind)\n\t\t}\n\t\tif ret[numidx].Value != \"48\" {\n\t\t\tt.Fatalf(\"(num) bad return value %s\", ret[numidx].Value)\n\t\t}\n\t})\n}\n\nfunc TestAcceptMulticlient(t *testing.T) {\n\tif testBackend == \"rr\" {\n\t\tt.Skip(\"recording not allowed for TestAcceptMulticlient\")\n\t}\n\tlistener, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tif err != nil {\n\t\tt.Fatalf(\"couldn't start listener: %s\\n\", err)\n\t}\n\tserverDone := make(chan struct{})\n\tgo func() {\n\t\tdefer close(serverDone)\n\t\tdefer listener.Close()\n\t\tdisconnectChan := make(chan struct{})\n\t\tserver := rpccommon.NewServer(&service.Config{\n\t\t\tListener:       listener,\n\t\t\tProcessArgs:    []string{protest.BuildFixture(t, \"testvariables2\", 0).Path},\n\t\t\tAcceptMulti:    true,\n\t\t\tDisconnectChan: disconnectChan,\n\t\t\tDebugger: debugger.Config{\n\t\t\t\tBackend:     testBackend,\n\t\t\t\tExecuteKind: debugger.ExecutingGeneratedTest,\n\t\t\t},\n\t\t})\n\t\tif err := server.Run(); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\t<-disconnectChan\n\t\tserver.Stop()\n\t}()\n\tclient1 := rpc2.NewClient(listener.Addr().String())\n\tclient1.Disconnect(false)\n\n\tclient2 := rpc2.NewClient(listener.Addr().String())\n\tstate := <-client2.Continue()\n\tif state.CurrentThread.Function.Name() != \"main.main\" {\n\t\tt.Fatalf(\"bad state after continue: %v\\n\", state)\n\t}\n\tclient2.Detach(true)\n\t<-serverDone\n}\n\nfunc TestForceStopWhileContinue(t *testing.T) {\n\tlistener, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tif err != nil {\n\t\tt.Fatalf(\"couldn't start listener: %s\\n\", err)\n\t}\n\tserverStopped := make(chan struct{})\n\tdisconnectChan := make(chan struct{})\n\tgo func() {\n\t\tdefer close(serverStopped)\n\t\tdefer listener.Close()\n\t\tserver := rpccommon.NewServer(&service.Config{\n\t\t\tListener:       listener,\n\t\t\tProcessArgs:    []string{protest.BuildFixture(t, \"http_server\", protest.AllNonOptimized).Path},\n\t\t\tAcceptMulti:    true,\n\t\t\tDisconnectChan: disconnectChan,\n\t\t\tDebugger: debugger.Config{\n\t\t\t\tBackend: \"default\",\n\t\t\t},\n\t\t})\n\t\tif err := server.Run(); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t\t<-disconnectChan\n\t\tserver.Stop()\n\t}()\n\n\tclient := rpc2.NewClient(listener.Addr().String())\n\tclient.Disconnect(true /*continue*/)\n\ttime.Sleep(10 * time.Millisecond) // give server time to start running\n\tclose(disconnectChan)             // stop the server\n\t<-serverStopped                   // Stop() didn't block on detach because we halted first\n}\n\nfunc TestClientServerFunctionCall(t *testing.T) {\n\tif buildMode == \"pie\" && runtime.GOARCH == \"ppc64le\" {\n\t\tt.Skip(\"Debug function call Test broken in PIE mode\")\n\t}\n\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\twithTestClient2(\"fncall\", t, func(c service.Client) {\n\t\tc.SetReturnValuesLoadConfig(&normalLoadConfig)\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t\tbeforeCallFn := state.CurrentThread.Function.Name()\n\t\tstate, err := c.Call(-1, \"call1(one, two)\", false)\n\t\tassertNoError(err, t, \"Call()\")\n\t\tt.Logf(\"returned to %q\", state.CurrentThread.Function.Name())\n\t\tif state.CurrentThread.Function.Name() != beforeCallFn {\n\t\t\tt.Fatalf(\"did not return to the calling function %q %q\", beforeCallFn, state.CurrentThread.Function.Name())\n\t\t}\n\t\tif state.CurrentThread.ReturnValues == nil {\n\t\t\tt.Fatal(\"no return values on return from call\")\n\t\t}\n\t\tt.Logf(\"Return values %v\", state.CurrentThread.ReturnValues)\n\t\tif len(state.CurrentThread.ReturnValues) != 1 {\n\t\t\tt.Fatal(\"not enough return values\")\n\t\t}\n\t\tif state.CurrentThread.ReturnValues[0].Value != \"3\" {\n\t\t\tt.Fatalf(\"wrong return value %s\", state.CurrentThread.ReturnValues[0].Value)\n\t\t}\n\t\tstate = <-c.Continue()\n\t\tif !state.Exited {\n\t\t\tt.Fatalf(\"expected process to exit after call %v\", state.CurrentThread)\n\t\t}\n\t})\n}\n\nfunc TestClientServerFunctionCallPanic(t *testing.T) {\n\tif buildMode == \"pie\" && runtime.GOARCH == \"ppc64le\" {\n\t\tt.Skip(\"Debug function call Test broken in PIE mode\")\n\t}\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\twithTestClient2(\"fncall\", t, func(c service.Client) {\n\t\tc.SetReturnValuesLoadConfig(&normalLoadConfig)\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t\tstate, err := c.Call(-1, \"callpanic()\", false)\n\t\tassertNoError(err, t, \"Call()\")\n\t\tt.Logf(\"at: %s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\t\tif state.CurrentThread.ReturnValues == nil {\n\t\t\tt.Fatal(\"no return values on return from call\")\n\t\t}\n\t\tt.Logf(\"Return values %v\", state.CurrentThread.ReturnValues)\n\t\tif len(state.CurrentThread.ReturnValues) != 1 {\n\t\t\tt.Fatal(\"not enough return values\")\n\t\t}\n\t\tif state.CurrentThread.ReturnValues[0].Name != \"~panic\" {\n\t\t\tt.Fatal(\"not a panic\")\n\t\t}\n\t\tif state.CurrentThread.ReturnValues[0].Children[0].Value != \"callpanic panicked\" {\n\t\t\tt.Fatalf(\"wrong panic value %s\", state.CurrentThread.ReturnValues[0].Children[0].Value)\n\t\t}\n\t})\n}\n\nfunc TestClientServerFunctionCallStacktrace(t *testing.T) {\n\tif goversion.VersionAfterOrEqual(runtime.Version(), 1, 15) {\n\t\tt.Skip(\"Go 1.15 executes function calls in a different goroutine so the stack trace will not contain main.main or runtime.main\")\n\t}\n\tprotest.MustSupportFunctionCalls(t, testBackend)\n\twithTestClient2(\"fncall\", t, func(c service.Client) {\n\t\tc.SetReturnValuesLoadConfig(&api.LoadConfig{FollowPointers: false, MaxStringLen: 2048})\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t\tstate, err := c.Call(-1, \"callstacktrace()\", false)\n\t\tassertNoError(err, t, \"Call()\")\n\t\tt.Logf(\"at: %s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\t\tif state.CurrentThread.ReturnValues == nil {\n\t\t\tt.Fatal(\"no return values on return from call\")\n\t\t}\n\t\tif len(state.CurrentThread.ReturnValues) != 1 || state.CurrentThread.ReturnValues[0].Kind != reflect.String {\n\t\t\tt.Fatal(\"not enough return values\")\n\t\t}\n\t\tst := state.CurrentThread.ReturnValues[0].Value\n\t\tt.Logf(\"Returned stacktrace:\\n%s\", st)\n\n\t\tif !strings.Contains(st, \"main.callstacktrace\") || !strings.Contains(st, \"main.main\") || !strings.Contains(st, \"runtime.main\") {\n\t\t\tt.Fatal(\"bad stacktrace returned\")\n\t\t}\n\t})\n}\n\nfunc TestAncestors(t *testing.T) {\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 11) {\n\t\tt.Skip(\"not supported on Go <= 1.10\")\n\t}\n\tt.Setenv(\"GODEBUG\", \"tracebackancestors=100\")\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.testgoroutine\", Line: -1})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t\tancestors, err := c.Ancestors(-1, 1000, 1000)\n\t\tassertNoError(err, t, \"Ancestors\")\n\t\tt.Logf(\"ancestors: %#v\\n\", ancestors)\n\t\tif len(ancestors) != 1 {\n\t\t\tt.Fatalf(\"expected only one ancestor got %d\", len(ancestors))\n\t\t}\n\n\t\tmainFound := false\n\t\tfor _, ancestor := range ancestors {\n\t\t\tfor _, frame := range ancestor.Stack {\n\t\t\t\tif frame.Function.Name() == \"main.main\" {\n\t\t\t\t\tmainFound = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif !mainFound {\n\t\t\tt.Fatal(\"function main.main not found in any ancestor\")\n\t\t}\n\t})\n}\n\ntype brokenRPCClient struct {\n\tclient *rpc.Client\n}\n\nfunc (c *brokenRPCClient) Detach(kill bool) error {\n\tdefer c.client.Close()\n\tout := new(rpc2.DetachOut)\n\treturn c.call(\"Detach\", rpc2.DetachIn{Kill: kill}, out)\n}\n\nfunc (c *brokenRPCClient) call(method string, args, reply any) error {\n\treturn c.client.Call(\"RPCServer.\"+method, args, reply)\n}\n\nfunc TestUnknownMethodCall(t *testing.T) {\n\tclientConn, _ := startServer(\"continuetestprog\", 0, t, [3]string{}, nil)\n\tclient := &brokenRPCClient{jsonrpc.NewClient(clientConn)}\n\tclient.call(\"SetApiVersion\", api.SetAPIVersionIn{APIVersion: 2}, &api.SetAPIVersionOut{})\n\tdefer client.Detach(true)\n\tvar out int\n\terr := client.call(\"NonexistentRPCCall\", nil, &out)\n\tassertError(err, t, \"call()\")\n\tif !strings.HasPrefix(err.Error(), \"unknown method: \") {\n\t\tt.Errorf(\"wrong error message: %v\", err)\n\t}\n}\n\nfunc TestIssue1703(t *testing.T) {\n\t// Calling Disassemble when there is no current goroutine should work.\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\tlocs, _, err := c.FindLocation(api.EvalScope{GoroutineID: -1}, \"main.main\", true, nil)\n\t\tassertNoError(err, t, \"FindLocation\")\n\t\tt.Logf(\"FindLocation: %#v\", locs)\n\t\ttext, err := c.DisassemblePC(api.EvalScope{GoroutineID: -1}, locs[0].PC, api.IntelFlavour)\n\t\tassertNoError(err, t, \"DisassemblePC\")\n\t\tt.Logf(\"text: %#v\\n\", text)\n\t})\n}\n\nfunc TestRerecord(t *testing.T) {\n\tprotest.AllowRecording(t)\n\tif testBackend != \"rr\" {\n\t\tt.Skip(\"only valid for recorded targets\")\n\t}\n\twithTestClient2(\"testrerecord\", t, func(c service.Client) {\n\t\tfp := testProgPath(t, \"testrerecord\")\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{File: fp, Line: 10})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\n\t\tgett := func() int {\n\t\t\tstate := <-c.Continue()\n\t\t\tif state.Err != nil {\n\t\t\t\tt.Fatalf(\"Unexpected error: %v, state: %#v\", state.Err, state)\n\t\t\t}\n\n\t\t\tvart, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"t\", normalLoadConfig)\n\t\t\tassertNoError(err, t, \"EvalVariable\")\n\t\t\tif vart.Unreadable != \"\" {\n\t\t\t\tt.Fatalf(\"Could not read variable 't': %s\\n\", vart.Unreadable)\n\t\t\t}\n\n\t\t\tt.Logf(\"Value of t is %s\\n\", vart.Value)\n\n\t\t\tvartval, err := strconv.Atoi(vart.Value)\n\t\t\tassertNoError(err, t, \"Parsing value of variable t\")\n\t\t\treturn vartval\n\t\t}\n\n\t\tt0 := gett()\n\n\t\t_, err = c.RestartFrom(false, \"\", false, nil, [3]string{}, false)\n\t\tassertNoError(err, t, \"First restart\")\n\t\tt1 := gett()\n\n\t\tif t0 != t1 {\n\t\t\tt.Fatalf(\"Expected same value for t after restarting (without rerecording) %d %d\", t0, t1)\n\t\t}\n\n\t\ttime.Sleep(2 * time.Second) // make sure that we're not running inside the same second\n\n\t\t_, err = c.RestartFrom(true, \"\", false, nil, [3]string{}, false)\n\t\tassertNoError(err, t, \"Second restart\")\n\t\tt2 := gett()\n\n\t\tif t0 == t2 {\n\t\t\tt.Fatalf(\"Expected new value for t after restarting (with rerecording) %d %d\", t0, t2)\n\t\t}\n\t})\n}\n\nfunc TestIssue1787(t *testing.T) {\n\t// Calling FunctionReturnLocations without a selected goroutine should\n\t// work.\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\tif c, _ := c.(*rpc2.RPCClient); c != nil {\n\t\t\tc.FunctionReturnLocations(\"main.main\")\n\t\t}\n\t})\n}\n\nfunc TestDoubleCreateBreakpoint(t *testing.T) {\n\twithTestClient2(\"testnextprog\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 1, Name: \"firstbreakpoint\", Tracepoint: true})\n\t\tassertNoError(err, t, \"CreateBreakpoint 1\")\n\n\t\tbps, err := c.ListBreakpoints(false)\n\t\tassertNoError(err, t, \"ListBreakpoints 1\")\n\n\t\tt.Logf(\"breakpoints before second call:\")\n\t\tfor _, bp := range bps {\n\t\t\tt.Logf(\"\\t%v\", bp)\n\t\t}\n\n\t\tnumBreakpoints := len(bps)\n\n\t\t_, err = c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 1, Name: \"secondbreakpoint\", Tracepoint: true})\n\t\tassertError(err, t, \"CreateBreakpoint 2\") // breakpoint exists\n\n\t\tbps, err = c.ListBreakpoints(false)\n\t\tassertNoError(err, t, \"ListBreakpoints 2\")\n\n\t\tt.Logf(\"breakpoints after second call:\")\n\t\tfor _, bp := range bps {\n\t\t\tt.Logf(\"\\t%v\", bp)\n\t\t}\n\n\t\tif len(bps) != numBreakpoints {\n\t\t\tt.Errorf(\"wrong number of breakpoints, got %d expected %d\", len(bps), numBreakpoints)\n\t\t}\n\t})\n}\n\nfunc TestStopRecording(t *testing.T) {\n\tprotest.AllowRecording(t)\n\tif testBackend != \"rr\" {\n\t\tt.Skip(\"only for rr backend\")\n\t}\n\twithTestClient2(\"sleep\", t, func(c service.Client) {\n\t\ttime.Sleep(time.Second)\n\t\tc.StopRecording()\n\t\t_, err := c.GetState()\n\t\tassertNoError(err, t, \"GetState()\")\n\n\t\t// try rerecording\n\t\tgo func() {\n\t\t\tc.RestartFrom(true, \"\", false, nil, [3]string{}, false)\n\t\t}()\n\n\t\ttime.Sleep(time.Second) // hopefully the re-recording started...\n\t\tc.StopRecording()\n\t\t_, err = c.GetState()\n\t\tassertNoError(err, t, \"GetState()\")\n\t})\n}\n\nfunc TestClearLogicalBreakpoint(t *testing.T) {\n\t// Clearing a logical breakpoint should clear all associated physical\n\t// breakpoints.\n\t// Issue #1955.\n\twithTestClient2Extended(\"testinline\", t, protest.EnableInlining, [3]string{}, nil, func(c service.Client, fixture protest.Fixture) {\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.inlineThis\"})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tt.Logf(\"breakpoint set at %#v\", bp.Addrs)\n\t\tif len(bp.Addrs) < 2 {\n\t\t\tt.Fatal(\"Wrong number of addresses for main.inlineThis breakpoint\")\n\t\t}\n\t\t_, err = c.ClearBreakpoint(bp.ID)\n\t\tassertNoError(err, t, \"ClearBreakpoint()\")\n\t\tbps, err := c.ListBreakpoints(false)\n\t\tassertNoError(err, t, \"ListBreakpoints()\")\n\t\tfor _, curbp := range bps {\n\t\t\tif curbp.ID == bp.ID {\n\t\t\t\tt.Errorf(\"logical breakpoint still exists: %#v\", curbp)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestRedirects(t *testing.T) {\n\tconst (\n\t\tinfile  = \"redirect-input.txt\"\n\t\toutfile = \"redirect-output.txt\"\n\t)\n\tprotest.AllowRecording(t)\n\twithTestClient2Extended(\"redirect\", t, 0, [3]string{infile, outfile, \"\"}, nil, func(c service.Client, fixture protest.Fixture) {\n\t\toutpath := filepath.Join(fixture.BuildDir, outfile)\n\t\t<-c.Continue()\n\t\tbuf, err := os.ReadFile(outpath)\n\t\tassertNoError(err, t, \"Reading output file\")\n\t\tt.Logf(\"output %q\", buf)\n\t\tif !strings.HasPrefix(string(buf), \"Redirect test\") {\n\t\t\tt.Fatalf(\"Wrong output %q\", string(buf))\n\t\t}\n\t\tos.Remove(outpath)\n\t\tif testBackend != \"rr\" {\n\t\t\t_, err = c.Restart(false)\n\t\t\tassertNoError(err, t, \"Restart\")\n\t\t\t<-c.Continue()\n\t\t\tbuf2, err := os.ReadFile(outpath)\n\t\t\tt.Logf(\"output %q\", buf2)\n\t\t\tassertNoError(err, t, \"Reading output file (second time)\")\n\t\t\tif !strings.HasPrefix(string(buf2), \"Redirect test\") {\n\t\t\t\tt.Fatalf(\"Wrong output %q\", string(buf2))\n\t\t\t}\n\t\t\tif string(buf2) == string(buf) {\n\t\t\t\tt.Fatalf(\"Expected output change got %q and %q\", string(buf), string(buf2))\n\t\t\t}\n\t\t\tos.Remove(outpath)\n\t\t}\n\t})\n}\n\nfunc TestIssue2162(t *testing.T) {\n\tif buildMode == \"pie\" || runtime.GOOS == \"windows\" {\n\t\tt.Skip(\"skip it for stepping into one place where no source for pc when on pie mode or windows\")\n\t}\n\twithTestClient2(\"issue2162\", t, func(c service.Client) {\n\t\tstate, err := c.GetState()\n\t\tassertNoError(err, t, \"GetState()\")\n\t\tif state.CurrentThread.Function == nil {\n\t\t\t// Can't call Step if we don't have the source code of the current function\n\t\t\treturn\n\t\t}\n\n\t\t_, err = c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\"})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Unexpected error: %v\", err)\n\t\t}\n\n\t\t_, err = c.Step()\n\t\tassertNoError(err, t, \"Step()\")\n\t})\n}\n\nfunc TestDetachLeaveRunning(t *testing.T) {\n\t// See https://github.com/go-delve/delve/issues/2259\n\tif testBackend == \"rr\" {\n\t\treturn\n\t}\n\n\tlistener, clientConn := service.ListenerPipe()\n\tdefer listener.Close()\n\tvar buildFlags protest.BuildFlags\n\tif buildMode == \"pie\" {\n\t\tbuildFlags |= protest.BuildModePIE\n\t}\n\tfixture := protest.BuildFixture(t, \"testnextnethttp\", buildFlags)\n\n\tcmd := exec.Command(fixture.Path)\n\n\t// Capture stdout to read the port number\n\tstdout, err := cmd.StdoutPipe()\n\tassertNoError(err, t, \"creating stdout pipe\")\n\tcmd.Stderr = os.Stderr\n\tassertNoError(cmd.Start(), t, \"starting fixture\")\n\tdefer cmd.Process.Kill()\n\n\t// Read the port from stdout\n\tvar port int\n\tvar portLine string\n\tbuf := make([]byte, 256)\n\tfor {\n\t\tn, err := stdout.Read(buf)\n\t\tif err != nil {\n\t\t\tt.Fatal(\"failed to read port from fixture stdout:\", err)\n\t\t}\n\t\tportLine += string(buf[:n])\n\t\tif strings.Contains(portLine, \"LISTENING:\") {\n\t\t\tparts := strings.Split(portLine, \"LISTENING:\")\n\t\t\tif len(parts) > 1 {\n\t\t\t\tportStr := strings.TrimSpace(strings.Split(parts[1], \"\\n\")[0])\n\t\t\t\tport, err = strconv.Atoi(portStr)\n\t\t\t\tassertNoError(err, t, \"parsing port number\")\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// wait for testnextnethttp to start listening\n\tt0 := time.Now()\n\tfor {\n\t\tconn, err := net.Dial(\"tcp\", fmt.Sprintf(\"127.0.0.1:%d\", port))\n\t\tif err == nil {\n\t\t\tconn.Close()\n\t\t\tbreak\n\t\t}\n\t\ttime.Sleep(50 * time.Millisecond)\n\t\tif time.Since(t0) > 10*time.Second {\n\t\t\tt.Fatal(\"fixture did not start\")\n\t\t}\n\t}\n\n\tserver := rpccommon.NewServer(&service.Config{\n\t\tListener:   listener,\n\t\tAPIVersion: 2,\n\t\tDebugger: debugger.Config{\n\t\t\tAttachPid:  cmd.Process.Pid,\n\t\t\tWorkingDir: \".\",\n\t\t\tBackend:    testBackend,\n\t\t},\n\t})\n\tif err := server.Run(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tclient := rpc2.NewClientFromConn(clientConn)\n\tdefer server.Stop()\n\tassertNoError(client.Detach(false), t, \"Detach\")\n}\n\nfunc assertNoDuplicateBreakpoints(t *testing.T, c service.Client) {\n\tt.Helper()\n\tbps, _ := c.ListBreakpoints(false)\n\tseen := make(map[int]bool)\n\tfor _, bp := range bps {\n\t\tt.Logf(\"%#v\\n\", bp)\n\t\tif seen[bp.ID] {\n\t\t\tt.Fatalf(\"duplicate breakpoint ID %d\", bp.ID)\n\t\t}\n\t\tseen[bp.ID] = true\n\t}\n}\n\nfunc TestToggleBreakpointRestart(t *testing.T) {\n\t// Checks that breakpoints IDs do not overlap after Restart if there are disabled breakpoints.\n\twithTestClient2(\"testtoggle\", t, func(c service.Client) {\n\t\tbp1, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 1, Name: \"firstbreakpoint\"})\n\t\tassertNoError(err, t, \"CreateBreakpoint 1\")\n\t\t_, err = c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 2, Name: \"secondbreakpoint\"})\n\t\tassertNoError(err, t, \"CreateBreakpoint 2\")\n\t\t_, err = c.ToggleBreakpoint(bp1.ID)\n\t\tassertNoError(err, t, \"ToggleBreakpoint\")\n\t\t_, err = c.Restart(false)\n\t\tassertNoError(err, t, \"Restart\")\n\t\tassertNoDuplicateBreakpoints(t, c)\n\t\t_, err = c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 3, Name: \"thirdbreakpoint\"})\n\t\tassertNoError(err, t, \"CreateBreakpoint 3\")\n\t\tassertNoDuplicateBreakpoints(t, c)\n\t})\n}\n\nfunc TestStopServerWithClosedListener(t *testing.T) {\n\t// Checks that the error returned by listener.Accept() is ignored when we\n\t// are trying to shutdown. See issue #1633.\n\tif testBackend == \"rr\" || buildMode == \"pie\" {\n\t\tt.Skip(\"N/A\")\n\t}\n\tlistener, err := net.Listen(\"tcp\", \"localhost:0\")\n\tassertNoError(err, t, \"listener\")\n\tfixture := protest.BuildFixture(t, \"math\", 0)\n\tserver := rpccommon.NewServer(&service.Config{\n\t\tListener:           listener,\n\t\tAcceptMulti:        false,\n\t\tAPIVersion:         2,\n\t\tCheckLocalConnUser: true,\n\t\tDisconnectChan:     make(chan struct{}),\n\t\tProcessArgs:        []string{fixture.Path},\n\t\tDebugger: debugger.Config{\n\t\t\tWorkingDir:  \".\",\n\t\t\tBackend:     \"default\",\n\t\t\tForeground:  false,\n\t\t\tBuildFlags:  \"\",\n\t\t\tExecuteKind: debugger.ExecutingGeneratedFile,\n\t\t},\n\t})\n\tassertNoError(server.Run(), t, \"blah\")\n\ttime.Sleep(1 * time.Second) // let server start\n\tserver.Stop()\n\tlistener.Close()\n\ttime.Sleep(1 * time.Second) // give time to server to panic\n}\n\nfunc TestGoroutinesGrouping(t *testing.T) {\n\t// Tests the goroutine grouping and filtering feature\n\twithTestClient2(\"goroutinegroup\", t, func(c service.Client) {\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\t\t_, ggrp, _, _, err := c.ListGoroutinesWithFilter(0, 0, nil, &api.GoroutineGroupingOptions{\n\t\t\tGroupBy:         api.GoroutineLabel,\n\t\t\tGroupByKey:      \"name\",\n\t\t\tMaxGroupMembers: 5,\n\t\t\tMaxGroups:       10,\n\t\t}, nil)\n\t\tassertNoError(err, t, \"ListGoroutinesWithFilter (group by label)\")\n\t\tt.Logf(\"%#v\\n\", ggrp)\n\t\tif len(ggrp) < 5 {\n\t\t\tt.Errorf(\"not enough groups %d\\n\", len(ggrp))\n\t\t}\n\t\tvar unnamedCount int\n\t\tfor i := range ggrp {\n\t\t\tif ggrp[i].Name == \"name=\" {\n\t\t\t\tunnamedCount = ggrp[i].Total\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tgs, _, _, _, err := c.ListGoroutinesWithFilter(0, 0, []api.ListGoroutinesFilter{{Kind: api.GoroutineLabel, Arg: \"name=\"}}, nil, nil)\n\t\tassertNoError(err, t, \"ListGoroutinesWithFilter (filter unnamed)\")\n\t\tif len(gs) != unnamedCount {\n\t\t\tt.Errorf(\"wrong number of goroutines returned by filter: %d (expected %d)\\n\", len(gs), unnamedCount)\n\t\t}\n\t})\n}\n\nfunc TestLongStringArg(t *testing.T) {\n\t// Test the ability to load more elements of a string argument, this could\n\t// be broken if registerized variables are not handled correctly.\n\twithTestClient2(\"morestringarg\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.f\"})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\n\t\ttest := func(name, val1, val2 string) uint64 {\n\t\t\tvar1, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, name, normalLoadConfig)\n\t\t\tassertNoError(err, t, \"EvalVariable\")\n\t\t\tt.Logf(\"%#v\\n\", var1)\n\t\t\tif var1.Value != val1 {\n\t\t\t\tt.Fatalf(\"wrong value for variable: %q\", var1.Value)\n\t\t\t}\n\t\t\tvar2, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, fmt.Sprintf(\"(*(*%q)(%#x))[64:]\", var1.Type, var1.Addr), normalLoadConfig)\n\t\t\tassertNoError(err, t, \"EvalVariable\")\n\t\t\tt.Logf(\"%#v\\n\", var2)\n\t\t\tif var2.Value != val2 {\n\t\t\t\tt.Fatalf(\"wrong value for variable: %q\", var2.Value)\n\t\t\t}\n\t\t\treturn var1.Addr\n\t\t}\n\n\t\tsaddr := test(\"s\", \"very long string 01234567890123456789012345678901234567890123456\", \"7890123456789012345678901234567890123456789X\")\n\t\ttest(\"q\", \"very long string B 012345678901234567890123456789012345678901234\", \"567890123456789012345678901234567890123456789X2\")\n\t\tsaddr2 := test(\"s\", \"very long string 01234567890123456789012345678901234567890123456\", \"7890123456789012345678901234567890123456789X\")\n\t\tif saddr != saddr2 {\n\t\t\tt.Fatalf(\"address of s changed (%#x %#x)\", saddr, saddr2)\n\t\t}\n\t})\n}\n\nfunc TestGenericsBreakpoint(t *testing.T) {\n\tif !goversion.VersionAfterOrEqual(runtime.Version(), 1, 18) {\n\t\tt.Skip(\"generics\")\n\t}\n\t// Tests that setting breakpoints inside a generic function with multiple\n\t// instantiations results in a single logical breakpoint with N physical\n\t// breakpoints (N = number of instantiations).\n\twithTestClient2(\"genericbp\", t, func(c service.Client) {\n\t\tfp := testProgPath(t, \"genericbp\")\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{File: fp, Line: 6})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\tif len(bp.Addrs) != 2 {\n\t\t\tt.Fatalf(\"wrong number of physical breakpoints: %d\", len(bp.Addrs))\n\t\t}\n\n\t\tframe1Line := func() int {\n\t\t\tframes, err := c.Stacktrace(-1, 10, 0, 0, nil)\n\t\t\tassertNoError(err, t, \"Stacktrace\")\n\t\t\treturn frames[1].Line\n\t\t}\n\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\t\tif line := frame1Line(); line != 10 {\n\t\t\tt.Errorf(\"wrong line after first continue, expected 10, got %d\", line)\n\t\t}\n\n\t\tstate = <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\t\tif line := frame1Line(); line != 11 {\n\t\t\tt.Errorf(\"wrong line after first continue, expected 11, got %d\", line)\n\t\t}\n\n\t\tif bp.FunctionName != \"main.testfn\" {\n\t\t\tt.Errorf(\"wrong name for breakpoint (CreateBreakpoint): %q\", bp.FunctionName)\n\t\t}\n\n\t\tbps, err := c.ListBreakpoints(false)\n\t\tassertNoError(err, t, \"ListBreakpoints\")\n\n\t\tfor _, bp := range bps {\n\t\t\tif bp.ID > 0 {\n\t\t\t\tif bp.FunctionName != \"main.testfn\" {\n\t\t\t\t\tt.Errorf(\"wrong name for breakpoint (ListBreakpoints): %q\", bp.FunctionName)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\trmbp, err := c.ClearBreakpoint(bp.ID)\n\t\tassertNoError(err, t, \"ClearBreakpoint\")\n\t\tif rmbp.FunctionName != \"main.testfn\" {\n\t\t\tt.Errorf(\"wrong name for breakpoint (ClearBreakpoint): %q\", rmbp.FunctionName)\n\t\t}\n\t})\n}\n\nfunc TestRestartRewindAfterEnd(t *testing.T) {\n\tif testBackend != \"rr\" {\n\t\tt.Skip(\"not relevant\")\n\t}\n\t// Check that Restart works after the program has terminated, even if a\n\t// Continue is requested just before it.\n\t// Also check that Rewind can be used after the program has terminated.\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"math\", t, func(c service.Client) {\n\t\tstate := <-c.Continue()\n\t\tif !state.Exited {\n\t\t\tt.Fatalf(\"program did not exit\")\n\t\t}\n\t\tstate = <-c.Continue()\n\t\tif !state.Exited {\n\t\t\tt.Errorf(\"bad Continue return state: %v\", state)\n\t\t}\n\t\ttime.Sleep(1 * time.Second) // bug only happens if there is some time for the server to close the notify channel\n\t\t_, err := c.Restart(false)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"Restart: %v\", err)\n\t\t}\n\t\tstate = <-c.Continue()\n\t\tif !state.Exited {\n\t\t\tt.Fatalf(\"program did not exit exited\")\n\t\t}\n\t\t_, err = c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 0})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"CreateBreakpoint: %v\", err)\n\t\t}\n\t\tstate = <-c.Rewind()\n\t\tif state.Exited || state.Err != nil {\n\t\t\tt.Errorf(\"bad Rewind return state: %v\", state)\n\t\t}\n\t\tif state.CurrentThread.Line != 7 {\n\t\t\tt.Errorf(\"wrong stop location %s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_SinglelineStringFormattedWithBigInts(t *testing.T) {\n\t// Check that variables that represent large numbers are represented correctly when using a formatting string\n\n\tif runtime.GOARCH != \"amd64\" {\n\t\tt.Skip(\"N/A\")\n\t}\n\twithTestClient2Extended(\"xmm0print/\", t, 0, [3]string{}, nil, func(c service.Client, fixture protest.Fixture) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.VPSLLQ36\", Line: 4})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\tstate := <-c.Continue()\n\t\tif state.CurrentThread.Line != 8 {\n\t\t\tt.Fatalf(\"wrong location after continue %s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\t\t}\n\n\t\tconstvar, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"9331634762088972288\", normalLoadConfig)\n\t\tassertNoError(err, t, \"ErrVariable(9331634762088972288)\")\n\t\tout := constvar.StringWithOptions(\"\", \"%X\", 0)\n\t\tt.Logf(\"constant: %q\\n\", out)\n\t\tif out != \"8180A06000000000\" {\n\t\t\tt.Errorf(\"expected \\\"8180A06000000000\\\" got %q when printing constant\", out)\n\t\t}\n\n\t\txmm0var, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"XMM0.uint64\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable(XMM0.uint64)\")\n\n\t\texpected := []string{\n\t\t\t\"9331634762088972288\", \"8180A06000000000\",\n\t\t\t\"9331634762088972288\", \"8180A06000000000\",\n\t\t\t\"9259436018245828608\", \"8080200000000000\",\n\t\t\t\"9259436018245828608\", \"8080200000000000\",\n\t\t\t\"0\", \"0\", \"0\", \"0\",\n\t\t\t\"0\", \"0\", \"0\", \"0\",\n\t\t}\n\n\t\tfor i := range xmm0var.Children {\n\t\t\tchild := &xmm0var.Children[i]\n\t\t\tif child.Kind != reflect.Uint64 {\n\t\t\t\tt.Errorf(\"wrong kind for variable %s\\n\", child.Kind)\n\t\t\t}\n\t\t\tout1 := child.SinglelineString()\n\t\t\tout2 := child.StringWithOptions(\"\", \"%X\", 0)\n\t\t\tt.Logf(\"%q %q\\n\", out1, out2)\n\t\t\tif out1 != expected[i*2] {\n\t\t\t\tt.Errorf(\"for child %d expected %s got %s (decimal)\", i, expected[i*2], out1)\n\t\t\t}\n\t\t\tif out2 != expected[i*2+1] {\n\t\t\t\tt.Errorf(\"for child %d expected %s got %s (hexadecimal)\", i, expected[i*2+1], out2)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc TestNonGoDebug(t *testing.T) {\n\t// Test that we can at least set breakpoints while debugging a non-go executable.\n\tif runtime.GOOS != \"linux\" {\n\t\tt.Skip()\n\t}\n\tif objcopyPath, _ := exec.LookPath(\"cc\"); objcopyPath == \"\" {\n\t\tt.Skip(\"no C compiler in path\")\n\t}\n\tdir := protest.FindFixturesDir()\n\tpath := protest.TempFile(\"testc\")\n\tcmd := exec.Command(\"cc\", \"-g\", \"-o\", path, filepath.Join(dir, \"test.c\"))\n\tif out, err := cmd.CombinedOutput(); err != nil {\n\t\tt.Fatalf(\"Error compiling %s: %s\\n%s\", path, err, out)\n\t}\n\tprotest.AddPathToRemove(path)\n\n\tlistener, clientConn := service.ListenerPipe()\n\tdefer listener.Close()\n\n\tserver := rpccommon.NewServer(&service.Config{\n\t\tListener:    listener,\n\t\tProcessArgs: []string{path},\n\t\tDebugger: debugger.Config{\n\t\t\tBackend:     testBackend,\n\t\t\tExecuteKind: debugger.ExecutingExistingFile,\n\t\t},\n\t})\n\n\tif err := server.Run(); err != nil {\n\t\tt.Fatal(err)\n\t}\n\n\tclient := rpc2.NewClientFromConn(clientConn)\n\tdefer func() {\n\t\tclient.Detach(true)\n\t}()\n\n\t_, err := client.CreateBreakpoint(&api.Breakpoint{FunctionName: \"C.main\", Line: -1})\n\tif err != nil {\n\t\tt.Fatal(err)\n\t}\n}\n\nfunc TestRestart_PreserveFunctionBreakpoint(t *testing.T) {\n\t// Tests that function breakpoint get restored correctly, after a rebuild,\n\t// even if the function changed position in the source file.\n\n\tdir := protest.FindFixturesDir()\n\toutpath := filepath.Join(dir, \"testfnpos.go\")\n\tdefer os.Remove(outpath)\n\n\tcopy := func(inpath string) {\n\t\tbuf, err := os.ReadFile(inpath)\n\t\tassertNoError(err, t, fmt.Sprintf(\"Reading %q\", inpath))\n\t\tassertNoError(os.WriteFile(outpath, buf, 0o666), t, fmt.Sprintf(\"Creating %q\", outpath))\n\t}\n\n\tcopy(filepath.Join(dir, \"testfnpos1.go\"))\n\n\twithTestClient2Extended(\"testfnpos\", t, 0, [3]string{}, nil, func(c service.Client, f protest.Fixture) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.f1\"})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\t\tt.Logf(\"%s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\t\tif state.CurrentThread.Line != 5 {\n\t\t\tt.Fatalf(\"wrong location %s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\t\t}\n\n\t\t// rewrite test file and restart, rebuilding\n\t\tcopy(filepath.Join(dir, \"testfnpos2.go\"))\n\t\t_, err = c.Restart(true)\n\t\tassertNoError(err, t, \"Restart(true)\")\n\n\t\tstate = <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\t\tt.Logf(\"%s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\t\tif state.CurrentThread.Line != 9 {\n\t\t\tt.Fatalf(\"wrong location %s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\t\t}\n\t})\n}\n\nfunc assertLine(t *testing.T, state *api.DebuggerState, file string, lineno int) {\n\tt.Helper()\n\tt.Logf(\"%s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\tif !strings.HasSuffix(state.CurrentThread.File, file) || state.CurrentThread.Line != lineno {\n\t\tt.Fatalf(\"wrong location %s:%d\", state.CurrentThread.File, state.CurrentThread.Line)\n\t}\n}\n\nfunc TestPluginSuspendedBreakpoint(t *testing.T) {\n\tif runtime.GOARCH == \"ppc64le\" {\n\t\tt.Skip(\"skipped on ppc64le: broken\")\n\t}\n\t// Tests that breakpoints created in a suspended state will be enabled automatically when a plugin is loaded.\n\tpluginFixtures := protest.WithPlugins(t, protest.AllNonOptimized, \"plugin1/\", \"plugin2/\")\n\tdir, err := filepath.Abs(protest.FindFixturesDir())\n\tassertNoError(err, t, \"filepath.Abs\")\n\n\twithTestClient2Extended(\"plugintest\", t, protest.AllNonOptimized, [3]string{}, []string{pluginFixtures[0].Path, pluginFixtures[1].Path}, func(c service.Client, f protest.Fixture) {\n\t\t_, err := c.CreateBreakpointWithExpr(&api.Breakpoint{FunctionName: \"github.com/go-delve/delve/_fixtures/plugin1.Fn1\", Line: 1}, \"\", nil, true)\n\t\tassertNoError(err, t, \"CreateBreakpointWithExpr(Fn1) (suspended)\")\n\n\t\t_, err = c.CreateBreakpointWithExpr(&api.Breakpoint{File: filepath.Join(dir, \"plugin2\", \"plugin2.go\"), Line: 9}, \"\", nil, true)\n\t\tassertNoError(err, t, \"CreateBreakpointWithExpr(plugin2.go:9) (suspended)\")\n\n\t\tcont := func(name, file string, lineno int) {\n\t\t\tt.Helper()\n\t\t\tstate := <-c.Continue()\n\t\t\tassertNoError(state.Err, t, name)\n\t\t\tassertLine(t, state, file, lineno)\n\t\t}\n\n\t\tcont(\"Continue 1\", \"plugintest.go\", 22)\n\t\tcont(\"Continue 2\", \"plugintest.go\", 27)\n\t\tcont(\"Continue 3\", \"plugin1.go\", 6)\n\t\tcont(\"Continue 4\", \"plugin2.go\", 9)\n\t})\n\n\twithTestClient2Extended(\"plugintest\", t, protest.AllNonOptimized, [3]string{}, []string{pluginFixtures[0].Path, pluginFixtures[1].Path}, func(c service.Client, f protest.Fixture) {\n\t\texprbreak := func(expr string) {\n\t\t\tt.Helper()\n\t\t\t_, err := c.CreateBreakpointWithExpr(&api.Breakpoint{}, expr, nil, true)\n\t\t\tassertNoError(err, t, fmt.Sprintf(\"CreateBreakpointWithExpr(%s) (suspended)\", expr))\n\t\t}\n\n\t\tcont := func(name, file string, lineno int) {\n\t\t\tt.Helper()\n\t\t\tstate := <-c.Continue()\n\t\t\tassertNoError(state.Err, t, name)\n\t\t\tassertLine(t, state, file, lineno)\n\t\t}\n\n\t\texprbreak(\"plugin1.Fn1\")\n\t\texprbreak(\"plugin2.go:9\")\n\n\t\t// The following breakpoints can never be un-suspended because the\n\t\t// expression is never resolved, but this shouldn't cause problems\n\n\t\texprbreak(\"m[0]\")\n\t\texprbreak(\"*m[0]\")\n\t\texprbreak(\"unknownfn\")\n\t\texprbreak(\"+2\")\n\n\t\tcont(\"Continue 1\", \"plugintest.go\", 22)\n\t\tcont(\"Continue 2\", \"plugintest.go\", 27)\n\t\tcont(\"Continue 3\", \"plugin1.go\", 5)\n\t\tcont(\"Continue 4\", \"plugin2.go\", 9)\n\t})\n}\n\n// Tests that breakpoint set after the process has exited will be hit when the process is restarted.\nfunc TestBreakpointAfterProcessExit(t *testing.T) {\n\twithTestClient2(\"continuetestprog\", t, func(c service.Client) {\n\t\tstate := <-c.Continue()\n\t\tif !state.Exited {\n\t\t\tt.Fatal(\"process should have exited\")\n\t\t}\n\t\tbp, err := c.CreateBreakpointWithExpr(&api.Breakpoint{ID: 2, FunctionName: \"main.main\", Line: 1}, \"main.main\", nil, true)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\t_, err = c.Restart(false)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t\tstate = <-c.Continue()\n\t\tif state.CurrentThread == nil {\n\t\t\tt.Fatal(\"no current thread\")\n\t\t}\n\t\tif state.CurrentThread.Breakpoint == nil {\n\t\t\tt.Fatal(\"no breakpoint\")\n\t\t}\n\t\tif state.CurrentThread.Breakpoint.ID != bp.ID {\n\t\t\tt.Fatal(\"did not hit correct breakpoint\")\n\t\t}\n\t\tif state.CurrentThread.Function == nil {\n\t\t\tt.Fatal(\"no function\")\n\t\t}\n\t\tif state.CurrentThread.Function.Name() != \"main.main\" {\n\t\t\tt.Fatal(\"stopped at incorrect function\")\n\t\t}\n\t\tstate = <-c.Continue()\n\t\tif !state.Exited {\n\t\t\tt.Fatal(\"process should have exited\")\n\t\t}\n\t\t_, err = c.ClearBreakpoint(bp.ID)\n\t\tif err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_createBreakpointWithID(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"continuetestprog\", t, func(c service.Client) {\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{ID: 2, FunctionName: \"main.main\", Line: 1})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tif bp.ID != 2 {\n\t\t\tt.Errorf(\"wrong ID for breakpoint %d\", bp.ID)\n\t\t}\n\n\t\tbp2, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\", Line: 2})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tif bp2.ID != 3 {\n\t\t\tt.Errorf(\"wrong ID for breakpoint %d\", bp2.ID)\n\t\t}\n\t})\n}\n\nfunc TestClientServer_autoBreakpoints(t *testing.T) {\n\t// Check that unrecovered-panic and fatal-throw breakpoints are visible in\n\t// the breakpoint list.\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"math\", t, func(c service.Client) {\n\t\tbps, err := c.ListBreakpoints(false)\n\t\tassertNoError(err, t, \"ListBreakpoints\")\n\t\tn := 0\n\t\tfor _, bp := range bps {\n\t\t\tt.Log(bp)\n\t\t\tif bp.Name == proc.UnrecoveredPanic || bp.Name == proc.FatalThrow {\n\t\t\t\tn++\n\t\t\t}\n\t\t}\n\t\tif n != 2 {\n\t\t\tt.Error(\"automatic breakpoints not found\")\n\t\t}\n\t})\n}\n\nfunc TestClientServer_breakpointOnFuncWithABIWrapper(t *testing.T) {\n\t// Setting a breakpoint on an assembly function that has an ABI\n\t// compatibility wrapper should end up setting a breakpoint on the real\n\t// function (also setting a breakpoint on the wrapper is fine).\n\t// Issue #3296\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"math\", t, func(c service.Client) {\n\t\tbp, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"runtime.schedinit\"})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tt.Log(bp)\n\n\t\tfound := false\n\t\tfor _, pc := range bp.Addrs {\n\t\t\ttext, err := c.DisassemblePC(api.EvalScope{}, pc, api.IntelFlavour)\n\t\t\tassertNoError(err, t, fmt.Sprint(\"DisassemblePC\", pc))\n\t\t\tt.Log(\"First instruction for\", pc, text[0])\n\t\t\tif strings.HasSuffix(text[0].Loc.File, \"runtime/proc.go\") {\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Error(\"breakpoint not set on the runtime/proc.go function\")\n\t\t}\n\t})\n}\n\nfunc TestClientServer_chanGoroutines(t *testing.T) {\n\twithTestClient2(\"changoroutines\", t, func(c service.Client) {\n\t\tver := c.GetVersion()\n\t\tgoVer := goversion.ParseProducer(ver.TargetGoVersion)\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\n\t\tcountRecvSend := func(gs []*api.Goroutine) (recvq, sendq int) {\n\t\t\tfor _, g := range gs {\n\t\t\t\tt.Logf(\"\\tID: %d WaitReason: %s\\n\", g.ID, api.WaitReasonString(&goVer, g.WaitReason))\n\t\t\t\tswitch api.WaitReasonString(&goVer, g.WaitReason) {\n\t\t\t\tcase \"chan send\":\n\t\t\t\t\tsendq++\n\t\t\t\tcase \"chan receive\":\n\t\t\t\t\trecvq++\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tgs, _, _, _, err := c.ListGoroutinesWithFilter(0, 100, []api.ListGoroutinesFilter{{Kind: api.GoroutineWaitingOnChannel, Arg: \"blockingchan1\"}}, nil, &api.EvalScope{GoroutineID: -1})\n\t\tassertNoError(err, t, \"ListGoroutinesWithFilter(blockingchan1)\")\n\t\tt.Logf(\"blockingchan1 gs:\")\n\t\trecvq, sendq := countRecvSend(gs)\n\t\tif len(gs) != 2 || recvq != 0 || sendq != 2 {\n\t\t\tt.Error(\"wrong number of goroutines for blockingchan1\")\n\t\t}\n\n\t\tgs, _, _, _, err = c.ListGoroutinesWithFilter(0, 100, []api.ListGoroutinesFilter{{Kind: api.GoroutineWaitingOnChannel, Arg: \"blockingchan2\"}}, nil, &api.EvalScope{GoroutineID: -1})\n\t\tassertNoError(err, t, \"ListGoroutinesWithFilter(blockingchan2)\")\n\t\tt.Logf(\"blockingchan2 gs:\")\n\t\trecvq, sendq = countRecvSend(gs)\n\t\tif len(gs) != 1 || recvq != 1 || sendq != 0 {\n\t\t\tt.Error(\"wrong number of goroutines for blockingchan2\")\n\t\t}\n\t})\n}\n\nfunc TestNextInstruction(t *testing.T) {\n\tprotest.AllowRecording(t)\n\twithTestClient2(\"testprog\", t, func(c service.Client) {\n\t\tfp := testProgPath(t, \"testprog\")\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{File: fp, Line: 19})\n\t\tassertNoError(err, t, \"CreateBreakpoint()\")\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\n\t\tstate, err = c.StepInstruction(true)\n\t\tassertNoError(err, t, \"Step()\")\n\t\tif state.CurrentThread.Line != 20 {\n\t\t\tt.Fatalf(\"expected line %d got %d\", 20, state.CurrentThread.Line)\n\t\t}\n\t})\n}\n\nfunc TestBreakpointVariablesWithoutG(t *testing.T) {\n\t// Tests that evaluating variables on a breakpoint that is hit on a thread\n\t// without a goroutine does not cause an error.\n\twithTestClient2(\"math\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{\n\t\t\tFunctionName: \"runtime.mallocgc\",\n\t\t\tLoadArgs:     &normalLoadConfig,\n\t\t})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\t})\n}\n\nfunc TestGuessSubstitutePath(t *testing.T) {\n\tprotest.MustHaveModules(t)\n\n\tt.Setenv(\"NOCERT\", \"1\")\n\tver, _ := goversion.Parse(runtime.Version())\n\tif ver.IsDevelBuild() && os.Getenv(\"CI\") != \"\" && runtime.GOOS == \"linux\" {\n\t\t// The TeamCity builders for linux/amd64/tip and linux/arm64/tip end up\n\t\t// with a broken .git directory which makes the 'go list' command used for\n\t\t// GuessSubstitutePath fail.\n\t\tt.Skip(\"does not work in TeamCity + tip + linux\")\n\t}\n\tif os.Getenv(\"CI\") != \"\" && runtime.GOOS == \"linux\" && runtime.GOARCH == \"riscv64\" {\n\t\tt.Skip(\"does not work on the riscv64 builder\")\n\t}\n\n\tslashnorm := func(s string) string {\n\t\tif runtime.GOOS != \"windows\" {\n\t\t\treturn s\n\t\t}\n\t\treturn strings.ReplaceAll(s, \"\\\\\", \"/\")\n\t}\n\n\tguess := func(t *testing.T, goflags string) [][2]string {\n\t\tt.Setenv(\"GOFLAGS\", goflags)\n\n\t\tdlvbin := protest.GetDlvBinary(t)\n\n\t\tlistener, clientConn := service.ListenerPipe()\n\t\tdefer listener.Close()\n\t\tserver := rpccommon.NewServer(&service.Config{\n\t\t\tListener:    listener,\n\t\t\tProcessArgs: []string{dlvbin, \"help\"},\n\t\t\tDebugger: debugger.Config{\n\t\t\t\tBackend:        testBackend,\n\t\t\t\tCheckGoVersion: true,\n\t\t\t\tBuildFlags:     \"\", // build flags can be an empty string here because the only test that uses it, does not set special flags.\n\t\t\t\tExecuteKind:    debugger.ExecutingExistingFile,\n\t\t\t},\n\t\t})\n\t\tif err := server.Run(); err != nil {\n\t\t\tt.Fatal(err)\n\t\t}\n\n\t\tclient := rpc2.NewClientFromConn(clientConn)\n\t\tdefer client.Detach(true)\n\n\t\tswitch runtime.GOARCH {\n\t\tcase \"ppc64le\":\n\t\t\tt.Setenv(\"GOFLAGS\", \"-tags=exp.linuxppc64le\")\n\t\tcase \"riscv64\":\n\t\t\tt.Setenv(\"GOFLAGS\", \"-tags=exp.linuxriscv64\")\n\t\tcase \"loong64\":\n\t\t\tt.Setenv(\"GOFLAGS\", \"-tags=exp.linuxloong64\")\n\t\t}\n\n\t\tgsp, err := client.GuessSubstitutePath()\n\t\tassertNoError(err, t, \"GuessSubstitutePath\")\n\t\treturn gsp\n\t}\n\n\tdelvePath := protest.ProjectRoot()\n\tvar nmods int = -1\n\n\tt.Run(\"Normal\", func(t *testing.T) {\n\t\tgsp := guess(t, \"\")\n\t\tt.Logf(\"Normal build: %d\", len(gsp))\n\t\tif len(gsp) == 0 {\n\t\t\tt.Fatalf(\"not enough modules\")\n\t\t}\n\t\tfound := false\n\t\tfor _, e := range gsp {\n\t\t\tt.Logf(\"\\t%s -> %s\", e[0], e[1])\n\t\t\tif e[0] != slashnorm(e[1]) {\n\t\t\t\tt.Fatalf(\"mismatch %q %q\", e[0], e[1])\n\t\t\t}\n\t\t\tif e[1] == delvePath {\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tnmods = len(gsp)\n\t\tif !found {\n\t\t\tt.Fatalf(\"could not find main module path %q\", delvePath)\n\t\t}\n\n\t\tif os.Getenv(\"CI\") == \"true\" {\n\t\t\treturn\n\t\t}\n\t})\n\n\tt.Run(\"Modules\", func(t *testing.T) {\n\t\tgsp := guess(t, \"-mod=mod\")\n\t\tt.Logf(\"Modules build: %d\", len(gsp))\n\t\tif len(gsp) != nmods && nmods != -1 {\n\t\t\tt.Fatalf(\"not enough modules\")\n\t\t}\n\t\tfound := false\n\t\tfor _, e := range gsp {\n\t\t\tt.Logf(\"\\t%s -> %s\", e[0], e[1])\n\t\t\tif e[0] == slashnorm(delvePath) && e[1] == delvePath {\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatalf(\"could not find main module path %q\", delvePath)\n\t\t}\n\t})\n\n\tt.Run(\"Trimpath\", func(t *testing.T) {\n\t\tgsp := guess(t, \"-trimpath\")\n\t\tt.Logf(\"Trimpath build: %d\", len(gsp))\n\t\tif len(gsp) != nmods && nmods != -1 {\n\t\t\tt.Fatalf(\"not enough modules\")\n\t\t}\n\t\tfound := false\n\t\tfor _, e := range gsp {\n\t\t\tt.Logf(\"\\t%s -> %s\", e[0], e[1])\n\t\t\tif e[0] == \"github.com/go-delve/delve\" && e[1] == delvePath {\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatalf(\"could not find main module path %q\", delvePath)\n\t\t}\n\t})\n\n\tt.Run(\"ModulesTrimpath\", func(t *testing.T) {\n\t\tgsp := guess(t, \"-trimpath -mod=mod\")\n\t\tt.Logf(\"Modules+Trimpath build: %d\", len(gsp))\n\t\tif len(gsp) != nmods && nmods != -1 {\n\t\t\tt.Fatalf(\"not enough modules\")\n\t\t}\n\t\tfound := false\n\t\tfor _, e := range gsp {\n\t\t\tt.Logf(\"\\t%s -> %s\", e[0], e[1])\n\t\t\tif e[0] == \"github.com/go-delve/delve\" && e[1] == delvePath {\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatalf(\"could not find main module path %q\", delvePath)\n\t\t}\n\t})\n}\n\nfunc TestFollowExecFindLocation(t *testing.T) {\n\t// FindLocation should not return an error if at least one of the currently\n\t// attached targets can find the specified location.\n\t// See issue #3933\n\tif runtime.GOOS == \"freebsd\" || runtime.GOOS == \"darwin\" {\n\t\tt.Skip(\"follow exec not implemented\")\n\t}\n\tvar buildFlags protest.BuildFlags\n\tif buildMode == \"pie\" {\n\t\tbuildFlags |= protest.BuildModePIE\n\t}\n\tchildFixture := protest.BuildFixture(t, \"spawnchild\", buildFlags)\n\n\twithTestClient2Extended(\"spawn\", t, 0, [3]string{}, []string{\"spawn2\", childFixture.Path}, func(c service.Client, fixture protest.Fixture) {\n\t\tassertNoError(c.FollowExec(true, \"\"), t, \"FollowExec\")\n\t\t_, err := c.CreateBreakpointWithExpr(&api.Breakpoint{File: childFixture.Source, Line: 9}, fmt.Sprintf(\"%s:%d\", childFixture.Source, 9), nil, true)\n\t\tassertNoError(err, t, \"CreateBreakpoint(spawnchild.go:9)\")\n\n\t\tgotBreakpointMaterialized := false\n\t\tc.SetEventsFn(func(ev *api.Event) {\n\t\t\tt.Logf(\"event = %#v\", ev)\n\t\t\tif ev.Kind == api.EventBreakpointMaterialized {\n\t\t\t\tgotBreakpointMaterialized = true\n\t\t\t}\n\t\t})\n\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue()\")\n\n\t\tif !gotBreakpointMaterialized {\n\t\t\tt.Error(\"did not get a breakpoint materialized event\")\n\t\t}\n\n\t\ttgts, err := c.ListTargets()\n\t\tassertNoError(err, t, \"ListTargets\")\n\n\t\tt.Logf(\"%v\\n\", tgts)\n\t\tfound := false\n\t\tfor _, tgt := range tgts {\n\t\t\tif tgt.Pid == state.Pid {\n\t\t\t\tif !strings.Contains(tgt.CmdLine, \"spawnchild\") {\n\t\t\t\t\tt.Fatalf(\"did not switch to child process\")\n\t\t\t\t}\n\t\t\t\tfound = true\n\t\t\t}\n\t\t}\n\t\tif !found {\n\t\t\tt.Fatalf(\"current target not found\")\n\t\t}\n\n\t\t_, _, err = c.FindLocation(api.EvalScope{GoroutineID: -1}, fmt.Sprintf(\"%s:%d\", childFixture.Source, 6), true, nil)\n\t\tassertNoError(err, t, \"FindLocation(spawnchild.go:6)\")\n\n\t\t_, _, err = c.FindLocation(api.EvalScope{GoroutineID: -1}, fmt.Sprintf(\"%s:%d\", fixture.Source, 19), true, nil)\n\t\tassertNoError(err, t, \"FindLocation(spawn.go:19)\")\n\t})\n}\n\nfunc TestCancelDownload(t *testing.T) {\n\tif runtime.GOOS != \"linux\" {\n\t\tt.Skip(\"linux only\")\n\t}\n\tfakedebuginfodDir, _ := filepath.Abs(filepath.Join(protest.FindFixturesDir(), \"fake-debuginfod-find\"))\n\tt.Setenv(\"PATH\", os.ExpandEnv(fakedebuginfodDir+\":$PATH\"))\n\twithTestClient2(\"cgotest\", t, func(c service.Client) {\n\t\t_, err := c.CreateBreakpoint(&api.Breakpoint{FunctionName: \"main.main\"})\n\t\tassertNoError(err, t, \"CreateBreakpoint\")\n\t\teventReceived := false\n\t\tc.SetEventsFn(func(ev *api.Event) {\n\t\t\tswitch ev.Kind {\n\t\t\tcase api.EventBinaryInfoDownload:\n\t\t\t\teventReceived = true\n\t\t\t\tt.Logf(\"download event: %q %q\", ev.BinaryInfoDownloadEventDetails.ImagePath, ev.BinaryInfoDownloadEventDetails.Progress)\n\t\t\t\tassertNoError(c.CancelDownloads(), t, \"CancelDownloads\")\n\t\t\t}\n\t\t})\n\t\tt0 := time.Now()\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\t\tif !eventReceived {\n\t\t\tt.Errorf(\"Download event was not received\")\n\t\t}\n\t\tif time.Since(t0) > 3*time.Second {\n\t\t\tt.Errorf(\"Continue took to long, we probably couldn't cancel the download\")\n\t\t}\n\t})\n}\n\nfunc TestEvalNonunicodeString(t *testing.T) {\n\t// Non-unicode strings can not be sent through json encoding without being\n\t// altered, check that our workaround works.\n\t// See issue #4072.\n\twithTestClient2(\"testvariables2\", t, func(c service.Client) {\n\t\tstate := <-c.Continue()\n\t\tassertNoError(state.Err, t, \"Continue\")\n\t\tv, err := c.EvalVariable(api.EvalScope{GoroutineID: -1}, \"string(issue4072)\", normalLoadConfig)\n\t\tassertNoError(err, t, \"EvalVariable\")\n\t\tt.Logf(\"%s\", v.StringWithOptions(\"\", \"\", api.PrettyNewlines))\n\t\ttgt := string([]byte{116, 121, 112, 101, 32, 84, 32, 115, 116, 114, 117, 99, 116, 32, 123, 12, 12, 9, 255, 102, 108, 100, 99, 111, 109, 255})\n\t\tif v.Value != tgt {\n\t\t\tt.Errorf(\"wrong value for string issue4072 expected %q, got %q\", tgt, v.Value)\n\t\t}\n\t})\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/.clang-format",
    "content": "---\nLanguage:        Cpp\nBasedOnStyle:    LLVM\nAlignAfterOpenBracket: DontAlign\nAlignConsecutiveAssignments: true\nAlignEscapedNewlines: DontAlign\nAlwaysBreakBeforeMultilineStrings: true\nAlwaysBreakTemplateDeclarations: false\nAllowAllParametersOfDeclarationOnNextLine: false\nAllowShortFunctionsOnASingleLine: false\nBreakBeforeBraces: Attach\nIndentWidth:     4\nKeepEmptyLinesAtTheStartOfBlocks: false\nTabWidth:        4\nUseTab:          ForContinuationAndIndentation\nColumnLimit:     1000\n# Go compiler comments need to stay unindented.\nCommentPragmas: '^go:.*'\n...\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/.gitignore",
    "content": "# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n*.o\n!*_bpf*.o\n\n# Test binary, build with `go test -c`\n*.test\n\n# Output of the go coverage tool, specifically when used with LiteIDE\n*.out\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/.golangci.yaml",
    "content": "---\nissues:\n  exclude-rules:\n    # syscall param structs will have unused fields in Go code.\n    - path: syscall.*.go\n      linters:\n        - structcheck\n\nlinters:\n  disable-all: true\n  enable:\n    - errcheck\n    - goimports\n    - gosimple\n    - govet\n    - ineffassign\n    - misspell\n    - staticcheck\n    - typecheck\n    - unused\n    - gofmt\n\n    # Could be enabled later:\n    # - gocyclo\n    # - maligned\n    # - gosec\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/ARCHITECTURE.md",
    "content": "Architecture of the library\n===\n\n```mermaid\ngraph RL\n    Program --> ProgramSpec --> ELF\n    btf.Spec --> ELF\n    Map --> MapSpec --> ELF\n    Links --> Map & Program\n    ProgramSpec -.-> btf.Spec\n    MapSpec -.-> btf.Spec\n    subgraph Collection\n        Program & Map\n    end\n    subgraph CollectionSpec\n        ProgramSpec & MapSpec & btf.Spec\n    end\n```\n\nELF\n---\n\nBPF is usually produced by using Clang to compile a subset of C. Clang outputs\nan ELF file which contains program byte code (aka BPF), but also metadata for\nmaps used by the program. The metadata follows the conventions set by libbpf\nshipped with the kernel. Certain ELF sections have special meaning\nand contain structures defined by libbpf. Newer versions of clang emit\nadditional metadata in [BPF Type Format](#BTF).\n\nThe library aims to be compatible with libbpf so that moving from a C toolchain\nto a Go one creates little friction. To that end, the [ELF reader](elf_reader.go)\nis tested against the Linux selftests and avoids introducing custom behaviour\nif possible.\n\nThe output of the ELF reader is a `CollectionSpec` which encodes\nall of the information contained in the ELF in a form that is easy to work with\nin Go. The returned `CollectionSpec` should be deterministic: reading the same ELF\nfile on different systems must produce the same output.\nAs a corollary, any changes that depend on the runtime environment like the\ncurrent kernel version must happen when creating [Objects](#Objects).\n\nSpecifications\n---\n\n`CollectionSpec` is a very simple container for `ProgramSpec`, `MapSpec` and\n`btf.Spec`. Avoid adding functionality to it if possible.\n\n`ProgramSpec` and `MapSpec` are blueprints for in-kernel\nobjects and contain everything necessary to execute the relevant `bpf(2)`\nsyscalls. They refer to `btf.Spec` for type information such as `Map` key and\nvalue types.\n\nThe [asm](asm/) package provides an assembler that can be used to generate\n`ProgramSpec` on the fly.\n\nObjects\n---\n\n`Program` and `Map` are the result of loading specifications into the kernel.\nFeatures that depend on knowledge of the current system (e.g kernel version)\nare implemented at this point.\n\nSometimes loading a spec will fail because the kernel is too old, or a feature is not\nenabled. There are multiple ways the library deals with that:\n\n* Fallback: older kernels don't allow naming programs and maps. The library\n  automatically detects support for names, and omits them during load if\n  necessary. This works since name is primarily a debug aid.\n\n* Sentinel error: sometimes it's possible to detect that a feature isn't available.\n  In that case the library will return an error wrapping `ErrNotSupported`.\n  This is also useful to skip tests that can't run on the current kernel.\n\nOnce program and map objects are loaded they expose the kernel's low-level API,\ne.g. `NextKey`. Often this API is awkward to use in Go, so there are safer\nwrappers on top of the low-level API, like `MapIterator`. The low-level API is\nuseful when our higher-level API doesn't support a particular use case.\n\nLinks\n---\n\nPrograms can be attached to many different points in the kernel and newer BPF hooks\ntend to use bpf_link to do so. Older hooks unfortunately use a combination of\nsyscalls, netlink messages, etc. Adding support for a new link type should not\npull in large dependencies like netlink, so XDP programs or tracepoints are\nout of scope.\n\nEach bpf_link_type has one corresponding Go type, e.g. `link.tracing` corresponds\nto BPF_LINK_TRACING. In general, these types should be unexported as long as they\ndon't export methods outside of the Link interface. Each Go type may have multiple\nexported constructors. For example `AttachTracing` and `AttachLSM` create a\ntracing link, but are distinct functions since they may require different arguments.\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at nathanjsweet at gmail dot com or i at lmb dot io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/CONTRIBUTING.md",
    "content": "# How to contribute\n\nDevelopment is on [GitHub](https://github.com/cilium/ebpf) and contributions in\nthe form of pull requests and issues reporting bugs or suggesting new features\nare welcome. Please take a look at [the architecture](ARCHITECTURE.md) to get\na better understanding for the high-level goals.\n\n## Adding a new feature\n\n1. [Join](https://ebpf.io/slack) the\n[#ebpf-go](https://cilium.slack.com/messages/ebpf-go) channel to discuss your requirements and how the feature can be implemented. The most important part is figuring out how much new exported API is necessary. **The less new API is required the easier it will be to land the feature.**\n2. (*optional*) Create a draft PR if you want to discuss the implementation or have hit a problem. It's fine if this doesn't compile or contains debug statements.\n3. Create a PR that is ready to merge. This must pass CI and have tests.\n\n### API stability\n\nThe library doesn't guarantee the stability of its API at the moment.\n\n1. If possible avoid breakage by introducing new API and deprecating the old one\n   at the same time. If an API was deprecated in v0.x it can be removed in v0.x+1.\n2. Breaking API in a way that causes compilation failures is acceptable but must\n   have good reasons.\n3. Changing the semantics of the API without causing compilation failures is\n   heavily discouraged.\n\n## Running the tests\n\nMany of the tests require privileges to set resource limits and load eBPF code.\nThe easiest way to obtain these is to run the tests with `sudo`.\n\nTo test the current package with your local kernel you can simply run:\n```\ngo test -exec sudo  ./...\n```\n\nTo test the current package with a different kernel version you can use the [run-tests.sh](run-tests.sh) script.\nIt requires [virtme](https://github.com/amluto/virtme) and qemu to be installed.\n\nExamples:\n\n```bash\n# Run all tests on a 5.4 kernel\n./run-tests.sh 5.4\n\n# Run a subset of tests:\n./run-tests.sh 5.4 ./link\n```\n\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2017 Nathan Sweet\nCopyright (c) 2018, 2019 Cloudflare\nCopyright (c) 2019 Authors of Cilium\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/MAINTAINERS.md",
    "content": "# Maintainers\n\nMaintainers can be found in the [Cilium Maintainers file](https://github.com/cilium/community/blob/main/roles/Maintainers.md)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/Makefile",
    "content": "# The development version of clang is distributed as the 'clang' binary,\n# while stable/released versions have a version number attached.\n# Pin the default clang to a stable version.\nCLANG ?= clang-14\nSTRIP ?= llvm-strip-14\nOBJCOPY ?= llvm-objcopy-14\nCFLAGS := -O2 -g -Wall -Werror $(CFLAGS)\n\nCI_KERNEL_URL ?= https://github.com/cilium/ci-kernels/raw/master/\n\n# Obtain an absolute path to the directory of the Makefile.\n# Assume the Makefile is in the root of the repository.\nREPODIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))\nUIDGID := $(shell stat -c '%u:%g' ${REPODIR})\n\n# Prefer podman if installed, otherwise use docker.\n# Note: Setting the var at runtime will always override.\nCONTAINER_ENGINE ?= $(if $(shell command -v podman), podman, docker)\nCONTAINER_RUN_ARGS ?= $(if $(filter ${CONTAINER_ENGINE}, podman), --log-driver=none, --user \"${UIDGID}\")\n\nIMAGE := $(shell cat ${REPODIR}/testdata/docker/IMAGE)\nVERSION := $(shell cat ${REPODIR}/testdata/docker/VERSION)\n\n\n# clang <8 doesn't tag relocs properly (STT_NOTYPE)\n# clang 9 is the first version emitting BTF\nTARGETS := \\\n\ttestdata/loader-clang-7 \\\n\ttestdata/loader-clang-9 \\\n\ttestdata/loader-$(CLANG) \\\n\ttestdata/manyprogs \\\n\ttestdata/btf_map_init \\\n\ttestdata/invalid_map \\\n\ttestdata/raw_tracepoint \\\n\ttestdata/invalid_map_static \\\n\ttestdata/invalid_btf_map_init \\\n\ttestdata/strings \\\n\ttestdata/freplace \\\n\ttestdata/iproute2_map_compat \\\n\ttestdata/map_spin_lock \\\n\ttestdata/subprog_reloc \\\n\ttestdata/fwd_decl \\\n\ttestdata/kconfig \\\n\ttestdata/kconfig_config \\\n\ttestdata/kfunc \\\n\ttestdata/invalid-kfunc \\\n\ttestdata/kfunc-kmod \\\n\tbtf/testdata/relocs \\\n\tbtf/testdata/relocs_read \\\n\tbtf/testdata/relocs_read_tgt \\\n\tcmd/bpf2go/testdata/minimal\n\n.PHONY: all clean container-all container-shell generate\n\n.DEFAULT_TARGET = container-all\n\n# Build all ELF binaries using a containerized LLVM toolchain.\ncontainer-all:\n\t+${CONTAINER_ENGINE} run --rm -ti ${CONTAINER_RUN_ARGS} \\\n\t\t-v \"${REPODIR}\":/ebpf -w /ebpf --env MAKEFLAGS \\\n\t\t--env CFLAGS=\"-fdebug-prefix-map=/ebpf=.\" \\\n\t\t--env HOME=\"/tmp\" \\\n\t\t\"${IMAGE}:${VERSION}\" \\\n\t\tmake all\n\n# (debug) Drop the user into a shell inside the container as root.\ncontainer-shell:\n\t${CONTAINER_ENGINE} run --rm -ti \\\n\t\t-v \"${REPODIR}\":/ebpf -w /ebpf \\\n\t\t\"${IMAGE}:${VERSION}\"\n\nclean:\n\t-$(RM) testdata/*.elf\n\t-$(RM) btf/testdata/*.elf\n\nformat:\n\tfind . -type f -name \"*.c\" | xargs clang-format -i\n\nall: format $(addsuffix -el.elf,$(TARGETS)) $(addsuffix -eb.elf,$(TARGETS)) generate\n\tln -srf testdata/loader-$(CLANG)-el.elf testdata/loader-el.elf\n\tln -srf testdata/loader-$(CLANG)-eb.elf testdata/loader-eb.elf\n\n# $BPF_CLANG is used in go:generate invocations.\ngenerate: export BPF_CLANG := $(CLANG)\ngenerate: export BPF_CFLAGS := $(CFLAGS)\ngenerate:\n\tgo generate ./...\n\ntestdata/loader-%-el.elf: testdata/loader.c\n\t$* $(CFLAGS) -target bpfel -c $< -o $@\n\t$(STRIP) -g $@\n\ntestdata/loader-%-eb.elf: testdata/loader.c\n\t$* $(CFLAGS) -target bpfeb -c $< -o $@\n\t$(STRIP) -g $@\n\n%-el.elf: %.c\n\t$(CLANG) $(CFLAGS) -target bpfel -c $< -o $@\n\t$(STRIP) -g $@\n\n%-eb.elf : %.c\n\t$(CLANG) $(CFLAGS) -target bpfeb -c $< -o $@\n\t$(STRIP) -g $@\n\n.PHONY: generate-btf\ngenerate-btf: KERNEL_VERSION?=5.19\ngenerate-btf:\n\t$(eval TMP := $(shell mktemp -d))\n\tcurl -fL \"$(CI_KERNEL_URL)/linux-$(KERNEL_VERSION).bz\" -o \"$(TMP)/bzImage\"\n\t/lib/modules/$(uname -r)/build/scripts/extract-vmlinux \"$(TMP)/bzImage\" > \"$(TMP)/vmlinux\"\n\t$(OBJCOPY) --dump-section .BTF=/dev/stdout \"$(TMP)/vmlinux\" /dev/null | gzip > \"btf/testdata/vmlinux.btf.gz\"\n\tcurl -fL \"$(CI_KERNEL_URL)/linux-$(KERNEL_VERSION)-selftests-bpf.tgz\" -o \"$(TMP)/selftests.tgz\"\n\ttar -xf \"$(TMP)/selftests.tgz\" --to-stdout tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.ko | \\\n\t\t$(OBJCOPY) --dump-section .BTF=\"btf/testdata/btf_testmod.btf\" - /dev/null\n\t$(RM) -r \"$(TMP)\"\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/README.md",
    "content": "# eBPF\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/cilium/ebpf)](https://pkg.go.dev/github.com/cilium/ebpf)\n\n![HoneyGopher](.github/images/cilium-ebpf.png)\n\nebpf-go is a pure Go library that provides utilities for loading, compiling, and\ndebugging eBPF programs. It has minimal external dependencies and is intended to\nbe used in long running processes.\n\nSee [ebpf.io](https://ebpf.io) for complementary projects from the wider eBPF\necosystem.\n\n## Getting Started\n\nA small collection of Go and eBPF programs that serve as examples for building\nyour own tools can be found under [examples/](examples/).\n\n[Contributions](CONTRIBUTING.md) are highly encouraged, as they highlight certain use cases of\neBPF and the library, and help shape the future of the project.\n\n## Getting Help\n\nThe community actively monitors our [GitHub Discussions](https://github.com/cilium/ebpf/discussions) page.\nPlease search for existing threads before starting a new one. Refrain from\nopening issues on the bug tracker if you're just starting out or if you're not\nsure if something is a bug in the library code.\n\nAlternatively, [join](https://ebpf.io/slack) the\n[#ebpf-go](https://cilium.slack.com/messages/ebpf-go) channel on Slack if you\nhave other questions regarding the project. Note that this channel is ephemeral\nand has its history erased past a certain point, which is less helpful for\nothers running into the same problem later.\n\n## Packages\n\nThis library includes the following packages:\n\n* [asm](https://pkg.go.dev/github.com/cilium/ebpf/asm) contains a basic\n  assembler, allowing you to write eBPF assembly instructions directly\n  within your Go code. (You don't need to use this if you prefer to write your eBPF program in C.)\n* [cmd/bpf2go](https://pkg.go.dev/github.com/cilium/ebpf/cmd/bpf2go) allows\n  compiling and embedding eBPF programs written in C within Go code. As well as\n  compiling the C code, it auto-generates Go code for loading and manipulating\n  the eBPF program and map objects.\n* [link](https://pkg.go.dev/github.com/cilium/ebpf/link) allows attaching eBPF\n  to various hooks\n* [perf](https://pkg.go.dev/github.com/cilium/ebpf/perf) allows reading from a\n  `PERF_EVENT_ARRAY`\n* [ringbuf](https://pkg.go.dev/github.com/cilium/ebpf/ringbuf) allows reading from a\n  `BPF_MAP_TYPE_RINGBUF` map\n* [features](https://pkg.go.dev/github.com/cilium/ebpf/features) implements the equivalent\n  of `bpftool feature probe` for discovering BPF-related kernel features using native Go.\n* [rlimit](https://pkg.go.dev/github.com/cilium/ebpf/rlimit) provides a convenient API to lift\n  the `RLIMIT_MEMLOCK` constraint on kernels before 5.11.\n* [btf](https://pkg.go.dev/github.com/cilium/ebpf/btf) allows reading the BPF Type Format.\n\n## Requirements\n\n* A version of Go that is [supported by\n  upstream](https://golang.org/doc/devel/release.html#policy)\n* Linux >= 4.9. CI is run against kernel.org LTS releases. 4.4 should work but is\n  not tested against.\n\n## Regenerating Testdata\n\nRun `make` in the root of this repository to rebuild testdata in all\nsubpackages. This requires Docker, as it relies on a standardized build\nenvironment to keep the build output stable.\n\nIt is possible to regenerate data using Podman by overriding the `CONTAINER_*`\nvariables: `CONTAINER_ENGINE=podman CONTAINER_RUN_ARGS= make`.\n\nThe toolchain image build files are kept in [testdata/docker/](testdata/docker/).\n\n## License\n\nMIT\n\n### eBPF Gopher\n\nThe eBPF honeygopher is based on the Go gopher designed by Renee French.\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/alu.go",
    "content": "package asm\n\n//go:generate stringer -output alu_string.go -type=Source,Endianness,ALUOp\n\n// Source of ALU / ALU64 / Branch operations\n//\n//\tmsb      lsb\n//\t+----+-+---+\n//\t|op  |S|cls|\n//\t+----+-+---+\ntype Source uint8\n\nconst sourceMask OpCode = 0x08\n\n// Source bitmask\nconst (\n\t// InvalidSource is returned by getters when invoked\n\t// on non ALU / branch OpCodes.\n\tInvalidSource Source = 0xff\n\t// ImmSource src is from constant\n\tImmSource Source = 0x00\n\t// RegSource src is from register\n\tRegSource Source = 0x08\n)\n\n// The Endianness of a byte swap instruction.\ntype Endianness uint8\n\nconst endianMask = sourceMask\n\n// Endian flags\nconst (\n\tInvalidEndian Endianness = 0xff\n\t// Convert to little endian\n\tLE Endianness = 0x00\n\t// Convert to big endian\n\tBE Endianness = 0x08\n)\n\n// ALUOp are ALU / ALU64 operations\n//\n//\tmsb      lsb\n//\t+----+-+---+\n//\t|OP  |s|cls|\n//\t+----+-+---+\ntype ALUOp uint8\n\nconst aluMask OpCode = 0xf0\n\nconst (\n\t// InvalidALUOp is returned by getters when invoked\n\t// on non ALU OpCodes\n\tInvalidALUOp ALUOp = 0xff\n\t// Add - addition\n\tAdd ALUOp = 0x00\n\t// Sub - subtraction\n\tSub ALUOp = 0x10\n\t// Mul - multiplication\n\tMul ALUOp = 0x20\n\t// Div - division\n\tDiv ALUOp = 0x30\n\t// Or - bitwise or\n\tOr ALUOp = 0x40\n\t// And - bitwise and\n\tAnd ALUOp = 0x50\n\t// LSh - bitwise shift left\n\tLSh ALUOp = 0x60\n\t// RSh - bitwise shift right\n\tRSh ALUOp = 0x70\n\t// Neg - sign/unsign signing bit\n\tNeg ALUOp = 0x80\n\t// Mod - modulo\n\tMod ALUOp = 0x90\n\t// Xor - bitwise xor\n\tXor ALUOp = 0xa0\n\t// Mov - move value from one place to another\n\tMov ALUOp = 0xb0\n\t// ArSh - arithmatic shift\n\tArSh ALUOp = 0xc0\n\t// Swap - endian conversions\n\tSwap ALUOp = 0xd0\n)\n\n// HostTo converts from host to another endianness.\nfunc HostTo(endian Endianness, dst Register, size Size) Instruction {\n\tvar imm int64\n\tswitch size {\n\tcase Half:\n\t\timm = 16\n\tcase Word:\n\t\timm = 32\n\tcase DWord:\n\t\timm = 64\n\tdefault:\n\t\treturn Instruction{OpCode: InvalidOpCode}\n\t}\n\n\treturn Instruction{\n\t\tOpCode:   OpCode(ALUClass).SetALUOp(Swap).SetSource(Source(endian)),\n\t\tDst:      dst,\n\t\tConstant: imm,\n\t}\n}\n\n// Op returns the OpCode for an ALU operation with a given source.\nfunc (op ALUOp) Op(source Source) OpCode {\n\treturn OpCode(ALU64Class).SetALUOp(op).SetSource(source)\n}\n\n// Reg emits `dst (op) src`.\nfunc (op ALUOp) Reg(dst, src Register) Instruction {\n\treturn Instruction{\n\t\tOpCode: op.Op(RegSource),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t}\n}\n\n// Imm emits `dst (op) value`.\nfunc (op ALUOp) Imm(dst Register, value int32) Instruction {\n\treturn Instruction{\n\t\tOpCode:   op.Op(ImmSource),\n\t\tDst:      dst,\n\t\tConstant: int64(value),\n\t}\n}\n\n// Op32 returns the OpCode for a 32-bit ALU operation with a given source.\nfunc (op ALUOp) Op32(source Source) OpCode {\n\treturn OpCode(ALUClass).SetALUOp(op).SetSource(source)\n}\n\n// Reg32 emits `dst (op) src`, zeroing the upper 32 bit of dst.\nfunc (op ALUOp) Reg32(dst, src Register) Instruction {\n\treturn Instruction{\n\t\tOpCode: op.Op32(RegSource),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t}\n}\n\n// Imm32 emits `dst (op) value`, zeroing the upper 32 bit of dst.\nfunc (op ALUOp) Imm32(dst Register, value int32) Instruction {\n\treturn Instruction{\n\t\tOpCode:   op.Op32(ImmSource),\n\t\tDst:      dst,\n\t\tConstant: int64(value),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/alu_string.go",
    "content": "// Code generated by \"stringer -output alu_string.go -type=Source,Endianness,ALUOp\"; DO NOT EDIT.\n\npackage asm\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[InvalidSource-255]\n\t_ = x[ImmSource-0]\n\t_ = x[RegSource-8]\n}\n\nconst (\n\t_Source_name_0 = \"ImmSource\"\n\t_Source_name_1 = \"RegSource\"\n\t_Source_name_2 = \"InvalidSource\"\n)\n\nfunc (i Source) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Source_name_0\n\tcase i == 8:\n\t\treturn _Source_name_1\n\tcase i == 255:\n\t\treturn _Source_name_2\n\tdefault:\n\t\treturn \"Source(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[InvalidEndian-255]\n\t_ = x[LE-0]\n\t_ = x[BE-8]\n}\n\nconst (\n\t_Endianness_name_0 = \"LE\"\n\t_Endianness_name_1 = \"BE\"\n\t_Endianness_name_2 = \"InvalidEndian\"\n)\n\nfunc (i Endianness) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Endianness_name_0\n\tcase i == 8:\n\t\treturn _Endianness_name_1\n\tcase i == 255:\n\t\treturn _Endianness_name_2\n\tdefault:\n\t\treturn \"Endianness(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[InvalidALUOp-255]\n\t_ = x[Add-0]\n\t_ = x[Sub-16]\n\t_ = x[Mul-32]\n\t_ = x[Div-48]\n\t_ = x[Or-64]\n\t_ = x[And-80]\n\t_ = x[LSh-96]\n\t_ = x[RSh-112]\n\t_ = x[Neg-128]\n\t_ = x[Mod-144]\n\t_ = x[Xor-160]\n\t_ = x[Mov-176]\n\t_ = x[ArSh-192]\n\t_ = x[Swap-208]\n}\n\nconst _ALUOp_name = \"AddSubMulDivOrAndLShRShNegModXorMovArShSwapInvalidALUOp\"\n\nvar _ALUOp_map = map[ALUOp]string{\n\t0:   _ALUOp_name[0:3],\n\t16:  _ALUOp_name[3:6],\n\t32:  _ALUOp_name[6:9],\n\t48:  _ALUOp_name[9:12],\n\t64:  _ALUOp_name[12:14],\n\t80:  _ALUOp_name[14:17],\n\t96:  _ALUOp_name[17:20],\n\t112: _ALUOp_name[20:23],\n\t128: _ALUOp_name[23:26],\n\t144: _ALUOp_name[26:29],\n\t160: _ALUOp_name[29:32],\n\t176: _ALUOp_name[32:35],\n\t192: _ALUOp_name[35:39],\n\t208: _ALUOp_name[39:43],\n\t255: _ALUOp_name[43:55],\n}\n\nfunc (i ALUOp) String() string {\n\tif str, ok := _ALUOp_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"ALUOp(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/doc.go",
    "content": "// Package asm is an assembler for eBPF bytecode.\npackage asm\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/func.go",
    "content": "package asm\n\n//go:generate stringer -output func_string.go -type=BuiltinFunc\n\n// BuiltinFunc is a built-in eBPF function.\ntype BuiltinFunc int32\n\nfunc (_ BuiltinFunc) Max() BuiltinFunc {\n\treturn maxBuiltinFunc - 1\n}\n\n// eBPF built-in functions\n//\n// You can regenerate this list using the following gawk script:\n//\n//\t/FN\\(.+\\),/ {\n//\t  match($1, /\\(([a-z_0-9]+),/, r)\n//\t  split(r[1], p, \"_\")\n//\t  printf \"Fn\"\n//\t  for (i in p) {\n//\t    printf \"%s%s\", toupper(substr(p[i], 1, 1)), substr(p[i], 2)\n//\t  }\n//\t  print \"\"\n//\t}\n//\n// The script expects include/uapi/linux/bpf.h as it's input.\nconst (\n\tFnUnspec BuiltinFunc = iota\n\tFnMapLookupElem\n\tFnMapUpdateElem\n\tFnMapDeleteElem\n\tFnProbeRead\n\tFnKtimeGetNs\n\tFnTracePrintk\n\tFnGetPrandomU32\n\tFnGetSmpProcessorId\n\tFnSkbStoreBytes\n\tFnL3CsumReplace\n\tFnL4CsumReplace\n\tFnTailCall\n\tFnCloneRedirect\n\tFnGetCurrentPidTgid\n\tFnGetCurrentUidGid\n\tFnGetCurrentComm\n\tFnGetCgroupClassid\n\tFnSkbVlanPush\n\tFnSkbVlanPop\n\tFnSkbGetTunnelKey\n\tFnSkbSetTunnelKey\n\tFnPerfEventRead\n\tFnRedirect\n\tFnGetRouteRealm\n\tFnPerfEventOutput\n\tFnSkbLoadBytes\n\tFnGetStackid\n\tFnCsumDiff\n\tFnSkbGetTunnelOpt\n\tFnSkbSetTunnelOpt\n\tFnSkbChangeProto\n\tFnSkbChangeType\n\tFnSkbUnderCgroup\n\tFnGetHashRecalc\n\tFnGetCurrentTask\n\tFnProbeWriteUser\n\tFnCurrentTaskUnderCgroup\n\tFnSkbChangeTail\n\tFnSkbPullData\n\tFnCsumUpdate\n\tFnSetHashInvalid\n\tFnGetNumaNodeId\n\tFnSkbChangeHead\n\tFnXdpAdjustHead\n\tFnProbeReadStr\n\tFnGetSocketCookie\n\tFnGetSocketUid\n\tFnSetHash\n\tFnSetsockopt\n\tFnSkbAdjustRoom\n\tFnRedirectMap\n\tFnSkRedirectMap\n\tFnSockMapUpdate\n\tFnXdpAdjustMeta\n\tFnPerfEventReadValue\n\tFnPerfProgReadValue\n\tFnGetsockopt\n\tFnOverrideReturn\n\tFnSockOpsCbFlagsSet\n\tFnMsgRedirectMap\n\tFnMsgApplyBytes\n\tFnMsgCorkBytes\n\tFnMsgPullData\n\tFnBind\n\tFnXdpAdjustTail\n\tFnSkbGetXfrmState\n\tFnGetStack\n\tFnSkbLoadBytesRelative\n\tFnFibLookup\n\tFnSockHashUpdate\n\tFnMsgRedirectHash\n\tFnSkRedirectHash\n\tFnLwtPushEncap\n\tFnLwtSeg6StoreBytes\n\tFnLwtSeg6AdjustSrh\n\tFnLwtSeg6Action\n\tFnRcRepeat\n\tFnRcKeydown\n\tFnSkbCgroupId\n\tFnGetCurrentCgroupId\n\tFnGetLocalStorage\n\tFnSkSelectReuseport\n\tFnSkbAncestorCgroupId\n\tFnSkLookupTcp\n\tFnSkLookupUdp\n\tFnSkRelease\n\tFnMapPushElem\n\tFnMapPopElem\n\tFnMapPeekElem\n\tFnMsgPushData\n\tFnMsgPopData\n\tFnRcPointerRel\n\tFnSpinLock\n\tFnSpinUnlock\n\tFnSkFullsock\n\tFnTcpSock\n\tFnSkbEcnSetCe\n\tFnGetListenerSock\n\tFnSkcLookupTcp\n\tFnTcpCheckSyncookie\n\tFnSysctlGetName\n\tFnSysctlGetCurrentValue\n\tFnSysctlGetNewValue\n\tFnSysctlSetNewValue\n\tFnStrtol\n\tFnStrtoul\n\tFnSkStorageGet\n\tFnSkStorageDelete\n\tFnSendSignal\n\tFnTcpGenSyncookie\n\tFnSkbOutput\n\tFnProbeReadUser\n\tFnProbeReadKernel\n\tFnProbeReadUserStr\n\tFnProbeReadKernelStr\n\tFnTcpSendAck\n\tFnSendSignalThread\n\tFnJiffies64\n\tFnReadBranchRecords\n\tFnGetNsCurrentPidTgid\n\tFnXdpOutput\n\tFnGetNetnsCookie\n\tFnGetCurrentAncestorCgroupId\n\tFnSkAssign\n\tFnKtimeGetBootNs\n\tFnSeqPrintf\n\tFnSeqWrite\n\tFnSkCgroupId\n\tFnSkAncestorCgroupId\n\tFnRingbufOutput\n\tFnRingbufReserve\n\tFnRingbufSubmit\n\tFnRingbufDiscard\n\tFnRingbufQuery\n\tFnCsumLevel\n\tFnSkcToTcp6Sock\n\tFnSkcToTcpSock\n\tFnSkcToTcpTimewaitSock\n\tFnSkcToTcpRequestSock\n\tFnSkcToUdp6Sock\n\tFnGetTaskStack\n\tFnLoadHdrOpt\n\tFnStoreHdrOpt\n\tFnReserveHdrOpt\n\tFnInodeStorageGet\n\tFnInodeStorageDelete\n\tFnDPath\n\tFnCopyFromUser\n\tFnSnprintfBtf\n\tFnSeqPrintfBtf\n\tFnSkbCgroupClassid\n\tFnRedirectNeigh\n\tFnPerCpuPtr\n\tFnThisCpuPtr\n\tFnRedirectPeer\n\tFnTaskStorageGet\n\tFnTaskStorageDelete\n\tFnGetCurrentTaskBtf\n\tFnBprmOptsSet\n\tFnKtimeGetCoarseNs\n\tFnImaInodeHash\n\tFnSockFromFile\n\tFnCheckMtu\n\tFnForEachMapElem\n\tFnSnprintf\n\tFnSysBpf\n\tFnBtfFindByNameKind\n\tFnSysClose\n\tFnTimerInit\n\tFnTimerSetCallback\n\tFnTimerStart\n\tFnTimerCancel\n\tFnGetFuncIp\n\tFnGetAttachCookie\n\tFnTaskPtRegs\n\tFnGetBranchSnapshot\n\tFnTraceVprintk\n\tFnSkcToUnixSock\n\tFnKallsymsLookupName\n\tFnFindVma\n\tFnLoop\n\tFnStrncmp\n\tFnGetFuncArg\n\tFnGetFuncRet\n\tFnGetFuncArgCnt\n\tFnGetRetval\n\tFnSetRetval\n\tFnXdpGetBuffLen\n\tFnXdpLoadBytes\n\tFnXdpStoreBytes\n\tFnCopyFromUserTask\n\tFnSkbSetTstamp\n\tFnImaFileHash\n\tFnKptrXchg\n\tFnMapLookupPercpuElem\n\tFnSkcToMptcpSock\n\tFnDynptrFromMem\n\tFnRingbufReserveDynptr\n\tFnRingbufSubmitDynptr\n\tFnRingbufDiscardDynptr\n\tFnDynptrRead\n\tFnDynptrWrite\n\tFnDynptrData\n\tFnTcpRawGenSyncookieIpv4\n\tFnTcpRawGenSyncookieIpv6\n\tFnTcpRawCheckSyncookieIpv4\n\tFnTcpRawCheckSyncookieIpv6\n\tFnKtimeGetTaiNs\n\tFnUserRingbufDrain\n\tFnCgrpStorageGet\n\tFnCgrpStorageDelete\n\n\tmaxBuiltinFunc\n)\n\n// Call emits a function call.\nfunc (fn BuiltinFunc) Call() Instruction {\n\treturn Instruction{\n\t\tOpCode:   OpCode(JumpClass).SetJumpOp(Call),\n\t\tConstant: int64(fn),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/func_string.go",
    "content": "// Code generated by \"stringer -output func_string.go -type=BuiltinFunc\"; DO NOT EDIT.\n\npackage asm\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[FnUnspec-0]\n\t_ = x[FnMapLookupElem-1]\n\t_ = x[FnMapUpdateElem-2]\n\t_ = x[FnMapDeleteElem-3]\n\t_ = x[FnProbeRead-4]\n\t_ = x[FnKtimeGetNs-5]\n\t_ = x[FnTracePrintk-6]\n\t_ = x[FnGetPrandomU32-7]\n\t_ = x[FnGetSmpProcessorId-8]\n\t_ = x[FnSkbStoreBytes-9]\n\t_ = x[FnL3CsumReplace-10]\n\t_ = x[FnL4CsumReplace-11]\n\t_ = x[FnTailCall-12]\n\t_ = x[FnCloneRedirect-13]\n\t_ = x[FnGetCurrentPidTgid-14]\n\t_ = x[FnGetCurrentUidGid-15]\n\t_ = x[FnGetCurrentComm-16]\n\t_ = x[FnGetCgroupClassid-17]\n\t_ = x[FnSkbVlanPush-18]\n\t_ = x[FnSkbVlanPop-19]\n\t_ = x[FnSkbGetTunnelKey-20]\n\t_ = x[FnSkbSetTunnelKey-21]\n\t_ = x[FnPerfEventRead-22]\n\t_ = x[FnRedirect-23]\n\t_ = x[FnGetRouteRealm-24]\n\t_ = x[FnPerfEventOutput-25]\n\t_ = x[FnSkbLoadBytes-26]\n\t_ = x[FnGetStackid-27]\n\t_ = x[FnCsumDiff-28]\n\t_ = x[FnSkbGetTunnelOpt-29]\n\t_ = x[FnSkbSetTunnelOpt-30]\n\t_ = x[FnSkbChangeProto-31]\n\t_ = x[FnSkbChangeType-32]\n\t_ = x[FnSkbUnderCgroup-33]\n\t_ = x[FnGetHashRecalc-34]\n\t_ = x[FnGetCurrentTask-35]\n\t_ = x[FnProbeWriteUser-36]\n\t_ = x[FnCurrentTaskUnderCgroup-37]\n\t_ = x[FnSkbChangeTail-38]\n\t_ = x[FnSkbPullData-39]\n\t_ = x[FnCsumUpdate-40]\n\t_ = x[FnSetHashInvalid-41]\n\t_ = x[FnGetNumaNodeId-42]\n\t_ = x[FnSkbChangeHead-43]\n\t_ = x[FnXdpAdjustHead-44]\n\t_ = x[FnProbeReadStr-45]\n\t_ = x[FnGetSocketCookie-46]\n\t_ = x[FnGetSocketUid-47]\n\t_ = x[FnSetHash-48]\n\t_ = x[FnSetsockopt-49]\n\t_ = x[FnSkbAdjustRoom-50]\n\t_ = x[FnRedirectMap-51]\n\t_ = x[FnSkRedirectMap-52]\n\t_ = x[FnSockMapUpdate-53]\n\t_ = x[FnXdpAdjustMeta-54]\n\t_ = x[FnPerfEventReadValue-55]\n\t_ = x[FnPerfProgReadValue-56]\n\t_ = x[FnGetsockopt-57]\n\t_ = x[FnOverrideReturn-58]\n\t_ = x[FnSockOpsCbFlagsSet-59]\n\t_ = x[FnMsgRedirectMap-60]\n\t_ = x[FnMsgApplyBytes-61]\n\t_ = x[FnMsgCorkBytes-62]\n\t_ = x[FnMsgPullData-63]\n\t_ = x[FnBind-64]\n\t_ = x[FnXdpAdjustTail-65]\n\t_ = x[FnSkbGetXfrmState-66]\n\t_ = x[FnGetStack-67]\n\t_ = x[FnSkbLoadBytesRelative-68]\n\t_ = x[FnFibLookup-69]\n\t_ = x[FnSockHashUpdate-70]\n\t_ = x[FnMsgRedirectHash-71]\n\t_ = x[FnSkRedirectHash-72]\n\t_ = x[FnLwtPushEncap-73]\n\t_ = x[FnLwtSeg6StoreBytes-74]\n\t_ = x[FnLwtSeg6AdjustSrh-75]\n\t_ = x[FnLwtSeg6Action-76]\n\t_ = x[FnRcRepeat-77]\n\t_ = x[FnRcKeydown-78]\n\t_ = x[FnSkbCgroupId-79]\n\t_ = x[FnGetCurrentCgroupId-80]\n\t_ = x[FnGetLocalStorage-81]\n\t_ = x[FnSkSelectReuseport-82]\n\t_ = x[FnSkbAncestorCgroupId-83]\n\t_ = x[FnSkLookupTcp-84]\n\t_ = x[FnSkLookupUdp-85]\n\t_ = x[FnSkRelease-86]\n\t_ = x[FnMapPushElem-87]\n\t_ = x[FnMapPopElem-88]\n\t_ = x[FnMapPeekElem-89]\n\t_ = x[FnMsgPushData-90]\n\t_ = x[FnMsgPopData-91]\n\t_ = x[FnRcPointerRel-92]\n\t_ = x[FnSpinLock-93]\n\t_ = x[FnSpinUnlock-94]\n\t_ = x[FnSkFullsock-95]\n\t_ = x[FnTcpSock-96]\n\t_ = x[FnSkbEcnSetCe-97]\n\t_ = x[FnGetListenerSock-98]\n\t_ = x[FnSkcLookupTcp-99]\n\t_ = x[FnTcpCheckSyncookie-100]\n\t_ = x[FnSysctlGetName-101]\n\t_ = x[FnSysctlGetCurrentValue-102]\n\t_ = x[FnSysctlGetNewValue-103]\n\t_ = x[FnSysctlSetNewValue-104]\n\t_ = x[FnStrtol-105]\n\t_ = x[FnStrtoul-106]\n\t_ = x[FnSkStorageGet-107]\n\t_ = x[FnSkStorageDelete-108]\n\t_ = x[FnSendSignal-109]\n\t_ = x[FnTcpGenSyncookie-110]\n\t_ = x[FnSkbOutput-111]\n\t_ = x[FnProbeReadUser-112]\n\t_ = x[FnProbeReadKernel-113]\n\t_ = x[FnProbeReadUserStr-114]\n\t_ = x[FnProbeReadKernelStr-115]\n\t_ = x[FnTcpSendAck-116]\n\t_ = x[FnSendSignalThread-117]\n\t_ = x[FnJiffies64-118]\n\t_ = x[FnReadBranchRecords-119]\n\t_ = x[FnGetNsCurrentPidTgid-120]\n\t_ = x[FnXdpOutput-121]\n\t_ = x[FnGetNetnsCookie-122]\n\t_ = x[FnGetCurrentAncestorCgroupId-123]\n\t_ = x[FnSkAssign-124]\n\t_ = x[FnKtimeGetBootNs-125]\n\t_ = x[FnSeqPrintf-126]\n\t_ = x[FnSeqWrite-127]\n\t_ = x[FnSkCgroupId-128]\n\t_ = x[FnSkAncestorCgroupId-129]\n\t_ = x[FnRingbufOutput-130]\n\t_ = x[FnRingbufReserve-131]\n\t_ = x[FnRingbufSubmit-132]\n\t_ = x[FnRingbufDiscard-133]\n\t_ = x[FnRingbufQuery-134]\n\t_ = x[FnCsumLevel-135]\n\t_ = x[FnSkcToTcp6Sock-136]\n\t_ = x[FnSkcToTcpSock-137]\n\t_ = x[FnSkcToTcpTimewaitSock-138]\n\t_ = x[FnSkcToTcpRequestSock-139]\n\t_ = x[FnSkcToUdp6Sock-140]\n\t_ = x[FnGetTaskStack-141]\n\t_ = x[FnLoadHdrOpt-142]\n\t_ = x[FnStoreHdrOpt-143]\n\t_ = x[FnReserveHdrOpt-144]\n\t_ = x[FnInodeStorageGet-145]\n\t_ = x[FnInodeStorageDelete-146]\n\t_ = x[FnDPath-147]\n\t_ = x[FnCopyFromUser-148]\n\t_ = x[FnSnprintfBtf-149]\n\t_ = x[FnSeqPrintfBtf-150]\n\t_ = x[FnSkbCgroupClassid-151]\n\t_ = x[FnRedirectNeigh-152]\n\t_ = x[FnPerCpuPtr-153]\n\t_ = x[FnThisCpuPtr-154]\n\t_ = x[FnRedirectPeer-155]\n\t_ = x[FnTaskStorageGet-156]\n\t_ = x[FnTaskStorageDelete-157]\n\t_ = x[FnGetCurrentTaskBtf-158]\n\t_ = x[FnBprmOptsSet-159]\n\t_ = x[FnKtimeGetCoarseNs-160]\n\t_ = x[FnImaInodeHash-161]\n\t_ = x[FnSockFromFile-162]\n\t_ = x[FnCheckMtu-163]\n\t_ = x[FnForEachMapElem-164]\n\t_ = x[FnSnprintf-165]\n\t_ = x[FnSysBpf-166]\n\t_ = x[FnBtfFindByNameKind-167]\n\t_ = x[FnSysClose-168]\n\t_ = x[FnTimerInit-169]\n\t_ = x[FnTimerSetCallback-170]\n\t_ = x[FnTimerStart-171]\n\t_ = x[FnTimerCancel-172]\n\t_ = x[FnGetFuncIp-173]\n\t_ = x[FnGetAttachCookie-174]\n\t_ = x[FnTaskPtRegs-175]\n\t_ = x[FnGetBranchSnapshot-176]\n\t_ = x[FnTraceVprintk-177]\n\t_ = x[FnSkcToUnixSock-178]\n\t_ = x[FnKallsymsLookupName-179]\n\t_ = x[FnFindVma-180]\n\t_ = x[FnLoop-181]\n\t_ = x[FnStrncmp-182]\n\t_ = x[FnGetFuncArg-183]\n\t_ = x[FnGetFuncRet-184]\n\t_ = x[FnGetFuncArgCnt-185]\n\t_ = x[FnGetRetval-186]\n\t_ = x[FnSetRetval-187]\n\t_ = x[FnXdpGetBuffLen-188]\n\t_ = x[FnXdpLoadBytes-189]\n\t_ = x[FnXdpStoreBytes-190]\n\t_ = x[FnCopyFromUserTask-191]\n\t_ = x[FnSkbSetTstamp-192]\n\t_ = x[FnImaFileHash-193]\n\t_ = x[FnKptrXchg-194]\n\t_ = x[FnMapLookupPercpuElem-195]\n\t_ = x[FnSkcToMptcpSock-196]\n\t_ = x[FnDynptrFromMem-197]\n\t_ = x[FnRingbufReserveDynptr-198]\n\t_ = x[FnRingbufSubmitDynptr-199]\n\t_ = x[FnRingbufDiscardDynptr-200]\n\t_ = x[FnDynptrRead-201]\n\t_ = x[FnDynptrWrite-202]\n\t_ = x[FnDynptrData-203]\n\t_ = x[FnTcpRawGenSyncookieIpv4-204]\n\t_ = x[FnTcpRawGenSyncookieIpv6-205]\n\t_ = x[FnTcpRawCheckSyncookieIpv4-206]\n\t_ = x[FnTcpRawCheckSyncookieIpv6-207]\n\t_ = x[FnKtimeGetTaiNs-208]\n\t_ = x[FnUserRingbufDrain-209]\n\t_ = x[FnCgrpStorageGet-210]\n\t_ = x[FnCgrpStorageDelete-211]\n\t_ = x[maxBuiltinFunc-212]\n}\n\nconst _BuiltinFunc_name = \"FnUnspecFnMapLookupElemFnMapUpdateElemFnMapDeleteElemFnProbeReadFnKtimeGetNsFnTracePrintkFnGetPrandomU32FnGetSmpProcessorIdFnSkbStoreBytesFnL3CsumReplaceFnL4CsumReplaceFnTailCallFnCloneRedirectFnGetCurrentPidTgidFnGetCurrentUidGidFnGetCurrentCommFnGetCgroupClassidFnSkbVlanPushFnSkbVlanPopFnSkbGetTunnelKeyFnSkbSetTunnelKeyFnPerfEventReadFnRedirectFnGetRouteRealmFnPerfEventOutputFnSkbLoadBytesFnGetStackidFnCsumDiffFnSkbGetTunnelOptFnSkbSetTunnelOptFnSkbChangeProtoFnSkbChangeTypeFnSkbUnderCgroupFnGetHashRecalcFnGetCurrentTaskFnProbeWriteUserFnCurrentTaskUnderCgroupFnSkbChangeTailFnSkbPullDataFnCsumUpdateFnSetHashInvalidFnGetNumaNodeIdFnSkbChangeHeadFnXdpAdjustHeadFnProbeReadStrFnGetSocketCookieFnGetSocketUidFnSetHashFnSetsockoptFnSkbAdjustRoomFnRedirectMapFnSkRedirectMapFnSockMapUpdateFnXdpAdjustMetaFnPerfEventReadValueFnPerfProgReadValueFnGetsockoptFnOverrideReturnFnSockOpsCbFlagsSetFnMsgRedirectMapFnMsgApplyBytesFnMsgCorkBytesFnMsgPullDataFnBindFnXdpAdjustTailFnSkbGetXfrmStateFnGetStackFnSkbLoadBytesRelativeFnFibLookupFnSockHashUpdateFnMsgRedirectHashFnSkRedirectHashFnLwtPushEncapFnLwtSeg6StoreBytesFnLwtSeg6AdjustSrhFnLwtSeg6ActionFnRcRepeatFnRcKeydownFnSkbCgroupIdFnGetCurrentCgroupIdFnGetLocalStorageFnSkSelectReuseportFnSkbAncestorCgroupIdFnSkLookupTcpFnSkLookupUdpFnSkReleaseFnMapPushElemFnMapPopElemFnMapPeekElemFnMsgPushDataFnMsgPopDataFnRcPointerRelFnSpinLockFnSpinUnlockFnSkFullsockFnTcpSockFnSkbEcnSetCeFnGetListenerSockFnSkcLookupTcpFnTcpCheckSyncookieFnSysctlGetNameFnSysctlGetCurrentValueFnSysctlGetNewValueFnSysctlSetNewValueFnStrtolFnStrtoulFnSkStorageGetFnSkStorageDeleteFnSendSignalFnTcpGenSyncookieFnSkbOutputFnProbeReadUserFnProbeReadKernelFnProbeReadUserStrFnProbeReadKernelStrFnTcpSendAckFnSendSignalThreadFnJiffies64FnReadBranchRecordsFnGetNsCurrentPidTgidFnXdpOutputFnGetNetnsCookieFnGetCurrentAncestorCgroupIdFnSkAssignFnKtimeGetBootNsFnSeqPrintfFnSeqWriteFnSkCgroupIdFnSkAncestorCgroupIdFnRingbufOutputFnRingbufReserveFnRingbufSubmitFnRingbufDiscardFnRingbufQueryFnCsumLevelFnSkcToTcp6SockFnSkcToTcpSockFnSkcToTcpTimewaitSockFnSkcToTcpRequestSockFnSkcToUdp6SockFnGetTaskStackFnLoadHdrOptFnStoreHdrOptFnReserveHdrOptFnInodeStorageGetFnInodeStorageDeleteFnDPathFnCopyFromUserFnSnprintfBtfFnSeqPrintfBtfFnSkbCgroupClassidFnRedirectNeighFnPerCpuPtrFnThisCpuPtrFnRedirectPeerFnTaskStorageGetFnTaskStorageDeleteFnGetCurrentTaskBtfFnBprmOptsSetFnKtimeGetCoarseNsFnImaInodeHashFnSockFromFileFnCheckMtuFnForEachMapElemFnSnprintfFnSysBpfFnBtfFindByNameKindFnSysCloseFnTimerInitFnTimerSetCallbackFnTimerStartFnTimerCancelFnGetFuncIpFnGetAttachCookieFnTaskPtRegsFnGetBranchSnapshotFnTraceVprintkFnSkcToUnixSockFnKallsymsLookupNameFnFindVmaFnLoopFnStrncmpFnGetFuncArgFnGetFuncRetFnGetFuncArgCntFnGetRetvalFnSetRetvalFnXdpGetBuffLenFnXdpLoadBytesFnXdpStoreBytesFnCopyFromUserTaskFnSkbSetTstampFnImaFileHashFnKptrXchgFnMapLookupPercpuElemFnSkcToMptcpSockFnDynptrFromMemFnRingbufReserveDynptrFnRingbufSubmitDynptrFnRingbufDiscardDynptrFnDynptrReadFnDynptrWriteFnDynptrDataFnTcpRawGenSyncookieIpv4FnTcpRawGenSyncookieIpv6FnTcpRawCheckSyncookieIpv4FnTcpRawCheckSyncookieIpv6FnKtimeGetTaiNsFnUserRingbufDrainFnCgrpStorageGetFnCgrpStorageDeletemaxBuiltinFunc\"\n\nvar _BuiltinFunc_index = [...]uint16{0, 8, 23, 38, 53, 64, 76, 89, 104, 123, 138, 153, 168, 178, 193, 212, 230, 246, 264, 277, 289, 306, 323, 338, 348, 363, 380, 394, 406, 416, 433, 450, 466, 481, 497, 512, 528, 544, 568, 583, 596, 608, 624, 639, 654, 669, 683, 700, 714, 723, 735, 750, 763, 778, 793, 808, 828, 847, 859, 875, 894, 910, 925, 939, 952, 958, 973, 990, 1000, 1022, 1033, 1049, 1066, 1082, 1096, 1115, 1133, 1148, 1158, 1169, 1182, 1202, 1219, 1238, 1259, 1272, 1285, 1296, 1309, 1321, 1334, 1347, 1359, 1373, 1383, 1395, 1407, 1416, 1429, 1446, 1460, 1479, 1494, 1517, 1536, 1555, 1563, 1572, 1586, 1603, 1615, 1632, 1643, 1658, 1675, 1693, 1713, 1725, 1743, 1754, 1773, 1794, 1805, 1821, 1849, 1859, 1875, 1886, 1896, 1908, 1928, 1943, 1959, 1974, 1990, 2004, 2015, 2030, 2044, 2066, 2087, 2102, 2116, 2128, 2141, 2156, 2173, 2193, 2200, 2214, 2227, 2241, 2259, 2274, 2285, 2297, 2311, 2327, 2346, 2365, 2378, 2396, 2410, 2424, 2434, 2450, 2460, 2468, 2487, 2497, 2508, 2526, 2538, 2551, 2562, 2579, 2591, 2610, 2624, 2639, 2659, 2668, 2674, 2683, 2695, 2707, 2722, 2733, 2744, 2759, 2773, 2788, 2806, 2820, 2833, 2843, 2864, 2880, 2895, 2917, 2938, 2960, 2972, 2985, 2997, 3021, 3045, 3071, 3097, 3112, 3130, 3146, 3165, 3179}\n\nfunc (i BuiltinFunc) String() string {\n\tif i < 0 || i >= BuiltinFunc(len(_BuiltinFunc_index)-1) {\n\t\treturn \"BuiltinFunc(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _BuiltinFunc_name[_BuiltinFunc_index[i]:_BuiltinFunc_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/instruction.go",
    "content": "package asm\n\nimport (\n\t\"crypto/sha1\"\n\t\"encoding/binary\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// InstructionSize is the size of a BPF instruction in bytes\nconst InstructionSize = 8\n\n// RawInstructionOffset is an offset in units of raw BPF instructions.\ntype RawInstructionOffset uint64\n\nvar ErrUnreferencedSymbol = errors.New(\"unreferenced symbol\")\nvar ErrUnsatisfiedMapReference = errors.New(\"unsatisfied map reference\")\nvar ErrUnsatisfiedProgramReference = errors.New(\"unsatisfied program reference\")\n\n// Bytes returns the offset of an instruction in bytes.\nfunc (rio RawInstructionOffset) Bytes() uint64 {\n\treturn uint64(rio) * InstructionSize\n}\n\n// Instruction is a single eBPF instruction.\ntype Instruction struct {\n\tOpCode   OpCode\n\tDst      Register\n\tSrc      Register\n\tOffset   int16\n\tConstant int64\n\n\t// Metadata contains optional metadata about this instruction.\n\tMetadata Metadata\n}\n\n// Unmarshal decodes a BPF instruction.\nfunc (ins *Instruction) Unmarshal(r io.Reader, bo binary.ByteOrder) (uint64, error) {\n\tdata := make([]byte, InstructionSize)\n\tif _, err := io.ReadFull(r, data); err != nil {\n\t\treturn 0, err\n\t}\n\n\tins.OpCode = OpCode(data[0])\n\n\tregs := data[1]\n\tswitch bo {\n\tcase binary.LittleEndian:\n\t\tins.Dst, ins.Src = Register(regs&0xF), Register(regs>>4)\n\tcase binary.BigEndian:\n\t\tins.Dst, ins.Src = Register(regs>>4), Register(regs&0xf)\n\t}\n\n\tins.Offset = int16(bo.Uint16(data[2:4]))\n\t// Convert to int32 before widening to int64\n\t// to ensure the signed bit is carried over.\n\tins.Constant = int64(int32(bo.Uint32(data[4:8])))\n\n\tif !ins.OpCode.IsDWordLoad() {\n\t\treturn InstructionSize, nil\n\t}\n\n\t// Pull another instruction from the stream to retrieve the second\n\t// half of the 64-bit immediate value.\n\tif _, err := io.ReadFull(r, data); err != nil {\n\t\t// No Wrap, to avoid io.EOF clash\n\t\treturn 0, errors.New(\"64bit immediate is missing second half\")\n\t}\n\n\t// Require that all fields other than the value are zero.\n\tif bo.Uint32(data[0:4]) != 0 {\n\t\treturn 0, errors.New(\"64bit immediate has non-zero fields\")\n\t}\n\n\tcons1 := uint32(ins.Constant)\n\tcons2 := int32(bo.Uint32(data[4:8]))\n\tins.Constant = int64(cons2)<<32 | int64(cons1)\n\n\treturn 2 * InstructionSize, nil\n}\n\n// Marshal encodes a BPF instruction.\nfunc (ins Instruction) Marshal(w io.Writer, bo binary.ByteOrder) (uint64, error) {\n\tif ins.OpCode == InvalidOpCode {\n\t\treturn 0, errors.New(\"invalid opcode\")\n\t}\n\n\tisDWordLoad := ins.OpCode.IsDWordLoad()\n\n\tcons := int32(ins.Constant)\n\tif isDWordLoad {\n\t\t// Encode least significant 32bit first for 64bit operations.\n\t\tcons = int32(uint32(ins.Constant))\n\t}\n\n\tregs, err := newBPFRegisters(ins.Dst, ins.Src, bo)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"can't marshal registers: %s\", err)\n\t}\n\n\tdata := make([]byte, InstructionSize)\n\tdata[0] = byte(ins.OpCode)\n\tdata[1] = byte(regs)\n\tbo.PutUint16(data[2:4], uint16(ins.Offset))\n\tbo.PutUint32(data[4:8], uint32(cons))\n\tif _, err := w.Write(data); err != nil {\n\t\treturn 0, err\n\t}\n\n\tif !isDWordLoad {\n\t\treturn InstructionSize, nil\n\t}\n\n\t// The first half of the second part of a double-wide instruction\n\t// must be zero. The second half carries the value.\n\tbo.PutUint32(data[0:4], 0)\n\tbo.PutUint32(data[4:8], uint32(ins.Constant>>32))\n\tif _, err := w.Write(data); err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn 2 * InstructionSize, nil\n}\n\n// AssociateMap associates a Map with this Instruction.\n//\n// Implicitly clears the Instruction's Reference field.\n//\n// Returns an error if the Instruction is not a map load.\nfunc (ins *Instruction) AssociateMap(m FDer) error {\n\tif !ins.IsLoadFromMap() {\n\t\treturn errors.New(\"not a load from a map\")\n\t}\n\n\tins.Metadata.Set(referenceMeta{}, nil)\n\tins.Metadata.Set(mapMeta{}, m)\n\n\treturn nil\n}\n\n// RewriteMapPtr changes an instruction to use a new map fd.\n//\n// Returns an error if the instruction doesn't load a map.\n//\n// Deprecated: use AssociateMap instead. If you cannot provide a Map,\n// wrap an fd in a type implementing FDer.\nfunc (ins *Instruction) RewriteMapPtr(fd int) error {\n\tif !ins.IsLoadFromMap() {\n\t\treturn errors.New(\"not a load from a map\")\n\t}\n\n\tins.encodeMapFD(fd)\n\n\treturn nil\n}\n\nfunc (ins *Instruction) encodeMapFD(fd int) {\n\t// Preserve the offset value for direct map loads.\n\toffset := uint64(ins.Constant) & (math.MaxUint32 << 32)\n\trawFd := uint64(uint32(fd))\n\tins.Constant = int64(offset | rawFd)\n}\n\n// MapPtr returns the map fd for this instruction.\n//\n// The result is undefined if the instruction is not a load from a map,\n// see IsLoadFromMap.\n//\n// Deprecated: use Map() instead.\nfunc (ins *Instruction) MapPtr() int {\n\t// If there is a map associated with the instruction, return its FD.\n\tif fd := ins.Metadata.Get(mapMeta{}); fd != nil {\n\t\treturn fd.(FDer).FD()\n\t}\n\n\t// Fall back to the fd stored in the Constant field\n\treturn ins.mapFd()\n}\n\n// mapFd returns the map file descriptor stored in the 32 least significant\n// bits of ins' Constant field.\nfunc (ins *Instruction) mapFd() int {\n\treturn int(int32(ins.Constant))\n}\n\n// RewriteMapOffset changes the offset of a direct load from a map.\n//\n// Returns an error if the instruction is not a direct load.\nfunc (ins *Instruction) RewriteMapOffset(offset uint32) error {\n\tif !ins.OpCode.IsDWordLoad() {\n\t\treturn fmt.Errorf(\"%s is not a 64 bit load\", ins.OpCode)\n\t}\n\n\tif ins.Src != PseudoMapValue {\n\t\treturn errors.New(\"not a direct load from a map\")\n\t}\n\n\tfd := uint64(ins.Constant) & math.MaxUint32\n\tins.Constant = int64(uint64(offset)<<32 | fd)\n\treturn nil\n}\n\nfunc (ins *Instruction) mapOffset() uint32 {\n\treturn uint32(uint64(ins.Constant) >> 32)\n}\n\n// IsLoadFromMap returns true if the instruction loads from a map.\n//\n// This covers both loading the map pointer and direct map value loads.\nfunc (ins *Instruction) IsLoadFromMap() bool {\n\treturn ins.OpCode == LoadImmOp(DWord) && (ins.Src == PseudoMapFD || ins.Src == PseudoMapValue)\n}\n\n// IsFunctionCall returns true if the instruction calls another BPF function.\n//\n// This is not the same thing as a BPF helper call.\nfunc (ins *Instruction) IsFunctionCall() bool {\n\treturn ins.OpCode.JumpOp() == Call && ins.Src == PseudoCall\n}\n\n// IsKfuncCall returns true if the instruction calls a kfunc.\n//\n// This is not the same thing as a BPF helper call.\nfunc (ins *Instruction) IsKfuncCall() bool {\n\treturn ins.OpCode.JumpOp() == Call && ins.Src == PseudoKfuncCall\n}\n\n// IsLoadOfFunctionPointer returns true if the instruction loads a function pointer.\nfunc (ins *Instruction) IsLoadOfFunctionPointer() bool {\n\treturn ins.OpCode.IsDWordLoad() && ins.Src == PseudoFunc\n}\n\n// IsFunctionReference returns true if the instruction references another BPF\n// function, either by invoking a Call jump operation or by loading a function\n// pointer.\nfunc (ins *Instruction) IsFunctionReference() bool {\n\treturn ins.IsFunctionCall() || ins.IsLoadOfFunctionPointer()\n}\n\n// IsBuiltinCall returns true if the instruction is a built-in call, i.e. BPF helper call.\nfunc (ins *Instruction) IsBuiltinCall() bool {\n\treturn ins.OpCode.JumpOp() == Call && ins.Src == R0 && ins.Dst == R0\n}\n\n// IsConstantLoad returns true if the instruction loads a constant of the\n// given size.\nfunc (ins *Instruction) IsConstantLoad(size Size) bool {\n\treturn ins.OpCode == LoadImmOp(size) && ins.Src == R0 && ins.Offset == 0\n}\n\n// Format implements fmt.Formatter.\nfunc (ins Instruction) Format(f fmt.State, c rune) {\n\tif c != 'v' {\n\t\tfmt.Fprintf(f, \"{UNRECOGNIZED: %c}\", c)\n\t\treturn\n\t}\n\n\top := ins.OpCode\n\n\tif op == InvalidOpCode {\n\t\tfmt.Fprint(f, \"INVALID\")\n\t\treturn\n\t}\n\n\t// Omit trailing space for Exit\n\tif op.JumpOp() == Exit {\n\t\tfmt.Fprint(f, op)\n\t\treturn\n\t}\n\n\tif ins.IsLoadFromMap() {\n\t\tfd := ins.mapFd()\n\t\tm := ins.Map()\n\t\tswitch ins.Src {\n\t\tcase PseudoMapFD:\n\t\t\tif m != nil {\n\t\t\t\tfmt.Fprintf(f, \"LoadMapPtr dst: %s map: %s\", ins.Dst, m)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(f, \"LoadMapPtr dst: %s fd: %d\", ins.Dst, fd)\n\t\t\t}\n\n\t\tcase PseudoMapValue:\n\t\t\tif m != nil {\n\t\t\t\tfmt.Fprintf(f, \"LoadMapValue dst: %s, map: %s off: %d\", ins.Dst, m, ins.mapOffset())\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(f, \"LoadMapValue dst: %s, fd: %d off: %d\", ins.Dst, fd, ins.mapOffset())\n\t\t\t}\n\t\t}\n\n\t\tgoto ref\n\t}\n\n\tfmt.Fprintf(f, \"%v \", op)\n\tswitch cls := op.Class(); {\n\tcase cls.isLoadOrStore():\n\t\tswitch op.Mode() {\n\t\tcase ImmMode:\n\t\t\tfmt.Fprintf(f, \"dst: %s imm: %d\", ins.Dst, ins.Constant)\n\t\tcase AbsMode:\n\t\t\tfmt.Fprintf(f, \"imm: %d\", ins.Constant)\n\t\tcase IndMode:\n\t\t\tfmt.Fprintf(f, \"dst: %s src: %s imm: %d\", ins.Dst, ins.Src, ins.Constant)\n\t\tcase MemMode:\n\t\t\tfmt.Fprintf(f, \"dst: %s src: %s off: %d imm: %d\", ins.Dst, ins.Src, ins.Offset, ins.Constant)\n\t\tcase XAddMode:\n\t\t\tfmt.Fprintf(f, \"dst: %s src: %s\", ins.Dst, ins.Src)\n\t\t}\n\n\tcase cls.IsALU():\n\t\tfmt.Fprintf(f, \"dst: %s \", ins.Dst)\n\t\tif op.ALUOp() == Swap || op.Source() == ImmSource {\n\t\t\tfmt.Fprintf(f, \"imm: %d\", ins.Constant)\n\t\t} else {\n\t\t\tfmt.Fprintf(f, \"src: %s\", ins.Src)\n\t\t}\n\n\tcase cls.IsJump():\n\t\tswitch jop := op.JumpOp(); jop {\n\t\tcase Call:\n\t\t\tswitch ins.Src {\n\t\t\tcase PseudoCall:\n\t\t\t\t// bpf-to-bpf call\n\t\t\t\tfmt.Fprint(f, ins.Constant)\n\t\t\tcase PseudoKfuncCall:\n\t\t\t\t// kfunc call\n\t\t\t\tfmt.Fprintf(f, \"Kfunc(%d)\", ins.Constant)\n\t\t\tdefault:\n\t\t\t\tfmt.Fprint(f, BuiltinFunc(ins.Constant))\n\t\t\t}\n\n\t\tdefault:\n\t\t\tfmt.Fprintf(f, \"dst: %s off: %d \", ins.Dst, ins.Offset)\n\t\t\tif op.Source() == ImmSource {\n\t\t\t\tfmt.Fprintf(f, \"imm: %d\", ins.Constant)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(f, \"src: %s\", ins.Src)\n\t\t\t}\n\t\t}\n\t}\n\nref:\n\tif ins.Reference() != \"\" {\n\t\tfmt.Fprintf(f, \" <%s>\", ins.Reference())\n\t}\n}\n\nfunc (ins Instruction) equal(other Instruction) bool {\n\treturn ins.OpCode == other.OpCode &&\n\t\tins.Dst == other.Dst &&\n\t\tins.Src == other.Src &&\n\t\tins.Offset == other.Offset &&\n\t\tins.Constant == other.Constant\n}\n\n// Size returns the amount of bytes ins would occupy in binary form.\nfunc (ins Instruction) Size() uint64 {\n\treturn uint64(InstructionSize * ins.OpCode.rawInstructions())\n}\n\n// WithMetadata sets the given Metadata on the Instruction. e.g. to copy\n// Metadata from another Instruction when replacing it.\nfunc (ins Instruction) WithMetadata(meta Metadata) Instruction {\n\tins.Metadata = meta\n\treturn ins\n}\n\ntype symbolMeta struct{}\n\n// WithSymbol marks the Instruction as a Symbol, which other Instructions\n// can point to using corresponding calls to WithReference.\nfunc (ins Instruction) WithSymbol(name string) Instruction {\n\tins.Metadata.Set(symbolMeta{}, name)\n\treturn ins\n}\n\n// Sym creates a symbol.\n//\n// Deprecated: use WithSymbol instead.\nfunc (ins Instruction) Sym(name string) Instruction {\n\treturn ins.WithSymbol(name)\n}\n\n// Symbol returns the value ins has been marked with using WithSymbol,\n// otherwise returns an empty string. A symbol is often an Instruction\n// at the start of a function body.\nfunc (ins Instruction) Symbol() string {\n\tsym, _ := ins.Metadata.Get(symbolMeta{}).(string)\n\treturn sym\n}\n\ntype referenceMeta struct{}\n\n// WithReference makes ins reference another Symbol or map by name.\nfunc (ins Instruction) WithReference(ref string) Instruction {\n\tins.Metadata.Set(referenceMeta{}, ref)\n\treturn ins\n}\n\n// Reference returns the Symbol or map name referenced by ins, if any.\nfunc (ins Instruction) Reference() string {\n\tref, _ := ins.Metadata.Get(referenceMeta{}).(string)\n\treturn ref\n}\n\ntype mapMeta struct{}\n\n// Map returns the Map referenced by ins, if any.\n// An Instruction will contain a Map if e.g. it references an existing,\n// pinned map that was opened during ELF loading.\nfunc (ins Instruction) Map() FDer {\n\tfd, _ := ins.Metadata.Get(mapMeta{}).(FDer)\n\treturn fd\n}\n\ntype sourceMeta struct{}\n\n// WithSource adds source information about the Instruction.\nfunc (ins Instruction) WithSource(src fmt.Stringer) Instruction {\n\tins.Metadata.Set(sourceMeta{}, src)\n\treturn ins\n}\n\n// Source returns source information about the Instruction. The field is\n// present when the compiler emits BTF line info about the Instruction and\n// usually contains the line of source code responsible for it.\nfunc (ins Instruction) Source() fmt.Stringer {\n\tstr, _ := ins.Metadata.Get(sourceMeta{}).(fmt.Stringer)\n\treturn str\n}\n\n// A Comment can be passed to Instruction.WithSource to add a comment\n// to an instruction.\ntype Comment string\n\nfunc (s Comment) String() string {\n\treturn string(s)\n}\n\n// FDer represents a resource tied to an underlying file descriptor.\n// Used as a stand-in for e.g. ebpf.Map since that type cannot be\n// imported here and FD() is the only method we rely on.\ntype FDer interface {\n\tFD() int\n}\n\n// Instructions is an eBPF program.\ntype Instructions []Instruction\n\n// Unmarshal unmarshals an Instructions from a binary instruction stream.\n// All instructions in insns are replaced by instructions decoded from r.\nfunc (insns *Instructions) Unmarshal(r io.Reader, bo binary.ByteOrder) error {\n\tif len(*insns) > 0 {\n\t\t*insns = nil\n\t}\n\n\tvar offset uint64\n\tfor {\n\t\tvar ins Instruction\n\t\tn, err := ins.Unmarshal(r, bo)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"offset %d: %w\", offset, err)\n\t\t}\n\n\t\t*insns = append(*insns, ins)\n\t\toffset += n\n\t}\n\n\treturn nil\n}\n\n// Name returns the name of the function insns belongs to, if any.\nfunc (insns Instructions) Name() string {\n\tif len(insns) == 0 {\n\t\treturn \"\"\n\t}\n\treturn insns[0].Symbol()\n}\n\nfunc (insns Instructions) String() string {\n\treturn fmt.Sprint(insns)\n}\n\n// Size returns the amount of bytes insns would occupy in binary form.\nfunc (insns Instructions) Size() uint64 {\n\tvar sum uint64\n\tfor _, ins := range insns {\n\t\tsum += ins.Size()\n\t}\n\treturn sum\n}\n\n// AssociateMap updates all Instructions that Reference the given symbol\n// to point to an existing Map m instead.\n//\n// Returns ErrUnreferencedSymbol error if no references to symbol are found\n// in insns. If symbol is anything else than the symbol name of map (e.g.\n// a bpf2bpf subprogram), an error is returned.\nfunc (insns Instructions) AssociateMap(symbol string, m FDer) error {\n\tif symbol == \"\" {\n\t\treturn errors.New(\"empty symbol\")\n\t}\n\n\tvar found bool\n\tfor i := range insns {\n\t\tins := &insns[i]\n\t\tif ins.Reference() != symbol {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := ins.AssociateMap(m); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tfound = true\n\t}\n\n\tif !found {\n\t\treturn fmt.Errorf(\"symbol %s: %w\", symbol, ErrUnreferencedSymbol)\n\t}\n\n\treturn nil\n}\n\n// RewriteMapPtr rewrites all loads of a specific map pointer to a new fd.\n//\n// Returns ErrUnreferencedSymbol if the symbol isn't used.\n//\n// Deprecated: use AssociateMap instead.\nfunc (insns Instructions) RewriteMapPtr(symbol string, fd int) error {\n\tif symbol == \"\" {\n\t\treturn errors.New(\"empty symbol\")\n\t}\n\n\tvar found bool\n\tfor i := range insns {\n\t\tins := &insns[i]\n\t\tif ins.Reference() != symbol {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !ins.IsLoadFromMap() {\n\t\t\treturn errors.New(\"not a load from a map\")\n\t\t}\n\n\t\tins.encodeMapFD(fd)\n\n\t\tfound = true\n\t}\n\n\tif !found {\n\t\treturn fmt.Errorf(\"symbol %s: %w\", symbol, ErrUnreferencedSymbol)\n\t}\n\n\treturn nil\n}\n\n// SymbolOffsets returns the set of symbols and their offset in\n// the instructions.\nfunc (insns Instructions) SymbolOffsets() (map[string]int, error) {\n\toffsets := make(map[string]int)\n\n\tfor i, ins := range insns {\n\t\tif ins.Symbol() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, ok := offsets[ins.Symbol()]; ok {\n\t\t\treturn nil, fmt.Errorf(\"duplicate symbol %s\", ins.Symbol())\n\t\t}\n\n\t\toffsets[ins.Symbol()] = i\n\t}\n\n\treturn offsets, nil\n}\n\n// FunctionReferences returns a set of symbol names these Instructions make\n// bpf-to-bpf calls to.\nfunc (insns Instructions) FunctionReferences() []string {\n\tcalls := make(map[string]struct{})\n\tfor _, ins := range insns {\n\t\tif ins.Constant != -1 {\n\t\t\t// BPF-to-BPF calls have -1 constants.\n\t\t\tcontinue\n\t\t}\n\n\t\tif ins.Reference() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !ins.IsFunctionReference() {\n\t\t\tcontinue\n\t\t}\n\n\t\tcalls[ins.Reference()] = struct{}{}\n\t}\n\n\tresult := make([]string, 0, len(calls))\n\tfor call := range calls {\n\t\tresult = append(result, call)\n\t}\n\n\tsort.Strings(result)\n\treturn result\n}\n\n// ReferenceOffsets returns the set of references and their offset in\n// the instructions.\nfunc (insns Instructions) ReferenceOffsets() map[string][]int {\n\toffsets := make(map[string][]int)\n\n\tfor i, ins := range insns {\n\t\tif ins.Reference() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\toffsets[ins.Reference()] = append(offsets[ins.Reference()], i)\n\t}\n\n\treturn offsets\n}\n\n// Format implements fmt.Formatter.\n//\n// You can control indentation of symbols by\n// specifying a width. Setting a precision controls the indentation of\n// instructions.\n// The default character is a tab, which can be overridden by specifying\n// the ' ' space flag.\nfunc (insns Instructions) Format(f fmt.State, c rune) {\n\tif c != 's' && c != 'v' {\n\t\tfmt.Fprintf(f, \"{UNKNOWN FORMAT '%c'}\", c)\n\t\treturn\n\t}\n\n\t// Precision is better in this case, because it allows\n\t// specifying 0 padding easily.\n\tpadding, ok := f.Precision()\n\tif !ok {\n\t\tpadding = 1\n\t}\n\n\tindent := strings.Repeat(\"\\t\", padding)\n\tif f.Flag(' ') {\n\t\tindent = strings.Repeat(\" \", padding)\n\t}\n\n\tsymPadding, ok := f.Width()\n\tif !ok {\n\t\tsymPadding = padding - 1\n\t}\n\tif symPadding < 0 {\n\t\tsymPadding = 0\n\t}\n\n\tsymIndent := strings.Repeat(\"\\t\", symPadding)\n\tif f.Flag(' ') {\n\t\tsymIndent = strings.Repeat(\" \", symPadding)\n\t}\n\n\t// Guess how many digits we need at most, by assuming that all instructions\n\t// are double wide.\n\thighestOffset := len(insns) * 2\n\toffsetWidth := int(math.Ceil(math.Log10(float64(highestOffset))))\n\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tif iter.Ins.Symbol() != \"\" {\n\t\t\tfmt.Fprintf(f, \"%s%s:\\n\", symIndent, iter.Ins.Symbol())\n\t\t}\n\t\tif src := iter.Ins.Source(); src != nil {\n\t\t\tline := strings.TrimSpace(src.String())\n\t\t\tif line != \"\" {\n\t\t\t\tfmt.Fprintf(f, \"%s%*s; %s\\n\", indent, offsetWidth, \" \", line)\n\t\t\t}\n\t\t}\n\t\tfmt.Fprintf(f, \"%s%*d: %v\\n\", indent, offsetWidth, iter.Offset, iter.Ins)\n\t}\n}\n\n// Marshal encodes a BPF program into the kernel format.\n//\n// insns may be modified if there are unresolved jumps or bpf2bpf calls.\n//\n// Returns ErrUnsatisfiedProgramReference if there is a Reference Instruction\n// without a matching Symbol Instruction within insns.\nfunc (insns Instructions) Marshal(w io.Writer, bo binary.ByteOrder) error {\n\tif err := insns.encodeFunctionReferences(); err != nil {\n\t\treturn err\n\t}\n\n\tif err := insns.encodeMapPointers(); err != nil {\n\t\treturn err\n\t}\n\n\tfor i, ins := range insns {\n\t\tif _, err := ins.Marshal(w, bo); err != nil {\n\t\t\treturn fmt.Errorf(\"instruction %d: %w\", i, err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Tag calculates the kernel tag for a series of instructions.\n//\n// It mirrors bpf_prog_calc_tag in the kernel and so can be compared\n// to ProgramInfo.Tag to figure out whether a loaded program matches\n// certain instructions.\nfunc (insns Instructions) Tag(bo binary.ByteOrder) (string, error) {\n\th := sha1.New()\n\tfor i, ins := range insns {\n\t\tif ins.IsLoadFromMap() {\n\t\t\tins.Constant = 0\n\t\t}\n\t\t_, err := ins.Marshal(h, bo)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"instruction %d: %w\", i, err)\n\t\t}\n\t}\n\treturn hex.EncodeToString(h.Sum(nil)[:unix.BPF_TAG_SIZE]), nil\n}\n\n// encodeFunctionReferences populates the Offset (or Constant, depending on\n// the instruction type) field of instructions with a Reference field to point\n// to the offset of the corresponding instruction with a matching Symbol field.\n//\n// Only Reference Instructions that are either jumps or BPF function references\n// (calls or function pointer loads) are populated.\n//\n// Returns ErrUnsatisfiedProgramReference if there is a Reference Instruction\n// without at least one corresponding Symbol Instruction within insns.\nfunc (insns Instructions) encodeFunctionReferences() error {\n\t// Index the offsets of instructions tagged as a symbol.\n\tsymbolOffsets := make(map[string]RawInstructionOffset)\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\n\t\tif ins.Symbol() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, ok := symbolOffsets[ins.Symbol()]; ok {\n\t\t\treturn fmt.Errorf(\"duplicate symbol %s\", ins.Symbol())\n\t\t}\n\n\t\tsymbolOffsets[ins.Symbol()] = iter.Offset\n\t}\n\n\t// Find all instructions tagged as references to other symbols.\n\t// Depending on the instruction type, populate their constant or offset\n\t// fields to point to the symbol they refer to within the insn stream.\n\titer = insns.Iterate()\n\tfor iter.Next() {\n\t\ti := iter.Index\n\t\toffset := iter.Offset\n\t\tins := iter.Ins\n\n\t\tif ins.Reference() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch {\n\t\tcase ins.IsFunctionReference() && ins.Constant == -1:\n\t\t\tsymOffset, ok := symbolOffsets[ins.Reference()]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"%s at insn %d: symbol %q: %w\", ins.OpCode, i, ins.Reference(), ErrUnsatisfiedProgramReference)\n\t\t\t}\n\n\t\t\tins.Constant = int64(symOffset - offset - 1)\n\n\t\tcase ins.OpCode.Class().IsJump() && ins.Offset == -1:\n\t\t\tsymOffset, ok := symbolOffsets[ins.Reference()]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"%s at insn %d: symbol %q: %w\", ins.OpCode, i, ins.Reference(), ErrUnsatisfiedProgramReference)\n\t\t\t}\n\n\t\t\tins.Offset = int16(symOffset - offset - 1)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// encodeMapPointers finds all Map Instructions and encodes their FDs\n// into their Constant fields.\nfunc (insns Instructions) encodeMapPointers() error {\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\n\t\tif !ins.IsLoadFromMap() {\n\t\t\tcontinue\n\t\t}\n\n\t\tm := ins.Map()\n\t\tif m == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tfd := m.FD()\n\t\tif fd < 0 {\n\t\t\treturn fmt.Errorf(\"map %s: %w\", m, sys.ErrClosedFd)\n\t\t}\n\n\t\tins.encodeMapFD(m.FD())\n\t}\n\n\treturn nil\n}\n\n// Iterate allows iterating a BPF program while keeping track of\n// various offsets.\n//\n// Modifying the instruction slice will lead to undefined behaviour.\nfunc (insns Instructions) Iterate() *InstructionIterator {\n\treturn &InstructionIterator{insns: insns}\n}\n\n// InstructionIterator iterates over a BPF program.\ntype InstructionIterator struct {\n\tinsns Instructions\n\t// The instruction in question.\n\tIns *Instruction\n\t// The index of the instruction in the original instruction slice.\n\tIndex int\n\t// The offset of the instruction in raw BPF instructions. This accounts\n\t// for double-wide instructions.\n\tOffset RawInstructionOffset\n}\n\n// Next returns true as long as there are any instructions remaining.\nfunc (iter *InstructionIterator) Next() bool {\n\tif len(iter.insns) == 0 {\n\t\treturn false\n\t}\n\n\tif iter.Ins != nil {\n\t\titer.Index++\n\t\titer.Offset += RawInstructionOffset(iter.Ins.OpCode.rawInstructions())\n\t}\n\titer.Ins = &iter.insns[0]\n\titer.insns = iter.insns[1:]\n\treturn true\n}\n\ntype bpfRegisters uint8\n\nfunc newBPFRegisters(dst, src Register, bo binary.ByteOrder) (bpfRegisters, error) {\n\tswitch bo {\n\tcase binary.LittleEndian:\n\t\treturn bpfRegisters((src << 4) | (dst & 0xF)), nil\n\tcase binary.BigEndian:\n\t\treturn bpfRegisters((dst << 4) | (src & 0xF)), nil\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"unrecognized ByteOrder %T\", bo)\n\t}\n}\n\n// IsUnreferencedSymbol returns true if err was caused by\n// an unreferenced symbol.\n//\n// Deprecated: use errors.Is(err, asm.ErrUnreferencedSymbol).\nfunc IsUnreferencedSymbol(err error) bool {\n\treturn errors.Is(err, ErrUnreferencedSymbol)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/jump.go",
    "content": "package asm\n\n//go:generate stringer -output jump_string.go -type=JumpOp\n\n// JumpOp affect control flow.\n//\n//\tmsb      lsb\n//\t+----+-+---+\n//\t|OP  |s|cls|\n//\t+----+-+---+\ntype JumpOp uint8\n\nconst jumpMask OpCode = aluMask\n\nconst (\n\t// InvalidJumpOp is returned by getters when invoked\n\t// on non branch OpCodes\n\tInvalidJumpOp JumpOp = 0xff\n\t// Ja jumps by offset unconditionally\n\tJa JumpOp = 0x00\n\t// JEq jumps by offset if r == imm\n\tJEq JumpOp = 0x10\n\t// JGT jumps by offset if r > imm\n\tJGT JumpOp = 0x20\n\t// JGE jumps by offset if r >= imm\n\tJGE JumpOp = 0x30\n\t// JSet jumps by offset if r & imm\n\tJSet JumpOp = 0x40\n\t// JNE jumps by offset if r != imm\n\tJNE JumpOp = 0x50\n\t// JSGT jumps by offset if signed r > signed imm\n\tJSGT JumpOp = 0x60\n\t// JSGE jumps by offset if signed r >= signed imm\n\tJSGE JumpOp = 0x70\n\t// Call builtin or user defined function from imm\n\tCall JumpOp = 0x80\n\t// Exit ends execution, with value in r0\n\tExit JumpOp = 0x90\n\t// JLT jumps by offset if r < imm\n\tJLT JumpOp = 0xa0\n\t// JLE jumps by offset if r <= imm\n\tJLE JumpOp = 0xb0\n\t// JSLT jumps by offset if signed r < signed imm\n\tJSLT JumpOp = 0xc0\n\t// JSLE jumps by offset if signed r <= signed imm\n\tJSLE JumpOp = 0xd0\n)\n\n// Return emits an exit instruction.\n//\n// Requires a return value in R0.\nfunc Return() Instruction {\n\treturn Instruction{\n\t\tOpCode: OpCode(JumpClass).SetJumpOp(Exit),\n\t}\n}\n\n// Op returns the OpCode for a given jump source.\nfunc (op JumpOp) Op(source Source) OpCode {\n\treturn OpCode(JumpClass).SetJumpOp(op).SetSource(source)\n}\n\n// Imm compares 64 bit dst to 64 bit value (sign extended), and adjusts PC by offset if the condition is fulfilled.\nfunc (op JumpOp) Imm(dst Register, value int32, label string) Instruction {\n\treturn Instruction{\n\t\tOpCode:   op.opCode(JumpClass, ImmSource),\n\t\tDst:      dst,\n\t\tOffset:   -1,\n\t\tConstant: int64(value),\n\t}.WithReference(label)\n}\n\n// Imm32 compares 32 bit dst to 32 bit value, and adjusts PC by offset if the condition is fulfilled.\n// Requires kernel 5.1.\nfunc (op JumpOp) Imm32(dst Register, value int32, label string) Instruction {\n\treturn Instruction{\n\t\tOpCode:   op.opCode(Jump32Class, ImmSource),\n\t\tDst:      dst,\n\t\tOffset:   -1,\n\t\tConstant: int64(value),\n\t}.WithReference(label)\n}\n\n// Reg compares 64 bit dst to 64 bit src, and adjusts PC by offset if the condition is fulfilled.\nfunc (op JumpOp) Reg(dst, src Register, label string) Instruction {\n\treturn Instruction{\n\t\tOpCode: op.opCode(JumpClass, RegSource),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t\tOffset: -1,\n\t}.WithReference(label)\n}\n\n// Reg32 compares 32 bit dst to 32 bit src, and adjusts PC by offset if the condition is fulfilled.\n// Requires kernel 5.1.\nfunc (op JumpOp) Reg32(dst, src Register, label string) Instruction {\n\treturn Instruction{\n\t\tOpCode: op.opCode(Jump32Class, RegSource),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t\tOffset: -1,\n\t}.WithReference(label)\n}\n\nfunc (op JumpOp) opCode(class Class, source Source) OpCode {\n\tif op == Exit || op == Call || op == Ja {\n\t\treturn InvalidOpCode\n\t}\n\n\treturn OpCode(class).SetJumpOp(op).SetSource(source)\n}\n\n// Label adjusts PC to the address of the label.\nfunc (op JumpOp) Label(label string) Instruction {\n\tif op == Call {\n\t\treturn Instruction{\n\t\t\tOpCode:   OpCode(JumpClass).SetJumpOp(Call),\n\t\t\tSrc:      PseudoCall,\n\t\t\tConstant: -1,\n\t\t}.WithReference(label)\n\t}\n\n\treturn Instruction{\n\t\tOpCode: OpCode(JumpClass).SetJumpOp(op),\n\t\tOffset: -1,\n\t}.WithReference(label)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/jump_string.go",
    "content": "// Code generated by \"stringer -output jump_string.go -type=JumpOp\"; DO NOT EDIT.\n\npackage asm\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[InvalidJumpOp-255]\n\t_ = x[Ja-0]\n\t_ = x[JEq-16]\n\t_ = x[JGT-32]\n\t_ = x[JGE-48]\n\t_ = x[JSet-64]\n\t_ = x[JNE-80]\n\t_ = x[JSGT-96]\n\t_ = x[JSGE-112]\n\t_ = x[Call-128]\n\t_ = x[Exit-144]\n\t_ = x[JLT-160]\n\t_ = x[JLE-176]\n\t_ = x[JSLT-192]\n\t_ = x[JSLE-208]\n}\n\nconst _JumpOp_name = \"JaJEqJGTJGEJSetJNEJSGTJSGECallExitJLTJLEJSLTJSLEInvalidJumpOp\"\n\nvar _JumpOp_map = map[JumpOp]string{\n\t0:   _JumpOp_name[0:2],\n\t16:  _JumpOp_name[2:5],\n\t32:  _JumpOp_name[5:8],\n\t48:  _JumpOp_name[8:11],\n\t64:  _JumpOp_name[11:15],\n\t80:  _JumpOp_name[15:18],\n\t96:  _JumpOp_name[18:22],\n\t112: _JumpOp_name[22:26],\n\t128: _JumpOp_name[26:30],\n\t144: _JumpOp_name[30:34],\n\t160: _JumpOp_name[34:37],\n\t176: _JumpOp_name[37:40],\n\t192: _JumpOp_name[40:44],\n\t208: _JumpOp_name[44:48],\n\t255: _JumpOp_name[48:61],\n}\n\nfunc (i JumpOp) String() string {\n\tif str, ok := _JumpOp_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"JumpOp(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/load_store.go",
    "content": "package asm\n\n//go:generate stringer -output load_store_string.go -type=Mode,Size\n\n// Mode for load and store operations\n//\n//\tmsb      lsb\n//\t+---+--+---+\n//\t|MDE|sz|cls|\n//\t+---+--+---+\ntype Mode uint8\n\nconst modeMask OpCode = 0xe0\n\nconst (\n\t// InvalidMode is returned by getters when invoked\n\t// on non load / store OpCodes\n\tInvalidMode Mode = 0xff\n\t// ImmMode - immediate value\n\tImmMode Mode = 0x00\n\t// AbsMode - immediate value + offset\n\tAbsMode Mode = 0x20\n\t// IndMode - indirect (imm+src)\n\tIndMode Mode = 0x40\n\t// MemMode - load from memory\n\tMemMode Mode = 0x60\n\t// XAddMode - add atomically across processors.\n\tXAddMode Mode = 0xc0\n)\n\n// Size of load and store operations\n//\n//\tmsb      lsb\n//\t+---+--+---+\n//\t|mde|SZ|cls|\n//\t+---+--+---+\ntype Size uint8\n\nconst sizeMask OpCode = 0x18\n\nconst (\n\t// InvalidSize is returned by getters when invoked\n\t// on non load / store OpCodes\n\tInvalidSize Size = 0xff\n\t// DWord - double word; 64 bits\n\tDWord Size = 0x18\n\t// Word - word; 32 bits\n\tWord Size = 0x00\n\t// Half - half-word; 16 bits\n\tHalf Size = 0x08\n\t// Byte - byte; 8 bits\n\tByte Size = 0x10\n)\n\n// Sizeof returns the size in bytes.\nfunc (s Size) Sizeof() int {\n\tswitch s {\n\tcase DWord:\n\t\treturn 8\n\tcase Word:\n\t\treturn 4\n\tcase Half:\n\t\treturn 2\n\tcase Byte:\n\t\treturn 1\n\tdefault:\n\t\treturn -1\n\t}\n}\n\n// LoadMemOp returns the OpCode to load a value of given size from memory.\nfunc LoadMemOp(size Size) OpCode {\n\treturn OpCode(LdXClass).SetMode(MemMode).SetSize(size)\n}\n\n// LoadMem emits `dst = *(size *)(src + offset)`.\nfunc LoadMem(dst, src Register, offset int16, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode: LoadMemOp(size),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t\tOffset: offset,\n\t}\n}\n\n// LoadImmOp returns the OpCode to load an immediate of given size.\n//\n// As of kernel 4.20, only DWord size is accepted.\nfunc LoadImmOp(size Size) OpCode {\n\treturn OpCode(LdClass).SetMode(ImmMode).SetSize(size)\n}\n\n// LoadImm emits `dst = (size)value`.\n//\n// As of kernel 4.20, only DWord size is accepted.\nfunc LoadImm(dst Register, value int64, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode:   LoadImmOp(size),\n\t\tDst:      dst,\n\t\tConstant: value,\n\t}\n}\n\n// LoadMapPtr stores a pointer to a map in dst.\nfunc LoadMapPtr(dst Register, fd int) Instruction {\n\tif fd < 0 {\n\t\treturn Instruction{OpCode: InvalidOpCode}\n\t}\n\n\treturn Instruction{\n\t\tOpCode:   LoadImmOp(DWord),\n\t\tDst:      dst,\n\t\tSrc:      PseudoMapFD,\n\t\tConstant: int64(uint32(fd)),\n\t}\n}\n\n// LoadMapValue stores a pointer to the value at a certain offset of a map.\nfunc LoadMapValue(dst Register, fd int, offset uint32) Instruction {\n\tif fd < 0 {\n\t\treturn Instruction{OpCode: InvalidOpCode}\n\t}\n\n\tfdAndOffset := (uint64(offset) << 32) | uint64(uint32(fd))\n\treturn Instruction{\n\t\tOpCode:   LoadImmOp(DWord),\n\t\tDst:      dst,\n\t\tSrc:      PseudoMapValue,\n\t\tConstant: int64(fdAndOffset),\n\t}\n}\n\n// LoadIndOp returns the OpCode for loading a value of given size from an sk_buff.\nfunc LoadIndOp(size Size) OpCode {\n\treturn OpCode(LdClass).SetMode(IndMode).SetSize(size)\n}\n\n// LoadInd emits `dst = ntoh(*(size *)(((sk_buff *)R6)->data + src + offset))`.\nfunc LoadInd(dst, src Register, offset int32, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode:   LoadIndOp(size),\n\t\tDst:      dst,\n\t\tSrc:      src,\n\t\tConstant: int64(offset),\n\t}\n}\n\n// LoadAbsOp returns the OpCode for loading a value of given size from an sk_buff.\nfunc LoadAbsOp(size Size) OpCode {\n\treturn OpCode(LdClass).SetMode(AbsMode).SetSize(size)\n}\n\n// LoadAbs emits `r0 = ntoh(*(size *)(((sk_buff *)R6)->data + offset))`.\nfunc LoadAbs(offset int32, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode:   LoadAbsOp(size),\n\t\tDst:      R0,\n\t\tConstant: int64(offset),\n\t}\n}\n\n// StoreMemOp returns the OpCode for storing a register of given size in memory.\nfunc StoreMemOp(size Size) OpCode {\n\treturn OpCode(StXClass).SetMode(MemMode).SetSize(size)\n}\n\n// StoreMem emits `*(size *)(dst + offset) = src`\nfunc StoreMem(dst Register, offset int16, src Register, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode: StoreMemOp(size),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t\tOffset: offset,\n\t}\n}\n\n// StoreImmOp returns the OpCode for storing an immediate of given size in memory.\nfunc StoreImmOp(size Size) OpCode {\n\treturn OpCode(StClass).SetMode(MemMode).SetSize(size)\n}\n\n// StoreImm emits `*(size *)(dst + offset) = value`.\nfunc StoreImm(dst Register, offset int16, value int64, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode:   StoreImmOp(size),\n\t\tDst:      dst,\n\t\tOffset:   offset,\n\t\tConstant: value,\n\t}\n}\n\n// StoreXAddOp returns the OpCode to atomically add a register to a value in memory.\nfunc StoreXAddOp(size Size) OpCode {\n\treturn OpCode(StXClass).SetMode(XAddMode).SetSize(size)\n}\n\n// StoreXAdd atomically adds src to *dst.\nfunc StoreXAdd(dst, src Register, size Size) Instruction {\n\treturn Instruction{\n\t\tOpCode: StoreXAddOp(size),\n\t\tDst:    dst,\n\t\tSrc:    src,\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/load_store_string.go",
    "content": "// Code generated by \"stringer -output load_store_string.go -type=Mode,Size\"; DO NOT EDIT.\n\npackage asm\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[InvalidMode-255]\n\t_ = x[ImmMode-0]\n\t_ = x[AbsMode-32]\n\t_ = x[IndMode-64]\n\t_ = x[MemMode-96]\n\t_ = x[XAddMode-192]\n}\n\nconst (\n\t_Mode_name_0 = \"ImmMode\"\n\t_Mode_name_1 = \"AbsMode\"\n\t_Mode_name_2 = \"IndMode\"\n\t_Mode_name_3 = \"MemMode\"\n\t_Mode_name_4 = \"XAddMode\"\n\t_Mode_name_5 = \"InvalidMode\"\n)\n\nfunc (i Mode) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Mode_name_0\n\tcase i == 32:\n\t\treturn _Mode_name_1\n\tcase i == 64:\n\t\treturn _Mode_name_2\n\tcase i == 96:\n\t\treturn _Mode_name_3\n\tcase i == 192:\n\t\treturn _Mode_name_4\n\tcase i == 255:\n\t\treturn _Mode_name_5\n\tdefault:\n\t\treturn \"Mode(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[InvalidSize-255]\n\t_ = x[DWord-24]\n\t_ = x[Word-0]\n\t_ = x[Half-8]\n\t_ = x[Byte-16]\n}\n\nconst (\n\t_Size_name_0 = \"Word\"\n\t_Size_name_1 = \"Half\"\n\t_Size_name_2 = \"Byte\"\n\t_Size_name_3 = \"DWord\"\n\t_Size_name_4 = \"InvalidSize\"\n)\n\nfunc (i Size) String() string {\n\tswitch {\n\tcase i == 0:\n\t\treturn _Size_name_0\n\tcase i == 8:\n\t\treturn _Size_name_1\n\tcase i == 16:\n\t\treturn _Size_name_2\n\tcase i == 24:\n\t\treturn _Size_name_3\n\tcase i == 255:\n\t\treturn _Size_name_4\n\tdefault:\n\t\treturn \"Size(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/metadata.go",
    "content": "package asm\n\n// Metadata contains metadata about an instruction.\ntype Metadata struct {\n\thead *metaElement\n}\n\ntype metaElement struct {\n\tnext       *metaElement\n\tkey, value interface{}\n}\n\n// Find the element containing key.\n//\n// Returns nil if there is no such element.\nfunc (m *Metadata) find(key interface{}) *metaElement {\n\tfor e := m.head; e != nil; e = e.next {\n\t\tif e.key == key {\n\t\t\treturn e\n\t\t}\n\t}\n\treturn nil\n}\n\n// Remove an element from the linked list.\n//\n// Copies as many elements of the list as necessary to remove r, but doesn't\n// perform a full copy.\nfunc (m *Metadata) remove(r *metaElement) {\n\tcurrent := &m.head\n\tfor e := m.head; e != nil; e = e.next {\n\t\tif e == r {\n\t\t\t// We've found the element we want to remove.\n\t\t\t*current = e.next\n\n\t\t\t// No need to copy the tail.\n\t\t\treturn\n\t\t}\n\n\t\t// There is another element in front of the one we want to remove.\n\t\t// We have to copy it to be able to change metaElement.next.\n\t\tcpy := &metaElement{key: e.key, value: e.value}\n\t\t*current = cpy\n\t\tcurrent = &cpy.next\n\t}\n}\n\n// Set a key to a value.\n//\n// If value is nil, the key is removed. Avoids modifying old metadata by\n// copying if necessary.\nfunc (m *Metadata) Set(key, value interface{}) {\n\tif e := m.find(key); e != nil {\n\t\tif e.value == value {\n\t\t\t// Key is present and the value is the same. Nothing to do.\n\t\t\treturn\n\t\t}\n\n\t\t// Key is present with a different value. Create a copy of the list\n\t\t// which doesn't have the element in it.\n\t\tm.remove(e)\n\t}\n\n\t// m.head is now a linked list that doesn't contain key.\n\tif value == nil {\n\t\treturn\n\t}\n\n\tm.head = &metaElement{key: key, value: value, next: m.head}\n}\n\n// Get the value of a key.\n//\n// Returns nil if no value with the given key is present.\nfunc (m *Metadata) Get(key interface{}) interface{} {\n\tif e := m.find(key); e != nil {\n\t\treturn e.value\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/opcode.go",
    "content": "package asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n//go:generate stringer -output opcode_string.go -type=Class\n\n// Class of operations\n//\n//\tmsb      lsb\n//\t+---+--+---+\n//\t|  ??  |CLS|\n//\t+---+--+---+\ntype Class uint8\n\nconst classMask OpCode = 0x07\n\nconst (\n\t// LdClass loads immediate values into registers.\n\t// Also used for non-standard load operations from cBPF.\n\tLdClass Class = 0x00\n\t// LdXClass loads memory into registers.\n\tLdXClass Class = 0x01\n\t// StClass stores immediate values to memory.\n\tStClass Class = 0x02\n\t// StXClass stores registers to memory.\n\tStXClass Class = 0x03\n\t// ALUClass describes arithmetic operators.\n\tALUClass Class = 0x04\n\t// JumpClass describes jump operators.\n\tJumpClass Class = 0x05\n\t// Jump32Class describes jump operators with 32-bit comparisons.\n\t// Requires kernel 5.1.\n\tJump32Class Class = 0x06\n\t// ALU64Class describes arithmetic operators in 64-bit mode.\n\tALU64Class Class = 0x07\n)\n\n// IsLoad checks if this is either LdClass or LdXClass.\nfunc (cls Class) IsLoad() bool {\n\treturn cls == LdClass || cls == LdXClass\n}\n\n// IsStore checks if this is either StClass or StXClass.\nfunc (cls Class) IsStore() bool {\n\treturn cls == StClass || cls == StXClass\n}\n\nfunc (cls Class) isLoadOrStore() bool {\n\treturn cls.IsLoad() || cls.IsStore()\n}\n\n// IsALU checks if this is either ALUClass or ALU64Class.\nfunc (cls Class) IsALU() bool {\n\treturn cls == ALUClass || cls == ALU64Class\n}\n\n// IsJump checks if this is either JumpClass or Jump32Class.\nfunc (cls Class) IsJump() bool {\n\treturn cls == JumpClass || cls == Jump32Class\n}\n\nfunc (cls Class) isJumpOrALU() bool {\n\treturn cls.IsJump() || cls.IsALU()\n}\n\n// OpCode is a packed eBPF opcode.\n//\n// Its encoding is defined by a Class value:\n//\n//\tmsb      lsb\n//\t+----+-+---+\n//\t| ???? |CLS|\n//\t+----+-+---+\ntype OpCode uint8\n\n// InvalidOpCode is returned by setters on OpCode\nconst InvalidOpCode OpCode = 0xff\n\n// rawInstructions returns the number of BPF instructions required\n// to encode this opcode.\nfunc (op OpCode) rawInstructions() int {\n\tif op.IsDWordLoad() {\n\t\treturn 2\n\t}\n\treturn 1\n}\n\nfunc (op OpCode) IsDWordLoad() bool {\n\treturn op == LoadImmOp(DWord)\n}\n\n// Class returns the class of operation.\nfunc (op OpCode) Class() Class {\n\treturn Class(op & classMask)\n}\n\n// Mode returns the mode for load and store operations.\nfunc (op OpCode) Mode() Mode {\n\tif !op.Class().isLoadOrStore() {\n\t\treturn InvalidMode\n\t}\n\treturn Mode(op & modeMask)\n}\n\n// Size returns the size for load and store operations.\nfunc (op OpCode) Size() Size {\n\tif !op.Class().isLoadOrStore() {\n\t\treturn InvalidSize\n\t}\n\treturn Size(op & sizeMask)\n}\n\n// Source returns the source for branch and ALU operations.\nfunc (op OpCode) Source() Source {\n\tif !op.Class().isJumpOrALU() || op.ALUOp() == Swap {\n\t\treturn InvalidSource\n\t}\n\treturn Source(op & sourceMask)\n}\n\n// ALUOp returns the ALUOp.\nfunc (op OpCode) ALUOp() ALUOp {\n\tif !op.Class().IsALU() {\n\t\treturn InvalidALUOp\n\t}\n\treturn ALUOp(op & aluMask)\n}\n\n// Endianness returns the Endianness for a byte swap instruction.\nfunc (op OpCode) Endianness() Endianness {\n\tif op.ALUOp() != Swap {\n\t\treturn InvalidEndian\n\t}\n\treturn Endianness(op & endianMask)\n}\n\n// JumpOp returns the JumpOp.\n// Returns InvalidJumpOp if it doesn't encode a jump.\nfunc (op OpCode) JumpOp() JumpOp {\n\tif !op.Class().IsJump() {\n\t\treturn InvalidJumpOp\n\t}\n\n\tjumpOp := JumpOp(op & jumpMask)\n\n\t// Some JumpOps are only supported by JumpClass, not Jump32Class.\n\tif op.Class() == Jump32Class && (jumpOp == Exit || jumpOp == Call || jumpOp == Ja) {\n\t\treturn InvalidJumpOp\n\t}\n\n\treturn jumpOp\n}\n\n// SetMode sets the mode on load and store operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetMode(mode Mode) OpCode {\n\tif !op.Class().isLoadOrStore() || !valid(OpCode(mode), modeMask) {\n\t\treturn InvalidOpCode\n\t}\n\treturn (op & ^modeMask) | OpCode(mode)\n}\n\n// SetSize sets the size on load and store operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetSize(size Size) OpCode {\n\tif !op.Class().isLoadOrStore() || !valid(OpCode(size), sizeMask) {\n\t\treturn InvalidOpCode\n\t}\n\treturn (op & ^sizeMask) | OpCode(size)\n}\n\n// SetSource sets the source on jump and ALU operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetSource(source Source) OpCode {\n\tif !op.Class().isJumpOrALU() || !valid(OpCode(source), sourceMask) {\n\t\treturn InvalidOpCode\n\t}\n\treturn (op & ^sourceMask) | OpCode(source)\n}\n\n// SetALUOp sets the ALUOp on ALU operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetALUOp(alu ALUOp) OpCode {\n\tif !op.Class().IsALU() || !valid(OpCode(alu), aluMask) {\n\t\treturn InvalidOpCode\n\t}\n\treturn (op & ^aluMask) | OpCode(alu)\n}\n\n// SetJumpOp sets the JumpOp on jump operations.\n//\n// Returns InvalidOpCode if op is of the wrong class.\nfunc (op OpCode) SetJumpOp(jump JumpOp) OpCode {\n\tif !op.Class().IsJump() || !valid(OpCode(jump), jumpMask) {\n\t\treturn InvalidOpCode\n\t}\n\n\tnewOp := (op & ^jumpMask) | OpCode(jump)\n\n\t// Check newOp is legal.\n\tif newOp.JumpOp() == InvalidJumpOp {\n\t\treturn InvalidOpCode\n\t}\n\n\treturn newOp\n}\n\nfunc (op OpCode) String() string {\n\tvar f strings.Builder\n\n\tswitch class := op.Class(); {\n\tcase class.isLoadOrStore():\n\t\tf.WriteString(strings.TrimSuffix(class.String(), \"Class\"))\n\n\t\tmode := op.Mode()\n\t\tf.WriteString(strings.TrimSuffix(mode.String(), \"Mode\"))\n\n\t\tswitch op.Size() {\n\t\tcase DWord:\n\t\t\tf.WriteString(\"DW\")\n\t\tcase Word:\n\t\t\tf.WriteString(\"W\")\n\t\tcase Half:\n\t\t\tf.WriteString(\"H\")\n\t\tcase Byte:\n\t\t\tf.WriteString(\"B\")\n\t\t}\n\n\tcase class.IsALU():\n\t\tf.WriteString(op.ALUOp().String())\n\n\t\tif op.ALUOp() == Swap {\n\t\t\t// Width for Endian is controlled by Constant\n\t\t\tf.WriteString(op.Endianness().String())\n\t\t} else {\n\t\t\tif class == ALUClass {\n\t\t\t\tf.WriteString(\"32\")\n\t\t\t}\n\n\t\t\tf.WriteString(strings.TrimSuffix(op.Source().String(), \"Source\"))\n\t\t}\n\n\tcase class.IsJump():\n\t\tf.WriteString(op.JumpOp().String())\n\n\t\tif class == Jump32Class {\n\t\t\tf.WriteString(\"32\")\n\t\t}\n\n\t\tif jop := op.JumpOp(); jop != Exit && jop != Call {\n\t\t\tf.WriteString(strings.TrimSuffix(op.Source().String(), \"Source\"))\n\t\t}\n\n\tdefault:\n\t\tfmt.Fprintf(&f, \"OpCode(%#x)\", uint8(op))\n\t}\n\n\treturn f.String()\n}\n\n// valid returns true if all bits in value are covered by mask.\nfunc valid(value, mask OpCode) bool {\n\treturn value & ^mask == 0\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/opcode_string.go",
    "content": "// Code generated by \"stringer -output opcode_string.go -type=Class\"; DO NOT EDIT.\n\npackage asm\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[LdClass-0]\n\t_ = x[LdXClass-1]\n\t_ = x[StClass-2]\n\t_ = x[StXClass-3]\n\t_ = x[ALUClass-4]\n\t_ = x[JumpClass-5]\n\t_ = x[Jump32Class-6]\n\t_ = x[ALU64Class-7]\n}\n\nconst _Class_name = \"LdClassLdXClassStClassStXClassALUClassJumpClassJump32ClassALU64Class\"\n\nvar _Class_index = [...]uint8{0, 7, 15, 22, 30, 38, 47, 58, 68}\n\nfunc (i Class) String() string {\n\tif i >= Class(len(_Class_index)-1) {\n\t\treturn \"Class(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _Class_name[_Class_index[i]:_Class_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/asm/register.go",
    "content": "package asm\n\nimport (\n\t\"fmt\"\n)\n\n// Register is the source or destination of most operations.\ntype Register uint8\n\n// R0 contains return values.\nconst R0 Register = 0\n\n// Registers for function arguments.\nconst (\n\tR1 Register = R0 + 1 + iota\n\tR2\n\tR3\n\tR4\n\tR5\n)\n\n// Callee saved registers preserved by function calls.\nconst (\n\tR6 Register = R5 + 1 + iota\n\tR7\n\tR8\n\tR9\n)\n\n// Read-only frame pointer to access stack.\nconst (\n\tR10 Register = R9 + 1\n\tRFP          = R10\n)\n\n// Pseudo registers used by 64bit loads and jumps\nconst (\n\tPseudoMapFD     = R1 // BPF_PSEUDO_MAP_FD\n\tPseudoMapValue  = R2 // BPF_PSEUDO_MAP_VALUE\n\tPseudoCall      = R1 // BPF_PSEUDO_CALL\n\tPseudoFunc      = R4 // BPF_PSEUDO_FUNC\n\tPseudoKfuncCall = R2 // BPF_PSEUDO_KFUNC_CALL\n)\n\nfunc (r Register) String() string {\n\tv := uint8(r)\n\tif v == 10 {\n\t\treturn \"rfp\"\n\t}\n\treturn fmt.Sprintf(\"r%d\", v)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/attachtype_string.go",
    "content": "// Code generated by \"stringer -type AttachType -trimprefix Attach\"; DO NOT EDIT.\n\npackage ebpf\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[AttachNone-0]\n\t_ = x[AttachCGroupInetIngress-0]\n\t_ = x[AttachCGroupInetEgress-1]\n\t_ = x[AttachCGroupInetSockCreate-2]\n\t_ = x[AttachCGroupSockOps-3]\n\t_ = x[AttachSkSKBStreamParser-4]\n\t_ = x[AttachSkSKBStreamVerdict-5]\n\t_ = x[AttachCGroupDevice-6]\n\t_ = x[AttachSkMsgVerdict-7]\n\t_ = x[AttachCGroupInet4Bind-8]\n\t_ = x[AttachCGroupInet6Bind-9]\n\t_ = x[AttachCGroupInet4Connect-10]\n\t_ = x[AttachCGroupInet6Connect-11]\n\t_ = x[AttachCGroupInet4PostBind-12]\n\t_ = x[AttachCGroupInet6PostBind-13]\n\t_ = x[AttachCGroupUDP4Sendmsg-14]\n\t_ = x[AttachCGroupUDP6Sendmsg-15]\n\t_ = x[AttachLircMode2-16]\n\t_ = x[AttachFlowDissector-17]\n\t_ = x[AttachCGroupSysctl-18]\n\t_ = x[AttachCGroupUDP4Recvmsg-19]\n\t_ = x[AttachCGroupUDP6Recvmsg-20]\n\t_ = x[AttachCGroupGetsockopt-21]\n\t_ = x[AttachCGroupSetsockopt-22]\n\t_ = x[AttachTraceRawTp-23]\n\t_ = x[AttachTraceFEntry-24]\n\t_ = x[AttachTraceFExit-25]\n\t_ = x[AttachModifyReturn-26]\n\t_ = x[AttachLSMMac-27]\n\t_ = x[AttachTraceIter-28]\n\t_ = x[AttachCgroupInet4GetPeername-29]\n\t_ = x[AttachCgroupInet6GetPeername-30]\n\t_ = x[AttachCgroupInet4GetSockname-31]\n\t_ = x[AttachCgroupInet6GetSockname-32]\n\t_ = x[AttachXDPDevMap-33]\n\t_ = x[AttachCgroupInetSockRelease-34]\n\t_ = x[AttachXDPCPUMap-35]\n\t_ = x[AttachSkLookup-36]\n\t_ = x[AttachXDP-37]\n\t_ = x[AttachSkSKBVerdict-38]\n\t_ = x[AttachSkReuseportSelect-39]\n\t_ = x[AttachSkReuseportSelectOrMigrate-40]\n\t_ = x[AttachPerfEvent-41]\n\t_ = x[AttachTraceKprobeMulti-42]\n}\n\nconst _AttachType_name = \"NoneCGroupInetEgressCGroupInetSockCreateCGroupSockOpsSkSKBStreamParserSkSKBStreamVerdictCGroupDeviceSkMsgVerdictCGroupInet4BindCGroupInet6BindCGroupInet4ConnectCGroupInet6ConnectCGroupInet4PostBindCGroupInet6PostBindCGroupUDP4SendmsgCGroupUDP6SendmsgLircMode2FlowDissectorCGroupSysctlCGroupUDP4RecvmsgCGroupUDP6RecvmsgCGroupGetsockoptCGroupSetsockoptTraceRawTpTraceFEntryTraceFExitModifyReturnLSMMacTraceIterCgroupInet4GetPeernameCgroupInet6GetPeernameCgroupInet4GetSocknameCgroupInet6GetSocknameXDPDevMapCgroupInetSockReleaseXDPCPUMapSkLookupXDPSkSKBVerdictSkReuseportSelectSkReuseportSelectOrMigratePerfEventTraceKprobeMulti\"\n\nvar _AttachType_index = [...]uint16{0, 4, 20, 40, 53, 70, 88, 100, 112, 127, 142, 160, 178, 197, 216, 233, 250, 259, 272, 284, 301, 318, 334, 350, 360, 371, 381, 393, 399, 408, 430, 452, 474, 496, 505, 526, 535, 543, 546, 558, 575, 601, 610, 626}\n\nfunc (i AttachType) String() string {\n\tif i >= AttachType(len(_AttachType_index)-1) {\n\t\treturn \"AttachType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _AttachType_name[_AttachType_index[i]:_AttachType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/btf.go",
    "content": "package btf\n\nimport (\n\t\"bufio\"\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"reflect\"\n\t\"sync\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nconst btfMagic = 0xeB9F\n\n// Errors returned by BTF functions.\nvar (\n\tErrNotSupported    = internal.ErrNotSupported\n\tErrNotFound        = errors.New(\"not found\")\n\tErrNoExtendedInfo  = errors.New(\"no extended info\")\n\tErrMultipleMatches = errors.New(\"multiple matching types\")\n)\n\n// ID represents the unique ID of a BTF object.\ntype ID = sys.BTFID\n\n// Spec allows querying a set of Types and loading the set into the\n// kernel.\ntype Spec struct {\n\t// All types contained by the spec, not including types from the base in\n\t// case the spec was parsed from split BTF.\n\ttypes []Type\n\n\t// Type IDs indexed by type.\n\ttypeIDs map[Type]TypeID\n\n\t// The ID of the first type in types.\n\tfirstTypeID TypeID\n\n\t// Types indexed by essential name.\n\t// Includes all struct flavors and types with the same name.\n\tnamedTypes map[essentialName][]Type\n\n\t// String table from ELF, may be nil.\n\tstrings *stringTable\n\n\t// Byte order of the ELF we decoded the spec from, may be nil.\n\tbyteOrder binary.ByteOrder\n}\n\nvar btfHeaderLen = binary.Size(&btfHeader{})\n\ntype btfHeader struct {\n\tMagic   uint16\n\tVersion uint8\n\tFlags   uint8\n\tHdrLen  uint32\n\n\tTypeOff   uint32\n\tTypeLen   uint32\n\tStringOff uint32\n\tStringLen uint32\n}\n\n// typeStart returns the offset from the beginning of the .BTF section\n// to the start of its type entries.\nfunc (h *btfHeader) typeStart() int64 {\n\treturn int64(h.HdrLen + h.TypeOff)\n}\n\n// stringStart returns the offset from the beginning of the .BTF section\n// to the start of its string table.\nfunc (h *btfHeader) stringStart() int64 {\n\treturn int64(h.HdrLen + h.StringOff)\n}\n\n// newSpec creates a Spec containing only Void.\nfunc newSpec() *Spec {\n\treturn &Spec{\n\t\t[]Type{(*Void)(nil)},\n\t\tmap[Type]TypeID{(*Void)(nil): 0},\n\t\t0,\n\t\tmake(map[essentialName][]Type),\n\t\tnil,\n\t\tnil,\n\t}\n}\n\n// LoadSpec opens file and calls LoadSpecFromReader on it.\nfunc LoadSpec(file string) (*Spec, error) {\n\tfh, err := os.Open(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer fh.Close()\n\n\treturn LoadSpecFromReader(fh)\n}\n\n// LoadSpecFromReader reads from an ELF or a raw BTF blob.\n//\n// Returns ErrNotFound if reading from an ELF which contains no BTF. ExtInfos\n// may be nil.\nfunc LoadSpecFromReader(rd io.ReaderAt) (*Spec, error) {\n\tfile, err := internal.NewSafeELFFile(rd)\n\tif err != nil {\n\t\tif bo := guessRawBTFByteOrder(rd); bo != nil {\n\t\t\treturn loadRawSpec(io.NewSectionReader(rd, 0, math.MaxInt64), bo, nil)\n\t\t}\n\n\t\treturn nil, err\n\t}\n\n\treturn loadSpecFromELF(file)\n}\n\n// LoadSpecAndExtInfosFromReader reads from an ELF.\n//\n// ExtInfos may be nil if the ELF doesn't contain section metadata.\n// Returns ErrNotFound if the ELF contains no BTF.\nfunc LoadSpecAndExtInfosFromReader(rd io.ReaderAt) (*Spec, *ExtInfos, error) {\n\tfile, err := internal.NewSafeELFFile(rd)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tspec, err := loadSpecFromELF(file)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\textInfos, err := loadExtInfosFromELF(file, spec)\n\tif err != nil && !errors.Is(err, ErrNotFound) {\n\t\treturn nil, nil, err\n\t}\n\n\treturn spec, extInfos, nil\n}\n\n// symbolOffsets extracts all symbols offsets from an ELF and indexes them by\n// section and variable name.\n//\n// References to variables in BTF data sections carry unsigned 32-bit offsets.\n// Some ELF symbols (e.g. in vmlinux) may point to virtual memory that is well\n// beyond this range. Since these symbols cannot be described by BTF info,\n// ignore them here.\nfunc symbolOffsets(file *internal.SafeELFFile) (map[symbol]uint32, error) {\n\tsymbols, err := file.Symbols()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't read symbols: %v\", err)\n\t}\n\n\toffsets := make(map[symbol]uint32)\n\tfor _, sym := range symbols {\n\t\tif idx := sym.Section; idx >= elf.SHN_LORESERVE && idx <= elf.SHN_HIRESERVE {\n\t\t\t// Ignore things like SHN_ABS\n\t\t\tcontinue\n\t\t}\n\n\t\tif sym.Value > math.MaxUint32 {\n\t\t\t// VarSecinfo offset is u32, cannot reference symbols in higher regions.\n\t\t\tcontinue\n\t\t}\n\n\t\tif int(sym.Section) >= len(file.Sections) {\n\t\t\treturn nil, fmt.Errorf(\"symbol %s: invalid section %d\", sym.Name, sym.Section)\n\t\t}\n\n\t\tsecName := file.Sections[sym.Section].Name\n\t\toffsets[symbol{secName, sym.Name}] = uint32(sym.Value)\n\t}\n\n\treturn offsets, nil\n}\n\nfunc loadSpecFromELF(file *internal.SafeELFFile) (*Spec, error) {\n\tvar (\n\t\tbtfSection   *elf.Section\n\t\tsectionSizes = make(map[string]uint32)\n\t)\n\n\tfor _, sec := range file.Sections {\n\t\tswitch sec.Name {\n\t\tcase \".BTF\":\n\t\t\tbtfSection = sec\n\t\tdefault:\n\t\t\tif sec.Type != elf.SHT_PROGBITS && sec.Type != elf.SHT_NOBITS {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif sec.Size > math.MaxUint32 {\n\t\t\t\treturn nil, fmt.Errorf(\"section %s exceeds maximum size\", sec.Name)\n\t\t\t}\n\n\t\t\tsectionSizes[sec.Name] = uint32(sec.Size)\n\t\t}\n\t}\n\n\tif btfSection == nil {\n\t\treturn nil, fmt.Errorf(\"btf: %w\", ErrNotFound)\n\t}\n\n\toffsets, err := symbolOffsets(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif btfSection.ReaderAt == nil {\n\t\treturn nil, fmt.Errorf(\"compressed BTF is not supported\")\n\t}\n\n\tspec, err := loadRawSpec(btfSection.ReaderAt, file.ByteOrder, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = fixupDatasec(spec.types, sectionSizes, offsets)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn spec, nil\n}\n\nfunc loadRawSpec(btf io.ReaderAt, bo binary.ByteOrder, base *Spec) (*Spec, error) {\n\tvar (\n\t\tbaseStrings *stringTable\n\t\tfirstTypeID TypeID\n\t\terr         error\n\t)\n\n\tif base != nil {\n\t\tif base.firstTypeID != 0 {\n\t\t\treturn nil, fmt.Errorf(\"can't use split BTF as base\")\n\t\t}\n\n\t\tif base.strings == nil {\n\t\t\treturn nil, fmt.Errorf(\"parse split BTF: base must be loaded from an ELF\")\n\t\t}\n\n\t\tbaseStrings = base.strings\n\n\t\tfirstTypeID, err = base.nextTypeID()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\trawTypes, rawStrings, err := parseBTF(btf, bo, baseStrings)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttypes, err := inflateRawTypes(rawTypes, rawStrings, base)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\ttypeIDs, typesByName := indexTypes(types, firstTypeID)\n\n\treturn &Spec{\n\t\tnamedTypes:  typesByName,\n\t\ttypeIDs:     typeIDs,\n\t\ttypes:       types,\n\t\tfirstTypeID: firstTypeID,\n\t\tstrings:     rawStrings,\n\t\tbyteOrder:   bo,\n\t}, nil\n}\n\nfunc indexTypes(types []Type, firstTypeID TypeID) (map[Type]TypeID, map[essentialName][]Type) {\n\tnamedTypes := 0\n\tfor _, typ := range types {\n\t\tif typ.TypeName() != \"\" {\n\t\t\t// Do a pre-pass to figure out how big types by name has to be.\n\t\t\t// Most types have unique names, so it's OK to ignore essentialName\n\t\t\t// here.\n\t\t\tnamedTypes++\n\t\t}\n\t}\n\n\ttypeIDs := make(map[Type]TypeID, len(types))\n\ttypesByName := make(map[essentialName][]Type, namedTypes)\n\n\tfor i, typ := range types {\n\t\tif name := newEssentialName(typ.TypeName()); name != \"\" {\n\t\t\ttypesByName[name] = append(typesByName[name], typ)\n\t\t}\n\t\ttypeIDs[typ] = firstTypeID + TypeID(i)\n\t}\n\n\treturn typeIDs, typesByName\n}\n\n// LoadKernelSpec returns the current kernel's BTF information.\n//\n// Defaults to /sys/kernel/btf/vmlinux and falls back to scanning the file system\n// for vmlinux ELFs. Returns an error wrapping ErrNotSupported if BTF is not enabled.\nfunc LoadKernelSpec() (*Spec, error) {\n\tspec, _, err := kernelSpec()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn spec.Copy(), nil\n}\n\nvar kernelBTF struct {\n\tsync.RWMutex\n\tspec *Spec\n\t// True if the spec was read from an ELF instead of raw BTF in /sys.\n\tfallback bool\n}\n\n// FlushKernelSpec removes any cached kernel type information.\nfunc FlushKernelSpec() {\n\tkernelBTF.Lock()\n\tdefer kernelBTF.Unlock()\n\n\tkernelBTF.spec, kernelBTF.fallback = nil, false\n}\n\nfunc kernelSpec() (*Spec, bool, error) {\n\tkernelBTF.RLock()\n\tspec, fallback := kernelBTF.spec, kernelBTF.fallback\n\tkernelBTF.RUnlock()\n\n\tif spec == nil {\n\t\tkernelBTF.Lock()\n\t\tdefer kernelBTF.Unlock()\n\n\t\tspec, fallback = kernelBTF.spec, kernelBTF.fallback\n\t}\n\n\tif spec != nil {\n\t\treturn spec, fallback, nil\n\t}\n\n\tspec, fallback, err := loadKernelSpec()\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\n\tkernelBTF.spec, kernelBTF.fallback = spec, fallback\n\treturn spec, fallback, nil\n}\n\nfunc loadKernelSpec() (_ *Spec, fallback bool, _ error) {\n\tfh, err := os.Open(\"/sys/kernel/btf/vmlinux\")\n\tif err == nil {\n\t\tdefer fh.Close()\n\n\t\tspec, err := loadRawSpec(fh, internal.NativeEndian, nil)\n\t\treturn spec, false, err\n\t}\n\n\tfile, err := findVMLinux()\n\tif err != nil {\n\t\treturn nil, false, err\n\t}\n\tdefer file.Close()\n\n\tspec, err := loadSpecFromELF(file)\n\treturn spec, true, err\n}\n\n// findVMLinux scans multiple well-known paths for vmlinux kernel images.\nfunc findVMLinux() (*internal.SafeELFFile, error) {\n\trelease, err := internal.KernelRelease()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// use same list of locations as libbpf\n\t// https://github.com/libbpf/libbpf/blob/9a3a42608dbe3731256a5682a125ac1e23bced8f/src/btf.c#L3114-L3122\n\tlocations := []string{\n\t\t\"/boot/vmlinux-%s\",\n\t\t\"/lib/modules/%s/vmlinux-%[1]s\",\n\t\t\"/lib/modules/%s/build/vmlinux\",\n\t\t\"/usr/lib/modules/%s/kernel/vmlinux\",\n\t\t\"/usr/lib/debug/boot/vmlinux-%s\",\n\t\t\"/usr/lib/debug/boot/vmlinux-%s.debug\",\n\t\t\"/usr/lib/debug/lib/modules/%s/vmlinux\",\n\t}\n\n\tfor _, loc := range locations {\n\t\tfile, err := internal.OpenSafeELFFile(fmt.Sprintf(loc, release))\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\tcontinue\n\t\t}\n\t\treturn file, err\n\t}\n\n\treturn nil, fmt.Errorf(\"no BTF found for kernel version %s: %w\", release, internal.ErrNotSupported)\n}\n\n// parseBTFHeader parses the header of the .BTF section.\nfunc parseBTFHeader(r io.Reader, bo binary.ByteOrder) (*btfHeader, error) {\n\tvar header btfHeader\n\tif err := binary.Read(r, bo, &header); err != nil {\n\t\treturn nil, fmt.Errorf(\"can't read header: %v\", err)\n\t}\n\n\tif header.Magic != btfMagic {\n\t\treturn nil, fmt.Errorf(\"incorrect magic value %v\", header.Magic)\n\t}\n\n\tif header.Version != 1 {\n\t\treturn nil, fmt.Errorf(\"unexpected version %v\", header.Version)\n\t}\n\n\tif header.Flags != 0 {\n\t\treturn nil, fmt.Errorf(\"unsupported flags %v\", header.Flags)\n\t}\n\n\tremainder := int64(header.HdrLen) - int64(binary.Size(&header))\n\tif remainder < 0 {\n\t\treturn nil, errors.New(\"header length shorter than btfHeader size\")\n\t}\n\n\tif _, err := io.CopyN(internal.DiscardZeroes{}, r, remainder); err != nil {\n\t\treturn nil, fmt.Errorf(\"header padding: %v\", err)\n\t}\n\n\treturn &header, nil\n}\n\nfunc guessRawBTFByteOrder(r io.ReaderAt) binary.ByteOrder {\n\tbuf := new(bufio.Reader)\n\tfor _, bo := range []binary.ByteOrder{\n\t\tbinary.LittleEndian,\n\t\tbinary.BigEndian,\n\t} {\n\t\tbuf.Reset(io.NewSectionReader(r, 0, math.MaxInt64))\n\t\tif _, err := parseBTFHeader(buf, bo); err == nil {\n\t\t\treturn bo\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// parseBTF reads a .BTF section into memory and parses it into a list of\n// raw types and a string table.\nfunc parseBTF(btf io.ReaderAt, bo binary.ByteOrder, baseStrings *stringTable) ([]rawType, *stringTable, error) {\n\tbuf := internal.NewBufferedSectionReader(btf, 0, math.MaxInt64)\n\theader, err := parseBTFHeader(buf, bo)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"parsing .BTF header: %v\", err)\n\t}\n\n\trawStrings, err := readStringTable(io.NewSectionReader(btf, header.stringStart(), int64(header.StringLen)),\n\t\tbaseStrings)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"can't read type names: %w\", err)\n\t}\n\n\tbuf.Reset(io.NewSectionReader(btf, header.typeStart(), int64(header.TypeLen)))\n\trawTypes, err := readTypes(buf, bo, header.TypeLen)\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"can't read types: %w\", err)\n\t}\n\n\treturn rawTypes, rawStrings, nil\n}\n\ntype symbol struct {\n\tsection string\n\tname    string\n}\n\n// fixupDatasec attempts to patch up missing info in Datasecs and its members by\n// supplementing them with information from the ELF headers and symbol table.\nfunc fixupDatasec(types []Type, sectionSizes map[string]uint32, offsets map[symbol]uint32) error {\n\tfor _, typ := range types {\n\t\tds, ok := typ.(*Datasec)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tname := ds.Name\n\n\t\t// Some Datasecs are virtual and don't have corresponding ELF sections.\n\t\tswitch name {\n\t\tcase \".ksyms\":\n\t\t\t// .ksyms describes forward declarations of kfunc signatures.\n\t\t\t// Nothing to fix up, all sizes and offsets are 0.\n\t\t\tfor _, vsi := range ds.Vars {\n\t\t\t\t_, ok := vsi.Type.(*Func)\n\t\t\t\tif !ok {\n\t\t\t\t\t// Only Funcs are supported in the .ksyms Datasec.\n\t\t\t\t\treturn fmt.Errorf(\"data section %s: expected *btf.Func, not %T: %w\", name, vsi.Type, ErrNotSupported)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcontinue\n\t\tcase \".kconfig\":\n\t\t\t// .kconfig has a size of 0 and has all members' offsets set to 0.\n\t\t\t// Fix up all offsets and set the Datasec's size.\n\t\t\tif err := fixupDatasecLayout(ds); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Fix up extern to global linkage to avoid a BTF verifier error.\n\t\t\tfor _, vsi := range ds.Vars {\n\t\t\t\tvsi.Type.(*Var).Linkage = GlobalVar\n\t\t\t}\n\n\t\t\tcontinue\n\t\t}\n\n\t\tif ds.Size != 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tds.Size, ok = sectionSizes[name]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"data section %s: missing size\", name)\n\t\t}\n\n\t\tfor i := range ds.Vars {\n\t\t\tsymName := ds.Vars[i].Type.TypeName()\n\t\t\tds.Vars[i].Offset, ok = offsets[symbol{name, symName}]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"data section %s: missing offset for symbol %s\", name, symName)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// fixupDatasecLayout populates ds.Vars[].Offset according to var sizes and\n// alignment. Calculate and set ds.Size.\nfunc fixupDatasecLayout(ds *Datasec) error {\n\tvar off uint32\n\n\tfor i, vsi := range ds.Vars {\n\t\tv, ok := vsi.Type.(*Var)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"member %d: unsupported type %T\", i, vsi.Type)\n\t\t}\n\n\t\tsize, err := Sizeof(v.Type)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"variable %s: getting size: %w\", v.Name, err)\n\t\t}\n\t\talign, err := alignof(v.Type)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"variable %s: getting alignment: %w\", v.Name, err)\n\t\t}\n\n\t\t// Align the current member based on the offset of the end of the previous\n\t\t// member and the alignment of the current member.\n\t\toff = internal.Align(off, uint32(align))\n\n\t\tds.Vars[i].Offset = off\n\n\t\toff += uint32(size)\n\t}\n\n\tds.Size = off\n\n\treturn nil\n}\n\n// Copy creates a copy of Spec.\nfunc (s *Spec) Copy() *Spec {\n\ttypes := copyTypes(s.types, nil)\n\ttypeIDs, typesByName := indexTypes(types, s.firstTypeID)\n\n\t// NB: Other parts of spec are not copied since they are immutable.\n\treturn &Spec{\n\t\ttypes,\n\t\ttypeIDs,\n\t\ts.firstTypeID,\n\t\ttypesByName,\n\t\ts.strings,\n\t\ts.byteOrder,\n\t}\n}\n\ntype sliceWriter []byte\n\nfunc (sw sliceWriter) Write(p []byte) (int, error) {\n\tif len(p) != len(sw) {\n\t\treturn 0, errors.New(\"size doesn't match\")\n\t}\n\n\treturn copy(sw, p), nil\n}\n\n// nextTypeID returns the next unallocated type ID or an error if there are no\n// more type IDs.\nfunc (s *Spec) nextTypeID() (TypeID, error) {\n\tid := s.firstTypeID + TypeID(len(s.types))\n\tif id < s.firstTypeID {\n\t\treturn 0, fmt.Errorf(\"no more type IDs\")\n\t}\n\treturn id, nil\n}\n\n// TypeByID returns the BTF Type with the given type ID.\n//\n// Returns an error wrapping ErrNotFound if a Type with the given ID\n// does not exist in the Spec.\nfunc (s *Spec) TypeByID(id TypeID) (Type, error) {\n\tif id < s.firstTypeID {\n\t\treturn nil, fmt.Errorf(\"look up type with ID %d (first ID is %d): %w\", id, s.firstTypeID, ErrNotFound)\n\t}\n\n\tindex := int(id - s.firstTypeID)\n\tif index >= len(s.types) {\n\t\treturn nil, fmt.Errorf(\"look up type with ID %d: %w\", id, ErrNotFound)\n\t}\n\n\treturn s.types[index], nil\n}\n\n// TypeID returns the ID for a given Type.\n//\n// Returns an error wrapping ErrNoFound if the type isn't part of the Spec.\nfunc (s *Spec) TypeID(typ Type) (TypeID, error) {\n\tif _, ok := typ.(*Void); ok {\n\t\t// Equality is weird for void, since it is a zero sized type.\n\t\treturn 0, nil\n\t}\n\n\tid, ok := s.typeIDs[typ]\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"no ID for type %s: %w\", typ, ErrNotFound)\n\t}\n\n\treturn id, nil\n}\n\n// AnyTypesByName returns a list of BTF Types with the given name.\n//\n// If the BTF blob describes multiple compilation units like vmlinux, multiple\n// Types with the same name and kind can exist, but might not describe the same\n// data structure.\n//\n// Returns an error wrapping ErrNotFound if no matching Type exists in the Spec.\nfunc (s *Spec) AnyTypesByName(name string) ([]Type, error) {\n\ttypes := s.namedTypes[newEssentialName(name)]\n\tif len(types) == 0 {\n\t\treturn nil, fmt.Errorf(\"type name %s: %w\", name, ErrNotFound)\n\t}\n\n\t// Return a copy to prevent changes to namedTypes.\n\tresult := make([]Type, 0, len(types))\n\tfor _, t := range types {\n\t\t// Match against the full name, not just the essential one\n\t\t// in case the type being looked up is a struct flavor.\n\t\tif t.TypeName() == name {\n\t\t\tresult = append(result, t)\n\t\t}\n\t}\n\treturn result, nil\n}\n\n// AnyTypeByName returns a Type with the given name.\n//\n// Returns an error if multiple types of that name exist.\nfunc (s *Spec) AnyTypeByName(name string) (Type, error) {\n\ttypes, err := s.AnyTypesByName(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(types) > 1 {\n\t\treturn nil, fmt.Errorf(\"found multiple types: %v\", types)\n\t}\n\n\treturn types[0], nil\n}\n\n// TypeByName searches for a Type with a specific name. Since multiple Types\n// with the same name can exist, the parameter typ is taken to narrow down the\n// search in case of a clash.\n//\n// typ must be a non-nil pointer to an implementation of a Type. On success, the\n// address of the found Type will be copied to typ.\n//\n// Returns an error wrapping ErrNotFound if no matching Type exists in the Spec.\n// Returns an error wrapping ErrMultipleTypes if multiple candidates are found.\nfunc (s *Spec) TypeByName(name string, typ interface{}) error {\n\ttypeInterface := reflect.TypeOf((*Type)(nil)).Elem()\n\n\t// typ may be **T or *Type\n\ttypValue := reflect.ValueOf(typ)\n\tif typValue.Kind() != reflect.Ptr {\n\t\treturn fmt.Errorf(\"%T is not a pointer\", typ)\n\t}\n\n\ttypPtr := typValue.Elem()\n\tif !typPtr.CanSet() {\n\t\treturn fmt.Errorf(\"%T cannot be set\", typ)\n\t}\n\n\twanted := typPtr.Type()\n\tif wanted == typeInterface {\n\t\t// This is *Type. Unwrap the value's type.\n\t\twanted = typPtr.Elem().Type()\n\t}\n\n\tif !wanted.AssignableTo(typeInterface) {\n\t\treturn fmt.Errorf(\"%T does not satisfy Type interface\", typ)\n\t}\n\n\ttypes, err := s.AnyTypesByName(name)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar candidate Type\n\tfor _, typ := range types {\n\t\tif reflect.TypeOf(typ) != wanted {\n\t\t\tcontinue\n\t\t}\n\n\t\tif candidate != nil {\n\t\t\treturn fmt.Errorf(\"type %s(%T): %w\", name, typ, ErrMultipleMatches)\n\t\t}\n\n\t\tcandidate = typ\n\t}\n\n\tif candidate == nil {\n\t\treturn fmt.Errorf(\"%s %s: %w\", wanted, name, ErrNotFound)\n\t}\n\n\ttypPtr.Set(reflect.ValueOf(candidate))\n\n\treturn nil\n}\n\n// LoadSplitSpecFromReader loads split BTF from a reader.\n//\n// Types from base are used to resolve references in the split BTF.\n// The returned Spec only contains types from the split BTF, not from the base.\nfunc LoadSplitSpecFromReader(r io.ReaderAt, base *Spec) (*Spec, error) {\n\treturn loadRawSpec(r, internal.NativeEndian, base)\n}\n\n// TypesIterator iterates over types of a given spec.\ntype TypesIterator struct {\n\ttypes []Type\n\tindex int\n\t// The last visited type in the spec.\n\tType Type\n}\n\n// Iterate returns the types iterator.\nfunc (s *Spec) Iterate() *TypesIterator {\n\t// We share the backing array of types with the Spec. This is safe since\n\t// we don't allow deletion or shuffling of types.\n\treturn &TypesIterator{types: s.types, index: 0}\n}\n\n// Next returns true as long as there are any remaining types.\nfunc (iter *TypesIterator) Next() bool {\n\tif len(iter.types) <= iter.index {\n\t\treturn false\n\t}\n\n\titer.Type = iter.types[iter.index]\n\titer.index++\n\treturn true\n}\n\n// haveBTF attempts to load a BTF blob containing an Int. It should pass on any\n// kernel that supports BPF_BTF_LOAD.\nvar haveBTF = internal.NewFeatureTest(\"BTF\", \"4.18\", func() error {\n\t// 0-length anonymous integer\n\terr := probeBTF(&Int{})\n\tif errors.Is(err, unix.EINVAL) || errors.Is(err, unix.EPERM) {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n})\n\n// haveMapBTF attempts to load a minimal BTF blob containing a Var. It is\n// used as a proxy for .bss, .data and .rodata map support, which generally\n// come with a Var and Datasec. These were introduced in Linux 5.2.\nvar haveMapBTF = internal.NewFeatureTest(\"Map BTF (Var/Datasec)\", \"5.2\", func() error {\n\tif err := haveBTF(); err != nil {\n\t\treturn err\n\t}\n\n\tv := &Var{\n\t\tName: \"a\",\n\t\tType: &Pointer{(*Void)(nil)},\n\t}\n\n\terr := probeBTF(v)\n\tif errors.Is(err, unix.EINVAL) || errors.Is(err, unix.EPERM) {\n\t\t// Treat both EINVAL and EPERM as not supported: creating the map may still\n\t\t// succeed without Btf* attrs.\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n})\n\n// haveProgBTF attempts to load a BTF blob containing a Func and FuncProto. It\n// is used as a proxy for ext_info (func_info) support, which depends on\n// Func(Proto) by definition.\nvar haveProgBTF = internal.NewFeatureTest(\"Program BTF (func/line_info)\", \"5.0\", func() error {\n\tif err := haveBTF(); err != nil {\n\t\treturn err\n\t}\n\n\tfn := &Func{\n\t\tName: \"a\",\n\t\tType: &FuncProto{Return: (*Void)(nil)},\n\t}\n\n\terr := probeBTF(fn)\n\tif errors.Is(err, unix.EINVAL) || errors.Is(err, unix.EPERM) {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n})\n\nvar haveFuncLinkage = internal.NewFeatureTest(\"BTF func linkage\", \"5.6\", func() error {\n\tif err := haveProgBTF(); err != nil {\n\t\treturn err\n\t}\n\n\tfn := &Func{\n\t\tName:    \"a\",\n\t\tType:    &FuncProto{Return: (*Void)(nil)},\n\t\tLinkage: GlobalFunc,\n\t}\n\n\terr := probeBTF(fn)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn err\n})\n\nfunc probeBTF(typ Type) error {\n\tb, err := NewBuilder([]Type{typ})\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tbuf, err := b.Marshal(nil, nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfd, err := sys.BtfLoad(&sys.BtfLoadAttr{\n\t\tBtf:     sys.NewSlicePointer(buf),\n\t\tBtfSize: uint32(len(buf)),\n\t})\n\n\tif err == nil {\n\t\tfd.Close()\n\t}\n\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/btf_types.go",
    "content": "package btf\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"unsafe\"\n)\n\n//go:generate stringer -linecomment -output=btf_types_string.go -type=FuncLinkage,VarLinkage,btfKind\n\n// btfKind describes a Type.\ntype btfKind uint8\n\n// Equivalents of the BTF_KIND_* constants.\nconst (\n\tkindUnknown  btfKind = iota // Unknown\n\tkindInt                     // Int\n\tkindPointer                 // Pointer\n\tkindArray                   // Array\n\tkindStruct                  // Struct\n\tkindUnion                   // Union\n\tkindEnum                    // Enum\n\tkindForward                 // Forward\n\tkindTypedef                 // Typedef\n\tkindVolatile                // Volatile\n\tkindConst                   // Const\n\tkindRestrict                // Restrict\n\t// Added ~4.20\n\tkindFunc      // Func\n\tkindFuncProto // FuncProto\n\t// Added ~5.1\n\tkindVar     // Var\n\tkindDatasec // Datasec\n\t// Added ~5.13\n\tkindFloat // Float\n\t// Added 5.16\n\tkindDeclTag // DeclTag\n\tkindTypeTag // TypeTag\n\t// Added 6.0\n\tkindEnum64 // Enum64\n)\n\n// FuncLinkage describes BTF function linkage metadata.\ntype FuncLinkage int\n\n// Equivalent of enum btf_func_linkage.\nconst (\n\tStaticFunc FuncLinkage = iota // static\n\tGlobalFunc                    // global\n\tExternFunc                    // extern\n)\n\n// VarLinkage describes BTF variable linkage metadata.\ntype VarLinkage int\n\nconst (\n\tStaticVar VarLinkage = iota // static\n\tGlobalVar                   // global\n\tExternVar                   // extern\n)\n\nconst (\n\tbtfTypeKindShift     = 24\n\tbtfTypeKindLen       = 5\n\tbtfTypeVlenShift     = 0\n\tbtfTypeVlenMask      = 16\n\tbtfTypeKindFlagShift = 31\n\tbtfTypeKindFlagMask  = 1\n)\n\nvar btfTypeLen = binary.Size(btfType{})\n\n// btfType is equivalent to struct btf_type in Documentation/bpf/btf.rst.\ntype btfType struct {\n\tNameOff uint32\n\t/* \"info\" bits arrangement\n\t * bits  0-15: vlen (e.g. # of struct's members), linkage\n\t * bits 16-23: unused\n\t * bits 24-28: kind (e.g. int, ptr, array...etc)\n\t * bits 29-30: unused\n\t * bit     31: kind_flag, currently used by\n\t *             struct, union and fwd\n\t */\n\tInfo uint32\n\t/* \"size\" is used by INT, ENUM, STRUCT and UNION.\n\t * \"size\" tells the size of the type it is describing.\n\t *\n\t * \"type\" is used by PTR, TYPEDEF, VOLATILE, CONST, RESTRICT,\n\t * FUNC and FUNC_PROTO.\n\t * \"type\" is a type_id referring to another type.\n\t */\n\tSizeType uint32\n}\n\nfunc mask(len uint32) uint32 {\n\treturn (1 << len) - 1\n}\n\nfunc readBits(value, len, shift uint32) uint32 {\n\treturn (value >> shift) & mask(len)\n}\n\nfunc writeBits(value, len, shift, new uint32) uint32 {\n\tvalue &^= mask(len) << shift\n\tvalue |= (new & mask(len)) << shift\n\treturn value\n}\n\nfunc (bt *btfType) info(len, shift uint32) uint32 {\n\treturn readBits(bt.Info, len, shift)\n}\n\nfunc (bt *btfType) setInfo(value, len, shift uint32) {\n\tbt.Info = writeBits(bt.Info, len, shift, value)\n}\n\nfunc (bt *btfType) Kind() btfKind {\n\treturn btfKind(bt.info(btfTypeKindLen, btfTypeKindShift))\n}\n\nfunc (bt *btfType) SetKind(kind btfKind) {\n\tbt.setInfo(uint32(kind), btfTypeKindLen, btfTypeKindShift)\n}\n\nfunc (bt *btfType) Vlen() int {\n\treturn int(bt.info(btfTypeVlenMask, btfTypeVlenShift))\n}\n\nfunc (bt *btfType) SetVlen(vlen int) {\n\tbt.setInfo(uint32(vlen), btfTypeVlenMask, btfTypeVlenShift)\n}\n\nfunc (bt *btfType) kindFlagBool() bool {\n\treturn bt.info(btfTypeKindFlagMask, btfTypeKindFlagShift) == 1\n}\n\nfunc (bt *btfType) setKindFlagBool(set bool) {\n\tvar value uint32\n\tif set {\n\t\tvalue = 1\n\t}\n\tbt.setInfo(value, btfTypeKindFlagMask, btfTypeKindFlagShift)\n}\n\n// Bitfield returns true if the struct or union contain a bitfield.\nfunc (bt *btfType) Bitfield() bool {\n\treturn bt.kindFlagBool()\n}\n\nfunc (bt *btfType) SetBitfield(isBitfield bool) {\n\tbt.setKindFlagBool(isBitfield)\n}\n\nfunc (bt *btfType) FwdKind() FwdKind {\n\treturn FwdKind(bt.info(btfTypeKindFlagMask, btfTypeKindFlagShift))\n}\n\nfunc (bt *btfType) SetFwdKind(kind FwdKind) {\n\tbt.setInfo(uint32(kind), btfTypeKindFlagMask, btfTypeKindFlagShift)\n}\n\nfunc (bt *btfType) Signed() bool {\n\treturn bt.kindFlagBool()\n}\n\nfunc (bt *btfType) SetSigned(signed bool) {\n\tbt.setKindFlagBool(signed)\n}\n\nfunc (bt *btfType) Linkage() FuncLinkage {\n\treturn FuncLinkage(bt.info(btfTypeVlenMask, btfTypeVlenShift))\n}\n\nfunc (bt *btfType) SetLinkage(linkage FuncLinkage) {\n\tbt.setInfo(uint32(linkage), btfTypeVlenMask, btfTypeVlenShift)\n}\n\nfunc (bt *btfType) Type() TypeID {\n\t// TODO: Panic here if wrong kind?\n\treturn TypeID(bt.SizeType)\n}\n\nfunc (bt *btfType) SetType(id TypeID) {\n\tbt.SizeType = uint32(id)\n}\n\nfunc (bt *btfType) Size() uint32 {\n\t// TODO: Panic here if wrong kind?\n\treturn bt.SizeType\n}\n\nfunc (bt *btfType) SetSize(size uint32) {\n\tbt.SizeType = size\n}\n\nfunc (bt *btfType) Marshal(w io.Writer, bo binary.ByteOrder) error {\n\tbuf := make([]byte, unsafe.Sizeof(*bt))\n\tbo.PutUint32(buf[0:], bt.NameOff)\n\tbo.PutUint32(buf[4:], bt.Info)\n\tbo.PutUint32(buf[8:], bt.SizeType)\n\t_, err := w.Write(buf)\n\treturn err\n}\n\ntype rawType struct {\n\tbtfType\n\tdata interface{}\n}\n\nfunc (rt *rawType) Marshal(w io.Writer, bo binary.ByteOrder) error {\n\tif err := rt.btfType.Marshal(w, bo); err != nil {\n\t\treturn err\n\t}\n\n\tif rt.data == nil {\n\t\treturn nil\n\t}\n\n\treturn binary.Write(w, bo, rt.data)\n}\n\n// btfInt encodes additional data for integers.\n//\n//\t? ? ? ? e e e e o o o o o o o o ? ? ? ? ? ? ? ? b b b b b b b b\n//\t? = undefined\n//\te = encoding\n//\to = offset (bitfields?)\n//\tb = bits (bitfields)\ntype btfInt struct {\n\tRaw uint32\n}\n\nconst (\n\tbtfIntEncodingLen   = 4\n\tbtfIntEncodingShift = 24\n\tbtfIntOffsetLen     = 8\n\tbtfIntOffsetShift   = 16\n\tbtfIntBitsLen       = 8\n\tbtfIntBitsShift     = 0\n)\n\nfunc (bi btfInt) Encoding() IntEncoding {\n\treturn IntEncoding(readBits(bi.Raw, btfIntEncodingLen, btfIntEncodingShift))\n}\n\nfunc (bi *btfInt) SetEncoding(e IntEncoding) {\n\tbi.Raw = writeBits(uint32(bi.Raw), btfIntEncodingLen, btfIntEncodingShift, uint32(e))\n}\n\nfunc (bi btfInt) Offset() Bits {\n\treturn Bits(readBits(bi.Raw, btfIntOffsetLen, btfIntOffsetShift))\n}\n\nfunc (bi *btfInt) SetOffset(offset uint32) {\n\tbi.Raw = writeBits(bi.Raw, btfIntOffsetLen, btfIntOffsetShift, offset)\n}\n\nfunc (bi btfInt) Bits() Bits {\n\treturn Bits(readBits(bi.Raw, btfIntBitsLen, btfIntBitsShift))\n}\n\nfunc (bi *btfInt) SetBits(bits byte) {\n\tbi.Raw = writeBits(bi.Raw, btfIntBitsLen, btfIntBitsShift, uint32(bits))\n}\n\ntype btfArray struct {\n\tType      TypeID\n\tIndexType TypeID\n\tNelems    uint32\n}\n\ntype btfMember struct {\n\tNameOff uint32\n\tType    TypeID\n\tOffset  uint32\n}\n\ntype btfVarSecinfo struct {\n\tType   TypeID\n\tOffset uint32\n\tSize   uint32\n}\n\ntype btfVariable struct {\n\tLinkage uint32\n}\n\ntype btfEnum struct {\n\tNameOff uint32\n\tVal     uint32\n}\n\ntype btfEnum64 struct {\n\tNameOff uint32\n\tValLo32 uint32\n\tValHi32 uint32\n}\n\ntype btfParam struct {\n\tNameOff uint32\n\tType    TypeID\n}\n\ntype btfDeclTag struct {\n\tComponentIdx uint32\n}\n\nfunc readTypes(r io.Reader, bo binary.ByteOrder, typeLen uint32) ([]rawType, error) {\n\tvar header btfType\n\t// because of the interleaving between types and struct members it is difficult to\n\t// precompute the numbers of raw types this will parse\n\t// this \"guess\" is a good first estimation\n\tsizeOfbtfType := uintptr(btfTypeLen)\n\ttyMaxCount := uintptr(typeLen) / sizeOfbtfType / 2\n\ttypes := make([]rawType, 0, tyMaxCount)\n\n\tfor id := TypeID(1); ; id++ {\n\t\tif err := binary.Read(r, bo, &header); err == io.EOF {\n\t\t\treturn types, nil\n\t\t} else if err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't read type info for id %v: %v\", id, err)\n\t\t}\n\n\t\tvar data interface{}\n\t\tswitch header.Kind() {\n\t\tcase kindInt:\n\t\t\tdata = new(btfInt)\n\t\tcase kindPointer:\n\t\tcase kindArray:\n\t\t\tdata = new(btfArray)\n\t\tcase kindStruct:\n\t\t\tfallthrough\n\t\tcase kindUnion:\n\t\t\tdata = make([]btfMember, header.Vlen())\n\t\tcase kindEnum:\n\t\t\tdata = make([]btfEnum, header.Vlen())\n\t\tcase kindForward:\n\t\tcase kindTypedef:\n\t\tcase kindVolatile:\n\t\tcase kindConst:\n\t\tcase kindRestrict:\n\t\tcase kindFunc:\n\t\tcase kindFuncProto:\n\t\t\tdata = make([]btfParam, header.Vlen())\n\t\tcase kindVar:\n\t\t\tdata = new(btfVariable)\n\t\tcase kindDatasec:\n\t\t\tdata = make([]btfVarSecinfo, header.Vlen())\n\t\tcase kindFloat:\n\t\tcase kindDeclTag:\n\t\t\tdata = new(btfDeclTag)\n\t\tcase kindTypeTag:\n\t\tcase kindEnum64:\n\t\t\tdata = make([]btfEnum64, header.Vlen())\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"type id %v: unknown kind: %v\", id, header.Kind())\n\t\t}\n\n\t\tif data == nil {\n\t\t\ttypes = append(types, rawType{header, nil})\n\t\t\tcontinue\n\t\t}\n\n\t\tif err := binary.Read(r, bo, data); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"type id %d: kind %v: can't read %T: %v\", id, header.Kind(), data, err)\n\t\t}\n\n\t\ttypes = append(types, rawType{header, data})\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/btf_types_string.go",
    "content": "// Code generated by \"stringer -linecomment -output=btf_types_string.go -type=FuncLinkage,VarLinkage,btfKind\"; DO NOT EDIT.\n\npackage btf\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[StaticFunc-0]\n\t_ = x[GlobalFunc-1]\n\t_ = x[ExternFunc-2]\n}\n\nconst _FuncLinkage_name = \"staticglobalextern\"\n\nvar _FuncLinkage_index = [...]uint8{0, 6, 12, 18}\n\nfunc (i FuncLinkage) String() string {\n\tif i < 0 || i >= FuncLinkage(len(_FuncLinkage_index)-1) {\n\t\treturn \"FuncLinkage(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _FuncLinkage_name[_FuncLinkage_index[i]:_FuncLinkage_index[i+1]]\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[StaticVar-0]\n\t_ = x[GlobalVar-1]\n\t_ = x[ExternVar-2]\n}\n\nconst _VarLinkage_name = \"staticglobalextern\"\n\nvar _VarLinkage_index = [...]uint8{0, 6, 12, 18}\n\nfunc (i VarLinkage) String() string {\n\tif i < 0 || i >= VarLinkage(len(_VarLinkage_index)-1) {\n\t\treturn \"VarLinkage(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _VarLinkage_name[_VarLinkage_index[i]:_VarLinkage_index[i+1]]\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[kindUnknown-0]\n\t_ = x[kindInt-1]\n\t_ = x[kindPointer-2]\n\t_ = x[kindArray-3]\n\t_ = x[kindStruct-4]\n\t_ = x[kindUnion-5]\n\t_ = x[kindEnum-6]\n\t_ = x[kindForward-7]\n\t_ = x[kindTypedef-8]\n\t_ = x[kindVolatile-9]\n\t_ = x[kindConst-10]\n\t_ = x[kindRestrict-11]\n\t_ = x[kindFunc-12]\n\t_ = x[kindFuncProto-13]\n\t_ = x[kindVar-14]\n\t_ = x[kindDatasec-15]\n\t_ = x[kindFloat-16]\n\t_ = x[kindDeclTag-17]\n\t_ = x[kindTypeTag-18]\n\t_ = x[kindEnum64-19]\n}\n\nconst _btfKind_name = \"UnknownIntPointerArrayStructUnionEnumForwardTypedefVolatileConstRestrictFuncFuncProtoVarDatasecFloatDeclTagTypeTagEnum64\"\n\nvar _btfKind_index = [...]uint8{0, 7, 10, 17, 22, 28, 33, 37, 44, 51, 59, 64, 72, 76, 85, 88, 95, 100, 107, 114, 120}\n\nfunc (i btfKind) String() string {\n\tif i >= btfKind(len(_btfKind_index)-1) {\n\t\treturn \"btfKind(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _btfKind_name[_btfKind_index[i]:_btfKind_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/core.go",
    "content": "package btf\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/asm\"\n)\n\n// Code in this file is derived from libbpf, which is available under a BSD\n// 2-Clause license.\n\n// COREFixup is the result of computing a CO-RE relocation for a target.\ntype COREFixup struct {\n\tkind   coreKind\n\tlocal  uint32\n\ttarget uint32\n\t// True if there is no valid fixup. The instruction is replaced with an\n\t// invalid dummy.\n\tpoison bool\n\t// True if the validation of the local value should be skipped. Used by\n\t// some kinds of bitfield relocations.\n\tskipLocalValidation bool\n}\n\nfunc (f *COREFixup) equal(other COREFixup) bool {\n\treturn f.local == other.local && f.target == other.target\n}\n\nfunc (f *COREFixup) String() string {\n\tif f.poison {\n\t\treturn fmt.Sprintf(\"%s=poison\", f.kind)\n\t}\n\treturn fmt.Sprintf(\"%s=%d->%d\", f.kind, f.local, f.target)\n}\n\nfunc (f *COREFixup) Apply(ins *asm.Instruction) error {\n\tif f.poison {\n\t\tconst badRelo = 0xbad2310\n\n\t\t*ins = asm.BuiltinFunc(badRelo).Call()\n\t\treturn nil\n\t}\n\n\tswitch class := ins.OpCode.Class(); class {\n\tcase asm.LdXClass, asm.StClass, asm.StXClass:\n\t\tif want := int16(f.local); !f.skipLocalValidation && want != ins.Offset {\n\t\t\treturn fmt.Errorf(\"invalid offset %d, expected %d\", ins.Offset, f.local)\n\t\t}\n\n\t\tif f.target > math.MaxInt16 {\n\t\t\treturn fmt.Errorf(\"offset %d exceeds MaxInt16\", f.target)\n\t\t}\n\n\t\tins.Offset = int16(f.target)\n\n\tcase asm.LdClass:\n\t\tif !ins.IsConstantLoad(asm.DWord) {\n\t\t\treturn fmt.Errorf(\"not a dword-sized immediate load\")\n\t\t}\n\n\t\tif want := int64(f.local); !f.skipLocalValidation && want != ins.Constant {\n\t\t\treturn fmt.Errorf(\"invalid immediate %d, expected %d (fixup: %v)\", ins.Constant, want, f)\n\t\t}\n\n\t\tins.Constant = int64(f.target)\n\n\tcase asm.ALUClass:\n\t\tif ins.OpCode.ALUOp() == asm.Swap {\n\t\t\treturn fmt.Errorf(\"relocation against swap\")\n\t\t}\n\n\t\tfallthrough\n\n\tcase asm.ALU64Class:\n\t\tif src := ins.OpCode.Source(); src != asm.ImmSource {\n\t\t\treturn fmt.Errorf(\"invalid source %s\", src)\n\t\t}\n\n\t\tif want := int64(f.local); !f.skipLocalValidation && want != ins.Constant {\n\t\t\treturn fmt.Errorf(\"invalid immediate %d, expected %d (fixup: %v, kind: %v, ins: %v)\", ins.Constant, want, f, f.kind, ins)\n\t\t}\n\n\t\tif f.target > math.MaxInt32 {\n\t\t\treturn fmt.Errorf(\"immediate %d exceeds MaxInt32\", f.target)\n\t\t}\n\n\t\tins.Constant = int64(f.target)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"invalid class %s\", class)\n\t}\n\n\treturn nil\n}\n\nfunc (f COREFixup) isNonExistant() bool {\n\treturn f.kind.checksForExistence() && f.target == 0\n}\n\n// coreKind is the type of CO-RE relocation as specified in BPF source code.\ntype coreKind uint32\n\nconst (\n\treloFieldByteOffset coreKind = iota /* field byte offset */\n\treloFieldByteSize                   /* field size in bytes */\n\treloFieldExists                     /* field existence in target kernel */\n\treloFieldSigned                     /* field signedness (0 - unsigned, 1 - signed) */\n\treloFieldLShiftU64                  /* bitfield-specific left bitshift */\n\treloFieldRShiftU64                  /* bitfield-specific right bitshift */\n\treloTypeIDLocal                     /* type ID in local BPF object */\n\treloTypeIDTarget                    /* type ID in target kernel */\n\treloTypeExists                      /* type existence in target kernel */\n\treloTypeSize                        /* type size in bytes */\n\treloEnumvalExists                   /* enum value existence in target kernel */\n\treloEnumvalValue                    /* enum value integer value */\n)\n\nfunc (k coreKind) checksForExistence() bool {\n\treturn k == reloEnumvalExists || k == reloTypeExists || k == reloFieldExists\n}\n\nfunc (k coreKind) String() string {\n\tswitch k {\n\tcase reloFieldByteOffset:\n\t\treturn \"byte_off\"\n\tcase reloFieldByteSize:\n\t\treturn \"byte_sz\"\n\tcase reloFieldExists:\n\t\treturn \"field_exists\"\n\tcase reloFieldSigned:\n\t\treturn \"signed\"\n\tcase reloFieldLShiftU64:\n\t\treturn \"lshift_u64\"\n\tcase reloFieldRShiftU64:\n\t\treturn \"rshift_u64\"\n\tcase reloTypeIDLocal:\n\t\treturn \"local_type_id\"\n\tcase reloTypeIDTarget:\n\t\treturn \"target_type_id\"\n\tcase reloTypeExists:\n\t\treturn \"type_exists\"\n\tcase reloTypeSize:\n\t\treturn \"type_size\"\n\tcase reloEnumvalExists:\n\t\treturn \"enumval_exists\"\n\tcase reloEnumvalValue:\n\t\treturn \"enumval_value\"\n\tdefault:\n\t\treturn \"unknown\"\n\t}\n}\n\n// CORERelocate calculates changes needed to adjust eBPF instructions for differences\n// in types.\n//\n// Returns a list of fixups which can be applied to instructions to make them\n// match the target type(s).\n//\n// Fixups are returned in the order of relos, e.g. fixup[i] is the solution\n// for relos[i].\nfunc CORERelocate(relos []*CORERelocation, target *Spec, bo binary.ByteOrder) ([]COREFixup, error) {\n\tif target == nil {\n\t\tvar err error\n\t\ttarget, _, err = kernelSpec()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"load kernel spec: %w\", err)\n\t\t}\n\t}\n\n\tif bo != target.byteOrder {\n\t\treturn nil, fmt.Errorf(\"can't relocate %s against %s\", bo, target.byteOrder)\n\t}\n\n\ttype reloGroup struct {\n\t\trelos []*CORERelocation\n\t\t// Position of each relocation in relos.\n\t\tindices []int\n\t}\n\n\t// Split relocations into per Type lists.\n\trelosByType := make(map[Type]*reloGroup)\n\tresult := make([]COREFixup, len(relos))\n\tfor i, relo := range relos {\n\t\tif relo.kind == reloTypeIDLocal {\n\t\t\t// Filtering out reloTypeIDLocal here makes our lives a lot easier\n\t\t\t// down the line, since it doesn't have a target at all.\n\t\t\tif len(relo.accessor) > 1 || relo.accessor[0] != 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"%s: unexpected accessor %v\", relo.kind, relo.accessor)\n\t\t\t}\n\n\t\t\tresult[i] = COREFixup{\n\t\t\t\tkind:  relo.kind,\n\t\t\t\tlocal: uint32(relo.id),\n\t\t\t\t// NB: Using relo.id as the target here is incorrect, since\n\t\t\t\t// it doesn't match the BTF we generate on the fly. This isn't\n\t\t\t\t// too bad for now since there are no uses of the local type ID\n\t\t\t\t// in the kernel, yet.\n\t\t\t\ttarget: uint32(relo.id),\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tgroup, ok := relosByType[relo.typ]\n\t\tif !ok {\n\t\t\tgroup = &reloGroup{}\n\t\t\trelosByType[relo.typ] = group\n\t\t}\n\t\tgroup.relos = append(group.relos, relo)\n\t\tgroup.indices = append(group.indices, i)\n\t}\n\n\tfor localType, group := range relosByType {\n\t\tlocalTypeName := localType.TypeName()\n\t\tif localTypeName == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"relocate unnamed or anonymous type %s: %w\", localType, ErrNotSupported)\n\t\t}\n\n\t\ttargets := target.namedTypes[newEssentialName(localTypeName)]\n\t\tfixups, err := coreCalculateFixups(group.relos, target, targets, bo)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"relocate %s: %w\", localType, err)\n\t\t}\n\n\t\tfor j, index := range group.indices {\n\t\t\tresult[index] = fixups[j]\n\t\t}\n\t}\n\n\treturn result, nil\n}\n\nvar errAmbiguousRelocation = errors.New(\"ambiguous relocation\")\nvar errImpossibleRelocation = errors.New(\"impossible relocation\")\nvar errIncompatibleTypes = errors.New(\"incompatible types\")\n\n// coreCalculateFixups finds the target type that best matches all relocations.\n//\n// All relos must target the same type.\n//\n// The best target is determined by scoring: the less poisoning we have to do\n// the better the target is.\nfunc coreCalculateFixups(relos []*CORERelocation, targetSpec *Spec, targets []Type, bo binary.ByteOrder) ([]COREFixup, error) {\n\tbestScore := len(relos)\n\tvar bestFixups []COREFixup\n\tfor _, target := range targets {\n\t\ttargetID, err := targetSpec.TypeID(target)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"target type ID: %w\", err)\n\t\t}\n\n\t\tscore := 0 // lower is better\n\t\tfixups := make([]COREFixup, 0, len(relos))\n\t\tfor _, relo := range relos {\n\t\t\tfixup, err := coreCalculateFixup(relo, target, targetID, bo)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"target %s: %s: %w\", target, relo.kind, err)\n\t\t\t}\n\t\t\tif fixup.poison || fixup.isNonExistant() {\n\t\t\t\tscore++\n\t\t\t}\n\t\t\tfixups = append(fixups, fixup)\n\t\t}\n\n\t\tif score > bestScore {\n\t\t\t// We have a better target already, ignore this one.\n\t\t\tcontinue\n\t\t}\n\n\t\tif score < bestScore {\n\t\t\t// This is the best target yet, use it.\n\t\t\tbestScore = score\n\t\t\tbestFixups = fixups\n\t\t\tcontinue\n\t\t}\n\n\t\t// Some other target has the same score as the current one. Make sure\n\t\t// the fixups agree with each other.\n\t\tfor i, fixup := range bestFixups {\n\t\t\tif !fixup.equal(fixups[i]) {\n\t\t\t\treturn nil, fmt.Errorf(\"%s: multiple types match: %w\", fixup.kind, errAmbiguousRelocation)\n\t\t\t}\n\t\t}\n\t}\n\n\tif bestFixups == nil {\n\t\t// Nothing at all matched, probably because there are no suitable\n\t\t// targets at all.\n\t\t//\n\t\t// Poison everything except checksForExistence.\n\t\tbestFixups = make([]COREFixup, len(relos))\n\t\tfor i, relo := range relos {\n\t\t\tif relo.kind.checksForExistence() {\n\t\t\t\tbestFixups[i] = COREFixup{kind: relo.kind, local: 1, target: 0}\n\t\t\t} else {\n\t\t\t\tbestFixups[i] = COREFixup{kind: relo.kind, poison: true}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn bestFixups, nil\n}\n\nvar errNoSignedness = errors.New(\"no signedness\")\n\n// coreCalculateFixup calculates the fixup for a single local type, target type\n// and relocation.\nfunc coreCalculateFixup(relo *CORERelocation, target Type, targetID TypeID, bo binary.ByteOrder) (COREFixup, error) {\n\tfixup := func(local, target uint32) (COREFixup, error) {\n\t\treturn COREFixup{kind: relo.kind, local: local, target: target}, nil\n\t}\n\tfixupWithoutValidation := func(local, target uint32) (COREFixup, error) {\n\t\treturn COREFixup{kind: relo.kind, local: local, target: target, skipLocalValidation: true}, nil\n\t}\n\tpoison := func() (COREFixup, error) {\n\t\tif relo.kind.checksForExistence() {\n\t\t\treturn fixup(1, 0)\n\t\t}\n\t\treturn COREFixup{kind: relo.kind, poison: true}, nil\n\t}\n\tzero := COREFixup{}\n\n\tlocal := relo.typ\n\n\tswitch relo.kind {\n\tcase reloTypeIDTarget, reloTypeSize, reloTypeExists:\n\t\tif len(relo.accessor) > 1 || relo.accessor[0] != 0 {\n\t\t\treturn zero, fmt.Errorf(\"unexpected accessor %v\", relo.accessor)\n\t\t}\n\n\t\terr := coreAreTypesCompatible(local, target)\n\t\tif errors.Is(err, errIncompatibleTypes) {\n\t\t\treturn poison()\n\t\t}\n\t\tif err != nil {\n\t\t\treturn zero, err\n\t\t}\n\n\t\tswitch relo.kind {\n\t\tcase reloTypeExists:\n\t\t\treturn fixup(1, 1)\n\n\t\tcase reloTypeIDTarget:\n\t\t\treturn fixup(uint32(relo.id), uint32(targetID))\n\n\t\tcase reloTypeSize:\n\t\t\tlocalSize, err := Sizeof(local)\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\n\t\t\ttargetSize, err := Sizeof(target)\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\n\t\t\treturn fixup(uint32(localSize), uint32(targetSize))\n\t\t}\n\n\tcase reloEnumvalValue, reloEnumvalExists:\n\t\tlocalValue, targetValue, err := coreFindEnumValue(local, relo.accessor, target)\n\t\tif errors.Is(err, errImpossibleRelocation) {\n\t\t\treturn poison()\n\t\t}\n\t\tif err != nil {\n\t\t\treturn zero, err\n\t\t}\n\n\t\tswitch relo.kind {\n\t\tcase reloEnumvalExists:\n\t\t\treturn fixup(1, 1)\n\n\t\tcase reloEnumvalValue:\n\t\t\treturn fixup(uint32(localValue.Value), uint32(targetValue.Value))\n\t\t}\n\n\tcase reloFieldByteOffset, reloFieldByteSize, reloFieldExists, reloFieldLShiftU64, reloFieldRShiftU64, reloFieldSigned:\n\t\tif _, ok := as[*Fwd](target); ok {\n\t\t\t// We can't relocate fields using a forward declaration, so\n\t\t\t// skip it. If a non-forward declaration is present in the BTF\n\t\t\t// we'll find it in one of the other iterations.\n\t\t\treturn poison()\n\t\t}\n\n\t\tlocalField, targetField, err := coreFindField(local, relo.accessor, target)\n\t\tif errors.Is(err, errImpossibleRelocation) {\n\t\t\treturn poison()\n\t\t}\n\t\tif err != nil {\n\t\t\treturn zero, err\n\t\t}\n\n\t\tmaybeSkipValidation := func(f COREFixup, err error) (COREFixup, error) {\n\t\t\tf.skipLocalValidation = localField.bitfieldSize > 0\n\t\t\treturn f, err\n\t\t}\n\n\t\tswitch relo.kind {\n\t\tcase reloFieldExists:\n\t\t\treturn fixup(1, 1)\n\n\t\tcase reloFieldByteOffset:\n\t\t\treturn maybeSkipValidation(fixup(localField.offset, targetField.offset))\n\n\t\tcase reloFieldByteSize:\n\t\t\tlocalSize, err := Sizeof(localField.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\n\t\t\ttargetSize, err := Sizeof(targetField.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\t\t\treturn maybeSkipValidation(fixup(uint32(localSize), uint32(targetSize)))\n\n\t\tcase reloFieldLShiftU64:\n\t\t\tvar target uint32\n\t\t\tif bo == binary.LittleEndian {\n\t\t\t\ttargetSize, err := targetField.sizeBits()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn zero, err\n\t\t\t\t}\n\n\t\t\t\ttarget = uint32(64 - targetField.bitfieldOffset - targetSize)\n\t\t\t} else {\n\t\t\t\tloadWidth, err := Sizeof(targetField.Type)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn zero, err\n\t\t\t\t}\n\n\t\t\t\ttarget = uint32(64 - Bits(loadWidth*8) + targetField.bitfieldOffset)\n\t\t\t}\n\t\t\treturn fixupWithoutValidation(0, target)\n\n\t\tcase reloFieldRShiftU64:\n\t\t\ttargetSize, err := targetField.sizeBits()\n\t\t\tif err != nil {\n\t\t\t\treturn zero, err\n\t\t\t}\n\n\t\t\treturn fixupWithoutValidation(0, uint32(64-targetSize))\n\n\t\tcase reloFieldSigned:\n\t\t\tswitch local := UnderlyingType(localField.Type).(type) {\n\t\t\tcase *Enum:\n\t\t\t\ttarget, ok := as[*Enum](targetField.Type)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn zero, fmt.Errorf(\"target isn't *Enum but %T\", targetField.Type)\n\t\t\t\t}\n\n\t\t\t\treturn fixup(boolToUint32(local.Signed), boolToUint32(target.Signed))\n\t\t\tcase *Int:\n\t\t\t\ttarget, ok := as[*Int](targetField.Type)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn zero, fmt.Errorf(\"target isn't *Int but %T\", targetField.Type)\n\t\t\t\t}\n\n\t\t\t\treturn fixup(\n\t\t\t\t\tuint32(local.Encoding&Signed),\n\t\t\t\t\tuint32(target.Encoding&Signed),\n\t\t\t\t)\n\t\t\tdefault:\n\t\t\t\treturn zero, fmt.Errorf(\"type %T: %w\", local, errNoSignedness)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn zero, ErrNotSupported\n}\n\nfunc boolToUint32(val bool) uint32 {\n\tif val {\n\t\treturn 1\n\t}\n\treturn 0\n}\n\n/* coreAccessor contains a path through a struct. It contains at least one index.\n *\n * The interpretation depends on the kind of the relocation. The following is\n * taken from struct bpf_core_relo in libbpf_internal.h:\n *\n * - for field-based relocations, string encodes an accessed field using\n *   a sequence of field and array indices, separated by colon (:). It's\n *   conceptually very close to LLVM's getelementptr ([0]) instruction's\n *   arguments for identifying offset to a field.\n * - for type-based relocations, strings is expected to be just \"0\";\n * - for enum value-based relocations, string contains an index of enum\n *   value within its enum type;\n *\n * Example to provide a better feel.\n *\n *   struct sample {\n *       int a;\n *       struct {\n *           int b[10];\n *       };\n *   };\n *\n *   struct sample s = ...;\n *   int x = &s->a;     // encoded as \"0:0\" (a is field #0)\n *   int y = &s->b[5];  // encoded as \"0:1:0:5\" (anon struct is field #1,\n *                      // b is field #0 inside anon struct, accessing elem #5)\n *   int z = &s[10]->b; // encoded as \"10:1\" (ptr is used as an array)\n */\ntype coreAccessor []int\n\nfunc parseCOREAccessor(accessor string) (coreAccessor, error) {\n\tif accessor == \"\" {\n\t\treturn nil, fmt.Errorf(\"empty accessor\")\n\t}\n\n\tparts := strings.Split(accessor, \":\")\n\tresult := make(coreAccessor, 0, len(parts))\n\tfor _, part := range parts {\n\t\t// 31 bits to avoid overflowing int on 32 bit platforms.\n\t\tindex, err := strconv.ParseUint(part, 10, 31)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"accessor index %q: %s\", part, err)\n\t\t}\n\n\t\tresult = append(result, int(index))\n\t}\n\n\treturn result, nil\n}\n\nfunc (ca coreAccessor) String() string {\n\tstrs := make([]string, 0, len(ca))\n\tfor _, i := range ca {\n\t\tstrs = append(strs, strconv.Itoa(i))\n\t}\n\treturn strings.Join(strs, \":\")\n}\n\nfunc (ca coreAccessor) enumValue(t Type) (*EnumValue, error) {\n\te, ok := as[*Enum](t)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"not an enum: %s\", t)\n\t}\n\n\tif len(ca) > 1 {\n\t\treturn nil, fmt.Errorf(\"invalid accessor %s for enum\", ca)\n\t}\n\n\ti := ca[0]\n\tif i >= len(e.Values) {\n\t\treturn nil, fmt.Errorf(\"invalid index %d for %s\", i, e)\n\t}\n\n\treturn &e.Values[i], nil\n}\n\n// coreField represents the position of a \"child\" of a composite type from the\n// start of that type.\n//\n//\t/- start of composite\n//\t| offset * 8 | bitfieldOffset | bitfieldSize | ... |\n//\t             \\- start of field       end of field -/\ntype coreField struct {\n\tType Type\n\n\t// The position of the field from the start of the composite type in bytes.\n\toffset uint32\n\n\t// The offset of the bitfield in bits from the start of the field.\n\tbitfieldOffset Bits\n\n\t// The size of the bitfield in bits.\n\t//\n\t// Zero if the field is not a bitfield.\n\tbitfieldSize Bits\n}\n\nfunc (cf *coreField) adjustOffsetToNthElement(n int) error {\n\tif n == 0 {\n\t\treturn nil\n\t}\n\n\tsize, err := Sizeof(cf.Type)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcf.offset += uint32(n) * uint32(size)\n\treturn nil\n}\n\nfunc (cf *coreField) adjustOffsetBits(offset Bits) error {\n\talign, err := alignof(cf.Type)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// We can compute the load offset by:\n\t// 1) converting the bit offset to bytes with a flooring division.\n\t// 2) dividing and multiplying that offset by the alignment, yielding the\n\t//    load size aligned offset.\n\toffsetBytes := uint32(offset/8) / uint32(align) * uint32(align)\n\n\t// The number of bits remaining is the bit offset less the number of bits\n\t// we can \"skip\" with the aligned offset.\n\tcf.bitfieldOffset = offset - Bits(offsetBytes*8)\n\n\t// We know that cf.offset is aligned at to at least align since we get it\n\t// from the compiler via BTF. Adding an aligned offsetBytes preserves the\n\t// alignment.\n\tcf.offset += offsetBytes\n\treturn nil\n}\n\nfunc (cf *coreField) sizeBits() (Bits, error) {\n\tif cf.bitfieldSize > 0 {\n\t\treturn cf.bitfieldSize, nil\n\t}\n\n\t// Someone is trying to access a non-bitfield via a bit shift relocation.\n\t// This happens when a field changes from a bitfield to a regular field\n\t// between kernel versions. Synthesise the size to make the shifts work.\n\tsize, err := Sizeof(cf.Type)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn Bits(size * 8), nil\n}\n\n// coreFindField descends into the local type using the accessor and tries to\n// find an equivalent field in target at each step.\n//\n// Returns the field and the offset of the field from the start of\n// target in bits.\nfunc coreFindField(localT Type, localAcc coreAccessor, targetT Type) (coreField, coreField, error) {\n\tlocal := coreField{Type: localT}\n\ttarget := coreField{Type: targetT}\n\n\tif err := coreAreMembersCompatible(local.Type, target.Type); err != nil {\n\t\treturn coreField{}, coreField{}, fmt.Errorf(\"fields: %w\", err)\n\t}\n\n\t// The first index is used to offset a pointer of the base type like\n\t// when accessing an array.\n\tif err := local.adjustOffsetToNthElement(localAcc[0]); err != nil {\n\t\treturn coreField{}, coreField{}, err\n\t}\n\n\tif err := target.adjustOffsetToNthElement(localAcc[0]); err != nil {\n\t\treturn coreField{}, coreField{}, err\n\t}\n\n\tvar localMaybeFlex, targetMaybeFlex bool\n\tfor i, acc := range localAcc[1:] {\n\t\tswitch localType := UnderlyingType(local.Type).(type) {\n\t\tcase composite:\n\t\t\t// For composite types acc is used to find the field in the local type,\n\t\t\t// and then we try to find a field in target with the same name.\n\t\t\tlocalMembers := localType.members()\n\t\t\tif acc >= len(localMembers) {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"invalid accessor %d for %s\", acc, localType)\n\t\t\t}\n\n\t\t\tlocalMember := localMembers[acc]\n\t\t\tif localMember.Name == \"\" {\n\t\t\t\tlocalMemberType, ok := as[composite](localMember.Type)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"unnamed field with type %s: %s\", localMember.Type, ErrNotSupported)\n\t\t\t\t}\n\n\t\t\t\t// This is an anonymous struct or union, ignore it.\n\t\t\t\tlocal = coreField{\n\t\t\t\t\tType:   localMemberType,\n\t\t\t\t\toffset: local.offset + localMember.Offset.Bytes(),\n\t\t\t\t}\n\t\t\t\tlocalMaybeFlex = false\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttargetType, ok := as[composite](target.Type)\n\t\t\tif !ok {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"target not composite: %w\", errImpossibleRelocation)\n\t\t\t}\n\n\t\t\ttargetMember, last, err := coreFindMember(targetType, localMember.Name)\n\t\t\tif err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\t\tlocal = coreField{\n\t\t\t\tType:         localMember.Type,\n\t\t\t\toffset:       local.offset,\n\t\t\t\tbitfieldSize: localMember.BitfieldSize,\n\t\t\t}\n\t\t\tlocalMaybeFlex = acc == len(localMembers)-1\n\n\t\t\ttarget = coreField{\n\t\t\t\tType:         targetMember.Type,\n\t\t\t\toffset:       target.offset,\n\t\t\t\tbitfieldSize: targetMember.BitfieldSize,\n\t\t\t}\n\t\t\ttargetMaybeFlex = last\n\n\t\t\tif local.bitfieldSize == 0 && target.bitfieldSize == 0 {\n\t\t\t\tlocal.offset += localMember.Offset.Bytes()\n\t\t\t\ttarget.offset += targetMember.Offset.Bytes()\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Either of the members is a bitfield. Make sure we're at the\n\t\t\t// end of the accessor.\n\t\t\tif next := i + 1; next < len(localAcc[1:]) {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"can't descend into bitfield\")\n\t\t\t}\n\n\t\t\tif err := local.adjustOffsetBits(localMember.Offset); err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\t\tif err := target.adjustOffsetBits(targetMember.Offset); err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\tcase *Array:\n\t\t\t// For arrays, acc is the index in the target.\n\t\t\ttargetType, ok := as[*Array](target.Type)\n\t\t\tif !ok {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"target not array: %w\", errImpossibleRelocation)\n\t\t\t}\n\n\t\t\tif localType.Nelems == 0 && !localMaybeFlex {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"local type has invalid flexible array\")\n\t\t\t}\n\t\t\tif targetType.Nelems == 0 && !targetMaybeFlex {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"target type has invalid flexible array\")\n\t\t\t}\n\n\t\t\tif localType.Nelems > 0 && acc >= int(localType.Nelems) {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"invalid access of %s at index %d\", localType, acc)\n\t\t\t}\n\t\t\tif targetType.Nelems > 0 && acc >= int(targetType.Nelems) {\n\t\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"out of bounds access of target: %w\", errImpossibleRelocation)\n\t\t\t}\n\n\t\t\tlocal = coreField{\n\t\t\t\tType:   localType.Type,\n\t\t\t\toffset: local.offset,\n\t\t\t}\n\t\t\tlocalMaybeFlex = false\n\n\t\t\tif err := local.adjustOffsetToNthElement(acc); err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\t\ttarget = coreField{\n\t\t\t\tType:   targetType.Type,\n\t\t\t\toffset: target.offset,\n\t\t\t}\n\t\t\ttargetMaybeFlex = false\n\n\t\t\tif err := target.adjustOffsetToNthElement(acc); err != nil {\n\t\t\t\treturn coreField{}, coreField{}, err\n\t\t\t}\n\n\t\tdefault:\n\t\t\treturn coreField{}, coreField{}, fmt.Errorf(\"relocate field of %T: %w\", localType, ErrNotSupported)\n\t\t}\n\n\t\tif err := coreAreMembersCompatible(local.Type, target.Type); err != nil {\n\t\t\treturn coreField{}, coreField{}, err\n\t\t}\n\t}\n\n\treturn local, target, nil\n}\n\n// coreFindMember finds a member in a composite type while handling anonymous\n// structs and unions.\nfunc coreFindMember(typ composite, name string) (Member, bool, error) {\n\tif name == \"\" {\n\t\treturn Member{}, false, errors.New(\"can't search for anonymous member\")\n\t}\n\n\ttype offsetTarget struct {\n\t\tcomposite\n\t\toffset Bits\n\t}\n\n\ttargets := []offsetTarget{{typ, 0}}\n\tvisited := make(map[composite]bool)\n\n\tfor i := 0; i < len(targets); i++ {\n\t\ttarget := targets[i]\n\n\t\t// Only visit targets once to prevent infinite recursion.\n\t\tif visited[target] {\n\t\t\tcontinue\n\t\t}\n\t\tif len(visited) >= maxTypeDepth {\n\t\t\t// This check is different than libbpf, which restricts the entire\n\t\t\t// path to BPF_CORE_SPEC_MAX_LEN items.\n\t\t\treturn Member{}, false, fmt.Errorf(\"type is nested too deep\")\n\t\t}\n\t\tvisited[target] = true\n\n\t\tmembers := target.members()\n\t\tfor j, member := range members {\n\t\t\tif member.Name == name {\n\t\t\t\t// NB: This is safe because member is a copy.\n\t\t\t\tmember.Offset += target.offset\n\t\t\t\treturn member, j == len(members)-1, nil\n\t\t\t}\n\n\t\t\t// The names don't match, but this member could be an anonymous struct\n\t\t\t// or union.\n\t\t\tif member.Name != \"\" {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tcomp, ok := as[composite](member.Type)\n\t\t\tif !ok {\n\t\t\t\treturn Member{}, false, fmt.Errorf(\"anonymous non-composite type %T not allowed\", member.Type)\n\t\t\t}\n\n\t\t\ttargets = append(targets, offsetTarget{comp, target.offset + member.Offset})\n\t\t}\n\t}\n\n\treturn Member{}, false, fmt.Errorf(\"no matching member: %w\", errImpossibleRelocation)\n}\n\n// coreFindEnumValue follows localAcc to find the equivalent enum value in target.\nfunc coreFindEnumValue(local Type, localAcc coreAccessor, target Type) (localValue, targetValue *EnumValue, _ error) {\n\tlocalValue, err := localAcc.enumValue(local)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\ttargetEnum, ok := as[*Enum](target)\n\tif !ok {\n\t\treturn nil, nil, errImpossibleRelocation\n\t}\n\n\tlocalName := newEssentialName(localValue.Name)\n\tfor i, targetValue := range targetEnum.Values {\n\t\tif newEssentialName(targetValue.Name) != localName {\n\t\t\tcontinue\n\t\t}\n\n\t\treturn localValue, &targetEnum.Values[i], nil\n\t}\n\n\treturn nil, nil, errImpossibleRelocation\n}\n\n// CheckTypeCompatibility checks local and target types for Compatibility according to CO-RE rules.\n//\n// Only layout compatibility is checked, ignoring names of the root type.\nfunc CheckTypeCompatibility(localType Type, targetType Type) error {\n\treturn coreAreTypesCompatible(localType, targetType)\n}\n\n/* The comment below is from bpf_core_types_are_compat in libbpf.c:\n *\n * Check local and target types for compatibility. This check is used for\n * type-based CO-RE relocations and follow slightly different rules than\n * field-based relocations. This function assumes that root types were already\n * checked for name match. Beyond that initial root-level name check, names\n * are completely ignored. Compatibility rules are as follows:\n *   - any two STRUCTs/UNIONs/FWDs/ENUMs/INTs are considered compatible, but\n *     kind should match for local and target types (i.e., STRUCT is not\n *     compatible with UNION);\n *   - for ENUMs, the size is ignored;\n *   - for INT, size and signedness are ignored;\n *   - for ARRAY, dimensionality is ignored, element types are checked for\n *     compatibility recursively;\n *   - CONST/VOLATILE/RESTRICT modifiers are ignored;\n *   - TYPEDEFs/PTRs are compatible if types they pointing to are compatible;\n *   - FUNC_PROTOs are compatible if they have compatible signature: same\n *     number of input args and compatible return and argument types.\n * These rules are not set in stone and probably will be adjusted as we get\n * more experience with using BPF CO-RE relocations.\n *\n * Returns errIncompatibleTypes if types are not compatible.\n */\nfunc coreAreTypesCompatible(localType Type, targetType Type) error {\n\n\tvar (\n\t\tlocalTs, targetTs typeDeque\n\t\tl, t              = &localType, &targetType\n\t\tdepth             = 0\n\t)\n\n\tfor ; l != nil && t != nil; l, t = localTs.Shift(), targetTs.Shift() {\n\t\tif depth >= maxTypeDepth {\n\t\t\treturn errors.New(\"types are nested too deep\")\n\t\t}\n\n\t\tlocalType = UnderlyingType(*l)\n\t\ttargetType = UnderlyingType(*t)\n\n\t\tif reflect.TypeOf(localType) != reflect.TypeOf(targetType) {\n\t\t\treturn fmt.Errorf(\"type mismatch: %w\", errIncompatibleTypes)\n\t\t}\n\n\t\tswitch lv := (localType).(type) {\n\t\tcase *Void, *Struct, *Union, *Enum, *Fwd, *Int:\n\t\t\t// Nothing to do here\n\n\t\tcase *Pointer, *Array:\n\t\t\tdepth++\n\t\t\twalkType(localType, localTs.Push)\n\t\t\twalkType(targetType, targetTs.Push)\n\n\t\tcase *FuncProto:\n\t\t\ttv := targetType.(*FuncProto)\n\t\t\tif len(lv.Params) != len(tv.Params) {\n\t\t\t\treturn fmt.Errorf(\"function param mismatch: %w\", errIncompatibleTypes)\n\t\t\t}\n\n\t\t\tdepth++\n\t\t\twalkType(localType, localTs.Push)\n\t\t\twalkType(targetType, targetTs.Push)\n\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"unsupported type %T\", localType)\n\t\t}\n\t}\n\n\tif l != nil {\n\t\treturn fmt.Errorf(\"dangling local type %T\", *l)\n\t}\n\n\tif t != nil {\n\t\treturn fmt.Errorf(\"dangling target type %T\", *t)\n\t}\n\n\treturn nil\n}\n\n/* coreAreMembersCompatible checks two types for field-based relocation compatibility.\n *\n * The comment below is from bpf_core_fields_are_compat in libbpf.c:\n *\n * Check two types for compatibility for the purpose of field access\n * relocation. const/volatile/restrict and typedefs are skipped to ensure we\n * are relocating semantically compatible entities:\n *   - any two STRUCTs/UNIONs are compatible and can be mixed;\n *   - any two FWDs are compatible, if their names match (modulo flavor suffix);\n *   - any two PTRs are always compatible;\n *   - for ENUMs, names should be the same (ignoring flavor suffix) or at\n *     least one of enums should be anonymous;\n *   - for ENUMs, check sizes, names are ignored;\n *   - for INT, size and signedness are ignored;\n *   - any two FLOATs are always compatible;\n *   - for ARRAY, dimensionality is ignored, element types are checked for\n *     compatibility recursively;\n *     [ NB: coreAreMembersCompatible doesn't recurse, this check is done\n *       by coreFindField. ]\n *   - everything else shouldn't be ever a target of relocation.\n * These rules are not set in stone and probably will be adjusted as we get\n * more experience with using BPF CO-RE relocations.\n *\n * Returns errImpossibleRelocation if the members are not compatible.\n */\nfunc coreAreMembersCompatible(localType Type, targetType Type) error {\n\tlocalType = UnderlyingType(localType)\n\ttargetType = UnderlyingType(targetType)\n\n\tdoNamesMatch := func(a, b string) error {\n\t\tif a == \"\" || b == \"\" {\n\t\t\t// allow anonymous and named type to match\n\t\t\treturn nil\n\t\t}\n\n\t\tif newEssentialName(a) == newEssentialName(b) {\n\t\t\treturn nil\n\t\t}\n\n\t\treturn fmt.Errorf(\"names don't match: %w\", errImpossibleRelocation)\n\t}\n\n\t_, lok := localType.(composite)\n\t_, tok := targetType.(composite)\n\tif lok && tok {\n\t\treturn nil\n\t}\n\n\tif reflect.TypeOf(localType) != reflect.TypeOf(targetType) {\n\t\treturn fmt.Errorf(\"type mismatch: %w\", errImpossibleRelocation)\n\t}\n\n\tswitch lv := localType.(type) {\n\tcase *Array, *Pointer, *Float, *Int:\n\t\treturn nil\n\n\tcase *Enum:\n\t\ttv := targetType.(*Enum)\n\t\treturn doNamesMatch(lv.Name, tv.Name)\n\n\tcase *Fwd:\n\t\ttv := targetType.(*Fwd)\n\t\treturn doNamesMatch(lv.Name, tv.Name)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"type %s: %w\", localType, ErrNotSupported)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/doc.go",
    "content": "// Package btf handles data encoded according to the BPF Type Format.\n//\n// The canonical documentation lives in the Linux kernel repository and is\n// available at https://www.kernel.org/doc/html/latest/bpf/btf.html\npackage btf\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/ext_info.go",
    "content": "package btf\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"sort\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n)\n\n// ExtInfos contains ELF section metadata.\ntype ExtInfos struct {\n\t// The slices are sorted by offset in ascending order.\n\tfuncInfos       map[string][]funcInfo\n\tlineInfos       map[string][]lineInfo\n\trelocationInfos map[string][]coreRelocationInfo\n}\n\n// loadExtInfosFromELF parses ext infos from the .BTF.ext section in an ELF.\n//\n// Returns an error wrapping ErrNotFound if no ext infos are present.\nfunc loadExtInfosFromELF(file *internal.SafeELFFile, spec *Spec) (*ExtInfos, error) {\n\tsection := file.Section(\".BTF.ext\")\n\tif section == nil {\n\t\treturn nil, fmt.Errorf(\"btf ext infos: %w\", ErrNotFound)\n\t}\n\n\tif section.ReaderAt == nil {\n\t\treturn nil, fmt.Errorf(\"compressed ext_info is not supported\")\n\t}\n\n\treturn loadExtInfos(section.ReaderAt, file.ByteOrder, spec, spec.strings)\n}\n\n// loadExtInfos parses bare ext infos.\nfunc loadExtInfos(r io.ReaderAt, bo binary.ByteOrder, spec *Spec, strings *stringTable) (*ExtInfos, error) {\n\t// Open unbuffered section reader. binary.Read() calls io.ReadFull on\n\t// the header structs, resulting in one syscall per header.\n\theaderRd := io.NewSectionReader(r, 0, math.MaxInt64)\n\textHeader, err := parseBTFExtHeader(headerRd, bo)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing BTF extension header: %w\", err)\n\t}\n\n\tcoreHeader, err := parseBTFExtCOREHeader(headerRd, bo, extHeader)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing BTF CO-RE header: %w\", err)\n\t}\n\n\tbuf := internal.NewBufferedSectionReader(r, extHeader.funcInfoStart(), int64(extHeader.FuncInfoLen))\n\tbtfFuncInfos, err := parseFuncInfos(buf, bo, strings)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing BTF function info: %w\", err)\n\t}\n\n\tfuncInfos := make(map[string][]funcInfo, len(btfFuncInfos))\n\tfor section, bfis := range btfFuncInfos {\n\t\tfuncInfos[section], err = newFuncInfos(bfis, spec)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %s: func infos: %w\", section, err)\n\t\t}\n\t}\n\n\tbuf = internal.NewBufferedSectionReader(r, extHeader.lineInfoStart(), int64(extHeader.LineInfoLen))\n\tbtfLineInfos, err := parseLineInfos(buf, bo, strings)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing BTF line info: %w\", err)\n\t}\n\n\tlineInfos := make(map[string][]lineInfo, len(btfLineInfos))\n\tfor section, blis := range btfLineInfos {\n\t\tlineInfos[section], err = newLineInfos(blis, strings)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %s: line infos: %w\", section, err)\n\t\t}\n\t}\n\n\tif coreHeader == nil || coreHeader.COREReloLen == 0 {\n\t\treturn &ExtInfos{funcInfos, lineInfos, nil}, nil\n\t}\n\n\tvar btfCORERelos map[string][]bpfCORERelo\n\tbuf = internal.NewBufferedSectionReader(r, extHeader.coreReloStart(coreHeader), int64(coreHeader.COREReloLen))\n\tbtfCORERelos, err = parseCORERelos(buf, bo, strings)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parsing CO-RE relocation info: %w\", err)\n\t}\n\n\tcoreRelos := make(map[string][]coreRelocationInfo, len(btfCORERelos))\n\tfor section, brs := range btfCORERelos {\n\t\tcoreRelos[section], err = newRelocationInfos(brs, spec, strings)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %s: CO-RE relocations: %w\", section, err)\n\t\t}\n\t}\n\n\treturn &ExtInfos{funcInfos, lineInfos, coreRelos}, nil\n}\n\ntype funcInfoMeta struct{}\ntype coreRelocationMeta struct{}\n\n// Assign per-section metadata from BTF to a section's instructions.\nfunc (ei *ExtInfos) Assign(insns asm.Instructions, section string) {\n\tfuncInfos := ei.funcInfos[section]\n\tlineInfos := ei.lineInfos[section]\n\treloInfos := ei.relocationInfos[section]\n\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tif len(funcInfos) > 0 && funcInfos[0].offset == iter.Offset {\n\t\t\t*iter.Ins = WithFuncMetadata(*iter.Ins, funcInfos[0].fn)\n\t\t\tfuncInfos = funcInfos[1:]\n\t\t}\n\n\t\tif len(lineInfos) > 0 && lineInfos[0].offset == iter.Offset {\n\t\t\t*iter.Ins = iter.Ins.WithSource(lineInfos[0].line)\n\t\t\tlineInfos = lineInfos[1:]\n\t\t}\n\n\t\tif len(reloInfos) > 0 && reloInfos[0].offset == iter.Offset {\n\t\t\titer.Ins.Metadata.Set(coreRelocationMeta{}, reloInfos[0].relo)\n\t\t\treloInfos = reloInfos[1:]\n\t\t}\n\t}\n}\n\n// MarshalExtInfos encodes function and line info embedded in insns into kernel\n// wire format.\n//\n// Returns ErrNotSupported if the kernel doesn't support BTF-associated programs.\nfunc MarshalExtInfos(insns asm.Instructions) (_ *Handle, funcInfos, lineInfos []byte, _ error) {\n\t// Bail out early if the kernel doesn't support Func(Proto). If this is the\n\t// case, func_info will also be unsupported.\n\tif err := haveProgBTF(); err != nil {\n\t\treturn nil, nil, nil, err\n\t}\n\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\t_, ok := iter.Ins.Source().(*Line)\n\t\tfn := FuncMetadata(iter.Ins)\n\t\tif ok || fn != nil {\n\t\t\tgoto marshal\n\t\t}\n\t}\n\n\treturn nil, nil, nil, nil\n\nmarshal:\n\tvar b Builder\n\tvar fiBuf, liBuf bytes.Buffer\n\tfor {\n\t\tif fn := FuncMetadata(iter.Ins); fn != nil {\n\t\t\tfi := &funcInfo{\n\t\t\t\tfn:     fn,\n\t\t\t\toffset: iter.Offset,\n\t\t\t}\n\t\t\tif err := fi.marshal(&fiBuf, &b); err != nil {\n\t\t\t\treturn nil, nil, nil, fmt.Errorf(\"write func info: %w\", err)\n\t\t\t}\n\t\t}\n\n\t\tif line, ok := iter.Ins.Source().(*Line); ok {\n\t\t\tli := &lineInfo{\n\t\t\t\tline:   line,\n\t\t\t\toffset: iter.Offset,\n\t\t\t}\n\t\t\tif err := li.marshal(&liBuf, &b); err != nil {\n\t\t\t\treturn nil, nil, nil, fmt.Errorf(\"write line info: %w\", err)\n\t\t\t}\n\t\t}\n\n\t\tif !iter.Next() {\n\t\t\tbreak\n\t\t}\n\t}\n\n\thandle, err := NewHandle(&b)\n\treturn handle, fiBuf.Bytes(), liBuf.Bytes(), err\n}\n\n// btfExtHeader is found at the start of the .BTF.ext section.\ntype btfExtHeader struct {\n\tMagic   uint16\n\tVersion uint8\n\tFlags   uint8\n\n\t// HdrLen is larger than the size of struct btfExtHeader when it is\n\t// immediately followed by a btfExtCOREHeader.\n\tHdrLen uint32\n\n\tFuncInfoOff uint32\n\tFuncInfoLen uint32\n\tLineInfoOff uint32\n\tLineInfoLen uint32\n}\n\n// parseBTFExtHeader parses the header of the .BTF.ext section.\nfunc parseBTFExtHeader(r io.Reader, bo binary.ByteOrder) (*btfExtHeader, error) {\n\tvar header btfExtHeader\n\tif err := binary.Read(r, bo, &header); err != nil {\n\t\treturn nil, fmt.Errorf(\"can't read header: %v\", err)\n\t}\n\n\tif header.Magic != btfMagic {\n\t\treturn nil, fmt.Errorf(\"incorrect magic value %v\", header.Magic)\n\t}\n\n\tif header.Version != 1 {\n\t\treturn nil, fmt.Errorf(\"unexpected version %v\", header.Version)\n\t}\n\n\tif header.Flags != 0 {\n\t\treturn nil, fmt.Errorf(\"unsupported flags %v\", header.Flags)\n\t}\n\n\tif int64(header.HdrLen) < int64(binary.Size(&header)) {\n\t\treturn nil, fmt.Errorf(\"header length shorter than btfExtHeader size\")\n\t}\n\n\treturn &header, nil\n}\n\n// funcInfoStart returns the offset from the beginning of the .BTF.ext section\n// to the start of its func_info entries.\nfunc (h *btfExtHeader) funcInfoStart() int64 {\n\treturn int64(h.HdrLen + h.FuncInfoOff)\n}\n\n// lineInfoStart returns the offset from the beginning of the .BTF.ext section\n// to the start of its line_info entries.\nfunc (h *btfExtHeader) lineInfoStart() int64 {\n\treturn int64(h.HdrLen + h.LineInfoOff)\n}\n\n// coreReloStart returns the offset from the beginning of the .BTF.ext section\n// to the start of its CO-RE relocation entries.\nfunc (h *btfExtHeader) coreReloStart(ch *btfExtCOREHeader) int64 {\n\treturn int64(h.HdrLen + ch.COREReloOff)\n}\n\n// btfExtCOREHeader is found right after the btfExtHeader when its HdrLen\n// field is larger than its size.\ntype btfExtCOREHeader struct {\n\tCOREReloOff uint32\n\tCOREReloLen uint32\n}\n\n// parseBTFExtCOREHeader parses the tail of the .BTF.ext header. If additional\n// header bytes are present, extHeader.HdrLen will be larger than the struct,\n// indicating the presence of a CO-RE extension header.\nfunc parseBTFExtCOREHeader(r io.Reader, bo binary.ByteOrder, extHeader *btfExtHeader) (*btfExtCOREHeader, error) {\n\textHdrSize := int64(binary.Size(&extHeader))\n\tremainder := int64(extHeader.HdrLen) - extHdrSize\n\n\tif remainder == 0 {\n\t\treturn nil, nil\n\t}\n\n\tvar coreHeader btfExtCOREHeader\n\tif err := binary.Read(r, bo, &coreHeader); err != nil {\n\t\treturn nil, fmt.Errorf(\"can't read header: %v\", err)\n\t}\n\n\treturn &coreHeader, nil\n}\n\ntype btfExtInfoSec struct {\n\tSecNameOff uint32\n\tNumInfo    uint32\n}\n\n// parseExtInfoSec parses a btf_ext_info_sec header within .BTF.ext,\n// appearing within func_info and line_info sub-sections.\n// These headers appear once for each program section in the ELF and are\n// followed by one or more func/line_info records for the section.\nfunc parseExtInfoSec(r io.Reader, bo binary.ByteOrder, strings *stringTable) (string, *btfExtInfoSec, error) {\n\tvar infoHeader btfExtInfoSec\n\tif err := binary.Read(r, bo, &infoHeader); err != nil {\n\t\treturn \"\", nil, fmt.Errorf(\"read ext info header: %w\", err)\n\t}\n\n\tsecName, err := strings.Lookup(infoHeader.SecNameOff)\n\tif err != nil {\n\t\treturn \"\", nil, fmt.Errorf(\"get section name: %w\", err)\n\t}\n\tif secName == \"\" {\n\t\treturn \"\", nil, fmt.Errorf(\"extinfo header refers to empty section name\")\n\t}\n\n\tif infoHeader.NumInfo == 0 {\n\t\treturn \"\", nil, fmt.Errorf(\"section %s has zero records\", secName)\n\t}\n\n\treturn secName, &infoHeader, nil\n}\n\n// parseExtInfoRecordSize parses the uint32 at the beginning of a func_infos\n// or line_infos segment that describes the length of all extInfoRecords in\n// that segment.\nfunc parseExtInfoRecordSize(r io.Reader, bo binary.ByteOrder) (uint32, error) {\n\tconst maxRecordSize = 256\n\n\tvar recordSize uint32\n\tif err := binary.Read(r, bo, &recordSize); err != nil {\n\t\treturn 0, fmt.Errorf(\"can't read record size: %v\", err)\n\t}\n\n\tif recordSize < 4 {\n\t\t// Need at least InsnOff worth of bytes per record.\n\t\treturn 0, errors.New(\"record size too short\")\n\t}\n\tif recordSize > maxRecordSize {\n\t\treturn 0, fmt.Errorf(\"record size %v exceeds %v\", recordSize, maxRecordSize)\n\t}\n\n\treturn recordSize, nil\n}\n\n// The size of a FuncInfo in BTF wire format.\nvar FuncInfoSize = uint32(binary.Size(bpfFuncInfo{}))\n\ntype funcInfo struct {\n\tfn     *Func\n\toffset asm.RawInstructionOffset\n}\n\ntype bpfFuncInfo struct {\n\t// Instruction offset of the function within an ELF section.\n\tInsnOff uint32\n\tTypeID  TypeID\n}\n\nfunc newFuncInfo(fi bpfFuncInfo, spec *Spec) (*funcInfo, error) {\n\ttyp, err := spec.TypeByID(fi.TypeID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfn, ok := typ.(*Func)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"type ID %d is a %T, but expected a Func\", fi.TypeID, typ)\n\t}\n\n\t// C doesn't have anonymous functions, but check just in case.\n\tif fn.Name == \"\" {\n\t\treturn nil, fmt.Errorf(\"func with type ID %d doesn't have a name\", fi.TypeID)\n\t}\n\n\treturn &funcInfo{\n\t\tfn,\n\t\tasm.RawInstructionOffset(fi.InsnOff),\n\t}, nil\n}\n\nfunc newFuncInfos(bfis []bpfFuncInfo, spec *Spec) ([]funcInfo, error) {\n\tfis := make([]funcInfo, 0, len(bfis))\n\tfor _, bfi := range bfis {\n\t\tfi, err := newFuncInfo(bfi, spec)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"offset %d: %w\", bfi.InsnOff, err)\n\t\t}\n\t\tfis = append(fis, *fi)\n\t}\n\tsort.Slice(fis, func(i, j int) bool {\n\t\treturn fis[i].offset <= fis[j].offset\n\t})\n\treturn fis, nil\n}\n\n// marshal into the BTF wire format.\nfunc (fi *funcInfo) marshal(w *bytes.Buffer, b *Builder) error {\n\tid, err := b.Add(fi.fn)\n\tif err != nil {\n\t\treturn err\n\t}\n\tbfi := bpfFuncInfo{\n\t\tInsnOff: uint32(fi.offset),\n\t\tTypeID:  id,\n\t}\n\tbuf := make([]byte, FuncInfoSize)\n\tinternal.NativeEndian.PutUint32(buf, bfi.InsnOff)\n\tinternal.NativeEndian.PutUint32(buf[4:], uint32(bfi.TypeID))\n\t_, err = w.Write(buf)\n\treturn err\n}\n\n// parseFuncInfos parses a func_info sub-section within .BTF.ext ito a map of\n// func infos indexed by section name.\nfunc parseFuncInfos(r io.Reader, bo binary.ByteOrder, strings *stringTable) (map[string][]bpfFuncInfo, error) {\n\trecordSize, err := parseExtInfoRecordSize(r, bo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresult := make(map[string][]bpfFuncInfo)\n\tfor {\n\t\tsecName, infoHeader, err := parseExtInfoSec(r, bo, strings)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn result, nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\trecords, err := parseFuncInfoRecords(r, bo, recordSize, infoHeader.NumInfo)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %v: %w\", secName, err)\n\t\t}\n\n\t\tresult[secName] = records\n\t}\n}\n\n// parseFuncInfoRecords parses a stream of func_infos into a funcInfos.\n// These records appear after a btf_ext_info_sec header in the func_info\n// sub-section of .BTF.ext.\nfunc parseFuncInfoRecords(r io.Reader, bo binary.ByteOrder, recordSize uint32, recordNum uint32) ([]bpfFuncInfo, error) {\n\tvar out []bpfFuncInfo\n\tvar fi bpfFuncInfo\n\n\tif exp, got := FuncInfoSize, recordSize; exp != got {\n\t\t// BTF blob's record size is longer than we know how to parse.\n\t\treturn nil, fmt.Errorf(\"expected FuncInfo record size %d, but BTF blob contains %d\", exp, got)\n\t}\n\n\tfor i := uint32(0); i < recordNum; i++ {\n\t\tif err := binary.Read(r, bo, &fi); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't read function info: %v\", err)\n\t\t}\n\n\t\tif fi.InsnOff%asm.InstructionSize != 0 {\n\t\t\treturn nil, fmt.Errorf(\"offset %v is not aligned with instruction size\", fi.InsnOff)\n\t\t}\n\n\t\t// ELF tracks offset in bytes, the kernel expects raw BPF instructions.\n\t\t// Convert as early as possible.\n\t\tfi.InsnOff /= asm.InstructionSize\n\n\t\tout = append(out, fi)\n\t}\n\n\treturn out, nil\n}\n\nvar LineInfoSize = uint32(binary.Size(bpfLineInfo{}))\n\n// Line represents the location and contents of a single line of source\n// code a BPF ELF was compiled from.\ntype Line struct {\n\tfileName   string\n\tline       string\n\tlineNumber uint32\n\tlineColumn uint32\n}\n\nfunc (li *Line) FileName() string {\n\treturn li.fileName\n}\n\nfunc (li *Line) Line() string {\n\treturn li.line\n}\n\nfunc (li *Line) LineNumber() uint32 {\n\treturn li.lineNumber\n}\n\nfunc (li *Line) LineColumn() uint32 {\n\treturn li.lineColumn\n}\n\nfunc (li *Line) String() string {\n\treturn li.line\n}\n\ntype lineInfo struct {\n\tline   *Line\n\toffset asm.RawInstructionOffset\n}\n\n// Constants for the format of bpfLineInfo.LineCol.\nconst (\n\tbpfLineShift = 10\n\tbpfLineMax   = (1 << (32 - bpfLineShift)) - 1\n\tbpfColumnMax = (1 << bpfLineShift) - 1\n)\n\ntype bpfLineInfo struct {\n\t// Instruction offset of the line within the whole instruction stream, in instructions.\n\tInsnOff     uint32\n\tFileNameOff uint32\n\tLineOff     uint32\n\tLineCol     uint32\n}\n\nfunc newLineInfo(li bpfLineInfo, strings *stringTable) (*lineInfo, error) {\n\tline, err := strings.Lookup(li.LineOff)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"lookup of line: %w\", err)\n\t}\n\n\tfileName, err := strings.Lookup(li.FileNameOff)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"lookup of filename: %w\", err)\n\t}\n\n\tlineNumber := li.LineCol >> bpfLineShift\n\tlineColumn := li.LineCol & bpfColumnMax\n\n\treturn &lineInfo{\n\t\t&Line{\n\t\t\tfileName,\n\t\t\tline,\n\t\t\tlineNumber,\n\t\t\tlineColumn,\n\t\t},\n\t\tasm.RawInstructionOffset(li.InsnOff),\n\t}, nil\n}\n\nfunc newLineInfos(blis []bpfLineInfo, strings *stringTable) ([]lineInfo, error) {\n\tlis := make([]lineInfo, 0, len(blis))\n\tfor _, bli := range blis {\n\t\tli, err := newLineInfo(bli, strings)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"offset %d: %w\", bli.InsnOff, err)\n\t\t}\n\t\tlis = append(lis, *li)\n\t}\n\tsort.Slice(lis, func(i, j int) bool {\n\t\treturn lis[i].offset <= lis[j].offset\n\t})\n\treturn lis, nil\n}\n\n// marshal writes the binary representation of the LineInfo to w.\nfunc (li *lineInfo) marshal(w *bytes.Buffer, b *Builder) error {\n\tline := li.line\n\tif line.lineNumber > bpfLineMax {\n\t\treturn fmt.Errorf(\"line %d exceeds %d\", line.lineNumber, bpfLineMax)\n\t}\n\n\tif line.lineColumn > bpfColumnMax {\n\t\treturn fmt.Errorf(\"column %d exceeds %d\", line.lineColumn, bpfColumnMax)\n\t}\n\n\tfileNameOff, err := b.addString(line.fileName)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"file name %q: %w\", line.fileName, err)\n\t}\n\n\tlineOff, err := b.addString(line.line)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"line %q: %w\", line.line, err)\n\t}\n\n\tbli := bpfLineInfo{\n\t\tuint32(li.offset),\n\t\tfileNameOff,\n\t\tlineOff,\n\t\t(line.lineNumber << bpfLineShift) | line.lineColumn,\n\t}\n\n\tbuf := make([]byte, LineInfoSize)\n\tinternal.NativeEndian.PutUint32(buf, bli.InsnOff)\n\tinternal.NativeEndian.PutUint32(buf[4:], bli.FileNameOff)\n\tinternal.NativeEndian.PutUint32(buf[8:], bli.LineOff)\n\tinternal.NativeEndian.PutUint32(buf[12:], bli.LineCol)\n\t_, err = w.Write(buf)\n\treturn err\n}\n\n// parseLineInfos parses a line_info sub-section within .BTF.ext ito a map of\n// line infos indexed by section name.\nfunc parseLineInfos(r io.Reader, bo binary.ByteOrder, strings *stringTable) (map[string][]bpfLineInfo, error) {\n\trecordSize, err := parseExtInfoRecordSize(r, bo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tresult := make(map[string][]bpfLineInfo)\n\tfor {\n\t\tsecName, infoHeader, err := parseExtInfoSec(r, bo, strings)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn result, nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\trecords, err := parseLineInfoRecords(r, bo, recordSize, infoHeader.NumInfo)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %v: %w\", secName, err)\n\t\t}\n\n\t\tresult[secName] = records\n\t}\n}\n\n// parseLineInfoRecords parses a stream of line_infos into a lineInfos.\n// These records appear after a btf_ext_info_sec header in the line_info\n// sub-section of .BTF.ext.\nfunc parseLineInfoRecords(r io.Reader, bo binary.ByteOrder, recordSize uint32, recordNum uint32) ([]bpfLineInfo, error) {\n\tvar out []bpfLineInfo\n\tvar li bpfLineInfo\n\n\tif exp, got := uint32(binary.Size(li)), recordSize; exp != got {\n\t\t// BTF blob's record size is longer than we know how to parse.\n\t\treturn nil, fmt.Errorf(\"expected LineInfo record size %d, but BTF blob contains %d\", exp, got)\n\t}\n\n\tfor i := uint32(0); i < recordNum; i++ {\n\t\tif err := binary.Read(r, bo, &li); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't read line info: %v\", err)\n\t\t}\n\n\t\tif li.InsnOff%asm.InstructionSize != 0 {\n\t\t\treturn nil, fmt.Errorf(\"offset %v is not aligned with instruction size\", li.InsnOff)\n\t\t}\n\n\t\t// ELF tracks offset in bytes, the kernel expects raw BPF instructions.\n\t\t// Convert as early as possible.\n\t\tli.InsnOff /= asm.InstructionSize\n\n\t\tout = append(out, li)\n\t}\n\n\treturn out, nil\n}\n\n// bpfCORERelo matches the kernel's struct bpf_core_relo.\ntype bpfCORERelo struct {\n\tInsnOff      uint32\n\tTypeID       TypeID\n\tAccessStrOff uint32\n\tKind         coreKind\n}\n\ntype CORERelocation struct {\n\t// The local type of the relocation, stripped of typedefs and qualifiers.\n\ttyp      Type\n\taccessor coreAccessor\n\tkind     coreKind\n\t// The ID of the local type in the source BTF.\n\tid TypeID\n}\n\nfunc (cr *CORERelocation) String() string {\n\treturn fmt.Sprintf(\"CORERelocation(%s, %s[%s], local_id=%d)\", cr.kind, cr.typ, cr.accessor, cr.id)\n}\n\nfunc CORERelocationMetadata(ins *asm.Instruction) *CORERelocation {\n\trelo, _ := ins.Metadata.Get(coreRelocationMeta{}).(*CORERelocation)\n\treturn relo\n}\n\ntype coreRelocationInfo struct {\n\trelo   *CORERelocation\n\toffset asm.RawInstructionOffset\n}\n\nfunc newRelocationInfo(relo bpfCORERelo, spec *Spec, strings *stringTable) (*coreRelocationInfo, error) {\n\ttyp, err := spec.TypeByID(relo.TypeID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\taccessorStr, err := strings.Lookup(relo.AccessStrOff)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\taccessor, err := parseCOREAccessor(accessorStr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"accessor %q: %s\", accessorStr, err)\n\t}\n\n\treturn &coreRelocationInfo{\n\t\t&CORERelocation{\n\t\t\ttyp,\n\t\t\taccessor,\n\t\t\trelo.Kind,\n\t\t\trelo.TypeID,\n\t\t},\n\t\tasm.RawInstructionOffset(relo.InsnOff),\n\t}, nil\n}\n\nfunc newRelocationInfos(brs []bpfCORERelo, spec *Spec, strings *stringTable) ([]coreRelocationInfo, error) {\n\trs := make([]coreRelocationInfo, 0, len(brs))\n\tfor _, br := range brs {\n\t\trelo, err := newRelocationInfo(br, spec, strings)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"offset %d: %w\", br.InsnOff, err)\n\t\t}\n\t\trs = append(rs, *relo)\n\t}\n\tsort.Slice(rs, func(i, j int) bool {\n\t\treturn rs[i].offset < rs[j].offset\n\t})\n\treturn rs, nil\n}\n\nvar extInfoReloSize = binary.Size(bpfCORERelo{})\n\n// parseCORERelos parses a core_relos sub-section within .BTF.ext ito a map of\n// CO-RE relocations indexed by section name.\nfunc parseCORERelos(r io.Reader, bo binary.ByteOrder, strings *stringTable) (map[string][]bpfCORERelo, error) {\n\trecordSize, err := parseExtInfoRecordSize(r, bo)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif recordSize != uint32(extInfoReloSize) {\n\t\treturn nil, fmt.Errorf(\"expected record size %d, got %d\", extInfoReloSize, recordSize)\n\t}\n\n\tresult := make(map[string][]bpfCORERelo)\n\tfor {\n\t\tsecName, infoHeader, err := parseExtInfoSec(r, bo, strings)\n\t\tif errors.Is(err, io.EOF) {\n\t\t\treturn result, nil\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\trecords, err := parseCOREReloRecords(r, bo, recordSize, infoHeader.NumInfo)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %v: %w\", secName, err)\n\t\t}\n\n\t\tresult[secName] = records\n\t}\n}\n\n// parseCOREReloRecords parses a stream of CO-RE relocation entries into a\n// coreRelos. These records appear after a btf_ext_info_sec header in the\n// core_relos sub-section of .BTF.ext.\nfunc parseCOREReloRecords(r io.Reader, bo binary.ByteOrder, recordSize uint32, recordNum uint32) ([]bpfCORERelo, error) {\n\tvar out []bpfCORERelo\n\n\tvar relo bpfCORERelo\n\tfor i := uint32(0); i < recordNum; i++ {\n\t\tif err := binary.Read(r, bo, &relo); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't read CO-RE relocation: %v\", err)\n\t\t}\n\n\t\tif relo.InsnOff%asm.InstructionSize != 0 {\n\t\t\treturn nil, fmt.Errorf(\"offset %v is not aligned with instruction size\", relo.InsnOff)\n\t\t}\n\n\t\t// ELF tracks offset in bytes, the kernel expects raw BPF instructions.\n\t\t// Convert as early as possible.\n\t\trelo.InsnOff /= asm.InstructionSize\n\n\t\tout = append(out, relo)\n\t}\n\n\treturn out, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/format.go",
    "content": "package btf\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\nvar errNestedTooDeep = errors.New(\"nested too deep\")\n\n// GoFormatter converts a Type to Go syntax.\n//\n// A zero GoFormatter is valid to use.\ntype GoFormatter struct {\n\tw strings.Builder\n\n\t// Types present in this map are referred to using the given name if they\n\t// are encountered when outputting another type.\n\tNames map[Type]string\n\n\t// Identifier is called for each field of struct-like types. By default the\n\t// field name is used as is.\n\tIdentifier func(string) string\n\n\t// EnumIdentifier is called for each element of an enum. By default the\n\t// name of the enum type is concatenated with Identifier(element).\n\tEnumIdentifier func(name, element string) string\n}\n\n// TypeDeclaration generates a Go type declaration for a BTF type.\nfunc (gf *GoFormatter) TypeDeclaration(name string, typ Type) (string, error) {\n\tgf.w.Reset()\n\tif err := gf.writeTypeDecl(name, typ); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn gf.w.String(), nil\n}\n\nfunc (gf *GoFormatter) identifier(s string) string {\n\tif gf.Identifier != nil {\n\t\treturn gf.Identifier(s)\n\t}\n\n\treturn s\n}\n\nfunc (gf *GoFormatter) enumIdentifier(name, element string) string {\n\tif gf.EnumIdentifier != nil {\n\t\treturn gf.EnumIdentifier(name, element)\n\t}\n\n\treturn name + gf.identifier(element)\n}\n\n// writeTypeDecl outputs a declaration of the given type.\n//\n// It encodes https://golang.org/ref/spec#Type_declarations:\n//\n//\ttype foo struct { bar uint32; }\n//\ttype bar int32\nfunc (gf *GoFormatter) writeTypeDecl(name string, typ Type) error {\n\tif name == \"\" {\n\t\treturn fmt.Errorf(\"need a name for type %s\", typ)\n\t}\n\n\ttyp = skipQualifiers(typ)\n\tfmt.Fprintf(&gf.w, \"type %s \", name)\n\tif err := gf.writeTypeLit(typ, 0); err != nil {\n\t\treturn err\n\t}\n\n\te, ok := typ.(*Enum)\n\tif !ok || len(e.Values) == 0 {\n\t\treturn nil\n\t}\n\n\tgf.w.WriteString(\"; const ( \")\n\tfor _, ev := range e.Values {\n\t\tid := gf.enumIdentifier(name, ev.Name)\n\t\tfmt.Fprintf(&gf.w, \"%s %s = %d; \", id, name, ev.Value)\n\t}\n\tgf.w.WriteString(\")\")\n\n\treturn nil\n}\n\n// writeType outputs the name of a named type or a literal describing the type.\n//\n// It encodes https://golang.org/ref/spec#Types.\n//\n//\tfoo                  (if foo is a named type)\n//\tuint32\nfunc (gf *GoFormatter) writeType(typ Type, depth int) error {\n\ttyp = skipQualifiers(typ)\n\n\tname := gf.Names[typ]\n\tif name != \"\" {\n\t\tgf.w.WriteString(name)\n\t\treturn nil\n\t}\n\n\treturn gf.writeTypeLit(typ, depth)\n}\n\n// writeTypeLit outputs a literal describing the type.\n//\n// The function ignores named types.\n//\n// It encodes https://golang.org/ref/spec#TypeLit.\n//\n//\tstruct { bar uint32; }\n//\tuint32\nfunc (gf *GoFormatter) writeTypeLit(typ Type, depth int) error {\n\tdepth++\n\tif depth > maxTypeDepth {\n\t\treturn errNestedTooDeep\n\t}\n\n\tvar err error\n\tswitch v := skipQualifiers(typ).(type) {\n\tcase *Int:\n\t\terr = gf.writeIntLit(v)\n\n\tcase *Enum:\n\t\tif !v.Signed {\n\t\t\tgf.w.WriteRune('u')\n\t\t}\n\t\tswitch v.Size {\n\t\tcase 1:\n\t\t\tgf.w.WriteString(\"int8\")\n\t\tcase 2:\n\t\t\tgf.w.WriteString(\"int16\")\n\t\tcase 4:\n\t\t\tgf.w.WriteString(\"int32\")\n\t\tcase 8:\n\t\t\tgf.w.WriteString(\"int64\")\n\t\tdefault:\n\t\t\terr = fmt.Errorf(\"invalid enum size %d\", v.Size)\n\t\t}\n\n\tcase *Typedef:\n\t\terr = gf.writeType(v.Type, depth)\n\n\tcase *Array:\n\t\tfmt.Fprintf(&gf.w, \"[%d]\", v.Nelems)\n\t\terr = gf.writeType(v.Type, depth)\n\n\tcase *Struct:\n\t\terr = gf.writeStructLit(v.Size, v.Members, depth)\n\n\tcase *Union:\n\t\t// Always choose the first member to represent the union in Go.\n\t\terr = gf.writeStructLit(v.Size, v.Members[:1], depth)\n\n\tcase *Datasec:\n\t\terr = gf.writeDatasecLit(v, depth)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"type %T: %w\", v, ErrNotSupported)\n\t}\n\n\tif err != nil {\n\t\treturn fmt.Errorf(\"%s: %w\", typ, err)\n\t}\n\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writeIntLit(i *Int) error {\n\tbits := i.Size * 8\n\tswitch i.Encoding {\n\tcase Bool:\n\t\tif i.Size != 1 {\n\t\t\treturn fmt.Errorf(\"bool with size %d\", i.Size)\n\t\t}\n\t\tgf.w.WriteString(\"bool\")\n\tcase Char:\n\t\tif i.Size != 1 {\n\t\t\treturn fmt.Errorf(\"char with size %d\", i.Size)\n\t\t}\n\t\t// BTF doesn't have a way to specify the signedness of a char. Assume\n\t\t// we are dealing with unsigned, since this works nicely with []byte\n\t\t// in Go code.\n\t\tfallthrough\n\tcase Unsigned, Signed:\n\t\tstem := \"uint\"\n\t\tif i.Encoding == Signed {\n\t\t\tstem = \"int\"\n\t\t}\n\t\tif i.Size > 8 {\n\t\t\tfmt.Fprintf(&gf.w, \"[%d]byte /* %s%d */\", i.Size, stem, i.Size*8)\n\t\t} else {\n\t\t\tfmt.Fprintf(&gf.w, \"%s%d\", stem, bits)\n\t\t}\n\tdefault:\n\t\treturn fmt.Errorf(\"can't encode %s\", i.Encoding)\n\t}\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writeStructLit(size uint32, members []Member, depth int) error {\n\tgf.w.WriteString(\"struct { \")\n\n\tprevOffset := uint32(0)\n\tskippedBitfield := false\n\tfor i, m := range members {\n\t\tif m.BitfieldSize > 0 {\n\t\t\tskippedBitfield = true\n\t\t\tcontinue\n\t\t}\n\n\t\toffset := m.Offset.Bytes()\n\t\tif n := offset - prevOffset; skippedBitfield && n > 0 {\n\t\t\tfmt.Fprintf(&gf.w, \"_ [%d]byte /* unsupported bitfield */; \", n)\n\t\t} else {\n\t\t\tgf.writePadding(n)\n\t\t}\n\n\t\tfieldSize, err := Sizeof(m.Type)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"field %d: %w\", i, err)\n\t\t}\n\n\t\tprevOffset = offset + uint32(fieldSize)\n\t\tif prevOffset > size {\n\t\t\treturn fmt.Errorf(\"field %d of size %d exceeds type size %d\", i, fieldSize, size)\n\t\t}\n\n\t\tif err := gf.writeStructField(m, depth); err != nil {\n\t\t\treturn fmt.Errorf(\"field %d: %w\", i, err)\n\t\t}\n\t}\n\n\tgf.writePadding(size - prevOffset)\n\tgf.w.WriteString(\"}\")\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writeStructField(m Member, depth int) error {\n\tif m.BitfieldSize > 0 {\n\t\treturn fmt.Errorf(\"bitfields are not supported\")\n\t}\n\tif m.Offset%8 != 0 {\n\t\treturn fmt.Errorf(\"unsupported offset %d\", m.Offset)\n\t}\n\n\tif m.Name == \"\" {\n\t\t// Special case a nested anonymous union like\n\t\t//     struct foo { union { int bar; int baz }; }\n\t\t// by replacing the whole union with its first member.\n\t\tunion, ok := m.Type.(*Union)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"anonymous fields are not supported\")\n\n\t\t}\n\n\t\tif len(union.Members) == 0 {\n\t\t\treturn errors.New(\"empty anonymous union\")\n\t\t}\n\n\t\tdepth++\n\t\tif depth > maxTypeDepth {\n\t\t\treturn errNestedTooDeep\n\t\t}\n\n\t\tm := union.Members[0]\n\t\tsize, err := Sizeof(m.Type)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tif err := gf.writeStructField(m, depth); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tgf.writePadding(union.Size - uint32(size))\n\t\treturn nil\n\n\t}\n\n\tfmt.Fprintf(&gf.w, \"%s \", gf.identifier(m.Name))\n\n\tif err := gf.writeType(m.Type, depth); err != nil {\n\t\treturn err\n\t}\n\n\tgf.w.WriteString(\"; \")\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writeDatasecLit(ds *Datasec, depth int) error {\n\tgf.w.WriteString(\"struct { \")\n\n\tprevOffset := uint32(0)\n\tfor i, vsi := range ds.Vars {\n\t\tv, ok := vsi.Type.(*Var)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"can't format %s as part of data section\", vsi.Type)\n\t\t}\n\n\t\tif v.Linkage != GlobalVar {\n\t\t\t// Ignore static, extern, etc. for now.\n\t\t\tcontinue\n\t\t}\n\n\t\tif v.Name == \"\" {\n\t\t\treturn fmt.Errorf(\"variable %d: empty name\", i)\n\t\t}\n\n\t\tgf.writePadding(vsi.Offset - prevOffset)\n\t\tprevOffset = vsi.Offset + vsi.Size\n\n\t\tfmt.Fprintf(&gf.w, \"%s \", gf.identifier(v.Name))\n\n\t\tif err := gf.writeType(v.Type, depth); err != nil {\n\t\t\treturn fmt.Errorf(\"variable %d: %w\", i, err)\n\t\t}\n\n\t\tgf.w.WriteString(\"; \")\n\t}\n\n\tgf.writePadding(ds.Size - prevOffset)\n\tgf.w.WriteString(\"}\")\n\treturn nil\n}\n\nfunc (gf *GoFormatter) writePadding(bytes uint32) {\n\tif bytes > 0 {\n\t\tfmt.Fprintf(&gf.w, \"_ [%d]byte; \", bytes)\n\t}\n}\n\nfunc skipQualifiers(typ Type) Type {\n\tresult := typ\n\tfor depth := 0; depth <= maxTypeDepth; depth++ {\n\t\tswitch v := (result).(type) {\n\t\tcase qualifier:\n\t\t\tresult = v.qualify()\n\t\tdefault:\n\t\t\treturn result\n\t\t}\n\t}\n\treturn &cycle{typ}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/handle.go",
    "content": "package btf\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Handle is a reference to BTF loaded into the kernel.\ntype Handle struct {\n\tfd *sys.FD\n\n\t// Size of the raw BTF in bytes.\n\tsize uint32\n\n\tneedsKernelBase bool\n}\n\n// NewHandle loads the contents of a [Builder] into the kernel.\n//\n// Returns an error wrapping ErrNotSupported if the kernel doesn't support BTF.\nfunc NewHandle(b *Builder) (*Handle, error) {\n\tsmall := getByteSlice()\n\tdefer putByteSlice(small)\n\n\tbuf, err := b.Marshal(*small, KernelMarshalOptions())\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"marshal BTF: %w\", err)\n\t}\n\n\treturn NewHandleFromRawBTF(buf)\n}\n\n// NewHandleFromRawBTF loads raw BTF into the kernel.\n//\n// Returns an error wrapping ErrNotSupported if the kernel doesn't support BTF.\nfunc NewHandleFromRawBTF(btf []byte) (*Handle, error) {\n\tif uint64(len(btf)) > math.MaxUint32 {\n\t\treturn nil, errors.New(\"BTF exceeds the maximum size\")\n\t}\n\n\tattr := &sys.BtfLoadAttr{\n\t\tBtf:     sys.NewSlicePointer(btf),\n\t\tBtfSize: uint32(len(btf)),\n\t}\n\n\tfd, err := sys.BtfLoad(attr)\n\tif err == nil {\n\t\treturn &Handle{fd, attr.BtfSize, false}, nil\n\t}\n\n\tif err := haveBTF(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlogBuf := make([]byte, 64*1024)\n\tattr.BtfLogBuf = sys.NewSlicePointer(logBuf)\n\tattr.BtfLogSize = uint32(len(logBuf))\n\tattr.BtfLogLevel = 1\n\n\t// Up until at least kernel 6.0, the BTF verifier does not return ENOSPC\n\t// if there are other verification errors. ENOSPC is only returned when\n\t// the BTF blob is correct, a log was requested, and the provided buffer\n\t// is too small.\n\t_, ve := sys.BtfLoad(attr)\n\treturn nil, internal.ErrorWithLog(\"load btf\", err, logBuf, errors.Is(ve, unix.ENOSPC))\n}\n\n// NewHandleFromID returns the BTF handle for a given id.\n//\n// Prefer calling [ebpf.Program.Handle] or [ebpf.Map.Handle] if possible.\n//\n// Returns ErrNotExist, if there is no BTF with the given id.\n//\n// Requires CAP_SYS_ADMIN.\nfunc NewHandleFromID(id ID) (*Handle, error) {\n\tfd, err := sys.BtfGetFdById(&sys.BtfGetFdByIdAttr{\n\t\tId: uint32(id),\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get FD for ID %d: %w\", id, err)\n\t}\n\n\tinfo, err := newHandleInfoFromFD(fd)\n\tif err != nil {\n\t\t_ = fd.Close()\n\t\treturn nil, err\n\t}\n\n\treturn &Handle{fd, info.size, info.IsModule()}, nil\n}\n\n// Spec parses the kernel BTF into Go types.\n//\n// base must contain type information for vmlinux if the handle is for\n// a kernel module. It may be nil otherwise.\nfunc (h *Handle) Spec(base *Spec) (*Spec, error) {\n\tvar btfInfo sys.BtfInfo\n\tbtfBuffer := make([]byte, h.size)\n\tbtfInfo.Btf, btfInfo.BtfSize = sys.NewSlicePointerLen(btfBuffer)\n\n\tif err := sys.ObjInfo(h.fd, &btfInfo); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif h.needsKernelBase && base == nil {\n\t\treturn nil, fmt.Errorf(\"missing base types\")\n\t}\n\n\treturn loadRawSpec(bytes.NewReader(btfBuffer), internal.NativeEndian, base)\n}\n\n// Close destroys the handle.\n//\n// Subsequent calls to FD will return an invalid value.\nfunc (h *Handle) Close() error {\n\tif h == nil {\n\t\treturn nil\n\t}\n\n\treturn h.fd.Close()\n}\n\n// FD returns the file descriptor for the handle.\nfunc (h *Handle) FD() int {\n\treturn h.fd.Int()\n}\n\n// Info returns metadata about the handle.\nfunc (h *Handle) Info() (*HandleInfo, error) {\n\treturn newHandleInfoFromFD(h.fd)\n}\n\n// HandleInfo describes a Handle.\ntype HandleInfo struct {\n\t// ID of this handle in the kernel. The ID is only valid as long as the\n\t// associated handle is kept alive.\n\tID ID\n\n\t// Name is an identifying name for the BTF, currently only used by the\n\t// kernel.\n\tName string\n\n\t// IsKernel is true if the BTF originated with the kernel and not\n\t// userspace.\n\tIsKernel bool\n\n\t// Size of the raw BTF in bytes.\n\tsize uint32\n}\n\nfunc newHandleInfoFromFD(fd *sys.FD) (*HandleInfo, error) {\n\t// We invoke the syscall once with a empty BTF and name buffers to get size\n\t// information to allocate buffers. Then we invoke it a second time with\n\t// buffers to receive the data.\n\tvar btfInfo sys.BtfInfo\n\tif err := sys.ObjInfo(fd, &btfInfo); err != nil {\n\t\treturn nil, fmt.Errorf(\"get BTF info for fd %s: %w\", fd, err)\n\t}\n\n\tif btfInfo.NameLen > 0 {\n\t\t// NameLen doesn't account for the terminating NUL.\n\t\tbtfInfo.NameLen++\n\t}\n\n\t// Don't pull raw BTF by default, since it may be quite large.\n\tbtfSize := btfInfo.BtfSize\n\tbtfInfo.BtfSize = 0\n\n\tnameBuffer := make([]byte, btfInfo.NameLen)\n\tbtfInfo.Name, btfInfo.NameLen = sys.NewSlicePointerLen(nameBuffer)\n\tif err := sys.ObjInfo(fd, &btfInfo); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &HandleInfo{\n\t\tID:       ID(btfInfo.Id),\n\t\tName:     unix.ByteSliceToString(nameBuffer),\n\t\tIsKernel: btfInfo.KernelBtf != 0,\n\t\tsize:     btfSize,\n\t}, nil\n}\n\n// IsVmlinux returns true if the BTF is for the kernel itself.\nfunc (i *HandleInfo) IsVmlinux() bool {\n\treturn i.IsKernel && i.Name == \"vmlinux\"\n}\n\n// IsModule returns true if the BTF is for a kernel module.\nfunc (i *HandleInfo) IsModule() bool {\n\treturn i.IsKernel && i.Name != \"vmlinux\"\n}\n\n// HandleIterator allows enumerating BTF blobs loaded into the kernel.\ntype HandleIterator struct {\n\t// The ID of the current handle. Only valid after a call to Next.\n\tID ID\n\t// The current Handle. Only valid until a call to Next.\n\t// See Take if you want to retain the handle.\n\tHandle *Handle\n\terr    error\n}\n\n// Next retrieves a handle for the next BTF object.\n//\n// Returns true if another BTF object was found. Call [HandleIterator.Err] after\n// the function returns false.\nfunc (it *HandleIterator) Next() bool {\n\tid := it.ID\n\tfor {\n\t\tattr := &sys.BtfGetNextIdAttr{Id: id}\n\t\terr := sys.BtfGetNextId(attr)\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t// There are no more BTF objects.\n\t\t\tbreak\n\t\t} else if err != nil {\n\t\t\tit.err = fmt.Errorf(\"get next BTF ID: %w\", err)\n\t\t\tbreak\n\t\t}\n\n\t\tid = attr.NextId\n\t\thandle, err := NewHandleFromID(id)\n\t\tif errors.Is(err, os.ErrNotExist) {\n\t\t\t// Try again with the next ID.\n\t\t\tcontinue\n\t\t} else if err != nil {\n\t\t\tit.err = fmt.Errorf(\"retrieve handle for ID %d: %w\", id, err)\n\t\t\tbreak\n\t\t}\n\n\t\tit.Handle.Close()\n\t\tit.ID, it.Handle = id, handle\n\t\treturn true\n\t}\n\n\t// No more handles or we encountered an error.\n\tit.Handle.Close()\n\tit.Handle = nil\n\treturn false\n}\n\n// Take the ownership of the current handle.\n//\n// It's the callers responsibility to close the handle.\nfunc (it *HandleIterator) Take() *Handle {\n\thandle := it.Handle\n\tit.Handle = nil\n\treturn handle\n}\n\n// Err returns an error if iteration failed for some reason.\nfunc (it *HandleIterator) Err() error {\n\treturn it.err\n}\n\n// FindHandle returns the first handle for which predicate returns true.\n//\n// Requires CAP_SYS_ADMIN.\n//\n// Returns an error wrapping ErrNotFound if predicate never returns true or if\n// there is no BTF loaded into the kernel.\nfunc FindHandle(predicate func(info *HandleInfo) bool) (*Handle, error) {\n\tit := new(HandleIterator)\n\tdefer it.Handle.Close()\n\n\tfor it.Next() {\n\t\tinfo, err := it.Handle.Info()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"info for ID %d: %w\", it.ID, err)\n\t\t}\n\n\t\tif predicate(info) {\n\t\t\treturn it.Take(), nil\n\t\t}\n\t}\n\tif err := it.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"iterate handles: %w\", err)\n\t}\n\n\treturn nil, fmt.Errorf(\"find handle: %w\", ErrNotFound)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/marshal.go",
    "content": "package btf\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"sync\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\n\t\"golang.org/x/exp/slices\"\n)\n\ntype MarshalOptions struct {\n\t// Target byte order. Defaults to the system's native endianness.\n\tOrder binary.ByteOrder\n\t// Remove function linkage information for compatibility with <5.6 kernels.\n\tStripFuncLinkage bool\n}\n\n// KernelMarshalOptions will generate BTF suitable for the current kernel.\nfunc KernelMarshalOptions() *MarshalOptions {\n\treturn &MarshalOptions{\n\t\tOrder:            internal.NativeEndian,\n\t\tStripFuncLinkage: haveFuncLinkage() != nil,\n\t}\n}\n\n// encoder turns Types into raw BTF.\ntype encoder struct {\n\tMarshalOptions\n\n\tpending internal.Deque[Type]\n\tbuf     *bytes.Buffer\n\tstrings *stringTableBuilder\n\tids     map[Type]TypeID\n\tlastID  TypeID\n}\n\nvar bufferPool = sync.Pool{\n\tNew: func() any {\n\t\tbuf := make([]byte, btfHeaderLen+128)\n\t\treturn &buf\n\t},\n}\n\nfunc getByteSlice() *[]byte {\n\treturn bufferPool.Get().(*[]byte)\n}\n\nfunc putByteSlice(buf *[]byte) {\n\t*buf = (*buf)[:0]\n\tbufferPool.Put(buf)\n}\n\n// Builder turns Types into raw BTF.\n//\n// The default value may be used and represents an empty BTF blob. Void is\n// added implicitly if necessary.\ntype Builder struct {\n\t// Explicitly added types.\n\ttypes []Type\n\t// IDs for all added types which the user knows about.\n\tstableIDs map[Type]TypeID\n\t// Explicitly added strings.\n\tstrings *stringTableBuilder\n}\n\n// NewBuilder creates a Builder from a list of types.\n//\n// It is more efficient than calling [Add] individually.\n//\n// Returns an error if adding any of the types fails.\nfunc NewBuilder(types []Type) (*Builder, error) {\n\tb := &Builder{\n\t\tmake([]Type, 0, len(types)),\n\t\tmake(map[Type]TypeID, len(types)),\n\t\tnil,\n\t}\n\n\tfor _, typ := range types {\n\t\t_, err := b.Add(typ)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"add %s: %w\", typ, err)\n\t\t}\n\t}\n\n\treturn b, nil\n}\n\n// Add a Type and allocate a stable ID for it.\n//\n// Adding the identical Type multiple times is valid and will return the same ID.\n//\n// See [Type] for details on identity.\nfunc (b *Builder) Add(typ Type) (TypeID, error) {\n\tif b.stableIDs == nil {\n\t\tb.stableIDs = make(map[Type]TypeID)\n\t}\n\n\tif _, ok := typ.(*Void); ok {\n\t\t// Equality is weird for void, since it is a zero sized type.\n\t\treturn 0, nil\n\t}\n\n\tif ds, ok := typ.(*Datasec); ok {\n\t\tif err := datasecResolveWorkaround(b, ds); err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\n\tid, ok := b.stableIDs[typ]\n\tif ok {\n\t\treturn id, nil\n\t}\n\n\tb.types = append(b.types, typ)\n\n\tid = TypeID(len(b.types))\n\tif int(id) != len(b.types) {\n\t\treturn 0, fmt.Errorf(\"no more type IDs\")\n\t}\n\n\tb.stableIDs[typ] = id\n\treturn id, nil\n}\n\n// Marshal encodes all types in the Marshaler into BTF wire format.\n//\n// opts may be nil.\nfunc (b *Builder) Marshal(buf []byte, opts *MarshalOptions) ([]byte, error) {\n\tstb := b.strings\n\tif stb == nil {\n\t\t// Assume that most types are named. This makes encoding large BTF like\n\t\t// vmlinux a lot cheaper.\n\t\tstb = newStringTableBuilder(len(b.types))\n\t} else {\n\t\t// Avoid modifying the Builder's string table.\n\t\tstb = b.strings.Copy()\n\t}\n\n\tif opts == nil {\n\t\topts = &MarshalOptions{Order: internal.NativeEndian}\n\t}\n\n\t// Reserve space for the BTF header.\n\tbuf = slices.Grow(buf, btfHeaderLen)[:btfHeaderLen]\n\n\tw := internal.NewBuffer(buf)\n\tdefer internal.PutBuffer(w)\n\n\te := encoder{\n\t\tMarshalOptions: *opts,\n\t\tbuf:            w,\n\t\tstrings:        stb,\n\t\tlastID:         TypeID(len(b.types)),\n\t\tids:            make(map[Type]TypeID, len(b.types)),\n\t}\n\n\t// Ensure that types are marshaled in the exact order they were Add()ed.\n\t// Otherwise the ID returned from Add() won't match.\n\te.pending.Grow(len(b.types))\n\tfor _, typ := range b.types {\n\t\te.pending.Push(typ)\n\t\te.ids[typ] = b.stableIDs[typ]\n\t}\n\n\tif err := e.deflatePending(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tlength := e.buf.Len()\n\ttypeLen := uint32(length - btfHeaderLen)\n\n\tstringLen := e.strings.Length()\n\tbuf = e.strings.AppendEncoded(e.buf.Bytes())\n\n\t// Fill out the header, and write it out.\n\theader := &btfHeader{\n\t\tMagic:     btfMagic,\n\t\tVersion:   1,\n\t\tFlags:     0,\n\t\tHdrLen:    uint32(btfHeaderLen),\n\t\tTypeOff:   0,\n\t\tTypeLen:   typeLen,\n\t\tStringOff: typeLen,\n\t\tStringLen: uint32(stringLen),\n\t}\n\n\terr := binary.Write(sliceWriter(buf[:btfHeaderLen]), e.Order, header)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"write header: %v\", err)\n\t}\n\n\treturn buf, nil\n}\n\n// addString adds a string to the resulting BTF.\n//\n// Adding the same string multiple times will return the same result.\n//\n// Returns an identifier into the string table or an error if the string\n// contains invalid characters.\nfunc (b *Builder) addString(str string) (uint32, error) {\n\tif b.strings == nil {\n\t\tb.strings = newStringTableBuilder(0)\n\t}\n\n\treturn b.strings.Add(str)\n}\n\nfunc (e *encoder) allocateID(typ Type) error {\n\tid := e.lastID + 1\n\tif id < e.lastID {\n\t\treturn errors.New(\"type ID overflow\")\n\t}\n\n\te.pending.Push(typ)\n\te.ids[typ] = id\n\te.lastID = id\n\treturn nil\n}\n\n// id returns the ID for the given type or panics with an error.\nfunc (e *encoder) id(typ Type) TypeID {\n\tif _, ok := typ.(*Void); ok {\n\t\treturn 0\n\t}\n\n\tid, ok := e.ids[typ]\n\tif !ok {\n\t\tpanic(fmt.Errorf(\"no ID for type %v\", typ))\n\t}\n\n\treturn id\n}\n\nfunc (e *encoder) deflatePending() error {\n\t// Declare root outside of the loop to avoid repeated heap allocations.\n\tvar root Type\n\tskip := func(t Type) (skip bool) {\n\t\tif t == root {\n\t\t\t// Force descending into the current root type even if it already\n\t\t\t// has an ID. Otherwise we miss children of types that have their\n\t\t\t// ID pre-allocated via Add.\n\t\t\treturn false\n\t\t}\n\n\t\t_, isVoid := t.(*Void)\n\t\t_, alreadyEncoded := e.ids[t]\n\t\treturn isVoid || alreadyEncoded\n\t}\n\n\tfor !e.pending.Empty() {\n\t\troot = e.pending.Shift()\n\n\t\t// Allocate IDs for all children of typ, including transitive dependencies.\n\t\titer := postorderTraversal(root, skip)\n\t\tfor iter.Next() {\n\t\t\tif iter.Type == root {\n\t\t\t\t// The iterator yields root at the end, do not allocate another ID.\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif err := e.allocateID(iter.Type); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\n\t\tif err := e.deflateType(root); err != nil {\n\t\t\tid := e.ids[root]\n\t\t\treturn fmt.Errorf(\"deflate %v with ID %d: %w\", root, id, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (e *encoder) deflateType(typ Type) (err error) {\n\tdefer func() {\n\t\tif r := recover(); r != nil {\n\t\t\tvar ok bool\n\t\t\terr, ok = r.(error)\n\t\t\tif !ok {\n\t\t\t\tpanic(r)\n\t\t\t}\n\t\t}\n\t}()\n\n\tvar raw rawType\n\traw.NameOff, err = e.strings.Add(typ.TypeName())\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tswitch v := typ.(type) {\n\tcase *Void:\n\t\treturn errors.New(\"Void is implicit in BTF wire format\")\n\n\tcase *Int:\n\t\traw.SetKind(kindInt)\n\t\traw.SetSize(v.Size)\n\n\t\tvar bi btfInt\n\t\tbi.SetEncoding(v.Encoding)\n\t\t// We need to set bits in addition to size, since btf_type_int_is_regular\n\t\t// otherwise flags this as a bitfield.\n\t\tbi.SetBits(byte(v.Size) * 8)\n\t\traw.data = bi\n\n\tcase *Pointer:\n\t\traw.SetKind(kindPointer)\n\t\traw.SetType(e.id(v.Target))\n\n\tcase *Array:\n\t\traw.SetKind(kindArray)\n\t\traw.data = &btfArray{\n\t\t\te.id(v.Type),\n\t\t\te.id(v.Index),\n\t\t\tv.Nelems,\n\t\t}\n\n\tcase *Struct:\n\t\traw.SetKind(kindStruct)\n\t\traw.SetSize(v.Size)\n\t\traw.data, err = e.convertMembers(&raw.btfType, v.Members)\n\n\tcase *Union:\n\t\traw.SetKind(kindUnion)\n\t\traw.SetSize(v.Size)\n\t\traw.data, err = e.convertMembers(&raw.btfType, v.Members)\n\n\tcase *Enum:\n\t\traw.SetSize(v.size())\n\t\traw.SetVlen(len(v.Values))\n\t\traw.SetSigned(v.Signed)\n\n\t\tif v.has64BitValues() {\n\t\t\traw.SetKind(kindEnum64)\n\t\t\traw.data, err = e.deflateEnum64Values(v.Values)\n\t\t} else {\n\t\t\traw.SetKind(kindEnum)\n\t\t\traw.data, err = e.deflateEnumValues(v.Values)\n\t\t}\n\n\tcase *Fwd:\n\t\traw.SetKind(kindForward)\n\t\traw.SetFwdKind(v.Kind)\n\n\tcase *Typedef:\n\t\traw.SetKind(kindTypedef)\n\t\traw.SetType(e.id(v.Type))\n\n\tcase *Volatile:\n\t\traw.SetKind(kindVolatile)\n\t\traw.SetType(e.id(v.Type))\n\n\tcase *Const:\n\t\traw.SetKind(kindConst)\n\t\traw.SetType(e.id(v.Type))\n\n\tcase *Restrict:\n\t\traw.SetKind(kindRestrict)\n\t\traw.SetType(e.id(v.Type))\n\n\tcase *Func:\n\t\traw.SetKind(kindFunc)\n\t\traw.SetType(e.id(v.Type))\n\t\tif !e.StripFuncLinkage {\n\t\t\traw.SetLinkage(v.Linkage)\n\t\t}\n\n\tcase *FuncProto:\n\t\traw.SetKind(kindFuncProto)\n\t\traw.SetType(e.id(v.Return))\n\t\traw.SetVlen(len(v.Params))\n\t\traw.data, err = e.deflateFuncParams(v.Params)\n\n\tcase *Var:\n\t\traw.SetKind(kindVar)\n\t\traw.SetType(e.id(v.Type))\n\t\traw.data = btfVariable{uint32(v.Linkage)}\n\n\tcase *Datasec:\n\t\traw.SetKind(kindDatasec)\n\t\traw.SetSize(v.Size)\n\t\traw.SetVlen(len(v.Vars))\n\t\traw.data = e.deflateVarSecinfos(v.Vars)\n\n\tcase *Float:\n\t\traw.SetKind(kindFloat)\n\t\traw.SetSize(v.Size)\n\n\tcase *declTag:\n\t\traw.SetKind(kindDeclTag)\n\t\traw.SetType(e.id(v.Type))\n\t\traw.data = &btfDeclTag{uint32(v.Index)}\n\t\traw.NameOff, err = e.strings.Add(v.Value)\n\n\tcase *typeTag:\n\t\traw.SetKind(kindTypeTag)\n\t\traw.SetType(e.id(v.Type))\n\t\traw.NameOff, err = e.strings.Add(v.Value)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"don't know how to deflate %T\", v)\n\t}\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn raw.Marshal(e.buf, e.Order)\n}\n\nfunc (e *encoder) convertMembers(header *btfType, members []Member) ([]btfMember, error) {\n\tbms := make([]btfMember, 0, len(members))\n\tisBitfield := false\n\tfor _, member := range members {\n\t\tisBitfield = isBitfield || member.BitfieldSize > 0\n\n\t\toffset := member.Offset\n\t\tif isBitfield {\n\t\t\toffset = member.BitfieldSize<<24 | (member.Offset & 0xffffff)\n\t\t}\n\n\t\tnameOff, err := e.strings.Add(member.Name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbms = append(bms, btfMember{\n\t\t\tnameOff,\n\t\t\te.id(member.Type),\n\t\t\tuint32(offset),\n\t\t})\n\t}\n\n\theader.SetVlen(len(members))\n\theader.SetBitfield(isBitfield)\n\treturn bms, nil\n}\n\nfunc (e *encoder) deflateEnumValues(values []EnumValue) ([]btfEnum, error) {\n\tbes := make([]btfEnum, 0, len(values))\n\tfor _, value := range values {\n\t\tnameOff, err := e.strings.Add(value.Name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif value.Value > math.MaxUint32 {\n\t\t\treturn nil, fmt.Errorf(\"value of enum %q exceeds 32 bits\", value.Name)\n\t\t}\n\n\t\tbes = append(bes, btfEnum{\n\t\t\tnameOff,\n\t\t\tuint32(value.Value),\n\t\t})\n\t}\n\n\treturn bes, nil\n}\n\nfunc (e *encoder) deflateEnum64Values(values []EnumValue) ([]btfEnum64, error) {\n\tbes := make([]btfEnum64, 0, len(values))\n\tfor _, value := range values {\n\t\tnameOff, err := e.strings.Add(value.Name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbes = append(bes, btfEnum64{\n\t\t\tnameOff,\n\t\t\tuint32(value.Value),\n\t\t\tuint32(value.Value >> 32),\n\t\t})\n\t}\n\n\treturn bes, nil\n}\n\nfunc (e *encoder) deflateFuncParams(params []FuncParam) ([]btfParam, error) {\n\tbps := make([]btfParam, 0, len(params))\n\tfor _, param := range params {\n\t\tnameOff, err := e.strings.Add(param.Name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tbps = append(bps, btfParam{\n\t\t\tnameOff,\n\t\t\te.id(param.Type),\n\t\t})\n\t}\n\treturn bps, nil\n}\n\nfunc (e *encoder) deflateVarSecinfos(vars []VarSecinfo) []btfVarSecinfo {\n\tvsis := make([]btfVarSecinfo, 0, len(vars))\n\tfor _, v := range vars {\n\t\tvsis = append(vsis, btfVarSecinfo{\n\t\t\te.id(v.Type),\n\t\t\tv.Offset,\n\t\t\tv.Size,\n\t\t})\n\t}\n\treturn vsis\n}\n\n// MarshalMapKV creates a BTF object containing a map key and value.\n//\n// The function is intended for the use of the ebpf package and may be removed\n// at any point in time.\nfunc MarshalMapKV(key, value Type) (_ *Handle, keyID, valueID TypeID, err error) {\n\tvar b Builder\n\n\tif key != nil {\n\t\tkeyID, err = b.Add(key)\n\t\tif err != nil {\n\t\t\treturn nil, 0, 0, fmt.Errorf(\"add key type: %w\", err)\n\t\t}\n\t}\n\n\tif value != nil {\n\t\tvalueID, err = b.Add(value)\n\t\tif err != nil {\n\t\t\treturn nil, 0, 0, fmt.Errorf(\"add value type: %w\", err)\n\t\t}\n\t}\n\n\thandle, err := NewHandle(&b)\n\tif err != nil {\n\t\t// Check for 'full' map BTF support, since kernels between 4.18 and 5.2\n\t\t// already support BTF blobs for maps without Var or Datasec just fine.\n\t\tif err := haveMapBTF(); err != nil {\n\t\t\treturn nil, 0, 0, err\n\t\t}\n\t}\n\treturn handle, keyID, valueID, err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/strings.go",
    "content": "package btf\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\n\t\"golang.org/x/exp/maps\"\n)\n\ntype stringTable struct {\n\tbase    *stringTable\n\toffsets []uint32\n\tstrings []string\n}\n\n// sizedReader is implemented by bytes.Reader, io.SectionReader, strings.Reader, etc.\ntype sizedReader interface {\n\tio.Reader\n\tSize() int64\n}\n\nfunc readStringTable(r sizedReader, base *stringTable) (*stringTable, error) {\n\t// When parsing split BTF's string table, the first entry offset is derived\n\t// from the last entry offset of the base BTF.\n\tfirstStringOffset := uint32(0)\n\tif base != nil {\n\t\tidx := len(base.offsets) - 1\n\t\tfirstStringOffset = base.offsets[idx] + uint32(len(base.strings[idx])) + 1\n\t}\n\n\t// Derived from vmlinux BTF.\n\tconst averageStringLength = 16\n\n\tn := int(r.Size() / averageStringLength)\n\toffsets := make([]uint32, 0, n)\n\tstrings := make([]string, 0, n)\n\n\toffset := firstStringOffset\n\tscanner := bufio.NewScanner(r)\n\tscanner.Split(splitNull)\n\tfor scanner.Scan() {\n\t\tstr := scanner.Text()\n\t\toffsets = append(offsets, offset)\n\t\tstrings = append(strings, str)\n\t\toffset += uint32(len(str)) + 1\n\t}\n\tif err := scanner.Err(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(strings) == 0 {\n\t\treturn nil, errors.New(\"string table is empty\")\n\t}\n\n\tif firstStringOffset == 0 && strings[0] != \"\" {\n\t\treturn nil, errors.New(\"first item in string table is non-empty\")\n\t}\n\n\treturn &stringTable{base, offsets, strings}, nil\n}\n\nfunc splitNull(data []byte, atEOF bool) (advance int, token []byte, err error) {\n\ti := bytes.IndexByte(data, 0)\n\tif i == -1 {\n\t\tif atEOF && len(data) > 0 {\n\t\t\treturn 0, nil, errors.New(\"string table isn't null terminated\")\n\t\t}\n\t\treturn 0, nil, nil\n\t}\n\n\treturn i + 1, data[:i], nil\n}\n\nfunc (st *stringTable) Lookup(offset uint32) (string, error) {\n\tif st.base != nil && offset <= st.base.offsets[len(st.base.offsets)-1] {\n\t\treturn st.base.lookup(offset)\n\t}\n\treturn st.lookup(offset)\n}\n\nfunc (st *stringTable) lookup(offset uint32) (string, error) {\n\ti := search(st.offsets, offset)\n\tif i == len(st.offsets) || st.offsets[i] != offset {\n\t\treturn \"\", fmt.Errorf(\"offset %d isn't start of a string\", offset)\n\t}\n\n\treturn st.strings[i], nil\n}\n\nfunc (st *stringTable) Marshal(w io.Writer) error {\n\tfor _, str := range st.strings {\n\t\t_, err := io.WriteString(w, str)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = w.Write([]byte{0})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// Num returns the number of strings in the table.\nfunc (st *stringTable) Num() int {\n\treturn len(st.strings)\n}\n\n// search is a copy of sort.Search specialised for uint32.\n//\n// Licensed under https://go.dev/LICENSE\nfunc search(ints []uint32, needle uint32) int {\n\t// Define f(-1) == false and f(n) == true.\n\t// Invariant: f(i-1) == false, f(j) == true.\n\ti, j := 0, len(ints)\n\tfor i < j {\n\t\th := int(uint(i+j) >> 1) // avoid overflow when computing h\n\t\t// i ≤ h < j\n\t\tif !(ints[h] >= needle) {\n\t\t\ti = h + 1 // preserves f(i-1) == false\n\t\t} else {\n\t\t\tj = h // preserves f(j) == true\n\t\t}\n\t}\n\t// i == j, f(i-1) == false, and f(j) (= f(i)) == true  =>  answer is i.\n\treturn i\n}\n\n// stringTableBuilder builds BTF string tables.\ntype stringTableBuilder struct {\n\tlength  uint32\n\tstrings map[string]uint32\n}\n\n// newStringTableBuilder creates a builder with the given capacity.\n//\n// capacity may be zero.\nfunc newStringTableBuilder(capacity int) *stringTableBuilder {\n\tvar stb stringTableBuilder\n\n\tif capacity == 0 {\n\t\t// Use the runtime's small default size.\n\t\tstb.strings = make(map[string]uint32)\n\t} else {\n\t\tstb.strings = make(map[string]uint32, capacity)\n\t}\n\n\t// Ensure that the empty string is at index 0.\n\tstb.append(\"\")\n\treturn &stb\n}\n\n// Add a string to the table.\n//\n// Adding the same string multiple times will only store it once.\nfunc (stb *stringTableBuilder) Add(str string) (uint32, error) {\n\tif strings.IndexByte(str, 0) != -1 {\n\t\treturn 0, fmt.Errorf(\"string contains null: %q\", str)\n\t}\n\n\toffset, ok := stb.strings[str]\n\tif ok {\n\t\treturn offset, nil\n\t}\n\n\treturn stb.append(str), nil\n}\n\nfunc (stb *stringTableBuilder) append(str string) uint32 {\n\toffset := stb.length\n\tstb.length += uint32(len(str)) + 1\n\tstb.strings[str] = offset\n\treturn offset\n}\n\n// Lookup finds the offset of a string in the table.\n//\n// Returns an error if str hasn't been added yet.\nfunc (stb *stringTableBuilder) Lookup(str string) (uint32, error) {\n\toffset, ok := stb.strings[str]\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"string %q is not in table\", str)\n\t}\n\n\treturn offset, nil\n}\n\n// Length returns the length in bytes.\nfunc (stb *stringTableBuilder) Length() int {\n\treturn int(stb.length)\n}\n\n// AppendEncoded appends the string table to the end of the provided buffer.\nfunc (stb *stringTableBuilder) AppendEncoded(buf []byte) []byte {\n\tn := len(buf)\n\tbuf = append(buf, make([]byte, stb.Length())...)\n\tstrings := buf[n:]\n\tfor str, offset := range stb.strings {\n\t\tcopy(strings[offset:], str)\n\t}\n\treturn buf\n}\n\n// Copy the string table builder.\nfunc (stb *stringTableBuilder) Copy() *stringTableBuilder {\n\treturn &stringTableBuilder{\n\t\tstb.length,\n\t\tmaps.Clone(stb.strings),\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/traversal.go",
    "content": "package btf\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf/internal\"\n)\n\n// Functions to traverse a cyclic graph of types. The below was very useful:\n// https://eli.thegreenplace.net/2015/directed-graph-traversal-orderings-and-applications-to-data-flow-analysis/#post-order-and-reverse-post-order\n\ntype postorderIterator struct {\n\t// Iteration skips types for which this function returns true.\n\tskip func(Type) bool\n\t// The root type. May be nil if skip(root) is true.\n\troot Type\n\n\t// Contains types which need to be either walked or yielded.\n\ttypes typeDeque\n\t// Contains a boolean whether the type has been walked or not.\n\twalked internal.Deque[bool]\n\t// The set of types which has been pushed onto types.\n\tpushed map[Type]struct{}\n\n\t// The current type. Only valid after a call to Next().\n\tType Type\n}\n\n// postorderTraversal iterates all types reachable from root by visiting the\n// leaves of the graph first.\n//\n// Types for which skip returns true are ignored. skip may be nil.\nfunc postorderTraversal(root Type, skip func(Type) (skip bool)) postorderIterator {\n\t// Avoid allocations for the common case of a skipped root.\n\tif skip != nil && skip(root) {\n\t\treturn postorderIterator{}\n\t}\n\n\tpo := postorderIterator{root: root, skip: skip}\n\twalkType(root, po.push)\n\n\treturn po\n}\n\nfunc (po *postorderIterator) push(t *Type) {\n\tif _, ok := po.pushed[*t]; ok || *t == po.root {\n\t\treturn\n\t}\n\n\tif po.skip != nil && po.skip(*t) {\n\t\treturn\n\t}\n\n\tif po.pushed == nil {\n\t\t// Lazily allocate pushed to avoid an allocation for Types without children.\n\t\tpo.pushed = make(map[Type]struct{})\n\t}\n\n\tpo.pushed[*t] = struct{}{}\n\tpo.types.Push(t)\n\tpo.walked.Push(false)\n}\n\n// Next returns true if there is another Type to traverse.\nfunc (po *postorderIterator) Next() bool {\n\tfor !po.types.Empty() {\n\t\tt := po.types.Pop()\n\n\t\tif !po.walked.Pop() {\n\t\t\t// Push the type again, so that we re-evaluate it in done state\n\t\t\t// after all children have been handled.\n\t\t\tpo.types.Push(t)\n\t\t\tpo.walked.Push(true)\n\n\t\t\t// Add all direct children to todo.\n\t\t\twalkType(*t, po.push)\n\t\t} else {\n\t\t\t// We've walked this type previously, so we now know that all\n\t\t\t// children have been handled.\n\t\t\tpo.Type = *t\n\t\t\treturn true\n\t\t}\n\t}\n\n\t// Only return root once.\n\tpo.Type, po.root = po.root, nil\n\treturn po.Type != nil\n}\n\n// walkType calls fn on each child of typ.\nfunc walkType(typ Type, fn func(*Type)) {\n\t// Explicitly type switch on the most common types to allow the inliner to\n\t// do its work. This avoids allocating intermediate slices from walk() on\n\t// the heap.\n\tswitch v := typ.(type) {\n\tcase *Void, *Int, *Enum, *Fwd, *Float:\n\t\t// No children to traverse.\n\tcase *Pointer:\n\t\tfn(&v.Target)\n\tcase *Array:\n\t\tfn(&v.Index)\n\t\tfn(&v.Type)\n\tcase *Struct:\n\t\tfor i := range v.Members {\n\t\t\tfn(&v.Members[i].Type)\n\t\t}\n\tcase *Union:\n\t\tfor i := range v.Members {\n\t\t\tfn(&v.Members[i].Type)\n\t\t}\n\tcase *Typedef:\n\t\tfn(&v.Type)\n\tcase *Volatile:\n\t\tfn(&v.Type)\n\tcase *Const:\n\t\tfn(&v.Type)\n\tcase *Restrict:\n\t\tfn(&v.Type)\n\tcase *Func:\n\t\tfn(&v.Type)\n\tcase *FuncProto:\n\t\tfn(&v.Return)\n\t\tfor i := range v.Params {\n\t\t\tfn(&v.Params[i].Type)\n\t\t}\n\tcase *Var:\n\t\tfn(&v.Type)\n\tcase *Datasec:\n\t\tfor i := range v.Vars {\n\t\t\tfn(&v.Vars[i].Type)\n\t\t}\n\tcase *declTag:\n\t\tfn(&v.Type)\n\tcase *typeTag:\n\t\tfn(&v.Type)\n\tcase *cycle:\n\t\t// cycle has children, but we ignore them deliberately.\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"don't know how to walk Type %T\", v))\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/types.go",
    "content": "package btf\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\nconst maxTypeDepth = 32\n\n// TypeID identifies a type in a BTF section.\ntype TypeID = sys.TypeID\n\n// Type represents a type described by BTF.\n//\n// Identity of Type follows the [Go specification]: two Types are considered\n// equal if they have the same concrete type and the same dynamic value, aka\n// they point at the same location in memory. This means that the following\n// Types are considered distinct even though they have the same \"shape\".\n//\n//\ta := &Int{Size: 1}\n//\tb := &Int{Size: 1}\n//\ta != b\n//\n// [Go specification]: https://go.dev/ref/spec#Comparison_operators\ntype Type interface {\n\t// Type can be formatted using the %s and %v verbs. %s outputs only the\n\t// identity of the type, without any detail. %v outputs additional detail.\n\t//\n\t// Use the '+' flag to include the address of the type.\n\t//\n\t// Use the width to specify how many levels of detail to output, for example\n\t// %1v will output detail for the root type and a short description of its\n\t// children. %2v would output details of the root type and its children\n\t// as well as a short description of the grandchildren.\n\tfmt.Formatter\n\n\t// Name of the type, empty for anonymous types and types that cannot\n\t// carry a name, like Void and Pointer.\n\tTypeName() string\n\n\t// Make a copy of the type, without copying Type members.\n\tcopy() Type\n\n\t// New implementations must update walkType.\n}\n\nvar (\n\t_ Type = (*Int)(nil)\n\t_ Type = (*Struct)(nil)\n\t_ Type = (*Union)(nil)\n\t_ Type = (*Enum)(nil)\n\t_ Type = (*Fwd)(nil)\n\t_ Type = (*Func)(nil)\n\t_ Type = (*Typedef)(nil)\n\t_ Type = (*Var)(nil)\n\t_ Type = (*Datasec)(nil)\n\t_ Type = (*Float)(nil)\n\t_ Type = (*declTag)(nil)\n\t_ Type = (*typeTag)(nil)\n\t_ Type = (*cycle)(nil)\n)\n\n// Void is the unit type of BTF.\ntype Void struct{}\n\nfunc (v *Void) Format(fs fmt.State, verb rune) { formatType(fs, verb, v) }\nfunc (v *Void) TypeName() string               { return \"\" }\nfunc (v *Void) size() uint32                   { return 0 }\nfunc (v *Void) copy() Type                     { return (*Void)(nil) }\n\ntype IntEncoding byte\n\n// Valid IntEncodings.\n//\n// These may look like they are flags, but they aren't.\nconst (\n\tUnsigned IntEncoding = 0\n\tSigned   IntEncoding = 1\n\tChar     IntEncoding = 2\n\tBool     IntEncoding = 4\n)\n\nfunc (ie IntEncoding) String() string {\n\tswitch ie {\n\tcase Char:\n\t\t// NB: There is no way to determine signedness for char.\n\t\treturn \"char\"\n\tcase Bool:\n\t\treturn \"bool\"\n\tcase Signed:\n\t\treturn \"signed\"\n\tcase Unsigned:\n\t\treturn \"unsigned\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"IntEncoding(%d)\", byte(ie))\n\t}\n}\n\n// Int is an integer of a given length.\n//\n// See https://www.kernel.org/doc/html/latest/bpf/btf.html#btf-kind-int\ntype Int struct {\n\tName string\n\n\t// The size of the integer in bytes.\n\tSize     uint32\n\tEncoding IntEncoding\n}\n\nfunc (i *Int) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, i, i.Encoding, \"size=\", i.Size*8)\n}\n\nfunc (i *Int) TypeName() string { return i.Name }\nfunc (i *Int) size() uint32     { return i.Size }\nfunc (i *Int) copy() Type {\n\tcpy := *i\n\treturn &cpy\n}\n\n// Pointer is a pointer to another type.\ntype Pointer struct {\n\tTarget Type\n}\n\nfunc (p *Pointer) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, p, \"target=\", p.Target)\n}\n\nfunc (p *Pointer) TypeName() string { return \"\" }\nfunc (p *Pointer) size() uint32     { return 8 }\nfunc (p *Pointer) copy() Type {\n\tcpy := *p\n\treturn &cpy\n}\n\n// Array is an array with a fixed number of elements.\ntype Array struct {\n\tIndex  Type\n\tType   Type\n\tNelems uint32\n}\n\nfunc (arr *Array) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, arr, \"index=\", arr.Index, \"type=\", arr.Type, \"n=\", arr.Nelems)\n}\n\nfunc (arr *Array) TypeName() string { return \"\" }\n\nfunc (arr *Array) copy() Type {\n\tcpy := *arr\n\treturn &cpy\n}\n\n// Struct is a compound type of consecutive members.\ntype Struct struct {\n\tName string\n\t// The size of the struct including padding, in bytes\n\tSize    uint32\n\tMembers []Member\n}\n\nfunc (s *Struct) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, s, \"fields=\", len(s.Members))\n}\n\nfunc (s *Struct) TypeName() string { return s.Name }\n\nfunc (s *Struct) size() uint32 { return s.Size }\n\nfunc (s *Struct) copy() Type {\n\tcpy := *s\n\tcpy.Members = copyMembers(s.Members)\n\treturn &cpy\n}\n\nfunc (s *Struct) members() []Member {\n\treturn s.Members\n}\n\n// Union is a compound type where members occupy the same memory.\ntype Union struct {\n\tName string\n\t// The size of the union including padding, in bytes.\n\tSize    uint32\n\tMembers []Member\n}\n\nfunc (u *Union) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, u, \"fields=\", len(u.Members))\n}\n\nfunc (u *Union) TypeName() string { return u.Name }\n\nfunc (u *Union) size() uint32 { return u.Size }\n\nfunc (u *Union) copy() Type {\n\tcpy := *u\n\tcpy.Members = copyMembers(u.Members)\n\treturn &cpy\n}\n\nfunc (u *Union) members() []Member {\n\treturn u.Members\n}\n\nfunc copyMembers(orig []Member) []Member {\n\tcpy := make([]Member, len(orig))\n\tcopy(cpy, orig)\n\treturn cpy\n}\n\ntype composite interface {\n\tType\n\tmembers() []Member\n}\n\nvar (\n\t_ composite = (*Struct)(nil)\n\t_ composite = (*Union)(nil)\n)\n\n// A value in bits.\ntype Bits uint32\n\n// Bytes converts a bit value into bytes.\nfunc (b Bits) Bytes() uint32 {\n\treturn uint32(b / 8)\n}\n\n// Member is part of a Struct or Union.\n//\n// It is not a valid Type.\ntype Member struct {\n\tName         string\n\tType         Type\n\tOffset       Bits\n\tBitfieldSize Bits\n}\n\n// Enum lists possible values.\ntype Enum struct {\n\tName string\n\t// Size of the enum value in bytes.\n\tSize uint32\n\t// True if the values should be interpreted as signed integers.\n\tSigned bool\n\tValues []EnumValue\n}\n\nfunc (e *Enum) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, e, \"size=\", e.Size, \"values=\", len(e.Values))\n}\n\nfunc (e *Enum) TypeName() string { return e.Name }\n\n// EnumValue is part of an Enum\n//\n// Is is not a valid Type\ntype EnumValue struct {\n\tName  string\n\tValue uint64\n}\n\nfunc (e *Enum) size() uint32 { return e.Size }\nfunc (e *Enum) copy() Type {\n\tcpy := *e\n\tcpy.Values = make([]EnumValue, len(e.Values))\n\tcopy(cpy.Values, e.Values)\n\treturn &cpy\n}\n\n// has64BitValues returns true if the Enum contains a value larger than 32 bits.\n// Kernels before 6.0 have enum values that overrun u32 replaced with zeroes.\n//\n// 64-bit enums have their Enum.Size attributes correctly set to 8, but if we\n// use the size attribute as a heuristic during BTF marshaling, we'll emit\n// ENUM64s to kernels that don't support them.\nfunc (e *Enum) has64BitValues() bool {\n\tfor _, v := range e.Values {\n\t\tif v.Value > math.MaxUint32 {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// FwdKind is the type of forward declaration.\ntype FwdKind int\n\n// Valid types of forward declaration.\nconst (\n\tFwdStruct FwdKind = iota\n\tFwdUnion\n)\n\nfunc (fk FwdKind) String() string {\n\tswitch fk {\n\tcase FwdStruct:\n\t\treturn \"struct\"\n\tcase FwdUnion:\n\t\treturn \"union\"\n\tdefault:\n\t\treturn fmt.Sprintf(\"%T(%d)\", fk, int(fk))\n\t}\n}\n\n// Fwd is a forward declaration of a Type.\ntype Fwd struct {\n\tName string\n\tKind FwdKind\n}\n\nfunc (f *Fwd) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, f, f.Kind)\n}\n\nfunc (f *Fwd) TypeName() string { return f.Name }\n\nfunc (f *Fwd) copy() Type {\n\tcpy := *f\n\treturn &cpy\n}\n\n// Typedef is an alias of a Type.\ntype Typedef struct {\n\tName string\n\tType Type\n}\n\nfunc (td *Typedef) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, td, td.Type)\n}\n\nfunc (td *Typedef) TypeName() string { return td.Name }\n\nfunc (td *Typedef) copy() Type {\n\tcpy := *td\n\treturn &cpy\n}\n\n// Volatile is a qualifier.\ntype Volatile struct {\n\tType Type\n}\n\nfunc (v *Volatile) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, v, v.Type)\n}\n\nfunc (v *Volatile) TypeName() string { return \"\" }\n\nfunc (v *Volatile) qualify() Type { return v.Type }\nfunc (v *Volatile) copy() Type {\n\tcpy := *v\n\treturn &cpy\n}\n\n// Const is a qualifier.\ntype Const struct {\n\tType Type\n}\n\nfunc (c *Const) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, c, c.Type)\n}\n\nfunc (c *Const) TypeName() string { return \"\" }\n\nfunc (c *Const) qualify() Type { return c.Type }\nfunc (c *Const) copy() Type {\n\tcpy := *c\n\treturn &cpy\n}\n\n// Restrict is a qualifier.\ntype Restrict struct {\n\tType Type\n}\n\nfunc (r *Restrict) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, r, r.Type)\n}\n\nfunc (r *Restrict) TypeName() string { return \"\" }\n\nfunc (r *Restrict) qualify() Type { return r.Type }\nfunc (r *Restrict) copy() Type {\n\tcpy := *r\n\treturn &cpy\n}\n\n// Func is a function definition.\ntype Func struct {\n\tName    string\n\tType    Type\n\tLinkage FuncLinkage\n}\n\nfunc FuncMetadata(ins *asm.Instruction) *Func {\n\tfn, _ := ins.Metadata.Get(funcInfoMeta{}).(*Func)\n\treturn fn\n}\n\n// WithFuncMetadata adds a btf.Func to the Metadata of asm.Instruction.\nfunc WithFuncMetadata(ins asm.Instruction, fn *Func) asm.Instruction {\n\tins.Metadata.Set(funcInfoMeta{}, fn)\n\treturn ins\n}\n\nfunc (f *Func) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, f, f.Linkage, \"proto=\", f.Type)\n}\n\nfunc (f *Func) TypeName() string { return f.Name }\n\nfunc (f *Func) copy() Type {\n\tcpy := *f\n\treturn &cpy\n}\n\n// FuncProto is a function declaration.\ntype FuncProto struct {\n\tReturn Type\n\tParams []FuncParam\n}\n\nfunc (fp *FuncProto) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, fp, \"args=\", len(fp.Params), \"return=\", fp.Return)\n}\n\nfunc (fp *FuncProto) TypeName() string { return \"\" }\n\nfunc (fp *FuncProto) copy() Type {\n\tcpy := *fp\n\tcpy.Params = make([]FuncParam, len(fp.Params))\n\tcopy(cpy.Params, fp.Params)\n\treturn &cpy\n}\n\ntype FuncParam struct {\n\tName string\n\tType Type\n}\n\n// Var is a global variable.\ntype Var struct {\n\tName    string\n\tType    Type\n\tLinkage VarLinkage\n}\n\nfunc (v *Var) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, v, v.Linkage)\n}\n\nfunc (v *Var) TypeName() string { return v.Name }\n\nfunc (v *Var) copy() Type {\n\tcpy := *v\n\treturn &cpy\n}\n\n// Datasec is a global program section containing data.\ntype Datasec struct {\n\tName string\n\tSize uint32\n\tVars []VarSecinfo\n}\n\nfunc (ds *Datasec) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, ds)\n}\n\nfunc (ds *Datasec) TypeName() string { return ds.Name }\n\nfunc (ds *Datasec) size() uint32 { return ds.Size }\n\nfunc (ds *Datasec) copy() Type {\n\tcpy := *ds\n\tcpy.Vars = make([]VarSecinfo, len(ds.Vars))\n\tcopy(cpy.Vars, ds.Vars)\n\treturn &cpy\n}\n\n// VarSecinfo describes variable in a Datasec.\n//\n// It is not a valid Type.\ntype VarSecinfo struct {\n\t// Var or Func.\n\tType   Type\n\tOffset uint32\n\tSize   uint32\n}\n\n// Float is a float of a given length.\ntype Float struct {\n\tName string\n\n\t// The size of the float in bytes.\n\tSize uint32\n}\n\nfunc (f *Float) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, f, \"size=\", f.Size*8)\n}\n\nfunc (f *Float) TypeName() string { return f.Name }\nfunc (f *Float) size() uint32     { return f.Size }\nfunc (f *Float) copy() Type {\n\tcpy := *f\n\treturn &cpy\n}\n\n// declTag associates metadata with a declaration.\ntype declTag struct {\n\tType  Type\n\tValue string\n\t// The index this tag refers to in the target type. For composite types,\n\t// a value of -1 indicates that the tag refers to the whole type. Otherwise\n\t// it indicates which member or argument the tag applies to.\n\tIndex int\n}\n\nfunc (dt *declTag) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, dt, \"type=\", dt.Type, \"value=\", dt.Value, \"index=\", dt.Index)\n}\n\nfunc (dt *declTag) TypeName() string { return \"\" }\nfunc (dt *declTag) copy() Type {\n\tcpy := *dt\n\treturn &cpy\n}\n\n// typeTag associates metadata with a type.\ntype typeTag struct {\n\tType  Type\n\tValue string\n}\n\nfunc (tt *typeTag) Format(fs fmt.State, verb rune) {\n\tformatType(fs, verb, tt, \"type=\", tt.Type, \"value=\", tt.Value)\n}\n\nfunc (tt *typeTag) TypeName() string { return \"\" }\nfunc (tt *typeTag) qualify() Type    { return tt.Type }\nfunc (tt *typeTag) copy() Type {\n\tcpy := *tt\n\treturn &cpy\n}\n\n// cycle is a type which had to be elided since it exceeded maxTypeDepth.\ntype cycle struct {\n\troot Type\n}\n\nfunc (c *cycle) ID() TypeID                     { return math.MaxUint32 }\nfunc (c *cycle) Format(fs fmt.State, verb rune) { formatType(fs, verb, c, \"root=\", c.root) }\nfunc (c *cycle) TypeName() string               { return \"\" }\nfunc (c *cycle) copy() Type {\n\tcpy := *c\n\treturn &cpy\n}\n\ntype sizer interface {\n\tsize() uint32\n}\n\nvar (\n\t_ sizer = (*Int)(nil)\n\t_ sizer = (*Pointer)(nil)\n\t_ sizer = (*Struct)(nil)\n\t_ sizer = (*Union)(nil)\n\t_ sizer = (*Enum)(nil)\n\t_ sizer = (*Datasec)(nil)\n)\n\ntype qualifier interface {\n\tqualify() Type\n}\n\nvar (\n\t_ qualifier = (*Const)(nil)\n\t_ qualifier = (*Restrict)(nil)\n\t_ qualifier = (*Volatile)(nil)\n\t_ qualifier = (*typeTag)(nil)\n)\n\nvar errUnsizedType = errors.New(\"type is unsized\")\n\n// Sizeof returns the size of a type in bytes.\n//\n// Returns an error if the size can't be computed.\nfunc Sizeof(typ Type) (int, error) {\n\tvar (\n\t\tn    = int64(1)\n\t\telem int64\n\t)\n\n\tfor i := 0; i < maxTypeDepth; i++ {\n\t\tswitch v := typ.(type) {\n\t\tcase *Array:\n\t\t\tif n > 0 && int64(v.Nelems) > math.MaxInt64/n {\n\t\t\t\treturn 0, fmt.Errorf(\"type %s: overflow\", typ)\n\t\t\t}\n\n\t\t\t// Arrays may be of zero length, which allows\n\t\t\t// n to be zero as well.\n\t\t\tn *= int64(v.Nelems)\n\t\t\ttyp = v.Type\n\t\t\tcontinue\n\n\t\tcase sizer:\n\t\t\telem = int64(v.size())\n\n\t\tcase *Typedef:\n\t\t\ttyp = v.Type\n\t\t\tcontinue\n\n\t\tcase qualifier:\n\t\t\ttyp = v.qualify()\n\t\t\tcontinue\n\n\t\tdefault:\n\t\t\treturn 0, fmt.Errorf(\"type %T: %w\", typ, errUnsizedType)\n\t\t}\n\n\t\tif n > 0 && elem > math.MaxInt64/n {\n\t\t\treturn 0, fmt.Errorf(\"type %s: overflow\", typ)\n\t\t}\n\n\t\tsize := n * elem\n\t\tif int64(int(size)) != size {\n\t\t\treturn 0, fmt.Errorf(\"type %s: overflow\", typ)\n\t\t}\n\n\t\treturn int(size), nil\n\t}\n\n\treturn 0, fmt.Errorf(\"type %s: exceeded type depth\", typ)\n}\n\n// alignof returns the alignment of a type.\n//\n// Returns an error if the Type can't be aligned, like an integer with an uneven\n// size. Currently only supports the subset of types necessary for bitfield\n// relocations.\nfunc alignof(typ Type) (int, error) {\n\tvar n int\n\n\tswitch t := UnderlyingType(typ).(type) {\n\tcase *Enum:\n\t\tn = int(t.size())\n\tcase *Int:\n\t\tn = int(t.Size)\n\tcase *Array:\n\t\treturn alignof(t.Type)\n\tdefault:\n\t\treturn 0, fmt.Errorf(\"can't calculate alignment of %T\", t)\n\t}\n\n\tif !pow(n) {\n\t\treturn 0, fmt.Errorf(\"alignment value %d is not a power of two\", n)\n\t}\n\n\treturn n, nil\n}\n\n// pow returns true if n is a power of two.\nfunc pow(n int) bool {\n\treturn n != 0 && (n&(n-1)) == 0\n}\n\n// Transformer modifies a given Type and returns the result.\n//\n// For example, UnderlyingType removes any qualifiers or typedefs from a type.\n// See the example on Copy for how to use a transform.\ntype Transformer func(Type) Type\n\n// Copy a Type recursively.\n//\n// typ may form a cycle. If transform is not nil, it is called with the\n// to be copied type, and the returned value is copied instead.\nfunc Copy(typ Type, transform Transformer) Type {\n\tcopies := copier{copies: make(map[Type]Type)}\n\tcopies.copy(&typ, transform)\n\treturn typ\n}\n\n// copy a slice of Types recursively.\n//\n// See Copy for the semantics.\nfunc copyTypes(types []Type, transform Transformer) []Type {\n\tresult := make([]Type, len(types))\n\tcopy(result, types)\n\n\tcopies := copier{copies: make(map[Type]Type, len(types))}\n\tfor i := range result {\n\t\tcopies.copy(&result[i], transform)\n\t}\n\n\treturn result\n}\n\ntype copier struct {\n\tcopies map[Type]Type\n\twork   typeDeque\n}\n\nfunc (c *copier) copy(typ *Type, transform Transformer) {\n\tfor t := typ; t != nil; t = c.work.Pop() {\n\t\t// *t is the identity of the type.\n\t\tif cpy := c.copies[*t]; cpy != nil {\n\t\t\t*t = cpy\n\t\t\tcontinue\n\t\t}\n\n\t\tvar cpy Type\n\t\tif transform != nil {\n\t\t\tcpy = transform(*t).copy()\n\t\t} else {\n\t\t\tcpy = (*t).copy()\n\t\t}\n\n\t\tc.copies[*t] = cpy\n\t\t*t = cpy\n\n\t\t// Mark any nested types for copying.\n\t\twalkType(cpy, c.work.Push)\n\t}\n}\n\ntype typeDeque = internal.Deque[*Type]\n\n// inflateRawTypes takes a list of raw btf types linked via type IDs, and turns\n// it into a graph of Types connected via pointers.\n//\n// If base is provided, then the raw types are considered to be of a split BTF\n// (e.g., a kernel module).\n//\n// Returns a slice of types indexed by TypeID. Since BTF ignores compilation\n// units, multiple types may share the same name. A Type may form a cyclic graph\n// by pointing at itself.\nfunc inflateRawTypes(rawTypes []rawType, rawStrings *stringTable, base *Spec) ([]Type, error) {\n\ttypes := make([]Type, 0, len(rawTypes)+1) // +1 for Void added to base types\n\n\t// Void is defined to always be type ID 0, and is thus omitted from BTF.\n\ttypes = append(types, (*Void)(nil))\n\n\tfirstTypeID := TypeID(0)\n\tif base != nil {\n\t\tvar err error\n\t\tfirstTypeID, err = base.nextTypeID()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// Split BTF doesn't contain Void.\n\t\ttypes = types[:0]\n\t}\n\n\ttype fixupDef struct {\n\t\tid  TypeID\n\t\ttyp *Type\n\t}\n\n\tvar fixups []fixupDef\n\tfixup := func(id TypeID, typ *Type) bool {\n\t\tif id < firstTypeID {\n\t\t\tif baseType, err := base.TypeByID(id); err == nil {\n\t\t\t\t*typ = baseType\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\tidx := int(id - firstTypeID)\n\t\tif idx < len(types) {\n\t\t\t// We've already inflated this type, fix it up immediately.\n\t\t\t*typ = types[idx]\n\t\t\treturn true\n\t\t}\n\n\t\tfixups = append(fixups, fixupDef{id, typ})\n\t\treturn false\n\t}\n\n\ttype assertion struct {\n\t\tid   TypeID\n\t\ttyp  *Type\n\t\twant reflect.Type\n\t}\n\n\tvar assertions []assertion\n\tfixupAndAssert := func(id TypeID, typ *Type, want reflect.Type) error {\n\t\tif !fixup(id, typ) {\n\t\t\tassertions = append(assertions, assertion{id, typ, want})\n\t\t\treturn nil\n\t\t}\n\n\t\t// The type has already been fixed up, check the type immediately.\n\t\tif reflect.TypeOf(*typ) != want {\n\t\t\treturn fmt.Errorf(\"type ID %d: expected %s, got %T\", id, want, *typ)\n\t\t}\n\t\treturn nil\n\t}\n\n\ttype bitfieldFixupDef struct {\n\t\tid TypeID\n\t\tm  *Member\n\t}\n\n\tvar (\n\t\tlegacyBitfields = make(map[TypeID][2]Bits) // offset, size\n\t\tbitfieldFixups  []bitfieldFixupDef\n\t)\n\tconvertMembers := func(raw []btfMember, kindFlag bool) ([]Member, error) {\n\t\t// NB: The fixup below relies on pre-allocating this array to\n\t\t// work, since otherwise append might re-allocate members.\n\t\tmembers := make([]Member, 0, len(raw))\n\t\tfor i, btfMember := range raw {\n\t\t\tname, err := rawStrings.Lookup(btfMember.NameOff)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get name for member %d: %w\", i, err)\n\t\t\t}\n\n\t\t\tmembers = append(members, Member{\n\t\t\t\tName:   name,\n\t\t\t\tOffset: Bits(btfMember.Offset),\n\t\t\t})\n\n\t\t\tm := &members[i]\n\t\t\tfixup(raw[i].Type, &m.Type)\n\n\t\t\tif kindFlag {\n\t\t\t\tm.BitfieldSize = Bits(btfMember.Offset >> 24)\n\t\t\t\tm.Offset &= 0xffffff\n\t\t\t\t// We ignore legacy bitfield definitions if the current composite\n\t\t\t\t// is a new-style bitfield. This is kind of safe since offset and\n\t\t\t\t// size on the type of the member must be zero if kindFlat is set\n\t\t\t\t// according to spec.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// This may be a legacy bitfield, try to fix it up.\n\t\t\tdata, ok := legacyBitfields[raw[i].Type]\n\t\t\tif ok {\n\t\t\t\t// Bingo!\n\t\t\t\tm.Offset += data[0]\n\t\t\t\tm.BitfieldSize = data[1]\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif m.Type != nil {\n\t\t\t\t// We couldn't find a legacy bitfield, but we know that the member's\n\t\t\t\t// type has already been inflated. Hence we know that it can't be\n\t\t\t\t// a legacy bitfield and there is nothing left to do.\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// We don't have fixup data, and the type we're pointing\n\t\t\t// at hasn't been inflated yet. No choice but to defer\n\t\t\t// the fixup.\n\t\t\tbitfieldFixups = append(bitfieldFixups, bitfieldFixupDef{\n\t\t\t\traw[i].Type,\n\t\t\t\tm,\n\t\t\t})\n\t\t}\n\t\treturn members, nil\n\t}\n\n\tvar declTags []*declTag\n\tfor _, raw := range rawTypes {\n\t\tvar (\n\t\t\tid  = firstTypeID + TypeID(len(types))\n\t\t\ttyp Type\n\t\t)\n\n\t\tif id < firstTypeID {\n\t\t\treturn nil, fmt.Errorf(\"no more type IDs\")\n\t\t}\n\n\t\tname, err := rawStrings.Lookup(raw.NameOff)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"get name for type id %d: %w\", id, err)\n\t\t}\n\n\t\tswitch raw.Kind() {\n\t\tcase kindInt:\n\t\t\tsize := raw.Size()\n\t\t\tbi := raw.data.(*btfInt)\n\t\t\tif bi.Offset() > 0 || bi.Bits().Bytes() != size {\n\t\t\t\tlegacyBitfields[id] = [2]Bits{bi.Offset(), bi.Bits()}\n\t\t\t}\n\t\t\ttyp = &Int{name, raw.Size(), bi.Encoding()}\n\n\t\tcase kindPointer:\n\t\t\tptr := &Pointer{nil}\n\t\t\tfixup(raw.Type(), &ptr.Target)\n\t\t\ttyp = ptr\n\n\t\tcase kindArray:\n\t\t\tbtfArr := raw.data.(*btfArray)\n\t\t\tarr := &Array{nil, nil, btfArr.Nelems}\n\t\t\tfixup(btfArr.IndexType, &arr.Index)\n\t\t\tfixup(btfArr.Type, &arr.Type)\n\t\t\ttyp = arr\n\n\t\tcase kindStruct:\n\t\t\tmembers, err := convertMembers(raw.data.([]btfMember), raw.Bitfield())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"struct %s (id %d): %w\", name, id, err)\n\t\t\t}\n\t\t\ttyp = &Struct{name, raw.Size(), members}\n\n\t\tcase kindUnion:\n\t\t\tmembers, err := convertMembers(raw.data.([]btfMember), raw.Bitfield())\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"union %s (id %d): %w\", name, id, err)\n\t\t\t}\n\t\t\ttyp = &Union{name, raw.Size(), members}\n\n\t\tcase kindEnum:\n\t\t\trawvals := raw.data.([]btfEnum)\n\t\t\tvals := make([]EnumValue, 0, len(rawvals))\n\t\t\tsigned := raw.Signed()\n\t\t\tfor i, btfVal := range rawvals {\n\t\t\t\tname, err := rawStrings.Lookup(btfVal.NameOff)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"get name for enum value %d: %s\", i, err)\n\t\t\t\t}\n\t\t\t\tvalue := uint64(btfVal.Val)\n\t\t\t\tif signed {\n\t\t\t\t\t// Sign extend values to 64 bit.\n\t\t\t\t\tvalue = uint64(int32(btfVal.Val))\n\t\t\t\t}\n\t\t\t\tvals = append(vals, EnumValue{name, value})\n\t\t\t}\n\t\t\ttyp = &Enum{name, raw.Size(), signed, vals}\n\n\t\tcase kindForward:\n\t\t\ttyp = &Fwd{name, raw.FwdKind()}\n\n\t\tcase kindTypedef:\n\t\t\ttypedef := &Typedef{name, nil}\n\t\t\tfixup(raw.Type(), &typedef.Type)\n\t\t\ttyp = typedef\n\n\t\tcase kindVolatile:\n\t\t\tvolatile := &Volatile{nil}\n\t\t\tfixup(raw.Type(), &volatile.Type)\n\t\t\ttyp = volatile\n\n\t\tcase kindConst:\n\t\t\tcnst := &Const{nil}\n\t\t\tfixup(raw.Type(), &cnst.Type)\n\t\t\ttyp = cnst\n\n\t\tcase kindRestrict:\n\t\t\trestrict := &Restrict{nil}\n\t\t\tfixup(raw.Type(), &restrict.Type)\n\t\t\ttyp = restrict\n\n\t\tcase kindFunc:\n\t\t\tfn := &Func{name, nil, raw.Linkage()}\n\t\t\tif err := fixupAndAssert(raw.Type(), &fn.Type, reflect.TypeOf((*FuncProto)(nil))); err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\ttyp = fn\n\n\t\tcase kindFuncProto:\n\t\t\trawparams := raw.data.([]btfParam)\n\t\t\tparams := make([]FuncParam, 0, len(rawparams))\n\t\t\tfor i, param := range rawparams {\n\t\t\t\tname, err := rawStrings.Lookup(param.NameOff)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"get name for func proto parameter %d: %s\", i, err)\n\t\t\t\t}\n\t\t\t\tparams = append(params, FuncParam{\n\t\t\t\t\tName: name,\n\t\t\t\t})\n\t\t\t}\n\t\t\tfor i := range params {\n\t\t\t\tfixup(rawparams[i].Type, &params[i].Type)\n\t\t\t}\n\n\t\t\tfp := &FuncProto{nil, params}\n\t\t\tfixup(raw.Type(), &fp.Return)\n\t\t\ttyp = fp\n\n\t\tcase kindVar:\n\t\t\tvariable := raw.data.(*btfVariable)\n\t\t\tv := &Var{name, nil, VarLinkage(variable.Linkage)}\n\t\t\tfixup(raw.Type(), &v.Type)\n\t\t\ttyp = v\n\n\t\tcase kindDatasec:\n\t\t\tbtfVars := raw.data.([]btfVarSecinfo)\n\t\t\tvars := make([]VarSecinfo, 0, len(btfVars))\n\t\t\tfor _, btfVar := range btfVars {\n\t\t\t\tvars = append(vars, VarSecinfo{\n\t\t\t\t\tOffset: btfVar.Offset,\n\t\t\t\t\tSize:   btfVar.Size,\n\t\t\t\t})\n\t\t\t}\n\t\t\tfor i := range vars {\n\t\t\t\tfixup(btfVars[i].Type, &vars[i].Type)\n\t\t\t}\n\t\t\ttyp = &Datasec{name, raw.Size(), vars}\n\n\t\tcase kindFloat:\n\t\t\ttyp = &Float{name, raw.Size()}\n\n\t\tcase kindDeclTag:\n\t\t\tbtfIndex := raw.data.(*btfDeclTag).ComponentIdx\n\t\t\tif uint64(btfIndex) > math.MaxInt {\n\t\t\t\treturn nil, fmt.Errorf(\"type id %d: index exceeds int\", id)\n\t\t\t}\n\n\t\t\tdt := &declTag{nil, name, int(int32(btfIndex))}\n\t\t\tfixup(raw.Type(), &dt.Type)\n\t\t\ttyp = dt\n\n\t\t\tdeclTags = append(declTags, dt)\n\n\t\tcase kindTypeTag:\n\t\t\ttt := &typeTag{nil, name}\n\t\t\tfixup(raw.Type(), &tt.Type)\n\t\t\ttyp = tt\n\n\t\tcase kindEnum64:\n\t\t\trawvals := raw.data.([]btfEnum64)\n\t\t\tvals := make([]EnumValue, 0, len(rawvals))\n\t\t\tfor i, btfVal := range rawvals {\n\t\t\t\tname, err := rawStrings.Lookup(btfVal.NameOff)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"get name for enum64 value %d: %s\", i, err)\n\t\t\t\t}\n\t\t\t\tvalue := (uint64(btfVal.ValHi32) << 32) | uint64(btfVal.ValLo32)\n\t\t\t\tvals = append(vals, EnumValue{name, value})\n\t\t\t}\n\t\t\ttyp = &Enum{name, raw.Size(), raw.Signed(), vals}\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"type id %d: unknown kind: %v\", id, raw.Kind())\n\t\t}\n\n\t\ttypes = append(types, typ)\n\t}\n\n\tfor _, fixup := range fixups {\n\t\tif fixup.id < firstTypeID {\n\t\t\treturn nil, fmt.Errorf(\"fixup for base type id %d is not expected\", fixup.id)\n\t\t}\n\n\t\tidx := int(fixup.id - firstTypeID)\n\t\tif idx >= len(types) {\n\t\t\treturn nil, fmt.Errorf(\"reference to invalid type id: %d\", fixup.id)\n\t\t}\n\n\t\t*fixup.typ = types[idx]\n\t}\n\n\tfor _, bitfieldFixup := range bitfieldFixups {\n\t\tif bitfieldFixup.id < firstTypeID {\n\t\t\treturn nil, fmt.Errorf(\"bitfield fixup from split to base types is not expected\")\n\t\t}\n\n\t\tdata, ok := legacyBitfields[bitfieldFixup.id]\n\t\tif ok {\n\t\t\t// This is indeed a legacy bitfield, fix it up.\n\t\t\tbitfieldFixup.m.Offset += data[0]\n\t\t\tbitfieldFixup.m.BitfieldSize = data[1]\n\t\t}\n\t}\n\n\tfor _, assertion := range assertions {\n\t\tif reflect.TypeOf(*assertion.typ) != assertion.want {\n\t\t\treturn nil, fmt.Errorf(\"type ID %d: expected %s, got %T\", assertion.id, assertion.want, *assertion.typ)\n\t\t}\n\t}\n\n\tfor _, dt := range declTags {\n\t\tswitch t := dt.Type.(type) {\n\t\tcase *Var, *Typedef:\n\t\t\tif dt.Index != -1 {\n\t\t\t\treturn nil, fmt.Errorf(\"type %s: index %d is not -1\", dt, dt.Index)\n\t\t\t}\n\n\t\tcase composite:\n\t\t\tif dt.Index >= len(t.members()) {\n\t\t\t\treturn nil, fmt.Errorf(\"type %s: index %d exceeds members of %s\", dt, dt.Index, t)\n\t\t\t}\n\n\t\tcase *Func:\n\t\t\tif dt.Index >= len(t.Type.(*FuncProto).Params) {\n\t\t\t\treturn nil, fmt.Errorf(\"type %s: index %d exceeds params of %s\", dt, dt.Index, t)\n\t\t\t}\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"type %s: decl tag for type %s is not supported\", dt, t)\n\t\t}\n\t}\n\n\treturn types, nil\n}\n\n// essentialName represents the name of a BTF type stripped of any flavor\n// suffixes after a ___ delimiter.\ntype essentialName string\n\n// newEssentialName returns name without a ___ suffix.\n//\n// CO-RE has the concept of 'struct flavors', which are used to deal with\n// changes in kernel data structures. Anything after three underscores\n// in a type name is ignored for the purpose of finding a candidate type\n// in the kernel's BTF.\nfunc newEssentialName(name string) essentialName {\n\tif name == \"\" {\n\t\treturn \"\"\n\t}\n\tlastIdx := strings.LastIndex(name, \"___\")\n\tif lastIdx > 0 {\n\t\treturn essentialName(name[:lastIdx])\n\t}\n\treturn essentialName(name)\n}\n\n// UnderlyingType skips qualifiers and Typedefs.\nfunc UnderlyingType(typ Type) Type {\n\tresult := typ\n\tfor depth := 0; depth <= maxTypeDepth; depth++ {\n\t\tswitch v := (result).(type) {\n\t\tcase qualifier:\n\t\t\tresult = v.qualify()\n\t\tcase *Typedef:\n\t\t\tresult = v.Type\n\t\tdefault:\n\t\t\treturn result\n\t\t}\n\t}\n\treturn &cycle{typ}\n}\n\n// as returns typ if is of type T. Otherwise it peels qualifiers and Typedefs\n// until it finds a T.\n//\n// Returns the zero value and false if there is no T or if the type is nested\n// too deeply.\nfunc as[T Type](typ Type) (T, bool) {\n\tfor depth := 0; depth <= maxTypeDepth; depth++ {\n\t\tswitch v := (typ).(type) {\n\t\tcase T:\n\t\t\treturn v, true\n\t\tcase qualifier:\n\t\t\ttyp = v.qualify()\n\t\tcase *Typedef:\n\t\t\ttyp = v.Type\n\t\tdefault:\n\t\t\tgoto notFound\n\t\t}\n\t}\nnotFound:\n\tvar zero T\n\treturn zero, false\n}\n\ntype formatState struct {\n\tfmt.State\n\tdepth int\n}\n\n// formattableType is a subset of Type, to ease unit testing of formatType.\ntype formattableType interface {\n\tfmt.Formatter\n\tTypeName() string\n}\n\n// formatType formats a type in a canonical form.\n//\n// Handles cyclical types by only printing cycles up to a certain depth. Elements\n// in extra are separated by spaces unless the preceding element is a string\n// ending in '='.\nfunc formatType(f fmt.State, verb rune, t formattableType, extra ...interface{}) {\n\tif verb != 'v' && verb != 's' {\n\t\tfmt.Fprintf(f, \"{UNRECOGNIZED: %c}\", verb)\n\t\treturn\n\t}\n\n\t_, _ = io.WriteString(f, internal.GoTypeName(t))\n\n\tif name := t.TypeName(); name != \"\" {\n\t\t// Output BTF type name if present.\n\t\tfmt.Fprintf(f, \":%q\", name)\n\t}\n\n\tif f.Flag('+') {\n\t\t// Output address if requested.\n\t\tfmt.Fprintf(f, \":%#p\", t)\n\t}\n\n\tif verb == 's' {\n\t\t// %s omits details.\n\t\treturn\n\t}\n\n\tvar depth int\n\tif ps, ok := f.(*formatState); ok {\n\t\tdepth = ps.depth\n\t\tf = ps.State\n\t}\n\n\tmaxDepth, ok := f.Width()\n\tif !ok {\n\t\tmaxDepth = 0\n\t}\n\n\tif depth > maxDepth {\n\t\t// We've reached the maximum depth. This avoids infinite recursion even\n\t\t// for cyclical types.\n\t\treturn\n\t}\n\n\tif len(extra) == 0 {\n\t\treturn\n\t}\n\n\twantSpace := false\n\t_, _ = io.WriteString(f, \"[\")\n\tfor _, arg := range extra {\n\t\tif wantSpace {\n\t\t\t_, _ = io.WriteString(f, \" \")\n\t\t}\n\n\t\tswitch v := arg.(type) {\n\t\tcase string:\n\t\t\t_, _ = io.WriteString(f, v)\n\t\t\twantSpace = len(v) > 0 && v[len(v)-1] != '='\n\t\t\tcontinue\n\n\t\tcase formattableType:\n\t\t\tv.Format(&formatState{f, depth + 1}, verb)\n\n\t\tdefault:\n\t\t\tfmt.Fprint(f, arg)\n\t\t}\n\n\t\twantSpace = true\n\t}\n\t_, _ = io.WriteString(f, \"]\")\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/btf/workarounds.go",
    "content": "package btf\n\n// datasecResolveWorkaround ensures that certain vars in a Datasec are added\n// to a Spec before the Datasec. This avoids a bug in kernel BTF validation.\n//\n// See https://lore.kernel.org/bpf/20230302123440.1193507-1-lmb@isovalent.com/\nfunc datasecResolveWorkaround(b *Builder, ds *Datasec) error {\n\tfor _, vsi := range ds.Vars {\n\t\tv, ok := vsi.Type.(*Var)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch v.Type.(type) {\n\t\tcase *Typedef, *Volatile, *Const, *Restrict, *typeTag:\n\t\t\t// NB: We must never call Add on a Datasec, otherwise we risk\n\t\t\t// infinite recursion.\n\t\t\t_, err := b.Add(v.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/collection.go",
    "content": "package ebpf\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/kconfig\"\n)\n\n// CollectionOptions control loading a collection into the kernel.\n//\n// Maps and Programs are passed to NewMapWithOptions and NewProgramsWithOptions.\ntype CollectionOptions struct {\n\tMaps     MapOptions\n\tPrograms ProgramOptions\n\n\t// MapReplacements takes a set of Maps that will be used instead of\n\t// creating new ones when loading the CollectionSpec.\n\t//\n\t// For each given Map, there must be a corresponding MapSpec in\n\t// CollectionSpec.Maps, and its type, key/value size, max entries and flags\n\t// must match the values of the MapSpec.\n\t//\n\t// The given Maps are Clone()d before being used in the Collection, so the\n\t// caller can Close() them freely when they are no longer needed.\n\tMapReplacements map[string]*Map\n}\n\n// CollectionSpec describes a collection.\ntype CollectionSpec struct {\n\tMaps     map[string]*MapSpec\n\tPrograms map[string]*ProgramSpec\n\n\t// Types holds type information about Maps and Programs.\n\t// Modifications to Types are currently undefined behaviour.\n\tTypes *btf.Spec\n\n\t// ByteOrder specifies whether the ELF was compiled for\n\t// big-endian or little-endian architectures.\n\tByteOrder binary.ByteOrder\n}\n\n// Copy returns a recursive copy of the spec.\nfunc (cs *CollectionSpec) Copy() *CollectionSpec {\n\tif cs == nil {\n\t\treturn nil\n\t}\n\n\tcpy := CollectionSpec{\n\t\tMaps:      make(map[string]*MapSpec, len(cs.Maps)),\n\t\tPrograms:  make(map[string]*ProgramSpec, len(cs.Programs)),\n\t\tByteOrder: cs.ByteOrder,\n\t\tTypes:     cs.Types,\n\t}\n\n\tfor name, spec := range cs.Maps {\n\t\tcpy.Maps[name] = spec.Copy()\n\t}\n\n\tfor name, spec := range cs.Programs {\n\t\tcpy.Programs[name] = spec.Copy()\n\t}\n\n\treturn &cpy\n}\n\n// RewriteMaps replaces all references to specific maps.\n//\n// Use this function to use pre-existing maps instead of creating new ones\n// when calling NewCollection. Any named maps are removed from CollectionSpec.Maps.\n//\n// Returns an error if a named map isn't used in at least one program.\n//\n// Deprecated: Pass CollectionOptions.MapReplacements when loading the Collection\n// instead.\nfunc (cs *CollectionSpec) RewriteMaps(maps map[string]*Map) error {\n\tfor symbol, m := range maps {\n\t\t// have we seen a program that uses this symbol / map\n\t\tseen := false\n\t\tfor progName, progSpec := range cs.Programs {\n\t\t\terr := progSpec.Instructions.AssociateMap(symbol, m)\n\n\t\t\tswitch {\n\t\t\tcase err == nil:\n\t\t\t\tseen = true\n\n\t\t\tcase errors.Is(err, asm.ErrUnreferencedSymbol):\n\t\t\t\t// Not all programs need to use the map\n\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"program %s: %w\", progName, err)\n\t\t\t}\n\t\t}\n\n\t\tif !seen {\n\t\t\treturn fmt.Errorf(\"map %s not referenced by any programs\", symbol)\n\t\t}\n\n\t\t// Prevent NewCollection from creating rewritten maps\n\t\tdelete(cs.Maps, symbol)\n\t}\n\n\treturn nil\n}\n\n// MissingConstantsError is returned by [CollectionSpec.RewriteConstants].\ntype MissingConstantsError struct {\n\t// The constants missing from .rodata.\n\tConstants []string\n}\n\nfunc (m *MissingConstantsError) Error() string {\n\treturn fmt.Sprintf(\"some constants are missing from .rodata: %s\", strings.Join(m.Constants, \", \"))\n}\n\n// RewriteConstants replaces the value of multiple constants.\n//\n// The constant must be defined like so in the C program:\n//\n//\tvolatile const type foobar;\n//\tvolatile const type foobar = default;\n//\n// Replacement values must be of the same length as the C sizeof(type).\n// If necessary, they are marshalled according to the same rules as\n// map values.\n//\n// From Linux 5.5 the verifier will use constants to eliminate dead code.\n//\n// Returns an error wrapping [MissingConstantsError] if a constant doesn't exist.\nfunc (cs *CollectionSpec) RewriteConstants(consts map[string]interface{}) error {\n\treplaced := make(map[string]bool)\n\n\tfor name, spec := range cs.Maps {\n\t\tif !strings.HasPrefix(name, \".rodata\") {\n\t\t\tcontinue\n\t\t}\n\n\t\tb, ds, err := spec.dataSection()\n\t\tif errors.Is(err, errMapNoBTFValue) {\n\t\t\t// Data sections without a BTF Datasec are valid, but don't support\n\t\t\t// constant replacements.\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"map %s: %w\", name, err)\n\t\t}\n\n\t\t// MapSpec.Copy() performs a shallow copy. Fully copy the byte slice\n\t\t// to avoid any changes affecting other copies of the MapSpec.\n\t\tcpy := make([]byte, len(b))\n\t\tcopy(cpy, b)\n\n\t\tfor _, v := range ds.Vars {\n\t\t\tvname := v.Type.TypeName()\n\t\t\treplacement, ok := consts[vname]\n\t\t\tif !ok {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif _, ok := v.Type.(*btf.Var); !ok {\n\t\t\t\treturn fmt.Errorf(\"section %s: unexpected type %T for variable %s\", name, v.Type, vname)\n\t\t\t}\n\n\t\t\tif replaced[vname] {\n\t\t\t\treturn fmt.Errorf(\"section %s: duplicate variable %s\", name, vname)\n\t\t\t}\n\n\t\t\tif int(v.Offset+v.Size) > len(cpy) {\n\t\t\t\treturn fmt.Errorf(\"section %s: offset %d(+%d) for variable %s is out of bounds\", name, v.Offset, v.Size, vname)\n\t\t\t}\n\n\t\t\tb, err := marshalBytes(replacement, int(v.Size))\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"marshaling constant replacement %s: %w\", vname, err)\n\t\t\t}\n\n\t\t\tcopy(cpy[v.Offset:v.Offset+v.Size], b)\n\n\t\t\treplaced[vname] = true\n\t\t}\n\n\t\tspec.Contents[0] = MapKV{Key: uint32(0), Value: cpy}\n\t}\n\n\tvar missing []string\n\tfor c := range consts {\n\t\tif !replaced[c] {\n\t\t\tmissing = append(missing, c)\n\t\t}\n\t}\n\n\tif len(missing) != 0 {\n\t\treturn fmt.Errorf(\"rewrite constants: %w\", &MissingConstantsError{Constants: missing})\n\t}\n\n\treturn nil\n}\n\n// Assign the contents of a CollectionSpec to a struct.\n//\n// This function is a shortcut to manually checking the presence\n// of maps and programs in a CollectionSpec. Consider using bpf2go\n// if this sounds useful.\n//\n// 'to' must be a pointer to a struct. A field of the\n// struct is updated with values from Programs or Maps if it\n// has an `ebpf` tag and its type is *ProgramSpec or *MapSpec.\n// The tag's value specifies the name of the program or map as\n// found in the CollectionSpec.\n//\n//\tstruct {\n//\t    Foo     *ebpf.ProgramSpec `ebpf:\"xdp_foo\"`\n//\t    Bar     *ebpf.MapSpec     `ebpf:\"bar_map\"`\n//\t    Ignored int\n//\t}\n//\n// Returns an error if any of the eBPF objects can't be found, or\n// if the same MapSpec or ProgramSpec is assigned multiple times.\nfunc (cs *CollectionSpec) Assign(to interface{}) error {\n\t// Assign() only supports assigning ProgramSpecs and MapSpecs,\n\t// so doesn't load any resources into the kernel.\n\tgetValue := func(typ reflect.Type, name string) (interface{}, error) {\n\t\tswitch typ {\n\n\t\tcase reflect.TypeOf((*ProgramSpec)(nil)):\n\t\t\tif p := cs.Programs[name]; p != nil {\n\t\t\t\treturn p, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"missing program %q\", name)\n\n\t\tcase reflect.TypeOf((*MapSpec)(nil)):\n\t\t\tif m := cs.Maps[name]; m != nil {\n\t\t\t\treturn m, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"missing map %q\", name)\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unsupported type %s\", typ)\n\t\t}\n\t}\n\n\treturn assignValues(to, getValue)\n}\n\n// LoadAndAssign loads Maps and Programs into the kernel and assigns them\n// to a struct.\n//\n// Omitting Map/Program.Close() during application shutdown is an error.\n// See the package documentation for details around Map and Program lifecycle.\n//\n// This function is a shortcut to manually checking the presence\n// of maps and programs in a CollectionSpec. Consider using bpf2go\n// if this sounds useful.\n//\n// 'to' must be a pointer to a struct. A field of the struct is updated with\n// a Program or Map if it has an `ebpf` tag and its type is *Program or *Map.\n// The tag's value specifies the name of the program or map as found in the\n// CollectionSpec. Before updating the struct, the requested objects and their\n// dependent resources are loaded into the kernel and populated with values if\n// specified.\n//\n//\tstruct {\n//\t    Foo     *ebpf.Program `ebpf:\"xdp_foo\"`\n//\t    Bar     *ebpf.Map     `ebpf:\"bar_map\"`\n//\t    Ignored int\n//\t}\n//\n// opts may be nil.\n//\n// Returns an error if any of the fields can't be found, or\n// if the same Map or Program is assigned multiple times.\nfunc (cs *CollectionSpec) LoadAndAssign(to interface{}, opts *CollectionOptions) error {\n\tloader, err := newCollectionLoader(cs, opts)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer loader.close()\n\n\t// Support assigning Programs and Maps, lazy-loading the required objects.\n\tassignedMaps := make(map[string]bool)\n\tassignedProgs := make(map[string]bool)\n\n\tgetValue := func(typ reflect.Type, name string) (interface{}, error) {\n\t\tswitch typ {\n\n\t\tcase reflect.TypeOf((*Program)(nil)):\n\t\t\tassignedProgs[name] = true\n\t\t\treturn loader.loadProgram(name)\n\n\t\tcase reflect.TypeOf((*Map)(nil)):\n\t\t\tassignedMaps[name] = true\n\t\t\treturn loader.loadMap(name)\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unsupported type %s\", typ)\n\t\t}\n\t}\n\n\t// Load the Maps and Programs requested by the annotated struct.\n\tif err := assignValues(to, getValue); err != nil {\n\t\treturn err\n\t}\n\n\t// Populate the requested maps. Has a chance of lazy-loading other dependent maps.\n\tif err := loader.populateMaps(); err != nil {\n\t\treturn err\n\t}\n\n\t// Evaluate the loader's objects after all (lazy)loading has taken place.\n\tfor n, m := range loader.maps {\n\t\tswitch m.typ {\n\t\tcase ProgramArray:\n\t\t\t// Require all lazy-loaded ProgramArrays to be assigned to the given object.\n\t\t\t// The kernel empties a ProgramArray once the last user space reference\n\t\t\t// to it closes, which leads to failed tail calls. Combined with the library\n\t\t\t// closing map fds via GC finalizers this can lead to surprising behaviour.\n\t\t\t// Only allow unassigned ProgramArrays when the library hasn't pre-populated\n\t\t\t// any entries from static value declarations. At this point, we know the map\n\t\t\t// is empty and there's no way for the caller to interact with the map going\n\t\t\t// forward.\n\t\t\tif !assignedMaps[n] && len(cs.Maps[n].Contents) > 0 {\n\t\t\t\treturn fmt.Errorf(\"ProgramArray %s must be assigned to prevent missed tail calls\", n)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Prevent loader.cleanup() from closing assigned Maps and Programs.\n\tfor m := range assignedMaps {\n\t\tdelete(loader.maps, m)\n\t}\n\tfor p := range assignedProgs {\n\t\tdelete(loader.programs, p)\n\t}\n\n\treturn nil\n}\n\n// Collection is a collection of Programs and Maps associated\n// with their symbols\ntype Collection struct {\n\tPrograms map[string]*Program\n\tMaps     map[string]*Map\n}\n\n// NewCollection creates a Collection from the given spec, creating and\n// loading its declared resources into the kernel.\n//\n// Omitting Collection.Close() during application shutdown is an error.\n// See the package documentation for details around Map and Program lifecycle.\nfunc NewCollection(spec *CollectionSpec) (*Collection, error) {\n\treturn NewCollectionWithOptions(spec, CollectionOptions{})\n}\n\n// NewCollectionWithOptions creates a Collection from the given spec using\n// options, creating and loading its declared resources into the kernel.\n//\n// Omitting Collection.Close() during application shutdown is an error.\n// See the package documentation for details around Map and Program lifecycle.\nfunc NewCollectionWithOptions(spec *CollectionSpec, opts CollectionOptions) (*Collection, error) {\n\tloader, err := newCollectionLoader(spec, &opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer loader.close()\n\n\t// Create maps first, as their fds need to be linked into programs.\n\tfor mapName := range spec.Maps {\n\t\tif _, err := loader.loadMap(mapName); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tfor progName, prog := range spec.Programs {\n\t\tif prog.Type == UnspecifiedProgram {\n\t\t\tcontinue\n\t\t}\n\n\t\tif _, err := loader.loadProgram(progName); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\t// Maps can contain Program and Map stubs, so populate them after\n\t// all Maps and Programs have been successfully loaded.\n\tif err := loader.populateMaps(); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Prevent loader.cleanup from closing maps and programs.\n\tmaps, progs := loader.maps, loader.programs\n\tloader.maps, loader.programs = nil, nil\n\n\treturn &Collection{\n\t\tprogs,\n\t\tmaps,\n\t}, nil\n}\n\ntype collectionLoader struct {\n\tcoll     *CollectionSpec\n\topts     *CollectionOptions\n\tmaps     map[string]*Map\n\tprograms map[string]*Program\n}\n\nfunc newCollectionLoader(coll *CollectionSpec, opts *CollectionOptions) (*collectionLoader, error) {\n\tif opts == nil {\n\t\topts = &CollectionOptions{}\n\t}\n\n\t// Check for existing MapSpecs in the CollectionSpec for all provided replacement maps.\n\tfor name, m := range opts.MapReplacements {\n\t\tspec, ok := coll.Maps[name]\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"replacement map %s not found in CollectionSpec\", name)\n\t\t}\n\n\t\tif err := spec.Compatible(m); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"using replacement map %s: %w\", spec.Name, err)\n\t\t}\n\t}\n\n\treturn &collectionLoader{\n\t\tcoll,\n\t\topts,\n\t\tmake(map[string]*Map),\n\t\tmake(map[string]*Program),\n\t}, nil\n}\n\n// close all resources left over in the collectionLoader.\nfunc (cl *collectionLoader) close() {\n\tfor _, m := range cl.maps {\n\t\tm.Close()\n\t}\n\tfor _, p := range cl.programs {\n\t\tp.Close()\n\t}\n}\n\nfunc (cl *collectionLoader) loadMap(mapName string) (*Map, error) {\n\tif m := cl.maps[mapName]; m != nil {\n\t\treturn m, nil\n\t}\n\n\tmapSpec := cl.coll.Maps[mapName]\n\tif mapSpec == nil {\n\t\treturn nil, fmt.Errorf(\"missing map %s\", mapName)\n\t}\n\n\tif replaceMap, ok := cl.opts.MapReplacements[mapName]; ok {\n\t\t// Clone the map to avoid closing user's map later on.\n\t\tm, err := replaceMap.Clone()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tcl.maps[mapName] = m\n\t\treturn m, nil\n\t}\n\n\tm, err := newMapWithOptions(mapSpec, cl.opts.Maps)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"map %s: %w\", mapName, err)\n\t}\n\n\tcl.maps[mapName] = m\n\treturn m, nil\n}\n\nfunc (cl *collectionLoader) loadProgram(progName string) (*Program, error) {\n\tif prog := cl.programs[progName]; prog != nil {\n\t\treturn prog, nil\n\t}\n\n\tprogSpec := cl.coll.Programs[progName]\n\tif progSpec == nil {\n\t\treturn nil, fmt.Errorf(\"unknown program %s\", progName)\n\t}\n\n\t// Bail out early if we know the kernel is going to reject the program.\n\t// This skips loading map dependencies, saving some cleanup work later.\n\tif progSpec.Type == UnspecifiedProgram {\n\t\treturn nil, fmt.Errorf(\"cannot load program %s: program type is unspecified\", progName)\n\t}\n\n\tprogSpec = progSpec.Copy()\n\n\t// Rewrite any reference to a valid map in the program's instructions,\n\t// which includes all of its dependencies.\n\tfor i := range progSpec.Instructions {\n\t\tins := &progSpec.Instructions[i]\n\n\t\tif !ins.IsLoadFromMap() || ins.Reference() == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Don't overwrite map loads containing non-zero map fd's,\n\t\t// they can be manually included by the caller.\n\t\t// Map FDs/IDs are placed in the lower 32 bits of Constant.\n\t\tif int32(ins.Constant) > 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\tm, err := cl.loadMap(ins.Reference())\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"program %s: %w\", progName, err)\n\t\t}\n\n\t\tif err := ins.AssociateMap(m); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"program %s: map %s: %w\", progName, ins.Reference(), err)\n\t\t}\n\t}\n\n\tprog, err := newProgramWithOptions(progSpec, cl.opts.Programs)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"program %s: %w\", progName, err)\n\t}\n\n\tcl.programs[progName] = prog\n\treturn prog, nil\n}\n\nfunc (cl *collectionLoader) populateMaps() error {\n\tfor mapName, m := range cl.maps {\n\t\tmapSpec, ok := cl.coll.Maps[mapName]\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"missing map spec %s\", mapName)\n\t\t}\n\n\t\t// MapSpecs that refer to inner maps or programs within the same\n\t\t// CollectionSpec do so using strings. These strings are used as the key\n\t\t// to look up the respective object in the Maps or Programs fields.\n\t\t// Resolve those references to actual Map or Program resources that\n\t\t// have been loaded into the kernel.\n\t\tif mapSpec.Type.canStoreMap() || mapSpec.Type.canStoreProgram() {\n\t\t\tmapSpec = mapSpec.Copy()\n\n\t\t\tfor i, kv := range mapSpec.Contents {\n\t\t\t\tobjName, ok := kv.Value.(string)\n\t\t\t\tif !ok {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tswitch t := mapSpec.Type; {\n\t\t\t\tcase t.canStoreProgram():\n\t\t\t\t\t// loadProgram is idempotent and could return an existing Program.\n\t\t\t\t\tprog, err := cl.loadProgram(objName)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn fmt.Errorf(\"loading program %s, for map %s: %w\", objName, mapName, err)\n\t\t\t\t\t}\n\t\t\t\t\tmapSpec.Contents[i] = MapKV{kv.Key, prog}\n\n\t\t\t\tcase t.canStoreMap():\n\t\t\t\t\t// loadMap is idempotent and could return an existing Map.\n\t\t\t\t\tinnerMap, err := cl.loadMap(objName)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn fmt.Errorf(\"loading inner map %s, for map %s: %w\", objName, mapName, err)\n\t\t\t\t\t}\n\t\t\t\t\tmapSpec.Contents[i] = MapKV{kv.Key, innerMap}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Populate and freeze the map if specified.\n\t\tif err := m.finalize(mapSpec); err != nil {\n\t\t\treturn fmt.Errorf(\"populating map %s: %w\", mapName, err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// resolveKconfig resolves all variables declared in .kconfig and populates\n// m.Contents. Does nothing if the given m.Contents is non-empty.\nfunc resolveKconfig(m *MapSpec) error {\n\tds, ok := m.Value.(*btf.Datasec)\n\tif !ok {\n\t\treturn errors.New(\"map value is not a Datasec\")\n\t}\n\n\ttype configInfo struct {\n\t\toffset uint32\n\t\ttyp    btf.Type\n\t}\n\n\tconfigs := make(map[string]configInfo)\n\n\tdata := make([]byte, ds.Size)\n\tfor _, vsi := range ds.Vars {\n\t\tv := vsi.Type.(*btf.Var)\n\t\tn := v.TypeName()\n\n\t\tswitch n {\n\t\tcase \"LINUX_KERNEL_VERSION\":\n\t\t\tif integer, ok := v.Type.(*btf.Int); !ok || integer.Size != 4 {\n\t\t\t\treturn fmt.Errorf(\"variable %s must be a 32 bits integer, got %s\", n, v.Type)\n\t\t\t}\n\n\t\t\tkv, err := internal.KernelVersion()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"getting kernel version: %w\", err)\n\t\t\t}\n\t\t\tinternal.NativeEndian.PutUint32(data[vsi.Offset:], kv.Kernel())\n\n\t\tcase \"LINUX_HAS_SYSCALL_WRAPPER\":\n\t\t\tif integer, ok := v.Type.(*btf.Int); !ok || integer.Size != 4 {\n\t\t\t\treturn fmt.Errorf(\"variable %s must be a 32 bits integer, got %s\", n, v.Type)\n\t\t\t}\n\t\t\tvar value uint32 = 1\n\t\t\tif err := haveSyscallWrapper(); errors.Is(err, ErrNotSupported) {\n\t\t\t\tvalue = 0\n\t\t\t} else if err != nil {\n\t\t\t\treturn fmt.Errorf(\"unable to derive a value for LINUX_HAS_SYSCALL_WRAPPER: %w\", err)\n\t\t\t}\n\n\t\t\tinternal.NativeEndian.PutUint32(data[vsi.Offset:], value)\n\n\t\tdefault: // Catch CONFIG_*.\n\t\t\tconfigs[n] = configInfo{\n\t\t\t\toffset: vsi.Offset,\n\t\t\t\ttyp:    v.Type,\n\t\t\t}\n\t\t}\n\t}\n\n\t// We only parse kconfig file if a CONFIG_* variable was found.\n\tif len(configs) > 0 {\n\t\tf, err := kconfig.Find()\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cannot find a kconfig file: %w\", err)\n\t\t}\n\t\tdefer f.Close()\n\n\t\tfilter := make(map[string]struct{}, len(configs))\n\t\tfor config := range configs {\n\t\t\tfilter[config] = struct{}{}\n\t\t}\n\n\t\tkernelConfig, err := kconfig.Parse(f, filter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cannot parse kconfig file: %w\", err)\n\t\t}\n\n\t\tfor n, info := range configs {\n\t\t\tvalue, ok := kernelConfig[n]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"config option %q does not exists for this kernel\", n)\n\t\t\t}\n\n\t\t\terr := kconfig.PutValue(data[info.offset:], info.typ, value)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"problem adding value for %s: %w\", n, err)\n\t\t\t}\n\t\t}\n\t}\n\n\tm.Contents = []MapKV{{uint32(0), data}}\n\n\treturn nil\n}\n\n// LoadCollection reads an object file and creates and loads its declared\n// resources into the kernel.\n//\n// Omitting Collection.Close() during application shutdown is an error.\n// See the package documentation for details around Map and Program lifecycle.\nfunc LoadCollection(file string) (*Collection, error) {\n\tspec, err := LoadCollectionSpec(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewCollection(spec)\n}\n\n// Close frees all maps and programs associated with the collection.\n//\n// The collection mustn't be used afterwards.\nfunc (coll *Collection) Close() {\n\tfor _, prog := range coll.Programs {\n\t\tprog.Close()\n\t}\n\tfor _, m := range coll.Maps {\n\t\tm.Close()\n\t}\n}\n\n// DetachMap removes the named map from the Collection.\n//\n// This means that a later call to Close() will not affect this map.\n//\n// Returns nil if no map of that name exists.\nfunc (coll *Collection) DetachMap(name string) *Map {\n\tm := coll.Maps[name]\n\tdelete(coll.Maps, name)\n\treturn m\n}\n\n// DetachProgram removes the named program from the Collection.\n//\n// This means that a later call to Close() will not affect this program.\n//\n// Returns nil if no program of that name exists.\nfunc (coll *Collection) DetachProgram(name string) *Program {\n\tp := coll.Programs[name]\n\tdelete(coll.Programs, name)\n\treturn p\n}\n\n// structField represents a struct field containing the ebpf struct tag.\ntype structField struct {\n\treflect.StructField\n\tvalue reflect.Value\n}\n\n// ebpfFields extracts field names tagged with 'ebpf' from a struct type.\n// Keep track of visited types to avoid infinite recursion.\nfunc ebpfFields(structVal reflect.Value, visited map[reflect.Type]bool) ([]structField, error) {\n\tif visited == nil {\n\t\tvisited = make(map[reflect.Type]bool)\n\t}\n\n\tstructType := structVal.Type()\n\tif structType.Kind() != reflect.Struct {\n\t\treturn nil, fmt.Errorf(\"%s is not a struct\", structType)\n\t}\n\n\tif visited[structType] {\n\t\treturn nil, fmt.Errorf(\"recursion on type %s\", structType)\n\t}\n\n\tfields := make([]structField, 0, structType.NumField())\n\tfor i := 0; i < structType.NumField(); i++ {\n\t\tfield := structField{structType.Field(i), structVal.Field(i)}\n\n\t\t// If the field is tagged, gather it and move on.\n\t\tname := field.Tag.Get(\"ebpf\")\n\t\tif name != \"\" {\n\t\t\tfields = append(fields, field)\n\t\t\tcontinue\n\t\t}\n\n\t\t// If the field does not have an ebpf tag, but is a struct or a pointer\n\t\t// to a struct, attempt to gather its fields as well.\n\t\tvar v reflect.Value\n\t\tswitch field.Type.Kind() {\n\t\tcase reflect.Ptr:\n\t\t\tif field.Type.Elem().Kind() != reflect.Struct {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif field.value.IsNil() {\n\t\t\t\treturn nil, fmt.Errorf(\"nil pointer to %s\", structType)\n\t\t\t}\n\n\t\t\t// Obtain the destination type of the pointer.\n\t\t\tv = field.value.Elem()\n\n\t\tcase reflect.Struct:\n\t\t\t// Reference the value's type directly.\n\t\t\tv = field.value\n\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\n\t\tinner, err := ebpfFields(v, visited)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"field %s: %w\", field.Name, err)\n\t\t}\n\n\t\tfields = append(fields, inner...)\n\t}\n\n\treturn fields, nil\n}\n\n// assignValues attempts to populate all fields of 'to' tagged with 'ebpf'.\n//\n// getValue is called for every tagged field of 'to' and must return the value\n// to be assigned to the field with the given typ and name.\nfunc assignValues(to interface{},\n\tgetValue func(typ reflect.Type, name string) (interface{}, error)) error {\n\n\ttoValue := reflect.ValueOf(to)\n\tif toValue.Type().Kind() != reflect.Ptr {\n\t\treturn fmt.Errorf(\"%T is not a pointer to struct\", to)\n\t}\n\n\tif toValue.IsNil() {\n\t\treturn fmt.Errorf(\"nil pointer to %T\", to)\n\t}\n\n\tfields, err := ebpfFields(toValue.Elem(), nil)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\ttype elem struct {\n\t\t// Either *Map or *Program\n\t\ttyp  reflect.Type\n\t\tname string\n\t}\n\n\tassigned := make(map[elem]string)\n\tfor _, field := range fields {\n\t\t// Get string value the field is tagged with.\n\t\ttag := field.Tag.Get(\"ebpf\")\n\t\tif strings.Contains(tag, \",\") {\n\t\t\treturn fmt.Errorf(\"field %s: ebpf tag contains a comma\", field.Name)\n\t\t}\n\n\t\t// Check if the eBPF object with the requested\n\t\t// type and tag was already assigned elsewhere.\n\t\te := elem{field.Type, tag}\n\t\tif af := assigned[e]; af != \"\" {\n\t\t\treturn fmt.Errorf(\"field %s: object %q was already assigned to %s\", field.Name, tag, af)\n\t\t}\n\n\t\t// Get the eBPF object referred to by the tag.\n\t\tvalue, err := getValue(field.Type, tag)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"field %s: %w\", field.Name, err)\n\t\t}\n\n\t\tif !field.value.CanSet() {\n\t\t\treturn fmt.Errorf(\"field %s: can't set value\", field.Name)\n\t\t}\n\t\tfield.value.Set(reflect.ValueOf(value))\n\n\t\tassigned[e] = field.Name\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/doc.go",
    "content": "// Package ebpf is a toolkit for working with eBPF programs.\n//\n// eBPF programs are small snippets of code which are executed directly\n// in a VM in the Linux kernel, which makes them very fast and flexible.\n// Many Linux subsystems now accept eBPF programs. This makes it possible\n// to implement highly application specific logic inside the kernel,\n// without having to modify the actual kernel itself.\n//\n// This package is designed for long-running processes which\n// want to use eBPF to implement part of their application logic. It has no\n// run-time dependencies outside of the library and the Linux kernel itself.\n// eBPF code should be compiled ahead of time using clang, and shipped with\n// your application as any other resource.\n//\n// Use the link subpackage to attach a loaded program to a hook in the kernel.\n//\n// Note that losing all references to Map and Program resources will cause\n// their underlying file descriptors to be closed, potentially removing those\n// objects from the kernel. Always retain a reference by e.g. deferring a\n// Close() of a Collection or LoadAndAssign object until application exit.\n//\n// Special care needs to be taken when handling maps of type ProgramArray,\n// as the kernel erases its contents when the last userspace or bpffs\n// reference disappears, regardless of the map being in active use.\npackage ebpf\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/elf_reader.go",
    "content": "package ebpf\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\ntype kconfigMetaKey struct{}\n\ntype kconfigMeta struct {\n\tMap    *MapSpec\n\tOffset uint32\n}\n\ntype kfuncMeta struct{}\n\n// elfCode is a convenience to reduce the amount of arguments that have to\n// be passed around explicitly. You should treat its contents as immutable.\ntype elfCode struct {\n\t*internal.SafeELFFile\n\tsections map[elf.SectionIndex]*elfSection\n\tlicense  string\n\tversion  uint32\n\tbtf      *btf.Spec\n\textInfo  *btf.ExtInfos\n\tmaps     map[string]*MapSpec\n\tkfuncs   map[string]*btf.Func\n\tkconfig  *MapSpec\n}\n\n// LoadCollectionSpec parses an ELF file into a CollectionSpec.\nfunc LoadCollectionSpec(file string) (*CollectionSpec, error) {\n\tf, err := os.Open(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tspec, err := LoadCollectionSpecFromReader(f)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"file %s: %w\", file, err)\n\t}\n\treturn spec, nil\n}\n\n// LoadCollectionSpecFromReader parses an ELF file into a CollectionSpec.\nfunc LoadCollectionSpecFromReader(rd io.ReaderAt) (*CollectionSpec, error) {\n\tf, err := internal.NewSafeELFFile(rd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Checks if the ELF file is for BPF data.\n\t// Old LLVM versions set e_machine to EM_NONE.\n\tif f.File.Machine != unix.EM_NONE && f.File.Machine != elf.EM_BPF {\n\t\treturn nil, fmt.Errorf(\"unexpected machine type for BPF ELF: %s\", f.File.Machine)\n\t}\n\n\tvar (\n\t\tlicenseSection *elf.Section\n\t\tversionSection *elf.Section\n\t\tsections       = make(map[elf.SectionIndex]*elfSection)\n\t\trelSections    = make(map[elf.SectionIndex]*elf.Section)\n\t)\n\n\t// This is the target of relocations generated by inline assembly.\n\tsections[elf.SHN_UNDEF] = newElfSection(new(elf.Section), undefSection)\n\n\t// Collect all the sections we're interested in. This includes relocations\n\t// which we parse later.\n\tfor i, sec := range f.Sections {\n\t\tidx := elf.SectionIndex(i)\n\n\t\tswitch {\n\t\tcase strings.HasPrefix(sec.Name, \"license\"):\n\t\t\tlicenseSection = sec\n\t\tcase strings.HasPrefix(sec.Name, \"version\"):\n\t\t\tversionSection = sec\n\t\tcase strings.HasPrefix(sec.Name, \"maps\"):\n\t\t\tsections[idx] = newElfSection(sec, mapSection)\n\t\tcase sec.Name == \".maps\":\n\t\t\tsections[idx] = newElfSection(sec, btfMapSection)\n\t\tcase sec.Name == \".bss\" || sec.Name == \".data\" || strings.HasPrefix(sec.Name, \".rodata\"):\n\t\t\tsections[idx] = newElfSection(sec, dataSection)\n\t\tcase sec.Type == elf.SHT_REL:\n\t\t\t// Store relocations under the section index of the target\n\t\t\trelSections[elf.SectionIndex(sec.Info)] = sec\n\t\tcase sec.Type == elf.SHT_PROGBITS && (sec.Flags&elf.SHF_EXECINSTR) != 0 && sec.Size > 0:\n\t\t\tsections[idx] = newElfSection(sec, programSection)\n\t\t}\n\t}\n\n\tlicense, err := loadLicense(licenseSection)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load license: %w\", err)\n\t}\n\n\tversion, err := loadVersion(versionSection, f.ByteOrder)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load version: %w\", err)\n\t}\n\n\tbtfSpec, btfExtInfo, err := btf.LoadSpecAndExtInfosFromReader(rd)\n\tif err != nil && !errors.Is(err, btf.ErrNotFound) {\n\t\treturn nil, fmt.Errorf(\"load BTF: %w\", err)\n\t}\n\n\tec := &elfCode{\n\t\tSafeELFFile: f,\n\t\tsections:    sections,\n\t\tlicense:     license,\n\t\tversion:     version,\n\t\tbtf:         btfSpec,\n\t\textInfo:     btfExtInfo,\n\t\tmaps:        make(map[string]*MapSpec),\n\t\tkfuncs:      make(map[string]*btf.Func),\n\t}\n\n\tsymbols, err := f.Symbols()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load symbols: %v\", err)\n\t}\n\n\tec.assignSymbols(symbols)\n\n\tif err := ec.loadRelocations(relSections, symbols); err != nil {\n\t\treturn nil, fmt.Errorf(\"load relocations: %w\", err)\n\t}\n\n\tif err := ec.loadMaps(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load maps: %w\", err)\n\t}\n\n\tif err := ec.loadBTFMaps(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load BTF maps: %w\", err)\n\t}\n\n\tif err := ec.loadDataSections(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load data sections: %w\", err)\n\t}\n\n\tif err := ec.loadKconfigSection(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load virtual .kconfig section: %w\", err)\n\t}\n\n\tif err := ec.loadKsymsSection(); err != nil {\n\t\treturn nil, fmt.Errorf(\"load virtual .ksyms section: %w\", err)\n\t}\n\n\t// Finally, collect programs and link them.\n\tprogs, err := ec.loadProgramSections()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load programs: %w\", err)\n\t}\n\n\treturn &CollectionSpec{ec.maps, progs, btfSpec, ec.ByteOrder}, nil\n}\n\nfunc loadLicense(sec *elf.Section) (string, error) {\n\tif sec == nil {\n\t\treturn \"\", nil\n\t}\n\n\tdata, err := sec.Data()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"section %s: %v\", sec.Name, err)\n\t}\n\treturn string(bytes.TrimRight(data, \"\\000\")), nil\n}\n\nfunc loadVersion(sec *elf.Section, bo binary.ByteOrder) (uint32, error) {\n\tif sec == nil {\n\t\treturn 0, nil\n\t}\n\n\tvar version uint32\n\tif err := binary.Read(sec.Open(), bo, &version); err != nil {\n\t\treturn 0, fmt.Errorf(\"section %s: %v\", sec.Name, err)\n\t}\n\treturn version, nil\n}\n\ntype elfSectionKind int\n\nconst (\n\tundefSection elfSectionKind = iota\n\tmapSection\n\tbtfMapSection\n\tprogramSection\n\tdataSection\n)\n\ntype elfSection struct {\n\t*elf.Section\n\tkind elfSectionKind\n\t// Offset from the start of the section to a symbol\n\tsymbols map[uint64]elf.Symbol\n\t// Offset from the start of the section to a relocation, which points at\n\t// a symbol in another section.\n\trelocations map[uint64]elf.Symbol\n\t// The number of relocations pointing at this section.\n\treferences int\n}\n\nfunc newElfSection(section *elf.Section, kind elfSectionKind) *elfSection {\n\treturn &elfSection{\n\t\tsection,\n\t\tkind,\n\t\tmake(map[uint64]elf.Symbol),\n\t\tmake(map[uint64]elf.Symbol),\n\t\t0,\n\t}\n}\n\n// assignSymbols takes a list of symbols and assigns them to their\n// respective sections, indexed by name.\nfunc (ec *elfCode) assignSymbols(symbols []elf.Symbol) {\n\tfor _, symbol := range symbols {\n\t\tsymType := elf.ST_TYPE(symbol.Info)\n\t\tsymSection := ec.sections[symbol.Section]\n\t\tif symSection == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Anonymous symbols only occur in debug sections which we don't process\n\t\t// relocations for. Anonymous symbols are not referenced from other sections.\n\t\tif symbol.Name == \"\" {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Older versions of LLVM don't tag symbols correctly, so keep\n\t\t// all NOTYPE ones.\n\t\tswitch symSection.kind {\n\t\tcase mapSection, btfMapSection, dataSection:\n\t\t\tif symType != elf.STT_NOTYPE && symType != elf.STT_OBJECT {\n\t\t\t\tcontinue\n\t\t\t}\n\t\tcase programSection:\n\t\t\tif symType != elf.STT_NOTYPE && symType != elf.STT_FUNC {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// LLVM emits LBB_ (Local Basic Block) symbols that seem to be jump\n\t\t\t// targets within sections, but BPF has no use for them.\n\t\t\tif symType == elf.STT_NOTYPE && elf.ST_BIND(symbol.Info) == elf.STB_LOCAL &&\n\t\t\t\tstrings.HasPrefix(symbol.Name, \"LBB\") {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t// Only collect symbols that occur in program/maps/data sections.\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\n\t\tsymSection.symbols[symbol.Value] = symbol\n\t}\n}\n\n// loadRelocations iterates .rel* sections and extracts relocation entries for\n// sections of interest. Makes sure relocations point at valid sections.\nfunc (ec *elfCode) loadRelocations(relSections map[elf.SectionIndex]*elf.Section, symbols []elf.Symbol) error {\n\tfor idx, relSection := range relSections {\n\t\tsection := ec.sections[idx]\n\t\tif section == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\trels, err := ec.loadSectionRelocations(relSection, symbols)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"relocation for section %q: %w\", section.Name, err)\n\t\t}\n\n\t\tfor _, rel := range rels {\n\t\t\ttarget := ec.sections[rel.Section]\n\t\t\tif target == nil {\n\t\t\t\treturn fmt.Errorf(\"section %q: reference to %q in section %s: %w\", section.Name, rel.Name, rel.Section, ErrNotSupported)\n\t\t\t}\n\n\t\t\ttarget.references++\n\t\t}\n\n\t\tsection.relocations = rels\n\t}\n\n\treturn nil\n}\n\n// loadProgramSections iterates ec's sections and emits a ProgramSpec\n// for each function it finds.\n//\n// The resulting map is indexed by function name.\nfunc (ec *elfCode) loadProgramSections() (map[string]*ProgramSpec, error) {\n\n\tprogs := make(map[string]*ProgramSpec)\n\n\t// Generate a ProgramSpec for each function found in each program section.\n\tvar export []string\n\tfor _, sec := range ec.sections {\n\t\tif sec.kind != programSection {\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(sec.symbols) == 0 {\n\t\t\treturn nil, fmt.Errorf(\"section %v: missing symbols\", sec.Name)\n\t\t}\n\n\t\tfuncs, err := ec.loadFunctions(sec)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"section %v: %w\", sec.Name, err)\n\t\t}\n\n\t\tprogType, attachType, progFlags, attachTo := getProgType(sec.Name)\n\n\t\tfor name, insns := range funcs {\n\t\t\tspec := &ProgramSpec{\n\t\t\t\tName:          name,\n\t\t\t\tType:          progType,\n\t\t\t\tFlags:         progFlags,\n\t\t\t\tAttachType:    attachType,\n\t\t\t\tAttachTo:      attachTo,\n\t\t\t\tSectionName:   sec.Name,\n\t\t\t\tLicense:       ec.license,\n\t\t\t\tKernelVersion: ec.version,\n\t\t\t\tInstructions:  insns,\n\t\t\t\tByteOrder:     ec.ByteOrder,\n\t\t\t}\n\n\t\t\t// Function names must be unique within a single ELF blob.\n\t\t\tif progs[name] != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"duplicate program name %s\", name)\n\t\t\t}\n\t\t\tprogs[name] = spec\n\n\t\t\tif spec.SectionName != \".text\" {\n\t\t\t\texport = append(export, name)\n\t\t\t}\n\t\t}\n\t}\n\n\tflattenPrograms(progs, export)\n\n\t// Hide programs (e.g. library functions) that were not explicitly emitted\n\t// to an ELF section. These could be exposed in a separate CollectionSpec\n\t// field later to allow them to be modified.\n\tfor n, p := range progs {\n\t\tif p.SectionName == \".text\" {\n\t\t\tdelete(progs, n)\n\t\t}\n\t}\n\n\treturn progs, nil\n}\n\n// loadFunctions extracts instruction streams from the given program section\n// starting at each symbol in the section. The section's symbols must already\n// be narrowed down to STT_NOTYPE (emitted by clang <8) or STT_FUNC.\n//\n// The resulting map is indexed by function name.\nfunc (ec *elfCode) loadFunctions(section *elfSection) (map[string]asm.Instructions, error) {\n\tr := bufio.NewReader(section.Open())\n\n\t// Decode the section's instruction stream.\n\tvar insns asm.Instructions\n\tif err := insns.Unmarshal(r, ec.ByteOrder); err != nil {\n\t\treturn nil, fmt.Errorf(\"decoding instructions for section %s: %w\", section.Name, err)\n\t}\n\tif len(insns) == 0 {\n\t\treturn nil, fmt.Errorf(\"no instructions found in section %s\", section.Name)\n\t}\n\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\t\toffset := iter.Offset.Bytes()\n\n\t\t// Tag Symbol Instructions.\n\t\tif sym, ok := section.symbols[offset]; ok {\n\t\t\t*ins = ins.WithSymbol(sym.Name)\n\t\t}\n\n\t\t// Apply any relocations for the current instruction.\n\t\t// If no relocation is present, resolve any section-relative function calls.\n\t\tif rel, ok := section.relocations[offset]; ok {\n\t\t\tif err := ec.relocateInstruction(ins, rel); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"offset %d: relocating instruction: %w\", offset, err)\n\t\t\t}\n\t\t} else {\n\t\t\tif err := referenceRelativeJump(ins, offset, section.symbols); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"offset %d: resolving relative jump: %w\", offset, err)\n\t\t\t}\n\t\t}\n\t}\n\n\tif ec.extInfo != nil {\n\t\tec.extInfo.Assign(insns, section.Name)\n\t}\n\n\treturn splitSymbols(insns)\n}\n\n// referenceRelativeJump turns a relative jump to another bpf subprogram within\n// the same ELF section into a Reference Instruction.\n//\n// Up to LLVM 9, calls to subprograms within the same ELF section are sometimes\n// encoded using relative jumps instead of relocation entries. These jumps go\n// out of bounds of the current program, so their targets must be memoized\n// before the section's instruction stream is split.\n//\n// The relative jump Constant is blinded to -1 and the target Symbol is set as\n// the Instruction's Reference so it can be resolved by the linker.\nfunc referenceRelativeJump(ins *asm.Instruction, offset uint64, symbols map[uint64]elf.Symbol) error {\n\tif !ins.IsFunctionReference() || ins.Constant == -1 {\n\t\treturn nil\n\t}\n\n\ttgt := jumpTarget(offset, *ins)\n\tsym := symbols[tgt].Name\n\tif sym == \"\" {\n\t\treturn fmt.Errorf(\"no jump target found at offset %d\", tgt)\n\t}\n\n\t*ins = ins.WithReference(sym)\n\tins.Constant = -1\n\n\treturn nil\n}\n\n// jumpTarget takes ins' offset within an instruction stream (in bytes)\n// and returns its absolute jump destination (in bytes) within the\n// instruction stream.\nfunc jumpTarget(offset uint64, ins asm.Instruction) uint64 {\n\t// A relative jump instruction describes the amount of raw BPF instructions\n\t// to jump, convert the offset into bytes.\n\tdest := ins.Constant * asm.InstructionSize\n\n\t// The starting point of the jump is the end of the current instruction.\n\tdest += int64(offset + asm.InstructionSize)\n\n\tif dest < 0 {\n\t\treturn 0\n\t}\n\n\treturn uint64(dest)\n}\n\nfunc (ec *elfCode) relocateInstruction(ins *asm.Instruction, rel elf.Symbol) error {\n\tvar (\n\t\ttyp  = elf.ST_TYPE(rel.Info)\n\t\tbind = elf.ST_BIND(rel.Info)\n\t\tname = rel.Name\n\t)\n\n\ttarget := ec.sections[rel.Section]\n\n\tswitch target.kind {\n\tcase mapSection, btfMapSection:\n\t\tif bind != elf.STB_GLOBAL {\n\t\t\treturn fmt.Errorf(\"possible erroneous static qualifier on map definition: found reference to %q\", name)\n\t\t}\n\n\t\tif typ != elf.STT_OBJECT && typ != elf.STT_NOTYPE {\n\t\t\t// STT_NOTYPE is generated on clang < 8 which doesn't tag\n\t\t\t// relocations appropriately.\n\t\t\treturn fmt.Errorf(\"map load: incorrect relocation type %v\", typ)\n\t\t}\n\n\t\tins.Src = asm.PseudoMapFD\n\n\tcase dataSection:\n\t\tvar offset uint32\n\t\tswitch typ {\n\t\tcase elf.STT_SECTION:\n\t\t\tif bind != elf.STB_LOCAL {\n\t\t\t\treturn fmt.Errorf(\"direct load: %s: unsupported section relocation %s\", name, bind)\n\t\t\t}\n\n\t\t\t// This is really a reference to a static symbol, which clang doesn't\n\t\t\t// emit a symbol table entry for. Instead it encodes the offset in\n\t\t\t// the instruction itself.\n\t\t\toffset = uint32(uint64(ins.Constant))\n\n\t\tcase elf.STT_OBJECT:\n\t\t\t// LLVM 9 emits OBJECT-LOCAL symbols for anonymous constants.\n\t\t\tif bind != elf.STB_GLOBAL && bind != elf.STB_LOCAL {\n\t\t\t\treturn fmt.Errorf(\"direct load: %s: unsupported object relocation %s\", name, bind)\n\t\t\t}\n\n\t\t\toffset = uint32(rel.Value)\n\n\t\tcase elf.STT_NOTYPE:\n\t\t\t// LLVM 7 emits NOTYPE-LOCAL symbols for anonymous constants.\n\t\t\tif bind != elf.STB_LOCAL {\n\t\t\t\treturn fmt.Errorf(\"direct load: %s: unsupported untyped relocation %s\", name, bind)\n\t\t\t}\n\n\t\t\toffset = uint32(rel.Value)\n\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"incorrect relocation type %v for direct map load\", typ)\n\t\t}\n\n\t\t// We rely on using the name of the data section as the reference. It\n\t\t// would be nicer to keep the real name in case of an STT_OBJECT, but\n\t\t// it's not clear how to encode that into Instruction.\n\t\tname = target.Name\n\n\t\t// The kernel expects the offset in the second basic BPF instruction.\n\t\tins.Constant = int64(uint64(offset) << 32)\n\t\tins.Src = asm.PseudoMapValue\n\n\tcase programSection:\n\t\tswitch opCode := ins.OpCode; {\n\t\tcase opCode.JumpOp() == asm.Call:\n\t\t\tif ins.Src != asm.PseudoCall {\n\t\t\t\treturn fmt.Errorf(\"call: %s: incorrect source register\", name)\n\t\t\t}\n\n\t\t\tswitch typ {\n\t\t\tcase elf.STT_NOTYPE, elf.STT_FUNC:\n\t\t\t\tif bind != elf.STB_GLOBAL {\n\t\t\t\t\treturn fmt.Errorf(\"call: %s: unsupported binding: %s\", name, bind)\n\t\t\t\t}\n\n\t\t\tcase elf.STT_SECTION:\n\t\t\t\tif bind != elf.STB_LOCAL {\n\t\t\t\t\treturn fmt.Errorf(\"call: %s: unsupported binding: %s\", name, bind)\n\t\t\t\t}\n\n\t\t\t\t// The function we want to call is in the indicated section,\n\t\t\t\t// at the offset encoded in the instruction itself. Reverse\n\t\t\t\t// the calculation to find the real function we're looking for.\n\t\t\t\t// A value of -1 references the first instruction in the section.\n\t\t\t\toffset := int64(int32(ins.Constant)+1) * asm.InstructionSize\n\t\t\t\tsym, ok := target.symbols[uint64(offset)]\n\t\t\t\tif !ok {\n\t\t\t\t\treturn fmt.Errorf(\"call: no symbol at offset %d\", offset)\n\t\t\t\t}\n\n\t\t\t\tname = sym.Name\n\t\t\t\tins.Constant = -1\n\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"call: %s: invalid symbol type %s\", name, typ)\n\t\t\t}\n\t\tcase opCode.IsDWordLoad():\n\t\t\tswitch typ {\n\t\t\tcase elf.STT_FUNC:\n\t\t\t\tif bind != elf.STB_GLOBAL {\n\t\t\t\t\treturn fmt.Errorf(\"load: %s: unsupported binding: %s\", name, bind)\n\t\t\t\t}\n\n\t\t\tcase elf.STT_SECTION:\n\t\t\t\tif bind != elf.STB_LOCAL {\n\t\t\t\t\treturn fmt.Errorf(\"load: %s: unsupported binding: %s\", name, bind)\n\t\t\t\t}\n\n\t\t\t\t// ins.Constant already contains the offset in bytes from the\n\t\t\t\t// start of the section. This is different than a call to a\n\t\t\t\t// static function.\n\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"load: %s: invalid symbol type %s\", name, typ)\n\t\t\t}\n\n\t\t\tsym, ok := target.symbols[uint64(ins.Constant)]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"load: no symbol at offset %d\", ins.Constant)\n\t\t\t}\n\n\t\t\tname = sym.Name\n\t\t\tins.Constant = -1\n\t\t\tins.Src = asm.PseudoFunc\n\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"neither a call nor a load instruction: %v\", ins)\n\t\t}\n\n\t// The Undefined section is used for 'virtual' symbols that aren't backed by\n\t// an ELF section. This includes symbol references from inline asm, forward\n\t// function declarations, as well as extern kfunc declarations using __ksym\n\t// and extern kconfig variables declared using __kconfig.\n\tcase undefSection:\n\t\tif bind != elf.STB_GLOBAL {\n\t\t\treturn fmt.Errorf(\"asm relocation: %s: unsupported binding: %s\", name, bind)\n\t\t}\n\n\t\tif typ != elf.STT_NOTYPE {\n\t\t\treturn fmt.Errorf(\"asm relocation: %s: unsupported type %s\", name, typ)\n\t\t}\n\n\t\tkf := ec.kfuncs[name]\n\t\tswitch {\n\t\t// If a Call instruction is found and the datasec has a btf.Func with a Name\n\t\t// that matches the symbol name we mark the instruction as a call to a kfunc.\n\t\tcase kf != nil && ins.OpCode.JumpOp() == asm.Call:\n\t\t\tins.Metadata.Set(kfuncMeta{}, kf)\n\t\t\tins.Src = asm.PseudoKfuncCall\n\t\t\tins.Constant = -1\n\n\t\t// If no kconfig map is found, this must be a symbol reference from inline\n\t\t// asm (see testdata/loader.c:asm_relocation()) or a call to a forward\n\t\t// function declaration (see testdata/fwd_decl.c). Don't interfere, These\n\t\t// remain standard symbol references.\n\t\t// extern __kconfig reads are represented as dword loads that need to be\n\t\t// rewritten to pseudo map loads from .kconfig. If the map is present,\n\t\t// require it to contain the symbol to disambiguate between inline asm\n\t\t// relos and kconfigs.\n\t\tcase ec.kconfig != nil && ins.OpCode.IsDWordLoad():\n\t\t\tfor _, vsi := range ec.kconfig.Value.(*btf.Datasec).Vars {\n\t\t\t\tif vsi.Type.(*btf.Var).Name != rel.Name {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tins.Src = asm.PseudoMapValue\n\t\t\t\tins.Metadata.Set(kconfigMetaKey{}, &kconfigMeta{ec.kconfig, vsi.Offset})\n\t\t\t\treturn nil\n\t\t\t}\n\n\t\t\treturn fmt.Errorf(\"kconfig %s not found in .kconfig\", rel.Name)\n\t\t}\n\n\tdefault:\n\t\treturn fmt.Errorf(\"relocation to %q: %w\", target.Name, ErrNotSupported)\n\t}\n\n\t*ins = ins.WithReference(name)\n\treturn nil\n}\n\nfunc (ec *elfCode) loadMaps() error {\n\tfor _, sec := range ec.sections {\n\t\tif sec.kind != mapSection {\n\t\t\tcontinue\n\t\t}\n\n\t\tnSym := len(sec.symbols)\n\t\tif nSym == 0 {\n\t\t\treturn fmt.Errorf(\"section %v: no symbols\", sec.Name)\n\t\t}\n\n\t\tif sec.Size%uint64(nSym) != 0 {\n\t\t\treturn fmt.Errorf(\"section %v: map descriptors are not of equal size\", sec.Name)\n\t\t}\n\n\t\tvar (\n\t\t\tr    = bufio.NewReader(sec.Open())\n\t\t\tsize = sec.Size / uint64(nSym)\n\t\t)\n\t\tfor i, offset := 0, uint64(0); i < nSym; i, offset = i+1, offset+size {\n\t\t\tmapSym, ok := sec.symbols[offset]\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"section %s: missing symbol for map at offset %d\", sec.Name, offset)\n\t\t\t}\n\n\t\t\tmapName := mapSym.Name\n\t\t\tif ec.maps[mapName] != nil {\n\t\t\t\treturn fmt.Errorf(\"section %v: map %v already exists\", sec.Name, mapSym)\n\t\t\t}\n\n\t\t\tlr := io.LimitReader(r, int64(size))\n\n\t\t\tspec := MapSpec{\n\t\t\t\tName: SanitizeName(mapName, -1),\n\t\t\t}\n\t\t\tswitch {\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.Type) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing type\", mapName)\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.KeySize) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing key size\", mapName)\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.ValueSize) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing value size\", mapName)\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.MaxEntries) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing max entries\", mapName)\n\t\t\tcase binary.Read(lr, ec.ByteOrder, &spec.Flags) != nil:\n\t\t\t\treturn fmt.Errorf(\"map %s: missing flags\", mapName)\n\t\t\t}\n\n\t\t\textra, err := io.ReadAll(lr)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"map %s: reading map tail: %w\", mapName, err)\n\t\t\t}\n\t\t\tif len(extra) > 0 {\n\t\t\t\tspec.Extra = bytes.NewReader(extra)\n\t\t\t}\n\n\t\t\tif err := spec.clampPerfEventArraySize(); err != nil {\n\t\t\t\treturn fmt.Errorf(\"map %s: %w\", mapName, err)\n\t\t\t}\n\n\t\t\tec.maps[mapName] = &spec\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// loadBTFMaps iterates over all ELF sections marked as BTF map sections\n// (like .maps) and parses them into MapSpecs. Dump the .maps section and\n// any relocations with `readelf -x .maps -r <elf_file>`.\nfunc (ec *elfCode) loadBTFMaps() error {\n\tfor _, sec := range ec.sections {\n\t\tif sec.kind != btfMapSection {\n\t\t\tcontinue\n\t\t}\n\n\t\tif ec.btf == nil {\n\t\t\treturn fmt.Errorf(\"missing BTF\")\n\t\t}\n\n\t\t// Each section must appear as a DataSec in the ELF's BTF blob.\n\t\tvar ds *btf.Datasec\n\t\tif err := ec.btf.TypeByName(sec.Name, &ds); err != nil {\n\t\t\treturn fmt.Errorf(\"cannot find section '%s' in BTF: %w\", sec.Name, err)\n\t\t}\n\n\t\t// Open a Reader to the ELF's raw section bytes so we can assert that all\n\t\t// of them are zero on a per-map (per-Var) basis. For now, the section's\n\t\t// sole purpose is to receive relocations, so all must be zero.\n\t\trs := sec.Open()\n\n\t\tfor _, vs := range ds.Vars {\n\t\t\t// BPF maps are declared as and assigned to global variables,\n\t\t\t// so iterate over each Var in the DataSec and validate their types.\n\t\t\tv, ok := vs.Type.(*btf.Var)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"section %v: unexpected type %s\", sec.Name, vs.Type)\n\t\t\t}\n\t\t\tname := string(v.Name)\n\n\t\t\t// The BTF metadata for each Var contains the full length of the map\n\t\t\t// declaration, so read the corresponding amount of bytes from the ELF.\n\t\t\t// This way, we can pinpoint which map declaration contains unexpected\n\t\t\t// (and therefore unsupported) data.\n\t\t\t_, err := io.Copy(internal.DiscardZeroes{}, io.LimitReader(rs, int64(vs.Size)))\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"section %v: map %s: initializing BTF map definitions: %w\", sec.Name, name, internal.ErrNotSupported)\n\t\t\t}\n\n\t\t\tif ec.maps[name] != nil {\n\t\t\t\treturn fmt.Errorf(\"section %v: map %s already exists\", sec.Name, name)\n\t\t\t}\n\n\t\t\t// Each Var representing a BTF map definition contains a Struct.\n\t\t\tmapStruct, ok := v.Type.(*btf.Struct)\n\t\t\tif !ok {\n\t\t\t\treturn fmt.Errorf(\"expected struct, got %s\", v.Type)\n\t\t\t}\n\n\t\t\tmapSpec, err := mapSpecFromBTF(sec, &vs, mapStruct, ec.btf, name, false)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"map %v: %w\", name, err)\n\t\t\t}\n\n\t\t\tif err := mapSpec.clampPerfEventArraySize(); err != nil {\n\t\t\t\treturn fmt.Errorf(\"map %v: %w\", name, err)\n\t\t\t}\n\n\t\t\tec.maps[name] = mapSpec\n\t\t}\n\n\t\t// Drain the ELF section reader to make sure all bytes are accounted for\n\t\t// with BTF metadata.\n\t\ti, err := io.Copy(io.Discard, rs)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"section %v: unexpected error reading remainder of ELF section: %w\", sec.Name, err)\n\t\t}\n\t\tif i > 0 {\n\t\t\treturn fmt.Errorf(\"section %v: %d unexpected remaining bytes in ELF section, invalid BTF?\", sec.Name, i)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// mapSpecFromBTF produces a MapSpec based on a btf.Struct def representing\n// a BTF map definition. The name and spec arguments will be copied to the\n// resulting MapSpec, and inner must be true on any resursive invocations.\nfunc mapSpecFromBTF(es *elfSection, vs *btf.VarSecinfo, def *btf.Struct, spec *btf.Spec, name string, inner bool) (*MapSpec, error) {\n\tvar (\n\t\tkey, value         btf.Type\n\t\tkeySize, valueSize uint32\n\t\tmapType            MapType\n\t\tflags, maxEntries  uint32\n\t\tpinType            PinType\n\t\tinnerMapSpec       *MapSpec\n\t\tcontents           []MapKV\n\t\terr                error\n\t)\n\n\tfor i, member := range def.Members {\n\t\tswitch member.Name {\n\t\tcase \"type\":\n\t\t\tmt, err := uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get type: %w\", err)\n\t\t\t}\n\t\t\tmapType = MapType(mt)\n\n\t\tcase \"map_flags\":\n\t\t\tflags, err = uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get BTF map flags: %w\", err)\n\t\t\t}\n\n\t\tcase \"max_entries\":\n\t\t\tmaxEntries, err = uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get BTF map max entries: %w\", err)\n\t\t\t}\n\n\t\tcase \"key\":\n\t\t\tif keySize != 0 {\n\t\t\t\treturn nil, errors.New(\"both key and key_size given\")\n\t\t\t}\n\n\t\t\tpk, ok := member.Type.(*btf.Pointer)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"key type is not a pointer: %T\", member.Type)\n\t\t\t}\n\n\t\t\tkey = pk.Target\n\n\t\t\tsize, err := btf.Sizeof(pk.Target)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get size of BTF key: %w\", err)\n\t\t\t}\n\n\t\t\tkeySize = uint32(size)\n\n\t\tcase \"value\":\n\t\t\tif valueSize != 0 {\n\t\t\t\treturn nil, errors.New(\"both value and value_size given\")\n\t\t\t}\n\n\t\t\tvk, ok := member.Type.(*btf.Pointer)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"value type is not a pointer: %T\", member.Type)\n\t\t\t}\n\n\t\t\tvalue = vk.Target\n\n\t\t\tsize, err := btf.Sizeof(vk.Target)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get size of BTF value: %w\", err)\n\t\t\t}\n\n\t\t\tvalueSize = uint32(size)\n\n\t\tcase \"key_size\":\n\t\t\t// Key needs to be nil and keySize needs to be 0 for key_size to be\n\t\t\t// considered a valid member.\n\t\t\tif key != nil || keySize != 0 {\n\t\t\t\treturn nil, errors.New(\"both key and key_size given\")\n\t\t\t}\n\n\t\t\tkeySize, err = uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get BTF key size: %w\", err)\n\t\t\t}\n\n\t\tcase \"value_size\":\n\t\t\t// Value needs to be nil and valueSize needs to be 0 for value_size to be\n\t\t\t// considered a valid member.\n\t\t\tif value != nil || valueSize != 0 {\n\t\t\t\treturn nil, errors.New(\"both value and value_size given\")\n\t\t\t}\n\n\t\t\tvalueSize, err = uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get BTF value size: %w\", err)\n\t\t\t}\n\n\t\tcase \"pinning\":\n\t\t\tif inner {\n\t\t\t\treturn nil, errors.New(\"inner maps can't be pinned\")\n\t\t\t}\n\n\t\t\tpinning, err := uintFromBTF(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't get pinning: %w\", err)\n\t\t\t}\n\n\t\t\tpinType = PinType(pinning)\n\n\t\tcase \"values\":\n\t\t\t// The 'values' field in BTF map definitions is used for declaring map\n\t\t\t// value types that are references to other BPF objects, like other maps\n\t\t\t// or programs. It is always expected to be an array of pointers.\n\t\t\tif i != len(def.Members)-1 {\n\t\t\t\treturn nil, errors.New(\"'values' must be the last member in a BTF map definition\")\n\t\t\t}\n\n\t\t\tif valueSize != 0 && valueSize != 4 {\n\t\t\t\treturn nil, errors.New(\"value_size must be 0 or 4\")\n\t\t\t}\n\t\t\tvalueSize = 4\n\n\t\t\tvalueType, err := resolveBTFArrayMacro(member.Type)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"can't resolve type of member 'values': %w\", err)\n\t\t\t}\n\n\t\t\tswitch t := valueType.(type) {\n\t\t\tcase *btf.Struct:\n\t\t\t\t// The values member pointing to an array of structs means we're expecting\n\t\t\t\t// a map-in-map declaration.\n\t\t\t\tif mapType != ArrayOfMaps && mapType != HashOfMaps {\n\t\t\t\t\treturn nil, errors.New(\"outer map needs to be an array or a hash of maps\")\n\t\t\t\t}\n\t\t\t\tif inner {\n\t\t\t\t\treturn nil, fmt.Errorf(\"nested inner maps are not supported\")\n\t\t\t\t}\n\n\t\t\t\t// This inner map spec is used as a map template, but it needs to be\n\t\t\t\t// created as a traditional map before it can be used to do so.\n\t\t\t\t// libbpf names the inner map template '<outer_name>.inner', but we\n\t\t\t\t// opted for _inner to simplify validation logic. (dots only supported\n\t\t\t\t// on kernels 5.2 and up)\n\t\t\t\t// Pass the BTF spec from the parent object, since both parent and\n\t\t\t\t// child must be created from the same BTF blob (on kernels that support BTF).\n\t\t\t\tinnerMapSpec, err = mapSpecFromBTF(es, vs, t, spec, name+\"_inner\", true)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"can't parse BTF map definition of inner map: %w\", err)\n\t\t\t\t}\n\n\t\t\tcase *btf.FuncProto:\n\t\t\t\t// The values member contains an array of function pointers, meaning an\n\t\t\t\t// autopopulated PROG_ARRAY.\n\t\t\t\tif mapType != ProgramArray {\n\t\t\t\t\treturn nil, errors.New(\"map needs to be a program array\")\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"unsupported value type %q in 'values' field\", t)\n\t\t\t}\n\n\t\t\tcontents, err = resolveBTFValuesContents(es, vs, member)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"resolving values contents: %w\", err)\n\t\t\t}\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unrecognized field %s in BTF map definition\", member.Name)\n\t\t}\n\t}\n\n\treturn &MapSpec{\n\t\tName:       SanitizeName(name, -1),\n\t\tType:       MapType(mapType),\n\t\tKeySize:    keySize,\n\t\tValueSize:  valueSize,\n\t\tMaxEntries: maxEntries,\n\t\tFlags:      flags,\n\t\tKey:        key,\n\t\tValue:      value,\n\t\tPinning:    pinType,\n\t\tInnerMap:   innerMapSpec,\n\t\tContents:   contents,\n\t}, nil\n}\n\n// uintFromBTF resolves the __uint macro, which is a pointer to a sized\n// array, e.g. for int (*foo)[10], this function will return 10.\nfunc uintFromBTF(typ btf.Type) (uint32, error) {\n\tptr, ok := typ.(*btf.Pointer)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"not a pointer: %v\", typ)\n\t}\n\n\tarr, ok := ptr.Target.(*btf.Array)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"not a pointer to array: %v\", typ)\n\t}\n\n\treturn arr.Nelems, nil\n}\n\n// resolveBTFArrayMacro resolves the __array macro, which declares an array\n// of pointers to a given type. This function returns the target Type of\n// the pointers in the array.\nfunc resolveBTFArrayMacro(typ btf.Type) (btf.Type, error) {\n\tarr, ok := typ.(*btf.Array)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"not an array: %v\", typ)\n\t}\n\n\tptr, ok := arr.Type.(*btf.Pointer)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"not an array of pointers: %v\", typ)\n\t}\n\n\treturn ptr.Target, nil\n}\n\n// resolveBTFValuesContents resolves relocations into ELF sections belonging\n// to btf.VarSecinfo's. This can be used on the 'values' member in BTF map\n// definitions to extract static declarations of map contents.\nfunc resolveBTFValuesContents(es *elfSection, vs *btf.VarSecinfo, member btf.Member) ([]MapKV, error) {\n\t// The elements of a .values pointer array are not encoded in BTF.\n\t// Instead, relocations are generated into each array index.\n\t// However, it's possible to leave certain array indices empty, so all\n\t// indices' offsets need to be checked for emitted relocations.\n\n\t// The offset of the 'values' member within the _struct_ (in bits)\n\t// is the starting point of the array. Convert to bytes. Add VarSecinfo\n\t// offset to get the absolute position in the ELF blob.\n\tstart := member.Offset.Bytes() + vs.Offset\n\t// 'values' is encoded in BTF as a zero (variable) length struct\n\t// member, and its contents run until the end of the VarSecinfo.\n\t// Add VarSecinfo offset to get the absolute position in the ELF blob.\n\tend := vs.Size + vs.Offset\n\t// The size of an address in this section. This determines the width of\n\t// an index in the array.\n\talign := uint32(es.SectionHeader.Addralign)\n\n\t// Check if variable-length section is aligned.\n\tif (end-start)%align != 0 {\n\t\treturn nil, errors.New(\"unaligned static values section\")\n\t}\n\telems := (end - start) / align\n\n\tif elems == 0 {\n\t\treturn nil, nil\n\t}\n\n\tcontents := make([]MapKV, 0, elems)\n\n\t// k is the array index, off is its corresponding ELF section offset.\n\tfor k, off := uint32(0), start; k < elems; k, off = k+1, off+align {\n\t\tr, ok := es.relocations[uint64(off)]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Relocation exists for the current offset in the ELF section.\n\t\t// Emit a value stub based on the type of relocation to be replaced by\n\t\t// a real fd later in the pipeline before populating the map.\n\t\t// Map keys are encoded in MapKV entries, so empty array indices are\n\t\t// skipped here.\n\t\tswitch t := elf.ST_TYPE(r.Info); t {\n\t\tcase elf.STT_FUNC:\n\t\t\tcontents = append(contents, MapKV{uint32(k), r.Name})\n\t\tcase elf.STT_OBJECT:\n\t\t\tcontents = append(contents, MapKV{uint32(k), r.Name})\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unknown relocation type %v for symbol %s\", t, r.Name)\n\t\t}\n\t}\n\n\treturn contents, nil\n}\n\nfunc (ec *elfCode) loadDataSections() error {\n\tfor _, sec := range ec.sections {\n\t\tif sec.kind != dataSection {\n\t\t\tcontinue\n\t\t}\n\n\t\tif sec.references == 0 {\n\t\t\t// Prune data sections which are not referenced by any\n\t\t\t// instructions.\n\t\t\tcontinue\n\t\t}\n\n\t\tmapSpec := &MapSpec{\n\t\t\tName:       SanitizeName(sec.Name, -1),\n\t\t\tType:       Array,\n\t\t\tKeySize:    4,\n\t\t\tValueSize:  uint32(sec.Size),\n\t\t\tMaxEntries: 1,\n\t\t}\n\n\t\tswitch sec.Type {\n\t\t// Only open the section if we know there's actual data to be read.\n\t\tcase elf.SHT_PROGBITS:\n\t\t\tdata, err := sec.Data()\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"data section %s: can't get contents: %w\", sec.Name, err)\n\t\t\t}\n\n\t\t\tif uint64(len(data)) > math.MaxUint32 {\n\t\t\t\treturn fmt.Errorf(\"data section %s: contents exceed maximum size\", sec.Name)\n\t\t\t}\n\t\t\tmapSpec.Contents = []MapKV{{uint32(0), data}}\n\n\t\tcase elf.SHT_NOBITS:\n\t\t\t// NOBITS sections like .bss contain only zeroes, and since data sections\n\t\t\t// are Arrays, the kernel already preallocates them. Skip reading zeroes\n\t\t\t// from the ELF.\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"data section %s: unknown section type %s\", sec.Name, sec.Type)\n\t\t}\n\n\t\t// It is possible for a data section to exist without a corresponding BTF Datasec\n\t\t// if it only contains anonymous values like macro-defined arrays.\n\t\tif ec.btf != nil {\n\t\t\tvar ds *btf.Datasec\n\t\t\tif ec.btf.TypeByName(sec.Name, &ds) == nil {\n\t\t\t\t// Assign the spec's key and BTF only if the Datasec lookup was successful.\n\t\t\t\tmapSpec.Key = &btf.Void{}\n\t\t\t\tmapSpec.Value = ds\n\t\t\t}\n\t\t}\n\n\t\tif strings.HasPrefix(sec.Name, \".rodata\") {\n\t\t\tmapSpec.Flags = unix.BPF_F_RDONLY_PROG\n\t\t\tmapSpec.Freeze = true\n\t\t}\n\n\t\tec.maps[sec.Name] = mapSpec\n\t}\n\n\treturn nil\n}\n\n// loadKconfigSection handles the 'virtual' Datasec .kconfig that doesn't\n// have a corresponding ELF section and exist purely in BTF.\nfunc (ec *elfCode) loadKconfigSection() error {\n\tif ec.btf == nil {\n\t\treturn nil\n\t}\n\n\tvar ds *btf.Datasec\n\terr := ec.btf.TypeByName(\".kconfig\", &ds)\n\tif errors.Is(err, btf.ErrNotFound) {\n\t\treturn nil\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif ds.Size == 0 {\n\t\treturn errors.New(\"zero-length .kconfig\")\n\t}\n\n\tec.kconfig = &MapSpec{\n\t\tName:       \".kconfig\",\n\t\tType:       Array,\n\t\tKeySize:    uint32(4),\n\t\tValueSize:  ds.Size,\n\t\tMaxEntries: 1,\n\t\tFlags:      unix.BPF_F_RDONLY_PROG | unix.BPF_F_MMAPABLE,\n\t\tFreeze:     true,\n\t\tKey:        &btf.Int{Size: 4},\n\t\tValue:      ds,\n\t}\n\n\treturn nil\n}\n\n// loadKsymsSection handles the 'virtual' Datasec .ksyms that doesn't\n// have a corresponding ELF section and exist purely in BTF.\nfunc (ec *elfCode) loadKsymsSection() error {\n\tif ec.btf == nil {\n\t\treturn nil\n\t}\n\n\tvar ds *btf.Datasec\n\terr := ec.btf.TypeByName(\".ksyms\", &ds)\n\tif errors.Is(err, btf.ErrNotFound) {\n\t\treturn nil\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor _, v := range ds.Vars {\n\t\t// we have already checked the .ksyms Datasec to only contain Func Vars.\n\t\tec.kfuncs[v.Type.TypeName()] = v.Type.(*btf.Func)\n\t}\n\n\treturn nil\n}\n\nfunc getProgType(sectionName string) (ProgramType, AttachType, uint32, string) {\n\ttypes := []struct {\n\t\tprefix     string\n\t\tprogType   ProgramType\n\t\tattachType AttachType\n\t\tprogFlags  uint32\n\t}{\n\t\t// Please update the types from libbpf.c and follow the order of it.\n\t\t// https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/lib/bpf/libbpf.c\n\t\t{\"socket\", SocketFilter, AttachNone, 0},\n\t\t{\"sk_reuseport/migrate\", SkReuseport, AttachSkReuseportSelectOrMigrate, 0},\n\t\t{\"sk_reuseport\", SkReuseport, AttachSkReuseportSelect, 0},\n\t\t{\"kprobe/\", Kprobe, AttachNone, 0},\n\t\t{\"uprobe/\", Kprobe, AttachNone, 0},\n\t\t{\"kretprobe/\", Kprobe, AttachNone, 0},\n\t\t{\"uretprobe/\", Kprobe, AttachNone, 0},\n\t\t{\"tc\", SchedCLS, AttachNone, 0},\n\t\t{\"classifier\", SchedCLS, AttachNone, 0},\n\t\t{\"action\", SchedACT, AttachNone, 0},\n\t\t{\"tracepoint/\", TracePoint, AttachNone, 0},\n\t\t{\"tp/\", TracePoint, AttachNone, 0},\n\t\t{\"raw_tracepoint/\", RawTracepoint, AttachNone, 0},\n\t\t{\"raw_tp/\", RawTracepoint, AttachNone, 0},\n\t\t{\"raw_tracepoint.w/\", RawTracepointWritable, AttachNone, 0},\n\t\t{\"raw_tp.w/\", RawTracepointWritable, AttachNone, 0},\n\t\t{\"tp_btf/\", Tracing, AttachTraceRawTp, 0},\n\t\t{\"fentry/\", Tracing, AttachTraceFEntry, 0},\n\t\t{\"fmod_ret/\", Tracing, AttachModifyReturn, 0},\n\t\t{\"fexit/\", Tracing, AttachTraceFExit, 0},\n\t\t{\"fentry.s/\", Tracing, AttachTraceFEntry, unix.BPF_F_SLEEPABLE},\n\t\t{\"fmod_ret.s/\", Tracing, AttachModifyReturn, unix.BPF_F_SLEEPABLE},\n\t\t{\"fexit.s/\", Tracing, AttachTraceFExit, unix.BPF_F_SLEEPABLE},\n\t\t{\"freplace/\", Extension, AttachNone, 0},\n\t\t{\"lsm/\", LSM, AttachLSMMac, 0},\n\t\t{\"lsm.s/\", LSM, AttachLSMMac, unix.BPF_F_SLEEPABLE},\n\t\t{\"iter/\", Tracing, AttachTraceIter, 0},\n\t\t{\"iter.s/\", Tracing, AttachTraceIter, unix.BPF_F_SLEEPABLE},\n\t\t{\"syscall\", Syscall, AttachNone, 0},\n\t\t{\"xdp.frags_devmap/\", XDP, AttachXDPDevMap, unix.BPF_F_XDP_HAS_FRAGS},\n\t\t{\"xdp_devmap/\", XDP, AttachXDPDevMap, 0},\n\t\t{\"xdp.frags_cpumap/\", XDP, AttachXDPCPUMap, unix.BPF_F_XDP_HAS_FRAGS},\n\t\t{\"xdp_cpumap/\", XDP, AttachXDPCPUMap, 0},\n\t\t{\"xdp.frags\", XDP, AttachNone, unix.BPF_F_XDP_HAS_FRAGS},\n\t\t{\"xdp\", XDP, AttachNone, 0},\n\t\t{\"perf_event\", PerfEvent, AttachNone, 0},\n\t\t{\"lwt_in\", LWTIn, AttachNone, 0},\n\t\t{\"lwt_out\", LWTOut, AttachNone, 0},\n\t\t{\"lwt_xmit\", LWTXmit, AttachNone, 0},\n\t\t{\"lwt_seg6local\", LWTSeg6Local, AttachNone, 0},\n\t\t{\"cgroup_skb/ingress\", CGroupSKB, AttachCGroupInetIngress, 0},\n\t\t{\"cgroup_skb/egress\", CGroupSKB, AttachCGroupInetEgress, 0},\n\t\t{\"cgroup/skb\", CGroupSKB, AttachNone, 0},\n\t\t{\"cgroup/sock_create\", CGroupSock, AttachCGroupInetSockCreate, 0},\n\t\t{\"cgroup/sock_release\", CGroupSock, AttachCgroupInetSockRelease, 0},\n\t\t{\"cgroup/sock\", CGroupSock, AttachCGroupInetSockCreate, 0},\n\t\t{\"cgroup/post_bind4\", CGroupSock, AttachCGroupInet4PostBind, 0},\n\t\t{\"cgroup/post_bind6\", CGroupSock, AttachCGroupInet6PostBind, 0},\n\t\t{\"cgroup/dev\", CGroupDevice, AttachCGroupDevice, 0},\n\t\t{\"sockops\", SockOps, AttachCGroupSockOps, 0},\n\t\t{\"sk_skb/stream_parser\", SkSKB, AttachSkSKBStreamParser, 0},\n\t\t{\"sk_skb/stream_verdict\", SkSKB, AttachSkSKBStreamVerdict, 0},\n\t\t{\"sk_skb\", SkSKB, AttachNone, 0},\n\t\t{\"sk_msg\", SkMsg, AttachSkMsgVerdict, 0},\n\t\t{\"lirc_mode2\", LircMode2, AttachLircMode2, 0},\n\t\t{\"flow_dissector\", FlowDissector, AttachFlowDissector, 0},\n\t\t{\"cgroup/bind4\", CGroupSockAddr, AttachCGroupInet4Bind, 0},\n\t\t{\"cgroup/bind6\", CGroupSockAddr, AttachCGroupInet6Bind, 0},\n\t\t{\"cgroup/connect4\", CGroupSockAddr, AttachCGroupInet4Connect, 0},\n\t\t{\"cgroup/connect6\", CGroupSockAddr, AttachCGroupInet6Connect, 0},\n\t\t{\"cgroup/sendmsg4\", CGroupSockAddr, AttachCGroupUDP4Sendmsg, 0},\n\t\t{\"cgroup/sendmsg6\", CGroupSockAddr, AttachCGroupUDP6Sendmsg, 0},\n\t\t{\"cgroup/recvmsg4\", CGroupSockAddr, AttachCGroupUDP4Recvmsg, 0},\n\t\t{\"cgroup/recvmsg6\", CGroupSockAddr, AttachCGroupUDP6Recvmsg, 0},\n\t\t{\"cgroup/getpeername4\", CGroupSockAddr, AttachCgroupInet4GetPeername, 0},\n\t\t{\"cgroup/getpeername6\", CGroupSockAddr, AttachCgroupInet6GetPeername, 0},\n\t\t{\"cgroup/getsockname4\", CGroupSockAddr, AttachCgroupInet4GetSockname, 0},\n\t\t{\"cgroup/getsockname6\", CGroupSockAddr, AttachCgroupInet6GetSockname, 0},\n\t\t{\"cgroup/sysctl\", CGroupSysctl, AttachCGroupSysctl, 0},\n\t\t{\"cgroup/getsockopt\", CGroupSockopt, AttachCGroupGetsockopt, 0},\n\t\t{\"cgroup/setsockopt\", CGroupSockopt, AttachCGroupSetsockopt, 0},\n\t\t{\"struct_ops+\", StructOps, AttachNone, 0},\n\t\t{\"sk_lookup/\", SkLookup, AttachSkLookup, 0},\n\t\t{\"seccomp\", SocketFilter, AttachNone, 0},\n\t\t{\"kprobe.multi\", Kprobe, AttachTraceKprobeMulti, 0},\n\t\t{\"kretprobe.multi\", Kprobe, AttachTraceKprobeMulti, 0},\n\t}\n\n\tfor _, t := range types {\n\t\tif !strings.HasPrefix(sectionName, t.prefix) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif !strings.HasSuffix(t.prefix, \"/\") {\n\t\t\treturn t.progType, t.attachType, t.progFlags, \"\"\n\t\t}\n\n\t\treturn t.progType, t.attachType, t.progFlags, sectionName[len(t.prefix):]\n\t}\n\n\treturn UnspecifiedProgram, AttachNone, 0, \"\"\n}\n\nfunc (ec *elfCode) loadSectionRelocations(sec *elf.Section, symbols []elf.Symbol) (map[uint64]elf.Symbol, error) {\n\trels := make(map[uint64]elf.Symbol)\n\n\tif sec.Entsize < 16 {\n\t\treturn nil, fmt.Errorf(\"section %s: relocations are less than 16 bytes\", sec.Name)\n\t}\n\n\tr := bufio.NewReader(sec.Open())\n\tfor off := uint64(0); off < sec.Size; off += sec.Entsize {\n\t\tent := io.LimitReader(r, int64(sec.Entsize))\n\n\t\tvar rel elf.Rel64\n\t\tif binary.Read(ent, ec.ByteOrder, &rel) != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't parse relocation at offset %v\", off)\n\t\t}\n\n\t\tsymNo := int(elf.R_SYM64(rel.Info) - 1)\n\t\tif symNo >= len(symbols) {\n\t\t\treturn nil, fmt.Errorf(\"offset %d: symbol %d doesn't exist\", off, symNo)\n\t\t}\n\n\t\tsymbol := symbols[symNo]\n\t\trels[rel.Off] = symbol\n\t}\n\n\treturn rels, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/info.go",
    "content": "package ebpf\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding/hex\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// MapInfo describes a map.\ntype MapInfo struct {\n\tType       MapType\n\tid         MapID\n\tKeySize    uint32\n\tValueSize  uint32\n\tMaxEntries uint32\n\tFlags      uint32\n\t// Name as supplied by user space at load time. Available from 4.15.\n\tName string\n}\n\nfunc newMapInfoFromFd(fd *sys.FD) (*MapInfo, error) {\n\tvar info sys.MapInfo\n\terr := sys.ObjInfo(fd, &info)\n\tif errors.Is(err, syscall.EINVAL) {\n\t\treturn newMapInfoFromProc(fd)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &MapInfo{\n\t\tMapType(info.Type),\n\t\tMapID(info.Id),\n\t\tinfo.KeySize,\n\t\tinfo.ValueSize,\n\t\tinfo.MaxEntries,\n\t\tuint32(info.MapFlags),\n\t\tunix.ByteSliceToString(info.Name[:]),\n\t}, nil\n}\n\nfunc newMapInfoFromProc(fd *sys.FD) (*MapInfo, error) {\n\tvar mi MapInfo\n\terr := scanFdInfo(fd, map[string]interface{}{\n\t\t\"map_type\":    &mi.Type,\n\t\t\"key_size\":    &mi.KeySize,\n\t\t\"value_size\":  &mi.ValueSize,\n\t\t\"max_entries\": &mi.MaxEntries,\n\t\t\"map_flags\":   &mi.Flags,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &mi, nil\n}\n\n// ID returns the map ID.\n//\n// Available from 4.13.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (mi *MapInfo) ID() (MapID, bool) {\n\treturn mi.id, mi.id > 0\n}\n\n// programStats holds statistics of a program.\ntype programStats struct {\n\t// Total accumulated runtime of the program ins ns.\n\truntime time.Duration\n\t// Total number of times the program was called.\n\trunCount uint64\n}\n\n// ProgramInfo describes a program.\ntype ProgramInfo struct {\n\tType ProgramType\n\tid   ProgramID\n\t// Truncated hash of the BPF bytecode. Available from 4.13.\n\tTag string\n\t// Name as supplied by user space at load time. Available from 4.15.\n\tName string\n\n\tcreatedByUID     uint32\n\thaveCreatedByUID bool\n\tbtf              btf.ID\n\tstats            *programStats\n\n\tmaps  []MapID\n\tinsns []byte\n}\n\nfunc newProgramInfoFromFd(fd *sys.FD) (*ProgramInfo, error) {\n\tvar info sys.ProgInfo\n\terr := sys.ObjInfo(fd, &info)\n\tif errors.Is(err, syscall.EINVAL) {\n\t\treturn newProgramInfoFromProc(fd)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpi := ProgramInfo{\n\t\tType: ProgramType(info.Type),\n\t\tid:   ProgramID(info.Id),\n\t\tTag:  hex.EncodeToString(info.Tag[:]),\n\t\tName: unix.ByteSliceToString(info.Name[:]),\n\t\tbtf:  btf.ID(info.BtfId),\n\t\tstats: &programStats{\n\t\t\truntime:  time.Duration(info.RunTimeNs),\n\t\t\trunCount: info.RunCnt,\n\t\t},\n\t}\n\n\t// Start with a clean struct for the second call, otherwise we may get EFAULT.\n\tvar info2 sys.ProgInfo\n\n\tif info.NrMapIds > 0 {\n\t\tpi.maps = make([]MapID, info.NrMapIds)\n\t\tinfo2.NrMapIds = info.NrMapIds\n\t\tinfo2.MapIds = sys.NewPointer(unsafe.Pointer(&pi.maps[0]))\n\t} else if haveProgramInfoMapIDs() == nil {\n\t\t// This program really has no associated maps.\n\t\tpi.maps = make([]MapID, 0)\n\t} else {\n\t\t// The kernel doesn't report associated maps.\n\t\tpi.maps = nil\n\t}\n\n\t// createdByUID and NrMapIds were introduced in the same kernel version.\n\tif pi.maps != nil {\n\t\tpi.createdByUID = info.CreatedByUid\n\t\tpi.haveCreatedByUID = true\n\t}\n\n\tif info.XlatedProgLen > 0 {\n\t\tpi.insns = make([]byte, info.XlatedProgLen)\n\t\tinfo2.XlatedProgLen = info.XlatedProgLen\n\t\tinfo2.XlatedProgInsns = sys.NewSlicePointer(pi.insns)\n\t}\n\n\tif info.NrMapIds > 0 || info.XlatedProgLen > 0 {\n\t\tif err := sys.ObjInfo(fd, &info2); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\treturn &pi, nil\n}\n\nfunc newProgramInfoFromProc(fd *sys.FD) (*ProgramInfo, error) {\n\tvar info ProgramInfo\n\terr := scanFdInfo(fd, map[string]interface{}{\n\t\t\"prog_type\": &info.Type,\n\t\t\"prog_tag\":  &info.Tag,\n\t})\n\tif errors.Is(err, errMissingFields) {\n\t\treturn nil, &internal.UnsupportedFeatureError{\n\t\t\tName:           \"reading program info from /proc/self/fdinfo\",\n\t\t\tMinimumVersion: internal.Version{4, 10, 0},\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &info, nil\n}\n\n// ID returns the program ID.\n//\n// Available from 4.13.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) ID() (ProgramID, bool) {\n\treturn pi.id, pi.id > 0\n}\n\n// CreatedByUID returns the Uid that created the program.\n//\n// Available from 4.15.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) CreatedByUID() (uint32, bool) {\n\treturn pi.createdByUID, pi.haveCreatedByUID\n}\n\n// BTFID returns the BTF ID associated with the program.\n//\n// The ID is only valid as long as the associated program is kept alive.\n// Available from 5.0.\n//\n// The bool return value indicates whether this optional field is available and\n// populated. (The field may be available but not populated if the kernel\n// supports the field but the program was loaded without BTF information.)\nfunc (pi *ProgramInfo) BTFID() (btf.ID, bool) {\n\treturn pi.btf, pi.btf > 0\n}\n\n// RunCount returns the total number of times the program was called.\n//\n// Can return 0 if the collection of statistics is not enabled. See EnableStats().\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) RunCount() (uint64, bool) {\n\tif pi.stats != nil {\n\t\treturn pi.stats.runCount, true\n\t}\n\treturn 0, false\n}\n\n// Runtime returns the total accumulated runtime of the program.\n//\n// Can return 0 if the collection of statistics is not enabled. See EnableStats().\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) Runtime() (time.Duration, bool) {\n\tif pi.stats != nil {\n\t\treturn pi.stats.runtime, true\n\t}\n\treturn time.Duration(0), false\n}\n\n// Instructions returns the 'xlated' instruction stream of the program\n// after it has been verified and rewritten by the kernel. These instructions\n// cannot be loaded back into the kernel as-is, this is mainly used for\n// inspecting loaded programs for troubleshooting, dumping, etc.\n//\n// For example, map accesses are made to reference their kernel map IDs,\n// not the FDs they had when the program was inserted. Note that before\n// the introduction of bpf_insn_prepare_dump in kernel 4.16, xlated\n// instructions were not sanitized, making the output even less reusable\n// and less likely to round-trip or evaluate to the same program Tag.\n//\n// The first instruction is marked as a symbol using the Program's name.\n//\n// Available from 4.13. Requires CAP_BPF or equivalent.\nfunc (pi *ProgramInfo) Instructions() (asm.Instructions, error) {\n\t// If the calling process is not BPF-capable or if the kernel doesn't\n\t// support getting xlated instructions, the field will be zero.\n\tif len(pi.insns) == 0 {\n\t\treturn nil, fmt.Errorf(\"insufficient permissions or unsupported kernel: %w\", ErrNotSupported)\n\t}\n\n\tr := bytes.NewReader(pi.insns)\n\tvar insns asm.Instructions\n\tif err := insns.Unmarshal(r, internal.NativeEndian); err != nil {\n\t\treturn nil, fmt.Errorf(\"unmarshaling instructions: %w\", err)\n\t}\n\n\t// Tag the first instruction with the name of the program, if available.\n\tinsns[0] = insns[0].WithSymbol(pi.Name)\n\n\treturn insns, nil\n}\n\n// MapIDs returns the maps related to the program.\n//\n// Available from 4.15.\n//\n// The bool return value indicates whether this optional field is available.\nfunc (pi *ProgramInfo) MapIDs() ([]MapID, bool) {\n\treturn pi.maps, pi.maps != nil\n}\n\nfunc scanFdInfo(fd *sys.FD, fields map[string]interface{}) error {\n\tfh, err := os.Open(fmt.Sprintf(\"/proc/self/fdinfo/%d\", fd.Int()))\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer fh.Close()\n\n\tif err := scanFdInfoReader(fh, fields); err != nil {\n\t\treturn fmt.Errorf(\"%s: %w\", fh.Name(), err)\n\t}\n\treturn nil\n}\n\nvar errMissingFields = errors.New(\"missing fields\")\n\nfunc scanFdInfoReader(r io.Reader, fields map[string]interface{}) error {\n\tvar (\n\t\tscanner = bufio.NewScanner(r)\n\t\tscanned int\n\t)\n\n\tfor scanner.Scan() {\n\t\tparts := strings.SplitN(scanner.Text(), \"\\t\", 2)\n\t\tif len(parts) != 2 {\n\t\t\tcontinue\n\t\t}\n\n\t\tname := strings.TrimSuffix(parts[0], \":\")\n\t\tfield, ok := fields[string(name)]\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif n, err := fmt.Sscanln(parts[1], field); err != nil || n != 1 {\n\t\t\treturn fmt.Errorf(\"can't parse field %s: %v\", name, err)\n\t\t}\n\n\t\tscanned++\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\treturn err\n\t}\n\n\tif len(fields) > 0 && scanned == 0 {\n\t\treturn ErrNotSupported\n\t}\n\n\tif scanned != len(fields) {\n\t\treturn errMissingFields\n\t}\n\n\treturn nil\n}\n\n// EnableStats starts the measuring of the runtime\n// and run counts of eBPF programs.\n//\n// Collecting statistics can have an impact on the performance.\n//\n// Requires at least 5.8.\nfunc EnableStats(which uint32) (io.Closer, error) {\n\tfd, err := sys.EnableStats(&sys.EnableStatsAttr{\n\t\tType: which,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn fd, nil\n}\n\nvar haveProgramInfoMapIDs = internal.NewFeatureTest(\"map IDs in program info\", \"4.15\", func() error {\n\tprog, err := progLoad(asm.Instructions{\n\t\tasm.LoadImm(asm.R0, 0, asm.DWord),\n\t\tasm.Return(),\n\t}, SocketFilter, \"MIT\")\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\terr = sys.ObjInfo(prog, &sys.ProgInfo{\n\t\t// NB: Don't need to allocate MapIds since the program isn't using\n\t\t// any maps.\n\t\tNrMapIds: 1,\n\t})\n\tif errors.Is(err, unix.EINVAL) {\n\t\t// Most likely the syscall doesn't exist.\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.E2BIG) {\n\t\t// We've hit check_uarg_tail_zero on older kernels.\n\t\treturn internal.ErrNotSupported\n\t}\n\n\treturn err\n})\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/align.go",
    "content": "package internal\n\nimport \"golang.org/x/exp/constraints\"\n\n// Align returns 'n' updated to 'alignment' boundary.\nfunc Align[I constraints.Integer](n, alignment I) I {\n\treturn (n + alignment - 1) / alignment * alignment\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/buffer.go",
    "content": "package internal\n\nimport (\n\t\"bytes\"\n\t\"sync\"\n)\n\nvar bytesBufferPool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn new(bytes.Buffer)\n\t},\n}\n\n// NewBuffer retrieves a [bytes.Buffer] from a pool an re-initialises it.\n//\n// The returned buffer should be passed to [PutBuffer].\nfunc NewBuffer(buf []byte) *bytes.Buffer {\n\twr := bytesBufferPool.Get().(*bytes.Buffer)\n\t// Reinitialize the Buffer with a new backing slice since it is returned to\n\t// the caller by wr.Bytes() below. Pooling is faster despite calling\n\t// NewBuffer. The pooled alloc is still reused, it only needs to be zeroed.\n\t*wr = *bytes.NewBuffer(buf)\n\treturn wr\n}\n\n// PutBuffer releases a buffer to the pool.\nfunc PutBuffer(buf *bytes.Buffer) {\n\t// Release reference to the backing buffer.\n\t*buf = *bytes.NewBuffer(nil)\n\tbytesBufferPool.Put(buf)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/cpu.go",
    "content": "package internal\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n)\n\n// PossibleCPUs returns the max number of CPUs a system may possibly have\n// Logical CPU numbers must be of the form 0-n\nvar PossibleCPUs = Memoize(func() (int, error) {\n\treturn parseCPUsFromFile(\"/sys/devices/system/cpu/possible\")\n})\n\nfunc parseCPUsFromFile(path string) (int, error) {\n\tspec, err := os.ReadFile(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tn, err := parseCPUs(string(spec))\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"can't parse %s: %v\", path, err)\n\t}\n\n\treturn n, nil\n}\n\n// parseCPUs parses the number of cpus from a string produced\n// by bitmap_list_string() in the Linux kernel.\n// Multiple ranges are rejected, since they can't be unified\n// into a single number.\n// This is the format of /sys/devices/system/cpu/possible, it\n// is not suitable for /sys/devices/system/cpu/online, etc.\nfunc parseCPUs(spec string) (int, error) {\n\tif strings.Trim(spec, \"\\n\") == \"0\" {\n\t\treturn 1, nil\n\t}\n\n\tvar low, high int\n\tn, err := fmt.Sscanf(spec, \"%d-%d\\n\", &low, &high)\n\tif n != 2 || err != nil {\n\t\treturn 0, fmt.Errorf(\"invalid format: %s\", spec)\n\t}\n\tif low != 0 {\n\t\treturn 0, fmt.Errorf(\"CPU spec doesn't start at zero: %s\", spec)\n\t}\n\n\t// cpus is 0 indexed\n\treturn high + 1, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/deque.go",
    "content": "package internal\n\nimport \"math/bits\"\n\n// Deque implements a double ended queue.\ntype Deque[T any] struct {\n\telems       []T\n\tread, write uint64\n\tmask        uint64\n}\n\n// Reset clears the contents of the deque while retaining the backing buffer.\nfunc (dq *Deque[T]) Reset() {\n\tvar zero T\n\n\tfor i := dq.read; i < dq.write; i++ {\n\t\tdq.elems[i&dq.mask] = zero\n\t}\n\n\tdq.read, dq.write = 0, 0\n}\n\nfunc (dq *Deque[T]) Empty() bool {\n\treturn dq.read == dq.write\n}\n\n// Push adds an element to the end.\nfunc (dq *Deque[T]) Push(e T) {\n\tdq.Grow(1)\n\tdq.elems[dq.write&dq.mask] = e\n\tdq.write++\n}\n\n// Shift returns the first element or the zero value.\nfunc (dq *Deque[T]) Shift() T {\n\tvar zero T\n\n\tif dq.Empty() {\n\t\treturn zero\n\t}\n\n\tindex := dq.read & dq.mask\n\tt := dq.elems[index]\n\tdq.elems[index] = zero\n\tdq.read++\n\treturn t\n}\n\n// Pop returns the last element or the zero value.\nfunc (dq *Deque[T]) Pop() T {\n\tvar zero T\n\n\tif dq.Empty() {\n\t\treturn zero\n\t}\n\n\tdq.write--\n\tindex := dq.write & dq.mask\n\tt := dq.elems[index]\n\tdq.elems[index] = zero\n\treturn t\n}\n\n// Grow the deque's capacity, if necessary, to guarantee space for another n\n// elements.\nfunc (dq *Deque[T]) Grow(n int) {\n\thave := dq.write - dq.read\n\tneed := have + uint64(n)\n\tif need < have {\n\t\tpanic(\"overflow\")\n\t}\n\tif uint64(len(dq.elems)) >= need {\n\t\treturn\n\t}\n\n\t// Round up to the new power of two which is at least 8.\n\t// See https://jameshfisher.com/2018/03/30/round-up-power-2/\n\tcapacity := 1 << (64 - bits.LeadingZeros64(need-1))\n\tif capacity < 8 {\n\t\tcapacity = 8\n\t}\n\n\telems := make([]T, have, capacity)\n\tpivot := dq.read & dq.mask\n\tcopied := copy(elems, dq.elems[pivot:])\n\tcopy(elems[copied:], dq.elems[:pivot])\n\n\tdq.elems = elems[:capacity]\n\tdq.mask = uint64(capacity) - 1\n\tdq.read, dq.write = 0, have\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/elf.go",
    "content": "package internal\n\nimport (\n\t\"debug/elf\"\n\t\"fmt\"\n\t\"io\"\n)\n\ntype SafeELFFile struct {\n\t*elf.File\n}\n\n// NewSafeELFFile reads an ELF safely.\n//\n// Any panic during parsing is turned into an error. This is necessary since\n// there are a bunch of unfixed bugs in debug/elf.\n//\n// https://github.com/golang/go/issues?q=is%3Aissue+is%3Aopen+debug%2Felf+in%3Atitle\nfunc NewSafeELFFile(r io.ReaderAt) (safe *SafeELFFile, err error) {\n\tdefer func() {\n\t\tr := recover()\n\t\tif r == nil {\n\t\t\treturn\n\t\t}\n\n\t\tsafe = nil\n\t\terr = fmt.Errorf(\"reading ELF file panicked: %s\", r)\n\t}()\n\n\tfile, err := elf.NewFile(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &SafeELFFile{file}, nil\n}\n\n// OpenSafeELFFile reads an ELF from a file.\n//\n// It works like NewSafeELFFile, with the exception that safe.Close will\n// close the underlying file.\nfunc OpenSafeELFFile(path string) (safe *SafeELFFile, err error) {\n\tdefer func() {\n\t\tr := recover()\n\t\tif r == nil {\n\t\t\treturn\n\t\t}\n\n\t\tsafe = nil\n\t\terr = fmt.Errorf(\"reading ELF file panicked: %s\", r)\n\t}()\n\n\tfile, err := elf.Open(path)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &SafeELFFile{file}, nil\n}\n\n// Symbols is the safe version of elf.File.Symbols.\nfunc (se *SafeELFFile) Symbols() (syms []elf.Symbol, err error) {\n\tdefer func() {\n\t\tr := recover()\n\t\tif r == nil {\n\t\t\treturn\n\t\t}\n\n\t\tsyms = nil\n\t\terr = fmt.Errorf(\"reading ELF symbols panicked: %s\", r)\n\t}()\n\n\tsyms, err = se.File.Symbols()\n\treturn\n}\n\n// DynamicSymbols is the safe version of elf.File.DynamicSymbols.\nfunc (se *SafeELFFile) DynamicSymbols() (syms []elf.Symbol, err error) {\n\tdefer func() {\n\t\tr := recover()\n\t\tif r == nil {\n\t\t\treturn\n\t\t}\n\n\t\tsyms = nil\n\t\terr = fmt.Errorf(\"reading ELF dynamic symbols panicked: %s\", r)\n\t}()\n\n\tsyms, err = se.File.DynamicSymbols()\n\treturn\n}\n\n// SectionsByType returns all sections in the file with the specified section type.\nfunc (se *SafeELFFile) SectionsByType(typ elf.SectionType) []*elf.Section {\n\tsections := make([]*elf.Section, 0, 1)\n\tfor _, section := range se.Sections {\n\t\tif section.Type == typ {\n\t\t\tsections = append(sections, section)\n\t\t}\n\t}\n\treturn sections\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/endian_be.go",
    "content": "//go:build armbe || arm64be || mips || mips64 || mips64p32 || ppc64 || s390 || s390x || sparc || sparc64\n\npackage internal\n\nimport \"encoding/binary\"\n\n// NativeEndian is set to either binary.BigEndian or binary.LittleEndian,\n// depending on the host's endianness.\nvar NativeEndian binary.ByteOrder = binary.BigEndian\n\n// ClangEndian is set to either \"el\" or \"eb\" depending on the host's endianness.\nconst ClangEndian = \"eb\"\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/endian_le.go",
    "content": "//go:build 386 || amd64 || amd64p32 || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || ppc64le || riscv64\n\npackage internal\n\nimport \"encoding/binary\"\n\n// NativeEndian is set to either binary.BigEndian or binary.LittleEndian,\n// depending on the host's endianness.\nvar NativeEndian binary.ByteOrder = binary.LittleEndian\n\n// ClangEndian is set to either \"el\" or \"eb\" depending on the host's endianness.\nconst ClangEndian = \"el\"\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/epoll/poller.go",
    "content": "package epoll\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Poller waits for readiness notifications from multiple file descriptors.\n//\n// The wait can be interrupted by calling Close.\ntype Poller struct {\n\t// mutexes protect the fields declared below them. If you need to\n\t// acquire both at once you must lock epollMu before eventMu.\n\tepollMu sync.Mutex\n\tepollFd int\n\n\teventMu sync.Mutex\n\tevent   *eventFd\n}\n\nfunc New() (*Poller, error) {\n\tepollFd, err := unix.EpollCreate1(unix.EPOLL_CLOEXEC)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"create epoll fd: %v\", err)\n\t}\n\n\tp := &Poller{epollFd: epollFd}\n\tp.event, err = newEventFd()\n\tif err != nil {\n\t\tunix.Close(epollFd)\n\t\treturn nil, err\n\t}\n\n\tif err := p.Add(p.event.raw, 0); err != nil {\n\t\tunix.Close(epollFd)\n\t\tp.event.close()\n\t\treturn nil, fmt.Errorf(\"add eventfd: %w\", err)\n\t}\n\n\truntime.SetFinalizer(p, (*Poller).Close)\n\treturn p, nil\n}\n\n// Close the poller.\n//\n// Interrupts any calls to Wait. Multiple calls to Close are valid, but subsequent\n// calls will return os.ErrClosed.\nfunc (p *Poller) Close() error {\n\truntime.SetFinalizer(p, nil)\n\n\t// Interrupt Wait() via the event fd if it's currently blocked.\n\tif err := p.wakeWait(); err != nil {\n\t\treturn err\n\t}\n\n\t// Acquire the lock. This ensures that Wait isn't running.\n\tp.epollMu.Lock()\n\tdefer p.epollMu.Unlock()\n\n\t// Prevent other calls to Close().\n\tp.eventMu.Lock()\n\tdefer p.eventMu.Unlock()\n\n\tif p.epollFd != -1 {\n\t\tunix.Close(p.epollFd)\n\t\tp.epollFd = -1\n\t}\n\n\tif p.event != nil {\n\t\tp.event.close()\n\t\tp.event = nil\n\t}\n\n\treturn nil\n}\n\n// Add an fd to the poller.\n//\n// id is returned by Wait in the unix.EpollEvent.Pad field any may be zero. It\n// must not exceed math.MaxInt32.\n//\n// Add is blocked by Wait.\nfunc (p *Poller) Add(fd int, id int) error {\n\tif int64(id) > math.MaxInt32 {\n\t\treturn fmt.Errorf(\"unsupported id: %d\", id)\n\t}\n\n\tp.epollMu.Lock()\n\tdefer p.epollMu.Unlock()\n\n\tif p.epollFd == -1 {\n\t\treturn fmt.Errorf(\"epoll add: %w\", os.ErrClosed)\n\t}\n\n\t// The representation of EpollEvent isn't entirely accurate.\n\t// Pad is fully useable, not just padding. Hence we stuff the\n\t// id in there, which allows us to identify the event later (e.g.,\n\t// in case of perf events, which CPU sent it).\n\tevent := unix.EpollEvent{\n\t\tEvents: unix.EPOLLIN,\n\t\tFd:     int32(fd),\n\t\tPad:    int32(id),\n\t}\n\n\tif err := unix.EpollCtl(p.epollFd, unix.EPOLL_CTL_ADD, fd, &event); err != nil {\n\t\treturn fmt.Errorf(\"add fd to epoll: %v\", err)\n\t}\n\n\treturn nil\n}\n\n// Wait for events.\n//\n// Returns the number of pending events or an error wrapping os.ErrClosed if\n// Close is called, or os.ErrDeadlineExceeded if EpollWait timeout.\nfunc (p *Poller) Wait(events []unix.EpollEvent, deadline time.Time) (int, error) {\n\tp.epollMu.Lock()\n\tdefer p.epollMu.Unlock()\n\n\tif p.epollFd == -1 {\n\t\treturn 0, fmt.Errorf(\"epoll wait: %w\", os.ErrClosed)\n\t}\n\n\tfor {\n\t\ttimeout := int(-1)\n\t\tif !deadline.IsZero() {\n\t\t\tmsec := time.Until(deadline).Milliseconds()\n\t\t\tif msec < 0 {\n\t\t\t\t// Deadline is in the past.\n\t\t\t\tmsec = 0\n\t\t\t} else if msec > math.MaxInt {\n\t\t\t\t// Deadline is too far in the future.\n\t\t\t\tmsec = math.MaxInt\n\t\t\t}\n\t\t\ttimeout = int(msec)\n\t\t}\n\n\t\tn, err := unix.EpollWait(p.epollFd, events, timeout)\n\t\tif temp, ok := err.(temporaryError); ok && temp.Temporary() {\n\t\t\t// Retry the syscall if we were interrupted, see https://github.com/golang/go/issues/20400\n\t\t\tcontinue\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\n\t\tif n == 0 {\n\t\t\treturn 0, fmt.Errorf(\"epoll wait: %w\", os.ErrDeadlineExceeded)\n\t\t}\n\n\t\tfor _, event := range events[:n] {\n\t\t\tif int(event.Fd) == p.event.raw {\n\t\t\t\t// Since we don't read p.event the event is never cleared and\n\t\t\t\t// we'll keep getting this wakeup until Close() acquires the\n\t\t\t\t// lock and sets p.epollFd = -1.\n\t\t\t\treturn 0, fmt.Errorf(\"epoll wait: %w\", os.ErrClosed)\n\t\t\t}\n\t\t}\n\n\t\treturn n, nil\n\t}\n}\n\ntype temporaryError interface {\n\tTemporary() bool\n}\n\n// wakeWait unblocks Wait if it's epoll_wait.\nfunc (p *Poller) wakeWait() error {\n\tp.eventMu.Lock()\n\tdefer p.eventMu.Unlock()\n\n\tif p.event == nil {\n\t\treturn fmt.Errorf(\"epoll wake: %w\", os.ErrClosed)\n\t}\n\n\treturn p.event.add(1)\n}\n\n// eventFd wraps a Linux eventfd.\n//\n// An eventfd acts like a counter: writes add to the counter, reads retrieve\n// the counter and reset it to zero. Reads also block if the counter is zero.\n//\n// See man 2 eventfd.\ntype eventFd struct {\n\tfile *os.File\n\t// prefer raw over file.Fd(), since the latter puts the file into blocking\n\t// mode.\n\traw int\n}\n\nfunc newEventFd() (*eventFd, error) {\n\tfd, err := unix.Eventfd(0, unix.O_CLOEXEC|unix.O_NONBLOCK)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tfile := os.NewFile(uintptr(fd), \"event\")\n\treturn &eventFd{file, fd}, nil\n}\n\nfunc (efd *eventFd) close() error {\n\treturn efd.file.Close()\n}\n\nfunc (efd *eventFd) add(n uint64) error {\n\tvar buf [8]byte\n\tinternal.NativeEndian.PutUint64(buf[:], 1)\n\t_, err := efd.file.Write(buf[:])\n\treturn err\n}\n\nfunc (efd *eventFd) read() (uint64, error) {\n\tvar buf [8]byte\n\t_, err := efd.file.Read(buf[:])\n\treturn internal.NativeEndian.Uint64(buf[:]), err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/errors.go",
    "content": "package internal\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\n// ErrorWithLog wraps err in a VerifierError that includes the parsed verifier\n// log buffer.\n//\n// The default error output is a summary of the full log. The latter can be\n// accessed via VerifierError.Log or by formatting the error, see Format.\nfunc ErrorWithLog(source string, err error, log []byte, truncated bool) *VerifierError {\n\tconst whitespace = \"\\t\\r\\v\\n \"\n\n\t// Convert verifier log C string by truncating it on the first 0 byte\n\t// and trimming trailing whitespace before interpreting as a Go string.\n\tif i := bytes.IndexByte(log, 0); i != -1 {\n\t\tlog = log[:i]\n\t}\n\n\tlog = bytes.Trim(log, whitespace)\n\tif len(log) == 0 {\n\t\treturn &VerifierError{source, err, nil, truncated}\n\t}\n\n\tlogLines := bytes.Split(log, []byte{'\\n'})\n\tlines := make([]string, 0, len(logLines))\n\tfor _, line := range logLines {\n\t\t// Don't remove leading white space on individual lines. We rely on it\n\t\t// when outputting logs.\n\t\tlines = append(lines, string(bytes.TrimRight(line, whitespace)))\n\t}\n\n\treturn &VerifierError{source, err, lines, truncated}\n}\n\n// VerifierError includes information from the eBPF verifier.\n//\n// It summarises the log output, see Format if you want to output the full contents.\ntype VerifierError struct {\n\tsource string\n\t// The error which caused this error.\n\tCause error\n\t// The verifier output split into lines.\n\tLog []string\n\t// Whether the log output is truncated, based on several heuristics.\n\tTruncated bool\n}\n\nfunc (le *VerifierError) Unwrap() error {\n\treturn le.Cause\n}\n\nfunc (le *VerifierError) Error() string {\n\tlog := le.Log\n\tif n := len(log); n > 0 && strings.HasPrefix(log[n-1], \"processed \") {\n\t\t// Get rid of \"processed 39 insns (limit 1000000) ...\" from summary.\n\t\tlog = log[:n-1]\n\t}\n\n\tvar b strings.Builder\n\tfmt.Fprintf(&b, \"%s: %s\", le.source, le.Cause.Error())\n\n\tn := len(log)\n\tif n == 0 {\n\t\treturn b.String()\n\t}\n\n\tlines := log[n-1:]\n\tif n >= 2 && (includePreviousLine(log[n-1]) || le.Truncated) {\n\t\t// Add one more line of context if it aids understanding the error.\n\t\tlines = log[n-2:]\n\t}\n\n\tfor _, line := range lines {\n\t\tb.WriteString(\": \")\n\t\tb.WriteString(strings.TrimSpace(line))\n\t}\n\n\tomitted := len(le.Log) - len(lines)\n\tif omitted == 0 && !le.Truncated {\n\t\treturn b.String()\n\t}\n\n\tb.WriteString(\" (\")\n\tif le.Truncated {\n\t\tb.WriteString(\"truncated\")\n\t}\n\n\tif omitted > 0 {\n\t\tif le.Truncated {\n\t\t\tb.WriteString(\", \")\n\t\t}\n\t\tfmt.Fprintf(&b, \"%d line(s) omitted\", omitted)\n\t}\n\tb.WriteString(\")\")\n\n\treturn b.String()\n}\n\n// includePreviousLine returns true if the given line likely is better\n// understood with additional context from the preceding line.\nfunc includePreviousLine(line string) bool {\n\t// We need to find a good trade off between understandable error messages\n\t// and too much complexity here. Checking the string prefix is ok, requiring\n\t// regular expressions to do it is probably overkill.\n\n\tif strings.HasPrefix(line, \"\\t\") {\n\t\t// [13] STRUCT drm_rect size=16 vlen=4\n\t\t// \\tx1 type_id=2\n\t\treturn true\n\t}\n\n\tif len(line) >= 2 && line[0] == 'R' && line[1] >= '0' && line[1] <= '9' {\n\t\t// 0: (95) exit\n\t\t// R0 !read_ok\n\t\treturn true\n\t}\n\n\tif strings.HasPrefix(line, \"invalid bpf_context access\") {\n\t\t// 0: (79) r6 = *(u64 *)(r1 +0)\n\t\t// func '__x64_sys_recvfrom' arg0 type FWD is not a struct\n\t\t// invalid bpf_context access off=0 size=8\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// Format the error.\n//\n// Understood verbs are %s and %v, which are equivalent to calling Error(). %v\n// allows outputting additional information using the following flags:\n//\n//\t%+<width>v: Output the first <width> lines, or all lines if no width is given.\n//\t%-<width>v: Output the last <width> lines, or all lines if no width is given.\n//\n// Use width to specify how many lines to output. Use the '-' flag to output\n// lines from the end of the log instead of the beginning.\nfunc (le *VerifierError) Format(f fmt.State, verb rune) {\n\tswitch verb {\n\tcase 's':\n\t\t_, _ = io.WriteString(f, le.Error())\n\n\tcase 'v':\n\t\tn, haveWidth := f.Width()\n\t\tif !haveWidth || n > len(le.Log) {\n\t\t\tn = len(le.Log)\n\t\t}\n\n\t\tif !f.Flag('+') && !f.Flag('-') {\n\t\t\tif haveWidth {\n\t\t\t\t_, _ = io.WriteString(f, \"%!v(BADWIDTH)\")\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t_, _ = io.WriteString(f, le.Error())\n\t\t\treturn\n\t\t}\n\n\t\tif f.Flag('+') && f.Flag('-') {\n\t\t\t_, _ = io.WriteString(f, \"%!v(BADFLAG)\")\n\t\t\treturn\n\t\t}\n\n\t\tfmt.Fprintf(f, \"%s: %s:\", le.source, le.Cause.Error())\n\n\t\tomitted := len(le.Log) - n\n\t\tlines := le.Log[:n]\n\t\tif f.Flag('-') {\n\t\t\t// Print last instead of first lines.\n\t\t\tlines = le.Log[len(le.Log)-n:]\n\t\t\tif omitted > 0 {\n\t\t\t\tfmt.Fprintf(f, \"\\n\\t(%d line(s) omitted)\", omitted)\n\t\t\t}\n\t\t}\n\n\t\tfor _, line := range lines {\n\t\t\tfmt.Fprintf(f, \"\\n\\t%s\", line)\n\t\t}\n\n\t\tif !f.Flag('-') {\n\t\t\tif omitted > 0 {\n\t\t\t\tfmt.Fprintf(f, \"\\n\\t(%d line(s) omitted)\", omitted)\n\t\t\t}\n\t\t}\n\n\t\tif le.Truncated {\n\t\t\tfmt.Fprintf(f, \"\\n\\t(truncated)\")\n\t\t}\n\n\tdefault:\n\t\tfmt.Fprintf(f, \"%%!%c(BADVERB)\", verb)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/feature.go",
    "content": "package internal\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sync\"\n)\n\n// ErrNotSupported indicates that a feature is not supported by the current kernel.\nvar ErrNotSupported = errors.New(\"not supported\")\n\n// UnsupportedFeatureError is returned by FeatureTest() functions.\ntype UnsupportedFeatureError struct {\n\t// The minimum Linux mainline version required for this feature.\n\t// Used for the error string, and for sanity checking during testing.\n\tMinimumVersion Version\n\n\t// The name of the feature that isn't supported.\n\tName string\n}\n\nfunc (ufe *UnsupportedFeatureError) Error() string {\n\tif ufe.MinimumVersion.Unspecified() {\n\t\treturn fmt.Sprintf(\"%s not supported\", ufe.Name)\n\t}\n\treturn fmt.Sprintf(\"%s not supported (requires >= %s)\", ufe.Name, ufe.MinimumVersion)\n}\n\n// Is indicates that UnsupportedFeatureError is ErrNotSupported.\nfunc (ufe *UnsupportedFeatureError) Is(target error) bool {\n\treturn target == ErrNotSupported\n}\n\n// FeatureTest caches the result of a [FeatureTestFn].\n//\n// Fields should not be modified after creation.\ntype FeatureTest struct {\n\t// The name of the feature being detected.\n\tName string\n\t// Version in in the form Major.Minor[.Patch].\n\tVersion string\n\t// The feature test itself.\n\tFn FeatureTestFn\n\n\tmu     sync.RWMutex\n\tdone   bool\n\tresult error\n}\n\n// FeatureTestFn is used to determine whether the kernel supports\n// a certain feature.\n//\n// The return values have the following semantics:\n//\n//\terr == ErrNotSupported: the feature is not available\n//\terr == nil: the feature is available\n//\terr != nil: the test couldn't be executed\ntype FeatureTestFn func() error\n\n// NewFeatureTest is a convenient way to create a single [FeatureTest].\nfunc NewFeatureTest(name, version string, fn FeatureTestFn) func() error {\n\tft := &FeatureTest{\n\t\tName:    name,\n\t\tVersion: version,\n\t\tFn:      fn,\n\t}\n\n\treturn ft.execute\n}\n\n// execute the feature test.\n//\n// The result is cached if the test is conclusive.\n//\n// See [FeatureTestFn] for the meaning of the returned error.\nfunc (ft *FeatureTest) execute() error {\n\tft.mu.RLock()\n\tresult, done := ft.result, ft.done\n\tft.mu.RUnlock()\n\n\tif done {\n\t\treturn result\n\t}\n\n\tft.mu.Lock()\n\tdefer ft.mu.Unlock()\n\n\t// The test may have been executed by another caller while we were\n\t// waiting to acquire ft.mu.\n\tif ft.done {\n\t\treturn ft.result\n\t}\n\n\terr := ft.Fn()\n\tif err == nil {\n\t\tft.done = true\n\t\treturn nil\n\t}\n\n\tif errors.Is(err, ErrNotSupported) {\n\t\tvar v Version\n\t\tif ft.Version != \"\" {\n\t\t\tv, err = NewVersion(ft.Version)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"feature %s: %w\", ft.Name, err)\n\t\t\t}\n\t\t}\n\n\t\tft.done = true\n\t\tft.result = &UnsupportedFeatureError{\n\t\t\tMinimumVersion: v,\n\t\t\tName:           ft.Name,\n\t\t}\n\n\t\treturn ft.result\n\t}\n\n\t// We couldn't execute the feature test to a point\n\t// where it could make a determination.\n\t// Don't cache the result, just return it.\n\treturn fmt.Errorf(\"detect support for %s: %w\", ft.Name, err)\n}\n\n// FeatureMatrix groups multiple related feature tests into a map.\n//\n// Useful when there is a small number of discrete features which are known\n// at compile time.\n//\n// It must not be modified concurrently with calling [FeatureMatrix.Result].\ntype FeatureMatrix[K comparable] map[K]*FeatureTest\n\n// Result returns the outcome of the feature test for the given key.\n//\n// It's safe to call this function concurrently.\nfunc (fm FeatureMatrix[K]) Result(key K) error {\n\tft, ok := fm[key]\n\tif !ok {\n\t\treturn fmt.Errorf(\"no feature probe for %v\", key)\n\t}\n\n\treturn ft.execute()\n}\n\n// FeatureCache caches a potentially unlimited number of feature probes.\n//\n// Useful when there is a high cardinality for a feature test.\ntype FeatureCache[K comparable] struct {\n\tmu       sync.RWMutex\n\tnewTest  func(K) *FeatureTest\n\tfeatures map[K]*FeatureTest\n}\n\nfunc NewFeatureCache[K comparable](newTest func(K) *FeatureTest) *FeatureCache[K] {\n\treturn &FeatureCache[K]{\n\t\tnewTest:  newTest,\n\t\tfeatures: make(map[K]*FeatureTest),\n\t}\n}\n\nfunc (fc *FeatureCache[K]) Result(key K) error {\n\t// NB: Executing the feature test happens without fc.mu taken.\n\treturn fc.retrieve(key).execute()\n}\n\nfunc (fc *FeatureCache[K]) retrieve(key K) *FeatureTest {\n\tfc.mu.RLock()\n\tft := fc.features[key]\n\tfc.mu.RUnlock()\n\n\tif ft != nil {\n\t\treturn ft\n\t}\n\n\tfc.mu.Lock()\n\tdefer fc.mu.Unlock()\n\n\tif ft := fc.features[key]; ft != nil {\n\t\treturn ft\n\t}\n\n\tft = fc.newTest(key)\n\tfc.features[key] = ft\n\treturn ft\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/io.go",
    "content": "package internal\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sync\"\n)\n\n// NewBufferedSectionReader wraps an io.ReaderAt in an appropriately-sized\n// buffered reader. It is a convenience function for reading subsections of\n// ELF sections while minimizing the amount of read() syscalls made.\n//\n// Syscall overhead is non-negligible in continuous integration context\n// where ELFs might be accessed over virtual filesystems with poor random\n// access performance. Buffering reads makes sense because (sub)sections\n// end up being read completely anyway.\n//\n// Use instead of the r.Seek() + io.LimitReader() pattern.\nfunc NewBufferedSectionReader(ra io.ReaderAt, off, n int64) *bufio.Reader {\n\t// Clamp the size of the buffer to one page to avoid slurping large parts\n\t// of a file into memory. bufio.NewReader uses a hardcoded default buffer\n\t// of 4096. Allow arches with larger pages to allocate more, but don't\n\t// allocate a fixed 4k buffer if we only need to read a small segment.\n\tbuf := n\n\tif ps := int64(os.Getpagesize()); n > ps {\n\t\tbuf = ps\n\t}\n\n\treturn bufio.NewReaderSize(io.NewSectionReader(ra, off, n), int(buf))\n}\n\n// DiscardZeroes makes sure that all written bytes are zero\n// before discarding them.\ntype DiscardZeroes struct{}\n\nfunc (DiscardZeroes) Write(p []byte) (int, error) {\n\tfor _, b := range p {\n\t\tif b != 0 {\n\t\t\treturn 0, errors.New(\"encountered non-zero byte\")\n\t\t}\n\t}\n\treturn len(p), nil\n}\n\n// ReadAllCompressed decompresses a gzipped file into memory.\nfunc ReadAllCompressed(file string) ([]byte, error) {\n\tfh, err := os.Open(file)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer fh.Close()\n\n\tgz, err := gzip.NewReader(fh)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer gz.Close()\n\n\treturn io.ReadAll(gz)\n}\n\n// ReadUint64FromFile reads a uint64 from a file.\n//\n// format specifies the contents of the file in fmt.Scanf syntax.\nfunc ReadUint64FromFile(format string, path ...string) (uint64, error) {\n\tfilename := filepath.Join(path...)\n\tdata, err := os.ReadFile(filename)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"reading file %q: %w\", filename, err)\n\t}\n\n\tvar value uint64\n\tn, err := fmt.Fscanf(bytes.NewReader(data), format, &value)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"parsing file %q: %w\", filename, err)\n\t}\n\tif n != 1 {\n\t\treturn 0, fmt.Errorf(\"parsing file %q: expected 1 item, got %d\", filename, n)\n\t}\n\n\treturn value, nil\n}\n\ntype uint64FromFileKey struct {\n\tformat, path string\n}\n\nvar uint64FromFileCache = struct {\n\tsync.RWMutex\n\tvalues map[uint64FromFileKey]uint64\n}{\n\tvalues: map[uint64FromFileKey]uint64{},\n}\n\n// ReadUint64FromFileOnce is like readUint64FromFile but memoizes the result.\nfunc ReadUint64FromFileOnce(format string, path ...string) (uint64, error) {\n\tfilename := filepath.Join(path...)\n\tkey := uint64FromFileKey{format, filename}\n\n\tuint64FromFileCache.RLock()\n\tif value, ok := uint64FromFileCache.values[key]; ok {\n\t\tuint64FromFileCache.RUnlock()\n\t\treturn value, nil\n\t}\n\tuint64FromFileCache.RUnlock()\n\n\tvalue, err := ReadUint64FromFile(format, filename)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tuint64FromFileCache.Lock()\n\tdefer uint64FromFileCache.Unlock()\n\n\tif value, ok := uint64FromFileCache.values[key]; ok {\n\t\t// Someone else got here before us, use what is cached.\n\t\treturn value, nil\n\t}\n\n\tuint64FromFileCache.values[key] = value\n\treturn value, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/kconfig/kconfig.go",
    "content": "package kconfig\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n)\n\n// Find find a kconfig file on the host.\n// It first reads from /boot/config- of the current running kernel and tries\n// /proc/config.gz if nothing was found in /boot.\n// If none of the file provide a kconfig, it returns an error.\nfunc Find() (*os.File, error) {\n\tkernelRelease, err := internal.KernelRelease()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot get kernel release: %w\", err)\n\t}\n\n\tpath := \"/boot/config-\" + kernelRelease\n\tf, err := os.Open(path)\n\tif err == nil {\n\t\treturn f, nil\n\t}\n\n\tf, err = os.Open(\"/proc/config.gz\")\n\tif err == nil {\n\t\treturn f, nil\n\t}\n\n\treturn nil, fmt.Errorf(\"neither %s nor /proc/config.gz provide a kconfig\", path)\n}\n\n// Parse parses the kconfig file for which a reader is given.\n// All the CONFIG_* which are in filter and which are set set will be\n// put in the returned map as key with their corresponding value as map value.\n// If filter is nil, no filtering will occur.\n// If the kconfig file is not valid, error will be returned.\nfunc Parse(source io.ReaderAt, filter map[string]struct{}) (map[string]string, error) {\n\tvar r io.Reader\n\tzr, err := gzip.NewReader(io.NewSectionReader(source, 0, math.MaxInt64))\n\tif err != nil {\n\t\tr = io.NewSectionReader(source, 0, math.MaxInt64)\n\t} else {\n\t\t// Source is gzip compressed, transparently decompress.\n\t\tr = zr\n\t}\n\n\tret := make(map[string]string, len(filter))\n\n\ts := bufio.NewScanner(r)\n\n\tfor s.Scan() {\n\t\tline := s.Bytes()\n\t\terr = processKconfigLine(line, ret, filter)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"cannot parse line: %w\", err)\n\t\t}\n\n\t\tif filter != nil && len(ret) == len(filter) {\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif err := s.Err(); err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot parse: %w\", err)\n\t}\n\n\tif zr != nil {\n\t\treturn ret, zr.Close()\n\t}\n\n\treturn ret, nil\n}\n\n// Golang translation of libbpf bpf_object__process_kconfig_line():\n// https://github.com/libbpf/libbpf/blob/fbd60dbff51c870f5e80a17c4f2fd639eb80af90/src/libbpf.c#L1874\n// It does the same checks but does not put the data inside the BPF map.\nfunc processKconfigLine(line []byte, m map[string]string, filter map[string]struct{}) error {\n\t// Ignore empty lines and \"# CONFIG_* is not set\".\n\tif !bytes.HasPrefix(line, []byte(\"CONFIG_\")) {\n\t\treturn nil\n\t}\n\n\tkey, value, found := bytes.Cut(line, []byte{'='})\n\tif !found {\n\t\treturn fmt.Errorf(\"line %q does not contain separator '='\", line)\n\t}\n\n\tif len(value) == 0 {\n\t\treturn fmt.Errorf(\"line %q has no value\", line)\n\t}\n\n\tif filter != nil {\n\t\t// NB: map[string(key)] gets special optimisation help from the compiler\n\t\t// and doesn't allocate. Don't turn this into a variable.\n\t\t_, ok := filter[string(key)]\n\t\tif !ok {\n\t\t\treturn nil\n\t\t}\n\t}\n\n\t// This can seem odd, but libbpf only sets the value the first time the key is\n\t// met:\n\t// https://github.com/torvalds/linux/blob/0d85b27b0cc6/tools/lib/bpf/libbpf.c#L1906-L1908\n\t_, ok := m[string(key)]\n\tif !ok {\n\t\tm[string(key)] = string(value)\n\t}\n\n\treturn nil\n}\n\n// PutValue translates the value given as parameter depending on the BTF\n// type, the translated value is then written to the byte array.\nfunc PutValue(data []byte, typ btf.Type, value string) error {\n\ttyp = btf.UnderlyingType(typ)\n\n\tswitch value {\n\tcase \"y\", \"n\", \"m\":\n\t\treturn putValueTri(data, typ, value)\n\tdefault:\n\t\tif strings.HasPrefix(value, `\"`) {\n\t\t\treturn putValueString(data, typ, value)\n\t\t}\n\t\treturn putValueNumber(data, typ, value)\n\t}\n}\n\n// Golang translation of libbpf_tristate enum:\n// https://github.com/libbpf/libbpf/blob/fbd60dbff51c870f5e80a17c4f2fd639eb80af90/src/bpf_helpers.h#L169\ntype triState int\n\nconst (\n\tTriNo     triState = 0\n\tTriYes    triState = 1\n\tTriModule triState = 2\n)\n\nfunc putValueTri(data []byte, typ btf.Type, value string) error {\n\tswitch v := typ.(type) {\n\tcase *btf.Int:\n\t\tif v.Encoding != btf.Bool {\n\t\t\treturn fmt.Errorf(\"cannot add tri value, expected btf.Bool, got: %v\", v.Encoding)\n\t\t}\n\n\t\tif v.Size != 1 {\n\t\t\treturn fmt.Errorf(\"cannot add tri value, expected size of 1 byte, got: %d\", v.Size)\n\t\t}\n\n\t\tswitch value {\n\t\tcase \"y\":\n\t\t\tdata[0] = 1\n\t\tcase \"n\":\n\t\t\tdata[0] = 0\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"cannot use %q for btf.Bool\", value)\n\t\t}\n\tcase *btf.Enum:\n\t\tif v.Name != \"libbpf_tristate\" {\n\t\t\treturn fmt.Errorf(\"cannot use enum %q, only libbpf_tristate is supported\", v.Name)\n\t\t}\n\n\t\tvar tri triState\n\t\tswitch value {\n\t\tcase \"y\":\n\t\t\ttri = TriYes\n\t\tcase \"m\":\n\t\t\ttri = TriModule\n\t\tcase \"n\":\n\t\t\ttri = TriNo\n\t\tdefault:\n\t\t\treturn fmt.Errorf(\"value %q is not support for libbpf_tristate\", value)\n\t\t}\n\n\t\tinternal.NativeEndian.PutUint64(data, uint64(tri))\n\tdefault:\n\t\treturn fmt.Errorf(\"cannot add number value, expected btf.Int or btf.Enum, got: %T\", v)\n\t}\n\n\treturn nil\n}\n\nfunc putValueString(data []byte, typ btf.Type, value string) error {\n\tarray, ok := typ.(*btf.Array)\n\tif !ok {\n\t\treturn fmt.Errorf(\"cannot add string value, expected btf.Array, got %T\", array)\n\t}\n\n\tcontentType, ok := btf.UnderlyingType(array.Type).(*btf.Int)\n\tif !ok {\n\t\treturn fmt.Errorf(\"cannot add string value, expected array of btf.Int, got %T\", contentType)\n\t}\n\n\t// Any Int, which is not bool, of one byte could be used to store char:\n\t// https://github.com/torvalds/linux/blob/1a5304fecee5/tools/lib/bpf/libbpf.c#L3637-L3638\n\tif contentType.Size != 1 && contentType.Encoding != btf.Bool {\n\t\treturn fmt.Errorf(\"cannot add string value, expected array of btf.Int of size 1, got array of btf.Int of size: %v\", contentType.Size)\n\t}\n\n\tif !strings.HasPrefix(value, `\"`) || !strings.HasSuffix(value, `\"`) {\n\t\treturn fmt.Errorf(`value %q must start and finish with '\"'`, value)\n\t}\n\n\tstr := strings.Trim(value, `\"`)\n\n\t// We need to trim string if the bpf array is smaller.\n\tif uint32(len(str)) >= array.Nelems {\n\t\tstr = str[:array.Nelems]\n\t}\n\n\t// Write the string content to .kconfig.\n\tcopy(data, str)\n\n\treturn nil\n}\n\nfunc putValueNumber(data []byte, typ btf.Type, value string) error {\n\tinteger, ok := typ.(*btf.Int)\n\tif !ok {\n\t\treturn fmt.Errorf(\"cannot add number value, expected *btf.Int, got: %T\", integer)\n\t}\n\n\tsize := integer.Size\n\tsizeInBits := size * 8\n\n\tvar n uint64\n\tvar err error\n\tif integer.Encoding == btf.Signed {\n\t\tparsed, e := strconv.ParseInt(value, 0, int(sizeInBits))\n\n\t\tn = uint64(parsed)\n\t\terr = e\n\t} else {\n\t\tparsed, e := strconv.ParseUint(value, 0, int(sizeInBits))\n\n\t\tn = uint64(parsed)\n\t\terr = e\n\t}\n\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot parse value: %w\", err)\n\t}\n\n\tswitch size {\n\tcase 1:\n\t\tdata[0] = byte(n)\n\tcase 2:\n\t\tinternal.NativeEndian.PutUint16(data, uint16(n))\n\tcase 4:\n\t\tinternal.NativeEndian.PutUint32(data, uint32(n))\n\tcase 8:\n\t\tinternal.NativeEndian.PutUint64(data, uint64(n))\n\tdefault:\n\t\treturn fmt.Errorf(\"size (%d) is not valid, expected: 1, 2, 4 or 8\", size)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/memoize.go",
    "content": "package internal\n\nimport (\n\t\"sync\"\n)\n\ntype memoizedFunc[T any] struct {\n\tonce   sync.Once\n\tfn     func() (T, error)\n\tresult T\n\terr    error\n}\n\nfunc (mf *memoizedFunc[T]) do() (T, error) {\n\tmf.once.Do(func() {\n\t\tmf.result, mf.err = mf.fn()\n\t})\n\treturn mf.result, mf.err\n}\n\n// Memoize the result of a function call.\n//\n// fn is only ever called once, even if it returns an error.\nfunc Memoize[T any](fn func() (T, error)) func() (T, error) {\n\treturn (&memoizedFunc[T]{fn: fn}).do\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/output.go",
    "content": "package internal\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"go/format\"\n\t\"go/scanner\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n\t\"unicode\"\n)\n\n// Identifier turns a C style type or field name into an exportable Go equivalent.\nfunc Identifier(str string) string {\n\tprev := rune(-1)\n\treturn strings.Map(func(r rune) rune {\n\t\t// See https://golang.org/ref/spec#Identifiers\n\t\tswitch {\n\t\tcase unicode.IsLetter(r):\n\t\t\tif prev == -1 {\n\t\t\t\tr = unicode.ToUpper(r)\n\t\t\t}\n\n\t\tcase r == '_':\n\t\t\tswitch {\n\t\t\t// The previous rune was deleted, or we are at the\n\t\t\t// beginning of the string.\n\t\t\tcase prev == -1:\n\t\t\t\tfallthrough\n\n\t\t\t// The previous rune is a lower case letter or a digit.\n\t\t\tcase unicode.IsDigit(prev) || (unicode.IsLetter(prev) && unicode.IsLower(prev)):\n\t\t\t\t// delete the current rune, and force the\n\t\t\t\t// next character to be uppercased.\n\t\t\t\tr = -1\n\t\t\t}\n\n\t\tcase unicode.IsDigit(r):\n\n\t\tdefault:\n\t\t\t// Delete the current rune. prev is unchanged.\n\t\t\treturn -1\n\t\t}\n\n\t\tprev = r\n\t\treturn r\n\t}, str)\n}\n\n// WriteFormatted outputs a formatted src into out.\n//\n// If formatting fails it returns an informative error message.\nfunc WriteFormatted(src []byte, out io.Writer) error {\n\tformatted, err := format.Source(src)\n\tif err == nil {\n\t\t_, err = out.Write(formatted)\n\t\treturn err\n\t}\n\n\tvar el scanner.ErrorList\n\tif !errors.As(err, &el) {\n\t\treturn err\n\t}\n\n\tvar nel scanner.ErrorList\n\tfor _, err := range el {\n\t\tif !err.Pos.IsValid() {\n\t\t\tnel = append(nel, err)\n\t\t\tcontinue\n\t\t}\n\n\t\tbuf := src[err.Pos.Offset:]\n\t\tnl := bytes.IndexRune(buf, '\\n')\n\t\tif nl == -1 {\n\t\t\tnel = append(nel, err)\n\t\t\tcontinue\n\t\t}\n\n\t\terr.Msg += \": \" + string(buf[:nl])\n\t\tnel = append(nel, err)\n\t}\n\n\treturn nel\n}\n\n// GoTypeName is like %T, but elides the package name.\n//\n// Pointers to a type are peeled off.\nfunc GoTypeName(t any) string {\n\trT := reflect.TypeOf(t)\n\tfor rT.Kind() == reflect.Pointer {\n\t\trT = rT.Elem()\n\t}\n\t// Doesn't return the correct Name for generic types due to https://github.com/golang/go/issues/55924\n\treturn rT.Name()\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/pinning.go",
    "content": "package internal\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nfunc Pin(currentPath, newPath string, fd *sys.FD) error {\n\tif newPath == \"\" {\n\t\treturn errors.New(\"given pinning path cannot be empty\")\n\t}\n\tif currentPath == newPath {\n\t\treturn nil\n\t}\n\n\tfsType, err := FSType(filepath.Dir(newPath))\n\tif err != nil {\n\t\treturn err\n\t}\n\tif fsType != unix.BPF_FS_MAGIC {\n\t\treturn fmt.Errorf(\"%s is not on a bpf filesystem\", newPath)\n\t}\n\n\tdefer runtime.KeepAlive(fd)\n\n\tif currentPath == \"\" {\n\t\treturn sys.ObjPin(&sys.ObjPinAttr{\n\t\t\tPathname: sys.NewStringPointer(newPath),\n\t\t\tBpfFd:    fd.Uint(),\n\t\t})\n\t}\n\n\t// Renameat2 is used instead of os.Rename to disallow the new path replacing\n\t// an existing path.\n\terr = unix.Renameat2(unix.AT_FDCWD, currentPath, unix.AT_FDCWD, newPath, unix.RENAME_NOREPLACE)\n\tif err == nil {\n\t\t// Object is now moved to the new pinning path.\n\t\treturn nil\n\t}\n\tif !os.IsNotExist(err) {\n\t\treturn fmt.Errorf(\"unable to move pinned object to new path %v: %w\", newPath, err)\n\t}\n\t// Internal state not in sync with the file system so let's fix it.\n\treturn sys.ObjPin(&sys.ObjPinAttr{\n\t\tPathname: sys.NewStringPointer(newPath),\n\t\tBpfFd:    fd.Uint(),\n\t})\n}\n\nfunc Unpin(pinnedPath string) error {\n\tif pinnedPath == \"\" {\n\t\treturn nil\n\t}\n\terr := os.Remove(pinnedPath)\n\tif err == nil || os.IsNotExist(err) {\n\t\treturn nil\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/platform.go",
    "content": "package internal\n\nimport (\n\t\"runtime\"\n)\n\n// PlatformPrefix returns the platform-dependent syscall wrapper prefix used by\n// the linux kernel.\n//\n// Based on https://github.com/golang/go/blob/master/src/go/build/syslist.go\n// and https://github.com/libbpf/libbpf/blob/master/src/libbpf.c#L10047\nfunc PlatformPrefix() string {\n\tswitch runtime.GOARCH {\n\tcase \"386\":\n\t\treturn \"__ia32_\"\n\tcase \"amd64\", \"amd64p32\":\n\t\treturn \"__x64_\"\n\n\tcase \"arm\", \"armbe\":\n\t\treturn \"__arm_\"\n\tcase \"arm64\", \"arm64be\":\n\t\treturn \"__arm64_\"\n\n\tcase \"mips\", \"mipsle\", \"mips64\", \"mips64le\", \"mips64p32\", \"mips64p32le\":\n\t\treturn \"__mips_\"\n\n\tcase \"s390\":\n\t\treturn \"__s390_\"\n\tcase \"s390x\":\n\t\treturn \"__s390x_\"\n\n\tcase \"riscv\", \"riscv64\":\n\t\treturn \"__riscv_\"\n\n\tcase \"ppc\":\n\t\treturn \"__powerpc_\"\n\tcase \"ppc64\", \"ppc64le\":\n\t\treturn \"__powerpc64_\"\n\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/prog.go",
    "content": "package internal\n\n// EmptyBPFContext is the smallest-possible BPF input context to be used for\n// invoking `Program.{Run,Benchmark,Test}`.\n//\n// Programs require a context input buffer of at least 15 bytes. Looking in\n// net/bpf/test_run.c, bpf_test_init() requires that the input is at least\n// ETH_HLEN (14) bytes. As of Linux commit fd18942 (\"bpf: Don't redirect packets\n// with invalid pkt_len\"), it also requires the skb to be non-empty after\n// removing the Layer 2 header.\nvar EmptyBPFContext = make([]byte, 15)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/statfs.go",
    "content": "package internal\n\nimport (\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nfunc FSType(path string) (int64, error) {\n\tvar statfs unix.Statfs_t\n\tif err := unix.Statfs(path, &statfs); err != nil {\n\t\treturn 0, err\n\t}\n\n\tfsType := int64(statfs.Type)\n\tif unsafe.Sizeof(statfs.Type) == 4 {\n\t\t// We're on a 32 bit arch, where statfs.Type is int32. bpfFSType is a\n\t\t// negative number when interpreted as int32 so we need to cast via\n\t\t// uint32 to avoid sign extension.\n\t\tfsType = int64(uint32(statfs.Type))\n\t}\n\treturn fsType, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/doc.go",
    "content": "// Package sys contains bindings for the BPF syscall.\npackage sys\n\n// Regenerate types.go by invoking go generate in the current directory.\n\n//go:generate go run github.com/cilium/ebpf/internal/cmd/gentypes ../../btf/testdata/vmlinux.btf.gz\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/fd.go",
    "content": "package sys\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"runtime\"\n\t\"strconv\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar ErrClosedFd = unix.EBADF\n\ntype FD struct {\n\traw int\n}\n\nfunc newFD(value int) *FD {\n\tif onLeakFD != nil {\n\t\t// Attempt to store the caller's stack for the given fd value.\n\t\t// Panic if fds contains an existing stack for the fd.\n\t\told, exist := fds.LoadOrStore(value, callersFrames())\n\t\tif exist {\n\t\t\tf := old.(*runtime.Frames)\n\t\t\tpanic(fmt.Sprintf(\"found existing stack for fd %d:\\n%s\", value, FormatFrames(f)))\n\t\t}\n\t}\n\n\tfd := &FD{value}\n\truntime.SetFinalizer(fd, (*FD).finalize)\n\treturn fd\n}\n\n// finalize is set as the FD's runtime finalizer and\n// sends a leak trace before calling FD.Close().\nfunc (fd *FD) finalize() {\n\tif fd.raw < 0 {\n\t\treturn\n\t}\n\n\t// Invoke the fd leak callback. Calls LoadAndDelete to guarantee the callback\n\t// is invoked at most once for one sys.FD allocation, runtime.Frames can only\n\t// be unwound once.\n\tf, ok := fds.LoadAndDelete(fd.Int())\n\tif ok && onLeakFD != nil {\n\t\tonLeakFD(f.(*runtime.Frames))\n\t}\n\n\t_ = fd.Close()\n}\n\n// NewFD wraps a raw fd with a finalizer.\n//\n// You must not use the raw fd after calling this function, since the underlying\n// file descriptor number may change. This is because the BPF UAPI assumes that\n// zero is not a valid fd value.\nfunc NewFD(value int) (*FD, error) {\n\tif value < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid fd %d\", value)\n\t}\n\n\tfd := newFD(value)\n\tif value != 0 {\n\t\treturn fd, nil\n\t}\n\n\tdup, err := fd.Dup()\n\t_ = fd.Close()\n\treturn dup, err\n}\n\nfunc (fd *FD) String() string {\n\treturn strconv.FormatInt(int64(fd.raw), 10)\n}\n\nfunc (fd *FD) Int() int {\n\treturn fd.raw\n}\n\nfunc (fd *FD) Uint() uint32 {\n\tif fd.raw < 0 || int64(fd.raw) > math.MaxUint32 {\n\t\t// Best effort: this is the number most likely to be an invalid file\n\t\t// descriptor. It is equal to -1 (on two's complement arches).\n\t\treturn math.MaxUint32\n\t}\n\treturn uint32(fd.raw)\n}\n\nfunc (fd *FD) Close() error {\n\tif fd.raw < 0 {\n\t\treturn nil\n\t}\n\n\treturn unix.Close(fd.disown())\n}\n\nfunc (fd *FD) disown() int {\n\tvalue := int(fd.raw)\n\tfds.Delete(int(value))\n\tfd.raw = -1\n\n\truntime.SetFinalizer(fd, nil)\n\treturn value\n}\n\nfunc (fd *FD) Dup() (*FD, error) {\n\tif fd.raw < 0 {\n\t\treturn nil, ErrClosedFd\n\t}\n\n\t// Always require the fd to be larger than zero: the BPF API treats the value\n\t// as \"no argument provided\".\n\tdup, err := unix.FcntlInt(uintptr(fd.raw), unix.F_DUPFD_CLOEXEC, 1)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't dup fd: %v\", err)\n\t}\n\n\treturn newFD(dup), nil\n}\n\n// File takes ownership of FD and turns it into an [*os.File].\n//\n// You must not use the FD after the call returns.\n//\n// Returns nil if the FD is not valid.\nfunc (fd *FD) File(name string) *os.File {\n\tif fd.raw < 0 {\n\t\treturn nil\n\t}\n\n\treturn os.NewFile(uintptr(fd.disown()), name)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/fd_trace.go",
    "content": "package sys\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"sync\"\n)\n\n// OnLeakFD controls tracing [FD] lifetime to detect resources that are not\n// closed by Close().\n//\n// If fn is not nil, tracing is enabled for all FDs created going forward. fn is\n// invoked for all FDs that are closed by the garbage collector instead of an\n// explicit Close() by a caller. Calling OnLeakFD twice with a non-nil fn\n// (without disabling tracing in the meantime) will cause a panic.\n//\n// If fn is nil, tracing will be disabled. Any FDs that have not been closed are\n// considered to be leaked, fn will be invoked for them, and the process will be\n// terminated.\n//\n// fn will be invoked at most once for every unique sys.FD allocation since a\n// runtime.Frames can only be unwound once.\nfunc OnLeakFD(fn func(*runtime.Frames)) {\n\t// Enable leak tracing if new fn is provided.\n\tif fn != nil {\n\t\tif onLeakFD != nil {\n\t\t\tpanic(\"OnLeakFD called twice with non-nil fn\")\n\t\t}\n\n\t\tonLeakFD = fn\n\t\treturn\n\t}\n\n\t// fn is nil past this point.\n\n\tif onLeakFD == nil {\n\t\treturn\n\t}\n\n\t// Call onLeakFD for all open fds.\n\tif fs := flushFrames(); len(fs) != 0 {\n\t\tfor _, f := range fs {\n\t\t\tonLeakFD(f)\n\t\t}\n\t}\n\n\tonLeakFD = nil\n}\n\nvar onLeakFD func(*runtime.Frames)\n\n// fds is a registry of all file descriptors wrapped into sys.fds that were\n// created while an fd tracer was active.\nvar fds sync.Map // map[int]*runtime.Frames\n\n// flushFrames removes all elements from fds and returns them as a slice. This\n// deals with the fact that a runtime.Frames can only be unwound once using\n// Next().\nfunc flushFrames() []*runtime.Frames {\n\tvar frames []*runtime.Frames\n\tfds.Range(func(key, value any) bool {\n\t\tframes = append(frames, value.(*runtime.Frames))\n\t\tfds.Delete(key)\n\t\treturn true\n\t})\n\treturn frames\n}\n\nfunc callersFrames() *runtime.Frames {\n\tc := make([]uintptr, 32)\n\n\t// Skip runtime.Callers and this function.\n\ti := runtime.Callers(2, c)\n\tif i == 0 {\n\t\treturn nil\n\t}\n\n\treturn runtime.CallersFrames(c)\n}\n\n// FormatFrames formats a runtime.Frames as a human-readable string.\nfunc FormatFrames(fs *runtime.Frames) string {\n\tvar b bytes.Buffer\n\tfor {\n\t\tf, more := fs.Next()\n\t\tb.WriteString(fmt.Sprintf(\"\\t%s+%#x\\n\\t\\t%s:%d\\n\", f.Function, f.PC-f.Entry, f.File, f.Line))\n\t\tif !more {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn b.String()\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/mapflags_string.go",
    "content": "// Code generated by \"stringer -type MapFlags\"; DO NOT EDIT.\n\npackage sys\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[BPF_F_NO_PREALLOC-1]\n\t_ = x[BPF_F_NO_COMMON_LRU-2]\n\t_ = x[BPF_F_NUMA_NODE-4]\n\t_ = x[BPF_F_RDONLY-8]\n\t_ = x[BPF_F_WRONLY-16]\n\t_ = x[BPF_F_STACK_BUILD_ID-32]\n\t_ = x[BPF_F_ZERO_SEED-64]\n\t_ = x[BPF_F_RDONLY_PROG-128]\n\t_ = x[BPF_F_WRONLY_PROG-256]\n\t_ = x[BPF_F_CLONE-512]\n\t_ = x[BPF_F_MMAPABLE-1024]\n\t_ = x[BPF_F_PRESERVE_ELEMS-2048]\n\t_ = x[BPF_F_INNER_MAP-4096]\n}\n\nconst _MapFlags_name = \"BPF_F_NO_PREALLOCBPF_F_NO_COMMON_LRUBPF_F_NUMA_NODEBPF_F_RDONLYBPF_F_WRONLYBPF_F_STACK_BUILD_IDBPF_F_ZERO_SEEDBPF_F_RDONLY_PROGBPF_F_WRONLY_PROGBPF_F_CLONEBPF_F_MMAPABLEBPF_F_PRESERVE_ELEMSBPF_F_INNER_MAP\"\n\nvar _MapFlags_map = map[MapFlags]string{\n\t1:    _MapFlags_name[0:17],\n\t2:    _MapFlags_name[17:36],\n\t4:    _MapFlags_name[36:51],\n\t8:    _MapFlags_name[51:63],\n\t16:   _MapFlags_name[63:75],\n\t32:   _MapFlags_name[75:95],\n\t64:   _MapFlags_name[95:110],\n\t128:  _MapFlags_name[110:127],\n\t256:  _MapFlags_name[127:144],\n\t512:  _MapFlags_name[144:155],\n\t1024: _MapFlags_name[155:169],\n\t2048: _MapFlags_name[169:189],\n\t4096: _MapFlags_name[189:204],\n}\n\nfunc (i MapFlags) String() string {\n\tif str, ok := _MapFlags_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"MapFlags(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/ptr.go",
    "content": "package sys\n\nimport (\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// NewPointer creates a 64-bit pointer from an unsafe Pointer.\nfunc NewPointer(ptr unsafe.Pointer) Pointer {\n\treturn Pointer{ptr: ptr}\n}\n\n// NewSlicePointer creates a 64-bit pointer from a byte slice.\nfunc NewSlicePointer(buf []byte) Pointer {\n\tif len(buf) == 0 {\n\t\treturn Pointer{}\n\t}\n\n\treturn Pointer{ptr: unsafe.Pointer(&buf[0])}\n}\n\n// NewSlicePointerLen creates a 64-bit pointer from a byte slice.\n//\n// Useful to assign both the pointer and the length in one go.\nfunc NewSlicePointerLen(buf []byte) (Pointer, uint32) {\n\treturn NewSlicePointer(buf), uint32(len(buf))\n}\n\n// NewStringPointer creates a 64-bit pointer from a string.\nfunc NewStringPointer(str string) Pointer {\n\tp, err := unix.BytePtrFromString(str)\n\tif err != nil {\n\t\treturn Pointer{}\n\t}\n\n\treturn Pointer{ptr: unsafe.Pointer(p)}\n}\n\n// NewStringSlicePointer allocates an array of Pointers to each string in the\n// given slice of strings and returns a 64-bit pointer to the start of the\n// resulting array.\n//\n// Use this function to pass arrays of strings as syscall arguments.\nfunc NewStringSlicePointer(strings []string) Pointer {\n\tsp := make([]Pointer, 0, len(strings))\n\tfor _, s := range strings {\n\t\tsp = append(sp, NewStringPointer(s))\n\t}\n\n\treturn Pointer{ptr: unsafe.Pointer(&sp[0])}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/ptr_32_be.go",
    "content": "//go:build armbe || mips || mips64p32\n\npackage sys\n\nimport (\n\t\"unsafe\"\n)\n\n// Pointer wraps an unsafe.Pointer to be 64bit to\n// conform to the syscall specification.\ntype Pointer struct {\n\tpad uint32\n\tptr unsafe.Pointer\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/ptr_32_le.go",
    "content": "//go:build 386 || amd64p32 || arm || mipsle || mips64p32le\n\npackage sys\n\nimport (\n\t\"unsafe\"\n)\n\n// Pointer wraps an unsafe.Pointer to be 64bit to\n// conform to the syscall specification.\ntype Pointer struct {\n\tptr unsafe.Pointer\n\tpad uint32\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/ptr_64.go",
    "content": "//go:build !386 && !amd64p32 && !arm && !mipsle && !mips64p32le && !armbe && !mips && !mips64p32\n\npackage sys\n\nimport (\n\t\"unsafe\"\n)\n\n// Pointer wraps an unsafe.Pointer to be 64bit to\n// conform to the syscall specification.\ntype Pointer struct {\n\tptr unsafe.Pointer\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/signals.go",
    "content": "package sys\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// A sigset containing only SIGPROF.\nvar profSet unix.Sigset_t\n\nfunc init() {\n\t// See sigsetAdd for details on the implementation. Open coded here so\n\t// that the compiler will check the constant calculations for us.\n\tprofSet.Val[sigprofBit/wordBits] |= 1 << (sigprofBit % wordBits)\n}\n\n// maskProfilerSignal locks the calling goroutine to its underlying OS thread\n// and adds SIGPROF to the thread's signal mask. This prevents pprof from\n// interrupting expensive syscalls like e.g. BPF_PROG_LOAD.\n//\n// The caller must defer unmaskProfilerSignal() to reverse the operation.\nfunc maskProfilerSignal() {\n\truntime.LockOSThread()\n\n\tif err := unix.PthreadSigmask(unix.SIG_BLOCK, &profSet, nil); err != nil {\n\t\truntime.UnlockOSThread()\n\t\tpanic(fmt.Errorf(\"masking profiler signal: %w\", err))\n\t}\n}\n\n// unmaskProfilerSignal removes SIGPROF from the underlying thread's signal\n// mask, allowing it to be interrupted for profiling once again.\n//\n// It also unlocks the current goroutine from its underlying OS thread.\nfunc unmaskProfilerSignal() {\n\tdefer runtime.UnlockOSThread()\n\n\tif err := unix.PthreadSigmask(unix.SIG_UNBLOCK, &profSet, nil); err != nil {\n\t\tpanic(fmt.Errorf(\"unmasking profiler signal: %w\", err))\n\t}\n}\n\nconst (\n\t// Signal is the nth bit in the bitfield.\n\tsigprofBit = int(unix.SIGPROF - 1)\n\t// The number of bits in one Sigset_t word.\n\twordBits = int(unsafe.Sizeof(unix.Sigset_t{}.Val[0])) * 8\n)\n\n// sigsetAdd adds signal to set.\n//\n// Note: Sigset_t.Val's value type is uint32 or uint64 depending on the arch.\n// This function must be able to deal with both and so must avoid any direct\n// references to u32 or u64 types.\nfunc sigsetAdd(set *unix.Sigset_t, signal unix.Signal) error {\n\tif signal < 1 {\n\t\treturn fmt.Errorf(\"signal %d must be larger than 0\", signal)\n\t}\n\n\t// For amd64, runtime.sigaddset() performs the following operation:\n\t// set[(signal-1)/32] |= 1 << ((uint32(signal) - 1) & 31)\n\t//\n\t// This trick depends on sigset being two u32's, causing a signal in the the\n\t// bottom 31 bits to be written to the low word if bit 32 is low, or the high\n\t// word if bit 32 is high.\n\n\t// Signal is the nth bit in the bitfield.\n\tbit := int(signal - 1)\n\t// Word within the sigset the bit needs to be written to.\n\tword := bit / wordBits\n\n\tif word >= len(set.Val) {\n\t\treturn fmt.Errorf(\"signal %d does not fit within unix.Sigset_t\", signal)\n\t}\n\n\t// Write the signal bit into its corresponding word at the corrected offset.\n\tset.Val[word] |= 1 << (bit % wordBits)\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/syscall.go",
    "content": "package sys\n\nimport (\n\t\"runtime\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// ENOTSUPP is a Linux internal error code that has leaked into UAPI.\n//\n// It is not the same as ENOTSUP or EOPNOTSUPP.\nvar ENOTSUPP = syscall.Errno(524)\n\n// BPF wraps SYS_BPF.\n//\n// Any pointers contained in attr must use the Pointer type from this package.\nfunc BPF(cmd Cmd, attr unsafe.Pointer, size uintptr) (uintptr, error) {\n\t// Prevent the Go profiler from repeatedly interrupting the verifier,\n\t// which could otherwise lead to a livelock due to receiving EAGAIN.\n\tif cmd == BPF_PROG_LOAD || cmd == BPF_PROG_RUN {\n\t\tmaskProfilerSignal()\n\t\tdefer unmaskProfilerSignal()\n\t}\n\n\tfor {\n\t\tr1, _, errNo := unix.Syscall(unix.SYS_BPF, uintptr(cmd), uintptr(attr), size)\n\t\truntime.KeepAlive(attr)\n\n\t\t// As of ~4.20 the verifier can be interrupted by a signal,\n\t\t// and returns EAGAIN in that case.\n\t\tif errNo == unix.EAGAIN && cmd == BPF_PROG_LOAD {\n\t\t\tcontinue\n\t\t}\n\n\t\tvar err error\n\t\tif errNo != 0 {\n\t\t\terr = wrappedErrno{errNo}\n\t\t}\n\n\t\treturn r1, err\n\t}\n}\n\n// Info is implemented by all structs that can be passed to the ObjInfo syscall.\n//\n//\tMapInfo\n//\tProgInfo\n//\tLinkInfo\n//\tBtfInfo\ntype Info interface {\n\tinfo() (unsafe.Pointer, uint32)\n}\n\nvar _ Info = (*MapInfo)(nil)\n\nfunc (i *MapInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nvar _ Info = (*ProgInfo)(nil)\n\nfunc (i *ProgInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nvar _ Info = (*LinkInfo)(nil)\n\nfunc (i *LinkInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\nvar _ Info = (*BtfInfo)(nil)\n\nfunc (i *BtfInfo) info() (unsafe.Pointer, uint32) {\n\treturn unsafe.Pointer(i), uint32(unsafe.Sizeof(*i))\n}\n\n// ObjInfo retrieves information about a BPF Fd.\n//\n// info may be one of MapInfo, ProgInfo, LinkInfo and BtfInfo.\nfunc ObjInfo(fd *FD, info Info) error {\n\tptr, len := info.info()\n\terr := ObjGetInfoByFd(&ObjGetInfoByFdAttr{\n\t\tBpfFd:   fd.Uint(),\n\t\tInfoLen: len,\n\t\tInfo:    NewPointer(ptr),\n\t})\n\truntime.KeepAlive(fd)\n\treturn err\n}\n\n// BPFObjName is a null-terminated string made up of\n// 'A-Za-z0-9_' characters.\ntype ObjName [unix.BPF_OBJ_NAME_LEN]byte\n\n// NewObjName truncates the result if it is too long.\nfunc NewObjName(name string) ObjName {\n\tvar result ObjName\n\tcopy(result[:unix.BPF_OBJ_NAME_LEN-1], name)\n\treturn result\n}\n\n// LogLevel controls the verbosity of the kernel's eBPF program verifier.\ntype LogLevel uint32\n\nconst (\n\tBPF_LOG_LEVEL1 LogLevel = 1 << iota\n\tBPF_LOG_LEVEL2\n\tBPF_LOG_STATS\n)\n\n// LinkID uniquely identifies a bpf_link.\ntype LinkID uint32\n\n// BTFID uniquely identifies a BTF blob loaded into the kernel.\ntype BTFID uint32\n\n// TypeID identifies a type in a BTF blob.\ntype TypeID uint32\n\n// MapFlags control map behaviour.\ntype MapFlags uint32\n\n//go:generate stringer -type MapFlags\n\nconst (\n\tBPF_F_NO_PREALLOC MapFlags = 1 << iota\n\tBPF_F_NO_COMMON_LRU\n\tBPF_F_NUMA_NODE\n\tBPF_F_RDONLY\n\tBPF_F_WRONLY\n\tBPF_F_STACK_BUILD_ID\n\tBPF_F_ZERO_SEED\n\tBPF_F_RDONLY_PROG\n\tBPF_F_WRONLY_PROG\n\tBPF_F_CLONE\n\tBPF_F_MMAPABLE\n\tBPF_F_PRESERVE_ELEMS\n\tBPF_F_INNER_MAP\n)\n\n// wrappedErrno wraps syscall.Errno to prevent direct comparisons with\n// syscall.E* or unix.E* constants.\n//\n// You should never export an error of this type.\ntype wrappedErrno struct {\n\tsyscall.Errno\n}\n\nfunc (we wrappedErrno) Unwrap() error {\n\treturn we.Errno\n}\n\nfunc (we wrappedErrno) Error() string {\n\tif we.Errno == ENOTSUPP {\n\t\treturn \"operation not supported\"\n\t}\n\treturn we.Errno.Error()\n}\n\ntype syscallError struct {\n\terror\n\terrno syscall.Errno\n}\n\nfunc Error(err error, errno syscall.Errno) error {\n\treturn &syscallError{err, errno}\n}\n\nfunc (se *syscallError) Is(target error) bool {\n\treturn target == se.error\n}\n\nfunc (se *syscallError) Unwrap() error {\n\treturn se.errno\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/sys/types.go",
    "content": "// Code generated by internal/cmd/gentypes; DO NOT EDIT.\n\npackage sys\n\nimport (\n\t\"unsafe\"\n)\n\ntype AdjRoomMode uint32\n\nconst (\n\tBPF_ADJ_ROOM_NET AdjRoomMode = 0\n\tBPF_ADJ_ROOM_MAC AdjRoomMode = 1\n)\n\ntype AttachType uint32\n\nconst (\n\tBPF_CGROUP_INET_INGRESS            AttachType = 0\n\tBPF_CGROUP_INET_EGRESS             AttachType = 1\n\tBPF_CGROUP_INET_SOCK_CREATE        AttachType = 2\n\tBPF_CGROUP_SOCK_OPS                AttachType = 3\n\tBPF_SK_SKB_STREAM_PARSER           AttachType = 4\n\tBPF_SK_SKB_STREAM_VERDICT          AttachType = 5\n\tBPF_CGROUP_DEVICE                  AttachType = 6\n\tBPF_SK_MSG_VERDICT                 AttachType = 7\n\tBPF_CGROUP_INET4_BIND              AttachType = 8\n\tBPF_CGROUP_INET6_BIND              AttachType = 9\n\tBPF_CGROUP_INET4_CONNECT           AttachType = 10\n\tBPF_CGROUP_INET6_CONNECT           AttachType = 11\n\tBPF_CGROUP_INET4_POST_BIND         AttachType = 12\n\tBPF_CGROUP_INET6_POST_BIND         AttachType = 13\n\tBPF_CGROUP_UDP4_SENDMSG            AttachType = 14\n\tBPF_CGROUP_UDP6_SENDMSG            AttachType = 15\n\tBPF_LIRC_MODE2                     AttachType = 16\n\tBPF_FLOW_DISSECTOR                 AttachType = 17\n\tBPF_CGROUP_SYSCTL                  AttachType = 18\n\tBPF_CGROUP_UDP4_RECVMSG            AttachType = 19\n\tBPF_CGROUP_UDP6_RECVMSG            AttachType = 20\n\tBPF_CGROUP_GETSOCKOPT              AttachType = 21\n\tBPF_CGROUP_SETSOCKOPT              AttachType = 22\n\tBPF_TRACE_RAW_TP                   AttachType = 23\n\tBPF_TRACE_FENTRY                   AttachType = 24\n\tBPF_TRACE_FEXIT                    AttachType = 25\n\tBPF_MODIFY_RETURN                  AttachType = 26\n\tBPF_LSM_MAC                        AttachType = 27\n\tBPF_TRACE_ITER                     AttachType = 28\n\tBPF_CGROUP_INET4_GETPEERNAME       AttachType = 29\n\tBPF_CGROUP_INET6_GETPEERNAME       AttachType = 30\n\tBPF_CGROUP_INET4_GETSOCKNAME       AttachType = 31\n\tBPF_CGROUP_INET6_GETSOCKNAME       AttachType = 32\n\tBPF_XDP_DEVMAP                     AttachType = 33\n\tBPF_CGROUP_INET_SOCK_RELEASE       AttachType = 34\n\tBPF_XDP_CPUMAP                     AttachType = 35\n\tBPF_SK_LOOKUP                      AttachType = 36\n\tBPF_XDP                            AttachType = 37\n\tBPF_SK_SKB_VERDICT                 AttachType = 38\n\tBPF_SK_REUSEPORT_SELECT            AttachType = 39\n\tBPF_SK_REUSEPORT_SELECT_OR_MIGRATE AttachType = 40\n\tBPF_PERF_EVENT                     AttachType = 41\n\tBPF_TRACE_KPROBE_MULTI             AttachType = 42\n\t__MAX_BPF_ATTACH_TYPE              AttachType = 43\n)\n\ntype Cmd uint32\n\nconst (\n\tBPF_MAP_CREATE                  Cmd = 0\n\tBPF_MAP_LOOKUP_ELEM             Cmd = 1\n\tBPF_MAP_UPDATE_ELEM             Cmd = 2\n\tBPF_MAP_DELETE_ELEM             Cmd = 3\n\tBPF_MAP_GET_NEXT_KEY            Cmd = 4\n\tBPF_PROG_LOAD                   Cmd = 5\n\tBPF_OBJ_PIN                     Cmd = 6\n\tBPF_OBJ_GET                     Cmd = 7\n\tBPF_PROG_ATTACH                 Cmd = 8\n\tBPF_PROG_DETACH                 Cmd = 9\n\tBPF_PROG_TEST_RUN               Cmd = 10\n\tBPF_PROG_RUN                    Cmd = 10\n\tBPF_PROG_GET_NEXT_ID            Cmd = 11\n\tBPF_MAP_GET_NEXT_ID             Cmd = 12\n\tBPF_PROG_GET_FD_BY_ID           Cmd = 13\n\tBPF_MAP_GET_FD_BY_ID            Cmd = 14\n\tBPF_OBJ_GET_INFO_BY_FD          Cmd = 15\n\tBPF_PROG_QUERY                  Cmd = 16\n\tBPF_RAW_TRACEPOINT_OPEN         Cmd = 17\n\tBPF_BTF_LOAD                    Cmd = 18\n\tBPF_BTF_GET_FD_BY_ID            Cmd = 19\n\tBPF_TASK_FD_QUERY               Cmd = 20\n\tBPF_MAP_LOOKUP_AND_DELETE_ELEM  Cmd = 21\n\tBPF_MAP_FREEZE                  Cmd = 22\n\tBPF_BTF_GET_NEXT_ID             Cmd = 23\n\tBPF_MAP_LOOKUP_BATCH            Cmd = 24\n\tBPF_MAP_LOOKUP_AND_DELETE_BATCH Cmd = 25\n\tBPF_MAP_UPDATE_BATCH            Cmd = 26\n\tBPF_MAP_DELETE_BATCH            Cmd = 27\n\tBPF_LINK_CREATE                 Cmd = 28\n\tBPF_LINK_UPDATE                 Cmd = 29\n\tBPF_LINK_GET_FD_BY_ID           Cmd = 30\n\tBPF_LINK_GET_NEXT_ID            Cmd = 31\n\tBPF_ENABLE_STATS                Cmd = 32\n\tBPF_ITER_CREATE                 Cmd = 33\n\tBPF_LINK_DETACH                 Cmd = 34\n\tBPF_PROG_BIND_MAP               Cmd = 35\n)\n\ntype FunctionId uint32\n\nconst (\n\tBPF_FUNC_unspec                         FunctionId = 0\n\tBPF_FUNC_map_lookup_elem                FunctionId = 1\n\tBPF_FUNC_map_update_elem                FunctionId = 2\n\tBPF_FUNC_map_delete_elem                FunctionId = 3\n\tBPF_FUNC_probe_read                     FunctionId = 4\n\tBPF_FUNC_ktime_get_ns                   FunctionId = 5\n\tBPF_FUNC_trace_printk                   FunctionId = 6\n\tBPF_FUNC_get_prandom_u32                FunctionId = 7\n\tBPF_FUNC_get_smp_processor_id           FunctionId = 8\n\tBPF_FUNC_skb_store_bytes                FunctionId = 9\n\tBPF_FUNC_l3_csum_replace                FunctionId = 10\n\tBPF_FUNC_l4_csum_replace                FunctionId = 11\n\tBPF_FUNC_tail_call                      FunctionId = 12\n\tBPF_FUNC_clone_redirect                 FunctionId = 13\n\tBPF_FUNC_get_current_pid_tgid           FunctionId = 14\n\tBPF_FUNC_get_current_uid_gid            FunctionId = 15\n\tBPF_FUNC_get_current_comm               FunctionId = 16\n\tBPF_FUNC_get_cgroup_classid             FunctionId = 17\n\tBPF_FUNC_skb_vlan_push                  FunctionId = 18\n\tBPF_FUNC_skb_vlan_pop                   FunctionId = 19\n\tBPF_FUNC_skb_get_tunnel_key             FunctionId = 20\n\tBPF_FUNC_skb_set_tunnel_key             FunctionId = 21\n\tBPF_FUNC_perf_event_read                FunctionId = 22\n\tBPF_FUNC_redirect                       FunctionId = 23\n\tBPF_FUNC_get_route_realm                FunctionId = 24\n\tBPF_FUNC_perf_event_output              FunctionId = 25\n\tBPF_FUNC_skb_load_bytes                 FunctionId = 26\n\tBPF_FUNC_get_stackid                    FunctionId = 27\n\tBPF_FUNC_csum_diff                      FunctionId = 28\n\tBPF_FUNC_skb_get_tunnel_opt             FunctionId = 29\n\tBPF_FUNC_skb_set_tunnel_opt             FunctionId = 30\n\tBPF_FUNC_skb_change_proto               FunctionId = 31\n\tBPF_FUNC_skb_change_type                FunctionId = 32\n\tBPF_FUNC_skb_under_cgroup               FunctionId = 33\n\tBPF_FUNC_get_hash_recalc                FunctionId = 34\n\tBPF_FUNC_get_current_task               FunctionId = 35\n\tBPF_FUNC_probe_write_user               FunctionId = 36\n\tBPF_FUNC_current_task_under_cgroup      FunctionId = 37\n\tBPF_FUNC_skb_change_tail                FunctionId = 38\n\tBPF_FUNC_skb_pull_data                  FunctionId = 39\n\tBPF_FUNC_csum_update                    FunctionId = 40\n\tBPF_FUNC_set_hash_invalid               FunctionId = 41\n\tBPF_FUNC_get_numa_node_id               FunctionId = 42\n\tBPF_FUNC_skb_change_head                FunctionId = 43\n\tBPF_FUNC_xdp_adjust_head                FunctionId = 44\n\tBPF_FUNC_probe_read_str                 FunctionId = 45\n\tBPF_FUNC_get_socket_cookie              FunctionId = 46\n\tBPF_FUNC_get_socket_uid                 FunctionId = 47\n\tBPF_FUNC_set_hash                       FunctionId = 48\n\tBPF_FUNC_setsockopt                     FunctionId = 49\n\tBPF_FUNC_skb_adjust_room                FunctionId = 50\n\tBPF_FUNC_redirect_map                   FunctionId = 51\n\tBPF_FUNC_sk_redirect_map                FunctionId = 52\n\tBPF_FUNC_sock_map_update                FunctionId = 53\n\tBPF_FUNC_xdp_adjust_meta                FunctionId = 54\n\tBPF_FUNC_perf_event_read_value          FunctionId = 55\n\tBPF_FUNC_perf_prog_read_value           FunctionId = 56\n\tBPF_FUNC_getsockopt                     FunctionId = 57\n\tBPF_FUNC_override_return                FunctionId = 58\n\tBPF_FUNC_sock_ops_cb_flags_set          FunctionId = 59\n\tBPF_FUNC_msg_redirect_map               FunctionId = 60\n\tBPF_FUNC_msg_apply_bytes                FunctionId = 61\n\tBPF_FUNC_msg_cork_bytes                 FunctionId = 62\n\tBPF_FUNC_msg_pull_data                  FunctionId = 63\n\tBPF_FUNC_bind                           FunctionId = 64\n\tBPF_FUNC_xdp_adjust_tail                FunctionId = 65\n\tBPF_FUNC_skb_get_xfrm_state             FunctionId = 66\n\tBPF_FUNC_get_stack                      FunctionId = 67\n\tBPF_FUNC_skb_load_bytes_relative        FunctionId = 68\n\tBPF_FUNC_fib_lookup                     FunctionId = 69\n\tBPF_FUNC_sock_hash_update               FunctionId = 70\n\tBPF_FUNC_msg_redirect_hash              FunctionId = 71\n\tBPF_FUNC_sk_redirect_hash               FunctionId = 72\n\tBPF_FUNC_lwt_push_encap                 FunctionId = 73\n\tBPF_FUNC_lwt_seg6_store_bytes           FunctionId = 74\n\tBPF_FUNC_lwt_seg6_adjust_srh            FunctionId = 75\n\tBPF_FUNC_lwt_seg6_action                FunctionId = 76\n\tBPF_FUNC_rc_repeat                      FunctionId = 77\n\tBPF_FUNC_rc_keydown                     FunctionId = 78\n\tBPF_FUNC_skb_cgroup_id                  FunctionId = 79\n\tBPF_FUNC_get_current_cgroup_id          FunctionId = 80\n\tBPF_FUNC_get_local_storage              FunctionId = 81\n\tBPF_FUNC_sk_select_reuseport            FunctionId = 82\n\tBPF_FUNC_skb_ancestor_cgroup_id         FunctionId = 83\n\tBPF_FUNC_sk_lookup_tcp                  FunctionId = 84\n\tBPF_FUNC_sk_lookup_udp                  FunctionId = 85\n\tBPF_FUNC_sk_release                     FunctionId = 86\n\tBPF_FUNC_map_push_elem                  FunctionId = 87\n\tBPF_FUNC_map_pop_elem                   FunctionId = 88\n\tBPF_FUNC_map_peek_elem                  FunctionId = 89\n\tBPF_FUNC_msg_push_data                  FunctionId = 90\n\tBPF_FUNC_msg_pop_data                   FunctionId = 91\n\tBPF_FUNC_rc_pointer_rel                 FunctionId = 92\n\tBPF_FUNC_spin_lock                      FunctionId = 93\n\tBPF_FUNC_spin_unlock                    FunctionId = 94\n\tBPF_FUNC_sk_fullsock                    FunctionId = 95\n\tBPF_FUNC_tcp_sock                       FunctionId = 96\n\tBPF_FUNC_skb_ecn_set_ce                 FunctionId = 97\n\tBPF_FUNC_get_listener_sock              FunctionId = 98\n\tBPF_FUNC_skc_lookup_tcp                 FunctionId = 99\n\tBPF_FUNC_tcp_check_syncookie            FunctionId = 100\n\tBPF_FUNC_sysctl_get_name                FunctionId = 101\n\tBPF_FUNC_sysctl_get_current_value       FunctionId = 102\n\tBPF_FUNC_sysctl_get_new_value           FunctionId = 103\n\tBPF_FUNC_sysctl_set_new_value           FunctionId = 104\n\tBPF_FUNC_strtol                         FunctionId = 105\n\tBPF_FUNC_strtoul                        FunctionId = 106\n\tBPF_FUNC_sk_storage_get                 FunctionId = 107\n\tBPF_FUNC_sk_storage_delete              FunctionId = 108\n\tBPF_FUNC_send_signal                    FunctionId = 109\n\tBPF_FUNC_tcp_gen_syncookie              FunctionId = 110\n\tBPF_FUNC_skb_output                     FunctionId = 111\n\tBPF_FUNC_probe_read_user                FunctionId = 112\n\tBPF_FUNC_probe_read_kernel              FunctionId = 113\n\tBPF_FUNC_probe_read_user_str            FunctionId = 114\n\tBPF_FUNC_probe_read_kernel_str          FunctionId = 115\n\tBPF_FUNC_tcp_send_ack                   FunctionId = 116\n\tBPF_FUNC_send_signal_thread             FunctionId = 117\n\tBPF_FUNC_jiffies64                      FunctionId = 118\n\tBPF_FUNC_read_branch_records            FunctionId = 119\n\tBPF_FUNC_get_ns_current_pid_tgid        FunctionId = 120\n\tBPF_FUNC_xdp_output                     FunctionId = 121\n\tBPF_FUNC_get_netns_cookie               FunctionId = 122\n\tBPF_FUNC_get_current_ancestor_cgroup_id FunctionId = 123\n\tBPF_FUNC_sk_assign                      FunctionId = 124\n\tBPF_FUNC_ktime_get_boot_ns              FunctionId = 125\n\tBPF_FUNC_seq_printf                     FunctionId = 126\n\tBPF_FUNC_seq_write                      FunctionId = 127\n\tBPF_FUNC_sk_cgroup_id                   FunctionId = 128\n\tBPF_FUNC_sk_ancestor_cgroup_id          FunctionId = 129\n\tBPF_FUNC_ringbuf_output                 FunctionId = 130\n\tBPF_FUNC_ringbuf_reserve                FunctionId = 131\n\tBPF_FUNC_ringbuf_submit                 FunctionId = 132\n\tBPF_FUNC_ringbuf_discard                FunctionId = 133\n\tBPF_FUNC_ringbuf_query                  FunctionId = 134\n\tBPF_FUNC_csum_level                     FunctionId = 135\n\tBPF_FUNC_skc_to_tcp6_sock               FunctionId = 136\n\tBPF_FUNC_skc_to_tcp_sock                FunctionId = 137\n\tBPF_FUNC_skc_to_tcp_timewait_sock       FunctionId = 138\n\tBPF_FUNC_skc_to_tcp_request_sock        FunctionId = 139\n\tBPF_FUNC_skc_to_udp6_sock               FunctionId = 140\n\tBPF_FUNC_get_task_stack                 FunctionId = 141\n\tBPF_FUNC_load_hdr_opt                   FunctionId = 142\n\tBPF_FUNC_store_hdr_opt                  FunctionId = 143\n\tBPF_FUNC_reserve_hdr_opt                FunctionId = 144\n\tBPF_FUNC_inode_storage_get              FunctionId = 145\n\tBPF_FUNC_inode_storage_delete           FunctionId = 146\n\tBPF_FUNC_d_path                         FunctionId = 147\n\tBPF_FUNC_copy_from_user                 FunctionId = 148\n\tBPF_FUNC_snprintf_btf                   FunctionId = 149\n\tBPF_FUNC_seq_printf_btf                 FunctionId = 150\n\tBPF_FUNC_skb_cgroup_classid             FunctionId = 151\n\tBPF_FUNC_redirect_neigh                 FunctionId = 152\n\tBPF_FUNC_per_cpu_ptr                    FunctionId = 153\n\tBPF_FUNC_this_cpu_ptr                   FunctionId = 154\n\tBPF_FUNC_redirect_peer                  FunctionId = 155\n\tBPF_FUNC_task_storage_get               FunctionId = 156\n\tBPF_FUNC_task_storage_delete            FunctionId = 157\n\tBPF_FUNC_get_current_task_btf           FunctionId = 158\n\tBPF_FUNC_bprm_opts_set                  FunctionId = 159\n\tBPF_FUNC_ktime_get_coarse_ns            FunctionId = 160\n\tBPF_FUNC_ima_inode_hash                 FunctionId = 161\n\tBPF_FUNC_sock_from_file                 FunctionId = 162\n\tBPF_FUNC_check_mtu                      FunctionId = 163\n\tBPF_FUNC_for_each_map_elem              FunctionId = 164\n\tBPF_FUNC_snprintf                       FunctionId = 165\n\tBPF_FUNC_sys_bpf                        FunctionId = 166\n\tBPF_FUNC_btf_find_by_name_kind          FunctionId = 167\n\tBPF_FUNC_sys_close                      FunctionId = 168\n\tBPF_FUNC_timer_init                     FunctionId = 169\n\tBPF_FUNC_timer_set_callback             FunctionId = 170\n\tBPF_FUNC_timer_start                    FunctionId = 171\n\tBPF_FUNC_timer_cancel                   FunctionId = 172\n\tBPF_FUNC_get_func_ip                    FunctionId = 173\n\tBPF_FUNC_get_attach_cookie              FunctionId = 174\n\tBPF_FUNC_task_pt_regs                   FunctionId = 175\n\tBPF_FUNC_get_branch_snapshot            FunctionId = 176\n\tBPF_FUNC_trace_vprintk                  FunctionId = 177\n\tBPF_FUNC_skc_to_unix_sock               FunctionId = 178\n\tBPF_FUNC_kallsyms_lookup_name           FunctionId = 179\n\tBPF_FUNC_find_vma                       FunctionId = 180\n\tBPF_FUNC_loop                           FunctionId = 181\n\tBPF_FUNC_strncmp                        FunctionId = 182\n\tBPF_FUNC_get_func_arg                   FunctionId = 183\n\tBPF_FUNC_get_func_ret                   FunctionId = 184\n\tBPF_FUNC_get_func_arg_cnt               FunctionId = 185\n\tBPF_FUNC_get_retval                     FunctionId = 186\n\tBPF_FUNC_set_retval                     FunctionId = 187\n\tBPF_FUNC_xdp_get_buff_len               FunctionId = 188\n\tBPF_FUNC_xdp_load_bytes                 FunctionId = 189\n\tBPF_FUNC_xdp_store_bytes                FunctionId = 190\n\tBPF_FUNC_copy_from_user_task            FunctionId = 191\n\tBPF_FUNC_skb_set_tstamp                 FunctionId = 192\n\tBPF_FUNC_ima_file_hash                  FunctionId = 193\n\tBPF_FUNC_kptr_xchg                      FunctionId = 194\n\tBPF_FUNC_map_lookup_percpu_elem         FunctionId = 195\n\tBPF_FUNC_skc_to_mptcp_sock              FunctionId = 196\n\tBPF_FUNC_dynptr_from_mem                FunctionId = 197\n\tBPF_FUNC_ringbuf_reserve_dynptr         FunctionId = 198\n\tBPF_FUNC_ringbuf_submit_dynptr          FunctionId = 199\n\tBPF_FUNC_ringbuf_discard_dynptr         FunctionId = 200\n\tBPF_FUNC_dynptr_read                    FunctionId = 201\n\tBPF_FUNC_dynptr_write                   FunctionId = 202\n\tBPF_FUNC_dynptr_data                    FunctionId = 203\n\t__BPF_FUNC_MAX_ID                       FunctionId = 204\n)\n\ntype HdrStartOff uint32\n\nconst (\n\tBPF_HDR_START_MAC HdrStartOff = 0\n\tBPF_HDR_START_NET HdrStartOff = 1\n)\n\ntype LinkType uint32\n\nconst (\n\tBPF_LINK_TYPE_UNSPEC         LinkType = 0\n\tBPF_LINK_TYPE_RAW_TRACEPOINT LinkType = 1\n\tBPF_LINK_TYPE_TRACING        LinkType = 2\n\tBPF_LINK_TYPE_CGROUP         LinkType = 3\n\tBPF_LINK_TYPE_ITER           LinkType = 4\n\tBPF_LINK_TYPE_NETNS          LinkType = 5\n\tBPF_LINK_TYPE_XDP            LinkType = 6\n\tBPF_LINK_TYPE_PERF_EVENT     LinkType = 7\n\tBPF_LINK_TYPE_KPROBE_MULTI   LinkType = 8\n\tBPF_LINK_TYPE_STRUCT_OPS     LinkType = 9\n\tMAX_BPF_LINK_TYPE            LinkType = 10\n)\n\ntype MapType uint32\n\nconst (\n\tBPF_MAP_TYPE_UNSPEC                MapType = 0\n\tBPF_MAP_TYPE_HASH                  MapType = 1\n\tBPF_MAP_TYPE_ARRAY                 MapType = 2\n\tBPF_MAP_TYPE_PROG_ARRAY            MapType = 3\n\tBPF_MAP_TYPE_PERF_EVENT_ARRAY      MapType = 4\n\tBPF_MAP_TYPE_PERCPU_HASH           MapType = 5\n\tBPF_MAP_TYPE_PERCPU_ARRAY          MapType = 6\n\tBPF_MAP_TYPE_STACK_TRACE           MapType = 7\n\tBPF_MAP_TYPE_CGROUP_ARRAY          MapType = 8\n\tBPF_MAP_TYPE_LRU_HASH              MapType = 9\n\tBPF_MAP_TYPE_LRU_PERCPU_HASH       MapType = 10\n\tBPF_MAP_TYPE_LPM_TRIE              MapType = 11\n\tBPF_MAP_TYPE_ARRAY_OF_MAPS         MapType = 12\n\tBPF_MAP_TYPE_HASH_OF_MAPS          MapType = 13\n\tBPF_MAP_TYPE_DEVMAP                MapType = 14\n\tBPF_MAP_TYPE_SOCKMAP               MapType = 15\n\tBPF_MAP_TYPE_CPUMAP                MapType = 16\n\tBPF_MAP_TYPE_XSKMAP                MapType = 17\n\tBPF_MAP_TYPE_SOCKHASH              MapType = 18\n\tBPF_MAP_TYPE_CGROUP_STORAGE        MapType = 19\n\tBPF_MAP_TYPE_REUSEPORT_SOCKARRAY   MapType = 20\n\tBPF_MAP_TYPE_PERCPU_CGROUP_STORAGE MapType = 21\n\tBPF_MAP_TYPE_QUEUE                 MapType = 22\n\tBPF_MAP_TYPE_STACK                 MapType = 23\n\tBPF_MAP_TYPE_SK_STORAGE            MapType = 24\n\tBPF_MAP_TYPE_DEVMAP_HASH           MapType = 25\n\tBPF_MAP_TYPE_STRUCT_OPS            MapType = 26\n\tBPF_MAP_TYPE_RINGBUF               MapType = 27\n\tBPF_MAP_TYPE_INODE_STORAGE         MapType = 28\n\tBPF_MAP_TYPE_TASK_STORAGE          MapType = 29\n\tBPF_MAP_TYPE_BLOOM_FILTER          MapType = 30\n)\n\ntype ProgType uint32\n\nconst (\n\tBPF_PROG_TYPE_UNSPEC                  ProgType = 0\n\tBPF_PROG_TYPE_SOCKET_FILTER           ProgType = 1\n\tBPF_PROG_TYPE_KPROBE                  ProgType = 2\n\tBPF_PROG_TYPE_SCHED_CLS               ProgType = 3\n\tBPF_PROG_TYPE_SCHED_ACT               ProgType = 4\n\tBPF_PROG_TYPE_TRACEPOINT              ProgType = 5\n\tBPF_PROG_TYPE_XDP                     ProgType = 6\n\tBPF_PROG_TYPE_PERF_EVENT              ProgType = 7\n\tBPF_PROG_TYPE_CGROUP_SKB              ProgType = 8\n\tBPF_PROG_TYPE_CGROUP_SOCK             ProgType = 9\n\tBPF_PROG_TYPE_LWT_IN                  ProgType = 10\n\tBPF_PROG_TYPE_LWT_OUT                 ProgType = 11\n\tBPF_PROG_TYPE_LWT_XMIT                ProgType = 12\n\tBPF_PROG_TYPE_SOCK_OPS                ProgType = 13\n\tBPF_PROG_TYPE_SK_SKB                  ProgType = 14\n\tBPF_PROG_TYPE_CGROUP_DEVICE           ProgType = 15\n\tBPF_PROG_TYPE_SK_MSG                  ProgType = 16\n\tBPF_PROG_TYPE_RAW_TRACEPOINT          ProgType = 17\n\tBPF_PROG_TYPE_CGROUP_SOCK_ADDR        ProgType = 18\n\tBPF_PROG_TYPE_LWT_SEG6LOCAL           ProgType = 19\n\tBPF_PROG_TYPE_LIRC_MODE2              ProgType = 20\n\tBPF_PROG_TYPE_SK_REUSEPORT            ProgType = 21\n\tBPF_PROG_TYPE_FLOW_DISSECTOR          ProgType = 22\n\tBPF_PROG_TYPE_CGROUP_SYSCTL           ProgType = 23\n\tBPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE ProgType = 24\n\tBPF_PROG_TYPE_CGROUP_SOCKOPT          ProgType = 25\n\tBPF_PROG_TYPE_TRACING                 ProgType = 26\n\tBPF_PROG_TYPE_STRUCT_OPS              ProgType = 27\n\tBPF_PROG_TYPE_EXT                     ProgType = 28\n\tBPF_PROG_TYPE_LSM                     ProgType = 29\n\tBPF_PROG_TYPE_SK_LOOKUP               ProgType = 30\n\tBPF_PROG_TYPE_SYSCALL                 ProgType = 31\n)\n\ntype RetCode uint32\n\nconst (\n\tBPF_OK          RetCode = 0\n\tBPF_DROP        RetCode = 2\n\tBPF_REDIRECT    RetCode = 7\n\tBPF_LWT_REROUTE RetCode = 128\n)\n\ntype SkAction uint32\n\nconst (\n\tSK_DROP SkAction = 0\n\tSK_PASS SkAction = 1\n)\n\ntype StackBuildIdStatus uint32\n\nconst (\n\tBPF_STACK_BUILD_ID_EMPTY StackBuildIdStatus = 0\n\tBPF_STACK_BUILD_ID_VALID StackBuildIdStatus = 1\n\tBPF_STACK_BUILD_ID_IP    StackBuildIdStatus = 2\n)\n\ntype StatsType uint32\n\nconst (\n\tBPF_STATS_RUN_TIME StatsType = 0\n)\n\ntype XdpAction uint32\n\nconst (\n\tXDP_ABORTED  XdpAction = 0\n\tXDP_DROP     XdpAction = 1\n\tXDP_PASS     XdpAction = 2\n\tXDP_TX       XdpAction = 3\n\tXDP_REDIRECT XdpAction = 4\n)\n\ntype BtfInfo struct {\n\tBtf       Pointer\n\tBtfSize   uint32\n\tId        BTFID\n\tName      Pointer\n\tNameLen   uint32\n\tKernelBtf uint32\n}\n\ntype FuncInfo struct {\n\tInsnOff uint32\n\tTypeId  uint32\n}\n\ntype LineInfo struct {\n\tInsnOff     uint32\n\tFileNameOff uint32\n\tLineOff     uint32\n\tLineCol     uint32\n}\n\ntype LinkInfo struct {\n\tType   LinkType\n\tId     LinkID\n\tProgId uint32\n\t_      [4]byte\n\tExtra  [16]uint8\n}\n\ntype MapInfo struct {\n\tType                  uint32\n\tId                    uint32\n\tKeySize               uint32\n\tValueSize             uint32\n\tMaxEntries            uint32\n\tMapFlags              MapFlags\n\tName                  ObjName\n\tIfindex               uint32\n\tBtfVmlinuxValueTypeId TypeID\n\tNetnsDev              uint64\n\tNetnsIno              uint64\n\tBtfId                 uint32\n\tBtfKeyTypeId          TypeID\n\tBtfValueTypeId        TypeID\n\t_                     [4]byte\n\tMapExtra              uint64\n}\n\ntype ProgInfo struct {\n\tType                 uint32\n\tId                   uint32\n\tTag                  [8]uint8\n\tJitedProgLen         uint32\n\tXlatedProgLen        uint32\n\tJitedProgInsns       uint64\n\tXlatedProgInsns      Pointer\n\tLoadTime             uint64\n\tCreatedByUid         uint32\n\tNrMapIds             uint32\n\tMapIds               Pointer\n\tName                 ObjName\n\tIfindex              uint32\n\t_                    [4]byte /* unsupported bitfield */\n\tNetnsDev             uint64\n\tNetnsIno             uint64\n\tNrJitedKsyms         uint32\n\tNrJitedFuncLens      uint32\n\tJitedKsyms           uint64\n\tJitedFuncLens        uint64\n\tBtfId                BTFID\n\tFuncInfoRecSize      uint32\n\tFuncInfo             uint64\n\tNrFuncInfo           uint32\n\tNrLineInfo           uint32\n\tLineInfo             uint64\n\tJitedLineInfo        uint64\n\tNrJitedLineInfo      uint32\n\tLineInfoRecSize      uint32\n\tJitedLineInfoRecSize uint32\n\tNrProgTags           uint32\n\tProgTags             uint64\n\tRunTimeNs            uint64\n\tRunCnt               uint64\n\tRecursionMisses      uint64\n\tVerifiedInsns        uint32\n\t_                    [4]byte\n}\n\ntype SkLookup struct {\n\tCookie         uint64\n\tFamily         uint32\n\tProtocol       uint32\n\tRemoteIp4      [4]uint8\n\tRemoteIp6      [16]uint8\n\tRemotePort     uint16\n\t_              [2]byte\n\tLocalIp4       [4]uint8\n\tLocalIp6       [16]uint8\n\tLocalPort      uint32\n\tIngressIfindex uint32\n\t_              [4]byte\n}\n\ntype XdpMd struct {\n\tData           uint32\n\tDataEnd        uint32\n\tDataMeta       uint32\n\tIngressIfindex uint32\n\tRxQueueIndex   uint32\n\tEgressIfindex  uint32\n}\n\ntype BtfGetFdByIdAttr struct{ Id uint32 }\n\nfunc BtfGetFdById(attr *BtfGetFdByIdAttr) (*FD, error) {\n\tfd, err := BPF(BPF_BTF_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype BtfGetNextIdAttr struct {\n\tId     BTFID\n\tNextId BTFID\n}\n\nfunc BtfGetNextId(attr *BtfGetNextIdAttr) error {\n\t_, err := BPF(BPF_BTF_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype BtfLoadAttr struct {\n\tBtf         Pointer\n\tBtfLogBuf   Pointer\n\tBtfSize     uint32\n\tBtfLogSize  uint32\n\tBtfLogLevel uint32\n\t_           [4]byte\n}\n\nfunc BtfLoad(attr *BtfLoadAttr) (*FD, error) {\n\tfd, err := BPF(BPF_BTF_LOAD, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype EnableStatsAttr struct{ Type uint32 }\n\nfunc EnableStats(attr *EnableStatsAttr) (*FD, error) {\n\tfd, err := BPF(BPF_ENABLE_STATS, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype IterCreateAttr struct {\n\tLinkFd uint32\n\tFlags  uint32\n}\n\nfunc IterCreate(attr *IterCreateAttr) (*FD, error) {\n\tfd, err := BPF(BPF_ITER_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateAttr struct {\n\tProgFd      uint32\n\tTargetFd    uint32\n\tAttachType  AttachType\n\tFlags       uint32\n\tTargetBtfId TypeID\n\t_           [28]byte\n}\n\nfunc LinkCreate(attr *LinkCreateAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateIterAttr struct {\n\tProgFd      uint32\n\tTargetFd    uint32\n\tAttachType  AttachType\n\tFlags       uint32\n\tIterInfo    Pointer\n\tIterInfoLen uint32\n\t_           [20]byte\n}\n\nfunc LinkCreateIter(attr *LinkCreateIterAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateKprobeMultiAttr struct {\n\tProgFd           uint32\n\tTargetFd         uint32\n\tAttachType       AttachType\n\tFlags            uint32\n\tKprobeMultiFlags uint32\n\tCount            uint32\n\tSyms             Pointer\n\tAddrs            Pointer\n\tCookies          Pointer\n}\n\nfunc LinkCreateKprobeMulti(attr *LinkCreateKprobeMultiAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreatePerfEventAttr struct {\n\tProgFd     uint32\n\tTargetFd   uint32\n\tAttachType AttachType\n\tFlags      uint32\n\tBpfCookie  uint64\n\t_          [24]byte\n}\n\nfunc LinkCreatePerfEvent(attr *LinkCreatePerfEventAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkCreateTracingAttr struct {\n\tProgFd      uint32\n\tTargetFd    uint32\n\tAttachType  AttachType\n\tFlags       uint32\n\tTargetBtfId BTFID\n\t_           [4]byte\n\tCookie      uint64\n\t_           [16]byte\n}\n\nfunc LinkCreateTracing(attr *LinkCreateTracingAttr) (*FD, error) {\n\tfd, err := BPF(BPF_LINK_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype LinkUpdateAttr struct {\n\tLinkFd    uint32\n\tNewProgFd uint32\n\tFlags     uint32\n\tOldProgFd uint32\n}\n\nfunc LinkUpdate(attr *LinkUpdateAttr) error {\n\t_, err := BPF(BPF_LINK_UPDATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapCreateAttr struct {\n\tMapType               MapType\n\tKeySize               uint32\n\tValueSize             uint32\n\tMaxEntries            uint32\n\tMapFlags              MapFlags\n\tInnerMapFd            uint32\n\tNumaNode              uint32\n\tMapName               ObjName\n\tMapIfindex            uint32\n\tBtfFd                 uint32\n\tBtfKeyTypeId          TypeID\n\tBtfValueTypeId        TypeID\n\tBtfVmlinuxValueTypeId TypeID\n\tMapExtra              uint64\n}\n\nfunc MapCreate(attr *MapCreateAttr) (*FD, error) {\n\tfd, err := BPF(BPF_MAP_CREATE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype MapDeleteBatchAttr struct {\n\tInBatch   Pointer\n\tOutBatch  Pointer\n\tKeys      Pointer\n\tValues    Pointer\n\tCount     uint32\n\tMapFd     uint32\n\tElemFlags uint64\n\tFlags     uint64\n}\n\nfunc MapDeleteBatch(attr *MapDeleteBatchAttr) error {\n\t_, err := BPF(BPF_MAP_DELETE_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapDeleteElemAttr struct {\n\tMapFd uint32\n\t_     [4]byte\n\tKey   Pointer\n\tValue Pointer\n\tFlags uint64\n}\n\nfunc MapDeleteElem(attr *MapDeleteElemAttr) error {\n\t_, err := BPF(BPF_MAP_DELETE_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapFreezeAttr struct{ MapFd uint32 }\n\nfunc MapFreeze(attr *MapFreezeAttr) error {\n\t_, err := BPF(BPF_MAP_FREEZE, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapGetFdByIdAttr struct{ Id uint32 }\n\nfunc MapGetFdById(attr *MapGetFdByIdAttr) (*FD, error) {\n\tfd, err := BPF(BPF_MAP_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype MapGetNextIdAttr struct {\n\tId     uint32\n\tNextId uint32\n}\n\nfunc MapGetNextId(attr *MapGetNextIdAttr) error {\n\t_, err := BPF(BPF_MAP_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapGetNextKeyAttr struct {\n\tMapFd   uint32\n\t_       [4]byte\n\tKey     Pointer\n\tNextKey Pointer\n}\n\nfunc MapGetNextKey(attr *MapGetNextKeyAttr) error {\n\t_, err := BPF(BPF_MAP_GET_NEXT_KEY, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapLookupAndDeleteBatchAttr struct {\n\tInBatch   Pointer\n\tOutBatch  Pointer\n\tKeys      Pointer\n\tValues    Pointer\n\tCount     uint32\n\tMapFd     uint32\n\tElemFlags uint64\n\tFlags     uint64\n}\n\nfunc MapLookupAndDeleteBatch(attr *MapLookupAndDeleteBatchAttr) error {\n\t_, err := BPF(BPF_MAP_LOOKUP_AND_DELETE_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapLookupAndDeleteElemAttr struct {\n\tMapFd uint32\n\t_     [4]byte\n\tKey   Pointer\n\tValue Pointer\n\tFlags uint64\n}\n\nfunc MapLookupAndDeleteElem(attr *MapLookupAndDeleteElemAttr) error {\n\t_, err := BPF(BPF_MAP_LOOKUP_AND_DELETE_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapLookupBatchAttr struct {\n\tInBatch   Pointer\n\tOutBatch  Pointer\n\tKeys      Pointer\n\tValues    Pointer\n\tCount     uint32\n\tMapFd     uint32\n\tElemFlags uint64\n\tFlags     uint64\n}\n\nfunc MapLookupBatch(attr *MapLookupBatchAttr) error {\n\t_, err := BPF(BPF_MAP_LOOKUP_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapLookupElemAttr struct {\n\tMapFd uint32\n\t_     [4]byte\n\tKey   Pointer\n\tValue Pointer\n\tFlags uint64\n}\n\nfunc MapLookupElem(attr *MapLookupElemAttr) error {\n\t_, err := BPF(BPF_MAP_LOOKUP_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapUpdateBatchAttr struct {\n\tInBatch   Pointer\n\tOutBatch  Pointer\n\tKeys      Pointer\n\tValues    Pointer\n\tCount     uint32\n\tMapFd     uint32\n\tElemFlags uint64\n\tFlags     uint64\n}\n\nfunc MapUpdateBatch(attr *MapUpdateBatchAttr) error {\n\t_, err := BPF(BPF_MAP_UPDATE_BATCH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype MapUpdateElemAttr struct {\n\tMapFd uint32\n\t_     [4]byte\n\tKey   Pointer\n\tValue Pointer\n\tFlags uint64\n}\n\nfunc MapUpdateElem(attr *MapUpdateElemAttr) error {\n\t_, err := BPF(BPF_MAP_UPDATE_ELEM, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ObjGetAttr struct {\n\tPathname  Pointer\n\tBpfFd     uint32\n\tFileFlags uint32\n}\n\nfunc ObjGet(attr *ObjGetAttr) (*FD, error) {\n\tfd, err := BPF(BPF_OBJ_GET, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype ObjGetInfoByFdAttr struct {\n\tBpfFd   uint32\n\tInfoLen uint32\n\tInfo    Pointer\n}\n\nfunc ObjGetInfoByFd(attr *ObjGetInfoByFdAttr) error {\n\t_, err := BPF(BPF_OBJ_GET_INFO_BY_FD, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ObjPinAttr struct {\n\tPathname  Pointer\n\tBpfFd     uint32\n\tFileFlags uint32\n}\n\nfunc ObjPin(attr *ObjPinAttr) error {\n\t_, err := BPF(BPF_OBJ_PIN, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgAttachAttr struct {\n\tTargetFd     uint32\n\tAttachBpfFd  uint32\n\tAttachType   uint32\n\tAttachFlags  uint32\n\tReplaceBpfFd uint32\n}\n\nfunc ProgAttach(attr *ProgAttachAttr) error {\n\t_, err := BPF(BPF_PROG_ATTACH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgBindMapAttr struct {\n\tProgFd uint32\n\tMapFd  uint32\n\tFlags  uint32\n}\n\nfunc ProgBindMap(attr *ProgBindMapAttr) error {\n\t_, err := BPF(BPF_PROG_BIND_MAP, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgDetachAttr struct {\n\tTargetFd    uint32\n\tAttachBpfFd uint32\n\tAttachType  uint32\n}\n\nfunc ProgDetach(attr *ProgDetachAttr) error {\n\t_, err := BPF(BPF_PROG_DETACH, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgGetFdByIdAttr struct{ Id uint32 }\n\nfunc ProgGetFdById(attr *ProgGetFdByIdAttr) (*FD, error) {\n\tfd, err := BPF(BPF_PROG_GET_FD_BY_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype ProgGetNextIdAttr struct {\n\tId     uint32\n\tNextId uint32\n}\n\nfunc ProgGetNextId(attr *ProgGetNextIdAttr) error {\n\t_, err := BPF(BPF_PROG_GET_NEXT_ID, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgLoadAttr struct {\n\tProgType           ProgType\n\tInsnCnt            uint32\n\tInsns              Pointer\n\tLicense            Pointer\n\tLogLevel           LogLevel\n\tLogSize            uint32\n\tLogBuf             Pointer\n\tKernVersion        uint32\n\tProgFlags          uint32\n\tProgName           ObjName\n\tProgIfindex        uint32\n\tExpectedAttachType AttachType\n\tProgBtfFd          uint32\n\tFuncInfoRecSize    uint32\n\tFuncInfo           Pointer\n\tFuncInfoCnt        uint32\n\tLineInfoRecSize    uint32\n\tLineInfo           Pointer\n\tLineInfoCnt        uint32\n\tAttachBtfId        TypeID\n\tAttachBtfObjFd     uint32\n\tCoreReloCnt        uint32\n\tFdArray            Pointer\n\tCoreRelos          Pointer\n\tCoreReloRecSize    uint32\n\t_                  [4]byte\n}\n\nfunc ProgLoad(attr *ProgLoadAttr) (*FD, error) {\n\tfd, err := BPF(BPF_PROG_LOAD, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype ProgQueryAttr struct {\n\tTargetFd    uint32\n\tAttachType  AttachType\n\tQueryFlags  uint32\n\tAttachFlags uint32\n\tProgIds     Pointer\n\tProgCount   uint32\n\t_           [4]byte\n}\n\nfunc ProgQuery(attr *ProgQueryAttr) error {\n\t_, err := BPF(BPF_PROG_QUERY, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype ProgRunAttr struct {\n\tProgFd      uint32\n\tRetval      uint32\n\tDataSizeIn  uint32\n\tDataSizeOut uint32\n\tDataIn      Pointer\n\tDataOut     Pointer\n\tRepeat      uint32\n\tDuration    uint32\n\tCtxSizeIn   uint32\n\tCtxSizeOut  uint32\n\tCtxIn       Pointer\n\tCtxOut      Pointer\n\tFlags       uint32\n\tCpu         uint32\n\tBatchSize   uint32\n\t_           [4]byte\n}\n\nfunc ProgRun(attr *ProgRunAttr) error {\n\t_, err := BPF(BPF_PROG_TEST_RUN, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\treturn err\n}\n\ntype RawTracepointOpenAttr struct {\n\tName   Pointer\n\tProgFd uint32\n\t_      [4]byte\n}\n\nfunc RawTracepointOpen(attr *RawTracepointOpenAttr) (*FD, error) {\n\tfd, err := BPF(BPF_RAW_TRACEPOINT_OPEN, unsafe.Pointer(attr), unsafe.Sizeof(*attr))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewFD(int(fd))\n}\n\ntype CgroupLinkInfo struct {\n\tCgroupId   uint64\n\tAttachType AttachType\n\t_          [4]byte\n}\n\ntype IterLinkInfo struct {\n\tTargetName    Pointer\n\tTargetNameLen uint32\n}\n\ntype NetNsLinkInfo struct {\n\tNetnsIno   uint32\n\tAttachType AttachType\n}\n\ntype RawTracepointLinkInfo struct {\n\tTpName    Pointer\n\tTpNameLen uint32\n\t_         [4]byte\n}\n\ntype TracingLinkInfo struct {\n\tAttachType  AttachType\n\tTargetObjId uint32\n\tTargetBtfId TypeID\n}\n\ntype XDPLinkInfo struct{ Ifindex uint32 }\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/tracefs/kprobe.go",
    "content": "package tracefs\n\nimport (\n\t\"crypto/rand\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"syscall\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar (\n\tErrInvalidInput = errors.New(\"invalid input\")\n\n\tErrInvalidMaxActive = errors.New(\"can only set maxactive on kretprobes\")\n)\n\n//go:generate stringer -type=ProbeType -linecomment\n\ntype ProbeType uint8\n\nconst (\n\tKprobe ProbeType = iota // kprobe\n\tUprobe                  // uprobe\n)\n\nfunc (pt ProbeType) eventsFile() (*os.File, error) {\n\tpath, err := sanitizeTracefsPath(fmt.Sprintf(\"%s_events\", pt.String()))\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn os.OpenFile(path, os.O_APPEND|os.O_WRONLY, 0666)\n}\n\ntype ProbeArgs struct {\n\tType                         ProbeType\n\tSymbol, Group, Path          string\n\tOffset, RefCtrOffset, Cookie uint64\n\tPid, RetprobeMaxActive       int\n\tRet                          bool\n}\n\n// RandomGroup generates a pseudorandom string for use as a tracefs group name.\n// Returns an error when the output string would exceed 63 characters (kernel\n// limitation), when rand.Read() fails or when prefix contains characters not\n// allowed by IsValidTraceID.\nfunc RandomGroup(prefix string) (string, error) {\n\tif !validIdentifier(prefix) {\n\t\treturn \"\", fmt.Errorf(\"prefix '%s' must be alphanumeric or underscore: %w\", prefix, ErrInvalidInput)\n\t}\n\n\tb := make([]byte, 8)\n\tif _, err := rand.Read(b); err != nil {\n\t\treturn \"\", fmt.Errorf(\"reading random bytes: %w\", err)\n\t}\n\n\tgroup := fmt.Sprintf(\"%s_%x\", prefix, b)\n\tif len(group) > 63 {\n\t\treturn \"\", fmt.Errorf(\"group name '%s' cannot be longer than 63 characters: %w\", group, ErrInvalidInput)\n\t}\n\n\treturn group, nil\n}\n\n// validIdentifier implements the equivalent of a regex match\n// against \"^[a-zA-Z_][0-9a-zA-Z_]*$\".\n//\n// Trace event groups, names and kernel symbols must adhere to this set\n// of characters. Non-empty, first character must not be a number, all\n// characters must be alphanumeric or underscore.\nfunc validIdentifier(s string) bool {\n\tif len(s) < 1 {\n\t\treturn false\n\t}\n\tfor i, c := range []byte(s) {\n\t\tswitch {\n\t\tcase c >= 'a' && c <= 'z':\n\t\tcase c >= 'A' && c <= 'Z':\n\t\tcase c == '_':\n\t\tcase i > 0 && c >= '0' && c <= '9':\n\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc sanitizeTracefsPath(path ...string) (string, error) {\n\tbase, err := getTracefsPath()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tl := filepath.Join(path...)\n\tp := filepath.Join(base, l)\n\tif !strings.HasPrefix(p, base) {\n\t\treturn \"\", fmt.Errorf(\"path '%s' attempts to escape base path '%s': %w\", l, base, ErrInvalidInput)\n\t}\n\treturn p, nil\n}\n\n// getTracefsPath will return a correct path to the tracefs mount point.\n// Since kernel 4.1 tracefs should be mounted by default at /sys/kernel/tracing,\n// but may be also be available at /sys/kernel/debug/tracing if debugfs is mounted.\n// The available tracefs paths will depends on distribution choices.\nvar getTracefsPath = internal.Memoize(func() (string, error) {\n\tfor _, p := range []struct {\n\t\tpath   string\n\t\tfsType int64\n\t}{\n\t\t{\"/sys/kernel/tracing\", unix.TRACEFS_MAGIC},\n\t\t{\"/sys/kernel/debug/tracing\", unix.TRACEFS_MAGIC},\n\t\t// RHEL/CentOS\n\t\t{\"/sys/kernel/debug/tracing\", unix.DEBUGFS_MAGIC},\n\t} {\n\t\tif fsType, err := internal.FSType(p.path); err == nil && fsType == p.fsType {\n\t\t\treturn p.path, nil\n\t\t}\n\t}\n\n\treturn \"\", errors.New(\"neither debugfs nor tracefs are mounted\")\n})\n\n// sanitizeIdentifier replaces every invalid character for the tracefs api with an underscore.\n//\n// It is equivalent to calling regexp.MustCompile(\"[^a-zA-Z0-9]+\").ReplaceAllString(\"_\").\nfunc sanitizeIdentifier(s string) string {\n\tvar skip bool\n\treturn strings.Map(func(c rune) rune {\n\t\tswitch {\n\t\tcase c >= 'a' && c <= 'z',\n\t\t\tc >= 'A' && c <= 'Z',\n\t\t\tc >= '0' && c <= '9':\n\t\t\tskip = false\n\t\t\treturn c\n\n\t\tcase skip:\n\t\t\treturn -1\n\n\t\tdefault:\n\t\t\tskip = true\n\t\t\treturn '_'\n\t\t}\n\t}, s)\n}\n\n// EventID reads a trace event's ID from tracefs given its group and name.\n// The kernel requires group and name to be alphanumeric or underscore.\nfunc EventID(group, name string) (uint64, error) {\n\tif !validIdentifier(group) {\n\t\treturn 0, fmt.Errorf(\"invalid tracefs group: %q\", group)\n\t}\n\n\tif !validIdentifier(name) {\n\t\treturn 0, fmt.Errorf(\"invalid tracefs name: %q\", name)\n\t}\n\n\tpath, err := sanitizeTracefsPath(\"events\", group, name, \"id\")\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\ttid, err := internal.ReadUint64FromFile(\"%d\\n\", path)\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn 0, err\n\t}\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"reading trace event ID of %s/%s: %w\", group, name, err)\n\t}\n\n\treturn tid, nil\n}\n\nfunc probePrefix(ret bool, maxActive int) string {\n\tif ret {\n\t\tif maxActive > 0 {\n\t\t\treturn fmt.Sprintf(\"r%d\", maxActive)\n\t\t}\n\t\treturn \"r\"\n\t}\n\treturn \"p\"\n}\n\n// Event represents an entry in a tracefs probe events file.\ntype Event struct {\n\ttyp         ProbeType\n\tgroup, name string\n\t// event id allocated by the kernel. 0 if the event has already been removed.\n\tid uint64\n}\n\n// NewEvent creates a new ephemeral trace event.\n//\n// Returns os.ErrNotExist if symbol is not a valid\n// kernel symbol, or if it is not traceable with kprobes. Returns os.ErrExist\n// if a probe with the same group and symbol already exists. Returns an error if\n// args.RetprobeMaxActive is used on non kprobe types. Returns ErrNotSupported if\n// the kernel is too old to support kretprobe maxactive.\nfunc NewEvent(args ProbeArgs) (*Event, error) {\n\t// Before attempting to create a trace event through tracefs,\n\t// check if an event with the same group and name already exists.\n\t// Kernels 4.x and earlier don't return os.ErrExist on writing a duplicate\n\t// entry, so we need to rely on reads for detecting uniqueness.\n\teventName := sanitizeIdentifier(args.Symbol)\n\t_, err := EventID(args.Group, eventName)\n\tif err == nil {\n\t\treturn nil, fmt.Errorf(\"trace event %s/%s: %w\", args.Group, eventName, os.ErrExist)\n\t}\n\tif err != nil && !errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, fmt.Errorf(\"checking trace event %s/%s: %w\", args.Group, eventName, err)\n\t}\n\n\t// Open the kprobe_events file in tracefs.\n\tf, err := args.Type.eventsFile()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer f.Close()\n\n\tvar pe, token string\n\tswitch args.Type {\n\tcase Kprobe:\n\t\t// The kprobe_events syntax is as follows (see Documentation/trace/kprobetrace.txt):\n\t\t// p[:[GRP/]EVENT] [MOD:]SYM[+offs]|MEMADDR [FETCHARGS] : Set a probe\n\t\t// r[MAXACTIVE][:[GRP/]EVENT] [MOD:]SYM[+0] [FETCHARGS] : Set a return probe\n\t\t// -:[GRP/]EVENT                                        : Clear a probe\n\t\t//\n\t\t// Some examples:\n\t\t// r:ebpf_1234/r_my_kretprobe nf_conntrack_destroy\n\t\t// p:ebpf_5678/p_my_kprobe __x64_sys_execve\n\t\t//\n\t\t// Leaving the kretprobe's MAXACTIVE set to 0 (or absent) will make the\n\t\t// kernel default to NR_CPUS. This is desired in most eBPF cases since\n\t\t// subsampling or rate limiting logic can be more accurately implemented in\n\t\t// the eBPF program itself.\n\t\t// See Documentation/kprobes.txt for more details.\n\t\tif args.RetprobeMaxActive != 0 && !args.Ret {\n\t\t\treturn nil, ErrInvalidMaxActive\n\t\t}\n\t\ttoken = KprobeToken(args)\n\t\tpe = fmt.Sprintf(\"%s:%s/%s %s\", probePrefix(args.Ret, args.RetprobeMaxActive), args.Group, eventName, token)\n\tcase Uprobe:\n\t\t// The uprobe_events syntax is as follows:\n\t\t// p[:[GRP/]EVENT] PATH:OFFSET [FETCHARGS] : Set a probe\n\t\t// r[:[GRP/]EVENT] PATH:OFFSET [FETCHARGS] : Set a return probe\n\t\t// -:[GRP/]EVENT                           : Clear a probe\n\t\t//\n\t\t// Some examples:\n\t\t// r:ebpf_1234/readline /bin/bash:0x12345\n\t\t// p:ebpf_5678/main_mySymbol /bin/mybin:0x12345(0x123)\n\t\t//\n\t\t// See Documentation/trace/uprobetracer.txt for more details.\n\t\tif args.RetprobeMaxActive != 0 {\n\t\t\treturn nil, ErrInvalidMaxActive\n\t\t}\n\t\ttoken = UprobeToken(args)\n\t\tpe = fmt.Sprintf(\"%s:%s/%s %s\", probePrefix(args.Ret, 0), args.Group, eventName, token)\n\t}\n\t_, err = f.WriteString(pe)\n\n\t// Since commit 97c753e62e6c, ENOENT is correctly returned instead of EINVAL\n\t// when trying to create a retprobe for a missing symbol.\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, fmt.Errorf(\"token %s: not found: %w\", token, err)\n\t}\n\t// Since commit ab105a4fb894, EILSEQ is returned when a kprobe sym+offset is resolved\n\t// to an invalid insn boundary. The exact conditions that trigger this error are\n\t// arch specific however.\n\tif errors.Is(err, syscall.EILSEQ) {\n\t\treturn nil, fmt.Errorf(\"token %s: bad insn boundary: %w\", token, os.ErrNotExist)\n\t}\n\t// ERANGE is returned when the `SYM[+offs]` token is too big and cannot\n\t// be resolved.\n\tif errors.Is(err, syscall.ERANGE) {\n\t\treturn nil, fmt.Errorf(\"token %s: offset too big: %w\", token, os.ErrNotExist)\n\t}\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"token %s: writing '%s': %w\", token, pe, err)\n\t}\n\n\t// Get the newly-created trace event's id.\n\ttid, err := EventID(args.Group, eventName)\n\tif args.RetprobeMaxActive != 0 && errors.Is(err, os.ErrNotExist) {\n\t\t// Kernels < 4.12 don't support maxactive and therefore auto generate\n\t\t// group and event names from the symbol and offset. The symbol is used\n\t\t// without any sanitization.\n\t\t// See https://elixir.bootlin.com/linux/v4.10/source/kernel/trace/trace_kprobe.c#L712\n\t\tevent := fmt.Sprintf(\"kprobes/r_%s_%d\", args.Symbol, args.Offset)\n\t\tif err := removeEvent(args.Type, event); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to remove spurious maxactive event: %s\", err)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"create trace event with non-default maxactive: %w\", internal.ErrNotSupported)\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get trace event id: %w\", err)\n\t}\n\n\tevt := &Event{args.Type, args.Group, eventName, tid}\n\truntime.SetFinalizer(evt, (*Event).Close)\n\treturn evt, nil\n}\n\n// Close removes the event from tracefs.\n//\n// Returns os.ErrClosed if the event has already been closed before.\nfunc (evt *Event) Close() error {\n\tif evt.id == 0 {\n\t\treturn os.ErrClosed\n\t}\n\n\tevt.id = 0\n\truntime.SetFinalizer(evt, nil)\n\tpe := fmt.Sprintf(\"%s/%s\", evt.group, evt.name)\n\treturn removeEvent(evt.typ, pe)\n}\n\nfunc removeEvent(typ ProbeType, pe string) error {\n\tf, err := typ.eventsFile()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\t// See [k,u]probe_events syntax above. The probe type does not need to be specified\n\t// for removals.\n\tif _, err = f.WriteString(\"-:\" + pe); err != nil {\n\t\treturn fmt.Errorf(\"remove event %q from %s: %w\", pe, f.Name(), err)\n\t}\n\n\treturn nil\n}\n\n// ID returns the tracefs ID associated with the event.\nfunc (evt *Event) ID() uint64 {\n\treturn evt.id\n}\n\n// Group returns the tracefs group used by the event.\nfunc (evt *Event) Group() string {\n\treturn evt.group\n}\n\n// KprobeToken creates the SYM[+offs] token for the tracefs api.\nfunc KprobeToken(args ProbeArgs) string {\n\tpo := args.Symbol\n\n\tif args.Offset != 0 {\n\t\tpo += fmt.Sprintf(\"+%#x\", args.Offset)\n\t}\n\n\treturn po\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/tracefs/probetype_string.go",
    "content": "// Code generated by \"stringer -type=ProbeType -linecomment\"; DO NOT EDIT.\n\npackage tracefs\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[Kprobe-0]\n\t_ = x[Uprobe-1]\n}\n\nconst _ProbeType_name = \"kprobeuprobe\"\n\nvar _ProbeType_index = [...]uint8{0, 6, 12}\n\nfunc (i ProbeType) String() string {\n\tif i >= ProbeType(len(_ProbeType_index)-1) {\n\t\treturn \"ProbeType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _ProbeType_name[_ProbeType_index[i]:_ProbeType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/tracefs/uprobe.go",
    "content": "package tracefs\n\nimport \"fmt\"\n\n// UprobeToken creates the PATH:OFFSET(REF_CTR_OFFSET) token for the tracefs api.\nfunc UprobeToken(args ProbeArgs) string {\n\tpo := fmt.Sprintf(\"%s:%#x\", args.Path, args.Offset)\n\n\tif args.RefCtrOffset != 0 {\n\t\t// This is not documented in Documentation/trace/uprobetracer.txt.\n\t\t// elixir.bootlin.com/linux/v5.15-rc7/source/kernel/trace/trace.c#L5564\n\t\tpo += fmt.Sprintf(\"(%#x)\", args.RefCtrOffset)\n\t}\n\n\treturn po\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/doc.go",
    "content": "// Package unix re-exports Linux specific parts of golang.org/x/sys/unix.\n//\n// It avoids breaking compilation on other OS by providing stubs as follows:\n//   - Invoking a function always returns an error.\n//   - Errnos have distinct, non-zero values.\n//   - Constants have distinct but meaningless values.\n//   - Types use the same names for members, but may or may not follow the\n//     Linux layout.\npackage unix\n\n// Note: please don't add any custom API to this package. Use internal/sys instead.\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/types_linux.go",
    "content": "//go:build linux\n\npackage unix\n\nimport (\n\t\"syscall\"\n\n\tlinux \"golang.org/x/sys/unix\"\n)\n\nconst (\n\tENOENT     = linux.ENOENT\n\tEEXIST     = linux.EEXIST\n\tEAGAIN     = linux.EAGAIN\n\tENOSPC     = linux.ENOSPC\n\tEINVAL     = linux.EINVAL\n\tEPOLLIN    = linux.EPOLLIN\n\tEINTR      = linux.EINTR\n\tEPERM      = linux.EPERM\n\tESRCH      = linux.ESRCH\n\tENODEV     = linux.ENODEV\n\tEBADF      = linux.EBADF\n\tE2BIG      = linux.E2BIG\n\tEFAULT     = linux.EFAULT\n\tEACCES     = linux.EACCES\n\tEILSEQ     = linux.EILSEQ\n\tEOPNOTSUPP = linux.EOPNOTSUPP\n)\n\nconst (\n\tBPF_F_NO_PREALLOC         = linux.BPF_F_NO_PREALLOC\n\tBPF_F_NUMA_NODE           = linux.BPF_F_NUMA_NODE\n\tBPF_F_RDONLY              = linux.BPF_F_RDONLY\n\tBPF_F_WRONLY              = linux.BPF_F_WRONLY\n\tBPF_F_RDONLY_PROG         = linux.BPF_F_RDONLY_PROG\n\tBPF_F_WRONLY_PROG         = linux.BPF_F_WRONLY_PROG\n\tBPF_F_SLEEPABLE           = linux.BPF_F_SLEEPABLE\n\tBPF_F_XDP_HAS_FRAGS       = linux.BPF_F_XDP_HAS_FRAGS\n\tBPF_F_MMAPABLE            = linux.BPF_F_MMAPABLE\n\tBPF_F_INNER_MAP           = linux.BPF_F_INNER_MAP\n\tBPF_F_KPROBE_MULTI_RETURN = linux.BPF_F_KPROBE_MULTI_RETURN\n\tBPF_OBJ_NAME_LEN          = linux.BPF_OBJ_NAME_LEN\n\tBPF_TAG_SIZE              = linux.BPF_TAG_SIZE\n\tBPF_RINGBUF_BUSY_BIT      = linux.BPF_RINGBUF_BUSY_BIT\n\tBPF_RINGBUF_DISCARD_BIT   = linux.BPF_RINGBUF_DISCARD_BIT\n\tBPF_RINGBUF_HDR_SZ        = linux.BPF_RINGBUF_HDR_SZ\n\tSYS_BPF                   = linux.SYS_BPF\n\tF_DUPFD_CLOEXEC           = linux.F_DUPFD_CLOEXEC\n\tEPOLL_CTL_ADD             = linux.EPOLL_CTL_ADD\n\tEPOLL_CLOEXEC             = linux.EPOLL_CLOEXEC\n\tO_CLOEXEC                 = linux.O_CLOEXEC\n\tO_NONBLOCK                = linux.O_NONBLOCK\n\tPROT_NONE                 = linux.PROT_NONE\n\tPROT_READ                 = linux.PROT_READ\n\tPROT_WRITE                = linux.PROT_WRITE\n\tMAP_ANON                  = linux.MAP_ANON\n\tMAP_SHARED                = linux.MAP_SHARED\n\tMAP_PRIVATE               = linux.MAP_PRIVATE\n\tPERF_ATTR_SIZE_VER1       = linux.PERF_ATTR_SIZE_VER1\n\tPERF_TYPE_SOFTWARE        = linux.PERF_TYPE_SOFTWARE\n\tPERF_TYPE_TRACEPOINT      = linux.PERF_TYPE_TRACEPOINT\n\tPERF_COUNT_SW_BPF_OUTPUT  = linux.PERF_COUNT_SW_BPF_OUTPUT\n\tPERF_EVENT_IOC_DISABLE    = linux.PERF_EVENT_IOC_DISABLE\n\tPERF_EVENT_IOC_ENABLE     = linux.PERF_EVENT_IOC_ENABLE\n\tPERF_EVENT_IOC_SET_BPF    = linux.PERF_EVENT_IOC_SET_BPF\n\tPerfBitWatermark          = linux.PerfBitWatermark\n\tPerfBitWriteBackward      = linux.PerfBitWriteBackward\n\tPERF_SAMPLE_RAW           = linux.PERF_SAMPLE_RAW\n\tPERF_FLAG_FD_CLOEXEC      = linux.PERF_FLAG_FD_CLOEXEC\n\tRLIM_INFINITY             = linux.RLIM_INFINITY\n\tRLIMIT_MEMLOCK            = linux.RLIMIT_MEMLOCK\n\tBPF_STATS_RUN_TIME        = linux.BPF_STATS_RUN_TIME\n\tPERF_RECORD_LOST          = linux.PERF_RECORD_LOST\n\tPERF_RECORD_SAMPLE        = linux.PERF_RECORD_SAMPLE\n\tAT_FDCWD                  = linux.AT_FDCWD\n\tRENAME_NOREPLACE          = linux.RENAME_NOREPLACE\n\tSO_ATTACH_BPF             = linux.SO_ATTACH_BPF\n\tSO_DETACH_BPF             = linux.SO_DETACH_BPF\n\tSOL_SOCKET                = linux.SOL_SOCKET\n\tSIGPROF                   = linux.SIGPROF\n\tSIG_BLOCK                 = linux.SIG_BLOCK\n\tSIG_UNBLOCK               = linux.SIG_UNBLOCK\n\tEM_NONE                   = linux.EM_NONE\n\tEM_BPF                    = linux.EM_BPF\n\tBPF_FS_MAGIC              = linux.BPF_FS_MAGIC\n\tTRACEFS_MAGIC             = linux.TRACEFS_MAGIC\n\tDEBUGFS_MAGIC             = linux.DEBUGFS_MAGIC\n)\n\ntype Statfs_t = linux.Statfs_t\ntype Stat_t = linux.Stat_t\ntype Rlimit = linux.Rlimit\ntype Signal = linux.Signal\ntype Sigset_t = linux.Sigset_t\ntype PerfEventMmapPage = linux.PerfEventMmapPage\ntype EpollEvent = linux.EpollEvent\ntype PerfEventAttr = linux.PerfEventAttr\ntype Utsname = linux.Utsname\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn linux.Syscall(trap, a1, a2, a3)\n}\n\nfunc PthreadSigmask(how int, set, oldset *Sigset_t) error {\n\treturn linux.PthreadSigmask(how, set, oldset)\n}\n\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn linux.FcntlInt(fd, cmd, arg)\n}\n\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn linux.IoctlSetInt(fd, req, value)\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\treturn linux.Statfs(path, buf)\n}\n\nfunc Close(fd int) (err error) {\n\treturn linux.Close(fd)\n}\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\treturn linux.EpollWait(epfd, events, msec)\n}\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\treturn linux.EpollCtl(epfd, op, fd, event)\n}\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\treturn linux.Eventfd(initval, flags)\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\treturn linux.Write(fd, p)\n}\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\treturn linux.EpollCreate1(flag)\n}\n\nfunc SetNonblock(fd int, nonblocking bool) (err error) {\n\treturn linux.SetNonblock(fd, nonblocking)\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn linux.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn linux.Munmap(b)\n}\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\treturn linux.PerfEventOpen(attr, pid, cpu, groupFd, flags)\n}\n\nfunc Uname(buf *Utsname) (err error) {\n\treturn linux.Uname(buf)\n}\n\nfunc Getpid() int {\n\treturn linux.Getpid()\n}\n\nfunc Gettid() int {\n\treturn linux.Gettid()\n}\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\treturn linux.Tgkill(tgid, tid, sig)\n}\n\nfunc BytePtrFromString(s string) (*byte, error) {\n\treturn linux.BytePtrFromString(s)\n}\n\nfunc ByteSliceToString(s []byte) string {\n\treturn linux.ByteSliceToString(s)\n}\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) error {\n\treturn linux.Renameat2(olddirfd, oldpath, newdirfd, newpath, flags)\n}\n\nfunc Prlimit(pid, resource int, new, old *Rlimit) error {\n\treturn linux.Prlimit(pid, resource, new, old)\n}\n\nfunc Open(path string, mode int, perm uint32) (int, error) {\n\treturn linux.Open(path, mode, perm)\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\treturn linux.Fstat(fd, stat)\n}\n\nfunc SetsockoptInt(fd, level, opt, value int) error {\n\treturn linux.SetsockoptInt(fd, level, opt, value)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/unix/types_other.go",
    "content": "//go:build !linux\n\npackage unix\n\nimport (\n\t\"fmt\"\n\t\"runtime\"\n\t\"syscall\"\n)\n\nvar errNonLinux = fmt.Errorf(\"unsupported platform %s/%s\", runtime.GOOS, runtime.GOARCH)\n\n// Errnos are distinct and non-zero.\nconst (\n\tENOENT syscall.Errno = iota + 1\n\tEEXIST\n\tEAGAIN\n\tENOSPC\n\tEINVAL\n\tEINTR\n\tEPERM\n\tESRCH\n\tENODEV\n\tEBADF\n\tE2BIG\n\tEFAULT\n\tEACCES\n\tEILSEQ\n\tEOPNOTSUPP\n)\n\n// Constants are distinct to avoid breaking switch statements.\nconst (\n\tBPF_F_NO_PREALLOC = iota\n\tBPF_F_NUMA_NODE\n\tBPF_F_RDONLY\n\tBPF_F_WRONLY\n\tBPF_F_RDONLY_PROG\n\tBPF_F_WRONLY_PROG\n\tBPF_F_SLEEPABLE\n\tBPF_F_MMAPABLE\n\tBPF_F_INNER_MAP\n\tBPF_F_KPROBE_MULTI_RETURN\n\tBPF_F_XDP_HAS_FRAGS\n\tBPF_OBJ_NAME_LEN\n\tBPF_TAG_SIZE\n\tBPF_RINGBUF_BUSY_BIT\n\tBPF_RINGBUF_DISCARD_BIT\n\tBPF_RINGBUF_HDR_SZ\n\tSYS_BPF\n\tF_DUPFD_CLOEXEC\n\tEPOLLIN\n\tEPOLL_CTL_ADD\n\tEPOLL_CLOEXEC\n\tO_CLOEXEC\n\tO_NONBLOCK\n\tPROT_NONE\n\tPROT_READ\n\tPROT_WRITE\n\tMAP_ANON\n\tMAP_SHARED\n\tMAP_PRIVATE\n\tPERF_ATTR_SIZE_VER1\n\tPERF_TYPE_SOFTWARE\n\tPERF_TYPE_TRACEPOINT\n\tPERF_COUNT_SW_BPF_OUTPUT\n\tPERF_EVENT_IOC_DISABLE\n\tPERF_EVENT_IOC_ENABLE\n\tPERF_EVENT_IOC_SET_BPF\n\tPerfBitWatermark\n\tPerfBitWriteBackward\n\tPERF_SAMPLE_RAW\n\tPERF_FLAG_FD_CLOEXEC\n\tRLIM_INFINITY\n\tRLIMIT_MEMLOCK\n\tBPF_STATS_RUN_TIME\n\tPERF_RECORD_LOST\n\tPERF_RECORD_SAMPLE\n\tAT_FDCWD\n\tRENAME_NOREPLACE\n\tSO_ATTACH_BPF\n\tSO_DETACH_BPF\n\tSOL_SOCKET\n\tSIGPROF\n\tSIG_BLOCK\n\tSIG_UNBLOCK\n\tEM_NONE\n\tEM_BPF\n\tBPF_FS_MAGIC\n\tTRACEFS_MAGIC\n\tDEBUGFS_MAGIC\n)\n\ntype Statfs_t struct {\n\tType    int64\n\tBsize   int64\n\tBlocks  uint64\n\tBfree   uint64\n\tBavail  uint64\n\tFiles   uint64\n\tFfree   uint64\n\tFsid    [2]int32\n\tNamelen int64\n\tFrsize  int64\n\tFlags   int64\n\tSpare   [4]int64\n}\n\ntype Stat_t struct {\n\tDev     uint64\n\tIno     uint64\n\tNlink   uint64\n\tMode    uint32\n\tUid     uint32\n\tGid     uint32\n\t_       int32\n\tRdev    uint64\n\tSize    int64\n\tBlksize int64\n\tBlocks  int64\n}\n\ntype Rlimit struct {\n\tCur uint64\n\tMax uint64\n}\n\ntype Signal int\n\ntype Sigset_t struct {\n\tVal [4]uint64\n}\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn 0, 0, syscall.ENOTSUP\n}\n\nfunc PthreadSigmask(how int, set, oldset *Sigset_t) error {\n\treturn errNonLinux\n}\n\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn -1, errNonLinux\n}\n\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn errNonLinux\n}\n\nfunc Statfs(path string, buf *Statfs_t) error {\n\treturn errNonLinux\n}\n\nfunc Close(fd int) (err error) {\n\treturn errNonLinux\n}\n\ntype EpollEvent struct {\n\tEvents uint32\n\tFd     int32\n\tPad    int32\n}\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\treturn 0, errNonLinux\n}\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\treturn errNonLinux\n}\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\treturn 0, errNonLinux\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\treturn 0, errNonLinux\n}\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\treturn 0, errNonLinux\n}\n\ntype PerfEventMmapPage struct {\n\tVersion        uint32\n\tCompat_version uint32\n\tLock           uint32\n\tIndex          uint32\n\tOffset         int64\n\tTime_enabled   uint64\n\tTime_running   uint64\n\tCapabilities   uint64\n\tPmc_width      uint16\n\tTime_shift     uint16\n\tTime_mult      uint32\n\tTime_offset    uint64\n\tTime_zero      uint64\n\tSize           uint32\n\n\tData_head   uint64\n\tData_tail   uint64\n\tData_offset uint64\n\tData_size   uint64\n\tAux_head    uint64\n\tAux_tail    uint64\n\tAux_offset  uint64\n\tAux_size    uint64\n}\n\nfunc SetNonblock(fd int, nonblocking bool) (err error) {\n\treturn errNonLinux\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn []byte{}, errNonLinux\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn errNonLinux\n}\n\ntype PerfEventAttr struct {\n\tType               uint32\n\tSize               uint32\n\tConfig             uint64\n\tSample             uint64\n\tSample_type        uint64\n\tRead_format        uint64\n\tBits               uint64\n\tWakeup             uint32\n\tBp_type            uint32\n\tExt1               uint64\n\tExt2               uint64\n\tBranch_sample_type uint64\n\tSample_regs_user   uint64\n\tSample_stack_user  uint32\n\tClockid            int32\n\tSample_regs_intr   uint64\n\tAux_watermark      uint32\n\tSample_max_stack   uint16\n}\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\treturn 0, errNonLinux\n}\n\ntype Utsname struct {\n\tRelease [65]byte\n\tVersion [65]byte\n}\n\nfunc Uname(buf *Utsname) (err error) {\n\treturn errNonLinux\n}\n\nfunc Getpid() int {\n\treturn -1\n}\n\nfunc Gettid() int {\n\treturn -1\n}\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\treturn errNonLinux\n}\n\nfunc BytePtrFromString(s string) (*byte, error) {\n\treturn nil, errNonLinux\n}\n\nfunc ByteSliceToString(s []byte) string {\n\treturn \"\"\n}\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) error {\n\treturn errNonLinux\n}\n\nfunc Prlimit(pid, resource int, new, old *Rlimit) error {\n\treturn errNonLinux\n}\n\nfunc Open(path string, mode int, perm uint32) (int, error) {\n\treturn -1, errNonLinux\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\treturn errNonLinux\n}\n\nfunc SetsockoptInt(fd, level, opt, value int) error {\n\treturn errNonLinux\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/vdso.go",
    "content": "package internal\n\nimport (\n\t\"debug/elf\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar (\n\terrAuxvNoVDSO = errors.New(\"no vdso address found in auxv\")\n)\n\n// vdsoVersion returns the LINUX_VERSION_CODE embedded in the vDSO library\n// linked into the current process image.\nfunc vdsoVersion() (uint32, error) {\n\t// Read data from the auxiliary vector, which is normally passed directly\n\t// to the process. Go does not expose that data, so we must read it from procfs.\n\t// https://man7.org/linux/man-pages/man3/getauxval.3.html\n\tav, err := os.Open(\"/proc/self/auxv\")\n\tif errors.Is(err, unix.EACCES) {\n\t\treturn 0, fmt.Errorf(\"opening auxv: %w (process may not be dumpable due to file capabilities)\", err)\n\t}\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"opening auxv: %w\", err)\n\t}\n\tdefer av.Close()\n\n\tvdsoAddr, err := vdsoMemoryAddress(av)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"finding vDSO memory address: %w\", err)\n\t}\n\n\t// Use /proc/self/mem rather than unsafe.Pointer tricks.\n\tmem, err := os.Open(\"/proc/self/mem\")\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"opening mem: %w\", err)\n\t}\n\tdefer mem.Close()\n\n\t// Open ELF at provided memory address, as offset into /proc/self/mem.\n\tc, err := vdsoLinuxVersionCode(io.NewSectionReader(mem, int64(vdsoAddr), math.MaxInt64))\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"reading linux version code: %w\", err)\n\t}\n\n\treturn c, nil\n}\n\n// vdsoMemoryAddress returns the memory address of the vDSO library\n// linked into the current process image. r is an io.Reader into an auxv blob.\nfunc vdsoMemoryAddress(r io.Reader) (uint64, error) {\n\tconst (\n\t\t_AT_NULL         = 0  // End of vector\n\t\t_AT_SYSINFO_EHDR = 33 // Offset to vDSO blob in process image\n\t)\n\n\t// Loop through all tag/value pairs in auxv until we find `AT_SYSINFO_EHDR`,\n\t// the address of a page containing the virtual Dynamic Shared Object (vDSO).\n\taux := struct{ Tag, Val uint64 }{}\n\tfor {\n\t\tif err := binary.Read(r, NativeEndian, &aux); err != nil {\n\t\t\treturn 0, fmt.Errorf(\"reading auxv entry: %w\", err)\n\t\t}\n\n\t\tswitch aux.Tag {\n\t\tcase _AT_SYSINFO_EHDR:\n\t\t\tif aux.Val != 0 {\n\t\t\t\treturn aux.Val, nil\n\t\t\t}\n\t\t\treturn 0, fmt.Errorf(\"invalid vDSO address in auxv\")\n\t\t// _AT_NULL is always the last tag/val pair in the aux vector\n\t\t// and can be treated like EOF.\n\t\tcase _AT_NULL:\n\t\t\treturn 0, errAuxvNoVDSO\n\t\t}\n\t}\n}\n\n// format described at https://www.man7.org/linux/man-pages/man5/elf.5.html in section 'Notes (Nhdr)'\ntype elfNoteHeader struct {\n\tNameSize int32\n\tDescSize int32\n\tType     int32\n}\n\n// vdsoLinuxVersionCode returns the LINUX_VERSION_CODE embedded in\n// the ELF notes section of the binary provided by the reader.\nfunc vdsoLinuxVersionCode(r io.ReaderAt) (uint32, error) {\n\thdr, err := NewSafeELFFile(r)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"reading vDSO ELF: %w\", err)\n\t}\n\n\tsections := hdr.SectionsByType(elf.SHT_NOTE)\n\tif len(sections) == 0 {\n\t\treturn 0, fmt.Errorf(\"no note section found in vDSO ELF\")\n\t}\n\n\tfor _, sec := range sections {\n\t\tsr := sec.Open()\n\t\tvar n elfNoteHeader\n\n\t\t// Read notes until we find one named 'Linux'.\n\t\tfor {\n\t\t\tif err := binary.Read(sr, hdr.ByteOrder, &n); err != nil {\n\t\t\t\tif errors.Is(err, io.EOF) {\n\t\t\t\t\t// We looked at all the notes in this section\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\treturn 0, fmt.Errorf(\"reading note header: %w\", err)\n\t\t\t}\n\n\t\t\t// If a note name is defined, it follows the note header.\n\t\t\tvar name string\n\t\t\tif n.NameSize > 0 {\n\t\t\t\t// Read the note name, aligned to 4 bytes.\n\t\t\t\tbuf := make([]byte, Align(n.NameSize, 4))\n\t\t\t\tif err := binary.Read(sr, hdr.ByteOrder, &buf); err != nil {\n\t\t\t\t\treturn 0, fmt.Errorf(\"reading note name: %w\", err)\n\t\t\t\t}\n\n\t\t\t\t// Read nul-terminated string.\n\t\t\t\tname = unix.ByteSliceToString(buf[:n.NameSize])\n\t\t\t}\n\n\t\t\t// If a note descriptor is defined, it follows the name.\n\t\t\t// It is possible for a note to have a descriptor but not a name.\n\t\t\tif n.DescSize > 0 {\n\t\t\t\t// LINUX_VERSION_CODE is a uint32 value.\n\t\t\t\tif name == \"Linux\" && n.DescSize == 4 && n.Type == 0 {\n\t\t\t\t\tvar version uint32\n\t\t\t\t\tif err := binary.Read(sr, hdr.ByteOrder, &version); err != nil {\n\t\t\t\t\t\treturn 0, fmt.Errorf(\"reading note descriptor: %w\", err)\n\t\t\t\t\t}\n\t\t\t\t\treturn version, nil\n\t\t\t\t}\n\n\t\t\t\t// Discard the note descriptor if it exists but we're not interested in it.\n\t\t\t\tif _, err := io.CopyN(io.Discard, sr, int64(Align(n.DescSize, 4))); err != nil {\n\t\t\t\t\treturn 0, err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn 0, fmt.Errorf(\"no Linux note in ELF\")\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/internal/version.go",
    "content": "package internal\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nconst (\n\t// Version constant used in ELF binaries indicating that the loader needs to\n\t// substitute the eBPF program's version with the value of the kernel's\n\t// KERNEL_VERSION compile-time macro. Used for compatibility with BCC, gobpf\n\t// and RedSift.\n\tMagicKernelVersion = 0xFFFFFFFE\n)\n\n// A Version in the form Major.Minor.Patch.\ntype Version [3]uint16\n\n// NewVersion creates a version from a string like \"Major.Minor.Patch\".\n//\n// Patch is optional.\nfunc NewVersion(ver string) (Version, error) {\n\tvar major, minor, patch uint16\n\tn, _ := fmt.Sscanf(ver, \"%d.%d.%d\", &major, &minor, &patch)\n\tif n < 2 {\n\t\treturn Version{}, fmt.Errorf(\"invalid version: %s\", ver)\n\t}\n\treturn Version{major, minor, patch}, nil\n}\n\n// NewVersionFromCode creates a version from a LINUX_VERSION_CODE.\nfunc NewVersionFromCode(code uint32) Version {\n\treturn Version{\n\t\tuint16(uint8(code >> 16)),\n\t\tuint16(uint8(code >> 8)),\n\t\tuint16(uint8(code)),\n\t}\n}\n\nfunc (v Version) String() string {\n\tif v[2] == 0 {\n\t\treturn fmt.Sprintf(\"v%d.%d\", v[0], v[1])\n\t}\n\treturn fmt.Sprintf(\"v%d.%d.%d\", v[0], v[1], v[2])\n}\n\n// Less returns true if the version is less than another version.\nfunc (v Version) Less(other Version) bool {\n\tfor i, a := range v {\n\t\tif a == other[i] {\n\t\t\tcontinue\n\t\t}\n\t\treturn a < other[i]\n\t}\n\treturn false\n}\n\n// Unspecified returns true if the version is all zero.\nfunc (v Version) Unspecified() bool {\n\treturn v[0] == 0 && v[1] == 0 && v[2] == 0\n}\n\n// Kernel implements the kernel's KERNEL_VERSION macro from linux/version.h.\n// It represents the kernel version and patch level as a single value.\nfunc (v Version) Kernel() uint32 {\n\n\t// Kernels 4.4 and 4.9 have their SUBLEVEL clamped to 255 to avoid\n\t// overflowing into PATCHLEVEL.\n\t// See kernel commit 9b82f13e7ef3 (\"kbuild: clamp SUBLEVEL to 255\").\n\ts := v[2]\n\tif s > 255 {\n\t\ts = 255\n\t}\n\n\t// Truncate members to uint8 to prevent them from spilling over into\n\t// each other when overflowing 8 bits.\n\treturn uint32(uint8(v[0]))<<16 | uint32(uint8(v[1]))<<8 | uint32(uint8(s))\n}\n\n// KernelVersion returns the version of the currently running kernel.\nvar KernelVersion = Memoize(func() (Version, error) {\n\treturn detectKernelVersion()\n})\n\n// detectKernelVersion returns the version of the running kernel.\nfunc detectKernelVersion() (Version, error) {\n\tvc, err := vdsoVersion()\n\tif err != nil {\n\t\treturn Version{}, err\n\t}\n\treturn NewVersionFromCode(vc), nil\n}\n\n// KernelRelease returns the release string of the running kernel.\n// Its format depends on the Linux distribution and corresponds to directory\n// names in /lib/modules by convention. Some examples are 5.15.17-1-lts and\n// 4.19.0-16-amd64.\nfunc KernelRelease() (string, error) {\n\tvar uname unix.Utsname\n\tif err := unix.Uname(&uname); err != nil {\n\t\treturn \"\", fmt.Errorf(\"uname failed: %w\", err)\n\t}\n\n\treturn unix.ByteSliceToString(uname.Release[:]), nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/cgroup.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/cilium/ebpf\"\n)\n\ntype cgroupAttachFlags uint32\n\nconst (\n\t// Allow programs attached to sub-cgroups to override the verdict of this\n\t// program.\n\tflagAllowOverride cgroupAttachFlags = 1 << iota\n\t// Allow attaching multiple programs to the cgroup. Only works if the cgroup\n\t// has zero or more programs attached using the Multi flag. Implies override.\n\tflagAllowMulti\n\t// Set automatically by progAttachCgroup.Update(). Used for updating a\n\t// specific given program attached in multi-mode.\n\tflagReplace\n)\n\ntype CgroupOptions struct {\n\t// Path to a cgroupv2 folder.\n\tPath string\n\t// One of the AttachCgroup* constants\n\tAttach ebpf.AttachType\n\t// Program must be of type CGroup*, and the attach type must match Attach.\n\tProgram *ebpf.Program\n}\n\n// AttachCgroup links a BPF program to a cgroup.\n//\n// If the running kernel doesn't support bpf_link, attempts to emulate its\n// semantics using the legacy PROG_ATTACH mechanism. If bpf_link is not\n// available, the returned [Link] will not support pinning to bpffs.\n//\n// If you need more control over attachment flags or the attachment mechanism\n// used, look at [RawAttachProgram] and [AttachRawLink] instead.\nfunc AttachCgroup(opts CgroupOptions) (cg Link, err error) {\n\tcgroup, err := os.Open(opts.Path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't open cgroup: %s\", err)\n\t}\n\tdefer func() {\n\t\tif _, ok := cg.(*progAttachCgroup); ok {\n\t\t\t// Skip closing the cgroup handle if we return a valid progAttachCgroup,\n\t\t\t// where the handle is retained to implement Update().\n\t\t\treturn\n\t\t}\n\t\tcgroup.Close()\n\t}()\n\n\tcg, err = newLinkCgroup(cgroup, opts.Attach, opts.Program)\n\tif err == nil {\n\t\treturn cg, nil\n\t}\n\n\tif errors.Is(err, ErrNotSupported) {\n\t\tcg, err = newProgAttachCgroup(cgroup, opts.Attach, opts.Program, flagAllowMulti)\n\t}\n\tif errors.Is(err, ErrNotSupported) {\n\t\tcg, err = newProgAttachCgroup(cgroup, opts.Attach, opts.Program, flagAllowOverride)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn cg, nil\n}\n\ntype progAttachCgroup struct {\n\tcgroup     *os.File\n\tcurrent    *ebpf.Program\n\tattachType ebpf.AttachType\n\tflags      cgroupAttachFlags\n}\n\nvar _ Link = (*progAttachCgroup)(nil)\n\nfunc (cg *progAttachCgroup) isLink() {}\n\n// newProgAttachCgroup attaches prog to cgroup using BPF_PROG_ATTACH.\n// cgroup and prog are retained by [progAttachCgroup].\nfunc newProgAttachCgroup(cgroup *os.File, attach ebpf.AttachType, prog *ebpf.Program, flags cgroupAttachFlags) (*progAttachCgroup, error) {\n\tif flags&flagAllowMulti > 0 {\n\t\tif err := haveProgAttachReplace(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"can't support multiple programs: %w\", err)\n\t\t}\n\t}\n\n\t// Use a program handle that cannot be closed by the caller.\n\tclone, err := prog.Clone()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = RawAttachProgram(RawAttachProgramOptions{\n\t\tTarget:  int(cgroup.Fd()),\n\t\tProgram: clone,\n\t\tFlags:   uint32(flags),\n\t\tAttach:  attach,\n\t})\n\tif err != nil {\n\t\tclone.Close()\n\t\treturn nil, fmt.Errorf(\"cgroup: %w\", err)\n\t}\n\n\treturn &progAttachCgroup{cgroup, clone, attach, flags}, nil\n}\n\nfunc (cg *progAttachCgroup) Close() error {\n\tdefer cg.cgroup.Close()\n\tdefer cg.current.Close()\n\n\terr := RawDetachProgram(RawDetachProgramOptions{\n\t\tTarget:  int(cg.cgroup.Fd()),\n\t\tProgram: cg.current,\n\t\tAttach:  cg.attachType,\n\t})\n\tif err != nil {\n\t\treturn fmt.Errorf(\"close cgroup: %s\", err)\n\t}\n\treturn nil\n}\n\nfunc (cg *progAttachCgroup) Update(prog *ebpf.Program) error {\n\tnew, err := prog.Clone()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\targs := RawAttachProgramOptions{\n\t\tTarget:  int(cg.cgroup.Fd()),\n\t\tProgram: prog,\n\t\tAttach:  cg.attachType,\n\t\tFlags:   uint32(cg.flags),\n\t}\n\n\tif cg.flags&flagAllowMulti > 0 {\n\t\t// Atomically replacing multiple programs requires at least\n\t\t// 5.5 (commit 7dd68b3279f17921 \"bpf: Support replacing cgroup-bpf\n\t\t// program in MULTI mode\")\n\t\targs.Flags |= uint32(flagReplace)\n\t\targs.Replace = cg.current\n\t}\n\n\tif err := RawAttachProgram(args); err != nil {\n\t\tnew.Close()\n\t\treturn fmt.Errorf(\"can't update cgroup: %s\", err)\n\t}\n\n\tcg.current.Close()\n\tcg.current = new\n\treturn nil\n}\n\nfunc (cg *progAttachCgroup) Pin(string) error {\n\treturn fmt.Errorf(\"can't pin cgroup: %w\", ErrNotSupported)\n}\n\nfunc (cg *progAttachCgroup) Unpin() error {\n\treturn fmt.Errorf(\"can't unpin cgroup: %w\", ErrNotSupported)\n}\n\nfunc (cg *progAttachCgroup) Info() (*Info, error) {\n\treturn nil, fmt.Errorf(\"can't get cgroup info: %w\", ErrNotSupported)\n}\n\ntype linkCgroup struct {\n\tRawLink\n}\n\nvar _ Link = (*linkCgroup)(nil)\n\n// newLinkCgroup attaches prog to cgroup using BPF_LINK_CREATE.\nfunc newLinkCgroup(cgroup *os.File, attach ebpf.AttachType, prog *ebpf.Program) (*linkCgroup, error) {\n\tlink, err := AttachRawLink(RawLinkOptions{\n\t\tTarget:  int(cgroup.Fd()),\n\t\tProgram: prog,\n\t\tAttach:  attach,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &linkCgroup{*link}, err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/doc.go",
    "content": "// Package link allows attaching eBPF programs to various kernel hooks.\npackage link\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/iter.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype IterOptions struct {\n\t// Program must be of type Tracing with attach type\n\t// AttachTraceIter. The kind of iterator to attach to is\n\t// determined at load time via the AttachTo field.\n\t//\n\t// AttachTo requires the kernel to include BTF of itself,\n\t// and it to be compiled with a recent pahole (>= 1.16).\n\tProgram *ebpf.Program\n\n\t// Map specifies the target map for bpf_map_elem and sockmap iterators.\n\t// It may be nil.\n\tMap *ebpf.Map\n}\n\n// AttachIter attaches a BPF seq_file iterator.\nfunc AttachIter(opts IterOptions) (*Iter, error) {\n\tif err := haveBPFLink(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tprogFd := opts.Program.FD()\n\tif progFd < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program: %s\", sys.ErrClosedFd)\n\t}\n\n\tvar info bpfIterLinkInfoMap\n\tif opts.Map != nil {\n\t\tmapFd := opts.Map.FD()\n\t\tif mapFd < 0 {\n\t\t\treturn nil, fmt.Errorf(\"invalid map: %w\", sys.ErrClosedFd)\n\t\t}\n\t\tinfo.map_fd = uint32(mapFd)\n\t}\n\n\tattr := sys.LinkCreateIterAttr{\n\t\tProgFd:      uint32(progFd),\n\t\tAttachType:  sys.AttachType(ebpf.AttachTraceIter),\n\t\tIterInfo:    sys.NewPointer(unsafe.Pointer(&info)),\n\t\tIterInfoLen: uint32(unsafe.Sizeof(info)),\n\t}\n\n\tfd, err := sys.LinkCreateIter(&attr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't link iterator: %w\", err)\n\t}\n\n\treturn &Iter{RawLink{fd, \"\"}}, err\n}\n\n// Iter represents an attached bpf_iter.\ntype Iter struct {\n\tRawLink\n}\n\n// Open creates a new instance of the iterator.\n//\n// Reading from the returned reader triggers the BPF program.\nfunc (it *Iter) Open() (io.ReadCloser, error) {\n\tattr := &sys.IterCreateAttr{\n\t\tLinkFd: it.fd.Uint(),\n\t}\n\n\tfd, err := sys.IterCreate(attr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't create iterator: %w\", err)\n\t}\n\n\treturn fd.File(\"bpf_iter\"), nil\n}\n\n// union bpf_iter_link_info.map\ntype bpfIterLinkInfoMap struct {\n\tmap_fd uint32\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/kprobe.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"strings\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// KprobeOptions defines additional parameters that will be used\n// when loading Kprobes.\ntype KprobeOptions struct {\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\t//\n\t// Needs kernel 5.15+.\n\tCookie uint64\n\t// Offset of the kprobe relative to the traced symbol.\n\t// Can be used to insert kprobes at arbitrary offsets in kernel functions,\n\t// e.g. in places where functions have been inlined.\n\tOffset uint64\n\t// Increase the maximum number of concurrent invocations of a kretprobe.\n\t// Required when tracing some long running functions in the kernel.\n\t//\n\t// Deprecated: this setting forces the use of an outdated kernel API and is not portable\n\t// across kernel versions.\n\tRetprobeMaxActive int\n\t// Prefix used for the event name if the kprobe must be attached using tracefs.\n\t// The group name will be formatted as `<prefix>_<randomstr>`.\n\t// The default empty string is equivalent to \"ebpf\" as the prefix.\n\tTraceFSPrefix string\n}\n\nfunc (ko *KprobeOptions) cookie() uint64 {\n\tif ko == nil {\n\t\treturn 0\n\t}\n\treturn ko.Cookie\n}\n\n// Kprobe attaches the given eBPF program to a perf event that fires when the\n// given kernel symbol starts executing. See /proc/kallsyms for available\n// symbols. For example, printk():\n//\n//\tkp, err := Kprobe(\"printk\", prog, nil)\n//\n// Losing the reference to the resulting Link (kp) will close the Kprobe\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// If attaching to symbol fails, automatically retries with the running\n// platform's syscall prefix (e.g. __x64_) to support attaching to syscalls\n// in a portable fashion.\nfunc Kprobe(symbol string, prog *ebpf.Program, opts *KprobeOptions) (Link, error) {\n\tk, err := kprobe(symbol, prog, opts, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlnk, err := attachPerfEvent(k, prog, opts.cookie())\n\tif err != nil {\n\t\tk.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n\n// Kretprobe attaches the given eBPF program to a perf event that fires right\n// before the given kernel symbol exits, with the function stack left intact.\n// See /proc/kallsyms for available symbols. For example, printk():\n//\n//\tkp, err := Kretprobe(\"printk\", prog, nil)\n//\n// Losing the reference to the resulting Link (kp) will close the Kretprobe\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// If attaching to symbol fails, automatically retries with the running\n// platform's syscall prefix (e.g. __x64_) to support attaching to syscalls\n// in a portable fashion.\n//\n// On kernels 5.10 and earlier, setting a kretprobe on a nonexistent symbol\n// incorrectly returns unix.EINVAL instead of os.ErrNotExist.\nfunc Kretprobe(symbol string, prog *ebpf.Program, opts *KprobeOptions) (Link, error) {\n\tk, err := kprobe(symbol, prog, opts, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlnk, err := attachPerfEvent(k, prog, opts.cookie())\n\tif err != nil {\n\t\tk.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n\n// isValidKprobeSymbol implements the equivalent of a regex match\n// against \"^[a-zA-Z_][0-9a-zA-Z_.]*$\".\nfunc isValidKprobeSymbol(s string) bool {\n\tif len(s) < 1 {\n\t\treturn false\n\t}\n\n\tfor i, c := range []byte(s) {\n\t\tswitch {\n\t\tcase c >= 'a' && c <= 'z':\n\t\tcase c >= 'A' && c <= 'Z':\n\t\tcase c == '_':\n\t\tcase i > 0 && c >= '0' && c <= '9':\n\n\t\t// Allow `.` in symbol name. GCC-compiled kernel may change symbol name\n\t\t// to have a `.isra.$n` suffix, like `udp_send_skb.isra.52`.\n\t\t// See: https://gcc.gnu.org/gcc-10/changes.html\n\t\tcase i > 0 && c == '.':\n\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n// kprobe opens a perf event on the given symbol and attaches prog to it.\n// If ret is true, create a kretprobe.\nfunc kprobe(symbol string, prog *ebpf.Program, opts *KprobeOptions, ret bool) (*perfEvent, error) {\n\tif symbol == \"\" {\n\t\treturn nil, fmt.Errorf(\"symbol name cannot be empty: %w\", errInvalidInput)\n\t}\n\tif prog == nil {\n\t\treturn nil, fmt.Errorf(\"prog cannot be nil: %w\", errInvalidInput)\n\t}\n\tif !isValidKprobeSymbol(symbol) {\n\t\treturn nil, fmt.Errorf(\"symbol '%s' must be a valid symbol in /proc/kallsyms: %w\", symbol, errInvalidInput)\n\t}\n\tif prog.Type() != ebpf.Kprobe {\n\t\treturn nil, fmt.Errorf(\"eBPF program type %s is not a Kprobe: %w\", prog.Type(), errInvalidInput)\n\t}\n\n\targs := tracefs.ProbeArgs{\n\t\tType:   tracefs.Kprobe,\n\t\tPid:    perfAllThreads,\n\t\tSymbol: symbol,\n\t\tRet:    ret,\n\t}\n\n\tif opts != nil {\n\t\targs.RetprobeMaxActive = opts.RetprobeMaxActive\n\t\targs.Cookie = opts.Cookie\n\t\targs.Offset = opts.Offset\n\t\targs.Group = opts.TraceFSPrefix\n\t}\n\n\t// Use kprobe PMU if the kernel has it available.\n\ttp, err := pmuProbe(args)\n\tif errors.Is(err, os.ErrNotExist) || errors.Is(err, unix.EINVAL) {\n\t\tif prefix := internal.PlatformPrefix(); prefix != \"\" {\n\t\t\targs.Symbol = prefix + symbol\n\t\t\ttp, err = pmuProbe(args)\n\t\t}\n\t}\n\tif err == nil {\n\t\treturn tp, nil\n\t}\n\tif err != nil && !errors.Is(err, ErrNotSupported) {\n\t\treturn nil, fmt.Errorf(\"creating perf_kprobe PMU (arch-specific fallback for %q): %w\", symbol, err)\n\t}\n\n\t// Use tracefs if kprobe PMU is missing.\n\targs.Symbol = symbol\n\ttp, err = tracefsProbe(args)\n\tif errors.Is(err, os.ErrNotExist) || errors.Is(err, unix.EINVAL) {\n\t\tif prefix := internal.PlatformPrefix(); prefix != \"\" {\n\t\t\targs.Symbol = prefix + symbol\n\t\t\ttp, err = tracefsProbe(args)\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating tracefs event (arch-specific fallback for %q): %w\", symbol, err)\n\t}\n\n\treturn tp, nil\n}\n\n// pmuProbe opens a perf event based on a Performance Monitoring Unit.\n//\n// Requires at least a 4.17 kernel.\n// e12f03d7031a \"perf/core: Implement the 'perf_kprobe' PMU\"\n// 33ea4b24277b \"perf/core: Implement the 'perf_uprobe' PMU\"\n//\n// Returns ErrNotSupported if the kernel doesn't support perf_[k,u]probe PMU\nfunc pmuProbe(args tracefs.ProbeArgs) (*perfEvent, error) {\n\t// Getting the PMU type will fail if the kernel doesn't support\n\t// the perf_[k,u]probe PMU.\n\teventType, err := internal.ReadUint64FromFileOnce(\"%d\\n\", \"/sys/bus/event_source/devices\", args.Type.String(), \"type\")\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, fmt.Errorf(\"%s: %w\", args.Type, ErrNotSupported)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Use tracefs if we want to set kretprobe's retprobeMaxActive.\n\tif args.RetprobeMaxActive != 0 {\n\t\treturn nil, fmt.Errorf(\"pmu probe: non-zero retprobeMaxActive: %w\", ErrNotSupported)\n\t}\n\n\tvar config uint64\n\tif args.Ret {\n\t\tbit, err := internal.ReadUint64FromFileOnce(\"config:%d\\n\", \"/sys/bus/event_source/devices\", args.Type.String(), \"/format/retprobe\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tconfig |= 1 << bit\n\t}\n\n\tvar (\n\t\tattr  unix.PerfEventAttr\n\t\tsp    unsafe.Pointer\n\t\ttoken string\n\t)\n\tswitch args.Type {\n\tcase tracefs.Kprobe:\n\t\t// Create a pointer to a NUL-terminated string for the kernel.\n\t\tsp, err = unsafeStringPtr(args.Symbol)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\ttoken = tracefs.KprobeToken(args)\n\n\t\tattr = unix.PerfEventAttr{\n\t\t\t// The minimum size required for PMU kprobes is PERF_ATTR_SIZE_VER1,\n\t\t\t// since it added the config2 (Ext2) field. Use Ext2 as probe_offset.\n\t\t\tSize:   unix.PERF_ATTR_SIZE_VER1,\n\t\t\tType:   uint32(eventType),   // PMU event type read from sysfs\n\t\t\tExt1:   uint64(uintptr(sp)), // Kernel symbol to trace\n\t\t\tExt2:   args.Offset,         // Kernel symbol offset\n\t\t\tConfig: config,              // Retprobe flag\n\t\t}\n\tcase tracefs.Uprobe:\n\t\tsp, err = unsafeStringPtr(args.Path)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif args.RefCtrOffset != 0 {\n\t\t\tconfig |= args.RefCtrOffset << uprobeRefCtrOffsetShift\n\t\t}\n\n\t\ttoken = tracefs.UprobeToken(args)\n\n\t\tattr = unix.PerfEventAttr{\n\t\t\t// The minimum size required for PMU uprobes is PERF_ATTR_SIZE_VER1,\n\t\t\t// since it added the config2 (Ext2) field. The Size field controls the\n\t\t\t// size of the internal buffer the kernel allocates for reading the\n\t\t\t// perf_event_attr argument from userspace.\n\t\t\tSize:   unix.PERF_ATTR_SIZE_VER1,\n\t\t\tType:   uint32(eventType),   // PMU event type read from sysfs\n\t\t\tExt1:   uint64(uintptr(sp)), // Uprobe path\n\t\t\tExt2:   args.Offset,         // Uprobe offset\n\t\t\tConfig: config,              // RefCtrOffset, Retprobe flag\n\t\t}\n\t}\n\n\trawFd, err := unix.PerfEventOpen(&attr, args.Pid, 0, -1, unix.PERF_FLAG_FD_CLOEXEC)\n\n\t// On some old kernels, kprobe PMU doesn't allow `.` in symbol names and\n\t// return -EINVAL. Return ErrNotSupported to allow falling back to tracefs.\n\t// https://github.com/torvalds/linux/blob/94710cac0ef4/kernel/trace/trace_kprobe.c#L340-L343\n\tif errors.Is(err, unix.EINVAL) && strings.Contains(args.Symbol, \".\") {\n\t\treturn nil, fmt.Errorf(\"token %s: older kernels don't accept dots: %w\", token, ErrNotSupported)\n\t}\n\t// Since commit 97c753e62e6c, ENOENT is correctly returned instead of EINVAL\n\t// when trying to create a retprobe for a missing symbol.\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn nil, fmt.Errorf(\"token %s: not found: %w\", token, err)\n\t}\n\t// Since commit ab105a4fb894, EILSEQ is returned when a kprobe sym+offset is resolved\n\t// to an invalid insn boundary. The exact conditions that trigger this error are\n\t// arch specific however.\n\tif errors.Is(err, unix.EILSEQ) {\n\t\treturn nil, fmt.Errorf(\"token %s: bad insn boundary: %w\", token, os.ErrNotExist)\n\t}\n\t// Since at least commit cb9a19fe4aa51, ENOTSUPP is returned\n\t// when attempting to set a uprobe on a trap instruction.\n\tif errors.Is(err, sys.ENOTSUPP) {\n\t\treturn nil, fmt.Errorf(\"token %s: failed setting uprobe on offset %#x (possible trap insn): %w\", token, args.Offset, err)\n\t}\n\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"token %s: opening perf event: %w\", token, err)\n\t}\n\n\t// Ensure the string pointer is not collected before PerfEventOpen returns.\n\truntime.KeepAlive(sp)\n\n\tfd, err := sys.NewFD(rawFd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Kernel has perf_[k,u]probe PMU available, initialize perf event.\n\treturn newPerfEvent(fd, nil), nil\n}\n\n// tracefsProbe creates a trace event by writing an entry to <tracefs>/[k,u]probe_events.\n// A new trace event group name is generated on every call to support creating\n// multiple trace events for the same kernel or userspace symbol.\n// Path and offset are only set in the case of uprobe(s) and are used to set\n// the executable/library path on the filesystem and the offset where the probe is inserted.\n// A perf event is then opened on the newly-created trace event and returned to the caller.\nfunc tracefsProbe(args tracefs.ProbeArgs) (*perfEvent, error) {\n\tgroupPrefix := \"ebpf\"\n\tif args.Group != \"\" {\n\t\tgroupPrefix = args.Group\n\t}\n\n\t// Generate a random string for each trace event we attempt to create.\n\t// This value is used as the 'group' token in tracefs to allow creating\n\t// multiple kprobe trace events with the same name.\n\tgroup, err := tracefs.RandomGroup(groupPrefix)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"randomizing group name: %w\", err)\n\t}\n\targs.Group = group\n\n\t// Create the [k,u]probe trace event using tracefs.\n\tevt, err := tracefs.NewEvent(args)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating probe entry on tracefs: %w\", err)\n\t}\n\n\t// Kprobes are ephemeral tracepoints and share the same perf event type.\n\tfd, err := openTracepointPerfEvent(evt.ID(), args.Pid)\n\tif err != nil {\n\t\t// Make sure we clean up the created tracefs event when we return error.\n\t\t// If a livepatch handler is already active on the symbol, the write to\n\t\t// tracefs will succeed, a trace event will show up, but creating the\n\t\t// perf event will fail with EBUSY.\n\t\t_ = evt.Close()\n\t\treturn nil, err\n\t}\n\n\treturn newPerfEvent(fd, evt), nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/kprobe_multi.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// KprobeMultiOptions defines additional parameters that will be used\n// when opening a KprobeMulti Link.\ntype KprobeMultiOptions struct {\n\t// Symbols takes a list of kernel symbol names to attach an ebpf program to.\n\t//\n\t// Mutually exclusive with Addresses.\n\tSymbols []string\n\n\t// Addresses takes a list of kernel symbol addresses in case they can not\n\t// be referred to by name.\n\t//\n\t// Note that only start addresses can be specified, since the fprobe API\n\t// limits the attach point to the function entry or return.\n\t//\n\t// Mutually exclusive with Symbols.\n\tAddresses []uintptr\n\n\t// Cookies specifies arbitrary values that can be fetched from an eBPF\n\t// program via `bpf_get_attach_cookie()`.\n\t//\n\t// If set, its length should be equal to the length of Symbols or Addresses.\n\t// Each Cookie is assigned to the Symbol or Address specified at the\n\t// corresponding slice index.\n\tCookies []uint64\n}\n\n// KprobeMulti attaches the given eBPF program to the entry point of a given set\n// of kernel symbols.\n//\n// The difference with Kprobe() is that multi-kprobe accomplishes this in a\n// single system call, making it significantly faster than attaching many\n// probes one at a time.\n//\n// Requires at least Linux 5.18.\nfunc KprobeMulti(prog *ebpf.Program, opts KprobeMultiOptions) (Link, error) {\n\treturn kprobeMulti(prog, opts, 0)\n}\n\n// KretprobeMulti attaches the given eBPF program to the return point of a given\n// set of kernel symbols.\n//\n// The difference with Kretprobe() is that multi-kprobe accomplishes this in a\n// single system call, making it significantly faster than attaching many\n// probes one at a time.\n//\n// Requires at least Linux 5.18.\nfunc KretprobeMulti(prog *ebpf.Program, opts KprobeMultiOptions) (Link, error) {\n\treturn kprobeMulti(prog, opts, unix.BPF_F_KPROBE_MULTI_RETURN)\n}\n\nfunc kprobeMulti(prog *ebpf.Program, opts KprobeMultiOptions, flags uint32) (Link, error) {\n\tif prog == nil {\n\t\treturn nil, errors.New(\"cannot attach a nil program\")\n\t}\n\n\tsyms := uint32(len(opts.Symbols))\n\taddrs := uint32(len(opts.Addresses))\n\tcookies := uint32(len(opts.Cookies))\n\n\tif syms == 0 && addrs == 0 {\n\t\treturn nil, fmt.Errorf(\"one of Symbols or Addresses is required: %w\", errInvalidInput)\n\t}\n\tif syms != 0 && addrs != 0 {\n\t\treturn nil, fmt.Errorf(\"Symbols and Addresses are mutually exclusive: %w\", errInvalidInput)\n\t}\n\tif cookies > 0 && cookies != syms && cookies != addrs {\n\t\treturn nil, fmt.Errorf(\"Cookies must be exactly Symbols or Addresses in length: %w\", errInvalidInput)\n\t}\n\n\tif err := haveBPFLinkKprobeMulti(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tattr := &sys.LinkCreateKprobeMultiAttr{\n\t\tProgFd:           uint32(prog.FD()),\n\t\tAttachType:       sys.BPF_TRACE_KPROBE_MULTI,\n\t\tKprobeMultiFlags: flags,\n\t}\n\n\tswitch {\n\tcase syms != 0:\n\t\tattr.Count = syms\n\t\tattr.Syms = sys.NewStringSlicePointer(opts.Symbols)\n\n\tcase addrs != 0:\n\t\tattr.Count = addrs\n\t\tattr.Addrs = sys.NewPointer(unsafe.Pointer(&opts.Addresses[0]))\n\t}\n\n\tif cookies != 0 {\n\t\tattr.Cookies = sys.NewPointer(unsafe.Pointer(&opts.Cookies[0]))\n\t}\n\n\tfd, err := sys.LinkCreateKprobeMulti(attr)\n\tif errors.Is(err, unix.ESRCH) {\n\t\treturn nil, fmt.Errorf(\"couldn't find one or more symbols: %w\", os.ErrNotExist)\n\t}\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn nil, fmt.Errorf(\"%w (missing kernel symbol or prog's AttachType not AttachTraceKprobeMulti?)\", err)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &kprobeMultiLink{RawLink{fd, \"\"}}, nil\n}\n\ntype kprobeMultiLink struct {\n\tRawLink\n}\n\nvar _ Link = (*kprobeMultiLink)(nil)\n\nfunc (kml *kprobeMultiLink) Update(prog *ebpf.Program) error {\n\treturn fmt.Errorf(\"update kprobe_multi: %w\", ErrNotSupported)\n}\n\nfunc (kml *kprobeMultiLink) Pin(string) error {\n\treturn fmt.Errorf(\"pin kprobe_multi: %w\", ErrNotSupported)\n}\n\nfunc (kml *kprobeMultiLink) Unpin() error {\n\treturn fmt.Errorf(\"unpin kprobe_multi: %w\", ErrNotSupported)\n}\n\nvar haveBPFLinkKprobeMulti = internal.NewFeatureTest(\"bpf_link_kprobe_multi\", \"5.18\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tName: \"probe_kpm_link\",\n\t\tType: ebpf.Kprobe,\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t\tAttachType: ebpf.AttachTraceKprobeMulti,\n\t\tLicense:    \"MIT\",\n\t})\n\tif errors.Is(err, unix.E2BIG) {\n\t\t// Kernel doesn't support AttachType field.\n\t\treturn internal.ErrNotSupported\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\tfd, err := sys.LinkCreateKprobeMulti(&sys.LinkCreateKprobeMultiAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tAttachType: sys.BPF_TRACE_KPROBE_MULTI,\n\t\tCount:      1,\n\t\tSyms:       sys.NewStringSlicePointer([]string{\"vprintk\"}),\n\t})\n\tswitch {\n\tcase errors.Is(err, unix.EINVAL):\n\t\treturn internal.ErrNotSupported\n\t// If CONFIG_FPROBE isn't set.\n\tcase errors.Is(err, unix.EOPNOTSUPP):\n\t\treturn internal.ErrNotSupported\n\tcase err != nil:\n\t\treturn err\n\t}\n\n\tfd.Close()\n\n\treturn nil\n})\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/link.go",
    "content": "package link\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\nvar ErrNotSupported = internal.ErrNotSupported\n\n// Link represents a Program attached to a BPF hook.\ntype Link interface {\n\t// Replace the current program with a new program.\n\t//\n\t// Passing a nil program is an error. May return an error wrapping ErrNotSupported.\n\tUpdate(*ebpf.Program) error\n\n\t// Persist a link by pinning it into a bpffs.\n\t//\n\t// May return an error wrapping ErrNotSupported.\n\tPin(string) error\n\n\t// Undo a previous call to Pin.\n\t//\n\t// May return an error wrapping ErrNotSupported.\n\tUnpin() error\n\n\t// Close frees resources.\n\t//\n\t// The link will be broken unless it has been successfully pinned.\n\t// A link may continue past the lifetime of the process if Close is\n\t// not called.\n\tClose() error\n\n\t// Info returns metadata on a link.\n\t//\n\t// May return an error wrapping ErrNotSupported.\n\tInfo() (*Info, error)\n\n\t// Prevent external users from implementing this interface.\n\tisLink()\n}\n\n// NewLinkFromFD creates a link from a raw fd.\n//\n// You should not use fd after calling this function.\nfunc NewLinkFromFD(fd int) (Link, error) {\n\tsysFD, err := sys.NewFD(fd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn wrapRawLink(&RawLink{fd: sysFD})\n}\n\n// LoadPinnedLink loads a link that was persisted into a bpffs.\nfunc LoadPinnedLink(fileName string, opts *ebpf.LoadPinOptions) (Link, error) {\n\traw, err := loadPinnedRawLink(fileName, opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn wrapRawLink(raw)\n}\n\n// wrap a RawLink in a more specific type if possible.\n//\n// The function takes ownership of raw and closes it on error.\nfunc wrapRawLink(raw *RawLink) (_ Link, err error) {\n\tdefer func() {\n\t\tif err != nil {\n\t\t\traw.Close()\n\t\t}\n\t}()\n\n\tinfo, err := raw.Info()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tswitch info.Type {\n\tcase RawTracepointType:\n\t\treturn &rawTracepoint{*raw}, nil\n\tcase TracingType:\n\t\treturn &tracing{*raw}, nil\n\tcase CgroupType:\n\t\treturn &linkCgroup{*raw}, nil\n\tcase IterType:\n\t\treturn &Iter{*raw}, nil\n\tcase NetNsType:\n\t\treturn &NetNsLink{*raw}, nil\n\tcase KprobeMultiType:\n\t\treturn &kprobeMultiLink{*raw}, nil\n\tcase PerfEventType:\n\t\treturn nil, fmt.Errorf(\"recovering perf event fd: %w\", ErrNotSupported)\n\tdefault:\n\t\treturn raw, nil\n\t}\n}\n\n// ID uniquely identifies a BPF link.\ntype ID = sys.LinkID\n\n// RawLinkOptions control the creation of a raw link.\ntype RawLinkOptions struct {\n\t// File descriptor to attach to. This differs for each attach type.\n\tTarget int\n\t// Program to attach.\n\tProgram *ebpf.Program\n\t// Attach must match the attach type of Program.\n\tAttach ebpf.AttachType\n\t// BTF is the BTF of the attachment target.\n\tBTF btf.TypeID\n\t// Flags control the attach behaviour.\n\tFlags uint32\n}\n\n// Info contains metadata on a link.\ntype Info struct {\n\tType    Type\n\tID      ID\n\tProgram ebpf.ProgramID\n\textra   interface{}\n}\n\ntype TracingInfo sys.TracingLinkInfo\ntype CgroupInfo sys.CgroupLinkInfo\ntype NetNsInfo sys.NetNsLinkInfo\ntype XDPInfo sys.XDPLinkInfo\n\n// Tracing returns tracing type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) Tracing() *TracingInfo {\n\te, _ := r.extra.(*TracingInfo)\n\treturn e\n}\n\n// Cgroup returns cgroup type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) Cgroup() *CgroupInfo {\n\te, _ := r.extra.(*CgroupInfo)\n\treturn e\n}\n\n// NetNs returns netns type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) NetNs() *NetNsInfo {\n\te, _ := r.extra.(*NetNsInfo)\n\treturn e\n}\n\n// ExtraNetNs returns XDP type-specific link info.\n//\n// Returns nil if the type-specific link info isn't available.\nfunc (r Info) XDP() *XDPInfo {\n\te, _ := r.extra.(*XDPInfo)\n\treturn e\n}\n\n// RawLink is the low-level API to bpf_link.\n//\n// You should consider using the higher level interfaces in this\n// package instead.\ntype RawLink struct {\n\tfd         *sys.FD\n\tpinnedPath string\n}\n\n// AttachRawLink creates a raw link.\nfunc AttachRawLink(opts RawLinkOptions) (*RawLink, error) {\n\tif err := haveBPFLink(); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif opts.Target < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid target: %s\", sys.ErrClosedFd)\n\t}\n\n\tprogFd := opts.Program.FD()\n\tif progFd < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program: %s\", sys.ErrClosedFd)\n\t}\n\n\tattr := sys.LinkCreateAttr{\n\t\tTargetFd:    uint32(opts.Target),\n\t\tProgFd:      uint32(progFd),\n\t\tAttachType:  sys.AttachType(opts.Attach),\n\t\tTargetBtfId: opts.BTF,\n\t\tFlags:       opts.Flags,\n\t}\n\tfd, err := sys.LinkCreate(&attr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"create link: %w\", err)\n\t}\n\n\treturn &RawLink{fd, \"\"}, nil\n}\n\nfunc loadPinnedRawLink(fileName string, opts *ebpf.LoadPinOptions) (*RawLink, error) {\n\tfd, err := sys.ObjGet(&sys.ObjGetAttr{\n\t\tPathname:  sys.NewStringPointer(fileName),\n\t\tFileFlags: opts.Marshal(),\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"load pinned link: %w\", err)\n\t}\n\n\treturn &RawLink{fd, fileName}, nil\n}\n\nfunc (l *RawLink) isLink() {}\n\n// FD returns the raw file descriptor.\nfunc (l *RawLink) FD() int {\n\treturn l.fd.Int()\n}\n\n// Close breaks the link.\n//\n// Use Pin if you want to make the link persistent.\nfunc (l *RawLink) Close() error {\n\treturn l.fd.Close()\n}\n\n// Pin persists a link past the lifetime of the process.\n//\n// Calling Close on a pinned Link will not break the link\n// until the pin is removed.\nfunc (l *RawLink) Pin(fileName string) error {\n\tif err := internal.Pin(l.pinnedPath, fileName, l.fd); err != nil {\n\t\treturn err\n\t}\n\tl.pinnedPath = fileName\n\treturn nil\n}\n\n// Unpin implements the Link interface.\nfunc (l *RawLink) Unpin() error {\n\tif err := internal.Unpin(l.pinnedPath); err != nil {\n\t\treturn err\n\t}\n\tl.pinnedPath = \"\"\n\treturn nil\n}\n\n// IsPinned returns true if the Link has a non-empty pinned path.\nfunc (l *RawLink) IsPinned() bool {\n\treturn l.pinnedPath != \"\"\n}\n\n// Update implements the Link interface.\nfunc (l *RawLink) Update(new *ebpf.Program) error {\n\treturn l.UpdateArgs(RawLinkUpdateOptions{\n\t\tNew: new,\n\t})\n}\n\n// RawLinkUpdateOptions control the behaviour of RawLink.UpdateArgs.\ntype RawLinkUpdateOptions struct {\n\tNew   *ebpf.Program\n\tOld   *ebpf.Program\n\tFlags uint32\n}\n\n// UpdateArgs updates a link based on args.\nfunc (l *RawLink) UpdateArgs(opts RawLinkUpdateOptions) error {\n\tnewFd := opts.New.FD()\n\tif newFd < 0 {\n\t\treturn fmt.Errorf(\"invalid program: %s\", sys.ErrClosedFd)\n\t}\n\n\tvar oldFd int\n\tif opts.Old != nil {\n\t\toldFd = opts.Old.FD()\n\t\tif oldFd < 0 {\n\t\t\treturn fmt.Errorf(\"invalid replacement program: %s\", sys.ErrClosedFd)\n\t\t}\n\t}\n\n\tattr := sys.LinkUpdateAttr{\n\t\tLinkFd:    l.fd.Uint(),\n\t\tNewProgFd: uint32(newFd),\n\t\tOldProgFd: uint32(oldFd),\n\t\tFlags:     opts.Flags,\n\t}\n\treturn sys.LinkUpdate(&attr)\n}\n\n// Info returns metadata about the link.\nfunc (l *RawLink) Info() (*Info, error) {\n\tvar info sys.LinkInfo\n\n\tif err := sys.ObjInfo(l.fd, &info); err != nil {\n\t\treturn nil, fmt.Errorf(\"link info: %s\", err)\n\t}\n\n\tvar extra interface{}\n\tswitch info.Type {\n\tcase CgroupType:\n\t\textra = &CgroupInfo{}\n\tcase NetNsType:\n\t\textra = &NetNsInfo{}\n\tcase TracingType:\n\t\textra = &TracingInfo{}\n\tcase XDPType:\n\t\textra = &XDPInfo{}\n\tcase RawTracepointType, IterType,\n\t\tPerfEventType, KprobeMultiType:\n\t\t// Extra metadata not supported.\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown link info type: %d\", info.Type)\n\t}\n\n\tif extra != nil {\n\t\tbuf := bytes.NewReader(info.Extra[:])\n\t\terr := binary.Read(buf, internal.NativeEndian, extra)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"cannot read extra link info: %w\", err)\n\t\t}\n\t}\n\n\treturn &Info{\n\t\tinfo.Type,\n\t\tinfo.Id,\n\t\tebpf.ProgramID(info.ProgId),\n\t\textra,\n\t}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/netns.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n)\n\n// NetNsLink is a program attached to a network namespace.\ntype NetNsLink struct {\n\tRawLink\n}\n\n// AttachNetNs attaches a program to a network namespace.\nfunc AttachNetNs(ns int, prog *ebpf.Program) (*NetNsLink, error) {\n\tvar attach ebpf.AttachType\n\tswitch t := prog.Type(); t {\n\tcase ebpf.FlowDissector:\n\t\tattach = ebpf.AttachFlowDissector\n\tcase ebpf.SkLookup:\n\t\tattach = ebpf.AttachSkLookup\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"can't attach %v to network namespace\", t)\n\t}\n\n\tlink, err := AttachRawLink(RawLinkOptions{\n\t\tTarget:  ns,\n\t\tProgram: prog,\n\t\tAttach:  attach,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &NetNsLink{*link}, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/perf_event.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"runtime\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Getting the terminology right is usually the hardest part. For posterity and\n// for staying sane during implementation:\n//\n// - trace event: Representation of a kernel runtime hook. Filesystem entries\n//   under <tracefs>/events. Can be tracepoints (static), kprobes or uprobes.\n//   Can be instantiated into perf events (see below).\n// - tracepoint: A predetermined hook point in the kernel. Exposed as trace\n//   events in (sub)directories under <tracefs>/events. Cannot be closed or\n//   removed, they are static.\n// - k(ret)probe: Ephemeral trace events based on entry or exit points of\n//   exported kernel symbols. kprobe-based (tracefs) trace events can be\n//   created system-wide by writing to the <tracefs>/kprobe_events file, or\n//   they can be scoped to the current process by creating PMU perf events.\n// - u(ret)probe: Ephemeral trace events based on user provides ELF binaries\n//   and offsets. uprobe-based (tracefs) trace events can be\n//   created system-wide by writing to the <tracefs>/uprobe_events file, or\n//   they can be scoped to the current process by creating PMU perf events.\n// - perf event: An object instantiated based on an existing trace event or\n//   kernel symbol. Referred to by fd in userspace.\n//   Exactly one eBPF program can be attached to a perf event. Multiple perf\n//   events can be created from a single trace event. Closing a perf event\n//   stops any further invocations of the attached eBPF program.\n\nvar (\n\terrInvalidInput = tracefs.ErrInvalidInput\n)\n\nconst (\n\tperfAllThreads = -1\n)\n\n// A perfEvent represents a perf event kernel object. Exactly one eBPF program\n// can be attached to it. It is created based on a tracefs trace event or a\n// Performance Monitoring Unit (PMU).\ntype perfEvent struct {\n\t// Trace event backing this perfEvent. May be nil.\n\ttracefsEvent *tracefs.Event\n\n\t// This is the perf event FD.\n\tfd *sys.FD\n}\n\nfunc newPerfEvent(fd *sys.FD, event *tracefs.Event) *perfEvent {\n\tpe := &perfEvent{event, fd}\n\t// Both event and fd have their own finalizer, but we want to\n\t// guarantee that they are closed in a certain order.\n\truntime.SetFinalizer(pe, (*perfEvent).Close)\n\treturn pe\n}\n\nfunc (pe *perfEvent) Close() error {\n\truntime.SetFinalizer(pe, nil)\n\n\tif err := pe.fd.Close(); err != nil {\n\t\treturn fmt.Errorf(\"closing perf event fd: %w\", err)\n\t}\n\n\tif pe.tracefsEvent != nil {\n\t\treturn pe.tracefsEvent.Close()\n\t}\n\n\treturn nil\n}\n\n// perfEventLink represents a bpf perf link.\ntype perfEventLink struct {\n\tRawLink\n\tpe *perfEvent\n}\n\nfunc (pl *perfEventLink) isLink() {}\n\n// Pinning requires the underlying perf event FD to stay open.\n//\n// | PerfEvent FD | BpfLink FD | Works |\n// |--------------|------------|-------|\n// | Open         | Open       | Yes   |\n// | Closed       | Open       | No    |\n// | Open         | Closed     | No (Pin() -> EINVAL) |\n// | Closed       | Closed     | No (Pin() -> EINVAL) |\n//\n// There is currently no pretty way to recover the perf event FD\n// when loading a pinned link, so leave as not supported for now.\nfunc (pl *perfEventLink) Pin(string) error {\n\treturn fmt.Errorf(\"perf event link pin: %w\", ErrNotSupported)\n}\n\nfunc (pl *perfEventLink) Unpin() error {\n\treturn fmt.Errorf(\"perf event link unpin: %w\", ErrNotSupported)\n}\n\nfunc (pl *perfEventLink) Close() error {\n\tif err := pl.fd.Close(); err != nil {\n\t\treturn fmt.Errorf(\"perf link close: %w\", err)\n\t}\n\n\tif err := pl.pe.Close(); err != nil {\n\t\treturn fmt.Errorf(\"perf event close: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc (pl *perfEventLink) Update(prog *ebpf.Program) error {\n\treturn fmt.Errorf(\"perf event link update: %w\", ErrNotSupported)\n}\n\n// perfEventIoctl implements Link and handles the perf event lifecycle\n// via ioctl().\ntype perfEventIoctl struct {\n\t*perfEvent\n}\n\nfunc (pi *perfEventIoctl) isLink() {}\n\n// Since 4.15 (e87c6bc3852b \"bpf: permit multiple bpf attachments for a single perf event\"),\n// calling PERF_EVENT_IOC_SET_BPF appends the given program to a prog_array\n// owned by the perf event, which means multiple programs can be attached\n// simultaneously.\n//\n// Before 4.15, calling PERF_EVENT_IOC_SET_BPF more than once on a perf event\n// returns EEXIST.\n//\n// Detaching a program from a perf event is currently not possible, so a\n// program replacement mechanism cannot be implemented for perf events.\nfunc (pi *perfEventIoctl) Update(prog *ebpf.Program) error {\n\treturn fmt.Errorf(\"perf event ioctl update: %w\", ErrNotSupported)\n}\n\nfunc (pi *perfEventIoctl) Pin(string) error {\n\treturn fmt.Errorf(\"perf event ioctl pin: %w\", ErrNotSupported)\n}\n\nfunc (pi *perfEventIoctl) Unpin() error {\n\treturn fmt.Errorf(\"perf event ioctl unpin: %w\", ErrNotSupported)\n}\n\nfunc (pi *perfEventIoctl) Info() (*Info, error) {\n\treturn nil, fmt.Errorf(\"perf event ioctl info: %w\", ErrNotSupported)\n}\n\n// attach the given eBPF prog to the perf event stored in pe.\n// pe must contain a valid perf event fd.\n// prog's type must match the program type stored in pe.\nfunc attachPerfEvent(pe *perfEvent, prog *ebpf.Program, cookie uint64) (Link, error) {\n\tif prog == nil {\n\t\treturn nil, errors.New(\"cannot attach a nil program\")\n\t}\n\tif prog.FD() < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program: %w\", sys.ErrClosedFd)\n\t}\n\n\tif err := haveBPFLinkPerfEvent(); err == nil {\n\t\treturn attachPerfEventLink(pe, prog, cookie)\n\t}\n\n\tif cookie != 0 {\n\t\treturn nil, fmt.Errorf(\"cookies are not supported: %w\", ErrNotSupported)\n\t}\n\n\treturn attachPerfEventIoctl(pe, prog)\n}\n\nfunc attachPerfEventIoctl(pe *perfEvent, prog *ebpf.Program) (*perfEventIoctl, error) {\n\t// Assign the eBPF program to the perf event.\n\terr := unix.IoctlSetInt(pe.fd.Int(), unix.PERF_EVENT_IOC_SET_BPF, prog.FD())\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"setting perf event bpf program: %w\", err)\n\t}\n\n\t// PERF_EVENT_IOC_ENABLE and _DISABLE ignore their given values.\n\tif err := unix.IoctlSetInt(pe.fd.Int(), unix.PERF_EVENT_IOC_ENABLE, 0); err != nil {\n\t\treturn nil, fmt.Errorf(\"enable perf event: %s\", err)\n\t}\n\n\treturn &perfEventIoctl{pe}, nil\n}\n\n// Use the bpf api to attach the perf event (BPF_LINK_TYPE_PERF_EVENT, 5.15+).\n//\n// https://github.com/torvalds/linux/commit/b89fbfbb854c9afc3047e8273cc3a694650b802e\nfunc attachPerfEventLink(pe *perfEvent, prog *ebpf.Program, cookie uint64) (*perfEventLink, error) {\n\tfd, err := sys.LinkCreatePerfEvent(&sys.LinkCreatePerfEventAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tTargetFd:   pe.fd.Uint(),\n\t\tAttachType: sys.BPF_PERF_EVENT,\n\t\tBpfCookie:  cookie,\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"cannot create bpf perf link: %v\", err)\n\t}\n\n\treturn &perfEventLink{RawLink{fd: fd}, pe}, nil\n}\n\n// unsafeStringPtr returns an unsafe.Pointer to a NUL-terminated copy of str.\nfunc unsafeStringPtr(str string) (unsafe.Pointer, error) {\n\tp, err := unix.BytePtrFromString(str)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn unsafe.Pointer(p), nil\n}\n\n// openTracepointPerfEvent opens a tracepoint-type perf event. System-wide\n// [k,u]probes created by writing to <tracefs>/[k,u]probe_events are tracepoints\n// behind the scenes, and can be attached to using these perf events.\nfunc openTracepointPerfEvent(tid uint64, pid int) (*sys.FD, error) {\n\tattr := unix.PerfEventAttr{\n\t\tType:        unix.PERF_TYPE_TRACEPOINT,\n\t\tConfig:      tid,\n\t\tSample_type: unix.PERF_SAMPLE_RAW,\n\t\tSample:      1,\n\t\tWakeup:      1,\n\t}\n\n\tfd, err := unix.PerfEventOpen(&attr, pid, 0, -1, unix.PERF_FLAG_FD_CLOEXEC)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"opening tracepoint perf event: %w\", err)\n\t}\n\n\treturn sys.NewFD(fd)\n}\n\n// Probe BPF perf link.\n//\n// https://elixir.bootlin.com/linux/v5.16.8/source/kernel/bpf/syscall.c#L4307\n// https://github.com/torvalds/linux/commit/b89fbfbb854c9afc3047e8273cc3a694650b802e\nvar haveBPFLinkPerfEvent = internal.NewFeatureTest(\"bpf_link_perf_event\", \"5.15\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tName: \"probe_bpf_perf_link\",\n\t\tType: ebpf.Kprobe,\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t\tLicense: \"MIT\",\n\t})\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\t_, err = sys.LinkCreatePerfEvent(&sys.LinkCreatePerfEventAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tAttachType: sys.BPF_PERF_EVENT,\n\t})\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\treturn err\n})\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/program.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype RawAttachProgramOptions struct {\n\t// File descriptor to attach to. This differs for each attach type.\n\tTarget int\n\t// Program to attach.\n\tProgram *ebpf.Program\n\t// Program to replace (cgroups).\n\tReplace *ebpf.Program\n\t// Attach must match the attach type of Program (and Replace).\n\tAttach ebpf.AttachType\n\t// Flags control the attach behaviour. This differs for each attach type.\n\tFlags uint32\n}\n\n// RawAttachProgram is a low level wrapper around BPF_PROG_ATTACH.\n//\n// You should use one of the higher level abstractions available in this\n// package if possible.\nfunc RawAttachProgram(opts RawAttachProgramOptions) error {\n\tif err := haveProgAttach(); err != nil {\n\t\treturn err\n\t}\n\n\tvar replaceFd uint32\n\tif opts.Replace != nil {\n\t\treplaceFd = uint32(opts.Replace.FD())\n\t}\n\n\tattr := sys.ProgAttachAttr{\n\t\tTargetFd:     uint32(opts.Target),\n\t\tAttachBpfFd:  uint32(opts.Program.FD()),\n\t\tReplaceBpfFd: replaceFd,\n\t\tAttachType:   uint32(opts.Attach),\n\t\tAttachFlags:  uint32(opts.Flags),\n\t}\n\n\tif err := sys.ProgAttach(&attr); err != nil {\n\t\treturn fmt.Errorf(\"can't attach program: %w\", err)\n\t}\n\treturn nil\n}\n\ntype RawDetachProgramOptions struct {\n\tTarget  int\n\tProgram *ebpf.Program\n\tAttach  ebpf.AttachType\n}\n\n// RawDetachProgram is a low level wrapper around BPF_PROG_DETACH.\n//\n// You should use one of the higher level abstractions available in this\n// package if possible.\nfunc RawDetachProgram(opts RawDetachProgramOptions) error {\n\tif err := haveProgAttach(); err != nil {\n\t\treturn err\n\t}\n\n\tattr := sys.ProgDetachAttr{\n\t\tTargetFd:    uint32(opts.Target),\n\t\tAttachBpfFd: uint32(opts.Program.FD()),\n\t\tAttachType:  uint32(opts.Attach),\n\t}\n\tif err := sys.ProgDetach(&attr); err != nil {\n\t\treturn fmt.Errorf(\"can't detach program: %w\", err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/query.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\n// QueryOptions defines additional parameters when querying for programs.\ntype QueryOptions struct {\n\t// Path can be a path to a cgroup, netns or LIRC2 device\n\tPath string\n\t// Attach specifies the AttachType of the programs queried for\n\tAttach ebpf.AttachType\n\t// QueryFlags are flags for BPF_PROG_QUERY, e.g. BPF_F_QUERY_EFFECTIVE\n\tQueryFlags uint32\n}\n\n// QueryPrograms retrieves ProgramIDs associated with the AttachType.\n//\n// Returns (nil, nil) if there are no programs attached to the queried kernel\n// resource. Calling QueryPrograms on a kernel missing PROG_QUERY will result in\n// ErrNotSupported.\nfunc QueryPrograms(opts QueryOptions) ([]ebpf.ProgramID, error) {\n\tif haveProgQuery() != nil {\n\t\treturn nil, fmt.Errorf(\"can't query program IDs: %w\", ErrNotSupported)\n\t}\n\n\tf, err := os.Open(opts.Path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't open file: %s\", err)\n\t}\n\tdefer f.Close()\n\n\t// query the number of programs to allocate correct slice size\n\tattr := sys.ProgQueryAttr{\n\t\tTargetFd:   uint32(f.Fd()),\n\t\tAttachType: sys.AttachType(opts.Attach),\n\t\tQueryFlags: opts.QueryFlags,\n\t}\n\tif err := sys.ProgQuery(&attr); err != nil {\n\t\treturn nil, fmt.Errorf(\"can't query program count: %w\", err)\n\t}\n\n\t// return nil if no progs are attached\n\tif attr.ProgCount == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// we have at least one prog, so we query again\n\tprogIds := make([]ebpf.ProgramID, attr.ProgCount)\n\tattr.ProgIds = sys.NewPointer(unsafe.Pointer(&progIds[0]))\n\tattr.ProgCount = uint32(len(progIds))\n\tif err := sys.ProgQuery(&attr); err != nil {\n\t\treturn nil, fmt.Errorf(\"can't query program IDs: %w\", err)\n\t}\n\n\treturn progIds, nil\n\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/raw_tracepoint.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\ntype RawTracepointOptions struct {\n\t// Tracepoint name.\n\tName string\n\t// Program must be of type RawTracepoint*\n\tProgram *ebpf.Program\n}\n\n// AttachRawTracepoint links a BPF program to a raw_tracepoint.\n//\n// Requires at least Linux 4.17.\nfunc AttachRawTracepoint(opts RawTracepointOptions) (Link, error) {\n\tif t := opts.Program.Type(); t != ebpf.RawTracepoint && t != ebpf.RawTracepointWritable {\n\t\treturn nil, fmt.Errorf(\"invalid program type %s, expected RawTracepoint(Writable)\", t)\n\t}\n\tif opts.Program.FD() < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program: %w\", sys.ErrClosedFd)\n\t}\n\n\tfd, err := sys.RawTracepointOpen(&sys.RawTracepointOpenAttr{\n\t\tName:   sys.NewStringPointer(opts.Name),\n\t\tProgFd: uint32(opts.Program.FD()),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\terr = haveBPFLink()\n\tif errors.Is(err, ErrNotSupported) {\n\t\t// Prior to commit 70ed506c3bbc (\"bpf: Introduce pinnable bpf_link abstraction\")\n\t\t// raw_tracepoints are just a plain fd.\n\t\treturn &simpleRawTracepoint{fd}, nil\n\t}\n\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &rawTracepoint{RawLink{fd: fd}}, nil\n}\n\ntype simpleRawTracepoint struct {\n\tfd *sys.FD\n}\n\nvar _ Link = (*simpleRawTracepoint)(nil)\n\nfunc (frt *simpleRawTracepoint) isLink() {}\n\nfunc (frt *simpleRawTracepoint) Close() error {\n\treturn frt.fd.Close()\n}\n\nfunc (frt *simpleRawTracepoint) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"update raw_tracepoint: %w\", ErrNotSupported)\n}\n\nfunc (frt *simpleRawTracepoint) Pin(string) error {\n\treturn fmt.Errorf(\"pin raw_tracepoint: %w\", ErrNotSupported)\n}\n\nfunc (frt *simpleRawTracepoint) Unpin() error {\n\treturn fmt.Errorf(\"unpin raw_tracepoint: %w\", ErrNotSupported)\n}\n\nfunc (frt *simpleRawTracepoint) Info() (*Info, error) {\n\treturn nil, fmt.Errorf(\"can't get raw_tracepoint info: %w\", ErrNotSupported)\n}\n\ntype rawTracepoint struct {\n\tRawLink\n}\n\nvar _ Link = (*rawTracepoint)(nil)\n\nfunc (rt *rawTracepoint) Update(_ *ebpf.Program) error {\n\treturn fmt.Errorf(\"update raw_tracepoint: %w\", ErrNotSupported)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/socket_filter.go",
    "content": "package link\n\nimport (\n\t\"syscall\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// AttachSocketFilter attaches a SocketFilter BPF program to a socket.\nfunc AttachSocketFilter(conn syscall.Conn, program *ebpf.Program) error {\n\trawConn, err := conn.SyscallConn()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar ssoErr error\n\terr = rawConn.Control(func(fd uintptr) {\n\t\tssoErr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_ATTACH_BPF, program.FD())\n\t})\n\tif ssoErr != nil {\n\t\treturn ssoErr\n\t}\n\treturn err\n}\n\n// DetachSocketFilter detaches a SocketFilter BPF program from a socket.\nfunc DetachSocketFilter(conn syscall.Conn) error {\n\trawConn, err := conn.SyscallConn()\n\tif err != nil {\n\t\treturn err\n\t}\n\tvar ssoErr error\n\terr = rawConn.Control(func(fd uintptr) {\n\t\tssoErr = unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_DETACH_BPF, 0)\n\t})\n\tif ssoErr != nil {\n\t\treturn ssoErr\n\t}\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/syscalls.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Type is the kind of link.\ntype Type = sys.LinkType\n\n// Valid link types.\nconst (\n\tUnspecifiedType   = sys.BPF_LINK_TYPE_UNSPEC\n\tRawTracepointType = sys.BPF_LINK_TYPE_RAW_TRACEPOINT\n\tTracingType       = sys.BPF_LINK_TYPE_TRACING\n\tCgroupType        = sys.BPF_LINK_TYPE_CGROUP\n\tIterType          = sys.BPF_LINK_TYPE_ITER\n\tNetNsType         = sys.BPF_LINK_TYPE_NETNS\n\tXDPType           = sys.BPF_LINK_TYPE_XDP\n\tPerfEventType     = sys.BPF_LINK_TYPE_PERF_EVENT\n\tKprobeMultiType   = sys.BPF_LINK_TYPE_KPROBE_MULTI\n)\n\nvar haveProgAttach = internal.NewFeatureTest(\"BPF_PROG_ATTACH\", \"4.10\", func() error {\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tType:    ebpf.CGroupSKB,\n\t\tLicense: \"MIT\",\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\n\t// BPF_PROG_ATTACH was introduced at the same time as CGgroupSKB,\n\t// so being able to load the program is enough to infer that we\n\t// have the syscall.\n\tprog.Close()\n\treturn nil\n})\n\nvar haveProgAttachReplace = internal.NewFeatureTest(\"BPF_PROG_ATTACH atomic replacement of MULTI progs\", \"5.5\", func() error {\n\tif err := haveProgAttach(); err != nil {\n\t\treturn err\n\t}\n\n\tprog, err := ebpf.NewProgram(&ebpf.ProgramSpec{\n\t\tType:       ebpf.CGroupSKB,\n\t\tAttachType: ebpf.AttachCGroupInetIngress,\n\t\tLicense:    \"MIT\",\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.Mov.Imm(asm.R0, 0),\n\t\t\tasm.Return(),\n\t\t},\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\tdefer prog.Close()\n\n\t// We know that we have BPF_PROG_ATTACH since we can load CGroupSKB programs.\n\t// If passing BPF_F_REPLACE gives us EINVAL we know that the feature isn't\n\t// present.\n\tattr := sys.ProgAttachAttr{\n\t\t// We rely on this being checked after attachFlags.\n\t\tTargetFd:    ^uint32(0),\n\t\tAttachBpfFd: uint32(prog.FD()),\n\t\tAttachType:  uint32(ebpf.AttachCGroupInetIngress),\n\t\tAttachFlags: uint32(flagReplace),\n\t}\n\n\terr = sys.ProgAttach(&attr)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\treturn err\n})\n\nvar haveBPFLink = internal.NewFeatureTest(\"bpf_link\", \"5.7\", func() error {\n\tattr := sys.LinkCreateAttr{\n\t\t// This is a hopefully invalid file descriptor, which triggers EBADF.\n\t\tTargetFd:   ^uint32(0),\n\t\tProgFd:     ^uint32(0),\n\t\tAttachType: sys.AttachType(ebpf.AttachCGroupInetIngress),\n\t}\n\t_, err := sys.LinkCreate(&attr)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\treturn err\n})\n\nvar haveProgQuery = internal.NewFeatureTest(\"BPF_PROG_QUERY\", \"4.15\", func() error {\n\tattr := sys.ProgQueryAttr{\n\t\t// We rely on this being checked during the syscall.\n\t\t// With an otherwise correct payload we expect EBADF here\n\t\t// as an indication that the feature is present.\n\t\tTargetFd:   ^uint32(0),\n\t\tAttachType: sys.AttachType(ebpf.AttachCGroupInetIngress),\n\t}\n\n\terr := sys.ProgQuery(&attr)\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\treturn err\n})\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/tracepoint.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n)\n\n// TracepointOptions defines additional parameters that will be used\n// when loading Tracepoints.\ntype TracepointOptions struct {\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\t//\n\t// Needs kernel 5.15+.\n\tCookie uint64\n}\n\n// Tracepoint attaches the given eBPF program to the tracepoint with the given\n// group and name. See /sys/kernel/tracing/events to find available\n// tracepoints. The top-level directory is the group, the event's subdirectory\n// is the name. Example:\n//\n//\ttp, err := Tracepoint(\"syscalls\", \"sys_enter_fork\", prog, nil)\n//\n// Losing the reference to the resulting Link (tp) will close the Tracepoint\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// Note that attaching eBPF programs to syscalls (sys_enter_*/sys_exit_*) is\n// only possible as of kernel 4.14 (commit cf5f5ce).\nfunc Tracepoint(group, name string, prog *ebpf.Program, opts *TracepointOptions) (Link, error) {\n\tif group == \"\" || name == \"\" {\n\t\treturn nil, fmt.Errorf(\"group and name cannot be empty: %w\", errInvalidInput)\n\t}\n\tif prog == nil {\n\t\treturn nil, fmt.Errorf(\"prog cannot be nil: %w\", errInvalidInput)\n\t}\n\tif prog.Type() != ebpf.TracePoint {\n\t\treturn nil, fmt.Errorf(\"eBPF program type %s is not a Tracepoint: %w\", prog.Type(), errInvalidInput)\n\t}\n\n\ttid, err := tracefs.EventID(group, name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfd, err := openTracepointPerfEvent(tid, perfAllThreads)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar cookie uint64\n\tif opts != nil {\n\t\tcookie = opts.Cookie\n\t}\n\n\tpe := newPerfEvent(fd, nil)\n\n\tlnk, err := attachPerfEvent(pe, prog, cookie)\n\tif err != nil {\n\t\tpe.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/tracing.go",
    "content": "package link\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\ntype tracing struct {\n\tRawLink\n}\n\nfunc (f *tracing) Update(new *ebpf.Program) error {\n\treturn fmt.Errorf(\"tracing update: %w\", ErrNotSupported)\n}\n\n// AttachFreplace attaches the given eBPF program to the function it replaces.\n//\n// The program and name can either be provided at link time, or can be provided\n// at program load time. If they were provided at load time, they should be nil\n// and empty respectively here, as they will be ignored by the kernel.\n// Examples:\n//\n//\tAttachFreplace(dispatcher, \"function\", replacement)\n//\tAttachFreplace(nil, \"\", replacement)\nfunc AttachFreplace(targetProg *ebpf.Program, name string, prog *ebpf.Program) (Link, error) {\n\tif (name == \"\") != (targetProg == nil) {\n\t\treturn nil, fmt.Errorf(\"must provide both or neither of name and targetProg: %w\", errInvalidInput)\n\t}\n\tif prog == nil {\n\t\treturn nil, fmt.Errorf(\"prog cannot be nil: %w\", errInvalidInput)\n\t}\n\tif prog.Type() != ebpf.Extension {\n\t\treturn nil, fmt.Errorf(\"eBPF program type %s is not an Extension: %w\", prog.Type(), errInvalidInput)\n\t}\n\n\tvar (\n\t\ttarget int\n\t\ttypeID btf.TypeID\n\t)\n\tif targetProg != nil {\n\t\tbtfHandle, err := targetProg.Handle()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdefer btfHandle.Close()\n\n\t\tspec, err := btfHandle.Spec(nil)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tvar function *btf.Func\n\t\tif err := spec.TypeByName(name, &function); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\ttarget = targetProg.FD()\n\t\ttypeID, err = spec.TypeID(function)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\n\tlink, err := AttachRawLink(RawLinkOptions{\n\t\tTarget:  target,\n\t\tProgram: prog,\n\t\tAttach:  ebpf.AttachNone,\n\t\tBTF:     typeID,\n\t})\n\tif errors.Is(err, sys.ENOTSUPP) {\n\t\t// This may be returned by bpf_tracing_prog_attach via bpf_arch_text_poke.\n\t\treturn nil, fmt.Errorf(\"create raw tracepoint: %w\", ErrNotSupported)\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &tracing{*link}, nil\n}\n\ntype TracingOptions struct {\n\t// Program must be of type Tracing with attach type\n\t// AttachTraceFEntry/AttachTraceFExit/AttachModifyReturn or\n\t// AttachTraceRawTp.\n\tProgram *ebpf.Program\n\t// Program attach type. Can be one of:\n\t// \t- AttachTraceFEntry\n\t// \t- AttachTraceFExit\n\t// \t- AttachModifyReturn\n\t// \t- AttachTraceRawTp\n\t// This field is optional.\n\tAttachType ebpf.AttachType\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\tCookie uint64\n}\n\ntype LSMOptions struct {\n\t// Program must be of type LSM with attach type\n\t// AttachLSMMac.\n\tProgram *ebpf.Program\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\tCookie uint64\n}\n\n// attachBTFID links all BPF program types (Tracing/LSM) that they attach to a btf_id.\nfunc attachBTFID(program *ebpf.Program, at ebpf.AttachType, cookie uint64) (Link, error) {\n\tif program.FD() < 0 {\n\t\treturn nil, fmt.Errorf(\"invalid program %w\", sys.ErrClosedFd)\n\t}\n\n\tvar (\n\t\tfd  *sys.FD\n\t\terr error\n\t)\n\tswitch at {\n\tcase ebpf.AttachTraceFEntry, ebpf.AttachTraceFExit, ebpf.AttachTraceRawTp,\n\t\tebpf.AttachModifyReturn, ebpf.AttachLSMMac:\n\t\t// Attach via BPF link\n\t\tfd, err = sys.LinkCreateTracing(&sys.LinkCreateTracingAttr{\n\t\t\tProgFd:     uint32(program.FD()),\n\t\t\tAttachType: sys.AttachType(at),\n\t\t\tCookie:     cookie,\n\t\t})\n\t\tif err == nil {\n\t\t\tbreak\n\t\t}\n\t\tif !errors.Is(err, unix.EINVAL) && !errors.Is(err, sys.ENOTSUPP) {\n\t\t\treturn nil, fmt.Errorf(\"create tracing link: %w\", err)\n\t\t}\n\t\tfallthrough\n\tcase ebpf.AttachNone:\n\t\t// Attach via RawTracepointOpen\n\t\tif cookie > 0 {\n\t\t\treturn nil, fmt.Errorf(\"create raw tracepoint with cookie: %w\", ErrNotSupported)\n\t\t}\n\n\t\tfd, err = sys.RawTracepointOpen(&sys.RawTracepointOpenAttr{\n\t\t\tProgFd: uint32(program.FD()),\n\t\t})\n\t\tif errors.Is(err, sys.ENOTSUPP) {\n\t\t\t// This may be returned by bpf_tracing_prog_attach via bpf_arch_text_poke.\n\t\t\treturn nil, fmt.Errorf(\"create raw tracepoint: %w\", ErrNotSupported)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"create raw tracepoint: %w\", err)\n\t\t}\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid attach type: %s\", at.String())\n\t}\n\n\traw := RawLink{fd: fd}\n\tinfo, err := raw.Info()\n\tif err != nil {\n\t\traw.Close()\n\t\treturn nil, err\n\t}\n\n\tif info.Type == RawTracepointType {\n\t\t// Sadness upon sadness: a Tracing program with AttachRawTp returns\n\t\t// a raw_tracepoint link. Other types return a tracing link.\n\t\treturn &rawTracepoint{raw}, nil\n\t}\n\treturn &tracing{raw}, nil\n}\n\n// AttachTracing links a tracing (fentry/fexit/fmod_ret) BPF program or\n// a BTF-powered raw tracepoint (tp_btf) BPF Program to a BPF hook defined\n// in kernel modules.\nfunc AttachTracing(opts TracingOptions) (Link, error) {\n\tif t := opts.Program.Type(); t != ebpf.Tracing {\n\t\treturn nil, fmt.Errorf(\"invalid program type %s, expected Tracing\", t)\n\t}\n\n\tswitch opts.AttachType {\n\tcase ebpf.AttachTraceFEntry, ebpf.AttachTraceFExit, ebpf.AttachModifyReturn,\n\t\tebpf.AttachTraceRawTp, ebpf.AttachNone:\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid attach type: %s\", opts.AttachType.String())\n\t}\n\n\treturn attachBTFID(opts.Program, opts.AttachType, opts.Cookie)\n}\n\n// AttachLSM links a Linux security module (LSM) BPF Program to a BPF\n// hook defined in kernel modules.\nfunc AttachLSM(opts LSMOptions) (Link, error) {\n\tif t := opts.Program.Type(); t != ebpf.LSM {\n\t\treturn nil, fmt.Errorf(\"invalid program type %s, expected LSM\", t)\n\t}\n\n\treturn attachBTFID(opts.Program, ebpf.AttachLSMMac, opts.Cookie)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/uprobe.go",
    "content": "package link\n\nimport (\n\t\"debug/elf\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"sync\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n)\n\nvar (\n\tuprobeRefCtrOffsetPMUPath = \"/sys/bus/event_source/devices/uprobe/format/ref_ctr_offset\"\n\t// elixir.bootlin.com/linux/v5.15-rc7/source/kernel/events/core.c#L9799\n\tuprobeRefCtrOffsetShift = 32\n\thaveRefCtrOffsetPMU     = internal.NewFeatureTest(\"RefCtrOffsetPMU\", \"4.20\", func() error {\n\t\t_, err := os.Stat(uprobeRefCtrOffsetPMUPath)\n\t\tif err != nil {\n\t\t\treturn internal.ErrNotSupported\n\t\t}\n\t\treturn nil\n\t})\n\n\t// ErrNoSymbol indicates that the given symbol was not found\n\t// in the ELF symbols table.\n\tErrNoSymbol = errors.New(\"not found\")\n)\n\n// Executable defines an executable program on the filesystem.\ntype Executable struct {\n\t// Path of the executable on the filesystem.\n\tpath string\n\t// Parsed ELF and dynamic symbols' addresses.\n\taddresses map[string]uint64\n\t// Keep track of symbol table lazy load.\n\taddressesOnce sync.Once\n}\n\n// UprobeOptions defines additional parameters that will be used\n// when loading Uprobes.\ntype UprobeOptions struct {\n\t// Symbol address. Must be provided in case of external symbols (shared libs).\n\t// If set, overrides the address eventually parsed from the executable.\n\tAddress uint64\n\t// The offset relative to given symbol. Useful when tracing an arbitrary point\n\t// inside the frame of given symbol.\n\t//\n\t// Note: this field changed from being an absolute offset to being relative\n\t// to Address.\n\tOffset uint64\n\t// Only set the uprobe on the given process ID. Useful when tracing\n\t// shared library calls or programs that have many running instances.\n\tPID int\n\t// Automatically manage SDT reference counts (semaphores).\n\t//\n\t// If this field is set, the Kernel will increment/decrement the\n\t// semaphore located in the process memory at the provided address on\n\t// probe attach/detach.\n\t//\n\t// See also:\n\t// sourceware.org/systemtap/wiki/UserSpaceProbeImplementation (Semaphore Handling)\n\t// github.com/torvalds/linux/commit/1cc33161a83d\n\t// github.com/torvalds/linux/commit/a6ca88b241d5\n\tRefCtrOffset uint64\n\t// Arbitrary value that can be fetched from an eBPF program\n\t// via `bpf_get_attach_cookie()`.\n\t//\n\t// Needs kernel 5.15+.\n\tCookie uint64\n\t// Prefix used for the event name if the uprobe must be attached using tracefs.\n\t// The group name will be formatted as `<prefix>_<randomstr>`.\n\t// The default empty string is equivalent to \"ebpf\" as the prefix.\n\tTraceFSPrefix string\n}\n\nfunc (uo *UprobeOptions) cookie() uint64 {\n\tif uo == nil {\n\t\treturn 0\n\t}\n\treturn uo.Cookie\n}\n\n// To open a new Executable, use:\n//\n//\tOpenExecutable(\"/bin/bash\")\n//\n// The returned value can then be used to open Uprobe(s).\nfunc OpenExecutable(path string) (*Executable, error) {\n\tif path == \"\" {\n\t\treturn nil, fmt.Errorf(\"path cannot be empty\")\n\t}\n\n\tf, err := internal.OpenSafeELFFile(path)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"parse ELF file: %w\", err)\n\t}\n\tdefer f.Close()\n\n\tif f.Type != elf.ET_EXEC && f.Type != elf.ET_DYN {\n\t\t// ELF is not an executable or a shared object.\n\t\treturn nil, errors.New(\"the given file is not an executable or a shared object\")\n\t}\n\n\treturn &Executable{\n\t\tpath:      path,\n\t\taddresses: make(map[string]uint64),\n\t}, nil\n}\n\nfunc (ex *Executable) load(f *internal.SafeELFFile) error {\n\tsyms, err := f.Symbols()\n\tif err != nil && !errors.Is(err, elf.ErrNoSymbols) {\n\t\treturn err\n\t}\n\n\tdynsyms, err := f.DynamicSymbols()\n\tif err != nil && !errors.Is(err, elf.ErrNoSymbols) {\n\t\treturn err\n\t}\n\n\tsyms = append(syms, dynsyms...)\n\n\tfor _, s := range syms {\n\t\tif elf.ST_TYPE(s.Info) != elf.STT_FUNC {\n\t\t\t// Symbol not associated with a function or other executable code.\n\t\t\tcontinue\n\t\t}\n\n\t\taddress := s.Value\n\n\t\t// Loop over ELF segments.\n\t\tfor _, prog := range f.Progs {\n\t\t\t// Skip uninteresting segments.\n\t\t\tif prog.Type != elf.PT_LOAD || (prog.Flags&elf.PF_X) == 0 {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif prog.Vaddr <= s.Value && s.Value < (prog.Vaddr+prog.Memsz) {\n\t\t\t\t// If the symbol value is contained in the segment, calculate\n\t\t\t\t// the symbol offset.\n\t\t\t\t//\n\t\t\t\t// fn symbol offset = fn symbol VA - .text VA + .text offset\n\t\t\t\t//\n\t\t\t\t// stackoverflow.com/a/40249502\n\t\t\t\taddress = s.Value - prog.Vaddr + prog.Off\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tex.addresses[s.Name] = address\n\t}\n\n\treturn nil\n}\n\n// address calculates the address of a symbol in the executable.\n//\n// opts must not be nil.\nfunc (ex *Executable) address(symbol string, opts *UprobeOptions) (uint64, error) {\n\tif opts.Address > 0 {\n\t\treturn opts.Address + opts.Offset, nil\n\t}\n\n\tvar err error\n\tex.addressesOnce.Do(func() {\n\t\tvar f *internal.SafeELFFile\n\t\tf, err = internal.OpenSafeELFFile(ex.path)\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"parse ELF file: %w\", err)\n\t\t\treturn\n\t\t}\n\t\tdefer f.Close()\n\n\t\terr = ex.load(f)\n\t})\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"lazy load symbols: %w\", err)\n\t}\n\n\taddress, ok := ex.addresses[symbol]\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"symbol %s: %w\", symbol, ErrNoSymbol)\n\t}\n\n\t// Symbols with location 0 from section undef are shared library calls and\n\t// are relocated before the binary is executed. Dynamic linking is not\n\t// implemented by the library, so mark this as unsupported for now.\n\t//\n\t// Since only offset values are stored and not elf.Symbol, if the value is 0,\n\t// assume it's an external symbol.\n\tif address == 0 {\n\t\treturn 0, fmt.Errorf(\"cannot resolve %s library call '%s': %w \"+\n\t\t\t\"(consider providing UprobeOptions.Address)\", ex.path, symbol, ErrNotSupported)\n\t}\n\n\treturn address + opts.Offset, nil\n}\n\n// Uprobe attaches the given eBPF program to a perf event that fires when the\n// given symbol starts executing in the given Executable.\n// For example, /bin/bash::main():\n//\n//\tex, _ = OpenExecutable(\"/bin/bash\")\n//\tex.Uprobe(\"main\", prog, nil)\n//\n// When using symbols which belongs to shared libraries,\n// an offset must be provided via options:\n//\n//\tup, err := ex.Uprobe(\"main\", prog, &UprobeOptions{Offset: 0x123})\n//\n// Note: Setting the Offset field in the options supersedes the symbol's offset.\n//\n// Losing the reference to the resulting Link (up) will close the Uprobe\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// Functions provided by shared libraries can currently not be traced and\n// will result in an ErrNotSupported.\nfunc (ex *Executable) Uprobe(symbol string, prog *ebpf.Program, opts *UprobeOptions) (Link, error) {\n\tu, err := ex.uprobe(symbol, prog, opts, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlnk, err := attachPerfEvent(u, prog, opts.cookie())\n\tif err != nil {\n\t\tu.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n\n// Uretprobe attaches the given eBPF program to a perf event that fires right\n// before the given symbol exits. For example, /bin/bash::main():\n//\n//\tex, _ = OpenExecutable(\"/bin/bash\")\n//\tex.Uretprobe(\"main\", prog, nil)\n//\n// When using symbols which belongs to shared libraries,\n// an offset must be provided via options:\n//\n//\tup, err := ex.Uretprobe(\"main\", prog, &UprobeOptions{Offset: 0x123})\n//\n// Note: Setting the Offset field in the options supersedes the symbol's offset.\n//\n// Losing the reference to the resulting Link (up) will close the Uprobe\n// and prevent further execution of prog. The Link must be Closed during\n// program shutdown to avoid leaking system resources.\n//\n// Functions provided by shared libraries can currently not be traced and\n// will result in an ErrNotSupported.\nfunc (ex *Executable) Uretprobe(symbol string, prog *ebpf.Program, opts *UprobeOptions) (Link, error) {\n\tu, err := ex.uprobe(symbol, prog, opts, true)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tlnk, err := attachPerfEvent(u, prog, opts.cookie())\n\tif err != nil {\n\t\tu.Close()\n\t\treturn nil, err\n\t}\n\n\treturn lnk, nil\n}\n\n// uprobe opens a perf event for the given binary/symbol and attaches prog to it.\n// If ret is true, create a uretprobe.\nfunc (ex *Executable) uprobe(symbol string, prog *ebpf.Program, opts *UprobeOptions, ret bool) (*perfEvent, error) {\n\tif prog == nil {\n\t\treturn nil, fmt.Errorf(\"prog cannot be nil: %w\", errInvalidInput)\n\t}\n\tif prog.Type() != ebpf.Kprobe {\n\t\treturn nil, fmt.Errorf(\"eBPF program type %s is not Kprobe: %w\", prog.Type(), errInvalidInput)\n\t}\n\tif opts == nil {\n\t\topts = &UprobeOptions{}\n\t}\n\n\toffset, err := ex.address(symbol, opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tpid := opts.PID\n\tif pid == 0 {\n\t\tpid = perfAllThreads\n\t}\n\n\tif opts.RefCtrOffset != 0 {\n\t\tif err := haveRefCtrOffsetPMU(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"uprobe ref_ctr_offset: %w\", err)\n\t\t}\n\t}\n\n\targs := tracefs.ProbeArgs{\n\t\tType:         tracefs.Uprobe,\n\t\tSymbol:       symbol,\n\t\tPath:         ex.path,\n\t\tOffset:       offset,\n\t\tPid:          pid,\n\t\tRefCtrOffset: opts.RefCtrOffset,\n\t\tRet:          ret,\n\t\tCookie:       opts.Cookie,\n\t\tGroup:        opts.TraceFSPrefix,\n\t}\n\n\t// Use uprobe PMU if the kernel has it available.\n\ttp, err := pmuProbe(args)\n\tif err == nil {\n\t\treturn tp, nil\n\t}\n\tif err != nil && !errors.Is(err, ErrNotSupported) {\n\t\treturn nil, fmt.Errorf(\"creating perf_uprobe PMU: %w\", err)\n\t}\n\n\t// Use tracefs if uprobe PMU is missing.\n\ttp, err = tracefsProbe(args)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating trace event '%s:%s' in tracefs: %w\", ex.path, symbol, err)\n\t}\n\n\treturn tp, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/link/xdp.go",
    "content": "package link\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cilium/ebpf\"\n)\n\n// XDPAttachFlags represents how XDP program will be attached to interface.\ntype XDPAttachFlags uint32\n\nconst (\n\t// XDPGenericMode (SKB) links XDP BPF program for drivers which do\n\t// not yet support native XDP.\n\tXDPGenericMode XDPAttachFlags = 1 << (iota + 1)\n\t// XDPDriverMode links XDP BPF program into the driver’s receive path.\n\tXDPDriverMode\n\t// XDPOffloadMode offloads the entire XDP BPF program into hardware.\n\tXDPOffloadMode\n)\n\ntype XDPOptions struct {\n\t// Program must be an XDP BPF program.\n\tProgram *ebpf.Program\n\n\t// Interface is the interface index to attach program to.\n\tInterface int\n\n\t// Flags is one of XDPAttachFlags (optional).\n\t//\n\t// Only one XDP mode should be set, without flag defaults\n\t// to driver/generic mode (best effort).\n\tFlags XDPAttachFlags\n}\n\n// AttachXDP links an XDP BPF program to an XDP hook.\nfunc AttachXDP(opts XDPOptions) (Link, error) {\n\tif t := opts.Program.Type(); t != ebpf.XDP {\n\t\treturn nil, fmt.Errorf(\"invalid program type %s, expected XDP\", t)\n\t}\n\n\tif opts.Interface < 1 {\n\t\treturn nil, fmt.Errorf(\"invalid interface index: %d\", opts.Interface)\n\t}\n\n\trawLink, err := AttachRawLink(RawLinkOptions{\n\t\tProgram: opts.Program,\n\t\tAttach:  ebpf.AttachXDP,\n\t\tTarget:  opts.Interface,\n\t\tFlags:   uint32(opts.Flags),\n\t})\n\n\treturn rawLink, err\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/linker.go",
    "content": "package ebpf\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n)\n\n// handles stores handle objects to avoid gc cleanup\ntype handles []*btf.Handle\n\nfunc (hs *handles) add(h *btf.Handle) (int, error) {\n\tif h == nil {\n\t\treturn 0, nil\n\t}\n\n\tif len(*hs) == math.MaxInt16 {\n\t\treturn 0, fmt.Errorf(\"can't add more than %d module FDs to fdArray\", math.MaxInt16)\n\t}\n\n\t*hs = append(*hs, h)\n\n\t// return length of slice so that indexes start at 1\n\treturn len(*hs), nil\n}\n\nfunc (hs handles) fdArray() []int32 {\n\t// first element of fda is reserved as no module can be indexed with 0\n\tfda := []int32{0}\n\tfor _, h := range hs {\n\t\tfda = append(fda, int32(h.FD()))\n\t}\n\n\treturn fda\n}\n\nfunc (hs handles) close() {\n\tfor _, h := range hs {\n\t\th.Close()\n\t}\n}\n\n// splitSymbols splits insns into subsections delimited by Symbol Instructions.\n// insns cannot be empty and must start with a Symbol Instruction.\n//\n// The resulting map is indexed by Symbol name.\nfunc splitSymbols(insns asm.Instructions) (map[string]asm.Instructions, error) {\n\tif len(insns) == 0 {\n\t\treturn nil, errors.New(\"insns is empty\")\n\t}\n\n\tif insns[0].Symbol() == \"\" {\n\t\treturn nil, errors.New(\"insns must start with a Symbol\")\n\t}\n\n\tvar name string\n\tprogs := make(map[string]asm.Instructions)\n\tfor _, ins := range insns {\n\t\tif sym := ins.Symbol(); sym != \"\" {\n\t\t\tif progs[sym] != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"insns contains duplicate Symbol %s\", sym)\n\t\t\t}\n\t\t\tname = sym\n\t\t}\n\n\t\tprogs[name] = append(progs[name], ins)\n\t}\n\n\treturn progs, nil\n}\n\n// The linker is responsible for resolving bpf-to-bpf calls between programs\n// within an ELF. Each BPF program must be a self-contained binary blob,\n// so when an instruction in one ELF program section wants to jump to\n// a function in another, the linker needs to pull in the bytecode\n// (and BTF info) of the target function and concatenate the instruction\n// streams.\n//\n// Later on in the pipeline, all call sites are fixed up with relative jumps\n// within this newly-created instruction stream to then finally hand off to\n// the kernel with BPF_PROG_LOAD.\n//\n// Each function is denoted by an ELF symbol and the compiler takes care of\n// register setup before each jump instruction.\n\n// hasFunctionReferences returns true if insns contains one or more bpf2bpf\n// function references.\nfunc hasFunctionReferences(insns asm.Instructions) bool {\n\tfor _, i := range insns {\n\t\tif i.IsFunctionReference() {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// applyRelocations collects and applies any CO-RE relocations in insns.\n//\n// Passing a nil target will relocate against the running kernel. insns are\n// modified in place.\nfunc applyRelocations(insns asm.Instructions, target *btf.Spec, bo binary.ByteOrder) error {\n\tvar relos []*btf.CORERelocation\n\tvar reloInsns []*asm.Instruction\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tif relo := btf.CORERelocationMetadata(iter.Ins); relo != nil {\n\t\t\trelos = append(relos, relo)\n\t\t\treloInsns = append(reloInsns, iter.Ins)\n\t\t}\n\t}\n\n\tif len(relos) == 0 {\n\t\treturn nil\n\t}\n\n\tif bo == nil {\n\t\tbo = internal.NativeEndian\n\t}\n\n\tfixups, err := btf.CORERelocate(relos, target, bo)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tfor i, fixup := range fixups {\n\t\tif err := fixup.Apply(reloInsns[i]); err != nil {\n\t\t\treturn fmt.Errorf(\"fixup for %s: %w\", relos[i], err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// flattenPrograms resolves bpf-to-bpf calls for a set of programs.\n//\n// Links all programs in names by modifying their ProgramSpec in progs.\nfunc flattenPrograms(progs map[string]*ProgramSpec, names []string) {\n\t// Pre-calculate all function references.\n\trefs := make(map[*ProgramSpec][]string)\n\tfor _, prog := range progs {\n\t\trefs[prog] = prog.Instructions.FunctionReferences()\n\t}\n\n\t// Create a flattened instruction stream, but don't modify progs yet to\n\t// avoid linking multiple times.\n\tflattened := make([]asm.Instructions, 0, len(names))\n\tfor _, name := range names {\n\t\tflattened = append(flattened, flattenInstructions(name, progs, refs))\n\t}\n\n\t// Finally, assign the flattened instructions.\n\tfor i, name := range names {\n\t\tprogs[name].Instructions = flattened[i]\n\t}\n}\n\n// flattenInstructions resolves bpf-to-bpf calls for a single program.\n//\n// Flattens the instructions of prog by concatenating the instructions of all\n// direct and indirect dependencies.\n//\n// progs contains all referenceable programs, while refs contain the direct\n// dependencies of each program.\nfunc flattenInstructions(name string, progs map[string]*ProgramSpec, refs map[*ProgramSpec][]string) asm.Instructions {\n\tprog := progs[name]\n\n\tinsns := make(asm.Instructions, len(prog.Instructions))\n\tcopy(insns, prog.Instructions)\n\n\t// Add all direct references of prog to the list of to be linked programs.\n\tpending := make([]string, len(refs[prog]))\n\tcopy(pending, refs[prog])\n\n\t// All references for which we've appended instructions.\n\tlinked := make(map[string]bool)\n\n\t// Iterate all pending references. We can't use a range since pending is\n\t// modified in the body below.\n\tfor len(pending) > 0 {\n\t\tvar ref string\n\t\tref, pending = pending[0], pending[1:]\n\n\t\tif linked[ref] {\n\t\t\t// We've already linked this ref, don't append instructions again.\n\t\t\tcontinue\n\t\t}\n\n\t\tprogRef := progs[ref]\n\t\tif progRef == nil {\n\t\t\t// We don't have instructions that go with this reference. This\n\t\t\t// happens when calling extern functions.\n\t\t\tcontinue\n\t\t}\n\n\t\tinsns = append(insns, progRef.Instructions...)\n\t\tlinked[ref] = true\n\n\t\t// Make sure we link indirect references.\n\t\tpending = append(pending, refs[progRef]...)\n\t}\n\n\treturn insns\n}\n\n// fixupAndValidate is called by the ELF reader right before marshaling the\n// instruction stream. It performs last-minute adjustments to the program and\n// runs some sanity checks before sending it off to the kernel.\nfunc fixupAndValidate(insns asm.Instructions) error {\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\n\t\t// Map load was tagged with a Reference, but does not contain a Map pointer.\n\t\tneedsMap := ins.Reference() != \"\" || ins.Metadata.Get(kconfigMetaKey{}) != nil\n\t\tif ins.IsLoadFromMap() && needsMap && ins.Map() == nil {\n\t\t\treturn fmt.Errorf(\"instruction %d: %w\", iter.Index, asm.ErrUnsatisfiedMapReference)\n\t\t}\n\n\t\tfixupProbeReadKernel(ins)\n\t}\n\n\treturn nil\n}\n\n// fixupKfuncs loops over all instructions in search for kfunc calls.\n// If at least one is found, the current kernels BTF and module BTFis are searched to set Instruction.Constant\n// and Instruction.Offset to the correct values.\nfunc fixupKfuncs(insns asm.Instructions) (handles, error) {\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tins := iter.Ins\n\t\tif ins.IsKfuncCall() {\n\t\t\tgoto fixups\n\t\t}\n\t}\n\n\treturn nil, nil\n\nfixups:\n\t// only load the kernel spec if we found at least one kfunc call\n\tkernelSpec, err := btf.LoadKernelSpec()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfdArray := make(handles, 0)\n\tfor {\n\t\tins := iter.Ins\n\n\t\tif !ins.IsKfuncCall() {\n\t\t\tif !iter.Next() {\n\t\t\t\t// break loop if this was the last instruction in the stream.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// check meta, if no meta return err\n\t\tkfm, _ := ins.Metadata.Get(kfuncMeta{}).(*btf.Func)\n\t\tif kfm == nil {\n\t\t\treturn nil, fmt.Errorf(\"kfunc call has no kfuncMeta\")\n\t\t}\n\n\t\ttarget := btf.Type((*btf.Func)(nil))\n\t\tspec, module, err := findTargetInKernel(kernelSpec, kfm.Name, &target)\n\t\tif errors.Is(err, btf.ErrNotFound) {\n\t\t\treturn nil, fmt.Errorf(\"kfunc %q: %w\", kfm.Name, ErrNotSupported)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif err := btf.CheckTypeCompatibility(kfm.Type, target.(*btf.Func).Type); err != nil {\n\t\t\treturn nil, &incompatibleKfuncError{kfm.Name, err}\n\t\t}\n\n\t\tid, err := spec.TypeID(target)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tidx, err := fdArray.add(module)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tins.Constant = int64(id)\n\t\tins.Offset = int16(idx)\n\n\t\tif !iter.Next() {\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn fdArray, nil\n}\n\ntype incompatibleKfuncError struct {\n\tname string\n\terr  error\n}\n\nfunc (ike *incompatibleKfuncError) Error() string {\n\treturn fmt.Sprintf(\"kfunc %q: %s\", ike.name, ike.err)\n}\n\n// fixupProbeReadKernel replaces calls to bpf_probe_read_{kernel,user}(_str)\n// with bpf_probe_read(_str) on kernels that don't support it yet.\nfunc fixupProbeReadKernel(ins *asm.Instruction) {\n\tif !ins.IsBuiltinCall() {\n\t\treturn\n\t}\n\n\t// Kernel supports bpf_probe_read_kernel, nothing to do.\n\tif haveProbeReadKernel() == nil {\n\t\treturn\n\t}\n\n\tswitch asm.BuiltinFunc(ins.Constant) {\n\tcase asm.FnProbeReadKernel, asm.FnProbeReadUser:\n\t\tins.Constant = int64(asm.FnProbeRead)\n\tcase asm.FnProbeReadKernelStr, asm.FnProbeReadUserStr:\n\t\tins.Constant = int64(asm.FnProbeReadStr)\n\t}\n}\n\n// resolveKconfigReferences creates and populates a .kconfig map if necessary.\n//\n// Returns a nil Map and no error if no references exist.\nfunc resolveKconfigReferences(insns asm.Instructions) (_ *Map, err error) {\n\tcloseOnError := func(c io.Closer) {\n\t\tif err != nil {\n\t\t\tc.Close()\n\t\t}\n\t}\n\n\tvar spec *MapSpec\n\titer := insns.Iterate()\n\tfor iter.Next() {\n\t\tmeta, _ := iter.Ins.Metadata.Get(kconfigMetaKey{}).(*kconfigMeta)\n\t\tif meta != nil {\n\t\t\tspec = meta.Map\n\t\t\tbreak\n\t\t}\n\t}\n\n\tif spec == nil {\n\t\treturn nil, nil\n\t}\n\n\tcpy := spec.Copy()\n\tif err := resolveKconfig(cpy); err != nil {\n\t\treturn nil, err\n\t}\n\n\tkconfig, err := NewMap(cpy)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer closeOnError(kconfig)\n\n\t// Resolve all instructions which load from .kconfig map with actual map\n\t// and offset inside it.\n\titer = insns.Iterate()\n\tfor iter.Next() {\n\t\tmeta, _ := iter.Ins.Metadata.Get(kconfigMetaKey{}).(*kconfigMeta)\n\t\tif meta == nil {\n\t\t\tcontinue\n\t\t}\n\n\t\tif meta.Map != spec {\n\t\t\treturn nil, fmt.Errorf(\"instruction %d: reference to multiple .kconfig maps is not allowed\", iter.Index)\n\t\t}\n\n\t\tif err := iter.Ins.AssociateMap(kconfig); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"instruction %d: %w\", iter.Index, err)\n\t\t}\n\n\t\t// Encode a map read at the offset of the var in the datasec.\n\t\titer.Ins.Constant = int64(uint64(meta.Offset) << 32)\n\t\titer.Ins.Metadata.Set(kconfigMetaKey{}, nil)\n\t}\n\n\treturn kconfig, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/map.go",
    "content": "package ebpf\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/rand\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"reflect\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// Errors returned by Map and MapIterator methods.\nvar (\n\tErrKeyNotExist      = errors.New(\"key does not exist\")\n\tErrKeyExist         = errors.New(\"key already exists\")\n\tErrIterationAborted = errors.New(\"iteration aborted\")\n\tErrMapIncompatible  = errors.New(\"map spec is incompatible with existing map\")\n\terrMapNoBTFValue    = errors.New(\"map spec does not contain a BTF Value\")\n)\n\n// MapOptions control loading a map into the kernel.\ntype MapOptions struct {\n\t// The base path to pin maps in if requested via PinByName.\n\t// Existing maps will be re-used if they are compatible, otherwise an\n\t// error is returned.\n\tPinPath        string\n\tLoadPinOptions LoadPinOptions\n}\n\n// MapID represents the unique ID of an eBPF map\ntype MapID uint32\n\n// MapSpec defines a Map.\ntype MapSpec struct {\n\t// Name is passed to the kernel as a debug aid. Must only contain\n\t// alpha numeric and '_' characters.\n\tName       string\n\tType       MapType\n\tKeySize    uint32\n\tValueSize  uint32\n\tMaxEntries uint32\n\n\t// Flags is passed to the kernel and specifies additional map\n\t// creation attributes.\n\tFlags uint32\n\n\t// Automatically pin and load a map from MapOptions.PinPath.\n\t// Generates an error if an existing pinned map is incompatible with the MapSpec.\n\tPinning PinType\n\n\t// Specify numa node during map creation\n\t// (effective only if unix.BPF_F_NUMA_NODE flag is set,\n\t// which can be imported from golang.org/x/sys/unix)\n\tNumaNode uint32\n\n\t// The initial contents of the map. May be nil.\n\tContents []MapKV\n\n\t// Whether to freeze a map after setting its initial contents.\n\tFreeze bool\n\n\t// InnerMap is used as a template for ArrayOfMaps and HashOfMaps\n\tInnerMap *MapSpec\n\n\t// Extra trailing bytes found in the ELF map definition when using structs\n\t// larger than libbpf's bpf_map_def. nil if no trailing bytes were present.\n\t// Must be nil or empty before instantiating the MapSpec into a Map.\n\tExtra *bytes.Reader\n\n\t// The key and value type of this map. May be nil.\n\tKey, Value btf.Type\n}\n\nfunc (ms *MapSpec) String() string {\n\treturn fmt.Sprintf(\"%s(keySize=%d, valueSize=%d, maxEntries=%d, flags=%d)\", ms.Type, ms.KeySize, ms.ValueSize, ms.MaxEntries, ms.Flags)\n}\n\n// Copy returns a copy of the spec.\n//\n// MapSpec.Contents is a shallow copy.\nfunc (ms *MapSpec) Copy() *MapSpec {\n\tif ms == nil {\n\t\treturn nil\n\t}\n\n\tcpy := *ms\n\n\tcpy.Contents = make([]MapKV, len(ms.Contents))\n\tcopy(cpy.Contents, ms.Contents)\n\n\tcpy.InnerMap = ms.InnerMap.Copy()\n\n\treturn &cpy\n}\n\nfunc (ms *MapSpec) clampPerfEventArraySize() error {\n\tif ms.Type != PerfEventArray {\n\t\treturn nil\n\t}\n\n\tn, err := internal.PossibleCPUs()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"perf event array: %w\", err)\n\t}\n\n\tif n := uint32(n); ms.MaxEntries > n {\n\t\tms.MaxEntries = n\n\t}\n\n\treturn nil\n}\n\n// dataSection returns the contents and BTF Datasec descriptor of the spec.\nfunc (ms *MapSpec) dataSection() ([]byte, *btf.Datasec, error) {\n\n\tif ms.Value == nil {\n\t\treturn nil, nil, errMapNoBTFValue\n\t}\n\n\tds, ok := ms.Value.(*btf.Datasec)\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"map value BTF is a %T, not a *btf.Datasec\", ms.Value)\n\t}\n\n\tif n := len(ms.Contents); n != 1 {\n\t\treturn nil, nil, fmt.Errorf(\"expected one key, found %d\", n)\n\t}\n\n\tkv := ms.Contents[0]\n\tvalue, ok := kv.Value.([]byte)\n\tif !ok {\n\t\treturn nil, nil, fmt.Errorf(\"value at first map key is %T, not []byte\", kv.Value)\n\t}\n\n\treturn value, ds, nil\n}\n\n// MapKV is used to initialize the contents of a Map.\ntype MapKV struct {\n\tKey   interface{}\n\tValue interface{}\n}\n\n// Compatible returns nil if an existing map may be used instead of creating\n// one from the spec.\n//\n// Returns an error wrapping [ErrMapIncompatible] otherwise.\nfunc (ms *MapSpec) Compatible(m *Map) error {\n\tswitch {\n\tcase m.typ != ms.Type:\n\t\treturn fmt.Errorf(\"expected type %v, got %v: %w\", ms.Type, m.typ, ErrMapIncompatible)\n\n\tcase m.keySize != ms.KeySize:\n\t\treturn fmt.Errorf(\"expected key size %v, got %v: %w\", ms.KeySize, m.keySize, ErrMapIncompatible)\n\n\tcase m.valueSize != ms.ValueSize:\n\t\treturn fmt.Errorf(\"expected value size %v, got %v: %w\", ms.ValueSize, m.valueSize, ErrMapIncompatible)\n\n\tcase !(ms.Type == PerfEventArray && ms.MaxEntries == 0) &&\n\t\tm.maxEntries != ms.MaxEntries:\n\t\treturn fmt.Errorf(\"expected max entries %v, got %v: %w\", ms.MaxEntries, m.maxEntries, ErrMapIncompatible)\n\n\t// BPF_F_RDONLY_PROG is set unconditionally for devmaps. Explicitly allow\n\t// this mismatch.\n\tcase !((ms.Type == DevMap || ms.Type == DevMapHash) && m.flags^ms.Flags == unix.BPF_F_RDONLY_PROG) &&\n\t\tm.flags != ms.Flags:\n\t\treturn fmt.Errorf(\"expected flags %v, got %v: %w\", ms.Flags, m.flags, ErrMapIncompatible)\n\t}\n\treturn nil\n}\n\n// Map represents a Map file descriptor.\n//\n// It is not safe to close a map which is used by other goroutines.\n//\n// Methods which take interface{} arguments by default encode\n// them using binary.Read/Write in the machine's native endianness.\n//\n// Implement encoding.BinaryMarshaler or encoding.BinaryUnmarshaler\n// if you require custom encoding.\ntype Map struct {\n\tname       string\n\tfd         *sys.FD\n\ttyp        MapType\n\tkeySize    uint32\n\tvalueSize  uint32\n\tmaxEntries uint32\n\tflags      uint32\n\tpinnedPath string\n\t// Per CPU maps return values larger than the size in the spec\n\tfullValueSize int\n}\n\n// NewMapFromFD creates a map from a raw fd.\n//\n// You should not use fd after calling this function.\nfunc NewMapFromFD(fd int) (*Map, error) {\n\tf, err := sys.NewFD(fd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn newMapFromFD(f)\n}\n\nfunc newMapFromFD(fd *sys.FD) (*Map, error) {\n\tinfo, err := newMapInfoFromFd(fd)\n\tif err != nil {\n\t\tfd.Close()\n\t\treturn nil, fmt.Errorf(\"get map info: %w\", err)\n\t}\n\n\treturn newMap(fd, info.Name, info.Type, info.KeySize, info.ValueSize, info.MaxEntries, info.Flags)\n}\n\n// NewMap creates a new Map.\n//\n// It's equivalent to calling NewMapWithOptions with default options.\nfunc NewMap(spec *MapSpec) (*Map, error) {\n\treturn NewMapWithOptions(spec, MapOptions{})\n}\n\n// NewMapWithOptions creates a new Map.\n//\n// Creating a map for the first time will perform feature detection\n// by creating small, temporary maps.\n//\n// The caller is responsible for ensuring the process' rlimit is set\n// sufficiently high for locking memory during map creation. This can be done\n// by calling rlimit.RemoveMemlock() prior to calling NewMapWithOptions.\n//\n// May return an error wrapping ErrMapIncompatible.\nfunc NewMapWithOptions(spec *MapSpec, opts MapOptions) (*Map, error) {\n\tm, err := newMapWithOptions(spec, opts)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating map: %w\", err)\n\t}\n\n\tif err := m.finalize(spec); err != nil {\n\t\tm.Close()\n\t\treturn nil, fmt.Errorf(\"populating map: %w\", err)\n\t}\n\n\treturn m, nil\n}\n\nfunc newMapWithOptions(spec *MapSpec, opts MapOptions) (_ *Map, err error) {\n\tcloseOnError := func(c io.Closer) {\n\t\tif err != nil {\n\t\t\tc.Close()\n\t\t}\n\t}\n\n\tswitch spec.Pinning {\n\tcase PinByName:\n\t\tif spec.Name == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"pin by name: missing Name\")\n\t\t}\n\n\t\tif opts.PinPath == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"pin by name: missing MapOptions.PinPath\")\n\t\t}\n\n\t\tpath := filepath.Join(opts.PinPath, spec.Name)\n\t\tm, err := LoadPinnedMap(path, &opts.LoadPinOptions)\n\t\tif errors.Is(err, unix.ENOENT) {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"load pinned map: %w\", err)\n\t\t}\n\t\tdefer closeOnError(m)\n\n\t\tif err := spec.Compatible(m); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"use pinned map %s: %w\", spec.Name, err)\n\t\t}\n\n\t\treturn m, nil\n\n\tcase PinNone:\n\t\t// Nothing to do here\n\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"pin type %d: %w\", int(spec.Pinning), ErrNotSupported)\n\t}\n\n\tvar innerFd *sys.FD\n\tif spec.Type == ArrayOfMaps || spec.Type == HashOfMaps {\n\t\tif spec.InnerMap == nil {\n\t\t\treturn nil, fmt.Errorf(\"%s requires InnerMap\", spec.Type)\n\t\t}\n\n\t\tif spec.InnerMap.Pinning != PinNone {\n\t\t\treturn nil, errors.New(\"inner maps cannot be pinned\")\n\t\t}\n\n\t\ttemplate, err := spec.InnerMap.createMap(nil, opts)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"inner map: %w\", err)\n\t\t}\n\t\tdefer template.Close()\n\n\t\t// Intentionally skip populating and freezing (finalizing)\n\t\t// the inner map template since it will be removed shortly.\n\n\t\tinnerFd = template.fd\n\t}\n\n\tm, err := spec.createMap(innerFd, opts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer closeOnError(m)\n\n\tif spec.Pinning == PinByName {\n\t\tpath := filepath.Join(opts.PinPath, spec.Name)\n\t\tif err := m.Pin(path); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"pin map to %s: %w\", path, err)\n\t\t}\n\t}\n\n\treturn m, nil\n}\n\n// createMap validates the spec's properties and creates the map in the kernel\n// using the given opts. It does not populate or freeze the map.\nfunc (spec *MapSpec) createMap(inner *sys.FD, opts MapOptions) (_ *Map, err error) {\n\tcloseOnError := func(closer io.Closer) {\n\t\tif err != nil {\n\t\t\tcloser.Close()\n\t\t}\n\t}\n\n\t// Kernels 4.13 through 5.4 used a struct bpf_map_def that contained\n\t// additional 'inner_map_idx' and later 'numa_node' fields.\n\t// In order to support loading these definitions, tolerate the presence of\n\t// extra bytes, but require them to be zeroes.\n\tif spec.Extra != nil {\n\t\tif _, err := io.Copy(internal.DiscardZeroes{}, spec.Extra); err != nil {\n\t\t\treturn nil, errors.New(\"extra contains unhandled non-zero bytes, drain before creating map\")\n\t\t}\n\t}\n\n\tswitch spec.Type {\n\tcase ArrayOfMaps, HashOfMaps:\n\t\tif err := haveNestedMaps(); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif spec.ValueSize != 0 && spec.ValueSize != 4 {\n\t\t\treturn nil, errors.New(\"ValueSize must be zero or four for map of map\")\n\t\t}\n\n\t\tspec = spec.Copy()\n\t\tspec.ValueSize = 4\n\n\tcase PerfEventArray:\n\t\tif spec.KeySize != 0 && spec.KeySize != 4 {\n\t\t\treturn nil, errors.New(\"KeySize must be zero or four for perf event array\")\n\t\t}\n\n\t\tif spec.ValueSize != 0 && spec.ValueSize != 4 {\n\t\t\treturn nil, errors.New(\"ValueSize must be zero or four for perf event array\")\n\t\t}\n\n\t\tspec = spec.Copy()\n\t\tspec.KeySize = 4\n\t\tspec.ValueSize = 4\n\n\t\tif spec.MaxEntries == 0 {\n\t\t\tn, err := internal.PossibleCPUs()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"perf event array: %w\", err)\n\t\t\t}\n\t\t\tspec.MaxEntries = uint32(n)\n\t\t}\n\t}\n\n\tif spec.Flags&(unix.BPF_F_RDONLY_PROG|unix.BPF_F_WRONLY_PROG) > 0 || spec.Freeze {\n\t\tif err := haveMapMutabilityModifiers(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"map create: %w\", err)\n\t\t}\n\t}\n\tif spec.Flags&unix.BPF_F_MMAPABLE > 0 {\n\t\tif err := haveMmapableMaps(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"map create: %w\", err)\n\t\t}\n\t}\n\tif spec.Flags&unix.BPF_F_INNER_MAP > 0 {\n\t\tif err := haveInnerMaps(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"map create: %w\", err)\n\t\t}\n\t}\n\tif spec.Flags&unix.BPF_F_NO_PREALLOC > 0 {\n\t\tif err := haveNoPreallocMaps(); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"map create: %w\", err)\n\t\t}\n\t}\n\n\tattr := sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(spec.Type),\n\t\tKeySize:    spec.KeySize,\n\t\tValueSize:  spec.ValueSize,\n\t\tMaxEntries: spec.MaxEntries,\n\t\tMapFlags:   sys.MapFlags(spec.Flags),\n\t\tNumaNode:   spec.NumaNode,\n\t}\n\n\tif inner != nil {\n\t\tattr.InnerMapFd = inner.Uint()\n\t}\n\n\tif haveObjName() == nil {\n\t\tattr.MapName = sys.NewObjName(spec.Name)\n\t}\n\n\tif spec.Key != nil || spec.Value != nil {\n\t\thandle, keyTypeID, valueTypeID, err := btf.MarshalMapKV(spec.Key, spec.Value)\n\t\tif err != nil && !errors.Is(err, btf.ErrNotSupported) {\n\t\t\treturn nil, fmt.Errorf(\"load BTF: %w\", err)\n\t\t}\n\n\t\tif handle != nil {\n\t\t\tdefer handle.Close()\n\n\t\t\t// Use BTF k/v during map creation.\n\t\t\tattr.BtfFd = uint32(handle.FD())\n\t\t\tattr.BtfKeyTypeId = keyTypeID\n\t\t\tattr.BtfValueTypeId = valueTypeID\n\t\t}\n\t}\n\n\tfd, err := sys.MapCreate(&attr)\n\t// Some map types don't support BTF k/v in earlier kernel versions.\n\t// Remove BTF metadata and retry map creation.\n\tif (errors.Is(err, sys.ENOTSUPP) || errors.Is(err, unix.EINVAL)) && attr.BtfFd != 0 {\n\t\tattr.BtfFd, attr.BtfKeyTypeId, attr.BtfValueTypeId = 0, 0, 0\n\t\tfd, err = sys.MapCreate(&attr)\n\t}\n\n\tif err != nil {\n\t\tif errors.Is(err, unix.EPERM) {\n\t\t\treturn nil, fmt.Errorf(\"map create: %w (MEMLOCK may be too low, consider rlimit.RemoveMemlock)\", err)\n\t\t}\n\t\tif errors.Is(err, unix.EINVAL) && attr.MaxEntries == 0 {\n\t\t\treturn nil, fmt.Errorf(\"map create: %w (MaxEntries may be incorrectly set to zero)\", err)\n\t\t}\n\t\tif errors.Is(err, unix.EINVAL) && spec.Type == UnspecifiedMap {\n\t\t\treturn nil, fmt.Errorf(\"map create: cannot use type %s\", UnspecifiedMap)\n\t\t}\n\t\tif attr.BtfFd == 0 {\n\t\t\treturn nil, fmt.Errorf(\"map create: %w (without BTF k/v)\", err)\n\t\t}\n\t\treturn nil, fmt.Errorf(\"map create: %w\", err)\n\t}\n\tdefer closeOnError(fd)\n\n\tm, err := newMap(fd, spec.Name, spec.Type, spec.KeySize, spec.ValueSize, spec.MaxEntries, spec.Flags)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"map create: %w\", err)\n\t}\n\n\treturn m, nil\n}\n\n// newMap allocates and returns a new Map structure.\n// Sets the fullValueSize on per-CPU maps.\nfunc newMap(fd *sys.FD, name string, typ MapType, keySize, valueSize, maxEntries, flags uint32) (*Map, error) {\n\tm := &Map{\n\t\tname,\n\t\tfd,\n\t\ttyp,\n\t\tkeySize,\n\t\tvalueSize,\n\t\tmaxEntries,\n\t\tflags,\n\t\t\"\",\n\t\tint(valueSize),\n\t}\n\n\tif !typ.hasPerCPUValue() {\n\t\treturn m, nil\n\t}\n\n\tpossibleCPUs, err := internal.PossibleCPUs()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tm.fullValueSize = int(internal.Align(valueSize, 8)) * possibleCPUs\n\treturn m, nil\n}\n\nfunc (m *Map) String() string {\n\tif m.name != \"\" {\n\t\treturn fmt.Sprintf(\"%s(%s)#%v\", m.typ, m.name, m.fd)\n\t}\n\treturn fmt.Sprintf(\"%s#%v\", m.typ, m.fd)\n}\n\n// Type returns the underlying type of the map.\nfunc (m *Map) Type() MapType {\n\treturn m.typ\n}\n\n// KeySize returns the size of the map key in bytes.\nfunc (m *Map) KeySize() uint32 {\n\treturn m.keySize\n}\n\n// ValueSize returns the size of the map value in bytes.\nfunc (m *Map) ValueSize() uint32 {\n\treturn m.valueSize\n}\n\n// MaxEntries returns the maximum number of elements the map can hold.\nfunc (m *Map) MaxEntries() uint32 {\n\treturn m.maxEntries\n}\n\n// Flags returns the flags of the map.\nfunc (m *Map) Flags() uint32 {\n\treturn m.flags\n}\n\n// Info returns metadata about the map.\nfunc (m *Map) Info() (*MapInfo, error) {\n\treturn newMapInfoFromFd(m.fd)\n}\n\n// MapLookupFlags controls the behaviour of the map lookup calls.\ntype MapLookupFlags uint64\n\n// LookupLock look up the value of a spin-locked map.\nconst LookupLock MapLookupFlags = 4\n\n// Lookup retrieves a value from a Map.\n//\n// Calls Close() on valueOut if it is of type **Map or **Program,\n// and *valueOut is not nil.\n//\n// Returns an error if the key doesn't exist, see ErrKeyNotExist.\nfunc (m *Map) Lookup(key, valueOut interface{}) error {\n\treturn m.LookupWithFlags(key, valueOut, 0)\n}\n\n// LookupWithFlags retrieves a value from a Map with flags.\n//\n// Passing LookupLock flag will look up the value of a spin-locked\n// map without returning the lock. This must be specified if the\n// elements contain a spinlock.\n//\n// Calls Close() on valueOut if it is of type **Map or **Program,\n// and *valueOut is not nil.\n//\n// Returns an error if the key doesn't exist, see ErrKeyNotExist.\nfunc (m *Map) LookupWithFlags(key, valueOut interface{}, flags MapLookupFlags) error {\n\tif m.typ.hasPerCPUValue() {\n\t\treturn m.lookupPerCPU(key, valueOut, flags)\n\t}\n\n\tvaluePtr, valueBytes := makeBuffer(valueOut, m.fullValueSize)\n\tif err := m.lookup(key, valuePtr, flags); err != nil {\n\t\treturn err\n\t}\n\n\treturn m.unmarshalValue(valueOut, valueBytes)\n}\n\n// LookupAndDelete retrieves and deletes a value from a Map.\n//\n// Returns ErrKeyNotExist if the key doesn't exist.\nfunc (m *Map) LookupAndDelete(key, valueOut interface{}) error {\n\treturn m.LookupAndDeleteWithFlags(key, valueOut, 0)\n}\n\n// LookupAndDeleteWithFlags retrieves and deletes a value from a Map.\n//\n// Passing LookupLock flag will look up and delete the value of a spin-locked\n// map without returning the lock. This must be specified if the elements\n// contain a spinlock.\n//\n// Returns ErrKeyNotExist if the key doesn't exist.\nfunc (m *Map) LookupAndDeleteWithFlags(key, valueOut interface{}, flags MapLookupFlags) error {\n\tif m.typ.hasPerCPUValue() {\n\t\treturn m.lookupAndDeletePerCPU(key, valueOut, flags)\n\t}\n\n\tvaluePtr, valueBytes := makeBuffer(valueOut, m.fullValueSize)\n\tif err := m.lookupAndDelete(key, valuePtr, flags); err != nil {\n\t\treturn err\n\t}\n\treturn m.unmarshalValue(valueOut, valueBytes)\n}\n\n// LookupBytes gets a value from Map.\n//\n// Returns a nil value if a key doesn't exist.\nfunc (m *Map) LookupBytes(key interface{}) ([]byte, error) {\n\tvalueBytes := make([]byte, m.fullValueSize)\n\tvaluePtr := sys.NewSlicePointer(valueBytes)\n\n\terr := m.lookup(key, valuePtr, 0)\n\tif errors.Is(err, ErrKeyNotExist) {\n\t\treturn nil, nil\n\t}\n\n\treturn valueBytes, err\n}\n\nfunc (m *Map) lookupPerCPU(key, valueOut any, flags MapLookupFlags) error {\n\tvalueBytes := make([]byte, m.fullValueSize)\n\tif err := m.lookup(key, sys.NewSlicePointer(valueBytes), flags); err != nil {\n\t\treturn err\n\t}\n\treturn unmarshalPerCPUValue(valueOut, int(m.valueSize), valueBytes)\n}\n\nfunc (m *Map) lookup(key interface{}, valueOut sys.Pointer, flags MapLookupFlags) error {\n\tkeyPtr, err := m.marshalKey(key)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't marshal key: %w\", err)\n\t}\n\n\tattr := sys.MapLookupElemAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKey:   keyPtr,\n\t\tValue: valueOut,\n\t\tFlags: uint64(flags),\n\t}\n\n\tif err = sys.MapLookupElem(&attr); err != nil {\n\t\treturn fmt.Errorf(\"lookup: %w\", wrapMapError(err))\n\t}\n\treturn nil\n}\n\nfunc (m *Map) lookupAndDeletePerCPU(key, valueOut any, flags MapLookupFlags) error {\n\tvalueBytes := make([]byte, m.fullValueSize)\n\tif err := m.lookupAndDelete(key, sys.NewSlicePointer(valueBytes), flags); err != nil {\n\t\treturn err\n\t}\n\treturn unmarshalPerCPUValue(valueOut, int(m.valueSize), valueBytes)\n}\n\nfunc (m *Map) lookupAndDelete(key any, valuePtr sys.Pointer, flags MapLookupFlags) error {\n\tkeyPtr, err := m.marshalKey(key)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't marshal key: %w\", err)\n\t}\n\n\tattr := sys.MapLookupAndDeleteElemAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKey:   keyPtr,\n\t\tValue: valuePtr,\n\t\tFlags: uint64(flags),\n\t}\n\n\tif err := sys.MapLookupAndDeleteElem(&attr); err != nil {\n\t\treturn fmt.Errorf(\"lookup and delete: %w\", wrapMapError(err))\n\t}\n\n\treturn nil\n}\n\n// MapUpdateFlags controls the behaviour of the Map.Update call.\n//\n// The exact semantics depend on the specific MapType.\ntype MapUpdateFlags uint64\n\nconst (\n\t// UpdateAny creates a new element or update an existing one.\n\tUpdateAny MapUpdateFlags = iota\n\t// UpdateNoExist creates a new element.\n\tUpdateNoExist MapUpdateFlags = 1 << (iota - 1)\n\t// UpdateExist updates an existing element.\n\tUpdateExist\n\t// UpdateLock updates elements under bpf_spin_lock.\n\tUpdateLock\n)\n\n// Put replaces or creates a value in map.\n//\n// It is equivalent to calling Update with UpdateAny.\nfunc (m *Map) Put(key, value interface{}) error {\n\treturn m.Update(key, value, UpdateAny)\n}\n\n// Update changes the value of a key.\nfunc (m *Map) Update(key, value any, flags MapUpdateFlags) error {\n\tif m.typ.hasPerCPUValue() {\n\t\treturn m.updatePerCPU(key, value, flags)\n\t}\n\n\tvaluePtr, err := m.marshalValue(value)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshal value: %w\", err)\n\t}\n\n\treturn m.update(key, valuePtr, flags)\n}\n\nfunc (m *Map) updatePerCPU(key, value any, flags MapUpdateFlags) error {\n\tvaluePtr, err := marshalPerCPUValue(value, int(m.valueSize))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshal value: %w\", err)\n\t}\n\n\treturn m.update(key, valuePtr, flags)\n}\n\nfunc (m *Map) update(key any, valuePtr sys.Pointer, flags MapUpdateFlags) error {\n\tkeyPtr, err := m.marshalKey(key)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"marshal key: %w\", err)\n\t}\n\n\tattr := sys.MapUpdateElemAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKey:   keyPtr,\n\t\tValue: valuePtr,\n\t\tFlags: uint64(flags),\n\t}\n\n\tif err = sys.MapUpdateElem(&attr); err != nil {\n\t\treturn fmt.Errorf(\"update: %w\", wrapMapError(err))\n\t}\n\n\treturn nil\n}\n\n// Delete removes a value.\n//\n// Returns ErrKeyNotExist if the key does not exist.\nfunc (m *Map) Delete(key interface{}) error {\n\tkeyPtr, err := m.marshalKey(key)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"can't marshal key: %w\", err)\n\t}\n\n\tattr := sys.MapDeleteElemAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKey:   keyPtr,\n\t}\n\n\tif err = sys.MapDeleteElem(&attr); err != nil {\n\t\treturn fmt.Errorf(\"delete: %w\", wrapMapError(err))\n\t}\n\treturn nil\n}\n\n// NextKey finds the key following an initial key.\n//\n// See NextKeyBytes for details.\n//\n// Returns ErrKeyNotExist if there is no next key.\nfunc (m *Map) NextKey(key, nextKeyOut interface{}) error {\n\tnextKeyPtr, nextKeyBytes := makeBuffer(nextKeyOut, int(m.keySize))\n\n\tif err := m.nextKey(key, nextKeyPtr); err != nil {\n\t\treturn err\n\t}\n\n\tif err := m.unmarshalKey(nextKeyOut, nextKeyBytes); err != nil {\n\t\treturn fmt.Errorf(\"can't unmarshal next key: %w\", err)\n\t}\n\treturn nil\n}\n\n// NextKeyBytes returns the key following an initial key as a byte slice.\n//\n// Passing nil will return the first key.\n//\n// Use Iterate if you want to traverse all entries in the map.\n//\n// Returns nil if there are no more keys.\nfunc (m *Map) NextKeyBytes(key interface{}) ([]byte, error) {\n\tnextKey := make([]byte, m.keySize)\n\tnextKeyPtr := sys.NewSlicePointer(nextKey)\n\n\terr := m.nextKey(key, nextKeyPtr)\n\tif errors.Is(err, ErrKeyNotExist) {\n\t\treturn nil, nil\n\t}\n\n\treturn nextKey, err\n}\n\nfunc (m *Map) nextKey(key interface{}, nextKeyOut sys.Pointer) error {\n\tvar (\n\t\tkeyPtr sys.Pointer\n\t\terr    error\n\t)\n\n\tif key != nil {\n\t\tkeyPtr, err = m.marshalKey(key)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"can't marshal key: %w\", err)\n\t\t}\n\t}\n\n\tattr := sys.MapGetNextKeyAttr{\n\t\tMapFd:   m.fd.Uint(),\n\t\tKey:     keyPtr,\n\t\tNextKey: nextKeyOut,\n\t}\n\n\tif err = sys.MapGetNextKey(&attr); err != nil {\n\t\t// Kernels 4.4.131 and earlier return EFAULT instead of a pointer to the\n\t\t// first map element when a nil key pointer is specified.\n\t\tif key == nil && errors.Is(err, unix.EFAULT) {\n\t\t\tvar guessKey []byte\n\t\t\tguessKey, err = m.guessNonExistentKey()\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t// Retry the syscall with a valid non-existing key.\n\t\t\tattr.Key = sys.NewSlicePointer(guessKey)\n\t\t\tif err = sys.MapGetNextKey(&attr); err == nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\n\t\treturn fmt.Errorf(\"next key: %w\", wrapMapError(err))\n\t}\n\n\treturn nil\n}\n\nvar mmapProtectedPage = internal.Memoize(func() ([]byte, error) {\n\treturn unix.Mmap(-1, 0, os.Getpagesize(), unix.PROT_NONE, unix.MAP_ANON|unix.MAP_SHARED)\n})\n\n// guessNonExistentKey attempts to perform a map lookup that returns ENOENT.\n// This is necessary on kernels before 4.4.132, since those don't support\n// iterating maps from the start by providing an invalid key pointer.\nfunc (m *Map) guessNonExistentKey() ([]byte, error) {\n\t// Map a protected page and use that as the value pointer. This saves some\n\t// work copying out the value, which we're not interested in.\n\tpage, err := mmapProtectedPage()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tvaluePtr := sys.NewSlicePointer(page)\n\n\trandKey := make([]byte, int(m.keySize))\n\n\tfor i := 0; i < 4; i++ {\n\t\tswitch i {\n\t\t// For hash maps, the 0 key is less likely to be occupied. They're often\n\t\t// used for storing data related to pointers, and their access pattern is\n\t\t// generally scattered across the keyspace.\n\t\tcase 0:\n\t\t// An all-0xff key is guaranteed to be out of bounds of any array, since\n\t\t// those have a fixed key size of 4 bytes. The only corner case being\n\t\t// arrays with 2^32 max entries, but those are prohibitively expensive\n\t\t// in many environments.\n\t\tcase 1:\n\t\t\tfor r := range randKey {\n\t\t\t\trandKey[r] = 0xff\n\t\t\t}\n\t\t// Inspired by BCC, 0x55 is an alternating binary pattern (0101), so\n\t\t// is unlikely to be taken.\n\t\tcase 2:\n\t\t\tfor r := range randKey {\n\t\t\t\trandKey[r] = 0x55\n\t\t\t}\n\t\t// Last ditch effort, generate a random key.\n\t\tcase 3:\n\t\t\trand.New(rand.NewSource(time.Now().UnixNano())).Read(randKey)\n\t\t}\n\n\t\terr := m.lookup(randKey, valuePtr, 0)\n\t\tif errors.Is(err, ErrKeyNotExist) {\n\t\t\treturn randKey, nil\n\t\t}\n\t}\n\n\treturn nil, errors.New(\"couldn't find non-existing key\")\n}\n\n// BatchLookup looks up many elements in a map at once.\n//\n// \"keysOut\" and \"valuesOut\" must be of type slice, a pointer\n// to a slice or buffer will not work.\n// \"prevKey\" is the key to start the batch lookup from, it will\n// *not* be included in the results. Use nil to start at the first key.\n//\n// ErrKeyNotExist is returned when the batch lookup has reached\n// the end of all possible results, even when partial results\n// are returned. It should be used to evaluate when lookup is \"done\".\nfunc (m *Map) BatchLookup(prevKey, nextKeyOut, keysOut, valuesOut interface{}, opts *BatchOptions) (int, error) {\n\treturn m.batchLookup(sys.BPF_MAP_LOOKUP_BATCH, prevKey, nextKeyOut, keysOut, valuesOut, opts)\n}\n\n// BatchLookupAndDelete looks up many elements in a map at once,\n//\n// It then deletes all those elements.\n// \"keysOut\" and \"valuesOut\" must be of type slice, a pointer\n// to a slice or buffer will not work.\n// \"prevKey\" is the key to start the batch lookup from, it will\n// *not* be included in the results. Use nil to start at the first key.\n//\n// ErrKeyNotExist is returned when the batch lookup has reached\n// the end of all possible results, even when partial results\n// are returned. It should be used to evaluate when lookup is \"done\".\nfunc (m *Map) BatchLookupAndDelete(prevKey, nextKeyOut, keysOut, valuesOut interface{}, opts *BatchOptions) (int, error) {\n\treturn m.batchLookup(sys.BPF_MAP_LOOKUP_AND_DELETE_BATCH, prevKey, nextKeyOut, keysOut, valuesOut, opts)\n}\n\nfunc (m *Map) batchLookup(cmd sys.Cmd, startKey, nextKeyOut, keysOut, valuesOut interface{}, opts *BatchOptions) (int, error) {\n\tif err := haveBatchAPI(); err != nil {\n\t\treturn 0, err\n\t}\n\tif m.typ.hasPerCPUValue() {\n\t\treturn 0, ErrNotSupported\n\t}\n\tkeysValue := reflect.ValueOf(keysOut)\n\tif keysValue.Kind() != reflect.Slice {\n\t\treturn 0, fmt.Errorf(\"keys must be a slice\")\n\t}\n\tvaluesValue := reflect.ValueOf(valuesOut)\n\tif valuesValue.Kind() != reflect.Slice {\n\t\treturn 0, fmt.Errorf(\"valuesOut must be a slice\")\n\t}\n\tcount := keysValue.Len()\n\tif count != valuesValue.Len() {\n\t\treturn 0, fmt.Errorf(\"keysOut and valuesOut must be the same length\")\n\t}\n\tkeyBuf := make([]byte, count*int(m.keySize))\n\tkeyPtr := sys.NewSlicePointer(keyBuf)\n\tvalueBuf := make([]byte, count*int(m.fullValueSize))\n\tvaluePtr := sys.NewSlicePointer(valueBuf)\n\tnextPtr, nextBuf := makeBuffer(nextKeyOut, int(m.keySize))\n\n\tattr := sys.MapLookupBatchAttr{\n\t\tMapFd:    m.fd.Uint(),\n\t\tKeys:     keyPtr,\n\t\tValues:   valuePtr,\n\t\tCount:    uint32(count),\n\t\tOutBatch: nextPtr,\n\t}\n\n\tif opts != nil {\n\t\tattr.ElemFlags = opts.ElemFlags\n\t\tattr.Flags = opts.Flags\n\t}\n\n\tvar err error\n\tif startKey != nil {\n\t\tattr.InBatch, err = marshalPtr(startKey, int(m.keySize))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\n\t_, sysErr := sys.BPF(cmd, unsafe.Pointer(&attr), unsafe.Sizeof(attr))\n\tsysErr = wrapMapError(sysErr)\n\tif sysErr != nil && !errors.Is(sysErr, unix.ENOENT) {\n\t\treturn 0, sysErr\n\t}\n\n\terr = m.unmarshalKey(nextKeyOut, nextBuf)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\terr = unmarshalBytes(keysOut, keyBuf)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\terr = unmarshalBytes(valuesOut, valueBuf)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\treturn int(attr.Count), sysErr\n}\n\n// BatchUpdate updates the map with multiple keys and values\n// simultaneously.\n// \"keys\" and \"values\" must be of type slice, a pointer\n// to a slice or buffer will not work.\nfunc (m *Map) BatchUpdate(keys, values interface{}, opts *BatchOptions) (int, error) {\n\tif err := haveBatchAPI(); err != nil {\n\t\treturn 0, err\n\t}\n\tif m.typ.hasPerCPUValue() {\n\t\treturn 0, ErrNotSupported\n\t}\n\tkeysValue := reflect.ValueOf(keys)\n\tif keysValue.Kind() != reflect.Slice {\n\t\treturn 0, fmt.Errorf(\"keys must be a slice\")\n\t}\n\tvaluesValue := reflect.ValueOf(values)\n\tif valuesValue.Kind() != reflect.Slice {\n\t\treturn 0, fmt.Errorf(\"values must be a slice\")\n\t}\n\tvar (\n\t\tcount    = keysValue.Len()\n\t\tvaluePtr sys.Pointer\n\t\terr      error\n\t)\n\tif count != valuesValue.Len() {\n\t\treturn 0, fmt.Errorf(\"keys and values must be the same length\")\n\t}\n\tkeyPtr, err := marshalPtr(keys, count*int(m.keySize))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tvaluePtr, err = marshalPtr(values, count*int(m.valueSize))\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tattr := sys.MapUpdateBatchAttr{\n\t\tMapFd:  m.fd.Uint(),\n\t\tKeys:   keyPtr,\n\t\tValues: valuePtr,\n\t\tCount:  uint32(count),\n\t}\n\tif opts != nil {\n\t\tattr.ElemFlags = opts.ElemFlags\n\t\tattr.Flags = opts.Flags\n\t}\n\n\terr = sys.MapUpdateBatch(&attr)\n\tif err != nil {\n\t\treturn int(attr.Count), fmt.Errorf(\"batch update: %w\", wrapMapError(err))\n\t}\n\n\treturn int(attr.Count), nil\n}\n\n// BatchDelete batch deletes entries in the map by keys.\n// \"keys\" must be of type slice, a pointer to a slice or buffer will not work.\nfunc (m *Map) BatchDelete(keys interface{}, opts *BatchOptions) (int, error) {\n\tif err := haveBatchAPI(); err != nil {\n\t\treturn 0, err\n\t}\n\tif m.typ.hasPerCPUValue() {\n\t\treturn 0, ErrNotSupported\n\t}\n\tkeysValue := reflect.ValueOf(keys)\n\tif keysValue.Kind() != reflect.Slice {\n\t\treturn 0, fmt.Errorf(\"keys must be a slice\")\n\t}\n\tcount := keysValue.Len()\n\tkeyPtr, err := marshalPtr(keys, count*int(m.keySize))\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"cannot marshal keys: %v\", err)\n\t}\n\n\tattr := sys.MapDeleteBatchAttr{\n\t\tMapFd: m.fd.Uint(),\n\t\tKeys:  keyPtr,\n\t\tCount: uint32(count),\n\t}\n\n\tif opts != nil {\n\t\tattr.ElemFlags = opts.ElemFlags\n\t\tattr.Flags = opts.Flags\n\t}\n\n\tif err = sys.MapDeleteBatch(&attr); err != nil {\n\t\treturn int(attr.Count), fmt.Errorf(\"batch delete: %w\", wrapMapError(err))\n\t}\n\n\treturn int(attr.Count), nil\n}\n\n// Iterate traverses a map.\n//\n// It's safe to create multiple iterators at the same time.\n//\n// It's not possible to guarantee that all keys in a map will be\n// returned if there are concurrent modifications to the map.\nfunc (m *Map) Iterate() *MapIterator {\n\treturn newMapIterator(m)\n}\n\n// Close the Map's underlying file descriptor, which could unload the\n// Map from the kernel if it is not pinned or in use by a loaded Program.\nfunc (m *Map) Close() error {\n\tif m == nil {\n\t\t// This makes it easier to clean up when iterating maps\n\t\t// of maps / programs.\n\t\treturn nil\n\t}\n\n\treturn m.fd.Close()\n}\n\n// FD gets the file descriptor of the Map.\n//\n// Calling this function is invalid after Close has been called.\nfunc (m *Map) FD() int {\n\treturn m.fd.Int()\n}\n\n// Clone creates a duplicate of the Map.\n//\n// Closing the duplicate does not affect the original, and vice versa.\n// Changes made to the map are reflected by both instances however.\n// If the original map was pinned, the cloned map will not be pinned by default.\n//\n// Cloning a nil Map returns nil.\nfunc (m *Map) Clone() (*Map, error) {\n\tif m == nil {\n\t\treturn nil, nil\n\t}\n\n\tdup, err := m.fd.Dup()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't clone map: %w\", err)\n\t}\n\n\treturn &Map{\n\t\tm.name,\n\t\tdup,\n\t\tm.typ,\n\t\tm.keySize,\n\t\tm.valueSize,\n\t\tm.maxEntries,\n\t\tm.flags,\n\t\t\"\",\n\t\tm.fullValueSize,\n\t}, nil\n}\n\n// Pin persists the map on the BPF virtual file system past the lifetime of\n// the process that created it .\n//\n// Calling Pin on a previously pinned map will overwrite the path, except when\n// the new path already exists. Re-pinning across filesystems is not supported.\n// You can Clone a map to pin it to a different path.\n//\n// This requires bpffs to be mounted above fileName.\n// See https://docs.cilium.io/en/stable/network/kubernetes/configuration/#mounting-bpffs-with-systemd\nfunc (m *Map) Pin(fileName string) error {\n\tif err := internal.Pin(m.pinnedPath, fileName, m.fd); err != nil {\n\t\treturn err\n\t}\n\tm.pinnedPath = fileName\n\treturn nil\n}\n\n// Unpin removes the persisted state for the map from the BPF virtual filesystem.\n//\n// Failed calls to Unpin will not alter the state returned by IsPinned.\n//\n// Unpinning an unpinned Map returns nil.\nfunc (m *Map) Unpin() error {\n\tif err := internal.Unpin(m.pinnedPath); err != nil {\n\t\treturn err\n\t}\n\tm.pinnedPath = \"\"\n\treturn nil\n}\n\n// IsPinned returns true if the map has a non-empty pinned path.\nfunc (m *Map) IsPinned() bool {\n\treturn m.pinnedPath != \"\"\n}\n\n// Freeze prevents a map to be modified from user space.\n//\n// It makes no changes to kernel-side restrictions.\nfunc (m *Map) Freeze() error {\n\tif err := haveMapMutabilityModifiers(); err != nil {\n\t\treturn fmt.Errorf(\"can't freeze map: %w\", err)\n\t}\n\n\tattr := sys.MapFreezeAttr{\n\t\tMapFd: m.fd.Uint(),\n\t}\n\n\tif err := sys.MapFreeze(&attr); err != nil {\n\t\treturn fmt.Errorf(\"can't freeze map: %w\", err)\n\t}\n\treturn nil\n}\n\n// finalize populates the Map according to the Contents specified\n// in spec and freezes the Map if requested by spec.\nfunc (m *Map) finalize(spec *MapSpec) error {\n\tfor _, kv := range spec.Contents {\n\t\tif err := m.Put(kv.Key, kv.Value); err != nil {\n\t\t\treturn fmt.Errorf(\"putting value: key %v: %w\", kv.Key, err)\n\t\t}\n\t}\n\n\tif spec.Freeze {\n\t\tif err := m.Freeze(); err != nil {\n\t\t\treturn fmt.Errorf(\"freezing map: %w\", err)\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (m *Map) marshalKey(data interface{}) (sys.Pointer, error) {\n\tif data == nil {\n\t\tif m.keySize == 0 {\n\t\t\t// Queues have a key length of zero, so passing nil here is valid.\n\t\t\treturn sys.NewPointer(nil), nil\n\t\t}\n\t\treturn sys.Pointer{}, errors.New(\"can't use nil as key of map\")\n\t}\n\n\treturn marshalPtr(data, int(m.keySize))\n}\n\nfunc (m *Map) unmarshalKey(data interface{}, buf []byte) error {\n\tif buf == nil {\n\t\t// This is from a makeBuffer call, nothing do do here.\n\t\treturn nil\n\t}\n\n\treturn unmarshalBytes(data, buf)\n}\n\nfunc (m *Map) marshalValue(data interface{}) (sys.Pointer, error) {\n\tvar (\n\t\tbuf []byte\n\t\terr error\n\t)\n\n\tswitch value := data.(type) {\n\tcase *Map:\n\t\tif !m.typ.canStoreMap() {\n\t\t\treturn sys.Pointer{}, fmt.Errorf(\"can't store map in %s\", m.typ)\n\t\t}\n\t\tbuf, err = marshalMap(value, int(m.valueSize))\n\n\tcase *Program:\n\t\tif !m.typ.canStoreProgram() {\n\t\t\treturn sys.Pointer{}, fmt.Errorf(\"can't store program in %s\", m.typ)\n\t\t}\n\t\tbuf, err = marshalProgram(value, int(m.valueSize))\n\n\tdefault:\n\t\treturn marshalPtr(data, int(m.valueSize))\n\t}\n\n\tif err != nil {\n\t\treturn sys.Pointer{}, err\n\t}\n\n\treturn sys.NewSlicePointer(buf), nil\n}\n\nfunc (m *Map) unmarshalValue(value interface{}, buf []byte) error {\n\tif buf == nil {\n\t\t// This is from a makeBuffer call, nothing do do here.\n\t\treturn nil\n\t}\n\n\tif m.typ.hasPerCPUValue() {\n\t\treturn unmarshalPerCPUValue(value, int(m.valueSize), buf)\n\t}\n\n\tswitch value := value.(type) {\n\tcase **Map:\n\t\tif !m.typ.canStoreMap() {\n\t\t\treturn fmt.Errorf(\"can't read a map from %s\", m.typ)\n\t\t}\n\n\t\tother, err := unmarshalMap(buf)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// The caller might close the map externally, so ignore errors.\n\t\t_ = (*value).Close()\n\n\t\t*value = other\n\t\treturn nil\n\n\tcase *Map:\n\t\tif !m.typ.canStoreMap() {\n\t\t\treturn fmt.Errorf(\"can't read a map from %s\", m.typ)\n\t\t}\n\t\treturn errors.New(\"require pointer to *Map\")\n\n\tcase **Program:\n\t\tif !m.typ.canStoreProgram() {\n\t\t\treturn fmt.Errorf(\"can't read a program from %s\", m.typ)\n\t\t}\n\n\t\tother, err := unmarshalProgram(buf)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t// The caller might close the program externally, so ignore errors.\n\t\t_ = (*value).Close()\n\n\t\t*value = other\n\t\treturn nil\n\n\tcase *Program:\n\t\tif !m.typ.canStoreProgram() {\n\t\t\treturn fmt.Errorf(\"can't read a program from %s\", m.typ)\n\t\t}\n\t\treturn errors.New(\"require pointer to *Program\")\n\t}\n\n\treturn unmarshalBytes(value, buf)\n}\n\n// LoadPinnedMap loads a Map from a BPF file.\nfunc LoadPinnedMap(fileName string, opts *LoadPinOptions) (*Map, error) {\n\tfd, err := sys.ObjGet(&sys.ObjGetAttr{\n\t\tPathname:  sys.NewStringPointer(fileName),\n\t\tFileFlags: opts.Marshal(),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tm, err := newMapFromFD(fd)\n\tif err == nil {\n\t\tm.pinnedPath = fileName\n\t}\n\n\treturn m, err\n}\n\n// unmarshalMap creates a map from a map ID encoded in host endianness.\nfunc unmarshalMap(buf []byte) (*Map, error) {\n\tif len(buf) != 4 {\n\t\treturn nil, errors.New(\"map id requires 4 byte value\")\n\t}\n\n\tid := internal.NativeEndian.Uint32(buf)\n\treturn NewMapFromID(MapID(id))\n}\n\n// marshalMap marshals the fd of a map into a buffer in host endianness.\nfunc marshalMap(m *Map, length int) ([]byte, error) {\n\tif length != 4 {\n\t\treturn nil, fmt.Errorf(\"can't marshal map to %d bytes\", length)\n\t}\n\n\tbuf := make([]byte, 4)\n\tinternal.NativeEndian.PutUint32(buf, m.fd.Uint())\n\treturn buf, nil\n}\n\n// MapIterator iterates a Map.\n//\n// See Map.Iterate.\ntype MapIterator struct {\n\ttarget            *Map\n\tcurKey            []byte\n\tcount, maxEntries uint32\n\tdone              bool\n\terr               error\n}\n\nfunc newMapIterator(target *Map) *MapIterator {\n\treturn &MapIterator{\n\t\ttarget:     target,\n\t\tmaxEntries: target.maxEntries,\n\t}\n}\n\n// Next decodes the next key and value.\n//\n// Iterating a hash map from which keys are being deleted is not\n// safe. You may see the same key multiple times. Iteration may\n// also abort with an error, see IsIterationAborted.\n//\n// Returns false if there are no more entries. You must check\n// the result of Err afterwards.\n//\n// See Map.Get for further caveats around valueOut.\nfunc (mi *MapIterator) Next(keyOut, valueOut interface{}) bool {\n\tif mi.err != nil || mi.done {\n\t\treturn false\n\t}\n\n\t// For array-like maps NextKeyBytes returns nil only on after maxEntries\n\t// iterations.\n\tfor mi.count <= mi.maxEntries {\n\t\tvar nextKey []byte\n\t\tif mi.curKey == nil {\n\t\t\t// Pass nil interface to NextKeyBytes to make sure the Map's first key\n\t\t\t// is returned. If we pass an uninitialized []byte instead, it'll see a\n\t\t\t// non-nil interface and try to marshal it.\n\t\t\tnextKey, mi.err = mi.target.NextKeyBytes(nil)\n\n\t\t\tmi.curKey = make([]byte, mi.target.keySize)\n\t\t} else {\n\t\t\tnextKey, mi.err = mi.target.NextKeyBytes(mi.curKey)\n\t\t}\n\t\tif mi.err != nil {\n\t\t\tmi.err = fmt.Errorf(\"get next key: %w\", mi.err)\n\t\t\treturn false\n\t\t}\n\n\t\tif nextKey == nil {\n\t\t\tmi.done = true\n\t\t\treturn false\n\t\t}\n\n\t\t// The user can get access to nextKey since unmarshalBytes\n\t\t// does not copy when unmarshaling into a []byte.\n\t\t// Make a copy to prevent accidental corruption of\n\t\t// iterator state.\n\t\tcopy(mi.curKey, nextKey)\n\n\t\tmi.count++\n\t\tmi.err = mi.target.Lookup(nextKey, valueOut)\n\t\tif errors.Is(mi.err, ErrKeyNotExist) {\n\t\t\t// Even though the key should be valid, we couldn't look up\n\t\t\t// its value. If we're iterating a hash map this is probably\n\t\t\t// because a concurrent delete removed the value before we\n\t\t\t// could get it. This means that the next call to NextKeyBytes\n\t\t\t// is very likely to restart iteration.\n\t\t\t// If we're iterating one of the fd maps like\n\t\t\t// ProgramArray it means that a given slot doesn't have\n\t\t\t// a valid fd associated. It's OK to continue to the next slot.\n\t\t\tcontinue\n\t\t}\n\t\tif mi.err != nil {\n\t\t\tmi.err = fmt.Errorf(\"look up next key: %w\", mi.err)\n\t\t\treturn false\n\t\t}\n\n\t\tmi.err = mi.target.unmarshalKey(keyOut, nextKey)\n\t\treturn mi.err == nil\n\t}\n\n\tmi.err = fmt.Errorf(\"%w\", ErrIterationAborted)\n\treturn false\n}\n\n// Err returns any encountered error.\n//\n// The method must be called after Next returns nil.\n//\n// Returns ErrIterationAborted if it wasn't possible to do a full iteration.\nfunc (mi *MapIterator) Err() error {\n\treturn mi.err\n}\n\n// MapGetNextID returns the ID of the next eBPF map.\n//\n// Returns ErrNotExist, if there is no next eBPF map.\nfunc MapGetNextID(startID MapID) (MapID, error) {\n\tattr := &sys.MapGetNextIdAttr{Id: uint32(startID)}\n\treturn MapID(attr.NextId), sys.MapGetNextId(attr)\n}\n\n// NewMapFromID returns the map for a given id.\n//\n// Returns ErrNotExist, if there is no eBPF map with the given id.\nfunc NewMapFromID(id MapID) (*Map, error) {\n\tfd, err := sys.MapGetFdById(&sys.MapGetFdByIdAttr{\n\t\tId: uint32(id),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn newMapFromFD(fd)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/marshalers.go",
    "content": "package ebpf\n\nimport (\n\t\"bytes\"\n\t\"encoding\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"runtime\"\n\t\"sync\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n)\n\n// marshalPtr converts an arbitrary value into a pointer suitable\n// to be passed to the kernel.\n//\n// As an optimization, it returns the original value if it is an\n// unsafe.Pointer.\nfunc marshalPtr(data interface{}, length int) (sys.Pointer, error) {\n\tif ptr, ok := data.(unsafe.Pointer); ok {\n\t\treturn sys.NewPointer(ptr), nil\n\t}\n\n\tbuf, err := marshalBytes(data, length)\n\tif err != nil {\n\t\treturn sys.Pointer{}, err\n\t}\n\n\treturn sys.NewSlicePointer(buf), nil\n}\n\n// marshalBytes converts an arbitrary value into a byte buffer.\n//\n// Prefer using Map.marshalKey and Map.marshalValue if possible, since\n// those have special cases that allow more types to be encoded.\n//\n// Returns an error if the given value isn't representable in exactly\n// length bytes.\nfunc marshalBytes(data interface{}, length int) (buf []byte, err error) {\n\tif data == nil {\n\t\treturn nil, errors.New(\"can't marshal a nil value\")\n\t}\n\n\tswitch value := data.(type) {\n\tcase encoding.BinaryMarshaler:\n\t\tbuf, err = value.MarshalBinary()\n\tcase string:\n\t\tbuf = []byte(value)\n\tcase []byte:\n\t\tbuf = value\n\tcase unsafe.Pointer:\n\t\terr = errors.New(\"can't marshal from unsafe.Pointer\")\n\tcase Map, *Map, Program, *Program:\n\t\terr = fmt.Errorf(\"can't marshal %T\", value)\n\tdefault:\n\t\twr := internal.NewBuffer(make([]byte, 0, length))\n\t\tdefer internal.PutBuffer(wr)\n\n\t\terr = binary.Write(wr, internal.NativeEndian, value)\n\t\tif err != nil {\n\t\t\terr = fmt.Errorf(\"encoding %T: %v\", value, err)\n\t\t}\n\t\tbuf = wr.Bytes()\n\t}\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(buf) != length {\n\t\treturn nil, fmt.Errorf(\"%T doesn't marshal to %d bytes\", data, length)\n\t}\n\treturn buf, nil\n}\n\nfunc makeBuffer(dst interface{}, length int) (sys.Pointer, []byte) {\n\tif ptr, ok := dst.(unsafe.Pointer); ok {\n\t\treturn sys.NewPointer(ptr), nil\n\t}\n\n\tbuf := make([]byte, length)\n\treturn sys.NewSlicePointer(buf), buf\n}\n\nvar bytesReaderPool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn new(bytes.Reader)\n\t},\n}\n\n// unmarshalBytes converts a byte buffer into an arbitrary value.\n//\n// Prefer using Map.unmarshalKey and Map.unmarshalValue if possible, since\n// those have special cases that allow more types to be encoded.\n//\n// The common int32 and int64 types are directly handled to avoid\n// unnecessary heap allocations as happening in the default case.\nfunc unmarshalBytes(data interface{}, buf []byte) error {\n\tswitch value := data.(type) {\n\tcase unsafe.Pointer:\n\t\tdst := unsafe.Slice((*byte)(value), len(buf))\n\t\tcopy(dst, buf)\n\t\truntime.KeepAlive(value)\n\t\treturn nil\n\tcase Map, *Map, Program, *Program:\n\t\treturn fmt.Errorf(\"can't unmarshal into %T\", value)\n\tcase encoding.BinaryUnmarshaler:\n\t\treturn value.UnmarshalBinary(buf)\n\tcase *string:\n\t\t*value = string(buf)\n\t\treturn nil\n\tcase *[]byte:\n\t\t*value = buf\n\t\treturn nil\n\tcase *int32:\n\t\tif len(buf) < 4 {\n\t\t\treturn errors.New(\"int32 requires 4 bytes\")\n\t\t}\n\t\t*value = int32(internal.NativeEndian.Uint32(buf))\n\t\treturn nil\n\tcase *uint32:\n\t\tif len(buf) < 4 {\n\t\t\treturn errors.New(\"uint32 requires 4 bytes\")\n\t\t}\n\t\t*value = internal.NativeEndian.Uint32(buf)\n\t\treturn nil\n\tcase *int64:\n\t\tif len(buf) < 8 {\n\t\t\treturn errors.New(\"int64 requires 8 bytes\")\n\t\t}\n\t\t*value = int64(internal.NativeEndian.Uint64(buf))\n\t\treturn nil\n\tcase *uint64:\n\t\tif len(buf) < 8 {\n\t\t\treturn errors.New(\"uint64 requires 8 bytes\")\n\t\t}\n\t\t*value = internal.NativeEndian.Uint64(buf)\n\t\treturn nil\n\tcase string:\n\t\treturn errors.New(\"require pointer to string\")\n\tcase []byte:\n\t\treturn errors.New(\"require pointer to []byte\")\n\tdefault:\n\t\trd := bytesReaderPool.Get().(*bytes.Reader)\n\t\trd.Reset(buf)\n\t\tdefer bytesReaderPool.Put(rd)\n\t\tif err := binary.Read(rd, internal.NativeEndian, value); err != nil {\n\t\t\treturn fmt.Errorf(\"decoding %T: %v\", value, err)\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// marshalPerCPUValue encodes a slice containing one value per\n// possible CPU into a buffer of bytes.\n//\n// Values are initialized to zero if the slice has less elements than CPUs.\n//\n// slice must have a type like []elementType.\nfunc marshalPerCPUValue(slice interface{}, elemLength int) (sys.Pointer, error) {\n\tsliceType := reflect.TypeOf(slice)\n\tif sliceType.Kind() != reflect.Slice {\n\t\treturn sys.Pointer{}, errors.New(\"per-CPU value requires slice\")\n\t}\n\n\tpossibleCPUs, err := internal.PossibleCPUs()\n\tif err != nil {\n\t\treturn sys.Pointer{}, err\n\t}\n\n\tsliceValue := reflect.ValueOf(slice)\n\tsliceLen := sliceValue.Len()\n\tif sliceLen > possibleCPUs {\n\t\treturn sys.Pointer{}, fmt.Errorf(\"per-CPU value exceeds number of CPUs\")\n\t}\n\n\talignedElemLength := internal.Align(elemLength, 8)\n\tbuf := make([]byte, alignedElemLength*possibleCPUs)\n\n\tfor i := 0; i < sliceLen; i++ {\n\t\telem := sliceValue.Index(i).Interface()\n\t\telemBytes, err := marshalBytes(elem, elemLength)\n\t\tif err != nil {\n\t\t\treturn sys.Pointer{}, err\n\t\t}\n\n\t\toffset := i * alignedElemLength\n\t\tcopy(buf[offset:offset+elemLength], elemBytes)\n\t}\n\n\treturn sys.NewSlicePointer(buf), nil\n}\n\n// unmarshalPerCPUValue decodes a buffer into a slice containing one value per\n// possible CPU.\n//\n// valueOut must have a type like *[]elementType\nfunc unmarshalPerCPUValue(slicePtr interface{}, elemLength int, buf []byte) error {\n\tslicePtrType := reflect.TypeOf(slicePtr)\n\tif slicePtrType.Kind() != reflect.Ptr || slicePtrType.Elem().Kind() != reflect.Slice {\n\t\treturn fmt.Errorf(\"per-cpu value requires pointer to slice\")\n\t}\n\n\tpossibleCPUs, err := internal.PossibleCPUs()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tsliceType := slicePtrType.Elem()\n\tslice := reflect.MakeSlice(sliceType, possibleCPUs, possibleCPUs)\n\n\tsliceElemType := sliceType.Elem()\n\tsliceElemIsPointer := sliceElemType.Kind() == reflect.Ptr\n\tif sliceElemIsPointer {\n\t\tsliceElemType = sliceElemType.Elem()\n\t}\n\n\tstep := len(buf) / possibleCPUs\n\tif step < elemLength {\n\t\treturn fmt.Errorf(\"per-cpu element length is larger than available data\")\n\t}\n\tfor i := 0; i < possibleCPUs; i++ {\n\t\tvar elem interface{}\n\t\tif sliceElemIsPointer {\n\t\t\tnewElem := reflect.New(sliceElemType)\n\t\t\tslice.Index(i).Set(newElem)\n\t\t\telem = newElem.Interface()\n\t\t} else {\n\t\t\telem = slice.Index(i).Addr().Interface()\n\t\t}\n\n\t\t// Make a copy, since unmarshal can hold on to itemBytes\n\t\telemBytes := make([]byte, elemLength)\n\t\tcopy(elemBytes, buf[:elemLength])\n\n\t\terr := unmarshalBytes(elem, elemBytes)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"cpu %d: %w\", i, err)\n\t\t}\n\n\t\tbuf = buf[step:]\n\t}\n\n\treflect.ValueOf(slicePtr).Elem().Set(slice)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/prog.go",
    "content": "package ebpf\n\nimport (\n\t\"bytes\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/btf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n// ErrNotSupported is returned whenever the kernel doesn't support a feature.\nvar ErrNotSupported = internal.ErrNotSupported\n\n// ProgramID represents the unique ID of an eBPF program.\ntype ProgramID uint32\n\nconst (\n\t// Number of bytes to pad the output buffer for BPF_PROG_TEST_RUN.\n\t// This is currently the maximum of spare space allocated for SKB\n\t// and XDP programs, and equal to XDP_PACKET_HEADROOM + NET_IP_ALIGN.\n\toutputPad = 256 + 2\n)\n\n// DefaultVerifierLogSize is the default number of bytes allocated for the\n// verifier log.\nconst DefaultVerifierLogSize = 64 * 1024\n\n// maxVerifierLogSize is the maximum size of verifier log buffer the kernel\n// will accept before returning EINVAL.\nconst maxVerifierLogSize = math.MaxUint32 >> 2\n\n// ProgramOptions control loading a program into the kernel.\ntype ProgramOptions struct {\n\t// Bitmap controlling the detail emitted by the kernel's eBPF verifier log.\n\t// LogLevel-type values can be ORed together to request specific kinds of\n\t// verifier output. See the documentation on [ebpf.LogLevel] for details.\n\t//\n\t//  opts.LogLevel = (ebpf.LogLevelBranch | ebpf.LogLevelStats)\n\t//\n\t// If left to its default value, the program will first be loaded without\n\t// verifier output enabled. Upon error, the program load will be repeated\n\t// with LogLevelBranch and the given (or default) LogSize value.\n\t//\n\t// Setting this to a non-zero value will unconditionally enable the verifier\n\t// log, populating the [ebpf.Program.VerifierLog] field on successful loads\n\t// and including detailed verifier errors if the program is rejected. This\n\t// will always allocate an output buffer, but will result in only a single\n\t// attempt at loading the program.\n\tLogLevel LogLevel\n\n\t// Controls the output buffer size for the verifier log, in bytes. See the\n\t// documentation on ProgramOptions.LogLevel for details about how this value\n\t// is used.\n\t//\n\t// If this value is set too low to fit the verifier log, the resulting\n\t// [ebpf.VerifierError]'s Truncated flag will be true, and the error string\n\t// will also contain a hint to that effect.\n\t//\n\t// Defaults to DefaultVerifierLogSize.\n\tLogSize int\n\n\t// Disables the verifier log completely, regardless of other options.\n\tLogDisabled bool\n\n\t// Type information used for CO-RE relocations.\n\t//\n\t// This is useful in environments where the kernel BTF is not available\n\t// (containers) or where it is in a non-standard location. Defaults to\n\t// use the kernel BTF from a well-known location if nil.\n\tKernelTypes *btf.Spec\n}\n\n// ProgramSpec defines a Program.\ntype ProgramSpec struct {\n\t// Name is passed to the kernel as a debug aid. Must only contain\n\t// alpha numeric and '_' characters.\n\tName string\n\n\t// Type determines at which hook in the kernel a program will run.\n\tType ProgramType\n\n\t// AttachType of the program, needed to differentiate allowed context\n\t// accesses in some newer program types like CGroupSockAddr.\n\t//\n\t// Available on kernels 4.17 and later.\n\tAttachType AttachType\n\n\t// Name of a kernel data structure or function to attach to. Its\n\t// interpretation depends on Type and AttachType.\n\tAttachTo string\n\n\t// The program to attach to. Must be provided manually.\n\tAttachTarget *Program\n\n\t// The name of the ELF section this program originated from.\n\tSectionName string\n\n\tInstructions asm.Instructions\n\n\t// Flags is passed to the kernel and specifies additional program\n\t// load attributes.\n\tFlags uint32\n\n\t// License of the program. Some helpers are only available if\n\t// the license is deemed compatible with the GPL.\n\t//\n\t// See https://www.kernel.org/doc/html/latest/process/license-rules.html#id1\n\tLicense string\n\n\t// Version used by Kprobe programs.\n\t//\n\t// Deprecated on kernels 5.0 and later. Leave empty to let the library\n\t// detect this value automatically.\n\tKernelVersion uint32\n\n\t// The byte order this program was compiled for, may be nil.\n\tByteOrder binary.ByteOrder\n}\n\n// Copy returns a copy of the spec.\nfunc (ps *ProgramSpec) Copy() *ProgramSpec {\n\tif ps == nil {\n\t\treturn nil\n\t}\n\n\tcpy := *ps\n\tcpy.Instructions = make(asm.Instructions, len(ps.Instructions))\n\tcopy(cpy.Instructions, ps.Instructions)\n\treturn &cpy\n}\n\n// Tag calculates the kernel tag for a series of instructions.\n//\n// Use asm.Instructions.Tag if you need to calculate for non-native endianness.\nfunc (ps *ProgramSpec) Tag() (string, error) {\n\treturn ps.Instructions.Tag(internal.NativeEndian)\n}\n\n// VerifierError is returned by [NewProgram] and [NewProgramWithOptions] if a\n// program is rejected by the verifier.\n//\n// Use [errors.As] to access the error.\ntype VerifierError = internal.VerifierError\n\n// Program represents BPF program loaded into the kernel.\n//\n// It is not safe to close a Program which is used by other goroutines.\ntype Program struct {\n\t// Contains the output of the kernel verifier if enabled,\n\t// otherwise it is empty.\n\tVerifierLog string\n\n\tfd         *sys.FD\n\tname       string\n\tpinnedPath string\n\ttyp        ProgramType\n}\n\n// NewProgram creates a new Program.\n//\n// See [NewProgramWithOptions] for details.\n//\n// Returns a [VerifierError] containing the full verifier log if the program is\n// rejected by the kernel.\nfunc NewProgram(spec *ProgramSpec) (*Program, error) {\n\treturn NewProgramWithOptions(spec, ProgramOptions{})\n}\n\n// NewProgramWithOptions creates a new Program.\n//\n// Loading a program for the first time will perform\n// feature detection by loading small, temporary programs.\n//\n// Returns a [VerifierError] containing the full verifier log if the program is\n// rejected by the kernel.\nfunc NewProgramWithOptions(spec *ProgramSpec, opts ProgramOptions) (*Program, error) {\n\tif spec == nil {\n\t\treturn nil, errors.New(\"can't load a program from a nil spec\")\n\t}\n\n\tprog, err := newProgramWithOptions(spec, opts)\n\tif errors.Is(err, asm.ErrUnsatisfiedMapReference) {\n\t\treturn nil, fmt.Errorf(\"cannot load program without loading its whole collection: %w\", err)\n\t}\n\treturn prog, err\n}\n\nfunc newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions) (*Program, error) {\n\tif len(spec.Instructions) == 0 {\n\t\treturn nil, errors.New(\"instructions cannot be empty\")\n\t}\n\n\tif spec.Type == UnspecifiedProgram {\n\t\treturn nil, errors.New(\"can't load program of unspecified type\")\n\t}\n\n\tif spec.ByteOrder != nil && spec.ByteOrder != internal.NativeEndian {\n\t\treturn nil, fmt.Errorf(\"can't load %s program on %s\", spec.ByteOrder, internal.NativeEndian)\n\t}\n\n\tif opts.LogSize < 0 {\n\t\treturn nil, errors.New(\"ProgramOptions.LogSize must be a positive value; disable verifier logs using ProgramOptions.LogDisabled\")\n\t}\n\n\t// Kernels before 5.0 (6c4fc209fcf9 \"bpf: remove useless version check for prog load\")\n\t// require the version field to be set to the value of the KERNEL_VERSION\n\t// macro for kprobe-type programs.\n\t// Overwrite Kprobe program version if set to zero or the magic version constant.\n\tkv := spec.KernelVersion\n\tif spec.Type == Kprobe && (kv == 0 || kv == internal.MagicKernelVersion) {\n\t\tv, err := internal.KernelVersion()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"detecting kernel version: %w\", err)\n\t\t}\n\t\tkv = v.Kernel()\n\t}\n\n\tattr := &sys.ProgLoadAttr{\n\t\tProgType:           sys.ProgType(spec.Type),\n\t\tProgFlags:          spec.Flags,\n\t\tExpectedAttachType: sys.AttachType(spec.AttachType),\n\t\tLicense:            sys.NewStringPointer(spec.License),\n\t\tKernVersion:        kv,\n\t}\n\n\tif haveObjName() == nil {\n\t\tattr.ProgName = sys.NewObjName(spec.Name)\n\t}\n\n\tinsns := make(asm.Instructions, len(spec.Instructions))\n\tcopy(insns, spec.Instructions)\n\n\thandle, fib, lib, err := btf.MarshalExtInfos(insns)\n\tif err != nil && !errors.Is(err, btf.ErrNotSupported) {\n\t\treturn nil, fmt.Errorf(\"load ext_infos: %w\", err)\n\t}\n\tif handle != nil {\n\t\tdefer handle.Close()\n\n\t\tattr.ProgBtfFd = uint32(handle.FD())\n\n\t\tattr.FuncInfoRecSize = btf.FuncInfoSize\n\t\tattr.FuncInfoCnt = uint32(len(fib)) / btf.FuncInfoSize\n\t\tattr.FuncInfo = sys.NewSlicePointer(fib)\n\n\t\tattr.LineInfoRecSize = btf.LineInfoSize\n\t\tattr.LineInfoCnt = uint32(len(lib)) / btf.LineInfoSize\n\t\tattr.LineInfo = sys.NewSlicePointer(lib)\n\t}\n\n\tif err := applyRelocations(insns, opts.KernelTypes, spec.ByteOrder); err != nil {\n\t\treturn nil, fmt.Errorf(\"apply CO-RE relocations: %w\", err)\n\t}\n\n\tkconfig, err := resolveKconfigReferences(insns)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"resolve .kconfig: %w\", err)\n\t}\n\tdefer kconfig.Close()\n\n\tif err := fixupAndValidate(insns); err != nil {\n\t\treturn nil, err\n\t}\n\n\thandles, err := fixupKfuncs(insns)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"fixing up kfuncs: %w\", err)\n\t}\n\tdefer handles.close()\n\n\tif len(handles) > 0 {\n\t\tfdArray := handles.fdArray()\n\t\tattr.FdArray = sys.NewPointer(unsafe.Pointer(&fdArray[0]))\n\t}\n\n\tbuf := bytes.NewBuffer(make([]byte, 0, insns.Size()))\n\terr = insns.Marshal(buf, internal.NativeEndian)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tbytecode := buf.Bytes()\n\tattr.Insns = sys.NewSlicePointer(bytecode)\n\tattr.InsnCnt = uint32(len(bytecode) / asm.InstructionSize)\n\n\tif spec.AttachTarget != nil {\n\t\ttargetID, err := findTargetInProgram(spec.AttachTarget, spec.AttachTo, spec.Type, spec.AttachType)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"attach %s/%s: %w\", spec.Type, spec.AttachType, err)\n\t\t}\n\n\t\tattr.AttachBtfId = targetID\n\t\tattr.AttachBtfObjFd = uint32(spec.AttachTarget.FD())\n\t\tdefer runtime.KeepAlive(spec.AttachTarget)\n\t} else if spec.AttachTo != \"\" {\n\t\tmodule, targetID, err := findProgramTargetInKernel(spec.AttachTo, spec.Type, spec.AttachType)\n\t\tif err != nil && !errors.Is(err, errUnrecognizedAttachType) {\n\t\t\t// We ignore errUnrecognizedAttachType since AttachTo may be non-empty\n\t\t\t// for programs that don't attach anywhere.\n\t\t\treturn nil, fmt.Errorf(\"attach %s/%s: %w\", spec.Type, spec.AttachType, err)\n\t\t}\n\n\t\tattr.AttachBtfId = targetID\n\t\tif module != nil {\n\t\t\tattr.AttachBtfObjFd = uint32(module.FD())\n\t\t\tdefer module.Close()\n\t\t}\n\t}\n\n\tif opts.LogSize == 0 {\n\t\topts.LogSize = DefaultVerifierLogSize\n\t}\n\n\t// The caller requested a specific verifier log level. Set up the log buffer.\n\tvar logBuf []byte\n\tif !opts.LogDisabled && opts.LogLevel != 0 {\n\t\tlogBuf = make([]byte, opts.LogSize)\n\t\tattr.LogLevel = opts.LogLevel\n\t\tattr.LogSize = uint32(len(logBuf))\n\t\tattr.LogBuf = sys.NewSlicePointer(logBuf)\n\t}\n\n\tfd, err := sys.ProgLoad(attr)\n\tif err == nil {\n\t\treturn &Program{unix.ByteSliceToString(logBuf), fd, spec.Name, \"\", spec.Type}, nil\n\t}\n\n\t// An error occurred loading the program, but the caller did not explicitly\n\t// enable the verifier log. Re-run with branch-level verifier logs enabled to\n\t// obtain more info. Preserve the original error to return it to the caller.\n\t// An undersized log buffer will result in ENOSPC regardless of the underlying\n\t// cause.\n\tvar err2 error\n\tif !opts.LogDisabled && opts.LogLevel == 0 {\n\t\tlogBuf = make([]byte, opts.LogSize)\n\t\tattr.LogLevel = LogLevelBranch\n\t\tattr.LogSize = uint32(len(logBuf))\n\t\tattr.LogBuf = sys.NewSlicePointer(logBuf)\n\n\t\t_, err2 = sys.ProgLoad(attr)\n\t}\n\n\tswitch {\n\tcase errors.Is(err, unix.EPERM):\n\t\tif len(logBuf) > 0 && logBuf[0] == 0 {\n\t\t\t// EPERM due to RLIMIT_MEMLOCK happens before the verifier, so we can\n\t\t\t// check that the log is empty to reduce false positives.\n\t\t\treturn nil, fmt.Errorf(\"load program: %w (MEMLOCK may be too low, consider rlimit.RemoveMemlock)\", err)\n\t\t}\n\n\t\tfallthrough\n\n\tcase errors.Is(err, unix.EINVAL):\n\t\tif hasFunctionReferences(spec.Instructions) {\n\t\t\tif err := haveBPFToBPFCalls(); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"load program: %w\", err)\n\t\t\t}\n\t\t}\n\n\t\tif opts.LogSize > maxVerifierLogSize {\n\t\t\treturn nil, fmt.Errorf(\"load program: %w (ProgramOptions.LogSize exceeds maximum value of %d)\", err, maxVerifierLogSize)\n\t\t}\n\t}\n\n\ttruncated := errors.Is(err, unix.ENOSPC) || errors.Is(err2, unix.ENOSPC)\n\treturn nil, internal.ErrorWithLog(\"load program\", err, logBuf, truncated)\n}\n\n// NewProgramFromFD creates a program from a raw fd.\n//\n// You should not use fd after calling this function.\n//\n// Requires at least Linux 4.10.\nfunc NewProgramFromFD(fd int) (*Program, error) {\n\tf, err := sys.NewFD(fd)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn newProgramFromFD(f)\n}\n\n// NewProgramFromID returns the program for a given id.\n//\n// Returns ErrNotExist, if there is no eBPF program with the given id.\nfunc NewProgramFromID(id ProgramID) (*Program, error) {\n\tfd, err := sys.ProgGetFdById(&sys.ProgGetFdByIdAttr{\n\t\tId: uint32(id),\n\t})\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"get program by id: %w\", err)\n\t}\n\n\treturn newProgramFromFD(fd)\n}\n\nfunc newProgramFromFD(fd *sys.FD) (*Program, error) {\n\tinfo, err := newProgramInfoFromFd(fd)\n\tif err != nil {\n\t\tfd.Close()\n\t\treturn nil, fmt.Errorf(\"discover program type: %w\", err)\n\t}\n\n\treturn &Program{\"\", fd, info.Name, \"\", info.Type}, nil\n}\n\nfunc (p *Program) String() string {\n\tif p.name != \"\" {\n\t\treturn fmt.Sprintf(\"%s(%s)#%v\", p.typ, p.name, p.fd)\n\t}\n\treturn fmt.Sprintf(\"%s(%v)\", p.typ, p.fd)\n}\n\n// Type returns the underlying type of the program.\nfunc (p *Program) Type() ProgramType {\n\treturn p.typ\n}\n\n// Info returns metadata about the program.\n//\n// Requires at least 4.10.\nfunc (p *Program) Info() (*ProgramInfo, error) {\n\treturn newProgramInfoFromFd(p.fd)\n}\n\n// Handle returns a reference to the program's type information in the kernel.\n//\n// Returns ErrNotSupported if the kernel has no BTF support, or if there is no\n// BTF associated with the program.\nfunc (p *Program) Handle() (*btf.Handle, error) {\n\tinfo, err := p.Info()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tid, ok := info.BTFID()\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"program %s: retrieve BTF ID: %w\", p, ErrNotSupported)\n\t}\n\n\treturn btf.NewHandleFromID(id)\n}\n\n// FD gets the file descriptor of the Program.\n//\n// It is invalid to call this function after Close has been called.\nfunc (p *Program) FD() int {\n\treturn p.fd.Int()\n}\n\n// Clone creates a duplicate of the Program.\n//\n// Closing the duplicate does not affect the original, and vice versa.\n//\n// Cloning a nil Program returns nil.\nfunc (p *Program) Clone() (*Program, error) {\n\tif p == nil {\n\t\treturn nil, nil\n\t}\n\n\tdup, err := p.fd.Dup()\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't clone program: %w\", err)\n\t}\n\n\treturn &Program{p.VerifierLog, dup, p.name, \"\", p.typ}, nil\n}\n\n// Pin persists the Program on the BPF virtual file system past the lifetime of\n// the process that created it\n//\n// Calling Pin on a previously pinned program will overwrite the path, except when\n// the new path already exists. Re-pinning across filesystems is not supported.\n//\n// This requires bpffs to be mounted above fileName.\n// See https://docs.cilium.io/en/stable/network/kubernetes/configuration/#mounting-bpffs-with-systemd\nfunc (p *Program) Pin(fileName string) error {\n\tif err := internal.Pin(p.pinnedPath, fileName, p.fd); err != nil {\n\t\treturn err\n\t}\n\tp.pinnedPath = fileName\n\treturn nil\n}\n\n// Unpin removes the persisted state for the Program from the BPF virtual filesystem.\n//\n// Failed calls to Unpin will not alter the state returned by IsPinned.\n//\n// Unpinning an unpinned Program returns nil.\nfunc (p *Program) Unpin() error {\n\tif err := internal.Unpin(p.pinnedPath); err != nil {\n\t\treturn err\n\t}\n\tp.pinnedPath = \"\"\n\treturn nil\n}\n\n// IsPinned returns true if the Program has a non-empty pinned path.\nfunc (p *Program) IsPinned() bool {\n\treturn p.pinnedPath != \"\"\n}\n\n// Close the Program's underlying file descriptor, which could unload\n// the program from the kernel if it is not pinned or attached to a\n// kernel hook.\nfunc (p *Program) Close() error {\n\tif p == nil {\n\t\treturn nil\n\t}\n\n\treturn p.fd.Close()\n}\n\n// Various options for Run'ing a Program\ntype RunOptions struct {\n\t// Program's data input. Required field.\n\t//\n\t// The kernel expects at least 14 bytes input for an ethernet header for\n\t// XDP and SKB programs.\n\tData []byte\n\t// Program's data after Program has run. Caller must allocate. Optional field.\n\tDataOut []byte\n\t// Program's context input. Optional field.\n\tContext interface{}\n\t// Program's context after Program has run. Must be a pointer or slice. Optional field.\n\tContextOut interface{}\n\t// Minimum number of times to run Program. Optional field. Defaults to 1.\n\t//\n\t// The program may be executed more often than this due to interruptions, e.g.\n\t// when runtime.AllThreadsSyscall is invoked.\n\tRepeat uint32\n\t// Optional flags.\n\tFlags uint32\n\t// CPU to run Program on. Optional field.\n\t// Note not all program types support this field.\n\tCPU uint32\n\t// Called whenever the syscall is interrupted, and should be set to testing.B.ResetTimer\n\t// or similar. Typically used during benchmarking. Optional field.\n\t//\n\t// Deprecated: use [testing.B.ReportMetric] with unit \"ns/op\" instead.\n\tReset func()\n}\n\n// Test runs the Program in the kernel with the given input and returns the\n// value returned by the eBPF program. outLen may be zero.\n//\n// Note: the kernel expects at least 14 bytes input for an ethernet header for\n// XDP and SKB programs.\n//\n// This function requires at least Linux 4.12.\nfunc (p *Program) Test(in []byte) (uint32, []byte, error) {\n\t// Older kernels ignore the dataSizeOut argument when copying to user space.\n\t// Combined with things like bpf_xdp_adjust_head() we don't really know what the final\n\t// size will be. Hence we allocate an output buffer which we hope will always be large\n\t// enough, and panic if the kernel wrote past the end of the allocation.\n\t// See https://patchwork.ozlabs.org/cover/1006822/\n\tvar out []byte\n\tif len(in) > 0 {\n\t\tout = make([]byte, len(in)+outputPad)\n\t}\n\n\topts := RunOptions{\n\t\tData:    in,\n\t\tDataOut: out,\n\t\tRepeat:  1,\n\t}\n\n\tret, _, err := p.run(&opts)\n\tif err != nil {\n\t\treturn ret, nil, fmt.Errorf(\"test program: %w\", err)\n\t}\n\treturn ret, opts.DataOut, nil\n}\n\n// Run runs the Program in kernel with given RunOptions.\n//\n// Note: the same restrictions from Test apply.\nfunc (p *Program) Run(opts *RunOptions) (uint32, error) {\n\tret, _, err := p.run(opts)\n\tif err != nil {\n\t\treturn ret, fmt.Errorf(\"run program: %w\", err)\n\t}\n\treturn ret, nil\n}\n\n// Benchmark runs the Program with the given input for a number of times\n// and returns the time taken per iteration.\n//\n// Returns the result of the last execution of the program and the time per\n// run or an error. reset is called whenever the benchmark syscall is\n// interrupted, and should be set to testing.B.ResetTimer or similar.\n//\n// This function requires at least Linux 4.12.\nfunc (p *Program) Benchmark(in []byte, repeat int, reset func()) (uint32, time.Duration, error) {\n\tif uint(repeat) > math.MaxUint32 {\n\t\treturn 0, 0, fmt.Errorf(\"repeat is too high\")\n\t}\n\n\topts := RunOptions{\n\t\tData:   in,\n\t\tRepeat: uint32(repeat),\n\t\tReset:  reset,\n\t}\n\n\tret, total, err := p.run(&opts)\n\tif err != nil {\n\t\treturn ret, total, fmt.Errorf(\"benchmark program: %w\", err)\n\t}\n\treturn ret, total, nil\n}\n\nvar haveProgRun = internal.NewFeatureTest(\"BPF_PROG_RUN\", \"4.12\", func() error {\n\tprog, err := NewProgram(&ProgramSpec{\n\t\t// SocketFilter does not require privileges on newer kernels.\n\t\tType: SocketFilter,\n\t\tInstructions: asm.Instructions{\n\t\t\tasm.LoadImm(asm.R0, 0, asm.DWord),\n\t\t\tasm.Return(),\n\t\t},\n\t\tLicense: \"MIT\",\n\t})\n\tif err != nil {\n\t\t// This may be because we lack sufficient permissions, etc.\n\t\treturn err\n\t}\n\tdefer prog.Close()\n\n\tin := internal.EmptyBPFContext\n\tattr := sys.ProgRunAttr{\n\t\tProgFd:     uint32(prog.FD()),\n\t\tDataSizeIn: uint32(len(in)),\n\t\tDataIn:     sys.NewSlicePointer(in),\n\t}\n\n\terr = sys.ProgRun(&attr)\n\tswitch {\n\tcase errors.Is(err, unix.EINVAL):\n\t\t// Check for EINVAL specifically, rather than err != nil since we\n\t\t// otherwise misdetect due to insufficient permissions.\n\t\treturn internal.ErrNotSupported\n\n\tcase errors.Is(err, unix.EINTR):\n\t\t// We know that PROG_TEST_RUN is supported if we get EINTR.\n\t\treturn nil\n\n\tcase errors.Is(err, sys.ENOTSUPP):\n\t\t// The first PROG_TEST_RUN patches shipped in 4.12 didn't include\n\t\t// a test runner for SocketFilter. ENOTSUPP means PROG_TEST_RUN is\n\t\t// supported, but not for the program type used in the probe.\n\t\treturn nil\n\t}\n\n\treturn err\n})\n\nfunc (p *Program) run(opts *RunOptions) (uint32, time.Duration, error) {\n\tif uint(len(opts.Data)) > math.MaxUint32 {\n\t\treturn 0, 0, fmt.Errorf(\"input is too long\")\n\t}\n\n\tif err := haveProgRun(); err != nil {\n\t\treturn 0, 0, err\n\t}\n\n\tvar ctxBytes []byte\n\tif opts.Context != nil {\n\t\tctx := new(bytes.Buffer)\n\t\tif err := binary.Write(ctx, internal.NativeEndian, opts.Context); err != nil {\n\t\t\treturn 0, 0, fmt.Errorf(\"cannot serialize context: %v\", err)\n\t\t}\n\t\tctxBytes = ctx.Bytes()\n\t}\n\n\tvar ctxOut []byte\n\tif opts.ContextOut != nil {\n\t\tctxOut = make([]byte, binary.Size(opts.ContextOut))\n\t}\n\n\tattr := sys.ProgRunAttr{\n\t\tProgFd:      p.fd.Uint(),\n\t\tDataSizeIn:  uint32(len(opts.Data)),\n\t\tDataSizeOut: uint32(len(opts.DataOut)),\n\t\tDataIn:      sys.NewSlicePointer(opts.Data),\n\t\tDataOut:     sys.NewSlicePointer(opts.DataOut),\n\t\tRepeat:      uint32(opts.Repeat),\n\t\tCtxSizeIn:   uint32(len(ctxBytes)),\n\t\tCtxSizeOut:  uint32(len(ctxOut)),\n\t\tCtxIn:       sys.NewSlicePointer(ctxBytes),\n\t\tCtxOut:      sys.NewSlicePointer(ctxOut),\n\t\tFlags:       opts.Flags,\n\t\tCpu:         opts.CPU,\n\t}\n\n\tif attr.Repeat == 0 {\n\t\tattr.Repeat = 1\n\t}\n\nretry:\n\tfor {\n\t\terr := sys.ProgRun(&attr)\n\t\tif err == nil {\n\t\t\tbreak retry\n\t\t}\n\n\t\tif errors.Is(err, unix.EINTR) {\n\t\t\tif attr.Repeat == 1 {\n\t\t\t\t// Older kernels check whether enough repetitions have been\n\t\t\t\t// executed only after checking for pending signals.\n\t\t\t\t//\n\t\t\t\t//     run signal? done? run ...\n\t\t\t\t//\n\t\t\t\t// As a result we can get EINTR for repeat==1 even though\n\t\t\t\t// the program was run exactly once. Treat this as a\n\t\t\t\t// successful run instead.\n\t\t\t\t//\n\t\t\t\t// Since commit 607b9cc92bd7 (\"bpf: Consolidate shared test timing code\")\n\t\t\t\t// the conditions are reversed:\n\t\t\t\t//     run done? signal? ...\n\t\t\t\tbreak retry\n\t\t\t}\n\n\t\t\tif opts.Reset != nil {\n\t\t\t\topts.Reset()\n\t\t\t}\n\t\t\tcontinue retry\n\t\t}\n\n\t\tif errors.Is(err, sys.ENOTSUPP) {\n\t\t\treturn 0, 0, fmt.Errorf(\"kernel doesn't support running %s: %w\", p.Type(), ErrNotSupported)\n\t\t}\n\n\t\treturn 0, 0, err\n\t}\n\n\tif opts.DataOut != nil {\n\t\tif int(attr.DataSizeOut) > cap(opts.DataOut) {\n\t\t\t// Houston, we have a problem. The program created more data than we allocated,\n\t\t\t// and the kernel wrote past the end of our buffer.\n\t\t\tpanic(\"kernel wrote past end of output buffer\")\n\t\t}\n\t\topts.DataOut = opts.DataOut[:int(attr.DataSizeOut)]\n\t}\n\n\tif len(ctxOut) != 0 {\n\t\tb := bytes.NewReader(ctxOut)\n\t\tif err := binary.Read(b, internal.NativeEndian, opts.ContextOut); err != nil {\n\t\t\treturn 0, 0, fmt.Errorf(\"failed to decode ContextOut: %v\", err)\n\t\t}\n\t}\n\n\ttotal := time.Duration(attr.Duration) * time.Nanosecond\n\treturn attr.Retval, total, nil\n}\n\nfunc unmarshalProgram(buf []byte) (*Program, error) {\n\tif len(buf) != 4 {\n\t\treturn nil, errors.New(\"program id requires 4 byte value\")\n\t}\n\n\t// Looking up an entry in a nested map or prog array returns an id,\n\t// not an fd.\n\tid := internal.NativeEndian.Uint32(buf)\n\treturn NewProgramFromID(ProgramID(id))\n}\n\nfunc marshalProgram(p *Program, length int) ([]byte, error) {\n\tif length != 4 {\n\t\treturn nil, fmt.Errorf(\"can't marshal program to %d bytes\", length)\n\t}\n\n\tbuf := make([]byte, 4)\n\tinternal.NativeEndian.PutUint32(buf, p.fd.Uint())\n\treturn buf, nil\n}\n\n// LoadPinnedProgram loads a Program from a BPF file.\n//\n// Requires at least Linux 4.11.\nfunc LoadPinnedProgram(fileName string, opts *LoadPinOptions) (*Program, error) {\n\tfd, err := sys.ObjGet(&sys.ObjGetAttr{\n\t\tPathname:  sys.NewStringPointer(fileName),\n\t\tFileFlags: opts.Marshal(),\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tinfo, err := newProgramInfoFromFd(fd)\n\tif err != nil {\n\t\t_ = fd.Close()\n\t\treturn nil, fmt.Errorf(\"info for %s: %w\", fileName, err)\n\t}\n\n\tvar progName string\n\tif haveObjName() == nil {\n\t\tprogName = info.Name\n\t} else {\n\t\tprogName = filepath.Base(fileName)\n\t}\n\n\treturn &Program{\"\", fd, progName, fileName, info.Type}, nil\n}\n\n// SanitizeName replaces all invalid characters in name with replacement.\n// Passing a negative value for replacement will delete characters instead\n// of replacing them. Use this to automatically generate valid names for maps\n// and programs at runtime.\n//\n// The set of allowed characters depends on the running kernel version.\n// Dots are only allowed as of kernel 5.2.\nfunc SanitizeName(name string, replacement rune) string {\n\treturn strings.Map(func(char rune) rune {\n\t\tif invalidBPFObjNameChar(char) {\n\t\t\treturn replacement\n\t\t}\n\t\treturn char\n\t}, name)\n}\n\n// ProgramGetNextID returns the ID of the next eBPF program.\n//\n// Returns ErrNotExist, if there is no next eBPF program.\nfunc ProgramGetNextID(startID ProgramID) (ProgramID, error) {\n\tattr := &sys.ProgGetNextIdAttr{Id: uint32(startID)}\n\treturn ProgramID(attr.NextId), sys.ProgGetNextId(attr)\n}\n\n// BindMap binds map to the program and is only released once program is released.\n//\n// This may be used in cases where metadata should be associated with the program\n// which otherwise does not contain any references to the map.\nfunc (p *Program) BindMap(m *Map) error {\n\tattr := &sys.ProgBindMapAttr{\n\t\tProgFd: uint32(p.FD()),\n\t\tMapFd:  uint32(m.FD()),\n\t}\n\n\treturn sys.ProgBindMap(attr)\n}\n\nvar errUnrecognizedAttachType = errors.New(\"unrecognized attach type\")\n\n// find an attach target type in the kernel.\n//\n// name, progType and attachType determine which type we need to attach to.\n//\n// The attach target may be in a loaded kernel module.\n// In that case the returned handle will be non-nil.\n// The caller is responsible for closing the handle.\n//\n// Returns errUnrecognizedAttachType if the combination of progType and attachType\n// is not recognised.\nfunc findProgramTargetInKernel(name string, progType ProgramType, attachType AttachType) (*btf.Handle, btf.TypeID, error) {\n\ttype match struct {\n\t\tp ProgramType\n\t\ta AttachType\n\t}\n\n\tvar (\n\t\ttypeName, featureName string\n\t\ttarget                btf.Type\n\t)\n\n\tswitch (match{progType, attachType}) {\n\tcase match{LSM, AttachLSMMac}:\n\t\ttypeName = \"bpf_lsm_\" + name\n\t\tfeatureName = name + \" LSM hook\"\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachTraceIter}:\n\t\ttypeName = \"bpf_iter_\" + name\n\t\tfeatureName = name + \" iterator\"\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachTraceFEntry}:\n\t\ttypeName = name\n\t\tfeatureName = fmt.Sprintf(\"fentry %s\", name)\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachTraceFExit}:\n\t\ttypeName = name\n\t\tfeatureName = fmt.Sprintf(\"fexit %s\", name)\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachModifyReturn}:\n\t\ttypeName = name\n\t\tfeatureName = fmt.Sprintf(\"fmod_ret %s\", name)\n\t\ttarget = (*btf.Func)(nil)\n\tcase match{Tracing, AttachTraceRawTp}:\n\t\ttypeName = fmt.Sprintf(\"btf_trace_%s\", name)\n\t\tfeatureName = fmt.Sprintf(\"raw_tp %s\", name)\n\t\ttarget = (*btf.Typedef)(nil)\n\tdefault:\n\t\treturn nil, 0, errUnrecognizedAttachType\n\t}\n\n\tspec, err := btf.LoadKernelSpec()\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"load kernel spec: %w\", err)\n\t}\n\n\tspec, module, err := findTargetInKernel(spec, typeName, &target)\n\tif errors.Is(err, btf.ErrNotFound) {\n\t\treturn nil, 0, &internal.UnsupportedFeatureError{Name: featureName}\n\t}\n\t// See cilium/ebpf#894. Until we can disambiguate between equally-named kernel\n\t// symbols, we should explicitly refuse program loads. They will not reliably\n\t// do what the caller intended.\n\tif errors.Is(err, btf.ErrMultipleMatches) {\n\t\treturn nil, 0, fmt.Errorf(\"attaching to ambiguous kernel symbol is not supported: %w\", err)\n\t}\n\tif err != nil {\n\t\treturn nil, 0, fmt.Errorf(\"find target for %s: %w\", featureName, err)\n\t}\n\n\tid, err := spec.TypeID(target)\n\treturn module, id, err\n}\n\n// findTargetInKernel attempts to find a named type in the current kernel.\n//\n// target will point at the found type after a successful call. Searches both\n// vmlinux and any loaded modules.\n//\n// Returns a non-nil handle if the type was found in a module, or btf.ErrNotFound\n// if the type wasn't found at all.\nfunc findTargetInKernel(kernelSpec *btf.Spec, typeName string, target *btf.Type) (*btf.Spec, *btf.Handle, error) {\n\terr := kernelSpec.TypeByName(typeName, target)\n\tif errors.Is(err, btf.ErrNotFound) {\n\t\tspec, module, err := findTargetInModule(kernelSpec, typeName, target)\n\t\tif err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"find target in modules: %w\", err)\n\t\t}\n\t\treturn spec, module, nil\n\t}\n\tif err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"find target in vmlinux: %w\", err)\n\t}\n\treturn kernelSpec, nil, err\n}\n\n// findTargetInModule attempts to find a named type in any loaded module.\n//\n// base must contain the kernel's types and is used to parse kmod BTF. Modules\n// are searched in the order they were loaded.\n//\n// Returns btf.ErrNotFound if the target can't be found in any module.\nfunc findTargetInModule(base *btf.Spec, typeName string, target *btf.Type) (*btf.Spec, *btf.Handle, error) {\n\tit := new(btf.HandleIterator)\n\tdefer it.Handle.Close()\n\n\tfor it.Next() {\n\t\tinfo, err := it.Handle.Info()\n\t\tif err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"get info for BTF ID %d: %w\", it.ID, err)\n\t\t}\n\n\t\tif !info.IsModule() {\n\t\t\tcontinue\n\t\t}\n\n\t\tspec, err := it.Handle.Spec(base)\n\t\tif err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"parse types for module %s: %w\", info.Name, err)\n\t\t}\n\n\t\terr = spec.TypeByName(typeName, target)\n\t\tif errors.Is(err, btf.ErrNotFound) {\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, nil, fmt.Errorf(\"lookup type in module %s: %w\", info.Name, err)\n\t\t}\n\n\t\treturn spec, it.Take(), nil\n\t}\n\tif err := it.Err(); err != nil {\n\t\treturn nil, nil, fmt.Errorf(\"iterate modules: %w\", err)\n\t}\n\n\treturn nil, nil, btf.ErrNotFound\n}\n\n// find an attach target type in a program.\n//\n// Returns errUnrecognizedAttachType.\nfunc findTargetInProgram(prog *Program, name string, progType ProgramType, attachType AttachType) (btf.TypeID, error) {\n\ttype match struct {\n\t\tp ProgramType\n\t\ta AttachType\n\t}\n\n\tvar typeName string\n\tswitch (match{progType, attachType}) {\n\tcase match{Extension, AttachNone}:\n\t\ttypeName = name\n\tdefault:\n\t\treturn 0, errUnrecognizedAttachType\n\t}\n\n\tbtfHandle, err := prog.Handle()\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"load target BTF: %w\", err)\n\t}\n\tdefer btfHandle.Close()\n\n\tspec, err := btfHandle.Spec(nil)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tvar targetFunc *btf.Func\n\terr = spec.TypeByName(typeName, &targetFunc)\n\tif err != nil {\n\t\treturn 0, fmt.Errorf(\"find target %s: %w\", typeName, err)\n\t}\n\n\treturn spec.TypeID(targetFunc)\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/ringbuf/doc.go",
    "content": "// Package ringbuf allows interacting with Linux BPF ring buffer.\n//\n// BPF allows submitting custom events to a BPF ring buffer map set up\n// by userspace. This is very useful to push things like packet samples\n// from BPF to a daemon running in user space.\npackage ringbuf\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/ringbuf/reader.go",
    "content": "package ringbuf\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/cilium/ebpf\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/epoll\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar (\n\tErrClosed  = os.ErrClosed\n\terrEOR     = errors.New(\"end of ring\")\n\terrDiscard = errors.New(\"sample discarded\")\n\terrBusy    = errors.New(\"sample not committed yet\")\n)\n\nvar ringbufHeaderSize = binary.Size(ringbufHeader{})\n\n// ringbufHeader from 'struct bpf_ringbuf_hdr' in kernel/bpf/ringbuf.c\ntype ringbufHeader struct {\n\tLen   uint32\n\tPgOff uint32\n}\n\nfunc (rh *ringbufHeader) isBusy() bool {\n\treturn rh.Len&unix.BPF_RINGBUF_BUSY_BIT != 0\n}\n\nfunc (rh *ringbufHeader) isDiscard() bool {\n\treturn rh.Len&unix.BPF_RINGBUF_DISCARD_BIT != 0\n}\n\nfunc (rh *ringbufHeader) dataLen() int {\n\treturn int(rh.Len & ^uint32(unix.BPF_RINGBUF_BUSY_BIT|unix.BPF_RINGBUF_DISCARD_BIT))\n}\n\ntype Record struct {\n\tRawSample []byte\n}\n\n// Read a record from an event ring.\n//\n// buf must be at least ringbufHeaderSize bytes long.\nfunc readRecord(rd *ringbufEventRing, rec *Record, buf []byte) error {\n\trd.loadConsumer()\n\n\tbuf = buf[:ringbufHeaderSize]\n\tif _, err := io.ReadFull(rd, buf); err == io.EOF {\n\t\treturn errEOR\n\t} else if err != nil {\n\t\treturn fmt.Errorf(\"read event header: %w\", err)\n\t}\n\n\theader := ringbufHeader{\n\t\tinternal.NativeEndian.Uint32(buf[0:4]),\n\t\tinternal.NativeEndian.Uint32(buf[4:8]),\n\t}\n\n\tif header.isBusy() {\n\t\t// the next sample in the ring is not committed yet so we\n\t\t// exit without storing the reader/consumer position\n\t\t// and start again from the same position.\n\t\treturn errBusy\n\t}\n\n\t/* read up to 8 byte alignment */\n\tdataLenAligned := uint64(internal.Align(header.dataLen(), 8))\n\n\tif header.isDiscard() {\n\t\t// when the record header indicates that the data should be\n\t\t// discarded, we skip it by just updating the consumer position\n\t\t// to the next record instead of normal Read() to avoid allocating data\n\t\t// and reading/copying from the ring (which normally keeps track of the\n\t\t// consumer position).\n\t\trd.skipRead(dataLenAligned)\n\t\trd.storeConsumer()\n\n\t\treturn errDiscard\n\t}\n\n\tif cap(rec.RawSample) < int(dataLenAligned) {\n\t\trec.RawSample = make([]byte, dataLenAligned)\n\t} else {\n\t\trec.RawSample = rec.RawSample[:dataLenAligned]\n\t}\n\n\tif _, err := io.ReadFull(rd, rec.RawSample); err != nil {\n\t\treturn fmt.Errorf(\"read sample: %w\", err)\n\t}\n\n\trd.storeConsumer()\n\trec.RawSample = rec.RawSample[:header.dataLen()]\n\treturn nil\n}\n\n// Reader allows reading bpf_ringbuf_output\n// from user space.\ntype Reader struct {\n\tpoller *epoll.Poller\n\n\t// mu protects read/write access to the Reader structure\n\tmu          sync.Mutex\n\tring        *ringbufEventRing\n\tepollEvents []unix.EpollEvent\n\theader      []byte\n\thaveData    bool\n\tdeadline    time.Time\n}\n\n// NewReader creates a new BPF ringbuf reader.\nfunc NewReader(ringbufMap *ebpf.Map) (*Reader, error) {\n\tif ringbufMap.Type() != ebpf.RingBuf {\n\t\treturn nil, fmt.Errorf(\"invalid Map type: %s\", ringbufMap.Type())\n\t}\n\n\tmaxEntries := int(ringbufMap.MaxEntries())\n\tif maxEntries == 0 || (maxEntries&(maxEntries-1)) != 0 {\n\t\treturn nil, fmt.Errorf(\"ringbuffer map size %d is zero or not a power of two\", maxEntries)\n\t}\n\n\tpoller, err := epoll.New()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif err := poller.Add(ringbufMap.FD(), 0); err != nil {\n\t\tpoller.Close()\n\t\treturn nil, err\n\t}\n\n\tring, err := newRingBufEventRing(ringbufMap.FD(), maxEntries)\n\tif err != nil {\n\t\tpoller.Close()\n\t\treturn nil, fmt.Errorf(\"failed to create ringbuf ring: %w\", err)\n\t}\n\n\treturn &Reader{\n\t\tpoller:      poller,\n\t\tring:        ring,\n\t\tepollEvents: make([]unix.EpollEvent, 1),\n\t\theader:      make([]byte, ringbufHeaderSize),\n\t}, nil\n}\n\n// Close frees resources used by the reader.\n//\n// It interrupts calls to Read.\nfunc (r *Reader) Close() error {\n\tif err := r.poller.Close(); err != nil {\n\t\tif errors.Is(err, os.ErrClosed) {\n\t\t\treturn nil\n\t\t}\n\t\treturn err\n\t}\n\n\t// Acquire the lock. This ensures that Read isn't running.\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\n\tif r.ring != nil {\n\t\tr.ring.Close()\n\t\tr.ring = nil\n\t}\n\n\treturn nil\n}\n\n// SetDeadline controls how long Read and ReadInto will block waiting for samples.\n//\n// Passing a zero time.Time will remove the deadline.\nfunc (r *Reader) SetDeadline(t time.Time) {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\n\tr.deadline = t\n}\n\n// Read the next record from the BPF ringbuf.\n//\n// Returns os.ErrClosed if Close is called on the Reader, or os.ErrDeadlineExceeded\n// if a deadline was set.\nfunc (r *Reader) Read() (Record, error) {\n\tvar rec Record\n\treturn rec, r.ReadInto(&rec)\n}\n\n// ReadInto is like Read except that it allows reusing Record and associated buffers.\nfunc (r *Reader) ReadInto(rec *Record) error {\n\tr.mu.Lock()\n\tdefer r.mu.Unlock()\n\n\tif r.ring == nil {\n\t\treturn fmt.Errorf(\"ringbuffer: %w\", ErrClosed)\n\t}\n\n\tfor {\n\t\tif !r.haveData {\n\t\t\t_, err := r.poller.Wait(r.epollEvents[:cap(r.epollEvents)], r.deadline)\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tr.haveData = true\n\t\t}\n\n\t\tfor {\n\t\t\terr := readRecord(r.ring, rec, r.header)\n\t\t\tif err == errBusy || err == errDiscard {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif err == errEOR {\n\t\t\t\tr.haveData = false\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\treturn err\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/ringbuf/ring.go",
    "content": "package ringbuf\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync/atomic\"\n\t\"unsafe\"\n\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\ntype ringbufEventRing struct {\n\tprod []byte\n\tcons []byte\n\t*ringReader\n}\n\nfunc newRingBufEventRing(mapFD, size int) (*ringbufEventRing, error) {\n\tcons, err := unix.Mmap(mapFD, 0, os.Getpagesize(), unix.PROT_READ|unix.PROT_WRITE, unix.MAP_SHARED)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"can't mmap consumer page: %w\", err)\n\t}\n\n\tprod, err := unix.Mmap(mapFD, (int64)(os.Getpagesize()), os.Getpagesize()+2*size, unix.PROT_READ, unix.MAP_SHARED)\n\tif err != nil {\n\t\t_ = unix.Munmap(cons)\n\t\treturn nil, fmt.Errorf(\"can't mmap data pages: %w\", err)\n\t}\n\n\tcons_pos := (*uint64)(unsafe.Pointer(&cons[0]))\n\tprod_pos := (*uint64)(unsafe.Pointer(&prod[0]))\n\n\tring := &ringbufEventRing{\n\t\tprod:       prod,\n\t\tcons:       cons,\n\t\tringReader: newRingReader(cons_pos, prod_pos, prod[os.Getpagesize():]),\n\t}\n\truntime.SetFinalizer(ring, (*ringbufEventRing).Close)\n\n\treturn ring, nil\n}\n\nfunc (ring *ringbufEventRing) Close() {\n\truntime.SetFinalizer(ring, nil)\n\n\t_ = unix.Munmap(ring.prod)\n\t_ = unix.Munmap(ring.cons)\n\n\tring.prod = nil\n\tring.cons = nil\n}\n\ntype ringReader struct {\n\t// These point into mmap'ed memory and must be accessed atomically.\n\tprod_pos, cons_pos *uint64\n\tcons               uint64\n\tmask               uint64\n\tring               []byte\n}\n\nfunc newRingReader(cons_ptr, prod_ptr *uint64, ring []byte) *ringReader {\n\treturn &ringReader{\n\t\tprod_pos: prod_ptr,\n\t\tcons_pos: cons_ptr,\n\t\tcons:     atomic.LoadUint64(cons_ptr),\n\t\t// cap is always a power of two\n\t\tmask: uint64(cap(ring)/2 - 1),\n\t\tring: ring,\n\t}\n}\n\nfunc (rr *ringReader) loadConsumer() {\n\trr.cons = atomic.LoadUint64(rr.cons_pos)\n}\n\nfunc (rr *ringReader) storeConsumer() {\n\tatomic.StoreUint64(rr.cons_pos, rr.cons)\n}\n\n// clamp delta to 'end' if 'start+delta' is beyond 'end'\nfunc clamp(start, end, delta uint64) uint64 {\n\tif remainder := end - start; delta > remainder {\n\t\treturn remainder\n\t}\n\treturn delta\n}\n\nfunc (rr *ringReader) skipRead(skipBytes uint64) {\n\trr.cons += clamp(rr.cons, atomic.LoadUint64(rr.prod_pos), skipBytes)\n}\n\nfunc (rr *ringReader) Read(p []byte) (int, error) {\n\tprod := atomic.LoadUint64(rr.prod_pos)\n\n\tn := clamp(rr.cons, prod, uint64(len(p)))\n\n\tstart := rr.cons & rr.mask\n\n\tcopy(p, rr.ring[start:start+n])\n\trr.cons += n\n\n\tif prod == rr.cons {\n\t\treturn int(n), io.EOF\n\t}\n\n\treturn int(n), nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/rlimit/rlimit.go",
    "content": "// Package rlimit allows raising RLIMIT_MEMLOCK if necessary for the use of BPF.\npackage rlimit\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar (\n\tunsupportedMemcgAccounting = &internal.UnsupportedFeatureError{\n\t\tMinimumVersion: internal.Version{5, 11, 0},\n\t\tName:           \"memcg-based accounting for BPF memory\",\n\t}\n\thaveMemcgAccounting error\n\n\trlimitMu sync.Mutex\n)\n\nfunc init() {\n\t// We have to run this feature test at init, since it relies on changing\n\t// RLIMIT_MEMLOCK. Doing so is not safe in a concurrent program. Instead,\n\t// we rely on the initialization order guaranteed by the Go runtime to\n\t// execute the test in a safe environment:\n\t//\n\t//    the invocation of init functions happens in a single goroutine,\n\t//    sequentially, one package at a time.\n\t//\n\t// This is also the reason why RemoveMemlock is in its own package:\n\t// we only want to run the initializer if RemoveMemlock is called\n\t// from somewhere.\n\thaveMemcgAccounting = detectMemcgAccounting()\n}\n\nfunc detectMemcgAccounting() error {\n\t// Retrieve the original limit to prevent lowering Max, since\n\t// doing so is a permanent operation when running unprivileged.\n\tvar oldLimit unix.Rlimit\n\tif err := unix.Prlimit(0, unix.RLIMIT_MEMLOCK, nil, &oldLimit); err != nil {\n\t\treturn fmt.Errorf(\"getting original memlock rlimit: %s\", err)\n\t}\n\n\t// Drop the current limit to zero, maintaining the old Max value.\n\t// This is always permitted by the kernel for unprivileged users.\n\t// Retrieve a new copy of the old limit tuple to minimize the chances\n\t// of failing the restore operation below.\n\tzeroLimit := unix.Rlimit{Cur: 0, Max: oldLimit.Max}\n\tif err := unix.Prlimit(0, unix.RLIMIT_MEMLOCK, &zeroLimit, &oldLimit); err != nil {\n\t\treturn fmt.Errorf(\"lowering memlock rlimit: %s\", err)\n\t}\n\n\tattr := sys.MapCreateAttr{\n\t\tMapType:    2, /* Array */\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t}\n\n\t// Creating a map allocates shared (and locked) memory that counts against\n\t// the rlimit on pre-5.11 kernels, but against the memory cgroup budget on\n\t// kernels 5.11 and over. If this call succeeds with the process' memlock\n\t// rlimit set to 0, we can reasonably assume memcg accounting is supported.\n\tfd, mapErr := sys.MapCreate(&attr)\n\n\t// Restore old limits regardless of what happened.\n\tif err := unix.Prlimit(0, unix.RLIMIT_MEMLOCK, &oldLimit, nil); err != nil {\n\t\treturn fmt.Errorf(\"restoring old memlock rlimit: %s\", err)\n\t}\n\n\t// Map creation successful, memcg accounting supported.\n\tif mapErr == nil {\n\t\tfd.Close()\n\t\treturn nil\n\t}\n\n\t// EPERM shows up when map creation would exceed the memory budget.\n\tif errors.Is(mapErr, unix.EPERM) {\n\t\treturn unsupportedMemcgAccounting\n\t}\n\n\t// This shouldn't happen really.\n\treturn fmt.Errorf(\"unexpected error detecting memory cgroup accounting: %s\", mapErr)\n}\n\n// RemoveMemlock removes the limit on the amount of memory the current\n// process can lock into RAM, if necessary.\n//\n// This is not required to load eBPF resources on kernel versions 5.11+\n// due to the introduction of cgroup-based memory accounting. On such kernels\n// the function is a no-op.\n//\n// Since the function may change global per-process limits it should be invoked\n// at program start up, in main() or init().\n//\n// This function exists as a convenience and should only be used when\n// permanently raising RLIMIT_MEMLOCK to infinite is appropriate. Consider\n// invoking prlimit(2) directly with a more reasonable limit if desired.\n//\n// Requires CAP_SYS_RESOURCE on kernels < 5.11.\nfunc RemoveMemlock() error {\n\tif haveMemcgAccounting == nil {\n\t\treturn nil\n\t}\n\n\tif !errors.Is(haveMemcgAccounting, unsupportedMemcgAccounting) {\n\t\treturn haveMemcgAccounting\n\t}\n\n\trlimitMu.Lock()\n\tdefer rlimitMu.Unlock()\n\n\t// pid 0 affects the current process. Requires CAP_SYS_RESOURCE.\n\tnewLimit := unix.Rlimit{Cur: unix.RLIM_INFINITY, Max: unix.RLIM_INFINITY}\n\tif err := unix.Prlimit(0, unix.RLIMIT_MEMLOCK, &newLimit, nil); err != nil {\n\t\treturn fmt.Errorf(\"failed to set memlock rlimit: %w\", err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/run-tests.sh",
    "content": "#!/usr/bin/env bash\n# Test the current package under a different kernel.\n# Requires virtme and qemu to be installed.\n# Examples:\n#     Run all tests on a 5.4 kernel\n#     $ ./run-tests.sh 5.4\n#     Run a subset of tests:\n#     $ ./run-tests.sh 5.4 ./link\n#     Run using a local kernel image\n#     $ ./run-tests.sh /path/to/bzImage\n\nset -euo pipefail\n\nscript=\"$(realpath \"$0\")\"\nreadonly script\n\n# This script is a bit like a Matryoshka doll since it keeps re-executing itself\n# in various different contexts:\n#\n#   1. invoked by the user like run-tests.sh 5.4\n#   2. invoked by go test like run-tests.sh --exec-vm\n#   3. invoked by init in the vm like run-tests.sh --exec-test\n#\n# This allows us to use all available CPU on the host machine to compile our\n# code, and then only use the VM to execute the test. This is because the VM\n# is usually slower at compiling than the host.\nif [[ \"${1:-}\" = \"--exec-vm\" ]]; then\n  shift\n\n  input=\"$1\"\n  shift\n\n  # Use sudo if /dev/kvm isn't accessible by the current user.\n  sudo=\"\"\n  if [[ ! -r /dev/kvm || ! -w /dev/kvm ]]; then\n    sudo=\"sudo\"\n  fi\n  readonly sudo\n\n  testdir=\"$(dirname \"$1\")\"\n  output=\"$(mktemp -d)\"\n  printf -v cmd \"%q \" \"$@\"\n\n  if [[ \"$(stat -c '%t:%T' -L /proc/$$/fd/0)\" == \"1:3\" ]]; then\n    # stdin is /dev/null, which doesn't play well with qemu. Use a fifo as a\n    # blocking substitute.\n    mkfifo \"${output}/fake-stdin\"\n    # Open for reading and writing to avoid blocking.\n    exec 0<> \"${output}/fake-stdin\"\n    rm \"${output}/fake-stdin\"\n  fi\n\n  for ((i = 0; i < 3; i++)); do\n    if ! $sudo virtme-run --kimg \"${input}/bzImage\" --memory 768M --pwd \\\n      --rwdir=\"${testdir}=${testdir}\" \\\n      --rodir=/run/input=\"${input}\" \\\n      --rwdir=/run/output=\"${output}\" \\\n      --script-sh \"PATH=\\\"$PATH\\\" CI_MAX_KERNEL_VERSION=\"${CI_MAX_KERNEL_VERSION:-}\" \\\"$script\\\" --exec-test $cmd\" \\\n      --kopt possible_cpus=2; then # need at least two CPUs for some tests\n      exit 23\n    fi\n\n    if [[ -e \"${output}/status\" ]]; then\n      break\n    fi\n\n    if [[ -v CI ]]; then\n      echo \"Retrying test run due to qemu crash\"\n      continue\n    fi\n\n    exit 42\n  done\n\n  rc=$(<\"${output}/status\")\n  $sudo rm -r \"$output\"\n  exit $rc\nelif [[ \"${1:-}\" = \"--exec-test\" ]]; then\n  shift\n\n  mount -t bpf bpf /sys/fs/bpf\n  mount -t tracefs tracefs /sys/kernel/debug/tracing\n\n  if [[ -d \"/run/input/bpf\" ]]; then\n    export KERNEL_SELFTESTS=\"/run/input/bpf\"\n  fi\n\n  if [[ -f \"/run/input/bpf/bpf_testmod/bpf_testmod.ko\" ]]; then\n    insmod \"/run/input/bpf/bpf_testmod/bpf_testmod.ko\"\n  fi\n\n  dmesg --clear\n  rc=0\n  \"$@\" || rc=$?\n  dmesg\n  echo $rc > \"/run/output/status\"\n  exit $rc # this return code is \"swallowed\" by qemu\nfi\n\nif [[ -z \"${1:-}\" ]]; then\n  echo \"Expecting kernel version or path as first argument\"\n  exit 1\nfi\n\nreadonly input=\"$(mktemp -d)\"\nreadonly tmp_dir=\"${TMPDIR:-/tmp}\"\n\nfetch() {\n    echo Fetching \"${1}\"\n    pushd \"${tmp_dir}\" > /dev/null\n    curl --no-progress-meter -L -O --fail --etag-compare \"${1}.etag\" --etag-save \"${1}.etag\" \"https://github.com/cilium/ci-kernels/raw/${BRANCH:-master}/${1}\"\n    local ret=$?\n    popd > /dev/null\n    return $ret\n}\n\nif [[ -f \"${1}\" ]]; then\n  readonly kernel=\"${1}\"\n  cp \"${1}\" \"${input}/bzImage\"\nelse\n# LINUX_VERSION_CODE test compares this to discovered value.\n  export KERNEL_VERSION=\"${1}\"\n\n  readonly kernel=\"linux-${1}.bz\"\n  readonly selftests=\"linux-${1}-selftests-bpf.tgz\"\n\n  fetch \"${kernel}\"\n  cp \"${tmp_dir}/${kernel}\" \"${input}/bzImage\"\n\n  if fetch \"${selftests}\"; then\n    echo \"Decompressing selftests\"\n    mkdir \"${input}/bpf\"\n    tar --strip-components=4 -xf \"${tmp_dir}/${selftests}\" -C \"${input}/bpf\"\n  else\n    echo \"No selftests found, disabling\"\n  fi\nfi\nshift\n\nargs=(-short -coverpkg=./... -coverprofile=coverage.out -count 1 ./...)\nif (( $# > 0 )); then\n  args=(\"$@\")\nfi\n\nexport GOFLAGS=-mod=readonly\nexport CGO_ENABLED=0\n\necho Testing on \"${kernel}\"\ngo test -exec \"$script --exec-vm $input\" \"${args[@]}\"\necho \"Test successful on ${kernel}\"\n\nrm -r \"${input}\"\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/syscalls.go",
    "content": "package ebpf\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\n\t\"github.com/cilium/ebpf/asm\"\n\t\"github.com/cilium/ebpf/internal\"\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/tracefs\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\nvar (\n\t// pre-allocating these here since they may\n\t// get called in hot code paths and cause\n\t// unnecessary memory allocations\n\tsysErrKeyNotExist  = sys.Error(ErrKeyNotExist, unix.ENOENT)\n\tsysErrKeyExist     = sys.Error(ErrKeyExist, unix.EEXIST)\n\tsysErrNotSupported = sys.Error(ErrNotSupported, sys.ENOTSUPP)\n)\n\n// invalidBPFObjNameChar returns true if char may not appear in\n// a BPF object name.\nfunc invalidBPFObjNameChar(char rune) bool {\n\tdotAllowed := objNameAllowsDot() == nil\n\n\tswitch {\n\tcase char >= 'A' && char <= 'Z':\n\t\treturn false\n\tcase char >= 'a' && char <= 'z':\n\t\treturn false\n\tcase char >= '0' && char <= '9':\n\t\treturn false\n\tcase dotAllowed && char == '.':\n\t\treturn false\n\tcase char == '_':\n\t\treturn false\n\tdefault:\n\t\treturn true\n\t}\n}\n\nfunc progLoad(insns asm.Instructions, typ ProgramType, license string) (*sys.FD, error) {\n\tbuf := bytes.NewBuffer(make([]byte, 0, insns.Size()))\n\tif err := insns.Marshal(buf, internal.NativeEndian); err != nil {\n\t\treturn nil, err\n\t}\n\tbytecode := buf.Bytes()\n\n\treturn sys.ProgLoad(&sys.ProgLoadAttr{\n\t\tProgType: sys.ProgType(typ),\n\t\tLicense:  sys.NewStringPointer(license),\n\t\tInsns:    sys.NewSlicePointer(bytecode),\n\t\tInsnCnt:  uint32(len(bytecode) / asm.InstructionSize),\n\t})\n}\n\nvar haveNestedMaps = internal.NewFeatureTest(\"nested maps\", \"4.12\", func() error {\n\t_, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(ArrayOfMaps),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\t// Invalid file descriptor.\n\t\tInnerMapFd: ^uint32(0),\n\t})\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif errors.Is(err, unix.EBADF) {\n\t\treturn nil\n\t}\n\treturn err\n})\n\nvar haveMapMutabilityModifiers = internal.NewFeatureTest(\"read- and write-only maps\", \"5.2\", func() error {\n\t// This checks BPF_F_RDONLY_PROG and BPF_F_WRONLY_PROG. Since\n\t// BPF_MAP_FREEZE appeared in 5.2 as well we don't do a separate check.\n\tm, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapFlags:   unix.BPF_F_RDONLY_PROG,\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = m.Close()\n\treturn nil\n})\n\nvar haveMmapableMaps = internal.NewFeatureTest(\"mmapable maps\", \"5.5\", func() error {\n\t// This checks BPF_F_MMAPABLE, which appeared in 5.5 for array maps.\n\tm, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapFlags:   unix.BPF_F_MMAPABLE,\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = m.Close()\n\treturn nil\n})\n\nvar haveInnerMaps = internal.NewFeatureTest(\"inner maps\", \"5.10\", func() error {\n\t// This checks BPF_F_INNER_MAP, which appeared in 5.10.\n\tm, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapFlags:   unix.BPF_F_INNER_MAP,\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = m.Close()\n\treturn nil\n})\n\nvar haveNoPreallocMaps = internal.NewFeatureTest(\"prealloc maps\", \"4.6\", func() error {\n\t// This checks BPF_F_NO_PREALLOC, which appeared in 4.6.\n\tm, err := sys.MapCreate(&sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Hash),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapFlags:   unix.BPF_F_NO_PREALLOC,\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = m.Close()\n\treturn nil\n})\n\nfunc wrapMapError(err error) error {\n\tif err == nil {\n\t\treturn nil\n\t}\n\n\tif errors.Is(err, unix.ENOENT) {\n\t\treturn sysErrKeyNotExist\n\t}\n\n\tif errors.Is(err, unix.EEXIST) {\n\t\treturn sysErrKeyExist\n\t}\n\n\tif errors.Is(err, sys.ENOTSUPP) {\n\t\treturn sysErrNotSupported\n\t}\n\n\tif errors.Is(err, unix.E2BIG) {\n\t\treturn fmt.Errorf(\"key too big for map: %w\", err)\n\t}\n\n\treturn err\n}\n\nvar haveObjName = internal.NewFeatureTest(\"object names\", \"4.15\", func() error {\n\tattr := sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapName:    sys.NewObjName(\"feature_test\"),\n\t}\n\n\tfd, err := sys.MapCreate(&attr)\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\n\t_ = fd.Close()\n\treturn nil\n})\n\nvar objNameAllowsDot = internal.NewFeatureTest(\"dot in object names\", \"5.2\", func() error {\n\tif err := haveObjName(); err != nil {\n\t\treturn err\n\t}\n\n\tattr := sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Array),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: 1,\n\t\tMapName:    sys.NewObjName(\".test\"),\n\t}\n\n\tfd, err := sys.MapCreate(&attr)\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\n\t_ = fd.Close()\n\treturn nil\n})\n\nvar haveBatchAPI = internal.NewFeatureTest(\"map batch api\", \"5.6\", func() error {\n\tvar maxEntries uint32 = 2\n\tattr := sys.MapCreateAttr{\n\t\tMapType:    sys.MapType(Hash),\n\t\tKeySize:    4,\n\t\tValueSize:  4,\n\t\tMaxEntries: maxEntries,\n\t}\n\n\tfd, err := sys.MapCreate(&attr)\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\tdefer fd.Close()\n\n\tkeys := []uint32{1, 2}\n\tvalues := []uint32{3, 4}\n\tkp, _ := marshalPtr(keys, 8)\n\tvp, _ := marshalPtr(values, 8)\n\n\terr = sys.MapUpdateBatch(&sys.MapUpdateBatchAttr{\n\t\tMapFd:  fd.Uint(),\n\t\tKeys:   kp,\n\t\tValues: vp,\n\t\tCount:  maxEntries,\n\t})\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\treturn nil\n})\n\nvar haveProbeReadKernel = internal.NewFeatureTest(\"bpf_probe_read_kernel\", \"5.5\", func() error {\n\tinsns := asm.Instructions{\n\t\tasm.Mov.Reg(asm.R1, asm.R10),\n\t\tasm.Add.Imm(asm.R1, -8),\n\t\tasm.Mov.Imm(asm.R2, 8),\n\t\tasm.Mov.Imm(asm.R3, 0),\n\t\tasm.FnProbeReadKernel.Call(),\n\t\tasm.Return(),\n\t}\n\n\tfd, err := progLoad(insns, Kprobe, \"GPL\")\n\tif err != nil {\n\t\treturn internal.ErrNotSupported\n\t}\n\t_ = fd.Close()\n\treturn nil\n})\n\nvar haveBPFToBPFCalls = internal.NewFeatureTest(\"bpf2bpf calls\", \"4.16\", func() error {\n\tinsns := asm.Instructions{\n\t\tasm.Call.Label(\"prog2\").WithSymbol(\"prog1\"),\n\t\tasm.Return(),\n\t\tasm.Mov.Imm(asm.R0, 0).WithSymbol(\"prog2\"),\n\t\tasm.Return(),\n\t}\n\n\tfd, err := progLoad(insns, SocketFilter, \"MIT\")\n\tif errors.Is(err, unix.EINVAL) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\t_ = fd.Close()\n\treturn nil\n})\n\nvar haveSyscallWrapper = internal.NewFeatureTest(\"syscall wrapper\", \"4.17\", func() error {\n\tprefix := internal.PlatformPrefix()\n\tif prefix == \"\" {\n\t\treturn fmt.Errorf(\"unable to find the platform prefix for (%s)\", runtime.GOARCH)\n\t}\n\n\targs := tracefs.ProbeArgs{\n\t\tType:   tracefs.Kprobe,\n\t\tSymbol: prefix + \"sys_bpf\",\n\t\tPid:    -1,\n\t}\n\n\tvar err error\n\targs.Group, err = tracefs.RandomGroup(\"ebpf_probe\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tevt, err := tracefs.NewEvent(args)\n\tif errors.Is(err, os.ErrNotExist) {\n\t\treturn internal.ErrNotSupported\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn evt.Close()\n})\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/types.go",
    "content": "package ebpf\n\nimport (\n\t\"github.com/cilium/ebpf/internal/sys\"\n\t\"github.com/cilium/ebpf/internal/unix\"\n)\n\n//go:generate stringer -output types_string.go -type=MapType,ProgramType,PinType\n\n// MapType indicates the type map structure\n// that will be initialized in the kernel.\ntype MapType uint32\n\n// All the various map types that can be created\nconst (\n\tUnspecifiedMap MapType = iota\n\t// Hash is a hash map\n\tHash\n\t// Array is an array map\n\tArray\n\t// ProgramArray - A program array map is a special kind of array map whose map\n\t// values contain only file descriptors referring to other eBPF\n\t// programs.  Thus, both the key_size and value_size must be\n\t// exactly four bytes.  This map is used in conjunction with the\n\t// TailCall helper.\n\tProgramArray\n\t// PerfEventArray - A perf event array is used in conjunction with PerfEventRead\n\t// and PerfEventOutput calls, to read the raw bpf_perf_data from the registers.\n\tPerfEventArray\n\t// PerCPUHash - This data structure is useful for people who have high performance\n\t// network needs and can reconcile adds at the end of some cycle, so that\n\t// hashes can be lock free without the use of XAdd, which can be costly.\n\tPerCPUHash\n\t// PerCPUArray - This data structure is useful for people who have high performance\n\t// network needs and can reconcile adds at the end of some cycle, so that\n\t// hashes can be lock free without the use of XAdd, which can be costly.\n\t// Each CPU gets a copy of this hash, the contents of all of which can be reconciled\n\t// later.\n\tPerCPUArray\n\t// StackTrace - This holds whole user and kernel stack traces, it can be retrieved with\n\t// GetStackID\n\tStackTrace\n\t// CGroupArray - This is a very niche structure used to help SKBInCGroup determine\n\t// if an skb is from a socket belonging to a specific cgroup\n\tCGroupArray\n\t// LRUHash - This allows you to create a small hash structure that will purge the\n\t// least recently used items rather than thow an error when you run out of memory\n\tLRUHash\n\t// LRUCPUHash - This is NOT like PerCPUHash, this structure is shared among the CPUs,\n\t// it has more to do with including the CPU id with the LRU calculation so that if a\n\t// particular CPU is using a value over-and-over again, then it will be saved, but if\n\t// a value is being retrieved a lot but sparsely across CPUs it is not as important, basically\n\t// giving weight to CPU locality over overall usage.\n\tLRUCPUHash\n\t// LPMTrie - This is an implementation of Longest-Prefix-Match Trie structure. It is useful,\n\t// for storing things like IP addresses which can be bit masked allowing for keys of differing\n\t// values to refer to the same reference based on their masks. See wikipedia for more details.\n\tLPMTrie\n\t// ArrayOfMaps - Each item in the array is another map. The inner map mustn't be a map of maps\n\t// itself.\n\tArrayOfMaps\n\t// HashOfMaps - Each item in the hash map is another map. The inner map mustn't be a map of maps\n\t// itself.\n\tHashOfMaps\n\t// DevMap - Specialized map to store references to network devices.\n\tDevMap\n\t// SockMap - Specialized map to store references to sockets.\n\tSockMap\n\t// CPUMap - Specialized map to store references to CPUs.\n\tCPUMap\n\t// XSKMap - Specialized map for XDP programs to store references to open sockets.\n\tXSKMap\n\t// SockHash - Specialized hash to store references to sockets.\n\tSockHash\n\t// CGroupStorage - Special map for CGroups.\n\tCGroupStorage\n\t// ReusePortSockArray - Specialized map to store references to sockets that can be reused.\n\tReusePortSockArray\n\t// PerCPUCGroupStorage - Special per CPU map for CGroups.\n\tPerCPUCGroupStorage\n\t// Queue - FIFO storage for BPF programs.\n\tQueue\n\t// Stack - LIFO storage for BPF programs.\n\tStack\n\t// SkStorage - Specialized map for local storage at SK for BPF programs.\n\tSkStorage\n\t// DevMapHash - Hash-based indexing scheme for references to network devices.\n\tDevMapHash\n\t// StructOpsMap - This map holds a kernel struct with its function pointer implemented in a BPF\n\t// program.\n\tStructOpsMap\n\t// RingBuf - Similar to PerfEventArray, but shared across all CPUs.\n\tRingBuf\n\t// InodeStorage - Specialized local storage map for inodes.\n\tInodeStorage\n\t// TaskStorage - Specialized local storage map for task_struct.\n\tTaskStorage\n)\n\n// hasPerCPUValue returns true if the Map stores a value per CPU.\nfunc (mt MapType) hasPerCPUValue() bool {\n\treturn mt == PerCPUHash || mt == PerCPUArray || mt == LRUCPUHash || mt == PerCPUCGroupStorage\n}\n\n// canStoreMap returns true if the map type accepts a map fd\n// for update and returns a map id for lookup.\nfunc (mt MapType) canStoreMap() bool {\n\treturn mt == ArrayOfMaps || mt == HashOfMaps\n}\n\n// canStoreProgram returns true if the map type accepts a program fd\n// for update and returns a program id for lookup.\nfunc (mt MapType) canStoreProgram() bool {\n\treturn mt == ProgramArray\n}\n\n// ProgramType of the eBPF program\ntype ProgramType uint32\n\n// eBPF program types\nconst (\n\tUnspecifiedProgram ProgramType = iota\n\tSocketFilter\n\tKprobe\n\tSchedCLS\n\tSchedACT\n\tTracePoint\n\tXDP\n\tPerfEvent\n\tCGroupSKB\n\tCGroupSock\n\tLWTIn\n\tLWTOut\n\tLWTXmit\n\tSockOps\n\tSkSKB\n\tCGroupDevice\n\tSkMsg\n\tRawTracepoint\n\tCGroupSockAddr\n\tLWTSeg6Local\n\tLircMode2\n\tSkReuseport\n\tFlowDissector\n\tCGroupSysctl\n\tRawTracepointWritable\n\tCGroupSockopt\n\tTracing\n\tStructOps\n\tExtension\n\tLSM\n\tSkLookup\n\tSyscall\n)\n\n// AttachType of the eBPF program, needed to differentiate allowed context accesses in\n// some newer program types like CGroupSockAddr. Should be set to AttachNone if not required.\n// Will cause invalid argument (EINVAL) at program load time if set incorrectly.\ntype AttachType uint32\n\n//go:generate stringer -type AttachType -trimprefix Attach\n\n// AttachNone is an alias for AttachCGroupInetIngress for readability reasons.\nconst AttachNone AttachType = 0\n\nconst (\n\tAttachCGroupInetIngress AttachType = iota\n\tAttachCGroupInetEgress\n\tAttachCGroupInetSockCreate\n\tAttachCGroupSockOps\n\tAttachSkSKBStreamParser\n\tAttachSkSKBStreamVerdict\n\tAttachCGroupDevice\n\tAttachSkMsgVerdict\n\tAttachCGroupInet4Bind\n\tAttachCGroupInet6Bind\n\tAttachCGroupInet4Connect\n\tAttachCGroupInet6Connect\n\tAttachCGroupInet4PostBind\n\tAttachCGroupInet6PostBind\n\tAttachCGroupUDP4Sendmsg\n\tAttachCGroupUDP6Sendmsg\n\tAttachLircMode2\n\tAttachFlowDissector\n\tAttachCGroupSysctl\n\tAttachCGroupUDP4Recvmsg\n\tAttachCGroupUDP6Recvmsg\n\tAttachCGroupGetsockopt\n\tAttachCGroupSetsockopt\n\tAttachTraceRawTp\n\tAttachTraceFEntry\n\tAttachTraceFExit\n\tAttachModifyReturn\n\tAttachLSMMac\n\tAttachTraceIter\n\tAttachCgroupInet4GetPeername\n\tAttachCgroupInet6GetPeername\n\tAttachCgroupInet4GetSockname\n\tAttachCgroupInet6GetSockname\n\tAttachXDPDevMap\n\tAttachCgroupInetSockRelease\n\tAttachXDPCPUMap\n\tAttachSkLookup\n\tAttachXDP\n\tAttachSkSKBVerdict\n\tAttachSkReuseportSelect\n\tAttachSkReuseportSelectOrMigrate\n\tAttachPerfEvent\n\tAttachTraceKprobeMulti\n)\n\n// AttachFlags of the eBPF program used in BPF_PROG_ATTACH command\ntype AttachFlags uint32\n\n// PinType determines whether a map is pinned into a BPFFS.\ntype PinType int\n\n// Valid pin types.\n//\n// Mirrors enum libbpf_pin_type.\nconst (\n\tPinNone PinType = iota\n\t// Pin an object by using its name as the filename.\n\tPinByName\n)\n\n// LoadPinOptions control how a pinned object is loaded.\ntype LoadPinOptions struct {\n\t// Request a read-only or write-only object. The default is a read-write\n\t// object. Only one of the flags may be set.\n\tReadOnly  bool\n\tWriteOnly bool\n\n\t// Raw flags for the syscall. Other fields of this struct take precedence.\n\tFlags uint32\n}\n\n// Marshal returns a value suitable for BPF_OBJ_GET syscall file_flags parameter.\nfunc (lpo *LoadPinOptions) Marshal() uint32 {\n\tif lpo == nil {\n\t\treturn 0\n\t}\n\n\tflags := lpo.Flags\n\tif lpo.ReadOnly {\n\t\tflags |= unix.BPF_F_RDONLY\n\t}\n\tif lpo.WriteOnly {\n\t\tflags |= unix.BPF_F_WRONLY\n\t}\n\treturn flags\n}\n\n// BatchOptions batch map operations options\n//\n// Mirrors libbpf struct bpf_map_batch_opts\n// Currently BPF_F_FLAG is the only supported\n// flag (for ElemFlags).\ntype BatchOptions struct {\n\tElemFlags uint64\n\tFlags     uint64\n}\n\n// LogLevel controls the verbosity of the kernel's eBPF program verifier.\n// These constants can be used for the ProgramOptions.LogLevel field.\ntype LogLevel = sys.LogLevel\n\nconst (\n\t// Print verifier state at branch points.\n\tLogLevelBranch = sys.BPF_LOG_LEVEL1\n\n\t// Print verifier state for every instruction.\n\t// Available since Linux v5.2.\n\tLogLevelInstruction = sys.BPF_LOG_LEVEL2\n\n\t// Print verifier errors and stats at the end of the verification process.\n\t// Available since Linux v5.2.\n\tLogLevelStats = sys.BPF_LOG_STATS\n)\n"
  },
  {
    "path": "vendor/github.com/cilium/ebpf/types_string.go",
    "content": "// Code generated by \"stringer -output types_string.go -type=MapType,ProgramType,PinType\"; DO NOT EDIT.\n\npackage ebpf\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[UnspecifiedMap-0]\n\t_ = x[Hash-1]\n\t_ = x[Array-2]\n\t_ = x[ProgramArray-3]\n\t_ = x[PerfEventArray-4]\n\t_ = x[PerCPUHash-5]\n\t_ = x[PerCPUArray-6]\n\t_ = x[StackTrace-7]\n\t_ = x[CGroupArray-8]\n\t_ = x[LRUHash-9]\n\t_ = x[LRUCPUHash-10]\n\t_ = x[LPMTrie-11]\n\t_ = x[ArrayOfMaps-12]\n\t_ = x[HashOfMaps-13]\n\t_ = x[DevMap-14]\n\t_ = x[SockMap-15]\n\t_ = x[CPUMap-16]\n\t_ = x[XSKMap-17]\n\t_ = x[SockHash-18]\n\t_ = x[CGroupStorage-19]\n\t_ = x[ReusePortSockArray-20]\n\t_ = x[PerCPUCGroupStorage-21]\n\t_ = x[Queue-22]\n\t_ = x[Stack-23]\n\t_ = x[SkStorage-24]\n\t_ = x[DevMapHash-25]\n\t_ = x[StructOpsMap-26]\n\t_ = x[RingBuf-27]\n\t_ = x[InodeStorage-28]\n\t_ = x[TaskStorage-29]\n}\n\nconst _MapType_name = \"UnspecifiedMapHashArrayProgramArrayPerfEventArrayPerCPUHashPerCPUArrayStackTraceCGroupArrayLRUHashLRUCPUHashLPMTrieArrayOfMapsHashOfMapsDevMapSockMapCPUMapXSKMapSockHashCGroupStorageReusePortSockArrayPerCPUCGroupStorageQueueStackSkStorageDevMapHashStructOpsMapRingBufInodeStorageTaskStorage\"\n\nvar _MapType_index = [...]uint16{0, 14, 18, 23, 35, 49, 59, 70, 80, 91, 98, 108, 115, 126, 136, 142, 149, 155, 161, 169, 182, 200, 219, 224, 229, 238, 248, 260, 267, 279, 290}\n\nfunc (i MapType) String() string {\n\tif i >= MapType(len(_MapType_index)-1) {\n\t\treturn \"MapType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _MapType_name[_MapType_index[i]:_MapType_index[i+1]]\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[UnspecifiedProgram-0]\n\t_ = x[SocketFilter-1]\n\t_ = x[Kprobe-2]\n\t_ = x[SchedCLS-3]\n\t_ = x[SchedACT-4]\n\t_ = x[TracePoint-5]\n\t_ = x[XDP-6]\n\t_ = x[PerfEvent-7]\n\t_ = x[CGroupSKB-8]\n\t_ = x[CGroupSock-9]\n\t_ = x[LWTIn-10]\n\t_ = x[LWTOut-11]\n\t_ = x[LWTXmit-12]\n\t_ = x[SockOps-13]\n\t_ = x[SkSKB-14]\n\t_ = x[CGroupDevice-15]\n\t_ = x[SkMsg-16]\n\t_ = x[RawTracepoint-17]\n\t_ = x[CGroupSockAddr-18]\n\t_ = x[LWTSeg6Local-19]\n\t_ = x[LircMode2-20]\n\t_ = x[SkReuseport-21]\n\t_ = x[FlowDissector-22]\n\t_ = x[CGroupSysctl-23]\n\t_ = x[RawTracepointWritable-24]\n\t_ = x[CGroupSockopt-25]\n\t_ = x[Tracing-26]\n\t_ = x[StructOps-27]\n\t_ = x[Extension-28]\n\t_ = x[LSM-29]\n\t_ = x[SkLookup-30]\n\t_ = x[Syscall-31]\n}\n\nconst _ProgramType_name = \"UnspecifiedProgramSocketFilterKprobeSchedCLSSchedACTTracePointXDPPerfEventCGroupSKBCGroupSockLWTInLWTOutLWTXmitSockOpsSkSKBCGroupDeviceSkMsgRawTracepointCGroupSockAddrLWTSeg6LocalLircMode2SkReuseportFlowDissectorCGroupSysctlRawTracepointWritableCGroupSockoptTracingStructOpsExtensionLSMSkLookupSyscall\"\n\nvar _ProgramType_index = [...]uint16{0, 18, 30, 36, 44, 52, 62, 65, 74, 83, 93, 98, 104, 111, 118, 123, 135, 140, 153, 167, 179, 188, 199, 212, 224, 245, 258, 265, 274, 283, 286, 294, 301}\n\nfunc (i ProgramType) String() string {\n\tif i >= ProgramType(len(_ProgramType_index)-1) {\n\t\treturn \"ProgramType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _ProgramType_name[_ProgramType_index[i]:_ProgramType_index[i+1]]\n}\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[PinNone-0]\n\t_ = x[PinByName-1]\n}\n\nconst _PinType_name = \"PinNonePinByName\"\n\nvar _PinType_index = [...]uint8{0, 7, 16}\n\nfunc (i PinType) String() string {\n\tif i < 0 || i >= PinType(len(_PinType_index)-1) {\n\t\treturn \"PinType(\" + strconv.FormatInt(int64(i), 10) + \")\"\n\t}\n\treturn _PinType_name[_PinType_index[i]:_PinType_index[i+1]]\n}\n"
  },
  {
    "path": "vendor/github.com/cosiner/argv/.travis.yml",
    "content": "language: go\nsudo: false\ngo:\n  - 1.8\n  - 1.7.5\n  - 1.7.4\n  - 1.7.3\n  - 1.7.2\n  - 1.7.1\n  - 1.7\n  - tip\n  - 1.6.4\n  - 1.6.3\n  - 1.6.2\n  - 1.6.1\n  - 1.6\n  - 1.5.4\n  - 1.5.3\n  - 1.5.2\n  - 1.5.1\n  - 1.5\n  - 1.4.3\n  - 1.4.2\n  - 1.4.1\n  - 1.4\n  - 1.3.3\n  - 1.3.2\n  - 1.3.1\n  - 1.3\n  - 1.2.2\n  - 1.2.1\n  - 1.2\n  - 1.1.2\n  - 1.1.1\n  - 1.1\nbefore_install:\n  - go get github.com/mattn/goveralls\nscript:\n  - $HOME/gopath/bin/goveralls -service=travis-ci\nnotifications:\n  email:\n    on_success: never\nmatrix:\n  fast_finish: true\n  allow_failures:\n    - go: tip\n    - go: 1.6.4\n    - go: 1.6.3\n    - go: 1.6.2\n    - go: 1.6.1\n    - go: 1.6\n    - go: 1.5.4\n    - go: 1.5.3\n    - go: 1.5.2\n    - go: 1.5.1\n    - go: 1.5\n    - go: 1.4.3\n    - go: 1.4.2\n    - go: 1.4.1\n    - go: 1.4\n    - go: 1.3.3\n    - go: 1.3.2\n    - go: 1.3.1\n    - go: 1.3\n    - go: 1.2.2\n    - go: 1.2.1\n    - go: 1.2\n    - go: 1.1.2\n    - go: 1.1.1\n    - go: 1.1"
  },
  {
    "path": "vendor/github.com/cosiner/argv/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2017 aihui zhu\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/cosiner/argv/README.md",
    "content": "# Argv\n\n[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat)](https://godoc.org/github.com/cosiner/argv) \n[![Build Status](https://travis-ci.org/cosiner/argv.svg?branch=master&style=flat)](https://travis-ci.org/cosiner/argv)\n[![Coverage Status](https://coveralls.io/repos/github/cosiner/argv/badge.svg?style=flat)](https://coveralls.io/github/cosiner/argv)\n[![Go Report Card](https://goreportcard.com/badge/github.com/cosiner/argv?style=flat)](https://goreportcard.com/report/github.com/cosiner/argv)\n\nArgv is a  library for [Go](https://golang.org) to split command line string into arguments array. \n\n# Documentation\nDocumentation can be found at [Godoc](https://godoc.org/github.com/cosiner/argv)\n\n# Example\n```Go\nfunc TestArgv(t *testing.T) {\n\targs, err := argv.Argv([]rune(\" ls   `echo /`   |  wc  -l \"), argv.ParseEnv(os.Environ()), argv.Run)\n\tif err != nil {\n\t    t.Fatal(err)\n\t}\n\texpects := [][]string{\n\t    []string{\"ls\", \"/\"},\n\t    []string{\"wc\", \"-l\"},\n\t}\n\tif !reflect.DeepEqual(args, expects) {\n\t    t.Fatal(args)\n\t}\n}\n```\n\n# LICENSE\nMIT.\n"
  },
  {
    "path": "vendor/github.com/cosiner/argv/argv.go",
    "content": "// Package argv parse command line string into arguments array using the bash syntax.\npackage argv\n\n// Argv split cmdline string as array of argument array by the '|' character.\n//\n// The parsing rules is same as bash. The environment variable will be replaced\n// and string surround by '`' will be passed to reverse quote parser.\nfunc Argv(cmdline string, backquoteExpander, stringExpander Expander) ([][]string, error) {\n\treturn NewParser(NewScanner(cmdline), backquoteExpander, stringExpander).Parse()\n}\n"
  },
  {
    "path": "vendor/github.com/cosiner/argv/cmd.go",
    "content": "package argv\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n)\n\nfunc Cmds(args ...[]string) ([]*exec.Cmd, error) {\n\tvar cmds []*exec.Cmd\n\tfor _, argv := range args {\n\t\tif len(argv) == 0 {\n\t\t\treturn nil, errors.New(\"invalid cmd\")\n\t\t}\n\n\t\tcmds = append(cmds, exec.Command(argv[0], argv[1:]...))\n\t}\n\treturn cmds, nil\n}\n\nfunc Pipe(stdin io.Reader, stdout, stderr io.Writer, cmds ...*exec.Cmd) error {\n\tif stdin == nil {\n\t\tstdin = os.Stdin\n\t}\n\tif stdout == nil {\n\t\tstdout = os.Stdout\n\t}\n\tif stderr == nil {\n\t\tstderr = os.Stderr\n\t}\n\tl := len(cmds)\n\tif l == 0 {\n\t\treturn nil\n\t}\n\tvar err error\n\tfor i := 0; i < l; i++ {\n\t\tif i == 0 {\n\t\t\tcmds[i].Stdin = stdin\n\t\t} else {\n\t\t\tcmds[i].Stdin, err = cmds[i-1].StdoutPipe()\n\t\t\tif stderr != nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tcmds[i].Stderr = stderr\n\t\tif i == l-1 {\n\t\t\tcmds[i].Stdout = stdout\n\t\t}\n\t}\n\tif err != nil {\n\t\treturn err\n\t}\n\tfor i := range cmds {\n\t\terr = cmds[i].Start()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tfor i := range cmds {\n\t\terr = cmds[i].Wait()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/cosiner/argv/parser.go",
    "content": "package argv\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n)\n\ntype (\n\tExpander func(string) (string, error)\n\n\t// Parser take tokens from Scanner, and do syntax checking, and generate the splitted arguments array.\n\tParser struct {\n\t\ts                 *Scanner\n\t\ttokbuf            []Token\n\t\tbackQuoteExpander Expander\n\t\tstringExpander    Expander\n\n\t\tsections    [][]string\n\t\tcurrSection []string\n\n\t\tcurrStrValid bool\n\t\tcurrStr      []rune\n\t}\n)\n\n// NewParser create a cmdline string parser.\nfunc NewParser(s *Scanner, backQuoteExpander, stringExpander Expander) *Parser {\n\tif backQuoteExpander == nil {\n\t\tbackQuoteExpander = func(r string) (string, error) {\n\t\t\treturn r, fmt.Errorf(\"back quote doesn't allowed\")\n\t\t}\n\t}\n\tif stringExpander == nil {\n\t\tstringExpander = func(runes string) (string, error) {\n\t\t\ts := os.ExpandEnv(string(runes))\n\t\t\treturn s, nil\n\t\t}\n\t}\n\n\treturn &Parser{\n\t\ts:                 s,\n\t\tbackQuoteExpander: backQuoteExpander,\n\t\tstringExpander:    stringExpander,\n\t}\n}\n\nfunc (p *Parser) nextToken() (Token, error) {\n\tif l := len(p.tokbuf); l > 0 {\n\t\ttok := p.tokbuf[l-1]\n\t\tp.tokbuf = p.tokbuf[:l-1]\n\t\treturn tok, nil\n\t}\n\n\treturn p.s.Next()\n}\n\nvar (\n\t// ErrInvalidSyntax was reported if there is a syntax error in command line string.\n\tErrInvalidSyntax = errors.New(\"invalid syntax\")\n)\n\nfunc (p *Parser) unreadToken(tok Token) {\n\tp.tokbuf = append(p.tokbuf, tok)\n}\n\n// Parse split command line string into arguments array.\n//\n// EBNF:\n//   Cmdline = Section [ Pipe Cmdline ]\n//   Section = [Space] SpacedSection { SpacedSection }\n//   SpacedSection = MultipleUnit [Space]\n//   MultipleUnit = Unit {Unit}\n//   Unit = String | BackQuote | SingleQuote | DoubleQuote\nfunc (p *Parser) Parse() ([][]string, error) {\n\terr := p.cmdline()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p.sections, nil\n}\n\nfunc (p *Parser) cmdline() error {\n\terr := p.section()\n\tif err != nil {\n\t\treturn err\n\t}\n\tp.endSection()\n\n\ttok, err := p.nextToken()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif tok.Type == TokEOF {\n\t\treturn nil\n\t}\n\tif !p.accept(tok.Type, TokPipe) {\n\t\treturn ErrInvalidSyntax\n\t}\n\treturn p.cmdline()\n}\n\nfunc (p *Parser) section() error {\n\tleftSpace, err := p.optional(TokSpace)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar hasUnit bool\n\tfor {\n\t\tunit, ok, err := p.spacedSection()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\thasUnit = true\n\n\t\terr = p.appendUnit(leftSpace, unit)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tleftSpace = unit.rightSpace\n\t}\n\tif !hasUnit {\n\t\treturn ErrInvalidSyntax\n\t}\n\treturn nil\n}\n\ntype unit struct {\n\trightSpace bool\n\ttoks       []Token\n}\n\nfunc (p *Parser) spacedSection() (u unit, ok bool, err error) {\n\tu.toks, ok, err = p.multipleUnit()\n\tif err != nil {\n\t\treturn\n\t}\n\tif !ok {\n\t\treturn u, false, nil\n\t}\n\tu.rightSpace, err = p.optional(TokSpace)\n\treturn\n}\n\nfunc (p *Parser) multipleUnit() ([]Token, bool, error) {\n\tvar (\n\t\ttoks []Token\n\t)\n\tfor {\n\t\ttok, ok, err := p.unit()\n\t\tif err != nil {\n\t\t\treturn nil, false, err\n\t\t}\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\ttoks = append(toks, tok)\n\t}\n\treturn toks, len(toks) > 0, nil\n}\n\nfunc (p *Parser) unit() (Token, bool, error) {\n\ttok, err := p.nextToken()\n\tif err != nil {\n\t\treturn tok, false, err\n\t}\n\tif p.accept(tok.Type, TokString, TokStringSingleQuote, TokStringDoubleQuote, TokBackQuote) {\n\t\treturn tok, true, nil\n\t}\n\tp.unreadToken(tok)\n\treturn tok, false, nil\n}\n\nfunc (p *Parser) optional(typ TokenType) (bool, error) {\n\ttok, err := p.nextToken()\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tvar ok bool\n\tif ok = p.accept(tok.Type, typ); !ok {\n\t\tp.unreadToken(tok)\n\t}\n\treturn ok, nil\n}\n\nfunc (p *Parser) accept(t TokenType, types ...TokenType) bool {\n\tfor _, typ := range types {\n\t\tif t == typ {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (p *Parser) appendUnit(leftSpace bool, u unit) error {\n\tif leftSpace {\n\t\tp.currStr = p.currStr[:0]\n\t}\n\tfor _, tok := range u.toks {\n\t\tswitch tok.Type {\n\t\tcase TokBackQuote:\n\t\t\texpanded, err := p.backQuoteExpander(string(tok.Value))\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"expand string back quoted failed: %s, %w\", string(tok.Value), err)\n\t\t\t}\n\t\t\tp.currStr = append(p.currStr, []rune(expanded)...)\n\t\tcase TokString:\n\t\t\texpanded, err := p.stringExpander(string(tok.Value))\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"expand string failed: %s, %w\", string(tok.Value), err)\n\t\t\t}\n\t\t\tp.currStr = append(p.currStr, []rune(expanded)...)\n\t\tcase TokStringSingleQuote:\n\t\t\tp.currStr = append(p.currStr, tok.Value...)\n\t\tcase TokStringDoubleQuote:\n\t\t\texpanded, err := p.stringExpander(string(tok.Value))\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"expand string double quoted failed: %s, %w\", string(tok.Value), err)\n\t\t\t}\n\t\t\tp.currStr = append(p.currStr, []rune(expanded)...)\n\t\t}\n\t}\n\tp.currStrValid = true\n\tif u.rightSpace {\n\t\tp.currSection = append(p.currSection, string(p.currStr))\n\t\tp.currStr = p.currStr[:0]\n\t\tp.currStrValid = false\n\t}\n\treturn nil\n}\n\nfunc (p *Parser) endSection() {\n\tif p.currStrValid {\n\t\tp.currSection = append(p.currSection, string(p.currStr))\n\t}\n\tp.currStr = p.currStr[:0]\n\tp.currStrValid = false\n\tif len(p.currSection) > 0 {\n\t\tp.sections = append(p.sections, p.currSection)\n\t\tp.currSection = nil\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/cosiner/argv/scanner.go",
    "content": "package argv\n\nimport (\n\t\"unicode\"\n)\n\n// Scanner is a cmdline string scanner.\n//\n// It split cmdline string to tokens: space, string, pipe, reverse quote string.\ntype Scanner struct {\n\ttext []rune\n\trpos int\n}\n\n// NewScanner create a scanner and init it's internal states.\nfunc NewScanner(text string) *Scanner {\n\treturn &Scanner{\n\t\ttext: []rune(text),\n\t}\n}\n\nconst _RuneEOF = 0\n\nfunc (s *Scanner) nextRune() rune {\n\tif s.rpos >= len(s.text) {\n\t\treturn _RuneEOF\n\t}\n\n\tr := s.text[s.rpos]\n\ts.rpos++\n\treturn r\n}\n\nfunc (s *Scanner) unreadRune(r rune) {\n\tif r != _RuneEOF {\n\t\ts.rpos--\n\t}\n}\n\nfunc (s *Scanner) isEscapeChars(r rune) (rune, bool) {\n\tswitch r {\n\tcase 'a':\n\t\treturn '\\a', true\n\tcase 'b':\n\t\treturn '\\b', true\n\tcase 'f':\n\t\treturn '\\f', true\n\tcase 'n':\n\t\treturn '\\n', true\n\tcase 'r':\n\t\treturn '\\r', true\n\tcase 't':\n\t\treturn '\\t', true\n\tcase 'v':\n\t\treturn '\\v', true\n\tcase '\\\\':\n\t\treturn '\\\\', true\n\tcase '$':\n\t\treturn '$', true\n\t}\n\treturn r, false\n}\n\n// TokenType is the type of tokens recognized by the scanner.\ntype TokenType uint32\n\n// Token is generated by the scanner with a type and value.\ntype Token struct {\n\tType  TokenType\n\tValue []rune\n}\n\nconst (\n\t// TokString for string\n\tTokString TokenType = iota + 1\n\tTokStringSingleQuote\n\tTokStringDoubleQuote\n\t// TokPipe is the '|' character\n\tTokPipe\n\t// TokBackQuote is reverse quoted string\n\tTokBackQuote\n\t// TokSpace represent space character sequence\n\tTokSpace\n\t// TokEOF means the input end.\n\tTokEOF\n)\n\n// Next return next token, if it reach the end, TOK_EOF will be returned.\n//\n// Error is returned for invalid syntax such as unpaired quotes.\nfunc (s *Scanner) Next() (Token, error) {\n\tconst (\n\t\tInitial = iota + 1\n\t\tSpace\n\t\tBackQuote\n\t\tString\n\t\tStringSingleQuote\n\t\tStringDoubleQuote\n\t)\n\n\tvar (\n\t\ttok Token\n\n\t\tstate uint8 = Initial\n\t)\n\tfor {\n\t\tr := s.nextRune()\n\t\tswitch state {\n\t\tcase Initial:\n\t\t\tswitch {\n\t\t\tcase r == _RuneEOF:\n\t\t\t\ttok.Type = TokEOF\n\t\t\t\treturn tok, nil\n\t\t\tcase r == '|':\n\t\t\t\ttok.Type = TokPipe\n\t\t\t\treturn tok, nil\n\t\t\tcase r == '`':\n\t\t\t\tstate = BackQuote\n\t\t\tcase unicode.IsSpace(r):\n\t\t\t\tstate = Space\n\t\t\t\ts.unreadRune(r)\n\t\t\tcase r == '\\'':\n\t\t\t\tstate = StringSingleQuote\n\t\t\tcase r == '\"':\n\t\t\t\tstate = StringDoubleQuote\n\t\t\tdefault:\n\t\t\t\tstate = String\n\t\t\t\ts.unreadRune(r)\n\t\t\t}\n\t\tcase Space:\n\t\t\tif r == _RuneEOF || !unicode.IsSpace(r) {\n\t\t\t\ts.unreadRune(r)\n\t\t\t\ttok.Type = TokSpace\n\t\t\t\treturn tok, nil\n\t\t\t}\n\t\tcase BackQuote:\n\t\t\tswitch r {\n\t\t\tcase _RuneEOF:\n\t\t\t\treturn tok, ErrInvalidSyntax\n\t\t\tcase '`':\n\t\t\t\ttok.Type = TokBackQuote\n\t\t\t\treturn tok, nil\n\t\t\tdefault:\n\t\t\t\ttok.Value = append(tok.Value, r)\n\t\t\t}\n\t\tcase String:\n\t\t\tswitch {\n\t\t\tcase r == _RuneEOF, r == '|', r == '`', r == '\\'', r == '\"', unicode.IsSpace(r):\n\t\t\t\ttok.Type = TokString\n\t\t\t\ts.unreadRune(r)\n\t\t\t\treturn tok, nil\n\t\t\tcase r == '\\\\':\n\t\t\t\tnr := s.nextRune()\n\t\t\t\tif nr == _RuneEOF {\n\t\t\t\t\treturn tok, ErrInvalidSyntax\n\t\t\t\t}\n\t\t\t\ttok.Value = append(tok.Value, nr)\n\t\t\tdefault:\n\t\t\t\ttok.Value = append(tok.Value, r)\n\t\t\t}\n\t\tcase StringSingleQuote, StringDoubleQuote:\n\t\t\tswitch r {\n\t\t\tcase _RuneEOF:\n\t\t\t\treturn tok, ErrInvalidSyntax\n\t\t\tcase '\\'', '\"':\n\t\t\t\tif singleQuote := state == StringSingleQuote; singleQuote == (r == '\\'') {\n\t\t\t\t\tif singleQuote {\n\t\t\t\t\t\ttok.Type = TokStringSingleQuote\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttok.Type = TokStringDoubleQuote\n\t\t\t\t\t}\n\t\t\t\t\treturn tok, nil\n\t\t\t\t} else {\n\t\t\t\t\ttok.Value = append(tok.Value, r)\n\t\t\t\t}\n\t\t\tcase '\\\\':\n\t\t\t\tnr := s.nextRune()\n\t\t\t\tif escape, ok := s.isEscapeChars(nr); ok {\n\t\t\t\t\ttok.Value = append(tok.Value, escape)\n\t\t\t\t} else {\n\t\t\t\t\ttok.Value = append(tok.Value, r)\n\t\t\t\t\ts.unreadRune(nr)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\ttok.Value = append(tok.Value, r)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Scan is a utility function help split input text as tokens.\nfunc Scan(text string) ([]Token, error) {\n\ts := NewScanner(text)\n\tvar tokens []Token\n\tfor {\n\t\ttok, err := s.Next()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\ttokens = append(tokens, tok)\n\t\tif tok.Type == TokEOF {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn tokens, nil\n}\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/go-md2man/v2/LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Brian Goff\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/go-md2man/v2/md2man/debug.go",
    "content": "package md2man\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/russross/blackfriday/v2\"\n)\n\nfunc fmtListFlags(flags blackfriday.ListType) string {\n\tknownFlags := []struct {\n\t\tname string\n\t\tflag blackfriday.ListType\n\t}{\n\t\t{\"ListTypeOrdered\", blackfriday.ListTypeOrdered},\n\t\t{\"ListTypeDefinition\", blackfriday.ListTypeDefinition},\n\t\t{\"ListTypeTerm\", blackfriday.ListTypeTerm},\n\t\t{\"ListItemContainsBlock\", blackfriday.ListItemContainsBlock},\n\t\t{\"ListItemBeginningOfList\", blackfriday.ListItemBeginningOfList},\n\t\t{\"ListItemEndOfList\", blackfriday.ListItemEndOfList},\n\t}\n\n\tvar f []string\n\tfor _, kf := range knownFlags {\n\t\tif flags&kf.flag != 0 {\n\t\t\tf = append(f, kf.name)\n\t\t\tflags &^= kf.flag\n\t\t}\n\t}\n\tif flags != 0 {\n\t\tf = append(f, fmt.Sprintf(\"Unknown(%#x)\", flags))\n\t}\n\treturn strings.Join(f, \"|\")\n}\n\ntype debugDecorator struct {\n\tblackfriday.Renderer\n}\n\nfunc depth(node *blackfriday.Node) int {\n\td := 0\n\tfor n := node.Parent; n != nil; n = n.Parent {\n\t\td++\n\t}\n\treturn d\n}\n\nfunc (d *debugDecorator) RenderNode(w io.Writer, node *blackfriday.Node, entering bool) blackfriday.WalkStatus {\n\tfmt.Fprintf(os.Stderr, \"%s%s %v %v\\n\",\n\t\tstrings.Repeat(\"  \", depth(node)),\n\t\tmap[bool]string{true: \"+\", false: \"-\"}[entering],\n\t\tnode,\n\t\tfmtListFlags(node.ListFlags))\n\tvar b strings.Builder\n\tstatus := d.Renderer.RenderNode(io.MultiWriter(&b, w), node, entering)\n\tif b.Len() > 0 {\n\t\tfmt.Fprintf(os.Stderr, \">> %q\\n\", b.String())\n\t}\n\treturn status\n}\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/go-md2man/v2/md2man/md2man.go",
    "content": "package md2man\n\nimport (\n\t\"os\"\n\t\"strconv\"\n\n\t\"github.com/russross/blackfriday/v2\"\n)\n\n// Render converts a markdown document into a roff formatted document.\nfunc Render(doc []byte) []byte {\n\trenderer := NewRoffRenderer()\n\tvar r blackfriday.Renderer = renderer\n\tif v, _ := strconv.ParseBool(os.Getenv(\"MD2MAN_DEBUG\")); v {\n\t\tr = &debugDecorator{Renderer: r}\n\t}\n\n\treturn blackfriday.Run(doc,\n\t\t[]blackfriday.Option{\n\t\t\tblackfriday.WithRenderer(r),\n\t\t\tblackfriday.WithExtensions(renderer.GetExtensions()),\n\t\t}...)\n}\n"
  },
  {
    "path": "vendor/github.com/cpuguy83/go-md2man/v2/md2man/roff.go",
    "content": "package md2man\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/russross/blackfriday/v2\"\n)\n\n// roffRenderer implements the blackfriday.Renderer interface for creating\n// roff format (manpages) from markdown text\ntype roffRenderer struct {\n\tlistCounters []int\n\tfirstHeader  bool\n\tlistDepth    int\n}\n\nconst (\n\ttitleHeader       = \".TH \"\n\ttopLevelHeader    = \"\\n\\n.SH \"\n\tsecondLevelHdr    = \"\\n.SH \"\n\totherHeader       = \"\\n.SS \"\n\tcrTag             = \"\\n\"\n\temphTag           = \"\\\\fI\"\n\temphCloseTag      = \"\\\\fP\"\n\tstrongTag         = \"\\\\fB\"\n\tstrongCloseTag    = \"\\\\fP\"\n\tbreakTag          = \"\\n.br\\n\"\n\tparaTag           = \"\\n.PP\\n\"\n\thruleTag          = \"\\n.ti 0\\n\\\\l'\\\\n(.lu'\\n\"\n\tlinkTag           = \"\\n\\\\[la]\"\n\tlinkCloseTag      = \"\\\\[ra]\"\n\tcodespanTag       = \"\\\\fB\"\n\tcodespanCloseTag  = \"\\\\fR\"\n\tcodeTag           = \"\\n.EX\\n\"\n\tcodeCloseTag      = \".EE\\n\" // Do not prepend a newline character since code blocks, by definition, include a newline already (or at least as how blackfriday gives us on).\n\tquoteTag          = \"\\n.PP\\n.RS\\n\"\n\tquoteCloseTag     = \"\\n.RE\\n\"\n\tlistTag           = \"\\n.RS\\n\"\n\tlistCloseTag      = \".RE\\n\"\n\tdtTag             = \"\\n.TP\\n\"\n\tdd2Tag            = \"\\n\"\n\ttableStart        = \"\\n.TS\\nallbox;\\n\"\n\ttableEnd          = \".TE\\n\"\n\ttableCellStart    = \"T{\\n\"\n\ttableCellEnd      = \"\\nT}\\n\"\n\ttablePreprocessor = `'\\\" t`\n)\n\n// NewRoffRenderer creates a new blackfriday Renderer for generating roff documents\n// from markdown\nfunc NewRoffRenderer() *roffRenderer { // nolint: golint\n\treturn &roffRenderer{}\n}\n\n// GetExtensions returns the list of extensions used by this renderer implementation\nfunc (*roffRenderer) GetExtensions() blackfriday.Extensions {\n\treturn blackfriday.NoIntraEmphasis |\n\t\tblackfriday.Tables |\n\t\tblackfriday.FencedCode |\n\t\tblackfriday.SpaceHeadings |\n\t\tblackfriday.Footnotes |\n\t\tblackfriday.Titleblock |\n\t\tblackfriday.DefinitionLists\n}\n\n// RenderHeader handles outputting the header at document start\nfunc (r *roffRenderer) RenderHeader(w io.Writer, ast *blackfriday.Node) {\n\t// We need to walk the tree to check if there are any tables.\n\t// If there are, we need to enable the roff table preprocessor.\n\tast.Walk(func(node *blackfriday.Node, entering bool) blackfriday.WalkStatus {\n\t\tif node.Type == blackfriday.Table {\n\t\t\tout(w, tablePreprocessor+\"\\n\")\n\t\t\treturn blackfriday.Terminate\n\t\t}\n\t\treturn blackfriday.GoToNext\n\t})\n\n\t// disable hyphenation\n\tout(w, \".nh\\n\")\n}\n\n// RenderFooter handles outputting the footer at the document end; the roff\n// renderer has no footer information\nfunc (r *roffRenderer) RenderFooter(w io.Writer, ast *blackfriday.Node) {\n}\n\n// RenderNode is called for each node in a markdown document; based on the node\n// type the equivalent roff output is sent to the writer\nfunc (r *roffRenderer) RenderNode(w io.Writer, node *blackfriday.Node, entering bool) blackfriday.WalkStatus {\n\twalkAction := blackfriday.GoToNext\n\n\tswitch node.Type {\n\tcase blackfriday.Text:\n\t\t// Special case: format the NAME section as required for proper whatis parsing.\n\t\t// Refer to the lexgrog(1) and groff_man(7) manual pages for details.\n\t\tif node.Parent != nil &&\n\t\t\tnode.Parent.Type == blackfriday.Paragraph &&\n\t\t\tnode.Parent.Prev != nil &&\n\t\t\tnode.Parent.Prev.Type == blackfriday.Heading &&\n\t\t\tnode.Parent.Prev.FirstChild != nil &&\n\t\t\tbytes.EqualFold(node.Parent.Prev.FirstChild.Literal, []byte(\"NAME\")) {\n\t\t\tbefore, after, found := bytesCut(node.Literal, []byte(\" - \"))\n\t\t\tescapeSpecialChars(w, before)\n\t\t\tif found {\n\t\t\t\tout(w, ` \\- `)\n\t\t\t\tescapeSpecialChars(w, after)\n\t\t\t}\n\t\t} else {\n\t\t\tescapeSpecialChars(w, node.Literal)\n\t\t}\n\tcase blackfriday.Softbreak:\n\t\tout(w, crTag)\n\tcase blackfriday.Hardbreak:\n\t\tout(w, breakTag)\n\tcase blackfriday.Emph:\n\t\tif entering {\n\t\t\tout(w, emphTag)\n\t\t} else {\n\t\t\tout(w, emphCloseTag)\n\t\t}\n\tcase blackfriday.Strong:\n\t\tif entering {\n\t\t\tout(w, strongTag)\n\t\t} else {\n\t\t\tout(w, strongCloseTag)\n\t\t}\n\tcase blackfriday.Link:\n\t\t// Don't render the link text for automatic links, because this\n\t\t// will only duplicate the URL in the roff output.\n\t\t// See https://daringfireball.net/projects/markdown/syntax#autolink\n\t\tif !bytes.Equal(node.LinkData.Destination, node.FirstChild.Literal) {\n\t\t\tout(w, string(node.FirstChild.Literal))\n\t\t}\n\t\t// Hyphens in a link must be escaped to avoid word-wrap in the rendered man page.\n\t\tescapedLink := strings.ReplaceAll(string(node.LinkData.Destination), \"-\", \"\\\\-\")\n\t\tout(w, linkTag+escapedLink+linkCloseTag)\n\t\twalkAction = blackfriday.SkipChildren\n\tcase blackfriday.Image:\n\t\t// ignore images\n\t\twalkAction = blackfriday.SkipChildren\n\tcase blackfriday.Code:\n\t\tout(w, codespanTag)\n\t\tescapeSpecialChars(w, node.Literal)\n\t\tout(w, codespanCloseTag)\n\tcase blackfriday.Document:\n\t\tbreak\n\tcase blackfriday.Paragraph:\n\t\tif entering {\n\t\t\tif r.listDepth > 0 {\n\t\t\t\t// roff .PP markers break lists\n\t\t\t\tif node.Prev != nil { // continued paragraph\n\t\t\t\t\tif node.Prev.Type == blackfriday.List && node.Prev.ListFlags&blackfriday.ListTypeDefinition == 0 {\n\t\t\t\t\t\tout(w, \".IP\\n\")\n\t\t\t\t\t} else {\n\t\t\t\t\t\tout(w, crTag)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if node.Prev != nil && node.Prev.Type == blackfriday.Heading {\n\t\t\t\tout(w, crTag)\n\t\t\t} else {\n\t\t\t\tout(w, paraTag)\n\t\t\t}\n\t\t} else {\n\t\t\tif node.Next == nil || node.Next.Type != blackfriday.List {\n\t\t\t\tout(w, crTag)\n\t\t\t}\n\t\t}\n\tcase blackfriday.BlockQuote:\n\t\tif entering {\n\t\t\tout(w, quoteTag)\n\t\t} else {\n\t\t\tout(w, quoteCloseTag)\n\t\t}\n\tcase blackfriday.Heading:\n\t\tr.handleHeading(w, node, entering)\n\tcase blackfriday.HorizontalRule:\n\t\tout(w, hruleTag)\n\tcase blackfriday.List:\n\t\tr.handleList(w, node, entering)\n\tcase blackfriday.Item:\n\t\tr.handleItem(w, node, entering)\n\tcase blackfriday.CodeBlock:\n\t\tout(w, codeTag)\n\t\tescapeSpecialChars(w, node.Literal)\n\t\tout(w, codeCloseTag)\n\tcase blackfriday.Table:\n\t\tr.handleTable(w, node, entering)\n\tcase blackfriday.TableHead:\n\tcase blackfriday.TableBody:\n\tcase blackfriday.TableRow:\n\t\t// no action as cell entries do all the nroff formatting\n\t\treturn blackfriday.GoToNext\n\tcase blackfriday.TableCell:\n\t\tr.handleTableCell(w, node, entering)\n\tcase blackfriday.HTMLSpan:\n\t\t// ignore other HTML tags\n\tcase blackfriday.HTMLBlock:\n\t\tif bytes.HasPrefix(node.Literal, []byte(\"<!--\")) {\n\t\t\tbreak // ignore comments, no warning\n\t\t}\n\t\tfmt.Fprintln(os.Stderr, \"WARNING: go-md2man does not handle node type \"+node.Type.String())\n\tdefault:\n\t\tfmt.Fprintln(os.Stderr, \"WARNING: go-md2man does not handle node type \"+node.Type.String())\n\t}\n\treturn walkAction\n}\n\nfunc (r *roffRenderer) handleHeading(w io.Writer, node *blackfriday.Node, entering bool) {\n\tif entering {\n\t\tswitch node.Level {\n\t\tcase 1:\n\t\t\tif !r.firstHeader {\n\t\t\t\tout(w, titleHeader)\n\t\t\t\tr.firstHeader = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tout(w, topLevelHeader)\n\t\tcase 2:\n\t\t\tout(w, secondLevelHdr)\n\t\tdefault:\n\t\t\tout(w, otherHeader)\n\t\t}\n\t}\n}\n\nfunc (r *roffRenderer) handleList(w io.Writer, node *blackfriday.Node, entering bool) {\n\topenTag := listTag\n\tcloseTag := listCloseTag\n\tif (entering && r.listDepth == 0) || (!entering && r.listDepth == 1) {\n\t\topenTag = crTag\n\t\tcloseTag = \"\"\n\t}\n\tif node.ListFlags&blackfriday.ListTypeDefinition != 0 {\n\t\t// tags for definition lists handled within Item node\n\t\topenTag = \"\"\n\t\tcloseTag = \"\"\n\t}\n\tif entering {\n\t\tr.listDepth++\n\t\tif node.ListFlags&blackfriday.ListTypeOrdered != 0 {\n\t\t\tr.listCounters = append(r.listCounters, 1)\n\t\t}\n\t\tout(w, openTag)\n\t} else {\n\t\tif node.ListFlags&blackfriday.ListTypeOrdered != 0 {\n\t\t\tr.listCounters = r.listCounters[:len(r.listCounters)-1]\n\t\t}\n\t\tout(w, closeTag)\n\t\tr.listDepth--\n\t}\n}\n\nfunc (r *roffRenderer) handleItem(w io.Writer, node *blackfriday.Node, entering bool) {\n\tif entering {\n\t\tif node.ListFlags&blackfriday.ListTypeOrdered != 0 {\n\t\t\tout(w, fmt.Sprintf(\".IP \\\"%3d.\\\" 5\\n\", r.listCounters[len(r.listCounters)-1]))\n\t\t\tr.listCounters[len(r.listCounters)-1]++\n\t\t} else if node.ListFlags&blackfriday.ListTypeTerm != 0 {\n\t\t\t// DT (definition term): line just before DD (see below).\n\t\t\tout(w, dtTag)\n\t\t} else if node.ListFlags&blackfriday.ListTypeDefinition != 0 {\n\t\t\t// DD (definition description): line that starts with \": \".\n\t\t\t//\n\t\t\t// We have to distinguish between the first DD and the\n\t\t\t// subsequent ones, as there should be no vertical\n\t\t\t// whitespace between the DT and the first DD.\n\t\t\tif node.Prev != nil && node.Prev.ListFlags&(blackfriday.ListTypeTerm|blackfriday.ListTypeDefinition) == blackfriday.ListTypeDefinition {\n\t\t\t\tif node.Prev.Type == blackfriday.Item &&\n\t\t\t\t\tnode.Prev.LastChild != nil &&\n\t\t\t\t\tnode.Prev.LastChild.Type == blackfriday.List &&\n\t\t\t\t\tnode.Prev.LastChild.ListFlags&blackfriday.ListTypeDefinition == 0 {\n\t\t\t\t\tout(w, \".IP\\n\")\n\t\t\t\t} else {\n\t\t\t\t\tout(w, dd2Tag)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tout(w, \".IP \\\\(bu 2\\n\")\n\t\t}\n\t}\n}\n\nfunc (r *roffRenderer) handleTable(w io.Writer, node *blackfriday.Node, entering bool) {\n\tif entering {\n\t\tout(w, tableStart)\n\t\t// call walker to count cells (and rows?) so format section can be produced\n\t\tcolumns := countColumns(node)\n\t\tout(w, strings.Repeat(\"l \", columns)+\"\\n\")\n\t\tout(w, strings.Repeat(\"l \", columns)+\".\\n\")\n\t} else {\n\t\tout(w, tableEnd)\n\t}\n}\n\nfunc (r *roffRenderer) handleTableCell(w io.Writer, node *blackfriday.Node, entering bool) {\n\tif entering {\n\t\tvar start string\n\t\tif node.Prev != nil && node.Prev.Type == blackfriday.TableCell {\n\t\t\tstart = \"\\t\"\n\t\t}\n\t\tif node.IsHeader {\n\t\t\tstart += strongTag\n\t\t} else if nodeLiteralSize(node) > 30 {\n\t\t\tstart += tableCellStart\n\t\t}\n\t\tout(w, start)\n\t} else {\n\t\tvar end string\n\t\tif node.IsHeader {\n\t\t\tend = strongCloseTag\n\t\t} else if nodeLiteralSize(node) > 30 {\n\t\t\tend = tableCellEnd\n\t\t}\n\t\tif node.Next == nil && end != tableCellEnd {\n\t\t\t// Last cell: need to carriage return if we are at the end of the\n\t\t\t// header row and content isn't wrapped in a \"tablecell\"\n\t\t\tend += crTag\n\t\t}\n\t\tout(w, end)\n\t}\n}\n\nfunc nodeLiteralSize(node *blackfriday.Node) int {\n\ttotal := 0\n\tfor n := node.FirstChild; n != nil; n = n.FirstChild {\n\t\ttotal += len(n.Literal)\n\t}\n\treturn total\n}\n\n// because roff format requires knowing the column count before outputting any table\n// data we need to walk a table tree and count the columns\nfunc countColumns(node *blackfriday.Node) int {\n\tvar columns int\n\n\tnode.Walk(func(node *blackfriday.Node, entering bool) blackfriday.WalkStatus {\n\t\tswitch node.Type {\n\t\tcase blackfriday.TableRow:\n\t\t\tif !entering {\n\t\t\t\treturn blackfriday.Terminate\n\t\t\t}\n\t\tcase blackfriday.TableCell:\n\t\t\tif entering {\n\t\t\t\tcolumns++\n\t\t\t}\n\t\tdefault:\n\t\t}\n\t\treturn blackfriday.GoToNext\n\t})\n\treturn columns\n}\n\nfunc out(w io.Writer, output string) {\n\tio.WriteString(w, output) // nolint: errcheck\n}\n\nfunc escapeSpecialChars(w io.Writer, text []byte) {\n\tscanner := bufio.NewScanner(bytes.NewReader(text))\n\n\t// count the number of lines in the text\n\t// we need to know this to avoid adding a newline after the last line\n\tn := bytes.Count(text, []byte{'\\n'})\n\tidx := 0\n\n\tfor scanner.Scan() {\n\t\tdt := scanner.Bytes()\n\t\tif idx < n {\n\t\t\tidx++\n\t\t\tdt = append(dt, '\\n')\n\t\t}\n\t\tescapeSpecialCharsLine(w, dt)\n\t}\n\n\tif err := scanner.Err(); err != nil {\n\t\tpanic(err)\n\t}\n}\n\nfunc escapeSpecialCharsLine(w io.Writer, text []byte) {\n\tfor i := 0; i < len(text); i++ {\n\t\t// escape initial apostrophe or period\n\t\tif len(text) >= 1 && (text[0] == '\\'' || text[0] == '.') {\n\t\t\tout(w, \"\\\\&\")\n\t\t}\n\n\t\t// directly copy normal characters\n\t\torg := i\n\n\t\tfor i < len(text) && text[i] != '\\\\' {\n\t\t\ti++\n\t\t}\n\t\tif i > org {\n\t\t\tw.Write(text[org:i]) // nolint: errcheck\n\t\t}\n\n\t\t// escape a character\n\t\tif i >= len(text) {\n\t\t\tbreak\n\t\t}\n\n\t\tw.Write([]byte{'\\\\', text[i]}) // nolint: errcheck\n\t}\n}\n\n// bytesCut is a copy of [bytes.Cut] to provide compatibility with go1.17\n// and older. We can remove this once we drop support  for go1.17 and older.\nfunc bytesCut(s, sep []byte) (before, after []byte, found bool) {\n\tif i := bytes.Index(s, sep); i >= 0 {\n\t\treturn s[:i], s[i+len(sep):], true\n\t}\n\treturn s, nil, false\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/.gitignore",
    "content": "[568].out\n_go*\n_test*\n_obj\n"
  },
  {
    "path": "vendor/github.com/creack/pty/Dockerfile.golang",
    "content": "ARG GOVERSION=1.14\nFROM golang:${GOVERSION}\n\n# Set base env.\nARG GOOS=linux\nARG GOARCH=amd64\nENV GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 GOFLAGS='-v -ldflags=-s -ldflags=-w'\n\n# Pre compile the stdlib for 386/arm (32bits).\nRUN go build -a std\n\n# Add the code to the image.\nWORKDIR pty\nADD . .\n\n# Build the lib.\nRUN go build\n"
  },
  {
    "path": "vendor/github.com/creack/pty/Dockerfile.riscv",
    "content": "# NOTE: Using 1.13 as a base to build the RISCV compiler, the resulting version is based on go1.6.\nFROM golang:1.13\n\n# Clone and complie a riscv compatible version of the go compiler.\nRUN git clone https://review.gerrithub.io/riscv/riscv-go /riscv-go\n# riscvdev branch HEAD as of 2019-06-29.\nRUN cd /riscv-go && git checkout 04885fddd096d09d4450726064d06dd107e374bf\nENV PATH=/riscv-go/misc/riscv:/riscv-go/bin:$PATH\nRUN cd /riscv-go/src && GOROOT_BOOTSTRAP=$(go env GOROOT) ./make.bash\nENV GOROOT=/riscv-go\n\n# Set the base env.\nENV GOOS=linux GOARCH=riscv CGO_ENABLED=0 GOFLAGS='-v -ldflags=-s -ldflags=-w'\n\n# Pre compile the stdlib.\nRUN go build -a std\n\n# Add the code to the image.\nWORKDIR pty\nADD . .\n\n# Build the lib.\nRUN go build\n"
  },
  {
    "path": "vendor/github.com/creack/pty/LICENSE",
    "content": "Copyright (c) 2011 Keith Rarick\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated\ndocumentation files (the \"Software\"), to deal in the\nSoftware without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute,\nsublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall\nbe included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\nKIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\nWARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS\nOR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR\nOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/creack/pty/README.md",
    "content": "# pty\n\nPty is a Go package for using unix pseudo-terminals.\n\n## Install\n\n```sh\ngo get github.com/creack/pty\n```\n\n## Examples\n\nNote that those examples are for demonstration purpose only, to showcase how to use the library. They are not meant to be used in any kind of production environment.\n\n### Command\n\n```go\npackage main\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\n\t\"github.com/creack/pty\"\n)\n\nfunc main() {\n\tc := exec.Command(\"grep\", \"--color=auto\", \"bar\")\n\tf, err := pty.Start(c)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tgo func() {\n\t\tf.Write([]byte(\"foo\\n\"))\n\t\tf.Write([]byte(\"bar\\n\"))\n\t\tf.Write([]byte(\"baz\\n\"))\n\t\tf.Write([]byte{4}) // EOT\n\t}()\n\tio.Copy(os.Stdout, f)\n}\n```\n\n### Shell\n\n```go\npackage main\n\nimport (\n        \"io\"\n        \"log\"\n        \"os\"\n        \"os/exec\"\n        \"os/signal\"\n        \"syscall\"\n\n        \"github.com/creack/pty\"\n        \"golang.org/x/term\"\n)\n\nfunc test() error {\n        // Create arbitrary command.\n        c := exec.Command(\"bash\")\n\n        // Start the command with a pty.\n        ptmx, err := pty.Start(c)\n        if err != nil {\n                return err\n        }\n        // Make sure to close the pty at the end.\n        defer func() { _ = ptmx.Close() }() // Best effort.\n\n        // Handle pty size.\n        ch := make(chan os.Signal, 1)\n        signal.Notify(ch, syscall.SIGWINCH)\n        go func() {\n                for range ch {\n                        if err := pty.InheritSize(os.Stdin, ptmx); err != nil {\n                                log.Printf(\"error resizing pty: %s\", err)\n                        }\n                }\n        }()\n        ch <- syscall.SIGWINCH // Initial resize.\n        defer func() { signal.Stop(ch); close(ch) }() // Cleanup signals when done.\n\n        // Set stdin in raw mode.\n        oldState, err := term.MakeRaw(int(os.Stdin.Fd()))\n        if err != nil {\n                panic(err)\n        }\n        defer func() { _ = term.Restore(int(os.Stdin.Fd()), oldState) }() // Best effort.\n\n        // Copy stdin to the pty and the pty to stdout.\n        // NOTE: The goroutine will keep reading until the next keystroke before returning.\n        go func() { _, _ = io.Copy(ptmx, os.Stdin) }()\n        _, _ = io.Copy(os.Stdout, ptmx)\n\n        return nil\n}\n\nfunc main() {\n        if err := test(); err != nil {\n                log.Fatal(err)\n        }\n}\n```\n"
  },
  {
    "path": "vendor/github.com/creack/pty/asm_solaris_amd64.s",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n//+build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go\n//\n\nTEXT ·sysvicall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·sysvicall6(SB)\n\nTEXT ·rawSysvicall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·rawSysvicall6(SB)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/doc.go",
    "content": "// Package pty provides functions for working with Unix terminals.\npackage pty\n\nimport (\n\t\"errors\"\n\t\"os\"\n)\n\n// ErrUnsupported is returned if a function is not\n// available on the current platform.\nvar ErrUnsupported = errors.New(\"unsupported\")\n\n// Open a pty and its corresponding tty.\nfunc Open() (pty, tty *os.File, err error) {\n\treturn open()\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ioctl.go",
    "content": "//go:build !windows && go1.12\n// +build !windows,go1.12\n\npackage pty\n\nimport \"os\"\n\nfunc ioctl(f *os.File, cmd, ptr uintptr) error {\n\tsc, e := f.SyscallConn()\n\tif e != nil {\n\t\treturn ioctl_inner(f.Fd(), cmd, ptr) // fall back to blocking io (old behavior)\n\t}\n\n\tch := make(chan error, 1)\n\tdefer close(ch)\n\n\te = sc.Control(func(fd uintptr) { ch <- ioctl_inner(fd, cmd, ptr) })\n\tif e != nil {\n\t\treturn e\n\t}\n\te = <-ch\n\treturn e\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ioctl_bsd.go",
    "content": "//go:build darwin || dragonfly || freebsd || netbsd || openbsd\n// +build darwin dragonfly freebsd netbsd openbsd\n\npackage pty\n\n// from <sys/ioccom.h>\nconst (\n\t_IOC_VOID    uintptr = 0x20000000\n\t_IOC_OUT     uintptr = 0x40000000\n\t_IOC_IN      uintptr = 0x80000000\n\t_IOC_IN_OUT  uintptr = _IOC_OUT | _IOC_IN\n\t_IOC_DIRMASK         = _IOC_VOID | _IOC_OUT | _IOC_IN\n\n\t_IOC_PARAM_SHIFT = 13\n\t_IOC_PARAM_MASK  = (1 << _IOC_PARAM_SHIFT) - 1\n)\n\nfunc _IOC_PARM_LEN(ioctl uintptr) uintptr {\n\treturn (ioctl >> 16) & _IOC_PARAM_MASK\n}\n\nfunc _IOC(inout uintptr, group byte, ioctl_num uintptr, param_len uintptr) uintptr {\n\treturn inout | (param_len&_IOC_PARAM_MASK)<<16 | uintptr(group)<<8 | ioctl_num\n}\n\nfunc _IO(group byte, ioctl_num uintptr) uintptr {\n\treturn _IOC(_IOC_VOID, group, ioctl_num, 0)\n}\n\nfunc _IOR(group byte, ioctl_num uintptr, param_len uintptr) uintptr {\n\treturn _IOC(_IOC_OUT, group, ioctl_num, param_len)\n}\n\nfunc _IOW(group byte, ioctl_num uintptr, param_len uintptr) uintptr {\n\treturn _IOC(_IOC_IN, group, ioctl_num, param_len)\n}\n\nfunc _IOWR(group byte, ioctl_num uintptr, param_len uintptr) uintptr {\n\treturn _IOC(_IOC_IN_OUT, group, ioctl_num, param_len)\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ioctl_inner.go",
    "content": "//go:build !windows && !solaris && !aix\n// +build !windows,!solaris,!aix\n\npackage pty\n\nimport \"syscall\"\n\nconst (\n\tTIOCGWINSZ = syscall.TIOCGWINSZ\n\tTIOCSWINSZ = syscall.TIOCSWINSZ\n)\n\nfunc ioctl_inner(fd, cmd, ptr uintptr) error {\n\t_, _, e := syscall.Syscall(syscall.SYS_IOCTL, fd, cmd, ptr)\n\tif e != 0 {\n\t\treturn e\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ioctl_legacy.go",
    "content": "//go:build !windows && !go1.12\n// +build !windows,!go1.12\n\npackage pty\n\nimport \"os\"\n\nfunc ioctl(f *os.File, cmd, ptr uintptr) error {\n\treturn ioctl_inner(f.Fd(), cmd, ptr) // fall back to blocking io (old behavior)\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ioctl_solaris.go",
    "content": "//go:build solaris\n// +build solaris\n\npackage pty\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n//go:linkname procioctl libc_ioctl\nvar procioctl uintptr\n\nconst (\n\t// see /usr/include/sys/stropts.h\n\tI_PUSH = uintptr((int32('S')<<8 | 002))\n\tI_STR  = uintptr((int32('S')<<8 | 010))\n\tI_FIND = uintptr((int32('S')<<8 | 013))\n\n\t// see /usr/include/sys/ptms.h\n\tISPTM   = (int32('P') << 8) | 1\n\tUNLKPT  = (int32('P') << 8) | 2\n\tPTSSTTY = (int32('P') << 8) | 3\n\tZONEPT  = (int32('P') << 8) | 4\n\tOWNERPT = (int32('P') << 8) | 5\n\n\t// see /usr/include/sys/termios.h\n\tTIOCSWINSZ = (uint32('T') << 8) | 103\n\tTIOCGWINSZ = (uint32('T') << 8) | 104\n)\n\ntype strioctl struct {\n\ticCmd     int32\n\ticTimeout int32\n\ticLen     int32\n\ticDP      unsafe.Pointer\n}\n\n// Defined in asm_solaris_amd64.s.\nfunc sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc ioctl_inner(fd, cmd, ptr uintptr) error {\n\tif _, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, fd, cmd, ptr, 0, 0, 0); errno != 0 {\n\t\treturn errno\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ioctl_unsupported.go",
    "content": "//go:build aix\n// +build aix\n\npackage pty\n\nconst (\n\tTIOCGWINSZ = 0\n\tTIOCSWINSZ = 0\n)\n\nfunc ioctl_inner(fd, cmd, ptr uintptr) error {\n\treturn ErrUnsupported\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/mktypes.bash",
    "content": "#!/usr/bin/env bash\n\nGOOSARCH=\"${GOOS}_${GOARCH}\"\ncase \"$GOOSARCH\" in\n_* | *_ | _)\n\techo 'undefined $GOOS_$GOARCH:' \"$GOOSARCH\" 1>&2\n\texit 1\n\t;;\nesac\n\nGODEFS=\"go tool cgo -godefs\"\n\n$GODEFS types.go |gofmt > ztypes_$GOARCH.go\n\ncase $GOOS in\nfreebsd|dragonfly|netbsd|openbsd)\n\t$GODEFS types_$GOOS.go |gofmt > ztypes_$GOOSARCH.go\n\t;;\nesac\n"
  },
  {
    "path": "vendor/github.com/creack/pty/pty_darwin.go",
    "content": "//go:build darwin\n// +build darwin\n\npackage pty\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc open() (pty, tty *os.File, err error) {\n\tpFD, err := syscall.Open(\"/dev/ptmx\", syscall.O_RDWR|syscall.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tp := os.NewFile(uintptr(pFD), \"/dev/ptmx\")\n\t// In case of error after this point, make sure we close the ptmx fd.\n\tdefer func() {\n\t\tif err != nil {\n\t\t\t_ = p.Close() // Best effort.\n\t\t}\n\t}()\n\n\tsname, err := ptsname(p)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif err := grantpt(p); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif err := unlockpt(p); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tt, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn p, t, nil\n}\n\nfunc ptsname(f *os.File) (string, error) {\n\tn := make([]byte, _IOC_PARM_LEN(syscall.TIOCPTYGNAME))\n\n\terr := ioctl(f, syscall.TIOCPTYGNAME, uintptr(unsafe.Pointer(&n[0])))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tfor i, c := range n {\n\t\tif c == 0 {\n\t\t\treturn string(n[:i]), nil\n\t\t}\n\t}\n\treturn \"\", errors.New(\"TIOCPTYGNAME string not NUL-terminated\")\n}\n\nfunc grantpt(f *os.File) error {\n\treturn ioctl(f, syscall.TIOCPTYGRANT, 0)\n}\n\nfunc unlockpt(f *os.File) error {\n\treturn ioctl(f, syscall.TIOCPTYUNLK, 0)\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/pty_dragonfly.go",
    "content": "//go:build dragonfly\n// +build dragonfly\n\npackage pty\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// same code as pty_darwin.go\nfunc open() (pty, tty *os.File, err error) {\n\tp, err := os.OpenFile(\"/dev/ptmx\", os.O_RDWR, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\t// In case of error after this point, make sure we close the ptmx fd.\n\tdefer func() {\n\t\tif err != nil {\n\t\t\t_ = p.Close() // Best effort.\n\t\t}\n\t}()\n\n\tsname, err := ptsname(p)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif err := grantpt(p); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif err := unlockpt(p); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tt, err := os.OpenFile(sname, os.O_RDWR, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn p, t, nil\n}\n\nfunc grantpt(f *os.File) error {\n\t_, err := isptmaster(f)\n\treturn err\n}\n\nfunc unlockpt(f *os.File) error {\n\t_, err := isptmaster(f)\n\treturn err\n}\n\nfunc isptmaster(f *os.File) (bool, error) {\n\terr := ioctl(f, syscall.TIOCISPTMASTER, 0)\n\treturn err == nil, err\n}\n\nvar (\n\temptyFiodgnameArg fiodgnameArg\n\tioctl_FIODNAME    = _IOW('f', 120, unsafe.Sizeof(emptyFiodgnameArg))\n)\n\nfunc ptsname(f *os.File) (string, error) {\n\tname := make([]byte, _C_SPECNAMELEN)\n\tfa := fiodgnameArg{Name: (*byte)(unsafe.Pointer(&name[0])), Len: _C_SPECNAMELEN, Pad_cgo_0: [4]byte{0, 0, 0, 0}}\n\n\terr := ioctl(f, ioctl_FIODNAME, uintptr(unsafe.Pointer(&fa)))\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\tfor i, c := range name {\n\t\tif c == 0 {\n\t\t\ts := \"/dev/\" + string(name[:i])\n\t\t\treturn strings.Replace(s, \"ptm\", \"pts\", -1), nil\n\t\t}\n\t}\n\treturn \"\", errors.New(\"TIOCPTYGNAME string not NUL-terminated\")\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/pty_freebsd.go",
    "content": "//go:build freebsd\n// +build freebsd\n\npackage pty\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc posixOpenpt(oflag int) (fd int, err error) {\n\tr0, _, e1 := syscall.Syscall(syscall.SYS_POSIX_OPENPT, uintptr(oflag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn fd, err\n}\n\nfunc open() (pty, tty *os.File, err error) {\n\tfd, err := posixOpenpt(syscall.O_RDWR | syscall.O_CLOEXEC)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tp := os.NewFile(uintptr(fd), \"/dev/pts\")\n\t// In case of error after this point, make sure we close the pts fd.\n\tdefer func() {\n\t\tif err != nil {\n\t\t\t_ = p.Close() // Best effort.\n\t\t}\n\t}()\n\n\tsname, err := ptsname(p)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tt, err := os.OpenFile(\"/dev/\"+sname, os.O_RDWR, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn p, t, nil\n}\n\nfunc isptmaster(f *os.File) (bool, error) {\n\terr := ioctl(f, syscall.TIOCPTMASTER, 0)\n\treturn err == nil, err\n}\n\nvar (\n\temptyFiodgnameArg fiodgnameArg\n\tioctlFIODGNAME    = _IOW('f', 120, unsafe.Sizeof(emptyFiodgnameArg))\n)\n\nfunc ptsname(f *os.File) (string, error) {\n\tmaster, err := isptmaster(f)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif !master {\n\t\treturn \"\", syscall.EINVAL\n\t}\n\n\tconst n = _C_SPECNAMELEN + 1\n\tvar (\n\t\tbuf = make([]byte, n)\n\t\targ = fiodgnameArg{Len: n, Buf: (*byte)(unsafe.Pointer(&buf[0]))}\n\t)\n\tif err := ioctl(f, ioctlFIODGNAME, uintptr(unsafe.Pointer(&arg))); err != nil {\n\t\treturn \"\", err\n\t}\n\n\tfor i, c := range buf {\n\t\tif c == 0 {\n\t\t\treturn string(buf[:i]), nil\n\t\t}\n\t}\n\treturn \"\", errors.New(\"FIODGNAME string not NUL-terminated\")\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/pty_linux.go",
    "content": "//go:build linux\n// +build linux\n\npackage pty\n\nimport (\n\t\"os\"\n\t\"strconv\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc open() (pty, tty *os.File, err error) {\n\tp, err := os.OpenFile(\"/dev/ptmx\", os.O_RDWR, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\t// In case of error after this point, make sure we close the ptmx fd.\n\tdefer func() {\n\t\tif err != nil {\n\t\t\t_ = p.Close() // Best effort.\n\t\t}\n\t}()\n\n\tsname, err := ptsname(p)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif err := unlockpt(p); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tt, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0) //nolint:gosec // Expected Open from a variable.\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn p, t, nil\n}\n\nfunc ptsname(f *os.File) (string, error) {\n\tvar n _C_uint\n\terr := ioctl(f, syscall.TIOCGPTN, uintptr(unsafe.Pointer(&n))) //nolint:gosec // Expected unsafe pointer for Syscall call.\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn \"/dev/pts/\" + strconv.Itoa(int(n)), nil\n}\n\nfunc unlockpt(f *os.File) error {\n\tvar u _C_int\n\t// use TIOCSPTLCK with a pointer to zero to clear the lock\n\treturn ioctl(f, syscall.TIOCSPTLCK, uintptr(unsafe.Pointer(&u))) //nolint:gosec // Expected unsafe pointer for Syscall call.\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/pty_netbsd.go",
    "content": "//go:build netbsd\n// +build netbsd\n\npackage pty\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc open() (pty, tty *os.File, err error) {\n\tp, err := os.OpenFile(\"/dev/ptmx\", os.O_RDWR, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\t// In case of error after this point, make sure we close the ptmx fd.\n\tdefer func() {\n\t\tif err != nil {\n\t\t\t_ = p.Close() // Best effort.\n\t\t}\n\t}()\n\n\tsname, err := ptsname(p)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif err := grantpt(p); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\t// In NetBSD unlockpt() does nothing, so it isn't called here.\n\n\tt, err := os.OpenFile(sname, os.O_RDWR|syscall.O_NOCTTY, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\treturn p, t, nil\n}\n\nfunc ptsname(f *os.File) (string, error) {\n\t/*\n\t * from ptsname(3): The ptsname() function is equivalent to:\n\t * struct ptmget pm;\n\t * ioctl(fd, TIOCPTSNAME, &pm) == -1 ? NULL : pm.sn;\n\t */\n\tvar ptm ptmget\n\tif err := ioctl(f, uintptr(ioctl_TIOCPTSNAME), uintptr(unsafe.Pointer(&ptm))); err != nil {\n\t\treturn \"\", err\n\t}\n\tname := make([]byte, len(ptm.Sn))\n\tfor i, c := range ptm.Sn {\n\t\tname[i] = byte(c)\n\t\tif c == 0 {\n\t\t\treturn string(name[:i]), nil\n\t\t}\n\t}\n\treturn \"\", errors.New(\"TIOCPTSNAME string not NUL-terminated\")\n}\n\nfunc grantpt(f *os.File) error {\n\t/*\n\t * from grantpt(3): Calling grantpt() is equivalent to:\n\t * ioctl(fd, TIOCGRANTPT, 0);\n\t */\n\treturn ioctl(f, uintptr(ioctl_TIOCGRANTPT), 0)\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/pty_openbsd.go",
    "content": "//go:build openbsd\n// +build openbsd\n\npackage pty\n\nimport (\n\t\"os\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc cInt8ToString(in []int8) string {\n\tvar s []byte\n\tfor _, v := range in {\n\t\tif v == 0 {\n\t\t\tbreak\n\t\t}\n\t\ts = append(s, byte(v))\n\t}\n\treturn string(s)\n}\n\nfunc open() (pty, tty *os.File, err error) {\n\t/*\n\t * from ptm(4):\n\t * The PTMGET command allocates a free pseudo terminal, changes its\n\t * ownership to the caller, revokes the access privileges for all previous\n\t * users, opens the file descriptors for the pty and tty devices and\n\t * returns them to the caller in struct ptmget.\n\t */\n\n\tp, err := os.OpenFile(\"/dev/ptm\", os.O_RDWR|syscall.O_CLOEXEC, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tdefer p.Close()\n\n\tvar ptm ptmget\n\tif err := ioctl(p, uintptr(ioctl_PTMGET), uintptr(unsafe.Pointer(&ptm))); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tpty = os.NewFile(uintptr(ptm.Cfd), cInt8ToString(ptm.Cn[:]))\n\ttty = os.NewFile(uintptr(ptm.Sfd), cInt8ToString(ptm.Sn[:]))\n\n\treturn pty, tty, nil\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/pty_solaris.go",
    "content": "//go:build solaris\n// +build solaris\n\npackage pty\n\n/* based on:\nhttp://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/pt.c\n*/\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"strconv\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc open() (pty, tty *os.File, err error) {\n\tptmxfd, err := syscall.Open(\"/dev/ptmx\", syscall.O_RDWR|syscall.O_NOCTTY, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tp := os.NewFile(uintptr(ptmxfd), \"/dev/ptmx\")\n\t// In case of error after this point, make sure we close the ptmx fd.\n\tdefer func() {\n\t\tif err != nil {\n\t\t\t_ = p.Close() // Best effort.\n\t\t}\n\t}()\n\n\tsname, err := ptsname(p)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif err := grantpt(p); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tif err := unlockpt(p); err != nil {\n\t\treturn nil, nil, err\n\t}\n\n\tptsfd, err := syscall.Open(sname, os.O_RDWR|syscall.O_NOCTTY, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tt := os.NewFile(uintptr(ptsfd), sname)\n\n\t// In case of error after this point, make sure we close the pts fd.\n\tdefer func() {\n\t\tif err != nil {\n\t\t\t_ = t.Close() // Best effort.\n\t\t}\n\t}()\n\n\t// pushing terminal driver STREAMS modules as per pts(7)\n\tfor _, mod := range []string{\"ptem\", \"ldterm\", \"ttcompat\"} {\n\t\tif err := streamsPush(t, mod); err != nil {\n\t\t\treturn nil, nil, err\n\t\t}\n\t}\n\n\treturn p, t, nil\n}\n\nfunc ptsname(f *os.File) (string, error) {\n\tdev, err := ptsdev(f)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tfn := \"/dev/pts/\" + strconv.FormatInt(int64(dev), 10)\n\n\tif err := syscall.Access(fn, 0); err != nil {\n\t\treturn \"\", err\n\t}\n\treturn fn, nil\n}\n\nfunc unlockpt(f *os.File) error {\n\tistr := strioctl{\n\t\ticCmd:     UNLKPT,\n\t\ticTimeout: 0,\n\t\ticLen:     0,\n\t\ticDP:      nil,\n\t}\n\treturn ioctl(f, I_STR, uintptr(unsafe.Pointer(&istr)))\n}\n\nfunc minor(x uint64) uint64 { return x & 0377 }\n\nfunc ptsdev(f *os.File) (uint64, error) {\n\tistr := strioctl{\n\t\ticCmd:     ISPTM,\n\t\ticTimeout: 0,\n\t\ticLen:     0,\n\t\ticDP:      nil,\n\t}\n\n\tif err := ioctl(f, I_STR, uintptr(unsafe.Pointer(&istr))); err != nil {\n\t\treturn 0, err\n\t}\n\tvar errors = make(chan error, 1)\n\tvar results = make(chan uint64, 1)\n\tdefer close(errors)\n\tdefer close(results)\n\n\tvar err error\n\tvar sc syscall.RawConn\n\tsc, err = f.SyscallConn()\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\terr = sc.Control(func(fd uintptr) {\n\t\tvar status syscall.Stat_t\n\t\tif err := syscall.Fstat(int(fd), &status); err != nil {\n\t\t\tresults <- 0\n\t\t\terrors <- err\n\t\t}\n\t\tresults <- uint64(minor(status.Rdev))\n\t\terrors <- nil\n\t})\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn <-results, <-errors\n}\n\ntype ptOwn struct {\n\trUID int32\n\trGID int32\n}\n\nfunc grantpt(f *os.File) error {\n\tif _, err := ptsdev(f); err != nil {\n\t\treturn err\n\t}\n\tpto := ptOwn{\n\t\trUID: int32(os.Getuid()),\n\t\t// XXX should first attempt to get gid of DEFAULT_TTY_GROUP=\"tty\"\n\t\trGID: int32(os.Getgid()),\n\t}\n\tistr := strioctl{\n\t\ticCmd:     OWNERPT,\n\t\ticTimeout: 0,\n\t\ticLen:     int32(unsafe.Sizeof(strioctl{})),\n\t\ticDP:      unsafe.Pointer(&pto),\n\t}\n\tif err := ioctl(f, I_STR, uintptr(unsafe.Pointer(&istr))); err != nil {\n\t\treturn errors.New(\"access denied\")\n\t}\n\treturn nil\n}\n\n// streamsPush pushes STREAMS modules if not already done so.\nfunc streamsPush(f *os.File, mod string) error {\n\tbuf := []byte(mod)\n\n\t// XXX I_FIND is not returning an error when the module\n\t// is already pushed even though truss reports a return\n\t// value of 1. A bug in the Go Solaris syscall interface?\n\t// XXX without this we are at risk of the issue\n\t// https://www.illumos.org/issues/9042\n\t// but since we are not using libc or XPG4.2, we should not be\n\t// double-pushing modules\n\n\tif err := ioctl(f, I_FIND, uintptr(unsafe.Pointer(&buf[0]))); err != nil {\n\t\treturn nil\n\t}\n\treturn ioctl(f, I_PUSH, uintptr(unsafe.Pointer(&buf[0])))\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/pty_unsupported.go",
    "content": "//go:build !linux && !darwin && !freebsd && !dragonfly && !netbsd && !openbsd && !solaris\n// +build !linux,!darwin,!freebsd,!dragonfly,!netbsd,!openbsd,!solaris\n\npackage pty\n\nimport (\n\t\"os\"\n)\n\nfunc open() (pty, tty *os.File, err error) {\n\treturn nil, nil, ErrUnsupported\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/run.go",
    "content": "package pty\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"syscall\"\n)\n\n// Start assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout,\n// and c.Stderr, calls c.Start, and returns the File of the tty's\n// corresponding pty.\n//\n// Starts the process in a new session and sets the controlling terminal.\nfunc Start(cmd *exec.Cmd) (*os.File, error) {\n\treturn StartWithSize(cmd, nil)\n}\n\n// StartWithAttrs assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout,\n// and c.Stderr, calls c.Start, and returns the File of the tty's\n// corresponding pty.\n//\n// This will resize the pty to the specified size before starting the command if a size is provided.\n// The `attrs` parameter overrides the one set in c.SysProcAttr.\n//\n// This should generally not be needed. Used in some edge cases where it is needed to create a pty\n// without a controlling terminal.\nfunc StartWithAttrs(c *exec.Cmd, sz *Winsize, attrs *syscall.SysProcAttr) (*os.File, error) {\n\tpty, tty, err := Open()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer func() { _ = tty.Close() }() // Best effort.\n\n\tif sz != nil {\n\t\tif err := Setsize(pty, sz); err != nil {\n\t\t\t_ = pty.Close() // Best effort.\n\t\t\treturn nil, err\n\t\t}\n\t}\n\tif c.Stdout == nil {\n\t\tc.Stdout = tty\n\t}\n\tif c.Stderr == nil {\n\t\tc.Stderr = tty\n\t}\n\tif c.Stdin == nil {\n\t\tc.Stdin = tty\n\t}\n\n\tc.SysProcAttr = attrs\n\n\tif err := c.Start(); err != nil {\n\t\t_ = pty.Close() // Best effort.\n\t\treturn nil, err\n\t}\n\treturn pty, err\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/start.go",
    "content": "//go:build !windows\n// +build !windows\n\npackage pty\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"syscall\"\n)\n\n// StartWithSize assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout,\n// and c.Stderr, calls c.Start, and returns the File of the tty's\n// corresponding pty.\n//\n// This will resize the pty to the specified size before starting the command.\n// Starts the process in a new session and sets the controlling terminal.\nfunc StartWithSize(cmd *exec.Cmd, ws *Winsize) (*os.File, error) {\n\tif cmd.SysProcAttr == nil {\n\t\tcmd.SysProcAttr = &syscall.SysProcAttr{}\n\t}\n\tcmd.SysProcAttr.Setsid = true\n\tcmd.SysProcAttr.Setctty = true\n\treturn StartWithAttrs(cmd, ws, cmd.SysProcAttr)\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/start_windows.go",
    "content": "//go:build windows\n// +build windows\n\npackage pty\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n)\n\n// StartWithSize assigns a pseudo-terminal tty os.File to c.Stdin, c.Stdout,\n// and c.Stderr, calls c.Start, and returns the File of the tty's\n// corresponding pty.\n//\n// This will resize the pty to the specified size before starting the command.\n// Starts the process in a new session and sets the controlling terminal.\nfunc StartWithSize(cmd *exec.Cmd, ws *Winsize) (*os.File, error) {\n\treturn nil, ErrUnsupported\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/test_crosscompile.sh",
    "content": "#!/usr/bin/env sh\n\n# Test script checking that all expected os/arch compile properly.\n# Does not actually test the logic, just the compilation so we make sure we don't break code depending on the lib.\n\necho2() {\n  echo $@ >&2\n}\n\ntrap end 0\nend() {\n  [ \"$?\" = 0 ] && echo2 \"Pass.\" || (echo2 \"Fail.\"; exit 1)\n}\n\ncross() {\n  os=$1\n  shift\n  echo2 \"Build for $os.\"\n  for arch in $@; do\n    echo2 \"  - $os/$arch\"\n    GOOS=$os GOARCH=$arch go build\n  done\n  echo2\n}\n\nset -e\n\ncross linux     amd64 386 arm arm64 ppc64 ppc64le s390x mips mipsle mips64 mips64le riscv64\ncross darwin    amd64 arm64\ncross freebsd   amd64 386 arm arm64 riscv64\ncross netbsd    amd64 386 arm arm64\ncross openbsd   amd64 386 arm arm64\ncross dragonfly amd64\ncross solaris   amd64\n\n# Not expected to work but should still compile.\ncross windows amd64 386 arm\n\n# TODO: Fix compilation error on openbsd/arm.\n# TODO: Merge the solaris PR.\n\n# Some os/arch require a different compiler. Run in docker.\nif ! hash docker; then\n  # If docker is not present, stop here.\n  return\nfi\n\necho2 \"Build for linux.\"\necho2 \"  - linux/riscv\"\ndocker build -t creack-pty-test -f Dockerfile.riscv .\n\n# Golang dropped support for darwin 32bits since go1.15. Make sure the lib still compile with go1.14 on those archs.\necho2 \"Build for darwin (32bits).\"\necho2 \"  - darwin/386\"\ndocker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.14 --build-arg=GOOS=darwin --build-arg=GOARCH=386 .\necho2 \"  - darwin/arm\"\ndocker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.14 --build-arg=GOOS=darwin --build-arg=GOARCH=arm .\n\n# Run a single test for an old go version. Would be best with go1.0, but not available on Dockerhub.\n# Using 1.6 as it is the base version for the RISCV compiler.\n# Would also be better to run all the tests, not just one, need to refactor this file to allow for specifc archs per version.\necho2 \"Build for linux - go1.6.\"\necho2 \"  - linux/amd64\"\ndocker build -t creack-pty-test -f Dockerfile.golang --build-arg=GOVERSION=1.6 --build-arg=GOOS=linux --build-arg=GOARCH=amd64 .\n"
  },
  {
    "path": "vendor/github.com/creack/pty/winsize.go",
    "content": "package pty\n\nimport \"os\"\n\n// InheritSize applies the terminal size of pty to tty. This should be run\n// in a signal handler for syscall.SIGWINCH to automatically resize the tty when\n// the pty receives a window size change notification.\nfunc InheritSize(pty, tty *os.File) error {\n\tsize, err := GetsizeFull(pty)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif err := Setsize(tty, size); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// Getsize returns the number of rows (lines) and cols (positions\n// in each line) in terminal t.\nfunc Getsize(t *os.File) (rows, cols int, err error) {\n\tws, err := GetsizeFull(t)\n\tif err != nil {\n\t\treturn 0, 0, err\n\t}\n\treturn int(ws.Rows), int(ws.Cols), nil\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/winsize_unix.go",
    "content": "//go:build !windows\n// +build !windows\n\npackage pty\n\nimport (\n\t\"os\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Winsize describes the terminal size.\ntype Winsize struct {\n\tRows uint16 // ws_row: Number of rows (in cells)\n\tCols uint16 // ws_col: Number of columns (in cells)\n\tX    uint16 // ws_xpixel: Width in pixels\n\tY    uint16 // ws_ypixel: Height in pixels\n}\n\n// Setsize resizes t to s.\nfunc Setsize(t *os.File, ws *Winsize) error {\n\t//nolint:gosec // Expected unsafe pointer for Syscall call.\n\treturn ioctl(t, syscall.TIOCSWINSZ, uintptr(unsafe.Pointer(ws)))\n}\n\n// GetsizeFull returns the full terminal size description.\nfunc GetsizeFull(t *os.File) (size *Winsize, err error) {\n\tvar ws Winsize\n\n\t//nolint:gosec // Expected unsafe pointer for Syscall call.\n\tif err := ioctl(t, syscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &ws, nil\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/winsize_unsupported.go",
    "content": "//go:build windows\n// +build windows\n\npackage pty\n\nimport (\n\t\"os\"\n)\n\n// Winsize is a dummy struct to enable compilation on unsupported platforms.\ntype Winsize struct {\n\tRows, Cols, X, Y uint16\n}\n\n// Setsize resizes t to s.\nfunc Setsize(*os.File, *Winsize) error {\n\treturn ErrUnsupported\n}\n\n// GetsizeFull returns the full terminal size description.\nfunc GetsizeFull(*os.File) (*Winsize, error) {\n\treturn nil, ErrUnsupported\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_386.go",
    "content": "//go:build 386\n// +build 386\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_amd64.go",
    "content": "//go:build amd64\n// +build amd64\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_arm.go",
    "content": "//go:build arm\n// +build arm\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_arm64.go",
    "content": "//go:build arm64\n// +build arm64\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_dragonfly_amd64.go",
    "content": "//go:build amd64 && dragonfly\n// +build amd64,dragonfly\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_dragonfly.go\n\npackage pty\n\nconst (\n\t_C_SPECNAMELEN = 0x3f\n)\n\ntype fiodgnameArg struct {\n\tName      *byte\n\tLen       uint32\n\tPad_cgo_0 [4]byte\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_freebsd_386.go",
    "content": "//go:build 386 && freebsd\n// +build 386,freebsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_freebsd.go\n\npackage pty\n\nconst (\n\t_C_SPECNAMELEN = 0x3f\n)\n\ntype fiodgnameArg struct {\n\tLen int32\n\tBuf *byte\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_freebsd_amd64.go",
    "content": "//go:build amd64 && freebsd\n// +build amd64,freebsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_freebsd.go\n\npackage pty\n\nconst (\n\t_C_SPECNAMELEN = 0x3f\n)\n\ntype fiodgnameArg struct {\n\tLen       int32\n\tPad_cgo_0 [4]byte\n\tBuf       *byte\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_freebsd_arm.go",
    "content": "//go:build arm && freebsd\n// +build arm,freebsd\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_freebsd.go\n\npackage pty\n\nconst (\n\t_C_SPECNAMELEN = 0x3f\n)\n\ntype fiodgnameArg struct {\n\tLen int32\n\tBuf *byte\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_freebsd_arm64.go",
    "content": "//go:build arm64 && freebsd\n// +build arm64,freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs types_freebsd.go\n\npackage pty\n\nconst (\n\t_C_SPECNAMELEN = 0xff\n)\n\ntype fiodgnameArg struct {\n\tLen int32\n\tBuf *byte\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_freebsd_ppc64.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types_freebsd.go\n\npackage pty\n\nconst (\n\t_C_SPECNAMELEN = 0x3f\n)\n\ntype fiodgnameArg struct {\n\tLen       int32\n\tPad_cgo_0 [4]byte\n\tBuf       *byte\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_freebsd_riscv64.go",
    "content": "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs types_freebsd.go\n\npackage pty\n\nconst (\n\t_C_SPECNAMELEN = 0x3f\n)\n\ntype fiodgnameArg struct {\n\tLen int32\n\tBuf *byte\n}\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_loong64.go",
    "content": "//go:build loong64\n// +build loong64\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_mipsx.go",
    "content": "//go:build (mips || mipsle || mips64 || mips64le) && linux\n// +build mips mipsle mips64 mips64le\n// +build linux\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_netbsd_32bit_int.go",
    "content": "//go:build (386 || amd64 || arm || arm64) && netbsd\n// +build 386 amd64 arm arm64\n// +build netbsd\n\npackage pty\n\ntype ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [1024]int8\n\tSn  [1024]int8\n}\n\nvar (\n\tioctl_TIOCPTSNAME = 0x48087448\n\tioctl_TIOCGRANTPT = 0x20007447\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_openbsd_32bit_int.go",
    "content": "//go:build (386 || amd64 || arm || arm64 || mips64) && openbsd\n// +build 386 amd64 arm arm64 mips64\n// +build openbsd\n\npackage pty\n\ntype ptmget struct {\n\tCfd int32\n\tSfd int32\n\tCn  [16]int8\n\tSn  [16]int8\n}\n\nvar ioctl_PTMGET = 0x40287401\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_ppc.go",
    "content": "// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_ppc64.go",
    "content": "//go:build ppc64\n// +build ppc64\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_ppc64le.go",
    "content": "//go:build ppc64le\n// +build ppc64le\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_riscvx.go",
    "content": "//go:build riscv || riscv64\n// +build riscv riscv64\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_s390x.go",
    "content": "//go:build s390x\n// +build s390x\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/creack/pty/ztypes_sparcx.go",
    "content": "//go:build sparc || sparc64\n// +build sparc sparc64\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs types.go\n\npackage pty\n\ntype (\n\t_C_int  int32\n\t_C_uint uint32\n)\n"
  },
  {
    "path": "vendor/github.com/derekparker/trie/v3/.gitignore",
    "content": "*.test\n"
  },
  {
    "path": "vendor/github.com/derekparker/trie/v3/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Derek Parker\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/derekparker/trie/v3/README.md",
    "content": "[![GoDoc](https://godoc.org/github.com/derekparker/trie?status.svg)](https://godoc.org/github.com/derekparker/trie)\n\n# Trie\nData structure and relevant algorithms for extremely fast prefix/fuzzy string searching.\n\n## Usage\n\nCreate a Trie with:\n\n```Go\nt := trie.New()\n```\n\nAdd Keys with:\n\n```Go\n// Add can take in meta information which can be stored with the key.\n// i.e. you could store any information you would like to associate with\n// this particular key.\nt.Add(\"foobar\", 1)\n```\n\nFind a key with:\n\n```Go\nnode, ok := t.Find(\"foobar\")\nmeta := node.Meta()\n// use meta with meta.(type)\n```\n\nRemove Keys with:\n\n```Go\nt.Remove(\"foobar\")\n```\n\nPrefix search with:\n\n```Go\nt.PrefixSearch(\"foo\")\n```\n\nFast test for valid prefix:\n```Go\nt.HasKeysWithPrefix(\"foo\")\n```\n\nFuzzy search with:\n\n```Go\nt.FuzzySearch(\"fb\")\n```\n\n## Contributing\nFork this repo and run tests with:\n\n\tgo test\n\nCreate a feature branch, write your tests and code and submit a pull request.\n\n## License\nMIT\n"
  },
  {
    "path": "vendor/github.com/derekparker/trie/v3/trie.go",
    "content": "// Implementation of an R-Way Trie data structure.\n//\n// A Trie has a root Node which is the base of the tree.\n// Each subsequent Node has a letter and children, which are\n// nodes that have letter values associated with them.\npackage trie\n\nimport (\n\t\"iter\"\n\t\"sort\"\n\t\"sync\"\n)\n\ntype node[T any] struct {\n\tmask     uint64\n\tparent   *node[T]\n\tchildren map[rune]*node[T]\n\tmeta     T\n\tpath     *string // pointer to avoid storing empty strings\n\n\tval       rune\n\tdepth     int32\n\ttermCount int32\n}\n\n// Trie is a data structure that stores a set of strings.\ntype Trie[T any] struct {\n\tmu   sync.RWMutex\n\troot *node[T]\n\tsize int\n}\n\ntype ByKeys []string\n\nfunc (a ByKeys) Len() int           { return len(a) }\nfunc (a ByKeys) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\nfunc (a ByKeys) Less(i, j int) bool { return len(a[i]) < len(a[j]) }\n\nconst nul = 0x0\n\n// Pool for reusing node slices in collection operations\nvar nodeSlicePool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn make([]*node[any], 0, 64)\n\t},\n}\n\n// Pool for reusing string slices in collection operations\nvar stringSlicePool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn make([]string, 0, 64)\n\t},\n}\n\n// Pool for FuzzySearch potentialSubtree slices\nvar potentialSubtreePool = sync.Pool{\n\tNew: func() interface{} {\n\t\treturn make([]potentialSubtree[any], 0, 128)\n\t},\n}\n\n// New creates a new Trie with an initialized root Node.\nfunc New[T any]() *Trie[T] {\n\treturn &Trie[T]{\n\t\troot: &node[T]{depth: 0}, // Lazy init children map\n\t\tsize: 0,\n\t}\n}\n\n// AllKeyValuesIter returns a sequence of all key-value pairs in the trie.\nfunc (t *Trie[T]) AllKeyValuesIter() iter.Seq2[string, T] {\n\treturn collectIter(t.root)\n}\n\n// AllKeyValues returns a map of all key-value pairs in the trie.\nfunc (t *Trie[T]) AllKeyValues() map[string]T {\n\tt.mu.RLock()\n\tdefer t.mu.RUnlock()\n\n\tresult := make(map[string]T, t.size)\n\tfor key, value := range collectIter(t.root) {\n\t\tresult[key] = value\n\t}\n\treturn result\n}\n\n// Add adds the key to the Trie, including meta data.\nfunc (t *Trie[T]) Add(key string, meta T) *node[T] {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\n\tt.size++\n\trunes := []rune(key)\n\tbitmask := maskruneslice(runes)\n\tnd := t.root\n\tnd.mask |= bitmask\n\tnd.termCount++\n\tfor i := range runes {\n\t\tr := runes[i]\n\t\tbitmask = maskruneslice(runes[i:])\n\t\tif nd.children != nil && len(nd.children) > 0 {\n\t\t\tif n, ok := nd.children[r]; ok {\n\t\t\t\tnd = n\n\t\t\t\tnd.mask |= bitmask\n\t\t\t} else {\n\t\t\t\tnd = nd.newEmptyChild(r, bitmask)\n\t\t\t}\n\t\t} else {\n\t\t\tnd = nd.newEmptyChild(r, bitmask)\n\t\t}\n\t\tnd.termCount++\n\t}\n\tnd = nd.newChild(nul, 0, meta, key)\n\n\treturn nd\n}\n\n// Find finds and returns meta data associated\n// with `key`.\nfunc (t *Trie[T]) Find(key string) (*node[T], bool) {\n\tt.mu.RLock()\n\tdefer t.mu.RUnlock()\n\n\tnd := findNode(t.root, []rune(key))\n\tif nd == nil {\n\t\treturn nil, false\n\t}\n\n\tif nd.children == nil {\n\t\treturn nil, false\n\t}\n\tnd, ok := nd.children[nul]\n\tif !ok || nd.path == nil {\n\t\treturn nil, false\n\t}\n\n\treturn nd, true\n}\n\nfunc (t *Trie[T]) HasKeysWithPrefix(key string) bool {\n\tt.mu.RLock()\n\tdefer t.mu.RUnlock()\n\n\tnd := findNode(t.root, []rune(key))\n\treturn nd != nil\n}\n\n// Remove removes a key from the trie, ensuring that\n// all bitmasks up to root are appropriately recalculated.\nfunc (t *Trie[T]) Remove(key string) {\n\tt.mu.Lock()\n\tdefer t.mu.Unlock()\n\n\tvar (\n\t\trs = []rune(key)\n\t\tnd = findNode(t.root, []rune(key))\n\t)\n\n\tif nd == nil {\n\t\treturn\n\t}\n\n\tt.size--\n\tfor n := nd.parent; n != nil; n = n.parent {\n\t\tif n == t.root {\n\t\t\tt.root = &node[T]{} // Lazy init children map\n\t\t\tbreak\n\t\t}\n\n\t\tif n.children != nil && len(n.children) > 1 {\n\t\t\tn.removeChild(rs[n.depth])\n\t\t\tbreak\n\t\t}\n\t}\n}\n\n// Keys returns all the keys currently stored in the trie.\nfunc (t *Trie[T]) Keys() []string {\n\tt.mu.RLock()\n\tdefer t.mu.RUnlock()\n\n\tif t.size == 0 {\n\t\treturn []string{}\n\t}\n\n\treturn t.PrefixSearch(\"\")\n}\n\n// FuzzySearch performs a fuzzy search against the keys in the trie.\n// FuzzySearch performs a fuzzy search against the keys in the trie, returning all keys\n// with the given prefix. Results are returned sorted.\nfunc (t *Trie[T]) FuzzySearch(pre string) []string {\n\tt.mu.RLock()\n\tdefer t.mu.RUnlock()\n\n\tkeys := make([]string, 0, t.size)\n\tfor key := range fuzzycollectIter(t.root, []rune(pre)) {\n\t\tkeys = append(keys, key)\n\t}\n\tsort.Sort(ByKeys(keys))\n\treturn keys\n}\n\n// FuzzySearchIter performs a fuzzy search and returns an iterator over matching keys.\n// Unlike FuzzySearch, the keys are not sorted - they are yielded as they are found.\n// This provides lazy evaluation and is more memory efficient for large result sets.\nfunc (t *Trie[T]) FuzzySearchIter(pre string) iter.Seq[string] {\n\tt.mu.RLock()\n\tdefer t.mu.RUnlock()\n\n\treturn fuzzycollectIter(t.root, []rune(pre))\n}\n\n// PrefixSearch performs a prefix search against the keys in the trie.\nfunc (t *Trie[T]) PrefixSearch(pre string) []string {\n\t// Use PrefixSearchIter internally to avoid code duplication\n\tvar keys []string\n\tfor key := range t.PrefixSearchIter(pre) {\n\t\tkeys = append(keys, key)\n\t}\n\treturn keys\n}\n\n// PrefixSearchIter performs a prefix search and returns an iterator over matching key-value pairs.\n// Unlike PrefixSearch, this returns an iterator that yields both keys and their associated values.\n// This provides lazy evaluation and is more memory efficient for large result sets.\nfunc (t *Trie[T]) PrefixSearchIter(pre string) iter.Seq2[string, T] {\n\tt.mu.RLock()\n\tdefer t.mu.RUnlock()\n\n\tnd := findNode(t.root, []rune(pre))\n\tif nd == nil {\n\t\t// Return an empty iterator if no node is found\n\t\treturn func(yield func(string, T) bool) {}\n\t}\n\n\treturn collectIter(nd)\n}\n\n// newChild creates and returns a pointer to a new child for the node.\nfunc (n *node[T]) newChild(val rune, bitmask uint64, meta T, pathStr ...string) *node[T] {\n\tnode := &node[T]{\n\t\tval:    val,\n\t\tmask:   bitmask,\n\t\tmeta:   meta,\n\t\tparent: n,\n\t\tdepth:  n.depth + 1,\n\t}\n\t// Store path for terminal nodes\n\tif len(pathStr) > 0 {\n\t\tnode.path = &pathStr[0]\n\t}\n\tn.ensureChildren()\n\tn.children[node.val] = node\n\tn.mask |= bitmask\n\treturn node\n}\n\n// newEmptyChild creates and returns a pointer to a new child for the node.\nfunc (n *node[T]) newEmptyChild(val rune, bitmask uint64) *node[T] {\n\tnode := &node[T]{\n\t\tval:    val,\n\t\tmask:   bitmask,\n\t\tparent: n,\n\t\tdepth:  n.depth + 1,\n\t}\n\tn.ensureChildren()\n\tn.children[node.val] = node\n\tn.mask |= bitmask\n\treturn node\n}\n\nfunc (n *node[T]) removeChild(r rune) {\n\tdelete(n.children, r)\n\tfor nd := n.parent; nd != nil; nd = nd.parent {\n\t\tnd.mask ^= nd.mask\n\t\tnd.mask |= uint64(1) << uint64(nd.val-'a')\n\t\tif nd.children != nil {\n\t\t\tfor _, c := range nd.children {\n\t\t\t\tnd.mask |= c.mask\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Val returns the value of the node.\nfunc (n *node[T]) Val() T {\n\treturn n.meta\n}\n\n// ensureChildren lazily initializes the children map if needed\nfunc (n *node[T]) ensureChildren() {\n\tif n.children == nil {\n\t\tn.children = make(map[rune]*node[T])\n\t}\n}\n\n// reconstructPath builds the full path from root to this node\nfunc (n *node[T]) reconstructPath() string {\n\tif n.parent == nil {\n\t\treturn \"\"\n\t}\n\tif n.val == nul {\n\t\t// Terminal node - return parent's path\n\t\treturn n.parent.reconstructPath()\n\t}\n\treturn n.parent.reconstructPath() + string(n.val)\n}\n\nfunc findNode[T any](nd *node[T], runes []rune) *node[T] {\n\tif nd == nil {\n\t\treturn nil\n\t}\n\n\tif len(runes) == 0 {\n\t\treturn nd\n\t}\n\n\tif nd.children == nil {\n\t\treturn nil\n\t}\n\tn, ok := nd.children[runes[0]]\n\tif !ok {\n\t\treturn nil\n\t}\n\n\tvar nrunes []rune\n\tif len(runes) > 1 {\n\t\tnrunes = runes[1:]\n\t} else {\n\t\tnrunes = runes[0:0]\n\t}\n\n\treturn findNode(n, nrunes)\n}\n\n// maskruneslice creates a bitmask for the given runes.\n// Optimized to eliminate bounds checking and enable vectorization.\n//\n//go:inline\nfunc maskruneslice(rs []rune) uint64 {\n\t// Use 4 accumulators for better instruction-level parallelism\n\tvar m0, m1, m2, m3 uint64\n\n\t// Process 4 elements at a time using slice patterns for BCE\n\tfor len(rs) >= 4 {\n\t\t// Compiler knows rs[:4] is safe when len(rs) >= 4\n\t\t// This pattern eliminates all bounds checks\n\t\tr := rs[:4:4] // Full slice expression prevents capacity growth\n\n\t\t// No bounds checks on these accesses\n\t\tm0 |= uint64(1) << uint64(r[0]-'a')\n\t\tm1 |= uint64(1) << uint64(r[1]-'a')\n\t\tm2 |= uint64(1) << uint64(r[2]-'a')\n\t\tm3 |= uint64(1) << uint64(r[3]-'a')\n\n\t\trs = rs[4:]\n\t}\n\n\t// Handle remaining elements (0-3)\n\t// Process remaining with explicit length checks for BCE\n\tswitch len(rs) {\n\tcase 3:\n\t\tm0 |= uint64(1) << uint64(rs[0]-'a')\n\t\tm1 |= uint64(1) << uint64(rs[1]-'a')\n\t\tm2 |= uint64(1) << uint64(rs[2]-'a')\n\tcase 2:\n\t\tm0 |= uint64(1) << uint64(rs[0]-'a')\n\t\tm1 |= uint64(1) << uint64(rs[1]-'a')\n\tcase 1:\n\t\tm0 |= uint64(1) << uint64(rs[0]-'a')\n\t}\n\n\t// Combine all accumulators\n\treturn m0 | m1 | m2 | m3\n}\n\n// collectIter returns an iterator over all key-value pairs starting from the given node\nfunc collectIter[T any](nd *node[T]) iter.Seq2[string, T] {\n\treturn func(yield func(string, T) bool) {\n\t\tchildrenCount := 0\n\t\tif nd.children != nil {\n\t\t\tchildrenCount = len(nd.children)\n\t\t}\n\t\tnodes := make([]*node[T], 1, childrenCount+1)\n\t\tnodes[0] = nd\n\t\tfor len(nodes) > 0 {\n\t\t\ti := len(nodes) - 1\n\t\t\tn := nodes[i]\n\t\t\tnodes = nodes[:i]\n\t\t\tif n.children != nil {\n\t\t\t\tfor _, c := range n.children {\n\t\t\t\t\tnodes = append(nodes, c)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif n.path != nil {\n\t\t\t\tif !yield(*n.path, n.meta) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\ntype potentialSubtree[T any] struct {\n\tidx  int\n\tnode *node[T]\n}\n\n// fuzzycollectIter performs a fuzzy search and yields matching keys as an iterator\nfunc fuzzycollectIter[T any](nd *node[T], partial []rune) iter.Seq[string] {\n\treturn func(yield func(string) bool) {\n\t\tif len(partial) == 0 {\n\t\t\t// If no partial pattern, yield all keys from this node\n\t\t\tfor key := range collectIter(nd) {\n\t\t\t\tif !yield(key) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// Use stack-based traversal for fuzzy matching\n\t\ttype potentialNode struct {\n\t\t\tidx  int\n\t\t\tnode *node[T]\n\t\t}\n\n\t\tpotential := make([]potentialNode, 1, 128)\n\t\tpotential[0] = potentialNode{node: nd, idx: 0}\n\n\t\tfor len(potential) > 0 {\n\t\t\ti := len(potential) - 1\n\t\t\tp := potential[i]\n\t\t\tpotential = potential[:i]\n\n\t\t\tm := maskruneslice(partial[p.idx:])\n\t\t\tif (p.node.mask & m) != m {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif p.node.val == partial[p.idx] {\n\t\t\t\tp.idx++\n\t\t\t\tif p.idx == len(partial) {\n\t\t\t\t\t// Found a match, yield all terminals from this subtree\n\t\t\t\t\tfor key := range collectIter(p.node) {\n\t\t\t\t\t\tif !yield(key) {\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif p.node.children != nil {\n\t\t\t\tfor _, c := range p.node.children {\n\t\t\t\t\tpotential = append(potential, potentialNode{node: c, idx: p.idx})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/COPYING",
    "content": "Copyright © 2012 Peter Harris\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice (including the next\nparagraph) shall be included in all copies or substantial portions of the\nSoftware.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\nTHE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/README.md",
    "content": "Liner\n=====\n\nLiner is a command line editor with history. It was inspired by linenoise;\neverything Unix-like is a VT100 (or is trying very hard to be). If your\nterminal is not pretending to be a VT100, change it. Liner also support\nWindows.\n\nLiner is intended for use by cross-platform applications. Therefore, the\ndecision was made to write it in pure Go, avoiding cgo, for ease of cross\ncompilation. Furthermore, features only supported on some platforms have\nbeen intentionally omitted. For example, Ctrl-Z is \"suspend\" on Unix, but\n\"EOF\" on Windows. In the interest of making an application behave the same\nway on every supported platform, Ctrl-Z is ignored by Liner.\n\nLiner is released under the X11 license (which is similar to the new BSD\nlicense).\n\nLine Editing\n------------\n\nThe following line editing commands are supported on platforms and terminals\nthat Liner supports:\n\nKeystroke    | Action\n---------    | ------\nCtrl-A, Home | Move cursor to beginning of line\nCtrl-E, End  | Move cursor to end of line\nCtrl-B, Left | Move cursor one character left\nCtrl-F, Right| Move cursor one character right\nCtrl-Left, Alt-B    | Move cursor to previous word\nCtrl-Right, Alt-F   | Move cursor to next word\nCtrl-D, Del  | (if line is *not* empty) Delete character under cursor\nCtrl-D       | (if line *is* empty) End of File - usually quits application\nCtrl-C       | Reset input (create new empty prompt)\nCtrl-L       | Clear screen (line is unmodified)\nCtrl-T       | Transpose previous character with current character\nCtrl-H, BackSpace | Delete character before cursor\nCtrl-W, Alt-BackSpace | Delete word leading up to cursor\nAlt-D        | Delete word following cursor\nCtrl-K       | Delete from cursor to end of line\nCtrl-U       | Delete from start of line to cursor\nCtrl-P, Up   | Previous match from history\nCtrl-N, Down | Next match from history\nCtrl-R       | Reverse Search history (Ctrl-S forward, Ctrl-G cancel)\nCtrl-Y       | Paste from Yank buffer (Alt-Y to paste next yank instead)\nTab          | Next completion\nShift-Tab    | (after Tab) Previous completion\n\nNote that \"Previous\" and \"Next match from history\" will retain the part of\nthe line that the user has already typed, similar to zsh's\n\"up-line-or-beginning-search\" (which is the default on some systems) or\nbash's \"history-search-backward\" (which is my preferred behaviour, but does\nnot appear to be the default `Up` keybinding on any system).\n\nGetting started\n-----------------\n\n```go\npackage main\n\nimport (\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/peterh/liner\"\n)\n\nvar (\n\thistory_fn = filepath.Join(os.TempDir(), \".liner_example_history\")\n\tnames      = []string{\"john\", \"james\", \"mary\", \"nancy\"}\n)\n\nfunc main() {\n\tline := liner.NewLiner()\n\tdefer line.Close()\n\n\tline.SetCtrlCAborts(true)\n\n\tline.SetCompleter(func(line string) (c []string) {\n\t\tfor _, n := range names {\n\t\t\tif strings.HasPrefix(n, strings.ToLower(line)) {\n\t\t\t\tc = append(c, n)\n\t\t\t}\n\t\t}\n\t\treturn\n\t})\n\n\tif f, err := os.Open(history_fn); err == nil {\n\t\tline.ReadHistory(f)\n\t\tf.Close()\n\t}\n\n\tif name, err := line.Prompt(\"What is your name? \"); err == nil {\n\t\tlog.Print(\"Got: \", name)\n\t\tline.AppendHistory(name)\n\t} else if err == liner.ErrPromptAborted {\n\t\tlog.Print(\"Aborted\")\n\t} else {\n\t\tlog.Print(\"Error reading line: \", err)\n\t}\n\n\tif f, err := os.Create(history_fn); err != nil {\n\t\tlog.Print(\"Error writing history file: \", err)\n\t} else {\n\t\tline.WriteHistory(f)\n\t\tf.Close()\n\t}\n}\n```\n\nFor documentation, see http://godoc.org/github.com/peterh/liner\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/bsdinput.go",
    "content": "//go:build openbsd || freebsd || netbsd\n// +build openbsd freebsd netbsd\n\npackage liner\n\nimport \"syscall\"\n\nconst (\n\tgetTermios = syscall.TIOCGETA\n\tsetTermios = syscall.TIOCSETA\n)\n\nconst (\n\t// Input flags\n\tinpck  = 0x010\n\tistrip = 0x020\n\ticrnl  = 0x100\n\tixon   = 0x200\n\n\t// Output flags\n\topost = 0x1\n\n\t// Control flags\n\tcs8 = 0x300\n\n\t// Local flags\n\tisig   = 0x080\n\ticanon = 0x100\n\tiexten = 0x400\n)\n\ntype termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]byte\n\tIspeed int32\n\tOspeed int32\n}\n\nconst cursorColumn = false\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/common.go",
    "content": "/*\nPackage liner implements a simple command line editor, inspired by linenoise\n(https://github.com/antirez/linenoise/). This package supports WIN32 in\naddition to the xterm codes supported by everything else.\n*/\npackage liner\n\nimport (\n\t\"bufio\"\n\t\"container/ring\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"sync\"\n\t\"unicode/utf8\"\n)\n\ntype commonState struct {\n\tterminalSupported bool\n\toutputRedirected  bool\n\tinputRedirected   bool\n\thistory           []string\n\thistoryMutex      sync.RWMutex\n\tcompleter         WordCompleter\n\tcolumns           int\n\tkillRing          *ring.Ring\n\tctrlCAborts       bool\n\tctrlZStop         bool\n\tr                 *bufio.Reader\n\ttabStyle          TabStyle\n\tmultiLineMode     bool\n\tcursorRows        int\n\tmaxRows           int\n\tshouldRestart     ShouldRestart\n\tnoBeep            bool\n\tneedRefresh       bool\n}\n\n// TabStyle is used to select how tab completions are displayed.\ntype TabStyle int\n\n// Two tab styles are currently available:\n//\n// TabCircular cycles through each completion item and displays it directly on\n// the prompt\n//\n// TabPrints prints the list of completion items to the screen after a second\n// tab key is pressed. This behaves similar to GNU readline and BASH (which\n// uses readline)\nconst (\n\tTabCircular TabStyle = iota\n\tTabPrints\n)\n\n// ErrPromptAborted is returned from Prompt or PasswordPrompt when the user presses Ctrl-C\n// if SetCtrlCAborts(true) has been called on the State\nvar ErrPromptAborted = errors.New(\"prompt aborted\")\n\n// ErrNotTerminalOutput is returned from Prompt or PasswordPrompt if the\n// platform is normally supported, but stdout has been redirected\nvar ErrNotTerminalOutput = errors.New(\"standard output is not a terminal\")\n\n// ErrInvalidPrompt is returned from Prompt or PasswordPrompt if the\n// prompt contains any unprintable runes (including substrings that could\n// be colour codes on some platforms).\nvar ErrInvalidPrompt = errors.New(\"invalid prompt\")\n\n// ErrInternal is returned when liner experiences an error that it cannot\n// handle. For example, if the number of colums becomes zero during an\n// active call to Prompt\nvar ErrInternal = errors.New(\"liner: internal error\")\n\n// KillRingMax is the max number of elements to save on the killring.\nconst KillRingMax = 60\n\n// HistoryLimit is the maximum number of entries saved in the scrollback history.\nconst HistoryLimit = 1000\n\n// ReadHistory reads scrollback history from r. Returns the number of lines\n// read, and any read error (except io.EOF).\nfunc (s *State) ReadHistory(r io.Reader) (num int, err error) {\n\ts.historyMutex.Lock()\n\tdefer s.historyMutex.Unlock()\n\n\tin := bufio.NewReader(r)\n\tnum = 0\n\tfor {\n\t\tline, part, err := in.ReadLine()\n\t\tif err == io.EOF {\n\t\t\tbreak\n\t\t}\n\t\tif err != nil {\n\t\t\treturn num, err\n\t\t}\n\t\tif part {\n\t\t\treturn num, fmt.Errorf(\"line %d is too long\", num+1)\n\t\t}\n\t\tif !utf8.Valid(line) {\n\t\t\treturn num, fmt.Errorf(\"invalid string at line %d\", num+1)\n\t\t}\n\t\tnum++\n\t\ts.history = append(s.history, string(line))\n\t\tif len(s.history) > HistoryLimit {\n\t\t\ts.history = s.history[1:]\n\t\t}\n\t}\n\treturn num, nil\n}\n\n// WriteHistory writes scrollback history to w. Returns the number of lines\n// successfully written, and any write error.\n//\n// Unlike the rest of liner's API, WriteHistory is safe to call\n// from another goroutine while Prompt is in progress.\n// This exception is to facilitate the saving of the history buffer\n// during an unexpected exit (for example, due to Ctrl-C being invoked)\nfunc (s *State) WriteHistory(w io.Writer) (num int, err error) {\n\ts.historyMutex.RLock()\n\tdefer s.historyMutex.RUnlock()\n\n\tfor _, item := range s.history {\n\t\t_, err := fmt.Fprintln(w, item)\n\t\tif err != nil {\n\t\t\treturn num, err\n\t\t}\n\t\tnum++\n\t}\n\treturn num, nil\n}\n\n// AppendHistory appends an entry to the scrollback history. AppendHistory\n// should be called iff Prompt returns a valid command.\nfunc (s *State) AppendHistory(item string) {\n\ts.historyMutex.Lock()\n\tdefer s.historyMutex.Unlock()\n\n\tif len(s.history) > 0 {\n\t\tif item == s.history[len(s.history)-1] {\n\t\t\treturn\n\t\t}\n\t}\n\ts.history = append(s.history, item)\n\tif len(s.history) > HistoryLimit {\n\t\ts.history = s.history[1:]\n\t}\n}\n\n// ClearHistory clears the scrollback history.\nfunc (s *State) ClearHistory() {\n\ts.historyMutex.Lock()\n\tdefer s.historyMutex.Unlock()\n\ts.history = nil\n}\n\n// Returns the history lines starting with prefix\nfunc (s *State) getHistoryByPrefix(prefix string) (ph []string) {\n\tfor _, h := range s.history {\n\t\tif strings.HasPrefix(h, prefix) {\n\t\t\tph = append(ph, h)\n\t\t}\n\t}\n\treturn\n}\n\n// Returns the history lines matching the intelligent search\nfunc (s *State) getHistoryByPattern(pattern string) (ph []string, pos []int) {\n\tif pattern == \"\" {\n\t\treturn\n\t}\n\tfor _, h := range s.history {\n\t\tif i := strings.Index(h, pattern); i >= 0 {\n\t\t\tph = append(ph, h)\n\t\t\tpos = append(pos, i)\n\t\t}\n\t}\n\treturn\n}\n\n// Completer takes the currently edited line content at the left of the cursor\n// and returns a list of completion candidates.\n// If the line is \"Hello, wo!!!\" and the cursor is before the first '!', \"Hello, wo\" is passed\n// to the completer which may return {\"Hello, world\", \"Hello, Word\"} to have \"Hello, world!!!\".\ntype Completer func(line string) []string\n\n// WordCompleter takes the currently edited line with the cursor position and\n// returns the completion candidates for the partial word to be completed.\n// If the line is \"Hello, wo!!!\" and the cursor is before the first '!', (\"Hello, wo!!!\", 9) is passed\n// to the completer which may returns (\"Hello, \", {\"world\", \"Word\"}, \"!!!\") to have \"Hello, world!!!\".\ntype WordCompleter func(line string, pos int) (head string, completions []string, tail string)\n\n// SetCompleter sets the completion function that Liner will call to\n// fetch completion candidates when the user presses tab.\nfunc (s *State) SetCompleter(f Completer) {\n\tif f == nil {\n\t\ts.completer = nil\n\t\treturn\n\t}\n\ts.completer = func(line string, pos int) (string, []string, string) {\n\t\treturn \"\", f(string([]rune(line)[:pos])), string([]rune(line)[pos:])\n\t}\n}\n\n// SetWordCompleter sets the completion function that Liner will call to\n// fetch completion candidates when the user presses tab.\nfunc (s *State) SetWordCompleter(f WordCompleter) {\n\ts.completer = f\n}\n\n// SetTabCompletionStyle sets the behvavior when the Tab key is pressed\n// for auto-completion.  TabCircular is the default behavior and cycles\n// through the list of candidates at the prompt.  TabPrints will print\n// the available completion candidates to the screen similar to BASH\n// and GNU Readline\nfunc (s *State) SetTabCompletionStyle(tabStyle TabStyle) {\n\ts.tabStyle = tabStyle\n}\n\n// ModeApplier is the interface that wraps a representation of the terminal\n// mode. ApplyMode sets the terminal to this mode.\ntype ModeApplier interface {\n\tApplyMode() error\n}\n\n// SetCtrlCAborts sets whether Prompt on a supported terminal will return an\n// ErrPromptAborted when Ctrl-C is pressed. The default is false (will not\n// return when Ctrl-C is pressed). Unsupported terminals typically raise SIGINT\n// (and Prompt does not return) regardless of the value passed to SetCtrlCAborts.\nfunc (s *State) SetCtrlCAborts(aborts bool) {\n\ts.ctrlCAborts = aborts\n}\n\n// SetCtrlZStop sets whether Prompt on a supported terminal will send\n// SIGTSTP when Ctrl-Z is pressed. The default is false\nfunc (s *State) SetCtrlZStop(stop bool) {\n\ts.ctrlZStop = stop\n}\n\n// SetMultiLineMode sets whether line is auto-wrapped. The default is false (single line).\nfunc (s *State) SetMultiLineMode(mlmode bool) {\n\ts.multiLineMode = mlmode\n}\n\n// ShouldRestart is passed the error generated by readNext and returns true if\n// the the read should be restarted or false if the error should be returned.\ntype ShouldRestart func(err error) bool\n\n// SetShouldRestart sets the restart function that Liner will call to determine\n// whether to retry the call to, or return the error returned by, readNext.\nfunc (s *State) SetShouldRestart(f ShouldRestart) {\n\ts.shouldRestart = f\n}\n\n// SetBeep sets whether liner should beep the terminal at various times (output\n// ASCII BEL, 0x07). Default is true (will beep).\nfunc (s *State) SetBeep(beep bool) {\n\ts.noBeep = !beep\n}\n\nfunc (s *State) promptUnsupported(p string) (string, error) {\n\tif !s.inputRedirected || !s.terminalSupported {\n\t\tfmt.Print(p)\n\t}\n\tlinebuf, _, err := s.r.ReadLine()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn string(linebuf), nil\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/fallbackinput.go",
    "content": "//go:build !windows && !linux && !darwin && !openbsd && !freebsd && !netbsd && !solaris\n// +build !windows,!linux,!darwin,!openbsd,!freebsd,!netbsd,!solaris\n\npackage liner\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"os\"\n)\n\n// State represents an open terminal\ntype State struct {\n\tcommonState\n}\n\n// Prompt displays p, and then waits for user input. Prompt does not support\n// line editing on this operating system.\nfunc (s *State) Prompt(p string) (string, error) {\n\treturn s.promptUnsupported(p)\n}\n\n// PasswordPrompt is not supported in this OS.\nfunc (s *State) PasswordPrompt(p string) (string, error) {\n\treturn \"\", errors.New(\"liner: function not supported in this terminal\")\n}\n\n// NewLiner initializes a new *State\n//\n// Note that this operating system uses a fallback mode without line\n// editing. Patches welcome.\nfunc NewLiner() *State {\n\tvar s State\n\ts.r = bufio.NewReader(os.Stdin)\n\treturn &s\n}\n\n// Close returns the terminal to its previous mode\nfunc (s *State) Close() error {\n\treturn nil\n}\n\n// TerminalSupported returns false because line editing is not\n// supported on this platform.\nfunc TerminalSupported() bool {\n\treturn false\n}\n\ntype noopMode struct{}\n\nfunc (n noopMode) ApplyMode() error {\n\treturn nil\n}\n\n// TerminalMode returns a noop InputModeSetter on this platform.\nfunc TerminalMode() (ModeApplier, error) {\n\treturn noopMode{}, nil\n}\n\nconst cursorColumn = true\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/input.go",
    "content": "//go:build linux || darwin || openbsd || freebsd || netbsd || solaris\n// +build linux darwin openbsd freebsd netbsd solaris\n\npackage liner\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n)\n\ntype nexter struct {\n\tr   rune\n\terr error\n}\n\n// State represents an open terminal\ntype State struct {\n\tcommonState\n\torigMode    termios\n\tdefaultMode termios\n\tnext        <-chan nexter\n\twinch       chan os.Signal\n\tpending     []rune\n\tuseCHA      bool\n}\n\n// NewLiner initializes a new *State, and sets the terminal into raw mode. To\n// restore the terminal to its previous state, call State.Close().\nfunc NewLiner() *State {\n\tvar s State\n\ts.r = bufio.NewReader(os.Stdin)\n\n\ts.terminalSupported = TerminalSupported()\n\tif m, err := TerminalMode(); err == nil {\n\t\ts.origMode = *m.(*termios)\n\t} else {\n\t\ts.inputRedirected = true\n\t}\n\tif _, err := getMode(syscall.Stdout); err != nil {\n\t\ts.outputRedirected = true\n\t}\n\tif s.inputRedirected && s.outputRedirected {\n\t\ts.terminalSupported = false\n\t}\n\tif s.terminalSupported && !s.inputRedirected && !s.outputRedirected {\n\t\tmode := s.origMode\n\t\tmode.Iflag &^= icrnl | inpck | istrip | ixon\n\t\tmode.Cflag |= cs8\n\t\tmode.Lflag &^= syscall.ECHO | icanon | iexten\n\t\tmode.Cc[syscall.VMIN] = 1\n\t\tmode.Cc[syscall.VTIME] = 0\n\t\tmode.ApplyMode()\n\n\t\twinch := make(chan os.Signal, 1)\n\t\tsignal.Notify(winch, syscall.SIGWINCH)\n\t\ts.winch = winch\n\n\t\ts.checkOutput()\n\t}\n\n\tif !s.outputRedirected {\n\t\ts.outputRedirected = !s.getColumns()\n\t}\n\n\treturn &s\n}\n\nvar errTimedOut = errors.New(\"timeout\")\n\nfunc (s *State) startPrompt() {\n\tif s.terminalSupported {\n\t\tif m, err := TerminalMode(); err == nil {\n\t\t\ts.defaultMode = *m.(*termios)\n\t\t\tmode := s.defaultMode\n\t\t\tmode.Lflag &^= isig\n\t\t\tmode.ApplyMode()\n\t\t}\n\t}\n\ts.restartPrompt()\n}\n\nfunc (s *State) inputWaiting() bool {\n\treturn len(s.next) > 0\n}\n\nfunc (s *State) restartPrompt() {\n\tnext := make(chan nexter, 200)\n\tgo func() {\n\t\tfor {\n\t\t\tvar n nexter\n\t\t\tn.r, _, n.err = s.r.ReadRune()\n\t\t\tnext <- n\n\t\t\t// Shut down nexter loop when an end condition has been reached\n\t\t\tif n.err != nil || n.r == '\\n' || n.r == '\\r' || n.r == ctrlC || n.r == ctrlD {\n\t\t\t\tclose(next)\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}()\n\ts.next = next\n}\n\nfunc (s *State) stopPrompt() {\n\tif s.terminalSupported {\n\t\ts.defaultMode.ApplyMode()\n\t}\n}\n\nfunc (s *State) nextPending(timeout <-chan time.Time) (rune, error) {\n\tselect {\n\tcase thing, ok := <-s.next:\n\t\tif !ok {\n\t\t\treturn 0, ErrInternal\n\t\t}\n\t\tif thing.err != nil {\n\t\t\treturn 0, thing.err\n\t\t}\n\t\ts.pending = append(s.pending, thing.r)\n\t\treturn thing.r, nil\n\tcase <-timeout:\n\t\trv := s.pending[0]\n\t\ts.pending = s.pending[1:]\n\t\treturn rv, errTimedOut\n\t}\n}\n\nfunc (s *State) readNext() (interface{}, error) {\n\tif len(s.pending) > 0 {\n\t\trv := s.pending[0]\n\t\ts.pending = s.pending[1:]\n\t\treturn rv, nil\n\t}\n\tvar r rune\n\tselect {\n\tcase thing, ok := <-s.next:\n\t\tif !ok {\n\t\t\treturn 0, ErrInternal\n\t\t}\n\t\tif thing.err != nil {\n\t\t\treturn nil, thing.err\n\t\t}\n\t\tr = thing.r\n\tcase <-s.winch:\n\t\ts.getColumns()\n\t\treturn winch, nil\n\t}\n\tif r != esc {\n\t\treturn r, nil\n\t}\n\ts.pending = append(s.pending, r)\n\n\t// Wait at most 50 ms for the rest of the escape sequence\n\t// If nothing else arrives, it was an actual press of the esc key\n\ttimeout := time.After(50 * time.Millisecond)\n\tflag, err := s.nextPending(timeout)\n\tif err != nil {\n\t\tif err == errTimedOut {\n\t\t\treturn flag, nil\n\t\t}\n\t\treturn unknown, err\n\t}\n\n\tswitch flag {\n\tcase '[':\n\t\tcode, err := s.nextPending(timeout)\n\t\tif err != nil {\n\t\t\tif err == errTimedOut {\n\t\t\t\treturn code, nil\n\t\t\t}\n\t\t\treturn unknown, err\n\t\t}\n\t\tswitch code {\n\t\tcase 'A':\n\t\t\ts.pending = s.pending[:0] // escape code complete\n\t\t\treturn up, nil\n\t\tcase 'B':\n\t\t\ts.pending = s.pending[:0] // escape code complete\n\t\t\treturn down, nil\n\t\tcase 'C':\n\t\t\ts.pending = s.pending[:0] // escape code complete\n\t\t\treturn right, nil\n\t\tcase 'D':\n\t\t\ts.pending = s.pending[:0] // escape code complete\n\t\t\treturn left, nil\n\t\tcase 'F':\n\t\t\ts.pending = s.pending[:0] // escape code complete\n\t\t\treturn end, nil\n\t\tcase 'H':\n\t\t\ts.pending = s.pending[:0] // escape code complete\n\t\t\treturn home, nil\n\t\tcase 'Z':\n\t\t\ts.pending = s.pending[:0] // escape code complete\n\t\t\treturn shiftTab, nil\n\t\tcase '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\tnum := []rune{code}\n\t\t\tfor {\n\t\t\t\tcode, err := s.nextPending(timeout)\n\t\t\t\tif err != nil {\n\t\t\t\t\tif err == errTimedOut {\n\t\t\t\t\t\treturn code, nil\n\t\t\t\t\t}\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tswitch code {\n\t\t\t\tcase '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\t\t\tnum = append(num, code)\n\t\t\t\tcase ';':\n\t\t\t\t\t// Modifier code to follow\n\t\t\t\t\t// This only supports Ctrl-left and Ctrl-right for now\n\t\t\t\t\tx, _ := strconv.ParseInt(string(num), 10, 32)\n\t\t\t\t\tif x != 1 {\n\t\t\t\t\t\t// Can't be left or right\n\t\t\t\t\t\trv := s.pending[0]\n\t\t\t\t\t\ts.pending = s.pending[1:]\n\t\t\t\t\t\treturn rv, nil\n\t\t\t\t\t}\n\t\t\t\t\tnum = num[:0]\n\t\t\t\t\tfor {\n\t\t\t\t\t\tcode, err = s.nextPending(timeout)\n\t\t\t\t\t\tif err != nil {\n\t\t\t\t\t\t\tif err == errTimedOut {\n\t\t\t\t\t\t\t\trv := s.pending[0]\n\t\t\t\t\t\t\t\ts.pending = s.pending[1:]\n\t\t\t\t\t\t\t\treturn rv, nil\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t\t}\n\t\t\t\t\t\tswitch code {\n\t\t\t\t\t\tcase '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':\n\t\t\t\t\t\t\tnum = append(num, code)\n\t\t\t\t\t\tcase 'C', 'D':\n\t\t\t\t\t\t\t// right, left\n\t\t\t\t\t\t\tmod, _ := strconv.ParseInt(string(num), 10, 32)\n\t\t\t\t\t\t\tif mod != 5 {\n\t\t\t\t\t\t\t\t// Not bare Ctrl\n\t\t\t\t\t\t\t\trv := s.pending[0]\n\t\t\t\t\t\t\t\ts.pending = s.pending[1:]\n\t\t\t\t\t\t\t\treturn rv, nil\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ts.pending = s.pending[:0] // escape code complete\n\t\t\t\t\t\t\tif code == 'C' {\n\t\t\t\t\t\t\t\treturn wordRight, nil\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn wordLeft, nil\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// Not left or right\n\t\t\t\t\t\t\trv := s.pending[0]\n\t\t\t\t\t\t\ts.pending = s.pending[1:]\n\t\t\t\t\t\t\treturn rv, nil\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\tcase '~':\n\t\t\t\t\ts.pending = s.pending[:0] // escape code complete\n\t\t\t\t\tx, _ := strconv.ParseInt(string(num), 10, 32)\n\t\t\t\t\tswitch x {\n\t\t\t\t\tcase 2:\n\t\t\t\t\t\treturn insert, nil\n\t\t\t\t\tcase 3:\n\t\t\t\t\t\treturn del, nil\n\t\t\t\t\tcase 5:\n\t\t\t\t\t\treturn pageUp, nil\n\t\t\t\t\tcase 6:\n\t\t\t\t\t\treturn pageDown, nil\n\t\t\t\t\tcase 1, 7:\n\t\t\t\t\t\treturn home, nil\n\t\t\t\t\tcase 4, 8:\n\t\t\t\t\t\treturn end, nil\n\t\t\t\t\tcase 15:\n\t\t\t\t\t\treturn f5, nil\n\t\t\t\t\tcase 17:\n\t\t\t\t\t\treturn f6, nil\n\t\t\t\t\tcase 18:\n\t\t\t\t\t\treturn f7, nil\n\t\t\t\t\tcase 19:\n\t\t\t\t\t\treturn f8, nil\n\t\t\t\t\tcase 20:\n\t\t\t\t\t\treturn f9, nil\n\t\t\t\t\tcase 21:\n\t\t\t\t\t\treturn f10, nil\n\t\t\t\t\tcase 23:\n\t\t\t\t\t\treturn f11, nil\n\t\t\t\t\tcase 24:\n\t\t\t\t\t\treturn f12, nil\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn unknown, nil\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\t// unrecognized escape code\n\t\t\t\t\trv := s.pending[0]\n\t\t\t\t\ts.pending = s.pending[1:]\n\t\t\t\t\treturn rv, nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tcase 'O':\n\t\tcode, err := s.nextPending(timeout)\n\t\tif err != nil {\n\t\t\tif err == errTimedOut {\n\t\t\t\treturn code, nil\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\ts.pending = s.pending[:0] // escape code complete\n\t\tswitch code {\n\t\tcase 'c':\n\t\t\treturn wordRight, nil\n\t\tcase 'd':\n\t\t\treturn wordLeft, nil\n\t\tcase 'H':\n\t\t\treturn home, nil\n\t\tcase 'F':\n\t\t\treturn end, nil\n\t\tcase 'P':\n\t\t\treturn f1, nil\n\t\tcase 'Q':\n\t\t\treturn f2, nil\n\t\tcase 'R':\n\t\t\treturn f3, nil\n\t\tcase 'S':\n\t\t\treturn f4, nil\n\t\tdefault:\n\t\t\treturn unknown, nil\n\t\t}\n\tcase 'b':\n\t\ts.pending = s.pending[:0] // escape code complete\n\t\treturn altB, nil\n\tcase 'd':\n\t\ts.pending = s.pending[:0] // escape code complete\n\t\treturn altD, nil\n\tcase bs:\n\t\ts.pending = s.pending[:0] // escape code complete\n\t\treturn altBs, nil\n\tcase 'f':\n\t\ts.pending = s.pending[:0] // escape code complete\n\t\treturn altF, nil\n\tcase 'y':\n\t\ts.pending = s.pending[:0] // escape code complete\n\t\treturn altY, nil\n\tdefault:\n\t\trv := s.pending[0]\n\t\ts.pending = s.pending[1:]\n\t\treturn rv, nil\n\t}\n\n\t// not reached\n\treturn r, nil\n}\n\n// Close returns the terminal to its previous mode\nfunc (s *State) Close() error {\n\tsignal.Stop(s.winch)\n\tif !s.inputRedirected {\n\t\ts.origMode.ApplyMode()\n\t}\n\treturn nil\n}\n\n// TerminalSupported returns true if the current terminal supports\n// line editing features, and false if liner will use the 'dumb'\n// fallback for input.\n// Note that TerminalSupported does not check all factors that may\n// cause liner to not fully support the terminal (such as stdin redirection)\nfunc TerminalSupported() bool {\n\tbad := map[string]bool{\"\": true, \"dumb\": true, \"cons25\": true}\n\treturn !bad[strings.ToLower(os.Getenv(\"TERM\"))]\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/input_darwin.go",
    "content": "//go:build darwin\n// +build darwin\n\npackage liner\n\nimport \"syscall\"\n\nconst (\n\tgetTermios = syscall.TIOCGETA\n\tsetTermios = syscall.TIOCSETA\n)\n\nconst (\n\t// Input flags\n\tinpck  = 0x010\n\tistrip = 0x020\n\ticrnl  = 0x100\n\tixon   = 0x200\n\n\t// Output flags\n\topost = 0x1\n\n\t// Control flags\n\tcs8 = 0x300\n\n\t// Local flags\n\tisig   = 0x080\n\ticanon = 0x100\n\tiexten = 0x400\n)\n\ntype termios struct {\n\tIflag  uintptr\n\tOflag  uintptr\n\tCflag  uintptr\n\tLflag  uintptr\n\tCc     [20]byte\n\tIspeed uintptr\n\tOspeed uintptr\n}\n\n// Terminal.app needs a column for the cursor when the input line is at the\n// bottom of the window.\nconst cursorColumn = true\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/input_linux.go",
    "content": "//go:build linux\n// +build linux\n\npackage liner\n\nimport \"syscall\"\n\nconst (\n\tgetTermios = syscall.TCGETS\n\tsetTermios = syscall.TCSETS\n)\n\nconst (\n\ticrnl  = syscall.ICRNL\n\tinpck  = syscall.INPCK\n\tistrip = syscall.ISTRIP\n\tixon   = syscall.IXON\n\topost  = syscall.OPOST\n\tcs8    = syscall.CS8\n\tisig   = syscall.ISIG\n\ticanon = syscall.ICANON\n\tiexten = syscall.IEXTEN\n)\n\ntype termios struct {\n\tsyscall.Termios\n}\n\nconst cursorColumn = false\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/input_solaris.go",
    "content": "package liner\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\nconst (\n\tgetTermios = unix.TCGETS\n\tsetTermios = unix.TCSETS\n)\n\nconst (\n\ticrnl  = unix.ICRNL\n\tinpck  = unix.INPCK\n\tistrip = unix.ISTRIP\n\tixon   = unix.IXON\n\topost  = unix.OPOST\n\tcs8    = unix.CS8\n\tisig   = unix.ISIG\n\ticanon = unix.ICANON\n\tiexten = unix.IEXTEN\n)\n\ntype termios unix.Termios\n\nconst cursorColumn = false\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/input_windows.go",
    "content": "package liner\n\nimport (\n\t\"bufio\"\n\t\"os\"\n\t\"syscall\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\nvar (\n\tkernel32 = syscall.NewLazyDLL(\"kernel32.dll\")\n\n\tprocGetStdHandle                  = kernel32.NewProc(\"GetStdHandle\")\n\tprocReadConsoleInput              = kernel32.NewProc(\"ReadConsoleInputW\")\n\tprocGetNumberOfConsoleInputEvents = kernel32.NewProc(\"GetNumberOfConsoleInputEvents\")\n\tprocGetConsoleMode                = kernel32.NewProc(\"GetConsoleMode\")\n\tprocSetConsoleMode                = kernel32.NewProc(\"SetConsoleMode\")\n\tprocSetConsoleCursorPosition      = kernel32.NewProc(\"SetConsoleCursorPosition\")\n\tprocGetConsoleScreenBufferInfo    = kernel32.NewProc(\"GetConsoleScreenBufferInfo\")\n\tprocFillConsoleOutputCharacter    = kernel32.NewProc(\"FillConsoleOutputCharacterW\")\n)\n\n// These names are from the Win32 api, so they use underscores (contrary to\n// what golint suggests)\nconst (\n\tstd_input_handle     = uint32(-10 & 0xFFFFFFFF)\n\tstd_output_handle    = uint32(-11 & 0xFFFFFFFF)\n\tstd_error_handle     = uint32(-12 & 0xFFFFFFFF)\n\tinvalid_handle_value = ^uintptr(0)\n)\n\ntype inputMode uint32\n\n// State represents an open terminal\ntype State struct {\n\tcommonState\n\thandle      syscall.Handle\n\thOut        syscall.Handle\n\torigMode    inputMode\n\tdefaultMode inputMode\n\tkey         interface{}\n\trepeat      uint16\n}\n\nconst (\n\tenableEchoInput      = 0x4\n\tenableInsertMode     = 0x20\n\tenableLineInput      = 0x2\n\tenableMouseInput     = 0x10\n\tenableProcessedInput = 0x1\n\tenableQuickEditMode  = 0x40\n\tenableWindowInput    = 0x8\n)\n\n// NewLiner initializes a new *State, and sets the terminal into raw mode. To\n// restore the terminal to its previous state, call State.Close().\nfunc NewLiner() *State {\n\tvar s State\n\thIn, _, _ := procGetStdHandle.Call(uintptr(std_input_handle))\n\ts.handle = syscall.Handle(hIn)\n\thOut, _, _ := procGetStdHandle.Call(uintptr(std_output_handle))\n\ts.hOut = syscall.Handle(hOut)\n\n\ts.terminalSupported = true\n\tif m, err := TerminalMode(); err == nil {\n\t\ts.origMode = m.(inputMode)\n\t\tmode := s.origMode\n\t\tmode &^= enableEchoInput\n\t\tmode &^= enableInsertMode\n\t\tmode &^= enableLineInput\n\t\tmode &^= enableMouseInput\n\t\tmode |= enableWindowInput\n\t\tmode.ApplyMode()\n\t} else {\n\t\ts.inputRedirected = true\n\t\ts.r = bufio.NewReader(os.Stdin)\n\t}\n\n\ts.getColumns()\n\ts.outputRedirected = s.columns <= 0\n\n\treturn &s\n}\n\n// These names are from the Win32 api, so they use underscores (contrary to\n// what golint suggests)\nconst (\n\tfocus_event              = 0x0010\n\tkey_event                = 0x0001\n\tmenu_event               = 0x0008\n\tmouse_event              = 0x0002\n\twindow_buffer_size_event = 0x0004\n)\n\ntype input_record struct {\n\teventType uint16\n\tpad       uint16\n\tblob      [16]byte\n}\n\ntype key_event_record struct {\n\tKeyDown         int32\n\tRepeatCount     uint16\n\tVirtualKeyCode  uint16\n\tVirtualScanCode uint16\n\tChar            uint16\n\tControlKeyState uint32\n}\n\n// These names are from the Win32 api, so they use underscores (contrary to\n// what golint suggests)\nconst (\n\tvk_back   = 0x08\n\tvk_tab    = 0x09\n\tvk_menu   = 0x12 // ALT key\n\tvk_prior  = 0x21\n\tvk_next   = 0x22\n\tvk_end    = 0x23\n\tvk_home   = 0x24\n\tvk_left   = 0x25\n\tvk_up     = 0x26\n\tvk_right  = 0x27\n\tvk_down   = 0x28\n\tvk_insert = 0x2d\n\tvk_delete = 0x2e\n\tvk_f1     = 0x70\n\tvk_f2     = 0x71\n\tvk_f3     = 0x72\n\tvk_f4     = 0x73\n\tvk_f5     = 0x74\n\tvk_f6     = 0x75\n\tvk_f7     = 0x76\n\tvk_f8     = 0x77\n\tvk_f9     = 0x78\n\tvk_f10    = 0x79\n\tvk_f11    = 0x7a\n\tvk_f12    = 0x7b\n\tbKey      = 0x42\n\tdKey      = 0x44\n\tfKey      = 0x46\n\tyKey      = 0x59\n)\n\nconst (\n\tshiftPressed     = 0x0010\n\tleftAltPressed   = 0x0002\n\tleftCtrlPressed  = 0x0008\n\trightAltPressed  = 0x0001\n\trightCtrlPressed = 0x0004\n\n\tmodKeys = shiftPressed | leftAltPressed | rightAltPressed | leftCtrlPressed | rightCtrlPressed\n)\n\n// inputWaiting only returns true if the next call to readNext will return immediately.\nfunc (s *State) inputWaiting() bool {\n\tvar num uint32\n\tok, _, _ := procGetNumberOfConsoleInputEvents.Call(uintptr(s.handle), uintptr(unsafe.Pointer(&num)))\n\tif ok == 0 {\n\t\t// call failed, so we cannot guarantee a non-blocking readNext\n\t\treturn false\n\t}\n\n\t// during a \"paste\" input events are always an odd number, and\n\t// the last one results in a blocking readNext, so return false\n\t// when num is 1 or 0.\n\treturn num > 1\n}\n\nfunc (s *State) readNext() (interface{}, error) {\n\tif s.repeat > 0 {\n\t\ts.repeat--\n\t\treturn s.key, nil\n\t}\n\n\tvar input input_record\n\tvar rv uint32\n\n\tvar surrogate uint16\n\n\tfor {\n\t\tok, _, err := procReadConsoleInput.Call(uintptr(s.handle),\n\t\t\tuintptr(unsafe.Pointer(&input)), 1, uintptr(unsafe.Pointer(&rv)))\n\n\t\tif ok == 0 {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif input.eventType == window_buffer_size_event {\n\t\t\txy := (*coord)(unsafe.Pointer(&input.blob[0]))\n\t\t\ts.columns = int(xy.x)\n\t\t\treturn winch, nil\n\t\t}\n\t\tif input.eventType != key_event {\n\t\t\tcontinue\n\t\t}\n\t\tke := (*key_event_record)(unsafe.Pointer(&input.blob[0]))\n\t\tif ke.KeyDown == 0 {\n\t\t\tif ke.VirtualKeyCode == vk_menu && ke.Char > 0 {\n\t\t\t\t// paste of unicode (eg. via ALT-numpad)\n\t\t\t\tif surrogate > 0 {\n\t\t\t\t\treturn utf16.DecodeRune(rune(surrogate), rune(ke.Char)), nil\n\t\t\t\t} else if utf16.IsSurrogate(rune(ke.Char)) {\n\t\t\t\t\tsurrogate = ke.Char\n\t\t\t\t\tcontinue\n\t\t\t\t} else {\n\t\t\t\t\treturn rune(ke.Char), nil\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif ke.VirtualKeyCode == vk_tab && ke.ControlKeyState&modKeys == shiftPressed {\n\t\t\ts.key = shiftTab\n\t\t} else if ke.VirtualKeyCode == vk_back && (ke.ControlKeyState&modKeys == leftAltPressed ||\n\t\t\tke.ControlKeyState&modKeys == rightAltPressed) {\n\t\t\ts.key = altBs\n\t\t} else if ke.VirtualKeyCode == bKey && (ke.ControlKeyState&modKeys == leftAltPressed ||\n\t\t\tke.ControlKeyState&modKeys == rightAltPressed) {\n\t\t\ts.key = altB\n\t\t} else if ke.VirtualKeyCode == dKey && (ke.ControlKeyState&modKeys == leftAltPressed ||\n\t\t\tke.ControlKeyState&modKeys == rightAltPressed) {\n\t\t\ts.key = altD\n\t\t} else if ke.VirtualKeyCode == fKey && (ke.ControlKeyState&modKeys == leftAltPressed ||\n\t\t\tke.ControlKeyState&modKeys == rightAltPressed) {\n\t\t\ts.key = altF\n\t\t} else if ke.VirtualKeyCode == yKey && (ke.ControlKeyState&modKeys == leftAltPressed ||\n\t\t\tke.ControlKeyState&modKeys == rightAltPressed) {\n\t\t\ts.key = altY\n\t\t} else if ke.Char > 0 {\n\t\t\tif surrogate > 0 {\n\t\t\t\ts.key = utf16.DecodeRune(rune(surrogate), rune(ke.Char))\n\t\t\t} else if utf16.IsSurrogate(rune(ke.Char)) {\n\t\t\t\tsurrogate = ke.Char\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\ts.key = rune(ke.Char)\n\t\t\t}\n\t\t} else {\n\t\t\tswitch ke.VirtualKeyCode {\n\t\t\tcase vk_prior:\n\t\t\t\ts.key = pageUp\n\t\t\tcase vk_next:\n\t\t\t\ts.key = pageDown\n\t\t\tcase vk_end:\n\t\t\t\ts.key = end\n\t\t\tcase vk_home:\n\t\t\t\ts.key = home\n\t\t\tcase vk_left:\n\t\t\t\ts.key = left\n\t\t\t\tif ke.ControlKeyState&(leftCtrlPressed|rightCtrlPressed) != 0 {\n\t\t\t\t\tif ke.ControlKeyState&modKeys == ke.ControlKeyState&(leftCtrlPressed|rightCtrlPressed) {\n\t\t\t\t\t\ts.key = wordLeft\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase vk_right:\n\t\t\t\ts.key = right\n\t\t\t\tif ke.ControlKeyState&(leftCtrlPressed|rightCtrlPressed) != 0 {\n\t\t\t\t\tif ke.ControlKeyState&modKeys == ke.ControlKeyState&(leftCtrlPressed|rightCtrlPressed) {\n\t\t\t\t\t\ts.key = wordRight\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase vk_up:\n\t\t\t\ts.key = up\n\t\t\tcase vk_down:\n\t\t\t\ts.key = down\n\t\t\tcase vk_insert:\n\t\t\t\ts.key = insert\n\t\t\tcase vk_delete:\n\t\t\t\ts.key = del\n\t\t\tcase vk_f1:\n\t\t\t\ts.key = f1\n\t\t\tcase vk_f2:\n\t\t\t\ts.key = f2\n\t\t\tcase vk_f3:\n\t\t\t\ts.key = f3\n\t\t\tcase vk_f4:\n\t\t\t\ts.key = f4\n\t\t\tcase vk_f5:\n\t\t\t\ts.key = f5\n\t\t\tcase vk_f6:\n\t\t\t\ts.key = f6\n\t\t\tcase vk_f7:\n\t\t\t\ts.key = f7\n\t\t\tcase vk_f8:\n\t\t\t\ts.key = f8\n\t\t\tcase vk_f9:\n\t\t\t\ts.key = f9\n\t\t\tcase vk_f10:\n\t\t\t\ts.key = f10\n\t\t\tcase vk_f11:\n\t\t\t\ts.key = f11\n\t\t\tcase vk_f12:\n\t\t\t\ts.key = f12\n\t\t\tdefault:\n\t\t\t\t// Eat modifier keys\n\t\t\t\t// TODO: return Action(Unknown) if the key isn't a\n\t\t\t\t// modifier.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\tif ke.RepeatCount > 1 {\n\t\t\ts.repeat = ke.RepeatCount - 1\n\t\t}\n\t\treturn s.key, nil\n\t}\n}\n\n// Close returns the terminal to its previous mode\nfunc (s *State) Close() error {\n\ts.origMode.ApplyMode()\n\treturn nil\n}\n\nfunc (s *State) startPrompt() {\n\tif m, err := TerminalMode(); err == nil {\n\t\ts.defaultMode = m.(inputMode)\n\t\tmode := s.defaultMode\n\t\tmode &^= enableProcessedInput\n\t\tmode.ApplyMode()\n\t}\n}\n\nfunc (s *State) restartPrompt() {\n}\n\nfunc (s *State) stopPrompt() {\n\ts.defaultMode.ApplyMode()\n}\n\n// TerminalSupported returns true because line editing is always\n// supported on Windows.\nfunc TerminalSupported() bool {\n\treturn true\n}\n\nfunc (mode inputMode) ApplyMode() error {\n\thIn, _, err := procGetStdHandle.Call(uintptr(std_input_handle))\n\tif hIn == invalid_handle_value || hIn == 0 {\n\t\treturn err\n\t}\n\tok, _, err := procSetConsoleMode.Call(hIn, uintptr(mode))\n\tif ok != 0 {\n\t\terr = nil\n\t}\n\treturn err\n}\n\n// TerminalMode returns the current terminal input mode as an InputModeSetter.\n//\n// This function is provided for convenience, and should\n// not be necessary for most users of liner.\nfunc TerminalMode() (ModeApplier, error) {\n\tvar mode inputMode\n\thIn, _, err := procGetStdHandle.Call(uintptr(std_input_handle))\n\tif hIn == invalid_handle_value || hIn == 0 {\n\t\treturn nil, err\n\t}\n\tok, _, err := procGetConsoleMode.Call(hIn, uintptr(unsafe.Pointer(&mode)))\n\tif ok != 0 {\n\t\terr = nil\n\t}\n\treturn mode, err\n}\n\nconst cursorColumn = true\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/line.go",
    "content": "//go:build windows || linux || darwin || openbsd || freebsd || netbsd || solaris\n// +build windows linux darwin openbsd freebsd netbsd solaris\n\npackage liner\n\nimport (\n\t\"bufio\"\n\t\"container/ring\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\ntype action int\n\nconst (\n\tleft action = iota\n\tright\n\tup\n\tdown\n\thome\n\tend\n\tinsert\n\tdel\n\tpageUp\n\tpageDown\n\tf1\n\tf2\n\tf3\n\tf4\n\tf5\n\tf6\n\tf7\n\tf8\n\tf9\n\tf10\n\tf11\n\tf12\n\taltB\n\taltBs // Alt+Backspace\n\taltD\n\taltF\n\taltY\n\tshiftTab\n\twordLeft\n\twordRight\n\twinch\n\tunknown\n)\n\nconst (\n\tctrlA = 1\n\tctrlB = 2\n\tctrlC = 3\n\tctrlD = 4\n\tctrlE = 5\n\tctrlF = 6\n\tctrlG = 7\n\tctrlH = 8\n\ttab   = 9\n\tlf    = 10\n\tctrlK = 11\n\tctrlL = 12\n\tcr    = 13\n\tctrlN = 14\n\tctrlO = 15\n\tctrlP = 16\n\tctrlQ = 17\n\tctrlR = 18\n\tctrlS = 19\n\tctrlT = 20\n\tctrlU = 21\n\tctrlV = 22\n\tctrlW = 23\n\tctrlX = 24\n\tctrlY = 25\n\tctrlZ = 26\n\tesc   = 27\n\tbs    = 127\n)\n\nconst (\n\tbeep = \"\\a\"\n)\n\ntype tabDirection int\n\nconst (\n\ttabForward tabDirection = iota\n\ttabReverse\n)\n\nfunc (s *State) refresh(prompt []rune, buf []rune, pos int) error {\n\tif s.columns == 0 {\n\t\treturn ErrInternal\n\t}\n\n\ts.needRefresh = false\n\tif s.multiLineMode {\n\t\treturn s.refreshMultiLine(prompt, buf, pos)\n\t}\n\treturn s.refreshSingleLine(prompt, buf, pos)\n}\n\nfunc (s *State) refreshSingleLine(prompt []rune, buf []rune, pos int) error {\n\ts.cursorPos(0)\n\t_, err := fmt.Print(string(prompt))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tpLen := countGlyphs(prompt)\n\tbLen := countGlyphs(buf)\n\t// on some OS / terminals extra column is needed to place the cursor char\n\tif cursorColumn {\n\t\tbLen++\n\t}\n\tpos = countGlyphs(buf[:pos])\n\tif pLen+bLen < s.columns {\n\t\t_, err = fmt.Print(string(buf))\n\t\ts.eraseLine()\n\t\ts.cursorPos(pLen + pos)\n\t} else {\n\t\t// Find space available\n\t\tspace := s.columns - pLen\n\t\tspace-- // space for cursor\n\t\tstart := pos - space/2\n\t\tend := start + space\n\t\tif end > bLen {\n\t\t\tend = bLen\n\t\t\tstart = end - space\n\t\t}\n\t\tif start < 0 {\n\t\t\tstart = 0\n\t\t\tend = space\n\t\t}\n\t\tpos -= start\n\n\t\t// Leave space for markers\n\t\tif start > 0 {\n\t\t\tstart++\n\t\t}\n\t\tif end < bLen {\n\t\t\tend--\n\t\t}\n\t\tstartRune := len(getPrefixGlyphs(buf, start))\n\t\tline := getPrefixGlyphs(buf[startRune:], end-start)\n\n\t\t// Output\n\t\tif start > 0 {\n\t\t\tfmt.Print(\"{\")\n\t\t}\n\t\tfmt.Print(string(line))\n\t\tif end < bLen {\n\t\t\tfmt.Print(\"}\")\n\t\t}\n\n\t\t// Set cursor position\n\t\ts.eraseLine()\n\t\ts.cursorPos(pLen + pos)\n\t}\n\treturn err\n}\n\nfunc (s *State) refreshMultiLine(prompt []rune, buf []rune, pos int) error {\n\tpromptColumns := countMultiLineGlyphs(prompt, s.columns, 0)\n\ttotalColumns := countMultiLineGlyphs(buf, s.columns, promptColumns)\n\t// on some OS / terminals extra column is needed to place the cursor char\n\t// if cursorColumn {\n\t//\ttotalColumns++\n\t// }\n\n\t// it looks like Multiline mode always assume that a cursor need an extra column,\n\t// and always emit a newline if we are at the screen end, so no worarounds needed there\n\n\ttotalRows := (totalColumns + s.columns - 1) / s.columns\n\tmaxRows := s.maxRows\n\tif totalRows > s.maxRows {\n\t\ts.maxRows = totalRows\n\t}\n\tcursorRows := s.cursorRows\n\tif cursorRows == 0 {\n\t\tcursorRows = 1\n\t}\n\n\t/* First step: clear all the lines used before. To do so start by\n\t* going to the last row. */\n\tif maxRows-cursorRows > 0 {\n\t\ts.moveDown(maxRows - cursorRows)\n\t}\n\n\t/* Now for every row clear it, go up. */\n\tfor i := 0; i < maxRows-1; i++ {\n\t\ts.cursorPos(0)\n\t\ts.eraseLine()\n\t\ts.moveUp(1)\n\t}\n\n\t/* Clean the top line. */\n\ts.cursorPos(0)\n\ts.eraseLine()\n\n\t/* Write the prompt and the current buffer content */\n\tif _, err := fmt.Print(string(prompt)); err != nil {\n\t\treturn err\n\t}\n\tif _, err := fmt.Print(string(buf)); err != nil {\n\t\treturn err\n\t}\n\n\t/* If we are at the very end of the screen with our prompt, we need to\n\t * emit a newline and move the prompt to the first column. */\n\tcursorColumns := countMultiLineGlyphs(buf[:pos], s.columns, promptColumns)\n\tif cursorColumns == totalColumns && totalColumns%s.columns == 0 {\n\t\ts.emitNewLine()\n\t\ts.cursorPos(0)\n\t\ttotalRows++\n\t\tif totalRows > s.maxRows {\n\t\t\ts.maxRows = totalRows\n\t\t}\n\t}\n\n\t/* Move cursor to right position. */\n\tcursorRows = (cursorColumns + s.columns) / s.columns\n\tif s.cursorRows > 0 && totalRows-cursorRows > 0 {\n\t\ts.moveUp(totalRows - cursorRows)\n\t}\n\t/* Set column. */\n\ts.cursorPos(cursorColumns % s.columns)\n\n\ts.cursorRows = cursorRows\n\treturn nil\n}\n\nfunc (s *State) resetMultiLine(prompt []rune, buf []rune, pos int) {\n\tcolumns := countMultiLineGlyphs(prompt, s.columns, 0)\n\tcolumns = countMultiLineGlyphs(buf[:pos], s.columns, columns)\n\tcolumns += 2 // ^C\n\tcursorRows := (columns + s.columns) / s.columns\n\tif s.maxRows-cursorRows > 0 {\n\t\tfor i := 0; i < s.maxRows-cursorRows; i++ {\n\t\t\tfmt.Println() // always moves the cursor down or scrolls the window up as needed\n\t\t}\n\t}\n\ts.maxRows = 1\n\ts.cursorRows = 0\n}\n\nfunc longestCommonPrefix(strs []string) string {\n\tif len(strs) == 0 {\n\t\treturn \"\"\n\t}\n\tlongest := strs[0]\n\n\tfor _, str := range strs[1:] {\n\t\tfor !strings.HasPrefix(str, longest) {\n\t\t\tlongest = longest[:len(longest)-1]\n\t\t}\n\t}\n\t// Remove trailing partial runes\n\tlongest = strings.TrimRight(longest, \"\\uFFFD\")\n\treturn longest\n}\n\nfunc (s *State) circularTabs(items []string) func(tabDirection) (string, error) {\n\titem := -1\n\treturn func(direction tabDirection) (string, error) {\n\t\tif direction == tabForward {\n\t\t\tif item < len(items)-1 {\n\t\t\t\titem++\n\t\t\t} else {\n\t\t\t\titem = 0\n\t\t\t}\n\t\t} else if direction == tabReverse {\n\t\t\tif item > 0 {\n\t\t\t\titem--\n\t\t\t} else {\n\t\t\t\titem = len(items) - 1\n\t\t\t}\n\t\t}\n\t\treturn items[item], nil\n\t}\n}\n\nfunc calculateColumns(screenWidth int, items []string) (numColumns, numRows, maxWidth int) {\n\tfor _, item := range items {\n\t\tif len(item) >= screenWidth {\n\t\t\treturn 1, len(items), screenWidth - 1\n\t\t}\n\t\tif len(item) >= maxWidth {\n\t\t\tmaxWidth = len(item) + 1\n\t\t}\n\t}\n\n\tnumColumns = screenWidth / maxWidth\n\tnumRows = len(items) / numColumns\n\tif len(items)%numColumns > 0 {\n\t\tnumRows++\n\t}\n\n\tif len(items) <= numColumns {\n\t\tmaxWidth = 0\n\t}\n\n\treturn\n}\n\nfunc (s *State) printedTabs(items []string) func(tabDirection) (string, error) {\n\tnumTabs := 1\n\tprefix := longestCommonPrefix(items)\n\treturn func(direction tabDirection) (string, error) {\n\t\tif len(items) == 1 {\n\t\t\treturn items[0], nil\n\t\t}\n\n\t\tif numTabs == 2 {\n\t\t\tif len(items) > 100 {\n\t\t\t\tfmt.Printf(\"\\nDisplay all %d possibilities? (y or n) \", len(items))\n\t\t\tprompt:\n\t\t\t\tfor {\n\t\t\t\t\tnext, err := s.readNext()\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn prefix, err\n\t\t\t\t\t}\n\n\t\t\t\t\tif key, ok := next.(rune); ok {\n\t\t\t\t\t\tswitch key {\n\t\t\t\t\t\tcase 'n', 'N':\n\t\t\t\t\t\t\treturn prefix, nil\n\t\t\t\t\t\tcase 'y', 'Y':\n\t\t\t\t\t\t\tbreak prompt\n\t\t\t\t\t\tcase ctrlC, ctrlD, cr, lf:\n\t\t\t\t\t\t\ts.restartPrompt()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfmt.Println(\"\")\n\n\t\t\tnumColumns, numRows, maxWidth := calculateColumns(s.columns, items)\n\n\t\t\tfor i := 0; i < numRows; i++ {\n\t\t\t\tfor j := 0; j < numColumns*numRows; j += numRows {\n\t\t\t\t\tif i+j < len(items) {\n\t\t\t\t\t\tif maxWidth > 0 {\n\t\t\t\t\t\t\tfmt.Printf(\"%-*.[1]*s\", maxWidth, items[i+j])\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfmt.Printf(\"%v \", items[i+j])\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfmt.Println(\"\")\n\t\t\t}\n\t\t} else {\n\t\t\tnumTabs++\n\t\t}\n\t\treturn prefix, nil\n\t}\n}\n\nfunc (s *State) tabComplete(p []rune, line []rune, pos int) ([]rune, int, interface{}, error) {\n\tif s.completer == nil {\n\t\treturn line, pos, rune(esc), nil\n\t}\n\thead, list, tail := s.completer(string(line), pos)\n\tif len(list) <= 0 {\n\t\treturn line, pos, rune(esc), nil\n\t}\n\thl := utf8.RuneCountInString(head)\n\tif len(list) == 1 {\n\t\terr := s.refresh(p, []rune(head+list[0]+tail), hl+utf8.RuneCountInString(list[0]))\n\t\treturn []rune(head + list[0] + tail), hl + utf8.RuneCountInString(list[0]), rune(esc), err\n\t}\n\n\tdirection := tabForward\n\ttabPrinter := s.circularTabs(list)\n\tif s.tabStyle == TabPrints {\n\t\ttabPrinter = s.printedTabs(list)\n\t}\n\n\tfor {\n\t\tpick, err := tabPrinter(direction)\n\t\tif err != nil {\n\t\t\treturn line, pos, rune(esc), err\n\t\t}\n\t\terr = s.refresh(p, []rune(head+pick+tail), hl+utf8.RuneCountInString(pick))\n\t\tif err != nil {\n\t\t\treturn line, pos, rune(esc), err\n\t\t}\n\n\t\tnext, err := s.readNext()\n\t\tif err != nil {\n\t\t\treturn line, pos, rune(esc), err\n\t\t}\n\t\tif key, ok := next.(rune); ok {\n\t\t\tif key == tab {\n\t\t\t\tdirection = tabForward\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif key == esc {\n\t\t\t\treturn line, pos, rune(esc), nil\n\t\t\t}\n\t\t}\n\t\tif a, ok := next.(action); ok && a == shiftTab {\n\t\t\tdirection = tabReverse\n\t\t\tcontinue\n\t\t}\n\t\treturn []rune(head + pick + tail), hl + utf8.RuneCountInString(pick), next, nil\n\t}\n}\n\n// reverse intelligent search, implements a bash-like history search.\nfunc (s *State) reverseISearch(origLine []rune, origPos int) ([]rune, int, interface{}, error) {\n\tp := \"(reverse-i-search)`': \"\n\terr := s.refresh([]rune(p), origLine, origPos)\n\tif err != nil {\n\t\treturn origLine, origPos, rune(esc), err\n\t}\n\n\tline := []rune{}\n\tpos := 0\n\tfoundLine := string(origLine)\n\tfoundPos := origPos\n\n\tgetLine := func() ([]rune, []rune, int) {\n\t\tsearch := string(line)\n\t\tprompt := \"(reverse-i-search)`%s': \"\n\t\treturn []rune(fmt.Sprintf(prompt, search)), []rune(foundLine), foundPos\n\t}\n\n\thistory, positions := s.getHistoryByPattern(string(line))\n\thistoryPos := len(history) - 1\n\n\tfor {\n\t\tnext, err := s.readNext()\n\t\tif err != nil {\n\t\t\treturn []rune(foundLine), foundPos, rune(esc), err\n\t\t}\n\n\t\tswitch v := next.(type) {\n\t\tcase rune:\n\t\t\tswitch v {\n\t\t\tcase ctrlR: // Search backwards\n\t\t\t\tif historyPos > 0 && historyPos < len(history) {\n\t\t\t\t\thistoryPos--\n\t\t\t\t\tfoundLine = history[historyPos]\n\t\t\t\t\tfoundPos = positions[historyPos]\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase ctrlS: // Search forward\n\t\t\t\tif historyPos < len(history)-1 && historyPos >= 0 {\n\t\t\t\t\thistoryPos++\n\t\t\t\t\tfoundLine = history[historyPos]\n\t\t\t\t\tfoundPos = positions[historyPos]\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase ctrlH, bs: // Backspace\n\t\t\t\tif pos <= 0 {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t} else {\n\t\t\t\t\tn := len(getSuffixGlyphs(line[:pos], 1))\n\t\t\t\t\tline = append(line[:pos-n], line[pos:]...)\n\t\t\t\t\tpos -= n\n\n\t\t\t\t\t// For each char deleted, display the last matching line of history\n\t\t\t\t\thistory, positions := s.getHistoryByPattern(string(line))\n\t\t\t\t\thistoryPos = len(history) - 1\n\t\t\t\t\tif len(history) > 0 {\n\t\t\t\t\t\tfoundLine = history[historyPos]\n\t\t\t\t\t\tfoundPos = positions[historyPos]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfoundLine = \"\"\n\t\t\t\t\t\tfoundPos = 0\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase ctrlG: // Cancel\n\t\t\t\treturn origLine, origPos, rune(esc), err\n\n\t\t\tcase tab, cr, lf, ctrlA, ctrlB, ctrlD, ctrlE, ctrlF, ctrlK,\n\t\t\t\tctrlL, ctrlN, ctrlO, ctrlP, ctrlQ, ctrlT, ctrlU, ctrlV, ctrlW, ctrlX, ctrlY, ctrlZ:\n\t\t\t\tfallthrough\n\t\t\tcase 0, ctrlC, esc, 28, 29, 30, 31:\n\t\t\t\treturn []rune(foundLine), foundPos, next, err\n\t\t\tdefault:\n\t\t\t\tline = append(line[:pos], append([]rune{v}, line[pos:]...)...)\n\t\t\t\tpos++\n\n\t\t\t\t// For each keystroke typed, display the last matching line of history\n\t\t\t\thistory, positions = s.getHistoryByPattern(string(line))\n\t\t\t\thistoryPos = len(history) - 1\n\t\t\t\tif len(history) > 0 {\n\t\t\t\t\tfoundLine = history[historyPos]\n\t\t\t\t\tfoundPos = positions[historyPos]\n\t\t\t\t} else {\n\t\t\t\t\tfoundLine = \"\"\n\t\t\t\t\tfoundPos = 0\n\t\t\t\t}\n\t\t\t}\n\t\tcase action:\n\t\t\treturn []rune(foundLine), foundPos, next, err\n\t\t}\n\t\terr = s.refresh(getLine())\n\t\tif err != nil {\n\t\t\treturn []rune(foundLine), foundPos, rune(esc), err\n\t\t}\n\t}\n}\n\n// addToKillRing adds some text to the kill ring. If mode is 0 it adds it to a\n// new node in the end of the kill ring, and move the current pointer to the new\n// node. If mode is 1 or 2 it appends or prepends the text to the current entry\n// of the killRing.\nfunc (s *State) addToKillRing(text []rune, mode int) {\n\t// Don't use the same underlying array as text\n\tkillLine := make([]rune, len(text))\n\tcopy(killLine, text)\n\n\t// Point killRing to a newNode, procedure depends on the killring state and\n\t// append mode.\n\tif mode == 0 { // Add new node to killRing\n\t\tif s.killRing == nil { // if killring is empty, create a new one\n\t\t\ts.killRing = ring.New(1)\n\t\t} else if s.killRing.Len() >= KillRingMax { // if killring is \"full\"\n\t\t\ts.killRing = s.killRing.Next()\n\t\t} else { // Normal case\n\t\t\ts.killRing.Link(ring.New(1))\n\t\t\ts.killRing = s.killRing.Next()\n\t\t}\n\t} else {\n\t\tif s.killRing == nil { // if killring is empty, create a new one\n\t\t\ts.killRing = ring.New(1)\n\t\t\ts.killRing.Value = []rune{}\n\t\t}\n\t\tif mode == 1 { // Append to last entry\n\t\t\tkillLine = append(s.killRing.Value.([]rune), killLine...)\n\t\t} else if mode == 2 { // Prepend to last entry\n\t\t\tkillLine = append(killLine, s.killRing.Value.([]rune)...)\n\t\t}\n\t}\n\n\t// Save text in the current killring node\n\ts.killRing.Value = killLine\n}\n\nfunc (s *State) yank(p []rune, text []rune, pos int) ([]rune, int, interface{}, error) {\n\tif s.killRing == nil {\n\t\treturn text, pos, rune(esc), nil\n\t}\n\n\tlineStart := text[:pos]\n\tlineEnd := text[pos:]\n\tvar line []rune\n\n\tfor {\n\t\tvalue := s.killRing.Value.([]rune)\n\t\tline = make([]rune, 0)\n\t\tline = append(line, lineStart...)\n\t\tline = append(line, value...)\n\t\tline = append(line, lineEnd...)\n\n\t\tpos = len(lineStart) + len(value)\n\t\terr := s.refresh(p, line, pos)\n\t\tif err != nil {\n\t\t\treturn line, pos, 0, err\n\t\t}\n\n\t\tnext, err := s.readNext()\n\t\tif err != nil {\n\t\t\treturn line, pos, next, err\n\t\t}\n\n\t\tswitch v := next.(type) {\n\t\tcase rune:\n\t\t\treturn line, pos, next, nil\n\t\tcase action:\n\t\t\tswitch v {\n\t\t\tcase altY:\n\t\t\t\ts.killRing = s.killRing.Prev()\n\t\t\tdefault:\n\t\t\t\treturn line, pos, next, nil\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Prompt displays p and returns a line of user input, not including a trailing\n// newline character. An io.EOF error is returned if the user signals end-of-file\n// by pressing Ctrl-D. Prompt allows line editing if the terminal supports it.\nfunc (s *State) Prompt(prompt string) (string, error) {\n\treturn s.PromptWithSuggestion(prompt, \"\", 0)\n}\n\n// PromptWithSuggestion displays prompt and an editable text with cursor at\n// given position. The cursor will be set to the end of the line if given position\n// is negative or greater than length of text (in runes). Returns a line of user input, not\n// including a trailing newline character. An io.EOF error is returned if the user\n// signals end-of-file by pressing Ctrl-D.\nfunc (s *State) PromptWithSuggestion(prompt string, text string, pos int) (string, error) {\n\tfor _, r := range prompt {\n\t\tif unicode.Is(unicode.C, r) {\n\t\t\treturn \"\", ErrInvalidPrompt\n\t\t}\n\t}\n\tif s.inputRedirected || !s.terminalSupported {\n\t\treturn s.promptUnsupported(prompt)\n\t}\n\tp := []rune(prompt)\n\tconst minWorkingSpace = 10\n\tif s.columns < countGlyphs(p)+minWorkingSpace {\n\t\treturn s.tooNarrow(prompt)\n\t}\n\tif s.outputRedirected {\n\t\treturn \"\", ErrNotTerminalOutput\n\t}\n\n\ts.historyMutex.RLock()\n\tdefer s.historyMutex.RUnlock()\n\n\tfmt.Print(prompt)\n\tvar line = []rune(text)\n\thistoryEnd := \"\"\n\tvar historyPrefix []string\n\thistoryPos := 0\n\thistoryStale := true\n\thistoryAction := false // used to mark history related actions\n\tkillAction := 0        // used to mark kill related actions\n\n\tdefer s.stopPrompt()\n\n\tif pos < 0 || len(line) < pos {\n\t\tpos = len(line)\n\t}\n\tif len(line) > 0 {\n\t\terr := s.refresh(p, line, pos)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\nrestart:\n\ts.startPrompt()\n\ts.getColumns()\n\nmainLoop:\n\tfor {\n\t\tnext, err := s.readNext()\n\thaveNext:\n\t\tif err != nil {\n\t\t\tif s.shouldRestart != nil && s.shouldRestart(err) {\n\t\t\t\tgoto restart\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\n\t\thistoryAction = false\n\t\tswitch v := next.(type) {\n\t\tcase rune:\n\t\t\tswitch v {\n\t\t\tcase cr, lf:\n\t\t\t\tif s.needRefresh {\n\t\t\t\t\terr := s.refresh(p, line, pos)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn \"\", err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif s.multiLineMode {\n\t\t\t\t\ts.resetMultiLine(p, line, pos)\n\t\t\t\t}\n\t\t\t\tfmt.Println()\n\t\t\t\tbreak mainLoop\n\t\t\tcase ctrlA: // Start of line\n\t\t\t\tpos = 0\n\t\t\t\ts.needRefresh = true\n\t\t\tcase ctrlE: // End of line\n\t\t\t\tpos = len(line)\n\t\t\t\ts.needRefresh = true\n\t\t\tcase ctrlB: // left\n\t\t\t\tif pos > 0 {\n\t\t\t\t\tpos -= len(getSuffixGlyphs(line[:pos], 1))\n\t\t\t\t\ts.needRefresh = true\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase ctrlF: // right\n\t\t\t\tif pos < len(line) {\n\t\t\t\t\tpos += len(getPrefixGlyphs(line[pos:], 1))\n\t\t\t\t\ts.needRefresh = true\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase ctrlD: // del\n\t\t\t\tif pos == 0 && len(line) == 0 {\n\t\t\t\t\t// exit\n\t\t\t\t\treturn \"\", io.EOF\n\t\t\t\t}\n\n\t\t\t\t// ctrlD is a potential EOF, so the rune reader shuts down.\n\t\t\t\t// Therefore, if it isn't actually an EOF, we must re-startPrompt.\n\t\t\t\ts.restartPrompt()\n\n\t\t\t\tif pos >= len(line) {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t} else {\n\t\t\t\t\tn := len(getPrefixGlyphs(line[pos:], 1))\n\t\t\t\t\tline = append(line[:pos], line[pos+n:]...)\n\t\t\t\t\ts.needRefresh = true\n\t\t\t\t}\n\t\t\tcase ctrlK: // delete remainder of line\n\t\t\t\tif pos >= len(line) {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t} else {\n\t\t\t\t\tif killAction > 0 {\n\t\t\t\t\t\ts.addToKillRing(line[pos:], 1) // Add in apend mode\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts.addToKillRing(line[pos:], 0) // Add in normal mode\n\t\t\t\t\t}\n\n\t\t\t\t\tkillAction = 2 // Mark that there was a kill action\n\t\t\t\t\tline = line[:pos]\n\t\t\t\t\ts.needRefresh = true\n\t\t\t\t}\n\t\t\tcase ctrlP: // up\n\t\t\t\thistoryAction = true\n\t\t\t\tif historyStale {\n\t\t\t\t\thistoryPrefix = s.getHistoryByPrefix(string(line))\n\t\t\t\t\thistoryPos = len(historyPrefix)\n\t\t\t\t\thistoryStale = false\n\t\t\t\t}\n\t\t\t\tif historyPos > 0 {\n\t\t\t\t\tif historyPos == len(historyPrefix) {\n\t\t\t\t\t\thistoryEnd = string(line)\n\t\t\t\t\t}\n\t\t\t\t\thistoryPos--\n\t\t\t\t\tline = []rune(historyPrefix[historyPos])\n\t\t\t\t\tpos = len(line)\n\t\t\t\t\ts.needRefresh = true\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase ctrlN: // down\n\t\t\t\thistoryAction = true\n\t\t\t\tif historyStale {\n\t\t\t\t\thistoryPrefix = s.getHistoryByPrefix(string(line))\n\t\t\t\t\thistoryPos = len(historyPrefix)\n\t\t\t\t\thistoryStale = false\n\t\t\t\t}\n\t\t\t\tif historyPos < len(historyPrefix) {\n\t\t\t\t\thistoryPos++\n\t\t\t\t\tif historyPos == len(historyPrefix) {\n\t\t\t\t\t\tline = []rune(historyEnd)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tline = []rune(historyPrefix[historyPos])\n\t\t\t\t\t}\n\t\t\t\t\tpos = len(line)\n\t\t\t\t\ts.needRefresh = true\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase ctrlT: // transpose prev glyph with glyph under cursor\n\t\t\t\tif len(line) < 2 || pos < 1 {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t} else {\n\t\t\t\t\tif pos == len(line) {\n\t\t\t\t\t\tpos -= len(getSuffixGlyphs(line, 1))\n\t\t\t\t\t}\n\t\t\t\t\tprev := getSuffixGlyphs(line[:pos], 1)\n\t\t\t\t\tnext := getPrefixGlyphs(line[pos:], 1)\n\t\t\t\t\tscratch := make([]rune, len(prev))\n\t\t\t\t\tcopy(scratch, prev)\n\t\t\t\t\tcopy(line[pos-len(prev):], next)\n\t\t\t\t\tcopy(line[pos-len(prev)+len(next):], scratch)\n\t\t\t\t\tpos += len(next)\n\t\t\t\t\ts.needRefresh = true\n\t\t\t\t}\n\t\t\tcase ctrlL: // clear screen\n\t\t\t\ts.eraseScreen()\n\t\t\t\ts.needRefresh = true\n\t\t\tcase ctrlC: // reset\n\t\t\t\tfmt.Println(\"^C\")\n\t\t\t\tif s.multiLineMode {\n\t\t\t\t\ts.resetMultiLine(p, line, pos)\n\t\t\t\t}\n\t\t\t\tif s.ctrlCAborts {\n\t\t\t\t\treturn \"\", ErrPromptAborted\n\t\t\t\t}\n\t\t\t\tline = line[:0]\n\t\t\t\tpos = 0\n\t\t\t\tfmt.Print(prompt)\n\t\t\t\ts.restartPrompt()\n\t\t\tcase ctrlZ:\n\t\t\t\tif s.ctrlZStop {\n\t\t\t\t\thandleCtrlZ()\n\t\t\t\t}\n\t\t\tcase ctrlH, bs: // Backspace\n\t\t\t\tif pos <= 0 {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t} else {\n\t\t\t\t\tn := len(getSuffixGlyphs(line[:pos], 1))\n\t\t\t\t\tline = append(line[:pos-n], line[pos:]...)\n\t\t\t\t\tpos -= n\n\t\t\t\t\ts.needRefresh = true\n\t\t\t\t}\n\t\t\tcase ctrlU: // Erase line before cursor\n\t\t\t\tif killAction > 0 {\n\t\t\t\t\ts.addToKillRing(line[:pos], 2) // Add in prepend mode\n\t\t\t\t} else {\n\t\t\t\t\ts.addToKillRing(line[:pos], 0) // Add in normal mode\n\t\t\t\t}\n\n\t\t\t\tkillAction = 2 // Mark that there was some killing\n\t\t\t\tline = line[pos:]\n\t\t\t\tpos = 0\n\t\t\t\ts.needRefresh = true\n\t\t\tcase ctrlW: // Erase word\n\t\t\t\tpos, line, killAction = s.eraseWord(pos, line, killAction)\n\t\t\tcase ctrlY: // Paste from Yank buffer\n\t\t\t\tline, pos, next, err = s.yank(p, line, pos)\n\t\t\t\tgoto haveNext\n\t\t\tcase ctrlR: // Reverse Search\n\t\t\t\tline, pos, next, err = s.reverseISearch(line, pos)\n\t\t\t\ts.needRefresh = true\n\t\t\t\tgoto haveNext\n\t\t\tcase tab: // Tab completion\n\t\t\t\tline, pos, next, err = s.tabComplete(p, line, pos)\n\t\t\t\tgoto haveNext\n\t\t\t// Catch keys that do nothing, but you don't want them to beep\n\t\t\tcase esc:\n\t\t\t\t// DO NOTHING\n\t\t\t// Unused keys\n\t\t\tcase ctrlG, ctrlO, ctrlQ, ctrlS, ctrlV, ctrlX:\n\t\t\t\tfallthrough\n\t\t\t// Catch unhandled control codes (anything <= 31)\n\t\t\tcase 0, 28, 29, 30, 31:\n\t\t\t\ts.doBeep()\n\t\t\tdefault:\n\t\t\t\tif pos == len(line) && !s.multiLineMode &&\n\t\t\t\t\tlen(p)+len(line) < s.columns*4 && // Avoid countGlyphs on large lines\n\t\t\t\t\tcountGlyphs(p)+countGlyphs(line) < s.columns-1 {\n\t\t\t\t\tline = append(line, v)\n\t\t\t\t\tfmt.Printf(\"%c\", v)\n\t\t\t\t\tpos++\n\t\t\t\t} else {\n\t\t\t\t\tline = append(line[:pos], append([]rune{v}, line[pos:]...)...)\n\t\t\t\t\tpos++\n\t\t\t\t\ts.needRefresh = true\n\t\t\t\t}\n\t\t\t}\n\t\tcase action:\n\t\t\tswitch v {\n\t\t\tcase del:\n\t\t\t\tif pos >= len(line) {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t} else {\n\t\t\t\t\tn := len(getPrefixGlyphs(line[pos:], 1))\n\t\t\t\t\tline = append(line[:pos], line[pos+n:]...)\n\t\t\t\t}\n\t\t\tcase left:\n\t\t\t\tif pos > 0 {\n\t\t\t\t\tpos -= len(getSuffixGlyphs(line[:pos], 1))\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase wordLeft, altB:\n\t\t\t\tif pos > 0 {\n\t\t\t\t\tvar spaceHere, spaceLeft, leftKnown bool\n\t\t\t\t\tfor {\n\t\t\t\t\t\tpos--\n\t\t\t\t\t\tif pos == 0 {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif leftKnown {\n\t\t\t\t\t\t\tspaceHere = spaceLeft\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tspaceHere = unicode.IsSpace(line[pos])\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspaceLeft, leftKnown = unicode.IsSpace(line[pos-1]), true\n\t\t\t\t\t\tif !spaceHere && spaceLeft {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase right:\n\t\t\t\tif pos < len(line) {\n\t\t\t\t\tpos += len(getPrefixGlyphs(line[pos:], 1))\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase wordRight, altF:\n\t\t\t\tif pos < len(line) {\n\t\t\t\t\tvar spaceHere, spaceLeft, hereKnown bool\n\t\t\t\t\tfor {\n\t\t\t\t\t\tpos++\n\t\t\t\t\t\tif pos == len(line) {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif hereKnown {\n\t\t\t\t\t\t\tspaceLeft = spaceHere\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tspaceLeft = unicode.IsSpace(line[pos-1])\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspaceHere, hereKnown = unicode.IsSpace(line[pos]), true\n\t\t\t\t\t\tif spaceHere && !spaceLeft {\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase up:\n\t\t\t\thistoryAction = true\n\t\t\t\tif historyStale {\n\t\t\t\t\thistoryPrefix = s.getHistoryByPrefix(string(line))\n\t\t\t\t\thistoryPos = len(historyPrefix)\n\t\t\t\t\thistoryStale = false\n\t\t\t\t}\n\t\t\t\tif historyPos > 0 {\n\t\t\t\t\tif historyPos == len(historyPrefix) {\n\t\t\t\t\t\thistoryEnd = string(line)\n\t\t\t\t\t}\n\t\t\t\t\thistoryPos--\n\t\t\t\t\tline = []rune(historyPrefix[historyPos])\n\t\t\t\t\tpos = len(line)\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase down:\n\t\t\t\thistoryAction = true\n\t\t\t\tif historyStale {\n\t\t\t\t\thistoryPrefix = s.getHistoryByPrefix(string(line))\n\t\t\t\t\thistoryPos = len(historyPrefix)\n\t\t\t\t\thistoryStale = false\n\t\t\t\t}\n\t\t\t\tif historyPos < len(historyPrefix) {\n\t\t\t\t\thistoryPos++\n\t\t\t\t\tif historyPos == len(historyPrefix) {\n\t\t\t\t\t\tline = []rune(historyEnd)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tline = []rune(historyPrefix[historyPos])\n\t\t\t\t\t}\n\t\t\t\t\tpos = len(line)\n\t\t\t\t} else {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t}\n\t\t\tcase home: // Start of line\n\t\t\t\tpos = 0\n\t\t\tcase end: // End of line\n\t\t\t\tpos = len(line)\n\t\t\tcase altD: // Delete next word\n\t\t\t\tif pos == len(line) {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\t// Remove whitespace to the right\n\t\t\t\tvar buf []rune // Store the deleted chars in a buffer\n\t\t\t\tfor {\n\t\t\t\t\tif pos == len(line) || !unicode.IsSpace(line[pos]) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tbuf = append(buf, line[pos])\n\t\t\t\t\tline = append(line[:pos], line[pos+1:]...)\n\t\t\t\t}\n\t\t\t\t// Remove non-whitespace to the right\n\t\t\t\tfor {\n\t\t\t\t\tif pos == len(line) || unicode.IsSpace(line[pos]) {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tbuf = append(buf, line[pos])\n\t\t\t\t\tline = append(line[:pos], line[pos+1:]...)\n\t\t\t\t}\n\t\t\t\t// Save the result on the killRing\n\t\t\t\tif killAction > 0 {\n\t\t\t\t\ts.addToKillRing(buf, 2) // Add in prepend mode\n\t\t\t\t} else {\n\t\t\t\t\ts.addToKillRing(buf, 0) // Add in normal mode\n\t\t\t\t}\n\t\t\t\tkillAction = 2 // Mark that there was some killing\n\t\t\tcase altBs: // Erase word\n\t\t\t\tpos, line, killAction = s.eraseWord(pos, line, killAction)\n\t\t\tcase winch: // Window change\n\t\t\t\tif s.multiLineMode {\n\t\t\t\t\tif s.maxRows-s.cursorRows > 0 {\n\t\t\t\t\t\ts.moveDown(s.maxRows - s.cursorRows)\n\t\t\t\t\t}\n\t\t\t\t\tfor i := 0; i < s.maxRows-1; i++ {\n\t\t\t\t\t\ts.cursorPos(0)\n\t\t\t\t\t\ts.eraseLine()\n\t\t\t\t\t\ts.moveUp(1)\n\t\t\t\t\t}\n\t\t\t\t\ts.maxRows = 1\n\t\t\t\t\ts.cursorRows = 1\n\t\t\t\t}\n\t\t\t}\n\t\t\ts.needRefresh = true\n\t\t}\n\t\tif s.needRefresh && !s.inputWaiting() {\n\t\t\terr := s.refresh(p, line, pos)\n\t\t\tif err != nil {\n\t\t\t\treturn \"\", err\n\t\t\t}\n\t\t}\n\t\tif !historyAction {\n\t\t\thistoryStale = true\n\t\t}\n\t\tif killAction > 0 {\n\t\t\tkillAction--\n\t\t}\n\t}\n\treturn string(line), nil\n}\n\n// PasswordPrompt displays p, and then waits for user input. The input typed by\n// the user is not displayed in the terminal.\nfunc (s *State) PasswordPrompt(prompt string) (string, error) {\n\tfor _, r := range prompt {\n\t\tif unicode.Is(unicode.C, r) {\n\t\t\treturn \"\", ErrInvalidPrompt\n\t\t}\n\t}\n\tif !s.terminalSupported || s.columns == 0 {\n\t\treturn \"\", errors.New(\"liner: function not supported in this terminal\")\n\t}\n\tif s.inputRedirected {\n\t\treturn s.promptUnsupported(prompt)\n\t}\n\tif s.outputRedirected {\n\t\treturn \"\", ErrNotTerminalOutput\n\t}\n\n\tp := []rune(prompt)\n\n\tdefer s.stopPrompt()\n\nrestart:\n\ts.startPrompt()\n\ts.getColumns()\n\n\tfmt.Print(prompt)\n\tvar line []rune\n\tpos := 0\n\nmainLoop:\n\tfor {\n\t\tnext, err := s.readNext()\n\t\tif err != nil {\n\t\t\tif s.shouldRestart != nil && s.shouldRestart(err) {\n\t\t\t\tgoto restart\n\t\t\t}\n\t\t\treturn \"\", err\n\t\t}\n\n\t\tswitch v := next.(type) {\n\t\tcase rune:\n\t\t\tswitch v {\n\t\t\tcase cr, lf:\n\t\t\t\tfmt.Println()\n\t\t\t\tbreak mainLoop\n\t\t\tcase ctrlD: // del\n\t\t\t\tif pos == 0 && len(line) == 0 {\n\t\t\t\t\t// exit\n\t\t\t\t\treturn \"\", io.EOF\n\t\t\t\t}\n\n\t\t\t\t// ctrlD is a potential EOF, so the rune reader shuts down.\n\t\t\t\t// Therefore, if it isn't actually an EOF, we must re-startPrompt.\n\t\t\t\ts.restartPrompt()\n\t\t\tcase ctrlL: // clear screen\n\t\t\t\ts.eraseScreen()\n\t\t\t\terr := s.refresh(p, []rune{}, 0)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn \"\", err\n\t\t\t\t}\n\t\t\tcase ctrlH, bs: // Backspace\n\t\t\t\tif pos <= 0 {\n\t\t\t\t\ts.doBeep()\n\t\t\t\t} else {\n\t\t\t\t\tn := len(getSuffixGlyphs(line[:pos], 1))\n\t\t\t\t\tline = append(line[:pos-n], line[pos:]...)\n\t\t\t\t\tpos -= n\n\t\t\t\t}\n\t\t\tcase ctrlC:\n\t\t\t\tfmt.Println(\"^C\")\n\t\t\t\tif s.ctrlCAborts {\n\t\t\t\t\treturn \"\", ErrPromptAborted\n\t\t\t\t}\n\t\t\t\tline = line[:0]\n\t\t\t\tpos = 0\n\t\t\t\tfmt.Print(prompt)\n\t\t\t\ts.restartPrompt()\n\t\t\tcase ctrlZ:\n\t\t\t\tif s.ctrlZStop {\n\t\t\t\t\thandleCtrlZ()\n\t\t\t\t}\n\t\t\t// Unused keys\n\t\t\tcase esc, tab, ctrlA, ctrlB, ctrlE, ctrlF, ctrlG, ctrlK, ctrlN, ctrlO, ctrlP, ctrlQ, ctrlR, ctrlS,\n\t\t\t\tctrlT, ctrlU, ctrlV, ctrlW, ctrlX, ctrlY:\n\t\t\t\tfallthrough\n\t\t\t// Catch unhandled control codes (anything <= 31)\n\t\t\tcase 0, 28, 29, 30, 31:\n\t\t\t\ts.doBeep()\n\t\t\tdefault:\n\t\t\t\tline = append(line[:pos], append([]rune{v}, line[pos:]...)...)\n\t\t\t\tpos++\n\t\t\t}\n\t\t}\n\t}\n\treturn string(line), nil\n}\n\nfunc (s *State) tooNarrow(prompt string) (string, error) {\n\t// Docker and OpenWRT and etc sometimes return 0 column width\n\t// Reset mode temporarily. Restore baked mode in case the terminal\n\t// is wide enough for the next Prompt attempt.\n\tm, merr := TerminalMode()\n\ts.origMode.ApplyMode()\n\tif merr == nil {\n\t\tdefer m.ApplyMode()\n\t}\n\tif s.r == nil {\n\t\t// Windows does not always set s.r\n\t\ts.r = bufio.NewReader(os.Stdin)\n\t\tdefer func() { s.r = nil }()\n\t}\n\treturn s.promptUnsupported(prompt)\n}\n\nfunc (s *State) eraseWord(pos int, line []rune, killAction int) (int, []rune, int) {\n\tif pos == 0 {\n\t\ts.doBeep()\n\t\treturn pos, line, killAction\n\t}\n\t// Remove whitespace to the left\n\tvar buf []rune // Store the deleted chars in a buffer\n\tfor {\n\t\tif pos == 0 || !unicode.IsSpace(line[pos-1]) {\n\t\t\tbreak\n\t\t}\n\t\tbuf = append(buf, line[pos-1])\n\t\tline = append(line[:pos-1], line[pos:]...)\n\t\tpos--\n\t}\n\t// Remove non-whitespace to the left\n\tfor {\n\t\tif pos == 0 || unicode.IsSpace(line[pos-1]) {\n\t\t\tbreak\n\t\t}\n\t\tbuf = append(buf, line[pos-1])\n\t\tline = append(line[:pos-1], line[pos:]...)\n\t\tpos--\n\t}\n\t// Invert the buffer and save the result on the killRing\n\tvar newBuf []rune\n\tfor i := len(buf) - 1; i >= 0; i-- {\n\t\tnewBuf = append(newBuf, buf[i])\n\t}\n\tif killAction > 0 {\n\t\ts.addToKillRing(newBuf, 2) // Add in prepend mode\n\t} else {\n\t\ts.addToKillRing(newBuf, 0) // Add in normal mode\n\t}\n\tkillAction = 2 // Mark that there was some killing\n\n\ts.needRefresh = true\n\treturn pos, line, killAction\n}\n\nfunc (s *State) doBeep() {\n\tif !s.noBeep {\n\t\tfmt.Print(beep)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/output.go",
    "content": "//go:build linux || darwin || openbsd || freebsd || netbsd || solaris\n// +build linux darwin openbsd freebsd netbsd solaris\n\npackage liner\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n)\n\nfunc (s *State) cursorPos(x int) {\n\tif s.useCHA {\n\t\t// 'G' is \"Cursor Character Absolute (CHA)\"\n\t\tfmt.Printf(\"\\x1b[%dG\", x+1)\n\t} else {\n\t\t// 'C' is \"Cursor Forward (CUF)\"\n\t\tfmt.Print(\"\\r\")\n\t\tif x > 0 {\n\t\t\tfmt.Printf(\"\\x1b[%dC\", x)\n\t\t}\n\t}\n}\n\nfunc (s *State) eraseLine() {\n\tfmt.Print(\"\\x1b[0K\")\n}\n\nfunc (s *State) eraseScreen() {\n\tfmt.Print(\"\\x1b[H\\x1b[2J\")\n}\n\nfunc (s *State) moveUp(lines int) {\n\tfmt.Printf(\"\\x1b[%dA\", lines)\n}\n\nfunc (s *State) moveDown(lines int) {\n\tfmt.Printf(\"\\x1b[%dB\", lines)\n}\n\nfunc (s *State) emitNewLine() {\n\tfmt.Print(\"\\n\")\n}\n\ntype winSize struct {\n\trow, col       uint16\n\txpixel, ypixel uint16\n}\n\nfunc (s *State) checkOutput() {\n\t// xterm is known to support CHA\n\tif strings.Contains(strings.ToLower(os.Getenv(\"TERM\")), \"xterm\") {\n\t\ts.useCHA = true\n\t\treturn\n\t}\n\n\t// The test for functional ANSI CHA is unreliable (eg the Windows\n\t// telnet command does not support reading the cursor position with\n\t// an ANSI DSR request, despite setting TERM=ansi)\n\n\t// Assume CHA isn't supported (which should be safe, although it\n\t// does result in occasional visible cursor jitter)\n\ts.useCHA = false\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/output_solaris.go",
    "content": "package liner\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc (s *State) getColumns() bool {\n\tws, err := unix.IoctlGetWinsize(unix.Stdout, unix.TIOCGWINSZ)\n\tif err != nil {\n\t\treturn false\n\t}\n\ts.columns = int(ws.Col)\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/output_unix.go",
    "content": "//go:build linux || darwin || openbsd || freebsd || netbsd\n// +build linux darwin openbsd freebsd netbsd\n\npackage liner\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (s *State) getColumns() bool {\n\tvar ws winSize\n\tok, _, _ := syscall.Syscall(syscall.SYS_IOCTL, uintptr(syscall.Stdout),\n\t\tsyscall.TIOCGWINSZ, uintptr(unsafe.Pointer(&ws)))\n\tif int(ok) < 0 {\n\t\treturn false\n\t}\n\ts.columns = int(ws.col)\n\treturn true\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/output_windows.go",
    "content": "package liner\n\nimport (\n\t\"unsafe\"\n)\n\ntype coord struct {\n\tx, y int16\n}\ntype smallRect struct {\n\tleft, top, right, bottom int16\n}\n\ntype consoleScreenBufferInfo struct {\n\tdwSize              coord\n\tdwCursorPosition    coord\n\twAttributes         int16\n\tsrWindow            smallRect\n\tdwMaximumWindowSize coord\n}\n\nfunc (s *State) cursorPos(x int) {\n\tvar sbi consoleScreenBufferInfo\n\tprocGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi)))\n\tprocSetConsoleCursorPosition.Call(uintptr(s.hOut),\n\t\tuintptr(int(x)&0xFFFF|int(sbi.dwCursorPosition.y)<<16))\n}\n\nfunc (s *State) eraseLine() {\n\tvar sbi consoleScreenBufferInfo\n\tprocGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi)))\n\tvar numWritten uint32\n\tprocFillConsoleOutputCharacter.Call(uintptr(s.hOut), uintptr(' '),\n\t\tuintptr(sbi.dwSize.x-sbi.dwCursorPosition.x),\n\t\tuintptr(int(sbi.dwCursorPosition.x)&0xFFFF|int(sbi.dwCursorPosition.y)<<16),\n\t\tuintptr(unsafe.Pointer(&numWritten)))\n}\n\nfunc (s *State) eraseScreen() {\n\tvar sbi consoleScreenBufferInfo\n\tprocGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi)))\n\tvar numWritten uint32\n\tprocFillConsoleOutputCharacter.Call(uintptr(s.hOut), uintptr(' '),\n\t\tuintptr(sbi.dwSize.x)*uintptr(sbi.dwSize.y),\n\t\t0,\n\t\tuintptr(unsafe.Pointer(&numWritten)))\n\tprocSetConsoleCursorPosition.Call(uintptr(s.hOut), 0)\n}\n\nfunc (s *State) moveUp(lines int) {\n\tvar sbi consoleScreenBufferInfo\n\tprocGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi)))\n\tprocSetConsoleCursorPosition.Call(uintptr(s.hOut),\n\t\tuintptr(int(sbi.dwCursorPosition.x)&0xFFFF|(int(sbi.dwCursorPosition.y)-lines)<<16))\n}\n\nfunc (s *State) moveDown(lines int) {\n\tvar sbi consoleScreenBufferInfo\n\tprocGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi)))\n\tprocSetConsoleCursorPosition.Call(uintptr(s.hOut),\n\t\tuintptr(int(sbi.dwCursorPosition.x)&0xFFFF|(int(sbi.dwCursorPosition.y)+lines)<<16))\n}\n\nfunc (s *State) emitNewLine() {\n\t// windows doesn't need to omit a new line\n}\n\nfunc (s *State) getColumns() {\n\tvar sbi consoleScreenBufferInfo\n\tprocGetConsoleScreenBufferInfo.Call(uintptr(s.hOut), uintptr(unsafe.Pointer(&sbi)))\n\ts.columns = int(sbi.dwSize.x)\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/signal_unix.go",
    "content": "// +build linux darwin openbsd freebsd netbsd\n\npackage liner\n\nimport (\n\t\"os\"\n\t\"syscall\"\n)\n\nfunc handleCtrlZ() {\n\tpid := os.Getpid()\n\tpgrp, err := syscall.Getpgid(pid)\n\tif err == nil {\n\t\tsyscall.Kill(-pgrp, syscall.SIGTSTP)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/signal_windows.go",
    "content": "package liner\n\nfunc handleCtrlZ() {}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/unixmode.go",
    "content": "//go:build linux || darwin || freebsd || openbsd || netbsd\n// +build linux darwin freebsd openbsd netbsd\n\npackage liner\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc (mode *termios) ApplyMode() error {\n\t_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(syscall.Stdin), setTermios, uintptr(unsafe.Pointer(mode)))\n\n\tif errno != 0 {\n\t\treturn errno\n\t}\n\treturn nil\n}\n\n// TerminalMode returns the current terminal input mode as an InputModeSetter.\n//\n// This function is provided for convenience, and should\n// not be necessary for most users of liner.\nfunc TerminalMode() (ModeApplier, error) {\n\treturn getMode(syscall.Stdin)\n}\n\nfunc getMode(handle int) (*termios, error) {\n\tvar mode termios\n\tvar err error\n\t_, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(handle), getTermios, uintptr(unsafe.Pointer(&mode)))\n\tif errno != 0 {\n\t\terr = errno\n\t}\n\n\treturn &mode, err\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/unixmode_solaris.go",
    "content": "package liner\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\nfunc (mode *termios) ApplyMode() error {\n\treturn unix.IoctlSetTermios(unix.Stdin, setTermios, (*unix.Termios)(mode))\n}\n\n// TerminalMode returns the current terminal input mode as an InputModeSetter.\n//\n// This function is provided for convenience, and should\n// not be necessary for most users of liner.\nfunc TerminalMode() (ModeApplier, error) {\n\treturn getMode(unix.Stdin)\n}\n\nfunc getMode(handle int) (*termios, error) {\n\ttos, err := unix.IoctlGetTermios(handle, getTermios)\n\treturn (*termios)(tos), err\n}\n"
  },
  {
    "path": "vendor/github.com/go-delve/liner/width.go",
    "content": "package liner\n\nimport (\n\t\"unicode\"\n\n\t\"github.com/mattn/go-runewidth\"\n)\n\n// These character classes are mostly zero width (when combined).\n// A few might not be, depending on the user's font. Fixing this\n// is non-trivial, given that some terminals don't support\n// ANSI DSR/CPR\nvar zeroWidth = []*unicode.RangeTable{\n\tunicode.Mn,\n\tunicode.Me,\n\tunicode.Cc,\n\tunicode.Cf,\n}\n\n// countGlyphs considers zero-width characters to be zero glyphs wide,\n// and members of Chinese, Japanese, and Korean scripts to be 2 glyphs wide.\nfunc countGlyphs(s []rune) int {\n\tn := 0\n\tfor _, r := range s {\n\t\t// speed up the common case\n\t\tif r < 127 {\n\t\t\tn++\n\t\t\tcontinue\n\t\t}\n\n\t\tn += runewidth.RuneWidth(r)\n\t}\n\treturn n\n}\n\nfunc countMultiLineGlyphs(s []rune, columns int, start int) int {\n\tn := start\n\tfor _, r := range s {\n\t\tif r < 127 {\n\t\t\tn++\n\t\t\tcontinue\n\t\t}\n\t\tswitch runewidth.RuneWidth(r) {\n\t\tcase 0:\n\t\tcase 1:\n\t\t\tn++\n\t\tcase 2:\n\t\t\tn += 2\n\t\t\t// no room for a 2-glyphs-wide char in the ending\n\t\t\t// so skip a column and display it at the beginning\n\t\t\tif n%columns == 1 {\n\t\t\t\tn++\n\t\t\t}\n\t\t}\n\t}\n\treturn n\n}\n\nfunc getPrefixGlyphs(s []rune, num int) []rune {\n\tp := 0\n\tfor n := 0; n < num && p < len(s); p++ {\n\t\t// speed up the common case\n\t\tif s[p] < 127 {\n\t\t\tn++\n\t\t\tcontinue\n\t\t}\n\t\tif !unicode.IsOneOf(zeroWidth, s[p]) {\n\t\t\tn++\n\t\t}\n\t}\n\tfor p < len(s) && unicode.IsOneOf(zeroWidth, s[p]) {\n\t\tp++\n\t}\n\treturn s[:p]\n}\n\nfunc getSuffixGlyphs(s []rune, num int) []rune {\n\tp := len(s)\n\tfor n := 0; n < num && p > 0; p-- {\n\t\t// speed up the common case\n\t\tif s[p-1] < 127 {\n\t\t\tn++\n\t\t\tcontinue\n\t\t}\n\t\tif !unicode.IsOneOf(zeroWidth, s[p-1]) {\n\t\t\tn++\n\t\t}\n\t}\n\treturn s[p:]\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-dap/LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/google/go-dap/README.md",
    "content": "# go-dap: Go implementation of the Debug Adapter Protocol\n\n[![PkgGoDev](https://pkg.go.dev/badge/github.com/google/go-dap)](https://pkg.go.dev/github.com/google/go-dap)\n[![Build Status](https://github.com/google/go-dap/actions/workflows/go.yml/badge.svg?branch=master)](https://github.com/google/go-dap/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/google/go-dap)](https://goreportcard.com/report/github.com/google/go-dap)\n\nFor an overview of DAP, see\nhttps://microsoft.github.io/debug-adapter-protocol/overview\n\n## Contributing\n\nWe'd love to accept your patches and contributions to this project. See\n[docs/contributing](https://github.com/google/go-dap/blob/master/docs/contributing.md)\nfor more details.\n\n## License\n\nThis project is licensed under the Apache License 2.0\n\nThis is not an officially supported Google product.\n"
  },
  {
    "path": "vendor/github.com/google/go-dap/codec.go",
    "content": "// Copyright 2020 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     https://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// This file contains utilities for decoding JSON-encoded bytes into DAP message.\n\npackage dap\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n)\n\n// DecodeProtocolMessageFieldError describes which JSON attribute\n// has an unsupported value that the decoding cannot handle.\ntype DecodeProtocolMessageFieldError struct {\n\tSeq        int\n\tSubType    string\n\tFieldName  string\n\tFieldValue string\n\tMessage    json.RawMessage\n}\n\nfunc (e *DecodeProtocolMessageFieldError) Error() string {\n\treturn fmt.Sprintf(\"%s %s '%s' is not supported (seq: %d)\", e.SubType, e.FieldName, e.FieldValue, e.Seq)\n}\n\n// defaultCodec is used to decode vanilla DAP messages.\nvar defaultCodec = NewCodec()\n\n// Codec is responsible for turning byte blobs into DAP messages.\ntype Codec struct {\n\teventCtor    map[string]messageCtor\n\trequestCtor  map[string]messageCtor\n\tresponseCtor map[string]messageCtor\n}\n\n// NewCodec constructs a new codec that extends the vanilla DAP protocol.\n// Unless you need to register custom DAP messages, use\n// DecodeProtocolMessage instead.\nfunc NewCodec() *Codec {\n\tret := &Codec{\n\t\teventCtor:    make(map[string]messageCtor),\n\t\trequestCtor:  make(map[string]messageCtor),\n\t\tresponseCtor: make(map[string]messageCtor),\n\t}\n\tfor k, v := range eventCtor {\n\t\tret.eventCtor[k] = v\n\t}\n\tfor k, v := range requestCtor {\n\t\tret.requestCtor[k] = v\n\t}\n\tfor k, v := range responseCtor {\n\t\tret.responseCtor[k] = v\n\t}\n\treturn ret\n}\n\n// RegisterRequest registers a new custom DAP command, so that it can be\n// unmarshalled by DecodeMessage. Returns an error when the command already\n// exists.\n//\n// The ctor functions need to return a new instance of the underlying DAP\n// message type. A typical usage looks like this:\n//\n//\treqCtor := func() Message { return &LaunchRequest{} }\n//\trespCtor := func() Message { return &LaunchResponse{} }\n//      codec.RegisterRequest(\"launch\", reqCtor, respCtor)\nfunc (c *Codec) RegisterRequest(command string, requestCtor, responseCtor func() Message) error {\n\t_, hasReqCtor := c.requestCtor[command]\n\t_, hasRespCtor := c.responseCtor[command]\n\tif hasReqCtor || hasRespCtor {\n\t\treturn fmt.Errorf(\"command %q is already registered\", command)\n\t}\n\tc.requestCtor[command] = requestCtor\n\tc.responseCtor[command] = responseCtor\n\treturn nil\n}\n\n// RegisterEvent registers a new custom DAP event, so that it can be\n// unmarshalled by DecodeMessage. Returns an error when the event already\n// exists.\n//\n// The ctor function needs to return a new instance of the underlying DAP\n// message type. A typical usage looks like this:\n//\n//\tctor := func() Message { return &StoppedEvent{} }\n//      codec.RegisterEvent(\"stopped\", ctor)\nfunc (c *Codec) RegisterEvent(event string, ctor func() Message) error {\n\tif _, hasEventCtor := c.eventCtor[event]; hasEventCtor {\n\t\treturn fmt.Errorf(\"event %q is already registered\", event)\n\t}\n\tc.eventCtor[event] = ctor\n\treturn nil\n}\n\n// DecodeMessage parses the JSON-encoded data and returns the result of\n// the appropriate type within the ProtocolMessage hierarchy. If message type,\n// command, etc cannot be cast, returns DecodeProtocolMessageFieldError.\n// See also godoc for json.Unmarshal, which is used for underlying decoding.\nfunc (c *Codec) DecodeMessage(data []byte) (Message, error) {\n\t// This struct is the union of the ResponseMessage, RequestMessage, and\n\t// EventMessage types. It is an optimization that saves an additional\n\t// json.Unmarshal call.\n\tvar m struct {\n\t\tProtocolMessage\n\t\tCommand string `json:\"command\"`\n\t\tEvent   string `json:\"event\"`\n\t\tSuccess bool   `json:\"success\"`\n\t}\n\tif err := json.Unmarshal(data, &m); err != nil {\n\t\treturn nil, err\n\t}\n\tswitch m.Type {\n\tcase \"request\":\n\t\treturn c.decodeRequest(m.Command, m.Seq, data)\n\tcase \"response\":\n\t\treturn c.decodeResponse(m.Command, m.Seq, m.Success, data)\n\tcase \"event\":\n\t\treturn c.decodeEvent(m.Event, m.Seq, data)\n\tdefault:\n\t\treturn nil, &DecodeProtocolMessageFieldError{m.Seq, \"ProtocolMessage\", \"type\", m.Type, json.RawMessage(data)}\n\t}\n}\n\n// decodeRequest determines what request type in the ProtocolMessage hierarchy\n// data corresponds to and uses json.Unmarshal to populate the corresponding\n// struct to be returned.\nfunc (c *Codec) decodeRequest(command string, seq int, data []byte) (Message, error) {\n\tctor, ok := c.requestCtor[command]\n\tif !ok {\n\t\treturn nil, &DecodeProtocolMessageFieldError{seq, \"Request\", \"command\", command, json.RawMessage(data)}\n\t}\n\trequestPtr := ctor()\n\terr := json.Unmarshal(data, requestPtr)\n\treturn requestPtr, err\n}\n\n// decodeResponse determines what response type in the ProtocolMessage hierarchy\n// data corresponds to and uses json.Unmarshal to populate the corresponding\n// struct to be returned.\nfunc (c *Codec) decodeResponse(command string, seq int, success bool, data []byte) (Message, error) {\n\tif !success {\n\t\tvar er ErrorResponse\n\t\terr := json.Unmarshal(data, &er)\n\t\treturn &er, err\n\t}\n\tctor, ok := c.responseCtor[command]\n\tif !ok {\n\t\treturn nil, &DecodeProtocolMessageFieldError{seq, \"Response\", \"command\", command, json.RawMessage(data)}\n\t}\n\tresponsePtr := ctor()\n\terr := json.Unmarshal(data, responsePtr)\n\treturn responsePtr, err\n}\n\n// decodeEvent determines what event type in the ProtocolMessage hierarchy\n// data corresponds to and uses json.Unmarshal to populate the corresponding\n// struct to be returned.\nfunc (c *Codec) decodeEvent(event string, seq int, data []byte) (Message, error) {\n\tctor, ok := c.eventCtor[event]\n\tif !ok {\n\t\treturn nil, &DecodeProtocolMessageFieldError{seq, \"Event\", \"event\", event, json.RawMessage(data)}\n\t}\n\teventPtr := ctor()\n\terr := json.Unmarshal(data, eventPtr)\n\treturn eventPtr, err\n}\n\n// DecodeProtocolMessage parses the JSON-encoded ProtocolMessage and returns\n// the message embedded in it. If message type, command, etc cannot be cast,\n// returns DecodeProtocolMessageFieldError. See also godoc for json.Unmarshal,\n// which is used for underlying decoding.\nfunc DecodeProtocolMessage(data []byte) (Message, error) {\n\treturn defaultCodec.DecodeMessage(data)\n}\n\ntype messageCtor func() Message\n"
  },
  {
    "path": "vendor/github.com/google/go-dap/doc.go",
    "content": "// Copyright 2021 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     https://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package dap contains data types and code for Debug Adapter Protocol (DAP) specification.\n// https://github.com/microsoft/vscode-debugadapter-node/blob/main/debugProtocol.json\npackage dap\n\n//go:generate go run ./cmd/gentypes/gentypes.go -o schematypes.go -u cmd/gentypes/debugProtocol.json\n\n"
  },
  {
    "path": "vendor/github.com/google/go-dap/io.go",
    "content": "// Copyright 2020 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     https://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// This file contains utilities for DAP Base protocol I/O.\n// For additional information, see \"Base protocol\" section in\n// https://microsoft.github.io/debug-adapter-protocol/overview.\n\npackage dap\n\nimport (\n\t\"bufio\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// BaseProtocolError represents base protocol error, which occurs when the raw\n// message does not conform to the header+content format of the base protocol.\ntype BaseProtocolError struct {\n\tErr string\n}\n\nfunc (bpe *BaseProtocolError) Error() string { return bpe.Err }\n\nvar (\n\t// ErrHeaderDelimiterNotCrLfCrLf is returned when only partial header\n\t// delimiter \\r\\n\\r\\n is encountered.\n\tErrHeaderDelimiterNotCrLfCrLf = &BaseProtocolError{fmt.Sprintf(\"header delimiter is not %q\", crLfcrLf)}\n\n\t// ErrHeaderNotContentLength is returned when the parsed header is\n\t// not of valid Content-Length format.\n\tErrHeaderNotContentLength = &BaseProtocolError{fmt.Sprintf(\"header format is not %q\", contentLengthHeaderRegex)}\n\n\t// ErrHeaderContentTooLong is returned when the content length specified in\n\t// the header is above contentMaxLength.\n\tErrHeaderContentTooLong = &BaseProtocolError{fmt.Sprintf(\"content length over %v bytes\", contentMaxLength)}\n)\n\nconst (\n\tcrLfcrLf               = \"\\r\\n\\r\\n\"\n\tcontentLengthHeaderFmt = \"Content-Length: %d\\r\\n\\r\\n\"\n\tcontentMaxLength       = 4 * 1024 * 1024\n)\n\nvar (\n\tcontentLengthHeaderRegex = regexp.MustCompile(\"^Content-Length: ([0-9]+)$\")\n)\n\n// WriteBaseMessage formats content with Content-Length header and delimiters\n// as per the base protocol and writes the resulting message to w.\nfunc WriteBaseMessage(w io.Writer, content []byte) error {\n\theader := fmt.Sprintf(contentLengthHeaderFmt, len(content))\n\tif _, err := w.Write([]byte(header)); err != nil {\n\t\treturn err\n\t}\n\t_, err := w.Write(content)\n\treturn err\n}\n\n// ReadBaseMessage reads one message from r consisting of a Content-Length\n// header and a content part. It parses the header to determine the size of\n// the content part and extracts and returns the actual content of the message.\n// Returns nil bytes on error, which can be one of the standard IO errors or\n// a BaseProtocolError defined in this package.\nfunc ReadBaseMessage(r *bufio.Reader) ([]byte, error) {\n\tcontentLength, err := readContentLengthHeader(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif contentLength > contentMaxLength {\n\t\treturn nil, ErrHeaderContentTooLong\n\t}\n\tcontent := make([]byte, contentLength)\n\tif _, err = io.ReadFull(r, content); err != nil {\n\t\treturn nil, err\n\t}\n\treturn content, nil\n}\n\n// readContentLengthHeader looks for the only header field that is supported\n// and required:\n// \t\tContent-Length: [0-9]+\\r\\n\\r\\n\n// Extracts and returns the content length.\nfunc readContentLengthHeader(r *bufio.Reader) (contentLength int64, err error) {\n\t// Look for <some header>\\r\\n\\r\\n\n\theaderWithCr, err := r.ReadString('\\r')\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tnextThree := make([]byte, 3)\n\tif _, err = io.ReadFull(r, nextThree); err != nil {\n\t\treturn 0, err\n\t}\n\tif string(nextThree) != \"\\n\\r\\n\" {\n\t\treturn 0, ErrHeaderDelimiterNotCrLfCrLf\n\t}\n\n\t// If header is in the right format, get the length\n\theader := strings.TrimSuffix(headerWithCr, \"\\r\")\n\theaderAndLength := contentLengthHeaderRegex.FindStringSubmatch(header)\n\tif len(headerAndLength) < 2 {\n\t\treturn 0, ErrHeaderNotContentLength\n\t}\n\treturn strconv.ParseInt(headerAndLength[1], 10, 64)\n}\n\n// WriteProtocolMessage encodes message and writes it to w.\nfunc WriteProtocolMessage(w io.Writer, message Message) error {\n\tb, err := json.Marshal(message)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn WriteBaseMessage(w, b)\n}\n\n// ReadProtocolMessage reads a message from r, decodes and returns it.\nfunc ReadProtocolMessage(r *bufio.Reader) (Message, error) {\n\tcontent, err := ReadBaseMessage(r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn DecodeProtocolMessage(content)\n}\n"
  },
  {
    "path": "vendor/github.com/google/go-dap/schematypes.go",
    "content": "// Copyright 2020 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     https://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Code generated by \"cmd/gentypes/gentypes.go\"; DO NOT EDIT.\n// DAP spec: https://microsoft.github.io/debug-adapter-protocol/specification\n// See cmd/gentypes/README.md for additional details.\n\npackage dap\n\nimport \"encoding/json\"\n\n// Message is an interface that all DAP message types implement with pointer\n// receivers. It's not part of the protocol but is used to enforce static\n// typing in Go code and provide some common accessors.\n//\n// Note: the DAP type \"Message\" (which is used in the body of ErrorResponse)\n// is renamed to ErrorMessage to avoid collision with this interface.\ntype Message interface {\n\tGetSeq() int\n}\n\n// RequestMessage is an interface implemented by all Request-types.\ntype RequestMessage interface {\n\tMessage\n\t// GetRequest provides access to the embedded Request.\n\tGetRequest() *Request\n}\n\n// ResponseMessage is an interface implemented by all Response-types.\ntype ResponseMessage interface {\n\tMessage\n\t// GetResponse provides access to the embedded Response.\n\tGetResponse() *Response\n}\n\n// EventMessage is an interface implemented by all Event-types.\ntype EventMessage interface {\n\tMessage\n\t// GetEvent provides access to the embedded Event.\n\tGetEvent() *Event\n}\n\n// LaunchAttachRequest is an interface implemented by\n// LaunchRequest and AttachRequest as they contain shared\n// implementation specific arguments that are not part of\n// the specification.\ntype LaunchAttachRequest interface {\n\tRequestMessage\n\t// GetArguments provides access to the Arguments map.\n\tGetArguments() json.RawMessage\n}\n\n// ProtocolMessage: Base class of requests, responses, and events.\ntype ProtocolMessage struct {\n\tSeq  int    `json:\"seq\"`\n\tType string `json:\"type\"`\n}\n\nfunc (m *ProtocolMessage) GetSeq() int { return m.Seq }\n\n// Request: A client or debug adapter initiated request.\ntype Request struct {\n\tProtocolMessage\n\n\tCommand string `json:\"command\"`\n}\n\nfunc (r *Request) GetRequest() *Request { return r }\n\n// Event: A debug adapter initiated event.\ntype Event struct {\n\tProtocolMessage\n\n\tEvent string `json:\"event\"`\n}\n\nfunc (e *Event) GetEvent() *Event { return e }\n\n// Response: Response for a request.\ntype Response struct {\n\tProtocolMessage\n\n\tRequestSeq int    `json:\"request_seq\"`\n\tSuccess    bool   `json:\"success\"`\n\tCommand    string `json:\"command\"`\n\tMessage    string `json:\"message,omitempty\"`\n}\n\nfunc (r *Response) GetResponse() *Response { return r }\n\n// ErrorResponse: On error (whenever `success` is false), the body can provide more details.\ntype ErrorResponse struct {\n\tResponse\n\n\tBody ErrorResponseBody `json:\"body\"`\n}\n\ntype ErrorResponseBody struct {\n\tError *ErrorMessage `json:\"error,omitempty\"`\n}\n\n// CancelRequest: The `cancel` request is used by the client in two situations:\n// - to indicate that it is no longer interested in the result produced by a specific request issued earlier\n// - to cancel a progress sequence. Clients should only call this request if the corresponding capability `supportsCancelRequest` is true.\n// This request has a hint characteristic: a debug adapter can only be expected to make a 'best effort' in honoring this request but there are no guarantees.\n// The `cancel` request may return an error if it could not cancel an operation but a client should refrain from presenting this error to end users.\n// The request that got cancelled still needs to send a response back. This can either be a normal result (`success` attribute true) or an error response (`success` attribute false and the `message` set to `cancelled`).\n// Returning partial results from a cancelled request is possible but please note that a client has no generic way for detecting that a response is partial or not.\n// The progress that got cancelled still needs to send a `progressEnd` event back.\n//\n//\tA client should not assume that progress just got cancelled after sending the `cancel` request.\ntype CancelRequest struct {\n\tRequest\n\n\tArguments *CancelArguments `json:\"arguments,omitempty\"`\n}\n\n// CancelArguments: Arguments for `cancel` request.\ntype CancelArguments struct {\n\tRequestId  int    `json:\"requestId,omitempty\"`\n\tProgressId string `json:\"progressId,omitempty\"`\n}\n\n// CancelResponse: Response to `cancel` request. This is just an acknowledgement, so no body field is required.\ntype CancelResponse struct {\n\tResponse\n}\n\n// InitializedEvent: This event indicates that the debug adapter is ready to accept configuration requests (e.g. `setBreakpoints`, `setExceptionBreakpoints`).\n// A debug adapter is expected to send this event when it is ready to accept configuration requests (but not before the `initialize` request has finished).\n// The sequence of events/requests is as follows:\n// - adapters sends `initialized` event (after the `initialize` request has returned)\n// - client sends zero or more `setBreakpoints` requests\n// - client sends one `setFunctionBreakpoints` request (if corresponding capability `supportsFunctionBreakpoints` is true)\n// - client sends a `setExceptionBreakpoints` request if one or more `exceptionBreakpointFilters` have been defined (or if `supportsConfigurationDoneRequest` is not true)\n// - client sends other future configuration requests\n// - client sends one `configurationDone` request to indicate the end of the configuration.\ntype InitializedEvent struct {\n\tEvent\n}\n\n// StoppedEvent: The event indicates that the execution of the debuggee has stopped due to some condition.\n// This can be caused by a breakpoint previously set, a stepping request has completed, by executing a debugger statement etc.\ntype StoppedEvent struct {\n\tEvent\n\n\tBody StoppedEventBody `json:\"body\"`\n}\n\ntype StoppedEventBody struct {\n\tReason            string `json:\"reason\"`\n\tDescription       string `json:\"description,omitempty\"`\n\tThreadId          int    `json:\"threadId,omitempty\"`\n\tPreserveFocusHint bool   `json:\"preserveFocusHint,omitempty\"`\n\tText              string `json:\"text,omitempty\"`\n\tAllThreadsStopped bool   `json:\"allThreadsStopped,omitempty\"`\n\tHitBreakpointIds  []int  `json:\"hitBreakpointIds,omitempty\"`\n}\n\n// ContinuedEvent: The event indicates that the execution of the debuggee has continued.\n// Please note: a debug adapter is not expected to send this event in response to a request that implies that execution continues, e.g. `launch` or `continue`.\n// It is only necessary to send a `continued` event if there was no previous request that implied this.\ntype ContinuedEvent struct {\n\tEvent\n\n\tBody ContinuedEventBody `json:\"body\"`\n}\n\ntype ContinuedEventBody struct {\n\tThreadId            int  `json:\"threadId\"`\n\tAllThreadsContinued bool `json:\"allThreadsContinued,omitempty\"`\n}\n\n// ExitedEvent: The event indicates that the debuggee has exited and returns its exit code.\ntype ExitedEvent struct {\n\tEvent\n\n\tBody ExitedEventBody `json:\"body\"`\n}\n\ntype ExitedEventBody struct {\n\tExitCode int `json:\"exitCode\"`\n}\n\n// TerminatedEvent: The event indicates that debugging of the debuggee has terminated. This does **not** mean that the debuggee itself has exited.\ntype TerminatedEvent struct {\n\tEvent\n\n\tBody TerminatedEventBody `json:\"body,omitempty\"`\n}\n\ntype TerminatedEventBody struct {\n\tRestart json.RawMessage `json:\"restart,omitempty\"`\n}\n\n// ThreadEvent: The event indicates that a thread has started or exited.\ntype ThreadEvent struct {\n\tEvent\n\n\tBody ThreadEventBody `json:\"body\"`\n}\n\ntype ThreadEventBody struct {\n\tReason   string `json:\"reason\"`\n\tThreadId int    `json:\"threadId\"`\n}\n\n// OutputEvent: The event indicates that the target has produced some output.\ntype OutputEvent struct {\n\tEvent\n\n\tBody OutputEventBody `json:\"body\"`\n}\n\ntype OutputEventBody struct {\n\tCategory           string          `json:\"category,omitempty\"`\n\tOutput             string          `json:\"output\"`\n\tGroup              string          `json:\"group,omitempty\"`\n\tVariablesReference int             `json:\"variablesReference,omitempty\"`\n\tSource             *Source         `json:\"source,omitempty\"`\n\tLine               int             `json:\"line,omitempty\"`\n\tColumn             int             `json:\"column,omitempty\"`\n\tData               json.RawMessage `json:\"data,omitempty\"`\n}\n\n// BreakpointEvent: The event indicates that some information about a breakpoint has changed.\ntype BreakpointEvent struct {\n\tEvent\n\n\tBody BreakpointEventBody `json:\"body\"`\n}\n\ntype BreakpointEventBody struct {\n\tReason     string     `json:\"reason\"`\n\tBreakpoint Breakpoint `json:\"breakpoint\"`\n}\n\n// ModuleEvent: The event indicates that some information about a module has changed.\ntype ModuleEvent struct {\n\tEvent\n\n\tBody ModuleEventBody `json:\"body\"`\n}\n\ntype ModuleEventBody struct {\n\tReason string `json:\"reason\"`\n\tModule Module `json:\"module\"`\n}\n\n// LoadedSourceEvent: The event indicates that some source has been added, changed, or removed from the set of all loaded sources.\ntype LoadedSourceEvent struct {\n\tEvent\n\n\tBody LoadedSourceEventBody `json:\"body\"`\n}\n\ntype LoadedSourceEventBody struct {\n\tReason string `json:\"reason\"`\n\tSource Source `json:\"source\"`\n}\n\n// ProcessEvent: The event indicates that the debugger has begun debugging a new process. Either one that it has launched, or one that it has attached to.\ntype ProcessEvent struct {\n\tEvent\n\n\tBody ProcessEventBody `json:\"body\"`\n}\n\ntype ProcessEventBody struct {\n\tName            string `json:\"name\"`\n\tSystemProcessId int    `json:\"systemProcessId,omitempty\"`\n\tIsLocalProcess  bool   `json:\"isLocalProcess,omitempty\"`\n\tStartMethod     string `json:\"startMethod,omitempty\"`\n\tPointerSize     int    `json:\"pointerSize,omitempty\"`\n}\n\n// CapabilitiesEvent: The event indicates that one or more capabilities have changed.\n// Since the capabilities are dependent on the client and its UI, it might not be possible to change that at random times (or too late).\n// Consequently this event has a hint characteristic: a client can only be expected to make a 'best effort' in honoring individual capabilities but there are no guarantees.\n// Only changed capabilities need to be included, all other capabilities keep their values.\ntype CapabilitiesEvent struct {\n\tEvent\n\n\tBody CapabilitiesEventBody `json:\"body\"`\n}\n\ntype CapabilitiesEventBody struct {\n\tCapabilities Capabilities `json:\"capabilities\"`\n}\n\n// ProgressStartEvent: The event signals that a long running operation is about to start and provides additional information for the client to set up a corresponding progress and cancellation UI.\n// The client is free to delay the showing of the UI in order to reduce flicker.\n// This event should only be sent if the corresponding capability `supportsProgressReporting` is true.\ntype ProgressStartEvent struct {\n\tEvent\n\n\tBody ProgressStartEventBody `json:\"body\"`\n}\n\ntype ProgressStartEventBody struct {\n\tProgressId  string `json:\"progressId\"`\n\tTitle       string `json:\"title\"`\n\tRequestId   int    `json:\"requestId,omitempty\"`\n\tCancellable bool   `json:\"cancellable,omitempty\"`\n\tMessage     string `json:\"message,omitempty\"`\n\tPercentage  int    `json:\"percentage,omitempty\"`\n}\n\n// ProgressUpdateEvent: The event signals that the progress reporting needs to be updated with a new message and/or percentage.\n// The client does not have to update the UI immediately, but the clients needs to keep track of the message and/or percentage values.\n// This event should only be sent if the corresponding capability `supportsProgressReporting` is true.\ntype ProgressUpdateEvent struct {\n\tEvent\n\n\tBody ProgressUpdateEventBody `json:\"body\"`\n}\n\ntype ProgressUpdateEventBody struct {\n\tProgressId string `json:\"progressId\"`\n\tMessage    string `json:\"message,omitempty\"`\n\tPercentage int    `json:\"percentage,omitempty\"`\n}\n\n// ProgressEndEvent: The event signals the end of the progress reporting with a final message.\n// This event should only be sent if the corresponding capability `supportsProgressReporting` is true.\ntype ProgressEndEvent struct {\n\tEvent\n\n\tBody ProgressEndEventBody `json:\"body\"`\n}\n\ntype ProgressEndEventBody struct {\n\tProgressId string `json:\"progressId\"`\n\tMessage    string `json:\"message,omitempty\"`\n}\n\n// InvalidatedEvent: This event signals that some state in the debug adapter has changed and requires that the client needs to re-render the data snapshot previously requested.\n// Debug adapters do not have to emit this event for runtime changes like stopped or thread events because in that case the client refetches the new state anyway. But the event can be used for example to refresh the UI after rendering formatting has changed in the debug adapter.\n// This event should only be sent if the corresponding capability `supportsInvalidatedEvent` is true.\ntype InvalidatedEvent struct {\n\tEvent\n\n\tBody InvalidatedEventBody `json:\"body\"`\n}\n\ntype InvalidatedEventBody struct {\n\tAreas        []InvalidatedAreas `json:\"areas,omitempty\"`\n\tThreadId     int                `json:\"threadId,omitempty\"`\n\tStackFrameId int                `json:\"stackFrameId,omitempty\"`\n}\n\n// MemoryEvent: This event indicates that some memory range has been updated. It should only be sent if the corresponding capability `supportsMemoryEvent` is true.\n// Clients typically react to the event by re-issuing a `readMemory` request if they show the memory identified by the `memoryReference` and if the updated memory range overlaps the displayed range. Clients should not make assumptions how individual memory references relate to each other, so they should not assume that they are part of a single continuous address range and might overlap.\n// Debug adapters can use this event to indicate that the contents of a memory range has changed due to some other request like `setVariable` or `setExpression`. Debug adapters are not expected to emit this event for each and every memory change of a running program, because that information is typically not available from debuggers and it would flood clients with too many events.\ntype MemoryEvent struct {\n\tEvent\n\n\tBody MemoryEventBody `json:\"body\"`\n}\n\ntype MemoryEventBody struct {\n\tMemoryReference string `json:\"memoryReference\"`\n\tOffset          int    `json:\"offset\"`\n\tCount           int    `json:\"count\"`\n}\n\n// RunInTerminalRequest: This request is sent from the debug adapter to the client to run a command in a terminal.\n// This is typically used to launch the debuggee in a terminal provided by the client.\n// This request should only be called if the corresponding client capability `supportsRunInTerminalRequest` is true.\n// Client implementations of `runInTerminal` are free to run the command however they choose including issuing the command to a command line interpreter (aka 'shell'). Argument strings passed to the `runInTerminal` request must arrive verbatim in the command to be run. As a consequence, clients which use a shell are responsible for escaping any special shell characters in the argument strings to prevent them from being interpreted (and modified) by the shell.\n// Some users may wish to take advantage of shell processing in the argument strings. For clients which implement `runInTerminal` using an intermediary shell, the `argsCanBeInterpretedByShell` property can be set to true. In this case the client is requested not to escape any special shell characters in the argument strings.\ntype RunInTerminalRequest struct {\n\tRequest\n\n\tArguments RunInTerminalRequestArguments `json:\"arguments\"`\n}\n\n// RunInTerminalRequestArguments: Arguments for `runInTerminal` request.\ntype RunInTerminalRequestArguments struct {\n\tKind                        string         `json:\"kind,omitempty\"`\n\tTitle                       string         `json:\"title,omitempty\"`\n\tCwd                         string         `json:\"cwd\"`\n\tArgs                        []string       `json:\"args\"`\n\tEnv                         map[string]any `json:\"env,omitempty\"`\n\tArgsCanBeInterpretedByShell bool           `json:\"argsCanBeInterpretedByShell,omitempty\"`\n}\n\n// RunInTerminalResponse: Response to `runInTerminal` request.\ntype RunInTerminalResponse struct {\n\tResponse\n\n\tBody RunInTerminalResponseBody `json:\"body\"`\n}\n\ntype RunInTerminalResponseBody struct {\n\tProcessId      int `json:\"processId,omitempty\"`\n\tShellProcessId int `json:\"shellProcessId,omitempty\"`\n}\n\n// StartDebuggingRequest: This request is sent from the debug adapter to the client to start a new debug session of the same type as the caller.\n// This request should only be sent if the corresponding client capability `supportsStartDebuggingRequest` is true.\n// A client implementation of `startDebugging` should start a new debug session (of the same type as the caller) in the same way that the caller's session was started. If the client supports hierarchical debug sessions, the newly created session can be treated as a child of the caller session.\ntype StartDebuggingRequest struct {\n\tRequest\n\n\tArguments StartDebuggingRequestArguments `json:\"arguments\"`\n}\n\n// StartDebuggingRequestArguments: Arguments for `startDebugging` request.\ntype StartDebuggingRequestArguments struct {\n\tConfiguration map[string]any `json:\"configuration\"`\n\tRequest       string         `json:\"request\"`\n}\n\n// StartDebuggingResponse: Response to `startDebugging` request. This is just an acknowledgement, so no body field is required.\ntype StartDebuggingResponse struct {\n\tResponse\n}\n\n// InitializeRequest: The `initialize` request is sent as the first request from the client to the debug adapter in order to configure it with client capabilities and to retrieve capabilities from the debug adapter.\n// Until the debug adapter has responded with an `initialize` response, the client must not send any additional requests or events to the debug adapter.\n// In addition the debug adapter is not allowed to send any requests or events to the client until it has responded with an `initialize` response.\n// The `initialize` request may only be sent once.\ntype InitializeRequest struct {\n\tRequest\n\n\tArguments InitializeRequestArguments `json:\"arguments\"`\n}\n\n// InitializeRequestArguments: Arguments for `initialize` request.\ntype InitializeRequestArguments struct {\n\tClientID                            string `json:\"clientID,omitempty\"`\n\tClientName                          string `json:\"clientName,omitempty\"`\n\tAdapterID                           string `json:\"adapterID\"`\n\tLocale                              string `json:\"locale,omitempty\"`\n\tLinesStartAt1                       bool   `json:\"linesStartAt1\"`\n\tColumnsStartAt1                     bool   `json:\"columnsStartAt1\"`\n\tPathFormat                          string `json:\"pathFormat,omitempty\"`\n\tSupportsVariableType                bool   `json:\"supportsVariableType,omitempty\"`\n\tSupportsVariablePaging              bool   `json:\"supportsVariablePaging,omitempty\"`\n\tSupportsRunInTerminalRequest        bool   `json:\"supportsRunInTerminalRequest,omitempty\"`\n\tSupportsMemoryReferences            bool   `json:\"supportsMemoryReferences,omitempty\"`\n\tSupportsProgressReporting           bool   `json:\"supportsProgressReporting,omitempty\"`\n\tSupportsInvalidatedEvent            bool   `json:\"supportsInvalidatedEvent,omitempty\"`\n\tSupportsMemoryEvent                 bool   `json:\"supportsMemoryEvent,omitempty\"`\n\tSupportsArgsCanBeInterpretedByShell bool   `json:\"supportsArgsCanBeInterpretedByShell,omitempty\"`\n\tSupportsStartDebuggingRequest       bool   `json:\"supportsStartDebuggingRequest,omitempty\"`\n}\n\n// InitializeResponse: Response to `initialize` request.\ntype InitializeResponse struct {\n\tResponse\n\n\tBody Capabilities `json:\"body,omitempty\"`\n}\n\n// ConfigurationDoneRequest: This request indicates that the client has finished initialization of the debug adapter.\n// So it is the last request in the sequence of configuration requests (which was started by the `initialized` event).\n// Clients should only call this request if the corresponding capability `supportsConfigurationDoneRequest` is true.\ntype ConfigurationDoneRequest struct {\n\tRequest\n\n\tArguments *ConfigurationDoneArguments `json:\"arguments,omitempty\"`\n}\n\n// ConfigurationDoneArguments: Arguments for `configurationDone` request.\ntype ConfigurationDoneArguments struct {\n}\n\n// ConfigurationDoneResponse: Response to `configurationDone` request. This is just an acknowledgement, so no body field is required.\ntype ConfigurationDoneResponse struct {\n\tResponse\n}\n\n// LaunchRequest: This launch request is sent from the client to the debug adapter to start the debuggee with or without debugging (if `noDebug` is true).\n// Since launching is debugger/runtime specific, the arguments for this request are not part of this specification.\ntype LaunchRequest struct {\n\tRequest\n\n\tArguments json.RawMessage `json:\"arguments\"`\n}\n\nfunc (r *LaunchRequest) GetArguments() json.RawMessage { return r.Arguments }\n\n// LaunchResponse: Response to `launch` request. This is just an acknowledgement, so no body field is required.\ntype LaunchResponse struct {\n\tResponse\n}\n\n// AttachRequest: The `attach` request is sent from the client to the debug adapter to attach to a debuggee that is already running.\n// Since attaching is debugger/runtime specific, the arguments for this request are not part of this specification.\ntype AttachRequest struct {\n\tRequest\n\n\tArguments json.RawMessage `json:\"arguments\"`\n}\n\nfunc (r *AttachRequest) GetArguments() json.RawMessage { return r.Arguments }\n\n// AttachResponse: Response to `attach` request. This is just an acknowledgement, so no body field is required.\ntype AttachResponse struct {\n\tResponse\n}\n\n// RestartRequest: Restarts a debug session. Clients should only call this request if the corresponding capability `supportsRestartRequest` is true.\n// If the capability is missing or has the value false, a typical client emulates `restart` by terminating the debug adapter first and then launching it anew.\ntype RestartRequest struct {\n\tRequest\n\n\tArguments json.RawMessage `json:\"arguments\"`\n}\n\n// RestartResponse: Response to `restart` request. This is just an acknowledgement, so no body field is required.\ntype RestartResponse struct {\n\tResponse\n}\n\n// DisconnectRequest: The `disconnect` request asks the debug adapter to disconnect from the debuggee (thus ending the debug session) and then to shut down itself (the debug adapter).\n// In addition, the debug adapter must terminate the debuggee if it was started with the `launch` request. If an `attach` request was used to connect to the debuggee, then the debug adapter must not terminate the debuggee.\n// This implicit behavior of when to terminate the debuggee can be overridden with the `terminateDebuggee` argument (which is only supported by a debug adapter if the corresponding capability `supportTerminateDebuggee` is true).\ntype DisconnectRequest struct {\n\tRequest\n\n\tArguments *DisconnectArguments `json:\"arguments,omitempty\"`\n}\n\n// DisconnectArguments: Arguments for `disconnect` request.\ntype DisconnectArguments struct {\n\tRestart           bool `json:\"restart,omitempty\"`\n\tTerminateDebuggee bool `json:\"terminateDebuggee,omitempty\"`\n\tSuspendDebuggee   bool `json:\"suspendDebuggee,omitempty\"`\n}\n\n// DisconnectResponse: Response to `disconnect` request. This is just an acknowledgement, so no body field is required.\ntype DisconnectResponse struct {\n\tResponse\n}\n\n// TerminateRequest: The `terminate` request is sent from the client to the debug adapter in order to shut down the debuggee gracefully. Clients should only call this request if the capability `supportsTerminateRequest` is true.\n// Typically a debug adapter implements `terminate` by sending a software signal which the debuggee intercepts in order to clean things up properly before terminating itself.\n// Please note that this request does not directly affect the state of the debug session: if the debuggee decides to veto the graceful shutdown for any reason by not terminating itself, then the debug session just continues.\n// Clients can surface the `terminate` request as an explicit command or they can integrate it into a two stage Stop command that first sends `terminate` to request a graceful shutdown, and if that fails uses `disconnect` for a forceful shutdown.\ntype TerminateRequest struct {\n\tRequest\n\n\tArguments *TerminateArguments `json:\"arguments,omitempty\"`\n}\n\n// TerminateArguments: Arguments for `terminate` request.\ntype TerminateArguments struct {\n\tRestart bool `json:\"restart,omitempty\"`\n}\n\n// TerminateResponse: Response to `terminate` request. This is just an acknowledgement, so no body field is required.\ntype TerminateResponse struct {\n\tResponse\n}\n\n// BreakpointLocationsRequest: The `breakpointLocations` request returns all possible locations for source breakpoints in a given range.\n// Clients should only call this request if the corresponding capability `supportsBreakpointLocationsRequest` is true.\ntype BreakpointLocationsRequest struct {\n\tRequest\n\n\tArguments *BreakpointLocationsArguments `json:\"arguments,omitempty\"`\n}\n\n// BreakpointLocationsArguments: Arguments for `breakpointLocations` request.\ntype BreakpointLocationsArguments struct {\n\tSource    Source `json:\"source\"`\n\tLine      int    `json:\"line\"`\n\tColumn    int    `json:\"column,omitempty\"`\n\tEndLine   int    `json:\"endLine,omitempty\"`\n\tEndColumn int    `json:\"endColumn,omitempty\"`\n}\n\n// BreakpointLocationsResponse: Response to `breakpointLocations` request.\n// Contains possible locations for source breakpoints.\ntype BreakpointLocationsResponse struct {\n\tResponse\n\n\tBody BreakpointLocationsResponseBody `json:\"body\"`\n}\n\ntype BreakpointLocationsResponseBody struct {\n\tBreakpoints []BreakpointLocation `json:\"breakpoints\"`\n}\n\n// SetBreakpointsRequest: Sets multiple breakpoints for a single source and clears all previous breakpoints in that source.\n// To clear all breakpoint for a source, specify an empty array.\n// When a breakpoint is hit, a `stopped` event (with reason `breakpoint`) is generated.\ntype SetBreakpointsRequest struct {\n\tRequest\n\n\tArguments SetBreakpointsArguments `json:\"arguments\"`\n}\n\n// SetBreakpointsArguments: Arguments for `setBreakpoints` request.\ntype SetBreakpointsArguments struct {\n\tSource         Source             `json:\"source\"`\n\tBreakpoints    []SourceBreakpoint `json:\"breakpoints,omitempty\"`\n\tLines          []int              `json:\"lines,omitempty\"`\n\tSourceModified bool               `json:\"sourceModified,omitempty\"`\n}\n\n// SetBreakpointsResponse: Response to `setBreakpoints` request.\n// Returned is information about each breakpoint created by this request.\n// This includes the actual code location and whether the breakpoint could be verified.\n// The breakpoints returned are in the same order as the elements of the `breakpoints`\n// (or the deprecated `lines`) array in the arguments.\ntype SetBreakpointsResponse struct {\n\tResponse\n\n\tBody SetBreakpointsResponseBody `json:\"body\"`\n}\n\ntype SetBreakpointsResponseBody struct {\n\tBreakpoints []Breakpoint `json:\"breakpoints\"`\n}\n\n// SetFunctionBreakpointsRequest: Replaces all existing function breakpoints with new function breakpoints.\n// To clear all function breakpoints, specify an empty array.\n// When a function breakpoint is hit, a `stopped` event (with reason `function breakpoint`) is generated.\n// Clients should only call this request if the corresponding capability `supportsFunctionBreakpoints` is true.\ntype SetFunctionBreakpointsRequest struct {\n\tRequest\n\n\tArguments SetFunctionBreakpointsArguments `json:\"arguments\"`\n}\n\n// SetFunctionBreakpointsArguments: Arguments for `setFunctionBreakpoints` request.\ntype SetFunctionBreakpointsArguments struct {\n\tBreakpoints []FunctionBreakpoint `json:\"breakpoints\"`\n}\n\n// SetFunctionBreakpointsResponse: Response to `setFunctionBreakpoints` request.\n// Returned is information about each breakpoint created by this request.\ntype SetFunctionBreakpointsResponse struct {\n\tResponse\n\n\tBody SetFunctionBreakpointsResponseBody `json:\"body\"`\n}\n\ntype SetFunctionBreakpointsResponseBody struct {\n\tBreakpoints []Breakpoint `json:\"breakpoints\"`\n}\n\n// SetExceptionBreakpointsRequest: The request configures the debugger's response to thrown exceptions.\n// If an exception is configured to break, a `stopped` event is fired (with reason `exception`).\n// Clients should only call this request if the corresponding capability `exceptionBreakpointFilters` returns one or more filters.\ntype SetExceptionBreakpointsRequest struct {\n\tRequest\n\n\tArguments SetExceptionBreakpointsArguments `json:\"arguments\"`\n}\n\n// SetExceptionBreakpointsArguments: Arguments for `setExceptionBreakpoints` request.\ntype SetExceptionBreakpointsArguments struct {\n\tFilters          []string                 `json:\"filters\"`\n\tFilterOptions    []ExceptionFilterOptions `json:\"filterOptions,omitempty\"`\n\tExceptionOptions []ExceptionOptions       `json:\"exceptionOptions,omitempty\"`\n}\n\n// SetExceptionBreakpointsResponse: Response to `setExceptionBreakpoints` request.\n// The response contains an array of `Breakpoint` objects with information about each exception breakpoint or filter. The `Breakpoint` objects are in the same order as the elements of the `filters`, `filterOptions`, `exceptionOptions` arrays given as arguments. If both `filters` and `filterOptions` are given, the returned array must start with `filters` information first, followed by `filterOptions` information.\n// The `verified` property of a `Breakpoint` object signals whether the exception breakpoint or filter could be successfully created and whether the condition or hit count expressions are valid. In case of an error the `message` property explains the problem. The `id` property can be used to introduce a unique ID for the exception breakpoint or filter so that it can be updated subsequently by sending breakpoint events.\n// For backward compatibility both the `breakpoints` array and the enclosing `body` are optional. If these elements are missing a client is not able to show problems for individual exception breakpoints or filters.\ntype SetExceptionBreakpointsResponse struct {\n\tResponse\n\n\tBody SetExceptionBreakpointsResponseBody `json:\"body,omitempty\"`\n}\n\ntype SetExceptionBreakpointsResponseBody struct {\n\tBreakpoints []Breakpoint `json:\"breakpoints,omitempty\"`\n}\n\n// DataBreakpointInfoRequest: Obtains information on a possible data breakpoint that could be set on an expression or variable.\n// Clients should only call this request if the corresponding capability `supportsDataBreakpoints` is true.\ntype DataBreakpointInfoRequest struct {\n\tRequest\n\n\tArguments DataBreakpointInfoArguments `json:\"arguments\"`\n}\n\n// DataBreakpointInfoArguments: Arguments for `dataBreakpointInfo` request.\ntype DataBreakpointInfoArguments struct {\n\tVariablesReference int    `json:\"variablesReference,omitempty\"`\n\tName               string `json:\"name\"`\n\tFrameId            int    `json:\"frameId,omitempty\"`\n}\n\n// DataBreakpointInfoResponse: Response to `dataBreakpointInfo` request.\ntype DataBreakpointInfoResponse struct {\n\tResponse\n\n\tBody DataBreakpointInfoResponseBody `json:\"body\"`\n}\n\ntype DataBreakpointInfoResponseBody struct {\n\tDataId      any                        `json:\"dataId\"`\n\tDescription string                     `json:\"description\"`\n\tAccessTypes []DataBreakpointAccessType `json:\"accessTypes,omitempty\"`\n\tCanPersist  bool                       `json:\"canPersist,omitempty\"`\n}\n\n// SetDataBreakpointsRequest: Replaces all existing data breakpoints with new data breakpoints.\n// To clear all data breakpoints, specify an empty array.\n// When a data breakpoint is hit, a `stopped` event (with reason `data breakpoint`) is generated.\n// Clients should only call this request if the corresponding capability `supportsDataBreakpoints` is true.\ntype SetDataBreakpointsRequest struct {\n\tRequest\n\n\tArguments SetDataBreakpointsArguments `json:\"arguments\"`\n}\n\n// SetDataBreakpointsArguments: Arguments for `setDataBreakpoints` request.\ntype SetDataBreakpointsArguments struct {\n\tBreakpoints []DataBreakpoint `json:\"breakpoints\"`\n}\n\n// SetDataBreakpointsResponse: Response to `setDataBreakpoints` request.\n// Returned is information about each breakpoint created by this request.\ntype SetDataBreakpointsResponse struct {\n\tResponse\n\n\tBody SetDataBreakpointsResponseBody `json:\"body\"`\n}\n\ntype SetDataBreakpointsResponseBody struct {\n\tBreakpoints []Breakpoint `json:\"breakpoints\"`\n}\n\n// SetInstructionBreakpointsRequest: Replaces all existing instruction breakpoints. Typically, instruction breakpoints would be set from a disassembly window.\n// To clear all instruction breakpoints, specify an empty array.\n// When an instruction breakpoint is hit, a `stopped` event (with reason `instruction breakpoint`) is generated.\n// Clients should only call this request if the corresponding capability `supportsInstructionBreakpoints` is true.\ntype SetInstructionBreakpointsRequest struct {\n\tRequest\n\n\tArguments SetInstructionBreakpointsArguments `json:\"arguments\"`\n}\n\n// SetInstructionBreakpointsArguments: Arguments for `setInstructionBreakpoints` request\ntype SetInstructionBreakpointsArguments struct {\n\tBreakpoints []InstructionBreakpoint `json:\"breakpoints\"`\n}\n\n// SetInstructionBreakpointsResponse: Response to `setInstructionBreakpoints` request\ntype SetInstructionBreakpointsResponse struct {\n\tResponse\n\n\tBody SetInstructionBreakpointsResponseBody `json:\"body\"`\n}\n\ntype SetInstructionBreakpointsResponseBody struct {\n\tBreakpoints []Breakpoint `json:\"breakpoints\"`\n}\n\n// ContinueRequest: The request resumes execution of all threads. If the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true resumes only the specified thread. If not all threads were resumed, the `allThreadsContinued` attribute of the response should be set to false.\ntype ContinueRequest struct {\n\tRequest\n\n\tArguments ContinueArguments `json:\"arguments\"`\n}\n\n// ContinueArguments: Arguments for `continue` request.\ntype ContinueArguments struct {\n\tThreadId     int  `json:\"threadId\"`\n\tSingleThread bool `json:\"singleThread,omitempty\"`\n}\n\n// ContinueResponse: Response to `continue` request.\ntype ContinueResponse struct {\n\tResponse\n\n\tBody ContinueResponseBody `json:\"body\"`\n}\n\ntype ContinueResponseBody struct {\n\tAllThreadsContinued bool `json:\"allThreadsContinued\"`\n}\n\n// NextRequest: The request executes one step (in the given granularity) for the specified thread and allows all other threads to run freely by resuming them.\n// If the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming.\n// The debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed.\ntype NextRequest struct {\n\tRequest\n\n\tArguments NextArguments `json:\"arguments\"`\n}\n\n// NextArguments: Arguments for `next` request.\ntype NextArguments struct {\n\tThreadId     int                 `json:\"threadId\"`\n\tSingleThread bool                `json:\"singleThread,omitempty\"`\n\tGranularity  SteppingGranularity `json:\"granularity,omitempty\"`\n}\n\n// NextResponse: Response to `next` request. This is just an acknowledgement, so no body field is required.\ntype NextResponse struct {\n\tResponse\n}\n\n// StepInRequest: The request resumes the given thread to step into a function/method and allows all other threads to run freely by resuming them.\n// If the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming.\n// If the request cannot step into a target, `stepIn` behaves like the `next` request.\n// The debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed.\n// If there are multiple function/method calls (or other targets) on the source line,\n// the argument `targetId` can be used to control into which target the `stepIn` should occur.\n// The list of possible targets for a given source line can be retrieved via the `stepInTargets` request.\ntype StepInRequest struct {\n\tRequest\n\n\tArguments StepInArguments `json:\"arguments\"`\n}\n\n// StepInArguments: Arguments for `stepIn` request.\ntype StepInArguments struct {\n\tThreadId     int                 `json:\"threadId\"`\n\tSingleThread bool                `json:\"singleThread,omitempty\"`\n\tTargetId     int                 `json:\"targetId,omitempty\"`\n\tGranularity  SteppingGranularity `json:\"granularity,omitempty\"`\n}\n\n// StepInResponse: Response to `stepIn` request. This is just an acknowledgement, so no body field is required.\ntype StepInResponse struct {\n\tResponse\n}\n\n// StepOutRequest: The request resumes the given thread to step out (return) from a function/method and allows all other threads to run freely by resuming them.\n// If the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming.\n// The debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed.\ntype StepOutRequest struct {\n\tRequest\n\n\tArguments StepOutArguments `json:\"arguments\"`\n}\n\n// StepOutArguments: Arguments for `stepOut` request.\ntype StepOutArguments struct {\n\tThreadId     int                 `json:\"threadId\"`\n\tSingleThread bool                `json:\"singleThread,omitempty\"`\n\tGranularity  SteppingGranularity `json:\"granularity,omitempty\"`\n}\n\n// StepOutResponse: Response to `stepOut` request. This is just an acknowledgement, so no body field is required.\ntype StepOutResponse struct {\n\tResponse\n}\n\n// StepBackRequest: The request executes one backward step (in the given granularity) for the specified thread and allows all other threads to run backward freely by resuming them.\n// If the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true prevents other suspended threads from resuming.\n// The debug adapter first sends the response and then a `stopped` event (with reason `step`) after the step has completed.\n// Clients should only call this request if the corresponding capability `supportsStepBack` is true.\ntype StepBackRequest struct {\n\tRequest\n\n\tArguments StepBackArguments `json:\"arguments\"`\n}\n\n// StepBackArguments: Arguments for `stepBack` request.\ntype StepBackArguments struct {\n\tThreadId     int                 `json:\"threadId\"`\n\tSingleThread bool                `json:\"singleThread,omitempty\"`\n\tGranularity  SteppingGranularity `json:\"granularity,omitempty\"`\n}\n\n// StepBackResponse: Response to `stepBack` request. This is just an acknowledgement, so no body field is required.\ntype StepBackResponse struct {\n\tResponse\n}\n\n// ReverseContinueRequest: The request resumes backward execution of all threads. If the debug adapter supports single thread execution (see capability `supportsSingleThreadExecutionRequests`), setting the `singleThread` argument to true resumes only the specified thread. If not all threads were resumed, the `allThreadsContinued` attribute of the response should be set to false.\n// Clients should only call this request if the corresponding capability `supportsStepBack` is true.\ntype ReverseContinueRequest struct {\n\tRequest\n\n\tArguments ReverseContinueArguments `json:\"arguments\"`\n}\n\n// ReverseContinueArguments: Arguments for `reverseContinue` request.\ntype ReverseContinueArguments struct {\n\tThreadId     int  `json:\"threadId\"`\n\tSingleThread bool `json:\"singleThread,omitempty\"`\n}\n\n// ReverseContinueResponse: Response to `reverseContinue` request. This is just an acknowledgement, so no body field is required.\ntype ReverseContinueResponse struct {\n\tResponse\n}\n\n// RestartFrameRequest: The request restarts execution of the specified stack frame.\n// The debug adapter first sends the response and then a `stopped` event (with reason `restart`) after the restart has completed.\n// Clients should only call this request if the corresponding capability `supportsRestartFrame` is true.\ntype RestartFrameRequest struct {\n\tRequest\n\n\tArguments RestartFrameArguments `json:\"arguments\"`\n}\n\n// RestartFrameArguments: Arguments for `restartFrame` request.\ntype RestartFrameArguments struct {\n\tFrameId int `json:\"frameId\"`\n}\n\n// RestartFrameResponse: Response to `restartFrame` request. This is just an acknowledgement, so no body field is required.\ntype RestartFrameResponse struct {\n\tResponse\n}\n\n// GotoRequest: The request sets the location where the debuggee will continue to run.\n// This makes it possible to skip the execution of code or to execute code again.\n// The code between the current location and the goto target is not executed but skipped.\n// The debug adapter first sends the response and then a `stopped` event with reason `goto`.\n// Clients should only call this request if the corresponding capability `supportsGotoTargetsRequest` is true (because only then goto targets exist that can be passed as arguments).\ntype GotoRequest struct {\n\tRequest\n\n\tArguments GotoArguments `json:\"arguments\"`\n}\n\n// GotoArguments: Arguments for `goto` request.\ntype GotoArguments struct {\n\tThreadId int `json:\"threadId\"`\n\tTargetId int `json:\"targetId\"`\n}\n\n// GotoResponse: Response to `goto` request. This is just an acknowledgement, so no body field is required.\ntype GotoResponse struct {\n\tResponse\n}\n\n// PauseRequest: The request suspends the debuggee.\n// The debug adapter first sends the response and then a `stopped` event (with reason `pause`) after the thread has been paused successfully.\ntype PauseRequest struct {\n\tRequest\n\n\tArguments PauseArguments `json:\"arguments\"`\n}\n\n// PauseArguments: Arguments for `pause` request.\ntype PauseArguments struct {\n\tThreadId int `json:\"threadId\"`\n}\n\n// PauseResponse: Response to `pause` request. This is just an acknowledgement, so no body field is required.\ntype PauseResponse struct {\n\tResponse\n}\n\n// StackTraceRequest: The request returns a stacktrace from the current execution state of a given thread.\n// A client can request all stack frames by omitting the startFrame and levels arguments. For performance-conscious clients and if the corresponding capability `supportsDelayedStackTraceLoading` is true, stack frames can be retrieved in a piecemeal way with the `startFrame` and `levels` arguments. The response of the `stackTrace` request may contain a `totalFrames` property that hints at the total number of frames in the stack. If a client needs this total number upfront, it can issue a request for a single (first) frame and depending on the value of `totalFrames` decide how to proceed. In any case a client should be prepared to receive fewer frames than requested, which is an indication that the end of the stack has been reached.\ntype StackTraceRequest struct {\n\tRequest\n\n\tArguments StackTraceArguments `json:\"arguments\"`\n}\n\n// StackTraceArguments: Arguments for `stackTrace` request.\ntype StackTraceArguments struct {\n\tThreadId   int               `json:\"threadId\"`\n\tStartFrame int               `json:\"startFrame,omitempty\"`\n\tLevels     int               `json:\"levels,omitempty\"`\n\tFormat     *StackFrameFormat `json:\"format,omitempty\"`\n}\n\n// StackTraceResponse: Response to `stackTrace` request.\ntype StackTraceResponse struct {\n\tResponse\n\n\tBody StackTraceResponseBody `json:\"body\"`\n}\n\ntype StackTraceResponseBody struct {\n\tStackFrames []StackFrame `json:\"stackFrames\"`\n\tTotalFrames int          `json:\"totalFrames,omitempty\"`\n}\n\n// ScopesRequest: The request returns the variable scopes for a given stack frame ID.\ntype ScopesRequest struct {\n\tRequest\n\n\tArguments ScopesArguments `json:\"arguments\"`\n}\n\n// ScopesArguments: Arguments for `scopes` request.\ntype ScopesArguments struct {\n\tFrameId int `json:\"frameId\"`\n}\n\n// ScopesResponse: Response to `scopes` request.\ntype ScopesResponse struct {\n\tResponse\n\n\tBody ScopesResponseBody `json:\"body\"`\n}\n\ntype ScopesResponseBody struct {\n\tScopes []Scope `json:\"scopes\"`\n}\n\n// VariablesRequest: Retrieves all child variables for the given variable reference.\n// A filter can be used to limit the fetched children to either named or indexed children.\ntype VariablesRequest struct {\n\tRequest\n\n\tArguments VariablesArguments `json:\"arguments\"`\n}\n\n// VariablesArguments: Arguments for `variables` request.\ntype VariablesArguments struct {\n\tVariablesReference int          `json:\"variablesReference\"`\n\tFilter             string       `json:\"filter,omitempty\"`\n\tStart              int          `json:\"start,omitempty\"`\n\tCount              int          `json:\"count,omitempty\"`\n\tFormat             *ValueFormat `json:\"format,omitempty\"`\n}\n\n// VariablesResponse: Response to `variables` request.\ntype VariablesResponse struct {\n\tResponse\n\n\tBody VariablesResponseBody `json:\"body\"`\n}\n\ntype VariablesResponseBody struct {\n\tVariables []Variable `json:\"variables\"`\n}\n\n// SetVariableRequest: Set the variable with the given name in the variable container to a new value. Clients should only call this request if the corresponding capability `supportsSetVariable` is true.\n// If a debug adapter implements both `setVariable` and `setExpression`, a client will only use `setExpression` if the variable has an `evaluateName` property.\ntype SetVariableRequest struct {\n\tRequest\n\n\tArguments SetVariableArguments `json:\"arguments\"`\n}\n\n// SetVariableArguments: Arguments for `setVariable` request.\ntype SetVariableArguments struct {\n\tVariablesReference int          `json:\"variablesReference\"`\n\tName               string       `json:\"name\"`\n\tValue              string       `json:\"value\"`\n\tFormat             *ValueFormat `json:\"format,omitempty\"`\n}\n\n// SetVariableResponse: Response to `setVariable` request.\ntype SetVariableResponse struct {\n\tResponse\n\n\tBody SetVariableResponseBody `json:\"body\"`\n}\n\ntype SetVariableResponseBody struct {\n\tValue              string `json:\"value\"`\n\tType               string `json:\"type,omitempty\"`\n\tVariablesReference int    `json:\"variablesReference,omitempty\"`\n\tNamedVariables     int    `json:\"namedVariables,omitempty\"`\n\tIndexedVariables   int    `json:\"indexedVariables,omitempty\"`\n}\n\n// SourceRequest: The request retrieves the source code for a given source reference.\ntype SourceRequest struct {\n\tRequest\n\n\tArguments SourceArguments `json:\"arguments\"`\n}\n\n// SourceArguments: Arguments for `source` request.\ntype SourceArguments struct {\n\tSource          *Source `json:\"source,omitempty\"`\n\tSourceReference int     `json:\"sourceReference\"`\n}\n\n// SourceResponse: Response to `source` request.\ntype SourceResponse struct {\n\tResponse\n\n\tBody SourceResponseBody `json:\"body\"`\n}\n\ntype SourceResponseBody struct {\n\tContent  string `json:\"content\"`\n\tMimeType string `json:\"mimeType,omitempty\"`\n}\n\n// ThreadsRequest: The request retrieves a list of all threads.\ntype ThreadsRequest struct {\n\tRequest\n}\n\n// ThreadsResponse: Response to `threads` request.\ntype ThreadsResponse struct {\n\tResponse\n\n\tBody ThreadsResponseBody `json:\"body\"`\n}\n\ntype ThreadsResponseBody struct {\n\tThreads []Thread `json:\"threads\"`\n}\n\n// TerminateThreadsRequest: The request terminates the threads with the given ids.\n// Clients should only call this request if the corresponding capability `supportsTerminateThreadsRequest` is true.\ntype TerminateThreadsRequest struct {\n\tRequest\n\n\tArguments TerminateThreadsArguments `json:\"arguments\"`\n}\n\n// TerminateThreadsArguments: Arguments for `terminateThreads` request.\ntype TerminateThreadsArguments struct {\n\tThreadIds []int `json:\"threadIds,omitempty\"`\n}\n\n// TerminateThreadsResponse: Response to `terminateThreads` request. This is just an acknowledgement, no body field is required.\ntype TerminateThreadsResponse struct {\n\tResponse\n}\n\n// ModulesRequest: Modules can be retrieved from the debug adapter with this request which can either return all modules or a range of modules to support paging.\n// Clients should only call this request if the corresponding capability `supportsModulesRequest` is true.\ntype ModulesRequest struct {\n\tRequest\n\n\tArguments ModulesArguments `json:\"arguments\"`\n}\n\n// ModulesArguments: Arguments for `modules` request.\ntype ModulesArguments struct {\n\tStartModule int `json:\"startModule,omitempty\"`\n\tModuleCount int `json:\"moduleCount,omitempty\"`\n}\n\n// ModulesResponse: Response to `modules` request.\ntype ModulesResponse struct {\n\tResponse\n\n\tBody ModulesResponseBody `json:\"body\"`\n}\n\ntype ModulesResponseBody struct {\n\tModules      []Module `json:\"modules\"`\n\tTotalModules int      `json:\"totalModules,omitempty\"`\n}\n\n// LoadedSourcesRequest: Retrieves the set of all sources currently loaded by the debugged process.\n// Clients should only call this request if the corresponding capability `supportsLoadedSourcesRequest` is true.\ntype LoadedSourcesRequest struct {\n\tRequest\n\n\tArguments *LoadedSourcesArguments `json:\"arguments,omitempty\"`\n}\n\n// LoadedSourcesArguments: Arguments for `loadedSources` request.\ntype LoadedSourcesArguments struct {\n}\n\n// LoadedSourcesResponse: Response to `loadedSources` request.\ntype LoadedSourcesResponse struct {\n\tResponse\n\n\tBody LoadedSourcesResponseBody `json:\"body\"`\n}\n\ntype LoadedSourcesResponseBody struct {\n\tSources []Source `json:\"sources\"`\n}\n\n// EvaluateRequest: Evaluates the given expression in the context of the topmost stack frame.\n// The expression has access to any variables and arguments that are in scope.\ntype EvaluateRequest struct {\n\tRequest\n\n\tArguments EvaluateArguments `json:\"arguments\"`\n}\n\n// EvaluateArguments: Arguments for `evaluate` request.\ntype EvaluateArguments struct {\n\tExpression string       `json:\"expression\"`\n\tFrameId    int          `json:\"frameId,omitempty\"`\n\tContext    string       `json:\"context,omitempty\"`\n\tFormat     *ValueFormat `json:\"format,omitempty\"`\n}\n\n// EvaluateResponse: Response to `evaluate` request.\ntype EvaluateResponse struct {\n\tResponse\n\n\tBody EvaluateResponseBody `json:\"body\"`\n}\n\ntype EvaluateResponseBody struct {\n\tResult             string                    `json:\"result\"`\n\tType               string                    `json:\"type,omitempty\"`\n\tPresentationHint   *VariablePresentationHint `json:\"presentationHint,omitempty\"`\n\tVariablesReference int                       `json:\"variablesReference\"`\n\tNamedVariables     int                       `json:\"namedVariables,omitempty\"`\n\tIndexedVariables   int                       `json:\"indexedVariables,omitempty\"`\n\tMemoryReference    string                    `json:\"memoryReference,omitempty\"`\n}\n\n// SetExpressionRequest: Evaluates the given `value` expression and assigns it to the `expression` which must be a modifiable l-value.\n// The expressions have access to any variables and arguments that are in scope of the specified frame.\n// Clients should only call this request if the corresponding capability `supportsSetExpression` is true.\n// If a debug adapter implements both `setExpression` and `setVariable`, a client uses `setExpression` if the variable has an `evaluateName` property.\ntype SetExpressionRequest struct {\n\tRequest\n\n\tArguments SetExpressionArguments `json:\"arguments\"`\n}\n\n// SetExpressionArguments: Arguments for `setExpression` request.\ntype SetExpressionArguments struct {\n\tExpression string       `json:\"expression\"`\n\tValue      string       `json:\"value\"`\n\tFrameId    int          `json:\"frameId,omitempty\"`\n\tFormat     *ValueFormat `json:\"format,omitempty\"`\n}\n\n// SetExpressionResponse: Response to `setExpression` request.\ntype SetExpressionResponse struct {\n\tResponse\n\n\tBody SetExpressionResponseBody `json:\"body\"`\n}\n\ntype SetExpressionResponseBody struct {\n\tValue              string                    `json:\"value\"`\n\tType               string                    `json:\"type,omitempty\"`\n\tPresentationHint   *VariablePresentationHint `json:\"presentationHint,omitempty\"`\n\tVariablesReference int                       `json:\"variablesReference,omitempty\"`\n\tNamedVariables     int                       `json:\"namedVariables,omitempty\"`\n\tIndexedVariables   int                       `json:\"indexedVariables,omitempty\"`\n}\n\n// StepInTargetsRequest: This request retrieves the possible step-in targets for the specified stack frame.\n// These targets can be used in the `stepIn` request.\n// Clients should only call this request if the corresponding capability `supportsStepInTargetsRequest` is true.\ntype StepInTargetsRequest struct {\n\tRequest\n\n\tArguments StepInTargetsArguments `json:\"arguments\"`\n}\n\n// StepInTargetsArguments: Arguments for `stepInTargets` request.\ntype StepInTargetsArguments struct {\n\tFrameId int `json:\"frameId\"`\n}\n\n// StepInTargetsResponse: Response to `stepInTargets` request.\ntype StepInTargetsResponse struct {\n\tResponse\n\n\tBody StepInTargetsResponseBody `json:\"body\"`\n}\n\ntype StepInTargetsResponseBody struct {\n\tTargets []StepInTarget `json:\"targets\"`\n}\n\n// GotoTargetsRequest: This request retrieves the possible goto targets for the specified source location.\n// These targets can be used in the `goto` request.\n// Clients should only call this request if the corresponding capability `supportsGotoTargetsRequest` is true.\ntype GotoTargetsRequest struct {\n\tRequest\n\n\tArguments GotoTargetsArguments `json:\"arguments\"`\n}\n\n// GotoTargetsArguments: Arguments for `gotoTargets` request.\ntype GotoTargetsArguments struct {\n\tSource Source `json:\"source\"`\n\tLine   int    `json:\"line\"`\n\tColumn int    `json:\"column,omitempty\"`\n}\n\n// GotoTargetsResponse: Response to `gotoTargets` request.\ntype GotoTargetsResponse struct {\n\tResponse\n\n\tBody GotoTargetsResponseBody `json:\"body\"`\n}\n\ntype GotoTargetsResponseBody struct {\n\tTargets []GotoTarget `json:\"targets\"`\n}\n\n// CompletionsRequest: Returns a list of possible completions for a given caret position and text.\n// Clients should only call this request if the corresponding capability `supportsCompletionsRequest` is true.\ntype CompletionsRequest struct {\n\tRequest\n\n\tArguments CompletionsArguments `json:\"arguments\"`\n}\n\n// CompletionsArguments: Arguments for `completions` request.\ntype CompletionsArguments struct {\n\tFrameId int    `json:\"frameId,omitempty\"`\n\tText    string `json:\"text\"`\n\tColumn  int    `json:\"column\"`\n\tLine    int    `json:\"line,omitempty\"`\n}\n\n// CompletionsResponse: Response to `completions` request.\ntype CompletionsResponse struct {\n\tResponse\n\n\tBody CompletionsResponseBody `json:\"body\"`\n}\n\ntype CompletionsResponseBody struct {\n\tTargets []CompletionItem `json:\"targets\"`\n}\n\n// ExceptionInfoRequest: Retrieves the details of the exception that caused this event to be raised.\n// Clients should only call this request if the corresponding capability `supportsExceptionInfoRequest` is true.\ntype ExceptionInfoRequest struct {\n\tRequest\n\n\tArguments ExceptionInfoArguments `json:\"arguments\"`\n}\n\n// ExceptionInfoArguments: Arguments for `exceptionInfo` request.\ntype ExceptionInfoArguments struct {\n\tThreadId int `json:\"threadId\"`\n}\n\n// ExceptionInfoResponse: Response to `exceptionInfo` request.\ntype ExceptionInfoResponse struct {\n\tResponse\n\n\tBody ExceptionInfoResponseBody `json:\"body\"`\n}\n\ntype ExceptionInfoResponseBody struct {\n\tExceptionId string             `json:\"exceptionId\"`\n\tDescription string             `json:\"description,omitempty\"`\n\tBreakMode   ExceptionBreakMode `json:\"breakMode\"`\n\tDetails     *ExceptionDetails  `json:\"details,omitempty\"`\n}\n\n// ReadMemoryRequest: Reads bytes from memory at the provided location.\n// Clients should only call this request if the corresponding capability `supportsReadMemoryRequest` is true.\ntype ReadMemoryRequest struct {\n\tRequest\n\n\tArguments ReadMemoryArguments `json:\"arguments\"`\n}\n\n// ReadMemoryArguments: Arguments for `readMemory` request.\ntype ReadMemoryArguments struct {\n\tMemoryReference string `json:\"memoryReference\"`\n\tOffset          int    `json:\"offset,omitempty\"`\n\tCount           int    `json:\"count\"`\n}\n\n// ReadMemoryResponse: Response to `readMemory` request.\ntype ReadMemoryResponse struct {\n\tResponse\n\n\tBody ReadMemoryResponseBody `json:\"body,omitempty\"`\n}\n\ntype ReadMemoryResponseBody struct {\n\tAddress         string `json:\"address\"`\n\tUnreadableBytes int    `json:\"unreadableBytes,omitempty\"`\n\tData            string `json:\"data,omitempty\"`\n}\n\n// WriteMemoryRequest: Writes bytes to memory at the provided location.\n// Clients should only call this request if the corresponding capability `supportsWriteMemoryRequest` is true.\ntype WriteMemoryRequest struct {\n\tRequest\n\n\tArguments WriteMemoryArguments `json:\"arguments\"`\n}\n\n// WriteMemoryArguments: Arguments for `writeMemory` request.\ntype WriteMemoryArguments struct {\n\tMemoryReference string `json:\"memoryReference\"`\n\tOffset          int    `json:\"offset,omitempty\"`\n\tAllowPartial    bool   `json:\"allowPartial,omitempty\"`\n\tData            string `json:\"data\"`\n}\n\n// WriteMemoryResponse: Response to `writeMemory` request.\ntype WriteMemoryResponse struct {\n\tResponse\n\n\tBody WriteMemoryResponseBody `json:\"body,omitempty\"`\n}\n\ntype WriteMemoryResponseBody struct {\n\tOffset       int `json:\"offset,omitempty\"`\n\tBytesWritten int `json:\"bytesWritten,omitempty\"`\n}\n\n// DisassembleRequest: Disassembles code stored at the provided location.\n// Clients should only call this request if the corresponding capability `supportsDisassembleRequest` is true.\ntype DisassembleRequest struct {\n\tRequest\n\n\tArguments DisassembleArguments `json:\"arguments\"`\n}\n\n// DisassembleArguments: Arguments for `disassemble` request.\ntype DisassembleArguments struct {\n\tMemoryReference   string `json:\"memoryReference\"`\n\tOffset            int    `json:\"offset,omitempty\"`\n\tInstructionOffset int    `json:\"instructionOffset,omitempty\"`\n\tInstructionCount  int    `json:\"instructionCount\"`\n\tResolveSymbols    bool   `json:\"resolveSymbols,omitempty\"`\n}\n\n// DisassembleResponse: Response to `disassemble` request.\ntype DisassembleResponse struct {\n\tResponse\n\n\tBody DisassembleResponseBody `json:\"body,omitempty\"`\n}\n\ntype DisassembleResponseBody struct {\n\tInstructions []DisassembledInstruction `json:\"instructions\"`\n}\n\n// Capabilities: Information about the capabilities of a debug adapter.\ntype Capabilities struct {\n\tSupportsConfigurationDoneRequest      bool                         `json:\"supportsConfigurationDoneRequest,omitempty\"`\n\tSupportsFunctionBreakpoints           bool                         `json:\"supportsFunctionBreakpoints,omitempty\"`\n\tSupportsConditionalBreakpoints        bool                         `json:\"supportsConditionalBreakpoints,omitempty\"`\n\tSupportsHitConditionalBreakpoints     bool                         `json:\"supportsHitConditionalBreakpoints,omitempty\"`\n\tSupportsEvaluateForHovers             bool                         `json:\"supportsEvaluateForHovers,omitempty\"`\n\tExceptionBreakpointFilters            []ExceptionBreakpointsFilter `json:\"exceptionBreakpointFilters,omitempty\"`\n\tSupportsStepBack                      bool                         `json:\"supportsStepBack,omitempty\"`\n\tSupportsSetVariable                   bool                         `json:\"supportsSetVariable,omitempty\"`\n\tSupportsRestartFrame                  bool                         `json:\"supportsRestartFrame,omitempty\"`\n\tSupportsGotoTargetsRequest            bool                         `json:\"supportsGotoTargetsRequest,omitempty\"`\n\tSupportsStepInTargetsRequest          bool                         `json:\"supportsStepInTargetsRequest,omitempty\"`\n\tSupportsCompletionsRequest            bool                         `json:\"supportsCompletionsRequest,omitempty\"`\n\tCompletionTriggerCharacters           []string                     `json:\"completionTriggerCharacters,omitempty\"`\n\tSupportsModulesRequest                bool                         `json:\"supportsModulesRequest,omitempty\"`\n\tAdditionalModuleColumns               []ColumnDescriptor           `json:\"additionalModuleColumns,omitempty\"`\n\tSupportedChecksumAlgorithms           []ChecksumAlgorithm          `json:\"supportedChecksumAlgorithms,omitempty\"`\n\tSupportsRestartRequest                bool                         `json:\"supportsRestartRequest,omitempty\"`\n\tSupportsExceptionOptions              bool                         `json:\"supportsExceptionOptions,omitempty\"`\n\tSupportsValueFormattingOptions        bool                         `json:\"supportsValueFormattingOptions,omitempty\"`\n\tSupportsExceptionInfoRequest          bool                         `json:\"supportsExceptionInfoRequest,omitempty\"`\n\tSupportTerminateDebuggee              bool                         `json:\"supportTerminateDebuggee,omitempty\"`\n\tSupportSuspendDebuggee                bool                         `json:\"supportSuspendDebuggee,omitempty\"`\n\tSupportsDelayedStackTraceLoading      bool                         `json:\"supportsDelayedStackTraceLoading,omitempty\"`\n\tSupportsLoadedSourcesRequest          bool                         `json:\"supportsLoadedSourcesRequest,omitempty\"`\n\tSupportsLogPoints                     bool                         `json:\"supportsLogPoints,omitempty\"`\n\tSupportsTerminateThreadsRequest       bool                         `json:\"supportsTerminateThreadsRequest,omitempty\"`\n\tSupportsSetExpression                 bool                         `json:\"supportsSetExpression,omitempty\"`\n\tSupportsTerminateRequest              bool                         `json:\"supportsTerminateRequest,omitempty\"`\n\tSupportsDataBreakpoints               bool                         `json:\"supportsDataBreakpoints,omitempty\"`\n\tSupportsReadMemoryRequest             bool                         `json:\"supportsReadMemoryRequest,omitempty\"`\n\tSupportsWriteMemoryRequest            bool                         `json:\"supportsWriteMemoryRequest,omitempty\"`\n\tSupportsDisassembleRequest            bool                         `json:\"supportsDisassembleRequest,omitempty\"`\n\tSupportsCancelRequest                 bool                         `json:\"supportsCancelRequest,omitempty\"`\n\tSupportsBreakpointLocationsRequest    bool                         `json:\"supportsBreakpointLocationsRequest,omitempty\"`\n\tSupportsClipboardContext              bool                         `json:\"supportsClipboardContext,omitempty\"`\n\tSupportsSteppingGranularity           bool                         `json:\"supportsSteppingGranularity,omitempty\"`\n\tSupportsInstructionBreakpoints        bool                         `json:\"supportsInstructionBreakpoints,omitempty\"`\n\tSupportsExceptionFilterOptions        bool                         `json:\"supportsExceptionFilterOptions,omitempty\"`\n\tSupportsSingleThreadExecutionRequests bool                         `json:\"supportsSingleThreadExecutionRequests,omitempty\"`\n}\n\n// ExceptionBreakpointsFilter: An `ExceptionBreakpointsFilter` is shown in the UI as an filter option for configuring how exceptions are dealt with.\ntype ExceptionBreakpointsFilter struct {\n\tFilter               string `json:\"filter\"`\n\tLabel                string `json:\"label\"`\n\tDescription          string `json:\"description,omitempty\"`\n\tDefault              bool   `json:\"default,omitempty\"`\n\tSupportsCondition    bool   `json:\"supportsCondition,omitempty\"`\n\tConditionDescription string `json:\"conditionDescription,omitempty\"`\n}\n\n// ErrorMessage: A structured message object. Used to return errors from requests.\ntype ErrorMessage struct {\n\tId            int               `json:\"id\"`\n\tFormat        string            `json:\"format\"`\n\tVariables     map[string]string `json:\"variables,omitempty\"`\n\tSendTelemetry bool              `json:\"sendTelemetry,omitempty\"`\n\tShowUser      bool              `json:\"showUser\"`\n\tUrl           string            `json:\"url,omitempty\"`\n\tUrlLabel      string            `json:\"urlLabel,omitempty\"`\n}\n\n// Module: A Module object represents a row in the modules view.\n// The `id` attribute identifies a module in the modules view and is used in a `module` event for identifying a module for adding, updating or deleting.\n// The `name` attribute is used to minimally render the module in the UI.\n//\n// Additional attributes can be added to the module. They show up in the module view if they have a corresponding `ColumnDescriptor`.\n//\n// To avoid an unnecessary proliferation of additional attributes with similar semantics but different names, we recommend to re-use attributes from the 'recommended' list below first, and only introduce new attributes if nothing appropriate could be found.\ntype Module struct {\n\tId             any    `json:\"id\"`\n\tName           string `json:\"name\"`\n\tPath           string `json:\"path,omitempty\"`\n\tIsOptimized    bool   `json:\"isOptimized,omitempty\"`\n\tIsUserCode     bool   `json:\"isUserCode,omitempty\"`\n\tVersion        string `json:\"version,omitempty\"`\n\tSymbolStatus   string `json:\"symbolStatus,omitempty\"`\n\tSymbolFilePath string `json:\"symbolFilePath,omitempty\"`\n\tDateTimeStamp  string `json:\"dateTimeStamp,omitempty\"`\n\tAddressRange   string `json:\"addressRange,omitempty\"`\n}\n\n// ColumnDescriptor: A `ColumnDescriptor` specifies what module attribute to show in a column of the modules view, how to format it,\n// and what the column's label should be.\n// It is only used if the underlying UI actually supports this level of customization.\ntype ColumnDescriptor struct {\n\tAttributeName string `json:\"attributeName\"`\n\tLabel         string `json:\"label\"`\n\tFormat        string `json:\"format,omitempty\"`\n\tType          string `json:\"type,omitempty\"`\n\tWidth         int    `json:\"width,omitempty\"`\n}\n\n// ModulesViewDescriptor: The ModulesViewDescriptor is the container for all declarative configuration options of a module view.\n// For now it only specifies the columns to be shown in the modules view.\ntype ModulesViewDescriptor struct {\n\tColumns []ColumnDescriptor `json:\"columns\"`\n}\n\n// Thread: A Thread\ntype Thread struct {\n\tId   int    `json:\"id\"`\n\tName string `json:\"name\"`\n}\n\n// Source: A `Source` is a descriptor for source code.\n// It is returned from the debug adapter as part of a `StackFrame` and it is used by clients when specifying breakpoints.\ntype Source struct {\n\tName             string          `json:\"name,omitempty\"`\n\tPath             string          `json:\"path,omitempty\"`\n\tSourceReference  int             `json:\"sourceReference,omitempty\"`\n\tPresentationHint string          `json:\"presentationHint,omitempty\"`\n\tOrigin           string          `json:\"origin,omitempty\"`\n\tSources          []Source        `json:\"sources,omitempty\"`\n\tAdapterData      json.RawMessage `json:\"adapterData,omitempty\"`\n\tChecksums        []Checksum      `json:\"checksums,omitempty\"`\n}\n\n// StackFrame: A Stackframe contains the source location.\ntype StackFrame struct {\n\tId                          int     `json:\"id\"`\n\tName                        string  `json:\"name\"`\n\tSource                      *Source `json:\"source,omitempty\"`\n\tLine                        int     `json:\"line\"`\n\tColumn                      int     `json:\"column\"`\n\tEndLine                     int     `json:\"endLine,omitempty\"`\n\tEndColumn                   int     `json:\"endColumn,omitempty\"`\n\tCanRestart                  bool    `json:\"canRestart,omitempty\"`\n\tInstructionPointerReference string  `json:\"instructionPointerReference,omitempty\"`\n\tModuleId                    any     `json:\"moduleId,omitempty\"`\n\tPresentationHint            string  `json:\"presentationHint,omitempty\"`\n}\n\n// Scope: A `Scope` is a named container for variables. Optionally a scope can map to a source or a range within a source.\ntype Scope struct {\n\tName               string  `json:\"name\"`\n\tPresentationHint   string  `json:\"presentationHint,omitempty\"`\n\tVariablesReference int     `json:\"variablesReference\"`\n\tNamedVariables     int     `json:\"namedVariables,omitempty\"`\n\tIndexedVariables   int     `json:\"indexedVariables,omitempty\"`\n\tExpensive          bool    `json:\"expensive\"`\n\tSource             *Source `json:\"source,omitempty\"`\n\tLine               int     `json:\"line,omitempty\"`\n\tColumn             int     `json:\"column,omitempty\"`\n\tEndLine            int     `json:\"endLine,omitempty\"`\n\tEndColumn          int     `json:\"endColumn,omitempty\"`\n}\n\n// Variable: A Variable is a name/value pair.\n// The `type` attribute is shown if space permits or when hovering over the variable's name.\n// The `kind` attribute is used to render additional properties of the variable, e.g. different icons can be used to indicate that a variable is public or private.\n// If the value is structured (has children), a handle is provided to retrieve the children with the `variables` request.\n// If the number of named or indexed children is large, the numbers should be returned via the `namedVariables` and `indexedVariables` attributes.\n// The client can use this information to present the children in a paged UI and fetch them in chunks.\ntype Variable struct {\n\tName               string                    `json:\"name\"`\n\tValue              string                    `json:\"value\"`\n\tType               string                    `json:\"type,omitempty\"`\n\tPresentationHint   *VariablePresentationHint `json:\"presentationHint,omitempty\"`\n\tEvaluateName       string                    `json:\"evaluateName,omitempty\"`\n\tVariablesReference int                       `json:\"variablesReference\"`\n\tNamedVariables     int                       `json:\"namedVariables,omitempty\"`\n\tIndexedVariables   int                       `json:\"indexedVariables,omitempty\"`\n\tMemoryReference    string                    `json:\"memoryReference,omitempty\"`\n}\n\n// VariablePresentationHint: Properties of a variable that can be used to determine how to render the variable in the UI.\ntype VariablePresentationHint struct {\n\tKind       string   `json:\"kind,omitempty\"`\n\tAttributes []string `json:\"attributes,omitempty\"`\n\tVisibility string   `json:\"visibility,omitempty\"`\n\tLazy       bool     `json:\"lazy,omitempty\"`\n}\n\n// BreakpointLocation: Properties of a breakpoint location returned from the `breakpointLocations` request.\ntype BreakpointLocation struct {\n\tLine      int `json:\"line\"`\n\tColumn    int `json:\"column,omitempty\"`\n\tEndLine   int `json:\"endLine,omitempty\"`\n\tEndColumn int `json:\"endColumn,omitempty\"`\n}\n\n// SourceBreakpoint: Properties of a breakpoint or logpoint passed to the `setBreakpoints` request.\ntype SourceBreakpoint struct {\n\tLine         int    `json:\"line\"`\n\tColumn       int    `json:\"column,omitempty\"`\n\tCondition    string `json:\"condition,omitempty\"`\n\tHitCondition string `json:\"hitCondition,omitempty\"`\n\tLogMessage   string `json:\"logMessage,omitempty\"`\n}\n\n// FunctionBreakpoint: Properties of a breakpoint passed to the `setFunctionBreakpoints` request.\ntype FunctionBreakpoint struct {\n\tName         string `json:\"name\"`\n\tCondition    string `json:\"condition,omitempty\"`\n\tHitCondition string `json:\"hitCondition,omitempty\"`\n}\n\n// DataBreakpointAccessType: This enumeration defines all possible access types for data breakpoints.\ntype DataBreakpointAccessType string\n\n// DataBreakpoint: Properties of a data breakpoint passed to the `setDataBreakpoints` request.\ntype DataBreakpoint struct {\n\tDataId       string                   `json:\"dataId\"`\n\tAccessType   DataBreakpointAccessType `json:\"accessType,omitempty\"`\n\tCondition    string                   `json:\"condition,omitempty\"`\n\tHitCondition string                   `json:\"hitCondition,omitempty\"`\n}\n\n// InstructionBreakpoint: Properties of a breakpoint passed to the `setInstructionBreakpoints` request\ntype InstructionBreakpoint struct {\n\tInstructionReference string `json:\"instructionReference\"`\n\tOffset               int    `json:\"offset,omitempty\"`\n\tCondition            string `json:\"condition,omitempty\"`\n\tHitCondition         string `json:\"hitCondition,omitempty\"`\n}\n\n// Breakpoint: Information about a breakpoint created in `setBreakpoints`, `setFunctionBreakpoints`, `setInstructionBreakpoints`, or `setDataBreakpoints` requests.\ntype Breakpoint struct {\n\tId                   int     `json:\"id,omitempty\"`\n\tVerified             bool    `json:\"verified\"`\n\tMessage              string  `json:\"message,omitempty\"`\n\tSource               *Source `json:\"source,omitempty\"`\n\tLine                 int     `json:\"line,omitempty\"`\n\tColumn               int     `json:\"column,omitempty\"`\n\tEndLine              int     `json:\"endLine,omitempty\"`\n\tEndColumn            int     `json:\"endColumn,omitempty\"`\n\tInstructionReference string  `json:\"instructionReference,omitempty\"`\n\tOffset               int     `json:\"offset,omitempty\"`\n}\n\n// SteppingGranularity: The granularity of one 'step' in the stepping requests `next`, `stepIn`, `stepOut`, and `stepBack`.\ntype SteppingGranularity string\n\n// StepInTarget: A `StepInTarget` can be used in the `stepIn` request and determines into which single target the `stepIn` request should step.\ntype StepInTarget struct {\n\tId        int    `json:\"id\"`\n\tLabel     string `json:\"label\"`\n\tLine      int    `json:\"line,omitempty\"`\n\tColumn    int    `json:\"column,omitempty\"`\n\tEndLine   int    `json:\"endLine,omitempty\"`\n\tEndColumn int    `json:\"endColumn,omitempty\"`\n}\n\n// GotoTarget: A `GotoTarget` describes a code location that can be used as a target in the `goto` request.\n// The possible goto targets can be determined via the `gotoTargets` request.\ntype GotoTarget struct {\n\tId                          int    `json:\"id\"`\n\tLabel                       string `json:\"label\"`\n\tLine                        int    `json:\"line\"`\n\tColumn                      int    `json:\"column,omitempty\"`\n\tEndLine                     int    `json:\"endLine,omitempty\"`\n\tEndColumn                   int    `json:\"endColumn,omitempty\"`\n\tInstructionPointerReference string `json:\"instructionPointerReference,omitempty\"`\n}\n\n// CompletionItem: `CompletionItems` are the suggestions returned from the `completions` request.\ntype CompletionItem struct {\n\tLabel           string             `json:\"label\"`\n\tText            string             `json:\"text,omitempty\"`\n\tSortText        string             `json:\"sortText,omitempty\"`\n\tDetail          string             `json:\"detail,omitempty\"`\n\tType            CompletionItemType `json:\"type,omitempty\"`\n\tStart           int                `json:\"start,omitempty\"`\n\tLength          int                `json:\"length,omitempty\"`\n\tSelectionStart  int                `json:\"selectionStart,omitempty\"`\n\tSelectionLength int                `json:\"selectionLength,omitempty\"`\n}\n\n// CompletionItemType: Some predefined types for the CompletionItem. Please note that not all clients have specific icons for all of them.\ntype CompletionItemType string\n\n// ChecksumAlgorithm: Names of checksum algorithms that may be supported by a debug adapter.\ntype ChecksumAlgorithm string\n\n// Checksum: The checksum of an item calculated by the specified algorithm.\ntype Checksum struct {\n\tAlgorithm ChecksumAlgorithm `json:\"algorithm\"`\n\tChecksum  string            `json:\"checksum\"`\n}\n\n// ValueFormat: Provides formatting information for a value.\ntype ValueFormat struct {\n\tHex bool `json:\"hex,omitempty\"`\n}\n\n// StackFrameFormat: Provides formatting information for a stack frame.\ntype StackFrameFormat struct {\n\tValueFormat\n\n\tParameters      bool `json:\"parameters,omitempty\"`\n\tParameterTypes  bool `json:\"parameterTypes,omitempty\"`\n\tParameterNames  bool `json:\"parameterNames,omitempty\"`\n\tParameterValues bool `json:\"parameterValues,omitempty\"`\n\tLine            bool `json:\"line,omitempty\"`\n\tModule          bool `json:\"module,omitempty\"`\n\tIncludeAll      bool `json:\"includeAll,omitempty\"`\n}\n\n// ExceptionFilterOptions: An `ExceptionFilterOptions` is used to specify an exception filter together with a condition for the `setExceptionBreakpoints` request.\ntype ExceptionFilterOptions struct {\n\tFilterId  string `json:\"filterId\"`\n\tCondition string `json:\"condition,omitempty\"`\n}\n\n// ExceptionOptions: An `ExceptionOptions` assigns configuration options to a set of exceptions.\ntype ExceptionOptions struct {\n\tPath      []ExceptionPathSegment `json:\"path,omitempty\"`\n\tBreakMode ExceptionBreakMode     `json:\"breakMode\"`\n}\n\n// ExceptionBreakMode: This enumeration defines all possible conditions when a thrown exception should result in a break.\n// never: never breaks,\n// always: always breaks,\n// unhandled: breaks when exception unhandled,\n// userUnhandled: breaks if the exception is not handled by user code.\ntype ExceptionBreakMode string\n\n// ExceptionPathSegment: An `ExceptionPathSegment` represents a segment in a path that is used to match leafs or nodes in a tree of exceptions.\n// If a segment consists of more than one name, it matches the names provided if `negate` is false or missing, or it matches anything except the names provided if `negate` is true.\ntype ExceptionPathSegment struct {\n\tNegate bool     `json:\"negate,omitempty\"`\n\tNames  []string `json:\"names\"`\n}\n\n// ExceptionDetails: Detailed information about an exception that has occurred.\ntype ExceptionDetails struct {\n\tMessage        string             `json:\"message,omitempty\"`\n\tTypeName       string             `json:\"typeName,omitempty\"`\n\tFullTypeName   string             `json:\"fullTypeName,omitempty\"`\n\tEvaluateName   string             `json:\"evaluateName,omitempty\"`\n\tStackTrace     string             `json:\"stackTrace,omitempty\"`\n\tInnerException []ExceptionDetails `json:\"innerException,omitempty\"`\n}\n\n// DisassembledInstruction: Represents a single disassembled instruction.\ntype DisassembledInstruction struct {\n\tAddress          string  `json:\"address\"`\n\tInstructionBytes string  `json:\"instructionBytes,omitempty\"`\n\tInstruction      string  `json:\"instruction\"`\n\tSymbol           string  `json:\"symbol,omitempty\"`\n\tLocation         *Source `json:\"location,omitempty\"`\n\tLine             int     `json:\"line,omitempty\"`\n\tColumn           int     `json:\"column,omitempty\"`\n\tEndLine          int     `json:\"endLine,omitempty\"`\n\tEndColumn        int     `json:\"endColumn,omitempty\"`\n}\n\n// InvalidatedAreas: Logical areas that can be invalidated by the `invalidated` event.\ntype InvalidatedAreas string\n\n// Mapping of request commands and corresponding struct constructors that\n// can be passed to json.Unmarshal.\nvar requestCtor = map[string]messageCtor{\n\t\"cancel\":         func() Message { return &CancelRequest{} },\n\t\"runInTerminal\":  func() Message { return &RunInTerminalRequest{} },\n\t\"startDebugging\": func() Message { return &StartDebuggingRequest{} },\n\t\"initialize\": func() Message {\n\t\treturn &InitializeRequest{\n\t\t\tArguments: InitializeRequestArguments{\n\t\t\t\t// Set the default values specified here: https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Initialize.\n\t\t\t\tLinesStartAt1:   true,\n\t\t\t\tColumnsStartAt1: true,\n\t\t\t\tPathFormat:      \"path\",\n\t\t\t},\n\t\t}\n\t},\n\t\"configurationDone\":         func() Message { return &ConfigurationDoneRequest{} },\n\t\"launch\":                    func() Message { return &LaunchRequest{} },\n\t\"attach\":                    func() Message { return &AttachRequest{} },\n\t\"restart\":                   func() Message { return &RestartRequest{} },\n\t\"disconnect\":                func() Message { return &DisconnectRequest{} },\n\t\"terminate\":                 func() Message { return &TerminateRequest{} },\n\t\"breakpointLocations\":       func() Message { return &BreakpointLocationsRequest{} },\n\t\"setBreakpoints\":            func() Message { return &SetBreakpointsRequest{} },\n\t\"setFunctionBreakpoints\":    func() Message { return &SetFunctionBreakpointsRequest{} },\n\t\"setExceptionBreakpoints\":   func() Message { return &SetExceptionBreakpointsRequest{} },\n\t\"dataBreakpointInfo\":        func() Message { return &DataBreakpointInfoRequest{} },\n\t\"setDataBreakpoints\":        func() Message { return &SetDataBreakpointsRequest{} },\n\t\"setInstructionBreakpoints\": func() Message { return &SetInstructionBreakpointsRequest{} },\n\t\"continue\":                  func() Message { return &ContinueRequest{} },\n\t\"next\":                      func() Message { return &NextRequest{} },\n\t\"stepIn\":                    func() Message { return &StepInRequest{} },\n\t\"stepOut\":                   func() Message { return &StepOutRequest{} },\n\t\"stepBack\":                  func() Message { return &StepBackRequest{} },\n\t\"reverseContinue\":           func() Message { return &ReverseContinueRequest{} },\n\t\"restartFrame\":              func() Message { return &RestartFrameRequest{} },\n\t\"goto\":                      func() Message { return &GotoRequest{} },\n\t\"pause\":                     func() Message { return &PauseRequest{} },\n\t\"stackTrace\":                func() Message { return &StackTraceRequest{} },\n\t\"scopes\":                    func() Message { return &ScopesRequest{} },\n\t\"variables\":                 func() Message { return &VariablesRequest{} },\n\t\"setVariable\":               func() Message { return &SetVariableRequest{} },\n\t\"source\":                    func() Message { return &SourceRequest{} },\n\t\"threads\":                   func() Message { return &ThreadsRequest{} },\n\t\"terminateThreads\":          func() Message { return &TerminateThreadsRequest{} },\n\t\"modules\":                   func() Message { return &ModulesRequest{} },\n\t\"loadedSources\":             func() Message { return &LoadedSourcesRequest{} },\n\t\"evaluate\":                  func() Message { return &EvaluateRequest{} },\n\t\"setExpression\":             func() Message { return &SetExpressionRequest{} },\n\t\"stepInTargets\":             func() Message { return &StepInTargetsRequest{} },\n\t\"gotoTargets\":               func() Message { return &GotoTargetsRequest{} },\n\t\"completions\":               func() Message { return &CompletionsRequest{} },\n\t\"exceptionInfo\":             func() Message { return &ExceptionInfoRequest{} },\n\t\"readMemory\":                func() Message { return &ReadMemoryRequest{} },\n\t\"writeMemory\":               func() Message { return &WriteMemoryRequest{} },\n\t\"disassemble\":               func() Message { return &DisassembleRequest{} },\n}\n\n// Mapping of response commands and corresponding struct constructors that\n// can be passed to json.Unmarshal.\nvar responseCtor = map[string]messageCtor{\n\t\"cancel\":                    func() Message { return &CancelResponse{} },\n\t\"runInTerminal\":             func() Message { return &RunInTerminalResponse{} },\n\t\"startDebugging\":            func() Message { return &StartDebuggingResponse{} },\n\t\"initialize\":                func() Message { return &InitializeResponse{} },\n\t\"configurationDone\":         func() Message { return &ConfigurationDoneResponse{} },\n\t\"launch\":                    func() Message { return &LaunchResponse{} },\n\t\"attach\":                    func() Message { return &AttachResponse{} },\n\t\"restart\":                   func() Message { return &RestartResponse{} },\n\t\"disconnect\":                func() Message { return &DisconnectResponse{} },\n\t\"terminate\":                 func() Message { return &TerminateResponse{} },\n\t\"breakpointLocations\":       func() Message { return &BreakpointLocationsResponse{} },\n\t\"setBreakpoints\":            func() Message { return &SetBreakpointsResponse{} },\n\t\"setFunctionBreakpoints\":    func() Message { return &SetFunctionBreakpointsResponse{} },\n\t\"setExceptionBreakpoints\":   func() Message { return &SetExceptionBreakpointsResponse{} },\n\t\"dataBreakpointInfo\":        func() Message { return &DataBreakpointInfoResponse{} },\n\t\"setDataBreakpoints\":        func() Message { return &SetDataBreakpointsResponse{} },\n\t\"setInstructionBreakpoints\": func() Message { return &SetInstructionBreakpointsResponse{} },\n\t\"continue\":                  func() Message { return &ContinueResponse{} },\n\t\"next\":                      func() Message { return &NextResponse{} },\n\t\"stepIn\":                    func() Message { return &StepInResponse{} },\n\t\"stepOut\":                   func() Message { return &StepOutResponse{} },\n\t\"stepBack\":                  func() Message { return &StepBackResponse{} },\n\t\"reverseContinue\":           func() Message { return &ReverseContinueResponse{} },\n\t\"restartFrame\":              func() Message { return &RestartFrameResponse{} },\n\t\"goto\":                      func() Message { return &GotoResponse{} },\n\t\"pause\":                     func() Message { return &PauseResponse{} },\n\t\"stackTrace\":                func() Message { return &StackTraceResponse{} },\n\t\"scopes\":                    func() Message { return &ScopesResponse{} },\n\t\"variables\":                 func() Message { return &VariablesResponse{} },\n\t\"setVariable\":               func() Message { return &SetVariableResponse{} },\n\t\"source\":                    func() Message { return &SourceResponse{} },\n\t\"threads\":                   func() Message { return &ThreadsResponse{} },\n\t\"terminateThreads\":          func() Message { return &TerminateThreadsResponse{} },\n\t\"modules\":                   func() Message { return &ModulesResponse{} },\n\t\"loadedSources\":             func() Message { return &LoadedSourcesResponse{} },\n\t\"evaluate\":                  func() Message { return &EvaluateResponse{} },\n\t\"setExpression\":             func() Message { return &SetExpressionResponse{} },\n\t\"stepInTargets\":             func() Message { return &StepInTargetsResponse{} },\n\t\"gotoTargets\":               func() Message { return &GotoTargetsResponse{} },\n\t\"completions\":               func() Message { return &CompletionsResponse{} },\n\t\"exceptionInfo\":             func() Message { return &ExceptionInfoResponse{} },\n\t\"readMemory\":                func() Message { return &ReadMemoryResponse{} },\n\t\"writeMemory\":               func() Message { return &WriteMemoryResponse{} },\n\t\"disassemble\":               func() Message { return &DisassembleResponse{} },\n}\n\n// Mapping of event ids and corresponding struct constructors that\n// can be passed to json.Unmarshal.\nvar eventCtor = map[string]messageCtor{\n\t\"initialized\":    func() Message { return &InitializedEvent{} },\n\t\"stopped\":        func() Message { return &StoppedEvent{} },\n\t\"continued\":      func() Message { return &ContinuedEvent{} },\n\t\"exited\":         func() Message { return &ExitedEvent{} },\n\t\"terminated\":     func() Message { return &TerminatedEvent{} },\n\t\"thread\":         func() Message { return &ThreadEvent{} },\n\t\"output\":         func() Message { return &OutputEvent{} },\n\t\"breakpoint\":     func() Message { return &BreakpointEvent{} },\n\t\"module\":         func() Message { return &ModuleEvent{} },\n\t\"loadedSource\":   func() Message { return &LoadedSourceEvent{} },\n\t\"process\":        func() Message { return &ProcessEvent{} },\n\t\"capabilities\":   func() Message { return &CapabilitiesEvent{} },\n\t\"progressStart\":  func() Message { return &ProgressStartEvent{} },\n\t\"progressUpdate\": func() Message { return &ProgressUpdateEvent{} },\n\t\"progressEnd\":    func() Message { return &ProgressEndEvent{} },\n\t\"invalidated\":    func() Message { return &InvalidatedEvent{} },\n\t\"memory\":         func() Message { return &MemoryEvent{} },\n}\n"
  },
  {
    "path": "vendor/github.com/inconshreveable/mousetrap/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2022 Alan Shreve (@inconshreveable)\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "vendor/github.com/inconshreveable/mousetrap/README.md",
    "content": "# mousetrap\n\nmousetrap is a tiny library that answers a single question.\n\nOn a Windows machine, was the process invoked by someone double clicking on\nthe executable file while browsing in explorer?\n\n### Motivation\n\nWindows developers unfamiliar with command line tools will often \"double-click\"\nthe executable for a tool. Because most CLI tools print the help and then exit\nwhen invoked without arguments, this is often very frustrating for those users.\n\nmousetrap provides a way to detect these invocations so that you can provide\nmore helpful behavior and instructions on how to run the CLI tool. To see what\nthis looks like, both from an organizational and a technical perspective, see\nhttps://inconshreveable.com/09-09-2014/sweat-the-small-stuff/\n\n### The interface\n\nThe library exposes a single interface:\n\n    func StartedByExplorer() (bool)\n"
  },
  {
    "path": "vendor/github.com/inconshreveable/mousetrap/trap_others.go",
    "content": "//go:build !windows\n// +build !windows\n\npackage mousetrap\n\n// StartedByExplorer returns true if the program was invoked by the user\n// double-clicking on the executable from explorer.exe\n//\n// It is conservative and returns false if any of the internal calls fail.\n// It does not guarantee that the program was run from a terminal. It only can tell you\n// whether it was launched from explorer.exe\n//\n// On non-Windows platforms, it always returns false.\nfunc StartedByExplorer() bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/inconshreveable/mousetrap/trap_windows.go",
    "content": "package mousetrap\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc getProcessEntry(pid int) (*syscall.ProcessEntry32, error) {\n\tsnapshot, err := syscall.CreateToolhelp32Snapshot(syscall.TH32CS_SNAPPROCESS, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer syscall.CloseHandle(snapshot)\n\tvar procEntry syscall.ProcessEntry32\n\tprocEntry.Size = uint32(unsafe.Sizeof(procEntry))\n\tif err = syscall.Process32First(snapshot, &procEntry); err != nil {\n\t\treturn nil, err\n\t}\n\tfor {\n\t\tif procEntry.ProcessID == uint32(pid) {\n\t\t\treturn &procEntry, nil\n\t\t}\n\t\terr = syscall.Process32Next(snapshot, &procEntry)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n}\n\n// StartedByExplorer returns true if the program was invoked by the user double-clicking\n// on the executable from explorer.exe\n//\n// It is conservative and returns false if any of the internal calls fail.\n// It does not guarantee that the program was run from a terminal. It only can tell you\n// whether it was launched from explorer.exe\nfunc StartedByExplorer() bool {\n\tpe, err := getProcessEntry(syscall.Getppid())\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn \"explorer.exe\" == syscall.UTF16ToString(pe.ExeFile[:])\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 Yasuhiro Matsumoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/README.md",
    "content": "# go-colorable\n\n[![Build Status](https://github.com/mattn/go-colorable/workflows/test/badge.svg)](https://github.com/mattn/go-colorable/actions?query=workflow%3Atest)\n[![Codecov](https://codecov.io/gh/mattn/go-colorable/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-colorable)\n[![GoDoc](https://godoc.org/github.com/mattn/go-colorable?status.svg)](http://godoc.org/github.com/mattn/go-colorable)\n[![Go Report Card](https://goreportcard.com/badge/mattn/go-colorable)](https://goreportcard.com/report/mattn/go-colorable)\n\nColorable writer for windows.\n\nFor example, most of logger packages doesn't show colors on windows. (I know we can do it with ansicon. But I don't want.)\nThis package is possible to handle escape sequence for ansi color on windows.\n\n## Too Bad!\n\n![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/bad.png)\n\n\n## So Good!\n\n![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/good.png)\n\n## Usage\n\n```go\nlogrus.SetFormatter(&logrus.TextFormatter{ForceColors: true})\nlogrus.SetOutput(colorable.NewColorableStdout())\n\nlogrus.Info(\"succeeded\")\nlogrus.Warn(\"not correct\")\nlogrus.Error(\"something error\")\nlogrus.Fatal(\"panic\")\n```\n\nYou can compile above code on non-windows OSs.\n\n## Installation\n\n```\n$ go get github.com/mattn/go-colorable\n```\n\n# License\n\nMIT\n\n# Author\n\nYasuhiro Matsumoto (a.k.a mattn)\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/colorable_appengine.go",
    "content": "//go:build appengine\n// +build appengine\n\npackage colorable\n\nimport (\n\t\"io\"\n\t\"os\"\n\n\t_ \"github.com/mattn/go-isatty\"\n)\n\n// NewColorable returns new instance of Writer which handles escape sequence.\nfunc NewColorable(file *os.File) io.Writer {\n\tif file == nil {\n\t\tpanic(\"nil passed instead of *os.File to NewColorable()\")\n\t}\n\n\treturn file\n}\n\n// NewColorableStdout returns new instance of Writer which handles escape sequence for stdout.\nfunc NewColorableStdout() io.Writer {\n\treturn os.Stdout\n}\n\n// NewColorableStderr returns new instance of Writer which handles escape sequence for stderr.\nfunc NewColorableStderr() io.Writer {\n\treturn os.Stderr\n}\n\n// EnableColorsStdout enable colors if possible.\nfunc EnableColorsStdout(enabled *bool) func() {\n\tif enabled != nil {\n\t\t*enabled = true\n\t}\n\treturn func() {}\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/colorable_others.go",
    "content": "//go:build !windows && !appengine\n// +build !windows,!appengine\n\npackage colorable\n\nimport (\n\t\"io\"\n\t\"os\"\n\n\t_ \"github.com/mattn/go-isatty\"\n)\n\n// NewColorable returns new instance of Writer which handles escape sequence.\nfunc NewColorable(file *os.File) io.Writer {\n\tif file == nil {\n\t\tpanic(\"nil passed instead of *os.File to NewColorable()\")\n\t}\n\n\treturn file\n}\n\n// NewColorableStdout returns new instance of Writer which handles escape sequence for stdout.\nfunc NewColorableStdout() io.Writer {\n\treturn os.Stdout\n}\n\n// NewColorableStderr returns new instance of Writer which handles escape sequence for stderr.\nfunc NewColorableStderr() io.Writer {\n\treturn os.Stderr\n}\n\n// EnableColorsStdout enable colors if possible.\nfunc EnableColorsStdout(enabled *bool) func() {\n\tif enabled != nil {\n\t\t*enabled = true\n\t}\n\treturn func() {}\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/colorable_windows.go",
    "content": "//go:build windows && !appengine\n// +build windows,!appengine\n\npackage colorable\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"math\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n\n\t\"github.com/mattn/go-isatty\"\n)\n\nconst (\n\tforegroundBlue      = 0x1\n\tforegroundGreen     = 0x2\n\tforegroundRed       = 0x4\n\tforegroundIntensity = 0x8\n\tforegroundMask      = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity)\n\tbackgroundBlue      = 0x10\n\tbackgroundGreen     = 0x20\n\tbackgroundRed       = 0x40\n\tbackgroundIntensity = 0x80\n\tbackgroundMask      = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity)\n\tcommonLvbUnderscore = 0x8000\n\n\tcENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4\n)\n\nconst (\n\tgenericRead  = 0x80000000\n\tgenericWrite = 0x40000000\n)\n\nconst (\n\tconsoleTextmodeBuffer = 0x1\n)\n\ntype wchar uint16\ntype short int16\ntype dword uint32\ntype word uint16\n\ntype coord struct {\n\tx short\n\ty short\n}\n\ntype smallRect struct {\n\tleft   short\n\ttop    short\n\tright  short\n\tbottom short\n}\n\ntype consoleScreenBufferInfo struct {\n\tsize              coord\n\tcursorPosition    coord\n\tattributes        word\n\twindow            smallRect\n\tmaximumWindowSize coord\n}\n\ntype consoleCursorInfo struct {\n\tsize    dword\n\tvisible int32\n}\n\nvar (\n\tkernel32                       = syscall.NewLazyDLL(\"kernel32.dll\")\n\tprocGetConsoleScreenBufferInfo = kernel32.NewProc(\"GetConsoleScreenBufferInfo\")\n\tprocSetConsoleTextAttribute    = kernel32.NewProc(\"SetConsoleTextAttribute\")\n\tprocSetConsoleCursorPosition   = kernel32.NewProc(\"SetConsoleCursorPosition\")\n\tprocFillConsoleOutputCharacter = kernel32.NewProc(\"FillConsoleOutputCharacterW\")\n\tprocFillConsoleOutputAttribute = kernel32.NewProc(\"FillConsoleOutputAttribute\")\n\tprocGetConsoleCursorInfo       = kernel32.NewProc(\"GetConsoleCursorInfo\")\n\tprocSetConsoleCursorInfo       = kernel32.NewProc(\"SetConsoleCursorInfo\")\n\tprocSetConsoleTitle            = kernel32.NewProc(\"SetConsoleTitleW\")\n\tprocGetConsoleMode             = kernel32.NewProc(\"GetConsoleMode\")\n\tprocSetConsoleMode             = kernel32.NewProc(\"SetConsoleMode\")\n\tprocCreateConsoleScreenBuffer  = kernel32.NewProc(\"CreateConsoleScreenBuffer\")\n)\n\n// Writer provides colorable Writer to the console\ntype Writer struct {\n\tout       io.Writer\n\thandle    syscall.Handle\n\talthandle syscall.Handle\n\toldattr   word\n\toldpos    coord\n\trest      bytes.Buffer\n\tmutex     sync.Mutex\n}\n\n// NewColorable returns new instance of Writer which handles escape sequence from File.\nfunc NewColorable(file *os.File) io.Writer {\n\tif file == nil {\n\t\tpanic(\"nil passed instead of *os.File to NewColorable()\")\n\t}\n\n\tif isatty.IsTerminal(file.Fd()) {\n\t\tvar mode uint32\n\t\tif r, _, _ := procGetConsoleMode.Call(file.Fd(), uintptr(unsafe.Pointer(&mode))); r != 0 && mode&cENABLE_VIRTUAL_TERMINAL_PROCESSING != 0 {\n\t\t\treturn file\n\t\t}\n\t\tvar csbi consoleScreenBufferInfo\n\t\thandle := syscall.Handle(file.Fd())\n\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\treturn &Writer{out: file, handle: handle, oldattr: csbi.attributes, oldpos: coord{0, 0}}\n\t}\n\treturn file\n}\n\n// NewColorableStdout returns new instance of Writer which handles escape sequence for stdout.\nfunc NewColorableStdout() io.Writer {\n\treturn NewColorable(os.Stdout)\n}\n\n// NewColorableStderr returns new instance of Writer which handles escape sequence for stderr.\nfunc NewColorableStderr() io.Writer {\n\treturn NewColorable(os.Stderr)\n}\n\nvar color256 = map[int]int{\n\t0:   0x000000,\n\t1:   0x800000,\n\t2:   0x008000,\n\t3:   0x808000,\n\t4:   0x000080,\n\t5:   0x800080,\n\t6:   0x008080,\n\t7:   0xc0c0c0,\n\t8:   0x808080,\n\t9:   0xff0000,\n\t10:  0x00ff00,\n\t11:  0xffff00,\n\t12:  0x0000ff,\n\t13:  0xff00ff,\n\t14:  0x00ffff,\n\t15:  0xffffff,\n\t16:  0x000000,\n\t17:  0x00005f,\n\t18:  0x000087,\n\t19:  0x0000af,\n\t20:  0x0000d7,\n\t21:  0x0000ff,\n\t22:  0x005f00,\n\t23:  0x005f5f,\n\t24:  0x005f87,\n\t25:  0x005faf,\n\t26:  0x005fd7,\n\t27:  0x005fff,\n\t28:  0x008700,\n\t29:  0x00875f,\n\t30:  0x008787,\n\t31:  0x0087af,\n\t32:  0x0087d7,\n\t33:  0x0087ff,\n\t34:  0x00af00,\n\t35:  0x00af5f,\n\t36:  0x00af87,\n\t37:  0x00afaf,\n\t38:  0x00afd7,\n\t39:  0x00afff,\n\t40:  0x00d700,\n\t41:  0x00d75f,\n\t42:  0x00d787,\n\t43:  0x00d7af,\n\t44:  0x00d7d7,\n\t45:  0x00d7ff,\n\t46:  0x00ff00,\n\t47:  0x00ff5f,\n\t48:  0x00ff87,\n\t49:  0x00ffaf,\n\t50:  0x00ffd7,\n\t51:  0x00ffff,\n\t52:  0x5f0000,\n\t53:  0x5f005f,\n\t54:  0x5f0087,\n\t55:  0x5f00af,\n\t56:  0x5f00d7,\n\t57:  0x5f00ff,\n\t58:  0x5f5f00,\n\t59:  0x5f5f5f,\n\t60:  0x5f5f87,\n\t61:  0x5f5faf,\n\t62:  0x5f5fd7,\n\t63:  0x5f5fff,\n\t64:  0x5f8700,\n\t65:  0x5f875f,\n\t66:  0x5f8787,\n\t67:  0x5f87af,\n\t68:  0x5f87d7,\n\t69:  0x5f87ff,\n\t70:  0x5faf00,\n\t71:  0x5faf5f,\n\t72:  0x5faf87,\n\t73:  0x5fafaf,\n\t74:  0x5fafd7,\n\t75:  0x5fafff,\n\t76:  0x5fd700,\n\t77:  0x5fd75f,\n\t78:  0x5fd787,\n\t79:  0x5fd7af,\n\t80:  0x5fd7d7,\n\t81:  0x5fd7ff,\n\t82:  0x5fff00,\n\t83:  0x5fff5f,\n\t84:  0x5fff87,\n\t85:  0x5fffaf,\n\t86:  0x5fffd7,\n\t87:  0x5fffff,\n\t88:  0x870000,\n\t89:  0x87005f,\n\t90:  0x870087,\n\t91:  0x8700af,\n\t92:  0x8700d7,\n\t93:  0x8700ff,\n\t94:  0x875f00,\n\t95:  0x875f5f,\n\t96:  0x875f87,\n\t97:  0x875faf,\n\t98:  0x875fd7,\n\t99:  0x875fff,\n\t100: 0x878700,\n\t101: 0x87875f,\n\t102: 0x878787,\n\t103: 0x8787af,\n\t104: 0x8787d7,\n\t105: 0x8787ff,\n\t106: 0x87af00,\n\t107: 0x87af5f,\n\t108: 0x87af87,\n\t109: 0x87afaf,\n\t110: 0x87afd7,\n\t111: 0x87afff,\n\t112: 0x87d700,\n\t113: 0x87d75f,\n\t114: 0x87d787,\n\t115: 0x87d7af,\n\t116: 0x87d7d7,\n\t117: 0x87d7ff,\n\t118: 0x87ff00,\n\t119: 0x87ff5f,\n\t120: 0x87ff87,\n\t121: 0x87ffaf,\n\t122: 0x87ffd7,\n\t123: 0x87ffff,\n\t124: 0xaf0000,\n\t125: 0xaf005f,\n\t126: 0xaf0087,\n\t127: 0xaf00af,\n\t128: 0xaf00d7,\n\t129: 0xaf00ff,\n\t130: 0xaf5f00,\n\t131: 0xaf5f5f,\n\t132: 0xaf5f87,\n\t133: 0xaf5faf,\n\t134: 0xaf5fd7,\n\t135: 0xaf5fff,\n\t136: 0xaf8700,\n\t137: 0xaf875f,\n\t138: 0xaf8787,\n\t139: 0xaf87af,\n\t140: 0xaf87d7,\n\t141: 0xaf87ff,\n\t142: 0xafaf00,\n\t143: 0xafaf5f,\n\t144: 0xafaf87,\n\t145: 0xafafaf,\n\t146: 0xafafd7,\n\t147: 0xafafff,\n\t148: 0xafd700,\n\t149: 0xafd75f,\n\t150: 0xafd787,\n\t151: 0xafd7af,\n\t152: 0xafd7d7,\n\t153: 0xafd7ff,\n\t154: 0xafff00,\n\t155: 0xafff5f,\n\t156: 0xafff87,\n\t157: 0xafffaf,\n\t158: 0xafffd7,\n\t159: 0xafffff,\n\t160: 0xd70000,\n\t161: 0xd7005f,\n\t162: 0xd70087,\n\t163: 0xd700af,\n\t164: 0xd700d7,\n\t165: 0xd700ff,\n\t166: 0xd75f00,\n\t167: 0xd75f5f,\n\t168: 0xd75f87,\n\t169: 0xd75faf,\n\t170: 0xd75fd7,\n\t171: 0xd75fff,\n\t172: 0xd78700,\n\t173: 0xd7875f,\n\t174: 0xd78787,\n\t175: 0xd787af,\n\t176: 0xd787d7,\n\t177: 0xd787ff,\n\t178: 0xd7af00,\n\t179: 0xd7af5f,\n\t180: 0xd7af87,\n\t181: 0xd7afaf,\n\t182: 0xd7afd7,\n\t183: 0xd7afff,\n\t184: 0xd7d700,\n\t185: 0xd7d75f,\n\t186: 0xd7d787,\n\t187: 0xd7d7af,\n\t188: 0xd7d7d7,\n\t189: 0xd7d7ff,\n\t190: 0xd7ff00,\n\t191: 0xd7ff5f,\n\t192: 0xd7ff87,\n\t193: 0xd7ffaf,\n\t194: 0xd7ffd7,\n\t195: 0xd7ffff,\n\t196: 0xff0000,\n\t197: 0xff005f,\n\t198: 0xff0087,\n\t199: 0xff00af,\n\t200: 0xff00d7,\n\t201: 0xff00ff,\n\t202: 0xff5f00,\n\t203: 0xff5f5f,\n\t204: 0xff5f87,\n\t205: 0xff5faf,\n\t206: 0xff5fd7,\n\t207: 0xff5fff,\n\t208: 0xff8700,\n\t209: 0xff875f,\n\t210: 0xff8787,\n\t211: 0xff87af,\n\t212: 0xff87d7,\n\t213: 0xff87ff,\n\t214: 0xffaf00,\n\t215: 0xffaf5f,\n\t216: 0xffaf87,\n\t217: 0xffafaf,\n\t218: 0xffafd7,\n\t219: 0xffafff,\n\t220: 0xffd700,\n\t221: 0xffd75f,\n\t222: 0xffd787,\n\t223: 0xffd7af,\n\t224: 0xffd7d7,\n\t225: 0xffd7ff,\n\t226: 0xffff00,\n\t227: 0xffff5f,\n\t228: 0xffff87,\n\t229: 0xffffaf,\n\t230: 0xffffd7,\n\t231: 0xffffff,\n\t232: 0x080808,\n\t233: 0x121212,\n\t234: 0x1c1c1c,\n\t235: 0x262626,\n\t236: 0x303030,\n\t237: 0x3a3a3a,\n\t238: 0x444444,\n\t239: 0x4e4e4e,\n\t240: 0x585858,\n\t241: 0x626262,\n\t242: 0x6c6c6c,\n\t243: 0x767676,\n\t244: 0x808080,\n\t245: 0x8a8a8a,\n\t246: 0x949494,\n\t247: 0x9e9e9e,\n\t248: 0xa8a8a8,\n\t249: 0xb2b2b2,\n\t250: 0xbcbcbc,\n\t251: 0xc6c6c6,\n\t252: 0xd0d0d0,\n\t253: 0xdadada,\n\t254: 0xe4e4e4,\n\t255: 0xeeeeee,\n}\n\n// `\\033]0;TITLESTR\\007`\nfunc doTitleSequence(er *bytes.Reader) error {\n\tvar c byte\n\tvar err error\n\n\tc, err = er.ReadByte()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif c != '0' && c != '2' {\n\t\treturn nil\n\t}\n\tc, err = er.ReadByte()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif c != ';' {\n\t\treturn nil\n\t}\n\ttitle := make([]byte, 0, 80)\n\tfor {\n\t\tc, err = er.ReadByte()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif c == 0x07 || c == '\\n' {\n\t\t\tbreak\n\t\t}\n\t\ttitle = append(title, c)\n\t}\n\tif len(title) > 0 {\n\t\ttitle8, err := syscall.UTF16PtrFromString(string(title))\n\t\tif err == nil {\n\t\t\tprocSetConsoleTitle.Call(uintptr(unsafe.Pointer(title8)))\n\t\t}\n\t}\n\treturn nil\n}\n\n// returns Atoi(s) unless s == \"\" in which case it returns def\nfunc atoiWithDefault(s string, def int) (int, error) {\n\tif s == \"\" {\n\t\treturn def, nil\n\t}\n\treturn strconv.Atoi(s)\n}\n\n// Write writes data on console\nfunc (w *Writer) Write(data []byte) (n int, err error) {\n\tw.mutex.Lock()\n\tdefer w.mutex.Unlock()\n\tvar csbi consoleScreenBufferInfo\n\tprocGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi)))\n\n\thandle := w.handle\n\n\tvar er *bytes.Reader\n\tif w.rest.Len() > 0 {\n\t\tvar rest bytes.Buffer\n\t\tw.rest.WriteTo(&rest)\n\t\tw.rest.Reset()\n\t\trest.Write(data)\n\t\ter = bytes.NewReader(rest.Bytes())\n\t} else {\n\t\ter = bytes.NewReader(data)\n\t}\n\tvar plaintext bytes.Buffer\nloop:\n\tfor {\n\t\tc1, err := er.ReadByte()\n\t\tif err != nil {\n\t\t\tplaintext.WriteTo(w.out)\n\t\t\tbreak loop\n\t\t}\n\t\tif c1 != 0x1b {\n\t\t\tplaintext.WriteByte(c1)\n\t\t\tcontinue\n\t\t}\n\t\t_, err = plaintext.WriteTo(w.out)\n\t\tif err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tc2, err := er.ReadByte()\n\t\tif err != nil {\n\t\t\tbreak loop\n\t\t}\n\n\t\tswitch c2 {\n\t\tcase '>':\n\t\t\tcontinue\n\t\tcase ']':\n\t\t\tw.rest.WriteByte(c1)\n\t\t\tw.rest.WriteByte(c2)\n\t\t\ter.WriteTo(&w.rest)\n\t\t\tif bytes.IndexByte(w.rest.Bytes(), 0x07) == -1 {\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\ter = bytes.NewReader(w.rest.Bytes()[2:])\n\t\t\terr := doTitleSequence(er)\n\t\t\tif err != nil {\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tw.rest.Reset()\n\t\t\tcontinue\n\t\t// https://github.com/mattn/go-colorable/issues/27\n\t\tcase '7':\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tw.oldpos = csbi.cursorPosition\n\t\t\tcontinue\n\t\tcase '8':\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos)))\n\t\t\tcontinue\n\t\tcase 0x5b:\n\t\t\t// execute part after switch\n\t\tdefault:\n\t\t\tcontinue\n\t\t}\n\n\t\tw.rest.WriteByte(c1)\n\t\tw.rest.WriteByte(c2)\n\t\ter.WriteTo(&w.rest)\n\n\t\tvar buf bytes.Buffer\n\t\tvar m byte\n\t\tfor i, c := range w.rest.Bytes()[2:] {\n\t\t\tif ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {\n\t\t\t\tm = c\n\t\t\t\ter = bytes.NewReader(w.rest.Bytes()[2+i+1:])\n\t\t\t\tw.rest.Reset()\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tbuf.Write([]byte(string(c)))\n\t\t}\n\t\tif m == 0 {\n\t\t\tbreak loop\n\t\t}\n\n\t\tswitch m {\n\t\tcase 'A':\n\t\t\tn, err = atoiWithDefault(buf.String(), 1)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.y -= short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'B':\n\t\t\tn, err = atoiWithDefault(buf.String(), 1)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.y += short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'C':\n\t\t\tn, err = atoiWithDefault(buf.String(), 1)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x += short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'D':\n\t\t\tn, err = atoiWithDefault(buf.String(), 1)\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x -= short(n)\n\t\t\tif csbi.cursorPosition.x < 0 {\n\t\t\t\tcsbi.cursorPosition.x = 0\n\t\t\t}\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'E':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x = 0\n\t\t\tcsbi.cursorPosition.y += short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'F':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x = 0\n\t\t\tcsbi.cursorPosition.y -= short(n)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'G':\n\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif n < 1 {\n\t\t\t\tn = 1\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tcsbi.cursorPosition.x = short(n - 1)\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'H', 'f':\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tif buf.Len() > 0 {\n\t\t\t\ttoken := strings.Split(buf.String(), \";\")\n\t\t\t\tswitch len(token) {\n\t\t\t\tcase 1:\n\t\t\t\t\tn1, err := strconv.Atoi(token[0])\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tcsbi.cursorPosition.y = short(n1 - 1)\n\t\t\t\tcase 2:\n\t\t\t\t\tn1, err := strconv.Atoi(token[0])\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tn2, err := strconv.Atoi(token[1])\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tcsbi.cursorPosition.x = short(n2 - 1)\n\t\t\t\t\tcsbi.cursorPosition.y = short(n1 - 1)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcsbi.cursorPosition.y = 0\n\t\t\t}\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition)))\n\t\tcase 'J':\n\t\t\tn := 0\n\t\t\tif buf.Len() > 0 {\n\t\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count, written dword\n\t\t\tvar cursor coord\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tswitch n {\n\t\t\tcase 0:\n\t\t\t\tcursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}\n\t\t\t\tcount = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x)\n\t\t\tcase 1:\n\t\t\t\tcursor = coord{x: csbi.window.left, y: csbi.window.top}\n\t\t\t\tcount = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.window.top-csbi.cursorPosition.y)*dword(csbi.size.x)\n\t\t\tcase 2:\n\t\t\t\tcursor = coord{x: csbi.window.left, y: csbi.window.top}\n\t\t\t\tcount = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x)\n\t\t\t}\n\t\t\tprocFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\t\tprocFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\tcase 'K':\n\t\t\tn := 0\n\t\t\tif buf.Len() > 0 {\n\t\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tvar cursor coord\n\t\t\tvar count, written dword\n\t\t\tswitch n {\n\t\t\tcase 0:\n\t\t\t\tcursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}\n\t\t\t\tcount = dword(csbi.size.x - csbi.cursorPosition.x)\n\t\t\tcase 1:\n\t\t\t\tcursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y}\n\t\t\t\tcount = dword(csbi.size.x - csbi.cursorPosition.x)\n\t\t\tcase 2:\n\t\t\t\tcursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y}\n\t\t\t\tcount = dword(csbi.size.x)\n\t\t\t}\n\t\t\tprocFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\t\tprocFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\tcase 'X':\n\t\t\tn := 0\n\t\t\tif buf.Len() > 0 {\n\t\t\t\tn, err = strconv.Atoi(buf.String())\n\t\t\t\tif err != nil {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tvar cursor coord\n\t\t\tvar written dword\n\t\t\tcursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}\n\t\t\tprocFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(n), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\t\tprocFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(n), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))\n\t\tcase 'm':\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tattr := csbi.attributes\n\t\t\tcs := buf.String()\n\t\t\tif cs == \"\" {\n\t\t\t\tprocSetConsoleTextAttribute.Call(uintptr(handle), uintptr(w.oldattr))\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ttoken := strings.Split(cs, \";\")\n\t\t\tfor i := 0; i < len(token); i++ {\n\t\t\t\tns := token[i]\n\t\t\t\tif n, err = strconv.Atoi(ns); err == nil {\n\t\t\t\t\tswitch {\n\t\t\t\t\tcase n == 0 || n == 100:\n\t\t\t\t\t\tattr = w.oldattr\n\t\t\t\t\tcase n == 4:\n\t\t\t\t\t\tattr |= commonLvbUnderscore\n\t\t\t\t\tcase (1 <= n && n <= 3) || n == 5:\n\t\t\t\t\t\tattr |= foregroundIntensity\n\t\t\t\t\tcase n == 7 || n == 27:\n\t\t\t\t\t\tattr =\n\t\t\t\t\t\t\t(attr &^ (foregroundMask | backgroundMask)) |\n\t\t\t\t\t\t\t\t((attr & foregroundMask) << 4) |\n\t\t\t\t\t\t\t\t((attr & backgroundMask) >> 4)\n\t\t\t\t\tcase n == 22:\n\t\t\t\t\t\tattr &^= foregroundIntensity\n\t\t\t\t\tcase n == 24:\n\t\t\t\t\t\tattr &^= commonLvbUnderscore\n\t\t\t\t\tcase 30 <= n && n <= 37:\n\t\t\t\t\t\tattr &= backgroundMask\n\t\t\t\t\t\tif (n-30)&1 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundRed\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-30)&2 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundGreen\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-30)&4 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundBlue\n\t\t\t\t\t\t}\n\t\t\t\t\tcase n == 38: // set foreground color.\n\t\t\t\t\t\tif i < len(token)-2 && (token[i+1] == \"5\" || token[i+1] == \"05\") {\n\t\t\t\t\t\t\tif n256, err := strconv.Atoi(token[i+2]); err == nil {\n\t\t\t\t\t\t\t\tif n256foreAttr == nil {\n\t\t\t\t\t\t\t\t\tn256setup()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tattr &= backgroundMask\n\t\t\t\t\t\t\t\tattr |= n256foreAttr[n256%len(n256foreAttr)]\n\t\t\t\t\t\t\t\ti += 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if len(token) == 5 && token[i+1] == \"2\" {\n\t\t\t\t\t\t\tvar r, g, b int\n\t\t\t\t\t\t\tr, _ = strconv.Atoi(token[i+2])\n\t\t\t\t\t\t\tg, _ = strconv.Atoi(token[i+3])\n\t\t\t\t\t\t\tb, _ = strconv.Atoi(token[i+4])\n\t\t\t\t\t\t\ti += 4\n\t\t\t\t\t\t\tif r > 127 {\n\t\t\t\t\t\t\t\tattr |= foregroundRed\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif g > 127 {\n\t\t\t\t\t\t\t\tattr |= foregroundGreen\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif b > 127 {\n\t\t\t\t\t\t\t\tattr |= foregroundBlue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattr = attr & (w.oldattr & backgroundMask)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase n == 39: // reset foreground color.\n\t\t\t\t\t\tattr &= backgroundMask\n\t\t\t\t\t\tattr |= w.oldattr & foregroundMask\n\t\t\t\t\tcase 40 <= n && n <= 47:\n\t\t\t\t\t\tattr &= foregroundMask\n\t\t\t\t\t\tif (n-40)&1 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundRed\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-40)&2 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundGreen\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-40)&4 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundBlue\n\t\t\t\t\t\t}\n\t\t\t\t\tcase n == 48: // set background color.\n\t\t\t\t\t\tif i < len(token)-2 && token[i+1] == \"5\" {\n\t\t\t\t\t\t\tif n256, err := strconv.Atoi(token[i+2]); err == nil {\n\t\t\t\t\t\t\t\tif n256backAttr == nil {\n\t\t\t\t\t\t\t\t\tn256setup()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tattr &= foregroundMask\n\t\t\t\t\t\t\t\tattr |= n256backAttr[n256%len(n256backAttr)]\n\t\t\t\t\t\t\t\ti += 2\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if len(token) == 5 && token[i+1] == \"2\" {\n\t\t\t\t\t\t\tvar r, g, b int\n\t\t\t\t\t\t\tr, _ = strconv.Atoi(token[i+2])\n\t\t\t\t\t\t\tg, _ = strconv.Atoi(token[i+3])\n\t\t\t\t\t\t\tb, _ = strconv.Atoi(token[i+4])\n\t\t\t\t\t\t\ti += 4\n\t\t\t\t\t\t\tif r > 127 {\n\t\t\t\t\t\t\t\tattr |= backgroundRed\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif g > 127 {\n\t\t\t\t\t\t\t\tattr |= backgroundGreen\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif b > 127 {\n\t\t\t\t\t\t\t\tattr |= backgroundBlue\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tattr = attr & (w.oldattr & foregroundMask)\n\t\t\t\t\t\t}\n\t\t\t\t\tcase n == 49: // reset foreground color.\n\t\t\t\t\t\tattr &= foregroundMask\n\t\t\t\t\t\tattr |= w.oldattr & backgroundMask\n\t\t\t\t\tcase 90 <= n && n <= 97:\n\t\t\t\t\t\tattr = (attr & backgroundMask)\n\t\t\t\t\t\tattr |= foregroundIntensity\n\t\t\t\t\t\tif (n-90)&1 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundRed\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-90)&2 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundGreen\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-90)&4 != 0 {\n\t\t\t\t\t\t\tattr |= foregroundBlue\n\t\t\t\t\t\t}\n\t\t\t\t\tcase 100 <= n && n <= 107:\n\t\t\t\t\t\tattr = (attr & foregroundMask)\n\t\t\t\t\t\tattr |= backgroundIntensity\n\t\t\t\t\t\tif (n-100)&1 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundRed\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-100)&2 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundGreen\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (n-100)&4 != 0 {\n\t\t\t\t\t\t\tattr |= backgroundBlue\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tprocSetConsoleTextAttribute.Call(uintptr(handle), uintptr(attr))\n\t\t\t\t}\n\t\t\t}\n\t\tcase 'h':\n\t\t\tvar ci consoleCursorInfo\n\t\t\tcs := buf.String()\n\t\t\tif cs == \"5>\" {\n\t\t\t\tprocGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t\tci.visible = 0\n\t\t\t\tprocSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t} else if cs == \"?25\" {\n\t\t\t\tprocGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t\tci.visible = 1\n\t\t\t\tprocSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t} else if cs == \"?1049\" {\n\t\t\t\tif w.althandle == 0 {\n\t\t\t\t\th, _, _ := procCreateConsoleScreenBuffer.Call(uintptr(genericRead|genericWrite), 0, 0, uintptr(consoleTextmodeBuffer), 0, 0)\n\t\t\t\t\tw.althandle = syscall.Handle(h)\n\t\t\t\t\tif w.althandle != 0 {\n\t\t\t\t\t\thandle = w.althandle\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tcase 'l':\n\t\t\tvar ci consoleCursorInfo\n\t\t\tcs := buf.String()\n\t\t\tif cs == \"5>\" {\n\t\t\t\tprocGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t\tci.visible = 1\n\t\t\t\tprocSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t} else if cs == \"?25\" {\n\t\t\t\tprocGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t\tci.visible = 0\n\t\t\t\tprocSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci)))\n\t\t\t} else if cs == \"?1049\" {\n\t\t\t\tif w.althandle != 0 {\n\t\t\t\t\tsyscall.CloseHandle(w.althandle)\n\t\t\t\t\tw.althandle = 0\n\t\t\t\t\thandle = w.handle\n\t\t\t\t}\n\t\t\t}\n\t\tcase 's':\n\t\t\tprocGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))\n\t\t\tw.oldpos = csbi.cursorPosition\n\t\tcase 'u':\n\t\t\tprocSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos)))\n\t\t}\n\t}\n\n\treturn len(data), nil\n}\n\ntype consoleColor struct {\n\trgb       int\n\tred       bool\n\tgreen     bool\n\tblue      bool\n\tintensity bool\n}\n\nfunc (c consoleColor) foregroundAttr() (attr word) {\n\tif c.red {\n\t\tattr |= foregroundRed\n\t}\n\tif c.green {\n\t\tattr |= foregroundGreen\n\t}\n\tif c.blue {\n\t\tattr |= foregroundBlue\n\t}\n\tif c.intensity {\n\t\tattr |= foregroundIntensity\n\t}\n\treturn\n}\n\nfunc (c consoleColor) backgroundAttr() (attr word) {\n\tif c.red {\n\t\tattr |= backgroundRed\n\t}\n\tif c.green {\n\t\tattr |= backgroundGreen\n\t}\n\tif c.blue {\n\t\tattr |= backgroundBlue\n\t}\n\tif c.intensity {\n\t\tattr |= backgroundIntensity\n\t}\n\treturn\n}\n\nvar color16 = []consoleColor{\n\t{0x000000, false, false, false, false},\n\t{0x000080, false, false, true, false},\n\t{0x008000, false, true, false, false},\n\t{0x008080, false, true, true, false},\n\t{0x800000, true, false, false, false},\n\t{0x800080, true, false, true, false},\n\t{0x808000, true, true, false, false},\n\t{0xc0c0c0, true, true, true, false},\n\t{0x808080, false, false, false, true},\n\t{0x0000ff, false, false, true, true},\n\t{0x00ff00, false, true, false, true},\n\t{0x00ffff, false, true, true, true},\n\t{0xff0000, true, false, false, true},\n\t{0xff00ff, true, false, true, true},\n\t{0xffff00, true, true, false, true},\n\t{0xffffff, true, true, true, true},\n}\n\ntype hsv struct {\n\th, s, v float32\n}\n\nfunc (a hsv) dist(b hsv) float32 {\n\tdh := a.h - b.h\n\tswitch {\n\tcase dh > 0.5:\n\t\tdh = 1 - dh\n\tcase dh < -0.5:\n\t\tdh = -1 - dh\n\t}\n\tds := a.s - b.s\n\tdv := a.v - b.v\n\treturn float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv)))\n}\n\nfunc toHSV(rgb int) hsv {\n\tr, g, b := float32((rgb&0xFF0000)>>16)/256.0,\n\t\tfloat32((rgb&0x00FF00)>>8)/256.0,\n\t\tfloat32(rgb&0x0000FF)/256.0\n\tmin, max := minmax3f(r, g, b)\n\th := max - min\n\tif h > 0 {\n\t\tif max == r {\n\t\t\th = (g - b) / h\n\t\t\tif h < 0 {\n\t\t\t\th += 6\n\t\t\t}\n\t\t} else if max == g {\n\t\t\th = 2 + (b-r)/h\n\t\t} else {\n\t\t\th = 4 + (r-g)/h\n\t\t}\n\t}\n\th /= 6.0\n\ts := max - min\n\tif max != 0 {\n\t\ts /= max\n\t}\n\tv := max\n\treturn hsv{h: h, s: s, v: v}\n}\n\ntype hsvTable []hsv\n\nfunc toHSVTable(rgbTable []consoleColor) hsvTable {\n\tt := make(hsvTable, len(rgbTable))\n\tfor i, c := range rgbTable {\n\t\tt[i] = toHSV(c.rgb)\n\t}\n\treturn t\n}\n\nfunc (t hsvTable) find(rgb int) consoleColor {\n\thsv := toHSV(rgb)\n\tn := 7\n\tl := float32(5.0)\n\tfor i, p := range t {\n\t\td := hsv.dist(p)\n\t\tif d < l {\n\t\t\tl, n = d, i\n\t\t}\n\t}\n\treturn color16[n]\n}\n\nfunc minmax3f(a, b, c float32) (min, max float32) {\n\tif a < b {\n\t\tif b < c {\n\t\t\treturn a, c\n\t\t} else if a < c {\n\t\t\treturn a, b\n\t\t} else {\n\t\t\treturn c, b\n\t\t}\n\t} else {\n\t\tif a < c {\n\t\t\treturn b, c\n\t\t} else if b < c {\n\t\t\treturn b, a\n\t\t} else {\n\t\t\treturn c, a\n\t\t}\n\t}\n}\n\nvar n256foreAttr []word\nvar n256backAttr []word\n\nfunc n256setup() {\n\tn256foreAttr = make([]word, 256)\n\tn256backAttr = make([]word, 256)\n\tt := toHSVTable(color16)\n\tfor i, rgb := range color256 {\n\t\tc := t.find(rgb)\n\t\tn256foreAttr[i] = c.foregroundAttr()\n\t\tn256backAttr[i] = c.backgroundAttr()\n\t}\n}\n\n// EnableColorsStdout enable colors if possible.\nfunc EnableColorsStdout(enabled *bool) func() {\n\tvar mode uint32\n\th := os.Stdout.Fd()\n\tif r, _, _ := procGetConsoleMode.Call(h, uintptr(unsafe.Pointer(&mode))); r != 0 {\n\t\tif r, _, _ = procSetConsoleMode.Call(h, uintptr(mode|cENABLE_VIRTUAL_TERMINAL_PROCESSING)); r != 0 {\n\t\t\tif enabled != nil {\n\t\t\t\t*enabled = true\n\t\t\t}\n\t\t\treturn func() {\n\t\t\t\tprocSetConsoleMode.Call(h, uintptr(mode))\n\t\t\t}\n\t\t}\n\t}\n\tif enabled != nil {\n\t\t*enabled = true\n\t}\n\treturn func() {}\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/go.test.sh",
    "content": "#!/usr/bin/env bash\n\nset -e\necho \"\" > coverage.txt\n\nfor d in $(go list ./... | grep -v vendor); do\n    go test -race -coverprofile=profile.out -covermode=atomic \"$d\"\n    if [ -f profile.out ]; then\n        cat profile.out >> coverage.txt\n        rm profile.out\n    fi\ndone\n"
  },
  {
    "path": "vendor/github.com/mattn/go-colorable/noncolorable.go",
    "content": "package colorable\n\nimport (\n\t\"bytes\"\n\t\"io\"\n)\n\n// NonColorable holds writer but removes escape sequence.\ntype NonColorable struct {\n\tout io.Writer\n}\n\n// NewNonColorable returns new instance of Writer which removes escape sequence from Writer.\nfunc NewNonColorable(w io.Writer) io.Writer {\n\treturn &NonColorable{out: w}\n}\n\n// Write writes data on console\nfunc (w *NonColorable) Write(data []byte) (n int, err error) {\n\ter := bytes.NewReader(data)\n\tvar plaintext bytes.Buffer\nloop:\n\tfor {\n\t\tc1, err := er.ReadByte()\n\t\tif err != nil {\n\t\t\tplaintext.WriteTo(w.out)\n\t\t\tbreak loop\n\t\t}\n\t\tif c1 != 0x1b {\n\t\t\tplaintext.WriteByte(c1)\n\t\t\tcontinue\n\t\t}\n\t\t_, err = plaintext.WriteTo(w.out)\n\t\tif err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tc2, err := er.ReadByte()\n\t\tif err != nil {\n\t\t\tbreak loop\n\t\t}\n\t\tif c2 != 0x5b {\n\t\t\tcontinue\n\t\t}\n\n\t\tfor {\n\t\t\tc, err := er.ReadByte()\n\t\t\tif err != nil {\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tif ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn len(data), nil\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/LICENSE",
    "content": "Copyright (c) Yasuhiro MATSUMOTO <mattn.jp@gmail.com>\n\nMIT License (Expat)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/README.md",
    "content": "# go-isatty\n\n[![Godoc Reference](https://godoc.org/github.com/mattn/go-isatty?status.svg)](http://godoc.org/github.com/mattn/go-isatty)\n[![Codecov](https://codecov.io/gh/mattn/go-isatty/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-isatty)\n[![Coverage Status](https://coveralls.io/repos/github/mattn/go-isatty/badge.svg?branch=master)](https://coveralls.io/github/mattn/go-isatty?branch=master)\n[![Go Report Card](https://goreportcard.com/badge/mattn/go-isatty)](https://goreportcard.com/report/mattn/go-isatty)\n\nisatty for golang\n\n## Usage\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/mattn/go-isatty\"\n\t\"os\"\n)\n\nfunc main() {\n\tif isatty.IsTerminal(os.Stdout.Fd()) {\n\t\tfmt.Println(\"Is Terminal\")\n\t} else if isatty.IsCygwinTerminal(os.Stdout.Fd()) {\n\t\tfmt.Println(\"Is Cygwin/MSYS2 Terminal\")\n\t} else {\n\t\tfmt.Println(\"Is Not Terminal\")\n\t}\n}\n```\n\n## Installation\n\n```\n$ go get github.com/mattn/go-isatty\n```\n\n## License\n\nMIT\n\n## Author\n\nYasuhiro Matsumoto (a.k.a mattn)\n\n## Thanks\n\n* k-takata: base idea for IsCygwinTerminal\n\n    https://github.com/k-takata/go-iscygpty\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/doc.go",
    "content": "// Package isatty implements interface to isatty\npackage isatty\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/go.test.sh",
    "content": "#!/usr/bin/env bash\n\nset -e\necho \"\" > coverage.txt\n\nfor d in $(go list ./... | grep -v vendor); do\n    go test -race -coverprofile=profile.out -covermode=atomic \"$d\"\n    if [ -f profile.out ]; then\n        cat profile.out >> coverage.txt\n        rm profile.out\n    fi\ndone\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_bsd.go",
    "content": "//go:build (darwin || freebsd || openbsd || netbsd || dragonfly || hurd) && !appengine && !tinygo\n// +build darwin freebsd openbsd netbsd dragonfly hurd\n// +build !appengine\n// +build !tinygo\n\npackage isatty\n\nimport \"golang.org/x/sys/unix\"\n\n// IsTerminal return true if the file descriptor is terminal.\nfunc IsTerminal(fd uintptr) bool {\n\t_, err := unix.IoctlGetTermios(int(fd), unix.TIOCGETA)\n\treturn err == nil\n}\n\n// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_others.go",
    "content": "//go:build (appengine || js || nacl || tinygo || wasm) && !windows\n// +build appengine js nacl tinygo wasm\n// +build !windows\n\npackage isatty\n\n// IsTerminal returns true if the file descriptor is terminal which\n// is always false on js and appengine classic which is a sandboxed PaaS.\nfunc IsTerminal(fd uintptr) bool {\n\treturn false\n}\n\n// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_plan9.go",
    "content": "//go:build plan9\n// +build plan9\n\npackage isatty\n\nimport (\n\t\"syscall\"\n)\n\n// IsTerminal returns true if the given file descriptor is a terminal.\nfunc IsTerminal(fd uintptr) bool {\n\tpath, err := syscall.Fd2path(int(fd))\n\tif err != nil {\n\t\treturn false\n\t}\n\treturn path == \"/dev/cons\" || path == \"/mnt/term/dev/cons\"\n}\n\n// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_solaris.go",
    "content": "//go:build solaris && !appengine\n// +build solaris,!appengine\n\npackage isatty\n\nimport (\n\t\"golang.org/x/sys/unix\"\n)\n\n// IsTerminal returns true if the given file descriptor is a terminal.\n// see: https://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libc/port/gen/isatty.c\nfunc IsTerminal(fd uintptr) bool {\n\t_, err := unix.IoctlGetTermio(int(fd), unix.TCGETA)\n\treturn err == nil\n}\n\n// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_tcgets.go",
    "content": "//go:build (linux || aix || zos) && !appengine && !tinygo\n// +build linux aix zos\n// +build !appengine\n// +build !tinygo\n\npackage isatty\n\nimport \"golang.org/x/sys/unix\"\n\n// IsTerminal return true if the file descriptor is terminal.\nfunc IsTerminal(fd uintptr) bool {\n\t_, err := unix.IoctlGetTermios(int(fd), unix.TCGETS)\n\treturn err == nil\n}\n\n// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2\n// terminal. This is also always false on this environment.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-isatty/isatty_windows.go",
    "content": "//go:build windows && !appengine\n// +build windows,!appengine\n\npackage isatty\n\nimport (\n\t\"errors\"\n\t\"strings\"\n\t\"syscall\"\n\t\"unicode/utf16\"\n\t\"unsafe\"\n)\n\nconst (\n\tobjectNameInfo uintptr = 1\n\tfileNameInfo           = 2\n\tfileTypePipe           = 3\n)\n\nvar (\n\tkernel32                         = syscall.NewLazyDLL(\"kernel32.dll\")\n\tntdll                            = syscall.NewLazyDLL(\"ntdll.dll\")\n\tprocGetConsoleMode               = kernel32.NewProc(\"GetConsoleMode\")\n\tprocGetFileInformationByHandleEx = kernel32.NewProc(\"GetFileInformationByHandleEx\")\n\tprocGetFileType                  = kernel32.NewProc(\"GetFileType\")\n\tprocNtQueryObject                = ntdll.NewProc(\"NtQueryObject\")\n)\n\nfunc init() {\n\t// Check if GetFileInformationByHandleEx is available.\n\tif procGetFileInformationByHandleEx.Find() != nil {\n\t\tprocGetFileInformationByHandleEx = nil\n\t}\n}\n\n// IsTerminal return true if the file descriptor is terminal.\nfunc IsTerminal(fd uintptr) bool {\n\tvar st uint32\n\tr, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0)\n\treturn r != 0 && e == 0\n}\n\n// Check pipe name is used for cygwin/msys2 pty.\n// Cygwin/MSYS2 PTY has a name like:\n//   \\{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master\nfunc isCygwinPipeName(name string) bool {\n\ttoken := strings.Split(name, \"-\")\n\tif len(token) < 5 {\n\t\treturn false\n\t}\n\n\tif token[0] != `\\msys` &&\n\t\ttoken[0] != `\\cygwin` &&\n\t\ttoken[0] != `\\Device\\NamedPipe\\msys` &&\n\t\ttoken[0] != `\\Device\\NamedPipe\\cygwin` {\n\t\treturn false\n\t}\n\n\tif token[1] == \"\" {\n\t\treturn false\n\t}\n\n\tif !strings.HasPrefix(token[2], \"pty\") {\n\t\treturn false\n\t}\n\n\tif token[3] != `from` && token[3] != `to` {\n\t\treturn false\n\t}\n\n\tif token[4] != \"master\" {\n\t\treturn false\n\t}\n\n\treturn true\n}\n\n// getFileNameByHandle use the undocomented ntdll NtQueryObject to get file full name from file handler\n// since GetFileInformationByHandleEx is not available under windows Vista and still some old fashion\n// guys are using Windows XP, this is a workaround for those guys, it will also work on system from\n// Windows vista to 10\n// see https://stackoverflow.com/a/18792477 for details\nfunc getFileNameByHandle(fd uintptr) (string, error) {\n\tif procNtQueryObject == nil {\n\t\treturn \"\", errors.New(\"ntdll.dll: NtQueryObject not supported\")\n\t}\n\n\tvar buf [4 + syscall.MAX_PATH]uint16\n\tvar result int\n\tr, _, e := syscall.Syscall6(procNtQueryObject.Addr(), 5,\n\t\tfd, objectNameInfo, uintptr(unsafe.Pointer(&buf)), uintptr(2*len(buf)), uintptr(unsafe.Pointer(&result)), 0)\n\tif r != 0 {\n\t\treturn \"\", e\n\t}\n\treturn string(utf16.Decode(buf[4 : 4+buf[0]/2])), nil\n}\n\n// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2\n// terminal.\nfunc IsCygwinTerminal(fd uintptr) bool {\n\tif procGetFileInformationByHandleEx == nil {\n\t\tname, err := getFileNameByHandle(fd)\n\t\tif err != nil {\n\t\t\treturn false\n\t\t}\n\t\treturn isCygwinPipeName(name)\n\t}\n\n\t// Cygwin/msys's pty is a pipe.\n\tft, _, e := syscall.Syscall(procGetFileType.Addr(), 1, fd, 0, 0)\n\tif ft != fileTypePipe || e != 0 {\n\t\treturn false\n\t}\n\n\tvar buf [2 + syscall.MAX_PATH]uint16\n\tr, _, e := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(),\n\t\t4, fd, fileNameInfo, uintptr(unsafe.Pointer(&buf)),\n\t\tuintptr(len(buf)*2), 0, 0)\n\tif r == 0 || e != 0 {\n\t\treturn false\n\t}\n\n\tl := *(*uint32)(unsafe.Pointer(&buf))\n\treturn isCygwinPipeName(string(utf16.Decode(buf[2 : 2+l/2])))\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/.travis.yml",
    "content": "language: go\nsudo: false\ngo:\n  - 1.13.x\n  - tip\n\nbefore_install:\n  - go get -t -v ./...\n\nscript:\n  - go generate\n  - git diff --cached --exit-code\n  - ./go.test.sh\n\nafter_success:\n  - bash <(curl -s https://codecov.io/bash)\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 Yasuhiro Matsumoto\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/README.md",
    "content": "go-runewidth\n============\n\n[![Build Status](https://travis-ci.org/mattn/go-runewidth.png?branch=master)](https://travis-ci.org/mattn/go-runewidth)\n[![Codecov](https://codecov.io/gh/mattn/go-runewidth/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-runewidth)\n[![GoDoc](https://godoc.org/github.com/mattn/go-runewidth?status.svg)](http://godoc.org/github.com/mattn/go-runewidth)\n[![Go Report Card](https://goreportcard.com/badge/github.com/mattn/go-runewidth)](https://goreportcard.com/report/github.com/mattn/go-runewidth)\n\nProvides functions to get fixed width of the character or string.\n\nUsage\n-----\n\n```go\nrunewidth.StringWidth(\"つのだ☆HIRO\") == 12\n```\n\n\nAuthor\n------\n\nYasuhiro Matsumoto\n\nLicense\n-------\n\nunder the MIT License: http://mattn.mit-license.org/2013\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/go.test.sh",
    "content": "#!/usr/bin/env bash\n\nset -e\necho \"\" > coverage.txt\n\nfor d in $(go list ./... | grep -v vendor); do\n    go test -race -coverprofile=profile.out -covermode=atomic \"$d\"\n    if [ -f profile.out ]; then\n        cat profile.out >> coverage.txt\n        rm profile.out\n    fi\ndone\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/runewidth.go",
    "content": "package runewidth\n\nimport (\n\t\"os\"\n\n\t\"github.com/rivo/uniseg\"\n)\n\n//go:generate go run script/generate.go\n\nvar (\n\t// EastAsianWidth will be set true if the current locale is CJK\n\tEastAsianWidth bool\n\n\t// StrictEmojiNeutral should be set false if handle broken fonts\n\tStrictEmojiNeutral bool = true\n\n\t// DefaultCondition is a condition in current locale\n\tDefaultCondition = &Condition{\n\t\tEastAsianWidth:     false,\n\t\tStrictEmojiNeutral: true,\n\t}\n)\n\nfunc init() {\n\thandleEnv()\n}\n\nfunc handleEnv() {\n\tenv := os.Getenv(\"RUNEWIDTH_EASTASIAN\")\n\tif env == \"\" {\n\t\tEastAsianWidth = IsEastAsian()\n\t} else {\n\t\tEastAsianWidth = env == \"1\"\n\t}\n\t// update DefaultCondition\n\tDefaultCondition.EastAsianWidth = EastAsianWidth\n}\n\ntype interval struct {\n\tfirst rune\n\tlast  rune\n}\n\ntype table []interval\n\nfunc inTables(r rune, ts ...table) bool {\n\tfor _, t := range ts {\n\t\tif inTable(r, t) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc inTable(r rune, t table) bool {\n\tif r < t[0].first {\n\t\treturn false\n\t}\n\n\tbot := 0\n\ttop := len(t) - 1\n\tfor top >= bot {\n\t\tmid := (bot + top) >> 1\n\n\t\tswitch {\n\t\tcase t[mid].last < r:\n\t\t\tbot = mid + 1\n\t\tcase t[mid].first > r:\n\t\t\ttop = mid - 1\n\t\tdefault:\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\nvar private = table{\n\t{0x00E000, 0x00F8FF}, {0x0F0000, 0x0FFFFD}, {0x100000, 0x10FFFD},\n}\n\nvar nonprint = table{\n\t{0x0000, 0x001F}, {0x007F, 0x009F}, {0x00AD, 0x00AD},\n\t{0x070F, 0x070F}, {0x180B, 0x180E}, {0x200B, 0x200F},\n\t{0x2028, 0x202E}, {0x206A, 0x206F}, {0xD800, 0xDFFF},\n\t{0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFE, 0xFFFF},\n}\n\n// Condition have flag EastAsianWidth whether the current locale is CJK or not.\ntype Condition struct {\n\tEastAsianWidth     bool\n\tStrictEmojiNeutral bool\n}\n\n// NewCondition return new instance of Condition which is current locale.\nfunc NewCondition() *Condition {\n\treturn &Condition{\n\t\tEastAsianWidth:     EastAsianWidth,\n\t\tStrictEmojiNeutral: StrictEmojiNeutral,\n\t}\n}\n\n// RuneWidth returns the number of cells in r.\n// See http://www.unicode.org/reports/tr11/\nfunc (c *Condition) RuneWidth(r rune) int {\n\t// optimized version, verified by TestRuneWidthChecksums()\n\tif !c.EastAsianWidth {\n\t\tswitch {\n\t\tcase r < 0x20 || r > 0x10FFFF:\n\t\t\treturn 0\n\t\tcase (r >= 0x7F && r <= 0x9F) || r == 0xAD: // nonprint\n\t\t\treturn 0\n\t\tcase r < 0x300:\n\t\t\treturn 1\n\t\tcase inTable(r, narrow):\n\t\t\treturn 1\n\t\tcase inTables(r, nonprint, combining):\n\t\t\treturn 0\n\t\tcase inTable(r, doublewidth):\n\t\t\treturn 2\n\t\tdefault:\n\t\t\treturn 1\n\t\t}\n\t} else {\n\t\tswitch {\n\t\tcase r < 0 || r > 0x10FFFF || inTables(r, nonprint, combining):\n\t\t\treturn 0\n\t\tcase inTable(r, narrow):\n\t\t\treturn 1\n\t\tcase inTables(r, ambiguous, doublewidth):\n\t\t\treturn 2\n\t\tcase !c.StrictEmojiNeutral && inTables(r, ambiguous, emoji, narrow):\n\t\t\treturn 2\n\t\tdefault:\n\t\t\treturn 1\n\t\t}\n\t}\n}\n\n// StringWidth return width as you can see\nfunc (c *Condition) StringWidth(s string) (width int) {\n\tg := uniseg.NewGraphemes(s)\n\tfor g.Next() {\n\t\tvar chWidth int\n\t\tfor _, r := range g.Runes() {\n\t\t\tchWidth = c.RuneWidth(r)\n\t\t\tif chWidth > 0 {\n\t\t\t\tbreak // Our best guess at this point is to use the width of the first non-zero-width rune.\n\t\t\t}\n\t\t}\n\t\twidth += chWidth\n\t}\n\treturn\n}\n\n// Truncate return string truncated with w cells\nfunc (c *Condition) Truncate(s string, w int, tail string) string {\n\tif c.StringWidth(s) <= w {\n\t\treturn s\n\t}\n\tw -= c.StringWidth(tail)\n\tvar width int\n\tpos := len(s)\n\tg := uniseg.NewGraphemes(s)\n\tfor g.Next() {\n\t\tvar chWidth int\n\t\tfor _, r := range g.Runes() {\n\t\t\tchWidth = c.RuneWidth(r)\n\t\t\tif chWidth > 0 {\n\t\t\t\tbreak // See StringWidth() for details.\n\t\t\t}\n\t\t}\n\t\tif width+chWidth > w {\n\t\t\tpos, _ = g.Positions()\n\t\t\tbreak\n\t\t}\n\t\twidth += chWidth\n\t}\n\treturn s[:pos] + tail\n}\n\n// Wrap return string wrapped with w cells\nfunc (c *Condition) Wrap(s string, w int) string {\n\twidth := 0\n\tout := \"\"\n\tfor _, r := range []rune(s) {\n\t\tcw := c.RuneWidth(r)\n\t\tif r == '\\n' {\n\t\t\tout += string(r)\n\t\t\twidth = 0\n\t\t\tcontinue\n\t\t} else if width+cw > w {\n\t\t\tout += \"\\n\"\n\t\t\twidth = 0\n\t\t\tout += string(r)\n\t\t\twidth += cw\n\t\t\tcontinue\n\t\t}\n\t\tout += string(r)\n\t\twidth += cw\n\t}\n\treturn out\n}\n\n// FillLeft return string filled in left by spaces in w cells\nfunc (c *Condition) FillLeft(s string, w int) string {\n\twidth := c.StringWidth(s)\n\tcount := w - width\n\tif count > 0 {\n\t\tb := make([]byte, count)\n\t\tfor i := range b {\n\t\t\tb[i] = ' '\n\t\t}\n\t\treturn string(b) + s\n\t}\n\treturn s\n}\n\n// FillRight return string filled in left by spaces in w cells\nfunc (c *Condition) FillRight(s string, w int) string {\n\twidth := c.StringWidth(s)\n\tcount := w - width\n\tif count > 0 {\n\t\tb := make([]byte, count)\n\t\tfor i := range b {\n\t\t\tb[i] = ' '\n\t\t}\n\t\treturn s + string(b)\n\t}\n\treturn s\n}\n\n// RuneWidth returns the number of cells in r.\n// See http://www.unicode.org/reports/tr11/\nfunc RuneWidth(r rune) int {\n\treturn DefaultCondition.RuneWidth(r)\n}\n\n// IsAmbiguousWidth returns whether is ambiguous width or not.\nfunc IsAmbiguousWidth(r rune) bool {\n\treturn inTables(r, private, ambiguous)\n}\n\n// IsNeutralWidth returns whether is neutral width or not.\nfunc IsNeutralWidth(r rune) bool {\n\treturn inTable(r, neutral)\n}\n\n// StringWidth return width as you can see\nfunc StringWidth(s string) (width int) {\n\treturn DefaultCondition.StringWidth(s)\n}\n\n// Truncate return string truncated with w cells\nfunc Truncate(s string, w int, tail string) string {\n\treturn DefaultCondition.Truncate(s, w, tail)\n}\n\n// Wrap return string wrapped with w cells\nfunc Wrap(s string, w int) string {\n\treturn DefaultCondition.Wrap(s, w)\n}\n\n// FillLeft return string filled in left by spaces in w cells\nfunc FillLeft(s string, w int) string {\n\treturn DefaultCondition.FillLeft(s, w)\n}\n\n// FillRight return string filled in left by spaces in w cells\nfunc FillRight(s string, w int) string {\n\treturn DefaultCondition.FillRight(s, w)\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/runewidth_appengine.go",
    "content": "// +build appengine\n\npackage runewidth\n\n// IsEastAsian return true if the current locale is CJK\nfunc IsEastAsian() bool {\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/runewidth_js.go",
    "content": "// +build js\n// +build !appengine\n\npackage runewidth\n\nfunc IsEastAsian() bool {\n\t// TODO: Implement this for the web. Detect east asian in a compatible way, and return true.\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/runewidth_posix.go",
    "content": "// +build !windows\n// +build !js\n// +build !appengine\n\npackage runewidth\n\nimport (\n\t\"os\"\n\t\"regexp\"\n\t\"strings\"\n)\n\nvar reLoc = regexp.MustCompile(`^[a-z][a-z][a-z]?(?:_[A-Z][A-Z])?\\.(.+)`)\n\nvar mblenTable = map[string]int{\n\t\"utf-8\":   6,\n\t\"utf8\":    6,\n\t\"jis\":     8,\n\t\"eucjp\":   3,\n\t\"euckr\":   2,\n\t\"euccn\":   2,\n\t\"sjis\":    2,\n\t\"cp932\":   2,\n\t\"cp51932\": 2,\n\t\"cp936\":   2,\n\t\"cp949\":   2,\n\t\"cp950\":   2,\n\t\"big5\":    2,\n\t\"gbk\":     2,\n\t\"gb2312\":  2,\n}\n\nfunc isEastAsian(locale string) bool {\n\tcharset := strings.ToLower(locale)\n\tr := reLoc.FindStringSubmatch(locale)\n\tif len(r) == 2 {\n\t\tcharset = strings.ToLower(r[1])\n\t}\n\n\tif strings.HasSuffix(charset, \"@cjk_narrow\") {\n\t\treturn false\n\t}\n\n\tfor pos, b := range []byte(charset) {\n\t\tif b == '@' {\n\t\t\tcharset = charset[:pos]\n\t\t\tbreak\n\t\t}\n\t}\n\tmax := 1\n\tif m, ok := mblenTable[charset]; ok {\n\t\tmax = m\n\t}\n\tif max > 1 && (charset[0] != 'u' ||\n\t\tstrings.HasPrefix(locale, \"ja\") ||\n\t\tstrings.HasPrefix(locale, \"ko\") ||\n\t\tstrings.HasPrefix(locale, \"zh\")) {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// IsEastAsian return true if the current locale is CJK\nfunc IsEastAsian() bool {\n\tlocale := os.Getenv(\"LC_ALL\")\n\tif locale == \"\" {\n\t\tlocale = os.Getenv(\"LC_CTYPE\")\n\t}\n\tif locale == \"\" {\n\t\tlocale = os.Getenv(\"LANG\")\n\t}\n\n\t// ignore C locale\n\tif locale == \"POSIX\" || locale == \"C\" {\n\t\treturn false\n\t}\n\tif len(locale) > 1 && locale[0] == 'C' && (locale[1] == '.' || locale[1] == '-') {\n\t\treturn false\n\t}\n\n\treturn isEastAsian(locale)\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/runewidth_table.go",
    "content": "// Code generated by script/generate.go. DO NOT EDIT.\n\npackage runewidth\n\nvar combining = table{\n\t{0x0300, 0x036F}, {0x0483, 0x0489}, {0x07EB, 0x07F3},\n\t{0x0C00, 0x0C00}, {0x0C04, 0x0C04}, {0x0D00, 0x0D01},\n\t{0x135D, 0x135F}, {0x1A7F, 0x1A7F}, {0x1AB0, 0x1AC0},\n\t{0x1B6B, 0x1B73}, {0x1DC0, 0x1DF9}, {0x1DFB, 0x1DFF},\n\t{0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2DE0, 0x2DFF},\n\t{0x3099, 0x309A}, {0xA66F, 0xA672}, {0xA674, 0xA67D},\n\t{0xA69E, 0xA69F}, {0xA6F0, 0xA6F1}, {0xA8E0, 0xA8F1},\n\t{0xFE20, 0xFE2F}, {0x101FD, 0x101FD}, {0x10376, 0x1037A},\n\t{0x10EAB, 0x10EAC}, {0x10F46, 0x10F50}, {0x11300, 0x11301},\n\t{0x1133B, 0x1133C}, {0x11366, 0x1136C}, {0x11370, 0x11374},\n\t{0x16AF0, 0x16AF4}, {0x1D165, 0x1D169}, {0x1D16D, 0x1D172},\n\t{0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD},\n\t{0x1D242, 0x1D244}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018},\n\t{0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, {0x1E026, 0x1E02A},\n\t{0x1E8D0, 0x1E8D6},\n}\n\nvar doublewidth = table{\n\t{0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A},\n\t{0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3},\n\t{0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2648, 0x2653},\n\t{0x267F, 0x267F}, {0x2693, 0x2693}, {0x26A1, 0x26A1},\n\t{0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5},\n\t{0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA},\n\t{0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA},\n\t{0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B},\n\t{0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E},\n\t{0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797},\n\t{0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C},\n\t{0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99},\n\t{0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB},\n\t{0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF},\n\t{0x3105, 0x312F}, {0x3131, 0x318E}, {0x3190, 0x31E3},\n\t{0x31F0, 0x321E}, {0x3220, 0x3247}, {0x3250, 0x4DBF},\n\t{0x4E00, 0xA48C}, {0xA490, 0xA4C6}, {0xA960, 0xA97C},\n\t{0xAC00, 0xD7A3}, {0xF900, 0xFAFF}, {0xFE10, 0xFE19},\n\t{0xFE30, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B},\n\t{0xFF01, 0xFF60}, {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE4},\n\t{0x16FF0, 0x16FF1}, {0x17000, 0x187F7}, {0x18800, 0x18CD5},\n\t{0x18D00, 0x18D08}, {0x1B000, 0x1B11E}, {0x1B150, 0x1B152},\n\t{0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1F004, 0x1F004},\n\t{0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A},\n\t{0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248},\n\t{0x1F250, 0x1F251}, {0x1F260, 0x1F265}, {0x1F300, 0x1F320},\n\t{0x1F32D, 0x1F335}, {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393},\n\t{0x1F3A0, 0x1F3CA}, {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0},\n\t{0x1F3F4, 0x1F3F4}, {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440},\n\t{0x1F442, 0x1F4FC}, {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E},\n\t{0x1F550, 0x1F567}, {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596},\n\t{0x1F5A4, 0x1F5A4}, {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5},\n\t{0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D7},\n\t{0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6FC}, {0x1F7E0, 0x1F7EB},\n\t{0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1F978},\n\t{0x1F97A, 0x1F9CB}, {0x1F9CD, 0x1F9FF}, {0x1FA70, 0x1FA74},\n\t{0x1FA78, 0x1FA7A}, {0x1FA80, 0x1FA86}, {0x1FA90, 0x1FAA8},\n\t{0x1FAB0, 0x1FAB6}, {0x1FAC0, 0x1FAC2}, {0x1FAD0, 0x1FAD6},\n\t{0x20000, 0x2FFFD}, {0x30000, 0x3FFFD},\n}\n\nvar ambiguous = table{\n\t{0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8},\n\t{0x00AA, 0x00AA}, {0x00AD, 0x00AE}, {0x00B0, 0x00B4},\n\t{0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6},\n\t{0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1},\n\t{0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED},\n\t{0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA},\n\t{0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x0101, 0x0101},\n\t{0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B},\n\t{0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133},\n\t{0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144},\n\t{0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153},\n\t{0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE},\n\t{0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4},\n\t{0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA},\n\t{0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261},\n\t{0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB},\n\t{0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB},\n\t{0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0300, 0x036F},\n\t{0x0391, 0x03A1}, {0x03A3, 0x03A9}, {0x03B1, 0x03C1},\n\t{0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F},\n\t{0x0451, 0x0451}, {0x2010, 0x2010}, {0x2013, 0x2016},\n\t{0x2018, 0x2019}, {0x201C, 0x201D}, {0x2020, 0x2022},\n\t{0x2024, 0x2027}, {0x2030, 0x2030}, {0x2032, 0x2033},\n\t{0x2035, 0x2035}, {0x203B, 0x203B}, {0x203E, 0x203E},\n\t{0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084},\n\t{0x20AC, 0x20AC}, {0x2103, 0x2103}, {0x2105, 0x2105},\n\t{0x2109, 0x2109}, {0x2113, 0x2113}, {0x2116, 0x2116},\n\t{0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B},\n\t{0x2153, 0x2154}, {0x215B, 0x215E}, {0x2160, 0x216B},\n\t{0x2170, 0x2179}, {0x2189, 0x2189}, {0x2190, 0x2199},\n\t{0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x21D4, 0x21D4},\n\t{0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203},\n\t{0x2207, 0x2208}, {0x220B, 0x220B}, {0x220F, 0x220F},\n\t{0x2211, 0x2211}, {0x2215, 0x2215}, {0x221A, 0x221A},\n\t{0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225},\n\t{0x2227, 0x222C}, {0x222E, 0x222E}, {0x2234, 0x2237},\n\t{0x223C, 0x223D}, {0x2248, 0x2248}, {0x224C, 0x224C},\n\t{0x2252, 0x2252}, {0x2260, 0x2261}, {0x2264, 0x2267},\n\t{0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283},\n\t{0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299},\n\t{0x22A5, 0x22A5}, {0x22BF, 0x22BF}, {0x2312, 0x2312},\n\t{0x2460, 0x24E9}, {0x24EB, 0x254B}, {0x2550, 0x2573},\n\t{0x2580, 0x258F}, {0x2592, 0x2595}, {0x25A0, 0x25A1},\n\t{0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7},\n\t{0x25BC, 0x25BD}, {0x25C0, 0x25C1}, {0x25C6, 0x25C8},\n\t{0x25CB, 0x25CB}, {0x25CE, 0x25D1}, {0x25E2, 0x25E5},\n\t{0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609},\n\t{0x260E, 0x260F}, {0x261C, 0x261C}, {0x261E, 0x261E},\n\t{0x2640, 0x2640}, {0x2642, 0x2642}, {0x2660, 0x2661},\n\t{0x2663, 0x2665}, {0x2667, 0x266A}, {0x266C, 0x266D},\n\t{0x266F, 0x266F}, {0x269E, 0x269F}, {0x26BF, 0x26BF},\n\t{0x26C6, 0x26CD}, {0x26CF, 0x26D3}, {0x26D5, 0x26E1},\n\t{0x26E3, 0x26E3}, {0x26E8, 0x26E9}, {0x26EB, 0x26F1},\n\t{0x26F4, 0x26F4}, {0x26F6, 0x26F9}, {0x26FB, 0x26FC},\n\t{0x26FE, 0x26FF}, {0x273D, 0x273D}, {0x2776, 0x277F},\n\t{0x2B56, 0x2B59}, {0x3248, 0x324F}, {0xE000, 0xF8FF},\n\t{0xFE00, 0xFE0F}, {0xFFFD, 0xFFFD}, {0x1F100, 0x1F10A},\n\t{0x1F110, 0x1F12D}, {0x1F130, 0x1F169}, {0x1F170, 0x1F18D},\n\t{0x1F18F, 0x1F190}, {0x1F19B, 0x1F1AC}, {0xE0100, 0xE01EF},\n\t{0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD},\n}\nvar narrow = table{\n\t{0x0020, 0x007E}, {0x00A2, 0x00A3}, {0x00A5, 0x00A6},\n\t{0x00AC, 0x00AC}, {0x00AF, 0x00AF}, {0x27E6, 0x27ED},\n\t{0x2985, 0x2986},\n}\n\nvar neutral = table{\n\t{0x0000, 0x001F}, {0x007F, 0x00A0}, {0x00A9, 0x00A9},\n\t{0x00AB, 0x00AB}, {0x00B5, 0x00B5}, {0x00BB, 0x00BB},\n\t{0x00C0, 0x00C5}, {0x00C7, 0x00CF}, {0x00D1, 0x00D6},\n\t{0x00D9, 0x00DD}, {0x00E2, 0x00E5}, {0x00E7, 0x00E7},\n\t{0x00EB, 0x00EB}, {0x00EE, 0x00EF}, {0x00F1, 0x00F1},\n\t{0x00F4, 0x00F6}, {0x00FB, 0x00FB}, {0x00FD, 0x00FD},\n\t{0x00FF, 0x0100}, {0x0102, 0x0110}, {0x0112, 0x0112},\n\t{0x0114, 0x011A}, {0x011C, 0x0125}, {0x0128, 0x012A},\n\t{0x012C, 0x0130}, {0x0134, 0x0137}, {0x0139, 0x013E},\n\t{0x0143, 0x0143}, {0x0145, 0x0147}, {0x014C, 0x014C},\n\t{0x014E, 0x0151}, {0x0154, 0x0165}, {0x0168, 0x016A},\n\t{0x016C, 0x01CD}, {0x01CF, 0x01CF}, {0x01D1, 0x01D1},\n\t{0x01D3, 0x01D3}, {0x01D5, 0x01D5}, {0x01D7, 0x01D7},\n\t{0x01D9, 0x01D9}, {0x01DB, 0x01DB}, {0x01DD, 0x0250},\n\t{0x0252, 0x0260}, {0x0262, 0x02C3}, {0x02C5, 0x02C6},\n\t{0x02C8, 0x02C8}, {0x02CC, 0x02CC}, {0x02CE, 0x02CF},\n\t{0x02D1, 0x02D7}, {0x02DC, 0x02DC}, {0x02DE, 0x02DE},\n\t{0x02E0, 0x02FF}, {0x0370, 0x0377}, {0x037A, 0x037F},\n\t{0x0384, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x0390},\n\t{0x03AA, 0x03B0}, {0x03C2, 0x03C2}, {0x03CA, 0x0400},\n\t{0x0402, 0x040F}, {0x0450, 0x0450}, {0x0452, 0x052F},\n\t{0x0531, 0x0556}, {0x0559, 0x058A}, {0x058D, 0x058F},\n\t{0x0591, 0x05C7}, {0x05D0, 0x05EA}, {0x05EF, 0x05F4},\n\t{0x0600, 0x061C}, {0x061E, 0x070D}, {0x070F, 0x074A},\n\t{0x074D, 0x07B1}, {0x07C0, 0x07FA}, {0x07FD, 0x082D},\n\t{0x0830, 0x083E}, {0x0840, 0x085B}, {0x085E, 0x085E},\n\t{0x0860, 0x086A}, {0x08A0, 0x08B4}, {0x08B6, 0x08C7},\n\t{0x08D3, 0x0983}, {0x0985, 0x098C}, {0x098F, 0x0990},\n\t{0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2},\n\t{0x09B6, 0x09B9}, {0x09BC, 0x09C4}, {0x09C7, 0x09C8},\n\t{0x09CB, 0x09CE}, {0x09D7, 0x09D7}, {0x09DC, 0x09DD},\n\t{0x09DF, 0x09E3}, {0x09E6, 0x09FE}, {0x0A01, 0x0A03},\n\t{0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28},\n\t{0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36},\n\t{0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42},\n\t{0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51},\n\t{0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A76},\n\t{0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91},\n\t{0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3},\n\t{0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, {0x0AC7, 0x0AC9},\n\t{0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE3},\n\t{0x0AE6, 0x0AF1}, {0x0AF9, 0x0AFF}, {0x0B01, 0x0B03},\n\t{0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, {0x0B13, 0x0B28},\n\t{0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, {0x0B35, 0x0B39},\n\t{0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4D},\n\t{0x0B55, 0x0B57}, {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B63},\n\t{0x0B66, 0x0B77}, {0x0B82, 0x0B83}, {0x0B85, 0x0B8A},\n\t{0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, {0x0B99, 0x0B9A},\n\t{0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4},\n\t{0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2},\n\t{0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0},\n\t{0x0BD7, 0x0BD7}, {0x0BE6, 0x0BFA}, {0x0C00, 0x0C0C},\n\t{0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39},\n\t{0x0C3D, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D},\n\t{0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C60, 0x0C63},\n\t{0x0C66, 0x0C6F}, {0x0C77, 0x0C8C}, {0x0C8E, 0x0C90},\n\t{0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9},\n\t{0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, {0x0CCA, 0x0CCD},\n\t{0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE3},\n\t{0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2}, {0x0D00, 0x0D0C},\n\t{0x0D0E, 0x0D10}, {0x0D12, 0x0D44}, {0x0D46, 0x0D48},\n\t{0x0D4A, 0x0D4F}, {0x0D54, 0x0D63}, {0x0D66, 0x0D7F},\n\t{0x0D81, 0x0D83}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1},\n\t{0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6},\n\t{0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4}, {0x0DD6, 0x0DD6},\n\t{0x0DD8, 0x0DDF}, {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF4},\n\t{0x0E01, 0x0E3A}, {0x0E3F, 0x0E5B}, {0x0E81, 0x0E82},\n\t{0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, {0x0E8C, 0x0EA3},\n\t{0x0EA5, 0x0EA5}, {0x0EA7, 0x0EBD}, {0x0EC0, 0x0EC4},\n\t{0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECD}, {0x0ED0, 0x0ED9},\n\t{0x0EDC, 0x0EDF}, {0x0F00, 0x0F47}, {0x0F49, 0x0F6C},\n\t{0x0F71, 0x0F97}, {0x0F99, 0x0FBC}, {0x0FBE, 0x0FCC},\n\t{0x0FCE, 0x0FDA}, {0x1000, 0x10C5}, {0x10C7, 0x10C7},\n\t{0x10CD, 0x10CD}, {0x10D0, 0x10FF}, {0x1160, 0x1248},\n\t{0x124A, 0x124D}, {0x1250, 0x1256}, {0x1258, 0x1258},\n\t{0x125A, 0x125D}, {0x1260, 0x1288}, {0x128A, 0x128D},\n\t{0x1290, 0x12B0}, {0x12B2, 0x12B5}, {0x12B8, 0x12BE},\n\t{0x12C0, 0x12C0}, {0x12C2, 0x12C5}, {0x12C8, 0x12D6},\n\t{0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A},\n\t{0x135D, 0x137C}, {0x1380, 0x1399}, {0x13A0, 0x13F5},\n\t{0x13F8, 0x13FD}, {0x1400, 0x169C}, {0x16A0, 0x16F8},\n\t{0x1700, 0x170C}, {0x170E, 0x1714}, {0x1720, 0x1736},\n\t{0x1740, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770},\n\t{0x1772, 0x1773}, {0x1780, 0x17DD}, {0x17E0, 0x17E9},\n\t{0x17F0, 0x17F9}, {0x1800, 0x180E}, {0x1810, 0x1819},\n\t{0x1820, 0x1878}, {0x1880, 0x18AA}, {0x18B0, 0x18F5},\n\t{0x1900, 0x191E}, {0x1920, 0x192B}, {0x1930, 0x193B},\n\t{0x1940, 0x1940}, {0x1944, 0x196D}, {0x1970, 0x1974},\n\t{0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA},\n\t{0x19DE, 0x1A1B}, {0x1A1E, 0x1A5E}, {0x1A60, 0x1A7C},\n\t{0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, {0x1AA0, 0x1AAD},\n\t{0x1AB0, 0x1AC0}, {0x1B00, 0x1B4B}, {0x1B50, 0x1B7C},\n\t{0x1B80, 0x1BF3}, {0x1BFC, 0x1C37}, {0x1C3B, 0x1C49},\n\t{0x1C4D, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CC7},\n\t{0x1CD0, 0x1CFA}, {0x1D00, 0x1DF9}, {0x1DFB, 0x1F15},\n\t{0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D},\n\t{0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B},\n\t{0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4},\n\t{0x1FB6, 0x1FC4}, {0x1FC6, 0x1FD3}, {0x1FD6, 0x1FDB},\n\t{0x1FDD, 0x1FEF}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFE},\n\t{0x2000, 0x200F}, {0x2011, 0x2012}, {0x2017, 0x2017},\n\t{0x201A, 0x201B}, {0x201E, 0x201F}, {0x2023, 0x2023},\n\t{0x2028, 0x202F}, {0x2031, 0x2031}, {0x2034, 0x2034},\n\t{0x2036, 0x203A}, {0x203C, 0x203D}, {0x203F, 0x2064},\n\t{0x2066, 0x2071}, {0x2075, 0x207E}, {0x2080, 0x2080},\n\t{0x2085, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20A8},\n\t{0x20AA, 0x20AB}, {0x20AD, 0x20BF}, {0x20D0, 0x20F0},\n\t{0x2100, 0x2102}, {0x2104, 0x2104}, {0x2106, 0x2108},\n\t{0x210A, 0x2112}, {0x2114, 0x2115}, {0x2117, 0x2120},\n\t{0x2123, 0x2125}, {0x2127, 0x212A}, {0x212C, 0x2152},\n\t{0x2155, 0x215A}, {0x215F, 0x215F}, {0x216C, 0x216F},\n\t{0x217A, 0x2188}, {0x218A, 0x218B}, {0x219A, 0x21B7},\n\t{0x21BA, 0x21D1}, {0x21D3, 0x21D3}, {0x21D5, 0x21E6},\n\t{0x21E8, 0x21FF}, {0x2201, 0x2201}, {0x2204, 0x2206},\n\t{0x2209, 0x220A}, {0x220C, 0x220E}, {0x2210, 0x2210},\n\t{0x2212, 0x2214}, {0x2216, 0x2219}, {0x221B, 0x221C},\n\t{0x2221, 0x2222}, {0x2224, 0x2224}, {0x2226, 0x2226},\n\t{0x222D, 0x222D}, {0x222F, 0x2233}, {0x2238, 0x223B},\n\t{0x223E, 0x2247}, {0x2249, 0x224B}, {0x224D, 0x2251},\n\t{0x2253, 0x225F}, {0x2262, 0x2263}, {0x2268, 0x2269},\n\t{0x226C, 0x226D}, {0x2270, 0x2281}, {0x2284, 0x2285},\n\t{0x2288, 0x2294}, {0x2296, 0x2298}, {0x229A, 0x22A4},\n\t{0x22A6, 0x22BE}, {0x22C0, 0x2311}, {0x2313, 0x2319},\n\t{0x231C, 0x2328}, {0x232B, 0x23E8}, {0x23ED, 0x23EF},\n\t{0x23F1, 0x23F2}, {0x23F4, 0x2426}, {0x2440, 0x244A},\n\t{0x24EA, 0x24EA}, {0x254C, 0x254F}, {0x2574, 0x257F},\n\t{0x2590, 0x2591}, {0x2596, 0x259F}, {0x25A2, 0x25A2},\n\t{0x25AA, 0x25B1}, {0x25B4, 0x25B5}, {0x25B8, 0x25BB},\n\t{0x25BE, 0x25BF}, {0x25C2, 0x25C5}, {0x25C9, 0x25CA},\n\t{0x25CC, 0x25CD}, {0x25D2, 0x25E1}, {0x25E6, 0x25EE},\n\t{0x25F0, 0x25FC}, {0x25FF, 0x2604}, {0x2607, 0x2608},\n\t{0x260A, 0x260D}, {0x2610, 0x2613}, {0x2616, 0x261B},\n\t{0x261D, 0x261D}, {0x261F, 0x263F}, {0x2641, 0x2641},\n\t{0x2643, 0x2647}, {0x2654, 0x265F}, {0x2662, 0x2662},\n\t{0x2666, 0x2666}, {0x266B, 0x266B}, {0x266E, 0x266E},\n\t{0x2670, 0x267E}, {0x2680, 0x2692}, {0x2694, 0x269D},\n\t{0x26A0, 0x26A0}, {0x26A2, 0x26A9}, {0x26AC, 0x26BC},\n\t{0x26C0, 0x26C3}, {0x26E2, 0x26E2}, {0x26E4, 0x26E7},\n\t{0x2700, 0x2704}, {0x2706, 0x2709}, {0x270C, 0x2727},\n\t{0x2729, 0x273C}, {0x273E, 0x274B}, {0x274D, 0x274D},\n\t{0x274F, 0x2752}, {0x2756, 0x2756}, {0x2758, 0x2775},\n\t{0x2780, 0x2794}, {0x2798, 0x27AF}, {0x27B1, 0x27BE},\n\t{0x27C0, 0x27E5}, {0x27EE, 0x2984}, {0x2987, 0x2B1A},\n\t{0x2B1D, 0x2B4F}, {0x2B51, 0x2B54}, {0x2B5A, 0x2B73},\n\t{0x2B76, 0x2B95}, {0x2B97, 0x2C2E}, {0x2C30, 0x2C5E},\n\t{0x2C60, 0x2CF3}, {0x2CF9, 0x2D25}, {0x2D27, 0x2D27},\n\t{0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, {0x2D6F, 0x2D70},\n\t{0x2D7F, 0x2D96}, {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE},\n\t{0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6},\n\t{0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE},\n\t{0x2DE0, 0x2E52}, {0x303F, 0x303F}, {0x4DC0, 0x4DFF},\n\t{0xA4D0, 0xA62B}, {0xA640, 0xA6F7}, {0xA700, 0xA7BF},\n\t{0xA7C2, 0xA7CA}, {0xA7F5, 0xA82C}, {0xA830, 0xA839},\n\t{0xA840, 0xA877}, {0xA880, 0xA8C5}, {0xA8CE, 0xA8D9},\n\t{0xA8E0, 0xA953}, {0xA95F, 0xA95F}, {0xA980, 0xA9CD},\n\t{0xA9CF, 0xA9D9}, {0xA9DE, 0xA9FE}, {0xAA00, 0xAA36},\n\t{0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, {0xAA5C, 0xAAC2},\n\t{0xAADB, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E},\n\t{0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E},\n\t{0xAB30, 0xAB6B}, {0xAB70, 0xABED}, {0xABF0, 0xABF9},\n\t{0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xD800, 0xDFFF},\n\t{0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFB1D, 0xFB36},\n\t{0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41},\n\t{0xFB43, 0xFB44}, {0xFB46, 0xFBC1}, {0xFBD3, 0xFD3F},\n\t{0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFD},\n\t{0xFE20, 0xFE2F}, {0xFE70, 0xFE74}, {0xFE76, 0xFEFC},\n\t{0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFC}, {0x10000, 0x1000B},\n\t{0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D},\n\t{0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA},\n\t{0x10100, 0x10102}, {0x10107, 0x10133}, {0x10137, 0x1018E},\n\t{0x10190, 0x1019C}, {0x101A0, 0x101A0}, {0x101D0, 0x101FD},\n\t{0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x102E0, 0x102FB},\n\t{0x10300, 0x10323}, {0x1032D, 0x1034A}, {0x10350, 0x1037A},\n\t{0x10380, 0x1039D}, {0x1039F, 0x103C3}, {0x103C8, 0x103D5},\n\t{0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3},\n\t{0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563},\n\t{0x1056F, 0x1056F}, {0x10600, 0x10736}, {0x10740, 0x10755},\n\t{0x10760, 0x10767}, {0x10800, 0x10805}, {0x10808, 0x10808},\n\t{0x1080A, 0x10835}, {0x10837, 0x10838}, {0x1083C, 0x1083C},\n\t{0x1083F, 0x10855}, {0x10857, 0x1089E}, {0x108A7, 0x108AF},\n\t{0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x1091B},\n\t{0x1091F, 0x10939}, {0x1093F, 0x1093F}, {0x10980, 0x109B7},\n\t{0x109BC, 0x109CF}, {0x109D2, 0x10A03}, {0x10A05, 0x10A06},\n\t{0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35},\n\t{0x10A38, 0x10A3A}, {0x10A3F, 0x10A48}, {0x10A50, 0x10A58},\n\t{0x10A60, 0x10A9F}, {0x10AC0, 0x10AE6}, {0x10AEB, 0x10AF6},\n\t{0x10B00, 0x10B35}, {0x10B39, 0x10B55}, {0x10B58, 0x10B72},\n\t{0x10B78, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF},\n\t{0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2},\n\t{0x10CFA, 0x10D27}, {0x10D30, 0x10D39}, {0x10E60, 0x10E7E},\n\t{0x10E80, 0x10EA9}, {0x10EAB, 0x10EAD}, {0x10EB0, 0x10EB1},\n\t{0x10F00, 0x10F27}, {0x10F30, 0x10F59}, {0x10FB0, 0x10FCB},\n\t{0x10FE0, 0x10FF6}, {0x11000, 0x1104D}, {0x11052, 0x1106F},\n\t{0x1107F, 0x110C1}, {0x110CD, 0x110CD}, {0x110D0, 0x110E8},\n\t{0x110F0, 0x110F9}, {0x11100, 0x11134}, {0x11136, 0x11147},\n\t{0x11150, 0x11176}, {0x11180, 0x111DF}, {0x111E1, 0x111F4},\n\t{0x11200, 0x11211}, {0x11213, 0x1123E}, {0x11280, 0x11286},\n\t{0x11288, 0x11288}, {0x1128A, 0x1128D}, {0x1128F, 0x1129D},\n\t{0x1129F, 0x112A9}, {0x112B0, 0x112EA}, {0x112F0, 0x112F9},\n\t{0x11300, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310},\n\t{0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333},\n\t{0x11335, 0x11339}, {0x1133B, 0x11344}, {0x11347, 0x11348},\n\t{0x1134B, 0x1134D}, {0x11350, 0x11350}, {0x11357, 0x11357},\n\t{0x1135D, 0x11363}, {0x11366, 0x1136C}, {0x11370, 0x11374},\n\t{0x11400, 0x1145B}, {0x1145D, 0x11461}, {0x11480, 0x114C7},\n\t{0x114D0, 0x114D9}, {0x11580, 0x115B5}, {0x115B8, 0x115DD},\n\t{0x11600, 0x11644}, {0x11650, 0x11659}, {0x11660, 0x1166C},\n\t{0x11680, 0x116B8}, {0x116C0, 0x116C9}, {0x11700, 0x1171A},\n\t{0x1171D, 0x1172B}, {0x11730, 0x1173F}, {0x11800, 0x1183B},\n\t{0x118A0, 0x118F2}, {0x118FF, 0x11906}, {0x11909, 0x11909},\n\t{0x1190C, 0x11913}, {0x11915, 0x11916}, {0x11918, 0x11935},\n\t{0x11937, 0x11938}, {0x1193B, 0x11946}, {0x11950, 0x11959},\n\t{0x119A0, 0x119A7}, {0x119AA, 0x119D7}, {0x119DA, 0x119E4},\n\t{0x11A00, 0x11A47}, {0x11A50, 0x11AA2}, {0x11AC0, 0x11AF8},\n\t{0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, {0x11C38, 0x11C45},\n\t{0x11C50, 0x11C6C}, {0x11C70, 0x11C8F}, {0x11C92, 0x11CA7},\n\t{0x11CA9, 0x11CB6}, {0x11D00, 0x11D06}, {0x11D08, 0x11D09},\n\t{0x11D0B, 0x11D36}, {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D},\n\t{0x11D3F, 0x11D47}, {0x11D50, 0x11D59}, {0x11D60, 0x11D65},\n\t{0x11D67, 0x11D68}, {0x11D6A, 0x11D8E}, {0x11D90, 0x11D91},\n\t{0x11D93, 0x11D98}, {0x11DA0, 0x11DA9}, {0x11EE0, 0x11EF8},\n\t{0x11FB0, 0x11FB0}, {0x11FC0, 0x11FF1}, {0x11FFF, 0x12399},\n\t{0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543},\n\t{0x13000, 0x1342E}, {0x13430, 0x13438}, {0x14400, 0x14646},\n\t{0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69},\n\t{0x16A6E, 0x16A6F}, {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF5},\n\t{0x16B00, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61},\n\t{0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16E40, 0x16E9A},\n\t{0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, {0x16F8F, 0x16F9F},\n\t{0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88},\n\t{0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BCA3}, {0x1D000, 0x1D0F5},\n\t{0x1D100, 0x1D126}, {0x1D129, 0x1D1E8}, {0x1D200, 0x1D245},\n\t{0x1D2E0, 0x1D2F3}, {0x1D300, 0x1D356}, {0x1D360, 0x1D378},\n\t{0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F},\n\t{0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC},\n\t{0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3},\n\t{0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514},\n\t{0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E},\n\t{0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550},\n\t{0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1DA8B},\n\t{0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006},\n\t{0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024},\n\t{0x1E026, 0x1E02A}, {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D},\n\t{0x1E140, 0x1E149}, {0x1E14E, 0x1E14F}, {0x1E2C0, 0x1E2F9},\n\t{0x1E2FF, 0x1E2FF}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6},\n\t{0x1E900, 0x1E94B}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F},\n\t{0x1EC71, 0x1ECB4}, {0x1ED01, 0x1ED3D}, {0x1EE00, 0x1EE03},\n\t{0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24},\n\t{0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37},\n\t{0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42},\n\t{0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B},\n\t{0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54},\n\t{0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B},\n\t{0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62},\n\t{0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72},\n\t{0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E},\n\t{0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3},\n\t{0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, {0x1EEF0, 0x1EEF1},\n\t{0x1F000, 0x1F003}, {0x1F005, 0x1F02B}, {0x1F030, 0x1F093},\n\t{0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, {0x1F0C1, 0x1F0CE},\n\t{0x1F0D1, 0x1F0F5}, {0x1F10B, 0x1F10F}, {0x1F12E, 0x1F12F},\n\t{0x1F16A, 0x1F16F}, {0x1F1AD, 0x1F1AD}, {0x1F1E6, 0x1F1FF},\n\t{0x1F321, 0x1F32C}, {0x1F336, 0x1F336}, {0x1F37D, 0x1F37D},\n\t{0x1F394, 0x1F39F}, {0x1F3CB, 0x1F3CE}, {0x1F3D4, 0x1F3DF},\n\t{0x1F3F1, 0x1F3F3}, {0x1F3F5, 0x1F3F7}, {0x1F43F, 0x1F43F},\n\t{0x1F441, 0x1F441}, {0x1F4FD, 0x1F4FE}, {0x1F53E, 0x1F54A},\n\t{0x1F54F, 0x1F54F}, {0x1F568, 0x1F579}, {0x1F57B, 0x1F594},\n\t{0x1F597, 0x1F5A3}, {0x1F5A5, 0x1F5FA}, {0x1F650, 0x1F67F},\n\t{0x1F6C6, 0x1F6CB}, {0x1F6CD, 0x1F6CF}, {0x1F6D3, 0x1F6D4},\n\t{0x1F6E0, 0x1F6EA}, {0x1F6F0, 0x1F6F3}, {0x1F700, 0x1F773},\n\t{0x1F780, 0x1F7D8}, {0x1F800, 0x1F80B}, {0x1F810, 0x1F847},\n\t{0x1F850, 0x1F859}, {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD},\n\t{0x1F8B0, 0x1F8B1}, {0x1F900, 0x1F90B}, {0x1F93B, 0x1F93B},\n\t{0x1F946, 0x1F946}, {0x1FA00, 0x1FA53}, {0x1FA60, 0x1FA6D},\n\t{0x1FB00, 0x1FB92}, {0x1FB94, 0x1FBCA}, {0x1FBF0, 0x1FBF9},\n\t{0xE0001, 0xE0001}, {0xE0020, 0xE007F},\n}\n\nvar emoji = table{\n\t{0x203C, 0x203C}, {0x2049, 0x2049}, {0x2122, 0x2122},\n\t{0x2139, 0x2139}, {0x2194, 0x2199}, {0x21A9, 0x21AA},\n\t{0x231A, 0x231B}, {0x2328, 0x2328}, {0x2388, 0x2388},\n\t{0x23CF, 0x23CF}, {0x23E9, 0x23F3}, {0x23F8, 0x23FA},\n\t{0x24C2, 0x24C2}, {0x25AA, 0x25AB}, {0x25B6, 0x25B6},\n\t{0x25C0, 0x25C0}, {0x25FB, 0x25FE}, {0x2600, 0x2605},\n\t{0x2607, 0x2612}, {0x2614, 0x2685}, {0x2690, 0x2705},\n\t{0x2708, 0x2712}, {0x2714, 0x2714}, {0x2716, 0x2716},\n\t{0x271D, 0x271D}, {0x2721, 0x2721}, {0x2728, 0x2728},\n\t{0x2733, 0x2734}, {0x2744, 0x2744}, {0x2747, 0x2747},\n\t{0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755},\n\t{0x2757, 0x2757}, {0x2763, 0x2767}, {0x2795, 0x2797},\n\t{0x27A1, 0x27A1}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF},\n\t{0x2934, 0x2935}, {0x2B05, 0x2B07}, {0x2B1B, 0x2B1C},\n\t{0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x3030, 0x3030},\n\t{0x303D, 0x303D}, {0x3297, 0x3297}, {0x3299, 0x3299},\n\t{0x1F000, 0x1F0FF}, {0x1F10D, 0x1F10F}, {0x1F12F, 0x1F12F},\n\t{0x1F16C, 0x1F171}, {0x1F17E, 0x1F17F}, {0x1F18E, 0x1F18E},\n\t{0x1F191, 0x1F19A}, {0x1F1AD, 0x1F1E5}, {0x1F201, 0x1F20F},\n\t{0x1F21A, 0x1F21A}, {0x1F22F, 0x1F22F}, {0x1F232, 0x1F23A},\n\t{0x1F23C, 0x1F23F}, {0x1F249, 0x1F3FA}, {0x1F400, 0x1F53D},\n\t{0x1F546, 0x1F64F}, {0x1F680, 0x1F6FF}, {0x1F774, 0x1F77F},\n\t{0x1F7D5, 0x1F7FF}, {0x1F80C, 0x1F80F}, {0x1F848, 0x1F84F},\n\t{0x1F85A, 0x1F85F}, {0x1F888, 0x1F88F}, {0x1F8AE, 0x1F8FF},\n\t{0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1FAFF},\n\t{0x1FC00, 0x1FFFD},\n}\n"
  },
  {
    "path": "vendor/github.com/mattn/go-runewidth/runewidth_windows.go",
    "content": "// +build windows\n// +build !appengine\n\npackage runewidth\n\nimport (\n\t\"syscall\"\n)\n\nvar (\n\tkernel32               = syscall.NewLazyDLL(\"kernel32\")\n\tprocGetConsoleOutputCP = kernel32.NewProc(\"GetConsoleOutputCP\")\n)\n\n// IsEastAsian return true if the current locale is CJK\nfunc IsEastAsian() bool {\n\tr1, _, _ := procGetConsoleOutputCP.Call()\n\tif r1 == 0 {\n\t\treturn false\n\t}\n\n\tswitch int(r1) {\n\tcase 932, 51932, 936, 949, 950:\n\t\treturn true\n\t}\n\n\treturn false\n}\n"
  },
  {
    "path": "vendor/github.com/rivo/uniseg/LICENSE.txt",
    "content": "MIT License\n\nCopyright (c) 2019 Oliver Kuederle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "vendor/github.com/rivo/uniseg/README.md",
    "content": "# Unicode Text Segmentation for Go\n\n[![Godoc Reference](https://img.shields.io/badge/godoc-reference-blue.svg)](https://godoc.org/github.com/rivo/uniseg)\n[![Go Report](https://img.shields.io/badge/go%20report-A%2B-brightgreen.svg)](https://goreportcard.com/report/github.com/rivo/uniseg)\n\nThis Go package implements Unicode Text Segmentation according to [Unicode Standard Annex #29](http://unicode.org/reports/tr29/) (Unicode version 12.0.0).\n\nAt this point, only the determination of grapheme cluster boundaries is implemented.\n\n## Background\n\nIn Go, [strings are read-only slices of bytes](https://blog.golang.org/strings). They can be turned into Unicode code points using the `for` loop or by casting: `[]rune(str)`. However, multiple code points may be combined into one user-perceived character or what the Unicode specification calls \"grapheme cluster\". Here are some examples:\n\n|String|Bytes (UTF-8)|Code points (runes)|Grapheme clusters|\n|-|-|-|-|\n|Käse|6 bytes: `4b 61 cc 88 73 65`|5 code points: `4b 61 308 73 65`|4 clusters: `[4b],[61 308],[73],[65]`|\n|🏳️‍🌈|14 bytes: `f0 9f 8f b3 ef b8 8f e2 80 8d f0 9f 8c 88`|4 code points: `1f3f3 fe0f 200d 1f308`|1 cluster: `[1f3f3 fe0f 200d 1f308]`|\n|🇩🇪|8 bytes: `f0 9f 87 a9 f0 9f 87 aa`|2 code points: `1f1e9 1f1ea`|1 cluster: `[1f1e9 1f1ea]`|\n\nThis package provides a tool to iterate over these grapheme clusters. This may be used to determine the number of user-perceived characters, to split strings in their intended places, or to extract individual characters which form a unit.\n\n## Installation\n\n```bash\ngo get github.com/rivo/uniseg\n```\n\n## Basic Example\n\n```go\npackage uniseg\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/rivo/uniseg\"\n)\n\nfunc main() {\n\tgr := uniseg.NewGraphemes(\"👍🏼!\")\n\tfor gr.Next() {\n\t\tfmt.Printf(\"%x \", gr.Runes())\n\t}\n\t// Output: [1f44d 1f3fc] [21]\n}\n```\n\n## Documentation\n\nRefer to https://godoc.org/github.com/rivo/uniseg for the package's documentation.\n\n## Dependencies\n\nThis package does not depend on any packages outside the standard library.\n\n## Your Feedback\n\nAdd your issue here on GitHub. Feel free to get in touch if you have any questions.\n\n## Version\n\nVersion tags will be introduced once Golang modules are official. Consider this version 0.1.\n"
  },
  {
    "path": "vendor/github.com/rivo/uniseg/doc.go",
    "content": "/*\nPackage uniseg implements Unicode Text Segmentation according to Unicode\nStandard Annex #29 (http://unicode.org/reports/tr29/).\n\nAt this point, only the determination of grapheme cluster boundaries is\nimplemented.\n*/\npackage uniseg\n"
  },
  {
    "path": "vendor/github.com/rivo/uniseg/grapheme.go",
    "content": "package uniseg\n\nimport \"unicode/utf8\"\n\n// The states of the grapheme cluster parser.\nconst (\n\tgrAny = iota\n\tgrCR\n\tgrControlLF\n\tgrL\n\tgrLVV\n\tgrLVTT\n\tgrPrepend\n\tgrExtendedPictographic\n\tgrExtendedPictographicZWJ\n\tgrRIOdd\n\tgrRIEven\n)\n\n// The grapheme cluster parser's breaking instructions.\nconst (\n\tgrNoBoundary = iota\n\tgrBoundary\n)\n\n// The grapheme cluster parser's state transitions. Maps (state, property) to\n// (new state, breaking instruction, rule number). The breaking instruction\n// always refers to the boundary between the last and next code point.\n//\n// This map is queried as follows:\n//\n//   1. Find specific state + specific property. Stop if found.\n//   2. Find specific state + any property.\n//   3. Find any state + specific property.\n//   4. If only (2) or (3) (but not both) was found, stop.\n//   5. If both (2) and (3) were found, use state and breaking instruction from\n//      the transition with the lower rule number, prefer (3) if rule numbers\n//      are equal. Stop.\n//   6. Assume grAny and grBoundary.\nvar grTransitions = map[[2]int][3]int{\n\t// GB5\n\t{grAny, prCR}:      {grCR, grBoundary, 50},\n\t{grAny, prLF}:      {grControlLF, grBoundary, 50},\n\t{grAny, prControl}: {grControlLF, grBoundary, 50},\n\n\t// GB4\n\t{grCR, prAny}:        {grAny, grBoundary, 40},\n\t{grControlLF, prAny}: {grAny, grBoundary, 40},\n\n\t// GB3.\n\t{grCR, prLF}: {grAny, grNoBoundary, 30},\n\n\t// GB6.\n\t{grAny, prL}: {grL, grBoundary, 9990},\n\t{grL, prL}:   {grL, grNoBoundary, 60},\n\t{grL, prV}:   {grLVV, grNoBoundary, 60},\n\t{grL, prLV}:  {grLVV, grNoBoundary, 60},\n\t{grL, prLVT}: {grLVTT, grNoBoundary, 60},\n\n\t// GB7.\n\t{grAny, prLV}: {grLVV, grBoundary, 9990},\n\t{grAny, prV}:  {grLVV, grBoundary, 9990},\n\t{grLVV, prV}:  {grLVV, grNoBoundary, 70},\n\t{grLVV, prT}:  {grLVTT, grNoBoundary, 70},\n\n\t// GB8.\n\t{grAny, prLVT}: {grLVTT, grBoundary, 9990},\n\t{grAny, prT}:   {grLVTT, grBoundary, 9990},\n\t{grLVTT, prT}:  {grLVTT, grNoBoundary, 80},\n\n\t// GB9.\n\t{grAny, prExtend}: {grAny, grNoBoundary, 90},\n\t{grAny, prZWJ}:    {grAny, grNoBoundary, 90},\n\n\t// GB9a.\n\t{grAny, prSpacingMark}: {grAny, grNoBoundary, 91},\n\n\t// GB9b.\n\t{grAny, prPreprend}: {grPrepend, grBoundary, 9990},\n\t{grPrepend, prAny}:  {grAny, grNoBoundary, 92},\n\n\t// GB11.\n\t{grAny, prExtendedPictographic}:                     {grExtendedPictographic, grBoundary, 9990},\n\t{grExtendedPictographic, prExtend}:                  {grExtendedPictographic, grNoBoundary, 110},\n\t{grExtendedPictographic, prZWJ}:                     {grExtendedPictographicZWJ, grNoBoundary, 110},\n\t{grExtendedPictographicZWJ, prExtendedPictographic}: {grExtendedPictographic, grNoBoundary, 110},\n\n\t// GB12 / GB13.\n\t{grAny, prRegionalIndicator}:    {grRIOdd, grBoundary, 9990},\n\t{grRIOdd, prRegionalIndicator}:  {grRIEven, grNoBoundary, 120},\n\t{grRIEven, prRegionalIndicator}: {grRIOdd, grBoundary, 120},\n}\n\n// Graphemes implements an iterator over Unicode extended grapheme clusters,\n// specified in the Unicode Standard Annex #29. Grapheme clusters correspond to\n// \"user-perceived characters\". These characters often consist of multiple\n// code points (e.g. the \"woman kissing woman\" emoji consists of 8 code points:\n// woman + ZWJ + heavy black heart (2 code points) + ZWJ + kiss mark + ZWJ +\n// woman) and the rules described in Annex #29 must be applied to group those\n// code points into clusters perceived by the user as one character.\ntype Graphemes struct {\n\t// The code points over which this class iterates.\n\tcodePoints []rune\n\n\t// The (byte-based) indices of the code points into the original string plus\n\t// len(original string). Thus, len(indices) = len(codePoints) + 1.\n\tindices []int\n\n\t// The current grapheme cluster to be returned. These are indices into\n\t// codePoints/indices. If start == end, we either haven't started iterating\n\t// yet (0) or the iteration has already completed (1).\n\tstart, end int\n\n\t// The index of the next code point to be parsed.\n\tpos int\n\n\t// The current state of the code point parser.\n\tstate int\n}\n\n// NewGraphemes returns a new grapheme cluster iterator.\nfunc NewGraphemes(s string) *Graphemes {\n\tl := utf8.RuneCountInString(s)\n\tcodePoints := make([]rune, l)\n\tindices := make([]int, l+1)\n\ti := 0\n\tfor pos, r := range s {\n\t\tcodePoints[i] = r\n\t\tindices[i] = pos\n\t\ti++\n\t}\n\tindices[l] = len(s)\n\tg := &Graphemes{\n\t\tcodePoints: codePoints,\n\t\tindices:    indices,\n\t}\n\tg.Next() // Parse ahead.\n\treturn g\n}\n\n// Next advances the iterator by one grapheme cluster and returns false if no\n// clusters are left. This function must be called before the first cluster is\n// accessed.\nfunc (g *Graphemes) Next() bool {\n\tg.start = g.end\n\n\t// The state transition gives us a boundary instruction BEFORE the next code\n\t// point so we always need to stay ahead by one code point.\n\n\t// Parse the next code point.\n\tfor g.pos <= len(g.codePoints) {\n\t\t// GB2.\n\t\tif g.pos == len(g.codePoints) {\n\t\t\tg.end = g.pos\n\t\t\tg.pos++\n\t\t\tbreak\n\t\t}\n\n\t\t// Determine the property of the next character.\n\t\tnextProperty := property(g.codePoints[g.pos])\n\t\tg.pos++\n\n\t\t// Find the applicable transition.\n\t\tvar boundary bool\n\t\ttransition, ok := grTransitions[[2]int{g.state, nextProperty}]\n\t\tif ok {\n\t\t\t// We have a specific transition. We'll use it.\n\t\t\tg.state = transition[0]\n\t\t\tboundary = transition[1] == grBoundary\n\t\t} else {\n\t\t\t// No specific transition found. Try the less specific ones.\n\t\t\ttransAnyProp, okAnyProp := grTransitions[[2]int{g.state, prAny}]\n\t\t\ttransAnyState, okAnyState := grTransitions[[2]int{grAny, nextProperty}]\n\t\t\tif okAnyProp && okAnyState {\n\t\t\t\t// Both apply. We'll use a mix (see comments for grTransitions).\n\t\t\t\tg.state = transAnyState[0]\n\t\t\t\tboundary = transAnyState[1] == grBoundary\n\t\t\t\tif transAnyProp[2] < transAnyState[2] {\n\t\t\t\t\tg.state = transAnyProp[0]\n\t\t\t\t\tboundary = transAnyProp[1] == grBoundary\n\t\t\t\t}\n\t\t\t} else if okAnyProp {\n\t\t\t\t// We only have a specific state.\n\t\t\t\tg.state = transAnyProp[0]\n\t\t\t\tboundary = transAnyProp[1] == grBoundary\n\t\t\t\t// This branch will probably never be reached because okAnyState will\n\t\t\t\t// always be true given the current transition map. But we keep it here\n\t\t\t\t// for future modifications to the transition map where this may not be\n\t\t\t\t// true anymore.\n\t\t\t} else if okAnyState {\n\t\t\t\t// We only have a specific property.\n\t\t\t\tg.state = transAnyState[0]\n\t\t\t\tboundary = transAnyState[1] == grBoundary\n\t\t\t} else {\n\t\t\t\t// No known transition. GB999: Any x Any.\n\t\t\t\tg.state = grAny\n\t\t\t\tboundary = true\n\t\t\t}\n\t\t}\n\n\t\t// If we found a cluster boundary, let's stop here. The current cluster will\n\t\t// be the one that just ended.\n\t\tif g.pos-1 == 0 /* GB1 */ || boundary {\n\t\t\tg.end = g.pos - 1\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn g.start != g.end\n}\n\n// Runes returns a slice of runes (code points) which corresponds to the current\n// grapheme cluster. If the iterator is already past the end or Next() has not\n// yet been called, nil is returned.\nfunc (g *Graphemes) Runes() []rune {\n\tif g.start == g.end {\n\t\treturn nil\n\t}\n\treturn g.codePoints[g.start:g.end]\n}\n\n// Str returns a substring of the original string which corresponds to the\n// current grapheme cluster. If the iterator is already past the end or Next()\n// has not yet been called, an empty string is returned.\nfunc (g *Graphemes) Str() string {\n\tif g.start == g.end {\n\t\treturn \"\"\n\t}\n\treturn string(g.codePoints[g.start:g.end])\n}\n\n// Bytes returns a byte slice which corresponds to the current grapheme cluster.\n// If the iterator is already past the end or Next() has not yet been called,\n// nil is returned.\nfunc (g *Graphemes) Bytes() []byte {\n\tif g.start == g.end {\n\t\treturn nil\n\t}\n\treturn []byte(string(g.codePoints[g.start:g.end]))\n}\n\n// Positions returns the interval of the current grapheme cluster as byte\n// positions into the original string. The first returned value \"from\" indexes\n// the first byte and the second returned value \"to\" indexes the first byte that\n// is not included anymore, i.e. str[from:to] is the current grapheme cluster of\n// the original string \"str\". If Next() has not yet been called, both values are\n// 0. If the iterator is already past the end, both values are 1.\nfunc (g *Graphemes) Positions() (int, int) {\n\treturn g.indices[g.start], g.indices[g.end]\n}\n\n// Reset puts the iterator into its initial state such that the next call to\n// Next() sets it to the first grapheme cluster again.\nfunc (g *Graphemes) Reset() {\n\tg.start, g.end, g.pos, g.state = 0, 0, 0, grAny\n\tg.Next() // Parse ahead again.\n}\n\n// GraphemeClusterCount returns the number of user-perceived characters\n// (grapheme clusters) for the given string. To calculate this number, it\n// iterates through the string using the Graphemes iterator.\nfunc GraphemeClusterCount(s string) (n int) {\n\tg := NewGraphemes(s)\n\tfor g.Next() {\n\t\tn++\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/github.com/rivo/uniseg/properties.go",
    "content": "package uniseg\n\n// The unicode properties. Only the ones needed in the context of this package\n// are included.\nconst (\n\tprAny = iota\n\tprPreprend\n\tprCR\n\tprLF\n\tprControl\n\tprExtend\n\tprRegionalIndicator\n\tprSpacingMark\n\tprL\n\tprV\n\tprT\n\tprLV\n\tprLVT\n\tprZWJ\n\tprExtendedPictographic\n)\n\n// Maps code point ranges to their properties. In the context of this package,\n// any code point that is not contained may map to \"prAny\". The code point\n// ranges in this slice are numerically sorted.\n//\n// These ranges were taken from\n// http://www.unicode.org/Public/UCD/latest/ucd/auxiliary/GraphemeBreakProperty.txt\n// as well as\n// https://unicode.org/Public/emoji/latest/emoji-data.txt\n// (\"Extended_Pictographic\" only) on March 11, 2019. See\n// https://www.unicode.org/license.html for the Unicode license agreement.\nvar codePoints = [][3]int{\n\t{0x0000, 0x0009, prControl},                // Cc  [10] <control-0000>..<control-0009>\n\t{0x000A, 0x000A, prLF},                     // Cc       <control-000A>\n\t{0x000B, 0x000C, prControl},                // Cc   [2] <control-000B>..<control-000C>\n\t{0x000D, 0x000D, prCR},                     // Cc       <control-000D>\n\t{0x000E, 0x001F, prControl},                // Cc  [18] <control-000E>..<control-001F>\n\t{0x007F, 0x009F, prControl},                // Cc  [33] <control-007F>..<control-009F>\n\t{0x00A9, 0x00A9, prExtendedPictographic},   //  1.1  [1] (©️)       copyright\n\t{0x00AD, 0x00AD, prControl},                // Cf       SOFT HYPHEN\n\t{0x00AE, 0x00AE, prExtendedPictographic},   //  1.1  [1] (®️)       registered\n\t{0x0300, 0x036F, prExtend},                 // Mn [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X\n\t{0x0483, 0x0487, prExtend},                 // Mn   [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE\n\t{0x0488, 0x0489, prExtend},                 // Me   [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN\n\t{0x0591, 0x05BD, prExtend},                 // Mn  [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG\n\t{0x05BF, 0x05BF, prExtend},                 // Mn       HEBREW POINT RAFE\n\t{0x05C1, 0x05C2, prExtend},                 // Mn   [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT\n\t{0x05C4, 0x05C5, prExtend},                 // Mn   [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT\n\t{0x05C7, 0x05C7, prExtend},                 // Mn       HEBREW POINT QAMATS QATAN\n\t{0x0600, 0x0605, prPreprend},               // Cf   [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE\n\t{0x0610, 0x061A, prExtend},                 // Mn  [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA\n\t{0x061C, 0x061C, prControl},                // Cf       ARABIC LETTER MARK\n\t{0x064B, 0x065F, prExtend},                 // Mn  [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW\n\t{0x0670, 0x0670, prExtend},                 // Mn       ARABIC LETTER SUPERSCRIPT ALEF\n\t{0x06D6, 0x06DC, prExtend},                 // Mn   [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN\n\t{0x06DD, 0x06DD, prPreprend},               // Cf       ARABIC END OF AYAH\n\t{0x06DF, 0x06E4, prExtend},                 // Mn   [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA\n\t{0x06E7, 0x06E8, prExtend},                 // Mn   [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON\n\t{0x06EA, 0x06ED, prExtend},                 // Mn   [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM\n\t{0x070F, 0x070F, prPreprend},               // Cf       SYRIAC ABBREVIATION MARK\n\t{0x0711, 0x0711, prExtend},                 // Mn       SYRIAC LETTER SUPERSCRIPT ALAPH\n\t{0x0730, 0x074A, prExtend},                 // Mn  [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH\n\t{0x07A6, 0x07B0, prExtend},                 // Mn  [11] THAANA ABAFILI..THAANA SUKUN\n\t{0x07EB, 0x07F3, prExtend},                 // Mn   [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE\n\t{0x07FD, 0x07FD, prExtend},                 // Mn       NKO DANTAYALAN\n\t{0x0816, 0x0819, prExtend},                 // Mn   [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH\n\t{0x081B, 0x0823, prExtend},                 // Mn   [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A\n\t{0x0825, 0x0827, prExtend},                 // Mn   [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U\n\t{0x0829, 0x082D, prExtend},                 // Mn   [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA\n\t{0x0859, 0x085B, prExtend},                 // Mn   [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK\n\t{0x08D3, 0x08E1, prExtend},                 // Mn  [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA\n\t{0x08E2, 0x08E2, prPreprend},               // Cf       ARABIC DISPUTED END OF AYAH\n\t{0x08E3, 0x0902, prExtend},                 // Mn  [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA\n\t{0x0903, 0x0903, prSpacingMark},            // Mc       DEVANAGARI SIGN VISARGA\n\t{0x093A, 0x093A, prExtend},                 // Mn       DEVANAGARI VOWEL SIGN OE\n\t{0x093B, 0x093B, prSpacingMark},            // Mc       DEVANAGARI VOWEL SIGN OOE\n\t{0x093C, 0x093C, prExtend},                 // Mn       DEVANAGARI SIGN NUKTA\n\t{0x093E, 0x0940, prSpacingMark},            // Mc   [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II\n\t{0x0941, 0x0948, prExtend},                 // Mn   [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI\n\t{0x0949, 0x094C, prSpacingMark},            // Mc   [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU\n\t{0x094D, 0x094D, prExtend},                 // Mn       DEVANAGARI SIGN VIRAMA\n\t{0x094E, 0x094F, prSpacingMark},            // Mc   [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW\n\t{0x0951, 0x0957, prExtend},                 // Mn   [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE\n\t{0x0962, 0x0963, prExtend},                 // Mn   [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL\n\t{0x0981, 0x0981, prExtend},                 // Mn       BENGALI SIGN CANDRABINDU\n\t{0x0982, 0x0983, prSpacingMark},            // Mc   [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA\n\t{0x09BC, 0x09BC, prExtend},                 // Mn       BENGALI SIGN NUKTA\n\t{0x09BE, 0x09BE, prExtend},                 // Mc       BENGALI VOWEL SIGN AA\n\t{0x09BF, 0x09C0, prSpacingMark},            // Mc   [2] BENGALI VOWEL SIGN I..BENGALI VOWEL SIGN II\n\t{0x09C1, 0x09C4, prExtend},                 // Mn   [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR\n\t{0x09C7, 0x09C8, prSpacingMark},            // Mc   [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI\n\t{0x09CB, 0x09CC, prSpacingMark},            // Mc   [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU\n\t{0x09CD, 0x09CD, prExtend},                 // Mn       BENGALI SIGN VIRAMA\n\t{0x09D7, 0x09D7, prExtend},                 // Mc       BENGALI AU LENGTH MARK\n\t{0x09E2, 0x09E3, prExtend},                 // Mn   [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL\n\t{0x09FE, 0x09FE, prExtend},                 // Mn       BENGALI SANDHI MARK\n\t{0x0A01, 0x0A02, prExtend},                 // Mn   [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI\n\t{0x0A03, 0x0A03, prSpacingMark},            // Mc       GURMUKHI SIGN VISARGA\n\t{0x0A3C, 0x0A3C, prExtend},                 // Mn       GURMUKHI SIGN NUKTA\n\t{0x0A3E, 0x0A40, prSpacingMark},            // Mc   [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II\n\t{0x0A41, 0x0A42, prExtend},                 // Mn   [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU\n\t{0x0A47, 0x0A48, prExtend},                 // Mn   [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI\n\t{0x0A4B, 0x0A4D, prExtend},                 // Mn   [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA\n\t{0x0A51, 0x0A51, prExtend},                 // Mn       GURMUKHI SIGN UDAAT\n\t{0x0A70, 0x0A71, prExtend},                 // Mn   [2] GURMUKHI TIPPI..GURMUKHI ADDAK\n\t{0x0A75, 0x0A75, prExtend},                 // Mn       GURMUKHI SIGN YAKASH\n\t{0x0A81, 0x0A82, prExtend},                 // Mn   [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA\n\t{0x0A83, 0x0A83, prSpacingMark},            // Mc       GUJARATI SIGN VISARGA\n\t{0x0ABC, 0x0ABC, prExtend},                 // Mn       GUJARATI SIGN NUKTA\n\t{0x0ABE, 0x0AC0, prSpacingMark},            // Mc   [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II\n\t{0x0AC1, 0x0AC5, prExtend},                 // Mn   [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E\n\t{0x0AC7, 0x0AC8, prExtend},                 // Mn   [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI\n\t{0x0AC9, 0x0AC9, prSpacingMark},            // Mc       GUJARATI VOWEL SIGN CANDRA O\n\t{0x0ACB, 0x0ACC, prSpacingMark},            // Mc   [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU\n\t{0x0ACD, 0x0ACD, prExtend},                 // Mn       GUJARATI SIGN VIRAMA\n\t{0x0AE2, 0x0AE3, prExtend},                 // Mn   [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL\n\t{0x0AFA, 0x0AFF, prExtend},                 // Mn   [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE\n\t{0x0B01, 0x0B01, prExtend},                 // Mn       ORIYA SIGN CANDRABINDU\n\t{0x0B02, 0x0B03, prSpacingMark},            // Mc   [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA\n\t{0x0B3C, 0x0B3C, prExtend},                 // Mn       ORIYA SIGN NUKTA\n\t{0x0B3E, 0x0B3E, prExtend},                 // Mc       ORIYA VOWEL SIGN AA\n\t{0x0B3F, 0x0B3F, prExtend},                 // Mn       ORIYA VOWEL SIGN I\n\t{0x0B40, 0x0B40, prSpacingMark},            // Mc       ORIYA VOWEL SIGN II\n\t{0x0B41, 0x0B44, prExtend},                 // Mn   [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR\n\t{0x0B47, 0x0B48, prSpacingMark},            // Mc   [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI\n\t{0x0B4B, 0x0B4C, prSpacingMark},            // Mc   [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU\n\t{0x0B4D, 0x0B4D, prExtend},                 // Mn       ORIYA SIGN VIRAMA\n\t{0x0B56, 0x0B56, prExtend},                 // Mn       ORIYA AI LENGTH MARK\n\t{0x0B57, 0x0B57, prExtend},                 // Mc       ORIYA AU LENGTH MARK\n\t{0x0B62, 0x0B63, prExtend},                 // Mn   [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL\n\t{0x0B82, 0x0B82, prExtend},                 // Mn       TAMIL SIGN ANUSVARA\n\t{0x0BBE, 0x0BBE, prExtend},                 // Mc       TAMIL VOWEL SIGN AA\n\t{0x0BBF, 0x0BBF, prSpacingMark},            // Mc       TAMIL VOWEL SIGN I\n\t{0x0BC0, 0x0BC0, prExtend},                 // Mn       TAMIL VOWEL SIGN II\n\t{0x0BC1, 0x0BC2, prSpacingMark},            // Mc   [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU\n\t{0x0BC6, 0x0BC8, prSpacingMark},            // Mc   [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI\n\t{0x0BCA, 0x0BCC, prSpacingMark},            // Mc   [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU\n\t{0x0BCD, 0x0BCD, prExtend},                 // Mn       TAMIL SIGN VIRAMA\n\t{0x0BD7, 0x0BD7, prExtend},                 // Mc       TAMIL AU LENGTH MARK\n\t{0x0C00, 0x0C00, prExtend},                 // Mn       TELUGU SIGN COMBINING CANDRABINDU ABOVE\n\t{0x0C01, 0x0C03, prSpacingMark},            // Mc   [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA\n\t{0x0C04, 0x0C04, prExtend},                 // Mn       TELUGU SIGN COMBINING ANUSVARA ABOVE\n\t{0x0C3E, 0x0C40, prExtend},                 // Mn   [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II\n\t{0x0C41, 0x0C44, prSpacingMark},            // Mc   [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR\n\t{0x0C46, 0x0C48, prExtend},                 // Mn   [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI\n\t{0x0C4A, 0x0C4D, prExtend},                 // Mn   [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA\n\t{0x0C55, 0x0C56, prExtend},                 // Mn   [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK\n\t{0x0C62, 0x0C63, prExtend},                 // Mn   [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL\n\t{0x0C81, 0x0C81, prExtend},                 // Mn       KANNADA SIGN CANDRABINDU\n\t{0x0C82, 0x0C83, prSpacingMark},            // Mc   [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA\n\t{0x0CBC, 0x0CBC, prExtend},                 // Mn       KANNADA SIGN NUKTA\n\t{0x0CBE, 0x0CBE, prSpacingMark},            // Mc       KANNADA VOWEL SIGN AA\n\t{0x0CBF, 0x0CBF, prExtend},                 // Mn       KANNADA VOWEL SIGN I\n\t{0x0CC0, 0x0CC1, prSpacingMark},            // Mc   [2] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN U\n\t{0x0CC2, 0x0CC2, prExtend},                 // Mc       KANNADA VOWEL SIGN UU\n\t{0x0CC3, 0x0CC4, prSpacingMark},            // Mc   [2] KANNADA VOWEL SIGN VOCALIC R..KANNADA VOWEL SIGN VOCALIC RR\n\t{0x0CC6, 0x0CC6, prExtend},                 // Mn       KANNADA VOWEL SIGN E\n\t{0x0CC7, 0x0CC8, prSpacingMark},            // Mc   [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI\n\t{0x0CCA, 0x0CCB, prSpacingMark},            // Mc   [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO\n\t{0x0CCC, 0x0CCD, prExtend},                 // Mn   [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA\n\t{0x0CD5, 0x0CD6, prExtend},                 // Mc   [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK\n\t{0x0CE2, 0x0CE3, prExtend},                 // Mn   [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL\n\t{0x0D00, 0x0D01, prExtend},                 // Mn   [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU\n\t{0x0D02, 0x0D03, prSpacingMark},            // Mc   [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA\n\t{0x0D3B, 0x0D3C, prExtend},                 // Mn   [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA\n\t{0x0D3E, 0x0D3E, prExtend},                 // Mc       MALAYALAM VOWEL SIGN AA\n\t{0x0D3F, 0x0D40, prSpacingMark},            // Mc   [2] MALAYALAM VOWEL SIGN I..MALAYALAM VOWEL SIGN II\n\t{0x0D41, 0x0D44, prExtend},                 // Mn   [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR\n\t{0x0D46, 0x0D48, prSpacingMark},            // Mc   [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI\n\t{0x0D4A, 0x0D4C, prSpacingMark},            // Mc   [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU\n\t{0x0D4D, 0x0D4D, prExtend},                 // Mn       MALAYALAM SIGN VIRAMA\n\t{0x0D4E, 0x0D4E, prPreprend},               // Lo       MALAYALAM LETTER DOT REPH\n\t{0x0D57, 0x0D57, prExtend},                 // Mc       MALAYALAM AU LENGTH MARK\n\t{0x0D62, 0x0D63, prExtend},                 // Mn   [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL\n\t{0x0D82, 0x0D83, prSpacingMark},            // Mc   [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA\n\t{0x0DCA, 0x0DCA, prExtend},                 // Mn       SINHALA SIGN AL-LAKUNA\n\t{0x0DCF, 0x0DCF, prExtend},                 // Mc       SINHALA VOWEL SIGN AELA-PILLA\n\t{0x0DD0, 0x0DD1, prSpacingMark},            // Mc   [2] SINHALA VOWEL SIGN KETTI AEDA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA\n\t{0x0DD2, 0x0DD4, prExtend},                 // Mn   [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA\n\t{0x0DD6, 0x0DD6, prExtend},                 // Mn       SINHALA VOWEL SIGN DIGA PAA-PILLA\n\t{0x0DD8, 0x0DDE, prSpacingMark},            // Mc   [7] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA\n\t{0x0DDF, 0x0DDF, prExtend},                 // Mc       SINHALA VOWEL SIGN GAYANUKITTA\n\t{0x0DF2, 0x0DF3, prSpacingMark},            // Mc   [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA\n\t{0x0E31, 0x0E31, prExtend},                 // Mn       THAI CHARACTER MAI HAN-AKAT\n\t{0x0E33, 0x0E33, prSpacingMark},            // Lo       THAI CHARACTER SARA AM\n\t{0x0E34, 0x0E3A, prExtend},                 // Mn   [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU\n\t{0x0E47, 0x0E4E, prExtend},                 // Mn   [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN\n\t{0x0EB1, 0x0EB1, prExtend},                 // Mn       LAO VOWEL SIGN MAI KAN\n\t{0x0EB3, 0x0EB3, prSpacingMark},            // Lo       LAO VOWEL SIGN AM\n\t{0x0EB4, 0x0EBC, prExtend},                 // Mn   [9] LAO VOWEL SIGN I..LAO SEMIVOWEL SIGN LO\n\t{0x0EC8, 0x0ECD, prExtend},                 // Mn   [6] LAO TONE MAI EK..LAO NIGGAHITA\n\t{0x0F18, 0x0F19, prExtend},                 // Mn   [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS\n\t{0x0F35, 0x0F35, prExtend},                 // Mn       TIBETAN MARK NGAS BZUNG NYI ZLA\n\t{0x0F37, 0x0F37, prExtend},                 // Mn       TIBETAN MARK NGAS BZUNG SGOR RTAGS\n\t{0x0F39, 0x0F39, prExtend},                 // Mn       TIBETAN MARK TSA -PHRU\n\t{0x0F3E, 0x0F3F, prSpacingMark},            // Mc   [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES\n\t{0x0F71, 0x0F7E, prExtend},                 // Mn  [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO\n\t{0x0F7F, 0x0F7F, prSpacingMark},            // Mc       TIBETAN SIGN RNAM BCAD\n\t{0x0F80, 0x0F84, prExtend},                 // Mn   [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA\n\t{0x0F86, 0x0F87, prExtend},                 // Mn   [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS\n\t{0x0F8D, 0x0F97, prExtend},                 // Mn  [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA\n\t{0x0F99, 0x0FBC, prExtend},                 // Mn  [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA\n\t{0x0FC6, 0x0FC6, prExtend},                 // Mn       TIBETAN SYMBOL PADMA GDAN\n\t{0x102D, 0x1030, prExtend},                 // Mn   [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU\n\t{0x1031, 0x1031, prSpacingMark},            // Mc       MYANMAR VOWEL SIGN E\n\t{0x1032, 0x1037, prExtend},                 // Mn   [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW\n\t{0x1039, 0x103A, prExtend},                 // Mn   [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT\n\t{0x103B, 0x103C, prSpacingMark},            // Mc   [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA\n\t{0x103D, 0x103E, prExtend},                 // Mn   [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA\n\t{0x1056, 0x1057, prSpacingMark},            // Mc   [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR\n\t{0x1058, 0x1059, prExtend},                 // Mn   [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL\n\t{0x105E, 0x1060, prExtend},                 // Mn   [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA\n\t{0x1071, 0x1074, prExtend},                 // Mn   [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE\n\t{0x1082, 0x1082, prExtend},                 // Mn       MYANMAR CONSONANT SIGN SHAN MEDIAL WA\n\t{0x1084, 0x1084, prSpacingMark},            // Mc       MYANMAR VOWEL SIGN SHAN E\n\t{0x1085, 0x1086, prExtend},                 // Mn   [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y\n\t{0x108D, 0x108D, prExtend},                 // Mn       MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE\n\t{0x109D, 0x109D, prExtend},                 // Mn       MYANMAR VOWEL SIGN AITON AI\n\t{0x1100, 0x115F, prL},                      // Lo  [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER\n\t{0x1160, 0x11A7, prV},                      // Lo  [72] HANGUL JUNGSEONG FILLER..HANGUL JUNGSEONG O-YAE\n\t{0x11A8, 0x11FF, prT},                      // Lo  [88] HANGUL JONGSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN\n\t{0x135D, 0x135F, prExtend},                 // Mn   [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK\n\t{0x1712, 0x1714, prExtend},                 // Mn   [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA\n\t{0x1732, 0x1734, prExtend},                 // Mn   [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD\n\t{0x1752, 0x1753, prExtend},                 // Mn   [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U\n\t{0x1772, 0x1773, prExtend},                 // Mn   [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U\n\t{0x17B4, 0x17B5, prExtend},                 // Mn   [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA\n\t{0x17B6, 0x17B6, prSpacingMark},            // Mc       KHMER VOWEL SIGN AA\n\t{0x17B7, 0x17BD, prExtend},                 // Mn   [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA\n\t{0x17BE, 0x17C5, prSpacingMark},            // Mc   [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU\n\t{0x17C6, 0x17C6, prExtend},                 // Mn       KHMER SIGN NIKAHIT\n\t{0x17C7, 0x17C8, prSpacingMark},            // Mc   [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU\n\t{0x17C9, 0x17D3, prExtend},                 // Mn  [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT\n\t{0x17DD, 0x17DD, prExtend},                 // Mn       KHMER SIGN ATTHACAN\n\t{0x180B, 0x180D, prExtend},                 // Mn   [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE\n\t{0x180E, 0x180E, prControl},                // Cf       MONGOLIAN VOWEL SEPARATOR\n\t{0x1885, 0x1886, prExtend},                 // Mn   [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA\n\t{0x18A9, 0x18A9, prExtend},                 // Mn       MONGOLIAN LETTER ALI GALI DAGALGA\n\t{0x1920, 0x1922, prExtend},                 // Mn   [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U\n\t{0x1923, 0x1926, prSpacingMark},            // Mc   [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU\n\t{0x1927, 0x1928, prExtend},                 // Mn   [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O\n\t{0x1929, 0x192B, prSpacingMark},            // Mc   [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA\n\t{0x1930, 0x1931, prSpacingMark},            // Mc   [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA\n\t{0x1932, 0x1932, prExtend},                 // Mn       LIMBU SMALL LETTER ANUSVARA\n\t{0x1933, 0x1938, prSpacingMark},            // Mc   [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA\n\t{0x1939, 0x193B, prExtend},                 // Mn   [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I\n\t{0x1A17, 0x1A18, prExtend},                 // Mn   [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U\n\t{0x1A19, 0x1A1A, prSpacingMark},            // Mc   [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O\n\t{0x1A1B, 0x1A1B, prExtend},                 // Mn       BUGINESE VOWEL SIGN AE\n\t{0x1A55, 0x1A55, prSpacingMark},            // Mc       TAI THAM CONSONANT SIGN MEDIAL RA\n\t{0x1A56, 0x1A56, prExtend},                 // Mn       TAI THAM CONSONANT SIGN MEDIAL LA\n\t{0x1A57, 0x1A57, prSpacingMark},            // Mc       TAI THAM CONSONANT SIGN LA TANG LAI\n\t{0x1A58, 0x1A5E, prExtend},                 // Mn   [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA\n\t{0x1A60, 0x1A60, prExtend},                 // Mn       TAI THAM SIGN SAKOT\n\t{0x1A62, 0x1A62, prExtend},                 // Mn       TAI THAM VOWEL SIGN MAI SAT\n\t{0x1A65, 0x1A6C, prExtend},                 // Mn   [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW\n\t{0x1A6D, 0x1A72, prSpacingMark},            // Mc   [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI\n\t{0x1A73, 0x1A7C, prExtend},                 // Mn  [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN\n\t{0x1A7F, 0x1A7F, prExtend},                 // Mn       TAI THAM COMBINING CRYPTOGRAMMIC DOT\n\t{0x1AB0, 0x1ABD, prExtend},                 // Mn  [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW\n\t{0x1ABE, 0x1ABE, prExtend},                 // Me       COMBINING PARENTHESES OVERLAY\n\t{0x1B00, 0x1B03, prExtend},                 // Mn   [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG\n\t{0x1B04, 0x1B04, prSpacingMark},            // Mc       BALINESE SIGN BISAH\n\t{0x1B34, 0x1B34, prExtend},                 // Mn       BALINESE SIGN REREKAN\n\t{0x1B35, 0x1B35, prExtend},                 // Mc       BALINESE VOWEL SIGN TEDUNG\n\t{0x1B36, 0x1B3A, prExtend},                 // Mn   [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA\n\t{0x1B3B, 0x1B3B, prSpacingMark},            // Mc       BALINESE VOWEL SIGN RA REPA TEDUNG\n\t{0x1B3C, 0x1B3C, prExtend},                 // Mn       BALINESE VOWEL SIGN LA LENGA\n\t{0x1B3D, 0x1B41, prSpacingMark},            // Mc   [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG\n\t{0x1B42, 0x1B42, prExtend},                 // Mn       BALINESE VOWEL SIGN PEPET\n\t{0x1B43, 0x1B44, prSpacingMark},            // Mc   [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG\n\t{0x1B6B, 0x1B73, prExtend},                 // Mn   [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG\n\t{0x1B80, 0x1B81, prExtend},                 // Mn   [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR\n\t{0x1B82, 0x1B82, prSpacingMark},            // Mc       SUNDANESE SIGN PANGWISAD\n\t{0x1BA1, 0x1BA1, prSpacingMark},            // Mc       SUNDANESE CONSONANT SIGN PAMINGKAL\n\t{0x1BA2, 0x1BA5, prExtend},                 // Mn   [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU\n\t{0x1BA6, 0x1BA7, prSpacingMark},            // Mc   [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG\n\t{0x1BA8, 0x1BA9, prExtend},                 // Mn   [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG\n\t{0x1BAA, 0x1BAA, prSpacingMark},            // Mc       SUNDANESE SIGN PAMAAEH\n\t{0x1BAB, 0x1BAD, prExtend},                 // Mn   [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA\n\t{0x1BE6, 0x1BE6, prExtend},                 // Mn       BATAK SIGN TOMPI\n\t{0x1BE7, 0x1BE7, prSpacingMark},            // Mc       BATAK VOWEL SIGN E\n\t{0x1BE8, 0x1BE9, prExtend},                 // Mn   [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE\n\t{0x1BEA, 0x1BEC, prSpacingMark},            // Mc   [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O\n\t{0x1BED, 0x1BED, prExtend},                 // Mn       BATAK VOWEL SIGN KARO O\n\t{0x1BEE, 0x1BEE, prSpacingMark},            // Mc       BATAK VOWEL SIGN U\n\t{0x1BEF, 0x1BF1, prExtend},                 // Mn   [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H\n\t{0x1BF2, 0x1BF3, prSpacingMark},            // Mc   [2] BATAK PANGOLAT..BATAK PANONGONAN\n\t{0x1C24, 0x1C2B, prSpacingMark},            // Mc   [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU\n\t{0x1C2C, 0x1C33, prExtend},                 // Mn   [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T\n\t{0x1C34, 0x1C35, prSpacingMark},            // Mc   [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG\n\t{0x1C36, 0x1C37, prExtend},                 // Mn   [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA\n\t{0x1CD0, 0x1CD2, prExtend},                 // Mn   [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA\n\t{0x1CD4, 0x1CE0, prExtend},                 // Mn  [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA\n\t{0x1CE1, 0x1CE1, prSpacingMark},            // Mc       VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA\n\t{0x1CE2, 0x1CE8, prExtend},                 // Mn   [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL\n\t{0x1CED, 0x1CED, prExtend},                 // Mn       VEDIC SIGN TIRYAK\n\t{0x1CF4, 0x1CF4, prExtend},                 // Mn       VEDIC TONE CANDRA ABOVE\n\t{0x1CF7, 0x1CF7, prSpacingMark},            // Mc       VEDIC SIGN ATIKRAMA\n\t{0x1CF8, 0x1CF9, prExtend},                 // Mn   [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE\n\t{0x1DC0, 0x1DF9, prExtend},                 // Mn  [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW\n\t{0x1DFB, 0x1DFF, prExtend},                 // Mn   [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW\n\t{0x200B, 0x200B, prControl},                // Cf       ZERO WIDTH SPACE\n\t{0x200C, 0x200C, prExtend},                 // Cf       ZERO WIDTH NON-JOINER\n\t{0x200D, 0x200D, prZWJ},                    // Cf       ZERO WIDTH JOINER\n\t{0x200E, 0x200F, prControl},                // Cf   [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK\n\t{0x2028, 0x2028, prControl},                // Zl       LINE SEPARATOR\n\t{0x2029, 0x2029, prControl},                // Zp       PARAGRAPH SEPARATOR\n\t{0x202A, 0x202E, prControl},                // Cf   [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE\n\t{0x203C, 0x203C, prExtendedPictographic},   //  1.1  [1] (‼️)       double exclamation mark\n\t{0x2049, 0x2049, prExtendedPictographic},   //  3.0  [1] (⁉️)       exclamation question mark\n\t{0x2060, 0x2064, prControl},                // Cf   [5] WORD JOINER..INVISIBLE PLUS\n\t{0x2065, 0x2065, prControl},                // Cn       <reserved-2065>\n\t{0x2066, 0x206F, prControl},                // Cf  [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES\n\t{0x20D0, 0x20DC, prExtend},                 // Mn  [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE\n\t{0x20DD, 0x20E0, prExtend},                 // Me   [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH\n\t{0x20E1, 0x20E1, prExtend},                 // Mn       COMBINING LEFT RIGHT ARROW ABOVE\n\t{0x20E2, 0x20E4, prExtend},                 // Me   [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE\n\t{0x20E5, 0x20F0, prExtend},                 // Mn  [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE\n\t{0x2122, 0x2122, prExtendedPictographic},   //  1.1  [1] (™️)       trade mark\n\t{0x2139, 0x2139, prExtendedPictographic},   //  3.0  [1] (ℹ️)       information\n\t{0x2194, 0x2199, prExtendedPictographic},   //  1.1  [6] (↔️..↙️)    left-right arrow..down-left arrow\n\t{0x21A9, 0x21AA, prExtendedPictographic},   //  1.1  [2] (↩️..↪️)    right arrow curving left..left arrow curving right\n\t{0x231A, 0x231B, prExtendedPictographic},   //  1.1  [2] (⌚..⌛)    watch..hourglass done\n\t{0x2328, 0x2328, prExtendedPictographic},   //  1.1  [1] (⌨️)       keyboard\n\t{0x2388, 0x2388, prExtendedPictographic},   //  3.0  [1] (⎈)       HELM SYMBOL\n\t{0x23CF, 0x23CF, prExtendedPictographic},   //  4.0  [1] (⏏️)       eject button\n\t{0x23E9, 0x23F3, prExtendedPictographic},   //  6.0 [11] (⏩..⏳)    fast-forward button..hourglass not done\n\t{0x23F8, 0x23FA, prExtendedPictographic},   //  7.0  [3] (⏸️..⏺️)    pause button..record button\n\t{0x24C2, 0x24C2, prExtendedPictographic},   //  1.1  [1] (Ⓜ️)       circled M\n\t{0x25AA, 0x25AB, prExtendedPictographic},   //  1.1  [2] (▪️..▫️)    black small square..white small square\n\t{0x25B6, 0x25B6, prExtendedPictographic},   //  1.1  [1] (▶️)       play button\n\t{0x25C0, 0x25C0, prExtendedPictographic},   //  1.1  [1] (◀️)       reverse button\n\t{0x25FB, 0x25FE, prExtendedPictographic},   //  3.2  [4] (◻️..◾)    white medium square..black medium-small square\n\t{0x2600, 0x2605, prExtendedPictographic},   //  1.1  [6] (☀️..★)    sun..BLACK STAR\n\t{0x2607, 0x2612, prExtendedPictographic},   //  1.1 [12] (☇..☒)    LIGHTNING..BALLOT BOX WITH X\n\t{0x2614, 0x2615, prExtendedPictographic},   //  4.0  [2] (☔..☕)    umbrella with rain drops..hot beverage\n\t{0x2616, 0x2617, prExtendedPictographic},   //  3.2  [2] (☖..☗)    WHITE SHOGI PIECE..BLACK SHOGI PIECE\n\t{0x2618, 0x2618, prExtendedPictographic},   //  4.1  [1] (☘️)       shamrock\n\t{0x2619, 0x2619, prExtendedPictographic},   //  3.0  [1] (☙)       REVERSED ROTATED FLORAL HEART BULLET\n\t{0x261A, 0x266F, prExtendedPictographic},   //  1.1 [86] (☚..♯)    BLACK LEFT POINTING INDEX..MUSIC SHARP SIGN\n\t{0x2670, 0x2671, prExtendedPictographic},   //  3.0  [2] (♰..♱)    WEST SYRIAC CROSS..EAST SYRIAC CROSS\n\t{0x2672, 0x267D, prExtendedPictographic},   //  3.2 [12] (♲..♽)    UNIVERSAL RECYCLING SYMBOL..PARTIALLY-RECYCLED PAPER SYMBOL\n\t{0x267E, 0x267F, prExtendedPictographic},   //  4.1  [2] (♾️..♿)    infinity..wheelchair symbol\n\t{0x2680, 0x2685, prExtendedPictographic},   //  3.2  [6] (⚀..⚅)    DIE FACE-1..DIE FACE-6\n\t{0x2690, 0x2691, prExtendedPictographic},   //  4.0  [2] (⚐..⚑)    WHITE FLAG..BLACK FLAG\n\t{0x2692, 0x269C, prExtendedPictographic},   //  4.1 [11] (⚒️..⚜️)    hammer and pick..fleur-de-lis\n\t{0x269D, 0x269D, prExtendedPictographic},   //  5.1  [1] (⚝)       OUTLINED WHITE STAR\n\t{0x269E, 0x269F, prExtendedPictographic},   //  5.2  [2] (⚞..⚟)    THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT\n\t{0x26A0, 0x26A1, prExtendedPictographic},   //  4.0  [2] (⚠️..⚡)    warning..high voltage\n\t{0x26A2, 0x26B1, prExtendedPictographic},   //  4.1 [16] (⚢..⚱️)    DOUBLED FEMALE SIGN..funeral urn\n\t{0x26B2, 0x26B2, prExtendedPictographic},   //  5.0  [1] (⚲)       NEUTER\n\t{0x26B3, 0x26BC, prExtendedPictographic},   //  5.1 [10] (⚳..⚼)    CERES..SESQUIQUADRATE\n\t{0x26BD, 0x26BF, prExtendedPictographic},   //  5.2  [3] (⚽..⚿)    soccer ball..SQUARED KEY\n\t{0x26C0, 0x26C3, prExtendedPictographic},   //  5.1  [4] (⛀..⛃)    WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING\n\t{0x26C4, 0x26CD, prExtendedPictographic},   //  5.2 [10] (⛄..⛍)    snowman without snow..DISABLED CAR\n\t{0x26CE, 0x26CE, prExtendedPictographic},   //  6.0  [1] (⛎)       Ophiuchus\n\t{0x26CF, 0x26E1, prExtendedPictographic},   //  5.2 [19] (⛏️..⛡)    pick..RESTRICTED LEFT ENTRY-2\n\t{0x26E2, 0x26E2, prExtendedPictographic},   //  6.0  [1] (⛢)       ASTRONOMICAL SYMBOL FOR URANUS\n\t{0x26E3, 0x26E3, prExtendedPictographic},   //  5.2  [1] (⛣)       HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE\n\t{0x26E4, 0x26E7, prExtendedPictographic},   //  6.0  [4] (⛤..⛧)    PENTAGRAM..INVERTED PENTAGRAM\n\t{0x26E8, 0x26FF, prExtendedPictographic},   //  5.2 [24] (⛨..⛿)    BLACK CROSS ON SHIELD..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE\n\t{0x2700, 0x2700, prExtendedPictographic},   //  7.0  [1] (✀)       BLACK SAFETY SCISSORS\n\t{0x2701, 0x2704, prExtendedPictographic},   //  1.1  [4] (✁..✄)    UPPER BLADE SCISSORS..WHITE SCISSORS\n\t{0x2705, 0x2705, prExtendedPictographic},   //  6.0  [1] (✅)       check mark button\n\t{0x2708, 0x2709, prExtendedPictographic},   //  1.1  [2] (✈️..✉️)    airplane..envelope\n\t{0x270A, 0x270B, prExtendedPictographic},   //  6.0  [2] (✊..✋)    raised fist..raised hand\n\t{0x270C, 0x2712, prExtendedPictographic},   //  1.1  [7] (✌️..✒️)    victory hand..black nib\n\t{0x2714, 0x2714, prExtendedPictographic},   //  1.1  [1] (✔️)       check mark\n\t{0x2716, 0x2716, prExtendedPictographic},   //  1.1  [1] (✖️)       multiplication sign\n\t{0x271D, 0x271D, prExtendedPictographic},   //  1.1  [1] (✝️)       latin cross\n\t{0x2721, 0x2721, prExtendedPictographic},   //  1.1  [1] (✡️)       star of David\n\t{0x2728, 0x2728, prExtendedPictographic},   //  6.0  [1] (✨)       sparkles\n\t{0x2733, 0x2734, prExtendedPictographic},   //  1.1  [2] (✳️..✴️)    eight-spoked asterisk..eight-pointed star\n\t{0x2744, 0x2744, prExtendedPictographic},   //  1.1  [1] (❄️)       snowflake\n\t{0x2747, 0x2747, prExtendedPictographic},   //  1.1  [1] (❇️)       sparkle\n\t{0x274C, 0x274C, prExtendedPictographic},   //  6.0  [1] (❌)       cross mark\n\t{0x274E, 0x274E, prExtendedPictographic},   //  6.0  [1] (❎)       cross mark button\n\t{0x2753, 0x2755, prExtendedPictographic},   //  6.0  [3] (❓..❕)    question mark..white exclamation mark\n\t{0x2757, 0x2757, prExtendedPictographic},   //  5.2  [1] (❗)       exclamation mark\n\t{0x2763, 0x2767, prExtendedPictographic},   //  1.1  [5] (❣️..❧)    heart exclamation..ROTATED FLORAL HEART BULLET\n\t{0x2795, 0x2797, prExtendedPictographic},   //  6.0  [3] (➕..➗)    plus sign..division sign\n\t{0x27A1, 0x27A1, prExtendedPictographic},   //  1.1  [1] (➡️)       right arrow\n\t{0x27B0, 0x27B0, prExtendedPictographic},   //  6.0  [1] (➰)       curly loop\n\t{0x27BF, 0x27BF, prExtendedPictographic},   //  6.0  [1] (➿)       double curly loop\n\t{0x2934, 0x2935, prExtendedPictographic},   //  3.2  [2] (⤴️..⤵️)    right arrow curving up..right arrow curving down\n\t{0x2B05, 0x2B07, prExtendedPictographic},   //  4.0  [3] (⬅️..⬇️)    left arrow..down arrow\n\t{0x2B1B, 0x2B1C, prExtendedPictographic},   //  5.1  [2] (⬛..⬜)    black large square..white large square\n\t{0x2B50, 0x2B50, prExtendedPictographic},   //  5.1  [1] (⭐)       star\n\t{0x2B55, 0x2B55, prExtendedPictographic},   //  5.2  [1] (⭕)       hollow red circle\n\t{0x2CEF, 0x2CF1, prExtend},                 // Mn   [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS\n\t{0x2D7F, 0x2D7F, prExtend},                 // Mn       TIFINAGH CONSONANT JOINER\n\t{0x2DE0, 0x2DFF, prExtend},                 // Mn  [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS\n\t{0x302A, 0x302D, prExtend},                 // Mn   [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK\n\t{0x302E, 0x302F, prExtend},                 // Mc   [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK\n\t{0x3030, 0x3030, prExtendedPictographic},   //  1.1  [1] (〰️)       wavy dash\n\t{0x303D, 0x303D, prExtendedPictographic},   //  3.2  [1] (〽️)       part alternation mark\n\t{0x3099, 0x309A, prExtend},                 // Mn   [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK\n\t{0x3297, 0x3297, prExtendedPictographic},   //  1.1  [1] (㊗️)       Japanese “congratulations” button\n\t{0x3299, 0x3299, prExtendedPictographic},   //  1.1  [1] (㊙️)       Japanese “secret” button\n\t{0xA66F, 0xA66F, prExtend},                 // Mn       COMBINING CYRILLIC VZMET\n\t{0xA670, 0xA672, prExtend},                 // Me   [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN\n\t{0xA674, 0xA67D, prExtend},                 // Mn  [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK\n\t{0xA69E, 0xA69F, prExtend},                 // Mn   [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E\n\t{0xA6F0, 0xA6F1, prExtend},                 // Mn   [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS\n\t{0xA802, 0xA802, prExtend},                 // Mn       SYLOTI NAGRI SIGN DVISVARA\n\t{0xA806, 0xA806, prExtend},                 // Mn       SYLOTI NAGRI SIGN HASANTA\n\t{0xA80B, 0xA80B, prExtend},                 // Mn       SYLOTI NAGRI SIGN ANUSVARA\n\t{0xA823, 0xA824, prSpacingMark},            // Mc   [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I\n\t{0xA825, 0xA826, prExtend},                 // Mn   [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E\n\t{0xA827, 0xA827, prSpacingMark},            // Mc       SYLOTI NAGRI VOWEL SIGN OO\n\t{0xA880, 0xA881, prSpacingMark},            // Mc   [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA\n\t{0xA8B4, 0xA8C3, prSpacingMark},            // Mc  [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU\n\t{0xA8C4, 0xA8C5, prExtend},                 // Mn   [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU\n\t{0xA8E0, 0xA8F1, prExtend},                 // Mn  [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA\n\t{0xA8FF, 0xA8FF, prExtend},                 // Mn       DEVANAGARI VOWEL SIGN AY\n\t{0xA926, 0xA92D, prExtend},                 // Mn   [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU\n\t{0xA947, 0xA951, prExtend},                 // Mn  [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R\n\t{0xA952, 0xA953, prSpacingMark},            // Mc   [2] REJANG CONSONANT SIGN H..REJANG VIRAMA\n\t{0xA960, 0xA97C, prL},                      // Lo  [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH\n\t{0xA980, 0xA982, prExtend},                 // Mn   [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR\n\t{0xA983, 0xA983, prSpacingMark},            // Mc       JAVANESE SIGN WIGNYAN\n\t{0xA9B3, 0xA9B3, prExtend},                 // Mn       JAVANESE SIGN CECAK TELU\n\t{0xA9B4, 0xA9B5, prSpacingMark},            // Mc   [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG\n\t{0xA9B6, 0xA9B9, prExtend},                 // Mn   [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT\n\t{0xA9BA, 0xA9BB, prSpacingMark},            // Mc   [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE\n\t{0xA9BC, 0xA9BD, prExtend},                 // Mn   [2] JAVANESE VOWEL SIGN PEPET..JAVANESE CONSONANT SIGN KERET\n\t{0xA9BE, 0xA9C0, prSpacingMark},            // Mc   [3] JAVANESE CONSONANT SIGN PENGKAL..JAVANESE PANGKON\n\t{0xA9E5, 0xA9E5, prExtend},                 // Mn       MYANMAR SIGN SHAN SAW\n\t{0xAA29, 0xAA2E, prExtend},                 // Mn   [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE\n\t{0xAA2F, 0xAA30, prSpacingMark},            // Mc   [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI\n\t{0xAA31, 0xAA32, prExtend},                 // Mn   [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE\n\t{0xAA33, 0xAA34, prSpacingMark},            // Mc   [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA\n\t{0xAA35, 0xAA36, prExtend},                 // Mn   [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA\n\t{0xAA43, 0xAA43, prExtend},                 // Mn       CHAM CONSONANT SIGN FINAL NG\n\t{0xAA4C, 0xAA4C, prExtend},                 // Mn       CHAM CONSONANT SIGN FINAL M\n\t{0xAA4D, 0xAA4D, prSpacingMark},            // Mc       CHAM CONSONANT SIGN FINAL H\n\t{0xAA7C, 0xAA7C, prExtend},                 // Mn       MYANMAR SIGN TAI LAING TONE-2\n\t{0xAAB0, 0xAAB0, prExtend},                 // Mn       TAI VIET MAI KANG\n\t{0xAAB2, 0xAAB4, prExtend},                 // Mn   [3] TAI VIET VOWEL I..TAI VIET VOWEL U\n\t{0xAAB7, 0xAAB8, prExtend},                 // Mn   [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA\n\t{0xAABE, 0xAABF, prExtend},                 // Mn   [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK\n\t{0xAAC1, 0xAAC1, prExtend},                 // Mn       TAI VIET TONE MAI THO\n\t{0xAAEB, 0xAAEB, prSpacingMark},            // Mc       MEETEI MAYEK VOWEL SIGN II\n\t{0xAAEC, 0xAAED, prExtend},                 // Mn   [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI\n\t{0xAAEE, 0xAAEF, prSpacingMark},            // Mc   [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU\n\t{0xAAF5, 0xAAF5, prSpacingMark},            // Mc       MEETEI MAYEK VOWEL SIGN VISARGA\n\t{0xAAF6, 0xAAF6, prExtend},                 // Mn       MEETEI MAYEK VIRAMA\n\t{0xABE3, 0xABE4, prSpacingMark},            // Mc   [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP\n\t{0xABE5, 0xABE5, prExtend},                 // Mn       MEETEI MAYEK VOWEL SIGN ANAP\n\t{0xABE6, 0xABE7, prSpacingMark},            // Mc   [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP\n\t{0xABE8, 0xABE8, prExtend},                 // Mn       MEETEI MAYEK VOWEL SIGN UNAP\n\t{0xABE9, 0xABEA, prSpacingMark},            // Mc   [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG\n\t{0xABEC, 0xABEC, prSpacingMark},            // Mc       MEETEI MAYEK LUM IYEK\n\t{0xABED, 0xABED, prExtend},                 // Mn       MEETEI MAYEK APUN IYEK\n\t{0xAC00, 0xAC00, prLV},                     // Lo       HANGUL SYLLABLE GA\n\t{0xAC01, 0xAC1B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GAG..HANGUL SYLLABLE GAH\n\t{0xAC1C, 0xAC1C, prLV},                     // Lo       HANGUL SYLLABLE GAE\n\t{0xAC1D, 0xAC37, prLVT},                    // Lo  [27] HANGUL SYLLABLE GAEG..HANGUL SYLLABLE GAEH\n\t{0xAC38, 0xAC38, prLV},                     // Lo       HANGUL SYLLABLE GYA\n\t{0xAC39, 0xAC53, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYAG..HANGUL SYLLABLE GYAH\n\t{0xAC54, 0xAC54, prLV},                     // Lo       HANGUL SYLLABLE GYAE\n\t{0xAC55, 0xAC6F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYAEG..HANGUL SYLLABLE GYAEH\n\t{0xAC70, 0xAC70, prLV},                     // Lo       HANGUL SYLLABLE GEO\n\t{0xAC71, 0xAC8B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GEOG..HANGUL SYLLABLE GEOH\n\t{0xAC8C, 0xAC8C, prLV},                     // Lo       HANGUL SYLLABLE GE\n\t{0xAC8D, 0xACA7, prLVT},                    // Lo  [27] HANGUL SYLLABLE GEG..HANGUL SYLLABLE GEH\n\t{0xACA8, 0xACA8, prLV},                     // Lo       HANGUL SYLLABLE GYEO\n\t{0xACA9, 0xACC3, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYEOG..HANGUL SYLLABLE GYEOH\n\t{0xACC4, 0xACC4, prLV},                     // Lo       HANGUL SYLLABLE GYE\n\t{0xACC5, 0xACDF, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYEG..HANGUL SYLLABLE GYEH\n\t{0xACE0, 0xACE0, prLV},                     // Lo       HANGUL SYLLABLE GO\n\t{0xACE1, 0xACFB, prLVT},                    // Lo  [27] HANGUL SYLLABLE GOG..HANGUL SYLLABLE GOH\n\t{0xACFC, 0xACFC, prLV},                     // Lo       HANGUL SYLLABLE GWA\n\t{0xACFD, 0xAD17, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWAG..HANGUL SYLLABLE GWAH\n\t{0xAD18, 0xAD18, prLV},                     // Lo       HANGUL SYLLABLE GWAE\n\t{0xAD19, 0xAD33, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWAEG..HANGUL SYLLABLE GWAEH\n\t{0xAD34, 0xAD34, prLV},                     // Lo       HANGUL SYLLABLE GOE\n\t{0xAD35, 0xAD4F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GOEG..HANGUL SYLLABLE GOEH\n\t{0xAD50, 0xAD50, prLV},                     // Lo       HANGUL SYLLABLE GYO\n\t{0xAD51, 0xAD6B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYOG..HANGUL SYLLABLE GYOH\n\t{0xAD6C, 0xAD6C, prLV},                     // Lo       HANGUL SYLLABLE GU\n\t{0xAD6D, 0xAD87, prLVT},                    // Lo  [27] HANGUL SYLLABLE GUG..HANGUL SYLLABLE GUH\n\t{0xAD88, 0xAD88, prLV},                     // Lo       HANGUL SYLLABLE GWEO\n\t{0xAD89, 0xADA3, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWEOG..HANGUL SYLLABLE GWEOH\n\t{0xADA4, 0xADA4, prLV},                     // Lo       HANGUL SYLLABLE GWE\n\t{0xADA5, 0xADBF, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWEG..HANGUL SYLLABLE GWEH\n\t{0xADC0, 0xADC0, prLV},                     // Lo       HANGUL SYLLABLE GWI\n\t{0xADC1, 0xADDB, prLVT},                    // Lo  [27] HANGUL SYLLABLE GWIG..HANGUL SYLLABLE GWIH\n\t{0xADDC, 0xADDC, prLV},                     // Lo       HANGUL SYLLABLE GYU\n\t{0xADDD, 0xADF7, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYUG..HANGUL SYLLABLE GYUH\n\t{0xADF8, 0xADF8, prLV},                     // Lo       HANGUL SYLLABLE GEU\n\t{0xADF9, 0xAE13, prLVT},                    // Lo  [27] HANGUL SYLLABLE GEUG..HANGUL SYLLABLE GEUH\n\t{0xAE14, 0xAE14, prLV},                     // Lo       HANGUL SYLLABLE GYI\n\t{0xAE15, 0xAE2F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GYIG..HANGUL SYLLABLE GYIH\n\t{0xAE30, 0xAE30, prLV},                     // Lo       HANGUL SYLLABLE GI\n\t{0xAE31, 0xAE4B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GIG..HANGUL SYLLABLE GIH\n\t{0xAE4C, 0xAE4C, prLV},                     // Lo       HANGUL SYLLABLE GGA\n\t{0xAE4D, 0xAE67, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGAG..HANGUL SYLLABLE GGAH\n\t{0xAE68, 0xAE68, prLV},                     // Lo       HANGUL SYLLABLE GGAE\n\t{0xAE69, 0xAE83, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGAEG..HANGUL SYLLABLE GGAEH\n\t{0xAE84, 0xAE84, prLV},                     // Lo       HANGUL SYLLABLE GGYA\n\t{0xAE85, 0xAE9F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYAG..HANGUL SYLLABLE GGYAH\n\t{0xAEA0, 0xAEA0, prLV},                     // Lo       HANGUL SYLLABLE GGYAE\n\t{0xAEA1, 0xAEBB, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYAEG..HANGUL SYLLABLE GGYAEH\n\t{0xAEBC, 0xAEBC, prLV},                     // Lo       HANGUL SYLLABLE GGEO\n\t{0xAEBD, 0xAED7, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGEOG..HANGUL SYLLABLE GGEOH\n\t{0xAED8, 0xAED8, prLV},                     // Lo       HANGUL SYLLABLE GGE\n\t{0xAED9, 0xAEF3, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGEG..HANGUL SYLLABLE GGEH\n\t{0xAEF4, 0xAEF4, prLV},                     // Lo       HANGUL SYLLABLE GGYEO\n\t{0xAEF5, 0xAF0F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYEOG..HANGUL SYLLABLE GGYEOH\n\t{0xAF10, 0xAF10, prLV},                     // Lo       HANGUL SYLLABLE GGYE\n\t{0xAF11, 0xAF2B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYEG..HANGUL SYLLABLE GGYEH\n\t{0xAF2C, 0xAF2C, prLV},                     // Lo       HANGUL SYLLABLE GGO\n\t{0xAF2D, 0xAF47, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGOG..HANGUL SYLLABLE GGOH\n\t{0xAF48, 0xAF48, prLV},                     // Lo       HANGUL SYLLABLE GGWA\n\t{0xAF49, 0xAF63, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWAG..HANGUL SYLLABLE GGWAH\n\t{0xAF64, 0xAF64, prLV},                     // Lo       HANGUL SYLLABLE GGWAE\n\t{0xAF65, 0xAF7F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWAEG..HANGUL SYLLABLE GGWAEH\n\t{0xAF80, 0xAF80, prLV},                     // Lo       HANGUL SYLLABLE GGOE\n\t{0xAF81, 0xAF9B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGOEG..HANGUL SYLLABLE GGOEH\n\t{0xAF9C, 0xAF9C, prLV},                     // Lo       HANGUL SYLLABLE GGYO\n\t{0xAF9D, 0xAFB7, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYOG..HANGUL SYLLABLE GGYOH\n\t{0xAFB8, 0xAFB8, prLV},                     // Lo       HANGUL SYLLABLE GGU\n\t{0xAFB9, 0xAFD3, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGUG..HANGUL SYLLABLE GGUH\n\t{0xAFD4, 0xAFD4, prLV},                     // Lo       HANGUL SYLLABLE GGWEO\n\t{0xAFD5, 0xAFEF, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWEOG..HANGUL SYLLABLE GGWEOH\n\t{0xAFF0, 0xAFF0, prLV},                     // Lo       HANGUL SYLLABLE GGWE\n\t{0xAFF1, 0xB00B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWEG..HANGUL SYLLABLE GGWEH\n\t{0xB00C, 0xB00C, prLV},                     // Lo       HANGUL SYLLABLE GGWI\n\t{0xB00D, 0xB027, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGWIG..HANGUL SYLLABLE GGWIH\n\t{0xB028, 0xB028, prLV},                     // Lo       HANGUL SYLLABLE GGYU\n\t{0xB029, 0xB043, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYUG..HANGUL SYLLABLE GGYUH\n\t{0xB044, 0xB044, prLV},                     // Lo       HANGUL SYLLABLE GGEU\n\t{0xB045, 0xB05F, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGEUG..HANGUL SYLLABLE GGEUH\n\t{0xB060, 0xB060, prLV},                     // Lo       HANGUL SYLLABLE GGYI\n\t{0xB061, 0xB07B, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGYIG..HANGUL SYLLABLE GGYIH\n\t{0xB07C, 0xB07C, prLV},                     // Lo       HANGUL SYLLABLE GGI\n\t{0xB07D, 0xB097, prLVT},                    // Lo  [27] HANGUL SYLLABLE GGIG..HANGUL SYLLABLE GGIH\n\t{0xB098, 0xB098, prLV},                     // Lo       HANGUL SYLLABLE NA\n\t{0xB099, 0xB0B3, prLVT},                    // Lo  [27] HANGUL SYLLABLE NAG..HANGUL SYLLABLE NAH\n\t{0xB0B4, 0xB0B4, prLV},                     // Lo       HANGUL SYLLABLE NAE\n\t{0xB0B5, 0xB0CF, prLVT},                    // Lo  [27] HANGUL SYLLABLE NAEG..HANGUL SYLLABLE NAEH\n\t{0xB0D0, 0xB0D0, prLV},                     // Lo       HANGUL SYLLABLE NYA\n\t{0xB0D1, 0xB0EB, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYAG..HANGUL SYLLABLE NYAH\n\t{0xB0EC, 0xB0EC, prLV},                     // Lo       HANGUL SYLLABLE NYAE\n\t{0xB0ED, 0xB107, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYAEG..HANGUL SYLLABLE NYAEH\n\t{0xB108, 0xB108, prLV},                     // Lo       HANGUL SYLLABLE NEO\n\t{0xB109, 0xB123, prLVT},                    // Lo  [27] HANGUL SYLLABLE NEOG..HANGUL SYLLABLE NEOH\n\t{0xB124, 0xB124, prLV},                     // Lo       HANGUL SYLLABLE NE\n\t{0xB125, 0xB13F, prLVT},                    // Lo  [27] HANGUL SYLLABLE NEG..HANGUL SYLLABLE NEH\n\t{0xB140, 0xB140, prLV},                     // Lo       HANGUL SYLLABLE NYEO\n\t{0xB141, 0xB15B, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYEOG..HANGUL SYLLABLE NYEOH\n\t{0xB15C, 0xB15C, prLV},                     // Lo       HANGUL SYLLABLE NYE\n\t{0xB15D, 0xB177, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYEG..HANGUL SYLLABLE NYEH\n\t{0xB178, 0xB178, prLV},                     // Lo       HANGUL SYLLABLE NO\n\t{0xB179, 0xB193, prLVT},                    // Lo  [27] HANGUL SYLLABLE NOG..HANGUL SYLLABLE NOH\n\t{0xB194, 0xB194, prLV},                     // Lo       HANGUL SYLLABLE NWA\n\t{0xB195, 0xB1AF, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWAG..HANGUL SYLLABLE NWAH\n\t{0xB1B0, 0xB1B0, prLV},                     // Lo       HANGUL SYLLABLE NWAE\n\t{0xB1B1, 0xB1CB, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWAEG..HANGUL SYLLABLE NWAEH\n\t{0xB1CC, 0xB1CC, prLV},                     // Lo       HANGUL SYLLABLE NOE\n\t{0xB1CD, 0xB1E7, prLVT},                    // Lo  [27] HANGUL SYLLABLE NOEG..HANGUL SYLLABLE NOEH\n\t{0xB1E8, 0xB1E8, prLV},                     // Lo       HANGUL SYLLABLE NYO\n\t{0xB1E9, 0xB203, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYOG..HANGUL SYLLABLE NYOH\n\t{0xB204, 0xB204, prLV},                     // Lo       HANGUL SYLLABLE NU\n\t{0xB205, 0xB21F, prLVT},                    // Lo  [27] HANGUL SYLLABLE NUG..HANGUL SYLLABLE NUH\n\t{0xB220, 0xB220, prLV},                     // Lo       HANGUL SYLLABLE NWEO\n\t{0xB221, 0xB23B, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWEOG..HANGUL SYLLABLE NWEOH\n\t{0xB23C, 0xB23C, prLV},                     // Lo       HANGUL SYLLABLE NWE\n\t{0xB23D, 0xB257, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWEG..HANGUL SYLLABLE NWEH\n\t{0xB258, 0xB258, prLV},                     // Lo       HANGUL SYLLABLE NWI\n\t{0xB259, 0xB273, prLVT},                    // Lo  [27] HANGUL SYLLABLE NWIG..HANGUL SYLLABLE NWIH\n\t{0xB274, 0xB274, prLV},                     // Lo       HANGUL SYLLABLE NYU\n\t{0xB275, 0xB28F, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYUG..HANGUL SYLLABLE NYUH\n\t{0xB290, 0xB290, prLV},                     // Lo       HANGUL SYLLABLE NEU\n\t{0xB291, 0xB2AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE NEUG..HANGUL SYLLABLE NEUH\n\t{0xB2AC, 0xB2AC, prLV},                     // Lo       HANGUL SYLLABLE NYI\n\t{0xB2AD, 0xB2C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE NYIG..HANGUL SYLLABLE NYIH\n\t{0xB2C8, 0xB2C8, prLV},                     // Lo       HANGUL SYLLABLE NI\n\t{0xB2C9, 0xB2E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE NIG..HANGUL SYLLABLE NIH\n\t{0xB2E4, 0xB2E4, prLV},                     // Lo       HANGUL SYLLABLE DA\n\t{0xB2E5, 0xB2FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE DAG..HANGUL SYLLABLE DAH\n\t{0xB300, 0xB300, prLV},                     // Lo       HANGUL SYLLABLE DAE\n\t{0xB301, 0xB31B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DAEG..HANGUL SYLLABLE DAEH\n\t{0xB31C, 0xB31C, prLV},                     // Lo       HANGUL SYLLABLE DYA\n\t{0xB31D, 0xB337, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYAG..HANGUL SYLLABLE DYAH\n\t{0xB338, 0xB338, prLV},                     // Lo       HANGUL SYLLABLE DYAE\n\t{0xB339, 0xB353, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYAEG..HANGUL SYLLABLE DYAEH\n\t{0xB354, 0xB354, prLV},                     // Lo       HANGUL SYLLABLE DEO\n\t{0xB355, 0xB36F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DEOG..HANGUL SYLLABLE DEOH\n\t{0xB370, 0xB370, prLV},                     // Lo       HANGUL SYLLABLE DE\n\t{0xB371, 0xB38B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DEG..HANGUL SYLLABLE DEH\n\t{0xB38C, 0xB38C, prLV},                     // Lo       HANGUL SYLLABLE DYEO\n\t{0xB38D, 0xB3A7, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYEOG..HANGUL SYLLABLE DYEOH\n\t{0xB3A8, 0xB3A8, prLV},                     // Lo       HANGUL SYLLABLE DYE\n\t{0xB3A9, 0xB3C3, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYEG..HANGUL SYLLABLE DYEH\n\t{0xB3C4, 0xB3C4, prLV},                     // Lo       HANGUL SYLLABLE DO\n\t{0xB3C5, 0xB3DF, prLVT},                    // Lo  [27] HANGUL SYLLABLE DOG..HANGUL SYLLABLE DOH\n\t{0xB3E0, 0xB3E0, prLV},                     // Lo       HANGUL SYLLABLE DWA\n\t{0xB3E1, 0xB3FB, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWAG..HANGUL SYLLABLE DWAH\n\t{0xB3FC, 0xB3FC, prLV},                     // Lo       HANGUL SYLLABLE DWAE\n\t{0xB3FD, 0xB417, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWAEG..HANGUL SYLLABLE DWAEH\n\t{0xB418, 0xB418, prLV},                     // Lo       HANGUL SYLLABLE DOE\n\t{0xB419, 0xB433, prLVT},                    // Lo  [27] HANGUL SYLLABLE DOEG..HANGUL SYLLABLE DOEH\n\t{0xB434, 0xB434, prLV},                     // Lo       HANGUL SYLLABLE DYO\n\t{0xB435, 0xB44F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYOG..HANGUL SYLLABLE DYOH\n\t{0xB450, 0xB450, prLV},                     // Lo       HANGUL SYLLABLE DU\n\t{0xB451, 0xB46B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DUG..HANGUL SYLLABLE DUH\n\t{0xB46C, 0xB46C, prLV},                     // Lo       HANGUL SYLLABLE DWEO\n\t{0xB46D, 0xB487, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWEOG..HANGUL SYLLABLE DWEOH\n\t{0xB488, 0xB488, prLV},                     // Lo       HANGUL SYLLABLE DWE\n\t{0xB489, 0xB4A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWEG..HANGUL SYLLABLE DWEH\n\t{0xB4A4, 0xB4A4, prLV},                     // Lo       HANGUL SYLLABLE DWI\n\t{0xB4A5, 0xB4BF, prLVT},                    // Lo  [27] HANGUL SYLLABLE DWIG..HANGUL SYLLABLE DWIH\n\t{0xB4C0, 0xB4C0, prLV},                     // Lo       HANGUL SYLLABLE DYU\n\t{0xB4C1, 0xB4DB, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYUG..HANGUL SYLLABLE DYUH\n\t{0xB4DC, 0xB4DC, prLV},                     // Lo       HANGUL SYLLABLE DEU\n\t{0xB4DD, 0xB4F7, prLVT},                    // Lo  [27] HANGUL SYLLABLE DEUG..HANGUL SYLLABLE DEUH\n\t{0xB4F8, 0xB4F8, prLV},                     // Lo       HANGUL SYLLABLE DYI\n\t{0xB4F9, 0xB513, prLVT},                    // Lo  [27] HANGUL SYLLABLE DYIG..HANGUL SYLLABLE DYIH\n\t{0xB514, 0xB514, prLV},                     // Lo       HANGUL SYLLABLE DI\n\t{0xB515, 0xB52F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DIG..HANGUL SYLLABLE DIH\n\t{0xB530, 0xB530, prLV},                     // Lo       HANGUL SYLLABLE DDA\n\t{0xB531, 0xB54B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDAG..HANGUL SYLLABLE DDAH\n\t{0xB54C, 0xB54C, prLV},                     // Lo       HANGUL SYLLABLE DDAE\n\t{0xB54D, 0xB567, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDAEG..HANGUL SYLLABLE DDAEH\n\t{0xB568, 0xB568, prLV},                     // Lo       HANGUL SYLLABLE DDYA\n\t{0xB569, 0xB583, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYAG..HANGUL SYLLABLE DDYAH\n\t{0xB584, 0xB584, prLV},                     // Lo       HANGUL SYLLABLE DDYAE\n\t{0xB585, 0xB59F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYAEG..HANGUL SYLLABLE DDYAEH\n\t{0xB5A0, 0xB5A0, prLV},                     // Lo       HANGUL SYLLABLE DDEO\n\t{0xB5A1, 0xB5BB, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDEOG..HANGUL SYLLABLE DDEOH\n\t{0xB5BC, 0xB5BC, prLV},                     // Lo       HANGUL SYLLABLE DDE\n\t{0xB5BD, 0xB5D7, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDEG..HANGUL SYLLABLE DDEH\n\t{0xB5D8, 0xB5D8, prLV},                     // Lo       HANGUL SYLLABLE DDYEO\n\t{0xB5D9, 0xB5F3, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYEOG..HANGUL SYLLABLE DDYEOH\n\t{0xB5F4, 0xB5F4, prLV},                     // Lo       HANGUL SYLLABLE DDYE\n\t{0xB5F5, 0xB60F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYEG..HANGUL SYLLABLE DDYEH\n\t{0xB610, 0xB610, prLV},                     // Lo       HANGUL SYLLABLE DDO\n\t{0xB611, 0xB62B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDOG..HANGUL SYLLABLE DDOH\n\t{0xB62C, 0xB62C, prLV},                     // Lo       HANGUL SYLLABLE DDWA\n\t{0xB62D, 0xB647, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWAG..HANGUL SYLLABLE DDWAH\n\t{0xB648, 0xB648, prLV},                     // Lo       HANGUL SYLLABLE DDWAE\n\t{0xB649, 0xB663, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWAEG..HANGUL SYLLABLE DDWAEH\n\t{0xB664, 0xB664, prLV},                     // Lo       HANGUL SYLLABLE DDOE\n\t{0xB665, 0xB67F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDOEG..HANGUL SYLLABLE DDOEH\n\t{0xB680, 0xB680, prLV},                     // Lo       HANGUL SYLLABLE DDYO\n\t{0xB681, 0xB69B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYOG..HANGUL SYLLABLE DDYOH\n\t{0xB69C, 0xB69C, prLV},                     // Lo       HANGUL SYLLABLE DDU\n\t{0xB69D, 0xB6B7, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDUG..HANGUL SYLLABLE DDUH\n\t{0xB6B8, 0xB6B8, prLV},                     // Lo       HANGUL SYLLABLE DDWEO\n\t{0xB6B9, 0xB6D3, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWEOG..HANGUL SYLLABLE DDWEOH\n\t{0xB6D4, 0xB6D4, prLV},                     // Lo       HANGUL SYLLABLE DDWE\n\t{0xB6D5, 0xB6EF, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWEG..HANGUL SYLLABLE DDWEH\n\t{0xB6F0, 0xB6F0, prLV},                     // Lo       HANGUL SYLLABLE DDWI\n\t{0xB6F1, 0xB70B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDWIG..HANGUL SYLLABLE DDWIH\n\t{0xB70C, 0xB70C, prLV},                     // Lo       HANGUL SYLLABLE DDYU\n\t{0xB70D, 0xB727, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYUG..HANGUL SYLLABLE DDYUH\n\t{0xB728, 0xB728, prLV},                     // Lo       HANGUL SYLLABLE DDEU\n\t{0xB729, 0xB743, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDEUG..HANGUL SYLLABLE DDEUH\n\t{0xB744, 0xB744, prLV},                     // Lo       HANGUL SYLLABLE DDYI\n\t{0xB745, 0xB75F, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDYIG..HANGUL SYLLABLE DDYIH\n\t{0xB760, 0xB760, prLV},                     // Lo       HANGUL SYLLABLE DDI\n\t{0xB761, 0xB77B, prLVT},                    // Lo  [27] HANGUL SYLLABLE DDIG..HANGUL SYLLABLE DDIH\n\t{0xB77C, 0xB77C, prLV},                     // Lo       HANGUL SYLLABLE RA\n\t{0xB77D, 0xB797, prLVT},                    // Lo  [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAH\n\t{0xB798, 0xB798, prLV},                     // Lo       HANGUL SYLLABLE RAE\n\t{0xB799, 0xB7B3, prLVT},                    // Lo  [27] HANGUL SYLLABLE RAEG..HANGUL SYLLABLE RAEH\n\t{0xB7B4, 0xB7B4, prLV},                     // Lo       HANGUL SYLLABLE RYA\n\t{0xB7B5, 0xB7CF, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYAG..HANGUL SYLLABLE RYAH\n\t{0xB7D0, 0xB7D0, prLV},                     // Lo       HANGUL SYLLABLE RYAE\n\t{0xB7D1, 0xB7EB, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYAEG..HANGUL SYLLABLE RYAEH\n\t{0xB7EC, 0xB7EC, prLV},                     // Lo       HANGUL SYLLABLE REO\n\t{0xB7ED, 0xB807, prLVT},                    // Lo  [27] HANGUL SYLLABLE REOG..HANGUL SYLLABLE REOH\n\t{0xB808, 0xB808, prLV},                     // Lo       HANGUL SYLLABLE RE\n\t{0xB809, 0xB823, prLVT},                    // Lo  [27] HANGUL SYLLABLE REG..HANGUL SYLLABLE REH\n\t{0xB824, 0xB824, prLV},                     // Lo       HANGUL SYLLABLE RYEO\n\t{0xB825, 0xB83F, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYEOG..HANGUL SYLLABLE RYEOH\n\t{0xB840, 0xB840, prLV},                     // Lo       HANGUL SYLLABLE RYE\n\t{0xB841, 0xB85B, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYEG..HANGUL SYLLABLE RYEH\n\t{0xB85C, 0xB85C, prLV},                     // Lo       HANGUL SYLLABLE RO\n\t{0xB85D, 0xB877, prLVT},                    // Lo  [27] HANGUL SYLLABLE ROG..HANGUL SYLLABLE ROH\n\t{0xB878, 0xB878, prLV},                     // Lo       HANGUL SYLLABLE RWA\n\t{0xB879, 0xB893, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWAG..HANGUL SYLLABLE RWAH\n\t{0xB894, 0xB894, prLV},                     // Lo       HANGUL SYLLABLE RWAE\n\t{0xB895, 0xB8AF, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWAEG..HANGUL SYLLABLE RWAEH\n\t{0xB8B0, 0xB8B0, prLV},                     // Lo       HANGUL SYLLABLE ROE\n\t{0xB8B1, 0xB8CB, prLVT},                    // Lo  [27] HANGUL SYLLABLE ROEG..HANGUL SYLLABLE ROEH\n\t{0xB8CC, 0xB8CC, prLV},                     // Lo       HANGUL SYLLABLE RYO\n\t{0xB8CD, 0xB8E7, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYOG..HANGUL SYLLABLE RYOH\n\t{0xB8E8, 0xB8E8, prLV},                     // Lo       HANGUL SYLLABLE RU\n\t{0xB8E9, 0xB903, prLVT},                    // Lo  [27] HANGUL SYLLABLE RUG..HANGUL SYLLABLE RUH\n\t{0xB904, 0xB904, prLV},                     // Lo       HANGUL SYLLABLE RWEO\n\t{0xB905, 0xB91F, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWEOG..HANGUL SYLLABLE RWEOH\n\t{0xB920, 0xB920, prLV},                     // Lo       HANGUL SYLLABLE RWE\n\t{0xB921, 0xB93B, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWEG..HANGUL SYLLABLE RWEH\n\t{0xB93C, 0xB93C, prLV},                     // Lo       HANGUL SYLLABLE RWI\n\t{0xB93D, 0xB957, prLVT},                    // Lo  [27] HANGUL SYLLABLE RWIG..HANGUL SYLLABLE RWIH\n\t{0xB958, 0xB958, prLV},                     // Lo       HANGUL SYLLABLE RYU\n\t{0xB959, 0xB973, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYUG..HANGUL SYLLABLE RYUH\n\t{0xB974, 0xB974, prLV},                     // Lo       HANGUL SYLLABLE REU\n\t{0xB975, 0xB98F, prLVT},                    // Lo  [27] HANGUL SYLLABLE REUG..HANGUL SYLLABLE REUH\n\t{0xB990, 0xB990, prLV},                     // Lo       HANGUL SYLLABLE RYI\n\t{0xB991, 0xB9AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE RYIG..HANGUL SYLLABLE RYIH\n\t{0xB9AC, 0xB9AC, prLV},                     // Lo       HANGUL SYLLABLE RI\n\t{0xB9AD, 0xB9C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE RIG..HANGUL SYLLABLE RIH\n\t{0xB9C8, 0xB9C8, prLV},                     // Lo       HANGUL SYLLABLE MA\n\t{0xB9C9, 0xB9E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE MAG..HANGUL SYLLABLE MAH\n\t{0xB9E4, 0xB9E4, prLV},                     // Lo       HANGUL SYLLABLE MAE\n\t{0xB9E5, 0xB9FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE MAEG..HANGUL SYLLABLE MAEH\n\t{0xBA00, 0xBA00, prLV},                     // Lo       HANGUL SYLLABLE MYA\n\t{0xBA01, 0xBA1B, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYAG..HANGUL SYLLABLE MYAH\n\t{0xBA1C, 0xBA1C, prLV},                     // Lo       HANGUL SYLLABLE MYAE\n\t{0xBA1D, 0xBA37, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYAEG..HANGUL SYLLABLE MYAEH\n\t{0xBA38, 0xBA38, prLV},                     // Lo       HANGUL SYLLABLE MEO\n\t{0xBA39, 0xBA53, prLVT},                    // Lo  [27] HANGUL SYLLABLE MEOG..HANGUL SYLLABLE MEOH\n\t{0xBA54, 0xBA54, prLV},                     // Lo       HANGUL SYLLABLE ME\n\t{0xBA55, 0xBA6F, prLVT},                    // Lo  [27] HANGUL SYLLABLE MEG..HANGUL SYLLABLE MEH\n\t{0xBA70, 0xBA70, prLV},                     // Lo       HANGUL SYLLABLE MYEO\n\t{0xBA71, 0xBA8B, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYEOG..HANGUL SYLLABLE MYEOH\n\t{0xBA8C, 0xBA8C, prLV},                     // Lo       HANGUL SYLLABLE MYE\n\t{0xBA8D, 0xBAA7, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYEG..HANGUL SYLLABLE MYEH\n\t{0xBAA8, 0xBAA8, prLV},                     // Lo       HANGUL SYLLABLE MO\n\t{0xBAA9, 0xBAC3, prLVT},                    // Lo  [27] HANGUL SYLLABLE MOG..HANGUL SYLLABLE MOH\n\t{0xBAC4, 0xBAC4, prLV},                     // Lo       HANGUL SYLLABLE MWA\n\t{0xBAC5, 0xBADF, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWAG..HANGUL SYLLABLE MWAH\n\t{0xBAE0, 0xBAE0, prLV},                     // Lo       HANGUL SYLLABLE MWAE\n\t{0xBAE1, 0xBAFB, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWAEG..HANGUL SYLLABLE MWAEH\n\t{0xBAFC, 0xBAFC, prLV},                     // Lo       HANGUL SYLLABLE MOE\n\t{0xBAFD, 0xBB17, prLVT},                    // Lo  [27] HANGUL SYLLABLE MOEG..HANGUL SYLLABLE MOEH\n\t{0xBB18, 0xBB18, prLV},                     // Lo       HANGUL SYLLABLE MYO\n\t{0xBB19, 0xBB33, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYOG..HANGUL SYLLABLE MYOH\n\t{0xBB34, 0xBB34, prLV},                     // Lo       HANGUL SYLLABLE MU\n\t{0xBB35, 0xBB4F, prLVT},                    // Lo  [27] HANGUL SYLLABLE MUG..HANGUL SYLLABLE MUH\n\t{0xBB50, 0xBB50, prLV},                     // Lo       HANGUL SYLLABLE MWEO\n\t{0xBB51, 0xBB6B, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWEOG..HANGUL SYLLABLE MWEOH\n\t{0xBB6C, 0xBB6C, prLV},                     // Lo       HANGUL SYLLABLE MWE\n\t{0xBB6D, 0xBB87, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWEG..HANGUL SYLLABLE MWEH\n\t{0xBB88, 0xBB88, prLV},                     // Lo       HANGUL SYLLABLE MWI\n\t{0xBB89, 0xBBA3, prLVT},                    // Lo  [27] HANGUL SYLLABLE MWIG..HANGUL SYLLABLE MWIH\n\t{0xBBA4, 0xBBA4, prLV},                     // Lo       HANGUL SYLLABLE MYU\n\t{0xBBA5, 0xBBBF, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYUG..HANGUL SYLLABLE MYUH\n\t{0xBBC0, 0xBBC0, prLV},                     // Lo       HANGUL SYLLABLE MEU\n\t{0xBBC1, 0xBBDB, prLVT},                    // Lo  [27] HANGUL SYLLABLE MEUG..HANGUL SYLLABLE MEUH\n\t{0xBBDC, 0xBBDC, prLV},                     // Lo       HANGUL SYLLABLE MYI\n\t{0xBBDD, 0xBBF7, prLVT},                    // Lo  [27] HANGUL SYLLABLE MYIG..HANGUL SYLLABLE MYIH\n\t{0xBBF8, 0xBBF8, prLV},                     // Lo       HANGUL SYLLABLE MI\n\t{0xBBF9, 0xBC13, prLVT},                    // Lo  [27] HANGUL SYLLABLE MIG..HANGUL SYLLABLE MIH\n\t{0xBC14, 0xBC14, prLV},                     // Lo       HANGUL SYLLABLE BA\n\t{0xBC15, 0xBC2F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BAG..HANGUL SYLLABLE BAH\n\t{0xBC30, 0xBC30, prLV},                     // Lo       HANGUL SYLLABLE BAE\n\t{0xBC31, 0xBC4B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BAEG..HANGUL SYLLABLE BAEH\n\t{0xBC4C, 0xBC4C, prLV},                     // Lo       HANGUL SYLLABLE BYA\n\t{0xBC4D, 0xBC67, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYAG..HANGUL SYLLABLE BYAH\n\t{0xBC68, 0xBC68, prLV},                     // Lo       HANGUL SYLLABLE BYAE\n\t{0xBC69, 0xBC83, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYAEG..HANGUL SYLLABLE BYAEH\n\t{0xBC84, 0xBC84, prLV},                     // Lo       HANGUL SYLLABLE BEO\n\t{0xBC85, 0xBC9F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BEOG..HANGUL SYLLABLE BEOH\n\t{0xBCA0, 0xBCA0, prLV},                     // Lo       HANGUL SYLLABLE BE\n\t{0xBCA1, 0xBCBB, prLVT},                    // Lo  [27] HANGUL SYLLABLE BEG..HANGUL SYLLABLE BEH\n\t{0xBCBC, 0xBCBC, prLV},                     // Lo       HANGUL SYLLABLE BYEO\n\t{0xBCBD, 0xBCD7, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYEOG..HANGUL SYLLABLE BYEOH\n\t{0xBCD8, 0xBCD8, prLV},                     // Lo       HANGUL SYLLABLE BYE\n\t{0xBCD9, 0xBCF3, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYEG..HANGUL SYLLABLE BYEH\n\t{0xBCF4, 0xBCF4, prLV},                     // Lo       HANGUL SYLLABLE BO\n\t{0xBCF5, 0xBD0F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BOG..HANGUL SYLLABLE BOH\n\t{0xBD10, 0xBD10, prLV},                     // Lo       HANGUL SYLLABLE BWA\n\t{0xBD11, 0xBD2B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWAG..HANGUL SYLLABLE BWAH\n\t{0xBD2C, 0xBD2C, prLV},                     // Lo       HANGUL SYLLABLE BWAE\n\t{0xBD2D, 0xBD47, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWAEG..HANGUL SYLLABLE BWAEH\n\t{0xBD48, 0xBD48, prLV},                     // Lo       HANGUL SYLLABLE BOE\n\t{0xBD49, 0xBD63, prLVT},                    // Lo  [27] HANGUL SYLLABLE BOEG..HANGUL SYLLABLE BOEH\n\t{0xBD64, 0xBD64, prLV},                     // Lo       HANGUL SYLLABLE BYO\n\t{0xBD65, 0xBD7F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYOG..HANGUL SYLLABLE BYOH\n\t{0xBD80, 0xBD80, prLV},                     // Lo       HANGUL SYLLABLE BU\n\t{0xBD81, 0xBD9B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BUG..HANGUL SYLLABLE BUH\n\t{0xBD9C, 0xBD9C, prLV},                     // Lo       HANGUL SYLLABLE BWEO\n\t{0xBD9D, 0xBDB7, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWEOG..HANGUL SYLLABLE BWEOH\n\t{0xBDB8, 0xBDB8, prLV},                     // Lo       HANGUL SYLLABLE BWE\n\t{0xBDB9, 0xBDD3, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWEG..HANGUL SYLLABLE BWEH\n\t{0xBDD4, 0xBDD4, prLV},                     // Lo       HANGUL SYLLABLE BWI\n\t{0xBDD5, 0xBDEF, prLVT},                    // Lo  [27] HANGUL SYLLABLE BWIG..HANGUL SYLLABLE BWIH\n\t{0xBDF0, 0xBDF0, prLV},                     // Lo       HANGUL SYLLABLE BYU\n\t{0xBDF1, 0xBE0B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYUG..HANGUL SYLLABLE BYUH\n\t{0xBE0C, 0xBE0C, prLV},                     // Lo       HANGUL SYLLABLE BEU\n\t{0xBE0D, 0xBE27, prLVT},                    // Lo  [27] HANGUL SYLLABLE BEUG..HANGUL SYLLABLE BEUH\n\t{0xBE28, 0xBE28, prLV},                     // Lo       HANGUL SYLLABLE BYI\n\t{0xBE29, 0xBE43, prLVT},                    // Lo  [27] HANGUL SYLLABLE BYIG..HANGUL SYLLABLE BYIH\n\t{0xBE44, 0xBE44, prLV},                     // Lo       HANGUL SYLLABLE BI\n\t{0xBE45, 0xBE5F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BIG..HANGUL SYLLABLE BIH\n\t{0xBE60, 0xBE60, prLV},                     // Lo       HANGUL SYLLABLE BBA\n\t{0xBE61, 0xBE7B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBAG..HANGUL SYLLABLE BBAH\n\t{0xBE7C, 0xBE7C, prLV},                     // Lo       HANGUL SYLLABLE BBAE\n\t{0xBE7D, 0xBE97, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBAEG..HANGUL SYLLABLE BBAEH\n\t{0xBE98, 0xBE98, prLV},                     // Lo       HANGUL SYLLABLE BBYA\n\t{0xBE99, 0xBEB3, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYAG..HANGUL SYLLABLE BBYAH\n\t{0xBEB4, 0xBEB4, prLV},                     // Lo       HANGUL SYLLABLE BBYAE\n\t{0xBEB5, 0xBECF, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYAEG..HANGUL SYLLABLE BBYAEH\n\t{0xBED0, 0xBED0, prLV},                     // Lo       HANGUL SYLLABLE BBEO\n\t{0xBED1, 0xBEEB, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBEOG..HANGUL SYLLABLE BBEOH\n\t{0xBEEC, 0xBEEC, prLV},                     // Lo       HANGUL SYLLABLE BBE\n\t{0xBEED, 0xBF07, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBEG..HANGUL SYLLABLE BBEH\n\t{0xBF08, 0xBF08, prLV},                     // Lo       HANGUL SYLLABLE BBYEO\n\t{0xBF09, 0xBF23, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYEOG..HANGUL SYLLABLE BBYEOH\n\t{0xBF24, 0xBF24, prLV},                     // Lo       HANGUL SYLLABLE BBYE\n\t{0xBF25, 0xBF3F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYEG..HANGUL SYLLABLE BBYEH\n\t{0xBF40, 0xBF40, prLV},                     // Lo       HANGUL SYLLABLE BBO\n\t{0xBF41, 0xBF5B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBOG..HANGUL SYLLABLE BBOH\n\t{0xBF5C, 0xBF5C, prLV},                     // Lo       HANGUL SYLLABLE BBWA\n\t{0xBF5D, 0xBF77, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWAG..HANGUL SYLLABLE BBWAH\n\t{0xBF78, 0xBF78, prLV},                     // Lo       HANGUL SYLLABLE BBWAE\n\t{0xBF79, 0xBF93, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWAEG..HANGUL SYLLABLE BBWAEH\n\t{0xBF94, 0xBF94, prLV},                     // Lo       HANGUL SYLLABLE BBOE\n\t{0xBF95, 0xBFAF, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBOEG..HANGUL SYLLABLE BBOEH\n\t{0xBFB0, 0xBFB0, prLV},                     // Lo       HANGUL SYLLABLE BBYO\n\t{0xBFB1, 0xBFCB, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYOG..HANGUL SYLLABLE BBYOH\n\t{0xBFCC, 0xBFCC, prLV},                     // Lo       HANGUL SYLLABLE BBU\n\t{0xBFCD, 0xBFE7, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBUG..HANGUL SYLLABLE BBUH\n\t{0xBFE8, 0xBFE8, prLV},                     // Lo       HANGUL SYLLABLE BBWEO\n\t{0xBFE9, 0xC003, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWEOG..HANGUL SYLLABLE BBWEOH\n\t{0xC004, 0xC004, prLV},                     // Lo       HANGUL SYLLABLE BBWE\n\t{0xC005, 0xC01F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWEG..HANGUL SYLLABLE BBWEH\n\t{0xC020, 0xC020, prLV},                     // Lo       HANGUL SYLLABLE BBWI\n\t{0xC021, 0xC03B, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBWIG..HANGUL SYLLABLE BBWIH\n\t{0xC03C, 0xC03C, prLV},                     // Lo       HANGUL SYLLABLE BBYU\n\t{0xC03D, 0xC057, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYUG..HANGUL SYLLABLE BBYUH\n\t{0xC058, 0xC058, prLV},                     // Lo       HANGUL SYLLABLE BBEU\n\t{0xC059, 0xC073, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBEUG..HANGUL SYLLABLE BBEUH\n\t{0xC074, 0xC074, prLV},                     // Lo       HANGUL SYLLABLE BBYI\n\t{0xC075, 0xC08F, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBYIG..HANGUL SYLLABLE BBYIH\n\t{0xC090, 0xC090, prLV},                     // Lo       HANGUL SYLLABLE BBI\n\t{0xC091, 0xC0AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE BBIG..HANGUL SYLLABLE BBIH\n\t{0xC0AC, 0xC0AC, prLV},                     // Lo       HANGUL SYLLABLE SA\n\t{0xC0AD, 0xC0C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SAG..HANGUL SYLLABLE SAH\n\t{0xC0C8, 0xC0C8, prLV},                     // Lo       HANGUL SYLLABLE SAE\n\t{0xC0C9, 0xC0E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SAEG..HANGUL SYLLABLE SAEH\n\t{0xC0E4, 0xC0E4, prLV},                     // Lo       HANGUL SYLLABLE SYA\n\t{0xC0E5, 0xC0FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYAG..HANGUL SYLLABLE SYAH\n\t{0xC100, 0xC100, prLV},                     // Lo       HANGUL SYLLABLE SYAE\n\t{0xC101, 0xC11B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYAEG..HANGUL SYLLABLE SYAEH\n\t{0xC11C, 0xC11C, prLV},                     // Lo       HANGUL SYLLABLE SEO\n\t{0xC11D, 0xC137, prLVT},                    // Lo  [27] HANGUL SYLLABLE SEOG..HANGUL SYLLABLE SEOH\n\t{0xC138, 0xC138, prLV},                     // Lo       HANGUL SYLLABLE SE\n\t{0xC139, 0xC153, prLVT},                    // Lo  [27] HANGUL SYLLABLE SEG..HANGUL SYLLABLE SEH\n\t{0xC154, 0xC154, prLV},                     // Lo       HANGUL SYLLABLE SYEO\n\t{0xC155, 0xC16F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYEOG..HANGUL SYLLABLE SYEOH\n\t{0xC170, 0xC170, prLV},                     // Lo       HANGUL SYLLABLE SYE\n\t{0xC171, 0xC18B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYEG..HANGUL SYLLABLE SYEH\n\t{0xC18C, 0xC18C, prLV},                     // Lo       HANGUL SYLLABLE SO\n\t{0xC18D, 0xC1A7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SOG..HANGUL SYLLABLE SOH\n\t{0xC1A8, 0xC1A8, prLV},                     // Lo       HANGUL SYLLABLE SWA\n\t{0xC1A9, 0xC1C3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWAG..HANGUL SYLLABLE SWAH\n\t{0xC1C4, 0xC1C4, prLV},                     // Lo       HANGUL SYLLABLE SWAE\n\t{0xC1C5, 0xC1DF, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWAEG..HANGUL SYLLABLE SWAEH\n\t{0xC1E0, 0xC1E0, prLV},                     // Lo       HANGUL SYLLABLE SOE\n\t{0xC1E1, 0xC1FB, prLVT},                    // Lo  [27] HANGUL SYLLABLE SOEG..HANGUL SYLLABLE SOEH\n\t{0xC1FC, 0xC1FC, prLV},                     // Lo       HANGUL SYLLABLE SYO\n\t{0xC1FD, 0xC217, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYOG..HANGUL SYLLABLE SYOH\n\t{0xC218, 0xC218, prLV},                     // Lo       HANGUL SYLLABLE SU\n\t{0xC219, 0xC233, prLVT},                    // Lo  [27] HANGUL SYLLABLE SUG..HANGUL SYLLABLE SUH\n\t{0xC234, 0xC234, prLV},                     // Lo       HANGUL SYLLABLE SWEO\n\t{0xC235, 0xC24F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWEOG..HANGUL SYLLABLE SWEOH\n\t{0xC250, 0xC250, prLV},                     // Lo       HANGUL SYLLABLE SWE\n\t{0xC251, 0xC26B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWEG..HANGUL SYLLABLE SWEH\n\t{0xC26C, 0xC26C, prLV},                     // Lo       HANGUL SYLLABLE SWI\n\t{0xC26D, 0xC287, prLVT},                    // Lo  [27] HANGUL SYLLABLE SWIG..HANGUL SYLLABLE SWIH\n\t{0xC288, 0xC288, prLV},                     // Lo       HANGUL SYLLABLE SYU\n\t{0xC289, 0xC2A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYUG..HANGUL SYLLABLE SYUH\n\t{0xC2A4, 0xC2A4, prLV},                     // Lo       HANGUL SYLLABLE SEU\n\t{0xC2A5, 0xC2BF, prLVT},                    // Lo  [27] HANGUL SYLLABLE SEUG..HANGUL SYLLABLE SEUH\n\t{0xC2C0, 0xC2C0, prLV},                     // Lo       HANGUL SYLLABLE SYI\n\t{0xC2C1, 0xC2DB, prLVT},                    // Lo  [27] HANGUL SYLLABLE SYIG..HANGUL SYLLABLE SYIH\n\t{0xC2DC, 0xC2DC, prLV},                     // Lo       HANGUL SYLLABLE SI\n\t{0xC2DD, 0xC2F7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SIG..HANGUL SYLLABLE SIH\n\t{0xC2F8, 0xC2F8, prLV},                     // Lo       HANGUL SYLLABLE SSA\n\t{0xC2F9, 0xC313, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSAG..HANGUL SYLLABLE SSAH\n\t{0xC314, 0xC314, prLV},                     // Lo       HANGUL SYLLABLE SSAE\n\t{0xC315, 0xC32F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSAEG..HANGUL SYLLABLE SSAEH\n\t{0xC330, 0xC330, prLV},                     // Lo       HANGUL SYLLABLE SSYA\n\t{0xC331, 0xC34B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYAG..HANGUL SYLLABLE SSYAH\n\t{0xC34C, 0xC34C, prLV},                     // Lo       HANGUL SYLLABLE SSYAE\n\t{0xC34D, 0xC367, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYAEG..HANGUL SYLLABLE SSYAEH\n\t{0xC368, 0xC368, prLV},                     // Lo       HANGUL SYLLABLE SSEO\n\t{0xC369, 0xC383, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSEOG..HANGUL SYLLABLE SSEOH\n\t{0xC384, 0xC384, prLV},                     // Lo       HANGUL SYLLABLE SSE\n\t{0xC385, 0xC39F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSEG..HANGUL SYLLABLE SSEH\n\t{0xC3A0, 0xC3A0, prLV},                     // Lo       HANGUL SYLLABLE SSYEO\n\t{0xC3A1, 0xC3BB, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYEOG..HANGUL SYLLABLE SSYEOH\n\t{0xC3BC, 0xC3BC, prLV},                     // Lo       HANGUL SYLLABLE SSYE\n\t{0xC3BD, 0xC3D7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYEG..HANGUL SYLLABLE SSYEH\n\t{0xC3D8, 0xC3D8, prLV},                     // Lo       HANGUL SYLLABLE SSO\n\t{0xC3D9, 0xC3F3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSOG..HANGUL SYLLABLE SSOH\n\t{0xC3F4, 0xC3F4, prLV},                     // Lo       HANGUL SYLLABLE SSWA\n\t{0xC3F5, 0xC40F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWAG..HANGUL SYLLABLE SSWAH\n\t{0xC410, 0xC410, prLV},                     // Lo       HANGUL SYLLABLE SSWAE\n\t{0xC411, 0xC42B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWAEG..HANGUL SYLLABLE SSWAEH\n\t{0xC42C, 0xC42C, prLV},                     // Lo       HANGUL SYLLABLE SSOE\n\t{0xC42D, 0xC447, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSOEG..HANGUL SYLLABLE SSOEH\n\t{0xC448, 0xC448, prLV},                     // Lo       HANGUL SYLLABLE SSYO\n\t{0xC449, 0xC463, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYOG..HANGUL SYLLABLE SSYOH\n\t{0xC464, 0xC464, prLV},                     // Lo       HANGUL SYLLABLE SSU\n\t{0xC465, 0xC47F, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSUG..HANGUL SYLLABLE SSUH\n\t{0xC480, 0xC480, prLV},                     // Lo       HANGUL SYLLABLE SSWEO\n\t{0xC481, 0xC49B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWEOG..HANGUL SYLLABLE SSWEOH\n\t{0xC49C, 0xC49C, prLV},                     // Lo       HANGUL SYLLABLE SSWE\n\t{0xC49D, 0xC4B7, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWEG..HANGUL SYLLABLE SSWEH\n\t{0xC4B8, 0xC4B8, prLV},                     // Lo       HANGUL SYLLABLE SSWI\n\t{0xC4B9, 0xC4D3, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSWIG..HANGUL SYLLABLE SSWIH\n\t{0xC4D4, 0xC4D4, prLV},                     // Lo       HANGUL SYLLABLE SSYU\n\t{0xC4D5, 0xC4EF, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYUG..HANGUL SYLLABLE SSYUH\n\t{0xC4F0, 0xC4F0, prLV},                     // Lo       HANGUL SYLLABLE SSEU\n\t{0xC4F1, 0xC50B, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSEUG..HANGUL SYLLABLE SSEUH\n\t{0xC50C, 0xC50C, prLV},                     // Lo       HANGUL SYLLABLE SSYI\n\t{0xC50D, 0xC527, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSYIG..HANGUL SYLLABLE SSYIH\n\t{0xC528, 0xC528, prLV},                     // Lo       HANGUL SYLLABLE SSI\n\t{0xC529, 0xC543, prLVT},                    // Lo  [27] HANGUL SYLLABLE SSIG..HANGUL SYLLABLE SSIH\n\t{0xC544, 0xC544, prLV},                     // Lo       HANGUL SYLLABLE A\n\t{0xC545, 0xC55F, prLVT},                    // Lo  [27] HANGUL SYLLABLE AG..HANGUL SYLLABLE AH\n\t{0xC560, 0xC560, prLV},                     // Lo       HANGUL SYLLABLE AE\n\t{0xC561, 0xC57B, prLVT},                    // Lo  [27] HANGUL SYLLABLE AEG..HANGUL SYLLABLE AEH\n\t{0xC57C, 0xC57C, prLV},                     // Lo       HANGUL SYLLABLE YA\n\t{0xC57D, 0xC597, prLVT},                    // Lo  [27] HANGUL SYLLABLE YAG..HANGUL SYLLABLE YAH\n\t{0xC598, 0xC598, prLV},                     // Lo       HANGUL SYLLABLE YAE\n\t{0xC599, 0xC5B3, prLVT},                    // Lo  [27] HANGUL SYLLABLE YAEG..HANGUL SYLLABLE YAEH\n\t{0xC5B4, 0xC5B4, prLV},                     // Lo       HANGUL SYLLABLE EO\n\t{0xC5B5, 0xC5CF, prLVT},                    // Lo  [27] HANGUL SYLLABLE EOG..HANGUL SYLLABLE EOH\n\t{0xC5D0, 0xC5D0, prLV},                     // Lo       HANGUL SYLLABLE E\n\t{0xC5D1, 0xC5EB, prLVT},                    // Lo  [27] HANGUL SYLLABLE EG..HANGUL SYLLABLE EH\n\t{0xC5EC, 0xC5EC, prLV},                     // Lo       HANGUL SYLLABLE YEO\n\t{0xC5ED, 0xC607, prLVT},                    // Lo  [27] HANGUL SYLLABLE YEOG..HANGUL SYLLABLE YEOH\n\t{0xC608, 0xC608, prLV},                     // Lo       HANGUL SYLLABLE YE\n\t{0xC609, 0xC623, prLVT},                    // Lo  [27] HANGUL SYLLABLE YEG..HANGUL SYLLABLE YEH\n\t{0xC624, 0xC624, prLV},                     // Lo       HANGUL SYLLABLE O\n\t{0xC625, 0xC63F, prLVT},                    // Lo  [27] HANGUL SYLLABLE OG..HANGUL SYLLABLE OH\n\t{0xC640, 0xC640, prLV},                     // Lo       HANGUL SYLLABLE WA\n\t{0xC641, 0xC65B, prLVT},                    // Lo  [27] HANGUL SYLLABLE WAG..HANGUL SYLLABLE WAH\n\t{0xC65C, 0xC65C, prLV},                     // Lo       HANGUL SYLLABLE WAE\n\t{0xC65D, 0xC677, prLVT},                    // Lo  [27] HANGUL SYLLABLE WAEG..HANGUL SYLLABLE WAEH\n\t{0xC678, 0xC678, prLV},                     // Lo       HANGUL SYLLABLE OE\n\t{0xC679, 0xC693, prLVT},                    // Lo  [27] HANGUL SYLLABLE OEG..HANGUL SYLLABLE OEH\n\t{0xC694, 0xC694, prLV},                     // Lo       HANGUL SYLLABLE YO\n\t{0xC695, 0xC6AF, prLVT},                    // Lo  [27] HANGUL SYLLABLE YOG..HANGUL SYLLABLE YOH\n\t{0xC6B0, 0xC6B0, prLV},                     // Lo       HANGUL SYLLABLE U\n\t{0xC6B1, 0xC6CB, prLVT},                    // Lo  [27] HANGUL SYLLABLE UG..HANGUL SYLLABLE UH\n\t{0xC6CC, 0xC6CC, prLV},                     // Lo       HANGUL SYLLABLE WEO\n\t{0xC6CD, 0xC6E7, prLVT},                    // Lo  [27] HANGUL SYLLABLE WEOG..HANGUL SYLLABLE WEOH\n\t{0xC6E8, 0xC6E8, prLV},                     // Lo       HANGUL SYLLABLE WE\n\t{0xC6E9, 0xC703, prLVT},                    // Lo  [27] HANGUL SYLLABLE WEG..HANGUL SYLLABLE WEH\n\t{0xC704, 0xC704, prLV},                     // Lo       HANGUL SYLLABLE WI\n\t{0xC705, 0xC71F, prLVT},                    // Lo  [27] HANGUL SYLLABLE WIG..HANGUL SYLLABLE WIH\n\t{0xC720, 0xC720, prLV},                     // Lo       HANGUL SYLLABLE YU\n\t{0xC721, 0xC73B, prLVT},                    // Lo  [27] HANGUL SYLLABLE YUG..HANGUL SYLLABLE YUH\n\t{0xC73C, 0xC73C, prLV},                     // Lo       HANGUL SYLLABLE EU\n\t{0xC73D, 0xC757, prLVT},                    // Lo  [27] HANGUL SYLLABLE EUG..HANGUL SYLLABLE EUH\n\t{0xC758, 0xC758, prLV},                     // Lo       HANGUL SYLLABLE YI\n\t{0xC759, 0xC773, prLVT},                    // Lo  [27] HANGUL SYLLABLE YIG..HANGUL SYLLABLE YIH\n\t{0xC774, 0xC774, prLV},                     // Lo       HANGUL SYLLABLE I\n\t{0xC775, 0xC78F, prLVT},                    // Lo  [27] HANGUL SYLLABLE IG..HANGUL SYLLABLE IH\n\t{0xC790, 0xC790, prLV},                     // Lo       HANGUL SYLLABLE JA\n\t{0xC791, 0xC7AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE JAG..HANGUL SYLLABLE JAH\n\t{0xC7AC, 0xC7AC, prLV},                     // Lo       HANGUL SYLLABLE JAE\n\t{0xC7AD, 0xC7C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JAEG..HANGUL SYLLABLE JAEH\n\t{0xC7C8, 0xC7C8, prLV},                     // Lo       HANGUL SYLLABLE JYA\n\t{0xC7C9, 0xC7E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYAG..HANGUL SYLLABLE JYAH\n\t{0xC7E4, 0xC7E4, prLV},                     // Lo       HANGUL SYLLABLE JYAE\n\t{0xC7E5, 0xC7FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYAEG..HANGUL SYLLABLE JYAEH\n\t{0xC800, 0xC800, prLV},                     // Lo       HANGUL SYLLABLE JEO\n\t{0xC801, 0xC81B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JEOG..HANGUL SYLLABLE JEOH\n\t{0xC81C, 0xC81C, prLV},                     // Lo       HANGUL SYLLABLE JE\n\t{0xC81D, 0xC837, prLVT},                    // Lo  [27] HANGUL SYLLABLE JEG..HANGUL SYLLABLE JEH\n\t{0xC838, 0xC838, prLV},                     // Lo       HANGUL SYLLABLE JYEO\n\t{0xC839, 0xC853, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYEOG..HANGUL SYLLABLE JYEOH\n\t{0xC854, 0xC854, prLV},                     // Lo       HANGUL SYLLABLE JYE\n\t{0xC855, 0xC86F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYEG..HANGUL SYLLABLE JYEH\n\t{0xC870, 0xC870, prLV},                     // Lo       HANGUL SYLLABLE JO\n\t{0xC871, 0xC88B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JOG..HANGUL SYLLABLE JOH\n\t{0xC88C, 0xC88C, prLV},                     // Lo       HANGUL SYLLABLE JWA\n\t{0xC88D, 0xC8A7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWAG..HANGUL SYLLABLE JWAH\n\t{0xC8A8, 0xC8A8, prLV},                     // Lo       HANGUL SYLLABLE JWAE\n\t{0xC8A9, 0xC8C3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWAEG..HANGUL SYLLABLE JWAEH\n\t{0xC8C4, 0xC8C4, prLV},                     // Lo       HANGUL SYLLABLE JOE\n\t{0xC8C5, 0xC8DF, prLVT},                    // Lo  [27] HANGUL SYLLABLE JOEG..HANGUL SYLLABLE JOEH\n\t{0xC8E0, 0xC8E0, prLV},                     // Lo       HANGUL SYLLABLE JYO\n\t{0xC8E1, 0xC8FB, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYOG..HANGUL SYLLABLE JYOH\n\t{0xC8FC, 0xC8FC, prLV},                     // Lo       HANGUL SYLLABLE JU\n\t{0xC8FD, 0xC917, prLVT},                    // Lo  [27] HANGUL SYLLABLE JUG..HANGUL SYLLABLE JUH\n\t{0xC918, 0xC918, prLV},                     // Lo       HANGUL SYLLABLE JWEO\n\t{0xC919, 0xC933, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWEOG..HANGUL SYLLABLE JWEOH\n\t{0xC934, 0xC934, prLV},                     // Lo       HANGUL SYLLABLE JWE\n\t{0xC935, 0xC94F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWEG..HANGUL SYLLABLE JWEH\n\t{0xC950, 0xC950, prLV},                     // Lo       HANGUL SYLLABLE JWI\n\t{0xC951, 0xC96B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JWIG..HANGUL SYLLABLE JWIH\n\t{0xC96C, 0xC96C, prLV},                     // Lo       HANGUL SYLLABLE JYU\n\t{0xC96D, 0xC987, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYUG..HANGUL SYLLABLE JYUH\n\t{0xC988, 0xC988, prLV},                     // Lo       HANGUL SYLLABLE JEU\n\t{0xC989, 0xC9A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JEUG..HANGUL SYLLABLE JEUH\n\t{0xC9A4, 0xC9A4, prLV},                     // Lo       HANGUL SYLLABLE JYI\n\t{0xC9A5, 0xC9BF, prLVT},                    // Lo  [27] HANGUL SYLLABLE JYIG..HANGUL SYLLABLE JYIH\n\t{0xC9C0, 0xC9C0, prLV},                     // Lo       HANGUL SYLLABLE JI\n\t{0xC9C1, 0xC9DB, prLVT},                    // Lo  [27] HANGUL SYLLABLE JIG..HANGUL SYLLABLE JIH\n\t{0xC9DC, 0xC9DC, prLV},                     // Lo       HANGUL SYLLABLE JJA\n\t{0xC9DD, 0xC9F7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJAG..HANGUL SYLLABLE JJAH\n\t{0xC9F8, 0xC9F8, prLV},                     // Lo       HANGUL SYLLABLE JJAE\n\t{0xC9F9, 0xCA13, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJAEG..HANGUL SYLLABLE JJAEH\n\t{0xCA14, 0xCA14, prLV},                     // Lo       HANGUL SYLLABLE JJYA\n\t{0xCA15, 0xCA2F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYAG..HANGUL SYLLABLE JJYAH\n\t{0xCA30, 0xCA30, prLV},                     // Lo       HANGUL SYLLABLE JJYAE\n\t{0xCA31, 0xCA4B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYAEG..HANGUL SYLLABLE JJYAEH\n\t{0xCA4C, 0xCA4C, prLV},                     // Lo       HANGUL SYLLABLE JJEO\n\t{0xCA4D, 0xCA67, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJEOG..HANGUL SYLLABLE JJEOH\n\t{0xCA68, 0xCA68, prLV},                     // Lo       HANGUL SYLLABLE JJE\n\t{0xCA69, 0xCA83, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJEG..HANGUL SYLLABLE JJEH\n\t{0xCA84, 0xCA84, prLV},                     // Lo       HANGUL SYLLABLE JJYEO\n\t{0xCA85, 0xCA9F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYEOG..HANGUL SYLLABLE JJYEOH\n\t{0xCAA0, 0xCAA0, prLV},                     // Lo       HANGUL SYLLABLE JJYE\n\t{0xCAA1, 0xCABB, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYEG..HANGUL SYLLABLE JJYEH\n\t{0xCABC, 0xCABC, prLV},                     // Lo       HANGUL SYLLABLE JJO\n\t{0xCABD, 0xCAD7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJOG..HANGUL SYLLABLE JJOH\n\t{0xCAD8, 0xCAD8, prLV},                     // Lo       HANGUL SYLLABLE JJWA\n\t{0xCAD9, 0xCAF3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWAG..HANGUL SYLLABLE JJWAH\n\t{0xCAF4, 0xCAF4, prLV},                     // Lo       HANGUL SYLLABLE JJWAE\n\t{0xCAF5, 0xCB0F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWAEG..HANGUL SYLLABLE JJWAEH\n\t{0xCB10, 0xCB10, prLV},                     // Lo       HANGUL SYLLABLE JJOE\n\t{0xCB11, 0xCB2B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJOEG..HANGUL SYLLABLE JJOEH\n\t{0xCB2C, 0xCB2C, prLV},                     // Lo       HANGUL SYLLABLE JJYO\n\t{0xCB2D, 0xCB47, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYOG..HANGUL SYLLABLE JJYOH\n\t{0xCB48, 0xCB48, prLV},                     // Lo       HANGUL SYLLABLE JJU\n\t{0xCB49, 0xCB63, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJUG..HANGUL SYLLABLE JJUH\n\t{0xCB64, 0xCB64, prLV},                     // Lo       HANGUL SYLLABLE JJWEO\n\t{0xCB65, 0xCB7F, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWEOG..HANGUL SYLLABLE JJWEOH\n\t{0xCB80, 0xCB80, prLV},                     // Lo       HANGUL SYLLABLE JJWE\n\t{0xCB81, 0xCB9B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWEG..HANGUL SYLLABLE JJWEH\n\t{0xCB9C, 0xCB9C, prLV},                     // Lo       HANGUL SYLLABLE JJWI\n\t{0xCB9D, 0xCBB7, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJWIG..HANGUL SYLLABLE JJWIH\n\t{0xCBB8, 0xCBB8, prLV},                     // Lo       HANGUL SYLLABLE JJYU\n\t{0xCBB9, 0xCBD3, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYUG..HANGUL SYLLABLE JJYUH\n\t{0xCBD4, 0xCBD4, prLV},                     // Lo       HANGUL SYLLABLE JJEU\n\t{0xCBD5, 0xCBEF, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJEUG..HANGUL SYLLABLE JJEUH\n\t{0xCBF0, 0xCBF0, prLV},                     // Lo       HANGUL SYLLABLE JJYI\n\t{0xCBF1, 0xCC0B, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJYIG..HANGUL SYLLABLE JJYIH\n\t{0xCC0C, 0xCC0C, prLV},                     // Lo       HANGUL SYLLABLE JJI\n\t{0xCC0D, 0xCC27, prLVT},                    // Lo  [27] HANGUL SYLLABLE JJIG..HANGUL SYLLABLE JJIH\n\t{0xCC28, 0xCC28, prLV},                     // Lo       HANGUL SYLLABLE CA\n\t{0xCC29, 0xCC43, prLVT},                    // Lo  [27] HANGUL SYLLABLE CAG..HANGUL SYLLABLE CAH\n\t{0xCC44, 0xCC44, prLV},                     // Lo       HANGUL SYLLABLE CAE\n\t{0xCC45, 0xCC5F, prLVT},                    // Lo  [27] HANGUL SYLLABLE CAEG..HANGUL SYLLABLE CAEH\n\t{0xCC60, 0xCC60, prLV},                     // Lo       HANGUL SYLLABLE CYA\n\t{0xCC61, 0xCC7B, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYAG..HANGUL SYLLABLE CYAH\n\t{0xCC7C, 0xCC7C, prLV},                     // Lo       HANGUL SYLLABLE CYAE\n\t{0xCC7D, 0xCC97, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYAEG..HANGUL SYLLABLE CYAEH\n\t{0xCC98, 0xCC98, prLV},                     // Lo       HANGUL SYLLABLE CEO\n\t{0xCC99, 0xCCB3, prLVT},                    // Lo  [27] HANGUL SYLLABLE CEOG..HANGUL SYLLABLE CEOH\n\t{0xCCB4, 0xCCB4, prLV},                     // Lo       HANGUL SYLLABLE CE\n\t{0xCCB5, 0xCCCF, prLVT},                    // Lo  [27] HANGUL SYLLABLE CEG..HANGUL SYLLABLE CEH\n\t{0xCCD0, 0xCCD0, prLV},                     // Lo       HANGUL SYLLABLE CYEO\n\t{0xCCD1, 0xCCEB, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYEOG..HANGUL SYLLABLE CYEOH\n\t{0xCCEC, 0xCCEC, prLV},                     // Lo       HANGUL SYLLABLE CYE\n\t{0xCCED, 0xCD07, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYEG..HANGUL SYLLABLE CYEH\n\t{0xCD08, 0xCD08, prLV},                     // Lo       HANGUL SYLLABLE CO\n\t{0xCD09, 0xCD23, prLVT},                    // Lo  [27] HANGUL SYLLABLE COG..HANGUL SYLLABLE COH\n\t{0xCD24, 0xCD24, prLV},                     // Lo       HANGUL SYLLABLE CWA\n\t{0xCD25, 0xCD3F, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWAG..HANGUL SYLLABLE CWAH\n\t{0xCD40, 0xCD40, prLV},                     // Lo       HANGUL SYLLABLE CWAE\n\t{0xCD41, 0xCD5B, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWAEG..HANGUL SYLLABLE CWAEH\n\t{0xCD5C, 0xCD5C, prLV},                     // Lo       HANGUL SYLLABLE COE\n\t{0xCD5D, 0xCD77, prLVT},                    // Lo  [27] HANGUL SYLLABLE COEG..HANGUL SYLLABLE COEH\n\t{0xCD78, 0xCD78, prLV},                     // Lo       HANGUL SYLLABLE CYO\n\t{0xCD79, 0xCD93, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYOG..HANGUL SYLLABLE CYOH\n\t{0xCD94, 0xCD94, prLV},                     // Lo       HANGUL SYLLABLE CU\n\t{0xCD95, 0xCDAF, prLVT},                    // Lo  [27] HANGUL SYLLABLE CUG..HANGUL SYLLABLE CUH\n\t{0xCDB0, 0xCDB0, prLV},                     // Lo       HANGUL SYLLABLE CWEO\n\t{0xCDB1, 0xCDCB, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWEOG..HANGUL SYLLABLE CWEOH\n\t{0xCDCC, 0xCDCC, prLV},                     // Lo       HANGUL SYLLABLE CWE\n\t{0xCDCD, 0xCDE7, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWEG..HANGUL SYLLABLE CWEH\n\t{0xCDE8, 0xCDE8, prLV},                     // Lo       HANGUL SYLLABLE CWI\n\t{0xCDE9, 0xCE03, prLVT},                    // Lo  [27] HANGUL SYLLABLE CWIG..HANGUL SYLLABLE CWIH\n\t{0xCE04, 0xCE04, prLV},                     // Lo       HANGUL SYLLABLE CYU\n\t{0xCE05, 0xCE1F, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYUG..HANGUL SYLLABLE CYUH\n\t{0xCE20, 0xCE20, prLV},                     // Lo       HANGUL SYLLABLE CEU\n\t{0xCE21, 0xCE3B, prLVT},                    // Lo  [27] HANGUL SYLLABLE CEUG..HANGUL SYLLABLE CEUH\n\t{0xCE3C, 0xCE3C, prLV},                     // Lo       HANGUL SYLLABLE CYI\n\t{0xCE3D, 0xCE57, prLVT},                    // Lo  [27] HANGUL SYLLABLE CYIG..HANGUL SYLLABLE CYIH\n\t{0xCE58, 0xCE58, prLV},                     // Lo       HANGUL SYLLABLE CI\n\t{0xCE59, 0xCE73, prLVT},                    // Lo  [27] HANGUL SYLLABLE CIG..HANGUL SYLLABLE CIH\n\t{0xCE74, 0xCE74, prLV},                     // Lo       HANGUL SYLLABLE KA\n\t{0xCE75, 0xCE8F, prLVT},                    // Lo  [27] HANGUL SYLLABLE KAG..HANGUL SYLLABLE KAH\n\t{0xCE90, 0xCE90, prLV},                     // Lo       HANGUL SYLLABLE KAE\n\t{0xCE91, 0xCEAB, prLVT},                    // Lo  [27] HANGUL SYLLABLE KAEG..HANGUL SYLLABLE KAEH\n\t{0xCEAC, 0xCEAC, prLV},                     // Lo       HANGUL SYLLABLE KYA\n\t{0xCEAD, 0xCEC7, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYAG..HANGUL SYLLABLE KYAH\n\t{0xCEC8, 0xCEC8, prLV},                     // Lo       HANGUL SYLLABLE KYAE\n\t{0xCEC9, 0xCEE3, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYAEG..HANGUL SYLLABLE KYAEH\n\t{0xCEE4, 0xCEE4, prLV},                     // Lo       HANGUL SYLLABLE KEO\n\t{0xCEE5, 0xCEFF, prLVT},                    // Lo  [27] HANGUL SYLLABLE KEOG..HANGUL SYLLABLE KEOH\n\t{0xCF00, 0xCF00, prLV},                     // Lo       HANGUL SYLLABLE KE\n\t{0xCF01, 0xCF1B, prLVT},                    // Lo  [27] HANGUL SYLLABLE KEG..HANGUL SYLLABLE KEH\n\t{0xCF1C, 0xCF1C, prLV},                     // Lo       HANGUL SYLLABLE KYEO\n\t{0xCF1D, 0xCF37, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYEOG..HANGUL SYLLABLE KYEOH\n\t{0xCF38, 0xCF38, prLV},                     // Lo       HANGUL SYLLABLE KYE\n\t{0xCF39, 0xCF53, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYEG..HANGUL SYLLABLE KYEH\n\t{0xCF54, 0xCF54, prLV},                     // Lo       HANGUL SYLLABLE KO\n\t{0xCF55, 0xCF6F, prLVT},                    // Lo  [27] HANGUL SYLLABLE KOG..HANGUL SYLLABLE KOH\n\t{0xCF70, 0xCF70, prLV},                     // Lo       HANGUL SYLLABLE KWA\n\t{0xCF71, 0xCF8B, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWAG..HANGUL SYLLABLE KWAH\n\t{0xCF8C, 0xCF8C, prLV},                     // Lo       HANGUL SYLLABLE KWAE\n\t{0xCF8D, 0xCFA7, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWAEG..HANGUL SYLLABLE KWAEH\n\t{0xCFA8, 0xCFA8, prLV},                     // Lo       HANGUL SYLLABLE KOE\n\t{0xCFA9, 0xCFC3, prLVT},                    // Lo  [27] HANGUL SYLLABLE KOEG..HANGUL SYLLABLE KOEH\n\t{0xCFC4, 0xCFC4, prLV},                     // Lo       HANGUL SYLLABLE KYO\n\t{0xCFC5, 0xCFDF, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYOG..HANGUL SYLLABLE KYOH\n\t{0xCFE0, 0xCFE0, prLV},                     // Lo       HANGUL SYLLABLE KU\n\t{0xCFE1, 0xCFFB, prLVT},                    // Lo  [27] HANGUL SYLLABLE KUG..HANGUL SYLLABLE KUH\n\t{0xCFFC, 0xCFFC, prLV},                     // Lo       HANGUL SYLLABLE KWEO\n\t{0xCFFD, 0xD017, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWEOG..HANGUL SYLLABLE KWEOH\n\t{0xD018, 0xD018, prLV},                     // Lo       HANGUL SYLLABLE KWE\n\t{0xD019, 0xD033, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWEG..HANGUL SYLLABLE KWEH\n\t{0xD034, 0xD034, prLV},                     // Lo       HANGUL SYLLABLE KWI\n\t{0xD035, 0xD04F, prLVT},                    // Lo  [27] HANGUL SYLLABLE KWIG..HANGUL SYLLABLE KWIH\n\t{0xD050, 0xD050, prLV},                     // Lo       HANGUL SYLLABLE KYU\n\t{0xD051, 0xD06B, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYUG..HANGUL SYLLABLE KYUH\n\t{0xD06C, 0xD06C, prLV},                     // Lo       HANGUL SYLLABLE KEU\n\t{0xD06D, 0xD087, prLVT},                    // Lo  [27] HANGUL SYLLABLE KEUG..HANGUL SYLLABLE KEUH\n\t{0xD088, 0xD088, prLV},                     // Lo       HANGUL SYLLABLE KYI\n\t{0xD089, 0xD0A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE KYIG..HANGUL SYLLABLE KYIH\n\t{0xD0A4, 0xD0A4, prLV},                     // Lo       HANGUL SYLLABLE KI\n\t{0xD0A5, 0xD0BF, prLVT},                    // Lo  [27] HANGUL SYLLABLE KIG..HANGUL SYLLABLE KIH\n\t{0xD0C0, 0xD0C0, prLV},                     // Lo       HANGUL SYLLABLE TA\n\t{0xD0C1, 0xD0DB, prLVT},                    // Lo  [27] HANGUL SYLLABLE TAG..HANGUL SYLLABLE TAH\n\t{0xD0DC, 0xD0DC, prLV},                     // Lo       HANGUL SYLLABLE TAE\n\t{0xD0DD, 0xD0F7, prLVT},                    // Lo  [27] HANGUL SYLLABLE TAEG..HANGUL SYLLABLE TAEH\n\t{0xD0F8, 0xD0F8, prLV},                     // Lo       HANGUL SYLLABLE TYA\n\t{0xD0F9, 0xD113, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYAG..HANGUL SYLLABLE TYAH\n\t{0xD114, 0xD114, prLV},                     // Lo       HANGUL SYLLABLE TYAE\n\t{0xD115, 0xD12F, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYAEG..HANGUL SYLLABLE TYAEH\n\t{0xD130, 0xD130, prLV},                     // Lo       HANGUL SYLLABLE TEO\n\t{0xD131, 0xD14B, prLVT},                    // Lo  [27] HANGUL SYLLABLE TEOG..HANGUL SYLLABLE TEOH\n\t{0xD14C, 0xD14C, prLV},                     // Lo       HANGUL SYLLABLE TE\n\t{0xD14D, 0xD167, prLVT},                    // Lo  [27] HANGUL SYLLABLE TEG..HANGUL SYLLABLE TEH\n\t{0xD168, 0xD168, prLV},                     // Lo       HANGUL SYLLABLE TYEO\n\t{0xD169, 0xD183, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYEOG..HANGUL SYLLABLE TYEOH\n\t{0xD184, 0xD184, prLV},                     // Lo       HANGUL SYLLABLE TYE\n\t{0xD185, 0xD19F, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYEG..HANGUL SYLLABLE TYEH\n\t{0xD1A0, 0xD1A0, prLV},                     // Lo       HANGUL SYLLABLE TO\n\t{0xD1A1, 0xD1BB, prLVT},                    // Lo  [27] HANGUL SYLLABLE TOG..HANGUL SYLLABLE TOH\n\t{0xD1BC, 0xD1BC, prLV},                     // Lo       HANGUL SYLLABLE TWA\n\t{0xD1BD, 0xD1D7, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWAG..HANGUL SYLLABLE TWAH\n\t{0xD1D8, 0xD1D8, prLV},                     // Lo       HANGUL SYLLABLE TWAE\n\t{0xD1D9, 0xD1F3, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWAEG..HANGUL SYLLABLE TWAEH\n\t{0xD1F4, 0xD1F4, prLV},                     // Lo       HANGUL SYLLABLE TOE\n\t{0xD1F5, 0xD20F, prLVT},                    // Lo  [27] HANGUL SYLLABLE TOEG..HANGUL SYLLABLE TOEH\n\t{0xD210, 0xD210, prLV},                     // Lo       HANGUL SYLLABLE TYO\n\t{0xD211, 0xD22B, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYOG..HANGUL SYLLABLE TYOH\n\t{0xD22C, 0xD22C, prLV},                     // Lo       HANGUL SYLLABLE TU\n\t{0xD22D, 0xD247, prLVT},                    // Lo  [27] HANGUL SYLLABLE TUG..HANGUL SYLLABLE TUH\n\t{0xD248, 0xD248, prLV},                     // Lo       HANGUL SYLLABLE TWEO\n\t{0xD249, 0xD263, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWEOG..HANGUL SYLLABLE TWEOH\n\t{0xD264, 0xD264, prLV},                     // Lo       HANGUL SYLLABLE TWE\n\t{0xD265, 0xD27F, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWEG..HANGUL SYLLABLE TWEH\n\t{0xD280, 0xD280, prLV},                     // Lo       HANGUL SYLLABLE TWI\n\t{0xD281, 0xD29B, prLVT},                    // Lo  [27] HANGUL SYLLABLE TWIG..HANGUL SYLLABLE TWIH\n\t{0xD29C, 0xD29C, prLV},                     // Lo       HANGUL SYLLABLE TYU\n\t{0xD29D, 0xD2B7, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYUG..HANGUL SYLLABLE TYUH\n\t{0xD2B8, 0xD2B8, prLV},                     // Lo       HANGUL SYLLABLE TEU\n\t{0xD2B9, 0xD2D3, prLVT},                    // Lo  [27] HANGUL SYLLABLE TEUG..HANGUL SYLLABLE TEUH\n\t{0xD2D4, 0xD2D4, prLV},                     // Lo       HANGUL SYLLABLE TYI\n\t{0xD2D5, 0xD2EF, prLVT},                    // Lo  [27] HANGUL SYLLABLE TYIG..HANGUL SYLLABLE TYIH\n\t{0xD2F0, 0xD2F0, prLV},                     // Lo       HANGUL SYLLABLE TI\n\t{0xD2F1, 0xD30B, prLVT},                    // Lo  [27] HANGUL SYLLABLE TIG..HANGUL SYLLABLE TIH\n\t{0xD30C, 0xD30C, prLV},                     // Lo       HANGUL SYLLABLE PA\n\t{0xD30D, 0xD327, prLVT},                    // Lo  [27] HANGUL SYLLABLE PAG..HANGUL SYLLABLE PAH\n\t{0xD328, 0xD328, prLV},                     // Lo       HANGUL SYLLABLE PAE\n\t{0xD329, 0xD343, prLVT},                    // Lo  [27] HANGUL SYLLABLE PAEG..HANGUL SYLLABLE PAEH\n\t{0xD344, 0xD344, prLV},                     // Lo       HANGUL SYLLABLE PYA\n\t{0xD345, 0xD35F, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYAG..HANGUL SYLLABLE PYAH\n\t{0xD360, 0xD360, prLV},                     // Lo       HANGUL SYLLABLE PYAE\n\t{0xD361, 0xD37B, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYAEG..HANGUL SYLLABLE PYAEH\n\t{0xD37C, 0xD37C, prLV},                     // Lo       HANGUL SYLLABLE PEO\n\t{0xD37D, 0xD397, prLVT},                    // Lo  [27] HANGUL SYLLABLE PEOG..HANGUL SYLLABLE PEOH\n\t{0xD398, 0xD398, prLV},                     // Lo       HANGUL SYLLABLE PE\n\t{0xD399, 0xD3B3, prLVT},                    // Lo  [27] HANGUL SYLLABLE PEG..HANGUL SYLLABLE PEH\n\t{0xD3B4, 0xD3B4, prLV},                     // Lo       HANGUL SYLLABLE PYEO\n\t{0xD3B5, 0xD3CF, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYEOG..HANGUL SYLLABLE PYEOH\n\t{0xD3D0, 0xD3D0, prLV},                     // Lo       HANGUL SYLLABLE PYE\n\t{0xD3D1, 0xD3EB, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYEG..HANGUL SYLLABLE PYEH\n\t{0xD3EC, 0xD3EC, prLV},                     // Lo       HANGUL SYLLABLE PO\n\t{0xD3ED, 0xD407, prLVT},                    // Lo  [27] HANGUL SYLLABLE POG..HANGUL SYLLABLE POH\n\t{0xD408, 0xD408, prLV},                     // Lo       HANGUL SYLLABLE PWA\n\t{0xD409, 0xD423, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWAG..HANGUL SYLLABLE PWAH\n\t{0xD424, 0xD424, prLV},                     // Lo       HANGUL SYLLABLE PWAE\n\t{0xD425, 0xD43F, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWAEG..HANGUL SYLLABLE PWAEH\n\t{0xD440, 0xD440, prLV},                     // Lo       HANGUL SYLLABLE POE\n\t{0xD441, 0xD45B, prLVT},                    // Lo  [27] HANGUL SYLLABLE POEG..HANGUL SYLLABLE POEH\n\t{0xD45C, 0xD45C, prLV},                     // Lo       HANGUL SYLLABLE PYO\n\t{0xD45D, 0xD477, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYOG..HANGUL SYLLABLE PYOH\n\t{0xD478, 0xD478, prLV},                     // Lo       HANGUL SYLLABLE PU\n\t{0xD479, 0xD493, prLVT},                    // Lo  [27] HANGUL SYLLABLE PUG..HANGUL SYLLABLE PUH\n\t{0xD494, 0xD494, prLV},                     // Lo       HANGUL SYLLABLE PWEO\n\t{0xD495, 0xD4AF, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWEOG..HANGUL SYLLABLE PWEOH\n\t{0xD4B0, 0xD4B0, prLV},                     // Lo       HANGUL SYLLABLE PWE\n\t{0xD4B1, 0xD4CB, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWEG..HANGUL SYLLABLE PWEH\n\t{0xD4CC, 0xD4CC, prLV},                     // Lo       HANGUL SYLLABLE PWI\n\t{0xD4CD, 0xD4E7, prLVT},                    // Lo  [27] HANGUL SYLLABLE PWIG..HANGUL SYLLABLE PWIH\n\t{0xD4E8, 0xD4E8, prLV},                     // Lo       HANGUL SYLLABLE PYU\n\t{0xD4E9, 0xD503, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYUG..HANGUL SYLLABLE PYUH\n\t{0xD504, 0xD504, prLV},                     // Lo       HANGUL SYLLABLE PEU\n\t{0xD505, 0xD51F, prLVT},                    // Lo  [27] HANGUL SYLLABLE PEUG..HANGUL SYLLABLE PEUH\n\t{0xD520, 0xD520, prLV},                     // Lo       HANGUL SYLLABLE PYI\n\t{0xD521, 0xD53B, prLVT},                    // Lo  [27] HANGUL SYLLABLE PYIG..HANGUL SYLLABLE PYIH\n\t{0xD53C, 0xD53C, prLV},                     // Lo       HANGUL SYLLABLE PI\n\t{0xD53D, 0xD557, prLVT},                    // Lo  [27] HANGUL SYLLABLE PIG..HANGUL SYLLABLE PIH\n\t{0xD558, 0xD558, prLV},                     // Lo       HANGUL SYLLABLE HA\n\t{0xD559, 0xD573, prLVT},                    // Lo  [27] HANGUL SYLLABLE HAG..HANGUL SYLLABLE HAH\n\t{0xD574, 0xD574, prLV},                     // Lo       HANGUL SYLLABLE HAE\n\t{0xD575, 0xD58F, prLVT},                    // Lo  [27] HANGUL SYLLABLE HAEG..HANGUL SYLLABLE HAEH\n\t{0xD590, 0xD590, prLV},                     // Lo       HANGUL SYLLABLE HYA\n\t{0xD591, 0xD5AB, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYAG..HANGUL SYLLABLE HYAH\n\t{0xD5AC, 0xD5AC, prLV},                     // Lo       HANGUL SYLLABLE HYAE\n\t{0xD5AD, 0xD5C7, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYAEG..HANGUL SYLLABLE HYAEH\n\t{0xD5C8, 0xD5C8, prLV},                     // Lo       HANGUL SYLLABLE HEO\n\t{0xD5C9, 0xD5E3, prLVT},                    // Lo  [27] HANGUL SYLLABLE HEOG..HANGUL SYLLABLE HEOH\n\t{0xD5E4, 0xD5E4, prLV},                     // Lo       HANGUL SYLLABLE HE\n\t{0xD5E5, 0xD5FF, prLVT},                    // Lo  [27] HANGUL SYLLABLE HEG..HANGUL SYLLABLE HEH\n\t{0xD600, 0xD600, prLV},                     // Lo       HANGUL SYLLABLE HYEO\n\t{0xD601, 0xD61B, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYEOG..HANGUL SYLLABLE HYEOH\n\t{0xD61C, 0xD61C, prLV},                     // Lo       HANGUL SYLLABLE HYE\n\t{0xD61D, 0xD637, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYEG..HANGUL SYLLABLE HYEH\n\t{0xD638, 0xD638, prLV},                     // Lo       HANGUL SYLLABLE HO\n\t{0xD639, 0xD653, prLVT},                    // Lo  [27] HANGUL SYLLABLE HOG..HANGUL SYLLABLE HOH\n\t{0xD654, 0xD654, prLV},                     // Lo       HANGUL SYLLABLE HWA\n\t{0xD655, 0xD66F, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWAG..HANGUL SYLLABLE HWAH\n\t{0xD670, 0xD670, prLV},                     // Lo       HANGUL SYLLABLE HWAE\n\t{0xD671, 0xD68B, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWAEG..HANGUL SYLLABLE HWAEH\n\t{0xD68C, 0xD68C, prLV},                     // Lo       HANGUL SYLLABLE HOE\n\t{0xD68D, 0xD6A7, prLVT},                    // Lo  [27] HANGUL SYLLABLE HOEG..HANGUL SYLLABLE HOEH\n\t{0xD6A8, 0xD6A8, prLV},                     // Lo       HANGUL SYLLABLE HYO\n\t{0xD6A9, 0xD6C3, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYOG..HANGUL SYLLABLE HYOH\n\t{0xD6C4, 0xD6C4, prLV},                     // Lo       HANGUL SYLLABLE HU\n\t{0xD6C5, 0xD6DF, prLVT},                    // Lo  [27] HANGUL SYLLABLE HUG..HANGUL SYLLABLE HUH\n\t{0xD6E0, 0xD6E0, prLV},                     // Lo       HANGUL SYLLABLE HWEO\n\t{0xD6E1, 0xD6FB, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWEOG..HANGUL SYLLABLE HWEOH\n\t{0xD6FC, 0xD6FC, prLV},                     // Lo       HANGUL SYLLABLE HWE\n\t{0xD6FD, 0xD717, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWEG..HANGUL SYLLABLE HWEH\n\t{0xD718, 0xD718, prLV},                     // Lo       HANGUL SYLLABLE HWI\n\t{0xD719, 0xD733, prLVT},                    // Lo  [27] HANGUL SYLLABLE HWIG..HANGUL SYLLABLE HWIH\n\t{0xD734, 0xD734, prLV},                     // Lo       HANGUL SYLLABLE HYU\n\t{0xD735, 0xD74F, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYUG..HANGUL SYLLABLE HYUH\n\t{0xD750, 0xD750, prLV},                     // Lo       HANGUL SYLLABLE HEU\n\t{0xD751, 0xD76B, prLVT},                    // Lo  [27] HANGUL SYLLABLE HEUG..HANGUL SYLLABLE HEUH\n\t{0xD76C, 0xD76C, prLV},                     // Lo       HANGUL SYLLABLE HYI\n\t{0xD76D, 0xD787, prLVT},                    // Lo  [27] HANGUL SYLLABLE HYIG..HANGUL SYLLABLE HYIH\n\t{0xD788, 0xD788, prLV},                     // Lo       HANGUL SYLLABLE HI\n\t{0xD789, 0xD7A3, prLVT},                    // Lo  [27] HANGUL SYLLABLE HIG..HANGUL SYLLABLE HIH\n\t{0xD7B0, 0xD7C6, prV},                      // Lo  [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E\n\t{0xD7CB, 0xD7FB, prT},                      // Lo  [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH\n\t{0xFB1E, 0xFB1E, prExtend},                 // Mn       HEBREW POINT JUDEO-SPANISH VARIKA\n\t{0xFE00, 0xFE0F, prExtend},                 // Mn  [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16\n\t{0xFE20, 0xFE2F, prExtend},                 // Mn  [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF\n\t{0xFEFF, 0xFEFF, prControl},                // Cf       ZERO WIDTH NO-BREAK SPACE\n\t{0xFF9E, 0xFF9F, prExtend},                 // Lm   [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK\n\t{0xFFF0, 0xFFF8, prControl},                // Cn   [9] <reserved-FFF0>..<reserved-FFF8>\n\t{0xFFF9, 0xFFFB, prControl},                // Cf   [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR\n\t{0x101FD, 0x101FD, prExtend},               // Mn       PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE\n\t{0x102E0, 0x102E0, prExtend},               // Mn       COPTIC EPACT THOUSANDS MARK\n\t{0x10376, 0x1037A, prExtend},               // Mn   [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII\n\t{0x10A01, 0x10A03, prExtend},               // Mn   [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R\n\t{0x10A05, 0x10A06, prExtend},               // Mn   [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O\n\t{0x10A0C, 0x10A0F, prExtend},               // Mn   [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA\n\t{0x10A38, 0x10A3A, prExtend},               // Mn   [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW\n\t{0x10A3F, 0x10A3F, prExtend},               // Mn       KHAROSHTHI VIRAMA\n\t{0x10AE5, 0x10AE6, prExtend},               // Mn   [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW\n\t{0x10D24, 0x10D27, prExtend},               // Mn   [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI\n\t{0x10F46, 0x10F50, prExtend},               // Mn  [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW\n\t{0x11000, 0x11000, prSpacingMark},          // Mc       BRAHMI SIGN CANDRABINDU\n\t{0x11001, 0x11001, prExtend},               // Mn       BRAHMI SIGN ANUSVARA\n\t{0x11002, 0x11002, prSpacingMark},          // Mc       BRAHMI SIGN VISARGA\n\t{0x11038, 0x11046, prExtend},               // Mn  [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA\n\t{0x1107F, 0x11081, prExtend},               // Mn   [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA\n\t{0x11082, 0x11082, prSpacingMark},          // Mc       KAITHI SIGN VISARGA\n\t{0x110B0, 0x110B2, prSpacingMark},          // Mc   [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II\n\t{0x110B3, 0x110B6, prExtend},               // Mn   [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI\n\t{0x110B7, 0x110B8, prSpacingMark},          // Mc   [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU\n\t{0x110B9, 0x110BA, prExtend},               // Mn   [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA\n\t{0x110BD, 0x110BD, prPreprend},             // Cf       KAITHI NUMBER SIGN\n\t{0x110CD, 0x110CD, prPreprend},             // Cf       KAITHI NUMBER SIGN ABOVE\n\t{0x11100, 0x11102, prExtend},               // Mn   [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA\n\t{0x11127, 0x1112B, prExtend},               // Mn   [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU\n\t{0x1112C, 0x1112C, prSpacingMark},          // Mc       CHAKMA VOWEL SIGN E\n\t{0x1112D, 0x11134, prExtend},               // Mn   [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA\n\t{0x11145, 0x11146, prSpacingMark},          // Mc   [2] CHAKMA VOWEL SIGN AA..CHAKMA VOWEL SIGN EI\n\t{0x11173, 0x11173, prExtend},               // Mn       MAHAJANI SIGN NUKTA\n\t{0x11180, 0x11181, prExtend},               // Mn   [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA\n\t{0x11182, 0x11182, prSpacingMark},          // Mc       SHARADA SIGN VISARGA\n\t{0x111B3, 0x111B5, prSpacingMark},          // Mc   [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II\n\t{0x111B6, 0x111BE, prExtend},               // Mn   [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O\n\t{0x111BF, 0x111C0, prSpacingMark},          // Mc   [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA\n\t{0x111C2, 0x111C3, prPreprend},             // Lo   [2] SHARADA SIGN JIHVAMULIYA..SHARADA SIGN UPADHMANIYA\n\t{0x111C9, 0x111CC, prExtend},               // Mn   [4] SHARADA SANDHI MARK..SHARADA EXTRA SHORT VOWEL MARK\n\t{0x1122C, 0x1122E, prSpacingMark},          // Mc   [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II\n\t{0x1122F, 0x11231, prExtend},               // Mn   [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI\n\t{0x11232, 0x11233, prSpacingMark},          // Mc   [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU\n\t{0x11234, 0x11234, prExtend},               // Mn       KHOJKI SIGN ANUSVARA\n\t{0x11235, 0x11235, prSpacingMark},          // Mc       KHOJKI SIGN VIRAMA\n\t{0x11236, 0x11237, prExtend},               // Mn   [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA\n\t{0x1123E, 0x1123E, prExtend},               // Mn       KHOJKI SIGN SUKUN\n\t{0x112DF, 0x112DF, prExtend},               // Mn       KHUDAWADI SIGN ANUSVARA\n\t{0x112E0, 0x112E2, prSpacingMark},          // Mc   [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II\n\t{0x112E3, 0x112EA, prExtend},               // Mn   [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA\n\t{0x11300, 0x11301, prExtend},               // Mn   [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU\n\t{0x11302, 0x11303, prSpacingMark},          // Mc   [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA\n\t{0x1133B, 0x1133C, prExtend},               // Mn   [2] COMBINING BINDU BELOW..GRANTHA SIGN NUKTA\n\t{0x1133E, 0x1133E, prExtend},               // Mc       GRANTHA VOWEL SIGN AA\n\t{0x1133F, 0x1133F, prSpacingMark},          // Mc       GRANTHA VOWEL SIGN I\n\t{0x11340, 0x11340, prExtend},               // Mn       GRANTHA VOWEL SIGN II\n\t{0x11341, 0x11344, prSpacingMark},          // Mc   [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR\n\t{0x11347, 0x11348, prSpacingMark},          // Mc   [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI\n\t{0x1134B, 0x1134D, prSpacingMark},          // Mc   [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA\n\t{0x11357, 0x11357, prExtend},               // Mc       GRANTHA AU LENGTH MARK\n\t{0x11362, 0x11363, prSpacingMark},          // Mc   [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL\n\t{0x11366, 0x1136C, prExtend},               // Mn   [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX\n\t{0x11370, 0x11374, prExtend},               // Mn   [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA\n\t{0x11435, 0x11437, prSpacingMark},          // Mc   [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II\n\t{0x11438, 0x1143F, prExtend},               // Mn   [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI\n\t{0x11440, 0x11441, prSpacingMark},          // Mc   [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU\n\t{0x11442, 0x11444, prExtend},               // Mn   [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA\n\t{0x11445, 0x11445, prSpacingMark},          // Mc       NEWA SIGN VISARGA\n\t{0x11446, 0x11446, prExtend},               // Mn       NEWA SIGN NUKTA\n\t{0x1145E, 0x1145E, prExtend},               // Mn       NEWA SANDHI MARK\n\t{0x114B0, 0x114B0, prExtend},               // Mc       TIRHUTA VOWEL SIGN AA\n\t{0x114B1, 0x114B2, prSpacingMark},          // Mc   [2] TIRHUTA VOWEL SIGN I..TIRHUTA VOWEL SIGN II\n\t{0x114B3, 0x114B8, prExtend},               // Mn   [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL\n\t{0x114B9, 0x114B9, prSpacingMark},          // Mc       TIRHUTA VOWEL SIGN E\n\t{0x114BA, 0x114BA, prExtend},               // Mn       TIRHUTA VOWEL SIGN SHORT E\n\t{0x114BB, 0x114BC, prSpacingMark},          // Mc   [2] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN O\n\t{0x114BD, 0x114BD, prExtend},               // Mc       TIRHUTA VOWEL SIGN SHORT O\n\t{0x114BE, 0x114BE, prSpacingMark},          // Mc       TIRHUTA VOWEL SIGN AU\n\t{0x114BF, 0x114C0, prExtend},               // Mn   [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA\n\t{0x114C1, 0x114C1, prSpacingMark},          // Mc       TIRHUTA SIGN VISARGA\n\t{0x114C2, 0x114C3, prExtend},               // Mn   [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA\n\t{0x115AF, 0x115AF, prExtend},               // Mc       SIDDHAM VOWEL SIGN AA\n\t{0x115B0, 0x115B1, prSpacingMark},          // Mc   [2] SIDDHAM VOWEL SIGN I..SIDDHAM VOWEL SIGN II\n\t{0x115B2, 0x115B5, prExtend},               // Mn   [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR\n\t{0x115B8, 0x115BB, prSpacingMark},          // Mc   [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU\n\t{0x115BC, 0x115BD, prExtend},               // Mn   [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA\n\t{0x115BE, 0x115BE, prSpacingMark},          // Mc       SIDDHAM SIGN VISARGA\n\t{0x115BF, 0x115C0, prExtend},               // Mn   [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA\n\t{0x115DC, 0x115DD, prExtend},               // Mn   [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU\n\t{0x11630, 0x11632, prSpacingMark},          // Mc   [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II\n\t{0x11633, 0x1163A, prExtend},               // Mn   [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI\n\t{0x1163B, 0x1163C, prSpacingMark},          // Mc   [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU\n\t{0x1163D, 0x1163D, prExtend},               // Mn       MODI SIGN ANUSVARA\n\t{0x1163E, 0x1163E, prSpacingMark},          // Mc       MODI SIGN VISARGA\n\t{0x1163F, 0x11640, prExtend},               // Mn   [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA\n\t{0x116AB, 0x116AB, prExtend},               // Mn       TAKRI SIGN ANUSVARA\n\t{0x116AC, 0x116AC, prSpacingMark},          // Mc       TAKRI SIGN VISARGA\n\t{0x116AD, 0x116AD, prExtend},               // Mn       TAKRI VOWEL SIGN AA\n\t{0x116AE, 0x116AF, prSpacingMark},          // Mc   [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II\n\t{0x116B0, 0x116B5, prExtend},               // Mn   [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU\n\t{0x116B6, 0x116B6, prSpacingMark},          // Mc       TAKRI SIGN VIRAMA\n\t{0x116B7, 0x116B7, prExtend},               // Mn       TAKRI SIGN NUKTA\n\t{0x1171D, 0x1171F, prExtend},               // Mn   [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA\n\t{0x11720, 0x11721, prSpacingMark},          // Mc   [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA\n\t{0x11722, 0x11725, prExtend},               // Mn   [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU\n\t{0x11726, 0x11726, prSpacingMark},          // Mc       AHOM VOWEL SIGN E\n\t{0x11727, 0x1172B, prExtend},               // Mn   [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER\n\t{0x1182C, 0x1182E, prSpacingMark},          // Mc   [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II\n\t{0x1182F, 0x11837, prExtend},               // Mn   [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA\n\t{0x11838, 0x11838, prSpacingMark},          // Mc       DOGRA SIGN VISARGA\n\t{0x11839, 0x1183A, prExtend},               // Mn   [2] DOGRA SIGN VIRAMA..DOGRA SIGN NUKTA\n\t{0x119D1, 0x119D3, prSpacingMark},          // Mc   [3] NANDINAGARI VOWEL SIGN AA..NANDINAGARI VOWEL SIGN II\n\t{0x119D4, 0x119D7, prExtend},               // Mn   [4] NANDINAGARI VOWEL SIGN U..NANDINAGARI VOWEL SIGN VOCALIC RR\n\t{0x119DA, 0x119DB, prExtend},               // Mn   [2] NANDINAGARI VOWEL SIGN E..NANDINAGARI VOWEL SIGN AI\n\t{0x119DC, 0x119DF, prSpacingMark},          // Mc   [4] NANDINAGARI VOWEL SIGN O..NANDINAGARI SIGN VISARGA\n\t{0x119E0, 0x119E0, prExtend},               // Mn       NANDINAGARI SIGN VIRAMA\n\t{0x119E4, 0x119E4, prSpacingMark},          // Mc       NANDINAGARI VOWEL SIGN PRISHTHAMATRA E\n\t{0x11A01, 0x11A0A, prExtend},               // Mn  [10] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL LENGTH MARK\n\t{0x11A33, 0x11A38, prExtend},               // Mn   [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA\n\t{0x11A39, 0x11A39, prSpacingMark},          // Mc       ZANABAZAR SQUARE SIGN VISARGA\n\t{0x11A3A, 0x11A3A, prPreprend},             // Lo       ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA\n\t{0x11A3B, 0x11A3E, prExtend},               // Mn   [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA\n\t{0x11A47, 0x11A47, prExtend},               // Mn       ZANABAZAR SQUARE SUBJOINER\n\t{0x11A51, 0x11A56, prExtend},               // Mn   [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE\n\t{0x11A57, 0x11A58, prSpacingMark},          // Mc   [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU\n\t{0x11A59, 0x11A5B, prExtend},               // Mn   [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK\n\t{0x11A84, 0x11A89, prPreprend},             // Lo   [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA\n\t{0x11A8A, 0x11A96, prExtend},               // Mn  [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA\n\t{0x11A97, 0x11A97, prSpacingMark},          // Mc       SOYOMBO SIGN VISARGA\n\t{0x11A98, 0x11A99, prExtend},               // Mn   [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER\n\t{0x11C2F, 0x11C2F, prSpacingMark},          // Mc       BHAIKSUKI VOWEL SIGN AA\n\t{0x11C30, 0x11C36, prExtend},               // Mn   [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L\n\t{0x11C38, 0x11C3D, prExtend},               // Mn   [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA\n\t{0x11C3E, 0x11C3E, prSpacingMark},          // Mc       BHAIKSUKI SIGN VISARGA\n\t{0x11C3F, 0x11C3F, prExtend},               // Mn       BHAIKSUKI SIGN VIRAMA\n\t{0x11C92, 0x11CA7, prExtend},               // Mn  [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA\n\t{0x11CA9, 0x11CA9, prSpacingMark},          // Mc       MARCHEN SUBJOINED LETTER YA\n\t{0x11CAA, 0x11CB0, prExtend},               // Mn   [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA\n\t{0x11CB1, 0x11CB1, prSpacingMark},          // Mc       MARCHEN VOWEL SIGN I\n\t{0x11CB2, 0x11CB3, prExtend},               // Mn   [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E\n\t{0x11CB4, 0x11CB4, prSpacingMark},          // Mc       MARCHEN VOWEL SIGN O\n\t{0x11CB5, 0x11CB6, prExtend},               // Mn   [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU\n\t{0x11D31, 0x11D36, prExtend},               // Mn   [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R\n\t{0x11D3A, 0x11D3A, prExtend},               // Mn       MASARAM GONDI VOWEL SIGN E\n\t{0x11D3C, 0x11D3D, prExtend},               // Mn   [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O\n\t{0x11D3F, 0x11D45, prExtend},               // Mn   [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA\n\t{0x11D46, 0x11D46, prPreprend},             // Lo       MASARAM GONDI REPHA\n\t{0x11D47, 0x11D47, prExtend},               // Mn       MASARAM GONDI RA-KARA\n\t{0x11D8A, 0x11D8E, prSpacingMark},          // Mc   [5] GUNJALA GONDI VOWEL SIGN AA..GUNJALA GONDI VOWEL SIGN UU\n\t{0x11D90, 0x11D91, prExtend},               // Mn   [2] GUNJALA GONDI VOWEL SIGN EE..GUNJALA GONDI VOWEL SIGN AI\n\t{0x11D93, 0x11D94, prSpacingMark},          // Mc   [2] GUNJALA GONDI VOWEL SIGN OO..GUNJALA GONDI VOWEL SIGN AU\n\t{0x11D95, 0x11D95, prExtend},               // Mn       GUNJALA GONDI SIGN ANUSVARA\n\t{0x11D96, 0x11D96, prSpacingMark},          // Mc       GUNJALA GONDI SIGN VISARGA\n\t{0x11D97, 0x11D97, prExtend},               // Mn       GUNJALA GONDI VIRAMA\n\t{0x11EF3, 0x11EF4, prExtend},               // Mn   [2] MAKASAR VOWEL SIGN I..MAKASAR VOWEL SIGN U\n\t{0x11EF5, 0x11EF6, prSpacingMark},          // Mc   [2] MAKASAR VOWEL SIGN E..MAKASAR VOWEL SIGN O\n\t{0x13430, 0x13438, prControl},              // Cf   [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT\n\t{0x16AF0, 0x16AF4, prExtend},               // Mn   [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE\n\t{0x16B30, 0x16B36, prExtend},               // Mn   [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM\n\t{0x16F4F, 0x16F4F, prExtend},               // Mn       MIAO SIGN CONSONANT MODIFIER BAR\n\t{0x16F51, 0x16F87, prSpacingMark},          // Mc  [55] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN UI\n\t{0x16F8F, 0x16F92, prExtend},               // Mn   [4] MIAO TONE RIGHT..MIAO TONE BELOW\n\t{0x1BC9D, 0x1BC9E, prExtend},               // Mn   [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK\n\t{0x1BCA0, 0x1BCA3, prControl},              // Cf   [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP\n\t{0x1D165, 0x1D165, prExtend},               // Mc       MUSICAL SYMBOL COMBINING STEM\n\t{0x1D166, 0x1D166, prSpacingMark},          // Mc       MUSICAL SYMBOL COMBINING SPRECHGESANG STEM\n\t{0x1D167, 0x1D169, prExtend},               // Mn   [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3\n\t{0x1D16D, 0x1D16D, prSpacingMark},          // Mc       MUSICAL SYMBOL COMBINING AUGMENTATION DOT\n\t{0x1D16E, 0x1D172, prExtend},               // Mc   [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5\n\t{0x1D173, 0x1D17A, prControl},              // Cf   [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE\n\t{0x1D17B, 0x1D182, prExtend},               // Mn   [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE\n\t{0x1D185, 0x1D18B, prExtend},               // Mn   [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE\n\t{0x1D1AA, 0x1D1AD, prExtend},               // Mn   [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO\n\t{0x1D242, 0x1D244, prExtend},               // Mn   [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME\n\t{0x1DA00, 0x1DA36, prExtend},               // Mn  [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN\n\t{0x1DA3B, 0x1DA6C, prExtend},               // Mn  [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT\n\t{0x1DA75, 0x1DA75, prExtend},               // Mn       SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS\n\t{0x1DA84, 0x1DA84, prExtend},               // Mn       SIGNWRITING LOCATION HEAD NECK\n\t{0x1DA9B, 0x1DA9F, prExtend},               // Mn   [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6\n\t{0x1DAA1, 0x1DAAF, prExtend},               // Mn  [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16\n\t{0x1E000, 0x1E006, prExtend},               // Mn   [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE\n\t{0x1E008, 0x1E018, prExtend},               // Mn  [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU\n\t{0x1E01B, 0x1E021, prExtend},               // Mn   [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI\n\t{0x1E023, 0x1E024, prExtend},               // Mn   [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS\n\t{0x1E026, 0x1E02A, prExtend},               // Mn   [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA\n\t{0x1E130, 0x1E136, prExtend},               // Mn   [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D\n\t{0x1E2EC, 0x1E2EF, prExtend},               // Mn   [4] WANCHO TONE TUP..WANCHO TONE KOINI\n\t{0x1E8D0, 0x1E8D6, prExtend},               // Mn   [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS\n\t{0x1E944, 0x1E94A, prExtend},               // Mn   [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA\n\t{0x1F000, 0x1F02B, prExtendedPictographic}, //  5.1 [44] (🀀..🀫)    MAHJONG TILE EAST WIND..MAHJONG TILE BACK\n\t{0x1F02C, 0x1F02F, prExtendedPictographic}, //   NA  [4] (🀬..🀯)    <reserved-1F02C>..<reserved-1F02F>\n\t{0x1F030, 0x1F093, prExtendedPictographic}, //  5.1[100] (🀰..🂓)    DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06\n\t{0x1F094, 0x1F09F, prExtendedPictographic}, //   NA [12] (🂔..🂟)    <reserved-1F094>..<reserved-1F09F>\n\t{0x1F0A0, 0x1F0AE, prExtendedPictographic}, //  6.0 [15] (🂠..🂮)    PLAYING CARD BACK..PLAYING CARD KING OF SPADES\n\t{0x1F0AF, 0x1F0B0, prExtendedPictographic}, //   NA  [2] (🂯..🂰)    <reserved-1F0AF>..<reserved-1F0B0>\n\t{0x1F0B1, 0x1F0BE, prExtendedPictographic}, //  6.0 [14] (🂱..🂾)    PLAYING CARD ACE OF HEARTS..PLAYING CARD KING OF HEARTS\n\t{0x1F0BF, 0x1F0BF, prExtendedPictographic}, //  7.0  [1] (🂿)       PLAYING CARD RED JOKER\n\t{0x1F0C0, 0x1F0C0, prExtendedPictographic}, //   NA  [1] (🃀)       <reserved-1F0C0>\n\t{0x1F0C1, 0x1F0CF, prExtendedPictographic}, //  6.0 [15] (🃁..🃏)    PLAYING CARD ACE OF DIAMONDS..joker\n\t{0x1F0D0, 0x1F0D0, prExtendedPictographic}, //   NA  [1] (🃐)       <reserved-1F0D0>\n\t{0x1F0D1, 0x1F0DF, prExtendedPictographic}, //  6.0 [15] (🃑..🃟)    PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER\n\t{0x1F0E0, 0x1F0F5, prExtendedPictographic}, //  7.0 [22] (🃠..🃵)    PLAYING CARD FOOL..PLAYING CARD TRUMP-21\n\t{0x1F0F6, 0x1F0FF, prExtendedPictographic}, //   NA [10] (🃶..🃿)    <reserved-1F0F6>..<reserved-1F0FF>\n\t{0x1F10D, 0x1F10F, prExtendedPictographic}, //   NA  [3] (🄍..🄏)    <reserved-1F10D>..<reserved-1F10F>\n\t{0x1F12F, 0x1F12F, prExtendedPictographic}, // 11.0  [1] (🄯)       COPYLEFT SYMBOL\n\t{0x1F16C, 0x1F16C, prExtendedPictographic}, // 12.0  [1] (🅬)       RAISED MR SIGN\n\t{0x1F16D, 0x1F16F, prExtendedPictographic}, //   NA  [3] (🅭..🅯)    <reserved-1F16D>..<reserved-1F16F>\n\t{0x1F170, 0x1F171, prExtendedPictographic}, //  6.0  [2] (🅰️..🅱️)    A button (blood type)..B button (blood type)\n\t{0x1F17E, 0x1F17E, prExtendedPictographic}, //  6.0  [1] (🅾️)       O button (blood type)\n\t{0x1F17F, 0x1F17F, prExtendedPictographic}, //  5.2  [1] (🅿️)       P button\n\t{0x1F18E, 0x1F18E, prExtendedPictographic}, //  6.0  [1] (🆎)       AB button (blood type)\n\t{0x1F191, 0x1F19A, prExtendedPictographic}, //  6.0 [10] (🆑..🆚)    CL button..VS button\n\t{0x1F1AD, 0x1F1E5, prExtendedPictographic}, //   NA [57] (🆭..🇥)    <reserved-1F1AD>..<reserved-1F1E5>\n\t{0x1F1E6, 0x1F1FF, prRegionalIndicator},    // So  [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z\n\t{0x1F201, 0x1F202, prExtendedPictographic}, //  6.0  [2] (🈁..🈂️)    Japanese “here” button..Japanese “service charge” button\n\t{0x1F203, 0x1F20F, prExtendedPictographic}, //   NA [13] (🈃..🈏)    <reserved-1F203>..<reserved-1F20F>\n\t{0x1F21A, 0x1F21A, prExtendedPictographic}, //  5.2  [1] (🈚)       Japanese “free of charge” button\n\t{0x1F22F, 0x1F22F, prExtendedPictographic}, //  5.2  [1] (🈯)       Japanese “reserved” button\n\t{0x1F232, 0x1F23A, prExtendedPictographic}, //  6.0  [9] (🈲..🈺)    Japanese “prohibited” button..Japanese “open for business” button\n\t{0x1F23C, 0x1F23F, prExtendedPictographic}, //   NA  [4] (🈼..🈿)    <reserved-1F23C>..<reserved-1F23F>\n\t{0x1F249, 0x1F24F, prExtendedPictographic}, //   NA  [7] (🉉..🉏)    <reserved-1F249>..<reserved-1F24F>\n\t{0x1F250, 0x1F251, prExtendedPictographic}, //  6.0  [2] (🉐..🉑)    Japanese “bargain” button..Japanese “acceptable” button\n\t{0x1F252, 0x1F25F, prExtendedPictographic}, //   NA [14] (🉒..🉟)    <reserved-1F252>..<reserved-1F25F>\n\t{0x1F260, 0x1F265, prExtendedPictographic}, // 10.0  [6] (🉠..🉥)    ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI\n\t{0x1F266, 0x1F2FF, prExtendedPictographic}, //   NA[154] (🉦..🋿)    <reserved-1F266>..<reserved-1F2FF>\n\t{0x1F300, 0x1F320, prExtendedPictographic}, //  6.0 [33] (🌀..🌠)    cyclone..shooting star\n\t{0x1F321, 0x1F32C, prExtendedPictographic}, //  7.0 [12] (🌡️..🌬️)    thermometer..wind face\n\t{0x1F32D, 0x1F32F, prExtendedPictographic}, //  8.0  [3] (🌭..🌯)    hot dog..burrito\n\t{0x1F330, 0x1F335, prExtendedPictographic}, //  6.0  [6] (🌰..🌵)    chestnut..cactus\n\t{0x1F336, 0x1F336, prExtendedPictographic}, //  7.0  [1] (🌶️)       hot pepper\n\t{0x1F337, 0x1F37C, prExtendedPictographic}, //  6.0 [70] (🌷..🍼)    tulip..baby bottle\n\t{0x1F37D, 0x1F37D, prExtendedPictographic}, //  7.0  [1] (🍽️)       fork and knife with plate\n\t{0x1F37E, 0x1F37F, prExtendedPictographic}, //  8.0  [2] (🍾..🍿)    bottle with popping cork..popcorn\n\t{0x1F380, 0x1F393, prExtendedPictographic}, //  6.0 [20] (🎀..🎓)    ribbon..graduation cap\n\t{0x1F394, 0x1F39F, prExtendedPictographic}, //  7.0 [12] (🎔..🎟️)    HEART WITH TIP ON THE LEFT..admission tickets\n\t{0x1F3A0, 0x1F3C4, prExtendedPictographic}, //  6.0 [37] (🎠..🏄)    carousel horse..person surfing\n\t{0x1F3C5, 0x1F3C5, prExtendedPictographic}, //  7.0  [1] (🏅)       sports medal\n\t{0x1F3C6, 0x1F3CA, prExtendedPictographic}, //  6.0  [5] (🏆..🏊)    trophy..person swimming\n\t{0x1F3CB, 0x1F3CE, prExtendedPictographic}, //  7.0  [4] (🏋️..🏎️)    person lifting weights..racing car\n\t{0x1F3CF, 0x1F3D3, prExtendedPictographic}, //  8.0  [5] (🏏..🏓)    cricket game..ping pong\n\t{0x1F3D4, 0x1F3DF, prExtendedPictographic}, //  7.0 [12] (🏔️..🏟️)    snow-capped mountain..stadium\n\t{0x1F3E0, 0x1F3F0, prExtendedPictographic}, //  6.0 [17] (🏠..🏰)    house..castle\n\t{0x1F3F1, 0x1F3F7, prExtendedPictographic}, //  7.0  [7] (🏱..🏷️)    WHITE PENNANT..label\n\t{0x1F3F8, 0x1F3FA, prExtendedPictographic}, //  8.0  [3] (🏸..🏺)    badminton..amphora\n\t{0x1F3FB, 0x1F3FF, prExtend},               // Sk   [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6\n\t{0x1F400, 0x1F43E, prExtendedPictographic}, //  6.0 [63] (🐀..🐾)    rat..paw prints\n\t{0x1F43F, 0x1F43F, prExtendedPictographic}, //  7.0  [1] (🐿️)       chipmunk\n\t{0x1F440, 0x1F440, prExtendedPictographic}, //  6.0  [1] (👀)       eyes\n\t{0x1F441, 0x1F441, prExtendedPictographic}, //  7.0  [1] (👁️)       eye\n\t{0x1F442, 0x1F4F7, prExtendedPictographic}, //  6.0[182] (👂..📷)    ear..camera\n\t{0x1F4F8, 0x1F4F8, prExtendedPictographic}, //  7.0  [1] (📸)       camera with flash\n\t{0x1F4F9, 0x1F4FC, prExtendedPictographic}, //  6.0  [4] (📹..📼)    video camera..videocassette\n\t{0x1F4FD, 0x1F4FE, prExtendedPictographic}, //  7.0  [2] (📽️..📾)    film projector..PORTABLE STEREO\n\t{0x1F4FF, 0x1F4FF, prExtendedPictographic}, //  8.0  [1] (📿)       prayer beads\n\t{0x1F500, 0x1F53D, prExtendedPictographic}, //  6.0 [62] (🔀..🔽)    shuffle tracks button..downwards button\n\t{0x1F546, 0x1F54A, prExtendedPictographic}, //  7.0  [5] (🕆..🕊️)    WHITE LATIN CROSS..dove\n\t{0x1F54B, 0x1F54F, prExtendedPictographic}, //  8.0  [5] (🕋..🕏)    kaaba..BOWL OF HYGIEIA\n\t{0x1F550, 0x1F567, prExtendedPictographic}, //  6.0 [24] (🕐..🕧)    one o’clock..twelve-thirty\n\t{0x1F568, 0x1F579, prExtendedPictographic}, //  7.0 [18] (🕨..🕹️)    RIGHT SPEAKER..joystick\n\t{0x1F57A, 0x1F57A, prExtendedPictographic}, //  9.0  [1] (🕺)       man dancing\n\t{0x1F57B, 0x1F5A3, prExtendedPictographic}, //  7.0 [41] (🕻..🖣)    LEFT HAND TELEPHONE RECEIVER..BLACK DOWN POINTING BACKHAND INDEX\n\t{0x1F5A4, 0x1F5A4, prExtendedPictographic}, //  9.0  [1] (🖤)       black heart\n\t{0x1F5A5, 0x1F5FA, prExtendedPictographic}, //  7.0 [86] (🖥️..🗺️)    desktop computer..world map\n\t{0x1F5FB, 0x1F5FF, prExtendedPictographic}, //  6.0  [5] (🗻..🗿)    mount fuji..moai\n\t{0x1F600, 0x1F600, prExtendedPictographic}, //  6.1  [1] (😀)       grinning face\n\t{0x1F601, 0x1F610, prExtendedPictographic}, //  6.0 [16] (😁..😐)    beaming face with smiling eyes..neutral face\n\t{0x1F611, 0x1F611, prExtendedPictographic}, //  6.1  [1] (😑)       expressionless face\n\t{0x1F612, 0x1F614, prExtendedPictographic}, //  6.0  [3] (😒..😔)    unamused face..pensive face\n\t{0x1F615, 0x1F615, prExtendedPictographic}, //  6.1  [1] (😕)       confused face\n\t{0x1F616, 0x1F616, prExtendedPictographic}, //  6.0  [1] (😖)       confounded face\n\t{0x1F617, 0x1F617, prExtendedPictographic}, //  6.1  [1] (😗)       kissing face\n\t{0x1F618, 0x1F618, prExtendedPictographic}, //  6.0  [1] (😘)       face blowing a kiss\n\t{0x1F619, 0x1F619, prExtendedPictographic}, //  6.1  [1] (😙)       kissing face with smiling eyes\n\t{0x1F61A, 0x1F61A, prExtendedPictographic}, //  6.0  [1] (😚)       kissing face with closed eyes\n\t{0x1F61B, 0x1F61B, prExtendedPictographic}, //  6.1  [1] (😛)       face with tongue\n\t{0x1F61C, 0x1F61E, prExtendedPictographic}, //  6.0  [3] (😜..😞)    winking face with tongue..disappointed face\n\t{0x1F61F, 0x1F61F, prExtendedPictographic}, //  6.1  [1] (😟)       worried face\n\t{0x1F620, 0x1F625, prExtendedPictographic}, //  6.0  [6] (😠..😥)    angry face..sad but relieved face\n\t{0x1F626, 0x1F627, prExtendedPictographic}, //  6.1  [2] (😦..😧)    frowning face with open mouth..anguished face\n\t{0x1F628, 0x1F62B, prExtendedPictographic}, //  6.0  [4] (😨..😫)    fearful face..tired face\n\t{0x1F62C, 0x1F62C, prExtendedPictographic}, //  6.1  [1] (😬)       grimacing face\n\t{0x1F62D, 0x1F62D, prExtendedPictographic}, //  6.0  [1] (😭)       loudly crying face\n\t{0x1F62E, 0x1F62F, prExtendedPictographic}, //  6.1  [2] (😮..😯)    face with open mouth..hushed face\n\t{0x1F630, 0x1F633, prExtendedPictographic}, //  6.0  [4] (😰..😳)    anxious face with sweat..flushed face\n\t{0x1F634, 0x1F634, prExtendedPictographic}, //  6.1  [1] (😴)       sleeping face\n\t{0x1F635, 0x1F640, prExtendedPictographic}, //  6.0 [12] (😵..🙀)    dizzy face..weary cat\n\t{0x1F641, 0x1F642, prExtendedPictographic}, //  7.0  [2] (🙁..🙂)    slightly frowning face..slightly smiling face\n\t{0x1F643, 0x1F644, prExtendedPictographic}, //  8.0  [2] (🙃..🙄)    upside-down face..face with rolling eyes\n\t{0x1F645, 0x1F64F, prExtendedPictographic}, //  6.0 [11] (🙅..🙏)    person gesturing NO..folded hands\n\t{0x1F680, 0x1F6C5, prExtendedPictographic}, //  6.0 [70] (🚀..🛅)    rocket..left luggage\n\t{0x1F6C6, 0x1F6CF, prExtendedPictographic}, //  7.0 [10] (🛆..🛏️)    TRIANGLE WITH ROUNDED CORNERS..bed\n\t{0x1F6D0, 0x1F6D0, prExtendedPictographic}, //  8.0  [1] (🛐)       place of worship\n\t{0x1F6D1, 0x1F6D2, prExtendedPictographic}, //  9.0  [2] (🛑..🛒)    stop sign..shopping cart\n\t{0x1F6D3, 0x1F6D4, prExtendedPictographic}, // 10.0  [2] (🛓..🛔)    STUPA..PAGODA\n\t{0x1F6D5, 0x1F6D5, prExtendedPictographic}, // 12.0  [1] (🛕)       hindu temple\n\t{0x1F6D6, 0x1F6DF, prExtendedPictographic}, //   NA [10] (🛖..🛟)    <reserved-1F6D6>..<reserved-1F6DF>\n\t{0x1F6E0, 0x1F6EC, prExtendedPictographic}, //  7.0 [13] (🛠️..🛬)    hammer and wrench..airplane arrival\n\t{0x1F6ED, 0x1F6EF, prExtendedPictographic}, //   NA  [3] (🛭..🛯)    <reserved-1F6ED>..<reserved-1F6EF>\n\t{0x1F6F0, 0x1F6F3, prExtendedPictographic}, //  7.0  [4] (🛰️..🛳️)    satellite..passenger ship\n\t{0x1F6F4, 0x1F6F6, prExtendedPictographic}, //  9.0  [3] (🛴..🛶)    kick scooter..canoe\n\t{0x1F6F7, 0x1F6F8, prExtendedPictographic}, // 10.0  [2] (🛷..🛸)    sled..flying saucer\n\t{0x1F6F9, 0x1F6F9, prExtendedPictographic}, // 11.0  [1] (🛹)       skateboard\n\t{0x1F6FA, 0x1F6FA, prExtendedPictographic}, // 12.0  [1] (🛺)       auto rickshaw\n\t{0x1F6FB, 0x1F6FF, prExtendedPictographic}, //   NA  [5] (🛻..🛿)    <reserved-1F6FB>..<reserved-1F6FF>\n\t{0x1F774, 0x1F77F, prExtendedPictographic}, //   NA [12] (🝴..🝿)    <reserved-1F774>..<reserved-1F77F>\n\t{0x1F7D5, 0x1F7D8, prExtendedPictographic}, // 11.0  [4] (🟕..🟘)    CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE\n\t{0x1F7D9, 0x1F7DF, prExtendedPictographic}, //   NA  [7] (🟙..🟟)    <reserved-1F7D9>..<reserved-1F7DF>\n\t{0x1F7E0, 0x1F7EB, prExtendedPictographic}, // 12.0 [12] (🟠..🟫)    orange circle..brown square\n\t{0x1F7EC, 0x1F7FF, prExtendedPictographic}, //   NA [20] (🟬..🟿)    <reserved-1F7EC>..<reserved-1F7FF>\n\t{0x1F80C, 0x1F80F, prExtendedPictographic}, //   NA  [4] (🠌..🠏)    <reserved-1F80C>..<reserved-1F80F>\n\t{0x1F848, 0x1F84F, prExtendedPictographic}, //   NA  [8] (🡈..🡏)    <reserved-1F848>..<reserved-1F84F>\n\t{0x1F85A, 0x1F85F, prExtendedPictographic}, //   NA  [6] (🡚..🡟)    <reserved-1F85A>..<reserved-1F85F>\n\t{0x1F888, 0x1F88F, prExtendedPictographic}, //   NA  [8] (🢈..🢏)    <reserved-1F888>..<reserved-1F88F>\n\t{0x1F8AE, 0x1F8FF, prExtendedPictographic}, //   NA [82] (🢮..🣿)    <reserved-1F8AE>..<reserved-1F8FF>\n\t{0x1F90C, 0x1F90C, prExtendedPictographic}, //   NA  [1] (🤌)       <reserved-1F90C>\n\t{0x1F90D, 0x1F90F, prExtendedPictographic}, // 12.0  [3] (🤍..🤏)    white heart..pinching hand\n\t{0x1F910, 0x1F918, prExtendedPictographic}, //  8.0  [9] (🤐..🤘)    zipper-mouth face..sign of the horns\n\t{0x1F919, 0x1F91E, prExtendedPictographic}, //  9.0  [6] (🤙..🤞)    call me hand..crossed fingers\n\t{0x1F91F, 0x1F91F, prExtendedPictographic}, // 10.0  [1] (🤟)       love-you gesture\n\t{0x1F920, 0x1F927, prExtendedPictographic}, //  9.0  [8] (🤠..🤧)    cowboy hat face..sneezing face\n\t{0x1F928, 0x1F92F, prExtendedPictographic}, // 10.0  [8] (🤨..🤯)    face with raised eyebrow..exploding head\n\t{0x1F930, 0x1F930, prExtendedPictographic}, //  9.0  [1] (🤰)       pregnant woman\n\t{0x1F931, 0x1F932, prExtendedPictographic}, // 10.0  [2] (🤱..🤲)    breast-feeding..palms up together\n\t{0x1F933, 0x1F93A, prExtendedPictographic}, //  9.0  [8] (🤳..🤺)    selfie..person fencing\n\t{0x1F93C, 0x1F93E, prExtendedPictographic}, //  9.0  [3] (🤼..🤾)    people wrestling..person playing handball\n\t{0x1F93F, 0x1F93F, prExtendedPictographic}, // 12.0  [1] (🤿)       diving mask\n\t{0x1F940, 0x1F945, prExtendedPictographic}, //  9.0  [6] (🥀..🥅)    wilted flower..goal net\n\t{0x1F947, 0x1F94B, prExtendedPictographic}, //  9.0  [5] (🥇..🥋)    1st place medal..martial arts uniform\n\t{0x1F94C, 0x1F94C, prExtendedPictographic}, // 10.0  [1] (🥌)       curling stone\n\t{0x1F94D, 0x1F94F, prExtendedPictographic}, // 11.0  [3] (🥍..🥏)    lacrosse..flying disc\n\t{0x1F950, 0x1F95E, prExtendedPictographic}, //  9.0 [15] (🥐..🥞)    croissant..pancakes\n\t{0x1F95F, 0x1F96B, prExtendedPictographic}, // 10.0 [13] (🥟..🥫)    dumpling..canned food\n\t{0x1F96C, 0x1F970, prExtendedPictographic}, // 11.0  [5] (🥬..🥰)    leafy green..smiling face with hearts\n\t{0x1F971, 0x1F971, prExtendedPictographic}, // 12.0  [1] (🥱)       yawning face\n\t{0x1F972, 0x1F972, prExtendedPictographic}, //   NA  [1] (🥲)       <reserved-1F972>\n\t{0x1F973, 0x1F976, prExtendedPictographic}, // 11.0  [4] (🥳..🥶)    partying face..cold face\n\t{0x1F977, 0x1F979, prExtendedPictographic}, //   NA  [3] (🥷..🥹)    <reserved-1F977>..<reserved-1F979>\n\t{0x1F97A, 0x1F97A, prExtendedPictographic}, // 11.0  [1] (🥺)       pleading face\n\t{0x1F97B, 0x1F97B, prExtendedPictographic}, // 12.0  [1] (🥻)       sari\n\t{0x1F97C, 0x1F97F, prExtendedPictographic}, // 11.0  [4] (🥼..🥿)    lab coat..flat shoe\n\t{0x1F980, 0x1F984, prExtendedPictographic}, //  8.0  [5] (🦀..🦄)    crab..unicorn\n\t{0x1F985, 0x1F991, prExtendedPictographic}, //  9.0 [13] (🦅..🦑)    eagle..squid\n\t{0x1F992, 0x1F997, prExtendedPictographic}, // 10.0  [6] (🦒..🦗)    giraffe..cricket\n\t{0x1F998, 0x1F9A2, prExtendedPictographic}, // 11.0 [11] (🦘..🦢)    kangaroo..swan\n\t{0x1F9A3, 0x1F9A4, prExtendedPictographic}, //   NA  [2] (🦣..🦤)    <reserved-1F9A3>..<reserved-1F9A4>\n\t{0x1F9A5, 0x1F9AA, prExtendedPictographic}, // 12.0  [6] (🦥..🦪)    sloth..oyster\n\t{0x1F9AB, 0x1F9AD, prExtendedPictographic}, //   NA  [3] (🦫..🦭)    <reserved-1F9AB>..<reserved-1F9AD>\n\t{0x1F9AE, 0x1F9AF, prExtendedPictographic}, // 12.0  [2] (🦮..🦯)    guide dog..probing cane\n\t{0x1F9B0, 0x1F9B9, prExtendedPictographic}, // 11.0 [10] (🦰..🦹)    red hair..supervillain\n\t{0x1F9BA, 0x1F9BF, prExtendedPictographic}, // 12.0  [6] (🦺..🦿)    safety vest..mechanical leg\n\t{0x1F9C0, 0x1F9C0, prExtendedPictographic}, //  8.0  [1] (🧀)       cheese wedge\n\t{0x1F9C1, 0x1F9C2, prExtendedPictographic}, // 11.0  [2] (🧁..🧂)    cupcake..salt\n\t{0x1F9C3, 0x1F9CA, prExtendedPictographic}, // 12.0  [8] (🧃..🧊)    beverage box..ice cube\n\t{0x1F9CB, 0x1F9CC, prExtendedPictographic}, //   NA  [2] (🧋..🧌)    <reserved-1F9CB>..<reserved-1F9CC>\n\t{0x1F9CD, 0x1F9CF, prExtendedPictographic}, // 12.0  [3] (🧍..🧏)    person standing..deaf person\n\t{0x1F9D0, 0x1F9E6, prExtendedPictographic}, // 10.0 [23] (🧐..🧦)    face with monocle..socks\n\t{0x1F9E7, 0x1F9FF, prExtendedPictographic}, // 11.0 [25] (🧧..🧿)    red envelope..nazar amulet\n\t{0x1FA00, 0x1FA53, prExtendedPictographic}, // 12.0 [84] (🨀..🩓)    NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP\n\t{0x1FA54, 0x1FA5F, prExtendedPictographic}, //   NA [12] (🩔..🩟)    <reserved-1FA54>..<reserved-1FA5F>\n\t{0x1FA60, 0x1FA6D, prExtendedPictographic}, // 11.0 [14] (🩠..🩭)    XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER\n\t{0x1FA6E, 0x1FA6F, prExtendedPictographic}, //   NA  [2] (🩮..🩯)    <reserved-1FA6E>..<reserved-1FA6F>\n\t{0x1FA70, 0x1FA73, prExtendedPictographic}, // 12.0  [4] (🩰..🩳)    ballet shoes..shorts\n\t{0x1FA74, 0x1FA77, prExtendedPictographic}, //   NA  [4] (🩴..🩷)    <reserved-1FA74>..<reserved-1FA77>\n\t{0x1FA78, 0x1FA7A, prExtendedPictographic}, // 12.0  [3] (🩸..🩺)    drop of blood..stethoscope\n\t{0x1FA7B, 0x1FA7F, prExtendedPictographic}, //   NA  [5] (🩻..🩿)    <reserved-1FA7B>..<reserved-1FA7F>\n\t{0x1FA80, 0x1FA82, prExtendedPictographic}, // 12.0  [3] (🪀..🪂)    yo-yo..parachute\n\t{0x1FA83, 0x1FA8F, prExtendedPictographic}, //   NA [13] (🪃..🪏)    <reserved-1FA83>..<reserved-1FA8F>\n\t{0x1FA90, 0x1FA95, prExtendedPictographic}, // 12.0  [6] (🪐..🪕)    ringed planet..banjo\n\t{0x1FA96, 0x1FFFD, prExtendedPictographic}, //   NA[1384] (🪖..🿽)   <reserved-1FA96>..<reserved-1FFFD>\n\t{0xE0000, 0xE0000, prControl},              // Cn       <reserved-E0000>\n\t{0xE0001, 0xE0001, prControl},              // Cf       LANGUAGE TAG\n\t{0xE0002, 0xE001F, prControl},              // Cn  [30] <reserved-E0002>..<reserved-E001F>\n\t{0xE0020, 0xE007F, prExtend},               // Cf  [96] TAG SPACE..CANCEL TAG\n\t{0xE0080, 0xE00FF, prControl},              // Cn [128] <reserved-E0080>..<reserved-E00FF>\n\t{0xE0100, 0xE01EF, prExtend},               // Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256\n\t{0xE01F0, 0xE0FFF, prControl},              // Cn [3600] <reserved-E01F0>..<reserved-E0FFF>\n}\n\n// property returns the Unicode property value (see constants above) of the\n// given code point.\nfunc property(r rune) int {\n\t// Run a binary search.\n\tfrom := 0\n\tto := len(codePoints)\n\tfor to > from {\n\t\tmiddle := (from + to) / 2\n\t\tcpRange := codePoints[middle]\n\t\tif int(r) < cpRange[0] {\n\t\t\tto = middle\n\t\t\tcontinue\n\t\t}\n\t\tif int(r) > cpRange[1] {\n\t\t\tfrom = middle + 1\n\t\t\tcontinue\n\t\t}\n\t\treturn cpRange[2]\n\t}\n\treturn prAny\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/.gitignore",
    "content": "*.out\n*.swp\n*.8\n*.6\n_obj\n_test*\nmarkdown\ntags\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/.travis.yml",
    "content": "sudo: false\nlanguage: go\ngo:\n  - \"1.10.x\"\n  - \"1.11.x\"\n  - tip\nmatrix:\n  fast_finish: true\n  allow_failures:\n    - go: tip\ninstall:\n  - # Do nothing. This is needed to prevent default install action \"go get -t -v ./...\" from happening here (we want it to happen inside script step).\nscript:\n  - go get -t -v ./...\n  - diff -u <(echo -n) <(gofmt -d -s .)\n  - go tool vet .\n  - go test -v ./...\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/LICENSE.txt",
    "content": "Blackfriday is distributed under the Simplified BSD License:\n\n> Copyright © 2011 Russ Ross\n> All rights reserved.\n>\n> Redistribution and use in source and binary forms, with or without\n> modification, are permitted provided that the following conditions\n> are met:\n>\n> 1.  Redistributions of source code must retain the above copyright\n>     notice, this list of conditions and the following disclaimer.\n>\n> 2.  Redistributions in binary form must reproduce the above\n>     copyright notice, this list of conditions and the following\n>     disclaimer in the documentation and/or other materials provided with\n>     the distribution.\n>\n> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n> \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n> LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n> FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n> COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\n> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n> BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\n> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN\n> ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n> POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/README.md",
    "content": "Blackfriday\n[![Build Status][BuildV2SVG]][BuildV2URL]\n[![PkgGoDev][PkgGoDevV2SVG]][PkgGoDevV2URL]\n===========\n\nBlackfriday is a [Markdown][1] processor implemented in [Go][2]. It\nis paranoid about its input (so you can safely feed it user-supplied\ndata), it is fast, it supports common extensions (tables, smart\npunctuation substitutions, etc.), and it is safe for all utf-8\n(unicode) input.\n\nHTML output is currently supported, along with Smartypants\nextensions.\n\nIt started as a translation from C of [Sundown][3].\n\n\nInstallation\n------------\n\nBlackfriday is compatible with modern Go releases in module mode.\nWith Go installed:\n\n    go get github.com/russross/blackfriday/v2\n\nwill resolve and add the package to the current development module,\nthen build and install it. Alternatively, you can achieve the same\nif you import it in a package:\n\n    import \"github.com/russross/blackfriday/v2\"\n\nand `go get` without parameters.\n\nLegacy GOPATH mode is unsupported.\n\n\nVersions\n--------\n\nCurrently maintained and recommended version of Blackfriday is `v2`. It's being\ndeveloped on its own branch: https://github.com/russross/blackfriday/tree/v2 and the\ndocumentation is available at\nhttps://pkg.go.dev/github.com/russross/blackfriday/v2.\n\nIt is `go get`-able in module mode at `github.com/russross/blackfriday/v2`.\n\nVersion 2 offers a number of improvements over v1:\n\n* Cleaned up API\n* A separate call to [`Parse`][4], which produces an abstract syntax tree for\n  the document\n* Latest bug fixes\n* Flexibility to easily add your own rendering extensions\n\nPotential drawbacks:\n\n* Our benchmarks show v2 to be slightly slower than v1. Currently in the\n  ballpark of around 15%.\n* API breakage. If you can't afford modifying your code to adhere to the new API\n  and don't care too much about the new features, v2 is probably not for you.\n* Several bug fixes are trailing behind and still need to be forward-ported to\n  v2. See issue [#348](https://github.com/russross/blackfriday/issues/348) for\n  tracking.\n\nIf you are still interested in the legacy `v1`, you can import it from\n`github.com/russross/blackfriday`. Documentation for the legacy v1 can be found\nhere: https://pkg.go.dev/github.com/russross/blackfriday.\n\n\nUsage\n-----\n\nFor the most sensible markdown processing, it is as simple as getting your input\ninto a byte slice and calling:\n\n```go\noutput := blackfriday.Run(input)\n```\n\nYour input will be parsed and the output rendered with a set of most popular\nextensions enabled. If you want the most basic feature set, corresponding with\nthe bare Markdown specification, use:\n\n```go\noutput := blackfriday.Run(input, blackfriday.WithNoExtensions())\n```\n\n### Sanitize untrusted content\n\nBlackfriday itself does nothing to protect against malicious content. If you are\ndealing with user-supplied markdown, we recommend running Blackfriday's output\nthrough HTML sanitizer such as [Bluemonday][5].\n\nHere's an example of simple usage of Blackfriday together with Bluemonday:\n\n```go\nimport (\n    \"github.com/microcosm-cc/bluemonday\"\n    \"github.com/russross/blackfriday/v2\"\n)\n\n// ...\nunsafe := blackfriday.Run(input)\nhtml := bluemonday.UGCPolicy().SanitizeBytes(unsafe)\n```\n\n### Custom options\n\nIf you want to customize the set of options, use `blackfriday.WithExtensions`,\n`blackfriday.WithRenderer` and `blackfriday.WithRefOverride`.\n\n### `blackfriday-tool`\n\nYou can also check out `blackfriday-tool` for a more complete example\nof how to use it. Download and install it using:\n\n    go get github.com/russross/blackfriday-tool\n\nThis is a simple command-line tool that allows you to process a\nmarkdown file using a standalone program.  You can also browse the\nsource directly on github if you are just looking for some example\ncode:\n\n* <https://github.com/russross/blackfriday-tool>\n\nNote that if you have not already done so, installing\n`blackfriday-tool` will be sufficient to download and install\nblackfriday in addition to the tool itself. The tool binary will be\ninstalled in `$GOPATH/bin`.  This is a statically-linked binary that\ncan be copied to wherever you need it without worrying about\ndependencies and library versions.\n\n### Sanitized anchor names\n\nBlackfriday includes an algorithm for creating sanitized anchor names\ncorresponding to a given input text. This algorithm is used to create\nanchors for headings when `AutoHeadingIDs` extension is enabled. The\nalgorithm has a specification, so that other packages can create\ncompatible anchor names and links to those anchors.\n\nThe specification is located at https://pkg.go.dev/github.com/russross/blackfriday/v2#hdr-Sanitized_Anchor_Names.\n\n[`SanitizedAnchorName`](https://pkg.go.dev/github.com/russross/blackfriday/v2#SanitizedAnchorName) exposes this functionality, and can be used to\ncreate compatible links to the anchor names generated by blackfriday.\nThis algorithm is also implemented in a small standalone package at\n[`github.com/shurcooL/sanitized_anchor_name`](https://pkg.go.dev/github.com/shurcooL/sanitized_anchor_name). It can be useful for clients\nthat want a small package and don't need full functionality of blackfriday.\n\n\nFeatures\n--------\n\nAll features of Sundown are supported, including:\n\n*   **Compatibility**. The Markdown v1.0.3 test suite passes with\n    the `--tidy` option.  Without `--tidy`, the differences are\n    mostly in whitespace and entity escaping, where blackfriday is\n    more consistent and cleaner.\n\n*   **Common extensions**, including table support, fenced code\n    blocks, autolinks, strikethroughs, non-strict emphasis, etc.\n\n*   **Safety**. Blackfriday is paranoid when parsing, making it safe\n    to feed untrusted user input without fear of bad things\n    happening. The test suite stress tests this and there are no\n    known inputs that make it crash.  If you find one, please let me\n    know and send me the input that does it.\n\n    NOTE: \"safety\" in this context means *runtime safety only*. In order to\n    protect yourself against JavaScript injection in untrusted content, see\n    [this example](https://github.com/russross/blackfriday#sanitize-untrusted-content).\n\n*   **Fast processing**. It is fast enough to render on-demand in\n    most web applications without having to cache the output.\n\n*   **Thread safety**. You can run multiple parsers in different\n    goroutines without ill effect. There is no dependence on global\n    shared state.\n\n*   **Minimal dependencies**. Blackfriday only depends on standard\n    library packages in Go. The source code is pretty\n    self-contained, so it is easy to add to any project, including\n    Google App Engine projects.\n\n*   **Standards compliant**. Output successfully validates using the\n    W3C validation tool for HTML 4.01 and XHTML 1.0 Transitional.\n\n\nExtensions\n----------\n\nIn addition to the standard markdown syntax, this package\nimplements the following extensions:\n\n*   **Intra-word emphasis supression**. The `_` character is\n    commonly used inside words when discussing code, so having\n    markdown interpret it as an emphasis command is usually the\n    wrong thing. Blackfriday lets you treat all emphasis markers as\n    normal characters when they occur inside a word.\n\n*   **Tables**. Tables can be created by drawing them in the input\n    using a simple syntax:\n\n    ```\n    Name    | Age\n    --------|------\n    Bob     | 27\n    Alice   | 23\n    ```\n\n*   **Fenced code blocks**. In addition to the normal 4-space\n    indentation to mark code blocks, you can explicitly mark them\n    and supply a language (to make syntax highlighting simple). Just\n    mark it like this:\n\n        ```go\n        func getTrue() bool {\n            return true\n        }\n        ```\n\n    You can use 3 or more backticks to mark the beginning of the\n    block, and the same number to mark the end of the block.\n\n    To preserve classes of fenced code blocks while using the bluemonday\n    HTML sanitizer, use the following policy:\n\n    ```go\n    p := bluemonday.UGCPolicy()\n    p.AllowAttrs(\"class\").Matching(regexp.MustCompile(\"^language-[a-zA-Z0-9]+$\")).OnElements(\"code\")\n    html := p.SanitizeBytes(unsafe)\n    ```\n\n*   **Definition lists**. A simple definition list is made of a single-line\n    term followed by a colon and the definition for that term.\n\n        Cat\n        : Fluffy animal everyone likes\n\n        Internet\n        : Vector of transmission for pictures of cats\n\n    Terms must be separated from the previous definition by a blank line.\n\n*   **Footnotes**. A marker in the text that will become a superscript number;\n    a footnote definition that will be placed in a list of footnotes at the\n    end of the document. A footnote looks like this:\n\n        This is a footnote.[^1]\n\n        [^1]: the footnote text.\n\n*   **Autolinking**. Blackfriday can find URLs that have not been\n    explicitly marked as links and turn them into links.\n\n*   **Strikethrough**. Use two tildes (`~~`) to mark text that\n    should be crossed out.\n\n*   **Hard line breaks**. With this extension enabled newlines in the input\n    translate into line breaks in the output. This extension is off by default.\n\n*   **Smart quotes**. Smartypants-style punctuation substitution is\n    supported, turning normal double- and single-quote marks into\n    curly quotes, etc.\n\n*   **LaTeX-style dash parsing** is an additional option, where `--`\n    is translated into `&ndash;`, and `---` is translated into\n    `&mdash;`. This differs from most smartypants processors, which\n    turn a single hyphen into an ndash and a double hyphen into an\n    mdash.\n\n*   **Smart fractions**, where anything that looks like a fraction\n    is translated into suitable HTML (instead of just a few special\n    cases like most smartypant processors). For example, `4/5`\n    becomes `<sup>4</sup>&frasl;<sub>5</sub>`, which renders as\n    <sup>4</sup>&frasl;<sub>5</sub>.\n\n\nOther renderers\n---------------\n\nBlackfriday is structured to allow alternative rendering engines. Here\nare a few of note:\n\n*   [github_flavored_markdown](https://pkg.go.dev/github.com/shurcooL/github_flavored_markdown):\n    provides a GitHub Flavored Markdown renderer with fenced code block\n    highlighting, clickable heading anchor links.\n\n    It's not customizable, and its goal is to produce HTML output\n    equivalent to the [GitHub Markdown API endpoint](https://developer.github.com/v3/markdown/#render-a-markdown-document-in-raw-mode),\n    except the rendering is performed locally.\n\n*   [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt,\n    but for markdown.\n\n*   [LaTeX output](https://gitlab.com/ambrevar/blackfriday-latex):\n    renders output as LaTeX.\n\n*   [bfchroma](https://github.com/Depado/bfchroma/): provides convenience\n    integration with the [Chroma](https://github.com/alecthomas/chroma) code\n    highlighting library. bfchroma is only compatible with v2 of Blackfriday and\n    provides a drop-in renderer ready to use with Blackfriday, as well as\n    options and means for further customization.\n\n*   [Blackfriday-Confluence](https://github.com/kentaro-m/blackfriday-confluence): provides a [Confluence Wiki Markup](https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html) renderer.\n\n*   [Blackfriday-Slack](https://github.com/karriereat/blackfriday-slack): converts markdown to slack message style\n\n\nTODO\n----\n\n*   More unit testing\n*   Improve Unicode support. It does not understand all Unicode\n    rules (about what constitutes a letter, a punctuation symbol,\n    etc.), so it may fail to detect word boundaries correctly in\n    some instances. It is safe on all UTF-8 input.\n\n\nLicense\n-------\n\n[Blackfriday is distributed under the Simplified BSD License](LICENSE.txt)\n\n\n   [1]: https://daringfireball.net/projects/markdown/ \"Markdown\"\n   [2]: https://golang.org/ \"Go Language\"\n   [3]: https://github.com/vmg/sundown \"Sundown\"\n   [4]: https://pkg.go.dev/github.com/russross/blackfriday/v2#Parse \"Parse func\"\n   [5]: https://github.com/microcosm-cc/bluemonday \"Bluemonday\"\n\n   [BuildV2SVG]: https://travis-ci.org/russross/blackfriday.svg?branch=v2\n   [BuildV2URL]: https://travis-ci.org/russross/blackfriday\n   [PkgGoDevV2SVG]: https://pkg.go.dev/badge/github.com/russross/blackfriday/v2\n   [PkgGoDevV2URL]: https://pkg.go.dev/github.com/russross/blackfriday/v2\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/block.go",
    "content": "//\n// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n//\n\n//\n// Functions to parse block-level elements.\n//\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"html\"\n\t\"regexp\"\n\t\"strings\"\n\t\"unicode\"\n)\n\nconst (\n\tcharEntity = \"&(?:#x[a-f0-9]{1,8}|#[0-9]{1,8}|[a-z][a-z0-9]{1,31});\"\n\tescapable  = \"[!\\\"#$%&'()*+,./:;<=>?@[\\\\\\\\\\\\]^_`{|}~-]\"\n)\n\nvar (\n\treBackslashOrAmp      = regexp.MustCompile(\"[\\\\&]\")\n\treEntityOrEscapedChar = regexp.MustCompile(\"(?i)\\\\\\\\\" + escapable + \"|\" + charEntity)\n)\n\n// Parse block-level data.\n// Note: this function and many that it calls assume that\n// the input buffer ends with a newline.\nfunc (p *Markdown) block(data []byte) {\n\t// this is called recursively: enforce a maximum depth\n\tif p.nesting >= p.maxNesting {\n\t\treturn\n\t}\n\tp.nesting++\n\n\t// parse out one block-level construct at a time\n\tfor len(data) > 0 {\n\t\t// prefixed heading:\n\t\t//\n\t\t// # Heading 1\n\t\t// ## Heading 2\n\t\t// ...\n\t\t// ###### Heading 6\n\t\tif p.isPrefixHeading(data) {\n\t\t\tdata = data[p.prefixHeading(data):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// block of preformatted HTML:\n\t\t//\n\t\t// <div>\n\t\t//     ...\n\t\t// </div>\n\t\tif data[0] == '<' {\n\t\t\tif i := p.html(data, true); i > 0 {\n\t\t\t\tdata = data[i:]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// title block\n\t\t//\n\t\t// % stuff\n\t\t// % more stuff\n\t\t// % even more stuff\n\t\tif p.extensions&Titleblock != 0 {\n\t\t\tif data[0] == '%' {\n\t\t\t\tif i := p.titleBlock(data, true); i > 0 {\n\t\t\t\t\tdata = data[i:]\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// blank lines.  note: returns the # of bytes to skip\n\t\tif i := p.isEmpty(data); i > 0 {\n\t\t\tdata = data[i:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// indented code block:\n\t\t//\n\t\t//     func max(a, b int) int {\n\t\t//         if a > b {\n\t\t//             return a\n\t\t//         }\n\t\t//         return b\n\t\t//      }\n\t\tif p.codePrefix(data) > 0 {\n\t\t\tdata = data[p.code(data):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// fenced code block:\n\t\t//\n\t\t// ``` go\n\t\t// func fact(n int) int {\n\t\t//     if n <= 1 {\n\t\t//         return n\n\t\t//     }\n\t\t//     return n * fact(n-1)\n\t\t// }\n\t\t// ```\n\t\tif p.extensions&FencedCode != 0 {\n\t\t\tif i := p.fencedCodeBlock(data, true); i > 0 {\n\t\t\t\tdata = data[i:]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// horizontal rule:\n\t\t//\n\t\t// ------\n\t\t// or\n\t\t// ******\n\t\t// or\n\t\t// ______\n\t\tif p.isHRule(data) {\n\t\t\tp.addBlock(HorizontalRule, nil)\n\t\t\tvar i int\n\t\t\tfor i = 0; i < len(data) && data[i] != '\\n'; i++ {\n\t\t\t}\n\t\t\tdata = data[i:]\n\t\t\tcontinue\n\t\t}\n\n\t\t// block quote:\n\t\t//\n\t\t// > A big quote I found somewhere\n\t\t// > on the web\n\t\tif p.quotePrefix(data) > 0 {\n\t\t\tdata = data[p.quote(data):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// table:\n\t\t//\n\t\t// Name  | Age | Phone\n\t\t// ------|-----|---------\n\t\t// Bob   | 31  | 555-1234\n\t\t// Alice | 27  | 555-4321\n\t\tif p.extensions&Tables != 0 {\n\t\t\tif i := p.table(data); i > 0 {\n\t\t\t\tdata = data[i:]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// an itemized/unordered list:\n\t\t//\n\t\t// * Item 1\n\t\t// * Item 2\n\t\t//\n\t\t// also works with + or -\n\t\tif p.uliPrefix(data) > 0 {\n\t\t\tdata = data[p.list(data, 0):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// a numbered/ordered list:\n\t\t//\n\t\t// 1. Item 1\n\t\t// 2. Item 2\n\t\tif p.oliPrefix(data) > 0 {\n\t\t\tdata = data[p.list(data, ListTypeOrdered):]\n\t\t\tcontinue\n\t\t}\n\n\t\t// definition lists:\n\t\t//\n\t\t// Term 1\n\t\t// :   Definition a\n\t\t// :   Definition b\n\t\t//\n\t\t// Term 2\n\t\t// :   Definition c\n\t\tif p.extensions&DefinitionLists != 0 {\n\t\t\tif p.dliPrefix(data) > 0 {\n\t\t\t\tdata = data[p.list(data, ListTypeDefinition):]\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// anything else must look like a normal paragraph\n\t\t// note: this finds underlined headings, too\n\t\tdata = data[p.paragraph(data):]\n\t}\n\n\tp.nesting--\n}\n\nfunc (p *Markdown) addBlock(typ NodeType, content []byte) *Node {\n\tp.closeUnmatchedBlocks()\n\tcontainer := p.addChild(typ, 0)\n\tcontainer.content = content\n\treturn container\n}\n\nfunc (p *Markdown) isPrefixHeading(data []byte) bool {\n\tif data[0] != '#' {\n\t\treturn false\n\t}\n\n\tif p.extensions&SpaceHeadings != 0 {\n\t\tlevel := 0\n\t\tfor level < 6 && level < len(data) && data[level] == '#' {\n\t\t\tlevel++\n\t\t}\n\t\tif level == len(data) || data[level] != ' ' {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (p *Markdown) prefixHeading(data []byte) int {\n\tlevel := 0\n\tfor level < 6 && level < len(data) && data[level] == '#' {\n\t\tlevel++\n\t}\n\ti := skipChar(data, level, ' ')\n\tend := skipUntilChar(data, i, '\\n')\n\tskip := end\n\tid := \"\"\n\tif p.extensions&HeadingIDs != 0 {\n\t\tj, k := 0, 0\n\t\t// find start/end of heading id\n\t\tfor j = i; j < end-1 && (data[j] != '{' || data[j+1] != '#'); j++ {\n\t\t}\n\t\tfor k = j + 1; k < end && data[k] != '}'; k++ {\n\t\t}\n\t\t// extract heading id iff found\n\t\tif j < end && k < end {\n\t\t\tid = string(data[j+2 : k])\n\t\t\tend = j\n\t\t\tskip = k + 1\n\t\t\tfor end > 0 && data[end-1] == ' ' {\n\t\t\t\tend--\n\t\t\t}\n\t\t}\n\t}\n\tfor end > 0 && data[end-1] == '#' {\n\t\tif isBackslashEscaped(data, end-1) {\n\t\t\tbreak\n\t\t}\n\t\tend--\n\t}\n\tfor end > 0 && data[end-1] == ' ' {\n\t\tend--\n\t}\n\tif end > i {\n\t\tif id == \"\" && p.extensions&AutoHeadingIDs != 0 {\n\t\t\tid = SanitizedAnchorName(string(data[i:end]))\n\t\t}\n\t\tblock := p.addBlock(Heading, data[i:end])\n\t\tblock.HeadingID = id\n\t\tblock.Level = level\n\t}\n\treturn skip\n}\n\nfunc (p *Markdown) isUnderlinedHeading(data []byte) int {\n\t// test of level 1 heading\n\tif data[0] == '=' {\n\t\ti := skipChar(data, 1, '=')\n\t\ti = skipChar(data, i, ' ')\n\t\tif i < len(data) && data[i] == '\\n' {\n\t\t\treturn 1\n\t\t}\n\t\treturn 0\n\t}\n\n\t// test of level 2 heading\n\tif data[0] == '-' {\n\t\ti := skipChar(data, 1, '-')\n\t\ti = skipChar(data, i, ' ')\n\t\tif i < len(data) && data[i] == '\\n' {\n\t\t\treturn 2\n\t\t}\n\t\treturn 0\n\t}\n\n\treturn 0\n}\n\nfunc (p *Markdown) titleBlock(data []byte, doRender bool) int {\n\tif data[0] != '%' {\n\t\treturn 0\n\t}\n\tsplitData := bytes.Split(data, []byte(\"\\n\"))\n\tvar i int\n\tfor idx, b := range splitData {\n\t\tif !bytes.HasPrefix(b, []byte(\"%\")) {\n\t\t\ti = idx // - 1\n\t\t\tbreak\n\t\t}\n\t}\n\n\tdata = bytes.Join(splitData[0:i], []byte(\"\\n\"))\n\tconsumed := len(data)\n\tdata = bytes.TrimPrefix(data, []byte(\"% \"))\n\tdata = bytes.Replace(data, []byte(\"\\n% \"), []byte(\"\\n\"), -1)\n\tblock := p.addBlock(Heading, data)\n\tblock.Level = 1\n\tblock.IsTitleblock = true\n\n\treturn consumed\n}\n\nfunc (p *Markdown) html(data []byte, doRender bool) int {\n\tvar i, j int\n\n\t// identify the opening tag\n\tif data[0] != '<' {\n\t\treturn 0\n\t}\n\tcurtag, tagfound := p.htmlFindTag(data[1:])\n\n\t// handle special cases\n\tif !tagfound {\n\t\t// check for an HTML comment\n\t\tif size := p.htmlComment(data, doRender); size > 0 {\n\t\t\treturn size\n\t\t}\n\n\t\t// check for an <hr> tag\n\t\tif size := p.htmlHr(data, doRender); size > 0 {\n\t\t\treturn size\n\t\t}\n\n\t\t// no special case recognized\n\t\treturn 0\n\t}\n\n\t// look for an unindented matching closing tag\n\t// followed by a blank line\n\tfound := false\n\t/*\n\t\tclosetag := []byte(\"\\n</\" + curtag + \">\")\n\t\tj = len(curtag) + 1\n\t\tfor !found {\n\t\t\t// scan for a closing tag at the beginning of a line\n\t\t\tif skip := bytes.Index(data[j:], closetag); skip >= 0 {\n\t\t\t\tj += skip + len(closetag)\n\t\t\t} else {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// see if it is the only thing on the line\n\t\t\tif skip := p.isEmpty(data[j:]); skip > 0 {\n\t\t\t\t// see if it is followed by a blank line/eof\n\t\t\t\tj += skip\n\t\t\t\tif j >= len(data) {\n\t\t\t\t\tfound = true\n\t\t\t\t\ti = j\n\t\t\t\t} else {\n\t\t\t\t\tif skip := p.isEmpty(data[j:]); skip > 0 {\n\t\t\t\t\t\tj += skip\n\t\t\t\t\t\tfound = true\n\t\t\t\t\t\ti = j\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t*/\n\n\t// if not found, try a second pass looking for indented match\n\t// but not if tag is \"ins\" or \"del\" (following original Markdown.pl)\n\tif !found && curtag != \"ins\" && curtag != \"del\" {\n\t\ti = 1\n\t\tfor i < len(data) {\n\t\t\ti++\n\t\t\tfor i < len(data) && !(data[i-1] == '<' && data[i] == '/') {\n\t\t\t\ti++\n\t\t\t}\n\n\t\t\tif i+2+len(curtag) >= len(data) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tj = p.htmlFindEnd(curtag, data[i-1:])\n\n\t\t\tif j > 0 {\n\t\t\t\ti += j - 1\n\t\t\t\tfound = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\tif !found {\n\t\treturn 0\n\t}\n\n\t// the end of the block has been found\n\tif doRender {\n\t\t// trim newlines\n\t\tend := i\n\t\tfor end > 0 && data[end-1] == '\\n' {\n\t\t\tend--\n\t\t}\n\t\tfinalizeHTMLBlock(p.addBlock(HTMLBlock, data[:end]))\n\t}\n\n\treturn i\n}\n\nfunc finalizeHTMLBlock(block *Node) {\n\tblock.Literal = block.content\n\tblock.content = nil\n}\n\n// HTML comment, lax form\nfunc (p *Markdown) htmlComment(data []byte, doRender bool) int {\n\ti := p.inlineHTMLComment(data)\n\t// needs to end with a blank line\n\tif j := p.isEmpty(data[i:]); j > 0 {\n\t\tsize := i + j\n\t\tif doRender {\n\t\t\t// trim trailing newlines\n\t\t\tend := size\n\t\t\tfor end > 0 && data[end-1] == '\\n' {\n\t\t\t\tend--\n\t\t\t}\n\t\t\tblock := p.addBlock(HTMLBlock, data[:end])\n\t\t\tfinalizeHTMLBlock(block)\n\t\t}\n\t\treturn size\n\t}\n\treturn 0\n}\n\n// HR, which is the only self-closing block tag considered\nfunc (p *Markdown) htmlHr(data []byte, doRender bool) int {\n\tif len(data) < 4 {\n\t\treturn 0\n\t}\n\tif data[0] != '<' || (data[1] != 'h' && data[1] != 'H') || (data[2] != 'r' && data[2] != 'R') {\n\t\treturn 0\n\t}\n\tif data[3] != ' ' && data[3] != '/' && data[3] != '>' {\n\t\t// not an <hr> tag after all; at least not a valid one\n\t\treturn 0\n\t}\n\ti := 3\n\tfor i < len(data) && data[i] != '>' && data[i] != '\\n' {\n\t\ti++\n\t}\n\tif i < len(data) && data[i] == '>' {\n\t\ti++\n\t\tif j := p.isEmpty(data[i:]); j > 0 {\n\t\t\tsize := i + j\n\t\t\tif doRender {\n\t\t\t\t// trim newlines\n\t\t\t\tend := size\n\t\t\t\tfor end > 0 && data[end-1] == '\\n' {\n\t\t\t\t\tend--\n\t\t\t\t}\n\t\t\t\tfinalizeHTMLBlock(p.addBlock(HTMLBlock, data[:end]))\n\t\t\t}\n\t\t\treturn size\n\t\t}\n\t}\n\treturn 0\n}\n\nfunc (p *Markdown) htmlFindTag(data []byte) (string, bool) {\n\ti := 0\n\tfor i < len(data) && isalnum(data[i]) {\n\t\ti++\n\t}\n\tkey := string(data[:i])\n\tif _, ok := blockTags[key]; ok {\n\t\treturn key, true\n\t}\n\treturn \"\", false\n}\n\nfunc (p *Markdown) htmlFindEnd(tag string, data []byte) int {\n\t// assume data[0] == '<' && data[1] == '/' already tested\n\tif tag == \"hr\" {\n\t\treturn 2\n\t}\n\t// check if tag is a match\n\tclosetag := []byte(\"</\" + tag + \">\")\n\tif !bytes.HasPrefix(data, closetag) {\n\t\treturn 0\n\t}\n\ti := len(closetag)\n\n\t// check that the rest of the line is blank\n\tskip := 0\n\tif skip = p.isEmpty(data[i:]); skip == 0 {\n\t\treturn 0\n\t}\n\ti += skip\n\tskip = 0\n\n\tif i >= len(data) {\n\t\treturn i\n\t}\n\n\tif p.extensions&LaxHTMLBlocks != 0 {\n\t\treturn i\n\t}\n\tif skip = p.isEmpty(data[i:]); skip == 0 {\n\t\t// following line must be blank\n\t\treturn 0\n\t}\n\n\treturn i + skip\n}\n\nfunc (*Markdown) isEmpty(data []byte) int {\n\t// it is okay to call isEmpty on an empty buffer\n\tif len(data) == 0 {\n\t\treturn 0\n\t}\n\n\tvar i int\n\tfor i = 0; i < len(data) && data[i] != '\\n'; i++ {\n\t\tif data[i] != ' ' && data[i] != '\\t' {\n\t\t\treturn 0\n\t\t}\n\t}\n\tif i < len(data) && data[i] == '\\n' {\n\t\ti++\n\t}\n\treturn i\n}\n\nfunc (*Markdown) isHRule(data []byte) bool {\n\ti := 0\n\n\t// skip up to three spaces\n\tfor i < 3 && data[i] == ' ' {\n\t\ti++\n\t}\n\n\t// look at the hrule char\n\tif data[i] != '*' && data[i] != '-' && data[i] != '_' {\n\t\treturn false\n\t}\n\tc := data[i]\n\n\t// the whole line must be the char or whitespace\n\tn := 0\n\tfor i < len(data) && data[i] != '\\n' {\n\t\tswitch {\n\t\tcase data[i] == c:\n\t\t\tn++\n\t\tcase data[i] != ' ':\n\t\t\treturn false\n\t\t}\n\t\ti++\n\t}\n\n\treturn n >= 3\n}\n\n// isFenceLine checks if there's a fence line (e.g., ``` or ``` go) at the beginning of data,\n// and returns the end index if so, or 0 otherwise. It also returns the marker found.\n// If info is not nil, it gets set to the syntax specified in the fence line.\nfunc isFenceLine(data []byte, info *string, oldmarker string) (end int, marker string) {\n\ti, size := 0, 0\n\n\t// skip up to three spaces\n\tfor i < len(data) && i < 3 && data[i] == ' ' {\n\t\ti++\n\t}\n\n\t// check for the marker characters: ~ or `\n\tif i >= len(data) {\n\t\treturn 0, \"\"\n\t}\n\tif data[i] != '~' && data[i] != '`' {\n\t\treturn 0, \"\"\n\t}\n\n\tc := data[i]\n\n\t// the whole line must be the same char or whitespace\n\tfor i < len(data) && data[i] == c {\n\t\tsize++\n\t\ti++\n\t}\n\n\t// the marker char must occur at least 3 times\n\tif size < 3 {\n\t\treturn 0, \"\"\n\t}\n\tmarker = string(data[i-size : i])\n\n\t// if this is the end marker, it must match the beginning marker\n\tif oldmarker != \"\" && marker != oldmarker {\n\t\treturn 0, \"\"\n\t}\n\n\t// TODO(shurcooL): It's probably a good idea to simplify the 2 code paths here\n\t// into one, always get the info string, and discard it if the caller doesn't care.\n\tif info != nil {\n\t\tinfoLength := 0\n\t\ti = skipChar(data, i, ' ')\n\n\t\tif i >= len(data) {\n\t\t\tif i == len(data) {\n\t\t\t\treturn i, marker\n\t\t\t}\n\t\t\treturn 0, \"\"\n\t\t}\n\n\t\tinfoStart := i\n\n\t\tif data[i] == '{' {\n\t\t\ti++\n\t\t\tinfoStart++\n\n\t\t\tfor i < len(data) && data[i] != '}' && data[i] != '\\n' {\n\t\t\t\tinfoLength++\n\t\t\t\ti++\n\t\t\t}\n\n\t\t\tif i >= len(data) || data[i] != '}' {\n\t\t\t\treturn 0, \"\"\n\t\t\t}\n\n\t\t\t// strip all whitespace at the beginning and the end\n\t\t\t// of the {} block\n\t\t\tfor infoLength > 0 && isspace(data[infoStart]) {\n\t\t\t\tinfoStart++\n\t\t\t\tinfoLength--\n\t\t\t}\n\n\t\t\tfor infoLength > 0 && isspace(data[infoStart+infoLength-1]) {\n\t\t\t\tinfoLength--\n\t\t\t}\n\t\t\ti++\n\t\t\ti = skipChar(data, i, ' ')\n\t\t} else {\n\t\t\tfor i < len(data) && !isverticalspace(data[i]) {\n\t\t\t\tinfoLength++\n\t\t\t\ti++\n\t\t\t}\n\t\t}\n\n\t\t*info = strings.TrimSpace(string(data[infoStart : infoStart+infoLength]))\n\t}\n\n\tif i == len(data) {\n\t\treturn i, marker\n\t}\n\tif i > len(data) || data[i] != '\\n' {\n\t\treturn 0, \"\"\n\t}\n\treturn i + 1, marker // Take newline into account.\n}\n\n// fencedCodeBlock returns the end index if data contains a fenced code block at the beginning,\n// or 0 otherwise. It writes to out if doRender is true, otherwise it has no side effects.\n// If doRender is true, a final newline is mandatory to recognize the fenced code block.\nfunc (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int {\n\tvar info string\n\tbeg, marker := isFenceLine(data, &info, \"\")\n\tif beg == 0 || beg >= len(data) {\n\t\treturn 0\n\t}\n\tfenceLength := beg - 1\n\n\tvar work bytes.Buffer\n\twork.Write([]byte(info))\n\twork.WriteByte('\\n')\n\n\tfor {\n\t\t// safe to assume beg < len(data)\n\n\t\t// check for the end of the code block\n\t\tfenceEnd, _ := isFenceLine(data[beg:], nil, marker)\n\t\tif fenceEnd != 0 {\n\t\t\tbeg += fenceEnd\n\t\t\tbreak\n\t\t}\n\n\t\t// copy the current line\n\t\tend := skipUntilChar(data, beg, '\\n') + 1\n\n\t\t// did we reach the end of the buffer without a closing marker?\n\t\tif end >= len(data) {\n\t\t\treturn 0\n\t\t}\n\n\t\t// verbatim copy to the working buffer\n\t\tif doRender {\n\t\t\twork.Write(data[beg:end])\n\t\t}\n\t\tbeg = end\n\t}\n\n\tif doRender {\n\t\tblock := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer\n\t\tblock.IsFenced = true\n\t\tblock.FenceLength = fenceLength\n\t\tfinalizeCodeBlock(block)\n\t}\n\n\treturn beg\n}\n\nfunc unescapeChar(str []byte) []byte {\n\tif str[0] == '\\\\' {\n\t\treturn []byte{str[1]}\n\t}\n\treturn []byte(html.UnescapeString(string(str)))\n}\n\nfunc unescapeString(str []byte) []byte {\n\tif reBackslashOrAmp.Match(str) {\n\t\treturn reEntityOrEscapedChar.ReplaceAllFunc(str, unescapeChar)\n\t}\n\treturn str\n}\n\nfunc finalizeCodeBlock(block *Node) {\n\tif block.IsFenced {\n\t\tnewlinePos := bytes.IndexByte(block.content, '\\n')\n\t\tfirstLine := block.content[:newlinePos]\n\t\trest := block.content[newlinePos+1:]\n\t\tblock.Info = unescapeString(bytes.Trim(firstLine, \"\\n\"))\n\t\tblock.Literal = rest\n\t} else {\n\t\tblock.Literal = block.content\n\t}\n\tblock.content = nil\n}\n\nfunc (p *Markdown) table(data []byte) int {\n\ttable := p.addBlock(Table, nil)\n\ti, columns := p.tableHeader(data)\n\tif i == 0 {\n\t\tp.tip = table.Parent\n\t\ttable.Unlink()\n\t\treturn 0\n\t}\n\n\tp.addBlock(TableBody, nil)\n\n\tfor i < len(data) {\n\t\tpipes, rowStart := 0, i\n\t\tfor ; i < len(data) && data[i] != '\\n'; i++ {\n\t\t\tif data[i] == '|' {\n\t\t\t\tpipes++\n\t\t\t}\n\t\t}\n\n\t\tif pipes == 0 {\n\t\t\ti = rowStart\n\t\t\tbreak\n\t\t}\n\n\t\t// include the newline in data sent to tableRow\n\t\tif i < len(data) && data[i] == '\\n' {\n\t\t\ti++\n\t\t}\n\t\tp.tableRow(data[rowStart:i], columns, false)\n\t}\n\n\treturn i\n}\n\n// check if the specified position is preceded by an odd number of backslashes\nfunc isBackslashEscaped(data []byte, i int) bool {\n\tbackslashes := 0\n\tfor i-backslashes-1 >= 0 && data[i-backslashes-1] == '\\\\' {\n\t\tbackslashes++\n\t}\n\treturn backslashes&1 == 1\n}\n\nfunc (p *Markdown) tableHeader(data []byte) (size int, columns []CellAlignFlags) {\n\ti := 0\n\tcolCount := 1\n\tfor i = 0; i < len(data) && data[i] != '\\n'; i++ {\n\t\tif data[i] == '|' && !isBackslashEscaped(data, i) {\n\t\t\tcolCount++\n\t\t}\n\t}\n\n\t// doesn't look like a table header\n\tif colCount == 1 {\n\t\treturn\n\t}\n\n\t// include the newline in the data sent to tableRow\n\tj := i\n\tif j < len(data) && data[j] == '\\n' {\n\t\tj++\n\t}\n\theader := data[:j]\n\n\t// column count ignores pipes at beginning or end of line\n\tif data[0] == '|' {\n\t\tcolCount--\n\t}\n\tif i > 2 && data[i-1] == '|' && !isBackslashEscaped(data, i-1) {\n\t\tcolCount--\n\t}\n\n\tcolumns = make([]CellAlignFlags, colCount)\n\n\t// move on to the header underline\n\ti++\n\tif i >= len(data) {\n\t\treturn\n\t}\n\n\tif data[i] == '|' && !isBackslashEscaped(data, i) {\n\t\ti++\n\t}\n\ti = skipChar(data, i, ' ')\n\n\t// each column header is of form: / *:?-+:? *|/ with # dashes + # colons >= 3\n\t// and trailing | optional on last column\n\tcol := 0\n\tfor i < len(data) && data[i] != '\\n' {\n\t\tdashes := 0\n\n\t\tif data[i] == ':' {\n\t\t\ti++\n\t\t\tcolumns[col] |= TableAlignmentLeft\n\t\t\tdashes++\n\t\t}\n\t\tfor i < len(data) && data[i] == '-' {\n\t\t\ti++\n\t\t\tdashes++\n\t\t}\n\t\tif i < len(data) && data[i] == ':' {\n\t\t\ti++\n\t\t\tcolumns[col] |= TableAlignmentRight\n\t\t\tdashes++\n\t\t}\n\t\tfor i < len(data) && data[i] == ' ' {\n\t\t\ti++\n\t\t}\n\t\tif i == len(data) {\n\t\t\treturn\n\t\t}\n\t\t// end of column test is messy\n\t\tswitch {\n\t\tcase dashes < 3:\n\t\t\t// not a valid column\n\t\t\treturn\n\n\t\tcase data[i] == '|' && !isBackslashEscaped(data, i):\n\t\t\t// marker found, now skip past trailing whitespace\n\t\t\tcol++\n\t\t\ti++\n\t\t\tfor i < len(data) && data[i] == ' ' {\n\t\t\t\ti++\n\t\t\t}\n\n\t\t\t// trailing junk found after last column\n\t\t\tif col >= colCount && i < len(data) && data[i] != '\\n' {\n\t\t\t\treturn\n\t\t\t}\n\n\t\tcase (data[i] != '|' || isBackslashEscaped(data, i)) && col+1 < colCount:\n\t\t\t// something else found where marker was required\n\t\t\treturn\n\n\t\tcase data[i] == '\\n':\n\t\t\t// marker is optional for the last column\n\t\t\tcol++\n\n\t\tdefault:\n\t\t\t// trailing junk found after last column\n\t\t\treturn\n\t\t}\n\t}\n\tif col != colCount {\n\t\treturn\n\t}\n\n\tp.addBlock(TableHead, nil)\n\tp.tableRow(header, columns, true)\n\tsize = i\n\tif size < len(data) && data[size] == '\\n' {\n\t\tsize++\n\t}\n\treturn\n}\n\nfunc (p *Markdown) tableRow(data []byte, columns []CellAlignFlags, header bool) {\n\tp.addBlock(TableRow, nil)\n\ti, col := 0, 0\n\n\tif data[i] == '|' && !isBackslashEscaped(data, i) {\n\t\ti++\n\t}\n\n\tfor col = 0; col < len(columns) && i < len(data); col++ {\n\t\tfor i < len(data) && data[i] == ' ' {\n\t\t\ti++\n\t\t}\n\n\t\tcellStart := i\n\n\t\tfor i < len(data) && (data[i] != '|' || isBackslashEscaped(data, i)) && data[i] != '\\n' {\n\t\t\ti++\n\t\t}\n\n\t\tcellEnd := i\n\n\t\t// skip the end-of-cell marker, possibly taking us past end of buffer\n\t\ti++\n\n\t\tfor cellEnd > cellStart && cellEnd-1 < len(data) && data[cellEnd-1] == ' ' {\n\t\t\tcellEnd--\n\t\t}\n\n\t\tcell := p.addBlock(TableCell, data[cellStart:cellEnd])\n\t\tcell.IsHeader = header\n\t\tcell.Align = columns[col]\n\t}\n\n\t// pad it out with empty columns to get the right number\n\tfor ; col < len(columns); col++ {\n\t\tcell := p.addBlock(TableCell, nil)\n\t\tcell.IsHeader = header\n\t\tcell.Align = columns[col]\n\t}\n\n\t// silently ignore rows with too many cells\n}\n\n// returns blockquote prefix length\nfunc (p *Markdown) quotePrefix(data []byte) int {\n\ti := 0\n\tfor i < 3 && i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\tif i < len(data) && data[i] == '>' {\n\t\tif i+1 < len(data) && data[i+1] == ' ' {\n\t\t\treturn i + 2\n\t\t}\n\t\treturn i + 1\n\t}\n\treturn 0\n}\n\n// blockquote ends with at least one blank line\n// followed by something without a blockquote prefix\nfunc (p *Markdown) terminateBlockquote(data []byte, beg, end int) bool {\n\tif p.isEmpty(data[beg:]) <= 0 {\n\t\treturn false\n\t}\n\tif end >= len(data) {\n\t\treturn true\n\t}\n\treturn p.quotePrefix(data[end:]) == 0 && p.isEmpty(data[end:]) == 0\n}\n\n// parse a blockquote fragment\nfunc (p *Markdown) quote(data []byte) int {\n\tblock := p.addBlock(BlockQuote, nil)\n\tvar raw bytes.Buffer\n\tbeg, end := 0, 0\n\tfor beg < len(data) {\n\t\tend = beg\n\t\t// Step over whole lines, collecting them. While doing that, check for\n\t\t// fenced code and if one's found, incorporate it altogether,\n\t\t// irregardless of any contents inside it\n\t\tfor end < len(data) && data[end] != '\\n' {\n\t\t\tif p.extensions&FencedCode != 0 {\n\t\t\t\tif i := p.fencedCodeBlock(data[end:], false); i > 0 {\n\t\t\t\t\t// -1 to compensate for the extra end++ after the loop:\n\t\t\t\t\tend += i - 1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tend++\n\t\t}\n\t\tif end < len(data) && data[end] == '\\n' {\n\t\t\tend++\n\t\t}\n\t\tif pre := p.quotePrefix(data[beg:]); pre > 0 {\n\t\t\t// skip the prefix\n\t\t\tbeg += pre\n\t\t} else if p.terminateBlockquote(data, beg, end) {\n\t\t\tbreak\n\t\t}\n\t\t// this line is part of the blockquote\n\t\traw.Write(data[beg:end])\n\t\tbeg = end\n\t}\n\tp.block(raw.Bytes())\n\tp.finalize(block)\n\treturn end\n}\n\n// returns prefix length for block code\nfunc (p *Markdown) codePrefix(data []byte) int {\n\tif len(data) >= 1 && data[0] == '\\t' {\n\t\treturn 1\n\t}\n\tif len(data) >= 4 && data[0] == ' ' && data[1] == ' ' && data[2] == ' ' && data[3] == ' ' {\n\t\treturn 4\n\t}\n\treturn 0\n}\n\nfunc (p *Markdown) code(data []byte) int {\n\tvar work bytes.Buffer\n\n\ti := 0\n\tfor i < len(data) {\n\t\tbeg := i\n\t\tfor i < len(data) && data[i] != '\\n' {\n\t\t\ti++\n\t\t}\n\t\tif i < len(data) && data[i] == '\\n' {\n\t\t\ti++\n\t\t}\n\n\t\tblankline := p.isEmpty(data[beg:i]) > 0\n\t\tif pre := p.codePrefix(data[beg:i]); pre > 0 {\n\t\t\tbeg += pre\n\t\t} else if !blankline {\n\t\t\t// non-empty, non-prefixed line breaks the pre\n\t\t\ti = beg\n\t\t\tbreak\n\t\t}\n\n\t\t// verbatim copy to the working buffer\n\t\tif blankline {\n\t\t\twork.WriteByte('\\n')\n\t\t} else {\n\t\t\twork.Write(data[beg:i])\n\t\t}\n\t}\n\n\t// trim all the \\n off the end of work\n\tworkbytes := work.Bytes()\n\teol := len(workbytes)\n\tfor eol > 0 && workbytes[eol-1] == '\\n' {\n\t\teol--\n\t}\n\tif eol != len(workbytes) {\n\t\twork.Truncate(eol)\n\t}\n\n\twork.WriteByte('\\n')\n\n\tblock := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer\n\tblock.IsFenced = false\n\tfinalizeCodeBlock(block)\n\n\treturn i\n}\n\n// returns unordered list item prefix\nfunc (p *Markdown) uliPrefix(data []byte) int {\n\ti := 0\n\t// start with up to 3 spaces\n\tfor i < len(data) && i < 3 && data[i] == ' ' {\n\t\ti++\n\t}\n\tif i >= len(data)-1 {\n\t\treturn 0\n\t}\n\t// need one of {'*', '+', '-'} followed by a space or a tab\n\tif (data[i] != '*' && data[i] != '+' && data[i] != '-') ||\n\t\t(data[i+1] != ' ' && data[i+1] != '\\t') {\n\t\treturn 0\n\t}\n\treturn i + 2\n}\n\n// returns ordered list item prefix\nfunc (p *Markdown) oliPrefix(data []byte) int {\n\ti := 0\n\n\t// start with up to 3 spaces\n\tfor i < 3 && i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\n\t// count the digits\n\tstart := i\n\tfor i < len(data) && data[i] >= '0' && data[i] <= '9' {\n\t\ti++\n\t}\n\tif start == i || i >= len(data)-1 {\n\t\treturn 0\n\t}\n\n\t// we need >= 1 digits followed by a dot and a space or a tab\n\tif data[i] != '.' || !(data[i+1] == ' ' || data[i+1] == '\\t') {\n\t\treturn 0\n\t}\n\treturn i + 2\n}\n\n// returns definition list item prefix\nfunc (p *Markdown) dliPrefix(data []byte) int {\n\tif len(data) < 2 {\n\t\treturn 0\n\t}\n\ti := 0\n\t// need a ':' followed by a space or a tab\n\tif data[i] != ':' || !(data[i+1] == ' ' || data[i+1] == '\\t') {\n\t\treturn 0\n\t}\n\tfor i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\treturn i + 2\n}\n\n// parse ordered or unordered list block\nfunc (p *Markdown) list(data []byte, flags ListType) int {\n\ti := 0\n\tflags |= ListItemBeginningOfList\n\tblock := p.addBlock(List, nil)\n\tblock.ListFlags = flags\n\tblock.Tight = true\n\n\tfor i < len(data) {\n\t\tskip := p.listItem(data[i:], &flags)\n\t\tif flags&ListItemContainsBlock != 0 {\n\t\t\tblock.ListData.Tight = false\n\t\t}\n\t\ti += skip\n\t\tif skip == 0 || flags&ListItemEndOfList != 0 {\n\t\t\tbreak\n\t\t}\n\t\tflags &= ^ListItemBeginningOfList\n\t}\n\n\tabove := block.Parent\n\tfinalizeList(block)\n\tp.tip = above\n\treturn i\n}\n\n// Returns true if the list item is not the same type as its parent list\nfunc (p *Markdown) listTypeChanged(data []byte, flags *ListType) bool {\n\tif p.dliPrefix(data) > 0 && *flags&ListTypeDefinition == 0 {\n\t\treturn true\n\t} else if p.oliPrefix(data) > 0 && *flags&ListTypeOrdered == 0 {\n\t\treturn true\n\t} else if p.uliPrefix(data) > 0 && (*flags&ListTypeOrdered != 0 || *flags&ListTypeDefinition != 0) {\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Returns true if block ends with a blank line, descending if needed\n// into lists and sublists.\nfunc endsWithBlankLine(block *Node) bool {\n\t// TODO: figure this out. Always false now.\n\tfor block != nil {\n\t\t//if block.lastLineBlank {\n\t\t//return true\n\t\t//}\n\t\tt := block.Type\n\t\tif t == List || t == Item {\n\t\t\tblock = block.LastChild\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn false\n}\n\nfunc finalizeList(block *Node) {\n\tblock.open = false\n\titem := block.FirstChild\n\tfor item != nil {\n\t\t// check for non-final list item ending with blank line:\n\t\tif endsWithBlankLine(item) && item.Next != nil {\n\t\t\tblock.ListData.Tight = false\n\t\t\tbreak\n\t\t}\n\t\t// recurse into children of list item, to see if there are spaces\n\t\t// between any of them:\n\t\tsubItem := item.FirstChild\n\t\tfor subItem != nil {\n\t\t\tif endsWithBlankLine(subItem) && (item.Next != nil || subItem.Next != nil) {\n\t\t\t\tblock.ListData.Tight = false\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tsubItem = subItem.Next\n\t\t}\n\t\titem = item.Next\n\t}\n}\n\n// Parse a single list item.\n// Assumes initial prefix is already removed if this is a sublist.\nfunc (p *Markdown) listItem(data []byte, flags *ListType) int {\n\t// keep track of the indentation of the first line\n\titemIndent := 0\n\tif data[0] == '\\t' {\n\t\titemIndent += 4\n\t} else {\n\t\tfor itemIndent < 3 && data[itemIndent] == ' ' {\n\t\t\titemIndent++\n\t\t}\n\t}\n\n\tvar bulletChar byte = '*'\n\ti := p.uliPrefix(data)\n\tif i == 0 {\n\t\ti = p.oliPrefix(data)\n\t} else {\n\t\tbulletChar = data[i-2]\n\t}\n\tif i == 0 {\n\t\ti = p.dliPrefix(data)\n\t\t// reset definition term flag\n\t\tif i > 0 {\n\t\t\t*flags &= ^ListTypeTerm\n\t\t}\n\t}\n\tif i == 0 {\n\t\t// if in definition list, set term flag and continue\n\t\tif *flags&ListTypeDefinition != 0 {\n\t\t\t*flags |= ListTypeTerm\n\t\t} else {\n\t\t\treturn 0\n\t\t}\n\t}\n\n\t// skip leading whitespace on first line\n\tfor i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\n\t// find the end of the line\n\tline := i\n\tfor i > 0 && i < len(data) && data[i-1] != '\\n' {\n\t\ti++\n\t}\n\n\t// get working buffer\n\tvar raw bytes.Buffer\n\n\t// put the first line into the working buffer\n\traw.Write(data[line:i])\n\tline = i\n\n\t// process the following lines\n\tcontainsBlankLine := false\n\tsublist := 0\n\tcodeBlockMarker := \"\"\n\ngatherlines:\n\tfor line < len(data) {\n\t\ti++\n\n\t\t// find the end of this line\n\t\tfor i < len(data) && data[i-1] != '\\n' {\n\t\t\ti++\n\t\t}\n\n\t\t// if it is an empty line, guess that it is part of this item\n\t\t// and move on to the next line\n\t\tif p.isEmpty(data[line:i]) > 0 {\n\t\t\tcontainsBlankLine = true\n\t\t\tline = i\n\t\t\tcontinue\n\t\t}\n\n\t\t// calculate the indentation\n\t\tindent := 0\n\t\tindentIndex := 0\n\t\tif data[line] == '\\t' {\n\t\t\tindentIndex++\n\t\t\tindent += 4\n\t\t} else {\n\t\t\tfor indent < 4 && line+indent < i && data[line+indent] == ' ' {\n\t\t\t\tindent++\n\t\t\t\tindentIndex++\n\t\t\t}\n\t\t}\n\n\t\tchunk := data[line+indentIndex : i]\n\n\t\tif p.extensions&FencedCode != 0 {\n\t\t\t// determine if in or out of codeblock\n\t\t\t// if in codeblock, ignore normal list processing\n\t\t\t_, marker := isFenceLine(chunk, nil, codeBlockMarker)\n\t\t\tif marker != \"\" {\n\t\t\t\tif codeBlockMarker == \"\" {\n\t\t\t\t\t// start of codeblock\n\t\t\t\t\tcodeBlockMarker = marker\n\t\t\t\t} else {\n\t\t\t\t\t// end of codeblock.\n\t\t\t\t\tcodeBlockMarker = \"\"\n\t\t\t\t}\n\t\t\t}\n\t\t\t// we are in a codeblock, write line, and continue\n\t\t\tif codeBlockMarker != \"\" || marker != \"\" {\n\t\t\t\traw.Write(data[line+indentIndex : i])\n\t\t\t\tline = i\n\t\t\t\tcontinue gatherlines\n\t\t\t}\n\t\t}\n\n\t\t// evaluate how this line fits in\n\t\tswitch {\n\t\t// is this a nested list item?\n\t\tcase (p.uliPrefix(chunk) > 0 && !p.isHRule(chunk)) ||\n\t\t\tp.oliPrefix(chunk) > 0 ||\n\t\t\tp.dliPrefix(chunk) > 0:\n\n\t\t\t// to be a nested list, it must be indented more\n\t\t\t// if not, it is either a different kind of list\n\t\t\t// or the next item in the same list\n\t\t\tif indent <= itemIndent {\n\t\t\t\tif p.listTypeChanged(chunk, flags) {\n\t\t\t\t\t*flags |= ListItemEndOfList\n\t\t\t\t} else if containsBlankLine {\n\t\t\t\t\t*flags |= ListItemContainsBlock\n\t\t\t\t}\n\n\t\t\t\tbreak gatherlines\n\t\t\t}\n\n\t\t\tif containsBlankLine {\n\t\t\t\t*flags |= ListItemContainsBlock\n\t\t\t}\n\n\t\t\t// is this the first item in the nested list?\n\t\t\tif sublist == 0 {\n\t\t\t\tsublist = raw.Len()\n\t\t\t}\n\n\t\t// is this a nested prefix heading?\n\t\tcase p.isPrefixHeading(chunk):\n\t\t\t// if the heading is not indented, it is not nested in the list\n\t\t\t// and thus ends the list\n\t\t\tif containsBlankLine && indent < 4 {\n\t\t\t\t*flags |= ListItemEndOfList\n\t\t\t\tbreak gatherlines\n\t\t\t}\n\t\t\t*flags |= ListItemContainsBlock\n\n\t\t// anything following an empty line is only part\n\t\t// of this item if it is indented 4 spaces\n\t\t// (regardless of the indentation of the beginning of the item)\n\t\tcase containsBlankLine && indent < 4:\n\t\t\tif *flags&ListTypeDefinition != 0 && i < len(data)-1 {\n\t\t\t\t// is the next item still a part of this list?\n\t\t\t\tnext := i\n\t\t\t\tfor next < len(data) && data[next] != '\\n' {\n\t\t\t\t\tnext++\n\t\t\t\t}\n\t\t\t\tfor next < len(data)-1 && data[next] == '\\n' {\n\t\t\t\t\tnext++\n\t\t\t\t}\n\t\t\t\tif i < len(data)-1 && data[i] != ':' && data[next] != ':' {\n\t\t\t\t\t*flags |= ListItemEndOfList\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t*flags |= ListItemEndOfList\n\t\t\t}\n\t\t\tbreak gatherlines\n\n\t\t// a blank line means this should be parsed as a block\n\t\tcase containsBlankLine:\n\t\t\traw.WriteByte('\\n')\n\t\t\t*flags |= ListItemContainsBlock\n\t\t}\n\n\t\t// if this line was preceded by one or more blanks,\n\t\t// re-introduce the blank into the buffer\n\t\tif containsBlankLine {\n\t\t\tcontainsBlankLine = false\n\t\t\traw.WriteByte('\\n')\n\t\t}\n\n\t\t// add the line into the working buffer without prefix\n\t\traw.Write(data[line+indentIndex : i])\n\n\t\tline = i\n\t}\n\n\trawBytes := raw.Bytes()\n\n\tblock := p.addBlock(Item, nil)\n\tblock.ListFlags = *flags\n\tblock.Tight = false\n\tblock.BulletChar = bulletChar\n\tblock.Delimiter = '.' // Only '.' is possible in Markdown, but ')' will also be possible in CommonMark\n\n\t// render the contents of the list item\n\tif *flags&ListItemContainsBlock != 0 && *flags&ListTypeTerm == 0 {\n\t\t// intermediate render of block item, except for definition term\n\t\tif sublist > 0 {\n\t\t\tp.block(rawBytes[:sublist])\n\t\t\tp.block(rawBytes[sublist:])\n\t\t} else {\n\t\t\tp.block(rawBytes)\n\t\t}\n\t} else {\n\t\t// intermediate render of inline item\n\t\tif sublist > 0 {\n\t\t\tchild := p.addChild(Paragraph, 0)\n\t\t\tchild.content = rawBytes[:sublist]\n\t\t\tp.block(rawBytes[sublist:])\n\t\t} else {\n\t\t\tchild := p.addChild(Paragraph, 0)\n\t\t\tchild.content = rawBytes\n\t\t}\n\t}\n\treturn line\n}\n\n// render a single paragraph that has already been parsed out\nfunc (p *Markdown) renderParagraph(data []byte) {\n\tif len(data) == 0 {\n\t\treturn\n\t}\n\n\t// trim leading spaces\n\tbeg := 0\n\tfor data[beg] == ' ' {\n\t\tbeg++\n\t}\n\n\tend := len(data)\n\t// trim trailing newline\n\tif data[len(data)-1] == '\\n' {\n\t\tend--\n\t}\n\n\t// trim trailing spaces\n\tfor end > beg && data[end-1] == ' ' {\n\t\tend--\n\t}\n\n\tp.addBlock(Paragraph, data[beg:end])\n}\n\nfunc (p *Markdown) paragraph(data []byte) int {\n\t// prev: index of 1st char of previous line\n\t// line: index of 1st char of current line\n\t// i: index of cursor/end of current line\n\tvar prev, line, i int\n\ttabSize := TabSizeDefault\n\tif p.extensions&TabSizeEight != 0 {\n\t\ttabSize = TabSizeDouble\n\t}\n\t// keep going until we find something to mark the end of the paragraph\n\tfor i < len(data) {\n\t\t// mark the beginning of the current line\n\t\tprev = line\n\t\tcurrent := data[i:]\n\t\tline = i\n\n\t\t// did we find a reference or a footnote? If so, end a paragraph\n\t\t// preceding it and report that we have consumed up to the end of that\n\t\t// reference:\n\t\tif refEnd := isReference(p, current, tabSize); refEnd > 0 {\n\t\t\tp.renderParagraph(data[:i])\n\t\t\treturn i + refEnd\n\t\t}\n\n\t\t// did we find a blank line marking the end of the paragraph?\n\t\tif n := p.isEmpty(current); n > 0 {\n\t\t\t// did this blank line followed by a definition list item?\n\t\t\tif p.extensions&DefinitionLists != 0 {\n\t\t\t\tif i < len(data)-1 && data[i+1] == ':' {\n\t\t\t\t\treturn p.list(data[prev:], ListTypeDefinition)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tp.renderParagraph(data[:i])\n\t\t\treturn i + n\n\t\t}\n\n\t\t// an underline under some text marks a heading, so our paragraph ended on prev line\n\t\tif i > 0 {\n\t\t\tif level := p.isUnderlinedHeading(current); level > 0 {\n\t\t\t\t// render the paragraph\n\t\t\t\tp.renderParagraph(data[:prev])\n\n\t\t\t\t// ignore leading and trailing whitespace\n\t\t\t\teol := i - 1\n\t\t\t\tfor prev < eol && data[prev] == ' ' {\n\t\t\t\t\tprev++\n\t\t\t\t}\n\t\t\t\tfor eol > prev && data[eol-1] == ' ' {\n\t\t\t\t\teol--\n\t\t\t\t}\n\n\t\t\t\tid := \"\"\n\t\t\t\tif p.extensions&AutoHeadingIDs != 0 {\n\t\t\t\t\tid = SanitizedAnchorName(string(data[prev:eol]))\n\t\t\t\t}\n\n\t\t\t\tblock := p.addBlock(Heading, data[prev:eol])\n\t\t\t\tblock.Level = level\n\t\t\t\tblock.HeadingID = id\n\n\t\t\t\t// find the end of the underline\n\t\t\t\tfor i < len(data) && data[i] != '\\n' {\n\t\t\t\t\ti++\n\t\t\t\t}\n\t\t\t\treturn i\n\t\t\t}\n\t\t}\n\n\t\t// if the next line starts a block of HTML, then the paragraph ends here\n\t\tif p.extensions&LaxHTMLBlocks != 0 {\n\t\t\tif data[i] == '<' && p.html(current, false) > 0 {\n\t\t\t\t// rewind to before the HTML block\n\t\t\t\tp.renderParagraph(data[:i])\n\t\t\t\treturn i\n\t\t\t}\n\t\t}\n\n\t\t// if there's a prefixed heading or a horizontal rule after this, paragraph is over\n\t\tif p.isPrefixHeading(current) || p.isHRule(current) {\n\t\t\tp.renderParagraph(data[:i])\n\t\t\treturn i\n\t\t}\n\n\t\t// if there's a fenced code block, paragraph is over\n\t\tif p.extensions&FencedCode != 0 {\n\t\t\tif p.fencedCodeBlock(current, false) > 0 {\n\t\t\t\tp.renderParagraph(data[:i])\n\t\t\t\treturn i\n\t\t\t}\n\t\t}\n\n\t\t// if there's a definition list item, prev line is a definition term\n\t\tif p.extensions&DefinitionLists != 0 {\n\t\t\tif p.dliPrefix(current) != 0 {\n\t\t\t\tret := p.list(data[prev:], ListTypeDefinition)\n\t\t\t\treturn ret\n\t\t\t}\n\t\t}\n\n\t\t// if there's a list after this, paragraph is over\n\t\tif p.extensions&NoEmptyLineBeforeBlock != 0 {\n\t\t\tif p.uliPrefix(current) != 0 ||\n\t\t\t\tp.oliPrefix(current) != 0 ||\n\t\t\t\tp.quotePrefix(current) != 0 ||\n\t\t\t\tp.codePrefix(current) != 0 {\n\t\t\t\tp.renderParagraph(data[:i])\n\t\t\t\treturn i\n\t\t\t}\n\t\t}\n\n\t\t// otherwise, scan to the beginning of the next line\n\t\tnl := bytes.IndexByte(data[i:], '\\n')\n\t\tif nl >= 0 {\n\t\t\ti += nl + 1\n\t\t} else {\n\t\t\ti += len(data[i:])\n\t\t}\n\t}\n\n\tp.renderParagraph(data[:i])\n\treturn i\n}\n\nfunc skipChar(data []byte, start int, char byte) int {\n\ti := start\n\tfor i < len(data) && data[i] == char {\n\t\ti++\n\t}\n\treturn i\n}\n\nfunc skipUntilChar(text []byte, start int, char byte) int {\n\ti := start\n\tfor i < len(text) && text[i] != char {\n\t\ti++\n\t}\n\treturn i\n}\n\n// SanitizedAnchorName returns a sanitized anchor name for the given text.\n//\n// It implements the algorithm specified in the package comment.\nfunc SanitizedAnchorName(text string) string {\n\tvar anchorName []rune\n\tfutureDash := false\n\tfor _, r := range text {\n\t\tswitch {\n\t\tcase unicode.IsLetter(r) || unicode.IsNumber(r):\n\t\t\tif futureDash && len(anchorName) > 0 {\n\t\t\t\tanchorName = append(anchorName, '-')\n\t\t\t}\n\t\t\tfutureDash = false\n\t\t\tanchorName = append(anchorName, unicode.ToLower(r))\n\t\tdefault:\n\t\t\tfutureDash = true\n\t\t}\n\t}\n\treturn string(anchorName)\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/doc.go",
    "content": "// Package blackfriday is a markdown processor.\n//\n// It translates plain text with simple formatting rules into an AST, which can\n// then be further processed to HTML (provided by Blackfriday itself) or other\n// formats (provided by the community).\n//\n// The simplest way to invoke Blackfriday is to call the Run function. It will\n// take a text input and produce a text output in HTML (or other format).\n//\n// A slightly more sophisticated way to use Blackfriday is to create a Markdown\n// processor and to call Parse, which returns a syntax tree for the input\n// document. You can leverage Blackfriday's parsing for content extraction from\n// markdown documents. You can assign a custom renderer and set various options\n// to the Markdown processor.\n//\n// If you're interested in calling Blackfriday from command line, see\n// https://github.com/russross/blackfriday-tool.\n//\n// Sanitized Anchor Names\n//\n// Blackfriday includes an algorithm for creating sanitized anchor names\n// corresponding to a given input text. This algorithm is used to create\n// anchors for headings when AutoHeadingIDs extension is enabled. The\n// algorithm is specified below, so that other packages can create\n// compatible anchor names and links to those anchors.\n//\n// The algorithm iterates over the input text, interpreted as UTF-8,\n// one Unicode code point (rune) at a time. All runes that are letters (category L)\n// or numbers (category N) are considered valid characters. They are mapped to\n// lower case, and included in the output. All other runes are considered\n// invalid characters. Invalid characters that precede the first valid character,\n// as well as invalid character that follow the last valid character\n// are dropped completely. All other sequences of invalid characters\n// between two valid characters are replaced with a single dash character '-'.\n//\n// SanitizedAnchorName exposes this functionality, and can be used to\n// create compatible links to the anchor names generated by blackfriday.\n// This algorithm is also implemented in a small standalone package at\n// github.com/shurcooL/sanitized_anchor_name. It can be useful for clients\n// that want a small package and don't need full functionality of blackfriday.\npackage blackfriday\n\n// NOTE: Keep Sanitized Anchor Name algorithm in sync with package\n//       github.com/shurcooL/sanitized_anchor_name.\n//       Otherwise, users of sanitized_anchor_name will get anchor names\n//       that are incompatible with those generated by blackfriday.\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/entities.go",
    "content": "package blackfriday\n\n// Extracted from https://html.spec.whatwg.org/multipage/entities.json\nvar entities = map[string]bool{\n\t\"&AElig\":                            true,\n\t\"&AElig;\":                           true,\n\t\"&AMP\":                              true,\n\t\"&AMP;\":                             true,\n\t\"&Aacute\":                           true,\n\t\"&Aacute;\":                          true,\n\t\"&Abreve;\":                          true,\n\t\"&Acirc\":                            true,\n\t\"&Acirc;\":                           true,\n\t\"&Acy;\":                             true,\n\t\"&Afr;\":                             true,\n\t\"&Agrave\":                           true,\n\t\"&Agrave;\":                          true,\n\t\"&Alpha;\":                           true,\n\t\"&Amacr;\":                           true,\n\t\"&And;\":                             true,\n\t\"&Aogon;\":                           true,\n\t\"&Aopf;\":                            true,\n\t\"&ApplyFunction;\":                   true,\n\t\"&Aring\":                            true,\n\t\"&Aring;\":                           true,\n\t\"&Ascr;\":                            true,\n\t\"&Assign;\":                          true,\n\t\"&Atilde\":                           true,\n\t\"&Atilde;\":                          true,\n\t\"&Auml\":                             true,\n\t\"&Auml;\":                            true,\n\t\"&Backslash;\":                       true,\n\t\"&Barv;\":                            true,\n\t\"&Barwed;\":                          true,\n\t\"&Bcy;\":                             true,\n\t\"&Because;\":                         true,\n\t\"&Bernoullis;\":                      true,\n\t\"&Beta;\":                            true,\n\t\"&Bfr;\":                             true,\n\t\"&Bopf;\":                            true,\n\t\"&Breve;\":                           true,\n\t\"&Bscr;\":                            true,\n\t\"&Bumpeq;\":                          true,\n\t\"&CHcy;\":                            true,\n\t\"&COPY\":                             true,\n\t\"&COPY;\":                            true,\n\t\"&Cacute;\":                          true,\n\t\"&Cap;\":                             true,\n\t\"&CapitalDifferentialD;\":            true,\n\t\"&Cayleys;\":                         true,\n\t\"&Ccaron;\":                          true,\n\t\"&Ccedil\":                           true,\n\t\"&Ccedil;\":                          true,\n\t\"&Ccirc;\":                           true,\n\t\"&Cconint;\":                         true,\n\t\"&Cdot;\":                            true,\n\t\"&Cedilla;\":                         true,\n\t\"&CenterDot;\":                       true,\n\t\"&Cfr;\":                             true,\n\t\"&Chi;\":                             true,\n\t\"&CircleDot;\":                       true,\n\t\"&CircleMinus;\":                     true,\n\t\"&CirclePlus;\":                      true,\n\t\"&CircleTimes;\":                     true,\n\t\"&ClockwiseContourIntegral;\":        true,\n\t\"&CloseCurlyDoubleQuote;\":           true,\n\t\"&CloseCurlyQuote;\":                 true,\n\t\"&Colon;\":                           true,\n\t\"&Colone;\":                          true,\n\t\"&Congruent;\":                       true,\n\t\"&Conint;\":                          true,\n\t\"&ContourIntegral;\":                 true,\n\t\"&Copf;\":                            true,\n\t\"&Coproduct;\":                       true,\n\t\"&CounterClockwiseContourIntegral;\": true,\n\t\"&Cross;\":                           true,\n\t\"&Cscr;\":                            true,\n\t\"&Cup;\":                             true,\n\t\"&CupCap;\":                          true,\n\t\"&DD;\":                              true,\n\t\"&DDotrahd;\":                        true,\n\t\"&DJcy;\":                            true,\n\t\"&DScy;\":                            true,\n\t\"&DZcy;\":                            true,\n\t\"&Dagger;\":                          true,\n\t\"&Darr;\":                            true,\n\t\"&Dashv;\":                           true,\n\t\"&Dcaron;\":                          true,\n\t\"&Dcy;\":                             true,\n\t\"&Del;\":                             true,\n\t\"&Delta;\":                           true,\n\t\"&Dfr;\":                             true,\n\t\"&DiacriticalAcute;\":                true,\n\t\"&DiacriticalDot;\":                  true,\n\t\"&DiacriticalDoubleAcute;\":          true,\n\t\"&DiacriticalGrave;\":                true,\n\t\"&DiacriticalTilde;\":                true,\n\t\"&Diamond;\":                         true,\n\t\"&DifferentialD;\":                   true,\n\t\"&Dopf;\":                            true,\n\t\"&Dot;\":                             true,\n\t\"&DotDot;\":                          true,\n\t\"&DotEqual;\":                        true,\n\t\"&DoubleContourIntegral;\":           true,\n\t\"&DoubleDot;\":                       true,\n\t\"&DoubleDownArrow;\":                 true,\n\t\"&DoubleLeftArrow;\":                 true,\n\t\"&DoubleLeftRightArrow;\":            true,\n\t\"&DoubleLeftTee;\":                   true,\n\t\"&DoubleLongLeftArrow;\":             true,\n\t\"&DoubleLongLeftRightArrow;\":        true,\n\t\"&DoubleLongRightArrow;\":            true,\n\t\"&DoubleRightArrow;\":                true,\n\t\"&DoubleRightTee;\":                  true,\n\t\"&DoubleUpArrow;\":                   true,\n\t\"&DoubleUpDownArrow;\":               true,\n\t\"&DoubleVerticalBar;\":               true,\n\t\"&DownArrow;\":                       true,\n\t\"&DownArrowBar;\":                    true,\n\t\"&DownArrowUpArrow;\":                true,\n\t\"&DownBreve;\":                       true,\n\t\"&DownLeftRightVector;\":             true,\n\t\"&DownLeftTeeVector;\":               true,\n\t\"&DownLeftVector;\":                  true,\n\t\"&DownLeftVectorBar;\":               true,\n\t\"&DownRightTeeVector;\":              true,\n\t\"&DownRightVector;\":                 true,\n\t\"&DownRightVectorBar;\":              true,\n\t\"&DownTee;\":                         true,\n\t\"&DownTeeArrow;\":                    true,\n\t\"&Downarrow;\":                       true,\n\t\"&Dscr;\":                            true,\n\t\"&Dstrok;\":                          true,\n\t\"&ENG;\":                             true,\n\t\"&ETH\":                              true,\n\t\"&ETH;\":                             true,\n\t\"&Eacute\":                           true,\n\t\"&Eacute;\":                          true,\n\t\"&Ecaron;\":                          true,\n\t\"&Ecirc\":                            true,\n\t\"&Ecirc;\":                           true,\n\t\"&Ecy;\":                             true,\n\t\"&Edot;\":                            true,\n\t\"&Efr;\":                             true,\n\t\"&Egrave\":                           true,\n\t\"&Egrave;\":                          true,\n\t\"&Element;\":                         true,\n\t\"&Emacr;\":                           true,\n\t\"&EmptySmallSquare;\":                true,\n\t\"&EmptyVerySmallSquare;\":            true,\n\t\"&Eogon;\":                           true,\n\t\"&Eopf;\":                            true,\n\t\"&Epsilon;\":                         true,\n\t\"&Equal;\":                           true,\n\t\"&EqualTilde;\":                      true,\n\t\"&Equilibrium;\":                     true,\n\t\"&Escr;\":                            true,\n\t\"&Esim;\":                            true,\n\t\"&Eta;\":                             true,\n\t\"&Euml\":                             true,\n\t\"&Euml;\":                            true,\n\t\"&Exists;\":                          true,\n\t\"&ExponentialE;\":                    true,\n\t\"&Fcy;\":                             true,\n\t\"&Ffr;\":                             true,\n\t\"&FilledSmallSquare;\":               true,\n\t\"&FilledVerySmallSquare;\":           true,\n\t\"&Fopf;\":                            true,\n\t\"&ForAll;\":                          true,\n\t\"&Fouriertrf;\":                      true,\n\t\"&Fscr;\":                            true,\n\t\"&GJcy;\":                            true,\n\t\"&GT\":                               true,\n\t\"&GT;\":                              true,\n\t\"&Gamma;\":                           true,\n\t\"&Gammad;\":                          true,\n\t\"&Gbreve;\":                          true,\n\t\"&Gcedil;\":                          true,\n\t\"&Gcirc;\":                           true,\n\t\"&Gcy;\":                             true,\n\t\"&Gdot;\":                            true,\n\t\"&Gfr;\":                             true,\n\t\"&Gg;\":                              true,\n\t\"&Gopf;\":                            true,\n\t\"&GreaterEqual;\":                    true,\n\t\"&GreaterEqualLess;\":                true,\n\t\"&GreaterFullEqual;\":                true,\n\t\"&GreaterGreater;\":                  true,\n\t\"&GreaterLess;\":                     true,\n\t\"&GreaterSlantEqual;\":               true,\n\t\"&GreaterTilde;\":                    true,\n\t\"&Gscr;\":                            true,\n\t\"&Gt;\":                              true,\n\t\"&HARDcy;\":                          true,\n\t\"&Hacek;\":                           true,\n\t\"&Hat;\":                             true,\n\t\"&Hcirc;\":                           true,\n\t\"&Hfr;\":                             true,\n\t\"&HilbertSpace;\":                    true,\n\t\"&Hopf;\":                            true,\n\t\"&HorizontalLine;\":                  true,\n\t\"&Hscr;\":                            true,\n\t\"&Hstrok;\":                          true,\n\t\"&HumpDownHump;\":                    true,\n\t\"&HumpEqual;\":                       true,\n\t\"&IEcy;\":                            true,\n\t\"&IJlig;\":                           true,\n\t\"&IOcy;\":                            true,\n\t\"&Iacute\":                           true,\n\t\"&Iacute;\":                          true,\n\t\"&Icirc\":                            true,\n\t\"&Icirc;\":                           true,\n\t\"&Icy;\":                             true,\n\t\"&Idot;\":                            true,\n\t\"&Ifr;\":                             true,\n\t\"&Igrave\":                           true,\n\t\"&Igrave;\":                          true,\n\t\"&Im;\":                              true,\n\t\"&Imacr;\":                           true,\n\t\"&ImaginaryI;\":                      true,\n\t\"&Implies;\":                         true,\n\t\"&Int;\":                             true,\n\t\"&Integral;\":                        true,\n\t\"&Intersection;\":                    true,\n\t\"&InvisibleComma;\":                  true,\n\t\"&InvisibleTimes;\":                  true,\n\t\"&Iogon;\":                           true,\n\t\"&Iopf;\":                            true,\n\t\"&Iota;\":                            true,\n\t\"&Iscr;\":                            true,\n\t\"&Itilde;\":                          true,\n\t\"&Iukcy;\":                           true,\n\t\"&Iuml\":                             true,\n\t\"&Iuml;\":                            true,\n\t\"&Jcirc;\":                           true,\n\t\"&Jcy;\":                             true,\n\t\"&Jfr;\":                             true,\n\t\"&Jopf;\":                            true,\n\t\"&Jscr;\":                            true,\n\t\"&Jsercy;\":                          true,\n\t\"&Jukcy;\":                           true,\n\t\"&KHcy;\":                            true,\n\t\"&KJcy;\":                            true,\n\t\"&Kappa;\":                           true,\n\t\"&Kcedil;\":                          true,\n\t\"&Kcy;\":                             true,\n\t\"&Kfr;\":                             true,\n\t\"&Kopf;\":                            true,\n\t\"&Kscr;\":                            true,\n\t\"&LJcy;\":                            true,\n\t\"&LT\":                               true,\n\t\"&LT;\":                              true,\n\t\"&Lacute;\":                          true,\n\t\"&Lambda;\":                          true,\n\t\"&Lang;\":                            true,\n\t\"&Laplacetrf;\":                      true,\n\t\"&Larr;\":                            true,\n\t\"&Lcaron;\":                          true,\n\t\"&Lcedil;\":                          true,\n\t\"&Lcy;\":                             true,\n\t\"&LeftAngleBracket;\":                true,\n\t\"&LeftArrow;\":                       true,\n\t\"&LeftArrowBar;\":                    true,\n\t\"&LeftArrowRightArrow;\":             true,\n\t\"&LeftCeiling;\":                     true,\n\t\"&LeftDoubleBracket;\":               true,\n\t\"&LeftDownTeeVector;\":               true,\n\t\"&LeftDownVector;\":                  true,\n\t\"&LeftDownVectorBar;\":               true,\n\t\"&LeftFloor;\":                       true,\n\t\"&LeftRightArrow;\":                  true,\n\t\"&LeftRightVector;\":                 true,\n\t\"&LeftTee;\":                         true,\n\t\"&LeftTeeArrow;\":                    true,\n\t\"&LeftTeeVector;\":                   true,\n\t\"&LeftTriangle;\":                    true,\n\t\"&LeftTriangleBar;\":                 true,\n\t\"&LeftTriangleEqual;\":               true,\n\t\"&LeftUpDownVector;\":                true,\n\t\"&LeftUpTeeVector;\":                 true,\n\t\"&LeftUpVector;\":                    true,\n\t\"&LeftUpVectorBar;\":                 true,\n\t\"&LeftVector;\":                      true,\n\t\"&LeftVectorBar;\":                   true,\n\t\"&Leftarrow;\":                       true,\n\t\"&Leftrightarrow;\":                  true,\n\t\"&LessEqualGreater;\":                true,\n\t\"&LessFullEqual;\":                   true,\n\t\"&LessGreater;\":                     true,\n\t\"&LessLess;\":                        true,\n\t\"&LessSlantEqual;\":                  true,\n\t\"&LessTilde;\":                       true,\n\t\"&Lfr;\":                             true,\n\t\"&Ll;\":                              true,\n\t\"&Lleftarrow;\":                      true,\n\t\"&Lmidot;\":                          true,\n\t\"&LongLeftArrow;\":                   true,\n\t\"&LongLeftRightArrow;\":              true,\n\t\"&LongRightArrow;\":                  true,\n\t\"&Longleftarrow;\":                   true,\n\t\"&Longleftrightarrow;\":              true,\n\t\"&Longrightarrow;\":                  true,\n\t\"&Lopf;\":                            true,\n\t\"&LowerLeftArrow;\":                  true,\n\t\"&LowerRightArrow;\":                 true,\n\t\"&Lscr;\":                            true,\n\t\"&Lsh;\":                             true,\n\t\"&Lstrok;\":                          true,\n\t\"&Lt;\":                              true,\n\t\"&Map;\":                             true,\n\t\"&Mcy;\":                             true,\n\t\"&MediumSpace;\":                     true,\n\t\"&Mellintrf;\":                       true,\n\t\"&Mfr;\":                             true,\n\t\"&MinusPlus;\":                       true,\n\t\"&Mopf;\":                            true,\n\t\"&Mscr;\":                            true,\n\t\"&Mu;\":                              true,\n\t\"&NJcy;\":                            true,\n\t\"&Nacute;\":                          true,\n\t\"&Ncaron;\":                          true,\n\t\"&Ncedil;\":                          true,\n\t\"&Ncy;\":                             true,\n\t\"&NegativeMediumSpace;\":             true,\n\t\"&NegativeThickSpace;\":              true,\n\t\"&NegativeThinSpace;\":               true,\n\t\"&NegativeVeryThinSpace;\":           true,\n\t\"&NestedGreaterGreater;\":            true,\n\t\"&NestedLessLess;\":                  true,\n\t\"&NewLine;\":                         true,\n\t\"&Nfr;\":                             true,\n\t\"&NoBreak;\":                         true,\n\t\"&NonBreakingSpace;\":                true,\n\t\"&Nopf;\":                            true,\n\t\"&Not;\":                             true,\n\t\"&NotCongruent;\":                    true,\n\t\"&NotCupCap;\":                       true,\n\t\"&NotDoubleVerticalBar;\":            true,\n\t\"&NotElement;\":                      true,\n\t\"&NotEqual;\":                        true,\n\t\"&NotEqualTilde;\":                   true,\n\t\"&NotExists;\":                       true,\n\t\"&NotGreater;\":                      true,\n\t\"&NotGreaterEqual;\":                 true,\n\t\"&NotGreaterFullEqual;\":             true,\n\t\"&NotGreaterGreater;\":               true,\n\t\"&NotGreaterLess;\":                  true,\n\t\"&NotGreaterSlantEqual;\":            true,\n\t\"&NotGreaterTilde;\":                 true,\n\t\"&NotHumpDownHump;\":                 true,\n\t\"&NotHumpEqual;\":                    true,\n\t\"&NotLeftTriangle;\":                 true,\n\t\"&NotLeftTriangleBar;\":              true,\n\t\"&NotLeftTriangleEqual;\":            true,\n\t\"&NotLess;\":                         true,\n\t\"&NotLessEqual;\":                    true,\n\t\"&NotLessGreater;\":                  true,\n\t\"&NotLessLess;\":                     true,\n\t\"&NotLessSlantEqual;\":               true,\n\t\"&NotLessTilde;\":                    true,\n\t\"&NotNestedGreaterGreater;\":         true,\n\t\"&NotNestedLessLess;\":               true,\n\t\"&NotPrecedes;\":                     true,\n\t\"&NotPrecedesEqual;\":                true,\n\t\"&NotPrecedesSlantEqual;\":           true,\n\t\"&NotReverseElement;\":               true,\n\t\"&NotRightTriangle;\":                true,\n\t\"&NotRightTriangleBar;\":             true,\n\t\"&NotRightTriangleEqual;\":           true,\n\t\"&NotSquareSubset;\":                 true,\n\t\"&NotSquareSubsetEqual;\":            true,\n\t\"&NotSquareSuperset;\":               true,\n\t\"&NotSquareSupersetEqual;\":          true,\n\t\"&NotSubset;\":                       true,\n\t\"&NotSubsetEqual;\":                  true,\n\t\"&NotSucceeds;\":                     true,\n\t\"&NotSucceedsEqual;\":                true,\n\t\"&NotSucceedsSlantEqual;\":           true,\n\t\"&NotSucceedsTilde;\":                true,\n\t\"&NotSuperset;\":                     true,\n\t\"&NotSupersetEqual;\":                true,\n\t\"&NotTilde;\":                        true,\n\t\"&NotTildeEqual;\":                   true,\n\t\"&NotTildeFullEqual;\":               true,\n\t\"&NotTildeTilde;\":                   true,\n\t\"&NotVerticalBar;\":                  true,\n\t\"&Nscr;\":                            true,\n\t\"&Ntilde\":                           true,\n\t\"&Ntilde;\":                          true,\n\t\"&Nu;\":                              true,\n\t\"&OElig;\":                           true,\n\t\"&Oacute\":                           true,\n\t\"&Oacute;\":                          true,\n\t\"&Ocirc\":                            true,\n\t\"&Ocirc;\":                           true,\n\t\"&Ocy;\":                             true,\n\t\"&Odblac;\":                          true,\n\t\"&Ofr;\":                             true,\n\t\"&Ograve\":                           true,\n\t\"&Ograve;\":                          true,\n\t\"&Omacr;\":                           true,\n\t\"&Omega;\":                           true,\n\t\"&Omicron;\":                         true,\n\t\"&Oopf;\":                            true,\n\t\"&OpenCurlyDoubleQuote;\":            true,\n\t\"&OpenCurlyQuote;\":                  true,\n\t\"&Or;\":                              true,\n\t\"&Oscr;\":                            true,\n\t\"&Oslash\":                           true,\n\t\"&Oslash;\":                          true,\n\t\"&Otilde\":                           true,\n\t\"&Otilde;\":                          true,\n\t\"&Otimes;\":                          true,\n\t\"&Ouml\":                             true,\n\t\"&Ouml;\":                            true,\n\t\"&OverBar;\":                         true,\n\t\"&OverBrace;\":                       true,\n\t\"&OverBracket;\":                     true,\n\t\"&OverParenthesis;\":                 true,\n\t\"&PartialD;\":                        true,\n\t\"&Pcy;\":                             true,\n\t\"&Pfr;\":                             true,\n\t\"&Phi;\":                             true,\n\t\"&Pi;\":                              true,\n\t\"&PlusMinus;\":                       true,\n\t\"&Poincareplane;\":                   true,\n\t\"&Popf;\":                            true,\n\t\"&Pr;\":                              true,\n\t\"&Precedes;\":                        true,\n\t\"&PrecedesEqual;\":                   true,\n\t\"&PrecedesSlantEqual;\":              true,\n\t\"&PrecedesTilde;\":                   true,\n\t\"&Prime;\":                           true,\n\t\"&Product;\":                         true,\n\t\"&Proportion;\":                      true,\n\t\"&Proportional;\":                    true,\n\t\"&Pscr;\":                            true,\n\t\"&Psi;\":                             true,\n\t\"&QUOT\":                             true,\n\t\"&QUOT;\":                            true,\n\t\"&Qfr;\":                             true,\n\t\"&Qopf;\":                            true,\n\t\"&Qscr;\":                            true,\n\t\"&RBarr;\":                           true,\n\t\"&REG\":                              true,\n\t\"&REG;\":                             true,\n\t\"&Racute;\":                          true,\n\t\"&Rang;\":                            true,\n\t\"&Rarr;\":                            true,\n\t\"&Rarrtl;\":                          true,\n\t\"&Rcaron;\":                          true,\n\t\"&Rcedil;\":                          true,\n\t\"&Rcy;\":                             true,\n\t\"&Re;\":                              true,\n\t\"&ReverseElement;\":                  true,\n\t\"&ReverseEquilibrium;\":              true,\n\t\"&ReverseUpEquilibrium;\":            true,\n\t\"&Rfr;\":                             true,\n\t\"&Rho;\":                             true,\n\t\"&RightAngleBracket;\":               true,\n\t\"&RightArrow;\":                      true,\n\t\"&RightArrowBar;\":                   true,\n\t\"&RightArrowLeftArrow;\":             true,\n\t\"&RightCeiling;\":                    true,\n\t\"&RightDoubleBracket;\":              true,\n\t\"&RightDownTeeVector;\":              true,\n\t\"&RightDownVector;\":                 true,\n\t\"&RightDownVectorBar;\":              true,\n\t\"&RightFloor;\":                      true,\n\t\"&RightTee;\":                        true,\n\t\"&RightTeeArrow;\":                   true,\n\t\"&RightTeeVector;\":                  true,\n\t\"&RightTriangle;\":                   true,\n\t\"&RightTriangleBar;\":                true,\n\t\"&RightTriangleEqual;\":              true,\n\t\"&RightUpDownVector;\":               true,\n\t\"&RightUpTeeVector;\":                true,\n\t\"&RightUpVector;\":                   true,\n\t\"&RightUpVectorBar;\":                true,\n\t\"&RightVector;\":                     true,\n\t\"&RightVectorBar;\":                  true,\n\t\"&Rightarrow;\":                      true,\n\t\"&Ropf;\":                            true,\n\t\"&RoundImplies;\":                    true,\n\t\"&Rrightarrow;\":                     true,\n\t\"&Rscr;\":                            true,\n\t\"&Rsh;\":                             true,\n\t\"&RuleDelayed;\":                     true,\n\t\"&SHCHcy;\":                          true,\n\t\"&SHcy;\":                            true,\n\t\"&SOFTcy;\":                          true,\n\t\"&Sacute;\":                          true,\n\t\"&Sc;\":                              true,\n\t\"&Scaron;\":                          true,\n\t\"&Scedil;\":                          true,\n\t\"&Scirc;\":                           true,\n\t\"&Scy;\":                             true,\n\t\"&Sfr;\":                             true,\n\t\"&ShortDownArrow;\":                  true,\n\t\"&ShortLeftArrow;\":                  true,\n\t\"&ShortRightArrow;\":                 true,\n\t\"&ShortUpArrow;\":                    true,\n\t\"&Sigma;\":                           true,\n\t\"&SmallCircle;\":                     true,\n\t\"&Sopf;\":                            true,\n\t\"&Sqrt;\":                            true,\n\t\"&Square;\":                          true,\n\t\"&SquareIntersection;\":              true,\n\t\"&SquareSubset;\":                    true,\n\t\"&SquareSubsetEqual;\":               true,\n\t\"&SquareSuperset;\":                  true,\n\t\"&SquareSupersetEqual;\":             true,\n\t\"&SquareUnion;\":                     true,\n\t\"&Sscr;\":                            true,\n\t\"&Star;\":                            true,\n\t\"&Sub;\":                             true,\n\t\"&Subset;\":                          true,\n\t\"&SubsetEqual;\":                     true,\n\t\"&Succeeds;\":                        true,\n\t\"&SucceedsEqual;\":                   true,\n\t\"&SucceedsSlantEqual;\":              true,\n\t\"&SucceedsTilde;\":                   true,\n\t\"&SuchThat;\":                        true,\n\t\"&Sum;\":                             true,\n\t\"&Sup;\":                             true,\n\t\"&Superset;\":                        true,\n\t\"&SupersetEqual;\":                   true,\n\t\"&Supset;\":                          true,\n\t\"&THORN\":                            true,\n\t\"&THORN;\":                           true,\n\t\"&TRADE;\":                           true,\n\t\"&TSHcy;\":                           true,\n\t\"&TScy;\":                            true,\n\t\"&Tab;\":                             true,\n\t\"&Tau;\":                             true,\n\t\"&Tcaron;\":                          true,\n\t\"&Tcedil;\":                          true,\n\t\"&Tcy;\":                             true,\n\t\"&Tfr;\":                             true,\n\t\"&Therefore;\":                       true,\n\t\"&Theta;\":                           true,\n\t\"&ThickSpace;\":                      true,\n\t\"&ThinSpace;\":                       true,\n\t\"&Tilde;\":                           true,\n\t\"&TildeEqual;\":                      true,\n\t\"&TildeFullEqual;\":                  true,\n\t\"&TildeTilde;\":                      true,\n\t\"&Topf;\":                            true,\n\t\"&TripleDot;\":                       true,\n\t\"&Tscr;\":                            true,\n\t\"&Tstrok;\":                          true,\n\t\"&Uacute\":                           true,\n\t\"&Uacute;\":                          true,\n\t\"&Uarr;\":                            true,\n\t\"&Uarrocir;\":                        true,\n\t\"&Ubrcy;\":                           true,\n\t\"&Ubreve;\":                          true,\n\t\"&Ucirc\":                            true,\n\t\"&Ucirc;\":                           true,\n\t\"&Ucy;\":                             true,\n\t\"&Udblac;\":                          true,\n\t\"&Ufr;\":                             true,\n\t\"&Ugrave\":                           true,\n\t\"&Ugrave;\":                          true,\n\t\"&Umacr;\":                           true,\n\t\"&UnderBar;\":                        true,\n\t\"&UnderBrace;\":                      true,\n\t\"&UnderBracket;\":                    true,\n\t\"&UnderParenthesis;\":                true,\n\t\"&Union;\":                           true,\n\t\"&UnionPlus;\":                       true,\n\t\"&Uogon;\":                           true,\n\t\"&Uopf;\":                            true,\n\t\"&UpArrow;\":                         true,\n\t\"&UpArrowBar;\":                      true,\n\t\"&UpArrowDownArrow;\":                true,\n\t\"&UpDownArrow;\":                     true,\n\t\"&UpEquilibrium;\":                   true,\n\t\"&UpTee;\":                           true,\n\t\"&UpTeeArrow;\":                      true,\n\t\"&Uparrow;\":                         true,\n\t\"&Updownarrow;\":                     true,\n\t\"&UpperLeftArrow;\":                  true,\n\t\"&UpperRightArrow;\":                 true,\n\t\"&Upsi;\":                            true,\n\t\"&Upsilon;\":                         true,\n\t\"&Uring;\":                           true,\n\t\"&Uscr;\":                            true,\n\t\"&Utilde;\":                          true,\n\t\"&Uuml\":                             true,\n\t\"&Uuml;\":                            true,\n\t\"&VDash;\":                           true,\n\t\"&Vbar;\":                            true,\n\t\"&Vcy;\":                             true,\n\t\"&Vdash;\":                           true,\n\t\"&Vdashl;\":                          true,\n\t\"&Vee;\":                             true,\n\t\"&Verbar;\":                          true,\n\t\"&Vert;\":                            true,\n\t\"&VerticalBar;\":                     true,\n\t\"&VerticalLine;\":                    true,\n\t\"&VerticalSeparator;\":               true,\n\t\"&VerticalTilde;\":                   true,\n\t\"&VeryThinSpace;\":                   true,\n\t\"&Vfr;\":                             true,\n\t\"&Vopf;\":                            true,\n\t\"&Vscr;\":                            true,\n\t\"&Vvdash;\":                          true,\n\t\"&Wcirc;\":                           true,\n\t\"&Wedge;\":                           true,\n\t\"&Wfr;\":                             true,\n\t\"&Wopf;\":                            true,\n\t\"&Wscr;\":                            true,\n\t\"&Xfr;\":                             true,\n\t\"&Xi;\":                              true,\n\t\"&Xopf;\":                            true,\n\t\"&Xscr;\":                            true,\n\t\"&YAcy;\":                            true,\n\t\"&YIcy;\":                            true,\n\t\"&YUcy;\":                            true,\n\t\"&Yacute\":                           true,\n\t\"&Yacute;\":                          true,\n\t\"&Ycirc;\":                           true,\n\t\"&Ycy;\":                             true,\n\t\"&Yfr;\":                             true,\n\t\"&Yopf;\":                            true,\n\t\"&Yscr;\":                            true,\n\t\"&Yuml;\":                            true,\n\t\"&ZHcy;\":                            true,\n\t\"&Zacute;\":                          true,\n\t\"&Zcaron;\":                          true,\n\t\"&Zcy;\":                             true,\n\t\"&Zdot;\":                            true,\n\t\"&ZeroWidthSpace;\":                  true,\n\t\"&Zeta;\":                            true,\n\t\"&Zfr;\":                             true,\n\t\"&Zopf;\":                            true,\n\t\"&Zscr;\":                            true,\n\t\"&aacute\":                           true,\n\t\"&aacute;\":                          true,\n\t\"&abreve;\":                          true,\n\t\"&ac;\":                              true,\n\t\"&acE;\":                             true,\n\t\"&acd;\":                             true,\n\t\"&acirc\":                            true,\n\t\"&acirc;\":                           true,\n\t\"&acute\":                            true,\n\t\"&acute;\":                           true,\n\t\"&acy;\":                             true,\n\t\"&aelig\":                            true,\n\t\"&aelig;\":                           true,\n\t\"&af;\":                              true,\n\t\"&afr;\":                             true,\n\t\"&agrave\":                           true,\n\t\"&agrave;\":                          true,\n\t\"&alefsym;\":                         true,\n\t\"&aleph;\":                           true,\n\t\"&alpha;\":                           true,\n\t\"&amacr;\":                           true,\n\t\"&amalg;\":                           true,\n\t\"&amp\":                              true,\n\t\"&amp;\":                             true,\n\t\"&and;\":                             true,\n\t\"&andand;\":                          true,\n\t\"&andd;\":                            true,\n\t\"&andslope;\":                        true,\n\t\"&andv;\":                            true,\n\t\"&ang;\":                             true,\n\t\"&ange;\":                            true,\n\t\"&angle;\":                           true,\n\t\"&angmsd;\":                          true,\n\t\"&angmsdaa;\":                        true,\n\t\"&angmsdab;\":                        true,\n\t\"&angmsdac;\":                        true,\n\t\"&angmsdad;\":                        true,\n\t\"&angmsdae;\":                        true,\n\t\"&angmsdaf;\":                        true,\n\t\"&angmsdag;\":                        true,\n\t\"&angmsdah;\":                        true,\n\t\"&angrt;\":                           true,\n\t\"&angrtvb;\":                         true,\n\t\"&angrtvbd;\":                        true,\n\t\"&angsph;\":                          true,\n\t\"&angst;\":                           true,\n\t\"&angzarr;\":                         true,\n\t\"&aogon;\":                           true,\n\t\"&aopf;\":                            true,\n\t\"&ap;\":                              true,\n\t\"&apE;\":                             true,\n\t\"&apacir;\":                          true,\n\t\"&ape;\":                             true,\n\t\"&apid;\":                            true,\n\t\"&apos;\":                            true,\n\t\"&approx;\":                          true,\n\t\"&approxeq;\":                        true,\n\t\"&aring\":                            true,\n\t\"&aring;\":                           true,\n\t\"&ascr;\":                            true,\n\t\"&ast;\":                             true,\n\t\"&asymp;\":                           true,\n\t\"&asympeq;\":                         true,\n\t\"&atilde\":                           true,\n\t\"&atilde;\":                          true,\n\t\"&auml\":                             true,\n\t\"&auml;\":                            true,\n\t\"&awconint;\":                        true,\n\t\"&awint;\":                           true,\n\t\"&bNot;\":                            true,\n\t\"&backcong;\":                        true,\n\t\"&backepsilon;\":                     true,\n\t\"&backprime;\":                       true,\n\t\"&backsim;\":                         true,\n\t\"&backsimeq;\":                       true,\n\t\"&barvee;\":                          true,\n\t\"&barwed;\":                          true,\n\t\"&barwedge;\":                        true,\n\t\"&bbrk;\":                            true,\n\t\"&bbrktbrk;\":                        true,\n\t\"&bcong;\":                           true,\n\t\"&bcy;\":                             true,\n\t\"&bdquo;\":                           true,\n\t\"&becaus;\":                          true,\n\t\"&because;\":                         true,\n\t\"&bemptyv;\":                         true,\n\t\"&bepsi;\":                           true,\n\t\"&bernou;\":                          true,\n\t\"&beta;\":                            true,\n\t\"&beth;\":                            true,\n\t\"&between;\":                         true,\n\t\"&bfr;\":                             true,\n\t\"&bigcap;\":                          true,\n\t\"&bigcirc;\":                         true,\n\t\"&bigcup;\":                          true,\n\t\"&bigodot;\":                         true,\n\t\"&bigoplus;\":                        true,\n\t\"&bigotimes;\":                       true,\n\t\"&bigsqcup;\":                        true,\n\t\"&bigstar;\":                         true,\n\t\"&bigtriangledown;\":                 true,\n\t\"&bigtriangleup;\":                   true,\n\t\"&biguplus;\":                        true,\n\t\"&bigvee;\":                          true,\n\t\"&bigwedge;\":                        true,\n\t\"&bkarow;\":                          true,\n\t\"&blacklozenge;\":                    true,\n\t\"&blacksquare;\":                     true,\n\t\"&blacktriangle;\":                   true,\n\t\"&blacktriangledown;\":               true,\n\t\"&blacktriangleleft;\":               true,\n\t\"&blacktriangleright;\":              true,\n\t\"&blank;\":                           true,\n\t\"&blk12;\":                           true,\n\t\"&blk14;\":                           true,\n\t\"&blk34;\":                           true,\n\t\"&block;\":                           true,\n\t\"&bne;\":                             true,\n\t\"&bnequiv;\":                         true,\n\t\"&bnot;\":                            true,\n\t\"&bopf;\":                            true,\n\t\"&bot;\":                             true,\n\t\"&bottom;\":                          true,\n\t\"&bowtie;\":                          true,\n\t\"&boxDL;\":                           true,\n\t\"&boxDR;\":                           true,\n\t\"&boxDl;\":                           true,\n\t\"&boxDr;\":                           true,\n\t\"&boxH;\":                            true,\n\t\"&boxHD;\":                           true,\n\t\"&boxHU;\":                           true,\n\t\"&boxHd;\":                           true,\n\t\"&boxHu;\":                           true,\n\t\"&boxUL;\":                           true,\n\t\"&boxUR;\":                           true,\n\t\"&boxUl;\":                           true,\n\t\"&boxUr;\":                           true,\n\t\"&boxV;\":                            true,\n\t\"&boxVH;\":                           true,\n\t\"&boxVL;\":                           true,\n\t\"&boxVR;\":                           true,\n\t\"&boxVh;\":                           true,\n\t\"&boxVl;\":                           true,\n\t\"&boxVr;\":                           true,\n\t\"&boxbox;\":                          true,\n\t\"&boxdL;\":                           true,\n\t\"&boxdR;\":                           true,\n\t\"&boxdl;\":                           true,\n\t\"&boxdr;\":                           true,\n\t\"&boxh;\":                            true,\n\t\"&boxhD;\":                           true,\n\t\"&boxhU;\":                           true,\n\t\"&boxhd;\":                           true,\n\t\"&boxhu;\":                           true,\n\t\"&boxminus;\":                        true,\n\t\"&boxplus;\":                         true,\n\t\"&boxtimes;\":                        true,\n\t\"&boxuL;\":                           true,\n\t\"&boxuR;\":                           true,\n\t\"&boxul;\":                           true,\n\t\"&boxur;\":                           true,\n\t\"&boxv;\":                            true,\n\t\"&boxvH;\":                           true,\n\t\"&boxvL;\":                           true,\n\t\"&boxvR;\":                           true,\n\t\"&boxvh;\":                           true,\n\t\"&boxvl;\":                           true,\n\t\"&boxvr;\":                           true,\n\t\"&bprime;\":                          true,\n\t\"&breve;\":                           true,\n\t\"&brvbar\":                           true,\n\t\"&brvbar;\":                          true,\n\t\"&bscr;\":                            true,\n\t\"&bsemi;\":                           true,\n\t\"&bsim;\":                            true,\n\t\"&bsime;\":                           true,\n\t\"&bsol;\":                            true,\n\t\"&bsolb;\":                           true,\n\t\"&bsolhsub;\":                        true,\n\t\"&bull;\":                            true,\n\t\"&bullet;\":                          true,\n\t\"&bump;\":                            true,\n\t\"&bumpE;\":                           true,\n\t\"&bumpe;\":                           true,\n\t\"&bumpeq;\":                          true,\n\t\"&cacute;\":                          true,\n\t\"&cap;\":                             true,\n\t\"&capand;\":                          true,\n\t\"&capbrcup;\":                        true,\n\t\"&capcap;\":                          true,\n\t\"&capcup;\":                          true,\n\t\"&capdot;\":                          true,\n\t\"&caps;\":                            true,\n\t\"&caret;\":                           true,\n\t\"&caron;\":                           true,\n\t\"&ccaps;\":                           true,\n\t\"&ccaron;\":                          true,\n\t\"&ccedil\":                           true,\n\t\"&ccedil;\":                          true,\n\t\"&ccirc;\":                           true,\n\t\"&ccups;\":                           true,\n\t\"&ccupssm;\":                         true,\n\t\"&cdot;\":                            true,\n\t\"&cedil\":                            true,\n\t\"&cedil;\":                           true,\n\t\"&cemptyv;\":                         true,\n\t\"&cent\":                             true,\n\t\"&cent;\":                            true,\n\t\"&centerdot;\":                       true,\n\t\"&cfr;\":                             true,\n\t\"&chcy;\":                            true,\n\t\"&check;\":                           true,\n\t\"&checkmark;\":                       true,\n\t\"&chi;\":                             true,\n\t\"&cir;\":                             true,\n\t\"&cirE;\":                            true,\n\t\"&circ;\":                            true,\n\t\"&circeq;\":                          true,\n\t\"&circlearrowleft;\":                 true,\n\t\"&circlearrowright;\":                true,\n\t\"&circledR;\":                        true,\n\t\"&circledS;\":                        true,\n\t\"&circledast;\":                      true,\n\t\"&circledcirc;\":                     true,\n\t\"&circleddash;\":                     true,\n\t\"&cire;\":                            true,\n\t\"&cirfnint;\":                        true,\n\t\"&cirmid;\":                          true,\n\t\"&cirscir;\":                         true,\n\t\"&clubs;\":                           true,\n\t\"&clubsuit;\":                        true,\n\t\"&colon;\":                           true,\n\t\"&colone;\":                          true,\n\t\"&coloneq;\":                         true,\n\t\"&comma;\":                           true,\n\t\"&commat;\":                          true,\n\t\"&comp;\":                            true,\n\t\"&compfn;\":                          true,\n\t\"&complement;\":                      true,\n\t\"&complexes;\":                       true,\n\t\"&cong;\":                            true,\n\t\"&congdot;\":                         true,\n\t\"&conint;\":                          true,\n\t\"&copf;\":                            true,\n\t\"&coprod;\":                          true,\n\t\"&copy\":                             true,\n\t\"&copy;\":                            true,\n\t\"&copysr;\":                          true,\n\t\"&crarr;\":                           true,\n\t\"&cross;\":                           true,\n\t\"&cscr;\":                            true,\n\t\"&csub;\":                            true,\n\t\"&csube;\":                           true,\n\t\"&csup;\":                            true,\n\t\"&csupe;\":                           true,\n\t\"&ctdot;\":                           true,\n\t\"&cudarrl;\":                         true,\n\t\"&cudarrr;\":                         true,\n\t\"&cuepr;\":                           true,\n\t\"&cuesc;\":                           true,\n\t\"&cularr;\":                          true,\n\t\"&cularrp;\":                         true,\n\t\"&cup;\":                             true,\n\t\"&cupbrcap;\":                        true,\n\t\"&cupcap;\":                          true,\n\t\"&cupcup;\":                          true,\n\t\"&cupdot;\":                          true,\n\t\"&cupor;\":                           true,\n\t\"&cups;\":                            true,\n\t\"&curarr;\":                          true,\n\t\"&curarrm;\":                         true,\n\t\"&curlyeqprec;\":                     true,\n\t\"&curlyeqsucc;\":                     true,\n\t\"&curlyvee;\":                        true,\n\t\"&curlywedge;\":                      true,\n\t\"&curren\":                           true,\n\t\"&curren;\":                          true,\n\t\"&curvearrowleft;\":                  true,\n\t\"&curvearrowright;\":                 true,\n\t\"&cuvee;\":                           true,\n\t\"&cuwed;\":                           true,\n\t\"&cwconint;\":                        true,\n\t\"&cwint;\":                           true,\n\t\"&cylcty;\":                          true,\n\t\"&dArr;\":                            true,\n\t\"&dHar;\":                            true,\n\t\"&dagger;\":                          true,\n\t\"&daleth;\":                          true,\n\t\"&darr;\":                            true,\n\t\"&dash;\":                            true,\n\t\"&dashv;\":                           true,\n\t\"&dbkarow;\":                         true,\n\t\"&dblac;\":                           true,\n\t\"&dcaron;\":                          true,\n\t\"&dcy;\":                             true,\n\t\"&dd;\":                              true,\n\t\"&ddagger;\":                         true,\n\t\"&ddarr;\":                           true,\n\t\"&ddotseq;\":                         true,\n\t\"&deg\":                              true,\n\t\"&deg;\":                             true,\n\t\"&delta;\":                           true,\n\t\"&demptyv;\":                         true,\n\t\"&dfisht;\":                          true,\n\t\"&dfr;\":                             true,\n\t\"&dharl;\":                           true,\n\t\"&dharr;\":                           true,\n\t\"&diam;\":                            true,\n\t\"&diamond;\":                         true,\n\t\"&diamondsuit;\":                     true,\n\t\"&diams;\":                           true,\n\t\"&die;\":                             true,\n\t\"&digamma;\":                         true,\n\t\"&disin;\":                           true,\n\t\"&div;\":                             true,\n\t\"&divide\":                           true,\n\t\"&divide;\":                          true,\n\t\"&divideontimes;\":                   true,\n\t\"&divonx;\":                          true,\n\t\"&djcy;\":                            true,\n\t\"&dlcorn;\":                          true,\n\t\"&dlcrop;\":                          true,\n\t\"&dollar;\":                          true,\n\t\"&dopf;\":                            true,\n\t\"&dot;\":                             true,\n\t\"&doteq;\":                           true,\n\t\"&doteqdot;\":                        true,\n\t\"&dotminus;\":                        true,\n\t\"&dotplus;\":                         true,\n\t\"&dotsquare;\":                       true,\n\t\"&doublebarwedge;\":                  true,\n\t\"&downarrow;\":                       true,\n\t\"&downdownarrows;\":                  true,\n\t\"&downharpoonleft;\":                 true,\n\t\"&downharpoonright;\":                true,\n\t\"&drbkarow;\":                        true,\n\t\"&drcorn;\":                          true,\n\t\"&drcrop;\":                          true,\n\t\"&dscr;\":                            true,\n\t\"&dscy;\":                            true,\n\t\"&dsol;\":                            true,\n\t\"&dstrok;\":                          true,\n\t\"&dtdot;\":                           true,\n\t\"&dtri;\":                            true,\n\t\"&dtrif;\":                           true,\n\t\"&duarr;\":                           true,\n\t\"&duhar;\":                           true,\n\t\"&dwangle;\":                         true,\n\t\"&dzcy;\":                            true,\n\t\"&dzigrarr;\":                        true,\n\t\"&eDDot;\":                           true,\n\t\"&eDot;\":                            true,\n\t\"&eacute\":                           true,\n\t\"&eacute;\":                          true,\n\t\"&easter;\":                          true,\n\t\"&ecaron;\":                          true,\n\t\"&ecir;\":                            true,\n\t\"&ecirc\":                            true,\n\t\"&ecirc;\":                           true,\n\t\"&ecolon;\":                          true,\n\t\"&ecy;\":                             true,\n\t\"&edot;\":                            true,\n\t\"&ee;\":                              true,\n\t\"&efDot;\":                           true,\n\t\"&efr;\":                             true,\n\t\"&eg;\":                              true,\n\t\"&egrave\":                           true,\n\t\"&egrave;\":                          true,\n\t\"&egs;\":                             true,\n\t\"&egsdot;\":                          true,\n\t\"&el;\":                              true,\n\t\"&elinters;\":                        true,\n\t\"&ell;\":                             true,\n\t\"&els;\":                             true,\n\t\"&elsdot;\":                          true,\n\t\"&emacr;\":                           true,\n\t\"&empty;\":                           true,\n\t\"&emptyset;\":                        true,\n\t\"&emptyv;\":                          true,\n\t\"&emsp13;\":                          true,\n\t\"&emsp14;\":                          true,\n\t\"&emsp;\":                            true,\n\t\"&eng;\":                             true,\n\t\"&ensp;\":                            true,\n\t\"&eogon;\":                           true,\n\t\"&eopf;\":                            true,\n\t\"&epar;\":                            true,\n\t\"&eparsl;\":                          true,\n\t\"&eplus;\":                           true,\n\t\"&epsi;\":                            true,\n\t\"&epsilon;\":                         true,\n\t\"&epsiv;\":                           true,\n\t\"&eqcirc;\":                          true,\n\t\"&eqcolon;\":                         true,\n\t\"&eqsim;\":                           true,\n\t\"&eqslantgtr;\":                      true,\n\t\"&eqslantless;\":                     true,\n\t\"&equals;\":                          true,\n\t\"&equest;\":                          true,\n\t\"&equiv;\":                           true,\n\t\"&equivDD;\":                         true,\n\t\"&eqvparsl;\":                        true,\n\t\"&erDot;\":                           true,\n\t\"&erarr;\":                           true,\n\t\"&escr;\":                            true,\n\t\"&esdot;\":                           true,\n\t\"&esim;\":                            true,\n\t\"&eta;\":                             true,\n\t\"&eth\":                              true,\n\t\"&eth;\":                             true,\n\t\"&euml\":                             true,\n\t\"&euml;\":                            true,\n\t\"&euro;\":                            true,\n\t\"&excl;\":                            true,\n\t\"&exist;\":                           true,\n\t\"&expectation;\":                     true,\n\t\"&exponentiale;\":                    true,\n\t\"&fallingdotseq;\":                   true,\n\t\"&fcy;\":                             true,\n\t\"&female;\":                          true,\n\t\"&ffilig;\":                          true,\n\t\"&fflig;\":                           true,\n\t\"&ffllig;\":                          true,\n\t\"&ffr;\":                             true,\n\t\"&filig;\":                           true,\n\t\"&fjlig;\":                           true,\n\t\"&flat;\":                            true,\n\t\"&fllig;\":                           true,\n\t\"&fltns;\":                           true,\n\t\"&fnof;\":                            true,\n\t\"&fopf;\":                            true,\n\t\"&forall;\":                          true,\n\t\"&fork;\":                            true,\n\t\"&forkv;\":                           true,\n\t\"&fpartint;\":                        true,\n\t\"&frac12\":                           true,\n\t\"&frac12;\":                          true,\n\t\"&frac13;\":                          true,\n\t\"&frac14\":                           true,\n\t\"&frac14;\":                          true,\n\t\"&frac15;\":                          true,\n\t\"&frac16;\":                          true,\n\t\"&frac18;\":                          true,\n\t\"&frac23;\":                          true,\n\t\"&frac25;\":                          true,\n\t\"&frac34\":                           true,\n\t\"&frac34;\":                          true,\n\t\"&frac35;\":                          true,\n\t\"&frac38;\":                          true,\n\t\"&frac45;\":                          true,\n\t\"&frac56;\":                          true,\n\t\"&frac58;\":                          true,\n\t\"&frac78;\":                          true,\n\t\"&frasl;\":                           true,\n\t\"&frown;\":                           true,\n\t\"&fscr;\":                            true,\n\t\"&gE;\":                              true,\n\t\"&gEl;\":                             true,\n\t\"&gacute;\":                          true,\n\t\"&gamma;\":                           true,\n\t\"&gammad;\":                          true,\n\t\"&gap;\":                             true,\n\t\"&gbreve;\":                          true,\n\t\"&gcirc;\":                           true,\n\t\"&gcy;\":                             true,\n\t\"&gdot;\":                            true,\n\t\"&ge;\":                              true,\n\t\"&gel;\":                             true,\n\t\"&geq;\":                             true,\n\t\"&geqq;\":                            true,\n\t\"&geqslant;\":                        true,\n\t\"&ges;\":                             true,\n\t\"&gescc;\":                           true,\n\t\"&gesdot;\":                          true,\n\t\"&gesdoto;\":                         true,\n\t\"&gesdotol;\":                        true,\n\t\"&gesl;\":                            true,\n\t\"&gesles;\":                          true,\n\t\"&gfr;\":                             true,\n\t\"&gg;\":                              true,\n\t\"&ggg;\":                             true,\n\t\"&gimel;\":                           true,\n\t\"&gjcy;\":                            true,\n\t\"&gl;\":                              true,\n\t\"&glE;\":                             true,\n\t\"&gla;\":                             true,\n\t\"&glj;\":                             true,\n\t\"&gnE;\":                             true,\n\t\"&gnap;\":                            true,\n\t\"&gnapprox;\":                        true,\n\t\"&gne;\":                             true,\n\t\"&gneq;\":                            true,\n\t\"&gneqq;\":                           true,\n\t\"&gnsim;\":                           true,\n\t\"&gopf;\":                            true,\n\t\"&grave;\":                           true,\n\t\"&gscr;\":                            true,\n\t\"&gsim;\":                            true,\n\t\"&gsime;\":                           true,\n\t\"&gsiml;\":                           true,\n\t\"&gt\":                               true,\n\t\"&gt;\":                              true,\n\t\"&gtcc;\":                            true,\n\t\"&gtcir;\":                           true,\n\t\"&gtdot;\":                           true,\n\t\"&gtlPar;\":                          true,\n\t\"&gtquest;\":                         true,\n\t\"&gtrapprox;\":                       true,\n\t\"&gtrarr;\":                          true,\n\t\"&gtrdot;\":                          true,\n\t\"&gtreqless;\":                       true,\n\t\"&gtreqqless;\":                      true,\n\t\"&gtrless;\":                         true,\n\t\"&gtrsim;\":                          true,\n\t\"&gvertneqq;\":                       true,\n\t\"&gvnE;\":                            true,\n\t\"&hArr;\":                            true,\n\t\"&hairsp;\":                          true,\n\t\"&half;\":                            true,\n\t\"&hamilt;\":                          true,\n\t\"&hardcy;\":                          true,\n\t\"&harr;\":                            true,\n\t\"&harrcir;\":                         true,\n\t\"&harrw;\":                           true,\n\t\"&hbar;\":                            true,\n\t\"&hcirc;\":                           true,\n\t\"&hearts;\":                          true,\n\t\"&heartsuit;\":                       true,\n\t\"&hellip;\":                          true,\n\t\"&hercon;\":                          true,\n\t\"&hfr;\":                             true,\n\t\"&hksearow;\":                        true,\n\t\"&hkswarow;\":                        true,\n\t\"&hoarr;\":                           true,\n\t\"&homtht;\":                          true,\n\t\"&hookleftarrow;\":                   true,\n\t\"&hookrightarrow;\":                  true,\n\t\"&hopf;\":                            true,\n\t\"&horbar;\":                          true,\n\t\"&hscr;\":                            true,\n\t\"&hslash;\":                          true,\n\t\"&hstrok;\":                          true,\n\t\"&hybull;\":                          true,\n\t\"&hyphen;\":                          true,\n\t\"&iacute\":                           true,\n\t\"&iacute;\":                          true,\n\t\"&ic;\":                              true,\n\t\"&icirc\":                            true,\n\t\"&icirc;\":                           true,\n\t\"&icy;\":                             true,\n\t\"&iecy;\":                            true,\n\t\"&iexcl\":                            true,\n\t\"&iexcl;\":                           true,\n\t\"&iff;\":                             true,\n\t\"&ifr;\":                             true,\n\t\"&igrave\":                           true,\n\t\"&igrave;\":                          true,\n\t\"&ii;\":                              true,\n\t\"&iiiint;\":                          true,\n\t\"&iiint;\":                           true,\n\t\"&iinfin;\":                          true,\n\t\"&iiota;\":                           true,\n\t\"&ijlig;\":                           true,\n\t\"&imacr;\":                           true,\n\t\"&image;\":                           true,\n\t\"&imagline;\":                        true,\n\t\"&imagpart;\":                        true,\n\t\"&imath;\":                           true,\n\t\"&imof;\":                            true,\n\t\"&imped;\":                           true,\n\t\"&in;\":                              true,\n\t\"&incare;\":                          true,\n\t\"&infin;\":                           true,\n\t\"&infintie;\":                        true,\n\t\"&inodot;\":                          true,\n\t\"&int;\":                             true,\n\t\"&intcal;\":                          true,\n\t\"&integers;\":                        true,\n\t\"&intercal;\":                        true,\n\t\"&intlarhk;\":                        true,\n\t\"&intprod;\":                         true,\n\t\"&iocy;\":                            true,\n\t\"&iogon;\":                           true,\n\t\"&iopf;\":                            true,\n\t\"&iota;\":                            true,\n\t\"&iprod;\":                           true,\n\t\"&iquest\":                           true,\n\t\"&iquest;\":                          true,\n\t\"&iscr;\":                            true,\n\t\"&isin;\":                            true,\n\t\"&isinE;\":                           true,\n\t\"&isindot;\":                         true,\n\t\"&isins;\":                           true,\n\t\"&isinsv;\":                          true,\n\t\"&isinv;\":                           true,\n\t\"&it;\":                              true,\n\t\"&itilde;\":                          true,\n\t\"&iukcy;\":                           true,\n\t\"&iuml\":                             true,\n\t\"&iuml;\":                            true,\n\t\"&jcirc;\":                           true,\n\t\"&jcy;\":                             true,\n\t\"&jfr;\":                             true,\n\t\"&jmath;\":                           true,\n\t\"&jopf;\":                            true,\n\t\"&jscr;\":                            true,\n\t\"&jsercy;\":                          true,\n\t\"&jukcy;\":                           true,\n\t\"&kappa;\":                           true,\n\t\"&kappav;\":                          true,\n\t\"&kcedil;\":                          true,\n\t\"&kcy;\":                             true,\n\t\"&kfr;\":                             true,\n\t\"&kgreen;\":                          true,\n\t\"&khcy;\":                            true,\n\t\"&kjcy;\":                            true,\n\t\"&kopf;\":                            true,\n\t\"&kscr;\":                            true,\n\t\"&lAarr;\":                           true,\n\t\"&lArr;\":                            true,\n\t\"&lAtail;\":                          true,\n\t\"&lBarr;\":                           true,\n\t\"&lE;\":                              true,\n\t\"&lEg;\":                             true,\n\t\"&lHar;\":                            true,\n\t\"&lacute;\":                          true,\n\t\"&laemptyv;\":                        true,\n\t\"&lagran;\":                          true,\n\t\"&lambda;\":                          true,\n\t\"&lang;\":                            true,\n\t\"&langd;\":                           true,\n\t\"&langle;\":                          true,\n\t\"&lap;\":                             true,\n\t\"&laquo\":                            true,\n\t\"&laquo;\":                           true,\n\t\"&larr;\":                            true,\n\t\"&larrb;\":                           true,\n\t\"&larrbfs;\":                         true,\n\t\"&larrfs;\":                          true,\n\t\"&larrhk;\":                          true,\n\t\"&larrlp;\":                          true,\n\t\"&larrpl;\":                          true,\n\t\"&larrsim;\":                         true,\n\t\"&larrtl;\":                          true,\n\t\"&lat;\":                             true,\n\t\"&latail;\":                          true,\n\t\"&late;\":                            true,\n\t\"&lates;\":                           true,\n\t\"&lbarr;\":                           true,\n\t\"&lbbrk;\":                           true,\n\t\"&lbrace;\":                          true,\n\t\"&lbrack;\":                          true,\n\t\"&lbrke;\":                           true,\n\t\"&lbrksld;\":                         true,\n\t\"&lbrkslu;\":                         true,\n\t\"&lcaron;\":                          true,\n\t\"&lcedil;\":                          true,\n\t\"&lceil;\":                           true,\n\t\"&lcub;\":                            true,\n\t\"&lcy;\":                             true,\n\t\"&ldca;\":                            true,\n\t\"&ldquo;\":                           true,\n\t\"&ldquor;\":                          true,\n\t\"&ldrdhar;\":                         true,\n\t\"&ldrushar;\":                        true,\n\t\"&ldsh;\":                            true,\n\t\"&le;\":                              true,\n\t\"&leftarrow;\":                       true,\n\t\"&leftarrowtail;\":                   true,\n\t\"&leftharpoondown;\":                 true,\n\t\"&leftharpoonup;\":                   true,\n\t\"&leftleftarrows;\":                  true,\n\t\"&leftrightarrow;\":                  true,\n\t\"&leftrightarrows;\":                 true,\n\t\"&leftrightharpoons;\":               true,\n\t\"&leftrightsquigarrow;\":             true,\n\t\"&leftthreetimes;\":                  true,\n\t\"&leg;\":                             true,\n\t\"&leq;\":                             true,\n\t\"&leqq;\":                            true,\n\t\"&leqslant;\":                        true,\n\t\"&les;\":                             true,\n\t\"&lescc;\":                           true,\n\t\"&lesdot;\":                          true,\n\t\"&lesdoto;\":                         true,\n\t\"&lesdotor;\":                        true,\n\t\"&lesg;\":                            true,\n\t\"&lesges;\":                          true,\n\t\"&lessapprox;\":                      true,\n\t\"&lessdot;\":                         true,\n\t\"&lesseqgtr;\":                       true,\n\t\"&lesseqqgtr;\":                      true,\n\t\"&lessgtr;\":                         true,\n\t\"&lesssim;\":                         true,\n\t\"&lfisht;\":                          true,\n\t\"&lfloor;\":                          true,\n\t\"&lfr;\":                             true,\n\t\"&lg;\":                              true,\n\t\"&lgE;\":                             true,\n\t\"&lhard;\":                           true,\n\t\"&lharu;\":                           true,\n\t\"&lharul;\":                          true,\n\t\"&lhblk;\":                           true,\n\t\"&ljcy;\":                            true,\n\t\"&ll;\":                              true,\n\t\"&llarr;\":                           true,\n\t\"&llcorner;\":                        true,\n\t\"&llhard;\":                          true,\n\t\"&lltri;\":                           true,\n\t\"&lmidot;\":                          true,\n\t\"&lmoust;\":                          true,\n\t\"&lmoustache;\":                      true,\n\t\"&lnE;\":                             true,\n\t\"&lnap;\":                            true,\n\t\"&lnapprox;\":                        true,\n\t\"&lne;\":                             true,\n\t\"&lneq;\":                            true,\n\t\"&lneqq;\":                           true,\n\t\"&lnsim;\":                           true,\n\t\"&loang;\":                           true,\n\t\"&loarr;\":                           true,\n\t\"&lobrk;\":                           true,\n\t\"&longleftarrow;\":                   true,\n\t\"&longleftrightarrow;\":              true,\n\t\"&longmapsto;\":                      true,\n\t\"&longrightarrow;\":                  true,\n\t\"&looparrowleft;\":                   true,\n\t\"&looparrowright;\":                  true,\n\t\"&lopar;\":                           true,\n\t\"&lopf;\":                            true,\n\t\"&loplus;\":                          true,\n\t\"&lotimes;\":                         true,\n\t\"&lowast;\":                          true,\n\t\"&lowbar;\":                          true,\n\t\"&loz;\":                             true,\n\t\"&lozenge;\":                         true,\n\t\"&lozf;\":                            true,\n\t\"&lpar;\":                            true,\n\t\"&lparlt;\":                          true,\n\t\"&lrarr;\":                           true,\n\t\"&lrcorner;\":                        true,\n\t\"&lrhar;\":                           true,\n\t\"&lrhard;\":                          true,\n\t\"&lrm;\":                             true,\n\t\"&lrtri;\":                           true,\n\t\"&lsaquo;\":                          true,\n\t\"&lscr;\":                            true,\n\t\"&lsh;\":                             true,\n\t\"&lsim;\":                            true,\n\t\"&lsime;\":                           true,\n\t\"&lsimg;\":                           true,\n\t\"&lsqb;\":                            true,\n\t\"&lsquo;\":                           true,\n\t\"&lsquor;\":                          true,\n\t\"&lstrok;\":                          true,\n\t\"&lt\":                               true,\n\t\"&lt;\":                              true,\n\t\"&ltcc;\":                            true,\n\t\"&ltcir;\":                           true,\n\t\"&ltdot;\":                           true,\n\t\"&lthree;\":                          true,\n\t\"&ltimes;\":                          true,\n\t\"&ltlarr;\":                          true,\n\t\"&ltquest;\":                         true,\n\t\"&ltrPar;\":                          true,\n\t\"&ltri;\":                            true,\n\t\"&ltrie;\":                           true,\n\t\"&ltrif;\":                           true,\n\t\"&lurdshar;\":                        true,\n\t\"&luruhar;\":                         true,\n\t\"&lvertneqq;\":                       true,\n\t\"&lvnE;\":                            true,\n\t\"&mDDot;\":                           true,\n\t\"&macr\":                             true,\n\t\"&macr;\":                            true,\n\t\"&male;\":                            true,\n\t\"&malt;\":                            true,\n\t\"&maltese;\":                         true,\n\t\"&map;\":                             true,\n\t\"&mapsto;\":                          true,\n\t\"&mapstodown;\":                      true,\n\t\"&mapstoleft;\":                      true,\n\t\"&mapstoup;\":                        true,\n\t\"&marker;\":                          true,\n\t\"&mcomma;\":                          true,\n\t\"&mcy;\":                             true,\n\t\"&mdash;\":                           true,\n\t\"&measuredangle;\":                   true,\n\t\"&mfr;\":                             true,\n\t\"&mho;\":                             true,\n\t\"&micro\":                            true,\n\t\"&micro;\":                           true,\n\t\"&mid;\":                             true,\n\t\"&midast;\":                          true,\n\t\"&midcir;\":                          true,\n\t\"&middot\":                           true,\n\t\"&middot;\":                          true,\n\t\"&minus;\":                           true,\n\t\"&minusb;\":                          true,\n\t\"&minusd;\":                          true,\n\t\"&minusdu;\":                         true,\n\t\"&mlcp;\":                            true,\n\t\"&mldr;\":                            true,\n\t\"&mnplus;\":                          true,\n\t\"&models;\":                          true,\n\t\"&mopf;\":                            true,\n\t\"&mp;\":                              true,\n\t\"&mscr;\":                            true,\n\t\"&mstpos;\":                          true,\n\t\"&mu;\":                              true,\n\t\"&multimap;\":                        true,\n\t\"&mumap;\":                           true,\n\t\"&nGg;\":                             true,\n\t\"&nGt;\":                             true,\n\t\"&nGtv;\":                            true,\n\t\"&nLeftarrow;\":                      true,\n\t\"&nLeftrightarrow;\":                 true,\n\t\"&nLl;\":                             true,\n\t\"&nLt;\":                             true,\n\t\"&nLtv;\":                            true,\n\t\"&nRightarrow;\":                     true,\n\t\"&nVDash;\":                          true,\n\t\"&nVdash;\":                          true,\n\t\"&nabla;\":                           true,\n\t\"&nacute;\":                          true,\n\t\"&nang;\":                            true,\n\t\"&nap;\":                             true,\n\t\"&napE;\":                            true,\n\t\"&napid;\":                           true,\n\t\"&napos;\":                           true,\n\t\"&napprox;\":                         true,\n\t\"&natur;\":                           true,\n\t\"&natural;\":                         true,\n\t\"&naturals;\":                        true,\n\t\"&nbsp\":                             true,\n\t\"&nbsp;\":                            true,\n\t\"&nbump;\":                           true,\n\t\"&nbumpe;\":                          true,\n\t\"&ncap;\":                            true,\n\t\"&ncaron;\":                          true,\n\t\"&ncedil;\":                          true,\n\t\"&ncong;\":                           true,\n\t\"&ncongdot;\":                        true,\n\t\"&ncup;\":                            true,\n\t\"&ncy;\":                             true,\n\t\"&ndash;\":                           true,\n\t\"&ne;\":                              true,\n\t\"&neArr;\":                           true,\n\t\"&nearhk;\":                          true,\n\t\"&nearr;\":                           true,\n\t\"&nearrow;\":                         true,\n\t\"&nedot;\":                           true,\n\t\"&nequiv;\":                          true,\n\t\"&nesear;\":                          true,\n\t\"&nesim;\":                           true,\n\t\"&nexist;\":                          true,\n\t\"&nexists;\":                         true,\n\t\"&nfr;\":                             true,\n\t\"&ngE;\":                             true,\n\t\"&nge;\":                             true,\n\t\"&ngeq;\":                            true,\n\t\"&ngeqq;\":                           true,\n\t\"&ngeqslant;\":                       true,\n\t\"&nges;\":                            true,\n\t\"&ngsim;\":                           true,\n\t\"&ngt;\":                             true,\n\t\"&ngtr;\":                            true,\n\t\"&nhArr;\":                           true,\n\t\"&nharr;\":                           true,\n\t\"&nhpar;\":                           true,\n\t\"&ni;\":                              true,\n\t\"&nis;\":                             true,\n\t\"&nisd;\":                            true,\n\t\"&niv;\":                             true,\n\t\"&njcy;\":                            true,\n\t\"&nlArr;\":                           true,\n\t\"&nlE;\":                             true,\n\t\"&nlarr;\":                           true,\n\t\"&nldr;\":                            true,\n\t\"&nle;\":                             true,\n\t\"&nleftarrow;\":                      true,\n\t\"&nleftrightarrow;\":                 true,\n\t\"&nleq;\":                            true,\n\t\"&nleqq;\":                           true,\n\t\"&nleqslant;\":                       true,\n\t\"&nles;\":                            true,\n\t\"&nless;\":                           true,\n\t\"&nlsim;\":                           true,\n\t\"&nlt;\":                             true,\n\t\"&nltri;\":                           true,\n\t\"&nltrie;\":                          true,\n\t\"&nmid;\":                            true,\n\t\"&nopf;\":                            true,\n\t\"&not\":                              true,\n\t\"&not;\":                             true,\n\t\"&notin;\":                           true,\n\t\"&notinE;\":                          true,\n\t\"&notindot;\":                        true,\n\t\"&notinva;\":                         true,\n\t\"&notinvb;\":                         true,\n\t\"&notinvc;\":                         true,\n\t\"&notni;\":                           true,\n\t\"&notniva;\":                         true,\n\t\"&notnivb;\":                         true,\n\t\"&notnivc;\":                         true,\n\t\"&npar;\":                            true,\n\t\"&nparallel;\":                       true,\n\t\"&nparsl;\":                          true,\n\t\"&npart;\":                           true,\n\t\"&npolint;\":                         true,\n\t\"&npr;\":                             true,\n\t\"&nprcue;\":                          true,\n\t\"&npre;\":                            true,\n\t\"&nprec;\":                           true,\n\t\"&npreceq;\":                         true,\n\t\"&nrArr;\":                           true,\n\t\"&nrarr;\":                           true,\n\t\"&nrarrc;\":                          true,\n\t\"&nrarrw;\":                          true,\n\t\"&nrightarrow;\":                     true,\n\t\"&nrtri;\":                           true,\n\t\"&nrtrie;\":                          true,\n\t\"&nsc;\":                             true,\n\t\"&nsccue;\":                          true,\n\t\"&nsce;\":                            true,\n\t\"&nscr;\":                            true,\n\t\"&nshortmid;\":                       true,\n\t\"&nshortparallel;\":                  true,\n\t\"&nsim;\":                            true,\n\t\"&nsime;\":                           true,\n\t\"&nsimeq;\":                          true,\n\t\"&nsmid;\":                           true,\n\t\"&nspar;\":                           true,\n\t\"&nsqsube;\":                         true,\n\t\"&nsqsupe;\":                         true,\n\t\"&nsub;\":                            true,\n\t\"&nsubE;\":                           true,\n\t\"&nsube;\":                           true,\n\t\"&nsubset;\":                         true,\n\t\"&nsubseteq;\":                       true,\n\t\"&nsubseteqq;\":                      true,\n\t\"&nsucc;\":                           true,\n\t\"&nsucceq;\":                         true,\n\t\"&nsup;\":                            true,\n\t\"&nsupE;\":                           true,\n\t\"&nsupe;\":                           true,\n\t\"&nsupset;\":                         true,\n\t\"&nsupseteq;\":                       true,\n\t\"&nsupseteqq;\":                      true,\n\t\"&ntgl;\":                            true,\n\t\"&ntilde\":                           true,\n\t\"&ntilde;\":                          true,\n\t\"&ntlg;\":                            true,\n\t\"&ntriangleleft;\":                   true,\n\t\"&ntrianglelefteq;\":                 true,\n\t\"&ntriangleright;\":                  true,\n\t\"&ntrianglerighteq;\":                true,\n\t\"&nu;\":                              true,\n\t\"&num;\":                             true,\n\t\"&numero;\":                          true,\n\t\"&numsp;\":                           true,\n\t\"&nvDash;\":                          true,\n\t\"&nvHarr;\":                          true,\n\t\"&nvap;\":                            true,\n\t\"&nvdash;\":                          true,\n\t\"&nvge;\":                            true,\n\t\"&nvgt;\":                            true,\n\t\"&nvinfin;\":                         true,\n\t\"&nvlArr;\":                          true,\n\t\"&nvle;\":                            true,\n\t\"&nvlt;\":                            true,\n\t\"&nvltrie;\":                         true,\n\t\"&nvrArr;\":                          true,\n\t\"&nvrtrie;\":                         true,\n\t\"&nvsim;\":                           true,\n\t\"&nwArr;\":                           true,\n\t\"&nwarhk;\":                          true,\n\t\"&nwarr;\":                           true,\n\t\"&nwarrow;\":                         true,\n\t\"&nwnear;\":                          true,\n\t\"&oS;\":                              true,\n\t\"&oacute\":                           true,\n\t\"&oacute;\":                          true,\n\t\"&oast;\":                            true,\n\t\"&ocir;\":                            true,\n\t\"&ocirc\":                            true,\n\t\"&ocirc;\":                           true,\n\t\"&ocy;\":                             true,\n\t\"&odash;\":                           true,\n\t\"&odblac;\":                          true,\n\t\"&odiv;\":                            true,\n\t\"&odot;\":                            true,\n\t\"&odsold;\":                          true,\n\t\"&oelig;\":                           true,\n\t\"&ofcir;\":                           true,\n\t\"&ofr;\":                             true,\n\t\"&ogon;\":                            true,\n\t\"&ograve\":                           true,\n\t\"&ograve;\":                          true,\n\t\"&ogt;\":                             true,\n\t\"&ohbar;\":                           true,\n\t\"&ohm;\":                             true,\n\t\"&oint;\":                            true,\n\t\"&olarr;\":                           true,\n\t\"&olcir;\":                           true,\n\t\"&olcross;\":                         true,\n\t\"&oline;\":                           true,\n\t\"&olt;\":                             true,\n\t\"&omacr;\":                           true,\n\t\"&omega;\":                           true,\n\t\"&omicron;\":                         true,\n\t\"&omid;\":                            true,\n\t\"&ominus;\":                          true,\n\t\"&oopf;\":                            true,\n\t\"&opar;\":                            true,\n\t\"&operp;\":                           true,\n\t\"&oplus;\":                           true,\n\t\"&or;\":                              true,\n\t\"&orarr;\":                           true,\n\t\"&ord;\":                             true,\n\t\"&order;\":                           true,\n\t\"&orderof;\":                         true,\n\t\"&ordf\":                             true,\n\t\"&ordf;\":                            true,\n\t\"&ordm\":                             true,\n\t\"&ordm;\":                            true,\n\t\"&origof;\":                          true,\n\t\"&oror;\":                            true,\n\t\"&orslope;\":                         true,\n\t\"&orv;\":                             true,\n\t\"&oscr;\":                            true,\n\t\"&oslash\":                           true,\n\t\"&oslash;\":                          true,\n\t\"&osol;\":                            true,\n\t\"&otilde\":                           true,\n\t\"&otilde;\":                          true,\n\t\"&otimes;\":                          true,\n\t\"&otimesas;\":                        true,\n\t\"&ouml\":                             true,\n\t\"&ouml;\":                            true,\n\t\"&ovbar;\":                           true,\n\t\"&par;\":                             true,\n\t\"&para\":                             true,\n\t\"&para;\":                            true,\n\t\"&parallel;\":                        true,\n\t\"&parsim;\":                          true,\n\t\"&parsl;\":                           true,\n\t\"&part;\":                            true,\n\t\"&pcy;\":                             true,\n\t\"&percnt;\":                          true,\n\t\"&period;\":                          true,\n\t\"&permil;\":                          true,\n\t\"&perp;\":                            true,\n\t\"&pertenk;\":                         true,\n\t\"&pfr;\":                             true,\n\t\"&phi;\":                             true,\n\t\"&phiv;\":                            true,\n\t\"&phmmat;\":                          true,\n\t\"&phone;\":                           true,\n\t\"&pi;\":                              true,\n\t\"&pitchfork;\":                       true,\n\t\"&piv;\":                             true,\n\t\"&planck;\":                          true,\n\t\"&planckh;\":                         true,\n\t\"&plankv;\":                          true,\n\t\"&plus;\":                            true,\n\t\"&plusacir;\":                        true,\n\t\"&plusb;\":                           true,\n\t\"&pluscir;\":                         true,\n\t\"&plusdo;\":                          true,\n\t\"&plusdu;\":                          true,\n\t\"&pluse;\":                           true,\n\t\"&plusmn\":                           true,\n\t\"&plusmn;\":                          true,\n\t\"&plussim;\":                         true,\n\t\"&plustwo;\":                         true,\n\t\"&pm;\":                              true,\n\t\"&pointint;\":                        true,\n\t\"&popf;\":                            true,\n\t\"&pound\":                            true,\n\t\"&pound;\":                           true,\n\t\"&pr;\":                              true,\n\t\"&prE;\":                             true,\n\t\"&prap;\":                            true,\n\t\"&prcue;\":                           true,\n\t\"&pre;\":                             true,\n\t\"&prec;\":                            true,\n\t\"&precapprox;\":                      true,\n\t\"&preccurlyeq;\":                     true,\n\t\"&preceq;\":                          true,\n\t\"&precnapprox;\":                     true,\n\t\"&precneqq;\":                        true,\n\t\"&precnsim;\":                        true,\n\t\"&precsim;\":                         true,\n\t\"&prime;\":                           true,\n\t\"&primes;\":                          true,\n\t\"&prnE;\":                            true,\n\t\"&prnap;\":                           true,\n\t\"&prnsim;\":                          true,\n\t\"&prod;\":                            true,\n\t\"&profalar;\":                        true,\n\t\"&profline;\":                        true,\n\t\"&profsurf;\":                        true,\n\t\"&prop;\":                            true,\n\t\"&propto;\":                          true,\n\t\"&prsim;\":                           true,\n\t\"&prurel;\":                          true,\n\t\"&pscr;\":                            true,\n\t\"&psi;\":                             true,\n\t\"&puncsp;\":                          true,\n\t\"&qfr;\":                             true,\n\t\"&qint;\":                            true,\n\t\"&qopf;\":                            true,\n\t\"&qprime;\":                          true,\n\t\"&qscr;\":                            true,\n\t\"&quaternions;\":                     true,\n\t\"&quatint;\":                         true,\n\t\"&quest;\":                           true,\n\t\"&questeq;\":                         true,\n\t\"&quot\":                             true,\n\t\"&quot;\":                            true,\n\t\"&rAarr;\":                           true,\n\t\"&rArr;\":                            true,\n\t\"&rAtail;\":                          true,\n\t\"&rBarr;\":                           true,\n\t\"&rHar;\":                            true,\n\t\"&race;\":                            true,\n\t\"&racute;\":                          true,\n\t\"&radic;\":                           true,\n\t\"&raemptyv;\":                        true,\n\t\"&rang;\":                            true,\n\t\"&rangd;\":                           true,\n\t\"&range;\":                           true,\n\t\"&rangle;\":                          true,\n\t\"&raquo\":                            true,\n\t\"&raquo;\":                           true,\n\t\"&rarr;\":                            true,\n\t\"&rarrap;\":                          true,\n\t\"&rarrb;\":                           true,\n\t\"&rarrbfs;\":                         true,\n\t\"&rarrc;\":                           true,\n\t\"&rarrfs;\":                          true,\n\t\"&rarrhk;\":                          true,\n\t\"&rarrlp;\":                          true,\n\t\"&rarrpl;\":                          true,\n\t\"&rarrsim;\":                         true,\n\t\"&rarrtl;\":                          true,\n\t\"&rarrw;\":                           true,\n\t\"&ratail;\":                          true,\n\t\"&ratio;\":                           true,\n\t\"&rationals;\":                       true,\n\t\"&rbarr;\":                           true,\n\t\"&rbbrk;\":                           true,\n\t\"&rbrace;\":                          true,\n\t\"&rbrack;\":                          true,\n\t\"&rbrke;\":                           true,\n\t\"&rbrksld;\":                         true,\n\t\"&rbrkslu;\":                         true,\n\t\"&rcaron;\":                          true,\n\t\"&rcedil;\":                          true,\n\t\"&rceil;\":                           true,\n\t\"&rcub;\":                            true,\n\t\"&rcy;\":                             true,\n\t\"&rdca;\":                            true,\n\t\"&rdldhar;\":                         true,\n\t\"&rdquo;\":                           true,\n\t\"&rdquor;\":                          true,\n\t\"&rdsh;\":                            true,\n\t\"&real;\":                            true,\n\t\"&realine;\":                         true,\n\t\"&realpart;\":                        true,\n\t\"&reals;\":                           true,\n\t\"&rect;\":                            true,\n\t\"&reg\":                              true,\n\t\"&reg;\":                             true,\n\t\"&rfisht;\":                          true,\n\t\"&rfloor;\":                          true,\n\t\"&rfr;\":                             true,\n\t\"&rhard;\":                           true,\n\t\"&rharu;\":                           true,\n\t\"&rharul;\":                          true,\n\t\"&rho;\":                             true,\n\t\"&rhov;\":                            true,\n\t\"&rightarrow;\":                      true,\n\t\"&rightarrowtail;\":                  true,\n\t\"&rightharpoondown;\":                true,\n\t\"&rightharpoonup;\":                  true,\n\t\"&rightleftarrows;\":                 true,\n\t\"&rightleftharpoons;\":               true,\n\t\"&rightrightarrows;\":                true,\n\t\"&rightsquigarrow;\":                 true,\n\t\"&rightthreetimes;\":                 true,\n\t\"&ring;\":                            true,\n\t\"&risingdotseq;\":                    true,\n\t\"&rlarr;\":                           true,\n\t\"&rlhar;\":                           true,\n\t\"&rlm;\":                             true,\n\t\"&rmoust;\":                          true,\n\t\"&rmoustache;\":                      true,\n\t\"&rnmid;\":                           true,\n\t\"&roang;\":                           true,\n\t\"&roarr;\":                           true,\n\t\"&robrk;\":                           true,\n\t\"&ropar;\":                           true,\n\t\"&ropf;\":                            true,\n\t\"&roplus;\":                          true,\n\t\"&rotimes;\":                         true,\n\t\"&rpar;\":                            true,\n\t\"&rpargt;\":                          true,\n\t\"&rppolint;\":                        true,\n\t\"&rrarr;\":                           true,\n\t\"&rsaquo;\":                          true,\n\t\"&rscr;\":                            true,\n\t\"&rsh;\":                             true,\n\t\"&rsqb;\":                            true,\n\t\"&rsquo;\":                           true,\n\t\"&rsquor;\":                          true,\n\t\"&rthree;\":                          true,\n\t\"&rtimes;\":                          true,\n\t\"&rtri;\":                            true,\n\t\"&rtrie;\":                           true,\n\t\"&rtrif;\":                           true,\n\t\"&rtriltri;\":                        true,\n\t\"&ruluhar;\":                         true,\n\t\"&rx;\":                              true,\n\t\"&sacute;\":                          true,\n\t\"&sbquo;\":                           true,\n\t\"&sc;\":                              true,\n\t\"&scE;\":                             true,\n\t\"&scap;\":                            true,\n\t\"&scaron;\":                          true,\n\t\"&sccue;\":                           true,\n\t\"&sce;\":                             true,\n\t\"&scedil;\":                          true,\n\t\"&scirc;\":                           true,\n\t\"&scnE;\":                            true,\n\t\"&scnap;\":                           true,\n\t\"&scnsim;\":                          true,\n\t\"&scpolint;\":                        true,\n\t\"&scsim;\":                           true,\n\t\"&scy;\":                             true,\n\t\"&sdot;\":                            true,\n\t\"&sdotb;\":                           true,\n\t\"&sdote;\":                           true,\n\t\"&seArr;\":                           true,\n\t\"&searhk;\":                          true,\n\t\"&searr;\":                           true,\n\t\"&searrow;\":                         true,\n\t\"&sect\":                             true,\n\t\"&sect;\":                            true,\n\t\"&semi;\":                            true,\n\t\"&seswar;\":                          true,\n\t\"&setminus;\":                        true,\n\t\"&setmn;\":                           true,\n\t\"&sext;\":                            true,\n\t\"&sfr;\":                             true,\n\t\"&sfrown;\":                          true,\n\t\"&sharp;\":                           true,\n\t\"&shchcy;\":                          true,\n\t\"&shcy;\":                            true,\n\t\"&shortmid;\":                        true,\n\t\"&shortparallel;\":                   true,\n\t\"&shy\":                              true,\n\t\"&shy;\":                             true,\n\t\"&sigma;\":                           true,\n\t\"&sigmaf;\":                          true,\n\t\"&sigmav;\":                          true,\n\t\"&sim;\":                             true,\n\t\"&simdot;\":                          true,\n\t\"&sime;\":                            true,\n\t\"&simeq;\":                           true,\n\t\"&simg;\":                            true,\n\t\"&simgE;\":                           true,\n\t\"&siml;\":                            true,\n\t\"&simlE;\":                           true,\n\t\"&simne;\":                           true,\n\t\"&simplus;\":                         true,\n\t\"&simrarr;\":                         true,\n\t\"&slarr;\":                           true,\n\t\"&smallsetminus;\":                   true,\n\t\"&smashp;\":                          true,\n\t\"&smeparsl;\":                        true,\n\t\"&smid;\":                            true,\n\t\"&smile;\":                           true,\n\t\"&smt;\":                             true,\n\t\"&smte;\":                            true,\n\t\"&smtes;\":                           true,\n\t\"&softcy;\":                          true,\n\t\"&sol;\":                             true,\n\t\"&solb;\":                            true,\n\t\"&solbar;\":                          true,\n\t\"&sopf;\":                            true,\n\t\"&spades;\":                          true,\n\t\"&spadesuit;\":                       true,\n\t\"&spar;\":                            true,\n\t\"&sqcap;\":                           true,\n\t\"&sqcaps;\":                          true,\n\t\"&sqcup;\":                           true,\n\t\"&sqcups;\":                          true,\n\t\"&sqsub;\":                           true,\n\t\"&sqsube;\":                          true,\n\t\"&sqsubset;\":                        true,\n\t\"&sqsubseteq;\":                      true,\n\t\"&sqsup;\":                           true,\n\t\"&sqsupe;\":                          true,\n\t\"&sqsupset;\":                        true,\n\t\"&sqsupseteq;\":                      true,\n\t\"&squ;\":                             true,\n\t\"&square;\":                          true,\n\t\"&squarf;\":                          true,\n\t\"&squf;\":                            true,\n\t\"&srarr;\":                           true,\n\t\"&sscr;\":                            true,\n\t\"&ssetmn;\":                          true,\n\t\"&ssmile;\":                          true,\n\t\"&sstarf;\":                          true,\n\t\"&star;\":                            true,\n\t\"&starf;\":                           true,\n\t\"&straightepsilon;\":                 true,\n\t\"&straightphi;\":                     true,\n\t\"&strns;\":                           true,\n\t\"&sub;\":                             true,\n\t\"&subE;\":                            true,\n\t\"&subdot;\":                          true,\n\t\"&sube;\":                            true,\n\t\"&subedot;\":                         true,\n\t\"&submult;\":                         true,\n\t\"&subnE;\":                           true,\n\t\"&subne;\":                           true,\n\t\"&subplus;\":                         true,\n\t\"&subrarr;\":                         true,\n\t\"&subset;\":                          true,\n\t\"&subseteq;\":                        true,\n\t\"&subseteqq;\":                       true,\n\t\"&subsetneq;\":                       true,\n\t\"&subsetneqq;\":                      true,\n\t\"&subsim;\":                          true,\n\t\"&subsub;\":                          true,\n\t\"&subsup;\":                          true,\n\t\"&succ;\":                            true,\n\t\"&succapprox;\":                      true,\n\t\"&succcurlyeq;\":                     true,\n\t\"&succeq;\":                          true,\n\t\"&succnapprox;\":                     true,\n\t\"&succneqq;\":                        true,\n\t\"&succnsim;\":                        true,\n\t\"&succsim;\":                         true,\n\t\"&sum;\":                             true,\n\t\"&sung;\":                            true,\n\t\"&sup1\":                             true,\n\t\"&sup1;\":                            true,\n\t\"&sup2\":                             true,\n\t\"&sup2;\":                            true,\n\t\"&sup3\":                             true,\n\t\"&sup3;\":                            true,\n\t\"&sup;\":                             true,\n\t\"&supE;\":                            true,\n\t\"&supdot;\":                          true,\n\t\"&supdsub;\":                         true,\n\t\"&supe;\":                            true,\n\t\"&supedot;\":                         true,\n\t\"&suphsol;\":                         true,\n\t\"&suphsub;\":                         true,\n\t\"&suplarr;\":                         true,\n\t\"&supmult;\":                         true,\n\t\"&supnE;\":                           true,\n\t\"&supne;\":                           true,\n\t\"&supplus;\":                         true,\n\t\"&supset;\":                          true,\n\t\"&supseteq;\":                        true,\n\t\"&supseteqq;\":                       true,\n\t\"&supsetneq;\":                       true,\n\t\"&supsetneqq;\":                      true,\n\t\"&supsim;\":                          true,\n\t\"&supsub;\":                          true,\n\t\"&supsup;\":                          true,\n\t\"&swArr;\":                           true,\n\t\"&swarhk;\":                          true,\n\t\"&swarr;\":                           true,\n\t\"&swarrow;\":                         true,\n\t\"&swnwar;\":                          true,\n\t\"&szlig\":                            true,\n\t\"&szlig;\":                           true,\n\t\"&target;\":                          true,\n\t\"&tau;\":                             true,\n\t\"&tbrk;\":                            true,\n\t\"&tcaron;\":                          true,\n\t\"&tcedil;\":                          true,\n\t\"&tcy;\":                             true,\n\t\"&tdot;\":                            true,\n\t\"&telrec;\":                          true,\n\t\"&tfr;\":                             true,\n\t\"&there4;\":                          true,\n\t\"&therefore;\":                       true,\n\t\"&theta;\":                           true,\n\t\"&thetasym;\":                        true,\n\t\"&thetav;\":                          true,\n\t\"&thickapprox;\":                     true,\n\t\"&thicksim;\":                        true,\n\t\"&thinsp;\":                          true,\n\t\"&thkap;\":                           true,\n\t\"&thksim;\":                          true,\n\t\"&thorn\":                            true,\n\t\"&thorn;\":                           true,\n\t\"&tilde;\":                           true,\n\t\"&times\":                            true,\n\t\"&times;\":                           true,\n\t\"&timesb;\":                          true,\n\t\"&timesbar;\":                        true,\n\t\"&timesd;\":                          true,\n\t\"&tint;\":                            true,\n\t\"&toea;\":                            true,\n\t\"&top;\":                             true,\n\t\"&topbot;\":                          true,\n\t\"&topcir;\":                          true,\n\t\"&topf;\":                            true,\n\t\"&topfork;\":                         true,\n\t\"&tosa;\":                            true,\n\t\"&tprime;\":                          true,\n\t\"&trade;\":                           true,\n\t\"&triangle;\":                        true,\n\t\"&triangledown;\":                    true,\n\t\"&triangleleft;\":                    true,\n\t\"&trianglelefteq;\":                  true,\n\t\"&triangleq;\":                       true,\n\t\"&triangleright;\":                   true,\n\t\"&trianglerighteq;\":                 true,\n\t\"&tridot;\":                          true,\n\t\"&trie;\":                            true,\n\t\"&triminus;\":                        true,\n\t\"&triplus;\":                         true,\n\t\"&trisb;\":                           true,\n\t\"&tritime;\":                         true,\n\t\"&trpezium;\":                        true,\n\t\"&tscr;\":                            true,\n\t\"&tscy;\":                            true,\n\t\"&tshcy;\":                           true,\n\t\"&tstrok;\":                          true,\n\t\"&twixt;\":                           true,\n\t\"&twoheadleftarrow;\":                true,\n\t\"&twoheadrightarrow;\":               true,\n\t\"&uArr;\":                            true,\n\t\"&uHar;\":                            true,\n\t\"&uacute\":                           true,\n\t\"&uacute;\":                          true,\n\t\"&uarr;\":                            true,\n\t\"&ubrcy;\":                           true,\n\t\"&ubreve;\":                          true,\n\t\"&ucirc\":                            true,\n\t\"&ucirc;\":                           true,\n\t\"&ucy;\":                             true,\n\t\"&udarr;\":                           true,\n\t\"&udblac;\":                          true,\n\t\"&udhar;\":                           true,\n\t\"&ufisht;\":                          true,\n\t\"&ufr;\":                             true,\n\t\"&ugrave\":                           true,\n\t\"&ugrave;\":                          true,\n\t\"&uharl;\":                           true,\n\t\"&uharr;\":                           true,\n\t\"&uhblk;\":                           true,\n\t\"&ulcorn;\":                          true,\n\t\"&ulcorner;\":                        true,\n\t\"&ulcrop;\":                          true,\n\t\"&ultri;\":                           true,\n\t\"&umacr;\":                           true,\n\t\"&uml\":                              true,\n\t\"&uml;\":                             true,\n\t\"&uogon;\":                           true,\n\t\"&uopf;\":                            true,\n\t\"&uparrow;\":                         true,\n\t\"&updownarrow;\":                     true,\n\t\"&upharpoonleft;\":                   true,\n\t\"&upharpoonright;\":                  true,\n\t\"&uplus;\":                           true,\n\t\"&upsi;\":                            true,\n\t\"&upsih;\":                           true,\n\t\"&upsilon;\":                         true,\n\t\"&upuparrows;\":                      true,\n\t\"&urcorn;\":                          true,\n\t\"&urcorner;\":                        true,\n\t\"&urcrop;\":                          true,\n\t\"&uring;\":                           true,\n\t\"&urtri;\":                           true,\n\t\"&uscr;\":                            true,\n\t\"&utdot;\":                           true,\n\t\"&utilde;\":                          true,\n\t\"&utri;\":                            true,\n\t\"&utrif;\":                           true,\n\t\"&uuarr;\":                           true,\n\t\"&uuml\":                             true,\n\t\"&uuml;\":                            true,\n\t\"&uwangle;\":                         true,\n\t\"&vArr;\":                            true,\n\t\"&vBar;\":                            true,\n\t\"&vBarv;\":                           true,\n\t\"&vDash;\":                           true,\n\t\"&vangrt;\":                          true,\n\t\"&varepsilon;\":                      true,\n\t\"&varkappa;\":                        true,\n\t\"&varnothing;\":                      true,\n\t\"&varphi;\":                          true,\n\t\"&varpi;\":                           true,\n\t\"&varpropto;\":                       true,\n\t\"&varr;\":                            true,\n\t\"&varrho;\":                          true,\n\t\"&varsigma;\":                        true,\n\t\"&varsubsetneq;\":                    true,\n\t\"&varsubsetneqq;\":                   true,\n\t\"&varsupsetneq;\":                    true,\n\t\"&varsupsetneqq;\":                   true,\n\t\"&vartheta;\":                        true,\n\t\"&vartriangleleft;\":                 true,\n\t\"&vartriangleright;\":                true,\n\t\"&vcy;\":                             true,\n\t\"&vdash;\":                           true,\n\t\"&vee;\":                             true,\n\t\"&veebar;\":                          true,\n\t\"&veeeq;\":                           true,\n\t\"&vellip;\":                          true,\n\t\"&verbar;\":                          true,\n\t\"&vert;\":                            true,\n\t\"&vfr;\":                             true,\n\t\"&vltri;\":                           true,\n\t\"&vnsub;\":                           true,\n\t\"&vnsup;\":                           true,\n\t\"&vopf;\":                            true,\n\t\"&vprop;\":                           true,\n\t\"&vrtri;\":                           true,\n\t\"&vscr;\":                            true,\n\t\"&vsubnE;\":                          true,\n\t\"&vsubne;\":                          true,\n\t\"&vsupnE;\":                          true,\n\t\"&vsupne;\":                          true,\n\t\"&vzigzag;\":                         true,\n\t\"&wcirc;\":                           true,\n\t\"&wedbar;\":                          true,\n\t\"&wedge;\":                           true,\n\t\"&wedgeq;\":                          true,\n\t\"&weierp;\":                          true,\n\t\"&wfr;\":                             true,\n\t\"&wopf;\":                            true,\n\t\"&wp;\":                              true,\n\t\"&wr;\":                              true,\n\t\"&wreath;\":                          true,\n\t\"&wscr;\":                            true,\n\t\"&xcap;\":                            true,\n\t\"&xcirc;\":                           true,\n\t\"&xcup;\":                            true,\n\t\"&xdtri;\":                           true,\n\t\"&xfr;\":                             true,\n\t\"&xhArr;\":                           true,\n\t\"&xharr;\":                           true,\n\t\"&xi;\":                              true,\n\t\"&xlArr;\":                           true,\n\t\"&xlarr;\":                           true,\n\t\"&xmap;\":                            true,\n\t\"&xnis;\":                            true,\n\t\"&xodot;\":                           true,\n\t\"&xopf;\":                            true,\n\t\"&xoplus;\":                          true,\n\t\"&xotime;\":                          true,\n\t\"&xrArr;\":                           true,\n\t\"&xrarr;\":                           true,\n\t\"&xscr;\":                            true,\n\t\"&xsqcup;\":                          true,\n\t\"&xuplus;\":                          true,\n\t\"&xutri;\":                           true,\n\t\"&xvee;\":                            true,\n\t\"&xwedge;\":                          true,\n\t\"&yacute\":                           true,\n\t\"&yacute;\":                          true,\n\t\"&yacy;\":                            true,\n\t\"&ycirc;\":                           true,\n\t\"&ycy;\":                             true,\n\t\"&yen\":                              true,\n\t\"&yen;\":                             true,\n\t\"&yfr;\":                             true,\n\t\"&yicy;\":                            true,\n\t\"&yopf;\":                            true,\n\t\"&yscr;\":                            true,\n\t\"&yucy;\":                            true,\n\t\"&yuml\":                             true,\n\t\"&yuml;\":                            true,\n\t\"&zacute;\":                          true,\n\t\"&zcaron;\":                          true,\n\t\"&zcy;\":                             true,\n\t\"&zdot;\":                            true,\n\t\"&zeetrf;\":                          true,\n\t\"&zeta;\":                            true,\n\t\"&zfr;\":                             true,\n\t\"&zhcy;\":                            true,\n\t\"&zigrarr;\":                         true,\n\t\"&zopf;\":                            true,\n\t\"&zscr;\":                            true,\n\t\"&zwj;\":                             true,\n\t\"&zwnj;\":                            true,\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/esc.go",
    "content": "package blackfriday\n\nimport (\n\t\"html\"\n\t\"io\"\n)\n\nvar htmlEscaper = [256][]byte{\n\t'&': []byte(\"&amp;\"),\n\t'<': []byte(\"&lt;\"),\n\t'>': []byte(\"&gt;\"),\n\t'\"': []byte(\"&quot;\"),\n}\n\nfunc escapeHTML(w io.Writer, s []byte) {\n\tescapeEntities(w, s, false)\n}\n\nfunc escapeAllHTML(w io.Writer, s []byte) {\n\tescapeEntities(w, s, true)\n}\n\nfunc escapeEntities(w io.Writer, s []byte, escapeValidEntities bool) {\n\tvar start, end int\n\tfor end < len(s) {\n\t\tescSeq := htmlEscaper[s[end]]\n\t\tif escSeq != nil {\n\t\t\tisEntity, entityEnd := nodeIsEntity(s, end)\n\t\t\tif isEntity && !escapeValidEntities {\n\t\t\t\tw.Write(s[start : entityEnd+1])\n\t\t\t\tstart = entityEnd + 1\n\t\t\t} else {\n\t\t\t\tw.Write(s[start:end])\n\t\t\t\tw.Write(escSeq)\n\t\t\t\tstart = end + 1\n\t\t\t}\n\t\t}\n\t\tend++\n\t}\n\tif start < len(s) && end <= len(s) {\n\t\tw.Write(s[start:end])\n\t}\n}\n\nfunc nodeIsEntity(s []byte, end int) (isEntity bool, endEntityPos int) {\n\tisEntity = false\n\tendEntityPos = end + 1\n\n\tif s[end] == '&' {\n\t\tfor endEntityPos < len(s) {\n\t\t\tif s[endEntityPos] == ';' {\n\t\t\t\tif entities[string(s[end:endEntityPos+1])] {\n\t\t\t\t\tisEntity = true\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !isalnum(s[endEntityPos]) && s[endEntityPos] != '&' && s[endEntityPos] != '#' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tendEntityPos++\n\t\t}\n\t}\n\n\treturn isEntity, endEntityPos\n}\n\nfunc escLink(w io.Writer, text []byte) {\n\tunesc := html.UnescapeString(string(text))\n\tescapeHTML(w, []byte(unesc))\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/html.go",
    "content": "//\n// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n//\n\n//\n//\n// HTML rendering backend\n//\n//\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"regexp\"\n\t\"strings\"\n)\n\n// HTMLFlags control optional behavior of HTML renderer.\ntype HTMLFlags int\n\n// HTML renderer configuration options.\nconst (\n\tHTMLFlagsNone           HTMLFlags = 0\n\tSkipHTML                HTMLFlags = 1 << iota // Skip preformatted HTML blocks\n\tSkipImages                                    // Skip embedded images\n\tSkipLinks                                     // Skip all links\n\tSafelink                                      // Only link to trusted protocols\n\tNofollowLinks                                 // Only link with rel=\"nofollow\"\n\tNoreferrerLinks                               // Only link with rel=\"noreferrer\"\n\tNoopenerLinks                                 // Only link with rel=\"noopener\"\n\tHrefTargetBlank                               // Add a blank target\n\tCompletePage                                  // Generate a complete HTML page\n\tUseXHTML                                      // Generate XHTML output instead of HTML\n\tFootnoteReturnLinks                           // Generate a link at the end of a footnote to return to the source\n\tSmartypants                                   // Enable smart punctuation substitutions\n\tSmartypantsFractions                          // Enable smart fractions (with Smartypants)\n\tSmartypantsDashes                             // Enable smart dashes (with Smartypants)\n\tSmartypantsLatexDashes                        // Enable LaTeX-style dashes (with Smartypants)\n\tSmartypantsAngledQuotes                       // Enable angled double quotes (with Smartypants) for double quotes rendering\n\tSmartypantsQuotesNBSP                         // Enable « French guillemets » (with Smartypants)\n\tTOC                                           // Generate a table of contents\n)\n\nvar (\n\thtmlTagRe = regexp.MustCompile(\"(?i)^\" + htmlTag)\n)\n\nconst (\n\thtmlTag = \"(?:\" + openTag + \"|\" + closeTag + \"|\" + htmlComment + \"|\" +\n\t\tprocessingInstruction + \"|\" + declaration + \"|\" + cdata + \")\"\n\tcloseTag              = \"</\" + tagName + \"\\\\s*[>]\"\n\topenTag               = \"<\" + tagName + attribute + \"*\" + \"\\\\s*/?>\"\n\tattribute             = \"(?:\" + \"\\\\s+\" + attributeName + attributeValueSpec + \"?)\"\n\tattributeValue        = \"(?:\" + unquotedValue + \"|\" + singleQuotedValue + \"|\" + doubleQuotedValue + \")\"\n\tattributeValueSpec    = \"(?:\" + \"\\\\s*=\" + \"\\\\s*\" + attributeValue + \")\"\n\tattributeName         = \"[a-zA-Z_:][a-zA-Z0-9:._-]*\"\n\tcdata                 = \"<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\"\n\tdeclaration           = \"<![A-Z]+\" + \"\\\\s+[^>]*>\"\n\tdoubleQuotedValue     = \"\\\"[^\\\"]*\\\"\"\n\thtmlComment           = \"<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->\"\n\tprocessingInstruction = \"[<][?].*?[?][>]\"\n\tsingleQuotedValue     = \"'[^']*'\"\n\ttagName               = \"[A-Za-z][A-Za-z0-9-]*\"\n\tunquotedValue         = \"[^\\\"'=<>`\\\\x00-\\\\x20]+\"\n)\n\n// HTMLRendererParameters is a collection of supplementary parameters tweaking\n// the behavior of various parts of HTML renderer.\ntype HTMLRendererParameters struct {\n\t// Prepend this text to each relative URL.\n\tAbsolutePrefix string\n\t// Add this text to each footnote anchor, to ensure uniqueness.\n\tFootnoteAnchorPrefix string\n\t// Show this text inside the <a> tag for a footnote return link, if the\n\t// HTML_FOOTNOTE_RETURN_LINKS flag is enabled. If blank, the string\n\t// <sup>[return]</sup> is used.\n\tFootnoteReturnLinkContents string\n\t// If set, add this text to the front of each Heading ID, to ensure\n\t// uniqueness.\n\tHeadingIDPrefix string\n\t// If set, add this text to the back of each Heading ID, to ensure uniqueness.\n\tHeadingIDSuffix string\n\t// Increase heading levels: if the offset is 1, <h1> becomes <h2> etc.\n\t// Negative offset is also valid.\n\t// Resulting levels are clipped between 1 and 6.\n\tHeadingLevelOffset int\n\n\tTitle string // Document title (used if CompletePage is set)\n\tCSS   string // Optional CSS file URL (used if CompletePage is set)\n\tIcon  string // Optional icon file URL (used if CompletePage is set)\n\n\tFlags HTMLFlags // Flags allow customizing this renderer's behavior\n}\n\n// HTMLRenderer is a type that implements the Renderer interface for HTML output.\n//\n// Do not create this directly, instead use the NewHTMLRenderer function.\ntype HTMLRenderer struct {\n\tHTMLRendererParameters\n\n\tcloseTag string // how to end singleton tags: either \" />\" or \">\"\n\n\t// Track heading IDs to prevent ID collision in a single generation.\n\theadingIDs map[string]int\n\n\tlastOutputLen int\n\tdisableTags   int\n\n\tsr *SPRenderer\n}\n\nconst (\n\txhtmlClose = \" />\"\n\thtmlClose  = \">\"\n)\n\n// NewHTMLRenderer creates and configures an HTMLRenderer object, which\n// satisfies the Renderer interface.\nfunc NewHTMLRenderer(params HTMLRendererParameters) *HTMLRenderer {\n\t// configure the rendering engine\n\tcloseTag := htmlClose\n\tif params.Flags&UseXHTML != 0 {\n\t\tcloseTag = xhtmlClose\n\t}\n\n\tif params.FootnoteReturnLinkContents == \"\" {\n\t\t// U+FE0E is VARIATION SELECTOR-15.\n\t\t// It suppresses automatic emoji presentation of the preceding\n\t\t// U+21A9 LEFTWARDS ARROW WITH HOOK on iOS and iPadOS.\n\t\tparams.FootnoteReturnLinkContents = \"<span aria-label='Return'>↩\\ufe0e</span>\"\n\t}\n\n\treturn &HTMLRenderer{\n\t\tHTMLRendererParameters: params,\n\n\t\tcloseTag:   closeTag,\n\t\theadingIDs: make(map[string]int),\n\n\t\tsr: NewSmartypantsRenderer(params.Flags),\n\t}\n}\n\nfunc isHTMLTag(tag []byte, tagname string) bool {\n\tfound, _ := findHTMLTagPos(tag, tagname)\n\treturn found\n}\n\n// Look for a character, but ignore it when it's in any kind of quotes, it\n// might be JavaScript\nfunc skipUntilCharIgnoreQuotes(html []byte, start int, char byte) int {\n\tinSingleQuote := false\n\tinDoubleQuote := false\n\tinGraveQuote := false\n\ti := start\n\tfor i < len(html) {\n\t\tswitch {\n\t\tcase html[i] == char && !inSingleQuote && !inDoubleQuote && !inGraveQuote:\n\t\t\treturn i\n\t\tcase html[i] == '\\'':\n\t\t\tinSingleQuote = !inSingleQuote\n\t\tcase html[i] == '\"':\n\t\t\tinDoubleQuote = !inDoubleQuote\n\t\tcase html[i] == '`':\n\t\t\tinGraveQuote = !inGraveQuote\n\t\t}\n\t\ti++\n\t}\n\treturn start\n}\n\nfunc findHTMLTagPos(tag []byte, tagname string) (bool, int) {\n\ti := 0\n\tif i < len(tag) && tag[0] != '<' {\n\t\treturn false, -1\n\t}\n\ti++\n\ti = skipSpace(tag, i)\n\n\tif i < len(tag) && tag[i] == '/' {\n\t\ti++\n\t}\n\n\ti = skipSpace(tag, i)\n\tj := 0\n\tfor ; i < len(tag); i, j = i+1, j+1 {\n\t\tif j >= len(tagname) {\n\t\t\tbreak\n\t\t}\n\n\t\tif strings.ToLower(string(tag[i]))[0] != tagname[j] {\n\t\t\treturn false, -1\n\t\t}\n\t}\n\n\tif i == len(tag) {\n\t\treturn false, -1\n\t}\n\n\trightAngle := skipUntilCharIgnoreQuotes(tag, i, '>')\n\tif rightAngle >= i {\n\t\treturn true, rightAngle\n\t}\n\n\treturn false, -1\n}\n\nfunc skipSpace(tag []byte, i int) int {\n\tfor i < len(tag) && isspace(tag[i]) {\n\t\ti++\n\t}\n\treturn i\n}\n\nfunc isRelativeLink(link []byte) (yes bool) {\n\t// a tag begin with '#'\n\tif link[0] == '#' {\n\t\treturn true\n\t}\n\n\t// link begin with '/' but not '//', the second maybe a protocol relative link\n\tif len(link) >= 2 && link[0] == '/' && link[1] != '/' {\n\t\treturn true\n\t}\n\n\t// only the root '/'\n\tif len(link) == 1 && link[0] == '/' {\n\t\treturn true\n\t}\n\n\t// current directory : begin with \"./\"\n\tif bytes.HasPrefix(link, []byte(\"./\")) {\n\t\treturn true\n\t}\n\n\t// parent directory : begin with \"../\"\n\tif bytes.HasPrefix(link, []byte(\"../\")) {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\nfunc (r *HTMLRenderer) ensureUniqueHeadingID(id string) string {\n\tfor count, found := r.headingIDs[id]; found; count, found = r.headingIDs[id] {\n\t\ttmp := fmt.Sprintf(\"%s-%d\", id, count+1)\n\n\t\tif _, tmpFound := r.headingIDs[tmp]; !tmpFound {\n\t\t\tr.headingIDs[id] = count + 1\n\t\t\tid = tmp\n\t\t} else {\n\t\t\tid = id + \"-1\"\n\t\t}\n\t}\n\n\tif _, found := r.headingIDs[id]; !found {\n\t\tr.headingIDs[id] = 0\n\t}\n\n\treturn id\n}\n\nfunc (r *HTMLRenderer) addAbsPrefix(link []byte) []byte {\n\tif r.AbsolutePrefix != \"\" && isRelativeLink(link) && link[0] != '.' {\n\t\tnewDest := r.AbsolutePrefix\n\t\tif link[0] != '/' {\n\t\t\tnewDest += \"/\"\n\t\t}\n\t\tnewDest += string(link)\n\t\treturn []byte(newDest)\n\t}\n\treturn link\n}\n\nfunc appendLinkAttrs(attrs []string, flags HTMLFlags, link []byte) []string {\n\tif isRelativeLink(link) {\n\t\treturn attrs\n\t}\n\tval := []string{}\n\tif flags&NofollowLinks != 0 {\n\t\tval = append(val, \"nofollow\")\n\t}\n\tif flags&NoreferrerLinks != 0 {\n\t\tval = append(val, \"noreferrer\")\n\t}\n\tif flags&NoopenerLinks != 0 {\n\t\tval = append(val, \"noopener\")\n\t}\n\tif flags&HrefTargetBlank != 0 {\n\t\tattrs = append(attrs, \"target=\\\"_blank\\\"\")\n\t}\n\tif len(val) == 0 {\n\t\treturn attrs\n\t}\n\tattr := fmt.Sprintf(\"rel=%q\", strings.Join(val, \" \"))\n\treturn append(attrs, attr)\n}\n\nfunc isMailto(link []byte) bool {\n\treturn bytes.HasPrefix(link, []byte(\"mailto:\"))\n}\n\nfunc needSkipLink(flags HTMLFlags, dest []byte) bool {\n\tif flags&SkipLinks != 0 {\n\t\treturn true\n\t}\n\treturn flags&Safelink != 0 && !isSafeLink(dest) && !isMailto(dest)\n}\n\nfunc isSmartypantable(node *Node) bool {\n\tpt := node.Parent.Type\n\treturn pt != Link && pt != CodeBlock && pt != Code\n}\n\nfunc appendLanguageAttr(attrs []string, info []byte) []string {\n\tif len(info) == 0 {\n\t\treturn attrs\n\t}\n\tendOfLang := bytes.IndexAny(info, \"\\t \")\n\tif endOfLang < 0 {\n\t\tendOfLang = len(info)\n\t}\n\treturn append(attrs, fmt.Sprintf(\"class=\\\"language-%s\\\"\", info[:endOfLang]))\n}\n\nfunc (r *HTMLRenderer) tag(w io.Writer, name []byte, attrs []string) {\n\tw.Write(name)\n\tif len(attrs) > 0 {\n\t\tw.Write(spaceBytes)\n\t\tw.Write([]byte(strings.Join(attrs, \" \")))\n\t}\n\tw.Write(gtBytes)\n\tr.lastOutputLen = 1\n}\n\nfunc footnoteRef(prefix string, node *Node) []byte {\n\turlFrag := prefix + string(slugify(node.Destination))\n\tanchor := fmt.Sprintf(`<a href=\"#fn:%s\">%d</a>`, urlFrag, node.NoteID)\n\treturn []byte(fmt.Sprintf(`<sup class=\"footnote-ref\" id=\"fnref:%s\">%s</sup>`, urlFrag, anchor))\n}\n\nfunc footnoteItem(prefix string, slug []byte) []byte {\n\treturn []byte(fmt.Sprintf(`<li id=\"fn:%s%s\">`, prefix, slug))\n}\n\nfunc footnoteReturnLink(prefix, returnLink string, slug []byte) []byte {\n\tconst format = ` <a class=\"footnote-return\" href=\"#fnref:%s%s\">%s</a>`\n\treturn []byte(fmt.Sprintf(format, prefix, slug, returnLink))\n}\n\nfunc itemOpenCR(node *Node) bool {\n\tif node.Prev == nil {\n\t\treturn false\n\t}\n\tld := node.Parent.ListData\n\treturn !ld.Tight && ld.ListFlags&ListTypeDefinition == 0\n}\n\nfunc skipParagraphTags(node *Node) bool {\n\tgrandparent := node.Parent.Parent\n\tif grandparent == nil || grandparent.Type != List {\n\t\treturn false\n\t}\n\ttightOrTerm := grandparent.Tight || node.Parent.ListFlags&ListTypeTerm != 0\n\treturn grandparent.Type == List && tightOrTerm\n}\n\nfunc cellAlignment(align CellAlignFlags) string {\n\tswitch align {\n\tcase TableAlignmentLeft:\n\t\treturn \"left\"\n\tcase TableAlignmentRight:\n\t\treturn \"right\"\n\tcase TableAlignmentCenter:\n\t\treturn \"center\"\n\tdefault:\n\t\treturn \"\"\n\t}\n}\n\nfunc (r *HTMLRenderer) out(w io.Writer, text []byte) {\n\tif r.disableTags > 0 {\n\t\tw.Write(htmlTagRe.ReplaceAll(text, []byte{}))\n\t} else {\n\t\tw.Write(text)\n\t}\n\tr.lastOutputLen = len(text)\n}\n\nfunc (r *HTMLRenderer) cr(w io.Writer) {\n\tif r.lastOutputLen > 0 {\n\t\tr.out(w, nlBytes)\n\t}\n}\n\nvar (\n\tnlBytes    = []byte{'\\n'}\n\tgtBytes    = []byte{'>'}\n\tspaceBytes = []byte{' '}\n)\n\nvar (\n\tbrTag              = []byte(\"<br>\")\n\tbrXHTMLTag         = []byte(\"<br />\")\n\temTag              = []byte(\"<em>\")\n\temCloseTag         = []byte(\"</em>\")\n\tstrongTag          = []byte(\"<strong>\")\n\tstrongCloseTag     = []byte(\"</strong>\")\n\tdelTag             = []byte(\"<del>\")\n\tdelCloseTag        = []byte(\"</del>\")\n\tttTag              = []byte(\"<tt>\")\n\tttCloseTag         = []byte(\"</tt>\")\n\taTag               = []byte(\"<a\")\n\taCloseTag          = []byte(\"</a>\")\n\tpreTag             = []byte(\"<pre>\")\n\tpreCloseTag        = []byte(\"</pre>\")\n\tcodeTag            = []byte(\"<code>\")\n\tcodeCloseTag       = []byte(\"</code>\")\n\tpTag               = []byte(\"<p>\")\n\tpCloseTag          = []byte(\"</p>\")\n\tblockquoteTag      = []byte(\"<blockquote>\")\n\tblockquoteCloseTag = []byte(\"</blockquote>\")\n\thrTag              = []byte(\"<hr>\")\n\thrXHTMLTag         = []byte(\"<hr />\")\n\tulTag              = []byte(\"<ul>\")\n\tulCloseTag         = []byte(\"</ul>\")\n\tolTag              = []byte(\"<ol>\")\n\tolCloseTag         = []byte(\"</ol>\")\n\tdlTag              = []byte(\"<dl>\")\n\tdlCloseTag         = []byte(\"</dl>\")\n\tliTag              = []byte(\"<li>\")\n\tliCloseTag         = []byte(\"</li>\")\n\tddTag              = []byte(\"<dd>\")\n\tddCloseTag         = []byte(\"</dd>\")\n\tdtTag              = []byte(\"<dt>\")\n\tdtCloseTag         = []byte(\"</dt>\")\n\ttableTag           = []byte(\"<table>\")\n\ttableCloseTag      = []byte(\"</table>\")\n\ttdTag              = []byte(\"<td\")\n\ttdCloseTag         = []byte(\"</td>\")\n\tthTag              = []byte(\"<th\")\n\tthCloseTag         = []byte(\"</th>\")\n\ttheadTag           = []byte(\"<thead>\")\n\ttheadCloseTag      = []byte(\"</thead>\")\n\ttbodyTag           = []byte(\"<tbody>\")\n\ttbodyCloseTag      = []byte(\"</tbody>\")\n\ttrTag              = []byte(\"<tr>\")\n\ttrCloseTag         = []byte(\"</tr>\")\n\th1Tag              = []byte(\"<h1\")\n\th1CloseTag         = []byte(\"</h1>\")\n\th2Tag              = []byte(\"<h2\")\n\th2CloseTag         = []byte(\"</h2>\")\n\th3Tag              = []byte(\"<h3\")\n\th3CloseTag         = []byte(\"</h3>\")\n\th4Tag              = []byte(\"<h4\")\n\th4CloseTag         = []byte(\"</h4>\")\n\th5Tag              = []byte(\"<h5\")\n\th5CloseTag         = []byte(\"</h5>\")\n\th6Tag              = []byte(\"<h6\")\n\th6CloseTag         = []byte(\"</h6>\")\n\n\tfootnotesDivBytes      = []byte(\"\\n<div class=\\\"footnotes\\\">\\n\\n\")\n\tfootnotesCloseDivBytes = []byte(\"\\n</div>\\n\")\n)\n\nfunc headingTagsFromLevel(level int) ([]byte, []byte) {\n\tif level <= 1 {\n\t\treturn h1Tag, h1CloseTag\n\t}\n\tswitch level {\n\tcase 2:\n\t\treturn h2Tag, h2CloseTag\n\tcase 3:\n\t\treturn h3Tag, h3CloseTag\n\tcase 4:\n\t\treturn h4Tag, h4CloseTag\n\tcase 5:\n\t\treturn h5Tag, h5CloseTag\n\t}\n\treturn h6Tag, h6CloseTag\n}\n\nfunc (r *HTMLRenderer) outHRTag(w io.Writer) {\n\tif r.Flags&UseXHTML == 0 {\n\t\tr.out(w, hrTag)\n\t} else {\n\t\tr.out(w, hrXHTMLTag)\n\t}\n}\n\n// RenderNode is a default renderer of a single node of a syntax tree. For\n// block nodes it will be called twice: first time with entering=true, second\n// time with entering=false, so that it could know when it's working on an open\n// tag and when on close. It writes the result to w.\n//\n// The return value is a way to tell the calling walker to adjust its walk\n// pattern: e.g. it can terminate the traversal by returning Terminate. Or it\n// can ask the walker to skip a subtree of this node by returning SkipChildren.\n// The typical behavior is to return GoToNext, which asks for the usual\n// traversal to the next node.\nfunc (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkStatus {\n\tattrs := []string{}\n\tswitch node.Type {\n\tcase Text:\n\t\tif r.Flags&Smartypants != 0 {\n\t\t\tvar tmp bytes.Buffer\n\t\t\tescapeHTML(&tmp, node.Literal)\n\t\t\tr.sr.Process(w, tmp.Bytes())\n\t\t} else {\n\t\t\tif node.Parent.Type == Link {\n\t\t\t\tescLink(w, node.Literal)\n\t\t\t} else {\n\t\t\t\tescapeHTML(w, node.Literal)\n\t\t\t}\n\t\t}\n\tcase Softbreak:\n\t\tr.cr(w)\n\t\t// TODO: make it configurable via out(renderer.softbreak)\n\tcase Hardbreak:\n\t\tif r.Flags&UseXHTML == 0 {\n\t\t\tr.out(w, brTag)\n\t\t} else {\n\t\t\tr.out(w, brXHTMLTag)\n\t\t}\n\t\tr.cr(w)\n\tcase Emph:\n\t\tif entering {\n\t\t\tr.out(w, emTag)\n\t\t} else {\n\t\t\tr.out(w, emCloseTag)\n\t\t}\n\tcase Strong:\n\t\tif entering {\n\t\t\tr.out(w, strongTag)\n\t\t} else {\n\t\t\tr.out(w, strongCloseTag)\n\t\t}\n\tcase Del:\n\t\tif entering {\n\t\t\tr.out(w, delTag)\n\t\t} else {\n\t\t\tr.out(w, delCloseTag)\n\t\t}\n\tcase HTMLSpan:\n\t\tif r.Flags&SkipHTML != 0 {\n\t\t\tbreak\n\t\t}\n\t\tr.out(w, node.Literal)\n\tcase Link:\n\t\t// mark it but don't link it if it is not a safe link: no smartypants\n\t\tdest := node.LinkData.Destination\n\t\tif needSkipLink(r.Flags, dest) {\n\t\t\tif entering {\n\t\t\t\tr.out(w, ttTag)\n\t\t\t} else {\n\t\t\t\tr.out(w, ttCloseTag)\n\t\t\t}\n\t\t} else {\n\t\t\tif entering {\n\t\t\t\tdest = r.addAbsPrefix(dest)\n\t\t\t\tvar hrefBuf bytes.Buffer\n\t\t\t\threfBuf.WriteString(\"href=\\\"\")\n\t\t\t\tescLink(&hrefBuf, dest)\n\t\t\t\threfBuf.WriteByte('\"')\n\t\t\t\tattrs = append(attrs, hrefBuf.String())\n\t\t\t\tif node.NoteID != 0 {\n\t\t\t\t\tr.out(w, footnoteRef(r.FootnoteAnchorPrefix, node))\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tattrs = appendLinkAttrs(attrs, r.Flags, dest)\n\t\t\t\tif len(node.LinkData.Title) > 0 {\n\t\t\t\t\tvar titleBuff bytes.Buffer\n\t\t\t\t\ttitleBuff.WriteString(\"title=\\\"\")\n\t\t\t\t\tescapeHTML(&titleBuff, node.LinkData.Title)\n\t\t\t\t\ttitleBuff.WriteByte('\"')\n\t\t\t\t\tattrs = append(attrs, titleBuff.String())\n\t\t\t\t}\n\t\t\t\tr.tag(w, aTag, attrs)\n\t\t\t} else {\n\t\t\t\tif node.NoteID != 0 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tr.out(w, aCloseTag)\n\t\t\t}\n\t\t}\n\tcase Image:\n\t\tif r.Flags&SkipImages != 0 {\n\t\t\treturn SkipChildren\n\t\t}\n\t\tif entering {\n\t\t\tdest := node.LinkData.Destination\n\t\t\tdest = r.addAbsPrefix(dest)\n\t\t\tif r.disableTags == 0 {\n\t\t\t\t//if options.safe && potentiallyUnsafe(dest) {\n\t\t\t\t//out(w, `<img src=\"\" alt=\"`)\n\t\t\t\t//} else {\n\t\t\t\tr.out(w, []byte(`<img src=\"`))\n\t\t\t\tescLink(w, dest)\n\t\t\t\tr.out(w, []byte(`\" alt=\"`))\n\t\t\t\t//}\n\t\t\t}\n\t\t\tr.disableTags++\n\t\t} else {\n\t\t\tr.disableTags--\n\t\t\tif r.disableTags == 0 {\n\t\t\t\tif node.LinkData.Title != nil {\n\t\t\t\t\tr.out(w, []byte(`\" title=\"`))\n\t\t\t\t\tescapeHTML(w, node.LinkData.Title)\n\t\t\t\t}\n\t\t\t\tr.out(w, []byte(`\" />`))\n\t\t\t}\n\t\t}\n\tcase Code:\n\t\tr.out(w, codeTag)\n\t\tescapeAllHTML(w, node.Literal)\n\t\tr.out(w, codeCloseTag)\n\tcase Document:\n\t\tbreak\n\tcase Paragraph:\n\t\tif skipParagraphTags(node) {\n\t\t\tbreak\n\t\t}\n\t\tif entering {\n\t\t\t// TODO: untangle this clusterfuck about when the newlines need\n\t\t\t// to be added and when not.\n\t\t\tif node.Prev != nil {\n\t\t\t\tswitch node.Prev.Type {\n\t\t\t\tcase HTMLBlock, List, Paragraph, Heading, CodeBlock, BlockQuote, HorizontalRule:\n\t\t\t\t\tr.cr(w)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif node.Parent.Type == BlockQuote && node.Prev == nil {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tr.out(w, pTag)\n\t\t} else {\n\t\t\tr.out(w, pCloseTag)\n\t\t\tif !(node.Parent.Type == Item && node.Next == nil) {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t}\n\tcase BlockQuote:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, blockquoteTag)\n\t\t} else {\n\t\t\tr.out(w, blockquoteCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase HTMLBlock:\n\t\tif r.Flags&SkipHTML != 0 {\n\t\t\tbreak\n\t\t}\n\t\tr.cr(w)\n\t\tr.out(w, node.Literal)\n\t\tr.cr(w)\n\tcase Heading:\n\t\theadingLevel := r.HTMLRendererParameters.HeadingLevelOffset + node.Level\n\t\topenTag, closeTag := headingTagsFromLevel(headingLevel)\n\t\tif entering {\n\t\t\tif node.IsTitleblock {\n\t\t\t\tattrs = append(attrs, `class=\"title\"`)\n\t\t\t}\n\t\t\tif node.HeadingID != \"\" {\n\t\t\t\tid := r.ensureUniqueHeadingID(node.HeadingID)\n\t\t\t\tif r.HeadingIDPrefix != \"\" {\n\t\t\t\t\tid = r.HeadingIDPrefix + id\n\t\t\t\t}\n\t\t\t\tif r.HeadingIDSuffix != \"\" {\n\t\t\t\t\tid = id + r.HeadingIDSuffix\n\t\t\t\t}\n\t\t\t\tattrs = append(attrs, fmt.Sprintf(`id=\"%s\"`, id))\n\t\t\t}\n\t\t\tr.cr(w)\n\t\t\tr.tag(w, openTag, attrs)\n\t\t} else {\n\t\t\tr.out(w, closeTag)\n\t\t\tif !(node.Parent.Type == Item && node.Next == nil) {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t}\n\tcase HorizontalRule:\n\t\tr.cr(w)\n\t\tr.outHRTag(w)\n\t\tr.cr(w)\n\tcase List:\n\t\topenTag := ulTag\n\t\tcloseTag := ulCloseTag\n\t\tif node.ListFlags&ListTypeOrdered != 0 {\n\t\t\topenTag = olTag\n\t\t\tcloseTag = olCloseTag\n\t\t}\n\t\tif node.ListFlags&ListTypeDefinition != 0 {\n\t\t\topenTag = dlTag\n\t\t\tcloseTag = dlCloseTag\n\t\t}\n\t\tif entering {\n\t\t\tif node.IsFootnotesList {\n\t\t\t\tr.out(w, footnotesDivBytes)\n\t\t\t\tr.outHRTag(w)\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tr.cr(w)\n\t\t\tif node.Parent.Type == Item && node.Parent.Parent.Tight {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tr.tag(w, openTag[:len(openTag)-1], attrs)\n\t\t\tr.cr(w)\n\t\t} else {\n\t\t\tr.out(w, closeTag)\n\t\t\t//cr(w)\n\t\t\t//if node.parent.Type != Item {\n\t\t\t//\tcr(w)\n\t\t\t//}\n\t\t\tif node.Parent.Type == Item && node.Next != nil {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tif node.Parent.Type == Document || node.Parent.Type == BlockQuote {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tif node.IsFootnotesList {\n\t\t\t\tr.out(w, footnotesCloseDivBytes)\n\t\t\t}\n\t\t}\n\tcase Item:\n\t\topenTag := liTag\n\t\tcloseTag := liCloseTag\n\t\tif node.ListFlags&ListTypeDefinition != 0 {\n\t\t\topenTag = ddTag\n\t\t\tcloseTag = ddCloseTag\n\t\t}\n\t\tif node.ListFlags&ListTypeTerm != 0 {\n\t\t\topenTag = dtTag\n\t\t\tcloseTag = dtCloseTag\n\t\t}\n\t\tif entering {\n\t\t\tif itemOpenCR(node) {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tif node.ListData.RefLink != nil {\n\t\t\t\tslug := slugify(node.ListData.RefLink)\n\t\t\t\tr.out(w, footnoteItem(r.FootnoteAnchorPrefix, slug))\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tr.out(w, openTag)\n\t\t} else {\n\t\t\tif node.ListData.RefLink != nil {\n\t\t\t\tslug := slugify(node.ListData.RefLink)\n\t\t\t\tif r.Flags&FootnoteReturnLinks != 0 {\n\t\t\t\t\tr.out(w, footnoteReturnLink(r.FootnoteAnchorPrefix, r.FootnoteReturnLinkContents, slug))\n\t\t\t\t}\n\t\t\t}\n\t\t\tr.out(w, closeTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase CodeBlock:\n\t\tattrs = appendLanguageAttr(attrs, node.Info)\n\t\tr.cr(w)\n\t\tr.out(w, preTag)\n\t\tr.tag(w, codeTag[:len(codeTag)-1], attrs)\n\t\tescapeAllHTML(w, node.Literal)\n\t\tr.out(w, codeCloseTag)\n\t\tr.out(w, preCloseTag)\n\t\tif node.Parent.Type != Item {\n\t\t\tr.cr(w)\n\t\t}\n\tcase Table:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, tableTag)\n\t\t} else {\n\t\t\tr.out(w, tableCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase TableCell:\n\t\topenTag := tdTag\n\t\tcloseTag := tdCloseTag\n\t\tif node.IsHeader {\n\t\t\topenTag = thTag\n\t\t\tcloseTag = thCloseTag\n\t\t}\n\t\tif entering {\n\t\t\talign := cellAlignment(node.Align)\n\t\t\tif align != \"\" {\n\t\t\t\tattrs = append(attrs, fmt.Sprintf(`align=\"%s\"`, align))\n\t\t\t}\n\t\t\tif node.Prev == nil {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t\tr.tag(w, openTag, attrs)\n\t\t} else {\n\t\t\tr.out(w, closeTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase TableHead:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, theadTag)\n\t\t} else {\n\t\t\tr.out(w, theadCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase TableBody:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, tbodyTag)\n\t\t\t// XXX: this is to adhere to a rather silly test. Should fix test.\n\t\t\tif node.FirstChild == nil {\n\t\t\t\tr.cr(w)\n\t\t\t}\n\t\t} else {\n\t\t\tr.out(w, tbodyCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tcase TableRow:\n\t\tif entering {\n\t\t\tr.cr(w)\n\t\t\tr.out(w, trTag)\n\t\t} else {\n\t\t\tr.out(w, trCloseTag)\n\t\t\tr.cr(w)\n\t\t}\n\tdefault:\n\t\tpanic(\"Unknown node type \" + node.Type.String())\n\t}\n\treturn GoToNext\n}\n\n// RenderHeader writes HTML document preamble and TOC if requested.\nfunc (r *HTMLRenderer) RenderHeader(w io.Writer, ast *Node) {\n\tr.writeDocumentHeader(w)\n\tif r.Flags&TOC != 0 {\n\t\tr.writeTOC(w, ast)\n\t}\n}\n\n// RenderFooter writes HTML document footer.\nfunc (r *HTMLRenderer) RenderFooter(w io.Writer, ast *Node) {\n\tif r.Flags&CompletePage == 0 {\n\t\treturn\n\t}\n\tio.WriteString(w, \"\\n</body>\\n</html>\\n\")\n}\n\nfunc (r *HTMLRenderer) writeDocumentHeader(w io.Writer) {\n\tif r.Flags&CompletePage == 0 {\n\t\treturn\n\t}\n\tending := \"\"\n\tif r.Flags&UseXHTML != 0 {\n\t\tio.WriteString(w, \"<!DOCTYPE html PUBLIC \\\"-//W3C//DTD XHTML 1.0 Transitional//EN\\\" \")\n\t\tio.WriteString(w, \"\\\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\\\">\\n\")\n\t\tio.WriteString(w, \"<html xmlns=\\\"http://www.w3.org/1999/xhtml\\\">\\n\")\n\t\tending = \" /\"\n\t} else {\n\t\tio.WriteString(w, \"<!DOCTYPE html>\\n\")\n\t\tio.WriteString(w, \"<html>\\n\")\n\t}\n\tio.WriteString(w, \"<head>\\n\")\n\tio.WriteString(w, \"  <title>\")\n\tif r.Flags&Smartypants != 0 {\n\t\tr.sr.Process(w, []byte(r.Title))\n\t} else {\n\t\tescapeHTML(w, []byte(r.Title))\n\t}\n\tio.WriteString(w, \"</title>\\n\")\n\tio.WriteString(w, \"  <meta name=\\\"GENERATOR\\\" content=\\\"Blackfriday Markdown Processor v\")\n\tio.WriteString(w, Version)\n\tio.WriteString(w, \"\\\"\")\n\tio.WriteString(w, ending)\n\tio.WriteString(w, \">\\n\")\n\tio.WriteString(w, \"  <meta charset=\\\"utf-8\\\"\")\n\tio.WriteString(w, ending)\n\tio.WriteString(w, \">\\n\")\n\tif r.CSS != \"\" {\n\t\tio.WriteString(w, \"  <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"\")\n\t\tescapeHTML(w, []byte(r.CSS))\n\t\tio.WriteString(w, \"\\\"\")\n\t\tio.WriteString(w, ending)\n\t\tio.WriteString(w, \">\\n\")\n\t}\n\tif r.Icon != \"\" {\n\t\tio.WriteString(w, \"  <link rel=\\\"icon\\\" type=\\\"image/x-icon\\\" href=\\\"\")\n\t\tescapeHTML(w, []byte(r.Icon))\n\t\tio.WriteString(w, \"\\\"\")\n\t\tio.WriteString(w, ending)\n\t\tio.WriteString(w, \">\\n\")\n\t}\n\tio.WriteString(w, \"</head>\\n\")\n\tio.WriteString(w, \"<body>\\n\\n\")\n}\n\nfunc (r *HTMLRenderer) writeTOC(w io.Writer, ast *Node) {\n\tbuf := bytes.Buffer{}\n\n\tinHeading := false\n\ttocLevel := 0\n\theadingCount := 0\n\n\tast.Walk(func(node *Node, entering bool) WalkStatus {\n\t\tif node.Type == Heading && !node.HeadingData.IsTitleblock {\n\t\t\tinHeading = entering\n\t\t\tif entering {\n\t\t\t\tnode.HeadingID = fmt.Sprintf(\"toc_%d\", headingCount)\n\t\t\t\tif node.Level == tocLevel {\n\t\t\t\t\tbuf.WriteString(\"</li>\\n\\n<li>\")\n\t\t\t\t} else if node.Level < tocLevel {\n\t\t\t\t\tfor node.Level < tocLevel {\n\t\t\t\t\t\ttocLevel--\n\t\t\t\t\t\tbuf.WriteString(\"</li>\\n</ul>\")\n\t\t\t\t\t}\n\t\t\t\t\tbuf.WriteString(\"</li>\\n\\n<li>\")\n\t\t\t\t} else {\n\t\t\t\t\tfor node.Level > tocLevel {\n\t\t\t\t\t\ttocLevel++\n\t\t\t\t\t\tbuf.WriteString(\"\\n<ul>\\n<li>\")\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfmt.Fprintf(&buf, `<a href=\"#toc_%d\">`, headingCount)\n\t\t\t\theadingCount++\n\t\t\t} else {\n\t\t\t\tbuf.WriteString(\"</a>\")\n\t\t\t}\n\t\t\treturn GoToNext\n\t\t}\n\n\t\tif inHeading {\n\t\t\treturn r.RenderNode(&buf, node, entering)\n\t\t}\n\n\t\treturn GoToNext\n\t})\n\n\tfor ; tocLevel > 0; tocLevel-- {\n\t\tbuf.WriteString(\"</li>\\n</ul>\")\n\t}\n\n\tif buf.Len() > 0 {\n\t\tio.WriteString(w, \"<nav>\\n\")\n\t\tw.Write(buf.Bytes())\n\t\tio.WriteString(w, \"\\n\\n</nav>\\n\")\n\t}\n\tr.lastOutputLen = buf.Len()\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/inline.go",
    "content": "//\n// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n//\n\n//\n// Functions to parse inline elements.\n//\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"regexp\"\n\t\"strconv\"\n)\n\nvar (\n\turlRe    = `((https?|ftp):\\/\\/|\\/)[-A-Za-z0-9+&@#\\/%?=~_|!:,.;\\(\\)]+`\n\tanchorRe = regexp.MustCompile(`^(<a\\shref=\"` + urlRe + `\"(\\stitle=\"[^\"<>]+\")?\\s?>` + urlRe + `<\\/a>)`)\n\n\t// https://www.w3.org/TR/html5/syntax.html#character-references\n\t// highest unicode code point in 17 planes (2^20): 1,114,112d =\n\t// 7 dec digits or 6 hex digits\n\t// named entity references can be 2-31 characters with stuff like &lt;\n\t// at one end and &CounterClockwiseContourIntegral; at the other. There\n\t// are also sometimes numbers at the end, although this isn't inherent\n\t// in the specification; there are never numbers anywhere else in\n\t// current character references, though; see &frac34; and &blk12;, etc.\n\t// https://www.w3.org/TR/html5/syntax.html#named-character-references\n\t//\n\t// entity := \"&\" (named group | number ref) \";\"\n\t// named group := [a-zA-Z]{2,31}[0-9]{0,2}\n\t// number ref := \"#\" (dec ref | hex ref)\n\t// dec ref := [0-9]{1,7}\n\t// hex ref := (\"x\" | \"X\") [0-9a-fA-F]{1,6}\n\thtmlEntityRe = regexp.MustCompile(`&([a-zA-Z]{2,31}[0-9]{0,2}|#([0-9]{1,7}|[xX][0-9a-fA-F]{1,6}));`)\n)\n\n// Functions to parse text within a block\n// Each function returns the number of chars taken care of\n// data is the complete block being rendered\n// offset is the number of valid chars before the current cursor\n\nfunc (p *Markdown) inline(currBlock *Node, data []byte) {\n\t// handlers might call us recursively: enforce a maximum depth\n\tif p.nesting >= p.maxNesting || len(data) == 0 {\n\t\treturn\n\t}\n\tp.nesting++\n\tbeg, end := 0, 0\n\tfor end < len(data) {\n\t\thandler := p.inlineCallback[data[end]]\n\t\tif handler != nil {\n\t\t\tif consumed, node := handler(p, data, end); consumed == 0 {\n\t\t\t\t// No action from the callback.\n\t\t\t\tend++\n\t\t\t} else {\n\t\t\t\t// Copy inactive chars into the output.\n\t\t\t\tcurrBlock.AppendChild(text(data[beg:end]))\n\t\t\t\tif node != nil {\n\t\t\t\t\tcurrBlock.AppendChild(node)\n\t\t\t\t}\n\t\t\t\t// Skip past whatever the callback used.\n\t\t\t\tbeg = end + consumed\n\t\t\t\tend = beg\n\t\t\t}\n\t\t} else {\n\t\t\tend++\n\t\t}\n\t}\n\tif beg < len(data) {\n\t\tif data[end-1] == '\\n' {\n\t\t\tend--\n\t\t}\n\t\tcurrBlock.AppendChild(text(data[beg:end]))\n\t}\n\tp.nesting--\n}\n\n// single and double emphasis parsing\nfunc emphasis(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\tc := data[0]\n\n\tif len(data) > 2 && data[1] != c {\n\t\t// whitespace cannot follow an opening emphasis;\n\t\t// strikethrough only takes two characters '~~'\n\t\tif c == '~' || isspace(data[1]) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tret, node := helperEmphasis(p, data[1:], c)\n\t\tif ret == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\treturn ret + 1, node\n\t}\n\n\tif len(data) > 3 && data[1] == c && data[2] != c {\n\t\tif isspace(data[2]) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tret, node := helperDoubleEmphasis(p, data[2:], c)\n\t\tif ret == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\treturn ret + 2, node\n\t}\n\n\tif len(data) > 4 && data[1] == c && data[2] == c && data[3] != c {\n\t\tif c == '~' || isspace(data[3]) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tret, node := helperTripleEmphasis(p, data, 3, c)\n\t\tif ret == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\treturn ret + 3, node\n\t}\n\n\treturn 0, nil\n}\n\nfunc codeSpan(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\n\tnb := 0\n\n\t// count the number of backticks in the delimiter\n\tfor nb < len(data) && data[nb] == '`' {\n\t\tnb++\n\t}\n\n\t// find the next delimiter\n\ti, end := 0, 0\n\tfor end = nb; end < len(data) && i < nb; end++ {\n\t\tif data[end] == '`' {\n\t\t\ti++\n\t\t} else {\n\t\t\ti = 0\n\t\t}\n\t}\n\n\t// no matching delimiter?\n\tif i < nb && end >= len(data) {\n\t\treturn 0, nil\n\t}\n\n\t// trim outside whitespace\n\tfBegin := nb\n\tfor fBegin < end && data[fBegin] == ' ' {\n\t\tfBegin++\n\t}\n\n\tfEnd := end - nb\n\tfor fEnd > fBegin && data[fEnd-1] == ' ' {\n\t\tfEnd--\n\t}\n\n\t// render the code span\n\tif fBegin != fEnd {\n\t\tcode := NewNode(Code)\n\t\tcode.Literal = data[fBegin:fEnd]\n\t\treturn end, code\n\t}\n\n\treturn end, nil\n}\n\n// newline preceded by two spaces becomes <br>\nfunc maybeLineBreak(p *Markdown, data []byte, offset int) (int, *Node) {\n\torigOffset := offset\n\tfor offset < len(data) && data[offset] == ' ' {\n\t\toffset++\n\t}\n\n\tif offset < len(data) && data[offset] == '\\n' {\n\t\tif offset-origOffset >= 2 {\n\t\t\treturn offset - origOffset + 1, NewNode(Hardbreak)\n\t\t}\n\t\treturn offset - origOffset, nil\n\t}\n\treturn 0, nil\n}\n\n// newline without two spaces works when HardLineBreak is enabled\nfunc lineBreak(p *Markdown, data []byte, offset int) (int, *Node) {\n\tif p.extensions&HardLineBreak != 0 {\n\t\treturn 1, NewNode(Hardbreak)\n\t}\n\treturn 0, nil\n}\n\ntype linkType int\n\nconst (\n\tlinkNormal linkType = iota\n\tlinkImg\n\tlinkDeferredFootnote\n\tlinkInlineFootnote\n)\n\nfunc isReferenceStyleLink(data []byte, pos int, t linkType) bool {\n\tif t == linkDeferredFootnote {\n\t\treturn false\n\t}\n\treturn pos < len(data)-1 && data[pos] == '[' && data[pos+1] != '^'\n}\n\nfunc maybeImage(p *Markdown, data []byte, offset int) (int, *Node) {\n\tif offset < len(data)-1 && data[offset+1] == '[' {\n\t\treturn link(p, data, offset)\n\t}\n\treturn 0, nil\n}\n\nfunc maybeInlineFootnote(p *Markdown, data []byte, offset int) (int, *Node) {\n\tif offset < len(data)-1 && data[offset+1] == '[' {\n\t\treturn link(p, data, offset)\n\t}\n\treturn 0, nil\n}\n\n// '[': parse a link or an image or a footnote\nfunc link(p *Markdown, data []byte, offset int) (int, *Node) {\n\t// no links allowed inside regular links, footnote, and deferred footnotes\n\tif p.insideLink && (offset > 0 && data[offset-1] == '[' || len(data)-1 > offset && data[offset+1] == '^') {\n\t\treturn 0, nil\n\t}\n\n\tvar t linkType\n\tswitch {\n\t// special case: ![^text] == deferred footnote (that follows something with\n\t// an exclamation point)\n\tcase p.extensions&Footnotes != 0 && len(data)-1 > offset && data[offset+1] == '^':\n\t\tt = linkDeferredFootnote\n\t// ![alt] == image\n\tcase offset >= 0 && data[offset] == '!':\n\t\tt = linkImg\n\t\toffset++\n\t// ^[text] == inline footnote\n\t// [^refId] == deferred footnote\n\tcase p.extensions&Footnotes != 0:\n\t\tif offset >= 0 && data[offset] == '^' {\n\t\t\tt = linkInlineFootnote\n\t\t\toffset++\n\t\t} else if len(data)-1 > offset && data[offset+1] == '^' {\n\t\t\tt = linkDeferredFootnote\n\t\t}\n\t// [text] == regular link\n\tdefault:\n\t\tt = linkNormal\n\t}\n\n\tdata = data[offset:]\n\n\tvar (\n\t\ti                       = 1\n\t\tnoteID                  int\n\t\ttitle, link, altContent []byte\n\t\ttextHasNl               = false\n\t)\n\n\tif t == linkDeferredFootnote {\n\t\ti++\n\t}\n\n\t// look for the matching closing bracket\n\tfor level := 1; level > 0 && i < len(data); i++ {\n\t\tswitch {\n\t\tcase data[i] == '\\n':\n\t\t\ttextHasNl = true\n\n\t\tcase isBackslashEscaped(data, i):\n\t\t\tcontinue\n\n\t\tcase data[i] == '[':\n\t\t\tlevel++\n\n\t\tcase data[i] == ']':\n\t\t\tlevel--\n\t\t\tif level <= 0 {\n\t\t\t\ti-- // compensate for extra i++ in for loop\n\t\t\t}\n\t\t}\n\t}\n\n\tif i >= len(data) {\n\t\treturn 0, nil\n\t}\n\n\ttxtE := i\n\ti++\n\tvar footnoteNode *Node\n\n\t// skip any amount of whitespace or newline\n\t// (this is much more lax than original markdown syntax)\n\tfor i < len(data) && isspace(data[i]) {\n\t\ti++\n\t}\n\n\t// inline style link\n\tswitch {\n\tcase i < len(data) && data[i] == '(':\n\t\t// skip initial whitespace\n\t\ti++\n\n\t\tfor i < len(data) && isspace(data[i]) {\n\t\t\ti++\n\t\t}\n\n\t\tlinkB := i\n\n\t\t// look for link end: ' \" )\n\tfindlinkend:\n\t\tfor i < len(data) {\n\t\t\tswitch {\n\t\t\tcase data[i] == '\\\\':\n\t\t\t\ti += 2\n\n\t\t\tcase data[i] == ')' || data[i] == '\\'' || data[i] == '\"':\n\t\t\t\tbreak findlinkend\n\n\t\t\tdefault:\n\t\t\t\ti++\n\t\t\t}\n\t\t}\n\n\t\tif i >= len(data) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tlinkE := i\n\n\t\t// look for title end if present\n\t\ttitleB, titleE := 0, 0\n\t\tif data[i] == '\\'' || data[i] == '\"' {\n\t\t\ti++\n\t\t\ttitleB = i\n\n\t\tfindtitleend:\n\t\t\tfor i < len(data) {\n\t\t\t\tswitch {\n\t\t\t\tcase data[i] == '\\\\':\n\t\t\t\t\ti += 2\n\n\t\t\t\tcase data[i] == ')':\n\t\t\t\t\tbreak findtitleend\n\n\t\t\t\tdefault:\n\t\t\t\t\ti++\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif i >= len(data) {\n\t\t\t\treturn 0, nil\n\t\t\t}\n\n\t\t\t// skip whitespace after title\n\t\t\ttitleE = i - 1\n\t\t\tfor titleE > titleB && isspace(data[titleE]) {\n\t\t\t\ttitleE--\n\t\t\t}\n\n\t\t\t// check for closing quote presence\n\t\t\tif data[titleE] != '\\'' && data[titleE] != '\"' {\n\t\t\t\ttitleB, titleE = 0, 0\n\t\t\t\tlinkE = i\n\t\t\t}\n\t\t}\n\n\t\t// remove whitespace at the end of the link\n\t\tfor linkE > linkB && isspace(data[linkE-1]) {\n\t\t\tlinkE--\n\t\t}\n\n\t\t// remove optional angle brackets around the link\n\t\tif data[linkB] == '<' {\n\t\t\tlinkB++\n\t\t}\n\t\tif data[linkE-1] == '>' {\n\t\t\tlinkE--\n\t\t}\n\n\t\t// build escaped link and title\n\t\tif linkE > linkB {\n\t\t\tlink = data[linkB:linkE]\n\t\t}\n\n\t\tif titleE > titleB {\n\t\t\ttitle = data[titleB:titleE]\n\t\t}\n\n\t\ti++\n\n\t// reference style link\n\tcase isReferenceStyleLink(data, i, t):\n\t\tvar id []byte\n\t\taltContentConsidered := false\n\n\t\t// look for the id\n\t\ti++\n\t\tlinkB := i\n\t\tfor i < len(data) && data[i] != ']' {\n\t\t\ti++\n\t\t}\n\t\tif i >= len(data) {\n\t\t\treturn 0, nil\n\t\t}\n\t\tlinkE := i\n\n\t\t// find the reference\n\t\tif linkB == linkE {\n\t\t\tif textHasNl {\n\t\t\t\tvar b bytes.Buffer\n\n\t\t\t\tfor j := 1; j < txtE; j++ {\n\t\t\t\t\tswitch {\n\t\t\t\t\tcase data[j] != '\\n':\n\t\t\t\t\t\tb.WriteByte(data[j])\n\t\t\t\t\tcase data[j-1] != ' ':\n\t\t\t\t\t\tb.WriteByte(' ')\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tid = b.Bytes()\n\t\t\t} else {\n\t\t\t\tid = data[1:txtE]\n\t\t\t\taltContentConsidered = true\n\t\t\t}\n\t\t} else {\n\t\t\tid = data[linkB:linkE]\n\t\t}\n\n\t\t// find the reference with matching id\n\t\tlr, ok := p.getRef(string(id))\n\t\tif !ok {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\t// keep link and title from reference\n\t\tlink = lr.link\n\t\ttitle = lr.title\n\t\tif altContentConsidered {\n\t\t\taltContent = lr.text\n\t\t}\n\t\ti++\n\n\t// shortcut reference style link or reference or inline footnote\n\tdefault:\n\t\tvar id []byte\n\n\t\t// craft the id\n\t\tif textHasNl {\n\t\t\tvar b bytes.Buffer\n\n\t\t\tfor j := 1; j < txtE; j++ {\n\t\t\t\tswitch {\n\t\t\t\tcase data[j] != '\\n':\n\t\t\t\t\tb.WriteByte(data[j])\n\t\t\t\tcase data[j-1] != ' ':\n\t\t\t\t\tb.WriteByte(' ')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tid = b.Bytes()\n\t\t} else {\n\t\t\tif t == linkDeferredFootnote {\n\t\t\t\tid = data[2:txtE] // get rid of the ^\n\t\t\t} else {\n\t\t\t\tid = data[1:txtE]\n\t\t\t}\n\t\t}\n\n\t\tfootnoteNode = NewNode(Item)\n\t\tif t == linkInlineFootnote {\n\t\t\t// create a new reference\n\t\t\tnoteID = len(p.notes) + 1\n\n\t\t\tvar fragment []byte\n\t\t\tif len(id) > 0 {\n\t\t\t\tif len(id) < 16 {\n\t\t\t\t\tfragment = make([]byte, len(id))\n\t\t\t\t} else {\n\t\t\t\t\tfragment = make([]byte, 16)\n\t\t\t\t}\n\t\t\t\tcopy(fragment, slugify(id))\n\t\t\t} else {\n\t\t\t\tfragment = append([]byte(\"footnote-\"), []byte(strconv.Itoa(noteID))...)\n\t\t\t}\n\n\t\t\tref := &reference{\n\t\t\t\tnoteID:   noteID,\n\t\t\t\thasBlock: false,\n\t\t\t\tlink:     fragment,\n\t\t\t\ttitle:    id,\n\t\t\t\tfootnote: footnoteNode,\n\t\t\t}\n\n\t\t\tp.notes = append(p.notes, ref)\n\n\t\t\tlink = ref.link\n\t\t\ttitle = ref.title\n\t\t} else {\n\t\t\t// find the reference with matching id\n\t\t\tlr, ok := p.getRef(string(id))\n\t\t\tif !ok {\n\t\t\t\treturn 0, nil\n\t\t\t}\n\n\t\t\tif t == linkDeferredFootnote {\n\t\t\t\tlr.noteID = len(p.notes) + 1\n\t\t\t\tlr.footnote = footnoteNode\n\t\t\t\tp.notes = append(p.notes, lr)\n\t\t\t}\n\n\t\t\t// keep link and title from reference\n\t\t\tlink = lr.link\n\t\t\t// if inline footnote, title == footnote contents\n\t\t\ttitle = lr.title\n\t\t\tnoteID = lr.noteID\n\t\t}\n\n\t\t// rewind the whitespace\n\t\ti = txtE + 1\n\t}\n\n\tvar uLink []byte\n\tif t == linkNormal || t == linkImg {\n\t\tif len(link) > 0 {\n\t\t\tvar uLinkBuf bytes.Buffer\n\t\t\tunescapeText(&uLinkBuf, link)\n\t\t\tuLink = uLinkBuf.Bytes()\n\t\t}\n\n\t\t// links need something to click on and somewhere to go\n\t\tif len(uLink) == 0 || (t == linkNormal && txtE <= 1) {\n\t\t\treturn 0, nil\n\t\t}\n\t}\n\n\t// call the relevant rendering function\n\tvar linkNode *Node\n\tswitch t {\n\tcase linkNormal:\n\t\tlinkNode = NewNode(Link)\n\t\tlinkNode.Destination = normalizeURI(uLink)\n\t\tlinkNode.Title = title\n\t\tif len(altContent) > 0 {\n\t\t\tlinkNode.AppendChild(text(altContent))\n\t\t} else {\n\t\t\t// links cannot contain other links, so turn off link parsing\n\t\t\t// temporarily and recurse\n\t\t\tinsideLink := p.insideLink\n\t\t\tp.insideLink = true\n\t\t\tp.inline(linkNode, data[1:txtE])\n\t\t\tp.insideLink = insideLink\n\t\t}\n\n\tcase linkImg:\n\t\tlinkNode = NewNode(Image)\n\t\tlinkNode.Destination = uLink\n\t\tlinkNode.Title = title\n\t\tlinkNode.AppendChild(text(data[1:txtE]))\n\t\ti++\n\n\tcase linkInlineFootnote, linkDeferredFootnote:\n\t\tlinkNode = NewNode(Link)\n\t\tlinkNode.Destination = link\n\t\tlinkNode.Title = title\n\t\tlinkNode.NoteID = noteID\n\t\tlinkNode.Footnote = footnoteNode\n\t\tif t == linkInlineFootnote {\n\t\t\ti++\n\t\t}\n\n\tdefault:\n\t\treturn 0, nil\n\t}\n\n\treturn i, linkNode\n}\n\nfunc (p *Markdown) inlineHTMLComment(data []byte) int {\n\tif len(data) < 5 {\n\t\treturn 0\n\t}\n\tif data[0] != '<' || data[1] != '!' || data[2] != '-' || data[3] != '-' {\n\t\treturn 0\n\t}\n\ti := 5\n\t// scan for an end-of-comment marker, across lines if necessary\n\tfor i < len(data) && !(data[i-2] == '-' && data[i-1] == '-' && data[i] == '>') {\n\t\ti++\n\t}\n\t// no end-of-comment marker\n\tif i >= len(data) {\n\t\treturn 0\n\t}\n\treturn i + 1\n}\n\nfunc stripMailto(link []byte) []byte {\n\tif bytes.HasPrefix(link, []byte(\"mailto://\")) {\n\t\treturn link[9:]\n\t} else if bytes.HasPrefix(link, []byte(\"mailto:\")) {\n\t\treturn link[7:]\n\t} else {\n\t\treturn link\n\t}\n}\n\n// autolinkType specifies a kind of autolink that gets detected.\ntype autolinkType int\n\n// These are the possible flag values for the autolink renderer.\nconst (\n\tnotAutolink autolinkType = iota\n\tnormalAutolink\n\temailAutolink\n)\n\n// '<' when tags or autolinks are allowed\nfunc leftAngle(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\taltype, end := tagLength(data)\n\tif size := p.inlineHTMLComment(data); size > 0 {\n\t\tend = size\n\t}\n\tif end > 2 {\n\t\tif altype != notAutolink {\n\t\t\tvar uLink bytes.Buffer\n\t\t\tunescapeText(&uLink, data[1:end+1-2])\n\t\t\tif uLink.Len() > 0 {\n\t\t\t\tlink := uLink.Bytes()\n\t\t\t\tnode := NewNode(Link)\n\t\t\t\tnode.Destination = link\n\t\t\t\tif altype == emailAutolink {\n\t\t\t\t\tnode.Destination = append([]byte(\"mailto:\"), link...)\n\t\t\t\t}\n\t\t\t\tnode.AppendChild(text(stripMailto(link)))\n\t\t\t\treturn end, node\n\t\t\t}\n\t\t} else {\n\t\t\thtmlTag := NewNode(HTMLSpan)\n\t\t\thtmlTag.Literal = data[:end]\n\t\t\treturn end, htmlTag\n\t\t}\n\t}\n\n\treturn end, nil\n}\n\n// '\\\\' backslash escape\nvar escapeChars = []byte(\"\\\\`*_{}[]()#+-.!:|&<>~\")\n\nfunc escape(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\n\tif len(data) > 1 {\n\t\tif p.extensions&BackslashLineBreak != 0 && data[1] == '\\n' {\n\t\t\treturn 2, NewNode(Hardbreak)\n\t\t}\n\t\tif bytes.IndexByte(escapeChars, data[1]) < 0 {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\treturn 2, text(data[1:2])\n\t}\n\n\treturn 2, nil\n}\n\nfunc unescapeText(ob *bytes.Buffer, src []byte) {\n\ti := 0\n\tfor i < len(src) {\n\t\torg := i\n\t\tfor i < len(src) && src[i] != '\\\\' {\n\t\t\ti++\n\t\t}\n\n\t\tif i > org {\n\t\t\tob.Write(src[org:i])\n\t\t}\n\n\t\tif i+1 >= len(src) {\n\t\t\tbreak\n\t\t}\n\n\t\tob.WriteByte(src[i+1])\n\t\ti += 2\n\t}\n}\n\n// '&' escaped when it doesn't belong to an entity\n// valid entities are assumed to be anything matching &#?[A-Za-z0-9]+;\nfunc entity(p *Markdown, data []byte, offset int) (int, *Node) {\n\tdata = data[offset:]\n\n\tend := 1\n\n\tif end < len(data) && data[end] == '#' {\n\t\tend++\n\t}\n\n\tfor end < len(data) && isalnum(data[end]) {\n\t\tend++\n\t}\n\n\tif end < len(data) && data[end] == ';' {\n\t\tend++ // real entity\n\t} else {\n\t\treturn 0, nil // lone '&'\n\t}\n\n\tent := data[:end]\n\t// undo &amp; escaping or it will be converted to &amp;amp; by another\n\t// escaper in the renderer\n\tif bytes.Equal(ent, []byte(\"&amp;\")) {\n\t\tent = []byte{'&'}\n\t}\n\n\treturn end, text(ent)\n}\n\nfunc linkEndsWithEntity(data []byte, linkEnd int) bool {\n\tentityRanges := htmlEntityRe.FindAllIndex(data[:linkEnd], -1)\n\treturn entityRanges != nil && entityRanges[len(entityRanges)-1][1] == linkEnd\n}\n\n// hasPrefixCaseInsensitive is a custom implementation of\n//     strings.HasPrefix(strings.ToLower(s), prefix)\n// we rolled our own because ToLower pulls in a huge machinery of lowercasing\n// anything from Unicode and that's very slow. Since this func will only be\n// used on ASCII protocol prefixes, we can take shortcuts.\nfunc hasPrefixCaseInsensitive(s, prefix []byte) bool {\n\tif len(s) < len(prefix) {\n\t\treturn false\n\t}\n\tdelta := byte('a' - 'A')\n\tfor i, b := range prefix {\n\t\tif b != s[i] && b != s[i]+delta {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nvar protocolPrefixes = [][]byte{\n\t[]byte(\"http://\"),\n\t[]byte(\"https://\"),\n\t[]byte(\"ftp://\"),\n\t[]byte(\"file://\"),\n\t[]byte(\"mailto:\"),\n}\n\nconst shortestPrefix = 6 // len(\"ftp://\"), the shortest of the above\n\nfunc maybeAutoLink(p *Markdown, data []byte, offset int) (int, *Node) {\n\t// quick check to rule out most false hits\n\tif p.insideLink || len(data) < offset+shortestPrefix {\n\t\treturn 0, nil\n\t}\n\tfor _, prefix := range protocolPrefixes {\n\t\tendOfHead := offset + 8 // 8 is the len() of the longest prefix\n\t\tif endOfHead > len(data) {\n\t\t\tendOfHead = len(data)\n\t\t}\n\t\tif hasPrefixCaseInsensitive(data[offset:endOfHead], prefix) {\n\t\t\treturn autoLink(p, data, offset)\n\t\t}\n\t}\n\treturn 0, nil\n}\n\nfunc autoLink(p *Markdown, data []byte, offset int) (int, *Node) {\n\t// Now a more expensive check to see if we're not inside an anchor element\n\tanchorStart := offset\n\toffsetFromAnchor := 0\n\tfor anchorStart > 0 && data[anchorStart] != '<' {\n\t\tanchorStart--\n\t\toffsetFromAnchor++\n\t}\n\n\tanchorStr := anchorRe.Find(data[anchorStart:])\n\tif anchorStr != nil {\n\t\tanchorClose := NewNode(HTMLSpan)\n\t\tanchorClose.Literal = anchorStr[offsetFromAnchor:]\n\t\treturn len(anchorStr) - offsetFromAnchor, anchorClose\n\t}\n\n\t// scan backward for a word boundary\n\trewind := 0\n\tfor offset-rewind > 0 && rewind <= 7 && isletter(data[offset-rewind-1]) {\n\t\trewind++\n\t}\n\tif rewind > 6 { // longest supported protocol is \"mailto\" which has 6 letters\n\t\treturn 0, nil\n\t}\n\n\torigData := data\n\tdata = data[offset-rewind:]\n\n\tif !isSafeLink(data) {\n\t\treturn 0, nil\n\t}\n\n\tlinkEnd := 0\n\tfor linkEnd < len(data) && !isEndOfLink(data[linkEnd]) {\n\t\tlinkEnd++\n\t}\n\n\t// Skip punctuation at the end of the link\n\tif (data[linkEnd-1] == '.' || data[linkEnd-1] == ',') && data[linkEnd-2] != '\\\\' {\n\t\tlinkEnd--\n\t}\n\n\t// But don't skip semicolon if it's a part of escaped entity:\n\tif data[linkEnd-1] == ';' && data[linkEnd-2] != '\\\\' && !linkEndsWithEntity(data, linkEnd) {\n\t\tlinkEnd--\n\t}\n\n\t// See if the link finishes with a punctuation sign that can be closed.\n\tvar copen byte\n\tswitch data[linkEnd-1] {\n\tcase '\"':\n\t\tcopen = '\"'\n\tcase '\\'':\n\t\tcopen = '\\''\n\tcase ')':\n\t\tcopen = '('\n\tcase ']':\n\t\tcopen = '['\n\tcase '}':\n\t\tcopen = '{'\n\tdefault:\n\t\tcopen = 0\n\t}\n\n\tif copen != 0 {\n\t\tbufEnd := offset - rewind + linkEnd - 2\n\n\t\topenDelim := 1\n\n\t\t/* Try to close the final punctuation sign in this same line;\n\t\t * if we managed to close it outside of the URL, that means that it's\n\t\t * not part of the URL. If it closes inside the URL, that means it\n\t\t * is part of the URL.\n\t\t *\n\t\t * Examples:\n\t\t *\n\t\t *      foo http://www.pokemon.com/Pikachu_(Electric) bar\n\t\t *              => http://www.pokemon.com/Pikachu_(Electric)\n\t\t *\n\t\t *      foo (http://www.pokemon.com/Pikachu_(Electric)) bar\n\t\t *              => http://www.pokemon.com/Pikachu_(Electric)\n\t\t *\n\t\t *      foo http://www.pokemon.com/Pikachu_(Electric)) bar\n\t\t *              => http://www.pokemon.com/Pikachu_(Electric))\n\t\t *\n\t\t *      (foo http://www.pokemon.com/Pikachu_(Electric)) bar\n\t\t *              => foo http://www.pokemon.com/Pikachu_(Electric)\n\t\t */\n\n\t\tfor bufEnd >= 0 && origData[bufEnd] != '\\n' && openDelim != 0 {\n\t\t\tif origData[bufEnd] == data[linkEnd-1] {\n\t\t\t\topenDelim++\n\t\t\t}\n\n\t\t\tif origData[bufEnd] == copen {\n\t\t\t\topenDelim--\n\t\t\t}\n\n\t\t\tbufEnd--\n\t\t}\n\n\t\tif openDelim == 0 {\n\t\t\tlinkEnd--\n\t\t}\n\t}\n\n\tvar uLink bytes.Buffer\n\tunescapeText(&uLink, data[:linkEnd])\n\n\tif uLink.Len() > 0 {\n\t\tnode := NewNode(Link)\n\t\tnode.Destination = uLink.Bytes()\n\t\tnode.AppendChild(text(uLink.Bytes()))\n\t\treturn linkEnd, node\n\t}\n\n\treturn linkEnd, nil\n}\n\nfunc isEndOfLink(char byte) bool {\n\treturn isspace(char) || char == '<'\n}\n\nvar validUris = [][]byte{[]byte(\"http://\"), []byte(\"https://\"), []byte(\"ftp://\"), []byte(\"mailto://\")}\nvar validPaths = [][]byte{[]byte(\"/\"), []byte(\"./\"), []byte(\"../\")}\n\nfunc isSafeLink(link []byte) bool {\n\tfor _, path := range validPaths {\n\t\tif len(link) >= len(path) && bytes.Equal(link[:len(path)], path) {\n\t\t\tif len(link) == len(path) {\n\t\t\t\treturn true\n\t\t\t} else if isalnum(link[len(path)]) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t}\n\n\tfor _, prefix := range validUris {\n\t\t// TODO: handle unicode here\n\t\t// case-insensitive prefix test\n\t\tif len(link) > len(prefix) && bytes.Equal(bytes.ToLower(link[:len(prefix)]), prefix) && isalnum(link[len(prefix)]) {\n\t\t\treturn true\n\t\t}\n\t}\n\n\treturn false\n}\n\n// return the length of the given tag, or 0 is it's not valid\nfunc tagLength(data []byte) (autolink autolinkType, end int) {\n\tvar i, j int\n\n\t// a valid tag can't be shorter than 3 chars\n\tif len(data) < 3 {\n\t\treturn notAutolink, 0\n\t}\n\n\t// begins with a '<' optionally followed by '/', followed by letter or number\n\tif data[0] != '<' {\n\t\treturn notAutolink, 0\n\t}\n\tif data[1] == '/' {\n\t\ti = 2\n\t} else {\n\t\ti = 1\n\t}\n\n\tif !isalnum(data[i]) {\n\t\treturn notAutolink, 0\n\t}\n\n\t// scheme test\n\tautolink = notAutolink\n\n\t// try to find the beginning of an URI\n\tfor i < len(data) && (isalnum(data[i]) || data[i] == '.' || data[i] == '+' || data[i] == '-') {\n\t\ti++\n\t}\n\n\tif i > 1 && i < len(data) && data[i] == '@' {\n\t\tif j = isMailtoAutoLink(data[i:]); j != 0 {\n\t\t\treturn emailAutolink, i + j\n\t\t}\n\t}\n\n\tif i > 2 && i < len(data) && data[i] == ':' {\n\t\tautolink = normalAutolink\n\t\ti++\n\t}\n\n\t// complete autolink test: no whitespace or ' or \"\n\tswitch {\n\tcase i >= len(data):\n\t\tautolink = notAutolink\n\tcase autolink != notAutolink:\n\t\tj = i\n\n\t\tfor i < len(data) {\n\t\t\tif data[i] == '\\\\' {\n\t\t\t\ti += 2\n\t\t\t} else if data[i] == '>' || data[i] == '\\'' || data[i] == '\"' || isspace(data[i]) {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\ti++\n\t\t\t}\n\n\t\t}\n\n\t\tif i >= len(data) {\n\t\t\treturn autolink, 0\n\t\t}\n\t\tif i > j && data[i] == '>' {\n\t\t\treturn autolink, i + 1\n\t\t}\n\n\t\t// one of the forbidden chars has been found\n\t\tautolink = notAutolink\n\t}\n\ti += bytes.IndexByte(data[i:], '>')\n\tif i < 0 {\n\t\treturn autolink, 0\n\t}\n\treturn autolink, i + 1\n}\n\n// look for the address part of a mail autolink and '>'\n// this is less strict than the original markdown e-mail address matching\nfunc isMailtoAutoLink(data []byte) int {\n\tnb := 0\n\n\t// address is assumed to be: [-@._a-zA-Z0-9]+ with exactly one '@'\n\tfor i := 0; i < len(data); i++ {\n\t\tif isalnum(data[i]) {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch data[i] {\n\t\tcase '@':\n\t\t\tnb++\n\n\t\tcase '-', '.', '_':\n\t\t\tbreak\n\n\t\tcase '>':\n\t\t\tif nb == 1 {\n\t\t\t\treturn i + 1\n\t\t\t}\n\t\t\treturn 0\n\t\tdefault:\n\t\t\treturn 0\n\t\t}\n\t}\n\n\treturn 0\n}\n\n// look for the next emph char, skipping other constructs\nfunc helperFindEmphChar(data []byte, c byte) int {\n\ti := 0\n\n\tfor i < len(data) {\n\t\tfor i < len(data) && data[i] != c && data[i] != '`' && data[i] != '[' {\n\t\t\ti++\n\t\t}\n\t\tif i >= len(data) {\n\t\t\treturn 0\n\t\t}\n\t\t// do not count escaped chars\n\t\tif i != 0 && data[i-1] == '\\\\' {\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\t\tif data[i] == c {\n\t\t\treturn i\n\t\t}\n\n\t\tif data[i] == '`' {\n\t\t\t// skip a code span\n\t\t\ttmpI := 0\n\t\t\ti++\n\t\t\tfor i < len(data) && data[i] != '`' {\n\t\t\t\tif tmpI == 0 && data[i] == c {\n\t\t\t\t\ttmpI = i\n\t\t\t\t}\n\t\t\t\ti++\n\t\t\t}\n\t\t\tif i >= len(data) {\n\t\t\t\treturn tmpI\n\t\t\t}\n\t\t\ti++\n\t\t} else if data[i] == '[' {\n\t\t\t// skip a link\n\t\t\ttmpI := 0\n\t\t\ti++\n\t\t\tfor i < len(data) && data[i] != ']' {\n\t\t\t\tif tmpI == 0 && data[i] == c {\n\t\t\t\t\ttmpI = i\n\t\t\t\t}\n\t\t\t\ti++\n\t\t\t}\n\t\t\ti++\n\t\t\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\n') {\n\t\t\t\ti++\n\t\t\t}\n\t\t\tif i >= len(data) {\n\t\t\t\treturn tmpI\n\t\t\t}\n\t\t\tif data[i] != '[' && data[i] != '(' { // not a link\n\t\t\t\tif tmpI > 0 {\n\t\t\t\t\treturn tmpI\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcc := data[i]\n\t\t\ti++\n\t\t\tfor i < len(data) && data[i] != cc {\n\t\t\t\tif tmpI == 0 && data[i] == c {\n\t\t\t\t\treturn i\n\t\t\t\t}\n\t\t\t\ti++\n\t\t\t}\n\t\t\tif i >= len(data) {\n\t\t\t\treturn tmpI\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t}\n\treturn 0\n}\n\nfunc helperEmphasis(p *Markdown, data []byte, c byte) (int, *Node) {\n\ti := 0\n\n\t// skip one symbol if coming from emph3\n\tif len(data) > 1 && data[0] == c && data[1] == c {\n\t\ti = 1\n\t}\n\n\tfor i < len(data) {\n\t\tlength := helperFindEmphChar(data[i:], c)\n\t\tif length == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\t\ti += length\n\t\tif i >= len(data) {\n\t\t\treturn 0, nil\n\t\t}\n\n\t\tif i+1 < len(data) && data[i+1] == c {\n\t\t\ti++\n\t\t\tcontinue\n\t\t}\n\n\t\tif data[i] == c && !isspace(data[i-1]) {\n\n\t\t\tif p.extensions&NoIntraEmphasis != 0 {\n\t\t\t\tif !(i+1 == len(data) || isspace(data[i+1]) || ispunct(data[i+1])) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\temph := NewNode(Emph)\n\t\t\tp.inline(emph, data[:i])\n\t\t\treturn i + 1, emph\n\t\t}\n\t}\n\n\treturn 0, nil\n}\n\nfunc helperDoubleEmphasis(p *Markdown, data []byte, c byte) (int, *Node) {\n\ti := 0\n\n\tfor i < len(data) {\n\t\tlength := helperFindEmphChar(data[i:], c)\n\t\tif length == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\t\ti += length\n\n\t\tif i+1 < len(data) && data[i] == c && data[i+1] == c && i > 0 && !isspace(data[i-1]) {\n\t\t\tnodeType := Strong\n\t\t\tif c == '~' {\n\t\t\t\tnodeType = Del\n\t\t\t}\n\t\t\tnode := NewNode(nodeType)\n\t\t\tp.inline(node, data[:i])\n\t\t\treturn i + 2, node\n\t\t}\n\t\ti++\n\t}\n\treturn 0, nil\n}\n\nfunc helperTripleEmphasis(p *Markdown, data []byte, offset int, c byte) (int, *Node) {\n\ti := 0\n\torigData := data\n\tdata = data[offset:]\n\n\tfor i < len(data) {\n\t\tlength := helperFindEmphChar(data[i:], c)\n\t\tif length == 0 {\n\t\t\treturn 0, nil\n\t\t}\n\t\ti += length\n\n\t\t// skip whitespace preceded symbols\n\t\tif data[i] != c || isspace(data[i-1]) {\n\t\t\tcontinue\n\t\t}\n\n\t\tswitch {\n\t\tcase i+2 < len(data) && data[i+1] == c && data[i+2] == c:\n\t\t\t// triple symbol found\n\t\t\tstrong := NewNode(Strong)\n\t\t\tem := NewNode(Emph)\n\t\t\tstrong.AppendChild(em)\n\t\t\tp.inline(em, data[:i])\n\t\t\treturn i + 3, strong\n\t\tcase (i+1 < len(data) && data[i+1] == c):\n\t\t\t// double symbol found, hand over to emph1\n\t\t\tlength, node := helperEmphasis(p, origData[offset-2:], c)\n\t\t\tif length == 0 {\n\t\t\t\treturn 0, nil\n\t\t\t}\n\t\t\treturn length - 2, node\n\t\tdefault:\n\t\t\t// single symbol found, hand over to emph2\n\t\t\tlength, node := helperDoubleEmphasis(p, origData[offset-1:], c)\n\t\t\tif length == 0 {\n\t\t\t\treturn 0, nil\n\t\t\t}\n\t\t\treturn length - 1, node\n\t\t}\n\t}\n\treturn 0, nil\n}\n\nfunc text(s []byte) *Node {\n\tnode := NewNode(Text)\n\tnode.Literal = s\n\treturn node\n}\n\nfunc normalizeURI(s []byte) []byte {\n\treturn s // TODO: implement\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/markdown.go",
    "content": "// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n\t\"unicode/utf8\"\n)\n\n//\n// Markdown parsing and processing\n//\n\n// Version string of the package. Appears in the rendered document when\n// CompletePage flag is on.\nconst Version = \"2.0\"\n\n// Extensions is a bitwise or'ed collection of enabled Blackfriday's\n// extensions.\ntype Extensions int\n\n// These are the supported markdown parsing extensions.\n// OR these values together to select multiple extensions.\nconst (\n\tNoExtensions           Extensions = 0\n\tNoIntraEmphasis        Extensions = 1 << iota // Ignore emphasis markers inside words\n\tTables                                        // Render tables\n\tFencedCode                                    // Render fenced code blocks\n\tAutolink                                      // Detect embedded URLs that are not explicitly marked\n\tStrikethrough                                 // Strikethrough text using ~~test~~\n\tLaxHTMLBlocks                                 // Loosen up HTML block parsing rules\n\tSpaceHeadings                                 // Be strict about prefix heading rules\n\tHardLineBreak                                 // Translate newlines into line breaks\n\tTabSizeEight                                  // Expand tabs to eight spaces instead of four\n\tFootnotes                                     // Pandoc-style footnotes\n\tNoEmptyLineBeforeBlock                        // No need to insert an empty line to start a (code, quote, ordered list, unordered list) block\n\tHeadingIDs                                    // specify heading IDs  with {#id}\n\tTitleblock                                    // Titleblock ala pandoc\n\tAutoHeadingIDs                                // Create the heading ID from the text\n\tBackslashLineBreak                            // Translate trailing backslashes into line breaks\n\tDefinitionLists                               // Render definition lists\n\n\tCommonHTMLFlags HTMLFlags = UseXHTML | Smartypants |\n\t\tSmartypantsFractions | SmartypantsDashes | SmartypantsLatexDashes\n\n\tCommonExtensions Extensions = NoIntraEmphasis | Tables | FencedCode |\n\t\tAutolink | Strikethrough | SpaceHeadings | HeadingIDs |\n\t\tBackslashLineBreak | DefinitionLists\n)\n\n// ListType contains bitwise or'ed flags for list and list item objects.\ntype ListType int\n\n// These are the possible flag values for the ListItem renderer.\n// Multiple flag values may be ORed together.\n// These are mostly of interest if you are writing a new output format.\nconst (\n\tListTypeOrdered ListType = 1 << iota\n\tListTypeDefinition\n\tListTypeTerm\n\n\tListItemContainsBlock\n\tListItemBeginningOfList // TODO: figure out if this is of any use now\n\tListItemEndOfList\n)\n\n// CellAlignFlags holds a type of alignment in a table cell.\ntype CellAlignFlags int\n\n// These are the possible flag values for the table cell renderer.\n// Only a single one of these values will be used; they are not ORed together.\n// These are mostly of interest if you are writing a new output format.\nconst (\n\tTableAlignmentLeft CellAlignFlags = 1 << iota\n\tTableAlignmentRight\n\tTableAlignmentCenter = (TableAlignmentLeft | TableAlignmentRight)\n)\n\n// The size of a tab stop.\nconst (\n\tTabSizeDefault = 4\n\tTabSizeDouble  = 8\n)\n\n// blockTags is a set of tags that are recognized as HTML block tags.\n// Any of these can be included in markdown text without special escaping.\nvar blockTags = map[string]struct{}{\n\t\"blockquote\": {},\n\t\"del\":        {},\n\t\"div\":        {},\n\t\"dl\":         {},\n\t\"fieldset\":   {},\n\t\"form\":       {},\n\t\"h1\":         {},\n\t\"h2\":         {},\n\t\"h3\":         {},\n\t\"h4\":         {},\n\t\"h5\":         {},\n\t\"h6\":         {},\n\t\"iframe\":     {},\n\t\"ins\":        {},\n\t\"math\":       {},\n\t\"noscript\":   {},\n\t\"ol\":         {},\n\t\"pre\":        {},\n\t\"p\":          {},\n\t\"script\":     {},\n\t\"style\":      {},\n\t\"table\":      {},\n\t\"ul\":         {},\n\n\t// HTML5\n\t\"address\":    {},\n\t\"article\":    {},\n\t\"aside\":      {},\n\t\"canvas\":     {},\n\t\"figcaption\": {},\n\t\"figure\":     {},\n\t\"footer\":     {},\n\t\"header\":     {},\n\t\"hgroup\":     {},\n\t\"main\":       {},\n\t\"nav\":        {},\n\t\"output\":     {},\n\t\"progress\":   {},\n\t\"section\":    {},\n\t\"video\":      {},\n}\n\n// Renderer is the rendering interface. This is mostly of interest if you are\n// implementing a new rendering format.\n//\n// Only an HTML implementation is provided in this repository, see the README\n// for external implementations.\ntype Renderer interface {\n\t// RenderNode is the main rendering method. It will be called once for\n\t// every leaf node and twice for every non-leaf node (first with\n\t// entering=true, then with entering=false). The method should write its\n\t// rendition of the node to the supplied writer w.\n\tRenderNode(w io.Writer, node *Node, entering bool) WalkStatus\n\n\t// RenderHeader is a method that allows the renderer to produce some\n\t// content preceding the main body of the output document. The header is\n\t// understood in the broad sense here. For example, the default HTML\n\t// renderer will write not only the HTML document preamble, but also the\n\t// table of contents if it was requested.\n\t//\n\t// The method will be passed an entire document tree, in case a particular\n\t// implementation needs to inspect it to produce output.\n\t//\n\t// The output should be written to the supplied writer w. If your\n\t// implementation has no header to write, supply an empty implementation.\n\tRenderHeader(w io.Writer, ast *Node)\n\n\t// RenderFooter is a symmetric counterpart of RenderHeader.\n\tRenderFooter(w io.Writer, ast *Node)\n}\n\n// Callback functions for inline parsing. One such function is defined\n// for each character that triggers a response when parsing inline data.\ntype inlineParser func(p *Markdown, data []byte, offset int) (int, *Node)\n\n// Markdown is a type that holds extensions and the runtime state used by\n// Parse, and the renderer. You can not use it directly, construct it with New.\ntype Markdown struct {\n\trenderer          Renderer\n\treferenceOverride ReferenceOverrideFunc\n\trefs              map[string]*reference\n\tinlineCallback    [256]inlineParser\n\textensions        Extensions\n\tnesting           int\n\tmaxNesting        int\n\tinsideLink        bool\n\n\t// Footnotes need to be ordered as well as available to quickly check for\n\t// presence. If a ref is also a footnote, it's stored both in refs and here\n\t// in notes. Slice is nil if footnotes not enabled.\n\tnotes []*reference\n\n\tdoc                  *Node\n\ttip                  *Node // = doc\n\toldTip               *Node\n\tlastMatchedContainer *Node // = doc\n\tallClosed            bool\n}\n\nfunc (p *Markdown) getRef(refid string) (ref *reference, found bool) {\n\tif p.referenceOverride != nil {\n\t\tr, overridden := p.referenceOverride(refid)\n\t\tif overridden {\n\t\t\tif r == nil {\n\t\t\t\treturn nil, false\n\t\t\t}\n\t\t\treturn &reference{\n\t\t\t\tlink:     []byte(r.Link),\n\t\t\t\ttitle:    []byte(r.Title),\n\t\t\t\tnoteID:   0,\n\t\t\t\thasBlock: false,\n\t\t\t\ttext:     []byte(r.Text)}, true\n\t\t}\n\t}\n\t// refs are case insensitive\n\tref, found = p.refs[strings.ToLower(refid)]\n\treturn ref, found\n}\n\nfunc (p *Markdown) finalize(block *Node) {\n\tabove := block.Parent\n\tblock.open = false\n\tp.tip = above\n}\n\nfunc (p *Markdown) addChild(node NodeType, offset uint32) *Node {\n\treturn p.addExistingChild(NewNode(node), offset)\n}\n\nfunc (p *Markdown) addExistingChild(node *Node, offset uint32) *Node {\n\tfor !p.tip.canContain(node.Type) {\n\t\tp.finalize(p.tip)\n\t}\n\tp.tip.AppendChild(node)\n\tp.tip = node\n\treturn node\n}\n\nfunc (p *Markdown) closeUnmatchedBlocks() {\n\tif !p.allClosed {\n\t\tfor p.oldTip != p.lastMatchedContainer {\n\t\t\tparent := p.oldTip.Parent\n\t\t\tp.finalize(p.oldTip)\n\t\t\tp.oldTip = parent\n\t\t}\n\t\tp.allClosed = true\n\t}\n}\n\n//\n//\n// Public interface\n//\n//\n\n// Reference represents the details of a link.\n// See the documentation in Options for more details on use-case.\ntype Reference struct {\n\t// Link is usually the URL the reference points to.\n\tLink string\n\t// Title is the alternate text describing the link in more detail.\n\tTitle string\n\t// Text is the optional text to override the ref with if the syntax used was\n\t// [refid][]\n\tText string\n}\n\n// ReferenceOverrideFunc is expected to be called with a reference string and\n// return either a valid Reference type that the reference string maps to or\n// nil. If overridden is false, the default reference logic will be executed.\n// See the documentation in Options for more details on use-case.\ntype ReferenceOverrideFunc func(reference string) (ref *Reference, overridden bool)\n\n// New constructs a Markdown processor. You can use the same With* functions as\n// for Run() to customize parser's behavior and the renderer.\nfunc New(opts ...Option) *Markdown {\n\tvar p Markdown\n\tfor _, opt := range opts {\n\t\topt(&p)\n\t}\n\tp.refs = make(map[string]*reference)\n\tp.maxNesting = 16\n\tp.insideLink = false\n\tdocNode := NewNode(Document)\n\tp.doc = docNode\n\tp.tip = docNode\n\tp.oldTip = docNode\n\tp.lastMatchedContainer = docNode\n\tp.allClosed = true\n\t// register inline parsers\n\tp.inlineCallback[' '] = maybeLineBreak\n\tp.inlineCallback['*'] = emphasis\n\tp.inlineCallback['_'] = emphasis\n\tif p.extensions&Strikethrough != 0 {\n\t\tp.inlineCallback['~'] = emphasis\n\t}\n\tp.inlineCallback['`'] = codeSpan\n\tp.inlineCallback['\\n'] = lineBreak\n\tp.inlineCallback['['] = link\n\tp.inlineCallback['<'] = leftAngle\n\tp.inlineCallback['\\\\'] = escape\n\tp.inlineCallback['&'] = entity\n\tp.inlineCallback['!'] = maybeImage\n\tp.inlineCallback['^'] = maybeInlineFootnote\n\tif p.extensions&Autolink != 0 {\n\t\tp.inlineCallback['h'] = maybeAutoLink\n\t\tp.inlineCallback['m'] = maybeAutoLink\n\t\tp.inlineCallback['f'] = maybeAutoLink\n\t\tp.inlineCallback['H'] = maybeAutoLink\n\t\tp.inlineCallback['M'] = maybeAutoLink\n\t\tp.inlineCallback['F'] = maybeAutoLink\n\t}\n\tif p.extensions&Footnotes != 0 {\n\t\tp.notes = make([]*reference, 0)\n\t}\n\treturn &p\n}\n\n// Option customizes the Markdown processor's default behavior.\ntype Option func(*Markdown)\n\n// WithRenderer allows you to override the default renderer.\nfunc WithRenderer(r Renderer) Option {\n\treturn func(p *Markdown) {\n\t\tp.renderer = r\n\t}\n}\n\n// WithExtensions allows you to pick some of the many extensions provided by\n// Blackfriday. You can bitwise OR them.\nfunc WithExtensions(e Extensions) Option {\n\treturn func(p *Markdown) {\n\t\tp.extensions = e\n\t}\n}\n\n// WithNoExtensions turns off all extensions and custom behavior.\nfunc WithNoExtensions() Option {\n\treturn func(p *Markdown) {\n\t\tp.extensions = NoExtensions\n\t\tp.renderer = NewHTMLRenderer(HTMLRendererParameters{\n\t\t\tFlags: HTMLFlagsNone,\n\t\t})\n\t}\n}\n\n// WithRefOverride sets an optional function callback that is called every\n// time a reference is resolved.\n//\n// In Markdown, the link reference syntax can be made to resolve a link to\n// a reference instead of an inline URL, in one of the following ways:\n//\n//  * [link text][refid]\n//  * [refid][]\n//\n// Usually, the refid is defined at the bottom of the Markdown document. If\n// this override function is provided, the refid is passed to the override\n// function first, before consulting the defined refids at the bottom. If\n// the override function indicates an override did not occur, the refids at\n// the bottom will be used to fill in the link details.\nfunc WithRefOverride(o ReferenceOverrideFunc) Option {\n\treturn func(p *Markdown) {\n\t\tp.referenceOverride = o\n\t}\n}\n\n// Run is the main entry point to Blackfriday. It parses and renders a\n// block of markdown-encoded text.\n//\n// The simplest invocation of Run takes one argument, input:\n//     output := Run(input)\n// This will parse the input with CommonExtensions enabled and render it with\n// the default HTMLRenderer (with CommonHTMLFlags).\n//\n// Variadic arguments opts can customize the default behavior. Since Markdown\n// type does not contain exported fields, you can not use it directly. Instead,\n// use the With* functions. For example, this will call the most basic\n// functionality, with no extensions:\n//     output := Run(input, WithNoExtensions())\n//\n// You can use any number of With* arguments, even contradicting ones. They\n// will be applied in order of appearance and the latter will override the\n// former:\n//     output := Run(input, WithNoExtensions(), WithExtensions(exts),\n//         WithRenderer(yourRenderer))\nfunc Run(input []byte, opts ...Option) []byte {\n\tr := NewHTMLRenderer(HTMLRendererParameters{\n\t\tFlags: CommonHTMLFlags,\n\t})\n\toptList := []Option{WithRenderer(r), WithExtensions(CommonExtensions)}\n\toptList = append(optList, opts...)\n\tparser := New(optList...)\n\tast := parser.Parse(input)\n\tvar buf bytes.Buffer\n\tparser.renderer.RenderHeader(&buf, ast)\n\tast.Walk(func(node *Node, entering bool) WalkStatus {\n\t\treturn parser.renderer.RenderNode(&buf, node, entering)\n\t})\n\tparser.renderer.RenderFooter(&buf, ast)\n\treturn buf.Bytes()\n}\n\n// Parse is an entry point to the parsing part of Blackfriday. It takes an\n// input markdown document and produces a syntax tree for its contents. This\n// tree can then be rendered with a default or custom renderer, or\n// analyzed/transformed by the caller to whatever non-standard needs they have.\n// The return value is the root node of the syntax tree.\nfunc (p *Markdown) Parse(input []byte) *Node {\n\tp.block(input)\n\t// Walk the tree and finish up some of unfinished blocks\n\tfor p.tip != nil {\n\t\tp.finalize(p.tip)\n\t}\n\t// Walk the tree again and process inline markdown in each block\n\tp.doc.Walk(func(node *Node, entering bool) WalkStatus {\n\t\tif node.Type == Paragraph || node.Type == Heading || node.Type == TableCell {\n\t\t\tp.inline(node, node.content)\n\t\t\tnode.content = nil\n\t\t}\n\t\treturn GoToNext\n\t})\n\tp.parseRefsToAST()\n\treturn p.doc\n}\n\nfunc (p *Markdown) parseRefsToAST() {\n\tif p.extensions&Footnotes == 0 || len(p.notes) == 0 {\n\t\treturn\n\t}\n\tp.tip = p.doc\n\tblock := p.addBlock(List, nil)\n\tblock.IsFootnotesList = true\n\tblock.ListFlags = ListTypeOrdered\n\tflags := ListItemBeginningOfList\n\t// Note: this loop is intentionally explicit, not range-form. This is\n\t// because the body of the loop will append nested footnotes to p.notes and\n\t// we need to process those late additions. Range form would only walk over\n\t// the fixed initial set.\n\tfor i := 0; i < len(p.notes); i++ {\n\t\tref := p.notes[i]\n\t\tp.addExistingChild(ref.footnote, 0)\n\t\tblock := ref.footnote\n\t\tblock.ListFlags = flags | ListTypeOrdered\n\t\tblock.RefLink = ref.link\n\t\tif ref.hasBlock {\n\t\t\tflags |= ListItemContainsBlock\n\t\t\tp.block(ref.title)\n\t\t} else {\n\t\t\tp.inline(block, ref.title)\n\t\t}\n\t\tflags &^= ListItemBeginningOfList | ListItemContainsBlock\n\t}\n\tabove := block.Parent\n\tfinalizeList(block)\n\tp.tip = above\n\tblock.Walk(func(node *Node, entering bool) WalkStatus {\n\t\tif node.Type == Paragraph || node.Type == Heading {\n\t\t\tp.inline(node, node.content)\n\t\t\tnode.content = nil\n\t\t}\n\t\treturn GoToNext\n\t})\n}\n\n//\n// Link references\n//\n// This section implements support for references that (usually) appear\n// as footnotes in a document, and can be referenced anywhere in the document.\n// The basic format is:\n//\n//    [1]: http://www.google.com/ \"Google\"\n//    [2]: http://www.github.com/ \"Github\"\n//\n// Anywhere in the document, the reference can be linked by referring to its\n// label, i.e., 1 and 2 in this example, as in:\n//\n//    This library is hosted on [Github][2], a git hosting site.\n//\n// Actual footnotes as specified in Pandoc and supported by some other Markdown\n// libraries such as php-markdown are also taken care of. They look like this:\n//\n//    This sentence needs a bit of further explanation.[^note]\n//\n//    [^note]: This is the explanation.\n//\n// Footnotes should be placed at the end of the document in an ordered list.\n// Finally, there are inline footnotes such as:\n//\n//    Inline footnotes^[Also supported.] provide a quick inline explanation,\n//    but are rendered at the bottom of the document.\n//\n\n// reference holds all information necessary for a reference-style links or\n// footnotes.\n//\n// Consider this markdown with reference-style links:\n//\n//     [link][ref]\n//\n//     [ref]: /url/ \"tooltip title\"\n//\n// It will be ultimately converted to this HTML:\n//\n//     <p><a href=\\\"/url/\\\" title=\\\"title\\\">link</a></p>\n//\n// And a reference structure will be populated as follows:\n//\n//     p.refs[\"ref\"] = &reference{\n//         link: \"/url/\",\n//         title: \"tooltip title\",\n//     }\n//\n// Alternatively, reference can contain information about a footnote. Consider\n// this markdown:\n//\n//     Text needing a footnote.[^a]\n//\n//     [^a]: This is the note\n//\n// A reference structure will be populated as follows:\n//\n//     p.refs[\"a\"] = &reference{\n//         link: \"a\",\n//         title: \"This is the note\",\n//         noteID: <some positive int>,\n//     }\n//\n// TODO: As you can see, it begs for splitting into two dedicated structures\n// for refs and for footnotes.\ntype reference struct {\n\tlink     []byte\n\ttitle    []byte\n\tnoteID   int // 0 if not a footnote ref\n\thasBlock bool\n\tfootnote *Node // a link to the Item node within a list of footnotes\n\n\ttext []byte // only gets populated by refOverride feature with Reference.Text\n}\n\nfunc (r *reference) String() string {\n\treturn fmt.Sprintf(\"{link: %q, title: %q, text: %q, noteID: %d, hasBlock: %v}\",\n\t\tr.link, r.title, r.text, r.noteID, r.hasBlock)\n}\n\n// Check whether or not data starts with a reference link.\n// If so, it is parsed and stored in the list of references\n// (in the render struct).\n// Returns the number of bytes to skip to move past it,\n// or zero if the first line is not a reference.\nfunc isReference(p *Markdown, data []byte, tabSize int) int {\n\t// up to 3 optional leading spaces\n\tif len(data) < 4 {\n\t\treturn 0\n\t}\n\ti := 0\n\tfor i < 3 && data[i] == ' ' {\n\t\ti++\n\t}\n\n\tnoteID := 0\n\n\t// id part: anything but a newline between brackets\n\tif data[i] != '[' {\n\t\treturn 0\n\t}\n\ti++\n\tif p.extensions&Footnotes != 0 {\n\t\tif i < len(data) && data[i] == '^' {\n\t\t\t// we can set it to anything here because the proper noteIds will\n\t\t\t// be assigned later during the second pass. It just has to be != 0\n\t\t\tnoteID = 1\n\t\t\ti++\n\t\t}\n\t}\n\tidOffset := i\n\tfor i < len(data) && data[i] != '\\n' && data[i] != '\\r' && data[i] != ']' {\n\t\ti++\n\t}\n\tif i >= len(data) || data[i] != ']' {\n\t\treturn 0\n\t}\n\tidEnd := i\n\t// footnotes can have empty ID, like this: [^], but a reference can not be\n\t// empty like this: []. Break early if it's not a footnote and there's no ID\n\tif noteID == 0 && idOffset == idEnd {\n\t\treturn 0\n\t}\n\t// spacer: colon (space | tab)* newline? (space | tab)*\n\ti++\n\tif i >= len(data) || data[i] != ':' {\n\t\treturn 0\n\t}\n\ti++\n\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\t') {\n\t\ti++\n\t}\n\tif i < len(data) && (data[i] == '\\n' || data[i] == '\\r') {\n\t\ti++\n\t\tif i < len(data) && data[i] == '\\n' && data[i-1] == '\\r' {\n\t\t\ti++\n\t\t}\n\t}\n\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\t') {\n\t\ti++\n\t}\n\tif i >= len(data) {\n\t\treturn 0\n\t}\n\n\tvar (\n\t\tlinkOffset, linkEnd   int\n\t\ttitleOffset, titleEnd int\n\t\tlineEnd               int\n\t\traw                   []byte\n\t\thasBlock              bool\n\t)\n\n\tif p.extensions&Footnotes != 0 && noteID != 0 {\n\t\tlinkOffset, linkEnd, raw, hasBlock = scanFootnote(p, data, i, tabSize)\n\t\tlineEnd = linkEnd\n\t} else {\n\t\tlinkOffset, linkEnd, titleOffset, titleEnd, lineEnd = scanLinkRef(p, data, i)\n\t}\n\tif lineEnd == 0 {\n\t\treturn 0\n\t}\n\n\t// a valid ref has been found\n\n\tref := &reference{\n\t\tnoteID:   noteID,\n\t\thasBlock: hasBlock,\n\t}\n\n\tif noteID > 0 {\n\t\t// reusing the link field for the id since footnotes don't have links\n\t\tref.link = data[idOffset:idEnd]\n\t\t// if footnote, it's not really a title, it's the contained text\n\t\tref.title = raw\n\t} else {\n\t\tref.link = data[linkOffset:linkEnd]\n\t\tref.title = data[titleOffset:titleEnd]\n\t}\n\n\t// id matches are case-insensitive\n\tid := string(bytes.ToLower(data[idOffset:idEnd]))\n\n\tp.refs[id] = ref\n\n\treturn lineEnd\n}\n\nfunc scanLinkRef(p *Markdown, data []byte, i int) (linkOffset, linkEnd, titleOffset, titleEnd, lineEnd int) {\n\t// link: whitespace-free sequence, optionally between angle brackets\n\tif data[i] == '<' {\n\t\ti++\n\t}\n\tlinkOffset = i\n\tfor i < len(data) && data[i] != ' ' && data[i] != '\\t' && data[i] != '\\n' && data[i] != '\\r' {\n\t\ti++\n\t}\n\tlinkEnd = i\n\tif data[linkOffset] == '<' && data[linkEnd-1] == '>' {\n\t\tlinkOffset++\n\t\tlinkEnd--\n\t}\n\n\t// optional spacer: (space | tab)* (newline | '\\'' | '\"' | '(' )\n\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\t') {\n\t\ti++\n\t}\n\tif i < len(data) && data[i] != '\\n' && data[i] != '\\r' && data[i] != '\\'' && data[i] != '\"' && data[i] != '(' {\n\t\treturn\n\t}\n\n\t// compute end-of-line\n\tif i >= len(data) || data[i] == '\\r' || data[i] == '\\n' {\n\t\tlineEnd = i\n\t}\n\tif i+1 < len(data) && data[i] == '\\r' && data[i+1] == '\\n' {\n\t\tlineEnd++\n\t}\n\n\t// optional (space|tab)* spacer after a newline\n\tif lineEnd > 0 {\n\t\ti = lineEnd + 1\n\t\tfor i < len(data) && (data[i] == ' ' || data[i] == '\\t') {\n\t\t\ti++\n\t\t}\n\t}\n\n\t// optional title: any non-newline sequence enclosed in '\"() alone on its line\n\tif i+1 < len(data) && (data[i] == '\\'' || data[i] == '\"' || data[i] == '(') {\n\t\ti++\n\t\ttitleOffset = i\n\n\t\t// look for EOL\n\t\tfor i < len(data) && data[i] != '\\n' && data[i] != '\\r' {\n\t\t\ti++\n\t\t}\n\t\tif i+1 < len(data) && data[i] == '\\n' && data[i+1] == '\\r' {\n\t\t\ttitleEnd = i + 1\n\t\t} else {\n\t\t\ttitleEnd = i\n\t\t}\n\n\t\t// step back\n\t\ti--\n\t\tfor i > titleOffset && (data[i] == ' ' || data[i] == '\\t') {\n\t\t\ti--\n\t\t}\n\t\tif i > titleOffset && (data[i] == '\\'' || data[i] == '\"' || data[i] == ')') {\n\t\t\tlineEnd = titleEnd\n\t\t\ttitleEnd = i\n\t\t}\n\t}\n\n\treturn\n}\n\n// The first bit of this logic is the same as Parser.listItem, but the rest\n// is much simpler. This function simply finds the entire block and shifts it\n// over by one tab if it is indeed a block (just returns the line if it's not).\n// blockEnd is the end of the section in the input buffer, and contents is the\n// extracted text that was shifted over one tab. It will need to be rendered at\n// the end of the document.\nfunc scanFootnote(p *Markdown, data []byte, i, indentSize int) (blockStart, blockEnd int, contents []byte, hasBlock bool) {\n\tif i == 0 || len(data) == 0 {\n\t\treturn\n\t}\n\n\t// skip leading whitespace on first line\n\tfor i < len(data) && data[i] == ' ' {\n\t\ti++\n\t}\n\n\tblockStart = i\n\n\t// find the end of the line\n\tblockEnd = i\n\tfor i < len(data) && data[i-1] != '\\n' {\n\t\ti++\n\t}\n\n\t// get working buffer\n\tvar raw bytes.Buffer\n\n\t// put the first line into the working buffer\n\traw.Write(data[blockEnd:i])\n\tblockEnd = i\n\n\t// process the following lines\n\tcontainsBlankLine := false\n\ngatherLines:\n\tfor blockEnd < len(data) {\n\t\ti++\n\n\t\t// find the end of this line\n\t\tfor i < len(data) && data[i-1] != '\\n' {\n\t\t\ti++\n\t\t}\n\n\t\t// if it is an empty line, guess that it is part of this item\n\t\t// and move on to the next line\n\t\tif p.isEmpty(data[blockEnd:i]) > 0 {\n\t\t\tcontainsBlankLine = true\n\t\t\tblockEnd = i\n\t\t\tcontinue\n\t\t}\n\n\t\tn := 0\n\t\tif n = isIndented(data[blockEnd:i], indentSize); n == 0 {\n\t\t\t// this is the end of the block.\n\t\t\t// we don't want to include this last line in the index.\n\t\t\tbreak gatherLines\n\t\t}\n\n\t\t// if there were blank lines before this one, insert a new one now\n\t\tif containsBlankLine {\n\t\t\traw.WriteByte('\\n')\n\t\t\tcontainsBlankLine = false\n\t\t}\n\n\t\t// get rid of that first tab, write to buffer\n\t\traw.Write(data[blockEnd+n : i])\n\t\thasBlock = true\n\n\t\tblockEnd = i\n\t}\n\n\tif data[blockEnd-1] != '\\n' {\n\t\traw.WriteByte('\\n')\n\t}\n\n\tcontents = raw.Bytes()\n\n\treturn\n}\n\n//\n//\n// Miscellaneous helper functions\n//\n//\n\n// Test if a character is a punctuation symbol.\n// Taken from a private function in regexp in the stdlib.\nfunc ispunct(c byte) bool {\n\tfor _, r := range []byte(\"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\") {\n\t\tif c == r {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// Test if a character is a whitespace character.\nfunc isspace(c byte) bool {\n\treturn ishorizontalspace(c) || isverticalspace(c)\n}\n\n// Test if a character is a horizontal whitespace character.\nfunc ishorizontalspace(c byte) bool {\n\treturn c == ' ' || c == '\\t'\n}\n\n// Test if a character is a vertical character.\nfunc isverticalspace(c byte) bool {\n\treturn c == '\\n' || c == '\\r' || c == '\\f' || c == '\\v'\n}\n\n// Test if a character is letter.\nfunc isletter(c byte) bool {\n\treturn (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')\n}\n\n// Test if a character is a letter or a digit.\n// TODO: check when this is looking for ASCII alnum and when it should use unicode\nfunc isalnum(c byte) bool {\n\treturn (c >= '0' && c <= '9') || isletter(c)\n}\n\n// Replace tab characters with spaces, aligning to the next TAB_SIZE column.\n// always ends output with a newline\nfunc expandTabs(out *bytes.Buffer, line []byte, tabSize int) {\n\t// first, check for common cases: no tabs, or only tabs at beginning of line\n\ti, prefix := 0, 0\n\tslowcase := false\n\tfor i = 0; i < len(line); i++ {\n\t\tif line[i] == '\\t' {\n\t\t\tif prefix == i {\n\t\t\t\tprefix++\n\t\t\t} else {\n\t\t\t\tslowcase = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// no need to decode runes if all tabs are at the beginning of the line\n\tif !slowcase {\n\t\tfor i = 0; i < prefix*tabSize; i++ {\n\t\t\tout.WriteByte(' ')\n\t\t}\n\t\tout.Write(line[prefix:])\n\t\treturn\n\t}\n\n\t// the slow case: we need to count runes to figure out how\n\t// many spaces to insert for each tab\n\tcolumn := 0\n\ti = 0\n\tfor i < len(line) {\n\t\tstart := i\n\t\tfor i < len(line) && line[i] != '\\t' {\n\t\t\t_, size := utf8.DecodeRune(line[i:])\n\t\t\ti += size\n\t\t\tcolumn++\n\t\t}\n\n\t\tif i > start {\n\t\t\tout.Write(line[start:i])\n\t\t}\n\n\t\tif i >= len(line) {\n\t\t\tbreak\n\t\t}\n\n\t\tfor {\n\t\t\tout.WriteByte(' ')\n\t\t\tcolumn++\n\t\t\tif column%tabSize == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\ti++\n\t}\n}\n\n// Find if a line counts as indented or not.\n// Returns number of characters the indent is (0 = not indented).\nfunc isIndented(data []byte, indentSize int) int {\n\tif len(data) == 0 {\n\t\treturn 0\n\t}\n\tif data[0] == '\\t' {\n\t\treturn 1\n\t}\n\tif len(data) < indentSize {\n\t\treturn 0\n\t}\n\tfor i := 0; i < indentSize; i++ {\n\t\tif data[i] != ' ' {\n\t\t\treturn 0\n\t\t}\n\t}\n\treturn indentSize\n}\n\n// Create a url-safe slug for fragments\nfunc slugify(in []byte) []byte {\n\tif len(in) == 0 {\n\t\treturn in\n\t}\n\tout := make([]byte, 0, len(in))\n\tsym := false\n\n\tfor _, ch := range in {\n\t\tif isalnum(ch) {\n\t\t\tsym = false\n\t\t\tout = append(out, ch)\n\t\t} else if sym {\n\t\t\tcontinue\n\t\t} else {\n\t\t\tout = append(out, '-')\n\t\t\tsym = true\n\t\t}\n\t}\n\tvar a, b int\n\tvar ch byte\n\tfor a, ch = range out {\n\t\tif ch != '-' {\n\t\t\tbreak\n\t\t}\n\t}\n\tfor b = len(out) - 1; b > 0; b-- {\n\t\tif out[b] != '-' {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn out[a : b+1]\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/node.go",
    "content": "package blackfriday\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// NodeType specifies a type of a single node of a syntax tree. Usually one\n// node (and its type) corresponds to a single markdown feature, e.g. emphasis\n// or code block.\ntype NodeType int\n\n// Constants for identifying different types of nodes. See NodeType.\nconst (\n\tDocument NodeType = iota\n\tBlockQuote\n\tList\n\tItem\n\tParagraph\n\tHeading\n\tHorizontalRule\n\tEmph\n\tStrong\n\tDel\n\tLink\n\tImage\n\tText\n\tHTMLBlock\n\tCodeBlock\n\tSoftbreak\n\tHardbreak\n\tCode\n\tHTMLSpan\n\tTable\n\tTableCell\n\tTableHead\n\tTableBody\n\tTableRow\n)\n\nvar nodeTypeNames = []string{\n\tDocument:       \"Document\",\n\tBlockQuote:     \"BlockQuote\",\n\tList:           \"List\",\n\tItem:           \"Item\",\n\tParagraph:      \"Paragraph\",\n\tHeading:        \"Heading\",\n\tHorizontalRule: \"HorizontalRule\",\n\tEmph:           \"Emph\",\n\tStrong:         \"Strong\",\n\tDel:            \"Del\",\n\tLink:           \"Link\",\n\tImage:          \"Image\",\n\tText:           \"Text\",\n\tHTMLBlock:      \"HTMLBlock\",\n\tCodeBlock:      \"CodeBlock\",\n\tSoftbreak:      \"Softbreak\",\n\tHardbreak:      \"Hardbreak\",\n\tCode:           \"Code\",\n\tHTMLSpan:       \"HTMLSpan\",\n\tTable:          \"Table\",\n\tTableCell:      \"TableCell\",\n\tTableHead:      \"TableHead\",\n\tTableBody:      \"TableBody\",\n\tTableRow:       \"TableRow\",\n}\n\nfunc (t NodeType) String() string {\n\treturn nodeTypeNames[t]\n}\n\n// ListData contains fields relevant to a List and Item node type.\ntype ListData struct {\n\tListFlags       ListType\n\tTight           bool   // Skip <p>s around list item data if true\n\tBulletChar      byte   // '*', '+' or '-' in bullet lists\n\tDelimiter       byte   // '.' or ')' after the number in ordered lists\n\tRefLink         []byte // If not nil, turns this list item into a footnote item and triggers different rendering\n\tIsFootnotesList bool   // This is a list of footnotes\n}\n\n// LinkData contains fields relevant to a Link node type.\ntype LinkData struct {\n\tDestination []byte // Destination is what goes into a href\n\tTitle       []byte // Title is the tooltip thing that goes in a title attribute\n\tNoteID      int    // NoteID contains a serial number of a footnote, zero if it's not a footnote\n\tFootnote    *Node  // If it's a footnote, this is a direct link to the footnote Node. Otherwise nil.\n}\n\n// CodeBlockData contains fields relevant to a CodeBlock node type.\ntype CodeBlockData struct {\n\tIsFenced    bool   // Specifies whether it's a fenced code block or an indented one\n\tInfo        []byte // This holds the info string\n\tFenceChar   byte\n\tFenceLength int\n\tFenceOffset int\n}\n\n// TableCellData contains fields relevant to a TableCell node type.\ntype TableCellData struct {\n\tIsHeader bool           // This tells if it's under the header row\n\tAlign    CellAlignFlags // This holds the value for align attribute\n}\n\n// HeadingData contains fields relevant to a Heading node type.\ntype HeadingData struct {\n\tLevel        int    // This holds the heading level number\n\tHeadingID    string // This might hold heading ID, if present\n\tIsTitleblock bool   // Specifies whether it's a title block\n}\n\n// Node is a single element in the abstract syntax tree of the parsed document.\n// It holds connections to the structurally neighboring nodes and, for certain\n// types of nodes, additional information that might be needed when rendering.\ntype Node struct {\n\tType       NodeType // Determines the type of the node\n\tParent     *Node    // Points to the parent\n\tFirstChild *Node    // Points to the first child, if any\n\tLastChild  *Node    // Points to the last child, if any\n\tPrev       *Node    // Previous sibling; nil if it's the first child\n\tNext       *Node    // Next sibling; nil if it's the last child\n\n\tLiteral []byte // Text contents of the leaf nodes\n\n\tHeadingData   // Populated if Type is Heading\n\tListData      // Populated if Type is List\n\tCodeBlockData // Populated if Type is CodeBlock\n\tLinkData      // Populated if Type is Link\n\tTableCellData // Populated if Type is TableCell\n\n\tcontent []byte // Markdown content of the block nodes\n\topen    bool   // Specifies an open block node that has not been finished to process yet\n}\n\n// NewNode allocates a node of a specified type.\nfunc NewNode(typ NodeType) *Node {\n\treturn &Node{\n\t\tType: typ,\n\t\topen: true,\n\t}\n}\n\nfunc (n *Node) String() string {\n\tellipsis := \"\"\n\tsnippet := n.Literal\n\tif len(snippet) > 16 {\n\t\tsnippet = snippet[:16]\n\t\tellipsis = \"...\"\n\t}\n\treturn fmt.Sprintf(\"%s: '%s%s'\", n.Type, snippet, ellipsis)\n}\n\n// Unlink removes node 'n' from the tree.\n// It panics if the node is nil.\nfunc (n *Node) Unlink() {\n\tif n.Prev != nil {\n\t\tn.Prev.Next = n.Next\n\t} else if n.Parent != nil {\n\t\tn.Parent.FirstChild = n.Next\n\t}\n\tif n.Next != nil {\n\t\tn.Next.Prev = n.Prev\n\t} else if n.Parent != nil {\n\t\tn.Parent.LastChild = n.Prev\n\t}\n\tn.Parent = nil\n\tn.Next = nil\n\tn.Prev = nil\n}\n\n// AppendChild adds a node 'child' as a child of 'n'.\n// It panics if either node is nil.\nfunc (n *Node) AppendChild(child *Node) {\n\tchild.Unlink()\n\tchild.Parent = n\n\tif n.LastChild != nil {\n\t\tn.LastChild.Next = child\n\t\tchild.Prev = n.LastChild\n\t\tn.LastChild = child\n\t} else {\n\t\tn.FirstChild = child\n\t\tn.LastChild = child\n\t}\n}\n\n// InsertBefore inserts 'sibling' immediately before 'n'.\n// It panics if either node is nil.\nfunc (n *Node) InsertBefore(sibling *Node) {\n\tsibling.Unlink()\n\tsibling.Prev = n.Prev\n\tif sibling.Prev != nil {\n\t\tsibling.Prev.Next = sibling\n\t}\n\tsibling.Next = n\n\tn.Prev = sibling\n\tsibling.Parent = n.Parent\n\tif sibling.Prev == nil {\n\t\tsibling.Parent.FirstChild = sibling\n\t}\n}\n\n// IsContainer returns true if 'n' can contain children.\nfunc (n *Node) IsContainer() bool {\n\tswitch n.Type {\n\tcase Document:\n\t\tfallthrough\n\tcase BlockQuote:\n\t\tfallthrough\n\tcase List:\n\t\tfallthrough\n\tcase Item:\n\t\tfallthrough\n\tcase Paragraph:\n\t\tfallthrough\n\tcase Heading:\n\t\tfallthrough\n\tcase Emph:\n\t\tfallthrough\n\tcase Strong:\n\t\tfallthrough\n\tcase Del:\n\t\tfallthrough\n\tcase Link:\n\t\tfallthrough\n\tcase Image:\n\t\tfallthrough\n\tcase Table:\n\t\tfallthrough\n\tcase TableHead:\n\t\tfallthrough\n\tcase TableBody:\n\t\tfallthrough\n\tcase TableRow:\n\t\tfallthrough\n\tcase TableCell:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\n// IsLeaf returns true if 'n' is a leaf node.\nfunc (n *Node) IsLeaf() bool {\n\treturn !n.IsContainer()\n}\n\nfunc (n *Node) canContain(t NodeType) bool {\n\tif n.Type == List {\n\t\treturn t == Item\n\t}\n\tif n.Type == Document || n.Type == BlockQuote || n.Type == Item {\n\t\treturn t != Item\n\t}\n\tif n.Type == Table {\n\t\treturn t == TableHead || t == TableBody\n\t}\n\tif n.Type == TableHead || n.Type == TableBody {\n\t\treturn t == TableRow\n\t}\n\tif n.Type == TableRow {\n\t\treturn t == TableCell\n\t}\n\treturn false\n}\n\n// WalkStatus allows NodeVisitor to have some control over the tree traversal.\n// It is returned from NodeVisitor and different values allow Node.Walk to\n// decide which node to go to next.\ntype WalkStatus int\n\nconst (\n\t// GoToNext is the default traversal of every node.\n\tGoToNext WalkStatus = iota\n\t// SkipChildren tells walker to skip all children of current node.\n\tSkipChildren\n\t// Terminate tells walker to terminate the traversal.\n\tTerminate\n)\n\n// NodeVisitor is a callback to be called when traversing the syntax tree.\n// Called twice for every node: once with entering=true when the branch is\n// first visited, then with entering=false after all the children are done.\ntype NodeVisitor func(node *Node, entering bool) WalkStatus\n\n// Walk is a convenience method that instantiates a walker and starts a\n// traversal of subtree rooted at n.\nfunc (n *Node) Walk(visitor NodeVisitor) {\n\tw := newNodeWalker(n)\n\tfor w.current != nil {\n\t\tstatus := visitor(w.current, w.entering)\n\t\tswitch status {\n\t\tcase GoToNext:\n\t\t\tw.next()\n\t\tcase SkipChildren:\n\t\t\tw.entering = false\n\t\t\tw.next()\n\t\tcase Terminate:\n\t\t\treturn\n\t\t}\n\t}\n}\n\ntype nodeWalker struct {\n\tcurrent  *Node\n\troot     *Node\n\tentering bool\n}\n\nfunc newNodeWalker(root *Node) *nodeWalker {\n\treturn &nodeWalker{\n\t\tcurrent:  root,\n\t\troot:     root,\n\t\tentering: true,\n\t}\n}\n\nfunc (nw *nodeWalker) next() {\n\tif (!nw.current.IsContainer() || !nw.entering) && nw.current == nw.root {\n\t\tnw.current = nil\n\t\treturn\n\t}\n\tif nw.entering && nw.current.IsContainer() {\n\t\tif nw.current.FirstChild != nil {\n\t\t\tnw.current = nw.current.FirstChild\n\t\t\tnw.entering = true\n\t\t} else {\n\t\t\tnw.entering = false\n\t\t}\n\t} else if nw.current.Next == nil {\n\t\tnw.current = nw.current.Parent\n\t\tnw.entering = false\n\t} else {\n\t\tnw.current = nw.current.Next\n\t\tnw.entering = true\n\t}\n}\n\nfunc dump(ast *Node) {\n\tfmt.Println(dumpString(ast))\n}\n\nfunc dumpR(ast *Node, depth int) string {\n\tif ast == nil {\n\t\treturn \"\"\n\t}\n\tindent := bytes.Repeat([]byte(\"\\t\"), depth)\n\tcontent := ast.Literal\n\tif content == nil {\n\t\tcontent = ast.content\n\t}\n\tresult := fmt.Sprintf(\"%s%s(%q)\\n\", indent, ast.Type, content)\n\tfor n := ast.FirstChild; n != nil; n = n.Next {\n\t\tresult += dumpR(n, depth+1)\n\t}\n\treturn result\n}\n\nfunc dumpString(ast *Node) string {\n\treturn dumpR(ast, 0)\n}\n"
  },
  {
    "path": "vendor/github.com/russross/blackfriday/v2/smartypants.go",
    "content": "//\n// Blackfriday Markdown Processor\n// Available at http://github.com/russross/blackfriday\n//\n// Copyright © 2011 Russ Ross <russ@russross.com>.\n// Distributed under the Simplified BSD License.\n// See README.md for details.\n//\n\n//\n//\n// SmartyPants rendering\n//\n//\n\npackage blackfriday\n\nimport (\n\t\"bytes\"\n\t\"io\"\n)\n\n// SPRenderer is a struct containing state of a Smartypants renderer.\ntype SPRenderer struct {\n\tinSingleQuote bool\n\tinDoubleQuote bool\n\tcallbacks     [256]smartCallback\n}\n\nfunc wordBoundary(c byte) bool {\n\treturn c == 0 || isspace(c) || ispunct(c)\n}\n\nfunc tolower(c byte) byte {\n\tif c >= 'A' && c <= 'Z' {\n\t\treturn c - 'A' + 'a'\n\t}\n\treturn c\n}\n\nfunc isdigit(c byte) bool {\n\treturn c >= '0' && c <= '9'\n}\n\nfunc smartQuoteHelper(out *bytes.Buffer, previousChar byte, nextChar byte, quote byte, isOpen *bool, addNBSP bool) bool {\n\t// edge of the buffer is likely to be a tag that we don't get to see,\n\t// so we treat it like text sometimes\n\n\t// enumerate all sixteen possibilities for (previousChar, nextChar)\n\t// each can be one of {0, space, punct, other}\n\tswitch {\n\tcase previousChar == 0 && nextChar == 0:\n\t\t// context is not any help here, so toggle\n\t\t*isOpen = !*isOpen\n\tcase isspace(previousChar) && nextChar == 0:\n\t\t// [ \"] might be [ \"<code>foo...]\n\t\t*isOpen = true\n\tcase ispunct(previousChar) && nextChar == 0:\n\t\t// [!\"] hmm... could be [Run!\"] or [(\"<code>...]\n\t\t*isOpen = false\n\tcase /* isnormal(previousChar) && */ nextChar == 0:\n\t\t// [a\"] is probably a close\n\t\t*isOpen = false\n\tcase previousChar == 0 && isspace(nextChar):\n\t\t// [\" ] might be [...foo</code>\" ]\n\t\t*isOpen = false\n\tcase isspace(previousChar) && isspace(nextChar):\n\t\t// [ \" ] context is not any help here, so toggle\n\t\t*isOpen = !*isOpen\n\tcase ispunct(previousChar) && isspace(nextChar):\n\t\t// [!\" ] is probably a close\n\t\t*isOpen = false\n\tcase /* isnormal(previousChar) && */ isspace(nextChar):\n\t\t// [a\" ] this is one of the easy cases\n\t\t*isOpen = false\n\tcase previousChar == 0 && ispunct(nextChar):\n\t\t// [\"!] hmm... could be [\"$1.95] or [</code>\"!...]\n\t\t*isOpen = false\n\tcase isspace(previousChar) && ispunct(nextChar):\n\t\t// [ \"!] looks more like [ \"$1.95]\n\t\t*isOpen = true\n\tcase ispunct(previousChar) && ispunct(nextChar):\n\t\t// [!\"!] context is not any help here, so toggle\n\t\t*isOpen = !*isOpen\n\tcase /* isnormal(previousChar) && */ ispunct(nextChar):\n\t\t// [a\"!] is probably a close\n\t\t*isOpen = false\n\tcase previousChar == 0 /* && isnormal(nextChar) */ :\n\t\t// [\"a] is probably an open\n\t\t*isOpen = true\n\tcase isspace(previousChar) /* && isnormal(nextChar) */ :\n\t\t// [ \"a] this is one of the easy cases\n\t\t*isOpen = true\n\tcase ispunct(previousChar) /* && isnormal(nextChar) */ :\n\t\t// [!\"a] is probably an open\n\t\t*isOpen = true\n\tdefault:\n\t\t// [a'b] maybe a contraction?\n\t\t*isOpen = false\n\t}\n\n\t// Note that with the limited lookahead, this non-breaking\n\t// space will also be appended to single double quotes.\n\tif addNBSP && !*isOpen {\n\t\tout.WriteString(\"&nbsp;\")\n\t}\n\n\tout.WriteByte('&')\n\tif *isOpen {\n\t\tout.WriteByte('l')\n\t} else {\n\t\tout.WriteByte('r')\n\t}\n\tout.WriteByte(quote)\n\tout.WriteString(\"quo;\")\n\n\tif addNBSP && *isOpen {\n\t\tout.WriteString(\"&nbsp;\")\n\t}\n\n\treturn true\n}\n\nfunc (r *SPRenderer) smartSingleQuote(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 2 {\n\t\tt1 := tolower(text[1])\n\n\t\tif t1 == '\\'' {\n\t\t\tnextChar := byte(0)\n\t\t\tif len(text) >= 3 {\n\t\t\t\tnextChar = text[2]\n\t\t\t}\n\t\t\tif smartQuoteHelper(out, previousChar, nextChar, 'd', &r.inDoubleQuote, false) {\n\t\t\t\treturn 1\n\t\t\t}\n\t\t}\n\n\t\tif (t1 == 's' || t1 == 't' || t1 == 'm' || t1 == 'd') && (len(text) < 3 || wordBoundary(text[2])) {\n\t\t\tout.WriteString(\"&rsquo;\")\n\t\t\treturn 0\n\t\t}\n\n\t\tif len(text) >= 3 {\n\t\t\tt2 := tolower(text[2])\n\n\t\t\tif ((t1 == 'r' && t2 == 'e') || (t1 == 'l' && t2 == 'l') || (t1 == 'v' && t2 == 'e')) &&\n\t\t\t\t(len(text) < 4 || wordBoundary(text[3])) {\n\t\t\t\tout.WriteString(\"&rsquo;\")\n\t\t\t\treturn 0\n\t\t\t}\n\t\t}\n\t}\n\n\tnextChar := byte(0)\n\tif len(text) > 1 {\n\t\tnextChar = text[1]\n\t}\n\tif smartQuoteHelper(out, previousChar, nextChar, 's', &r.inSingleQuote, false) {\n\t\treturn 0\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartParens(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 3 {\n\t\tt1 := tolower(text[1])\n\t\tt2 := tolower(text[2])\n\n\t\tif t1 == 'c' && t2 == ')' {\n\t\t\tout.WriteString(\"&copy;\")\n\t\t\treturn 2\n\t\t}\n\n\t\tif t1 == 'r' && t2 == ')' {\n\t\t\tout.WriteString(\"&reg;\")\n\t\t\treturn 2\n\t\t}\n\n\t\tif len(text) >= 4 && t1 == 't' && t2 == 'm' && text[3] == ')' {\n\t\t\tout.WriteString(\"&trade;\")\n\t\t\treturn 3\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartDash(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 2 {\n\t\tif text[1] == '-' {\n\t\t\tout.WriteString(\"&mdash;\")\n\t\t\treturn 1\n\t\t}\n\n\t\tif wordBoundary(previousChar) && wordBoundary(text[1]) {\n\t\t\tout.WriteString(\"&ndash;\")\n\t\t\treturn 0\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartDashLatex(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 3 && text[1] == '-' && text[2] == '-' {\n\t\tout.WriteString(\"&mdash;\")\n\t\treturn 2\n\t}\n\tif len(text) >= 2 && text[1] == '-' {\n\t\tout.WriteString(\"&ndash;\")\n\t\treturn 1\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartAmpVariant(out *bytes.Buffer, previousChar byte, text []byte, quote byte, addNBSP bool) int {\n\tif bytes.HasPrefix(text, []byte(\"&quot;\")) {\n\t\tnextChar := byte(0)\n\t\tif len(text) >= 7 {\n\t\t\tnextChar = text[6]\n\t\t}\n\t\tif smartQuoteHelper(out, previousChar, nextChar, quote, &r.inDoubleQuote, addNBSP) {\n\t\t\treturn 5\n\t\t}\n\t}\n\n\tif bytes.HasPrefix(text, []byte(\"&#0;\")) {\n\t\treturn 3\n\t}\n\n\tout.WriteByte('&')\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartAmp(angledQuotes, addNBSP bool) func(*bytes.Buffer, byte, []byte) int {\n\tvar quote byte = 'd'\n\tif angledQuotes {\n\t\tquote = 'a'\n\t}\n\n\treturn func(out *bytes.Buffer, previousChar byte, text []byte) int {\n\t\treturn r.smartAmpVariant(out, previousChar, text, quote, addNBSP)\n\t}\n}\n\nfunc (r *SPRenderer) smartPeriod(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 3 && text[1] == '.' && text[2] == '.' {\n\t\tout.WriteString(\"&hellip;\")\n\t\treturn 2\n\t}\n\n\tif len(text) >= 5 && text[1] == ' ' && text[2] == '.' && text[3] == ' ' && text[4] == '.' {\n\t\tout.WriteString(\"&hellip;\")\n\t\treturn 4\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartBacktick(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif len(text) >= 2 && text[1] == '`' {\n\t\tnextChar := byte(0)\n\t\tif len(text) >= 3 {\n\t\t\tnextChar = text[2]\n\t\t}\n\t\tif smartQuoteHelper(out, previousChar, nextChar, 'd', &r.inDoubleQuote, false) {\n\t\t\treturn 1\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartNumberGeneric(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif wordBoundary(previousChar) && previousChar != '/' && len(text) >= 3 {\n\t\t// is it of the form digits/digits(word boundary)?, i.e., \\d+/\\d+\\b\n\t\t// note: check for regular slash (/) or fraction slash (⁄, 0x2044, or 0xe2 81 84 in utf-8)\n\t\t//       and avoid changing dates like 1/23/2005 into fractions.\n\t\tnumEnd := 0\n\t\tfor len(text) > numEnd && isdigit(text[numEnd]) {\n\t\t\tnumEnd++\n\t\t}\n\t\tif numEnd == 0 {\n\t\t\tout.WriteByte(text[0])\n\t\t\treturn 0\n\t\t}\n\t\tdenStart := numEnd + 1\n\t\tif len(text) > numEnd+3 && text[numEnd] == 0xe2 && text[numEnd+1] == 0x81 && text[numEnd+2] == 0x84 {\n\t\t\tdenStart = numEnd + 3\n\t\t} else if len(text) < numEnd+2 || text[numEnd] != '/' {\n\t\t\tout.WriteByte(text[0])\n\t\t\treturn 0\n\t\t}\n\t\tdenEnd := denStart\n\t\tfor len(text) > denEnd && isdigit(text[denEnd]) {\n\t\t\tdenEnd++\n\t\t}\n\t\tif denEnd == denStart {\n\t\t\tout.WriteByte(text[0])\n\t\t\treturn 0\n\t\t}\n\t\tif len(text) == denEnd || wordBoundary(text[denEnd]) && text[denEnd] != '/' {\n\t\t\tout.WriteString(\"<sup>\")\n\t\t\tout.Write(text[:numEnd])\n\t\t\tout.WriteString(\"</sup>&frasl;<sub>\")\n\t\t\tout.Write(text[denStart:denEnd])\n\t\t\tout.WriteString(\"</sub>\")\n\t\t\treturn denEnd - 1\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartNumber(out *bytes.Buffer, previousChar byte, text []byte) int {\n\tif wordBoundary(previousChar) && previousChar != '/' && len(text) >= 3 {\n\t\tif text[0] == '1' && text[1] == '/' && text[2] == '2' {\n\t\t\tif len(text) < 4 || wordBoundary(text[3]) && text[3] != '/' {\n\t\t\t\tout.WriteString(\"&frac12;\")\n\t\t\t\treturn 2\n\t\t\t}\n\t\t}\n\n\t\tif text[0] == '1' && text[1] == '/' && text[2] == '4' {\n\t\t\tif len(text) < 4 || wordBoundary(text[3]) && text[3] != '/' || (len(text) >= 5 && tolower(text[3]) == 't' && tolower(text[4]) == 'h') {\n\t\t\t\tout.WriteString(\"&frac14;\")\n\t\t\t\treturn 2\n\t\t\t}\n\t\t}\n\n\t\tif text[0] == '3' && text[1] == '/' && text[2] == '4' {\n\t\t\tif len(text) < 4 || wordBoundary(text[3]) && text[3] != '/' || (len(text) >= 6 && tolower(text[3]) == 't' && tolower(text[4]) == 'h' && tolower(text[5]) == 's') {\n\t\t\t\tout.WriteString(\"&frac34;\")\n\t\t\t\treturn 2\n\t\t\t}\n\t\t}\n\t}\n\n\tout.WriteByte(text[0])\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartDoubleQuoteVariant(out *bytes.Buffer, previousChar byte, text []byte, quote byte) int {\n\tnextChar := byte(0)\n\tif len(text) > 1 {\n\t\tnextChar = text[1]\n\t}\n\tif !smartQuoteHelper(out, previousChar, nextChar, quote, &r.inDoubleQuote, false) {\n\t\tout.WriteString(\"&quot;\")\n\t}\n\n\treturn 0\n}\n\nfunc (r *SPRenderer) smartDoubleQuote(out *bytes.Buffer, previousChar byte, text []byte) int {\n\treturn r.smartDoubleQuoteVariant(out, previousChar, text, 'd')\n}\n\nfunc (r *SPRenderer) smartAngledDoubleQuote(out *bytes.Buffer, previousChar byte, text []byte) int {\n\treturn r.smartDoubleQuoteVariant(out, previousChar, text, 'a')\n}\n\nfunc (r *SPRenderer) smartLeftAngle(out *bytes.Buffer, previousChar byte, text []byte) int {\n\ti := 0\n\n\tfor i < len(text) && text[i] != '>' {\n\t\ti++\n\t}\n\n\tout.Write(text[:i+1])\n\treturn i\n}\n\ntype smartCallback func(out *bytes.Buffer, previousChar byte, text []byte) int\n\n// NewSmartypantsRenderer constructs a Smartypants renderer object.\nfunc NewSmartypantsRenderer(flags HTMLFlags) *SPRenderer {\n\tvar (\n\t\tr SPRenderer\n\n\t\tsmartAmpAngled      = r.smartAmp(true, false)\n\t\tsmartAmpAngledNBSP  = r.smartAmp(true, true)\n\t\tsmartAmpRegular     = r.smartAmp(false, false)\n\t\tsmartAmpRegularNBSP = r.smartAmp(false, true)\n\n\t\taddNBSP = flags&SmartypantsQuotesNBSP != 0\n\t)\n\n\tif flags&SmartypantsAngledQuotes == 0 {\n\t\tr.callbacks['\"'] = r.smartDoubleQuote\n\t\tif !addNBSP {\n\t\t\tr.callbacks['&'] = smartAmpRegular\n\t\t} else {\n\t\t\tr.callbacks['&'] = smartAmpRegularNBSP\n\t\t}\n\t} else {\n\t\tr.callbacks['\"'] = r.smartAngledDoubleQuote\n\t\tif !addNBSP {\n\t\t\tr.callbacks['&'] = smartAmpAngled\n\t\t} else {\n\t\t\tr.callbacks['&'] = smartAmpAngledNBSP\n\t\t}\n\t}\n\tr.callbacks['\\''] = r.smartSingleQuote\n\tr.callbacks['('] = r.smartParens\n\tif flags&SmartypantsDashes != 0 {\n\t\tif flags&SmartypantsLatexDashes == 0 {\n\t\t\tr.callbacks['-'] = r.smartDash\n\t\t} else {\n\t\t\tr.callbacks['-'] = r.smartDashLatex\n\t\t}\n\t}\n\tr.callbacks['.'] = r.smartPeriod\n\tif flags&SmartypantsFractions == 0 {\n\t\tr.callbacks['1'] = r.smartNumber\n\t\tr.callbacks['3'] = r.smartNumber\n\t} else {\n\t\tfor ch := '1'; ch <= '9'; ch++ {\n\t\t\tr.callbacks[ch] = r.smartNumberGeneric\n\t\t}\n\t}\n\tr.callbacks['<'] = r.smartLeftAngle\n\tr.callbacks['`'] = r.smartBacktick\n\treturn &r\n}\n\n// Process is the entry point of the Smartypants renderer.\nfunc (r *SPRenderer) Process(w io.Writer, text []byte) {\n\tmark := 0\n\tfor i := 0; i < len(text); i++ {\n\t\tif action := r.callbacks[text[i]]; action != nil {\n\t\t\tif i > mark {\n\t\t\t\tw.Write(text[mark:i])\n\t\t\t}\n\t\t\tpreviousChar := byte(0)\n\t\t\tif i > 0 {\n\t\t\t\tpreviousChar = text[i-1]\n\t\t\t}\n\t\t\tvar tmp bytes.Buffer\n\t\t\ti += action(&tmp, previousChar, text[i:])\n\t\t\tw.Write(tmp.Bytes())\n\t\t\tmark = i + 1\n\t\t}\n\t}\n\tif mark < len(text) {\n\t\tw.Write(text[mark:])\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/.gitignore",
    "content": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n\n# Architecture specific extensions/prefixes\n*.[568vq]\n[568vq].out\n\n*.cgo1.go\n*.cgo2.c\n_cgo_defun.c\n_cgo_gotypes.go\n_cgo_export.*\n\n_testmain.go\n\n# Vim files https://github.com/github/gitignore/blob/master/Global/Vim.gitignore\n# swap\n[._]*.s[a-w][a-z]\n[._]s[a-w][a-z]\n# session\nSession.vim\n# temporary\n.netrwhist\n*~\n# auto-generated tag files\ntags\n\n*.exe\ncobra.test\nbin\n\n.idea/\n*.iml\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/.golangci.yml",
    "content": "# Copyright 2013-2023 The Cobra Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nversion: \"2\"\n\nrun:\n  timeout: 5m\n\nformatters:\n  enable:\n    - gofmt\n    - goimports\n\nlinters:\n  default: none\n  enable:\n    #- bodyclose\n    #- depguard\n    #- dogsled\n    #- dupl\n    - errcheck\n    #- exhaustive\n    #- funlen\n    #- gochecknoinits\n    - goconst\n    - gocritic\n    #- gocyclo\n    #- goprintffuncname\n    - gosec\n    - govet\n    - ineffassign\n    #- lll\n    - misspell\n    #- mnd\n    #- nakedret\n    #- noctx\n    - nolintlint\n    #- rowserrcheck\n    - staticcheck\n    - unconvert\n    #- unparam\n    - unused\n    #- whitespace\n  exclusions:\n    presets:\n      - common-false-positives\n      - legacy\n      - std-error-handling\n  settings:\n    govet:\n      # Disable buildtag check to allow dual build tag syntax (both //go:build and // +build).\n      # This is necessary for Go 1.15 compatibility since //go:build was introduced in Go 1.17.\n      # This can be removed once Cobra requires Go 1.17 or higher.\n      disable:\n        - buildtag\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/.mailmap",
    "content": "Steve Francia <steve.francia@gmail.com>\nBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>\nFabiano Franz <ffranz@redhat.com>                   <contact@fabianofranz.com>\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/CONDUCT.md",
    "content": "## Cobra User Contract\n\n### Versioning\nCobra will follow a steady release cadence. Non breaking changes will be released as minor versions quarterly. Patch bug releases are at the discretion of the maintainers. Users can expect security patch fixes to be released within relatively short order of a CVE becoming known. For more information on security patch fixes see the CVE section below. Releases will follow [Semantic Versioning](https://semver.org/). Users tracking the Master branch should expect unpredictable breaking changes as the project continues to move forward. For stability, it is highly recommended to use a release.\n\n### Backward Compatibility\nWe will maintain two major releases in a moving window. The N-1 release will only receive bug fixes and security updates and will be dropped once N+1 is released.\n\n### Deprecation\nDeprecation of Go versions or dependent packages will only occur in major releases. To reduce the change of this taking users by surprise, any large deprecation will be preceded by an announcement in the [#cobra slack channel](https://gophers.slack.com/archives/CD3LP1199) and an Issue on Github.\n\n### CVE\nMaintainers will make every effort to release security patches in the case of a medium to high severity CVE directly impacting the library. The speed in which these patches reach a release is up to the discretion of the maintainers. A low severity CVE may be a lower priority than a high severity one.\n\n### Communication\nCobra maintainers will use GitHub issues and the [#cobra slack channel](https://gophers.slack.com/archives/CD3LP1199) as the primary means of communication with the community. This is to foster open communication with all users and contributors.\n\n### Breaking Changes\nBreaking changes are generally allowed in the master branch, as this is the branch used to develop the next release of Cobra.\n\nThere may be times, however, when master is closed for breaking changes. This is likely to happen as we near the release of a new version.\n\nBreaking changes are not allowed in release branches, as these represent minor versions that have already been released. These version have consumers who expect the APIs, behaviors, etc, to remain stable during the lifetime of the patch stream for the minor release.\n\nExamples of breaking changes include:\n- Removing or renaming exported constant, variable, type, or function.\n- Updating the version of critical libraries such as `spf13/pflag`, `spf13/viper` etc...\n  - Some version updates may be acceptable for picking up bug fixes, but maintainers must exercise caution when reviewing.\n\nThere may, at times, need to be exceptions where breaking changes are allowed in release branches. These are at the discretion of the project's maintainers, and must be carefully considered before merging.\n\n### CI Testing\nMaintainers will ensure the Cobra test suite utilizes the current supported versions of Golang.\n\n### Disclaimer\nChanges to this document and the contents therein are at the discretion of the maintainers.\nNone of the contents of this document are legally binding in any way to the maintainers or the users.\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/CONTRIBUTING.md",
    "content": "# Contributing to Cobra\n\nThank you so much for contributing to Cobra. We appreciate your time and help.\nHere are some guidelines to help you get started.\n\n## Code of Conduct\n\nBe kind and respectful to the members of the community. Take time to educate\nothers who are seeking help. Harassment of any kind will not be tolerated.\n\n## Questions\n\nIf you have questions regarding Cobra, feel free to ask it in the community\n[#cobra Slack channel][cobra-slack]\n\n## Filing a bug or feature\n\n1. Before filing an issue, please check the existing issues to see if a\n   similar one was already opened. If there is one already opened, feel free\n   to comment on it.\n1. If you believe you've found a bug, please provide detailed steps of\n   reproduction, the version of Cobra and anything else you believe will be\n   useful to help troubleshoot it (e.g. OS environment, environment variables,\n   etc...). Also state the current behavior vs. the expected behavior.\n1. If you'd like to see a feature or an enhancement please open an issue with\n   a clear title and description of what the feature is and why it would be\n   beneficial to the project and its users.\n\n## Submitting changes\n\n1. CLA: Upon submitting a Pull Request (PR), contributors will be prompted to\n   sign a CLA. Please sign the CLA :slightly_smiling_face:\n1. Tests: If you are submitting code, please ensure you have adequate tests\n   for the feature. Tests can be run via `go test ./...` or `make test`.\n1. Since this is golang project, ensure the new code is properly formatted to\n   ensure code consistency. Run `make all`.\n\n### Quick steps to contribute\n\n1. Fork the project.\n1. Download your fork to your PC (`git clone https://github.com/your_username/cobra && cd cobra`)\n1. Create your feature branch (`git checkout -b my-new-feature`)\n1. Make changes and run tests (`make test`)\n1. Add them to staging (`git add .`)\n1. Commit your changes (`git commit -m 'Add some feature'`)\n1. Push to the branch (`git push origin my-new-feature`)\n1. Create new pull request\n\n<!-- Links -->\n[cobra-slack]: https://gophers.slack.com/archives/CD3LP1199\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/LICENSE.txt",
    "content": "                                Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/MAINTAINERS",
    "content": "maintainers:\n- spf13\n- johnSchnake\n- jpmcb\n- marckhouzam\ninactive:\n- anthonyfok\n- bep\n- bogem\n- broady\n- eparis\n- jharshman\n- wfernandes\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/Makefile",
    "content": "BIN=\"./bin\"\nSRC=$(shell find . -name \"*.go\")\n\nifeq (, $(shell which golangci-lint))\n$(warning \"could not find golangci-lint in $(PATH), run: curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh\")\nendif\n\n.PHONY: fmt lint test install_deps clean\n\ndefault: all\n\nall: fmt test\n\nfmt:\n\t$(info ******************** checking formatting ********************)\n\t@test -z $(shell gofmt -l $(SRC)) || (gofmt -d $(SRC); exit 1)\n\nlint:\n\t$(info ******************** running lint tools ********************)\n\tgolangci-lint run -v\n\ntest: install_deps\n\t$(info ******************** running tests ********************)\n\tgo test -v ./...\n\nrichtest: install_deps\n\t$(info ******************** running tests with kyoh86/richgo ********************)\n\trichgo test -v ./...\n\ninstall_deps:\n\t$(info ******************** downloading dependencies ********************)\n\tgo get -v ./...\n\nclean:\n\trm -rf $(BIN)\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/README.md",
    "content": "<div align=\"center\">\n<a href=\"https://cobra.dev\">\n<img width=\"512\" height=\"535\" alt=\"cobra-logo\" src=\"https://github.com/user-attachments/assets/c8bf9aad-b5ae-41d3-8899-d83baec10af8\" />\n</a>\n</div>\n\nCobra is a library for creating powerful modern CLI applications.\n\n<a href=\"https://cobra.dev\">Visit Cobra.dev for extensive documentation</a> \n\n\nCobra is used in many Go projects such as [Kubernetes](https://kubernetes.io/),\n[Hugo](https://gohugo.io), and [GitHub CLI](https://github.com/cli/cli) to\nname a few. [This list](site/content/projects_using_cobra.md) contains a more extensive list of projects using Cobra.\n\n[![](https://img.shields.io/github/actions/workflow/status/spf13/cobra/test.yml?branch=main&longCache=true&label=Test&logo=github%20actions&logoColor=fff)](https://github.com/spf13/cobra/actions?query=workflow%3ATest)\n[![Go Reference](https://pkg.go.dev/badge/github.com/spf13/cobra.svg)](https://pkg.go.dev/github.com/spf13/cobra)\n[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cobra)](https://goreportcard.com/report/github.com/spf13/cobra)\n[![Slack](https://img.shields.io/badge/Slack-cobra-brightgreen)](https://gophers.slack.com/archives/CD3LP1199)\n<hr>\n<div align=\"center\" markdown=\"1\">\n   <sup>Supported by:</sup>\n   <br>\n   <br>\n   <a href=\"https://www.warp.dev/cobra\">\n      <img alt=\"Warp sponsorship\" width=\"400\" src=\"https://github.com/user-attachments/assets/ab8dd143-b0fd-4904-bdc5-dd7ecac94eae\">\n   </a>\n\n### [Warp, the AI terminal for devs](https://www.warp.dev/cobra)\n[Try Cobra in Warp today](https://www.warp.dev/cobra)<br>\n\n</div>\n<hr>\n\n# Overview\n\nCobra is a library providing a simple interface to create powerful modern CLI\ninterfaces similar to git & go tools.\n\nCobra provides:\n* Easy subcommand-based CLIs: `app server`, `app fetch`, etc.\n* Fully POSIX-compliant flags (including short & long versions)\n* Nested subcommands\n* Global, local and cascading flags\n* Intelligent suggestions (`app srver`... did you mean `app server`?)\n* Automatic help generation for commands and flags\n* Grouping help for subcommands\n* Automatic help flag recognition of `-h`, `--help`, etc.\n* Automatically generated shell autocomplete for your application (bash, zsh, fish, powershell)\n* Automatically generated man pages for your application\n* Command aliases so you can change things without breaking them\n* The flexibility to define your own help, usage, etc.\n* Optional seamless integration with [viper](https://github.com/spf13/viper) for 12-factor apps\n\n# Concepts\n\nCobra is built on a structure of commands, arguments & flags.\n\n**Commands** represent actions, **Args** are things and **Flags** are modifiers for those actions.\n\nThe best applications read like sentences when used, and as a result, users\nintuitively know how to interact with them.\n\nThe pattern to follow is\n`APPNAME VERB NOUN --ADJECTIVE`\n    or\n`APPNAME COMMAND ARG --FLAG`.\n\nA few good real world examples may better illustrate this point.\n\nIn the following example, 'server' is a command, and 'port' is a flag:\n\n    hugo server --port=1313\n\nIn this command we are telling Git to clone the url bare.\n\n    git clone URL --bare\n\n## Commands\n\nCommand is the central point of the application. Each interaction that\nthe application supports will be contained in a Command. A command can\nhave children commands and optionally run an action.\n\nIn the example above, 'server' is the command.\n\n[More about cobra.Command](https://pkg.go.dev/github.com/spf13/cobra#Command)\n\n## Flags\n\nA flag is a way to modify the behavior of a command. Cobra supports\nfully POSIX-compliant flags as well as the Go [flag package](https://golang.org/pkg/flag/).\nA Cobra command can define flags that persist through to children commands\nand flags that are only available to that command.\n\nIn the example above, 'port' is the flag.\n\nFlag functionality is provided by the [pflag\nlibrary](https://github.com/spf13/pflag), a fork of the flag standard library\nwhich maintains the same interface while adding POSIX compliance.\n\n# Installing\nUsing Cobra is easy. First, use `go get` to install the latest version\nof the library.\n\n```\ngo get -u github.com/spf13/cobra@latest\n```\n\nNext, include Cobra in your application:\n\n```go\nimport \"github.com/spf13/cobra\"\n```\n\n# Usage\n`cobra-cli` is a command line program to generate cobra applications and command files.\nIt will bootstrap your application scaffolding to rapidly\ndevelop a Cobra-based application. It is the easiest way to incorporate Cobra into your application.\n\nIt can be installed by running:\n\n```\ngo install github.com/spf13/cobra-cli@latest\n```\n\nFor complete details on using the Cobra-CLI generator, please read [The Cobra Generator README](https://github.com/spf13/cobra-cli/blob/main/README.md)\n\nFor complete details on using the Cobra library, please read [The Cobra User Guide](site/content/user_guide.md).\n\n# License\n\nCobra is released under the Apache 2.0 license. See [LICENSE.txt](LICENSE.txt)\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/SECURITY.md",
    "content": "# Security Policy\n\n## Reporting a Vulnerability\n\nThe `cobra` maintainers take security issues seriously and\nwe appreciate your efforts to _**responsibly**_ disclose your findings.\nWe will make every effort to swiftly respond and address concerns.\n\nTo report a security vulnerability:\n\n1. **DO NOT** create a public GitHub issue for the vulnerability!\n2. **DO NOT** create a public GitHub Pull Request with a fix for the vulnerability!\n3. Send an email to `cobra-security@googlegroups.com`.\n4. Include the following details in your report:\n   - Description of the vulnerability\n   - Steps to reproduce\n   - Potential impact of the vulnerability (to your downstream project, to the Go ecosystem, etc.)\n   - Any potential mitigations you've already identified\n5. Allow up to 7 days for an initial response.\n   You should receive an acknowledgment of your report and an estimated timeline for a fix.\n6. (Optional) If you have a fix and would like to contribute your patch, please work\n   directly with the maintainers via `cobra-security@googlegroups.com` to\n   coordinate pushing the patch to GitHub, cutting a new release, and disclosing the change.\n\n## Response Process\n\nWhen a security vulnerability report is received, the `cobra` maintainers will:\n\n1. Confirm receipt of the vulnerability report within 7 days.\n2. Assess the report to determine if it constitutes a security vulnerability.\n3. If confirmed, assign the vulnerability a severity level and create a timeline for addressing it.\n4. Develop and test a fix.\n5. Patch the vulnerability and make a new GitHub release: the maintainers will coordinate disclosure with the reporter.\n6. Create a new GitHub Security Advisory to inform the broader Go ecosystem\n\n## Disclosure Policy\n\nThe `cobra` maintainers follow a coordinated disclosure process:\n\n1. Security vulnerabilities will be addressed as quickly as possible.\n2. A CVE (Common Vulnerabilities and Exposures) identifier will be requested for significant vulnerabilities\n   that are within `cobra` itself.\n3. Once a fix is ready, the maintainers will:\n   - Release a new version containing the fix.\n   - Update the security advisory with details about the vulnerability.\n   - Credit the reporter (unless they wish to remain anonymous).\n   - Credit the fixer (unless they wish to remain anonymous, this may be the same as the reporter).\n   - Announce the vulnerability through appropriate channels\n     (GitHub Security Advisory, mailing lists, GitHub Releases, etc.)\n\n## Supported Versions\n\nSecurity fixes will typically only be released for the most recent major release.\n\n## Upstream Security Issues\n\n`cobra` generally will not accept vulnerability reports that originate in upstream\ndependencies. I.e., if there is a problem in Go code that `cobra` depends on,\nit is best to engage that project's maintainers and owners.\n\nThis security policy primarily pertains only to `cobra` itself but if you believe you've\nidentified a problem that originates in an upstream dependency and is being widely\ndistributed by `cobra`, please follow the disclosure procedure above: the `cobra`\nmaintainers will work with you to determine the severity and ecosystem impact.\n\n## Security Updates and CVEs\n\nInformation about known security vulnerabilities and CVEs affecting `cobra` will\nbe published as GitHub Security Advisories at\nhttps://github.com/spf13/cobra/security/advisories.\n\nAll users are encouraged to watch the repository and upgrade promptly when\nsecurity releases are published.\n\n## `cobra` Security Best Practices for Users\n\nWhen using `cobra` in your CLIs, the `cobra` maintainers recommend the following:\n\n1. Always use the latest version of `cobra`.\n2. [Use Go modules](https://go.dev/blog/using-go-modules) for dependency management.\n3. Always use the latest possible version of Go.\n\n## Security Best Practices for Contributors\n\nWhen contributing to `cobra`:\n\n1. Be mindful of security implications when adding new features or modifying existing ones.\n2. Be aware of `cobra`'s extremely large reach: it is used in nearly every Go CLI\n   (like Kubernetes, Docker, Prometheus, etc. etc.)\n3. Write tests that explicitly cover edge cases and potential issues.\n4. If you discover a security issue while working on `cobra`, please report it\n   following the process above rather than opening a public pull request or issue that\n   addresses the vulnerability.\n5. Take personal sec-ops seriously and secure your GitHub account: use [two-factor authentication](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa),\n   [sign your commits with a GPG or SSH key](https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification),\n   etc.\n\n## Acknowledgments\n\nThe `cobra` maintainers would like to thank all security researchers and\ncommunity members who help keep cobra, its users, and the entire Go ecosystem secure through responsible disclosures!!\n\n---\n\n*This security policy is inspired by the [Open Web Application Security Project (OWASP)](https://owasp.org/) guidelines and security best practices.*\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/active_help.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cobra\n\nimport (\n\t\"fmt\"\n\t\"os\"\n)\n\nconst (\n\tactiveHelpMarker = \"_activeHelp_ \"\n\t// The below values should not be changed: programs will be using them explicitly\n\t// in their user documentation, and users will be using them explicitly.\n\tactiveHelpEnvVarSuffix  = \"ACTIVE_HELP\"\n\tactiveHelpGlobalEnvVar  = configEnvVarGlobalPrefix + \"_\" + activeHelpEnvVarSuffix\n\tactiveHelpGlobalDisable = \"0\"\n)\n\n// AppendActiveHelp adds the specified string to the specified array to be used as ActiveHelp.\n// Such strings will be processed by the completion script and will be shown as ActiveHelp\n// to the user.\n// The array parameter should be the array that will contain the completions.\n// This function can be called multiple times before and/or after completions are added to\n// the array.  Each time this function is called with the same array, the new\n// ActiveHelp line will be shown below the previous ones when completion is triggered.\nfunc AppendActiveHelp(compArray []Completion, activeHelpStr string) []Completion {\n\treturn append(compArray, fmt.Sprintf(\"%s%s\", activeHelpMarker, activeHelpStr))\n}\n\n// GetActiveHelpConfig returns the value of the ActiveHelp environment variable\n// <PROGRAM>_ACTIVE_HELP where <PROGRAM> is the name of the root command in upper\n// case, with all non-ASCII-alphanumeric characters replaced by `_`.\n// It will always return \"0\" if the global environment variable COBRA_ACTIVE_HELP\n// is set to \"0\".\nfunc GetActiveHelpConfig(cmd *Command) string {\n\tactiveHelpCfg := os.Getenv(activeHelpGlobalEnvVar)\n\tif activeHelpCfg != activeHelpGlobalDisable {\n\t\tactiveHelpCfg = os.Getenv(activeHelpEnvVar(cmd.Root().Name()))\n\t}\n\treturn activeHelpCfg\n}\n\n// activeHelpEnvVar returns the name of the program-specific ActiveHelp environment\n// variable.  It has the format <PROGRAM>_ACTIVE_HELP where <PROGRAM> is the name of the\n// root command in upper case, with all non-ASCII-alphanumeric characters replaced by `_`.\nfunc activeHelpEnvVar(name string) string {\n\treturn configEnvVar(name, activeHelpEnvVarSuffix)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/args.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cobra\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype PositionalArgs func(cmd *Command, args []string) error\n\n// legacyArgs validation has the following behaviour:\n// - root commands with no subcommands can take arbitrary arguments\n// - root commands with subcommands will do subcommand validity checking\n// - subcommands will always accept arbitrary arguments\nfunc legacyArgs(cmd *Command, args []string) error {\n\t// no subcommand, always take args\n\tif !cmd.HasSubCommands() {\n\t\treturn nil\n\t}\n\n\t// root command with subcommands, do subcommand checking.\n\tif !cmd.HasParent() && len(args) > 0 {\n\t\treturn fmt.Errorf(\"unknown command %q for %q%s\", args[0], cmd.CommandPath(), cmd.findSuggestions(args[0]))\n\t}\n\treturn nil\n}\n\n// NoArgs returns an error if any args are included.\nfunc NoArgs(cmd *Command, args []string) error {\n\tif len(args) > 0 {\n\t\treturn fmt.Errorf(\"unknown command %q for %q\", args[0], cmd.CommandPath())\n\t}\n\treturn nil\n}\n\n// OnlyValidArgs returns an error if there are any positional args that are not in\n// the `ValidArgs` field of `Command`\nfunc OnlyValidArgs(cmd *Command, args []string) error {\n\tif len(cmd.ValidArgs) > 0 {\n\t\t// Remove any description that may be included in ValidArgs.\n\t\t// A description is following a tab character.\n\t\tvalidArgs := make([]string, 0, len(cmd.ValidArgs))\n\t\tfor _, v := range cmd.ValidArgs {\n\t\t\tvalidArgs = append(validArgs, strings.SplitN(v, \"\\t\", 2)[0])\n\t\t}\n\t\tfor _, v := range args {\n\t\t\tif !stringInSlice(v, validArgs) {\n\t\t\t\treturn fmt.Errorf(\"invalid argument %q for %q%s\", v, cmd.CommandPath(), cmd.findSuggestions(args[0]))\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// ArbitraryArgs never returns an error.\nfunc ArbitraryArgs(cmd *Command, args []string) error {\n\treturn nil\n}\n\n// MinimumNArgs returns an error if there is not at least N args.\nfunc MinimumNArgs(n int) PositionalArgs {\n\treturn func(cmd *Command, args []string) error {\n\t\tif len(args) < n {\n\t\t\treturn fmt.Errorf(\"requires at least %d arg(s), only received %d\", n, len(args))\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// MaximumNArgs returns an error if there are more than N args.\nfunc MaximumNArgs(n int) PositionalArgs {\n\treturn func(cmd *Command, args []string) error {\n\t\tif len(args) > n {\n\t\t\treturn fmt.Errorf(\"accepts at most %d arg(s), received %d\", n, len(args))\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// ExactArgs returns an error if there are not exactly n args.\nfunc ExactArgs(n int) PositionalArgs {\n\treturn func(cmd *Command, args []string) error {\n\t\tif len(args) != n {\n\t\t\treturn fmt.Errorf(\"accepts %d arg(s), received %d\", n, len(args))\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// RangeArgs returns an error if the number of args is not within the expected range.\nfunc RangeArgs(min int, max int) PositionalArgs {\n\treturn func(cmd *Command, args []string) error {\n\t\tif len(args) < min || len(args) > max {\n\t\t\treturn fmt.Errorf(\"accepts between %d and %d arg(s), received %d\", min, max, len(args))\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// MatchAll allows combining several PositionalArgs to work in concert.\nfunc MatchAll(pargs ...PositionalArgs) PositionalArgs {\n\treturn func(cmd *Command, args []string) error {\n\t\tfor _, parg := range pargs {\n\t\t\tif err := parg(cmd, args); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t}\n\t\treturn nil\n\t}\n}\n\n// ExactValidArgs returns an error if there are not exactly N positional args OR\n// there are any positional args that are not in the `ValidArgs` field of `Command`\n//\n// Deprecated: use MatchAll(ExactArgs(n), OnlyValidArgs) instead\nfunc ExactValidArgs(n int) PositionalArgs {\n\treturn MatchAll(ExactArgs(n), OnlyValidArgs)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/bash_completions.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cobra\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/spf13/pflag\"\n)\n\n// Annotations for Bash completion.\nconst (\n\tBashCompFilenameExt     = \"cobra_annotation_bash_completion_filename_extensions\"\n\tBashCompCustom          = \"cobra_annotation_bash_completion_custom\"\n\tBashCompOneRequiredFlag = \"cobra_annotation_bash_completion_one_required_flag\"\n\tBashCompSubdirsInDir    = \"cobra_annotation_bash_completion_subdirs_in_dir\"\n)\n\nfunc writePreamble(buf io.StringWriter, name string) {\n\tWriteStringAndCheck(buf, fmt.Sprintf(\"# bash completion for %-36s -*- shell-script -*-\\n\", name))\n\tWriteStringAndCheck(buf, fmt.Sprintf(`\n__%[1]s_debug()\n{\n    if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then\n        echo \"$*\" >> \"${BASH_COMP_DEBUG_FILE}\"\n    fi\n}\n\n# Homebrew on Macs have version 1.3 of bash-completion which doesn't include\n# _init_completion. This is a very minimal version of that function.\n__%[1]s_init_completion()\n{\n    COMPREPLY=()\n    _get_comp_words_by_ref \"$@\" cur prev words cword\n}\n\n__%[1]s_index_of_word()\n{\n    local w word=$1\n    shift\n    index=0\n    for w in \"$@\"; do\n        [[ $w = \"$word\" ]] && return\n        index=$((index+1))\n    done\n    index=-1\n}\n\n__%[1]s_contains_word()\n{\n    local w word=$1; shift\n    for w in \"$@\"; do\n        [[ $w = \"$word\" ]] && return\n    done\n    return 1\n}\n\n__%[1]s_handle_go_custom_completion()\n{\n    __%[1]s_debug \"${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}\"\n\n    local shellCompDirectiveError=%[3]d\n    local shellCompDirectiveNoSpace=%[4]d\n    local shellCompDirectiveNoFileComp=%[5]d\n    local shellCompDirectiveFilterFileExt=%[6]d\n    local shellCompDirectiveFilterDirs=%[7]d\n\n    local out requestComp lastParam lastChar comp directive args\n\n    # Prepare the command to request completions for the program.\n    # Calling ${words[0]} instead of directly %[1]s allows handling aliases\n    args=(\"${words[@]:1}\")\n    # Disable ActiveHelp which is not supported for bash completion v1\n    requestComp=\"%[8]s=0 ${words[0]} %[2]s ${args[*]}\"\n\n    lastParam=${words[$((${#words[@]}-1))]}\n    lastChar=${lastParam:$((${#lastParam}-1)):1}\n    __%[1]s_debug \"${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}\"\n\n    if [ -z \"${cur}\" ] && [ \"${lastChar}\" != \"=\" ]; then\n        # If the last parameter is complete (there is a space following it)\n        # We add an extra empty parameter so we can indicate this to the go method.\n        __%[1]s_debug \"${FUNCNAME[0]}: Adding extra empty parameter\"\n        requestComp=\"${requestComp} \\\"\\\"\"\n    fi\n\n    __%[1]s_debug \"${FUNCNAME[0]}: calling ${requestComp}\"\n    # Use eval to handle any environment variables and such\n    out=$(eval \"${requestComp}\" 2>/dev/null)\n\n    # Extract the directive integer at the very end of the output following a colon (:)\n    directive=${out##*:}\n    # Remove the directive\n    out=${out%%:*}\n    if [ \"${directive}\" = \"${out}\" ]; then\n        # There is not directive specified\n        directive=0\n    fi\n    __%[1]s_debug \"${FUNCNAME[0]}: the completion directive is: ${directive}\"\n    __%[1]s_debug \"${FUNCNAME[0]}: the completions are: ${out}\"\n\n    if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then\n        # Error code.  No completion.\n        __%[1]s_debug \"${FUNCNAME[0]}: received error from custom completion go code\"\n        return\n    else\n        if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then\n            if [[ $(type -t compopt) = \"builtin\" ]]; then\n                __%[1]s_debug \"${FUNCNAME[0]}: activating no space\"\n                compopt -o nospace\n            fi\n        fi\n        if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then\n            if [[ $(type -t compopt) = \"builtin\" ]]; then\n                __%[1]s_debug \"${FUNCNAME[0]}: activating no file completion\"\n                compopt +o default\n            fi\n        fi\n    fi\n\n    if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then\n        # File extension filtering\n        local fullFilter filter filteringCmd\n        # Do not use quotes around the $out variable or else newline\n        # characters will be kept.\n        for filter in ${out}; do\n            fullFilter+=\"$filter|\"\n        done\n\n        filteringCmd=\"_filedir $fullFilter\"\n        __%[1]s_debug \"File filtering command: $filteringCmd\"\n        $filteringCmd\n    elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then\n        # File completion for directories only\n        local subdir\n        # Use printf to strip any trailing newline\n        subdir=$(printf \"%%s\" \"${out}\")\n        if [ -n \"$subdir\" ]; then\n            __%[1]s_debug \"Listing directories in $subdir\"\n            __%[1]s_handle_subdirs_in_dir_flag \"$subdir\"\n        else\n            __%[1]s_debug \"Listing directories in .\"\n            _filedir -d\n        fi\n    else\n        while IFS='' read -r comp; do\n            COMPREPLY+=(\"$comp\")\n        done < <(compgen -W \"${out}\" -- \"$cur\")\n    fi\n}\n\n__%[1]s_handle_reply()\n{\n    __%[1]s_debug \"${FUNCNAME[0]}\"\n    local comp\n    case $cur in\n        -*)\n            if [[ $(type -t compopt) = \"builtin\" ]]; then\n                compopt -o nospace\n            fi\n            local allflags\n            if [ ${#must_have_one_flag[@]} -ne 0 ]; then\n                allflags=(\"${must_have_one_flag[@]}\")\n            else\n                allflags=(\"${flags[*]} ${two_word_flags[*]}\")\n            fi\n            while IFS='' read -r comp; do\n                COMPREPLY+=(\"$comp\")\n            done < <(compgen -W \"${allflags[*]}\" -- \"$cur\")\n            if [[ $(type -t compopt) = \"builtin\" ]]; then\n                [[ \"${COMPREPLY[0]}\" == *= ]] || compopt +o nospace\n            fi\n\n            # complete after --flag=abc\n            if [[ $cur == *=* ]]; then\n                if [[ $(type -t compopt) = \"builtin\" ]]; then\n                    compopt +o nospace\n                fi\n\n                local index flag\n                flag=\"${cur%%=*}\"\n                __%[1]s_index_of_word \"${flag}\" \"${flags_with_completion[@]}\"\n                COMPREPLY=()\n                if [[ ${index} -ge 0 ]]; then\n                    PREFIX=\"\"\n                    cur=\"${cur#*=}\"\n                    ${flags_completion[${index}]}\n                    if [ -n \"${ZSH_VERSION:-}\" ]; then\n                        # zsh completion needs --flag= prefix\n                        eval \"COMPREPLY=( \\\"\\${COMPREPLY[@]/#/${flag}=}\\\" )\"\n                    fi\n                fi\n            fi\n\n            if [[ -z \"${flag_parsing_disabled}\" ]]; then\n                # If flag parsing is enabled, we have completed the flags and can return.\n                # If flag parsing is disabled, we may not know all (or any) of the flags, so we fallthrough\n                # to possibly call handle_go_custom_completion.\n                return 0;\n            fi\n            ;;\n    esac\n\n    # check if we are handling a flag with special work handling\n    local index\n    __%[1]s_index_of_word \"${prev}\" \"${flags_with_completion[@]}\"\n    if [[ ${index} -ge 0 ]]; then\n        ${flags_completion[${index}]}\n        return\n    fi\n\n    # we are parsing a flag and don't have a special handler, no completion\n    if [[ ${cur} != \"${words[cword]}\" ]]; then\n        return\n    fi\n\n    local completions\n    completions=(\"${commands[@]}\")\n    if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then\n        completions+=(\"${must_have_one_noun[@]}\")\n    elif [[ -n \"${has_completion_function}\" ]]; then\n        # if a go completion function is provided, defer to that function\n        __%[1]s_handle_go_custom_completion\n    fi\n    if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then\n        completions+=(\"${must_have_one_flag[@]}\")\n    fi\n    while IFS='' read -r comp; do\n        COMPREPLY+=(\"$comp\")\n    done < <(compgen -W \"${completions[*]}\" -- \"$cur\")\n\n    if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then\n        while IFS='' read -r comp; do\n            COMPREPLY+=(\"$comp\")\n        done < <(compgen -W \"${noun_aliases[*]}\" -- \"$cur\")\n    fi\n\n    if [[ ${#COMPREPLY[@]} -eq 0 ]]; then\n        if declare -F __%[1]s_custom_func >/dev/null; then\n            # try command name qualified custom func\n            __%[1]s_custom_func\n        else\n            # otherwise fall back to unqualified for compatibility\n            declare -F __custom_func >/dev/null && __custom_func\n        fi\n    fi\n\n    # available in bash-completion >= 2, not always present on macOS\n    if declare -F __ltrim_colon_completions >/dev/null; then\n        __ltrim_colon_completions \"$cur\"\n    fi\n\n    # If there is only 1 completion and it is a flag with an = it will be completed\n    # but we don't want a space after the =\n    if [[ \"${#COMPREPLY[@]}\" -eq \"1\" ]] && [[ $(type -t compopt) = \"builtin\" ]] && [[ \"${COMPREPLY[0]}\" == --*= ]]; then\n       compopt -o nospace\n    fi\n}\n\n# The arguments should be in the form \"ext1|ext2|extn\"\n__%[1]s_handle_filename_extension_flag()\n{\n    local ext=\"$1\"\n    _filedir \"@(${ext})\"\n}\n\n__%[1]s_handle_subdirs_in_dir_flag()\n{\n    local dir=\"$1\"\n    pushd \"${dir}\" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return\n}\n\n__%[1]s_handle_flag()\n{\n    __%[1]s_debug \"${FUNCNAME[0]}: c is $c words[c] is ${words[c]}\"\n\n    # if a command required a flag, and we found it, unset must_have_one_flag()\n    local flagname=${words[c]}\n    local flagvalue=\"\"\n    # if the word contained an =\n    if [[ ${words[c]} == *\"=\"* ]]; then\n        flagvalue=${flagname#*=} # take in as flagvalue after the =\n        flagname=${flagname%%=*} # strip everything after the =\n        flagname=\"${flagname}=\" # but put the = back\n    fi\n    __%[1]s_debug \"${FUNCNAME[0]}: looking for ${flagname}\"\n    if __%[1]s_contains_word \"${flagname}\" \"${must_have_one_flag[@]}\"; then\n        must_have_one_flag=()\n    fi\n\n    # if you set a flag which only applies to this command, don't show subcommands\n    if __%[1]s_contains_word \"${flagname}\" \"${local_nonpersistent_flags[@]}\"; then\n      commands=()\n    fi\n\n    # keep flag value with flagname as flaghash\n    # flaghash variable is an associative array which is only supported in bash > 3.\n    if [[ -z \"${BASH_VERSION:-}\" || \"${BASH_VERSINFO[0]:-}\" -gt 3 ]]; then\n        if [ -n \"${flagvalue}\" ] ; then\n            flaghash[${flagname}]=${flagvalue}\n        elif [ -n \"${words[ $((c+1)) ]}\" ] ; then\n            flaghash[${flagname}]=${words[ $((c+1)) ]}\n        else\n            flaghash[${flagname}]=\"true\" # pad \"true\" for bool flag\n        fi\n    fi\n\n    # skip the argument to a two word flag\n    if [[ ${words[c]} != *\"=\"* ]] && __%[1]s_contains_word \"${words[c]}\" \"${two_word_flags[@]}\"; then\n        __%[1]s_debug \"${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument\"\n        c=$((c+1))\n        # if we are looking for a flags value, don't show commands\n        if [[ $c -eq $cword ]]; then\n            commands=()\n        fi\n    fi\n\n    c=$((c+1))\n\n}\n\n__%[1]s_handle_noun()\n{\n    __%[1]s_debug \"${FUNCNAME[0]}: c is $c words[c] is ${words[c]}\"\n\n    if __%[1]s_contains_word \"${words[c]}\" \"${must_have_one_noun[@]}\"; then\n        must_have_one_noun=()\n    elif __%[1]s_contains_word \"${words[c]}\" \"${noun_aliases[@]}\"; then\n        must_have_one_noun=()\n    fi\n\n    nouns+=(\"${words[c]}\")\n    c=$((c+1))\n}\n\n__%[1]s_handle_command()\n{\n    __%[1]s_debug \"${FUNCNAME[0]}: c is $c words[c] is ${words[c]}\"\n\n    local next_command\n    if [[ -n ${last_command} ]]; then\n        next_command=\"_${last_command}_${words[c]//:/__}\"\n    else\n        if [[ $c -eq 0 ]]; then\n            next_command=\"_%[1]s_root_command\"\n        else\n            next_command=\"_${words[c]//:/__}\"\n        fi\n    fi\n    c=$((c+1))\n    __%[1]s_debug \"${FUNCNAME[0]}: looking for ${next_command}\"\n    declare -F \"$next_command\" >/dev/null && $next_command\n}\n\n__%[1]s_handle_word()\n{\n    if [[ $c -ge $cword ]]; then\n        __%[1]s_handle_reply\n        return\n    fi\n    __%[1]s_debug \"${FUNCNAME[0]}: c is $c words[c] is ${words[c]}\"\n    if [[ \"${words[c]}\" == -* ]]; then\n        __%[1]s_handle_flag\n    elif __%[1]s_contains_word \"${words[c]}\" \"${commands[@]}\"; then\n        __%[1]s_handle_command\n    elif [[ $c -eq 0 ]]; then\n        __%[1]s_handle_command\n    elif __%[1]s_contains_word \"${words[c]}\" \"${command_aliases[@]}\"; then\n        # aliashash variable is an associative array which is only supported in bash > 3.\n        if [[ -z \"${BASH_VERSION:-}\" || \"${BASH_VERSINFO[0]:-}\" -gt 3 ]]; then\n            words[c]=${aliashash[${words[c]}]}\n            __%[1]s_handle_command\n        else\n            __%[1]s_handle_noun\n        fi\n    else\n        __%[1]s_handle_noun\n    fi\n    __%[1]s_handle_word\n}\n\n`, name, ShellCompNoDescRequestCmd,\n\t\tShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,\n\t\tShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, activeHelpEnvVar(name)))\n}\n\nfunc writePostscript(buf io.StringWriter, name string) {\n\tname = strings.ReplaceAll(name, \":\", \"__\")\n\tWriteStringAndCheck(buf, fmt.Sprintf(\"__start_%s()\\n\", name))\n\tWriteStringAndCheck(buf, fmt.Sprintf(`{\n    local cur prev words cword split\n    declare -A flaghash 2>/dev/null || :\n    declare -A aliashash 2>/dev/null || :\n    if declare -F _init_completion >/dev/null 2>&1; then\n        _init_completion -s || return\n    else\n        __%[1]s_init_completion -n \"=\" || return\n    fi\n\n    local c=0\n    local flag_parsing_disabled=\n    local flags=()\n    local two_word_flags=()\n    local local_nonpersistent_flags=()\n    local flags_with_completion=()\n    local flags_completion=()\n    local commands=(\"%[1]s\")\n    local command_aliases=()\n    local must_have_one_flag=()\n    local must_have_one_noun=()\n    local has_completion_function=\"\"\n    local last_command=\"\"\n    local nouns=()\n    local noun_aliases=()\n\n    __%[1]s_handle_word\n}\n\n`, name))\n\tWriteStringAndCheck(buf, fmt.Sprintf(`if [[ $(type -t compopt) = \"builtin\" ]]; then\n    complete -o default -F __start_%s %s\nelse\n    complete -o default -o nospace -F __start_%s %s\nfi\n\n`, name, name, name, name))\n\tWriteStringAndCheck(buf, \"# ex: ts=4 sw=4 et filetype=sh\\n\")\n}\n\nfunc writeCommands(buf io.StringWriter, cmd *Command) {\n\tWriteStringAndCheck(buf, \"    commands=()\\n\")\n\tfor _, c := range cmd.Commands() {\n\t\tif !c.IsAvailableCommand() && c != cmd.helpCommand {\n\t\t\tcontinue\n\t\t}\n\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    commands+=(%q)\\n\", c.Name()))\n\t\twriteCmdAliases(buf, c)\n\t}\n\tWriteStringAndCheck(buf, \"\\n\")\n}\n\nfunc writeFlagHandler(buf io.StringWriter, name string, annotations map[string][]string, cmd *Command) {\n\tfor key, value := range annotations {\n\t\tswitch key {\n\t\tcase BashCompFilenameExt:\n\t\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    flags_with_completion+=(%q)\\n\", name))\n\n\t\t\tvar ext string\n\t\t\tif len(value) > 0 {\n\t\t\t\text = fmt.Sprintf(\"__%s_handle_filename_extension_flag \", cmd.Root().Name()) + strings.Join(value, \"|\")\n\t\t\t} else {\n\t\t\t\text = \"_filedir\"\n\t\t\t}\n\t\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    flags_completion+=(%q)\\n\", ext))\n\t\tcase BashCompCustom:\n\t\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    flags_with_completion+=(%q)\\n\", name))\n\n\t\t\tif len(value) > 0 {\n\t\t\t\thandlers := strings.Join(value, \"; \")\n\t\t\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    flags_completion+=(%q)\\n\", handlers))\n\t\t\t} else {\n\t\t\t\tWriteStringAndCheck(buf, \"    flags_completion+=(:)\\n\")\n\t\t\t}\n\t\tcase BashCompSubdirsInDir:\n\t\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    flags_with_completion+=(%q)\\n\", name))\n\n\t\t\tvar ext string\n\t\t\tif len(value) == 1 {\n\t\t\t\text = fmt.Sprintf(\"__%s_handle_subdirs_in_dir_flag \", cmd.Root().Name()) + value[0]\n\t\t\t} else {\n\t\t\t\text = \"_filedir -d\"\n\t\t\t}\n\t\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    flags_completion+=(%q)\\n\", ext))\n\t\t}\n\t}\n}\n\nconst cbn = \"\\\")\\n\"\n\nfunc writeShortFlag(buf io.StringWriter, flag *pflag.Flag, cmd *Command) {\n\tname := flag.Shorthand\n\tformat := \"    \"\n\tif len(flag.NoOptDefVal) == 0 {\n\t\tformat += \"two_word_\"\n\t}\n\tformat += \"flags+=(\\\"-%s\" + cbn\n\tWriteStringAndCheck(buf, fmt.Sprintf(format, name))\n\twriteFlagHandler(buf, \"-\"+name, flag.Annotations, cmd)\n}\n\nfunc writeFlag(buf io.StringWriter, flag *pflag.Flag, cmd *Command) {\n\tname := flag.Name\n\tformat := \"    flags+=(\\\"--%s\"\n\tif len(flag.NoOptDefVal) == 0 {\n\t\tformat += \"=\"\n\t}\n\tformat += cbn\n\tWriteStringAndCheck(buf, fmt.Sprintf(format, name))\n\tif len(flag.NoOptDefVal) == 0 {\n\t\tformat = \"    two_word_flags+=(\\\"--%s\" + cbn\n\t\tWriteStringAndCheck(buf, fmt.Sprintf(format, name))\n\t}\n\twriteFlagHandler(buf, \"--\"+name, flag.Annotations, cmd)\n}\n\nfunc writeLocalNonPersistentFlag(buf io.StringWriter, flag *pflag.Flag) {\n\tname := flag.Name\n\tformat := \"    local_nonpersistent_flags+=(\\\"--%[1]s\" + cbn\n\tif len(flag.NoOptDefVal) == 0 {\n\t\tformat += \"    local_nonpersistent_flags+=(\\\"--%[1]s=\" + cbn\n\t}\n\tWriteStringAndCheck(buf, fmt.Sprintf(format, name))\n\tif len(flag.Shorthand) > 0 {\n\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    local_nonpersistent_flags+=(\\\"-%s\\\")\\n\", flag.Shorthand))\n\t}\n}\n\n// prepareCustomAnnotationsForFlags setup annotations for go completions for registered flags\nfunc prepareCustomAnnotationsForFlags(cmd *Command) {\n\tflagCompletionMutex.RLock()\n\tdefer flagCompletionMutex.RUnlock()\n\tfor flag := range flagCompletionFunctions {\n\t\t// Make sure the completion script calls the __*_go_custom_completion function for\n\t\t// every registered flag.  We need to do this here (and not when the flag was registered\n\t\t// for completion) so that we can know the root command name for the prefix\n\t\t// of __<prefix>_go_custom_completion\n\t\tif flag.Annotations == nil {\n\t\t\tflag.Annotations = map[string][]string{}\n\t\t}\n\t\tflag.Annotations[BashCompCustom] = []string{fmt.Sprintf(\"__%[1]s_handle_go_custom_completion\", cmd.Root().Name())}\n\t}\n}\n\nfunc writeFlags(buf io.StringWriter, cmd *Command) {\n\tprepareCustomAnnotationsForFlags(cmd)\n\tWriteStringAndCheck(buf, `    flags=()\n    two_word_flags=()\n    local_nonpersistent_flags=()\n    flags_with_completion=()\n    flags_completion=()\n\n`)\n\n\tif cmd.DisableFlagParsing {\n\t\tWriteStringAndCheck(buf, \"    flag_parsing_disabled=1\\n\")\n\t}\n\n\tlocalNonPersistentFlags := cmd.LocalNonPersistentFlags()\n\tcmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {\n\t\tif nonCompletableFlag(flag) {\n\t\t\treturn\n\t\t}\n\t\twriteFlag(buf, flag, cmd)\n\t\tif len(flag.Shorthand) > 0 {\n\t\t\twriteShortFlag(buf, flag, cmd)\n\t\t}\n\t\t// localNonPersistentFlags are used to stop the completion of subcommands when one is set\n\t\t// if TraverseChildren is true we should allow to complete subcommands\n\t\tif localNonPersistentFlags.Lookup(flag.Name) != nil && !cmd.Root().TraverseChildren {\n\t\t\twriteLocalNonPersistentFlag(buf, flag)\n\t\t}\n\t})\n\tcmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {\n\t\tif nonCompletableFlag(flag) {\n\t\t\treturn\n\t\t}\n\t\twriteFlag(buf, flag, cmd)\n\t\tif len(flag.Shorthand) > 0 {\n\t\t\twriteShortFlag(buf, flag, cmd)\n\t\t}\n\t})\n\n\tWriteStringAndCheck(buf, \"\\n\")\n}\n\nfunc writeRequiredFlag(buf io.StringWriter, cmd *Command) {\n\tWriteStringAndCheck(buf, \"    must_have_one_flag=()\\n\")\n\tflags := cmd.NonInheritedFlags()\n\tflags.VisitAll(func(flag *pflag.Flag) {\n\t\tif nonCompletableFlag(flag) {\n\t\t\treturn\n\t\t}\n\t\tif _, ok := flag.Annotations[BashCompOneRequiredFlag]; ok {\n\t\t\tformat := \"    must_have_one_flag+=(\\\"--%s\"\n\t\t\tif flag.Value.Type() != \"bool\" {\n\t\t\t\tformat += \"=\"\n\t\t\t}\n\t\t\tformat += cbn\n\t\t\tWriteStringAndCheck(buf, fmt.Sprintf(format, flag.Name))\n\n\t\t\tif len(flag.Shorthand) > 0 {\n\t\t\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    must_have_one_flag+=(\\\"-%s\"+cbn, flag.Shorthand))\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc writeRequiredNouns(buf io.StringWriter, cmd *Command) {\n\tWriteStringAndCheck(buf, \"    must_have_one_noun=()\\n\")\n\tsort.Strings(cmd.ValidArgs)\n\tfor _, value := range cmd.ValidArgs {\n\t\t// Remove any description that may be included following a tab character.\n\t\t// Descriptions are not supported by bash completion.\n\t\tvalue = strings.SplitN(value, \"\\t\", 2)[0]\n\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    must_have_one_noun+=(%q)\\n\", value))\n\t}\n\tif cmd.ValidArgsFunction != nil {\n\t\tWriteStringAndCheck(buf, \"    has_completion_function=1\\n\")\n\t}\n}\n\nfunc writeCmdAliases(buf io.StringWriter, cmd *Command) {\n\tif len(cmd.Aliases) == 0 {\n\t\treturn\n\t}\n\n\tsort.Strings(cmd.Aliases)\n\n\tWriteStringAndCheck(buf, fmt.Sprint(`    if [[ -z \"${BASH_VERSION:-}\" || \"${BASH_VERSINFO[0]:-}\" -gt 3 ]]; then`, \"\\n\"))\n\tfor _, value := range cmd.Aliases {\n\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"        command_aliases+=(%q)\\n\", value))\n\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"        aliashash[%q]=%q\\n\", value, cmd.Name()))\n\t}\n\tWriteStringAndCheck(buf, `    fi`)\n\tWriteStringAndCheck(buf, \"\\n\")\n}\nfunc writeArgAliases(buf io.StringWriter, cmd *Command) {\n\tWriteStringAndCheck(buf, \"    noun_aliases=()\\n\")\n\tsort.Strings(cmd.ArgAliases)\n\tfor _, value := range cmd.ArgAliases {\n\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"    noun_aliases+=(%q)\\n\", value))\n\t}\n}\n\nfunc gen(buf io.StringWriter, cmd *Command) {\n\tfor _, c := range cmd.Commands() {\n\t\tif !c.IsAvailableCommand() && c != cmd.helpCommand {\n\t\t\tcontinue\n\t\t}\n\t\tgen(buf, c)\n\t}\n\tcommandName := cmd.CommandPath()\n\tcommandName = strings.ReplaceAll(commandName, \" \", \"_\")\n\tcommandName = strings.ReplaceAll(commandName, \":\", \"__\")\n\n\tif cmd.Root() == cmd {\n\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"_%s_root_command()\\n{\\n\", commandName))\n\t} else {\n\t\tWriteStringAndCheck(buf, fmt.Sprintf(\"_%s()\\n{\\n\", commandName))\n\t}\n\n\tWriteStringAndCheck(buf, fmt.Sprintf(\"    last_command=%q\\n\", commandName))\n\tWriteStringAndCheck(buf, \"\\n\")\n\tWriteStringAndCheck(buf, \"    command_aliases=()\\n\")\n\tWriteStringAndCheck(buf, \"\\n\")\n\n\twriteCommands(buf, cmd)\n\twriteFlags(buf, cmd)\n\twriteRequiredFlag(buf, cmd)\n\twriteRequiredNouns(buf, cmd)\n\twriteArgAliases(buf, cmd)\n\tWriteStringAndCheck(buf, \"}\\n\\n\")\n}\n\n// GenBashCompletion generates bash completion file and writes to the passed writer.\nfunc (c *Command) GenBashCompletion(w io.Writer) error {\n\tbuf := new(bytes.Buffer)\n\twritePreamble(buf, c.Name())\n\tif len(c.BashCompletionFunction) > 0 {\n\t\tbuf.WriteString(c.BashCompletionFunction + \"\\n\")\n\t}\n\tgen(buf, c)\n\twritePostscript(buf, c.Name())\n\n\t_, err := buf.WriteTo(w)\n\treturn err\n}\n\nfunc nonCompletableFlag(flag *pflag.Flag) bool {\n\treturn flag.Hidden || len(flag.Deprecated) > 0\n}\n\n// GenBashCompletionFile generates bash completion file.\nfunc (c *Command) GenBashCompletionFile(filename string) error {\n\toutFile, err := os.Create(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer outFile.Close()\n\n\treturn c.GenBashCompletion(outFile)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/bash_completionsV2.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cobra\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n)\n\nfunc (c *Command) genBashCompletion(w io.Writer, includeDesc bool) error {\n\tbuf := new(bytes.Buffer)\n\tgenBashComp(buf, c.Name(), includeDesc)\n\t_, err := buf.WriteTo(w)\n\treturn err\n}\n\nfunc genBashComp(buf io.StringWriter, name string, includeDesc bool) {\n\tcompCmd := ShellCompRequestCmd\n\tif !includeDesc {\n\t\tcompCmd = ShellCompNoDescRequestCmd\n\t}\n\n\tWriteStringAndCheck(buf, fmt.Sprintf(`# bash completion V2 for %-36[1]s -*- shell-script -*-\n\n__%[1]s_debug()\n{\n    if [[ -n ${BASH_COMP_DEBUG_FILE-} ]]; then\n        echo \"$*\" >> \"${BASH_COMP_DEBUG_FILE}\"\n    fi\n}\n\n# Macs have bash3 for which the bash-completion package doesn't include\n# _init_completion. This is a minimal version of that function.\n__%[1]s_init_completion()\n{\n    COMPREPLY=()\n    _get_comp_words_by_ref \"$@\" cur prev words cword\n}\n\n# This function calls the %[1]s program to obtain the completion\n# results and the directive.  It fills the 'out' and 'directive' vars.\n__%[1]s_get_completion_results() {\n    local requestComp lastParam lastChar args\n\n    # Prepare the command to request completions for the program.\n    # Calling ${words[0]} instead of directly %[1]s allows handling aliases\n    args=(\"${words[@]:1}\")\n    requestComp=\"${words[0]} %[2]s ${args[*]}\"\n\n    lastParam=${words[$((${#words[@]}-1))]}\n    lastChar=${lastParam:$((${#lastParam}-1)):1}\n    __%[1]s_debug \"lastParam ${lastParam}, lastChar ${lastChar}\"\n\n    if [[ -z ${cur} && ${lastChar} != = ]]; then\n        # If the last parameter is complete (there is a space following it)\n        # We add an extra empty parameter so we can indicate this to the go method.\n        __%[1]s_debug \"Adding extra empty parameter\"\n        requestComp=\"${requestComp} ''\"\n    fi\n\n    # When completing a flag with an = (e.g., %[1]s -n=<TAB>)\n    # bash focuses on the part after the =, so we need to remove\n    # the flag part from $cur\n    if [[ ${cur} == -*=* ]]; then\n        cur=\"${cur#*=}\"\n    fi\n\n    __%[1]s_debug \"Calling ${requestComp}\"\n    # Use eval to handle any environment variables and such\n    out=$(eval \"${requestComp}\" 2>/dev/null)\n\n    # Extract the directive integer at the very end of the output following a colon (:)\n    directive=${out##*:}\n    # Remove the directive\n    out=${out%%:*}\n    if [[ ${directive} == \"${out}\" ]]; then\n        # There is not directive specified\n        directive=0\n    fi\n    __%[1]s_debug \"The completion directive is: ${directive}\"\n    __%[1]s_debug \"The completions are: ${out}\"\n}\n\n__%[1]s_process_completion_results() {\n    local shellCompDirectiveError=%[3]d\n    local shellCompDirectiveNoSpace=%[4]d\n    local shellCompDirectiveNoFileComp=%[5]d\n    local shellCompDirectiveFilterFileExt=%[6]d\n    local shellCompDirectiveFilterDirs=%[7]d\n    local shellCompDirectiveKeepOrder=%[8]d\n\n    if (((directive & shellCompDirectiveError) != 0)); then\n        # Error code.  No completion.\n        __%[1]s_debug \"Received error from custom completion go code\"\n        return\n    else\n        if (((directive & shellCompDirectiveNoSpace) != 0)); then\n            if [[ $(type -t compopt) == builtin ]]; then\n                __%[1]s_debug \"Activating no space\"\n                compopt -o nospace\n            else\n                __%[1]s_debug \"No space directive not supported in this version of bash\"\n            fi\n        fi\n        if (((directive & shellCompDirectiveKeepOrder) != 0)); then\n            if [[ $(type -t compopt) == builtin ]]; then\n                # no sort isn't supported for bash less than < 4.4\n                if [[ ${BASH_VERSINFO[0]} -lt 4 || ( ${BASH_VERSINFO[0]} -eq 4 && ${BASH_VERSINFO[1]} -lt 4 ) ]]; then\n                    __%[1]s_debug \"No sort directive not supported in this version of bash\"\n                else\n                    __%[1]s_debug \"Activating keep order\"\n                    compopt -o nosort\n                fi\n            else\n                __%[1]s_debug \"No sort directive not supported in this version of bash\"\n            fi\n        fi\n        if (((directive & shellCompDirectiveNoFileComp) != 0)); then\n            if [[ $(type -t compopt) == builtin ]]; then\n                __%[1]s_debug \"Activating no file completion\"\n                compopt +o default\n            else\n                __%[1]s_debug \"No file completion directive not supported in this version of bash\"\n            fi\n        fi\n    fi\n\n    # Separate activeHelp from normal completions\n    local completions=()\n    local activeHelp=()\n    __%[1]s_extract_activeHelp\n\n    if (((directive & shellCompDirectiveFilterFileExt) != 0)); then\n        # File extension filtering\n        local fullFilter=\"\" filter filteringCmd\n\n        # Do not use quotes around the $completions variable or else newline\n        # characters will be kept.\n        for filter in ${completions[*]}; do\n            fullFilter+=\"$filter|\"\n        done\n\n        filteringCmd=\"_filedir $fullFilter\"\n        __%[1]s_debug \"File filtering command: $filteringCmd\"\n        $filteringCmd\n    elif (((directive & shellCompDirectiveFilterDirs) != 0)); then\n        # File completion for directories only\n\n        local subdir\n        subdir=${completions[0]}\n        if [[ -n $subdir ]]; then\n            __%[1]s_debug \"Listing directories in $subdir\"\n            pushd \"$subdir\" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return\n        else\n            __%[1]s_debug \"Listing directories in .\"\n            _filedir -d\n        fi\n    else\n        __%[1]s_handle_completion_types\n    fi\n\n    __%[1]s_handle_special_char \"$cur\" :\n    __%[1]s_handle_special_char \"$cur\" =\n\n    # Print the activeHelp statements before we finish\n    __%[1]s_handle_activeHelp\n}\n\n__%[1]s_handle_activeHelp() {\n    # Print the activeHelp statements\n    if ((${#activeHelp[*]} != 0)); then\n        if [ -z $COMP_TYPE ]; then\n            # Bash v3 does not set the COMP_TYPE variable.\n            printf \"\\n\";\n            printf \"%%s\\n\" \"${activeHelp[@]}\"\n            printf \"\\n\"\n            __%[1]s_reprint_commandLine\n            return\n        fi\n\n        # Only print ActiveHelp on the second TAB press\n        if [ $COMP_TYPE -eq 63 ]; then\n            printf \"\\n\"\n            printf \"%%s\\n\" \"${activeHelp[@]}\"\n\n            if ((${#COMPREPLY[*]} == 0)); then\n                # When there are no completion choices from the program, file completion\n                # may kick in if the program has not disabled it; in such a case, we want\n                # to know if any files will match what the user typed, so that we know if\n                # there will be completions presented, so that we know how to handle ActiveHelp.\n                # To find out, we actually trigger the file completion ourselves;\n                # the call to _filedir will fill COMPREPLY if files match.\n                if (((directive & shellCompDirectiveNoFileComp) == 0)); then\n                    __%[1]s_debug \"Listing files\"\n                    _filedir\n                fi\n            fi\n\n            if ((${#COMPREPLY[*]} != 0)); then\n                # If there are completion choices to be shown, print a delimiter.\n                # Re-printing the command-line will automatically be done\n                # by the shell when it prints the completion choices.\n                printf -- \"--\"\n            else\n                # When there are no completion choices at all, we need\n                # to re-print the command-line since the shell will\n                # not be doing it itself.\n                __%[1]s_reprint_commandLine\n            fi\n        elif [ $COMP_TYPE -eq 37 ] || [ $COMP_TYPE -eq 42 ]; then\n            # For completion type: menu-complete/menu-complete-backward and insert-completions\n            # the completions are immediately inserted into the command-line, so we first\n            # print the activeHelp message and reprint the command-line since the shell won't.\n            printf \"\\n\"\n            printf \"%%s\\n\" \"${activeHelp[@]}\"\n\n            __%[1]s_reprint_commandLine\n        fi\n    fi\n}\n\n__%[1]s_reprint_commandLine() {\n    # The prompt format is only available from bash 4.4.\n    # We test if it is available before using it.\n    if (x=${PS1@P}) 2> /dev/null; then\n        printf \"%%s\" \"${PS1@P}${COMP_LINE[@]}\"\n    else\n        # Can't print the prompt.  Just print the\n        # text the user had typed, it is workable enough.\n        printf \"%%s\" \"${COMP_LINE[@]}\"\n    fi\n}\n\n# Separate activeHelp lines from real completions.\n# Fills the $activeHelp and $completions arrays.\n__%[1]s_extract_activeHelp() {\n    local activeHelpMarker=\"%[9]s\"\n    local endIndex=${#activeHelpMarker}\n\n    while IFS='' read -r comp; do\n        [[ -z $comp ]] && continue\n\n        if [[ ${comp:0:endIndex} == $activeHelpMarker ]]; then\n            comp=${comp:endIndex}\n            __%[1]s_debug \"ActiveHelp found: $comp\"\n            if [[ -n $comp ]]; then\n                activeHelp+=(\"$comp\")\n            fi\n        else\n            # Not an activeHelp line but a normal completion\n            completions+=(\"$comp\")\n        fi\n    done <<<\"${out}\"\n}\n\n__%[1]s_handle_completion_types() {\n    __%[1]s_debug \"__%[1]s_handle_completion_types: COMP_TYPE is $COMP_TYPE\"\n\n    case $COMP_TYPE in\n    37|42)\n        # Type: menu-complete/menu-complete-backward and insert-completions\n        # If the user requested inserting one completion at a time, or all\n        # completions at once on the command-line we must remove the descriptions.\n        # https://github.com/spf13/cobra/issues/1508\n\n        # If there are no completions, we don't need to do anything\n        (( ${#completions[@]} == 0 )) && return 0\n\n        local tab=$'\\t'\n\n        # Strip any description and escape the completion to handled special characters\n        IFS=$'\\n' read -ra completions -d '' < <(printf \"%%q\\n\" \"${completions[@]%%%%$tab*}\")\n\n        # Only consider the completions that match\n        IFS=$'\\n' read -ra COMPREPLY -d '' < <(IFS=$'\\n'; compgen -W \"${completions[*]}\" -- \"${cur}\")\n\n        # compgen looses the escaping so we need to escape all completions again since they will\n        # all be inserted on the command-line.\n        IFS=$'\\n' read -ra COMPREPLY -d '' < <(printf \"%%q\\n\" \"${COMPREPLY[@]}\")\n        ;;\n\n    *)\n        # Type: complete (normal completion)\n        __%[1]s_handle_standard_completion_case\n        ;;\n    esac\n}\n\n__%[1]s_handle_standard_completion_case() {\n    local tab=$'\\t'\n\n    # If there are no completions, we don't need to do anything\n    (( ${#completions[@]} == 0 )) && return 0\n\n    # Short circuit to optimize if we don't have descriptions\n    if [[ \"${completions[*]}\" != *$tab* ]]; then\n        # First, escape the completions to handle special characters\n        IFS=$'\\n' read -ra completions -d '' < <(printf \"%%q\\n\" \"${completions[@]}\")\n        # Only consider the completions that match what the user typed\n        IFS=$'\\n' read -ra COMPREPLY -d '' < <(IFS=$'\\n'; compgen -W \"${completions[*]}\" -- \"${cur}\")\n\n        # compgen looses the escaping so, if there is only a single completion, we need to\n        # escape it again because it will be inserted on the command-line.  If there are multiple\n        # completions, we don't want to escape them because they will be printed in a list\n        # and we don't want to show escape characters in that list.\n        if (( ${#COMPREPLY[@]} == 1 )); then\n            COMPREPLY[0]=$(printf \"%%q\" \"${COMPREPLY[0]}\")\n        fi\n        return 0\n    fi\n\n    local longest=0\n    local compline\n    # Look for the longest completion so that we can format things nicely\n    while IFS='' read -r compline; do\n        [[ -z $compline ]] && continue\n\n        # Before checking if the completion matches what the user typed,\n        # we need to strip any description and escape the completion to handle special\n        # characters because those escape characters are part of what the user typed.\n        # Don't call \"printf\" in a sub-shell because it will be much slower\n        # since we are in a loop.\n        printf -v comp \"%%q\" \"${compline%%%%$tab*}\" &>/dev/null || comp=$(printf \"%%q\" \"${compline%%%%$tab*}\")\n\n        # Only consider the completions that match\n        [[ $comp == \"$cur\"* ]] || continue\n\n        # The completions matches.  Add it to the list of full completions including\n        # its description.  We don't escape the completion because it may get printed\n        # in a list if there are more than one and we don't want show escape characters\n        # in that list.\n        COMPREPLY+=(\"$compline\")\n\n        # Strip any description before checking the length, and again, don't escape\n        # the completion because this length is only used when printing the completions\n        # in a list and we don't want show escape characters in that list.\n        comp=${compline%%%%$tab*}\n        if ((${#comp}>longest)); then\n            longest=${#comp}\n        fi\n    done < <(printf \"%%s\\n\" \"${completions[@]}\")\n\n    # If there is a single completion left, remove the description text and escape any special characters\n    if ((${#COMPREPLY[*]} == 1)); then\n        __%[1]s_debug \"COMPREPLY[0]: ${COMPREPLY[0]}\"\n        COMPREPLY[0]=$(printf \"%%q\" \"${COMPREPLY[0]%%%%$tab*}\")\n        __%[1]s_debug \"Removed description from single completion, which is now: ${COMPREPLY[0]}\"\n    else\n        # Format the descriptions\n        __%[1]s_format_comp_descriptions $longest\n    fi\n}\n\n__%[1]s_handle_special_char()\n{\n    local comp=\"$1\"\n    local char=$2\n    if [[ \"$comp\" == *${char}* && \"$COMP_WORDBREAKS\" == *${char}* ]]; then\n        local word=${comp%%\"${comp##*${char}}\"}\n        local idx=${#COMPREPLY[*]}\n        while ((--idx >= 0)); do\n            COMPREPLY[idx]=${COMPREPLY[idx]#\"$word\"}\n        done\n    fi\n}\n\n__%[1]s_format_comp_descriptions()\n{\n    local tab=$'\\t'\n    local comp desc maxdesclength\n    local longest=$1\n\n    local i ci\n    for ci in ${!COMPREPLY[*]}; do\n        comp=${COMPREPLY[ci]}\n        # Properly format the description string which follows a tab character if there is one\n        if [[ \"$comp\" == *$tab* ]]; then\n            __%[1]s_debug \"Original comp: $comp\"\n            desc=${comp#*$tab}\n            comp=${comp%%%%$tab*}\n\n            # $COLUMNS stores the current shell width.\n            # Remove an extra 4 because we add 2 spaces and 2 parentheses.\n            maxdesclength=$(( COLUMNS - longest - 4 ))\n\n            # Make sure we can fit a description of at least 8 characters\n            # if we are to align the descriptions.\n            if ((maxdesclength > 8)); then\n                # Add the proper number of spaces to align the descriptions\n                for ((i = ${#comp} ; i < longest ; i++)); do\n                    comp+=\" \"\n                done\n            else\n                # Don't pad the descriptions so we can fit more text after the completion\n                maxdesclength=$(( COLUMNS - ${#comp} - 4 ))\n            fi\n\n            # If there is enough space for any description text,\n            # truncate the descriptions that are too long for the shell width\n            if ((maxdesclength > 0)); then\n                if ((${#desc} > maxdesclength)); then\n                    desc=${desc:0:$(( maxdesclength - 1 ))}\n                    desc+=\"…\"\n                fi\n                comp+=\"  ($desc)\"\n            fi\n            COMPREPLY[ci]=$comp\n            __%[1]s_debug \"Final comp: $comp\"\n        fi\n    done\n}\n\n__start_%[1]s()\n{\n    local cur prev words cword split\n\n    COMPREPLY=()\n\n    # Call _init_completion from the bash-completion package\n    # to prepare the arguments properly\n    if declare -F _init_completion >/dev/null 2>&1; then\n        _init_completion -n =: || return\n    else\n        __%[1]s_init_completion -n =: || return\n    fi\n\n    __%[1]s_debug\n    __%[1]s_debug \"========= starting completion logic ==========\"\n    __%[1]s_debug \"cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}, cword is $cword\"\n\n    # The user could have moved the cursor backwards on the command-line.\n    # We need to trigger completion from the $cword location, so we need\n    # to truncate the command-line ($words) up to the $cword location.\n    words=(\"${words[@]:0:$cword+1}\")\n    __%[1]s_debug \"Truncated words[*]: ${words[*]},\"\n\n    local out directive\n    __%[1]s_get_completion_results\n    __%[1]s_process_completion_results\n}\n\nif [[ $(type -t compopt) = \"builtin\" ]]; then\n    complete -o default -F __start_%[1]s %[1]s\nelse\n    complete -o default -o nospace -F __start_%[1]s %[1]s\nfi\n\n# ex: ts=4 sw=4 et filetype=sh\n`, name, compCmd,\n\t\tShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,\n\t\tShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, ShellCompDirectiveKeepOrder,\n\t\tactiveHelpMarker))\n}\n\n// GenBashCompletionFileV2 generates Bash completion version 2.\nfunc (c *Command) GenBashCompletionFileV2(filename string, includeDesc bool) error {\n\toutFile, err := os.Create(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer outFile.Close()\n\n\treturn c.GenBashCompletionV2(outFile, includeDesc)\n}\n\n// GenBashCompletionV2 generates Bash completion file version 2\n// and writes it to the passed writer.\nfunc (c *Command) GenBashCompletionV2(w io.Writer, includeDesc bool) error {\n\treturn c.genBashCompletion(w, includeDesc)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/cobra.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Commands similar to git, go tools and other modern CLI tools\n// inspired by go, go-Commander, gh and subcommand\n\npackage cobra\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"text/template\"\n\t\"time\"\n\t\"unicode\"\n)\n\nvar templateFuncs = template.FuncMap{\n\t\"trim\":                    strings.TrimSpace,\n\t\"trimRightSpace\":          trimRightSpace,\n\t\"trimTrailingWhitespaces\": trimRightSpace,\n\t\"appendIfNotPresent\":      appendIfNotPresent,\n\t\"rpad\":                    rpad,\n\t\"gt\":                      Gt,\n\t\"eq\":                      Eq,\n}\n\nvar initializers []func()\nvar finalizers []func()\n\nconst (\n\tdefaultPrefixMatching   = false\n\tdefaultCommandSorting   = true\n\tdefaultCaseInsensitive  = false\n\tdefaultTraverseRunHooks = false\n)\n\n// EnablePrefixMatching allows setting automatic prefix matching. Automatic prefix matching can be a dangerous thing\n// to automatically enable in CLI tools.\n// Set this to true to enable it.\nvar EnablePrefixMatching = defaultPrefixMatching\n\n// EnableCommandSorting controls sorting of the slice of commands, which is turned on by default.\n// To disable sorting, set it to false.\nvar EnableCommandSorting = defaultCommandSorting\n\n// EnableCaseInsensitive allows case-insensitive commands names. (case sensitive by default)\nvar EnableCaseInsensitive = defaultCaseInsensitive\n\n// EnableTraverseRunHooks executes persistent pre-run and post-run hooks from all parents.\n// By default this is disabled, which means only the first run hook to be found is executed.\nvar EnableTraverseRunHooks = defaultTraverseRunHooks\n\n// MousetrapHelpText enables an information splash screen on Windows\n// if the CLI is started from explorer.exe.\n// To disable the mousetrap, just set this variable to blank string (\"\").\n// Works only on Microsoft Windows.\nvar MousetrapHelpText = `This is a command line tool.\n\nYou need to open cmd.exe and run it from there.\n`\n\n// MousetrapDisplayDuration controls how long the MousetrapHelpText message is displayed on Windows\n// if the CLI is started from explorer.exe. Set to 0 to wait for the return key to be pressed.\n// To disable the mousetrap, just set MousetrapHelpText to blank string (\"\").\n// Works only on Microsoft Windows.\nvar MousetrapDisplayDuration = 5 * time.Second\n\n// AddTemplateFunc adds a template function that's available to Usage and Help\n// template generation.\nfunc AddTemplateFunc(name string, tmplFunc interface{}) {\n\ttemplateFuncs[name] = tmplFunc\n}\n\n// AddTemplateFuncs adds multiple template functions that are available to Usage and\n// Help template generation.\nfunc AddTemplateFuncs(tmplFuncs template.FuncMap) {\n\tfor k, v := range tmplFuncs {\n\t\ttemplateFuncs[k] = v\n\t}\n}\n\n// OnInitialize sets the passed functions to be run when each command's\n// Execute method is called.\nfunc OnInitialize(y ...func()) {\n\tinitializers = append(initializers, y...)\n}\n\n// OnFinalize sets the passed functions to be run when each command's\n// Execute method is terminated.\nfunc OnFinalize(y ...func()) {\n\tfinalizers = append(finalizers, y...)\n}\n\n// FIXME Gt is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra.\n\n// Gt takes two types and checks whether the first type is greater than the second. In case of types Arrays, Chans,\n// Maps and Slices, Gt will compare their lengths. Ints are compared directly while strings are first parsed as\n// ints and then compared.\nfunc Gt(a interface{}, b interface{}) bool {\n\tvar left, right int64\n\tav := reflect.ValueOf(a)\n\n\tswitch av.Kind() {\n\tcase reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:\n\t\tleft = int64(av.Len())\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tleft = av.Int()\n\tcase reflect.String:\n\t\tleft, _ = strconv.ParseInt(av.String(), 10, 64)\n\t}\n\n\tbv := reflect.ValueOf(b)\n\n\tswitch bv.Kind() {\n\tcase reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:\n\t\tright = int64(bv.Len())\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\tright = bv.Int()\n\tcase reflect.String:\n\t\tright, _ = strconv.ParseInt(bv.String(), 10, 64)\n\t}\n\n\treturn left > right\n}\n\n// FIXME Eq is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra.\n\n// Eq takes two types and checks whether they are equal. Supported types are int and string. Unsupported types will panic.\nfunc Eq(a interface{}, b interface{}) bool {\n\tav := reflect.ValueOf(a)\n\tbv := reflect.ValueOf(b)\n\n\tswitch av.Kind() {\n\tcase reflect.Array, reflect.Chan, reflect.Map, reflect.Slice:\n\t\tpanic(\"Eq called on unsupported type\")\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn av.Int() == bv.Int()\n\tcase reflect.String:\n\t\treturn av.String() == bv.String()\n\t}\n\treturn false\n}\n\nfunc trimRightSpace(s string) string {\n\treturn strings.TrimRightFunc(s, unicode.IsSpace)\n}\n\n// FIXME appendIfNotPresent is unused by cobra and should be removed in a version 2. It exists only for compatibility with users of cobra.\n\n// appendIfNotPresent will append stringToAppend to the end of s, but only if it's not yet present in s.\nfunc appendIfNotPresent(s, stringToAppend string) string {\n\tif strings.Contains(s, stringToAppend) {\n\t\treturn s\n\t}\n\treturn s + \" \" + stringToAppend\n}\n\n// rpad adds padding to the right of a string.\nfunc rpad(s string, padding int) string {\n\tformattedString := fmt.Sprintf(\"%%-%ds\", padding)\n\treturn fmt.Sprintf(formattedString, s)\n}\n\nfunc tmpl(text string) *tmplFunc {\n\treturn &tmplFunc{\n\t\ttmpl: text,\n\t\tfn: func(w io.Writer, data interface{}) error {\n\t\t\tt := template.New(\"top\")\n\t\t\tt.Funcs(templateFuncs)\n\t\t\ttemplate.Must(t.Parse(text))\n\t\t\treturn t.Execute(w, data)\n\t\t},\n\t}\n}\n\n// ld compares two strings and returns the levenshtein distance between them.\nfunc ld(s, t string, ignoreCase bool) int {\n\tif ignoreCase {\n\t\ts = strings.ToLower(s)\n\t\tt = strings.ToLower(t)\n\t}\n\td := make([][]int, len(s)+1)\n\tfor i := range d {\n\t\td[i] = make([]int, len(t)+1)\n\t\td[i][0] = i\n\t}\n\tfor j := range d[0] {\n\t\td[0][j] = j\n\t}\n\tfor j := 1; j <= len(t); j++ {\n\t\tfor i := 1; i <= len(s); i++ {\n\t\t\tif s[i-1] == t[j-1] {\n\t\t\t\td[i][j] = d[i-1][j-1]\n\t\t\t} else {\n\t\t\t\tmin := d[i-1][j]\n\t\t\t\tif d[i][j-1] < min {\n\t\t\t\t\tmin = d[i][j-1]\n\t\t\t\t}\n\t\t\t\tif d[i-1][j-1] < min {\n\t\t\t\t\tmin = d[i-1][j-1]\n\t\t\t\t}\n\t\t\t\td[i][j] = min + 1\n\t\t\t}\n\t\t}\n\n\t}\n\treturn d[len(s)][len(t)]\n}\n\nfunc stringInSlice(a string, list []string) bool {\n\tfor _, b := range list {\n\t\tif b == a {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// CheckErr prints the msg with the prefix 'Error:' and exits with error code 1. If the msg is nil, it does nothing.\nfunc CheckErr(msg interface{}) {\n\tif msg != nil {\n\t\tfmt.Fprintln(os.Stderr, \"Error:\", msg)\n\t\tos.Exit(1)\n\t}\n}\n\n// WriteStringAndCheck writes a string into a buffer, and checks if the error is not nil.\nfunc WriteStringAndCheck(b io.StringWriter, s string) {\n\t_, err := b.WriteString(s)\n\tCheckErr(err)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/command.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package cobra is a commander providing a simple interface to create powerful modern CLI interfaces.\n// In addition to providing an interface, Cobra simultaneously provides a controller to organize your application code.\npackage cobra\n\nimport (\n\t\"bytes\"\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\n\tflag \"github.com/spf13/pflag\"\n)\n\nconst (\n\tFlagSetByCobraAnnotation     = \"cobra_annotation_flag_set_by_cobra\"\n\tCommandDisplayNameAnnotation = \"cobra_annotation_command_display_name\"\n\n\thelpFlagName    = \"help\"\n\thelpCommandName = \"help\"\n)\n\n// FParseErrWhitelist configures Flag parse errors to be ignored\ntype FParseErrWhitelist flag.ParseErrorsAllowlist\n\n// Group Structure to manage groups for commands\ntype Group struct {\n\tID    string\n\tTitle string\n}\n\n// Command is just that, a command for your application.\n// E.g.  'go run ...' - 'run' is the command. Cobra requires\n// you to define the usage and description as part of your command\n// definition to ensure usability.\ntype Command struct {\n\t// Use is the one-line usage message.\n\t// Recommended syntax is as follows:\n\t//   [ ] identifies an optional argument. Arguments that are not enclosed in brackets are required.\n\t//   ... indicates that you can specify multiple values for the previous argument.\n\t//   |   indicates mutually exclusive information. You can use the argument to the left of the separator or the\n\t//       argument to the right of the separator. You cannot use both arguments in a single use of the command.\n\t//   { } delimits a set of mutually exclusive arguments when one of the arguments is required. If the arguments are\n\t//       optional, they are enclosed in brackets ([ ]).\n\t// Example: add [-F file | -D dir]... [-f format] profile\n\tUse string\n\n\t// Aliases is an array of aliases that can be used instead of the first word in Use.\n\tAliases []string\n\n\t// SuggestFor is an array of command names for which this command will be suggested -\n\t// similar to aliases but only suggests.\n\tSuggestFor []string\n\n\t// Short is the short description shown in the 'help' output.\n\tShort string\n\n\t// The group id under which this subcommand is grouped in the 'help' output of its parent.\n\tGroupID string\n\n\t// Long is the long message shown in the 'help <this-command>' output.\n\tLong string\n\n\t// Example is examples of how to use the command.\n\tExample string\n\n\t// ValidArgs is list of all valid non-flag arguments that are accepted in shell completions\n\tValidArgs []Completion\n\t// ValidArgsFunction is an optional function that provides valid non-flag arguments for shell completion.\n\t// It is a dynamic version of using ValidArgs.\n\t// Only one of ValidArgs and ValidArgsFunction can be used for a command.\n\tValidArgsFunction CompletionFunc\n\n\t// Expected arguments\n\tArgs PositionalArgs\n\n\t// ArgAliases is List of aliases for ValidArgs.\n\t// These are not suggested to the user in the shell completion,\n\t// but accepted if entered manually.\n\tArgAliases []string\n\n\t// BashCompletionFunction is custom bash functions used by the legacy bash autocompletion generator.\n\t// For portability with other shells, it is recommended to instead use ValidArgsFunction\n\tBashCompletionFunction string\n\n\t// Deprecated defines, if this command is deprecated and should print this string when used.\n\tDeprecated string\n\n\t// Annotations are key/value pairs that can be used by applications to identify or\n\t// group commands or set special options.\n\tAnnotations map[string]string\n\n\t// Version defines the version for this command. If this value is non-empty and the command does not\n\t// define a \"version\" flag, a \"version\" boolean flag will be added to the command and, if specified,\n\t// will print content of the \"Version\" variable. A shorthand \"v\" flag will also be added if the\n\t// command does not define one.\n\tVersion string\n\n\t// The *Run functions are executed in the following order:\n\t//   * PersistentPreRun()\n\t//   * PreRun()\n\t//   * Run()\n\t//   * PostRun()\n\t//   * PersistentPostRun()\n\t// All functions get the same args, the arguments after the command name.\n\t// The *PreRun and *PostRun functions will only be executed if the Run function of the current\n\t// command has been declared.\n\t//\n\t// PersistentPreRun: children of this command will inherit and execute.\n\tPersistentPreRun func(cmd *Command, args []string)\n\t// PersistentPreRunE: PersistentPreRun but returns an error.\n\tPersistentPreRunE func(cmd *Command, args []string) error\n\t// PreRun: children of this command will not inherit.\n\tPreRun func(cmd *Command, args []string)\n\t// PreRunE: PreRun but returns an error.\n\tPreRunE func(cmd *Command, args []string) error\n\t// Run: Typically the actual work function. Most commands will only implement this.\n\tRun func(cmd *Command, args []string)\n\t// RunE: Run but returns an error.\n\tRunE func(cmd *Command, args []string) error\n\t// PostRun: run after the Run command.\n\tPostRun func(cmd *Command, args []string)\n\t// PostRunE: PostRun but returns an error.\n\tPostRunE func(cmd *Command, args []string) error\n\t// PersistentPostRun: children of this command will inherit and execute after PostRun.\n\tPersistentPostRun func(cmd *Command, args []string)\n\t// PersistentPostRunE: PersistentPostRun but returns an error.\n\tPersistentPostRunE func(cmd *Command, args []string) error\n\n\t// groups for subcommands\n\tcommandgroups []*Group\n\n\t// args is actual args parsed from flags.\n\targs []string\n\t// flagErrorBuf contains all error messages from pflag.\n\tflagErrorBuf *bytes.Buffer\n\t// flags is full set of flags.\n\tflags *flag.FlagSet\n\t// pflags contains persistent flags.\n\tpflags *flag.FlagSet\n\t// lflags contains local flags.\n\t// This field does not represent internal state, it's used as a cache to optimise LocalFlags function call\n\tlflags *flag.FlagSet\n\t// iflags contains inherited flags.\n\t// This field does not represent internal state, it's used as a cache to optimise InheritedFlags function call\n\tiflags *flag.FlagSet\n\t// parentsPflags is all persistent flags of cmd's parents.\n\tparentsPflags *flag.FlagSet\n\t// globNormFunc is the global normalization function\n\t// that we can use on every pflag set and children commands\n\tglobNormFunc func(f *flag.FlagSet, name string) flag.NormalizedName\n\n\t// usageFunc is usage func defined by user.\n\tusageFunc func(*Command) error\n\t// usageTemplate is usage template defined by user.\n\tusageTemplate *tmplFunc\n\t// flagErrorFunc is func defined by user and it's called when the parsing of\n\t// flags returns an error.\n\tflagErrorFunc func(*Command, error) error\n\t// helpTemplate is help template defined by user.\n\thelpTemplate *tmplFunc\n\t// helpFunc is help func defined by user.\n\thelpFunc func(*Command, []string)\n\t// helpCommand is command with usage 'help'. If it's not defined by user,\n\t// cobra uses default help command.\n\thelpCommand *Command\n\t// helpCommandGroupID is the group id for the helpCommand\n\thelpCommandGroupID string\n\n\t// completionCommandGroupID is the group id for the completion command\n\tcompletionCommandGroupID string\n\n\t// versionTemplate is the version template defined by user.\n\tversionTemplate *tmplFunc\n\n\t// errPrefix is the error message prefix defined by user.\n\terrPrefix string\n\n\t// inReader is a reader defined by the user that replaces stdin\n\tinReader io.Reader\n\t// outWriter is a writer defined by the user that replaces stdout\n\toutWriter io.Writer\n\t// errWriter is a writer defined by the user that replaces stderr\n\terrWriter io.Writer\n\n\t// FParseErrWhitelist flag parse errors to be ignored\n\tFParseErrWhitelist FParseErrWhitelist\n\n\t// CompletionOptions is a set of options to control the handling of shell completion\n\tCompletionOptions CompletionOptions\n\n\t// commandsAreSorted defines, if command slice are sorted or not.\n\tcommandsAreSorted bool\n\t// commandCalledAs is the name or alias value used to call this command.\n\tcommandCalledAs struct {\n\t\tname   string\n\t\tcalled bool\n\t}\n\n\tctx context.Context\n\n\t// commands is the list of commands supported by this program.\n\tcommands []*Command\n\t// parent is a parent command for this command.\n\tparent *Command\n\t// Max lengths of commands' string lengths for use in padding.\n\tcommandsMaxUseLen         int\n\tcommandsMaxCommandPathLen int\n\tcommandsMaxNameLen        int\n\n\t// TraverseChildren parses flags on all parents before executing child command.\n\tTraverseChildren bool\n\n\t// Hidden defines, if this command is hidden and should NOT show up in the list of available commands.\n\tHidden bool\n\n\t// SilenceErrors is an option to quiet errors down stream.\n\tSilenceErrors bool\n\n\t// SilenceUsage is an option to silence usage when an error occurs.\n\tSilenceUsage bool\n\n\t// DisableFlagParsing disables the flag parsing.\n\t// If this is true all flags will be passed to the command as arguments.\n\tDisableFlagParsing bool\n\n\t// DisableAutoGenTag defines, if gen tag (\"Auto generated by spf13/cobra...\")\n\t// will be printed by generating docs for this command.\n\tDisableAutoGenTag bool\n\n\t// DisableFlagsInUseLine will disable the addition of [flags] to the usage\n\t// line of a command when printing help or generating docs\n\tDisableFlagsInUseLine bool\n\n\t// DisableSuggestions disables the suggestions based on Levenshtein distance\n\t// that go along with 'unknown command' messages.\n\tDisableSuggestions bool\n\n\t// SuggestionsMinimumDistance defines minimum levenshtein distance to display suggestions.\n\t// Must be > 0.\n\tSuggestionsMinimumDistance int\n}\n\n// Context returns underlying command context. If command was executed\n// with ExecuteContext or the context was set with SetContext, the\n// previously set context will be returned. Otherwise, nil is returned.\n//\n// Notice that a call to Execute and ExecuteC will replace a nil context of\n// a command with a context.Background, so a background context will be\n// returned by Context after one of these functions has been called.\nfunc (c *Command) Context() context.Context {\n\treturn c.ctx\n}\n\n// SetContext sets context for the command. This context will be overwritten by\n// Command.ExecuteContext or Command.ExecuteContextC.\nfunc (c *Command) SetContext(ctx context.Context) {\n\tc.ctx = ctx\n}\n\n// SetArgs sets arguments for the command. It is set to os.Args[1:] by default, if desired, can be overridden\n// particularly useful when testing.\nfunc (c *Command) SetArgs(a []string) {\n\tc.args = a\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\n//\n// Deprecated: Use SetOut and/or SetErr instead\nfunc (c *Command) SetOutput(output io.Writer) {\n\tc.outWriter = output\n\tc.errWriter = output\n}\n\n// SetOut sets the destination for usage messages.\n// If newOut is nil, os.Stdout is used.\nfunc (c *Command) SetOut(newOut io.Writer) {\n\tc.outWriter = newOut\n}\n\n// SetErr sets the destination for error messages.\n// If newErr is nil, os.Stderr is used.\nfunc (c *Command) SetErr(newErr io.Writer) {\n\tc.errWriter = newErr\n}\n\n// SetIn sets the source for input data\n// If newIn is nil, os.Stdin is used.\nfunc (c *Command) SetIn(newIn io.Reader) {\n\tc.inReader = newIn\n}\n\n// SetUsageFunc sets usage function. Usage can be defined by application.\nfunc (c *Command) SetUsageFunc(f func(*Command) error) {\n\tc.usageFunc = f\n}\n\n// SetUsageTemplate sets usage template. Can be defined by Application.\nfunc (c *Command) SetUsageTemplate(s string) {\n\tif s == \"\" {\n\t\tc.usageTemplate = nil\n\t\treturn\n\t}\n\tc.usageTemplate = tmpl(s)\n}\n\n// SetFlagErrorFunc sets a function to generate an error when flag parsing\n// fails.\nfunc (c *Command) SetFlagErrorFunc(f func(*Command, error) error) {\n\tc.flagErrorFunc = f\n}\n\n// SetHelpFunc sets help function. Can be defined by Application.\nfunc (c *Command) SetHelpFunc(f func(*Command, []string)) {\n\tc.helpFunc = f\n}\n\n// SetHelpCommand sets help command.\nfunc (c *Command) SetHelpCommand(cmd *Command) {\n\tc.helpCommand = cmd\n}\n\n// SetHelpCommandGroupID sets the group id of the help command.\nfunc (c *Command) SetHelpCommandGroupID(groupID string) {\n\tif c.helpCommand != nil {\n\t\tc.helpCommand.GroupID = groupID\n\t}\n\t// helpCommandGroupID is used if no helpCommand is defined by the user\n\tc.helpCommandGroupID = groupID\n}\n\n// SetCompletionCommandGroupID sets the group id of the completion command.\nfunc (c *Command) SetCompletionCommandGroupID(groupID string) {\n\t// completionCommandGroupID is used if no completion command is defined by the user\n\tc.Root().completionCommandGroupID = groupID\n}\n\n// SetHelpTemplate sets help template to be used. Application can use it to set custom template.\nfunc (c *Command) SetHelpTemplate(s string) {\n\tif s == \"\" {\n\t\tc.helpTemplate = nil\n\t\treturn\n\t}\n\tc.helpTemplate = tmpl(s)\n}\n\n// SetVersionTemplate sets version template to be used. Application can use it to set custom template.\nfunc (c *Command) SetVersionTemplate(s string) {\n\tif s == \"\" {\n\t\tc.versionTemplate = nil\n\t\treturn\n\t}\n\tc.versionTemplate = tmpl(s)\n}\n\n// SetErrPrefix sets error message prefix to be used. Application can use it to set custom prefix.\nfunc (c *Command) SetErrPrefix(s string) {\n\tc.errPrefix = s\n}\n\n// SetGlobalNormalizationFunc sets a normalization function to all flag sets and also to child commands.\n// The user should not have a cyclic dependency on commands.\nfunc (c *Command) SetGlobalNormalizationFunc(n func(f *flag.FlagSet, name string) flag.NormalizedName) {\n\tc.Flags().SetNormalizeFunc(n)\n\tc.PersistentFlags().SetNormalizeFunc(n)\n\tc.globNormFunc = n\n\n\tfor _, command := range c.commands {\n\t\tcommand.SetGlobalNormalizationFunc(n)\n\t}\n}\n\n// OutOrStdout returns output to stdout.\nfunc (c *Command) OutOrStdout() io.Writer {\n\treturn c.getOut(os.Stdout)\n}\n\n// OutOrStderr returns output to stderr\nfunc (c *Command) OutOrStderr() io.Writer {\n\treturn c.getOut(os.Stderr)\n}\n\n// ErrOrStderr returns output to stderr\nfunc (c *Command) ErrOrStderr() io.Writer {\n\treturn c.getErr(os.Stderr)\n}\n\n// InOrStdin returns input to stdin\nfunc (c *Command) InOrStdin() io.Reader {\n\treturn c.getIn(os.Stdin)\n}\n\nfunc (c *Command) getOut(def io.Writer) io.Writer {\n\tif c.outWriter != nil {\n\t\treturn c.outWriter\n\t}\n\tif c.HasParent() {\n\t\treturn c.parent.getOut(def)\n\t}\n\treturn def\n}\n\nfunc (c *Command) getErr(def io.Writer) io.Writer {\n\tif c.errWriter != nil {\n\t\treturn c.errWriter\n\t}\n\tif c.HasParent() {\n\t\treturn c.parent.getErr(def)\n\t}\n\treturn def\n}\n\nfunc (c *Command) getIn(def io.Reader) io.Reader {\n\tif c.inReader != nil {\n\t\treturn c.inReader\n\t}\n\tif c.HasParent() {\n\t\treturn c.parent.getIn(def)\n\t}\n\treturn def\n}\n\n// UsageFunc returns either the function set by SetUsageFunc for this command\n// or a parent, or it returns a default usage function.\nfunc (c *Command) UsageFunc() (f func(*Command) error) {\n\tif c.usageFunc != nil {\n\t\treturn c.usageFunc\n\t}\n\tif c.HasParent() {\n\t\treturn c.Parent().UsageFunc()\n\t}\n\treturn func(c *Command) error {\n\t\tc.mergePersistentFlags()\n\t\tfn := c.getUsageTemplateFunc()\n\t\terr := fn(c.OutOrStderr(), c)\n\t\tif err != nil {\n\t\t\tc.PrintErrln(err)\n\t\t}\n\t\treturn err\n\t}\n}\n\n// getUsageTemplateFunc returns the usage template function for the command\n// going up the command tree if necessary.\nfunc (c *Command) getUsageTemplateFunc() func(w io.Writer, data interface{}) error {\n\tif c.usageTemplate != nil {\n\t\treturn c.usageTemplate.fn\n\t}\n\n\tif c.HasParent() {\n\t\treturn c.parent.getUsageTemplateFunc()\n\t}\n\treturn defaultUsageFunc\n}\n\n// Usage puts out the usage for the command.\n// Used when a user provides invalid input.\n// Can be defined by user by overriding UsageFunc.\nfunc (c *Command) Usage() error {\n\treturn c.UsageFunc()(c)\n}\n\n// HelpFunc returns either the function set by SetHelpFunc for this command\n// or a parent, or it returns a function with default help behavior.\nfunc (c *Command) HelpFunc() func(*Command, []string) {\n\tif c.helpFunc != nil {\n\t\treturn c.helpFunc\n\t}\n\tif c.HasParent() {\n\t\treturn c.Parent().HelpFunc()\n\t}\n\treturn func(c *Command, a []string) {\n\t\tc.mergePersistentFlags()\n\t\tfn := c.getHelpTemplateFunc()\n\t\t// The help should be sent to stdout\n\t\t// See https://github.com/spf13/cobra/issues/1002\n\t\terr := fn(c.OutOrStdout(), c)\n\t\tif err != nil {\n\t\t\tc.PrintErrln(err)\n\t\t}\n\t}\n}\n\n// getHelpTemplateFunc returns the help template function for the command\n// going up the command tree if necessary.\nfunc (c *Command) getHelpTemplateFunc() func(w io.Writer, data interface{}) error {\n\tif c.helpTemplate != nil {\n\t\treturn c.helpTemplate.fn\n\t}\n\n\tif c.HasParent() {\n\t\treturn c.parent.getHelpTemplateFunc()\n\t}\n\n\treturn defaultHelpFunc\n}\n\n// Help puts out the help for the command.\n// Used when a user calls help [command].\n// Can be defined by user by overriding HelpFunc.\nfunc (c *Command) Help() error {\n\tc.HelpFunc()(c, []string{})\n\treturn nil\n}\n\n// UsageString returns usage string.\nfunc (c *Command) UsageString() string {\n\t// Storing normal writers\n\ttmpOutput := c.outWriter\n\ttmpErr := c.errWriter\n\n\tbb := new(bytes.Buffer)\n\tc.outWriter = bb\n\tc.errWriter = bb\n\n\tCheckErr(c.Usage())\n\n\t// Setting things back to normal\n\tc.outWriter = tmpOutput\n\tc.errWriter = tmpErr\n\n\treturn bb.String()\n}\n\n// FlagErrorFunc returns either the function set by SetFlagErrorFunc for this\n// command or a parent, or it returns a function which returns the original\n// error.\nfunc (c *Command) FlagErrorFunc() (f func(*Command, error) error) {\n\tif c.flagErrorFunc != nil {\n\t\treturn c.flagErrorFunc\n\t}\n\n\tif c.HasParent() {\n\t\treturn c.parent.FlagErrorFunc()\n\t}\n\treturn func(c *Command, err error) error {\n\t\treturn err\n\t}\n}\n\nconst minUsagePadding = 25\n\n// UsagePadding return padding for the usage.\nfunc (c *Command) UsagePadding() int {\n\tif c.parent == nil || minUsagePadding > c.parent.commandsMaxUseLen {\n\t\treturn minUsagePadding\n\t}\n\treturn c.parent.commandsMaxUseLen\n}\n\nconst minCommandPathPadding = 11\n\n// CommandPathPadding return padding for the command path.\nfunc (c *Command) CommandPathPadding() int {\n\tif c.parent == nil || minCommandPathPadding > c.parent.commandsMaxCommandPathLen {\n\t\treturn minCommandPathPadding\n\t}\n\treturn c.parent.commandsMaxCommandPathLen\n}\n\nconst minNamePadding = 11\n\n// NamePadding returns padding for the name.\nfunc (c *Command) NamePadding() int {\n\tif c.parent == nil || minNamePadding > c.parent.commandsMaxNameLen {\n\t\treturn minNamePadding\n\t}\n\treturn c.parent.commandsMaxNameLen\n}\n\n// UsageTemplate returns usage template for the command.\n// This function is kept for backwards-compatibility reasons.\nfunc (c *Command) UsageTemplate() string {\n\tif c.usageTemplate != nil {\n\t\treturn c.usageTemplate.tmpl\n\t}\n\n\tif c.HasParent() {\n\t\treturn c.parent.UsageTemplate()\n\t}\n\treturn defaultUsageTemplate\n}\n\n// HelpTemplate return help template for the command.\n// This function is kept for backwards-compatibility reasons.\nfunc (c *Command) HelpTemplate() string {\n\tif c.helpTemplate != nil {\n\t\treturn c.helpTemplate.tmpl\n\t}\n\n\tif c.HasParent() {\n\t\treturn c.parent.HelpTemplate()\n\t}\n\treturn defaultHelpTemplate\n}\n\n// VersionTemplate return version template for the command.\n// This function is kept for backwards-compatibility reasons.\nfunc (c *Command) VersionTemplate() string {\n\tif c.versionTemplate != nil {\n\t\treturn c.versionTemplate.tmpl\n\t}\n\n\tif c.HasParent() {\n\t\treturn c.parent.VersionTemplate()\n\t}\n\treturn defaultVersionTemplate\n}\n\n// getVersionTemplateFunc returns the version template function for the command\n// going up the command tree if necessary.\nfunc (c *Command) getVersionTemplateFunc() func(w io.Writer, data interface{}) error {\n\tif c.versionTemplate != nil {\n\t\treturn c.versionTemplate.fn\n\t}\n\n\tif c.HasParent() {\n\t\treturn c.parent.getVersionTemplateFunc()\n\t}\n\treturn defaultVersionFunc\n}\n\n// ErrPrefix return error message prefix for the command\nfunc (c *Command) ErrPrefix() string {\n\tif c.errPrefix != \"\" {\n\t\treturn c.errPrefix\n\t}\n\n\tif c.HasParent() {\n\t\treturn c.parent.ErrPrefix()\n\t}\n\treturn \"Error:\"\n}\n\nfunc hasNoOptDefVal(name string, fs *flag.FlagSet) bool {\n\tflag := fs.Lookup(name)\n\tif flag == nil {\n\t\treturn false\n\t}\n\treturn flag.NoOptDefVal != \"\"\n}\n\nfunc shortHasNoOptDefVal(name string, fs *flag.FlagSet) bool {\n\tif len(name) == 0 {\n\t\treturn false\n\t}\n\n\tflag := fs.ShorthandLookup(name[:1])\n\tif flag == nil {\n\t\treturn false\n\t}\n\treturn flag.NoOptDefVal != \"\"\n}\n\nfunc stripFlags(args []string, c *Command) []string {\n\tif len(args) == 0 {\n\t\treturn args\n\t}\n\tc.mergePersistentFlags()\n\n\tcommands := []string{}\n\tflags := c.Flags()\n\nLoop:\n\tfor len(args) > 0 {\n\t\ts := args[0]\n\t\targs = args[1:]\n\t\tswitch {\n\t\tcase s == \"--\":\n\t\t\t// \"--\" terminates the flags\n\t\t\tbreak Loop\n\t\tcase strings.HasPrefix(s, \"--\") && !strings.Contains(s, \"=\") && !hasNoOptDefVal(s[2:], flags):\n\t\t\t// If '--flag arg' then\n\t\t\t// delete arg from args.\n\t\t\tfallthrough // (do the same as below)\n\t\tcase strings.HasPrefix(s, \"-\") && !strings.Contains(s, \"=\") && len(s) == 2 && !shortHasNoOptDefVal(s[1:], flags):\n\t\t\t// If '-f arg' then\n\t\t\t// delete 'arg' from args or break the loop if len(args) <= 1.\n\t\t\tif len(args) <= 1 {\n\t\t\t\tbreak Loop\n\t\t\t} else {\n\t\t\t\targs = args[1:]\n\t\t\t\tcontinue\n\t\t\t}\n\t\tcase s != \"\" && !strings.HasPrefix(s, \"-\"):\n\t\t\tcommands = append(commands, s)\n\t\t}\n\t}\n\n\treturn commands\n}\n\n// argsMinusFirstX removes only the first x from args.  Otherwise, commands that look like\n// openshift admin policy add-role-to-user admin my-user, lose the admin argument (arg[4]).\n// Special care needs to be taken not to remove a flag value.\nfunc (c *Command) argsMinusFirstX(args []string, x string) []string {\n\tif len(args) == 0 {\n\t\treturn args\n\t}\n\tc.mergePersistentFlags()\n\tflags := c.Flags()\n\nLoop:\n\tfor pos := 0; pos < len(args); pos++ {\n\t\ts := args[pos]\n\t\tswitch {\n\t\tcase s == \"--\":\n\t\t\t// -- means we have reached the end of the parseable args. Break out of the loop now.\n\t\t\tbreak Loop\n\t\tcase strings.HasPrefix(s, \"--\") && !strings.Contains(s, \"=\") && !hasNoOptDefVal(s[2:], flags):\n\t\t\tfallthrough\n\t\tcase strings.HasPrefix(s, \"-\") && !strings.Contains(s, \"=\") && len(s) == 2 && !shortHasNoOptDefVal(s[1:], flags):\n\t\t\t// This is a flag without a default value, and an equal sign is not used. Increment pos in order to skip\n\t\t\t// over the next arg, because that is the value of this flag.\n\t\t\tpos++\n\t\t\tcontinue\n\t\tcase !strings.HasPrefix(s, \"-\"):\n\t\t\t// This is not a flag or a flag value. Check to see if it matches what we're looking for, and if so,\n\t\t\t// return the args, excluding the one at this position.\n\t\t\tif s == x {\n\t\t\t\tret := make([]string, 0, len(args)-1)\n\t\t\t\tret = append(ret, args[:pos]...)\n\t\t\t\tret = append(ret, args[pos+1:]...)\n\t\t\t\treturn ret\n\t\t\t}\n\t\t}\n\t}\n\treturn args\n}\n\nfunc isFlagArg(arg string) bool {\n\treturn ((len(arg) >= 3 && arg[0:2] == \"--\") ||\n\t\t(len(arg) >= 2 && arg[0] == '-' && arg[1] != '-'))\n}\n\n// Find the target command given the args and command tree\n// Meant to be run on the highest node. Only searches down.\nfunc (c *Command) Find(args []string) (*Command, []string, error) {\n\tvar innerfind func(*Command, []string) (*Command, []string)\n\n\tinnerfind = func(c *Command, innerArgs []string) (*Command, []string) {\n\t\targsWOflags := stripFlags(innerArgs, c)\n\t\tif len(argsWOflags) == 0 {\n\t\t\treturn c, innerArgs\n\t\t}\n\t\tnextSubCmd := argsWOflags[0]\n\n\t\tcmd := c.findNext(nextSubCmd)\n\t\tif cmd != nil {\n\t\t\treturn innerfind(cmd, c.argsMinusFirstX(innerArgs, nextSubCmd))\n\t\t}\n\t\treturn c, innerArgs\n\t}\n\n\tcommandFound, a := innerfind(c, args)\n\tif commandFound.Args == nil {\n\t\treturn commandFound, a, legacyArgs(commandFound, stripFlags(a, commandFound))\n\t}\n\treturn commandFound, a, nil\n}\n\nfunc (c *Command) findSuggestions(arg string) string {\n\tif c.DisableSuggestions {\n\t\treturn \"\"\n\t}\n\tif c.SuggestionsMinimumDistance <= 0 {\n\t\tc.SuggestionsMinimumDistance = 2\n\t}\n\tvar sb strings.Builder\n\tif suggestions := c.SuggestionsFor(arg); len(suggestions) > 0 {\n\t\tsb.WriteString(\"\\n\\nDid you mean this?\\n\")\n\t\tfor _, s := range suggestions {\n\t\t\t_, _ = fmt.Fprintf(&sb, \"\\t%v\\n\", s)\n\t\t}\n\t}\n\treturn sb.String()\n}\n\nfunc (c *Command) findNext(next string) *Command {\n\tmatches := make([]*Command, 0)\n\tfor _, cmd := range c.commands {\n\t\tif commandNameMatches(cmd.Name(), next) || cmd.HasAlias(next) {\n\t\t\tcmd.commandCalledAs.name = next\n\t\t\treturn cmd\n\t\t}\n\t\tif EnablePrefixMatching && cmd.hasNameOrAliasPrefix(next) {\n\t\t\tmatches = append(matches, cmd)\n\t\t}\n\t}\n\n\tif len(matches) == 1 {\n\t\t// Temporarily disable gosec G602, which produces a false positive.\n\t\t// See https://github.com/securego/gosec/issues/1005.\n\t\treturn matches[0] // #nosec G602\n\t}\n\n\treturn nil\n}\n\n// Traverse the command tree to find the command, and parse args for\n// each parent.\nfunc (c *Command) Traverse(args []string) (*Command, []string, error) {\n\tflags := []string{}\n\tinFlag := false\n\n\tfor i, arg := range args {\n\t\tswitch {\n\t\t// A long flag with a space separated value\n\t\tcase strings.HasPrefix(arg, \"--\") && !strings.Contains(arg, \"=\"):\n\t\t\t// TODO: this isn't quite right, we should really check ahead for 'true' or 'false'\n\t\t\tinFlag = !hasNoOptDefVal(arg[2:], c.Flags())\n\t\t\tflags = append(flags, arg)\n\t\t\tcontinue\n\t\t// A short flag with a space separated value\n\t\tcase strings.HasPrefix(arg, \"-\") && !strings.Contains(arg, \"=\") && len(arg) == 2 && !shortHasNoOptDefVal(arg[1:], c.Flags()):\n\t\t\tinFlag = true\n\t\t\tflags = append(flags, arg)\n\t\t\tcontinue\n\t\t// The value for a flag\n\t\tcase inFlag:\n\t\t\tinFlag = false\n\t\t\tflags = append(flags, arg)\n\t\t\tcontinue\n\t\t// A flag without a value, or with an `=` separated value\n\t\tcase isFlagArg(arg):\n\t\t\tflags = append(flags, arg)\n\t\t\tcontinue\n\t\t}\n\n\t\tcmd := c.findNext(arg)\n\t\tif cmd == nil {\n\t\t\treturn c, args, nil\n\t\t}\n\n\t\tif err := c.ParseFlags(flags); err != nil {\n\t\t\treturn nil, args, err\n\t\t}\n\t\treturn cmd.Traverse(args[i+1:])\n\t}\n\treturn c, args, nil\n}\n\n// SuggestionsFor provides suggestions for the typedName.\nfunc (c *Command) SuggestionsFor(typedName string) []string {\n\tsuggestions := []string{}\n\tfor _, cmd := range c.commands {\n\t\tif cmd.IsAvailableCommand() {\n\t\t\tlevenshteinDistance := ld(typedName, cmd.Name(), true)\n\t\t\tsuggestByLevenshtein := levenshteinDistance <= c.SuggestionsMinimumDistance\n\t\t\tsuggestByPrefix := strings.HasPrefix(strings.ToLower(cmd.Name()), strings.ToLower(typedName))\n\t\t\tif suggestByLevenshtein || suggestByPrefix {\n\t\t\t\tsuggestions = append(suggestions, cmd.Name())\n\t\t\t}\n\t\t\tfor _, explicitSuggestion := range cmd.SuggestFor {\n\t\t\t\tif strings.EqualFold(typedName, explicitSuggestion) {\n\t\t\t\t\tsuggestions = append(suggestions, cmd.Name())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn suggestions\n}\n\n// VisitParents visits all parents of the command and invokes fn on each parent.\nfunc (c *Command) VisitParents(fn func(*Command)) {\n\tif c.HasParent() {\n\t\tfn(c.Parent())\n\t\tc.Parent().VisitParents(fn)\n\t}\n}\n\n// Root finds root command.\nfunc (c *Command) Root() *Command {\n\tif c.HasParent() {\n\t\treturn c.Parent().Root()\n\t}\n\treturn c\n}\n\n// ArgsLenAtDash will return the length of c.Flags().Args at the moment\n// when a -- was found during args parsing.\nfunc (c *Command) ArgsLenAtDash() int {\n\treturn c.Flags().ArgsLenAtDash()\n}\n\nfunc (c *Command) execute(a []string) (err error) {\n\tif c == nil {\n\t\treturn fmt.Errorf(\"called Execute() on a nil Command\")\n\t}\n\n\tif len(c.Deprecated) > 0 {\n\t\tc.Printf(\"Command %q is deprecated, %s\\n\", c.Name(), c.Deprecated)\n\t}\n\n\t// initialize help and version flag at the last point possible to allow for user\n\t// overriding\n\tc.InitDefaultHelpFlag()\n\tc.InitDefaultVersionFlag()\n\n\terr = c.ParseFlags(a)\n\tif err != nil {\n\t\treturn c.FlagErrorFunc()(c, err)\n\t}\n\n\t// If help is called, regardless of other flags, return we want help.\n\t// Also say we need help if the command isn't runnable.\n\thelpVal, err := c.Flags().GetBool(helpFlagName)\n\tif err != nil {\n\t\t// should be impossible to get here as we always declare a help\n\t\t// flag in InitDefaultHelpFlag()\n\t\tc.Println(\"\\\"help\\\" flag declared as non-bool. Please correct your code\")\n\t\treturn err\n\t}\n\n\tif helpVal {\n\t\treturn flag.ErrHelp\n\t}\n\n\t// for back-compat, only add version flag behavior if version is defined\n\tif c.Version != \"\" {\n\t\tversionVal, err := c.Flags().GetBool(\"version\")\n\t\tif err != nil {\n\t\t\tc.Println(\"\\\"version\\\" flag declared as non-bool. Please correct your code\")\n\t\t\treturn err\n\t\t}\n\t\tif versionVal {\n\t\t\tfn := c.getVersionTemplateFunc()\n\t\t\terr := fn(c.OutOrStdout(), c)\n\t\t\tif err != nil {\n\t\t\t\tc.Println(err)\n\t\t\t}\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif !c.Runnable() {\n\t\treturn flag.ErrHelp\n\t}\n\n\tc.preRun()\n\n\tdefer c.postRun()\n\n\targWoFlags := c.Flags().Args()\n\tif c.DisableFlagParsing {\n\t\targWoFlags = a\n\t}\n\n\tif err := c.ValidateArgs(argWoFlags); err != nil {\n\t\treturn err\n\t}\n\n\tparents := make([]*Command, 0, 5)\n\tfor p := c; p != nil; p = p.Parent() {\n\t\tif EnableTraverseRunHooks {\n\t\t\t// When EnableTraverseRunHooks is set:\n\t\t\t// - Execute all persistent pre-runs from the root parent till this command.\n\t\t\t// - Execute all persistent post-runs from this command till the root parent.\n\t\t\tparents = append([]*Command{p}, parents...)\n\t\t} else {\n\t\t\t// Otherwise, execute only the first found persistent hook.\n\t\t\tparents = append(parents, p)\n\t\t}\n\t}\n\tfor _, p := range parents {\n\t\tif p.PersistentPreRunE != nil {\n\t\t\tif err := p.PersistentPreRunE(c, argWoFlags); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !EnableTraverseRunHooks {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else if p.PersistentPreRun != nil {\n\t\t\tp.PersistentPreRun(c, argWoFlags)\n\t\t\tif !EnableTraverseRunHooks {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tif c.PreRunE != nil {\n\t\tif err := c.PreRunE(c, argWoFlags); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else if c.PreRun != nil {\n\t\tc.PreRun(c, argWoFlags)\n\t}\n\n\tif err := c.ValidateRequiredFlags(); err != nil {\n\t\treturn err\n\t}\n\tif err := c.ValidateFlagGroups(); err != nil {\n\t\treturn err\n\t}\n\n\tif c.RunE != nil {\n\t\tif err := c.RunE(c, argWoFlags); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\tc.Run(c, argWoFlags)\n\t}\n\tif c.PostRunE != nil {\n\t\tif err := c.PostRunE(c, argWoFlags); err != nil {\n\t\t\treturn err\n\t\t}\n\t} else if c.PostRun != nil {\n\t\tc.PostRun(c, argWoFlags)\n\t}\n\tfor p := c; p != nil; p = p.Parent() {\n\t\tif p.PersistentPostRunE != nil {\n\t\t\tif err := p.PersistentPostRunE(c, argWoFlags); err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tif !EnableTraverseRunHooks {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else if p.PersistentPostRun != nil {\n\t\t\tp.PersistentPostRun(c, argWoFlags)\n\t\t\tif !EnableTraverseRunHooks {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc (c *Command) preRun() {\n\tfor _, x := range initializers {\n\t\tx()\n\t}\n}\n\nfunc (c *Command) postRun() {\n\tfor _, x := range finalizers {\n\t\tx()\n\t}\n}\n\n// ExecuteContext is the same as Execute(), but sets the ctx on the command.\n// Retrieve ctx by calling cmd.Context() inside your *Run lifecycle or ValidArgs\n// functions.\nfunc (c *Command) ExecuteContext(ctx context.Context) error {\n\tc.ctx = ctx\n\treturn c.Execute()\n}\n\n// Execute uses the args (os.Args[1:] by default)\n// and run through the command tree finding appropriate matches\n// for commands and then corresponding flags.\nfunc (c *Command) Execute() error {\n\t_, err := c.ExecuteC()\n\treturn err\n}\n\n// ExecuteContextC is the same as ExecuteC(), but sets the ctx on the command.\n// Retrieve ctx by calling cmd.Context() inside your *Run lifecycle or ValidArgs\n// functions.\nfunc (c *Command) ExecuteContextC(ctx context.Context) (*Command, error) {\n\tc.ctx = ctx\n\treturn c.ExecuteC()\n}\n\n// ExecuteC executes the command.\nfunc (c *Command) ExecuteC() (cmd *Command, err error) {\n\tif c.ctx == nil {\n\t\tc.ctx = context.Background()\n\t}\n\n\t// Regardless of what command execute is called on, run on Root only\n\tif c.HasParent() {\n\t\treturn c.Root().ExecuteC()\n\t}\n\n\t// windows hook\n\tif preExecHookFn != nil {\n\t\tpreExecHookFn(c)\n\t}\n\n\t// initialize help at the last point to allow for user overriding\n\tc.InitDefaultHelpCmd()\n\n\targs := c.args\n\n\t// Workaround FAIL with \"go test -v\" or \"cobra.test -test.v\", see #155\n\tif c.args == nil && filepath.Base(os.Args[0]) != \"cobra.test\" {\n\t\targs = os.Args[1:]\n\t}\n\n\t// initialize the __complete command to be used for shell completion\n\tc.initCompleteCmd(args)\n\n\t// initialize the default completion command\n\tc.InitDefaultCompletionCmd(args...)\n\n\t// Now that all commands have been created, let's make sure all groups\n\t// are properly created also\n\tc.checkCommandGroups()\n\n\tvar flags []string\n\tif c.TraverseChildren {\n\t\tcmd, flags, err = c.Traverse(args)\n\t} else {\n\t\tcmd, flags, err = c.Find(args)\n\t}\n\tif err != nil {\n\t\t// If found parse to a subcommand and then failed, talk about the subcommand\n\t\tif cmd != nil {\n\t\t\tc = cmd\n\t\t}\n\t\tif !c.SilenceErrors {\n\t\t\tc.PrintErrln(c.ErrPrefix(), err.Error())\n\t\t\tc.PrintErrf(\"Run '%v --help' for usage.\\n\", c.CommandPath())\n\t\t}\n\t\treturn c, err\n\t}\n\n\tcmd.commandCalledAs.called = true\n\tif cmd.commandCalledAs.name == \"\" {\n\t\tcmd.commandCalledAs.name = cmd.Name()\n\t}\n\n\t// We have to pass global context to children command\n\t// if context is present on the parent command.\n\tif cmd.ctx == nil {\n\t\tcmd.ctx = c.ctx\n\t}\n\n\terr = cmd.execute(flags)\n\tif err != nil {\n\t\t// Always show help if requested, even if SilenceErrors is in\n\t\t// effect\n\t\tif errors.Is(err, flag.ErrHelp) {\n\t\t\tcmd.HelpFunc()(cmd, args)\n\t\t\treturn cmd, nil\n\t\t}\n\n\t\t// If root command has SilenceErrors flagged,\n\t\t// all subcommands should respect it\n\t\tif !cmd.SilenceErrors && !c.SilenceErrors {\n\t\t\tc.PrintErrln(cmd.ErrPrefix(), err.Error())\n\t\t}\n\n\t\t// If root command has SilenceUsage flagged,\n\t\t// all subcommands should respect it\n\t\tif !cmd.SilenceUsage && !c.SilenceUsage {\n\t\t\tc.Println(cmd.UsageString())\n\t\t}\n\t}\n\treturn cmd, err\n}\n\nfunc (c *Command) ValidateArgs(args []string) error {\n\tif c.Args == nil {\n\t\treturn ArbitraryArgs(c, args)\n\t}\n\treturn c.Args(c, args)\n}\n\n// ValidateRequiredFlags validates all required flags are present and returns an error otherwise\nfunc (c *Command) ValidateRequiredFlags() error {\n\tif c.DisableFlagParsing {\n\t\treturn nil\n\t}\n\n\tflags := c.Flags()\n\tmissingFlagNames := []string{}\n\tflags.VisitAll(func(pflag *flag.Flag) {\n\t\trequiredAnnotation, found := pflag.Annotations[BashCompOneRequiredFlag]\n\t\tif !found {\n\t\t\treturn\n\t\t}\n\t\tif (requiredAnnotation[0] == \"true\") && !pflag.Changed {\n\t\t\tmissingFlagNames = append(missingFlagNames, pflag.Name)\n\t\t}\n\t})\n\n\tif len(missingFlagNames) > 0 {\n\t\treturn fmt.Errorf(`required flag(s) \"%s\" not set`, strings.Join(missingFlagNames, `\", \"`))\n\t}\n\treturn nil\n}\n\n// checkCommandGroups checks if a command has been added to a group that does not exists.\n// If so, we panic because it indicates a coding error that should be corrected.\nfunc (c *Command) checkCommandGroups() {\n\tfor _, sub := range c.commands {\n\t\t// if Group is not defined let the developer know right away\n\t\tif sub.GroupID != \"\" && !c.ContainsGroup(sub.GroupID) {\n\t\t\tpanic(fmt.Sprintf(\"group id '%s' is not defined for subcommand '%s'\", sub.GroupID, sub.CommandPath()))\n\t\t}\n\n\t\tsub.checkCommandGroups()\n\t}\n}\n\n// InitDefaultHelpFlag adds default help flag to c.\n// It is called automatically by executing the c or by calling help and usage.\n// If c already has help flag, it will do nothing.\nfunc (c *Command) InitDefaultHelpFlag() {\n\tc.mergePersistentFlags()\n\tif c.Flags().Lookup(helpFlagName) == nil {\n\t\tusage := \"help for \"\n\t\tname := c.DisplayName()\n\t\tif name == \"\" {\n\t\t\tusage += \"this command\"\n\t\t} else {\n\t\t\tusage += name\n\t\t}\n\t\tc.Flags().BoolP(helpFlagName, \"h\", false, usage)\n\t\t_ = c.Flags().SetAnnotation(helpFlagName, FlagSetByCobraAnnotation, []string{\"true\"})\n\t}\n}\n\n// InitDefaultVersionFlag adds default version flag to c.\n// It is called automatically by executing the c.\n// If c already has a version flag, it will do nothing.\n// If c.Version is empty, it will do nothing.\nfunc (c *Command) InitDefaultVersionFlag() {\n\tif c.Version == \"\" {\n\t\treturn\n\t}\n\n\tc.mergePersistentFlags()\n\tif c.Flags().Lookup(\"version\") == nil {\n\t\tusage := \"version for \"\n\t\tif c.Name() == \"\" {\n\t\t\tusage += \"this command\"\n\t\t} else {\n\t\t\tusage += c.DisplayName()\n\t\t}\n\t\tif c.Flags().ShorthandLookup(\"v\") == nil {\n\t\t\tc.Flags().BoolP(\"version\", \"v\", false, usage)\n\t\t} else {\n\t\t\tc.Flags().Bool(\"version\", false, usage)\n\t\t}\n\t\t_ = c.Flags().SetAnnotation(\"version\", FlagSetByCobraAnnotation, []string{\"true\"})\n\t}\n}\n\n// InitDefaultHelpCmd adds default help command to c.\n// It is called automatically by executing the c or by calling help and usage.\n// If c already has help command or c has no subcommands, it will do nothing.\nfunc (c *Command) InitDefaultHelpCmd() {\n\tif !c.HasSubCommands() {\n\t\treturn\n\t}\n\n\tif c.helpCommand == nil {\n\t\tc.helpCommand = &Command{\n\t\t\tUse:   \"help [command]\",\n\t\t\tShort: \"Help about any command\",\n\t\t\tLong: `Help provides help for any command in the application.\nSimply type ` + c.DisplayName() + ` help [path to command] for full details.`,\n\t\t\tValidArgsFunction: func(c *Command, args []string, toComplete string) ([]Completion, ShellCompDirective) {\n\t\t\t\tvar completions []Completion\n\t\t\t\tcmd, _, e := c.Root().Find(args)\n\t\t\t\tif e != nil {\n\t\t\t\t\treturn nil, ShellCompDirectiveNoFileComp\n\t\t\t\t}\n\t\t\t\tif cmd == nil {\n\t\t\t\t\t// Root help command.\n\t\t\t\t\tcmd = c.Root()\n\t\t\t\t}\n\t\t\t\tfor _, subCmd := range cmd.Commands() {\n\t\t\t\t\tif subCmd.IsAvailableCommand() || subCmd == cmd.helpCommand {\n\t\t\t\t\t\tif strings.HasPrefix(subCmd.Name(), toComplete) {\n\t\t\t\t\t\t\tcompletions = append(completions, CompletionWithDesc(subCmd.Name(), subCmd.Short))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn completions, ShellCompDirectiveNoFileComp\n\t\t\t},\n\t\t\tRun: func(c *Command, args []string) {\n\t\t\t\tcmd, _, e := c.Root().Find(args)\n\t\t\t\tif cmd == nil || e != nil {\n\t\t\t\t\tc.Printf(\"Unknown help topic %#q\\n\", args)\n\t\t\t\t\tCheckErr(c.Root().Usage())\n\t\t\t\t} else {\n\t\t\t\t\t// FLow the context down to be used in help text\n\t\t\t\t\tif cmd.ctx == nil {\n\t\t\t\t\t\tcmd.ctx = c.ctx\n\t\t\t\t\t}\n\n\t\t\t\t\tcmd.InitDefaultHelpFlag()    // make possible 'help' flag to be shown\n\t\t\t\t\tcmd.InitDefaultVersionFlag() // make possible 'version' flag to be shown\n\t\t\t\t\tCheckErr(cmd.Help())\n\t\t\t\t}\n\t\t\t},\n\t\t\tGroupID: c.helpCommandGroupID,\n\t\t}\n\t}\n\tc.RemoveCommand(c.helpCommand)\n\tc.AddCommand(c.helpCommand)\n}\n\n// ResetCommands delete parent, subcommand and help command from c.\nfunc (c *Command) ResetCommands() {\n\tc.parent = nil\n\tc.commands = nil\n\tc.helpCommand = nil\n\tc.parentsPflags = nil\n}\n\n// Sorts commands by their names.\ntype commandSorterByName []*Command\n\nfunc (c commandSorterByName) Len() int           { return len(c) }\nfunc (c commandSorterByName) Swap(i, j int)      { c[i], c[j] = c[j], c[i] }\nfunc (c commandSorterByName) Less(i, j int) bool { return c[i].Name() < c[j].Name() }\n\n// Commands returns a sorted slice of child commands.\nfunc (c *Command) Commands() []*Command {\n\t// do not sort commands if it already sorted or sorting was disabled\n\tif EnableCommandSorting && !c.commandsAreSorted {\n\t\tsort.Sort(commandSorterByName(c.commands))\n\t\tc.commandsAreSorted = true\n\t}\n\treturn c.commands\n}\n\n// AddCommand adds one or more commands to this parent command.\nfunc (c *Command) AddCommand(cmds ...*Command) {\n\tfor i, x := range cmds {\n\t\tif cmds[i] == c {\n\t\t\tpanic(\"Command can't be a child of itself\")\n\t\t}\n\t\tcmds[i].parent = c\n\t\t// update max lengths\n\t\tusageLen := len(x.Use)\n\t\tif usageLen > c.commandsMaxUseLen {\n\t\t\tc.commandsMaxUseLen = usageLen\n\t\t}\n\t\tcommandPathLen := len(x.CommandPath())\n\t\tif commandPathLen > c.commandsMaxCommandPathLen {\n\t\t\tc.commandsMaxCommandPathLen = commandPathLen\n\t\t}\n\t\tnameLen := len(x.Name())\n\t\tif nameLen > c.commandsMaxNameLen {\n\t\t\tc.commandsMaxNameLen = nameLen\n\t\t}\n\t\t// If global normalization function exists, update all children\n\t\tif c.globNormFunc != nil {\n\t\t\tx.SetGlobalNormalizationFunc(c.globNormFunc)\n\t\t}\n\t\tc.commands = append(c.commands, x)\n\t\tc.commandsAreSorted = false\n\t}\n}\n\n// Groups returns a slice of child command groups.\nfunc (c *Command) Groups() []*Group {\n\treturn c.commandgroups\n}\n\n// AllChildCommandsHaveGroup returns if all subcommands are assigned to a group\nfunc (c *Command) AllChildCommandsHaveGroup() bool {\n\tfor _, sub := range c.commands {\n\t\tif (sub.IsAvailableCommand() || sub == c.helpCommand) && sub.GroupID == \"\" {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// ContainsGroup return if groupID exists in the list of command groups.\nfunc (c *Command) ContainsGroup(groupID string) bool {\n\tfor _, x := range c.commandgroups {\n\t\tif x.ID == groupID {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// AddGroup adds one or more command groups to this parent command.\nfunc (c *Command) AddGroup(groups ...*Group) {\n\tc.commandgroups = append(c.commandgroups, groups...)\n}\n\n// RemoveCommand removes one or more commands from a parent command.\nfunc (c *Command) RemoveCommand(cmds ...*Command) {\n\tcommands := []*Command{}\nmain:\n\tfor _, command := range c.commands {\n\t\tfor _, cmd := range cmds {\n\t\t\tif command == cmd {\n\t\t\t\tcommand.parent = nil\n\t\t\t\tcontinue main\n\t\t\t}\n\t\t}\n\t\tcommands = append(commands, command)\n\t}\n\tc.commands = commands\n\t// recompute all lengths\n\tc.commandsMaxUseLen = 0\n\tc.commandsMaxCommandPathLen = 0\n\tc.commandsMaxNameLen = 0\n\tfor _, command := range c.commands {\n\t\tusageLen := len(command.Use)\n\t\tif usageLen > c.commandsMaxUseLen {\n\t\t\tc.commandsMaxUseLen = usageLen\n\t\t}\n\t\tcommandPathLen := len(command.CommandPath())\n\t\tif commandPathLen > c.commandsMaxCommandPathLen {\n\t\t\tc.commandsMaxCommandPathLen = commandPathLen\n\t\t}\n\t\tnameLen := len(command.Name())\n\t\tif nameLen > c.commandsMaxNameLen {\n\t\t\tc.commandsMaxNameLen = nameLen\n\t\t}\n\t}\n}\n\n// Print is a convenience method to Print to the defined output, fallback to Stderr if not set.\nfunc (c *Command) Print(i ...interface{}) {\n\tfmt.Fprint(c.OutOrStderr(), i...)\n}\n\n// Println is a convenience method to Println to the defined output, fallback to Stderr if not set.\nfunc (c *Command) Println(i ...interface{}) {\n\tc.Print(fmt.Sprintln(i...))\n}\n\n// Printf is a convenience method to Printf to the defined output, fallback to Stderr if not set.\nfunc (c *Command) Printf(format string, i ...interface{}) {\n\tc.Print(fmt.Sprintf(format, i...))\n}\n\n// PrintErr is a convenience method to Print to the defined Err output, fallback to Stderr if not set.\nfunc (c *Command) PrintErr(i ...interface{}) {\n\tfmt.Fprint(c.ErrOrStderr(), i...)\n}\n\n// PrintErrln is a convenience method to Println to the defined Err output, fallback to Stderr if not set.\nfunc (c *Command) PrintErrln(i ...interface{}) {\n\tc.PrintErr(fmt.Sprintln(i...))\n}\n\n// PrintErrf is a convenience method to Printf to the defined Err output, fallback to Stderr if not set.\nfunc (c *Command) PrintErrf(format string, i ...interface{}) {\n\tc.PrintErr(fmt.Sprintf(format, i...))\n}\n\n// CommandPath returns the full path to this command.\nfunc (c *Command) CommandPath() string {\n\tif c.HasParent() {\n\t\treturn c.Parent().CommandPath() + \" \" + c.Name()\n\t}\n\treturn c.DisplayName()\n}\n\n// DisplayName returns the name to display in help text. Returns command Name()\n// If CommandDisplayNameAnnoation is not set\nfunc (c *Command) DisplayName() string {\n\tif displayName, ok := c.Annotations[CommandDisplayNameAnnotation]; ok {\n\t\treturn displayName\n\t}\n\treturn c.Name()\n}\n\n// UseLine puts out the full usage for a given command (including parents).\nfunc (c *Command) UseLine() string {\n\tvar useline string\n\tuse := strings.Replace(c.Use, c.Name(), c.DisplayName(), 1)\n\tif c.HasParent() {\n\t\tuseline = c.parent.CommandPath() + \" \" + use\n\t} else {\n\t\tuseline = use\n\t}\n\tif c.DisableFlagsInUseLine {\n\t\treturn useline\n\t}\n\tif c.HasAvailableFlags() && !strings.Contains(useline, \"[flags]\") {\n\t\tuseline += \" [flags]\"\n\t}\n\treturn useline\n}\n\n// DebugFlags used to determine which flags have been assigned to which commands\n// and which persist.\nfunc (c *Command) DebugFlags() {\n\tc.Println(\"DebugFlags called on\", c.Name())\n\tvar debugflags func(*Command)\n\n\tdebugflags = func(x *Command) {\n\t\tif x.HasFlags() || x.HasPersistentFlags() {\n\t\t\tc.Println(x.Name())\n\t\t}\n\t\tif x.HasFlags() {\n\t\t\tx.flags.VisitAll(func(f *flag.Flag) {\n\t\t\t\tif x.HasPersistentFlags() && x.persistentFlag(f.Name) != nil {\n\t\t\t\t\tc.Println(\"  -\"+f.Shorthand+\",\", \"--\"+f.Name, \"[\"+f.DefValue+\"]\", \"\", f.Value, \"  [LP]\")\n\t\t\t\t} else {\n\t\t\t\t\tc.Println(\"  -\"+f.Shorthand+\",\", \"--\"+f.Name, \"[\"+f.DefValue+\"]\", \"\", f.Value, \"  [L]\")\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tif x.HasPersistentFlags() {\n\t\t\tx.pflags.VisitAll(func(f *flag.Flag) {\n\t\t\t\tif x.HasFlags() {\n\t\t\t\t\tif x.flags.Lookup(f.Name) == nil {\n\t\t\t\t\t\tc.Println(\"  -\"+f.Shorthand+\",\", \"--\"+f.Name, \"[\"+f.DefValue+\"]\", \"\", f.Value, \"  [P]\")\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tc.Println(\"  -\"+f.Shorthand+\",\", \"--\"+f.Name, \"[\"+f.DefValue+\"]\", \"\", f.Value, \"  [P]\")\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tc.Println(x.flagErrorBuf)\n\t\tif x.HasSubCommands() {\n\t\t\tfor _, y := range x.commands {\n\t\t\t\tdebugflags(y)\n\t\t\t}\n\t\t}\n\t}\n\n\tdebugflags(c)\n}\n\n// Name returns the command's name: the first word in the use line.\nfunc (c *Command) Name() string {\n\tname := c.Use\n\ti := strings.Index(name, \" \")\n\tif i >= 0 {\n\t\tname = name[:i]\n\t}\n\treturn name\n}\n\n// HasAlias determines if a given string is an alias of the command.\nfunc (c *Command) HasAlias(s string) bool {\n\tfor _, a := range c.Aliases {\n\t\tif commandNameMatches(a, s) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// CalledAs returns the command name or alias that was used to invoke\n// this command or an empty string if the command has not been called.\nfunc (c *Command) CalledAs() string {\n\tif c.commandCalledAs.called {\n\t\treturn c.commandCalledAs.name\n\t}\n\treturn \"\"\n}\n\n// hasNameOrAliasPrefix returns true if the Name or any of aliases start\n// with prefix\nfunc (c *Command) hasNameOrAliasPrefix(prefix string) bool {\n\tif strings.HasPrefix(c.Name(), prefix) {\n\t\tc.commandCalledAs.name = c.Name()\n\t\treturn true\n\t}\n\tfor _, alias := range c.Aliases {\n\t\tif strings.HasPrefix(alias, prefix) {\n\t\t\tc.commandCalledAs.name = alias\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// NameAndAliases returns a list of the command name and all aliases\nfunc (c *Command) NameAndAliases() string {\n\treturn strings.Join(append([]string{c.Name()}, c.Aliases...), \", \")\n}\n\n// HasExample determines if the command has example.\nfunc (c *Command) HasExample() bool {\n\treturn len(c.Example) > 0\n}\n\n// Runnable determines if the command is itself runnable.\nfunc (c *Command) Runnable() bool {\n\treturn c.Run != nil || c.RunE != nil\n}\n\n// HasSubCommands determines if the command has children commands.\nfunc (c *Command) HasSubCommands() bool {\n\treturn len(c.commands) > 0\n}\n\n// IsAvailableCommand determines if a command is available as a non-help command\n// (this includes all non deprecated/hidden commands).\nfunc (c *Command) IsAvailableCommand() bool {\n\tif len(c.Deprecated) != 0 || c.Hidden {\n\t\treturn false\n\t}\n\n\tif c.HasParent() && c.Parent().helpCommand == c {\n\t\treturn false\n\t}\n\n\tif c.Runnable() || c.HasAvailableSubCommands() {\n\t\treturn true\n\t}\n\n\treturn false\n}\n\n// IsAdditionalHelpTopicCommand determines if a command is an additional\n// help topic command; additional help topic command is determined by the\n// fact that it is NOT runnable/hidden/deprecated, and has no sub commands that\n// are runnable/hidden/deprecated.\n// Concrete example: https://github.com/spf13/cobra/issues/393#issuecomment-282741924.\nfunc (c *Command) IsAdditionalHelpTopicCommand() bool {\n\t// if a command is runnable, deprecated, or hidden it is not a 'help' command\n\tif c.Runnable() || len(c.Deprecated) != 0 || c.Hidden {\n\t\treturn false\n\t}\n\n\t// if any non-help sub commands are found, the command is not a 'help' command\n\tfor _, sub := range c.commands {\n\t\tif !sub.IsAdditionalHelpTopicCommand() {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// the command either has no sub commands, or no non-help sub commands\n\treturn true\n}\n\n// HasHelpSubCommands determines if a command has any available 'help' sub commands\n// that need to be shown in the usage/help default template under 'additional help\n// topics'.\nfunc (c *Command) HasHelpSubCommands() bool {\n\t// return true on the first found available 'help' sub command\n\tfor _, sub := range c.commands {\n\t\tif sub.IsAdditionalHelpTopicCommand() {\n\t\t\treturn true\n\t\t}\n\t}\n\n\t// the command either has no sub commands, or no available 'help' sub commands\n\treturn false\n}\n\n// HasAvailableSubCommands determines if a command has available sub commands that\n// need to be shown in the usage/help default template under 'available commands'.\nfunc (c *Command) HasAvailableSubCommands() bool {\n\t// return true on the first found available (non deprecated/help/hidden)\n\t// sub command\n\tfor _, sub := range c.commands {\n\t\tif sub.IsAvailableCommand() {\n\t\t\treturn true\n\t\t}\n\t}\n\n\t// the command either has no sub commands, or no available (non deprecated/help/hidden)\n\t// sub commands\n\treturn false\n}\n\n// HasParent determines if the command is a child command.\nfunc (c *Command) HasParent() bool {\n\treturn c.parent != nil\n}\n\n// GlobalNormalizationFunc returns the global normalization function or nil if it doesn't exist.\nfunc (c *Command) GlobalNormalizationFunc() func(f *flag.FlagSet, name string) flag.NormalizedName {\n\treturn c.globNormFunc\n}\n\n// Flags returns the complete FlagSet that applies\n// to this command (local and persistent declared here and by all parents).\nfunc (c *Command) Flags() *flag.FlagSet {\n\tif c.flags == nil {\n\t\tc.flags = flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\t\tif c.flagErrorBuf == nil {\n\t\t\tc.flagErrorBuf = new(bytes.Buffer)\n\t\t}\n\t\tc.flags.SetOutput(c.flagErrorBuf)\n\t}\n\n\treturn c.flags\n}\n\n// LocalNonPersistentFlags are flags specific to this command which will NOT persist to subcommands.\n// This function does not modify the flags of the current command, it's purpose is to return the current state.\nfunc (c *Command) LocalNonPersistentFlags() *flag.FlagSet {\n\tpersistentFlags := c.PersistentFlags()\n\n\tout := flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\tc.LocalFlags().VisitAll(func(f *flag.Flag) {\n\t\tif persistentFlags.Lookup(f.Name) == nil {\n\t\t\tout.AddFlag(f)\n\t\t}\n\t})\n\treturn out\n}\n\n// LocalFlags returns the local FlagSet specifically set in the current command.\n// This function does not modify the flags of the current command, it's purpose is to return the current state.\nfunc (c *Command) LocalFlags() *flag.FlagSet {\n\tc.mergePersistentFlags()\n\n\tif c.lflags == nil {\n\t\tc.lflags = flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\t\tif c.flagErrorBuf == nil {\n\t\t\tc.flagErrorBuf = new(bytes.Buffer)\n\t\t}\n\t\tc.lflags.SetOutput(c.flagErrorBuf)\n\t}\n\tc.lflags.SortFlags = c.Flags().SortFlags\n\tif c.globNormFunc != nil {\n\t\tc.lflags.SetNormalizeFunc(c.globNormFunc)\n\t}\n\n\taddToLocal := func(f *flag.Flag) {\n\t\t// Add the flag if it is not a parent PFlag, or it shadows a parent PFlag\n\t\tif c.lflags.Lookup(f.Name) == nil && f != c.parentsPflags.Lookup(f.Name) {\n\t\t\tc.lflags.AddFlag(f)\n\t\t}\n\t}\n\tc.Flags().VisitAll(addToLocal)\n\tc.PersistentFlags().VisitAll(addToLocal)\n\treturn c.lflags\n}\n\n// InheritedFlags returns all flags which were inherited from parent commands.\n// This function does not modify the flags of the current command, it's purpose is to return the current state.\nfunc (c *Command) InheritedFlags() *flag.FlagSet {\n\tc.mergePersistentFlags()\n\n\tif c.iflags == nil {\n\t\tc.iflags = flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\t\tif c.flagErrorBuf == nil {\n\t\t\tc.flagErrorBuf = new(bytes.Buffer)\n\t\t}\n\t\tc.iflags.SetOutput(c.flagErrorBuf)\n\t}\n\n\tlocal := c.LocalFlags()\n\tif c.globNormFunc != nil {\n\t\tc.iflags.SetNormalizeFunc(c.globNormFunc)\n\t}\n\n\tc.parentsPflags.VisitAll(func(f *flag.Flag) {\n\t\tif c.iflags.Lookup(f.Name) == nil && local.Lookup(f.Name) == nil {\n\t\t\tc.iflags.AddFlag(f)\n\t\t}\n\t})\n\treturn c.iflags\n}\n\n// NonInheritedFlags returns all flags which were not inherited from parent commands.\n// This function does not modify the flags of the current command, it's purpose is to return the current state.\nfunc (c *Command) NonInheritedFlags() *flag.FlagSet {\n\treturn c.LocalFlags()\n}\n\n// PersistentFlags returns the persistent FlagSet specifically set in the current command.\nfunc (c *Command) PersistentFlags() *flag.FlagSet {\n\tif c.pflags == nil {\n\t\tc.pflags = flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\t\tif c.flagErrorBuf == nil {\n\t\t\tc.flagErrorBuf = new(bytes.Buffer)\n\t\t}\n\t\tc.pflags.SetOutput(c.flagErrorBuf)\n\t}\n\treturn c.pflags\n}\n\n// ResetFlags deletes all flags from command.\nfunc (c *Command) ResetFlags() {\n\tc.flagErrorBuf = new(bytes.Buffer)\n\tc.flagErrorBuf.Reset()\n\tc.flags = flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\tc.flags.SetOutput(c.flagErrorBuf)\n\tc.pflags = flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\tc.pflags.SetOutput(c.flagErrorBuf)\n\n\tc.lflags = nil\n\tc.iflags = nil\n\tc.parentsPflags = nil\n}\n\n// HasFlags checks if the command contains any flags (local plus persistent from the entire structure).\nfunc (c *Command) HasFlags() bool {\n\treturn c.Flags().HasFlags()\n}\n\n// HasPersistentFlags checks if the command contains persistent flags.\nfunc (c *Command) HasPersistentFlags() bool {\n\treturn c.PersistentFlags().HasFlags()\n}\n\n// HasLocalFlags checks if the command has flags specifically declared locally.\nfunc (c *Command) HasLocalFlags() bool {\n\treturn c.LocalFlags().HasFlags()\n}\n\n// HasInheritedFlags checks if the command has flags inherited from its parent command.\nfunc (c *Command) HasInheritedFlags() bool {\n\treturn c.InheritedFlags().HasFlags()\n}\n\n// HasAvailableFlags checks if the command contains any flags (local plus persistent from the entire\n// structure) which are not hidden or deprecated.\nfunc (c *Command) HasAvailableFlags() bool {\n\treturn c.Flags().HasAvailableFlags()\n}\n\n// HasAvailablePersistentFlags checks if the command contains persistent flags which are not hidden or deprecated.\nfunc (c *Command) HasAvailablePersistentFlags() bool {\n\treturn c.PersistentFlags().HasAvailableFlags()\n}\n\n// HasAvailableLocalFlags checks if the command has flags specifically declared locally which are not hidden\n// or deprecated.\nfunc (c *Command) HasAvailableLocalFlags() bool {\n\treturn c.LocalFlags().HasAvailableFlags()\n}\n\n// HasAvailableInheritedFlags checks if the command has flags inherited from its parent command which are\n// not hidden or deprecated.\nfunc (c *Command) HasAvailableInheritedFlags() bool {\n\treturn c.InheritedFlags().HasAvailableFlags()\n}\n\n// Flag climbs up the command tree looking for matching flag.\nfunc (c *Command) Flag(name string) (flag *flag.Flag) {\n\tflag = c.Flags().Lookup(name)\n\n\tif flag == nil {\n\t\tflag = c.persistentFlag(name)\n\t}\n\n\treturn\n}\n\n// Recursively find matching persistent flag.\nfunc (c *Command) persistentFlag(name string) (flag *flag.Flag) {\n\tif c.HasPersistentFlags() {\n\t\tflag = c.PersistentFlags().Lookup(name)\n\t}\n\n\tif flag == nil {\n\t\tc.updateParentsPflags()\n\t\tflag = c.parentsPflags.Lookup(name)\n\t}\n\treturn\n}\n\n// ParseFlags parses persistent flag tree and local flags.\nfunc (c *Command) ParseFlags(args []string) error {\n\tif c.DisableFlagParsing {\n\t\treturn nil\n\t}\n\n\tif c.flagErrorBuf == nil {\n\t\tc.flagErrorBuf = new(bytes.Buffer)\n\t}\n\tbeforeErrorBufLen := c.flagErrorBuf.Len()\n\tc.mergePersistentFlags()\n\n\t// do it here after merging all flags and just before parse\n\tc.Flags().ParseErrorsAllowlist = flag.ParseErrorsAllowlist(c.FParseErrWhitelist)\n\n\terr := c.Flags().Parse(args)\n\t// Print warnings if they occurred (e.g. deprecated flag messages).\n\tif c.flagErrorBuf.Len()-beforeErrorBufLen > 0 && err == nil {\n\t\tc.Print(c.flagErrorBuf.String())\n\t}\n\n\treturn err\n}\n\n// Parent returns a commands parent command.\nfunc (c *Command) Parent() *Command {\n\treturn c.parent\n}\n\n// mergePersistentFlags merges c.PersistentFlags() to c.Flags()\n// and adds missing persistent flags of all parents.\nfunc (c *Command) mergePersistentFlags() {\n\tc.updateParentsPflags()\n\tc.Flags().AddFlagSet(c.PersistentFlags())\n\tc.Flags().AddFlagSet(c.parentsPflags)\n}\n\n// updateParentsPflags updates c.parentsPflags by adding\n// new persistent flags of all parents.\n// If c.parentsPflags == nil, it makes new.\nfunc (c *Command) updateParentsPflags() {\n\tif c.parentsPflags == nil {\n\t\tc.parentsPflags = flag.NewFlagSet(c.DisplayName(), flag.ContinueOnError)\n\t\tc.parentsPflags.SetOutput(c.flagErrorBuf)\n\t\tc.parentsPflags.SortFlags = false\n\t}\n\n\tif c.globNormFunc != nil {\n\t\tc.parentsPflags.SetNormalizeFunc(c.globNormFunc)\n\t}\n\n\tc.Root().PersistentFlags().AddFlagSet(flag.CommandLine)\n\n\tc.VisitParents(func(parent *Command) {\n\t\tc.parentsPflags.AddFlagSet(parent.PersistentFlags())\n\t})\n}\n\n// commandNameMatches checks if two command names are equal\n// taking into account case sensitivity according to\n// EnableCaseInsensitive global configuration.\nfunc commandNameMatches(s string, t string) bool {\n\tif EnableCaseInsensitive {\n\t\treturn strings.EqualFold(s, t)\n\t}\n\n\treturn s == t\n}\n\n// tmplFunc holds a template and a function that will execute said template.\ntype tmplFunc struct {\n\ttmpl string\n\tfn   func(io.Writer, interface{}) error\n}\n\nconst defaultUsageTemplate = `Usage:{{if .Runnable}}\n  {{.UseLine}}{{end}}{{if .HasAvailableSubCommands}}\n  {{.CommandPath}} [command]{{end}}{{if gt (len .Aliases) 0}}\n\nAliases:\n  {{.NameAndAliases}}{{end}}{{if .HasExample}}\n\nExamples:\n{{.Example}}{{end}}{{if .HasAvailableSubCommands}}{{$cmds := .Commands}}{{if eq (len .Groups) 0}}\n\nAvailable Commands:{{range $cmds}}{{if (or .IsAvailableCommand (eq .Name \"help\"))}}\n  {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{else}}{{range $group := .Groups}}\n\n{{.Title}}{{range $cmds}}{{if (and (eq .GroupID $group.ID) (or .IsAvailableCommand (eq .Name \"help\")))}}\n  {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{if not .AllChildCommandsHaveGroup}}\n\nAdditional Commands:{{range $cmds}}{{if (and (eq .GroupID \"\") (or .IsAvailableCommand (eq .Name \"help\")))}}\n  {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{end}}{{end}}{{if .HasAvailableLocalFlags}}\n\nFlags:\n{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasAvailableInheritedFlags}}\n\nGlobal Flags:\n{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}\n\nAdditional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}\n  {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{if .HasAvailableSubCommands}}\n\nUse \"{{.CommandPath}} [command] --help\" for more information about a command.{{end}}\n`\n\n// defaultUsageFunc is equivalent to executing defaultUsageTemplate. The two should be changed in sync.\nfunc defaultUsageFunc(w io.Writer, in interface{}) error {\n\tc := in.(*Command)\n\tfmt.Fprint(w, \"Usage:\")\n\tif c.Runnable() {\n\t\tfmt.Fprintf(w, \"\\n  %s\", c.UseLine())\n\t}\n\tif c.HasAvailableSubCommands() {\n\t\tfmt.Fprintf(w, \"\\n  %s [command]\", c.CommandPath())\n\t}\n\tif len(c.Aliases) > 0 {\n\t\tfmt.Fprintf(w, \"\\n\\nAliases:\\n\")\n\t\tfmt.Fprintf(w, \"  %s\", c.NameAndAliases())\n\t}\n\tif c.HasExample() {\n\t\tfmt.Fprintf(w, \"\\n\\nExamples:\\n\")\n\t\tfmt.Fprintf(w, \"%s\", c.Example)\n\t}\n\tif c.HasAvailableSubCommands() {\n\t\tcmds := c.Commands()\n\t\tif len(c.Groups()) == 0 {\n\t\t\tfmt.Fprintf(w, \"\\n\\nAvailable Commands:\")\n\t\t\tfor _, subcmd := range cmds {\n\t\t\t\tif subcmd.IsAvailableCommand() || subcmd.Name() == helpCommandName {\n\t\t\t\t\tfmt.Fprintf(w, \"\\n  %s %s\", rpad(subcmd.Name(), subcmd.NamePadding()), subcmd.Short)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor _, group := range c.Groups() {\n\t\t\t\tfmt.Fprintf(w, \"\\n\\n%s\", group.Title)\n\t\t\t\tfor _, subcmd := range cmds {\n\t\t\t\t\tif subcmd.GroupID == group.ID && (subcmd.IsAvailableCommand() || subcmd.Name() == helpCommandName) {\n\t\t\t\t\t\tfmt.Fprintf(w, \"\\n  %s %s\", rpad(subcmd.Name(), subcmd.NamePadding()), subcmd.Short)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !c.AllChildCommandsHaveGroup() {\n\t\t\t\tfmt.Fprintf(w, \"\\n\\nAdditional Commands:\")\n\t\t\t\tfor _, subcmd := range cmds {\n\t\t\t\t\tif subcmd.GroupID == \"\" && (subcmd.IsAvailableCommand() || subcmd.Name() == helpCommandName) {\n\t\t\t\t\t\tfmt.Fprintf(w, \"\\n  %s %s\", rpad(subcmd.Name(), subcmd.NamePadding()), subcmd.Short)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif c.HasAvailableLocalFlags() {\n\t\tfmt.Fprintf(w, \"\\n\\nFlags:\\n\")\n\t\tfmt.Fprint(w, trimRightSpace(c.LocalFlags().FlagUsages()))\n\t}\n\tif c.HasAvailableInheritedFlags() {\n\t\tfmt.Fprintf(w, \"\\n\\nGlobal Flags:\\n\")\n\t\tfmt.Fprint(w, trimRightSpace(c.InheritedFlags().FlagUsages()))\n\t}\n\tif c.HasHelpSubCommands() {\n\t\tfmt.Fprintf(w, \"\\n\\nAdditional help topics:\")\n\t\tfor _, subcmd := range c.Commands() {\n\t\t\tif subcmd.IsAdditionalHelpTopicCommand() {\n\t\t\t\tfmt.Fprintf(w, \"\\n  %s %s\", rpad(subcmd.CommandPath(), subcmd.CommandPathPadding()), subcmd.Short)\n\t\t\t}\n\t\t}\n\t}\n\tif c.HasAvailableSubCommands() {\n\t\tfmt.Fprintf(w, \"\\n\\nUse \\\"%s [command] --help\\\" for more information about a command.\", c.CommandPath())\n\t}\n\tfmt.Fprintln(w)\n\treturn nil\n}\n\nconst defaultHelpTemplate = `{{with (or .Long .Short)}}{{. | trimTrailingWhitespaces}}\n\n{{end}}{{if or .Runnable .HasSubCommands}}{{.UsageString}}{{end}}`\n\n// defaultHelpFunc is equivalent to executing defaultHelpTemplate. The two should be changed in sync.\nfunc defaultHelpFunc(w io.Writer, in interface{}) error {\n\tc := in.(*Command)\n\tusage := c.Long\n\tif usage == \"\" {\n\t\tusage = c.Short\n\t}\n\tusage = trimRightSpace(usage)\n\tif usage != \"\" {\n\t\tfmt.Fprintln(w, usage)\n\t\tfmt.Fprintln(w)\n\t}\n\tif c.Runnable() || c.HasSubCommands() {\n\t\tfmt.Fprint(w, c.UsageString())\n\t}\n\treturn nil\n}\n\nconst defaultVersionTemplate = `{{with .DisplayName}}{{printf \"%s \" .}}{{end}}{{printf \"version %s\" .Version}}\n`\n\n// defaultVersionFunc is equivalent to executing defaultVersionTemplate. The two should be changed in sync.\nfunc defaultVersionFunc(w io.Writer, in interface{}) error {\n\tc := in.(*Command)\n\t_, err := fmt.Fprintf(w, \"%s version %s\\n\", c.DisplayName(), c.Version)\n\treturn err\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/command_notwin.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n//go:build !windows\n// +build !windows\n\npackage cobra\n\nvar preExecHookFn func(*Command)\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/command_win.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n//go:build windows\n// +build windows\n\npackage cobra\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"time\"\n\n\t\"github.com/inconshreveable/mousetrap\"\n)\n\nvar preExecHookFn = preExecHook\n\nfunc preExecHook(c *Command) {\n\tif MousetrapHelpText != \"\" && mousetrap.StartedByExplorer() {\n\t\tc.Print(MousetrapHelpText)\n\t\tif MousetrapDisplayDuration > 0 {\n\t\t\ttime.Sleep(MousetrapDisplayDuration)\n\t\t} else {\n\t\t\tc.Println(\"Press return to continue...\")\n\t\t\tfmt.Scanln()\n\t\t}\n\t\tos.Exit(1)\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/completions.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cobra\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"github.com/spf13/pflag\"\n)\n\nconst (\n\t// ShellCompRequestCmd is the name of the hidden command that is used to request\n\t// completion results from the program.  It is used by the shell completion scripts.\n\tShellCompRequestCmd = \"__complete\"\n\t// ShellCompNoDescRequestCmd is the name of the hidden command that is used to request\n\t// completion results without their description.  It is used by the shell completion scripts.\n\tShellCompNoDescRequestCmd = \"__completeNoDesc\"\n)\n\n// Global map of flag completion functions. Make sure to use flagCompletionMutex before you try to read and write from it.\nvar flagCompletionFunctions = map[*pflag.Flag]CompletionFunc{}\n\n// lock for reading and writing from flagCompletionFunctions\nvar flagCompletionMutex = &sync.RWMutex{}\n\n// ShellCompDirective is a bit map representing the different behaviors the shell\n// can be instructed to have once completions have been provided.\ntype ShellCompDirective int\n\ntype flagCompError struct {\n\tsubCommand string\n\tflagName   string\n}\n\nfunc (e *flagCompError) Error() string {\n\treturn \"Subcommand '\" + e.subCommand + \"' does not support flag '\" + e.flagName + \"'\"\n}\n\nconst (\n\t// ShellCompDirectiveError indicates an error occurred and completions should be ignored.\n\tShellCompDirectiveError ShellCompDirective = 1 << iota\n\n\t// ShellCompDirectiveNoSpace indicates that the shell should not add a space\n\t// after the completion even if there is a single completion provided.\n\tShellCompDirectiveNoSpace\n\n\t// ShellCompDirectiveNoFileComp indicates that the shell should not provide\n\t// file completion even when no completion is provided.\n\tShellCompDirectiveNoFileComp\n\n\t// ShellCompDirectiveFilterFileExt indicates that the provided completions\n\t// should be used as file extension filters.\n\t// For flags, using Command.MarkFlagFilename() and Command.MarkPersistentFlagFilename()\n\t// is a shortcut to using this directive explicitly.  The BashCompFilenameExt\n\t// annotation can also be used to obtain the same behavior for flags.\n\tShellCompDirectiveFilterFileExt\n\n\t// ShellCompDirectiveFilterDirs indicates that only directory names should\n\t// be provided in file completion.  To request directory names within another\n\t// directory, the returned completions should specify the directory within\n\t// which to search.  The BashCompSubdirsInDir annotation can be used to\n\t// obtain the same behavior but only for flags.\n\tShellCompDirectiveFilterDirs\n\n\t// ShellCompDirectiveKeepOrder indicates that the shell should preserve the order\n\t// in which the completions are provided\n\tShellCompDirectiveKeepOrder\n\n\t// ===========================================================================\n\n\t// All directives using iota should be above this one.\n\t// For internal use.\n\tshellCompDirectiveMaxValue\n\n\t// ShellCompDirectiveDefault indicates to let the shell perform its default\n\t// behavior after completions have been provided.\n\t// This one must be last to avoid messing up the iota count.\n\tShellCompDirectiveDefault ShellCompDirective = 0\n)\n\nconst (\n\t// Constants for the completion command\n\tcompCmdName              = \"completion\"\n\tcompCmdNoDescFlagName    = \"no-descriptions\"\n\tcompCmdNoDescFlagDesc    = \"disable completion descriptions\"\n\tcompCmdNoDescFlagDefault = false\n)\n\n// CompletionOptions are the options to control shell completion\ntype CompletionOptions struct {\n\t// DisableDefaultCmd prevents Cobra from creating a default 'completion' command\n\tDisableDefaultCmd bool\n\t// DisableNoDescFlag prevents Cobra from creating the '--no-descriptions' flag\n\t// for shells that support completion descriptions\n\tDisableNoDescFlag bool\n\t// DisableDescriptions turns off all completion descriptions for shells\n\t// that support them\n\tDisableDescriptions bool\n\t// HiddenDefaultCmd makes the default 'completion' command hidden\n\tHiddenDefaultCmd bool\n\t// DefaultShellCompDirective sets the ShellCompDirective that is returned\n\t// if no special directive can be determined\n\tDefaultShellCompDirective *ShellCompDirective\n}\n\nfunc (receiver *CompletionOptions) SetDefaultShellCompDirective(directive ShellCompDirective) {\n\treceiver.DefaultShellCompDirective = &directive\n}\n\n// Completion is a string that can be used for completions\n//\n// two formats are supported:\n//   - the completion choice\n//   - the completion choice with a textual description (separated by a TAB).\n//\n// [CompletionWithDesc] can be used to create a completion string with a textual description.\n//\n// Note: Go type alias is used to provide a more descriptive name in the documentation, but any string can be used.\ntype Completion = string\n\n// CompletionFunc is a function that provides completion results.\ntype CompletionFunc = func(cmd *Command, args []string, toComplete string) ([]Completion, ShellCompDirective)\n\n// CompletionWithDesc returns a [Completion] with a description by using the TAB delimited format.\nfunc CompletionWithDesc(choice string, description string) Completion {\n\treturn choice + \"\\t\" + description\n}\n\n// NoFileCompletions can be used to disable file completion for commands that should\n// not trigger file completions.\n//\n// This method satisfies [CompletionFunc].\n// It can be used with [Command.RegisterFlagCompletionFunc] and for [Command.ValidArgsFunction].\nfunc NoFileCompletions(cmd *Command, args []string, toComplete string) ([]Completion, ShellCompDirective) {\n\treturn nil, ShellCompDirectiveNoFileComp\n}\n\n// FixedCompletions can be used to create a completion function which always\n// returns the same results.\n//\n// This method returns a function that satisfies [CompletionFunc]\n// It can be used with [Command.RegisterFlagCompletionFunc] and for [Command.ValidArgsFunction].\nfunc FixedCompletions(choices []Completion, directive ShellCompDirective) CompletionFunc {\n\treturn func(cmd *Command, args []string, toComplete string) ([]Completion, ShellCompDirective) {\n\t\treturn choices, directive\n\t}\n}\n\n// RegisterFlagCompletionFunc should be called to register a function to provide completion for a flag.\n//\n// You can use pre-defined completion functions such as [FixedCompletions] or [NoFileCompletions],\n// or you can define your own.\nfunc (c *Command) RegisterFlagCompletionFunc(flagName string, f CompletionFunc) error {\n\tflag := c.Flag(flagName)\n\tif flag == nil {\n\t\treturn fmt.Errorf(\"RegisterFlagCompletionFunc: flag '%s' does not exist\", flagName)\n\t}\n\tflagCompletionMutex.Lock()\n\tdefer flagCompletionMutex.Unlock()\n\n\tif _, exists := flagCompletionFunctions[flag]; exists {\n\t\treturn fmt.Errorf(\"RegisterFlagCompletionFunc: flag '%s' already registered\", flagName)\n\t}\n\tflagCompletionFunctions[flag] = f\n\treturn nil\n}\n\n// GetFlagCompletionFunc returns the completion function for the given flag of the command, if available.\nfunc (c *Command) GetFlagCompletionFunc(flagName string) (CompletionFunc, bool) {\n\tflag := c.Flag(flagName)\n\tif flag == nil {\n\t\treturn nil, false\n\t}\n\n\tflagCompletionMutex.RLock()\n\tdefer flagCompletionMutex.RUnlock()\n\n\tcompletionFunc, exists := flagCompletionFunctions[flag]\n\treturn completionFunc, exists\n}\n\n// Returns a string listing the different directive enabled in the specified parameter\nfunc (d ShellCompDirective) string() string {\n\tvar directives []string\n\tif d&ShellCompDirectiveError != 0 {\n\t\tdirectives = append(directives, \"ShellCompDirectiveError\")\n\t}\n\tif d&ShellCompDirectiveNoSpace != 0 {\n\t\tdirectives = append(directives, \"ShellCompDirectiveNoSpace\")\n\t}\n\tif d&ShellCompDirectiveNoFileComp != 0 {\n\t\tdirectives = append(directives, \"ShellCompDirectiveNoFileComp\")\n\t}\n\tif d&ShellCompDirectiveFilterFileExt != 0 {\n\t\tdirectives = append(directives, \"ShellCompDirectiveFilterFileExt\")\n\t}\n\tif d&ShellCompDirectiveFilterDirs != 0 {\n\t\tdirectives = append(directives, \"ShellCompDirectiveFilterDirs\")\n\t}\n\tif d&ShellCompDirectiveKeepOrder != 0 {\n\t\tdirectives = append(directives, \"ShellCompDirectiveKeepOrder\")\n\t}\n\tif len(directives) == 0 {\n\t\tdirectives = append(directives, \"ShellCompDirectiveDefault\")\n\t}\n\n\tif d >= shellCompDirectiveMaxValue {\n\t\treturn fmt.Sprintf(\"ERROR: unexpected ShellCompDirective value: %d\", d)\n\t}\n\treturn strings.Join(directives, \", \")\n}\n\n// initCompleteCmd adds a special hidden command that can be used to request custom completions.\nfunc (c *Command) initCompleteCmd(args []string) {\n\tcompleteCmd := &Command{\n\t\tUse:                   fmt.Sprintf(\"%s [command-line]\", ShellCompRequestCmd),\n\t\tAliases:               []string{ShellCompNoDescRequestCmd},\n\t\tDisableFlagsInUseLine: true,\n\t\tHidden:                true,\n\t\tDisableFlagParsing:    true,\n\t\tArgs:                  MinimumNArgs(1),\n\t\tShort:                 \"Request shell completion choices for the specified command-line\",\n\t\tLong: fmt.Sprintf(\"%[2]s is a special command that is used by the shell completion logic\\n%[1]s\",\n\t\t\t\"to request completion choices for the specified command-line.\", ShellCompRequestCmd),\n\t\tRun: func(cmd *Command, args []string) {\n\t\t\tfinalCmd, completions, directive, err := cmd.getCompletions(args)\n\t\t\tif err != nil {\n\t\t\t\tCompErrorln(err.Error())\n\t\t\t\t// Keep going for multiple reasons:\n\t\t\t\t// 1- There could be some valid completions even though there was an error\n\t\t\t\t// 2- Even without completions, we need to print the directive\n\t\t\t}\n\n\t\t\tnoDescriptions := cmd.CalledAs() == ShellCompNoDescRequestCmd\n\t\t\tif !noDescriptions {\n\t\t\t\tif doDescriptions, err := strconv.ParseBool(getEnvConfig(cmd, configEnvVarSuffixDescriptions)); err == nil {\n\t\t\t\t\tnoDescriptions = !doDescriptions\n\t\t\t\t}\n\t\t\t}\n\t\t\tnoActiveHelp := GetActiveHelpConfig(finalCmd) == activeHelpGlobalDisable\n\t\t\tout := finalCmd.OutOrStdout()\n\t\t\tfor _, comp := range completions {\n\t\t\t\tif noActiveHelp && strings.HasPrefix(comp, activeHelpMarker) {\n\t\t\t\t\t// Remove all activeHelp entries if it's disabled.\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif noDescriptions {\n\t\t\t\t\t// Remove any description that may be included following a tab character.\n\t\t\t\t\tcomp = strings.SplitN(comp, \"\\t\", 2)[0]\n\t\t\t\t}\n\n\t\t\t\t// Make sure we only write the first line to the output.\n\t\t\t\t// This is needed if a description contains a linebreak.\n\t\t\t\t// Otherwise the shell scripts will interpret the other lines as new flags\n\t\t\t\t// and could therefore provide a wrong completion.\n\t\t\t\tcomp = strings.SplitN(comp, \"\\n\", 2)[0]\n\n\t\t\t\t// Finally trim the completion.  This is especially important to get rid\n\t\t\t\t// of a trailing tab when there are no description following it.\n\t\t\t\t// For example, a sub-command without a description should not be completed\n\t\t\t\t// with a tab at the end (or else zsh will show a -- following it\n\t\t\t\t// although there is no description).\n\t\t\t\tcomp = strings.TrimSpace(comp)\n\n\t\t\t\t// Print each possible completion to the output for the completion script to consume.\n\t\t\t\tfmt.Fprintln(out, comp)\n\t\t\t}\n\n\t\t\t// As the last printout, print the completion directive for the completion script to parse.\n\t\t\t// The directive integer must be that last character following a single colon (:).\n\t\t\t// The completion script expects :<directive>\n\t\t\tfmt.Fprintf(out, \":%d\\n\", directive)\n\n\t\t\t// Print some helpful info to stderr for the user to understand.\n\t\t\t// Output from stderr must be ignored by the completion script.\n\t\t\tfmt.Fprintf(finalCmd.ErrOrStderr(), \"Completion ended with directive: %s\\n\", directive.string())\n\t\t},\n\t}\n\tc.AddCommand(completeCmd)\n\tsubCmd, _, err := c.Find(args)\n\tif err != nil || subCmd.Name() != ShellCompRequestCmd {\n\t\t// Only create this special command if it is actually being called.\n\t\t// This reduces possible side-effects of creating such a command;\n\t\t// for example, having this command would cause problems to a\n\t\t// cobra program that only consists of the root command, since this\n\t\t// command would cause the root command to suddenly have a subcommand.\n\t\tc.RemoveCommand(completeCmd)\n\t}\n}\n\n// SliceValue is a reduced version of [pflag.SliceValue]. It is used to detect\n// flags that accept multiple values and therefore can provide completion\n// multiple times.\ntype SliceValue interface {\n\t// GetSlice returns the flag value list as an array of strings.\n\tGetSlice() []string\n}\n\nfunc (c *Command) getCompletions(args []string) (*Command, []Completion, ShellCompDirective, error) {\n\t// The last argument, which is not completely typed by the user,\n\t// should not be part of the list of arguments\n\ttoComplete := args[len(args)-1]\n\ttrimmedArgs := args[:len(args)-1]\n\n\tvar finalCmd *Command\n\tvar finalArgs []string\n\tvar err error\n\t// Find the real command for which completion must be performed\n\t// check if we need to traverse here to parse local flags on parent commands\n\tif c.Root().TraverseChildren {\n\t\tfinalCmd, finalArgs, err = c.Root().Traverse(trimmedArgs)\n\t} else {\n\t\t// For Root commands that don't specify any value for their Args fields, when we call\n\t\t// Find(), if those Root commands don't have any sub-commands, they will accept arguments.\n\t\t// However, because we have added the __complete sub-command in the current code path, the\n\t\t// call to Find() -> legacyArgs() will return an error if there are any arguments.\n\t\t// To avoid this, we first remove the __complete command to get back to having no sub-commands.\n\t\trootCmd := c.Root()\n\t\tif len(rootCmd.Commands()) == 1 {\n\t\t\trootCmd.RemoveCommand(c)\n\t\t}\n\n\t\tfinalCmd, finalArgs, err = rootCmd.Find(trimmedArgs)\n\t}\n\tif err != nil {\n\t\t// Unable to find the real command. E.g., <program> someInvalidCmd <TAB>\n\t\treturn c, []Completion{}, ShellCompDirectiveDefault, fmt.Errorf(\"unable to find a command for arguments: %v\", trimmedArgs)\n\t}\n\tfinalCmd.ctx = c.ctx\n\n\t// These flags are normally added when `execute()` is called on `finalCmd`,\n\t// however, when doing completion, we don't call `finalCmd.execute()`.\n\t// Let's add the --help and --version flag ourselves but only if the finalCmd\n\t// has not disabled flag parsing; if flag parsing is disabled, it is up to the\n\t// finalCmd itself to handle the completion of *all* flags.\n\tif !finalCmd.DisableFlagParsing {\n\t\tfinalCmd.InitDefaultHelpFlag()\n\t\tfinalCmd.InitDefaultVersionFlag()\n\t}\n\n\t// Check if we are doing flag value completion before parsing the flags.\n\t// This is important because if we are completing a flag value, we need to also\n\t// remove the flag name argument from the list of finalArgs or else the parsing\n\t// could fail due to an invalid value (incomplete) for the flag.\n\tflag, finalArgs, toComplete, flagErr := checkIfFlagCompletion(finalCmd, finalArgs, toComplete)\n\n\t// Check if interspersed is false or -- was set on a previous arg.\n\t// This works by counting the arguments. Normally -- is not counted as arg but\n\t// if -- was already set or interspersed is false and there is already one arg then\n\t// the extra added -- is counted as arg.\n\tflagCompletion := true\n\t_ = finalCmd.ParseFlags(append(finalArgs, \"--\"))\n\tnewArgCount := finalCmd.Flags().NArg()\n\n\t// Parse the flags early so we can check if required flags are set\n\tif err = finalCmd.ParseFlags(finalArgs); err != nil {\n\t\treturn finalCmd, []Completion{}, ShellCompDirectiveDefault, fmt.Errorf(\"Error while parsing flags from args %v: %s\", finalArgs, err.Error())\n\t}\n\n\trealArgCount := finalCmd.Flags().NArg()\n\tif newArgCount > realArgCount {\n\t\t// don't do flag completion (see above)\n\t\tflagCompletion = false\n\t}\n\t// Error while attempting to parse flags\n\tif flagErr != nil {\n\t\t// If error type is flagCompError and we don't want flagCompletion we should ignore the error\n\t\tif _, ok := flagErr.(*flagCompError); !ok || flagCompletion {\n\t\t\treturn finalCmd, []Completion{}, ShellCompDirectiveDefault, flagErr\n\t\t}\n\t}\n\n\t// Look for the --help or --version flags.  If they are present,\n\t// there should be no further completions.\n\tif helpOrVersionFlagPresent(finalCmd) {\n\t\treturn finalCmd, []Completion{}, ShellCompDirectiveNoFileComp, nil\n\t}\n\n\t// We only remove the flags from the arguments if DisableFlagParsing is not set.\n\t// This is important for commands which have requested to do their own flag completion.\n\tif !finalCmd.DisableFlagParsing {\n\t\tfinalArgs = finalCmd.Flags().Args()\n\t}\n\n\tif flag != nil && flagCompletion {\n\t\t// Check if we are completing a flag value subject to annotations\n\t\tif validExts, present := flag.Annotations[BashCompFilenameExt]; present {\n\t\t\tif len(validExts) != 0 {\n\t\t\t\t// File completion filtered by extensions\n\t\t\t\treturn finalCmd, validExts, ShellCompDirectiveFilterFileExt, nil\n\t\t\t}\n\n\t\t\t// The annotation requests simple file completion.  There is no reason to do\n\t\t\t// that since it is the default behavior anyway.  Let's ignore this annotation\n\t\t\t// in case the program also registered a completion function for this flag.\n\t\t\t// Even though it is a mistake on the program's side, let's be nice when we can.\n\t\t}\n\n\t\tif subDir, present := flag.Annotations[BashCompSubdirsInDir]; present {\n\t\t\tif len(subDir) == 1 {\n\t\t\t\t// Directory completion from within a directory\n\t\t\t\treturn finalCmd, subDir, ShellCompDirectiveFilterDirs, nil\n\t\t\t}\n\t\t\t// Directory completion\n\t\t\treturn finalCmd, []Completion{}, ShellCompDirectiveFilterDirs, nil\n\t\t}\n\t}\n\n\tvar completions []Completion\n\tvar directive ShellCompDirective\n\n\t// Enforce flag groups before doing flag completions\n\tfinalCmd.enforceFlagGroupsForCompletion()\n\n\t// Note that we want to perform flagname completion even if finalCmd.DisableFlagParsing==true;\n\t// doing this allows for completion of persistent flag names even for commands that disable flag parsing.\n\t//\n\t// When doing completion of a flag name, as soon as an argument starts with\n\t// a '-' we know it is a flag.  We cannot use isFlagArg() here as it requires\n\t// the flag name to be complete\n\tif flag == nil && len(toComplete) > 0 && toComplete[0] == '-' && !strings.Contains(toComplete, \"=\") && flagCompletion {\n\t\t// First check for required flags\n\t\tcompletions = completeRequireFlags(finalCmd, toComplete)\n\n\t\t// If we have not found any required flags, only then can we show regular flags\n\t\tif len(completions) == 0 {\n\t\t\tdoCompleteFlags := func(flag *pflag.Flag) {\n\t\t\t\t_, acceptsMultiple := flag.Value.(SliceValue)\n\t\t\t\tacceptsMultiple = acceptsMultiple ||\n\t\t\t\t\tstrings.Contains(flag.Value.Type(), \"Slice\") ||\n\t\t\t\t\tstrings.Contains(flag.Value.Type(), \"Array\") ||\n\t\t\t\t\tstrings.HasPrefix(flag.Value.Type(), \"stringTo\")\n\n\t\t\t\tif !flag.Changed || acceptsMultiple {\n\t\t\t\t\t// If the flag is not already present, or if it can be specified multiple times (Array, Slice, or stringTo)\n\t\t\t\t\t// we suggest it as a completion\n\t\t\t\t\tcompletions = append(completions, getFlagNameCompletions(flag, toComplete)...)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We cannot use finalCmd.Flags() because we may not have called ParsedFlags() for commands\n\t\t\t// that have set DisableFlagParsing; it is ParseFlags() that merges the inherited and\n\t\t\t// non-inherited flags.\n\t\t\tfinalCmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {\n\t\t\t\tdoCompleteFlags(flag)\n\t\t\t})\n\t\t\t// Try to complete non-inherited flags even if DisableFlagParsing==true.\n\t\t\t// This allows programs to tell Cobra about flags for completion even\n\t\t\t// if the actual parsing of flags is not done by Cobra.\n\t\t\t// For instance, Helm uses this to provide flag name completion for\n\t\t\t// some of its plugins.\n\t\t\tfinalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {\n\t\t\t\tdoCompleteFlags(flag)\n\t\t\t})\n\t\t}\n\n\t\tdirective = ShellCompDirectiveNoFileComp\n\t\tif len(completions) == 1 && strings.HasSuffix(completions[0], \"=\") {\n\t\t\t// If there is a single completion, the shell usually adds a space\n\t\t\t// after the completion.  We don't want that if the flag ends with an =\n\t\t\tdirective = ShellCompDirectiveNoSpace\n\t\t}\n\n\t\tif !finalCmd.DisableFlagParsing {\n\t\t\t// If DisableFlagParsing==false, we have completed the flags as known by Cobra;\n\t\t\t// we can return what we found.\n\t\t\t// If DisableFlagParsing==true, Cobra may not be aware of all flags, so we\n\t\t\t// let the logic continue to see if ValidArgsFunction needs to be called.\n\t\t\treturn finalCmd, completions, directive, nil\n\t\t}\n\t} else {\n\t\tdirective = ShellCompDirectiveDefault\n\t\t// check current and parent commands for a custom DefaultShellCompDirective\n\t\tfor cmd := finalCmd; cmd != nil; cmd = cmd.parent {\n\t\t\tif cmd.CompletionOptions.DefaultShellCompDirective != nil {\n\t\t\t\tdirective = *cmd.CompletionOptions.DefaultShellCompDirective\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif flag == nil {\n\t\t\tfoundLocalNonPersistentFlag := false\n\t\t\t// If TraverseChildren is true on the root command we don't check for\n\t\t\t// local flags because we can use a local flag on a parent command\n\t\t\tif !finalCmd.Root().TraverseChildren {\n\t\t\t\t// Check if there are any local, non-persistent flags on the command-line\n\t\t\t\tlocalNonPersistentFlags := finalCmd.LocalNonPersistentFlags()\n\t\t\t\tfinalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {\n\t\t\t\t\tif localNonPersistentFlags.Lookup(flag.Name) != nil && flag.Changed {\n\t\t\t\t\t\tfoundLocalNonPersistentFlag = true\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Complete subcommand names, including the help command\n\t\t\tif len(finalArgs) == 0 && !foundLocalNonPersistentFlag {\n\t\t\t\t// We only complete sub-commands if:\n\t\t\t\t// - there are no arguments on the command-line and\n\t\t\t\t// - there are no local, non-persistent flags on the command-line or TraverseChildren is true\n\t\t\t\tfor _, subCmd := range finalCmd.Commands() {\n\t\t\t\t\tif subCmd.IsAvailableCommand() || subCmd == finalCmd.helpCommand {\n\t\t\t\t\t\tif strings.HasPrefix(subCmd.Name(), toComplete) {\n\t\t\t\t\t\t\tcompletions = append(completions, CompletionWithDesc(subCmd.Name(), subCmd.Short))\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdirective = ShellCompDirectiveNoFileComp\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Complete required flags even without the '-' prefix\n\t\t\tcompletions = append(completions, completeRequireFlags(finalCmd, toComplete)...)\n\n\t\t\t// Always complete ValidArgs, even if we are completing a subcommand name.\n\t\t\t// This is for commands that have both subcommands and ValidArgs.\n\t\t\tif len(finalCmd.ValidArgs) > 0 {\n\t\t\t\tif len(finalArgs) == 0 {\n\t\t\t\t\t// ValidArgs are only for the first argument\n\t\t\t\t\tfor _, validArg := range finalCmd.ValidArgs {\n\t\t\t\t\t\tif strings.HasPrefix(validArg, toComplete) {\n\t\t\t\t\t\t\tcompletions = append(completions, validArg)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdirective = ShellCompDirectiveNoFileComp\n\n\t\t\t\t\t// If no completions were found within commands or ValidArgs,\n\t\t\t\t\t// see if there are any ArgAliases that should be completed.\n\t\t\t\t\tif len(completions) == 0 {\n\t\t\t\t\t\tfor _, argAlias := range finalCmd.ArgAliases {\n\t\t\t\t\t\t\tif strings.HasPrefix(argAlias, toComplete) {\n\t\t\t\t\t\t\t\tcompletions = append(completions, argAlias)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If there are ValidArgs specified (even if they don't match), we stop completion.\n\t\t\t\t// Only one of ValidArgs or ValidArgsFunction can be used for a single command.\n\t\t\t\treturn finalCmd, completions, directive, nil\n\t\t\t}\n\n\t\t\t// Let the logic continue so as to add any ValidArgsFunction completions,\n\t\t\t// even if we already found sub-commands.\n\t\t\t// This is for commands that have subcommands but also specify a ValidArgsFunction.\n\t\t}\n\t}\n\n\t// Find the completion function for the flag or command\n\tvar completionFn CompletionFunc\n\tif flag != nil && flagCompletion {\n\t\tflagCompletionMutex.RLock()\n\t\tcompletionFn = flagCompletionFunctions[flag]\n\t\tflagCompletionMutex.RUnlock()\n\t} else {\n\t\tcompletionFn = finalCmd.ValidArgsFunction\n\t}\n\tif completionFn != nil {\n\t\t// Go custom completion defined for this flag or command.\n\t\t// Call the registered completion function to get the completions.\n\t\tvar comps []Completion\n\t\tcomps, directive = completionFn(finalCmd, finalArgs, toComplete)\n\t\tcompletions = append(completions, comps...)\n\t}\n\n\treturn finalCmd, completions, directive, nil\n}\n\nfunc helpOrVersionFlagPresent(cmd *Command) bool {\n\tif versionFlag := cmd.Flags().Lookup(\"version\"); versionFlag != nil &&\n\t\tlen(versionFlag.Annotations[FlagSetByCobraAnnotation]) > 0 && versionFlag.Changed {\n\t\treturn true\n\t}\n\tif helpFlag := cmd.Flags().Lookup(helpFlagName); helpFlag != nil &&\n\t\tlen(helpFlag.Annotations[FlagSetByCobraAnnotation]) > 0 && helpFlag.Changed {\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc getFlagNameCompletions(flag *pflag.Flag, toComplete string) []Completion {\n\tif nonCompletableFlag(flag) {\n\t\treturn []Completion{}\n\t}\n\n\tvar completions []Completion\n\tflagName := \"--\" + flag.Name\n\tif strings.HasPrefix(flagName, toComplete) {\n\t\t// Flag without the =\n\t\tcompletions = append(completions, CompletionWithDesc(flagName, flag.Usage))\n\n\t\t// Why suggest both long forms: --flag and --flag= ?\n\t\t// This forces the user to *always* have to type either an = or a space after the flag name.\n\t\t// Let's be nice and avoid making users have to do that.\n\t\t// Since boolean flags and shortname flags don't show the = form, let's go that route and never show it.\n\t\t// The = form will still work, we just won't suggest it.\n\t\t// This also makes the list of suggested flags shorter as we avoid all the = forms.\n\t\t//\n\t\t// if len(flag.NoOptDefVal) == 0 {\n\t\t// \t// Flag requires a value, so it can be suffixed with =\n\t\t// \tflagName += \"=\"\n\t\t// \tcompletions = append(completions, CompletionWithDesc(flagName, flag.Usage))\n\t\t// }\n\t}\n\n\tflagName = \"-\" + flag.Shorthand\n\tif len(flag.Shorthand) > 0 && strings.HasPrefix(flagName, toComplete) {\n\t\tcompletions = append(completions, CompletionWithDesc(flagName, flag.Usage))\n\t}\n\n\treturn completions\n}\n\nfunc completeRequireFlags(finalCmd *Command, toComplete string) []Completion {\n\tvar completions []Completion\n\n\tdoCompleteRequiredFlags := func(flag *pflag.Flag) {\n\t\tif _, present := flag.Annotations[BashCompOneRequiredFlag]; present {\n\t\t\tif !flag.Changed {\n\t\t\t\t// If the flag is not already present, we suggest it as a completion\n\t\t\t\tcompletions = append(completions, getFlagNameCompletions(flag, toComplete)...)\n\t\t\t}\n\t\t}\n\t}\n\n\t// We cannot use finalCmd.Flags() because we may not have called ParsedFlags() for commands\n\t// that have set DisableFlagParsing; it is ParseFlags() that merges the inherited and\n\t// non-inherited flags.\n\tfinalCmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {\n\t\tdoCompleteRequiredFlags(flag)\n\t})\n\tfinalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) {\n\t\tdoCompleteRequiredFlags(flag)\n\t})\n\n\treturn completions\n}\n\nfunc checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*pflag.Flag, []string, string, error) {\n\tif finalCmd.DisableFlagParsing {\n\t\t// We only do flag completion if we are allowed to parse flags\n\t\t// This is important for commands which have requested to do their own flag completion.\n\t\treturn nil, args, lastArg, nil\n\t}\n\n\tvar flagName string\n\ttrimmedArgs := args\n\tflagWithEqual := false\n\torgLastArg := lastArg\n\n\t// When doing completion of a flag name, as soon as an argument starts with\n\t// a '-' we know it is a flag.  We cannot use isFlagArg() here as that function\n\t// requires the flag name to be complete\n\tif len(lastArg) > 0 && lastArg[0] == '-' {\n\t\tif index := strings.Index(lastArg, \"=\"); index >= 0 {\n\t\t\t// Flag with an =\n\t\t\tif strings.HasPrefix(lastArg[:index], \"--\") {\n\t\t\t\t// Flag has full name\n\t\t\t\tflagName = lastArg[2:index]\n\t\t\t} else {\n\t\t\t\t// Flag is shorthand\n\t\t\t\t// We have to get the last shorthand flag name\n\t\t\t\t// e.g. `-asd` => d to provide the correct completion\n\t\t\t\t// https://github.com/spf13/cobra/issues/1257\n\t\t\t\tflagName = lastArg[index-1 : index]\n\t\t\t}\n\t\t\tlastArg = lastArg[index+1:]\n\t\t\tflagWithEqual = true\n\t\t} else {\n\t\t\t// Normal flag completion\n\t\t\treturn nil, args, lastArg, nil\n\t\t}\n\t}\n\n\tif len(flagName) == 0 {\n\t\tif len(args) > 0 {\n\t\t\tprevArg := args[len(args)-1]\n\t\t\tif isFlagArg(prevArg) {\n\t\t\t\t// Only consider the case where the flag does not contain an =.\n\t\t\t\t// If the flag contains an = it means it has already been fully processed,\n\t\t\t\t// so we don't need to deal with it here.\n\t\t\t\tif index := strings.Index(prevArg, \"=\"); index < 0 {\n\t\t\t\t\tif strings.HasPrefix(prevArg, \"--\") {\n\t\t\t\t\t\t// Flag has full name\n\t\t\t\t\t\tflagName = prevArg[2:]\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Flag is shorthand\n\t\t\t\t\t\t// We have to get the last shorthand flag name\n\t\t\t\t\t\t// e.g. `-asd` => d to provide the correct completion\n\t\t\t\t\t\t// https://github.com/spf13/cobra/issues/1257\n\t\t\t\t\t\tflagName = prevArg[len(prevArg)-1:]\n\t\t\t\t\t}\n\t\t\t\t\t// Remove the uncompleted flag or else there could be an error created\n\t\t\t\t\t// for an invalid value for that flag\n\t\t\t\t\ttrimmedArgs = args[:len(args)-1]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif len(flagName) == 0 {\n\t\t// Not doing flag completion\n\t\treturn nil, trimmedArgs, lastArg, nil\n\t}\n\n\tflag := findFlag(finalCmd, flagName)\n\tif flag == nil {\n\t\t// Flag not supported by this command, the interspersed option might be set so return the original args\n\t\treturn nil, args, orgLastArg, &flagCompError{subCommand: finalCmd.Name(), flagName: flagName}\n\t}\n\n\tif !flagWithEqual {\n\t\tif len(flag.NoOptDefVal) != 0 {\n\t\t\t// We had assumed dealing with a two-word flag but the flag is a boolean flag.\n\t\t\t// In that case, there is no value following it, so we are not really doing flag completion.\n\t\t\t// Reset everything to do noun completion.\n\t\t\ttrimmedArgs = args\n\t\t\tflag = nil\n\t\t}\n\t}\n\n\treturn flag, trimmedArgs, lastArg, nil\n}\n\n// InitDefaultCompletionCmd adds a default 'completion' command to c.\n// This function will do nothing if any of the following is true:\n// 1- the feature has been explicitly disabled by the program,\n// 2- c has no subcommands (to avoid creating one),\n// 3- c already has a 'completion' command provided by the program.\nfunc (c *Command) InitDefaultCompletionCmd(args ...string) {\n\tif c.CompletionOptions.DisableDefaultCmd {\n\t\treturn\n\t}\n\n\tfor _, cmd := range c.commands {\n\t\tif cmd.Name() == compCmdName || cmd.HasAlias(compCmdName) {\n\t\t\t// A completion command is already available\n\t\t\treturn\n\t\t}\n\t}\n\n\thaveNoDescFlag := !c.CompletionOptions.DisableNoDescFlag && !c.CompletionOptions.DisableDescriptions\n\n\t// Special case to know if there are sub-commands or not.\n\thasSubCommands := false\n\tfor _, cmd := range c.commands {\n\t\tif cmd.Name() != ShellCompRequestCmd && cmd.Name() != helpCommandName {\n\t\t\t// We found a real sub-command (not 'help' or '__complete')\n\t\t\thasSubCommands = true\n\t\t\tbreak\n\t\t}\n\t}\n\n\tcompletionCmd := &Command{\n\t\tUse:   compCmdName,\n\t\tShort: \"Generate the autocompletion script for the specified shell\",\n\t\tLong: fmt.Sprintf(`Generate the autocompletion script for %[1]s for the specified shell.\nSee each sub-command's help for details on how to use the generated script.\n`, c.Root().Name()),\n\t\tArgs:              NoArgs,\n\t\tValidArgsFunction: NoFileCompletions,\n\t\tHidden:            c.CompletionOptions.HiddenDefaultCmd,\n\t\tGroupID:           c.completionCommandGroupID,\n\t}\n\tc.AddCommand(completionCmd)\n\n\tif !hasSubCommands {\n\t\t// If the 'completion' command will be the only sub-command,\n\t\t// we only create it if it is actually being called.\n\t\t// This avoids breaking programs that would suddenly find themselves with\n\t\t// a subcommand, which would prevent them from accepting arguments.\n\t\t// We also create the 'completion' command if the user is triggering\n\t\t// shell completion for it (prog __complete completion '')\n\t\tsubCmd, cmdArgs, err := c.Find(args)\n\t\tif err != nil || subCmd.Name() != compCmdName &&\n\t\t\t(subCmd.Name() != ShellCompRequestCmd || len(cmdArgs) <= 1 || cmdArgs[0] != compCmdName) {\n\t\t\t// The completion command is not being called or being completed so we remove it.\n\t\t\tc.RemoveCommand(completionCmd)\n\t\t\treturn\n\t\t}\n\t}\n\n\tout := c.OutOrStdout()\n\tnoDesc := c.CompletionOptions.DisableDescriptions\n\tshortDesc := \"Generate the autocompletion script for %s\"\n\tbash := &Command{\n\t\tUse:   \"bash\",\n\t\tShort: fmt.Sprintf(shortDesc, \"bash\"),\n\t\tLong: fmt.Sprintf(`Generate the autocompletion script for the bash shell.\n\nThis script depends on the 'bash-completion' package.\nIf it is not installed already, you can install it via your OS's package manager.\n\nTo load completions in your current shell session:\n\n\tsource <(%[1]s completion bash)\n\nTo load completions for every new session, execute once:\n\n#### Linux:\n\n\t%[1]s completion bash > /etc/bash_completion.d/%[1]s\n\n#### macOS:\n\n\t%[1]s completion bash > $(brew --prefix)/etc/bash_completion.d/%[1]s\n\nYou will need to start a new shell for this setup to take effect.\n`, c.Root().Name()),\n\t\tArgs:                  NoArgs,\n\t\tDisableFlagsInUseLine: true,\n\t\tValidArgsFunction:     NoFileCompletions,\n\t\tRunE: func(cmd *Command, args []string) error {\n\t\t\treturn cmd.Root().GenBashCompletionV2(out, !noDesc)\n\t\t},\n\t}\n\tif haveNoDescFlag {\n\t\tbash.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc)\n\t}\n\n\tzsh := &Command{\n\t\tUse:   \"zsh\",\n\t\tShort: fmt.Sprintf(shortDesc, \"zsh\"),\n\t\tLong: fmt.Sprintf(`Generate the autocompletion script for the zsh shell.\n\nIf shell completion is not already enabled in your environment you will need\nto enable it.  You can execute the following once:\n\n\techo \"autoload -U compinit; compinit\" >> ~/.zshrc\n\nTo load completions in your current shell session:\n\n\tsource <(%[1]s completion zsh)\n\nTo load completions for every new session, execute once:\n\n#### Linux:\n\n\t%[1]s completion zsh > \"${fpath[1]}/_%[1]s\"\n\n#### macOS:\n\n\t%[1]s completion zsh > $(brew --prefix)/share/zsh/site-functions/_%[1]s\n\nYou will need to start a new shell for this setup to take effect.\n`, c.Root().Name()),\n\t\tArgs:              NoArgs,\n\t\tValidArgsFunction: NoFileCompletions,\n\t\tRunE: func(cmd *Command, args []string) error {\n\t\t\tif noDesc {\n\t\t\t\treturn cmd.Root().GenZshCompletionNoDesc(out)\n\t\t\t}\n\t\t\treturn cmd.Root().GenZshCompletion(out)\n\t\t},\n\t}\n\tif haveNoDescFlag {\n\t\tzsh.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc)\n\t}\n\n\tfish := &Command{\n\t\tUse:   \"fish\",\n\t\tShort: fmt.Sprintf(shortDesc, \"fish\"),\n\t\tLong: fmt.Sprintf(`Generate the autocompletion script for the fish shell.\n\nTo load completions in your current shell session:\n\n\t%[1]s completion fish | source\n\nTo load completions for every new session, execute once:\n\n\t%[1]s completion fish > ~/.config/fish/completions/%[1]s.fish\n\nYou will need to start a new shell for this setup to take effect.\n`, c.Root().Name()),\n\t\tArgs:              NoArgs,\n\t\tValidArgsFunction: NoFileCompletions,\n\t\tRunE: func(cmd *Command, args []string) error {\n\t\t\treturn cmd.Root().GenFishCompletion(out, !noDesc)\n\t\t},\n\t}\n\tif haveNoDescFlag {\n\t\tfish.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc)\n\t}\n\n\tpowershell := &Command{\n\t\tUse:   \"powershell\",\n\t\tShort: fmt.Sprintf(shortDesc, \"powershell\"),\n\t\tLong: fmt.Sprintf(`Generate the autocompletion script for powershell.\n\nTo load completions in your current shell session:\n\n\t%[1]s completion powershell | Out-String | Invoke-Expression\n\nTo load completions for every new session, add the output of the above command\nto your powershell profile.\n`, c.Root().Name()),\n\t\tArgs:              NoArgs,\n\t\tValidArgsFunction: NoFileCompletions,\n\t\tRunE: func(cmd *Command, args []string) error {\n\t\t\tif noDesc {\n\t\t\t\treturn cmd.Root().GenPowerShellCompletion(out)\n\t\t\t}\n\t\t\treturn cmd.Root().GenPowerShellCompletionWithDesc(out)\n\n\t\t},\n\t}\n\tif haveNoDescFlag {\n\t\tpowershell.Flags().BoolVar(&noDesc, compCmdNoDescFlagName, compCmdNoDescFlagDefault, compCmdNoDescFlagDesc)\n\t}\n\n\tcompletionCmd.AddCommand(bash, zsh, fish, powershell)\n}\n\nfunc findFlag(cmd *Command, name string) *pflag.Flag {\n\tflagSet := cmd.Flags()\n\tif len(name) == 1 {\n\t\t// First convert the short flag into a long flag\n\t\t// as the cmd.Flag() search only accepts long flags\n\t\tif short := flagSet.ShorthandLookup(name); short != nil {\n\t\t\tname = short.Name\n\t\t} else {\n\t\t\tset := cmd.InheritedFlags()\n\t\t\tif short = set.ShorthandLookup(name); short != nil {\n\t\t\t\tname = short.Name\n\t\t\t} else {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t}\n\t}\n\treturn cmd.Flag(name)\n}\n\n// CompDebug prints the specified string to the same file as where the\n// completion script prints its logs.\n// Note that completion printouts should never be on stdout as they would\n// be wrongly interpreted as actual completion choices by the completion script.\nfunc CompDebug(msg string, printToStdErr bool) {\n\tmsg = fmt.Sprintf(\"[Debug] %s\", msg)\n\n\t// Such logs are only printed when the user has set the environment\n\t// variable BASH_COMP_DEBUG_FILE to the path of some file to be used.\n\tif path := os.Getenv(\"BASH_COMP_DEBUG_FILE\"); path != \"\" {\n\t\tf, err := os.OpenFile(path,\n\t\t\tos.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)\n\t\tif err == nil {\n\t\t\tdefer f.Close()\n\t\t\tWriteStringAndCheck(f, msg)\n\t\t}\n\t}\n\n\tif printToStdErr {\n\t\t// Must print to stderr for this not to be read by the completion script.\n\t\tfmt.Fprint(os.Stderr, msg)\n\t}\n}\n\n// CompDebugln prints the specified string with a newline at the end\n// to the same file as where the completion script prints its logs.\n// Such logs are only printed when the user has set the environment\n// variable BASH_COMP_DEBUG_FILE to the path of some file to be used.\nfunc CompDebugln(msg string, printToStdErr bool) {\n\tCompDebug(fmt.Sprintf(\"%s\\n\", msg), printToStdErr)\n}\n\n// CompError prints the specified completion message to stderr.\nfunc CompError(msg string) {\n\tmsg = fmt.Sprintf(\"[Error] %s\", msg)\n\tCompDebug(msg, true)\n}\n\n// CompErrorln prints the specified completion message to stderr with a newline at the end.\nfunc CompErrorln(msg string) {\n\tCompError(fmt.Sprintf(\"%s\\n\", msg))\n}\n\n// These values should not be changed: users will be using them explicitly.\nconst (\n\tconfigEnvVarGlobalPrefix       = \"COBRA\"\n\tconfigEnvVarSuffixDescriptions = \"COMPLETION_DESCRIPTIONS\"\n)\n\nvar configEnvVarPrefixSubstRegexp = regexp.MustCompile(`[^A-Z0-9_]`)\n\n// configEnvVar returns the name of the program-specific configuration environment\n// variable.  It has the format <PROGRAM>_<SUFFIX> where <PROGRAM> is the name of the\n// root command in upper case, with all non-ASCII-alphanumeric characters replaced by `_`.\nfunc configEnvVar(name, suffix string) string {\n\t// This format should not be changed: users will be using it explicitly.\n\tv := strings.ToUpper(fmt.Sprintf(\"%s_%s\", name, suffix))\n\tv = configEnvVarPrefixSubstRegexp.ReplaceAllString(v, \"_\")\n\treturn v\n}\n\n// getEnvConfig returns the value of the configuration environment variable\n// <PROGRAM>_<SUFFIX> where <PROGRAM> is the name of the root command in upper\n// case, with all non-ASCII-alphanumeric characters replaced by `_`.\n// If the value is empty or not set, the value of the environment variable\n// COBRA_<SUFFIX> is returned instead.\nfunc getEnvConfig(cmd *Command, suffix string) string {\n\tv := os.Getenv(configEnvVar(cmd.Root().Name(), suffix))\n\tif v == \"\" {\n\t\tv = os.Getenv(configEnvVar(configEnvVarGlobalPrefix, suffix))\n\t}\n\treturn v\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/doc/man_docs.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage doc\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/cpuguy83/go-md2man/v2/md2man\"\n\t\"github.com/spf13/cobra\"\n\t\"github.com/spf13/pflag\"\n)\n\n// GenManTree will generate a man page for this command and all descendants\n// in the directory given. The header may be nil. This function may not work\n// correctly if your command names have `-` in them. If you have `cmd` with two\n// subcmds, `sub` and `sub-third`, and `sub` has a subcommand called `third`\n// it is undefined which help output will be in the file `cmd-sub-third.1`.\nfunc GenManTree(cmd *cobra.Command, header *GenManHeader, dir string) error {\n\treturn GenManTreeFromOpts(cmd, GenManTreeOptions{\n\t\tHeader:           header,\n\t\tPath:             dir,\n\t\tCommandSeparator: \"-\",\n\t})\n}\n\n// GenManTreeFromOpts generates a man page for the command and all descendants.\n// The pages are written to the opts.Path directory.\nfunc GenManTreeFromOpts(cmd *cobra.Command, opts GenManTreeOptions) error {\n\theader := opts.Header\n\tif header == nil {\n\t\theader = &GenManHeader{}\n\t}\n\tfor _, c := range cmd.Commands() {\n\t\tif !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {\n\t\t\tcontinue\n\t\t}\n\t\tif err := GenManTreeFromOpts(c, opts); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tsection := \"1\"\n\tif header.Section != \"\" {\n\t\tsection = header.Section\n\t}\n\n\tseparator := \"_\"\n\tif opts.CommandSeparator != \"\" {\n\t\tseparator = opts.CommandSeparator\n\t}\n\tbasename := strings.ReplaceAll(cmd.CommandPath(), \" \", separator)\n\tfilename := filepath.Join(opts.Path, basename+\".\"+section)\n\tf, err := os.Create(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\theaderCopy := *header\n\treturn GenMan(cmd, &headerCopy, f)\n}\n\n// GenManTreeOptions is the options for generating the man pages.\n// Used only in GenManTreeFromOpts.\ntype GenManTreeOptions struct {\n\tHeader           *GenManHeader\n\tPath             string\n\tCommandSeparator string\n}\n\n// GenManHeader is a lot like the .TH header at the start of man pages. These\n// include the title, section, date, source, and manual. We will use the\n// current time if Date is unset and will use \"Auto generated by spf13/cobra\"\n// if the Source is unset.\ntype GenManHeader struct {\n\tTitle   string\n\tSection string\n\tDate    *time.Time\n\tdate    string\n\tSource  string\n\tManual  string\n}\n\n// GenMan will generate a man page for the given command and write it to\n// w. The header argument may be nil, however obviously w may not.\nfunc GenMan(cmd *cobra.Command, header *GenManHeader, w io.Writer) error {\n\tif header == nil {\n\t\theader = &GenManHeader{}\n\t}\n\tif err := fillHeader(header, cmd.CommandPath(), cmd.DisableAutoGenTag); err != nil {\n\t\treturn err\n\t}\n\n\tb := genMan(cmd, header)\n\t_, err := w.Write(md2man.Render(b))\n\treturn err\n}\n\nfunc fillHeader(header *GenManHeader, name string, disableAutoGen bool) error {\n\tif header.Title == \"\" {\n\t\theader.Title = strings.ToUpper(strings.ReplaceAll(name, \" \", \"\\\\-\"))\n\t}\n\tif header.Section == \"\" {\n\t\theader.Section = \"1\"\n\t}\n\tif header.Date == nil {\n\t\tnow := time.Now()\n\t\tif epoch := os.Getenv(\"SOURCE_DATE_EPOCH\"); epoch != \"\" {\n\t\t\tunixEpoch, err := strconv.ParseInt(epoch, 10, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"invalid SOURCE_DATE_EPOCH: %v\", err)\n\t\t\t}\n\t\t\tnow = time.Unix(unixEpoch, 0)\n\t\t}\n\t\theader.Date = &now\n\t}\n\theader.date = header.Date.Format(\"Jan 2006\")\n\tif header.Source == \"\" && !disableAutoGen {\n\t\theader.Source = \"Auto generated by spf13/cobra\"\n\t}\n\treturn nil\n}\n\nfunc manPreamble(buf io.StringWriter, header *GenManHeader, cmd *cobra.Command, dashedName string) {\n\tdescription := cmd.Long\n\tif len(description) == 0 {\n\t\tdescription = cmd.Short\n\t}\n\n\tcobra.WriteStringAndCheck(buf, fmt.Sprintf(`%% \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n# NAME\n`, header.Title, header.Section, header.date, header.Source, header.Manual))\n\tcobra.WriteStringAndCheck(buf, fmt.Sprintf(\"%s \\\\- %s\\n\\n\", dashedName, cmd.Short))\n\tcobra.WriteStringAndCheck(buf, \"# SYNOPSIS\\n\")\n\tcobra.WriteStringAndCheck(buf, fmt.Sprintf(\"**%s**\\n\\n\", cmd.UseLine()))\n\tcobra.WriteStringAndCheck(buf, \"# DESCRIPTION\\n\")\n\tcobra.WriteStringAndCheck(buf, description+\"\\n\\n\")\n}\n\nfunc manPrintFlags(buf io.StringWriter, flags *pflag.FlagSet) {\n\tflags.VisitAll(func(flag *pflag.Flag) {\n\t\tif len(flag.Deprecated) > 0 || flag.Hidden {\n\t\t\treturn\n\t\t}\n\t\tformat := \"\"\n\t\tif len(flag.Shorthand) > 0 && len(flag.ShorthandDeprecated) == 0 {\n\t\t\tformat = fmt.Sprintf(\"**-%s**, **--%s**\", flag.Shorthand, flag.Name)\n\t\t} else {\n\t\t\tformat = fmt.Sprintf(\"**--%s**\", flag.Name)\n\t\t}\n\t\tif len(flag.NoOptDefVal) > 0 {\n\t\t\tformat += \"[\"\n\t\t}\n\t\tif flag.Value.Type() == \"string\" {\n\t\t\t// put quotes on the value\n\t\t\tformat += \"=%q\"\n\t\t} else {\n\t\t\tformat += \"=%s\"\n\t\t}\n\t\tif len(flag.NoOptDefVal) > 0 {\n\t\t\tformat += \"]\"\n\t\t}\n\t\tformat += \"\\n\\t%s\\n\\n\"\n\t\tcobra.WriteStringAndCheck(buf, fmt.Sprintf(format, flag.DefValue, flag.Usage))\n\t})\n}\n\nfunc manPrintOptions(buf io.StringWriter, command *cobra.Command) {\n\tflags := command.NonInheritedFlags()\n\tif flags.HasAvailableFlags() {\n\t\tcobra.WriteStringAndCheck(buf, \"# OPTIONS\\n\")\n\t\tmanPrintFlags(buf, flags)\n\t\tcobra.WriteStringAndCheck(buf, \"\\n\")\n\t}\n\tflags = command.InheritedFlags()\n\tif flags.HasAvailableFlags() {\n\t\tcobra.WriteStringAndCheck(buf, \"# OPTIONS INHERITED FROM PARENT COMMANDS\\n\")\n\t\tmanPrintFlags(buf, flags)\n\t\tcobra.WriteStringAndCheck(buf, \"\\n\")\n\t}\n}\n\nfunc genMan(cmd *cobra.Command, header *GenManHeader) []byte {\n\tcmd.InitDefaultHelpCmd()\n\tcmd.InitDefaultHelpFlag()\n\n\t// something like `rootcmd-subcmd1-subcmd2`\n\tdashCommandName := strings.ReplaceAll(cmd.CommandPath(), \" \", \"-\")\n\n\tbuf := new(bytes.Buffer)\n\n\tmanPreamble(buf, header, cmd, dashCommandName)\n\tmanPrintOptions(buf, cmd)\n\tif len(cmd.Example) > 0 {\n\t\tbuf.WriteString(\"# EXAMPLE\\n\")\n\t\tfmt.Fprintf(buf, \"```\\n%s\\n```\\n\", cmd.Example)\n\t}\n\tif hasSeeAlso(cmd) {\n\t\tbuf.WriteString(\"# SEE ALSO\\n\")\n\t\tseealsos := make([]string, 0)\n\t\tif cmd.HasParent() {\n\t\t\tparentPath := cmd.Parent().CommandPath()\n\t\t\tdashParentPath := strings.ReplaceAll(parentPath, \" \", \"-\")\n\t\t\tseealso := fmt.Sprintf(\"**%s(%s)**\", dashParentPath, header.Section)\n\t\t\tseealsos = append(seealsos, seealso)\n\t\t\tcmd.VisitParents(func(c *cobra.Command) {\n\t\t\t\tif c.DisableAutoGenTag {\n\t\t\t\t\tcmd.DisableAutoGenTag = c.DisableAutoGenTag\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tchildren := cmd.Commands()\n\t\tsort.Sort(byName(children))\n\t\tfor _, c := range children {\n\t\t\tif !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tseealso := fmt.Sprintf(\"**%s-%s(%s)**\", dashCommandName, c.Name(), header.Section)\n\t\t\tseealsos = append(seealsos, seealso)\n\t\t}\n\t\tbuf.WriteString(strings.Join(seealsos, \", \") + \"\\n\")\n\t}\n\tif !cmd.DisableAutoGenTag {\n\t\tfmt.Fprintf(buf, \"# HISTORY\\n%s Auto generated by spf13/cobra\\n\", header.Date.Format(\"2-Jan-2006\"))\n\t}\n\treturn buf.Bytes()\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/doc/md_docs.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage doc\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/spf13/cobra\"\n)\n\nconst markdownExtension = \".md\"\n\nfunc printOptions(buf *bytes.Buffer, cmd *cobra.Command, name string) error {\n\tflags := cmd.NonInheritedFlags()\n\tflags.SetOutput(buf)\n\tif flags.HasAvailableFlags() {\n\t\tbuf.WriteString(\"### Options\\n\\n```\\n\")\n\t\tflags.PrintDefaults()\n\t\tbuf.WriteString(\"```\\n\\n\")\n\t}\n\n\tparentFlags := cmd.InheritedFlags()\n\tparentFlags.SetOutput(buf)\n\tif parentFlags.HasAvailableFlags() {\n\t\tbuf.WriteString(\"### Options inherited from parent commands\\n\\n```\\n\")\n\t\tparentFlags.PrintDefaults()\n\t\tbuf.WriteString(\"```\\n\\n\")\n\t}\n\treturn nil\n}\n\n// GenMarkdown creates markdown output.\nfunc GenMarkdown(cmd *cobra.Command, w io.Writer) error {\n\treturn GenMarkdownCustom(cmd, w, func(s string) string { return s })\n}\n\n// GenMarkdownCustom creates custom markdown output.\nfunc GenMarkdownCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) string) error {\n\tcmd.InitDefaultHelpCmd()\n\tcmd.InitDefaultHelpFlag()\n\n\tbuf := new(bytes.Buffer)\n\tname := cmd.CommandPath()\n\n\tbuf.WriteString(\"## \" + name + \"\\n\\n\")\n\tbuf.WriteString(cmd.Short + \"\\n\\n\")\n\tif len(cmd.Long) > 0 {\n\t\tbuf.WriteString(\"### Synopsis\\n\\n\")\n\t\tbuf.WriteString(cmd.Long + \"\\n\\n\")\n\t}\n\n\tif cmd.Runnable() {\n\t\tfmt.Fprintf(buf, \"```\\n%s\\n```\\n\\n\", cmd.UseLine())\n\t}\n\n\tif len(cmd.Example) > 0 {\n\t\tbuf.WriteString(\"### Examples\\n\\n\")\n\t\tfmt.Fprintf(buf, \"```\\n%s\\n```\\n\\n\", cmd.Example)\n\t}\n\n\tif err := printOptions(buf, cmd, name); err != nil {\n\t\treturn err\n\t}\n\tif hasSeeAlso(cmd) {\n\t\tbuf.WriteString(\"### SEE ALSO\\n\\n\")\n\t\tif cmd.HasParent() {\n\t\t\tparent := cmd.Parent()\n\t\t\tpname := parent.CommandPath()\n\t\t\tlink := pname + markdownExtension\n\t\t\tlink = strings.ReplaceAll(link, \" \", \"_\")\n\t\t\tfmt.Fprintf(buf, \"* [%s](%s)\\t - %s\\n\", pname, linkHandler(link), parent.Short)\n\t\t\tcmd.VisitParents(func(c *cobra.Command) {\n\t\t\t\tif c.DisableAutoGenTag {\n\t\t\t\t\tcmd.DisableAutoGenTag = c.DisableAutoGenTag\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tchildren := cmd.Commands()\n\t\tsort.Sort(byName(children))\n\n\t\tfor _, child := range children {\n\t\t\tif !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcname := name + \" \" + child.Name()\n\t\t\tlink := cname + markdownExtension\n\t\t\tlink = strings.ReplaceAll(link, \" \", \"_\")\n\t\t\tfmt.Fprintf(buf, \"* [%s](%s)\\t - %s\\n\", cname, linkHandler(link), child.Short)\n\t\t}\n\t\tbuf.WriteString(\"\\n\")\n\t}\n\tif !cmd.DisableAutoGenTag {\n\t\tbuf.WriteString(\"###### Auto generated by spf13/cobra on \" + time.Now().Format(\"2-Jan-2006\") + \"\\n\")\n\t}\n\t_, err := buf.WriteTo(w)\n\treturn err\n}\n\n// GenMarkdownTree will generate a markdown page for this command and all\n// descendants in the directory given. The header may be nil.\n// This function may not work correctly if your command names have `-` in them.\n// If you have `cmd` with two subcmds, `sub` and `sub-third`,\n// and `sub` has a subcommand called `third`, it is undefined which\n// help output will be in the file `cmd-sub-third.1`.\nfunc GenMarkdownTree(cmd *cobra.Command, dir string) error {\n\tidentity := func(s string) string { return s }\n\temptyStr := func(s string) string { return \"\" }\n\treturn GenMarkdownTreeCustom(cmd, dir, emptyStr, identity)\n}\n\n// GenMarkdownTreeCustom is the same as GenMarkdownTree, but\n// with custom filePrepender and linkHandler.\nfunc GenMarkdownTreeCustom(cmd *cobra.Command, dir string, filePrepender, linkHandler func(string) string) error {\n\tfor _, c := range cmd.Commands() {\n\t\tif !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {\n\t\t\tcontinue\n\t\t}\n\t\tif err := GenMarkdownTreeCustom(c, dir, filePrepender, linkHandler); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tbasename := strings.ReplaceAll(cmd.CommandPath(), \" \", \"_\") + markdownExtension\n\tfilename := filepath.Join(dir, basename)\n\tf, err := os.Create(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tif _, err := io.WriteString(f, filePrepender(filename)); err != nil {\n\t\treturn err\n\t}\n\tif err := GenMarkdownCustom(cmd, f, linkHandler); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/doc/rest_docs.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage doc\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/spf13/cobra\"\n)\n\nfunc printOptionsReST(buf *bytes.Buffer, cmd *cobra.Command, name string) error {\n\tflags := cmd.NonInheritedFlags()\n\tflags.SetOutput(buf)\n\tif flags.HasAvailableFlags() {\n\t\tbuf.WriteString(\"Options\\n\")\n\t\tbuf.WriteString(\"~~~~~~~\\n\\n::\\n\\n\")\n\t\tflags.PrintDefaults()\n\t\tbuf.WriteString(\"\\n\")\n\t}\n\n\tparentFlags := cmd.InheritedFlags()\n\tparentFlags.SetOutput(buf)\n\tif parentFlags.HasAvailableFlags() {\n\t\tbuf.WriteString(\"Options inherited from parent commands\\n\")\n\t\tbuf.WriteString(\"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n\\n::\\n\\n\")\n\t\tparentFlags.PrintDefaults()\n\t\tbuf.WriteString(\"\\n\")\n\t}\n\treturn nil\n}\n\n// defaultLinkHandler for default ReST hyperlink markup\nfunc defaultLinkHandler(name, ref string) string {\n\treturn fmt.Sprintf(\"`%s <%s.rst>`_\", name, ref)\n}\n\n// GenReST creates reStructured Text output.\nfunc GenReST(cmd *cobra.Command, w io.Writer) error {\n\treturn GenReSTCustom(cmd, w, defaultLinkHandler)\n}\n\n// GenReSTCustom creates custom reStructured Text output.\nfunc GenReSTCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string, string) string) error {\n\tcmd.InitDefaultHelpCmd()\n\tcmd.InitDefaultHelpFlag()\n\n\tbuf := new(bytes.Buffer)\n\tname := cmd.CommandPath()\n\n\tshort := cmd.Short\n\tlong := cmd.Long\n\tif len(long) == 0 {\n\t\tlong = short\n\t}\n\tref := strings.ReplaceAll(name, \" \", \"_\")\n\n\tbuf.WriteString(\".. _\" + ref + \":\\n\\n\")\n\tbuf.WriteString(name + \"\\n\")\n\tbuf.WriteString(strings.Repeat(\"-\", len(name)) + \"\\n\\n\")\n\tbuf.WriteString(short + \"\\n\\n\")\n\tbuf.WriteString(\"Synopsis\\n\")\n\tbuf.WriteString(\"~~~~~~~~\\n\\n\")\n\tbuf.WriteString(\"\\n\" + long + \"\\n\\n\")\n\n\tif cmd.Runnable() {\n\t\tfmt.Fprintf(buf, \"::\\n\\n  %s\\n\\n\", cmd.UseLine())\n\t}\n\n\tif len(cmd.Example) > 0 {\n\t\tbuf.WriteString(\"Examples\\n\")\n\t\tbuf.WriteString(\"~~~~~~~~\\n\\n\")\n\t\tfmt.Fprintf(buf, \"::\\n\\n%s\\n\\n\", indentString(cmd.Example, \"  \"))\n\t}\n\n\tif err := printOptionsReST(buf, cmd, name); err != nil {\n\t\treturn err\n\t}\n\tif hasSeeAlso(cmd) {\n\t\tbuf.WriteString(\"SEE ALSO\\n\")\n\t\tbuf.WriteString(\"~~~~~~~~\\n\\n\")\n\t\tif cmd.HasParent() {\n\t\t\tparent := cmd.Parent()\n\t\t\tpname := parent.CommandPath()\n\t\t\tref = strings.ReplaceAll(pname, \" \", \"_\")\n\t\t\tfmt.Fprintf(buf, \"* %s \\t - %s\\n\", linkHandler(pname, ref), parent.Short)\n\t\t\tcmd.VisitParents(func(c *cobra.Command) {\n\t\t\t\tif c.DisableAutoGenTag {\n\t\t\t\t\tcmd.DisableAutoGenTag = c.DisableAutoGenTag\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tchildren := cmd.Commands()\n\t\tsort.Sort(byName(children))\n\n\t\tfor _, child := range children {\n\t\t\tif !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tcname := name + \" \" + child.Name()\n\t\t\tref = strings.ReplaceAll(cname, \" \", \"_\")\n\t\t\tfmt.Fprintf(buf, \"* %s \\t - %s\\n\", linkHandler(cname, ref), child.Short)\n\t\t}\n\t\tbuf.WriteString(\"\\n\")\n\t}\n\tif !cmd.DisableAutoGenTag {\n\t\tbuf.WriteString(\"*Auto generated by spf13/cobra on \" + time.Now().Format(\"2-Jan-2006\") + \"*\\n\")\n\t}\n\t_, err := buf.WriteTo(w)\n\treturn err\n}\n\n// GenReSTTree will generate a ReST page for this command and all\n// descendants in the directory given.\n// This function may not work correctly if your command names have `-` in them.\n// If you have `cmd` with two subcmds, `sub` and `sub-third`,\n// and `sub` has a subcommand called `third`, it is undefined which\n// help output will be in the file `cmd-sub-third.1`.\nfunc GenReSTTree(cmd *cobra.Command, dir string) error {\n\temptyStr := func(s string) string { return \"\" }\n\treturn GenReSTTreeCustom(cmd, dir, emptyStr, defaultLinkHandler)\n}\n\n// GenReSTTreeCustom is the same as GenReSTTree, but\n// with custom filePrepender and linkHandler.\nfunc GenReSTTreeCustom(cmd *cobra.Command, dir string, filePrepender func(string) string, linkHandler func(string, string) string) error {\n\tfor _, c := range cmd.Commands() {\n\t\tif !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {\n\t\t\tcontinue\n\t\t}\n\t\tif err := GenReSTTreeCustom(c, dir, filePrepender, linkHandler); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tbasename := strings.ReplaceAll(cmd.CommandPath(), \" \", \"_\") + \".rst\"\n\tfilename := filepath.Join(dir, basename)\n\tf, err := os.Create(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tif _, err := io.WriteString(f, filePrepender(filename)); err != nil {\n\t\treturn err\n\t}\n\tif err := GenReSTCustom(cmd, f, linkHandler); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// indentString adapted from: https://github.com/kr/text/blob/main/indent.go\nfunc indentString(s, p string) string {\n\tvar res []byte\n\tb := []byte(s)\n\tprefix := []byte(p)\n\tbol := true\n\tfor _, c := range b {\n\t\tif bol && c != '\\n' {\n\t\t\tres = append(res, prefix...)\n\t\t}\n\t\tres = append(res, c)\n\t\tbol = c == '\\n'\n\t}\n\treturn string(res)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/doc/util.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage doc\n\nimport (\n\t\"strings\"\n\n\t\"github.com/spf13/cobra\"\n)\n\n// Test to see if we have a reason to print See Also information in docs\n// Basically this is a test for a parent command or a subcommand which is\n// both not deprecated and not the autogenerated help command.\nfunc hasSeeAlso(cmd *cobra.Command) bool {\n\tif cmd.HasParent() {\n\t\treturn true\n\t}\n\tfor _, c := range cmd.Commands() {\n\t\tif !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {\n\t\t\tcontinue\n\t\t}\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Temporary workaround for yaml lib generating incorrect yaml with long strings\n// that do not contain \\n.\nfunc forceMultiLine(s string) string {\n\tif len(s) > 60 && !strings.Contains(s, \"\\n\") {\n\t\ts += \"\\n\"\n\t}\n\treturn s\n}\n\ntype byName []*cobra.Command\n\nfunc (s byName) Len() int           { return len(s) }\nfunc (s byName) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }\nfunc (s byName) Less(i, j int) bool { return s[i].Name() < s[j].Name() }\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/doc/yaml_docs.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage doc\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"github.com/spf13/cobra\"\n\t\"github.com/spf13/pflag\"\n\t\"go.yaml.in/yaml/v3\"\n)\n\ntype cmdOption struct {\n\tName         string\n\tShorthand    string `yaml:\",omitempty\"`\n\tDefaultValue string `yaml:\"default_value,omitempty\"`\n\tUsage        string `yaml:\",omitempty\"`\n}\n\ntype cmdDoc struct {\n\tName             string\n\tSynopsis         string      `yaml:\",omitempty\"`\n\tDescription      string      `yaml:\",omitempty\"`\n\tUsage            string      `yaml:\",omitempty\"`\n\tOptions          []cmdOption `yaml:\",omitempty\"`\n\tInheritedOptions []cmdOption `yaml:\"inherited_options,omitempty\"`\n\tExample          string      `yaml:\",omitempty\"`\n\tSeeAlso          []string    `yaml:\"see_also,omitempty\"`\n}\n\n// GenYamlTree creates yaml structured ref files for this command and all descendants\n// in the directory given. This function may not work\n// correctly if your command names have `-` in them. If you have `cmd` with two\n// subcmds, `sub` and `sub-third`, and `sub` has a subcommand called `third`\n// it is undefined which help output will be in the file `cmd-sub-third.1`.\nfunc GenYamlTree(cmd *cobra.Command, dir string) error {\n\tidentity := func(s string) string { return s }\n\temptyStr := func(s string) string { return \"\" }\n\treturn GenYamlTreeCustom(cmd, dir, emptyStr, identity)\n}\n\n// GenYamlTreeCustom creates yaml structured ref files.\nfunc GenYamlTreeCustom(cmd *cobra.Command, dir string, filePrepender, linkHandler func(string) string) error {\n\tfor _, c := range cmd.Commands() {\n\t\tif !c.IsAvailableCommand() || c.IsAdditionalHelpTopicCommand() {\n\t\t\tcontinue\n\t\t}\n\t\tif err := GenYamlTreeCustom(c, dir, filePrepender, linkHandler); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tbasename := strings.ReplaceAll(cmd.CommandPath(), \" \", \"_\") + \".yaml\"\n\tfilename := filepath.Join(dir, basename)\n\tf, err := os.Create(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer f.Close()\n\n\tif _, err := io.WriteString(f, filePrepender(filename)); err != nil {\n\t\treturn err\n\t}\n\tif err := GenYamlCustom(cmd, f, linkHandler); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// GenYaml creates yaml output.\nfunc GenYaml(cmd *cobra.Command, w io.Writer) error {\n\treturn GenYamlCustom(cmd, w, func(s string) string { return s })\n}\n\n// GenYamlCustom creates custom yaml output.\nfunc GenYamlCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) string) error {\n\tcmd.InitDefaultHelpCmd()\n\tcmd.InitDefaultHelpFlag()\n\n\tyamlDoc := cmdDoc{}\n\tyamlDoc.Name = cmd.CommandPath()\n\n\tyamlDoc.Synopsis = forceMultiLine(cmd.Short)\n\tyamlDoc.Description = forceMultiLine(cmd.Long)\n\n\tif cmd.Runnable() {\n\t\tyamlDoc.Usage = cmd.UseLine()\n\t}\n\n\tif len(cmd.Example) > 0 {\n\t\tyamlDoc.Example = cmd.Example\n\t}\n\n\tflags := cmd.NonInheritedFlags()\n\tif flags.HasFlags() {\n\t\tyamlDoc.Options = genFlagResult(flags)\n\t}\n\tflags = cmd.InheritedFlags()\n\tif flags.HasFlags() {\n\t\tyamlDoc.InheritedOptions = genFlagResult(flags)\n\t}\n\n\tif hasSeeAlso(cmd) {\n\t\tresult := []string{}\n\t\tif cmd.HasParent() {\n\t\t\tparent := cmd.Parent()\n\t\t\tresult = append(result, parent.CommandPath()+\" - \"+parent.Short)\n\t\t}\n\t\tchildren := cmd.Commands()\n\t\tsort.Sort(byName(children))\n\t\tfor _, child := range children {\n\t\t\tif !child.IsAvailableCommand() || child.IsAdditionalHelpTopicCommand() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tresult = append(result, child.CommandPath()+\" - \"+child.Short)\n\t\t}\n\t\tyamlDoc.SeeAlso = result\n\t}\n\n\tfinal, err := yaml.Marshal(&yamlDoc)\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\tos.Exit(1)\n\t}\n\n\tif _, err := w.Write(final); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc genFlagResult(flags *pflag.FlagSet) []cmdOption {\n\tvar result []cmdOption\n\n\tflags.VisitAll(func(flag *pflag.Flag) {\n\t\t// Todo, when we mark a shorthand is deprecated, but specify an empty message.\n\t\t// The flag.ShorthandDeprecated is empty as the shorthand is deprecated.\n\t\t// Using len(flag.ShorthandDeprecated) > 0 can't handle this, others are ok.\n\t\tif len(flag.ShorthandDeprecated) == 0 && len(flag.Shorthand) > 0 {\n\t\t\topt := cmdOption{\n\t\t\t\tflag.Name,\n\t\t\t\tflag.Shorthand,\n\t\t\t\tflag.DefValue,\n\t\t\t\tforceMultiLine(flag.Usage),\n\t\t\t}\n\t\t\tresult = append(result, opt)\n\t\t} else {\n\t\t\topt := cmdOption{\n\t\t\t\tName:         flag.Name,\n\t\t\t\tDefaultValue: forceMultiLine(flag.DefValue),\n\t\t\t\tUsage:        forceMultiLine(flag.Usage),\n\t\t\t}\n\t\t\tresult = append(result, opt)\n\t\t}\n\t})\n\n\treturn result\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/fish_completions.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cobra\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n)\n\nfunc genFishComp(buf io.StringWriter, name string, includeDesc bool) {\n\t// Variables should not contain a '-' or ':' character\n\tnameForVar := name\n\tnameForVar = strings.ReplaceAll(nameForVar, \"-\", \"_\")\n\tnameForVar = strings.ReplaceAll(nameForVar, \":\", \"_\")\n\n\tcompCmd := ShellCompRequestCmd\n\tif !includeDesc {\n\t\tcompCmd = ShellCompNoDescRequestCmd\n\t}\n\tWriteStringAndCheck(buf, fmt.Sprintf(\"# fish completion for %-36s -*- shell-script -*-\\n\", name))\n\tWriteStringAndCheck(buf, fmt.Sprintf(`\nfunction __%[1]s_debug\n    set -l file \"$BASH_COMP_DEBUG_FILE\"\n    if test -n \"$file\"\n        echo \"$argv\" >> $file\n    end\nend\n\nfunction __%[1]s_perform_completion\n    __%[1]s_debug \"Starting __%[1]s_perform_completion\"\n\n    # Extract all args except the last one\n    set -l args (commandline -opc)\n    # Extract the last arg and escape it in case it is a space\n    set -l lastArg (string escape -- (commandline -ct))\n\n    __%[1]s_debug \"args: $args\"\n    __%[1]s_debug \"last arg: $lastArg\"\n\n    # Disable ActiveHelp which is not supported for fish shell\n    set -l requestComp \"%[10]s=0 $args[1] %[3]s $args[2..-1] $lastArg\"\n\n    __%[1]s_debug \"Calling $requestComp\"\n    set -l results (eval $requestComp 2> /dev/null)\n\n    # Some programs may output extra empty lines after the directive.\n    # Let's ignore them or else it will break completion.\n    # Ref: https://github.com/spf13/cobra/issues/1279\n    for line in $results[-1..1]\n        if test (string trim -- $line) = \"\"\n            # Found an empty line, remove it\n            set results $results[1..-2]\n        else\n            # Found non-empty line, we have our proper output\n            break\n        end\n    end\n\n    set -l comps $results[1..-2]\n    set -l directiveLine $results[-1]\n\n    # For Fish, when completing a flag with an = (e.g., <program> -n=<TAB>)\n    # completions must be prefixed with the flag\n    set -l flagPrefix (string match -r -- '-.*=' \"$lastArg\")\n\n    __%[1]s_debug \"Comps: $comps\"\n    __%[1]s_debug \"DirectiveLine: $directiveLine\"\n    __%[1]s_debug \"flagPrefix: $flagPrefix\"\n\n    for comp in $comps\n        printf \"%%s%%s\\n\" \"$flagPrefix\" \"$comp\"\n    end\n\n    printf \"%%s\\n\" \"$directiveLine\"\nend\n\n# this function limits calls to __%[1]s_perform_completion, by caching the result behind $__%[1]s_perform_completion_once_result\nfunction __%[1]s_perform_completion_once\n    __%[1]s_debug \"Starting __%[1]s_perform_completion_once\"\n\n    if test -n \"$__%[1]s_perform_completion_once_result\"\n        __%[1]s_debug \"Seems like a valid result already exists, skipping __%[1]s_perform_completion\"\n        return 0\n    end\n\n    set --global __%[1]s_perform_completion_once_result (__%[1]s_perform_completion)\n    if test -z \"$__%[1]s_perform_completion_once_result\"\n        __%[1]s_debug \"No completions, probably due to a failure\"\n        return 1\n    end\n\n    __%[1]s_debug \"Performed completions and set __%[1]s_perform_completion_once_result\"\n    return 0\nend\n\n# this function is used to clear the $__%[1]s_perform_completion_once_result variable after completions are run\nfunction __%[1]s_clear_perform_completion_once_result\n    __%[1]s_debug \"\"\n    __%[1]s_debug \"========= clearing previously set __%[1]s_perform_completion_once_result variable ==========\"\n    set --erase __%[1]s_perform_completion_once_result\n    __%[1]s_debug \"Successfully erased the variable __%[1]s_perform_completion_once_result\"\nend\n\nfunction __%[1]s_requires_order_preservation\n    __%[1]s_debug \"\"\n    __%[1]s_debug \"========= checking if order preservation is required ==========\"\n\n    __%[1]s_perform_completion_once\n    if test -z \"$__%[1]s_perform_completion_once_result\"\n        __%[1]s_debug \"Error determining if order preservation is required\"\n        return 1\n    end\n\n    set -l directive (string sub --start 2 $__%[1]s_perform_completion_once_result[-1])\n    __%[1]s_debug \"Directive is: $directive\"\n\n    set -l shellCompDirectiveKeepOrder %[9]d\n    set -l keeporder (math (math --scale 0 $directive / $shellCompDirectiveKeepOrder) %% 2)\n    __%[1]s_debug \"Keeporder is: $keeporder\"\n\n    if test $keeporder -ne 0\n        __%[1]s_debug \"This does require order preservation\"\n        return 0\n    end\n\n    __%[1]s_debug \"This doesn't require order preservation\"\n    return 1\nend\n\n\n# This function does two things:\n# - Obtain the completions and store them in the global __%[1]s_comp_results\n# - Return false if file completion should be performed\nfunction __%[1]s_prepare_completions\n    __%[1]s_debug \"\"\n    __%[1]s_debug \"========= starting completion logic ==========\"\n\n    # Start fresh\n    set --erase __%[1]s_comp_results\n\n    __%[1]s_perform_completion_once\n    __%[1]s_debug \"Completion results: $__%[1]s_perform_completion_once_result\"\n\n    if test -z \"$__%[1]s_perform_completion_once_result\"\n        __%[1]s_debug \"No completion, probably due to a failure\"\n        # Might as well do file completion, in case it helps\n        return 1\n    end\n\n    set -l directive (string sub --start 2 $__%[1]s_perform_completion_once_result[-1])\n    set --global __%[1]s_comp_results $__%[1]s_perform_completion_once_result[1..-2]\n\n    __%[1]s_debug \"Completions are: $__%[1]s_comp_results\"\n    __%[1]s_debug \"Directive is: $directive\"\n\n    set -l shellCompDirectiveError %[4]d\n    set -l shellCompDirectiveNoSpace %[5]d\n    set -l shellCompDirectiveNoFileComp %[6]d\n    set -l shellCompDirectiveFilterFileExt %[7]d\n    set -l shellCompDirectiveFilterDirs %[8]d\n\n    if test -z \"$directive\"\n        set directive 0\n    end\n\n    set -l compErr (math (math --scale 0 $directive / $shellCompDirectiveError) %% 2)\n    if test $compErr -eq 1\n        __%[1]s_debug \"Received error directive: aborting.\"\n        # Might as well do file completion, in case it helps\n        return 1\n    end\n\n    set -l filefilter (math (math --scale 0 $directive / $shellCompDirectiveFilterFileExt) %% 2)\n    set -l dirfilter (math (math --scale 0 $directive / $shellCompDirectiveFilterDirs) %% 2)\n    if test $filefilter -eq 1; or test $dirfilter -eq 1\n        __%[1]s_debug \"File extension filtering or directory filtering not supported\"\n        # Do full file completion instead\n        return 1\n    end\n\n    set -l nospace (math (math --scale 0 $directive / $shellCompDirectiveNoSpace) %% 2)\n    set -l nofiles (math (math --scale 0 $directive / $shellCompDirectiveNoFileComp) %% 2)\n\n    __%[1]s_debug \"nospace: $nospace, nofiles: $nofiles\"\n\n    # If we want to prevent a space, or if file completion is NOT disabled,\n    # we need to count the number of valid completions.\n    # To do so, we will filter on prefix as the completions we have received\n    # may not already be filtered so as to allow fish to match on different\n    # criteria than the prefix.\n    if test $nospace -ne 0; or test $nofiles -eq 0\n        set -l prefix (commandline -t | string escape --style=regex)\n        __%[1]s_debug \"prefix: $prefix\"\n\n        set -l completions (string match -r -- \"^$prefix.*\" $__%[1]s_comp_results)\n        set --global __%[1]s_comp_results $completions\n        __%[1]s_debug \"Filtered completions are: $__%[1]s_comp_results\"\n\n        # Important not to quote the variable for count to work\n        set -l numComps (count $__%[1]s_comp_results)\n        __%[1]s_debug \"numComps: $numComps\"\n\n        if test $numComps -eq 1; and test $nospace -ne 0\n            # We must first split on \\t to get rid of the descriptions to be\n            # able to check what the actual completion will be.\n            # We don't need descriptions anyway since there is only a single\n            # real completion which the shell will expand immediately.\n            set -l split (string split --max 1 \\t $__%[1]s_comp_results[1])\n\n            # Fish won't add a space if the completion ends with any\n            # of the following characters: @=/:.,\n            set -l lastChar (string sub -s -1 -- $split)\n            if not string match -r -q \"[@=/:.,]\" -- \"$lastChar\"\n                # In other cases, to support the \"nospace\" directive we trick the shell\n                # by outputting an extra, longer completion.\n                __%[1]s_debug \"Adding second completion to perform nospace directive\"\n                set --global __%[1]s_comp_results $split[1] $split[1].\n                __%[1]s_debug \"Completions are now: $__%[1]s_comp_results\"\n            end\n        end\n\n        if test $numComps -eq 0; and test $nofiles -eq 0\n            # To be consistent with bash and zsh, we only trigger file\n            # completion when there are no other completions\n            __%[1]s_debug \"Requesting file completion\"\n            return 1\n        end\n    end\n\n    return 0\nend\n\n# Since Fish completions are only loaded once the user triggers them, we trigger them ourselves\n# so we can properly delete any completions provided by another script.\n# Only do this if the program can be found, or else fish may print some errors; besides,\n# the existing completions will only be loaded if the program can be found.\nif type -q \"%[2]s\"\n    # The space after the program name is essential to trigger completion for the program\n    # and not completion of the program name itself.\n    # Also, we use '> /dev/null 2>&1' since '&>' is not supported in older versions of fish.\n    complete --do-complete \"%[2]s \" > /dev/null 2>&1\nend\n\n# Remove any pre-existing completions for the program since we will be handling all of them.\ncomplete -c %[2]s -e\n\n# this will get called after the two calls below and clear the $__%[1]s_perform_completion_once_result global\ncomplete -c %[2]s -n '__%[1]s_clear_perform_completion_once_result'\n# The call to __%[1]s_prepare_completions will setup __%[1]s_comp_results\n# which provides the program's completion choices.\n# If this doesn't require order preservation, we don't use the -k flag\ncomplete -c %[2]s -n 'not __%[1]s_requires_order_preservation && __%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results'\n# otherwise we use the -k flag\ncomplete -k -c %[2]s -n '__%[1]s_requires_order_preservation && __%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results'\n`, nameForVar, name, compCmd,\n\t\tShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,\n\t\tShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, ShellCompDirectiveKeepOrder, activeHelpEnvVar(name)))\n}\n\n// GenFishCompletion generates fish completion file and writes to the passed writer.\nfunc (c *Command) GenFishCompletion(w io.Writer, includeDesc bool) error {\n\tbuf := new(bytes.Buffer)\n\tgenFishComp(buf, c.Name(), includeDesc)\n\t_, err := buf.WriteTo(w)\n\treturn err\n}\n\n// GenFishCompletionFile generates fish completion file.\nfunc (c *Command) GenFishCompletionFile(filename string, includeDesc bool) error {\n\toutFile, err := os.Create(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer outFile.Close()\n\n\treturn c.GenFishCompletion(outFile, includeDesc)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/flag_groups.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cobra\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\tflag \"github.com/spf13/pflag\"\n)\n\nconst (\n\trequiredAsGroupAnnotation   = \"cobra_annotation_required_if_others_set\"\n\toneRequiredAnnotation       = \"cobra_annotation_one_required\"\n\tmutuallyExclusiveAnnotation = \"cobra_annotation_mutually_exclusive\"\n)\n\n// MarkFlagsRequiredTogether marks the given flags with annotations so that Cobra errors\n// if the command is invoked with a subset (but not all) of the given flags.\nfunc (c *Command) MarkFlagsRequiredTogether(flagNames ...string) {\n\tc.mergePersistentFlags()\n\tfor _, v := range flagNames {\n\t\tf := c.Flags().Lookup(v)\n\t\tif f == nil {\n\t\t\tpanic(fmt.Sprintf(\"Failed to find flag %q and mark it as being required in a flag group\", v))\n\t\t}\n\t\tif err := c.Flags().SetAnnotation(v, requiredAsGroupAnnotation, append(f.Annotations[requiredAsGroupAnnotation], strings.Join(flagNames, \" \"))); err != nil {\n\t\t\t// Only errs if the flag isn't found.\n\t\t\tpanic(err)\n\t\t}\n\t}\n}\n\n// MarkFlagsOneRequired marks the given flags with annotations so that Cobra errors\n// if the command is invoked without at least one flag from the given set of flags.\nfunc (c *Command) MarkFlagsOneRequired(flagNames ...string) {\n\tc.mergePersistentFlags()\n\tfor _, v := range flagNames {\n\t\tf := c.Flags().Lookup(v)\n\t\tif f == nil {\n\t\t\tpanic(fmt.Sprintf(\"Failed to find flag %q and mark it as being in a one-required flag group\", v))\n\t\t}\n\t\tif err := c.Flags().SetAnnotation(v, oneRequiredAnnotation, append(f.Annotations[oneRequiredAnnotation], strings.Join(flagNames, \" \"))); err != nil {\n\t\t\t// Only errs if the flag isn't found.\n\t\t\tpanic(err)\n\t\t}\n\t}\n}\n\n// MarkFlagsMutuallyExclusive marks the given flags with annotations so that Cobra errors\n// if the command is invoked with more than one flag from the given set of flags.\nfunc (c *Command) MarkFlagsMutuallyExclusive(flagNames ...string) {\n\tc.mergePersistentFlags()\n\tfor _, v := range flagNames {\n\t\tf := c.Flags().Lookup(v)\n\t\tif f == nil {\n\t\t\tpanic(fmt.Sprintf(\"Failed to find flag %q and mark it as being in a mutually exclusive flag group\", v))\n\t\t}\n\t\t// Each time this is called is a single new entry; this allows it to be a member of multiple groups if needed.\n\t\tif err := c.Flags().SetAnnotation(v, mutuallyExclusiveAnnotation, append(f.Annotations[mutuallyExclusiveAnnotation], strings.Join(flagNames, \" \"))); err != nil {\n\t\t\tpanic(err)\n\t\t}\n\t}\n}\n\n// ValidateFlagGroups validates the mutuallyExclusive/oneRequired/requiredAsGroup logic and returns the\n// first error encountered.\nfunc (c *Command) ValidateFlagGroups() error {\n\tif c.DisableFlagParsing {\n\t\treturn nil\n\t}\n\n\tflags := c.Flags()\n\n\t// groupStatus format is the list of flags as a unique ID,\n\t// then a map of each flag name and whether it is set or not.\n\tgroupStatus := map[string]map[string]bool{}\n\toneRequiredGroupStatus := map[string]map[string]bool{}\n\tmutuallyExclusiveGroupStatus := map[string]map[string]bool{}\n\tflags.VisitAll(func(pflag *flag.Flag) {\n\t\tprocessFlagForGroupAnnotation(flags, pflag, requiredAsGroupAnnotation, groupStatus)\n\t\tprocessFlagForGroupAnnotation(flags, pflag, oneRequiredAnnotation, oneRequiredGroupStatus)\n\t\tprocessFlagForGroupAnnotation(flags, pflag, mutuallyExclusiveAnnotation, mutuallyExclusiveGroupStatus)\n\t})\n\n\tif err := validateRequiredFlagGroups(groupStatus); err != nil {\n\t\treturn err\n\t}\n\tif err := validateOneRequiredFlagGroups(oneRequiredGroupStatus); err != nil {\n\t\treturn err\n\t}\n\tif err := validateExclusiveFlagGroups(mutuallyExclusiveGroupStatus); err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc hasAllFlags(fs *flag.FlagSet, flagnames ...string) bool {\n\tfor _, fname := range flagnames {\n\t\tf := fs.Lookup(fname)\n\t\tif f == nil {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc processFlagForGroupAnnotation(flags *flag.FlagSet, pflag *flag.Flag, annotation string, groupStatus map[string]map[string]bool) {\n\tgroupInfo, found := pflag.Annotations[annotation]\n\tif found {\n\t\tfor _, group := range groupInfo {\n\t\t\tif groupStatus[group] == nil {\n\t\t\t\tflagnames := strings.Split(group, \" \")\n\n\t\t\t\t// Only consider this flag group at all if all the flags are defined.\n\t\t\t\tif !hasAllFlags(flags, flagnames...) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tgroupStatus[group] = make(map[string]bool, len(flagnames))\n\t\t\t\tfor _, name := range flagnames {\n\t\t\t\t\tgroupStatus[group][name] = false\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgroupStatus[group][pflag.Name] = pflag.Changed\n\t\t}\n\t}\n}\n\nfunc validateRequiredFlagGroups(data map[string]map[string]bool) error {\n\tkeys := sortedKeys(data)\n\tfor _, flagList := range keys {\n\t\tflagnameAndStatus := data[flagList]\n\n\t\tunset := []string{}\n\t\tfor flagname, isSet := range flagnameAndStatus {\n\t\t\tif !isSet {\n\t\t\t\tunset = append(unset, flagname)\n\t\t\t}\n\t\t}\n\t\tif len(unset) == len(flagnameAndStatus) || len(unset) == 0 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Sort values, so they can be tested/scripted against consistently.\n\t\tsort.Strings(unset)\n\t\treturn fmt.Errorf(\"if any flags in the group [%v] are set they must all be set; missing %v\", flagList, unset)\n\t}\n\n\treturn nil\n}\n\nfunc validateOneRequiredFlagGroups(data map[string]map[string]bool) error {\n\tkeys := sortedKeys(data)\n\tfor _, flagList := range keys {\n\t\tflagnameAndStatus := data[flagList]\n\t\tvar set []string\n\t\tfor flagname, isSet := range flagnameAndStatus {\n\t\t\tif isSet {\n\t\t\t\tset = append(set, flagname)\n\t\t\t}\n\t\t}\n\t\tif len(set) >= 1 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Sort values, so they can be tested/scripted against consistently.\n\t\tsort.Strings(set)\n\t\treturn fmt.Errorf(\"at least one of the flags in the group [%v] is required\", flagList)\n\t}\n\treturn nil\n}\n\nfunc validateExclusiveFlagGroups(data map[string]map[string]bool) error {\n\tkeys := sortedKeys(data)\n\tfor _, flagList := range keys {\n\t\tflagnameAndStatus := data[flagList]\n\t\tvar set []string\n\t\tfor flagname, isSet := range flagnameAndStatus {\n\t\t\tif isSet {\n\t\t\t\tset = append(set, flagname)\n\t\t\t}\n\t\t}\n\t\tif len(set) == 0 || len(set) == 1 {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Sort values, so they can be tested/scripted against consistently.\n\t\tsort.Strings(set)\n\t\treturn fmt.Errorf(\"if any flags in the group [%v] are set none of the others can be; %v were all set\", flagList, set)\n\t}\n\treturn nil\n}\n\nfunc sortedKeys(m map[string]map[string]bool) []string {\n\tkeys := make([]string, len(m))\n\ti := 0\n\tfor k := range m {\n\t\tkeys[i] = k\n\t\ti++\n\t}\n\tsort.Strings(keys)\n\treturn keys\n}\n\n// enforceFlagGroupsForCompletion will do the following:\n// - when a flag in a group is present, other flags in the group will be marked required\n// - when none of the flags in a one-required group are present, all flags in the group will be marked required\n// - when a flag in a mutually exclusive group is present, other flags in the group will be marked as hidden\n// This allows the standard completion logic to behave appropriately for flag groups\nfunc (c *Command) enforceFlagGroupsForCompletion() {\n\tif c.DisableFlagParsing {\n\t\treturn\n\t}\n\n\tflags := c.Flags()\n\tgroupStatus := map[string]map[string]bool{}\n\toneRequiredGroupStatus := map[string]map[string]bool{}\n\tmutuallyExclusiveGroupStatus := map[string]map[string]bool{}\n\tc.Flags().VisitAll(func(pflag *flag.Flag) {\n\t\tprocessFlagForGroupAnnotation(flags, pflag, requiredAsGroupAnnotation, groupStatus)\n\t\tprocessFlagForGroupAnnotation(flags, pflag, oneRequiredAnnotation, oneRequiredGroupStatus)\n\t\tprocessFlagForGroupAnnotation(flags, pflag, mutuallyExclusiveAnnotation, mutuallyExclusiveGroupStatus)\n\t})\n\n\t// If a flag that is part of a group is present, we make all the other flags\n\t// of that group required so that the shell completion suggests them automatically\n\tfor flagList, flagnameAndStatus := range groupStatus {\n\t\tfor _, isSet := range flagnameAndStatus {\n\t\t\tif isSet {\n\t\t\t\t// One of the flags of the group is set, mark the other ones as required\n\t\t\t\tfor _, fName := range strings.Split(flagList, \" \") {\n\t\t\t\t\t_ = c.MarkFlagRequired(fName)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// If none of the flags of a one-required group are present, we make all the flags\n\t// of that group required so that the shell completion suggests them automatically\n\tfor flagList, flagnameAndStatus := range oneRequiredGroupStatus {\n\t\tisSet := false\n\n\t\tfor _, isSet = range flagnameAndStatus {\n\t\t\tif isSet {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// None of the flags of the group are set, mark all flags in the group\n\t\t// as required\n\t\tif !isSet {\n\t\t\tfor _, fName := range strings.Split(flagList, \" \") {\n\t\t\t\t_ = c.MarkFlagRequired(fName)\n\t\t\t}\n\t\t}\n\t}\n\n\t// If a flag that is mutually exclusive to others is present, we hide the other\n\t// flags of that group so the shell completion does not suggest them\n\tfor flagList, flagnameAndStatus := range mutuallyExclusiveGroupStatus {\n\t\tfor flagName, isSet := range flagnameAndStatus {\n\t\t\tif isSet {\n\t\t\t\t// One of the flags of the mutually exclusive group is set, mark the other ones as hidden\n\t\t\t\t// Don't mark the flag that is already set as hidden because it may be an\n\t\t\t\t// array or slice flag and therefore must continue being suggested\n\t\t\t\tfor _, fName := range strings.Split(flagList, \" \") {\n\t\t\t\t\tif fName != flagName {\n\t\t\t\t\t\tflag := c.Flags().Lookup(fName)\n\t\t\t\t\t\tflag.Hidden = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/powershell_completions.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// The generated scripts require PowerShell v5.0+ (which comes Windows 10, but\n// can be downloaded separately for windows 7 or 8.1).\n\npackage cobra\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"strings\"\n)\n\nfunc genPowerShellComp(buf io.StringWriter, name string, includeDesc bool) {\n\t// Variables should not contain a '-' or ':' character\n\tnameForVar := name\n\tnameForVar = strings.ReplaceAll(nameForVar, \"-\", \"_\")\n\tnameForVar = strings.ReplaceAll(nameForVar, \":\", \"_\")\n\n\tcompCmd := ShellCompRequestCmd\n\tif !includeDesc {\n\t\tcompCmd = ShellCompNoDescRequestCmd\n\t}\n\tWriteStringAndCheck(buf, fmt.Sprintf(`# powershell completion for %-36[1]s -*- shell-script -*-\n\nfunction __%[1]s_debug {\n    if ($env:BASH_COMP_DEBUG_FILE) {\n        \"$args\" | Out-File -Append -FilePath \"$env:BASH_COMP_DEBUG_FILE\"\n    }\n}\n\nfilter __%[1]s_escapeStringWithSpecialChars {\n`+\"    $_ -replace '\\\\s|#|@|\\\\$|;|,|''|\\\\{|\\\\}|\\\\(|\\\\)|\\\"|`|\\\\||<|>|&','`$&'\"+`\n}\n\n[scriptblock]${__%[2]sCompleterBlock} = {\n    param(\n            $WordToComplete,\n            $CommandAst,\n            $CursorPosition\n        )\n\n    # Get the current command line and convert into a string\n    $Command = $CommandAst.CommandElements\n    $Command = \"$Command\"\n\n    __%[1]s_debug \"\"\n    __%[1]s_debug \"========= starting completion logic ==========\"\n    __%[1]s_debug \"WordToComplete: $WordToComplete Command: $Command CursorPosition: $CursorPosition\"\n\n    # The user could have moved the cursor backwards on the command-line.\n    # We need to trigger completion from the $CursorPosition location, so we need\n    # to truncate the command-line ($Command) up to the $CursorPosition location.\n    # Make sure the $Command is longer then the $CursorPosition before we truncate.\n    # This happens because the $Command does not include the last space.\n    if ($Command.Length -gt $CursorPosition) {\n        $Command=$Command.Substring(0,$CursorPosition)\n    }\n    __%[1]s_debug \"Truncated command: $Command\"\n\n    $ShellCompDirectiveError=%[4]d\n    $ShellCompDirectiveNoSpace=%[5]d\n    $ShellCompDirectiveNoFileComp=%[6]d\n    $ShellCompDirectiveFilterFileExt=%[7]d\n    $ShellCompDirectiveFilterDirs=%[8]d\n    $ShellCompDirectiveKeepOrder=%[9]d\n\n    # Prepare the command to request completions for the program.\n    # Split the command at the first space to separate the program and arguments.\n    $Program,$Arguments = $Command.Split(\" \",2)\n\n    $RequestComp=\"$Program %[3]s $Arguments\"\n    __%[1]s_debug \"RequestComp: $RequestComp\"\n\n    # we cannot use $WordToComplete because it\n    # has the wrong values if the cursor was moved\n    # so use the last argument\n    if ($WordToComplete -ne \"\" ) {\n        $WordToComplete = $Arguments.Split(\" \")[-1]\n    }\n    __%[1]s_debug \"New WordToComplete: $WordToComplete\"\n\n\n    # Check for flag with equal sign\n    $IsEqualFlag = ($WordToComplete -Like \"--*=*\" )\n    if ( $IsEqualFlag ) {\n        __%[1]s_debug \"Completing equal sign flag\"\n        # Remove the flag part\n        $Flag,$WordToComplete = $WordToComplete.Split(\"=\",2)\n    }\n\n    if ( $WordToComplete -eq \"\" -And ( -Not $IsEqualFlag )) {\n        # If the last parameter is complete (there is a space following it)\n        # We add an extra empty parameter so we can indicate this to the go method.\n        __%[1]s_debug \"Adding extra empty parameter\"\n        # PowerShell 7.2+ changed the way how the arguments are passed to executables,\n        # so for pre-7.2 or when Legacy argument passing is enabled we need to use\n`+\"        # `\\\"`\\\" to pass an empty argument, a \\\"\\\" or '' does not work!!!\"+`\n        if ($PSVersionTable.PsVersion -lt [version]'7.2.0' -or\n            ($PSVersionTable.PsVersion -lt [version]'7.3.0' -and -not [ExperimentalFeature]::IsEnabled(\"PSNativeCommandArgumentPassing\")) -or\n            (($PSVersionTable.PsVersion -ge [version]'7.3.0' -or [ExperimentalFeature]::IsEnabled(\"PSNativeCommandArgumentPassing\")) -and\n              $PSNativeCommandArgumentPassing -eq 'Legacy')) {\n`+\"             $RequestComp=\\\"$RequestComp\\\" + ' `\\\"`\\\"'\"+`\n        } else {\n             $RequestComp=\"$RequestComp\" + ' \"\"'\n        }\n    }\n\n    __%[1]s_debug \"Calling $RequestComp\"\n    # First disable ActiveHelp which is not supported for Powershell\n    ${env:%[10]s}=0\n\n    #call the command store the output in $out and redirect stderr and stdout to null\n    # $Out is an array contains each line per element\n    Invoke-Expression -OutVariable out \"$RequestComp\" 2>&1 | Out-Null\n\n    # get directive from last line\n    [int]$Directive = $Out[-1].TrimStart(':')\n    if ($Directive -eq \"\") {\n        # There is no directive specified\n        $Directive = 0\n    }\n    __%[1]s_debug \"The completion directive is: $Directive\"\n\n    # remove directive (last element) from out\n    $Out = $Out | Where-Object { $_ -ne $Out[-1] }\n    __%[1]s_debug \"The completions are: $Out\"\n\n    if (($Directive -band $ShellCompDirectiveError) -ne 0 ) {\n        # Error code.  No completion.\n        __%[1]s_debug \"Received error from custom completion go code\"\n        return\n    }\n\n    $Longest = 0\n    [Array]$Values = $Out | ForEach-Object {\n        #Split the output in name and description\n`+\"        $Name, $Description = $_.Split(\\\"`t\\\",2)\"+`\n        __%[1]s_debug \"Name: $Name Description: $Description\"\n\n        # Look for the longest completion so that we can format things nicely\n        if ($Longest -lt $Name.Length) {\n            $Longest = $Name.Length\n        }\n\n        # Set the description to a one space string if there is none set.\n        # This is needed because the CompletionResult does not accept an empty string as argument\n        if (-Not $Description) {\n            $Description = \" \"\n        }\n        New-Object -TypeName PSCustomObject -Property @{\n            Name = \"$Name\"\n            Description = \"$Description\"\n        }\n    }\n\n\n    $Space = \" \"\n    if (($Directive -band $ShellCompDirectiveNoSpace) -ne 0 ) {\n        # remove the space here\n        __%[1]s_debug \"ShellCompDirectiveNoSpace is called\"\n        $Space = \"\"\n    }\n\n    if ((($Directive -band $ShellCompDirectiveFilterFileExt) -ne 0 ) -or\n       (($Directive -band $ShellCompDirectiveFilterDirs) -ne 0 ))  {\n        __%[1]s_debug \"ShellCompDirectiveFilterFileExt ShellCompDirectiveFilterDirs are not supported\"\n\n        # return here to prevent the completion of the extensions\n        return\n    }\n\n    $Values = $Values | Where-Object {\n        # filter the result\n        $_.Name -like \"$WordToComplete*\"\n\n        # Join the flag back if we have an equal sign flag\n        if ( $IsEqualFlag ) {\n            __%[1]s_debug \"Join the equal sign flag back to the completion value\"\n            $_.Name = $Flag + \"=\" + $_.Name\n        }\n    }\n\n    # we sort the values in ascending order by name if keep order isn't passed\n    if (($Directive -band $ShellCompDirectiveKeepOrder) -eq 0 ) {\n        $Values = $Values | Sort-Object -Property Name\n    }\n\n    if (($Directive -band $ShellCompDirectiveNoFileComp) -ne 0 ) {\n        __%[1]s_debug \"ShellCompDirectiveNoFileComp is called\"\n\n        if ($Values.Length -eq 0) {\n            # Just print an empty string here so the\n            # shell does not start to complete paths.\n            # We cannot use CompletionResult here because\n            # it does not accept an empty string as argument.\n            \"\"\n            return\n        }\n    }\n\n    # Get the current mode\n    $Mode = (Get-PSReadLineKeyHandler | Where-Object {$_.Key -eq \"Tab\" }).Function\n    __%[1]s_debug \"Mode: $Mode\"\n\n    $Values | ForEach-Object {\n\n        # store temporary because switch will overwrite $_\n        $comp = $_\n\n        # PowerShell supports three different completion modes\n        # - TabCompleteNext (default windows style - on each key press the next option is displayed)\n        # - Complete (works like bash)\n        # - MenuComplete (works like zsh)\n        # You set the mode with Set-PSReadLineKeyHandler -Key Tab -Function <mode>\n\n        # CompletionResult Arguments:\n        # 1) CompletionText text to be used as the auto completion result\n        # 2) ListItemText   text to be displayed in the suggestion list\n        # 3) ResultType     type of completion result\n        # 4) ToolTip        text for the tooltip with details about the object\n\n        switch ($Mode) {\n\n            # bash like\n            \"Complete\" {\n\n                if ($Values.Length -eq 1) {\n                    __%[1]s_debug \"Only one completion left\"\n\n                    # insert space after value\n                    $CompletionText = $($comp.Name | __%[1]s_escapeStringWithSpecialChars) + $Space\n                    if ($ExecutionContext.SessionState.LanguageMode -eq \"FullLanguage\"){\n                        [System.Management.Automation.CompletionResult]::new($CompletionText, \"$($comp.Name)\", 'ParameterValue', \"$($comp.Description)\")\n                    } else {\n                        $CompletionText\n                    }\n\n                } else {\n                    # Add the proper number of spaces to align the descriptions\n                    while($comp.Name.Length -lt $Longest) {\n                        $comp.Name = $comp.Name + \" \"\n                    }\n\n                    # Check for empty description and only add parentheses if needed\n                    if ($($comp.Description) -eq \" \" ) {\n                        $Description = \"\"\n                    } else {\n                        $Description = \"  ($($comp.Description))\"\n                    }\n\n                    $CompletionText = \"$($comp.Name)$Description\"\n                    if ($ExecutionContext.SessionState.LanguageMode -eq \"FullLanguage\"){\n                        [System.Management.Automation.CompletionResult]::new($CompletionText, \"$($comp.Name)$Description\", 'ParameterValue', \"$($comp.Description)\")\n                    } else {\n                        $CompletionText\n                    }\n                }\n             }\n\n            # zsh like\n            \"MenuComplete\" {\n                # insert space after value\n                # MenuComplete will automatically show the ToolTip of\n                # the highlighted value at the bottom of the suggestions.\n\n                $CompletionText = $($comp.Name | __%[1]s_escapeStringWithSpecialChars) + $Space\n                if ($ExecutionContext.SessionState.LanguageMode -eq \"FullLanguage\"){\n                    [System.Management.Automation.CompletionResult]::new($CompletionText, \"$($comp.Name)\", 'ParameterValue', \"$($comp.Description)\")\n                } else {\n                    $CompletionText\n                }\n            }\n\n            # TabCompleteNext and in case we get something unknown\n            Default {\n                # Like MenuComplete but we don't want to add a space here because\n                # the user need to press space anyway to get the completion.\n                # Description will not be shown because that's not possible with TabCompleteNext\n\n                $CompletionText = $($comp.Name | __%[1]s_escapeStringWithSpecialChars)\n                if ($ExecutionContext.SessionState.LanguageMode -eq \"FullLanguage\"){\n                    [System.Management.Automation.CompletionResult]::new($CompletionText, \"$($comp.Name)\", 'ParameterValue', \"$($comp.Description)\")\n                } else {\n                    $CompletionText\n                }\n            }\n        }\n\n    }\n}\n\nRegister-ArgumentCompleter -CommandName '%[1]s' -ScriptBlock ${__%[2]sCompleterBlock}\n`, name, nameForVar, compCmd,\n\t\tShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,\n\t\tShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, ShellCompDirectiveKeepOrder, activeHelpEnvVar(name)))\n}\n\nfunc (c *Command) genPowerShellCompletion(w io.Writer, includeDesc bool) error {\n\tbuf := new(bytes.Buffer)\n\tgenPowerShellComp(buf, c.Name(), includeDesc)\n\t_, err := buf.WriteTo(w)\n\treturn err\n}\n\nfunc (c *Command) genPowerShellCompletionFile(filename string, includeDesc bool) error {\n\toutFile, err := os.Create(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer outFile.Close()\n\n\treturn c.genPowerShellCompletion(outFile, includeDesc)\n}\n\n// GenPowerShellCompletionFile generates powershell completion file without descriptions.\nfunc (c *Command) GenPowerShellCompletionFile(filename string) error {\n\treturn c.genPowerShellCompletionFile(filename, false)\n}\n\n// GenPowerShellCompletion generates powershell completion file without descriptions\n// and writes it to the passed writer.\nfunc (c *Command) GenPowerShellCompletion(w io.Writer) error {\n\treturn c.genPowerShellCompletion(w, false)\n}\n\n// GenPowerShellCompletionFileWithDesc generates powershell completion file with descriptions.\nfunc (c *Command) GenPowerShellCompletionFileWithDesc(filename string) error {\n\treturn c.genPowerShellCompletionFile(filename, true)\n}\n\n// GenPowerShellCompletionWithDesc generates powershell completion file with descriptions\n// and writes it to the passed writer.\nfunc (c *Command) GenPowerShellCompletionWithDesc(w io.Writer) error {\n\treturn c.genPowerShellCompletion(w, true)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/shell_completions.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cobra\n\nimport (\n\t\"github.com/spf13/pflag\"\n)\n\n// MarkFlagRequired instructs the various shell completion implementations to\n// prioritize the named flag when performing completion,\n// and causes your command to report an error if invoked without the flag.\nfunc (c *Command) MarkFlagRequired(name string) error {\n\treturn MarkFlagRequired(c.Flags(), name)\n}\n\n// MarkPersistentFlagRequired instructs the various shell completion implementations to\n// prioritize the named persistent flag when performing completion,\n// and causes your command to report an error if invoked without the flag.\nfunc (c *Command) MarkPersistentFlagRequired(name string) error {\n\treturn MarkFlagRequired(c.PersistentFlags(), name)\n}\n\n// MarkFlagRequired instructs the various shell completion implementations to\n// prioritize the named flag when performing completion,\n// and causes your command to report an error if invoked without the flag.\nfunc MarkFlagRequired(flags *pflag.FlagSet, name string) error {\n\treturn flags.SetAnnotation(name, BashCompOneRequiredFlag, []string{\"true\"})\n}\n\n// MarkFlagFilename instructs the various shell completion implementations to\n// limit completions for the named flag to the specified file extensions.\nfunc (c *Command) MarkFlagFilename(name string, extensions ...string) error {\n\treturn MarkFlagFilename(c.Flags(), name, extensions...)\n}\n\n// MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists.\n// The bash completion script will call the bash function f for the flag.\n//\n// This will only work for bash completion.\n// It is recommended to instead use c.RegisterFlagCompletionFunc(...) which allows\n// to register a Go function which will work across all shells.\nfunc (c *Command) MarkFlagCustom(name string, f string) error {\n\treturn MarkFlagCustom(c.Flags(), name, f)\n}\n\n// MarkPersistentFlagFilename instructs the various shell completion\n// implementations to limit completions for the named persistent flag to the\n// specified file extensions.\nfunc (c *Command) MarkPersistentFlagFilename(name string, extensions ...string) error {\n\treturn MarkFlagFilename(c.PersistentFlags(), name, extensions...)\n}\n\n// MarkFlagFilename instructs the various shell completion implementations to\n// limit completions for the named flag to the specified file extensions.\nfunc MarkFlagFilename(flags *pflag.FlagSet, name string, extensions ...string) error {\n\treturn flags.SetAnnotation(name, BashCompFilenameExt, extensions)\n}\n\n// MarkFlagCustom adds the BashCompCustom annotation to the named flag, if it exists.\n// The bash completion script will call the bash function f for the flag.\n//\n// This will only work for bash completion.\n// It is recommended to instead use c.RegisterFlagCompletionFunc(...) which allows\n// to register a Go function which will work across all shells.\nfunc MarkFlagCustom(flags *pflag.FlagSet, name string, f string) error {\n\treturn flags.SetAnnotation(name, BashCompCustom, []string{f})\n}\n\n// MarkFlagDirname instructs the various shell completion implementations to\n// limit completions for the named flag to directory names.\nfunc (c *Command) MarkFlagDirname(name string) error {\n\treturn MarkFlagDirname(c.Flags(), name)\n}\n\n// MarkPersistentFlagDirname instructs the various shell completion\n// implementations to limit completions for the named persistent flag to\n// directory names.\nfunc (c *Command) MarkPersistentFlagDirname(name string) error {\n\treturn MarkFlagDirname(c.PersistentFlags(), name)\n}\n\n// MarkFlagDirname instructs the various shell completion implementations to\n// limit completions for the named flag to directory names.\nfunc MarkFlagDirname(flags *pflag.FlagSet, name string) error {\n\treturn flags.SetAnnotation(name, BashCompSubdirsInDir, []string{})\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/cobra/zsh_completions.go",
    "content": "// Copyright 2013-2023 The Cobra Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage cobra\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n)\n\n// GenZshCompletionFile generates zsh completion file including descriptions.\nfunc (c *Command) GenZshCompletionFile(filename string) error {\n\treturn c.genZshCompletionFile(filename, true)\n}\n\n// GenZshCompletion generates zsh completion file including descriptions\n// and writes it to the passed writer.\nfunc (c *Command) GenZshCompletion(w io.Writer) error {\n\treturn c.genZshCompletion(w, true)\n}\n\n// GenZshCompletionFileNoDesc generates zsh completion file without descriptions.\nfunc (c *Command) GenZshCompletionFileNoDesc(filename string) error {\n\treturn c.genZshCompletionFile(filename, false)\n}\n\n// GenZshCompletionNoDesc generates zsh completion file without descriptions\n// and writes it to the passed writer.\nfunc (c *Command) GenZshCompletionNoDesc(w io.Writer) error {\n\treturn c.genZshCompletion(w, false)\n}\n\n// MarkZshCompPositionalArgumentFile only worked for zsh and its behavior was\n// not consistent with Bash completion. It has therefore been disabled.\n// Instead, when no other completion is specified, file completion is done by\n// default for every argument. One can disable file completion on a per-argument\n// basis by using ValidArgsFunction and ShellCompDirectiveNoFileComp.\n// To achieve file extension filtering, one can use ValidArgsFunction and\n// ShellCompDirectiveFilterFileExt.\n//\n// Deprecated\nfunc (c *Command) MarkZshCompPositionalArgumentFile(argPosition int, patterns ...string) error {\n\treturn nil\n}\n\n// MarkZshCompPositionalArgumentWords only worked for zsh. It has therefore\n// been disabled.\n// To achieve the same behavior across all shells, one can use\n// ValidArgs (for the first argument only) or ValidArgsFunction for\n// any argument (can include the first one also).\n//\n// Deprecated\nfunc (c *Command) MarkZshCompPositionalArgumentWords(argPosition int, words ...string) error {\n\treturn nil\n}\n\nfunc (c *Command) genZshCompletionFile(filename string, includeDesc bool) error {\n\toutFile, err := os.Create(filename)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer outFile.Close()\n\n\treturn c.genZshCompletion(outFile, includeDesc)\n}\n\nfunc (c *Command) genZshCompletion(w io.Writer, includeDesc bool) error {\n\tbuf := new(bytes.Buffer)\n\tgenZshComp(buf, c.Name(), includeDesc)\n\t_, err := buf.WriteTo(w)\n\treturn err\n}\n\nfunc genZshComp(buf io.StringWriter, name string, includeDesc bool) {\n\tcompCmd := ShellCompRequestCmd\n\tif !includeDesc {\n\t\tcompCmd = ShellCompNoDescRequestCmd\n\t}\n\tWriteStringAndCheck(buf, fmt.Sprintf(`#compdef %[1]s\ncompdef _%[1]s %[1]s\n\n# zsh completion for %-36[1]s -*- shell-script -*-\n\n__%[1]s_debug()\n{\n    local file=\"$BASH_COMP_DEBUG_FILE\"\n    if [[ -n ${file} ]]; then\n        echo \"$*\" >> \"${file}\"\n    fi\n}\n\n_%[1]s()\n{\n    local shellCompDirectiveError=%[3]d\n    local shellCompDirectiveNoSpace=%[4]d\n    local shellCompDirectiveNoFileComp=%[5]d\n    local shellCompDirectiveFilterFileExt=%[6]d\n    local shellCompDirectiveFilterDirs=%[7]d\n    local shellCompDirectiveKeepOrder=%[8]d\n\n    local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace keepOrder\n    local -a completions\n\n    __%[1]s_debug \"\\n========= starting completion logic ==========\"\n    __%[1]s_debug \"CURRENT: ${CURRENT}, words[*]: ${words[*]}\"\n\n    # The user could have moved the cursor backwards on the command-line.\n    # We need to trigger completion from the $CURRENT location, so we need\n    # to truncate the command-line ($words) up to the $CURRENT location.\n    # (We cannot use $CURSOR as its value does not work when a command is an alias.)\n    words=(\"${=words[1,CURRENT]}\")\n    __%[1]s_debug \"Truncated words[*]: ${words[*]},\"\n\n    lastParam=${words[-1]}\n    lastChar=${lastParam[-1]}\n    __%[1]s_debug \"lastParam: ${lastParam}, lastChar: ${lastChar}\"\n\n    # For zsh, when completing a flag with an = (e.g., %[1]s -n=<TAB>)\n    # completions must be prefixed with the flag\n    setopt local_options BASH_REMATCH\n    if [[ \"${lastParam}\" =~ '-.*=' ]]; then\n        # We are dealing with a flag with an =\n        flagPrefix=\"-P ${BASH_REMATCH}\"\n    fi\n\n    # Prepare the command to obtain completions\n    requestComp=\"${words[1]} %[2]s ${words[2,-1]}\"\n    if [ \"${lastChar}\" = \"\" ]; then\n        # If the last parameter is complete (there is a space following it)\n        # We add an extra empty parameter so we can indicate this to the go completion code.\n        __%[1]s_debug \"Adding extra empty parameter\"\n        requestComp=\"${requestComp} \\\"\\\"\"\n    fi\n\n    __%[1]s_debug \"About to call: eval ${requestComp}\"\n\n    # Use eval to handle any environment variables and such\n    out=$(eval ${requestComp} 2>/dev/null)\n    __%[1]s_debug \"completion output: ${out}\"\n\n    # Extract the directive integer following a : from the last line\n    local lastLine\n    while IFS='\\n' read -r line; do\n        lastLine=${line}\n    done < <(printf \"%%s\\n\" \"${out[@]}\")\n    __%[1]s_debug \"last line: ${lastLine}\"\n\n    if [ \"${lastLine[1]}\" = : ]; then\n        directive=${lastLine[2,-1]}\n        # Remove the directive including the : and the newline\n        local suffix\n        (( suffix=${#lastLine}+2))\n        out=${out[1,-$suffix]}\n    else\n        # There is no directive specified.  Leave $out as is.\n        __%[1]s_debug \"No directive found.  Setting do default\"\n        directive=0\n    fi\n\n    __%[1]s_debug \"directive: ${directive}\"\n    __%[1]s_debug \"completions: ${out}\"\n    __%[1]s_debug \"flagPrefix: ${flagPrefix}\"\n\n    if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then\n        __%[1]s_debug \"Completion received error. Ignoring completions.\"\n        return\n    fi\n\n    local activeHelpMarker=\"%[9]s\"\n    local endIndex=${#activeHelpMarker}\n    local startIndex=$((${#activeHelpMarker}+1))\n    local hasActiveHelp=0\n    while IFS='\\n' read -r comp; do\n        # Check if this is an activeHelp statement (i.e., prefixed with $activeHelpMarker)\n        if [ \"${comp[1,$endIndex]}\" = \"$activeHelpMarker\" ];then\n            __%[1]s_debug \"ActiveHelp found: $comp\"\n            comp=\"${comp[$startIndex,-1]}\"\n            if [ -n \"$comp\" ]; then\n                compadd -x \"${comp}\"\n                __%[1]s_debug \"ActiveHelp will need delimiter\"\n                hasActiveHelp=1\n            fi\n\n            continue\n        fi\n\n        if [ -n \"$comp\" ]; then\n            # If requested, completions are returned with a description.\n            # The description is preceded by a TAB character.\n            # For zsh's _describe, we need to use a : instead of a TAB.\n            # We first need to escape any : as part of the completion itself.\n            comp=${comp//:/\\\\:}\n\n            local tab=\"$(printf '\\t')\"\n            comp=${comp//$tab/:}\n\n            __%[1]s_debug \"Adding completion: ${comp}\"\n            completions+=${comp}\n            lastComp=$comp\n        fi\n    done < <(printf \"%%s\\n\" \"${out[@]}\")\n\n    # Add a delimiter after the activeHelp statements, but only if:\n    # - there are completions following the activeHelp statements, or\n    # - file completion will be performed (so there will be choices after the activeHelp)\n    if [ $hasActiveHelp -eq 1 ]; then\n        if [ ${#completions} -ne 0 ] || [ $((directive & shellCompDirectiveNoFileComp)) -eq 0 ]; then\n            __%[1]s_debug \"Adding activeHelp delimiter\"\n            compadd -x \"--\"\n            hasActiveHelp=0\n        fi\n    fi\n\n    if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then\n        __%[1]s_debug \"Activating nospace.\"\n        noSpace=\"-S ''\"\n    fi\n\n    if [ $((directive & shellCompDirectiveKeepOrder)) -ne 0 ]; then\n        __%[1]s_debug \"Activating keep order.\"\n        keepOrder=\"-V\"\n    fi\n\n    if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then\n        # File extension filtering\n        local filteringCmd\n        filteringCmd='_files'\n        for filter in ${completions[@]}; do\n            if [ ${filter[1]} != '*' ]; then\n                # zsh requires a glob pattern to do file filtering\n                filter=\"\\*.$filter\"\n            fi\n            filteringCmd+=\" -g $filter\"\n        done\n        filteringCmd+=\" ${flagPrefix}\"\n\n        __%[1]s_debug \"File filtering command: $filteringCmd\"\n        _arguments '*:filename:'\"$filteringCmd\"\n    elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then\n        # File completion for directories only\n        local subdir\n        subdir=\"${completions[1]}\"\n        if [ -n \"$subdir\" ]; then\n            __%[1]s_debug \"Listing directories in $subdir\"\n            pushd \"${subdir}\" >/dev/null 2>&1\n        else\n            __%[1]s_debug \"Listing directories in .\"\n        fi\n\n        local result\n        _arguments '*:dirname:_files -/'\" ${flagPrefix}\"\n        result=$?\n        if [ -n \"$subdir\" ]; then\n            popd >/dev/null 2>&1\n        fi\n        return $result\n    else\n        __%[1]s_debug \"Calling _describe\"\n        if eval _describe $keepOrder \"completions\" completions $flagPrefix $noSpace; then\n            __%[1]s_debug \"_describe found some completions\"\n\n            # Return the success of having called _describe\n            return 0\n        else\n            __%[1]s_debug \"_describe did not find completions.\"\n            __%[1]s_debug \"Checking if we should do file completion.\"\n            if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then\n                __%[1]s_debug \"deactivating file completion\"\n\n                # We must return an error code here to let zsh know that there were no\n                # completions found by _describe; this is what will trigger other\n                # matching algorithms to attempt to find completions.\n                # For example zsh can match letters in the middle of words.\n                return 1\n            else\n                # Perform file completion\n                __%[1]s_debug \"Activating file completion\"\n\n                # We must return the result of this command, so it must be the\n                # last command, or else we must store its result to return it.\n                _arguments '*:filename:_files'\" ${flagPrefix}\"\n            fi\n        fi\n    fi\n}\n\n# don't run the completion function when being source-ed or eval-ed\nif [ \"$funcstack[1]\" = \"_%[1]s\" ]; then\n    _%[1]s\nfi\n`, name, compCmd,\n\t\tShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp,\n\t\tShellCompDirectiveFilterFileExt, ShellCompDirectiveFilterDirs, ShellCompDirectiveKeepOrder,\n\t\tactiveHelpMarker))\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/.editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.go]\nindent_style = tab\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/.gitignore",
    "content": ".idea/*\n\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/.golangci.yaml",
    "content": "linters:\n    disable-all: true\n    enable:\n        - nolintlint\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/.travis.yml",
    "content": "sudo: false\n\nlanguage: go\n\ngo:\n  - 1.9.x\n  - 1.10.x\n  - 1.11.x\n  - tip\n\nmatrix:\n  allow_failures:\n    - go: tip\n\ninstall:\n  - go get golang.org/x/lint/golint\n  - export PATH=$GOPATH/bin:$PATH\n  - go install ./...\n\nscript:\n  - verify/all.sh -v\n  - go test ./...\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/LICENSE",
    "content": "Copyright (c) 2012 Alex Ogier. All rights reserved.\nCopyright (c) 2012 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/README.md",
    "content": "[![Build Status](https://travis-ci.org/spf13/pflag.svg?branch=master)](https://travis-ci.org/spf13/pflag)\n[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/pflag)](https://goreportcard.com/report/github.com/spf13/pflag)\n[![GoDoc](https://godoc.org/github.com/spf13/pflag?status.svg)](https://godoc.org/github.com/spf13/pflag)\n\n## Description\n\npflag is a drop-in replacement for Go's flag package, implementing\nPOSIX/GNU-style --flags.\n\npflag is compatible with the [GNU extensions to the POSIX recommendations\nfor command-line options][1]. For a more precise description, see the\n\"Command-line flag syntax\" section below.\n\n[1]: http://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html\n\npflag is available under the same style of BSD license as the Go language,\nwhich can be found in the LICENSE file.\n\n## Installation\n\npflag is available using the standard `go get` command.\n\nInstall by running:\n\n    go get github.com/spf13/pflag\n\nRun tests by running:\n\n    go test github.com/spf13/pflag\n\n## Usage\n\npflag is a drop-in replacement of Go's native flag package. If you import\npflag under the name \"flag\" then all code should continue to function\nwith no changes.\n\n``` go\nimport flag \"github.com/spf13/pflag\"\n```\n\nThere is one exception to this: if you directly instantiate the Flag struct\nthere is one more field \"Shorthand\" that you will need to set.\nMost code never instantiates this struct directly, and instead uses\nfunctions such as String(), BoolVar(), and Var(), and is therefore\nunaffected.\n\nDefine flags using flag.String(), Bool(), Int(), etc.\n\nThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n\n``` go\nvar ip *int = flag.Int(\"flagname\", 1234, \"help message for flagname\")\n```\n\nIf you like, you can bind the flag to a variable using the Var() functions.\n\n``` go\nvar flagvar int\nfunc init() {\n    flag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n}\n```\n\nOr you can create custom flags that satisfy the Value interface (with\npointer receivers) and couple them to flag parsing by\n\n``` go\nflag.Var(&flagVal, \"name\", \"help message for flagname\")\n```\n\nFor such flags, the default value is just the initial value of the variable.\n\nAfter all flags are defined, call\n\n``` go\nflag.Parse()\n```\n\nto parse the command line into the defined flags.\n\nFlags may then be used directly. If you're using the flags themselves,\nthey are all pointers; if you bind to variables, they're values.\n\n``` go\nfmt.Println(\"ip has value \", *ip)\nfmt.Println(\"flagvar has value \", flagvar)\n```\n\nThere are helper functions available to get the value stored in a Flag if you have a FlagSet but find\nit difficult to keep up with all of the pointers in your code.\nIf you have a pflag.FlagSet with a flag called 'flagname' of type int you\ncan use GetInt() to get the int value. But notice that 'flagname' must exist\nand it must be an int. GetString(\"flagname\") will fail.\n\n``` go\ni, err := flagset.GetInt(\"flagname\")\n```\n\nAfter parsing, the arguments after the flag are available as the\nslice flag.Args() or individually as flag.Arg(i).\nThe arguments are indexed from 0 through flag.NArg()-1.\n\nThe pflag package also defines some new functions that are not in flag,\nthat give one-letter shorthands for flags. You can use these by appending\n'P' to the name of any function that defines a flag.\n\n``` go\nvar ip = flag.IntP(\"flagname\", \"f\", 1234, \"help message\")\nvar flagvar bool\nfunc init() {\n\tflag.BoolVarP(&flagvar, \"boolname\", \"b\", true, \"help message\")\n}\nflag.VarP(&flagVal, \"varname\", \"v\", \"help message\")\n```\n\nShorthand letters can be used with single dashes on the command line.\nBoolean shorthand flags can be combined with other shorthand flags.\n\nThe default set of command-line flags is controlled by\ntop-level functions.  The FlagSet type allows one to define\nindependent sets of flags, such as to implement subcommands\nin a command-line interface. The methods of FlagSet are\nanalogous to the top-level functions for the command-line\nflag set.\n\n## Setting no option default values for flags\n\nAfter you create a flag it is possible to set the pflag.NoOptDefVal for\nthe given flag. Doing this changes the meaning of the flag slightly. If\na flag has a NoOptDefVal and the flag is set on the command line without\nan option the flag will be set to the NoOptDefVal. For example given:\n\n``` go\nvar ip = flag.IntP(\"flagname\", \"f\", 1234, \"help message\")\nflag.Lookup(\"flagname\").NoOptDefVal = \"4321\"\n```\n\nWould result in something like\n\n| Parsed Arguments | Resulting Value |\n| -------------    | -------------   |\n| --flagname=1357  | ip=1357         |\n| --flagname       | ip=4321         |\n| [nothing]        | ip=1234         |\n\n## Command line flag syntax\n\n```\n--flag    // boolean flags, or flags with no option default values\n--flag x  // only on flags without a default value\n--flag=x\n```\n\nUnlike the flag package, a single dash before an option means something\ndifferent than a double dash. Single dashes signify a series of shorthand\nletters for flags. All but the last shorthand letter must be boolean flags\nor a flag with a default value\n\n```\n// boolean or flags where the 'no option default value' is set\n-f\n-f=true\n-abc\nbut\n-b true is INVALID\n\n// non-boolean and flags without a 'no option default value'\n-n 1234\n-n=1234\n-n1234\n\n// mixed\n-abcs \"hello\"\n-absd=\"hello\"\n-abcs1234\n```\n\nFlag parsing stops after the terminator \"--\". Unlike the flag package,\nflags can be interspersed with arguments anywhere on the command line\nbefore this terminator.\n\nInteger flags accept 1234, 0664, 0x1234 and may be negative.\nBoolean flags (in their long form) accept 1, 0, t, f, true, false,\nTRUE, FALSE, True, False.\nDuration flags accept any input valid for time.ParseDuration.\n\n## Mutating or \"Normalizing\" Flag names\n\nIt is possible to set a custom flag name 'normalization function.' It allows flag names to be mutated both when created in the code and when used on the command line to some 'normalized' form. The 'normalized' form is used for comparison. Two examples of using the custom normalization func follow.\n\n**Example #1**: You want -, _, and . in flags to compare the same. aka --my-flag == --my_flag == --my.flag\n\n``` go\nfunc wordSepNormalizeFunc(f *pflag.FlagSet, name string) pflag.NormalizedName {\n\tfrom := []string{\"-\", \"_\"}\n\tto := \".\"\n\tfor _, sep := range from {\n\t\tname = strings.Replace(name, sep, to, -1)\n\t}\n\treturn pflag.NormalizedName(name)\n}\n\nmyFlagSet.SetNormalizeFunc(wordSepNormalizeFunc)\n```\n\n**Example #2**: You want to alias two flags. aka --old-flag-name == --new-flag-name\n\n``` go\nfunc aliasNormalizeFunc(f *pflag.FlagSet, name string) pflag.NormalizedName {\n\tswitch name {\n\tcase \"old-flag-name\":\n\t\tname = \"new-flag-name\"\n\t\tbreak\n\t}\n\treturn pflag.NormalizedName(name)\n}\n\nmyFlagSet.SetNormalizeFunc(aliasNormalizeFunc)\n```\n\n## Deprecating a flag or its shorthand\nIt is possible to deprecate a flag, or just its shorthand. Deprecating a flag/shorthand hides it from help text and prints a usage message when the deprecated flag/shorthand is used.\n\n**Example #1**: You want to deprecate a flag named \"badflag\" as well as inform the users what flag they should use instead.\n```go\n// deprecate a flag by specifying its name and a usage message\nflags.MarkDeprecated(\"badflag\", \"please use --good-flag instead\")\n```\nThis hides \"badflag\" from help text, and prints `Flag --badflag has been deprecated, please use --good-flag instead` when \"badflag\" is used.\n\n**Example #2**: You want to keep a flag name \"noshorthandflag\" but deprecate its shortname \"n\".\n```go\n// deprecate a flag shorthand by specifying its flag name and a usage message\nflags.MarkShorthandDeprecated(\"noshorthandflag\", \"please use --noshorthandflag only\")\n```\nThis hides the shortname \"n\" from help text, and prints `Flag shorthand -n has been deprecated, please use --noshorthandflag only` when the shorthand \"n\" is used.\n\nNote that usage message is essential here, and it should not be empty.\n\n## Hidden flags\nIt is possible to mark a flag as hidden, meaning it will still function as normal, however will not show up in usage/help text.\n\n**Example**: You have a flag named \"secretFlag\" that you need for internal use only and don't want it showing up in help text, or for its usage text to be available.\n```go\n// hide a flag by specifying its name\nflags.MarkHidden(\"secretFlag\")\n```\n\n## Disable sorting of flags\n`pflag` allows you to disable sorting of flags for help and usage message.\n\n**Example**:\n```go\nflags.BoolP(\"verbose\", \"v\", false, \"verbose output\")\nflags.String(\"coolflag\", \"yeaah\", \"it's really cool flag\")\nflags.Int(\"usefulflag\", 777, \"sometimes it's very useful\")\nflags.SortFlags = false\nflags.PrintDefaults()\n```\n**Output**:\n```\n  -v, --verbose           verbose output\n      --coolflag string   it's really cool flag (default \"yeaah\")\n      --usefulflag int    sometimes it's very useful (default 777)\n```\n\n\n## Supporting Go flags when using pflag\nIn order to support flags defined using Go's `flag` package, they must be added to the `pflag` flagset. This is usually necessary\nto support flags defined by third-party dependencies (e.g. `golang/glog`).\n\n**Example**: You want to add the Go flags to the `CommandLine` flagset\n```go\nimport (\n\tgoflag \"flag\"\n\tflag \"github.com/spf13/pflag\"\n)\n\nvar ip *int = flag.Int(\"flagname\", 1234, \"help message for flagname\")\n\nfunc main() {\n\tflag.CommandLine.AddGoFlagSet(goflag.CommandLine)\n\tflag.Parse()\n}\n```\n\n### Using pflag with go test\n`pflag` does not parse the shorthand versions of go test's built-in flags (i.e., those starting with `-test.`).\nFor more context, see issues [#63](https://github.com/spf13/pflag/issues/63) and [#238](https://github.com/spf13/pflag/issues/238) for more details.\n\nFor example, if you use pflag in your `TestMain` function and call `pflag.Parse()` after defining your custom flags, running a test like this:\n```bash\ngo test /your/tests -run ^YourTest -v --your-test-pflags\n```\nwill result in the `-v` flag being ignored. This happens because of the way pflag handles flag parsing, skipping over go test's built-in shorthand flags.\nTo work around this, you can use the `ParseSkippedFlags` function, which ensures that go test's flags are parsed separately using the standard flag package.\n\n**Example**: You want to parse go test flags that are otherwise ignore by `pflag.Parse()`\n```go\nimport (\n\tgoflag \"flag\"\n\tflag \"github.com/spf13/pflag\"\n)\n\nvar ip *int = flag.Int(\"flagname\", 1234, \"help message for flagname\")\n\nfunc main() {\n\tflag.CommandLine.AddGoFlagSet(goflag.CommandLine)\n    flag.ParseSkippedFlags(os.Args[1:], goflag.CommandLine)\n\tflag.Parse()\n}\n```\n\n## More info\n\nYou can see the full reference documentation of the pflag package\n[at godoc.org][3], or through go's standard documentation system by\nrunning `godoc -http=:6060` and browsing to\n[http://localhost:6060/pkg/github.com/spf13/pflag][2] after\ninstallation.\n\n[2]: http://localhost:6060/pkg/github.com/spf13/pflag\n[3]: http://godoc.org/github.com/spf13/pflag\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/bool.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// optional interface to indicate boolean flags that can be\n// supplied without \"=value\" text\ntype boolFlag interface {\n\tValue\n\tIsBoolFlag() bool\n}\n\n// -- bool Value\ntype boolValue bool\n\nfunc newBoolValue(val bool, p *bool) *boolValue {\n\t*p = val\n\treturn (*boolValue)(p)\n}\n\nfunc (b *boolValue) Set(s string) error {\n\tv, err := strconv.ParseBool(s)\n\t*b = boolValue(v)\n\treturn err\n}\n\nfunc (b *boolValue) Type() string {\n\treturn \"bool\"\n}\n\nfunc (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) }\n\nfunc (b *boolValue) IsBoolFlag() bool { return true }\n\nfunc boolConv(sval string) (interface{}, error) {\n\treturn strconv.ParseBool(sval)\n}\n\n// GetBool return the bool value of a flag with the given name\nfunc (f *FlagSet) GetBool(name string) (bool, error) {\n\tval, err := f.getFlagType(name, \"bool\", boolConv)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\treturn val.(bool), nil\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolVar(p *bool, name string, value bool, usage string) {\n\tf.BoolVarP(p, name, \"\", value, usage)\n}\n\n// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolVarP(p *bool, name, shorthand string, value bool, usage string) {\n\tflag := f.VarPF(newBoolValue(value, p), name, shorthand, usage)\n\tflag.NoOptDefVal = \"true\"\n}\n\n// BoolVar defines a bool flag with specified name, default value, and usage string.\n// The argument p points to a bool variable in which to store the value of the flag.\nfunc BoolVar(p *bool, name string, value bool, usage string) {\n\tBoolVarP(p, name, \"\", value, usage)\n}\n\n// BoolVarP is like BoolVar, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolVarP(p *bool, name, shorthand string, value bool, usage string) {\n\tflag := CommandLine.VarPF(newBoolValue(value, p), name, shorthand, usage)\n\tflag.NoOptDefVal = \"true\"\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc (f *FlagSet) Bool(name string, value bool, usage string) *bool {\n\treturn f.BoolP(name, \"\", value, usage)\n}\n\n// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolP(name, shorthand string, value bool, usage string) *bool {\n\tp := new(bool)\n\tf.BoolVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Bool defines a bool flag with specified name, default value, and usage string.\n// The return value is the address of a bool variable that stores the value of the flag.\nfunc Bool(name string, value bool, usage string) *bool {\n\treturn BoolP(name, \"\", value, usage)\n}\n\n// BoolP is like Bool, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolP(name, shorthand string, value bool, usage string) *bool {\n\tb := CommandLine.BoolP(name, shorthand, value, usage)\n\treturn b\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/bool_func.go",
    "content": "package pflag\n\n// -- func Value\ntype boolfuncValue func(string) error\n\nfunc (f boolfuncValue) Set(s string) error { return f(s) }\n\nfunc (f boolfuncValue) Type() string { return \"boolfunc\" }\n\nfunc (f boolfuncValue) String() string { return \"\" } // same behavior as stdlib 'flag' package\n\nfunc (f boolfuncValue) IsBoolFlag() bool { return true }\n\n// BoolFunc defines a func flag with specified name, callback function and usage string.\n//\n// The callback function will be called every time \"--{name}\" (or any form that matches the flag) is parsed\n// on the command line.\nfunc (f *FlagSet) BoolFunc(name string, usage string, fn func(string) error) {\n\tf.BoolFuncP(name, \"\", usage, fn)\n}\n\n// BoolFuncP is like BoolFunc, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolFuncP(name, shorthand string, usage string, fn func(string) error) {\n\tvar val Value = boolfuncValue(fn)\n\tflag := f.VarPF(val, name, shorthand, usage)\n\tflag.NoOptDefVal = \"true\"\n}\n\n// BoolFunc defines a func flag with specified name, callback function and usage string.\n//\n// The callback function will be called every time \"--{name}\" (or any form that matches the flag) is parsed\n// on the command line.\nfunc BoolFunc(name string, usage string, fn func(string) error) {\n\tCommandLine.BoolFuncP(name, \"\", usage, fn)\n}\n\n// BoolFuncP is like BoolFunc, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolFuncP(name, shorthand string, usage string, fn func(string) error) {\n\tCommandLine.BoolFuncP(name, shorthand, usage, fn)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/bool_slice.go",
    "content": "package pflag\n\nimport (\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- boolSlice Value\ntype boolSliceValue struct {\n\tvalue   *[]bool\n\tchanged bool\n}\n\nfunc newBoolSliceValue(val []bool, p *[]bool) *boolSliceValue {\n\tbsv := new(boolSliceValue)\n\tbsv.value = p\n\t*bsv.value = val\n\treturn bsv\n}\n\n// Set converts, and assigns, the comma-separated boolean argument string representation as the []bool value of this flag.\n// If Set is called on a flag that already has a []bool assigned, the newly converted values will be appended.\nfunc (s *boolSliceValue) Set(val string) error {\n\n\t// remove all quote characters\n\trmQuote := strings.NewReplacer(`\"`, \"\", `'`, \"\", \"`\", \"\")\n\n\t// read flag arguments with CSV parser\n\tboolStrSlice, err := readAsCSV(rmQuote.Replace(val))\n\tif err != nil && err != io.EOF {\n\t\treturn err\n\t}\n\n\t// parse boolean values into slice\n\tout := make([]bool, 0, len(boolStrSlice))\n\tfor _, boolStr := range boolStrSlice {\n\t\tb, err := strconv.ParseBool(strings.TrimSpace(boolStr))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tout = append(out, b)\n\t}\n\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\n\ts.changed = true\n\n\treturn nil\n}\n\n// Type returns a string that uniquely represents this flag's type.\nfunc (s *boolSliceValue) Type() string {\n\treturn \"boolSlice\"\n}\n\n// String defines a \"native\" format for this boolean slice flag value.\nfunc (s *boolSliceValue) String() string {\n\n\tboolStrSlice := make([]string, len(*s.value))\n\tfor i, b := range *s.value {\n\t\tboolStrSlice[i] = strconv.FormatBool(b)\n\t}\n\n\tout, _ := writeAsCSV(boolStrSlice)\n\n\treturn \"[\" + out + \"]\"\n}\n\nfunc (s *boolSliceValue) fromString(val string) (bool, error) {\n\treturn strconv.ParseBool(val)\n}\n\nfunc (s *boolSliceValue) toString(val bool) string {\n\treturn strconv.FormatBool(val)\n}\n\nfunc (s *boolSliceValue) Append(val string) error {\n\ti, err := s.fromString(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*s.value = append(*s.value, i)\n\treturn nil\n}\n\nfunc (s *boolSliceValue) Replace(val []string) error {\n\tout := make([]bool, len(val))\n\tfor i, d := range val {\n\t\tvar err error\n\t\tout[i], err = s.fromString(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *boolSliceValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = s.toString(d)\n\t}\n\treturn out\n}\n\nfunc boolSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []bool{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]bool, len(ss))\n\tfor i, t := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.ParseBool(t)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn out, nil\n}\n\n// GetBoolSlice returns the []bool value of a flag with the given name.\nfunc (f *FlagSet) GetBoolSlice(name string) ([]bool, error) {\n\tval, err := f.getFlagType(name, \"boolSlice\", boolSliceConv)\n\tif err != nil {\n\t\treturn []bool{}, err\n\t}\n\treturn val.([]bool), nil\n}\n\n// BoolSliceVar defines a boolSlice flag with specified name, default value, and usage string.\n// The argument p points to a []bool variable in which to store the value of the flag.\nfunc (f *FlagSet) BoolSliceVar(p *[]bool, name string, value []bool, usage string) {\n\tf.VarP(newBoolSliceValue(value, p), name, \"\", usage)\n}\n\n// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) {\n\tf.VarP(newBoolSliceValue(value, p), name, shorthand, usage)\n}\n\n// BoolSliceVar defines a []bool flag with specified name, default value, and usage string.\n// The argument p points to a []bool variable in which to store the value of the flag.\nfunc BoolSliceVar(p *[]bool, name string, value []bool, usage string) {\n\tCommandLine.VarP(newBoolSliceValue(value, p), name, \"\", usage)\n}\n\n// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) {\n\tCommandLine.VarP(newBoolSliceValue(value, p), name, shorthand, usage)\n}\n\n// BoolSlice defines a []bool flag with specified name, default value, and usage string.\n// The return value is the address of a []bool variable that stores the value of the flag.\nfunc (f *FlagSet) BoolSlice(name string, value []bool, usage string) *[]bool {\n\tp := []bool{}\n\tf.BoolSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool {\n\tp := []bool{}\n\tf.BoolSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// BoolSlice defines a []bool flag with specified name, default value, and usage string.\n// The return value is the address of a []bool variable that stores the value of the flag.\nfunc BoolSlice(name string, value []bool, usage string) *[]bool {\n\treturn CommandLine.BoolSliceP(name, \"\", value, usage)\n}\n\n// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool {\n\treturn CommandLine.BoolSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/bytes.go",
    "content": "package pflag\n\nimport (\n\t\"encoding/base64\"\n\t\"encoding/hex\"\n\t\"fmt\"\n\t\"strings\"\n)\n\n// BytesHex adapts []byte for use as a flag. Value of flag is HEX encoded\ntype bytesHexValue []byte\n\n// String implements pflag.Value.String.\nfunc (bytesHex bytesHexValue) String() string {\n\treturn fmt.Sprintf(\"%X\", []byte(bytesHex))\n}\n\n// Set implements pflag.Value.Set.\nfunc (bytesHex *bytesHexValue) Set(value string) error {\n\tbin, err := hex.DecodeString(strings.TrimSpace(value))\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*bytesHex = bin\n\n\treturn nil\n}\n\n// Type implements pflag.Value.Type.\nfunc (*bytesHexValue) Type() string {\n\treturn \"bytesHex\"\n}\n\nfunc newBytesHexValue(val []byte, p *[]byte) *bytesHexValue {\n\t*p = val\n\treturn (*bytesHexValue)(p)\n}\n\nfunc bytesHexConv(sval string) (interface{}, error) {\n\n\tbin, err := hex.DecodeString(sval)\n\n\tif err == nil {\n\t\treturn bin, nil\n\t}\n\n\treturn nil, fmt.Errorf(\"invalid string being converted to Bytes: %s %s\", sval, err)\n}\n\n// GetBytesHex return the []byte value of a flag with the given name\nfunc (f *FlagSet) GetBytesHex(name string) ([]byte, error) {\n\tval, err := f.getFlagType(name, \"bytesHex\", bytesHexConv)\n\n\tif err != nil {\n\t\treturn []byte{}, err\n\t}\n\n\treturn val.([]byte), nil\n}\n\n// BytesHexVar defines an []byte flag with specified name, default value, and usage string.\n// The argument p points to an []byte variable in which to store the value of the flag.\nfunc (f *FlagSet) BytesHexVar(p *[]byte, name string, value []byte, usage string) {\n\tf.VarP(newBytesHexValue(value, p), name, \"\", usage)\n}\n\n// BytesHexVarP is like BytesHexVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BytesHexVarP(p *[]byte, name, shorthand string, value []byte, usage string) {\n\tf.VarP(newBytesHexValue(value, p), name, shorthand, usage)\n}\n\n// BytesHexVar defines an []byte flag with specified name, default value, and usage string.\n// The argument p points to an []byte variable in which to store the value of the flag.\nfunc BytesHexVar(p *[]byte, name string, value []byte, usage string) {\n\tCommandLine.VarP(newBytesHexValue(value, p), name, \"\", usage)\n}\n\n// BytesHexVarP is like BytesHexVar, but accepts a shorthand letter that can be used after a single dash.\nfunc BytesHexVarP(p *[]byte, name, shorthand string, value []byte, usage string) {\n\tCommandLine.VarP(newBytesHexValue(value, p), name, shorthand, usage)\n}\n\n// BytesHex defines an []byte flag with specified name, default value, and usage string.\n// The return value is the address of an []byte variable that stores the value of the flag.\nfunc (f *FlagSet) BytesHex(name string, value []byte, usage string) *[]byte {\n\tp := new([]byte)\n\tf.BytesHexVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// BytesHexP is like BytesHex, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BytesHexP(name, shorthand string, value []byte, usage string) *[]byte {\n\tp := new([]byte)\n\tf.BytesHexVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// BytesHex defines an []byte flag with specified name, default value, and usage string.\n// The return value is the address of an []byte variable that stores the value of the flag.\nfunc BytesHex(name string, value []byte, usage string) *[]byte {\n\treturn CommandLine.BytesHexP(name, \"\", value, usage)\n}\n\n// BytesHexP is like BytesHex, but accepts a shorthand letter that can be used after a single dash.\nfunc BytesHexP(name, shorthand string, value []byte, usage string) *[]byte {\n\treturn CommandLine.BytesHexP(name, shorthand, value, usage)\n}\n\n// BytesBase64 adapts []byte for use as a flag. Value of flag is Base64 encoded\ntype bytesBase64Value []byte\n\n// String implements pflag.Value.String.\nfunc (bytesBase64 bytesBase64Value) String() string {\n\treturn base64.StdEncoding.EncodeToString([]byte(bytesBase64))\n}\n\n// Set implements pflag.Value.Set.\nfunc (bytesBase64 *bytesBase64Value) Set(value string) error {\n\tbin, err := base64.StdEncoding.DecodeString(strings.TrimSpace(value))\n\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t*bytesBase64 = bin\n\n\treturn nil\n}\n\n// Type implements pflag.Value.Type.\nfunc (*bytesBase64Value) Type() string {\n\treturn \"bytesBase64\"\n}\n\nfunc newBytesBase64Value(val []byte, p *[]byte) *bytesBase64Value {\n\t*p = val\n\treturn (*bytesBase64Value)(p)\n}\n\nfunc bytesBase64ValueConv(sval string) (interface{}, error) {\n\n\tbin, err := base64.StdEncoding.DecodeString(sval)\n\tif err == nil {\n\t\treturn bin, nil\n\t}\n\n\treturn nil, fmt.Errorf(\"invalid string being converted to Bytes: %s %s\", sval, err)\n}\n\n// GetBytesBase64 return the []byte value of a flag with the given name\nfunc (f *FlagSet) GetBytesBase64(name string) ([]byte, error) {\n\tval, err := f.getFlagType(name, \"bytesBase64\", bytesBase64ValueConv)\n\n\tif err != nil {\n\t\treturn []byte{}, err\n\t}\n\n\treturn val.([]byte), nil\n}\n\n// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.\n// The argument p points to an []byte variable in which to store the value of the flag.\nfunc (f *FlagSet) BytesBase64Var(p *[]byte, name string, value []byte, usage string) {\n\tf.VarP(newBytesBase64Value(value, p), name, \"\", usage)\n}\n\n// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {\n\tf.VarP(newBytesBase64Value(value, p), name, shorthand, usage)\n}\n\n// BytesBase64Var defines an []byte flag with specified name, default value, and usage string.\n// The argument p points to an []byte variable in which to store the value of the flag.\nfunc BytesBase64Var(p *[]byte, name string, value []byte, usage string) {\n\tCommandLine.VarP(newBytesBase64Value(value, p), name, \"\", usage)\n}\n\n// BytesBase64VarP is like BytesBase64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc BytesBase64VarP(p *[]byte, name, shorthand string, value []byte, usage string) {\n\tCommandLine.VarP(newBytesBase64Value(value, p), name, shorthand, usage)\n}\n\n// BytesBase64 defines an []byte flag with specified name, default value, and usage string.\n// The return value is the address of an []byte variable that stores the value of the flag.\nfunc (f *FlagSet) BytesBase64(name string, value []byte, usage string) *[]byte {\n\tp := new([]byte)\n\tf.BytesBase64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {\n\tp := new([]byte)\n\tf.BytesBase64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// BytesBase64 defines an []byte flag with specified name, default value, and usage string.\n// The return value is the address of an []byte variable that stores the value of the flag.\nfunc BytesBase64(name string, value []byte, usage string) *[]byte {\n\treturn CommandLine.BytesBase64P(name, \"\", value, usage)\n}\n\n// BytesBase64P is like BytesBase64, but accepts a shorthand letter that can be used after a single dash.\nfunc BytesBase64P(name, shorthand string, value []byte, usage string) *[]byte {\n\treturn CommandLine.BytesBase64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/count.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- count Value\ntype countValue int\n\nfunc newCountValue(val int, p *int) *countValue {\n\t*p = val\n\treturn (*countValue)(p)\n}\n\nfunc (i *countValue) Set(s string) error {\n\t// \"+1\" means that no specific value was passed, so increment\n\tif s == \"+1\" {\n\t\t*i = countValue(*i + 1)\n\t\treturn nil\n\t}\n\tv, err := strconv.ParseInt(s, 0, 0)\n\t*i = countValue(v)\n\treturn err\n}\n\nfunc (i *countValue) Type() string {\n\treturn \"count\"\n}\n\nfunc (i *countValue) String() string { return strconv.Itoa(int(*i)) }\n\nfunc countConv(sval string) (interface{}, error) {\n\ti, err := strconv.Atoi(sval)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn i, nil\n}\n\n// GetCount return the int value of a flag with the given name\nfunc (f *FlagSet) GetCount(name string) (int, error) {\n\tval, err := f.getFlagType(name, \"count\", countConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int), nil\n}\n\n// CountVar defines a count flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\n// A count flag will add 1 to its value every time it is found on the command line\nfunc (f *FlagSet) CountVar(p *int, name string, usage string) {\n\tf.CountVarP(p, name, \"\", usage)\n}\n\n// CountVarP is like CountVar only take a shorthand for the flag name.\nfunc (f *FlagSet) CountVarP(p *int, name, shorthand string, usage string) {\n\tflag := f.VarPF(newCountValue(0, p), name, shorthand, usage)\n\tflag.NoOptDefVal = \"+1\"\n}\n\n// CountVar like CountVar only the flag is placed on the CommandLine instead of a given flag set\nfunc CountVar(p *int, name string, usage string) {\n\tCommandLine.CountVar(p, name, usage)\n}\n\n// CountVarP is like CountVar only take a shorthand for the flag name.\nfunc CountVarP(p *int, name, shorthand string, usage string) {\n\tCommandLine.CountVarP(p, name, shorthand, usage)\n}\n\n// Count defines a count flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\n// A count flag will add 1 to its value every time it is found on the command line\nfunc (f *FlagSet) Count(name string, usage string) *int {\n\tp := new(int)\n\tf.CountVarP(p, name, \"\", usage)\n\treturn p\n}\n\n// CountP is like Count only takes a shorthand for the flag name.\nfunc (f *FlagSet) CountP(name, shorthand string, usage string) *int {\n\tp := new(int)\n\tf.CountVarP(p, name, shorthand, usage)\n\treturn p\n}\n\n// Count defines a count flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\n// A count flag will add 1 to its value every time it is found on the command line\nfunc Count(name string, usage string) *int {\n\treturn CommandLine.CountP(name, \"\", usage)\n}\n\n// CountP is like Count only takes a shorthand for the flag name.\nfunc CountP(name, shorthand string, usage string) *int {\n\treturn CommandLine.CountP(name, shorthand, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/duration.go",
    "content": "package pflag\n\nimport (\n\t\"time\"\n)\n\n// -- time.Duration Value\ntype durationValue time.Duration\n\nfunc newDurationValue(val time.Duration, p *time.Duration) *durationValue {\n\t*p = val\n\treturn (*durationValue)(p)\n}\n\nfunc (d *durationValue) Set(s string) error {\n\tv, err := time.ParseDuration(s)\n\t*d = durationValue(v)\n\treturn err\n}\n\nfunc (d *durationValue) Type() string {\n\treturn \"duration\"\n}\n\nfunc (d *durationValue) String() string { return (*time.Duration)(d).String() }\n\nfunc durationConv(sval string) (interface{}, error) {\n\treturn time.ParseDuration(sval)\n}\n\n// GetDuration return the duration value of a flag with the given name\nfunc (f *FlagSet) GetDuration(name string) (time.Duration, error) {\n\tval, err := f.getFlagType(name, \"duration\", durationConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(time.Duration), nil\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tf.VarP(newDurationValue(value, p), name, \"\", usage)\n}\n\n// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {\n\tf.VarP(newDurationValue(value, p), name, shorthand, usage)\n}\n\n// DurationVar defines a time.Duration flag with specified name, default value, and usage string.\n// The argument p points to a time.Duration variable in which to store the value of the flag.\nfunc DurationVar(p *time.Duration, name string, value time.Duration, usage string) {\n\tCommandLine.VarP(newDurationValue(value, p), name, \"\", usage)\n}\n\n// DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.\nfunc DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {\n\tCommandLine.VarP(newDurationValue(value, p), name, shorthand, usage)\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {\n\tp := new(time.Duration)\n\tf.DurationVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Duration defines a time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a time.Duration variable that stores the value of the flag.\nfunc Duration(name string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.DurationP(name, \"\", value, usage)\n}\n\n// DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.\nfunc DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {\n\treturn CommandLine.DurationP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/duration_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n)\n\n// -- durationSlice Value\ntype durationSliceValue struct {\n\tvalue   *[]time.Duration\n\tchanged bool\n}\n\nfunc newDurationSliceValue(val []time.Duration, p *[]time.Duration) *durationSliceValue {\n\tdsv := new(durationSliceValue)\n\tdsv.value = p\n\t*dsv.value = val\n\treturn dsv\n}\n\nfunc (s *durationSliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]time.Duration, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = time.ParseDuration(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *durationSliceValue) Type() string {\n\treturn \"durationSlice\"\n}\n\nfunc (s *durationSliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%s\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc (s *durationSliceValue) fromString(val string) (time.Duration, error) {\n\treturn time.ParseDuration(val)\n}\n\nfunc (s *durationSliceValue) toString(val time.Duration) string {\n\treturn fmt.Sprintf(\"%s\", val)\n}\n\nfunc (s *durationSliceValue) Append(val string) error {\n\ti, err := s.fromString(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*s.value = append(*s.value, i)\n\treturn nil\n}\n\nfunc (s *durationSliceValue) Replace(val []string) error {\n\tout := make([]time.Duration, len(val))\n\tfor i, d := range val {\n\t\tvar err error\n\t\tout[i], err = s.fromString(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *durationSliceValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = s.toString(d)\n\t}\n\treturn out\n}\n\nfunc durationSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []time.Duration{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]time.Duration, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = time.ParseDuration(d)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t}\n\treturn out, nil\n}\n\n// GetDurationSlice returns the []time.Duration value of a flag with the given name\nfunc (f *FlagSet) GetDurationSlice(name string) ([]time.Duration, error) {\n\tval, err := f.getFlagType(name, \"durationSlice\", durationSliceConv)\n\tif err != nil {\n\t\treturn []time.Duration{}, err\n\t}\n\treturn val.([]time.Duration), nil\n}\n\n// DurationSliceVar defines a durationSlice flag with specified name, default value, and usage string.\n// The argument p points to a []time.Duration variable in which to store the value of the flag.\nfunc (f *FlagSet) DurationSliceVar(p *[]time.Duration, name string, value []time.Duration, usage string) {\n\tf.VarP(newDurationSliceValue(value, p), name, \"\", usage)\n}\n\n// DurationSliceVarP is like DurationSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) DurationSliceVarP(p *[]time.Duration, name, shorthand string, value []time.Duration, usage string) {\n\tf.VarP(newDurationSliceValue(value, p), name, shorthand, usage)\n}\n\n// DurationSliceVar defines a duration[] flag with specified name, default value, and usage string.\n// The argument p points to a duration[] variable in which to store the value of the flag.\nfunc DurationSliceVar(p *[]time.Duration, name string, value []time.Duration, usage string) {\n\tCommandLine.VarP(newDurationSliceValue(value, p), name, \"\", usage)\n}\n\n// DurationSliceVarP is like DurationSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc DurationSliceVarP(p *[]time.Duration, name, shorthand string, value []time.Duration, usage string) {\n\tCommandLine.VarP(newDurationSliceValue(value, p), name, shorthand, usage)\n}\n\n// DurationSlice defines a []time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a []time.Duration variable that stores the value of the flag.\nfunc (f *FlagSet) DurationSlice(name string, value []time.Duration, usage string) *[]time.Duration {\n\tp := []time.Duration{}\n\tf.DurationSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// DurationSliceP is like DurationSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) DurationSliceP(name, shorthand string, value []time.Duration, usage string) *[]time.Duration {\n\tp := []time.Duration{}\n\tf.DurationSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// DurationSlice defines a []time.Duration flag with specified name, default value, and usage string.\n// The return value is the address of a []time.Duration variable that stores the value of the flag.\nfunc DurationSlice(name string, value []time.Duration, usage string) *[]time.Duration {\n\treturn CommandLine.DurationSliceP(name, \"\", value, usage)\n}\n\n// DurationSliceP is like DurationSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc DurationSliceP(name, shorthand string, value []time.Duration, usage string) *[]time.Duration {\n\treturn CommandLine.DurationSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/errors.go",
    "content": "package pflag\n\nimport \"fmt\"\n\n// notExistErrorMessageType specifies which flavor of \"flag does not exist\"\n// is printed by NotExistError. This allows the related errors to be grouped\n// under a single NotExistError struct without making a breaking change to\n// the error message text.\ntype notExistErrorMessageType int\n\nconst (\n\tflagNotExistMessage notExistErrorMessageType = iota\n\tflagNotDefinedMessage\n\tflagNoSuchFlagMessage\n\tflagUnknownFlagMessage\n\tflagUnknownShorthandFlagMessage\n)\n\n// NotExistError is the error returned when trying to access a flag that\n// does not exist in the FlagSet.\ntype NotExistError struct {\n\tname                string\n\tspecifiedShorthands string\n\tmessageType         notExistErrorMessageType\n}\n\n// Error implements error.\nfunc (e *NotExistError) Error() string {\n\tswitch e.messageType {\n\tcase flagNotExistMessage:\n\t\treturn fmt.Sprintf(\"flag %q does not exist\", e.name)\n\n\tcase flagNotDefinedMessage:\n\t\treturn fmt.Sprintf(\"flag accessed but not defined: %s\", e.name)\n\n\tcase flagNoSuchFlagMessage:\n\t\treturn fmt.Sprintf(\"no such flag -%v\", e.name)\n\n\tcase flagUnknownFlagMessage:\n\t\treturn fmt.Sprintf(\"unknown flag: --%s\", e.name)\n\n\tcase flagUnknownShorthandFlagMessage:\n\t\tc := rune(e.name[0])\n\t\treturn fmt.Sprintf(\"unknown shorthand flag: %q in -%s\", c, e.specifiedShorthands)\n\t}\n\n\tpanic(fmt.Errorf(\"unknown flagNotExistErrorMessageType: %v\", e.messageType))\n}\n\n// GetSpecifiedName returns the name of the flag (without dashes) as it\n// appeared in the parsed arguments.\nfunc (e *NotExistError) GetSpecifiedName() string {\n\treturn e.name\n}\n\n// GetSpecifiedShortnames returns the group of shorthand arguments\n// (without dashes) that the flag appeared within. If the flag was not in a\n// shorthand group, this will return an empty string.\nfunc (e *NotExistError) GetSpecifiedShortnames() string {\n\treturn e.specifiedShorthands\n}\n\n// ValueRequiredError is the error returned when a flag needs an argument but\n// no argument was provided.\ntype ValueRequiredError struct {\n\tflag                *Flag\n\tspecifiedName       string\n\tspecifiedShorthands string\n}\n\n// Error implements error.\nfunc (e *ValueRequiredError) Error() string {\n\tif len(e.specifiedShorthands) > 0 {\n\t\tc := rune(e.specifiedName[0])\n\t\treturn fmt.Sprintf(\"flag needs an argument: %q in -%s\", c, e.specifiedShorthands)\n\t}\n\n\treturn fmt.Sprintf(\"flag needs an argument: --%s\", e.specifiedName)\n}\n\n// GetFlag returns the flag for which the error occurred.\nfunc (e *ValueRequiredError) GetFlag() *Flag {\n\treturn e.flag\n}\n\n// GetSpecifiedName returns the name of the flag (without dashes) as it\n// appeared in the parsed arguments.\nfunc (e *ValueRequiredError) GetSpecifiedName() string {\n\treturn e.specifiedName\n}\n\n// GetSpecifiedShortnames returns the group of shorthand arguments\n// (without dashes) that the flag appeared within. If the flag was not in a\n// shorthand group, this will return an empty string.\nfunc (e *ValueRequiredError) GetSpecifiedShortnames() string {\n\treturn e.specifiedShorthands\n}\n\n// InvalidValueError is the error returned when an invalid value is used\n// for a flag.\ntype InvalidValueError struct {\n\tflag  *Flag\n\tvalue string\n\tcause error\n}\n\n// Error implements error.\nfunc (e *InvalidValueError) Error() string {\n\tflag := e.flag\n\tvar flagName string\n\tif flag.Shorthand != \"\" && flag.ShorthandDeprecated == \"\" {\n\t\tflagName = fmt.Sprintf(\"-%s, --%s\", flag.Shorthand, flag.Name)\n\t} else {\n\t\tflagName = fmt.Sprintf(\"--%s\", flag.Name)\n\t}\n\treturn fmt.Sprintf(\"invalid argument %q for %q flag: %v\", e.value, flagName, e.cause)\n}\n\n// Unwrap implements errors.Unwrap.\nfunc (e *InvalidValueError) Unwrap() error {\n\treturn e.cause\n}\n\n// GetFlag returns the flag for which the error occurred.\nfunc (e *InvalidValueError) GetFlag() *Flag {\n\treturn e.flag\n}\n\n// GetValue returns the invalid value that was provided.\nfunc (e *InvalidValueError) GetValue() string {\n\treturn e.value\n}\n\n// InvalidSyntaxError is the error returned when a bad flag name is passed on\n// the command line.\ntype InvalidSyntaxError struct {\n\tspecifiedFlag string\n}\n\n// Error implements error.\nfunc (e *InvalidSyntaxError) Error() string {\n\treturn fmt.Sprintf(\"bad flag syntax: %s\", e.specifiedFlag)\n}\n\n// GetSpecifiedName returns the exact flag (with dashes) as it\n// appeared in the parsed arguments.\nfunc (e *InvalidSyntaxError) GetSpecifiedFlag() string {\n\treturn e.specifiedFlag\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/flag.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n/*\nPackage pflag is a drop-in replacement for Go's flag package, implementing\nPOSIX/GNU-style --flags.\n\npflag is compatible with the GNU extensions to the POSIX recommendations\nfor command-line options. See\nhttp://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html\n\nUsage:\n\npflag is a drop-in replacement of Go's native flag package. If you import\npflag under the name \"flag\" then all code should continue to function\nwith no changes.\n\n\timport flag \"github.com/spf13/pflag\"\n\nThere is one exception to this: if you directly instantiate the Flag struct\nthere is one more field \"Shorthand\" that you will need to set.\nMost code never instantiates this struct directly, and instead uses\nfunctions such as String(), BoolVar(), and Var(), and is therefore\nunaffected.\n\nDefine flags using flag.String(), Bool(), Int(), etc.\n\nThis declares an integer flag, -flagname, stored in the pointer ip, with type *int.\n\n\tvar ip = flag.Int(\"flagname\", 1234, \"help message for flagname\")\n\nIf you like, you can bind the flag to a variable using the Var() functions.\n\n\tvar flagvar int\n\tfunc init() {\n\t\tflag.IntVar(&flagvar, \"flagname\", 1234, \"help message for flagname\")\n\t}\n\nOr you can create custom flags that satisfy the Value interface (with\npointer receivers) and couple them to flag parsing by\n\n\tflag.Var(&flagVal, \"name\", \"help message for flagname\")\n\nFor such flags, the default value is just the initial value of the variable.\n\nAfter all flags are defined, call\n\n\tflag.Parse()\n\nto parse the command line into the defined flags.\n\nFlags may then be used directly. If you're using the flags themselves,\nthey are all pointers; if you bind to variables, they're values.\n\n\tfmt.Println(\"ip has value \", *ip)\n\tfmt.Println(\"flagvar has value \", flagvar)\n\nAfter parsing, the arguments after the flag are available as the\nslice flag.Args() or individually as flag.Arg(i).\nThe arguments are indexed from 0 through flag.NArg()-1.\n\nThe pflag package also defines some new functions that are not in flag,\nthat give one-letter shorthands for flags. You can use these by appending\n'P' to the name of any function that defines a flag.\n\n\tvar ip = flag.IntP(\"flagname\", \"f\", 1234, \"help message\")\n\tvar flagvar bool\n\tfunc init() {\n\t\tflag.BoolVarP(&flagvar, \"boolname\", \"b\", true, \"help message\")\n\t}\n\tflag.VarP(&flagval, \"varname\", \"v\", \"help message\")\n\nShorthand letters can be used with single dashes on the command line.\nBoolean shorthand flags can be combined with other shorthand flags.\n\nCommand line flag syntax:\n\n\t--flag    // boolean flags only\n\t--flag=x\n\nUnlike the flag package, a single dash before an option means something\ndifferent than a double dash. Single dashes signify a series of shorthand\nletters for flags. All but the last shorthand letter must be boolean flags.\n\n\t// boolean flags\n\t-f\n\t-abc\n\t// non-boolean flags\n\t-n 1234\n\t-Ifile\n\t// mixed\n\t-abcs \"hello\"\n\t-abcn1234\n\nFlag parsing stops after the terminator \"--\". Unlike the flag package,\nflags can be interspersed with arguments anywhere on the command line\nbefore this terminator.\n\nInteger flags accept 1234, 0664, 0x1234 and may be negative.\nBoolean flags (in their long form) accept 1, 0, t, f, true, false,\nTRUE, FALSE, True, False.\nDuration flags accept any input valid for time.ParseDuration.\n\nThe default set of command-line flags is controlled by\ntop-level functions.  The FlagSet type allows one to define\nindependent sets of flags, such as to implement subcommands\nin a command-line interface. The methods of FlagSet are\nanalogous to the top-level functions for the command-line\nflag set.\n*/\npackage pflag\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\tgoflag \"flag\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// ErrHelp is the error returned if the flag -help is invoked but no such flag is defined.\nvar ErrHelp = errors.New(\"pflag: help requested\")\n\n// ErrorHandling defines how to handle flag parsing errors.\ntype ErrorHandling int\n\nconst (\n\t// ContinueOnError will return an err from Parse() if an error is found\n\tContinueOnError ErrorHandling = iota\n\t// ExitOnError will call os.Exit(2) if an error is found when parsing\n\tExitOnError\n\t// PanicOnError will panic() if an error is found when parsing flags\n\tPanicOnError\n)\n\n// ParseErrorsAllowlist defines the parsing errors that can be ignored\ntype ParseErrorsAllowlist struct {\n\t// UnknownFlags will ignore unknown flags errors and continue parsing rest of the flags\n\tUnknownFlags bool\n}\n\n// DEPRECATED: please use ParseErrorsAllowlist instead\n// This type will be removed in a future release\ntype ParseErrorsWhitelist = ParseErrorsAllowlist\n\n// NormalizedName is a flag name that has been normalized according to rules\n// for the FlagSet (e.g. making '-' and '_' equivalent).\ntype NormalizedName string\n\n// A FlagSet represents a set of defined flags.\ntype FlagSet struct {\n\t// Usage is the function called when an error occurs while parsing flags.\n\t// The field is a function (not a method) that may be changed to point to\n\t// a custom error handler.\n\tUsage func()\n\n\t// SortFlags is used to indicate, if user wants to have sorted flags in\n\t// help/usage messages.\n\tSortFlags bool\n\n\t// ParseErrorsAllowlist is used to configure an allowlist of errors\n\tParseErrorsAllowlist ParseErrorsAllowlist\n\n\t// DEPRECATED: please use ParseErrorsAllowlist instead\n\t// This field will be removed in a future release\n\tParseErrorsWhitelist ParseErrorsAllowlist\n\n\tname              string\n\tparsed            bool\n\tactual            map[NormalizedName]*Flag\n\torderedActual     []*Flag\n\tsortedActual      []*Flag\n\tformal            map[NormalizedName]*Flag\n\torderedFormal     []*Flag\n\tsortedFormal      []*Flag\n\tshorthands        map[byte]*Flag\n\targs              []string // arguments after flags\n\targsLenAtDash     int      // len(args) when a '--' was located when parsing, or -1 if no --\n\terrorHandling     ErrorHandling\n\toutput            io.Writer // nil means stderr; use Output() accessor\n\tinterspersed      bool      // allow interspersed option/non-option args\n\tnormalizeNameFunc func(f *FlagSet, name string) NormalizedName\n\n\taddedGoFlagSets []*goflag.FlagSet\n}\n\n// A Flag represents the state of a flag.\ntype Flag struct {\n\tName                string              // name as it appears on command line\n\tShorthand           string              // one-letter abbreviated flag\n\tUsage               string              // help message\n\tValue               Value               // value as set\n\tDefValue            string              // default value (as text); for usage message\n\tChanged             bool                // If the user set the value (or if left to default)\n\tNoOptDefVal         string              // default value (as text); if the flag is on the command line without any options\n\tDeprecated          string              // If this flag is deprecated, this string is the new or now thing to use\n\tHidden              bool                // used by cobra.Command to allow flags to be hidden from help/usage text\n\tShorthandDeprecated string              // If the shorthand of this flag is deprecated, this string is the new or now thing to use\n\tAnnotations         map[string][]string // used by cobra.Command bash autocomple code\n}\n\n// Value is the interface to the dynamic value stored in a flag.\n// (The default value is represented as a string.)\ntype Value interface {\n\tString() string\n\tSet(string) error\n\tType() string\n}\n\n// SliceValue is a secondary interface to all flags which hold a list\n// of values.  This allows full control over the value of list flags,\n// and avoids complicated marshalling and unmarshalling to csv.\ntype SliceValue interface {\n\t// Append adds the specified value to the end of the flag value list.\n\tAppend(string) error\n\t// Replace will fully overwrite any data currently in the flag value list.\n\tReplace([]string) error\n\t// GetSlice returns the flag value list as an array of strings.\n\tGetSlice() []string\n}\n\n// sortFlags returns the flags as a slice in lexicographical sorted order.\nfunc sortFlags(flags map[NormalizedName]*Flag) []*Flag {\n\tlist := make(sort.StringSlice, len(flags))\n\ti := 0\n\tfor k := range flags {\n\t\tlist[i] = string(k)\n\t\ti++\n\t}\n\tlist.Sort()\n\tresult := make([]*Flag, len(list))\n\tfor i, name := range list {\n\t\tresult[i] = flags[NormalizedName(name)]\n\t}\n\treturn result\n}\n\n// SetNormalizeFunc allows you to add a function which can translate flag names.\n// Flags added to the FlagSet will be translated and then when anything tries to\n// look up the flag that will also be translated. So it would be possible to create\n// a flag named \"getURL\" and have it translated to \"geturl\".  A user could then pass\n// \"--getUrl\" which may also be translated to \"geturl\" and everything will work.\nfunc (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) NormalizedName) {\n\tf.normalizeNameFunc = n\n\tf.sortedFormal = f.sortedFormal[:0]\n\tfor fname, flag := range f.formal {\n\t\tnname := f.normalizeFlagName(flag.Name)\n\t\tif fname == nname {\n\t\t\tcontinue\n\t\t}\n\t\tflag.Name = string(nname)\n\t\tdelete(f.formal, fname)\n\t\tf.formal[nname] = flag\n\t\tif _, set := f.actual[fname]; set {\n\t\t\tdelete(f.actual, fname)\n\t\t\tf.actual[nname] = flag\n\t\t}\n\t}\n}\n\n// GetNormalizeFunc returns the previously set NormalizeFunc of a function which\n// does no translation, if not set previously.\nfunc (f *FlagSet) GetNormalizeFunc() func(f *FlagSet, name string) NormalizedName {\n\tif f.normalizeNameFunc != nil {\n\t\treturn f.normalizeNameFunc\n\t}\n\treturn func(f *FlagSet, name string) NormalizedName { return NormalizedName(name) }\n}\n\nfunc (f *FlagSet) normalizeFlagName(name string) NormalizedName {\n\tn := f.GetNormalizeFunc()\n\treturn n(f, name)\n}\n\n// Output returns the destination for usage and error messages. os.Stderr is returned if\n// output was not set or was set to nil.\nfunc (f *FlagSet) Output() io.Writer {\n\tif f.output == nil {\n\t\treturn os.Stderr\n\t}\n\treturn f.output\n}\n\n// Name returns the name of the flag set.\nfunc (f *FlagSet) Name() string {\n\treturn f.name\n}\n\n// SetOutput sets the destination for usage and error messages.\n// If output is nil, os.Stderr is used.\nfunc (f *FlagSet) SetOutput(output io.Writer) {\n\tf.output = output\n}\n\n// VisitAll visits the flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits all flags, even those not set.\nfunc (f *FlagSet) VisitAll(fn func(*Flag)) {\n\tif len(f.formal) == 0 {\n\t\treturn\n\t}\n\n\tvar flags []*Flag\n\tif f.SortFlags {\n\t\tif len(f.formal) != len(f.sortedFormal) {\n\t\t\tf.sortedFormal = sortFlags(f.formal)\n\t\t}\n\t\tflags = f.sortedFormal\n\t} else {\n\t\tflags = f.orderedFormal\n\t}\n\n\tfor _, flag := range flags {\n\t\tfn(flag)\n\t}\n}\n\n// HasFlags returns a bool to indicate if the FlagSet has any flags defined.\nfunc (f *FlagSet) HasFlags() bool {\n\treturn len(f.formal) > 0\n}\n\n// HasAvailableFlags returns a bool to indicate if the FlagSet has any flags\n// that are not hidden.\nfunc (f *FlagSet) HasAvailableFlags() bool {\n\tfor _, flag := range f.formal {\n\t\tif !flag.Hidden {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// VisitAll visits the command-line flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits all flags, even those not set.\nfunc VisitAll(fn func(*Flag)) {\n\tCommandLine.VisitAll(fn)\n}\n\n// Visit visits the flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits only those flags that have been set.\nfunc (f *FlagSet) Visit(fn func(*Flag)) {\n\tif len(f.actual) == 0 {\n\t\treturn\n\t}\n\n\tvar flags []*Flag\n\tif f.SortFlags {\n\t\tif len(f.actual) != len(f.sortedActual) {\n\t\t\tf.sortedActual = sortFlags(f.actual)\n\t\t}\n\t\tflags = f.sortedActual\n\t} else {\n\t\tflags = f.orderedActual\n\t}\n\n\tfor _, flag := range flags {\n\t\tfn(flag)\n\t}\n}\n\n// Visit visits the command-line flags in lexicographical order or\n// in primordial order if f.SortFlags is false, calling fn for each.\n// It visits only those flags that have been set.\nfunc Visit(fn func(*Flag)) {\n\tCommandLine.Visit(fn)\n}\n\n// Lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) Lookup(name string) *Flag {\n\treturn f.lookup(f.normalizeFlagName(name))\n}\n\n// ShorthandLookup returns the Flag structure of the short handed flag,\n// returning nil if none exists.\n// It panics, if len(name) > 1.\nfunc (f *FlagSet) ShorthandLookup(name string) *Flag {\n\tif name == \"\" {\n\t\treturn nil\n\t}\n\tif len(name) > 1 {\n\t\tmsg := fmt.Sprintf(\"can not look up shorthand which is more than one ASCII character: %q\", name)\n\t\tfmt.Fprintf(f.Output(), msg)\n\t\tpanic(msg)\n\t}\n\tc := name[0]\n\treturn f.shorthands[c]\n}\n\n// lookup returns the Flag structure of the named flag, returning nil if none exists.\nfunc (f *FlagSet) lookup(name NormalizedName) *Flag {\n\treturn f.formal[name]\n}\n\n// func to return a given type for a given flag name\nfunc (f *FlagSet) getFlagType(name string, ftype string, convFunc func(sval string) (interface{}, error)) (interface{}, error) {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\terr := &NotExistError{name: name, messageType: flagNotDefinedMessage}\n\t\treturn nil, err\n\t}\n\n\tif flag.Value.Type() != ftype {\n\t\terr := fmt.Errorf(\"trying to get %s value of flag of type %s\", ftype, flag.Value.Type())\n\t\treturn nil, err\n\t}\n\n\tsval := flag.Value.String()\n\tresult, err := convFunc(sval)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn result, nil\n}\n\n// ArgsLenAtDash will return the length of f.Args at the moment when a -- was\n// found during arg parsing. This allows your program to know which args were\n// before the -- and which came after.\nfunc (f *FlagSet) ArgsLenAtDash() int {\n\treturn f.argsLenAtDash\n}\n\n// MarkDeprecated indicated that a flag is deprecated in your program. It will\n// continue to function but will not show up in help or usage messages. Using\n// this flag will also print the given usageMessage.\nfunc (f *FlagSet) MarkDeprecated(name string, usageMessage string) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn &NotExistError{name: name, messageType: flagNotExistMessage}\n\t}\n\tif usageMessage == \"\" {\n\t\treturn fmt.Errorf(\"deprecated message for flag %q must be set\", name)\n\t}\n\tflag.Deprecated = usageMessage\n\tflag.Hidden = true\n\treturn nil\n}\n\n// MarkShorthandDeprecated will mark the shorthand of a flag deprecated in your\n// program. It will continue to function but will not show up in help or usage\n// messages. Using this flag will also print the given usageMessage.\nfunc (f *FlagSet) MarkShorthandDeprecated(name string, usageMessage string) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn &NotExistError{name: name, messageType: flagNotExistMessage}\n\t}\n\tif usageMessage == \"\" {\n\t\treturn fmt.Errorf(\"deprecated message for flag %q must be set\", name)\n\t}\n\tflag.ShorthandDeprecated = usageMessage\n\treturn nil\n}\n\n// MarkHidden sets a flag to 'hidden' in your program. It will continue to\n// function but will not show up in help or usage messages.\nfunc (f *FlagSet) MarkHidden(name string) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn &NotExistError{name: name, messageType: flagNotExistMessage}\n\t}\n\tflag.Hidden = true\n\treturn nil\n}\n\n// Lookup returns the Flag structure of the named command-line flag,\n// returning nil if none exists.\nfunc Lookup(name string) *Flag {\n\treturn CommandLine.Lookup(name)\n}\n\n// ShorthandLookup returns the Flag structure of the short handed flag,\n// returning nil if none exists.\nfunc ShorthandLookup(name string) *Flag {\n\treturn CommandLine.ShorthandLookup(name)\n}\n\n// Set sets the value of the named flag.\nfunc (f *FlagSet) Set(name, value string) error {\n\tnormalName := f.normalizeFlagName(name)\n\tflag, ok := f.formal[normalName]\n\tif !ok {\n\t\treturn &NotExistError{name: name, messageType: flagNoSuchFlagMessage}\n\t}\n\n\terr := flag.Value.Set(value)\n\tif err != nil {\n\t\treturn &InvalidValueError{\n\t\t\tflag:  flag,\n\t\t\tvalue: value,\n\t\t\tcause: err,\n\t\t}\n\t}\n\n\tif !flag.Changed {\n\t\tif f.actual == nil {\n\t\t\tf.actual = make(map[NormalizedName]*Flag)\n\t\t}\n\t\tf.actual[normalName] = flag\n\t\tf.orderedActual = append(f.orderedActual, flag)\n\n\t\tflag.Changed = true\n\t}\n\n\tif flag.Deprecated != \"\" {\n\t\tfmt.Fprintf(f.Output(), \"Flag --%s has been deprecated, %s\\n\", flag.Name, flag.Deprecated)\n\t}\n\treturn nil\n}\n\n// SetAnnotation allows one to set arbitrary annotations on a flag in the FlagSet.\n// This is sometimes used by spf13/cobra programs which want to generate additional\n// bash completion information.\nfunc (f *FlagSet) SetAnnotation(name, key string, values []string) error {\n\tnormalName := f.normalizeFlagName(name)\n\tflag, ok := f.formal[normalName]\n\tif !ok {\n\t\treturn &NotExistError{name: name, messageType: flagNoSuchFlagMessage}\n\t}\n\tif flag.Annotations == nil {\n\t\tflag.Annotations = map[string][]string{}\n\t}\n\tflag.Annotations[key] = values\n\treturn nil\n}\n\n// Changed returns true if the flag was explicitly set during Parse() and false\n// otherwise\nfunc (f *FlagSet) Changed(name string) bool {\n\tflag := f.Lookup(name)\n\t// If a flag doesn't exist, it wasn't changed....\n\tif flag == nil {\n\t\treturn false\n\t}\n\treturn flag.Changed\n}\n\n// Set sets the value of the named command-line flag.\nfunc Set(name, value string) error {\n\treturn CommandLine.Set(name, value)\n}\n\n// PrintDefaults prints, to standard error unless configured\n// otherwise, the default values of all defined flags in the set.\nfunc (f *FlagSet) PrintDefaults() {\n\tusages := f.FlagUsages()\n\tfmt.Fprint(f.Output(), usages)\n}\n\n// defaultIsZeroValue returns true if the default value for this flag represents\n// a zero value.\nfunc (f *Flag) defaultIsZeroValue() bool {\n\tswitch f.Value.(type) {\n\tcase boolFlag:\n\t\treturn f.DefValue == \"false\" || f.DefValue == \"\"\n\tcase *durationValue:\n\t\t// Beginning in Go 1.7, duration zero values are \"0s\"\n\t\treturn f.DefValue == \"0\" || f.DefValue == \"0s\"\n\tcase *intValue, *int8Value, *int32Value, *int64Value, *uintValue, *uint8Value, *uint16Value, *uint32Value, *uint64Value, *countValue, *float32Value, *float64Value:\n\t\treturn f.DefValue == \"0\"\n\tcase *stringValue:\n\t\treturn f.DefValue == \"\"\n\tcase *ipValue, *ipMaskValue, *ipNetValue:\n\t\treturn f.DefValue == \"<nil>\"\n\tcase *intSliceValue, *stringSliceValue, *stringArrayValue:\n\t\treturn f.DefValue == \"[]\"\n\tdefault:\n\t\tswitch f.DefValue {\n\t\tcase \"false\":\n\t\t\treturn true\n\t\tcase \"<nil>\":\n\t\t\treturn true\n\t\tcase \"\":\n\t\t\treturn true\n\t\tcase \"0\":\n\t\t\treturn true\n\t\t}\n\t\treturn false\n\t}\n}\n\n// UnquoteUsage extracts a back-quoted name from the usage\n// string for a flag and returns it and the un-quoted usage.\n// Given \"a `name` to show\" it returns (\"name\", \"a name to show\").\n// If there are no back quotes, the name is an educated guess of the\n// type of the flag's value, or the empty string if the flag is boolean.\nfunc UnquoteUsage(flag *Flag) (name string, usage string) {\n\t// Look for a back-quoted name, but avoid the strings package.\n\tusage = flag.Usage\n\tfor i := 0; i < len(usage); i++ {\n\t\tif usage[i] == '`' {\n\t\t\tfor j := i + 1; j < len(usage); j++ {\n\t\t\t\tif usage[j] == '`' {\n\t\t\t\t\tname = usage[i+1 : j]\n\t\t\t\t\tusage = usage[:i] + name + usage[j+1:]\n\t\t\t\t\treturn name, usage\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak // Only one back quote; use type name.\n\t\t}\n\t}\n\n\tname = flag.Value.Type()\n\tswitch name {\n\tcase \"bool\", \"boolfunc\":\n\t\tname = \"\"\n\tcase \"func\":\n\t\tname = \"value\"\n\tcase \"float64\":\n\t\tname = \"float\"\n\tcase \"int64\":\n\t\tname = \"int\"\n\tcase \"uint64\":\n\t\tname = \"uint\"\n\tcase \"stringSlice\":\n\t\tname = \"strings\"\n\tcase \"intSlice\":\n\t\tname = \"ints\"\n\tcase \"uintSlice\":\n\t\tname = \"uints\"\n\tcase \"boolSlice\":\n\t\tname = \"bools\"\n\t}\n\n\treturn\n}\n\n// Splits the string `s` on whitespace into an initial substring up to\n// `i` runes in length and the remainder. Will go `slop` over `i` if\n// that encompasses the entire string (which allows the caller to\n// avoid short orphan words on the final line).\nfunc wrapN(i, slop int, s string) (string, string) {\n\tif i+slop > len(s) {\n\t\treturn s, \"\"\n\t}\n\n\tw := strings.LastIndexAny(s[:i], \" \\t\\n\")\n\tif w <= 0 {\n\t\treturn s, \"\"\n\t}\n\tnlPos := strings.LastIndex(s[:i], \"\\n\")\n\tif nlPos > 0 && nlPos < w {\n\t\treturn s[:nlPos], s[nlPos+1:]\n\t}\n\treturn s[:w], s[w+1:]\n}\n\n// Wraps the string `s` to a maximum width `w` with leading indent\n// `i`. The first line is not indented (this is assumed to be done by\n// caller). Pass `w` == 0 to do no wrapping\nfunc wrap(i, w int, s string) string {\n\tif w == 0 {\n\t\treturn strings.Replace(s, \"\\n\", \"\\n\"+strings.Repeat(\" \", i), -1)\n\t}\n\n\t// space between indent i and end of line width w into which\n\t// we should wrap the text.\n\twrap := w - i\n\n\tvar r, l string\n\n\t// Not enough space for sensible wrapping. Wrap as a block on\n\t// the next line instead.\n\tif wrap < 24 {\n\t\ti = 16\n\t\twrap = w - i\n\t\tr += \"\\n\" + strings.Repeat(\" \", i)\n\t}\n\t// If still not enough space then don't even try to wrap.\n\tif wrap < 24 {\n\t\treturn strings.Replace(s, \"\\n\", r, -1)\n\t}\n\n\t// Try to avoid short orphan words on the final line, by\n\t// allowing wrapN to go a bit over if that would fit in the\n\t// remainder of the line.\n\tslop := 5\n\twrap = wrap - slop\n\n\t// Handle first line, which is indented by the caller (or the\n\t// special case above)\n\tl, s = wrapN(wrap, slop, s)\n\tr = r + strings.Replace(l, \"\\n\", \"\\n\"+strings.Repeat(\" \", i), -1)\n\n\t// Now wrap the rest\n\tfor s != \"\" {\n\t\tvar t string\n\n\t\tt, s = wrapN(wrap, slop, s)\n\t\tr = r + \"\\n\" + strings.Repeat(\" \", i) + strings.Replace(t, \"\\n\", \"\\n\"+strings.Repeat(\" \", i), -1)\n\t}\n\n\treturn r\n\n}\n\n// FlagUsagesWrapped returns a string containing the usage information\n// for all flags in the FlagSet. Wrapped to `cols` columns (0 for no\n// wrapping)\nfunc (f *FlagSet) FlagUsagesWrapped(cols int) string {\n\tbuf := new(bytes.Buffer)\n\n\tlines := make([]string, 0, len(f.formal))\n\n\tmaxlen := 0\n\tf.VisitAll(func(flag *Flag) {\n\t\tif flag.Hidden {\n\t\t\treturn\n\t\t}\n\n\t\tline := \"\"\n\t\tif flag.Shorthand != \"\" && flag.ShorthandDeprecated == \"\" {\n\t\t\tline = fmt.Sprintf(\"  -%s, --%s\", flag.Shorthand, flag.Name)\n\t\t} else {\n\t\t\tline = fmt.Sprintf(\"      --%s\", flag.Name)\n\t\t}\n\n\t\tvarname, usage := UnquoteUsage(flag)\n\t\tif varname != \"\" {\n\t\t\tline += \" \" + varname\n\t\t}\n\t\tif flag.NoOptDefVal != \"\" {\n\t\t\tswitch flag.Value.Type() {\n\t\t\tcase \"string\":\n\t\t\t\tline += fmt.Sprintf(\"[=\\\"%s\\\"]\", flag.NoOptDefVal)\n\t\t\tcase \"bool\", \"boolfunc\":\n\t\t\t\tif flag.NoOptDefVal != \"true\" {\n\t\t\t\t\tline += fmt.Sprintf(\"[=%s]\", flag.NoOptDefVal)\n\t\t\t\t}\n\t\t\tcase \"count\":\n\t\t\t\tif flag.NoOptDefVal != \"+1\" {\n\t\t\t\t\tline += fmt.Sprintf(\"[=%s]\", flag.NoOptDefVal)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tline += fmt.Sprintf(\"[=%s]\", flag.NoOptDefVal)\n\t\t\t}\n\t\t}\n\n\t\t// This special character will be replaced with spacing once the\n\t\t// correct alignment is calculated\n\t\tline += \"\\x00\"\n\t\tif len(line) > maxlen {\n\t\t\tmaxlen = len(line)\n\t\t}\n\n\t\tline += usage\n\t\tif !flag.defaultIsZeroValue() {\n\t\t\tif flag.Value.Type() == \"string\" {\n\t\t\t\tline += fmt.Sprintf(\" (default %q)\", flag.DefValue)\n\t\t\t} else {\n\t\t\t\tline += fmt.Sprintf(\" (default %s)\", flag.DefValue)\n\t\t\t}\n\t\t}\n\t\tif len(flag.Deprecated) != 0 {\n\t\t\tline += fmt.Sprintf(\" (DEPRECATED: %s)\", flag.Deprecated)\n\t\t}\n\n\t\tlines = append(lines, line)\n\t})\n\n\tfor _, line := range lines {\n\t\tsidx := strings.Index(line, \"\\x00\")\n\t\tspacing := strings.Repeat(\" \", maxlen-sidx)\n\t\t// maxlen + 2 comes from + 1 for the \\x00 and + 1 for the (deliberate) off-by-one in maxlen-sidx\n\t\tfmt.Fprintln(buf, line[:sidx], spacing, wrap(maxlen+2, cols, line[sidx+1:]))\n\t}\n\n\treturn buf.String()\n}\n\n// FlagUsages returns a string containing the usage information for all flags in\n// the FlagSet\nfunc (f *FlagSet) FlagUsages() string {\n\treturn f.FlagUsagesWrapped(0)\n}\n\n// PrintDefaults prints to standard error the default values of all defined command-line flags.\nfunc PrintDefaults() {\n\tCommandLine.PrintDefaults()\n}\n\n// defaultUsage is the default function to print a usage message.\nfunc defaultUsage(f *FlagSet) {\n\tfmt.Fprintf(f.Output(), \"Usage of %s:\\n\", f.name)\n\tf.PrintDefaults()\n}\n\n// NOTE: Usage is not just defaultUsage(CommandLine)\n// because it serves (via godoc flag Usage) as the example\n// for how to write your own usage function.\n\n// Usage prints to standard error a usage message documenting all defined command-line flags.\n// The function is a variable that may be changed to point to a custom function.\n// By default it prints a simple header and calls PrintDefaults; for details about the\n// format of the output and how to control it, see the documentation for PrintDefaults.\nvar Usage = func() {\n\tfmt.Fprintf(os.Stderr, \"Usage of %s:\\n\", os.Args[0])\n\tPrintDefaults()\n}\n\n// NFlag returns the number of flags that have been set.\nfunc (f *FlagSet) NFlag() int { return len(f.actual) }\n\n// NFlag returns the number of command-line flags that have been set.\nfunc NFlag() int { return len(CommandLine.actual) }\n\n// Arg returns the i'th argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc (f *FlagSet) Arg(i int) string {\n\tif i < 0 || i >= len(f.args) {\n\t\treturn \"\"\n\t}\n\treturn f.args[i]\n}\n\n// Arg returns the i'th command-line argument.  Arg(0) is the first remaining argument\n// after flags have been processed.\nfunc Arg(i int) string {\n\treturn CommandLine.Arg(i)\n}\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc (f *FlagSet) NArg() int { return len(f.args) }\n\n// NArg is the number of arguments remaining after flags have been processed.\nfunc NArg() int { return len(CommandLine.args) }\n\n// Args returns the non-flag arguments.\nfunc (f *FlagSet) Args() []string { return f.args }\n\n// Args returns the non-flag command-line arguments.\nfunc Args() []string { return CommandLine.args }\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc (f *FlagSet) Var(value Value, name string, usage string) {\n\tf.VarP(value, name, \"\", usage)\n}\n\n// VarPF is like VarP, but returns the flag created\nfunc (f *FlagSet) VarPF(value Value, name, shorthand, usage string) *Flag {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{\n\t\tName:      name,\n\t\tShorthand: shorthand,\n\t\tUsage:     usage,\n\t\tValue:     value,\n\t\tDefValue:  value.String(),\n\t}\n\tf.AddFlag(flag)\n\treturn flag\n}\n\n// VarP is like Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) VarP(value Value, name, shorthand, usage string) {\n\tf.VarPF(value, name, shorthand, usage)\n}\n\n// AddFlag will add the flag to the FlagSet\nfunc (f *FlagSet) AddFlag(flag *Flag) {\n\tnormalizedFlagName := f.normalizeFlagName(flag.Name)\n\n\t_, alreadyThere := f.formal[normalizedFlagName]\n\tif alreadyThere {\n\t\tmsg := fmt.Sprintf(\"%s flag redefined: %s\", f.name, flag.Name)\n\t\tfmt.Fprintln(f.Output(), msg)\n\t\tpanic(msg) // Happens only if flags are declared with identical names\n\t}\n\tif f.formal == nil {\n\t\tf.formal = make(map[NormalizedName]*Flag)\n\t}\n\n\tflag.Name = string(normalizedFlagName)\n\tf.formal[normalizedFlagName] = flag\n\tf.orderedFormal = append(f.orderedFormal, flag)\n\n\tif flag.Shorthand == \"\" {\n\t\treturn\n\t}\n\tif len(flag.Shorthand) > 1 {\n\t\tmsg := fmt.Sprintf(\"%q shorthand is more than one ASCII character\", flag.Shorthand)\n\t\tfmt.Fprintf(f.Output(), msg)\n\t\tpanic(msg)\n\t}\n\tif f.shorthands == nil {\n\t\tf.shorthands = make(map[byte]*Flag)\n\t}\n\tc := flag.Shorthand[0]\n\tused, alreadyThere := f.shorthands[c]\n\tif alreadyThere {\n\t\tmsg := fmt.Sprintf(\"unable to redefine %q shorthand in %q flagset: it's already used for %q flag\", c, f.name, used.Name)\n\t\tfmt.Fprintf(f.Output(), msg)\n\t\tpanic(msg)\n\t}\n\tf.shorthands[c] = flag\n}\n\n// AddFlagSet adds one FlagSet to another. If a flag is already present in f\n// the flag from newSet will be ignored.\nfunc (f *FlagSet) AddFlagSet(newSet *FlagSet) {\n\tif newSet == nil {\n\t\treturn\n\t}\n\tnewSet.VisitAll(func(flag *Flag) {\n\t\tif f.Lookup(flag.Name) == nil {\n\t\t\tf.AddFlag(flag)\n\t\t}\n\t})\n}\n\n// Var defines a flag with the specified name and usage string. The type and\n// value of the flag are represented by the first argument, of type Value, which\n// typically holds a user-defined implementation of Value. For instance, the\n// caller could create a flag that turns a comma-separated string into a slice\n// of strings by giving the slice the methods of Value; in particular, Set would\n// decompose the comma-separated string into the slice.\nfunc Var(value Value, name string, usage string) {\n\tCommandLine.VarP(value, name, \"\", usage)\n}\n\n// VarP is like Var, but accepts a shorthand letter that can be used after a single dash.\nfunc VarP(value Value, name, shorthand, usage string) {\n\tCommandLine.VarP(value, name, shorthand, usage)\n}\n\n// fail prints an error message and usage message to standard error and\n// returns the error.\nfunc (f *FlagSet) fail(err error) error {\n\tif f.errorHandling != ContinueOnError {\n\t\tf.usage()\n\t}\n\treturn err\n}\n\n// usage calls the Usage method for the flag set, or the usage function if\n// the flag set is CommandLine.\nfunc (f *FlagSet) usage() {\n\tif f == CommandLine {\n\t\tUsage()\n\t} else if f.Usage == nil {\n\t\tdefaultUsage(f)\n\t} else {\n\t\tf.Usage()\n\t}\n}\n\n// --unknown (args will be empty)\n// --unknown --next-flag ... (args will be --next-flag ...)\n// --unknown arg ... (args will be arg ...)\nfunc stripUnknownFlagValue(args []string) []string {\n\tif len(args) == 0 {\n\t\t//--unknown\n\t\treturn args\n\t}\n\n\tfirst := args[0]\n\tif len(first) > 0 && first[0] == '-' {\n\t\t//--unknown --next-flag ...\n\t\treturn args\n\t}\n\n\t//--unknown arg ... (args will be arg ...)\n\tif len(args) > 1 {\n\t\treturn args[1:]\n\t}\n\treturn nil\n}\n\nfunc (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []string, err error) {\n\ta = args\n\tname := s[2:]\n\tif len(name) == 0 || name[0] == '-' || name[0] == '=' {\n\t\terr = f.fail(&InvalidSyntaxError{specifiedFlag: s})\n\t\treturn\n\t}\n\n\tsplit := strings.SplitN(name, \"=\", 2)\n\tname = split[0]\n\tflag, exists := f.formal[f.normalizeFlagName(name)]\n\n\tif !exists {\n\t\tswitch {\n\t\tcase name == \"help\":\n\t\t\tf.usage()\n\t\t\treturn a, ErrHelp\n\t\tcase f.ParseErrorsWhitelist.UnknownFlags:\n\t\t\tfallthrough\n\t\tcase f.ParseErrorsAllowlist.UnknownFlags:\n\t\t\t// --unknown=unknownval arg ...\n\t\t\t// we do not want to lose arg in this case\n\t\t\tif len(split) >= 2 {\n\t\t\t\treturn a, nil\n\t\t\t}\n\n\t\t\treturn stripUnknownFlagValue(a), nil\n\t\tdefault:\n\t\t\terr = f.fail(&NotExistError{name: name, messageType: flagUnknownFlagMessage})\n\t\t\treturn\n\t\t}\n\t}\n\n\tvar value string\n\tif len(split) == 2 {\n\t\t// '--flag=arg'\n\t\tvalue = split[1]\n\t} else if flag.NoOptDefVal != \"\" {\n\t\t// '--flag' (arg was optional)\n\t\tvalue = flag.NoOptDefVal\n\t} else if len(a) > 0 {\n\t\t// '--flag arg'\n\t\tvalue = a[0]\n\t\ta = a[1:]\n\t} else {\n\t\t// '--flag' (arg was required)\n\t\terr = f.fail(&ValueRequiredError{\n\t\t\tflag:          flag,\n\t\t\tspecifiedName: name,\n\t\t})\n\t\treturn\n\t}\n\n\terr = fn(flag, value)\n\tif err != nil {\n\t\tf.fail(err)\n\t}\n\treturn\n}\n\nfunc (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parseFunc) (outShorts string, outArgs []string, err error) {\n\toutArgs = args\n\n\tif isGotestShorthandFlag(shorthands) {\n\t\treturn\n\t}\n\n\toutShorts = shorthands[1:]\n\tc := shorthands[0]\n\n\tflag, exists := f.shorthands[c]\n\tif !exists {\n\t\tswitch {\n\t\tcase c == 'h':\n\t\t\tf.usage()\n\t\t\terr = ErrHelp\n\t\t\treturn\n\t\tcase f.ParseErrorsWhitelist.UnknownFlags:\n\t\t\tfallthrough\n\t\tcase f.ParseErrorsAllowlist.UnknownFlags:\n\t\t\t// '-f=arg arg ...'\n\t\t\t// we do not want to lose arg in this case\n\t\t\tif len(shorthands) > 2 && shorthands[1] == '=' {\n\t\t\t\toutShorts = \"\"\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\toutArgs = stripUnknownFlagValue(outArgs)\n\t\t\treturn\n\t\tdefault:\n\t\t\terr = f.fail(&NotExistError{\n\t\t\t\tname:                string(c),\n\t\t\t\tspecifiedShorthands: shorthands,\n\t\t\t\tmessageType:         flagUnknownShorthandFlagMessage,\n\t\t\t})\n\t\t\treturn\n\t\t}\n\t}\n\n\tvar value string\n\tif len(shorthands) > 2 && shorthands[1] == '=' {\n\t\t// '-f=arg'\n\t\tvalue = shorthands[2:]\n\t\toutShorts = \"\"\n\t} else if flag.NoOptDefVal != \"\" {\n\t\t// '-f' (arg was optional)\n\t\tvalue = flag.NoOptDefVal\n\t} else if len(shorthands) > 1 {\n\t\t// '-farg'\n\t\tvalue = shorthands[1:]\n\t\toutShorts = \"\"\n\t} else if len(args) > 0 {\n\t\t// '-f arg'\n\t\tvalue = args[0]\n\t\toutArgs = args[1:]\n\t} else {\n\t\t// '-f' (arg was required)\n\t\terr = f.fail(&ValueRequiredError{\n\t\t\tflag:                flag,\n\t\t\tspecifiedName:       string(c),\n\t\t\tspecifiedShorthands: shorthands,\n\t\t})\n\t\treturn\n\t}\n\n\tif flag.ShorthandDeprecated != \"\" {\n\t\tfmt.Fprintf(f.Output(), \"Flag shorthand -%s has been deprecated, %s\\n\", flag.Shorthand, flag.ShorthandDeprecated)\n\t}\n\n\terr = fn(flag, value)\n\tif err != nil {\n\t\tf.fail(err)\n\t}\n\treturn\n}\n\nfunc (f *FlagSet) parseShortArg(s string, args []string, fn parseFunc) (a []string, err error) {\n\ta = args\n\tshorthands := s[1:]\n\n\t// \"shorthands\" can be a series of shorthand letters of flags (e.g. \"-vvv\").\n\tfor len(shorthands) > 0 {\n\t\tshorthands, a, err = f.parseSingleShortArg(shorthands, args, fn)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\n\treturn\n}\n\nfunc (f *FlagSet) parseArgs(args []string, fn parseFunc) (err error) {\n\tfor len(args) > 0 {\n\t\ts := args[0]\n\t\targs = args[1:]\n\t\tif len(s) == 0 || s[0] != '-' || len(s) == 1 {\n\t\t\tif !f.interspersed {\n\t\t\t\tf.args = append(f.args, s)\n\t\t\t\tf.args = append(f.args, args...)\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tf.args = append(f.args, s)\n\t\t\tcontinue\n\t\t}\n\n\t\tif s[1] == '-' {\n\t\t\tif len(s) == 2 { // \"--\" terminates the flags\n\t\t\t\tf.argsLenAtDash = len(f.args)\n\t\t\t\tf.args = append(f.args, args...)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\targs, err = f.parseLongArg(s, args, fn)\n\t\t} else {\n\t\t\targs, err = f.parseShortArg(s, args, fn)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n\treturn\n}\n\n// Parse parses flag definitions from the argument list, which should not\n// include the command name.  Must be called after all flags in the FlagSet\n// are defined and before flags are accessed by the program.\n// The return value will be ErrHelp if -help was set but not defined.\nfunc (f *FlagSet) Parse(arguments []string) error {\n\tif f.addedGoFlagSets != nil {\n\t\tfor _, goFlagSet := range f.addedGoFlagSets {\n\t\t\tgoFlagSet.Parse(nil)\n\t\t}\n\t}\n\tf.parsed = true\n\n\tf.args = make([]string, 0, len(arguments))\n\n\tif len(arguments) == 0 {\n\t\treturn nil\n\t}\n\n\tset := func(flag *Flag, value string) error {\n\t\treturn f.Set(flag.Name, value)\n\t}\n\n\terr := f.parseArgs(arguments, set)\n\tif err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tif errors.Is(err, ErrHelp) {\n\t\t\t\tos.Exit(0)\n\t\t\t}\n\t\t\tfmt.Fprintln(f.Output(), err)\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\treturn nil\n}\n\ntype parseFunc func(flag *Flag, value string) error\n\n// ParseAll parses flag definitions from the argument list, which should not\n// include the command name. The arguments for fn are flag and value. Must be\n// called after all flags in the FlagSet are defined and before flags are\n// accessed by the program. The return value will be ErrHelp if -help was set\n// but not defined.\nfunc (f *FlagSet) ParseAll(arguments []string, fn func(flag *Flag, value string) error) error {\n\tf.parsed = true\n\tf.args = make([]string, 0, len(arguments))\n\n\terr := f.parseArgs(arguments, fn)\n\tif err != nil {\n\t\tswitch f.errorHandling {\n\t\tcase ContinueOnError:\n\t\t\treturn err\n\t\tcase ExitOnError:\n\t\t\tif errors.Is(err, ErrHelp) {\n\t\t\t\tos.Exit(0)\n\t\t\t}\n\t\t\tfmt.Fprintln(f.Output(), err)\n\t\t\tos.Exit(2)\n\t\tcase PanicOnError:\n\t\t\tpanic(err)\n\t\t}\n\t}\n\treturn nil\n}\n\n// Parsed reports whether f.Parse has been called.\nfunc (f *FlagSet) Parsed() bool {\n\treturn f.parsed\n}\n\n// Parse parses the command-line flags from os.Args[1:].  Must be called\n// after all flags are defined and before flags are accessed by the program.\nfunc Parse() {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.Parse(os.Args[1:])\n}\n\n// ParseAll parses the command-line flags from os.Args[1:] and called fn for each.\n// The arguments for fn are flag and value. Must be called after all flags are\n// defined and before flags are accessed by the program.\nfunc ParseAll(fn func(flag *Flag, value string) error) {\n\t// Ignore errors; CommandLine is set for ExitOnError.\n\tCommandLine.ParseAll(os.Args[1:], fn)\n}\n\n// SetInterspersed sets whether to support interspersed option/non-option arguments.\nfunc SetInterspersed(interspersed bool) {\n\tCommandLine.SetInterspersed(interspersed)\n}\n\n// Parsed returns true if the command-line flags have been parsed.\nfunc Parsed() bool {\n\treturn CommandLine.Parsed()\n}\n\n// CommandLine is the default set of command-line flags, parsed from os.Args.\nvar CommandLine = NewFlagSet(os.Args[0], ExitOnError)\n\n// NewFlagSet returns a new, empty flag set with the specified name,\n// error handling property and SortFlags set to true.\nfunc NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet {\n\tf := &FlagSet{\n\t\tname:          name,\n\t\terrorHandling: errorHandling,\n\t\targsLenAtDash: -1,\n\t\tinterspersed:  true,\n\t\tSortFlags:     true,\n\t}\n\treturn f\n}\n\n// SetInterspersed sets whether to support interspersed option/non-option arguments.\nfunc (f *FlagSet) SetInterspersed(interspersed bool) {\n\tf.interspersed = interspersed\n}\n\n// Init sets the name and error handling property for a flag set.\n// By default, the zero FlagSet uses an empty name and the\n// ContinueOnError error handling policy.\nfunc (f *FlagSet) Init(name string, errorHandling ErrorHandling) {\n\tf.name = name\n\tf.errorHandling = errorHandling\n\tf.argsLenAtDash = -1\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/float32.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- float32 Value\ntype float32Value float32\n\nfunc newFloat32Value(val float32, p *float32) *float32Value {\n\t*p = val\n\treturn (*float32Value)(p)\n}\n\nfunc (f *float32Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 32)\n\t*f = float32Value(v)\n\treturn err\n}\n\nfunc (f *float32Value) Type() string {\n\treturn \"float32\"\n}\n\nfunc (f *float32Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 32) }\n\nfunc float32Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseFloat(sval, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn float32(v), nil\n}\n\n// GetFloat32 return the float32 value of a flag with the given name\nfunc (f *FlagSet) GetFloat32(name string) (float32, error) {\n\tval, err := f.getFlagType(name, \"float32\", float32Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(float32), nil\n}\n\n// Float32Var defines a float32 flag with specified name, default value, and usage string.\n// The argument p points to a float32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float32Var(p *float32, name string, value float32, usage string) {\n\tf.VarP(newFloat32Value(value, p), name, \"\", usage)\n}\n\n// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float32VarP(p *float32, name, shorthand string, value float32, usage string) {\n\tf.VarP(newFloat32Value(value, p), name, shorthand, usage)\n}\n\n// Float32Var defines a float32 flag with specified name, default value, and usage string.\n// The argument p points to a float32 variable in which to store the value of the flag.\nfunc Float32Var(p *float32, name string, value float32, usage string) {\n\tCommandLine.VarP(newFloat32Value(value, p), name, \"\", usage)\n}\n\n// Float32VarP is like Float32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Float32VarP(p *float32, name, shorthand string, value float32, usage string) {\n\tCommandLine.VarP(newFloat32Value(value, p), name, shorthand, usage)\n}\n\n// Float32 defines a float32 flag with specified name, default value, and usage string.\n// The return value is the address of a float32 variable that stores the value of the flag.\nfunc (f *FlagSet) Float32(name string, value float32, usage string) *float32 {\n\tp := new(float32)\n\tf.Float32VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float32P(name, shorthand string, value float32, usage string) *float32 {\n\tp := new(float32)\n\tf.Float32VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Float32 defines a float32 flag with specified name, default value, and usage string.\n// The return value is the address of a float32 variable that stores the value of the flag.\nfunc Float32(name string, value float32, usage string) *float32 {\n\treturn CommandLine.Float32P(name, \"\", value, usage)\n}\n\n// Float32P is like Float32, but accepts a shorthand letter that can be used after a single dash.\nfunc Float32P(name, shorthand string, value float32, usage string) *float32 {\n\treturn CommandLine.Float32P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/float32_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- float32Slice Value\ntype float32SliceValue struct {\n\tvalue   *[]float32\n\tchanged bool\n}\n\nfunc newFloat32SliceValue(val []float32, p *[]float32) *float32SliceValue {\n\tisv := new(float32SliceValue)\n\tisv.value = p\n\t*isv.value = val\n\treturn isv\n}\n\nfunc (s *float32SliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]float32, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tvar temp64 float64\n\t\ttemp64, err = strconv.ParseFloat(d, 32)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tout[i] = float32(temp64)\n\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *float32SliceValue) Type() string {\n\treturn \"float32Slice\"\n}\n\nfunc (s *float32SliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%f\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc (s *float32SliceValue) fromString(val string) (float32, error) {\n\tt64, err := strconv.ParseFloat(val, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn float32(t64), nil\n}\n\nfunc (s *float32SliceValue) toString(val float32) string {\n\treturn fmt.Sprintf(\"%f\", val)\n}\n\nfunc (s *float32SliceValue) Append(val string) error {\n\ti, err := s.fromString(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*s.value = append(*s.value, i)\n\treturn nil\n}\n\nfunc (s *float32SliceValue) Replace(val []string) error {\n\tout := make([]float32, len(val))\n\tfor i, d := range val {\n\t\tvar err error\n\t\tout[i], err = s.fromString(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *float32SliceValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = s.toString(d)\n\t}\n\treturn out\n}\n\nfunc float32SliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []float32{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]float32, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tvar temp64 float64\n\t\ttemp64, err = strconv.ParseFloat(d, 32)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tout[i] = float32(temp64)\n\n\t}\n\treturn out, nil\n}\n\n// GetFloat32Slice return the []float32 value of a flag with the given name\nfunc (f *FlagSet) GetFloat32Slice(name string) ([]float32, error) {\n\tval, err := f.getFlagType(name, \"float32Slice\", float32SliceConv)\n\tif err != nil {\n\t\treturn []float32{}, err\n\t}\n\treturn val.([]float32), nil\n}\n\n// Float32SliceVar defines a float32Slice flag with specified name, default value, and usage string.\n// The argument p points to a []float32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float32SliceVar(p *[]float32, name string, value []float32, usage string) {\n\tf.VarP(newFloat32SliceValue(value, p), name, \"\", usage)\n}\n\n// Float32SliceVarP is like Float32SliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float32SliceVarP(p *[]float32, name, shorthand string, value []float32, usage string) {\n\tf.VarP(newFloat32SliceValue(value, p), name, shorthand, usage)\n}\n\n// Float32SliceVar defines a float32[] flag with specified name, default value, and usage string.\n// The argument p points to a float32[] variable in which to store the value of the flag.\nfunc Float32SliceVar(p *[]float32, name string, value []float32, usage string) {\n\tCommandLine.VarP(newFloat32SliceValue(value, p), name, \"\", usage)\n}\n\n// Float32SliceVarP is like Float32SliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc Float32SliceVarP(p *[]float32, name, shorthand string, value []float32, usage string) {\n\tCommandLine.VarP(newFloat32SliceValue(value, p), name, shorthand, usage)\n}\n\n// Float32Slice defines a []float32 flag with specified name, default value, and usage string.\n// The return value is the address of a []float32 variable that stores the value of the flag.\nfunc (f *FlagSet) Float32Slice(name string, value []float32, usage string) *[]float32 {\n\tp := []float32{}\n\tf.Float32SliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// Float32SliceP is like Float32Slice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float32SliceP(name, shorthand string, value []float32, usage string) *[]float32 {\n\tp := []float32{}\n\tf.Float32SliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// Float32Slice defines a []float32 flag with specified name, default value, and usage string.\n// The return value is the address of a []float32 variable that stores the value of the flag.\nfunc Float32Slice(name string, value []float32, usage string) *[]float32 {\n\treturn CommandLine.Float32SliceP(name, \"\", value, usage)\n}\n\n// Float32SliceP is like Float32Slice, but accepts a shorthand letter that can be used after a single dash.\nfunc Float32SliceP(name, shorthand string, value []float32, usage string) *[]float32 {\n\treturn CommandLine.Float32SliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/float64.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- float64 Value\ntype float64Value float64\n\nfunc newFloat64Value(val float64, p *float64) *float64Value {\n\t*p = val\n\treturn (*float64Value)(p)\n}\n\nfunc (f *float64Value) Set(s string) error {\n\tv, err := strconv.ParseFloat(s, 64)\n\t*f = float64Value(v)\n\treturn err\n}\n\nfunc (f *float64Value) Type() string {\n\treturn \"float64\"\n}\n\nfunc (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) }\n\nfunc float64Conv(sval string) (interface{}, error) {\n\treturn strconv.ParseFloat(sval, 64)\n}\n\n// GetFloat64 return the float64 value of a flag with the given name\nfunc (f *FlagSet) GetFloat64(name string) (float64, error) {\n\tval, err := f.getFlagType(name, \"float64\", float64Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(float64), nil\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64Var(p *float64, name string, value float64, usage string) {\n\tf.VarP(newFloat64Value(value, p), name, \"\", usage)\n}\n\n// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float64VarP(p *float64, name, shorthand string, value float64, usage string) {\n\tf.VarP(newFloat64Value(value, p), name, shorthand, usage)\n}\n\n// Float64Var defines a float64 flag with specified name, default value, and usage string.\n// The argument p points to a float64 variable in which to store the value of the flag.\nfunc Float64Var(p *float64, name string, value float64, usage string) {\n\tCommandLine.VarP(newFloat64Value(value, p), name, \"\", usage)\n}\n\n// Float64VarP is like Float64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Float64VarP(p *float64, name, shorthand string, value float64, usage string) {\n\tCommandLine.VarP(newFloat64Value(value, p), name, shorthand, usage)\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64(name string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float64P(name, shorthand string, value float64, usage string) *float64 {\n\tp := new(float64)\n\tf.Float64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Float64 defines a float64 flag with specified name, default value, and usage string.\n// The return value is the address of a float64 variable that stores the value of the flag.\nfunc Float64(name string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64P(name, \"\", value, usage)\n}\n\n// Float64P is like Float64, but accepts a shorthand letter that can be used after a single dash.\nfunc Float64P(name, shorthand string, value float64, usage string) *float64 {\n\treturn CommandLine.Float64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/float64_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- float64Slice Value\ntype float64SliceValue struct {\n\tvalue   *[]float64\n\tchanged bool\n}\n\nfunc newFloat64SliceValue(val []float64, p *[]float64) *float64SliceValue {\n\tisv := new(float64SliceValue)\n\tisv.value = p\n\t*isv.value = val\n\treturn isv\n}\n\nfunc (s *float64SliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]float64, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.ParseFloat(d, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *float64SliceValue) Type() string {\n\treturn \"float64Slice\"\n}\n\nfunc (s *float64SliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%f\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc (s *float64SliceValue) fromString(val string) (float64, error) {\n\treturn strconv.ParseFloat(val, 64)\n}\n\nfunc (s *float64SliceValue) toString(val float64) string {\n\treturn fmt.Sprintf(\"%f\", val)\n}\n\nfunc (s *float64SliceValue) Append(val string) error {\n\ti, err := s.fromString(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*s.value = append(*s.value, i)\n\treturn nil\n}\n\nfunc (s *float64SliceValue) Replace(val []string) error {\n\tout := make([]float64, len(val))\n\tfor i, d := range val {\n\t\tvar err error\n\t\tout[i], err = s.fromString(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *float64SliceValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = s.toString(d)\n\t}\n\treturn out\n}\n\nfunc float64SliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []float64{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]float64, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.ParseFloat(d, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t}\n\treturn out, nil\n}\n\n// GetFloat64Slice return the []float64 value of a flag with the given name\nfunc (f *FlagSet) GetFloat64Slice(name string) ([]float64, error) {\n\tval, err := f.getFlagType(name, \"float64Slice\", float64SliceConv)\n\tif err != nil {\n\t\treturn []float64{}, err\n\t}\n\treturn val.([]float64), nil\n}\n\n// Float64SliceVar defines a float64Slice flag with specified name, default value, and usage string.\n// The argument p points to a []float64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Float64SliceVar(p *[]float64, name string, value []float64, usage string) {\n\tf.VarP(newFloat64SliceValue(value, p), name, \"\", usage)\n}\n\n// Float64SliceVarP is like Float64SliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float64SliceVarP(p *[]float64, name, shorthand string, value []float64, usage string) {\n\tf.VarP(newFloat64SliceValue(value, p), name, shorthand, usage)\n}\n\n// Float64SliceVar defines a float64[] flag with specified name, default value, and usage string.\n// The argument p points to a float64[] variable in which to store the value of the flag.\nfunc Float64SliceVar(p *[]float64, name string, value []float64, usage string) {\n\tCommandLine.VarP(newFloat64SliceValue(value, p), name, \"\", usage)\n}\n\n// Float64SliceVarP is like Float64SliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc Float64SliceVarP(p *[]float64, name, shorthand string, value []float64, usage string) {\n\tCommandLine.VarP(newFloat64SliceValue(value, p), name, shorthand, usage)\n}\n\n// Float64Slice defines a []float64 flag with specified name, default value, and usage string.\n// The return value is the address of a []float64 variable that stores the value of the flag.\nfunc (f *FlagSet) Float64Slice(name string, value []float64, usage string) *[]float64 {\n\tp := []float64{}\n\tf.Float64SliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// Float64SliceP is like Float64Slice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Float64SliceP(name, shorthand string, value []float64, usage string) *[]float64 {\n\tp := []float64{}\n\tf.Float64SliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// Float64Slice defines a []float64 flag with specified name, default value, and usage string.\n// The return value is the address of a []float64 variable that stores the value of the flag.\nfunc Float64Slice(name string, value []float64, usage string) *[]float64 {\n\treturn CommandLine.Float64SliceP(name, \"\", value, usage)\n}\n\n// Float64SliceP is like Float64Slice, but accepts a shorthand letter that can be used after a single dash.\nfunc Float64SliceP(name, shorthand string, value []float64, usage string) *[]float64 {\n\treturn CommandLine.Float64SliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/func.go",
    "content": "package pflag\n\n// -- func Value\ntype funcValue func(string) error\n\nfunc (f funcValue) Set(s string) error { return f(s) }\n\nfunc (f funcValue) Type() string { return \"func\" }\n\nfunc (f funcValue) String() string { return \"\" } // same behavior as stdlib 'flag' package\n\n// Func defines a func flag with specified name, callback function and usage string.\n//\n// The callback function will be called every time \"--{name}={value}\" (or equivalent) is\n// parsed on the command line, with \"{value}\" as an argument.\nfunc (f *FlagSet) Func(name string, usage string, fn func(string) error) {\n\tf.FuncP(name, \"\", usage, fn)\n}\n\n// FuncP is like Func, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) FuncP(name string, shorthand string, usage string, fn func(string) error) {\n\tvar val Value = funcValue(fn)\n\tf.VarP(val, name, shorthand, usage)\n}\n\n// Func defines a func flag with specified name, callback function and usage string.\n//\n// The callback function will be called every time \"--{name}={value}\" (or equivalent) is\n// parsed on the command line, with \"{value}\" as an argument.\nfunc Func(name string, usage string, fn func(string) error) {\n\tCommandLine.FuncP(name, \"\", usage, fn)\n}\n\n// FuncP is like Func, but accepts a shorthand letter that can be used after a single dash.\nfunc FuncP(name, shorthand string, usage string, fn func(string) error) {\n\tCommandLine.FuncP(name, shorthand, usage, fn)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/golangflag.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage pflag\n\nimport (\n\tgoflag \"flag\"\n\t\"reflect\"\n\t\"strings\"\n\t\"time\"\n)\n\n// go test flags prefixes\nfunc isGotestFlag(flag string) bool {\n\treturn strings.HasPrefix(flag, \"-test.\")\n}\n\nfunc isGotestShorthandFlag(flag string) bool {\n\treturn strings.HasPrefix(flag, \"test.\")\n}\n\n// flagValueWrapper implements pflag.Value around a flag.Value.  The main\n// difference here is the addition of the Type method that returns a string\n// name of the type.  As this is generally unknown, we approximate that with\n// reflection.\ntype flagValueWrapper struct {\n\tinner    goflag.Value\n\tflagType string\n}\n\n// We are just copying the boolFlag interface out of goflag as that is what\n// they use to decide if a flag should get \"true\" when no arg is given.\ntype goBoolFlag interface {\n\tgoflag.Value\n\tIsBoolFlag() bool\n}\n\nfunc wrapFlagValue(v goflag.Value) Value {\n\t// If the flag.Value happens to also be a pflag.Value, just use it directly.\n\tif pv, ok := v.(Value); ok {\n\t\treturn pv\n\t}\n\n\tpv := &flagValueWrapper{\n\t\tinner: v,\n\t}\n\n\tt := reflect.TypeOf(v)\n\tif t.Kind() == reflect.Interface || t.Kind() == reflect.Ptr {\n\t\tt = t.Elem()\n\t}\n\n\tpv.flagType = strings.TrimSuffix(t.Name(), \"Value\")\n\treturn pv\n}\n\nfunc (v *flagValueWrapper) String() string {\n\treturn v.inner.String()\n}\n\nfunc (v *flagValueWrapper) Set(s string) error {\n\treturn v.inner.Set(s)\n}\n\nfunc (v *flagValueWrapper) Type() string {\n\treturn v.flagType\n}\n\n// PFlagFromGoFlag will return a *pflag.Flag given a *flag.Flag\n// If the *flag.Flag.Name was a single character (ex: `v`) it will be accessiblei\n// with both `-v` and `--v` in flags. If the golang flag was more than a single\n// character (ex: `verbose`) it will only be accessible via `--verbose`\nfunc PFlagFromGoFlag(goflag *goflag.Flag) *Flag {\n\t// Remember the default value as a string; it won't change.\n\tflag := &Flag{\n\t\tName:  goflag.Name,\n\t\tUsage: goflag.Usage,\n\t\tValue: wrapFlagValue(goflag.Value),\n\t\t// Looks like golang flags don't set DefValue correctly  :-(\n\t\t//DefValue: goflag.DefValue,\n\t\tDefValue: goflag.Value.String(),\n\t}\n\t// Ex: if the golang flag was -v, allow both -v and --v to work\n\tif len(flag.Name) == 1 {\n\t\tflag.Shorthand = flag.Name\n\t}\n\tif fv, ok := goflag.Value.(goBoolFlag); ok && fv.IsBoolFlag() {\n\t\tflag.NoOptDefVal = \"true\"\n\t}\n\treturn flag\n}\n\n// AddGoFlag will add the given *flag.Flag to the pflag.FlagSet\nfunc (f *FlagSet) AddGoFlag(goflag *goflag.Flag) {\n\tif f.Lookup(goflag.Name) != nil {\n\t\treturn\n\t}\n\tnewflag := PFlagFromGoFlag(goflag)\n\tf.AddFlag(newflag)\n}\n\n// AddGoFlagSet will add the given *flag.FlagSet to the pflag.FlagSet\nfunc (f *FlagSet) AddGoFlagSet(newSet *goflag.FlagSet) {\n\tif newSet == nil {\n\t\treturn\n\t}\n\tnewSet.VisitAll(func(goflag *goflag.Flag) {\n\t\tf.AddGoFlag(goflag)\n\t})\n\tif f.addedGoFlagSets == nil {\n\t\tf.addedGoFlagSets = make([]*goflag.FlagSet, 0)\n\t}\n\tf.addedGoFlagSets = append(f.addedGoFlagSets, newSet)\n}\n\n// CopyToGoFlagSet will add all current flags to the given Go flag set.\n// Deprecation remarks get copied into the usage description.\n// Whenever possible, a flag gets added for which Go flags shows\n// a proper type in the help message.\nfunc (f *FlagSet) CopyToGoFlagSet(newSet *goflag.FlagSet) {\n\tf.VisitAll(func(flag *Flag) {\n\t\tusage := flag.Usage\n\t\tif flag.Deprecated != \"\" {\n\t\t\tusage += \" (DEPRECATED: \" + flag.Deprecated + \")\"\n\t\t}\n\n\t\tswitch value := flag.Value.(type) {\n\t\tcase *stringValue:\n\t\t\tnewSet.StringVar((*string)(value), flag.Name, flag.DefValue, usage)\n\t\tcase *intValue:\n\t\t\tnewSet.IntVar((*int)(value), flag.Name, *(*int)(value), usage)\n\t\tcase *int64Value:\n\t\t\tnewSet.Int64Var((*int64)(value), flag.Name, *(*int64)(value), usage)\n\t\tcase *uintValue:\n\t\t\tnewSet.UintVar((*uint)(value), flag.Name, *(*uint)(value), usage)\n\t\tcase *uint64Value:\n\t\t\tnewSet.Uint64Var((*uint64)(value), flag.Name, *(*uint64)(value), usage)\n\t\tcase *durationValue:\n\t\t\tnewSet.DurationVar((*time.Duration)(value), flag.Name, *(*time.Duration)(value), usage)\n\t\tcase *float64Value:\n\t\t\tnewSet.Float64Var((*float64)(value), flag.Name, *(*float64)(value), usage)\n\t\tdefault:\n\t\t\tnewSet.Var(flag.Value, flag.Name, usage)\n\t\t}\n\t})\n}\n\n// ParseSkippedFlags explicitly Parses go test flags (i.e. the one starting with '-test.') with goflag.Parse(),\n// since by default those are skipped by pflag.Parse().\n// Typical usage example: `ParseGoTestFlags(os.Args[1:], goflag.CommandLine)`\nfunc ParseSkippedFlags(osArgs []string, goFlagSet *goflag.FlagSet) error {\n\tvar skippedFlags []string\n\tfor _, f := range osArgs {\n\t\tif isGotestFlag(f) {\n\t\t\tskippedFlags = append(skippedFlags, f)\n\t\t}\n\t}\n\treturn goFlagSet.Parse(skippedFlags)\n}\n\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/int.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int Value\ntype intValue int\n\nfunc newIntValue(val int, p *int) *intValue {\n\t*p = val\n\treturn (*intValue)(p)\n}\n\nfunc (i *intValue) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = intValue(v)\n\treturn err\n}\n\nfunc (i *intValue) Type() string {\n\treturn \"int\"\n}\n\nfunc (i *intValue) String() string { return strconv.Itoa(int(*i)) }\n\nfunc intConv(sval string) (interface{}, error) {\n\treturn strconv.Atoi(sval)\n}\n\n// GetInt return the int value of a flag with the given name\nfunc (f *FlagSet) GetInt(name string) (int, error) {\n\tval, err := f.getFlagType(name, \"int\", intConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int), nil\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntVar(p *int, name string, value int, usage string) {\n\tf.VarP(newIntValue(value, p), name, \"\", usage)\n}\n\n// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntVarP(p *int, name, shorthand string, value int, usage string) {\n\tf.VarP(newIntValue(value, p), name, shorthand, usage)\n}\n\n// IntVar defines an int flag with specified name, default value, and usage string.\n// The argument p points to an int variable in which to store the value of the flag.\nfunc IntVar(p *int, name string, value int, usage string) {\n\tCommandLine.VarP(newIntValue(value, p), name, \"\", usage)\n}\n\n// IntVarP is like IntVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IntVarP(p *int, name, shorthand string, value int, usage string) {\n\tCommandLine.VarP(newIntValue(value, p), name, shorthand, usage)\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc (f *FlagSet) Int(name string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IntP is like Int, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntP(name, shorthand string, value int, usage string) *int {\n\tp := new(int)\n\tf.IntVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int defines an int flag with specified name, default value, and usage string.\n// The return value is the address of an int variable that stores the value of the flag.\nfunc Int(name string, value int, usage string) *int {\n\treturn CommandLine.IntP(name, \"\", value, usage)\n}\n\n// IntP is like Int, but accepts a shorthand letter that can be used after a single dash.\nfunc IntP(name, shorthand string, value int, usage string) *int {\n\treturn CommandLine.IntP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/int16.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int16 Value\ntype int16Value int16\n\nfunc newInt16Value(val int16, p *int16) *int16Value {\n\t*p = val\n\treturn (*int16Value)(p)\n}\n\nfunc (i *int16Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 16)\n\t*i = int16Value(v)\n\treturn err\n}\n\nfunc (i *int16Value) Type() string {\n\treturn \"int16\"\n}\n\nfunc (i *int16Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int16Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseInt(sval, 0, 16)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int16(v), nil\n}\n\n// GetInt16 returns the int16 value of a flag with the given name\nfunc (f *FlagSet) GetInt16(name string) (int16, error) {\n\tval, err := f.getFlagType(name, \"int16\", int16Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int16), nil\n}\n\n// Int16Var defines an int16 flag with specified name, default value, and usage string.\n// The argument p points to an int16 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int16Var(p *int16, name string, value int16, usage string) {\n\tf.VarP(newInt16Value(value, p), name, \"\", usage)\n}\n\n// Int16VarP is like Int16Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int16VarP(p *int16, name, shorthand string, value int16, usage string) {\n\tf.VarP(newInt16Value(value, p), name, shorthand, usage)\n}\n\n// Int16Var defines an int16 flag with specified name, default value, and usage string.\n// The argument p points to an int16 variable in which to store the value of the flag.\nfunc Int16Var(p *int16, name string, value int16, usage string) {\n\tCommandLine.VarP(newInt16Value(value, p), name, \"\", usage)\n}\n\n// Int16VarP is like Int16Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int16VarP(p *int16, name, shorthand string, value int16, usage string) {\n\tCommandLine.VarP(newInt16Value(value, p), name, shorthand, usage)\n}\n\n// Int16 defines an int16 flag with specified name, default value, and usage string.\n// The return value is the address of an int16 variable that stores the value of the flag.\nfunc (f *FlagSet) Int16(name string, value int16, usage string) *int16 {\n\tp := new(int16)\n\tf.Int16VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int16P is like Int16, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int16P(name, shorthand string, value int16, usage string) *int16 {\n\tp := new(int16)\n\tf.Int16VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int16 defines an int16 flag with specified name, default value, and usage string.\n// The return value is the address of an int16 variable that stores the value of the flag.\nfunc Int16(name string, value int16, usage string) *int16 {\n\treturn CommandLine.Int16P(name, \"\", value, usage)\n}\n\n// Int16P is like Int16, but accepts a shorthand letter that can be used after a single dash.\nfunc Int16P(name, shorthand string, value int16, usage string) *int16 {\n\treturn CommandLine.Int16P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/int32.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int32 Value\ntype int32Value int32\n\nfunc newInt32Value(val int32, p *int32) *int32Value {\n\t*p = val\n\treturn (*int32Value)(p)\n}\n\nfunc (i *int32Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 32)\n\t*i = int32Value(v)\n\treturn err\n}\n\nfunc (i *int32Value) Type() string {\n\treturn \"int32\"\n}\n\nfunc (i *int32Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int32Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseInt(sval, 0, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(v), nil\n}\n\n// GetInt32 return the int32 value of a flag with the given name\nfunc (f *FlagSet) GetInt32(name string) (int32, error) {\n\tval, err := f.getFlagType(name, \"int32\", int32Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int32), nil\n}\n\n// Int32Var defines an int32 flag with specified name, default value, and usage string.\n// The argument p points to an int32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int32Var(p *int32, name string, value int32, usage string) {\n\tf.VarP(newInt32Value(value, p), name, \"\", usage)\n}\n\n// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int32VarP(p *int32, name, shorthand string, value int32, usage string) {\n\tf.VarP(newInt32Value(value, p), name, shorthand, usage)\n}\n\n// Int32Var defines an int32 flag with specified name, default value, and usage string.\n// The argument p points to an int32 variable in which to store the value of the flag.\nfunc Int32Var(p *int32, name string, value int32, usage string) {\n\tCommandLine.VarP(newInt32Value(value, p), name, \"\", usage)\n}\n\n// Int32VarP is like Int32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int32VarP(p *int32, name, shorthand string, value int32, usage string) {\n\tCommandLine.VarP(newInt32Value(value, p), name, shorthand, usage)\n}\n\n// Int32 defines an int32 flag with specified name, default value, and usage string.\n// The return value is the address of an int32 variable that stores the value of the flag.\nfunc (f *FlagSet) Int32(name string, value int32, usage string) *int32 {\n\tp := new(int32)\n\tf.Int32VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int32P(name, shorthand string, value int32, usage string) *int32 {\n\tp := new(int32)\n\tf.Int32VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int32 defines an int32 flag with specified name, default value, and usage string.\n// The return value is the address of an int32 variable that stores the value of the flag.\nfunc Int32(name string, value int32, usage string) *int32 {\n\treturn CommandLine.Int32P(name, \"\", value, usage)\n}\n\n// Int32P is like Int32, but accepts a shorthand letter that can be used after a single dash.\nfunc Int32P(name, shorthand string, value int32, usage string) *int32 {\n\treturn CommandLine.Int32P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/int32_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- int32Slice Value\ntype int32SliceValue struct {\n\tvalue   *[]int32\n\tchanged bool\n}\n\nfunc newInt32SliceValue(val []int32, p *[]int32) *int32SliceValue {\n\tisv := new(int32SliceValue)\n\tisv.value = p\n\t*isv.value = val\n\treturn isv\n}\n\nfunc (s *int32SliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]int32, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tvar temp64 int64\n\t\ttemp64, err = strconv.ParseInt(d, 0, 32)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tout[i] = int32(temp64)\n\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *int32SliceValue) Type() string {\n\treturn \"int32Slice\"\n}\n\nfunc (s *int32SliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%d\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc (s *int32SliceValue) fromString(val string) (int32, error) {\n\tt64, err := strconv.ParseInt(val, 0, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int32(t64), nil\n}\n\nfunc (s *int32SliceValue) toString(val int32) string {\n\treturn fmt.Sprintf(\"%d\", val)\n}\n\nfunc (s *int32SliceValue) Append(val string) error {\n\ti, err := s.fromString(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*s.value = append(*s.value, i)\n\treturn nil\n}\n\nfunc (s *int32SliceValue) Replace(val []string) error {\n\tout := make([]int32, len(val))\n\tfor i, d := range val {\n\t\tvar err error\n\t\tout[i], err = s.fromString(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *int32SliceValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = s.toString(d)\n\t}\n\treturn out\n}\n\nfunc int32SliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []int32{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]int32, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tvar temp64 int64\n\t\ttemp64, err = strconv.ParseInt(d, 0, 32)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tout[i] = int32(temp64)\n\n\t}\n\treturn out, nil\n}\n\n// GetInt32Slice return the []int32 value of a flag with the given name\nfunc (f *FlagSet) GetInt32Slice(name string) ([]int32, error) {\n\tval, err := f.getFlagType(name, \"int32Slice\", int32SliceConv)\n\tif err != nil {\n\t\treturn []int32{}, err\n\t}\n\treturn val.([]int32), nil\n}\n\n// Int32SliceVar defines a int32Slice flag with specified name, default value, and usage string.\n// The argument p points to a []int32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int32SliceVar(p *[]int32, name string, value []int32, usage string) {\n\tf.VarP(newInt32SliceValue(value, p), name, \"\", usage)\n}\n\n// Int32SliceVarP is like Int32SliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int32SliceVarP(p *[]int32, name, shorthand string, value []int32, usage string) {\n\tf.VarP(newInt32SliceValue(value, p), name, shorthand, usage)\n}\n\n// Int32SliceVar defines a int32[] flag with specified name, default value, and usage string.\n// The argument p points to a int32[] variable in which to store the value of the flag.\nfunc Int32SliceVar(p *[]int32, name string, value []int32, usage string) {\n\tCommandLine.VarP(newInt32SliceValue(value, p), name, \"\", usage)\n}\n\n// Int32SliceVarP is like Int32SliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc Int32SliceVarP(p *[]int32, name, shorthand string, value []int32, usage string) {\n\tCommandLine.VarP(newInt32SliceValue(value, p), name, shorthand, usage)\n}\n\n// Int32Slice defines a []int32 flag with specified name, default value, and usage string.\n// The return value is the address of a []int32 variable that stores the value of the flag.\nfunc (f *FlagSet) Int32Slice(name string, value []int32, usage string) *[]int32 {\n\tp := []int32{}\n\tf.Int32SliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// Int32SliceP is like Int32Slice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int32SliceP(name, shorthand string, value []int32, usage string) *[]int32 {\n\tp := []int32{}\n\tf.Int32SliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// Int32Slice defines a []int32 flag with specified name, default value, and usage string.\n// The return value is the address of a []int32 variable that stores the value of the flag.\nfunc Int32Slice(name string, value []int32, usage string) *[]int32 {\n\treturn CommandLine.Int32SliceP(name, \"\", value, usage)\n}\n\n// Int32SliceP is like Int32Slice, but accepts a shorthand letter that can be used after a single dash.\nfunc Int32SliceP(name, shorthand string, value []int32, usage string) *[]int32 {\n\treturn CommandLine.Int32SliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/int64.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int64 Value\ntype int64Value int64\n\nfunc newInt64Value(val int64, p *int64) *int64Value {\n\t*p = val\n\treturn (*int64Value)(p)\n}\n\nfunc (i *int64Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 64)\n\t*i = int64Value(v)\n\treturn err\n}\n\nfunc (i *int64Value) Type() string {\n\treturn \"int64\"\n}\n\nfunc (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int64Conv(sval string) (interface{}, error) {\n\treturn strconv.ParseInt(sval, 0, 64)\n}\n\n// GetInt64 return the int64 value of a flag with the given name\nfunc (f *FlagSet) GetInt64(name string) (int64, error) {\n\tval, err := f.getFlagType(name, \"int64\", int64Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int64), nil\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64Var(p *int64, name string, value int64, usage string) {\n\tf.VarP(newInt64Value(value, p), name, \"\", usage)\n}\n\n// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int64VarP(p *int64, name, shorthand string, value int64, usage string) {\n\tf.VarP(newInt64Value(value, p), name, shorthand, usage)\n}\n\n// Int64Var defines an int64 flag with specified name, default value, and usage string.\n// The argument p points to an int64 variable in which to store the value of the flag.\nfunc Int64Var(p *int64, name string, value int64, usage string) {\n\tCommandLine.VarP(newInt64Value(value, p), name, \"\", usage)\n}\n\n// Int64VarP is like Int64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int64VarP(p *int64, name, shorthand string, value int64, usage string) {\n\tCommandLine.VarP(newInt64Value(value, p), name, shorthand, usage)\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64(name string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int64P(name, shorthand string, value int64, usage string) *int64 {\n\tp := new(int64)\n\tf.Int64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int64 defines an int64 flag with specified name, default value, and usage string.\n// The return value is the address of an int64 variable that stores the value of the flag.\nfunc Int64(name string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64P(name, \"\", value, usage)\n}\n\n// Int64P is like Int64, but accepts a shorthand letter that can be used after a single dash.\nfunc Int64P(name, shorthand string, value int64, usage string) *int64 {\n\treturn CommandLine.Int64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/int64_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- int64Slice Value\ntype int64SliceValue struct {\n\tvalue   *[]int64\n\tchanged bool\n}\n\nfunc newInt64SliceValue(val []int64, p *[]int64) *int64SliceValue {\n\tisv := new(int64SliceValue)\n\tisv.value = p\n\t*isv.value = val\n\treturn isv\n}\n\nfunc (s *int64SliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]int64, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.ParseInt(d, 0, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *int64SliceValue) Type() string {\n\treturn \"int64Slice\"\n}\n\nfunc (s *int64SliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%d\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc (s *int64SliceValue) fromString(val string) (int64, error) {\n\treturn strconv.ParseInt(val, 0, 64)\n}\n\nfunc (s *int64SliceValue) toString(val int64) string {\n\treturn fmt.Sprintf(\"%d\", val)\n}\n\nfunc (s *int64SliceValue) Append(val string) error {\n\ti, err := s.fromString(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*s.value = append(*s.value, i)\n\treturn nil\n}\n\nfunc (s *int64SliceValue) Replace(val []string) error {\n\tout := make([]int64, len(val))\n\tfor i, d := range val {\n\t\tvar err error\n\t\tout[i], err = s.fromString(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *int64SliceValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = s.toString(d)\n\t}\n\treturn out\n}\n\nfunc int64SliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []int64{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]int64, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.ParseInt(d, 0, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t}\n\treturn out, nil\n}\n\n// GetInt64Slice return the []int64 value of a flag with the given name\nfunc (f *FlagSet) GetInt64Slice(name string) ([]int64, error) {\n\tval, err := f.getFlagType(name, \"int64Slice\", int64SliceConv)\n\tif err != nil {\n\t\treturn []int64{}, err\n\t}\n\treturn val.([]int64), nil\n}\n\n// Int64SliceVar defines a int64Slice flag with specified name, default value, and usage string.\n// The argument p points to a []int64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int64SliceVar(p *[]int64, name string, value []int64, usage string) {\n\tf.VarP(newInt64SliceValue(value, p), name, \"\", usage)\n}\n\n// Int64SliceVarP is like Int64SliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int64SliceVarP(p *[]int64, name, shorthand string, value []int64, usage string) {\n\tf.VarP(newInt64SliceValue(value, p), name, shorthand, usage)\n}\n\n// Int64SliceVar defines a int64[] flag with specified name, default value, and usage string.\n// The argument p points to a int64[] variable in which to store the value of the flag.\nfunc Int64SliceVar(p *[]int64, name string, value []int64, usage string) {\n\tCommandLine.VarP(newInt64SliceValue(value, p), name, \"\", usage)\n}\n\n// Int64SliceVarP is like Int64SliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc Int64SliceVarP(p *[]int64, name, shorthand string, value []int64, usage string) {\n\tCommandLine.VarP(newInt64SliceValue(value, p), name, shorthand, usage)\n}\n\n// Int64Slice defines a []int64 flag with specified name, default value, and usage string.\n// The return value is the address of a []int64 variable that stores the value of the flag.\nfunc (f *FlagSet) Int64Slice(name string, value []int64, usage string) *[]int64 {\n\tp := []int64{}\n\tf.Int64SliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// Int64SliceP is like Int64Slice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int64SliceP(name, shorthand string, value []int64, usage string) *[]int64 {\n\tp := []int64{}\n\tf.Int64SliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// Int64Slice defines a []int64 flag with specified name, default value, and usage string.\n// The return value is the address of a []int64 variable that stores the value of the flag.\nfunc Int64Slice(name string, value []int64, usage string) *[]int64 {\n\treturn CommandLine.Int64SliceP(name, \"\", value, usage)\n}\n\n// Int64SliceP is like Int64Slice, but accepts a shorthand letter that can be used after a single dash.\nfunc Int64SliceP(name, shorthand string, value []int64, usage string) *[]int64 {\n\treturn CommandLine.Int64SliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/int8.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- int8 Value\ntype int8Value int8\n\nfunc newInt8Value(val int8, p *int8) *int8Value {\n\t*p = val\n\treturn (*int8Value)(p)\n}\n\nfunc (i *int8Value) Set(s string) error {\n\tv, err := strconv.ParseInt(s, 0, 8)\n\t*i = int8Value(v)\n\treturn err\n}\n\nfunc (i *int8Value) Type() string {\n\treturn \"int8\"\n}\n\nfunc (i *int8Value) String() string { return strconv.FormatInt(int64(*i), 10) }\n\nfunc int8Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseInt(sval, 0, 8)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn int8(v), nil\n}\n\n// GetInt8 return the int8 value of a flag with the given name\nfunc (f *FlagSet) GetInt8(name string) (int8, error) {\n\tval, err := f.getFlagType(name, \"int8\", int8Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(int8), nil\n}\n\n// Int8Var defines an int8 flag with specified name, default value, and usage string.\n// The argument p points to an int8 variable in which to store the value of the flag.\nfunc (f *FlagSet) Int8Var(p *int8, name string, value int8, usage string) {\n\tf.VarP(newInt8Value(value, p), name, \"\", usage)\n}\n\n// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int8VarP(p *int8, name, shorthand string, value int8, usage string) {\n\tf.VarP(newInt8Value(value, p), name, shorthand, usage)\n}\n\n// Int8Var defines an int8 flag with specified name, default value, and usage string.\n// The argument p points to an int8 variable in which to store the value of the flag.\nfunc Int8Var(p *int8, name string, value int8, usage string) {\n\tCommandLine.VarP(newInt8Value(value, p), name, \"\", usage)\n}\n\n// Int8VarP is like Int8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Int8VarP(p *int8, name, shorthand string, value int8, usage string) {\n\tCommandLine.VarP(newInt8Value(value, p), name, shorthand, usage)\n}\n\n// Int8 defines an int8 flag with specified name, default value, and usage string.\n// The return value is the address of an int8 variable that stores the value of the flag.\nfunc (f *FlagSet) Int8(name string, value int8, usage string) *int8 {\n\tp := new(int8)\n\tf.Int8VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Int8P(name, shorthand string, value int8, usage string) *int8 {\n\tp := new(int8)\n\tf.Int8VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Int8 defines an int8 flag with specified name, default value, and usage string.\n// The return value is the address of an int8 variable that stores the value of the flag.\nfunc Int8(name string, value int8, usage string) *int8 {\n\treturn CommandLine.Int8P(name, \"\", value, usage)\n}\n\n// Int8P is like Int8, but accepts a shorthand letter that can be used after a single dash.\nfunc Int8P(name, shorthand string, value int8, usage string) *int8 {\n\treturn CommandLine.Int8P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/int_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- intSlice Value\ntype intSliceValue struct {\n\tvalue   *[]int\n\tchanged bool\n}\n\nfunc newIntSliceValue(val []int, p *[]int) *intSliceValue {\n\tisv := new(intSliceValue)\n\tisv.value = p\n\t*isv.value = val\n\treturn isv\n}\n\nfunc (s *intSliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]int, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.Atoi(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *intSliceValue) Type() string {\n\treturn \"intSlice\"\n}\n\nfunc (s *intSliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%d\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc (s *intSliceValue) Append(val string) error {\n\ti, err := strconv.Atoi(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*s.value = append(*s.value, i)\n\treturn nil\n}\n\nfunc (s *intSliceValue) Replace(val []string) error {\n\tout := make([]int, len(val))\n\tfor i, d := range val {\n\t\tvar err error\n\t\tout[i], err = strconv.Atoi(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *intSliceValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = strconv.Itoa(d)\n\t}\n\treturn out\n}\n\nfunc intSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []int{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]int, len(ss))\n\tfor i, d := range ss {\n\t\tvar err error\n\t\tout[i], err = strconv.Atoi(d)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t}\n\treturn out, nil\n}\n\n// GetIntSlice return the []int value of a flag with the given name\nfunc (f *FlagSet) GetIntSlice(name string) ([]int, error) {\n\tval, err := f.getFlagType(name, \"intSlice\", intSliceConv)\n\tif err != nil {\n\t\treturn []int{}, err\n\t}\n\treturn val.([]int), nil\n}\n\n// IntSliceVar defines a intSlice flag with specified name, default value, and usage string.\n// The argument p points to a []int variable in which to store the value of the flag.\nfunc (f *FlagSet) IntSliceVar(p *[]int, name string, value []int, usage string) {\n\tf.VarP(newIntSliceValue(value, p), name, \"\", usage)\n}\n\n// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {\n\tf.VarP(newIntSliceValue(value, p), name, shorthand, usage)\n}\n\n// IntSliceVar defines a int[] flag with specified name, default value, and usage string.\n// The argument p points to a int[] variable in which to store the value of the flag.\nfunc IntSliceVar(p *[]int, name string, value []int, usage string) {\n\tCommandLine.VarP(newIntSliceValue(value, p), name, \"\", usage)\n}\n\n// IntSliceVarP is like IntSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IntSliceVarP(p *[]int, name, shorthand string, value []int, usage string) {\n\tCommandLine.VarP(newIntSliceValue(value, p), name, shorthand, usage)\n}\n\n// IntSlice defines a []int flag with specified name, default value, and usage string.\n// The return value is the address of a []int variable that stores the value of the flag.\nfunc (f *FlagSet) IntSlice(name string, value []int, usage string) *[]int {\n\tp := []int{}\n\tf.IntSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IntSliceP(name, shorthand string, value []int, usage string) *[]int {\n\tp := []int{}\n\tf.IntSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// IntSlice defines a []int flag with specified name, default value, and usage string.\n// The return value is the address of a []int variable that stores the value of the flag.\nfunc IntSlice(name string, value []int, usage string) *[]int {\n\treturn CommandLine.IntSliceP(name, \"\", value, usage)\n}\n\n// IntSliceP is like IntSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc IntSliceP(name, shorthand string, value []int, usage string) *[]int {\n\treturn CommandLine.IntSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/ip.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n)\n\n// -- net.IP value\ntype ipValue net.IP\n\nfunc newIPValue(val net.IP, p *net.IP) *ipValue {\n\t*p = val\n\treturn (*ipValue)(p)\n}\n\nfunc (i *ipValue) String() string { return net.IP(*i).String() }\nfunc (i *ipValue) Set(s string) error {\n\tif s == \"\" {\n\t\treturn nil\n\t}\n\tip := net.ParseIP(strings.TrimSpace(s))\n\tif ip == nil {\n\t\treturn fmt.Errorf(\"failed to parse IP: %q\", s)\n\t}\n\t*i = ipValue(ip)\n\treturn nil\n}\n\nfunc (i *ipValue) Type() string {\n\treturn \"ip\"\n}\n\nfunc ipConv(sval string) (interface{}, error) {\n\tip := net.ParseIP(sval)\n\tif ip != nil {\n\t\treturn ip, nil\n\t}\n\treturn nil, fmt.Errorf(\"invalid string being converted to IP address: %s\", sval)\n}\n\n// GetIP return the net.IP value of a flag with the given name\nfunc (f *FlagSet) GetIP(name string) (net.IP, error) {\n\tval, err := f.getFlagType(name, \"ip\", ipConv)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn val.(net.IP), nil\n}\n\n// IPVar defines an net.IP flag with specified name, default value, and usage string.\n// The argument p points to an net.IP variable in which to store the value of the flag.\nfunc (f *FlagSet) IPVar(p *net.IP, name string, value net.IP, usage string) {\n\tf.VarP(newIPValue(value, p), name, \"\", usage)\n}\n\n// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) {\n\tf.VarP(newIPValue(value, p), name, shorthand, usage)\n}\n\n// IPVar defines an net.IP flag with specified name, default value, and usage string.\n// The argument p points to an net.IP variable in which to store the value of the flag.\nfunc IPVar(p *net.IP, name string, value net.IP, usage string) {\n\tCommandLine.VarP(newIPValue(value, p), name, \"\", usage)\n}\n\n// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPVarP(p *net.IP, name, shorthand string, value net.IP, usage string) {\n\tCommandLine.VarP(newIPValue(value, p), name, shorthand, usage)\n}\n\n// IP defines an net.IP flag with specified name, default value, and usage string.\n// The return value is the address of an net.IP variable that stores the value of the flag.\nfunc (f *FlagSet) IP(name string, value net.IP, usage string) *net.IP {\n\tp := new(net.IP)\n\tf.IPVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPP(name, shorthand string, value net.IP, usage string) *net.IP {\n\tp := new(net.IP)\n\tf.IPVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// IP defines an net.IP flag with specified name, default value, and usage string.\n// The return value is the address of an net.IP variable that stores the value of the flag.\nfunc IP(name string, value net.IP, usage string) *net.IP {\n\treturn CommandLine.IPP(name, \"\", value, usage)\n}\n\n// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.\nfunc IPP(name, shorthand string, value net.IP, usage string) *net.IP {\n\treturn CommandLine.IPP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/ip_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"strings\"\n)\n\n// -- ipSlice Value\ntype ipSliceValue struct {\n\tvalue   *[]net.IP\n\tchanged bool\n}\n\nfunc newIPSliceValue(val []net.IP, p *[]net.IP) *ipSliceValue {\n\tipsv := new(ipSliceValue)\n\tipsv.value = p\n\t*ipsv.value = val\n\treturn ipsv\n}\n\n// Set converts, and assigns, the comma-separated IP argument string representation as the []net.IP value of this flag.\n// If Set is called on a flag that already has a []net.IP assigned, the newly converted values will be appended.\nfunc (s *ipSliceValue) Set(val string) error {\n\n\t// remove all quote characters\n\trmQuote := strings.NewReplacer(`\"`, \"\", `'`, \"\", \"`\", \"\")\n\n\t// read flag arguments with CSV parser\n\tipStrSlice, err := readAsCSV(rmQuote.Replace(val))\n\tif err != nil && err != io.EOF {\n\t\treturn err\n\t}\n\n\t// parse ip values into slice\n\tout := make([]net.IP, 0, len(ipStrSlice))\n\tfor _, ipStr := range ipStrSlice {\n\t\tip := net.ParseIP(strings.TrimSpace(ipStr))\n\t\tif ip == nil {\n\t\t\treturn fmt.Errorf(\"invalid string being converted to IP address: %s\", ipStr)\n\t\t}\n\t\tout = append(out, ip)\n\t}\n\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\n\ts.changed = true\n\n\treturn nil\n}\n\n// Type returns a string that uniquely represents this flag's type.\nfunc (s *ipSliceValue) Type() string {\n\treturn \"ipSlice\"\n}\n\n// String defines a \"native\" format for this net.IP slice flag value.\nfunc (s *ipSliceValue) String() string {\n\n\tipStrSlice := make([]string, len(*s.value))\n\tfor i, ip := range *s.value {\n\t\tipStrSlice[i] = ip.String()\n\t}\n\n\tout, _ := writeAsCSV(ipStrSlice)\n\n\treturn \"[\" + out + \"]\"\n}\n\nfunc (s *ipSliceValue) fromString(val string) (net.IP, error) {\n\treturn net.ParseIP(strings.TrimSpace(val)), nil\n}\n\nfunc (s *ipSliceValue) toString(val net.IP) string {\n\treturn val.String()\n}\n\nfunc (s *ipSliceValue) Append(val string) error {\n\ti, err := s.fromString(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*s.value = append(*s.value, i)\n\treturn nil\n}\n\nfunc (s *ipSliceValue) Replace(val []string) error {\n\tout := make([]net.IP, len(val))\n\tfor i, d := range val {\n\t\tvar err error\n\t\tout[i], err = s.fromString(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *ipSliceValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = s.toString(d)\n\t}\n\treturn out\n}\n\nfunc ipSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []net.IP{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]net.IP, len(ss))\n\tfor i, sval := range ss {\n\t\tip := net.ParseIP(strings.TrimSpace(sval))\n\t\tif ip == nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid string being converted to IP address: %s\", sval)\n\t\t}\n\t\tout[i] = ip\n\t}\n\treturn out, nil\n}\n\n// GetIPSlice returns the []net.IP value of a flag with the given name\nfunc (f *FlagSet) GetIPSlice(name string) ([]net.IP, error) {\n\tval, err := f.getFlagType(name, \"ipSlice\", ipSliceConv)\n\tif err != nil {\n\t\treturn []net.IP{}, err\n\t}\n\treturn val.([]net.IP), nil\n}\n\n// IPSliceVar defines a ipSlice flag with specified name, default value, and usage string.\n// The argument p points to a []net.IP variable in which to store the value of the flag.\nfunc (f *FlagSet) IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) {\n\tf.VarP(newIPSliceValue(value, p), name, \"\", usage)\n}\n\n// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) {\n\tf.VarP(newIPSliceValue(value, p), name, shorthand, usage)\n}\n\n// IPSliceVar defines a []net.IP flag with specified name, default value, and usage string.\n// The argument p points to a []net.IP variable in which to store the value of the flag.\nfunc IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) {\n\tCommandLine.VarP(newIPSliceValue(value, p), name, \"\", usage)\n}\n\n// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) {\n\tCommandLine.VarP(newIPSliceValue(value, p), name, shorthand, usage)\n}\n\n// IPSlice defines a []net.IP flag with specified name, default value, and usage string.\n// The return value is the address of a []net.IP variable that stores the value of that flag.\nfunc (f *FlagSet) IPSlice(name string, value []net.IP, usage string) *[]net.IP {\n\tp := []net.IP{}\n\tf.IPSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP {\n\tp := []net.IP{}\n\tf.IPSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// IPSlice defines a []net.IP flag with specified name, default value, and usage string.\n// The return value is the address of a []net.IP variable that stores the value of the flag.\nfunc IPSlice(name string, value []net.IP, usage string) *[]net.IP {\n\treturn CommandLine.IPSliceP(name, \"\", value, usage)\n}\n\n// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP {\n\treturn CommandLine.IPSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/ipmask.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strconv\"\n)\n\n// -- net.IPMask value\ntype ipMaskValue net.IPMask\n\nfunc newIPMaskValue(val net.IPMask, p *net.IPMask) *ipMaskValue {\n\t*p = val\n\treturn (*ipMaskValue)(p)\n}\n\nfunc (i *ipMaskValue) String() string { return net.IPMask(*i).String() }\nfunc (i *ipMaskValue) Set(s string) error {\n\tip := ParseIPv4Mask(s)\n\tif ip == nil {\n\t\treturn fmt.Errorf(\"failed to parse IP mask: %q\", s)\n\t}\n\t*i = ipMaskValue(ip)\n\treturn nil\n}\n\nfunc (i *ipMaskValue) Type() string {\n\treturn \"ipMask\"\n}\n\n// ParseIPv4Mask written in IP form (e.g. 255.255.255.0).\n// This function should really belong to the net package.\nfunc ParseIPv4Mask(s string) net.IPMask {\n\tmask := net.ParseIP(s)\n\tif mask == nil {\n\t\tif len(s) != 8 {\n\t\t\treturn nil\n\t\t}\n\t\t// net.IPMask.String() actually outputs things like ffffff00\n\t\t// so write a horrible parser for that as well  :-(\n\t\tm := []int{}\n\t\tfor i := 0; i < 4; i++ {\n\t\t\tb := \"0x\" + s[2*i:2*i+2]\n\t\t\td, err := strconv.ParseInt(b, 0, 0)\n\t\t\tif err != nil {\n\t\t\t\treturn nil\n\t\t\t}\n\t\t\tm = append(m, int(d))\n\t\t}\n\t\ts := fmt.Sprintf(\"%d.%d.%d.%d\", m[0], m[1], m[2], m[3])\n\t\tmask = net.ParseIP(s)\n\t\tif mask == nil {\n\t\t\treturn nil\n\t\t}\n\t}\n\treturn net.IPv4Mask(mask[12], mask[13], mask[14], mask[15])\n}\n\nfunc parseIPv4Mask(sval string) (interface{}, error) {\n\tmask := ParseIPv4Mask(sval)\n\tif mask == nil {\n\t\treturn nil, fmt.Errorf(\"unable to parse %s as net.IPMask\", sval)\n\t}\n\treturn mask, nil\n}\n\n// GetIPv4Mask return the net.IPv4Mask value of a flag with the given name\nfunc (f *FlagSet) GetIPv4Mask(name string) (net.IPMask, error) {\n\tval, err := f.getFlagType(name, \"ipMask\", parseIPv4Mask)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn val.(net.IPMask), nil\n}\n\n// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.\n// The argument p points to an net.IPMask variable in which to store the value of the flag.\nfunc (f *FlagSet) IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {\n\tf.VarP(newIPMaskValue(value, p), name, \"\", usage)\n}\n\n// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) {\n\tf.VarP(newIPMaskValue(value, p), name, shorthand, usage)\n}\n\n// IPMaskVar defines an net.IPMask flag with specified name, default value, and usage string.\n// The argument p points to an net.IPMask variable in which to store the value of the flag.\nfunc IPMaskVar(p *net.IPMask, name string, value net.IPMask, usage string) {\n\tCommandLine.VarP(newIPMaskValue(value, p), name, \"\", usage)\n}\n\n// IPMaskVarP is like IPMaskVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPMaskVarP(p *net.IPMask, name, shorthand string, value net.IPMask, usage string) {\n\tCommandLine.VarP(newIPMaskValue(value, p), name, shorthand, usage)\n}\n\n// IPMask defines an net.IPMask flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPMask variable that stores the value of the flag.\nfunc (f *FlagSet) IPMask(name string, value net.IPMask, usage string) *net.IPMask {\n\tp := new(net.IPMask)\n\tf.IPMaskVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IPMaskP is like IPMask, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask {\n\tp := new(net.IPMask)\n\tf.IPMaskVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// IPMask defines an net.IPMask flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPMask variable that stores the value of the flag.\nfunc IPMask(name string, value net.IPMask, usage string) *net.IPMask {\n\treturn CommandLine.IPMaskP(name, \"\", value, usage)\n}\n\n// IPMaskP is like IP, but accepts a shorthand letter that can be used after a single dash.\nfunc IPMaskP(name, shorthand string, value net.IPMask, usage string) *net.IPMask {\n\treturn CommandLine.IPMaskP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/ipnet.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strings\"\n)\n\n// IPNet adapts net.IPNet for use as a flag.\ntype ipNetValue net.IPNet\n\nfunc (ipnet ipNetValue) String() string {\n\tn := net.IPNet(ipnet)\n\treturn n.String()\n}\n\nfunc (ipnet *ipNetValue) Set(value string) error {\n\t_, n, err := net.ParseCIDR(strings.TrimSpace(value))\n\tif err != nil {\n\t\treturn err\n\t}\n\t*ipnet = ipNetValue(*n)\n\treturn nil\n}\n\nfunc (*ipNetValue) Type() string {\n\treturn \"ipNet\"\n}\n\nfunc newIPNetValue(val net.IPNet, p *net.IPNet) *ipNetValue {\n\t*p = val\n\treturn (*ipNetValue)(p)\n}\n\nfunc ipNetConv(sval string) (interface{}, error) {\n\t_, n, err := net.ParseCIDR(strings.TrimSpace(sval))\n\tif err == nil {\n\t\treturn *n, nil\n\t}\n\treturn nil, fmt.Errorf(\"invalid string being converted to IPNet: %s\", sval)\n}\n\n// GetIPNet return the net.IPNet value of a flag with the given name\nfunc (f *FlagSet) GetIPNet(name string) (net.IPNet, error) {\n\tval, err := f.getFlagType(name, \"ipNet\", ipNetConv)\n\tif err != nil {\n\t\treturn net.IPNet{}, err\n\t}\n\treturn val.(net.IPNet), nil\n}\n\n// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.\n// The argument p points to an net.IPNet variable in which to store the value of the flag.\nfunc (f *FlagSet) IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {\n\tf.VarP(newIPNetValue(value, p), name, \"\", usage)\n}\n\n// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {\n\tf.VarP(newIPNetValue(value, p), name, shorthand, usage)\n}\n\n// IPNetVar defines an net.IPNet flag with specified name, default value, and usage string.\n// The argument p points to an net.IPNet variable in which to store the value of the flag.\nfunc IPNetVar(p *net.IPNet, name string, value net.IPNet, usage string) {\n\tCommandLine.VarP(newIPNetValue(value, p), name, \"\", usage)\n}\n\n// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPNetVarP(p *net.IPNet, name, shorthand string, value net.IPNet, usage string) {\n\tCommandLine.VarP(newIPNetValue(value, p), name, shorthand, usage)\n}\n\n// IPNet defines an net.IPNet flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPNet variable that stores the value of the flag.\nfunc (f *FlagSet) IPNet(name string, value net.IPNet, usage string) *net.IPNet {\n\tp := new(net.IPNet)\n\tf.IPNetVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {\n\tp := new(net.IPNet)\n\tf.IPNetVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// IPNet defines an net.IPNet flag with specified name, default value, and usage string.\n// The return value is the address of an net.IPNet variable that stores the value of the flag.\nfunc IPNet(name string, value net.IPNet, usage string) *net.IPNet {\n\treturn CommandLine.IPNetP(name, \"\", value, usage)\n}\n\n// IPNetP is like IPNet, but accepts a shorthand letter that can be used after a single dash.\nfunc IPNetP(name, shorthand string, value net.IPNet, usage string) *net.IPNet {\n\treturn CommandLine.IPNetP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/ipnet_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"strings\"\n)\n\n// -- ipNetSlice Value\ntype ipNetSliceValue struct {\n\tvalue   *[]net.IPNet\n\tchanged bool\n}\n\nfunc newIPNetSliceValue(val []net.IPNet, p *[]net.IPNet) *ipNetSliceValue {\n\tipnsv := new(ipNetSliceValue)\n\tipnsv.value = p\n\t*ipnsv.value = val\n\treturn ipnsv\n}\n\n// Set converts, and assigns, the comma-separated IPNet argument string representation as the []net.IPNet value of this flag.\n// If Set is called on a flag that already has a []net.IPNet assigned, the newly converted values will be appended.\nfunc (s *ipNetSliceValue) Set(val string) error {\n\n\t// remove all quote characters\n\trmQuote := strings.NewReplacer(`\"`, \"\", `'`, \"\", \"`\", \"\")\n\n\t// read flag arguments with CSV parser\n\tipNetStrSlice, err := readAsCSV(rmQuote.Replace(val))\n\tif err != nil && err != io.EOF {\n\t\treturn err\n\t}\n\n\t// parse ip values into slice\n\tout := make([]net.IPNet, 0, len(ipNetStrSlice))\n\tfor _, ipNetStr := range ipNetStrSlice {\n\t\t_, n, err := net.ParseCIDR(strings.TrimSpace(ipNetStr))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"invalid string being converted to CIDR: %s\", ipNetStr)\n\t\t}\n\t\tout = append(out, *n)\n\t}\n\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\n\ts.changed = true\n\n\treturn nil\n}\n\n// Type returns a string that uniquely represents this flag's type.\nfunc (s *ipNetSliceValue) Type() string {\n\treturn \"ipNetSlice\"\n}\n\n// String defines a \"native\" format for this net.IPNet slice flag value.\nfunc (s *ipNetSliceValue) String() string {\n\n\tipNetStrSlice := make([]string, len(*s.value))\n\tfor i, n := range *s.value {\n\t\tipNetStrSlice[i] = n.String()\n\t}\n\n\tout, _ := writeAsCSV(ipNetStrSlice)\n\treturn \"[\" + out + \"]\"\n}\n\nfunc ipNetSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []net.IPNet{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]net.IPNet, len(ss))\n\tfor i, sval := range ss {\n\t\t_, n, err := net.ParseCIDR(strings.TrimSpace(sval))\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid string being converted to CIDR: %s\", sval)\n\t\t}\n\t\tout[i] = *n\n\t}\n\treturn out, nil\n}\n\n// GetIPNetSlice returns the []net.IPNet value of a flag with the given name\nfunc (f *FlagSet) GetIPNetSlice(name string) ([]net.IPNet, error) {\n\tval, err := f.getFlagType(name, \"ipNetSlice\", ipNetSliceConv)\n\tif err != nil {\n\t\treturn []net.IPNet{}, err\n\t}\n\treturn val.([]net.IPNet), nil\n}\n\n// IPNetSliceVar defines a ipNetSlice flag with specified name, default value, and usage string.\n// The argument p points to a []net.IPNet variable in which to store the value of the flag.\nfunc (f *FlagSet) IPNetSliceVar(p *[]net.IPNet, name string, value []net.IPNet, usage string) {\n\tf.VarP(newIPNetSliceValue(value, p), name, \"\", usage)\n}\n\n// IPNetSliceVarP is like IPNetSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPNetSliceVarP(p *[]net.IPNet, name, shorthand string, value []net.IPNet, usage string) {\n\tf.VarP(newIPNetSliceValue(value, p), name, shorthand, usage)\n}\n\n// IPNetSliceVar defines a []net.IPNet flag with specified name, default value, and usage string.\n// The argument p points to a []net.IPNet variable in which to store the value of the flag.\nfunc IPNetSliceVar(p *[]net.IPNet, name string, value []net.IPNet, usage string) {\n\tCommandLine.VarP(newIPNetSliceValue(value, p), name, \"\", usage)\n}\n\n// IPNetSliceVarP is like IPNetSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc IPNetSliceVarP(p *[]net.IPNet, name, shorthand string, value []net.IPNet, usage string) {\n\tCommandLine.VarP(newIPNetSliceValue(value, p), name, shorthand, usage)\n}\n\n// IPNetSlice defines a []net.IPNet flag with specified name, default value, and usage string.\n// The return value is the address of a []net.IPNet variable that stores the value of that flag.\nfunc (f *FlagSet) IPNetSlice(name string, value []net.IPNet, usage string) *[]net.IPNet {\n\tp := []net.IPNet{}\n\tf.IPNetSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// IPNetSliceP is like IPNetSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) IPNetSliceP(name, shorthand string, value []net.IPNet, usage string) *[]net.IPNet {\n\tp := []net.IPNet{}\n\tf.IPNetSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// IPNetSlice defines a []net.IPNet flag with specified name, default value, and usage string.\n// The return value is the address of a []net.IP variable that stores the value of the flag.\nfunc IPNetSlice(name string, value []net.IPNet, usage string) *[]net.IPNet {\n\treturn CommandLine.IPNetSliceP(name, \"\", value, usage)\n}\n\n// IPNetSliceP is like IPNetSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc IPNetSliceP(name, shorthand string, value []net.IPNet, usage string) *[]net.IPNet {\n\treturn CommandLine.IPNetSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/string.go",
    "content": "package pflag\n\n// -- string Value\ntype stringValue string\n\nfunc newStringValue(val string, p *string) *stringValue {\n\t*p = val\n\treturn (*stringValue)(p)\n}\n\nfunc (s *stringValue) Set(val string) error {\n\t*s = stringValue(val)\n\treturn nil\n}\nfunc (s *stringValue) Type() string {\n\treturn \"string\"\n}\n\nfunc (s *stringValue) String() string { return string(*s) }\n\nfunc stringConv(sval string) (interface{}, error) {\n\treturn sval, nil\n}\n\n// GetString return the string value of a flag with the given name\nfunc (f *FlagSet) GetString(name string) (string, error) {\n\tval, err := f.getFlagType(name, \"string\", stringConv)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn val.(string), nil\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc (f *FlagSet) StringVar(p *string, name string, value string, usage string) {\n\tf.VarP(newStringValue(value, p), name, \"\", usage)\n}\n\n// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringVarP(p *string, name, shorthand string, value string, usage string) {\n\tf.VarP(newStringValue(value, p), name, shorthand, usage)\n}\n\n// StringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a string variable in which to store the value of the flag.\nfunc StringVar(p *string, name string, value string, usage string) {\n\tCommandLine.VarP(newStringValue(value, p), name, \"\", usage)\n}\n\n// StringVarP is like StringVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringVarP(p *string, name, shorthand string, value string, usage string) {\n\tCommandLine.VarP(newStringValue(value, p), name, shorthand, usage)\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc (f *FlagSet) String(name string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// StringP is like String, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringP(name, shorthand string, value string, usage string) *string {\n\tp := new(string)\n\tf.StringVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// String defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a string variable that stores the value of the flag.\nfunc String(name string, value string, usage string) *string {\n\treturn CommandLine.StringP(name, \"\", value, usage)\n}\n\n// StringP is like String, but accepts a shorthand letter that can be used after a single dash.\nfunc StringP(name, shorthand string, value string, usage string) *string {\n\treturn CommandLine.StringP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/string_array.go",
    "content": "package pflag\n\n// -- stringArray Value\ntype stringArrayValue struct {\n\tvalue   *[]string\n\tchanged bool\n}\n\nfunc newStringArrayValue(val []string, p *[]string) *stringArrayValue {\n\tssv := new(stringArrayValue)\n\tssv.value = p\n\t*ssv.value = val\n\treturn ssv\n}\n\nfunc (s *stringArrayValue) Set(val string) error {\n\tif !s.changed {\n\t\t*s.value = []string{val}\n\t\ts.changed = true\n\t} else {\n\t\t*s.value = append(*s.value, val)\n\t}\n\treturn nil\n}\n\nfunc (s *stringArrayValue) Append(val string) error {\n\t*s.value = append(*s.value, val)\n\treturn nil\n}\n\nfunc (s *stringArrayValue) Replace(val []string) error {\n\tout := make([]string, len(val))\n\tfor i, d := range val {\n\t\tout[i] = d\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *stringArrayValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = d\n\t}\n\treturn out\n}\n\nfunc (s *stringArrayValue) Type() string {\n\treturn \"stringArray\"\n}\n\nfunc (s *stringArrayValue) String() string {\n\tstr, _ := writeAsCSV(*s.value)\n\treturn \"[\" + str + \"]\"\n}\n\nfunc stringArrayConv(sval string) (interface{}, error) {\n\tsval = sval[1 : len(sval)-1]\n\t// An empty string would cause a array with one (empty) string\n\tif len(sval) == 0 {\n\t\treturn []string{}, nil\n\t}\n\treturn readAsCSV(sval)\n}\n\n// GetStringArray return the []string value of a flag with the given name\nfunc (f *FlagSet) GetStringArray(name string) ([]string, error) {\n\tval, err := f.getFlagType(name, \"stringArray\", stringArrayConv)\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\treturn val.([]string), nil\n}\n\n// StringArrayVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the values of the multiple flags.\n// The value of each argument will not try to be separated by comma. Use a StringSlice for that.\nfunc (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) {\n\tf.VarP(newStringArrayValue(value, p), name, \"\", usage)\n}\n\n// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tf.VarP(newStringArrayValue(value, p), name, shorthand, usage)\n}\n\n// StringArrayVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the value of the flag.\n// The value of each argument will not try to be separated by comma. Use a StringSlice for that.\nfunc StringArrayVar(p *[]string, name string, value []string, usage string) {\n\tCommandLine.VarP(newStringArrayValue(value, p), name, \"\", usage)\n}\n\n// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tCommandLine.VarP(newStringArrayValue(value, p), name, shorthand, usage)\n}\n\n// StringArray defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma. Use a StringSlice for that.\nfunc (f *FlagSet) StringArray(name string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringArrayVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringArrayVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// StringArray defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma. Use a StringSlice for that.\nfunc StringArray(name string, value []string, usage string) *[]string {\n\treturn CommandLine.StringArrayP(name, \"\", value, usage)\n}\n\n// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash.\nfunc StringArrayP(name, shorthand string, value []string, usage string) *[]string {\n\treturn CommandLine.StringArrayP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/string_slice.go",
    "content": "package pflag\n\nimport (\n\t\"bytes\"\n\t\"encoding/csv\"\n\t\"strings\"\n)\n\n// -- stringSlice Value\ntype stringSliceValue struct {\n\tvalue   *[]string\n\tchanged bool\n}\n\nfunc newStringSliceValue(val []string, p *[]string) *stringSliceValue {\n\tssv := new(stringSliceValue)\n\tssv.value = p\n\t*ssv.value = val\n\treturn ssv\n}\n\nfunc readAsCSV(val string) ([]string, error) {\n\tif val == \"\" {\n\t\treturn []string{}, nil\n\t}\n\tstringReader := strings.NewReader(val)\n\tcsvReader := csv.NewReader(stringReader)\n\treturn csvReader.Read()\n}\n\nfunc writeAsCSV(vals []string) (string, error) {\n\tb := &bytes.Buffer{}\n\tw := csv.NewWriter(b)\n\terr := w.Write(vals)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tw.Flush()\n\treturn strings.TrimSuffix(b.String(), \"\\n\"), nil\n}\n\nfunc (s *stringSliceValue) Set(val string) error {\n\tv, err := readAsCSV(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif !s.changed {\n\t\t*s.value = v\n\t} else {\n\t\t*s.value = append(*s.value, v...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *stringSliceValue) Type() string {\n\treturn \"stringSlice\"\n}\n\nfunc (s *stringSliceValue) String() string {\n\tstr, _ := writeAsCSV(*s.value)\n\treturn \"[\" + str + \"]\"\n}\n\nfunc (s *stringSliceValue) Append(val string) error {\n\t*s.value = append(*s.value, val)\n\treturn nil\n}\n\nfunc (s *stringSliceValue) Replace(val []string) error {\n\t*s.value = val\n\treturn nil\n}\n\nfunc (s *stringSliceValue) GetSlice() []string {\n\treturn *s.value\n}\n\nfunc stringSliceConv(sval string) (interface{}, error) {\n\tsval = sval[1 : len(sval)-1]\n\t// An empty string would cause a slice with one (empty) string\n\tif len(sval) == 0 {\n\t\treturn []string{}, nil\n\t}\n\treturn readAsCSV(sval)\n}\n\n// GetStringSlice return the []string value of a flag with the given name\nfunc (f *FlagSet) GetStringSlice(name string) ([]string, error) {\n\tval, err := f.getFlagType(name, \"stringSlice\", stringSliceConv)\n\tif err != nil {\n\t\treturn []string{}, err\n\t}\n\treturn val.([]string), nil\n}\n\n// StringSliceVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the value of the flag.\n// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.\n// For example:\n//   --ss=\"v1,v2\" --ss=\"v3\"\n// will result in\n//   []string{\"v1\", \"v2\", \"v3\"}\nfunc (f *FlagSet) StringSliceVar(p *[]string, name string, value []string, usage string) {\n\tf.VarP(newStringSliceValue(value, p), name, \"\", usage)\n}\n\n// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tf.VarP(newStringSliceValue(value, p), name, shorthand, usage)\n}\n\n// StringSliceVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a []string variable in which to store the value of the flag.\n// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.\n// For example:\n//   --ss=\"v1,v2\" --ss=\"v3\"\n// will result in\n//   []string{\"v1\", \"v2\", \"v3\"}\nfunc StringSliceVar(p *[]string, name string, value []string, usage string) {\n\tCommandLine.VarP(newStringSliceValue(value, p), name, \"\", usage)\n}\n\n// StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {\n\tCommandLine.VarP(newStringSliceValue(value, p), name, shorthand, usage)\n}\n\n// StringSlice defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\n// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.\n// For example:\n//   --ss=\"v1,v2\" --ss=\"v3\"\n// will result in\n//   []string{\"v1\", \"v2\", \"v3\"}\nfunc (f *FlagSet) StringSlice(name string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringSliceP(name, shorthand string, value []string, usage string) *[]string {\n\tp := []string{}\n\tf.StringSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// StringSlice defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a []string variable that stores the value of the flag.\n// Compared to StringArray flags, StringSlice flags take comma-separated value as arguments and split them accordingly.\n// For example:\n//   --ss=\"v1,v2\" --ss=\"v3\"\n// will result in\n//   []string{\"v1\", \"v2\", \"v3\"}\nfunc StringSlice(name string, value []string, usage string) *[]string {\n\treturn CommandLine.StringSliceP(name, \"\", value, usage)\n}\n\n// StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc StringSliceP(name, shorthand string, value []string, usage string) *[]string {\n\treturn CommandLine.StringSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/string_to_int.go",
    "content": "package pflag\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- stringToInt Value\ntype stringToIntValue struct {\n\tvalue   *map[string]int\n\tchanged bool\n}\n\nfunc newStringToIntValue(val map[string]int, p *map[string]int) *stringToIntValue {\n\tssv := new(stringToIntValue)\n\tssv.value = p\n\t*ssv.value = val\n\treturn ssv\n}\n\n// Format: a=1,b=2\nfunc (s *stringToIntValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make(map[string]int, len(ss))\n\tfor _, pair := range ss {\n\t\tkv := strings.SplitN(pair, \"=\", 2)\n\t\tif len(kv) != 2 {\n\t\t\treturn fmt.Errorf(\"%s must be formatted as key=value\", pair)\n\t\t}\n\t\tvar err error\n\t\tout[kv[0]], err = strconv.Atoi(kv[1])\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\tfor k, v := range out {\n\t\t\t(*s.value)[k] = v\n\t\t}\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *stringToIntValue) Type() string {\n\treturn \"stringToInt\"\n}\n\nfunc (s *stringToIntValue) String() string {\n\tvar buf bytes.Buffer\n\ti := 0\n\tfor k, v := range *s.value {\n\t\tif i > 0 {\n\t\t\tbuf.WriteRune(',')\n\t\t}\n\t\tbuf.WriteString(k)\n\t\tbuf.WriteRune('=')\n\t\tbuf.WriteString(strconv.Itoa(v))\n\t\ti++\n\t}\n\treturn \"[\" + buf.String() + \"]\"\n}\n\nfunc stringToIntConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// An empty string would cause an empty map\n\tif len(val) == 0 {\n\t\treturn map[string]int{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make(map[string]int, len(ss))\n\tfor _, pair := range ss {\n\t\tkv := strings.SplitN(pair, \"=\", 2)\n\t\tif len(kv) != 2 {\n\t\t\treturn nil, fmt.Errorf(\"%s must be formatted as key=value\", pair)\n\t\t}\n\t\tvar err error\n\t\tout[kv[0]], err = strconv.Atoi(kv[1])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn out, nil\n}\n\n// GetStringToInt return the map[string]int value of a flag with the given name\nfunc (f *FlagSet) GetStringToInt(name string) (map[string]int, error) {\n\tval, err := f.getFlagType(name, \"stringToInt\", stringToIntConv)\n\tif err != nil {\n\t\treturn map[string]int{}, err\n\t}\n\treturn val.(map[string]int), nil\n}\n\n// StringToIntVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a map[string]int variable in which to store the values of the multiple flags.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringToIntVar(p *map[string]int, name string, value map[string]int, usage string) {\n\tf.VarP(newStringToIntValue(value, p), name, \"\", usage)\n}\n\n// StringToIntVarP is like StringToIntVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringToIntVarP(p *map[string]int, name, shorthand string, value map[string]int, usage string) {\n\tf.VarP(newStringToIntValue(value, p), name, shorthand, usage)\n}\n\n// StringToIntVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a map[string]int variable in which to store the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringToIntVar(p *map[string]int, name string, value map[string]int, usage string) {\n\tCommandLine.VarP(newStringToIntValue(value, p), name, \"\", usage)\n}\n\n// StringToIntVarP is like StringToIntVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringToIntVarP(p *map[string]int, name, shorthand string, value map[string]int, usage string) {\n\tCommandLine.VarP(newStringToIntValue(value, p), name, shorthand, usage)\n}\n\n// StringToInt defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a map[string]int variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringToInt(name string, value map[string]int, usage string) *map[string]int {\n\tp := map[string]int{}\n\tf.StringToIntVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// StringToIntP is like StringToInt, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringToIntP(name, shorthand string, value map[string]int, usage string) *map[string]int {\n\tp := map[string]int{}\n\tf.StringToIntVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// StringToInt defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a map[string]int variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringToInt(name string, value map[string]int, usage string) *map[string]int {\n\treturn CommandLine.StringToIntP(name, \"\", value, usage)\n}\n\n// StringToIntP is like StringToInt, but accepts a shorthand letter that can be used after a single dash.\nfunc StringToIntP(name, shorthand string, value map[string]int, usage string) *map[string]int {\n\treturn CommandLine.StringToIntP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/string_to_int64.go",
    "content": "package pflag\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- stringToInt64 Value\ntype stringToInt64Value struct {\n\tvalue   *map[string]int64\n\tchanged bool\n}\n\nfunc newStringToInt64Value(val map[string]int64, p *map[string]int64) *stringToInt64Value {\n\tssv := new(stringToInt64Value)\n\tssv.value = p\n\t*ssv.value = val\n\treturn ssv\n}\n\n// Format: a=1,b=2\nfunc (s *stringToInt64Value) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make(map[string]int64, len(ss))\n\tfor _, pair := range ss {\n\t\tkv := strings.SplitN(pair, \"=\", 2)\n\t\tif len(kv) != 2 {\n\t\t\treturn fmt.Errorf(\"%s must be formatted as key=value\", pair)\n\t\t}\n\t\tvar err error\n\t\tout[kv[0]], err = strconv.ParseInt(kv[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\tfor k, v := range out {\n\t\t\t(*s.value)[k] = v\n\t\t}\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *stringToInt64Value) Type() string {\n\treturn \"stringToInt64\"\n}\n\nfunc (s *stringToInt64Value) String() string {\n\tvar buf bytes.Buffer\n\ti := 0\n\tfor k, v := range *s.value {\n\t\tif i > 0 {\n\t\t\tbuf.WriteRune(',')\n\t\t}\n\t\tbuf.WriteString(k)\n\t\tbuf.WriteRune('=')\n\t\tbuf.WriteString(strconv.FormatInt(v, 10))\n\t\ti++\n\t}\n\treturn \"[\" + buf.String() + \"]\"\n}\n\nfunc stringToInt64Conv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// An empty string would cause an empty map\n\tif len(val) == 0 {\n\t\treturn map[string]int64{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make(map[string]int64, len(ss))\n\tfor _, pair := range ss {\n\t\tkv := strings.SplitN(pair, \"=\", 2)\n\t\tif len(kv) != 2 {\n\t\t\treturn nil, fmt.Errorf(\"%s must be formatted as key=value\", pair)\n\t\t}\n\t\tvar err error\n\t\tout[kv[0]], err = strconv.ParseInt(kv[1], 10, 64)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn out, nil\n}\n\n// GetStringToInt64 return the map[string]int64 value of a flag with the given name\nfunc (f *FlagSet) GetStringToInt64(name string) (map[string]int64, error) {\n\tval, err := f.getFlagType(name, \"stringToInt64\", stringToInt64Conv)\n\tif err != nil {\n\t\treturn map[string]int64{}, err\n\t}\n\treturn val.(map[string]int64), nil\n}\n\n// StringToInt64Var defines a string flag with specified name, default value, and usage string.\n// The argument p point64s to a map[string]int64 variable in which to store the values of the multiple flags.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringToInt64Var(p *map[string]int64, name string, value map[string]int64, usage string) {\n\tf.VarP(newStringToInt64Value(value, p), name, \"\", usage)\n}\n\n// StringToInt64VarP is like StringToInt64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringToInt64VarP(p *map[string]int64, name, shorthand string, value map[string]int64, usage string) {\n\tf.VarP(newStringToInt64Value(value, p), name, shorthand, usage)\n}\n\n// StringToInt64Var defines a string flag with specified name, default value, and usage string.\n// The argument p point64s to a map[string]int64 variable in which to store the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringToInt64Var(p *map[string]int64, name string, value map[string]int64, usage string) {\n\tCommandLine.VarP(newStringToInt64Value(value, p), name, \"\", usage)\n}\n\n// StringToInt64VarP is like StringToInt64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc StringToInt64VarP(p *map[string]int64, name, shorthand string, value map[string]int64, usage string) {\n\tCommandLine.VarP(newStringToInt64Value(value, p), name, shorthand, usage)\n}\n\n// StringToInt64 defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a map[string]int64 variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringToInt64(name string, value map[string]int64, usage string) *map[string]int64 {\n\tp := map[string]int64{}\n\tf.StringToInt64VarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// StringToInt64P is like StringToInt64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringToInt64P(name, shorthand string, value map[string]int64, usage string) *map[string]int64 {\n\tp := map[string]int64{}\n\tf.StringToInt64VarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// StringToInt64 defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a map[string]int64 variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringToInt64(name string, value map[string]int64, usage string) *map[string]int64 {\n\treturn CommandLine.StringToInt64P(name, \"\", value, usage)\n}\n\n// StringToInt64P is like StringToInt64, but accepts a shorthand letter that can be used after a single dash.\nfunc StringToInt64P(name, shorthand string, value map[string]int64, usage string) *map[string]int64 {\n\treturn CommandLine.StringToInt64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/string_to_string.go",
    "content": "package pflag\n\nimport (\n\t\"bytes\"\n\t\"encoding/csv\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// -- stringToString Value\ntype stringToStringValue struct {\n\tvalue   *map[string]string\n\tchanged bool\n}\n\nfunc newStringToStringValue(val map[string]string, p *map[string]string) *stringToStringValue {\n\tssv := new(stringToStringValue)\n\tssv.value = p\n\t*ssv.value = val\n\treturn ssv\n}\n\n// Format: a=1,b=2\nfunc (s *stringToStringValue) Set(val string) error {\n\tvar ss []string\n\tn := strings.Count(val, \"=\")\n\tswitch n {\n\tcase 0:\n\t\treturn fmt.Errorf(\"%s must be formatted as key=value\", val)\n\tcase 1:\n\t\tss = append(ss, strings.Trim(val, `\"`))\n\tdefault:\n\t\tr := csv.NewReader(strings.NewReader(val))\n\t\tvar err error\n\t\tss, err = r.Read()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tout := make(map[string]string, len(ss))\n\tfor _, pair := range ss {\n\t\tkv := strings.SplitN(pair, \"=\", 2)\n\t\tif len(kv) != 2 {\n\t\t\treturn fmt.Errorf(\"%s must be formatted as key=value\", pair)\n\t\t}\n\t\tout[kv[0]] = kv[1]\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\tfor k, v := range out {\n\t\t\t(*s.value)[k] = v\n\t\t}\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *stringToStringValue) Type() string {\n\treturn \"stringToString\"\n}\n\nfunc (s *stringToStringValue) String() string {\n\tkeys := make([]string, 0, len(*s.value))\n\tfor k := range *s.value {\n\t\tkeys = append(keys, k)\n\t}\n\tsort.Strings(keys)\n\n\trecords := make([]string, 0, len(*s.value)>>1)\n\tfor _, k := range keys {\n\t\tv := (*s.value)[k]\n\t\trecords = append(records, k+\"=\"+v)\n\t}\n\n\tvar buf bytes.Buffer\n\tw := csv.NewWriter(&buf)\n\tif err := w.Write(records); err != nil {\n\t\tpanic(err)\n\t}\n\tw.Flush()\n\treturn \"[\" + strings.TrimSpace(buf.String()) + \"]\"\n}\n\nfunc stringToStringConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// An empty string would cause an empty map\n\tif len(val) == 0 {\n\t\treturn map[string]string{}, nil\n\t}\n\tr := csv.NewReader(strings.NewReader(val))\n\tss, err := r.Read()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tout := make(map[string]string, len(ss))\n\tfor _, pair := range ss {\n\t\tkv := strings.SplitN(pair, \"=\", 2)\n\t\tif len(kv) != 2 {\n\t\t\treturn nil, fmt.Errorf(\"%s must be formatted as key=value\", pair)\n\t\t}\n\t\tout[kv[0]] = kv[1]\n\t}\n\treturn out, nil\n}\n\n// GetStringToString return the map[string]string value of a flag with the given name\nfunc (f *FlagSet) GetStringToString(name string) (map[string]string, error) {\n\tval, err := f.getFlagType(name, \"stringToString\", stringToStringConv)\n\tif err != nil {\n\t\treturn map[string]string{}, err\n\t}\n\treturn val.(map[string]string), nil\n}\n\n// StringToStringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a map[string]string variable in which to store the values of the multiple flags.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringToStringVar(p *map[string]string, name string, value map[string]string, usage string) {\n\tf.VarP(newStringToStringValue(value, p), name, \"\", usage)\n}\n\n// StringToStringVarP is like StringToStringVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringToStringVarP(p *map[string]string, name, shorthand string, value map[string]string, usage string) {\n\tf.VarP(newStringToStringValue(value, p), name, shorthand, usage)\n}\n\n// StringToStringVar defines a string flag with specified name, default value, and usage string.\n// The argument p points to a map[string]string variable in which to store the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringToStringVar(p *map[string]string, name string, value map[string]string, usage string) {\n\tCommandLine.VarP(newStringToStringValue(value, p), name, \"\", usage)\n}\n\n// StringToStringVarP is like StringToStringVar, but accepts a shorthand letter that can be used after a single dash.\nfunc StringToStringVarP(p *map[string]string, name, shorthand string, value map[string]string, usage string) {\n\tCommandLine.VarP(newStringToStringValue(value, p), name, shorthand, usage)\n}\n\n// StringToString defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a map[string]string variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc (f *FlagSet) StringToString(name string, value map[string]string, usage string) *map[string]string {\n\tp := map[string]string{}\n\tf.StringToStringVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// StringToStringP is like StringToString, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) StringToStringP(name, shorthand string, value map[string]string, usage string) *map[string]string {\n\tp := map[string]string{}\n\tf.StringToStringVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// StringToString defines a string flag with specified name, default value, and usage string.\n// The return value is the address of a map[string]string variable that stores the value of the flag.\n// The value of each argument will not try to be separated by comma\nfunc StringToString(name string, value map[string]string, usage string) *map[string]string {\n\treturn CommandLine.StringToStringP(name, \"\", value, usage)\n}\n\n// StringToStringP is like StringToString, but accepts a shorthand letter that can be used after a single dash.\nfunc StringToStringP(name, shorthand string, value map[string]string, usage string) *map[string]string {\n\treturn CommandLine.StringToStringP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/text.go",
    "content": "package pflag\n\nimport (\n\t\"encoding\"\n\t\"fmt\"\n\t\"reflect\"\n)\n\n// following is copied from go 1.23.4 flag.go\ntype textValue struct{ p encoding.TextUnmarshaler }\n\nfunc newTextValue(val encoding.TextMarshaler, p encoding.TextUnmarshaler) textValue {\n\tptrVal := reflect.ValueOf(p)\n\tif ptrVal.Kind() != reflect.Ptr {\n\t\tpanic(\"variable value type must be a pointer\")\n\t}\n\tdefVal := reflect.ValueOf(val)\n\tif defVal.Kind() == reflect.Ptr {\n\t\tdefVal = defVal.Elem()\n\t}\n\tif defVal.Type() != ptrVal.Type().Elem() {\n\t\tpanic(fmt.Sprintf(\"default type does not match variable type: %v != %v\", defVal.Type(), ptrVal.Type().Elem()))\n\t}\n\tptrVal.Elem().Set(defVal)\n\treturn textValue{p}\n}\n\nfunc (v textValue) Set(s string) error {\n\treturn v.p.UnmarshalText([]byte(s))\n}\n\nfunc (v textValue) Get() interface{} {\n\treturn v.p\n}\n\nfunc (v textValue) String() string {\n\tif m, ok := v.p.(encoding.TextMarshaler); ok {\n\t\tif b, err := m.MarshalText(); err == nil {\n\t\t\treturn string(b)\n\t\t}\n\t}\n\treturn \"\"\n}\n\n//end of copy\n\nfunc (v textValue) Type() string {\n\treturn reflect.ValueOf(v.p).Type().Name()\n}\n\n// GetText set out, which implements encoding.UnmarshalText, to the value of a flag with given name\nfunc (f *FlagSet) GetText(name string, out encoding.TextUnmarshaler) error {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\treturn fmt.Errorf(\"flag accessed but not defined: %s\", name)\n\t}\n\tif flag.Value.Type() != reflect.TypeOf(out).Name() {\n\t\treturn fmt.Errorf(\"trying to get %s value of flag of type %s\", reflect.TypeOf(out).Name(), flag.Value.Type())\n\t}\n\treturn out.UnmarshalText([]byte(flag.Value.String()))\n}\n\n// TextVar defines a flag with a specified name, default value, and usage string. The argument p must be a pointer to a variable that will hold the value of the flag, and p must implement encoding.TextUnmarshaler. If the flag is used, the flag value will be passed to p's UnmarshalText method. The type of the default value must be the same as the type of p.\nfunc (f *FlagSet) TextVar(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string) {\n\tf.VarP(newTextValue(value, p), name, \"\", usage)\n}\n\n// TextVarP is like TextVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) TextVarP(p encoding.TextUnmarshaler, name, shorthand string, value encoding.TextMarshaler, usage string) {\n\tf.VarP(newTextValue(value, p), name, shorthand, usage)\n}\n\n// TextVar defines a flag with a specified name, default value, and usage string. The argument p must be a pointer to a variable that will hold the value of the flag, and p must implement encoding.TextUnmarshaler. If the flag is used, the flag value will be passed to p's UnmarshalText method. The type of the default value must be the same as the type of p.\nfunc TextVar(p encoding.TextUnmarshaler, name string, value encoding.TextMarshaler, usage string) {\n\tCommandLine.VarP(newTextValue(value, p), name, \"\", usage)\n}\n\n// TextVarP is like TextVar, but accepts a shorthand letter that can be used after a single dash.\nfunc TextVarP(p encoding.TextUnmarshaler, name, shorthand string, value encoding.TextMarshaler, usage string) {\n\tCommandLine.VarP(newTextValue(value, p), name, shorthand, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/time.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\t\"time\"\n)\n\n// TimeValue adapts time.Time for use as a flag.\ntype timeValue struct {\n\t*time.Time\n\tformats []string\n}\n\nfunc newTimeValue(val time.Time, p *time.Time, formats []string) *timeValue {\n\t*p = val\n\treturn &timeValue{\n\t\tTime:    p,\n\t\tformats: formats,\n\t}\n}\n\n// Set time.Time value from string based on accepted formats.\nfunc (d *timeValue) Set(s string) error {\n\ts = strings.TrimSpace(s)\n\tfor _, f := range d.formats {\n\t\tv, err := time.Parse(f, s)\n\t\tif err != nil {\n\t\t\tcontinue\n\t\t}\n\t\t*d.Time = v\n\t\treturn nil\n\t}\n\n\tformatsString := \"\"\n\tfor i, f := range d.formats {\n\t\tif i > 0 {\n\t\t\tformatsString += \", \"\n\t\t}\n\t\tformatsString += fmt.Sprintf(\"`%s`\", f)\n\t}\n\n\treturn fmt.Errorf(\"invalid time format `%s` must be one of: %s\", s, formatsString)\n}\n\n// Type name for time.Time flags.\nfunc (d *timeValue) Type() string {\n\treturn \"time\"\n}\n\nfunc (d *timeValue) String() string {\n\tif d.Time.IsZero() {\n\t\treturn \"\"\n\t} else {\n\t\treturn d.Time.Format(time.RFC3339Nano)\n\t}\n}\n\n// GetTime return the time value of a flag with the given name\nfunc (f *FlagSet) GetTime(name string) (time.Time, error) {\n\tflag := f.Lookup(name)\n\tif flag == nil {\n\t\terr := fmt.Errorf(\"flag accessed but not defined: %s\", name)\n\t\treturn time.Time{}, err\n\t}\n\n\tif flag.Value.Type() != \"time\" {\n\t\terr := fmt.Errorf(\"trying to get %s value of flag of type %s\", \"time\", flag.Value.Type())\n\t\treturn time.Time{}, err\n\t}\n\n\tval, ok := flag.Value.(*timeValue)\n\tif !ok {\n\t\treturn time.Time{}, fmt.Errorf(\"value %s is not a time\", flag.Value)\n\t}\n\n\treturn *val.Time, nil\n}\n\n// TimeVar defines a time.Time flag with specified name, default value, and usage string.\n// The argument p points to a time.Time variable in which to store the value of the flag.\nfunc (f *FlagSet) TimeVar(p *time.Time, name string, value time.Time, formats []string, usage string) {\n\tf.TimeVarP(p, name, \"\", value, formats, usage)\n}\n\n// TimeVarP is like TimeVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) TimeVarP(p *time.Time, name, shorthand string, value time.Time, formats []string, usage string) {\n\tf.VarP(newTimeValue(value, p, formats), name, shorthand, usage)\n}\n\n// TimeVar defines a time.Time flag with specified name, default value, and usage string.\n// The argument p points to a time.Time variable in which to store the value of the flag.\nfunc TimeVar(p *time.Time, name string, value time.Time, formats []string, usage string) {\n\tCommandLine.TimeVarP(p, name, \"\", value, formats, usage)\n}\n\n// TimeVarP is like TimeVar, but accepts a shorthand letter that can be used after a single dash.\nfunc TimeVarP(p *time.Time, name, shorthand string, value time.Time, formats []string, usage string) {\n\tCommandLine.VarP(newTimeValue(value, p, formats), name, shorthand, usage)\n}\n\n// Time defines a time.Time flag with specified name, default value, and usage string.\n// The return value is the address of a time.Time variable that stores the value of the flag.\nfunc (f *FlagSet) Time(name string, value time.Time, formats []string, usage string) *time.Time {\n\treturn f.TimeP(name, \"\", value, formats, usage)\n}\n\n// TimeP is like Time, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) TimeP(name, shorthand string, value time.Time, formats []string, usage string) *time.Time {\n\tp := new(time.Time)\n\tf.TimeVarP(p, name, shorthand, value, formats, usage)\n\treturn p\n}\n\n// Time defines a time.Time flag with specified name, default value, and usage string.\n// The return value is the address of a time.Time variable that stores the value of the flag.\nfunc Time(name string, value time.Time, formats []string, usage string) *time.Time {\n\treturn CommandLine.TimeP(name, \"\", value, formats, usage)\n}\n\n// TimeP is like Time, but accepts a shorthand letter that can be used after a single dash.\nfunc TimeP(name, shorthand string, value time.Time, formats []string, usage string) *time.Time {\n\treturn CommandLine.TimeP(name, shorthand, value, formats, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/uint.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint Value\ntype uintValue uint\n\nfunc newUintValue(val uint, p *uint) *uintValue {\n\t*p = val\n\treturn (*uintValue)(p)\n}\n\nfunc (i *uintValue) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uintValue(v)\n\treturn err\n}\n\nfunc (i *uintValue) Type() string {\n\treturn \"uint\"\n}\n\nfunc (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uintConv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 0)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint(v), nil\n}\n\n// GetUint return the uint value of a flag with the given name\nfunc (f *FlagSet) GetUint(name string) (uint, error) {\n\tval, err := f.getFlagType(name, \"uint\", uintConv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint), nil\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintVar(p *uint, name string, value uint, usage string) {\n\tf.VarP(newUintValue(value, p), name, \"\", usage)\n}\n\n// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintVarP(p *uint, name, shorthand string, value uint, usage string) {\n\tf.VarP(newUintValue(value, p), name, shorthand, usage)\n}\n\n// UintVar defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc UintVar(p *uint, name string, value uint, usage string) {\n\tCommandLine.VarP(newUintValue(value, p), name, \"\", usage)\n}\n\n// UintVarP is like UintVar, but accepts a shorthand letter that can be used after a single dash.\nfunc UintVarP(p *uint, name, shorthand string, value uint, usage string) {\n\tCommandLine.VarP(newUintValue(value, p), name, shorthand, usage)\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint(name string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintP(name, shorthand string, value uint, usage string) *uint {\n\tp := new(uint)\n\tf.UintVarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint(name string, value uint, usage string) *uint {\n\treturn CommandLine.UintP(name, \"\", value, usage)\n}\n\n// UintP is like Uint, but accepts a shorthand letter that can be used after a single dash.\nfunc UintP(name, shorthand string, value uint, usage string) *uint {\n\treturn CommandLine.UintP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/uint16.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint16 value\ntype uint16Value uint16\n\nfunc newUint16Value(val uint16, p *uint16) *uint16Value {\n\t*p = val\n\treturn (*uint16Value)(p)\n}\n\nfunc (i *uint16Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 16)\n\t*i = uint16Value(v)\n\treturn err\n}\n\nfunc (i *uint16Value) Type() string {\n\treturn \"uint16\"\n}\n\nfunc (i *uint16Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint16Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 16)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint16(v), nil\n}\n\n// GetUint16 return the uint16 value of a flag with the given name\nfunc (f *FlagSet) GetUint16(name string) (uint16, error) {\n\tval, err := f.getFlagType(name, \"uint16\", uint16Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint16), nil\n}\n\n// Uint16Var defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint16Var(p *uint16, name string, value uint16, usage string) {\n\tf.VarP(newUint16Value(value, p), name, \"\", usage)\n}\n\n// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) {\n\tf.VarP(newUint16Value(value, p), name, shorthand, usage)\n}\n\n// Uint16Var defines a uint flag with specified name, default value, and usage string.\n// The argument p points to a uint  variable in which to store the value of the flag.\nfunc Uint16Var(p *uint16, name string, value uint16, usage string) {\n\tCommandLine.VarP(newUint16Value(value, p), name, \"\", usage)\n}\n\n// Uint16VarP is like Uint16Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint16VarP(p *uint16, name, shorthand string, value uint16, usage string) {\n\tCommandLine.VarP(newUint16Value(value, p), name, shorthand, usage)\n}\n\n// Uint16 defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint16(name string, value uint16, usage string) *uint16 {\n\tp := new(uint16)\n\tf.Uint16VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint16P(name, shorthand string, value uint16, usage string) *uint16 {\n\tp := new(uint16)\n\tf.Uint16VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint16 defines a uint flag with specified name, default value, and usage string.\n// The return value is the address of a uint  variable that stores the value of the flag.\nfunc Uint16(name string, value uint16, usage string) *uint16 {\n\treturn CommandLine.Uint16P(name, \"\", value, usage)\n}\n\n// Uint16P is like Uint16, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint16P(name, shorthand string, value uint16, usage string) *uint16 {\n\treturn CommandLine.Uint16P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/uint32.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint32 value\ntype uint32Value uint32\n\nfunc newUint32Value(val uint32, p *uint32) *uint32Value {\n\t*p = val\n\treturn (*uint32Value)(p)\n}\n\nfunc (i *uint32Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 32)\n\t*i = uint32Value(v)\n\treturn err\n}\n\nfunc (i *uint32Value) Type() string {\n\treturn \"uint32\"\n}\n\nfunc (i *uint32Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint32Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 32)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint32(v), nil\n}\n\n// GetUint32 return the uint32 value of a flag with the given name\nfunc (f *FlagSet) GetUint32(name string) (uint32, error) {\n\tval, err := f.getFlagType(name, \"uint32\", uint32Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint32), nil\n}\n\n// Uint32Var defines a uint32 flag with specified name, default value, and usage string.\n// The argument p points to a uint32 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint32Var(p *uint32, name string, value uint32, usage string) {\n\tf.VarP(newUint32Value(value, p), name, \"\", usage)\n}\n\n// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) {\n\tf.VarP(newUint32Value(value, p), name, shorthand, usage)\n}\n\n// Uint32Var defines a uint32 flag with specified name, default value, and usage string.\n// The argument p points to a uint32  variable in which to store the value of the flag.\nfunc Uint32Var(p *uint32, name string, value uint32, usage string) {\n\tCommandLine.VarP(newUint32Value(value, p), name, \"\", usage)\n}\n\n// Uint32VarP is like Uint32Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint32VarP(p *uint32, name, shorthand string, value uint32, usage string) {\n\tCommandLine.VarP(newUint32Value(value, p), name, shorthand, usage)\n}\n\n// Uint32 defines a uint32 flag with specified name, default value, and usage string.\n// The return value is the address of a uint32  variable that stores the value of the flag.\nfunc (f *FlagSet) Uint32(name string, value uint32, usage string) *uint32 {\n\tp := new(uint32)\n\tf.Uint32VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint32P(name, shorthand string, value uint32, usage string) *uint32 {\n\tp := new(uint32)\n\tf.Uint32VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint32 defines a uint32 flag with specified name, default value, and usage string.\n// The return value is the address of a uint32  variable that stores the value of the flag.\nfunc Uint32(name string, value uint32, usage string) *uint32 {\n\treturn CommandLine.Uint32P(name, \"\", value, usage)\n}\n\n// Uint32P is like Uint32, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint32P(name, shorthand string, value uint32, usage string) *uint32 {\n\treturn CommandLine.Uint32P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/uint64.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint64 Value\ntype uint64Value uint64\n\nfunc newUint64Value(val uint64, p *uint64) *uint64Value {\n\t*p = val\n\treturn (*uint64Value)(p)\n}\n\nfunc (i *uint64Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 64)\n\t*i = uint64Value(v)\n\treturn err\n}\n\nfunc (i *uint64Value) Type() string {\n\treturn \"uint64\"\n}\n\nfunc (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint64Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 64)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint64(v), nil\n}\n\n// GetUint64 return the uint64 value of a flag with the given name\nfunc (f *FlagSet) GetUint64(name string) (uint64, error) {\n\tval, err := f.getFlagType(name, \"uint64\", uint64Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint64), nil\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tf.VarP(newUint64Value(value, p), name, \"\", usage)\n}\n\n// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) {\n\tf.VarP(newUint64Value(value, p), name, shorthand, usage)\n}\n\n// Uint64Var defines a uint64 flag with specified name, default value, and usage string.\n// The argument p points to a uint64 variable in which to store the value of the flag.\nfunc Uint64Var(p *uint64, name string, value uint64, usage string) {\n\tCommandLine.VarP(newUint64Value(value, p), name, \"\", usage)\n}\n\n// Uint64VarP is like Uint64Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint64VarP(p *uint64, name, shorthand string, value uint64, usage string) {\n\tCommandLine.VarP(newUint64Value(value, p), name, shorthand, usage)\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint64(name string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint64P(name, shorthand string, value uint64, usage string) *uint64 {\n\tp := new(uint64)\n\tf.Uint64VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint64 defines a uint64 flag with specified name, default value, and usage string.\n// The return value is the address of a uint64 variable that stores the value of the flag.\nfunc Uint64(name string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64P(name, \"\", value, usage)\n}\n\n// Uint64P is like Uint64, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint64P(name, shorthand string, value uint64, usage string) *uint64 {\n\treturn CommandLine.Uint64P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/uint8.go",
    "content": "package pflag\n\nimport \"strconv\"\n\n// -- uint8 Value\ntype uint8Value uint8\n\nfunc newUint8Value(val uint8, p *uint8) *uint8Value {\n\t*p = val\n\treturn (*uint8Value)(p)\n}\n\nfunc (i *uint8Value) Set(s string) error {\n\tv, err := strconv.ParseUint(s, 0, 8)\n\t*i = uint8Value(v)\n\treturn err\n}\n\nfunc (i *uint8Value) Type() string {\n\treturn \"uint8\"\n}\n\nfunc (i *uint8Value) String() string { return strconv.FormatUint(uint64(*i), 10) }\n\nfunc uint8Conv(sval string) (interface{}, error) {\n\tv, err := strconv.ParseUint(sval, 0, 8)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint8(v), nil\n}\n\n// GetUint8 return the uint8 value of a flag with the given name\nfunc (f *FlagSet) GetUint8(name string) (uint8, error) {\n\tval, err := f.getFlagType(name, \"uint8\", uint8Conv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn val.(uint8), nil\n}\n\n// Uint8Var defines a uint8 flag with specified name, default value, and usage string.\n// The argument p points to a uint8 variable in which to store the value of the flag.\nfunc (f *FlagSet) Uint8Var(p *uint8, name string, value uint8, usage string) {\n\tf.VarP(newUint8Value(value, p), name, \"\", usage)\n}\n\n// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) {\n\tf.VarP(newUint8Value(value, p), name, shorthand, usage)\n}\n\n// Uint8Var defines a uint8 flag with specified name, default value, and usage string.\n// The argument p points to a uint8 variable in which to store the value of the flag.\nfunc Uint8Var(p *uint8, name string, value uint8, usage string) {\n\tCommandLine.VarP(newUint8Value(value, p), name, \"\", usage)\n}\n\n// Uint8VarP is like Uint8Var, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint8VarP(p *uint8, name, shorthand string, value uint8, usage string) {\n\tCommandLine.VarP(newUint8Value(value, p), name, shorthand, usage)\n}\n\n// Uint8 defines a uint8 flag with specified name, default value, and usage string.\n// The return value is the address of a uint8 variable that stores the value of the flag.\nfunc (f *FlagSet) Uint8(name string, value uint8, usage string) *uint8 {\n\tp := new(uint8)\n\tf.Uint8VarP(p, name, \"\", value, usage)\n\treturn p\n}\n\n// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) Uint8P(name, shorthand string, value uint8, usage string) *uint8 {\n\tp := new(uint8)\n\tf.Uint8VarP(p, name, shorthand, value, usage)\n\treturn p\n}\n\n// Uint8 defines a uint8 flag with specified name, default value, and usage string.\n// The return value is the address of a uint8 variable that stores the value of the flag.\nfunc Uint8(name string, value uint8, usage string) *uint8 {\n\treturn CommandLine.Uint8P(name, \"\", value, usage)\n}\n\n// Uint8P is like Uint8, but accepts a shorthand letter that can be used after a single dash.\nfunc Uint8P(name, shorthand string, value uint8, usage string) *uint8 {\n\treturn CommandLine.Uint8P(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/github.com/spf13/pflag/uint_slice.go",
    "content": "package pflag\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// -- uintSlice Value\ntype uintSliceValue struct {\n\tvalue   *[]uint\n\tchanged bool\n}\n\nfunc newUintSliceValue(val []uint, p *[]uint) *uintSliceValue {\n\tuisv := new(uintSliceValue)\n\tuisv.value = p\n\t*uisv.value = val\n\treturn uisv\n}\n\nfunc (s *uintSliceValue) Set(val string) error {\n\tss := strings.Split(val, \",\")\n\tout := make([]uint, len(ss))\n\tfor i, d := range ss {\n\t\tu, err := strconv.ParseUint(d, 10, 0)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tout[i] = uint(u)\n\t}\n\tif !s.changed {\n\t\t*s.value = out\n\t} else {\n\t\t*s.value = append(*s.value, out...)\n\t}\n\ts.changed = true\n\treturn nil\n}\n\nfunc (s *uintSliceValue) Type() string {\n\treturn \"uintSlice\"\n}\n\nfunc (s *uintSliceValue) String() string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = fmt.Sprintf(\"%d\", d)\n\t}\n\treturn \"[\" + strings.Join(out, \",\") + \"]\"\n}\n\nfunc (s *uintSliceValue) fromString(val string) (uint, error) {\n\tt, err := strconv.ParseUint(val, 10, 0)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\treturn uint(t), nil\n}\n\nfunc (s *uintSliceValue) toString(val uint) string {\n\treturn fmt.Sprintf(\"%d\", val)\n}\n\nfunc (s *uintSliceValue) Append(val string) error {\n\ti, err := s.fromString(val)\n\tif err != nil {\n\t\treturn err\n\t}\n\t*s.value = append(*s.value, i)\n\treturn nil\n}\n\nfunc (s *uintSliceValue) Replace(val []string) error {\n\tout := make([]uint, len(val))\n\tfor i, d := range val {\n\t\tvar err error\n\t\tout[i], err = s.fromString(d)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\t*s.value = out\n\treturn nil\n}\n\nfunc (s *uintSliceValue) GetSlice() []string {\n\tout := make([]string, len(*s.value))\n\tfor i, d := range *s.value {\n\t\tout[i] = s.toString(d)\n\t}\n\treturn out\n}\n\nfunc uintSliceConv(val string) (interface{}, error) {\n\tval = strings.Trim(val, \"[]\")\n\t// Empty string would cause a slice with one (empty) entry\n\tif len(val) == 0 {\n\t\treturn []uint{}, nil\n\t}\n\tss := strings.Split(val, \",\")\n\tout := make([]uint, len(ss))\n\tfor i, d := range ss {\n\t\tu, err := strconv.ParseUint(d, 10, 0)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tout[i] = uint(u)\n\t}\n\treturn out, nil\n}\n\n// GetUintSlice returns the []uint value of a flag with the given name.\nfunc (f *FlagSet) GetUintSlice(name string) ([]uint, error) {\n\tval, err := f.getFlagType(name, \"uintSlice\", uintSliceConv)\n\tif err != nil {\n\t\treturn []uint{}, err\n\t}\n\treturn val.([]uint), nil\n}\n\n// UintSliceVar defines a uintSlice flag with specified name, default value, and usage string.\n// The argument p points to a []uint variable in which to store the value of the flag.\nfunc (f *FlagSet) UintSliceVar(p *[]uint, name string, value []uint, usage string) {\n\tf.VarP(newUintSliceValue(value, p), name, \"\", usage)\n}\n\n// UintSliceVarP is like UintSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) {\n\tf.VarP(newUintSliceValue(value, p), name, shorthand, usage)\n}\n\n// UintSliceVar defines a uint[] flag with specified name, default value, and usage string.\n// The argument p points to a uint[] variable in which to store the value of the flag.\nfunc UintSliceVar(p *[]uint, name string, value []uint, usage string) {\n\tCommandLine.VarP(newUintSliceValue(value, p), name, \"\", usage)\n}\n\n// UintSliceVarP is like the UintSliceVar, but accepts a shorthand letter that can be used after a single dash.\nfunc UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) {\n\tCommandLine.VarP(newUintSliceValue(value, p), name, shorthand, usage)\n}\n\n// UintSlice defines a []uint flag with specified name, default value, and usage string.\n// The return value is the address of a []uint variable that stores the value of the flag.\nfunc (f *FlagSet) UintSlice(name string, value []uint, usage string) *[]uint {\n\tp := []uint{}\n\tf.UintSliceVarP(&p, name, \"\", value, usage)\n\treturn &p\n}\n\n// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc (f *FlagSet) UintSliceP(name, shorthand string, value []uint, usage string) *[]uint {\n\tp := []uint{}\n\tf.UintSliceVarP(&p, name, shorthand, value, usage)\n\treturn &p\n}\n\n// UintSlice defines a []uint flag with specified name, default value, and usage string.\n// The return value is the address of a []uint variable that stores the value of the flag.\nfunc UintSlice(name string, value []uint, usage string) *[]uint {\n\treturn CommandLine.UintSliceP(name, \"\", value, usage)\n}\n\n// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash.\nfunc UintSliceP(name, shorthand string, value []uint, usage string) *[]uint {\n\treturn CommandLine.UintSliceP(name, shorthand, value, usage)\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/LICENSE",
    "content": "Copyright (c) 2017 The Bazel Authors.  All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\n   notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\n   notice, this list of conditions and the following disclaimer in the\n   documentation and/or other materials provided with the\n   distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n   contributors may be used to endorse or promote products derived\n   from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/go.starlark.net/internal/compile/compile.go",
    "content": "// Package compile defines the Starlark bytecode compiler.\n// It is an internal package of the Starlark interpreter and is not directly accessible to clients.\n//\n// The compiler generates byte code with optional uint32 operands for a\n// virtual machine with the following components:\n//   - a program counter, which is an index into the byte code array.\n//   - an operand stack, whose maximum size is computed for each function by the compiler.\n//   - an stack of active iterators.\n//   - an array of local variables.\n//     The number of local variables and their indices are computed by the resolver.\n//     Locals (possibly including parameters) that are shared with nested functions\n//     are 'cells': their locals array slot will contain a value of type 'cell',\n//     an indirect value in a box that is explicitly read/updated by instructions.\n//   - an array of free variables, for nested functions.\n//     Free variables are a subset of the ancestors' cell variables.\n//     As with locals and cells, these are computed by the resolver.\n//   - an array of global variables, shared among all functions in the same module.\n//     All elements are initially nil.\n//   - two maps of predeclared and universal identifiers.\n//\n// Each function has a line number table that maps each program counter\n// offset to a source position, including the column number.\n//\n// Operands, logically uint32s, are encoded using little-endian 7-bit\n// varints, the top bit indicating that more bytes follow.\npackage compile // import \"go.starlark.net/internal/compile\"\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"strings\"\n\t\"sync\"\n\n\t\"go.starlark.net/resolve\"\n\t\"go.starlark.net/syntax\"\n)\n\n// Disassemble causes the assembly code for each function\n// to be printed to stderr as it is generated.\nvar Disassemble = false\n\nconst debug = false // make code generation verbose, for debugging the compiler\n\n// Increment this to force recompilation of saved bytecode files.\nconst Version = 14\n\ntype Opcode uint8\n\n// \"x DUP x x\" is a \"stack picture\" that describes the state of the\n// stack before and after execution of the instruction.\n//\n// OP<index> indicates an immediate operand that is an index into the\n// specified table: locals, names, freevars, constants.\nconst (\n\tNOP Opcode = iota // - NOP -\n\n\t// stack operations\n\tDUP  //   x DUP x x\n\tDUP2 // x y DUP2 x y x y\n\tPOP  //   x POP -\n\tEXCH // x y EXCH y x\n\n\t// binary comparisons\n\t// (order must match Token)\n\tLT\n\tGT\n\tGE\n\tLE\n\tEQL\n\tNEQ\n\n\t// binary arithmetic\n\t// (order must match Token)\n\tPLUS\n\tMINUS\n\tSTAR\n\tSLASH\n\tSLASHSLASH\n\tPERCENT\n\tAMP\n\tPIPE\n\tCIRCUMFLEX\n\tLTLT\n\tGTGT\n\n\tIN\n\n\t// unary operators\n\tUPLUS  // x UPLUS x\n\tUMINUS // x UMINUS -x\n\tTILDE  // x TILDE ~x\n\n\tNONE      // - NONE None\n\tTRUE      // - TRUE True\n\tFALSE     // - FALSE False\n\tMANDATORY // - MANDATORY Mandatory\t     [sentinel value for required kwonly args]\n\n\tITERPUSH     //       iterable ITERPUSH     -  [pushes the iterator stack]\n\tITERPOP      //              - ITERPOP      -    [pops the iterator stack]\n\tNOT          //          value NOT          bool\n\tRETURN       //          value RETURN       -\n\tSETINDEX     //        a i new SETINDEX     -\n\tINDEX        //            a i INDEX        elem\n\tSETDICT      // dict key value SETDICT      -\n\tSETDICTUNIQ  // dict key value SETDICTUNIQ  -\n\tAPPEND       //      list elem APPEND       -\n\tSLICE        //   x lo hi step SLICE        slice\n\tINPLACE_ADD  //            x y INPLACE_ADD  z      where z is x+y or x.extend(y)\n\tINPLACE_PIPE //            x y INPLACE_PIPE z      where z is x|y\n\tMAKEDICT     //              - MAKEDICT     dict\n\n\t// --- opcodes with an argument must go below this line ---\n\n\t// control flow\n\tJMP     //            - JMP<addr>     -\n\tCJMP    //         cond CJMP<addr>    -\n\tITERJMP //            - ITERJMP<addr> elem   (and fall through) [acts on topmost iterator]\n\t//       or:          - ITERJMP<addr> -      (and jump)\n\n\tCONSTANT     //                 - CONSTANT<constant>  value\n\tMAKETUPLE    //         x1 ... xn MAKETUPLE<n>        tuple\n\tMAKELIST     //         x1 ... xn MAKELIST<n>         list\n\tMAKEFUNC     // defaults+freevars MAKEFUNC<func>      fn\n\tLOAD         //   from1 ... fromN module LOAD<n>      v1 ... vN\n\tSETLOCAL     //             value SETLOCAL<local>     -\n\tSETGLOBAL    //             value SETGLOBAL<global>   -\n\tLOCAL        //                 - LOCAL<local>        value\n\tFREE         //                 - FREE<freevar>       cell\n\tFREECELL     //                 - FREECELL<freevar>   value       (content of FREE cell)\n\tLOCALCELL    //                 - LOCALCELL<local>    value       (content of LOCAL cell)\n\tSETLOCALCELL //             value SETLOCALCELL<local> -           (set content of LOCAL cell)\n\tGLOBAL       //                 - GLOBAL<global>      value\n\tPREDECLARED  //                 - PREDECLARED<name>   value\n\tUNIVERSAL    //                 - UNIVERSAL<name>     value\n\tATTR         //                 x ATTR<name>          y           y = x.name\n\tSETFIELD     //               x y SETFIELD<name>      -           x.name = y\n\tUNPACK       //          iterable UNPACK<n>           vn ... v1\n\n\t// n>>8 is #positional args and n&0xff is #named args (pairs).\n\tCALL        // fn positional named                CALL<n>        result\n\tCALL_VAR    // fn positional named *args          CALL_VAR<n>    result\n\tCALL_KW     // fn positional named       **kwargs CALL_KW<n>     result\n\tCALL_VAR_KW // fn positional named *args **kwargs CALL_VAR_KW<n> result\n\n\tOpcodeArgMin = JMP\n\tOpcodeMax    = CALL_VAR_KW\n)\n\n// TODO(adonovan): add dynamic checks for missing opcodes in the tables below.\n\nvar opcodeNames = [...]string{\n\tAMP:          \"amp\",\n\tAPPEND:       \"append\",\n\tATTR:         \"attr\",\n\tCALL:         \"call\",\n\tCALL_KW:      \"call_kw \",\n\tCALL_VAR:     \"call_var\",\n\tCALL_VAR_KW:  \"call_var_kw\",\n\tCIRCUMFLEX:   \"circumflex\",\n\tCJMP:         \"cjmp\",\n\tCONSTANT:     \"constant\",\n\tDUP2:         \"dup2\",\n\tDUP:          \"dup\",\n\tEQL:          \"eql\",\n\tEXCH:         \"exch\",\n\tFALSE:        \"false\",\n\tFREE:         \"free\",\n\tFREECELL:     \"freecell\",\n\tGE:           \"ge\",\n\tGLOBAL:       \"global\",\n\tGT:           \"gt\",\n\tGTGT:         \"gtgt\",\n\tIN:           \"in\",\n\tINDEX:        \"index\",\n\tINPLACE_ADD:  \"inplace_add\",\n\tINPLACE_PIPE: \"inplace_pipe\",\n\tITERJMP:      \"iterjmp\",\n\tITERPOP:      \"iterpop\",\n\tITERPUSH:     \"iterpush\",\n\tJMP:          \"jmp\",\n\tLE:           \"le\",\n\tLOAD:         \"load\",\n\tLOCAL:        \"local\",\n\tLOCALCELL:    \"localcell\",\n\tLT:           \"lt\",\n\tLTLT:         \"ltlt\",\n\tMAKEDICT:     \"makedict\",\n\tMAKEFUNC:     \"makefunc\",\n\tMAKELIST:     \"makelist\",\n\tMAKETUPLE:    \"maketuple\",\n\tMANDATORY:    \"mandatory\",\n\tMINUS:        \"minus\",\n\tNEQ:          \"neq\",\n\tNONE:         \"none\",\n\tNOP:          \"nop\",\n\tNOT:          \"not\",\n\tPERCENT:      \"percent\",\n\tPIPE:         \"pipe\",\n\tPLUS:         \"plus\",\n\tPOP:          \"pop\",\n\tPREDECLARED:  \"predeclared\",\n\tRETURN:       \"return\",\n\tSETDICT:      \"setdict\",\n\tSETDICTUNIQ:  \"setdictuniq\",\n\tSETFIELD:     \"setfield\",\n\tSETGLOBAL:    \"setglobal\",\n\tSETINDEX:     \"setindex\",\n\tSETLOCAL:     \"setlocal\",\n\tSETLOCALCELL: \"setlocalcell\",\n\tSLASH:        \"slash\",\n\tSLASHSLASH:   \"slashslash\",\n\tSLICE:        \"slice\",\n\tSTAR:         \"star\",\n\tTILDE:        \"tilde\",\n\tTRUE:         \"true\",\n\tUMINUS:       \"uminus\",\n\tUNIVERSAL:    \"universal\",\n\tUNPACK:       \"unpack\",\n\tUPLUS:        \"uplus\",\n}\n\nconst variableStackEffect = 0x7f\n\n// stackEffect records the effect on the size of the operand stack of\n// each kind of instruction. For some instructions this requires computation.\nvar stackEffect = [...]int8{\n\tAMP:          -1,\n\tAPPEND:       -2,\n\tATTR:         0,\n\tCALL:         variableStackEffect,\n\tCALL_KW:      variableStackEffect,\n\tCALL_VAR:     variableStackEffect,\n\tCALL_VAR_KW:  variableStackEffect,\n\tCIRCUMFLEX:   -1,\n\tCJMP:         -1,\n\tCONSTANT:     +1,\n\tDUP2:         +2,\n\tDUP:          +1,\n\tEQL:          -1,\n\tFALSE:        +1,\n\tFREE:         +1,\n\tFREECELL:     +1,\n\tGE:           -1,\n\tGLOBAL:       +1,\n\tGT:           -1,\n\tGTGT:         -1,\n\tIN:           -1,\n\tINDEX:        -1,\n\tINPLACE_ADD:  -1,\n\tINPLACE_PIPE: -1,\n\tITERJMP:      variableStackEffect,\n\tITERPOP:      0,\n\tITERPUSH:     -1,\n\tJMP:          0,\n\tLE:           -1,\n\tLOAD:         -1,\n\tLOCAL:        +1,\n\tLOCALCELL:    +1,\n\tLT:           -1,\n\tLTLT:         -1,\n\tMAKEDICT:     +1,\n\tMAKEFUNC:     0,\n\tMAKELIST:     variableStackEffect,\n\tMAKETUPLE:    variableStackEffect,\n\tMANDATORY:    +1,\n\tMINUS:        -1,\n\tNEQ:          -1,\n\tNONE:         +1,\n\tNOP:          0,\n\tNOT:          0,\n\tPERCENT:      -1,\n\tPIPE:         -1,\n\tPLUS:         -1,\n\tPOP:          -1,\n\tPREDECLARED:  +1,\n\tRETURN:       -1,\n\tSETLOCALCELL: -1,\n\tSETDICT:      -3,\n\tSETDICTUNIQ:  -3,\n\tSETFIELD:     -2,\n\tSETGLOBAL:    -1,\n\tSETINDEX:     -3,\n\tSETLOCAL:     -1,\n\tSLASH:        -1,\n\tSLASHSLASH:   -1,\n\tSLICE:        -3,\n\tSTAR:         -1,\n\tTRUE:         +1,\n\tUMINUS:       0,\n\tUNIVERSAL:    +1,\n\tUNPACK:       variableStackEffect,\n\tUPLUS:        0,\n}\n\nfunc (op Opcode) String() string {\n\tif op < OpcodeMax {\n\t\tif name := opcodeNames[op]; name != \"\" {\n\t\t\treturn name\n\t\t}\n\t}\n\treturn fmt.Sprintf(\"illegal op (%d)\", op)\n}\n\n// A Program is a Starlark file in executable form.\n//\n// Programs are serialized by the Program.Encode method,\n// which must be updated whenever this declaration is changed.\ntype Program struct {\n\tLoads     []Binding     // name (really, string) and position of each load stmt\n\tNames     []string      // names of attributes and predeclared variables\n\tConstants []interface{} // = string | int64 | float64 | *big.Int | Bytes\n\tFunctions []*Funcode\n\tGlobals   []Binding // for error messages and tracing\n\tToplevel  *Funcode  // module initialization function\n\tRecursion bool      // disable recursion check for functions in this file\n}\n\n// The type of a bytes literal value, to distinguish from text string.\ntype Bytes string\n\n// A Funcode is the code of a compiled Starlark function.\n//\n// Funcodes are serialized by the encoder.function method,\n// which must be updated whenever this declaration is changed.\ntype Funcode struct {\n\tProg                  *Program\n\tPos                   syntax.Position // position of def or lambda token\n\tName                  string          // name of this function\n\tDoc                   string          // docstring of this function\n\tCode                  []byte          // the byte code\n\tpclinetab             []uint16        // mapping from pc to linenum\n\tLocals                []Binding       // locals, parameters first\n\tCells                 []int           // indices of Locals that require cells\n\tFreevars              []Binding       // for tracing\n\tMaxStack              int\n\tNumParams             int\n\tNumKwonlyParams       int\n\tHasVarargs, HasKwargs bool\n\n\t// -- transient state --\n\n\tlntOnce sync.Once\n\tlnt     []pclinecol // decoded line number table\n}\n\ntype pclinecol struct {\n\tpc        uint32\n\tline, col int32\n}\n\n// A Binding is the name and position of a binding identifier.\ntype Binding struct {\n\tName string\n\tPos  syntax.Position\n}\n\n// A pcomp holds the compiler state for a Program.\ntype pcomp struct {\n\tprog *Program // what we're building\n\n\tnames     map[string]uint32\n\tconstants map[interface{}]uint32\n\tfunctions map[*Funcode]uint32\n}\n\n// An fcomp holds the compiler state for a Funcode.\ntype fcomp struct {\n\tfn *Funcode // what we're building\n\n\tpcomp *pcomp\n\tpos   syntax.Position // current position of generated code\n\tloops []loop\n\tblock *block\n}\n\ntype loop struct {\n\tbreak_, continue_ *block\n}\n\ntype block struct {\n\tinsns []insn\n\n\t// If the last insn is a RETURN, jmp and cjmp are nil.\n\t// If the last insn is a CJMP or ITERJMP,\n\t//  cjmp and jmp are the \"true\" and \"false\" successors.\n\t// Otherwise, jmp is the sole successor.\n\tjmp, cjmp *block\n\n\tinitialstack int // for stack depth computation\n\n\t// Used during encoding\n\tindex int // -1 => not encoded yet\n\taddr  uint32\n}\n\ntype insn struct {\n\top        Opcode\n\targ       uint32\n\tline, col int32\n}\n\n// Position returns the source position for program counter pc.\nfunc (fn *Funcode) Position(pc uint32) syntax.Position {\n\tfn.lntOnce.Do(fn.decodeLNT)\n\n\t// Binary search to find last LNT entry not greater than pc.\n\t// To avoid dynamic dispatch, this is a specialization of\n\t// sort.Search using this predicate:\n\t//   !(i < len(fn.lnt)-1 && fn.lnt[i+1].pc <= pc)\n\tn := len(fn.lnt)\n\ti, j := 0, n\n\tfor i < j {\n\t\th := int(uint(i+j) >> 1)\n\t\tif !(h >= n-1 || fn.lnt[h+1].pc > pc) {\n\t\t\ti = h + 1\n\t\t} else {\n\t\t\tj = h\n\t\t}\n\t}\n\n\tvar line, col int32\n\tif i < n {\n\t\tline = fn.lnt[i].line\n\t\tcol = fn.lnt[i].col\n\t}\n\n\tpos := fn.Pos // copy the (annoyingly inaccessible) filename\n\tpos.Col = col\n\tpos.Line = line\n\treturn pos\n}\n\n// decodeLNT decodes the line number table and populates fn.lnt.\n// It is called at most once.\nfunc (fn *Funcode) decodeLNT() {\n\t// Conceptually the table contains rows of the form\n\t// (pc uint32, line int32, col int32), sorted by pc.\n\t// We use a delta encoding, since the differences\n\t// between successive pc, line, and column values\n\t// are typically small and positive (though line and\n\t// especially column differences may be negative).\n\t// The delta encoding starts from\n\t// {pc: 0, line: fn.Pos.Line, col: fn.Pos.Col}.\n\t//\n\t// Each entry is packed into one or more 16-bit values:\n\t//    Δpc        uint4\n\t//    Δline      int5\n\t//    Δcol       int6\n\t//    incomplete uint1\n\t// The top 4 bits are the unsigned delta pc.\n\t// The next 5 bits are the signed line number delta.\n\t// The next 6 bits are the signed column number delta.\n\t// The bottom bit indicates that more rows follow because\n\t// one of the deltas was maxed out.\n\t// These field widths were chosen from a sample of real programs,\n\t// and allow >97% of rows to be encoded in a single uint16.\n\n\tfn.lnt = make([]pclinecol, 0, len(fn.pclinetab)) // a minor overapproximation\n\tentry := pclinecol{\n\t\tpc:   0,\n\t\tline: fn.Pos.Line,\n\t\tcol:  fn.Pos.Col,\n\t}\n\tfor _, x := range fn.pclinetab {\n\t\tentry.pc += uint32(x) >> 12\n\t\tentry.line += int32((int16(x) << 4) >> (16 - 5)) // sign extend Δline\n\t\tentry.col += int32((int16(x) << 9) >> (16 - 6))  // sign extend Δcol\n\t\tif (x & 1) == 0 {\n\t\t\tfn.lnt = append(fn.lnt, entry)\n\t\t}\n\t}\n}\n\n// bindings converts resolve.Bindings to compiled form.\nfunc bindings(bindings []*resolve.Binding) []Binding {\n\tres := make([]Binding, len(bindings))\n\tfor i, bind := range bindings {\n\t\tres[i].Name = bind.First.Name\n\t\tres[i].Pos = bind.First.NamePos\n\t}\n\treturn res\n}\n\n// Expr compiles an expression to a program whose toplevel function evaluates it.\n// The options must be consistent with those used when parsing expr.\nfunc Expr(opts *syntax.FileOptions, expr syntax.Expr, name string, locals []*resolve.Binding) *Program {\n\tpos := syntax.Start(expr)\n\tstmts := []syntax.Stmt{&syntax.ReturnStmt{Result: expr}}\n\treturn File(opts, stmts, pos, name, locals, nil)\n}\n\n// File compiles the statements of a file into a program.\n// The options must be consistent with those used when parsing stmts.\nfunc File(opts *syntax.FileOptions, stmts []syntax.Stmt, pos syntax.Position, name string, locals, globals []*resolve.Binding) *Program {\n\tpcomp := &pcomp{\n\t\tprog: &Program{\n\t\t\tGlobals:   bindings(globals),\n\t\t\tRecursion: opts.Recursion,\n\t\t},\n\t\tnames:     make(map[string]uint32),\n\t\tconstants: make(map[interface{}]uint32),\n\t\tfunctions: make(map[*Funcode]uint32),\n\t}\n\tpcomp.prog.Toplevel = pcomp.function(name, pos, stmts, locals, nil)\n\n\treturn pcomp.prog\n}\n\nfunc (pcomp *pcomp) function(name string, pos syntax.Position, stmts []syntax.Stmt, locals, freevars []*resolve.Binding) *Funcode {\n\tfcomp := &fcomp{\n\t\tpcomp: pcomp,\n\t\tpos:   pos,\n\t\tfn: &Funcode{\n\t\t\tProg:     pcomp.prog,\n\t\t\tPos:      pos,\n\t\t\tName:     name,\n\t\t\tDoc:      docStringFromBody(stmts),\n\t\t\tLocals:   bindings(locals),\n\t\t\tFreevars: bindings(freevars),\n\t\t},\n\t}\n\n\t// Record indices of locals that require cells.\n\tfor i, local := range locals {\n\t\tif local.Scope == resolve.Cell {\n\t\t\tfcomp.fn.Cells = append(fcomp.fn.Cells, i)\n\t\t}\n\t}\n\n\tif debug {\n\t\tfmt.Fprintf(os.Stderr, \"start function(%s @ %s)\\n\", name, pos)\n\t}\n\n\t// Convert AST to a CFG of instructions.\n\tentry := fcomp.newBlock()\n\tfcomp.block = entry\n\tfcomp.stmts(stmts)\n\tif fcomp.block != nil {\n\t\tfcomp.emit(NONE)\n\t\tfcomp.emit(RETURN)\n\t}\n\n\tvar oops bool // something bad happened\n\n\tsetinitialstack := func(b *block, depth int) {\n\t\tif b.initialstack == -1 {\n\t\t\tb.initialstack = depth\n\t\t} else if b.initialstack != depth {\n\t\t\tfmt.Fprintf(os.Stderr, \"%d: setinitialstack: depth mismatch: %d vs %d\\n\",\n\t\t\t\tb.index, b.initialstack, depth)\n\t\t\toops = true\n\t\t}\n\t}\n\n\t// Linearize the CFG:\n\t// compute order, address, and initial\n\t// stack depth of each reachable block.\n\tvar pc uint32\n\tvar blocks []*block\n\tvar maxstack int\n\tvar visit func(b *block)\n\tvisit = func(b *block) {\n\t\tif b.index >= 0 {\n\t\t\treturn // already visited\n\t\t}\n\t\tb.index = len(blocks)\n\t\tb.addr = pc\n\t\tblocks = append(blocks, b)\n\n\t\tstack := b.initialstack\n\t\tif debug {\n\t\t\tfmt.Fprintf(os.Stderr, \"%s block %d: (stack = %d)\\n\", name, b.index, stack)\n\t\t}\n\t\tvar cjmpAddr *uint32\n\t\tvar isiterjmp int\n\t\tfor i, insn := range b.insns {\n\t\t\tpc++\n\n\t\t\t// Compute size of argument.\n\t\t\tif insn.op >= OpcodeArgMin {\n\t\t\t\tswitch insn.op {\n\t\t\t\tcase ITERJMP:\n\t\t\t\t\tisiterjmp = 1\n\t\t\t\t\tfallthrough\n\t\t\t\tcase CJMP:\n\t\t\t\t\tcjmpAddr = &b.insns[i].arg\n\t\t\t\t\tpc += 4\n\t\t\t\tdefault:\n\t\t\t\t\tpc += uint32(argLen(insn.arg))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Compute effect on stack.\n\t\t\tse := insn.stackeffect()\n\t\t\tif debug {\n\t\t\t\tfmt.Fprintln(os.Stderr, \"\\t\", insn.op, stack, stack+se)\n\t\t\t}\n\t\t\tstack += se\n\t\t\tif stack < 0 {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"After pc=%d: stack underflow\\n\", pc)\n\t\t\t\toops = true\n\t\t\t}\n\t\t\tif stack+isiterjmp > maxstack {\n\t\t\t\tmaxstack = stack + isiterjmp\n\t\t\t}\n\t\t}\n\n\t\tif debug {\n\t\t\tfmt.Fprintf(os.Stderr, \"successors of block %d (start=%d):\\n\",\n\t\t\t\tb.addr, b.index)\n\t\t\tif b.jmp != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"jmp to %d\\n\", b.jmp.index)\n\t\t\t}\n\t\t\tif b.cjmp != nil {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"cjmp to %d\\n\", b.cjmp.index)\n\t\t\t}\n\t\t}\n\n\t\t// Place the jmp block next.\n\t\tif b.jmp != nil {\n\t\t\t// jump threading (empty cycles are impossible)\n\t\t\tfor b.jmp.insns == nil {\n\t\t\t\tb.jmp = b.jmp.jmp\n\t\t\t}\n\n\t\t\tsetinitialstack(b.jmp, stack+isiterjmp)\n\t\t\tif b.jmp.index < 0 {\n\t\t\t\t// Successor is not yet visited:\n\t\t\t\t// place it next and fall through.\n\t\t\t\tvisit(b.jmp)\n\t\t\t} else {\n\t\t\t\t// Successor already visited;\n\t\t\t\t// explicit backward jump required.\n\t\t\t\tpc += 5\n\t\t\t}\n\t\t}\n\n\t\t// Then the cjmp block.\n\t\tif b.cjmp != nil {\n\t\t\t// jump threading (empty cycles are impossible)\n\t\t\tfor b.cjmp.insns == nil {\n\t\t\t\tb.cjmp = b.cjmp.jmp\n\t\t\t}\n\n\t\t\tsetinitialstack(b.cjmp, stack)\n\t\t\tvisit(b.cjmp)\n\n\t\t\t// Patch the CJMP/ITERJMP, if present.\n\t\t\tif cjmpAddr != nil {\n\t\t\t\t*cjmpAddr = b.cjmp.addr\n\t\t\t}\n\t\t}\n\t}\n\tsetinitialstack(entry, 0)\n\tvisit(entry)\n\n\tfn := fcomp.fn\n\tfn.MaxStack = maxstack\n\n\t// Emit bytecode (and position table).\n\tif Disassemble {\n\t\tfmt.Fprintf(os.Stderr, \"Function %s: (%d blocks, %d bytes)\\n\", name, len(blocks), pc)\n\t}\n\tfcomp.generate(blocks, pc)\n\n\tif debug {\n\t\tfmt.Fprintf(os.Stderr, \"code=%d maxstack=%d\\n\", fn.Code, fn.MaxStack)\n\t}\n\n\t// Don't panic until we've completed printing of the function.\n\tif oops {\n\t\tpanic(\"internal error\")\n\t}\n\n\tif debug {\n\t\tfmt.Fprintf(os.Stderr, \"end function(%s @ %s)\\n\", name, pos)\n\t}\n\n\treturn fn\n}\n\nfunc docStringFromBody(body []syntax.Stmt) string {\n\tif len(body) == 0 {\n\t\treturn \"\"\n\t}\n\texpr, ok := body[0].(*syntax.ExprStmt)\n\tif !ok {\n\t\treturn \"\"\n\t}\n\tlit, ok := expr.X.(*syntax.Literal)\n\tif !ok {\n\t\treturn \"\"\n\t}\n\tif lit.Token != syntax.STRING {\n\t\treturn \"\"\n\t}\n\treturn lit.Value.(string)\n}\n\nfunc (insn *insn) stackeffect() int {\n\tse := int(stackEffect[insn.op])\n\tif se == variableStackEffect {\n\t\targ := int(insn.arg)\n\t\tswitch insn.op {\n\t\tcase CALL, CALL_KW, CALL_VAR, CALL_VAR_KW:\n\t\t\tse = -int(2*(insn.arg&0xff) + insn.arg>>8)\n\t\t\tif insn.op != CALL {\n\t\t\t\tse--\n\t\t\t}\n\t\t\tif insn.op == CALL_VAR_KW {\n\t\t\t\tse--\n\t\t\t}\n\t\tcase ITERJMP:\n\t\t\t// Stack effect differs by successor:\n\t\t\t// +1 for jmp/false/ok\n\t\t\t//  0 for cjmp/true/exhausted\n\t\t\t// Handled specially in caller.\n\t\t\tse = 0\n\t\tcase MAKELIST, MAKETUPLE:\n\t\t\tse = 1 - arg\n\t\tcase UNPACK:\n\t\t\tse = arg - 1\n\t\tdefault:\n\t\t\tpanic(insn.op)\n\t\t}\n\t}\n\treturn se\n}\n\n// generate emits the linear instruction stream from the CFG,\n// and builds the PC-to-line number table.\nfunc (fcomp *fcomp) generate(blocks []*block, codelen uint32) {\n\tcode := make([]byte, 0, codelen)\n\tvar pclinetab []uint16\n\tprev := pclinecol{\n\t\tpc:   0,\n\t\tline: fcomp.fn.Pos.Line,\n\t\tcol:  fcomp.fn.Pos.Col,\n\t}\n\n\tfor _, b := range blocks {\n\t\tif Disassemble {\n\t\t\tfmt.Fprintf(os.Stderr, \"%d:\\n\", b.index)\n\t\t}\n\t\tpc := b.addr\n\t\tfor _, insn := range b.insns {\n\t\t\tif insn.line != 0 {\n\t\t\t\t// Instruction has a source position.  Delta-encode it.\n\t\t\t\t// See Funcode.Position for the encoding.\n\t\t\t\tfor {\n\t\t\t\t\tvar incomplete uint16\n\n\t\t\t\t\t// Δpc, uint4\n\t\t\t\t\tdeltapc := pc - prev.pc\n\t\t\t\t\tif deltapc > 0x0f {\n\t\t\t\t\t\tdeltapc = 0x0f\n\t\t\t\t\t\tincomplete = 1\n\t\t\t\t\t}\n\t\t\t\t\tprev.pc += deltapc\n\n\t\t\t\t\t// Δline, int5\n\t\t\t\t\tdeltaline, ok := clip(insn.line-prev.line, -0x10, 0x0f)\n\t\t\t\t\tif !ok {\n\t\t\t\t\t\tincomplete = 1\n\t\t\t\t\t}\n\t\t\t\t\tprev.line += deltaline\n\n\t\t\t\t\t// Δcol, int6\n\t\t\t\t\tdeltacol, ok := clip(insn.col-prev.col, -0x20, 0x1f)\n\t\t\t\t\tif !ok {\n\t\t\t\t\t\tincomplete = 1\n\t\t\t\t\t}\n\t\t\t\t\tprev.col += deltacol\n\n\t\t\t\t\tentry := uint16(deltapc<<12) | uint16(deltaline&0x1f)<<7 | uint16(deltacol&0x3f)<<1 | incomplete\n\t\t\t\t\tpclinetab = append(pclinetab, entry)\n\t\t\t\t\tif incomplete == 0 {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif Disassemble {\n\t\t\t\t\tfmt.Fprintf(os.Stderr, \"\\t\\t\\t\\t\\t; %s:%d:%d\\n\",\n\t\t\t\t\t\tfilepath.Base(fcomp.fn.Pos.Filename()), insn.line, insn.col)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif Disassemble {\n\t\t\t\tPrintOp(fcomp.fn, pc, insn.op, insn.arg)\n\t\t\t}\n\t\t\tcode = append(code, byte(insn.op))\n\t\t\tpc++\n\t\t\tif insn.op >= OpcodeArgMin {\n\t\t\t\tif insn.op == CJMP || insn.op == ITERJMP {\n\t\t\t\t\tcode = addUint32(code, insn.arg, 4) // pad arg to 4 bytes\n\t\t\t\t} else {\n\t\t\t\t\tcode = addUint32(code, insn.arg, 0)\n\t\t\t\t}\n\t\t\t\tpc = uint32(len(code))\n\t\t\t}\n\t\t}\n\n\t\tif b.jmp != nil && b.jmp.index != b.index+1 {\n\t\t\taddr := b.jmp.addr\n\t\t\tif Disassemble {\n\t\t\t\tfmt.Fprintf(os.Stderr, \"\\t%d\\tjmp\\t\\t%d\\t; block %d\\n\",\n\t\t\t\t\tpc, addr, b.jmp.index)\n\t\t\t}\n\t\t\tcode = append(code, byte(JMP))\n\t\t\tcode = addUint32(code, addr, 4)\n\t\t}\n\t}\n\tif len(code) != int(codelen) {\n\t\tpanic(\"internal error: wrong code length\")\n\t}\n\n\tfcomp.fn.pclinetab = pclinetab\n\tfcomp.fn.Code = code\n}\n\n// clip returns the value nearest x in the range [min...max],\n// and whether it equals x.\nfunc clip(x, min, max int32) (int32, bool) {\n\tif x > max {\n\t\treturn max, false\n\t} else if x < min {\n\t\treturn min, false\n\t} else {\n\t\treturn x, true\n\t}\n}\n\n// addUint32 encodes x as 7-bit little-endian varint.\n// TODO(adonovan): opt: steal top two bits of opcode\n// to encode the number of complete bytes that follow.\nfunc addUint32(code []byte, x uint32, min int) []byte {\n\tend := len(code) + min\n\tfor x >= 0x80 {\n\t\tcode = append(code, byte(x)|0x80)\n\t\tx >>= 7\n\t}\n\tcode = append(code, byte(x))\n\t// Pad the operand with NOPs to exactly min bytes.\n\tfor len(code) < end {\n\t\tcode = append(code, byte(NOP))\n\t}\n\treturn code\n}\n\nfunc argLen(x uint32) int {\n\tn := 0\n\tfor x >= 0x80 {\n\t\tn++\n\t\tx >>= 7\n\t}\n\treturn n + 1\n}\n\n// PrintOp prints an instruction.\n// It is provided for debugging.\nfunc PrintOp(fn *Funcode, pc uint32, op Opcode, arg uint32) {\n\tif op < OpcodeArgMin {\n\t\tfmt.Fprintf(os.Stderr, \"\\t%d\\t%s\\n\", pc, op)\n\t\treturn\n\t}\n\n\tvar comment string\n\tswitch op {\n\tcase CONSTANT:\n\t\tswitch x := fn.Prog.Constants[arg].(type) {\n\t\tcase string:\n\t\t\tcomment = strconv.Quote(x)\n\t\tcase Bytes:\n\t\t\tcomment = \"b\" + strconv.Quote(string(x))\n\t\tdefault:\n\t\t\tcomment = fmt.Sprint(x)\n\t\t}\n\tcase MAKEFUNC:\n\t\tcomment = fn.Prog.Functions[arg].Name\n\tcase SETLOCAL, LOCAL:\n\t\tcomment = fn.Locals[arg].Name\n\tcase SETGLOBAL, GLOBAL:\n\t\tcomment = fn.Prog.Globals[arg].Name\n\tcase ATTR, SETFIELD, PREDECLARED, UNIVERSAL:\n\t\tcomment = fn.Prog.Names[arg]\n\tcase FREE:\n\t\tcomment = fn.Freevars[arg].Name\n\tcase CALL, CALL_VAR, CALL_KW, CALL_VAR_KW:\n\t\tcomment = fmt.Sprintf(\"%d pos, %d named\", arg>>8, arg&0xff)\n\tdefault:\n\t\t// JMP, CJMP, ITERJMP, MAKETUPLE, MAKELIST, LOAD, UNPACK:\n\t\t// arg is just a number\n\t}\n\tvar buf bytes.Buffer\n\tfmt.Fprintf(&buf, \"\\t%d\\t%-10s\\t%d\", pc, op, arg)\n\tif comment != \"\" {\n\t\tfmt.Fprint(&buf, \"\\t; \", comment)\n\t}\n\tfmt.Fprintln(&buf)\n\tos.Stderr.Write(buf.Bytes())\n}\n\n// newBlock returns a new block.\nfunc (fcomp) newBlock() *block {\n\treturn &block{index: -1, initialstack: -1}\n}\n\n// emit emits an instruction to the current block.\nfunc (fcomp *fcomp) emit(op Opcode) {\n\tif op >= OpcodeArgMin {\n\t\tpanic(\"missing arg: \" + op.String())\n\t}\n\tinsn := insn{op: op, line: fcomp.pos.Line, col: fcomp.pos.Col}\n\tfcomp.block.insns = append(fcomp.block.insns, insn)\n\tfcomp.pos.Line = 0\n\tfcomp.pos.Col = 0\n}\n\n// emit1 emits an instruction with an immediate operand.\nfunc (fcomp *fcomp) emit1(op Opcode, arg uint32) {\n\tif op < OpcodeArgMin {\n\t\tpanic(\"unwanted arg: \" + op.String())\n\t}\n\tinsn := insn{op: op, arg: arg, line: fcomp.pos.Line, col: fcomp.pos.Col}\n\tfcomp.block.insns = append(fcomp.block.insns, insn)\n\tfcomp.pos.Line = 0\n\tfcomp.pos.Col = 0\n}\n\n// jump emits a jump to the specified block.\n// On return, the current block is unset.\nfunc (fcomp *fcomp) jump(b *block) {\n\tif b == fcomp.block {\n\t\tpanic(\"self-jump\") // unreachable: Starlark has no arbitrary looping constructs\n\t}\n\tfcomp.block.jmp = b\n\tfcomp.block = nil\n}\n\n// condjump emits a conditional jump (CJMP or ITERJMP)\n// to the specified true/false blocks.\n// (For ITERJMP, the cases are jmp/f/ok and cjmp/t/exhausted.)\n// On return, the current block is unset.\nfunc (fcomp *fcomp) condjump(op Opcode, t, f *block) {\n\tif !(op == CJMP || op == ITERJMP) {\n\t\tpanic(\"not a conditional jump: \" + op.String())\n\t}\n\tfcomp.emit1(op, 0) // fill in address later\n\tfcomp.block.cjmp = t\n\tfcomp.jump(f)\n}\n\n// nameIndex returns the index of the specified name\n// within the name pool, adding it if necessary.\nfunc (pcomp *pcomp) nameIndex(name string) uint32 {\n\tindex, ok := pcomp.names[name]\n\tif !ok {\n\t\tindex = uint32(len(pcomp.prog.Names))\n\t\tpcomp.names[name] = index\n\t\tpcomp.prog.Names = append(pcomp.prog.Names, name)\n\t}\n\treturn index\n}\n\n// constantIndex returns the index of the specified constant\n// within the constant pool, adding it if necessary.\nfunc (pcomp *pcomp) constantIndex(v interface{}) uint32 {\n\tindex, ok := pcomp.constants[v]\n\tif !ok {\n\t\tindex = uint32(len(pcomp.prog.Constants))\n\t\tpcomp.constants[v] = index\n\t\tpcomp.prog.Constants = append(pcomp.prog.Constants, v)\n\t}\n\treturn index\n}\n\n// functionIndex returns the index of the specified function\n// AST the nestedfun pool, adding it if necessary.\nfunc (pcomp *pcomp) functionIndex(fn *Funcode) uint32 {\n\tindex, ok := pcomp.functions[fn]\n\tif !ok {\n\t\tindex = uint32(len(pcomp.prog.Functions))\n\t\tpcomp.functions[fn] = index\n\t\tpcomp.prog.Functions = append(pcomp.prog.Functions, fn)\n\t}\n\treturn index\n}\n\n// string emits code to push the specified string.\nfunc (fcomp *fcomp) string(s string) {\n\tfcomp.emit1(CONSTANT, fcomp.pcomp.constantIndex(s))\n}\n\n// setPos sets the current source position.\n// It should be called prior to any operation that can fail dynamically.\n// All positions are assumed to belong to the same file.\nfunc (fcomp *fcomp) setPos(pos syntax.Position) {\n\tfcomp.pos = pos\n}\n\n// set emits code to store the top-of-stack value\n// to the specified local, cell, or global variable.\nfunc (fcomp *fcomp) set(id *syntax.Ident) {\n\tbind := id.Binding.(*resolve.Binding)\n\tswitch bind.Scope {\n\tcase resolve.Local:\n\t\tfcomp.emit1(SETLOCAL, uint32(bind.Index))\n\tcase resolve.Cell:\n\t\tfcomp.emit1(SETLOCALCELL, uint32(bind.Index))\n\tcase resolve.Global:\n\t\tfcomp.emit1(SETGLOBAL, uint32(bind.Index))\n\tdefault:\n\t\tlog.Panicf(\"%s: set(%s): not global/local/cell (%d)\", id.NamePos, id.Name, bind.Scope)\n\t}\n}\n\n// lookup emits code to push the value of the specified variable.\nfunc (fcomp *fcomp) lookup(id *syntax.Ident) {\n\tbind := id.Binding.(*resolve.Binding)\n\tif bind.Scope != resolve.Universal { // (universal lookup can't fail)\n\t\tfcomp.setPos(id.NamePos)\n\t}\n\tswitch bind.Scope {\n\tcase resolve.Local:\n\t\tfcomp.emit1(LOCAL, uint32(bind.Index))\n\tcase resolve.Free:\n\t\tfcomp.emit1(FREECELL, uint32(bind.Index))\n\tcase resolve.Cell:\n\t\tfcomp.emit1(LOCALCELL, uint32(bind.Index))\n\tcase resolve.Global:\n\t\tfcomp.emit1(GLOBAL, uint32(bind.Index))\n\tcase resolve.Predeclared:\n\t\tfcomp.emit1(PREDECLARED, fcomp.pcomp.nameIndex(id.Name))\n\tcase resolve.Universal:\n\t\tfcomp.emit1(UNIVERSAL, fcomp.pcomp.nameIndex(id.Name))\n\tdefault:\n\t\tlog.Panicf(\"%s: compiler.lookup(%s): scope = %d\", id.NamePos, id.Name, bind.Scope)\n\t}\n}\n\nfunc (fcomp *fcomp) stmts(stmts []syntax.Stmt) {\n\tfor _, stmt := range stmts {\n\t\tfcomp.stmt(stmt)\n\t}\n}\n\nfunc (fcomp *fcomp) stmt(stmt syntax.Stmt) {\n\tswitch stmt := stmt.(type) {\n\tcase *syntax.ExprStmt:\n\t\tif _, ok := stmt.X.(*syntax.Literal); ok {\n\t\t\t// Opt: don't compile doc comments only to pop them.\n\t\t\treturn\n\t\t}\n\t\tfcomp.expr(stmt.X)\n\t\tfcomp.emit(POP)\n\n\tcase *syntax.BranchStmt:\n\t\t// Resolver invariant: break/continue appear only within loops.\n\t\tswitch stmt.Token {\n\t\tcase syntax.PASS:\n\t\t\t// no-op\n\t\tcase syntax.BREAK:\n\t\t\tb := fcomp.loops[len(fcomp.loops)-1].break_\n\t\t\tfcomp.jump(b)\n\t\t\tfcomp.block = fcomp.newBlock() // dead code\n\t\tcase syntax.CONTINUE:\n\t\t\tb := fcomp.loops[len(fcomp.loops)-1].continue_\n\t\t\tfcomp.jump(b)\n\t\t\tfcomp.block = fcomp.newBlock() // dead code\n\t\t}\n\n\tcase *syntax.IfStmt:\n\t\t// Keep consistent with CondExpr.\n\t\tt := fcomp.newBlock()\n\t\tf := fcomp.newBlock()\n\t\tdone := fcomp.newBlock()\n\n\t\tfcomp.ifelse(stmt.Cond, t, f)\n\n\t\tfcomp.block = t\n\t\tfcomp.stmts(stmt.True)\n\t\tfcomp.jump(done)\n\n\t\tfcomp.block = f\n\t\tfcomp.stmts(stmt.False)\n\t\tfcomp.jump(done)\n\n\t\tfcomp.block = done\n\n\tcase *syntax.AssignStmt:\n\t\tswitch stmt.Op {\n\t\tcase syntax.EQ:\n\t\t\t// simple assignment: x = y\n\t\t\tfcomp.expr(stmt.RHS)\n\t\t\tfcomp.assign(stmt.OpPos, stmt.LHS)\n\n\t\tcase syntax.PLUS_EQ,\n\t\t\tsyntax.MINUS_EQ,\n\t\t\tsyntax.STAR_EQ,\n\t\t\tsyntax.SLASH_EQ,\n\t\t\tsyntax.SLASHSLASH_EQ,\n\t\t\tsyntax.PERCENT_EQ,\n\t\t\tsyntax.AMP_EQ,\n\t\t\tsyntax.PIPE_EQ,\n\t\t\tsyntax.CIRCUMFLEX_EQ,\n\t\t\tsyntax.LTLT_EQ,\n\t\t\tsyntax.GTGT_EQ:\n\t\t\t// augmented assignment: x += y\n\n\t\t\tvar set func()\n\n\t\t\t// Evaluate \"address\" of x exactly once to avoid duplicate side-effects.\n\t\t\tswitch lhs := unparen(stmt.LHS).(type) {\n\t\t\tcase *syntax.Ident:\n\t\t\t\t// x = ...\n\t\t\t\tfcomp.lookup(lhs)\n\t\t\t\tset = func() {\n\t\t\t\t\tfcomp.set(lhs)\n\t\t\t\t}\n\n\t\t\tcase *syntax.IndexExpr:\n\t\t\t\t// x[y] = ...\n\t\t\t\tfcomp.expr(lhs.X)\n\t\t\t\tfcomp.expr(lhs.Y)\n\t\t\t\tfcomp.emit(DUP2)\n\t\t\t\tfcomp.setPos(lhs.Lbrack)\n\t\t\t\tfcomp.emit(INDEX)\n\t\t\t\tset = func() {\n\t\t\t\t\tfcomp.setPos(lhs.Lbrack)\n\t\t\t\t\tfcomp.emit(SETINDEX)\n\t\t\t\t}\n\n\t\t\tcase *syntax.DotExpr:\n\t\t\t\t// x.f = ...\n\t\t\t\tfcomp.expr(lhs.X)\n\t\t\t\tfcomp.emit(DUP)\n\t\t\t\tname := fcomp.pcomp.nameIndex(lhs.Name.Name)\n\t\t\t\tfcomp.setPos(lhs.Dot)\n\t\t\t\tfcomp.emit1(ATTR, name)\n\t\t\t\tset = func() {\n\t\t\t\t\tfcomp.setPos(lhs.Dot)\n\t\t\t\t\tfcomp.emit1(SETFIELD, name)\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tpanic(lhs)\n\t\t\t}\n\n\t\t\tfcomp.expr(stmt.RHS)\n\n\t\t\t// In-place x+=y and x|=y have special semantics:\n\t\t\t// the resulting x aliases the original x.\n\t\t\tswitch stmt.Op {\n\t\t\tcase syntax.PLUS_EQ:\n\t\t\t\tfcomp.setPos(stmt.OpPos)\n\t\t\t\tfcomp.emit(INPLACE_ADD)\n\t\t\tcase syntax.PIPE_EQ:\n\t\t\t\tfcomp.setPos(stmt.OpPos)\n\t\t\t\tfcomp.emit(INPLACE_PIPE)\n\t\t\tdefault:\n\t\t\t\tfcomp.binop(stmt.OpPos, stmt.Op-syntax.PLUS_EQ+syntax.PLUS)\n\t\t\t}\n\t\t\tset()\n\t\t}\n\n\tcase *syntax.DefStmt:\n\t\tfcomp.function(stmt.Function.(*resolve.Function))\n\t\tfcomp.set(stmt.Name)\n\n\tcase *syntax.ForStmt:\n\t\t// Keep consistent with ForClause.\n\t\thead := fcomp.newBlock()\n\t\tbody := fcomp.newBlock()\n\t\ttail := fcomp.newBlock()\n\n\t\tfcomp.expr(stmt.X)\n\t\tfcomp.setPos(stmt.For)\n\t\tfcomp.emit(ITERPUSH)\n\t\tfcomp.jump(head)\n\n\t\tfcomp.block = head\n\t\tfcomp.condjump(ITERJMP, tail, body)\n\n\t\tfcomp.block = body\n\t\tfcomp.assign(stmt.For, stmt.Vars)\n\t\tfcomp.loops = append(fcomp.loops, loop{break_: tail, continue_: head})\n\t\tfcomp.stmts(stmt.Body)\n\t\tfcomp.loops = fcomp.loops[:len(fcomp.loops)-1]\n\t\tfcomp.jump(head)\n\n\t\tfcomp.block = tail\n\t\tfcomp.emit(ITERPOP)\n\n\tcase *syntax.WhileStmt:\n\t\thead := fcomp.newBlock()\n\t\tbody := fcomp.newBlock()\n\t\tdone := fcomp.newBlock()\n\n\t\tfcomp.jump(head)\n\t\tfcomp.block = head\n\t\tfcomp.ifelse(stmt.Cond, body, done)\n\n\t\tfcomp.block = body\n\t\tfcomp.loops = append(fcomp.loops, loop{break_: done, continue_: head})\n\t\tfcomp.stmts(stmt.Body)\n\t\tfcomp.loops = fcomp.loops[:len(fcomp.loops)-1]\n\t\tfcomp.jump(head)\n\n\t\tfcomp.block = done\n\n\tcase *syntax.ReturnStmt:\n\t\tif stmt.Result != nil {\n\t\t\tfcomp.expr(stmt.Result)\n\t\t} else {\n\t\t\tfcomp.emit(NONE)\n\t\t}\n\t\tfcomp.emit(RETURN)\n\t\tfcomp.block = fcomp.newBlock() // dead code\n\n\tcase *syntax.LoadStmt:\n\t\tfor i := range stmt.From {\n\t\t\tfcomp.string(stmt.From[i].Name)\n\t\t}\n\t\tmodule := stmt.Module.Value.(string)\n\t\tfcomp.pcomp.prog.Loads = append(fcomp.pcomp.prog.Loads, Binding{\n\t\t\tName: module,\n\t\t\tPos:  stmt.Module.TokenPos,\n\t\t})\n\t\tfcomp.string(module)\n\t\tfcomp.setPos(stmt.Load)\n\t\tfcomp.emit1(LOAD, uint32(len(stmt.From)))\n\t\tfor i := range stmt.To {\n\t\t\tfcomp.set(stmt.To[len(stmt.To)-1-i])\n\t\t}\n\n\tdefault:\n\t\tstart, _ := stmt.Span()\n\t\tlog.Panicf(\"%s: exec: unexpected statement %T\", start, stmt)\n\t}\n}\n\n// assign implements lhs = rhs for arbitrary expressions lhs.\n// RHS is on top of stack, consumed.\nfunc (fcomp *fcomp) assign(pos syntax.Position, lhs syntax.Expr) {\n\tswitch lhs := lhs.(type) {\n\tcase *syntax.ParenExpr:\n\t\t// (lhs) = rhs\n\t\tfcomp.assign(pos, lhs.X)\n\n\tcase *syntax.Ident:\n\t\t// x = rhs\n\t\tfcomp.set(lhs)\n\n\tcase *syntax.TupleExpr:\n\t\t// x, y = rhs\n\t\tfcomp.assignSequence(pos, lhs.List)\n\n\tcase *syntax.ListExpr:\n\t\t// [x, y] = rhs\n\t\tfcomp.assignSequence(pos, lhs.List)\n\n\tcase *syntax.IndexExpr:\n\t\t// x[y] = rhs\n\t\tfcomp.expr(lhs.X)\n\t\tfcomp.emit(EXCH)\n\t\tfcomp.expr(lhs.Y)\n\t\tfcomp.emit(EXCH)\n\t\tfcomp.setPos(lhs.Lbrack)\n\t\tfcomp.emit(SETINDEX)\n\n\tcase *syntax.DotExpr:\n\t\t// x.f = rhs\n\t\tfcomp.expr(lhs.X)\n\t\tfcomp.emit(EXCH)\n\t\tfcomp.setPos(lhs.Dot)\n\t\tfcomp.emit1(SETFIELD, fcomp.pcomp.nameIndex(lhs.Name.Name))\n\n\tdefault:\n\t\tpanic(lhs)\n\t}\n}\n\nfunc (fcomp *fcomp) assignSequence(pos syntax.Position, lhs []syntax.Expr) {\n\tfcomp.setPos(pos)\n\tfcomp.emit1(UNPACK, uint32(len(lhs)))\n\tfor i := range lhs {\n\t\tfcomp.assign(pos, lhs[i])\n\t}\n}\n\nfunc (fcomp *fcomp) expr(e syntax.Expr) {\n\tswitch e := e.(type) {\n\tcase *syntax.ParenExpr:\n\t\tfcomp.expr(e.X)\n\n\tcase *syntax.Ident:\n\t\tfcomp.lookup(e)\n\n\tcase *syntax.Literal:\n\t\t// e.Value is int64, float64, *bigInt, string\n\t\tv := e.Value\n\t\tif e.Token == syntax.BYTES {\n\t\t\tv = Bytes(v.(string))\n\t\t}\n\t\tfcomp.emit1(CONSTANT, fcomp.pcomp.constantIndex(v))\n\n\tcase *syntax.ListExpr:\n\t\tfor _, x := range e.List {\n\t\t\tfcomp.expr(x)\n\t\t}\n\t\tfcomp.emit1(MAKELIST, uint32(len(e.List)))\n\n\tcase *syntax.CondExpr:\n\t\t// Keep consistent with IfStmt.\n\t\tt := fcomp.newBlock()\n\t\tf := fcomp.newBlock()\n\t\tdone := fcomp.newBlock()\n\n\t\tfcomp.ifelse(e.Cond, t, f)\n\n\t\tfcomp.block = t\n\t\tfcomp.expr(e.True)\n\t\tfcomp.jump(done)\n\n\t\tfcomp.block = f\n\t\tfcomp.expr(e.False)\n\t\tfcomp.jump(done)\n\n\t\tfcomp.block = done\n\n\tcase *syntax.IndexExpr:\n\t\tfcomp.expr(e.X)\n\t\tfcomp.expr(e.Y)\n\t\tfcomp.setPos(e.Lbrack)\n\t\tfcomp.emit(INDEX)\n\n\tcase *syntax.SliceExpr:\n\t\tfcomp.setPos(e.Lbrack)\n\t\tfcomp.expr(e.X)\n\t\tif e.Lo != nil {\n\t\t\tfcomp.expr(e.Lo)\n\t\t} else {\n\t\t\tfcomp.emit(NONE)\n\t\t}\n\t\tif e.Hi != nil {\n\t\t\tfcomp.expr(e.Hi)\n\t\t} else {\n\t\t\tfcomp.emit(NONE)\n\t\t}\n\t\tif e.Step != nil {\n\t\t\tfcomp.expr(e.Step)\n\t\t} else {\n\t\t\tfcomp.emit(NONE)\n\t\t}\n\t\tfcomp.emit(SLICE)\n\n\tcase *syntax.Comprehension:\n\t\tif e.Curly {\n\t\t\tfcomp.emit(MAKEDICT)\n\t\t} else {\n\t\t\tfcomp.emit1(MAKELIST, 0)\n\t\t}\n\t\tfcomp.comprehension(e, 0)\n\n\tcase *syntax.TupleExpr:\n\t\tfcomp.tuple(e.List)\n\n\tcase *syntax.DictExpr:\n\t\tfcomp.emit(MAKEDICT)\n\t\tfor _, entry := range e.List {\n\t\t\tentry := entry.(*syntax.DictEntry)\n\t\t\tfcomp.emit(DUP)\n\t\t\tfcomp.expr(entry.Key)\n\t\t\tfcomp.expr(entry.Value)\n\t\t\tfcomp.setPos(entry.Colon)\n\t\t\tfcomp.emit(SETDICTUNIQ)\n\t\t}\n\n\tcase *syntax.UnaryExpr:\n\t\tfcomp.expr(e.X)\n\t\tfcomp.setPos(e.OpPos)\n\t\tswitch e.Op {\n\t\tcase syntax.MINUS:\n\t\t\tfcomp.emit(UMINUS)\n\t\tcase syntax.PLUS:\n\t\t\tfcomp.emit(UPLUS)\n\t\tcase syntax.NOT:\n\t\t\tfcomp.emit(NOT)\n\t\tcase syntax.TILDE:\n\t\t\tfcomp.emit(TILDE)\n\t\tdefault:\n\t\t\tlog.Panicf(\"%s: unexpected unary op: %s\", e.OpPos, e.Op)\n\t\t}\n\n\tcase *syntax.BinaryExpr:\n\t\tswitch e.Op {\n\t\t// short-circuit operators\n\t\t// TODO(adonovan): use ifelse to simplify conditions.\n\t\tcase syntax.OR:\n\t\t\t// x or y  =>  if x then x else y\n\t\t\tdone := fcomp.newBlock()\n\t\t\ty := fcomp.newBlock()\n\n\t\t\tfcomp.expr(e.X)\n\t\t\tfcomp.emit(DUP)\n\t\t\tfcomp.condjump(CJMP, done, y)\n\n\t\t\tfcomp.block = y\n\t\t\tfcomp.emit(POP) // discard X\n\t\t\tfcomp.expr(e.Y)\n\t\t\tfcomp.jump(done)\n\n\t\t\tfcomp.block = done\n\n\t\tcase syntax.AND:\n\t\t\t// x and y  =>  if x then y else x\n\t\t\tdone := fcomp.newBlock()\n\t\t\ty := fcomp.newBlock()\n\n\t\t\tfcomp.expr(e.X)\n\t\t\tfcomp.emit(DUP)\n\t\t\tfcomp.condjump(CJMP, y, done)\n\n\t\t\tfcomp.block = y\n\t\t\tfcomp.emit(POP) // discard X\n\t\t\tfcomp.expr(e.Y)\n\t\t\tfcomp.jump(done)\n\n\t\t\tfcomp.block = done\n\n\t\tcase syntax.PLUS:\n\t\t\tfcomp.plus(e)\n\n\t\tdefault:\n\t\t\t// all other strict binary operator (includes comparisons)\n\t\t\tfcomp.expr(e.X)\n\t\t\tfcomp.expr(e.Y)\n\t\t\tfcomp.binop(e.OpPos, e.Op)\n\t\t}\n\n\tcase *syntax.DotExpr:\n\t\tfcomp.expr(e.X)\n\t\tfcomp.setPos(e.Dot)\n\t\tfcomp.emit1(ATTR, fcomp.pcomp.nameIndex(e.Name.Name))\n\n\tcase *syntax.CallExpr:\n\t\tfcomp.call(e)\n\n\tcase *syntax.LambdaExpr:\n\t\tfcomp.function(e.Function.(*resolve.Function))\n\n\tdefault:\n\t\tstart, _ := e.Span()\n\t\tlog.Panicf(\"%s: unexpected expr %T\", start, e)\n\t}\n}\n\ntype summand struct {\n\tx       syntax.Expr\n\tplusPos syntax.Position\n}\n\n// plus emits optimized code for ((a+b)+...)+z that avoids naive\n// quadratic behavior for strings, tuples, and lists,\n// and folds together adjacent literals of the same type.\nfunc (fcomp *fcomp) plus(e *syntax.BinaryExpr) {\n\t// Gather all the right operands of the left tree of plusses.\n\t// A tree (((a+b)+c)+d) becomes args=[a +b +c +d].\n\targs := make([]summand, 0, 2) // common case: 2 operands\n\tfor plus := e; ; {\n\t\targs = append(args, summand{unparen(plus.Y), plus.OpPos})\n\t\tleft := unparen(plus.X)\n\t\tx, ok := left.(*syntax.BinaryExpr)\n\t\tif !ok || x.Op != syntax.PLUS {\n\t\t\targs = append(args, summand{x: left})\n\t\t\tbreak\n\t\t}\n\t\tplus = x\n\t}\n\t// Reverse args to syntactic order.\n\tfor i, n := 0, len(args)/2; i < n; i++ {\n\t\tj := len(args) - 1 - i\n\t\targs[i], args[j] = args[j], args[i]\n\t}\n\n\t// Fold sums of adjacent literals of the same type: \"\"+\"\", []+[], ()+().\n\tout := args[:0] // compact in situ\n\tfor i := 0; i < len(args); {\n\t\tj := i + 1\n\t\tif code := addable(args[i].x); code != 0 {\n\t\t\tfor j < len(args) && addable(args[j].x) == code {\n\t\t\t\tj++\n\t\t\t}\n\t\t\tif j > i+1 {\n\t\t\t\targs[i].x = add(code, args[i:j])\n\t\t\t}\n\t\t}\n\t\tout = append(out, args[i])\n\t\ti = j\n\t}\n\targs = out\n\n\t// Emit code for an n-ary sum (n > 0).\n\tfcomp.expr(args[0].x)\n\tfor _, summand := range args[1:] {\n\t\tfcomp.expr(summand.x)\n\t\tfcomp.setPos(summand.plusPos)\n\t\tfcomp.emit(PLUS)\n\t}\n\n\t// If len(args) > 2, use of an accumulator instead of a chain of\n\t// PLUS operations may be more efficient.\n\t// However, no gain was measured on a workload analogous to Bazel loading;\n\t// TODO(adonovan): opt: re-evaluate on a Bazel analysis-like workload.\n\t//\n\t// We cannot use a single n-ary SUM operation\n\t//    a b c SUM<3>\n\t// because we need to report a distinct error for each\n\t// individual '+' operation, so three additional operations are\n\t// needed:\n\t//\n\t//   ACCSTART => create buffer and append to it\n\t//   ACCUM    => append to buffer\n\t//   ACCEND   => get contents of buffer\n\t//\n\t// For string, list, and tuple values, the interpreter can\n\t// optimize these operations by using a mutable buffer.\n\t// For all other types, ACCSTART and ACCEND would behave like\n\t// the identity function and ACCUM behaves like PLUS.\n\t// ACCUM must correctly support user-defined operations\n\t// such as list+foo.\n\t//\n\t// fcomp.emit(ACCSTART)\n\t// for _, summand := range args[1:] {\n\t// \tfcomp.expr(summand.x)\n\t// \tfcomp.setPos(summand.plusPos)\n\t// \tfcomp.emit(ACCUM)\n\t// }\n\t// fcomp.emit(ACCEND)\n}\n\n// addable reports whether e is a statically addable\n// expression: a [s]tring, [b]ytes, [l]ist, or [t]uple.\nfunc addable(e syntax.Expr) rune {\n\tswitch e := e.(type) {\n\tcase *syntax.Literal:\n\t\t// TODO(adonovan): opt: support INT/FLOAT/BIGINT constant folding.\n\t\tswitch e.Token {\n\t\tcase syntax.STRING:\n\t\t\treturn 's'\n\t\tcase syntax.BYTES:\n\t\t\treturn 'b'\n\t\t}\n\tcase *syntax.ListExpr:\n\t\treturn 'l'\n\tcase *syntax.TupleExpr:\n\t\treturn 't'\n\t}\n\treturn 0\n}\n\n// add returns an expression denoting the sum of args,\n// which are all addable values of the type indicated by code.\n// The resulting syntax is degenerate, lacking position, etc.\nfunc add(code rune, args []summand) syntax.Expr {\n\tswitch code {\n\tcase 's', 'b':\n\t\tvar buf strings.Builder\n\t\tfor _, arg := range args {\n\t\t\tbuf.WriteString(arg.x.(*syntax.Literal).Value.(string))\n\t\t}\n\t\ttok := syntax.STRING\n\t\tif code == 'b' {\n\t\t\ttok = syntax.BYTES\n\t\t}\n\t\treturn &syntax.Literal{Token: tok, Value: buf.String()}\n\tcase 'l':\n\t\tvar elems []syntax.Expr\n\t\tfor _, arg := range args {\n\t\t\telems = append(elems, arg.x.(*syntax.ListExpr).List...)\n\t\t}\n\t\treturn &syntax.ListExpr{List: elems}\n\tcase 't':\n\t\tvar elems []syntax.Expr\n\t\tfor _, arg := range args {\n\t\t\telems = append(elems, arg.x.(*syntax.TupleExpr).List...)\n\t\t}\n\t\treturn &syntax.TupleExpr{List: elems}\n\t}\n\tpanic(code)\n}\n\nfunc unparen(e syntax.Expr) syntax.Expr {\n\tif p, ok := e.(*syntax.ParenExpr); ok {\n\t\treturn unparen(p.X)\n\t}\n\treturn e\n}\n\nfunc (fcomp *fcomp) binop(pos syntax.Position, op syntax.Token) {\n\t// TODO(adonovan): simplify by assuming syntax and compiler constants align.\n\tfcomp.setPos(pos)\n\tswitch op {\n\t// arithmetic\n\tcase syntax.PLUS:\n\t\tfcomp.emit(PLUS)\n\tcase syntax.MINUS:\n\t\tfcomp.emit(MINUS)\n\tcase syntax.STAR:\n\t\tfcomp.emit(STAR)\n\tcase syntax.SLASH:\n\t\tfcomp.emit(SLASH)\n\tcase syntax.SLASHSLASH:\n\t\tfcomp.emit(SLASHSLASH)\n\tcase syntax.PERCENT:\n\t\tfcomp.emit(PERCENT)\n\tcase syntax.AMP:\n\t\tfcomp.emit(AMP)\n\tcase syntax.PIPE:\n\t\tfcomp.emit(PIPE)\n\tcase syntax.CIRCUMFLEX:\n\t\tfcomp.emit(CIRCUMFLEX)\n\tcase syntax.LTLT:\n\t\tfcomp.emit(LTLT)\n\tcase syntax.GTGT:\n\t\tfcomp.emit(GTGT)\n\tcase syntax.IN:\n\t\tfcomp.emit(IN)\n\tcase syntax.NOT_IN:\n\t\tfcomp.emit(IN)\n\t\tfcomp.emit(NOT)\n\n\t\t// comparisons\n\tcase syntax.EQL,\n\t\tsyntax.NEQ,\n\t\tsyntax.GT,\n\t\tsyntax.LT,\n\t\tsyntax.LE,\n\t\tsyntax.GE:\n\t\tfcomp.emit(Opcode(op-syntax.EQL) + EQL)\n\n\tdefault:\n\t\tlog.Panicf(\"%s: unexpected binary op: %s\", pos, op)\n\t}\n}\n\nfunc (fcomp *fcomp) call(call *syntax.CallExpr) {\n\t// TODO(adonovan): opt: Use optimized path for calling methods\n\t// of built-ins: x.f(...) to avoid materializing a closure.\n\t// if dot, ok := call.Fcomp.(*syntax.DotExpr); ok {\n\t// \tfcomp.expr(dot.X)\n\t// \tfcomp.args(call)\n\t// \tfcomp.emit1(CALL_ATTR, fcomp.name(dot.Name.Name))\n\t// \treturn\n\t// }\n\n\t// usual case\n\tfcomp.expr(call.Fn)\n\top, arg := fcomp.args(call)\n\tfcomp.setPos(call.Lparen)\n\tfcomp.emit1(op, arg)\n}\n\n// args emits code to push a tuple of positional arguments\n// and a tuple of named arguments containing alternating keys and values.\n// Either or both tuples may be empty (TODO(adonovan): optimize).\nfunc (fcomp *fcomp) args(call *syntax.CallExpr) (op Opcode, arg uint32) {\n\tvar callmode int\n\t// Compute the number of each kind of parameter.\n\tvar p, n int // number of  positional, named arguments\n\tvar varargs, kwargs syntax.Expr\n\tfor _, arg := range call.Args {\n\t\tif binary, ok := arg.(*syntax.BinaryExpr); ok && binary.Op == syntax.EQ {\n\n\t\t\t// named argument (name, value)\n\t\t\tfcomp.string(binary.X.(*syntax.Ident).Name)\n\t\t\tfcomp.expr(binary.Y)\n\t\t\tn++\n\t\t\tcontinue\n\t\t}\n\t\tif unary, ok := arg.(*syntax.UnaryExpr); ok {\n\t\t\tif unary.Op == syntax.STAR {\n\t\t\t\tcallmode |= 1\n\t\t\t\tvarargs = unary.X\n\t\t\t\tcontinue\n\t\t\t} else if unary.Op == syntax.STARSTAR {\n\t\t\t\tcallmode |= 2\n\t\t\t\tkwargs = unary.X\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t// positional argument\n\t\tfcomp.expr(arg)\n\t\tp++\n\t}\n\n\t// Python2 and Python3 both permit named arguments\n\t// to appear both before and after a *args argument:\n\t//   f(1, 2, x=3, *[4], y=5, **dict(z=6))\n\t//\n\t// They also differ in their evaluation order:\n\t//  Python2: 1 2 3 5 4 6 (*args and **kwargs evaluated last)\n\t//  Python3: 1 2 4 3 5 6 (positional args evaluated before named args)\n\t// Starlark-in-Java historically used a third order:\n\t//  Lexical: 1 2 3 4 5 6 (all args evaluated left-to-right)\n\t//\n\t// After discussion in github.com/bazelbuild/starlark#13, the\n\t// spec now requires Starlark to statically reject named\n\t// arguments after *args (e.g. y=5), and to use Python2-style\n\t// evaluation order. This is both easy to implement and\n\t// consistent with lexical order:\n\t//\n\t//   f(1, 2, x=3, *[4], **dict(z=6)) # 1 2 3 4 6\n\n\t// *args\n\tif varargs != nil {\n\t\tfcomp.expr(varargs)\n\t}\n\n\t// **kwargs\n\tif kwargs != nil {\n\t\tfcomp.expr(kwargs)\n\t}\n\n\t// TODO(adonovan): avoid this with a more flexible encoding.\n\tif p >= 256 || n >= 256 {\n\t\t// resolve already checked this; should be unreachable\n\t\tpanic(\"too many arguments in call\")\n\t}\n\n\treturn CALL + Opcode(callmode), uint32(p<<8 | n)\n}\n\nfunc (fcomp *fcomp) tuple(elems []syntax.Expr) {\n\tfor _, elem := range elems {\n\t\tfcomp.expr(elem)\n\t}\n\tfcomp.emit1(MAKETUPLE, uint32(len(elems)))\n}\n\nfunc (fcomp *fcomp) comprehension(comp *syntax.Comprehension, clauseIndex int) {\n\tif clauseIndex == len(comp.Clauses) {\n\t\tfcomp.emit(DUP) // accumulator\n\t\tif comp.Curly {\n\t\t\t// dict: {k:v for ...}\n\t\t\t// Parser ensures that body is of form k:v.\n\t\t\t// Python-style set comprehensions {body for vars in x}\n\t\t\t// are not supported.\n\t\t\tentry := comp.Body.(*syntax.DictEntry)\n\t\t\tfcomp.expr(entry.Key)\n\t\t\tfcomp.expr(entry.Value)\n\t\t\tfcomp.setPos(entry.Colon)\n\t\t\tfcomp.emit(SETDICT)\n\t\t} else {\n\t\t\t// list: [body for vars in x]\n\t\t\tfcomp.expr(comp.Body)\n\t\t\tfcomp.emit(APPEND)\n\t\t}\n\t\treturn\n\t}\n\n\tclause := comp.Clauses[clauseIndex]\n\tswitch clause := clause.(type) {\n\tcase *syntax.IfClause:\n\t\tt := fcomp.newBlock()\n\t\tdone := fcomp.newBlock()\n\t\tfcomp.ifelse(clause.Cond, t, done)\n\n\t\tfcomp.block = t\n\t\tfcomp.comprehension(comp, clauseIndex+1)\n\t\tfcomp.jump(done)\n\n\t\tfcomp.block = done\n\t\treturn\n\n\tcase *syntax.ForClause:\n\t\t// Keep consistent with ForStmt.\n\t\thead := fcomp.newBlock()\n\t\tbody := fcomp.newBlock()\n\t\ttail := fcomp.newBlock()\n\n\t\tfcomp.expr(clause.X)\n\t\tfcomp.setPos(clause.For)\n\t\tfcomp.emit(ITERPUSH)\n\t\tfcomp.jump(head)\n\n\t\tfcomp.block = head\n\t\tfcomp.condjump(ITERJMP, tail, body)\n\n\t\tfcomp.block = body\n\t\tfcomp.assign(clause.For, clause.Vars)\n\t\tfcomp.comprehension(comp, clauseIndex+1)\n\t\tfcomp.jump(head)\n\n\t\tfcomp.block = tail\n\t\tfcomp.emit(ITERPOP)\n\t\treturn\n\t}\n\n\tstart, _ := clause.Span()\n\tlog.Panicf(\"%s: unexpected comprehension clause %T\", start, clause)\n}\n\nfunc (fcomp *fcomp) function(f *resolve.Function) {\n\t// Evaluation of the defaults may fail, so record the position.\n\tfcomp.setPos(f.Pos)\n\n\t// To reduce allocation, we emit a combined tuple\n\t// for the defaults and the freevars.\n\t// The function knows where to split it at run time.\n\n\t// Generate tuple of parameter defaults. For:\n\t//  def f(p1, p2=dp2, p3=dp3, *, k1, k2=dk2, k3, **kwargs)\n\t// the tuple is:\n\t//  (dp2, dp3, MANDATORY, dk2, MANDATORY).\n\tndefaults := 0\n\tseenStar := false\n\tfor _, param := range f.Params {\n\t\tswitch param := param.(type) {\n\t\tcase *syntax.BinaryExpr:\n\t\t\tfcomp.expr(param.Y)\n\t\t\tndefaults++\n\t\tcase *syntax.UnaryExpr:\n\t\t\tseenStar = true // * or *args (also **kwargs)\n\t\tcase *syntax.Ident:\n\t\t\tif seenStar {\n\t\t\t\tfcomp.emit(MANDATORY)\n\t\t\t\tndefaults++\n\t\t\t}\n\t\t}\n\t}\n\n\t// Capture the cells of the function's\n\t// free variables from the lexical environment.\n\tfor _, freevar := range f.FreeVars {\n\t\t// Don't call fcomp.lookup because we want\n\t\t// the cell itself, not its content.\n\t\tswitch freevar.Scope {\n\t\tcase resolve.Free:\n\t\t\tfcomp.emit1(FREE, uint32(freevar.Index))\n\t\tcase resolve.Cell:\n\t\t\tfcomp.emit1(LOCAL, uint32(freevar.Index))\n\t\t}\n\t}\n\n\tfcomp.emit1(MAKETUPLE, uint32(ndefaults+len(f.FreeVars)))\n\n\tfuncode := fcomp.pcomp.function(f.Name, f.Pos, f.Body, f.Locals, f.FreeVars)\n\n\tif debug {\n\t\t// TODO(adonovan): do compilations sequentially not as a tree,\n\t\t// to make the log easier to read.\n\t\t// Simplify by identifying Toplevel and functionIndex 0.\n\t\tfmt.Fprintf(os.Stderr, \"resuming %s @ %s\\n\", fcomp.fn.Name, fcomp.pos)\n\t}\n\n\t// def f(a, *, b=1) has only 2 parameters.\n\tnumParams := len(f.Params)\n\tif f.NumKwonlyParams > 0 && !f.HasVarargs {\n\t\tnumParams--\n\t}\n\n\tfuncode.NumParams = numParams\n\tfuncode.NumKwonlyParams = f.NumKwonlyParams\n\tfuncode.HasVarargs = f.HasVarargs\n\tfuncode.HasKwargs = f.HasKwargs\n\tfcomp.emit1(MAKEFUNC, fcomp.pcomp.functionIndex(funcode))\n}\n\n// ifelse emits a Boolean control flow decision.\n// On return, the current block is unset.\nfunc (fcomp *fcomp) ifelse(cond syntax.Expr, t, f *block) {\n\tswitch cond := cond.(type) {\n\tcase *syntax.UnaryExpr:\n\t\tif cond.Op == syntax.NOT {\n\t\t\t// if not x then goto t else goto f\n\t\t\t//    =>\n\t\t\t// if x then goto f else goto t\n\t\t\tfcomp.ifelse(cond.X, f, t)\n\t\t\treturn\n\t\t}\n\n\tcase *syntax.BinaryExpr:\n\t\tswitch cond.Op {\n\t\tcase syntax.AND:\n\t\t\t// if x and y then goto t else goto f\n\t\t\t//    =>\n\t\t\t// if x then ifelse(y, t, f) else goto f\n\t\t\tfcomp.expr(cond.X)\n\t\t\ty := fcomp.newBlock()\n\t\t\tfcomp.condjump(CJMP, y, f)\n\n\t\t\tfcomp.block = y\n\t\t\tfcomp.ifelse(cond.Y, t, f)\n\t\t\treturn\n\n\t\tcase syntax.OR:\n\t\t\t// if x or y then goto t else goto f\n\t\t\t//    =>\n\t\t\t// if x then goto t else ifelse(y, t, f)\n\t\t\tfcomp.expr(cond.X)\n\t\t\ty := fcomp.newBlock()\n\t\t\tfcomp.condjump(CJMP, t, y)\n\n\t\t\tfcomp.block = y\n\t\t\tfcomp.ifelse(cond.Y, t, f)\n\t\t\treturn\n\t\tcase syntax.NOT_IN:\n\t\t\t// if x not in y then goto t else goto f\n\t\t\t//    =>\n\t\t\t// if x in y then goto f else goto t\n\t\t\tcopy := *cond\n\t\t\tcopy.Op = syntax.IN\n\t\t\tfcomp.expr(&copy)\n\t\t\tfcomp.condjump(CJMP, f, t)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// general case\n\tfcomp.expr(cond)\n\tfcomp.condjump(CJMP, t, f)\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/internal/compile/serial.go",
    "content": "package compile\n\n// This file defines functions to read and write a compile.Program to a file.\n//\n// It is the client's responsibility to avoid version skew between the\n// compiler used to produce a file and the interpreter that consumes it.\n// The version number is provided as a constant.\n// Incompatible protocol changes should also increment the version number.\n//\n// Encoding\n//\n// Program:\n//\t\"sky!\"\t\t[4]byte\t\t# magic number\n//\tstr\t\tuint32le\t# offset of <strings> section\n//\tversion\t\tvarint\t\t# must match Version\n//\tfilename\tstring\n//\tnumloads\tvarint\n//\tloads\t\t[]Ident\n//\tnumnames\tvarint\n//\tnames\t\t[]string\n//\tnumconsts\tvarint\n//\tconsts\t\t[]Constant\n//\tnumglobals\tvarint\n//\tglobals\t\t[]Ident\n//\ttoplevel\tFuncode\n//\tnumfuncs\tvarint\n//\tfuncs\t\t[]Funcode\n//\trecursion\tvarint (0 or 1)\n//\t<strings>\t[]byte\t\t# concatenation of all referenced strings\n//\tEOF\n//\n// Funcode:\n//\tid\t\tIdent\n//\tcode\t\t[]byte\n//\tpclinetablen\tvarint\n//\tpclinetab\t[]varint\n//\tnumlocals\tvarint\n//\tlocals\t\t[]Ident\n//\tnumcells\tvarint\n//\tcells\t\t[]int\n//\tnumfreevars\tvarint\n//\tfreevar\t\t[]Ident\n//\tmaxstack\tvarint\n//\tnumparams\tvarint\n//\tnumkwonlyparams\tvarint\n//\thasvarargs\tvarint (0 or 1)\n//\thaskwargs\tvarint (0 or 1)\n//\n// Ident:\n//\tfilename\tstring\n//\tline, col\tvarint\n//\n// Constant:                            # type      data\n//      type            varint          # 0=string  string\n//      data            ...             # 1=bytes   string\n//                                      # 2=int     varint\n//                                      # 3=float   varint (bits as uint64)\n//                                      # 4=bigint  string (decimal ASCII text)\n//\n// The encoding starts with a four-byte magic number.\n// The next four bytes are a little-endian uint32\n// that provides the offset of the string section\n// at the end of the file, which contains the ordered\n// concatenation of all strings referenced by the\n// program. This design permits the decoder to read\n// the first and second parts of the file into different\n// memory allocations: the first (the encoded program)\n// is transient, but the second (the strings) persists\n// for the life of the Program.\n//\n// Within the encoded program, all strings are referred\n// to by their length. As the encoder and decoder process\n// the entire file sequentially, they are in lock step,\n// so the start offset of each string is implicit.\n//\n// Program.Code is represented as a []byte slice to permit\n// modification when breakpoints are set. All other strings\n// are represented as strings. They all (unsafely) share the\n// same backing byte slice.\n//\n// Aside from the str field, all integers are encoded as varints.\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"math\"\n\t\"math/big\"\n\tdebugpkg \"runtime/debug\"\n\t\"unsafe\"\n\n\t\"go.starlark.net/syntax\"\n)\n\nconst magic = \"!sky\"\n\n// Encode encodes a compiled Starlark program.\nfunc (prog *Program) Encode() []byte {\n\tvar e encoder\n\te.p = append(e.p, magic...)\n\te.p = append(e.p, \"????\"...) // string data offset; filled in later\n\te.int(Version)\n\te.string(prog.Toplevel.Pos.Filename())\n\te.bindings(prog.Loads)\n\te.int(len(prog.Names))\n\tfor _, name := range prog.Names {\n\t\te.string(name)\n\t}\n\te.int(len(prog.Constants))\n\tfor _, c := range prog.Constants {\n\t\tswitch c := c.(type) {\n\t\tcase string:\n\t\t\te.int(0)\n\t\t\te.string(c)\n\t\tcase Bytes:\n\t\t\te.int(1)\n\t\t\te.string(string(c))\n\t\tcase int64:\n\t\t\te.int(2)\n\t\t\te.int64(c)\n\t\tcase float64:\n\t\t\te.int(3)\n\t\t\te.uint64(math.Float64bits(c))\n\t\tcase *big.Int:\n\t\t\te.int(4)\n\t\t\te.string(c.Text(10))\n\t\t}\n\t}\n\te.bindings(prog.Globals)\n\te.function(prog.Toplevel)\n\te.int(len(prog.Functions))\n\tfor _, fn := range prog.Functions {\n\t\te.function(fn)\n\t}\n\te.int(b2i(prog.Recursion))\n\n\t// Patch in the offset of the string data section.\n\tbinary.LittleEndian.PutUint32(e.p[4:8], uint32(len(e.p)))\n\n\treturn append(e.p, e.s...)\n}\n\ntype encoder struct {\n\tp   []byte // encoded program\n\ts   []byte // strings\n\ttmp [binary.MaxVarintLen64]byte\n}\n\nfunc (e *encoder) int(x int) {\n\te.int64(int64(x))\n}\n\nfunc (e *encoder) int64(x int64) {\n\tn := binary.PutVarint(e.tmp[:], x)\n\te.p = append(e.p, e.tmp[:n]...)\n}\n\nfunc (e *encoder) uint64(x uint64) {\n\tn := binary.PutUvarint(e.tmp[:], x)\n\te.p = append(e.p, e.tmp[:n]...)\n}\n\nfunc (e *encoder) string(s string) {\n\te.int(len(s))\n\te.s = append(e.s, s...)\n}\n\nfunc (e *encoder) bytes(b []byte) {\n\te.int(len(b))\n\te.s = append(e.s, b...)\n}\n\nfunc (e *encoder) binding(bind Binding) {\n\te.string(bind.Name)\n\te.int(int(bind.Pos.Line))\n\te.int(int(bind.Pos.Col))\n}\n\nfunc (e *encoder) bindings(binds []Binding) {\n\te.int(len(binds))\n\tfor _, bind := range binds {\n\t\te.binding(bind)\n\t}\n}\n\nfunc (e *encoder) function(fn *Funcode) {\n\te.binding(Binding{fn.Name, fn.Pos})\n\te.string(fn.Doc)\n\te.bytes(fn.Code)\n\te.int(len(fn.pclinetab))\n\tfor _, x := range fn.pclinetab {\n\t\te.int64(int64(x))\n\t}\n\te.bindings(fn.Locals)\n\te.int(len(fn.Cells))\n\tfor _, index := range fn.Cells {\n\t\te.int(index)\n\t}\n\te.bindings(fn.Freevars)\n\te.int(fn.MaxStack)\n\te.int(fn.NumParams)\n\te.int(fn.NumKwonlyParams)\n\te.int(b2i(fn.HasVarargs))\n\te.int(b2i(fn.HasKwargs))\n}\n\nfunc b2i(b bool) int {\n\tif b {\n\t\treturn 1\n\t} else {\n\t\treturn 0\n\t}\n}\n\n// DecodeProgram decodes a compiled Starlark program from data.\nfunc DecodeProgram(data []byte) (_ *Program, err error) {\n\tif len(data) < len(magic) {\n\t\treturn nil, fmt.Errorf(\"not a compiled module: no magic number\")\n\t}\n\tif got := string(data[:4]); got != magic {\n\t\treturn nil, fmt.Errorf(\"not a compiled module: got magic number %q, want %q\",\n\t\t\tgot, magic)\n\t}\n\tdefer func() {\n\t\tif x := recover(); x != nil {\n\t\t\tdebugpkg.PrintStack()\n\t\t\terr = fmt.Errorf(\"internal error while decoding program: %v\", x)\n\t\t}\n\t}()\n\n\toffset := binary.LittleEndian.Uint32(data[4:8])\n\td := decoder{\n\t\tp: data[8:offset],\n\t\ts: append([]byte(nil), data[offset:]...), // allocate a copy, which will persist\n\t}\n\n\tif v := d.int(); v != Version {\n\t\treturn nil, fmt.Errorf(\"version mismatch: read %d, want %d\", v, Version)\n\t}\n\n\tfilename := d.string()\n\td.filename = &filename\n\n\tloads := d.bindings()\n\n\tnames := make([]string, d.int())\n\tfor i := range names {\n\t\tnames[i] = d.string()\n\t}\n\n\t// constants\n\tconstants := make([]interface{}, d.int())\n\tfor i := range constants {\n\t\tvar c interface{}\n\t\tswitch d.int() {\n\t\tcase 0:\n\t\t\tc = d.string()\n\t\tcase 1:\n\t\t\tc = Bytes(d.string())\n\t\tcase 2:\n\t\t\tc = d.int64()\n\t\tcase 3:\n\t\t\tc = math.Float64frombits(d.uint64())\n\t\tcase 4:\n\t\t\tc, _ = new(big.Int).SetString(d.string(), 10)\n\t\t}\n\t\tconstants[i] = c\n\t}\n\n\tglobals := d.bindings()\n\ttoplevel := d.function()\n\tfuncs := make([]*Funcode, d.int())\n\tfor i := range funcs {\n\t\tfuncs[i] = d.function()\n\t}\n\trecursion := d.int() != 0\n\n\tprog := &Program{\n\t\tLoads:     loads,\n\t\tNames:     names,\n\t\tConstants: constants,\n\t\tGlobals:   globals,\n\t\tFunctions: funcs,\n\t\tToplevel:  toplevel,\n\t\tRecursion: recursion,\n\t}\n\ttoplevel.Prog = prog\n\tfor _, f := range funcs {\n\t\tf.Prog = prog\n\t}\n\n\tif len(d.p)+len(d.s) > 0 {\n\t\treturn nil, fmt.Errorf(\"internal error: unconsumed data during decoding\")\n\t}\n\n\treturn prog, nil\n}\n\ntype decoder struct {\n\tp        []byte  // encoded program\n\ts        []byte  // strings\n\tfilename *string // (indirect to avoid keeping decoder live)\n}\n\nfunc (d *decoder) int() int {\n\treturn int(d.int64())\n}\n\nfunc (d *decoder) int64() int64 {\n\tx, len := binary.Varint(d.p[:])\n\td.p = d.p[len:]\n\treturn x\n}\n\nfunc (d *decoder) uint64() uint64 {\n\tx, len := binary.Uvarint(d.p[:])\n\td.p = d.p[len:]\n\treturn x\n}\n\nfunc (d *decoder) string() (s string) {\n\tif slice := d.bytes(); len(slice) > 0 {\n\t\t// Avoid a memory allocation for each string\n\t\t// by unsafely aliasing slice.\n\t\ttype string struct {\n\t\t\tdata *byte\n\t\t\tlen  int\n\t\t}\n\t\tptr := (*string)(unsafe.Pointer(&s))\n\t\tptr.data = &slice[0]\n\t\tptr.len = len(slice)\n\t}\n\treturn s\n}\n\nfunc (d *decoder) bytes() []byte {\n\tlen := d.int()\n\tr := d.s[:len:len]\n\td.s = d.s[len:]\n\treturn r\n}\n\nfunc (d *decoder) binding() Binding {\n\tname := d.string()\n\tline := int32(d.int())\n\tcol := int32(d.int())\n\treturn Binding{Name: name, Pos: syntax.MakePosition(d.filename, line, col)}\n}\n\nfunc (d *decoder) bindings() []Binding {\n\tbindings := make([]Binding, d.int())\n\tfor i := range bindings {\n\t\tbindings[i] = d.binding()\n\t}\n\treturn bindings\n}\n\nfunc (d *decoder) ints() []int {\n\tints := make([]int, d.int())\n\tfor i := range ints {\n\t\tints[i] = d.int()\n\t}\n\treturn ints\n}\n\nfunc (d *decoder) bool() bool { return d.int() != 0 }\n\nfunc (d *decoder) function() *Funcode {\n\tid := d.binding()\n\tdoc := d.string()\n\tcode := d.bytes()\n\tpclinetab := make([]uint16, d.int())\n\tfor i := range pclinetab {\n\t\tpclinetab[i] = uint16(d.int())\n\t}\n\tlocals := d.bindings()\n\tcells := d.ints()\n\tfreevars := d.bindings()\n\tmaxStack := d.int()\n\tnumParams := d.int()\n\tnumKwonlyParams := d.int()\n\thasVarargs := d.int() != 0\n\thasKwargs := d.int() != 0\n\treturn &Funcode{\n\t\t// Prog is filled in later.\n\t\tPos:             id.Pos,\n\t\tName:            id.Name,\n\t\tDoc:             doc,\n\t\tCode:            code,\n\t\tpclinetab:       pclinetab,\n\t\tLocals:          locals,\n\t\tCells:           cells,\n\t\tFreevars:        freevars,\n\t\tMaxStack:        maxStack,\n\t\tNumParams:       numParams,\n\t\tNumKwonlyParams: numKwonlyParams,\n\t\tHasVarargs:      hasVarargs,\n\t\tHasKwargs:       hasKwargs,\n\t}\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/internal/spell/spell.go",
    "content": "// Package spell file defines a simple spelling checker for use in attribute errors\n// such as \"no such field .foo; did you mean .food?\".\npackage spell\n\nimport (\n\t\"strings\"\n\t\"unicode\"\n)\n\n// Nearest returns the element of candidates\n// nearest to x using the Levenshtein metric,\n// or \"\" if none were promising.\nfunc Nearest(x string, candidates []string) string {\n\t// Ignore underscores and case when matching.\n\tfold := func(s string) string {\n\t\treturn strings.Map(func(r rune) rune {\n\t\t\tif r == '_' {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn unicode.ToLower(r)\n\t\t}, s)\n\t}\n\n\tx = fold(x)\n\n\tvar best string\n\tbestD := (len(x) + 1) / 2 // allow up to 50% typos\n\tfor _, c := range candidates {\n\t\td := levenshtein(x, fold(c), bestD)\n\t\tif d < bestD {\n\t\t\tbestD = d\n\t\t\tbest = c\n\t\t}\n\t}\n\treturn best\n}\n\n// levenshtein returns the non-negative Levenshtein edit distance\n// between the byte strings x and y.\n//\n// If the computed distance exceeds max,\n// the function may return early with an approximate value > max.\nfunc levenshtein(x, y string, max int) int {\n\t// This implementation is derived from one by Laurent Le Brun in\n\t// Bazel that uses the single-row space efficiency trick\n\t// described at bitbucket.org/clearer/iosifovich.\n\n\t// Let x be the shorter string.\n\tif len(x) > len(y) {\n\t\tx, y = y, x\n\t}\n\n\t// Remove common prefix.\n\tfor i := 0; i < len(x); i++ {\n\t\tif x[i] != y[i] {\n\t\t\tx = x[i:]\n\t\t\ty = y[i:]\n\t\t\tbreak\n\t\t}\n\t}\n\tif x == \"\" {\n\t\treturn len(y)\n\t}\n\n\tif d := abs(len(x) - len(y)); d > max {\n\t\treturn d // excessive length divergence\n\t}\n\n\trow := make([]int, len(y)+1)\n\tfor i := range row {\n\t\trow[i] = i\n\t}\n\n\tfor i := 1; i <= len(x); i++ {\n\t\trow[0] = i\n\t\tbest := i\n\t\tprev := i - 1\n\t\tfor j := 1; j <= len(y); j++ {\n\t\t\ta := prev + b2i(x[i-1] != y[j-1]) // substitution\n\t\t\tb := 1 + row[j-1]                 // deletion\n\t\t\tc := 1 + row[j]                   // insertion\n\t\t\tk := min(a, min(b, c))\n\t\t\tprev, row[j] = row[j], k\n\t\t\tbest = min(best, k)\n\t\t}\n\t\tif best > max {\n\t\t\treturn best\n\t\t}\n\t}\n\treturn row[len(y)]\n}\n\nfunc b2i(b bool) int {\n\tif b {\n\t\treturn 1\n\t} else {\n\t\treturn 0\n\t}\n}\n\nfunc min(x, y int) int {\n\tif x < y {\n\t\treturn x\n\t} else {\n\t\treturn y\n\t}\n}\n\nfunc abs(x int) int {\n\tif x >= 0 {\n\t\treturn x\n\t} else {\n\t\treturn -x\n\t}\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/lib/time/time.go",
    "content": "// Copyright 2021 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package time provides time-related constants and functions.\npackage time // import \"go.starlark.net/lib/time\"\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\t\"time\"\n\n\t\"go.starlark.net/starlark\"\n\t\"go.starlark.net/starlarkstruct\"\n\t\"go.starlark.net/syntax\"\n)\n\n// Module time is a Starlark module of time-related functions and constants.\n// The module defines the following functions:\n//\n//     from_timestamp(sec, nsec) - Converts the given Unix time corresponding to the number of seconds\n//                                 and (optionally) nanoseconds since January 1, 1970 UTC into an object\n//                                 of type Time. For more details, refer to https://pkg.go.dev/time#Unix.\n//\n//     is_valid_timezone(loc) - Reports whether loc is a valid time zone name.\n//\n//     now() - Returns the current local time. Applications may replace this function by a deterministic one.\n//\n//     parse_duration(d) - Parses the given duration string. For more details, refer to\n//                         https://pkg.go.dev/time#ParseDuration.\n//\n//     parse_time(x, format, location) - Parses the given time string using a specific time format and location.\n//                                      The expected arguments are a time string (mandatory), a time format\n//                                      (optional, set to RFC3339 by default, e.g. \"2021-03-22T23:20:50.52Z\")\n//                                      and a name of location (optional, set to UTC by default). For more details,\n//                                      refer to https://pkg.go.dev/time#Parse and https://pkg.go.dev/time#ParseInLocation.\n//\n//     time(year, month, day, hour, minute, second, nanosecond, location) - Returns the Time corresponding to\n//\t                                                                        yyyy-mm-dd hh:mm:ss + nsec nanoseconds\n//                                                                          in the appropriate zone for that time\n//                                                                          in the given location. All the parameters\n//                                                                          are optional.\n// The module also defines the following constants:\n//\n//     nanosecond - A duration representing one nanosecond.\n//     microsecond - A duration representing one microsecond.\n//     millisecond - A duration representing one millisecond.\n//     second - A duration representing one second.\n//     minute - A duration representing one minute.\n//     hour - A duration representing one hour.\n//\nvar Module = &starlarkstruct.Module{\n\tName: \"time\",\n\tMembers: starlark.StringDict{\n\t\t\"from_timestamp\":    starlark.NewBuiltin(\"from_timestamp\", fromTimestamp),\n\t\t\"is_valid_timezone\": starlark.NewBuiltin(\"is_valid_timezone\", isValidTimezone),\n\t\t\"now\":               starlark.NewBuiltin(\"now\", now),\n\t\t\"parse_duration\":    starlark.NewBuiltin(\"parse_duration\", parseDuration),\n\t\t\"parse_time\":        starlark.NewBuiltin(\"parse_time\", parseTime),\n\t\t\"time\":              starlark.NewBuiltin(\"time\", newTime),\n\n\t\t\"nanosecond\":  Duration(time.Nanosecond),\n\t\t\"microsecond\": Duration(time.Microsecond),\n\t\t\"millisecond\": Duration(time.Millisecond),\n\t\t\"second\":      Duration(time.Second),\n\t\t\"minute\":      Duration(time.Minute),\n\t\t\"hour\":        Duration(time.Hour),\n\t},\n}\n\n// NowFunc is a function that reports the current time. Intentionally exported\n// so that it can be overridden, for example by applications that require their\n// Starlark scripts to be fully deterministic.\n//\n// Deprecated: avoid updating this global variable\n// and instead use SetNow on each thread to set its clock function.\nvar NowFunc = time.Now\n\nconst contextKey = \"time.now\"\n\n// SetNow sets the thread's optional clock function.\n// If non-nil, it will be used in preference to NowFunc when the\n// thread requests the current time by executing a call to time.now.\nfunc SetNow(thread *starlark.Thread, nowFunc func() (time.Time, error)) {\n\tthread.SetLocal(contextKey, nowFunc)\n}\n\n// Now returns the clock function previously associated with this thread.\nfunc Now(thread *starlark.Thread) func() (time.Time, error) {\n\tnowFunc, _ := thread.Local(contextKey).(func() (time.Time, error))\n\treturn nowFunc\n}\n\nfunc parseDuration(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tvar d Duration\n\terr := starlark.UnpackPositionalArgs(\"parse_duration\", args, kwargs, 1, &d)\n\treturn d, err\n}\n\nfunc isValidTimezone(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tvar s string\n\tif err := starlark.UnpackPositionalArgs(\"is_valid_timezone\", args, kwargs, 1, &s); err != nil {\n\t\treturn nil, err\n\t}\n\t_, err := time.LoadLocation(s)\n\treturn starlark.Bool(err == nil), nil\n}\n\nfunc parseTime(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tvar (\n\t\tx        string\n\t\tlocation = \"UTC\"\n\t\tformat   = time.RFC3339\n\t)\n\tif err := starlark.UnpackArgs(\"parse_time\", args, kwargs, \"x\", &x, \"format?\", &format, \"location?\", &location); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif location == \"UTC\" {\n\t\tt, err := time.Parse(format, x)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn Time(t), nil\n\t}\n\n\tloc, err := time.LoadLocation(location)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tt, err := time.ParseInLocation(format, x, loc)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn Time(t), nil\n}\n\nfunc fromTimestamp(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tvar (\n\t\tsec  int64\n\t\tnsec int64 = 0\n\t)\n\tif err := starlark.UnpackPositionalArgs(\"from_timestamp\", args, kwargs, 1, &sec, &nsec); err != nil {\n\t\treturn nil, err\n\t}\n\treturn Time(time.Unix(sec, nsec)), nil\n}\n\nfunc now(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tnowErrFunc := Now(thread)\n\tif nowErrFunc != nil {\n\t\tt, err := nowErrFunc()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn Time(t), nil\n\t}\n\tnowFunc := NowFunc\n\tif nowFunc == nil {\n\t\treturn nil, errors.New(\"time.now() is not available\")\n\t}\n\treturn Time(nowFunc()), nil\n}\n\n// Duration is a Starlark representation of a duration.\ntype Duration time.Duration\n\n// Assert at compile time that Duration implements Unpacker.\nvar _ starlark.Unpacker = (*Duration)(nil)\n\n// Unpack is a custom argument unpacker\nfunc (d *Duration) Unpack(v starlark.Value) error {\n\tswitch x := v.(type) {\n\tcase Duration:\n\t\t*d = x\n\t\treturn nil\n\tcase starlark.String:\n\t\tdur, err := time.ParseDuration(string(x))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\t*d = Duration(dur)\n\t\treturn nil\n\t}\n\n\treturn fmt.Errorf(\"got %s, want a duration, string, or int\", v.Type())\n}\n\n// String implements the Stringer interface.\nfunc (d Duration) String() string { return time.Duration(d).String() }\n\n// Type returns a short string describing the value's type.\nfunc (d Duration) Type() string { return \"time.duration\" }\n\n// Freeze renders Duration immutable. required by starlark.Value interface\n// because duration is already immutable this is a no-op.\nfunc (d Duration) Freeze() {}\n\n// Hash returns a function of x such that Equals(x, y) => Hash(x) == Hash(y)\n// required by starlark.Value interface.\nfunc (d Duration) Hash() (uint32, error) {\n\treturn uint32(d) ^ uint32(int64(d)>>32), nil\n}\n\n// Truth reports whether the duration is non-zero.\nfunc (d Duration) Truth() starlark.Bool { return d != 0 }\n\n// Attr gets a value for a string attribute, implementing dot expression support\n// in starklark. required by starlark.HasAttrs interface.\nfunc (d Duration) Attr(name string) (starlark.Value, error) {\n\tswitch name {\n\tcase \"hours\":\n\t\treturn starlark.Float(time.Duration(d).Hours()), nil\n\tcase \"minutes\":\n\t\treturn starlark.Float(time.Duration(d).Minutes()), nil\n\tcase \"seconds\":\n\t\treturn starlark.Float(time.Duration(d).Seconds()), nil\n\tcase \"milliseconds\":\n\t\treturn starlark.MakeInt64(time.Duration(d).Milliseconds()), nil\n\tcase \"microseconds\":\n\t\treturn starlark.MakeInt64(time.Duration(d).Microseconds()), nil\n\tcase \"nanoseconds\":\n\t\treturn starlark.MakeInt64(time.Duration(d).Nanoseconds()), nil\n\t}\n\treturn nil, fmt.Errorf(\"unrecognized %s attribute %q\", d.Type(), name)\n}\n\n// AttrNames lists available dot expression strings. required by\n// starlark.HasAttrs interface.\nfunc (d Duration) AttrNames() []string {\n\treturn []string{\n\t\t\"hours\",\n\t\t\"minutes\",\n\t\t\"seconds\",\n\t\t\"milliseconds\",\n\t\t\"microseconds\",\n\t\t\"nanoseconds\",\n\t}\n}\n\n// Cmp implements comparison of two Duration values. required by\n// starlark.TotallyOrdered interface.\nfunc (d Duration) Cmp(v starlark.Value, depth int) (int, error) {\n\tif x, y := d, v.(Duration); x < y {\n\t\treturn -1, nil\n\t} else if x > y {\n\t\treturn 1, nil\n\t}\n\treturn 0, nil\n}\n\n// Binary implements binary operators, which satisfies the starlark.HasBinary\n// interface. operators:\n//    duration + duration = duration\n//    duration + time = time\n//    duration - duration = duration\n//    duration / duration = float\n//    duration / int = duration\n//    duration / float = duration\n//    duration // duration = int\n//    duration * int = duration\nfunc (d Duration) Binary(op syntax.Token, y starlark.Value, side starlark.Side) (starlark.Value, error) {\n\tx := time.Duration(d)\n\n\tswitch op {\n\tcase syntax.PLUS:\n\t\tswitch y := y.(type) {\n\t\tcase Duration:\n\t\t\treturn Duration(x + time.Duration(y)), nil\n\t\tcase Time:\n\t\t\treturn Time(time.Time(y).Add(x)), nil\n\t\t}\n\n\tcase syntax.MINUS:\n\t\tswitch y := y.(type) {\n\t\tcase Duration:\n\t\t\treturn Duration(x - time.Duration(y)), nil\n\t\t}\n\n\tcase syntax.SLASH:\n\t\tswitch y := y.(type) {\n\t\tcase Duration:\n\t\t\tif y == 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"%s division by zero\", d.Type())\n\t\t\t}\n\t\t\treturn starlark.Float(x.Nanoseconds()) / starlark.Float(time.Duration(y).Nanoseconds()), nil\n\t\tcase starlark.Int:\n\t\t\tif side == starlark.Right {\n\t\t\t\treturn nil, fmt.Errorf(\"unsupported operation\")\n\t\t\t}\n\t\t\ti, ok := y.Int64()\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"int value out of range (want signed 64-bit value)\")\n\t\t\t}\n\t\t\tif i == 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"%s division by zero\", d.Type())\n\t\t\t}\n\t\t\treturn d / Duration(i), nil\n\t\tcase starlark.Float:\n\t\t\tf := float64(y)\n\t\t\tif f == 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"%s division by zero\", d.Type())\n\t\t\t}\n\t\t\treturn Duration(float64(x.Nanoseconds()) / f), nil\n\t\t}\n\n\tcase syntax.SLASHSLASH:\n\t\tswitch y := y.(type) {\n\t\tcase Duration:\n\t\t\tif y == 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"%s division by zero\", d.Type())\n\t\t\t}\n\t\t\treturn starlark.MakeInt64(x.Nanoseconds() / time.Duration(y).Nanoseconds()), nil\n\t\t}\n\n\tcase syntax.STAR:\n\t\tswitch y := y.(type) {\n\t\tcase starlark.Int:\n\t\t\ti, ok := y.Int64()\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"int value out of range (want signed 64-bit value)\")\n\t\t\t}\n\t\t\treturn d * Duration(i), nil\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\n// Time is a Starlark representation of a moment in time.\ntype Time time.Time\n\nfunc newTime(thread *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tvar (\n\t\tyear, month, day, hour, min, sec, nsec int\n\t\tloc                                    string\n\t)\n\tif err := starlark.UnpackArgs(\"time\", args, kwargs,\n\t\t\"year?\", &year,\n\t\t\"month?\", &month,\n\t\t\"day?\", &day,\n\t\t\"hour?\", &hour,\n\t\t\"minute?\", &min,\n\t\t\"second?\", &sec,\n\t\t\"nanosecond?\", &nsec,\n\t\t\"location?\", &loc,\n\t); err != nil {\n\t\treturn nil, err\n\t}\n\tif len(args) > 0 {\n\t\treturn nil, fmt.Errorf(\"time: unexpected positional arguments\")\n\t}\n\tlocation, err := time.LoadLocation(loc)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn Time(time.Date(year, time.Month(month), day, hour, min, sec, nsec, location)), nil\n}\n\n// String returns the time formatted using the format string\n//\t\"2006-01-02 15:04:05.999999999 -0700 MST\".\nfunc (t Time) String() string { return time.Time(t).String() }\n\n// Type returns \"time.time\".\nfunc (t Time) Type() string { return \"time.time\" }\n\n// Freeze renders time immutable. required by starlark.Value interface\n// because Time is already immutable this is a no-op.\nfunc (t Time) Freeze() {}\n\n// Hash returns a function of x such that Equals(x, y) => Hash(x) == Hash(y)\n// required by starlark.Value interface.\nfunc (t Time) Hash() (uint32, error) {\n\treturn uint32(time.Time(t).UnixNano()) ^ uint32(int64(time.Time(t).UnixNano())>>32), nil\n}\n\n// Truth returns the truth value of an object required by starlark.Value\n// interface.\nfunc (t Time) Truth() starlark.Bool { return !starlark.Bool(time.Time(t).IsZero()) }\n\n// Attr gets a value for a string attribute, implementing dot expression support\n// in starklark. required by starlark.HasAttrs interface.\nfunc (t Time) Attr(name string) (starlark.Value, error) {\n\tswitch name {\n\tcase \"year\":\n\t\treturn starlark.MakeInt(time.Time(t).Year()), nil\n\tcase \"month\":\n\t\treturn starlark.MakeInt(int(time.Time(t).Month())), nil\n\tcase \"day\":\n\t\treturn starlark.MakeInt(time.Time(t).Day()), nil\n\tcase \"hour\":\n\t\treturn starlark.MakeInt(time.Time(t).Hour()), nil\n\tcase \"minute\":\n\t\treturn starlark.MakeInt(time.Time(t).Minute()), nil\n\tcase \"second\":\n\t\treturn starlark.MakeInt(time.Time(t).Second()), nil\n\tcase \"nanosecond\":\n\t\treturn starlark.MakeInt(time.Time(t).Nanosecond()), nil\n\tcase \"unix\":\n\t\treturn starlark.MakeInt64(time.Time(t).Unix()), nil\n\tcase \"unix_nano\":\n\t\treturn starlark.MakeInt64(time.Time(t).UnixNano()), nil\n\t}\n\treturn builtinAttr(t, name, timeMethods)\n}\n\n// AttrNames lists available dot expression strings for time. required by\n// starlark.HasAttrs interface.\nfunc (t Time) AttrNames() []string {\n\treturn append(builtinAttrNames(timeMethods),\n\t\t\"year\",\n\t\t\"month\",\n\t\t\"day\",\n\t\t\"hour\",\n\t\t\"minute\",\n\t\t\"second\",\n\t\t\"nanosecond\",\n\t\t\"unix\",\n\t\t\"unix_nano\",\n\t)\n}\n\n// Cmp implements comparison of two Time values. Required by\n// starlark.TotallyOrdered interface.\nfunc (t Time) Cmp(yV starlark.Value, depth int) (int, error) {\n\tx := time.Time(t)\n\ty := time.Time(yV.(Time))\n\tif x.Before(y) {\n\t\treturn -1, nil\n\t} else if x.After(y) {\n\t\treturn 1, nil\n\t}\n\treturn 0, nil\n}\n\n// Binary implements binary operators, which satisfies the starlark.HasBinary\n// interface\n//    time + duration = time\n//    time - duration = time\n//    time - time = duration\nfunc (t Time) Binary(op syntax.Token, y starlark.Value, side starlark.Side) (starlark.Value, error) {\n\tx := time.Time(t)\n\n\tswitch op {\n\tcase syntax.PLUS:\n\t\tswitch y := y.(type) {\n\t\tcase Duration:\n\t\t\treturn Time(x.Add(time.Duration(y))), nil\n\t\t}\n\tcase syntax.MINUS:\n\t\tswitch y := y.(type) {\n\t\tcase Duration:\n\t\t\treturn Time(x.Add(time.Duration(-y))), nil\n\t\tcase Time:\n\t\t\t// time - time = duration\n\t\t\treturn Duration(x.Sub(time.Time(y))), nil\n\t\t}\n\t}\n\n\treturn nil, nil\n}\n\nvar timeMethods = map[string]builtinMethod{\n\t\"in_location\": timeIn,\n\t\"format\":      timeFormat,\n}\n\nfunc timeFormat(fnname string, recV starlark.Value, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tvar x string\n\tif err := starlark.UnpackPositionalArgs(\"format\", args, kwargs, 1, &x); err != nil {\n\t\treturn nil, err\n\t}\n\n\trecv := time.Time(recV.(Time))\n\treturn starlark.String(recv.Format(x)), nil\n}\n\nfunc timeIn(fnname string, recV starlark.Value, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tvar x string\n\tif err := starlark.UnpackPositionalArgs(\"in_location\", args, kwargs, 1, &x); err != nil {\n\t\treturn nil, err\n\t}\n\tloc, err := time.LoadLocation(x)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\trecv := time.Time(recV.(Time))\n\treturn Time(recv.In(loc)), nil\n}\n\ntype builtinMethod func(fnname string, recv starlark.Value, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error)\n\nfunc builtinAttr(recv starlark.Value, name string, methods map[string]builtinMethod) (starlark.Value, error) {\n\tmethod := methods[name]\n\tif method == nil {\n\t\treturn nil, nil // no such method\n\t}\n\n\t// Allocate a closure over 'method'.\n\timpl := func(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\t\treturn method(b.Name(), b.Receiver(), args, kwargs)\n\t}\n\treturn starlark.NewBuiltin(name, impl).BindReceiver(recv), nil\n}\n\nfunc builtinAttrNames(methods map[string]builtinMethod) []string {\n\tnames := make([]string, 0, len(methods))\n\tfor name := range methods {\n\t\tnames = append(names, name)\n\t}\n\tsort.Strings(names)\n\treturn names\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/resolve/binding.go",
    "content": "// Copyright 2019 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage resolve\n\nimport \"go.starlark.net/syntax\"\n\n// This file defines resolver data types saved in the syntax tree.\n// We cannot guarantee API stability for these types\n// as they are closely tied to the implementation.\n\n// A Binding contains resolver information about an identifier.\n// The resolver populates the Binding field of each syntax.Identifier.\n// The Binding ties together all identifiers that denote the same variable.\ntype Binding struct {\n\tScope Scope\n\n\t// Index records the index into the enclosing\n\t// - {DefStmt,File}.Locals, if Scope==Local\n\t// - DefStmt.FreeVars,      if Scope==Free\n\t// - File.Globals,          if Scope==Global.\n\t// It is zero if Scope is Predeclared, Universal, or Undefined.\n\tIndex int\n\n\tFirst *syntax.Ident // first binding use (iff Scope==Local/Free/Global)\n}\n\n// The Scope of Binding indicates what kind of scope it has.\ntype Scope uint8\n\nconst (\n\tUndefined   Scope = iota // name is not defined\n\tLocal                    // name is local to its function or file\n\tCell                     // name is function-local but shared with a nested function\n\tFree                     // name is cell of some enclosing function\n\tGlobal                   // name is global to module\n\tPredeclared              // name is predeclared for this module (e.g. glob)\n\tUniversal                // name is universal (e.g. len)\n)\n\nvar scopeNames = [...]string{\n\tUndefined:   \"undefined\",\n\tLocal:       \"local\",\n\tCell:        \"cell\",\n\tFree:        \"free\",\n\tGlobal:      \"global\",\n\tPredeclared: \"predeclared\",\n\tUniversal:   \"universal\",\n}\n\nfunc (scope Scope) String() string { return scopeNames[scope] }\n\n// A Module contains resolver information about a file.\n// The resolver populates the Module field of each syntax.File.\ntype Module struct {\n\tLocals  []*Binding // the file's (comprehension-)local variables\n\tGlobals []*Binding // the file's global variables\n}\n\n// A Function contains resolver information about a named or anonymous function.\n// The resolver populates the Function field of each syntax.DefStmt and syntax.LambdaExpr.\ntype Function struct {\n\tPos    syntax.Position // of DEF or LAMBDA\n\tName   string          // name of def, or \"lambda\"\n\tParams []syntax.Expr   // param = ident | ident=expr | * | *ident | **ident\n\tBody   []syntax.Stmt   // contains synthetic 'return expr' for lambda\n\n\tHasVarargs      bool       // whether params includes *args (convenience)\n\tHasKwargs       bool       // whether params includes **kwargs (convenience)\n\tNumKwonlyParams int        // number of keyword-only optional parameters\n\tLocals          []*Binding // this function's local/cell variables, parameters first\n\tFreeVars        []*Binding // enclosing cells to capture in closure\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/resolve/resolve.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package resolve defines a name-resolution pass for Starlark abstract\n// syntax trees.\n//\n// The resolver sets the Locals and FreeVars arrays of each DefStmt and\n// the LocalIndex field of each syntax.Ident that refers to a local or\n// free variable.  It also sets the Locals array of a File for locals\n// bound by top-level comprehensions and load statements.\n// Identifiers for global variables do not get an index.\npackage resolve // import \"go.starlark.net/resolve\"\n\n// All references to names are statically resolved.  Names may be\n// predeclared, global, or local to a function or file.\n// File-local variables include those bound by top-level comprehensions\n// and by load statements. (\"Top-level\" means \"outside of any function\".)\n// The resolver maps each global name to a small integer and each local\n// name to a small integer; these integers enable a fast and compact\n// representation of globals and locals in the evaluator.\n//\n// As an optimization, the resolver classifies each predeclared name as\n// either universal (e.g. None, len) or per-module (e.g. glob in Bazel's\n// build language), enabling the evaluator to share the representation\n// of the universal environment across all modules.\n//\n// The lexical environment is a tree of blocks with the file block at\n// its root. The file's child blocks may be of two kinds: functions\n// and comprehensions, and these may have further children of either\n// kind.\n//\n// Python-style resolution requires multiple passes because a name is\n// determined to be local to a function only if the function contains a\n// \"binding\" use of it; similarly, a name is determined to be global (as\n// opposed to predeclared) if the module contains a top-level binding use.\n// Unlike ordinary top-level assignments, the bindings created by load\n// statements are local to the file block.\n// A non-binding use may lexically precede the binding to which it is resolved.\n// In the first pass, we inspect each function, recording in\n// 'uses' each identifier and the environment block in which it occurs.\n// If a use of a name is binding, such as a function parameter or\n// assignment, we add the name to the block's bindings mapping and add a\n// local variable to the enclosing function.\n//\n// As we finish resolving each function, we inspect all the uses within\n// that function and discard ones that were found to be function-local. The\n// remaining ones must be either free (local to some lexically enclosing\n// function), or top-level (global, predeclared, or file-local), but we cannot tell\n// which until we have finished inspecting the outermost enclosing\n// function. At that point, we can distinguish local from top-level names\n// (and this is when Python would compute free variables).\n//\n// However, Starlark additionally requires that all references to global\n// names are satisfied by some declaration in the current module;\n// Starlark permits a function to forward-reference a global or file-local\n// that has not\n// been declared yet so long as it is declared before the end of the\n// module.  So, instead of re-resolving the unresolved references after\n// each top-level function, we defer this until the end of the module\n// and ensure that all such references are satisfied by some definition.\n//\n// At the end of the module, we visit each of the nested function blocks\n// in bottom-up order, doing a recursive lexical lookup for each\n// unresolved name.  If the name is found to be local to some enclosing\n// function, we must create a DefStmt.FreeVar (capture) parameter for\n// each intervening function.  We enter these synthetic bindings into\n// the bindings map so that we create at most one freevar per name.  If\n// the name was not local, we check that it was defined at module level.\n//\n// We resolve all uses of locals in the module (due to load statements\n// and comprehensions) in a similar way and compute the file's set of\n// local variables.\n//\n// Starlark enforces that all global names are assigned at most once on\n// all control flow paths by forbidding if/else statements and loops at\n// top level. A global may be used before it is defined, leading to a\n// dynamic error. However, the AllowGlobalReassign flag (really: allow\n// top-level reassign) makes the resolver allow multiple to a variable\n// at top-level. It also allows if-, for-, and while-loops at top-level,\n// which in turn may make the evaluator dynamically assign multiple\n// values to a variable at top-level. (These two roles should be separated.)\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"go.starlark.net/internal/spell\"\n\t\"go.starlark.net/syntax\"\n)\n\nconst debug = false\nconst doesnt = \"this Starlark dialect does not \"\n\n// global options\n// These features are either not standard Starlark (yet), or deprecated\n// features of the BUILD language, so we put them behind flags.\n//\n// Deprecated: use an explicit [syntax.FileOptions] argument instead,\n// as it avoids all the usual problems of global variables.\nvar (\n\tAllowSet            = false // allow the 'set' built-in\n\tAllowGlobalReassign = false // allow reassignment to top-level names; also, allow if/for/while at top-level\n\tAllowRecursion      = false // allow while statements and recursive functions\n\tLoadBindsGlobally   = false // load creates global not file-local bindings (deprecated)\n\n\t// obsolete flags for features that are now standard. No effect.\n\tAllowNestedDef = true\n\tAllowLambda    = true\n\tAllowFloat     = true\n\tAllowBitwise   = true\n)\n\n// File resolves the specified file and records information about the\n// module in file.Module.\n//\n// The isPredeclared and isUniversal predicates report whether a name is\n// a pre-declared identifier (visible in the current module) or a\n// universal identifier (visible in every module).\n// Clients should typically pass predeclared.Has for the first and\n// starlark.Universe.Has for the second, where predeclared is the\n// module's StringDict of predeclared names and starlark.Universe is the\n// standard set of built-ins.\n// The isUniverse predicate is supplied a parameter to avoid a cyclic\n// dependency upon starlark.Universe, not because users should ever need\n// to redefine it.\nfunc File(file *syntax.File, isPredeclared, isUniversal func(name string) bool) error {\n\treturn REPLChunk(file, nil, isPredeclared, isUniversal)\n}\n\n// REPLChunk is a generalization of the File function that supports a\n// non-empty initial global block, as occurs in a REPL.\nfunc REPLChunk(file *syntax.File, isGlobal, isPredeclared, isUniversal func(name string) bool) error {\n\tr := newResolver(file.Options, isGlobal, isPredeclared, isUniversal)\n\tr.stmts(file.Stmts)\n\n\tr.env.resolveLocalUses()\n\n\t// At the end of the module, resolve all non-local variable references,\n\t// computing closures.\n\t// Function bodies may contain forward references to later global declarations.\n\tr.resolveNonLocalUses(r.env)\n\n\tfile.Module = &Module{\n\t\tLocals:  r.moduleLocals,\n\t\tGlobals: r.moduleGlobals,\n\t}\n\n\tif len(r.errors) > 0 {\n\t\treturn r.errors\n\t}\n\treturn nil\n}\n\n// Expr calls [ExprOptions] using [syntax.LegacyFileOptions].\n// Deprecated: relies on legacy global variables.\nfunc Expr(expr syntax.Expr, isPredeclared, isUniversal func(name string) bool) ([]*Binding, error) {\n\treturn ExprOptions(syntax.LegacyFileOptions(), expr, isPredeclared, isUniversal)\n}\n\n// ExprOptions resolves the specified expression.\n// It returns the local variables bound within the expression.\n//\n// The isPredeclared and isUniversal predicates behave as for the File function\nfunc ExprOptions(opts *syntax.FileOptions, expr syntax.Expr, isPredeclared, isUniversal func(name string) bool) ([]*Binding, error) {\n\tr := newResolver(opts, nil, isPredeclared, isUniversal)\n\tr.expr(expr)\n\tr.env.resolveLocalUses()\n\tr.resolveNonLocalUses(r.env) // globals & universals\n\tif len(r.errors) > 0 {\n\t\treturn nil, r.errors\n\t}\n\treturn r.moduleLocals, nil\n}\n\n// An ErrorList is a non-empty list of resolver error messages.\ntype ErrorList []Error // len > 0\n\nfunc (e ErrorList) Error() string { return e[0].Error() }\n\n// An Error describes the nature and position of a resolver error.\ntype Error struct {\n\tPos syntax.Position\n\tMsg string\n}\n\nfunc (e Error) Error() string { return e.Pos.String() + \": \" + e.Msg }\n\nfunc newResolver(options *syntax.FileOptions, isGlobal, isPredeclared, isUniversal func(name string) bool) *resolver {\n\tfile := new(block)\n\treturn &resolver{\n\t\toptions:       options,\n\t\tfile:          file,\n\t\tenv:           file,\n\t\tisGlobal:      isGlobal,\n\t\tisPredeclared: isPredeclared,\n\t\tisUniversal:   isUniversal,\n\t\tglobals:       make(map[string]*Binding),\n\t\tpredeclared:   make(map[string]*Binding),\n\t}\n}\n\ntype resolver struct {\n\toptions *syntax.FileOptions\n\n\t// env is the current local environment:\n\t// a linked list of blocks, innermost first.\n\t// The tail of the list is the file block.\n\tenv  *block\n\tfile *block // file block (contains load bindings)\n\n\t// moduleLocals contains the local variables of the module\n\t// (due to load statements and comprehensions outside any function).\n\t// moduleGlobals contains the global variables of the module.\n\tmoduleLocals  []*Binding\n\tmoduleGlobals []*Binding\n\n\t// globals maps each global name in the module to its binding.\n\t// predeclared does the same for predeclared and universal names.\n\tglobals     map[string]*Binding\n\tpredeclared map[string]*Binding\n\n\t// These predicates report whether a name is\n\t// pre-declared, either in this module or universally,\n\t// or already declared in the module globals (as in a REPL).\n\t// isGlobal may be nil.\n\tisGlobal, isPredeclared, isUniversal func(name string) bool\n\n\tloops   int // number of enclosing for/while loops\n\tifstmts int // number of enclosing if statements loops\n\n\terrors ErrorList\n}\n\n// container returns the innermost enclosing \"container\" block:\n// a function (function != nil) or file (function == nil).\n// Container blocks accumulate local variable bindings.\nfunc (r *resolver) container() *block {\n\tfor b := r.env; ; b = b.parent {\n\t\tif b.function != nil || b == r.file {\n\t\t\treturn b\n\t\t}\n\t}\n}\n\nfunc (r *resolver) push(b *block) {\n\tr.env.children = append(r.env.children, b)\n\tb.parent = r.env\n\tr.env = b\n}\n\nfunc (r *resolver) pop() { r.env = r.env.parent }\n\ntype block struct {\n\tparent *block // nil for file block\n\n\t// In the file (root) block, both these fields are nil.\n\tfunction *Function             // only for function blocks\n\tcomp     *syntax.Comprehension // only for comprehension blocks\n\n\t// bindings maps a name to its binding.\n\t// A local binding has an index into its innermost enclosing container's locals array.\n\t// A free binding has an index into its innermost enclosing function's freevars array.\n\tbindings map[string]*Binding\n\n\t// children records the child blocks of the current one.\n\tchildren []*block\n\n\t// uses records all identifiers seen in this container (function or file),\n\t// and a reference to the environment in which they appear.\n\t// As we leave each container block, we resolve them,\n\t// so that only free and global ones remain.\n\t// At the end of each top-level function we compute closures.\n\tuses []use\n}\n\nfunc (b *block) bind(name string, bind *Binding) {\n\tif b.bindings == nil {\n\t\tb.bindings = make(map[string]*Binding)\n\t}\n\tb.bindings[name] = bind\n}\n\nfunc (b *block) String() string {\n\tif b.function != nil {\n\t\treturn \"function block at \" + fmt.Sprint(b.function.Pos)\n\t}\n\tif b.comp != nil {\n\t\treturn \"comprehension block at \" + fmt.Sprint(b.comp.Span())\n\t}\n\treturn \"file block\"\n}\n\nfunc (r *resolver) errorf(posn syntax.Position, format string, args ...interface{}) {\n\tr.errors = append(r.errors, Error{posn, fmt.Sprintf(format, args...)})\n}\n\n// A use records an identifier and the environment in which it appears.\ntype use struct {\n\tid  *syntax.Ident\n\tenv *block\n}\n\n// bind creates a binding for id: a global (not file-local)\n// binding at top-level, a local binding otherwise.\n// At top-level, it reports an error if a global or file-local\n// binding already exists, unless AllowGlobalReassign.\n// It sets id.Binding to the binding (whether old or new),\n// and returns whether a binding already existed.\nfunc (r *resolver) bind(id *syntax.Ident) bool {\n\t// Binding outside any local (comprehension/function) block?\n\tif r.env == r.file {\n\t\tbind, ok := r.file.bindings[id.Name]\n\t\tif !ok {\n\t\t\tbind, ok = r.globals[id.Name]\n\t\t\tif !ok {\n\t\t\t\t// first global binding of this name\n\t\t\t\tbind = &Binding{\n\t\t\t\t\tFirst: id,\n\t\t\t\t\tScope: Global,\n\t\t\t\t\tIndex: len(r.moduleGlobals),\n\t\t\t\t}\n\t\t\t\tr.globals[id.Name] = bind\n\t\t\t\tr.moduleGlobals = append(r.moduleGlobals, bind)\n\t\t\t}\n\t\t}\n\t\tif ok && !r.options.GlobalReassign {\n\t\t\tr.errorf(id.NamePos, \"cannot reassign %s %s declared at %s\",\n\t\t\t\tbind.Scope, id.Name, bind.First.NamePos)\n\t\t}\n\t\tid.Binding = bind\n\t\treturn ok\n\t}\n\n\treturn r.bindLocal(id)\n}\n\nfunc (r *resolver) bindLocal(id *syntax.Ident) bool {\n\t// Mark this name as local to current block.\n\t// Assign it a new local (positive) index in the current container.\n\t_, ok := r.env.bindings[id.Name]\n\tif !ok {\n\t\tvar locals *[]*Binding\n\t\tif fn := r.container().function; fn != nil {\n\t\t\tlocals = &fn.Locals\n\t\t} else {\n\t\t\tlocals = &r.moduleLocals\n\t\t}\n\t\tbind := &Binding{\n\t\t\tFirst: id,\n\t\t\tScope: Local,\n\t\t\tIndex: len(*locals),\n\t\t}\n\t\tr.env.bind(id.Name, bind)\n\t\t*locals = append(*locals, bind)\n\t}\n\n\tr.use(id)\n\treturn ok\n}\n\nfunc (r *resolver) use(id *syntax.Ident) {\n\tuse := use{id, r.env}\n\n\t// The spec says that if there is a global binding of a name\n\t// then all references to that name in that block refer to the\n\t// global, even if the use precedes the def---just as for locals.\n\t// For example, in this code,\n\t//\n\t//   print(len); len=1; print(len)\n\t//\n\t// both occurrences of len refer to the len=1 binding, which\n\t// completely shadows the predeclared len function.\n\t//\n\t// The rationale for these semantics, which differ from Python,\n\t// is that the static meaning of len (a reference to a global)\n\t// does not change depending on where it appears in the file.\n\t// Of course, its dynamic meaning does change, from an error\n\t// into a valid reference, so it's not clear these semantics\n\t// have any practical advantage.\n\t//\n\t// In any case, the Bazel implementation lags behind the spec\n\t// and follows Python behavior, so the first use of len refers\n\t// to the predeclared function.  This typically used in a BUILD\n\t// file that redefines a predeclared name half way through,\n\t// for example:\n\t//\n\t//\tproto_library(...) \t\t\t# built-in rule\n\t//      load(\"myproto.bzl\", \"proto_library\")\n\t//\tproto_library(...) \t\t\t# user-defined rule\n\t//\n\t// We will piggyback support for the legacy semantics on the\n\t// AllowGlobalReassign flag, which is loosely related and also\n\t// required for Bazel.\n\tif r.options.GlobalReassign && r.env == r.file {\n\t\tr.useToplevel(use)\n\t\treturn\n\t}\n\n\tb := r.container()\n\tb.uses = append(b.uses, use)\n}\n\n// useToplevel resolves use.id as a reference to a name visible at top-level.\n// The use.env field captures the original environment for error reporting.\nfunc (r *resolver) useToplevel(use use) (bind *Binding) {\n\tid := use.id\n\n\tif prev, ok := r.file.bindings[id.Name]; ok {\n\t\t// use of load-defined name in file block\n\t\tbind = prev\n\t} else if prev, ok := r.globals[id.Name]; ok {\n\t\t// use of global declared by module\n\t\tbind = prev\n\t} else if r.isGlobal != nil && r.isGlobal(id.Name) {\n\t\t// use of global defined in a previous REPL chunk\n\t\tbind = &Binding{\n\t\t\tFirst: id, // wrong: this is not even a binding use\n\t\t\tScope: Global,\n\t\t\tIndex: len(r.moduleGlobals),\n\t\t}\n\t\tr.globals[id.Name] = bind\n\t\tr.moduleGlobals = append(r.moduleGlobals, bind)\n\t} else if prev, ok := r.predeclared[id.Name]; ok {\n\t\t// repeated use of predeclared or universal\n\t\tbind = prev\n\t} else if r.isPredeclared(id.Name) {\n\t\t// use of pre-declared name\n\t\tbind = &Binding{Scope: Predeclared}\n\t\tr.predeclared[id.Name] = bind // save it\n\t} else if r.isUniversal(id.Name) {\n\t\t// use of universal name\n\t\tif !r.options.Set && id.Name == \"set\" {\n\t\t\tr.errorf(id.NamePos, doesnt+\"support sets\")\n\t\t}\n\t\tbind = &Binding{Scope: Universal}\n\t\tr.predeclared[id.Name] = bind // save it\n\t} else {\n\t\tbind = &Binding{Scope: Undefined}\n\t\tvar hint string\n\t\tif n := r.spellcheck(use); n != \"\" {\n\t\t\thint = fmt.Sprintf(\" (did you mean %s?)\", n)\n\t\t}\n\t\tr.errorf(id.NamePos, \"undefined: %s%s\", id.Name, hint)\n\t}\n\tid.Binding = bind\n\treturn bind\n}\n\n// spellcheck returns the most likely misspelling of\n// the name use.id in the environment use.env.\nfunc (r *resolver) spellcheck(use use) string {\n\tvar names []string\n\n\t// locals\n\tfor b := use.env; b != nil; b = b.parent {\n\t\tfor name := range b.bindings {\n\t\t\tnames = append(names, name)\n\t\t}\n\t}\n\n\t// globals\n\t//\n\t// We have no way to enumerate the sets whose membership\n\t// tests are isPredeclared, isUniverse, and isGlobal,\n\t// which includes prior names in the REPL session.\n\tfor _, bind := range r.moduleGlobals {\n\t\tnames = append(names, bind.First.Name)\n\t}\n\n\tsort.Strings(names)\n\treturn spell.Nearest(use.id.Name, names)\n}\n\n// resolveLocalUses is called when leaving a container (function/module)\n// block.  It resolves all uses of locals/cells within that block.\nfunc (b *block) resolveLocalUses() {\n\tunresolved := b.uses[:0]\n\tfor _, use := range b.uses {\n\t\tif bind := lookupLocal(use); bind != nil && (bind.Scope == Local || bind.Scope == Cell) {\n\t\t\tuse.id.Binding = bind\n\t\t} else {\n\t\t\tunresolved = append(unresolved, use)\n\t\t}\n\t}\n\tb.uses = unresolved\n}\n\nfunc (r *resolver) stmts(stmts []syntax.Stmt) {\n\tfor _, stmt := range stmts {\n\t\tr.stmt(stmt)\n\t}\n}\n\nfunc (r *resolver) stmt(stmt syntax.Stmt) {\n\tswitch stmt := stmt.(type) {\n\tcase *syntax.ExprStmt:\n\t\tr.expr(stmt.X)\n\n\tcase *syntax.BranchStmt:\n\t\tif r.loops == 0 && (stmt.Token == syntax.BREAK || stmt.Token == syntax.CONTINUE) {\n\t\t\tr.errorf(stmt.TokenPos, \"%s not in a loop\", stmt.Token)\n\t\t}\n\n\tcase *syntax.IfStmt:\n\t\tif !r.options.TopLevelControl && r.container().function == nil {\n\t\t\tr.errorf(stmt.If, \"if statement not within a function\")\n\t\t}\n\t\tr.expr(stmt.Cond)\n\t\tr.ifstmts++\n\t\tr.stmts(stmt.True)\n\t\tr.stmts(stmt.False)\n\t\tr.ifstmts--\n\n\tcase *syntax.AssignStmt:\n\t\tr.expr(stmt.RHS)\n\t\tisAugmented := stmt.Op != syntax.EQ\n\t\tr.assign(stmt.LHS, isAugmented)\n\n\tcase *syntax.DefStmt:\n\t\tr.bind(stmt.Name)\n\t\tfn := &Function{\n\t\t\tName:   stmt.Name.Name,\n\t\t\tPos:    stmt.Def,\n\t\t\tParams: stmt.Params,\n\t\t\tBody:   stmt.Body,\n\t\t}\n\t\tstmt.Function = fn\n\t\tr.function(fn, stmt.Def)\n\n\tcase *syntax.ForStmt:\n\t\tif !r.options.TopLevelControl && r.container().function == nil {\n\t\t\tr.errorf(stmt.For, \"for loop not within a function\")\n\t\t}\n\t\tr.expr(stmt.X)\n\t\tconst isAugmented = false\n\t\tr.assign(stmt.Vars, isAugmented)\n\t\tr.loops++\n\t\tr.stmts(stmt.Body)\n\t\tr.loops--\n\n\tcase *syntax.WhileStmt:\n\t\tif !r.options.While {\n\t\t\tr.errorf(stmt.While, doesnt+\"support while loops\")\n\t\t}\n\t\tif !r.options.TopLevelControl && r.container().function == nil {\n\t\t\tr.errorf(stmt.While, \"while loop not within a function\")\n\t\t}\n\t\tr.expr(stmt.Cond)\n\t\tr.loops++\n\t\tr.stmts(stmt.Body)\n\t\tr.loops--\n\n\tcase *syntax.ReturnStmt:\n\t\tif r.container().function == nil {\n\t\t\tr.errorf(stmt.Return, \"return statement not within a function\")\n\t\t}\n\t\tif stmt.Result != nil {\n\t\t\tr.expr(stmt.Result)\n\t\t}\n\n\tcase *syntax.LoadStmt:\n\t\t// A load statement may not be nested in any other statement.\n\t\tif r.container().function != nil {\n\t\t\tr.errorf(stmt.Load, \"load statement within a function\")\n\t\t} else if r.loops > 0 {\n\t\t\tr.errorf(stmt.Load, \"load statement within a loop\")\n\t\t} else if r.ifstmts > 0 {\n\t\t\tr.errorf(stmt.Load, \"load statement within a conditional\")\n\t\t}\n\n\t\tfor i, from := range stmt.From {\n\t\t\tif from.Name == \"\" {\n\t\t\t\tr.errorf(from.NamePos, \"load: empty identifier\")\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif from.Name[0] == '_' {\n\t\t\t\tr.errorf(from.NamePos, \"load: names with leading underscores are not exported: %s\", from.Name)\n\t\t\t}\n\n\t\t\tid := stmt.To[i]\n\t\t\tif r.options.LoadBindsGlobally {\n\t\t\t\tr.bind(id)\n\t\t\t} else if r.bindLocal(id) && !r.options.GlobalReassign {\n\t\t\t\t// \"Global\" in AllowGlobalReassign is a misnomer for \"toplevel\".\n\t\t\t\t// Sadly we can't report the previous declaration\n\t\t\t\t// as id.Binding may not be set yet.\n\t\t\t\tr.errorf(id.NamePos, \"cannot reassign top-level %s\", id.Name)\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\tlog.Panicf(\"unexpected stmt %T\", stmt)\n\t}\n}\n\nfunc (r *resolver) assign(lhs syntax.Expr, isAugmented bool) {\n\tswitch lhs := lhs.(type) {\n\tcase *syntax.Ident:\n\t\t// x = ...\n\t\tr.bind(lhs)\n\n\tcase *syntax.IndexExpr:\n\t\t// x[i] = ...\n\t\tr.expr(lhs.X)\n\t\tr.expr(lhs.Y)\n\n\tcase *syntax.DotExpr:\n\t\t// x.f = ...\n\t\tr.expr(lhs.X)\n\n\tcase *syntax.TupleExpr:\n\t\t// (x, y) = ...\n\t\tif isAugmented {\n\t\t\tr.errorf(syntax.Start(lhs), \"can't use tuple expression in augmented assignment\")\n\t\t}\n\t\tfor _, elem := range lhs.List {\n\t\t\tr.assign(elem, isAugmented)\n\t\t}\n\n\tcase *syntax.ListExpr:\n\t\t// [x, y, z] = ...\n\t\tif isAugmented {\n\t\t\tr.errorf(syntax.Start(lhs), \"can't use list expression in augmented assignment\")\n\t\t}\n\t\tfor _, elem := range lhs.List {\n\t\t\tr.assign(elem, isAugmented)\n\t\t}\n\n\tcase *syntax.ParenExpr:\n\t\tr.assign(lhs.X, isAugmented)\n\n\tdefault:\n\t\tname := strings.ToLower(strings.TrimPrefix(fmt.Sprintf(\"%T\", lhs), \"*syntax.\"))\n\t\tr.errorf(syntax.Start(lhs), \"can't assign to %s\", name)\n\t}\n}\n\nfunc (r *resolver) expr(e syntax.Expr) {\n\tswitch e := e.(type) {\n\tcase *syntax.Ident:\n\t\tr.use(e)\n\n\tcase *syntax.Literal:\n\n\tcase *syntax.ListExpr:\n\t\tfor _, x := range e.List {\n\t\t\tr.expr(x)\n\t\t}\n\n\tcase *syntax.CondExpr:\n\t\tr.expr(e.Cond)\n\t\tr.expr(e.True)\n\t\tr.expr(e.False)\n\n\tcase *syntax.IndexExpr:\n\t\tr.expr(e.X)\n\t\tr.expr(e.Y)\n\n\tcase *syntax.DictEntry:\n\t\tr.expr(e.Key)\n\t\tr.expr(e.Value)\n\n\tcase *syntax.SliceExpr:\n\t\tr.expr(e.X)\n\t\tif e.Lo != nil {\n\t\t\tr.expr(e.Lo)\n\t\t}\n\t\tif e.Hi != nil {\n\t\t\tr.expr(e.Hi)\n\t\t}\n\t\tif e.Step != nil {\n\t\t\tr.expr(e.Step)\n\t\t}\n\n\tcase *syntax.Comprehension:\n\t\t// The 'in' operand of the first clause (always a ForClause)\n\t\t// is resolved in the outer block; consider: [x for x in x].\n\t\tclause := e.Clauses[0].(*syntax.ForClause)\n\t\tr.expr(clause.X)\n\n\t\t// A list/dict comprehension defines a new lexical block.\n\t\t// Locals defined within the block will be allotted\n\t\t// distinct slots in the locals array of the innermost\n\t\t// enclosing container (function/module) block.\n\t\tr.push(&block{comp: e})\n\n\t\tconst isAugmented = false\n\t\tr.assign(clause.Vars, isAugmented)\n\n\t\tfor _, clause := range e.Clauses[1:] {\n\t\t\tswitch clause := clause.(type) {\n\t\t\tcase *syntax.IfClause:\n\t\t\t\tr.expr(clause.Cond)\n\t\t\tcase *syntax.ForClause:\n\t\t\t\tr.assign(clause.Vars, isAugmented)\n\t\t\t\tr.expr(clause.X)\n\t\t\t}\n\t\t}\n\t\tr.expr(e.Body) // body may be *DictEntry\n\t\tr.pop()\n\n\tcase *syntax.TupleExpr:\n\t\tfor _, x := range e.List {\n\t\t\tr.expr(x)\n\t\t}\n\n\tcase *syntax.DictExpr:\n\t\tfor _, entry := range e.List {\n\t\t\tentry := entry.(*syntax.DictEntry)\n\t\t\tr.expr(entry.Key)\n\t\t\tr.expr(entry.Value)\n\t\t}\n\n\tcase *syntax.UnaryExpr:\n\t\tr.expr(e.X)\n\n\tcase *syntax.BinaryExpr:\n\t\tr.expr(e.X)\n\t\tr.expr(e.Y)\n\n\tcase *syntax.DotExpr:\n\t\tr.expr(e.X)\n\t\t// ignore e.Name\n\n\tcase *syntax.CallExpr:\n\t\tr.expr(e.Fn)\n\t\tvar seenVarargs, seenKwargs bool\n\t\tvar seenName map[string]bool\n\t\tvar n, p int\n\t\tfor _, arg := range e.Args {\n\t\t\tpos, _ := arg.Span()\n\t\t\tif unop, ok := arg.(*syntax.UnaryExpr); ok && unop.Op == syntax.STARSTAR {\n\t\t\t\t// **kwargs\n\t\t\t\tif seenKwargs {\n\t\t\t\t\tr.errorf(pos, \"multiple **kwargs not allowed\")\n\t\t\t\t}\n\t\t\t\tseenKwargs = true\n\t\t\t\tr.expr(arg)\n\t\t\t} else if ok && unop.Op == syntax.STAR {\n\t\t\t\t// *args\n\t\t\t\tif seenKwargs {\n\t\t\t\t\tr.errorf(pos, \"*args may not follow **kwargs\")\n\t\t\t\t} else if seenVarargs {\n\t\t\t\t\tr.errorf(pos, \"multiple *args not allowed\")\n\t\t\t\t}\n\t\t\t\tseenVarargs = true\n\t\t\t\tr.expr(arg)\n\t\t\t} else if binop, ok := arg.(*syntax.BinaryExpr); ok && binop.Op == syntax.EQ {\n\t\t\t\t// k=v\n\t\t\t\tn++\n\t\t\t\tif seenKwargs {\n\t\t\t\t\tr.errorf(pos, \"keyword argument may not follow **kwargs\")\n\t\t\t\t} else if seenVarargs {\n\t\t\t\t\tr.errorf(pos, \"keyword argument may not follow *args\")\n\t\t\t\t}\n\t\t\t\tx := binop.X.(*syntax.Ident)\n\t\t\t\tif seenName[x.Name] {\n\t\t\t\t\tr.errorf(x.NamePos, \"keyword argument %q is repeated\", x.Name)\n\t\t\t\t} else {\n\t\t\t\t\tif seenName == nil {\n\t\t\t\t\t\tseenName = make(map[string]bool)\n\t\t\t\t\t}\n\t\t\t\t\tseenName[x.Name] = true\n\t\t\t\t}\n\t\t\t\tr.expr(binop.Y)\n\t\t\t} else {\n\t\t\t\t// positional argument\n\t\t\t\tp++\n\t\t\t\tif seenVarargs {\n\t\t\t\t\tr.errorf(pos, \"positional argument may not follow *args\")\n\t\t\t\t} else if seenKwargs {\n\t\t\t\t\tr.errorf(pos, \"positional argument may not follow **kwargs\")\n\t\t\t\t} else if len(seenName) > 0 {\n\t\t\t\t\tr.errorf(pos, \"positional argument may not follow named\")\n\t\t\t\t}\n\t\t\t\tr.expr(arg)\n\t\t\t}\n\t\t}\n\n\t\t// Fail gracefully if compiler-imposed limit is exceeded.\n\t\tif p >= 256 {\n\t\t\tpos, _ := e.Span()\n\t\t\tr.errorf(pos, \"%v positional arguments in call, limit is 255\", p)\n\t\t}\n\t\tif n >= 256 {\n\t\t\tpos, _ := e.Span()\n\t\t\tr.errorf(pos, \"%v keyword arguments in call, limit is 255\", n)\n\t\t}\n\n\tcase *syntax.LambdaExpr:\n\t\tfn := &Function{\n\t\t\tName:   \"lambda\",\n\t\t\tPos:    e.Lambda,\n\t\t\tParams: e.Params,\n\t\t\tBody:   []syntax.Stmt{&syntax.ReturnStmt{Result: e.Body}},\n\t\t}\n\t\te.Function = fn\n\t\tr.function(fn, e.Lambda)\n\n\tcase *syntax.ParenExpr:\n\t\tr.expr(e.X)\n\n\tdefault:\n\t\tlog.Panicf(\"unexpected expr %T\", e)\n\t}\n}\n\nfunc (r *resolver) function(function *Function, pos syntax.Position) {\n\t// Resolve defaults in enclosing environment.\n\tfor _, param := range function.Params {\n\t\tif binary, ok := param.(*syntax.BinaryExpr); ok {\n\t\t\tr.expr(binary.Y)\n\t\t}\n\t}\n\n\t// Enter function block.\n\tb := &block{function: function}\n\tr.push(b)\n\n\tvar seenOptional bool\n\tvar star *syntax.UnaryExpr // * or *args param\n\tvar starStar *syntax.Ident // **kwargs ident\n\tvar numKwonlyParams int\n\tfor _, param := range function.Params {\n\t\tswitch param := param.(type) {\n\t\tcase *syntax.Ident:\n\t\t\t// e.g. x\n\t\t\tif starStar != nil {\n\t\t\t\tr.errorf(param.NamePos, \"required parameter may not follow **%s\", starStar.Name)\n\t\t\t} else if star != nil {\n\t\t\t\tnumKwonlyParams++\n\t\t\t} else if seenOptional {\n\t\t\t\tr.errorf(param.NamePos, \"required parameter may not follow optional\")\n\t\t\t}\n\t\t\tif r.bind(param) {\n\t\t\t\tr.errorf(param.NamePos, \"duplicate parameter: %s\", param.Name)\n\t\t\t}\n\n\t\tcase *syntax.BinaryExpr:\n\t\t\t// e.g. y=dflt\n\t\t\tif starStar != nil {\n\t\t\t\tr.errorf(param.OpPos, \"optional parameter may not follow **%s\", starStar.Name)\n\t\t\t} else if star != nil {\n\t\t\t\tnumKwonlyParams++\n\t\t\t}\n\t\t\tif id := param.X.(*syntax.Ident); r.bind(id) {\n\t\t\t\tr.errorf(param.OpPos, \"duplicate parameter: %s\", id.Name)\n\t\t\t}\n\t\t\tseenOptional = true\n\n\t\tcase *syntax.UnaryExpr:\n\t\t\t// * or *args or **kwargs\n\t\t\tif param.Op == syntax.STAR {\n\t\t\t\tif starStar != nil {\n\t\t\t\t\tr.errorf(param.OpPos, \"* parameter may not follow **%s\", starStar.Name)\n\t\t\t\t} else if star != nil {\n\t\t\t\t\tr.errorf(param.OpPos, \"multiple * parameters not allowed\")\n\t\t\t\t} else {\n\t\t\t\t\tstar = param\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif starStar != nil {\n\t\t\t\t\tr.errorf(param.OpPos, \"multiple ** parameters not allowed\")\n\t\t\t\t}\n\t\t\t\tstarStar = param.X.(*syntax.Ident)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Bind the *args and **kwargs parameters at the end,\n\t// so that regular parameters a/b/c are contiguous and\n\t// there is no hole for the \"*\":\n\t//   def f(a, b, *args, c=0, **kwargs)\n\t//   def f(a, b, *,     c=0, **kwargs)\n\tif star != nil {\n\t\tif id, _ := star.X.(*syntax.Ident); id != nil {\n\t\t\t// *args\n\t\t\tif r.bind(id) {\n\t\t\t\tr.errorf(id.NamePos, \"duplicate parameter: %s\", id.Name)\n\t\t\t}\n\t\t\tfunction.HasVarargs = true\n\t\t} else if numKwonlyParams == 0 {\n\t\t\tr.errorf(star.OpPos, \"bare * must be followed by keyword-only parameters\")\n\t\t}\n\t}\n\tif starStar != nil {\n\t\tif r.bind(starStar) {\n\t\t\tr.errorf(starStar.NamePos, \"duplicate parameter: %s\", starStar.Name)\n\t\t}\n\t\tfunction.HasKwargs = true\n\t}\n\n\tfunction.NumKwonlyParams = numKwonlyParams\n\tr.stmts(function.Body)\n\n\t// Resolve all uses of this function's local vars,\n\t// and keep just the remaining uses of free/global vars.\n\tb.resolveLocalUses()\n\n\t// Leave function block.\n\tr.pop()\n\n\t// References within the function body to globals are not\n\t// resolved until the end of the module.\n}\n\nfunc (r *resolver) resolveNonLocalUses(b *block) {\n\t// First resolve inner blocks.\n\tfor _, child := range b.children {\n\t\tr.resolveNonLocalUses(child)\n\t}\n\tfor _, use := range b.uses {\n\t\tuse.id.Binding = r.lookupLexical(use, use.env)\n\t}\n}\n\n// lookupLocal looks up an identifier within its immediately enclosing function.\nfunc lookupLocal(use use) *Binding {\n\tfor env := use.env; env != nil; env = env.parent {\n\t\tif bind, ok := env.bindings[use.id.Name]; ok {\n\t\t\tif bind.Scope == Free {\n\t\t\t\t// shouldn't exist till later\n\t\t\t\tlog.Panicf(\"%s: internal error: %s, %v\", use.id.NamePos, use.id.Name, bind)\n\t\t\t}\n\t\t\treturn bind // found\n\t\t}\n\t\tif env.function != nil {\n\t\t\tbreak\n\t\t}\n\t}\n\treturn nil // not found in this function\n}\n\n// lookupLexical looks up an identifier use.id within its lexically enclosing environment.\n// The use.env field captures the original environment for error reporting.\nfunc (r *resolver) lookupLexical(use use, env *block) (bind *Binding) {\n\tif debug {\n\t\tfmt.Printf(\"lookupLexical %s in %s = ...\\n\", use.id.Name, env)\n\t\tdefer func() { fmt.Printf(\"= %v\\n\", bind) }()\n\t}\n\n\t// Is this the file block?\n\tif env == r.file {\n\t\treturn r.useToplevel(use) // file-local, global, predeclared, or not found\n\t}\n\n\t// Defined in this block?\n\tbind, ok := env.bindings[use.id.Name]\n\tif !ok {\n\t\t// Defined in parent block?\n\t\tbind = r.lookupLexical(use, env.parent)\n\t\tif env.function != nil && (bind.Scope == Local || bind.Scope == Free || bind.Scope == Cell) {\n\t\t\t// Found in parent block, which belongs to enclosing function.\n\t\t\t// Add the parent's binding to the function's freevars,\n\t\t\t// and add a new 'free' binding to the inner function's block,\n\t\t\t// and turn the parent's local into cell.\n\t\t\tif bind.Scope == Local {\n\t\t\t\tbind.Scope = Cell\n\t\t\t}\n\t\t\tindex := len(env.function.FreeVars)\n\t\t\tenv.function.FreeVars = append(env.function.FreeVars, bind)\n\t\t\tbind = &Binding{\n\t\t\t\tFirst: bind.First,\n\t\t\t\tScope: Free,\n\t\t\t\tIndex: index,\n\t\t\t}\n\t\t\tif debug {\n\t\t\t\tfmt.Printf(\"creating freevar %v in function at %s: %s\\n\",\n\t\t\t\t\tlen(env.function.FreeVars), env.function.Pos, use.id.Name)\n\t\t\t}\n\t\t}\n\n\t\t// Memoize, to avoid duplicate free vars\n\t\t// and redundant global (failing) lookups.\n\t\tenv.bind(use.id.Name, bind)\n\t}\n\treturn bind\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/debug.go",
    "content": "package starlark\n\nimport \"go.starlark.net/syntax\"\n\n// This file defines an experimental API for the debugging tools.\n// Some of these declarations expose details of internal packages.\n// (The debugger makes liberal use of exported fields of unexported types.)\n// Breaking changes may occur without notice.\n\n// Local returns the value of the i'th local variable.\n// It may be nil if not yet assigned.\n//\n// Local may be called only for frames whose Callable is a *Function (a\n// function defined by Starlark source code), and only while the frame\n// is active; it will panic otherwise.\n//\n// This function is provided only for debugging tools.\n//\n// THIS API IS EXPERIMENTAL AND MAY CHANGE WITHOUT NOTICE.\nfunc (fr *frame) Local(i int) Value { return fr.locals[i] }\n\n// DebugFrame is the debugger API for a frame of the interpreter's call stack.\n//\n// Most applications have no need for this API; use CallFrame instead.\n//\n// Clients must not retain a DebugFrame nor call any of its methods once\n// the current built-in call has returned or execution has resumed\n// after a breakpoint as this may have unpredictable effects, including\n// but not limited to retention of object that would otherwise be garbage.\ntype DebugFrame interface {\n\tCallable() Callable        // returns the frame's function\n\tLocal(i int) Value         // returns the value of the (Starlark) frame's ith local variable\n\tPosition() syntax.Position // returns the current position of execution in this frame\n}\n\n// DebugFrame returns the debugger interface for\n// the specified frame of the interpreter's call stack.\n// Frame numbering is as for Thread.CallFrame.\n//\n// This function is intended for use in debugging tools.\n// Most applications should have no need for it; use CallFrame instead.\nfunc (thread *Thread) DebugFrame(depth int) DebugFrame { return thread.frameAt(depth) }\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/empty.s",
    "content": "// The presence of this file allows the package to use the\n// \"go:linkname\" hack to call non-exported functions in the\n// Go runtime, such as hardware-accelerated string hashing.\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/eval.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage starlark\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"math/big\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync/atomic\"\n\t\"time\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n\t\"unsafe\"\n\n\t\"go.starlark.net/internal/compile\"\n\t\"go.starlark.net/internal/spell\"\n\t\"go.starlark.net/resolve\"\n\t\"go.starlark.net/syntax\"\n)\n\n// A Thread contains the state of a Starlark thread,\n// such as its call stack and thread-local storage.\n// The Thread is threaded throughout the evaluator.\ntype Thread struct {\n\t// Name is an optional name that describes the thread, for debugging.\n\tName string\n\n\t// stack is the stack of (internal) call frames.\n\tstack []*frame\n\n\t// Print is the client-supplied implementation of the Starlark\n\t// 'print' function. If nil, fmt.Fprintln(os.Stderr, msg) is\n\t// used instead.\n\tPrint func(thread *Thread, msg string)\n\n\t// Load is the client-supplied implementation of module loading.\n\t// Repeated calls with the same module name must return the same\n\t// module environment or error.\n\t// The error message need not include the module name.\n\t//\n\t// See example_test.go for some example implementations of Load.\n\tLoad func(thread *Thread, module string) (StringDict, error)\n\n\t// OnMaxSteps is called when the thread reaches the limit set by SetMaxExecutionSteps.\n\t// The default behavior is to call thread.Cancel(\"too many steps\").\n\tOnMaxSteps func(thread *Thread)\n\n\t// Steps a count of abstract computation steps executed\n\t// by this thread. It is incremented by the interpreter. It may be used\n\t// as a measure of the approximate cost of Starlark execution, by\n\t// computing the difference in its value before and after a computation.\n\t//\n\t// The precise meaning of \"step\" is not specified and may change.\n\tSteps, maxSteps uint64\n\n\t// cancelReason records the reason from the first call to Cancel.\n\tcancelReason *string\n\n\t// locals holds arbitrary \"thread-local\" Go values belonging to the client.\n\t// They are accessible to the client but not to any Starlark program.\n\tlocals map[string]interface{}\n\n\t// proftime holds the accumulated execution time since the last profile event.\n\tproftime time.Duration\n}\n\n// ExecutionSteps returns the current value of Steps.\nfunc (thread *Thread) ExecutionSteps() uint64 {\n\treturn thread.Steps\n}\n\n// SetMaxExecutionSteps sets a limit on the number of Starlark\n// computation steps that may be executed by this thread. If the\n// thread's step counter exceeds this limit, the interpreter calls\n// the optional OnMaxSteps function or the default behavior\n// of calling thread.Cancel(\"too many steps\").\nfunc (thread *Thread) SetMaxExecutionSteps(max uint64) {\n\tthread.maxSteps = max\n}\n\n// Uncancel resets the cancellation state.\n//\n// Unlike most methods of Thread, it is safe to call Uncancel from any\n// goroutine, even if the thread is actively executing.\nfunc (thread *Thread) Uncancel() {\n\tatomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&thread.cancelReason)), nil)\n}\n\n// Cancel causes execution of Starlark code in the specified thread to\n// promptly fail with an EvalError that includes the specified reason.\n// There may be a delay before the interpreter observes the cancellation\n// if the thread is currently in a call to a built-in function.\n//\n// Call [Uncancel] to reset the cancellation state.\n//\n// Unlike most methods of Thread, it is safe to call Cancel from any\n// goroutine, even if the thread is actively executing.\nfunc (thread *Thread) Cancel(reason string) {\n\t// Atomically set cancelReason, preserving earlier reason if any.\n\tatomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(&thread.cancelReason)), nil, unsafe.Pointer(&reason))\n}\n\n// SetLocal sets the thread-local value associated with the specified key.\n// It must not be called after execution begins.\nfunc (thread *Thread) SetLocal(key string, value interface{}) {\n\tif thread.locals == nil {\n\t\tthread.locals = make(map[string]interface{})\n\t}\n\tthread.locals[key] = value\n}\n\n// Local returns the thread-local value associated with the specified key.\nfunc (thread *Thread) Local(key string) interface{} {\n\treturn thread.locals[key]\n}\n\n// CallFrame returns a copy of the specified frame of the callstack.\n// It should only be used in built-ins called from Starlark code.\n// Depth 0 means the frame of the built-in itself, 1 is its caller, and so on.\n//\n// It is equivalent to CallStack().At(depth), but more efficient.\nfunc (thread *Thread) CallFrame(depth int) CallFrame {\n\treturn thread.frameAt(depth).asCallFrame()\n}\n\nfunc (thread *Thread) frameAt(depth int) *frame {\n\treturn thread.stack[len(thread.stack)-1-depth]\n}\n\n// CallStack returns a new slice containing the thread's stack of call frames.\nfunc (thread *Thread) CallStack() CallStack {\n\tframes := make([]CallFrame, len(thread.stack))\n\tfor i, fr := range thread.stack {\n\t\tframes[i] = fr.asCallFrame()\n\t}\n\treturn frames\n}\n\n// CallStackDepth returns the number of frames in the current call stack.\nfunc (thread *Thread) CallStackDepth() int { return len(thread.stack) }\n\n// A StringDict is a mapping from names to values, and represents\n// an environment such as the global variables of a module.\n// It is not a true starlark.Value.\ntype StringDict map[string]Value\n\n// Keys returns a new sorted slice of d's keys.\nfunc (d StringDict) Keys() []string {\n\tnames := make([]string, 0, len(d))\n\tfor name := range d {\n\t\tnames = append(names, name)\n\t}\n\tsort.Strings(names)\n\treturn names\n}\n\nfunc (d StringDict) String() string {\n\tbuf := new(strings.Builder)\n\tbuf.WriteByte('{')\n\tsep := \"\"\n\tfor _, name := range d.Keys() {\n\t\tbuf.WriteString(sep)\n\t\tbuf.WriteString(name)\n\t\tbuf.WriteString(\": \")\n\t\twriteValue(buf, d[name], nil)\n\t\tsep = \", \"\n\t}\n\tbuf.WriteByte('}')\n\treturn buf.String()\n}\n\nfunc (d StringDict) Freeze() {\n\tfor _, v := range d {\n\t\tv.Freeze()\n\t}\n}\n\n// Has reports whether the dictionary contains the specified key.\nfunc (d StringDict) Has(key string) bool { _, ok := d[key]; return ok }\n\n// A frame records a call to a Starlark function (including module toplevel)\n// or a built-in function or method.\ntype frame struct {\n\tcallable  Callable // current function (or toplevel) or built-in\n\tpc        uint32   // program counter (Starlark frames only)\n\tlocals    []Value  // local variables (Starlark frames only)\n\tspanStart int64    // start time of current profiler span\n}\n\n// Position returns the source position of the current point of execution in this frame.\nfunc (fr *frame) Position() syntax.Position {\n\tswitch c := fr.callable.(type) {\n\tcase *Function:\n\t\t// Starlark function\n\t\treturn c.funcode.Position(fr.pc)\n\tcase callableWithPosition:\n\t\t// If a built-in Callable defines\n\t\t// a Position method, use it.\n\t\treturn c.Position()\n\t}\n\treturn syntax.MakePosition(&builtinFilename, 0, 0)\n}\n\nvar builtinFilename = \"<builtin>\"\n\n// Function returns the frame's function or built-in.\nfunc (fr *frame) Callable() Callable { return fr.callable }\n\n// A CallStack is a stack of call frames, outermost first.\ntype CallStack []CallFrame\n\n// At returns a copy of the frame at depth i.\n// At(0) returns the topmost frame.\nfunc (stack CallStack) At(i int) CallFrame { return stack[len(stack)-1-i] }\n\n// Pop removes and returns the topmost frame.\nfunc (stack *CallStack) Pop() CallFrame {\n\tlast := len(*stack) - 1\n\ttop := (*stack)[last]\n\t*stack = (*stack)[:last]\n\treturn top\n}\n\n// String returns a user-friendly description of the stack.\nfunc (stack CallStack) String() string {\n\tout := new(strings.Builder)\n\tif len(stack) > 0 {\n\t\tfmt.Fprintf(out, \"Traceback (most recent call last):\\n\")\n\t}\n\tfor _, fr := range stack {\n\t\tfmt.Fprintf(out, \"  %s: in %s\\n\", fr.Pos, fr.Name)\n\t}\n\treturn out.String()\n}\n\n// An EvalError is a Starlark evaluation error and\n// a copy of the thread's stack at the moment of the error.\ntype EvalError struct {\n\tMsg       string\n\tCallStack CallStack\n\tcause     error\n}\n\n// A CallFrame represents the function name and current\n// position of execution of an enclosing call frame.\ntype CallFrame struct {\n\tName string\n\tPos  syntax.Position\n}\n\nfunc (fr *frame) asCallFrame() CallFrame {\n\treturn CallFrame{\n\t\tName: fr.Callable().Name(),\n\t\tPos:  fr.Position(),\n\t}\n}\n\nfunc (thread *Thread) evalError(err error) *EvalError {\n\treturn &EvalError{\n\t\tMsg:       err.Error(),\n\t\tCallStack: thread.CallStack(),\n\t\tcause:     err,\n\t}\n}\n\nfunc (e *EvalError) Error() string { return e.Msg }\n\n// Backtrace returns a user-friendly error message describing the stack\n// of calls that led to this error.\nfunc (e *EvalError) Backtrace() string {\n\t// If the topmost stack frame is a built-in function,\n\t// remove it from the stack and add print \"Error in fn:\".\n\tstack := e.CallStack\n\tsuffix := \"\"\n\tif last := len(stack) - 1; last >= 0 && stack[last].Pos.Filename() == builtinFilename {\n\t\tsuffix = \" in \" + stack[last].Name\n\t\tstack = stack[:last]\n\t}\n\treturn fmt.Sprintf(\"%sError%s: %s\", stack, suffix, e.Msg)\n}\n\nfunc (e *EvalError) Unwrap() error { return e.cause }\n\n// A Program is a compiled Starlark program.\n//\n// Programs are immutable, and contain no Values.\n// A Program may be created by parsing a source file (see SourceProgram)\n// or by loading a previously saved compiled program (see CompiledProgram).\ntype Program struct {\n\tcompiled *compile.Program\n}\n\n// CompilerVersion is the version number of the protocol for compiled\n// files. Applications must not run programs compiled by one version\n// with an interpreter at another version, and should thus incorporate\n// the compiler version into the cache key when reusing compiled code.\nconst CompilerVersion = compile.Version\n\n// Filename returns the name of the file from which this program was loaded.\nfunc (prog *Program) Filename() string { return prog.compiled.Toplevel.Pos.Filename() }\n\nfunc (prog *Program) String() string { return prog.Filename() }\n\n// NumLoads returns the number of load statements in the compiled program.\nfunc (prog *Program) NumLoads() int { return len(prog.compiled.Loads) }\n\n// Load(i) returns the name and position of the i'th module directly\n// loaded by this one, where 0 <= i < NumLoads().\n// The name is unresolved---exactly as it appears in the source.\nfunc (prog *Program) Load(i int) (string, syntax.Position) {\n\tid := prog.compiled.Loads[i]\n\treturn id.Name, id.Pos\n}\n\n// WriteTo writes the compiled module to the specified output stream.\nfunc (prog *Program) Write(out io.Writer) error {\n\tdata := prog.compiled.Encode()\n\t_, err := out.Write(data)\n\treturn err\n}\n\n// ExecFile calls [ExecFileOptions] using [syntax.LegacyFileOptions].\n// Deprecated: relies on legacy global variables.\nfunc ExecFile(thread *Thread, filename string, src interface{}, predeclared StringDict) (StringDict, error) {\n\treturn ExecFileOptions(syntax.LegacyFileOptions(), thread, filename, src, predeclared)\n}\n\n// ExecFileOptions parses, resolves, and executes a Starlark file in the\n// specified global environment, which may be modified during execution.\n//\n// Thread is the state associated with the Starlark thread.\n//\n// The filename and src parameters are as for syntax.Parse:\n// filename is the name of the file to execute,\n// and the name that appears in error messages;\n// src is an optional source of bytes to use\n// instead of filename.\n//\n// predeclared defines the predeclared names specific to this module.\n// Execution does not modify this dictionary, though it may mutate\n// its values.\n//\n// If ExecFileOptions fails during evaluation, it returns an *EvalError\n// containing a backtrace.\nfunc ExecFileOptions(opts *syntax.FileOptions, thread *Thread, filename string, src interface{}, predeclared StringDict) (StringDict, error) {\n\t// Parse, resolve, and compile a Starlark source file.\n\t_, mod, err := SourceProgramOptions(opts, filename, src, predeclared.Has)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tg, err := mod.Init(thread, predeclared)\n\tg.Freeze()\n\treturn g, err\n}\n\n// SourceProgram calls [SourceProgramOptions] using [syntax.LegacyFileOptions].\n// Deprecated: relies on legacy global variables.\nfunc SourceProgram(filename string, src interface{}, isPredeclared func(string) bool) (*syntax.File, *Program, error) {\n\treturn SourceProgramOptions(syntax.LegacyFileOptions(), filename, src, isPredeclared)\n}\n\n// SourceProgramOptions produces a new program by parsing, resolving,\n// and compiling a Starlark source file.\n// On success, it returns the parsed file and the compiled program.\n// The filename and src parameters are as for syntax.Parse.\n//\n// The isPredeclared predicate reports whether a name is\n// a pre-declared identifier of the current module.\n// Its typical value is predeclared.Has,\n// where predeclared is a StringDict of pre-declared values.\nfunc SourceProgramOptions(opts *syntax.FileOptions, filename string, src interface{}, isPredeclared func(string) bool) (*syntax.File, *Program, error) {\n\tf, err := opts.Parse(filename, src, 0)\n\tif err != nil {\n\t\treturn nil, nil, err\n\t}\n\tprog, err := FileProgram(f, isPredeclared)\n\treturn f, prog, err\n}\n\n// FileProgram produces a new program by resolving,\n// and compiling the Starlark source file syntax tree.\n// On success, it returns the compiled program.\n//\n// Resolving a syntax tree mutates it.\n// Do not call FileProgram more than once on the same file.\n//\n// The isPredeclared predicate reports whether a name is\n// a pre-declared identifier of the current module.\n// Its typical value is predeclared.Has,\n// where predeclared is a StringDict of pre-declared values.\nfunc FileProgram(f *syntax.File, isPredeclared func(string) bool) (*Program, error) {\n\tif err := resolve.File(f, isPredeclared, Universe.Has); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar pos syntax.Position\n\tif len(f.Stmts) > 0 {\n\t\tpos = syntax.Start(f.Stmts[0])\n\t} else {\n\t\tpos = syntax.MakePosition(&f.Path, 1, 1)\n\t}\n\n\tmodule := f.Module.(*resolve.Module)\n\tcompiled := compile.File(f.Options, f.Stmts, pos, \"<toplevel>\", module.Locals, module.Globals)\n\n\treturn &Program{compiled}, nil\n}\n\n// CompiledProgram produces a new program from the representation\n// of a compiled program previously saved by Program.Write.\nfunc CompiledProgram(in io.Reader) (*Program, error) {\n\tdata, err := io.ReadAll(in)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tcompiled, err := compile.DecodeProgram(data)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &Program{compiled}, nil\n}\n\n// Init creates a set of global variables for the program,\n// executes the toplevel code of the specified program,\n// and returns a new, unfrozen dictionary of the globals.\nfunc (prog *Program) Init(thread *Thread, predeclared StringDict) (StringDict, error) {\n\ttoplevel := makeToplevelFunction(prog.compiled, predeclared)\n\n\t_, err := Call(thread, toplevel, nil, nil)\n\n\t// Convert the global environment to a map.\n\t// We return a (partial) map even in case of error.\n\treturn toplevel.Globals(), err\n}\n\n// ExecREPLChunk compiles and executes file f in the specified thread\n// and global environment. This is a variant of ExecFile specialized to\n// the needs of a REPL, in which a sequence of input chunks, each\n// syntactically a File, manipulates the same set of module globals,\n// which are not frozen after execution.\n//\n// This function is intended to support only go.starlark.net/repl.\n// Its API stability is not guaranteed.\nfunc ExecREPLChunk(f *syntax.File, thread *Thread, globals StringDict) error {\n\tvar predeclared StringDict\n\n\t// -- variant of FileProgram --\n\n\tif err := resolve.REPLChunk(f, globals.Has, predeclared.Has, Universe.Has); err != nil {\n\t\treturn err\n\t}\n\n\tvar pos syntax.Position\n\tif len(f.Stmts) > 0 {\n\t\tpos = syntax.Start(f.Stmts[0])\n\t} else {\n\t\tpos = syntax.MakePosition(&f.Path, 1, 1)\n\t}\n\n\tmodule := f.Module.(*resolve.Module)\n\tcompiled := compile.File(f.Options, f.Stmts, pos, \"<toplevel>\", module.Locals, module.Globals)\n\tprog := &Program{compiled}\n\n\t// -- variant of Program.Init --\n\n\ttoplevel := makeToplevelFunction(prog.compiled, predeclared)\n\n\t// Initialize module globals from parameter.\n\tfor i, id := range prog.compiled.Globals {\n\t\tif v := globals[id.Name]; v != nil {\n\t\t\ttoplevel.module.globals[i] = v\n\t\t}\n\t}\n\n\t_, err := Call(thread, toplevel, nil, nil)\n\n\t// Reflect changes to globals back to parameter, even after an error.\n\tfor i, id := range prog.compiled.Globals {\n\t\tif v := toplevel.module.globals[i]; v != nil {\n\t\t\tglobals[id.Name] = v\n\t\t}\n\t}\n\n\treturn err\n}\n\nfunc makeToplevelFunction(prog *compile.Program, predeclared StringDict) *Function {\n\t// Create the Starlark value denoted by each program constant c.\n\tconstants := make([]Value, len(prog.Constants))\n\tfor i, c := range prog.Constants {\n\t\tvar v Value\n\t\tswitch c := c.(type) {\n\t\tcase int64:\n\t\t\tv = MakeInt64(c)\n\t\tcase *big.Int:\n\t\t\tv = MakeBigInt(c)\n\t\tcase string:\n\t\t\tv = String(c)\n\t\tcase compile.Bytes:\n\t\t\tv = Bytes(c)\n\t\tcase float64:\n\t\t\tv = Float(c)\n\t\tdefault:\n\t\t\tlog.Panicf(\"unexpected constant %T: %v\", c, c)\n\t\t}\n\t\tconstants[i] = v\n\t}\n\n\treturn &Function{\n\t\tfuncode: prog.Toplevel,\n\t\tmodule: &module{\n\t\t\tprogram:     prog,\n\t\t\tpredeclared: predeclared,\n\t\t\tglobals:     make([]Value, len(prog.Globals)),\n\t\t\tconstants:   constants,\n\t\t},\n\t}\n}\n\n// Eval calls [EvalOptions] using [syntax.LegacyFileOptions].\n// Deprecated: relies on legacy global variables.\nfunc Eval(thread *Thread, filename string, src interface{}, env StringDict) (Value, error) {\n\treturn EvalOptions(syntax.LegacyFileOptions(), thread, filename, src, env)\n}\n\n// EvalOptions parses, resolves, and evaluates an expression within the\n// specified (predeclared) environment.\n//\n// Evaluation cannot mutate the environment dictionary itself,\n// though it may modify variables reachable from the dictionary.\n//\n// The filename and src parameters are as for syntax.Parse.\n//\n// If EvalOptions fails during evaluation, it returns an *EvalError\n// containing a backtrace.\nfunc EvalOptions(opts *syntax.FileOptions, thread *Thread, filename string, src interface{}, env StringDict) (Value, error) {\n\texpr, err := opts.ParseExpr(filename, src, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tf, err := makeExprFunc(opts, expr, env)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn Call(thread, f, nil, nil)\n}\n\n// EvalExpr calls [EvalExprOptions] using [syntax.LegacyFileOptions].\n// Deprecated: relies on legacy global variables.\nfunc EvalExpr(thread *Thread, expr syntax.Expr, env StringDict) (Value, error) {\n\treturn EvalExprOptions(syntax.LegacyFileOptions(), thread, expr, env)\n}\n\n// EvalExprOptions resolves and evaluates an expression within the\n// specified (predeclared) environment.\n// Evaluating a comma-separated list of expressions yields a tuple value.\n//\n// Resolving an expression mutates it.\n// Do not call EvalExprOptions more than once for the same expression.\n//\n// Evaluation cannot mutate the environment dictionary itself,\n// though it may modify variables reachable from the dictionary.\n//\n// If EvalExprOptions fails during evaluation, it returns an *EvalError\n// containing a backtrace.\nfunc EvalExprOptions(opts *syntax.FileOptions, thread *Thread, expr syntax.Expr, env StringDict) (Value, error) {\n\tfn, err := makeExprFunc(opts, expr, env)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn Call(thread, fn, nil, nil)\n}\n\n// ExprFunc calls [ExprFuncOptions] using [syntax.LegacyFileOptions].\n// Deprecated: relies on legacy global variables.\nfunc ExprFunc(filename string, src interface{}, env StringDict) (*Function, error) {\n\treturn ExprFuncOptions(syntax.LegacyFileOptions(), filename, src, env)\n}\n\n// ExprFunc returns a no-argument function\n// that evaluates the expression whose source is src.\nfunc ExprFuncOptions(options *syntax.FileOptions, filename string, src interface{}, env StringDict) (*Function, error) {\n\texpr, err := options.ParseExpr(filename, src, 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn makeExprFunc(options, expr, env)\n}\n\n// makeExprFunc returns a no-argument function whose body is expr.\n// The options must be consistent with those used when parsing expr.\nfunc makeExprFunc(opts *syntax.FileOptions, expr syntax.Expr, env StringDict) (*Function, error) {\n\tlocals, err := resolve.ExprOptions(opts, expr, env.Has, Universe.Has)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn makeToplevelFunction(compile.Expr(opts, expr, \"<expr>\", locals), env), nil\n}\n\n// The following functions are primitive operations of the byte code interpreter.\n\n// list += iterable\nfunc listExtend(x *List, y Iterable) {\n\tif ylist, ok := y.(*List); ok {\n\t\t// fast path: list += list\n\t\tx.elems = append(x.elems, ylist.elems...)\n\t} else {\n\t\titer := y.Iterate()\n\t\tdefer iter.Done()\n\t\tvar z Value\n\t\tfor iter.Next(&z) {\n\t\t\tx.elems = append(x.elems, z)\n\t\t}\n\t}\n}\n\n// getAttr implements x.dot.\nfunc getAttr(x Value, name string) (Value, error) {\n\thasAttr, ok := x.(HasAttrs)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"%s has no .%s field or method\", x.Type(), name)\n\t}\n\n\tvar errmsg string\n\tv, err := hasAttr.Attr(name)\n\tif err == nil {\n\t\tif v != nil {\n\t\t\treturn v, nil // success\n\t\t}\n\t\t// (nil, nil) => generic error\n\t\terrmsg = fmt.Sprintf(\"%s has no .%s field or method\", x.Type(), name)\n\t} else if nsa, ok := err.(NoSuchAttrError); ok {\n\t\terrmsg = string(nsa)\n\t} else {\n\t\treturn nil, err // return error as is\n\t}\n\n\t// add spelling hint\n\tif n := spell.Nearest(name, hasAttr.AttrNames()); n != \"\" {\n\t\terrmsg = fmt.Sprintf(\"%s (did you mean .%s?)\", errmsg, n)\n\t}\n\n\treturn nil, fmt.Errorf(\"%s\", errmsg)\n}\n\n// setField implements x.name = y.\nfunc setField(x Value, name string, y Value) error {\n\tif x, ok := x.(HasSetField); ok {\n\t\terr := x.SetField(name, y)\n\t\tif _, ok := err.(NoSuchAttrError); ok {\n\t\t\t// No such field: check spelling.\n\t\t\tif n := spell.Nearest(name, x.AttrNames()); n != \"\" {\n\t\t\t\terr = fmt.Errorf(\"%s (did you mean .%s?)\", err, n)\n\t\t\t}\n\t\t}\n\t\treturn err\n\t}\n\n\treturn fmt.Errorf(\"can't assign to .%s field of %s\", name, x.Type())\n}\n\n// getIndex implements x[y].\nfunc getIndex(x, y Value) (Value, error) {\n\tswitch x := x.(type) {\n\tcase Mapping: // dict\n\t\tz, found, err := x.Get(y)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif !found {\n\t\t\treturn nil, fmt.Errorf(\"key %v not in %s\", y, x.Type())\n\t\t}\n\t\treturn z, nil\n\n\tcase Indexable: // string, list, tuple\n\t\tn := x.Len()\n\t\ti, err := AsInt32(y)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"%s index: %s\", x.Type(), err)\n\t\t}\n\t\torigI := i\n\t\tif i < 0 {\n\t\t\ti += n\n\t\t}\n\t\tif i < 0 || i >= n {\n\t\t\treturn nil, outOfRange(origI, n, x)\n\t\t}\n\t\treturn x.Index(i), nil\n\t}\n\treturn nil, fmt.Errorf(\"unhandled index operation %s[%s]\", x.Type(), y.Type())\n}\n\nfunc outOfRange(i, n int, x Value) error {\n\tif n == 0 {\n\t\treturn fmt.Errorf(\"index %d out of range: empty %s\", i, x.Type())\n\t} else {\n\t\treturn fmt.Errorf(\"%s index %d out of range [%d:%d]\", x.Type(), i, -n, n-1)\n\t}\n}\n\n// setIndex implements x[y] = z.\nfunc setIndex(x, y, z Value) error {\n\tswitch x := x.(type) {\n\tcase HasSetKey:\n\t\tif err := x.SetKey(y, z); err != nil {\n\t\t\treturn err\n\t\t}\n\n\tcase HasSetIndex:\n\t\tn := x.Len()\n\t\ti, err := AsInt32(y)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\torigI := i\n\t\tif i < 0 {\n\t\t\ti += n\n\t\t}\n\t\tif i < 0 || i >= n {\n\t\t\treturn outOfRange(origI, n, x)\n\t\t}\n\t\treturn x.SetIndex(i, z)\n\n\tdefault:\n\t\treturn fmt.Errorf(\"%s value does not support item assignment\", x.Type())\n\t}\n\treturn nil\n}\n\n// Unary applies a unary operator (+, -, ~, not) to its operand.\nfunc Unary(op syntax.Token, x Value) (Value, error) {\n\t// The NOT operator is not customizable.\n\tif op == syntax.NOT {\n\t\treturn !x.Truth(), nil\n\t}\n\n\t// Int, Float, and user-defined types\n\tif x, ok := x.(HasUnary); ok {\n\t\t// (nil, nil) => unhandled\n\t\ty, err := x.Unary(op)\n\t\tif y != nil || err != nil {\n\t\t\treturn y, err\n\t\t}\n\t}\n\n\treturn nil, fmt.Errorf(\"unknown unary op: %s %s\", op, x.Type())\n}\n\n// Binary applies a strict binary operator (not AND or OR) to its operands.\n// For equality tests or ordered comparisons, use Compare instead.\nfunc Binary(op syntax.Token, x, y Value) (Value, error) {\n\tswitch op {\n\tcase syntax.PLUS:\n\t\tswitch x := x.(type) {\n\t\tcase String:\n\t\t\tif y, ok := y.(String); ok {\n\t\t\t\treturn x + y, nil\n\t\t\t}\n\t\tcase Int:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Int:\n\t\t\t\treturn x.Add(y), nil\n\t\t\tcase Float:\n\t\t\t\txf, err := x.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\treturn xf + y, nil\n\t\t\t}\n\t\tcase Float:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Float:\n\t\t\t\treturn x + y, nil\n\t\t\tcase Int:\n\t\t\t\tyf, err := y.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\treturn x + yf, nil\n\t\t\t}\n\t\tcase *List:\n\t\t\tif y, ok := y.(*List); ok {\n\t\t\t\tz := make([]Value, 0, x.Len()+y.Len())\n\t\t\t\tz = append(z, x.elems...)\n\t\t\t\tz = append(z, y.elems...)\n\t\t\t\treturn NewList(z), nil\n\t\t\t}\n\t\tcase Tuple:\n\t\t\tif y, ok := y.(Tuple); ok {\n\t\t\t\tz := make(Tuple, 0, len(x)+len(y))\n\t\t\t\tz = append(z, x...)\n\t\t\t\tz = append(z, y...)\n\t\t\t\treturn z, nil\n\t\t\t}\n\t\t}\n\n\tcase syntax.MINUS:\n\t\tswitch x := x.(type) {\n\t\tcase Int:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Int:\n\t\t\t\treturn x.Sub(y), nil\n\t\t\tcase Float:\n\t\t\t\txf, err := x.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\treturn xf - y, nil\n\t\t\t}\n\t\tcase Float:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Float:\n\t\t\t\treturn x - y, nil\n\t\t\tcase Int:\n\t\t\t\tyf, err := y.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\treturn x - yf, nil\n\t\t\t}\n\t\tcase *Set: // difference\n\t\t\tif y, ok := y.(*Set); ok {\n\t\t\t\titer := y.Iterate()\n\t\t\t\tdefer iter.Done()\n\t\t\t\treturn x.Difference(iter)\n\t\t\t}\n\t\t}\n\n\tcase syntax.STAR:\n\t\tswitch x := x.(type) {\n\t\tcase Int:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Int:\n\t\t\t\treturn x.Mul(y), nil\n\t\t\tcase Float:\n\t\t\t\txf, err := x.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\treturn xf * y, nil\n\t\t\tcase String:\n\t\t\t\treturn stringRepeat(y, x)\n\t\t\tcase Bytes:\n\t\t\t\treturn bytesRepeat(y, x)\n\t\t\tcase *List:\n\t\t\t\telems, err := tupleRepeat(Tuple(y.elems), x)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\treturn NewList(elems), nil\n\t\t\tcase Tuple:\n\t\t\t\treturn tupleRepeat(y, x)\n\t\t\t}\n\t\tcase Float:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Float:\n\t\t\t\treturn x * y, nil\n\t\t\tcase Int:\n\t\t\t\tyf, err := y.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\treturn x * yf, nil\n\t\t\t}\n\t\tcase String:\n\t\t\tif y, ok := y.(Int); ok {\n\t\t\t\treturn stringRepeat(x, y)\n\t\t\t}\n\t\tcase Bytes:\n\t\t\tif y, ok := y.(Int); ok {\n\t\t\t\treturn bytesRepeat(x, y)\n\t\t\t}\n\t\tcase *List:\n\t\t\tif y, ok := y.(Int); ok {\n\t\t\t\telems, err := tupleRepeat(Tuple(x.elems), y)\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\treturn NewList(elems), nil\n\t\t\t}\n\t\tcase Tuple:\n\t\t\tif y, ok := y.(Int); ok {\n\t\t\t\treturn tupleRepeat(x, y)\n\t\t\t}\n\n\t\t}\n\n\tcase syntax.SLASH:\n\t\tswitch x := x.(type) {\n\t\tcase Int:\n\t\t\txf, err := x.finiteFloat()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Int:\n\t\t\t\tyf, err := y.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tif yf == 0.0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floating-point division by zero\")\n\t\t\t\t}\n\t\t\t\treturn xf / yf, nil\n\t\t\tcase Float:\n\t\t\t\tif y == 0.0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floating-point division by zero\")\n\t\t\t\t}\n\t\t\t\treturn xf / y, nil\n\t\t\t}\n\t\tcase Float:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Float:\n\t\t\t\tif y == 0.0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floating-point division by zero\")\n\t\t\t\t}\n\t\t\t\treturn x / y, nil\n\t\t\tcase Int:\n\t\t\t\tyf, err := y.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tif yf == 0.0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floating-point division by zero\")\n\t\t\t\t}\n\t\t\t\treturn x / yf, nil\n\t\t\t}\n\t\t}\n\n\tcase syntax.SLASHSLASH:\n\t\tswitch x := x.(type) {\n\t\tcase Int:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Int:\n\t\t\t\tif y.Sign() == 0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floored division by zero\")\n\t\t\t\t}\n\t\t\t\treturn x.Div(y), nil\n\t\t\tcase Float:\n\t\t\t\txf, err := x.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tif y == 0.0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floored division by zero\")\n\t\t\t\t}\n\t\t\t\treturn floor(xf / y), nil\n\t\t\t}\n\t\tcase Float:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Float:\n\t\t\t\tif y == 0.0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floored division by zero\")\n\t\t\t\t}\n\t\t\t\treturn floor(x / y), nil\n\t\t\tcase Int:\n\t\t\t\tyf, err := y.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tif yf == 0.0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floored division by zero\")\n\t\t\t\t}\n\t\t\t\treturn floor(x / yf), nil\n\t\t\t}\n\t\t}\n\n\tcase syntax.PERCENT:\n\t\tswitch x := x.(type) {\n\t\tcase Int:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Int:\n\t\t\t\tif y.Sign() == 0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"integer modulo by zero\")\n\t\t\t\t}\n\t\t\t\treturn x.Mod(y), nil\n\t\t\tcase Float:\n\t\t\t\txf, err := x.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\tif y == 0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floating-point modulo by zero\")\n\t\t\t\t}\n\t\t\t\treturn xf.Mod(y), nil\n\t\t\t}\n\t\tcase Float:\n\t\t\tswitch y := y.(type) {\n\t\t\tcase Float:\n\t\t\t\tif y == 0.0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floating-point modulo by zero\")\n\t\t\t\t}\n\t\t\t\treturn x.Mod(y), nil\n\t\t\tcase Int:\n\t\t\t\tif y.Sign() == 0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"floating-point modulo by zero\")\n\t\t\t\t}\n\t\t\t\tyf, err := y.finiteFloat()\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t}\n\t\t\t\treturn x.Mod(yf), nil\n\t\t\t}\n\t\tcase String:\n\t\t\treturn interpolate(string(x), y)\n\t\t}\n\n\tcase syntax.NOT_IN:\n\t\tz, err := Binary(syntax.IN, x, y)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn !z.Truth(), nil\n\n\tcase syntax.IN:\n\t\tswitch y := y.(type) {\n\t\tcase *List:\n\t\t\tfor _, elem := range y.elems {\n\t\t\t\tif eq, err := Equal(elem, x); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t} else if eq {\n\t\t\t\t\treturn True, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn False, nil\n\t\tcase Tuple:\n\t\t\tfor _, elem := range y {\n\t\t\t\tif eq, err := Equal(elem, x); err != nil {\n\t\t\t\t\treturn nil, err\n\t\t\t\t} else if eq {\n\t\t\t\t\treturn True, nil\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn False, nil\n\t\tcase Mapping: // e.g. dict\n\t\t\t// Ignore error from Get as we cannot distinguish true\n\t\t\t// errors (value cycle, type error) from \"key not found\".\n\t\t\t_, found, _ := y.Get(x)\n\t\t\treturn Bool(found), nil\n\t\tcase *Set:\n\t\t\tok, err := y.Has(x)\n\t\t\treturn Bool(ok), err\n\t\tcase String:\n\t\t\tneedle, ok := x.(String)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"'in <string>' requires string as left operand, not %s\", x.Type())\n\t\t\t}\n\t\t\treturn Bool(strings.Contains(string(y), string(needle))), nil\n\t\tcase Bytes:\n\t\t\tswitch needle := x.(type) {\n\t\t\tcase Bytes:\n\t\t\t\treturn Bool(strings.Contains(string(y), string(needle))), nil\n\t\t\tcase Int:\n\t\t\t\tvar b byte\n\t\t\t\tif err := AsInt(needle, &b); err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"int in bytes: %s\", err)\n\t\t\t\t}\n\t\t\t\treturn Bool(strings.IndexByte(string(y), b) >= 0), nil\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"'in bytes' requires bytes or int as left operand, not %s\", x.Type())\n\t\t\t}\n\t\tcase rangeValue:\n\t\t\ti, err := NumberToInt(x)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"'in <range>' requires integer as left operand, not %s\", x.Type())\n\t\t\t}\n\t\t\treturn Bool(y.contains(i)), nil\n\t\t}\n\n\tcase syntax.PIPE:\n\t\tswitch x := x.(type) {\n\t\tcase Int:\n\t\t\tif y, ok := y.(Int); ok {\n\t\t\t\treturn x.Or(y), nil\n\t\t\t}\n\n\t\tcase *Dict: // union\n\t\t\tif y, ok := y.(*Dict); ok {\n\t\t\t\treturn x.Union(y), nil\n\t\t\t}\n\n\t\tcase *Set: // union\n\t\t\tif y, ok := y.(*Set); ok {\n\t\t\t\titer := Iterate(y)\n\t\t\t\tdefer iter.Done()\n\t\t\t\treturn x.Union(iter)\n\t\t\t}\n\t\t}\n\n\tcase syntax.AMP:\n\t\tswitch x := x.(type) {\n\t\tcase Int:\n\t\t\tif y, ok := y.(Int); ok {\n\t\t\t\treturn x.And(y), nil\n\t\t\t}\n\t\tcase *Set: // intersection\n\t\t\tif y, ok := y.(*Set); ok {\n\t\t\t\titer := y.Iterate()\n\t\t\t\tdefer iter.Done()\n\t\t\t\treturn x.Intersection(iter)\n\t\t\t}\n\t\t}\n\n\tcase syntax.CIRCUMFLEX:\n\t\tswitch x := x.(type) {\n\t\tcase Int:\n\t\t\tif y, ok := y.(Int); ok {\n\t\t\t\treturn x.Xor(y), nil\n\t\t\t}\n\t\tcase *Set: // symmetric difference\n\t\t\tif y, ok := y.(*Set); ok {\n\t\t\t\titer := y.Iterate()\n\t\t\t\tdefer iter.Done()\n\t\t\t\treturn x.SymmetricDifference(iter)\n\t\t\t}\n\t\t}\n\n\tcase syntax.LTLT, syntax.GTGT:\n\t\tif x, ok := x.(Int); ok {\n\t\t\ty, err := AsInt32(y)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t\tif y < 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"negative shift count: %v\", y)\n\t\t\t}\n\t\t\tif op == syntax.LTLT {\n\t\t\t\tif y >= 512 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"shift count too large: %v\", y)\n\t\t\t\t}\n\t\t\t\treturn x.Lsh(uint(y)), nil\n\t\t\t} else {\n\t\t\t\treturn x.Rsh(uint(y)), nil\n\t\t\t}\n\t\t}\n\n\tdefault:\n\t\t// unknown operator\n\t\tgoto unknown\n\t}\n\n\t// user-defined types\n\t// (nil, nil) => unhandled\n\tif x, ok := x.(HasBinary); ok {\n\t\tz, err := x.Binary(op, y, Left)\n\t\tif z != nil || err != nil {\n\t\t\treturn z, err\n\t\t}\n\t}\n\tif y, ok := y.(HasBinary); ok {\n\t\tz, err := y.Binary(op, x, Right)\n\t\tif z != nil || err != nil {\n\t\t\treturn z, err\n\t\t}\n\t}\n\n\t// unsupported operand types\nunknown:\n\treturn nil, fmt.Errorf(\"unknown binary op: %s %s %s\", x.Type(), op, y.Type())\n}\n\n// It's always possible to overeat in small bites but we'll\n// try to stop someone swallowing the world in one gulp.\nconst maxAlloc = 1 << 30\n\nfunc tupleRepeat(elems Tuple, n Int) (Tuple, error) {\n\tif len(elems) == 0 {\n\t\treturn nil, nil\n\t}\n\ti, err := AsInt32(n)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"repeat count %s too large\", n)\n\t}\n\tif i < 1 {\n\t\treturn nil, nil\n\t}\n\t// Inv: i > 0, len > 0\n\tsz := len(elems) * i\n\tif sz < 0 || sz >= maxAlloc { // sz < 0 => overflow\n\t\t// Don't print sz.\n\t\treturn nil, fmt.Errorf(\"excessive repeat (%d * %d elements)\", len(elems), i)\n\t}\n\tres := make([]Value, sz)\n\t// copy elems into res, doubling each time\n\tx := copy(res, elems)\n\tfor x < len(res) {\n\t\tcopy(res[x:], res[:x])\n\t\tx *= 2\n\t}\n\treturn res, nil\n}\n\nfunc bytesRepeat(b Bytes, n Int) (Bytes, error) {\n\tres, err := stringRepeat(String(b), n)\n\treturn Bytes(res), err\n}\n\nfunc stringRepeat(s String, n Int) (String, error) {\n\tif s == \"\" {\n\t\treturn \"\", nil\n\t}\n\ti, err := AsInt32(n)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"repeat count %s too large\", n)\n\t}\n\tif i < 1 {\n\t\treturn \"\", nil\n\t}\n\t// Inv: i > 0, len > 0\n\tsz := len(s) * i\n\tif sz < 0 || sz >= maxAlloc { // sz < 0 => overflow\n\t\t// Don't print sz.\n\t\treturn \"\", fmt.Errorf(\"excessive repeat (%d * %d elements)\", len(s), i)\n\t}\n\treturn String(strings.Repeat(string(s), i)), nil\n}\n\n// Call calls the function fn with the specified positional and keyword arguments.\nfunc Call(thread *Thread, fn Value, args Tuple, kwargs []Tuple) (Value, error) {\n\tc, ok := fn.(Callable)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"invalid call of non-function (%s)\", fn.Type())\n\t}\n\n\t// Allocate and push a new frame.\n\tvar fr *frame\n\t// Optimization: use slack portion of thread.stack\n\t// slice as a freelist of empty frames.\n\tif n := len(thread.stack); n < cap(thread.stack) {\n\t\tfr = thread.stack[n : n+1][0]\n\t}\n\tif fr == nil {\n\t\tfr = new(frame)\n\t}\n\n\tif thread.stack == nil {\n\t\t// one-time initialization of thread\n\t\tif thread.maxSteps == 0 {\n\t\t\tthread.maxSteps-- // (MaxUint64)\n\t\t}\n\t}\n\n\tthread.stack = append(thread.stack, fr) // push\n\n\tfr.callable = c\n\n\tthread.beginProfSpan()\n\n\t// Use defer to ensure that panics from built-ins\n\t// pass through the interpreter without leaving\n\t// it in a bad state.\n\tdefer func() {\n\t\tthread.endProfSpan()\n\n\t\t// clear out any references\n\t\t// TODO(adonovan): opt: zero fr.Locals and\n\t\t// reuse it if it is large enough.\n\t\t*fr = frame{}\n\n\t\tthread.stack = thread.stack[:len(thread.stack)-1] // pop\n\t}()\n\n\tresult, err := c.CallInternal(thread, args, kwargs)\n\n\t// Sanity check: nil is not a valid Starlark value.\n\tif result == nil && err == nil {\n\t\terr = fmt.Errorf(\"internal error: nil (not None) returned from %s\", fn)\n\t}\n\n\t// Always return an EvalError with an accurate frame.\n\tif err != nil {\n\t\tif _, ok := err.(*EvalError); !ok {\n\t\t\terr = thread.evalError(err)\n\t\t}\n\t}\n\n\treturn result, err\n}\n\nfunc slice(x, lo, hi, step_ Value) (Value, error) {\n\tsliceable, ok := x.(Sliceable)\n\tif !ok {\n\t\treturn nil, fmt.Errorf(\"invalid slice operand %s\", x.Type())\n\t}\n\n\tn := sliceable.Len()\n\tstep := 1\n\tif step_ != None {\n\t\tvar err error\n\t\tstep, err = AsInt32(step_)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid slice step: %s\", err)\n\t\t}\n\t\tif step == 0 {\n\t\t\treturn nil, fmt.Errorf(\"zero is not a valid slice step\")\n\t\t}\n\t}\n\n\t// TODO(adonovan): opt: preallocate result array.\n\n\tvar start, end int\n\tif step > 0 {\n\t\t// positive stride\n\t\t// default indices are [0:n].\n\t\tvar err error\n\t\tstart, end, err = indices(lo, hi, n)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tif end < start {\n\t\t\tend = start // => empty result\n\t\t}\n\t} else {\n\t\t// negative stride\n\t\t// default indices are effectively [n-1:-1], though to\n\t\t// get this effect using explicit indices requires\n\t\t// [n-1:-1-n:-1] because of the treatment of -ve values.\n\t\tstart = n - 1\n\t\tif err := asIndex(lo, n, &start); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid start index: %s\", err)\n\t\t}\n\t\tif start >= n {\n\t\t\tstart = n - 1\n\t\t}\n\n\t\tend = -1\n\t\tif err := asIndex(hi, n, &end); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid end index: %s\", err)\n\t\t}\n\t\tif end < -1 {\n\t\t\tend = -1\n\t\t}\n\n\t\tif start < end {\n\t\t\tstart = end // => empty result\n\t\t}\n\t}\n\n\treturn sliceable.Slice(start, end, step), nil\n}\n\n// From Hacker's Delight, section 2.8.\nfunc signum64(x int64) int { return int(uint64(x>>63) | uint64(-x)>>63) }\nfunc signum(x int) int     { return signum64(int64(x)) }\n\n// indices converts start_ and end_ to indices in the range [0:len].\n// The start index defaults to 0 and the end index defaults to len.\n// An index -len < i < 0 is treated like i+len.\n// All other indices outside the range are clamped to the nearest value in the range.\n// Beware: start may be greater than end.\n// This function is suitable only for slices with positive strides.\nfunc indices(start_, end_ Value, len int) (start, end int, err error) {\n\tstart = 0\n\tif err := asIndex(start_, len, &start); err != nil {\n\t\treturn 0, 0, fmt.Errorf(\"invalid start index: %s\", err)\n\t}\n\t// Clamp to [0:len].\n\tif start < 0 {\n\t\tstart = 0\n\t} else if start > len {\n\t\tstart = len\n\t}\n\n\tend = len\n\tif err := asIndex(end_, len, &end); err != nil {\n\t\treturn 0, 0, fmt.Errorf(\"invalid end index: %s\", err)\n\t}\n\t// Clamp to [0:len].\n\tif end < 0 {\n\t\tend = 0\n\t} else if end > len {\n\t\tend = len\n\t}\n\n\treturn start, end, nil\n}\n\n// asIndex sets *result to the integer value of v, adding len to it\n// if it is negative.  If v is nil or None, *result is unchanged.\nfunc asIndex(v Value, len int, result *int) error {\n\tif v != nil && v != None {\n\t\tvar err error\n\t\t*result, err = AsInt32(v)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif *result < 0 {\n\t\t\t*result += len\n\t\t}\n\t}\n\treturn nil\n}\n\n// setArgs sets the values of the formal parameters of function fn in\n// based on the actual parameter values in args and kwargs.\nfunc setArgs(locals []Value, fn *Function, args Tuple, kwargs []Tuple) error {\n\n\t// This is the general schema of a function:\n\t//\n\t//   def f(p1, p2=dp2, p3=dp3, *args, k1, k2=dk2, k3, **kwargs)\n\t//\n\t// The p parameters are non-kwonly, and may be specified positionally.\n\t// The k parameters are kwonly, and must be specified by name.\n\t// The defaults tuple is (dp2, dp3, mandatory, dk2, mandatory).\n\t//\n\t// Arguments are processed as follows:\n\t// - positional arguments are bound to a prefix of [p1, p2, p3].\n\t// - surplus positional arguments are bound to *args.\n\t// - keyword arguments are bound to any of {p1, p2, p3, k1, k2, k3};\n\t//   duplicate bindings are rejected.\n\t// - surplus keyword arguments are bound to **kwargs.\n\t// - defaults are bound to each parameter from p2 to k3 if no value was set.\n\t//   default values come from the tuple above.\n\t//   It is an error if the tuple entry for an unset parameter is 'mandatory'.\n\n\t// Nullary function?\n\tif fn.NumParams() == 0 {\n\t\tif nactual := len(args) + len(kwargs); nactual > 0 {\n\t\t\treturn fmt.Errorf(\"function %s accepts no arguments (%d given)\", fn.Name(), nactual)\n\t\t}\n\t\treturn nil\n\t}\n\n\tcond := func(x bool, y, z interface{}) interface{} {\n\t\tif x {\n\t\t\treturn y\n\t\t}\n\t\treturn z\n\t}\n\n\t// nparams is the number of ordinary parameters (sans *args and **kwargs).\n\tnparams := fn.NumParams()\n\tvar kwdict *Dict\n\tif fn.HasKwargs() {\n\t\tnparams--\n\t\tkwdict = new(Dict)\n\t\tlocals[nparams] = kwdict\n\t}\n\tif fn.HasVarargs() {\n\t\tnparams--\n\t}\n\n\t// nonkwonly is the number of non-kwonly parameters.\n\tnonkwonly := nparams - fn.NumKwonlyParams()\n\n\t// Too many positional args?\n\tn := len(args)\n\tif len(args) > nonkwonly {\n\t\tif !fn.HasVarargs() {\n\t\t\treturn fmt.Errorf(\"function %s accepts %s%d positional argument%s (%d given)\",\n\t\t\t\tfn.Name(),\n\t\t\t\tcond(len(fn.defaults) > fn.NumKwonlyParams(), \"at most \", \"\"),\n\t\t\t\tnonkwonly,\n\t\t\t\tcond(nonkwonly == 1, \"\", \"s\"),\n\t\t\t\tlen(args))\n\t\t}\n\t\tn = nonkwonly\n\t}\n\n\t// Bind positional arguments to non-kwonly parameters.\n\tfor i := 0; i < n; i++ {\n\t\tlocals[i] = args[i]\n\t}\n\n\t// Bind surplus positional arguments to *args parameter.\n\tif fn.HasVarargs() {\n\t\ttuple := make(Tuple, len(args)-n)\n\t\tfor i := n; i < len(args); i++ {\n\t\t\ttuple[i-n] = args[i]\n\t\t}\n\t\tlocals[nparams] = tuple\n\t}\n\n\t// Bind keyword arguments to parameters.\n\tparamIdents := fn.funcode.Locals[:nparams]\n\tfor _, pair := range kwargs {\n\t\tk, v := pair[0].(String), pair[1]\n\t\tif i := findParam(paramIdents, string(k)); i >= 0 {\n\t\t\tif locals[i] != nil {\n\t\t\t\treturn fmt.Errorf(\"function %s got multiple values for parameter %s\", fn.Name(), k)\n\t\t\t}\n\t\t\tlocals[i] = v\n\t\t\tcontinue\n\t\t}\n\t\tif kwdict == nil {\n\t\t\treturn fmt.Errorf(\"function %s got an unexpected keyword argument %s\", fn.Name(), k)\n\t\t}\n\t\toldlen := kwdict.Len()\n\t\tkwdict.SetKey(k, v)\n\t\tif kwdict.Len() == oldlen {\n\t\t\treturn fmt.Errorf(\"function %s got multiple values for parameter %s\", fn.Name(), k)\n\t\t}\n\t}\n\n\t// Are defaults required?\n\tif n < nparams || fn.NumKwonlyParams() > 0 {\n\t\tm := nparams - len(fn.defaults) // first default\n\n\t\t// Report errors for missing required arguments.\n\t\tvar missing []string\n\t\tvar i int\n\t\tfor i = n; i < m; i++ {\n\t\t\tif locals[i] == nil {\n\t\t\t\tmissing = append(missing, paramIdents[i].Name)\n\t\t\t}\n\t\t}\n\n\t\t// Bind default values to parameters.\n\t\tfor ; i < nparams; i++ {\n\t\t\tif locals[i] == nil {\n\t\t\t\tdflt := fn.defaults[i-m]\n\t\t\t\tif _, ok := dflt.(mandatory); ok {\n\t\t\t\t\tmissing = append(missing, paramIdents[i].Name)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tlocals[i] = dflt\n\t\t\t}\n\t\t}\n\n\t\tif missing != nil {\n\t\t\treturn fmt.Errorf(\"function %s missing %d argument%s (%s)\",\n\t\t\t\tfn.Name(), len(missing), cond(len(missing) > 1, \"s\", \"\"), strings.Join(missing, \", \"))\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc findParam(params []compile.Binding, name string) int {\n\tfor i, param := range params {\n\t\tif param.Name == name {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string-interpolation\nfunc interpolate(format string, x Value) (Value, error) {\n\tbuf := new(strings.Builder)\n\tindex := 0\n\tnargs := 1\n\tif tuple, ok := x.(Tuple); ok {\n\t\tnargs = len(tuple)\n\t}\n\tfor {\n\t\ti := strings.IndexByte(format, '%')\n\t\tif i < 0 {\n\t\t\tbuf.WriteString(format)\n\t\t\tbreak\n\t\t}\n\t\tbuf.WriteString(format[:i])\n\t\tformat = format[i+1:]\n\n\t\tif format != \"\" && format[0] == '%' {\n\t\t\tbuf.WriteByte('%')\n\t\t\tformat = format[1:]\n\t\t\tcontinue\n\t\t}\n\n\t\tvar arg Value\n\t\tif format != \"\" && format[0] == '(' {\n\t\t\t// keyword argument: %(name)s.\n\t\t\tformat = format[1:]\n\t\t\tj := strings.IndexByte(format, ')')\n\t\t\tif j < 0 {\n\t\t\t\treturn nil, fmt.Errorf(\"incomplete format key\")\n\t\t\t}\n\t\t\tkey := format[:j]\n\t\t\tif dict, ok := x.(Mapping); !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"format requires a mapping\")\n\t\t\t} else if v, found, _ := dict.Get(String(key)); found {\n\t\t\t\targ = v\n\t\t\t} else {\n\t\t\t\treturn nil, fmt.Errorf(\"key not found: %s\", key)\n\t\t\t}\n\t\t\tformat = format[j+1:]\n\t\t} else {\n\t\t\t// positional argument: %s.\n\t\t\tif index >= nargs {\n\t\t\t\treturn nil, fmt.Errorf(\"not enough arguments for format string\")\n\t\t\t}\n\t\t\tif tuple, ok := x.(Tuple); ok {\n\t\t\t\targ = tuple[index]\n\t\t\t} else {\n\t\t\t\targ = x\n\t\t\t}\n\t\t}\n\n\t\t// NOTE: Starlark does not support any of these optional Python features:\n\t\t// - optional conversion flags: [#0- +], etc.\n\t\t// - optional minimum field width (number or *).\n\t\t// - optional precision (.123 or *)\n\t\t// - optional length modifier\n\n\t\t// conversion type\n\t\tif format == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"incomplete format\")\n\t\t}\n\t\tswitch c := format[0]; c {\n\t\tcase 's', 'r':\n\t\t\tif str, ok := AsString(arg); ok && c == 's' {\n\t\t\t\tbuf.WriteString(str)\n\t\t\t} else {\n\t\t\t\twriteValue(buf, arg, nil)\n\t\t\t}\n\t\tcase 'd', 'i', 'o', 'x', 'X':\n\t\t\ti, err := NumberToInt(arg)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"%%%c format requires integer: %v\", c, err)\n\t\t\t}\n\t\t\tswitch c {\n\t\t\tcase 'd', 'i':\n\t\t\t\tfmt.Fprintf(buf, \"%d\", i)\n\t\t\tcase 'o':\n\t\t\t\tfmt.Fprintf(buf, \"%o\", i)\n\t\t\tcase 'x':\n\t\t\t\tfmt.Fprintf(buf, \"%x\", i)\n\t\t\tcase 'X':\n\t\t\t\tfmt.Fprintf(buf, \"%X\", i)\n\t\t\t}\n\t\tcase 'e', 'f', 'g', 'E', 'F', 'G':\n\t\t\tf, ok := AsFloat(arg)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"%%%c format requires float, not %s\", c, arg.Type())\n\t\t\t}\n\t\t\tFloat(f).format(buf, c)\n\t\tcase 'c':\n\t\t\tswitch arg := arg.(type) {\n\t\t\tcase Int:\n\t\t\t\t// chr(int)\n\t\t\t\tr, err := AsInt32(arg)\n\t\t\t\tif err != nil || r < 0 || r > unicode.MaxRune {\n\t\t\t\t\treturn nil, fmt.Errorf(\"%%c format requires a valid Unicode code point, got %s\", arg)\n\t\t\t\t}\n\t\t\t\tbuf.WriteRune(rune(r))\n\t\t\tcase String:\n\t\t\t\tr, size := utf8.DecodeRuneInString(string(arg))\n\t\t\t\tif size != len(arg) || len(arg) == 0 {\n\t\t\t\t\treturn nil, fmt.Errorf(\"%%c format requires a single-character string\")\n\t\t\t\t}\n\t\t\t\tbuf.WriteRune(r)\n\t\t\tdefault:\n\t\t\t\treturn nil, fmt.Errorf(\"%%c format requires int or single-character string, not %s\", arg.Type())\n\t\t\t}\n\t\tcase '%':\n\t\t\tbuf.WriteByte('%')\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"unknown conversion %%%c\", c)\n\t\t}\n\t\tformat = format[1:]\n\t\tindex++\n\t}\n\n\tif index < nargs {\n\t\treturn nil, fmt.Errorf(\"too many arguments for format string\")\n\t}\n\n\treturn String(buf.String()), nil\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/hashtable.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage starlark\n\nimport (\n\t\"fmt\"\n\t\"math/big\"\n\t_ \"unsafe\" // for go:linkname hack\n)\n\n// hashtable is used to represent Starlark dict and set values.\n// It is a hash table whose key/value entries form a doubly-linked list\n// in the order the entries were inserted.\n//\n// Initialized instances of hashtable must not be copied.\ntype hashtable struct {\n\ttable     []bucket  // len is zero or a power of two\n\tbucket0   [1]bucket // inline allocation for small maps.\n\tlen       uint32\n\titercount uint32  // number of active iterators (ignored if frozen)\n\thead      *entry  // insertion order doubly-linked list; may be nil\n\ttailLink  **entry // address of nil link at end of list (perhaps &head)\n\tfrozen    bool\n\n\t_ noCopy // triggers vet copylock check on this type.\n}\n\n// noCopy is zero-sized type that triggers vet's copylock check.\n// See https://github.com/golang/go/issues/8005#issuecomment-190753527.\ntype noCopy struct{}\n\nfunc (*noCopy) Lock()   {}\nfunc (*noCopy) Unlock() {}\n\nconst bucketSize = 8\n\ntype bucket struct {\n\tentries [bucketSize]entry\n\tnext    *bucket // linked list of buckets\n}\n\ntype entry struct {\n\thash       uint32 // nonzero => in use\n\tkey, value Value\n\tnext       *entry  // insertion order doubly-linked list; may be nil\n\tprevLink   **entry // address of link to this entry (perhaps &head)\n}\n\nfunc (ht *hashtable) init(size int) {\n\tif size < 0 {\n\t\tpanic(\"size < 0\")\n\t}\n\tnb := 1\n\tfor overloaded(size, nb) {\n\t\tnb = nb << 1\n\t}\n\tif nb < 2 {\n\t\tht.table = ht.bucket0[:1]\n\t} else {\n\t\tht.table = make([]bucket, nb)\n\t}\n\tht.tailLink = &ht.head\n}\n\nfunc (ht *hashtable) freeze() {\n\tif !ht.frozen {\n\t\tht.frozen = true\n\t\tfor e := ht.head; e != nil; e = e.next {\n\t\t\te.key.Freeze()\n\t\t\te.value.Freeze()\n\t\t}\n\t}\n}\n\nfunc (ht *hashtable) insert(k, v Value) error {\n\tif err := ht.checkMutable(\"insert into\"); err != nil {\n\t\treturn err\n\t}\n\tif ht.table == nil {\n\t\tht.init(1)\n\t}\n\th, err := k.Hash()\n\tif err != nil {\n\t\treturn err\n\t}\n\tif h == 0 {\n\t\th = 1 // zero is reserved\n\t}\n\nretry:\n\tvar insert *entry\n\n\t// Inspect each bucket in the bucket list.\n\tp := &ht.table[h&(uint32(len(ht.table)-1))]\n\tfor {\n\t\tfor i := range p.entries {\n\t\t\te := &p.entries[i]\n\t\t\tif e.hash != h {\n\t\t\t\tif e.hash == 0 {\n\t\t\t\t\t// Found empty entry; make a note.\n\t\t\t\t\tinsert = e\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif eq, err := Equal(k, e.key); err != nil {\n\t\t\t\treturn err // e.g. excessively recursive tuple\n\t\t\t} else if !eq {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// Key already present; update value.\n\t\t\te.value = v\n\t\t\treturn nil\n\t\t}\n\t\tif p.next == nil {\n\t\t\tbreak\n\t\t}\n\t\tp = p.next\n\t}\n\n\t// Key not found.  p points to the last bucket.\n\n\t// Does the number of elements exceed the buckets' load factor?\n\tif overloaded(int(ht.len), len(ht.table)) {\n\t\tht.grow()\n\t\tgoto retry\n\t}\n\n\tif insert == nil {\n\t\t// No space in existing buckets.  Add a new one to the bucket list.\n\t\tb := new(bucket)\n\t\tp.next = b\n\t\tinsert = &b.entries[0]\n\t}\n\n\t// Insert key/value pair.\n\tinsert.hash = h\n\tinsert.key = k\n\tinsert.value = v\n\n\t// Append entry to doubly-linked list.\n\tinsert.prevLink = ht.tailLink\n\t*ht.tailLink = insert\n\tht.tailLink = &insert.next\n\n\tht.len++\n\n\treturn nil\n}\n\nfunc overloaded(elems, buckets int) bool {\n\tconst loadFactor = 6.5 // just a guess\n\treturn elems >= bucketSize && float64(elems) >= loadFactor*float64(buckets)\n}\n\nfunc (ht *hashtable) grow() {\n\t// Double the number of buckets and rehash.\n\t//\n\t// Even though this makes reentrant calls to ht.insert,\n\t// calls Equals unnecessarily (since there can't be duplicate keys),\n\t// and recomputes the hash unnecessarily, the gains from\n\t// avoiding these steps were found to be too small to justify\n\t// the extra logic: -2% on hashtable benchmark.\n\tht.table = make([]bucket, len(ht.table)<<1)\n\toldhead := ht.head\n\tht.head = nil\n\tht.tailLink = &ht.head\n\tht.len = 0\n\tfor e := oldhead; e != nil; e = e.next {\n\t\tht.insert(e.key, e.value)\n\t}\n\tht.bucket0[0] = bucket{} // clear out unused initial bucket\n}\n\nfunc (ht *hashtable) lookup(k Value) (v Value, found bool, err error) {\n\th, err := k.Hash()\n\tif err != nil {\n\t\treturn nil, false, err // unhashable\n\t}\n\tif h == 0 {\n\t\th = 1 // zero is reserved\n\t}\n\tif ht.table == nil {\n\t\treturn None, false, nil // empty\n\t}\n\n\t// Inspect each bucket in the bucket list.\n\tfor p := &ht.table[h&(uint32(len(ht.table)-1))]; p != nil; p = p.next {\n\t\tfor i := range p.entries {\n\t\t\te := &p.entries[i]\n\t\t\tif e.hash == h {\n\t\t\t\tif eq, err := Equal(k, e.key); err != nil {\n\t\t\t\t\treturn nil, false, err // e.g. excessively recursive tuple\n\t\t\t\t} else if eq {\n\t\t\t\t\treturn e.value, true, nil // found\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn None, false, nil // not found\n}\n\n// count returns the number of distinct elements of iter that are elements of ht.\nfunc (ht *hashtable) count(iter Iterator) (int, error) {\n\tif ht.table == nil {\n\t\treturn 0, nil // empty\n\t}\n\n\tvar k Value\n\tcount := 0\n\n\t// Use a bitset per table entry to record seen elements of ht.\n\t// Elements are identified by their bucket number and index within the bucket.\n\t// Each bitset gets one word initially, but may grow.\n\tstorage := make([]big.Word, len(ht.table))\n\tbitsets := make([]big.Int, len(ht.table))\n\tfor i := range bitsets {\n\t\tbitsets[i].SetBits(storage[i : i+1 : i+1])\n\t}\n\tfor iter.Next(&k) && count != int(ht.len) {\n\t\th, err := k.Hash()\n\t\tif err != nil {\n\t\t\treturn 0, err // unhashable\n\t\t}\n\t\tif h == 0 {\n\t\t\th = 1 // zero is reserved\n\t\t}\n\n\t\t// Inspect each bucket in the bucket list.\n\t\tbucketId := h & (uint32(len(ht.table) - 1))\n\t\ti := 0\n\t\tfor p := &ht.table[bucketId]; p != nil; p = p.next {\n\t\t\tfor j := range p.entries {\n\t\t\t\te := &p.entries[j]\n\t\t\t\tif e.hash == h {\n\t\t\t\t\tif eq, err := Equal(k, e.key); err != nil {\n\t\t\t\t\t\treturn 0, err\n\t\t\t\t\t} else if eq {\n\t\t\t\t\t\tbitIndex := i<<3 + j\n\t\t\t\t\t\tif bitsets[bucketId].Bit(bitIndex) == 0 {\n\t\t\t\t\t\t\tbitsets[bucketId].SetBit(&bitsets[bucketId], bitIndex, 1)\n\t\t\t\t\t\t\tcount++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ti++\n\t\t}\n\t}\n\n\treturn count, nil\n}\n\n// Items returns all the items in the map (as key/value pairs) in insertion order.\nfunc (ht *hashtable) items() []Tuple {\n\titems := make([]Tuple, 0, ht.len)\n\tarray := make([]Value, ht.len*2) // allocate a single backing array\n\tfor e := ht.head; e != nil; e = e.next {\n\t\tpair := Tuple(array[:2:2])\n\t\tarray = array[2:]\n\t\tpair[0] = e.key\n\t\tpair[1] = e.value\n\t\titems = append(items, pair)\n\t}\n\treturn items\n}\n\nfunc (ht *hashtable) first() (Value, bool) {\n\tif ht.head != nil {\n\t\treturn ht.head.key, true\n\t}\n\treturn None, false\n}\n\nfunc (ht *hashtable) keys() []Value {\n\tkeys := make([]Value, 0, ht.len)\n\tfor e := ht.head; e != nil; e = e.next {\n\t\tkeys = append(keys, e.key)\n\t}\n\treturn keys\n}\n\nfunc (ht *hashtable) delete(k Value) (v Value, found bool, err error) {\n\tif err := ht.checkMutable(\"delete from\"); err != nil {\n\t\treturn nil, false, err\n\t}\n\tif ht.table == nil {\n\t\treturn None, false, nil // empty\n\t}\n\th, err := k.Hash()\n\tif err != nil {\n\t\treturn nil, false, err // unhashable\n\t}\n\tif h == 0 {\n\t\th = 1 // zero is reserved\n\t}\n\n\t// Inspect each bucket in the bucket list.\n\tfor p := &ht.table[h&(uint32(len(ht.table)-1))]; p != nil; p = p.next {\n\t\tfor i := range p.entries {\n\t\t\te := &p.entries[i]\n\t\t\tif e.hash == h {\n\t\t\t\tif eq, err := Equal(k, e.key); err != nil {\n\t\t\t\t\treturn nil, false, err\n\t\t\t\t} else if eq {\n\t\t\t\t\t// Remove e from doubly-linked list.\n\t\t\t\t\t*e.prevLink = e.next\n\t\t\t\t\tif e.next == nil {\n\t\t\t\t\t\tht.tailLink = e.prevLink // deletion of last entry\n\t\t\t\t\t} else {\n\t\t\t\t\t\te.next.prevLink = e.prevLink\n\t\t\t\t\t}\n\n\t\t\t\t\tv := e.value\n\t\t\t\t\t*e = entry{}\n\t\t\t\t\tht.len--\n\t\t\t\t\treturn v, true, nil // found\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO(adonovan): opt: remove completely empty bucket from bucket list.\n\n\treturn None, false, nil // not found\n}\n\n// checkMutable reports an error if the hash table should not be mutated.\n// verb+\" dict\" should describe the operation.\nfunc (ht *hashtable) checkMutable(verb string) error {\n\tif ht.frozen {\n\t\treturn fmt.Errorf(\"cannot %s frozen hash table\", verb)\n\t}\n\tif ht.itercount > 0 {\n\t\treturn fmt.Errorf(\"cannot %s hash table during iteration\", verb)\n\t}\n\treturn nil\n}\n\nfunc (ht *hashtable) clear() error {\n\tif err := ht.checkMutable(\"clear\"); err != nil {\n\t\treturn err\n\t}\n\tif ht.table != nil {\n\t\tfor i := range ht.table {\n\t\t\tht.table[i] = bucket{}\n\t\t}\n\t}\n\tht.head = nil\n\tht.tailLink = &ht.head\n\tht.len = 0\n\treturn nil\n}\n\nfunc (ht *hashtable) addAll(other *hashtable) error {\n\tfor e := other.head; e != nil; e = e.next {\n\t\tif err := ht.insert(e.key, e.value); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn nil\n}\n\n// dump is provided as an aid to debugging.\nfunc (ht *hashtable) dump() {\n\tfmt.Printf(\"hashtable %p len=%d head=%p tailLink=%p\",\n\t\tht, ht.len, ht.head, ht.tailLink)\n\tif ht.tailLink != nil {\n\t\tfmt.Printf(\" *tailLink=%p\", *ht.tailLink)\n\t}\n\tfmt.Println()\n\tfor j := range ht.table {\n\t\tfmt.Printf(\"bucket chain %d\\n\", j)\n\t\tfor p := &ht.table[j]; p != nil; p = p.next {\n\t\t\tfmt.Printf(\"bucket %p\\n\", p)\n\t\t\tfor i := range p.entries {\n\t\t\t\te := &p.entries[i]\n\t\t\t\tfmt.Printf(\"\\tentry %d @ %p hash=%d key=%v value=%v\\n\",\n\t\t\t\t\ti, e, e.hash, e.key, e.value)\n\t\t\t\tfmt.Printf(\"\\t\\tnext=%p &next=%p prev=%p\",\n\t\t\t\t\te.next, &e.next, e.prevLink)\n\t\t\t\tif e.prevLink != nil {\n\t\t\t\t\tfmt.Printf(\" *prev=%p\", *e.prevLink)\n\t\t\t\t}\n\t\t\t\tfmt.Println()\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunc (ht *hashtable) iterate() *keyIterator {\n\tif !ht.frozen {\n\t\tht.itercount++\n\t}\n\treturn &keyIterator{ht: ht, e: ht.head}\n}\n\ntype keyIterator struct {\n\tht *hashtable\n\te  *entry\n}\n\nfunc (it *keyIterator) Next(k *Value) bool {\n\tif it.e != nil {\n\t\t*k = it.e.key\n\t\tit.e = it.e.next\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (it *keyIterator) Done() {\n\tif !it.ht.frozen {\n\t\tit.ht.itercount--\n\t}\n}\n\n// TODO(adonovan): use go1.19's maphash.String.\n\n// hashString computes the hash of s.\nfunc hashString(s string) uint32 {\n\tif len(s) >= 12 {\n\t\t// Call the Go runtime's optimized hash implementation,\n\t\t// which uses the AESENC instruction on amd64 machines.\n\t\treturn uint32(goStringHash(s, 0))\n\t}\n\treturn softHashString(s)\n}\n\n//go:linkname goStringHash runtime.stringHash\nfunc goStringHash(s string, seed uintptr) uintptr\n\n// softHashString computes the 32-bit FNV-1a hash of s in software.\nfunc softHashString(s string) uint32 {\n\tvar h uint32 = 2166136261\n\tfor i := 0; i < len(s); i++ {\n\t\th ^= uint32(s[i])\n\t\th *= 16777619\n\t}\n\treturn h\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/int.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage starlark\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"math/big\"\n\t\"reflect\"\n\t\"strconv\"\n\n\t\"go.starlark.net/syntax\"\n)\n\n// Int is the type of a Starlark int.\n//\n// The zero value is not a legal value; use MakeInt(0).\ntype Int struct{ impl intImpl }\n\n// --- high-level accessors ---\n\n// MakeInt returns a Starlark int for the specified signed integer.\nfunc MakeInt(x int) Int { return MakeInt64(int64(x)) }\n\n// MakeInt64 returns a Starlark int for the specified int64.\nfunc MakeInt64(x int64) Int {\n\tif math.MinInt32 <= x && x <= math.MaxInt32 {\n\t\treturn makeSmallInt(x)\n\t}\n\treturn makeBigInt(big.NewInt(x))\n}\n\n// MakeUint returns a Starlark int for the specified unsigned integer.\nfunc MakeUint(x uint) Int { return MakeUint64(uint64(x)) }\n\n// MakeUint64 returns a Starlark int for the specified uint64.\nfunc MakeUint64(x uint64) Int {\n\tif x <= math.MaxInt32 {\n\t\treturn makeSmallInt(int64(x))\n\t}\n\treturn makeBigInt(new(big.Int).SetUint64(x))\n}\n\n// MakeBigInt returns a Starlark int for the specified big.Int.\n// The new Int value will contain a copy of x. The caller is safe to modify x.\nfunc MakeBigInt(x *big.Int) Int {\n\tif isSmall(x) {\n\t\treturn makeSmallInt(x.Int64())\n\t}\n\tz := new(big.Int).Set(x)\n\treturn makeBigInt(z)\n}\n\nfunc isSmall(x *big.Int) bool {\n\tn := x.BitLen()\n\treturn n < 32 || n == 32 && x.Int64() == math.MinInt32\n}\n\nvar (\n\tzero, one = makeSmallInt(0), makeSmallInt(1)\n\toneBig    = big.NewInt(1)\n\n\t_ HasUnary = Int{}\n)\n\n// Unary implements the operations +int, -int, and ~int.\nfunc (i Int) Unary(op syntax.Token) (Value, error) {\n\tswitch op {\n\tcase syntax.MINUS:\n\t\treturn zero.Sub(i), nil\n\tcase syntax.PLUS:\n\t\treturn i, nil\n\tcase syntax.TILDE:\n\t\treturn i.Not(), nil\n\t}\n\treturn nil, nil\n}\n\n// Int64 returns the value as an int64.\n// If it is not exactly representable the result is undefined and ok is false.\nfunc (i Int) Int64() (_ int64, ok bool) {\n\tiSmall, iBig := i.get()\n\tif iBig != nil {\n\t\tx, acc := bigintToInt64(iBig)\n\t\tif acc != big.Exact {\n\t\t\treturn // inexact\n\t\t}\n\t\treturn x, true\n\t}\n\treturn iSmall, true\n}\n\n// BigInt returns a new big.Int with the same value as the Int.\nfunc (i Int) BigInt() *big.Int {\n\tiSmall, iBig := i.get()\n\tif iBig != nil {\n\t\treturn new(big.Int).Set(iBig)\n\t}\n\treturn big.NewInt(iSmall)\n}\n\n// bigInt returns the value as a big.Int.\n// It differs from BigInt in that this method returns the actual\n// reference and any modification will change the state of i.\nfunc (i Int) bigInt() *big.Int {\n\tiSmall, iBig := i.get()\n\tif iBig != nil {\n\t\treturn iBig\n\t}\n\treturn big.NewInt(iSmall)\n}\n\n// Uint64 returns the value as a uint64.\n// If it is not exactly representable the result is undefined and ok is false.\nfunc (i Int) Uint64() (_ uint64, ok bool) {\n\tiSmall, iBig := i.get()\n\tif iBig != nil {\n\t\tx, acc := bigintToUint64(iBig)\n\t\tif acc != big.Exact {\n\t\t\treturn // inexact\n\t\t}\n\t\treturn x, true\n\t}\n\tif iSmall < 0 {\n\t\treturn // inexact\n\t}\n\treturn uint64(iSmall), true\n}\n\n// The math/big API should provide this function.\nfunc bigintToInt64(i *big.Int) (int64, big.Accuracy) {\n\tsign := i.Sign()\n\tif sign > 0 {\n\t\tif i.Cmp(maxint64) > 0 {\n\t\t\treturn math.MaxInt64, big.Below\n\t\t}\n\t} else if sign < 0 {\n\t\tif i.Cmp(minint64) < 0 {\n\t\t\treturn math.MinInt64, big.Above\n\t\t}\n\t}\n\treturn i.Int64(), big.Exact\n}\n\n// The math/big API should provide this function.\nfunc bigintToUint64(i *big.Int) (uint64, big.Accuracy) {\n\tsign := i.Sign()\n\tif sign > 0 {\n\t\tif i.BitLen() > 64 {\n\t\t\treturn math.MaxUint64, big.Below\n\t\t}\n\t} else if sign < 0 {\n\t\treturn 0, big.Above\n\t}\n\treturn i.Uint64(), big.Exact\n}\n\nvar (\n\tminint64 = new(big.Int).SetInt64(math.MinInt64)\n\tmaxint64 = new(big.Int).SetInt64(math.MaxInt64)\n)\n\nfunc (i Int) Format(s fmt.State, ch rune) {\n\tiSmall, iBig := i.get()\n\tif iBig != nil {\n\t\tiBig.Format(s, ch)\n\t\treturn\n\t}\n\tbig.NewInt(iSmall).Format(s, ch)\n}\nfunc (i Int) String() string {\n\tiSmall, iBig := i.get()\n\tif iBig != nil {\n\t\treturn iBig.Text(10)\n\t}\n\treturn strconv.FormatInt(iSmall, 10)\n}\nfunc (i Int) Type() string { return \"int\" }\nfunc (i Int) Freeze()      {} // immutable\nfunc (i Int) Truth() Bool  { return i.Sign() != 0 }\nfunc (i Int) Hash() (uint32, error) {\n\tiSmall, iBig := i.get()\n\tvar lo big.Word\n\tif iBig != nil {\n\t\tlo = iBig.Bits()[0]\n\t} else {\n\t\tlo = big.Word(iSmall)\n\t}\n\treturn 12582917 * uint32(lo+3), nil\n}\n\n// Cmp implements comparison of two Int values.\n// Required by the TotallyOrdered interface.\nfunc (i Int) Cmp(v Value, depth int) (int, error) {\n\tj := v.(Int)\n\tiSmall, iBig := i.get()\n\tjSmall, jBig := j.get()\n\tif iBig != nil || jBig != nil {\n\t\treturn i.bigInt().Cmp(j.bigInt()), nil\n\t}\n\treturn signum64(iSmall - jSmall), nil // safe: int32 operands\n}\n\n// Float returns the float value nearest i.\nfunc (i Int) Float() Float {\n\tiSmall, iBig := i.get()\n\tif iBig != nil {\n\t\t// Fast path for hardware int-to-float conversions.\n\t\tif iBig.IsUint64() {\n\t\t\treturn Float(iBig.Uint64())\n\t\t} else if iBig.IsInt64() {\n\t\t\treturn Float(iBig.Int64())\n\t\t} else {\n\t\t\t// Fast path for very big ints.\n\t\t\tconst maxFiniteLen = 1023 + 1 // max exponent value + implicit mantissa bit\n\t\t\tif iBig.BitLen() > maxFiniteLen {\n\t\t\t\treturn Float(math.Inf(iBig.Sign()))\n\t\t\t}\n\t\t}\n\n\t\tf, _ := new(big.Float).SetInt(iBig).Float64()\n\t\treturn Float(f)\n\t}\n\treturn Float(iSmall)\n}\n\n// finiteFloat returns the finite float value nearest i,\n// or an error if the magnitude is too large.\nfunc (i Int) finiteFloat() (Float, error) {\n\tf := i.Float()\n\tif math.IsInf(float64(f), 0) {\n\t\treturn 0, fmt.Errorf(\"int too large to convert to float\")\n\t}\n\treturn f, nil\n}\n\nfunc (x Int) Sign() int {\n\txSmall, xBig := x.get()\n\tif xBig != nil {\n\t\treturn xBig.Sign()\n\t}\n\treturn signum64(xSmall)\n}\n\nfunc (x Int) Add(y Int) Int {\n\txSmall, xBig := x.get()\n\tySmall, yBig := y.get()\n\tif xBig != nil || yBig != nil {\n\t\treturn MakeBigInt(new(big.Int).Add(x.bigInt(), y.bigInt()))\n\t}\n\treturn MakeInt64(xSmall + ySmall)\n}\nfunc (x Int) Sub(y Int) Int {\n\txSmall, xBig := x.get()\n\tySmall, yBig := y.get()\n\tif xBig != nil || yBig != nil {\n\t\treturn MakeBigInt(new(big.Int).Sub(x.bigInt(), y.bigInt()))\n\t}\n\treturn MakeInt64(xSmall - ySmall)\n}\nfunc (x Int) Mul(y Int) Int {\n\txSmall, xBig := x.get()\n\tySmall, yBig := y.get()\n\tif xBig != nil || yBig != nil {\n\t\treturn MakeBigInt(new(big.Int).Mul(x.bigInt(), y.bigInt()))\n\t}\n\treturn MakeInt64(xSmall * ySmall)\n}\nfunc (x Int) Or(y Int) Int {\n\txSmall, xBig := x.get()\n\tySmall, yBig := y.get()\n\tif xBig != nil || yBig != nil {\n\t\treturn MakeBigInt(new(big.Int).Or(x.bigInt(), y.bigInt()))\n\t}\n\treturn makeSmallInt(xSmall | ySmall)\n}\nfunc (x Int) And(y Int) Int {\n\txSmall, xBig := x.get()\n\tySmall, yBig := y.get()\n\tif xBig != nil || yBig != nil {\n\t\treturn MakeBigInt(new(big.Int).And(x.bigInt(), y.bigInt()))\n\t}\n\treturn makeSmallInt(xSmall & ySmall)\n}\nfunc (x Int) Xor(y Int) Int {\n\txSmall, xBig := x.get()\n\tySmall, yBig := y.get()\n\tif xBig != nil || yBig != nil {\n\t\treturn MakeBigInt(new(big.Int).Xor(x.bigInt(), y.bigInt()))\n\t}\n\treturn makeSmallInt(xSmall ^ ySmall)\n}\nfunc (x Int) Not() Int {\n\txSmall, xBig := x.get()\n\tif xBig != nil {\n\t\treturn MakeBigInt(new(big.Int).Not(xBig))\n\t}\n\treturn makeSmallInt(^xSmall)\n}\nfunc (x Int) Lsh(y uint) Int { return MakeBigInt(new(big.Int).Lsh(x.bigInt(), y)) }\nfunc (x Int) Rsh(y uint) Int { return MakeBigInt(new(big.Int).Rsh(x.bigInt(), y)) }\n\n// Precondition: y is nonzero.\nfunc (x Int) Div(y Int) Int {\n\txSmall, xBig := x.get()\n\tySmall, yBig := y.get()\n\t// http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html\n\tif xBig != nil || yBig != nil {\n\t\txb, yb := x.bigInt(), y.bigInt()\n\n\t\tvar quo, rem big.Int\n\t\tquo.QuoRem(xb, yb, &rem)\n\t\tif (xb.Sign() < 0) != (yb.Sign() < 0) && rem.Sign() != 0 {\n\t\t\tquo.Sub(&quo, oneBig)\n\t\t}\n\t\treturn MakeBigInt(&quo)\n\t}\n\tquo := xSmall / ySmall\n\trem := xSmall % ySmall\n\tif (xSmall < 0) != (ySmall < 0) && rem != 0 {\n\t\tquo -= 1\n\t}\n\treturn MakeInt64(quo)\n}\n\n// Precondition: y is nonzero.\nfunc (x Int) Mod(y Int) Int {\n\txSmall, xBig := x.get()\n\tySmall, yBig := y.get()\n\tif xBig != nil || yBig != nil {\n\t\txb, yb := x.bigInt(), y.bigInt()\n\n\t\tvar quo, rem big.Int\n\t\tquo.QuoRem(xb, yb, &rem)\n\t\tif (xb.Sign() < 0) != (yb.Sign() < 0) && rem.Sign() != 0 {\n\t\t\trem.Add(&rem, yb)\n\t\t}\n\t\treturn MakeBigInt(&rem)\n\t}\n\trem := xSmall % ySmall\n\tif (xSmall < 0) != (ySmall < 0) && rem != 0 {\n\t\trem += ySmall\n\t}\n\treturn makeSmallInt(rem)\n}\n\nfunc (i Int) rational() *big.Rat {\n\tiSmall, iBig := i.get()\n\tif iBig != nil {\n\t\treturn new(big.Rat).SetInt(iBig)\n\t}\n\treturn new(big.Rat).SetInt64(iSmall)\n}\n\n// AsInt32 returns the value of x if is representable as an int32.\nfunc AsInt32(x Value) (int, error) {\n\ti, ok := x.(Int)\n\tif !ok {\n\t\treturn 0, fmt.Errorf(\"got %s, want int\", x.Type())\n\t}\n\tiSmall, iBig := i.get()\n\tif iBig != nil {\n\t\treturn 0, fmt.Errorf(\"%s out of range\", i)\n\t}\n\treturn int(iSmall), nil\n}\n\n// AsInt sets *ptr to the value of Starlark int x, if it is exactly representable,\n// otherwise it returns an error.\n// The type of ptr must be one of the pointer types *int, *int8, *int16, *int32, or *int64,\n// or one of their unsigned counterparts including *uintptr.\nfunc AsInt(x Value, ptr interface{}) error {\n\txint, ok := x.(Int)\n\tif !ok {\n\t\treturn fmt.Errorf(\"got %s, want int\", x.Type())\n\t}\n\n\tbits := reflect.TypeOf(ptr).Elem().Size() * 8\n\tswitch ptr.(type) {\n\tcase *int, *int8, *int16, *int32, *int64:\n\t\ti, ok := xint.Int64()\n\t\tif !ok || bits < 64 && !(-1<<(bits-1) <= i && i < 1<<(bits-1)) {\n\t\t\treturn fmt.Errorf(\"%s out of range (want value in signed %d-bit range)\", xint, bits)\n\t\t}\n\t\tswitch ptr := ptr.(type) {\n\t\tcase *int:\n\t\t\t*ptr = int(i)\n\t\tcase *int8:\n\t\t\t*ptr = int8(i)\n\t\tcase *int16:\n\t\t\t*ptr = int16(i)\n\t\tcase *int32:\n\t\t\t*ptr = int32(i)\n\t\tcase *int64:\n\t\t\t*ptr = int64(i)\n\t\t}\n\n\tcase *uint, *uint8, *uint16, *uint32, *uint64, *uintptr:\n\t\ti, ok := xint.Uint64()\n\t\tif !ok || bits < 64 && i >= 1<<bits {\n\t\t\treturn fmt.Errorf(\"%s out of range (want value in unsigned %d-bit range)\", xint, bits)\n\t\t}\n\t\tswitch ptr := ptr.(type) {\n\t\tcase *uint:\n\t\t\t*ptr = uint(i)\n\t\tcase *uint8:\n\t\t\t*ptr = uint8(i)\n\t\tcase *uint16:\n\t\t\t*ptr = uint16(i)\n\t\tcase *uint32:\n\t\t\t*ptr = uint32(i)\n\t\tcase *uint64:\n\t\t\t*ptr = uint64(i)\n\t\tcase *uintptr:\n\t\t\t*ptr = uintptr(i)\n\t\t}\n\tdefault:\n\t\tpanic(fmt.Sprintf(\"invalid argument type: %T\", ptr))\n\t}\n\treturn nil\n}\n\n// NumberToInt converts a number x to an integer value.\n// An int is returned unchanged, a float is truncated towards zero.\n// NumberToInt reports an error for all other values.\nfunc NumberToInt(x Value) (Int, error) {\n\tswitch x := x.(type) {\n\tcase Int:\n\t\treturn x, nil\n\tcase Float:\n\t\tf := float64(x)\n\t\tif math.IsInf(f, 0) {\n\t\t\treturn zero, fmt.Errorf(\"cannot convert float infinity to integer\")\n\t\t} else if math.IsNaN(f) {\n\t\t\treturn zero, fmt.Errorf(\"cannot convert float NaN to integer\")\n\t\t}\n\t\treturn finiteFloatToInt(x), nil\n\n\t}\n\treturn zero, fmt.Errorf(\"cannot convert %s to int\", x.Type())\n}\n\n// finiteFloatToInt converts f to an Int, truncating towards zero.\n// f must be finite.\nfunc finiteFloatToInt(f Float) Int {\n\t// We avoid '<= MaxInt64' so that both constants are exactly representable as floats.\n\t// See https://github.com/google/starlark-go/issues/375.\n\tif math.MinInt64 <= f && f < math.MaxInt64+1 {\n\t\t// small values\n\t\treturn MakeInt64(int64(f))\n\t}\n\trat := f.rational()\n\tif rat == nil {\n\t\tpanic(f) // non-finite\n\t}\n\treturn MakeBigInt(new(big.Int).Div(rat.Num(), rat.Denom()))\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/int_generic.go",
    "content": "//go:build (!linux && !darwin && !dragonfly && !freebsd && !netbsd && !solaris) || (!amd64 && !arm64 && !mips64x && !ppc64 && !ppc64le && !loong64 && !s390x)\n\npackage starlark\n\n// generic Int implementation as a union\n\nimport \"math/big\"\n\ntype intImpl struct {\n\t// We use only the signed 32-bit range of small to ensure\n\t// that small+small and small*small do not overflow.\n\tsmall_ int64    // minint32 <= small <= maxint32\n\tbig_   *big.Int // big != nil <=> value is not representable as int32\n}\n\n// --- low-level accessors ---\n\n// get returns the small and big components of the Int.\n// small is defined only if big is nil.\n// small is sign-extended to 64 bits for ease of subsequent arithmetic.\nfunc (i Int) get() (small int64, big *big.Int) {\n\treturn i.impl.small_, i.impl.big_\n}\n\n// Precondition: math.MinInt32 <= x && x <= math.MaxInt32\nfunc makeSmallInt(x int64) Int {\n\treturn Int{intImpl{small_: x}}\n}\n\n// Precondition: x cannot be represented as int32.\nfunc makeBigInt(x *big.Int) Int {\n\treturn Int{intImpl{big_: x}}\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/int_posix64.go",
    "content": "//go:build (linux || darwin || dragonfly || freebsd || netbsd || solaris) && (amd64 || arm64 || mips64x || ppc64 || ppc64le || loong64 || s390x)\n\npackage starlark\n\n// This file defines an optimized Int implementation for 64-bit machines\n// running POSIX. It reserves a 4GB portion of the address space using\n// mmap and represents int32 values as addresses within that range. This\n// disambiguates int32 values from *big.Int pointers, letting all Int\n// values be represented as an unsafe.Pointer, so that Int-to-Value\n// interface conversion need not allocate.\n\n// Although iOS (which, like macOS, appears as darwin/arm64) is\n// POSIX-compliant, it limits each process to about 700MB of virtual\n// address space, which defeats the optimization.  Similarly,\n// OpenBSD's default ulimit for virtual memory is a measly GB or so.\n// On both those platforms the attempted optimization will fail and\n// fall back to the slow implementation.\n\n// An alternative approach to this optimization would be to embed the\n// int32 values in pointers using odd values, which can be distinguished\n// from (even) *big.Int pointers. However, the Go runtime does not allow\n// user programs to manufacture pointers to arbitrary locations such as\n// within the zero page, or non-span, non-mmap, non-stack locations,\n// and it may panic if it encounters them; see Issue #382.\n\nimport (\n\t\"log\"\n\t\"math\"\n\t\"math/big\"\n\t\"unsafe\"\n\n\t\"golang.org/x/sys/unix\"\n)\n\n// intImpl represents a union of (int32, *big.Int) in a single pointer,\n// so that Int-to-Value conversions need not allocate.\n//\n// The pointer is either a *big.Int, if the value is big, or a pointer into a\n// reserved portion of the address space (smallints), if the value is small\n// and the address space allocation succeeded.\n//\n// See int_generic.go for the basic representation concepts.\ntype intImpl unsafe.Pointer\n\n// get returns the (small, big) arms of the union.\nfunc (i Int) get() (int64, *big.Int) {\n\tif smallints == 0 {\n\t\t// optimization disabled\n\t\tif x := (*big.Int)(i.impl); isSmall(x) {\n\t\t\treturn x.Int64(), nil\n\t\t} else {\n\t\t\treturn 0, x\n\t\t}\n\t}\n\n\tif ptr := uintptr(i.impl); ptr >= smallints && ptr < smallints+1<<32 {\n\t\treturn math.MinInt32 + int64(ptr-smallints), nil\n\t}\n\treturn 0, (*big.Int)(i.impl)\n}\n\n// Precondition: math.MinInt32 <= x && x <= math.MaxInt32\nfunc makeSmallInt(x int64) Int {\n\tif smallints == 0 {\n\t\t// optimization disabled\n\t\treturn Int{intImpl(big.NewInt(x))}\n\t}\n\n\treturn Int{intImpl(uintptr(x-math.MinInt32) + smallints)}\n}\n\n// Precondition: x cannot be represented as int32.\nfunc makeBigInt(x *big.Int) Int { return Int{intImpl(x)} }\n\n// smallints is the base address of a 2^32 byte memory region.\n// Pointers to addresses in this region represent int32 values.\n// We assume smallints is not at the very top of the address space.\n//\n// Zero means the optimization is disabled and all Ints allocate a big.Int.\nvar smallints = reserveAddresses(1 << 32)\n\nfunc reserveAddresses(len int) uintptr {\n\tb, err := unix.Mmap(-1, 0, len, unix.PROT_READ, unix.MAP_PRIVATE|unix.MAP_ANON)\n\tif err != nil {\n\t\tlog.Printf(\"Starlark failed to allocate 4GB address space: %v. Integer performance may suffer.\", err)\n\t\treturn 0 // optimization disabled\n\t}\n\treturn uintptr(unsafe.Pointer(&b[0]))\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/interp.go",
    "content": "package starlark\n\n// This file defines the bytecode interpreter.\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"sync/atomic\"\n\t\"unsafe\"\n\n\t\"go.starlark.net/internal/compile\"\n\t\"go.starlark.net/internal/spell\"\n\t\"go.starlark.net/syntax\"\n)\n\nconst vmdebug = false // TODO(adonovan): use a bitfield of specific kinds of error.\n\n// TODO(adonovan):\n// - optimize position table.\n// - opt: record MaxIterStack during compilation and preallocate the stack.\n\nfunc (fn *Function) CallInternal(thread *Thread, args Tuple, kwargs []Tuple) (Value, error) {\n\t// Postcondition: args is not mutated. This is stricter than required by Callable,\n\t// but allows CALL to avoid a copy.\n\n\tf := fn.funcode\n\tif !f.Prog.Recursion {\n\t\t// detect recursion\n\t\tfor _, fr := range thread.stack[:len(thread.stack)-1] {\n\t\t\t// We look for the same function code,\n\t\t\t// not function value, otherwise the user could\n\t\t\t// defeat the check by writing the Y combinator.\n\t\t\tif frfn, ok := fr.Callable().(*Function); ok && frfn.funcode == f {\n\t\t\t\treturn nil, fmt.Errorf(\"function %s called recursively\", fn.Name())\n\t\t\t}\n\t\t}\n\t}\n\n\tfr := thread.frameAt(0)\n\n\t// Allocate space for stack and locals.\n\t// Logically these do not escape from this frame\n\t// (See https://github.com/golang/go/issues/20533.)\n\t//\n\t// This heap allocation looks expensive, but I was unable to get\n\t// more than 1% real time improvement in a large alloc-heavy\n\t// benchmark (in which this alloc was 8% of alloc-bytes)\n\t// by allocating space for 8 Values in each frame, or\n\t// by allocating stack by slicing an array held by the Thread\n\t// that is expanded in chunks of min(k, nspace), for k=256 or 1024.\n\tnlocals := len(f.Locals)\n\tnspace := nlocals + f.MaxStack\n\tspace := make([]Value, nspace)\n\tlocals := space[:nlocals:nlocals] // local variables, starting with parameters\n\tstack := space[nlocals:]          // operand stack\n\n\t// Digest arguments and set parameters.\n\terr := setArgs(locals, fn, args, kwargs)\n\tif err != nil {\n\t\treturn nil, thread.evalError(err)\n\t}\n\n\tfr.locals = locals\n\n\tif vmdebug {\n\t\tfmt.Printf(\"Entering %s @ %s\\n\", f.Name, f.Position(0))\n\t\tfmt.Printf(\"%d stack, %d locals\\n\", len(stack), len(locals))\n\t\tdefer fmt.Println(\"Leaving \", f.Name)\n\t}\n\n\t// Spill indicated locals to cells.\n\t// Each cell is a separate alloc to avoid spurious liveness.\n\tfor _, index := range f.Cells {\n\t\tlocals[index] = &cell{locals[index]}\n\t}\n\n\t// TODO(adonovan): add static check that beneath this point\n\t// - there is exactly one return statement\n\t// - there is no redefinition of 'err'.\n\n\tvar iterstack []Iterator // stack of active iterators\n\n\t// Use defer so that application panics can pass through\n\t// interpreter without leaving thread in a bad state.\n\tdefer func() {\n\t\t// ITERPOP the rest of the iterator stack.\n\t\tfor _, iter := range iterstack {\n\t\t\titer.Done()\n\t\t}\n\n\t\tfr.locals = nil\n\t}()\n\n\tsp := 0\n\tvar pc uint32\n\tvar result Value\n\tcode := f.Code\nloop:\n\tfor {\n\t\tthread.Steps++\n\t\tif thread.Steps >= thread.maxSteps {\n\t\t\tif thread.OnMaxSteps != nil {\n\t\t\t\tthread.OnMaxSteps(thread)\n\t\t\t} else {\n\t\t\t\tthread.Cancel(\"too many steps\")\n\t\t\t}\n\t\t}\n\t\tif reason := atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&thread.cancelReason))); reason != nil {\n\t\t\terr = fmt.Errorf(\"Starlark computation cancelled: %s\", *(*string)(reason))\n\t\t\tbreak loop\n\t\t}\n\n\t\tfr.pc = pc\n\n\t\top := compile.Opcode(code[pc])\n\t\tpc++\n\t\tvar arg uint32\n\t\tif op >= compile.OpcodeArgMin {\n\t\t\t// TODO(adonovan): opt: profile this.\n\t\t\t// Perhaps compiling big endian would be less work to decode?\n\t\t\tfor s := uint(0); ; s += 7 {\n\t\t\t\tb := code[pc]\n\t\t\t\tpc++\n\t\t\t\targ |= uint32(b&0x7f) << s\n\t\t\t\tif b < 0x80 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif vmdebug {\n\t\t\tfmt.Fprintln(os.Stderr, stack[:sp]) // very verbose!\n\t\t\tcompile.PrintOp(f, fr.pc, op, arg)\n\t\t}\n\n\t\tswitch op {\n\t\tcase compile.NOP:\n\t\t\t// nop\n\n\t\tcase compile.DUP:\n\t\t\tstack[sp] = stack[sp-1]\n\t\t\tsp++\n\n\t\tcase compile.DUP2:\n\t\t\tstack[sp] = stack[sp-2]\n\t\t\tstack[sp+1] = stack[sp-1]\n\t\t\tsp += 2\n\n\t\tcase compile.POP:\n\t\t\tsp--\n\n\t\tcase compile.EXCH:\n\t\t\tstack[sp-2], stack[sp-1] = stack[sp-1], stack[sp-2]\n\n\t\tcase compile.EQL, compile.NEQ, compile.GT, compile.LT, compile.LE, compile.GE:\n\t\t\top := syntax.Token(op-compile.EQL) + syntax.EQL\n\t\t\ty := stack[sp-1]\n\t\t\tx := stack[sp-2]\n\t\t\tsp -= 2\n\t\t\tok, err2 := Compare(op, x, y)\n\t\t\tif err2 != nil {\n\t\t\t\terr = err2\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp] = Bool(ok)\n\t\t\tsp++\n\n\t\tcase compile.PLUS,\n\t\t\tcompile.MINUS,\n\t\t\tcompile.STAR,\n\t\t\tcompile.SLASH,\n\t\t\tcompile.SLASHSLASH,\n\t\t\tcompile.PERCENT,\n\t\t\tcompile.AMP,\n\t\t\tcompile.PIPE,\n\t\t\tcompile.CIRCUMFLEX,\n\t\t\tcompile.LTLT,\n\t\t\tcompile.GTGT,\n\t\t\tcompile.IN:\n\t\t\tbinop := syntax.Token(op-compile.PLUS) + syntax.PLUS\n\t\t\tif op == compile.IN {\n\t\t\t\tbinop = syntax.IN // IN token is out of order\n\t\t\t}\n\t\t\ty := stack[sp-1]\n\t\t\tx := stack[sp-2]\n\t\t\tsp -= 2\n\t\t\tz, err2 := Binary(binop, x, y)\n\t\t\tif err2 != nil {\n\t\t\t\terr = err2\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp] = z\n\t\t\tsp++\n\n\t\tcase compile.UPLUS, compile.UMINUS, compile.TILDE:\n\t\t\tvar unop syntax.Token\n\t\t\tif op == compile.TILDE {\n\t\t\t\tunop = syntax.TILDE\n\t\t\t} else {\n\t\t\t\tunop = syntax.Token(op-compile.UPLUS) + syntax.PLUS\n\t\t\t}\n\t\t\tx := stack[sp-1]\n\t\t\ty, err2 := Unary(unop, x)\n\t\t\tif err2 != nil {\n\t\t\t\terr = err2\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp-1] = y\n\n\t\tcase compile.INPLACE_ADD:\n\t\t\ty := stack[sp-1]\n\t\t\tx := stack[sp-2]\n\t\t\tsp -= 2\n\n\t\t\t// It's possible that y is not Iterable but\n\t\t\t// nonetheless defines x+y, in which case we\n\t\t\t// should fall back to the general case.\n\t\t\tvar z Value\n\t\t\tif xlist, ok := x.(*List); ok {\n\t\t\t\tif yiter, ok := y.(Iterable); ok {\n\t\t\t\t\tif err = xlist.checkMutable(\"apply += to\"); err != nil {\n\t\t\t\t\t\tbreak loop\n\t\t\t\t\t}\n\t\t\t\t\tlistExtend(xlist, yiter)\n\t\t\t\t\tz = xlist\n\t\t\t\t}\n\t\t\t}\n\t\t\tif z == nil {\n\t\t\t\tz, err = Binary(syntax.PLUS, x, y)\n\t\t\t\tif err != nil {\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstack[sp] = z\n\t\t\tsp++\n\n\t\tcase compile.INPLACE_PIPE:\n\t\t\ty := stack[sp-1]\n\t\t\tx := stack[sp-2]\n\t\t\tsp -= 2\n\n\t\t\t// It's possible that y is not Dict but\n\t\t\t// nonetheless defines x|y, in which case we\n\t\t\t// should fall back to the general case.\n\t\t\tvar z Value\n\t\t\tif xdict, ok := x.(*Dict); ok {\n\t\t\t\tif ydict, ok := y.(*Dict); ok {\n\t\t\t\t\tif err = xdict.ht.checkMutable(\"apply |= to\"); err != nil {\n\t\t\t\t\t\tbreak loop\n\t\t\t\t\t}\n\t\t\t\t\txdict.ht.addAll(&ydict.ht) // can't fail\n\t\t\t\t\tz = xdict\n\t\t\t\t}\n\t\t\t}\n\t\t\tif z == nil {\n\t\t\t\tz, err = Binary(syntax.PIPE, x, y)\n\t\t\t\tif err != nil {\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstack[sp] = z\n\t\t\tsp++\n\n\t\tcase compile.NONE:\n\t\t\tstack[sp] = None\n\t\t\tsp++\n\n\t\tcase compile.TRUE:\n\t\t\tstack[sp] = True\n\t\t\tsp++\n\n\t\tcase compile.FALSE:\n\t\t\tstack[sp] = False\n\t\t\tsp++\n\n\t\tcase compile.MANDATORY:\n\t\t\tstack[sp] = mandatory{}\n\t\t\tsp++\n\n\t\tcase compile.JMP:\n\t\t\tpc = arg\n\n\t\tcase compile.CALL, compile.CALL_VAR, compile.CALL_KW, compile.CALL_VAR_KW:\n\t\t\tvar kwargs Value\n\t\t\tif op == compile.CALL_KW || op == compile.CALL_VAR_KW {\n\t\t\t\tkwargs = stack[sp-1]\n\t\t\t\tsp--\n\t\t\t}\n\n\t\t\tvar args Value\n\t\t\tif op == compile.CALL_VAR || op == compile.CALL_VAR_KW {\n\t\t\t\targs = stack[sp-1]\n\t\t\t\tsp--\n\t\t\t}\n\n\t\t\t// named args (pairs)\n\t\t\tvar kvpairs []Tuple\n\t\t\tif nkvpairs := int(arg & 0xff); nkvpairs > 0 {\n\t\t\t\tkvpairs = make([]Tuple, 0, nkvpairs)\n\t\t\t\tkvpairsAlloc := make(Tuple, 2*nkvpairs) // allocate a single backing array\n\t\t\t\tsp -= 2 * nkvpairs\n\t\t\t\tfor i := 0; i < nkvpairs; i++ {\n\t\t\t\t\tpair := kvpairsAlloc[:2:2]\n\t\t\t\t\tkvpairsAlloc = kvpairsAlloc[2:]\n\t\t\t\t\tpair[0] = stack[sp+2*i]   // name\n\t\t\t\t\tpair[1] = stack[sp+2*i+1] // value\n\t\t\t\t\tkvpairs = append(kvpairs, pair)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif kwargs != nil {\n\t\t\t\t// Add key/value items from **kwargs dictionary.\n\t\t\t\tdict, ok := kwargs.(IterableMapping)\n\t\t\t\tif !ok {\n\t\t\t\t\terr = fmt.Errorf(\"argument after ** must be a mapping, not %s\", kwargs.Type())\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\t\t\t\titems := dict.Items()\n\t\t\t\tfor _, item := range items {\n\t\t\t\t\tif _, ok := item[0].(String); !ok {\n\t\t\t\t\t\terr = fmt.Errorf(\"keywords must be strings, not %s\", item[0].Type())\n\t\t\t\t\t\tbreak loop\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif len(kvpairs) == 0 {\n\t\t\t\t\tkvpairs = items\n\t\t\t\t} else {\n\t\t\t\t\tkvpairs = append(kvpairs, items...)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// positional args\n\t\t\tvar positional Tuple\n\t\t\tif npos := int(arg >> 8); npos > 0 {\n\t\t\t\tpositional = stack[sp-npos : sp]\n\t\t\t\tsp -= npos\n\n\t\t\t\t// Copy positional arguments into a new array,\n\t\t\t\t// unless the callee is another Starlark function,\n\t\t\t\t// in which case it can be trusted not to mutate them.\n\t\t\t\tif _, ok := stack[sp-1].(*Function); !ok || args != nil {\n\t\t\t\t\tpositional = append(Tuple(nil), positional...)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif args != nil {\n\t\t\t\t// Add elements from *args sequence.\n\t\t\t\titer := Iterate(args)\n\t\t\t\tif iter == nil {\n\t\t\t\t\terr = fmt.Errorf(\"argument after * must be iterable, not %s\", args.Type())\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\t\t\t\tvar elem Value\n\t\t\t\tfor iter.Next(&elem) {\n\t\t\t\t\tpositional = append(positional, elem)\n\t\t\t\t}\n\t\t\t\titer.Done()\n\t\t\t}\n\n\t\t\tfunction := stack[sp-1]\n\n\t\t\tif vmdebug {\n\t\t\t\tfmt.Printf(\"VM call %s args=%s kwargs=%s @%s\\n\",\n\t\t\t\t\tfunction, positional, kvpairs, f.Position(fr.pc))\n\t\t\t}\n\n\t\t\tthread.endProfSpan()\n\t\t\tz, err2 := Call(thread, function, positional, kvpairs)\n\t\t\tthread.beginProfSpan()\n\t\t\tif err2 != nil {\n\t\t\t\terr = err2\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tif vmdebug {\n\t\t\t\tfmt.Printf(\"Resuming %s @ %s\\n\", f.Name, f.Position(0))\n\t\t\t}\n\t\t\tstack[sp-1] = z\n\n\t\tcase compile.ITERPUSH:\n\t\t\tx := stack[sp-1]\n\t\t\tsp--\n\t\t\titer := Iterate(x)\n\t\t\tif iter == nil {\n\t\t\t\terr = fmt.Errorf(\"%s value is not iterable\", x.Type())\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\titerstack = append(iterstack, iter)\n\n\t\tcase compile.ITERJMP:\n\t\t\titer := iterstack[len(iterstack)-1]\n\t\t\tif iter.Next(&stack[sp]) {\n\t\t\t\tsp++\n\t\t\t} else {\n\t\t\t\tpc = arg\n\t\t\t}\n\n\t\tcase compile.ITERPOP:\n\t\t\tn := len(iterstack) - 1\n\t\t\titerstack[n].Done()\n\t\t\titerstack = iterstack[:n]\n\n\t\tcase compile.NOT:\n\t\t\tstack[sp-1] = !stack[sp-1].Truth()\n\n\t\tcase compile.RETURN:\n\t\t\tresult = stack[sp-1]\n\t\t\tbreak loop\n\n\t\tcase compile.SETINDEX:\n\t\t\tz := stack[sp-1]\n\t\t\ty := stack[sp-2]\n\t\t\tx := stack[sp-3]\n\t\t\tsp -= 3\n\t\t\terr = setIndex(x, y, z)\n\t\t\tif err != nil {\n\t\t\t\tbreak loop\n\t\t\t}\n\n\t\tcase compile.INDEX:\n\t\t\ty := stack[sp-1]\n\t\t\tx := stack[sp-2]\n\t\t\tsp -= 2\n\t\t\tz, err2 := getIndex(x, y)\n\t\t\tif err2 != nil {\n\t\t\t\terr = err2\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp] = z\n\t\t\tsp++\n\n\t\tcase compile.ATTR:\n\t\t\tx := stack[sp-1]\n\t\t\tname := f.Prog.Names[arg]\n\t\t\ty, err2 := getAttr(x, name)\n\t\t\tif err2 != nil {\n\t\t\t\terr = err2\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp-1] = y\n\n\t\tcase compile.SETFIELD:\n\t\t\ty := stack[sp-1]\n\t\t\tx := stack[sp-2]\n\t\t\tsp -= 2\n\t\t\tname := f.Prog.Names[arg]\n\t\t\tif err2 := setField(x, name, y); err2 != nil {\n\t\t\t\terr = err2\n\t\t\t\tbreak loop\n\t\t\t}\n\n\t\tcase compile.MAKEDICT:\n\t\t\tstack[sp] = new(Dict)\n\t\t\tsp++\n\n\t\tcase compile.SETDICT, compile.SETDICTUNIQ:\n\t\t\tdict := stack[sp-3].(*Dict)\n\t\t\tk := stack[sp-2]\n\t\t\tv := stack[sp-1]\n\t\t\tsp -= 3\n\t\t\toldlen := dict.Len()\n\t\t\tif err2 := dict.SetKey(k, v); err2 != nil {\n\t\t\t\terr = err2\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tif op == compile.SETDICTUNIQ && dict.Len() == oldlen {\n\t\t\t\terr = fmt.Errorf(\"duplicate key: %v\", k)\n\t\t\t\tbreak loop\n\t\t\t}\n\n\t\tcase compile.APPEND:\n\t\t\telem := stack[sp-1]\n\t\t\tlist := stack[sp-2].(*List)\n\t\t\tsp -= 2\n\t\t\tlist.elems = append(list.elems, elem)\n\n\t\tcase compile.SLICE:\n\t\t\tx := stack[sp-4]\n\t\t\tlo := stack[sp-3]\n\t\t\thi := stack[sp-2]\n\t\t\tstep := stack[sp-1]\n\t\t\tsp -= 4\n\t\t\tres, err2 := slice(x, lo, hi, step)\n\t\t\tif err2 != nil {\n\t\t\t\terr = err2\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp] = res\n\t\t\tsp++\n\n\t\tcase compile.UNPACK:\n\t\t\tn := int(arg)\n\t\t\titerable := stack[sp-1]\n\t\t\tsp--\n\t\t\titer := Iterate(iterable)\n\t\t\tif iter == nil {\n\t\t\t\terr = fmt.Errorf(\"got %s in sequence assignment\", iterable.Type())\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\ti := 0\n\t\t\tsp += n\n\t\t\tfor i < n && iter.Next(&stack[sp-1-i]) {\n\t\t\t\ti++\n\t\t\t}\n\t\t\tvar dummy Value\n\t\t\tif iter.Next(&dummy) {\n\t\t\t\t// NB: Len may return -1 here in obscure cases.\n\t\t\t\terr = fmt.Errorf(\"too many values to unpack (got %d, want %d)\", Len(iterable), n)\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\titer.Done()\n\t\t\tif i < n {\n\t\t\t\terr = fmt.Errorf(\"too few values to unpack (got %d, want %d)\", i, n)\n\t\t\t\tbreak loop\n\t\t\t}\n\n\t\tcase compile.CJMP:\n\t\t\tif stack[sp-1].Truth() {\n\t\t\t\tpc = arg\n\t\t\t}\n\t\t\tsp--\n\n\t\tcase compile.CONSTANT:\n\t\t\tstack[sp] = fn.module.constants[arg]\n\t\t\tsp++\n\n\t\tcase compile.MAKETUPLE:\n\t\t\tn := int(arg)\n\t\t\ttuple := make(Tuple, n)\n\t\t\tsp -= n\n\t\t\tcopy(tuple, stack[sp:])\n\t\t\tstack[sp] = tuple\n\t\t\tsp++\n\n\t\tcase compile.MAKELIST:\n\t\t\tn := int(arg)\n\t\t\telems := make([]Value, n)\n\t\t\tsp -= n\n\t\t\tcopy(elems, stack[sp:])\n\t\t\tstack[sp] = NewList(elems)\n\t\t\tsp++\n\n\t\tcase compile.MAKEFUNC:\n\t\t\tfuncode := f.Prog.Functions[arg]\n\t\t\ttuple := stack[sp-1].(Tuple)\n\t\t\tn := len(tuple) - len(funcode.Freevars)\n\t\t\tdefaults := tuple[:n:n]\n\t\t\tfreevars := tuple[n:]\n\t\t\tstack[sp-1] = &Function{\n\t\t\t\tfuncode:  funcode,\n\t\t\t\tmodule:   fn.module,\n\t\t\t\tdefaults: defaults,\n\t\t\t\tfreevars: freevars,\n\t\t\t}\n\n\t\tcase compile.LOAD:\n\t\t\tn := int(arg)\n\t\t\tmodule := string(stack[sp-1].(String))\n\t\t\tsp--\n\n\t\t\tif thread.Load == nil {\n\t\t\t\terr = fmt.Errorf(\"load not implemented by this application\")\n\t\t\t\tbreak loop\n\t\t\t}\n\n\t\t\tthread.endProfSpan()\n\t\t\tdict, err2 := thread.Load(thread, module)\n\t\t\tthread.beginProfSpan()\n\t\t\tif err2 != nil {\n\t\t\t\terr = wrappedError{\n\t\t\t\t\tmsg:   fmt.Sprintf(\"cannot load %s: %v\", module, err2),\n\t\t\t\t\tcause: err2,\n\t\t\t\t}\n\t\t\t\tbreak loop\n\t\t\t}\n\n\t\t\tfor i := 0; i < n; i++ {\n\t\t\t\tfrom := string(stack[sp-1-i].(String))\n\t\t\t\tv, ok := dict[from]\n\t\t\t\tif !ok {\n\t\t\t\t\terr = fmt.Errorf(\"load: name %s not found in module %s\", from, module)\n\t\t\t\t\tif n := spell.Nearest(from, dict.Keys()); n != \"\" {\n\t\t\t\t\t\terr = fmt.Errorf(\"%s (did you mean %s?)\", err, n)\n\t\t\t\t\t}\n\t\t\t\t\tbreak loop\n\t\t\t\t}\n\t\t\t\tstack[sp-1-i] = v\n\t\t\t}\n\n\t\tcase compile.SETLOCAL:\n\t\t\tlocals[arg] = stack[sp-1]\n\t\t\tsp--\n\n\t\tcase compile.SETLOCALCELL:\n\t\t\tlocals[arg].(*cell).v = stack[sp-1]\n\t\t\tsp--\n\n\t\tcase compile.SETGLOBAL:\n\t\t\tfn.module.globals[arg] = stack[sp-1]\n\t\t\tsp--\n\n\t\tcase compile.LOCAL:\n\t\t\tx := locals[arg]\n\t\t\tif x == nil {\n\t\t\t\terr = fmt.Errorf(\"local variable %s referenced before assignment\", f.Locals[arg].Name)\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp] = x\n\t\t\tsp++\n\n\t\tcase compile.FREE:\n\t\t\tstack[sp] = fn.freevars[arg]\n\t\t\tsp++\n\n\t\tcase compile.LOCALCELL:\n\t\t\tv := locals[arg].(*cell).v\n\t\t\tif v == nil {\n\t\t\t\terr = fmt.Errorf(\"local variable %s referenced before assignment\", f.Locals[arg].Name)\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp] = v\n\t\t\tsp++\n\n\t\tcase compile.FREECELL:\n\t\t\tv := fn.freevars[arg].(*cell).v\n\t\t\tif v == nil {\n\t\t\t\terr = fmt.Errorf(\"local variable %s referenced before assignment\", f.Freevars[arg].Name)\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp] = v\n\t\t\tsp++\n\n\t\tcase compile.GLOBAL:\n\t\t\tx := fn.module.globals[arg]\n\t\t\tif x == nil {\n\t\t\t\terr = fmt.Errorf(\"global variable %s referenced before assignment\", f.Prog.Globals[arg].Name)\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp] = x\n\t\t\tsp++\n\n\t\tcase compile.PREDECLARED:\n\t\t\tname := f.Prog.Names[arg]\n\t\t\tx := fn.module.predeclared[name]\n\t\t\tif x == nil {\n\t\t\t\terr = fmt.Errorf(\"internal error: predeclared variable %s is uninitialized\", name)\n\t\t\t\tbreak loop\n\t\t\t}\n\t\t\tstack[sp] = x\n\t\t\tsp++\n\n\t\tcase compile.UNIVERSAL:\n\t\t\tstack[sp] = Universe[f.Prog.Names[arg]]\n\t\t\tsp++\n\n\t\tdefault:\n\t\t\terr = fmt.Errorf(\"unimplemented: %s\", op)\n\t\t\tbreak loop\n\t\t}\n\t}\n\t// (deferred cleanup runs here)\n\treturn result, err\n}\n\ntype wrappedError struct {\n\tmsg   string\n\tcause error\n}\n\nfunc (e wrappedError) Error() string {\n\treturn e.msg\n}\n\n// Implements the xerrors.Wrapper interface\n// https://godoc.org/golang.org/x/xerrors#Wrapper\nfunc (e wrappedError) Unwrap() error {\n\treturn e.cause\n}\n\n// mandatory is a sentinel value used in a function's defaults tuple\n// to indicate that a (keyword-only) parameter is mandatory.\ntype mandatory struct{}\n\nfunc (mandatory) String() string        { return \"mandatory\" }\nfunc (mandatory) Type() string          { return \"mandatory\" }\nfunc (mandatory) Freeze()               {} // immutable\nfunc (mandatory) Truth() Bool           { return False }\nfunc (mandatory) Hash() (uint32, error) { return 0, nil }\n\n// A cell is a box containing a Value.\n// Local variables marked as cells hold their value indirectly\n// so that they may be shared by outer and inner nested functions.\n// Cells are always accessed using indirect {FREE,LOCAL,SETLOCAL}CELL instructions.\n// The FreeVars tuple contains only cells.\n// The FREE instruction always yields a cell.\ntype cell struct{ v Value }\n\nfunc (c *cell) String() string { return \"cell\" }\nfunc (c *cell) Type() string   { return \"cell\" }\nfunc (c *cell) Freeze() {\n\tif c.v != nil {\n\t\tc.v.Freeze()\n\t}\n}\nfunc (c *cell) Truth() Bool           { panic(\"unreachable\") }\nfunc (c *cell) Hash() (uint32, error) { panic(\"unreachable\") }\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/library.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage starlark\n\n// This file defines the library of built-ins.\n//\n// Built-ins must explicitly check the \"frozen\" flag before updating\n// mutable types such as lists and dicts.\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"math/big\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf16\"\n\t\"unicode/utf8\"\n\n\t\"go.starlark.net/syntax\"\n)\n\n// Universe defines the set of universal built-ins, such as None, True, and len.\n//\n// The Go application may add or remove items from the\n// universe dictionary before Starlark evaluation begins.\n// All values in the dictionary must be immutable.\n// Starlark programs cannot modify the dictionary.\nvar Universe StringDict\n\nfunc init() {\n\t// https://github.com/google/starlark-go/blob/master/doc/spec.md#built-in-constants-and-functions\n\tUniverse = StringDict{\n\t\t\"None\":      None,\n\t\t\"True\":      True,\n\t\t\"False\":     False,\n\t\t\"abs\":       NewBuiltin(\"abs\", abs),\n\t\t\"any\":       NewBuiltin(\"any\", any),\n\t\t\"all\":       NewBuiltin(\"all\", all),\n\t\t\"bool\":      NewBuiltin(\"bool\", bool_),\n\t\t\"bytes\":     NewBuiltin(\"bytes\", bytes_),\n\t\t\"chr\":       NewBuiltin(\"chr\", chr),\n\t\t\"dict\":      NewBuiltin(\"dict\", dict),\n\t\t\"dir\":       NewBuiltin(\"dir\", dir),\n\t\t\"enumerate\": NewBuiltin(\"enumerate\", enumerate),\n\t\t\"fail\":      NewBuiltin(\"fail\", fail),\n\t\t\"float\":     NewBuiltin(\"float\", float),\n\t\t\"getattr\":   NewBuiltin(\"getattr\", getattr),\n\t\t\"hasattr\":   NewBuiltin(\"hasattr\", hasattr),\n\t\t\"hash\":      NewBuiltin(\"hash\", hash),\n\t\t\"int\":       NewBuiltin(\"int\", int_),\n\t\t\"len\":       NewBuiltin(\"len\", len_),\n\t\t\"list\":      NewBuiltin(\"list\", list),\n\t\t\"max\":       NewBuiltin(\"max\", minmax),\n\t\t\"min\":       NewBuiltin(\"min\", minmax),\n\t\t\"ord\":       NewBuiltin(\"ord\", ord),\n\t\t\"print\":     NewBuiltin(\"print\", print),\n\t\t\"range\":     NewBuiltin(\"range\", range_),\n\t\t\"repr\":      NewBuiltin(\"repr\", repr),\n\t\t\"reversed\":  NewBuiltin(\"reversed\", reversed),\n\t\t\"set\":       NewBuiltin(\"set\", set), // requires resolve.AllowSet\n\t\t\"sorted\":    NewBuiltin(\"sorted\", sorted),\n\t\t\"str\":       NewBuiltin(\"str\", str),\n\t\t\"tuple\":     NewBuiltin(\"tuple\", tuple),\n\t\t\"type\":      NewBuiltin(\"type\", type_),\n\t\t\"zip\":       NewBuiltin(\"zip\", zip),\n\t}\n}\n\n// methods of built-in types\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#built-in-methods\nvar (\n\tbytesMethods = map[string]*Builtin{\n\t\t\"elems\": NewBuiltin(\"elems\", bytes_elems),\n\t}\n\n\tdictMethods = map[string]*Builtin{\n\t\t\"clear\":      NewBuiltin(\"clear\", dict_clear),\n\t\t\"get\":        NewBuiltin(\"get\", dict_get),\n\t\t\"items\":      NewBuiltin(\"items\", dict_items),\n\t\t\"keys\":       NewBuiltin(\"keys\", dict_keys),\n\t\t\"pop\":        NewBuiltin(\"pop\", dict_pop),\n\t\t\"popitem\":    NewBuiltin(\"popitem\", dict_popitem),\n\t\t\"setdefault\": NewBuiltin(\"setdefault\", dict_setdefault),\n\t\t\"update\":     NewBuiltin(\"update\", dict_update),\n\t\t\"values\":     NewBuiltin(\"values\", dict_values),\n\t}\n\n\tlistMethods = map[string]*Builtin{\n\t\t\"append\": NewBuiltin(\"append\", list_append),\n\t\t\"clear\":  NewBuiltin(\"clear\", list_clear),\n\t\t\"extend\": NewBuiltin(\"extend\", list_extend),\n\t\t\"index\":  NewBuiltin(\"index\", list_index),\n\t\t\"insert\": NewBuiltin(\"insert\", list_insert),\n\t\t\"pop\":    NewBuiltin(\"pop\", list_pop),\n\t\t\"remove\": NewBuiltin(\"remove\", list_remove),\n\t}\n\n\tstringMethods = map[string]*Builtin{\n\t\t\"capitalize\":     NewBuiltin(\"capitalize\", string_capitalize),\n\t\t\"codepoint_ords\": NewBuiltin(\"codepoint_ords\", string_iterable),\n\t\t\"codepoints\":     NewBuiltin(\"codepoints\", string_iterable), // sic\n\t\t\"count\":          NewBuiltin(\"count\", string_count),\n\t\t\"elem_ords\":      NewBuiltin(\"elem_ords\", string_iterable),\n\t\t\"elems\":          NewBuiltin(\"elems\", string_iterable),      // sic\n\t\t\"endswith\":       NewBuiltin(\"endswith\", string_startswith), // sic\n\t\t\"find\":           NewBuiltin(\"find\", string_find),\n\t\t\"format\":         NewBuiltin(\"format\", string_format),\n\t\t\"index\":          NewBuiltin(\"index\", string_index),\n\t\t\"isalnum\":        NewBuiltin(\"isalnum\", string_isalnum),\n\t\t\"isalpha\":        NewBuiltin(\"isalpha\", string_isalpha),\n\t\t\"isdigit\":        NewBuiltin(\"isdigit\", string_isdigit),\n\t\t\"islower\":        NewBuiltin(\"islower\", string_islower),\n\t\t\"isspace\":        NewBuiltin(\"isspace\", string_isspace),\n\t\t\"istitle\":        NewBuiltin(\"istitle\", string_istitle),\n\t\t\"isupper\":        NewBuiltin(\"isupper\", string_isupper),\n\t\t\"join\":           NewBuiltin(\"join\", string_join),\n\t\t\"lower\":          NewBuiltin(\"lower\", string_lower),\n\t\t\"lstrip\":         NewBuiltin(\"lstrip\", string_strip), // sic\n\t\t\"partition\":      NewBuiltin(\"partition\", string_partition),\n\t\t\"removeprefix\":   NewBuiltin(\"removeprefix\", string_removefix),\n\t\t\"removesuffix\":   NewBuiltin(\"removesuffix\", string_removefix),\n\t\t\"replace\":        NewBuiltin(\"replace\", string_replace),\n\t\t\"rfind\":          NewBuiltin(\"rfind\", string_rfind),\n\t\t\"rindex\":         NewBuiltin(\"rindex\", string_rindex),\n\t\t\"rpartition\":     NewBuiltin(\"rpartition\", string_partition), // sic\n\t\t\"rsplit\":         NewBuiltin(\"rsplit\", string_split),         // sic\n\t\t\"rstrip\":         NewBuiltin(\"rstrip\", string_strip),         // sic\n\t\t\"split\":          NewBuiltin(\"split\", string_split),\n\t\t\"splitlines\":     NewBuiltin(\"splitlines\", string_splitlines),\n\t\t\"startswith\":     NewBuiltin(\"startswith\", string_startswith),\n\t\t\"strip\":          NewBuiltin(\"strip\", string_strip),\n\t\t\"title\":          NewBuiltin(\"title\", string_title),\n\t\t\"upper\":          NewBuiltin(\"upper\", string_upper),\n\t}\n\n\tsetMethods = map[string]*Builtin{\n\t\t\"add\":                  NewBuiltin(\"add\", set_add),\n\t\t\"clear\":                NewBuiltin(\"clear\", set_clear),\n\t\t\"difference\":           NewBuiltin(\"difference\", set_difference),\n\t\t\"discard\":              NewBuiltin(\"discard\", set_discard),\n\t\t\"intersection\":         NewBuiltin(\"intersection\", set_intersection),\n\t\t\"issubset\":             NewBuiltin(\"issubset\", set_issubset),\n\t\t\"issuperset\":           NewBuiltin(\"issuperset\", set_issuperset),\n\t\t\"pop\":                  NewBuiltin(\"pop\", set_pop),\n\t\t\"remove\":               NewBuiltin(\"remove\", set_remove),\n\t\t\"symmetric_difference\": NewBuiltin(\"symmetric_difference\", set_symmetric_difference),\n\t\t\"union\":                NewBuiltin(\"union\", set_union),\n\t}\n)\n\nfunc builtinAttr(recv Value, name string, methods map[string]*Builtin) (Value, error) {\n\tb := methods[name]\n\tif b == nil {\n\t\treturn nil, nil // no such method\n\t}\n\treturn b.BindReceiver(recv), nil\n}\n\nfunc builtinAttrNames(methods map[string]*Builtin) []string {\n\tnames := make([]string, 0, len(methods))\n\tfor name := range methods {\n\t\tnames = append(names, name)\n\t}\n\tsort.Strings(names)\n\treturn names\n}\n\n// ---- built-in functions ----\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#abs\nfunc abs(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar x Value\n\tif err := UnpackPositionalArgs(\"abs\", args, kwargs, 1, &x); err != nil {\n\t\treturn nil, err\n\t}\n\tswitch x := x.(type) {\n\tcase Float:\n\t\treturn Float(math.Abs(float64(x))), nil\n\tcase Int:\n\t\tif x.Sign() >= 0 {\n\t\t\treturn x, nil\n\t\t}\n\t\treturn zero.Sub(x), nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"got %s, want int or float\", x.Type())\n\t}\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#all\nfunc all(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar iterable Iterable\n\tif err := UnpackPositionalArgs(\"all\", args, kwargs, 1, &iterable); err != nil {\n\t\treturn nil, err\n\t}\n\titer := iterable.Iterate()\n\tdefer iter.Done()\n\tvar x Value\n\tfor iter.Next(&x) {\n\t\tif !x.Truth() {\n\t\t\treturn False, nil\n\t\t}\n\t}\n\treturn True, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#any\nfunc any(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar iterable Iterable\n\tif err := UnpackPositionalArgs(\"any\", args, kwargs, 1, &iterable); err != nil {\n\t\treturn nil, err\n\t}\n\titer := iterable.Iterate()\n\tdefer iter.Done()\n\tvar x Value\n\tfor iter.Next(&x) {\n\t\tif x.Truth() {\n\t\t\treturn True, nil\n\t\t}\n\t}\n\treturn False, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#bool\nfunc bool_(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar x Value = False\n\tif err := UnpackPositionalArgs(\"bool\", args, kwargs, 0, &x); err != nil {\n\t\treturn nil, err\n\t}\n\treturn x.Truth(), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#bytes\nfunc bytes_(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(kwargs) > 0 {\n\t\treturn nil, fmt.Errorf(\"bytes does not accept keyword arguments\")\n\t}\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"bytes: got %d arguments, want exactly 1\", len(args))\n\t}\n\tswitch x := args[0].(type) {\n\tcase Bytes:\n\t\treturn x, nil\n\tcase String:\n\t\t// Invalid encodings are replaced by that of U+FFFD.\n\t\treturn Bytes(utf8Transcode(string(x))), nil\n\tcase Iterable:\n\t\t// iterable of numeric byte values\n\t\tvar buf strings.Builder\n\t\tif n := Len(x); n >= 0 {\n\t\t\t// common case: known length\n\t\t\tbuf.Grow(n)\n\t\t}\n\t\titer := x.Iterate()\n\t\tdefer iter.Done()\n\t\tvar elem Value\n\t\tvar b byte\n\t\tfor i := 0; iter.Next(&elem); i++ {\n\t\t\tif err := AsInt(elem, &b); err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"bytes: at index %d, %s\", i, err)\n\t\t\t}\n\t\t\tbuf.WriteByte(b)\n\t\t}\n\t\treturn Bytes(buf.String()), nil\n\n\tdefault:\n\t\t// Unlike string(foo), which stringifies it, bytes(foo) is an error.\n\t\treturn nil, fmt.Errorf(\"bytes: got %s, want string, bytes, or iterable of ints\", x.Type())\n\t}\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#chr\nfunc chr(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(kwargs) > 0 {\n\t\treturn nil, fmt.Errorf(\"chr does not accept keyword arguments\")\n\t}\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"chr: got %d arguments, want 1\", len(args))\n\t}\n\ti, err := AsInt32(args[0])\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"chr: %s\", err)\n\t}\n\tif i < 0 {\n\t\treturn nil, fmt.Errorf(\"chr: Unicode code point %d out of range (<0)\", i)\n\t}\n\tif i > unicode.MaxRune {\n\t\treturn nil, fmt.Errorf(\"chr: Unicode code point U+%X out of range (>0x10FFFF)\", i)\n\t}\n\treturn String(string(rune(i))), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict\nfunc dict(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(args) > 1 {\n\t\treturn nil, fmt.Errorf(\"dict: got %d arguments, want at most 1\", len(args))\n\t}\n\tdict := new(Dict)\n\tif err := updateDict(dict, args, kwargs); err != nil {\n\t\treturn nil, fmt.Errorf(\"dict: %v\", err)\n\t}\n\treturn dict, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dir\nfunc dir(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(kwargs) > 0 {\n\t\treturn nil, fmt.Errorf(\"dir does not accept keyword arguments\")\n\t}\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"dir: got %d arguments, want 1\", len(args))\n\t}\n\n\tvar names []string\n\tif x, ok := args[0].(HasAttrs); ok {\n\t\tnames = x.AttrNames()\n\t}\n\tsort.Strings(names)\n\telems := make([]Value, len(names))\n\tfor i, name := range names {\n\t\telems[i] = String(name)\n\t}\n\treturn NewList(elems), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#enumerate\nfunc enumerate(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar iterable Iterable\n\tvar start int\n\tif err := UnpackPositionalArgs(\"enumerate\", args, kwargs, 1, &iterable, &start); err != nil {\n\t\treturn nil, err\n\t}\n\n\titer := iterable.Iterate()\n\tdefer iter.Done()\n\n\tvar pairs []Value\n\tvar x Value\n\n\tif n := Len(iterable); n >= 0 {\n\t\t// common case: known length\n\t\tpairs = make([]Value, 0, n)\n\t\tarray := make(Tuple, 2*n) // allocate a single backing array\n\t\tfor i := 0; iter.Next(&x); i++ {\n\t\t\tpair := array[:2:2]\n\t\t\tarray = array[2:]\n\t\t\tpair[0] = MakeInt(start + i)\n\t\t\tpair[1] = x\n\t\t\tpairs = append(pairs, pair)\n\t\t}\n\t} else {\n\t\t// non-sequence (unknown length)\n\t\tfor i := 0; iter.Next(&x); i++ {\n\t\t\tpair := Tuple{MakeInt(start + i), x}\n\t\t\tpairs = append(pairs, pair)\n\t\t}\n\t}\n\n\treturn NewList(pairs), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#fail\nfunc fail(thread *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tsep := \" \"\n\tif err := UnpackArgs(\"fail\", nil, kwargs, \"sep?\", &sep); err != nil {\n\t\treturn nil, err\n\t}\n\tbuf := new(strings.Builder)\n\tbuf.WriteString(\"fail: \")\n\tfor i, v := range args {\n\t\tif i > 0 {\n\t\t\tbuf.WriteString(sep)\n\t\t}\n\t\tif s, ok := AsString(v); ok {\n\t\t\tbuf.WriteString(s)\n\t\t} else {\n\t\t\twriteValue(buf, v, nil)\n\t\t}\n\t}\n\n\treturn nil, errors.New(buf.String())\n}\n\nfunc float(thread *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(kwargs) > 0 {\n\t\treturn nil, fmt.Errorf(\"float does not accept keyword arguments\")\n\t}\n\tif len(args) == 0 {\n\t\treturn Float(0.0), nil\n\t}\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"float got %d arguments, wants 1\", len(args))\n\t}\n\tswitch x := args[0].(type) {\n\tcase Bool:\n\t\tif x {\n\t\t\treturn Float(1.0), nil\n\t\t} else {\n\t\t\treturn Float(0.0), nil\n\t\t}\n\tcase Int:\n\t\treturn x.finiteFloat()\n\tcase Float:\n\t\treturn x, nil\n\tcase String:\n\t\tif x == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"float: empty string\")\n\t\t}\n\t\t// +/- NaN or Inf or Infinity (case insensitive)?\n\t\ts := string(x)\n\t\tswitch x[len(x)-1] {\n\t\tcase 'y', 'Y':\n\t\t\tif strings.EqualFold(s, \"infinity\") || strings.EqualFold(s, \"+infinity\") {\n\t\t\t\treturn inf, nil\n\t\t\t} else if strings.EqualFold(s, \"-infinity\") {\n\t\t\t\treturn neginf, nil\n\t\t\t}\n\t\tcase 'f', 'F':\n\t\t\tif strings.EqualFold(s, \"inf\") || strings.EqualFold(s, \"+inf\") {\n\t\t\t\treturn inf, nil\n\t\t\t} else if strings.EqualFold(s, \"-inf\") {\n\t\t\t\treturn neginf, nil\n\t\t\t}\n\t\tcase 'n', 'N':\n\t\t\tif strings.EqualFold(s, \"nan\") || strings.EqualFold(s, \"+nan\") || strings.EqualFold(s, \"-nan\") {\n\t\t\t\treturn nan, nil\n\t\t\t}\n\t\t}\n\t\tf, err := strconv.ParseFloat(s, 64)\n\t\tif math.IsInf(f, 0) {\n\t\t\treturn nil, fmt.Errorf(\"floating-point number too large\")\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"invalid float literal: %s\", s)\n\t\t}\n\t\treturn Float(f), nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"float got %s, want number or string\", x.Type())\n\t}\n}\n\nvar (\n\tinf    = Float(math.Inf(+1))\n\tneginf = Float(math.Inf(-1))\n\tnan    = Float(math.NaN())\n)\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#getattr\nfunc getattr(thread *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar object, dflt Value\n\tvar name string\n\tif err := UnpackPositionalArgs(\"getattr\", args, kwargs, 2, &object, &name, &dflt); err != nil {\n\t\treturn nil, err\n\t}\n\tif object, ok := object.(HasAttrs); ok {\n\t\tv, err := object.Attr(name)\n\t\tif err != nil {\n\t\t\t// An error could mean the field doesn't exist,\n\t\t\t// or it exists but could not be computed.\n\t\t\tif dflt != nil {\n\t\t\t\treturn dflt, nil\n\t\t\t}\n\t\t\treturn nil, nameErr(b, err)\n\t\t}\n\t\tif v != nil {\n\t\t\treturn v, nil\n\t\t}\n\t\t// (nil, nil) => no such field\n\t}\n\tif dflt != nil {\n\t\treturn dflt, nil\n\t}\n\treturn nil, fmt.Errorf(\"getattr: %s has no .%s field or method\", object.Type(), name)\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#hasattr\nfunc hasattr(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar object Value\n\tvar name string\n\tif err := UnpackPositionalArgs(\"hasattr\", args, kwargs, 2, &object, &name); err != nil {\n\t\treturn nil, err\n\t}\n\tif object, ok := object.(HasAttrs); ok {\n\t\tv, err := object.Attr(name)\n\t\tif err == nil {\n\t\t\treturn Bool(v != nil), nil\n\t\t}\n\n\t\t// An error does not conclusively indicate presence or\n\t\t// absence of a field: it could occur while computing\n\t\t// the value of a present attribute, or it could be a\n\t\t// \"no such attribute\" error with details.\n\t\tfor _, x := range object.AttrNames() {\n\t\t\tif x == name {\n\t\t\t\treturn True, nil\n\t\t\t}\n\t\t}\n\t}\n\treturn False, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#hash\nfunc hash(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar x Value\n\tif err := UnpackPositionalArgs(\"hash\", args, kwargs, 1, &x); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar h int64\n\tswitch x := x.(type) {\n\tcase String:\n\t\t// The Starlark spec requires that the hash function be\n\t\t// deterministic across all runs, motivated by the need\n\t\t// for reproducibility of builds. Thus we cannot call\n\t\t// String.Hash, which uses the fastest implementation\n\t\t// available, because as varies across process restarts,\n\t\t// and may evolve with the implementation.\n\t\th = int64(javaStringHash(string(x)))\n\tcase Bytes:\n\t\th = int64(softHashString(string(x))) // FNV32\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"hash: got %s, want string or bytes\", x.Type())\n\t}\n\treturn MakeInt64(h), nil\n}\n\n// javaStringHash returns the same hash as would be produced by\n// java.lang.String.hashCode. This requires transcoding the string to\n// UTF-16; transcoding may introduce Unicode replacement characters\n// U+FFFD if s does not contain valid UTF-8.\nfunc javaStringHash(s string) (h int32) {\n\tfor _, r := range s {\n\t\tif utf16.IsSurrogate(r) {\n\t\t\tc1, c2 := utf16.EncodeRune(r)\n\t\t\th = 31*h + c1\n\t\t\th = 31*h + c2\n\t\t} else {\n\t\t\th = 31*h + r // r may be U+FFFD\n\t\t}\n\t}\n\treturn h\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#int\nfunc int_(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar x Value = zero\n\tvar base Value\n\tif err := UnpackArgs(\"int\", args, kwargs, \"x\", &x, \"base?\", &base); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif s, ok := AsString(x); ok {\n\t\tb := 10\n\t\tif base != nil {\n\t\t\tvar err error\n\t\t\tb, err = AsInt32(base)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"int: for base, got %s, want int\", base.Type())\n\t\t\t}\n\t\t\tif b != 0 && (b < 2 || b > 36) {\n\t\t\t\treturn nil, fmt.Errorf(\"int: base must be an integer >= 2 && <= 36\")\n\t\t\t}\n\t\t}\n\t\tres := parseInt(s, b)\n\t\tif res == nil {\n\t\t\treturn nil, fmt.Errorf(\"int: invalid literal with base %d: %s\", b, s)\n\t\t}\n\t\treturn res, nil\n\t}\n\n\tif base != nil {\n\t\treturn nil, fmt.Errorf(\"int: can't convert non-string with explicit base\")\n\t}\n\n\tif b, ok := x.(Bool); ok {\n\t\tif b {\n\t\t\treturn one, nil\n\t\t} else {\n\t\t\treturn zero, nil\n\t\t}\n\t}\n\n\ti, err := NumberToInt(x)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"int: %s\", err)\n\t}\n\treturn i, nil\n}\n\n// parseInt defines the behavior of int(string, base=int). It returns nil on error.\nfunc parseInt(s string, base int) Value {\n\t// remove sign\n\tvar neg bool\n\tif s != \"\" {\n\t\tif s[0] == '+' {\n\t\t\ts = s[1:]\n\t\t} else if s[0] == '-' {\n\t\t\tneg = true\n\t\t\ts = s[1:]\n\t\t}\n\t}\n\n\t// remove optional base prefix\n\tbaseprefix := 0\n\tif len(s) > 1 && s[0] == '0' {\n\t\tif len(s) > 2 {\n\t\t\tswitch s[1] {\n\t\t\tcase 'o', 'O':\n\t\t\t\tbaseprefix = 8\n\t\t\tcase 'x', 'X':\n\t\t\t\tbaseprefix = 16\n\t\t\tcase 'b', 'B':\n\t\t\t\tbaseprefix = 2\n\t\t\t}\n\t\t}\n\t\tif baseprefix != 0 {\n\t\t\t// Remove the base prefix if it matches\n\t\t\t// the explicit base, or if base=0.\n\t\t\tif base == 0 || baseprefix == base {\n\t\t\t\tbase = baseprefix\n\t\t\t\ts = s[2:]\n\t\t\t}\n\t\t} else {\n\t\t\t// For automatic base detection,\n\t\t\t// a string starting with zero\n\t\t\t// must be all zeros.\n\t\t\t// Thus we reject int(\"0755\", 0).\n\t\t\tif base == 0 {\n\t\t\t\tfor i := 1; i < len(s); i++ {\n\t\t\t\t\tif s[i] != '0' {\n\t\t\t\t\t\treturn nil\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn zero\n\t\t\t}\n\t\t}\n\t}\n\tif base == 0 {\n\t\tbase = 10\n\t}\n\n\t// we explicitly handled sign above.\n\t// if a sign remains, it is invalid.\n\tif s != \"\" && (s[0] == '-' || s[0] == '+') {\n\t\treturn nil\n\t}\n\n\t// s has no sign or base prefix.\n\tif i, ok := new(big.Int).SetString(s, base); ok {\n\t\tres := MakeBigInt(i)\n\t\tif neg {\n\t\t\tres = zero.Sub(res)\n\t\t}\n\t\treturn res\n\t}\n\n\treturn nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#len\nfunc len_(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar x Value\n\tif err := UnpackPositionalArgs(\"len\", args, kwargs, 1, &x); err != nil {\n\t\treturn nil, err\n\t}\n\tlen := Len(x)\n\tif len < 0 {\n\t\treturn nil, fmt.Errorf(\"len: value of type %s has no len\", x.Type())\n\t}\n\treturn MakeInt(len), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#list\nfunc list(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar iterable Iterable\n\tif err := UnpackPositionalArgs(\"list\", args, kwargs, 0, &iterable); err != nil {\n\t\treturn nil, err\n\t}\n\tvar elems []Value\n\tif iterable != nil {\n\t\titer := iterable.Iterate()\n\t\tdefer iter.Done()\n\t\tif n := Len(iterable); n > 0 {\n\t\t\telems = make([]Value, 0, n) // preallocate if length known\n\t\t}\n\t\tvar x Value\n\t\tfor iter.Next(&x) {\n\t\t\telems = append(elems, x)\n\t\t}\n\t}\n\treturn NewList(elems), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#min\nfunc minmax(thread *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(args) == 0 {\n\t\treturn nil, fmt.Errorf(\"%s requires at least one positional argument\", b.Name())\n\t}\n\tvar keyFunc Callable\n\tif err := UnpackArgs(b.Name(), nil, kwargs, \"key?\", &keyFunc); err != nil {\n\t\treturn nil, err\n\t}\n\tvar op syntax.Token\n\tif b.Name() == \"max\" {\n\t\top = syntax.GT\n\t} else {\n\t\top = syntax.LT\n\t}\n\tvar iterable Value\n\tif len(args) == 1 {\n\t\titerable = args[0]\n\t} else {\n\t\titerable = args\n\t}\n\titer := Iterate(iterable)\n\tif iter == nil {\n\t\treturn nil, fmt.Errorf(\"%s: %s value is not iterable\", b.Name(), iterable.Type())\n\t}\n\tdefer iter.Done()\n\tvar extremum Value\n\tif !iter.Next(&extremum) {\n\t\treturn nil, nameErr(b, \"argument is an empty sequence\")\n\t}\n\n\tvar extremeKey Value\n\tvar keyargs Tuple\n\tif keyFunc == nil {\n\t\textremeKey = extremum\n\t} else {\n\t\tkeyargs = Tuple{extremum}\n\t\tres, err := Call(thread, keyFunc, keyargs, nil)\n\t\tif err != nil {\n\t\t\treturn nil, err // to preserve backtrace, don't modify error\n\t\t}\n\t\textremeKey = res\n\t}\n\n\tvar x Value\n\tfor iter.Next(&x) {\n\t\tvar key Value\n\t\tif keyFunc == nil {\n\t\t\tkey = x\n\t\t} else {\n\t\t\tkeyargs[0] = x\n\t\t\tres, err := Call(thread, keyFunc, keyargs, nil)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err // to preserve backtrace, don't modify error\n\t\t\t}\n\t\t\tkey = res\n\t\t}\n\n\t\tif ok, err := Compare(op, key, extremeKey); err != nil {\n\t\t\treturn nil, nameErr(b, err)\n\t\t} else if ok {\n\t\t\textremum = x\n\t\t\textremeKey = key\n\t\t}\n\t}\n\treturn extremum, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#ord\nfunc ord(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(kwargs) > 0 {\n\t\treturn nil, fmt.Errorf(\"ord does not accept keyword arguments\")\n\t}\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"ord: got %d arguments, want 1\", len(args))\n\t}\n\tswitch x := args[0].(type) {\n\tcase String:\n\t\t// ord(string) returns int value of sole rune.\n\t\ts := string(x)\n\t\tr, sz := utf8.DecodeRuneInString(s)\n\t\tif sz == 0 || sz != len(s) {\n\t\t\tn := utf8.RuneCountInString(s)\n\t\t\treturn nil, fmt.Errorf(\"ord: string encodes %d Unicode code points, want 1\", n)\n\t\t}\n\t\treturn MakeInt(int(r)), nil\n\n\tcase Bytes:\n\t\t// ord(bytes) returns int value of sole byte.\n\t\tif len(x) != 1 {\n\t\t\treturn nil, fmt.Errorf(\"ord: bytes has length %d, want 1\", len(x))\n\t\t}\n\t\treturn MakeInt(int(x[0])), nil\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"ord: got %s, want string or bytes\", x.Type())\n\t}\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#print\nfunc print(thread *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tsep := \" \"\n\tif err := UnpackArgs(\"print\", nil, kwargs, \"sep?\", &sep); err != nil {\n\t\treturn nil, err\n\t}\n\tbuf := new(strings.Builder)\n\tfor i, v := range args {\n\t\tif i > 0 {\n\t\t\tbuf.WriteString(sep)\n\t\t}\n\t\tif s, ok := AsString(v); ok {\n\t\t\tbuf.WriteString(s)\n\t\t} else if b, ok := v.(Bytes); ok {\n\t\t\tbuf.WriteString(string(b))\n\t\t} else {\n\t\t\twriteValue(buf, v, nil)\n\t\t}\n\t}\n\n\ts := buf.String()\n\tif thread.Print != nil {\n\t\tthread.Print(thread, s)\n\t} else {\n\t\tfmt.Fprintln(os.Stderr, s)\n\t}\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#range\nfunc range_(thread *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar start, stop, step int\n\tstep = 1\n\tif err := UnpackPositionalArgs(\"range\", args, kwargs, 1, &start, &stop, &step); err != nil {\n\t\treturn nil, err\n\t}\n\n\tif len(args) == 1 {\n\t\t// range(stop)\n\t\tstart, stop = 0, start\n\t}\n\tif step == 0 {\n\t\t// we were given range(start, stop, 0)\n\t\treturn nil, nameErr(b, \"step argument must not be zero\")\n\t}\n\n\treturn rangeValue{start: start, stop: stop, step: step, len: rangeLen(start, stop, step)}, nil\n}\n\n// A rangeValue is a comparable, immutable, indexable sequence of integers\n// defined by the three parameters to a range(...) call.\n// Invariant: step != 0.\ntype rangeValue struct{ start, stop, step, len int }\n\nvar (\n\t_ Indexable  = rangeValue{}\n\t_ Sequence   = rangeValue{}\n\t_ Comparable = rangeValue{}\n\t_ Sliceable  = rangeValue{}\n)\n\nfunc (r rangeValue) Len() int          { return r.len }\nfunc (r rangeValue) Index(i int) Value { return MakeInt(r.start + i*r.step) }\nfunc (r rangeValue) Iterate() Iterator { return &rangeIterator{r, 0} }\n\n// rangeLen calculates the length of a range with the provided start, stop, and step.\n// caller must ensure that step is non-zero.\nfunc rangeLen(start, stop, step int) int {\n\tswitch {\n\tcase step > 0:\n\t\tif stop > start {\n\t\t\treturn (stop-1-start)/step + 1\n\t\t}\n\tcase step < 0:\n\t\tif start > stop {\n\t\t\treturn (start-1-stop)/-step + 1\n\t\t}\n\tdefault:\n\t\tpanic(\"rangeLen: zero step\")\n\t}\n\treturn 0\n}\n\nfunc (r rangeValue) Slice(start, end, step int) Value {\n\tnewStart := r.start + r.step*start\n\tnewStop := r.start + r.step*end\n\tnewStep := r.step * step\n\treturn rangeValue{\n\t\tstart: newStart,\n\t\tstop:  newStop,\n\t\tstep:  newStep,\n\t\tlen:   rangeLen(newStart, newStop, newStep),\n\t}\n}\n\nfunc (r rangeValue) Freeze() {} // immutable\nfunc (r rangeValue) String() string {\n\tif r.step != 1 {\n\t\treturn fmt.Sprintf(\"range(%d, %d, %d)\", r.start, r.stop, r.step)\n\t} else if r.start != 0 {\n\t\treturn fmt.Sprintf(\"range(%d, %d)\", r.start, r.stop)\n\t} else {\n\t\treturn fmt.Sprintf(\"range(%d)\", r.stop)\n\t}\n}\nfunc (r rangeValue) Type() string          { return \"range\" }\nfunc (r rangeValue) Truth() Bool           { return r.len > 0 }\nfunc (r rangeValue) Hash() (uint32, error) { return 0, fmt.Errorf(\"unhashable: range\") }\n\nfunc (x rangeValue) CompareSameType(op syntax.Token, y_ Value, depth int) (bool, error) {\n\ty := y_.(rangeValue)\n\tswitch op {\n\tcase syntax.EQL:\n\t\treturn rangeEqual(x, y), nil\n\tcase syntax.NEQ:\n\t\treturn !rangeEqual(x, y), nil\n\tdefault:\n\t\treturn false, fmt.Errorf(\"%s %s %s not implemented\", x.Type(), op, y.Type())\n\t}\n}\n\nfunc rangeEqual(x, y rangeValue) bool {\n\t// Two ranges compare equal if they denote the same sequence.\n\tif x.len != y.len {\n\t\treturn false // sequences differ in length\n\t}\n\tif x.len == 0 {\n\t\treturn true // both sequences are empty\n\t}\n\tif x.start != y.start {\n\t\treturn false // first element differs\n\t}\n\treturn x.len == 1 || x.step == y.step\n}\n\nfunc (r rangeValue) contains(x Int) bool {\n\tx32, err := AsInt32(x)\n\tif err != nil {\n\t\treturn false // out of range\n\t}\n\tdelta := x32 - r.start\n\tquo, rem := delta/r.step, delta%r.step\n\treturn rem == 0 && 0 <= quo && quo < r.len\n}\n\ntype rangeIterator struct {\n\tr rangeValue\n\ti int\n}\n\nfunc (it *rangeIterator) Next(p *Value) bool {\n\tif it.i < it.r.len {\n\t\t*p = it.r.Index(it.i)\n\t\tit.i++\n\t\treturn true\n\t}\n\treturn false\n}\nfunc (*rangeIterator) Done() {}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#repr\nfunc repr(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar x Value\n\tif err := UnpackPositionalArgs(\"repr\", args, kwargs, 1, &x); err != nil {\n\t\treturn nil, err\n\t}\n\treturn String(x.String()), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#reversed\nfunc reversed(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar iterable Iterable\n\tif err := UnpackPositionalArgs(\"reversed\", args, kwargs, 1, &iterable); err != nil {\n\t\treturn nil, err\n\t}\n\titer := iterable.Iterate()\n\tdefer iter.Done()\n\tvar elems []Value\n\tif n := Len(args[0]); n >= 0 {\n\t\telems = make([]Value, 0, n) // preallocate if length known\n\t}\n\tvar x Value\n\tfor iter.Next(&x) {\n\t\telems = append(elems, x)\n\t}\n\tn := len(elems)\n\tfor i := 0; i < n>>1; i++ {\n\t\telems[i], elems[n-1-i] = elems[n-1-i], elems[i]\n\t}\n\treturn NewList(elems), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set\nfunc set(thread *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar iterable Iterable\n\tif err := UnpackPositionalArgs(\"set\", args, kwargs, 0, &iterable); err != nil {\n\t\treturn nil, err\n\t}\n\tset := new(Set)\n\tif iterable != nil {\n\t\titer := iterable.Iterate()\n\t\tdefer iter.Done()\n\t\tvar x Value\n\t\tfor iter.Next(&x) {\n\t\t\tif err := set.Insert(x); err != nil {\n\t\t\t\treturn nil, nameErr(b, err)\n\t\t\t}\n\t\t}\n\t}\n\treturn set, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#sorted\nfunc sorted(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\t// Oddly, Python's sorted permits all arguments to be positional, thus so do we.\n\tvar iterable Iterable\n\tvar key Callable\n\tvar reverse bool\n\tif err := UnpackArgs(\"sorted\", args, kwargs,\n\t\t\"iterable\", &iterable,\n\t\t\"key?\", &key,\n\t\t\"reverse?\", &reverse,\n\t); err != nil {\n\t\treturn nil, err\n\t}\n\n\titer := iterable.Iterate()\n\tdefer iter.Done()\n\tvar values []Value\n\tif n := Len(iterable); n > 0 {\n\t\tvalues = make(Tuple, 0, n) // preallocate if length is known\n\t}\n\tvar x Value\n\tfor iter.Next(&x) {\n\t\tvalues = append(values, x)\n\t}\n\n\t// Derive keys from values by applying key function.\n\tvar keys []Value\n\tif key != nil {\n\t\tkeys = make([]Value, len(values))\n\t\tfor i, v := range values {\n\t\t\tk, err := Call(thread, key, Tuple{v}, nil)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err // to preserve backtrace, don't modify error\n\t\t\t}\n\t\t\tkeys[i] = k\n\t\t}\n\t}\n\n\tslice := &sortSlice{keys: keys, values: values}\n\tif reverse {\n\t\tsort.Stable(sort.Reverse(slice))\n\t} else {\n\t\tsort.Stable(slice)\n\t}\n\treturn NewList(slice.values), slice.err\n}\n\ntype sortSlice struct {\n\tkeys   []Value // nil => values[i] is key\n\tvalues []Value\n\terr    error\n}\n\nfunc (s *sortSlice) Len() int { return len(s.values) }\nfunc (s *sortSlice) Less(i, j int) bool {\n\tkeys := s.keys\n\tif s.keys == nil {\n\t\tkeys = s.values\n\t}\n\tok, err := Compare(syntax.LT, keys[i], keys[j])\n\tif err != nil {\n\t\ts.err = err\n\t}\n\treturn ok\n}\nfunc (s *sortSlice) Swap(i, j int) {\n\tif s.keys != nil {\n\t\ts.keys[i], s.keys[j] = s.keys[j], s.keys[i]\n\t}\n\ts.values[i], s.values[j] = s.values[j], s.values[i]\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#str\nfunc str(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(kwargs) > 0 {\n\t\treturn nil, fmt.Errorf(\"str does not accept keyword arguments\")\n\t}\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"str: got %d arguments, want exactly 1\", len(args))\n\t}\n\tswitch x := args[0].(type) {\n\tcase String:\n\t\treturn x, nil\n\tcase Bytes:\n\t\t// Invalid encodings are replaced by that of U+FFFD.\n\t\treturn String(utf8Transcode(string(x))), nil\n\tdefault:\n\t\treturn String(x.String()), nil\n\t}\n}\n\n// utf8Transcode returns the UTF-8-to-UTF-8 transcoding of s.\n// The effect is that each code unit that is part of an\n// invalid sequence is replaced by U+FFFD.\nfunc utf8Transcode(s string) string {\n\tif utf8.ValidString(s) {\n\t\treturn s\n\t}\n\tvar out strings.Builder\n\tfor _, r := range s {\n\t\tout.WriteRune(r)\n\t}\n\treturn out.String()\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#tuple\nfunc tuple(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar iterable Iterable\n\tif err := UnpackPositionalArgs(\"tuple\", args, kwargs, 0, &iterable); err != nil {\n\t\treturn nil, err\n\t}\n\tif len(args) == 0 {\n\t\treturn Tuple(nil), nil\n\t}\n\titer := iterable.Iterate()\n\tdefer iter.Done()\n\tvar elems Tuple\n\tif n := Len(iterable); n > 0 {\n\t\telems = make(Tuple, 0, n) // preallocate if length is known\n\t}\n\tvar x Value\n\tfor iter.Next(&x) {\n\t\telems = append(elems, x)\n\t}\n\treturn elems, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#type\nfunc type_(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(kwargs) > 0 {\n\t\treturn nil, fmt.Errorf(\"type does not accept keyword arguments\")\n\t}\n\tif len(args) != 1 {\n\t\treturn nil, fmt.Errorf(\"type: got %d arguments, want exactly 1\", len(args))\n\t}\n\treturn String(args[0].Type()), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#zip\nfunc zip(thread *Thread, _ *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(kwargs) > 0 {\n\t\treturn nil, fmt.Errorf(\"zip does not accept keyword arguments\")\n\t}\n\trows, cols := 0, len(args)\n\titers := make([]Iterator, cols)\n\tdefer func() {\n\t\tfor _, iter := range iters {\n\t\t\tif iter != nil {\n\t\t\t\titer.Done()\n\t\t\t}\n\t\t}\n\t}()\n\tfor i, seq := range args {\n\t\tit := Iterate(seq)\n\t\tif it == nil {\n\t\t\treturn nil, fmt.Errorf(\"zip: argument #%d is not iterable: %s\", i+1, seq.Type())\n\t\t}\n\t\titers[i] = it\n\t\tn := Len(seq)\n\t\tif i == 0 || n < rows {\n\t\t\trows = n // possibly -1\n\t\t}\n\t}\n\tvar result []Value\n\tif rows >= 0 {\n\t\t// length known\n\t\tresult = make([]Value, rows)\n\t\tarray := make(Tuple, cols*rows) // allocate a single backing array\n\t\tfor i := 0; i < rows; i++ {\n\t\t\ttuple := array[:cols:cols]\n\t\t\tarray = array[cols:]\n\t\t\tfor j, iter := range iters {\n\t\t\t\titer.Next(&tuple[j])\n\t\t\t}\n\t\t\tresult[i] = tuple\n\t\t}\n\t} else {\n\t\t// length not known\n\touter:\n\t\tfor {\n\t\t\ttuple := make(Tuple, cols)\n\t\t\tfor i, iter := range iters {\n\t\t\t\tif !iter.Next(&tuple[i]) {\n\t\t\t\t\tbreak outer\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult = append(result, tuple)\n\t\t}\n\t}\n\treturn NewList(result), nil\n}\n\n// ---- methods of built-in types ---\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict·get\nfunc dict_get(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar key, dflt Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &key, &dflt); err != nil {\n\t\treturn nil, err\n\t}\n\tif v, ok, err := b.Receiver().(*Dict).Get(key); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t} else if ok {\n\t\treturn v, nil\n\t} else if dflt != nil {\n\t\treturn dflt, nil\n\t}\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict·clear\nfunc dict_clear(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\treturn None, b.Receiver().(*Dict).Clear()\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict·items\nfunc dict_items(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\titems := b.Receiver().(*Dict).Items()\n\tres := make([]Value, len(items))\n\tfor i, item := range items {\n\t\tres[i] = item // convert [2]Value to Value\n\t}\n\treturn NewList(res), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict·keys\nfunc dict_keys(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\treturn NewList(b.Receiver().(*Dict).Keys()), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict·pop\nfunc dict_pop(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar k, d Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &k, &d); err != nil {\n\t\treturn nil, err\n\t}\n\tif v, found, err := b.Receiver().(*Dict).Delete(k); err != nil {\n\t\treturn nil, nameErr(b, err) // dict is frozen or key is unhashable\n\t} else if found {\n\t\treturn v, nil\n\t} else if d != nil {\n\t\treturn d, nil\n\t}\n\treturn nil, nameErr(b, \"missing key\")\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict·popitem\nfunc dict_popitem(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := b.Receiver().(*Dict)\n\tk, ok := recv.ht.first()\n\tif !ok {\n\t\treturn nil, nameErr(b, \"empty dict\")\n\t}\n\tv, _, err := recv.Delete(k)\n\tif err != nil {\n\t\treturn nil, nameErr(b, err) // dict is frozen\n\t}\n\treturn Tuple{k, v}, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict·setdefault\nfunc dict_setdefault(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar key, dflt Value = nil, None\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &key, &dflt); err != nil {\n\t\treturn nil, err\n\t}\n\tdict := b.Receiver().(*Dict)\n\tif v, ok, err := dict.Get(key); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t} else if ok {\n\t\treturn v, nil\n\t} else if err := dict.SetKey(key, dflt); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t} else {\n\t\treturn dflt, nil\n\t}\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict·update\nfunc dict_update(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif len(args) > 1 {\n\t\treturn nil, fmt.Errorf(\"update: got %d arguments, want at most 1\", len(args))\n\t}\n\tif err := updateDict(b.Receiver().(*Dict), args, kwargs); err != nil {\n\t\treturn nil, fmt.Errorf(\"update: %v\", err)\n\t}\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#dict·update\nfunc dict_values(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\titems := b.Receiver().(*Dict).Items()\n\tres := make([]Value, len(items))\n\tfor i, item := range items {\n\t\tres[i] = item[1]\n\t}\n\treturn NewList(res), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#list·append\nfunc list_append(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar object Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &object); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := b.Receiver().(*List)\n\tif err := recv.checkMutable(\"append to\"); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\trecv.elems = append(recv.elems, object)\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#list·clear\nfunc list_clear(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := b.Receiver().(*List).Clear(); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#list·extend\nfunc list_extend(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\trecv := b.Receiver().(*List)\n\tvar iterable Iterable\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &iterable); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := recv.checkMutable(\"extend\"); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\tlistExtend(recv, iterable)\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#list·index\nfunc list_index(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar value, start_, end_ Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &value, &start_, &end_); err != nil {\n\t\treturn nil, err\n\t}\n\n\trecv := b.Receiver().(*List)\n\tstart, end, err := indices(start_, end_, recv.Len())\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\n\tfor i := start; i < end; i++ {\n\t\tif eq, err := Equal(recv.elems[i], value); err != nil {\n\t\t\treturn nil, nameErr(b, err)\n\t\t} else if eq {\n\t\t\treturn MakeInt(i), nil\n\t\t}\n\t}\n\treturn nil, nameErr(b, \"value not in list\")\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#list·insert\nfunc list_insert(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\trecv := b.Receiver().(*List)\n\tvar index int\n\tvar object Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 2, &index, &object); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := recv.checkMutable(\"insert into\"); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\n\tif index < 0 {\n\t\tindex += recv.Len()\n\t}\n\n\tif index >= recv.Len() {\n\t\t// end\n\t\trecv.elems = append(recv.elems, object)\n\t} else {\n\t\tif index < 0 {\n\t\t\tindex = 0 // start\n\t\t}\n\t\trecv.elems = append(recv.elems, nil)\n\t\tcopy(recv.elems[index+1:], recv.elems[index:]) // slide up one\n\t\trecv.elems[index] = object\n\t}\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#list·remove\nfunc list_remove(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\trecv := b.Receiver().(*List)\n\tvar value Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &value); err != nil {\n\t\treturn nil, err\n\t}\n\tif err := recv.checkMutable(\"remove from\"); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\tfor i, elem := range recv.elems {\n\t\tif eq, err := Equal(elem, value); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"remove: %v\", err)\n\t\t} else if eq {\n\t\t\trecv.elems = append(recv.elems[:i], recv.elems[i+1:]...)\n\t\t\treturn None, nil\n\t\t}\n\t}\n\treturn nil, fmt.Errorf(\"remove: element not found\")\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#list·pop\nfunc list_pop(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\trecv := b.Receiver()\n\tlist := recv.(*List)\n\tn := list.Len()\n\ti := n - 1\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &i); err != nil {\n\t\treturn nil, err\n\t}\n\torigI := i\n\tif i < 0 {\n\t\ti += n\n\t}\n\tif i < 0 || i >= n {\n\t\treturn nil, nameErr(b, outOfRange(origI, n, list))\n\t}\n\tif err := list.checkMutable(\"pop from\"); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\tres := list.elems[i]\n\tlist.elems = append(list.elems[:i], list.elems[i+1:]...)\n\treturn res, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·capitalize\nfunc string_capitalize(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\ts := string(b.Receiver().(String))\n\tres := new(strings.Builder)\n\tres.Grow(len(s))\n\tfor i, r := range s {\n\t\tif i == 0 {\n\t\t\tr = unicode.ToTitle(r)\n\t\t} else {\n\t\t\tr = unicode.ToLower(r)\n\t\t}\n\t\tres.WriteRune(r)\n\t}\n\treturn String(res.String()), nil\n}\n\n// string_iterable returns an unspecified iterable value whose iterator yields:\n// - elems: successive 1-byte substrings\n// - codepoints: successive substrings that encode a single Unicode code point.\n// - elem_ords: numeric values of successive bytes\n// - codepoint_ords: numeric values of successive Unicode code points\nfunc string_iterable(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\ts := b.Receiver().(String)\n\tords := b.Name()[len(b.Name())-2] == 'd'\n\tcodepoints := b.Name()[0] == 'c'\n\tif codepoints {\n\t\treturn stringCodepoints{s, ords}, nil\n\t} else {\n\t\treturn stringElems{s, ords}, nil\n\t}\n}\n\n// bytes_elems returns an unspecified iterable value whose\n// iterator yields the int values of successive elements.\nfunc bytes_elems(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\treturn bytesIterable{b.Receiver().(Bytes)}, nil\n}\n\n// A bytesIterable is an iterable returned by bytes.elems(),\n// whose iterator yields a sequence of numeric bytes values.\ntype bytesIterable struct{ bytes Bytes }\n\nvar _ Iterable = (*bytesIterable)(nil)\n\nfunc (bi bytesIterable) String() string        { return bi.bytes.String() + \".elems()\" }\nfunc (bi bytesIterable) Type() string          { return \"bytes.elems\" }\nfunc (bi bytesIterable) Freeze()               {} // immutable\nfunc (bi bytesIterable) Truth() Bool           { return True }\nfunc (bi bytesIterable) Hash() (uint32, error) { return 0, fmt.Errorf(\"unhashable: %s\", bi.Type()) }\nfunc (bi bytesIterable) Iterate() Iterator     { return &bytesIterator{bi.bytes} }\n\ntype bytesIterator struct{ bytes Bytes }\n\nfunc (it *bytesIterator) Next(p *Value) bool {\n\tif it.bytes == \"\" {\n\t\treturn false\n\t}\n\t*p = MakeInt(int(it.bytes[0]))\n\tit.bytes = it.bytes[1:]\n\treturn true\n}\n\nfunc (*bytesIterator) Done() {}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·count\nfunc string_count(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar sub string\n\tvar start_, end_ Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &sub, &start_, &end_); err != nil {\n\t\treturn nil, err\n\t}\n\n\trecv := string(b.Receiver().(String))\n\tstart, end, err := indices(start_, end_, len(recv))\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\n\tvar slice string\n\tif start < end {\n\t\tslice = recv[start:end]\n\t}\n\treturn MakeInt(strings.Count(slice, sub)), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·isalnum\nfunc string_isalnum(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := string(b.Receiver().(String))\n\tfor _, r := range recv {\n\t\tif !unicode.IsLetter(r) && !unicode.IsDigit(r) {\n\t\t\treturn False, nil\n\t\t}\n\t}\n\treturn Bool(recv != \"\"), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·isalpha\nfunc string_isalpha(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := string(b.Receiver().(String))\n\tfor _, r := range recv {\n\t\tif !unicode.IsLetter(r) {\n\t\t\treturn False, nil\n\t\t}\n\t}\n\treturn Bool(recv != \"\"), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·isdigit\nfunc string_isdigit(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := string(b.Receiver().(String))\n\tfor _, r := range recv {\n\t\tif !unicode.IsDigit(r) {\n\t\t\treturn False, nil\n\t\t}\n\t}\n\treturn Bool(recv != \"\"), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·islower\nfunc string_islower(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := string(b.Receiver().(String))\n\treturn Bool(isCasedString(recv) && recv == strings.ToLower(recv)), nil\n}\n\n// isCasedString reports whether its argument contains any cased code points.\nfunc isCasedString(s string) bool {\n\tfor _, r := range s {\n\t\tif isCasedRune(r) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc isCasedRune(r rune) bool {\n\t// It's unclear what the correct behavior is for a rune such as 'ﬃ',\n\t// a lowercase letter with no upper or title case and no SimpleFold.\n\treturn 'a' <= r && r <= 'z' || 'A' <= r && r <= 'Z' || unicode.SimpleFold(r) != r\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·isspace\nfunc string_isspace(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := string(b.Receiver().(String))\n\tfor _, r := range recv {\n\t\tif !unicode.IsSpace(r) {\n\t\t\treturn False, nil\n\t\t}\n\t}\n\treturn Bool(recv != \"\"), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·istitle\nfunc string_istitle(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := string(b.Receiver().(String))\n\n\t// Python semantics differ from x==strings.{To,}Title(x) in Go:\n\t// \"uppercase characters may only follow uncased characters and\n\t// lowercase characters only cased ones.\"\n\tvar cased, prevCased bool\n\tfor _, r := range recv {\n\t\tif 'A' <= r && r <= 'Z' || unicode.IsTitle(r) { // e.g. \"ǅ\"\n\t\t\tif prevCased {\n\t\t\t\treturn False, nil\n\t\t\t}\n\t\t\tprevCased = true\n\t\t\tcased = true\n\t\t} else if unicode.IsLower(r) {\n\t\t\tif !prevCased {\n\t\t\t\treturn False, nil\n\t\t\t}\n\t\t\tprevCased = true\n\t\t\tcased = true\n\t\t} else if unicode.IsUpper(r) {\n\t\t\treturn False, nil\n\t\t} else {\n\t\t\tprevCased = false\n\t\t}\n\t}\n\treturn Bool(cased), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·isupper\nfunc string_isupper(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := string(b.Receiver().(String))\n\treturn Bool(isCasedString(recv) && recv == strings.ToUpper(recv)), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·find\nfunc string_find(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\treturn string_find_impl(b, args, kwargs, true, false)\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·format\nfunc string_format(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tformat := string(b.Receiver().(String))\n\tvar auto, manual bool // kinds of positional indexing used\n\tbuf := new(strings.Builder)\n\tindex := 0\n\tfor {\n\t\tliteral := format\n\t\ti := strings.IndexByte(format, '{')\n\t\tif i >= 0 {\n\t\t\tliteral = format[:i]\n\t\t}\n\n\t\t// Replace \"}}\" with \"}\" in non-field portion, rejecting a lone '}'.\n\t\tfor {\n\t\t\tj := strings.IndexByte(literal, '}')\n\t\t\tif j < 0 {\n\t\t\t\tbuf.WriteString(literal)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif len(literal) == j+1 || literal[j+1] != '}' {\n\t\t\t\treturn nil, fmt.Errorf(\"format: single '}' in format\")\n\t\t\t}\n\t\t\tbuf.WriteString(literal[:j+1])\n\t\t\tliteral = literal[j+2:]\n\t\t}\n\n\t\tif i < 0 {\n\t\t\tbreak // end of format string\n\t\t}\n\n\t\tif i+1 < len(format) && format[i+1] == '{' {\n\t\t\t// \"{{\" means a literal '{'\n\t\t\tbuf.WriteByte('{')\n\t\t\tformat = format[i+2:]\n\t\t\tcontinue\n\t\t}\n\n\t\tformat = format[i+1:]\n\t\ti = strings.IndexByte(format, '}')\n\t\tif i < 0 {\n\t\t\treturn nil, fmt.Errorf(\"format: unmatched '{' in format\")\n\t\t}\n\n\t\tvar arg Value\n\t\tconv := \"s\"\n\t\tvar spec string\n\n\t\tfield := format[:i]\n\t\tformat = format[i+1:]\n\n\t\tvar name string\n\t\tif i := strings.IndexByte(field, '!'); i < 0 {\n\t\t\t// \"name\" or \"name:spec\"\n\t\t\tif i := strings.IndexByte(field, ':'); i < 0 {\n\t\t\t\tname = field\n\t\t\t} else {\n\t\t\t\tname = field[:i]\n\t\t\t\tspec = field[i+1:]\n\t\t\t}\n\t\t} else {\n\t\t\t// \"name!conv\" or \"name!conv:spec\"\n\t\t\tname = field[:i]\n\t\t\tfield = field[i+1:]\n\t\t\t// \"conv\" or \"conv:spec\"\n\t\t\tif i := strings.IndexByte(field, ':'); i < 0 {\n\t\t\t\tconv = field\n\t\t\t} else {\n\t\t\t\tconv = field[:i]\n\t\t\t\tspec = field[i+1:]\n\t\t\t}\n\t\t}\n\n\t\tif name == \"\" {\n\t\t\t// \"{}\": automatic indexing\n\t\t\tif manual {\n\t\t\t\treturn nil, fmt.Errorf(\"format: cannot switch from manual field specification to automatic field numbering\")\n\t\t\t}\n\t\t\tauto = true\n\t\t\tif index >= len(args) {\n\t\t\t\treturn nil, fmt.Errorf(\"format: tuple index out of range\")\n\t\t\t}\n\t\t\targ = args[index]\n\t\t\tindex++\n\t\t} else if num, ok := decimal(name); ok {\n\t\t\t// positional argument\n\t\t\tif auto {\n\t\t\t\treturn nil, fmt.Errorf(\"format: cannot switch from automatic field numbering to manual field specification\")\n\t\t\t}\n\t\t\tmanual = true\n\t\t\tif num >= len(args) {\n\t\t\t\treturn nil, fmt.Errorf(\"format: tuple index out of range\")\n\t\t\t} else {\n\t\t\t\targ = args[num]\n\t\t\t}\n\t\t} else {\n\t\t\t// keyword argument\n\t\t\tfor _, kv := range kwargs {\n\t\t\t\tif string(kv[0].(String)) == name {\n\t\t\t\t\targ = kv[1]\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif arg == nil {\n\t\t\t\t// Starlark does not support Python's x.y or a[i] syntaxes,\n\t\t\t\t// or nested use of {...}.\n\t\t\t\tif strings.Contains(name, \".\") {\n\t\t\t\t\treturn nil, fmt.Errorf(\"format: attribute syntax x.y is not supported in replacement fields: %s\", name)\n\t\t\t\t}\n\t\t\t\tif strings.Contains(name, \"[\") {\n\t\t\t\t\treturn nil, fmt.Errorf(\"format: element syntax a[i] is not supported in replacement fields: %s\", name)\n\t\t\t\t}\n\t\t\t\tif strings.Contains(name, \"{\") {\n\t\t\t\t\treturn nil, fmt.Errorf(\"format: nested replacement fields not supported\")\n\t\t\t\t}\n\t\t\t\treturn nil, fmt.Errorf(\"format: keyword %s not found\", name)\n\t\t\t}\n\t\t}\n\n\t\tif spec != \"\" {\n\t\t\t// Starlark does not support Python's format_spec features.\n\t\t\treturn nil, fmt.Errorf(\"format spec features not supported in replacement fields: %s\", spec)\n\t\t}\n\n\t\tswitch conv {\n\t\tcase \"s\":\n\t\t\tif str, ok := AsString(arg); ok {\n\t\t\t\tbuf.WriteString(str)\n\t\t\t} else {\n\t\t\t\twriteValue(buf, arg, nil)\n\t\t\t}\n\t\tcase \"r\":\n\t\t\twriteValue(buf, arg, nil)\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"format: unknown conversion %q\", conv)\n\t\t}\n\t}\n\treturn String(buf.String()), nil\n}\n\n// decimal interprets s as a sequence of decimal digits.\nfunc decimal(s string) (x int, ok bool) {\n\tn := len(s)\n\tfor i := 0; i < n; i++ {\n\t\tdigit := s[i] - '0'\n\t\tif digit > 9 {\n\t\t\treturn 0, false\n\t\t}\n\t\tx = x*10 + int(digit)\n\t\tif x < 0 {\n\t\t\treturn 0, false // underflow\n\t\t}\n\t}\n\treturn x, true\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·index\nfunc string_index(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\treturn string_find_impl(b, args, kwargs, false, false)\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·join\nfunc string_join(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\trecv := string(b.Receiver().(String))\n\tvar iterable Iterable\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &iterable); err != nil {\n\t\treturn nil, err\n\t}\n\titer := iterable.Iterate()\n\tdefer iter.Done()\n\tbuf := new(strings.Builder)\n\tvar x Value\n\tfor i := 0; iter.Next(&x); i++ {\n\t\tif i > 0 {\n\t\t\tbuf.WriteString(recv)\n\t\t}\n\t\ts, ok := AsString(x)\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"join: in list, want string, got %s\", x.Type())\n\t\t}\n\t\tbuf.WriteString(s)\n\t}\n\treturn String(buf.String()), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·lower\nfunc string_lower(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\treturn String(strings.ToLower(string(b.Receiver().(String)))), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·partition\nfunc string_partition(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\trecv := string(b.Receiver().(String))\n\tvar sep string\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &sep); err != nil {\n\t\treturn nil, err\n\t}\n\tif sep == \"\" {\n\t\treturn nil, nameErr(b, \"empty separator\")\n\t}\n\tvar i int\n\tif b.Name()[0] == 'p' {\n\t\ti = strings.Index(recv, sep) // partition\n\t} else {\n\t\ti = strings.LastIndex(recv, sep) // rpartition\n\t}\n\ttuple := make(Tuple, 0, 3)\n\tif i < 0 {\n\t\tif b.Name()[0] == 'p' {\n\t\t\ttuple = append(tuple, String(recv), String(\"\"), String(\"\"))\n\t\t} else {\n\t\t\ttuple = append(tuple, String(\"\"), String(\"\"), String(recv))\n\t\t}\n\t} else {\n\t\ttuple = append(tuple, String(recv[:i]), String(sep), String(recv[i+len(sep):]))\n\t}\n\treturn tuple, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·removeprefix\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·removesuffix\nfunc string_removefix(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\trecv := string(b.Receiver().(String))\n\tvar fix string\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &fix); err != nil {\n\t\treturn nil, err\n\t}\n\tif b.name[len(\"remove\")] == 'p' {\n\t\trecv = strings.TrimPrefix(recv, fix)\n\t} else {\n\t\trecv = strings.TrimSuffix(recv, fix)\n\t}\n\treturn String(recv), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·replace\nfunc string_replace(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\trecv := string(b.Receiver().(String))\n\tvar old, new string\n\tcount := -1\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 2, &old, &new, &count); err != nil {\n\t\treturn nil, err\n\t}\n\treturn String(strings.Replace(recv, old, new, count)), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·rfind\nfunc string_rfind(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\treturn string_find_impl(b, args, kwargs, true, true)\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·rindex\nfunc string_rindex(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\treturn string_find_impl(b, args, kwargs, false, true)\n}\n\n// https://github.com/google/starlark-go/starlark/blob/master/doc/spec.md#string·startswith\n// https://github.com/google/starlark-go/starlark/blob/master/doc/spec.md#string·endswith\nfunc string_startswith(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar x Value\n\tvar start, end Value = None, None\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &x, &start, &end); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// compute effective substring.\n\ts := string(b.Receiver().(String))\n\tif start, end, err := indices(start, end, len(s)); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t} else {\n\t\tif end < start {\n\t\t\tend = start // => empty result\n\t\t}\n\t\ts = s[start:end]\n\t}\n\n\tf := strings.HasPrefix\n\tif b.Name()[0] == 'e' { // endswith\n\t\tf = strings.HasSuffix\n\t}\n\n\tswitch x := x.(type) {\n\tcase Tuple:\n\t\tfor i, x := range x {\n\t\t\tprefix, ok := AsString(x)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"%s: want string, got %s, for element %d\",\n\t\t\t\t\tb.Name(), x.Type(), i)\n\t\t\t}\n\t\t\tif f(s, prefix) {\n\t\t\t\treturn True, nil\n\t\t\t}\n\t\t}\n\t\treturn False, nil\n\tcase String:\n\t\treturn Bool(f(s, string(x))), nil\n\t}\n\treturn nil, fmt.Errorf(\"%s: got %s, want string or tuple of string\", b.Name(), x.Type())\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·strip\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·lstrip\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·rstrip\nfunc string_strip(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar chars string\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &chars); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := string(b.Receiver().(String))\n\tvar s string\n\tswitch b.Name()[0] {\n\tcase 's': // strip\n\t\tif chars != \"\" {\n\t\t\ts = strings.Trim(recv, chars)\n\t\t} else {\n\t\t\ts = strings.TrimSpace(recv)\n\t\t}\n\tcase 'l': // lstrip\n\t\tif chars != \"\" {\n\t\t\ts = strings.TrimLeft(recv, chars)\n\t\t} else {\n\t\t\ts = strings.TrimLeftFunc(recv, unicode.IsSpace)\n\t\t}\n\tcase 'r': // rstrip\n\t\tif chars != \"\" {\n\t\t\ts = strings.TrimRight(recv, chars)\n\t\t} else {\n\t\t\ts = strings.TrimRightFunc(recv, unicode.IsSpace)\n\t\t}\n\t}\n\treturn String(s), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·title\nfunc string_title(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\n\ts := string(b.Receiver().(String))\n\n\t// Python semantics differ from x==strings.{To,}Title(x) in Go:\n\t// \"uppercase characters may only follow uncased characters and\n\t// lowercase characters only cased ones.\"\n\tbuf := new(strings.Builder)\n\tbuf.Grow(len(s))\n\tvar prevCased bool\n\tfor _, r := range s {\n\t\tif prevCased {\n\t\t\tr = unicode.ToLower(r)\n\t\t} else {\n\t\t\tr = unicode.ToTitle(r)\n\t\t}\n\t\tprevCased = isCasedRune(r)\n\t\tbuf.WriteRune(r)\n\t}\n\treturn String(buf.String()), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·upper\nfunc string_upper(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\treturn String(strings.ToUpper(string(b.Receiver().(String)))), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·split\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·rsplit\nfunc string_split(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\trecv := string(b.Receiver().(String))\n\tvar sep_ Value\n\tmaxsplit := -1\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &sep_, &maxsplit); err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar res []string\n\n\tif sep_ == nil || sep_ == None {\n\t\t// special case: split on whitespace\n\t\tif maxsplit < 0 {\n\t\t\tres = strings.Fields(recv)\n\t\t} else if b.Name() == \"split\" {\n\t\t\tres = splitspace(recv, maxsplit)\n\t\t} else { // rsplit\n\t\t\tres = rsplitspace(recv, maxsplit)\n\t\t}\n\n\t} else if sep, ok := AsString(sep_); ok {\n\t\tif sep == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"split: empty separator\")\n\t\t}\n\t\t// usual case: split on non-empty separator\n\t\tif maxsplit < 0 {\n\t\t\tres = strings.Split(recv, sep)\n\t\t} else if b.Name() == \"split\" {\n\t\t\tres = strings.SplitN(recv, sep, maxsplit+1)\n\t\t} else { // rsplit\n\t\t\tres = strings.Split(recv, sep)\n\t\t\tif excess := len(res) - maxsplit; excess > 0 {\n\t\t\t\tres[0] = strings.Join(res[:excess], sep)\n\t\t\t\tres = append(res[:1], res[excess:]...)\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\treturn nil, fmt.Errorf(\"split: got %s for separator, want string\", sep_.Type())\n\t}\n\n\tlist := make([]Value, len(res))\n\tfor i, x := range res {\n\t\tlist[i] = String(x)\n\t}\n\treturn NewList(list), nil\n}\n\n// Precondition: max >= 0.\nfunc rsplitspace(s string, max int) []string {\n\tres := make([]string, 0, max+1)\n\tend := -1 // index of field end, or -1 in a region of spaces.\n\tfor i := len(s); i > 0; {\n\t\tr, sz := utf8.DecodeLastRuneInString(s[:i])\n\t\tif unicode.IsSpace(r) {\n\t\t\tif end >= 0 {\n\t\t\t\tif len(res) == max {\n\t\t\t\t\tbreak // let this field run to the start\n\t\t\t\t}\n\t\t\t\tres = append(res, s[i:end])\n\t\t\t\tend = -1\n\t\t\t}\n\t\t} else if end < 0 {\n\t\t\tend = i\n\t\t}\n\t\ti -= sz\n\t}\n\tif end >= 0 {\n\t\tres = append(res, s[:end])\n\t}\n\n\tresLen := len(res)\n\tfor i := 0; i < resLen/2; i++ {\n\t\tres[i], res[resLen-1-i] = res[resLen-1-i], res[i]\n\t}\n\n\treturn res\n}\n\n// Precondition: max >= 0.\nfunc splitspace(s string, max int) []string {\n\tvar res []string\n\tstart := -1 // index of field start, or -1 in a region of spaces\n\tfor i, r := range s {\n\t\tif unicode.IsSpace(r) {\n\t\t\tif start >= 0 {\n\t\t\t\tif len(res) == max {\n\t\t\t\t\tbreak // let this field run to the end\n\t\t\t\t}\n\t\t\t\tres = append(res, s[start:i])\n\t\t\t\tstart = -1\n\t\t\t}\n\t\t} else if start == -1 {\n\t\t\tstart = i\n\t\t}\n\t}\n\tif start >= 0 {\n\t\tres = append(res, s[start:])\n\t}\n\treturn res\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#string·splitlines\nfunc string_splitlines(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar keepends bool\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &keepends); err != nil {\n\t\treturn nil, err\n\t}\n\tvar lines []string\n\tif s := string(b.Receiver().(String)); s != \"\" {\n\t\t// TODO(adonovan): handle CRLF correctly.\n\t\tif keepends {\n\t\t\tlines = strings.SplitAfter(s, \"\\n\")\n\t\t} else {\n\t\t\tlines = strings.Split(s, \"\\n\")\n\t\t}\n\t\tif strings.HasSuffix(s, \"\\n\") {\n\t\t\tlines = lines[:len(lines)-1]\n\t\t}\n\t}\n\tlist := make([]Value, len(lines))\n\tfor i, x := range lines {\n\t\tlist[i] = String(x)\n\t}\n\treturn NewList(list), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set·add.\nfunc set_add(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar elem Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &elem); err != nil {\n\t\treturn nil, err\n\t}\n\tif found, err := b.Receiver().(*Set).Has(elem); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t} else if found {\n\t\treturn None, nil\n\t}\n\terr := b.Receiver().(*Set).Insert(elem)\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set·clear.\nfunc set_clear(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif b.Receiver().(*Set).Len() > 0 {\n\t\tif err := b.Receiver().(*Set).Clear(); err != nil {\n\t\t\treturn nil, nameErr(b, err)\n\t\t}\n\t}\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set·difference.\nfunc set_difference(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\t// TODO: support multiple others: s.difference(*others)\n\tvar other Iterable\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &other); err != nil {\n\t\treturn nil, err\n\t}\n\titer := other.Iterate()\n\tdefer iter.Done()\n\tdiff, err := b.Receiver().(*Set).Difference(iter)\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\treturn diff, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set_intersection.\nfunc set_intersection(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\t// TODO: support multiple others: s.difference(*others)\n\tvar other Iterable\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &other); err != nil {\n\t\treturn nil, err\n\t}\n\titer := other.Iterate()\n\tdefer iter.Done()\n\tdiff, err := b.Receiver().(*Set).Intersection(iter)\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\treturn diff, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set_issubset.\nfunc set_issubset(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar other Iterable\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &other); err != nil {\n\t\treturn nil, err\n\t}\n\titer := other.Iterate()\n\tdefer iter.Done()\n\tdiff, err := b.Receiver().(*Set).IsSubset(iter)\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\treturn Bool(diff), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set_issuperset.\nfunc set_issuperset(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar other Iterable\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &other); err != nil {\n\t\treturn nil, err\n\t}\n\titer := other.Iterate()\n\tdefer iter.Done()\n\tdiff, err := b.Receiver().(*Set).IsSuperset(iter)\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\treturn Bool(diff), nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set·discard.\nfunc set_discard(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar k Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &k); err != nil {\n\t\treturn nil, err\n\t}\n\tif found, err := b.Receiver().(*Set).Has(k); err != nil {\n\t\treturn nil, nameErr(b, err)\n\t} else if !found {\n\t\treturn None, nil\n\t}\n\tif _, err := b.Receiver().(*Set).Delete(k); err != nil {\n\t\treturn nil, nameErr(b, err) // set is frozen\n\t}\n\treturn None, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set·pop.\nfunc set_pop(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0); err != nil {\n\t\treturn nil, err\n\t}\n\trecv := b.Receiver().(*Set)\n\tk, ok := recv.ht.first()\n\tif !ok {\n\t\treturn nil, nameErr(b, \"empty set\")\n\t}\n\t_, err := recv.Delete(k)\n\tif err != nil {\n\t\treturn nil, nameErr(b, err) // set is frozen\n\t}\n\treturn k, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set·remove.\nfunc set_remove(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar k Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &k); err != nil {\n\t\treturn nil, err\n\t}\n\tif found, err := b.Receiver().(*Set).Delete(k); err != nil {\n\t\treturn nil, nameErr(b, err) // dict is frozen or key is unhashable\n\t} else if found {\n\t\treturn None, nil\n\t}\n\treturn nil, nameErr(b, \"missing key\")\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set·symmetric_difference.\nfunc set_symmetric_difference(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar other Iterable\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &other); err != nil {\n\t\treturn nil, err\n\t}\n\titer := other.Iterate()\n\tdefer iter.Done()\n\tdiff, err := b.Receiver().(*Set).SymmetricDifference(iter)\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\treturn diff, nil\n}\n\n// https://github.com/google/starlark-go/blob/master/doc/spec.md#set·union.\nfunc set_union(_ *Thread, b *Builtin, args Tuple, kwargs []Tuple) (Value, error) {\n\tvar iterable Iterable\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 0, &iterable); err != nil {\n\t\treturn nil, err\n\t}\n\titer := iterable.Iterate()\n\tdefer iter.Done()\n\tunion, err := b.Receiver().(*Set).Union(iter)\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\treturn union, nil\n}\n\n// Common implementation of string_{r}{find,index}.\nfunc string_find_impl(b *Builtin, args Tuple, kwargs []Tuple, allowError, last bool) (Value, error) {\n\tvar sub string\n\tvar start_, end_ Value\n\tif err := UnpackPositionalArgs(b.Name(), args, kwargs, 1, &sub, &start_, &end_); err != nil {\n\t\treturn nil, err\n\t}\n\n\ts := string(b.Receiver().(String))\n\tstart, end, err := indices(start_, end_, len(s))\n\tif err != nil {\n\t\treturn nil, nameErr(b, err)\n\t}\n\tvar slice string\n\tif start < end {\n\t\tslice = s[start:end]\n\t}\n\n\tvar i int\n\tif last {\n\t\ti = strings.LastIndex(slice, sub)\n\t} else {\n\t\ti = strings.Index(slice, sub)\n\t}\n\tif i < 0 {\n\t\tif !allowError {\n\t\t\treturn nil, nameErr(b, \"substring not found\")\n\t\t}\n\t\treturn MakeInt(-1), nil\n\t}\n\treturn MakeInt(i + start), nil\n}\n\n// Common implementation of builtin dict function and dict.update method.\n// Precondition: len(updates) == 0 or 1.\nfunc updateDict(dict *Dict, updates Tuple, kwargs []Tuple) error {\n\tif len(updates) == 1 {\n\t\tswitch updates := updates[0].(type) {\n\t\tcase IterableMapping:\n\t\t\t// Iterate over dict's key/value pairs, not just keys.\n\t\t\tfor _, item := range updates.Items() {\n\t\t\t\tif err := dict.SetKey(item[0], item[1]); err != nil {\n\t\t\t\t\treturn err // dict is frozen\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\t// all other sequences\n\t\t\titer := Iterate(updates)\n\t\t\tif iter == nil {\n\t\t\t\treturn fmt.Errorf(\"got %s, want iterable\", updates.Type())\n\t\t\t}\n\t\t\tdefer iter.Done()\n\t\t\tvar pair Value\n\t\t\tfor i := 0; iter.Next(&pair); i++ {\n\t\t\t\titer2 := Iterate(pair)\n\t\t\t\tif iter2 == nil {\n\t\t\t\t\treturn fmt.Errorf(\"dictionary update sequence element #%d is not iterable (%s)\", i, pair.Type())\n\n\t\t\t\t}\n\t\t\t\tdefer iter2.Done()\n\t\t\t\tlen := Len(pair)\n\t\t\t\tif len < 0 {\n\t\t\t\t\treturn fmt.Errorf(\"dictionary update sequence element #%d has unknown length (%s)\", i, pair.Type())\n\t\t\t\t} else if len != 2 {\n\t\t\t\t\treturn fmt.Errorf(\"dictionary update sequence element #%d has length %d, want 2\", i, len)\n\t\t\t\t}\n\t\t\t\tvar k, v Value\n\t\t\t\titer2.Next(&k)\n\t\t\t\titer2.Next(&v)\n\t\t\t\tif err := dict.SetKey(k, v); err != nil {\n\t\t\t\t\treturn err\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Then add the kwargs.\n\tbefore := dict.Len()\n\tfor _, pair := range kwargs {\n\t\tif err := dict.SetKey(pair[0], pair[1]); err != nil {\n\t\t\treturn err // dict is frozen\n\t\t}\n\t}\n\t// In the common case, each kwarg will add another dict entry.\n\t// If that's not so, check whether it is because there was a duplicate kwarg.\n\tif dict.Len() < before+len(kwargs) {\n\t\tkeys := make(map[String]bool, len(kwargs))\n\t\tfor _, kv := range kwargs {\n\t\t\tk := kv[0].(String)\n\t\t\tif keys[k] {\n\t\t\t\treturn fmt.Errorf(\"duplicate keyword arg: %v\", k)\n\t\t\t}\n\t\t\tkeys[k] = true\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// nameErr returns an error message of the form \"name: msg\"\n// where name is b.Name() and msg is a string or error.\nfunc nameErr(b *Builtin, msg interface{}) error {\n\treturn fmt.Errorf(\"%s: %v\", b.Name(), msg)\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/profile.go",
    "content": "// Copyright 2019 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage starlark\n\n// This file defines a simple execution-time profiler for Starlark.\n// It measures the wall time spent executing Starlark code, and emits a\n// gzipped protocol message in pprof format (github.com/google/pprof).\n//\n// When profiling is enabled, the interpreter calls the profiler to\n// indicate the start and end of each \"span\" or time interval. A leaf\n// function (whether Go or Starlark) has a single span. A function that\n// calls another function has spans for each interval in which it is the\n// top of the stack. (A LOAD instruction also ends a span.)\n//\n// At the start of a span, the interpreter records the current time in\n// the thread's topmost frame. At the end of the span, it obtains the\n// time again and subtracts the span start time. The difference is added\n// to an accumulator variable in the thread. If the accumulator exceeds\n// some fixed quantum (10ms, say), the profiler records the current call\n// stack and sends it to the profiler goroutine, along with the number\n// of quanta, which are subtracted. For example, if the accumulator\n// holds 3ms and then a completed span adds 25ms to it, its value is 28ms,\n// which exceeeds 10ms. The profiler records a stack with the value 20ms\n// (2 quanta), and the accumulator is left with 8ms.\n//\n// The profiler goroutine converts the stacks into the pprof format and\n// emits a gzip-compressed protocol message to the designated output\n// file. We use a hand-written streaming proto encoder to avoid\n// dependencies on pprof and proto, and to avoid the need to\n// materialize the profile data structure in memory.\n//\n// A limitation of this profiler is that it measures wall time, which\n// does not necessarily correspond to CPU time. A CPU profiler requires\n// that only running (not runnable) threads are sampled; this is\n// commonly achieved by having the kernel deliver a (PROF) signal to an\n// arbitrary running thread, through setitimer(2). The CPU profiler in the\n// Go runtime uses this mechanism, but it is not possible for a Go\n// application to register a SIGPROF handler, nor is it possible for a\n// Go handler for some other signal to read the stack pointer of\n// the interrupted thread.\n//\n// Two caveats:\n// (1) it is tempting to send the leaf Frame directly to the profiler\n// goroutine instead of making a copy of the stack, since a Frame is a\n// spaghetti stack--a linked list. However, as soon as execution\n// resumes, the stack's Frame.pc values may be mutated, so Frames are\n// not safe to share with the asynchronous profiler goroutine.\n// (2) it is tempting to use Callables as keys in a map when tabulating\n// the pprof protocols's Function entities. However, we cannot assume\n// that Callables are valid map keys, and furthermore we must not\n// pin function values in memory indefinitely as this may cause lambda\n// values to keep their free variables live much longer than necessary.\n\n// TODO(adonovan):\n// - make Start/Stop fully thread-safe.\n// - fix the pc hack.\n// - experiment with other values of quantum.\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"compress/gzip\"\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"reflect\"\n\t\"sync/atomic\"\n\t\"time\"\n\t\"unsafe\"\n\n\t\"go.starlark.net/syntax\"\n)\n\n// StartProfile enables time profiling of all Starlark threads,\n// and writes a profile in pprof format to w.\n// It must be followed by a call to StopProfiler to stop\n// the profiler and finalize the profile.\n//\n// StartProfile returns an error if profiling was already enabled.\n//\n// StartProfile must not be called concurrently with Starlark execution.\nfunc StartProfile(w io.Writer) error {\n\tif !atomic.CompareAndSwapUint32(&profiler.on, 0, 1) {\n\t\treturn fmt.Errorf(\"profiler already running\")\n\t}\n\n\t// TODO(adonovan): make the API fully concurrency-safe.\n\t// The main challenge is racy reads/writes of profiler.events,\n\t// and of send/close races on the channel it refers to.\n\t// It's easy to solve them with a mutex but harder to do\n\t// it efficiently.\n\n\tprofiler.events = make(chan *profEvent, 1)\n\tprofiler.done = make(chan error)\n\n\tgo profile(w)\n\n\treturn nil\n}\n\n// StopProfile stops the profiler started by a prior call to\n// StartProfile and finalizes the profile. It returns an error if the\n// profile could not be completed.\n//\n// StopProfile must not be called concurrently with Starlark execution.\nfunc StopProfile() error {\n\t// Terminate the profiler goroutine and get its result.\n\tclose(profiler.events)\n\terr := <-profiler.done\n\n\tprofiler.done = nil\n\tprofiler.events = nil\n\tatomic.StoreUint32(&profiler.on, 0)\n\n\treturn err\n}\n\n// globals\nvar profiler struct {\n\ton     uint32          // nonzero => profiler running\n\tevents chan *profEvent // profile events from interpreter threads\n\tdone   chan error      // indicates profiler goroutine is ready\n}\n\nfunc (thread *Thread) beginProfSpan() {\n\tif profiler.events == nil {\n\t\treturn // profiling not enabled\n\t}\n\n\tthread.frameAt(0).spanStart = nanotime()\n}\n\n// TODO(adonovan): experiment with smaller values,\n// which trade space and time for greater precision.\nconst quantum = 10 * time.Millisecond\n\nfunc (thread *Thread) endProfSpan() {\n\tif profiler.events == nil {\n\t\treturn // profiling not enabled\n\t}\n\n\t// Add the span to the thread's accumulator.\n\tthread.proftime += time.Duration(nanotime() - thread.frameAt(0).spanStart)\n\tif thread.proftime < quantum {\n\t\treturn\n\t}\n\n\t// Only record complete quanta.\n\tn := thread.proftime / quantum\n\tthread.proftime -= n * quantum\n\n\t// Copy the stack.\n\t// (We can't save thread.frame because its pc will change.)\n\tev := &profEvent{\n\t\tthread: thread,\n\t\ttime:   n * quantum,\n\t}\n\tev.stack = ev.stackSpace[:0]\n\tfor i := range thread.stack {\n\t\tfr := thread.frameAt(i)\n\t\tev.stack = append(ev.stack, profFrame{\n\t\t\tpos: fr.Position(),\n\t\t\tfn:  fr.Callable(),\n\t\t\tpc:  fr.pc,\n\t\t})\n\t}\n\n\tprofiler.events <- ev\n}\n\ntype profEvent struct {\n\tthread     *Thread // currently unused\n\ttime       time.Duration\n\tstack      []profFrame\n\tstackSpace [8]profFrame // initial space for stack\n}\n\ntype profFrame struct {\n\tfn  Callable        // don't hold this live for too long (prevents GC of lambdas)\n\tpc  uint32          // program counter (Starlark frames only)\n\tpos syntax.Position // position of pc within this frame\n}\n\n// profile is the profiler goroutine.\n// It runs until StopProfiler is called.\nfunc profile(w io.Writer) {\n\t// Field numbers from pprof protocol.\n\t// See https://github.com/google/pprof/blob/master/proto/profile.proto\n\tconst (\n\t\tProfile_sample_type    = 1  // repeated ValueType\n\t\tProfile_sample         = 2  // repeated Sample\n\t\tProfile_mapping        = 3  // repeated Mapping\n\t\tProfile_location       = 4  // repeated Location\n\t\tProfile_function       = 5  // repeated Function\n\t\tProfile_string_table   = 6  // repeated string\n\t\tProfile_time_nanos     = 9  // int64\n\t\tProfile_duration_nanos = 10 // int64\n\t\tProfile_period_type    = 11 // ValueType\n\t\tProfile_period         = 12 // int64\n\n\t\tValueType_type = 1 // int64\n\t\tValueType_unit = 2 // int64\n\n\t\tSample_location_id = 1 // repeated uint64\n\t\tSample_value       = 2 // repeated int64\n\t\tSample_label       = 3 // repeated Label\n\n\t\tLabel_key      = 1 // int64\n\t\tLabel_str      = 2 // int64\n\t\tLabel_num      = 3 // int64\n\t\tLabel_num_unit = 4 // int64\n\n\t\tLocation_id         = 1 // uint64\n\t\tLocation_mapping_id = 2 // uint64\n\t\tLocation_address    = 3 // uint64\n\t\tLocation_line       = 4 // repeated Line\n\n\t\tLine_function_id = 1 // uint64\n\t\tLine_line        = 2 // int64\n\n\t\tFunction_id          = 1 // uint64\n\t\tFunction_name        = 2 // int64\n\t\tFunction_system_name = 3 // int64\n\t\tFunction_filename    = 4 // int64\n\t\tFunction_start_line  = 5 // int64\n\t)\n\n\tbufw := bufio.NewWriter(w) // write file in 4KB (not 240B flate-sized) chunks\n\tgz := gzip.NewWriter(bufw)\n\tenc := protoEncoder{w: gz}\n\n\t// strings\n\tstringIndex := make(map[string]int64)\n\tstr := func(s string) int64 {\n\t\ti, ok := stringIndex[s]\n\t\tif !ok {\n\t\t\ti = int64(len(stringIndex))\n\t\t\tenc.string(Profile_string_table, s)\n\t\t\tstringIndex[s] = i\n\t\t}\n\t\treturn i\n\t}\n\tstr(\"\") // entry 0\n\n\t// functions\n\t//\n\t// function returns the ID of a Callable for use in Line.FunctionId.\n\t// The ID is the same as the function's logical address,\n\t// which is supplied by the caller to avoid the need to recompute it.\n\tfunctionId := make(map[uintptr]uint64)\n\tfunction := func(fn Callable, addr uintptr) uint64 {\n\t\tid, ok := functionId[addr]\n\t\tif !ok {\n\t\t\tid = uint64(addr)\n\n\t\t\tvar pos syntax.Position\n\t\t\tif fn, ok := fn.(callableWithPosition); ok {\n\t\t\t\tpos = fn.Position()\n\t\t\t}\n\n\t\t\tname := fn.Name()\n\t\t\tif name == \"<toplevel>\" {\n\t\t\t\tname = pos.Filename()\n\t\t\t}\n\n\t\t\tnameIndex := str(name)\n\n\t\t\tfun := new(bytes.Buffer)\n\t\t\tfunenc := protoEncoder{w: fun}\n\t\t\tfunenc.uint(Function_id, id)\n\t\t\tfunenc.int(Function_name, nameIndex)\n\t\t\tfunenc.int(Function_system_name, nameIndex)\n\t\t\tfunenc.int(Function_filename, str(pos.Filename()))\n\t\t\tfunenc.int(Function_start_line, int64(pos.Line))\n\t\t\tenc.bytes(Profile_function, fun.Bytes())\n\n\t\t\tfunctionId[addr] = id\n\t\t}\n\t\treturn id\n\t}\n\n\t// locations\n\t//\n\t// location returns the ID of the location denoted by fr.\n\t// For Starlark frames, this is the Frame pc.\n\tlocationId := make(map[uintptr]uint64)\n\tlocation := func(fr profFrame) uint64 {\n\t\tfnAddr := profFuncAddr(fr.fn)\n\n\t\t// For Starlark functions, the frame position\n\t\t// represents the current PC value.\n\t\t// Mix it into the low bits of the address.\n\t\t// This is super hacky and may result in collisions\n\t\t// in large functions or if functions are numerous.\n\t\t// TODO(adonovan): fix: try making this cleaner by treating\n\t\t// each bytecode segment as a Profile.Mapping.\n\t\tpcAddr := fnAddr\n\t\tif _, ok := fr.fn.(*Function); ok {\n\t\t\tpcAddr = (pcAddr << 16) ^ uintptr(fr.pc)\n\t\t}\n\n\t\tid, ok := locationId[pcAddr]\n\t\tif !ok {\n\t\t\tid = uint64(pcAddr)\n\n\t\t\tline := new(bytes.Buffer)\n\t\t\tlineenc := protoEncoder{w: line}\n\t\t\tlineenc.uint(Line_function_id, function(fr.fn, fnAddr))\n\t\t\tlineenc.int(Line_line, int64(fr.pos.Line))\n\t\t\tloc := new(bytes.Buffer)\n\t\t\tlocenc := protoEncoder{w: loc}\n\t\t\tlocenc.uint(Location_id, id)\n\t\t\tlocenc.uint(Location_address, uint64(pcAddr))\n\t\t\tlocenc.bytes(Location_line, line.Bytes())\n\t\t\tenc.bytes(Profile_location, loc.Bytes())\n\n\t\t\tlocationId[pcAddr] = id\n\t\t}\n\t\treturn id\n\t}\n\n\twallNanos := new(bytes.Buffer)\n\twnenc := protoEncoder{w: wallNanos}\n\twnenc.int(ValueType_type, str(\"wall\"))\n\twnenc.int(ValueType_unit, str(\"nanoseconds\"))\n\n\t// informational fields of Profile\n\tenc.bytes(Profile_sample_type, wallNanos.Bytes())\n\tenc.int(Profile_period, quantum.Nanoseconds())     // magnitude of sampling period\n\tenc.bytes(Profile_period_type, wallNanos.Bytes())  // dimension and unit of period\n\tenc.int(Profile_time_nanos, time.Now().UnixNano()) // start (real) time of profile\n\n\tstartNano := nanotime()\n\n\t// Read profile events from the channel\n\t// until it is closed by StopProfiler.\n\tfor e := range profiler.events {\n\t\tsample := new(bytes.Buffer)\n\t\tsampleenc := protoEncoder{w: sample}\n\t\tsampleenc.int(Sample_value, e.time.Nanoseconds()) // wall nanoseconds\n\t\tfor _, fr := range e.stack {\n\t\t\tsampleenc.uint(Sample_location_id, location(fr))\n\t\t}\n\t\tenc.bytes(Profile_sample, sample.Bytes())\n\t}\n\n\tendNano := nanotime()\n\tenc.int(Profile_duration_nanos, endNano-startNano)\n\n\terr := gz.Close() // Close reports any prior write error\n\tif flushErr := bufw.Flush(); err == nil {\n\t\terr = flushErr\n\t}\n\tprofiler.done <- err\n}\n\n// nanotime returns the time in nanoseconds since epoch.\n// It is implemented by runtime.nanotime using the linkname hack;\n// runtime.nanotime is defined for all OSs/ARCHS and uses the\n// monotonic system clock, which there is no portable way to access.\n// Should that function ever go away, these alternatives exist:\n//\n// \t// POSIX only. REALTIME not MONOTONIC. 17ns.\n// \tvar tv syscall.Timeval\n// \tsyscall.Gettimeofday(&tv) // can't fail\n// \treturn tv.Nano()\n//\n// \t// Portable. REALTIME not MONOTONIC. 46ns.\n// \treturn time.Now().Nanoseconds()\n//\n//      // POSIX only. Adds a dependency.\n//\timport \"golang.org/x/sys/unix\"\n//\tvar ts unix.Timespec\n// \tunix.ClockGettime(CLOCK_MONOTONIC, &ts) // can't fail\n//\treturn unix.TimespecToNsec(ts)\n//\n//go:linkname nanotime runtime.nanotime\nfunc nanotime() int64\n\n// profFuncAddr returns the canonical \"address\"\n// of a Callable for use by the profiler.\nfunc profFuncAddr(fn Callable) uintptr {\n\tswitch fn := fn.(type) {\n\tcase *Builtin:\n\t\treturn reflect.ValueOf(fn.fn).Pointer()\n\tcase *Function:\n\t\treturn uintptr(unsafe.Pointer(fn.funcode))\n\t}\n\n\t// User-defined callable types are typically of\n\t// of kind pointer-to-struct. Handle them specially.\n\tif v := reflect.ValueOf(fn); v.Type().Kind() == reflect.Ptr {\n\t\treturn v.Pointer()\n\t}\n\n\t// Address zero is reserved by the protocol.\n\t// Use 1 for callables we don't recognize.\n\tlog.Printf(\"Starlark profiler: no address for Callable %T\", fn)\n\treturn 1\n}\n\n// We encode the protocol message by hand to avoid making\n// the interpreter depend on both github.com/google/pprof\n// and github.com/golang/protobuf.\n//\n// This also avoids the need to materialize a protocol message object\n// tree of unbounded size and serialize it all at the end.\n// The pprof format appears to have been designed to\n// permit streaming implementations such as this one.\n//\n// See https://developers.google.com/protocol-buffers/docs/encoding.\ntype protoEncoder struct {\n\tw   io.Writer // *bytes.Buffer or *gzip.Writer\n\ttmp [binary.MaxVarintLen64]byte\n}\n\nfunc (e *protoEncoder) uvarint(x uint64) {\n\tn := binary.PutUvarint(e.tmp[:], x)\n\te.w.Write(e.tmp[:n])\n}\n\nfunc (e *protoEncoder) tag(field, wire uint) {\n\te.uvarint(uint64(field<<3 | wire))\n}\n\nfunc (e *protoEncoder) string(field uint, s string) {\n\te.tag(field, 2) // length-delimited\n\te.uvarint(uint64(len(s)))\n\tio.WriteString(e.w, s)\n}\n\nfunc (e *protoEncoder) bytes(field uint, b []byte) {\n\te.tag(field, 2) // length-delimited\n\te.uvarint(uint64(len(b)))\n\te.w.Write(b)\n}\n\nfunc (e *protoEncoder) uint(field uint, x uint64) {\n\te.tag(field, 0) // varint\n\te.uvarint(x)\n}\n\nfunc (e *protoEncoder) int(field uint, x int64) {\n\te.tag(field, 0) // varint\n\te.uvarint(uint64(x))\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/unpack.go",
    "content": "package starlark\n\n// This file defines the Unpack helper functions used by\n// built-in functions to interpret their call arguments.\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"reflect\"\n\t\"strings\"\n\n\t\"go.starlark.net/internal/spell\"\n)\n\n// An Unpacker defines custom argument unpacking behavior.\n// See UnpackArgs.\ntype Unpacker interface {\n\tUnpack(v Value) error\n}\n\n// UnpackArgs unpacks the positional and keyword arguments into the\n// supplied parameter variables.  pairs is an alternating list of names\n// and pointers to variables.\n//\n// If the variable is a bool, integer, string, *List, *Dict, Callable,\n// Iterable, or user-defined implementation of Value,\n// UnpackArgs performs the appropriate type check.\n// Predeclared Go integer types uses the AsInt check.\n//\n// If the parameter name ends with \"?\", it is optional.\n//\n// If the parameter name ends with \"??\", it is optional and treats the None value\n// as if the argument was absent.\n//\n// If a parameter is marked optional, then all following parameters are\n// implicitly optional where or not they are marked.\n//\n// If the variable implements Unpacker, its Unpack argument\n// is called with the argument value, allowing an application\n// to define its own argument validation and conversion.\n//\n// If the variable implements Value, UnpackArgs may call\n// its Type() method while constructing the error message.\n//\n// Examples:\n//\n//      var (\n//          a Value\n//          b = MakeInt(42)\n//          c Value = starlark.None\n//      )\n//\n//      // 1. mixed parameters, like def f(a, b=42, c=None).\n//      err := UnpackArgs(\"f\", args, kwargs, \"a\", &a, \"b?\", &b, \"c?\", &c)\n//\n//      // 2. keyword parameters only, like def f(*, a, b, c=None).\n//      if len(args) > 0 {\n//              return fmt.Errorf(\"f: unexpected positional arguments\")\n//      }\n//      err := UnpackArgs(\"f\", args, kwargs, \"a\", &a, \"b?\", &b, \"c?\", &c)\n//\n//      // 3. positional parameters only, like def f(a, b=42, c=None, /) in Python 3.8.\n//      err := UnpackPositionalArgs(\"f\", args, kwargs, 1, &a, &b, &c)\n//\n// More complex forms such as def f(a, b=42, *args, c, d=123, **kwargs)\n// require additional logic, but their need in built-ins is exceedingly rare.\n//\n// In the examples above, the declaration of b with type Int causes UnpackArgs\n// to require that b's argument value, if provided, is also an int.\n// To allow arguments of any type, while retaining the default value of 42,\n// declare b as a Value:\n//\n//\tvar b Value = MakeInt(42)\n//\n// The zero value of a variable of type Value, such as 'a' in the\n// examples above, is not a valid Starlark value, so if the parameter is\n// optional, the caller must explicitly handle the default case by\n// interpreting nil as None or some computed default. The same is true\n// for the zero values of variables of type *List, *Dict, Callable, or\n// Iterable. For example:\n//\n//      // def myfunc(d=None, e=[], f={})\n//      var (\n//          d Value\n//          e *List\n//          f *Dict\n//      )\n//      err := UnpackArgs(\"myfunc\", args, kwargs, \"d?\", &d, \"e?\", &e, \"f?\", &f)\n//      if d == nil { d = None; }\n//      if e == nil { e = new(List); }\n//      if f == nil { f = new(Dict); }\n//\nfunc UnpackArgs(fnname string, args Tuple, kwargs []Tuple, pairs ...interface{}) error {\n\tnparams := len(pairs) / 2\n\tvar defined intset\n\tdefined.init(nparams)\n\n\tparamName := func(x interface{}) (name string, skipNone bool) { // (no free variables)\n\t\tname = x.(string)\n\t\tif strings.HasSuffix(name, \"??\") {\n\t\t\tname = strings.TrimSuffix(name, \"??\")\n\t\t\tskipNone = true\n\t\t} else if name[len(name)-1] == '?' {\n\t\t\tname = name[:len(name)-1]\n\t\t}\n\n\t\treturn name, skipNone\n\t}\n\n\t// positional arguments\n\tif len(args) > nparams {\n\t\treturn fmt.Errorf(\"%s: got %d arguments, want at most %d\",\n\t\t\tfnname, len(args), nparams)\n\t}\n\tfor i, arg := range args {\n\t\tdefined.set(i)\n\t\tname, skipNone := paramName(pairs[2*i])\n\t\tif skipNone {\n\t\t\tif _, isNone := arg.(NoneType); isNone {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif err := unpackOneArg(arg, pairs[2*i+1]); err != nil {\n\t\t\treturn fmt.Errorf(\"%s: for parameter %s: %s\", fnname, name, err)\n\t\t}\n\t}\n\n\t// keyword arguments\nkwloop:\n\tfor _, item := range kwargs {\n\t\tname, arg := item[0].(String), item[1]\n\t\tfor i := 0; i < nparams; i++ {\n\t\t\tpName, skipNone := paramName(pairs[2*i])\n\t\t\tif pName == string(name) {\n\t\t\t\t// found it\n\t\t\t\tif defined.set(i) {\n\t\t\t\t\treturn fmt.Errorf(\"%s: got multiple values for keyword argument %s\",\n\t\t\t\t\t\tfnname, name)\n\t\t\t\t}\n\n\t\t\t\tif skipNone {\n\t\t\t\t\tif _, isNone := arg.(NoneType); isNone {\n\t\t\t\t\t\tcontinue kwloop\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tptr := pairs[2*i+1]\n\t\t\t\tif err := unpackOneArg(arg, ptr); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"%s: for parameter %s: %s\", fnname, name, err)\n\t\t\t\t}\n\t\t\t\tcontinue kwloop\n\t\t\t}\n\t\t}\n\t\terr := fmt.Errorf(\"%s: unexpected keyword argument %s\", fnname, name)\n\t\tnames := make([]string, 0, nparams)\n\t\tfor i := 0; i < nparams; i += 2 {\n\t\t\tparam, _ := paramName(pairs[i])\n\t\t\tnames = append(names, param)\n\t\t}\n\t\tif n := spell.Nearest(string(name), names); n != \"\" {\n\t\t\terr = fmt.Errorf(\"%s (did you mean %s?)\", err.Error(), n)\n\t\t}\n\t\treturn err\n\t}\n\n\t// Check that all non-optional parameters are defined.\n\t// (We needn't check the first len(args).)\n\tfor i := len(args); i < nparams; i++ {\n\t\tname := pairs[2*i].(string)\n\t\tif strings.HasSuffix(name, \"?\") {\n\t\t\tbreak // optional\n\t\t}\n\t\tif !defined.get(i) {\n\t\t\treturn fmt.Errorf(\"%s: missing argument for %s\", fnname, name)\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// UnpackPositionalArgs unpacks the positional arguments into\n// corresponding variables.  Each element of vars is a pointer; see\n// UnpackArgs for allowed types and conversions.\n//\n// UnpackPositionalArgs reports an error if the number of arguments is\n// less than min or greater than len(vars), if kwargs is nonempty, or if\n// any conversion fails.\n//\n// See UnpackArgs for general comments.\nfunc UnpackPositionalArgs(fnname string, args Tuple, kwargs []Tuple, min int, vars ...interface{}) error {\n\tif len(kwargs) > 0 {\n\t\treturn fmt.Errorf(\"%s: unexpected keyword arguments\", fnname)\n\t}\n\tmax := len(vars)\n\tif len(args) < min {\n\t\tvar atleast string\n\t\tif min < max {\n\t\t\tatleast = \"at least \"\n\t\t}\n\t\treturn fmt.Errorf(\"%s: got %d arguments, want %s%d\", fnname, len(args), atleast, min)\n\t}\n\tif len(args) > max {\n\t\tvar atmost string\n\t\tif max > min {\n\t\t\tatmost = \"at most \"\n\t\t}\n\t\treturn fmt.Errorf(\"%s: got %d arguments, want %s%d\", fnname, len(args), atmost, max)\n\t}\n\tfor i, arg := range args {\n\t\tif err := unpackOneArg(arg, vars[i]); err != nil {\n\t\t\treturn fmt.Errorf(\"%s: for parameter %d: %s\", fnname, i+1, err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc unpackOneArg(v Value, ptr interface{}) error {\n\t// On failure, don't clobber *ptr.\n\tswitch ptr := ptr.(type) {\n\tcase Unpacker:\n\t\treturn ptr.Unpack(v)\n\tcase *Value:\n\t\t*ptr = v\n\tcase *string:\n\t\ts, ok := AsString(v)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"got %s, want string\", v.Type())\n\t\t}\n\t\t*ptr = s\n\tcase *bool:\n\t\tb, ok := v.(Bool)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"got %s, want bool\", v.Type())\n\t\t}\n\t\t*ptr = bool(b)\n\tcase *int, *int8, *int16, *int32, *int64,\n\t\t*uint, *uint8, *uint16, *uint32, *uint64, *uintptr:\n\t\treturn AsInt(v, ptr)\n\tcase *float64:\n\t\tf, ok := v.(Float)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"got %s, want float\", v.Type())\n\t\t}\n\t\t*ptr = float64(f)\n\tcase **List:\n\t\tlist, ok := v.(*List)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"got %s, want list\", v.Type())\n\t\t}\n\t\t*ptr = list\n\tcase **Dict:\n\t\tdict, ok := v.(*Dict)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"got %s, want dict\", v.Type())\n\t\t}\n\t\t*ptr = dict\n\tcase *Callable:\n\t\tf, ok := v.(Callable)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"got %s, want callable\", v.Type())\n\t\t}\n\t\t*ptr = f\n\tcase *Iterable:\n\t\tit, ok := v.(Iterable)\n\t\tif !ok {\n\t\t\treturn fmt.Errorf(\"got %s, want iterable\", v.Type())\n\t\t}\n\t\t*ptr = it\n\tdefault:\n\t\t// v must have type *V, where V is some subtype of starlark.Value.\n\t\tptrv := reflect.ValueOf(ptr)\n\t\tif ptrv.Kind() != reflect.Ptr {\n\t\t\tlog.Panicf(\"internal error: not a pointer: %T\", ptr)\n\t\t}\n\t\tparamVar := ptrv.Elem()\n\t\tif !reflect.TypeOf(v).AssignableTo(paramVar.Type()) {\n\t\t\t// The value is not assignable to the variable.\n\n\t\t\t// Detect a possible bug in the Go program that called Unpack:\n\t\t\t// If the variable *ptr is not a subtype of Value,\n\t\t\t// no value of v can possibly work.\n\t\t\tif !paramVar.Type().AssignableTo(reflect.TypeOf(new(Value)).Elem()) {\n\t\t\t\tlog.Panicf(\"pointer element type does not implement Value: %T\", ptr)\n\t\t\t}\n\n\t\t\t// Report Starlark dynamic type error.\n\t\t\t//\n\t\t\t// We prefer the Starlark Value.Type name over\n\t\t\t// its Go reflect.Type name, but calling the\n\t\t\t// Value.Type method on the variable is not safe\n\t\t\t// in general. If the variable is an interface,\n\t\t\t// the call will fail. Even if the variable has\n\t\t\t// a concrete type, it might not be safe to call\n\t\t\t// Type() on a zero instance. Thus we must use\n\t\t\t// recover.\n\n\t\t\t// Default to Go reflect.Type name\n\t\t\tparamType := paramVar.Type().String()\n\n\t\t\t// Attempt to call Value.Type method.\n\t\t\tfunc() {\n\t\t\t\tdefer func() { recover() }()\n\t\t\t\tif typer, _ := paramVar.Interface().(interface{ Type() string }); typer != nil {\n\t\t\t\t\tparamType = typer.Type()\n\t\t\t\t}\n\t\t\t}()\n\t\t\treturn fmt.Errorf(\"got %s, want %s\", v.Type(), paramType)\n\t\t}\n\t\tparamVar.Set(reflect.ValueOf(v))\n\t}\n\treturn nil\n}\n\ntype intset struct {\n\tsmall uint64       // bitset, used if n < 64\n\tlarge map[int]bool //    set, used if n >= 64\n}\n\nfunc (is *intset) init(n int) {\n\tif n >= 64 {\n\t\tis.large = make(map[int]bool)\n\t}\n}\n\nfunc (is *intset) set(i int) (prev bool) {\n\tif is.large == nil {\n\t\tprev = is.small&(1<<uint(i)) != 0\n\t\tis.small |= 1 << uint(i)\n\t} else {\n\t\tprev = is.large[i]\n\t\tis.large[i] = true\n\t}\n\treturn\n}\n\nfunc (is *intset) get(i int) bool {\n\tif is.large == nil {\n\t\treturn is.small&(1<<uint(i)) != 0\n\t}\n\treturn is.large[i]\n}\n\nfunc (is *intset) len() int {\n\tif is.large == nil {\n\t\t// Suboptimal, but used only for error reporting.\n\t\tlen := 0\n\t\tfor i := 0; i < 64; i++ {\n\t\t\tif is.small&(1<<uint(i)) != 0 {\n\t\t\t\tlen++\n\t\t\t}\n\t\t}\n\t\treturn len\n\t}\n\treturn len(is.large)\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlark/value.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package starlark provides a Starlark interpreter.\n//\n// Starlark values are represented by the Value interface.\n// The following built-in Value types are known to the evaluator:\n//\n//\tNoneType        -- NoneType\n//\tBool            -- bool\n//\tBytes           -- bytes\n//\tInt             -- int\n//\tFloat           -- float\n//\tString          -- string\n//\t*List           -- list\n//\tTuple           -- tuple\n//\t*Dict           -- dict\n//\t*Set            -- set\n//\t*Function       -- function (implemented in Starlark)\n//\t*Builtin        -- builtin_function_or_method (function or method implemented in Go)\n//\n// Client applications may define new data types that satisfy at least\n// the Value interface.  Such types may provide additional operations by\n// implementing any of these optional interfaces:\n//\n//\tCallable        -- value is callable like a function\n//\tComparable      -- value defines its own comparison operations\n//\tIterable        -- value is iterable using 'for' loops\n//\tSequence        -- value is iterable sequence of known length\n//\tIndexable       -- value is sequence with efficient random access\n//\tMapping         -- value maps from keys to values, like a dictionary\n//\tHasBinary       -- value defines binary operations such as * and +\n//\tHasAttrs        -- value has readable fields or methods x.f\n//\tHasSetField     -- value has settable fields x.f\n//\tHasSetIndex     -- value supports element update using x[i]=y\n//\tHasSetKey       -- value supports map update using x[k]=v\n//\tHasUnary        -- value defines unary operations such as + and -\n//\n// Client applications may also define domain-specific functions in Go\n// and make them available to Starlark programs.  Use NewBuiltin to\n// construct a built-in value that wraps a Go function.  The\n// implementation of the Go function may use UnpackArgs to make sense of\n// the positional and keyword arguments provided by the caller.\n//\n// Starlark's None value is not equal to Go's nil. Go's nil is not a legal\n// Starlark value, but the compiler will not stop you from converting nil\n// to Value. Be careful to avoid allowing Go nil values to leak into\n// Starlark data structures.\n//\n// The Compare operation requires two arguments of the same\n// type, but this constraint cannot be expressed in Go's type system.\n// (This is the classic \"binary method problem\".)\n// So, each Value type's CompareSameType method is a partial function\n// that compares a value only against others of the same type.\n// Use the package's standalone Compare (or Equal) function to compare\n// an arbitrary pair of values.\n//\n// To parse and evaluate a Starlark source file, use ExecFile.  The Eval\n// function evaluates a single expression.  All evaluator functions\n// require a Thread parameter which defines the \"thread-local storage\"\n// of a Starlark thread and may be used to plumb application state\n// through Starlark code and into callbacks.  When evaluation fails it\n// returns an EvalError from which the application may obtain a\n// backtrace of active Starlark calls.\npackage starlark // import \"go.starlark.net/starlark\"\n\n// This file defines the data types of Starlark and their basic operations.\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"math/big\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode/utf8\"\n\n\t\"go.starlark.net/internal/compile\"\n\t\"go.starlark.net/syntax\"\n)\n\n// Value is a value in the Starlark interpreter.\ntype Value interface {\n\t// String returns the string representation of the value.\n\t// Starlark string values are quoted as if by Python's repr.\n\tString() string\n\n\t// Type returns a short string describing the value's type.\n\tType() string\n\n\t// Freeze causes the value, and all values transitively\n\t// reachable from it through collections and closures, to be\n\t// marked as frozen.  All subsequent mutations to the data\n\t// structure through this API will fail dynamically, making the\n\t// data structure immutable and safe for publishing to other\n\t// Starlark interpreters running concurrently.\n\tFreeze()\n\n\t// Truth returns the truth value of an object.\n\tTruth() Bool\n\n\t// Hash returns a function of x such that Equals(x, y) => Hash(x) == Hash(y).\n\t// Hash may fail if the value's type is not hashable, or if the value\n\t// contains a non-hashable value. The hash is used only by dictionaries and\n\t// is not exposed to the Starlark program.\n\tHash() (uint32, error)\n}\n\n// A Comparable is a value that defines its own equivalence relation and\n// perhaps ordered comparisons.\ntype Comparable interface {\n\tValue\n\t// CompareSameType compares one value to another of the same Type().\n\t// The comparison operation must be one of EQL, NEQ, LT, LE, GT, or GE.\n\t// CompareSameType returns an error if an ordered comparison was\n\t// requested for a type that does not support it.\n\t//\n\t// Implementations that recursively compare subcomponents of\n\t// the value should use the CompareDepth function, not Compare, to\n\t// avoid infinite recursion on cyclic structures.\n\t//\n\t// The depth parameter is used to bound comparisons of cyclic\n\t// data structures.  Implementations should decrement depth\n\t// before calling CompareDepth and should return an error if depth\n\t// < 1.\n\t//\n\t// Client code should not call this method.  Instead, use the\n\t// standalone Compare or Equals functions, which are defined for\n\t// all pairs of operands.\n\tCompareSameType(op syntax.Token, y Value, depth int) (bool, error)\n}\n\n// A TotallyOrdered is a type whose values form a total order:\n// if x and y are of the same TotallyOrdered type, then x must be less than y,\n// greater than y, or equal to y.\n//\n// It is simpler than Comparable and should be preferred in new code,\n// but if a type implements both interfaces, Comparable takes precedence.\ntype TotallyOrdered interface {\n\tValue\n\t// Cmp compares two values x and y of the same totally ordered type.\n\t// It returns negative if x < y, positive if x > y, and zero if the values are equal.\n\t//\n\t// Implementations that recursively compare subcomponents of\n\t// the value should use the CompareDepth function, not Cmp, to\n\t// avoid infinite recursion on cyclic structures.\n\t//\n\t// The depth parameter is used to bound comparisons of cyclic\n\t// data structures.  Implementations should decrement depth\n\t// before calling CompareDepth and should return an error if depth\n\t// < 1.\n\t//\n\t// Client code should not call this method.  Instead, use the\n\t// standalone Compare or Equals functions, which are defined for\n\t// all pairs of operands.\n\tCmp(y Value, depth int) (int, error)\n}\n\nvar (\n\t_ TotallyOrdered = Int{}\n\t_ TotallyOrdered = Float(0)\n\t_ Comparable     = False\n\t_ Comparable     = String(\"\")\n\t_ Comparable     = (*Dict)(nil)\n\t_ Comparable     = (*List)(nil)\n\t_ Comparable     = Tuple(nil)\n\t_ Comparable     = (*Set)(nil)\n)\n\n// A Callable value f may be the operand of a function call, f(x).\n//\n// Clients should use the Call function, never the CallInternal method.\ntype Callable interface {\n\tValue\n\tName() string\n\tCallInternal(thread *Thread, args Tuple, kwargs []Tuple) (Value, error)\n}\n\ntype callableWithPosition interface {\n\tCallable\n\tPosition() syntax.Position\n}\n\nvar (\n\t_ Callable             = (*Builtin)(nil)\n\t_ Callable             = (*Function)(nil)\n\t_ callableWithPosition = (*Function)(nil)\n)\n\n// An Iterable abstracts a sequence of values.\n// An iterable value may be iterated over by a 'for' loop or used where\n// any other Starlark iterable is allowed.  Unlike a Sequence, the length\n// of an Iterable is not necessarily known in advance of iteration.\ntype Iterable interface {\n\tValue\n\tIterate() Iterator // must be followed by call to Iterator.Done\n}\n\n// A Sequence is a sequence of values of known length.\ntype Sequence interface {\n\tIterable\n\tLen() int\n}\n\nvar (\n\t_ Sequence = (*Dict)(nil)\n\t_ Sequence = (*Set)(nil)\n)\n\n// An Indexable is a sequence of known length that supports efficient random access.\n// It is not necessarily iterable.\ntype Indexable interface {\n\tValue\n\tIndex(i int) Value // requires 0 <= i < Len()\n\tLen() int\n}\n\n// A Sliceable is a sequence that can be cut into pieces with the slice operator (x[i:j:step]).\n//\n// All native indexable objects are sliceable.\n// This is a separate interface for backwards-compatibility.\ntype Sliceable interface {\n\tIndexable\n\t// For positive strides (step > 0), 0 <= start <= end <= n.\n\t// For negative strides (step < 0), -1 <= end <= start < n.\n\t// The caller must ensure that the start and end indices are valid\n\t// and that step is non-zero.\n\tSlice(start, end, step int) Value\n}\n\n// A HasSetIndex is an Indexable value whose elements may be assigned (x[i] = y).\n//\n// The implementation should not add Len to a negative index as the\n// evaluator does this before the call.\ntype HasSetIndex interface {\n\tIndexable\n\tSetIndex(index int, v Value) error\n}\n\nvar (\n\t_ HasSetIndex = (*List)(nil)\n\t_ Indexable   = Tuple(nil)\n\t_ Indexable   = String(\"\")\n\t_ Sliceable   = Tuple(nil)\n\t_ Sliceable   = String(\"\")\n\t_ Sliceable   = (*List)(nil)\n)\n\n// An Iterator provides a sequence of values to the caller.\n//\n// The caller must call Done when the iterator is no longer needed.\n// Operations that modify a sequence will fail if it has active iterators.\n//\n// Example usage:\n//\n//\titer := iterable.Iterator()\n//\tdefer iter.Done()\n//\tvar x Value\n//\tfor iter.Next(&x) {\n//\t\t...\n//\t}\ntype Iterator interface {\n\t// If the iterator is exhausted, Next returns false.\n\t// Otherwise it sets *p to the current element of the sequence,\n\t// advances the iterator, and returns true.\n\tNext(p *Value) bool\n\tDone()\n}\n\n// A Mapping is a mapping from keys to values, such as a dictionary.\n//\n// If a type satisfies both Mapping and Iterable, the iterator yields\n// the keys of the mapping.\ntype Mapping interface {\n\tValue\n\t// Get returns the value corresponding to the specified key,\n\t// or !found if the mapping does not contain the key.\n\t//\n\t// Get also defines the behavior of \"v in mapping\".\n\t// The 'in' operator reports the 'found' component, ignoring errors.\n\tGet(Value) (v Value, found bool, err error)\n}\n\n// An IterableMapping is a mapping that supports key enumeration.\ntype IterableMapping interface {\n\tMapping\n\tIterate() Iterator // see Iterable interface\n\tItems() []Tuple    // a new slice containing all key/value pairs\n}\n\nvar _ IterableMapping = (*Dict)(nil)\n\n// A HasSetKey supports map update using x[k]=v syntax, like a dictionary.\ntype HasSetKey interface {\n\tMapping\n\tSetKey(k, v Value) error\n}\n\nvar _ HasSetKey = (*Dict)(nil)\n\n// A HasBinary value may be used as either operand of these binary operators:\n// +   -   *   /   //   %   in   not in   |   &   ^   <<   >>\n//\n// The Side argument indicates whether the receiver is the left or right operand.\n//\n// An implementation may decline to handle an operation by returning (nil, nil).\n// For this reason, clients should always call the standalone Binary(op, x, y)\n// function rather than calling the method directly.\ntype HasBinary interface {\n\tValue\n\tBinary(op syntax.Token, y Value, side Side) (Value, error)\n}\n\ntype Side bool\n\nconst (\n\tLeft  Side = false\n\tRight Side = true\n)\n\n// A HasUnary value may be used as the operand of these unary operators:\n// +   -   ~\n//\n// An implementation may decline to handle an operation by returning (nil, nil).\n// For this reason, clients should always call the standalone Unary(op, x)\n// function rather than calling the method directly.\ntype HasUnary interface {\n\tValue\n\tUnary(op syntax.Token) (Value, error)\n}\n\n// A HasAttrs value has fields or methods that may be read by a dot expression (y = x.f).\n// Attribute names may be listed using the built-in 'dir' function.\n//\n// For implementation convenience, a result of (nil, nil) from Attr is\n// interpreted as a \"no such field or method\" error. Implementations are\n// free to return a more precise error.\ntype HasAttrs interface {\n\tValue\n\tAttr(name string) (Value, error) // returns (nil, nil) if attribute not present\n\tAttrNames() []string             // callers must not modify the result.\n}\n\nvar (\n\t_ HasAttrs = String(\"\")\n\t_ HasAttrs = new(List)\n\t_ HasAttrs = new(Dict)\n\t_ HasAttrs = new(Set)\n)\n\n// A HasSetField value has fields that may be written by a dot expression (x.f = y).\n//\n// An implementation of SetField may return a NoSuchAttrError,\n// in which case the runtime may augment the error message to\n// warn of possible misspelling.\ntype HasSetField interface {\n\tHasAttrs\n\tSetField(name string, val Value) error\n}\n\n// A NoSuchAttrError may be returned by an implementation of\n// HasAttrs.Attr or HasSetField.SetField to indicate that no such field\n// exists. In that case the runtime may augment the error message to\n// warn of possible misspelling.\ntype NoSuchAttrError string\n\nfunc (e NoSuchAttrError) Error() string { return string(e) }\n\n// NoneType is the type of None.  Its only legal value is None.\n// (We represent it as a number, not struct{}, so that None may be constant.)\ntype NoneType byte\n\nconst None = NoneType(0)\n\nfunc (NoneType) String() string        { return \"None\" }\nfunc (NoneType) Type() string          { return \"NoneType\" }\nfunc (NoneType) Freeze()               {} // immutable\nfunc (NoneType) Truth() Bool           { return False }\nfunc (NoneType) Hash() (uint32, error) { return 0, nil }\n\n// Bool is the type of a Starlark bool.\ntype Bool bool\n\nconst (\n\tFalse Bool = false\n\tTrue  Bool = true\n)\n\nfunc (b Bool) String() string {\n\tif b {\n\t\treturn \"True\"\n\t} else {\n\t\treturn \"False\"\n\t}\n}\nfunc (b Bool) Type() string          { return \"bool\" }\nfunc (b Bool) Freeze()               {} // immutable\nfunc (b Bool) Truth() Bool           { return b }\nfunc (b Bool) Hash() (uint32, error) { return uint32(b2i(bool(b))), nil }\nfunc (x Bool) CompareSameType(op syntax.Token, y_ Value, depth int) (bool, error) {\n\ty := y_.(Bool)\n\treturn threeway(op, b2i(bool(x))-b2i(bool(y))), nil\n}\n\n// Float is the type of a Starlark float.\ntype Float float64\n\nfunc (f Float) String() string {\n\tvar buf strings.Builder\n\tf.format(&buf, 'g')\n\treturn buf.String()\n}\n\nfunc (f Float) format(buf *strings.Builder, conv byte) {\n\tff := float64(f)\n\tif !isFinite(ff) {\n\t\tif math.IsInf(ff, +1) {\n\t\t\tbuf.WriteString(\"+inf\")\n\t\t} else if math.IsInf(ff, -1) {\n\t\t\tbuf.WriteString(\"-inf\")\n\t\t} else {\n\t\t\tbuf.WriteString(\"nan\")\n\t\t}\n\t\treturn\n\t}\n\n\t// %g is the default format used by str.\n\t// It uses the minimum precision to avoid ambiguity,\n\t// and always includes a '.' or an 'e' so that the value\n\t// is self-evidently a float, not an int.\n\tif conv == 'g' || conv == 'G' {\n\t\ts := strconv.FormatFloat(ff, conv, -1, 64)\n\t\tbuf.WriteString(s)\n\t\t// Ensure result always has a decimal point if no exponent.\n\t\t// \"123\" -> \"123.0\"\n\t\tif strings.IndexByte(s, conv-'g'+'e') < 0 && strings.IndexByte(s, '.') < 0 {\n\t\t\tbuf.WriteString(\".0\")\n\t\t}\n\t\treturn\n\t}\n\n\t// %[eEfF] use 6-digit precision\n\tbuf.WriteString(strconv.FormatFloat(ff, conv, 6, 64))\n}\n\nfunc (f Float) Type() string { return \"float\" }\nfunc (f Float) Freeze()      {} // immutable\nfunc (f Float) Truth() Bool  { return f != 0.0 }\nfunc (f Float) Hash() (uint32, error) {\n\t// Equal float and int values must yield the same hash.\n\t// TODO(adonovan): opt: if f is non-integral, and thus not equal\n\t// to any Int, we can avoid the Int conversion and use a cheaper hash.\n\tif isFinite(float64(f)) {\n\t\treturn finiteFloatToInt(f).Hash()\n\t}\n\treturn 1618033, nil // NaN, +/-Inf\n}\n\nfunc floor(f Float) Float { return Float(math.Floor(float64(f))) }\n\n// isFinite reports whether f represents a finite rational value.\n// It is equivalent to !math.IsNan(f) && !math.IsInf(f, 0).\nfunc isFinite(f float64) bool {\n\treturn math.Abs(f) <= math.MaxFloat64\n}\n\n// Cmp implements comparison of two Float values.\n// Required by the TotallyOrdered interface.\nfunc (f Float) Cmp(v Value, depth int) (int, error) {\n\tg := v.(Float)\n\treturn floatCmp(f, g), nil\n}\n\n// floatCmp performs a three-valued comparison on floats,\n// which are totally ordered with NaN > +Inf.\nfunc floatCmp(x, y Float) int {\n\tif x > y {\n\t\treturn +1\n\t} else if x < y {\n\t\treturn -1\n\t} else if x == y {\n\t\treturn 0\n\t}\n\n\t// At least one operand is NaN.\n\tif x == x {\n\t\treturn -1 // y is NaN\n\t} else if y == y {\n\t\treturn +1 // x is NaN\n\t}\n\treturn 0 // both NaN\n}\n\nfunc (f Float) rational() *big.Rat { return new(big.Rat).SetFloat64(float64(f)) }\n\n// AsFloat returns the float64 value closest to x.\n// The f result is undefined if x is not a float or Int.\n// The result may be infinite if x is a very large Int.\nfunc AsFloat(x Value) (f float64, ok bool) {\n\tswitch x := x.(type) {\n\tcase Float:\n\t\treturn float64(x), true\n\tcase Int:\n\t\treturn float64(x.Float()), true\n\t}\n\treturn 0, false\n}\n\nfunc (x Float) Mod(y Float) Float {\n\tz := Float(math.Mod(float64(x), float64(y)))\n\tif (x < 0) != (y < 0) && z != 0 {\n\t\tz += y\n\t}\n\treturn z\n}\n\n// Unary implements the operations +float and -float.\nfunc (f Float) Unary(op syntax.Token) (Value, error) {\n\tswitch op {\n\tcase syntax.MINUS:\n\t\treturn -f, nil\n\tcase syntax.PLUS:\n\t\treturn +f, nil\n\t}\n\treturn nil, nil\n}\n\n// String is the type of a Starlark text string.\n//\n// A String encapsulates an an immutable sequence of bytes,\n// but strings are not directly iterable. Instead, iterate\n// over the result of calling one of these four methods:\n// codepoints, codepoint_ords, elems, elem_ords.\n//\n// Strings typically contain text; use Bytes for binary strings.\n// The Starlark spec defines text strings as sequences of UTF-k\n// codes that encode Unicode code points. In this Go implementation,\n// k=8, whereas in a Java implementation, k=16. For portability,\n// operations on strings should aim to avoid assumptions about\n// the value of k.\n//\n// Warning: the contract of the Value interface's String method is that\n// it returns the value printed in Starlark notation,\n// so s.String() or fmt.Sprintf(\"%s\", s) returns a quoted string.\n// Use string(s) or s.GoString() or fmt.Sprintf(\"%#v\", s) to obtain the raw contents\n// of a Starlark string as a Go string.\ntype String string\n\nfunc (s String) String() string        { return syntax.Quote(string(s), false) }\nfunc (s String) GoString() string      { return string(s) }\nfunc (s String) Type() string          { return \"string\" }\nfunc (s String) Freeze()               {} // immutable\nfunc (s String) Truth() Bool           { return len(s) > 0 }\nfunc (s String) Hash() (uint32, error) { return hashString(string(s)), nil }\nfunc (s String) Len() int              { return len(s) } // bytes\nfunc (s String) Index(i int) Value     { return s[i : i+1] }\n\nfunc (s String) Slice(start, end, step int) Value {\n\tif step == 1 {\n\t\treturn s[start:end]\n\t}\n\n\tsign := signum(step)\n\tvar str []byte\n\tfor i := start; signum(end-i) == sign; i += step {\n\t\tstr = append(str, s[i])\n\t}\n\treturn String(str)\n}\n\nfunc (s String) Attr(name string) (Value, error) { return builtinAttr(s, name, stringMethods) }\nfunc (s String) AttrNames() []string             { return builtinAttrNames(stringMethods) }\n\nfunc (x String) CompareSameType(op syntax.Token, y_ Value, depth int) (bool, error) {\n\ty := y_.(String)\n\treturn threeway(op, strings.Compare(string(x), string(y))), nil\n}\n\nfunc AsString(x Value) (string, bool) { v, ok := x.(String); return string(v), ok }\n\n// A stringElems is an iterable whose iterator yields a sequence of\n// elements (bytes), either numerically or as successive substrings.\n// It is an indexable sequence.\ntype stringElems struct {\n\ts    String\n\tords bool\n}\n\nvar (\n\t_ Iterable  = (*stringElems)(nil)\n\t_ Indexable = (*stringElems)(nil)\n)\n\nfunc (si stringElems) String() string {\n\tif si.ords {\n\t\treturn si.s.String() + \".elem_ords()\"\n\t} else {\n\t\treturn si.s.String() + \".elems()\"\n\t}\n}\nfunc (si stringElems) Type() string          { return \"string.elems\" }\nfunc (si stringElems) Freeze()               {} // immutable\nfunc (si stringElems) Truth() Bool           { return True }\nfunc (si stringElems) Hash() (uint32, error) { return 0, fmt.Errorf(\"unhashable: %s\", si.Type()) }\nfunc (si stringElems) Iterate() Iterator     { return &stringElemsIterator{si, 0} }\nfunc (si stringElems) Len() int              { return len(si.s) }\nfunc (si stringElems) Index(i int) Value {\n\tif si.ords {\n\t\treturn MakeInt(int(si.s[i]))\n\t} else {\n\t\t// TODO(adonovan): opt: preallocate canonical 1-byte strings\n\t\t// to avoid interface allocation.\n\t\treturn si.s[i : i+1]\n\t}\n}\n\ntype stringElemsIterator struct {\n\tsi stringElems\n\ti  int\n}\n\nfunc (it *stringElemsIterator) Next(p *Value) bool {\n\tif it.i == len(it.si.s) {\n\t\treturn false\n\t}\n\t*p = it.si.Index(it.i)\n\tit.i++\n\treturn true\n}\n\nfunc (*stringElemsIterator) Done() {}\n\n// A stringCodepoints is an iterable whose iterator yields a sequence of\n// Unicode code points, either numerically or as successive substrings.\n// It is not indexable.\ntype stringCodepoints struct {\n\ts    String\n\tords bool\n}\n\nvar _ Iterable = (*stringCodepoints)(nil)\n\nfunc (si stringCodepoints) String() string {\n\tif si.ords {\n\t\treturn si.s.String() + \".codepoint_ords()\"\n\t} else {\n\t\treturn si.s.String() + \".codepoints()\"\n\t}\n}\nfunc (si stringCodepoints) Type() string          { return \"string.codepoints\" }\nfunc (si stringCodepoints) Freeze()               {} // immutable\nfunc (si stringCodepoints) Truth() Bool           { return True }\nfunc (si stringCodepoints) Hash() (uint32, error) { return 0, fmt.Errorf(\"unhashable: %s\", si.Type()) }\nfunc (si stringCodepoints) Iterate() Iterator     { return &stringCodepointsIterator{si, 0} }\n\ntype stringCodepointsIterator struct {\n\tsi stringCodepoints\n\ti  int\n}\n\nfunc (it *stringCodepointsIterator) Next(p *Value) bool {\n\ts := it.si.s[it.i:]\n\tif s == \"\" {\n\t\treturn false\n\t}\n\tr, sz := utf8.DecodeRuneInString(string(s))\n\tif !it.si.ords {\n\t\tif r == utf8.RuneError {\n\t\t\t*p = String(r)\n\t\t} else {\n\t\t\t*p = s[:sz]\n\t\t}\n\t} else {\n\t\t*p = MakeInt(int(r))\n\t}\n\tit.i += sz\n\treturn true\n}\n\nfunc (*stringCodepointsIterator) Done() {}\n\n// A Function is a function defined by a Starlark def statement or lambda expression.\n// The initialization behavior of a Starlark module is also represented by a Function.\ntype Function struct {\n\tfuncode  *compile.Funcode\n\tmodule   *module\n\tdefaults Tuple\n\tfreevars Tuple\n}\n\n// A module is the dynamic counterpart to a Program.\n// All functions in the same program share a module.\ntype module struct {\n\tprogram     *compile.Program\n\tpredeclared StringDict\n\tglobals     []Value\n\tconstants   []Value\n}\n\n// makeGlobalDict returns a new, unfrozen StringDict containing all global\n// variables so far defined in the module.\nfunc (m *module) makeGlobalDict() StringDict {\n\tr := make(StringDict, len(m.program.Globals))\n\tfor i, id := range m.program.Globals {\n\t\tif v := m.globals[i]; v != nil {\n\t\t\tr[id.Name] = v\n\t\t}\n\t}\n\treturn r\n}\n\nfunc (fn *Function) Name() string          { return fn.funcode.Name } // \"lambda\" for anonymous functions\nfunc (fn *Function) Doc() string           { return fn.funcode.Doc }\nfunc (fn *Function) Hash() (uint32, error) { return hashString(fn.funcode.Name), nil }\nfunc (fn *Function) Freeze()               { fn.defaults.Freeze(); fn.freevars.Freeze() }\nfunc (fn *Function) String() string        { return toString(fn) }\nfunc (fn *Function) Type() string          { return \"function\" }\nfunc (fn *Function) Truth() Bool           { return true }\n\n// Globals returns a new, unfrozen StringDict containing all global\n// variables so far defined in the function's module.\nfunc (fn *Function) Globals() StringDict { return fn.module.makeGlobalDict() }\n\nfunc (fn *Function) Position() syntax.Position { return fn.funcode.Pos }\nfunc (fn *Function) NumParams() int            { return fn.funcode.NumParams }\nfunc (fn *Function) NumKwonlyParams() int      { return fn.funcode.NumKwonlyParams }\n\n// Param returns the name and position of the ith parameter,\n// where 0 <= i < NumParams().\n// The *args and **kwargs parameters are at the end\n// even if there were optional parameters after *args.\nfunc (fn *Function) Param(i int) (string, syntax.Position) {\n\tif i >= fn.NumParams() {\n\t\tpanic(i)\n\t}\n\tid := fn.funcode.Locals[i]\n\treturn id.Name, id.Pos\n}\n\n// ParamDefault returns the default value of the specified parameter\n// (0 <= i < NumParams()), or nil if the parameter is not optional.\nfunc (fn *Function) ParamDefault(i int) Value {\n\tif i < 0 || i >= fn.NumParams() {\n\t\tpanic(i)\n\t}\n\n\t// fn.defaults omits all required params up to the first optional param. It\n\t// also does not include *args or **kwargs at the end.\n\tfirstOptIdx := fn.NumParams() - len(fn.defaults)\n\tif fn.HasVarargs() {\n\t\tfirstOptIdx--\n\t}\n\tif fn.HasKwargs() {\n\t\tfirstOptIdx--\n\t}\n\tif i < firstOptIdx || i >= firstOptIdx+len(fn.defaults) {\n\t\treturn nil\n\t}\n\n\tdflt := fn.defaults[i-firstOptIdx]\n\tif _, ok := dflt.(mandatory); ok {\n\t\treturn nil\n\t}\n\treturn dflt\n}\n\nfunc (fn *Function) HasVarargs() bool { return fn.funcode.HasVarargs }\nfunc (fn *Function) HasKwargs() bool  { return fn.funcode.HasKwargs }\n\n// A Builtin is a function implemented in Go.\ntype Builtin struct {\n\tname string\n\tfn   func(thread *Thread, fn *Builtin, args Tuple, kwargs []Tuple) (Value, error)\n\trecv Value // for bound methods (e.g. \"\".startswith)\n}\n\nfunc (b *Builtin) Name() string { return b.name }\nfunc (b *Builtin) Freeze() {\n\tif b.recv != nil {\n\t\tb.recv.Freeze()\n\t}\n}\nfunc (b *Builtin) Hash() (uint32, error) {\n\th := hashString(b.name)\n\tif b.recv != nil {\n\t\th ^= 5521\n\t}\n\treturn h, nil\n}\nfunc (b *Builtin) Receiver() Value { return b.recv }\nfunc (b *Builtin) String() string  { return toString(b) }\nfunc (b *Builtin) Type() string    { return \"builtin_function_or_method\" }\nfunc (b *Builtin) CallInternal(thread *Thread, args Tuple, kwargs []Tuple) (Value, error) {\n\treturn b.fn(thread, b, args, kwargs)\n}\nfunc (b *Builtin) Truth() Bool { return true }\n\n// NewBuiltin returns a new 'builtin_function_or_method' value with the specified name\n// and implementation.  It compares unequal with all other values.\nfunc NewBuiltin(name string, fn func(thread *Thread, fn *Builtin, args Tuple, kwargs []Tuple) (Value, error)) *Builtin {\n\treturn &Builtin{name: name, fn: fn}\n}\n\n// BindReceiver returns a new Builtin value representing a method\n// closure, that is, a built-in function bound to a receiver value.\n//\n// In the example below, the value of f is the string.index\n// built-in method bound to the receiver value \"abc\":\n//\n//\tf = \"abc\".index; f(\"a\"); f(\"b\")\n//\n// In the common case, the receiver is bound only during the call,\n// but this still results in the creation of a temporary method closure:\n//\n//\t\"abc\".index(\"a\")\nfunc (b *Builtin) BindReceiver(recv Value) *Builtin {\n\treturn &Builtin{name: b.name, fn: b.fn, recv: recv}\n}\n\n// A *Dict represents a Starlark dictionary.\n// The zero value of Dict is a valid empty dictionary.\n// If you know the exact final number of entries,\n// it is more efficient to call NewDict.\ntype Dict struct {\n\tht hashtable\n}\n\n// NewDict returns a set with initial space for\n// at least size insertions before rehashing.\nfunc NewDict(size int) *Dict {\n\tdict := new(Dict)\n\tdict.ht.init(size)\n\treturn dict\n}\n\nfunc (d *Dict) Clear() error                                    { return d.ht.clear() }\nfunc (d *Dict) Delete(k Value) (v Value, found bool, err error) { return d.ht.delete(k) }\nfunc (d *Dict) Get(k Value) (v Value, found bool, err error)    { return d.ht.lookup(k) }\nfunc (d *Dict) Items() []Tuple                                  { return d.ht.items() }\nfunc (d *Dict) Keys() []Value                                   { return d.ht.keys() }\nfunc (d *Dict) Len() int                                        { return int(d.ht.len) }\nfunc (d *Dict) Iterate() Iterator                               { return d.ht.iterate() }\nfunc (d *Dict) SetKey(k, v Value) error                         { return d.ht.insert(k, v) }\nfunc (d *Dict) String() string                                  { return toString(d) }\nfunc (d *Dict) Type() string                                    { return \"dict\" }\nfunc (d *Dict) Freeze()                                         { d.ht.freeze() }\nfunc (d *Dict) Truth() Bool                                     { return d.Len() > 0 }\nfunc (d *Dict) Hash() (uint32, error)                           { return 0, fmt.Errorf(\"unhashable type: dict\") }\n\nfunc (x *Dict) Union(y *Dict) *Dict {\n\tz := new(Dict)\n\tz.ht.init(x.Len()) // a lower bound\n\tz.ht.addAll(&x.ht) // can't fail\n\tz.ht.addAll(&y.ht) // can't fail\n\treturn z\n}\n\nfunc (d *Dict) Attr(name string) (Value, error) { return builtinAttr(d, name, dictMethods) }\nfunc (d *Dict) AttrNames() []string             { return builtinAttrNames(dictMethods) }\n\nfunc (x *Dict) CompareSameType(op syntax.Token, y_ Value, depth int) (bool, error) {\n\ty := y_.(*Dict)\n\tswitch op {\n\tcase syntax.EQL:\n\t\tok, err := dictsEqual(x, y, depth)\n\t\treturn ok, err\n\tcase syntax.NEQ:\n\t\tok, err := dictsEqual(x, y, depth)\n\t\treturn !ok, err\n\tdefault:\n\t\treturn false, fmt.Errorf(\"%s %s %s not implemented\", x.Type(), op, y.Type())\n\t}\n}\n\nfunc dictsEqual(x, y *Dict, depth int) (bool, error) {\n\tif x.Len() != y.Len() {\n\t\treturn false, nil\n\t}\n\tfor e := x.ht.head; e != nil; e = e.next {\n\t\tkey, xval := e.key, e.value\n\n\t\tif yval, found, _ := y.Get(key); !found {\n\t\t\treturn false, nil\n\t\t} else if eq, err := EqualDepth(xval, yval, depth-1); err != nil {\n\t\t\treturn false, err\n\t\t} else if !eq {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\treturn true, nil\n}\n\n// A *List represents a Starlark list value.\ntype List struct {\n\telems     []Value\n\tfrozen    bool\n\titercount uint32 // number of active iterators (ignored if frozen)\n}\n\n// NewList returns a list containing the specified elements.\n// Callers should not subsequently modify elems.\nfunc NewList(elems []Value) *List { return &List{elems: elems} }\n\nfunc (l *List) Freeze() {\n\tif !l.frozen {\n\t\tl.frozen = true\n\t\tfor _, elem := range l.elems {\n\t\t\telem.Freeze()\n\t\t}\n\t}\n}\n\n// checkMutable reports an error if the list should not be mutated.\n// verb+\" list\" should describe the operation.\nfunc (l *List) checkMutable(verb string) error {\n\tif l.frozen {\n\t\treturn fmt.Errorf(\"cannot %s frozen list\", verb)\n\t}\n\tif l.itercount > 0 {\n\t\treturn fmt.Errorf(\"cannot %s list during iteration\", verb)\n\t}\n\treturn nil\n}\n\nfunc (l *List) String() string        { return toString(l) }\nfunc (l *List) Type() string          { return \"list\" }\nfunc (l *List) Hash() (uint32, error) { return 0, fmt.Errorf(\"unhashable type: list\") }\nfunc (l *List) Truth() Bool           { return l.Len() > 0 }\nfunc (l *List) Len() int              { return len(l.elems) }\nfunc (l *List) Index(i int) Value     { return l.elems[i] }\n\nfunc (l *List) Slice(start, end, step int) Value {\n\tif step == 1 {\n\t\telems := append([]Value{}, l.elems[start:end]...)\n\t\treturn NewList(elems)\n\t}\n\n\tsign := signum(step)\n\tvar list []Value\n\tfor i := start; signum(end-i) == sign; i += step {\n\t\tlist = append(list, l.elems[i])\n\t}\n\treturn NewList(list)\n}\n\nfunc (l *List) Attr(name string) (Value, error) { return builtinAttr(l, name, listMethods) }\nfunc (l *List) AttrNames() []string             { return builtinAttrNames(listMethods) }\n\nfunc (l *List) Iterate() Iterator {\n\tif !l.frozen {\n\t\tl.itercount++\n\t}\n\treturn &listIterator{l: l}\n}\n\nfunc (x *List) CompareSameType(op syntax.Token, y_ Value, depth int) (bool, error) {\n\ty := y_.(*List)\n\t// It's tempting to check x == y as an optimization here,\n\t// but wrong because a list containing NaN is not equal to itself.\n\treturn sliceCompare(op, x.elems, y.elems, depth)\n}\n\nfunc sliceCompare(op syntax.Token, x, y []Value, depth int) (bool, error) {\n\t// Fast path: check length.\n\tif len(x) != len(y) && (op == syntax.EQL || op == syntax.NEQ) {\n\t\treturn op == syntax.NEQ, nil\n\t}\n\n\t// Find first element that is not equal in both lists.\n\tfor i := 0; i < len(x) && i < len(y); i++ {\n\t\tif eq, err := EqualDepth(x[i], y[i], depth-1); err != nil {\n\t\t\treturn false, err\n\t\t} else if !eq {\n\t\t\tswitch op {\n\t\t\tcase syntax.EQL:\n\t\t\t\treturn false, nil\n\t\t\tcase syntax.NEQ:\n\t\t\t\treturn true, nil\n\t\t\tdefault:\n\t\t\t\treturn CompareDepth(op, x[i], y[i], depth-1)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn threeway(op, len(x)-len(y)), nil\n}\n\ntype listIterator struct {\n\tl *List\n\ti int\n}\n\nfunc (it *listIterator) Next(p *Value) bool {\n\tif it.i < it.l.Len() {\n\t\t*p = it.l.elems[it.i]\n\t\tit.i++\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (it *listIterator) Done() {\n\tif !it.l.frozen {\n\t\tit.l.itercount--\n\t}\n}\n\nfunc (l *List) SetIndex(i int, v Value) error {\n\tif err := l.checkMutable(\"assign to element of\"); err != nil {\n\t\treturn err\n\t}\n\tl.elems[i] = v\n\treturn nil\n}\n\nfunc (l *List) Append(v Value) error {\n\tif err := l.checkMutable(\"append to\"); err != nil {\n\t\treturn err\n\t}\n\tl.elems = append(l.elems, v)\n\treturn nil\n}\n\nfunc (l *List) Clear() error {\n\tif err := l.checkMutable(\"clear\"); err != nil {\n\t\treturn err\n\t}\n\tfor i := range l.elems {\n\t\tl.elems[i] = nil // aid GC\n\t}\n\tl.elems = l.elems[:0]\n\treturn nil\n}\n\n// A Tuple represents a Starlark tuple value.\ntype Tuple []Value\n\nfunc (t Tuple) Len() int          { return len(t) }\nfunc (t Tuple) Index(i int) Value { return t[i] }\n\nfunc (t Tuple) Slice(start, end, step int) Value {\n\tif step == 1 {\n\t\treturn t[start:end]\n\t}\n\n\tsign := signum(step)\n\tvar tuple Tuple\n\tfor i := start; signum(end-i) == sign; i += step {\n\t\ttuple = append(tuple, t[i])\n\t}\n\treturn tuple\n}\n\nfunc (t Tuple) Iterate() Iterator { return &tupleIterator{elems: t} }\nfunc (t Tuple) Freeze() {\n\tfor _, elem := range t {\n\t\telem.Freeze()\n\t}\n}\nfunc (t Tuple) String() string { return toString(t) }\nfunc (t Tuple) Type() string   { return \"tuple\" }\nfunc (t Tuple) Truth() Bool    { return len(t) > 0 }\n\nfunc (x Tuple) CompareSameType(op syntax.Token, y_ Value, depth int) (bool, error) {\n\ty := y_.(Tuple)\n\treturn sliceCompare(op, x, y, depth)\n}\n\nfunc (t Tuple) Hash() (uint32, error) {\n\t// Use same algorithm as Python.\n\tvar x, mult uint32 = 0x345678, 1000003\n\tfor _, elem := range t {\n\t\ty, err := elem.Hash()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tx = x ^ y*mult\n\t\tmult += 82520 + uint32(len(t)+len(t))\n\t}\n\treturn x, nil\n}\n\ntype tupleIterator struct{ elems Tuple }\n\nfunc (it *tupleIterator) Next(p *Value) bool {\n\tif len(it.elems) > 0 {\n\t\t*p = it.elems[0]\n\t\tit.elems = it.elems[1:]\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (it *tupleIterator) Done() {}\n\n// A Set represents a Starlark set value.\n// The zero value of Set is a valid empty set.\n// If you know the exact final number of elements,\n// it is more efficient to call NewSet.\ntype Set struct {\n\tht hashtable // values are all None\n}\n\n// NewSet returns a dictionary with initial space for\n// at least size insertions before rehashing.\nfunc NewSet(size int) *Set {\n\tset := new(Set)\n\tset.ht.init(size)\n\treturn set\n}\n\nfunc (s *Set) Delete(k Value) (found bool, err error) { _, found, err = s.ht.delete(k); return }\nfunc (s *Set) Clear() error                           { return s.ht.clear() }\nfunc (s *Set) Has(k Value) (found bool, err error)    { _, found, err = s.ht.lookup(k); return }\nfunc (s *Set) Insert(k Value) error                   { return s.ht.insert(k, None) }\nfunc (s *Set) Len() int                               { return int(s.ht.len) }\nfunc (s *Set) Iterate() Iterator                      { return s.ht.iterate() }\nfunc (s *Set) String() string                         { return toString(s) }\nfunc (s *Set) Type() string                           { return \"set\" }\nfunc (s *Set) Freeze()                                { s.ht.freeze() }\nfunc (s *Set) Hash() (uint32, error)                  { return 0, fmt.Errorf(\"unhashable type: set\") }\nfunc (s *Set) Truth() Bool                            { return s.Len() > 0 }\n\nfunc (s *Set) Attr(name string) (Value, error) { return builtinAttr(s, name, setMethods) }\nfunc (s *Set) AttrNames() []string             { return builtinAttrNames(setMethods) }\n\nfunc (x *Set) CompareSameType(op syntax.Token, y_ Value, depth int) (bool, error) {\n\ty := y_.(*Set)\n\tswitch op {\n\tcase syntax.EQL:\n\t\tok, err := setsEqual(x, y, depth)\n\t\treturn ok, err\n\tcase syntax.NEQ:\n\t\tok, err := setsEqual(x, y, depth)\n\t\treturn !ok, err\n\tcase syntax.GE: // superset\n\t\tif x.Len() < y.Len() {\n\t\t\treturn false, nil\n\t\t}\n\t\titer := y.Iterate()\n\t\tdefer iter.Done()\n\t\treturn x.IsSuperset(iter)\n\tcase syntax.LE: // subset\n\t\tif x.Len() > y.Len() {\n\t\t\treturn false, nil\n\t\t}\n\t\titer := y.Iterate()\n\t\tdefer iter.Done()\n\t\treturn x.IsSubset(iter)\n\tcase syntax.GT: // proper superset\n\t\tif x.Len() <= y.Len() {\n\t\t\treturn false, nil\n\t\t}\n\t\titer := y.Iterate()\n\t\tdefer iter.Done()\n\t\treturn x.IsSuperset(iter)\n\tcase syntax.LT: // proper subset\n\t\tif x.Len() >= y.Len() {\n\t\t\treturn false, nil\n\t\t}\n\t\titer := y.Iterate()\n\t\tdefer iter.Done()\n\t\treturn x.IsSubset(iter)\n\tdefault:\n\t\treturn false, fmt.Errorf(\"%s %s %s not implemented\", x.Type(), op, y.Type())\n\t}\n}\n\nfunc setsEqual(x, y *Set, depth int) (bool, error) {\n\tif x.Len() != y.Len() {\n\t\treturn false, nil\n\t}\n\tfor e := x.ht.head; e != nil; e = e.next {\n\t\tif found, _ := y.Has(e.key); !found {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\treturn true, nil\n}\n\nfunc setFromIterator(iter Iterator) (*Set, error) {\n\tvar x Value\n\tset := new(Set)\n\tfor iter.Next(&x) {\n\t\terr := set.Insert(x)\n\t\tif err != nil {\n\t\t\treturn set, err\n\t\t}\n\t}\n\treturn set, nil\n}\n\nfunc (s *Set) clone() *Set {\n\tset := new(Set)\n\tfor e := s.ht.head; e != nil; e = e.next {\n\t\tset.Insert(e.key) // can't fail\n\t}\n\treturn set\n}\n\nfunc (s *Set) Union(iter Iterator) (Value, error) {\n\tset := s.clone()\n\tvar x Value\n\tfor iter.Next(&x) {\n\t\tif err := set.Insert(x); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn set, nil\n}\n\nfunc (s *Set) Difference(other Iterator) (Value, error) {\n\tdiff := s.clone()\n\tvar x Value\n\tfor other.Next(&x) {\n\t\tif _, err := diff.Delete(x); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t}\n\treturn diff, nil\n}\n\nfunc (s *Set) IsSuperset(other Iterator) (bool, error) {\n\tvar x Value\n\tfor other.Next(&x) {\n\t\tfound, err := s.Has(x)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif !found {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\treturn true, nil\n}\n\nfunc (s *Set) IsSubset(other Iterator) (bool, error) {\n\tif count, err := s.ht.count(other); err != nil {\n\t\treturn false, err\n\t} else {\n\t\treturn count == s.Len(), nil\n\t}\n}\n\nfunc (s *Set) Intersection(other Iterator) (Value, error) {\n\tintersect := new(Set)\n\tvar x Value\n\tfor other.Next(&x) {\n\t\tfound, err := s.Has(x)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif found {\n\t\t\terr = intersect.Insert(x)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\t\t}\n\t}\n\treturn intersect, nil\n}\n\nfunc (s *Set) SymmetricDifference(other Iterator) (Value, error) {\n\tdiff := s.clone()\n\tvar x Value\n\tfor other.Next(&x) {\n\t\tfound, err := diff.Delete(x)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif !found {\n\t\t\tdiff.Insert(x)\n\t\t}\n\t}\n\treturn diff, nil\n}\n\n// toString returns the string form of value v.\n// It may be more efficient than v.String() for larger values.\nfunc toString(v Value) string {\n\tbuf := new(strings.Builder)\n\twriteValue(buf, v, nil)\n\treturn buf.String()\n}\n\n// writeValue writes x to out.\n//\n// path is used to detect cycles.\n// It contains the list of *List and *Dict values we're currently printing.\n// (These are the only potentially cyclic structures.)\n// Callers should generally pass nil for path.\n// It is safe to re-use the same path slice for multiple calls.\nfunc writeValue(out *strings.Builder, x Value, path []Value) {\n\tswitch x := x.(type) {\n\tcase nil:\n\t\tout.WriteString(\"<nil>\") // indicates a bug\n\n\t// These four cases are duplicates of T.String(), for efficiency.\n\tcase NoneType:\n\t\tout.WriteString(\"None\")\n\n\tcase Int:\n\t\tout.WriteString(x.String())\n\n\tcase Bool:\n\t\tif x {\n\t\t\tout.WriteString(\"True\")\n\t\t} else {\n\t\t\tout.WriteString(\"False\")\n\t\t}\n\n\tcase String:\n\t\tout.WriteString(syntax.Quote(string(x), false))\n\n\tcase *List:\n\t\tout.WriteByte('[')\n\t\tif pathContains(path, x) {\n\t\t\tout.WriteString(\"...\") // list contains itself\n\t\t} else {\n\t\t\tfor i, elem := range x.elems {\n\t\t\t\tif i > 0 {\n\t\t\t\t\tout.WriteString(\", \")\n\t\t\t\t}\n\t\t\t\twriteValue(out, elem, append(path, x))\n\t\t\t}\n\t\t}\n\t\tout.WriteByte(']')\n\n\tcase Tuple:\n\t\tout.WriteByte('(')\n\t\tfor i, elem := range x {\n\t\t\tif i > 0 {\n\t\t\t\tout.WriteString(\", \")\n\t\t\t}\n\t\t\twriteValue(out, elem, path)\n\t\t}\n\t\tif len(x) == 1 {\n\t\t\tout.WriteByte(',')\n\t\t}\n\t\tout.WriteByte(')')\n\n\tcase *Function:\n\t\tfmt.Fprintf(out, \"<function %s>\", x.Name())\n\n\tcase *Builtin:\n\t\tif x.recv != nil {\n\t\t\tfmt.Fprintf(out, \"<built-in method %s of %s value>\", x.Name(), x.recv.Type())\n\t\t} else {\n\t\t\tfmt.Fprintf(out, \"<built-in function %s>\", x.Name())\n\t\t}\n\n\tcase *Dict:\n\t\tout.WriteByte('{')\n\t\tif pathContains(path, x) {\n\t\t\tout.WriteString(\"...\") // dict contains itself\n\t\t} else {\n\t\t\tsep := \"\"\n\t\t\tfor e := x.ht.head; e != nil; e = e.next {\n\t\t\t\tk, v := e.key, e.value\n\t\t\t\tout.WriteString(sep)\n\t\t\t\twriteValue(out, k, path)\n\t\t\t\tout.WriteString(\": \")\n\t\t\t\twriteValue(out, v, append(path, x)) // cycle check\n\t\t\t\tsep = \", \"\n\t\t\t}\n\t\t}\n\t\tout.WriteByte('}')\n\n\tcase *Set:\n\t\tout.WriteString(\"set([\")\n\t\tfor e := x.ht.head; e != nil; e = e.next {\n\t\t\tif e != x.ht.head {\n\t\t\t\tout.WriteString(\", \")\n\t\t\t}\n\t\t\twriteValue(out, e.key, path)\n\t\t}\n\t\tout.WriteString(\"])\")\n\n\tdefault:\n\t\tout.WriteString(x.String())\n\t}\n}\n\nfunc pathContains(path []Value, x Value) bool {\n\tfor _, y := range path {\n\t\tif x == y {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\n// CompareLimit is the depth limit on recursive comparison operations such as == and <.\n// Comparison of data structures deeper than this limit may fail.\nvar CompareLimit = 10\n\n// Equal reports whether two Starlark values are equal.\nfunc Equal(x, y Value) (bool, error) {\n\tif x, ok := x.(String); ok {\n\t\treturn x == y, nil // fast path for an important special case\n\t}\n\treturn EqualDepth(x, y, CompareLimit)\n}\n\n// EqualDepth reports whether two Starlark values are equal.\n//\n// Recursive comparisons by implementations of Value.CompareSameType\n// should use EqualDepth to prevent infinite recursion.\nfunc EqualDepth(x, y Value, depth int) (bool, error) {\n\treturn CompareDepth(syntax.EQL, x, y, depth)\n}\n\n// Compare compares two Starlark values.\n// The comparison operation must be one of EQL, NEQ, LT, LE, GT, or GE.\n// Compare returns an error if an ordered comparison was\n// requested for a type that does not support it.\n//\n// Recursive comparisons by implementations of Value.CompareSameType\n// should use CompareDepth to prevent infinite recursion.\nfunc Compare(op syntax.Token, x, y Value) (bool, error) {\n\treturn CompareDepth(op, x, y, CompareLimit)\n}\n\n// CompareDepth compares two Starlark values.\n// The comparison operation must be one of EQL, NEQ, LT, LE, GT, or GE.\n// CompareDepth returns an error if an ordered comparison was\n// requested for a pair of values that do not support it.\n//\n// The depth parameter limits the maximum depth of recursion\n// in cyclic data structures.\nfunc CompareDepth(op syntax.Token, x, y Value, depth int) (bool, error) {\n\tif depth < 1 {\n\t\treturn false, fmt.Errorf(\"comparison exceeded maximum recursion depth\")\n\t}\n\tif sameType(x, y) {\n\t\tif xcomp, ok := x.(Comparable); ok {\n\t\t\treturn xcomp.CompareSameType(op, y, depth)\n\t\t}\n\n\t\tif xcomp, ok := x.(TotallyOrdered); ok {\n\t\t\tt, err := xcomp.Cmp(y, depth)\n\t\t\tif err != nil {\n\t\t\t\treturn false, err\n\t\t\t}\n\t\t\treturn threeway(op, t), nil\n\t\t}\n\n\t\t// use identity comparison\n\t\tswitch op {\n\t\tcase syntax.EQL:\n\t\t\treturn x == y, nil\n\t\tcase syntax.NEQ:\n\t\t\treturn x != y, nil\n\t\t}\n\t\treturn false, fmt.Errorf(\"%s %s %s not implemented\", x.Type(), op, y.Type())\n\t}\n\n\t// different types\n\n\t// int/float ordered comparisons\n\tswitch x := x.(type) {\n\tcase Int:\n\t\tif y, ok := y.(Float); ok {\n\t\t\tvar cmp int\n\t\t\tif y != y {\n\t\t\t\tcmp = -1 // y is NaN\n\t\t\t} else if !math.IsInf(float64(y), 0) {\n\t\t\t\tcmp = x.rational().Cmp(y.rational()) // y is finite\n\t\t\t} else if y > 0 {\n\t\t\t\tcmp = -1 // y is +Inf\n\t\t\t} else {\n\t\t\t\tcmp = +1 // y is -Inf\n\t\t\t}\n\t\t\treturn threeway(op, cmp), nil\n\t\t}\n\tcase Float:\n\t\tif y, ok := y.(Int); ok {\n\t\t\tvar cmp int\n\t\t\tif x != x {\n\t\t\t\tcmp = +1 // x is NaN\n\t\t\t} else if !math.IsInf(float64(x), 0) {\n\t\t\t\tcmp = x.rational().Cmp(y.rational()) // x is finite\n\t\t\t} else if x > 0 {\n\t\t\t\tcmp = +1 // x is +Inf\n\t\t\t} else {\n\t\t\t\tcmp = -1 // x is -Inf\n\t\t\t}\n\t\t\treturn threeway(op, cmp), nil\n\t\t}\n\t}\n\n\t// All other values of different types compare unequal.\n\tswitch op {\n\tcase syntax.EQL:\n\t\treturn false, nil\n\tcase syntax.NEQ:\n\t\treturn true, nil\n\t}\n\treturn false, fmt.Errorf(\"%s %s %s not implemented\", x.Type(), op, y.Type())\n}\n\nfunc sameType(x, y Value) bool {\n\treturn reflect.TypeOf(x) == reflect.TypeOf(y) || x.Type() == y.Type()\n}\n\n// threeway interprets a three-way comparison value cmp (-1, 0, +1)\n// as a boolean comparison (e.g. x < y).\nfunc threeway(op syntax.Token, cmp int) bool {\n\tswitch op {\n\tcase syntax.EQL:\n\t\treturn cmp == 0\n\tcase syntax.NEQ:\n\t\treturn cmp != 0\n\tcase syntax.LE:\n\t\treturn cmp <= 0\n\tcase syntax.LT:\n\t\treturn cmp < 0\n\tcase syntax.GE:\n\t\treturn cmp >= 0\n\tcase syntax.GT:\n\t\treturn cmp > 0\n\t}\n\tpanic(op)\n}\n\nfunc b2i(b bool) int {\n\tif b {\n\t\treturn 1\n\t} else {\n\t\treturn 0\n\t}\n}\n\n// Len returns the length of a string or sequence value,\n// and -1 for all others.\n//\n// Warning: Len(x) >= 0 does not imply Iterate(x) != nil.\n// A string has a known length but is not directly iterable.\nfunc Len(x Value) int {\n\tswitch x := x.(type) {\n\tcase String:\n\t\treturn x.Len()\n\tcase Indexable:\n\t\treturn x.Len()\n\tcase Sequence:\n\t\treturn x.Len()\n\t}\n\treturn -1\n}\n\n// Iterate return a new iterator for the value if iterable, nil otherwise.\n// If the result is non-nil, the caller must call Done when finished with it.\n//\n// Warning: Iterate(x) != nil does not imply Len(x) >= 0.\n// Some iterables may have unknown length.\nfunc Iterate(x Value) Iterator {\n\tif x, ok := x.(Iterable); ok {\n\t\treturn x.Iterate()\n\t}\n\treturn nil\n}\n\n// Bytes is the type of a Starlark binary string.\n//\n// A Bytes encapsulates an immutable sequence of bytes.\n// It is comparable, indexable, and sliceable, but not directly iterable;\n// use bytes.elems() for an iterable view.\n//\n// In this Go implementation, the elements of 'string' and 'bytes' are\n// both bytes, but in other implementations, notably Java, the elements\n// of a 'string' are UTF-16 codes (Java chars). The spec abstracts text\n// strings as sequences of UTF-k codes that encode Unicode code points,\n// and operations that convert from text to binary incur UTF-k-to-UTF-8\n// transcoding; conversely, conversion from binary to text incurs\n// UTF-8-to-UTF-k transcoding. Because k=8 for Go, these operations\n// are the identity function, at least for valid encodings of text.\ntype Bytes string\n\nvar (\n\t_ Comparable = Bytes(\"\")\n\t_ Sliceable  = Bytes(\"\")\n\t_ Indexable  = Bytes(\"\")\n)\n\nfunc (b Bytes) String() string        { return syntax.Quote(string(b), true) }\nfunc (b Bytes) Type() string          { return \"bytes\" }\nfunc (b Bytes) Freeze()               {} // immutable\nfunc (b Bytes) Truth() Bool           { return len(b) > 0 }\nfunc (b Bytes) Hash() (uint32, error) { return String(b).Hash() }\nfunc (b Bytes) Len() int              { return len(b) }\nfunc (b Bytes) Index(i int) Value     { return b[i : i+1] }\n\nfunc (b Bytes) Attr(name string) (Value, error) { return builtinAttr(b, name, bytesMethods) }\nfunc (b Bytes) AttrNames() []string             { return builtinAttrNames(bytesMethods) }\n\nfunc (b Bytes) Slice(start, end, step int) Value {\n\tif step == 1 {\n\t\treturn b[start:end]\n\t}\n\n\tsign := signum(step)\n\tvar str []byte\n\tfor i := start; signum(end-i) == sign; i += step {\n\t\tstr = append(str, b[i])\n\t}\n\treturn Bytes(str)\n}\n\nfunc (x Bytes) CompareSameType(op syntax.Token, y_ Value, depth int) (bool, error) {\n\ty := y_.(Bytes)\n\treturn threeway(op, strings.Compare(string(x), string(y))), nil\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlarkstruct/module.go",
    "content": "package starlarkstruct\n\nimport (\n\t\"fmt\"\n\n\t\"go.starlark.net/starlark\"\n)\n\n// A Module is a named collection of values,\n// typically a suite of functions imported by a load statement.\n//\n// It differs from Struct primarily in that its string representation\n// does not enumerate its fields.\ntype Module struct {\n\tName    string\n\tMembers starlark.StringDict\n}\n\nvar _ starlark.HasAttrs = (*Module)(nil)\n\nfunc (m *Module) Attr(name string) (starlark.Value, error) { return m.Members[name], nil }\nfunc (m *Module) AttrNames() []string                      { return m.Members.Keys() }\nfunc (m *Module) Freeze()                                  { m.Members.Freeze() }\nfunc (m *Module) Hash() (uint32, error)                    { return 0, fmt.Errorf(\"unhashable: %s\", m.Type()) }\nfunc (m *Module) String() string                           { return fmt.Sprintf(\"<module %q>\", m.Name) }\nfunc (m *Module) Truth() starlark.Bool                     { return true }\nfunc (m *Module) Type() string                             { return \"module\" }\n\n// MakeModule may be used as the implementation of a Starlark built-in\n// function, module(name, **kwargs). It returns a new module with the\n// specified name and members.\nfunc MakeModule(thread *starlark.Thread, b *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tvar name string\n\tif err := starlark.UnpackPositionalArgs(b.Name(), args, nil, 1, &name); err != nil {\n\t\treturn nil, err\n\t}\n\tmembers := make(starlark.StringDict, len(kwargs))\n\tfor _, kwarg := range kwargs {\n\t\tk := string(kwarg[0].(starlark.String))\n\t\tmembers[k] = kwarg[1]\n\t}\n\treturn &Module{name, members}, nil\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/starlarkstruct/struct.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package starlarkstruct defines the Starlark types 'struct' and\n// 'module', both optional language extensions.\n//\npackage starlarkstruct // import \"go.starlark.net/starlarkstruct\"\n\n// It is tempting to introduce a variant of Struct that is a wrapper\n// around a Go struct value, for stronger typing guarantees and more\n// efficient and convenient field lookup. However:\n// 1) all fields of Starlark structs are optional, so we cannot represent\n//    them using more specific types such as String, Int, *Depset, and\n//    *File, as such types give no way to represent missing fields.\n// 2) the efficiency gain of direct struct field access is rather\n//    marginal: finding the index of a field by binary searching on the\n//    sorted list of field names is quite fast compared to the other\n//    overheads.\n// 3) the gains in compactness and spatial locality are also rather\n//    marginal: the array behind the []entry slice is (due to field name\n//    strings) only a factor of 2 larger than the corresponding Go struct\n//    would be, and, like the Go struct, requires only a single allocation.\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"go.starlark.net/starlark\"\n\t\"go.starlark.net/syntax\"\n)\n\n// Make is the implementation of a built-in function that instantiates\n// an immutable struct from the specified keyword arguments.\n//\n// An application can add 'struct' to the Starlark environment like so:\n//\n// \tglobals := starlark.StringDict{\n// \t\t\"struct\":  starlark.NewBuiltin(\"struct\", starlarkstruct.Make),\n// \t}\n//\nfunc Make(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {\n\tif len(args) > 0 {\n\t\treturn nil, fmt.Errorf(\"struct: unexpected positional arguments\")\n\t}\n\treturn FromKeywords(Default, kwargs), nil\n}\n\n// FromKeywords returns a new struct instance whose fields are specified by the\n// key/value pairs in kwargs.  (Each kwargs[i][0] must be a starlark.String.)\nfunc FromKeywords(constructor starlark.Value, kwargs []starlark.Tuple) *Struct {\n\tif constructor == nil {\n\t\tpanic(\"nil constructor\")\n\t}\n\ts := &Struct{\n\t\tconstructor: constructor,\n\t\tentries:     make(entries, 0, len(kwargs)),\n\t}\n\tfor _, kwarg := range kwargs {\n\t\tk := string(kwarg[0].(starlark.String))\n\t\tv := kwarg[1]\n\t\ts.entries = append(s.entries, entry{k, v})\n\t}\n\tsort.Sort(s.entries)\n\treturn s\n}\n\n// FromStringDict returns a new struct instance whose elements are those of d.\n// The constructor parameter specifies the constructor; use Default for an ordinary struct.\nfunc FromStringDict(constructor starlark.Value, d starlark.StringDict) *Struct {\n\tif constructor == nil {\n\t\tpanic(\"nil constructor\")\n\t}\n\ts := &Struct{\n\t\tconstructor: constructor,\n\t\tentries:     make(entries, 0, len(d)),\n\t}\n\tfor k, v := range d {\n\t\ts.entries = append(s.entries, entry{k, v})\n\t}\n\tsort.Sort(s.entries)\n\treturn s\n}\n\n// Struct is an immutable Starlark type that maps field names to values.\n// It is not iterable and does not support len.\n//\n// A struct has a constructor, a distinct value that identifies a class\n// of structs, and which appears in the struct's string representation.\n//\n// Operations such as x+y fail if the constructors of the two operands\n// are not equal.\n//\n// The default constructor, Default, is the string \"struct\", but\n// clients may wish to 'brand' structs for their own purposes.\n// The constructor value appears in the printed form of the value,\n// and is accessible using the Constructor method.\n//\n// Use Attr to access its fields and AttrNames to enumerate them.\ntype Struct struct {\n\tconstructor starlark.Value\n\tentries     entries // sorted by name\n}\n\n// Default is the default constructor for structs.\n// It is merely the string \"struct\".\nconst Default = starlark.String(\"struct\")\n\ntype entries []entry\n\nfunc (a entries) Len() int           { return len(a) }\nfunc (a entries) Less(i, j int) bool { return a[i].name < a[j].name }\nfunc (a entries) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }\n\ntype entry struct {\n\tname  string\n\tvalue starlark.Value\n}\n\nvar (\n\t_ starlark.HasAttrs  = (*Struct)(nil)\n\t_ starlark.HasBinary = (*Struct)(nil)\n)\n\n// ToStringDict adds a name/value entry to d for each field of the struct.\nfunc (s *Struct) ToStringDict(d starlark.StringDict) {\n\tfor _, e := range s.entries {\n\t\td[e.name] = e.value\n\t}\n}\n\nfunc (s *Struct) String() string {\n\tbuf := new(strings.Builder)\n\tswitch constructor := s.constructor.(type) {\n\tcase starlark.String:\n\t\t// NB: The Java implementation always prints struct\n\t\t// even for Bazel provider instances.\n\t\tbuf.WriteString(constructor.GoString()) // avoid String()'s quotation\n\tdefault:\n\t\tbuf.WriteString(s.constructor.String())\n\t}\n\tbuf.WriteByte('(')\n\tfor i, e := range s.entries {\n\t\tif i > 0 {\n\t\t\tbuf.WriteString(\", \")\n\t\t}\n\t\tbuf.WriteString(e.name)\n\t\tbuf.WriteString(\" = \")\n\t\tbuf.WriteString(e.value.String())\n\t}\n\tbuf.WriteByte(')')\n\treturn buf.String()\n}\n\n// Constructor returns the constructor used to create this struct.\nfunc (s *Struct) Constructor() starlark.Value { return s.constructor }\n\nfunc (s *Struct) Type() string         { return \"struct\" }\nfunc (s *Struct) Truth() starlark.Bool { return true } // even when empty\nfunc (s *Struct) Hash() (uint32, error) {\n\t// Same algorithm as Tuple.hash, but with different primes.\n\tvar x, m uint32 = 8731, 9839\n\tfor _, e := range s.entries {\n\t\tnamehash, _ := starlark.String(e.name).Hash()\n\t\tx = x ^ 3*namehash\n\t\ty, err := e.value.Hash()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tx = x ^ y*m\n\t\tm += 7349\n\t}\n\treturn x, nil\n}\nfunc (s *Struct) Freeze() {\n\tfor _, e := range s.entries {\n\t\te.value.Freeze()\n\t}\n}\n\nfunc (x *Struct) Binary(op syntax.Token, y starlark.Value, side starlark.Side) (starlark.Value, error) {\n\tif y, ok := y.(*Struct); ok && op == syntax.PLUS {\n\t\tif side == starlark.Right {\n\t\t\tx, y = y, x\n\t\t}\n\n\t\tif eq, err := starlark.Equal(x.constructor, y.constructor); err != nil {\n\t\t\treturn nil, fmt.Errorf(\"in %s + %s: error comparing constructors: %v\",\n\t\t\t\tx.constructor, y.constructor, err)\n\t\t} else if !eq {\n\t\t\treturn nil, fmt.Errorf(\"cannot add structs of different constructors: %s + %s\",\n\t\t\t\tx.constructor, y.constructor)\n\t\t}\n\n\t\tz := make(starlark.StringDict, x.len()+y.len())\n\t\tfor _, e := range x.entries {\n\t\t\tz[e.name] = e.value\n\t\t}\n\t\tfor _, e := range y.entries {\n\t\t\tz[e.name] = e.value\n\t\t}\n\n\t\treturn FromStringDict(x.constructor, z), nil\n\t}\n\treturn nil, nil // unhandled\n}\n\n// Attr returns the value of the specified field.\nfunc (s *Struct) Attr(name string) (starlark.Value, error) {\n\t// Binary search the entries.\n\t// This implementation is a specialization of\n\t// sort.Search that avoids dynamic dispatch.\n\tn := len(s.entries)\n\ti, j := 0, n\n\tfor i < j {\n\t\th := int(uint(i+j) >> 1)\n\t\tif s.entries[h].name < name {\n\t\t\ti = h + 1\n\t\t} else {\n\t\t\tj = h\n\t\t}\n\t}\n\tif i < n && s.entries[i].name == name {\n\t\treturn s.entries[i].value, nil\n\t}\n\n\tvar ctor string\n\tif s.constructor != Default {\n\t\tctor = s.constructor.String() + \" \"\n\t}\n\treturn nil, starlark.NoSuchAttrError(\n\t\tfmt.Sprintf(\"%sstruct has no .%s attribute\", ctor, name))\n}\n\nfunc (s *Struct) len() int { return len(s.entries) }\n\n// AttrNames returns a new sorted list of the struct fields.\nfunc (s *Struct) AttrNames() []string {\n\tnames := make([]string, len(s.entries))\n\tfor i, e := range s.entries {\n\t\tnames[i] = e.name\n\t}\n\treturn names\n}\n\nfunc (x *Struct) CompareSameType(op syntax.Token, y_ starlark.Value, depth int) (bool, error) {\n\ty := y_.(*Struct)\n\tswitch op {\n\tcase syntax.EQL:\n\t\treturn structsEqual(x, y, depth)\n\tcase syntax.NEQ:\n\t\teq, err := structsEqual(x, y, depth)\n\t\treturn !eq, err\n\tdefault:\n\t\treturn false, fmt.Errorf(\"%s %s %s not implemented\", x.Type(), op, y.Type())\n\t}\n}\n\nfunc structsEqual(x, y *Struct, depth int) (bool, error) {\n\tif x.len() != y.len() {\n\t\treturn false, nil\n\t}\n\n\tif eq, err := starlark.Equal(x.constructor, y.constructor); err != nil {\n\t\treturn false, fmt.Errorf(\"error comparing struct constructors %v and %v: %v\",\n\t\t\tx.constructor, y.constructor, err)\n\t} else if !eq {\n\t\treturn false, nil\n\t}\n\n\tfor i, n := 0, x.len(); i < n; i++ {\n\t\tif x.entries[i].name != y.entries[i].name {\n\t\t\treturn false, nil\n\t\t} else if eq, err := starlark.EqualDepth(x.entries[i].value, y.entries[i].value, depth-1); err != nil {\n\t\t\treturn false, err\n\t\t} else if !eq {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\treturn true, nil\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/syntax/grammar.txt",
    "content": "\nGrammar of Starlark\n==================\n\nFile = {Statement | newline} eof .\n\nStatement = DefStmt | IfStmt | ForStmt | WhileStmt | SimpleStmt .\n\nDefStmt = 'def' identifier '(' [Parameters [',']] ')' ':' Suite .\n\nParameters = Parameter {',' Parameter}.\n\nParameter = identifier | identifier '=' Test | '*' | '*' identifier | '**' identifier .\n\nIfStmt = 'if' Test ':' Suite {'elif' Test ':' Suite} ['else' ':' Suite] .\n\nForStmt = 'for' LoopVariables 'in' Expression ':' Suite .\n\nWhileStmt = 'while' Test ':' Suite .\n\nSuite = [newline indent {Statement} outdent] | SimpleStmt .\n\nSimpleStmt = SmallStmt {';' SmallStmt} [';'] '\\n' .\n# NOTE: '\\n' optional at EOF\n\nSmallStmt = ReturnStmt\n          | BreakStmt | ContinueStmt | PassStmt\n          | AssignStmt\n          | ExprStmt\n          | LoadStmt\n          .\n\nReturnStmt   = 'return' [Expression] .\nBreakStmt    = 'break' .\nContinueStmt = 'continue' .\nPassStmt     = 'pass' .\nAssignStmt   = Expression ('=' | '+=' | '-=' | '*=' | '/=' | '//=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=') Expression .\nExprStmt     = Expression .\n\nLoadStmt = 'load' '(' string {',' [identifier '='] string} [','] ')' .\n\nTest = LambdaExpr\n     | IfExpr\n     | PrimaryExpr\n     | UnaryExpr\n     | BinaryExpr\n     .\n\nLambdaExpr = 'lambda' [Parameters] ':' Test .\n\nIfExpr = Test 'if' Test 'else' Test .\n\nPrimaryExpr = Operand\n            | PrimaryExpr DotSuffix\n            | PrimaryExpr CallSuffix\n            | PrimaryExpr SliceSuffix\n            .\n\nOperand = identifier\n        | int | float | string\n        | ListExpr | ListComp\n        | DictExpr | DictComp\n        | '(' [Expression [',']] ')'\n        | ('-' | '+') PrimaryExpr\n        .\n\nDotSuffix   = '.' identifier .\nCallSuffix  = '(' [Arguments [',']] ')' .\nSliceSuffix = '[' [Expression] [':' Test [':' Test]] ']' .\n\nArguments = Argument {',' Argument} .\nArgument  = Test | identifier '=' Test | '*' Test | '**' Test .\n\nListExpr = '[' [Expression [',']] ']' .\nListComp = '[' Test {CompClause} ']'.\n\nDictExpr = '{' [Entries [',']] '}' .\nDictComp = '{' Entry {CompClause} '}' .\nEntries  = Entry {',' Entry} .\nEntry    = Test ':' Test .\n\nCompClause = 'for' LoopVariables 'in' Test | 'if' Test .\n\nUnaryExpr = 'not' Test .\n\nBinaryExpr = Test {Binop Test} .\n\nBinop = 'or'\n      | 'and'\n      | '==' | '!=' | '<' | '>' | '<=' | '>=' | 'in' | 'not' 'in'\n      | '|'\n      | '^'\n      | '&'\n      | '-' | '+'\n      | '*' | '%' | '/' | '//'\n      .\n\nExpression = Test {',' Test} .\n# NOTE: trailing comma permitted only when within [...] or (...).\n\nLoopVariables = PrimaryExpr {',' PrimaryExpr} .\n\n\n# Notation (similar to Go spec):\n- lowercase and 'quoted' items are lexical tokens.\n- Capitalized names denote grammar productions.\n- (...) implies grouping\n- x | y means either x or y.\n- [x] means x is optional\n- {x} means x is repeated zero or more times\n- The end of each declaration is marked with a period.\n\n# Tokens\n- spaces: newline, eof, indent, outdent.\n- identifier.\n- literals: string, int, float.\n- plus all quoted tokens such as '+=', 'return'.\n\n# Notes:\n- Ambiguity is resolved using operator precedence.\n- The grammar does not enforce the legal order of params and args,\n  nor that the first compclause must be a 'for'.\n\nTODO:\n- explain how the lexer generates indent, outdent, and newline tokens.\n- why is unary NOT separated from unary - and +?\n- the grammar is (mostly) in LL(1) style so, for example,\n  dot expressions are formed suffixes, not complete expressions,\n  which makes the spec harder to read.  Reorganize into non-LL(1) form?\n"
  },
  {
    "path": "vendor/go.starlark.net/syntax/options.go",
    "content": "// Copyright 2023 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage syntax\n\nimport _ \"unsafe\" // for linkname\n\n// FileOptions specifies various per-file options that affect static\n// aspects of an individual file such as parsing, name resolution, and\n// code generation. (Options that affect global dynamics are typically\n// controlled through [starlark.Thread].)\n//\n// The zero value of FileOptions is the default behavior.\n//\n// Many functions in this package come in two versions: the legacy\n// standalone function (such as [Parse]) uses [LegacyFileOptions],\n// whereas the more recent method (such as [Options.Parse]) honors the\n// provided options. The second form is preferred. In other packages,\n// the modern version is a standalone function with a leading\n// FileOptions parameter and the name suffix \"Options\", such as\n// [starlark.ExecFileOptions].\ntype FileOptions struct {\n\t// resolver\n\tSet               bool // allow references to the 'set' built-in function\n\tWhile             bool // allow 'while' statements\n\tTopLevelControl   bool // allow if/for/while statements at top-level\n\tGlobalReassign    bool // allow reassignment to top-level names\n\tLoadBindsGlobally bool // load creates global not file-local bindings (deprecated)\n\n\t// compiler\n\tRecursion bool // disable recursion check for functions in this file\n}\n\n// TODO(adonovan): provide a canonical flag parser for FileOptions.\n// (And use it in the testdata \"options:\" strings.)\n\n// LegacyFileOptions returns a new FileOptions containing the current\n// values of the resolver package's legacy global variables such as\n// [resolve.AllowRecursion], etc.\n// These variables may be associated with command-line flags.\nfunc LegacyFileOptions() *FileOptions {\n\treturn &FileOptions{\n\t\tSet:               resolverAllowSet,\n\t\tWhile:             resolverAllowGlobalReassign,\n\t\tTopLevelControl:   resolverAllowGlobalReassign,\n\t\tGlobalReassign:    resolverAllowGlobalReassign,\n\t\tRecursion:         resolverAllowRecursion,\n\t\tLoadBindsGlobally: resolverLoadBindsGlobally,\n\t}\n}\n\n// Access resolver (legacy) flags, if they are linked in; false otherwise.\nvar (\n\t//go:linkname resolverAllowSet go.starlark.net/resolve.AllowSet\n\tresolverAllowSet bool\n\t//go:linkname resolverAllowGlobalReassign go.starlark.net/resolve.AllowGlobalReassign\n\tresolverAllowGlobalReassign bool\n\t//go:linkname resolverAllowRecursion go.starlark.net/resolve.AllowRecursion\n\tresolverAllowRecursion bool\n\t//go:linkname resolverLoadBindsGlobally go.starlark.net/resolve.LoadBindsGlobally\n\tresolverLoadBindsGlobally bool\n)\n"
  },
  {
    "path": "vendor/go.starlark.net/syntax/parse.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage syntax\n\n// This file defines a recursive-descent parser for Starlark.\n// The LL(1) grammar of Starlark and the names of many productions follow Python 2.7.\n//\n// TODO(adonovan): use syntax.Error more systematically throughout the\n// package.  Verify that error positions are correct using the\n// chunkedfile mechanism.\n\nimport \"log\"\n\n// Enable this flag to print the token stream and log.Fatal on the first error.\nconst debug = false\n\n// A Mode value is a set of flags (or 0) that controls optional parser functionality.\ntype Mode uint\n\nconst (\n\tRetainComments Mode = 1 << iota // retain comments in AST; see Node.Comments\n)\n\n// Parse calls the Parse method of LegacyFileOptions().\n// Deprecated: relies on legacy global variables.\nfunc Parse(filename string, src interface{}, mode Mode) (f *File, err error) {\n\treturn LegacyFileOptions().Parse(filename, src, mode)\n}\n\n// Parse parses the input data and returns the corresponding parse tree.\n//\n// If src != nil, Parse parses the source from src and the filename\n// is only used when recording position information.\n// The type of the argument for the src parameter must be string,\n// []byte, io.Reader, or FilePortion.\n// If src == nil, Parse parses the file specified by filename.\nfunc (opts *FileOptions) Parse(filename string, src interface{}, mode Mode) (f *File, err error) {\n\tin, err := newScanner(filename, src, mode&RetainComments != 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp := parser{options: opts, in: in}\n\tdefer p.in.recover(&err)\n\n\tp.nextToken() // read first lookahead token\n\tf = p.parseFile()\n\tif f != nil {\n\t\tf.Path = filename\n\t}\n\tp.assignComments(f)\n\treturn f, nil\n}\n\n// ParseCompoundStmt calls the ParseCompoundStmt method of LegacyFileOptions().\n// Deprecated: relies on legacy global variables.\nfunc ParseCompoundStmt(filename string, readline func() ([]byte, error)) (f *File, err error) {\n\treturn LegacyFileOptions().ParseCompoundStmt(filename, readline)\n}\n\n// ParseCompoundStmt parses a single compound statement:\n// a blank line, a def, for, while, or if statement, or a\n// semicolon-separated list of simple statements followed\n// by a newline. These are the units on which the REPL operates.\n// ParseCompoundStmt does not consume any following input.\n// The parser calls the readline function each\n// time it needs a new line of input.\nfunc (opts *FileOptions) ParseCompoundStmt(filename string, readline func() ([]byte, error)) (f *File, err error) {\n\tin, err := newScanner(filename, readline, false)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tp := parser{options: opts, in: in}\n\tdefer p.in.recover(&err)\n\n\tp.nextToken() // read first lookahead token\n\n\tvar stmts []Stmt\n\tswitch p.tok {\n\tcase DEF, IF, FOR, WHILE:\n\t\tstmts = p.parseStmt(stmts)\n\tcase NEWLINE:\n\t\t// blank line\n\tdefault:\n\t\tstmts = p.parseSimpleStmt(stmts, false)\n\t\t// Require but don't consume newline, to avoid blocking again.\n\t\tif p.tok != NEWLINE {\n\t\t\tp.in.errorf(p.in.pos, \"invalid syntax\")\n\t\t}\n\t}\n\n\treturn &File{Options: opts, Path: filename, Stmts: stmts}, nil\n}\n\n// ParseExpr calls the ParseExpr method of LegacyFileOptions().\n// Deprecated: relies on legacy global variables.\nfunc ParseExpr(filename string, src interface{}, mode Mode) (expr Expr, err error) {\n\treturn LegacyFileOptions().ParseExpr(filename, src, mode)\n}\n\n// ParseExpr parses a Starlark expression.\n// A comma-separated list of expressions is parsed as a tuple.\n// See Parse for explanation of parameters.\nfunc (opts *FileOptions) ParseExpr(filename string, src interface{}, mode Mode) (expr Expr, err error) {\n\tin, err := newScanner(filename, src, mode&RetainComments != 0)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp := parser{options: opts, in: in}\n\tdefer p.in.recover(&err)\n\n\tp.nextToken() // read first lookahead token\n\n\t// Use parseExpr, not parseTest, to permit an unparenthesized tuple.\n\texpr = p.parseExpr(false)\n\n\t// A following newline (e.g. \"f()\\n\") appears outside any brackets,\n\t// on a non-blank line, and thus results in a NEWLINE token.\n\tif p.tok == NEWLINE {\n\t\tp.nextToken()\n\t}\n\n\tif p.tok != EOF {\n\t\tp.in.errorf(p.in.pos, \"got %#v after expression, want EOF\", p.tok)\n\t}\n\tp.assignComments(expr)\n\treturn expr, nil\n}\n\ntype parser struct {\n\toptions *FileOptions\n\tin      *scanner\n\ttok     Token\n\ttokval  tokenValue\n}\n\n// nextToken advances the scanner and returns the position of the\n// previous token.\nfunc (p *parser) nextToken() Position {\n\toldpos := p.tokval.pos\n\tp.tok = p.in.nextToken(&p.tokval)\n\t// enable to see the token stream\n\tif debug {\n\t\tlog.Printf(\"nextToken: %-20s%+v\\n\", p.tok, p.tokval.pos)\n\t}\n\treturn oldpos\n}\n\n// file_input = (NEWLINE | stmt)* EOF\nfunc (p *parser) parseFile() *File {\n\tvar stmts []Stmt\n\tfor p.tok != EOF {\n\t\tif p.tok == NEWLINE {\n\t\t\tp.nextToken()\n\t\t\tcontinue\n\t\t}\n\t\tstmts = p.parseStmt(stmts)\n\t}\n\treturn &File{Options: p.options, Stmts: stmts}\n}\n\nfunc (p *parser) parseStmt(stmts []Stmt) []Stmt {\n\tif p.tok == DEF {\n\t\treturn append(stmts, p.parseDefStmt())\n\t} else if p.tok == IF {\n\t\treturn append(stmts, p.parseIfStmt())\n\t} else if p.tok == FOR {\n\t\treturn append(stmts, p.parseForStmt())\n\t} else if p.tok == WHILE {\n\t\treturn append(stmts, p.parseWhileStmt())\n\t}\n\treturn p.parseSimpleStmt(stmts, true)\n}\n\nfunc (p *parser) parseDefStmt() Stmt {\n\tdefpos := p.nextToken() // consume DEF\n\tid := p.parseIdent()\n\tlparen := p.consume(LPAREN)\n\tparams := p.parseParams()\n\trparen := p.consume(RPAREN)\n\tp.consume(COLON)\n\tbody := p.parseSuite()\n\treturn &DefStmt{\n\t\tDef:    defpos,\n\t\tName:   id,\n\t\tLparen: lparen,\n\t\tParams: params,\n\t\tRparen: rparen,\n\t\tBody:   body,\n\t}\n}\n\nfunc (p *parser) parseIfStmt() Stmt {\n\tifpos := p.nextToken() // consume IF\n\tcond := p.parseTest()\n\tp.consume(COLON)\n\tbody := p.parseSuite()\n\tifStmt := &IfStmt{\n\t\tIf:   ifpos,\n\t\tCond: cond,\n\t\tTrue: body,\n\t}\n\ttail := ifStmt\n\tfor p.tok == ELIF {\n\t\telifpos := p.nextToken() // consume ELIF\n\t\tcond := p.parseTest()\n\t\tp.consume(COLON)\n\t\tbody := p.parseSuite()\n\t\telif := &IfStmt{\n\t\t\tIf:   elifpos,\n\t\t\tCond: cond,\n\t\t\tTrue: body,\n\t\t}\n\t\ttail.ElsePos = elifpos\n\t\ttail.False = []Stmt{elif}\n\t\ttail = elif\n\t}\n\tif p.tok == ELSE {\n\t\ttail.ElsePos = p.nextToken() // consume ELSE\n\t\tp.consume(COLON)\n\t\ttail.False = p.parseSuite()\n\t}\n\treturn ifStmt\n}\n\nfunc (p *parser) parseForStmt() Stmt {\n\tforpos := p.nextToken() // consume FOR\n\tvars := p.parseForLoopVariables()\n\tp.consume(IN)\n\tx := p.parseExpr(false)\n\tp.consume(COLON)\n\tbody := p.parseSuite()\n\treturn &ForStmt{\n\t\tFor:  forpos,\n\t\tVars: vars,\n\t\tX:    x,\n\t\tBody: body,\n\t}\n}\n\nfunc (p *parser) parseWhileStmt() Stmt {\n\twhilepos := p.nextToken() // consume WHILE\n\tcond := p.parseTest()\n\tp.consume(COLON)\n\tbody := p.parseSuite()\n\treturn &WhileStmt{\n\t\tWhile: whilepos,\n\t\tCond:  cond,\n\t\tBody:  body,\n\t}\n}\n\n// Equivalent to 'exprlist' production in Python grammar.\n//\n// loop_variables = primary_with_suffix (COMMA primary_with_suffix)* COMMA?\nfunc (p *parser) parseForLoopVariables() Expr {\n\t// Avoid parseExpr because it would consume the IN token\n\t// following x in \"for x in y: ...\".\n\tv := p.parsePrimaryWithSuffix()\n\tif p.tok != COMMA {\n\t\treturn v\n\t}\n\n\tlist := []Expr{v}\n\tfor p.tok == COMMA {\n\t\tp.nextToken()\n\t\tif terminatesExprList(p.tok) {\n\t\t\tbreak\n\t\t}\n\t\tlist = append(list, p.parsePrimaryWithSuffix())\n\t}\n\treturn &TupleExpr{List: list}\n}\n\n// simple_stmt = small_stmt (SEMI small_stmt)* SEMI? NEWLINE\n// In REPL mode, it does not consume the NEWLINE.\nfunc (p *parser) parseSimpleStmt(stmts []Stmt, consumeNL bool) []Stmt {\n\tfor {\n\t\tstmts = append(stmts, p.parseSmallStmt())\n\t\tif p.tok != SEMI {\n\t\t\tbreak\n\t\t}\n\t\tp.nextToken() // consume SEMI\n\t\tif p.tok == NEWLINE || p.tok == EOF {\n\t\t\tbreak\n\t\t}\n\t}\n\t// EOF without NEWLINE occurs in `if x: pass`, for example.\n\tif p.tok != EOF && consumeNL {\n\t\tp.consume(NEWLINE)\n\t}\n\n\treturn stmts\n}\n\n// small_stmt = RETURN expr?\n//\n//\t| PASS | BREAK | CONTINUE\n//\t| LOAD ...\n//\t| expr ('=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | '<<=' | '>>=') expr   // assign\n//\t| expr\nfunc (p *parser) parseSmallStmt() Stmt {\n\tswitch p.tok {\n\tcase RETURN:\n\t\tpos := p.nextToken() // consume RETURN\n\t\tvar result Expr\n\t\tif p.tok != EOF && p.tok != NEWLINE && p.tok != SEMI {\n\t\t\tresult = p.parseExpr(false)\n\t\t}\n\t\treturn &ReturnStmt{Return: pos, Result: result}\n\n\tcase BREAK, CONTINUE, PASS:\n\t\ttok := p.tok\n\t\tpos := p.nextToken() // consume it\n\t\treturn &BranchStmt{Token: tok, TokenPos: pos}\n\n\tcase LOAD:\n\t\treturn p.parseLoadStmt()\n\t}\n\n\t// Assignment\n\tx := p.parseExpr(false)\n\tswitch p.tok {\n\tcase EQ, PLUS_EQ, MINUS_EQ, STAR_EQ, SLASH_EQ, SLASHSLASH_EQ, PERCENT_EQ, AMP_EQ, PIPE_EQ, CIRCUMFLEX_EQ, LTLT_EQ, GTGT_EQ:\n\t\top := p.tok\n\t\tpos := p.nextToken() // consume op\n\t\trhs := p.parseExpr(false)\n\t\treturn &AssignStmt{OpPos: pos, Op: op, LHS: x, RHS: rhs}\n\t}\n\n\t// Expression statement (e.g. function call, doc string).\n\treturn &ExprStmt{X: x}\n}\n\n// stmt = LOAD '(' STRING {',' (IDENT '=')? STRING} [','] ')'\nfunc (p *parser) parseLoadStmt() *LoadStmt {\n\tloadPos := p.nextToken() // consume LOAD\n\tlparen := p.consume(LPAREN)\n\n\tif p.tok != STRING {\n\t\tp.in.errorf(p.in.pos, \"first operand of load statement must be a string literal\")\n\t}\n\tmodule := p.parsePrimary().(*Literal)\n\n\tvar from, to []*Ident\n\tfor p.tok != RPAREN && p.tok != EOF {\n\t\tp.consume(COMMA)\n\t\tif p.tok == RPAREN {\n\t\t\tbreak // allow trailing comma\n\t\t}\n\t\tswitch p.tok {\n\t\tcase STRING:\n\t\t\t// load(\"module\", \"id\")\n\t\t\t// To name is same as original.\n\t\t\tlit := p.parsePrimary().(*Literal)\n\t\t\tid := &Ident{\n\t\t\t\tNamePos: lit.TokenPos.add(`\"`),\n\t\t\t\tName:    lit.Value.(string),\n\t\t\t}\n\t\t\tto = append(to, id)\n\t\t\tfrom = append(from, id)\n\n\t\tcase IDENT:\n\t\t\t// load(\"module\", to=\"from\")\n\t\t\tid := p.parseIdent()\n\t\t\tto = append(to, id)\n\t\t\tif p.tok != EQ {\n\t\t\t\tp.in.errorf(p.in.pos, `load operand must be \"%[1]s\" or %[1]s=\"originalname\" (want '=' after %[1]s)`, id.Name)\n\t\t\t}\n\t\t\tp.consume(EQ)\n\t\t\tif p.tok != STRING {\n\t\t\t\tp.in.errorf(p.in.pos, `original name of loaded symbol must be quoted: %s=\"originalname\"`, id.Name)\n\t\t\t}\n\t\t\tlit := p.parsePrimary().(*Literal)\n\t\t\tfrom = append(from, &Ident{\n\t\t\t\tNamePos: lit.TokenPos.add(`\"`),\n\t\t\t\tName:    lit.Value.(string),\n\t\t\t})\n\n\t\tcase RPAREN:\n\t\t\tp.in.errorf(p.in.pos, \"trailing comma in load statement\")\n\n\t\tdefault:\n\t\t\tp.in.errorf(p.in.pos, `load operand must be \"name\" or localname=\"name\" (got %#v)`, p.tok)\n\t\t}\n\t}\n\trparen := p.consume(RPAREN)\n\n\tif len(to) == 0 {\n\t\tp.in.errorf(lparen, \"load statement must import at least 1 symbol\")\n\t}\n\treturn &LoadStmt{\n\t\tLoad:   loadPos,\n\t\tModule: module,\n\t\tTo:     to,\n\t\tFrom:   from,\n\t\tRparen: rparen,\n\t}\n}\n\n// suite is typically what follows a COLON (e.g. after DEF or FOR).\n// suite = simple_stmt | NEWLINE INDENT stmt+ OUTDENT\nfunc (p *parser) parseSuite() []Stmt {\n\tif p.tok == NEWLINE {\n\t\tp.nextToken() // consume NEWLINE\n\t\tp.consume(INDENT)\n\t\tvar stmts []Stmt\n\t\tfor p.tok != OUTDENT && p.tok != EOF {\n\t\t\tstmts = p.parseStmt(stmts)\n\t\t}\n\t\tp.consume(OUTDENT)\n\t\treturn stmts\n\t}\n\n\treturn p.parseSimpleStmt(nil, true)\n}\n\nfunc (p *parser) parseIdent() *Ident {\n\tif p.tok != IDENT {\n\t\tp.in.error(p.in.pos, \"not an identifier\")\n\t}\n\tid := &Ident{\n\t\tNamePos: p.tokval.pos,\n\t\tName:    p.tokval.raw,\n\t}\n\tp.nextToken()\n\treturn id\n}\n\nfunc (p *parser) consume(t Token) Position {\n\tif p.tok != t {\n\t\tp.in.errorf(p.in.pos, \"got %#v, want %#v\", p.tok, t)\n\t}\n\treturn p.nextToken()\n}\n\n// params = (param COMMA)* param COMMA?\n//\n//\t|\n//\n// param = IDENT\n//\n//\t| IDENT EQ test\n//\t| STAR\n//\t| STAR IDENT\n//\t| STARSTAR IDENT\n//\n// parseParams parses a parameter list.  The resulting expressions are of the form:\n//\n//\t*Ident                                          x\n//\t*Binary{Op: EQ, X: *Ident, Y: Expr}             x=y\n//\t*Unary{Op: STAR}                                *\n//\t*Unary{Op: STAR, X: *Ident}                     *args\n//\t*Unary{Op: STARSTAR, X: *Ident}                 **kwargs\nfunc (p *parser) parseParams() []Expr {\n\tvar params []Expr\n\tfor p.tok != RPAREN && p.tok != COLON && p.tok != EOF {\n\t\tif len(params) > 0 {\n\t\t\tp.consume(COMMA)\n\t\t}\n\t\tif p.tok == RPAREN {\n\t\t\tbreak\n\t\t}\n\n\t\t// * or *args or **kwargs\n\t\tif p.tok == STAR || p.tok == STARSTAR {\n\t\t\top := p.tok\n\t\t\tpos := p.nextToken()\n\t\t\tvar x Expr\n\t\t\tif op == STARSTAR || p.tok == IDENT {\n\t\t\t\tx = p.parseIdent()\n\t\t\t}\n\t\t\tparams = append(params, &UnaryExpr{\n\t\t\t\tOpPos: pos,\n\t\t\t\tOp:    op,\n\t\t\t\tX:     x,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\t// IDENT\n\t\t// IDENT = test\n\t\tid := p.parseIdent()\n\t\tif p.tok == EQ { // default value\n\t\t\teq := p.nextToken()\n\t\t\tdflt := p.parseTest()\n\t\t\tparams = append(params, &BinaryExpr{\n\t\t\t\tX:     id,\n\t\t\t\tOpPos: eq,\n\t\t\t\tOp:    EQ,\n\t\t\t\tY:     dflt,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\tparams = append(params, id)\n\t}\n\treturn params\n}\n\n// parseExpr parses an expression, possible consisting of a\n// comma-separated list of 'test' expressions.\n//\n// In many cases we must use parseTest to avoid ambiguity such as\n// f(x, y) vs. f((x, y)).\nfunc (p *parser) parseExpr(inParens bool) Expr {\n\tx := p.parseTest()\n\tif p.tok != COMMA {\n\t\treturn x\n\t}\n\n\t// tuple\n\texprs := p.parseExprs([]Expr{x}, inParens)\n\treturn &TupleExpr{List: exprs}\n}\n\n// parseExprs parses a comma-separated list of expressions, starting with the comma.\n// It is used to parse tuples and list elements.\n// expr_list = (',' expr)* ','?\nfunc (p *parser) parseExprs(exprs []Expr, allowTrailingComma bool) []Expr {\n\tfor p.tok == COMMA {\n\t\tpos := p.nextToken()\n\t\tif terminatesExprList(p.tok) {\n\t\t\tif !allowTrailingComma {\n\t\t\t\tp.in.error(pos, \"unparenthesized tuple with trailing comma\")\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\texprs = append(exprs, p.parseTest())\n\t}\n\treturn exprs\n}\n\n// parseTest parses a 'test', a single-component expression.\nfunc (p *parser) parseTest() Expr {\n\tif p.tok == LAMBDA {\n\t\treturn p.parseLambda(true)\n\t}\n\n\tx := p.parseTestPrec(0)\n\n\t// conditional expression (t IF cond ELSE f)\n\tif p.tok == IF {\n\t\tifpos := p.nextToken()\n\t\tcond := p.parseTestPrec(0)\n\t\tif p.tok != ELSE {\n\t\t\tp.in.error(ifpos, \"conditional expression without else clause\")\n\t\t}\n\t\telsepos := p.nextToken()\n\t\telse_ := p.parseTest()\n\t\treturn &CondExpr{If: ifpos, Cond: cond, True: x, ElsePos: elsepos, False: else_}\n\t}\n\n\treturn x\n}\n\n// parseTestNoCond parses a a single-component expression without\n// consuming a trailing 'if expr else expr'.\nfunc (p *parser) parseTestNoCond() Expr {\n\tif p.tok == LAMBDA {\n\t\treturn p.parseLambda(false)\n\t}\n\treturn p.parseTestPrec(0)\n}\n\n// parseLambda parses a lambda expression.\n// The allowCond flag allows the body to be an 'a if b else c' conditional.\nfunc (p *parser) parseLambda(allowCond bool) Expr {\n\tlambda := p.nextToken()\n\tvar params []Expr\n\tif p.tok != COLON {\n\t\tparams = p.parseParams()\n\t}\n\tp.consume(COLON)\n\n\tvar body Expr\n\tif allowCond {\n\t\tbody = p.parseTest()\n\t} else {\n\t\tbody = p.parseTestNoCond()\n\t}\n\n\treturn &LambdaExpr{\n\t\tLambda: lambda,\n\t\tParams: params,\n\t\tBody:   body,\n\t}\n}\n\nfunc (p *parser) parseTestPrec(prec int) Expr {\n\tif prec >= len(preclevels) {\n\t\treturn p.parsePrimaryWithSuffix()\n\t}\n\n\t// expr = NOT expr\n\tif p.tok == NOT && prec == int(precedence[NOT]) {\n\t\tpos := p.nextToken()\n\t\tx := p.parseTestPrec(prec)\n\t\treturn &UnaryExpr{\n\t\t\tOpPos: pos,\n\t\t\tOp:    NOT,\n\t\t\tX:     x,\n\t\t}\n\t}\n\n\treturn p.parseBinopExpr(prec)\n}\n\n// expr = test (OP test)*\n// Uses precedence climbing; see http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing.\nfunc (p *parser) parseBinopExpr(prec int) Expr {\n\tx := p.parseTestPrec(prec + 1)\n\tfor first := true; ; first = false {\n\t\tif p.tok == NOT {\n\t\t\tp.nextToken() // consume NOT\n\t\t\t// In this context, NOT must be followed by IN.\n\t\t\t// Replace NOT IN by a single NOT_IN token.\n\t\t\tif p.tok != IN {\n\t\t\t\tp.in.errorf(p.in.pos, \"got %#v, want in\", p.tok)\n\t\t\t}\n\t\t\tp.tok = NOT_IN\n\t\t}\n\n\t\t// Binary operator of specified precedence?\n\t\topprec := int(precedence[p.tok])\n\t\tif opprec < prec {\n\t\t\treturn x\n\t\t}\n\n\t\t// Comparisons are non-associative.\n\t\tif !first && opprec == int(precedence[EQL]) {\n\t\t\tp.in.errorf(p.in.pos, \"%s does not associate with %s (use parens)\",\n\t\t\t\tx.(*BinaryExpr).Op, p.tok)\n\t\t}\n\n\t\top := p.tok\n\t\tpos := p.nextToken()\n\t\ty := p.parseTestPrec(opprec + 1)\n\t\tx = &BinaryExpr{OpPos: pos, Op: op, X: x, Y: y}\n\t}\n}\n\n// precedence maps each operator to its precedence (0-7), or -1 for other tokens.\nvar precedence [maxToken]int8\n\n// preclevels groups operators of equal precedence.\n// Comparisons are nonassociative; other binary operators associate to the left.\n// Unary MINUS, unary PLUS, and TILDE have higher precedence so are handled in parsePrimary.\n// See https://github.com/google/starlark-go/blob/master/doc/spec.md#binary-operators\nvar preclevels = [...][]Token{\n\t{OR},                                   // or\n\t{AND},                                  // and\n\t{NOT},                                  // not (unary)\n\t{EQL, NEQ, LT, GT, LE, GE, IN, NOT_IN}, // == != < > <= >= in not in\n\t{PIPE},                                 // |\n\t{CIRCUMFLEX},                           // ^\n\t{AMP},                                  // &\n\t{LTLT, GTGT},                           // << >>\n\t{MINUS, PLUS},                          // -\n\t{STAR, PERCENT, SLASH, SLASHSLASH},     // * % / //\n}\n\nfunc init() {\n\t// populate precedence table\n\tfor i := range precedence {\n\t\tprecedence[i] = -1\n\t}\n\tfor level, tokens := range preclevels {\n\t\tfor _, tok := range tokens {\n\t\t\tprecedence[tok] = int8(level)\n\t\t}\n\t}\n}\n\n// primary_with_suffix = primary\n//\n//\t| primary '.' IDENT\n//\t| primary slice_suffix\n//\t| primary call_suffix\nfunc (p *parser) parsePrimaryWithSuffix() Expr {\n\tx := p.parsePrimary()\n\tfor {\n\t\tswitch p.tok {\n\t\tcase DOT:\n\t\t\tdot := p.nextToken()\n\t\t\tid := p.parseIdent()\n\t\t\tx = &DotExpr{Dot: dot, X: x, Name: id}\n\t\tcase LBRACK:\n\t\t\tx = p.parseSliceSuffix(x)\n\t\tcase LPAREN:\n\t\t\tx = p.parseCallSuffix(x)\n\t\tdefault:\n\t\t\treturn x\n\t\t}\n\t}\n}\n\n// slice_suffix = '[' expr? ':' expr?  ':' expr? ']'\nfunc (p *parser) parseSliceSuffix(x Expr) Expr {\n\tlbrack := p.nextToken()\n\tvar lo, hi, step Expr\n\tif p.tok != COLON {\n\t\ty := p.parseExpr(false)\n\n\t\t// index x[y]\n\t\tif p.tok == RBRACK {\n\t\t\trbrack := p.nextToken()\n\t\t\treturn &IndexExpr{X: x, Lbrack: lbrack, Y: y, Rbrack: rbrack}\n\t\t}\n\n\t\tlo = y\n\t}\n\n\t// slice or substring x[lo:hi:step]\n\tif p.tok == COLON {\n\t\tp.nextToken()\n\t\tif p.tok != COLON && p.tok != RBRACK {\n\t\t\thi = p.parseTest()\n\t\t}\n\t}\n\tif p.tok == COLON {\n\t\tp.nextToken()\n\t\tif p.tok != RBRACK {\n\t\t\tstep = p.parseTest()\n\t\t}\n\t}\n\trbrack := p.consume(RBRACK)\n\treturn &SliceExpr{X: x, Lbrack: lbrack, Lo: lo, Hi: hi, Step: step, Rbrack: rbrack}\n}\n\n// call_suffix = '(' arg_list? ')'\nfunc (p *parser) parseCallSuffix(fn Expr) Expr {\n\tlparen := p.consume(LPAREN)\n\tvar rparen Position\n\tvar args []Expr\n\tif p.tok == RPAREN {\n\t\trparen = p.nextToken()\n\t} else {\n\t\targs = p.parseArgs()\n\t\trparen = p.consume(RPAREN)\n\t}\n\treturn &CallExpr{Fn: fn, Lparen: lparen, Args: args, Rparen: rparen}\n}\n\n// parseArgs parses a list of actual parameter values (arguments).\n// It mirrors the structure of parseParams.\n// arg_list = ((arg COMMA)* arg COMMA?)?\nfunc (p *parser) parseArgs() []Expr {\n\tvar args []Expr\n\tfor p.tok != RPAREN && p.tok != EOF {\n\t\tif len(args) > 0 {\n\t\t\tp.consume(COMMA)\n\t\t}\n\t\tif p.tok == RPAREN {\n\t\t\tbreak\n\t\t}\n\n\t\t// *args or **kwargs\n\t\tif p.tok == STAR || p.tok == STARSTAR {\n\t\t\top := p.tok\n\t\t\tpos := p.nextToken()\n\t\t\tx := p.parseTest()\n\t\t\targs = append(args, &UnaryExpr{\n\t\t\t\tOpPos: pos,\n\t\t\t\tOp:    op,\n\t\t\t\tX:     x,\n\t\t\t})\n\t\t\tcontinue\n\t\t}\n\n\t\t// We use a different strategy from Bazel here to stay within LL(1).\n\t\t// Instead of looking ahead two tokens (IDENT, EQ) we parse\n\t\t// 'test = test' then check that the first was an IDENT.\n\t\tx := p.parseTest()\n\n\t\tif p.tok == EQ {\n\t\t\t// name = value\n\t\t\tif _, ok := x.(*Ident); !ok {\n\t\t\t\tp.in.errorf(p.in.pos, \"keyword argument must have form name=expr\")\n\t\t\t}\n\t\t\teq := p.nextToken()\n\t\t\ty := p.parseTest()\n\t\t\tx = &BinaryExpr{\n\t\t\t\tX:     x,\n\t\t\t\tOpPos: eq,\n\t\t\t\tOp:    EQ,\n\t\t\t\tY:     y,\n\t\t\t}\n\t\t}\n\n\t\targs = append(args, x)\n\t}\n\treturn args\n}\n\n// primary = IDENT\n//\n//\t| INT | FLOAT | STRING | BYTES\n//\t| '[' ...                    // list literal or comprehension\n//\t| '{' ...                    // dict literal or comprehension\n//\t| '(' ...                    // tuple or parenthesized expression\n//\t| ('-'|'+'|'~') primary_with_suffix\nfunc (p *parser) parsePrimary() Expr {\n\tswitch p.tok {\n\tcase IDENT:\n\t\treturn p.parseIdent()\n\n\tcase INT, FLOAT, STRING, BYTES:\n\t\tvar val interface{}\n\t\ttok := p.tok\n\t\tswitch tok {\n\t\tcase INT:\n\t\t\tif p.tokval.bigInt != nil {\n\t\t\t\tval = p.tokval.bigInt\n\t\t\t} else {\n\t\t\t\tval = p.tokval.int\n\t\t\t}\n\t\tcase FLOAT:\n\t\t\tval = p.tokval.float\n\t\tcase STRING, BYTES:\n\t\t\tval = p.tokval.string\n\t\t}\n\t\traw := p.tokval.raw\n\t\tpos := p.nextToken()\n\t\treturn &Literal{Token: tok, TokenPos: pos, Raw: raw, Value: val}\n\n\tcase LBRACK:\n\t\treturn p.parseList()\n\n\tcase LBRACE:\n\t\treturn p.parseDict()\n\n\tcase LPAREN:\n\t\tlparen := p.nextToken()\n\t\tif p.tok == RPAREN {\n\t\t\t// empty tuple\n\t\t\trparen := p.nextToken()\n\t\t\treturn &TupleExpr{Lparen: lparen, Rparen: rparen}\n\t\t}\n\t\te := p.parseExpr(true) // allow trailing comma\n\t\trparen := p.consume(RPAREN)\n\t\treturn &ParenExpr{\n\t\t\tLparen: lparen,\n\t\t\tX:      e,\n\t\t\tRparen: rparen,\n\t\t}\n\n\tcase MINUS, PLUS, TILDE: // unary\n\t\ttok := p.tok\n\t\tpos := p.nextToken()\n\t\tx := p.parsePrimaryWithSuffix()\n\t\treturn &UnaryExpr{\n\t\t\tOpPos: pos,\n\t\t\tOp:    tok,\n\t\t\tX:     x,\n\t\t}\n\t}\n\tp.in.errorf(p.in.pos, \"got %#v, want primary expression\", p.tok)\n\tpanic(\"unreachable\")\n}\n\n// list = '[' ']'\n//\n//\t| '[' expr ']'\n//\t| '[' expr expr_list ']'\n//\t| '[' expr (FOR loop_variables IN expr)+ ']'\nfunc (p *parser) parseList() Expr {\n\tlbrack := p.nextToken()\n\tif p.tok == RBRACK {\n\t\t// empty List\n\t\trbrack := p.nextToken()\n\t\treturn &ListExpr{Lbrack: lbrack, Rbrack: rbrack}\n\t}\n\n\tx := p.parseTest()\n\n\tif p.tok == FOR {\n\t\t// list comprehension\n\t\treturn p.parseComprehensionSuffix(lbrack, x, RBRACK)\n\t}\n\n\texprs := []Expr{x}\n\tif p.tok == COMMA {\n\t\t// multi-item list literal\n\t\texprs = p.parseExprs(exprs, true) // allow trailing comma\n\t}\n\n\trbrack := p.consume(RBRACK)\n\treturn &ListExpr{Lbrack: lbrack, List: exprs, Rbrack: rbrack}\n}\n\n// dict = '{' '}'\n//\n//\t| '{' dict_entry_list '}'\n//\t| '{' dict_entry FOR loop_variables IN expr '}'\nfunc (p *parser) parseDict() Expr {\n\tlbrace := p.nextToken()\n\tif p.tok == RBRACE {\n\t\t// empty dict\n\t\trbrace := p.nextToken()\n\t\treturn &DictExpr{Lbrace: lbrace, Rbrace: rbrace}\n\t}\n\n\tx := p.parseDictEntry()\n\n\tif p.tok == FOR {\n\t\t// dict comprehension\n\t\treturn p.parseComprehensionSuffix(lbrace, x, RBRACE)\n\t}\n\n\tentries := []Expr{x}\n\tfor p.tok == COMMA {\n\t\tp.nextToken()\n\t\tif p.tok == RBRACE {\n\t\t\tbreak\n\t\t}\n\t\tentries = append(entries, p.parseDictEntry())\n\t}\n\n\trbrace := p.consume(RBRACE)\n\treturn &DictExpr{Lbrace: lbrace, List: entries, Rbrace: rbrace}\n}\n\n// dict_entry = test ':' test\nfunc (p *parser) parseDictEntry() *DictEntry {\n\tk := p.parseTest()\n\tcolon := p.consume(COLON)\n\tv := p.parseTest()\n\treturn &DictEntry{Key: k, Colon: colon, Value: v}\n}\n\n// comp_suffix = FOR loopvars IN expr comp_suffix\n//\n//\t| IF expr comp_suffix\n//\t| ']'  or  ')'                              (end)\n//\n// There can be multiple FOR/IF clauses; the first is always a FOR.\nfunc (p *parser) parseComprehensionSuffix(lbrace Position, body Expr, endBrace Token) Expr {\n\tvar clauses []Node\n\tfor p.tok != endBrace {\n\t\tif p.tok == FOR {\n\t\t\tpos := p.nextToken()\n\t\t\tvars := p.parseForLoopVariables()\n\t\t\tin := p.consume(IN)\n\t\t\t// Following Python 3, the operand of IN cannot be:\n\t\t\t// - a conditional expression ('x if y else z'),\n\t\t\t//   due to conflicts in Python grammar\n\t\t\t//  ('if' is used by the comprehension);\n\t\t\t// - a lambda expression\n\t\t\t// - an unparenthesized tuple.\n\t\t\tx := p.parseTestPrec(0)\n\t\t\tclauses = append(clauses, &ForClause{For: pos, Vars: vars, In: in, X: x})\n\t\t} else if p.tok == IF {\n\t\t\tpos := p.nextToken()\n\t\t\tcond := p.parseTestNoCond()\n\t\t\tclauses = append(clauses, &IfClause{If: pos, Cond: cond})\n\t\t} else {\n\t\t\tp.in.errorf(p.in.pos, \"got %#v, want '%s', for, or if\", p.tok, endBrace)\n\t\t}\n\t}\n\trbrace := p.nextToken()\n\n\treturn &Comprehension{\n\t\tCurly:   endBrace == RBRACE,\n\t\tLbrack:  lbrace,\n\t\tBody:    body,\n\t\tClauses: clauses,\n\t\tRbrack:  rbrace,\n\t}\n}\n\nfunc terminatesExprList(tok Token) bool {\n\tswitch tok {\n\tcase EOF, NEWLINE, EQ, RBRACE, RBRACK, RPAREN, SEMI:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// Comment assignment.\n// We build two lists of all subnodes, preorder and postorder.\n// The preorder list is ordered by start location, with outer nodes first.\n// The postorder list is ordered by end location, with outer nodes last.\n// We use the preorder list to assign each whole-line comment to the syntax\n// immediately following it, and we use the postorder list to assign each\n// end-of-line comment to the syntax immediately preceding it.\n\n// flattenAST returns the list of AST nodes, both in prefix order and in postfix\n// order.\nfunc flattenAST(root Node) (pre, post []Node) {\n\tstack := []Node{}\n\tWalk(root, func(n Node) bool {\n\t\tif n != nil {\n\t\t\tpre = append(pre, n)\n\t\t\tstack = append(stack, n)\n\t\t} else {\n\t\t\tpost = append(post, stack[len(stack)-1])\n\t\t\tstack = stack[:len(stack)-1]\n\t\t}\n\t\treturn true\n\t})\n\treturn pre, post\n}\n\n// assignComments attaches comments to nearby syntax.\nfunc (p *parser) assignComments(n Node) {\n\t// Leave early if there are no comments\n\tif len(p.in.lineComments)+len(p.in.suffixComments) == 0 {\n\t\treturn\n\t}\n\n\tpre, post := flattenAST(n)\n\n\t// Assign line comments to syntax immediately following.\n\tline := p.in.lineComments\n\tfor _, x := range pre {\n\t\tstart, _ := x.Span()\n\n\t\tswitch x.(type) {\n\t\tcase *File:\n\t\t\tcontinue\n\t\t}\n\n\t\tfor len(line) > 0 && !start.isBefore(line[0].Start) {\n\t\t\tx.AllocComments()\n\t\t\tx.Comments().Before = append(x.Comments().Before, line[0])\n\t\t\tline = line[1:]\n\t\t}\n\t}\n\n\t// Remaining line comments go at end of file.\n\tif len(line) > 0 {\n\t\tn.AllocComments()\n\t\tn.Comments().After = append(n.Comments().After, line...)\n\t}\n\n\t// Assign suffix comments to syntax immediately before.\n\tsuffix := p.in.suffixComments\n\tfor i := len(post) - 1; i >= 0; i-- {\n\t\tx := post[i]\n\n\t\t// Do not assign suffix comments to file\n\t\tswitch x.(type) {\n\t\tcase *File:\n\t\t\tcontinue\n\t\t}\n\n\t\t_, end := x.Span()\n\t\tif len(suffix) > 0 && end.isBefore(suffix[len(suffix)-1].Start) {\n\t\t\tx.AllocComments()\n\t\t\tx.Comments().Suffix = append(x.Comments().Suffix, suffix[len(suffix)-1])\n\t\t\tsuffix = suffix[:len(suffix)-1]\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/syntax/quote.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage syntax\n\n// Starlark quoted string utilities.\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// unesc maps single-letter chars following \\ to their actual values.\nvar unesc = [256]byte{\n\t'a':  '\\a',\n\t'b':  '\\b',\n\t'f':  '\\f',\n\t'n':  '\\n',\n\t'r':  '\\r',\n\t't':  '\\t',\n\t'v':  '\\v',\n\t'\\\\': '\\\\',\n\t'\\'': '\\'',\n\t'\"':  '\"',\n}\n\n// esc maps escape-worthy bytes to the char that should follow \\.\nvar esc = [256]byte{\n\t'\\a': 'a',\n\t'\\b': 'b',\n\t'\\f': 'f',\n\t'\\n': 'n',\n\t'\\r': 'r',\n\t'\\t': 't',\n\t'\\v': 'v',\n\t'\\\\': '\\\\',\n\t'\\'': '\\'',\n\t'\"':  '\"',\n}\n\n// unquote unquotes the quoted string, returning the actual\n// string value, whether the original was triple-quoted,\n// whether it was a byte string, and an error describing invalid input.\nfunc unquote(quoted string) (s string, triple, isByte bool, err error) {\n\t// Check for raw prefix: means don't interpret the inner \\.\n\traw := false\n\tif strings.HasPrefix(quoted, \"r\") {\n\t\traw = true\n\t\tquoted = quoted[1:]\n\t}\n\t// Check for bytes prefix.\n\tif strings.HasPrefix(quoted, \"b\") {\n\t\tisByte = true\n\t\tquoted = quoted[1:]\n\t}\n\n\tif len(quoted) < 2 {\n\t\terr = fmt.Errorf(\"string literal too short\")\n\t\treturn\n\t}\n\n\tif quoted[0] != '\"' && quoted[0] != '\\'' || quoted[0] != quoted[len(quoted)-1] {\n\t\terr = fmt.Errorf(\"string literal has invalid quotes\")\n\t\treturn\n\t}\n\n\t// Check for triple quoted string.\n\tquote := quoted[0]\n\tif len(quoted) >= 6 && quoted[1] == quote && quoted[2] == quote && quoted[:3] == quoted[len(quoted)-3:] {\n\t\ttriple = true\n\t\tquoted = quoted[3 : len(quoted)-3]\n\t} else {\n\t\tquoted = quoted[1 : len(quoted)-1]\n\t}\n\n\t// Now quoted is the quoted data, but no quotes.\n\t// If we're in raw mode or there are no escapes or\n\t// carriage returns, we're done.\n\tvar unquoteChars string\n\tif raw {\n\t\tunquoteChars = \"\\r\"\n\t} else {\n\t\tunquoteChars = \"\\\\\\r\"\n\t}\n\tif !strings.ContainsAny(quoted, unquoteChars) {\n\t\ts = quoted\n\t\treturn\n\t}\n\n\t// Otherwise process quoted string.\n\t// Each iteration processes one escape sequence along with the\n\t// plain text leading up to it.\n\tbuf := new(strings.Builder)\n\tfor {\n\t\t// Remove prefix before escape sequence.\n\t\ti := strings.IndexAny(quoted, unquoteChars)\n\t\tif i < 0 {\n\t\t\ti = len(quoted)\n\t\t}\n\t\tbuf.WriteString(quoted[:i])\n\t\tquoted = quoted[i:]\n\n\t\tif len(quoted) == 0 {\n\t\t\tbreak\n\t\t}\n\n\t\t// Process carriage return.\n\t\tif quoted[0] == '\\r' {\n\t\t\tbuf.WriteByte('\\n')\n\t\t\tif len(quoted) > 1 && quoted[1] == '\\n' {\n\t\t\t\tquoted = quoted[2:]\n\t\t\t} else {\n\t\t\t\tquoted = quoted[1:]\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t// Process escape sequence.\n\t\tif len(quoted) == 1 {\n\t\t\terr = fmt.Errorf(`truncated escape sequence \\`)\n\t\t\treturn\n\t\t}\n\n\t\tswitch quoted[1] {\n\t\tdefault:\n\t\t\t// In Starlark, like Go, a backslash must escape something.\n\t\t\t// (Python still treats unnecessary backslashes literally,\n\t\t\t// but since 3.6 has emitted a deprecation warning.)\n\t\t\terr = fmt.Errorf(\"invalid escape sequence \\\\%c\", quoted[1])\n\t\t\treturn\n\n\t\tcase '\\n':\n\t\t\t// Ignore the escape and the line break.\n\t\t\tquoted = quoted[2:]\n\n\t\tcase 'a', 'b', 'f', 'n', 'r', 't', 'v', '\\\\', '\\'', '\"':\n\t\t\t// One-char escape.\n\t\t\t// Escapes are allowed for both kinds of quotation\n\t\t\t// mark, not just the kind in use.\n\t\t\tbuf.WriteByte(unesc[quoted[1]])\n\t\t\tquoted = quoted[2:]\n\n\t\tcase '0', '1', '2', '3', '4', '5', '6', '7':\n\t\t\t// Octal escape, up to 3 digits, \\OOO.\n\t\t\tn := int(quoted[1] - '0')\n\t\t\tquoted = quoted[2:]\n\t\t\tfor i := 1; i < 3; i++ {\n\t\t\t\tif len(quoted) == 0 || quoted[0] < '0' || '7' < quoted[0] {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tn = n*8 + int(quoted[0]-'0')\n\t\t\t\tquoted = quoted[1:]\n\t\t\t}\n\t\t\tif !isByte && n > 127 {\n\t\t\t\terr = fmt.Errorf(`non-ASCII octal escape \\%o (use \\u%04X for the UTF-8 encoding of U+%04X)`, n, n, n)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif n >= 256 {\n\t\t\t\t// NOTE: Python silently discards the high bit,\n\t\t\t\t// so that '\\541' == '\\141' == 'a'.\n\t\t\t\t// Let's see if we can avoid doing that in BUILD files.\n\t\t\t\terr = fmt.Errorf(`invalid escape sequence \\%03o`, n)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tbuf.WriteByte(byte(n))\n\n\t\tcase 'x':\n\t\t\t// Hexadecimal escape, exactly 2 digits, \\xXX. [0-127]\n\t\t\tif len(quoted) < 4 {\n\t\t\t\terr = fmt.Errorf(`truncated escape sequence %s`, quoted)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tn, err1 := strconv.ParseUint(quoted[2:4], 16, 0)\n\t\t\tif err1 != nil {\n\t\t\t\terr = fmt.Errorf(`invalid escape sequence %s`, quoted[:4])\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif !isByte && n > 127 {\n\t\t\t\terr = fmt.Errorf(`non-ASCII hex escape %s (use \\u%04X for the UTF-8 encoding of U+%04X)`,\n\t\t\t\t\tquoted[:4], n, n)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tbuf.WriteByte(byte(n))\n\t\t\tquoted = quoted[4:]\n\n\t\tcase 'u', 'U':\n\t\t\t// Unicode code point, 4 (\\uXXXX) or 8 (\\UXXXXXXXX) hex digits.\n\t\t\tsz := 6\n\t\t\tif quoted[1] == 'U' {\n\t\t\t\tsz = 10\n\t\t\t}\n\t\t\tif len(quoted) < sz {\n\t\t\t\terr = fmt.Errorf(`truncated escape sequence %s`, quoted)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tn, err1 := strconv.ParseUint(quoted[2:sz], 16, 0)\n\t\t\tif err1 != nil {\n\t\t\t\terr = fmt.Errorf(`invalid escape sequence %s`, quoted[:sz])\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif n > unicode.MaxRune {\n\t\t\t\terr = fmt.Errorf(`code point out of range: %s (max \\U%08x)`,\n\t\t\t\t\tquoted[:sz], n)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// As in Go, surrogates are disallowed.\n\t\t\tif 0xD800 <= n && n < 0xE000 {\n\t\t\t\terr = fmt.Errorf(`invalid Unicode code point U+%04X`, n)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tbuf.WriteRune(rune(n))\n\t\t\tquoted = quoted[sz:]\n\t\t}\n\t}\n\n\ts = buf.String()\n\treturn\n}\n\n// indexByte returns the index of the first instance of b in s, or else -1.\nfunc indexByte(s string, b byte) int {\n\tfor i := 0; i < len(s); i++ {\n\t\tif s[i] == b {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// Quote returns a Starlark literal that denotes s.\n// If b, it returns a bytes literal.\nfunc Quote(s string, b bool) string {\n\tconst hex = \"0123456789abcdef\"\n\tvar runeTmp [utf8.UTFMax]byte\n\n\tbuf := make([]byte, 0, 3*len(s)/2)\n\tif b {\n\t\tbuf = append(buf, 'b')\n\t}\n\tbuf = append(buf, '\"')\n\tfor width := 0; len(s) > 0; s = s[width:] {\n\t\tr := rune(s[0])\n\t\twidth = 1\n\t\tif r >= utf8.RuneSelf {\n\t\t\tr, width = utf8.DecodeRuneInString(s)\n\t\t}\n\t\tif width == 1 && r == utf8.RuneError {\n\t\t\t// String (!b) literals accept \\xXX escapes only for ASCII,\n\t\t\t// but we must use them here to represent invalid bytes.\n\t\t\t// The result is not a legal literal.\n\t\t\tbuf = append(buf, `\\x`...)\n\t\t\tbuf = append(buf, hex[s[0]>>4])\n\t\t\tbuf = append(buf, hex[s[0]&0xF])\n\t\t\tcontinue\n\t\t}\n\t\tif r == '\"' || r == '\\\\' { // always backslashed\n\t\t\tbuf = append(buf, '\\\\')\n\t\t\tbuf = append(buf, byte(r))\n\t\t\tcontinue\n\t\t}\n\t\tif strconv.IsPrint(r) {\n\t\t\tn := utf8.EncodeRune(runeTmp[:], r)\n\t\t\tbuf = append(buf, runeTmp[:n]...)\n\t\t\tcontinue\n\t\t}\n\t\tswitch r {\n\t\tcase '\\a':\n\t\t\tbuf = append(buf, `\\a`...)\n\t\tcase '\\b':\n\t\t\tbuf = append(buf, `\\b`...)\n\t\tcase '\\f':\n\t\t\tbuf = append(buf, `\\f`...)\n\t\tcase '\\n':\n\t\t\tbuf = append(buf, `\\n`...)\n\t\tcase '\\r':\n\t\t\tbuf = append(buf, `\\r`...)\n\t\tcase '\\t':\n\t\t\tbuf = append(buf, `\\t`...)\n\t\tcase '\\v':\n\t\t\tbuf = append(buf, `\\v`...)\n\t\tdefault:\n\t\t\tswitch {\n\t\t\tcase r < ' ' || r == 0x7f:\n\t\t\t\tbuf = append(buf, `\\x`...)\n\t\t\t\tbuf = append(buf, hex[byte(r)>>4])\n\t\t\t\tbuf = append(buf, hex[byte(r)&0xF])\n\t\t\tcase r > utf8.MaxRune:\n\t\t\t\tr = 0xFFFD\n\t\t\t\tfallthrough\n\t\t\tcase r < 0x10000:\n\t\t\t\tbuf = append(buf, `\\u`...)\n\t\t\t\tfor s := 12; s >= 0; s -= 4 {\n\t\t\t\t\tbuf = append(buf, hex[r>>uint(s)&0xF])\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tbuf = append(buf, `\\U`...)\n\t\t\t\tfor s := 28; s >= 0; s -= 4 {\n\t\t\t\t\tbuf = append(buf, hex[r>>uint(s)&0xF])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tbuf = append(buf, '\"')\n\treturn string(buf)\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/syntax/scan.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage syntax\n\n// A lexical scanner for Starlark.\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"log\"\n\t\"math/big\"\n\t\"os\"\n\t\"strconv\"\n\t\"strings\"\n\t\"unicode\"\n\t\"unicode/utf8\"\n)\n\n// A Token represents a Starlark lexical token.\ntype Token int8\n\nconst (\n\tILLEGAL Token = iota\n\tEOF\n\n\tNEWLINE\n\tINDENT\n\tOUTDENT\n\n\t// Tokens with values\n\tIDENT  // x\n\tINT    // 123\n\tFLOAT  // 1.23e45\n\tSTRING // \"foo\" or 'foo' or '''foo''' or r'foo' or r\"foo\"\n\tBYTES  // b\"foo\", etc\n\n\t// Punctuation\n\tPLUS          // +\n\tMINUS         // -\n\tSTAR          // *\n\tSLASH         // /\n\tSLASHSLASH    // //\n\tPERCENT       // %\n\tAMP           // &\n\tPIPE          // |\n\tCIRCUMFLEX    // ^\n\tLTLT          // <<\n\tGTGT          // >>\n\tTILDE         // ~\n\tDOT           // .\n\tCOMMA         // ,\n\tEQ            // =\n\tSEMI          // ;\n\tCOLON         // :\n\tLPAREN        // (\n\tRPAREN        // )\n\tLBRACK        // [\n\tRBRACK        // ]\n\tLBRACE        // {\n\tRBRACE        // }\n\tLT            // <\n\tGT            // >\n\tGE            // >=\n\tLE            // <=\n\tEQL           // ==\n\tNEQ           // !=\n\tPLUS_EQ       // +=    (keep order consistent with PLUS..GTGT)\n\tMINUS_EQ      // -=\n\tSTAR_EQ       // *=\n\tSLASH_EQ      // /=\n\tSLASHSLASH_EQ // //=\n\tPERCENT_EQ    // %=\n\tAMP_EQ        // &=\n\tPIPE_EQ       // |=\n\tCIRCUMFLEX_EQ // ^=\n\tLTLT_EQ       // <<=\n\tGTGT_EQ       // >>=\n\tSTARSTAR      // **\n\n\t// Keywords\n\tAND\n\tBREAK\n\tCONTINUE\n\tDEF\n\tELIF\n\tELSE\n\tFOR\n\tIF\n\tIN\n\tLAMBDA\n\tLOAD\n\tNOT\n\tNOT_IN // synthesized by parser from NOT IN\n\tOR\n\tPASS\n\tRETURN\n\tWHILE\n\n\tmaxToken\n)\n\nfunc (tok Token) String() string { return tokenNames[tok] }\n\n// GoString is like String but quotes punctuation tokens.\n// Use Sprintf(\"%#v\", tok) when constructing error messages.\nfunc (tok Token) GoString() string {\n\tif tok >= PLUS && tok <= STARSTAR {\n\t\treturn \"'\" + tokenNames[tok] + \"'\"\n\t}\n\treturn tokenNames[tok]\n}\n\nvar tokenNames = [...]string{\n\tILLEGAL:       \"illegal token\",\n\tEOF:           \"end of file\",\n\tNEWLINE:       \"newline\",\n\tINDENT:        \"indent\",\n\tOUTDENT:       \"outdent\",\n\tIDENT:         \"identifier\",\n\tINT:           \"int literal\",\n\tFLOAT:         \"float literal\",\n\tSTRING:        \"string literal\",\n\tPLUS:          \"+\",\n\tMINUS:         \"-\",\n\tSTAR:          \"*\",\n\tSLASH:         \"/\",\n\tSLASHSLASH:    \"//\",\n\tPERCENT:       \"%\",\n\tAMP:           \"&\",\n\tPIPE:          \"|\",\n\tCIRCUMFLEX:    \"^\",\n\tLTLT:          \"<<\",\n\tGTGT:          \">>\",\n\tTILDE:         \"~\",\n\tDOT:           \".\",\n\tCOMMA:         \",\",\n\tEQ:            \"=\",\n\tSEMI:          \";\",\n\tCOLON:         \":\",\n\tLPAREN:        \"(\",\n\tRPAREN:        \")\",\n\tLBRACK:        \"[\",\n\tRBRACK:        \"]\",\n\tLBRACE:        \"{\",\n\tRBRACE:        \"}\",\n\tLT:            \"<\",\n\tGT:            \">\",\n\tGE:            \">=\",\n\tLE:            \"<=\",\n\tEQL:           \"==\",\n\tNEQ:           \"!=\",\n\tPLUS_EQ:       \"+=\",\n\tMINUS_EQ:      \"-=\",\n\tSTAR_EQ:       \"*=\",\n\tSLASH_EQ:      \"/=\",\n\tSLASHSLASH_EQ: \"//=\",\n\tPERCENT_EQ:    \"%=\",\n\tAMP_EQ:        \"&=\",\n\tPIPE_EQ:       \"|=\",\n\tCIRCUMFLEX_EQ: \"^=\",\n\tLTLT_EQ:       \"<<=\",\n\tGTGT_EQ:       \">>=\",\n\tSTARSTAR:      \"**\",\n\tAND:           \"and\",\n\tBREAK:         \"break\",\n\tCONTINUE:      \"continue\",\n\tDEF:           \"def\",\n\tELIF:          \"elif\",\n\tELSE:          \"else\",\n\tFOR:           \"for\",\n\tIF:            \"if\",\n\tIN:            \"in\",\n\tLAMBDA:        \"lambda\",\n\tLOAD:          \"load\",\n\tNOT:           \"not\",\n\tNOT_IN:        \"not in\",\n\tOR:            \"or\",\n\tPASS:          \"pass\",\n\tRETURN:        \"return\",\n\tWHILE:         \"while\",\n}\n\n// A FilePortion describes the content of a portion of a file.\n// Callers may provide a FilePortion for the src argument of Parse\n// when the desired initial line and column numbers are not (1, 1),\n// such as when an expression is parsed from within larger file.\ntype FilePortion struct {\n\tContent             []byte\n\tFirstLine, FirstCol int32\n}\n\n// A Position describes the location of a rune of input.\ntype Position struct {\n\tfile *string // filename (indirect for compactness)\n\tLine int32   // 1-based line number; 0 if line unknown\n\tCol  int32   // 1-based column (rune) number; 0 if column unknown\n}\n\n// IsValid reports whether the position is valid.\nfunc (p Position) IsValid() bool { return p.file != nil }\n\n// Filename returns the name of the file containing this position.\nfunc (p Position) Filename() string {\n\tif p.file != nil {\n\t\treturn *p.file\n\t}\n\treturn \"<invalid>\"\n}\n\n// MakePosition returns position with the specified components.\nfunc MakePosition(file *string, line, col int32) Position { return Position{file, line, col} }\n\n// add returns the position at the end of s, assuming it starts at p.\nfunc (p Position) add(s string) Position {\n\tif n := strings.Count(s, \"\\n\"); n > 0 {\n\t\tp.Line += int32(n)\n\t\ts = s[strings.LastIndex(s, \"\\n\")+1:]\n\t\tp.Col = 1\n\t}\n\tp.Col += int32(utf8.RuneCountInString(s))\n\treturn p\n}\n\nfunc (p Position) String() string {\n\tfile := p.Filename()\n\tif p.Line > 0 {\n\t\tif p.Col > 0 {\n\t\t\treturn fmt.Sprintf(\"%s:%d:%d\", file, p.Line, p.Col)\n\t\t}\n\t\treturn fmt.Sprintf(\"%s:%d\", file, p.Line)\n\t}\n\treturn file\n}\n\nfunc (p Position) isBefore(q Position) bool {\n\tif p.Line != q.Line {\n\t\treturn p.Line < q.Line\n\t}\n\treturn p.Col < q.Col\n}\n\n// An scanner represents a single input file being parsed.\ntype scanner struct {\n\trest           []byte    // rest of input (in REPL, a line of input)\n\ttoken          []byte    // token being scanned\n\tpos            Position  // current input position\n\tdepth          int       // nesting of [ ] { } ( )\n\tindentstk      []int     // stack of indentation levels\n\tdents          int       // number of saved INDENT (>0) or OUTDENT (<0) tokens to return\n\tlineStart      bool      // after NEWLINE; convert spaces to indentation tokens\n\tkeepComments   bool      // accumulate comments in slice\n\tlineComments   []Comment // list of full line comments (if keepComments)\n\tsuffixComments []Comment // list of suffix comments (if keepComments)\n\n\treadline func() ([]byte, error) // read next line of input (REPL only)\n}\n\nfunc newScanner(filename string, src interface{}, keepComments bool) (*scanner, error) {\n\tvar firstLine, firstCol int32 = 1, 1\n\tif portion, ok := src.(FilePortion); ok {\n\t\tfirstLine, firstCol = portion.FirstLine, portion.FirstCol\n\t}\n\tsc := &scanner{\n\t\tpos:          MakePosition(&filename, firstLine, firstCol),\n\t\tindentstk:    make([]int, 1, 10), // []int{0} + spare capacity\n\t\tlineStart:    true,\n\t\tkeepComments: keepComments,\n\t}\n\tsc.readline, _ = src.(func() ([]byte, error)) // ParseCompoundStmt (REPL) only\n\tif sc.readline == nil {\n\t\tdata, err := readSource(filename, src)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tsc.rest = data\n\t}\n\treturn sc, nil\n}\n\nfunc readSource(filename string, src interface{}) ([]byte, error) {\n\tswitch src := src.(type) {\n\tcase string:\n\t\treturn []byte(src), nil\n\tcase []byte:\n\t\treturn src, nil\n\tcase io.Reader:\n\t\tdata, err := io.ReadAll(src)\n\t\tif err != nil {\n\t\t\terr = &os.PathError{Op: \"read\", Path: filename, Err: err}\n\t\t\treturn nil, err\n\t\t}\n\t\treturn data, nil\n\tcase FilePortion:\n\t\treturn src.Content, nil\n\tcase nil:\n\t\treturn os.ReadFile(filename)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"invalid source: %T\", src)\n\t}\n}\n\n// An Error describes the nature and position of a scanner or parser error.\ntype Error struct {\n\tPos Position\n\tMsg string\n}\n\nfunc (e Error) Error() string { return e.Pos.String() + \": \" + e.Msg }\n\n// errorf is called to report an error.\n// errorf does not return: it panics.\nfunc (sc *scanner) error(pos Position, s string) {\n\tpanic(Error{pos, s})\n}\n\nfunc (sc *scanner) errorf(pos Position, format string, args ...interface{}) {\n\tsc.error(pos, fmt.Sprintf(format, args...))\n}\n\nfunc (sc *scanner) recover(err *error) {\n\t// The scanner and parser panic both for routine errors like\n\t// syntax errors and for programmer bugs like array index\n\t// errors.  Turn both into error returns.  Catching bug panics\n\t// is especially important when processing many files.\n\tswitch e := recover().(type) {\n\tcase nil:\n\t\t// no panic\n\tcase Error:\n\t\t*err = e\n\tdefault:\n\t\t*err = Error{sc.pos, fmt.Sprintf(\"internal error: %v\", e)}\n\t\tif debug {\n\t\t\tlog.Fatal(*err)\n\t\t}\n\t}\n}\n\n// eof reports whether the input has reached end of file.\nfunc (sc *scanner) eof() bool {\n\treturn len(sc.rest) == 0 && !sc.readLine()\n}\n\n// readLine attempts to read another line of input.\n// Precondition: len(sc.rest)==0.\nfunc (sc *scanner) readLine() bool {\n\tif sc.readline != nil {\n\t\tvar err error\n\t\tsc.rest, err = sc.readline()\n\t\tif err != nil {\n\t\t\tsc.errorf(sc.pos, \"%v\", err) // EOF or ErrInterrupt\n\t\t}\n\t\treturn len(sc.rest) > 0\n\t}\n\treturn false\n}\n\n// peekRune returns the next rune in the input without consuming it.\n// Newlines in Unix, DOS, or Mac format are treated as one rune, '\\n'.\nfunc (sc *scanner) peekRune() rune {\n\t// TODO(adonovan): opt: measure and perhaps inline eof.\n\tif sc.eof() {\n\t\treturn 0\n\t}\n\n\t// fast path: ASCII\n\tif b := sc.rest[0]; b < utf8.RuneSelf {\n\t\tif b == '\\r' {\n\t\t\treturn '\\n'\n\t\t}\n\t\treturn rune(b)\n\t}\n\n\tr, _ := utf8.DecodeRune(sc.rest)\n\treturn r\n}\n\n// readRune consumes and returns the next rune in the input.\n// Newlines in Unix, DOS, or Mac format are treated as one rune, '\\n'.\nfunc (sc *scanner) readRune() rune {\n\t// eof() has been inlined here, both to avoid a call\n\t// and to establish len(rest)>0 to avoid a bounds check.\n\tif len(sc.rest) == 0 {\n\t\tif !sc.readLine() {\n\t\t\tsc.error(sc.pos, \"internal scanner error: readRune at EOF\")\n\t\t}\n\t\t// Redundant, but eliminates the bounds-check below.\n\t\tif len(sc.rest) == 0 {\n\t\t\treturn 0\n\t\t}\n\t}\n\n\t// fast path: ASCII\n\tif b := sc.rest[0]; b < utf8.RuneSelf {\n\t\tr := rune(b)\n\t\tsc.rest = sc.rest[1:]\n\t\tif r == '\\r' {\n\t\t\tif len(sc.rest) > 0 && sc.rest[0] == '\\n' {\n\t\t\t\tsc.rest = sc.rest[1:]\n\t\t\t}\n\t\t\tr = '\\n'\n\t\t}\n\t\tif r == '\\n' {\n\t\t\tsc.pos.Line++\n\t\t\tsc.pos.Col = 1\n\t\t} else {\n\t\t\tsc.pos.Col++\n\t\t}\n\t\treturn r\n\t}\n\n\tr, size := utf8.DecodeRune(sc.rest)\n\tsc.rest = sc.rest[size:]\n\tsc.pos.Col++\n\treturn r\n}\n\n// tokenValue records the position and value associated with each token.\ntype tokenValue struct {\n\traw    string   // raw text of token\n\tint    int64    // decoded int\n\tbigInt *big.Int // decoded integers > int64\n\tfloat  float64  // decoded float\n\tstring string   // decoded string or bytes\n\tpos    Position // start position of token\n}\n\n// startToken marks the beginning of the next input token.\n// It must be followed by a call to endToken once the token has\n// been consumed using readRune.\nfunc (sc *scanner) startToken(val *tokenValue) {\n\tsc.token = sc.rest\n\tval.raw = \"\"\n\tval.pos = sc.pos\n}\n\n// endToken marks the end of an input token.\n// It records the actual token string in val.raw if the caller\n// has not done that already.\nfunc (sc *scanner) endToken(val *tokenValue) {\n\tif val.raw == \"\" {\n\t\tval.raw = string(sc.token[:len(sc.token)-len(sc.rest)])\n\t}\n}\n\n// nextToken is called by the parser to obtain the next input token.\n// It returns the token value and sets val to the data associated with\n// the token.\n//\n// For all our input tokens, the associated data is val.pos (the\n// position where the token begins), val.raw (the input string\n// corresponding to the token).  For string and int tokens, the string\n// and int fields additionally contain the token's interpreted value.\nfunc (sc *scanner) nextToken(val *tokenValue) Token {\n\n\t// The following distribution of tokens guides case ordering:\n\t//\n\t//      COMMA          27   %\n\t//      STRING         23   %\n\t//      IDENT          15   %\n\t//      EQL            11   %\n\t//      LBRACK          5.5 %\n\t//      RBRACK          5.5 %\n\t//      NEWLINE         3   %\n\t//      LPAREN          2.9 %\n\t//      RPAREN          2.9 %\n\t//      INT             2   %\n\t//      others        < 1   %\n\t//\n\t// Although NEWLINE tokens are infrequent, and lineStart is\n\t// usually (~97%) false on entry, skipped newlines account for\n\t// about 50% of all iterations of the 'start' loop.\n\nstart:\n\tvar c rune\n\n\t// Deal with leading spaces and indentation.\n\tblank := false\n\tsavedLineStart := sc.lineStart\n\tif sc.lineStart {\n\t\tsc.lineStart = false\n\t\tcol := 0\n\t\tfor {\n\t\t\tc = sc.peekRune()\n\t\t\tif c == ' ' {\n\t\t\t\tcol++\n\t\t\t\tsc.readRune()\n\t\t\t} else if c == '\\t' {\n\t\t\t\tconst tab = 8\n\t\t\t\tcol += int(tab - (sc.pos.Col-1)%tab)\n\t\t\t\tsc.readRune()\n\t\t\t} else {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// The third clause matches EOF.\n\t\tif c == '#' || c == '\\n' || c == 0 {\n\t\t\tblank = true\n\t\t}\n\n\t\t// Compute indentation level for non-blank lines not\n\t\t// inside an expression.  This is not the common case.\n\t\tif !blank && sc.depth == 0 {\n\t\t\tcur := sc.indentstk[len(sc.indentstk)-1]\n\t\t\tif col > cur {\n\t\t\t\t// indent\n\t\t\t\tsc.dents++\n\t\t\t\tsc.indentstk = append(sc.indentstk, col)\n\t\t\t} else if col < cur {\n\t\t\t\t// outdent(s)\n\t\t\t\tfor len(sc.indentstk) > 0 && col < sc.indentstk[len(sc.indentstk)-1] {\n\t\t\t\t\tsc.dents--\n\t\t\t\t\tsc.indentstk = sc.indentstk[:len(sc.indentstk)-1] // pop\n\t\t\t\t}\n\t\t\t\tif col != sc.indentstk[len(sc.indentstk)-1] {\n\t\t\t\t\tsc.error(sc.pos, \"unindent does not match any outer indentation level\")\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return saved indentation tokens.\n\tif sc.dents != 0 {\n\t\tsc.startToken(val)\n\t\tsc.endToken(val)\n\t\tif sc.dents < 0 {\n\t\t\tsc.dents++\n\t\t\treturn OUTDENT\n\t\t} else {\n\t\t\tsc.dents--\n\t\t\treturn INDENT\n\t\t}\n\t}\n\n\t// start of line proper\n\tc = sc.peekRune()\n\n\t// Skip spaces.\n\tfor c == ' ' || c == '\\t' {\n\t\tsc.readRune()\n\t\tc = sc.peekRune()\n\t}\n\n\t// comment\n\tif c == '#' {\n\t\tif sc.keepComments {\n\t\t\tsc.startToken(val)\n\t\t}\n\t\t// Consume up to newline (included).\n\t\tfor c != 0 && c != '\\n' {\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t}\n\t\tif sc.keepComments {\n\t\t\tsc.endToken(val)\n\t\t\tif blank {\n\t\t\t\tsc.lineComments = append(sc.lineComments, Comment{val.pos, val.raw})\n\t\t\t} else {\n\t\t\t\tsc.suffixComments = append(sc.suffixComments, Comment{val.pos, val.raw})\n\t\t\t}\n\t\t}\n\t}\n\n\t// newline\n\tif c == '\\n' {\n\t\tsc.lineStart = true\n\n\t\t// Ignore newlines within expressions (common case).\n\t\tif sc.depth > 0 {\n\t\t\tsc.readRune()\n\t\t\tgoto start\n\t\t}\n\n\t\t// Ignore blank lines, except in the REPL,\n\t\t// where they emit OUTDENTs and NEWLINE.\n\t\tif blank {\n\t\t\tif sc.readline == nil {\n\t\t\t\tsc.readRune()\n\t\t\t\tgoto start\n\t\t\t} else if len(sc.indentstk) > 1 {\n\t\t\t\tsc.dents = 1 - len(sc.indentstk)\n\t\t\t\tsc.indentstk = sc.indentstk[:1]\n\t\t\t\tgoto start\n\t\t\t}\n\t\t}\n\n\t\t// At top-level (not in an expression).\n\t\tsc.startToken(val)\n\t\tsc.readRune()\n\t\tval.raw = \"\\n\"\n\t\treturn NEWLINE\n\t}\n\n\t// end of file\n\tif c == 0 {\n\t\t// Emit OUTDENTs for unfinished indentation,\n\t\t// preceded by a NEWLINE if we haven't just emitted one.\n\t\tif len(sc.indentstk) > 1 {\n\t\t\tif savedLineStart {\n\t\t\t\tsc.dents = 1 - len(sc.indentstk)\n\t\t\t\tsc.indentstk = sc.indentstk[:1]\n\t\t\t\tgoto start\n\t\t\t} else {\n\t\t\t\tsc.lineStart = true\n\t\t\t\tsc.startToken(val)\n\t\t\t\tval.raw = \"\\n\"\n\t\t\t\treturn NEWLINE\n\t\t\t}\n\t\t}\n\n\t\tsc.startToken(val)\n\t\tsc.endToken(val)\n\t\treturn EOF\n\t}\n\n\t// line continuation\n\tif c == '\\\\' {\n\t\tsc.readRune()\n\t\tif sc.peekRune() != '\\n' {\n\t\t\tsc.errorf(sc.pos, \"stray backslash in program\")\n\t\t}\n\t\tsc.readRune()\n\t\tgoto start\n\t}\n\n\t// start of the next token\n\tsc.startToken(val)\n\n\t// comma (common case)\n\tif c == ',' {\n\t\tsc.readRune()\n\t\tsc.endToken(val)\n\t\treturn COMMA\n\t}\n\n\t// string literal\n\tif c == '\"' || c == '\\'' {\n\t\treturn sc.scanString(val, c)\n\t}\n\n\t// identifier or keyword\n\tif isIdentStart(c) {\n\t\tif (c == 'r' || c == 'b') && len(sc.rest) > 1 && (sc.rest[1] == '\"' || sc.rest[1] == '\\'') {\n\t\t\t//  r\"...\"\n\t\t\t//  b\"...\"\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t\treturn sc.scanString(val, c)\n\t\t} else if c == 'r' && len(sc.rest) > 2 && sc.rest[1] == 'b' && (sc.rest[2] == '\"' || sc.rest[2] == '\\'') {\n\t\t\t// rb\"...\"\n\t\t\tsc.readRune()\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t\treturn sc.scanString(val, c)\n\t\t}\n\n\t\tfor isIdent(c) {\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t}\n\t\tsc.endToken(val)\n\t\tif k, ok := keywordToken[val.raw]; ok {\n\t\t\treturn k\n\t\t}\n\n\t\treturn IDENT\n\t}\n\n\t// brackets\n\tswitch c {\n\tcase '[', '(', '{':\n\t\tsc.depth++\n\t\tsc.readRune()\n\t\tsc.endToken(val)\n\t\tswitch c {\n\t\tcase '[':\n\t\t\treturn LBRACK\n\t\tcase '(':\n\t\t\treturn LPAREN\n\t\tcase '{':\n\t\t\treturn LBRACE\n\t\t}\n\t\tpanic(\"unreachable\")\n\n\tcase ']', ')', '}':\n\t\tif sc.depth == 0 {\n\t\t\tsc.errorf(sc.pos, \"unexpected %q\", c)\n\t\t} else {\n\t\t\tsc.depth--\n\t\t}\n\t\tsc.readRune()\n\t\tsc.endToken(val)\n\t\tswitch c {\n\t\tcase ']':\n\t\t\treturn RBRACK\n\t\tcase ')':\n\t\t\treturn RPAREN\n\t\tcase '}':\n\t\t\treturn RBRACE\n\t\t}\n\t\tpanic(\"unreachable\")\n\t}\n\n\t// int or float literal, or period\n\tif isdigit(c) || c == '.' {\n\t\treturn sc.scanNumber(val, c)\n\t}\n\n\t// other punctuation\n\tdefer sc.endToken(val)\n\tswitch c {\n\tcase '=', '<', '>', '!', '+', '-', '%', '/', '&', '|', '^': // possibly followed by '='\n\t\tstart := sc.pos\n\t\tsc.readRune()\n\t\tif sc.peekRune() == '=' {\n\t\t\tsc.readRune()\n\t\t\tswitch c {\n\t\t\tcase '<':\n\t\t\t\treturn LE\n\t\t\tcase '>':\n\t\t\t\treturn GE\n\t\t\tcase '=':\n\t\t\t\treturn EQL\n\t\t\tcase '!':\n\t\t\t\treturn NEQ\n\t\t\tcase '+':\n\t\t\t\treturn PLUS_EQ\n\t\t\tcase '-':\n\t\t\t\treturn MINUS_EQ\n\t\t\tcase '/':\n\t\t\t\treturn SLASH_EQ\n\t\t\tcase '%':\n\t\t\t\treturn PERCENT_EQ\n\t\t\tcase '&':\n\t\t\t\treturn AMP_EQ\n\t\t\tcase '|':\n\t\t\t\treturn PIPE_EQ\n\t\t\tcase '^':\n\t\t\t\treturn CIRCUMFLEX_EQ\n\t\t\t}\n\t\t}\n\t\tswitch c {\n\t\tcase '=':\n\t\t\treturn EQ\n\t\tcase '<':\n\t\t\tif sc.peekRune() == '<' {\n\t\t\t\tsc.readRune()\n\t\t\t\tif sc.peekRune() == '=' {\n\t\t\t\t\tsc.readRune()\n\t\t\t\t\treturn LTLT_EQ\n\t\t\t\t} else {\n\t\t\t\t\treturn LTLT\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn LT\n\t\tcase '>':\n\t\t\tif sc.peekRune() == '>' {\n\t\t\t\tsc.readRune()\n\t\t\t\tif sc.peekRune() == '=' {\n\t\t\t\t\tsc.readRune()\n\t\t\t\t\treturn GTGT_EQ\n\t\t\t\t} else {\n\t\t\t\t\treturn GTGT\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn GT\n\t\tcase '!':\n\t\t\tsc.error(start, \"unexpected input character '!'\")\n\t\tcase '+':\n\t\t\treturn PLUS\n\t\tcase '-':\n\t\t\treturn MINUS\n\t\tcase '/':\n\t\t\tif sc.peekRune() == '/' {\n\t\t\t\tsc.readRune()\n\t\t\t\tif sc.peekRune() == '=' {\n\t\t\t\t\tsc.readRune()\n\t\t\t\t\treturn SLASHSLASH_EQ\n\t\t\t\t} else {\n\t\t\t\t\treturn SLASHSLASH\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn SLASH\n\t\tcase '%':\n\t\t\treturn PERCENT\n\t\tcase '&':\n\t\t\treturn AMP\n\t\tcase '|':\n\t\t\treturn PIPE\n\t\tcase '^':\n\t\t\treturn CIRCUMFLEX\n\t\t}\n\t\tpanic(\"unreachable\")\n\n\tcase ':', ';', '~': // single-char tokens (except comma)\n\t\tsc.readRune()\n\t\tswitch c {\n\t\tcase ':':\n\t\t\treturn COLON\n\t\tcase ';':\n\t\t\treturn SEMI\n\t\tcase '~':\n\t\t\treturn TILDE\n\t\t}\n\t\tpanic(\"unreachable\")\n\n\tcase '*': // possibly followed by '*' or '='\n\t\tsc.readRune()\n\t\tswitch sc.peekRune() {\n\t\tcase '*':\n\t\t\tsc.readRune()\n\t\t\treturn STARSTAR\n\t\tcase '=':\n\t\t\tsc.readRune()\n\t\t\treturn STAR_EQ\n\t\t}\n\t\treturn STAR\n\t}\n\n\tsc.errorf(sc.pos, \"unexpected input character %#q\", c)\n\tpanic(\"unreachable\")\n}\n\nfunc (sc *scanner) scanString(val *tokenValue, quote rune) Token {\n\tstart := sc.pos\n\ttriple := len(sc.rest) >= 3 && sc.rest[0] == byte(quote) && sc.rest[1] == byte(quote) && sc.rest[2] == byte(quote)\n\tsc.readRune()\n\n\t// String literals may contain escaped or unescaped newlines,\n\t// causing them to span multiple lines (gulps) of REPL input;\n\t// they are the only such token. Thus we cannot call endToken,\n\t// as it assumes sc.rest is unchanged since startToken.\n\t// Instead, buffer the token here.\n\t// TODO(adonovan): opt: buffer only if we encounter a newline.\n\traw := new(strings.Builder)\n\n\t// Copy the prefix, e.g. r' or \" (see startToken).\n\traw.Write(sc.token[:len(sc.token)-len(sc.rest)])\n\n\tif !triple {\n\t\t// single-quoted string literal\n\t\tfor {\n\t\t\tif sc.eof() {\n\t\t\t\tsc.error(val.pos, \"unexpected EOF in string\")\n\t\t\t}\n\t\t\tc := sc.readRune()\n\t\t\traw.WriteRune(c)\n\t\t\tif c == quote {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif c == '\\n' {\n\t\t\t\tsc.error(val.pos, \"unexpected newline in string\")\n\t\t\t}\n\t\t\tif c == '\\\\' {\n\t\t\t\tif sc.eof() {\n\t\t\t\t\tsc.error(val.pos, \"unexpected EOF in string\")\n\t\t\t\t}\n\t\t\t\tc = sc.readRune()\n\t\t\t\traw.WriteRune(c)\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// triple-quoted string literal\n\t\tsc.readRune()\n\t\traw.WriteRune(quote)\n\t\tsc.readRune()\n\t\traw.WriteRune(quote)\n\n\t\tquoteCount := 0\n\t\tfor {\n\t\t\tif sc.eof() {\n\t\t\t\tsc.error(val.pos, \"unexpected EOF in string\")\n\t\t\t}\n\t\t\tc := sc.readRune()\n\t\t\traw.WriteRune(c)\n\t\t\tif c == quote {\n\t\t\t\tquoteCount++\n\t\t\t\tif quoteCount == 3 {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tquoteCount = 0\n\t\t\t}\n\t\t\tif c == '\\\\' {\n\t\t\t\tif sc.eof() {\n\t\t\t\t\tsc.error(val.pos, \"unexpected EOF in string\")\n\t\t\t\t}\n\t\t\t\tc = sc.readRune()\n\t\t\t\traw.WriteRune(c)\n\t\t\t}\n\t\t}\n\t}\n\tval.raw = raw.String()\n\n\ts, _, isByte, err := unquote(val.raw)\n\tif err != nil {\n\t\tsc.error(start, err.Error())\n\t}\n\tval.string = s\n\tif isByte {\n\t\treturn BYTES\n\t} else {\n\t\treturn STRING\n\t}\n}\n\nfunc (sc *scanner) scanNumber(val *tokenValue, c rune) Token {\n\t// https://github.com/google/starlark-go/blob/master/doc/spec.md#lexical-elements\n\t//\n\t// Python features not supported:\n\t// - integer literals of >64 bits of precision\n\t// - 123L or 123l long suffix\n\t// - traditional octal: 0755\n\t// https://docs.python.org/2/reference/lexical_analysis.html#integer-and-long-integer-literals\n\n\tstart := sc.pos\n\tfraction, exponent := false, false\n\n\tif c == '.' {\n\t\t// dot or start of fraction\n\t\tsc.readRune()\n\t\tc = sc.peekRune()\n\t\tif !isdigit(c) {\n\t\t\tsc.endToken(val)\n\t\t\treturn DOT\n\t\t}\n\t\tfraction = true\n\t} else if c == '0' {\n\t\t// hex, octal, binary or float\n\t\tsc.readRune()\n\t\tc = sc.peekRune()\n\n\t\tif c == '.' {\n\t\t\tfraction = true\n\t\t} else if c == 'x' || c == 'X' {\n\t\t\t// hex\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t\tif !isxdigit(c) {\n\t\t\t\tsc.error(start, \"invalid hex literal\")\n\t\t\t}\n\t\t\tfor isxdigit(c) {\n\t\t\t\tsc.readRune()\n\t\t\t\tc = sc.peekRune()\n\t\t\t}\n\t\t} else if c == 'o' || c == 'O' {\n\t\t\t// octal\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t\tif !isodigit(c) {\n\t\t\t\tsc.error(sc.pos, \"invalid octal literal\")\n\t\t\t}\n\t\t\tfor isodigit(c) {\n\t\t\t\tsc.readRune()\n\t\t\t\tc = sc.peekRune()\n\t\t\t}\n\t\t} else if c == 'b' || c == 'B' {\n\t\t\t// binary\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t\tif !isbdigit(c) {\n\t\t\t\tsc.error(sc.pos, \"invalid binary literal\")\n\t\t\t}\n\t\t\tfor isbdigit(c) {\n\t\t\t\tsc.readRune()\n\t\t\t\tc = sc.peekRune()\n\t\t\t}\n\t\t} else {\n\t\t\t// float (or obsolete octal \"0755\")\n\t\t\tallzeros, octal := true, true\n\t\t\tfor isdigit(c) {\n\t\t\t\tif c != '0' {\n\t\t\t\t\tallzeros = false\n\t\t\t\t}\n\t\t\t\tif c > '7' {\n\t\t\t\t\toctal = false\n\t\t\t\t}\n\t\t\t\tsc.readRune()\n\t\t\t\tc = sc.peekRune()\n\t\t\t}\n\t\t\tif c == '.' {\n\t\t\t\tfraction = true\n\t\t\t} else if c == 'e' || c == 'E' {\n\t\t\t\texponent = true\n\t\t\t} else if octal && !allzeros {\n\t\t\t\tsc.endToken(val)\n\t\t\t\tsc.errorf(sc.pos, \"obsolete form of octal literal; use 0o%s\", val.raw[1:])\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// decimal\n\t\tfor isdigit(c) {\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t}\n\n\t\tif c == '.' {\n\t\t\tfraction = true\n\t\t} else if c == 'e' || c == 'E' {\n\t\t\texponent = true\n\t\t}\n\t}\n\n\tif fraction {\n\t\tsc.readRune() // consume '.'\n\t\tc = sc.peekRune()\n\t\tfor isdigit(c) {\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t}\n\n\t\tif c == 'e' || c == 'E' {\n\t\t\texponent = true\n\t\t}\n\t}\n\n\tif exponent {\n\t\tsc.readRune() // consume [eE]\n\t\tc = sc.peekRune()\n\t\tif c == '+' || c == '-' {\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t\tif !isdigit(c) {\n\t\t\t\tsc.error(sc.pos, \"invalid float literal\")\n\t\t\t}\n\t\t}\n\t\tfor isdigit(c) {\n\t\t\tsc.readRune()\n\t\t\tc = sc.peekRune()\n\t\t}\n\t}\n\n\tsc.endToken(val)\n\tif fraction || exponent {\n\t\tvar err error\n\t\tval.float, err = strconv.ParseFloat(val.raw, 64)\n\t\tif err != nil {\n\t\t\tsc.error(sc.pos, \"invalid float literal\")\n\t\t}\n\t\treturn FLOAT\n\t} else {\n\t\tvar err error\n\t\ts := val.raw\n\t\tval.bigInt = nil\n\t\tif len(s) > 2 && s[0] == '0' && (s[1] == 'o' || s[1] == 'O') {\n\t\t\tval.int, err = strconv.ParseInt(s[2:], 8, 64)\n\t\t} else if len(s) > 2 && s[0] == '0' && (s[1] == 'b' || s[1] == 'B') {\n\t\t\tval.int, err = strconv.ParseInt(s[2:], 2, 64)\n\t\t} else {\n\t\t\tval.int, err = strconv.ParseInt(s, 0, 64)\n\t\t\tif err != nil {\n\t\t\t\tnum := new(big.Int)\n\t\t\t\tvar ok bool\n\t\t\t\tval.bigInt, ok = num.SetString(s, 0)\n\t\t\t\tif ok {\n\t\t\t\t\terr = nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif err != nil {\n\t\t\tsc.error(start, \"invalid int literal\")\n\t\t}\n\t\treturn INT\n\t}\n}\n\n// isIdent reports whether c is an identifier rune.\nfunc isIdent(c rune) bool {\n\treturn isdigit(c) || isIdentStart(c)\n}\n\nfunc isIdentStart(c rune) bool {\n\treturn 'a' <= c && c <= 'z' ||\n\t\t'A' <= c && c <= 'Z' ||\n\t\tc == '_' ||\n\t\tunicode.IsLetter(c)\n}\n\nfunc isdigit(c rune) bool  { return '0' <= c && c <= '9' }\nfunc isodigit(c rune) bool { return '0' <= c && c <= '7' }\nfunc isxdigit(c rune) bool { return isdigit(c) || 'A' <= c && c <= 'F' || 'a' <= c && c <= 'f' }\nfunc isbdigit(c rune) bool { return '0' == c || c == '1' }\n\n// keywordToken records the special tokens for\n// strings that should not be treated as ordinary identifiers.\nvar keywordToken = map[string]Token{\n\t\"and\":      AND,\n\t\"break\":    BREAK,\n\t\"continue\": CONTINUE,\n\t\"def\":      DEF,\n\t\"elif\":     ELIF,\n\t\"else\":     ELSE,\n\t\"for\":      FOR,\n\t\"if\":       IF,\n\t\"in\":       IN,\n\t\"lambda\":   LAMBDA,\n\t\"load\":     LOAD,\n\t\"not\":      NOT,\n\t\"or\":       OR,\n\t\"pass\":     PASS,\n\t\"return\":   RETURN,\n\t\"while\":    WHILE,\n\n\t// reserved words:\n\t\"as\": ILLEGAL,\n\t// \"assert\":   ILLEGAL, // heavily used by our tests\n\t\"async\":    ILLEGAL,\n\t\"await\":    ILLEGAL,\n\t\"class\":    ILLEGAL,\n\t\"del\":      ILLEGAL,\n\t\"except\":   ILLEGAL,\n\t\"finally\":  ILLEGAL,\n\t\"from\":     ILLEGAL,\n\t\"global\":   ILLEGAL,\n\t\"import\":   ILLEGAL,\n\t\"is\":       ILLEGAL,\n\t\"nonlocal\": ILLEGAL,\n\t\"raise\":    ILLEGAL,\n\t\"try\":      ILLEGAL,\n\t\"with\":     ILLEGAL,\n\t\"yield\":    ILLEGAL,\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/syntax/syntax.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package syntax provides a Starlark parser and abstract syntax tree.\npackage syntax // import \"go.starlark.net/syntax\"\n\n// A Node is a node in a Starlark syntax tree.\ntype Node interface {\n\t// Span returns the start and end position of the expression.\n\tSpan() (start, end Position)\n\n\t// Comments returns the comments associated with this node.\n\t// It returns nil if RetainComments was not specified during parsing,\n\t// or if AllocComments was not called.\n\tComments() *Comments\n\n\t// AllocComments allocates a new Comments node if there was none.\n\t// This makes possible to add new comments using Comments() method.\n\tAllocComments()\n}\n\n// A Comment represents a single # comment.\ntype Comment struct {\n\tStart Position\n\tText  string // without trailing newline\n}\n\n// Comments collects the comments associated with an expression.\ntype Comments struct {\n\tBefore []Comment // whole-line comments before this expression\n\tSuffix []Comment // end-of-line comments after this expression (up to 1)\n\n\t// For top-level expressions only, After lists whole-line\n\t// comments following the expression.\n\tAfter []Comment\n}\n\n// A commentsRef is a possibly-nil reference to a set of comments.\n// A commentsRef is embedded in each type of syntax node,\n// and provides its Comments and AllocComments methods.\ntype commentsRef struct{ ref *Comments }\n\n// Comments returns the comments associated with a syntax node,\n// or nil if AllocComments has not yet been called.\nfunc (cr commentsRef) Comments() *Comments { return cr.ref }\n\n// AllocComments enables comments to be associated with a syntax node.\nfunc (cr *commentsRef) AllocComments() {\n\tif cr.ref == nil {\n\t\tcr.ref = new(Comments)\n\t}\n}\n\n// Start returns the start position of the expression.\nfunc Start(n Node) Position {\n\tstart, _ := n.Span()\n\treturn start\n}\n\n// End returns the end position of the expression.\nfunc End(n Node) Position {\n\t_, end := n.Span()\n\treturn end\n}\n\n// A File represents a Starlark file.\ntype File struct {\n\tcommentsRef\n\tPath  string\n\tStmts []Stmt\n\n\tModule  interface{} // a *resolve.Module, set by resolver\n\tOptions *FileOptions\n}\n\nfunc (x *File) Span() (start, end Position) {\n\tif len(x.Stmts) == 0 {\n\t\treturn\n\t}\n\tstart, _ = x.Stmts[0].Span()\n\t_, end = x.Stmts[len(x.Stmts)-1].Span()\n\treturn start, end\n}\n\n// A Stmt is a Starlark statement.\ntype Stmt interface {\n\tNode\n\tstmt()\n}\n\nfunc (*AssignStmt) stmt() {}\nfunc (*BranchStmt) stmt() {}\nfunc (*DefStmt) stmt()    {}\nfunc (*ExprStmt) stmt()   {}\nfunc (*ForStmt) stmt()    {}\nfunc (*WhileStmt) stmt()  {}\nfunc (*IfStmt) stmt()     {}\nfunc (*LoadStmt) stmt()   {}\nfunc (*ReturnStmt) stmt() {}\n\n// An AssignStmt represents an assignment:\n//\n//\tx = 0\n//\tx, y = y, x\n//\tx += 1\ntype AssignStmt struct {\n\tcommentsRef\n\tOpPos Position\n\tOp    Token // = EQ | {PLUS,MINUS,STAR,PERCENT}_EQ\n\tLHS   Expr\n\tRHS   Expr\n}\n\nfunc (x *AssignStmt) Span() (start, end Position) {\n\tstart, _ = x.LHS.Span()\n\t_, end = x.RHS.Span()\n\treturn\n}\n\n// A DefStmt represents a function definition.\ntype DefStmt struct {\n\tcommentsRef\n\tDef    Position\n\tName   *Ident\n\tLparen Position\n\tParams []Expr // param = ident | ident=expr | * | *ident | **ident\n\tRparen Position\n\tBody   []Stmt\n\n\tFunction interface{} // a *resolve.Function, set by resolver\n}\n\nfunc (x *DefStmt) Span() (start, end Position) {\n\t_, end = x.Body[len(x.Body)-1].Span()\n\treturn x.Def, end\n}\n\n// An ExprStmt is an expression evaluated for side effects.\ntype ExprStmt struct {\n\tcommentsRef\n\tX Expr\n}\n\nfunc (x *ExprStmt) Span() (start, end Position) {\n\treturn x.X.Span()\n}\n\n// An IfStmt is a conditional: If Cond: True; else: False.\n// 'elseif' is desugared into a chain of IfStmts.\ntype IfStmt struct {\n\tcommentsRef\n\tIf      Position // IF or ELIF\n\tCond    Expr\n\tTrue    []Stmt\n\tElsePos Position // ELSE or ELIF\n\tFalse   []Stmt   // optional\n}\n\nfunc (x *IfStmt) Span() (start, end Position) {\n\tbody := x.False\n\tif body == nil {\n\t\tbody = x.True\n\t}\n\t_, end = body[len(body)-1].Span()\n\treturn x.If, end\n}\n\n// A LoadStmt loads another module and binds names from it:\n// load(Module, \"x\", y=\"foo\").\n//\n// The AST is slightly unfaithful to the concrete syntax here because\n// Starlark's load statement, so that it can be implemented in Python,\n// binds some names (like y above) with an identifier and some (like x)\n// without.  For consistency we create fake identifiers for all the\n// strings.\ntype LoadStmt struct {\n\tcommentsRef\n\tLoad   Position\n\tModule *Literal // a string\n\tFrom   []*Ident // name defined in loading module\n\tTo     []*Ident // name in loaded module\n\tRparen Position\n}\n\nfunc (x *LoadStmt) Span() (start, end Position) {\n\treturn x.Load, x.Rparen\n}\n\n// ModuleName returns the name of the module loaded by this statement.\nfunc (x *LoadStmt) ModuleName() string { return x.Module.Value.(string) }\n\n// A BranchStmt changes the flow of control: break, continue, pass.\ntype BranchStmt struct {\n\tcommentsRef\n\tToken    Token // = BREAK | CONTINUE | PASS\n\tTokenPos Position\n}\n\nfunc (x *BranchStmt) Span() (start, end Position) {\n\treturn x.TokenPos, x.TokenPos.add(x.Token.String())\n}\n\n// A ReturnStmt returns from a function.\ntype ReturnStmt struct {\n\tcommentsRef\n\tReturn Position\n\tResult Expr // may be nil\n}\n\nfunc (x *ReturnStmt) Span() (start, end Position) {\n\tif x.Result == nil {\n\t\treturn x.Return, x.Return.add(\"return\")\n\t}\n\t_, end = x.Result.Span()\n\treturn x.Return, end\n}\n\n// An Expr is a Starlark expression.\ntype Expr interface {\n\tNode\n\texpr()\n}\n\nfunc (*BinaryExpr) expr()    {}\nfunc (*CallExpr) expr()      {}\nfunc (*Comprehension) expr() {}\nfunc (*CondExpr) expr()      {}\nfunc (*DictEntry) expr()     {}\nfunc (*DictExpr) expr()      {}\nfunc (*DotExpr) expr()       {}\nfunc (*Ident) expr()         {}\nfunc (*IndexExpr) expr()     {}\nfunc (*LambdaExpr) expr()    {}\nfunc (*ListExpr) expr()      {}\nfunc (*Literal) expr()       {}\nfunc (*ParenExpr) expr()     {}\nfunc (*SliceExpr) expr()     {}\nfunc (*TupleExpr) expr()     {}\nfunc (*UnaryExpr) expr()     {}\n\n// An Ident represents an identifier.\ntype Ident struct {\n\tcommentsRef\n\tNamePos Position\n\tName    string\n\n\tBinding interface{} // a *resolver.Binding, set by resolver\n}\n\nfunc (x *Ident) Span() (start, end Position) {\n\treturn x.NamePos, x.NamePos.add(x.Name)\n}\n\n// A Literal represents a literal string or number.\ntype Literal struct {\n\tcommentsRef\n\tToken    Token // = STRING | BYTES | INT | FLOAT\n\tTokenPos Position\n\tRaw      string      // uninterpreted text\n\tValue    interface{} // = string | int64 | *big.Int | float64\n}\n\nfunc (x *Literal) Span() (start, end Position) {\n\treturn x.TokenPos, x.TokenPos.add(x.Raw)\n}\n\n// A ParenExpr represents a parenthesized expression: (X).\ntype ParenExpr struct {\n\tcommentsRef\n\tLparen Position\n\tX      Expr\n\tRparen Position\n}\n\nfunc (x *ParenExpr) Span() (start, end Position) {\n\treturn x.Lparen, x.Rparen.add(\")\")\n}\n\n// A CallExpr represents a function call expression: Fn(Args).\ntype CallExpr struct {\n\tcommentsRef\n\tFn     Expr\n\tLparen Position\n\tArgs   []Expr // arg = expr | ident=expr | *expr | **expr\n\tRparen Position\n}\n\nfunc (x *CallExpr) Span() (start, end Position) {\n\tstart, _ = x.Fn.Span()\n\treturn start, x.Rparen.add(\")\")\n}\n\n// A DotExpr represents a field or method selector: X.Name.\ntype DotExpr struct {\n\tcommentsRef\n\tX       Expr\n\tDot     Position\n\tNamePos Position\n\tName    *Ident\n}\n\nfunc (x *DotExpr) Span() (start, end Position) {\n\tstart, _ = x.X.Span()\n\t_, end = x.Name.Span()\n\treturn\n}\n\n// A Comprehension represents a list or dict comprehension:\n// [Body for ... if ...] or {Body for ... if ...}\ntype Comprehension struct {\n\tcommentsRef\n\tCurly   bool // {x:y for ...} or {x for ...}, not [x for ...]\n\tLbrack  Position\n\tBody    Expr\n\tClauses []Node // = *ForClause | *IfClause\n\tRbrack  Position\n}\n\nfunc (x *Comprehension) Span() (start, end Position) {\n\treturn x.Lbrack, x.Rbrack.add(\"]\")\n}\n\n// A ForStmt represents a loop: for Vars in X: Body.\ntype ForStmt struct {\n\tcommentsRef\n\tFor  Position\n\tVars Expr // name, or tuple of names\n\tX    Expr\n\tBody []Stmt\n}\n\nfunc (x *ForStmt) Span() (start, end Position) {\n\t_, end = x.Body[len(x.Body)-1].Span()\n\treturn x.For, end\n}\n\n// A WhileStmt represents a while loop: while X: Body.\ntype WhileStmt struct {\n\tcommentsRef\n\tWhile Position\n\tCond  Expr\n\tBody  []Stmt\n}\n\nfunc (x *WhileStmt) Span() (start, end Position) {\n\t_, end = x.Body[len(x.Body)-1].Span()\n\treturn x.While, end\n}\n\n// A ForClause represents a for clause in a list comprehension: for Vars in X.\ntype ForClause struct {\n\tcommentsRef\n\tFor  Position\n\tVars Expr // name, or tuple of names\n\tIn   Position\n\tX    Expr\n}\n\nfunc (x *ForClause) Span() (start, end Position) {\n\t_, end = x.X.Span()\n\treturn x.For, end\n}\n\n// An IfClause represents an if clause in a list comprehension: if Cond.\ntype IfClause struct {\n\tcommentsRef\n\tIf   Position\n\tCond Expr\n}\n\nfunc (x *IfClause) Span() (start, end Position) {\n\t_, end = x.Cond.Span()\n\treturn x.If, end\n}\n\n// A DictExpr represents a dictionary literal: { List }.\ntype DictExpr struct {\n\tcommentsRef\n\tLbrace Position\n\tList   []Expr // all *DictEntrys\n\tRbrace Position\n}\n\nfunc (x *DictExpr) Span() (start, end Position) {\n\treturn x.Lbrace, x.Rbrace.add(\"}\")\n}\n\n// A DictEntry represents a dictionary entry: Key: Value.\n// Used only within a DictExpr.\ntype DictEntry struct {\n\tcommentsRef\n\tKey   Expr\n\tColon Position\n\tValue Expr\n}\n\nfunc (x *DictEntry) Span() (start, end Position) {\n\tstart, _ = x.Key.Span()\n\t_, end = x.Value.Span()\n\treturn start, end\n}\n\n// A LambdaExpr represents an inline function abstraction.\ntype LambdaExpr struct {\n\tcommentsRef\n\tLambda Position\n\tParams []Expr // param = ident | ident=expr | * | *ident | **ident\n\tBody   Expr\n\n\tFunction interface{} // a *resolve.Function, set by resolver\n}\n\nfunc (x *LambdaExpr) Span() (start, end Position) {\n\t_, end = x.Body.Span()\n\treturn x.Lambda, end\n}\n\n// A ListExpr represents a list literal: [ List ].\ntype ListExpr struct {\n\tcommentsRef\n\tLbrack Position\n\tList   []Expr\n\tRbrack Position\n}\n\nfunc (x *ListExpr) Span() (start, end Position) {\n\treturn x.Lbrack, x.Rbrack.add(\"]\")\n}\n\n// CondExpr represents the conditional: X if COND else ELSE.\ntype CondExpr struct {\n\tcommentsRef\n\tIf      Position\n\tCond    Expr\n\tTrue    Expr\n\tElsePos Position\n\tFalse   Expr\n}\n\nfunc (x *CondExpr) Span() (start, end Position) {\n\tstart, _ = x.True.Span()\n\t_, end = x.False.Span()\n\treturn start, end\n}\n\n// A TupleExpr represents a tuple literal: (List).\ntype TupleExpr struct {\n\tcommentsRef\n\tLparen Position // optional (e.g. in x, y = 0, 1), but required if List is empty\n\tList   []Expr\n\tRparen Position\n}\n\nfunc (x *TupleExpr) Span() (start, end Position) {\n\tif x.Lparen.IsValid() {\n\t\treturn x.Lparen, x.Rparen\n\t} else {\n\t\treturn Start(x.List[0]), End(x.List[len(x.List)-1])\n\t}\n}\n\n// A UnaryExpr represents a unary expression: Op X.\n//\n// As a special case, UnaryOp{Op:Star} may also represent\n// the star parameter in def f(*args) or def f(*, x).\ntype UnaryExpr struct {\n\tcommentsRef\n\tOpPos Position\n\tOp    Token\n\tX     Expr // may be nil if Op==STAR\n}\n\nfunc (x *UnaryExpr) Span() (start, end Position) {\n\tif x.X != nil {\n\t\t_, end = x.X.Span()\n\t} else {\n\t\tend = x.OpPos.add(\"*\")\n\t}\n\treturn x.OpPos, end\n}\n\n// A BinaryExpr represents a binary expression: X Op Y.\n//\n// As a special case, BinaryExpr{Op:EQ} may also\n// represent a named argument in a call f(k=v)\n// or a named parameter in a function declaration\n// def f(param=default).\ntype BinaryExpr struct {\n\tcommentsRef\n\tX     Expr\n\tOpPos Position\n\tOp    Token\n\tY     Expr\n}\n\nfunc (x *BinaryExpr) Span() (start, end Position) {\n\tstart, _ = x.X.Span()\n\t_, end = x.Y.Span()\n\treturn start, end\n}\n\n// A SliceExpr represents a slice or substring expression: X[Lo:Hi:Step].\ntype SliceExpr struct {\n\tcommentsRef\n\tX            Expr\n\tLbrack       Position\n\tLo, Hi, Step Expr // all optional\n\tRbrack       Position\n}\n\nfunc (x *SliceExpr) Span() (start, end Position) {\n\tstart, _ = x.X.Span()\n\treturn start, x.Rbrack\n}\n\n// An IndexExpr represents an index expression: X[Y].\ntype IndexExpr struct {\n\tcommentsRef\n\tX      Expr\n\tLbrack Position\n\tY      Expr\n\tRbrack Position\n}\n\nfunc (x *IndexExpr) Span() (start, end Position) {\n\tstart, _ = x.X.Span()\n\treturn start, x.Rbrack\n}\n"
  },
  {
    "path": "vendor/go.starlark.net/syntax/walk.go",
    "content": "// Copyright 2017 The Bazel Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage syntax\n\n// Walk traverses a syntax tree in depth-first order.\n// It starts by calling f(n); n must not be nil.\n// If f returns true, Walk calls itself\n// recursively for each non-nil child of n.\n// Walk then calls f(nil).\nfunc Walk(n Node, f func(Node) bool) {\n\tif n == nil {\n\t\tpanic(\"nil\")\n\t}\n\tif !f(n) {\n\t\treturn\n\t}\n\n\t// TODO(adonovan): opt: order cases using profile data.\n\tswitch n := n.(type) {\n\tcase *File:\n\t\twalkStmts(n.Stmts, f)\n\n\tcase *ExprStmt:\n\t\tWalk(n.X, f)\n\n\tcase *BranchStmt:\n\t\t// no-op\n\n\tcase *IfStmt:\n\t\tWalk(n.Cond, f)\n\t\twalkStmts(n.True, f)\n\t\twalkStmts(n.False, f)\n\n\tcase *AssignStmt:\n\t\tWalk(n.LHS, f)\n\t\tWalk(n.RHS, f)\n\n\tcase *DefStmt:\n\t\tWalk(n.Name, f)\n\t\tfor _, param := range n.Params {\n\t\t\tWalk(param, f)\n\t\t}\n\t\twalkStmts(n.Body, f)\n\n\tcase *ForStmt:\n\t\tWalk(n.Vars, f)\n\t\tWalk(n.X, f)\n\t\twalkStmts(n.Body, f)\n\n\tcase *ReturnStmt:\n\t\tif n.Result != nil {\n\t\t\tWalk(n.Result, f)\n\t\t}\n\n\tcase *LoadStmt:\n\t\tWalk(n.Module, f)\n\t\tfor _, from := range n.From {\n\t\t\tWalk(from, f)\n\t\t}\n\t\tfor _, to := range n.To {\n\t\t\tWalk(to, f)\n\t\t}\n\n\tcase *Ident, *Literal:\n\t\t// no-op\n\n\tcase *ListExpr:\n\t\tfor _, x := range n.List {\n\t\t\tWalk(x, f)\n\t\t}\n\n\tcase *ParenExpr:\n\t\tWalk(n.X, f)\n\n\tcase *CondExpr:\n\t\tWalk(n.Cond, f)\n\t\tWalk(n.True, f)\n\t\tWalk(n.False, f)\n\n\tcase *IndexExpr:\n\t\tWalk(n.X, f)\n\t\tWalk(n.Y, f)\n\n\tcase *DictEntry:\n\t\tWalk(n.Key, f)\n\t\tWalk(n.Value, f)\n\n\tcase *SliceExpr:\n\t\tWalk(n.X, f)\n\t\tif n.Lo != nil {\n\t\t\tWalk(n.Lo, f)\n\t\t}\n\t\tif n.Hi != nil {\n\t\t\tWalk(n.Hi, f)\n\t\t}\n\t\tif n.Step != nil {\n\t\t\tWalk(n.Step, f)\n\t\t}\n\n\tcase *Comprehension:\n\t\tWalk(n.Body, f)\n\t\tfor _, clause := range n.Clauses {\n\t\t\tWalk(clause, f)\n\t\t}\n\n\tcase *IfClause:\n\t\tWalk(n.Cond, f)\n\n\tcase *ForClause:\n\t\tWalk(n.Vars, f)\n\t\tWalk(n.X, f)\n\n\tcase *TupleExpr:\n\t\tfor _, x := range n.List {\n\t\t\tWalk(x, f)\n\t\t}\n\n\tcase *DictExpr:\n\t\tfor _, entry := range n.List {\n\t\t\tWalk(entry, f)\n\t\t}\n\n\tcase *UnaryExpr:\n\t\tif n.X != nil {\n\t\t\tWalk(n.X, f)\n\t\t}\n\n\tcase *BinaryExpr:\n\t\tWalk(n.X, f)\n\t\tWalk(n.Y, f)\n\n\tcase *DotExpr:\n\t\tWalk(n.X, f)\n\t\tWalk(n.Name, f)\n\n\tcase *CallExpr:\n\t\tWalk(n.Fn, f)\n\t\tfor _, arg := range n.Args {\n\t\t\tWalk(arg, f)\n\t\t}\n\n\tcase *LambdaExpr:\n\t\tfor _, param := range n.Params {\n\t\t\tWalk(param, f)\n\t\t}\n\t\tWalk(n.Body, f)\n\n\tdefault:\n\t\tpanic(n)\n\t}\n\n\tf(nil)\n}\n\nfunc walkStmts(stmts []Stmt, f func(Node) bool) {\n\tfor _, stmt := range stmts {\n\t\tWalk(stmt, f)\n\t}\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/LICENSE",
    "content": "\nThis project is covered by two different licenses: MIT and Apache.\n\n#### MIT License ####\n\nThe following files were ported to Go from C files of libyaml, and thus\nare still covered by their original MIT license, with the additional\ncopyright staring in 2011 when the project was ported over:\n\n    apic.go emitterc.go parserc.go readerc.go scannerc.go\n    writerc.go yamlh.go yamlprivateh.go\n\nCopyright (c) 2006-2010 Kirill Simonov\nCopyright (c) 2006-2011 Kirill Simonov\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n### Apache License ###\n\nAll the remaining project files are covered by the Apache license:\n\nCopyright (c) 2011-2019 Canonical Ltd\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/NOTICE",
    "content": "Copyright 2011-2016 Canonical Ltd.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/README.md",
    "content": "go.yaml.in/yaml\n===============\n\nYAML Support for the Go Language\n\n\n## Introduction\n\nThe `yaml` package enables [Go](https://go.dev/) programs to comfortably encode\nand decode [YAML](https://yaml.org/) values.\n\nIt was originally developed within [Canonical](https://www.canonical.com) as\npart of the [juju](https://juju.ubuntu.com) project, and is based on a pure Go\nport of the well-known [libyaml](http://pyyaml.org/wiki/LibYAML) C library to\nparse and generate YAML data quickly and reliably.\n\n\n## Project Status\n\nThis project started as a fork of the extremely popular [go-yaml](\nhttps://github.com/go-yaml/yaml/)\nproject, and is being maintained by the official [YAML organization](\nhttps://github.com/yaml/).\n\nThe YAML team took over ongoing maintenance and development of the project after\ndiscussion with go-yaml's author, @niemeyer, following his decision to\n[label the project repository as \"unmaintained\"](\nhttps://github.com/go-yaml/yaml/blob/944c86a7d2/README.md) in April 2025.\n\nWe have put together a team of dedicated maintainers including representatives\nof go-yaml's most important downstream projects.\n\nWe will strive to earn the trust of the various go-yaml forks to switch back to\nthis repository as their upstream.\n\nPlease [contact us](https://cloud-native.slack.com/archives/C08PPAT8PS7) if you\nwould like to contribute or be involved.\n\n\n## Compatibility\n\nThe `yaml` package supports most of YAML 1.2, but preserves some behavior from\n1.1 for backwards compatibility.\n\nSpecifically, v3 of the `yaml` package:\n\n* Supports YAML 1.1 bools (`yes`/`no`, `on`/`off`) as long as they are being\n  decoded into a typed bool value.\n  Otherwise they behave as a string.\n  Booleans in YAML 1.2 are `true`/`false` only.\n* Supports octals encoded and decoded as `0777` per YAML 1.1, rather than\n  `0o777` as specified in YAML 1.2, because most parsers still use the old\n  format.\n  Octals in the `0o777` format are supported though, so new files work.\n* Does not support base-60 floats.\n  These are gone from YAML 1.2, and were actually never supported by this\n  package as it's clearly a poor choice.\n\n\n## Installation and Usage\n\nThe import path for the package is *go.yaml.in/yaml/v3*.\n\nTo install it, run:\n\n```bash\ngo get go.yaml.in/yaml/v3\n```\n\n\n## API Documentation\n\nSee: <https://pkg.go.dev/go.yaml.in/yaml/v3>\n\n\n## API Stability\n\nThe package API for yaml v3 will remain stable as described in [gopkg.in](\nhttps://gopkg.in).\n\n\n## Example\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\n\t\"go.yaml.in/yaml/v3\"\n)\n\nvar data = `\na: Easy!\nb:\n  c: 2\n  d: [3, 4]\n`\n\n// Note: struct fields must be public in order for unmarshal to\n// correctly populate the data.\ntype T struct {\n\tA string\n\tB struct {\n\t\tRenamedC int   `yaml:\"c\"`\n\t\tD\t[]int `yaml:\",flow\"`\n\t}\n}\n\nfunc main() {\n\tt := T{}\n\n\terr := yaml.Unmarshal([]byte(data), &t)\n\tif err != nil {\n\t\tlog.Fatalf(\"error: %v\", err)\n\t}\n\tfmt.Printf(\"--- t:\\n%v\\n\\n\", t)\n\n\td, err := yaml.Marshal(&t)\n\tif err != nil {\n\t\tlog.Fatalf(\"error: %v\", err)\n\t}\n\tfmt.Printf(\"--- t dump:\\n%s\\n\\n\", string(d))\n\n\tm := make(map[interface{}]interface{})\n\n\terr = yaml.Unmarshal([]byte(data), &m)\n\tif err != nil {\n\t\tlog.Fatalf(\"error: %v\", err)\n\t}\n\tfmt.Printf(\"--- m:\\n%v\\n\\n\", m)\n\n\td, err = yaml.Marshal(&m)\n\tif err != nil {\n\t\tlog.Fatalf(\"error: %v\", err)\n\t}\n\tfmt.Printf(\"--- m dump:\\n%s\\n\\n\", string(d))\n}\n```\n\nThis example will generate the following output:\n\n```\n--- t:\n{Easy! {2 [3 4]}}\n\n--- t dump:\na: Easy!\nb:\n  c: 2\n  d: [3, 4]\n\n\n--- m:\nmap[a:Easy! b:map[c:2 d:[3 4]]]\n\n--- m dump:\na: Easy!\nb:\n  c: 2\n  d:\n  - 3\n  - 4\n```\n\n\n## License\n\nThe yaml package is licensed under the MIT and Apache License 2.0 licenses.\nPlease see the LICENSE file for details.\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/apic.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n// Copyright (c) 2006-2010 Kirill Simonov\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\npackage yaml\n\nimport (\n\t\"io\"\n)\n\nfunc yaml_insert_token(parser *yaml_parser_t, pos int, token *yaml_token_t) {\n\t//fmt.Println(\"yaml_insert_token\", \"pos:\", pos, \"typ:\", token.typ, \"head:\", parser.tokens_head, \"len:\", len(parser.tokens))\n\n\t// Check if we can move the queue at the beginning of the buffer.\n\tif parser.tokens_head > 0 && len(parser.tokens) == cap(parser.tokens) {\n\t\tif parser.tokens_head != len(parser.tokens) {\n\t\t\tcopy(parser.tokens, parser.tokens[parser.tokens_head:])\n\t\t}\n\t\tparser.tokens = parser.tokens[:len(parser.tokens)-parser.tokens_head]\n\t\tparser.tokens_head = 0\n\t}\n\tparser.tokens = append(parser.tokens, *token)\n\tif pos < 0 {\n\t\treturn\n\t}\n\tcopy(parser.tokens[parser.tokens_head+pos+1:], parser.tokens[parser.tokens_head+pos:])\n\tparser.tokens[parser.tokens_head+pos] = *token\n}\n\n// Create a new parser object.\nfunc yaml_parser_initialize(parser *yaml_parser_t) bool {\n\t*parser = yaml_parser_t{\n\t\traw_buffer: make([]byte, 0, input_raw_buffer_size),\n\t\tbuffer:     make([]byte, 0, input_buffer_size),\n\t}\n\treturn true\n}\n\n// Destroy a parser object.\nfunc yaml_parser_delete(parser *yaml_parser_t) {\n\t*parser = yaml_parser_t{}\n}\n\n// String read handler.\nfunc yaml_string_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {\n\tif parser.input_pos == len(parser.input) {\n\t\treturn 0, io.EOF\n\t}\n\tn = copy(buffer, parser.input[parser.input_pos:])\n\tparser.input_pos += n\n\treturn n, nil\n}\n\n// Reader read handler.\nfunc yaml_reader_read_handler(parser *yaml_parser_t, buffer []byte) (n int, err error) {\n\treturn parser.input_reader.Read(buffer)\n}\n\n// Set a string input.\nfunc yaml_parser_set_input_string(parser *yaml_parser_t, input []byte) {\n\tif parser.read_handler != nil {\n\t\tpanic(\"must set the input source only once\")\n\t}\n\tparser.read_handler = yaml_string_read_handler\n\tparser.input = input\n\tparser.input_pos = 0\n}\n\n// Set a file input.\nfunc yaml_parser_set_input_reader(parser *yaml_parser_t, r io.Reader) {\n\tif parser.read_handler != nil {\n\t\tpanic(\"must set the input source only once\")\n\t}\n\tparser.read_handler = yaml_reader_read_handler\n\tparser.input_reader = r\n}\n\n// Set the source encoding.\nfunc yaml_parser_set_encoding(parser *yaml_parser_t, encoding yaml_encoding_t) {\n\tif parser.encoding != yaml_ANY_ENCODING {\n\t\tpanic(\"must set the encoding only once\")\n\t}\n\tparser.encoding = encoding\n}\n\n// Create a new emitter object.\nfunc yaml_emitter_initialize(emitter *yaml_emitter_t) {\n\t*emitter = yaml_emitter_t{\n\t\tbuffer:     make([]byte, output_buffer_size),\n\t\traw_buffer: make([]byte, 0, output_raw_buffer_size),\n\t\tstates:     make([]yaml_emitter_state_t, 0, initial_stack_size),\n\t\tevents:     make([]yaml_event_t, 0, initial_queue_size),\n\t\tbest_width: -1,\n\t}\n}\n\n// Destroy an emitter object.\nfunc yaml_emitter_delete(emitter *yaml_emitter_t) {\n\t*emitter = yaml_emitter_t{}\n}\n\n// String write handler.\nfunc yaml_string_write_handler(emitter *yaml_emitter_t, buffer []byte) error {\n\t*emitter.output_buffer = append(*emitter.output_buffer, buffer...)\n\treturn nil\n}\n\n// yaml_writer_write_handler uses emitter.output_writer to write the\n// emitted text.\nfunc yaml_writer_write_handler(emitter *yaml_emitter_t, buffer []byte) error {\n\t_, err := emitter.output_writer.Write(buffer)\n\treturn err\n}\n\n// Set a string output.\nfunc yaml_emitter_set_output_string(emitter *yaml_emitter_t, output_buffer *[]byte) {\n\tif emitter.write_handler != nil {\n\t\tpanic(\"must set the output target only once\")\n\t}\n\temitter.write_handler = yaml_string_write_handler\n\temitter.output_buffer = output_buffer\n}\n\n// Set a file output.\nfunc yaml_emitter_set_output_writer(emitter *yaml_emitter_t, w io.Writer) {\n\tif emitter.write_handler != nil {\n\t\tpanic(\"must set the output target only once\")\n\t}\n\temitter.write_handler = yaml_writer_write_handler\n\temitter.output_writer = w\n}\n\n// Set the output encoding.\nfunc yaml_emitter_set_encoding(emitter *yaml_emitter_t, encoding yaml_encoding_t) {\n\tif emitter.encoding != yaml_ANY_ENCODING {\n\t\tpanic(\"must set the output encoding only once\")\n\t}\n\temitter.encoding = encoding\n}\n\n// Set the canonical output style.\nfunc yaml_emitter_set_canonical(emitter *yaml_emitter_t, canonical bool) {\n\temitter.canonical = canonical\n}\n\n// Set the indentation increment.\nfunc yaml_emitter_set_indent(emitter *yaml_emitter_t, indent int) {\n\tif indent < 2 || indent > 9 {\n\t\tindent = 2\n\t}\n\temitter.best_indent = indent\n}\n\n// Set the preferred line width.\nfunc yaml_emitter_set_width(emitter *yaml_emitter_t, width int) {\n\tif width < 0 {\n\t\twidth = -1\n\t}\n\temitter.best_width = width\n}\n\n// Set if unescaped non-ASCII characters are allowed.\nfunc yaml_emitter_set_unicode(emitter *yaml_emitter_t, unicode bool) {\n\temitter.unicode = unicode\n}\n\n// Set the preferred line break character.\nfunc yaml_emitter_set_break(emitter *yaml_emitter_t, line_break yaml_break_t) {\n\temitter.line_break = line_break\n}\n\n///*\n// * Destroy a token object.\n// */\n//\n//YAML_DECLARE(void)\n//yaml_token_delete(yaml_token_t *token)\n//{\n//    assert(token);  // Non-NULL token object expected.\n//\n//    switch (token.type)\n//    {\n//        case YAML_TAG_DIRECTIVE_TOKEN:\n//            yaml_free(token.data.tag_directive.handle);\n//            yaml_free(token.data.tag_directive.prefix);\n//            break;\n//\n//        case YAML_ALIAS_TOKEN:\n//            yaml_free(token.data.alias.value);\n//            break;\n//\n//        case YAML_ANCHOR_TOKEN:\n//            yaml_free(token.data.anchor.value);\n//            break;\n//\n//        case YAML_TAG_TOKEN:\n//            yaml_free(token.data.tag.handle);\n//            yaml_free(token.data.tag.suffix);\n//            break;\n//\n//        case YAML_SCALAR_TOKEN:\n//            yaml_free(token.data.scalar.value);\n//            break;\n//\n//        default:\n//            break;\n//    }\n//\n//    memset(token, 0, sizeof(yaml_token_t));\n//}\n//\n///*\n// * Check if a string is a valid UTF-8 sequence.\n// *\n// * Check 'reader.c' for more details on UTF-8 encoding.\n// */\n//\n//static int\n//yaml_check_utf8(yaml_char_t *start, size_t length)\n//{\n//    yaml_char_t *end = start+length;\n//    yaml_char_t *pointer = start;\n//\n//    while (pointer < end) {\n//        unsigned char octet;\n//        unsigned int width;\n//        unsigned int value;\n//        size_t k;\n//\n//        octet = pointer[0];\n//        width = (octet & 0x80) == 0x00 ? 1 :\n//                (octet & 0xE0) == 0xC0 ? 2 :\n//                (octet & 0xF0) == 0xE0 ? 3 :\n//                (octet & 0xF8) == 0xF0 ? 4 : 0;\n//        value = (octet & 0x80) == 0x00 ? octet & 0x7F :\n//                (octet & 0xE0) == 0xC0 ? octet & 0x1F :\n//                (octet & 0xF0) == 0xE0 ? octet & 0x0F :\n//                (octet & 0xF8) == 0xF0 ? octet & 0x07 : 0;\n//        if (!width) return 0;\n//        if (pointer+width > end) return 0;\n//        for (k = 1; k < width; k ++) {\n//            octet = pointer[k];\n//            if ((octet & 0xC0) != 0x80) return 0;\n//            value = (value << 6) + (octet & 0x3F);\n//        }\n//        if (!((width == 1) ||\n//            (width == 2 && value >= 0x80) ||\n//            (width == 3 && value >= 0x800) ||\n//            (width == 4 && value >= 0x10000))) return 0;\n//\n//        pointer += width;\n//    }\n//\n//    return 1;\n//}\n//\n\n// Create STREAM-START.\nfunc yaml_stream_start_event_initialize(event *yaml_event_t, encoding yaml_encoding_t) {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_STREAM_START_EVENT,\n\t\tencoding: encoding,\n\t}\n}\n\n// Create STREAM-END.\nfunc yaml_stream_end_event_initialize(event *yaml_event_t) {\n\t*event = yaml_event_t{\n\t\ttyp: yaml_STREAM_END_EVENT,\n\t}\n}\n\n// Create DOCUMENT-START.\nfunc yaml_document_start_event_initialize(\n\tevent *yaml_event_t,\n\tversion_directive *yaml_version_directive_t,\n\ttag_directives []yaml_tag_directive_t,\n\timplicit bool,\n) {\n\t*event = yaml_event_t{\n\t\ttyp:               yaml_DOCUMENT_START_EVENT,\n\t\tversion_directive: version_directive,\n\t\ttag_directives:    tag_directives,\n\t\timplicit:          implicit,\n\t}\n}\n\n// Create DOCUMENT-END.\nfunc yaml_document_end_event_initialize(event *yaml_event_t, implicit bool) {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_DOCUMENT_END_EVENT,\n\t\timplicit: implicit,\n\t}\n}\n\n// Create ALIAS.\nfunc yaml_alias_event_initialize(event *yaml_event_t, anchor []byte) bool {\n\t*event = yaml_event_t{\n\t\ttyp:    yaml_ALIAS_EVENT,\n\t\tanchor: anchor,\n\t}\n\treturn true\n}\n\n// Create SCALAR.\nfunc yaml_scalar_event_initialize(event *yaml_event_t, anchor, tag, value []byte, plain_implicit, quoted_implicit bool, style yaml_scalar_style_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:             yaml_SCALAR_EVENT,\n\t\tanchor:          anchor,\n\t\ttag:             tag,\n\t\tvalue:           value,\n\t\timplicit:        plain_implicit,\n\t\tquoted_implicit: quoted_implicit,\n\t\tstyle:           yaml_style_t(style),\n\t}\n\treturn true\n}\n\n// Create SEQUENCE-START.\nfunc yaml_sequence_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_sequence_style_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_SEQUENCE_START_EVENT,\n\t\tanchor:   anchor,\n\t\ttag:      tag,\n\t\timplicit: implicit,\n\t\tstyle:    yaml_style_t(style),\n\t}\n\treturn true\n}\n\n// Create SEQUENCE-END.\nfunc yaml_sequence_end_event_initialize(event *yaml_event_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp: yaml_SEQUENCE_END_EVENT,\n\t}\n\treturn true\n}\n\n// Create MAPPING-START.\nfunc yaml_mapping_start_event_initialize(event *yaml_event_t, anchor, tag []byte, implicit bool, style yaml_mapping_style_t) {\n\t*event = yaml_event_t{\n\t\ttyp:      yaml_MAPPING_START_EVENT,\n\t\tanchor:   anchor,\n\t\ttag:      tag,\n\t\timplicit: implicit,\n\t\tstyle:    yaml_style_t(style),\n\t}\n}\n\n// Create MAPPING-END.\nfunc yaml_mapping_end_event_initialize(event *yaml_event_t) {\n\t*event = yaml_event_t{\n\t\ttyp: yaml_MAPPING_END_EVENT,\n\t}\n}\n\n// Destroy an event object.\nfunc yaml_event_delete(event *yaml_event_t) {\n\t*event = yaml_event_t{}\n}\n\n///*\n// * Create a document object.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_initialize(document *yaml_document_t,\n//        version_directive *yaml_version_directive_t,\n//        tag_directives_start *yaml_tag_directive_t,\n//        tag_directives_end *yaml_tag_directive_t,\n//        start_implicit int, end_implicit int)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    struct {\n//        start *yaml_node_t\n//        end *yaml_node_t\n//        top *yaml_node_t\n//    } nodes = { NULL, NULL, NULL }\n//    version_directive_copy *yaml_version_directive_t = NULL\n//    struct {\n//        start *yaml_tag_directive_t\n//        end *yaml_tag_directive_t\n//        top *yaml_tag_directive_t\n//    } tag_directives_copy = { NULL, NULL, NULL }\n//    value yaml_tag_directive_t = { NULL, NULL }\n//    mark yaml_mark_t = { 0, 0, 0 }\n//\n//    assert(document) // Non-NULL document object is expected.\n//    assert((tag_directives_start && tag_directives_end) ||\n//            (tag_directives_start == tag_directives_end))\n//                            // Valid tag directives are expected.\n//\n//    if (!STACK_INIT(&context, nodes, INITIAL_STACK_SIZE)) goto error\n//\n//    if (version_directive) {\n//        version_directive_copy = yaml_malloc(sizeof(yaml_version_directive_t))\n//        if (!version_directive_copy) goto error\n//        version_directive_copy.major = version_directive.major\n//        version_directive_copy.minor = version_directive.minor\n//    }\n//\n//    if (tag_directives_start != tag_directives_end) {\n//        tag_directive *yaml_tag_directive_t\n//        if (!STACK_INIT(&context, tag_directives_copy, INITIAL_STACK_SIZE))\n//            goto error\n//        for (tag_directive = tag_directives_start\n//                tag_directive != tag_directives_end; tag_directive ++) {\n//            assert(tag_directive.handle)\n//            assert(tag_directive.prefix)\n//            if (!yaml_check_utf8(tag_directive.handle,\n//                        strlen((char *)tag_directive.handle)))\n//                goto error\n//            if (!yaml_check_utf8(tag_directive.prefix,\n//                        strlen((char *)tag_directive.prefix)))\n//                goto error\n//            value.handle = yaml_strdup(tag_directive.handle)\n//            value.prefix = yaml_strdup(tag_directive.prefix)\n//            if (!value.handle || !value.prefix) goto error\n//            if (!PUSH(&context, tag_directives_copy, value))\n//                goto error\n//            value.handle = NULL\n//            value.prefix = NULL\n//        }\n//    }\n//\n//    DOCUMENT_INIT(*document, nodes.start, nodes.end, version_directive_copy,\n//            tag_directives_copy.start, tag_directives_copy.top,\n//            start_implicit, end_implicit, mark, mark)\n//\n//    return 1\n//\n//error:\n//    STACK_DEL(&context, nodes)\n//    yaml_free(version_directive_copy)\n//    while (!STACK_EMPTY(&context, tag_directives_copy)) {\n//        value yaml_tag_directive_t = POP(&context, tag_directives_copy)\n//        yaml_free(value.handle)\n//        yaml_free(value.prefix)\n//    }\n//    STACK_DEL(&context, tag_directives_copy)\n//    yaml_free(value.handle)\n//    yaml_free(value.prefix)\n//\n//    return 0\n//}\n//\n///*\n// * Destroy a document object.\n// */\n//\n//YAML_DECLARE(void)\n//yaml_document_delete(document *yaml_document_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    tag_directive *yaml_tag_directive_t\n//\n//    context.error = YAML_NO_ERROR // Eliminate a compiler warning.\n//\n//    assert(document) // Non-NULL document object is expected.\n//\n//    while (!STACK_EMPTY(&context, document.nodes)) {\n//        node yaml_node_t = POP(&context, document.nodes)\n//        yaml_free(node.tag)\n//        switch (node.type) {\n//            case YAML_SCALAR_NODE:\n//                yaml_free(node.data.scalar.value)\n//                break\n//            case YAML_SEQUENCE_NODE:\n//                STACK_DEL(&context, node.data.sequence.items)\n//                break\n//            case YAML_MAPPING_NODE:\n//                STACK_DEL(&context, node.data.mapping.pairs)\n//                break\n//            default:\n//                assert(0) // Should not happen.\n//        }\n//    }\n//    STACK_DEL(&context, document.nodes)\n//\n//    yaml_free(document.version_directive)\n//    for (tag_directive = document.tag_directives.start\n//            tag_directive != document.tag_directives.end\n//            tag_directive++) {\n//        yaml_free(tag_directive.handle)\n//        yaml_free(tag_directive.prefix)\n//    }\n//    yaml_free(document.tag_directives.start)\n//\n//    memset(document, 0, sizeof(yaml_document_t))\n//}\n//\n///**\n// * Get a document node.\n// */\n//\n//YAML_DECLARE(yaml_node_t *)\n//yaml_document_get_node(document *yaml_document_t, index int)\n//{\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (index > 0 && document.nodes.start + index <= document.nodes.top) {\n//        return document.nodes.start + index - 1\n//    }\n//    return NULL\n//}\n//\n///**\n// * Get the root object.\n// */\n//\n//YAML_DECLARE(yaml_node_t *)\n//yaml_document_get_root_node(document *yaml_document_t)\n//{\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (document.nodes.top != document.nodes.start) {\n//        return document.nodes.start\n//    }\n//    return NULL\n//}\n//\n///*\n// * Add a scalar node to a document.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_add_scalar(document *yaml_document_t,\n//        tag *yaml_char_t, value *yaml_char_t, length int,\n//        style yaml_scalar_style_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    tag_copy *yaml_char_t = NULL\n//    value_copy *yaml_char_t = NULL\n//    node yaml_node_t\n//\n//    assert(document) // Non-NULL document object is expected.\n//    assert(value) // Non-NULL value is expected.\n//\n//    if (!tag) {\n//        tag = (yaml_char_t *)YAML_DEFAULT_SCALAR_TAG\n//    }\n//\n//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error\n//    tag_copy = yaml_strdup(tag)\n//    if (!tag_copy) goto error\n//\n//    if (length < 0) {\n//        length = strlen((char *)value)\n//    }\n//\n//    if (!yaml_check_utf8(value, length)) goto error\n//    value_copy = yaml_malloc(length+1)\n//    if (!value_copy) goto error\n//    memcpy(value_copy, value, length)\n//    value_copy[length] = '\\0'\n//\n//    SCALAR_NODE_INIT(node, tag_copy, value_copy, length, style, mark, mark)\n//    if (!PUSH(&context, document.nodes, node)) goto error\n//\n//    return document.nodes.top - document.nodes.start\n//\n//error:\n//    yaml_free(tag_copy)\n//    yaml_free(value_copy)\n//\n//    return 0\n//}\n//\n///*\n// * Add a sequence node to a document.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_add_sequence(document *yaml_document_t,\n//        tag *yaml_char_t, style yaml_sequence_style_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    tag_copy *yaml_char_t = NULL\n//    struct {\n//        start *yaml_node_item_t\n//        end *yaml_node_item_t\n//        top *yaml_node_item_t\n//    } items = { NULL, NULL, NULL }\n//    node yaml_node_t\n//\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (!tag) {\n//        tag = (yaml_char_t *)YAML_DEFAULT_SEQUENCE_TAG\n//    }\n//\n//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error\n//    tag_copy = yaml_strdup(tag)\n//    if (!tag_copy) goto error\n//\n//    if (!STACK_INIT(&context, items, INITIAL_STACK_SIZE)) goto error\n//\n//    SEQUENCE_NODE_INIT(node, tag_copy, items.start, items.end,\n//            style, mark, mark)\n//    if (!PUSH(&context, document.nodes, node)) goto error\n//\n//    return document.nodes.top - document.nodes.start\n//\n//error:\n//    STACK_DEL(&context, items)\n//    yaml_free(tag_copy)\n//\n//    return 0\n//}\n//\n///*\n// * Add a mapping node to a document.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_add_mapping(document *yaml_document_t,\n//        tag *yaml_char_t, style yaml_mapping_style_t)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//    mark yaml_mark_t = { 0, 0, 0 }\n//    tag_copy *yaml_char_t = NULL\n//    struct {\n//        start *yaml_node_pair_t\n//        end *yaml_node_pair_t\n//        top *yaml_node_pair_t\n//    } pairs = { NULL, NULL, NULL }\n//    node yaml_node_t\n//\n//    assert(document) // Non-NULL document object is expected.\n//\n//    if (!tag) {\n//        tag = (yaml_char_t *)YAML_DEFAULT_MAPPING_TAG\n//    }\n//\n//    if (!yaml_check_utf8(tag, strlen((char *)tag))) goto error\n//    tag_copy = yaml_strdup(tag)\n//    if (!tag_copy) goto error\n//\n//    if (!STACK_INIT(&context, pairs, INITIAL_STACK_SIZE)) goto error\n//\n//    MAPPING_NODE_INIT(node, tag_copy, pairs.start, pairs.end,\n//            style, mark, mark)\n//    if (!PUSH(&context, document.nodes, node)) goto error\n//\n//    return document.nodes.top - document.nodes.start\n//\n//error:\n//    STACK_DEL(&context, pairs)\n//    yaml_free(tag_copy)\n//\n//    return 0\n//}\n//\n///*\n// * Append an item to a sequence node.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_append_sequence_item(document *yaml_document_t,\n//        sequence int, item int)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//\n//    assert(document) // Non-NULL document is required.\n//    assert(sequence > 0\n//            && document.nodes.start + sequence <= document.nodes.top)\n//                            // Valid sequence id is required.\n//    assert(document.nodes.start[sequence-1].type == YAML_SEQUENCE_NODE)\n//                            // A sequence node is required.\n//    assert(item > 0 && document.nodes.start + item <= document.nodes.top)\n//                            // Valid item id is required.\n//\n//    if (!PUSH(&context,\n//                document.nodes.start[sequence-1].data.sequence.items, item))\n//        return 0\n//\n//    return 1\n//}\n//\n///*\n// * Append a pair of a key and a value to a mapping node.\n// */\n//\n//YAML_DECLARE(int)\n//yaml_document_append_mapping_pair(document *yaml_document_t,\n//        mapping int, key int, value int)\n//{\n//    struct {\n//        error yaml_error_type_t\n//    } context\n//\n//    pair yaml_node_pair_t\n//\n//    assert(document) // Non-NULL document is required.\n//    assert(mapping > 0\n//            && document.nodes.start + mapping <= document.nodes.top)\n//                            // Valid mapping id is required.\n//    assert(document.nodes.start[mapping-1].type == YAML_MAPPING_NODE)\n//                            // A mapping node is required.\n//    assert(key > 0 && document.nodes.start + key <= document.nodes.top)\n//                            // Valid key id is required.\n//    assert(value > 0 && document.nodes.start + value <= document.nodes.top)\n//                            // Valid value id is required.\n//\n//    pair.key = key\n//    pair.value = value\n//\n//    if (!PUSH(&context,\n//                document.nodes.start[mapping-1].data.mapping.pairs, pair))\n//        return 0\n//\n//    return 1\n//}\n//\n//\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/decode.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage yaml\n\nimport (\n\t\"encoding\"\n\t\"encoding/base64\"\n\t\"fmt\"\n\t\"io\"\n\t\"math\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"time\"\n)\n\n// ----------------------------------------------------------------------------\n// Parser, produces a node tree out of a libyaml event stream.\n\ntype parser struct {\n\tparser   yaml_parser_t\n\tevent    yaml_event_t\n\tdoc      *Node\n\tanchors  map[string]*Node\n\tdoneInit bool\n\ttextless bool\n}\n\nfunc newParser(b []byte) *parser {\n\tp := parser{}\n\tif !yaml_parser_initialize(&p.parser) {\n\t\tpanic(\"failed to initialize YAML emitter\")\n\t}\n\tif len(b) == 0 {\n\t\tb = []byte{'\\n'}\n\t}\n\tyaml_parser_set_input_string(&p.parser, b)\n\treturn &p\n}\n\nfunc newParserFromReader(r io.Reader) *parser {\n\tp := parser{}\n\tif !yaml_parser_initialize(&p.parser) {\n\t\tpanic(\"failed to initialize YAML emitter\")\n\t}\n\tyaml_parser_set_input_reader(&p.parser, r)\n\treturn &p\n}\n\nfunc (p *parser) init() {\n\tif p.doneInit {\n\t\treturn\n\t}\n\tp.anchors = make(map[string]*Node)\n\tp.expect(yaml_STREAM_START_EVENT)\n\tp.doneInit = true\n}\n\nfunc (p *parser) destroy() {\n\tif p.event.typ != yaml_NO_EVENT {\n\t\tyaml_event_delete(&p.event)\n\t}\n\tyaml_parser_delete(&p.parser)\n}\n\n// expect consumes an event from the event stream and\n// checks that it's of the expected type.\nfunc (p *parser) expect(e yaml_event_type_t) {\n\tif p.event.typ == yaml_NO_EVENT {\n\t\tif !yaml_parser_parse(&p.parser, &p.event) {\n\t\t\tp.fail()\n\t\t}\n\t}\n\tif p.event.typ == yaml_STREAM_END_EVENT {\n\t\tfailf(\"attempted to go past the end of stream; corrupted value?\")\n\t}\n\tif p.event.typ != e {\n\t\tp.parser.problem = fmt.Sprintf(\"expected %s event but got %s\", e, p.event.typ)\n\t\tp.fail()\n\t}\n\tyaml_event_delete(&p.event)\n\tp.event.typ = yaml_NO_EVENT\n}\n\n// peek peeks at the next event in the event stream,\n// puts the results into p.event and returns the event type.\nfunc (p *parser) peek() yaml_event_type_t {\n\tif p.event.typ != yaml_NO_EVENT {\n\t\treturn p.event.typ\n\t}\n\t// It's curious choice from the underlying API to generally return a\n\t// positive result on success, but on this case return true in an error\n\t// scenario. This was the source of bugs in the past (issue #666).\n\tif !yaml_parser_parse(&p.parser, &p.event) || p.parser.error != yaml_NO_ERROR {\n\t\tp.fail()\n\t}\n\treturn p.event.typ\n}\n\nfunc (p *parser) fail() {\n\tvar where string\n\tvar line int\n\tif p.parser.context_mark.line != 0 {\n\t\tline = p.parser.context_mark.line\n\t\t// Scanner errors don't iterate line before returning error\n\t\tif p.parser.error == yaml_SCANNER_ERROR {\n\t\t\tline++\n\t\t}\n\t} else if p.parser.problem_mark.line != 0 {\n\t\tline = p.parser.problem_mark.line\n\t\t// Scanner errors don't iterate line before returning error\n\t\tif p.parser.error == yaml_SCANNER_ERROR {\n\t\t\tline++\n\t\t}\n\t}\n\tif line != 0 {\n\t\twhere = \"line \" + strconv.Itoa(line) + \": \"\n\t}\n\tvar msg string\n\tif len(p.parser.problem) > 0 {\n\t\tmsg = p.parser.problem\n\t} else {\n\t\tmsg = \"unknown problem parsing YAML content\"\n\t}\n\tfailf(\"%s%s\", where, msg)\n}\n\nfunc (p *parser) anchor(n *Node, anchor []byte) {\n\tif anchor != nil {\n\t\tn.Anchor = string(anchor)\n\t\tp.anchors[n.Anchor] = n\n\t}\n}\n\nfunc (p *parser) parse() *Node {\n\tp.init()\n\tswitch p.peek() {\n\tcase yaml_SCALAR_EVENT:\n\t\treturn p.scalar()\n\tcase yaml_ALIAS_EVENT:\n\t\treturn p.alias()\n\tcase yaml_MAPPING_START_EVENT:\n\t\treturn p.mapping()\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\treturn p.sequence()\n\tcase yaml_DOCUMENT_START_EVENT:\n\t\treturn p.document()\n\tcase yaml_STREAM_END_EVENT:\n\t\t// Happens when attempting to decode an empty buffer.\n\t\treturn nil\n\tcase yaml_TAIL_COMMENT_EVENT:\n\t\tpanic(\"internal error: unexpected tail comment event (please report)\")\n\tdefault:\n\t\tpanic(\"internal error: attempted to parse unknown event (please report): \" + p.event.typ.String())\n\t}\n}\n\nfunc (p *parser) node(kind Kind, defaultTag, tag, value string) *Node {\n\tvar style Style\n\tif tag != \"\" && tag != \"!\" {\n\t\ttag = shortTag(tag)\n\t\tstyle = TaggedStyle\n\t} else if defaultTag != \"\" {\n\t\ttag = defaultTag\n\t} else if kind == ScalarNode {\n\t\ttag, _ = resolve(\"\", value)\n\t}\n\tn := &Node{\n\t\tKind:  kind,\n\t\tTag:   tag,\n\t\tValue: value,\n\t\tStyle: style,\n\t}\n\tif !p.textless {\n\t\tn.Line = p.event.start_mark.line + 1\n\t\tn.Column = p.event.start_mark.column + 1\n\t\tn.HeadComment = string(p.event.head_comment)\n\t\tn.LineComment = string(p.event.line_comment)\n\t\tn.FootComment = string(p.event.foot_comment)\n\t}\n\treturn n\n}\n\nfunc (p *parser) parseChild(parent *Node) *Node {\n\tchild := p.parse()\n\tparent.Content = append(parent.Content, child)\n\treturn child\n}\n\nfunc (p *parser) document() *Node {\n\tn := p.node(DocumentNode, \"\", \"\", \"\")\n\tp.doc = n\n\tp.expect(yaml_DOCUMENT_START_EVENT)\n\tp.parseChild(n)\n\tif p.peek() == yaml_DOCUMENT_END_EVENT {\n\t\tn.FootComment = string(p.event.foot_comment)\n\t}\n\tp.expect(yaml_DOCUMENT_END_EVENT)\n\treturn n\n}\n\nfunc (p *parser) alias() *Node {\n\tn := p.node(AliasNode, \"\", \"\", string(p.event.anchor))\n\tn.Alias = p.anchors[n.Value]\n\tif n.Alias == nil {\n\t\tfailf(\"unknown anchor '%s' referenced\", n.Value)\n\t}\n\tp.expect(yaml_ALIAS_EVENT)\n\treturn n\n}\n\nfunc (p *parser) scalar() *Node {\n\tvar parsedStyle = p.event.scalar_style()\n\tvar nodeStyle Style\n\tswitch {\n\tcase parsedStyle&yaml_DOUBLE_QUOTED_SCALAR_STYLE != 0:\n\t\tnodeStyle = DoubleQuotedStyle\n\tcase parsedStyle&yaml_SINGLE_QUOTED_SCALAR_STYLE != 0:\n\t\tnodeStyle = SingleQuotedStyle\n\tcase parsedStyle&yaml_LITERAL_SCALAR_STYLE != 0:\n\t\tnodeStyle = LiteralStyle\n\tcase parsedStyle&yaml_FOLDED_SCALAR_STYLE != 0:\n\t\tnodeStyle = FoldedStyle\n\t}\n\tvar nodeValue = string(p.event.value)\n\tvar nodeTag = string(p.event.tag)\n\tvar defaultTag string\n\tif nodeStyle == 0 {\n\t\tif nodeValue == \"<<\" {\n\t\t\tdefaultTag = mergeTag\n\t\t}\n\t} else {\n\t\tdefaultTag = strTag\n\t}\n\tn := p.node(ScalarNode, defaultTag, nodeTag, nodeValue)\n\tn.Style |= nodeStyle\n\tp.anchor(n, p.event.anchor)\n\tp.expect(yaml_SCALAR_EVENT)\n\treturn n\n}\n\nfunc (p *parser) sequence() *Node {\n\tn := p.node(SequenceNode, seqTag, string(p.event.tag), \"\")\n\tif p.event.sequence_style()&yaml_FLOW_SEQUENCE_STYLE != 0 {\n\t\tn.Style |= FlowStyle\n\t}\n\tp.anchor(n, p.event.anchor)\n\tp.expect(yaml_SEQUENCE_START_EVENT)\n\tfor p.peek() != yaml_SEQUENCE_END_EVENT {\n\t\tp.parseChild(n)\n\t}\n\tn.LineComment = string(p.event.line_comment)\n\tn.FootComment = string(p.event.foot_comment)\n\tp.expect(yaml_SEQUENCE_END_EVENT)\n\treturn n\n}\n\nfunc (p *parser) mapping() *Node {\n\tn := p.node(MappingNode, mapTag, string(p.event.tag), \"\")\n\tblock := true\n\tif p.event.mapping_style()&yaml_FLOW_MAPPING_STYLE != 0 {\n\t\tblock = false\n\t\tn.Style |= FlowStyle\n\t}\n\tp.anchor(n, p.event.anchor)\n\tp.expect(yaml_MAPPING_START_EVENT)\n\tfor p.peek() != yaml_MAPPING_END_EVENT {\n\t\tk := p.parseChild(n)\n\t\tif block && k.FootComment != \"\" {\n\t\t\t// Must be a foot comment for the prior value when being dedented.\n\t\t\tif len(n.Content) > 2 {\n\t\t\t\tn.Content[len(n.Content)-3].FootComment = k.FootComment\n\t\t\t\tk.FootComment = \"\"\n\t\t\t}\n\t\t}\n\t\tv := p.parseChild(n)\n\t\tif k.FootComment == \"\" && v.FootComment != \"\" {\n\t\t\tk.FootComment = v.FootComment\n\t\t\tv.FootComment = \"\"\n\t\t}\n\t\tif p.peek() == yaml_TAIL_COMMENT_EVENT {\n\t\t\tif k.FootComment == \"\" {\n\t\t\t\tk.FootComment = string(p.event.foot_comment)\n\t\t\t}\n\t\t\tp.expect(yaml_TAIL_COMMENT_EVENT)\n\t\t}\n\t}\n\tn.LineComment = string(p.event.line_comment)\n\tn.FootComment = string(p.event.foot_comment)\n\tif n.Style&FlowStyle == 0 && n.FootComment != \"\" && len(n.Content) > 1 {\n\t\tn.Content[len(n.Content)-2].FootComment = n.FootComment\n\t\tn.FootComment = \"\"\n\t}\n\tp.expect(yaml_MAPPING_END_EVENT)\n\treturn n\n}\n\n// ----------------------------------------------------------------------------\n// Decoder, unmarshals a node into a provided value.\n\ntype decoder struct {\n\tdoc     *Node\n\taliases map[*Node]bool\n\tterrors []string\n\n\tstringMapType  reflect.Type\n\tgeneralMapType reflect.Type\n\n\tknownFields bool\n\tuniqueKeys  bool\n\tdecodeCount int\n\taliasCount  int\n\taliasDepth  int\n\n\tmergedFields map[interface{}]bool\n}\n\nvar (\n\tnodeType       = reflect.TypeOf(Node{})\n\tdurationType   = reflect.TypeOf(time.Duration(0))\n\tstringMapType  = reflect.TypeOf(map[string]interface{}{})\n\tgeneralMapType = reflect.TypeOf(map[interface{}]interface{}{})\n\tifaceType      = generalMapType.Elem()\n\ttimeType       = reflect.TypeOf(time.Time{})\n\tptrTimeType    = reflect.TypeOf(&time.Time{})\n)\n\nfunc newDecoder() *decoder {\n\td := &decoder{\n\t\tstringMapType:  stringMapType,\n\t\tgeneralMapType: generalMapType,\n\t\tuniqueKeys:     true,\n\t}\n\td.aliases = make(map[*Node]bool)\n\treturn d\n}\n\nfunc (d *decoder) terror(n *Node, tag string, out reflect.Value) {\n\tif n.Tag != \"\" {\n\t\ttag = n.Tag\n\t}\n\tvalue := n.Value\n\tif tag != seqTag && tag != mapTag {\n\t\tif len(value) > 10 {\n\t\t\tvalue = \" `\" + value[:7] + \"...`\"\n\t\t} else {\n\t\t\tvalue = \" `\" + value + \"`\"\n\t\t}\n\t}\n\td.terrors = append(d.terrors, fmt.Sprintf(\"line %d: cannot unmarshal %s%s into %s\", n.Line, shortTag(tag), value, out.Type()))\n}\n\nfunc (d *decoder) callUnmarshaler(n *Node, u Unmarshaler) (good bool) {\n\terr := u.UnmarshalYAML(n)\n\tif e, ok := err.(*TypeError); ok {\n\t\td.terrors = append(d.terrors, e.Errors...)\n\t\treturn false\n\t}\n\tif err != nil {\n\t\tfail(err)\n\t}\n\treturn true\n}\n\nfunc (d *decoder) callObsoleteUnmarshaler(n *Node, u obsoleteUnmarshaler) (good bool) {\n\tterrlen := len(d.terrors)\n\terr := u.UnmarshalYAML(func(v interface{}) (err error) {\n\t\tdefer handleErr(&err)\n\t\td.unmarshal(n, reflect.ValueOf(v))\n\t\tif len(d.terrors) > terrlen {\n\t\t\tissues := d.terrors[terrlen:]\n\t\t\td.terrors = d.terrors[:terrlen]\n\t\t\treturn &TypeError{issues}\n\t\t}\n\t\treturn nil\n\t})\n\tif e, ok := err.(*TypeError); ok {\n\t\td.terrors = append(d.terrors, e.Errors...)\n\t\treturn false\n\t}\n\tif err != nil {\n\t\tfail(err)\n\t}\n\treturn true\n}\n\n// d.prepare initializes and dereferences pointers and calls UnmarshalYAML\n// if a value is found to implement it.\n// It returns the initialized and dereferenced out value, whether\n// unmarshalling was already done by UnmarshalYAML, and if so whether\n// its types unmarshalled appropriately.\n//\n// If n holds a null value, prepare returns before doing anything.\nfunc (d *decoder) prepare(n *Node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) {\n\tif n.ShortTag() == nullTag {\n\t\treturn out, false, false\n\t}\n\tagain := true\n\tfor again {\n\t\tagain = false\n\t\tif out.Kind() == reflect.Ptr {\n\t\t\tif out.IsNil() {\n\t\t\t\tout.Set(reflect.New(out.Type().Elem()))\n\t\t\t}\n\t\t\tout = out.Elem()\n\t\t\tagain = true\n\t\t}\n\t\tif out.CanAddr() {\n\t\t\touti := out.Addr().Interface()\n\t\t\tif u, ok := outi.(Unmarshaler); ok {\n\t\t\t\tgood = d.callUnmarshaler(n, u)\n\t\t\t\treturn out, true, good\n\t\t\t}\n\t\t\tif u, ok := outi.(obsoleteUnmarshaler); ok {\n\t\t\t\tgood = d.callObsoleteUnmarshaler(n, u)\n\t\t\t\treturn out, true, good\n\t\t\t}\n\t\t}\n\t}\n\treturn out, false, false\n}\n\nfunc (d *decoder) fieldByIndex(n *Node, v reflect.Value, index []int) (field reflect.Value) {\n\tif n.ShortTag() == nullTag {\n\t\treturn reflect.Value{}\n\t}\n\tfor _, num := range index {\n\t\tfor {\n\t\t\tif v.Kind() == reflect.Ptr {\n\t\t\t\tif v.IsNil() {\n\t\t\t\t\tv.Set(reflect.New(v.Type().Elem()))\n\t\t\t\t}\n\t\t\t\tv = v.Elem()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tv = v.Field(num)\n\t}\n\treturn v\n}\n\nconst (\n\t// 400,000 decode operations is ~500kb of dense object declarations, or\n\t// ~5kb of dense object declarations with 10000% alias expansion\n\talias_ratio_range_low = 400000\n\n\t// 4,000,000 decode operations is ~5MB of dense object declarations, or\n\t// ~4.5MB of dense object declarations with 10% alias expansion\n\talias_ratio_range_high = 4000000\n\n\t// alias_ratio_range is the range over which we scale allowed alias ratios\n\talias_ratio_range = float64(alias_ratio_range_high - alias_ratio_range_low)\n)\n\nfunc allowedAliasRatio(decodeCount int) float64 {\n\tswitch {\n\tcase decodeCount <= alias_ratio_range_low:\n\t\t// allow 99% to come from alias expansion for small-to-medium documents\n\t\treturn 0.99\n\tcase decodeCount >= alias_ratio_range_high:\n\t\t// allow 10% to come from alias expansion for very large documents\n\t\treturn 0.10\n\tdefault:\n\t\t// scale smoothly from 99% down to 10% over the range.\n\t\t// this maps to 396,000 - 400,000 allowed alias-driven decodes over the range.\n\t\t// 400,000 decode operations is ~100MB of allocations in worst-case scenarios (single-item maps).\n\t\treturn 0.99 - 0.89*(float64(decodeCount-alias_ratio_range_low)/alias_ratio_range)\n\t}\n}\n\nfunc (d *decoder) unmarshal(n *Node, out reflect.Value) (good bool) {\n\td.decodeCount++\n\tif d.aliasDepth > 0 {\n\t\td.aliasCount++\n\t}\n\tif d.aliasCount > 100 && d.decodeCount > 1000 && float64(d.aliasCount)/float64(d.decodeCount) > allowedAliasRatio(d.decodeCount) {\n\t\tfailf(\"document contains excessive aliasing\")\n\t}\n\tif out.Type() == nodeType {\n\t\tout.Set(reflect.ValueOf(n).Elem())\n\t\treturn true\n\t}\n\tswitch n.Kind {\n\tcase DocumentNode:\n\t\treturn d.document(n, out)\n\tcase AliasNode:\n\t\treturn d.alias(n, out)\n\t}\n\tout, unmarshaled, good := d.prepare(n, out)\n\tif unmarshaled {\n\t\treturn good\n\t}\n\tswitch n.Kind {\n\tcase ScalarNode:\n\t\tgood = d.scalar(n, out)\n\tcase MappingNode:\n\t\tgood = d.mapping(n, out)\n\tcase SequenceNode:\n\t\tgood = d.sequence(n, out)\n\tcase 0:\n\t\tif n.IsZero() {\n\t\t\treturn d.null(out)\n\t\t}\n\t\tfallthrough\n\tdefault:\n\t\tfailf(\"cannot decode node with unknown kind %d\", n.Kind)\n\t}\n\treturn good\n}\n\nfunc (d *decoder) document(n *Node, out reflect.Value) (good bool) {\n\tif len(n.Content) == 1 {\n\t\td.doc = n\n\t\td.unmarshal(n.Content[0], out)\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc (d *decoder) alias(n *Node, out reflect.Value) (good bool) {\n\tif d.aliases[n] {\n\t\t// TODO this could actually be allowed in some circumstances.\n\t\tfailf(\"anchor '%s' value contains itself\", n.Value)\n\t}\n\td.aliases[n] = true\n\td.aliasDepth++\n\tgood = d.unmarshal(n.Alias, out)\n\td.aliasDepth--\n\tdelete(d.aliases, n)\n\treturn good\n}\n\nvar zeroValue reflect.Value\n\nfunc resetMap(out reflect.Value) {\n\tfor _, k := range out.MapKeys() {\n\t\tout.SetMapIndex(k, zeroValue)\n\t}\n}\n\nfunc (d *decoder) null(out reflect.Value) bool {\n\tif out.CanAddr() {\n\t\tswitch out.Kind() {\n\t\tcase reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice:\n\t\t\tout.Set(reflect.Zero(out.Type()))\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc (d *decoder) scalar(n *Node, out reflect.Value) bool {\n\tvar tag string\n\tvar resolved interface{}\n\tif n.indicatedString() {\n\t\ttag = strTag\n\t\tresolved = n.Value\n\t} else {\n\t\ttag, resolved = resolve(n.Tag, n.Value)\n\t\tif tag == binaryTag {\n\t\t\tdata, err := base64.StdEncoding.DecodeString(resolved.(string))\n\t\t\tif err != nil {\n\t\t\t\tfailf(\"!!binary value contains invalid base64 data\")\n\t\t\t}\n\t\t\tresolved = string(data)\n\t\t}\n\t}\n\tif resolved == nil {\n\t\treturn d.null(out)\n\t}\n\tif resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {\n\t\t// We've resolved to exactly the type we want, so use that.\n\t\tout.Set(resolvedv)\n\t\treturn true\n\t}\n\t// Perhaps we can use the value as a TextUnmarshaler to\n\t// set its value.\n\tif out.CanAddr() {\n\t\tu, ok := out.Addr().Interface().(encoding.TextUnmarshaler)\n\t\tif ok {\n\t\t\tvar text []byte\n\t\t\tif tag == binaryTag {\n\t\t\t\ttext = []byte(resolved.(string))\n\t\t\t} else {\n\t\t\t\t// We let any value be unmarshaled into TextUnmarshaler.\n\t\t\t\t// That might be more lax than we'd like, but the\n\t\t\t\t// TextUnmarshaler itself should bowl out any dubious values.\n\t\t\t\ttext = []byte(n.Value)\n\t\t\t}\n\t\t\terr := u.UnmarshalText(text)\n\t\t\tif err != nil {\n\t\t\t\tfail(err)\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t}\n\tswitch out.Kind() {\n\tcase reflect.String:\n\t\tif tag == binaryTag {\n\t\t\tout.SetString(resolved.(string))\n\t\t\treturn true\n\t\t}\n\t\tout.SetString(n.Value)\n\t\treturn true\n\tcase reflect.Interface:\n\t\tout.Set(reflect.ValueOf(resolved))\n\t\treturn true\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\t// This used to work in v2, but it's very unfriendly.\n\t\tisDuration := out.Type() == durationType\n\n\t\tswitch resolved := resolved.(type) {\n\t\tcase int:\n\t\t\tif !isDuration && !out.OverflowInt(int64(resolved)) {\n\t\t\t\tout.SetInt(int64(resolved))\n\t\t\t\treturn true\n\t\t\t}\n\t\tcase int64:\n\t\t\tif !isDuration && !out.OverflowInt(resolved) {\n\t\t\t\tout.SetInt(resolved)\n\t\t\t\treturn true\n\t\t\t}\n\t\tcase uint64:\n\t\t\tif !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {\n\t\t\t\tout.SetInt(int64(resolved))\n\t\t\t\treturn true\n\t\t\t}\n\t\tcase float64:\n\t\t\tif !isDuration && resolved <= math.MaxInt64 && !out.OverflowInt(int64(resolved)) {\n\t\t\t\tout.SetInt(int64(resolved))\n\t\t\t\treturn true\n\t\t\t}\n\t\tcase string:\n\t\t\tif out.Type() == durationType {\n\t\t\t\td, err := time.ParseDuration(resolved)\n\t\t\t\tif err == nil {\n\t\t\t\t\tout.SetInt(int64(d))\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase int:\n\t\t\tif resolved >= 0 && !out.OverflowUint(uint64(resolved)) {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\treturn true\n\t\t\t}\n\t\tcase int64:\n\t\t\tif resolved >= 0 && !out.OverflowUint(uint64(resolved)) {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\treturn true\n\t\t\t}\n\t\tcase uint64:\n\t\t\tif !out.OverflowUint(uint64(resolved)) {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\treturn true\n\t\t\t}\n\t\tcase float64:\n\t\t\tif resolved <= math.MaxUint64 && !out.OverflowUint(uint64(resolved)) {\n\t\t\t\tout.SetUint(uint64(resolved))\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\tcase reflect.Bool:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase bool:\n\t\t\tout.SetBool(resolved)\n\t\t\treturn true\n\t\tcase string:\n\t\t\t// This offers some compatibility with the 1.1 spec (https://yaml.org/type/bool.html).\n\t\t\t// It only works if explicitly attempting to unmarshal into a typed bool value.\n\t\t\tswitch resolved {\n\t\t\tcase \"y\", \"Y\", \"yes\", \"Yes\", \"YES\", \"on\", \"On\", \"ON\":\n\t\t\t\tout.SetBool(true)\n\t\t\t\treturn true\n\t\t\tcase \"n\", \"N\", \"no\", \"No\", \"NO\", \"off\", \"Off\", \"OFF\":\n\t\t\t\tout.SetBool(false)\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\tcase reflect.Float32, reflect.Float64:\n\t\tswitch resolved := resolved.(type) {\n\t\tcase int:\n\t\t\tout.SetFloat(float64(resolved))\n\t\t\treturn true\n\t\tcase int64:\n\t\t\tout.SetFloat(float64(resolved))\n\t\t\treturn true\n\t\tcase uint64:\n\t\t\tout.SetFloat(float64(resolved))\n\t\t\treturn true\n\t\tcase float64:\n\t\t\tout.SetFloat(resolved)\n\t\t\treturn true\n\t\t}\n\tcase reflect.Struct:\n\t\tif resolvedv := reflect.ValueOf(resolved); out.Type() == resolvedv.Type() {\n\t\t\tout.Set(resolvedv)\n\t\t\treturn true\n\t\t}\n\tcase reflect.Ptr:\n\t\tpanic(\"yaml internal error: please report the issue\")\n\t}\n\td.terror(n, tag, out)\n\treturn false\n}\n\nfunc settableValueOf(i interface{}) reflect.Value {\n\tv := reflect.ValueOf(i)\n\tsv := reflect.New(v.Type()).Elem()\n\tsv.Set(v)\n\treturn sv\n}\n\nfunc (d *decoder) sequence(n *Node, out reflect.Value) (good bool) {\n\tl := len(n.Content)\n\n\tvar iface reflect.Value\n\tswitch out.Kind() {\n\tcase reflect.Slice:\n\t\tout.Set(reflect.MakeSlice(out.Type(), l, l))\n\tcase reflect.Array:\n\t\tif l != out.Len() {\n\t\t\tfailf(\"invalid array: want %d elements but got %d\", out.Len(), l)\n\t\t}\n\tcase reflect.Interface:\n\t\t// No type hints. Will have to use a generic sequence.\n\t\tiface = out\n\t\tout = settableValueOf(make([]interface{}, l))\n\tdefault:\n\t\td.terror(n, seqTag, out)\n\t\treturn false\n\t}\n\tet := out.Type().Elem()\n\n\tj := 0\n\tfor i := 0; i < l; i++ {\n\t\te := reflect.New(et).Elem()\n\t\tif ok := d.unmarshal(n.Content[i], e); ok {\n\t\t\tout.Index(j).Set(e)\n\t\t\tj++\n\t\t}\n\t}\n\tif out.Kind() != reflect.Array {\n\t\tout.Set(out.Slice(0, j))\n\t}\n\tif iface.IsValid() {\n\t\tiface.Set(out)\n\t}\n\treturn true\n}\n\nfunc (d *decoder) mapping(n *Node, out reflect.Value) (good bool) {\n\tl := len(n.Content)\n\tif d.uniqueKeys {\n\t\tnerrs := len(d.terrors)\n\t\tfor i := 0; i < l; i += 2 {\n\t\t\tni := n.Content[i]\n\t\t\tfor j := i + 2; j < l; j += 2 {\n\t\t\t\tnj := n.Content[j]\n\t\t\t\tif ni.Kind == nj.Kind && ni.Value == nj.Value {\n\t\t\t\t\td.terrors = append(d.terrors, fmt.Sprintf(\"line %d: mapping key %#v already defined at line %d\", nj.Line, nj.Value, ni.Line))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif len(d.terrors) > nerrs {\n\t\t\treturn false\n\t\t}\n\t}\n\tswitch out.Kind() {\n\tcase reflect.Struct:\n\t\treturn d.mappingStruct(n, out)\n\tcase reflect.Map:\n\t\t// okay\n\tcase reflect.Interface:\n\t\tiface := out\n\t\tif isStringMap(n) {\n\t\t\tout = reflect.MakeMap(d.stringMapType)\n\t\t} else {\n\t\t\tout = reflect.MakeMap(d.generalMapType)\n\t\t}\n\t\tiface.Set(out)\n\tdefault:\n\t\td.terror(n, mapTag, out)\n\t\treturn false\n\t}\n\n\toutt := out.Type()\n\tkt := outt.Key()\n\tet := outt.Elem()\n\n\tstringMapType := d.stringMapType\n\tgeneralMapType := d.generalMapType\n\tif outt.Elem() == ifaceType {\n\t\tif outt.Key().Kind() == reflect.String {\n\t\t\td.stringMapType = outt\n\t\t} else if outt.Key() == ifaceType {\n\t\t\td.generalMapType = outt\n\t\t}\n\t}\n\n\tmergedFields := d.mergedFields\n\td.mergedFields = nil\n\n\tvar mergeNode *Node\n\n\tmapIsNew := false\n\tif out.IsNil() {\n\t\tout.Set(reflect.MakeMap(outt))\n\t\tmapIsNew = true\n\t}\n\tfor i := 0; i < l; i += 2 {\n\t\tif isMerge(n.Content[i]) {\n\t\t\tmergeNode = n.Content[i+1]\n\t\t\tcontinue\n\t\t}\n\t\tk := reflect.New(kt).Elem()\n\t\tif d.unmarshal(n.Content[i], k) {\n\t\t\tif mergedFields != nil {\n\t\t\t\tki := k.Interface()\n\t\t\t\tif d.getPossiblyUnhashableKey(mergedFields, ki) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\td.setPossiblyUnhashableKey(mergedFields, ki, true)\n\t\t\t}\n\t\t\tkkind := k.Kind()\n\t\t\tif kkind == reflect.Interface {\n\t\t\t\tkkind = k.Elem().Kind()\n\t\t\t}\n\t\t\tif kkind == reflect.Map || kkind == reflect.Slice {\n\t\t\t\tfailf(\"invalid map key: %#v\", k.Interface())\n\t\t\t}\n\t\t\te := reflect.New(et).Elem()\n\t\t\tif d.unmarshal(n.Content[i+1], e) || n.Content[i+1].ShortTag() == nullTag && (mapIsNew || !out.MapIndex(k).IsValid()) {\n\t\t\t\tout.SetMapIndex(k, e)\n\t\t\t}\n\t\t}\n\t}\n\n\td.mergedFields = mergedFields\n\tif mergeNode != nil {\n\t\td.merge(n, mergeNode, out)\n\t}\n\n\td.stringMapType = stringMapType\n\td.generalMapType = generalMapType\n\treturn true\n}\n\nfunc isStringMap(n *Node) bool {\n\tif n.Kind != MappingNode {\n\t\treturn false\n\t}\n\tl := len(n.Content)\n\tfor i := 0; i < l; i += 2 {\n\t\tshortTag := n.Content[i].ShortTag()\n\t\tif shortTag != strTag && shortTag != mergeTag {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) {\n\tsinfo, err := getStructInfo(out.Type())\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tvar inlineMap reflect.Value\n\tvar elemType reflect.Type\n\tif sinfo.InlineMap != -1 {\n\t\tinlineMap = out.Field(sinfo.InlineMap)\n\t\telemType = inlineMap.Type().Elem()\n\t}\n\n\tfor _, index := range sinfo.InlineUnmarshalers {\n\t\tfield := d.fieldByIndex(n, out, index)\n\t\td.prepare(n, field)\n\t}\n\n\tmergedFields := d.mergedFields\n\td.mergedFields = nil\n\tvar mergeNode *Node\n\tvar doneFields []bool\n\tif d.uniqueKeys {\n\t\tdoneFields = make([]bool, len(sinfo.FieldsList))\n\t}\n\tname := settableValueOf(\"\")\n\tl := len(n.Content)\n\tfor i := 0; i < l; i += 2 {\n\t\tni := n.Content[i]\n\t\tif isMerge(ni) {\n\t\t\tmergeNode = n.Content[i+1]\n\t\t\tcontinue\n\t\t}\n\t\tif !d.unmarshal(ni, name) {\n\t\t\tcontinue\n\t\t}\n\t\tsname := name.String()\n\t\tif mergedFields != nil {\n\t\t\tif mergedFields[sname] {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tmergedFields[sname] = true\n\t\t}\n\t\tif info, ok := sinfo.FieldsMap[sname]; ok {\n\t\t\tif d.uniqueKeys {\n\t\t\t\tif doneFields[info.Id] {\n\t\t\t\t\td.terrors = append(d.terrors, fmt.Sprintf(\"line %d: field %s already set in type %s\", ni.Line, name.String(), out.Type()))\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tdoneFields[info.Id] = true\n\t\t\t}\n\t\t\tvar field reflect.Value\n\t\t\tif info.Inline == nil {\n\t\t\t\tfield = out.Field(info.Num)\n\t\t\t} else {\n\t\t\t\tfield = d.fieldByIndex(n, out, info.Inline)\n\t\t\t}\n\t\t\td.unmarshal(n.Content[i+1], field)\n\t\t} else if sinfo.InlineMap != -1 {\n\t\t\tif inlineMap.IsNil() {\n\t\t\t\tinlineMap.Set(reflect.MakeMap(inlineMap.Type()))\n\t\t\t}\n\t\t\tvalue := reflect.New(elemType).Elem()\n\t\t\td.unmarshal(n.Content[i+1], value)\n\t\t\tinlineMap.SetMapIndex(name, value)\n\t\t} else if d.knownFields {\n\t\t\td.terrors = append(d.terrors, fmt.Sprintf(\"line %d: field %s not found in type %s\", ni.Line, name.String(), out.Type()))\n\t\t}\n\t}\n\n\td.mergedFields = mergedFields\n\tif mergeNode != nil {\n\t\td.merge(n, mergeNode, out)\n\t}\n\treturn true\n}\n\nfunc failWantMap() {\n\tfailf(\"map merge requires map or sequence of maps as the value\")\n}\n\nfunc (d *decoder) setPossiblyUnhashableKey(m map[interface{}]bool, key interface{}, value bool) {\n\tdefer func() {\n\t\tif err := recover(); err != nil {\n\t\t\tfailf(\"%v\", err)\n\t\t}\n\t}()\n\tm[key] = value\n}\n\nfunc (d *decoder) getPossiblyUnhashableKey(m map[interface{}]bool, key interface{}) bool {\n\tdefer func() {\n\t\tif err := recover(); err != nil {\n\t\t\tfailf(\"%v\", err)\n\t\t}\n\t}()\n\treturn m[key]\n}\n\nfunc (d *decoder) merge(parent *Node, merge *Node, out reflect.Value) {\n\tmergedFields := d.mergedFields\n\tif mergedFields == nil {\n\t\td.mergedFields = make(map[interface{}]bool)\n\t\tfor i := 0; i < len(parent.Content); i += 2 {\n\t\t\tk := reflect.New(ifaceType).Elem()\n\t\t\tif d.unmarshal(parent.Content[i], k) {\n\t\t\t\td.setPossiblyUnhashableKey(d.mergedFields, k.Interface(), true)\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch merge.Kind {\n\tcase MappingNode:\n\t\td.unmarshal(merge, out)\n\tcase AliasNode:\n\t\tif merge.Alias != nil && merge.Alias.Kind != MappingNode {\n\t\t\tfailWantMap()\n\t\t}\n\t\td.unmarshal(merge, out)\n\tcase SequenceNode:\n\t\tfor i := 0; i < len(merge.Content); i++ {\n\t\t\tni := merge.Content[i]\n\t\t\tif ni.Kind == AliasNode {\n\t\t\t\tif ni.Alias != nil && ni.Alias.Kind != MappingNode {\n\t\t\t\t\tfailWantMap()\n\t\t\t\t}\n\t\t\t} else if ni.Kind != MappingNode {\n\t\t\t\tfailWantMap()\n\t\t\t}\n\t\t\td.unmarshal(ni, out)\n\t\t}\n\tdefault:\n\t\tfailWantMap()\n\t}\n\n\td.mergedFields = mergedFields\n}\n\nfunc isMerge(n *Node) bool {\n\treturn n.Kind == ScalarNode && n.Value == \"<<\" && (n.Tag == \"\" || n.Tag == \"!\" || shortTag(n.Tag) == mergeTag)\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/emitterc.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n// Copyright (c) 2006-2010 Kirill Simonov\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\npackage yaml\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// Flush the buffer if needed.\nfunc flush(emitter *yaml_emitter_t) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) {\n\t\treturn yaml_emitter_flush(emitter)\n\t}\n\treturn true\n}\n\n// Put a character to the output buffer.\nfunc put(emitter *yaml_emitter_t, value byte) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\temitter.buffer[emitter.buffer_pos] = value\n\temitter.buffer_pos++\n\temitter.column++\n\treturn true\n}\n\n// Put a line break to the output buffer.\nfunc put_break(emitter *yaml_emitter_t) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\tswitch emitter.line_break {\n\tcase yaml_CR_BREAK:\n\t\temitter.buffer[emitter.buffer_pos] = '\\r'\n\t\temitter.buffer_pos += 1\n\tcase yaml_LN_BREAK:\n\t\temitter.buffer[emitter.buffer_pos] = '\\n'\n\t\temitter.buffer_pos += 1\n\tcase yaml_CRLN_BREAK:\n\t\temitter.buffer[emitter.buffer_pos+0] = '\\r'\n\t\temitter.buffer[emitter.buffer_pos+1] = '\\n'\n\t\temitter.buffer_pos += 2\n\tdefault:\n\t\tpanic(\"unknown line break setting\")\n\t}\n\tif emitter.column == 0 {\n\t\temitter.space_above = true\n\t}\n\temitter.column = 0\n\temitter.line++\n\t// [Go] Do this here and below and drop from everywhere else (see commented lines).\n\temitter.indention = true\n\treturn true\n}\n\n// Copy a character from a string into buffer.\nfunc write(emitter *yaml_emitter_t, s []byte, i *int) bool {\n\tif emitter.buffer_pos+5 >= len(emitter.buffer) && !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\tp := emitter.buffer_pos\n\tw := width(s[*i])\n\tswitch w {\n\tcase 4:\n\t\temitter.buffer[p+3] = s[*i+3]\n\t\tfallthrough\n\tcase 3:\n\t\temitter.buffer[p+2] = s[*i+2]\n\t\tfallthrough\n\tcase 2:\n\t\temitter.buffer[p+1] = s[*i+1]\n\t\tfallthrough\n\tcase 1:\n\t\temitter.buffer[p+0] = s[*i+0]\n\tdefault:\n\t\tpanic(\"unknown character width\")\n\t}\n\temitter.column++\n\temitter.buffer_pos += w\n\t*i += w\n\treturn true\n}\n\n// Write a whole string into buffer.\nfunc write_all(emitter *yaml_emitter_t, s []byte) bool {\n\tfor i := 0; i < len(s); {\n\t\tif !write(emitter, s, &i) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Copy a line break character from a string into buffer.\nfunc write_break(emitter *yaml_emitter_t, s []byte, i *int) bool {\n\tif s[*i] == '\\n' {\n\t\tif !put_break(emitter) {\n\t\t\treturn false\n\t\t}\n\t\t*i++\n\t} else {\n\t\tif !write(emitter, s, i) {\n\t\t\treturn false\n\t\t}\n\t\tif emitter.column == 0 {\n\t\t\temitter.space_above = true\n\t\t}\n\t\temitter.column = 0\n\t\temitter.line++\n\t\t// [Go] Do this here and above and drop from everywhere else (see commented lines).\n\t\temitter.indention = true\n\t}\n\treturn true\n}\n\n// Set an emitter error and return false.\nfunc yaml_emitter_set_emitter_error(emitter *yaml_emitter_t, problem string) bool {\n\temitter.error = yaml_EMITTER_ERROR\n\temitter.problem = problem\n\treturn false\n}\n\n// Emit an event.\nfunc yaml_emitter_emit(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\temitter.events = append(emitter.events, *event)\n\tfor !yaml_emitter_need_more_events(emitter) {\n\t\tevent := &emitter.events[emitter.events_head]\n\t\tif !yaml_emitter_analyze_event(emitter, event) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_state_machine(emitter, event) {\n\t\t\treturn false\n\t\t}\n\t\tyaml_event_delete(event)\n\t\temitter.events_head++\n\t}\n\treturn true\n}\n\n// Check if we need to accumulate more events before emitting.\n//\n// We accumulate extra\n//   - 1 event for DOCUMENT-START\n//   - 2 events for SEQUENCE-START\n//   - 3 events for MAPPING-START\nfunc yaml_emitter_need_more_events(emitter *yaml_emitter_t) bool {\n\tif emitter.events_head == len(emitter.events) {\n\t\treturn true\n\t}\n\tvar accumulate int\n\tswitch emitter.events[emitter.events_head].typ {\n\tcase yaml_DOCUMENT_START_EVENT:\n\t\taccumulate = 1\n\t\tbreak\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\taccumulate = 2\n\t\tbreak\n\tcase yaml_MAPPING_START_EVENT:\n\t\taccumulate = 3\n\t\tbreak\n\tdefault:\n\t\treturn false\n\t}\n\tif len(emitter.events)-emitter.events_head > accumulate {\n\t\treturn false\n\t}\n\tvar level int\n\tfor i := emitter.events_head; i < len(emitter.events); i++ {\n\t\tswitch emitter.events[i].typ {\n\t\tcase yaml_STREAM_START_EVENT, yaml_DOCUMENT_START_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT:\n\t\t\tlevel++\n\t\tcase yaml_STREAM_END_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_END_EVENT, yaml_MAPPING_END_EVENT:\n\t\t\tlevel--\n\t\t}\n\t\tif level == 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Append a directive to the directives stack.\nfunc yaml_emitter_append_tag_directive(emitter *yaml_emitter_t, value *yaml_tag_directive_t, allow_duplicates bool) bool {\n\tfor i := 0; i < len(emitter.tag_directives); i++ {\n\t\tif bytes.Equal(value.handle, emitter.tag_directives[i].handle) {\n\t\t\tif allow_duplicates {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn yaml_emitter_set_emitter_error(emitter, \"duplicate %TAG directive\")\n\t\t}\n\t}\n\n\t// [Go] Do we actually need to copy this given garbage collection\n\t// and the lack of deallocating destructors?\n\ttag_copy := yaml_tag_directive_t{\n\t\thandle: make([]byte, len(value.handle)),\n\t\tprefix: make([]byte, len(value.prefix)),\n\t}\n\tcopy(tag_copy.handle, value.handle)\n\tcopy(tag_copy.prefix, value.prefix)\n\temitter.tag_directives = append(emitter.tag_directives, tag_copy)\n\treturn true\n}\n\n// Increase the indentation level.\nfunc yaml_emitter_increase_indent_compact(emitter *yaml_emitter_t, flow, indentless bool, compact_seq bool) bool {\n\temitter.indents = append(emitter.indents, emitter.indent)\n\tif emitter.indent < 0 {\n\t\tif flow {\n\t\t\temitter.indent = emitter.best_indent\n\t\t} else {\n\t\t\temitter.indent = 0\n\t\t}\n\t} else if !indentless {\n\t\t// [Go] This was changed so that indentations are more regular.\n\t\tif emitter.states[len(emitter.states)-1] == yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE {\n\t\t\t// The first indent inside a sequence will just skip the \"- \" indicator.\n\t\t\temitter.indent += 2\n\t\t} else {\n\t\t\t// Everything else aligns to the chosen indentation.\n\t\t\temitter.indent = emitter.best_indent * ((emitter.indent + emitter.best_indent) / emitter.best_indent)\n\t\t\tif compact_seq {\n\t\t\t\t// The value compact_seq passed in is almost always set to `false` when this function is called,\n\t\t\t\t// except when we are dealing with sequence nodes. So this gets triggered to subtract 2 only when we\n\t\t\t\t// are increasing the indent to account for sequence nodes, which will be correct because we need to\n\t\t\t\t// subtract 2 to account for the - at the beginning of the sequence node.\n\t\t\t\temitter.indent = emitter.indent - 2\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// State dispatcher.\nfunc yaml_emitter_state_machine(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tswitch emitter.state {\n\tdefault:\n\tcase yaml_EMIT_STREAM_START_STATE:\n\t\treturn yaml_emitter_emit_stream_start(emitter, event)\n\n\tcase yaml_EMIT_FIRST_DOCUMENT_START_STATE:\n\t\treturn yaml_emitter_emit_document_start(emitter, event, true)\n\n\tcase yaml_EMIT_DOCUMENT_START_STATE:\n\t\treturn yaml_emitter_emit_document_start(emitter, event, false)\n\n\tcase yaml_EMIT_DOCUMENT_CONTENT_STATE:\n\t\treturn yaml_emitter_emit_document_content(emitter, event)\n\n\tcase yaml_EMIT_DOCUMENT_END_STATE:\n\t\treturn yaml_emitter_emit_document_end(emitter, event)\n\n\tcase yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE:\n\t\treturn yaml_emitter_emit_flow_sequence_item(emitter, event, true, false)\n\n\tcase yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE:\n\t\treturn yaml_emitter_emit_flow_sequence_item(emitter, event, false, true)\n\n\tcase yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE:\n\t\treturn yaml_emitter_emit_flow_sequence_item(emitter, event, false, false)\n\n\tcase yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_key(emitter, event, true, false)\n\n\tcase yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_key(emitter, event, false, true)\n\n\tcase yaml_EMIT_FLOW_MAPPING_KEY_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_key(emitter, event, false, false)\n\n\tcase yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_value(emitter, event, true)\n\n\tcase yaml_EMIT_FLOW_MAPPING_VALUE_STATE:\n\t\treturn yaml_emitter_emit_flow_mapping_value(emitter, event, false)\n\n\tcase yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE:\n\t\treturn yaml_emitter_emit_block_sequence_item(emitter, event, true)\n\n\tcase yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE:\n\t\treturn yaml_emitter_emit_block_sequence_item(emitter, event, false)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_key(emitter, event, true)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_KEY_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_key(emitter, event, false)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_value(emitter, event, true)\n\n\tcase yaml_EMIT_BLOCK_MAPPING_VALUE_STATE:\n\t\treturn yaml_emitter_emit_block_mapping_value(emitter, event, false)\n\n\tcase yaml_EMIT_END_STATE:\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"expected nothing after STREAM-END\")\n\t}\n\tpanic(\"invalid emitter state\")\n}\n\n// Expect STREAM-START.\nfunc yaml_emitter_emit_stream_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif event.typ != yaml_STREAM_START_EVENT {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"expected STREAM-START\")\n\t}\n\tif emitter.encoding == yaml_ANY_ENCODING {\n\t\temitter.encoding = event.encoding\n\t\tif emitter.encoding == yaml_ANY_ENCODING {\n\t\t\temitter.encoding = yaml_UTF8_ENCODING\n\t\t}\n\t}\n\tif emitter.best_indent < 2 || emitter.best_indent > 9 {\n\t\temitter.best_indent = 2\n\t}\n\tif emitter.best_width >= 0 && emitter.best_width <= emitter.best_indent*2 {\n\t\temitter.best_width = 80\n\t}\n\tif emitter.best_width < 0 {\n\t\temitter.best_width = 1<<31 - 1\n\t}\n\tif emitter.line_break == yaml_ANY_BREAK {\n\t\temitter.line_break = yaml_LN_BREAK\n\t}\n\n\temitter.indent = -1\n\temitter.line = 0\n\temitter.column = 0\n\temitter.whitespace = true\n\temitter.indention = true\n\temitter.space_above = true\n\temitter.foot_indent = -1\n\n\tif emitter.encoding != yaml_UTF8_ENCODING {\n\t\tif !yaml_emitter_write_bom(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.state = yaml_EMIT_FIRST_DOCUMENT_START_STATE\n\treturn true\n}\n\n// Expect DOCUMENT-START or STREAM-END.\nfunc yaml_emitter_emit_document_start(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\n\tif event.typ == yaml_DOCUMENT_START_EVENT {\n\n\t\tif event.version_directive != nil {\n\t\t\tif !yaml_emitter_analyze_version_directive(emitter, event.version_directive) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tfor i := 0; i < len(event.tag_directives); i++ {\n\t\t\ttag_directive := &event.tag_directives[i]\n\t\t\tif !yaml_emitter_analyze_tag_directive(emitter, tag_directive) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_append_tag_directive(emitter, tag_directive, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tfor i := 0; i < len(default_tag_directives); i++ {\n\t\t\ttag_directive := &default_tag_directives[i]\n\t\t\tif !yaml_emitter_append_tag_directive(emitter, tag_directive, true) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\timplicit := event.implicit\n\t\tif !first || emitter.canonical {\n\t\t\timplicit = false\n\t\t}\n\n\t\tif emitter.open_ended && (event.version_directive != nil || len(event.tag_directives) > 0) {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"...\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tif event.version_directive != nil {\n\t\t\timplicit = false\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"%YAML\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"1.1\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tif len(event.tag_directives) > 0 {\n\t\t\timplicit = false\n\t\t\tfor i := 0; i < len(event.tag_directives); i++ {\n\t\t\t\ttag_directive := &event.tag_directives[i]\n\t\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"%TAG\"), true, false, false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif !yaml_emitter_write_tag_handle(emitter, tag_directive.handle) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif !yaml_emitter_write_tag_content(emitter, tag_directive.prefix, true) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif yaml_emitter_check_empty_document(emitter) {\n\t\t\timplicit = false\n\t\t}\n\t\tif !implicit {\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"---\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif emitter.canonical || true {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif len(emitter.head_comment) > 0 {\n\t\t\tif !yaml_emitter_process_head_comment(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !put_break(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\temitter.state = yaml_EMIT_DOCUMENT_CONTENT_STATE\n\t\treturn true\n\t}\n\n\tif event.typ == yaml_STREAM_END_EVENT {\n\t\tif emitter.open_ended {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"...\"), true, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_flush(emitter) {\n\t\t\treturn false\n\t\t}\n\t\temitter.state = yaml_EMIT_END_STATE\n\t\treturn true\n\t}\n\n\treturn yaml_emitter_set_emitter_error(emitter, \"expected DOCUMENT-START or STREAM-END\")\n}\n\n// yaml_emitter_increase_indent preserves the original signature and delegates to\n// yaml_emitter_increase_indent_compact without compact-sequence indentation\nfunc yaml_emitter_increase_indent(emitter *yaml_emitter_t, flow, indentless bool) bool {\n\treturn yaml_emitter_increase_indent_compact(emitter, flow, indentless, false)\n}\n\n// yaml_emitter_process_line_comment preserves the original signature and delegates to\n// yaml_emitter_process_line_comment_linebreak passing false for linebreak\nfunc yaml_emitter_process_line_comment(emitter *yaml_emitter_t) bool {\n\treturn yaml_emitter_process_line_comment_linebreak(emitter, false)\n}\n\n// Expect the root node.\nfunc yaml_emitter_emit_document_content(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\temitter.states = append(emitter.states, yaml_EMIT_DOCUMENT_END_STATE)\n\n\tif !yaml_emitter_process_head_comment(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_emit_node(emitter, event, true, false, false, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_line_comment(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_foot_comment(emitter) {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// Expect DOCUMENT-END.\nfunc yaml_emitter_emit_document_end(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif event.typ != yaml_DOCUMENT_END_EVENT {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"expected DOCUMENT-END\")\n\t}\n\t// [Go] Force document foot separation.\n\temitter.foot_indent = 0\n\tif !yaml_emitter_process_foot_comment(emitter) {\n\t\treturn false\n\t}\n\temitter.foot_indent = -1\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif !event.implicit {\n\t\t// [Go] Allocate the slice elsewhere.\n\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"...\"), true, false, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !yaml_emitter_flush(emitter) {\n\t\treturn false\n\t}\n\temitter.state = yaml_EMIT_DOCUMENT_START_STATE\n\temitter.tag_directives = emitter.tag_directives[:0]\n\treturn true\n}\n\n// Expect a flow item node.\nfunc yaml_emitter_emit_flow_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool {\n\tif first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'['}, true, true, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_increase_indent(emitter, true, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.flow_level++\n\t}\n\n\tif event.typ == yaml_SEQUENCE_END_EVENT {\n\t\tif emitter.canonical && !first && !trail {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\temitter.flow_level--\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\tif emitter.column == 0 || emitter.canonical && !first {\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{']'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_process_line_comment(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_process_foot_comment(emitter) {\n\t\t\treturn false\n\t\t}\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\n\t\treturn true\n\t}\n\n\tif !first && !trail {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif !yaml_emitter_process_head_comment(emitter) {\n\t\treturn false\n\t}\n\tif emitter.column == 0 {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif emitter.canonical || emitter.column > emitter.best_width {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 {\n\t\temitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE)\n\t} else {\n\t\temitter.states = append(emitter.states, yaml_EMIT_FLOW_SEQUENCE_ITEM_STATE)\n\t}\n\tif !yaml_emitter_emit_node(emitter, event, false, true, false, false) {\n\t\treturn false\n\t}\n\tif len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !yaml_emitter_process_line_comment(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_foot_comment(emitter) {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// Expect a flow key node.\nfunc yaml_emitter_emit_flow_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first, trail bool) bool {\n\tif first {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'{'}, true, true, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_increase_indent(emitter, true, false) {\n\t\t\treturn false\n\t\t}\n\t\temitter.flow_level++\n\t}\n\n\tif event.typ == yaml_MAPPING_END_EVENT {\n\t\tif (emitter.canonical || len(emitter.head_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0) && !first && !trail {\n\t\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_process_head_comment(emitter) {\n\t\t\treturn false\n\t\t}\n\t\temitter.flow_level--\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\tif emitter.canonical && !first {\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'}'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_process_line_comment(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_process_foot_comment(emitter) {\n\t\t\treturn false\n\t\t}\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\t\treturn true\n\t}\n\n\tif !first && !trail {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif !yaml_emitter_process_head_comment(emitter) {\n\t\treturn false\n\t}\n\n\tif emitter.column == 0 {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif emitter.canonical || emitter.column > emitter.best_width {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif !emitter.canonical && yaml_emitter_check_simple_key(emitter) {\n\t\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE)\n\t\treturn yaml_emitter_emit_node(emitter, event, false, false, true, true)\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, false) {\n\t\treturn false\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_VALUE_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a flow value node.\nfunc yaml_emitter_emit_flow_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {\n\tif simple {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\tif emitter.canonical || emitter.column > emitter.best_width {\n\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 {\n\t\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE)\n\t} else {\n\t\temitter.states = append(emitter.states, yaml_EMIT_FLOW_MAPPING_KEY_STATE)\n\t}\n\tif !yaml_emitter_emit_node(emitter, event, false, false, true, false) {\n\t\treturn false\n\t}\n\tif len(emitter.line_comment)+len(emitter.foot_comment)+len(emitter.tail_comment) > 0 {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{','}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !yaml_emitter_process_line_comment(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_foot_comment(emitter) {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// Expect a block item node.\nfunc yaml_emitter_emit_block_sequence_item(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\t// emitter.mapping context tells us if we are currently in a mapping context.\n\t\t// emiiter.column tells us which column we are in in the yaml output. 0 is the first char of the column.\n\t\t// emitter.indentation tells us if the last character was an indentation character.\n\t\t// emitter.compact_sequence_indent tells us if '- ' is considered part of the indentation for sequence elements.\n\t\t// So, `seq` means that we are in a mapping context, and we are either at the first char of the column or\n\t\t//  the last character was not an indentation character, and we consider '- ' part of the indentation\n\t\t//  for sequence elements.\n\t\tseq := emitter.mapping_context && (emitter.column == 0 || !emitter.indention) &&\n\t\t\temitter.compact_sequence_indent\n\t\tif !yaml_emitter_increase_indent_compact(emitter, false, false, seq) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif event.typ == yaml_SEQUENCE_END_EVENT {\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\t\treturn true\n\t}\n\tif !yaml_emitter_process_head_comment(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'-'}, true, false, true) {\n\t\treturn false\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE)\n\tif !yaml_emitter_emit_node(emitter, event, false, true, false, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_line_comment(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_foot_comment(emitter) {\n\t\treturn false\n\t}\n\treturn true\n}\n\n// Expect a block key node.\nfunc yaml_emitter_emit_block_mapping_key(emitter *yaml_emitter_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\tif !yaml_emitter_increase_indent(emitter, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !yaml_emitter_process_head_comment(emitter) {\n\t\treturn false\n\t}\n\tif event.typ == yaml_MAPPING_END_EVENT {\n\t\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\t\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\t\temitter.state = emitter.states[len(emitter.states)-1]\n\t\temitter.states = emitter.states[:len(emitter.states)-1]\n\t\treturn true\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif len(emitter.line_comment) > 0 {\n\t\t// [Go] A line comment was provided for the key. That's unusual as the\n\t\t//      scanner associates line comments with the value. Either way,\n\t\t//      save the line comment and render it appropriately later.\n\t\temitter.key_line_comment = emitter.line_comment\n\t\temitter.line_comment = nil\n\t}\n\tif yaml_emitter_check_simple_key(emitter) {\n\t\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE)\n\t\treturn yaml_emitter_emit_node(emitter, event, false, false, true, true)\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'?'}, true, false, true) {\n\t\treturn false\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_VALUE_STATE)\n\treturn yaml_emitter_emit_node(emitter, event, false, false, true, false)\n}\n\n// Expect a block value node.\nfunc yaml_emitter_emit_block_mapping_value(emitter *yaml_emitter_t, event *yaml_event_t, simple bool) bool {\n\tif simple {\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{':'}, true, false, true) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif len(emitter.key_line_comment) > 0 {\n\t\t// [Go] Line comments are generally associated with the value, but when there's\n\t\t//      no value on the same line as a mapping key they end up attached to the\n\t\t//      key itself.\n\t\tif event.typ == yaml_SCALAR_EVENT {\n\t\t\tif len(emitter.line_comment) == 0 {\n\t\t\t\t// A scalar is coming and it has no line comments by itself yet,\n\t\t\t\t// so just let it handle the line comment as usual. If it has a\n\t\t\t\t// line comment, we can't have both so the one from the key is lost.\n\t\t\t\temitter.line_comment = emitter.key_line_comment\n\t\t\t\temitter.key_line_comment = nil\n\t\t\t}\n\t\t} else if event.sequence_style() != yaml_FLOW_SEQUENCE_STYLE && (event.typ == yaml_MAPPING_START_EVENT || event.typ == yaml_SEQUENCE_START_EVENT) {\n\t\t\t// An indented block follows, so write the comment right now.\n\t\t\temitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment\n\t\t\tif !yaml_emitter_process_line_comment(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.line_comment, emitter.key_line_comment = emitter.key_line_comment, emitter.line_comment\n\t\t}\n\t}\n\temitter.states = append(emitter.states, yaml_EMIT_BLOCK_MAPPING_KEY_STATE)\n\tif !yaml_emitter_emit_node(emitter, event, false, false, true, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_line_comment(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_foot_comment(emitter) {\n\t\treturn false\n\t}\n\treturn true\n}\n\nfunc yaml_emitter_silent_nil_event(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\treturn event.typ == yaml_SCALAR_EVENT && event.implicit && !emitter.canonical && len(emitter.scalar_data.value) == 0\n}\n\n// Expect a node.\nfunc yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t,\n\troot bool, sequence bool, mapping bool, simple_key bool) bool {\n\n\temitter.root_context = root\n\temitter.sequence_context = sequence\n\temitter.mapping_context = mapping\n\temitter.simple_key_context = simple_key\n\n\tswitch event.typ {\n\tcase yaml_ALIAS_EVENT:\n\t\treturn yaml_emitter_emit_alias(emitter, event)\n\tcase yaml_SCALAR_EVENT:\n\t\treturn yaml_emitter_emit_scalar(emitter, event)\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\treturn yaml_emitter_emit_sequence_start(emitter, event)\n\tcase yaml_MAPPING_START_EVENT:\n\t\treturn yaml_emitter_emit_mapping_start(emitter, event)\n\tdefault:\n\t\treturn yaml_emitter_set_emitter_error(emitter,\n\t\t\tfmt.Sprintf(\"expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS, but got %v\", event.typ))\n\t}\n}\n\n// Expect ALIAS.\nfunc yaml_emitter_emit_alias(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\temitter.state = emitter.states[len(emitter.states)-1]\n\temitter.states = emitter.states[:len(emitter.states)-1]\n\treturn true\n}\n\n// Expect SCALAR.\nfunc yaml_emitter_emit_scalar(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_select_scalar_style(emitter, event) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_tag(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_increase_indent(emitter, true, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_scalar(emitter) {\n\t\treturn false\n\t}\n\temitter.indent = emitter.indents[len(emitter.indents)-1]\n\temitter.indents = emitter.indents[:len(emitter.indents)-1]\n\temitter.state = emitter.states[len(emitter.states)-1]\n\temitter.states = emitter.states[:len(emitter.states)-1]\n\treturn true\n}\n\n// Expect SEQUENCE-START.\nfunc yaml_emitter_emit_sequence_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_tag(emitter) {\n\t\treturn false\n\t}\n\tif emitter.flow_level > 0 || emitter.canonical || event.sequence_style() == yaml_FLOW_SEQUENCE_STYLE ||\n\t\tyaml_emitter_check_empty_sequence(emitter) {\n\t\temitter.state = yaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE\n\t} else {\n\t\temitter.state = yaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE\n\t}\n\treturn true\n}\n\n// Expect MAPPING-START.\nfunc yaml_emitter_emit_mapping_start(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\tif !yaml_emitter_process_anchor(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_tag(emitter) {\n\t\treturn false\n\t}\n\tif emitter.flow_level > 0 || emitter.canonical || event.mapping_style() == yaml_FLOW_MAPPING_STYLE ||\n\t\tyaml_emitter_check_empty_mapping(emitter) {\n\t\temitter.state = yaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE\n\t} else {\n\t\temitter.state = yaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE\n\t}\n\treturn true\n}\n\n// Check if the document content is an empty scalar.\nfunc yaml_emitter_check_empty_document(emitter *yaml_emitter_t) bool {\n\treturn false // [Go] Huh?\n}\n\n// Check if the next events represent an empty sequence.\nfunc yaml_emitter_check_empty_sequence(emitter *yaml_emitter_t) bool {\n\tif len(emitter.events)-emitter.events_head < 2 {\n\t\treturn false\n\t}\n\treturn emitter.events[emitter.events_head].typ == yaml_SEQUENCE_START_EVENT &&\n\t\temitter.events[emitter.events_head+1].typ == yaml_SEQUENCE_END_EVENT\n}\n\n// Check if the next events represent an empty mapping.\nfunc yaml_emitter_check_empty_mapping(emitter *yaml_emitter_t) bool {\n\tif len(emitter.events)-emitter.events_head < 2 {\n\t\treturn false\n\t}\n\treturn emitter.events[emitter.events_head].typ == yaml_MAPPING_START_EVENT &&\n\t\temitter.events[emitter.events_head+1].typ == yaml_MAPPING_END_EVENT\n}\n\n// Check if the next node can be expressed as a simple key.\nfunc yaml_emitter_check_simple_key(emitter *yaml_emitter_t) bool {\n\tlength := 0\n\tswitch emitter.events[emitter.events_head].typ {\n\tcase yaml_ALIAS_EVENT:\n\t\tlength += len(emitter.anchor_data.anchor)\n\tcase yaml_SCALAR_EVENT:\n\t\tif emitter.scalar_data.multiline {\n\t\t\treturn false\n\t\t}\n\t\tlength += len(emitter.anchor_data.anchor) +\n\t\t\tlen(emitter.tag_data.handle) +\n\t\t\tlen(emitter.tag_data.suffix) +\n\t\t\tlen(emitter.scalar_data.value)\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\tif !yaml_emitter_check_empty_sequence(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tlength += len(emitter.anchor_data.anchor) +\n\t\t\tlen(emitter.tag_data.handle) +\n\t\t\tlen(emitter.tag_data.suffix)\n\tcase yaml_MAPPING_START_EVENT:\n\t\tif !yaml_emitter_check_empty_mapping(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tlength += len(emitter.anchor_data.anchor) +\n\t\t\tlen(emitter.tag_data.handle) +\n\t\t\tlen(emitter.tag_data.suffix)\n\tdefault:\n\t\treturn false\n\t}\n\treturn length <= 128\n}\n\n// Determine an acceptable scalar style.\nfunc yaml_emitter_select_scalar_style(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\n\tno_tag := len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0\n\tif no_tag && !event.implicit && !event.quoted_implicit {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"neither tag nor implicit flags are specified\")\n\t}\n\n\tstyle := event.scalar_style()\n\tif style == yaml_ANY_SCALAR_STYLE {\n\t\tstyle = yaml_PLAIN_SCALAR_STYLE\n\t}\n\tif emitter.canonical {\n\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\tif emitter.simple_key_context && emitter.scalar_data.multiline {\n\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\n\tif style == yaml_PLAIN_SCALAR_STYLE {\n\t\tif emitter.flow_level > 0 && !emitter.scalar_data.flow_plain_allowed ||\n\t\t\temitter.flow_level == 0 && !emitter.scalar_data.block_plain_allowed {\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t\tif len(emitter.scalar_data.value) == 0 && (emitter.flow_level > 0 || emitter.simple_key_context) {\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t\tif no_tag && !event.implicit {\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t}\n\tif style == yaml_SINGLE_QUOTED_SCALAR_STYLE {\n\t\tif !emitter.scalar_data.single_quoted_allowed {\n\t\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t}\n\tif style == yaml_LITERAL_SCALAR_STYLE || style == yaml_FOLDED_SCALAR_STYLE {\n\t\tif !emitter.scalar_data.block_allowed || emitter.flow_level > 0 || emitter.simple_key_context {\n\t\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t\t}\n\t}\n\n\tif no_tag && !event.quoted_implicit && style != yaml_PLAIN_SCALAR_STYLE {\n\t\temitter.tag_data.handle = []byte{'!'}\n\t}\n\temitter.scalar_data.style = style\n\treturn true\n}\n\n// Write an anchor.\nfunc yaml_emitter_process_anchor(emitter *yaml_emitter_t) bool {\n\tif emitter.anchor_data.anchor == nil {\n\t\treturn true\n\t}\n\tc := []byte{'&'}\n\tif emitter.anchor_data.alias {\n\t\tc[0] = '*'\n\t}\n\tif !yaml_emitter_write_indicator(emitter, c, true, false, false) {\n\t\treturn false\n\t}\n\treturn yaml_emitter_write_anchor(emitter, emitter.anchor_data.anchor)\n}\n\n// Write a tag.\nfunc yaml_emitter_process_tag(emitter *yaml_emitter_t) bool {\n\tif len(emitter.tag_data.handle) == 0 && len(emitter.tag_data.suffix) == 0 {\n\t\treturn true\n\t}\n\tif len(emitter.tag_data.handle) > 0 {\n\t\tif !yaml_emitter_write_tag_handle(emitter, emitter.tag_data.handle) {\n\t\t\treturn false\n\t\t}\n\t\tif len(emitter.tag_data.suffix) > 0 {\n\t\t\tif !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// [Go] Allocate these slices elsewhere.\n\t\tif !yaml_emitter_write_indicator(emitter, []byte(\"!<\"), true, false, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_tag_content(emitter, emitter.tag_data.suffix, false) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_indicator(emitter, []byte{'>'}, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Write a scalar.\nfunc yaml_emitter_process_scalar(emitter *yaml_emitter_t) bool {\n\tswitch emitter.scalar_data.style {\n\tcase yaml_PLAIN_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_plain_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)\n\n\tcase yaml_SINGLE_QUOTED_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_single_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)\n\n\tcase yaml_DOUBLE_QUOTED_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_double_quoted_scalar(emitter, emitter.scalar_data.value, !emitter.simple_key_context)\n\n\tcase yaml_LITERAL_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_literal_scalar(emitter, emitter.scalar_data.value)\n\n\tcase yaml_FOLDED_SCALAR_STYLE:\n\t\treturn yaml_emitter_write_folded_scalar(emitter, emitter.scalar_data.value)\n\t}\n\tpanic(\"unknown scalar style\")\n}\n\n// Write a head comment.\nfunc yaml_emitter_process_head_comment(emitter *yaml_emitter_t) bool {\n\tif len(emitter.tail_comment) > 0 {\n\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\treturn false\n\t\t}\n\t\tif !yaml_emitter_write_comment(emitter, emitter.tail_comment) {\n\t\t\treturn false\n\t\t}\n\t\temitter.tail_comment = emitter.tail_comment[:0]\n\t\temitter.foot_indent = emitter.indent\n\t\tif emitter.foot_indent < 0 {\n\t\t\temitter.foot_indent = 0\n\t\t}\n\t}\n\n\tif len(emitter.head_comment) == 0 {\n\t\treturn true\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_comment(emitter, emitter.head_comment) {\n\t\treturn false\n\t}\n\temitter.head_comment = emitter.head_comment[:0]\n\treturn true\n}\n\n// Write an line comment.\nfunc yaml_emitter_process_line_comment_linebreak(emitter *yaml_emitter_t, linebreak bool) bool {\n\tif len(emitter.line_comment) == 0 {\n\t\t// The next 3 lines are needed to resolve an issue with leading newlines\n\t\t// See https://github.com/go-yaml/yaml/issues/755\n\t\t// When linebreak is set to true, put_break will be called and will add\n\t\t// the needed newline.\n\t\tif linebreak && !put_break(emitter) {\n\t\t\treturn false\n\t\t}\n\t\treturn true\n\t}\n\tif !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !yaml_emitter_write_comment(emitter, emitter.line_comment) {\n\t\treturn false\n\t}\n\temitter.line_comment = emitter.line_comment[:0]\n\treturn true\n}\n\n// Write a foot comment.\nfunc yaml_emitter_process_foot_comment(emitter *yaml_emitter_t) bool {\n\tif len(emitter.foot_comment) == 0 {\n\t\treturn true\n\t}\n\tif !yaml_emitter_write_indent(emitter) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_comment(emitter, emitter.foot_comment) {\n\t\treturn false\n\t}\n\temitter.foot_comment = emitter.foot_comment[:0]\n\temitter.foot_indent = emitter.indent\n\tif emitter.foot_indent < 0 {\n\t\temitter.foot_indent = 0\n\t}\n\treturn true\n}\n\n// Check if a %YAML directive is valid.\nfunc yaml_emitter_analyze_version_directive(emitter *yaml_emitter_t, version_directive *yaml_version_directive_t) bool {\n\tif version_directive.major != 1 || version_directive.minor != 1 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"incompatible %YAML directive\")\n\t}\n\treturn true\n}\n\n// Check if a %TAG directive is valid.\nfunc yaml_emitter_analyze_tag_directive(emitter *yaml_emitter_t, tag_directive *yaml_tag_directive_t) bool {\n\thandle := tag_directive.handle\n\tprefix := tag_directive.prefix\n\tif len(handle) == 0 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must not be empty\")\n\t}\n\tif handle[0] != '!' {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must start with '!'\")\n\t}\n\tif handle[len(handle)-1] != '!' {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must end with '!'\")\n\t}\n\tfor i := 1; i < len(handle)-1; i += width(handle[i]) {\n\t\tif !is_alpha(handle, i) {\n\t\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag handle must contain alphanumerical characters only\")\n\t\t}\n\t}\n\tif len(prefix) == 0 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag prefix must not be empty\")\n\t}\n\treturn true\n}\n\n// Check if an anchor is valid.\nfunc yaml_emitter_analyze_anchor(emitter *yaml_emitter_t, anchor []byte, alias bool) bool {\n\tif len(anchor) == 0 {\n\t\tproblem := \"anchor value must not be empty\"\n\t\tif alias {\n\t\t\tproblem = \"alias value must not be empty\"\n\t\t}\n\t\treturn yaml_emitter_set_emitter_error(emitter, problem)\n\t}\n\tfor i := 0; i < len(anchor); i += width(anchor[i]) {\n\t\tif !is_alpha(anchor, i) {\n\t\t\tproblem := \"anchor value must contain alphanumerical characters only\"\n\t\t\tif alias {\n\t\t\t\tproblem = \"alias value must contain alphanumerical characters only\"\n\t\t\t}\n\t\t\treturn yaml_emitter_set_emitter_error(emitter, problem)\n\t\t}\n\t}\n\temitter.anchor_data.anchor = anchor\n\temitter.anchor_data.alias = alias\n\treturn true\n}\n\n// Check if a tag is valid.\nfunc yaml_emitter_analyze_tag(emitter *yaml_emitter_t, tag []byte) bool {\n\tif len(tag) == 0 {\n\t\treturn yaml_emitter_set_emitter_error(emitter, \"tag value must not be empty\")\n\t}\n\tfor i := 0; i < len(emitter.tag_directives); i++ {\n\t\ttag_directive := &emitter.tag_directives[i]\n\t\tif bytes.HasPrefix(tag, tag_directive.prefix) {\n\t\t\temitter.tag_data.handle = tag_directive.handle\n\t\t\temitter.tag_data.suffix = tag[len(tag_directive.prefix):]\n\t\t\treturn true\n\t\t}\n\t}\n\temitter.tag_data.suffix = tag\n\treturn true\n}\n\n// Check if a scalar is valid.\nfunc yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool {\n\tvar (\n\t\tblock_indicators   = false\n\t\tflow_indicators    = false\n\t\tline_breaks        = false\n\t\tspecial_characters = false\n\t\ttab_characters     = false\n\n\t\tleading_space  = false\n\t\tleading_break  = false\n\t\ttrailing_space = false\n\t\ttrailing_break = false\n\t\tbreak_space    = false\n\t\tspace_break    = false\n\n\t\tpreceded_by_whitespace = false\n\t\tfollowed_by_whitespace = false\n\t\tprevious_space         = false\n\t\tprevious_break         = false\n\t)\n\n\temitter.scalar_data.value = value\n\n\tif len(value) == 0 {\n\t\temitter.scalar_data.multiline = false\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = true\n\t\temitter.scalar_data.single_quoted_allowed = true\n\t\temitter.scalar_data.block_allowed = false\n\t\treturn true\n\t}\n\n\tif len(value) >= 3 && ((value[0] == '-' && value[1] == '-' && value[2] == '-') || (value[0] == '.' && value[1] == '.' && value[2] == '.')) {\n\t\tblock_indicators = true\n\t\tflow_indicators = true\n\t}\n\n\tpreceded_by_whitespace = true\n\tfor i, w := 0, 0; i < len(value); i += w {\n\t\tw = width(value[i])\n\t\tfollowed_by_whitespace = i+w >= len(value) || is_blank(value, i+w)\n\n\t\tif i == 0 {\n\t\t\tswitch value[i] {\n\t\t\tcase '#', ',', '[', ']', '{', '}', '&', '*', '!', '|', '>', '\\'', '\"', '%', '@', '`':\n\t\t\t\tflow_indicators = true\n\t\t\t\tblock_indicators = true\n\t\t\tcase '?', ':':\n\t\t\t\tflow_indicators = true\n\t\t\t\tif followed_by_whitespace {\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\tcase '-':\n\t\t\t\tif followed_by_whitespace {\n\t\t\t\t\tflow_indicators = true\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tswitch value[i] {\n\t\t\tcase ',', '?', '[', ']', '{', '}':\n\t\t\t\tflow_indicators = true\n\t\t\tcase ':':\n\t\t\t\tflow_indicators = true\n\t\t\t\tif followed_by_whitespace {\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\tcase '#':\n\t\t\t\tif preceded_by_whitespace {\n\t\t\t\t\tflow_indicators = true\n\t\t\t\t\tblock_indicators = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif value[i] == '\\t' {\n\t\t\ttab_characters = true\n\t\t} else if !is_printable(value, i) || !is_ascii(value, i) && !emitter.unicode {\n\t\t\tspecial_characters = true\n\t\t}\n\t\tif is_space(value, i) {\n\t\t\tif i == 0 {\n\t\t\t\tleading_space = true\n\t\t\t}\n\t\t\tif i+width(value[i]) == len(value) {\n\t\t\t\ttrailing_space = true\n\t\t\t}\n\t\t\tif previous_break {\n\t\t\t\tbreak_space = true\n\t\t\t}\n\t\t\tprevious_space = true\n\t\t\tprevious_break = false\n\t\t} else if is_break(value, i) {\n\t\t\tline_breaks = true\n\t\t\tif i == 0 {\n\t\t\t\tleading_break = true\n\t\t\t}\n\t\t\tif i+width(value[i]) == len(value) {\n\t\t\t\ttrailing_break = true\n\t\t\t}\n\t\t\tif previous_space {\n\t\t\t\tspace_break = true\n\t\t\t}\n\t\t\tprevious_space = false\n\t\t\tprevious_break = true\n\t\t} else {\n\t\t\tprevious_space = false\n\t\t\tprevious_break = false\n\t\t}\n\n\t\t// [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition.\n\t\tpreceded_by_whitespace = is_blankz(value, i)\n\t}\n\n\temitter.scalar_data.multiline = line_breaks\n\temitter.scalar_data.flow_plain_allowed = true\n\temitter.scalar_data.block_plain_allowed = true\n\temitter.scalar_data.single_quoted_allowed = true\n\temitter.scalar_data.block_allowed = true\n\n\tif leading_space || leading_break || trailing_space || trailing_break {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t}\n\tif trailing_space {\n\t\temitter.scalar_data.block_allowed = false\n\t}\n\tif break_space {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t\temitter.scalar_data.single_quoted_allowed = false\n\t}\n\tif space_break || tab_characters || special_characters {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t\temitter.scalar_data.single_quoted_allowed = false\n\t}\n\tif space_break || special_characters {\n\t\temitter.scalar_data.block_allowed = false\n\t}\n\tif line_breaks {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t\temitter.scalar_data.block_plain_allowed = false\n\t}\n\tif flow_indicators {\n\t\temitter.scalar_data.flow_plain_allowed = false\n\t}\n\tif block_indicators {\n\t\temitter.scalar_data.block_plain_allowed = false\n\t}\n\treturn true\n}\n\n// Check if the event data is valid.\nfunc yaml_emitter_analyze_event(emitter *yaml_emitter_t, event *yaml_event_t) bool {\n\n\temitter.anchor_data.anchor = nil\n\temitter.tag_data.handle = nil\n\temitter.tag_data.suffix = nil\n\temitter.scalar_data.value = nil\n\n\tif len(event.head_comment) > 0 {\n\t\temitter.head_comment = event.head_comment\n\t}\n\tif len(event.line_comment) > 0 {\n\t\temitter.line_comment = event.line_comment\n\t}\n\tif len(event.foot_comment) > 0 {\n\t\temitter.foot_comment = event.foot_comment\n\t}\n\tif len(event.tail_comment) > 0 {\n\t\temitter.tail_comment = event.tail_comment\n\t}\n\n\tswitch event.typ {\n\tcase yaml_ALIAS_EVENT:\n\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, true) {\n\t\t\treturn false\n\t\t}\n\n\tcase yaml_SCALAR_EVENT:\n\t\tif len(event.anchor) > 0 {\n\t\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif len(event.tag) > 0 && (emitter.canonical || (!event.implicit && !event.quoted_implicit)) {\n\t\t\tif !yaml_emitter_analyze_tag(emitter, event.tag) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif !yaml_emitter_analyze_scalar(emitter, event.value) {\n\t\t\treturn false\n\t\t}\n\n\tcase yaml_SEQUENCE_START_EVENT:\n\t\tif len(event.anchor) > 0 {\n\t\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif len(event.tag) > 0 && (emitter.canonical || !event.implicit) {\n\t\t\tif !yaml_emitter_analyze_tag(emitter, event.tag) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\tcase yaml_MAPPING_START_EVENT:\n\t\tif len(event.anchor) > 0 {\n\t\t\tif !yaml_emitter_analyze_anchor(emitter, event.anchor, false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif len(event.tag) > 0 && (emitter.canonical || !event.implicit) {\n\t\t\tif !yaml_emitter_analyze_tag(emitter, event.tag) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\treturn true\n}\n\n// Write the BOM character.\nfunc yaml_emitter_write_bom(emitter *yaml_emitter_t) bool {\n\tif !flush(emitter) {\n\t\treturn false\n\t}\n\tpos := emitter.buffer_pos\n\temitter.buffer[pos+0] = '\\xEF'\n\temitter.buffer[pos+1] = '\\xBB'\n\temitter.buffer[pos+2] = '\\xBF'\n\temitter.buffer_pos += 3\n\treturn true\n}\n\nfunc yaml_emitter_write_indent(emitter *yaml_emitter_t) bool {\n\tindent := emitter.indent\n\tif indent < 0 {\n\t\tindent = 0\n\t}\n\tif !emitter.indention || emitter.column > indent || (emitter.column == indent && !emitter.whitespace) {\n\t\tif !put_break(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif emitter.foot_indent == indent {\n\t\tif !put_break(emitter) {\n\t\t\treturn false\n\t\t}\n\t}\n\tfor emitter.column < indent {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\temitter.whitespace = true\n\t//emitter.indention = true\n\temitter.space_above = false\n\temitter.foot_indent = -1\n\treturn true\n}\n\nfunc yaml_emitter_write_indicator(emitter *yaml_emitter_t, indicator []byte, need_whitespace, is_whitespace, is_indention bool) bool {\n\tif need_whitespace && !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !write_all(emitter, indicator) {\n\t\treturn false\n\t}\n\temitter.whitespace = is_whitespace\n\temitter.indention = (emitter.indention && is_indention)\n\temitter.open_ended = false\n\treturn true\n}\n\nfunc yaml_emitter_write_anchor(emitter *yaml_emitter_t, value []byte) bool {\n\tif !write_all(emitter, value) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_tag_handle(emitter *yaml_emitter_t, value []byte) bool {\n\tif !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tif !write_all(emitter, value) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_tag_content(emitter *yaml_emitter_t, value []byte, need_whitespace bool) bool {\n\tif need_whitespace && !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\tfor i := 0; i < len(value); {\n\t\tvar must_write bool\n\t\tswitch value[i] {\n\t\tcase ';', '/', '?', ':', '@', '&', '=', '+', '$', ',', '_', '.', '~', '*', '\\'', '(', ')', '[', ']':\n\t\t\tmust_write = true\n\t\tdefault:\n\t\t\tmust_write = is_alpha(value, i)\n\t\t}\n\t\tif must_write {\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\tw := width(value[i])\n\t\t\tfor k := 0; k < w; k++ {\n\t\t\t\toctet := value[i]\n\t\t\t\ti++\n\t\t\t\tif !put(emitter, '%') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tc := octet >> 4\n\t\t\t\tif c < 10 {\n\t\t\t\t\tc += '0'\n\t\t\t\t} else {\n\t\t\t\t\tc += 'A' - 10\n\t\t\t\t}\n\t\t\t\tif !put(emitter, c) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tc = octet & 0x0f\n\t\t\t\tif c < 10 {\n\t\t\t\t\tc += '0'\n\t\t\t\t} else {\n\t\t\t\t\tc += 'A' - 10\n\t\t\t\t}\n\t\t\t\tif !put(emitter, c) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_plain_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {\n\tif len(value) > 0 && !emitter.whitespace {\n\t\tif !put(emitter, ' ') {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tspaces := false\n\tbreaks := false\n\tfor i := 0; i < len(value); {\n\t\tif is_space(value, i) {\n\t\t\tif allow_breaks && !spaces && emitter.column > emitter.best_width && !is_space(value, i+1) {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else {\n\t\t\t\tif !write(emitter, value, &i) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tspaces = true\n\t\t} else if is_break(value, i) {\n\t\t\tif !breaks && value[i] == '\\n' {\n\t\t\t\tif !put_break(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t//emitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tspaces = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\n\tif len(value) > 0 {\n\t\temitter.whitespace = false\n\t}\n\temitter.indention = false\n\tif emitter.root_context {\n\t\temitter.open_ended = true\n\t}\n\n\treturn true\n}\n\nfunc yaml_emitter_write_single_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {\n\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\\''}, true, false, false) {\n\t\treturn false\n\t}\n\n\tspaces := false\n\tbreaks := false\n\tfor i := 0; i < len(value); {\n\t\tif is_space(value, i) {\n\t\t\tif allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 && !is_space(value, i+1) {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else {\n\t\t\t\tif !write(emitter, value, &i) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tspaces = true\n\t\t} else if is_break(value, i) {\n\t\t\tif !breaks && value[i] == '\\n' {\n\t\t\t\tif !put_break(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t//emitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif value[i] == '\\'' {\n\t\t\t\tif !put(emitter, '\\'') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tspaces = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\\''}, false, false, false) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_double_quoted_scalar(emitter *yaml_emitter_t, value []byte, allow_breaks bool) bool {\n\tspaces := false\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\"'}, true, false, false) {\n\t\treturn false\n\t}\n\n\tfor i := 0; i < len(value); {\n\t\tif !is_printable(value, i) || (!emitter.unicode && !is_ascii(value, i)) ||\n\t\t\tis_bom(value, i) || is_break(value, i) ||\n\t\t\tvalue[i] == '\"' || value[i] == '\\\\' {\n\n\t\t\toctet := value[i]\n\n\t\t\tvar w int\n\t\t\tvar v rune\n\t\t\tswitch {\n\t\t\tcase octet&0x80 == 0x00:\n\t\t\t\tw, v = 1, rune(octet&0x7F)\n\t\t\tcase octet&0xE0 == 0xC0:\n\t\t\t\tw, v = 2, rune(octet&0x1F)\n\t\t\tcase octet&0xF0 == 0xE0:\n\t\t\t\tw, v = 3, rune(octet&0x0F)\n\t\t\tcase octet&0xF8 == 0xF0:\n\t\t\t\tw, v = 4, rune(octet&0x07)\n\t\t\t}\n\t\t\tfor k := 1; k < w; k++ {\n\t\t\t\toctet = value[i+k]\n\t\t\t\tv = (v << 6) + (rune(octet) & 0x3F)\n\t\t\t}\n\t\t\ti += w\n\n\t\t\tif !put(emitter, '\\\\') {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tvar ok bool\n\t\t\tswitch v {\n\t\t\tcase 0x00:\n\t\t\t\tok = put(emitter, '0')\n\t\t\tcase 0x07:\n\t\t\t\tok = put(emitter, 'a')\n\t\t\tcase 0x08:\n\t\t\t\tok = put(emitter, 'b')\n\t\t\tcase 0x09:\n\t\t\t\tok = put(emitter, 't')\n\t\t\tcase 0x0A:\n\t\t\t\tok = put(emitter, 'n')\n\t\t\tcase 0x0b:\n\t\t\t\tok = put(emitter, 'v')\n\t\t\tcase 0x0c:\n\t\t\t\tok = put(emitter, 'f')\n\t\t\tcase 0x0d:\n\t\t\t\tok = put(emitter, 'r')\n\t\t\tcase 0x1b:\n\t\t\t\tok = put(emitter, 'e')\n\t\t\tcase 0x22:\n\t\t\t\tok = put(emitter, '\"')\n\t\t\tcase 0x5c:\n\t\t\t\tok = put(emitter, '\\\\')\n\t\t\tcase 0x85:\n\t\t\t\tok = put(emitter, 'N')\n\t\t\tcase 0xA0:\n\t\t\t\tok = put(emitter, '_')\n\t\t\tcase 0x2028:\n\t\t\t\tok = put(emitter, 'L')\n\t\t\tcase 0x2029:\n\t\t\t\tok = put(emitter, 'P')\n\t\t\tdefault:\n\t\t\t\tif v <= 0xFF {\n\t\t\t\t\tok = put(emitter, 'x')\n\t\t\t\t\tw = 2\n\t\t\t\t} else if v <= 0xFFFF {\n\t\t\t\t\tok = put(emitter, 'u')\n\t\t\t\t\tw = 4\n\t\t\t\t} else {\n\t\t\t\t\tok = put(emitter, 'U')\n\t\t\t\t\tw = 8\n\t\t\t\t}\n\t\t\t\tfor k := (w - 1) * 4; ok && k >= 0; k -= 4 {\n\t\t\t\t\tdigit := byte((v >> uint(k)) & 0x0F)\n\t\t\t\t\tif digit < 10 {\n\t\t\t\t\t\tok = put(emitter, digit+'0')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tok = put(emitter, digit+'A'-10)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !ok {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tspaces = false\n\t\t} else if is_space(value, i) {\n\t\t\tif allow_breaks && !spaces && emitter.column > emitter.best_width && i > 0 && i < len(value)-1 {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif is_space(value, i+1) {\n\t\t\t\t\tif !put(emitter, '\\\\') {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else if !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tspaces = true\n\t\t} else {\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tspaces = false\n\t\t}\n\t}\n\tif !yaml_emitter_write_indicator(emitter, []byte{'\"'}, false, false, false) {\n\t\treturn false\n\t}\n\temitter.whitespace = false\n\temitter.indention = false\n\treturn true\n}\n\nfunc yaml_emitter_write_block_scalar_hints(emitter *yaml_emitter_t, value []byte) bool {\n\tif is_space(value, 0) || is_break(value, 0) {\n\t\tindent_hint := []byte{'0' + byte(emitter.best_indent)}\n\t\tif !yaml_emitter_write_indicator(emitter, indent_hint, false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\temitter.open_ended = false\n\n\tvar chomp_hint [1]byte\n\tif len(value) == 0 {\n\t\tchomp_hint[0] = '-'\n\t} else {\n\t\ti := len(value) - 1\n\t\tfor value[i]&0xC0 == 0x80 {\n\t\t\ti--\n\t\t}\n\t\tif !is_break(value, i) {\n\t\t\tchomp_hint[0] = '-'\n\t\t} else if i == 0 {\n\t\t\tchomp_hint[0] = '+'\n\t\t\temitter.open_ended = true\n\t\t} else {\n\t\t\ti--\n\t\t\tfor value[i]&0xC0 == 0x80 {\n\t\t\t\ti--\n\t\t\t}\n\t\t\tif is_break(value, i) {\n\t\t\t\tchomp_hint[0] = '+'\n\t\t\t\temitter.open_ended = true\n\t\t\t}\n\t\t}\n\t}\n\tif chomp_hint[0] != 0 {\n\t\tif !yaml_emitter_write_indicator(emitter, chomp_hint[:], false, false, false) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc yaml_emitter_write_literal_scalar(emitter *yaml_emitter_t, value []byte) bool {\n\tif !yaml_emitter_write_indicator(emitter, []byte{'|'}, true, false, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_block_scalar_hints(emitter, value) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_line_comment_linebreak(emitter, true) {\n\t\treturn false\n\t}\n\t//emitter.indention = true\n\temitter.whitespace = true\n\tbreaks := true\n\tfor i := 0; i < len(value); {\n\t\tif is_break(value, i) {\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t//emitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc yaml_emitter_write_folded_scalar(emitter *yaml_emitter_t, value []byte) bool {\n\tif !yaml_emitter_write_indicator(emitter, []byte{'>'}, true, false, false) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_write_block_scalar_hints(emitter, value) {\n\t\treturn false\n\t}\n\tif !yaml_emitter_process_line_comment_linebreak(emitter, true) {\n\t\treturn false\n\t}\n\n\t//emitter.indention = true\n\temitter.whitespace = true\n\n\tbreaks := true\n\tleading_spaces := true\n\tfor i := 0; i < len(value); {\n\t\tif is_break(value, i) {\n\t\t\tif !breaks && !leading_spaces && value[i] == '\\n' {\n\t\t\t\tk := 0\n\t\t\t\tfor is_break(value, k) {\n\t\t\t\t\tk += width(value[k])\n\t\t\t\t}\n\t\t\t\tif !is_blankz(value, k) {\n\t\t\t\t\tif !put_break(emitter) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !write_break(emitter, value, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t//emitter.indention = true\n\t\t\tbreaks = true\n\t\t} else {\n\t\t\tif breaks {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tleading_spaces = is_blank(value, i)\n\t\t\t}\n\t\t\tif !breaks && is_space(value, i) && !is_space(value, i+1) && emitter.column > emitter.best_width {\n\t\t\t\tif !yaml_emitter_write_indent(emitter) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\ti += width(value[i])\n\t\t\t} else {\n\t\t\t\tif !write(emitter, value, &i) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc yaml_emitter_write_comment(emitter *yaml_emitter_t, comment []byte) bool {\n\tbreaks := false\n\tpound := false\n\tfor i := 0; i < len(comment); {\n\t\tif is_break(comment, i) {\n\t\t\tif !write_break(emitter, comment, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t//emitter.indention = true\n\t\t\tbreaks = true\n\t\t\tpound = false\n\t\t} else {\n\t\t\tif breaks && !yaml_emitter_write_indent(emitter) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif !pound {\n\t\t\t\tif comment[i] != '#' && (!put(emitter, '#') || !put(emitter, ' ')) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tpound = true\n\t\t\t}\n\t\t\tif !write(emitter, comment, &i) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\temitter.indention = false\n\t\t\tbreaks = false\n\t\t}\n\t}\n\tif !breaks && !put_break(emitter) {\n\t\treturn false\n\t}\n\n\temitter.whitespace = true\n\t//emitter.indention = true\n\treturn true\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/encode.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage yaml\n\nimport (\n\t\"encoding\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\t\"unicode/utf8\"\n)\n\ntype encoder struct {\n\temitter  yaml_emitter_t\n\tevent    yaml_event_t\n\tout      []byte\n\tflow     bool\n\tindent   int\n\tdoneInit bool\n}\n\nfunc newEncoder() *encoder {\n\te := &encoder{}\n\tyaml_emitter_initialize(&e.emitter)\n\tyaml_emitter_set_output_string(&e.emitter, &e.out)\n\tyaml_emitter_set_unicode(&e.emitter, true)\n\treturn e\n}\n\nfunc newEncoderWithWriter(w io.Writer) *encoder {\n\te := &encoder{}\n\tyaml_emitter_initialize(&e.emitter)\n\tyaml_emitter_set_output_writer(&e.emitter, w)\n\tyaml_emitter_set_unicode(&e.emitter, true)\n\treturn e\n}\n\nfunc (e *encoder) init() {\n\tif e.doneInit {\n\t\treturn\n\t}\n\tif e.indent == 0 {\n\t\te.indent = 4\n\t}\n\te.emitter.best_indent = e.indent\n\tyaml_stream_start_event_initialize(&e.event, yaml_UTF8_ENCODING)\n\te.emit()\n\te.doneInit = true\n}\n\nfunc (e *encoder) finish() {\n\te.emitter.open_ended = false\n\tyaml_stream_end_event_initialize(&e.event)\n\te.emit()\n}\n\nfunc (e *encoder) destroy() {\n\tyaml_emitter_delete(&e.emitter)\n}\n\nfunc (e *encoder) emit() {\n\t// This will internally delete the e.event value.\n\te.must(yaml_emitter_emit(&e.emitter, &e.event))\n}\n\nfunc (e *encoder) must(ok bool) {\n\tif !ok {\n\t\tmsg := e.emitter.problem\n\t\tif msg == \"\" {\n\t\t\tmsg = \"unknown problem generating YAML content\"\n\t\t}\n\t\tfailf(\"%s\", msg)\n\t}\n}\n\nfunc (e *encoder) marshalDoc(tag string, in reflect.Value) {\n\te.init()\n\tvar node *Node\n\tif in.IsValid() {\n\t\tnode, _ = in.Interface().(*Node)\n\t}\n\tif node != nil && node.Kind == DocumentNode {\n\t\te.nodev(in)\n\t} else {\n\t\tyaml_document_start_event_initialize(&e.event, nil, nil, true)\n\t\te.emit()\n\t\te.marshal(tag, in)\n\t\tyaml_document_end_event_initialize(&e.event, true)\n\t\te.emit()\n\t}\n}\n\nfunc (e *encoder) marshal(tag string, in reflect.Value) {\n\ttag = shortTag(tag)\n\tif !in.IsValid() || in.Kind() == reflect.Ptr && in.IsNil() {\n\t\te.nilv()\n\t\treturn\n\t}\n\tiface := in.Interface()\n\tswitch value := iface.(type) {\n\tcase *Node:\n\t\te.nodev(in)\n\t\treturn\n\tcase Node:\n\t\tif !in.CanAddr() {\n\t\t\tvar n = reflect.New(in.Type()).Elem()\n\t\t\tn.Set(in)\n\t\t\tin = n\n\t\t}\n\t\te.nodev(in.Addr())\n\t\treturn\n\tcase time.Time:\n\t\te.timev(tag, in)\n\t\treturn\n\tcase *time.Time:\n\t\te.timev(tag, in.Elem())\n\t\treturn\n\tcase time.Duration:\n\t\te.stringv(tag, reflect.ValueOf(value.String()))\n\t\treturn\n\tcase Marshaler:\n\t\tv, err := value.MarshalYAML()\n\t\tif err != nil {\n\t\t\tfail(err)\n\t\t}\n\t\tif v == nil {\n\t\t\te.nilv()\n\t\t\treturn\n\t\t}\n\t\te.marshal(tag, reflect.ValueOf(v))\n\t\treturn\n\tcase encoding.TextMarshaler:\n\t\ttext, err := value.MarshalText()\n\t\tif err != nil {\n\t\t\tfail(err)\n\t\t}\n\t\tin = reflect.ValueOf(string(text))\n\tcase nil:\n\t\te.nilv()\n\t\treturn\n\t}\n\tswitch in.Kind() {\n\tcase reflect.Interface:\n\t\te.marshal(tag, in.Elem())\n\tcase reflect.Map:\n\t\te.mapv(tag, in)\n\tcase reflect.Ptr:\n\t\te.marshal(tag, in.Elem())\n\tcase reflect.Struct:\n\t\te.structv(tag, in)\n\tcase reflect.Slice, reflect.Array:\n\t\te.slicev(tag, in)\n\tcase reflect.String:\n\t\te.stringv(tag, in)\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\te.intv(tag, in)\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\te.uintv(tag, in)\n\tcase reflect.Float32, reflect.Float64:\n\t\te.floatv(tag, in)\n\tcase reflect.Bool:\n\t\te.boolv(tag, in)\n\tdefault:\n\t\tpanic(\"cannot marshal type: \" + in.Type().String())\n\t}\n}\n\nfunc (e *encoder) mapv(tag string, in reflect.Value) {\n\te.mappingv(tag, func() {\n\t\tkeys := keyList(in.MapKeys())\n\t\tsort.Sort(keys)\n\t\tfor _, k := range keys {\n\t\t\te.marshal(\"\", k)\n\t\t\te.marshal(\"\", in.MapIndex(k))\n\t\t}\n\t})\n}\n\nfunc (e *encoder) fieldByIndex(v reflect.Value, index []int) (field reflect.Value) {\n\tfor _, num := range index {\n\t\tfor {\n\t\t\tif v.Kind() == reflect.Ptr {\n\t\t\t\tif v.IsNil() {\n\t\t\t\t\treturn reflect.Value{}\n\t\t\t\t}\n\t\t\t\tv = v.Elem()\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tv = v.Field(num)\n\t}\n\treturn v\n}\n\nfunc (e *encoder) structv(tag string, in reflect.Value) {\n\tsinfo, err := getStructInfo(in.Type())\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\te.mappingv(tag, func() {\n\t\tfor _, info := range sinfo.FieldsList {\n\t\t\tvar value reflect.Value\n\t\t\tif info.Inline == nil {\n\t\t\t\tvalue = in.Field(info.Num)\n\t\t\t} else {\n\t\t\t\tvalue = e.fieldByIndex(in, info.Inline)\n\t\t\t\tif !value.IsValid() {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\t\t\tif info.OmitEmpty && isZero(value) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\te.marshal(\"\", reflect.ValueOf(info.Key))\n\t\t\te.flow = info.Flow\n\t\t\te.marshal(\"\", value)\n\t\t}\n\t\tif sinfo.InlineMap >= 0 {\n\t\t\tm := in.Field(sinfo.InlineMap)\n\t\t\tif m.Len() > 0 {\n\t\t\t\te.flow = false\n\t\t\t\tkeys := keyList(m.MapKeys())\n\t\t\t\tsort.Sort(keys)\n\t\t\t\tfor _, k := range keys {\n\t\t\t\t\tif _, found := sinfo.FieldsMap[k.String()]; found {\n\t\t\t\t\t\tpanic(fmt.Sprintf(\"cannot have key %q in inlined map: conflicts with struct field\", k.String()))\n\t\t\t\t\t}\n\t\t\t\t\te.marshal(\"\", k)\n\t\t\t\t\te.flow = false\n\t\t\t\t\te.marshal(\"\", m.MapIndex(k))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunc (e *encoder) mappingv(tag string, f func()) {\n\timplicit := tag == \"\"\n\tstyle := yaml_BLOCK_MAPPING_STYLE\n\tif e.flow {\n\t\te.flow = false\n\t\tstyle = yaml_FLOW_MAPPING_STYLE\n\t}\n\tyaml_mapping_start_event_initialize(&e.event, nil, []byte(tag), implicit, style)\n\te.emit()\n\tf()\n\tyaml_mapping_end_event_initialize(&e.event)\n\te.emit()\n}\n\nfunc (e *encoder) slicev(tag string, in reflect.Value) {\n\timplicit := tag == \"\"\n\tstyle := yaml_BLOCK_SEQUENCE_STYLE\n\tif e.flow {\n\t\te.flow = false\n\t\tstyle = yaml_FLOW_SEQUENCE_STYLE\n\t}\n\te.must(yaml_sequence_start_event_initialize(&e.event, nil, []byte(tag), implicit, style))\n\te.emit()\n\tn := in.Len()\n\tfor i := 0; i < n; i++ {\n\t\te.marshal(\"\", in.Index(i))\n\t}\n\te.must(yaml_sequence_end_event_initialize(&e.event))\n\te.emit()\n}\n\n// isBase60 returns whether s is in base 60 notation as defined in YAML 1.1.\n//\n// The base 60 float notation in YAML 1.1 is a terrible idea and is unsupported\n// in YAML 1.2 and by this package, but these should be marshalled quoted for\n// the time being for compatibility with other parsers.\nfunc isBase60Float(s string) (result bool) {\n\t// Fast path.\n\tif s == \"\" {\n\t\treturn false\n\t}\n\tc := s[0]\n\tif !(c == '+' || c == '-' || c >= '0' && c <= '9') || strings.IndexByte(s, ':') < 0 {\n\t\treturn false\n\t}\n\t// Do the full match.\n\treturn base60float.MatchString(s)\n}\n\n// From http://yaml.org/type/float.html, except the regular expression there\n// is bogus. In practice parsers do not enforce the \"\\.[0-9_]*\" suffix.\nvar base60float = regexp.MustCompile(`^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+(?:\\.[0-9_]*)?$`)\n\n// isOldBool returns whether s is bool notation as defined in YAML 1.1.\n//\n// We continue to force strings that YAML 1.1 would interpret as booleans to be\n// rendered as quotes strings so that the marshalled output valid for YAML 1.1\n// parsing.\nfunc isOldBool(s string) (result bool) {\n\tswitch s {\n\tcase \"y\", \"Y\", \"yes\", \"Yes\", \"YES\", \"on\", \"On\", \"ON\",\n\t\t\"n\", \"N\", \"no\", \"No\", \"NO\", \"off\", \"Off\", \"OFF\":\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc (e *encoder) stringv(tag string, in reflect.Value) {\n\tvar style yaml_scalar_style_t\n\ts := in.String()\n\tcanUsePlain := true\n\tswitch {\n\tcase !utf8.ValidString(s):\n\t\tif tag == binaryTag {\n\t\t\tfailf(\"explicitly tagged !!binary data must be base64-encoded\")\n\t\t}\n\t\tif tag != \"\" {\n\t\t\tfailf(\"cannot marshal invalid UTF-8 data as %s\", shortTag(tag))\n\t\t}\n\t\t// It can't be encoded directly as YAML so use a binary tag\n\t\t// and encode it as base64.\n\t\ttag = binaryTag\n\t\ts = encodeBase64(s)\n\tcase tag == \"\":\n\t\t// Check to see if it would resolve to a specific\n\t\t// tag when encoded unquoted. If it doesn't,\n\t\t// there's no need to quote it.\n\t\trtag, _ := resolve(\"\", s)\n\t\tcanUsePlain = rtag == strTag && !(isBase60Float(s) || isOldBool(s))\n\t}\n\t// Note: it's possible for user code to emit invalid YAML\n\t// if they explicitly specify a tag and a string containing\n\t// text that's incompatible with that tag.\n\tswitch {\n\tcase strings.Contains(s, \"\\n\"):\n\t\tif e.flow {\n\t\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t\t} else {\n\t\t\tstyle = yaml_LITERAL_SCALAR_STYLE\n\t\t}\n\tcase canUsePlain:\n\t\tstyle = yaml_PLAIN_SCALAR_STYLE\n\tdefault:\n\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\te.emitScalar(s, \"\", tag, style, nil, nil, nil, nil)\n}\n\nfunc (e *encoder) boolv(tag string, in reflect.Value) {\n\tvar s string\n\tif in.Bool() {\n\t\ts = \"true\"\n\t} else {\n\t\ts = \"false\"\n\t}\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)\n}\n\nfunc (e *encoder) intv(tag string, in reflect.Value) {\n\ts := strconv.FormatInt(in.Int(), 10)\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)\n}\n\nfunc (e *encoder) uintv(tag string, in reflect.Value) {\n\ts := strconv.FormatUint(in.Uint(), 10)\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)\n}\n\nfunc (e *encoder) timev(tag string, in reflect.Value) {\n\tt := in.Interface().(time.Time)\n\ts := t.Format(time.RFC3339Nano)\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)\n}\n\nfunc (e *encoder) floatv(tag string, in reflect.Value) {\n\t// Issue #352: When formatting, use the precision of the underlying value\n\tprecision := 64\n\tif in.Kind() == reflect.Float32 {\n\t\tprecision = 32\n\t}\n\n\ts := strconv.FormatFloat(in.Float(), 'g', -1, precision)\n\tswitch s {\n\tcase \"+Inf\":\n\t\ts = \".inf\"\n\tcase \"-Inf\":\n\t\ts = \"-.inf\"\n\tcase \"NaN\":\n\t\ts = \".nan\"\n\t}\n\te.emitScalar(s, \"\", tag, yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)\n}\n\nfunc (e *encoder) nilv() {\n\te.emitScalar(\"null\", \"\", \"\", yaml_PLAIN_SCALAR_STYLE, nil, nil, nil, nil)\n}\n\nfunc (e *encoder) emitScalar(value, anchor, tag string, style yaml_scalar_style_t, head, line, foot, tail []byte) {\n\t// TODO Kill this function. Replace all initialize calls by their underlining Go literals.\n\timplicit := tag == \"\"\n\tif !implicit {\n\t\ttag = longTag(tag)\n\t}\n\te.must(yaml_scalar_event_initialize(&e.event, []byte(anchor), []byte(tag), []byte(value), implicit, implicit, style))\n\te.event.head_comment = head\n\te.event.line_comment = line\n\te.event.foot_comment = foot\n\te.event.tail_comment = tail\n\te.emit()\n}\n\nfunc (e *encoder) nodev(in reflect.Value) {\n\te.node(in.Interface().(*Node), \"\")\n}\n\nfunc (e *encoder) node(node *Node, tail string) {\n\t// Zero nodes behave as nil.\n\tif node.Kind == 0 && node.IsZero() {\n\t\te.nilv()\n\t\treturn\n\t}\n\n\t// If the tag was not explicitly requested, and dropping it won't change the\n\t// implicit tag of the value, don't include it in the presentation.\n\tvar tag = node.Tag\n\tvar stag = shortTag(tag)\n\tvar forceQuoting bool\n\tif tag != \"\" && node.Style&TaggedStyle == 0 {\n\t\tif node.Kind == ScalarNode {\n\t\t\tif stag == strTag && node.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0 {\n\t\t\t\ttag = \"\"\n\t\t\t} else {\n\t\t\t\trtag, _ := resolve(\"\", node.Value)\n\t\t\t\tif rtag == stag {\n\t\t\t\t\ttag = \"\"\n\t\t\t\t} else if stag == strTag {\n\t\t\t\t\ttag = \"\"\n\t\t\t\t\tforceQuoting = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar rtag string\n\t\t\tswitch node.Kind {\n\t\t\tcase MappingNode:\n\t\t\t\trtag = mapTag\n\t\t\tcase SequenceNode:\n\t\t\t\trtag = seqTag\n\t\t\t}\n\t\t\tif rtag == stag {\n\t\t\t\ttag = \"\"\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch node.Kind {\n\tcase DocumentNode:\n\t\tyaml_document_start_event_initialize(&e.event, nil, nil, true)\n\t\te.event.head_comment = []byte(node.HeadComment)\n\t\te.emit()\n\t\tfor _, node := range node.Content {\n\t\t\te.node(node, \"\")\n\t\t}\n\t\tyaml_document_end_event_initialize(&e.event, true)\n\t\te.event.foot_comment = []byte(node.FootComment)\n\t\te.emit()\n\n\tcase SequenceNode:\n\t\tstyle := yaml_BLOCK_SEQUENCE_STYLE\n\t\tif node.Style&FlowStyle != 0 {\n\t\t\tstyle = yaml_FLOW_SEQUENCE_STYLE\n\t\t}\n\t\te.must(yaml_sequence_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == \"\", style))\n\t\te.event.head_comment = []byte(node.HeadComment)\n\t\te.emit()\n\t\tfor _, node := range node.Content {\n\t\t\te.node(node, \"\")\n\t\t}\n\t\te.must(yaml_sequence_end_event_initialize(&e.event))\n\t\te.event.line_comment = []byte(node.LineComment)\n\t\te.event.foot_comment = []byte(node.FootComment)\n\t\te.emit()\n\n\tcase MappingNode:\n\t\tstyle := yaml_BLOCK_MAPPING_STYLE\n\t\tif node.Style&FlowStyle != 0 {\n\t\t\tstyle = yaml_FLOW_MAPPING_STYLE\n\t\t}\n\t\tyaml_mapping_start_event_initialize(&e.event, []byte(node.Anchor), []byte(longTag(tag)), tag == \"\", style)\n\t\te.event.tail_comment = []byte(tail)\n\t\te.event.head_comment = []byte(node.HeadComment)\n\t\te.emit()\n\n\t\t// The tail logic below moves the foot comment of prior keys to the following key,\n\t\t// since the value for each key may be a nested structure and the foot needs to be\n\t\t// processed only the entirety of the value is streamed. The last tail is processed\n\t\t// with the mapping end event.\n\t\tvar tail string\n\t\tfor i := 0; i+1 < len(node.Content); i += 2 {\n\t\t\tk := node.Content[i]\n\t\t\tfoot := k.FootComment\n\t\t\tif foot != \"\" {\n\t\t\t\tkopy := *k\n\t\t\t\tkopy.FootComment = \"\"\n\t\t\t\tk = &kopy\n\t\t\t}\n\t\t\te.node(k, tail)\n\t\t\ttail = foot\n\n\t\t\tv := node.Content[i+1]\n\t\t\te.node(v, \"\")\n\t\t}\n\n\t\tyaml_mapping_end_event_initialize(&e.event)\n\t\te.event.tail_comment = []byte(tail)\n\t\te.event.line_comment = []byte(node.LineComment)\n\t\te.event.foot_comment = []byte(node.FootComment)\n\t\te.emit()\n\n\tcase AliasNode:\n\t\tyaml_alias_event_initialize(&e.event, []byte(node.Value))\n\t\te.event.head_comment = []byte(node.HeadComment)\n\t\te.event.line_comment = []byte(node.LineComment)\n\t\te.event.foot_comment = []byte(node.FootComment)\n\t\te.emit()\n\n\tcase ScalarNode:\n\t\tvalue := node.Value\n\t\tif !utf8.ValidString(value) {\n\t\t\tif stag == binaryTag {\n\t\t\t\tfailf(\"explicitly tagged !!binary data must be base64-encoded\")\n\t\t\t}\n\t\t\tif stag != \"\" {\n\t\t\t\tfailf(\"cannot marshal invalid UTF-8 data as %s\", stag)\n\t\t\t}\n\t\t\t// It can't be encoded directly as YAML so use a binary tag\n\t\t\t// and encode it as base64.\n\t\t\ttag = binaryTag\n\t\t\tvalue = encodeBase64(value)\n\t\t}\n\n\t\tstyle := yaml_PLAIN_SCALAR_STYLE\n\t\tswitch {\n\t\tcase node.Style&DoubleQuotedStyle != 0:\n\t\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t\tcase node.Style&SingleQuotedStyle != 0:\n\t\t\tstyle = yaml_SINGLE_QUOTED_SCALAR_STYLE\n\t\tcase node.Style&LiteralStyle != 0:\n\t\t\tstyle = yaml_LITERAL_SCALAR_STYLE\n\t\tcase node.Style&FoldedStyle != 0:\n\t\t\tstyle = yaml_FOLDED_SCALAR_STYLE\n\t\tcase strings.Contains(value, \"\\n\"):\n\t\t\tstyle = yaml_LITERAL_SCALAR_STYLE\n\t\tcase forceQuoting:\n\t\t\tstyle = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t\t}\n\n\t\te.emitScalar(value, node.Anchor, tag, style, []byte(node.HeadComment), []byte(node.LineComment), []byte(node.FootComment), []byte(tail))\n\tdefault:\n\t\tfailf(\"cannot encode node with unknown kind %d\", node.Kind)\n\t}\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/parserc.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n// Copyright (c) 2006-2010 Kirill Simonov\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\npackage yaml\n\nimport (\n\t\"bytes\"\n)\n\n// The parser implements the following grammar:\n//\n// stream               ::= STREAM-START implicit_document? explicit_document* STREAM-END\n// implicit_document    ::= block_node DOCUMENT-END*\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n// block_node_or_indentless_sequence    ::=\n//                          ALIAS\n//                          | properties (block_content | indentless_block_sequence)?\n//                          | block_content\n//                          | indentless_block_sequence\n// block_node           ::= ALIAS\n//                          | properties block_content?\n//                          | block_content\n// flow_node            ::= ALIAS\n//                          | properties flow_content?\n//                          | flow_content\n// properties           ::= TAG ANCHOR? | ANCHOR TAG?\n// block_content        ::= block_collection | flow_collection | SCALAR\n// flow_content         ::= flow_collection | SCALAR\n// block_collection     ::= block_sequence | block_mapping\n// flow_collection      ::= flow_sequence | flow_mapping\n// block_sequence       ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END\n// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+\n// block_mapping        ::= BLOCK-MAPPING_START\n//                          ((KEY block_node_or_indentless_sequence?)?\n//                          (VALUE block_node_or_indentless_sequence?)?)*\n//                          BLOCK-END\n// flow_sequence        ::= FLOW-SEQUENCE-START\n//                          (flow_sequence_entry FLOW-ENTRY)*\n//                          flow_sequence_entry?\n//                          FLOW-SEQUENCE-END\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n// flow_mapping         ::= FLOW-MAPPING-START\n//                          (flow_mapping_entry FLOW-ENTRY)*\n//                          flow_mapping_entry?\n//                          FLOW-MAPPING-END\n// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n\n// Peek the next token in the token queue.\nfunc peek_token(parser *yaml_parser_t) *yaml_token_t {\n\tif parser.token_available || yaml_parser_fetch_more_tokens(parser) {\n\t\ttoken := &parser.tokens[parser.tokens_head]\n\t\tyaml_parser_unfold_comments(parser, token)\n\t\treturn token\n\t}\n\treturn nil\n}\n\n// yaml_parser_unfold_comments walks through the comments queue and joins all\n// comments behind the position of the provided token into the respective\n// top-level comment slices in the parser.\nfunc yaml_parser_unfold_comments(parser *yaml_parser_t, token *yaml_token_t) {\n\tfor parser.comments_head < len(parser.comments) && token.start_mark.index >= parser.comments[parser.comments_head].token_mark.index {\n\t\tcomment := &parser.comments[parser.comments_head]\n\t\tif len(comment.head) > 0 {\n\t\t\tif token.typ == yaml_BLOCK_END_TOKEN {\n\t\t\t\t// No heads on ends, so keep comment.head for a follow up token.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif len(parser.head_comment) > 0 {\n\t\t\t\tparser.head_comment = append(parser.head_comment, '\\n')\n\t\t\t}\n\t\t\tparser.head_comment = append(parser.head_comment, comment.head...)\n\t\t}\n\t\tif len(comment.foot) > 0 {\n\t\t\tif len(parser.foot_comment) > 0 {\n\t\t\t\tparser.foot_comment = append(parser.foot_comment, '\\n')\n\t\t\t}\n\t\t\tparser.foot_comment = append(parser.foot_comment, comment.foot...)\n\t\t}\n\t\tif len(comment.line) > 0 {\n\t\t\tif len(parser.line_comment) > 0 {\n\t\t\t\tparser.line_comment = append(parser.line_comment, '\\n')\n\t\t\t}\n\t\t\tparser.line_comment = append(parser.line_comment, comment.line...)\n\t\t}\n\t\t*comment = yaml_comment_t{}\n\t\tparser.comments_head++\n\t}\n}\n\n// Remove the next token from the queue (must be called after peek_token).\nfunc skip_token(parser *yaml_parser_t) {\n\tparser.token_available = false\n\tparser.tokens_parsed++\n\tparser.stream_end_produced = parser.tokens[parser.tokens_head].typ == yaml_STREAM_END_TOKEN\n\tparser.tokens_head++\n}\n\n// Get the next event.\nfunc yaml_parser_parse(parser *yaml_parser_t, event *yaml_event_t) bool {\n\t// Erase the event object.\n\t*event = yaml_event_t{}\n\n\t// No events after the end of the stream or error.\n\tif parser.stream_end_produced || parser.error != yaml_NO_ERROR || parser.state == yaml_PARSE_END_STATE {\n\t\treturn true\n\t}\n\n\t// Generate the next event.\n\treturn yaml_parser_state_machine(parser, event)\n}\n\n// Set parser error.\nfunc yaml_parser_set_parser_error(parser *yaml_parser_t, problem string, problem_mark yaml_mark_t) bool {\n\tparser.error = yaml_PARSER_ERROR\n\tparser.problem = problem\n\tparser.problem_mark = problem_mark\n\treturn false\n}\n\nfunc yaml_parser_set_parser_error_context(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string, problem_mark yaml_mark_t) bool {\n\tparser.error = yaml_PARSER_ERROR\n\tparser.context = context\n\tparser.context_mark = context_mark\n\tparser.problem = problem\n\tparser.problem_mark = problem_mark\n\treturn false\n}\n\n// State dispatcher.\nfunc yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool {\n\t//trace(\"yaml_parser_state_machine\", \"state:\", parser.state.String())\n\n\tswitch parser.state {\n\tcase yaml_PARSE_STREAM_START_STATE:\n\t\treturn yaml_parser_parse_stream_start(parser, event)\n\n\tcase yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:\n\t\treturn yaml_parser_parse_document_start(parser, event, true)\n\n\tcase yaml_PARSE_DOCUMENT_START_STATE:\n\t\treturn yaml_parser_parse_document_start(parser, event, false)\n\n\tcase yaml_PARSE_DOCUMENT_CONTENT_STATE:\n\t\treturn yaml_parser_parse_document_content(parser, event)\n\n\tcase yaml_PARSE_DOCUMENT_END_STATE:\n\t\treturn yaml_parser_parse_document_end(parser, event)\n\n\tcase yaml_PARSE_BLOCK_NODE_STATE:\n\t\treturn yaml_parser_parse_node(parser, event, true, false)\n\n\tcase yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:\n\t\treturn yaml_parser_parse_node(parser, event, true, true)\n\n\tcase yaml_PARSE_FLOW_NODE_STATE:\n\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\n\tcase yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn yaml_parser_parse_block_sequence_entry(parser, event, true)\n\n\tcase yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:\n\t\treturn yaml_parser_parse_block_sequence_entry(parser, event, false)\n\n\tcase yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:\n\t\treturn yaml_parser_parse_indentless_sequence_entry(parser, event)\n\n\tcase yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_parser_parse_block_mapping_key(parser, event, true)\n\n\tcase yaml_PARSE_BLOCK_MAPPING_KEY_STATE:\n\t\treturn yaml_parser_parse_block_mapping_key(parser, event, false)\n\n\tcase yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:\n\t\treturn yaml_parser_parse_block_mapping_value(parser, event)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry(parser, event, true)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry(parser, event, false)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry_mapping_key(parser, event)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry_mapping_value(parser, event)\n\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:\n\t\treturn yaml_parser_parse_flow_sequence_entry_mapping_end(parser, event)\n\n\tcase yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_key(parser, event, true)\n\n\tcase yaml_PARSE_FLOW_MAPPING_KEY_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_key(parser, event, false)\n\n\tcase yaml_PARSE_FLOW_MAPPING_VALUE_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_value(parser, event, false)\n\n\tcase yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:\n\t\treturn yaml_parser_parse_flow_mapping_value(parser, event, true)\n\n\tdefault:\n\t\tpanic(\"invalid parser state\")\n\t}\n}\n\n// Parse the production:\n// stream   ::= STREAM-START implicit_document? explicit_document* STREAM-END\n//\n//\t************\nfunc yaml_parser_parse_stream_start(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ != yaml_STREAM_START_TOKEN {\n\t\treturn yaml_parser_set_parser_error(parser, \"did not find expected <stream-start>\", token.start_mark)\n\t}\n\tparser.state = yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_STREAM_START_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.end_mark,\n\t\tencoding:   token.encoding,\n\t}\n\tskip_token(parser)\n\treturn true\n}\n\n// Parse the productions:\n// implicit_document    ::= block_node DOCUMENT-END*\n//\n//\t*\n//\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n//\n//\t*************************\nfunc yaml_parser_parse_document_start(parser *yaml_parser_t, event *yaml_event_t, implicit bool) bool {\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\t// Parse extra document end indicators.\n\tif !implicit {\n\t\tfor token.typ == yaml_DOCUMENT_END_TOKEN {\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\tif implicit && token.typ != yaml_VERSION_DIRECTIVE_TOKEN &&\n\t\ttoken.typ != yaml_TAG_DIRECTIVE_TOKEN &&\n\t\ttoken.typ != yaml_DOCUMENT_START_TOKEN &&\n\t\ttoken.typ != yaml_STREAM_END_TOKEN {\n\t\t// Parse an implicit document.\n\t\tif !yaml_parser_process_directives(parser, nil, nil) {\n\t\t\treturn false\n\t\t}\n\t\tparser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)\n\t\tparser.state = yaml_PARSE_BLOCK_NODE_STATE\n\n\t\tvar head_comment []byte\n\t\tif len(parser.head_comment) > 0 {\n\t\t\t// [Go] Scan the header comment backwards, and if an empty line is found, break\n\t\t\t//      the header so the part before the last empty line goes into the\n\t\t\t//      document header, while the bottom of it goes into a follow up event.\n\t\t\tfor i := len(parser.head_comment) - 1; i > 0; i-- {\n\t\t\t\tif parser.head_comment[i] == '\\n' {\n\t\t\t\t\tif i == len(parser.head_comment)-1 {\n\t\t\t\t\t\thead_comment = parser.head_comment[:i]\n\t\t\t\t\t\tparser.head_comment = parser.head_comment[i+1:]\n\t\t\t\t\t\tbreak\n\t\t\t\t\t} else if parser.head_comment[i-1] == '\\n' {\n\t\t\t\t\t\thead_comment = parser.head_comment[:i-1]\n\t\t\t\t\t\tparser.head_comment = parser.head_comment[i+1:]\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_DOCUMENT_START_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\n\t\t\thead_comment: head_comment,\n\t\t}\n\n\t} else if token.typ != yaml_STREAM_END_TOKEN {\n\t\t// Parse an explicit document.\n\t\tvar version_directive *yaml_version_directive_t\n\t\tvar tag_directives []yaml_tag_directive_t\n\t\tstart_mark := token.start_mark\n\t\tif !yaml_parser_process_directives(parser, &version_directive, &tag_directives) {\n\t\t\treturn false\n\t\t}\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_DOCUMENT_START_TOKEN {\n\t\t\tyaml_parser_set_parser_error(parser,\n\t\t\t\t\"did not find expected <document start>\", token.start_mark)\n\t\t\treturn false\n\t\t}\n\t\tparser.states = append(parser.states, yaml_PARSE_DOCUMENT_END_STATE)\n\t\tparser.state = yaml_PARSE_DOCUMENT_CONTENT_STATE\n\t\tend_mark := token.end_mark\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:               yaml_DOCUMENT_START_EVENT,\n\t\t\tstart_mark:        start_mark,\n\t\t\tend_mark:          end_mark,\n\t\t\tversion_directive: version_directive,\n\t\t\ttag_directives:    tag_directives,\n\t\t\timplicit:          false,\n\t\t}\n\t\tskip_token(parser)\n\n\t} else {\n\t\t// Parse the stream end.\n\t\tparser.state = yaml_PARSE_END_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_STREAM_END_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\t\tskip_token(parser)\n\t}\n\n\treturn true\n}\n\n// Parse the productions:\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\n//\n//\t***********\nfunc yaml_parser_parse_document_content(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_VERSION_DIRECTIVE_TOKEN ||\n\t\ttoken.typ == yaml_TAG_DIRECTIVE_TOKEN ||\n\t\ttoken.typ == yaml_DOCUMENT_START_TOKEN ||\n\t\ttoken.typ == yaml_DOCUMENT_END_TOKEN ||\n\t\ttoken.typ == yaml_STREAM_END_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\treturn yaml_parser_process_empty_scalar(parser, event,\n\t\t\ttoken.start_mark)\n\t}\n\treturn yaml_parser_parse_node(parser, event, true, false)\n}\n\n// Parse the productions:\n// implicit_document    ::= block_node DOCUMENT-END*\n//\n//\t*************\n//\n// explicit_document    ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*\nfunc yaml_parser_parse_document_end(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tstart_mark := token.start_mark\n\tend_mark := token.start_mark\n\n\timplicit := true\n\tif token.typ == yaml_DOCUMENT_END_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tskip_token(parser)\n\t\timplicit = false\n\t}\n\n\tparser.tag_directives = parser.tag_directives[:0]\n\n\tparser.state = yaml_PARSE_DOCUMENT_START_STATE\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_DOCUMENT_END_EVENT,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\timplicit:   implicit,\n\t}\n\tyaml_parser_set_event_comments(parser, event)\n\tif len(event.head_comment) > 0 && len(event.foot_comment) == 0 {\n\t\tevent.foot_comment = event.head_comment\n\t\tevent.head_comment = nil\n\t}\n\treturn true\n}\n\nfunc yaml_parser_set_event_comments(parser *yaml_parser_t, event *yaml_event_t) {\n\tevent.head_comment = parser.head_comment\n\tevent.line_comment = parser.line_comment\n\tevent.foot_comment = parser.foot_comment\n\tparser.head_comment = nil\n\tparser.line_comment = nil\n\tparser.foot_comment = nil\n\tparser.tail_comment = nil\n\tparser.stem_comment = nil\n}\n\n// Parse the productions:\n// block_node_or_indentless_sequence    ::=\n//\n//\tALIAS\n//\t*****\n//\t| properties (block_content | indentless_block_sequence)?\n//\t  **********  *\n//\t| block_content | indentless_block_sequence\n//\t  *\n//\n// block_node           ::= ALIAS\n//\n//\t*****\n//\t| properties block_content?\n//\t  ********** *\n//\t| block_content\n//\t  *\n//\n// flow_node            ::= ALIAS\n//\n//\t*****\n//\t| properties flow_content?\n//\t  ********** *\n//\t| flow_content\n//\t  *\n//\n// properties           ::= TAG ANCHOR? | ANCHOR TAG?\n//\n//\t*************************\n//\n// block_content        ::= block_collection | flow_collection | SCALAR\n//\n//\t******\n//\n// flow_content         ::= flow_collection | SCALAR\n//\n//\t******\nfunc yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, indentless_sequence bool) bool {\n\t//defer trace(\"yaml_parser_parse_node\", \"block:\", block, \"indentless_sequence:\", indentless_sequence)()\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_ALIAS_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_ALIAS_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t\tanchor:     token.value,\n\t\t}\n\t\tyaml_parser_set_event_comments(parser, event)\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\n\tstart_mark := token.start_mark\n\tend_mark := token.start_mark\n\n\tvar tag_token bool\n\tvar tag_handle, tag_suffix, anchor []byte\n\tvar tag_mark yaml_mark_t\n\tif token.typ == yaml_ANCHOR_TOKEN {\n\t\tanchor = token.value\n\t\tstart_mark = token.start_mark\n\t\tend_mark = token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ == yaml_TAG_TOKEN {\n\t\t\ttag_token = true\n\t\t\ttag_handle = token.value\n\t\t\ttag_suffix = token.suffix\n\t\t\ttag_mark = token.start_mark\n\t\t\tend_mark = token.end_mark\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t} else if token.typ == yaml_TAG_TOKEN {\n\t\ttag_token = true\n\t\ttag_handle = token.value\n\t\ttag_suffix = token.suffix\n\t\tstart_mark = token.start_mark\n\t\ttag_mark = token.start_mark\n\t\tend_mark = token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ == yaml_ANCHOR_TOKEN {\n\t\t\tanchor = token.value\n\t\t\tend_mark = token.end_mark\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\tvar tag []byte\n\tif tag_token {\n\t\tif len(tag_handle) == 0 {\n\t\t\ttag = tag_suffix\n\t\t\ttag_suffix = nil\n\t\t} else {\n\t\t\tfor i := range parser.tag_directives {\n\t\t\t\tif bytes.Equal(parser.tag_directives[i].handle, tag_handle) {\n\t\t\t\t\ttag = append([]byte(nil), parser.tag_directives[i].prefix...)\n\t\t\t\t\ttag = append(tag, tag_suffix...)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif len(tag) == 0 {\n\t\t\t\tyaml_parser_set_parser_error_context(parser,\n\t\t\t\t\t\"while parsing a node\", start_mark,\n\t\t\t\t\t\"found undefined tag handle\", tag_mark)\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\timplicit := len(tag) == 0\n\tif indentless_sequence && token.typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\tif token.typ == yaml_SCALAR_TOKEN {\n\t\tvar plain_implicit, quoted_implicit bool\n\t\tend_mark = token.end_mark\n\t\tif (len(tag) == 0 && token.style == yaml_PLAIN_SCALAR_STYLE) || (len(tag) == 1 && tag[0] == '!') {\n\t\t\tplain_implicit = true\n\t\t} else if len(tag) == 0 {\n\t\t\tquoted_implicit = true\n\t\t}\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:             yaml_SCALAR_EVENT,\n\t\t\tstart_mark:      start_mark,\n\t\t\tend_mark:        end_mark,\n\t\t\tanchor:          anchor,\n\t\t\ttag:             tag,\n\t\t\tvalue:           token.value,\n\t\t\timplicit:        plain_implicit,\n\t\t\tquoted_implicit: quoted_implicit,\n\t\t\tstyle:           yaml_style_t(token.style),\n\t\t}\n\t\tyaml_parser_set_event_comments(parser, event)\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\tif token.typ == yaml_FLOW_SEQUENCE_START_TOKEN {\n\t\t// [Go] Some of the events below can be merged as they differ only on style.\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_FLOW_SEQUENCE_STYLE),\n\t\t}\n\t\tyaml_parser_set_event_comments(parser, event)\n\t\treturn true\n\t}\n\tif token.typ == yaml_FLOW_MAPPING_START_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_MAPPING_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),\n\t\t}\n\t\tyaml_parser_set_event_comments(parser, event)\n\t\treturn true\n\t}\n\tif block && token.typ == yaml_BLOCK_SEQUENCE_START_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_BLOCK_SEQUENCE_STYLE),\n\t\t}\n\t\tif parser.stem_comment != nil {\n\t\t\tevent.head_comment = parser.stem_comment\n\t\t\tparser.stem_comment = nil\n\t\t}\n\t\treturn true\n\t}\n\tif block && token.typ == yaml_BLOCK_MAPPING_START_TOKEN {\n\t\tend_mark = token.end_mark\n\t\tparser.state = yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_MAPPING_START_EVENT,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tanchor:     anchor,\n\t\t\ttag:        tag,\n\t\t\timplicit:   implicit,\n\t\t\tstyle:      yaml_style_t(yaml_BLOCK_MAPPING_STYLE),\n\t\t}\n\t\tif parser.stem_comment != nil {\n\t\t\tevent.head_comment = parser.stem_comment\n\t\t\tparser.stem_comment = nil\n\t\t}\n\t\treturn true\n\t}\n\tif len(anchor) > 0 || len(tag) > 0 {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:             yaml_SCALAR_EVENT,\n\t\t\tstart_mark:      start_mark,\n\t\t\tend_mark:        end_mark,\n\t\t\tanchor:          anchor,\n\t\t\ttag:             tag,\n\t\t\timplicit:        implicit,\n\t\t\tquoted_implicit: false,\n\t\t\tstyle:           yaml_style_t(yaml_PLAIN_SCALAR_STYLE),\n\t\t}\n\t\treturn true\n\t}\n\n\tcontext := \"while parsing a flow node\"\n\tif block {\n\t\tcontext = \"while parsing a block node\"\n\t}\n\tyaml_parser_set_parser_error_context(parser, context, start_mark,\n\t\t\"did not find expected node content\", token.start_mark)\n\treturn false\n}\n\n// Parse the productions:\n// block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END\n//\n//\t********************  *********** *             *********\nfunc yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\tmark := token.end_mark\n\t\tprior_head_len := len(parser.head_comment)\n\t\tskip_token(parser)\n\t\tyaml_parser_split_stem_comment(parser, prior_head_len)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_BLOCK_ENTRY_TOKEN && token.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, false)\n\t\t} else {\n\t\t\tparser.state = yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE\n\t\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t\t}\n\t}\n\tif token.typ == yaml_BLOCK_END_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_SEQUENCE_END_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\n\tcontext_mark := parser.marks[len(parser.marks)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\"while parsing a block collection\", context_mark,\n\t\t\"did not find expected '-' indicator\", token.start_mark)\n}\n\n// Parse the productions:\n// indentless_sequence  ::= (BLOCK-ENTRY block_node?)+\n//\n//\t*********** *\nfunc yaml_parser_parse_indentless_sequence_entry(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\tmark := token.end_mark\n\t\tprior_head_len := len(parser.head_comment)\n\t\tskip_token(parser)\n\t\tyaml_parser_split_stem_comment(parser, prior_head_len)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_BLOCK_ENTRY_TOKEN &&\n\t\t\ttoken.typ != yaml_KEY_TOKEN &&\n\t\t\ttoken.typ != yaml_VALUE_TOKEN &&\n\t\t\ttoken.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, false)\n\t\t}\n\t\tparser.state = yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\n\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t}\n\tparser.state = parser.states[len(parser.states)-1]\n\tparser.states = parser.states[:len(parser.states)-1]\n\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_SEQUENCE_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.start_mark, // [Go] Shouldn't this be token.end_mark?\n\t}\n\treturn true\n}\n\n// Split stem comment from head comment.\n//\n// When a sequence or map is found under a sequence entry, the former head comment\n// is assigned to the underlying sequence or map as a whole, not the individual\n// sequence or map entry as would be expected otherwise. To handle this case the\n// previous head comment is moved aside as the stem comment.\nfunc yaml_parser_split_stem_comment(parser *yaml_parser_t, stem_len int) {\n\tif stem_len == 0 {\n\t\treturn\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil || token.typ != yaml_BLOCK_SEQUENCE_START_TOKEN && token.typ != yaml_BLOCK_MAPPING_START_TOKEN {\n\t\treturn\n\t}\n\n\tparser.stem_comment = parser.head_comment[:stem_len]\n\tif len(parser.head_comment) == stem_len {\n\t\tparser.head_comment = nil\n\t} else {\n\t\t// Copy suffix to prevent very strange bugs if someone ever appends\n\t\t// further bytes to the prefix in the stem_comment slice above.\n\t\tparser.head_comment = append([]byte(nil), parser.head_comment[stem_len+1:]...)\n\t}\n}\n\n// Parse the productions:\n// block_mapping        ::= BLOCK-MAPPING_START\n//\n//\t*******************\n//\t((KEY block_node_or_indentless_sequence?)?\n//\t  *** *\n//\t(VALUE block_node_or_indentless_sequence?)?)*\n//\n//\tBLOCK-END\n//\t*********\nfunc yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\t// [Go] A tail comment was left from the prior mapping value processed. Emit an event\n\t//      as it needs to be processed with that value and not the following key.\n\tif len(parser.tail_comment) > 0 {\n\t\t*event = yaml_event_t{\n\t\t\ttyp:          yaml_TAIL_COMMENT_EVENT,\n\t\t\tstart_mark:   token.start_mark,\n\t\t\tend_mark:     token.end_mark,\n\t\t\tfoot_comment: parser.tail_comment,\n\t\t}\n\t\tparser.tail_comment = nil\n\t\treturn true\n\t}\n\n\tif token.typ == yaml_KEY_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_KEY_TOKEN &&\n\t\t\ttoken.typ != yaml_VALUE_TOKEN &&\n\t\t\ttoken.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_VALUE_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, true)\n\t\t} else {\n\t\t\tparser.state = yaml_PARSE_BLOCK_MAPPING_VALUE_STATE\n\t\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t\t}\n\t} else if token.typ == yaml_BLOCK_END_TOKEN {\n\t\tparser.state = parser.states[len(parser.states)-1]\n\t\tparser.states = parser.states[:len(parser.states)-1]\n\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t\t*event = yaml_event_t{\n\t\t\ttyp:        yaml_MAPPING_END_EVENT,\n\t\t\tstart_mark: token.start_mark,\n\t\t\tend_mark:   token.end_mark,\n\t\t}\n\t\tyaml_parser_set_event_comments(parser, event)\n\t\tskip_token(parser)\n\t\treturn true\n\t}\n\n\tcontext_mark := parser.marks[len(parser.marks)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\"while parsing a block mapping\", context_mark,\n\t\t\"did not find expected key\", token.start_mark)\n}\n\n// Parse the productions:\n// block_mapping        ::= BLOCK-MAPPING_START\n//\n//\t((KEY block_node_or_indentless_sequence?)?\n//\n//\t(VALUE block_node_or_indentless_sequence?)?)*\n//\t ***** *\n//\tBLOCK-END\nfunc yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ == yaml_VALUE_TOKEN {\n\t\tmark := token.end_mark\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_KEY_TOKEN &&\n\t\t\ttoken.typ != yaml_VALUE_TOKEN &&\n\t\t\ttoken.typ != yaml_BLOCK_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_BLOCK_MAPPING_KEY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, true, true)\n\t\t}\n\t\tparser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE\n\t\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n\t}\n\tparser.state = yaml_PARSE_BLOCK_MAPPING_KEY_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n}\n\n// Parse the productions:\n// flow_sequence        ::= FLOW-SEQUENCE-START\n//\n//\t*******************\n//\t(flow_sequence_entry FLOW-ENTRY)*\n//\t *                   **********\n//\tflow_sequence_entry?\n//\t*\n//\tFLOW-SEQUENCE-END\n//\t*****************\n//\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//\n//\t*\nfunc yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\tif !first {\n\t\t\tif token.typ == yaml_FLOW_ENTRY_TOKEN {\n\t\t\t\tskip_token(parser)\n\t\t\t\ttoken = peek_token(parser)\n\t\t\t\tif token == nil {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcontext_mark := parser.marks[len(parser.marks)-1]\n\t\t\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t\t\t\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\t\t\t\"while parsing a flow sequence\", context_mark,\n\t\t\t\t\t\"did not find expected ',' or ']'\", token.start_mark)\n\t\t\t}\n\t\t}\n\n\t\tif token.typ == yaml_KEY_TOKEN {\n\t\t\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE\n\t\t\t*event = yaml_event_t{\n\t\t\t\ttyp:        yaml_MAPPING_START_EVENT,\n\t\t\t\tstart_mark: token.start_mark,\n\t\t\t\tend_mark:   token.end_mark,\n\t\t\t\timplicit:   true,\n\t\t\t\tstyle:      yaml_style_t(yaml_FLOW_MAPPING_STYLE),\n\t\t\t}\n\t\t\tskip_token(parser)\n\t\t\treturn true\n\t\t} else if token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\n\tparser.state = parser.states[len(parser.states)-1]\n\tparser.states = parser.states[:len(parser.states)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_SEQUENCE_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.end_mark,\n\t}\n\tyaml_parser_set_event_comments(parser, event)\n\n\tskip_token(parser)\n\treturn true\n}\n\n// Parse the productions:\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//\n//\t*** *\nfunc yaml_parser_parse_flow_sequence_entry_mapping_key(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ != yaml_VALUE_TOKEN &&\n\t\ttoken.typ != yaml_FLOW_ENTRY_TOKEN &&\n\t\ttoken.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE)\n\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t}\n\tmark := token.end_mark\n\tskip_token(parser)\n\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, mark)\n}\n\n// Parse the productions:\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//\n//\t***** *\nfunc yaml_parser_parse_flow_sequence_entry_mapping_value(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif token.typ == yaml_VALUE_TOKEN {\n\t\tskip_token(parser)\n\t\ttoken := peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_SEQUENCE_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n}\n\n// Parse the productions:\n// flow_sequence_entry  ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//\n//\t*\nfunc yaml_parser_parse_flow_sequence_entry_mapping_end(parser *yaml_parser_t, event *yaml_event_t) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tparser.state = yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_MAPPING_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.start_mark, // [Go] Shouldn't this be end_mark?\n\t}\n\treturn true\n}\n\n// Parse the productions:\n// flow_mapping         ::= FLOW-MAPPING-START\n//\n//\t******************\n//\t(flow_mapping_entry FLOW-ENTRY)*\n//\t *                  **********\n//\tflow_mapping_entry?\n//\t******************\n//\tFLOW-MAPPING-END\n//\t****************\n//\n// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//   - *** *\nfunc yaml_parser_parse_flow_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool {\n\tif first {\n\t\ttoken := peek_token(parser)\n\t\tparser.marks = append(parser.marks, token.start_mark)\n\t\tskip_token(parser)\n\t}\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tif token.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\tif !first {\n\t\t\tif token.typ == yaml_FLOW_ENTRY_TOKEN {\n\t\t\t\tskip_token(parser)\n\t\t\t\ttoken = peek_token(parser)\n\t\t\t\tif token == nil {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcontext_mark := parser.marks[len(parser.marks)-1]\n\t\t\t\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t\t\t\treturn yaml_parser_set_parser_error_context(parser,\n\t\t\t\t\t\"while parsing a flow mapping\", context_mark,\n\t\t\t\t\t\"did not find expected ',' or '}'\", token.start_mark)\n\t\t\t}\n\t\t}\n\n\t\tif token.typ == yaml_KEY_TOKEN {\n\t\t\tskip_token(parser)\n\t\t\ttoken = peek_token(parser)\n\t\t\tif token == nil {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif token.typ != yaml_VALUE_TOKEN &&\n\t\t\t\ttoken.typ != yaml_FLOW_ENTRY_TOKEN &&\n\t\t\t\ttoken.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_VALUE_STATE)\n\t\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t\t} else {\n\t\t\t\tparser.state = yaml_PARSE_FLOW_MAPPING_VALUE_STATE\n\t\t\t\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n\t\t\t}\n\t\t} else if token.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\n\tparser.state = parser.states[len(parser.states)-1]\n\tparser.states = parser.states[:len(parser.states)-1]\n\tparser.marks = parser.marks[:len(parser.marks)-1]\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_MAPPING_END_EVENT,\n\t\tstart_mark: token.start_mark,\n\t\tend_mark:   token.end_mark,\n\t}\n\tyaml_parser_set_event_comments(parser, event)\n\tskip_token(parser)\n\treturn true\n}\n\n// Parse the productions:\n// flow_mapping_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?\n//   - ***** *\nfunc yaml_parser_parse_flow_mapping_value(parser *yaml_parser_t, event *yaml_event_t, empty bool) bool {\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\tif empty {\n\t\tparser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE\n\t\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n\t}\n\tif token.typ == yaml_VALUE_TOKEN {\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t\tif token.typ != yaml_FLOW_ENTRY_TOKEN && token.typ != yaml_FLOW_MAPPING_END_TOKEN {\n\t\t\tparser.states = append(parser.states, yaml_PARSE_FLOW_MAPPING_KEY_STATE)\n\t\t\treturn yaml_parser_parse_node(parser, event, false, false)\n\t\t}\n\t}\n\tparser.state = yaml_PARSE_FLOW_MAPPING_KEY_STATE\n\treturn yaml_parser_process_empty_scalar(parser, event, token.start_mark)\n}\n\n// Generate an empty scalar event.\nfunc yaml_parser_process_empty_scalar(parser *yaml_parser_t, event *yaml_event_t, mark yaml_mark_t) bool {\n\t*event = yaml_event_t{\n\t\ttyp:        yaml_SCALAR_EVENT,\n\t\tstart_mark: mark,\n\t\tend_mark:   mark,\n\t\tvalue:      nil, // Empty\n\t\timplicit:   true,\n\t\tstyle:      yaml_style_t(yaml_PLAIN_SCALAR_STYLE),\n\t}\n\treturn true\n}\n\nvar default_tag_directives = []yaml_tag_directive_t{\n\t{[]byte(\"!\"), []byte(\"!\")},\n\t{[]byte(\"!!\"), []byte(\"tag:yaml.org,2002:\")},\n}\n\n// Parse directives.\nfunc yaml_parser_process_directives(parser *yaml_parser_t,\n\tversion_directive_ref **yaml_version_directive_t,\n\ttag_directives_ref *[]yaml_tag_directive_t) bool {\n\n\tvar version_directive *yaml_version_directive_t\n\tvar tag_directives []yaml_tag_directive_t\n\n\ttoken := peek_token(parser)\n\tif token == nil {\n\t\treturn false\n\t}\n\n\tfor token.typ == yaml_VERSION_DIRECTIVE_TOKEN || token.typ == yaml_TAG_DIRECTIVE_TOKEN {\n\t\tif token.typ == yaml_VERSION_DIRECTIVE_TOKEN {\n\t\t\tif version_directive != nil {\n\t\t\t\tyaml_parser_set_parser_error(parser,\n\t\t\t\t\t\"found duplicate %YAML directive\", token.start_mark)\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif token.major != 1 || token.minor != 1 {\n\t\t\t\tyaml_parser_set_parser_error(parser,\n\t\t\t\t\t\"found incompatible YAML document\", token.start_mark)\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tversion_directive = &yaml_version_directive_t{\n\t\t\t\tmajor: token.major,\n\t\t\t\tminor: token.minor,\n\t\t\t}\n\t\t} else if token.typ == yaml_TAG_DIRECTIVE_TOKEN {\n\t\t\tvalue := yaml_tag_directive_t{\n\t\t\t\thandle: token.value,\n\t\t\t\tprefix: token.prefix,\n\t\t\t}\n\t\t\tif !yaml_parser_append_tag_directive(parser, value, false, token.start_mark) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\ttag_directives = append(tag_directives, value)\n\t\t}\n\n\t\tskip_token(parser)\n\t\ttoken = peek_token(parser)\n\t\tif token == nil {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tfor i := range default_tag_directives {\n\t\tif !yaml_parser_append_tag_directive(parser, default_tag_directives[i], true, token.start_mark) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif version_directive_ref != nil {\n\t\t*version_directive_ref = version_directive\n\t}\n\tif tag_directives_ref != nil {\n\t\t*tag_directives_ref = tag_directives\n\t}\n\treturn true\n}\n\n// Append a tag directive to the directives stack.\nfunc yaml_parser_append_tag_directive(parser *yaml_parser_t, value yaml_tag_directive_t, allow_duplicates bool, mark yaml_mark_t) bool {\n\tfor i := range parser.tag_directives {\n\t\tif bytes.Equal(value.handle, parser.tag_directives[i].handle) {\n\t\t\tif allow_duplicates {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn yaml_parser_set_parser_error(parser, \"found duplicate %TAG directive\", mark)\n\t\t}\n\t}\n\n\t// [Go] I suspect the copy is unnecessary. This was likely done\n\t// because there was no way to track ownership of the data.\n\tvalue_copy := yaml_tag_directive_t{\n\t\thandle: make([]byte, len(value.handle)),\n\t\tprefix: make([]byte, len(value.prefix)),\n\t}\n\tcopy(value_copy.handle, value.handle)\n\tcopy(value_copy.prefix, value.prefix)\n\tparser.tag_directives = append(parser.tag_directives, value_copy)\n\treturn true\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/readerc.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n// Copyright (c) 2006-2010 Kirill Simonov\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\npackage yaml\n\nimport (\n\t\"io\"\n)\n\n// Set the reader error and return 0.\nfunc yaml_parser_set_reader_error(parser *yaml_parser_t, problem string, offset int, value int) bool {\n\tparser.error = yaml_READER_ERROR\n\tparser.problem = problem\n\tparser.problem_offset = offset\n\tparser.problem_value = value\n\treturn false\n}\n\n// Byte order marks.\nconst (\n\tbom_UTF8    = \"\\xef\\xbb\\xbf\"\n\tbom_UTF16LE = \"\\xff\\xfe\"\n\tbom_UTF16BE = \"\\xfe\\xff\"\n)\n\n// Determine the input stream encoding by checking the BOM symbol. If no BOM is\n// found, the UTF-8 encoding is assumed. Return 1 on success, 0 on failure.\nfunc yaml_parser_determine_encoding(parser *yaml_parser_t) bool {\n\t// Ensure that we had enough bytes in the raw buffer.\n\tfor !parser.eof && len(parser.raw_buffer)-parser.raw_buffer_pos < 3 {\n\t\tif !yaml_parser_update_raw_buffer(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Determine the encoding.\n\tbuf := parser.raw_buffer\n\tpos := parser.raw_buffer_pos\n\tavail := len(buf) - pos\n\tif avail >= 2 && buf[pos] == bom_UTF16LE[0] && buf[pos+1] == bom_UTF16LE[1] {\n\t\tparser.encoding = yaml_UTF16LE_ENCODING\n\t\tparser.raw_buffer_pos += 2\n\t\tparser.offset += 2\n\t} else if avail >= 2 && buf[pos] == bom_UTF16BE[0] && buf[pos+1] == bom_UTF16BE[1] {\n\t\tparser.encoding = yaml_UTF16BE_ENCODING\n\t\tparser.raw_buffer_pos += 2\n\t\tparser.offset += 2\n\t} else if avail >= 3 && buf[pos] == bom_UTF8[0] && buf[pos+1] == bom_UTF8[1] && buf[pos+2] == bom_UTF8[2] {\n\t\tparser.encoding = yaml_UTF8_ENCODING\n\t\tparser.raw_buffer_pos += 3\n\t\tparser.offset += 3\n\t} else {\n\t\tparser.encoding = yaml_UTF8_ENCODING\n\t}\n\treturn true\n}\n\n// Update the raw buffer.\nfunc yaml_parser_update_raw_buffer(parser *yaml_parser_t) bool {\n\tsize_read := 0\n\n\t// Return if the raw buffer is full.\n\tif parser.raw_buffer_pos == 0 && len(parser.raw_buffer) == cap(parser.raw_buffer) {\n\t\treturn true\n\t}\n\n\t// Return on EOF.\n\tif parser.eof {\n\t\treturn true\n\t}\n\n\t// Move the remaining bytes in the raw buffer to the beginning.\n\tif parser.raw_buffer_pos > 0 && parser.raw_buffer_pos < len(parser.raw_buffer) {\n\t\tcopy(parser.raw_buffer, parser.raw_buffer[parser.raw_buffer_pos:])\n\t}\n\tparser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)-parser.raw_buffer_pos]\n\tparser.raw_buffer_pos = 0\n\n\t// Call the read handler to fill the buffer.\n\tsize_read, err := parser.read_handler(parser, parser.raw_buffer[len(parser.raw_buffer):cap(parser.raw_buffer)])\n\tparser.raw_buffer = parser.raw_buffer[:len(parser.raw_buffer)+size_read]\n\tif err == io.EOF {\n\t\tparser.eof = true\n\t} else if err != nil {\n\t\treturn yaml_parser_set_reader_error(parser, \"input error: \"+err.Error(), parser.offset, -1)\n\t}\n\treturn true\n}\n\n// Ensure that the buffer contains at least `length` characters.\n// Return true on success, false on failure.\n//\n// The length is supposed to be significantly less that the buffer size.\nfunc yaml_parser_update_buffer(parser *yaml_parser_t, length int) bool {\n\tif parser.read_handler == nil {\n\t\tpanic(\"read handler must be set\")\n\t}\n\n\t// [Go] This function was changed to guarantee the requested length size at EOF.\n\t// The fact we need to do this is pretty awful, but the description above implies\n\t// for that to be the case, and there are tests\n\n\t// If the EOF flag is set and the raw buffer is empty, do nothing.\n\tif parser.eof && parser.raw_buffer_pos == len(parser.raw_buffer) {\n\t\t// [Go] ACTUALLY! Read the documentation of this function above.\n\t\t// This is just broken. To return true, we need to have the\n\t\t// given length in the buffer. Not doing that means every single\n\t\t// check that calls this function to make sure the buffer has a\n\t\t// given length is Go) panicking; or C) accessing invalid memory.\n\t\t//return true\n\t}\n\n\t// Return if the buffer contains enough characters.\n\tif parser.unread >= length {\n\t\treturn true\n\t}\n\n\t// Determine the input encoding if it is not known yet.\n\tif parser.encoding == yaml_ANY_ENCODING {\n\t\tif !yaml_parser_determine_encoding(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Move the unread characters to the beginning of the buffer.\n\tbuffer_len := len(parser.buffer)\n\tif parser.buffer_pos > 0 && parser.buffer_pos < buffer_len {\n\t\tcopy(parser.buffer, parser.buffer[parser.buffer_pos:])\n\t\tbuffer_len -= parser.buffer_pos\n\t\tparser.buffer_pos = 0\n\t} else if parser.buffer_pos == buffer_len {\n\t\tbuffer_len = 0\n\t\tparser.buffer_pos = 0\n\t}\n\n\t// Open the whole buffer for writing, and cut it before returning.\n\tparser.buffer = parser.buffer[:cap(parser.buffer)]\n\n\t// Fill the buffer until it has enough characters.\n\tfirst := true\n\tfor parser.unread < length {\n\n\t\t// Fill the raw buffer if necessary.\n\t\tif !first || parser.raw_buffer_pos == len(parser.raw_buffer) {\n\t\t\tif !yaml_parser_update_raw_buffer(parser) {\n\t\t\t\tparser.buffer = parser.buffer[:buffer_len]\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tfirst = false\n\n\t\t// Decode the raw buffer.\n\tinner:\n\t\tfor parser.raw_buffer_pos != len(parser.raw_buffer) {\n\t\t\tvar value rune\n\t\t\tvar width int\n\n\t\t\traw_unread := len(parser.raw_buffer) - parser.raw_buffer_pos\n\n\t\t\t// Decode the next character.\n\t\t\tswitch parser.encoding {\n\t\t\tcase yaml_UTF8_ENCODING:\n\t\t\t\t// Decode a UTF-8 character.  Check RFC 3629\n\t\t\t\t// (http://www.ietf.org/rfc/rfc3629.txt) for more details.\n\t\t\t\t//\n\t\t\t\t// The following table (taken from the RFC) is used for\n\t\t\t\t// decoding.\n\t\t\t\t//\n\t\t\t\t//    Char. number range |        UTF-8 octet sequence\n\t\t\t\t//      (hexadecimal)    |              (binary)\n\t\t\t\t//   --------------------+------------------------------------\n\t\t\t\t//   0000 0000-0000 007F | 0xxxxxxx\n\t\t\t\t//   0000 0080-0000 07FF | 110xxxxx 10xxxxxx\n\t\t\t\t//   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\t//   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t\t//\n\t\t\t\t// Additionally, the characters in the range 0xD800-0xDFFF\n\t\t\t\t// are prohibited as they are reserved for use with UTF-16\n\t\t\t\t// surrogate pairs.\n\n\t\t\t\t// Determine the length of the UTF-8 sequence.\n\t\t\t\toctet := parser.raw_buffer[parser.raw_buffer_pos]\n\t\t\t\tswitch {\n\t\t\t\tcase octet&0x80 == 0x00:\n\t\t\t\t\twidth = 1\n\t\t\t\tcase octet&0xE0 == 0xC0:\n\t\t\t\t\twidth = 2\n\t\t\t\tcase octet&0xF0 == 0xE0:\n\t\t\t\t\twidth = 3\n\t\t\t\tcase octet&0xF8 == 0xF0:\n\t\t\t\t\twidth = 4\n\t\t\t\tdefault:\n\t\t\t\t\t// The leading octet is invalid.\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"invalid leading UTF-8 octet\",\n\t\t\t\t\t\tparser.offset, int(octet))\n\t\t\t\t}\n\n\t\t\t\t// Check if the raw buffer contains an incomplete character.\n\t\t\t\tif width > raw_unread {\n\t\t\t\t\tif parser.eof {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"incomplete UTF-8 octet sequence\",\n\t\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t\t}\n\t\t\t\t\tbreak inner\n\t\t\t\t}\n\n\t\t\t\t// Decode the leading octet.\n\t\t\t\tswitch {\n\t\t\t\tcase octet&0x80 == 0x00:\n\t\t\t\t\tvalue = rune(octet & 0x7F)\n\t\t\t\tcase octet&0xE0 == 0xC0:\n\t\t\t\t\tvalue = rune(octet & 0x1F)\n\t\t\t\tcase octet&0xF0 == 0xE0:\n\t\t\t\t\tvalue = rune(octet & 0x0F)\n\t\t\t\tcase octet&0xF8 == 0xF0:\n\t\t\t\t\tvalue = rune(octet & 0x07)\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = 0\n\t\t\t\t}\n\n\t\t\t\t// Check and decode the trailing octets.\n\t\t\t\tfor k := 1; k < width; k++ {\n\t\t\t\t\toctet = parser.raw_buffer[parser.raw_buffer_pos+k]\n\n\t\t\t\t\t// Check if the octet is valid.\n\t\t\t\t\tif (octet & 0xC0) != 0x80 {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"invalid trailing UTF-8 octet\",\n\t\t\t\t\t\t\tparser.offset+k, int(octet))\n\t\t\t\t\t}\n\n\t\t\t\t\t// Decode the octet.\n\t\t\t\t\tvalue = (value << 6) + rune(octet&0x3F)\n\t\t\t\t}\n\n\t\t\t\t// Check the length of the sequence against the value.\n\t\t\t\tswitch {\n\t\t\t\tcase width == 1:\n\t\t\t\tcase width == 2 && value >= 0x80:\n\t\t\t\tcase width == 3 && value >= 0x800:\n\t\t\t\tcase width == 4 && value >= 0x10000:\n\t\t\t\tdefault:\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"invalid length of a UTF-8 sequence\",\n\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t}\n\n\t\t\t\t// Check the range of the value.\n\t\t\t\tif value >= 0xD800 && value <= 0xDFFF || value > 0x10FFFF {\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"invalid Unicode character\",\n\t\t\t\t\t\tparser.offset, int(value))\n\t\t\t\t}\n\n\t\t\tcase yaml_UTF16LE_ENCODING, yaml_UTF16BE_ENCODING:\n\t\t\t\tvar low, high int\n\t\t\t\tif parser.encoding == yaml_UTF16LE_ENCODING {\n\t\t\t\t\tlow, high = 0, 1\n\t\t\t\t} else {\n\t\t\t\t\tlow, high = 1, 0\n\t\t\t\t}\n\n\t\t\t\t// The UTF-16 encoding is not as simple as one might\n\t\t\t\t// naively think.  Check RFC 2781\n\t\t\t\t// (http://www.ietf.org/rfc/rfc2781.txt).\n\t\t\t\t//\n\t\t\t\t// Normally, two subsequent bytes describe a Unicode\n\t\t\t\t// character.  However a special technique (called a\n\t\t\t\t// surrogate pair) is used for specifying character\n\t\t\t\t// values larger than 0xFFFF.\n\t\t\t\t//\n\t\t\t\t// A surrogate pair consists of two pseudo-characters:\n\t\t\t\t//      high surrogate area (0xD800-0xDBFF)\n\t\t\t\t//      low surrogate area (0xDC00-0xDFFF)\n\t\t\t\t//\n\t\t\t\t// The following formulas are used for decoding\n\t\t\t\t// and encoding characters using surrogate pairs:\n\t\t\t\t//\n\t\t\t\t//  U  = U' + 0x10000   (0x01 00 00 <= U <= 0x10 FF FF)\n\t\t\t\t//  U' = yyyyyyyyyyxxxxxxxxxx   (0 <= U' <= 0x0F FF FF)\n\t\t\t\t//  W1 = 110110yyyyyyyyyy\n\t\t\t\t//  W2 = 110111xxxxxxxxxx\n\t\t\t\t//\n\t\t\t\t// where U is the character value, W1 is the high surrogate\n\t\t\t\t// area, W2 is the low surrogate area.\n\n\t\t\t\t// Check for incomplete UTF-16 character.\n\t\t\t\tif raw_unread < 2 {\n\t\t\t\t\tif parser.eof {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"incomplete UTF-16 character\",\n\t\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t\t}\n\t\t\t\t\tbreak inner\n\t\t\t\t}\n\n\t\t\t\t// Get the character.\n\t\t\t\tvalue = rune(parser.raw_buffer[parser.raw_buffer_pos+low]) +\n\t\t\t\t\t(rune(parser.raw_buffer[parser.raw_buffer_pos+high]) << 8)\n\n\t\t\t\t// Check for unexpected low surrogate area.\n\t\t\t\tif value&0xFC00 == 0xDC00 {\n\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\"unexpected low surrogate area\",\n\t\t\t\t\t\tparser.offset, int(value))\n\t\t\t\t}\n\n\t\t\t\t// Check for a high surrogate area.\n\t\t\t\tif value&0xFC00 == 0xD800 {\n\t\t\t\t\twidth = 4\n\n\t\t\t\t\t// Check for incomplete surrogate pair.\n\t\t\t\t\tif raw_unread < 4 {\n\t\t\t\t\t\tif parser.eof {\n\t\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\t\"incomplete UTF-16 surrogate pair\",\n\t\t\t\t\t\t\t\tparser.offset, -1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak inner\n\t\t\t\t\t}\n\n\t\t\t\t\t// Get the next character.\n\t\t\t\t\tvalue2 := rune(parser.raw_buffer[parser.raw_buffer_pos+low+2]) +\n\t\t\t\t\t\t(rune(parser.raw_buffer[parser.raw_buffer_pos+high+2]) << 8)\n\n\t\t\t\t\t// Check for a low surrogate area.\n\t\t\t\t\tif value2&0xFC00 != 0xDC00 {\n\t\t\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\t\t\"expected low surrogate area\",\n\t\t\t\t\t\t\tparser.offset+2, int(value2))\n\t\t\t\t\t}\n\n\t\t\t\t\t// Generate the value of the surrogate pair.\n\t\t\t\t\tvalue = 0x10000 + ((value & 0x3FF) << 10) + (value2 & 0x3FF)\n\t\t\t\t} else {\n\t\t\t\t\twidth = 2\n\t\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tpanic(\"impossible\")\n\t\t\t}\n\n\t\t\t// Check if the character is in the allowed range:\n\t\t\t//      #x9 | #xA | #xD | [#x20-#x7E]               (8 bit)\n\t\t\t//      | #x85 | [#xA0-#xD7FF] | [#xE000-#xFFFD]    (16 bit)\n\t\t\t//      | [#x10000-#x10FFFF]                        (32 bit)\n\t\t\tswitch {\n\t\t\tcase value == 0x09:\n\t\t\tcase value == 0x0A:\n\t\t\tcase value == 0x0D:\n\t\t\tcase value >= 0x20 && value <= 0x7E:\n\t\t\tcase value == 0x85:\n\t\t\tcase value >= 0xA0 && value <= 0xD7FF:\n\t\t\tcase value >= 0xE000 && value <= 0xFFFD:\n\t\t\tcase value >= 0x10000 && value <= 0x10FFFF:\n\t\t\tdefault:\n\t\t\t\treturn yaml_parser_set_reader_error(parser,\n\t\t\t\t\t\"control characters are not allowed\",\n\t\t\t\t\tparser.offset, int(value))\n\t\t\t}\n\n\t\t\t// Move the raw pointers.\n\t\t\tparser.raw_buffer_pos += width\n\t\t\tparser.offset += width\n\n\t\t\t// Finally put the character into the buffer.\n\t\t\tif value <= 0x7F {\n\t\t\t\t// 0000 0000-0000 007F . 0xxxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(value)\n\t\t\t\tbuffer_len += 1\n\t\t\t} else if value <= 0x7FF {\n\t\t\t\t// 0000 0080-0000 07FF . 110xxxxx 10xxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(0xC0 + (value >> 6))\n\t\t\t\tparser.buffer[buffer_len+1] = byte(0x80 + (value & 0x3F))\n\t\t\t\tbuffer_len += 2\n\t\t\t} else if value <= 0xFFFF {\n\t\t\t\t// 0000 0800-0000 FFFF . 1110xxxx 10xxxxxx 10xxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(0xE0 + (value >> 12))\n\t\t\t\tparser.buffer[buffer_len+1] = byte(0x80 + ((value >> 6) & 0x3F))\n\t\t\t\tparser.buffer[buffer_len+2] = byte(0x80 + (value & 0x3F))\n\t\t\t\tbuffer_len += 3\n\t\t\t} else {\n\t\t\t\t// 0001 0000-0010 FFFF . 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n\t\t\t\tparser.buffer[buffer_len+0] = byte(0xF0 + (value >> 18))\n\t\t\t\tparser.buffer[buffer_len+1] = byte(0x80 + ((value >> 12) & 0x3F))\n\t\t\t\tparser.buffer[buffer_len+2] = byte(0x80 + ((value >> 6) & 0x3F))\n\t\t\t\tparser.buffer[buffer_len+3] = byte(0x80 + (value & 0x3F))\n\t\t\t\tbuffer_len += 4\n\t\t\t}\n\n\t\t\tparser.unread++\n\t\t}\n\n\t\t// On EOF, put NUL into the buffer and return.\n\t\tif parser.eof {\n\t\t\tparser.buffer[buffer_len] = 0\n\t\t\tbuffer_len++\n\t\t\tparser.unread++\n\t\t\tbreak\n\t\t}\n\t}\n\t// [Go] Read the documentation of this function above. To return true,\n\t// we need to have the given length in the buffer. Not doing that means\n\t// every single check that calls this function to make sure the buffer\n\t// has a given length is Go) panicking; or C) accessing invalid memory.\n\t// This happens here due to the EOF above breaking early.\n\tfor buffer_len < length {\n\t\tparser.buffer[buffer_len] = 0\n\t\tbuffer_len++\n\t}\n\tparser.buffer = parser.buffer[:buffer_len]\n\treturn true\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/resolve.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage yaml\n\nimport (\n\t\"encoding/base64\"\n\t\"math\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\ntype resolveMapItem struct {\n\tvalue interface{}\n\ttag   string\n}\n\nvar resolveTable = make([]byte, 256)\nvar resolveMap = make(map[string]resolveMapItem)\n\nfunc init() {\n\tt := resolveTable\n\tt[int('+')] = 'S' // Sign\n\tt[int('-')] = 'S'\n\tfor _, c := range \"0123456789\" {\n\t\tt[int(c)] = 'D' // Digit\n\t}\n\tfor _, c := range \"yYnNtTfFoO~\" {\n\t\tt[int(c)] = 'M' // In map\n\t}\n\tt[int('.')] = '.' // Float (potentially in map)\n\n\tvar resolveMapList = []struct {\n\t\tv   interface{}\n\t\ttag string\n\t\tl   []string\n\t}{\n\t\t{true, boolTag, []string{\"true\", \"True\", \"TRUE\"}},\n\t\t{false, boolTag, []string{\"false\", \"False\", \"FALSE\"}},\n\t\t{nil, nullTag, []string{\"\", \"~\", \"null\", \"Null\", \"NULL\"}},\n\t\t{math.NaN(), floatTag, []string{\".nan\", \".NaN\", \".NAN\"}},\n\t\t{math.Inf(+1), floatTag, []string{\".inf\", \".Inf\", \".INF\"}},\n\t\t{math.Inf(+1), floatTag, []string{\"+.inf\", \"+.Inf\", \"+.INF\"}},\n\t\t{math.Inf(-1), floatTag, []string{\"-.inf\", \"-.Inf\", \"-.INF\"}},\n\t\t{\"<<\", mergeTag, []string{\"<<\"}},\n\t}\n\n\tm := resolveMap\n\tfor _, item := range resolveMapList {\n\t\tfor _, s := range item.l {\n\t\t\tm[s] = resolveMapItem{item.v, item.tag}\n\t\t}\n\t}\n}\n\nconst (\n\tnullTag      = \"!!null\"\n\tboolTag      = \"!!bool\"\n\tstrTag       = \"!!str\"\n\tintTag       = \"!!int\"\n\tfloatTag     = \"!!float\"\n\ttimestampTag = \"!!timestamp\"\n\tseqTag       = \"!!seq\"\n\tmapTag       = \"!!map\"\n\tbinaryTag    = \"!!binary\"\n\tmergeTag     = \"!!merge\"\n)\n\nvar longTags = make(map[string]string)\nvar shortTags = make(map[string]string)\n\nfunc init() {\n\tfor _, stag := range []string{nullTag, boolTag, strTag, intTag, floatTag, timestampTag, seqTag, mapTag, binaryTag, mergeTag} {\n\t\tltag := longTag(stag)\n\t\tlongTags[stag] = ltag\n\t\tshortTags[ltag] = stag\n\t}\n}\n\nconst longTagPrefix = \"tag:yaml.org,2002:\"\n\nfunc shortTag(tag string) string {\n\tif strings.HasPrefix(tag, longTagPrefix) {\n\t\tif stag, ok := shortTags[tag]; ok {\n\t\t\treturn stag\n\t\t}\n\t\treturn \"!!\" + tag[len(longTagPrefix):]\n\t}\n\treturn tag\n}\n\nfunc longTag(tag string) string {\n\tif strings.HasPrefix(tag, \"!!\") {\n\t\tif ltag, ok := longTags[tag]; ok {\n\t\t\treturn ltag\n\t\t}\n\t\treturn longTagPrefix + tag[2:]\n\t}\n\treturn tag\n}\n\nfunc resolvableTag(tag string) bool {\n\tswitch tag {\n\tcase \"\", strTag, boolTag, intTag, floatTag, nullTag, timestampTag:\n\t\treturn true\n\t}\n\treturn false\n}\n\nvar yamlStyleFloat = regexp.MustCompile(`^[-+]?(\\.[0-9]+|[0-9]+(\\.[0-9]*)?)([eE][-+]?[0-9]+)?$`)\n\nfunc resolve(tag string, in string) (rtag string, out interface{}) {\n\ttag = shortTag(tag)\n\tif !resolvableTag(tag) {\n\t\treturn tag, in\n\t}\n\n\tdefer func() {\n\t\tswitch tag {\n\t\tcase \"\", rtag, strTag, binaryTag:\n\t\t\treturn\n\t\tcase floatTag:\n\t\t\tif rtag == intTag {\n\t\t\t\tswitch v := out.(type) {\n\t\t\t\tcase int64:\n\t\t\t\t\trtag = floatTag\n\t\t\t\t\tout = float64(v)\n\t\t\t\t\treturn\n\t\t\t\tcase int:\n\t\t\t\t\trtag = floatTag\n\t\t\t\t\tout = float64(v)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfailf(\"cannot decode %s `%s` as a %s\", shortTag(rtag), in, shortTag(tag))\n\t}()\n\n\t// Any data is accepted as a !!str or !!binary.\n\t// Otherwise, the prefix is enough of a hint about what it might be.\n\thint := byte('N')\n\tif in != \"\" {\n\t\thint = resolveTable[in[0]]\n\t}\n\tif hint != 0 && tag != strTag && tag != binaryTag {\n\t\t// Handle things we can lookup in a map.\n\t\tif item, ok := resolveMap[in]; ok {\n\t\t\treturn item.tag, item.value\n\t\t}\n\n\t\t// Base 60 floats are a bad idea, were dropped in YAML 1.2, and\n\t\t// are purposefully unsupported here. They're still quoted on\n\t\t// the way out for compatibility with other parser, though.\n\n\t\tswitch hint {\n\t\tcase 'M':\n\t\t\t// We've already checked the map above.\n\n\t\tcase '.':\n\t\t\t// Not in the map, so maybe a normal float.\n\t\t\tfloatv, err := strconv.ParseFloat(in, 64)\n\t\t\tif err == nil {\n\t\t\t\treturn floatTag, floatv\n\t\t\t}\n\n\t\tcase 'D', 'S':\n\t\t\t// Int, float, or timestamp.\n\t\t\t// Only try values as a timestamp if the value is unquoted or there's an explicit\n\t\t\t// !!timestamp tag.\n\t\t\tif tag == \"\" || tag == timestampTag {\n\t\t\t\tt, ok := parseTimestamp(in)\n\t\t\t\tif ok {\n\t\t\t\t\treturn timestampTag, t\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tplain := strings.Replace(in, \"_\", \"\", -1)\n\t\t\tintv, err := strconv.ParseInt(plain, 0, 64)\n\t\t\tif err == nil {\n\t\t\t\tif intv == int64(int(intv)) {\n\t\t\t\t\treturn intTag, int(intv)\n\t\t\t\t} else {\n\t\t\t\t\treturn intTag, intv\n\t\t\t\t}\n\t\t\t}\n\t\t\tuintv, err := strconv.ParseUint(plain, 0, 64)\n\t\t\tif err == nil {\n\t\t\t\treturn intTag, uintv\n\t\t\t}\n\t\t\tif yamlStyleFloat.MatchString(plain) {\n\t\t\t\tfloatv, err := strconv.ParseFloat(plain, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\treturn floatTag, floatv\n\t\t\t\t}\n\t\t\t}\n\t\t\tif strings.HasPrefix(plain, \"0b\") {\n\t\t\t\tintv, err := strconv.ParseInt(plain[2:], 2, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\tif intv == int64(int(intv)) {\n\t\t\t\t\t\treturn intTag, int(intv)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn intTag, intv\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tuintv, err := strconv.ParseUint(plain[2:], 2, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\treturn intTag, uintv\n\t\t\t\t}\n\t\t\t} else if strings.HasPrefix(plain, \"-0b\") {\n\t\t\t\tintv, err := strconv.ParseInt(\"-\"+plain[3:], 2, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\tif true || intv == int64(int(intv)) {\n\t\t\t\t\t\treturn intTag, int(intv)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn intTag, intv\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Octals as introduced in version 1.2 of the spec.\n\t\t\t// Octals from the 1.1 spec, spelled as 0777, are still\n\t\t\t// decoded by default in v3 as well for compatibility.\n\t\t\t// May be dropped in v4 depending on how usage evolves.\n\t\t\tif strings.HasPrefix(plain, \"0o\") {\n\t\t\t\tintv, err := strconv.ParseInt(plain[2:], 8, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\tif intv == int64(int(intv)) {\n\t\t\t\t\t\treturn intTag, int(intv)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn intTag, intv\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tuintv, err := strconv.ParseUint(plain[2:], 8, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\treturn intTag, uintv\n\t\t\t\t}\n\t\t\t} else if strings.HasPrefix(plain, \"-0o\") {\n\t\t\t\tintv, err := strconv.ParseInt(\"-\"+plain[3:], 8, 64)\n\t\t\t\tif err == nil {\n\t\t\t\t\tif true || intv == int64(int(intv)) {\n\t\t\t\t\t\treturn intTag, int(intv)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn intTag, intv\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\tdefault:\n\t\t\tpanic(\"internal error: missing handler for resolver table: \" + string(rune(hint)) + \" (with \" + in + \")\")\n\t\t}\n\t}\n\treturn strTag, in\n}\n\n// encodeBase64 encodes s as base64 that is broken up into multiple lines\n// as appropriate for the resulting length.\nfunc encodeBase64(s string) string {\n\tconst lineLen = 70\n\tencLen := base64.StdEncoding.EncodedLen(len(s))\n\tlines := encLen/lineLen + 1\n\tbuf := make([]byte, encLen*2+lines)\n\tin := buf[0:encLen]\n\tout := buf[encLen:]\n\tbase64.StdEncoding.Encode(in, []byte(s))\n\tk := 0\n\tfor i := 0; i < len(in); i += lineLen {\n\t\tj := i + lineLen\n\t\tif j > len(in) {\n\t\t\tj = len(in)\n\t\t}\n\t\tk += copy(out[k:], in[i:j])\n\t\tif lines > 1 {\n\t\t\tout[k] = '\\n'\n\t\t\tk++\n\t\t}\n\t}\n\treturn string(out[:k])\n}\n\n// This is a subset of the formats allowed by the regular expression\n// defined at http://yaml.org/type/timestamp.html.\nvar allowedTimestampFormats = []string{\n\t\"2006-1-2T15:4:5.999999999Z07:00\", // RCF3339Nano with short date fields.\n\t\"2006-1-2t15:4:5.999999999Z07:00\", // RFC3339Nano with short date fields and lower-case \"t\".\n\t\"2006-1-2 15:4:5.999999999\",       // space separated with no time zone\n\t\"2006-1-2\",                        // date only\n\t// Notable exception: time.Parse cannot handle: \"2001-12-14 21:59:43.10 -5\"\n\t// from the set of examples.\n}\n\n// parseTimestamp parses s as a timestamp string and\n// returns the timestamp and reports whether it succeeded.\n// Timestamp formats are defined at http://yaml.org/type/timestamp.html\nfunc parseTimestamp(s string) (time.Time, bool) {\n\t// TODO write code to check all the formats supported by\n\t// http://yaml.org/type/timestamp.html instead of using time.Parse.\n\n\t// Quick check: all date formats start with YYYY-.\n\ti := 0\n\tfor ; i < len(s); i++ {\n\t\tif c := s[i]; c < '0' || c > '9' {\n\t\t\tbreak\n\t\t}\n\t}\n\tif i != 4 || i == len(s) || s[i] != '-' {\n\t\treturn time.Time{}, false\n\t}\n\tfor _, format := range allowedTimestampFormats {\n\t\tif t, err := time.Parse(format, s); err == nil {\n\t\t\treturn t, true\n\t\t}\n\t}\n\treturn time.Time{}, false\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/scannerc.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n// Copyright (c) 2006-2010 Kirill Simonov\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\npackage yaml\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// Introduction\n// ************\n//\n// The following notes assume that you are familiar with the YAML specification\n// (http://yaml.org/spec/1.2/spec.html).  We mostly follow it, although in\n// some cases we are less restrictive that it requires.\n//\n// The process of transforming a YAML stream into a sequence of events is\n// divided on two steps: Scanning and Parsing.\n//\n// The Scanner transforms the input stream into a sequence of tokens, while the\n// parser transform the sequence of tokens produced by the Scanner into a\n// sequence of parsing events.\n//\n// The Scanner is rather clever and complicated. The Parser, on the contrary,\n// is a straightforward implementation of a recursive-descendant parser (or,\n// LL(1) parser, as it is usually called).\n//\n// Actually there are two issues of Scanning that might be called \"clever\", the\n// rest is quite straightforward.  The issues are \"block collection start\" and\n// \"simple keys\".  Both issues are explained below in details.\n//\n// Here the Scanning step is explained and implemented.  We start with the list\n// of all the tokens produced by the Scanner together with short descriptions.\n//\n// Now, tokens:\n//\n//      STREAM-START(encoding)          # The stream start.\n//      STREAM-END                      # The stream end.\n//      VERSION-DIRECTIVE(major,minor)  # The '%YAML' directive.\n//      TAG-DIRECTIVE(handle,prefix)    # The '%TAG' directive.\n//      DOCUMENT-START                  # '---'\n//      DOCUMENT-END                    # '...'\n//      BLOCK-SEQUENCE-START            # Indentation increase denoting a block\n//      BLOCK-MAPPING-START             # sequence or a block mapping.\n//      BLOCK-END                       # Indentation decrease.\n//      FLOW-SEQUENCE-START             # '['\n//      FLOW-SEQUENCE-END               # ']'\n//      BLOCK-SEQUENCE-START            # '{'\n//      BLOCK-SEQUENCE-END              # '}'\n//      BLOCK-ENTRY                     # '-'\n//      FLOW-ENTRY                      # ','\n//      KEY                             # '?' or nothing (simple keys).\n//      VALUE                           # ':'\n//      ALIAS(anchor)                   # '*anchor'\n//      ANCHOR(anchor)                  # '&anchor'\n//      TAG(handle,suffix)              # '!handle!suffix'\n//      SCALAR(value,style)             # A scalar.\n//\n// The following two tokens are \"virtual\" tokens denoting the beginning and the\n// end of the stream:\n//\n//      STREAM-START(encoding)\n//      STREAM-END\n//\n// We pass the information about the input stream encoding with the\n// STREAM-START token.\n//\n// The next two tokens are responsible for tags:\n//\n//      VERSION-DIRECTIVE(major,minor)\n//      TAG-DIRECTIVE(handle,prefix)\n//\n// Example:\n//\n//      %YAML   1.1\n//      %TAG    !   !foo\n//      %TAG    !yaml!  tag:yaml.org,2002:\n//      ---\n//\n// The correspoding sequence of tokens:\n//\n//      STREAM-START(utf-8)\n//      VERSION-DIRECTIVE(1,1)\n//      TAG-DIRECTIVE(\"!\",\"!foo\")\n//      TAG-DIRECTIVE(\"!yaml\",\"tag:yaml.org,2002:\")\n//      DOCUMENT-START\n//      STREAM-END\n//\n// Note that the VERSION-DIRECTIVE and TAG-DIRECTIVE tokens occupy a whole\n// line.\n//\n// The document start and end indicators are represented by:\n//\n//      DOCUMENT-START\n//      DOCUMENT-END\n//\n// Note that if a YAML stream contains an implicit document (without '---'\n// and '...' indicators), no DOCUMENT-START and DOCUMENT-END tokens will be\n// produced.\n//\n// In the following examples, we present whole documents together with the\n// produced tokens.\n//\n//      1. An implicit document:\n//\n//          'a scalar'\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          SCALAR(\"a scalar\",single-quoted)\n//          STREAM-END\n//\n//      2. An explicit document:\n//\n//          ---\n//          'a scalar'\n//          ...\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          DOCUMENT-START\n//          SCALAR(\"a scalar\",single-quoted)\n//          DOCUMENT-END\n//          STREAM-END\n//\n//      3. Several documents in a stream:\n//\n//          'a scalar'\n//          ---\n//          'another scalar'\n//          ---\n//          'yet another scalar'\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          SCALAR(\"a scalar\",single-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"another scalar\",single-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"yet another scalar\",single-quoted)\n//          STREAM-END\n//\n// We have already introduced the SCALAR token above.  The following tokens are\n// used to describe aliases, anchors, tag, and scalars:\n//\n//      ALIAS(anchor)\n//      ANCHOR(anchor)\n//      TAG(handle,suffix)\n//      SCALAR(value,style)\n//\n// The following series of examples illustrate the usage of these tokens:\n//\n//      1. A recursive sequence:\n//\n//          &A [ *A ]\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          ANCHOR(\"A\")\n//          FLOW-SEQUENCE-START\n//          ALIAS(\"A\")\n//          FLOW-SEQUENCE-END\n//          STREAM-END\n//\n//      2. A tagged scalar:\n//\n//          !!float \"3.14\"  # A good approximation.\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          TAG(\"!!\",\"float\")\n//          SCALAR(\"3.14\",double-quoted)\n//          STREAM-END\n//\n//      3. Various scalar styles:\n//\n//          --- # Implicit empty plain scalars do not produce tokens.\n//          --- a plain scalar\n//          --- 'a single-quoted scalar'\n//          --- \"a double-quoted scalar\"\n//          --- |-\n//            a literal scalar\n//          --- >-\n//            a folded\n//            scalar\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          DOCUMENT-START\n//          DOCUMENT-START\n//          SCALAR(\"a plain scalar\",plain)\n//          DOCUMENT-START\n//          SCALAR(\"a single-quoted scalar\",single-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"a double-quoted scalar\",double-quoted)\n//          DOCUMENT-START\n//          SCALAR(\"a literal scalar\",literal)\n//          DOCUMENT-START\n//          SCALAR(\"a folded scalar\",folded)\n//          STREAM-END\n//\n// Now it's time to review collection-related tokens. We will start with\n// flow collections:\n//\n//      FLOW-SEQUENCE-START\n//      FLOW-SEQUENCE-END\n//      FLOW-MAPPING-START\n//      FLOW-MAPPING-END\n//      FLOW-ENTRY\n//      KEY\n//      VALUE\n//\n// The tokens FLOW-SEQUENCE-START, FLOW-SEQUENCE-END, FLOW-MAPPING-START, and\n// FLOW-MAPPING-END represent the indicators '[', ']', '{', and '}'\n// correspondingly.  FLOW-ENTRY represent the ',' indicator.  Finally the\n// indicators '?' and ':', which are used for denoting mapping keys and values,\n// are represented by the KEY and VALUE tokens.\n//\n// The following examples show flow collections:\n//\n//      1. A flow sequence:\n//\n//          [item 1, item 2, item 3]\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          FLOW-SEQUENCE-START\n//          SCALAR(\"item 1\",plain)\n//          FLOW-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          FLOW-ENTRY\n//          SCALAR(\"item 3\",plain)\n//          FLOW-SEQUENCE-END\n//          STREAM-END\n//\n//      2. A flow mapping:\n//\n//          {\n//              a simple key: a value,  # Note that the KEY token is produced.\n//              ? a complex key: another value,\n//          }\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          FLOW-MAPPING-START\n//          KEY\n//          SCALAR(\"a simple key\",plain)\n//          VALUE\n//          SCALAR(\"a value\",plain)\n//          FLOW-ENTRY\n//          KEY\n//          SCALAR(\"a complex key\",plain)\n//          VALUE\n//          SCALAR(\"another value\",plain)\n//          FLOW-ENTRY\n//          FLOW-MAPPING-END\n//          STREAM-END\n//\n// A simple key is a key which is not denoted by the '?' indicator.  Note that\n// the Scanner still produce the KEY token whenever it encounters a simple key.\n//\n// For scanning block collections, the following tokens are used (note that we\n// repeat KEY and VALUE here):\n//\n//      BLOCK-SEQUENCE-START\n//      BLOCK-MAPPING-START\n//      BLOCK-END\n//      BLOCK-ENTRY\n//      KEY\n//      VALUE\n//\n// The tokens BLOCK-SEQUENCE-START and BLOCK-MAPPING-START denote indentation\n// increase that precedes a block collection (cf. the INDENT token in Python).\n// The token BLOCK-END denote indentation decrease that ends a block collection\n// (cf. the DEDENT token in Python).  However YAML has some syntax pecularities\n// that makes detections of these tokens more complex.\n//\n// The tokens BLOCK-ENTRY, KEY, and VALUE are used to represent the indicators\n// '-', '?', and ':' correspondingly.\n//\n// The following examples show how the tokens BLOCK-SEQUENCE-START,\n// BLOCK-MAPPING-START, and BLOCK-END are emitted by the Scanner:\n//\n//      1. Block sequences:\n//\n//          - item 1\n//          - item 2\n//          -\n//            - item 3.1\n//            - item 3.2\n//          -\n//            key 1: value 1\n//            key 2: value 2\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-ENTRY\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 3.1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 3.2\",plain)\n//          BLOCK-END\n//          BLOCK-ENTRY\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n//      2. Block mappings:\n//\n//          a simple key: a value   # The KEY token is produced here.\n//          ? a complex key\n//          : another value\n//          a mapping:\n//            key 1: value 1\n//            key 2: value 2\n//          a sequence:\n//            - item 1\n//            - item 2\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"a simple key\",plain)\n//          VALUE\n//          SCALAR(\"a value\",plain)\n//          KEY\n//          SCALAR(\"a complex key\",plain)\n//          VALUE\n//          SCALAR(\"another value\",plain)\n//          KEY\n//          SCALAR(\"a mapping\",plain)\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          KEY\n//          SCALAR(\"a sequence\",plain)\n//          VALUE\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n// YAML does not always require to start a new block collection from a new\n// line.  If the current line contains only '-', '?', and ':' indicators, a new\n// block collection may start at the current line.  The following examples\n// illustrate this case:\n//\n//      1. Collections in a sequence:\n//\n//          - - item 1\n//            - item 2\n//          - key 1: value 1\n//            key 2: value 2\n//          - ? complex key\n//            : complex value\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-END\n//          BLOCK-ENTRY\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          BLOCK-ENTRY\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"complex key\")\n//          VALUE\n//          SCALAR(\"complex value\")\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n//      2. Collections in a mapping:\n//\n//          ? a sequence\n//          : - item 1\n//            - item 2\n//          ? a mapping\n//          : key 1: value 1\n//            key 2: value 2\n//\n//      Tokens:\n//\n//          STREAM-START(utf-8)\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"a sequence\",plain)\n//          VALUE\n//          BLOCK-SEQUENCE-START\n//          BLOCK-ENTRY\n//          SCALAR(\"item 1\",plain)\n//          BLOCK-ENTRY\n//          SCALAR(\"item 2\",plain)\n//          BLOCK-END\n//          KEY\n//          SCALAR(\"a mapping\",plain)\n//          VALUE\n//          BLOCK-MAPPING-START\n//          KEY\n//          SCALAR(\"key 1\",plain)\n//          VALUE\n//          SCALAR(\"value 1\",plain)\n//          KEY\n//          SCALAR(\"key 2\",plain)\n//          VALUE\n//          SCALAR(\"value 2\",plain)\n//          BLOCK-END\n//          BLOCK-END\n//          STREAM-END\n//\n// YAML also permits non-indented sequences if they are included into a block\n// mapping.  In this case, the token BLOCK-SEQUENCE-START is not produced:\n//\n//      key:\n//      - item 1    # BLOCK-SEQUENCE-START is NOT produced here.\n//      - item 2\n//\n// Tokens:\n//\n//      STREAM-START(utf-8)\n//      BLOCK-MAPPING-START\n//      KEY\n//      SCALAR(\"key\",plain)\n//      VALUE\n//      BLOCK-ENTRY\n//      SCALAR(\"item 1\",plain)\n//      BLOCK-ENTRY\n//      SCALAR(\"item 2\",plain)\n//      BLOCK-END\n//\n\n// Ensure that the buffer contains the required number of characters.\n// Return true on success, false on failure (reader error or memory error).\nfunc cache(parser *yaml_parser_t, length int) bool {\n\t// [Go] This was inlined: !cache(A, B) -> unread < B && !update(A, B)\n\treturn parser.unread >= length || yaml_parser_update_buffer(parser, length)\n}\n\n// Advance the buffer pointer.\nfunc skip(parser *yaml_parser_t) {\n\tif !is_blank(parser.buffer, parser.buffer_pos) {\n\t\tparser.newlines = 0\n\t}\n\tparser.mark.index++\n\tparser.mark.column++\n\tparser.unread--\n\tparser.buffer_pos += width(parser.buffer[parser.buffer_pos])\n}\n\nfunc skip_line(parser *yaml_parser_t) {\n\tif is_crlf(parser.buffer, parser.buffer_pos) {\n\t\tparser.mark.index += 2\n\t\tparser.mark.column = 0\n\t\tparser.mark.line++\n\t\tparser.unread -= 2\n\t\tparser.buffer_pos += 2\n\t\tparser.newlines++\n\t} else if is_break(parser.buffer, parser.buffer_pos) {\n\t\tparser.mark.index++\n\t\tparser.mark.column = 0\n\t\tparser.mark.line++\n\t\tparser.unread--\n\t\tparser.buffer_pos += width(parser.buffer[parser.buffer_pos])\n\t\tparser.newlines++\n\t}\n}\n\n// Copy a character to a string buffer and advance pointers.\nfunc read(parser *yaml_parser_t, s []byte) []byte {\n\tif !is_blank(parser.buffer, parser.buffer_pos) {\n\t\tparser.newlines = 0\n\t}\n\tw := width(parser.buffer[parser.buffer_pos])\n\tif w == 0 {\n\t\tpanic(\"invalid character sequence\")\n\t}\n\tif len(s) == 0 {\n\t\ts = make([]byte, 0, 32)\n\t}\n\tif w == 1 && len(s)+w <= cap(s) {\n\t\ts = s[:len(s)+1]\n\t\ts[len(s)-1] = parser.buffer[parser.buffer_pos]\n\t\tparser.buffer_pos++\n\t} else {\n\t\ts = append(s, parser.buffer[parser.buffer_pos:parser.buffer_pos+w]...)\n\t\tparser.buffer_pos += w\n\t}\n\tparser.mark.index++\n\tparser.mark.column++\n\tparser.unread--\n\treturn s\n}\n\n// Copy a line break character to a string buffer and advance pointers.\nfunc read_line(parser *yaml_parser_t, s []byte) []byte {\n\tbuf := parser.buffer\n\tpos := parser.buffer_pos\n\tswitch {\n\tcase buf[pos] == '\\r' && buf[pos+1] == '\\n':\n\t\t// CR LF . LF\n\t\ts = append(s, '\\n')\n\t\tparser.buffer_pos += 2\n\t\tparser.mark.index++\n\t\tparser.unread--\n\tcase buf[pos] == '\\r' || buf[pos] == '\\n':\n\t\t// CR|LF . LF\n\t\ts = append(s, '\\n')\n\t\tparser.buffer_pos += 1\n\tcase buf[pos] == '\\xC2' && buf[pos+1] == '\\x85':\n\t\t// NEL . LF\n\t\ts = append(s, '\\n')\n\t\tparser.buffer_pos += 2\n\tcase buf[pos] == '\\xE2' && buf[pos+1] == '\\x80' && (buf[pos+2] == '\\xA8' || buf[pos+2] == '\\xA9'):\n\t\t// LS|PS . LS|PS\n\t\ts = append(s, buf[parser.buffer_pos:pos+3]...)\n\t\tparser.buffer_pos += 3\n\tdefault:\n\t\treturn s\n\t}\n\tparser.mark.index++\n\tparser.mark.column = 0\n\tparser.mark.line++\n\tparser.unread--\n\tparser.newlines++\n\treturn s\n}\n\n// Get the next token.\nfunc yaml_parser_scan(parser *yaml_parser_t, token *yaml_token_t) bool {\n\t// Erase the token object.\n\t*token = yaml_token_t{} // [Go] Is this necessary?\n\n\t// No tokens after STREAM-END or error.\n\tif parser.stream_end_produced || parser.error != yaml_NO_ERROR {\n\t\treturn true\n\t}\n\n\t// Ensure that the tokens queue contains enough tokens.\n\tif !parser.token_available {\n\t\tif !yaml_parser_fetch_more_tokens(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Fetch the next token from the queue.\n\t*token = parser.tokens[parser.tokens_head]\n\tparser.tokens_head++\n\tparser.tokens_parsed++\n\tparser.token_available = false\n\n\tif token.typ == yaml_STREAM_END_TOKEN {\n\t\tparser.stream_end_produced = true\n\t}\n\treturn true\n}\n\n// Set the scanner error and return false.\nfunc yaml_parser_set_scanner_error(parser *yaml_parser_t, context string, context_mark yaml_mark_t, problem string) bool {\n\tparser.error = yaml_SCANNER_ERROR\n\tparser.context = context\n\tparser.context_mark = context_mark\n\tparser.problem = problem\n\tparser.problem_mark = parser.mark\n\treturn false\n}\n\nfunc yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, context_mark yaml_mark_t, problem string) bool {\n\tcontext := \"while parsing a tag\"\n\tif directive {\n\t\tcontext = \"while parsing a %TAG directive\"\n\t}\n\treturn yaml_parser_set_scanner_error(parser, context, context_mark, problem)\n}\n\nfunc trace(args ...interface{}) func() {\n\tpargs := append([]interface{}{\"+++\"}, args...)\n\tfmt.Println(pargs...)\n\tpargs = append([]interface{}{\"---\"}, args...)\n\treturn func() { fmt.Println(pargs...) }\n}\n\n// Ensure that the tokens queue contains at least one token which can be\n// returned to the Parser.\nfunc yaml_parser_fetch_more_tokens(parser *yaml_parser_t) bool {\n\t// While we need more tokens to fetch, do it.\n\tfor {\n\t\t// [Go] The comment parsing logic requires a lookahead of two tokens\n\t\t// so that foot comments may be parsed in time of associating them\n\t\t// with the tokens that are parsed before them, and also for line\n\t\t// comments to be transformed into head comments in some edge cases.\n\t\tif parser.tokens_head < len(parser.tokens)-2 {\n\t\t\t// If a potential simple key is at the head position, we need to fetch\n\t\t\t// the next token to disambiguate it.\n\t\t\thead_tok_idx, ok := parser.simple_keys_by_tok[parser.tokens_parsed]\n\t\t\tif !ok {\n\t\t\t\tbreak\n\t\t\t} else if valid, ok := yaml_simple_key_is_valid(parser, &parser.simple_keys[head_tok_idx]); !ok {\n\t\t\t\treturn false\n\t\t\t} else if !valid {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Fetch the next token.\n\t\tif !yaml_parser_fetch_next_token(parser) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tparser.token_available = true\n\treturn true\n}\n\n// The dispatcher for token fetchers.\nfunc yaml_parser_fetch_next_token(parser *yaml_parser_t) (ok bool) {\n\t// Ensure that the buffer is initialized.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\t// Check if we just started scanning.  Fetch STREAM-START then.\n\tif !parser.stream_start_produced {\n\t\treturn yaml_parser_fetch_stream_start(parser)\n\t}\n\n\tscan_mark := parser.mark\n\n\t// Eat whitespaces and comments until we reach the next token.\n\tif !yaml_parser_scan_to_next_token(parser) {\n\t\treturn false\n\t}\n\n\t// [Go] While unrolling indents, transform the head comments of prior\n\t// indentation levels observed after scan_start into foot comments at\n\t// the respective indexes.\n\n\t// Check the indentation level against the current column.\n\tif !yaml_parser_unroll_indent(parser, parser.mark.column, scan_mark) {\n\t\treturn false\n\t}\n\n\t// Ensure that the buffer contains at least 4 characters.  4 is the length\n\t// of the longest indicators ('--- ' and '... ').\n\tif parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {\n\t\treturn false\n\t}\n\n\t// Is it the end of the stream?\n\tif is_z(parser.buffer, parser.buffer_pos) {\n\t\treturn yaml_parser_fetch_stream_end(parser)\n\t}\n\n\t// Is it a directive?\n\tif parser.mark.column == 0 && parser.buffer[parser.buffer_pos] == '%' {\n\t\treturn yaml_parser_fetch_directive(parser)\n\t}\n\n\tbuf := parser.buffer\n\tpos := parser.buffer_pos\n\n\t// Is it the document start indicator?\n\tif parser.mark.column == 0 && buf[pos] == '-' && buf[pos+1] == '-' && buf[pos+2] == '-' && is_blankz(buf, pos+3) {\n\t\treturn yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_START_TOKEN)\n\t}\n\n\t// Is it the document end indicator?\n\tif parser.mark.column == 0 && buf[pos] == '.' && buf[pos+1] == '.' && buf[pos+2] == '.' && is_blankz(buf, pos+3) {\n\t\treturn yaml_parser_fetch_document_indicator(parser, yaml_DOCUMENT_END_TOKEN)\n\t}\n\n\tcomment_mark := parser.mark\n\tif len(parser.tokens) > 0 && (parser.flow_level == 0 && buf[pos] == ':' || parser.flow_level > 0 && buf[pos] == ',') {\n\t\t// Associate any following comments with the prior token.\n\t\tcomment_mark = parser.tokens[len(parser.tokens)-1].start_mark\n\t}\n\tdefer func() {\n\t\tif !ok {\n\t\t\treturn\n\t\t}\n\t\tif len(parser.tokens) > 0 && parser.tokens[len(parser.tokens)-1].typ == yaml_BLOCK_ENTRY_TOKEN {\n\t\t\t// Sequence indicators alone have no line comments. It becomes\n\t\t\t// a head comment for whatever follows.\n\t\t\treturn\n\t\t}\n\t\tif !yaml_parser_scan_line_comment(parser, comment_mark) {\n\t\t\tok = false\n\t\t\treturn\n\t\t}\n\t}()\n\n\t// Is it the flow sequence start indicator?\n\tif buf[pos] == '[' {\n\t\treturn yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_SEQUENCE_START_TOKEN)\n\t}\n\n\t// Is it the flow mapping start indicator?\n\tif parser.buffer[parser.buffer_pos] == '{' {\n\t\treturn yaml_parser_fetch_flow_collection_start(parser, yaml_FLOW_MAPPING_START_TOKEN)\n\t}\n\n\t// Is it the flow sequence end indicator?\n\tif parser.buffer[parser.buffer_pos] == ']' {\n\t\treturn yaml_parser_fetch_flow_collection_end(parser,\n\t\t\tyaml_FLOW_SEQUENCE_END_TOKEN)\n\t}\n\n\t// Is it the flow mapping end indicator?\n\tif parser.buffer[parser.buffer_pos] == '}' {\n\t\treturn yaml_parser_fetch_flow_collection_end(parser,\n\t\t\tyaml_FLOW_MAPPING_END_TOKEN)\n\t}\n\n\t// Is it the flow entry indicator?\n\tif parser.buffer[parser.buffer_pos] == ',' {\n\t\treturn yaml_parser_fetch_flow_entry(parser)\n\t}\n\n\t// Is it the block entry indicator?\n\tif parser.buffer[parser.buffer_pos] == '-' && is_blankz(parser.buffer, parser.buffer_pos+1) {\n\t\treturn yaml_parser_fetch_block_entry(parser)\n\t}\n\n\t// Is it the key indicator?\n\tif parser.buffer[parser.buffer_pos] == '?' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {\n\t\treturn yaml_parser_fetch_key(parser)\n\t}\n\n\t// Is it the value indicator?\n\tif parser.buffer[parser.buffer_pos] == ':' && (parser.flow_level > 0 || is_blankz(parser.buffer, parser.buffer_pos+1)) {\n\t\treturn yaml_parser_fetch_value(parser)\n\t}\n\n\t// Is it an alias?\n\tif parser.buffer[parser.buffer_pos] == '*' {\n\t\treturn yaml_parser_fetch_anchor(parser, yaml_ALIAS_TOKEN)\n\t}\n\n\t// Is it an anchor?\n\tif parser.buffer[parser.buffer_pos] == '&' {\n\t\treturn yaml_parser_fetch_anchor(parser, yaml_ANCHOR_TOKEN)\n\t}\n\n\t// Is it a tag?\n\tif parser.buffer[parser.buffer_pos] == '!' {\n\t\treturn yaml_parser_fetch_tag(parser)\n\t}\n\n\t// Is it a literal scalar?\n\tif parser.buffer[parser.buffer_pos] == '|' && parser.flow_level == 0 {\n\t\treturn yaml_parser_fetch_block_scalar(parser, true)\n\t}\n\n\t// Is it a folded scalar?\n\tif parser.buffer[parser.buffer_pos] == '>' && parser.flow_level == 0 {\n\t\treturn yaml_parser_fetch_block_scalar(parser, false)\n\t}\n\n\t// Is it a single-quoted scalar?\n\tif parser.buffer[parser.buffer_pos] == '\\'' {\n\t\treturn yaml_parser_fetch_flow_scalar(parser, true)\n\t}\n\n\t// Is it a double-quoted scalar?\n\tif parser.buffer[parser.buffer_pos] == '\"' {\n\t\treturn yaml_parser_fetch_flow_scalar(parser, false)\n\t}\n\n\t// Is it a plain scalar?\n\t//\n\t// A plain scalar may start with any non-blank characters except\n\t//\n\t//      '-', '?', ':', ',', '[', ']', '{', '}',\n\t//      '#', '&', '*', '!', '|', '>', '\\'', '\\\"',\n\t//      '%', '@', '`'.\n\t//\n\t// In the block context (and, for the '-' indicator, in the flow context\n\t// too), it may also start with the characters\n\t//\n\t//      '-', '?', ':'\n\t//\n\t// if it is followed by a non-space character.\n\t//\n\t// The last rule is more restrictive than the specification requires.\n\t// [Go] TODO Make this logic more reasonable.\n\t//switch parser.buffer[parser.buffer_pos] {\n\t//case '-', '?', ':', ',', '?', '-', ',', ':', ']', '[', '}', '{', '&', '#', '!', '*', '>', '|', '\"', '\\'', '@', '%', '-', '`':\n\t//}\n\tif !(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '-' ||\n\t\tparser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':' ||\n\t\tparser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '[' ||\n\t\tparser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||\n\t\tparser.buffer[parser.buffer_pos] == '}' || parser.buffer[parser.buffer_pos] == '#' ||\n\t\tparser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '*' ||\n\t\tparser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '|' ||\n\t\tparser.buffer[parser.buffer_pos] == '>' || parser.buffer[parser.buffer_pos] == '\\'' ||\n\t\tparser.buffer[parser.buffer_pos] == '\"' || parser.buffer[parser.buffer_pos] == '%' ||\n\t\tparser.buffer[parser.buffer_pos] == '@' || parser.buffer[parser.buffer_pos] == '`') ||\n\t\t(parser.buffer[parser.buffer_pos] == '-' && !is_blank(parser.buffer, parser.buffer_pos+1)) ||\n\t\t(parser.flow_level == 0 &&\n\t\t\t(parser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == ':') &&\n\t\t\t!is_blankz(parser.buffer, parser.buffer_pos+1)) {\n\t\treturn yaml_parser_fetch_plain_scalar(parser)\n\t}\n\n\t// If we don't determine the token type so far, it is an error.\n\treturn yaml_parser_set_scanner_error(parser,\n\t\t\"while scanning for the next token\", parser.mark,\n\t\t\"found character that cannot start any token\")\n}\n\nfunc yaml_simple_key_is_valid(parser *yaml_parser_t, simple_key *yaml_simple_key_t) (valid, ok bool) {\n\tif !simple_key.possible {\n\t\treturn false, true\n\t}\n\n\t// The 1.2 specification says:\n\t//\n\t//     \"If the ? indicator is omitted, parsing needs to see past the\n\t//     implicit key to recognize it as such. To limit the amount of\n\t//     lookahead required, the “:” indicator must appear at most 1024\n\t//     Unicode characters beyond the start of the key. In addition, the key\n\t//     is restricted to a single line.\"\n\t//\n\tif simple_key.mark.line < parser.mark.line || simple_key.mark.index+1024 < parser.mark.index {\n\t\t// Check if the potential simple key to be removed is required.\n\t\tif simple_key.required {\n\t\t\treturn false, yaml_parser_set_scanner_error(parser,\n\t\t\t\t\"while scanning a simple key\", simple_key.mark,\n\t\t\t\t\"could not find expected ':'\")\n\t\t}\n\t\tsimple_key.possible = false\n\t\treturn false, true\n\t}\n\treturn true, true\n}\n\n// Check if a simple key may start at the current position and add it if\n// needed.\nfunc yaml_parser_save_simple_key(parser *yaml_parser_t) bool {\n\t// A simple key is required at the current position if the scanner is in\n\t// the block context and the current column coincides with the indentation\n\t// level.\n\n\trequired := parser.flow_level == 0 && parser.indent == parser.mark.column\n\n\t//\n\t// If the current position may start a simple key, save it.\n\t//\n\tif parser.simple_key_allowed {\n\t\tsimple_key := yaml_simple_key_t{\n\t\t\tpossible:     true,\n\t\t\trequired:     required,\n\t\t\ttoken_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),\n\t\t\tmark:         parser.mark,\n\t\t}\n\n\t\tif !yaml_parser_remove_simple_key(parser) {\n\t\t\treturn false\n\t\t}\n\t\tparser.simple_keys[len(parser.simple_keys)-1] = simple_key\n\t\tparser.simple_keys_by_tok[simple_key.token_number] = len(parser.simple_keys) - 1\n\t}\n\treturn true\n}\n\n// Remove a potential simple key at the current flow level.\nfunc yaml_parser_remove_simple_key(parser *yaml_parser_t) bool {\n\ti := len(parser.simple_keys) - 1\n\tif parser.simple_keys[i].possible {\n\t\t// If the key is required, it is an error.\n\t\tif parser.simple_keys[i].required {\n\t\t\treturn yaml_parser_set_scanner_error(parser,\n\t\t\t\t\"while scanning a simple key\", parser.simple_keys[i].mark,\n\t\t\t\t\"could not find expected ':'\")\n\t\t}\n\t\t// Remove the key from the stack.\n\t\tparser.simple_keys[i].possible = false\n\t\tdelete(parser.simple_keys_by_tok, parser.simple_keys[i].token_number)\n\t}\n\treturn true\n}\n\n// max_flow_level limits the flow_level\nconst max_flow_level = 10000\n\n// Increase the flow level and resize the simple key list if needed.\nfunc yaml_parser_increase_flow_level(parser *yaml_parser_t) bool {\n\t// Reset the simple key on the next level.\n\tparser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{\n\t\tpossible:     false,\n\t\trequired:     false,\n\t\ttoken_number: parser.tokens_parsed + (len(parser.tokens) - parser.tokens_head),\n\t\tmark:         parser.mark,\n\t})\n\n\t// Increase the flow level.\n\tparser.flow_level++\n\tif parser.flow_level > max_flow_level {\n\t\treturn yaml_parser_set_scanner_error(parser,\n\t\t\t\"while increasing flow level\", parser.simple_keys[len(parser.simple_keys)-1].mark,\n\t\t\tfmt.Sprintf(\"exceeded max depth of %d\", max_flow_level))\n\t}\n\treturn true\n}\n\n// Decrease the flow level.\nfunc yaml_parser_decrease_flow_level(parser *yaml_parser_t) bool {\n\tif parser.flow_level > 0 {\n\t\tparser.flow_level--\n\t\tlast := len(parser.simple_keys) - 1\n\t\tdelete(parser.simple_keys_by_tok, parser.simple_keys[last].token_number)\n\t\tparser.simple_keys = parser.simple_keys[:last]\n\t}\n\treturn true\n}\n\n// max_indents limits the indents stack size\nconst max_indents = 10000\n\n// Push the current indentation level to the stack and set the new level\n// the current column is greater than the indentation level.  In this case,\n// append or insert the specified token into the token queue.\nfunc yaml_parser_roll_indent(parser *yaml_parser_t, column, number int, typ yaml_token_type_t, mark yaml_mark_t) bool {\n\t// In the flow context, do nothing.\n\tif parser.flow_level > 0 {\n\t\treturn true\n\t}\n\n\tif parser.indent < column {\n\t\t// Push the current indentation level to the stack and set the new\n\t\t// indentation level.\n\t\tparser.indents = append(parser.indents, parser.indent)\n\t\tparser.indent = column\n\t\tif len(parser.indents) > max_indents {\n\t\t\treturn yaml_parser_set_scanner_error(parser,\n\t\t\t\t\"while increasing indent level\", parser.simple_keys[len(parser.simple_keys)-1].mark,\n\t\t\t\tfmt.Sprintf(\"exceeded max depth of %d\", max_indents))\n\t\t}\n\n\t\t// Create a token and insert it into the queue.\n\t\ttoken := yaml_token_t{\n\t\t\ttyp:        typ,\n\t\t\tstart_mark: mark,\n\t\t\tend_mark:   mark,\n\t\t}\n\t\tif number > -1 {\n\t\t\tnumber -= parser.tokens_parsed\n\t\t}\n\t\tyaml_insert_token(parser, number, &token)\n\t}\n\treturn true\n}\n\n// Pop indentation levels from the indents stack until the current level\n// becomes less or equal to the column.  For each indentation level, append\n// the BLOCK-END token.\nfunc yaml_parser_unroll_indent(parser *yaml_parser_t, column int, scan_mark yaml_mark_t) bool {\n\t// In the flow context, do nothing.\n\tif parser.flow_level > 0 {\n\t\treturn true\n\t}\n\n\tblock_mark := scan_mark\n\tblock_mark.index--\n\n\t// Loop through the indentation levels in the stack.\n\tfor parser.indent > column {\n\n\t\t// [Go] Reposition the end token before potential following\n\t\t//      foot comments of parent blocks. For that, search\n\t\t//      backwards for recent comments that were at the same\n\t\t//      indent as the block that is ending now.\n\t\tstop_index := block_mark.index\n\t\tfor i := len(parser.comments) - 1; i >= 0; i-- {\n\t\t\tcomment := &parser.comments[i]\n\n\t\t\tif comment.end_mark.index < stop_index {\n\t\t\t\t// Don't go back beyond the start of the comment/whitespace scan, unless column < 0.\n\t\t\t\t// If requested indent column is < 0, then the document is over and everything else\n\t\t\t\t// is a foot anyway.\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif comment.start_mark.column == parser.indent+1 {\n\t\t\t\t// This is a good match. But maybe there's a former comment\n\t\t\t\t// at that same indent level, so keep searching.\n\t\t\t\tblock_mark = comment.start_mark\n\t\t\t}\n\n\t\t\t// While the end of the former comment matches with\n\t\t\t// the start of the following one, we know there's\n\t\t\t// nothing in between and scanning is still safe.\n\t\t\tstop_index = comment.scan_mark.index\n\t\t}\n\n\t\t// Create a token and append it to the queue.\n\t\ttoken := yaml_token_t{\n\t\t\ttyp:        yaml_BLOCK_END_TOKEN,\n\t\t\tstart_mark: block_mark,\n\t\t\tend_mark:   block_mark,\n\t\t}\n\t\tyaml_insert_token(parser, -1, &token)\n\n\t\t// Pop the indentation level.\n\t\tparser.indent = parser.indents[len(parser.indents)-1]\n\t\tparser.indents = parser.indents[:len(parser.indents)-1]\n\t}\n\treturn true\n}\n\n// Initialize the scanner and produce the STREAM-START token.\nfunc yaml_parser_fetch_stream_start(parser *yaml_parser_t) bool {\n\n\t// Set the initial indentation.\n\tparser.indent = -1\n\n\t// Initialize the simple key stack.\n\tparser.simple_keys = append(parser.simple_keys, yaml_simple_key_t{})\n\n\tparser.simple_keys_by_tok = make(map[int]int)\n\n\t// A simple key is allowed at the beginning of the stream.\n\tparser.simple_key_allowed = true\n\n\t// We have started.\n\tparser.stream_start_produced = true\n\n\t// Create the STREAM-START token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_STREAM_START_TOKEN,\n\t\tstart_mark: parser.mark,\n\t\tend_mark:   parser.mark,\n\t\tencoding:   parser.encoding,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the STREAM-END token and shut down the scanner.\nfunc yaml_parser_fetch_stream_end(parser *yaml_parser_t) bool {\n\n\t// Force new line.\n\tif parser.mark.column != 0 {\n\t\tparser.mark.column = 0\n\t\tparser.mark.line++\n\t}\n\n\t// Reset the indentation level.\n\tif !yaml_parser_unroll_indent(parser, -1, parser.mark) {\n\t\treturn false\n\t}\n\n\t// Reset simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\tparser.simple_key_allowed = false\n\n\t// Create the STREAM-END token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_STREAM_END_TOKEN,\n\t\tstart_mark: parser.mark,\n\t\tend_mark:   parser.mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce a VERSION-DIRECTIVE or TAG-DIRECTIVE token.\nfunc yaml_parser_fetch_directive(parser *yaml_parser_t) bool {\n\t// Reset the indentation level.\n\tif !yaml_parser_unroll_indent(parser, -1, parser.mark) {\n\t\treturn false\n\t}\n\n\t// Reset simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\tparser.simple_key_allowed = false\n\n\t// Create the YAML-DIRECTIVE or TAG-DIRECTIVE token.\n\ttoken := yaml_token_t{}\n\tif !yaml_parser_scan_directive(parser, &token) {\n\t\treturn false\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the DOCUMENT-START or DOCUMENT-END token.\nfunc yaml_parser_fetch_document_indicator(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// Reset the indentation level.\n\tif !yaml_parser_unroll_indent(parser, -1, parser.mark) {\n\t\treturn false\n\t}\n\n\t// Reset simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\tparser.simple_key_allowed = false\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\n\tskip(parser)\n\tskip(parser)\n\tskip(parser)\n\n\tend_mark := parser.mark\n\n\t// Create the DOCUMENT-START or DOCUMENT-END token.\n\ttoken := yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the FLOW-SEQUENCE-START or FLOW-MAPPING-START token.\nfunc yaml_parser_fetch_flow_collection_start(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\n\t// The indicators '[' and '{' may start a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Increase the flow level.\n\tif !yaml_parser_increase_flow_level(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key may follow the indicators '[' and '{'.\n\tparser.simple_key_allowed = true\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the FLOW-SEQUENCE-START of FLOW-MAPPING-START token.\n\ttoken := yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the FLOW-SEQUENCE-END or FLOW-MAPPING-END token.\nfunc yaml_parser_fetch_flow_collection_end(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// Reset any potential simple key on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Decrease the flow level.\n\tif !yaml_parser_decrease_flow_level(parser) {\n\t\treturn false\n\t}\n\n\t// No simple keys after the indicators ']' and '}'.\n\tparser.simple_key_allowed = false\n\n\t// Consume the token.\n\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the FLOW-SEQUENCE-END of FLOW-MAPPING-END token.\n\ttoken := yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\t// Append the token to the queue.\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the FLOW-ENTRY token.\nfunc yaml_parser_fetch_flow_entry(parser *yaml_parser_t) bool {\n\t// Reset any potential simple keys on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Simple keys are allowed after ','.\n\tparser.simple_key_allowed = true\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the FLOW-ENTRY token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_FLOW_ENTRY_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the BLOCK-ENTRY token.\nfunc yaml_parser_fetch_block_entry(parser *yaml_parser_t) bool {\n\t// Check if the scanner is in the block context.\n\tif parser.flow_level == 0 {\n\t\t// Check if we are allowed to start a new entry.\n\t\tif !parser.simple_key_allowed {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"\", parser.mark,\n\t\t\t\t\"block sequence entries are not allowed in this context\")\n\t\t}\n\t\t// Add the BLOCK-SEQUENCE-START token if needed.\n\t\tif !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_SEQUENCE_START_TOKEN, parser.mark) {\n\t\t\treturn false\n\t\t}\n\t} else {\n\t\t// It is an error for the '-' indicator to occur in the flow context,\n\t\t// but we let the Parser detect and report about it because the Parser\n\t\t// is able to point to the context.\n\t}\n\n\t// Reset any potential simple keys on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Simple keys are allowed after '-'.\n\tparser.simple_key_allowed = true\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the BLOCK-ENTRY token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_BLOCK_ENTRY_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the KEY token.\nfunc yaml_parser_fetch_key(parser *yaml_parser_t) bool {\n\n\t// In the block context, additional checks are required.\n\tif parser.flow_level == 0 {\n\t\t// Check if we are allowed to start a new key (not nessesary simple).\n\t\tif !parser.simple_key_allowed {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"\", parser.mark,\n\t\t\t\t\"mapping keys are not allowed in this context\")\n\t\t}\n\t\t// Add the BLOCK-MAPPING-START token if needed.\n\t\tif !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Reset any potential simple keys on the current flow level.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// Simple keys are allowed after '?' in the block context.\n\tparser.simple_key_allowed = parser.flow_level == 0\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the KEY token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_KEY_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the VALUE token.\nfunc yaml_parser_fetch_value(parser *yaml_parser_t) bool {\n\n\tsimple_key := &parser.simple_keys[len(parser.simple_keys)-1]\n\n\t// Have we found a simple key?\n\tif valid, ok := yaml_simple_key_is_valid(parser, simple_key); !ok {\n\t\treturn false\n\n\t} else if valid {\n\n\t\t// Create the KEY token and insert it into the queue.\n\t\ttoken := yaml_token_t{\n\t\t\ttyp:        yaml_KEY_TOKEN,\n\t\t\tstart_mark: simple_key.mark,\n\t\t\tend_mark:   simple_key.mark,\n\t\t}\n\t\tyaml_insert_token(parser, simple_key.token_number-parser.tokens_parsed, &token)\n\n\t\t// In the block context, we may need to add the BLOCK-MAPPING-START token.\n\t\tif !yaml_parser_roll_indent(parser, simple_key.mark.column,\n\t\t\tsimple_key.token_number,\n\t\t\tyaml_BLOCK_MAPPING_START_TOKEN, simple_key.mark) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Remove the simple key.\n\t\tsimple_key.possible = false\n\t\tdelete(parser.simple_keys_by_tok, simple_key.token_number)\n\n\t\t// A simple key cannot follow another simple key.\n\t\tparser.simple_key_allowed = false\n\n\t} else {\n\t\t// The ':' indicator follows a complex key.\n\n\t\t// In the block context, extra checks are required.\n\t\tif parser.flow_level == 0 {\n\n\t\t\t// Check if we are allowed to start a complex value.\n\t\t\tif !parser.simple_key_allowed {\n\t\t\t\treturn yaml_parser_set_scanner_error(parser, \"\", parser.mark,\n\t\t\t\t\t\"mapping values are not allowed in this context\")\n\t\t\t}\n\n\t\t\t// Add the BLOCK-MAPPING-START token if needed.\n\t\t\tif !yaml_parser_roll_indent(parser, parser.mark.column, -1, yaml_BLOCK_MAPPING_START_TOKEN, parser.mark) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Simple keys after ':' are allowed in the block context.\n\t\tparser.simple_key_allowed = parser.flow_level == 0\n\t}\n\n\t// Consume the token.\n\tstart_mark := parser.mark\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create the VALUE token and append it to the queue.\n\ttoken := yaml_token_t{\n\t\ttyp:        yaml_VALUE_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the ALIAS or ANCHOR token.\nfunc yaml_parser_fetch_anchor(parser *yaml_parser_t, typ yaml_token_type_t) bool {\n\t// An anchor or an alias could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow an anchor or an alias.\n\tparser.simple_key_allowed = false\n\n\t// Create the ALIAS or ANCHOR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_anchor(parser, &token, typ) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the TAG token.\nfunc yaml_parser_fetch_tag(parser *yaml_parser_t) bool {\n\t// A tag could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow a tag.\n\tparser.simple_key_allowed = false\n\n\t// Create the TAG token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_tag(parser, &token) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the SCALAR(...,literal) or SCALAR(...,folded) tokens.\nfunc yaml_parser_fetch_block_scalar(parser *yaml_parser_t, literal bool) bool {\n\t// Remove any potential simple keys.\n\tif !yaml_parser_remove_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key may follow a block scalar.\n\tparser.simple_key_allowed = true\n\n\t// Create the SCALAR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_block_scalar(parser, &token, literal) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the SCALAR(...,single-quoted) or SCALAR(...,double-quoted) tokens.\nfunc yaml_parser_fetch_flow_scalar(parser *yaml_parser_t, single bool) bool {\n\t// A plain scalar could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow a flow scalar.\n\tparser.simple_key_allowed = false\n\n\t// Create the SCALAR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_flow_scalar(parser, &token, single) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Produce the SCALAR(...,plain) token.\nfunc yaml_parser_fetch_plain_scalar(parser *yaml_parser_t) bool {\n\t// A plain scalar could be a simple key.\n\tif !yaml_parser_save_simple_key(parser) {\n\t\treturn false\n\t}\n\n\t// A simple key cannot follow a flow scalar.\n\tparser.simple_key_allowed = false\n\n\t// Create the SCALAR token and append it to the queue.\n\tvar token yaml_token_t\n\tif !yaml_parser_scan_plain_scalar(parser, &token) {\n\t\treturn false\n\t}\n\tyaml_insert_token(parser, -1, &token)\n\treturn true\n}\n\n// Eat whitespaces and comments until the next token is found.\nfunc yaml_parser_scan_to_next_token(parser *yaml_parser_t) bool {\n\n\tscan_mark := parser.mark\n\n\t// Until the next token is not found.\n\tfor {\n\t\t// Allow the BOM mark to start a line.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tif parser.mark.column == 0 && is_bom(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t}\n\n\t\t// Eat whitespaces.\n\t\t// Tabs are allowed:\n\t\t//  - in the flow context\n\t\t//  - in the block context, but not at the beginning of the line or\n\t\t//  after '-', '?', or ':' (complex value).\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tfor parser.buffer[parser.buffer_pos] == ' ' || ((parser.flow_level > 0 || !parser.simple_key_allowed) && parser.buffer[parser.buffer_pos] == '\\t') {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Check if we just had a line comment under a sequence entry that\n\t\t// looks more like a header to the following content. Similar to this:\n\t\t//\n\t\t// - # The comment\n\t\t//   - Some data\n\t\t//\n\t\t// If so, transform the line comment to a head comment and reposition.\n\t\tif len(parser.comments) > 0 && len(parser.tokens) > 1 {\n\t\t\ttokenA := parser.tokens[len(parser.tokens)-2]\n\t\t\ttokenB := parser.tokens[len(parser.tokens)-1]\n\t\t\tcomment := &parser.comments[len(parser.comments)-1]\n\t\t\tif tokenA.typ == yaml_BLOCK_SEQUENCE_START_TOKEN && tokenB.typ == yaml_BLOCK_ENTRY_TOKEN && len(comment.line) > 0 && !is_break(parser.buffer, parser.buffer_pos) {\n\t\t\t\t// If it was in the prior line, reposition so it becomes a\n\t\t\t\t// header of the follow up token. Otherwise, keep it in place\n\t\t\t\t// so it becomes a header of the former.\n\t\t\t\tcomment.head = comment.line\n\t\t\t\tcomment.line = nil\n\t\t\t\tif comment.start_mark.line == parser.mark.line-1 {\n\t\t\t\t\tcomment.token_mark = parser.mark\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Eat a comment until a line break.\n\t\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\t\tif !yaml_parser_scan_comments(parser, scan_mark) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// If it is a line break, eat it.\n\t\tif is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tskip_line(parser)\n\n\t\t\t// In the block context, a new line may start a simple key.\n\t\t\tif parser.flow_level == 0 {\n\t\t\t\tparser.simple_key_allowed = true\n\t\t\t}\n\t\t} else {\n\t\t\tbreak // We have found a token.\n\t\t}\n\t}\n\n\treturn true\n}\n\n// Scan a YAML-DIRECTIVE or TAG-DIRECTIVE token.\n//\n// Scope:\n//\n//\t%YAML    1.1    # a comment \\n\n//\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n//\t%TAG    !yaml!  tag:yaml.org,2002:  \\n\n//\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nfunc yaml_parser_scan_directive(parser *yaml_parser_t, token *yaml_token_t) bool {\n\t// Eat '%'.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Scan the directive name.\n\tvar name []byte\n\tif !yaml_parser_scan_directive_name(parser, start_mark, &name) {\n\t\treturn false\n\t}\n\n\t// Is it a YAML directive?\n\tif bytes.Equal(name, []byte(\"YAML\")) {\n\t\t// Scan the VERSION directive value.\n\t\tvar major, minor int8\n\t\tif !yaml_parser_scan_version_directive_value(parser, start_mark, &major, &minor) {\n\t\t\treturn false\n\t\t}\n\t\tend_mark := parser.mark\n\n\t\t// Create a VERSION-DIRECTIVE token.\n\t\t*token = yaml_token_t{\n\t\t\ttyp:        yaml_VERSION_DIRECTIVE_TOKEN,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tmajor:      major,\n\t\t\tminor:      minor,\n\t\t}\n\n\t\t// Is it a TAG directive?\n\t} else if bytes.Equal(name, []byte(\"TAG\")) {\n\t\t// Scan the TAG directive value.\n\t\tvar handle, prefix []byte\n\t\tif !yaml_parser_scan_tag_directive_value(parser, start_mark, &handle, &prefix) {\n\t\t\treturn false\n\t\t}\n\t\tend_mark := parser.mark\n\n\t\t// Create a TAG-DIRECTIVE token.\n\t\t*token = yaml_token_t{\n\t\t\ttyp:        yaml_TAG_DIRECTIVE_TOKEN,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   end_mark,\n\t\t\tvalue:      handle,\n\t\t\tprefix:     prefix,\n\t\t}\n\n\t\t// Unknown directive.\n\t} else {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"found unknown directive name\")\n\t\treturn false\n\t}\n\n\t// Eat the rest of the line including any comments.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\t// [Go] Discard this inline comment for the time being.\n\t\t//if !yaml_parser_scan_line_comment(parser, start_mark) {\n\t\t//\treturn false\n\t\t//}\n\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check if we are at the end of the line.\n\tif !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"did not find expected comment or line break\")\n\t\treturn false\n\t}\n\n\t// Eat a line break.\n\tif is_break(parser.buffer, parser.buffer_pos) {\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\t\tskip_line(parser)\n\t}\n\n\treturn true\n}\n\n// Scan the directive name.\n//\n// Scope:\n//\n//\t%YAML   1.1     # a comment \\n\n//\t ^^^^\n//\t%TAG    !yaml!  tag:yaml.org,2002:  \\n\n//\t ^^^\nfunc yaml_parser_scan_directive_name(parser *yaml_parser_t, start_mark yaml_mark_t, name *[]byte) bool {\n\t// Consume the directive name.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tvar s []byte\n\tfor is_alpha(parser.buffer, parser.buffer_pos) {\n\t\ts = read(parser, s)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the name is empty.\n\tif len(s) == 0 {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"could not find expected directive name\")\n\t\treturn false\n\t}\n\n\t// Check for an blank character after the name.\n\tif !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a directive\",\n\t\t\tstart_mark, \"found unexpected non-alphabetical character\")\n\t\treturn false\n\t}\n\t*name = s\n\treturn true\n}\n\n// Scan the value of VERSION-DIRECTIVE.\n//\n// Scope:\n//\n//\t%YAML   1.1     # a comment \\n\n//\t     ^^^^^^\nfunc yaml_parser_scan_version_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, major, minor *int8) bool {\n\t// Eat whitespaces.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Consume the major version number.\n\tif !yaml_parser_scan_version_directive_number(parser, start_mark, major) {\n\t\treturn false\n\t}\n\n\t// Eat '.'.\n\tif parser.buffer[parser.buffer_pos] != '.' {\n\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n\t\t\tstart_mark, \"did not find expected digit or '.' character\")\n\t}\n\n\tskip(parser)\n\n\t// Consume the minor version number.\n\tif !yaml_parser_scan_version_directive_number(parser, start_mark, minor) {\n\t\treturn false\n\t}\n\treturn true\n}\n\nconst max_number_length = 2\n\n// Scan the version number of VERSION-DIRECTIVE.\n//\n// Scope:\n//\n//\t%YAML   1.1     # a comment \\n\n//\t        ^\n//\t%YAML   1.1     # a comment \\n\n//\t          ^\nfunc yaml_parser_scan_version_directive_number(parser *yaml_parser_t, start_mark yaml_mark_t, number *int8) bool {\n\n\t// Repeat while the next character is digit.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tvar value, length int8\n\tfor is_digit(parser.buffer, parser.buffer_pos) {\n\t\t// Check if the number is too long.\n\t\tlength++\n\t\tif length > max_number_length {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n\t\t\t\tstart_mark, \"found extremely long version number\")\n\t\t}\n\t\tvalue = value*10 + int8(as_digit(parser.buffer, parser.buffer_pos))\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the number was present.\n\tif length == 0 {\n\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a %YAML directive\",\n\t\t\tstart_mark, \"did not find expected version number\")\n\t}\n\t*number = value\n\treturn true\n}\n\n// Scan the value of a TAG-DIRECTIVE token.\n//\n// Scope:\n//\n//\t%TAG    !yaml!  tag:yaml.org,2002:  \\n\n//\t    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nfunc yaml_parser_scan_tag_directive_value(parser *yaml_parser_t, start_mark yaml_mark_t, handle, prefix *[]byte) bool {\n\tvar handle_value, prefix_value []byte\n\n\t// Eat whitespaces.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Scan a handle.\n\tif !yaml_parser_scan_tag_handle(parser, true, start_mark, &handle_value) {\n\t\treturn false\n\t}\n\n\t// Expect a whitespace.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif !is_blank(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a %TAG directive\",\n\t\t\tstart_mark, \"did not find expected whitespace\")\n\t\treturn false\n\t}\n\n\t// Eat whitespaces.\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Scan a prefix.\n\tif !yaml_parser_scan_tag_uri(parser, true, nil, start_mark, &prefix_value) {\n\t\treturn false\n\t}\n\n\t// Expect a whitespace or line break.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a %TAG directive\",\n\t\t\tstart_mark, \"did not find expected whitespace or line break\")\n\t\treturn false\n\t}\n\n\t*handle = handle_value\n\t*prefix = prefix_value\n\treturn true\n}\n\nfunc yaml_parser_scan_anchor(parser *yaml_parser_t, token *yaml_token_t, typ yaml_token_type_t) bool {\n\tvar s []byte\n\n\t// Eat the indicator character.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Consume the value.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\tfor is_alpha(parser.buffer, parser.buffer_pos) {\n\t\ts = read(parser, s)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\tend_mark := parser.mark\n\n\t/*\n\t * Check if length of the anchor is greater than 0 and it is followed by\n\t * a whitespace character or one of the indicators:\n\t *\n\t *      '?', ':', ',', ']', '}', '%', '@', '`'.\n\t */\n\n\tif len(s) == 0 ||\n\t\t!(is_blankz(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == '?' ||\n\t\t\tparser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == ',' ||\n\t\t\tparser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '}' ||\n\t\t\tparser.buffer[parser.buffer_pos] == '%' || parser.buffer[parser.buffer_pos] == '@' ||\n\t\t\tparser.buffer[parser.buffer_pos] == '`') {\n\t\tcontext := \"while scanning an alias\"\n\t\tif typ == yaml_ANCHOR_TOKEN {\n\t\t\tcontext = \"while scanning an anchor\"\n\t\t}\n\t\tyaml_parser_set_scanner_error(parser, context, start_mark,\n\t\t\t\"did not find expected alphabetic or numeric character\")\n\t\treturn false\n\t}\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        typ,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t}\n\n\treturn true\n}\n\n/*\n * Scan a TAG token.\n */\n\nfunc yaml_parser_scan_tag(parser *yaml_parser_t, token *yaml_token_t) bool {\n\tvar handle, suffix []byte\n\n\tstart_mark := parser.mark\n\n\t// Check if the tag is in the canonical form.\n\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\treturn false\n\t}\n\n\tif parser.buffer[parser.buffer_pos+1] == '<' {\n\t\t// Keep the handle as ''\n\n\t\t// Eat '!<'\n\t\tskip(parser)\n\t\tskip(parser)\n\n\t\t// Consume the tag value.\n\t\tif !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Check for '>' and eat it.\n\t\tif parser.buffer[parser.buffer_pos] != '>' {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a tag\",\n\t\t\t\tstart_mark, \"did not find the expected '>'\")\n\t\t\treturn false\n\t\t}\n\n\t\tskip(parser)\n\t} else {\n\t\t// The tag has either the '!suffix' or the '!handle!suffix' form.\n\n\t\t// First, try to scan a handle.\n\t\tif !yaml_parser_scan_tag_handle(parser, false, start_mark, &handle) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Check if it is, indeed, handle.\n\t\tif handle[0] == '!' && len(handle) > 1 && handle[len(handle)-1] == '!' {\n\t\t\t// Scan the suffix now.\n\t\t\tif !yaml_parser_scan_tag_uri(parser, false, nil, start_mark, &suffix) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\t// It wasn't a handle after all.  Scan the rest of the tag.\n\t\t\tif !yaml_parser_scan_tag_uri(parser, false, handle, start_mark, &suffix) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Set the handle to '!'.\n\t\t\thandle = []byte{'!'}\n\n\t\t\t// A special case: the '!' tag.  Set the handle to '' and the\n\t\t\t// suffix to '!'.\n\t\t\tif len(suffix) == 0 {\n\t\t\t\thandle, suffix = suffix, handle\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check the character which ends the tag.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a tag\",\n\t\t\tstart_mark, \"did not find expected whitespace or line break\")\n\t\treturn false\n\t}\n\n\tend_mark := parser.mark\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_TAG_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      handle,\n\t\tsuffix:     suffix,\n\t}\n\treturn true\n}\n\n// Scan a tag handle.\nfunc yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, handle *[]byte) bool {\n\t// Check the initial '!' character.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tif parser.buffer[parser.buffer_pos] != '!' {\n\t\tyaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\tstart_mark, \"did not find expected '!'\")\n\t\treturn false\n\t}\n\n\tvar s []byte\n\n\t// Copy the '!' character.\n\ts = read(parser, s)\n\n\t// Copy all subsequent alphabetical and numerical characters.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tfor is_alpha(parser.buffer, parser.buffer_pos) {\n\t\ts = read(parser, s)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Check if the trailing character is '!' and copy it.\n\tif parser.buffer[parser.buffer_pos] == '!' {\n\t\ts = read(parser, s)\n\t} else {\n\t\t// It's either the '!' tag or not really a tag handle.  If it's a %TAG\n\t\t// directive, it's an error.  If it's a tag token, it must be a part of URI.\n\t\tif directive && string(s) != \"!\" {\n\t\t\tyaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\tstart_mark, \"did not find expected '!'\")\n\t\t\treturn false\n\t\t}\n\t}\n\n\t*handle = s\n\treturn true\n}\n\n// Scan a tag.\nfunc yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool {\n\t//size_t length = head ? strlen((char *)head) : 0\n\tvar s []byte\n\thasTag := len(head) > 0\n\n\t// Copy the head if needed.\n\t//\n\t// Note that we don't copy the leading '!' character.\n\tif len(head) > 1 {\n\t\ts = append(s, head[1:]...)\n\t}\n\n\t// Scan the tag.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\t// The set of characters that may appear in URI is as follows:\n\t//\n\t//      '0'-'9', 'A'-'Z', 'a'-'z', '_', '-', ';', '/', '?', ':', '@', '&',\n\t//      '=', '+', '$', ',', '.', '!', '~', '*', '\\'', '(', ')', '[', ']',\n\t//      '%'.\n\t// [Go] TODO Convert this into more reasonable logic.\n\tfor is_alpha(parser.buffer, parser.buffer_pos) || parser.buffer[parser.buffer_pos] == ';' ||\n\t\tparser.buffer[parser.buffer_pos] == '/' || parser.buffer[parser.buffer_pos] == '?' ||\n\t\tparser.buffer[parser.buffer_pos] == ':' || parser.buffer[parser.buffer_pos] == '@' ||\n\t\tparser.buffer[parser.buffer_pos] == '&' || parser.buffer[parser.buffer_pos] == '=' ||\n\t\tparser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '$' ||\n\t\tparser.buffer[parser.buffer_pos] == ',' || parser.buffer[parser.buffer_pos] == '.' ||\n\t\tparser.buffer[parser.buffer_pos] == '!' || parser.buffer[parser.buffer_pos] == '~' ||\n\t\tparser.buffer[parser.buffer_pos] == '*' || parser.buffer[parser.buffer_pos] == '\\'' ||\n\t\tparser.buffer[parser.buffer_pos] == '(' || parser.buffer[parser.buffer_pos] == ')' ||\n\t\tparser.buffer[parser.buffer_pos] == '[' || parser.buffer[parser.buffer_pos] == ']' ||\n\t\tparser.buffer[parser.buffer_pos] == '%' {\n\t\t// Check if it is a URI-escape sequence.\n\t\tif parser.buffer[parser.buffer_pos] == '%' {\n\t\t\tif !yaml_parser_scan_uri_escapes(parser, directive, start_mark, &s) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t} else {\n\t\t\ts = read(parser, s)\n\t\t}\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\thasTag = true\n\t}\n\n\tif !hasTag {\n\t\tyaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\tstart_mark, \"did not find expected tag URI\")\n\t\treturn false\n\t}\n\t*uri = s\n\treturn true\n}\n\n// Decode an URI-escape sequence corresponding to a single UTF-8 character.\nfunc yaml_parser_scan_uri_escapes(parser *yaml_parser_t, directive bool, start_mark yaml_mark_t, s *[]byte) bool {\n\n\t// Decode the required number of characters.\n\tw := 1024\n\tfor w > 0 {\n\t\t// Check for a URI-escaped octet.\n\t\tif parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {\n\t\t\treturn false\n\t\t}\n\n\t\tif !(parser.buffer[parser.buffer_pos] == '%' &&\n\t\t\tis_hex(parser.buffer, parser.buffer_pos+1) &&\n\t\t\tis_hex(parser.buffer, parser.buffer_pos+2)) {\n\t\t\treturn yaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\tstart_mark, \"did not find URI escaped octet\")\n\t\t}\n\n\t\t// Get the octet.\n\t\toctet := byte((as_hex(parser.buffer, parser.buffer_pos+1) << 4) + as_hex(parser.buffer, parser.buffer_pos+2))\n\n\t\t// If it is the leading octet, determine the length of the UTF-8 sequence.\n\t\tif w == 1024 {\n\t\t\tw = width(octet)\n\t\t\tif w == 0 {\n\t\t\t\treturn yaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\t\tstart_mark, \"found an incorrect leading UTF-8 octet\")\n\t\t\t}\n\t\t} else {\n\t\t\t// Check if the trailing octet is correct.\n\t\t\tif octet&0xC0 != 0x80 {\n\t\t\t\treturn yaml_parser_set_scanner_tag_error(parser, directive,\n\t\t\t\t\tstart_mark, \"found an incorrect trailing UTF-8 octet\")\n\t\t\t}\n\t\t}\n\n\t\t// Copy the octet and move the pointers.\n\t\t*s = append(*s, octet)\n\t\tskip(parser)\n\t\tskip(parser)\n\t\tskip(parser)\n\t\tw--\n\t}\n\treturn true\n}\n\n// Scan a block scalar.\nfunc yaml_parser_scan_block_scalar(parser *yaml_parser_t, token *yaml_token_t, literal bool) bool {\n\t// Eat the indicator '|' or '>'.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Scan the additional block scalar indicators.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\n\t// Check for a chomping indicator.\n\tvar chomping, increment int\n\tif parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {\n\t\t// Set the chomping method and eat the indicator.\n\t\tif parser.buffer[parser.buffer_pos] == '+' {\n\t\t\tchomping = +1\n\t\t} else {\n\t\t\tchomping = -1\n\t\t}\n\t\tskip(parser)\n\n\t\t// Check for an indentation indicator.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tif is_digit(parser.buffer, parser.buffer_pos) {\n\t\t\t// Check that the indentation is greater than 0.\n\t\t\tif parser.buffer[parser.buffer_pos] == '0' {\n\t\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\t\t\tstart_mark, \"found an indentation indicator equal to 0\")\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t// Get the indentation level and eat the indicator.\n\t\t\tincrement = as_digit(parser.buffer, parser.buffer_pos)\n\t\t\tskip(parser)\n\t\t}\n\n\t} else if is_digit(parser.buffer, parser.buffer_pos) {\n\t\t// Do the same as above, but in the opposite order.\n\n\t\tif parser.buffer[parser.buffer_pos] == '0' {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\t\tstart_mark, \"found an indentation indicator equal to 0\")\n\t\t\treturn false\n\t\t}\n\t\tincrement = as_digit(parser.buffer, parser.buffer_pos)\n\t\tskip(parser)\n\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tif parser.buffer[parser.buffer_pos] == '+' || parser.buffer[parser.buffer_pos] == '-' {\n\t\t\tif parser.buffer[parser.buffer_pos] == '+' {\n\t\t\t\tchomping = +1\n\t\t\t} else {\n\t\t\t\tchomping = -1\n\t\t\t}\n\t\t\tskip(parser)\n\t\t}\n\t}\n\n\t// Eat whitespaces and comments to the end of the line.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tfor is_blank(parser.buffer, parser.buffer_pos) {\n\t\tskip(parser)\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t}\n\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\tif !yaml_parser_scan_line_comment(parser, start_mark) {\n\t\t\treturn false\n\t\t}\n\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check if we are at the end of the line.\n\tif !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\tyaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\tstart_mark, \"did not find expected comment or line break\")\n\t\treturn false\n\t}\n\n\t// Eat a line break.\n\tif is_break(parser.buffer, parser.buffer_pos) {\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\t\tskip_line(parser)\n\t}\n\n\tend_mark := parser.mark\n\n\t// Set the indentation level if it was specified.\n\tvar indent int\n\tif increment > 0 {\n\t\tif parser.indent >= 0 {\n\t\t\tindent = parser.indent + increment\n\t\t} else {\n\t\t\tindent = increment\n\t\t}\n\t}\n\n\t// Scan the leading line breaks and determine the indentation level if needed.\n\tvar s, leading_break, trailing_breaks []byte\n\tif !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {\n\t\treturn false\n\t}\n\n\t// Scan the block scalar content.\n\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\treturn false\n\t}\n\tvar leading_blank, trailing_blank bool\n\tfor parser.mark.column == indent && !is_z(parser.buffer, parser.buffer_pos) {\n\t\t// We are at the beginning of a non-empty line.\n\n\t\t// Is it a trailing whitespace?\n\t\ttrailing_blank = is_blank(parser.buffer, parser.buffer_pos)\n\n\t\t// Check if we need to fold the leading line break.\n\t\tif !literal && !leading_blank && !trailing_blank && len(leading_break) > 0 && leading_break[0] == '\\n' {\n\t\t\t// Do we need to join the lines by space?\n\t\t\tif len(trailing_breaks) == 0 {\n\t\t\t\ts = append(s, ' ')\n\t\t\t}\n\t\t} else {\n\t\t\ts = append(s, leading_break...)\n\t\t}\n\t\tleading_break = leading_break[:0]\n\n\t\t// Append the remaining line breaks.\n\t\ts = append(s, trailing_breaks...)\n\t\ttrailing_breaks = trailing_breaks[:0]\n\n\t\t// Is it a leading whitespace?\n\t\tleading_blank = is_blank(parser.buffer, parser.buffer_pos)\n\n\t\t// Consume the current line.\n\t\tfor !is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\ts = read(parser, s)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Consume the line break.\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\n\t\tleading_break = read_line(parser, leading_break)\n\n\t\t// Eat the following indentation spaces and line breaks.\n\t\tif !yaml_parser_scan_block_scalar_breaks(parser, &indent, &trailing_breaks, start_mark, &end_mark) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t// Chomp the tail.\n\tif chomping != -1 {\n\t\ts = append(s, leading_break...)\n\t}\n\tif chomping == 1 {\n\t\ts = append(s, trailing_breaks...)\n\t}\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_SCALAR_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t\tstyle:      yaml_LITERAL_SCALAR_STYLE,\n\t}\n\tif !literal {\n\t\ttoken.style = yaml_FOLDED_SCALAR_STYLE\n\t}\n\treturn true\n}\n\n// Scan indentation spaces and line breaks for a block scalar.  Determine the\n// indentation level if needed.\nfunc yaml_parser_scan_block_scalar_breaks(parser *yaml_parser_t, indent *int, breaks *[]byte, start_mark yaml_mark_t, end_mark *yaml_mark_t) bool {\n\t*end_mark = parser.mark\n\n\t// Eat the indentation spaces and line breaks.\n\tmax_indent := 0\n\tfor {\n\t\t// Eat the indentation spaces.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\t\tfor (*indent == 0 || parser.mark.column < *indent) && is_space(parser.buffer, parser.buffer_pos) {\n\t\t\tskip(parser)\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tif parser.mark.column > max_indent {\n\t\t\tmax_indent = parser.mark.column\n\t\t}\n\n\t\t// Check for a tab character messing the indentation.\n\t\tif (*indent == 0 || parser.mark.column < *indent) && is_tab(parser.buffer, parser.buffer_pos) {\n\t\t\treturn yaml_parser_set_scanner_error(parser, \"while scanning a block scalar\",\n\t\t\t\tstart_mark, \"found a tab character where an indentation space is expected\")\n\t\t}\n\n\t\t// Have we found a non-empty line?\n\t\tif !is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume the line break.\n\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\treturn false\n\t\t}\n\t\t// [Go] Should really be returning breaks instead.\n\t\t*breaks = read_line(parser, *breaks)\n\t\t*end_mark = parser.mark\n\t}\n\n\t// Determine the indentation level if needed.\n\tif *indent == 0 {\n\t\t*indent = max_indent\n\t\tif *indent < parser.indent+1 {\n\t\t\t*indent = parser.indent + 1\n\t\t}\n\t\tif *indent < 1 {\n\t\t\t*indent = 1\n\t\t}\n\t}\n\treturn true\n}\n\n// Scan a quoted scalar.\nfunc yaml_parser_scan_flow_scalar(parser *yaml_parser_t, token *yaml_token_t, single bool) bool {\n\t// Eat the left quote.\n\tstart_mark := parser.mark\n\tskip(parser)\n\n\t// Consume the content of the quoted scalar.\n\tvar s, leading_break, trailing_breaks, whitespaces []byte\n\tfor {\n\t\t// Check that there are no document indicators at the beginning of the line.\n\t\tif parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {\n\t\t\treturn false\n\t\t}\n\n\t\tif parser.mark.column == 0 &&\n\t\t\t((parser.buffer[parser.buffer_pos+0] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+1] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+2] == '-') ||\n\t\t\t\t(parser.buffer[parser.buffer_pos+0] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+1] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+2] == '.')) &&\n\t\t\tis_blankz(parser.buffer, parser.buffer_pos+3) {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a quoted scalar\",\n\t\t\t\tstart_mark, \"found unexpected document indicator\")\n\t\t\treturn false\n\t\t}\n\n\t\t// Check for EOF.\n\t\tif is_z(parser.buffer, parser.buffer_pos) {\n\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a quoted scalar\",\n\t\t\t\tstart_mark, \"found unexpected end of stream\")\n\t\t\treturn false\n\t\t}\n\n\t\t// Consume non-blank characters.\n\t\tleading_blanks := false\n\t\tfor !is_blankz(parser.buffer, parser.buffer_pos) {\n\t\t\tif single && parser.buffer[parser.buffer_pos] == '\\'' && parser.buffer[parser.buffer_pos+1] == '\\'' {\n\t\t\t\t// Is is an escaped single quote.\n\t\t\t\ts = append(s, '\\'')\n\t\t\t\tskip(parser)\n\t\t\t\tskip(parser)\n\n\t\t\t} else if single && parser.buffer[parser.buffer_pos] == '\\'' {\n\t\t\t\t// It is a right single quote.\n\t\t\t\tbreak\n\t\t\t} else if !single && parser.buffer[parser.buffer_pos] == '\"' {\n\t\t\t\t// It is a right double quote.\n\t\t\t\tbreak\n\n\t\t\t} else if !single && parser.buffer[parser.buffer_pos] == '\\\\' && is_break(parser.buffer, parser.buffer_pos+1) {\n\t\t\t\t// It is an escaped line break.\n\t\t\t\tif parser.unread < 3 && !yaml_parser_update_buffer(parser, 3) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tskip(parser)\n\t\t\t\tskip_line(parser)\n\t\t\t\tleading_blanks = true\n\t\t\t\tbreak\n\n\t\t\t} else if !single && parser.buffer[parser.buffer_pos] == '\\\\' {\n\t\t\t\t// It is an escape sequence.\n\t\t\t\tcode_length := 0\n\n\t\t\t\t// Check the escape character.\n\t\t\t\tswitch parser.buffer[parser.buffer_pos+1] {\n\t\t\t\tcase '0':\n\t\t\t\t\ts = append(s, 0)\n\t\t\t\tcase 'a':\n\t\t\t\t\ts = append(s, '\\x07')\n\t\t\t\tcase 'b':\n\t\t\t\t\ts = append(s, '\\x08')\n\t\t\t\tcase 't', '\\t':\n\t\t\t\t\ts = append(s, '\\x09')\n\t\t\t\tcase 'n':\n\t\t\t\t\ts = append(s, '\\x0A')\n\t\t\t\tcase 'v':\n\t\t\t\t\ts = append(s, '\\x0B')\n\t\t\t\tcase 'f':\n\t\t\t\t\ts = append(s, '\\x0C')\n\t\t\t\tcase 'r':\n\t\t\t\t\ts = append(s, '\\x0D')\n\t\t\t\tcase 'e':\n\t\t\t\t\ts = append(s, '\\x1B')\n\t\t\t\tcase ' ':\n\t\t\t\t\ts = append(s, '\\x20')\n\t\t\t\tcase '\"':\n\t\t\t\t\ts = append(s, '\"')\n\t\t\t\tcase '\\'':\n\t\t\t\t\ts = append(s, '\\'')\n\t\t\t\tcase '\\\\':\n\t\t\t\t\ts = append(s, '\\\\')\n\t\t\t\tcase 'N': // NEL (#x85)\n\t\t\t\t\ts = append(s, '\\xC2')\n\t\t\t\t\ts = append(s, '\\x85')\n\t\t\t\tcase '_': // #xA0\n\t\t\t\t\ts = append(s, '\\xC2')\n\t\t\t\t\ts = append(s, '\\xA0')\n\t\t\t\tcase 'L': // LS (#x2028)\n\t\t\t\t\ts = append(s, '\\xE2')\n\t\t\t\t\ts = append(s, '\\x80')\n\t\t\t\t\ts = append(s, '\\xA8')\n\t\t\t\tcase 'P': // PS (#x2029)\n\t\t\t\t\ts = append(s, '\\xE2')\n\t\t\t\t\ts = append(s, '\\x80')\n\t\t\t\t\ts = append(s, '\\xA9')\n\t\t\t\tcase 'x':\n\t\t\t\t\tcode_length = 2\n\t\t\t\tcase 'u':\n\t\t\t\t\tcode_length = 4\n\t\t\t\tcase 'U':\n\t\t\t\t\tcode_length = 8\n\t\t\t\tdefault:\n\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n\t\t\t\t\t\tstart_mark, \"found unknown escape character\")\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\tskip(parser)\n\t\t\t\tskip(parser)\n\n\t\t\t\t// Consume an arbitrary escape code.\n\t\t\t\tif code_length > 0 {\n\t\t\t\t\tvar value int\n\n\t\t\t\t\t// Scan the character value.\n\t\t\t\t\tif parser.unread < code_length && !yaml_parser_update_buffer(parser, code_length) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tfor k := 0; k < code_length; k++ {\n\t\t\t\t\t\tif !is_hex(parser.buffer, parser.buffer_pos+k) {\n\t\t\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n\t\t\t\t\t\t\t\tstart_mark, \"did not find expected hexdecimal number\")\n\t\t\t\t\t\t\treturn false\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvalue = (value << 4) + as_hex(parser.buffer, parser.buffer_pos+k)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check the value and write the character.\n\t\t\t\t\tif (value >= 0xD800 && value <= 0xDFFF) || value > 0x10FFFF {\n\t\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while parsing a quoted scalar\",\n\t\t\t\t\t\t\tstart_mark, \"found invalid Unicode character escape code\")\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif value <= 0x7F {\n\t\t\t\t\t\ts = append(s, byte(value))\n\t\t\t\t\t} else if value <= 0x7FF {\n\t\t\t\t\t\ts = append(s, byte(0xC0+(value>>6)))\n\t\t\t\t\t\ts = append(s, byte(0x80+(value&0x3F)))\n\t\t\t\t\t} else if value <= 0xFFFF {\n\t\t\t\t\t\ts = append(s, byte(0xE0+(value>>12)))\n\t\t\t\t\t\ts = append(s, byte(0x80+((value>>6)&0x3F)))\n\t\t\t\t\t\ts = append(s, byte(0x80+(value&0x3F)))\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts = append(s, byte(0xF0+(value>>18)))\n\t\t\t\t\t\ts = append(s, byte(0x80+((value>>12)&0x3F)))\n\t\t\t\t\t\ts = append(s, byte(0x80+((value>>6)&0x3F)))\n\t\t\t\t\t\ts = append(s, byte(0x80+(value&0x3F)))\n\t\t\t\t\t}\n\n\t\t\t\t\t// Advance the pointer.\n\t\t\t\t\tfor k := 0; k < code_length; k++ {\n\t\t\t\t\t\tskip(parser)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// It is a non-escaped non-blank character.\n\t\t\t\ts = read(parser, s)\n\t\t\t}\n\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\n\t\t// Check if we are at the end of the scalar.\n\t\tif single {\n\t\t\tif parser.buffer[parser.buffer_pos] == '\\'' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t} else {\n\t\t\tif parser.buffer[parser.buffer_pos] == '\"' {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\t// Consume blank characters.\n\t\tfor is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tif is_blank(parser.buffer, parser.buffer_pos) {\n\t\t\t\t// Consume a space or a tab character.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = read(parser, whitespaces)\n\t\t\t\t} else {\n\t\t\t\t\tskip(parser)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Check if it is a first line break.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = whitespaces[:0]\n\t\t\t\t\tleading_break = read_line(parser, leading_break)\n\t\t\t\t\tleading_blanks = true\n\t\t\t\t} else {\n\t\t\t\t\ttrailing_breaks = read_line(parser, trailing_breaks)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Join the whitespaces or fold line breaks.\n\t\tif leading_blanks {\n\t\t\t// Do we need to fold line breaks?\n\t\t\tif len(leading_break) > 0 && leading_break[0] == '\\n' {\n\t\t\t\tif len(trailing_breaks) == 0 {\n\t\t\t\t\ts = append(s, ' ')\n\t\t\t\t} else {\n\t\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ts = append(s, leading_break...)\n\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t}\n\t\t\ttrailing_breaks = trailing_breaks[:0]\n\t\t\tleading_break = leading_break[:0]\n\t\t} else {\n\t\t\ts = append(s, whitespaces...)\n\t\t\twhitespaces = whitespaces[:0]\n\t\t}\n\t}\n\n\t// Eat the right quote.\n\tskip(parser)\n\tend_mark := parser.mark\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_SCALAR_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t\tstyle:      yaml_SINGLE_QUOTED_SCALAR_STYLE,\n\t}\n\tif !single {\n\t\ttoken.style = yaml_DOUBLE_QUOTED_SCALAR_STYLE\n\t}\n\treturn true\n}\n\n// Scan a plain scalar.\nfunc yaml_parser_scan_plain_scalar(parser *yaml_parser_t, token *yaml_token_t) bool {\n\n\tvar s, leading_break, trailing_breaks, whitespaces []byte\n\tvar leading_blanks bool\n\tvar indent = parser.indent + 1\n\n\tstart_mark := parser.mark\n\tend_mark := parser.mark\n\n\t// Consume the content of the plain scalar.\n\tfor {\n\t\t// Check for a document indicator.\n\t\tif parser.unread < 4 && !yaml_parser_update_buffer(parser, 4) {\n\t\t\treturn false\n\t\t}\n\t\tif parser.mark.column == 0 &&\n\t\t\t((parser.buffer[parser.buffer_pos+0] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+1] == '-' &&\n\t\t\t\tparser.buffer[parser.buffer_pos+2] == '-') ||\n\t\t\t\t(parser.buffer[parser.buffer_pos+0] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+1] == '.' &&\n\t\t\t\t\tparser.buffer[parser.buffer_pos+2] == '.')) &&\n\t\t\tis_blankz(parser.buffer, parser.buffer_pos+3) {\n\t\t\tbreak\n\t\t}\n\n\t\t// Check for a comment.\n\t\tif parser.buffer[parser.buffer_pos] == '#' {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume non-blank characters.\n\t\tfor !is_blankz(parser.buffer, parser.buffer_pos) {\n\n\t\t\t// Check for indicators that may end a plain scalar.\n\t\t\tif (parser.buffer[parser.buffer_pos] == ':' && is_blankz(parser.buffer, parser.buffer_pos+1)) ||\n\t\t\t\t(parser.flow_level > 0 &&\n\t\t\t\t\t(parser.buffer[parser.buffer_pos] == ',' ||\n\t\t\t\t\t\tparser.buffer[parser.buffer_pos] == '?' || parser.buffer[parser.buffer_pos] == '[' ||\n\t\t\t\t\t\tparser.buffer[parser.buffer_pos] == ']' || parser.buffer[parser.buffer_pos] == '{' ||\n\t\t\t\t\t\tparser.buffer[parser.buffer_pos] == '}')) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t// Check if we need to join whitespaces and breaks.\n\t\t\tif leading_blanks || len(whitespaces) > 0 {\n\t\t\t\tif leading_blanks {\n\t\t\t\t\t// Do we need to fold line breaks?\n\t\t\t\t\tif leading_break[0] == '\\n' {\n\t\t\t\t\t\tif len(trailing_breaks) == 0 {\n\t\t\t\t\t\t\ts = append(s, ' ')\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ts = append(s, leading_break...)\n\t\t\t\t\t\ts = append(s, trailing_breaks...)\n\t\t\t\t\t}\n\t\t\t\t\ttrailing_breaks = trailing_breaks[:0]\n\t\t\t\t\tleading_break = leading_break[:0]\n\t\t\t\t\tleading_blanks = false\n\t\t\t\t} else {\n\t\t\t\t\ts = append(s, whitespaces...)\n\t\t\t\t\twhitespaces = whitespaces[:0]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy the character.\n\t\t\ts = read(parser, s)\n\n\t\t\tend_mark = parser.mark\n\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Is it the end?\n\t\tif !(is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos)) {\n\t\t\tbreak\n\t\t}\n\n\t\t// Consume blank characters.\n\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\treturn false\n\t\t}\n\n\t\tfor is_blank(parser.buffer, parser.buffer_pos) || is_break(parser.buffer, parser.buffer_pos) {\n\t\t\tif is_blank(parser.buffer, parser.buffer_pos) {\n\n\t\t\t\t// Check for tab characters that abuse indentation.\n\t\t\t\tif leading_blanks && parser.mark.column < indent && is_tab(parser.buffer, parser.buffer_pos) {\n\t\t\t\t\tyaml_parser_set_scanner_error(parser, \"while scanning a plain scalar\",\n\t\t\t\t\t\tstart_mark, \"found a tab character that violates indentation\")\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Consume a space or a tab character.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = read(parser, whitespaces)\n\t\t\t\t} else {\n\t\t\t\t\tskip(parser)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\n\t\t\t\t// Check if it is a first line break.\n\t\t\t\tif !leading_blanks {\n\t\t\t\t\twhitespaces = whitespaces[:0]\n\t\t\t\t\tleading_break = read_line(parser, leading_break)\n\t\t\t\t\tleading_blanks = true\n\t\t\t\t} else {\n\t\t\t\t\ttrailing_breaks = read_line(parser, trailing_breaks)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\t// Check indentation level.\n\t\tif parser.flow_level == 0 && parser.mark.column < indent {\n\t\t\tbreak\n\t\t}\n\t}\n\n\t// Create a token.\n\t*token = yaml_token_t{\n\t\ttyp:        yaml_SCALAR_TOKEN,\n\t\tstart_mark: start_mark,\n\t\tend_mark:   end_mark,\n\t\tvalue:      s,\n\t\tstyle:      yaml_PLAIN_SCALAR_STYLE,\n\t}\n\n\t// Note that we change the 'simple_key_allowed' flag.\n\tif leading_blanks {\n\t\tparser.simple_key_allowed = true\n\t}\n\treturn true\n}\n\nfunc yaml_parser_scan_line_comment(parser *yaml_parser_t, token_mark yaml_mark_t) bool {\n\tif parser.newlines > 0 {\n\t\treturn true\n\t}\n\n\tvar start_mark yaml_mark_t\n\tvar text []byte\n\n\tfor peek := 0; peek < 512; peek++ {\n\t\tif parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) {\n\t\t\tbreak\n\t\t}\n\t\tif is_blank(parser.buffer, parser.buffer_pos+peek) {\n\t\t\tcontinue\n\t\t}\n\t\tif parser.buffer[parser.buffer_pos+peek] == '#' {\n\t\t\tseen := parser.mark.index + peek\n\t\t\tfor {\n\t\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\t\t\tif parser.mark.index >= seen {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tskip_line(parser)\n\t\t\t\t} else if parser.mark.index >= seen {\n\t\t\t\t\tif len(text) == 0 {\n\t\t\t\t\t\tstart_mark = parser.mark\n\t\t\t\t\t}\n\t\t\t\t\ttext = read(parser, text)\n\t\t\t\t} else {\n\t\t\t\t\tskip(parser)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbreak\n\t}\n\tif len(text) > 0 {\n\t\tparser.comments = append(parser.comments, yaml_comment_t{\n\t\t\ttoken_mark: token_mark,\n\t\t\tstart_mark: start_mark,\n\t\t\tline:       text,\n\t\t})\n\t}\n\treturn true\n}\n\nfunc yaml_parser_scan_comments(parser *yaml_parser_t, scan_mark yaml_mark_t) bool {\n\ttoken := parser.tokens[len(parser.tokens)-1]\n\n\tif token.typ == yaml_FLOW_ENTRY_TOKEN && len(parser.tokens) > 1 {\n\t\ttoken = parser.tokens[len(parser.tokens)-2]\n\t}\n\n\tvar token_mark = token.start_mark\n\tvar start_mark yaml_mark_t\n\tvar next_indent = parser.indent\n\tif next_indent < 0 {\n\t\tnext_indent = 0\n\t}\n\n\tvar recent_empty = false\n\tvar first_empty = parser.newlines <= 1\n\n\tvar line = parser.mark.line\n\tvar column = parser.mark.column\n\n\tvar text []byte\n\n\t// The foot line is the place where a comment must start to\n\t// still be considered as a foot of the prior content.\n\t// If there's some content in the currently parsed line, then\n\t// the foot is the line below it.\n\tvar foot_line = -1\n\tif scan_mark.line > 0 {\n\t\tfoot_line = parser.mark.line - parser.newlines + 1\n\t\tif parser.newlines == 0 && parser.mark.column > 1 {\n\t\t\tfoot_line++\n\t\t}\n\t}\n\n\tvar peek = 0\n\tfor ; peek < 512; peek++ {\n\t\tif parser.unread < peek+1 && !yaml_parser_update_buffer(parser, peek+1) {\n\t\t\tbreak\n\t\t}\n\t\tcolumn++\n\t\tif is_blank(parser.buffer, parser.buffer_pos+peek) {\n\t\t\tcontinue\n\t\t}\n\t\tc := parser.buffer[parser.buffer_pos+peek]\n\t\tvar close_flow = parser.flow_level > 0 && (c == ']' || c == '}')\n\t\tif close_flow || is_breakz(parser.buffer, parser.buffer_pos+peek) {\n\t\t\t// Got line break or terminator.\n\t\t\tif close_flow || !recent_empty {\n\t\t\t\tif close_flow || first_empty && (start_mark.line == foot_line && token.typ != yaml_VALUE_TOKEN || start_mark.column-1 < next_indent) {\n\t\t\t\t\t// This is the first empty line and there were no empty lines before,\n\t\t\t\t\t// so this initial part of the comment is a foot of the prior token\n\t\t\t\t\t// instead of being a head for the following one. Split it up.\n\t\t\t\t\t// Alternatively, this might also be the last comment inside a flow\n\t\t\t\t\t// scope, so it must be a footer.\n\t\t\t\t\tif len(text) > 0 {\n\t\t\t\t\t\tif start_mark.column-1 < next_indent {\n\t\t\t\t\t\t\t// If dedented it's unrelated to the prior token.\n\t\t\t\t\t\t\ttoken_mark = start_mark\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparser.comments = append(parser.comments, yaml_comment_t{\n\t\t\t\t\t\t\tscan_mark:  scan_mark,\n\t\t\t\t\t\t\ttoken_mark: token_mark,\n\t\t\t\t\t\t\tstart_mark: start_mark,\n\t\t\t\t\t\t\tend_mark:   yaml_mark_t{parser.mark.index + peek, line, column},\n\t\t\t\t\t\t\tfoot:       text,\n\t\t\t\t\t\t})\n\t\t\t\t\t\tscan_mark = yaml_mark_t{parser.mark.index + peek, line, column}\n\t\t\t\t\t\ttoken_mark = scan_mark\n\t\t\t\t\t\ttext = nil\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif len(text) > 0 && parser.buffer[parser.buffer_pos+peek] != 0 {\n\t\t\t\t\t\ttext = append(text, '\\n')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !is_break(parser.buffer, parser.buffer_pos+peek) {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfirst_empty = false\n\t\t\trecent_empty = true\n\t\t\tcolumn = 0\n\t\t\tline++\n\t\t\tcontinue\n\t\t}\n\n\t\tif len(text) > 0 && (close_flow || column-1 < next_indent && column != start_mark.column) {\n\t\t\t// The comment at the different indentation is a foot of the\n\t\t\t// preceding data rather than a head of the upcoming one.\n\t\t\tparser.comments = append(parser.comments, yaml_comment_t{\n\t\t\t\tscan_mark:  scan_mark,\n\t\t\t\ttoken_mark: token_mark,\n\t\t\t\tstart_mark: start_mark,\n\t\t\t\tend_mark:   yaml_mark_t{parser.mark.index + peek, line, column},\n\t\t\t\tfoot:       text,\n\t\t\t})\n\t\t\tscan_mark = yaml_mark_t{parser.mark.index + peek, line, column}\n\t\t\ttoken_mark = scan_mark\n\t\t\ttext = nil\n\t\t}\n\n\t\tif parser.buffer[parser.buffer_pos+peek] != '#' {\n\t\t\tbreak\n\t\t}\n\n\t\tif len(text) == 0 {\n\t\t\tstart_mark = yaml_mark_t{parser.mark.index + peek, line, column}\n\t\t} else {\n\t\t\ttext = append(text, '\\n')\n\t\t}\n\n\t\trecent_empty = false\n\n\t\t// Consume until after the consumed comment line.\n\t\tseen := parser.mark.index + peek\n\t\tfor {\n\t\t\tif parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif is_breakz(parser.buffer, parser.buffer_pos) {\n\t\t\t\tif parser.mark.index >= seen {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tif parser.unread < 2 && !yaml_parser_update_buffer(parser, 2) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tskip_line(parser)\n\t\t\t} else if parser.mark.index >= seen {\n\t\t\t\ttext = read(parser, text)\n\t\t\t} else {\n\t\t\t\tskip(parser)\n\t\t\t}\n\t\t}\n\n\t\tpeek = 0\n\t\tcolumn = 0\n\t\tline = parser.mark.line\n\t\tnext_indent = parser.indent\n\t\tif next_indent < 0 {\n\t\t\tnext_indent = 0\n\t\t}\n\t}\n\n\tif len(text) > 0 {\n\t\tparser.comments = append(parser.comments, yaml_comment_t{\n\t\t\tscan_mark:  scan_mark,\n\t\t\ttoken_mark: start_mark,\n\t\t\tstart_mark: start_mark,\n\t\t\tend_mark:   yaml_mark_t{parser.mark.index + peek - 1, line, column},\n\t\t\thead:       text,\n\t\t})\n\t}\n\treturn true\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/sorter.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\npackage yaml\n\nimport (\n\t\"reflect\"\n\t\"unicode\"\n)\n\ntype keyList []reflect.Value\n\nfunc (l keyList) Len() int      { return len(l) }\nfunc (l keyList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }\nfunc (l keyList) Less(i, j int) bool {\n\ta := l[i]\n\tb := l[j]\n\tak := a.Kind()\n\tbk := b.Kind()\n\tfor (ak == reflect.Interface || ak == reflect.Ptr) && !a.IsNil() {\n\t\ta = a.Elem()\n\t\tak = a.Kind()\n\t}\n\tfor (bk == reflect.Interface || bk == reflect.Ptr) && !b.IsNil() {\n\t\tb = b.Elem()\n\t\tbk = b.Kind()\n\t}\n\taf, aok := keyFloat(a)\n\tbf, bok := keyFloat(b)\n\tif aok && bok {\n\t\tif af != bf {\n\t\t\treturn af < bf\n\t\t}\n\t\tif ak != bk {\n\t\t\treturn ak < bk\n\t\t}\n\t\treturn numLess(a, b)\n\t}\n\tif ak != reflect.String || bk != reflect.String {\n\t\treturn ak < bk\n\t}\n\tar, br := []rune(a.String()), []rune(b.String())\n\tdigits := false\n\tfor i := 0; i < len(ar) && i < len(br); i++ {\n\t\tif ar[i] == br[i] {\n\t\t\tdigits = unicode.IsDigit(ar[i])\n\t\t\tcontinue\n\t\t}\n\t\tal := unicode.IsLetter(ar[i])\n\t\tbl := unicode.IsLetter(br[i])\n\t\tif al && bl {\n\t\t\treturn ar[i] < br[i]\n\t\t}\n\t\tif al || bl {\n\t\t\tif digits {\n\t\t\t\treturn al\n\t\t\t} else {\n\t\t\t\treturn bl\n\t\t\t}\n\t\t}\n\t\tvar ai, bi int\n\t\tvar an, bn int64\n\t\tif ar[i] == '0' || br[i] == '0' {\n\t\t\tfor j := i - 1; j >= 0 && unicode.IsDigit(ar[j]); j-- {\n\t\t\t\tif ar[j] != '0' {\n\t\t\t\t\tan = 1\n\t\t\t\t\tbn = 1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor ai = i; ai < len(ar) && unicode.IsDigit(ar[ai]); ai++ {\n\t\t\tan = an*10 + int64(ar[ai]-'0')\n\t\t}\n\t\tfor bi = i; bi < len(br) && unicode.IsDigit(br[bi]); bi++ {\n\t\t\tbn = bn*10 + int64(br[bi]-'0')\n\t\t}\n\t\tif an != bn {\n\t\t\treturn an < bn\n\t\t}\n\t\tif ai != bi {\n\t\t\treturn ai < bi\n\t\t}\n\t\treturn ar[i] < br[i]\n\t}\n\treturn len(ar) < len(br)\n}\n\n// keyFloat returns a float value for v if it is a number/bool\n// and whether it is a number/bool or not.\nfunc keyFloat(v reflect.Value) (f float64, ok bool) {\n\tswitch v.Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn float64(v.Int()), true\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float(), true\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn float64(v.Uint()), true\n\tcase reflect.Bool:\n\t\tif v.Bool() {\n\t\t\treturn 1, true\n\t\t}\n\t\treturn 0, true\n\t}\n\treturn 0, false\n}\n\n// numLess returns whether a < b.\n// a and b must necessarily have the same kind.\nfunc numLess(a, b reflect.Value) bool {\n\tswitch a.Kind() {\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn a.Int() < b.Int()\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn a.Float() < b.Float()\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn a.Uint() < b.Uint()\n\tcase reflect.Bool:\n\t\treturn !a.Bool() && b.Bool()\n\t}\n\tpanic(\"not a number\")\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/writerc.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n// Copyright (c) 2006-2010 Kirill Simonov\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\npackage yaml\n\n// Set the writer error and return false.\nfunc yaml_emitter_set_writer_error(emitter *yaml_emitter_t, problem string) bool {\n\temitter.error = yaml_WRITER_ERROR\n\temitter.problem = problem\n\treturn false\n}\n\n// Flush the output buffer.\nfunc yaml_emitter_flush(emitter *yaml_emitter_t) bool {\n\tif emitter.write_handler == nil {\n\t\tpanic(\"write handler not set\")\n\t}\n\n\t// Check if the buffer is empty.\n\tif emitter.buffer_pos == 0 {\n\t\treturn true\n\t}\n\n\tif err := emitter.write_handler(emitter, emitter.buffer[:emitter.buffer_pos]); err != nil {\n\t\treturn yaml_emitter_set_writer_error(emitter, \"write error: \"+err.Error())\n\t}\n\temitter.buffer_pos = 0\n\treturn true\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/yaml.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Package yaml implements YAML support for the Go language.\n//\n// Source code and other details for the project are available at GitHub:\n//\n//\thttps://github.com/yaml/go-yaml\npackage yaml\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\t\"unicode/utf8\"\n)\n\n// The Unmarshaler interface may be implemented by types to customize their\n// behavior when being unmarshaled from a YAML document.\ntype Unmarshaler interface {\n\tUnmarshalYAML(value *Node) error\n}\n\ntype obsoleteUnmarshaler interface {\n\tUnmarshalYAML(unmarshal func(interface{}) error) error\n}\n\n// The Marshaler interface may be implemented by types to customize their\n// behavior when being marshaled into a YAML document. The returned value\n// is marshaled in place of the original value implementing Marshaler.\n//\n// If an error is returned by MarshalYAML, the marshaling procedure stops\n// and returns with the provided error.\ntype Marshaler interface {\n\tMarshalYAML() (interface{}, error)\n}\n\n// Unmarshal decodes the first document found within the in byte slice\n// and assigns decoded values into the out value.\n//\n// Maps and pointers (to a struct, string, int, etc) are accepted as out\n// values. If an internal pointer within a struct is not initialized,\n// the yaml package will initialize it if necessary for unmarshalling\n// the provided data. The out parameter must not be nil.\n//\n// The type of the decoded values should be compatible with the respective\n// values in out. If one or more values cannot be decoded due to a type\n// mismatches, decoding continues partially until the end of the YAML\n// content, and a *yaml.TypeError is returned with details for all\n// missed values.\n//\n// Struct fields are only unmarshalled if they are exported (have an\n// upper case first letter), and are unmarshalled using the field name\n// lowercased as the default key. Custom keys may be defined via the\n// \"yaml\" name in the field tag: the content preceding the first comma\n// is used as the key, and the following comma-separated options are\n// used to tweak the marshalling process (see Marshal).\n// Conflicting names result in a runtime error.\n//\n// For example:\n//\n//\ttype T struct {\n//\t    F int `yaml:\"a,omitempty\"`\n//\t    B int\n//\t}\n//\tvar t T\n//\tyaml.Unmarshal([]byte(\"a: 1\\nb: 2\"), &t)\n//\n// See the documentation of Marshal for the format of tags and a list of\n// supported tag options.\nfunc Unmarshal(in []byte, out interface{}) (err error) {\n\treturn unmarshal(in, out, false)\n}\n\n// A Decoder reads and decodes YAML values from an input stream.\ntype Decoder struct {\n\tparser      *parser\n\tknownFields bool\n}\n\n// NewDecoder returns a new decoder that reads from r.\n//\n// The decoder introduces its own buffering and may read\n// data from r beyond the YAML values requested.\nfunc NewDecoder(r io.Reader) *Decoder {\n\treturn &Decoder{\n\t\tparser: newParserFromReader(r),\n\t}\n}\n\n// KnownFields ensures that the keys in decoded mappings to\n// exist as fields in the struct being decoded into.\nfunc (dec *Decoder) KnownFields(enable bool) {\n\tdec.knownFields = enable\n}\n\n// Decode reads the next YAML-encoded value from its input\n// and stores it in the value pointed to by v.\n//\n// See the documentation for Unmarshal for details about the\n// conversion of YAML into a Go value.\nfunc (dec *Decoder) Decode(v interface{}) (err error) {\n\td := newDecoder()\n\td.knownFields = dec.knownFields\n\tdefer handleErr(&err)\n\tnode := dec.parser.parse()\n\tif node == nil {\n\t\treturn io.EOF\n\t}\n\tout := reflect.ValueOf(v)\n\tif out.Kind() == reflect.Ptr && !out.IsNil() {\n\t\tout = out.Elem()\n\t}\n\td.unmarshal(node, out)\n\tif len(d.terrors) > 0 {\n\t\treturn &TypeError{d.terrors}\n\t}\n\treturn nil\n}\n\n// Decode decodes the node and stores its data into the value pointed to by v.\n//\n// See the documentation for Unmarshal for details about the\n// conversion of YAML into a Go value.\nfunc (n *Node) Decode(v interface{}) (err error) {\n\td := newDecoder()\n\tdefer handleErr(&err)\n\tout := reflect.ValueOf(v)\n\tif out.Kind() == reflect.Ptr && !out.IsNil() {\n\t\tout = out.Elem()\n\t}\n\td.unmarshal(n, out)\n\tif len(d.terrors) > 0 {\n\t\treturn &TypeError{d.terrors}\n\t}\n\treturn nil\n}\n\nfunc unmarshal(in []byte, out interface{}, strict bool) (err error) {\n\tdefer handleErr(&err)\n\td := newDecoder()\n\tp := newParser(in)\n\tdefer p.destroy()\n\tnode := p.parse()\n\tif node != nil {\n\t\tv := reflect.ValueOf(out)\n\t\tif v.Kind() == reflect.Ptr && !v.IsNil() {\n\t\t\tv = v.Elem()\n\t\t}\n\t\td.unmarshal(node, v)\n\t}\n\tif len(d.terrors) > 0 {\n\t\treturn &TypeError{d.terrors}\n\t}\n\treturn nil\n}\n\n// Marshal serializes the value provided into a YAML document. The structure\n// of the generated document will reflect the structure of the value itself.\n// Maps and pointers (to struct, string, int, etc) are accepted as the in value.\n//\n// Struct fields are only marshalled if they are exported (have an upper case\n// first letter), and are marshalled using the field name lowercased as the\n// default key. Custom keys may be defined via the \"yaml\" name in the field\n// tag: the content preceding the first comma is used as the key, and the\n// following comma-separated options are used to tweak the marshalling process.\n// Conflicting names result in a runtime error.\n//\n// The field tag format accepted is:\n//\n//\t`(...) yaml:\"[<key>][,<flag1>[,<flag2>]]\" (...)`\n//\n// The following flags are currently supported:\n//\n//\tomitempty    Only include the field if it's not set to the zero\n//\t             value for the type or to empty slices or maps.\n//\t             Zero valued structs will be omitted if all their public\n//\t             fields are zero, unless they implement an IsZero\n//\t             method (see the IsZeroer interface type), in which\n//\t             case the field will be excluded if IsZero returns true.\n//\n//\tflow         Marshal using a flow style (useful for structs,\n//\t             sequences and maps).\n//\n//\tinline       Inline the field, which must be a struct or a map,\n//\t             causing all of its fields or keys to be processed as if\n//\t             they were part of the outer struct. For maps, keys must\n//\t             not conflict with the yaml keys of other struct fields.\n//\n// In addition, if the key is \"-\", the field is ignored.\n//\n// For example:\n//\n//\ttype T struct {\n//\t    F int `yaml:\"a,omitempty\"`\n//\t    B int\n//\t}\n//\tyaml.Marshal(&T{B: 2}) // Returns \"b: 2\\n\"\n//\tyaml.Marshal(&T{F: 1}} // Returns \"a: 1\\nb: 0\\n\"\nfunc Marshal(in interface{}) (out []byte, err error) {\n\tdefer handleErr(&err)\n\te := newEncoder()\n\tdefer e.destroy()\n\te.marshalDoc(\"\", reflect.ValueOf(in))\n\te.finish()\n\tout = e.out\n\treturn\n}\n\n// An Encoder writes YAML values to an output stream.\ntype Encoder struct {\n\tencoder *encoder\n}\n\n// NewEncoder returns a new encoder that writes to w.\n// The Encoder should be closed after use to flush all data\n// to w.\nfunc NewEncoder(w io.Writer) *Encoder {\n\treturn &Encoder{\n\t\tencoder: newEncoderWithWriter(w),\n\t}\n}\n\n// Encode writes the YAML encoding of v to the stream.\n// If multiple items are encoded to the stream, the\n// second and subsequent document will be preceded\n// with a \"---\" document separator, but the first will not.\n//\n// See the documentation for Marshal for details about the conversion of Go\n// values to YAML.\nfunc (e *Encoder) Encode(v interface{}) (err error) {\n\tdefer handleErr(&err)\n\te.encoder.marshalDoc(\"\", reflect.ValueOf(v))\n\treturn nil\n}\n\n// Encode encodes value v and stores its representation in n.\n//\n// See the documentation for Marshal for details about the\n// conversion of Go values into YAML.\nfunc (n *Node) Encode(v interface{}) (err error) {\n\tdefer handleErr(&err)\n\te := newEncoder()\n\tdefer e.destroy()\n\te.marshalDoc(\"\", reflect.ValueOf(v))\n\te.finish()\n\tp := newParser(e.out)\n\tp.textless = true\n\tdefer p.destroy()\n\tdoc := p.parse()\n\t*n = *doc.Content[0]\n\treturn nil\n}\n\n// SetIndent changes the used indentation used when encoding.\nfunc (e *Encoder) SetIndent(spaces int) {\n\tif spaces < 0 {\n\t\tpanic(\"yaml: cannot indent to a negative number of spaces\")\n\t}\n\te.encoder.indent = spaces\n}\n\n// CompactSeqIndent makes it so that '- ' is considered part of the indentation.\nfunc (e *Encoder) CompactSeqIndent() {\n\te.encoder.emitter.compact_sequence_indent = true\n}\n\n// DefaultSeqIndent makes it so that '- ' is not considered part of the indentation.\nfunc (e *Encoder) DefaultSeqIndent() {\n\te.encoder.emitter.compact_sequence_indent = false\n}\n\n// Close closes the encoder by writing any remaining data.\n// It does not write a stream terminating string \"...\".\nfunc (e *Encoder) Close() (err error) {\n\tdefer handleErr(&err)\n\te.encoder.finish()\n\treturn nil\n}\n\nfunc handleErr(err *error) {\n\tif v := recover(); v != nil {\n\t\tif e, ok := v.(yamlError); ok {\n\t\t\t*err = e.err\n\t\t} else {\n\t\t\tpanic(v)\n\t\t}\n\t}\n}\n\ntype yamlError struct {\n\terr error\n}\n\nfunc fail(err error) {\n\tpanic(yamlError{err})\n}\n\nfunc failf(format string, args ...interface{}) {\n\tpanic(yamlError{fmt.Errorf(\"yaml: \"+format, args...)})\n}\n\n// A TypeError is returned by Unmarshal when one or more fields in\n// the YAML document cannot be properly decoded into the requested\n// types. When this error is returned, the value is still\n// unmarshaled partially.\ntype TypeError struct {\n\tErrors []string\n}\n\nfunc (e *TypeError) Error() string {\n\treturn fmt.Sprintf(\"yaml: unmarshal errors:\\n  %s\", strings.Join(e.Errors, \"\\n  \"))\n}\n\ntype Kind uint32\n\nconst (\n\tDocumentNode Kind = 1 << iota\n\tSequenceNode\n\tMappingNode\n\tScalarNode\n\tAliasNode\n)\n\ntype Style uint32\n\nconst (\n\tTaggedStyle Style = 1 << iota\n\tDoubleQuotedStyle\n\tSingleQuotedStyle\n\tLiteralStyle\n\tFoldedStyle\n\tFlowStyle\n)\n\n// Node represents an element in the YAML document hierarchy. While documents\n// are typically encoded and decoded into higher level types, such as structs\n// and maps, Node is an intermediate representation that allows detailed\n// control over the content being decoded or encoded.\n//\n// It's worth noting that although Node offers access into details such as\n// line numbers, colums, and comments, the content when re-encoded will not\n// have its original textual representation preserved. An effort is made to\n// render the data plesantly, and to preserve comments near the data they\n// describe, though.\n//\n// Values that make use of the Node type interact with the yaml package in the\n// same way any other type would do, by encoding and decoding yaml data\n// directly or indirectly into them.\n//\n// For example:\n//\n//\tvar person struct {\n//\t        Name    string\n//\t        Address yaml.Node\n//\t}\n//\terr := yaml.Unmarshal(data, &person)\n//\n// Or by itself:\n//\n//\tvar person Node\n//\terr := yaml.Unmarshal(data, &person)\ntype Node struct {\n\t// Kind defines whether the node is a document, a mapping, a sequence,\n\t// a scalar value, or an alias to another node. The specific data type of\n\t// scalar nodes may be obtained via the ShortTag and LongTag methods.\n\tKind Kind\n\n\t// Style allows customizing the apperance of the node in the tree.\n\tStyle Style\n\n\t// Tag holds the YAML tag defining the data type for the value.\n\t// When decoding, this field will always be set to the resolved tag,\n\t// even when it wasn't explicitly provided in the YAML content.\n\t// When encoding, if this field is unset the value type will be\n\t// implied from the node properties, and if it is set, it will only\n\t// be serialized into the representation if TaggedStyle is used or\n\t// the implicit tag diverges from the provided one.\n\tTag string\n\n\t// Value holds the unescaped and unquoted represenation of the value.\n\tValue string\n\n\t// Anchor holds the anchor name for this node, which allows aliases to point to it.\n\tAnchor string\n\n\t// Alias holds the node that this alias points to. Only valid when Kind is AliasNode.\n\tAlias *Node\n\n\t// Content holds contained nodes for documents, mappings, and sequences.\n\tContent []*Node\n\n\t// HeadComment holds any comments in the lines preceding the node and\n\t// not separated by an empty line.\n\tHeadComment string\n\n\t// LineComment holds any comments at the end of the line where the node is in.\n\tLineComment string\n\n\t// FootComment holds any comments following the node and before empty lines.\n\tFootComment string\n\n\t// Line and Column hold the node position in the decoded YAML text.\n\t// These fields are not respected when encoding the node.\n\tLine   int\n\tColumn int\n}\n\n// IsZero returns whether the node has all of its fields unset.\nfunc (n *Node) IsZero() bool {\n\treturn n.Kind == 0 && n.Style == 0 && n.Tag == \"\" && n.Value == \"\" && n.Anchor == \"\" && n.Alias == nil && n.Content == nil &&\n\t\tn.HeadComment == \"\" && n.LineComment == \"\" && n.FootComment == \"\" && n.Line == 0 && n.Column == 0\n}\n\n// LongTag returns the long form of the tag that indicates the data type for\n// the node. If the Tag field isn't explicitly defined, one will be computed\n// based on the node properties.\nfunc (n *Node) LongTag() string {\n\treturn longTag(n.ShortTag())\n}\n\n// ShortTag returns the short form of the YAML tag that indicates data type for\n// the node. If the Tag field isn't explicitly defined, one will be computed\n// based on the node properties.\nfunc (n *Node) ShortTag() string {\n\tif n.indicatedString() {\n\t\treturn strTag\n\t}\n\tif n.Tag == \"\" || n.Tag == \"!\" {\n\t\tswitch n.Kind {\n\t\tcase MappingNode:\n\t\t\treturn mapTag\n\t\tcase SequenceNode:\n\t\t\treturn seqTag\n\t\tcase AliasNode:\n\t\t\tif n.Alias != nil {\n\t\t\t\treturn n.Alias.ShortTag()\n\t\t\t}\n\t\tcase ScalarNode:\n\t\t\ttag, _ := resolve(\"\", n.Value)\n\t\t\treturn tag\n\t\tcase 0:\n\t\t\t// Special case to make the zero value convenient.\n\t\t\tif n.IsZero() {\n\t\t\t\treturn nullTag\n\t\t\t}\n\t\t}\n\t\treturn \"\"\n\t}\n\treturn shortTag(n.Tag)\n}\n\nfunc (n *Node) indicatedString() bool {\n\treturn n.Kind == ScalarNode &&\n\t\t(shortTag(n.Tag) == strTag ||\n\t\t\t(n.Tag == \"\" || n.Tag == \"!\") && n.Style&(SingleQuotedStyle|DoubleQuotedStyle|LiteralStyle|FoldedStyle) != 0)\n}\n\n// SetString is a convenience function that sets the node to a string value\n// and defines its style in a pleasant way depending on its content.\nfunc (n *Node) SetString(s string) {\n\tn.Kind = ScalarNode\n\tif utf8.ValidString(s) {\n\t\tn.Value = s\n\t\tn.Tag = strTag\n\t} else {\n\t\tn.Value = encodeBase64(s)\n\t\tn.Tag = binaryTag\n\t}\n\tif strings.Contains(n.Value, \"\\n\") {\n\t\tn.Style = LiteralStyle\n\t}\n}\n\n// --------------------------------------------------------------------------\n// Maintain a mapping of keys to structure field indexes\n\n// The code in this section was copied from mgo/bson.\n\n// structInfo holds details for the serialization of fields of\n// a given struct.\ntype structInfo struct {\n\tFieldsMap  map[string]fieldInfo\n\tFieldsList []fieldInfo\n\n\t// InlineMap is the number of the field in the struct that\n\t// contains an ,inline map, or -1 if there's none.\n\tInlineMap int\n\n\t// InlineUnmarshalers holds indexes to inlined fields that\n\t// contain unmarshaler values.\n\tInlineUnmarshalers [][]int\n}\n\ntype fieldInfo struct {\n\tKey       string\n\tNum       int\n\tOmitEmpty bool\n\tFlow      bool\n\t// Id holds the unique field identifier, so we can cheaply\n\t// check for field duplicates without maintaining an extra map.\n\tId int\n\n\t// Inline holds the field index if the field is part of an inlined struct.\n\tInline []int\n}\n\nvar structMap = make(map[reflect.Type]*structInfo)\nvar fieldMapMutex sync.RWMutex\nvar unmarshalerType reflect.Type\n\nfunc init() {\n\tvar v Unmarshaler\n\tunmarshalerType = reflect.ValueOf(&v).Elem().Type()\n}\n\nfunc getStructInfo(st reflect.Type) (*structInfo, error) {\n\tfieldMapMutex.RLock()\n\tsinfo, found := structMap[st]\n\tfieldMapMutex.RUnlock()\n\tif found {\n\t\treturn sinfo, nil\n\t}\n\n\tn := st.NumField()\n\tfieldsMap := make(map[string]fieldInfo)\n\tfieldsList := make([]fieldInfo, 0, n)\n\tinlineMap := -1\n\tinlineUnmarshalers := [][]int(nil)\n\tfor i := 0; i != n; i++ {\n\t\tfield := st.Field(i)\n\t\tif field.PkgPath != \"\" && !field.Anonymous {\n\t\t\tcontinue // Private field\n\t\t}\n\n\t\tinfo := fieldInfo{Num: i}\n\n\t\ttag := field.Tag.Get(\"yaml\")\n\t\tif tag == \"\" && strings.Index(string(field.Tag), \":\") < 0 {\n\t\t\ttag = string(field.Tag)\n\t\t}\n\t\tif tag == \"-\" {\n\t\t\tcontinue\n\t\t}\n\n\t\tinline := false\n\t\tfields := strings.Split(tag, \",\")\n\t\tif len(fields) > 1 {\n\t\t\tfor _, flag := range fields[1:] {\n\t\t\t\tswitch flag {\n\t\t\t\tcase \"omitempty\":\n\t\t\t\t\tinfo.OmitEmpty = true\n\t\t\t\tcase \"flow\":\n\t\t\t\t\tinfo.Flow = true\n\t\t\t\tcase \"inline\":\n\t\t\t\t\tinline = true\n\t\t\t\tdefault:\n\t\t\t\t\treturn nil, errors.New(fmt.Sprintf(\"unsupported flag %q in tag %q of type %s\", flag, tag, st))\n\t\t\t\t}\n\t\t\t}\n\t\t\ttag = fields[0]\n\t\t}\n\n\t\tif inline {\n\t\t\tswitch field.Type.Kind() {\n\t\t\tcase reflect.Map:\n\t\t\t\tif inlineMap >= 0 {\n\t\t\t\t\treturn nil, errors.New(\"multiple ,inline maps in struct \" + st.String())\n\t\t\t\t}\n\t\t\t\tif field.Type.Key() != reflect.TypeOf(\"\") {\n\t\t\t\t\treturn nil, errors.New(\"option ,inline needs a map with string keys in struct \" + st.String())\n\t\t\t\t}\n\t\t\t\tinlineMap = info.Num\n\t\t\tcase reflect.Struct, reflect.Ptr:\n\t\t\t\tftype := field.Type\n\t\t\t\tfor ftype.Kind() == reflect.Ptr {\n\t\t\t\t\tftype = ftype.Elem()\n\t\t\t\t}\n\t\t\t\tif ftype.Kind() != reflect.Struct {\n\t\t\t\t\treturn nil, errors.New(\"option ,inline may only be used on a struct or map field\")\n\t\t\t\t}\n\t\t\t\tif reflect.PtrTo(ftype).Implements(unmarshalerType) {\n\t\t\t\t\tinlineUnmarshalers = append(inlineUnmarshalers, []int{i})\n\t\t\t\t} else {\n\t\t\t\t\tsinfo, err := getStructInfo(ftype)\n\t\t\t\t\tif err != nil {\n\t\t\t\t\t\treturn nil, err\n\t\t\t\t\t}\n\t\t\t\t\tfor _, index := range sinfo.InlineUnmarshalers {\n\t\t\t\t\t\tinlineUnmarshalers = append(inlineUnmarshalers, append([]int{i}, index...))\n\t\t\t\t\t}\n\t\t\t\t\tfor _, finfo := range sinfo.FieldsList {\n\t\t\t\t\t\tif _, found := fieldsMap[finfo.Key]; found {\n\t\t\t\t\t\t\tmsg := \"duplicated key '\" + finfo.Key + \"' in struct \" + st.String()\n\t\t\t\t\t\t\treturn nil, errors.New(msg)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif finfo.Inline == nil {\n\t\t\t\t\t\t\tfinfo.Inline = []int{i, finfo.Num}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfinfo.Inline = append([]int{i}, finfo.Inline...)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfinfo.Id = len(fieldsList)\n\t\t\t\t\t\tfieldsMap[finfo.Key] = finfo\n\t\t\t\t\t\tfieldsList = append(fieldsList, finfo)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\treturn nil, errors.New(\"option ,inline may only be used on a struct or map field\")\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif tag != \"\" {\n\t\t\tinfo.Key = tag\n\t\t} else {\n\t\t\tinfo.Key = strings.ToLower(field.Name)\n\t\t}\n\n\t\tif _, found = fieldsMap[info.Key]; found {\n\t\t\tmsg := \"duplicated key '\" + info.Key + \"' in struct \" + st.String()\n\t\t\treturn nil, errors.New(msg)\n\t\t}\n\n\t\tinfo.Id = len(fieldsList)\n\t\tfieldsList = append(fieldsList, info)\n\t\tfieldsMap[info.Key] = info\n\t}\n\n\tsinfo = &structInfo{\n\t\tFieldsMap:          fieldsMap,\n\t\tFieldsList:         fieldsList,\n\t\tInlineMap:          inlineMap,\n\t\tInlineUnmarshalers: inlineUnmarshalers,\n\t}\n\n\tfieldMapMutex.Lock()\n\tstructMap[st] = sinfo\n\tfieldMapMutex.Unlock()\n\treturn sinfo, nil\n}\n\n// IsZeroer is used to check whether an object is zero to\n// determine whether it should be omitted when marshaling\n// with the omitempty flag. One notable implementation\n// is time.Time.\ntype IsZeroer interface {\n\tIsZero() bool\n}\n\nfunc isZero(v reflect.Value) bool {\n\tkind := v.Kind()\n\tif z, ok := v.Interface().(IsZeroer); ok {\n\t\tif (kind == reflect.Ptr || kind == reflect.Interface) && v.IsNil() {\n\t\t\treturn true\n\t\t}\n\t\treturn z.IsZero()\n\t}\n\tswitch kind {\n\tcase reflect.String:\n\t\treturn len(v.String()) == 0\n\tcase reflect.Interface, reflect.Ptr:\n\t\treturn v.IsNil()\n\tcase reflect.Slice:\n\t\treturn v.Len() == 0\n\tcase reflect.Map:\n\t\treturn v.Len() == 0\n\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:\n\t\treturn v.Int() == 0\n\tcase reflect.Float32, reflect.Float64:\n\t\treturn v.Float() == 0\n\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:\n\t\treturn v.Uint() == 0\n\tcase reflect.Bool:\n\t\treturn !v.Bool()\n\tcase reflect.Struct:\n\t\tvt := v.Type()\n\t\tfor i := v.NumField() - 1; i >= 0; i-- {\n\t\t\tif vt.Field(i).PkgPath != \"\" {\n\t\t\t\tcontinue // Private field\n\t\t\t}\n\t\t\tif !isZero(v.Field(i)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/yamlh.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n// Copyright (c) 2006-2010 Kirill Simonov\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\npackage yaml\n\nimport (\n\t\"fmt\"\n\t\"io\"\n)\n\n// The version directive data.\ntype yaml_version_directive_t struct {\n\tmajor int8 // The major version number.\n\tminor int8 // The minor version number.\n}\n\n// The tag directive data.\ntype yaml_tag_directive_t struct {\n\thandle []byte // The tag handle.\n\tprefix []byte // The tag prefix.\n}\n\ntype yaml_encoding_t int\n\n// The stream encoding.\nconst (\n\t// Let the parser choose the encoding.\n\tyaml_ANY_ENCODING yaml_encoding_t = iota\n\n\tyaml_UTF8_ENCODING    // The default UTF-8 encoding.\n\tyaml_UTF16LE_ENCODING // The UTF-16-LE encoding with BOM.\n\tyaml_UTF16BE_ENCODING // The UTF-16-BE encoding with BOM.\n)\n\ntype yaml_break_t int\n\n// Line break types.\nconst (\n\t// Let the parser choose the break type.\n\tyaml_ANY_BREAK yaml_break_t = iota\n\n\tyaml_CR_BREAK   // Use CR for line breaks (Mac style).\n\tyaml_LN_BREAK   // Use LN for line breaks (Unix style).\n\tyaml_CRLN_BREAK // Use CR LN for line breaks (DOS style).\n)\n\ntype yaml_error_type_t int\n\n// Many bad things could happen with the parser and emitter.\nconst (\n\t// No error is produced.\n\tyaml_NO_ERROR yaml_error_type_t = iota\n\n\tyaml_MEMORY_ERROR   // Cannot allocate or reallocate a block of memory.\n\tyaml_READER_ERROR   // Cannot read or decode the input stream.\n\tyaml_SCANNER_ERROR  // Cannot scan the input stream.\n\tyaml_PARSER_ERROR   // Cannot parse the input stream.\n\tyaml_COMPOSER_ERROR // Cannot compose a YAML document.\n\tyaml_WRITER_ERROR   // Cannot write to the output stream.\n\tyaml_EMITTER_ERROR  // Cannot emit a YAML stream.\n)\n\n// The pointer position.\ntype yaml_mark_t struct {\n\tindex  int // The position index.\n\tline   int // The position line.\n\tcolumn int // The position column.\n}\n\n// Node Styles\n\ntype yaml_style_t int8\n\ntype yaml_scalar_style_t yaml_style_t\n\n// Scalar styles.\nconst (\n\t// Let the emitter choose the style.\n\tyaml_ANY_SCALAR_STYLE yaml_scalar_style_t = 0\n\n\tyaml_PLAIN_SCALAR_STYLE         yaml_scalar_style_t = 1 << iota // The plain scalar style.\n\tyaml_SINGLE_QUOTED_SCALAR_STYLE                                 // The single-quoted scalar style.\n\tyaml_DOUBLE_QUOTED_SCALAR_STYLE                                 // The double-quoted scalar style.\n\tyaml_LITERAL_SCALAR_STYLE                                       // The literal scalar style.\n\tyaml_FOLDED_SCALAR_STYLE                                        // The folded scalar style.\n)\n\ntype yaml_sequence_style_t yaml_style_t\n\n// Sequence styles.\nconst (\n\t// Let the emitter choose the style.\n\tyaml_ANY_SEQUENCE_STYLE yaml_sequence_style_t = iota\n\n\tyaml_BLOCK_SEQUENCE_STYLE // The block sequence style.\n\tyaml_FLOW_SEQUENCE_STYLE  // The flow sequence style.\n)\n\ntype yaml_mapping_style_t yaml_style_t\n\n// Mapping styles.\nconst (\n\t// Let the emitter choose the style.\n\tyaml_ANY_MAPPING_STYLE yaml_mapping_style_t = iota\n\n\tyaml_BLOCK_MAPPING_STYLE // The block mapping style.\n\tyaml_FLOW_MAPPING_STYLE  // The flow mapping style.\n)\n\n// Tokens\n\ntype yaml_token_type_t int\n\n// Token types.\nconst (\n\t// An empty token.\n\tyaml_NO_TOKEN yaml_token_type_t = iota\n\n\tyaml_STREAM_START_TOKEN // A STREAM-START token.\n\tyaml_STREAM_END_TOKEN   // A STREAM-END token.\n\n\tyaml_VERSION_DIRECTIVE_TOKEN // A VERSION-DIRECTIVE token.\n\tyaml_TAG_DIRECTIVE_TOKEN     // A TAG-DIRECTIVE token.\n\tyaml_DOCUMENT_START_TOKEN    // A DOCUMENT-START token.\n\tyaml_DOCUMENT_END_TOKEN      // A DOCUMENT-END token.\n\n\tyaml_BLOCK_SEQUENCE_START_TOKEN // A BLOCK-SEQUENCE-START token.\n\tyaml_BLOCK_MAPPING_START_TOKEN  // A BLOCK-SEQUENCE-END token.\n\tyaml_BLOCK_END_TOKEN            // A BLOCK-END token.\n\n\tyaml_FLOW_SEQUENCE_START_TOKEN // A FLOW-SEQUENCE-START token.\n\tyaml_FLOW_SEQUENCE_END_TOKEN   // A FLOW-SEQUENCE-END token.\n\tyaml_FLOW_MAPPING_START_TOKEN  // A FLOW-MAPPING-START token.\n\tyaml_FLOW_MAPPING_END_TOKEN    // A FLOW-MAPPING-END token.\n\n\tyaml_BLOCK_ENTRY_TOKEN // A BLOCK-ENTRY token.\n\tyaml_FLOW_ENTRY_TOKEN  // A FLOW-ENTRY token.\n\tyaml_KEY_TOKEN         // A KEY token.\n\tyaml_VALUE_TOKEN       // A VALUE token.\n\n\tyaml_ALIAS_TOKEN  // An ALIAS token.\n\tyaml_ANCHOR_TOKEN // An ANCHOR token.\n\tyaml_TAG_TOKEN    // A TAG token.\n\tyaml_SCALAR_TOKEN // A SCALAR token.\n)\n\nfunc (tt yaml_token_type_t) String() string {\n\tswitch tt {\n\tcase yaml_NO_TOKEN:\n\t\treturn \"yaml_NO_TOKEN\"\n\tcase yaml_STREAM_START_TOKEN:\n\t\treturn \"yaml_STREAM_START_TOKEN\"\n\tcase yaml_STREAM_END_TOKEN:\n\t\treturn \"yaml_STREAM_END_TOKEN\"\n\tcase yaml_VERSION_DIRECTIVE_TOKEN:\n\t\treturn \"yaml_VERSION_DIRECTIVE_TOKEN\"\n\tcase yaml_TAG_DIRECTIVE_TOKEN:\n\t\treturn \"yaml_TAG_DIRECTIVE_TOKEN\"\n\tcase yaml_DOCUMENT_START_TOKEN:\n\t\treturn \"yaml_DOCUMENT_START_TOKEN\"\n\tcase yaml_DOCUMENT_END_TOKEN:\n\t\treturn \"yaml_DOCUMENT_END_TOKEN\"\n\tcase yaml_BLOCK_SEQUENCE_START_TOKEN:\n\t\treturn \"yaml_BLOCK_SEQUENCE_START_TOKEN\"\n\tcase yaml_BLOCK_MAPPING_START_TOKEN:\n\t\treturn \"yaml_BLOCK_MAPPING_START_TOKEN\"\n\tcase yaml_BLOCK_END_TOKEN:\n\t\treturn \"yaml_BLOCK_END_TOKEN\"\n\tcase yaml_FLOW_SEQUENCE_START_TOKEN:\n\t\treturn \"yaml_FLOW_SEQUENCE_START_TOKEN\"\n\tcase yaml_FLOW_SEQUENCE_END_TOKEN:\n\t\treturn \"yaml_FLOW_SEQUENCE_END_TOKEN\"\n\tcase yaml_FLOW_MAPPING_START_TOKEN:\n\t\treturn \"yaml_FLOW_MAPPING_START_TOKEN\"\n\tcase yaml_FLOW_MAPPING_END_TOKEN:\n\t\treturn \"yaml_FLOW_MAPPING_END_TOKEN\"\n\tcase yaml_BLOCK_ENTRY_TOKEN:\n\t\treturn \"yaml_BLOCK_ENTRY_TOKEN\"\n\tcase yaml_FLOW_ENTRY_TOKEN:\n\t\treturn \"yaml_FLOW_ENTRY_TOKEN\"\n\tcase yaml_KEY_TOKEN:\n\t\treturn \"yaml_KEY_TOKEN\"\n\tcase yaml_VALUE_TOKEN:\n\t\treturn \"yaml_VALUE_TOKEN\"\n\tcase yaml_ALIAS_TOKEN:\n\t\treturn \"yaml_ALIAS_TOKEN\"\n\tcase yaml_ANCHOR_TOKEN:\n\t\treturn \"yaml_ANCHOR_TOKEN\"\n\tcase yaml_TAG_TOKEN:\n\t\treturn \"yaml_TAG_TOKEN\"\n\tcase yaml_SCALAR_TOKEN:\n\t\treturn \"yaml_SCALAR_TOKEN\"\n\t}\n\treturn \"<unknown token>\"\n}\n\n// The token structure.\ntype yaml_token_t struct {\n\t// The token type.\n\ttyp yaml_token_type_t\n\n\t// The start/end of the token.\n\tstart_mark, end_mark yaml_mark_t\n\n\t// The stream encoding (for yaml_STREAM_START_TOKEN).\n\tencoding yaml_encoding_t\n\n\t// The alias/anchor/scalar value or tag/tag directive handle\n\t// (for yaml_ALIAS_TOKEN, yaml_ANCHOR_TOKEN, yaml_SCALAR_TOKEN, yaml_TAG_TOKEN, yaml_TAG_DIRECTIVE_TOKEN).\n\tvalue []byte\n\n\t// The tag suffix (for yaml_TAG_TOKEN).\n\tsuffix []byte\n\n\t// The tag directive prefix (for yaml_TAG_DIRECTIVE_TOKEN).\n\tprefix []byte\n\n\t// The scalar style (for yaml_SCALAR_TOKEN).\n\tstyle yaml_scalar_style_t\n\n\t// The version directive major/minor (for yaml_VERSION_DIRECTIVE_TOKEN).\n\tmajor, minor int8\n}\n\n// Events\n\ntype yaml_event_type_t int8\n\n// Event types.\nconst (\n\t// An empty event.\n\tyaml_NO_EVENT yaml_event_type_t = iota\n\n\tyaml_STREAM_START_EVENT   // A STREAM-START event.\n\tyaml_STREAM_END_EVENT     // A STREAM-END event.\n\tyaml_DOCUMENT_START_EVENT // A DOCUMENT-START event.\n\tyaml_DOCUMENT_END_EVENT   // A DOCUMENT-END event.\n\tyaml_ALIAS_EVENT          // An ALIAS event.\n\tyaml_SCALAR_EVENT         // A SCALAR event.\n\tyaml_SEQUENCE_START_EVENT // A SEQUENCE-START event.\n\tyaml_SEQUENCE_END_EVENT   // A SEQUENCE-END event.\n\tyaml_MAPPING_START_EVENT  // A MAPPING-START event.\n\tyaml_MAPPING_END_EVENT    // A MAPPING-END event.\n\tyaml_TAIL_COMMENT_EVENT\n)\n\nvar eventStrings = []string{\n\tyaml_NO_EVENT:             \"none\",\n\tyaml_STREAM_START_EVENT:   \"stream start\",\n\tyaml_STREAM_END_EVENT:     \"stream end\",\n\tyaml_DOCUMENT_START_EVENT: \"document start\",\n\tyaml_DOCUMENT_END_EVENT:   \"document end\",\n\tyaml_ALIAS_EVENT:          \"alias\",\n\tyaml_SCALAR_EVENT:         \"scalar\",\n\tyaml_SEQUENCE_START_EVENT: \"sequence start\",\n\tyaml_SEQUENCE_END_EVENT:   \"sequence end\",\n\tyaml_MAPPING_START_EVENT:  \"mapping start\",\n\tyaml_MAPPING_END_EVENT:    \"mapping end\",\n\tyaml_TAIL_COMMENT_EVENT:   \"tail comment\",\n}\n\nfunc (e yaml_event_type_t) String() string {\n\tif e < 0 || int(e) >= len(eventStrings) {\n\t\treturn fmt.Sprintf(\"unknown event %d\", e)\n\t}\n\treturn eventStrings[e]\n}\n\n// The event structure.\ntype yaml_event_t struct {\n\n\t// The event type.\n\ttyp yaml_event_type_t\n\n\t// The start and end of the event.\n\tstart_mark, end_mark yaml_mark_t\n\n\t// The document encoding (for yaml_STREAM_START_EVENT).\n\tencoding yaml_encoding_t\n\n\t// The version directive (for yaml_DOCUMENT_START_EVENT).\n\tversion_directive *yaml_version_directive_t\n\n\t// The list of tag directives (for yaml_DOCUMENT_START_EVENT).\n\ttag_directives []yaml_tag_directive_t\n\n\t// The comments\n\thead_comment []byte\n\tline_comment []byte\n\tfoot_comment []byte\n\ttail_comment []byte\n\n\t// The anchor (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_ALIAS_EVENT).\n\tanchor []byte\n\n\t// The tag (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).\n\ttag []byte\n\n\t// The scalar value (for yaml_SCALAR_EVENT).\n\tvalue []byte\n\n\t// Is the document start/end indicator implicit, or the tag optional?\n\t// (for yaml_DOCUMENT_START_EVENT, yaml_DOCUMENT_END_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT, yaml_SCALAR_EVENT).\n\timplicit bool\n\n\t// Is the tag optional for any non-plain style? (for yaml_SCALAR_EVENT).\n\tquoted_implicit bool\n\n\t// The style (for yaml_SCALAR_EVENT, yaml_SEQUENCE_START_EVENT, yaml_MAPPING_START_EVENT).\n\tstyle yaml_style_t\n}\n\nfunc (e *yaml_event_t) scalar_style() yaml_scalar_style_t     { return yaml_scalar_style_t(e.style) }\nfunc (e *yaml_event_t) sequence_style() yaml_sequence_style_t { return yaml_sequence_style_t(e.style) }\nfunc (e *yaml_event_t) mapping_style() yaml_mapping_style_t   { return yaml_mapping_style_t(e.style) }\n\n// Nodes\n\nconst (\n\tyaml_NULL_TAG      = \"tag:yaml.org,2002:null\"      // The tag !!null with the only possible value: null.\n\tyaml_BOOL_TAG      = \"tag:yaml.org,2002:bool\"      // The tag !!bool with the values: true and false.\n\tyaml_STR_TAG       = \"tag:yaml.org,2002:str\"       // The tag !!str for string values.\n\tyaml_INT_TAG       = \"tag:yaml.org,2002:int\"       // The tag !!int for integer values.\n\tyaml_FLOAT_TAG     = \"tag:yaml.org,2002:float\"     // The tag !!float for float values.\n\tyaml_TIMESTAMP_TAG = \"tag:yaml.org,2002:timestamp\" // The tag !!timestamp for date and time values.\n\n\tyaml_SEQ_TAG = \"tag:yaml.org,2002:seq\" // The tag !!seq is used to denote sequences.\n\tyaml_MAP_TAG = \"tag:yaml.org,2002:map\" // The tag !!map is used to denote mapping.\n\n\t// Not in original libyaml.\n\tyaml_BINARY_TAG = \"tag:yaml.org,2002:binary\"\n\tyaml_MERGE_TAG  = \"tag:yaml.org,2002:merge\"\n\n\tyaml_DEFAULT_SCALAR_TAG   = yaml_STR_TAG // The default scalar tag is !!str.\n\tyaml_DEFAULT_SEQUENCE_TAG = yaml_SEQ_TAG // The default sequence tag is !!seq.\n\tyaml_DEFAULT_MAPPING_TAG  = yaml_MAP_TAG // The default mapping tag is !!map.\n)\n\ntype yaml_node_type_t int\n\n// Node types.\nconst (\n\t// An empty node.\n\tyaml_NO_NODE yaml_node_type_t = iota\n\n\tyaml_SCALAR_NODE   // A scalar node.\n\tyaml_SEQUENCE_NODE // A sequence node.\n\tyaml_MAPPING_NODE  // A mapping node.\n)\n\n// An element of a sequence node.\ntype yaml_node_item_t int\n\n// An element of a mapping node.\ntype yaml_node_pair_t struct {\n\tkey   int // The key of the element.\n\tvalue int // The value of the element.\n}\n\n// The node structure.\ntype yaml_node_t struct {\n\ttyp yaml_node_type_t // The node type.\n\ttag []byte           // The node tag.\n\n\t// The node data.\n\n\t// The scalar parameters (for yaml_SCALAR_NODE).\n\tscalar struct {\n\t\tvalue  []byte              // The scalar value.\n\t\tlength int                 // The length of the scalar value.\n\t\tstyle  yaml_scalar_style_t // The scalar style.\n\t}\n\n\t// The sequence parameters (for YAML_SEQUENCE_NODE).\n\tsequence struct {\n\t\titems_data []yaml_node_item_t    // The stack of sequence items.\n\t\tstyle      yaml_sequence_style_t // The sequence style.\n\t}\n\n\t// The mapping parameters (for yaml_MAPPING_NODE).\n\tmapping struct {\n\t\tpairs_data  []yaml_node_pair_t   // The stack of mapping pairs (key, value).\n\t\tpairs_start *yaml_node_pair_t    // The beginning of the stack.\n\t\tpairs_end   *yaml_node_pair_t    // The end of the stack.\n\t\tpairs_top   *yaml_node_pair_t    // The top of the stack.\n\t\tstyle       yaml_mapping_style_t // The mapping style.\n\t}\n\n\tstart_mark yaml_mark_t // The beginning of the node.\n\tend_mark   yaml_mark_t // The end of the node.\n\n}\n\n// The document structure.\ntype yaml_document_t struct {\n\n\t// The document nodes.\n\tnodes []yaml_node_t\n\n\t// The version directive.\n\tversion_directive *yaml_version_directive_t\n\n\t// The list of tag directives.\n\ttag_directives_data  []yaml_tag_directive_t\n\ttag_directives_start int // The beginning of the tag directives list.\n\ttag_directives_end   int // The end of the tag directives list.\n\n\tstart_implicit int // Is the document start indicator implicit?\n\tend_implicit   int // Is the document end indicator implicit?\n\n\t// The start/end of the document.\n\tstart_mark, end_mark yaml_mark_t\n}\n\n// The prototype of a read handler.\n//\n// The read handler is called when the parser needs to read more bytes from the\n// source. The handler should write not more than size bytes to the buffer.\n// The number of written bytes should be set to the size_read variable.\n//\n// [in,out]   data        A pointer to an application data specified by\n//\n//\tyaml_parser_set_input().\n//\n// [out]      buffer      The buffer to write the data from the source.\n// [in]       size        The size of the buffer.\n// [out]      size_read   The actual number of bytes read from the source.\n//\n// On success, the handler should return 1.  If the handler failed,\n// the returned value should be 0. On EOF, the handler should set the\n// size_read to 0 and return 1.\ntype yaml_read_handler_t func(parser *yaml_parser_t, buffer []byte) (n int, err error)\n\n// This structure holds information about a potential simple key.\ntype yaml_simple_key_t struct {\n\tpossible     bool        // Is a simple key possible?\n\trequired     bool        // Is a simple key required?\n\ttoken_number int         // The number of the token.\n\tmark         yaml_mark_t // The position mark.\n}\n\n// The states of the parser.\ntype yaml_parser_state_t int\n\nconst (\n\tyaml_PARSE_STREAM_START_STATE yaml_parser_state_t = iota\n\n\tyaml_PARSE_IMPLICIT_DOCUMENT_START_STATE           // Expect the beginning of an implicit document.\n\tyaml_PARSE_DOCUMENT_START_STATE                    // Expect DOCUMENT-START.\n\tyaml_PARSE_DOCUMENT_CONTENT_STATE                  // Expect the content of a document.\n\tyaml_PARSE_DOCUMENT_END_STATE                      // Expect DOCUMENT-END.\n\tyaml_PARSE_BLOCK_NODE_STATE                        // Expect a block node.\n\tyaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE // Expect a block node or indentless sequence.\n\tyaml_PARSE_FLOW_NODE_STATE                         // Expect a flow node.\n\tyaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE        // Expect the first entry of a block sequence.\n\tyaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE              // Expect an entry of a block sequence.\n\tyaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE         // Expect an entry of an indentless sequence.\n\tyaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE           // Expect the first key of a block mapping.\n\tyaml_PARSE_BLOCK_MAPPING_KEY_STATE                 // Expect a block mapping key.\n\tyaml_PARSE_BLOCK_MAPPING_VALUE_STATE               // Expect a block mapping value.\n\tyaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE         // Expect the first entry of a flow sequence.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE               // Expect an entry of a flow sequence.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE   // Expect a key of an ordered mapping.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE // Expect a value of an ordered mapping.\n\tyaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE   // Expect the and of an ordered mapping entry.\n\tyaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE            // Expect the first key of a flow mapping.\n\tyaml_PARSE_FLOW_MAPPING_KEY_STATE                  // Expect a key of a flow mapping.\n\tyaml_PARSE_FLOW_MAPPING_VALUE_STATE                // Expect a value of a flow mapping.\n\tyaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE          // Expect an empty value of a flow mapping.\n\tyaml_PARSE_END_STATE                               // Expect nothing.\n)\n\nfunc (ps yaml_parser_state_t) String() string {\n\tswitch ps {\n\tcase yaml_PARSE_STREAM_START_STATE:\n\t\treturn \"yaml_PARSE_STREAM_START_STATE\"\n\tcase yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE:\n\t\treturn \"yaml_PARSE_IMPLICIT_DOCUMENT_START_STATE\"\n\tcase yaml_PARSE_DOCUMENT_START_STATE:\n\t\treturn \"yaml_PARSE_DOCUMENT_START_STATE\"\n\tcase yaml_PARSE_DOCUMENT_CONTENT_STATE:\n\t\treturn \"yaml_PARSE_DOCUMENT_CONTENT_STATE\"\n\tcase yaml_PARSE_DOCUMENT_END_STATE:\n\t\treturn \"yaml_PARSE_DOCUMENT_END_STATE\"\n\tcase yaml_PARSE_BLOCK_NODE_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_NODE_STATE\"\n\tcase yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_NODE_OR_INDENTLESS_SEQUENCE_STATE\"\n\tcase yaml_PARSE_FLOW_NODE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_NODE_STATE\"\n\tcase yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_SEQUENCE_FIRST_ENTRY_STATE\"\n\tcase yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_SEQUENCE_ENTRY_STATE\"\n\tcase yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_INDENTLESS_SEQUENCE_ENTRY_STATE\"\n\tcase yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_MAPPING_FIRST_KEY_STATE\"\n\tcase yaml_PARSE_BLOCK_MAPPING_KEY_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_MAPPING_KEY_STATE\"\n\tcase yaml_PARSE_BLOCK_MAPPING_VALUE_STATE:\n\t\treturn \"yaml_PARSE_BLOCK_MAPPING_VALUE_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_FIRST_ENTRY_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_KEY_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_VALUE_STATE\"\n\tcase yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE:\n\t\treturn \"yaml_PARSE_FLOW_SEQUENCE_ENTRY_MAPPING_END_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_FIRST_KEY_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_KEY_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_KEY_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_VALUE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_VALUE_STATE\"\n\tcase yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE:\n\t\treturn \"yaml_PARSE_FLOW_MAPPING_EMPTY_VALUE_STATE\"\n\tcase yaml_PARSE_END_STATE:\n\t\treturn \"yaml_PARSE_END_STATE\"\n\t}\n\treturn \"<unknown parser state>\"\n}\n\n// This structure holds aliases data.\ntype yaml_alias_data_t struct {\n\tanchor []byte      // The anchor.\n\tindex  int         // The node id.\n\tmark   yaml_mark_t // The anchor mark.\n}\n\n// The parser structure.\n//\n// All members are internal. Manage the structure using the\n// yaml_parser_ family of functions.\ntype yaml_parser_t struct {\n\n\t// Error handling\n\n\terror yaml_error_type_t // Error type.\n\n\tproblem string // Error description.\n\n\t// The byte about which the problem occurred.\n\tproblem_offset int\n\tproblem_value  int\n\tproblem_mark   yaml_mark_t\n\n\t// The error context.\n\tcontext      string\n\tcontext_mark yaml_mark_t\n\n\t// Reader stuff\n\n\tread_handler yaml_read_handler_t // Read handler.\n\n\tinput_reader io.Reader // File input data.\n\tinput        []byte    // String input data.\n\tinput_pos    int\n\n\teof bool // EOF flag\n\n\tbuffer     []byte // The working buffer.\n\tbuffer_pos int    // The current position of the buffer.\n\n\tunread int // The number of unread characters in the buffer.\n\n\tnewlines int // The number of line breaks since last non-break/non-blank character\n\n\traw_buffer     []byte // The raw buffer.\n\traw_buffer_pos int    // The current position of the buffer.\n\n\tencoding yaml_encoding_t // The input encoding.\n\n\toffset int         // The offset of the current position (in bytes).\n\tmark   yaml_mark_t // The mark of the current position.\n\n\t// Comments\n\n\thead_comment []byte // The current head comments\n\tline_comment []byte // The current line comments\n\tfoot_comment []byte // The current foot comments\n\ttail_comment []byte // Foot comment that happens at the end of a block.\n\tstem_comment []byte // Comment in item preceding a nested structure (list inside list item, etc)\n\n\tcomments      []yaml_comment_t // The folded comments for all parsed tokens\n\tcomments_head int\n\n\t// Scanner stuff\n\n\tstream_start_produced bool // Have we started to scan the input stream?\n\tstream_end_produced   bool // Have we reached the end of the input stream?\n\n\tflow_level int // The number of unclosed '[' and '{' indicators.\n\n\ttokens          []yaml_token_t // The tokens queue.\n\ttokens_head     int            // The head of the tokens queue.\n\ttokens_parsed   int            // The number of tokens fetched from the queue.\n\ttoken_available bool           // Does the tokens queue contain a token ready for dequeueing.\n\n\tindent  int   // The current indentation level.\n\tindents []int // The indentation levels stack.\n\n\tsimple_key_allowed bool                // May a simple key occur at the current position?\n\tsimple_keys        []yaml_simple_key_t // The stack of simple keys.\n\tsimple_keys_by_tok map[int]int         // possible simple_key indexes indexed by token_number\n\n\t// Parser stuff\n\n\tstate          yaml_parser_state_t    // The current parser state.\n\tstates         []yaml_parser_state_t  // The parser states stack.\n\tmarks          []yaml_mark_t          // The stack of marks.\n\ttag_directives []yaml_tag_directive_t // The list of TAG directives.\n\n\t// Dumper stuff\n\n\taliases []yaml_alias_data_t // The alias data.\n\n\tdocument *yaml_document_t // The currently parsed document.\n}\n\ntype yaml_comment_t struct {\n\tscan_mark  yaml_mark_t // Position where scanning for comments started\n\ttoken_mark yaml_mark_t // Position after which tokens will be associated with this comment\n\tstart_mark yaml_mark_t // Position of '#' comment mark\n\tend_mark   yaml_mark_t // Position where comment terminated\n\n\thead []byte\n\tline []byte\n\tfoot []byte\n}\n\n// Emitter Definitions\n\n// The prototype of a write handler.\n//\n// The write handler is called when the emitter needs to flush the accumulated\n// characters to the output.  The handler should write @a size bytes of the\n// @a buffer to the output.\n//\n// @param[in,out]   data        A pointer to an application data specified by\n//\n//\tyaml_emitter_set_output().\n//\n// @param[in]       buffer      The buffer with bytes to be written.\n// @param[in]       size        The size of the buffer.\n//\n// @returns On success, the handler should return @c 1.  If the handler failed,\n// the returned value should be @c 0.\ntype yaml_write_handler_t func(emitter *yaml_emitter_t, buffer []byte) error\n\ntype yaml_emitter_state_t int\n\n// The emitter states.\nconst (\n\t// Expect STREAM-START.\n\tyaml_EMIT_STREAM_START_STATE yaml_emitter_state_t = iota\n\n\tyaml_EMIT_FIRST_DOCUMENT_START_STATE       // Expect the first DOCUMENT-START or STREAM-END.\n\tyaml_EMIT_DOCUMENT_START_STATE             // Expect DOCUMENT-START or STREAM-END.\n\tyaml_EMIT_DOCUMENT_CONTENT_STATE           // Expect the content of a document.\n\tyaml_EMIT_DOCUMENT_END_STATE               // Expect DOCUMENT-END.\n\tyaml_EMIT_FLOW_SEQUENCE_FIRST_ITEM_STATE   // Expect the first item of a flow sequence.\n\tyaml_EMIT_FLOW_SEQUENCE_TRAIL_ITEM_STATE   // Expect the next item of a flow sequence, with the comma already written out\n\tyaml_EMIT_FLOW_SEQUENCE_ITEM_STATE         // Expect an item of a flow sequence.\n\tyaml_EMIT_FLOW_MAPPING_FIRST_KEY_STATE     // Expect the first key of a flow mapping.\n\tyaml_EMIT_FLOW_MAPPING_TRAIL_KEY_STATE     // Expect the next key of a flow mapping, with the comma already written out\n\tyaml_EMIT_FLOW_MAPPING_KEY_STATE           // Expect a key of a flow mapping.\n\tyaml_EMIT_FLOW_MAPPING_SIMPLE_VALUE_STATE  // Expect a value for a simple key of a flow mapping.\n\tyaml_EMIT_FLOW_MAPPING_VALUE_STATE         // Expect a value of a flow mapping.\n\tyaml_EMIT_BLOCK_SEQUENCE_FIRST_ITEM_STATE  // Expect the first item of a block sequence.\n\tyaml_EMIT_BLOCK_SEQUENCE_ITEM_STATE        // Expect an item of a block sequence.\n\tyaml_EMIT_BLOCK_MAPPING_FIRST_KEY_STATE    // Expect the first key of a block mapping.\n\tyaml_EMIT_BLOCK_MAPPING_KEY_STATE          // Expect the key of a block mapping.\n\tyaml_EMIT_BLOCK_MAPPING_SIMPLE_VALUE_STATE // Expect a value for a simple key of a block mapping.\n\tyaml_EMIT_BLOCK_MAPPING_VALUE_STATE        // Expect a value of a block mapping.\n\tyaml_EMIT_END_STATE                        // Expect nothing.\n)\n\n// The emitter structure.\n//\n// All members are internal.  Manage the structure using the @c yaml_emitter_\n// family of functions.\ntype yaml_emitter_t struct {\n\n\t// Error handling\n\n\terror   yaml_error_type_t // Error type.\n\tproblem string            // Error description.\n\n\t// Writer stuff\n\n\twrite_handler yaml_write_handler_t // Write handler.\n\n\toutput_buffer *[]byte   // String output data.\n\toutput_writer io.Writer // File output data.\n\n\tbuffer     []byte // The working buffer.\n\tbuffer_pos int    // The current position of the buffer.\n\n\traw_buffer     []byte // The raw buffer.\n\traw_buffer_pos int    // The current position of the buffer.\n\n\tencoding yaml_encoding_t // The stream encoding.\n\n\t// Emitter stuff\n\n\tcanonical   bool         // If the output is in the canonical style?\n\tbest_indent int          // The number of indentation spaces.\n\tbest_width  int          // The preferred width of the output lines.\n\tunicode     bool         // Allow unescaped non-ASCII characters?\n\tline_break  yaml_break_t // The preferred line break.\n\n\tstate  yaml_emitter_state_t   // The current emitter state.\n\tstates []yaml_emitter_state_t // The stack of states.\n\n\tevents      []yaml_event_t // The event queue.\n\tevents_head int            // The head of the event queue.\n\n\tindents []int // The stack of indentation levels.\n\n\ttag_directives []yaml_tag_directive_t // The list of tag directives.\n\n\tindent int // The current indentation level.\n\n\tcompact_sequence_indent bool // Is '- ' is considered part of the indentation for sequence elements?\n\n\tflow_level int // The current flow level.\n\n\troot_context       bool // Is it the document root context?\n\tsequence_context   bool // Is it a sequence context?\n\tmapping_context    bool // Is it a mapping context?\n\tsimple_key_context bool // Is it a simple mapping key context?\n\n\tline       int  // The current line.\n\tcolumn     int  // The current column.\n\twhitespace bool // If the last character was a whitespace?\n\tindention  bool // If the last character was an indentation character (' ', '-', '?', ':')?\n\topen_ended bool // If an explicit document end is required?\n\n\tspace_above bool // Is there's an empty line above?\n\tfoot_indent int  // The indent used to write the foot comment above, or -1 if none.\n\n\t// Anchor analysis.\n\tanchor_data struct {\n\t\tanchor []byte // The anchor value.\n\t\talias  bool   // Is it an alias?\n\t}\n\n\t// Tag analysis.\n\ttag_data struct {\n\t\thandle []byte // The tag handle.\n\t\tsuffix []byte // The tag suffix.\n\t}\n\n\t// Scalar analysis.\n\tscalar_data struct {\n\t\tvalue                 []byte              // The scalar value.\n\t\tmultiline             bool                // Does the scalar contain line breaks?\n\t\tflow_plain_allowed    bool                // Can the scalar be expessed in the flow plain style?\n\t\tblock_plain_allowed   bool                // Can the scalar be expressed in the block plain style?\n\t\tsingle_quoted_allowed bool                // Can the scalar be expressed in the single quoted style?\n\t\tblock_allowed         bool                // Can the scalar be expressed in the literal or folded styles?\n\t\tstyle                 yaml_scalar_style_t // The output style.\n\t}\n\n\t// Comments\n\thead_comment []byte\n\tline_comment []byte\n\tfoot_comment []byte\n\ttail_comment []byte\n\n\tkey_line_comment []byte\n\n\t// Dumper stuff\n\n\topened bool // If the stream was already opened?\n\tclosed bool // If the stream was already closed?\n\n\t// The information associated with the document nodes.\n\tanchors *struct {\n\t\treferences int  // The number of references.\n\t\tanchor     int  // The anchor id.\n\t\tserialized bool // If the node has been emitted?\n\t}\n\n\tlast_anchor_id int // The last assigned anchor id.\n\n\tdocument *yaml_document_t // The currently emitted document.\n}\n"
  },
  {
    "path": "vendor/go.yaml.in/yaml/v3/yamlprivateh.go",
    "content": "//\n// Copyright (c) 2011-2019 Canonical Ltd\n// Copyright (c) 2006-2010 Kirill Simonov\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n// of the Software, and to permit persons to whom the Software is furnished to do\n// so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\npackage yaml\n\nconst (\n\t// The size of the input raw buffer.\n\tinput_raw_buffer_size = 512\n\n\t// The size of the input buffer.\n\t// It should be possible to decode the whole raw buffer.\n\tinput_buffer_size = input_raw_buffer_size * 3\n\n\t// The size of the output buffer.\n\toutput_buffer_size = 128\n\n\t// The size of the output raw buffer.\n\t// It should be possible to encode the whole output buffer.\n\toutput_raw_buffer_size = (output_buffer_size*2 + 2)\n\n\t// The size of other stacks and queues.\n\tinitial_stack_size  = 16\n\tinitial_queue_size  = 16\n\tinitial_string_size = 16\n)\n\n// Check if the character at the specified position is an alphabetical\n// character, a digit, '_', or '-'.\nfunc is_alpha(b []byte, i int) bool {\n\treturn b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'Z' || b[i] >= 'a' && b[i] <= 'z' || b[i] == '_' || b[i] == '-'\n}\n\n// Check if the character at the specified position is a digit.\nfunc is_digit(b []byte, i int) bool {\n\treturn b[i] >= '0' && b[i] <= '9'\n}\n\n// Get the value of a digit.\nfunc as_digit(b []byte, i int) int {\n\treturn int(b[i]) - '0'\n}\n\n// Check if the character at the specified position is a hex-digit.\nfunc is_hex(b []byte, i int) bool {\n\treturn b[i] >= '0' && b[i] <= '9' || b[i] >= 'A' && b[i] <= 'F' || b[i] >= 'a' && b[i] <= 'f'\n}\n\n// Get the value of a hex-digit.\nfunc as_hex(b []byte, i int) int {\n\tbi := b[i]\n\tif bi >= 'A' && bi <= 'F' {\n\t\treturn int(bi) - 'A' + 10\n\t}\n\tif bi >= 'a' && bi <= 'f' {\n\t\treturn int(bi) - 'a' + 10\n\t}\n\treturn int(bi) - '0'\n}\n\n// Check if the character is ASCII.\nfunc is_ascii(b []byte, i int) bool {\n\treturn b[i] <= 0x7F\n}\n\n// Check if the character at the start of the buffer can be printed unescaped.\nfunc is_printable(b []byte, i int) bool {\n\treturn ((b[i] == 0x0A) || // . == #x0A\n\t\t(b[i] >= 0x20 && b[i] <= 0x7E) || // #x20 <= . <= #x7E\n\t\t(b[i] == 0xC2 && b[i+1] >= 0xA0) || // #0xA0 <= . <= #xD7FF\n\t\t(b[i] > 0xC2 && b[i] < 0xED) ||\n\t\t(b[i] == 0xED && b[i+1] < 0xA0) ||\n\t\t(b[i] == 0xEE) ||\n\t\t(b[i] == 0xEF && // #xE000 <= . <= #xFFFD\n\t\t\t!(b[i+1] == 0xBB && b[i+2] == 0xBF) && // && . != #xFEFF\n\t\t\t!(b[i+1] == 0xBF && (b[i+2] == 0xBE || b[i+2] == 0xBF))))\n}\n\n// Check if the character at the specified position is NUL.\nfunc is_z(b []byte, i int) bool {\n\treturn b[i] == 0x00\n}\n\n// Check if the beginning of the buffer is a BOM.\nfunc is_bom(b []byte, i int) bool {\n\treturn b[0] == 0xEF && b[1] == 0xBB && b[2] == 0xBF\n}\n\n// Check if the character at the specified position is space.\nfunc is_space(b []byte, i int) bool {\n\treturn b[i] == ' '\n}\n\n// Check if the character at the specified position is tab.\nfunc is_tab(b []byte, i int) bool {\n\treturn b[i] == '\\t'\n}\n\n// Check if the character at the specified position is blank (space or tab).\nfunc is_blank(b []byte, i int) bool {\n\t//return is_space(b, i) || is_tab(b, i)\n\treturn b[i] == ' ' || b[i] == '\\t'\n}\n\n// Check if the character at the specified position is a line break.\nfunc is_break(b []byte, i int) bool {\n\treturn (b[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9) // PS (#x2029)\n}\n\nfunc is_crlf(b []byte, i int) bool {\n\treturn b[i] == '\\r' && b[i+1] == '\\n'\n}\n\n// Check if the character is a line break or NUL.\nfunc is_breakz(b []byte, i int) bool {\n\t//return is_break(b, i) || is_z(b, i)\n\treturn (\n\t// is_break:\n\tb[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)\n\t\t// is_z:\n\t\tb[i] == 0)\n}\n\n// Check if the character is a line break, space, or NUL.\nfunc is_spacez(b []byte, i int) bool {\n\t//return is_space(b, i) || is_breakz(b, i)\n\treturn (\n\t// is_space:\n\tb[i] == ' ' ||\n\t\t// is_breakz:\n\t\tb[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)\n\t\tb[i] == 0)\n}\n\n// Check if the character is a line break, space, tab, or NUL.\nfunc is_blankz(b []byte, i int) bool {\n\t//return is_blank(b, i) || is_breakz(b, i)\n\treturn (\n\t// is_blank:\n\tb[i] == ' ' || b[i] == '\\t' ||\n\t\t// is_breakz:\n\t\tb[i] == '\\r' || // CR (#xD)\n\t\tb[i] == '\\n' || // LF (#xA)\n\t\tb[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)\n\t\tb[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA9 || // PS (#x2029)\n\t\tb[i] == 0)\n}\n\n// Determine the width of the character.\nfunc width(b byte) int {\n\t// Don't replace these by a switch without first\n\t// confirming that it is being inlined.\n\tif b&0x80 == 0x00 {\n\t\treturn 1\n\t}\n\tif b&0xE0 == 0xC0 {\n\t\treturn 2\n\t}\n\tif b&0xF0 == 0xE0 {\n\t\treturn 3\n\t}\n\tif b&0xF8 == 0xF0 {\n\t\treturn 4\n\t}\n\treturn 0\n\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/LICENSE",
    "content": "Copyright 2015 The Go Authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google LLC nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/arch/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/arch/arm64/arm64asm/arg.go",
    "content": "// Generated by ARM internal tool\n// DO NOT EDIT\n\n// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage arm64asm\n\n// Naming for Go decoder arguments:\n//\n// - arg_Wd: a W register encoded in the Rd[4:0] field (31 is wzr)\n//\n// - arg_Xd: a X register encoded in the Rd[4:0] field (31 is xzr)\n//\n// - arg_Wds: a W register encoded in the Rd[4:0] field (31 is wsp)\n//\n// - arg_Xds: a X register encoded in the Rd[4:0] field (31 is sp)\n//\n// - arg_Wn: encoded in Rn[9:5]\n//\n// - arg_Wm: encoded in Rm[20:16]\n//\n// - arg_Wm_extend__UXTB_0__UXTH_1__LSL_UXTW_2__UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4:\n//     a W register encoded in Rm with an extend encoded in option[15:13] and an amount\n//     encoded in imm3[12:10] in the range [0,4].\n//\n// - arg_Rm_extend__UXTB_0__UXTH_1__UXTW_2__LSL_UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4:\n//     a W or X register encoded in Rm with an extend encoded in option[15:13] and an\n//     amount encoded in imm3[12:10] in the range [0,4]. If the extend is UXTX or SXTX,\n//     it's an X register else, it's a W register.\n//\n// - arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31:\n//     a W register encoded in Rm with a shift encoded in shift[23:22] and an amount\n//     encoded in imm6[15:10] in the range [0,31].\n//\n// - arg_IAddSub:\n//     An immediate for a add/sub instruction encoded in imm12[21:10] with an optional\n//     left shift of 12 encoded in shift[23:22].\n//\n// - arg_Rt_31_1__W_0__X_1:\n//     a W or X register encoded in Rt[4:0]. The width specifier is encoded in the field\n//     [31:31] (offset 31, bit count 1) and the register is W for 0 and X for 1.\n//\n// - arg_[s|u]label_FIELDS_POWER:\n//     a program label encoded as \"FIELDS\" times 2^POWER in the range [MIN, MAX] (determined\n//     by signd/unsigned, FIELDS and POWER), e.g.\n//       arg_slabel_imm14_2\n//       arg_slabel_imm19_2\n//       arg_slabel_imm26_2\n//       arg_slabel_immhi_immlo_0\n//       arg_slabel_immhi_immlo_12\n//\n// - arg_Xns_mem_post_imm7_8_signed:\n//     addressing mode of post-index with a base register: Xns and a signed offset encoded\n//     in the \"imm7\" field times 8\n//\n// - arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__3_1:\n//     addressing mode of extended register with a base register: Xns, an offset register\n//     (<Wm>|<Xm>) with an extend encoded in option[15:13] and a shift amount encoded in\n//     S[12:12] in the range [0,3] (S=0:0, S=1:3).\n//\n// - arg_Xns_mem_optional_imm12_4_unsigned:\n//     addressing mode of unsigned offset with a base register: Xns and an optional unsigned\n//     offset encoded in the \"imm12\" field times 4\n//\n// - arg_Xns_mem_wb_imm7_4_signed:\n//     addressing mode of pre-index with a base register: Xns and the signed offset encoded\n//     in the \"imm7\" field times 4\n//\n// - arg_Xns_mem_post_size_1_8_unsigned__4_0__8_1__16_2__32_3:\n//     a post-index immediate offset, encoded in the \"size\" field. It can have the following values:\n//       #4 when size = 00\n//       #8 when size = 01\n//       #16 when size = 10\n//       #32 when size = 11\n//\n// - arg_immediate_0_127_CRm_op2:\n//     an immediate encoded in \"CRm:op2\" in the range 0 to 127\n//\n// - arg_immediate_bitmask_64_N_imms_immr:\n//     a bitmask immediate for 64-bit variant and encoded in \"N:imms:immr\"\n//\n// - arg_immediate_SBFX_SBFM_64M_bitfield_width_64_imms:\n//     an immediate for the <width> bitfield of SBFX 64-bit variant\n//\n// - arg_immediate_shift_32_implicit_inverse_imm16_hw:\n//     a 32-bit immediate of the bitwise inverse of which can be encoded in \"imm16:hw\"\n//\n// - arg_cond_[Not]AllowALNV_[Invert|Normal]:\n//     a standard condition, encoded in the \"cond\" field, excluding (NotAllow) AL and NV with\n//     its least significant bit [Yes|No] inverted, e.g.\n//       arg_cond_AllowALNV_Normal\n//       arg_cond_NotAllowALNV_Invert\n//\n// - arg_immediate_OptLSL_amount_16_0_48:\n//     An immediate for MOV[KNZ] instruction encoded in imm16[20:5] with an optional\n//     left shift of 16 in the range [0, 48] encoded in hw[22, 21]\n//\n// - arg_immediate_0_width_m1_immh_immb__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8:\n//     the left shift amount, in the range 0 to the operand width in bits minus 1,\n//     encoded in the \"immh:immb\" field. It can have the following values:\n//       (UInt(immh:immb)-8) when immh = 0001\n//       (UInt(immh:immb)-16) when immh = 001x\n//       (UInt(immh:immb)-32) when immh = 01xx\n//       (UInt(immh:immb)-64) when immh = 1xxx\n//\n// - arg_immediate_1_width_immh_immb__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4:\n//     the right shift amount, in the range 1 to the destination operand width in\n//     bits, encoded in the \"immh:immb\" field. It can have the following values:\n//       (16-UInt(immh:immb)) when immh = 0001\n//       (32-UInt(immh:immb)) when immh = 001x\n//       (64-UInt(immh:immb)) when immh = 01xx\n//\n// - arg_immediate_8x8_a_b_c_d_e_f_g_h:\n//     a 64-bit immediate 'aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffffgggggggghhhhhhhh',\n//     encoded in \"a:b:c:d:e:f:g:h\".\n//\n// - arg_immediate_fbits_min_1_max_32_sub_64_scale:\n//     the number of bits after the binary point in the fixed-point destination,\n//     in the range 1 to 32, encoded as 64 minus \"scale\".\n//\n// - arg_immediate_floatzero: #0.0\n//\n// - arg_immediate_exp_3_pre_4_a_b_c_d_e_f_g_h:\n//     a signed floating-point constant with 3-bit exponent and normalized 4 bits of precision,\n//     encoded in \"a:b:c:d:e:f:g:h\"\n//\n// - arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__64UIntimmhimmb_4__128UIntimmhimmb_8:\n//     the number of fractional bits, in the range 1 to the operand width, encoded\n//     in the \"immh:immb\" field. It can have the following values:\n//       (64-UInt(immh:immb)) when immh = 01xx\n//       (128-UInt(immh:immb)) when immh = 1xxx\n//\n// - arg_immediate_index_Q_imm4__imm4lt20gt_00__imm4_10:\n//     the lowest numbered byte element to be extracted, encoded in the \"Q:imm4\" field.\n//     It can have the following values:\n//       imm4<2:0> when Q = 0, imm4<3> = 0\n//       imm4 when Q = 1, imm4<3> = x\n//\n// - arg_sysop_AT_SYS_CR_system:\n//     system operation for system instruction: AT encoded in the \"op1:CRm<0>:op2\" field\n//\n// - arg_prfop_Rt:\n//     prefectch operation encoded in the \"Rt\"\n//\n// - arg_sysreg_o0_op1_CRn_CRm_op2:\n//     system register name encoded in the \"o0:op1:CRn:CRm:op2\"\n//\n// - arg_pstatefield_op1_op2__SPSel_05__DAIFSet_36__DAIFClr_37:\n//     PSTATE field name encoded in the \"op1:op2\" field\n//\n// - arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31:\n//     one register with arrangement specifier encoded in the \"size:Q\" field which can have the following values:\n//       8B when size = 00, Q = 0\n//       16B when size = 00, Q = 1\n//       4H when size = 01, Q = 0\n//       8H when size = 01, Q = 1\n//       2S when size = 10, Q = 0\n//       4S when size = 10, Q = 1\n//       2D when size = 11, Q = 1\n//       The encoding size = 11, Q = 0 is reserved.\n//\n// - arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31:\n//     three registers with arrangement specifier encoded in the \"size:Q\" field which can have the following values:\n//       8B when size = 00, Q = 0\n//       16B when size = 00, Q = 1\n//       4H when size = 01, Q = 0\n//       8H when size = 01, Q = 1\n//       2S when size = 10, Q = 0\n//       4S when size = 10, Q = 1\n//       2D when size = 11, Q = 1\n//       The encoding size = 11, Q = 0 is reserved.\n//\n// - arg_Vt_1_arrangement_H_index__Q_S_size_1:\n//     one register with arrangement:H and element index encoded in \"Q:S:size<1>\".\n\ntype instArg uint16\n\nconst (\n\t_ instArg = iota\n\targ_Bt\n\targ_Cm\n\targ_Cn\n\targ_cond_AllowALNV_Normal\n\targ_conditional\n\targ_cond_NotAllowALNV_Invert\n\targ_Da\n\targ_Dd\n\targ_Dm\n\targ_Dn\n\targ_Dt\n\targ_Dt2\n\targ_Hd\n\targ_Hn\n\targ_Ht\n\targ_IAddSub\n\targ_immediate_0_127_CRm_op2\n\targ_immediate_0_15_CRm\n\targ_immediate_0_15_nzcv\n\targ_immediate_0_31_imm5\n\targ_immediate_0_31_immr\n\targ_immediate_0_31_imms\n\targ_immediate_0_63_b5_b40\n\targ_immediate_0_63_immh_immb__UIntimmhimmb64_8\n\targ_immediate_0_63_immr\n\targ_immediate_0_63_imms\n\targ_immediate_0_65535_imm16\n\targ_immediate_0_7_op1\n\targ_immediate_0_7_op2\n\targ_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4\n\targ_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8\n\targ_immediate_0_width_m1_immh_immb__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8\n\targ_immediate_0_width_size__8_0__16_1__32_2\n\targ_immediate_1_64_immh_immb__128UIntimmhimmb_8\n\targ_immediate_1_width_immh_immb__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4\n\targ_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4\n\targ_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8\n\targ_immediate_8x8_a_b_c_d_e_f_g_h\n\targ_immediate_ASR_SBFM_32M_bitfield_0_31_immr\n\targ_immediate_ASR_SBFM_64M_bitfield_0_63_immr\n\targ_immediate_BFI_BFM_32M_bitfield_lsb_32_immr\n\targ_immediate_BFI_BFM_32M_bitfield_width_32_imms\n\targ_immediate_BFI_BFM_64M_bitfield_lsb_64_immr\n\targ_immediate_BFI_BFM_64M_bitfield_width_64_imms\n\targ_immediate_BFXIL_BFM_32M_bitfield_lsb_32_immr\n\targ_immediate_BFXIL_BFM_32M_bitfield_width_32_imms\n\targ_immediate_BFXIL_BFM_64M_bitfield_lsb_64_immr\n\targ_immediate_BFXIL_BFM_64M_bitfield_width_64_imms\n\targ_immediate_bitmask_32_imms_immr\n\targ_immediate_bitmask_64_N_imms_immr\n\targ_immediate_exp_3_pre_4_a_b_c_d_e_f_g_h\n\targ_immediate_exp_3_pre_4_imm8\n\targ_immediate_fbits_min_1_max_0_sub_0_immh_immb__64UIntimmhimmb_4__128UIntimmhimmb_8\n\targ_immediate_fbits_min_1_max_0_sub_0_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__64UIntimmhimmb_4__128UIntimmhimmb_8\n\targ_immediate_fbits_min_1_max_32_sub_64_scale\n\targ_immediate_fbits_min_1_max_64_sub_64_scale\n\targ_immediate_floatzero\n\targ_immediate_index_Q_imm4__imm4lt20gt_00__imm4_10\n\targ_immediate_LSL_UBFM_32M_bitfield_0_31_immr\n\targ_immediate_LSL_UBFM_64M_bitfield_0_63_immr\n\targ_immediate_LSR_UBFM_32M_bitfield_0_31_immr\n\targ_immediate_LSR_UBFM_64M_bitfield_0_63_immr\n\targ_immediate_MSL__a_b_c_d_e_f_g_h_cmode__8_0__16_1\n\targ_immediate_optional_0_15_CRm\n\targ_immediate_optional_0_65535_imm16\n\targ_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1\n\targ_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1__16_2__24_3\n\targ_immediate_OptLSL_amount_16_0_16\n\targ_immediate_OptLSL_amount_16_0_48\n\targ_immediate_OptLSLZero__a_b_c_d_e_f_g_h\n\targ_immediate_SBFIZ_SBFM_32M_bitfield_lsb_32_immr\n\targ_immediate_SBFIZ_SBFM_32M_bitfield_width_32_imms\n\targ_immediate_SBFIZ_SBFM_64M_bitfield_lsb_64_immr\n\targ_immediate_SBFIZ_SBFM_64M_bitfield_width_64_imms\n\targ_immediate_SBFX_SBFM_32M_bitfield_lsb_32_immr\n\targ_immediate_SBFX_SBFM_32M_bitfield_width_32_imms\n\targ_immediate_SBFX_SBFM_64M_bitfield_lsb_64_immr\n\targ_immediate_SBFX_SBFM_64M_bitfield_width_64_imms\n\targ_immediate_shift_32_implicit_imm16_hw\n\targ_immediate_shift_32_implicit_inverse_imm16_hw\n\targ_immediate_shift_64_implicit_imm16_hw\n\targ_immediate_shift_64_implicit_inverse_imm16_hw\n\targ_immediate_UBFIZ_UBFM_32M_bitfield_lsb_32_immr\n\targ_immediate_UBFIZ_UBFM_32M_bitfield_width_32_imms\n\targ_immediate_UBFIZ_UBFM_64M_bitfield_lsb_64_immr\n\targ_immediate_UBFIZ_UBFM_64M_bitfield_width_64_imms\n\targ_immediate_UBFX_UBFM_32M_bitfield_lsb_32_immr\n\targ_immediate_UBFX_UBFM_32M_bitfield_width_32_imms\n\targ_immediate_UBFX_UBFM_64M_bitfield_lsb_64_immr\n\targ_immediate_UBFX_UBFM_64M_bitfield_width_64_imms\n\targ_immediate_zero\n\targ_option_DMB_BO_system_CRm\n\targ_option_DSB_BO_system_CRm\n\targ_option_ISB_BI_system_CRm\n\targ_prfop_Rt\n\targ_pstatefield_op1_op2__SPSel_05__DAIFSet_36__DAIFClr_37\n\targ_Qd\n\targ_Qn\n\targ_Qt\n\targ_Qt2\n\targ_Rm_extend__UXTB_0__UXTH_1__UXTW_2__LSL_UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4\n\targ_Rn_16_5__W_1__W_2__W_4__X_8\n\targ_Rt_31_1__W_0__X_1\n\targ_Sa\n\targ_Sd\n\targ_slabel_imm14_2\n\targ_slabel_imm19_2\n\targ_slabel_imm26_2\n\targ_slabel_immhi_immlo_0\n\targ_slabel_immhi_immlo_12\n\targ_Sm\n\targ_Sn\n\targ_St\n\targ_St2\n\targ_sysop_AT_SYS_CR_system\n\targ_sysop_DC_SYS_CR_system\n\targ_sysop_IC_SYS_CR_system\n\targ_sysop_SYS_CR_system\n\targ_sysop_TLBI_SYS_CR_system\n\targ_sysreg_o0_op1_CRn_CRm_op2\n\targ_Vd_16_5__B_1__H_2__S_4__D_8\n\targ_Vd_19_4__B_1__H_2__S_4\n\targ_Vd_19_4__B_1__H_2__S_4__D_8\n\targ_Vd_19_4__D_8\n\targ_Vd_19_4__S_4__D_8\n\targ_Vd_22_1__S_0\n\targ_Vd_22_1__S_0__D_1\n\targ_Vd_22_1__S_1\n\targ_Vd_22_2__B_0__H_1__S_2\n\targ_Vd_22_2__B_0__H_1__S_2__D_3\n\targ_Vd_22_2__D_3\n\targ_Vd_22_2__H_0__S_1__D_2\n\targ_Vd_22_2__H_1__S_2\n\targ_Vd_22_2__S_1__D_2\n\targ_Vd_arrangement_16B\n\targ_Vd_arrangement_2D\n\targ_Vd_arrangement_4S\n\targ_Vd_arrangement_D_index__1\n\targ_Vd_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1\n\targ_Vd_arrangement_imm5_Q___8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81\n\targ_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81\n\targ_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41\n\targ_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81\n\targ_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4\n\targ_Vd_arrangement_Q___2S_0__4S_1\n\targ_Vd_arrangement_Q___4H_0__8H_1\n\targ_Vd_arrangement_Q___8B_0__16B_1\n\targ_Vd_arrangement_Q_sz___2S_00__4S_10__2D_11\n\targ_Vd_arrangement_size___4S_1__2D_2\n\targ_Vd_arrangement_size___8H_0__1Q_3\n\targ_Vd_arrangement_size___8H_0__4S_1__2D_2\n\targ_Vd_arrangement_size_Q___4H_00__8H_01__2S_10__4S_11__1D_20__2D_21\n\targ_Vd_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21\n\targ_Vd_arrangement_size_Q___8B_00__16B_01\n\targ_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11\n\targ_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21\n\targ_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31\n\targ_Vd_arrangement_sz___4S_0__2D_1\n\targ_Vd_arrangement_sz_Q___2S_00__4S_01\n\targ_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11\n\targ_Vd_arrangement_sz_Q___2S_10__4S_11\n\targ_Vd_arrangement_sz_Q___4H_00__8H_01__2S_10__4S_11\n\targ_Vm_22_1__S_0__D_1\n\targ_Vm_22_2__B_0__H_1__S_2__D_3\n\targ_Vm_22_2__D_3\n\targ_Vm_22_2__H_1__S_2\n\targ_Vm_arrangement_4S\n\targ_Vm_arrangement_Q___8B_0__16B_1\n\targ_Vm_arrangement_size___8H_0__4S_1__2D_2\n\targ_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1\n\targ_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21\n\targ_Vm_arrangement_size_Q___8B_00__16B_01\n\targ_Vm_arrangement_size_Q___8B_00__16B_01__1D_30__2D_31\n\targ_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21\n\targ_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31\n\targ_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11\n\targ_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1\n\targ_Vn_19_4__B_1__H_2__S_4__D_8\n\targ_Vn_19_4__D_8\n\targ_Vn_19_4__H_1__S_2__D_4\n\targ_Vn_19_4__S_4__D_8\n\targ_Vn_1_arrangement_16B\n\targ_Vn_22_1__D_1\n\targ_Vn_22_1__S_0__D_1\n\targ_Vn_22_2__B_0__H_1__S_2__D_3\n\targ_Vn_22_2__D_3\n\targ_Vn_22_2__H_0__S_1__D_2\n\targ_Vn_22_2__H_1__S_2\n\targ_Vn_2_arrangement_16B\n\targ_Vn_3_arrangement_16B\n\targ_Vn_4_arrangement_16B\n\targ_Vn_arrangement_16B\n\targ_Vn_arrangement_4S\n\targ_Vn_arrangement_D_index__1\n\targ_Vn_arrangement_D_index__imm5_1\n\targ_Vn_arrangement_imm5___B_1__H_2_index__imm5__imm5lt41gt_1__imm5lt42gt_2_1\n\targ_Vn_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5_imm4__imm4lt30gt_1__imm4lt31gt_2__imm4lt32gt_4__imm4lt3gt_8_1\n\targ_Vn_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1\n\targ_Vn_arrangement_imm5___B_1__H_2__S_4_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4_1\n\targ_Vn_arrangement_imm5___D_8_index__imm5_1\n\targ_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81\n\targ_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41\n\targ_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81\n\targ_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4\n\targ_Vn_arrangement_Q___8B_0__16B_1\n\targ_Vn_arrangement_Q_sz___2S_00__4S_10__2D_11\n\targ_Vn_arrangement_Q_sz___4S_10\n\targ_Vn_arrangement_S_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4_1\n\targ_Vn_arrangement_size___2D_3\n\targ_Vn_arrangement_size___8H_0__4S_1__2D_2\n\targ_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21\n\targ_Vn_arrangement_size_Q___8B_00__16B_01\n\targ_Vn_arrangement_size_Q___8B_00__16B_01__1D_30__2D_31\n\targ_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11\n\targ_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21\n\targ_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31\n\targ_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__4S_21\n\targ_Vn_arrangement_sz___2D_1\n\targ_Vn_arrangement_sz___2S_0__2D_1\n\targ_Vn_arrangement_sz___4S_0__2D_1\n\targ_Vn_arrangement_sz_Q___2S_00__4S_01\n\targ_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11\n\targ_Vn_arrangement_sz_Q___4H_00__8H_01__2S_10__4S_11\n\targ_Vt_1_arrangement_B_index__Q_S_size_1\n\targ_Vt_1_arrangement_D_index__Q_1\n\targ_Vt_1_arrangement_H_index__Q_S_size_1\n\targ_Vt_1_arrangement_S_index__Q_S_1\n\targ_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31\n\targ_Vt_2_arrangement_B_index__Q_S_size_1\n\targ_Vt_2_arrangement_D_index__Q_1\n\targ_Vt_2_arrangement_H_index__Q_S_size_1\n\targ_Vt_2_arrangement_S_index__Q_S_1\n\targ_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31\n\targ_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31\n\targ_Vt_3_arrangement_B_index__Q_S_size_1\n\targ_Vt_3_arrangement_D_index__Q_1\n\targ_Vt_3_arrangement_H_index__Q_S_size_1\n\targ_Vt_3_arrangement_S_index__Q_S_1\n\targ_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31\n\targ_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31\n\targ_Vt_4_arrangement_B_index__Q_S_size_1\n\targ_Vt_4_arrangement_D_index__Q_1\n\targ_Vt_4_arrangement_H_index__Q_S_size_1\n\targ_Vt_4_arrangement_S_index__Q_S_1\n\targ_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31\n\targ_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31\n\targ_Wa\n\targ_Wd\n\targ_Wds\n\targ_Wm\n\targ_Wm_extend__UXTB_0__UXTH_1__LSL_UXTW_2__UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4\n\targ_Wm_shift__LSL_0__LSR_1__ASR_2__0_31\n\targ_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31\n\targ_Wn\n\targ_Wns\n\targ_Ws\n\targ_Wt\n\targ_Wt2\n\targ_Xa\n\targ_Xd\n\targ_Xds\n\targ_Xm\n\targ_Xm_shift__LSL_0__LSR_1__ASR_2__0_63\n\targ_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63\n\targ_Xn\n\targ_Xns\n\targ_Xns_mem\n\targ_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__1_1\n\targ_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__2_1\n\targ_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__3_1\n\targ_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__4_1\n\targ_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__absent_0__0_1\n\targ_Xns_mem_offset\n\targ_Xns_mem_optional_imm12_16_unsigned\n\targ_Xns_mem_optional_imm12_1_unsigned\n\targ_Xns_mem_optional_imm12_2_unsigned\n\targ_Xns_mem_optional_imm12_4_unsigned\n\targ_Xns_mem_optional_imm12_8_unsigned\n\targ_Xns_mem_optional_imm7_16_signed\n\targ_Xns_mem_optional_imm7_4_signed\n\targ_Xns_mem_optional_imm7_8_signed\n\targ_Xns_mem_optional_imm9_1_signed\n\targ_Xns_mem_post_fixedimm_1\n\targ_Xns_mem_post_fixedimm_12\n\targ_Xns_mem_post_fixedimm_16\n\targ_Xns_mem_post_fixedimm_2\n\targ_Xns_mem_post_fixedimm_24\n\targ_Xns_mem_post_fixedimm_3\n\targ_Xns_mem_post_fixedimm_32\n\targ_Xns_mem_post_fixedimm_4\n\targ_Xns_mem_post_fixedimm_6\n\targ_Xns_mem_post_fixedimm_8\n\targ_Xns_mem_post_imm7_16_signed\n\targ_Xns_mem_post_imm7_4_signed\n\targ_Xns_mem_post_imm7_8_signed\n\targ_Xns_mem_post_imm9_1_signed\n\targ_Xns_mem_post_Q__16_0__32_1\n\targ_Xns_mem_post_Q__24_0__48_1\n\targ_Xns_mem_post_Q__32_0__64_1\n\targ_Xns_mem_post_Q__8_0__16_1\n\targ_Xns_mem_post_size__1_0__2_1__4_2__8_3\n\targ_Xns_mem_post_size__2_0__4_1__8_2__16_3\n\targ_Xns_mem_post_size__3_0__6_1__12_2__24_3\n\targ_Xns_mem_post_size__4_0__8_1__16_2__32_3\n\targ_Xns_mem_post_Xm\n\targ_Xns_mem_wb_imm7_16_signed\n\targ_Xns_mem_wb_imm7_4_signed\n\targ_Xns_mem_wb_imm7_8_signed\n\targ_Xns_mem_wb_imm9_1_signed\n\targ_Xs\n\targ_Xt\n\targ_Xt2\n)\n"
  },
  {
    "path": "vendor/golang.org/x/arch/arm64/arm64asm/condition.go",
    "content": "// Generated by ARM internal tool\n// DO NOT EDIT\n\n// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage arm64asm\n\n// Following functions are used as the predicator: canDecode of according instruction\n// Refer to instFormat inside decode.go for more details\n\nfunc at_sys_cr_system_cond(instr uint32) bool {\n\treturn sys_op_4((instr>>16)&0x7, 0x7, 0x8, (instr>>5)&0x7) == sys_AT\n}\n\nfunc bfi_bfm_32m_bitfield_cond(instr uint32) bool {\n\treturn (instr>>5)&0x1f != 0x1f && uint8((instr>>10)&0x3f) < uint8((instr>>16)&0x3f)\n}\n\nfunc bfi_bfm_64m_bitfield_cond(instr uint32) bool {\n\treturn (instr>>5)&0x1f != 0x1f && uint8((instr>>10)&0x3f) < uint8((instr>>16)&0x3f)\n}\n\nfunc bfxil_bfm_32m_bitfield_cond(instr uint32) bool {\n\treturn uint8((instr>>10)&0x3f) >= uint8((instr>>16)&0x3f)\n}\n\nfunc bfxil_bfm_64m_bitfield_cond(instr uint32) bool {\n\treturn uint8((instr>>10)&0x3f) >= uint8((instr>>16)&0x3f)\n}\n\nfunc cinc_csinc_32_condsel_cond(instr uint32) bool {\n\treturn instr&0x1f0000 != 0x1f0000 && instr&0xe000 != 0xe000 && instr&0x3e0 != 0x3e0 && (instr>>5)&0x1f == (instr>>16)&0x1f\n}\n\nfunc cinc_csinc_64_condsel_cond(instr uint32) bool {\n\treturn instr&0x1f0000 != 0x1f0000 && instr&0xe000 != 0xe000 && instr&0x3e0 != 0x3e0 && (instr>>5)&0x1f == (instr>>16)&0x1f\n}\n\nfunc cinv_csinv_32_condsel_cond(instr uint32) bool {\n\treturn instr&0x1f0000 != 0x1f0000 && instr&0xe000 != 0xe000 && instr&0x3e0 != 0x3e0 && (instr>>5)&0x1f == (instr>>16)&0x1f\n}\n\nfunc cinv_csinv_64_condsel_cond(instr uint32) bool {\n\treturn instr&0x1f0000 != 0x1f0000 && instr&0xe000 != 0xe000 && instr&0x3e0 != 0x3e0 && (instr>>5)&0x1f == (instr>>16)&0x1f\n}\n\nfunc cneg_csneg_32_condsel_cond(instr uint32) bool {\n\treturn instr&0xe000 != 0xe000 && (instr>>5)&0x1f == (instr>>16)&0x1f\n}\n\nfunc cneg_csneg_64_condsel_cond(instr uint32) bool {\n\treturn instr&0xe000 != 0xe000 && (instr>>5)&0x1f == (instr>>16)&0x1f\n}\n\nfunc csinc_general_cond(instr uint32) bool {\n\treturn instr&0xe000 != 0xe000\n}\nfunc csinv_general_cond(instr uint32) bool {\n\treturn instr&0xe000 != 0xe000\n}\nfunc dc_sys_cr_system_cond(instr uint32) bool {\n\treturn sys_op_4((instr>>16)&0x7, 0x7, (instr>>8)&0xf, (instr>>5)&0x7) == sys_DC\n}\n\nfunc ic_sys_cr_system_cond(instr uint32) bool {\n\treturn sys_op_4((instr>>16)&0x7, 0x7, (instr>>8)&0xf, (instr>>5)&0x7) == sys_IC\n}\n\nfunc lsl_ubfm_32m_bitfield_cond(instr uint32) bool {\n\treturn instr&0xfc00 != 0x7c00 && (instr>>10)&0x3f+1 == (instr>>16)&0x3f\n}\n\nfunc lsl_ubfm_64m_bitfield_cond(instr uint32) bool {\n\treturn instr&0xfc00 != 0xfc00 && (instr>>10)&0x3f+1 == (instr>>16)&0x3f\n}\n\nfunc mov_orr_32_log_imm_cond(instr uint32) bool {\n\treturn !move_wide_preferred_4((instr>>31)&0x1, (instr>>22)&0x1, (instr>>10)&0x3f, (instr>>16)&0x3f)\n}\n\nfunc mov_orr_64_log_imm_cond(instr uint32) bool {\n\treturn !move_wide_preferred_4((instr>>31)&0x1, (instr>>22)&0x1, (instr>>10)&0x3f, (instr>>16)&0x3f)\n}\n\nfunc mov_movn_32_movewide_cond(instr uint32) bool {\n\treturn !(is_zero((instr>>5)&0xffff) && (instr>>21)&0x3 != 0x0) && !is_ones_n16((instr>>5)&0xffff)\n}\n\nfunc mov_movn_64_movewide_cond(instr uint32) bool {\n\treturn !(is_zero((instr>>5)&0xffff) && (instr>>21)&0x3 != 0x0)\n}\n\nfunc mov_add_32_addsub_imm_cond(instr uint32) bool {\n\treturn instr&0x1f == 0x1f || (instr>>5)&0x1f == 0x1f\n}\n\nfunc mov_add_64_addsub_imm_cond(instr uint32) bool {\n\treturn instr&0x1f == 0x1f || (instr>>5)&0x1f == 0x1f\n}\n\nfunc mov_movz_32_movewide_cond(instr uint32) bool {\n\treturn !(is_zero((instr>>5)&0xffff) && (instr>>21)&0x3 != 0x0)\n}\n\nfunc mov_movz_64_movewide_cond(instr uint32) bool {\n\treturn !(is_zero((instr>>5)&0xffff) && (instr>>21)&0x3 != 0x0)\n}\n\nfunc ror_extr_32_extract_cond(instr uint32) bool {\n\treturn (instr>>5)&0x1f == (instr>>16)&0x1f\n}\n\nfunc ror_extr_64_extract_cond(instr uint32) bool {\n\treturn (instr>>5)&0x1f == (instr>>16)&0x1f\n}\n\nfunc sbfiz_sbfm_32m_bitfield_cond(instr uint32) bool {\n\treturn uint8((instr>>10)&0x3f) < uint8((instr>>16)&0x3f)\n}\n\nfunc sbfiz_sbfm_64m_bitfield_cond(instr uint32) bool {\n\treturn uint8((instr>>10)&0x3f) < uint8((instr>>16)&0x3f)\n}\n\nfunc sbfx_sbfm_32m_bitfield_cond(instr uint32) bool {\n\treturn bfxpreferred_4((instr>>31)&0x1, extract_bit((instr>>29)&0x3, 1), (instr>>10)&0x3f, (instr>>16)&0x3f)\n}\n\nfunc sbfx_sbfm_64m_bitfield_cond(instr uint32) bool {\n\treturn bfxpreferred_4((instr>>31)&0x1, extract_bit((instr>>29)&0x3, 1), (instr>>10)&0x3f, (instr>>16)&0x3f)\n}\n\nfunc tlbi_sys_cr_system_cond(instr uint32) bool {\n\treturn sys_op_4((instr>>16)&0x7, 0x8, (instr>>8)&0xf, (instr>>5)&0x7) == sys_TLBI\n}\n\nfunc ubfiz_ubfm_32m_bitfield_cond(instr uint32) bool {\n\treturn uint8((instr>>10)&0x3f) < uint8((instr>>16)&0x3f)\n}\n\nfunc ubfiz_ubfm_64m_bitfield_cond(instr uint32) bool {\n\treturn uint8((instr>>10)&0x3f) < uint8((instr>>16)&0x3f)\n}\n\nfunc ubfx_ubfm_32m_bitfield_cond(instr uint32) bool {\n\treturn bfxpreferred_4((instr>>31)&0x1, extract_bit((instr>>29)&0x3, 1), (instr>>10)&0x3f, (instr>>16)&0x3f)\n}\n\nfunc ubfx_ubfm_64m_bitfield_cond(instr uint32) bool {\n\treturn bfxpreferred_4((instr>>31)&0x1, extract_bit((instr>>29)&0x3, 1), (instr>>10)&0x3f, (instr>>16)&0x3f)\n}\n\nfunc fcvtzs_asisdshf_c_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc fcvtzs_asimdshf_c_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc fcvtzu_asisdshf_c_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc fcvtzu_asimdshf_c_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc mov_umov_asimdins_w_w_cond(instr uint32) bool {\n\treturn ((instr>>16)&0x1f)&0x7 == 0x4\n}\n\nfunc mov_umov_asimdins_x_x_cond(instr uint32) bool {\n\treturn ((instr>>16)&0x1f)&0xf == 0x8\n}\n\nfunc mov_orr_asimdsame_only_cond(instr uint32) bool {\n\treturn (instr>>16)&0x1f == (instr>>5)&0x1f\n}\n\nfunc rshrn_asimdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc scvtf_asisdshf_c_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc scvtf_asimdshf_c_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc shl_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc shl_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc shrn_asimdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sli_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sli_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqrshrn_asisdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqrshrn_asimdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqrshrun_asisdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqrshrun_asimdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqshl_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqshl_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqshlu_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqshlu_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqshrn_asisdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqshrn_asimdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqshrun_asisdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sqshrun_asimdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sri_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sri_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc srshr_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc srshr_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc srsra_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc srsra_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sshll_asimdshf_l_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sshr_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sshr_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc ssra_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc ssra_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc sxtl_sshll_asimdshf_l_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0 && bit_count((instr>>19)&0xf) == 1\n}\n\nfunc ucvtf_asisdshf_c_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc ucvtf_asimdshf_c_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc uqrshrn_asisdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc uqrshrn_asimdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc uqshl_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc uqshl_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc uqshrn_asisdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc uqshrn_asimdshf_n_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc urshr_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc urshr_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc ursra_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc ursra_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc ushll_asimdshf_l_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc ushr_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc ushr_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc usra_asisdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc usra_asimdshf_r_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0\n}\nfunc uxtl_ushll_asimdshf_l_cond(instr uint32) bool {\n\treturn instr&0x780000 != 0x0 && bit_count((instr>>19)&0xf) == 1\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/arm64/arm64asm/condition_util.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage arm64asm\n\nfunc extract_bit(value, bit uint32) uint32 {\n\treturn (value >> bit) & 1\n}\n\nfunc bfxpreferred_4(sf, opc1, imms, immr uint32) bool {\n\tif imms < immr {\n\t\treturn false\n\t}\n\tif (imms>>5 == sf) && (imms&0x1f == 0x1f) {\n\t\treturn false\n\t}\n\tif immr == 0 {\n\t\tif sf == 0 && (imms == 7 || imms == 15) {\n\t\t\treturn false\n\t\t}\n\t\tif sf == 1 && opc1 == 0 && (imms == 7 ||\n\t\t\timms == 15 || imms == 31) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\nfunc move_wide_preferred_4(sf, N, imms, immr uint32) bool {\n\tif sf == 1 && N != 1 {\n\t\treturn false\n\t}\n\tif sf == 0 && !(N == 0 && ((imms>>5)&1) == 0) {\n\t\treturn false\n\t}\n\tif imms < 16 {\n\t\treturn (-immr)%16 <= (15 - imms)\n\t}\n\twidth := uint32(32)\n\tif sf == 1 {\n\t\twidth = uint32(64)\n\t}\n\tif imms >= (width - 15) {\n\t\treturn (immr % 16) <= (imms - (width - 15))\n\t}\n\treturn false\n}\n\ntype sys uint8\n\nconst (\n\tsys_AT sys = iota\n\tsys_DC\n\tsys_IC\n\tsys_TLBI\n\tsys_SYS\n)\n\nfunc sys_op_4(op1, crn, crm, op2 uint32) sys {\n\tsysInst := sysInstFields{uint8(op1), uint8(crn), uint8(crm), uint8(op2)}\n\treturn sysInst.getType()\n}\n\nfunc is_zero(x uint32) bool {\n\treturn x == 0\n}\n\nfunc is_ones_n16(x uint32) bool {\n\treturn x == 0xffff\n}\n\nfunc bit_count(x uint32) uint8 {\n\tvar count uint8\n\tfor count = 0; x > 0; x >>= 1 {\n\t\tif (x & 1) == 1 {\n\t\t\tcount++\n\t\t}\n\t}\n\treturn count\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/arm64/arm64asm/decode.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage arm64asm\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n)\n\ntype instArgs [5]instArg\n\n// An instFormat describes the format of an instruction encoding.\n// An instruction with 32-bit value x matches the format if x&mask == value\n// and the predicator: canDecode(x) return true.\ntype instFormat struct {\n\tmask  uint32\n\tvalue uint32\n\top    Op\n\t// args describe how to decode the instruction arguments.\n\t// args is stored as a fixed-size array.\n\t// if there are fewer than len(args) arguments, args[i] == 0 marks\n\t// the end of the argument list.\n\targs      instArgs\n\tcanDecode func(instr uint32) bool\n}\n\nvar (\n\terrShort   = fmt.Errorf(\"truncated instruction\")\n\terrUnknown = fmt.Errorf(\"unknown instruction\")\n)\n\nvar decoderCover []bool\n\nfunc init() {\n\tdecoderCover = make([]bool, len(instFormats))\n}\n\n// Decode decodes the 4 bytes in src as a single instruction.\nfunc Decode(src []byte) (inst Inst, err error) {\n\tif len(src) < 4 {\n\t\treturn Inst{}, errShort\n\t}\n\n\tx := binary.LittleEndian.Uint32(src)\n\nSearch:\n\tfor i := range instFormats {\n\t\tf := &instFormats[i]\n\t\tif x&f.mask != f.value {\n\t\t\tcontinue\n\t\t}\n\t\tif f.canDecode != nil && !f.canDecode(x) {\n\t\t\tcontinue\n\t\t}\n\t\t// Decode args.\n\t\tvar args Args\n\t\tfor j, aop := range f.args {\n\t\t\tif aop == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\targ := decodeArg(aop, x)\n\t\t\tif arg == nil { // Cannot decode argument\n\t\t\t\tcontinue Search\n\t\t\t}\n\t\t\targs[j] = arg\n\t\t}\n\t\tdecoderCover[i] = true\n\t\tinst = Inst{\n\t\t\tOp:   f.op,\n\t\t\tArgs: args,\n\t\t\tEnc:  x,\n\t\t}\n\t\treturn inst, nil\n\t}\n\treturn Inst{}, errUnknown\n}\n\n// decodeArg decodes the arg described by aop from the instruction bits x.\n// It returns nil if x cannot be decoded according to aop.\nfunc decodeArg(aop instArg, x uint32) Arg {\n\tswitch aop {\n\tdefault:\n\t\treturn nil\n\n\tcase arg_Da:\n\t\treturn D0 + Reg((x>>10)&(1<<5-1))\n\n\tcase arg_Dd:\n\t\treturn D0 + Reg(x&(1<<5-1))\n\n\tcase arg_Dm:\n\t\treturn D0 + Reg((x>>16)&(1<<5-1))\n\n\tcase arg_Dn:\n\t\treturn D0 + Reg((x>>5)&(1<<5-1))\n\n\tcase arg_Hd:\n\t\treturn H0 + Reg(x&(1<<5-1))\n\n\tcase arg_Hn:\n\t\treturn H0 + Reg((x>>5)&(1<<5-1))\n\n\tcase arg_IAddSub:\n\t\timm12 := (x >> 10) & (1<<12 - 1)\n\t\tshift := (x >> 22) & (1<<2 - 1)\n\t\tif shift > 1 {\n\t\t\treturn nil\n\t\t}\n\t\tshift = shift * 12\n\t\treturn ImmShift{uint16(imm12), uint8(shift)}\n\n\tcase arg_Sa:\n\t\treturn S0 + Reg((x>>10)&(1<<5-1))\n\n\tcase arg_Sd:\n\t\treturn S0 + Reg(x&(1<<5-1))\n\n\tcase arg_Sm:\n\t\treturn S0 + Reg((x>>16)&(1<<5-1))\n\n\tcase arg_Sn:\n\t\treturn S0 + Reg((x>>5)&(1<<5-1))\n\n\tcase arg_Wa:\n\t\treturn W0 + Reg((x>>10)&(1<<5-1))\n\n\tcase arg_Wd:\n\t\treturn W0 + Reg(x&(1<<5-1))\n\n\tcase arg_Wds:\n\t\treturn RegSP(W0) + RegSP(x&(1<<5-1))\n\n\tcase arg_Wm:\n\t\treturn W0 + Reg((x>>16)&(1<<5-1))\n\n\tcase arg_Rm_extend__UXTB_0__UXTH_1__UXTW_2__LSL_UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4:\n\t\treturn handle_ExtendedRegister(x, true)\n\n\tcase arg_Wm_extend__UXTB_0__UXTH_1__LSL_UXTW_2__UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4:\n\t\treturn handle_ExtendedRegister(x, false)\n\n\tcase arg_Wn:\n\t\treturn W0 + Reg((x>>5)&(1<<5-1))\n\n\tcase arg_Wns:\n\t\treturn RegSP(W0) + RegSP((x>>5)&(1<<5-1))\n\n\tcase arg_Xa:\n\t\treturn X0 + Reg((x>>10)&(1<<5-1))\n\n\tcase arg_Xd:\n\t\treturn X0 + Reg(x&(1<<5-1))\n\n\tcase arg_Xds:\n\t\treturn RegSP(X0) + RegSP(x&(1<<5-1))\n\n\tcase arg_Xm:\n\t\treturn X0 + Reg((x>>16)&(1<<5-1))\n\n\tcase arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31:\n\t\treturn handle_ImmediateShiftedRegister(x, 31, true, false)\n\n\tcase arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31:\n\t\treturn handle_ImmediateShiftedRegister(x, 31, true, true)\n\n\tcase arg_Xm_shift__LSL_0__LSR_1__ASR_2__0_63:\n\t\treturn handle_ImmediateShiftedRegister(x, 63, false, false)\n\n\tcase arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63:\n\t\treturn handle_ImmediateShiftedRegister(x, 63, false, true)\n\n\tcase arg_Xn:\n\t\treturn X0 + Reg((x>>5)&(1<<5-1))\n\n\tcase arg_Xns:\n\t\treturn RegSP(X0) + RegSP((x>>5)&(1<<5-1))\n\n\tcase arg_slabel_imm14_2:\n\t\timm14 := ((x >> 5) & (1<<14 - 1))\n\t\treturn PCRel(((int64(imm14) << 2) << 48) >> 48)\n\n\tcase arg_slabel_imm19_2:\n\t\timm19 := ((x >> 5) & (1<<19 - 1))\n\t\treturn PCRel(((int64(imm19) << 2) << 43) >> 43)\n\n\tcase arg_slabel_imm26_2:\n\t\timm26 := (x & (1<<26 - 1))\n\t\treturn PCRel(((int64(imm26) << 2) << 36) >> 36)\n\n\tcase arg_slabel_immhi_immlo_0:\n\t\timmhi := ((x >> 5) & (1<<19 - 1))\n\t\timmlo := ((x >> 29) & (1<<2 - 1))\n\t\timmhilo := (immhi)<<2 | immlo\n\t\treturn PCRel((int64(immhilo) << 43) >> 43)\n\n\tcase arg_slabel_immhi_immlo_12:\n\t\timmhi := ((x >> 5) & (1<<19 - 1))\n\t\timmlo := ((x >> 29) & (1<<2 - 1))\n\t\timmhilo := (immhi)<<2 | immlo\n\t\treturn PCRel(((int64(immhilo) << 12) << 31) >> 31)\n\n\tcase arg_Xns_mem:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrOffset, 0}\n\n\tcase arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__1_1:\n\t\treturn handle_MemExtend(x, 1, false)\n\n\tcase arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__2_1:\n\t\treturn handle_MemExtend(x, 2, false)\n\n\tcase arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__3_1:\n\t\treturn handle_MemExtend(x, 3, false)\n\n\tcase arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__absent_0__0_1:\n\t\treturn handle_MemExtend(x, 1, true)\n\n\tcase arg_Xns_mem_optional_imm12_1_unsigned:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm12 := (x >> 10) & (1<<12 - 1)\n\t\treturn MemImmediate{Rn, AddrOffset, int32(imm12)}\n\n\tcase arg_Xns_mem_optional_imm12_2_unsigned:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm12 := (x >> 10) & (1<<12 - 1)\n\t\treturn MemImmediate{Rn, AddrOffset, int32(imm12 << 1)}\n\n\tcase arg_Xns_mem_optional_imm12_4_unsigned:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm12 := (x >> 10) & (1<<12 - 1)\n\t\treturn MemImmediate{Rn, AddrOffset, int32(imm12 << 2)}\n\n\tcase arg_Xns_mem_optional_imm12_8_unsigned:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm12 := (x >> 10) & (1<<12 - 1)\n\t\treturn MemImmediate{Rn, AddrOffset, int32(imm12 << 3)}\n\n\tcase arg_Xns_mem_optional_imm7_4_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm7 := (x >> 15) & (1<<7 - 1)\n\t\treturn MemImmediate{Rn, AddrOffset, ((int32(imm7 << 2)) << 23) >> 23}\n\n\tcase arg_Xns_mem_optional_imm7_8_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm7 := (x >> 15) & (1<<7 - 1)\n\t\treturn MemImmediate{Rn, AddrOffset, ((int32(imm7 << 3)) << 22) >> 22}\n\n\tcase arg_Xns_mem_optional_imm9_1_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm9 := (x >> 12) & (1<<9 - 1)\n\t\treturn MemImmediate{Rn, AddrOffset, (int32(imm9) << 23) >> 23}\n\n\tcase arg_Xns_mem_post_imm7_4_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm7 := (x >> 15) & (1<<7 - 1)\n\t\treturn MemImmediate{Rn, AddrPostIndex, ((int32(imm7 << 2)) << 23) >> 23}\n\n\tcase arg_Xns_mem_post_imm7_8_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm7 := (x >> 15) & (1<<7 - 1)\n\t\treturn MemImmediate{Rn, AddrPostIndex, ((int32(imm7 << 3)) << 22) >> 22}\n\n\tcase arg_Xns_mem_post_imm9_1_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm9 := (x >> 12) & (1<<9 - 1)\n\t\treturn MemImmediate{Rn, AddrPostIndex, ((int32(imm9)) << 23) >> 23}\n\n\tcase arg_Xns_mem_wb_imm7_4_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm7 := (x >> 15) & (1<<7 - 1)\n\t\treturn MemImmediate{Rn, AddrPreIndex, ((int32(imm7 << 2)) << 23) >> 23}\n\n\tcase arg_Xns_mem_wb_imm7_8_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm7 := (x >> 15) & (1<<7 - 1)\n\t\treturn MemImmediate{Rn, AddrPreIndex, ((int32(imm7 << 3)) << 22) >> 22}\n\n\tcase arg_Xns_mem_wb_imm9_1_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm9 := (x >> 12) & (1<<9 - 1)\n\t\treturn MemImmediate{Rn, AddrPreIndex, ((int32(imm9)) << 23) >> 23}\n\n\tcase arg_Ws:\n\t\treturn W0 + Reg((x>>16)&(1<<5-1))\n\n\tcase arg_Wt:\n\t\treturn W0 + Reg(x&(1<<5-1))\n\n\tcase arg_Wt2:\n\t\treturn W0 + Reg((x>>10)&(1<<5-1))\n\n\tcase arg_Xs:\n\t\treturn X0 + Reg((x>>16)&(1<<5-1))\n\n\tcase arg_Xt:\n\t\treturn X0 + Reg(x&(1<<5-1))\n\n\tcase arg_Xt2:\n\t\treturn X0 + Reg((x>>10)&(1<<5-1))\n\n\tcase arg_immediate_0_127_CRm_op2:\n\t\tcrm_op2 := (x >> 5) & (1<<7 - 1)\n\t\treturn Imm_hint(crm_op2)\n\n\tcase arg_immediate_0_15_CRm:\n\t\tcrm := (x >> 8) & (1<<4 - 1)\n\t\treturn Imm{crm, false}\n\n\tcase arg_immediate_0_15_nzcv:\n\t\tnzcv := x & (1<<4 - 1)\n\t\treturn Imm{nzcv, false}\n\n\tcase arg_immediate_0_31_imm5:\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\treturn Imm{imm5, false}\n\n\tcase arg_immediate_0_31_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\tif immr > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{immr, false}\n\n\tcase arg_immediate_0_31_imms:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\tif imms > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{imms, true}\n\n\tcase arg_immediate_0_63_b5_b40:\n\t\tb5 := (x >> 31) & 1\n\t\tb40 := (x >> 19) & (1<<5 - 1)\n\t\treturn Imm{(b5 << 5) | b40, true}\n\n\tcase arg_immediate_0_63_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\treturn Imm{immr, false}\n\n\tcase arg_immediate_0_63_imms:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\treturn Imm{imms, true}\n\n\tcase arg_immediate_0_65535_imm16:\n\t\timm16 := (x >> 5) & (1<<16 - 1)\n\t\treturn Imm{imm16, false}\n\n\tcase arg_immediate_0_7_op1:\n\t\top1 := (x >> 16) & (1<<3 - 1)\n\t\treturn Imm{op1, true}\n\n\tcase arg_immediate_0_7_op2:\n\t\top2 := (x >> 5) & (1<<3 - 1)\n\t\treturn Imm{op2, true}\n\n\tcase arg_immediate_ASR_SBFM_32M_bitfield_0_31_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\tif immr > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_ASR_SBFM_64M_bitfield_0_63_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_BFI_BFM_32M_bitfield_lsb_32_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\tif immr > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{32 - immr, true}\n\n\tcase arg_immediate_BFI_BFM_32M_bitfield_width_32_imms:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\tif imms > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{imms + 1, true}\n\n\tcase arg_immediate_BFI_BFM_64M_bitfield_lsb_64_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\treturn Imm{64 - immr, true}\n\n\tcase arg_immediate_BFI_BFM_64M_bitfield_width_64_imms:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\treturn Imm{imms + 1, true}\n\n\tcase arg_immediate_BFXIL_BFM_32M_bitfield_lsb_32_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\tif immr > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_BFXIL_BFM_32M_bitfield_width_32_imms:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\twidth := imms - immr + 1\n\t\tif width < 1 || width > 32-immr {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{width, true}\n\n\tcase arg_immediate_BFXIL_BFM_64M_bitfield_lsb_64_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_BFXIL_BFM_64M_bitfield_width_64_imms:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\twidth := imms - immr + 1\n\t\tif width < 1 || width > 64-immr {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{width, true}\n\n\tcase arg_immediate_bitmask_32_imms_immr:\n\t\treturn handle_bitmasks(x, 32)\n\n\tcase arg_immediate_bitmask_64_N_imms_immr:\n\t\treturn handle_bitmasks(x, 64)\n\n\tcase arg_immediate_LSL_UBFM_32M_bitfield_0_31_immr:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\tshift := 31 - imms\n\t\tif shift > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{shift, true}\n\n\tcase arg_immediate_LSL_UBFM_64M_bitfield_0_63_immr:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\tshift := 63 - imms\n\t\tif shift > 63 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{shift, true}\n\n\tcase arg_immediate_LSR_UBFM_32M_bitfield_0_31_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\tif immr > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_LSR_UBFM_64M_bitfield_0_63_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_optional_0_15_CRm:\n\t\tcrm := (x >> 8) & (1<<4 - 1)\n\t\treturn Imm_clrex(crm)\n\n\tcase arg_immediate_optional_0_65535_imm16:\n\t\timm16 := (x >> 5) & (1<<16 - 1)\n\t\treturn Imm_dcps(imm16)\n\n\tcase arg_immediate_OptLSL_amount_16_0_16:\n\t\timm16 := (x >> 5) & (1<<16 - 1)\n\t\thw := (x >> 21) & (1<<2 - 1)\n\t\tshift := hw * 16\n\t\tif shift > 16 {\n\t\t\treturn nil\n\t\t}\n\t\treturn ImmShift{uint16(imm16), uint8(shift)}\n\n\tcase arg_immediate_OptLSL_amount_16_0_48:\n\t\timm16 := (x >> 5) & (1<<16 - 1)\n\t\thw := (x >> 21) & (1<<2 - 1)\n\t\tshift := hw * 16\n\t\treturn ImmShift{uint16(imm16), uint8(shift)}\n\n\tcase arg_immediate_SBFIZ_SBFM_32M_bitfield_lsb_32_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\tif immr > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{32 - immr, true}\n\n\tcase arg_immediate_SBFIZ_SBFM_32M_bitfield_width_32_imms:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\tif imms > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{imms + 1, true}\n\n\tcase arg_immediate_SBFIZ_SBFM_64M_bitfield_lsb_64_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\treturn Imm{64 - immr, true}\n\n\tcase arg_immediate_SBFIZ_SBFM_64M_bitfield_width_64_imms:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\treturn Imm{imms + 1, true}\n\n\tcase arg_immediate_SBFX_SBFM_32M_bitfield_lsb_32_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\tif immr > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_SBFX_SBFM_32M_bitfield_width_32_imms:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\twidth := imms - immr + 1\n\t\tif width < 1 || width > 32-immr {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{width, true}\n\n\tcase arg_immediate_SBFX_SBFM_64M_bitfield_lsb_64_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_SBFX_SBFM_64M_bitfield_width_64_imms:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\twidth := imms - immr + 1\n\t\tif width < 1 || width > 64-immr {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{width, true}\n\n\tcase arg_immediate_shift_32_implicit_imm16_hw:\n\t\timm16 := (x >> 5) & (1<<16 - 1)\n\t\thw := (x >> 21) & (1<<2 - 1)\n\t\tshift := hw * 16\n\t\tif shift > 16 {\n\t\t\treturn nil\n\t\t}\n\t\tresult := uint32(imm16) << shift\n\t\treturn Imm{result, false}\n\n\tcase arg_immediate_shift_32_implicit_inverse_imm16_hw:\n\t\timm16 := (x >> 5) & (1<<16 - 1)\n\t\thw := (x >> 21) & (1<<2 - 1)\n\t\tshift := hw * 16\n\t\tif shift > 16 {\n\t\t\treturn nil\n\t\t}\n\t\tresult := uint32(imm16) << shift\n\t\treturn Imm{^result, false}\n\n\tcase arg_immediate_shift_64_implicit_imm16_hw:\n\t\timm16 := (x >> 5) & (1<<16 - 1)\n\t\thw := (x >> 21) & (1<<2 - 1)\n\t\tshift := hw * 16\n\t\tresult := uint64(imm16) << shift\n\t\treturn Imm64{result, false}\n\n\tcase arg_immediate_shift_64_implicit_inverse_imm16_hw:\n\t\timm16 := (x >> 5) & (1<<16 - 1)\n\t\thw := (x >> 21) & (1<<2 - 1)\n\t\tshift := hw * 16\n\t\tresult := uint64(imm16) << shift\n\t\treturn Imm64{^result, false}\n\n\tcase arg_immediate_UBFIZ_UBFM_32M_bitfield_lsb_32_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\tif immr > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{32 - immr, true}\n\n\tcase arg_immediate_UBFIZ_UBFM_32M_bitfield_width_32_imms:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\tif imms > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{imms + 1, true}\n\n\tcase arg_immediate_UBFIZ_UBFM_64M_bitfield_lsb_64_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\treturn Imm{64 - immr, true}\n\n\tcase arg_immediate_UBFIZ_UBFM_64M_bitfield_width_64_imms:\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\treturn Imm{imms + 1, true}\n\n\tcase arg_immediate_UBFX_UBFM_32M_bitfield_lsb_32_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\tif immr > 31 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_UBFX_UBFM_32M_bitfield_width_32_imms:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\twidth := imms - immr + 1\n\t\tif width < 1 || width > 32-immr {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{width, true}\n\n\tcase arg_immediate_UBFX_UBFM_64M_bitfield_lsb_64_immr:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\treturn Imm{immr, true}\n\n\tcase arg_immediate_UBFX_UBFM_64M_bitfield_width_64_imms:\n\t\timmr := (x >> 16) & (1<<6 - 1)\n\t\timms := (x >> 10) & (1<<6 - 1)\n\t\twidth := imms - immr + 1\n\t\tif width < 1 || width > 64-immr {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{width, true}\n\n\tcase arg_Rt_31_1__W_0__X_1:\n\t\tb5 := (x >> 31) & 1\n\t\tRt := x & (1<<5 - 1)\n\t\tif b5 == 0 {\n\t\t\treturn W0 + Reg(Rt)\n\t\t} else {\n\t\t\treturn X0 + Reg(Rt)\n\t\t}\n\n\tcase arg_cond_AllowALNV_Normal:\n\t\tcond := (x >> 12) & (1<<4 - 1)\n\t\treturn Cond{uint8(cond), false}\n\n\tcase arg_conditional:\n\t\tcond := x & (1<<4 - 1)\n\t\treturn Cond{uint8(cond), false}\n\n\tcase arg_cond_NotAllowALNV_Invert:\n\t\tcond := (x >> 12) & (1<<4 - 1)\n\t\tif (cond >> 1) == 7 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Cond{uint8(cond), true}\n\n\tcase arg_Cm:\n\t\tCRm := (x >> 8) & (1<<4 - 1)\n\t\treturn Imm_c(CRm)\n\n\tcase arg_Cn:\n\t\tCRn := (x >> 12) & (1<<4 - 1)\n\t\treturn Imm_c(CRn)\n\n\tcase arg_option_DMB_BO_system_CRm:\n\t\tCRm := (x >> 8) & (1<<4 - 1)\n\t\treturn Imm_option(CRm)\n\n\tcase arg_option_DSB_BO_system_CRm:\n\t\tCRm := (x >> 8) & (1<<4 - 1)\n\t\treturn Imm_option(CRm)\n\n\tcase arg_option_ISB_BI_system_CRm:\n\t\tCRm := (x >> 8) & (1<<4 - 1)\n\t\tif CRm == 15 {\n\t\t\treturn Imm_option(CRm)\n\t\t}\n\t\treturn Imm{CRm, false}\n\n\tcase arg_prfop_Rt:\n\t\tRt := x & (1<<5 - 1)\n\t\treturn Imm_prfop(Rt)\n\n\tcase arg_pstatefield_op1_op2__SPSel_05__DAIFSet_36__DAIFClr_37:\n\t\top1 := (x >> 16) & (1<<3 - 1)\n\t\top2 := (x >> 5) & (1<<3 - 1)\n\t\tif (op1 == 0) && (op2 == 5) {\n\t\t\treturn SPSel\n\t\t} else if (op1 == 3) && (op2 == 6) {\n\t\t\treturn DAIFSet\n\t\t} else if (op1 == 3) && (op2 == 7) {\n\t\t\treturn DAIFClr\n\t\t}\n\t\treturn nil\n\n\tcase arg_sysreg_o0_op1_CRn_CRm_op2:\n\t\top0 := (x >> 19) & (1<<2 - 1)\n\t\top1 := (x >> 16) & (1<<3 - 1)\n\t\tCRn := (x >> 12) & (1<<4 - 1)\n\t\tCRm := (x >> 8) & (1<<4 - 1)\n\t\top2 := (x >> 5) & (1<<3 - 1)\n\t\treturn Systemreg{uint8(op0), uint8(op1), uint8(CRn), uint8(CRm), uint8(op2)}\n\n\tcase arg_sysop_AT_SYS_CR_system:\n\t\t//TODO: system instruction\n\t\treturn nil\n\n\tcase arg_sysop_SYS_CR_system:\n\t\t//TODO: system instruction\n\t\treturn nil\n\n\tcase arg_sysop_DC_SYS_CR_system, arg_sysop_TLBI_SYS_CR_system:\n\t\top1 := (x >> 16) & 7\n\t\tcn := (x >> 12) & 15\n\t\tcm := (x >> 8) & 15\n\t\top2 := (x >> 5) & 7\n\t\tsysInst := sysInstFields{uint8(op1), uint8(cn), uint8(cm), uint8(op2)}\n\t\tattrs := sysInst.getAttrs()\n\t\treg := int(x & 31)\n\t\tif !attrs.hasOperand2 {\n\t\t\tif reg == 31 {\n\t\t\t\treturn sysOp{sysInst, 0, false}\n\t\t\t}\n\t\t\t// This instruction is undefined if the Rt field is not set to 31.\n\t\t\treturn nil\n\t\t}\n\t\treturn sysOp{sysInst, X0 + Reg(reg), true}\n\n\tcase arg_Bt:\n\t\treturn B0 + Reg(x&(1<<5-1))\n\n\tcase arg_Dt:\n\t\treturn D0 + Reg(x&(1<<5-1))\n\n\tcase arg_Dt2:\n\t\treturn D0 + Reg((x>>10)&(1<<5-1))\n\n\tcase arg_Ht:\n\t\treturn H0 + Reg(x&(1<<5-1))\n\n\tcase arg_immediate_0_63_immh_immb__UIntimmhimmb64_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tif (immh & 8) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\timmb := (x >> 16) & (1<<3 - 1)\n\t\treturn Imm{(immh << 3) + immb - 64, true}\n\n\tcase arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\timmb := (x >> 16) & (1<<3 - 1)\n\t\tif immh == 1 {\n\t\t\treturn Imm{(immh << 3) + immb - 8, true}\n\t\t} else if (immh >> 1) == 1 {\n\t\t\treturn Imm{(immh << 3) + immb - 16, true}\n\t\t} else if (immh >> 2) == 1 {\n\t\t\treturn Imm{(immh << 3) + immb - 32, true}\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8:\n\t\tfallthrough\n\n\tcase arg_immediate_0_width_m1_immh_immb__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\timmb := (x >> 16) & (1<<3 - 1)\n\t\tif immh == 1 {\n\t\t\treturn Imm{(immh << 3) + immb - 8, true}\n\t\t} else if (immh >> 1) == 1 {\n\t\t\treturn Imm{(immh << 3) + immb - 16, true}\n\t\t} else if (immh >> 2) == 1 {\n\t\t\treturn Imm{(immh << 3) + immb - 32, true}\n\t\t} else if (immh >> 3) == 1 {\n\t\t\treturn Imm{(immh << 3) + immb - 64, true}\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_immediate_0_width_size__8_0__16_1__32_2:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tswitch size {\n\t\tcase 0:\n\t\t\treturn Imm{8, true}\n\t\tcase 1:\n\t\t\treturn Imm{16, true}\n\t\tcase 2:\n\t\t\treturn Imm{32, true}\n\t\tdefault:\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_immediate_1_64_immh_immb__128UIntimmhimmb_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tif (immh & 8) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\timmb := (x >> 16) & (1<<3 - 1)\n\t\treturn Imm{128 - ((immh << 3) + immb), true}\n\n\tcase arg_immediate_1_width_immh_immb__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4:\n\t\tfallthrough\n\n\tcase arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\timmb := (x >> 16) & (1<<3 - 1)\n\t\tif immh == 1 {\n\t\t\treturn Imm{16 - ((immh << 3) + immb), true}\n\t\t} else if (immh >> 1) == 1 {\n\t\t\treturn Imm{32 - ((immh << 3) + immb), true}\n\t\t} else if (immh >> 2) == 1 {\n\t\t\treturn Imm{64 - ((immh << 3) + immb), true}\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\timmb := (x >> 16) & (1<<3 - 1)\n\t\tif immh == 1 {\n\t\t\treturn Imm{16 - ((immh << 3) + immb), true}\n\t\t} else if (immh >> 1) == 1 {\n\t\t\treturn Imm{32 - ((immh << 3) + immb), true}\n\t\t} else if (immh >> 2) == 1 {\n\t\t\treturn Imm{64 - ((immh << 3) + immb), true}\n\t\t} else if (immh >> 3) == 1 {\n\t\t\treturn Imm{128 - ((immh << 3) + immb), true}\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_immediate_8x8_a_b_c_d_e_f_g_h:\n\t\tvar imm uint64\n\t\tif x&(1<<5) != 0 {\n\t\t\timm = (1 << 8) - 1\n\t\t} else {\n\t\t\timm = 0\n\t\t}\n\t\tif x&(1<<6) != 0 {\n\t\t\timm += ((1 << 8) - 1) << 8\n\t\t}\n\t\tif x&(1<<7) != 0 {\n\t\t\timm += ((1 << 8) - 1) << 16\n\t\t}\n\t\tif x&(1<<8) != 0 {\n\t\t\timm += ((1 << 8) - 1) << 24\n\t\t}\n\t\tif x&(1<<9) != 0 {\n\t\t\timm += ((1 << 8) - 1) << 32\n\t\t}\n\t\tif x&(1<<16) != 0 {\n\t\t\timm += ((1 << 8) - 1) << 40\n\t\t}\n\t\tif x&(1<<17) != 0 {\n\t\t\timm += ((1 << 8) - 1) << 48\n\t\t}\n\t\tif x&(1<<18) != 0 {\n\t\t\timm += ((1 << 8) - 1) << 56\n\t\t}\n\t\treturn Imm64{imm, false}\n\n\tcase arg_immediate_exp_3_pre_4_a_b_c_d_e_f_g_h:\n\t\tpre := (x >> 5) & (1<<4 - 1)\n\t\texp := 1 - ((x >> 17) & 1)\n\t\texp = (exp << 2) + (((x >> 16) & 1) << 1) + ((x >> 9) & 1)\n\t\ts := ((x >> 18) & 1)\n\t\treturn Imm_fp{uint8(s), int8(exp) - 3, uint8(pre)}\n\n\tcase arg_immediate_exp_3_pre_4_imm8:\n\t\tpre := (x >> 13) & (1<<4 - 1)\n\t\texp := 1 - ((x >> 19) & 1)\n\t\texp = (exp << 2) + ((x >> 17) & (1<<2 - 1))\n\t\ts := ((x >> 20) & 1)\n\t\treturn Imm_fp{uint8(s), int8(exp) - 3, uint8(pre)}\n\n\tcase arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__64UIntimmhimmb_4__128UIntimmhimmb_8:\n\t\tfallthrough\n\n\tcase arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__64UIntimmhimmb_4__128UIntimmhimmb_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\timmb := (x >> 16) & (1<<3 - 1)\n\t\tif (immh >> 2) == 1 {\n\t\t\treturn Imm{64 - ((immh << 3) + immb), true}\n\t\t} else if (immh >> 3) == 1 {\n\t\t\treturn Imm{128 - ((immh << 3) + immb), true}\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_immediate_fbits_min_1_max_32_sub_64_scale:\n\t\tscale := (x >> 10) & (1<<6 - 1)\n\t\tfbits := 64 - scale\n\t\tif fbits > 32 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Imm{fbits, true}\n\n\tcase arg_immediate_fbits_min_1_max_64_sub_64_scale:\n\t\tscale := (x >> 10) & (1<<6 - 1)\n\t\tfbits := 64 - scale\n\t\treturn Imm{fbits, true}\n\n\tcase arg_immediate_floatzero:\n\t\treturn Imm{0, true}\n\n\tcase arg_immediate_index_Q_imm4__imm4lt20gt_00__imm4_10:\n\t\tQ := (x >> 30) & 1\n\t\timm4 := (x >> 11) & (1<<4 - 1)\n\t\tif Q == 1 || (imm4>>3) == 0 {\n\t\t\treturn Imm{imm4, true}\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_immediate_MSL__a_b_c_d_e_f_g_h_cmode__8_0__16_1:\n\t\tvar shift uint8\n\t\timm8 := (x >> 16) & (1<<3 - 1)\n\t\timm8 = (imm8 << 5) | ((x >> 5) & (1<<5 - 1))\n\t\tif (x>>12)&1 == 0 {\n\t\t\tshift = 8 + 128\n\t\t} else {\n\t\t\tshift = 16 + 128\n\t\t}\n\t\treturn ImmShift{uint16(imm8), shift}\n\n\tcase arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1:\n\t\timm8 := (x >> 16) & (1<<3 - 1)\n\t\timm8 = (imm8 << 5) | ((x >> 5) & (1<<5 - 1))\n\t\tcmode1 := (x >> 13) & 1\n\t\tshift := 8 * cmode1\n\t\treturn ImmShift{uint16(imm8), uint8(shift)}\n\n\tcase arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1__16_2__24_3:\n\t\timm8 := (x >> 16) & (1<<3 - 1)\n\t\timm8 = (imm8 << 5) | ((x >> 5) & (1<<5 - 1))\n\t\tcmode1 := (x >> 13) & (1<<2 - 1)\n\t\tshift := 8 * cmode1\n\t\treturn ImmShift{uint16(imm8), uint8(shift)}\n\n\tcase arg_immediate_OptLSLZero__a_b_c_d_e_f_g_h:\n\t\timm8 := (x >> 16) & (1<<3 - 1)\n\t\timm8 = (imm8 << 5) | ((x >> 5) & (1<<5 - 1))\n\t\treturn ImmShift{uint16(imm8), 0}\n\n\tcase arg_immediate_zero:\n\t\treturn Imm{0, true}\n\n\tcase arg_Qd:\n\t\treturn Q0 + Reg(x&(1<<5-1))\n\n\tcase arg_Qn:\n\t\treturn Q0 + Reg((x>>5)&(1<<5-1))\n\n\tcase arg_Qt:\n\t\treturn Q0 + Reg(x&(1<<5-1))\n\n\tcase arg_Qt2:\n\t\treturn Q0 + Reg((x>>10)&(1<<5-1))\n\n\tcase arg_Rn_16_5__W_1__W_2__W_4__X_8:\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\tif ((imm5 & 1) == 1) || ((imm5 & 2) == 2) || ((imm5 & 4) == 4) {\n\t\t\treturn W0 + Reg((x>>5)&(1<<5-1))\n\t\t} else if (imm5 & 8) == 8 {\n\t\t\treturn X0 + Reg((x>>5)&(1<<5-1))\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_St:\n\t\treturn S0 + Reg(x&(1<<5-1))\n\n\tcase arg_St2:\n\t\treturn S0 + Reg((x>>10)&(1<<5-1))\n\n\tcase arg_Vd_16_5__B_1__H_2__S_4__D_8:\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif imm5&1 == 1 {\n\t\t\treturn B0 + Reg(Rd)\n\t\t} else if imm5&2 == 2 {\n\t\t\treturn H0 + Reg(Rd)\n\t\t} else if imm5&4 == 4 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else if imm5&8 == 8 {\n\t\t\treturn D0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_19_4__B_1__H_2__S_4:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif immh == 1 {\n\t\t\treturn B0 + Reg(Rd)\n\t\t} else if immh>>1 == 1 {\n\t\t\treturn H0 + Reg(Rd)\n\t\t} else if immh>>2 == 1 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_19_4__B_1__H_2__S_4__D_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif immh == 1 {\n\t\t\treturn B0 + Reg(Rd)\n\t\t} else if immh>>1 == 1 {\n\t\t\treturn H0 + Reg(Rd)\n\t\t} else if immh>>2 == 1 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else if immh>>3 == 1 {\n\t\t\treturn D0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_19_4__D_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif immh>>3 == 1 {\n\t\t\treturn D0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_19_4__S_4__D_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif immh>>2 == 1 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else if immh>>3 == 1 {\n\t\t\treturn D0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_22_1__S_0:\n\t\tsz := (x >> 22) & 1\n\t\tRd := x & (1<<5 - 1)\n\t\tif sz == 0 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_22_1__S_0__D_1:\n\t\tsz := (x >> 22) & 1\n\t\tRd := x & (1<<5 - 1)\n\t\tif sz == 0 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn D0 + Reg(Rd)\n\t\t}\n\n\tcase arg_Vd_22_1__S_1:\n\t\tsz := (x >> 22) & 1\n\t\tRd := x & (1<<5 - 1)\n\t\tif sz == 1 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_22_2__B_0__H_1__S_2:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif size == 0 {\n\t\t\treturn B0 + Reg(Rd)\n\t\t} else if size == 1 {\n\t\t\treturn H0 + Reg(Rd)\n\t\t} else if size == 2 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_22_2__B_0__H_1__S_2__D_3:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif size == 0 {\n\t\t\treturn B0 + Reg(Rd)\n\t\t} else if size == 1 {\n\t\t\treturn H0 + Reg(Rd)\n\t\t} else if size == 2 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn D0 + Reg(Rd)\n\t\t}\n\n\tcase arg_Vd_22_2__D_3:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif size == 3 {\n\t\t\treturn D0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_22_2__H_0__S_1__D_2:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif size == 0 {\n\t\t\treturn H0 + Reg(Rd)\n\t\t} else if size == 1 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else if size == 2 {\n\t\t\treturn D0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_22_2__H_1__S_2:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif size == 1 {\n\t\t\treturn H0 + Reg(Rd)\n\t\t} else if size == 2 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_22_2__S_1__D_2:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRd := x & (1<<5 - 1)\n\t\tif size == 1 {\n\t\t\treturn S0 + Reg(Rd)\n\t\t} else if size == 2 {\n\t\t\treturn D0 + Reg(Rd)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_arrangement_16B:\n\t\tRd := x & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement16B, 0}\n\n\tcase arg_Vd_arrangement_2D:\n\t\tRd := x & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\n\tcase arg_Vd_arrangement_4S:\n\t\tRd := x & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\n\tcase arg_Vd_arrangement_D_index__1:\n\t\tRd := x & (1<<5 - 1)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rd), ArrangementD, 1, 0}\n\n\tcase arg_Vd_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1:\n\t\tvar a Arrangement\n\t\tvar index uint32\n\t\tRd := x & (1<<5 - 1)\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\tif imm5&1 == 1 {\n\t\t\ta = ArrangementB\n\t\t\tindex = imm5 >> 1\n\t\t} else if imm5&2 == 2 {\n\t\t\ta = ArrangementH\n\t\t\tindex = imm5 >> 2\n\t\t} else if imm5&4 == 4 {\n\t\t\ta = ArrangementS\n\t\t\tindex = imm5 >> 3\n\t\t} else if imm5&8 == 8 {\n\t\t\ta = ArrangementD\n\t\t\tindex = imm5 >> 4\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rd), a, uint8(index), 0}\n\n\tcase arg_Vd_arrangement_imm5_Q___8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81:\n\t\tRd := x & (1<<5 - 1)\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif imm5&1 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8B, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement16B, 0}\n\t\t\t}\n\t\t} else if imm5&2 == 2 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t\t}\n\t\t} else if imm5&4 == 4 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t\t}\n\t\t} else if (imm5&8 == 8) && (Q == 1) {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81:\n\t\tRd := x & (1<<5 - 1)\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif immh>>2 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t\t}\n\t\t} else if immh>>3 == 1 {\n\t\t\tif Q == 1 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41:\n\t\tRd := x & (1<<5 - 1)\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif immh == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8B, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement16B, 0}\n\t\t\t}\n\t\t} else if immh>>1 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t\t}\n\t\t} else if immh>>2 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81:\n\t\tRd := x & (1<<5 - 1)\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif immh == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8B, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement16B, 0}\n\t\t\t}\n\t\t} else if immh>>1 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t\t}\n\t\t} else if immh>>2 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t\t}\n\t\t} else if immh>>3 == 1 {\n\t\t\tif Q == 1 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4:\n\t\tRd := x & (1<<5 - 1)\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tif immh == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t} else if immh>>1 == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t} else if immh>>2 == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_Q___2S_0__4S_1:\n\t\tRd := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t}\n\n\tcase arg_Vd_arrangement_Q___4H_0__8H_1:\n\t\tRd := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t} else {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t}\n\n\tcase arg_Vd_arrangement_Q___8B_0__16B_1:\n\t\tRd := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8B, 0}\n\t\t} else {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement16B, 0}\n\t\t}\n\n\tcase arg_Vd_arrangement_Q_sz___2S_00__4S_10__2D_11:\n\t\tRd := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsz := (x >> 22) & 1\n\t\tif sz == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else if sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t} else if sz == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_size___4S_1__2D_2:\n\t\tRd := x & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tif size == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t} else if size == 2 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_size___8H_0__1Q_3:\n\t\tRd := x & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tif size == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t} else if size == 3 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement1Q, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_size___8H_0__4S_1__2D_2:\n\t\tRd := x & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tif size == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t} else if size == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t} else if size == 2 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_size_Q___4H_00__8H_01__2S_10__4S_11__1D_20__2D_21:\n\t\tRd := x & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement1D, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21:\n\t\tRd := x & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_size_Q___8B_00__16B_01:\n\t\tRd := x & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement16B, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11:\n\t\tRd := x & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement16B, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21:\n\t\tRd := x & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement16B, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31:\n\t\tRd := x & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement16B, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t} else if size == 3 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_sz___4S_0__2D_1:\n\t\tRd := x & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tif sz == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t} else {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t}\n\n\tcase arg_Vd_arrangement_sz_Q___2S_00__4S_01:\n\t\tRd := x & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tQ := (x >> 30) & 1\n\t\tif sz == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else if sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11:\n\t\tRd := x & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tQ := (x >> 30) & 1\n\t\tif sz == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else if sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t} else if sz == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_sz_Q___2S_10__4S_11:\n\t\tRd := x & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tQ := (x >> 30) & 1\n\t\tif sz == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else if sz == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vd_arrangement_sz_Q___4H_00__8H_01__2S_10__4S_11:\n\t\tRd := x & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tQ := (x >> 30) & 1\n\t\tif sz == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4H, 0}\n\t\t} else if sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement8H, 0}\n\t\t} else if sz == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement2S, 0}\n\t\t} else /* sz == 1 && Q == 1 */ {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rd), Arrangement4S, 0}\n\t\t}\n\n\tcase arg_Vm_22_1__S_0__D_1:\n\t\tsz := (x >> 22) & 1\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tif sz == 0 {\n\t\t\treturn S0 + Reg(Rm)\n\t\t} else {\n\t\t\treturn D0 + Reg(Rm)\n\t\t}\n\n\tcase arg_Vm_22_2__B_0__H_1__S_2__D_3:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tif size == 0 {\n\t\t\treturn B0 + Reg(Rm)\n\t\t} else if size == 1 {\n\t\t\treturn H0 + Reg(Rm)\n\t\t} else if size == 2 {\n\t\t\treturn S0 + Reg(Rm)\n\t\t} else {\n\t\t\treturn D0 + Reg(Rm)\n\t\t}\n\n\tcase arg_Vm_22_2__D_3:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tif size == 3 {\n\t\t\treturn D0 + Reg(Rm)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vm_22_2__H_1__S_2:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tif size == 1 {\n\t\t\treturn H0 + Reg(Rm)\n\t\t} else if size == 2 {\n\t\t\treturn S0 + Reg(Rm)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vm_arrangement_4S:\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement4S, 0}\n\n\tcase arg_Vm_arrangement_Q___8B_0__16B_1:\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement8B, 0}\n\t\t} else {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement16B, 0}\n\t\t}\n\n\tcase arg_Vm_arrangement_size___8H_0__4S_1__2D_2:\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tif size == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement8H, 0}\n\t\t} else if size == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement4S, 0}\n\t\t} else if size == 2 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1:\n\t\tvar a Arrangement\n\t\tvar index uint32\n\t\tvar vm uint32\n\t\tRm := (x >> 16) & (1<<4 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tH := (x >> 11) & 1\n\t\tL := (x >> 21) & 1\n\t\tM := (x >> 20) & 1\n\t\tif size == 1 {\n\t\t\ta = ArrangementH\n\t\t\tindex = (H << 2) | (L << 1) | M\n\t\t\tvm = Rm\n\t\t} else if size == 2 {\n\t\t\ta = ArrangementS\n\t\t\tindex = (H << 1) | L\n\t\t\tvm = (M << 4) | Rm\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(vm), a, uint8(index), 0}\n\n\tcase arg_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21:\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement2S, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vm_arrangement_size_Q___8B_00__16B_01:\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement16B, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vm_arrangement_size_Q___8B_00__16B_01__1D_30__2D_31:\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement16B, 0}\n\t\t} else if size == 3 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement1D, 0}\n\t\t} else if size == 3 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21:\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement16B, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement2S, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31:\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement16B, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement2S, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement4S, 0}\n\t\t} else if size == 3 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11:\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tQ := (x >> 30) & 1\n\t\tif sz == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement2S, 0}\n\t\t} else if sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement4S, 0}\n\t\t} else if sz == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rm), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1:\n\t\tvar a Arrangement\n\t\tvar index uint32\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tH := (x >> 11) & 1\n\t\tL := (x >> 21) & 1\n\t\tif sz == 0 {\n\t\t\ta = ArrangementS\n\t\t\tindex = (H << 1) | L\n\t\t} else if sz == 1 && L == 0 {\n\t\t\ta = ArrangementD\n\t\t\tindex = H\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rm), a, uint8(index), 0}\n\n\tcase arg_Vn_19_4__B_1__H_2__S_4__D_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif immh == 1 {\n\t\t\treturn B0 + Reg(Rn)\n\t\t} else if immh>>1 == 1 {\n\t\t\treturn H0 + Reg(Rn)\n\t\t} else if immh>>2 == 1 {\n\t\t\treturn S0 + Reg(Rn)\n\t\t} else if immh>>3 == 1 {\n\t\t\treturn D0 + Reg(Rn)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vn_19_4__D_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif immh>>3 == 1 {\n\t\t\treturn D0 + Reg(Rn)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vn_19_4__H_1__S_2__D_4:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif immh == 1 {\n\t\t\treturn H0 + Reg(Rn)\n\t\t} else if immh>>1 == 1 {\n\t\t\treturn S0 + Reg(Rn)\n\t\t} else if immh>>2 == 1 {\n\t\t\treturn D0 + Reg(Rn)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vn_19_4__S_4__D_8:\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif immh>>2 == 1 {\n\t\t\treturn S0 + Reg(Rn)\n\t\t} else if immh>>3 == 1 {\n\t\t\treturn D0 + Reg(Rn)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vn_1_arrangement_16B:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 1}\n\n\tcase arg_Vn_22_1__D_1:\n\t\tsz := (x >> 22) & 1\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif sz == 1 {\n\t\t\treturn D0 + Reg(Rn)\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_22_1__S_0__D_1:\n\t\tsz := (x >> 22) & 1\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif sz == 0 {\n\t\t\treturn S0 + Reg(Rn)\n\t\t} else {\n\t\t\treturn D0 + Reg(Rn)\n\t\t}\n\n\tcase arg_Vn_22_2__B_0__H_1__S_2__D_3:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif size == 0 {\n\t\t\treturn B0 + Reg(Rn)\n\t\t} else if size == 1 {\n\t\t\treturn H0 + Reg(Rn)\n\t\t} else if size == 2 {\n\t\t\treturn S0 + Reg(Rn)\n\t\t} else {\n\t\t\treturn D0 + Reg(Rn)\n\t\t}\n\n\tcase arg_Vn_22_2__D_3:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif size == 3 {\n\t\t\treturn D0 + Reg(Rn)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vn_22_2__H_0__S_1__D_2:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif size == 0 {\n\t\t\treturn H0 + Reg(Rn)\n\t\t} else if size == 1 {\n\t\t\treturn S0 + Reg(Rn)\n\t\t} else if size == 2 {\n\t\t\treturn D0 + Reg(Rn)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vn_22_2__H_1__S_2:\n\t\tsize := (x >> 22) & (1<<2 - 1)\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tif size == 1 {\n\t\t\treturn H0 + Reg(Rn)\n\t\t} else if size == 2 {\n\t\t\treturn S0 + Reg(Rn)\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\n\tcase arg_Vn_2_arrangement_16B:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 2}\n\n\tcase arg_Vn_3_arrangement_16B:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 3}\n\n\tcase arg_Vn_4_arrangement_16B:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 4}\n\n\tcase arg_Vn_arrangement_16B:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\n\tcase arg_Vn_arrangement_4S:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\n\tcase arg_Vn_arrangement_D_index__1:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rn), ArrangementD, 1, 0}\n\n\tcase arg_Vn_arrangement_D_index__imm5_1:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tindex := (x >> 20) & 1\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rn), ArrangementD, uint8(index), 0}\n\n\tcase arg_Vn_arrangement_imm5___B_1__H_2_index__imm5__imm5lt41gt_1__imm5lt42gt_2_1:\n\t\tvar a Arrangement\n\t\tvar index uint32\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\tif imm5&1 == 1 {\n\t\t\ta = ArrangementB\n\t\t\tindex = imm5 >> 1\n\t\t} else if imm5&2 == 2 {\n\t\t\ta = ArrangementH\n\t\t\tindex = imm5 >> 2\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rn), a, uint8(index), 0}\n\n\tcase arg_Vn_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5_imm4__imm4lt30gt_1__imm4lt31gt_2__imm4lt32gt_4__imm4lt3gt_8_1:\n\t\tvar a Arrangement\n\t\tvar index uint32\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\timm4 := (x >> 11) & (1<<4 - 1)\n\t\tif imm5&1 == 1 {\n\t\t\ta = ArrangementB\n\t\t\tindex = imm4\n\t\t} else if imm5&2 == 2 {\n\t\t\ta = ArrangementH\n\t\t\tindex = imm4 >> 1\n\t\t} else if imm5&4 == 4 {\n\t\t\ta = ArrangementS\n\t\t\tindex = imm4 >> 2\n\t\t} else if imm5&8 == 8 {\n\t\t\ta = ArrangementD\n\t\t\tindex = imm4 >> 3\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rn), a, uint8(index), 0}\n\n\tcase arg_Vn_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1:\n\t\tvar a Arrangement\n\t\tvar index uint32\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\tif imm5&1 == 1 {\n\t\t\ta = ArrangementB\n\t\t\tindex = imm5 >> 1\n\t\t} else if imm5&2 == 2 {\n\t\t\ta = ArrangementH\n\t\t\tindex = imm5 >> 2\n\t\t} else if imm5&4 == 4 {\n\t\t\ta = ArrangementS\n\t\t\tindex = imm5 >> 3\n\t\t} else if imm5&8 == 8 {\n\t\t\ta = ArrangementD\n\t\t\tindex = imm5 >> 4\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rn), a, uint8(index), 0}\n\n\tcase arg_Vn_arrangement_imm5___B_1__H_2__S_4_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4_1:\n\t\tvar a Arrangement\n\t\tvar index uint32\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\tif imm5&1 == 1 {\n\t\t\ta = ArrangementB\n\t\t\tindex = imm5 >> 1\n\t\t} else if imm5&2 == 2 {\n\t\t\ta = ArrangementH\n\t\t\tindex = imm5 >> 2\n\t\t} else if imm5&4 == 4 {\n\t\t\ta = ArrangementS\n\t\t\tindex = imm5 >> 3\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rn), a, uint8(index), 0}\n\n\tcase arg_Vn_arrangement_imm5___D_8_index__imm5_1:\n\t\tvar a Arrangement\n\t\tvar index uint32\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\tif imm5&15 == 8 {\n\t\t\ta = ArrangementD\n\t\t\tindex = imm5 >> 4\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rn), a, uint8(index), 0}\n\n\tcase arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif immh>>2 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t\t}\n\t\t} else if immh>>3 == 1 {\n\t\t\tif Q == 1 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif immh == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8B, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\t\t\t}\n\t\t} else if immh>>1 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4H, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t\t}\n\t\t} else if immh>>2 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif immh == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8B, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\t\t\t}\n\t\t} else if immh>>1 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4H, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t\t}\n\t\t} else if immh>>2 == 1 {\n\t\t\tif Q == 0 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t\t} else {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t\t}\n\t\t} else if immh>>3 == 1 {\n\t\t\tif Q == 1 {\n\t\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t\t}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timmh := (x >> 19) & (1<<4 - 1)\n\t\tif immh == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t} else if immh>>1 == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t} else if immh>>2 == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_Q___8B_0__16B_1:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tif Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8B, 0}\n\t\t} else {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\t\t}\n\n\tcase arg_Vn_arrangement_Q_sz___2S_00__4S_10__2D_11:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsz := (x >> 22) & 1\n\t\tif sz == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t} else if sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t} else if sz == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_Q_sz___4S_10:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsz := (x >> 22) & 1\n\t\tif sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_S_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4_1:\n\t\tvar index uint32\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\timm5 := (x >> 16) & (1<<5 - 1)\n\t\tindex = imm5 >> 3\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rn), ArrangementS, uint8(index), 0}\n\n\tcase arg_Vn_arrangement_size___2D_3:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tif size == 3 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_size___8H_0__4S_1__2D_2:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tif size == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t} else if size == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t} else if size == 2 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_size_Q___8B_00__16B_01:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_size_Q___8B_00__16B_01__1D_30__2D_31:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\t\t} else if size == 3 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement1D, 0}\n\t\t} else if size == 3 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t} else if size == 3 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__4S_21:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsize := (x >> 22) & 3\n\t\tQ := (x >> 30) & 1\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8B, 0}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement16B, 0}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4H, 0}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_sz___2D_1:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tif sz == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_sz___2S_0__2D_1:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tif sz == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t} else {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\n\tcase arg_Vn_arrangement_sz___4S_0__2D_1:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tif sz == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t} else {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\n\tcase arg_Vn_arrangement_sz_Q___2S_00__4S_01:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tQ := (x >> 30) & 1\n\t\tif sz == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t} else if sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tQ := (x >> 30) & 1\n\t\tif sz == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t} else if sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t} else if sz == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2D, 0}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vn_arrangement_sz_Q___4H_00__8H_01__2S_10__4S_11:\n\t\tRn := (x >> 5) & (1<<5 - 1)\n\t\tsz := (x >> 22) & 1\n\t\tQ := (x >> 30) & 1\n\t\tif sz == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4H, 0}\n\t\t} else if sz == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement8H, 0}\n\t\t} else if sz == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement2S, 0}\n\t\t} else /* sz == 1 && Q == 1 */ {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rn), Arrangement4S, 0}\n\t\t}\n\n\tcase arg_Vt_1_arrangement_B_index__Q_S_size_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tsize := (x >> 10) & 3\n\t\tindex := (Q << 3) | (S << 2) | (size)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementB, uint8(index), 1}\n\n\tcase arg_Vt_1_arrangement_D_index__Q_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tindex := (x >> 30) & 1\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementD, uint8(index), 1}\n\n\tcase arg_Vt_1_arrangement_H_index__Q_S_size_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tsize := (x >> 11) & 1\n\t\tindex := (Q << 2) | (S << 1) | (size)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementH, uint8(index), 1}\n\n\tcase arg_Vt_1_arrangement_S_index__Q_S_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tindex := (Q << 1) | S\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementS, uint8(index), 1}\n\n\tcase arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsize := (x >> 10) & 3\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8B, 1}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement16B, 1}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4H, 1}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8H, 1}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2S, 1}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4S, 1}\n\t\t} else if size == 3 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement1D, 1}\n\t\t} else /* size == 3 && Q == 1 */ {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2D, 1}\n\t\t}\n\n\tcase arg_Vt_2_arrangement_B_index__Q_S_size_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tsize := (x >> 10) & 3\n\t\tindex := (Q << 3) | (S << 2) | (size)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementB, uint8(index), 2}\n\n\tcase arg_Vt_2_arrangement_D_index__Q_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tindex := (x >> 30) & 1\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementD, uint8(index), 2}\n\n\tcase arg_Vt_2_arrangement_H_index__Q_S_size_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tsize := (x >> 11) & 1\n\t\tindex := (Q << 2) | (S << 1) | (size)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementH, uint8(index), 2}\n\n\tcase arg_Vt_2_arrangement_S_index__Q_S_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tindex := (Q << 1) | S\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementS, uint8(index), 2}\n\n\tcase arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsize := (x >> 10) & 3\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8B, 2}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement16B, 2}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4H, 2}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8H, 2}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2S, 2}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4S, 2}\n\t\t} else if size == 3 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement1D, 2}\n\t\t} else /* size == 3 && Q == 1 */ {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2D, 2}\n\t\t}\n\n\tcase arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsize := (x >> 10) & 3\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8B, 2}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement16B, 2}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4H, 2}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8H, 2}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2S, 2}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4S, 2}\n\t\t} else if size == 3 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2D, 2}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vt_3_arrangement_B_index__Q_S_size_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tsize := (x >> 10) & 3\n\t\tindex := (Q << 3) | (S << 2) | (size)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementB, uint8(index), 3}\n\n\tcase arg_Vt_3_arrangement_D_index__Q_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tindex := (x >> 30) & 1\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementD, uint8(index), 3}\n\n\tcase arg_Vt_3_arrangement_H_index__Q_S_size_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tsize := (x >> 11) & 1\n\t\tindex := (Q << 2) | (S << 1) | (size)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementH, uint8(index), 3}\n\n\tcase arg_Vt_3_arrangement_S_index__Q_S_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tindex := (Q << 1) | S\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementS, uint8(index), 3}\n\n\tcase arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsize := (x >> 10) & 3\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8B, 3}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement16B, 3}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4H, 3}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8H, 3}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2S, 3}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4S, 3}\n\t\t} else if size == 3 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement1D, 3}\n\t\t} else /* size == 3 && Q == 1 */ {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2D, 3}\n\t\t}\n\n\tcase arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsize := (x >> 10) & 3\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8B, 3}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement16B, 3}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4H, 3}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8H, 3}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2S, 3}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4S, 3}\n\t\t} else if size == 3 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2D, 3}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Vt_4_arrangement_B_index__Q_S_size_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tsize := (x >> 10) & 3\n\t\tindex := (Q << 3) | (S << 2) | (size)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementB, uint8(index), 4}\n\n\tcase arg_Vt_4_arrangement_D_index__Q_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tindex := (x >> 30) & 1\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementD, uint8(index), 4}\n\n\tcase arg_Vt_4_arrangement_H_index__Q_S_size_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tsize := (x >> 11) & 1\n\t\tindex := (Q << 2) | (S << 1) | (size)\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementH, uint8(index), 4}\n\n\tcase arg_Vt_4_arrangement_S_index__Q_S_1:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tS := (x >> 12) & 1\n\t\tindex := (Q << 1) | S\n\t\treturn RegisterWithArrangementAndIndex{V0 + Reg(Rt), ArrangementS, uint8(index), 4}\n\n\tcase arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsize := (x >> 10) & 3\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8B, 4}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement16B, 4}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4H, 4}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8H, 4}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2S, 4}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4S, 4}\n\t\t} else if size == 3 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement1D, 4}\n\t\t} else /* size == 3 && Q == 1 */ {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2D, 4}\n\t\t}\n\n\tcase arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31:\n\t\tRt := x & (1<<5 - 1)\n\t\tQ := (x >> 30) & 1\n\t\tsize := (x >> 10) & 3\n\t\tif size == 0 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8B, 4}\n\t\t} else if size == 0 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement16B, 4}\n\t\t} else if size == 1 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4H, 4}\n\t\t} else if size == 1 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement8H, 4}\n\t\t} else if size == 2 && Q == 0 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2S, 4}\n\t\t} else if size == 2 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement4S, 4}\n\t\t} else if size == 3 && Q == 1 {\n\t\t\treturn RegisterWithArrangement{V0 + Reg(Rt), Arrangement2D, 4}\n\t\t}\n\t\treturn nil\n\n\tcase arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__4_1:\n\t\treturn handle_MemExtend(x, 4, false)\n\n\tcase arg_Xns_mem_offset:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrOffset, 0}\n\n\tcase arg_Xns_mem_optional_imm12_16_unsigned:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm12 := (x >> 10) & (1<<12 - 1)\n\t\treturn MemImmediate{Rn, AddrOffset, int32(imm12 << 4)}\n\n\tcase arg_Xns_mem_optional_imm7_16_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm7 := (x >> 15) & (1<<7 - 1)\n\t\treturn MemImmediate{Rn, AddrOffset, ((int32(imm7 << 4)) << 21) >> 21}\n\n\tcase arg_Xns_mem_post_fixedimm_1:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 1}\n\n\tcase arg_Xns_mem_post_fixedimm_12:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 12}\n\n\tcase arg_Xns_mem_post_fixedimm_16:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 16}\n\n\tcase arg_Xns_mem_post_fixedimm_2:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 2}\n\n\tcase arg_Xns_mem_post_fixedimm_24:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 24}\n\n\tcase arg_Xns_mem_post_fixedimm_3:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 3}\n\n\tcase arg_Xns_mem_post_fixedimm_32:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 32}\n\n\tcase arg_Xns_mem_post_fixedimm_4:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 4}\n\n\tcase arg_Xns_mem_post_fixedimm_6:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 6}\n\n\tcase arg_Xns_mem_post_fixedimm_8:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\treturn MemImmediate{Rn, AddrPostIndex, 8}\n\n\tcase arg_Xns_mem_post_imm7_16_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm7 := (x >> 15) & (1<<7 - 1)\n\t\treturn MemImmediate{Rn, AddrPostIndex, ((int32(imm7 << 4)) << 21) >> 21}\n\n\tcase arg_Xns_mem_post_Q__16_0__32_1:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\tQ := (x >> 30) & 1\n\t\treturn MemImmediate{Rn, AddrPostIndex, int32((Q + 1) * 16)}\n\n\tcase arg_Xns_mem_post_Q__24_0__48_1:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\tQ := (x >> 30) & 1\n\t\treturn MemImmediate{Rn, AddrPostIndex, int32((Q + 1) * 24)}\n\n\tcase arg_Xns_mem_post_Q__32_0__64_1:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\tQ := (x >> 30) & 1\n\t\treturn MemImmediate{Rn, AddrPostIndex, int32((Q + 1) * 32)}\n\n\tcase arg_Xns_mem_post_Q__8_0__16_1:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\tQ := (x >> 30) & 1\n\t\treturn MemImmediate{Rn, AddrPostIndex, int32((Q + 1) * 8)}\n\n\tcase arg_Xns_mem_post_size__1_0__2_1__4_2__8_3:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\tsize := (x >> 10) & 3\n\t\treturn MemImmediate{Rn, AddrPostIndex, int32(1 << size)}\n\n\tcase arg_Xns_mem_post_size__2_0__4_1__8_2__16_3:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\tsize := (x >> 10) & 3\n\t\treturn MemImmediate{Rn, AddrPostIndex, int32(2 << size)}\n\n\tcase arg_Xns_mem_post_size__3_0__6_1__12_2__24_3:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\tsize := (x >> 10) & 3\n\t\treturn MemImmediate{Rn, AddrPostIndex, int32(3 << size)}\n\n\tcase arg_Xns_mem_post_size__4_0__8_1__16_2__32_3:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\tsize := (x >> 10) & 3\n\t\treturn MemImmediate{Rn, AddrPostIndex, int32(4 << size)}\n\n\tcase arg_Xns_mem_post_Xm:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\tRm := (x >> 16) & (1<<5 - 1)\n\t\treturn MemImmediate{Rn, AddrPostReg, int32(Rm)}\n\n\tcase arg_Xns_mem_wb_imm7_16_signed:\n\t\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\t\timm7 := (x >> 15) & (1<<7 - 1)\n\t\treturn MemImmediate{Rn, AddrPreIndex, ((int32(imm7 << 4)) << 21) >> 21}\n\t}\n}\n\nfunc handle_ExtendedRegister(x uint32, has_width bool) Arg {\n\ts := (x >> 29) & 1\n\trm := (x >> 16) & (1<<5 - 1)\n\toption := (x >> 13) & (1<<3 - 1)\n\timm3 := (x >> 10) & (1<<3 - 1)\n\trn := (x >> 5) & (1<<5 - 1)\n\trd := x & (1<<5 - 1)\n\tis_32bit := !has_width\n\tvar rea RegExtshiftAmount\n\tif has_width {\n\t\tif option&0x3 != 0x3 {\n\t\t\trea.reg = W0 + Reg(rm)\n\t\t} else {\n\t\t\trea.reg = X0 + Reg(rm)\n\t\t}\n\t} else {\n\t\trea.reg = W0 + Reg(rm)\n\t}\n\tswitch option {\n\tcase 0:\n\t\trea.extShift = uxtb\n\tcase 1:\n\t\trea.extShift = uxth\n\tcase 2:\n\t\tif is_32bit && (rn == 31 || (s == 0 && rd == 31)) {\n\t\t\tif imm3 != 0 {\n\t\t\t\trea.extShift = lsl\n\t\t\t} else {\n\t\t\t\trea.extShift = ExtShift(0)\n\t\t\t}\n\t\t} else {\n\t\t\trea.extShift = uxtw\n\t\t}\n\tcase 3:\n\t\tif !is_32bit && (rn == 31 || (s == 0 && rd == 31)) {\n\t\t\tif imm3 != 0 {\n\t\t\t\trea.extShift = lsl\n\t\t\t} else {\n\t\t\t\trea.extShift = ExtShift(0)\n\t\t\t}\n\t\t} else {\n\t\t\trea.extShift = uxtx\n\t\t}\n\tcase 4:\n\t\trea.extShift = sxtb\n\tcase 5:\n\t\trea.extShift = sxth\n\tcase 6:\n\t\trea.extShift = sxtw\n\tcase 7:\n\t\trea.extShift = sxtx\n\t}\n\trea.show_zero = false\n\trea.amount = uint8(imm3)\n\treturn rea\n}\n\nfunc handle_ImmediateShiftedRegister(x uint32, max uint8, is_w, has_ror bool) Arg {\n\tvar rsa RegExtshiftAmount\n\tif is_w {\n\t\trsa.reg = W0 + Reg((x>>16)&(1<<5-1))\n\t} else {\n\t\trsa.reg = X0 + Reg((x>>16)&(1<<5-1))\n\t}\n\tswitch (x >> 22) & 0x3 {\n\tcase 0:\n\t\trsa.extShift = lsl\n\tcase 1:\n\t\trsa.extShift = lsr\n\tcase 2:\n\t\trsa.extShift = asr\n\tcase 3:\n\t\tif has_ror {\n\t\t\trsa.extShift = ror\n\t\t} else {\n\t\t\treturn nil\n\t\t}\n\t}\n\trsa.show_zero = true\n\trsa.amount = uint8((x >> 10) & (1<<6 - 1))\n\tif rsa.amount == 0 && rsa.extShift == lsl {\n\t\trsa.extShift = ExtShift(0)\n\t} else if rsa.amount > max {\n\t\treturn nil\n\t}\n\treturn rsa\n}\n\nfunc handle_MemExtend(x uint32, mult uint8, absent bool) Arg {\n\tvar extend ExtShift\n\tvar Rm Reg\n\toption := (x >> 13) & (1<<3 - 1)\n\tRn := RegSP(X0) + RegSP(x>>5&(1<<5-1))\n\tif (option & 1) != 0 {\n\t\tRm = Reg(X0) + Reg(x>>16&(1<<5-1))\n\t} else {\n\t\tRm = Reg(W0) + Reg(x>>16&(1<<5-1))\n\t}\n\tswitch option {\n\tdefault:\n\t\treturn nil\n\tcase 2:\n\t\textend = uxtw\n\tcase 3:\n\t\textend = lsl\n\tcase 6:\n\t\textend = sxtw\n\tcase 7:\n\t\textend = sxtx\n\t}\n\tamount := (uint8((x >> 12) & 1)) * mult\n\treturn MemExtend{Rn, Rm, extend, amount, absent}\n}\n\nfunc handle_bitmasks(x uint32, datasize uint8) Arg {\n\tvar length, levels, esize, i uint8\n\tvar welem, wmask uint64\n\tn := (x >> 22) & 1\n\timms := uint8((x >> 10) & (1<<6 - 1))\n\timmr := uint8((x >> 16) & (1<<6 - 1))\n\tif n != 0 {\n\t\tlength = 6\n\t} else if (imms & 32) == 0 {\n\t\tlength = 5\n\t} else if (imms & 16) == 0 {\n\t\tlength = 4\n\t} else if (imms & 8) == 0 {\n\t\tlength = 3\n\t} else if (imms & 4) == 0 {\n\t\tlength = 2\n\t} else if (imms & 2) == 0 {\n\t\tlength = 1\n\t} else {\n\t\treturn nil\n\t}\n\tlevels = 1<<length - 1\n\ts := imms & levels\n\tr := immr & levels\n\tesize = 1 << length\n\tif esize > datasize {\n\t\treturn nil\n\t}\n\twelem = 1<<(s+1) - 1\n\tror := (welem >> r) | (welem << (esize - r))\n\tror &= ((1 << esize) - 1)\n\twmask = 0\n\tfor i = 0; i < datasize; i += esize {\n\t\twmask = (wmask << esize) | ror\n\t}\n\treturn Imm64{wmask, false}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/arm64/arm64asm/gnu.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage arm64asm\n\nimport (\n\t\"strings\"\n)\n\n// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.\n// This form typically matches the syntax defined in the ARM Reference Manual.\nfunc GNUSyntax(inst Inst) string {\n\tswitch inst.Op {\n\tcase RET:\n\t\tif r, ok := inst.Args[0].(Reg); ok && r == X30 {\n\t\t\treturn \"ret\"\n\t\t}\n\tcase B:\n\t\tif _, ok := inst.Args[0].(Cond); ok {\n\t\t\treturn strings.ToLower(\"b.\" + inst.Args[0].String() + \" \" + inst.Args[1].String())\n\t\t}\n\tcase SYSL:\n\t\tresult := strings.ToLower(inst.String())\n\t\treturn strings.Replace(result, \"c\", \"C\", -1)\n\tcase DCPS1, DCPS2, DCPS3, CLREX:\n\t\treturn strings.ToLower(strings.TrimSpace(inst.String()))\n\tcase ISB:\n\t\tif strings.Contains(inst.String(), \"SY\") {\n\t\t\tresult := strings.TrimSuffix(inst.String(), \" SY\")\n\t\t\treturn strings.ToLower(result)\n\t\t}\n\t}\n\treturn strings.ToLower(inst.String())\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/arm64/arm64asm/inst.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage arm64asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// An Op is an ARM64 opcode.\ntype Op uint16\n\n// NOTE: The actual Op values are defined in tables.go.\n// They are chosen to simplify instruction decoding and\n// are not a dense packing from 0 to N, although the\n// density is high, probably at least 90%.\n\nfunc (op Op) String() string {\n\tif op >= Op(len(opstr)) || opstr[op] == \"\" {\n\t\treturn fmt.Sprintf(\"Op(%d)\", int(op))\n\t}\n\treturn opstr[op]\n}\n\n// An Inst is a single instruction.\ntype Inst struct {\n\tOp   Op     // Opcode mnemonic\n\tEnc  uint32 // Raw encoding bits.\n\tArgs Args   // Instruction arguments, in ARM manual order.\n}\n\nfunc (i Inst) String() string {\n\tvar args []string\n\tfor _, arg := range i.Args {\n\t\tif arg == nil {\n\t\t\tbreak\n\t\t}\n\t\targs = append(args, arg.String())\n\t}\n\treturn i.Op.String() + \" \" + strings.Join(args, \", \")\n}\n\n// An Args holds the instruction arguments.\n// If an instruction has fewer than 5 arguments,\n// the final elements in the array are nil.\ntype Args [5]Arg\n\n// An Arg is a single instruction argument, one of these types:\n// Reg, RegSP, ImmShift, RegExtshiftAmount, PCRel, MemImmediate,\n// MemExtend, Imm, Imm64, Imm_hint, Imm_clrex, Imm_dcps, Cond,\n// Imm_c, Imm_option, Imm_prfop, Pstatefield, Systemreg, Imm_fp\n// RegisterWithArrangement, RegisterWithArrangementAndIndex.\ntype Arg interface {\n\tisArg()\n\tString() string\n}\n\n// A Reg is a single register.\n// The zero value denotes W0, not the absence of a register.\ntype Reg uint16\n\nconst (\n\tW0 Reg = iota\n\tW1\n\tW2\n\tW3\n\tW4\n\tW5\n\tW6\n\tW7\n\tW8\n\tW9\n\tW10\n\tW11\n\tW12\n\tW13\n\tW14\n\tW15\n\tW16\n\tW17\n\tW18\n\tW19\n\tW20\n\tW21\n\tW22\n\tW23\n\tW24\n\tW25\n\tW26\n\tW27\n\tW28\n\tW29\n\tW30\n\tWZR\n\n\tX0\n\tX1\n\tX2\n\tX3\n\tX4\n\tX5\n\tX6\n\tX7\n\tX8\n\tX9\n\tX10\n\tX11\n\tX12\n\tX13\n\tX14\n\tX15\n\tX16\n\tX17\n\tX18\n\tX19\n\tX20\n\tX21\n\tX22\n\tX23\n\tX24\n\tX25\n\tX26\n\tX27\n\tX28\n\tX29\n\tX30\n\tXZR\n\n\tB0\n\tB1\n\tB2\n\tB3\n\tB4\n\tB5\n\tB6\n\tB7\n\tB8\n\tB9\n\tB10\n\tB11\n\tB12\n\tB13\n\tB14\n\tB15\n\tB16\n\tB17\n\tB18\n\tB19\n\tB20\n\tB21\n\tB22\n\tB23\n\tB24\n\tB25\n\tB26\n\tB27\n\tB28\n\tB29\n\tB30\n\tB31\n\n\tH0\n\tH1\n\tH2\n\tH3\n\tH4\n\tH5\n\tH6\n\tH7\n\tH8\n\tH9\n\tH10\n\tH11\n\tH12\n\tH13\n\tH14\n\tH15\n\tH16\n\tH17\n\tH18\n\tH19\n\tH20\n\tH21\n\tH22\n\tH23\n\tH24\n\tH25\n\tH26\n\tH27\n\tH28\n\tH29\n\tH30\n\tH31\n\n\tS0\n\tS1\n\tS2\n\tS3\n\tS4\n\tS5\n\tS6\n\tS7\n\tS8\n\tS9\n\tS10\n\tS11\n\tS12\n\tS13\n\tS14\n\tS15\n\tS16\n\tS17\n\tS18\n\tS19\n\tS20\n\tS21\n\tS22\n\tS23\n\tS24\n\tS25\n\tS26\n\tS27\n\tS28\n\tS29\n\tS30\n\tS31\n\n\tD0\n\tD1\n\tD2\n\tD3\n\tD4\n\tD5\n\tD6\n\tD7\n\tD8\n\tD9\n\tD10\n\tD11\n\tD12\n\tD13\n\tD14\n\tD15\n\tD16\n\tD17\n\tD18\n\tD19\n\tD20\n\tD21\n\tD22\n\tD23\n\tD24\n\tD25\n\tD26\n\tD27\n\tD28\n\tD29\n\tD30\n\tD31\n\n\tQ0\n\tQ1\n\tQ2\n\tQ3\n\tQ4\n\tQ5\n\tQ6\n\tQ7\n\tQ8\n\tQ9\n\tQ10\n\tQ11\n\tQ12\n\tQ13\n\tQ14\n\tQ15\n\tQ16\n\tQ17\n\tQ18\n\tQ19\n\tQ20\n\tQ21\n\tQ22\n\tQ23\n\tQ24\n\tQ25\n\tQ26\n\tQ27\n\tQ28\n\tQ29\n\tQ30\n\tQ31\n\n\tV0\n\tV1\n\tV2\n\tV3\n\tV4\n\tV5\n\tV6\n\tV7\n\tV8\n\tV9\n\tV10\n\tV11\n\tV12\n\tV13\n\tV14\n\tV15\n\tV16\n\tV17\n\tV18\n\tV19\n\tV20\n\tV21\n\tV22\n\tV23\n\tV24\n\tV25\n\tV26\n\tV27\n\tV28\n\tV29\n\tV30\n\tV31\n\n\tWSP = WZR // These are different registers with the same encoding.\n\tSP  = XZR // These are different registers with the same encoding.\n)\n\nfunc (Reg) isArg() {}\n\nfunc (r Reg) String() string {\n\tswitch {\n\tcase r == WZR:\n\t\treturn \"WZR\"\n\tcase r == XZR:\n\t\treturn \"XZR\"\n\tcase W0 <= r && r <= W30:\n\t\treturn fmt.Sprintf(\"W%d\", int(r-W0))\n\tcase X0 <= r && r <= X30:\n\t\treturn fmt.Sprintf(\"X%d\", int(r-X0))\n\n\tcase B0 <= r && r <= B31:\n\t\treturn fmt.Sprintf(\"B%d\", int(r-B0))\n\tcase H0 <= r && r <= H31:\n\t\treturn fmt.Sprintf(\"H%d\", int(r-H0))\n\tcase S0 <= r && r <= S31:\n\t\treturn fmt.Sprintf(\"S%d\", int(r-S0))\n\tcase D0 <= r && r <= D31:\n\t\treturn fmt.Sprintf(\"D%d\", int(r-D0))\n\tcase Q0 <= r && r <= Q31:\n\t\treturn fmt.Sprintf(\"Q%d\", int(r-Q0))\n\n\tcase V0 <= r && r <= V31:\n\t\treturn fmt.Sprintf(\"V%d\", int(r-V0))\n\tdefault:\n\t\treturn fmt.Sprintf(\"Reg(%d)\", int(r))\n\t}\n}\n\n// A RegSP represent a register and X31/W31 is regarded as SP/WSP.\ntype RegSP Reg\n\nfunc (RegSP) isArg() {}\n\nfunc (r RegSP) String() string {\n\tswitch Reg(r) {\n\tcase WSP:\n\t\treturn \"WSP\"\n\tcase SP:\n\t\treturn \"SP\"\n\tdefault:\n\t\treturn Reg(r).String()\n\t}\n}\n\ntype ImmShift struct {\n\timm   uint16\n\tshift uint8\n}\n\nfunc (ImmShift) isArg() {}\n\nfunc (is ImmShift) String() string {\n\tif is.shift == 0 {\n\t\treturn fmt.Sprintf(\"#%#x\", is.imm)\n\t}\n\tif is.shift < 128 {\n\t\treturn fmt.Sprintf(\"#%#x, LSL #%d\", is.imm, is.shift)\n\t}\n\treturn fmt.Sprintf(\"#%#x, MSL #%d\", is.imm, is.shift-128)\n}\n\ntype ExtShift uint8\n\nconst (\n\t_ ExtShift = iota\n\tuxtb\n\tuxth\n\tuxtw\n\tuxtx\n\tsxtb\n\tsxth\n\tsxtw\n\tsxtx\n\tlsl\n\tlsr\n\tasr\n\tror\n)\n\nfunc (extShift ExtShift) String() string {\n\tswitch extShift {\n\tcase uxtb:\n\t\treturn \"UXTB\"\n\n\tcase uxth:\n\t\treturn \"UXTH\"\n\n\tcase uxtw:\n\t\treturn \"UXTW\"\n\n\tcase uxtx:\n\t\treturn \"UXTX\"\n\n\tcase sxtb:\n\t\treturn \"SXTB\"\n\n\tcase sxth:\n\t\treturn \"SXTH\"\n\n\tcase sxtw:\n\t\treturn \"SXTW\"\n\n\tcase sxtx:\n\t\treturn \"SXTX\"\n\n\tcase lsl:\n\t\treturn \"LSL\"\n\n\tcase lsr:\n\t\treturn \"LSR\"\n\n\tcase asr:\n\t\treturn \"ASR\"\n\n\tcase ror:\n\t\treturn \"ROR\"\n\t}\n\treturn \"\"\n}\n\ntype RegExtshiftAmount struct {\n\treg       Reg\n\textShift  ExtShift\n\tamount    uint8\n\tshow_zero bool\n}\n\nfunc (RegExtshiftAmount) isArg() {}\n\nfunc (rea RegExtshiftAmount) String() string {\n\tbuf := rea.reg.String()\n\tif rea.extShift != ExtShift(0) {\n\t\tbuf += \", \" + rea.extShift.String()\n\t\tif rea.amount != 0 {\n\t\t\tbuf += fmt.Sprintf(\" #%d\", rea.amount)\n\t\t} else {\n\t\t\tif rea.show_zero == true {\n\t\t\t\tbuf += fmt.Sprintf(\" #%d\", rea.amount)\n\t\t\t}\n\t\t}\n\t}\n\treturn buf\n}\n\n// A PCRel describes a memory address (usually a code label)\n// as a distance relative to the program counter.\ntype PCRel int64\n\nfunc (PCRel) isArg() {}\n\nfunc (r PCRel) String() string {\n\treturn fmt.Sprintf(\".%+#x\", uint64(r))\n}\n\n// An AddrMode is an ARM addressing mode.\ntype AddrMode uint8\n\nconst (\n\t_             AddrMode = iota\n\tAddrPostIndex          // [R], X - use address R, set R = R + X\n\tAddrPreIndex           // [R, X]! - use address R + X, set R = R + X\n\tAddrOffset             // [R, X] - use address R + X\n\tAddrPostReg            // [Rn], Rm - - use address Rn, set Rn = Rn + Rm\n)\n\n// A MemImmediate is a memory reference made up of a base R and immediate X.\n// The effective memory address is R or R+X depending on AddrMode.\ntype MemImmediate struct {\n\tBase RegSP\n\tMode AddrMode\n\timm  int32\n}\n\nfunc (MemImmediate) isArg() {}\n\nfunc (m MemImmediate) String() string {\n\tR := m.Base.String()\n\tX := fmt.Sprintf(\"#%d\", m.imm)\n\n\tswitch m.Mode {\n\tcase AddrOffset:\n\t\tif X == \"#0\" {\n\t\t\treturn fmt.Sprintf(\"[%s]\", R)\n\t\t}\n\t\treturn fmt.Sprintf(\"[%s,%s]\", R, X)\n\tcase AddrPreIndex:\n\t\treturn fmt.Sprintf(\"[%s,%s]!\", R, X)\n\tcase AddrPostIndex:\n\t\treturn fmt.Sprintf(\"[%s],%s\", R, X)\n\tcase AddrPostReg:\n\t\tpost := Reg(X0) + Reg(m.imm)\n\t\tpostR := post.String()\n\t\treturn fmt.Sprintf(\"[%s], %s\", R, postR)\n\t}\n\treturn fmt.Sprintf(\"unimplemented!\")\n}\n\n// A MemExtend is a memory reference made up of a base R and index expression X.\n// The effective memory address is R or R+X depending on Index, Extend and Amount.\ntype MemExtend struct {\n\tBase   RegSP\n\tIndex  Reg\n\tExtend ExtShift\n\t// Amount indicates the index shift amount (but also see ShiftMustBeZero field below).\n\tAmount uint8\n\t// Refer to ARM reference manual, for byte load/store(register), the index\n\t// shift amount must be 0, encoded in \"S\" as 0 if omitted, or as 1 if present.\n\t// a.ShiftMustBeZero is set true indicates the index shift amount must be 0.\n\t// In GNU syntax, a #0 shift amount is printed if Amount is 1 but ShiftMustBeZero\n\t// is true; #0 is not printed if Amount is 0 and ShiftMustBeZero is true.\n\t// Both cases represent shift by 0 bit.\n\tShiftMustBeZero bool\n}\n\nfunc (MemExtend) isArg() {}\n\nfunc (m MemExtend) String() string {\n\tRbase := m.Base.String()\n\tRIndex := m.Index.String()\n\tif m.ShiftMustBeZero {\n\t\tif m.Amount != 0 {\n\t\t\treturn fmt.Sprintf(\"[%s,%s,%s #0]\", Rbase, RIndex, m.Extend.String())\n\t\t} else {\n\t\t\tif m.Extend != lsl {\n\t\t\t\treturn fmt.Sprintf(\"[%s,%s,%s]\", Rbase, RIndex, m.Extend.String())\n\t\t\t} else {\n\t\t\t\treturn fmt.Sprintf(\"[%s,%s]\", Rbase, RIndex)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif m.Amount != 0 {\n\t\t\treturn fmt.Sprintf(\"[%s,%s,%s #%d]\", Rbase, RIndex, m.Extend.String(), m.Amount)\n\t\t} else {\n\t\t\tif m.Extend != lsl {\n\t\t\t\treturn fmt.Sprintf(\"[%s,%s,%s]\", Rbase, RIndex, m.Extend.String())\n\t\t\t} else {\n\t\t\t\treturn fmt.Sprintf(\"[%s,%s]\", Rbase, RIndex)\n\t\t\t}\n\t\t}\n\t}\n}\n\n// An Imm is an integer constant.\ntype Imm struct {\n\tImm     uint32\n\tDecimal bool\n}\n\nfunc (Imm) isArg() {}\n\nfunc (i Imm) String() string {\n\tif !i.Decimal {\n\t\treturn fmt.Sprintf(\"#%#x\", i.Imm)\n\t} else {\n\t\treturn fmt.Sprintf(\"#%d\", i.Imm)\n\t}\n}\n\ntype Imm64 struct {\n\tImm     uint64\n\tDecimal bool\n}\n\nfunc (Imm64) isArg() {}\n\nfunc (i Imm64) String() string {\n\tif !i.Decimal {\n\t\treturn fmt.Sprintf(\"#%#x\", i.Imm)\n\t} else {\n\t\treturn fmt.Sprintf(\"#%d\", i.Imm)\n\t}\n}\n\n// An Imm_hint is an integer constant for HINT instruction.\ntype Imm_hint uint8\n\nfunc (Imm_hint) isArg() {}\n\nfunc (i Imm_hint) String() string {\n\treturn fmt.Sprintf(\"#%#x\", uint32(i))\n}\n\n// An Imm_clrex is an integer constant for CLREX instruction.\ntype Imm_clrex uint8\n\nfunc (Imm_clrex) isArg() {}\n\nfunc (i Imm_clrex) String() string {\n\tif i == 15 {\n\t\treturn \"\"\n\t}\n\treturn fmt.Sprintf(\"#%#x\", uint32(i))\n}\n\n// An Imm_dcps is an integer constant for DCPS[123] instruction.\ntype Imm_dcps uint16\n\nfunc (Imm_dcps) isArg() {}\n\nfunc (i Imm_dcps) String() string {\n\tif i == 0 {\n\t\treturn \"\"\n\t}\n\treturn fmt.Sprintf(\"#%#x\", uint32(i))\n}\n\n// Standard conditions.\ntype Cond struct {\n\tValue  uint8\n\tInvert bool\n}\n\nfunc (Cond) isArg() {}\n\nfunc (c Cond) String() string {\n\tcond31 := c.Value >> 1\n\tinvert := bool((c.Value & 1) == 1)\n\tinvert = (invert != c.Invert)\n\tswitch cond31 {\n\tcase 0:\n\t\tif invert {\n\t\t\treturn \"NE\"\n\t\t} else {\n\t\t\treturn \"EQ\"\n\t\t}\n\tcase 1:\n\t\tif invert {\n\t\t\treturn \"CC\"\n\t\t} else {\n\t\t\treturn \"CS\"\n\t\t}\n\tcase 2:\n\t\tif invert {\n\t\t\treturn \"PL\"\n\t\t} else {\n\t\t\treturn \"MI\"\n\t\t}\n\tcase 3:\n\t\tif invert {\n\t\t\treturn \"VC\"\n\t\t} else {\n\t\t\treturn \"VS\"\n\t\t}\n\tcase 4:\n\t\tif invert {\n\t\t\treturn \"LS\"\n\t\t} else {\n\t\t\treturn \"HI\"\n\t\t}\n\tcase 5:\n\t\tif invert {\n\t\t\treturn \"LT\"\n\t\t} else {\n\t\t\treturn \"GE\"\n\t\t}\n\tcase 6:\n\t\tif invert {\n\t\t\treturn \"LE\"\n\t\t} else {\n\t\t\treturn \"GT\"\n\t\t}\n\tcase 7:\n\t\treturn \"AL\"\n\t}\n\treturn \"\"\n}\n\n// An Imm_c is an integer constant for SYS/SYSL/TLBI instruction.\ntype Imm_c uint8\n\nfunc (Imm_c) isArg() {}\n\nfunc (i Imm_c) String() string {\n\treturn fmt.Sprintf(\"C%d\", uint8(i))\n}\n\n// An Imm_option is an integer constant for DMB/DSB/ISB instruction.\ntype Imm_option uint8\n\nfunc (Imm_option) isArg() {}\n\nfunc (i Imm_option) String() string {\n\tswitch uint8(i) {\n\tcase 15:\n\t\treturn \"SY\"\n\tcase 14:\n\t\treturn \"ST\"\n\tcase 13:\n\t\treturn \"LD\"\n\tcase 11:\n\t\treturn \"ISH\"\n\tcase 10:\n\t\treturn \"ISHST\"\n\tcase 9:\n\t\treturn \"ISHLD\"\n\tcase 7:\n\t\treturn \"NSH\"\n\tcase 6:\n\t\treturn \"NSHST\"\n\tcase 5:\n\t\treturn \"NSHLD\"\n\tcase 3:\n\t\treturn \"OSH\"\n\tcase 2:\n\t\treturn \"OSHST\"\n\tcase 1:\n\t\treturn \"OSHLD\"\n\t}\n\treturn fmt.Sprintf(\"#%#02x\", uint8(i))\n}\n\n// An Imm_prfop is an integer constant for PRFM instruction.\ntype Imm_prfop uint8\n\nfunc (Imm_prfop) isArg() {}\n\nfunc (i Imm_prfop) String() string {\n\tprf_type := (i >> 3) & (1<<2 - 1)\n\tprf_target := (i >> 1) & (1<<2 - 1)\n\tprf_policy := i & 1\n\tvar result string\n\n\tswitch prf_type {\n\tcase 0:\n\t\tresult = \"PLD\"\n\tcase 1:\n\t\tresult = \"PLI\"\n\tcase 2:\n\t\tresult = \"PST\"\n\tcase 3:\n\t\treturn fmt.Sprintf(\"#%#02x\", uint8(i))\n\t}\n\tswitch prf_target {\n\tcase 0:\n\t\tresult += \"L1\"\n\tcase 1:\n\t\tresult += \"L2\"\n\tcase 2:\n\t\tresult += \"L3\"\n\tcase 3:\n\t\treturn fmt.Sprintf(\"#%#02x\", uint8(i))\n\t}\n\tif prf_policy == 0 {\n\t\tresult += \"KEEP\"\n\t} else {\n\t\tresult += \"STRM\"\n\t}\n\treturn result\n}\n\ntype Pstatefield uint8\n\nconst (\n\tSPSel Pstatefield = iota\n\tDAIFSet\n\tDAIFClr\n)\n\nfunc (Pstatefield) isArg() {}\n\nfunc (p Pstatefield) String() string {\n\tswitch p {\n\tcase SPSel:\n\t\treturn \"SPSel\"\n\tcase DAIFSet:\n\t\treturn \"DAIFSet\"\n\tcase DAIFClr:\n\t\treturn \"DAIFClr\"\n\tdefault:\n\t\treturn \"unimplemented\"\n\t}\n}\n\ntype Systemreg struct {\n\top0 uint8\n\top1 uint8\n\tcn  uint8\n\tcm  uint8\n\top2 uint8\n}\n\nfunc (Systemreg) isArg() {}\n\nfunc (s Systemreg) String() string {\n\treturn fmt.Sprintf(\"S%d_%d_C%d_C%d_%d\",\n\t\ts.op0, s.op1, s.cn, s.cm, s.op2)\n}\n\n// An Imm_fp is a signed floating-point constant.\ntype Imm_fp struct {\n\ts   uint8\n\texp int8\n\tpre uint8\n}\n\nfunc (Imm_fp) isArg() {}\n\nfunc (i Imm_fp) String() string {\n\tvar s, pre, numerator, denominator int16\n\tvar result float64\n\tif i.s == 0 {\n\t\ts = 1\n\t} else {\n\t\ts = -1\n\t}\n\tpre = s * int16(16+i.pre)\n\tif i.exp > 0 {\n\t\tnumerator = (pre << uint8(i.exp))\n\t\tdenominator = 16\n\t} else {\n\t\tnumerator = pre\n\t\tdenominator = (16 << uint8(-1*i.exp))\n\t}\n\tresult = float64(numerator) / float64(denominator)\n\treturn fmt.Sprintf(\"#%.18e\", result)\n}\n\ntype Arrangement uint8\n\nconst (\n\t_ Arrangement = iota\n\tArrangementB\n\tArrangement8B\n\tArrangement16B\n\tArrangementH\n\tArrangement4H\n\tArrangement8H\n\tArrangementS\n\tArrangement2S\n\tArrangement4S\n\tArrangementD\n\tArrangement1D\n\tArrangement2D\n\tArrangement1Q\n)\n\nfunc (a Arrangement) String() (result string) {\n\tswitch a {\n\tcase ArrangementB:\n\t\tresult = \".B\"\n\tcase Arrangement8B:\n\t\tresult = \".8B\"\n\tcase Arrangement16B:\n\t\tresult = \".16B\"\n\tcase ArrangementH:\n\t\tresult = \".H\"\n\tcase Arrangement4H:\n\t\tresult = \".4H\"\n\tcase Arrangement8H:\n\t\tresult = \".8H\"\n\tcase ArrangementS:\n\t\tresult = \".S\"\n\tcase Arrangement2S:\n\t\tresult = \".2S\"\n\tcase Arrangement4S:\n\t\tresult = \".4S\"\n\tcase ArrangementD:\n\t\tresult = \".D\"\n\tcase Arrangement1D:\n\t\tresult = \".1D\"\n\tcase Arrangement2D:\n\t\tresult = \".2D\"\n\tcase Arrangement1Q:\n\t\tresult = \".1Q\"\n\t}\n\treturn\n}\n\n// Register with arrangement: <Vd>.<T>, { <Vt>.8B, <Vt2>.8B},\ntype RegisterWithArrangement struct {\n\tr   Reg\n\ta   Arrangement\n\tcnt uint8\n}\n\nfunc (RegisterWithArrangement) isArg() {}\n\nfunc (r RegisterWithArrangement) String() string {\n\tresult := r.r.String()\n\tresult += r.a.String()\n\tif r.cnt > 0 {\n\t\tresult = \"{\" + result\n\t\tif r.cnt == 2 {\n\t\t\tr1 := V0 + Reg((uint16(r.r)-uint16(V0)+1)&31)\n\t\t\tresult += \", \" + r1.String() + r.a.String()\n\t\t} else if r.cnt > 2 {\n\t\t\tif (uint16(r.cnt) + ((uint16(r.r) - uint16(V0)) & 31)) > 32 {\n\t\t\t\tfor i := 1; i < int(r.cnt); i++ {\n\t\t\t\t\tcur := V0 + Reg((uint16(r.r)-uint16(V0)+uint16(i))&31)\n\t\t\t\t\tresult += \", \" + cur.String() + r.a.String()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tr1 := V0 + Reg((uint16(r.r)-uint16(V0)+uint16(r.cnt)-1)&31)\n\t\t\t\tresult += \"-\" + r1.String() + r.a.String()\n\t\t\t}\n\t\t}\n\t\tresult += \"}\"\n\t}\n\treturn result\n}\n\n// Register with arrangement and index:\n//\n//\t<Vm>.<Ts>[<index>],\n//\t{ <Vt>.B, <Vt2>.B }[<index>].\ntype RegisterWithArrangementAndIndex struct {\n\tr     Reg\n\ta     Arrangement\n\tindex uint8\n\tcnt   uint8\n}\n\nfunc (RegisterWithArrangementAndIndex) isArg() {}\n\nfunc (r RegisterWithArrangementAndIndex) String() string {\n\tresult := r.r.String()\n\tresult += r.a.String()\n\tif r.cnt > 0 {\n\t\tresult = \"{\" + result\n\t\tif r.cnt == 2 {\n\t\t\tr1 := V0 + Reg((uint16(r.r)-uint16(V0)+1)&31)\n\t\t\tresult += \", \" + r1.String() + r.a.String()\n\t\t} else if r.cnt > 2 {\n\t\t\tif (uint16(r.cnt) + ((uint16(r.r) - uint16(V0)) & 31)) > 32 {\n\t\t\t\tfor i := 1; i < int(r.cnt); i++ {\n\t\t\t\t\tcur := V0 + Reg((uint16(r.r)-uint16(V0)+uint16(i))&31)\n\t\t\t\t\tresult += \", \" + cur.String() + r.a.String()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tr1 := V0 + Reg((uint16(r.r)-uint16(V0)+uint16(r.cnt)-1)&31)\n\t\t\t\tresult += \"-\" + r1.String() + r.a.String()\n\t\t\t}\n\t\t}\n\t\tresult += \"}\"\n\t}\n\treturn fmt.Sprintf(\"%s[%d]\", result, r.index)\n}\n\ntype sysOp struct {\n\top          sysInstFields\n\tr           Reg\n\thasOperand2 bool\n}\n\nfunc (s sysOp) isArg() {}\n\nfunc (s sysOp) String() string {\n\tresult := s.op.String()\n\t// If s.hasOperand2 is false, the value in the register\n\t// specified by s.r is ignored.\n\tif s.hasOperand2 {\n\t\tresult += \", \" + s.r.String()\n\t}\n\treturn result\n}\n\ntype sysInstFields struct {\n\top1 uint8\n\tcn  uint8\n\tcm  uint8\n\top2 uint8\n}\n\ntype sysInstAttrs struct {\n\ttyp         sys\n\tname        string\n\thasOperand2 bool\n}\n\nfunc (s sysInstFields) isArg() {}\n\nfunc (s sysInstFields) getAttrs() sysInstAttrs {\n\tattrs, ok := sysInstsAttrs[sysInstFields{s.op1, s.cn, s.cm, s.op2}]\n\tif !ok {\n\t\treturn sysInstAttrs{typ: sys_SYS}\n\t}\n\treturn attrs\n}\n\nfunc (s sysInstFields) String() string {\n\treturn s.getAttrs().name\n}\n\nfunc (s sysInstFields) getType() sys {\n\treturn s.getAttrs().typ\n}\n\nvar sysInstsAttrs = map[sysInstFields]sysInstAttrs{\n\tsysInstFields{0, 8, 3, 0}:  {sys_TLBI, \"VMALLE1IS\", false},\n\tsysInstFields{0, 8, 3, 1}:  {sys_TLBI, \"VAE1IS\", true},\n\tsysInstFields{0, 8, 3, 2}:  {sys_TLBI, \"ASIDE1IS\", true},\n\tsysInstFields{0, 8, 3, 3}:  {sys_TLBI, \"VAAE1IS\", true},\n\tsysInstFields{0, 8, 3, 5}:  {sys_TLBI, \"VALE1IS\", true},\n\tsysInstFields{0, 8, 3, 7}:  {sys_TLBI, \"VAALE1IS\", true},\n\tsysInstFields{0, 8, 7, 0}:  {sys_TLBI, \"VMALLE1\", false},\n\tsysInstFields{0, 8, 7, 1}:  {sys_TLBI, \"VAE1\", true},\n\tsysInstFields{0, 8, 7, 2}:  {sys_TLBI, \"ASIDE1\", true},\n\tsysInstFields{0, 8, 7, 3}:  {sys_TLBI, \"VAAE1\", true},\n\tsysInstFields{0, 8, 7, 5}:  {sys_TLBI, \"VALE1\", true},\n\tsysInstFields{0, 8, 7, 7}:  {sys_TLBI, \"VAALE1\", true},\n\tsysInstFields{4, 8, 0, 1}:  {sys_TLBI, \"IPAS2E1IS\", true},\n\tsysInstFields{4, 8, 0, 5}:  {sys_TLBI, \"IPAS2LE1IS\", true},\n\tsysInstFields{4, 8, 3, 0}:  {sys_TLBI, \"ALLE2IS\", false},\n\tsysInstFields{4, 8, 3, 1}:  {sys_TLBI, \"VAE2IS\", true},\n\tsysInstFields{4, 8, 3, 4}:  {sys_TLBI, \"ALLE1IS\", false},\n\tsysInstFields{4, 8, 3, 5}:  {sys_TLBI, \"VALE2IS\", true},\n\tsysInstFields{4, 8, 3, 6}:  {sys_TLBI, \"VMALLS12E1IS\", false},\n\tsysInstFields{4, 8, 4, 1}:  {sys_TLBI, \"IPAS2E1\", true},\n\tsysInstFields{4, 8, 4, 5}:  {sys_TLBI, \"IPAS2LE1\", true},\n\tsysInstFields{4, 8, 7, 0}:  {sys_TLBI, \"ALLE2\", false},\n\tsysInstFields{4, 8, 7, 1}:  {sys_TLBI, \"VAE2\", true},\n\tsysInstFields{4, 8, 7, 4}:  {sys_TLBI, \"ALLE1\", false},\n\tsysInstFields{4, 8, 7, 5}:  {sys_TLBI, \"VALE2\", true},\n\tsysInstFields{4, 8, 7, 6}:  {sys_TLBI, \"VMALLS12E1\", false},\n\tsysInstFields{6, 8, 3, 0}:  {sys_TLBI, \"ALLE3IS\", false},\n\tsysInstFields{6, 8, 3, 1}:  {sys_TLBI, \"VAE3IS\", true},\n\tsysInstFields{6, 8, 3, 5}:  {sys_TLBI, \"VALE3IS\", true},\n\tsysInstFields{6, 8, 7, 0}:  {sys_TLBI, \"ALLE3\", false},\n\tsysInstFields{6, 8, 7, 1}:  {sys_TLBI, \"VAE3\", true},\n\tsysInstFields{6, 8, 7, 5}:  {sys_TLBI, \"VALE3\", true},\n\tsysInstFields{0, 8, 1, 0}:  {sys_TLBI, \"VMALLE1OS\", false},\n\tsysInstFields{0, 8, 1, 1}:  {sys_TLBI, \"VAE1OS\", true},\n\tsysInstFields{0, 8, 1, 2}:  {sys_TLBI, \"ASIDE1OS\", true},\n\tsysInstFields{0, 8, 1, 3}:  {sys_TLBI, \"VAAE1OS\", true},\n\tsysInstFields{0, 8, 1, 5}:  {sys_TLBI, \"VALE1OS\", true},\n\tsysInstFields{0, 8, 1, 7}:  {sys_TLBI, \"VAALE1OS\", true},\n\tsysInstFields{0, 8, 2, 1}:  {sys_TLBI, \"RVAE1IS\", true},\n\tsysInstFields{0, 8, 2, 3}:  {sys_TLBI, \"RVAAE1IS\", true},\n\tsysInstFields{0, 8, 2, 5}:  {sys_TLBI, \"RVALE1IS\", true},\n\tsysInstFields{0, 8, 2, 7}:  {sys_TLBI, \"RVAALE1IS\", true},\n\tsysInstFields{0, 8, 5, 1}:  {sys_TLBI, \"RVAE1OS\", true},\n\tsysInstFields{0, 8, 5, 3}:  {sys_TLBI, \"RVAAE1OS\", true},\n\tsysInstFields{0, 8, 5, 5}:  {sys_TLBI, \"RVALE1OS\", true},\n\tsysInstFields{0, 8, 5, 7}:  {sys_TLBI, \"RVAALE1OS\", true},\n\tsysInstFields{0, 8, 6, 1}:  {sys_TLBI, \"RVAE1\", true},\n\tsysInstFields{0, 8, 6, 3}:  {sys_TLBI, \"RVAAE1\", true},\n\tsysInstFields{0, 8, 6, 5}:  {sys_TLBI, \"RVALE1\", true},\n\tsysInstFields{0, 8, 6, 7}:  {sys_TLBI, \"RVAALE1\", true},\n\tsysInstFields{4, 8, 0, 2}:  {sys_TLBI, \"RIPAS2E1IS\", true},\n\tsysInstFields{4, 8, 0, 6}:  {sys_TLBI, \"RIPAS2LE1IS\", true},\n\tsysInstFields{4, 8, 1, 0}:  {sys_TLBI, \"ALLE2OS\", false},\n\tsysInstFields{4, 8, 1, 1}:  {sys_TLBI, \"VAE2OS\", true},\n\tsysInstFields{4, 8, 1, 4}:  {sys_TLBI, \"ALLE1OS\", false},\n\tsysInstFields{4, 8, 1, 5}:  {sys_TLBI, \"VALE2OS\", true},\n\tsysInstFields{4, 8, 1, 6}:  {sys_TLBI, \"VMALLS12E1OS\", false},\n\tsysInstFields{4, 8, 2, 1}:  {sys_TLBI, \"RVAE2IS\", true},\n\tsysInstFields{4, 8, 2, 5}:  {sys_TLBI, \"RVALE2IS\", true},\n\tsysInstFields{4, 8, 4, 0}:  {sys_TLBI, \"IPAS2E1OS\", true},\n\tsysInstFields{4, 8, 4, 2}:  {sys_TLBI, \"RIPAS2E1\", true},\n\tsysInstFields{4, 8, 4, 3}:  {sys_TLBI, \"RIPAS2E1OS\", true},\n\tsysInstFields{4, 8, 4, 4}:  {sys_TLBI, \"IPAS2LE1OS\", true},\n\tsysInstFields{4, 8, 4, 6}:  {sys_TLBI, \"RIPAS2LE1\", true},\n\tsysInstFields{4, 8, 4, 7}:  {sys_TLBI, \"RIPAS2LE1OS\", true},\n\tsysInstFields{4, 8, 5, 1}:  {sys_TLBI, \"RVAE2OS\", true},\n\tsysInstFields{4, 8, 5, 5}:  {sys_TLBI, \"RVALE2OS\", true},\n\tsysInstFields{4, 8, 6, 1}:  {sys_TLBI, \"RVAE2\", true},\n\tsysInstFields{4, 8, 6, 5}:  {sys_TLBI, \"RVALE2\", true},\n\tsysInstFields{6, 8, 1, 0}:  {sys_TLBI, \"ALLE3OS\", false},\n\tsysInstFields{6, 8, 1, 1}:  {sys_TLBI, \"VAE3OS\", true},\n\tsysInstFields{6, 8, 1, 5}:  {sys_TLBI, \"VALE3OS\", true},\n\tsysInstFields{6, 8, 2, 1}:  {sys_TLBI, \"RVAE3IS\", true},\n\tsysInstFields{6, 8, 2, 5}:  {sys_TLBI, \"RVALE3IS\", true},\n\tsysInstFields{6, 8, 5, 1}:  {sys_TLBI, \"RVAE3OS\", true},\n\tsysInstFields{6, 8, 5, 5}:  {sys_TLBI, \"RVALE3OS\", true},\n\tsysInstFields{6, 8, 6, 1}:  {sys_TLBI, \"RVAE3\", true},\n\tsysInstFields{6, 8, 6, 5}:  {sys_TLBI, \"RVALE3\", true},\n\tsysInstFields{0, 7, 6, 1}:  {sys_DC, \"IVAC\", true},\n\tsysInstFields{0, 7, 6, 2}:  {sys_DC, \"ISW\", true},\n\tsysInstFields{0, 7, 10, 2}: {sys_DC, \"CSW\", true},\n\tsysInstFields{0, 7, 14, 2}: {sys_DC, \"CISW\", true},\n\tsysInstFields{3, 7, 4, 1}:  {sys_DC, \"ZVA\", true},\n\tsysInstFields{3, 7, 10, 1}: {sys_DC, \"CVAC\", true},\n\tsysInstFields{3, 7, 11, 1}: {sys_DC, \"CVAU\", true},\n\tsysInstFields{3, 7, 14, 1}: {sys_DC, \"CIVAC\", true},\n\tsysInstFields{0, 7, 6, 3}:  {sys_DC, \"IGVAC\", true},\n\tsysInstFields{0, 7, 6, 4}:  {sys_DC, \"IGSW\", true},\n\tsysInstFields{0, 7, 6, 5}:  {sys_DC, \"IGDVAC\", true},\n\tsysInstFields{0, 7, 6, 6}:  {sys_DC, \"IGDSW\", true},\n\tsysInstFields{0, 7, 10, 4}: {sys_DC, \"CGSW\", true},\n\tsysInstFields{0, 7, 10, 6}: {sys_DC, \"CGDSW\", true},\n\tsysInstFields{0, 7, 14, 4}: {sys_DC, \"CIGSW\", true},\n\tsysInstFields{0, 7, 14, 6}: {sys_DC, \"CIGDSW\", true},\n\tsysInstFields{3, 7, 4, 3}:  {sys_DC, \"GVA\", true},\n\tsysInstFields{3, 7, 4, 4}:  {sys_DC, \"GZVA\", true},\n\tsysInstFields{3, 7, 10, 3}: {sys_DC, \"CGVAC\", true},\n\tsysInstFields{3, 7, 10, 5}: {sys_DC, \"CGDVAC\", true},\n\tsysInstFields{3, 7, 12, 3}: {sys_DC, \"CGVAP\", true},\n\tsysInstFields{3, 7, 12, 5}: {sys_DC, \"CGDVAP\", true},\n\tsysInstFields{3, 7, 13, 3}: {sys_DC, \"CGVADP\", true},\n\tsysInstFields{3, 7, 13, 5}: {sys_DC, \"CGDVADP\", true},\n\tsysInstFields{3, 7, 14, 3}: {sys_DC, \"CIGVAC\", true},\n\tsysInstFields{3, 7, 14, 5}: {sys_DC, \"CIGDVAC\", true},\n\tsysInstFields{3, 7, 12, 1}: {sys_DC, \"CVAP\", true},\n\tsysInstFields{3, 7, 13, 1}: {sys_DC, \"CVADP\", true},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/arm64/arm64asm/inst.json",
    "content": "[{\"Name\":\"ADC\",\"Bits\":\"0|0|0|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ADC <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADC\",\"Bits\":\"1|0|0|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ADC <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADCS\",\"Bits\":\"0|0|1|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ADCS <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADCS\",\"Bits\":\"1|0|1|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ADCS <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADD (extended register)\",\"Bits\":\"0|0|0|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ADD <Wd|WSP>, <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADD (extended register)\",\"Bits\":\"1|0|0|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ADD <Xd|SP>, <Xn|SP>, <R><m>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADD (immediate)\",\"Bits\":\"0|0|0|1|0|0|0|1|shift:2|imm12:12|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ADD <Wd|WSP>, <Wn|WSP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (to/from SP).\"},\n{\"Name\":\"ADD (immediate)\",\"Bits\":\"1|0|0|1|0|0|0|1|shift:2|imm12:12|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ADD <Xd|SP>, <Xn|SP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (to/from SP).\"},\n{\"Name\":\"ADD (shifted register)\",\"Bits\":\"0|0|0|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ADD <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADD (shifted register)\",\"Bits\":\"1|0|0|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ADD <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADDS (extended register)\",\"Bits\":\"0|0|1|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ADDS <Wd>, <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMN (extended register).\"},\n{\"Name\":\"ADDS (extended register)\",\"Bits\":\"1|0|1|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ADDS <Xd>, <Xn|SP>, <R><m>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMN (extended register).\"},\n{\"Name\":\"ADDS (immediate)\",\"Bits\":\"0|0|1|1|0|0|0|1|shift:2|imm12:12|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ADDS <Wd>, <Wn|WSP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMN (immediate).\"},\n{\"Name\":\"ADDS (immediate)\",\"Bits\":\"1|0|1|1|0|0|0|1|shift:2|imm12:12|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ADDS <Xd>, <Xn|SP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMN (immediate).\"},\n{\"Name\":\"ADDS (shifted register)\",\"Bits\":\"0|0|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ADDS <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMN (shifted register).\"},\n{\"Name\":\"ADDS (shifted register)\",\"Bits\":\"1|0|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ADDS <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMN (shifted register).\"},\n{\"Name\":\"ADR\",\"Bits\":\"0|immlo:2|1|0|0|0|0|immhi:19|Rd:5\",\"Arch\":\"Literal variant\",\"Syntax\":\"ADR <Xd>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADRP\",\"Bits\":\"1|immlo:2|1|0|0|0|0|immhi:19|Rd:5\",\"Arch\":\"Literal variant\",\"Syntax\":\"ADRP <Xd>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"AND (immediate)\",\"Bits\":\"0|0|0|1|0|0|1|0|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"AND <Wd|WSP>, <Wn>, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"AND (immediate)\",\"Bits\":\"1|0|0|1|0|0|1|0|0|N|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"AND <Xd|SP>, <Xn>, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"AND (shifted register)\",\"Bits\":\"0|0|0|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"AND <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"AND (shifted register)\",\"Bits\":\"1|0|0|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"AND <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ANDS (immediate)\",\"Bits\":\"0|1|1|1|0|0|1|0|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ANDS <Wd>, <Wn>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias TST (immediate).\"},\n{\"Name\":\"ANDS (immediate)\",\"Bits\":\"1|1|1|1|0|0|1|0|0|N|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ANDS <Xd>, <Xn>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias TST (immediate).\"},\n{\"Name\":\"ANDS (shifted register)\",\"Bits\":\"0|1|1|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ANDS <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias TST (shifted register).\"},\n{\"Name\":\"ANDS (shifted register)\",\"Bits\":\"1|1|1|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ANDS <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias TST (shifted register).\"},\n{\"Name\":\"ASR (register)\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ASR <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ASRV instruction.\"},\n{\"Name\":\"ASR (register)\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ASR <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ASRV instruction.\"},\n{\"Name\":\"ASR (immediate)\",\"Bits\":\"0|0|0|1|0|0|1|1|0|0|immr:6|011111:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ASR <Wd>, <Wn>, #<shift>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"ASR (immediate)\",\"Bits\":\"1|0|0|1|0|0|1|1|0|1|immr:6|111111:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ASR <Xd>, <Xn>, #<shift>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"ASRV\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ASRV <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias ASR (register).\"},\n{\"Name\":\"ASRV\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ASRV <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias ASR (register).\"},\n{\"Name\":\"AT\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|1|op1:3|0|1|1|1|CRm:4|op2:3|Rt:5\",\"Arch\":\"System variant\",\"Syntax\":\"AT <at_op>, <Xt>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SYS instruction.\"},\n{\"Name\":\"B.cond\",\"Bits\":\"0|1|0|1|0|1|0|0|imm19:19|0|cond:4\",\"Arch\":\"19-bit signed PC-relative branch offset variant\",\"Syntax\":\"B.<cond> <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"B\",\"Bits\":\"0|0|0|1|0|1|imm26:26\",\"Arch\":\"26-bit signed PC-relative branch offset variant\",\"Syntax\":\"B <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BFI\",\"Bits\":\"0|0|1|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"BFI <Wd>, <Wn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the BFM instruction.\"},\n{\"Name\":\"BFI\",\"Bits\":\"1|0|1|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"BFI <Xd>, <Xn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the BFM instruction.\"},\n{\"Name\":\"BFM\",\"Bits\":\"0|0|1|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"BFM <Wd>, <Wn>, #<immr>, #<imms>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases BFI and BFXIL.\"},\n{\"Name\":\"BFM\",\"Bits\":\"1|0|1|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"BFM <Xd>, <Xn>, #<immr>, #<imms>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases BFI and BFXIL.\"},\n{\"Name\":\"BFXIL\",\"Bits\":\"0|0|1|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"BFXIL <Wd>, <Wn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the BFM instruction.\"},\n{\"Name\":\"BFXIL\",\"Bits\":\"1|0|1|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"BFXIL <Xd>, <Xn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the BFM instruction.\"},\n{\"Name\":\"BIC (shifted register)\",\"Bits\":\"0|0|0|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"BIC <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BIC (shifted register)\",\"Bits\":\"1|0|0|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"BIC <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BICS (shifted register)\",\"Bits\":\"0|1|1|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"BICS <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BICS (shifted register)\",\"Bits\":\"1|1|1|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"BICS <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BL\",\"Bits\":\"1|0|0|1|0|1|imm26:26\",\"Arch\":\"26-bit signed PC-relative branch offset variant\",\"Syntax\":\"BL <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BLR\",\"Bits\":\"1|1|0|1|0|1|1|0|0|0|1|1|1|1|1|1|0|0|0|0|0|0|Rn:5|0|0|0|0|0\",\"Arch\":\"Integer variant\",\"Syntax\":\"BLR <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BR\",\"Bits\":\"1|1|0|1|0|1|1|0|0|0|0|1|1|1|1|1|0|0|0|0|0|0|Rn:5|0|0|0|0|0\",\"Arch\":\"Integer variant\",\"Syntax\":\"BR <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BRK\",\"Bits\":\"1|1|0|1|0|1|0|0|0|0|1|imm16:16|0|0|0|0|0\",\"Arch\":\"System variant\",\"Syntax\":\"BRK #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CBNZ\",\"Bits\":\"0|0|1|1|0|1|0|1|imm19:19|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CBNZ <Wt>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CBNZ\",\"Bits\":\"1|0|1|1|0|1|0|1|imm19:19|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CBNZ <Xt>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CBZ\",\"Bits\":\"0|0|1|1|0|1|0|0|imm19:19|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CBZ <Wt>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CBZ\",\"Bits\":\"1|0|1|1|0|1|0|0|imm19:19|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CBZ <Xt>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CCMN (immediate)\",\"Bits\":\"0|0|1|1|1|0|1|0|0|1|0|imm5:5|cond:4|1|0|Rn:5|0|nzcv:4\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CCMN <Wn>, #<imm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CCMN (immediate)\",\"Bits\":\"1|0|1|1|1|0|1|0|0|1|0|imm5:5|cond:4|1|0|Rn:5|0|nzcv:4\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CCMN <Xn>, #<imm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CCMN (register)\",\"Bits\":\"0|0|1|1|1|0|1|0|0|1|0|Rm:5|cond:4|0|0|Rn:5|0|nzcv:4\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CCMN <Wn>, <Wm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CCMN (register)\",\"Bits\":\"1|0|1|1|1|0|1|0|0|1|0|Rm:5|cond:4|0|0|Rn:5|0|nzcv:4\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CCMN <Xn>, <Xm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CCMP (immediate)\",\"Bits\":\"0|1|1|1|1|0|1|0|0|1|0|imm5:5|cond:4|1|0|Rn:5|0|nzcv:4\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CCMP <Wn>, #<imm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CCMP (immediate)\",\"Bits\":\"1|1|1|1|1|0|1|0|0|1|0|imm5:5|cond:4|1|0|Rn:5|0|nzcv:4\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CCMP <Xn>, #<imm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CCMP (register)\",\"Bits\":\"0|1|1|1|1|0|1|0|0|1|0|Rm:5|cond:4|0|0|Rn:5|0|nzcv:4\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CCMP <Wn>, <Wm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CCMP (register)\",\"Bits\":\"1|1|1|1|1|0|1|0|0|1|0|Rm:5|cond:4|0|0|Rn:5|0|nzcv:4\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CCMP <Xn>, <Xm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CINC\",\"Bits\":\"0|0|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CINC <Wd>, <Wn>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSINC instruction.\"},\n{\"Name\":\"CINC\",\"Bits\":\"1|0|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CINC <Xd>, <Xn>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSINC instruction.\"},\n{\"Name\":\"CINV\",\"Bits\":\"0|1|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CINV <Wd>, <Wn>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSINV instruction.\"},\n{\"Name\":\"CINV\",\"Bits\":\"1|1|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CINV <Xd>, <Xn>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSINV instruction.\"},\n{\"Name\":\"CLREX\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|1|CRm:4|0|1|0|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"CLREX {#<imm>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CLS\",\"Bits\":\"0|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CLS <Wd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CLS\",\"Bits\":\"1|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CLS <Xd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CLZ\",\"Bits\":\"0|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CLZ <Wd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CLZ\",\"Bits\":\"1|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CLZ <Xd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMN (extended register)\",\"Bits\":\"0|0|1|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|1|1|1|1|1\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CMN <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ADDS (extended register) instruction.\"},\n{\"Name\":\"CMN (extended register)\",\"Bits\":\"1|0|1|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|1|1|1|1|1\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CMN <Xn|SP>, <R><m>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ADDS (extended register) instruction.\"},\n{\"Name\":\"CMN (immediate)\",\"Bits\":\"0|0|1|1|0|0|0|1|shift:2|imm12:12|Rn:5|1|1|1|1|1\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CMN <Wn|WSP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ADDS (immediate) instruction.\"},\n{\"Name\":\"CMN (immediate)\",\"Bits\":\"1|0|1|1|0|0|0|1|shift:2|imm12:12|Rn:5|1|1|1|1|1\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CMN <Xn|SP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ADDS (immediate) instruction.\"},\n{\"Name\":\"CMN (shifted register)\",\"Bits\":\"0|0|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|1|1|1|1|1\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CMN <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ADDS (shifted register) instruction.\"},\n{\"Name\":\"CMN (shifted register)\",\"Bits\":\"1|0|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|1|1|1|1|1\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CMN <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ADDS (shifted register) instruction.\"},\n{\"Name\":\"CMP (extended register)\",\"Bits\":\"0|1|1|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|1|1|1|1|1\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CMP <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUBS (extended register) instruction.\"},\n{\"Name\":\"CMP (extended register)\",\"Bits\":\"1|1|1|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|1|1|1|1|1\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CMP <Xn|SP>, <R><m>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUBS (extended register) instruction.\"},\n{\"Name\":\"CMP (immediate)\",\"Bits\":\"0|1|1|1|0|0|0|1|shift:2|imm12:12|Rn:5|1|1|1|1|1\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CMP <Wn|WSP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUBS (immediate) instruction.\"},\n{\"Name\":\"CMP (immediate)\",\"Bits\":\"1|1|1|1|0|0|0|1|shift:2|imm12:12|Rn:5|1|1|1|1|1\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CMP <Xn|SP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUBS (immediate) instruction.\"},\n{\"Name\":\"CMP (shifted register)\",\"Bits\":\"0|1|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|1|1|1|1|1\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CMP <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUBS (shifted register) instruction.\"},\n{\"Name\":\"CMP (shifted register)\",\"Bits\":\"1|1|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|1|1|1|1|1\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CMP <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUBS (shifted register) instruction.\"},\n{\"Name\":\"CNEG\",\"Bits\":\"0|1|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CNEG <Wd>, <Wn>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSNEG instruction.\"},\n{\"Name\":\"CNEG\",\"Bits\":\"1|1|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CNEG <Xd>, <Xn>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSNEG instruction.\"},\n{\"Name\":\"CRC32B, CRC32H, CRC32W, CRC32X\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|1|0|0|00:2|Rn:5|Rd:5\",\"Arch\":\"CRC32B variant\",\"Syntax\":\"CRC32B <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CRC32B, CRC32H, CRC32W, CRC32X\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|1|0|0|01:2|Rn:5|Rd:5\",\"Arch\":\"CRC32H variant\",\"Syntax\":\"CRC32H <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CRC32B, CRC32H, CRC32W, CRC32X\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|1|0|0|10:2|Rn:5|Rd:5\",\"Arch\":\"CRC32W variant\",\"Syntax\":\"CRC32W <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CRC32B, CRC32H, CRC32W, CRC32X\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|1|0|0|11:2|Rn:5|Rd:5\",\"Arch\":\"CRC32X variant\",\"Syntax\":\"CRC32X <Wd>, <Wn>, <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CRC32CB, CRC32CH, CRC32CW, CRC32CX\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|1|0|1|00:2|Rn:5|Rd:5\",\"Arch\":\"CRC32CB variant\",\"Syntax\":\"CRC32CB <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CRC32CB, CRC32CH, CRC32CW, CRC32CX\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|1|0|1|01:2|Rn:5|Rd:5\",\"Arch\":\"CRC32CH variant\",\"Syntax\":\"CRC32CH <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CRC32CB, CRC32CH, CRC32CW, CRC32CX\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|1|0|1|10:2|Rn:5|Rd:5\",\"Arch\":\"CRC32CW variant\",\"Syntax\":\"CRC32CW <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CRC32CB, CRC32CH, CRC32CW, CRC32CX\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|1|0|1|11:2|Rn:5|Rd:5\",\"Arch\":\"CRC32CX variant\",\"Syntax\":\"CRC32CX <Wd>, <Wn>, <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CSEL\",\"Bits\":\"0|0|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CSEL <Wd>, <Wn>, <Wm>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CSEL\",\"Bits\":\"1|0|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CSEL <Xd>, <Xn>, <Xm>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CSET\",\"Bits\":\"0|0|0|1|1|0|1|0|1|0|0|1|1|1|1|1|cond:4|0|1|1|1|1|1|1|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CSET <Wd>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSINC instruction.\"},\n{\"Name\":\"CSET\",\"Bits\":\"1|0|0|1|1|0|1|0|1|0|0|1|1|1|1|1|cond:4|0|1|1|1|1|1|1|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CSET <Xd>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSINC instruction.\"},\n{\"Name\":\"CSETM\",\"Bits\":\"0|1|0|1|1|0|1|0|1|0|0|1|1|1|1|1|cond:4|0|0|1|1|1|1|1|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CSETM <Wd>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSINV instruction.\"},\n{\"Name\":\"CSETM\",\"Bits\":\"1|1|0|1|1|0|1|0|1|0|0|1|1|1|1|1|cond:4|0|0|1|1|1|1|1|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CSETM <Xd>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the CSINV instruction.\"},\n{\"Name\":\"CSINC\",\"Bits\":\"0|0|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CSINC <Wd>, <Wn>, <Wm>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases CINC and CSET.\"},\n{\"Name\":\"CSINC\",\"Bits\":\"1|0|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CSINC <Xd>, <Xn>, <Xm>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases CINC and CSET.\"},\n{\"Name\":\"CSINV\",\"Bits\":\"0|1|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CSINV <Wd>, <Wn>, <Wm>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases CINV and CSETM.\"},\n{\"Name\":\"CSINV\",\"Bits\":\"1|1|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CSINV <Xd>, <Xn>, <Xm>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases CINV and CSETM.\"},\n{\"Name\":\"CSNEG\",\"Bits\":\"0|1|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"CSNEG <Wd>, <Wn>, <Wm>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CNEG.\"},\n{\"Name\":\"CSNEG\",\"Bits\":\"1|1|0|1|1|0|1|0|1|0|0|Rm:5|cond:4|0|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"CSNEG <Xd>, <Xn>, <Xm>, <cond>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CNEG.\"},\n{\"Name\":\"DC\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|1|op1:3|0|1|1|1|CRm:4|op2:3|Rt:5\",\"Arch\":\"System variant\",\"Syntax\":\"DC <dc_op>, <Xt>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SYS instruction.\"},\n{\"Name\":\"DCPS1\",\"Bits\":\"1|1|0|1|0|1|0|0|1|0|1|imm16:16|0|0|0|0|1\",\"Arch\":\"System variant\",\"Syntax\":\"DCPS1 {#<imm>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"DCPS2\",\"Bits\":\"1|1|0|1|0|1|0|0|1|0|1|imm16:16|0|0|0|1|0\",\"Arch\":\"System variant\",\"Syntax\":\"DCPS2 {#<imm>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"DCPS3\",\"Bits\":\"1|1|0|1|0|1|0|0|1|0|1|imm16:16|0|0|0|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"DCPS3 {#<imm>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"DMB\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|1|CRm:4|1|0|1|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"DMB <option>|#<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"DRPS\",\"Bits\":\"1|1|0|1|0|1|1|0|1|0|1|1|1|1|1|1|0|0|0|0|0|0|1|1|1|1|1|0|0|0|0|0\",\"Arch\":\"System variant\",\"Syntax\":\"DRPS\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"DSB\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|1|CRm:4|1|0|0|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"DSB <option>|#<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"EON (shifted register)\",\"Bits\":\"0|1|0|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"EON <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"EON (shifted register)\",\"Bits\":\"1|1|0|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"EON <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"EOR (immediate)\",\"Bits\":\"0|1|0|1|0|0|1|0|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"EOR <Wd|WSP>, <Wn>, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"EOR (immediate)\",\"Bits\":\"1|1|0|1|0|0|1|0|0|N|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"EOR <Xd|SP>, <Xn>, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"EOR (shifted register)\",\"Bits\":\"0|1|0|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"EOR <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"EOR (shifted register)\",\"Bits\":\"1|1|0|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"EOR <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ERET\",\"Bits\":\"1|1|0|1|0|1|1|0|1|0|0|1|1|1|1|1|0|0|0|0|0|0|1|1|1|1|1|0|0|0|0|0\",\"Arch\":\"System variant\",\"Syntax\":\"ERET\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"EXTR\",\"Bits\":\"0|0|0|1|0|0|1|1|1|0|0|Rm:5|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"EXTR <Wd>, <Wn>, <Wm>, #<lsb>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias ROR (immediate).\"},\n{\"Name\":\"EXTR\",\"Bits\":\"1|0|0|1|0|0|1|1|1|1|0|Rm:5|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"EXTR <Xd>, <Xn>, <Xm>, #<lsb>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias ROR (immediate).\"},\n{\"Name\":\"HINT\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|0|0000:4|op2:3|1|1|1|1|1\",\"Arch\":\"Hints 6 and 7 variant\",\"Syntax\":\"HINT #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"HINT\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|0|CRm:4|op2:3|1|1|1|1|1\",\"Arch\":\"Hints 8 to 127 variant\",\"Syntax\":\"HINT #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"HLT\",\"Bits\":\"1|1|0|1|0|1|0|0|0|1|0|imm16:16|0|0|0|0|0\",\"Arch\":\"System variant\",\"Syntax\":\"HLT #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"HVC\",\"Bits\":\"1|1|0|1|0|1|0|0|0|0|0|imm16:16|0|0|0|1|0\",\"Arch\":\"System variant\",\"Syntax\":\"HVC #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"IC\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|1|op1:3|0|1|1|1|CRm:4|op2:3|Rt:5\",\"Arch\":\"System variant\",\"Syntax\":\"IC <ic_op>{, <Xt>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SYS instruction.\"},\n{\"Name\":\"ISB\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|1|CRm:4|1|1|0|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"ISB {<option>|#<imm>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDAR\",\"Bits\":\"10:2|0|0|1|0|0|0|1|1|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDAR <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDAR\",\"Bits\":\"11:2|0|0|1|0|0|0|1|1|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDAR <Xt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDARB\",\"Bits\":\"0|0|0|0|1|0|0|0|1|1|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"LDARB <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDARH\",\"Bits\":\"0|1|0|0|1|0|0|0|1|1|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"LDARH <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDAXP\",\"Bits\":\"1|0|0|0|1|0|0|0|0|1|1|(1)|(1)|(1)|(1)|(1)|1|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDAXP <Wt1>, <Wt2>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDAXP\",\"Bits\":\"1|1|0|0|1|0|0|0|0|1|1|(1)|(1)|(1)|(1)|(1)|1|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDAXP <Xt1>, <Xt2>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDAXR\",\"Bits\":\"10:2|0|0|1|0|0|0|0|1|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDAXR <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDAXR\",\"Bits\":\"11:2|0|0|1|0|0|0|0|1|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDAXR <Xt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDAXRB\",\"Bits\":\"0|0|0|0|1|0|0|0|0|1|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"LDAXRB <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDAXRH\",\"Bits\":\"0|1|0|0|1|0|0|0|0|1|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"LDAXRH <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDNP\",\"Bits\":\"00:2|1|0|1|0|0|0|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDNP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDNP\",\"Bits\":\"10:2|1|0|1|0|0|0|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDNP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP\",\"Bits\":\"00:2|1|0|1|0|0|0|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"LDP <Wt1>, <Wt2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP\",\"Bits\":\"10:2|1|0|1|0|0|0|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"LDP <Xt1>, <Xt2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP\",\"Bits\":\"00:2|1|0|1|0|0|1|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"LDP <Wt1>, <Wt2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP\",\"Bits\":\"10:2|1|0|1|0|0|1|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"LDP <Xt1>, <Xt2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP\",\"Bits\":\"00:2|1|0|1|0|0|1|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 32-bit variant\",\"Syntax\":\"LDP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP\",\"Bits\":\"10:2|1|0|1|0|0|1|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 64-bit variant\",\"Syntax\":\"LDP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDPSW\",\"Bits\":\"0|1|1|0|1|0|0|0|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index Post-index variant\",\"Syntax\":\"LDPSW <Xt1>, <Xt2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDPSW\",\"Bits\":\"0|1|1|0|1|0|0|1|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index Pre-index variant\",\"Syntax\":\"LDPSW <Xt1>, <Xt2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDPSW\",\"Bits\":\"0|1|1|0|1|0|0|1|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset Signed offset variant\",\"Syntax\":\"LDPSW <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate)\",\"Bits\":\"10:2|1|1|1|0|0|0|0|1|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"LDR <Wt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate)\",\"Bits\":\"11:2|1|1|1|0|0|0|0|1|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"LDR <Xt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate)\",\"Bits\":\"10:2|1|1|1|0|0|0|0|1|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"LDR <Wt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate)\",\"Bits\":\"11:2|1|1|1|0|0|0|0|1|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"LDR <Xt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate)\",\"Bits\":\"10:2|1|1|1|0|0|1|0|1|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 32-bit variant\",\"Syntax\":\"LDR <Wt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate)\",\"Bits\":\"11:2|1|1|1|0|0|1|0|1|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 64-bit variant\",\"Syntax\":\"LDR <Xt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (literal)\",\"Bits\":\"00:2|0|1|1|0|0|0|imm19:19|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDR <Wt>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (literal)\",\"Bits\":\"01:2|0|1|1|0|0|0|imm19:19|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDR <Xt>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (register)\",\"Bits\":\"10:2|1|1|1|0|0|0|0|1|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDR <Wt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (register)\",\"Bits\":\"11:2|1|1|1|0|0|0|0|1|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDR <Xt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|0|0|1|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index Post-index variant\",\"Syntax\":\"LDRB <Wt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|0|0|1|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index Pre-index variant\",\"Syntax\":\"LDRB <Wt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|1|0|1|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset Unsigned offset variant\",\"Syntax\":\"LDRB <Wt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRB (register)\",\"Bits\":\"0|0|1|1|1|0|0|0|0|1|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"Extended register variant\",\"Syntax\":\"LDRB <Wt>, [<Xn|SP>, (<Wm>|<Xm>), <extend> {<amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRB (register)\",\"Bits\":\"0|0|1|1|1|0|0|0|0|1|1|Rm:5|011:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"Shifted register variant\",\"Syntax\":\"LDRB <Wt>, [<Xn|SP>, <Xm>{, LSL <amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|0|0|1|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index Post-index variant\",\"Syntax\":\"LDRH <Wt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|0|0|1|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index Pre-index variant\",\"Syntax\":\"LDRH <Wt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|1|0|1|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset Unsigned offset variant\",\"Syntax\":\"LDRH <Wt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRH (register)\",\"Bits\":\"0|1|1|1|1|0|0|0|0|1|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDRH <Wt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|0|11:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"LDRSB <Wt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|0|10:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"LDRSB <Xt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|0|11:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"LDRSB <Wt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|0|10:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"LDRSB <Xt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|1|11:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 32-bit variant\",\"Syntax\":\"LDRSB <Wt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|1|10:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 64-bit variant\",\"Syntax\":\"LDRSB <Xt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (register)\",\"Bits\":\"0|0|1|1|1|0|0|0|11:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit with extended register offset variant\",\"Syntax\":\"LDRSB <Wt>, [<Xn|SP>, (<Wm>|<Xm>), <extend> {<amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (register)\",\"Bits\":\"0|0|1|1|1|0|0|0|11:2|1|Rm:5|011:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit with shifted register offset variant\",\"Syntax\":\"LDRSB <Wt>, [<Xn|SP>, <Xm>{, LSL <amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (register)\",\"Bits\":\"0|0|1|1|1|0|0|0|10:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit with extended register offset variant\",\"Syntax\":\"LDRSB <Xt>, [<Xn|SP>, (<Wm>|<Xm>), <extend> {<amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSB (register)\",\"Bits\":\"0|0|1|1|1|0|0|0|10:2|1|Rm:5|011:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit with shifted register offset variant\",\"Syntax\":\"LDRSB <Xt>, [<Xn|SP>, <Xm>{, LSL <amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|0|11:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"LDRSH <Wt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|0|10:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"LDRSH <Xt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|0|11:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"LDRSH <Wt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|0|10:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"LDRSH <Xt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|1|11:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 32-bit variant\",\"Syntax\":\"LDRSH <Wt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|1|10:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 64-bit variant\",\"Syntax\":\"LDRSH <Xt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSH (register)\",\"Bits\":\"0|1|1|1|1|0|0|0|11:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDRSH <Wt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSH (register)\",\"Bits\":\"0|1|1|1|1|0|0|0|10:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDRSH <Xt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSW (immediate)\",\"Bits\":\"1|0|1|1|1|0|0|0|1|0|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index Post-index variant\",\"Syntax\":\"LDRSW <Xt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSW (immediate)\",\"Bits\":\"1|0|1|1|1|0|0|0|1|0|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index Pre-index variant\",\"Syntax\":\"LDRSW <Xt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSW (immediate)\",\"Bits\":\"1|0|1|1|1|0|0|1|1|0|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset Unsigned offset variant\",\"Syntax\":\"LDRSW <Xt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSW (literal)\",\"Bits\":\"1|0|0|1|1|0|0|0|imm19:19|Rt:5\",\"Arch\":\"Literal variant\",\"Syntax\":\"LDRSW <Xt>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDRSW (register)\",\"Bits\":\"1|0|1|1|1|0|0|0|1|0|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDRSW <Xt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDTR\",\"Bits\":\"10:2|1|1|1|0|0|0|0|1|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDTR <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDTR\",\"Bits\":\"11:2|1|1|1|0|0|0|0|1|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDTR <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDTRB\",\"Bits\":\"0|0|1|1|1|0|0|0|0|1|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"LDTRB <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDTRH\",\"Bits\":\"0|1|1|1|1|0|0|0|0|1|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"LDTRH <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDTRSB\",\"Bits\":\"0|0|1|1|1|0|0|0|11:2|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDTRSB <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDTRSB\",\"Bits\":\"0|0|1|1|1|0|0|0|10:2|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDTRSB <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDTRSH\",\"Bits\":\"0|1|1|1|1|0|0|0|11:2|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDTRSH <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDTRSH\",\"Bits\":\"0|1|1|1|1|0|0|0|10:2|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDTRSH <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDTRSW\",\"Bits\":\"1|0|1|1|1|0|0|0|1|0|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"LDTRSW <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDUR\",\"Bits\":\"10:2|1|1|1|0|0|0|0|1|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDUR <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDUR\",\"Bits\":\"11:2|1|1|1|0|0|0|0|1|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDUR <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDURB\",\"Bits\":\"0|0|1|1|1|0|0|0|0|1|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"LDURB <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDURH\",\"Bits\":\"0|1|1|1|1|0|0|0|0|1|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"LDURH <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDURSB\",\"Bits\":\"0|0|1|1|1|0|0|0|11:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDURSB <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDURSB\",\"Bits\":\"0|0|1|1|1|0|0|0|10:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDURSB <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDURSH\",\"Bits\":\"0|1|1|1|1|0|0|0|11:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDURSH <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDURSH\",\"Bits\":\"0|1|1|1|1|0|0|0|10:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDURSH <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDURSW\",\"Bits\":\"1|0|1|1|1|0|0|0|1|0|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"LDURSW <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDXP\",\"Bits\":\"1|0|0|0|1|0|0|0|0|1|1|(1)|(1)|(1)|(1)|(1)|0|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDXP <Wt1>, <Wt2>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDXP\",\"Bits\":\"1|1|0|0|1|0|0|0|0|1|1|(1)|(1)|(1)|(1)|(1)|0|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDXP <Xt1>, <Xt2>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDXR\",\"Bits\":\"10:2|0|0|1|0|0|0|0|1|0|(1)|(1)|(1)|(1)|(1)|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDXR <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDXR\",\"Bits\":\"11:2|0|0|1|0|0|0|0|1|0|(1)|(1)|(1)|(1)|(1)|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDXR <Xt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDXRB\",\"Bits\":\"0|0|0|0|1|0|0|0|0|1|0|(1)|(1)|(1)|(1)|(1)|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"LDXRB <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDXRH\",\"Bits\":\"0|1|0|0|1|0|0|0|0|1|0|(1)|(1)|(1)|(1)|(1)|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"LDXRH <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LSL (register)\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LSL <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the LSLV instruction.\"},\n{\"Name\":\"LSL (register)\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LSL <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the LSLV instruction.\"},\n{\"Name\":\"LSL (immediate)\",\"Bits\":\"0|1|0|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LSL <Wd>, <Wn>, #<shift>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"LSL (immediate)\",\"Bits\":\"1|1|0|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LSL <Xd>, <Xn>, #<shift>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"LSLV\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LSLV <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias LSL (register).\"},\n{\"Name\":\"LSLV\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LSLV <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias LSL (register).\"},\n{\"Name\":\"LSR (register)\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LSR <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the LSRV instruction.\"},\n{\"Name\":\"LSR (register)\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LSR <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the LSRV instruction.\"},\n{\"Name\":\"LSR (immediate)\",\"Bits\":\"0|1|0|1|0|0|1|1|0|0|immr:6|011111:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LSR <Wd>, <Wn>, #<shift>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"LSR (immediate)\",\"Bits\":\"1|1|0|1|0|0|1|1|0|1|immr:6|111111:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LSR <Xd>, <Xn>, #<shift>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"LSRV\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LSRV <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias LSR (register).\"},\n{\"Name\":\"LSRV\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LSRV <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias LSR (register).\"},\n{\"Name\":\"MADD\",\"Bits\":\"0|0|0|1|1|0|1|1|0|0|0|Rm:5|0|Ra:5|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MADD <Wd>, <Wn>, <Wm>, <Wa>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MUL.\"},\n{\"Name\":\"MADD\",\"Bits\":\"1|0|0|1|1|0|1|1|0|0|0|Rm:5|0|Ra:5|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MADD <Xd>, <Xn>, <Xm>, <Xa>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MUL.\"},\n{\"Name\":\"MNEG\",\"Bits\":\"0|0|0|1|1|0|1|1|0|0|0|Rm:5|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MNEG <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the MSUB instruction.\"},\n{\"Name\":\"MNEG\",\"Bits\":\"1|0|0|1|1|0|1|1|0|0|0|Rm:5|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MNEG <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the MSUB instruction.\"},\n{\"Name\":\"MOV (to/from SP)\",\"Bits\":\"0|0|0|1|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MOV <Wd|WSP>, <Wn|WSP>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ADD (immediate) instruction.\"},\n{\"Name\":\"MOV (to/from SP)\",\"Bits\":\"1|0|0|1|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MOV <Xd|SP>, <Xn|SP>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ADD (immediate) instruction.\"},\n{\"Name\":\"MOV (inverted wide immediate)\",\"Bits\":\"0|0|0|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MOV <Wd>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the MOVN instruction.\"},\n{\"Name\":\"MOV (inverted wide immediate)\",\"Bits\":\"1|0|0|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MOV <Xd>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the MOVN instruction.\"},\n{\"Name\":\"MOV (wide immediate)\",\"Bits\":\"0|1|0|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MOV <Wd>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the MOVZ instruction.\"},\n{\"Name\":\"MOV (wide immediate)\",\"Bits\":\"1|1|0|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MOV <Xd>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the MOVZ instruction.\"},\n{\"Name\":\"MOV (bitmask immediate)\",\"Bits\":\"0|0|1|1|0|0|1|0|0|0|immr:6|imms:6|1|1|1|1|1|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MOV <Wd|WSP>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ORR (immediate) instruction.\"},\n{\"Name\":\"MOV (bitmask immediate)\",\"Bits\":\"1|0|1|1|0|0|1|0|0|N|immr:6|imms:6|1|1|1|1|1|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MOV <Xd|SP>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ORR (immediate) instruction.\"},\n{\"Name\":\"MOV (register)\",\"Bits\":\"0|0|1|0|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|1|1|1|1|1|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MOV <Wd>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ORR (shifted register) instruction.\"},\n{\"Name\":\"MOV (register)\",\"Bits\":\"1|0|1|0|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|1|1|1|1|1|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MOV <Xd>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ORR (shifted register) instruction.\"},\n{\"Name\":\"MOVK\",\"Bits\":\"0|1|1|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MOVK <Wd>, #<imm>{, LSL #<shift>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MOVK\",\"Bits\":\"1|1|1|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MOVK <Xd>, #<imm>{, LSL #<shift>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MOVN\",\"Bits\":\"0|0|0|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MOVN <Wd>, #<imm>{, LSL #<shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (inverted wide immediate).\"},\n{\"Name\":\"MOVN\",\"Bits\":\"1|0|0|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MOVN <Xd>, #<imm>{, LSL #<shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (inverted wide immediate).\"},\n{\"Name\":\"MOVZ\",\"Bits\":\"0|1|0|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MOVZ <Wd>, #<imm>{, LSL #<shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (wide immediate).\"},\n{\"Name\":\"MOVZ\",\"Bits\":\"1|1|0|1|0|0|1|0|1|hw:2|imm16:16|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MOVZ <Xd>, #<imm>{, LSL #<shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (wide immediate).\"},\n{\"Name\":\"MRS\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|1|1|o0|op1:3|CRn:4|CRm:4|op2:3|Rt:5\",\"Arch\":\"System variant\",\"Syntax\":\"MRS <Xt>, (<systemreg>|S<op0>_<op1>_<Cn>_<Cm>_<op2>)\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MSR (immediate)\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|op1:3|0|1|0|0|CRm:4|op2:3|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"MSR <pstatefield>, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MSR (register)\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|1|o0|op1:3|CRn:4|CRm:4|op2:3|Rt:5\",\"Arch\":\"System variant\",\"Syntax\":\"MSR (<systemreg>|S<op0>_<op1>_<Cn>_<Cm>_<op2>), <Xt>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MSUB\",\"Bits\":\"0|0|0|1|1|0|1|1|0|0|0|Rm:5|1|Ra:5|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MSUB <Wd>, <Wn>, <Wm>, <Wa>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MNEG.\"},\n{\"Name\":\"MSUB\",\"Bits\":\"1|0|0|1|1|0|1|1|0|0|0|Rm:5|1|Ra:5|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MSUB <Xd>, <Xn>, <Xm>, <Xa>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MNEG.\"},\n{\"Name\":\"MUL\",\"Bits\":\"0|0|0|1|1|0|1|1|0|0|0|Rm:5|0|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MUL <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the MADD instruction.\"},\n{\"Name\":\"MUL\",\"Bits\":\"1|0|0|1|1|0|1|1|0|0|0|Rm:5|0|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MUL <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the MADD instruction.\"},\n{\"Name\":\"MVN\",\"Bits\":\"0|0|1|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|1|1|1|1|1|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MVN <Wd>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ORN (shifted register) instruction.\"},\n{\"Name\":\"MVN\",\"Bits\":\"1|0|1|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|1|1|1|1|1|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MVN <Xd>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ORN (shifted register) instruction.\"},\n{\"Name\":\"NEG (shifted register)\",\"Bits\":\"0|1|0|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|1|1|1|1|1|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"NEG <Wd>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUB (shifted register) instruction.\"},\n{\"Name\":\"NEG (shifted register)\",\"Bits\":\"1|1|0|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|1|1|1|1|1|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"NEG <Xd>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUB (shifted register) instruction.\"},\n{\"Name\":\"NEGS\",\"Bits\":\"0|1|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|1|1|1|1|1|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"NEGS <Wd>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUBS (shifted register) instruction.\"},\n{\"Name\":\"NEGS\",\"Bits\":\"1|1|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|1|1|1|1|1|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"NEGS <Xd>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SUBS (shifted register) instruction.\"},\n{\"Name\":\"NGC\",\"Bits\":\"0|1|0|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|1|1|1|1|1|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"NGC <Wd>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBC instruction.\"},\n{\"Name\":\"NGC\",\"Bits\":\"1|1|0|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|1|1|1|1|1|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"NGC <Xd>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBC instruction.\"},\n{\"Name\":\"NGCS\",\"Bits\":\"0|1|1|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|1|1|1|1|1|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"NGCS <Wd>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBCS instruction.\"},\n{\"Name\":\"NGCS\",\"Bits\":\"1|1|1|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|1|1|1|1|1|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"NGCS <Xd>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBCS instruction.\"},\n{\"Name\":\"NOP\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|0|0|0|0|0|0|0|0|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"NOP\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ORN (shifted register)\",\"Bits\":\"0|0|1|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ORN <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MVN.\"},\n{\"Name\":\"ORN (shifted register)\",\"Bits\":\"1|0|1|0|1|0|1|0|shift:2|1|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ORN <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MVN.\"},\n{\"Name\":\"ORR (immediate)\",\"Bits\":\"0|0|1|1|0|0|1|0|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ORR <Wd|WSP>, <Wn>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (bitmask immediate).\"},\n{\"Name\":\"ORR (immediate)\",\"Bits\":\"1|0|1|1|0|0|1|0|0|N|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ORR <Xd|SP>, <Xn>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (bitmask immediate).\"},\n{\"Name\":\"ORR (shifted register)\",\"Bits\":\"0|0|1|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ORR <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (register).\"},\n{\"Name\":\"ORR (shifted register)\",\"Bits\":\"1|0|1|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ORR <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (register).\"},\n{\"Name\":\"PRFM (immediate)\",\"Bits\":\"1|1|1|1|1|0|0|1|1|0|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset variant\",\"Syntax\":\"PRFM (<prfop>|#<imm5>), [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"PRFM (literal)\",\"Bits\":\"1|1|0|1|1|0|0|0|imm19:19|Rt:5\",\"Arch\":\"Literal variant\",\"Syntax\":\"PRFM (<prfop>|#<imm5>), <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"PRFM (register)\",\"Bits\":\"1|1|1|1|1|0|0|0|1|0|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"Integer variant\",\"Syntax\":\"PRFM (<prfop>|#<imm5>), [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"PRFM (unscaled offset)\",\"Bits\":\"1|1|1|1|1|0|0|0|1|0|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"PRFUM (<prfop>|#<imm5>), [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"RBIT\",\"Bits\":\"0|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"RBIT <Wd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"RBIT\",\"Bits\":\"1|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"RBIT <Xd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"RET\",\"Bits\":\"1|1|0|1|0|1|1|0|0|1|0|1|1|1|1|1|0|0|0|0|0|0|Rn:5|0|0|0|0|0\",\"Arch\":\"Integer variant\",\"Syntax\":\"RET {<Xn>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"REV\",\"Bits\":\"0|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|0|10:2|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"REV <Wd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"REV\",\"Bits\":\"1|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|0|11:2|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"REV <Xd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"REV16\",\"Bits\":\"0|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"REV16 <Wd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"REV16\",\"Bits\":\"1|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"REV16 <Xd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"REV32\",\"Bits\":\"1|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"REV32 <Xd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"REV64\",\"Bits\":\"1|1|0|1|1|0|1|0|1|1|0|0|0|0|0|0|0|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"REV64 <Xd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ROR (immediate)\",\"Bits\":\"0|0|0|1|0|0|1|1|1|0|0|Rm:5|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ROR <Wd>, <Ws>, #<shift>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the EXTR instruction.\"},\n{\"Name\":\"ROR (immediate)\",\"Bits\":\"1|0|0|1|0|0|1|1|1|1|0|Rm:5|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ROR <Xd>, <Xs>, #<shift>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the EXTR instruction.\"},\n{\"Name\":\"ROR (register)\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ROR <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the RORV instruction.\"},\n{\"Name\":\"ROR (register)\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"ROR <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the RORV instruction.\"},\n{\"Name\":\"RORV\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"RORV <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias ROR (register).\"},\n{\"Name\":\"RORV\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"RORV <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias ROR (register).\"},\n{\"Name\":\"SBC\",\"Bits\":\"0|1|0|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SBC <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias NGC.\"},\n{\"Name\":\"SBC\",\"Bits\":\"1|1|0|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SBC <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias NGC.\"},\n{\"Name\":\"SBCS\",\"Bits\":\"0|1|1|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SBCS <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias NGCS.\"},\n{\"Name\":\"SBCS\",\"Bits\":\"1|1|1|1|1|0|1|0|0|0|0|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SBCS <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias NGCS.\"},\n{\"Name\":\"SBFIZ\",\"Bits\":\"0|0|0|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SBFIZ <Wd>, <Wn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"SBFIZ\",\"Bits\":\"1|0|0|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SBFIZ <Xd>, <Xn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"SBFM\",\"Bits\":\"0|0|0|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SBFM <Wd>, <Wn>, #<immr>, #<imms>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases ASR (immediate), SBFIZ, SBFX, SXTB, SXTH, and SXTW.\"},\n{\"Name\":\"SBFM\",\"Bits\":\"1|0|0|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SBFM <Xd>, <Xn>, #<immr>, #<imms>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases ASR (immediate), SBFIZ, SBFX, SXTB, SXTH, and SXTW.\"},\n{\"Name\":\"SBFX\",\"Bits\":\"0|0|0|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SBFX <Wd>, <Wn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"SBFX\",\"Bits\":\"1|0|0|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SBFX <Xd>, <Xn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"SDIV\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SDIV <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SDIV\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SDIV <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SEV\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|0|0|0|0|0|1|0|0|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"SEV\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SEVL\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|0|0|0|0|0|1|0|1|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"SEVL\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMADDL\",\"Bits\":\"1|0|0|1|1|0|1|1|0|0|1|Rm:5|0|Ra:5|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SMADDL <Xd>, <Wn>, <Wm>, <Xa>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias SMULL.\"},\n{\"Name\":\"SMC\",\"Bits\":\"1|1|0|1|0|1|0|0|0|0|0|imm16:16|0|0|0|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"SMC #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMNEGL\",\"Bits\":\"1|0|0|1|1|0|1|1|0|0|1|Rm:5|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SMNEGL <Xd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SMSUBL instruction.\"},\n{\"Name\":\"SMSUBL\",\"Bits\":\"1|0|0|1|1|0|1|1|0|0|1|Rm:5|1|Ra:5|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SMSUBL <Xd>, <Wn>, <Wm>, <Xa>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias SMNEGL.\"},\n{\"Name\":\"SMULH\",\"Bits\":\"1|0|0|1|1|0|1|1|0|1|0|Rm:5|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SMULH <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMULL\",\"Bits\":\"1|0|0|1|1|0|1|1|0|0|1|Rm:5|0|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SMULL <Xd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SMADDL instruction.\"},\n{\"Name\":\"STLR\",\"Bits\":\"10:2|0|0|1|0|0|0|1|0|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STLR <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STLR\",\"Bits\":\"11:2|0|0|1|0|0|0|1|0|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STLR <Xt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STLRB\",\"Bits\":\"0|0|0|0|1|0|0|0|1|0|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"STLRB <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STLRH\",\"Bits\":\"0|1|0|0|1|0|0|0|1|0|0|(1)|(1)|(1)|(1)|(1)|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"STLRH <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STLXP\",\"Bits\":\"1|0|0|0|1|0|0|0|0|0|1|Rs:5|1|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STLXP <Ws>, <Wt1>, <Wt2>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STLXP\",\"Bits\":\"1|1|0|0|1|0|0|0|0|0|1|Rs:5|1|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STLXP <Ws>, <Xt1>, <Xt2>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STLXR\",\"Bits\":\"10:2|0|0|1|0|0|0|0|0|0|Rs:5|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STLXR <Ws>, <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STLXR\",\"Bits\":\"11:2|0|0|1|0|0|0|0|0|0|Rs:5|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STLXR <Ws>, <Xt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STLXRB\",\"Bits\":\"0|0|0|0|1|0|0|0|0|0|0|Rs:5|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"STLXRB <Ws>, <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STLXRH\",\"Bits\":\"0|1|0|0|1|0|0|0|0|0|0|Rs:5|1|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"STLXRH <Ws>, <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STNP\",\"Bits\":\"00:2|1|0|1|0|0|0|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STNP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STNP\",\"Bits\":\"10:2|1|0|1|0|0|0|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STNP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP\",\"Bits\":\"00:2|1|0|1|0|0|0|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"STP <Wt1>, <Wt2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP\",\"Bits\":\"10:2|1|0|1|0|0|0|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"STP <Xt1>, <Xt2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP\",\"Bits\":\"00:2|1|0|1|0|0|1|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"STP <Wt1>, <Wt2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP\",\"Bits\":\"10:2|1|0|1|0|0|1|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"STP <Xt1>, <Xt2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP\",\"Bits\":\"00:2|1|0|1|0|0|1|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 32-bit variant\",\"Syntax\":\"STP <Wt1>, <Wt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP\",\"Bits\":\"10:2|1|0|1|0|0|1|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 64-bit variant\",\"Syntax\":\"STP <Xt1>, <Xt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate)\",\"Bits\":\"10:2|1|1|1|0|0|0|0|0|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"STR <Wt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate)\",\"Bits\":\"11:2|1|1|1|0|0|0|0|0|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"STR <Xt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate)\",\"Bits\":\"10:2|1|1|1|0|0|0|0|0|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"STR <Wt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate)\",\"Bits\":\"11:2|1|1|1|0|0|0|0|0|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"STR <Xt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate)\",\"Bits\":\"10:2|1|1|1|0|0|1|0|0|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 32-bit variant\",\"Syntax\":\"STR <Wt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate)\",\"Bits\":\"11:2|1|1|1|0|0|1|0|0|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 64-bit variant\",\"Syntax\":\"STR <Xt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (register)\",\"Bits\":\"10:2|1|1|1|0|0|0|0|0|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STR <Wt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (register)\",\"Bits\":\"11:2|1|1|1|0|0|0|0|0|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STR <Xt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STRB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|0|0|0|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index Post-index variant\",\"Syntax\":\"STRB <Wt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STRB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|0|0|0|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index Pre-index variant\",\"Syntax\":\"STRB <Wt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STRB (immediate)\",\"Bits\":\"0|0|1|1|1|0|0|1|0|0|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset Unsigned offset variant\",\"Syntax\":\"STRB <Wt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STRB (register)\",\"Bits\":\"0|0|1|1|1|0|0|0|0|0|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"Extended register variant\",\"Syntax\":\"STRB <Wt>, [<Xn|SP>, (<Wm>|<Xm>), <extend> {<amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STRB (register)\",\"Bits\":\"0|0|1|1|1|0|0|0|0|0|1|Rm:5|011:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"Shifted register variant\",\"Syntax\":\"STRB <Wt>, [<Xn|SP>, <Xm>{, LSL <amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STRH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|0|0|0|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index Post-index variant\",\"Syntax\":\"STRH <Wt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STRH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|0|0|0|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index Pre-index variant\",\"Syntax\":\"STRH <Wt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STRH (immediate)\",\"Bits\":\"0|1|1|1|1|0|0|1|0|0|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset Unsigned offset variant\",\"Syntax\":\"STRH <Wt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STRH (register)\",\"Bits\":\"0|1|1|1|1|0|0|0|0|0|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STRH <Wt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STTR\",\"Bits\":\"10:2|1|1|1|0|0|0|0|0|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STTR <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STTR\",\"Bits\":\"11:2|1|1|1|0|0|0|0|0|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STTR <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STTRB\",\"Bits\":\"0|0|1|1|1|0|0|0|0|0|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"STTRB <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STTRH\",\"Bits\":\"0|1|1|1|1|0|0|0|0|0|0|imm9:9|1|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"STTRH <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STUR\",\"Bits\":\"10:2|1|1|1|0|0|0|0|0|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STUR <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STUR\",\"Bits\":\"11:2|1|1|1|0|0|0|0|0|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STUR <Xt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STURB\",\"Bits\":\"0|0|1|1|1|0|0|0|0|0|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"STURB <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STURH\",\"Bits\":\"0|1|1|1|1|0|0|0|0|0|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"Unscaled offset variant\",\"Syntax\":\"STURH <Wt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STXP\",\"Bits\":\"1|0|0|0|1|0|0|0|0|0|1|Rs:5|0|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STXP <Ws>, <Wt1>, <Wt2>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STXP\",\"Bits\":\"1|1|0|0|1|0|0|0|0|0|1|Rs:5|0|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STXP <Ws>, <Xt1>, <Xt2>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STXR\",\"Bits\":\"10:2|0|0|1|0|0|0|0|0|0|Rs:5|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STXR <Ws>, <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STXR\",\"Bits\":\"11:2|0|0|1|0|0|0|0|0|0|Rs:5|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STXR <Ws>, <Xt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STXRB\",\"Bits\":\"0|0|0|0|1|0|0|0|0|0|0|Rs:5|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"STXRB <Ws>, <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STXRH\",\"Bits\":\"0|1|0|0|1|0|0|0|0|0|0|Rs:5|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rt:5\",\"Arch\":\"No offset variant\",\"Syntax\":\"STXRH <Ws>, <Wt>, [<Xn|SP>{,#0}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUB (extended register)\",\"Bits\":\"0|1|0|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SUB <Wd|WSP>, <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUB (extended register)\",\"Bits\":\"1|1|0|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SUB <Xd|SP>, <Xn|SP>, <R><m>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUB (immediate)\",\"Bits\":\"0|1|0|1|0|0|0|1|shift:2|imm12:12|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SUB <Wd|WSP>, <Wn|WSP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUB (immediate)\",\"Bits\":\"1|1|0|1|0|0|0|1|shift:2|imm12:12|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SUB <Xd|SP>, <Xn|SP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUB (shifted register)\",\"Bits\":\"0|1|0|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SUB <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias NEG (shifted register).\"},\n{\"Name\":\"SUB (shifted register)\",\"Bits\":\"1|1|0|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SUB <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias NEG (shifted register).\"},\n{\"Name\":\"SUBS (extended register)\",\"Bits\":\"0|1|1|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SUBS <Wd>, <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMP (extended register).\"},\n{\"Name\":\"SUBS (extended register)\",\"Bits\":\"1|1|1|0|1|0|1|1|0|0|1|Rm:5|option:3|imm3:3|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SUBS <Xd>, <Xn|SP>, <R><m>{, <extend> {#<amount>}}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMP (extended register).\"},\n{\"Name\":\"SUBS (immediate)\",\"Bits\":\"0|1|1|1|0|0|0|1|shift:2|imm12:12|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SUBS <Wd>, <Wn|WSP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMP (immediate).\"},\n{\"Name\":\"SUBS (immediate)\",\"Bits\":\"1|1|1|1|0|0|0|1|shift:2|imm12:12|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SUBS <Xd>, <Xn|SP>, #<imm>{, <shift>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias CMP (immediate).\"},\n{\"Name\":\"SUBS (shifted register)\",\"Bits\":\"0|1|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SUBS <Wd>, <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases CMP (shifted register) and NEGS.\"},\n{\"Name\":\"SUBS (shifted register)\",\"Bits\":\"1|1|1|0|1|0|1|1|shift:2|0|Rm:5|imm6:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SUBS <Xd>, <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases CMP (shifted register) and NEGS.\"},\n{\"Name\":\"SVC\",\"Bits\":\"1|1|0|1|0|1|0|0|0|0|0|imm16:16|0|0|0|0|1\",\"Arch\":\"System variant\",\"Syntax\":\"SVC #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SXTB\",\"Bits\":\"0|0|0|1|0|0|1|1|0|0|0|0|0|0|0|0|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SXTB <Wd>, <Wn>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"SXTB\",\"Bits\":\"1|0|0|1|0|0|1|1|0|1|0|0|0|0|0|0|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SXTB <Xd>, <Wn>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"SXTH\",\"Bits\":\"0|0|0|1|0|0|1|1|0|0|0|0|0|0|0|0|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SXTH <Wd>, <Wn>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"SXTH\",\"Bits\":\"1|0|0|1|0|0|1|1|0|1|0|0|0|0|0|0|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SXTH <Xd>, <Wn>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"SXTW\",\"Bits\":\"1|0|0|1|0|0|1|1|0|1|0|0|0|0|0|0|0|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SXTW <Xd>, <Wn>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SBFM instruction.\"},\n{\"Name\":\"SYS\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|1|op1:3|CRn:4|CRm:4|op2:3|Rt:5\",\"Arch\":\"System variant\",\"Syntax\":\"SYS #<op1>, <Cn>, <Cm>, #<op2>{, <Xt>}\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases AT, DC, IC, and TLBI.\"},\n{\"Name\":\"SYSL\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|1|0|1|op1:3|CRn:4|CRm:4|op2:3|Rt:5\",\"Arch\":\"System variant\",\"Syntax\":\"SYSL <Xt>, #<op1>, <Cn>, <Cm>, #<op2>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TBNZ\",\"Bits\":\"b5|0|1|1|0|1|1|1|b40:5|imm14:14|Rt:5\",\"Arch\":\"14-bit signed PC-relative branch offset variant\",\"Syntax\":\"TBNZ <R><t>, #<imm>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TBZ\",\"Bits\":\"b5|0|1|1|0|1|1|0|b40:5|imm14:14|Rt:5\",\"Arch\":\"14-bit signed PC-relative branch offset variant\",\"Syntax\":\"TBZ <R><t>, #<imm>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TLBI\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|1|op1:3|1|0|0|0|CRm:4|op2:3|Rt:5\",\"Arch\":\"System variant\",\"Syntax\":\"TLBI <tlbi_op>{, <Xt>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SYS instruction.\"},\n{\"Name\":\"TST (immediate)\",\"Bits\":\"0|1|1|1|0|0|1|0|0|0|immr:6|imms:6|Rn:5|1|1|1|1|1\",\"Arch\":\"32-bit variant\",\"Syntax\":\"TST <Wn>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ANDS (immediate) instruction.\"},\n{\"Name\":\"TST (immediate)\",\"Bits\":\"1|1|1|1|0|0|1|0|0|N|immr:6|imms:6|Rn:5|1|1|1|1|1\",\"Arch\":\"64-bit variant\",\"Syntax\":\"TST <Xn>, #<imm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ANDS (immediate) instruction.\"},\n{\"Name\":\"TST (shifted register)\",\"Bits\":\"0|1|1|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|1|1|1|1|1\",\"Arch\":\"32-bit variant\",\"Syntax\":\"TST <Wn>, <Wm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ANDS (shifted register) instruction.\"},\n{\"Name\":\"TST (shifted register)\",\"Bits\":\"1|1|1|0|1|0|1|0|shift:2|0|Rm:5|imm6:6|Rn:5|1|1|1|1|1\",\"Arch\":\"64-bit variant\",\"Syntax\":\"TST <Xn>, <Xm>{, <shift> #<amount>}\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ANDS (shifted register) instruction.\"},\n{\"Name\":\"UBFIZ\",\"Bits\":\"0|1|0|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"UBFIZ <Wd>, <Wn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"UBFIZ\",\"Bits\":\"1|1|0|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UBFIZ <Xd>, <Xn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"UBFM\",\"Bits\":\"0|1|0|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"UBFM <Wd>, <Wn>, #<immr>, #<imms>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases LSL (immediate), LSR (immediate), UBFIZ, UBFX, UXTB, and UXTH.\"},\n{\"Name\":\"UBFM\",\"Bits\":\"1|1|0|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UBFM <Xd>, <Xn>, #<immr>, #<imms>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the aliases LSL (immediate), LSR (immediate), UBFIZ, UBFX, UXTB, and UXTH.\"},\n{\"Name\":\"UBFX\",\"Bits\":\"0|1|0|1|0|0|1|1|0|0|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"UBFX <Wd>, <Wn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"UBFX\",\"Bits\":\"1|1|0|1|0|0|1|1|0|1|immr:6|imms:6|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UBFX <Xd>, <Xn>, #<lsb>, #<width>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"UDIV\",\"Bits\":\"0|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"UDIV <Wd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UDIV\",\"Bits\":\"1|0|0|1|1|0|1|0|1|1|0|Rm:5|0|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UDIV <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMADDL\",\"Bits\":\"1|0|0|1|1|0|1|1|1|0|1|Rm:5|0|Ra:5|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UMADDL <Xd>, <Wn>, <Wm>, <Xa>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias UMULL.\"},\n{\"Name\":\"UMNEGL\",\"Bits\":\"1|0|0|1|1|0|1|1|1|0|1|Rm:5|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UMNEGL <Xd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UMSUBL instruction.\"},\n{\"Name\":\"UMSUBL\",\"Bits\":\"1|0|0|1|1|0|1|1|1|0|1|Rm:5|1|Ra:5|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UMSUBL <Xd>, <Wn>, <Wm>, <Xa>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias UMNEGL.\"},\n{\"Name\":\"UMULH\",\"Bits\":\"1|0|0|1|1|0|1|1|1|1|0|Rm:5|0|(1)|(1)|(1)|(1)|(1)|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UMULH <Xd>, <Xn>, <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMULL\",\"Bits\":\"1|0|0|1|1|0|1|1|1|0|1|Rm:5|0|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UMULL <Xd>, <Wn>, <Wm>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UMADDL instruction.\"},\n{\"Name\":\"UXTB\",\"Bits\":\"0|1|0|1|0|0|1|1|0|0|0|0|0|0|0|0|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"UXTB <Wd>, <Wn>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"UXTH\",\"Bits\":\"0|1|0|1|0|0|1|1|0|0|0|0|0|0|0|0|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"UXTH <Wd>, <Wn>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UBFM instruction.\"},\n{\"Name\":\"WFE\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|0|0|0|0|0|0|1|0|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"WFE\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"WFI\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|0|0|0|0|0|0|1|1|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"WFI\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"YIELD\",\"Bits\":\"1|1|0|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|1|0|0|0|0|0|0|0|1|1|1|1|1|1\",\"Arch\":\"System variant\",\"Syntax\":\"YIELD\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ABS\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|0|0|0|0|0|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"ABS <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ABS\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"ABS <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADD (vector)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|1|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"ADD <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADD (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|1|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"ADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADDHN, ADDHN2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"ADDHN <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADDHN, ADDHN2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"ADDHN2 <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADDP (scalar)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|1|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"ADDP <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADDP (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|1|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"ADDP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ADDV\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|1|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"ADDV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"AESD\",\"Bits\":\"0|1|0|0|1|1|1|0|0|0|1|0|1|0|0|0|0|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"AESD <Vd>.16B, <Vn>.16B\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"AESE\",\"Bits\":\"0|1|0|0|1|1|1|0|0|0|1|0|1|0|0|0|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"AESE <Vd>.16B, <Vn>.16B\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"AESIMC\",\"Bits\":\"0|1|0|0|1|1|1|0|0|0|1|0|1|0|0|0|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"AESIMC <Vd>.16B, <Vn>.16B\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"AESMC\",\"Bits\":\"0|1|0|0|1|1|1|0|0|0|1|0|1|0|0|0|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"AESMC <Vd>.16B, <Vn>.16B\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"AND (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|1|Rm:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"AND <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BIC (vector, immediate)\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"16-bit variant\",\"Syntax\":\"BIC <Vd>.<T>, #<imm8>{, LSL #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BIC (vector, immediate)\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"BIC <Vd>.<T>, #<imm8>{, LSL #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BIC (vector, register)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|1|1|Rm:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"BIC <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BIF\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|1|1|Rm:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"BIF <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BIT\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|0|1|Rm:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"BIT <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"BSL\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|1|1|Rm:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"BSL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CLS (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"CLS <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CLZ (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|0|0|0|0|0|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"CLZ <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMEQ (register)\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|1|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMEQ <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMEQ (register)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|1|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMEQ <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMEQ (zero)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|0|0|0|0|0|1|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMEQ <V><d>, <V><n>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMEQ (zero)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|1|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMEQ <Vd>.<T>, <Vn>.<T>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMGE (register)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMGE <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMGE (register)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMGE <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMGE (zero)\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|0|0|0|0|0|1|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMGE <V><d>, <V><n>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMGE (zero)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|0|0|0|0|0|1|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMGE <Vd>.<T>, <Vn>.<T>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMGT (register)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|0|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMGT <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMGT (register)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMGT <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMGT (zero)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|0|0|0|0|0|1|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMGT <V><d>, <V><n>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMGT (zero)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|1|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMGT <Vd>.<T>, <Vn>.<T>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMHI (register)\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|0|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMHI <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMHI (register)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMHI <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMHS (register)\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMHS <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMHS (register)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMHS <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMLE (zero)\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|0|0|0|0|0|1|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMLE <V><d>, <V><n>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMLE (zero)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|0|0|0|0|0|1|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMLE <Vd>.<T>, <Vn>.<T>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMLT (zero)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|0|0|0|0|0|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMLT <V><d>, <V><n>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMLT (zero)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMLT <Vd>.<T>, <Vn>.<T>, #0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMTST\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|1|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"CMTST <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CMTST\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|1|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"CMTST <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"CNT\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|0|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"CNT <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"DUP (element)\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|0|imm5:5|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"DUP <V><d>, <Vn>.<T>[<index>]\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (scalar).\"},\n{\"Name\":\"DUP (element)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|imm5:5|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"DUP <Vd>.<T>, <Vn>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (scalar).\"},\n{\"Name\":\"DUP (general)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|imm5:5|0|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"DUP <Vd>.<T>, <R><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"EOR (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|0|1|Rm:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"EOR <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"EXT\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|0|0|Rm:5|0|imm4:4|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"EXT <Vd>.<T>, <Vn>.<T>, <Vm>.<T>, #<index>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FABD\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|Rm:5|1|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FABD <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FABD\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|Rm:5|1|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FABD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FABS (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FABS <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FABS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|0|0|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FABS <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FABS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|0|0|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FABS <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FACGE\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|Rm:5|1|1|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FACGE <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FACGE\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|Rm:5|1|1|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FACGE <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FACGT\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|Rm:5|1|1|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FACGT <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FACGT\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|Rm:5|1|1|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FACGT <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FADD (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|Rm:5|1|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FADD (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FADD <Sd>, <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FADD (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FADD <Dd>, <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FADDP (scalar)\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|1|0|0|0|0|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision and double-precision variant\",\"Syntax\":\"FADDP <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FADDP (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|Rm:5|1|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FADDP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCCMP\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|cond:4|0|1|Rn:5|0|nzcv:4\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FCCMP <Sn>, <Sm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCCMP\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|cond:4|0|1|Rn:5|0|nzcv:4\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FCCMP <Dn>, <Dm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCCMPE\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|cond:4|0|1|Rn:5|1|nzcv:4\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FCCMPE <Sn>, <Sm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCCMPE\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|cond:4|0|1|Rn:5|1|nzcv:4\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FCCMPE <Dn>, <Dm>, #<nzcv>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMEQ (register)\",\"Bits\":\"0|1|0|1|1|1|1|0|0|sz|1|Rm:5|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCMEQ <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMEQ (register)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|Rm:5|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCMEQ <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMEQ (zero)\",\"Bits\":\"0|1|0|1|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCMEQ <V><d>, <V><n>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMEQ (zero)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCMEQ <Vd>.<T>, <Vn>.<T>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMGE (register)\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|Rm:5|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCMGE <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMGE (register)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|Rm:5|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCMGE <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMGE (zero)\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCMGE <V><d>, <V><n>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMGE (zero)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCMGE <Vd>.<T>, <Vn>.<T>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMGT (register)\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|Rm:5|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCMGT <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMGT (register)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|Rm:5|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCMGT <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMGT (zero)\",\"Bits\":\"0|1|0|1|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCMGT <V><d>, <V><n>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMGT (zero)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCMGT <Vd>.<T>, <Vn>.<T>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMLE (zero)\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCMLE <V><d>, <V><n>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMLE (zero)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCMLE <Vd>.<T>, <Vn>.<T>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMLT (zero)\",\"Bits\":\"0|1|0|1|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCMLT <V><d>, <V><n>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMLT (zero)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCMLT <Vd>.<T>, <Vn>.<T>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMP\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|0|1|0|0|0|Rn:5|00:2|0|0|0\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FCMP <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMP\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|(00000):5|0|0|1|0|0|0|Rn:5|01:2|0|0|0\",\"Arch\":\"Single-precision, zero variant\",\"Syntax\":\"FCMP <Sn>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMP\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|0|1|0|0|0|Rn:5|00:2|0|0|0\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FCMP <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMP\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|(00000):5|0|0|1|0|0|0|Rn:5|01:2|0|0|0\",\"Arch\":\"Double-precision, zero variant\",\"Syntax\":\"FCMP <Dn>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMPE\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|0|1|0|0|0|Rn:5|10:2|0|0|0\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FCMPE <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMPE\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|(00000):5|0|0|1|0|0|0|Rn:5|11:2|0|0|0\",\"Arch\":\"Single-precision, zero variant\",\"Syntax\":\"FCMPE <Sn>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMPE\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|0|1|0|0|0|Rn:5|10:2|0|0|0\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FCMPE <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCMPE\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|(00000):5|0|0|1|0|0|0|Rn:5|11:2|0|0|0\",\"Arch\":\"Double-precision, zero variant\",\"Syntax\":\"FCMPE <Dn>, #0.0\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCSEL\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|cond:4|1|1|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FCSEL <Sd>, <Sn>, <Sm>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCSEL\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|cond:4|1|1|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FCSEL <Dd>, <Dn>, <Dm>, <cond>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVT\",\"Bits\":\"0|0|0|1|1|1|1|0|11:2|1|0|0|0|1|00:2|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Half-precision to single-precision variant\",\"Syntax\":\"FCVT <Sd>, <Hn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVT\",\"Bits\":\"0|0|0|1|1|1|1|0|11:2|1|0|0|0|1|01:2|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Half-precision to double-precision variant\",\"Syntax\":\"FCVT <Dd>, <Hn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVT\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|1|11:2|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to half-precision variant\",\"Syntax\":\"FCVT <Hd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVT\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|1|01:2|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to double-precision variant\",\"Syntax\":\"FCVT <Dd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVT\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|1|11:2|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to half-precision variant\",\"Syntax\":\"FCVT <Hd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVT\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|1|00:2|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to single-precision variant\",\"Syntax\":\"FCVT <Sd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAS (vector)\",\"Bits\":\"0|1|0|1|1|1|1|0|0|sz|1|0|0|0|0|1|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTAS <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAS (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTAS <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|1|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTAS <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAS (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|0|0|1|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTAS <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|1|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTAS <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAS (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|0|0|1|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTAS <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAU (vector)\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|0|0|0|0|1|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTAU <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAU (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTAU <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAU (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|1|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTAU <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAU (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|0|0|1|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTAU <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAU (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|1|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTAU <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTAU (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|0|0|1|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTAU <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTL, FCVTL2\",\"Bits\":\"0|0|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FCVTL <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTL, FCVTL2\",\"Bits\":\"0|1|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FCVTL2 <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMS (vector)\",\"Bits\":\"0|1|0|1|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTMS <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMS (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTMS <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|1|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTMS <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMS (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|1|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTMS <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|1|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTMS <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMS (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|1|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTMS <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMU (vector)\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTMU <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMU (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTMU <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMU (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|1|0|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTMU <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMU (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|1|0|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTMU <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMU (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|1|0|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTMU <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTMU (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|1|0|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTMU <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTN, FCVTN2\",\"Bits\":\"0|0|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FCVTN <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTN, FCVTN2\",\"Bits\":\"0|1|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FCVTN2 <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNS (vector)\",\"Bits\":\"0|1|0|1|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTNS <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNS (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTNS <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTNS <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNS (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|0|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTNS <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTNS <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNS (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|0|0|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTNS <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNU (vector)\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTNU <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNU (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTNU <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNU (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTNU <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNU (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|0|0|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTNU <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNU (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTNU <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTNU (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|0|0|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTNU <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPS (vector)\",\"Bits\":\"0|1|0|1|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTPS <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPS (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTPS <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|1|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTPS <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPS (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|0|1|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTPS <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPS (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|1|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTPS <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPS (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|0|1|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTPS <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPU (vector)\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTPU <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPU (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTPU <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPU (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|1|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTPU <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPU (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|0|1|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTPU <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPU (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|1|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTPU <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTPU (scalar)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|0|1|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTPU <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTXN, FCVTXN2\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|0|0|0|0|1|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTXN <Vb><d>, <Va><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTXN, FCVTXN2\",\"Bits\":\"0|0|1|0|1|1|1|0|0|sz|1|0|0|0|0|1|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTXN <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTXN, FCVTXN2\",\"Bits\":\"0|1|1|0|1|1|1|0|0|sz|1|0|0|0|0|1|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTXN2 <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (vector, fixed-point)\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTZS <V><d>, <V><n>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (vector, fixed-point)\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|immh:4|immb:3|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTZS <Vd>.<T>, <Vn>.<T>, #<fbits>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (vector, integer)\",\"Bits\":\"0|1|0|1|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTZS <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (vector, integer)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTZS <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (scalar, fixed-point)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|0|1|1|0|0|0|scale:6|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTZS <Wd>, <Sn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (scalar, fixed-point)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|0|1|1|0|0|0|scale:6|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTZS <Xd>, <Sn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (scalar, fixed-point)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|0|1|1|0|0|0|scale:6|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTZS <Wd>, <Dn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (scalar, fixed-point)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|0|1|1|0|0|0|scale:6|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTZS <Xd>, <Dn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (scalar, integer)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|1|1|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTZS <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (scalar, integer)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|1|1|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTZS <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (scalar, integer)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|1|1|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTZS <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZS (scalar, integer)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|1|1|0|0|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTZS <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (vector, fixed-point)\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTZU <V><d>, <V><n>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (vector, fixed-point)\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTZU <Vd>.<T>, <Vn>.<T>, #<fbits>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (vector, integer)\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FCVTZU <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (vector, integer)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FCVTZU <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (scalar, fixed-point)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|0|1|1|0|0|1|scale:6|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTZU <Wd>, <Sn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (scalar, fixed-point)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|0|1|1|0|0|1|scale:6|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTZU <Xd>, <Sn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (scalar, fixed-point)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|0|1|1|0|0|1|scale:6|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTZU <Wd>, <Dn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (scalar, fixed-point)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|0|1|1|0|0|1|scale:6|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTZU <Xd>, <Dn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (scalar, integer)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|1|1|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FCVTZU <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (scalar, integer)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|1|1|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 64-bit variant\",\"Syntax\":\"FCVTZU <Xd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (scalar, integer)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|1|1|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 32-bit variant\",\"Syntax\":\"FCVTZU <Wd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FCVTZU (scalar, integer)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|1|1|0|0|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FCVTZU <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FDIV (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|Rm:5|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FDIV <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FDIV (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FDIV <Sd>, <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FDIV (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FDIV <Dd>, <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMADD\",\"Bits\":\"0|0|0|1|1|1|1|1|00:2|0|Rm:5|0|Ra:5|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMADD <Sd>, <Sn>, <Sm>, <Sa>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMADD\",\"Bits\":\"0|0|0|1|1|1|1|1|01:2|0|Rm:5|0|Ra:5|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMADD <Dd>, <Dn>, <Dm>, <Da>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAX (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|Rm:5|1|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMAX <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAX (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMAX <Sd>, <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAX (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMAX <Dd>, <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAXNM (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|Rm:5|1|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMAXNM <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAXNM (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMAXNM <Sd>, <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAXNM (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMAXNM <Dd>, <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAXNMP (scalar)\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|1|0|0|0|0|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision and double-precision variant\",\"Syntax\":\"FMAXNMP <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAXNMP (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|Rm:5|1|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMAXNMP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAXNMV\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|1|0|0|0|0|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision and double-precision variant\",\"Syntax\":\"FMAXNMV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAXP (scalar)\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|1|0|0|0|0|1|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision and double-precision variant\",\"Syntax\":\"FMAXP <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAXP (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|Rm:5|1|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMAXP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMAXV\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|1|0|0|0|0|1|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision and double-precision variant\",\"Syntax\":\"FMAXV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMIN (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|Rm:5|1|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMIN <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMIN (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMIN <Sd>, <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMIN (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMIN <Dd>, <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMINNM (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|Rm:5|1|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMINNM <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMINNM (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMINNM <Sd>, <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMINNM (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMINNM <Dd>, <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMINNMP (scalar)\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|1|0|0|0|0|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision and double-precision variant\",\"Syntax\":\"FMINNMP <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMINNMP (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|Rm:5|1|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMINNMP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMINNMV\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|1|0|0|0|0|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision and double-precision variant\",\"Syntax\":\"FMINNMV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMINP (scalar)\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|1|0|0|0|0|1|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision and double-precision variant\",\"Syntax\":\"FMINP <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMINP (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|Rm:5|1|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMINP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMINV\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|1|0|0|0|0|1|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision and double-precision variant\",\"Syntax\":\"FMINV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMLA (by element)\",\"Bits\":\"0|1|0|1|1|1|1|1|1|sz|L|M|Rm:4|0|0|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FMLA <V><d>, <V><n>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMLA (by element)\",\"Bits\":\"0|Q|0|0|1|1|1|1|1|sz|L|M|Rm:4|0|0|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FMLA <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMLA (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|Rm:5|1|1|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMLA <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMLS (by element)\",\"Bits\":\"0|1|0|1|1|1|1|1|1|sz|L|M|Rm:4|0|1|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FMLS <V><d>, <V><n>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMLS (by element)\",\"Bits\":\"0|Q|0|0|1|1|1|1|1|sz|L|M|Rm:4|0|1|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FMLS <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMLS (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|Rm:5|1|1|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMLS <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (vector, immediate)\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|0|0|0|0|a|b|c|1|1|1|1|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMOV <Vd>.<T>, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (vector, immediate)\",\"Bits\":\"0|1|1|0|1|1|1|1|0|0|0|0|0|a|b|c|1|1|1|1|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMOV <Vd>.2D, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (register)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|0|0|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMOV <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (register)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|0|0|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMOV <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (general)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|00:2|111:3|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit to single-precision variant\",\"Syntax\":\"FMOV <Sd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (general)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|00:2|110:3|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision to 32-bit variant\",\"Syntax\":\"FMOV <Wd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (general)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|00:2|111:3|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit to double-precision variant\",\"Syntax\":\"FMOV <Dd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (general)\",\"Bits\":\"1|0|0|1|1|1|1|0|10:2|1|01:2|111:3|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit to top half of 128-bit variant\",\"Syntax\":\"FMOV <Vd>.D[1], <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (general)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|00:2|110:3|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision to 64-bit variant\",\"Syntax\":\"FMOV <Xd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (general)\",\"Bits\":\"1|0|0|1|1|1|1|0|10:2|1|01:2|110:3|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Top half of 128-bit to 64-bit variant\",\"Syntax\":\"FMOV <Xd>, <Vn>.D[1]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (scalar, immediate)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|imm8:8|1|0|0|0|0|0|0|0|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMOV <Sd>, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMOV (scalar, immediate)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|imm8:8|1|0|0|0|0|0|0|0|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMOV <Dd>, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMSUB\",\"Bits\":\"0|0|0|1|1|1|1|1|00:2|0|Rm:5|1|Ra:5|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMSUB <Sd>, <Sn>, <Sm>, <Sa>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMSUB\",\"Bits\":\"0|0|0|1|1|1|1|1|01:2|0|Rm:5|1|Ra:5|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMSUB <Dd>, <Dn>, <Dm>, <Da>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMUL (by element)\",\"Bits\":\"0|1|0|1|1|1|1|1|1|sz|L|M|Rm:4|1|0|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FMUL <V><d>, <V><n>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMUL (by element)\",\"Bits\":\"0|Q|0|0|1|1|1|1|1|sz|L|M|Rm:4|1|0|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FMUL <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMUL (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|Rm:5|1|1|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FMUL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMUL (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FMUL <Sd>, <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMUL (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FMUL <Dd>, <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMULX (by element)\",\"Bits\":\"0|1|1|1|1|1|1|1|1|sz|L|M|Rm:4|1|0|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FMULX <V><d>, <V><n>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMULX (by element)\",\"Bits\":\"0|Q|1|0|1|1|1|1|1|sz|L|M|Rm:4|1|0|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FMULX <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMULX\",\"Bits\":\"0|1|0|1|1|1|1|0|0|sz|1|Rm:5|1|1|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FMULX <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FMULX\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|Rm:5|1|1|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FMULX <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FNEG (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|0|0|0|0|0|1|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FNEG <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FNEG (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|0|1|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FNEG <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FNEG (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|0|1|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FNEG <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FNMADD\",\"Bits\":\"0|0|0|1|1|1|1|1|00:2|1|Rm:5|0|Ra:5|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FNMADD <Sd>, <Sn>, <Sm>, <Sa>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FNMADD\",\"Bits\":\"0|0|0|1|1|1|1|1|01:2|1|Rm:5|0|Ra:5|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FNMADD <Dd>, <Dn>, <Dm>, <Da>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FNMSUB\",\"Bits\":\"0|0|0|1|1|1|1|1|00:2|1|Rm:5|1|Ra:5|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FNMSUB <Sd>, <Sn>, <Sm>, <Sa>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FNMSUB\",\"Bits\":\"0|0|0|1|1|1|1|1|01:2|1|Rm:5|1|Ra:5|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FNMSUB <Dd>, <Dn>, <Dm>, <Da>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FNMUL (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|1|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FNMUL <Sd>, <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FNMUL (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|1|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FNMUL <Dd>, <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRECPE\",\"Bits\":\"0|1|0|1|1|1|1|0|1|sz|1|0|0|0|0|1|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FRECPE <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRECPE\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FRECPE <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRECPS\",\"Bits\":\"0|1|0|1|1|1|1|0|0|sz|1|Rm:5|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FRECPS <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRECPS\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|Rm:5|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FRECPS <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRECPX\",\"Bits\":\"0|1|0|1|1|1|1|0|1|sz|1|0|0|0|0|1|1|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar single-precision and double-precision variant\",\"Syntax\":\"FRECPX <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTA (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FRINTA <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTA (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|1|1|0|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FRINTA <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTA (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|1|1|0|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FRINTA <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTI (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FRINTI <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTI (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|1|1|1|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FRINTI <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTI (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|1|1|1|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FRINTI <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTM (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FRINTM <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTM (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|1|0|1|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FRINTM <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTM (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|1|0|1|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FRINTM <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTN (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FRINTN <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTN (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|1|0|0|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FRINTN <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTN (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|1|0|0|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FRINTN <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTP (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FRINTP <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTP (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|1|0|0|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FRINTP <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTP (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|1|0|0|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FRINTP <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTX (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FRINTX <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTX (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|1|1|1|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FRINTX <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTX (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|1|1|1|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FRINTX <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTZ (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FRINTZ <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTZ (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|1|0|1|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FRINTZ <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRINTZ (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|1|0|1|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FRINTZ <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRSQRTE\",\"Bits\":\"0|1|1|1|1|1|1|0|1|sz|1|0|0|0|0|1|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FRSQRTE <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRSQRTE\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FRSQRTE <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRSQRTS\",\"Bits\":\"0|1|0|1|1|1|1|0|1|sz|1|Rm:5|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"FRSQRTS <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FRSQRTS\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|Rm:5|1|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"FRSQRTS <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FSQRT (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FSQRT <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FSQRT (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|0|1|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FSQRT <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FSQRT (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|0|1|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FSQRT <Dd>, <Dn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FSUB (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|Rm:5|1|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector single-precision and double-precision variant\",\"Syntax\":\"FSUB <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FSUB (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|Rm:5|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Single-precision variant\",\"Syntax\":\"FSUB <Sd>, <Sn>, <Sm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"FSUB (scalar)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|Rm:5|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Double-precision variant\",\"Syntax\":\"FSUB <Dd>, <Dn>, <Dm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"INS (element)\",\"Bits\":\"0|1|1|0|1|1|1|0|0|0|0|imm5:5|0|imm4:4|1|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"INS <Vd>.<Ts>[<index1>], <Vn>.<Ts>[<index2>]\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (element).\"},\n{\"Name\":\"INS (general)\",\"Bits\":\"0|1|0|0|1|1|1|0|0|0|0|imm5:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"INS <Vd>.<Ts>[<index>], <R><n>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (from general).\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|1|0|0|0|0|0|0|0111:4|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset One register variant\",\"Syntax\":\"LD1 { <Vt>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|1|0|0|0|0|0|0|1010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset Two registers variant\",\"Syntax\":\"LD1 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|1|0|0|0|0|0|0|0110:4|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset Three registers variant\",\"Syntax\":\"LD1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|1|0|0|0|0|0|0|0010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset Four registers variant\",\"Syntax\":\"LD1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|11111:5|0111:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index One register, immediate offset variant\",\"Syntax\":\"LD1 { <Vt>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|Rm:5|0111:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index One register, register offset variant\",\"Syntax\":\"LD1 { <Vt>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|11111:5|1010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Two registers, immediate offset variant\",\"Syntax\":\"LD1 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|Rm:5|1010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Two registers, register offset variant\",\"Syntax\":\"LD1 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|11111:5|0110:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Three registers, immediate offset variant\",\"Syntax\":\"LD1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|Rm:5|0110:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Three registers, register offset variant\",\"Syntax\":\"LD1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|11111:5|0010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Four registers, immediate offset variant\",\"Syntax\":\"LD1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|Rm:5|0010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Four registers, register offset variant\",\"Syntax\":\"LD1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 8-bit variant\",\"Syntax\":\"LD1 { <Vt>.B }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 16-bit variant\",\"Syntax\":\"LD1 { <Vt>.H }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"No offset 32-bit variant\",\"Syntax\":\"LD1 { <Vt>.S }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"No offset 64-bit variant\",\"Syntax\":\"LD1 { <Vt>.D }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, immediate offset variant\",\"Syntax\":\"LD1 { <Vt>.B }[<index>], [<Xn|SP>], #1\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, register offset variant\",\"Syntax\":\"LD1 { <Vt>.B }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, immediate offset variant\",\"Syntax\":\"LD1 { <Vt>.H }[<index>], [<Xn|SP>], #2\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, register offset variant\",\"Syntax\":\"LD1 { <Vt>.H }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, immediate offset variant\",\"Syntax\":\"LD1 { <Vt>.S }[<index>], [<Xn|SP>], #4\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, register offset variant\",\"Syntax\":\"LD1 { <Vt>.S }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, immediate offset variant\",\"Syntax\":\"LD1 { <Vt>.D }[<index>], [<Xn|SP>], #8\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, register offset variant\",\"Syntax\":\"LD1 { <Vt>.D }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1R\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|1|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"LD1R { <Vt>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1R\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|1|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"LD1R { <Vt>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD1R\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|1|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"LD1R { <Vt>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|1|0|0|0|0|0|0|1|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"LD2 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|11111:5|1|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"LD2 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|Rm:5|1|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"LD2 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 8-bit variant\",\"Syntax\":\"LD2 { <Vt>.B, <Vt2>.B }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 16-bit variant\",\"Syntax\":\"LD2 { <Vt>.H, <Vt2>.H }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"No offset 32-bit variant\",\"Syntax\":\"LD2 { <Vt>.S, <Vt2>.S }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"No offset 64-bit variant\",\"Syntax\":\"LD2 { <Vt>.D, <Vt2>.D }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, immediate offset variant\",\"Syntax\":\"LD2 { <Vt>.B, <Vt2>.B }[<index>], [<Xn|SP>], #2\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, register offset variant\",\"Syntax\":\"LD2 { <Vt>.B, <Vt2>.B }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, immediate offset variant\",\"Syntax\":\"LD2 { <Vt>.H, <Vt2>.H }[<index>], [<Xn|SP>], #4\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, register offset variant\",\"Syntax\":\"LD2 { <Vt>.H, <Vt2>.H }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, immediate offset variant\",\"Syntax\":\"LD2 { <Vt>.S, <Vt2>.S }[<index>], [<Xn|SP>], #8\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, register offset variant\",\"Syntax\":\"LD2 { <Vt>.S, <Vt2>.S }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, immediate offset variant\",\"Syntax\":\"LD2 { <Vt>.D, <Vt2>.D }[<index>], [<Xn|SP>], #16\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, register offset variant\",\"Syntax\":\"LD2 { <Vt>.D, <Vt2>.D }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2R\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|1|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"LD2R { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2R\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|1|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"LD2R { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD2R\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|1|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"LD2R { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|1|0|0|0|0|0|0|0|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"LD3 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|11111:5|0|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"LD3 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|Rm:5|0|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"LD3 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 8-bit variant\",\"Syntax\":\"LD3 { <Vt>.B, <Vt2>.B, <Vt3>.B }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 16-bit variant\",\"Syntax\":\"LD3 { <Vt>.H, <Vt2>.H, <Vt3>.H }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"No offset 32-bit variant\",\"Syntax\":\"LD3 { <Vt>.S, <Vt2>.S, <Vt3>.S }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"No offset 64-bit variant\",\"Syntax\":\"LD3 { <Vt>.D, <Vt2>.D, <Vt3>.D }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, immediate offset variant\",\"Syntax\":\"LD3 { <Vt>.B, <Vt2>.B, <Vt3>.B }[<index>], [<Xn|SP>], #3\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, register offset variant\",\"Syntax\":\"LD3 { <Vt>.B, <Vt2>.B, <Vt3>.B }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, immediate offset variant\",\"Syntax\":\"LD3 { <Vt>.H, <Vt2>.H, <Vt3>.H }[<index>], [<Xn|SP>], #6\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, register offset variant\",\"Syntax\":\"LD3 { <Vt>.H, <Vt2>.H, <Vt3>.H }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, immediate offset variant\",\"Syntax\":\"LD3 { <Vt>.S, <Vt2>.S, <Vt3>.S }[<index>], [<Xn|SP>], #12\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, register offset variant\",\"Syntax\":\"LD3 { <Vt>.S, <Vt2>.S, <Vt3>.S }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, immediate offset variant\",\"Syntax\":\"LD3 { <Vt>.D, <Vt2>.D, <Vt3>.D }[<index>], [<Xn|SP>], #24\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, register offset variant\",\"Syntax\":\"LD3 { <Vt>.D, <Vt2>.D, <Vt3>.D }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3R\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|0|0|0|0|0|0|1|1|1|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"LD3R { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3R\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|11111:5|1|1|1|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"LD3R { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD3R\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|0|Rm:5|1|1|1|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"LD3R { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|1|0|0|0|0|0|0|0|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"LD4 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|11111:5|0|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"LD4 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|1|0|Rm:5|0|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"LD4 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 8-bit variant\",\"Syntax\":\"LD4 { <Vt>.B, <Vt2>.B, <Vt3>.B, <Vt4>.B }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 16-bit variant\",\"Syntax\":\"LD4 { <Vt>.H, <Vt2>.H, <Vt3>.H, <Vt4>.H }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"No offset 32-bit variant\",\"Syntax\":\"LD4 { <Vt>.S, <Vt2>.S, <Vt3>.S, <Vt4>.S }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"No offset 64-bit variant\",\"Syntax\":\"LD4 { <Vt>.D, <Vt2>.D, <Vt3>.D, <Vt4>.D }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, immediate offset variant\",\"Syntax\":\"LD4 { <Vt>.B, <Vt2>.B, <Vt3>.B, <Vt4>.B }[<index>], [<Xn|SP>], #4\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, register offset variant\",\"Syntax\":\"LD4 { <Vt>.B, <Vt2>.B, <Vt3>.B, <Vt4>.B }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, immediate offset variant\",\"Syntax\":\"LD4 { <Vt>.H, <Vt2>.H, <Vt3>.H, <Vt4>.H }[<index>], [<Xn|SP>], #8\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, register offset variant\",\"Syntax\":\"LD4 { <Vt>.H, <Vt2>.H, <Vt3>.H, <Vt4>.H }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, immediate offset variant\",\"Syntax\":\"LD4 { <Vt>.S, <Vt2>.S, <Vt3>.S, <Vt4>.S }[<index>], [<Xn|SP>], #16\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, register offset variant\",\"Syntax\":\"LD4 { <Vt>.S, <Vt2>.S, <Vt3>.S, <Vt4>.S }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, immediate offset variant\",\"Syntax\":\"LD4 { <Vt>.D, <Vt2>.D, <Vt3>.D, <Vt4>.D }[<index>], [<Xn|SP>], #32\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, register offset variant\",\"Syntax\":\"LD4 { <Vt>.D, <Vt2>.D, <Vt3>.D, <Vt4>.D }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4R\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|1|1|0|0|0|0|0|1|1|1|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"LD4R { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4R\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|11111:5|1|1|1|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"LD4R { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LD4R\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|1|1|Rm:5|1|1|1|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"LD4R { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDNP (SIMD&FP)\",\"Bits\":\"00:2|1|0|1|1|0|0|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDNP <St1>, <St2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDNP (SIMD&FP)\",\"Bits\":\"01:2|1|0|1|1|0|0|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDNP <Dt1>, <Dt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDNP (SIMD&FP)\",\"Bits\":\"10:2|1|0|1|1|0|0|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"128-bit variant\",\"Syntax\":\"LDNP <Qt1>, <Qt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP (SIMD&FP)\",\"Bits\":\"00:2|1|0|1|1|0|0|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"LDP <St1>, <St2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP (SIMD&FP)\",\"Bits\":\"01:2|1|0|1|1|0|0|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"LDP <Dt1>, <Dt2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP (SIMD&FP)\",\"Bits\":\"10:2|1|0|1|1|0|0|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 128-bit variant\",\"Syntax\":\"LDP <Qt1>, <Qt2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP (SIMD&FP)\",\"Bits\":\"00:2|1|0|1|1|0|1|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"LDP <St1>, <St2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP (SIMD&FP)\",\"Bits\":\"01:2|1|0|1|1|0|1|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"LDP <Dt1>, <Dt2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP (SIMD&FP)\",\"Bits\":\"10:2|1|0|1|1|0|1|1|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 128-bit variant\",\"Syntax\":\"LDP <Qt1>, <Qt2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP (SIMD&FP)\",\"Bits\":\"00:2|1|0|1|1|0|1|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 32-bit variant\",\"Syntax\":\"LDP <St1>, <St2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP (SIMD&FP)\",\"Bits\":\"01:2|1|0|1|1|0|1|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 64-bit variant\",\"Syntax\":\"LDP <Dt1>, <Dt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDP (SIMD&FP)\",\"Bits\":\"10:2|1|0|1|1|0|1|0|1|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 128-bit variant\",\"Syntax\":\"LDP <Qt1>, <Qt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|01:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit variant\",\"Syntax\":\"LDR <Bt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|0|01:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit variant\",\"Syntax\":\"LDR <Ht>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|0|01:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"LDR <St>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|0|01:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"LDR <Dt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|11:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 128-bit variant\",\"Syntax\":\"LDR <Qt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|01:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 8-bit variant\",\"Syntax\":\"LDR <Bt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|0|01:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 16-bit variant\",\"Syntax\":\"LDR <Ht>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|0|01:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"LDR <St>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|0|01:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"LDR <Dt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|11:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 128-bit variant\",\"Syntax\":\"LDR <Qt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|1|01:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 8-bit variant\",\"Syntax\":\"LDR <Bt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|1|01:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 16-bit variant\",\"Syntax\":\"LDR <Ht>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|1|01:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 32-bit variant\",\"Syntax\":\"LDR <St>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|1|01:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 64-bit variant\",\"Syntax\":\"LDR <Dt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|1|11:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 128-bit variant\",\"Syntax\":\"LDR <Qt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (literal, SIMD&FP)\",\"Bits\":\"00:2|0|1|1|1|0|0|imm19:19|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDR <St>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (literal, SIMD&FP)\",\"Bits\":\"01:2|0|1|1|1|0|0|imm19:19|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDR <Dt>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (literal, SIMD&FP)\",\"Bits\":\"10:2|0|1|1|1|0|0|imm19:19|Rt:5\",\"Arch\":\"128-bit variant\",\"Syntax\":\"LDR <Qt>, <label>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (register, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|01:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"8-bit variant\",\"Syntax\":\"LDR <Bt>, [<Xn|SP>, (<Wm>|<Xm>), <extend> {<amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (register, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|01:2|1|Rm:5|011:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"8-bit variant\",\"Syntax\":\"LDR <Bt>, [<Xn|SP>, <Xm>{, LSL <amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (register, SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|0|01:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"16-bit variant\",\"Syntax\":\"LDR <Ht>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (register, SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|0|01:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDR <St>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (register, SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|0|01:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDR <Dt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDR (register, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|11:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"128-bit variant\",\"Syntax\":\"LDR <Qt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDUR (SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|01:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"8-bit variant\",\"Syntax\":\"LDUR <Bt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDUR (SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|0|01:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"16-bit variant\",\"Syntax\":\"LDUR <Ht>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDUR (SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|0|01:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"LDUR <St>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDUR (SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|0|01:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"LDUR <Dt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"LDUR (SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|11:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"128-bit variant\",\"Syntax\":\"LDUR <Qt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MLA (by element)\",\"Bits\":\"0|Q|1|0|1|1|1|1|size:2|L|M|Rm:4|0|0|0|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"MLA <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MLA (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|1|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"MLA <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MLS (by element)\",\"Bits\":\"0|Q|1|0|1|1|1|1|size:2|L|M|Rm:4|0|1|0|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"MLS <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MLS (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|1|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"MLS <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MOV (scalar)\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|0|imm5:5|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar variant\",\"Syntax\":\"MOV <V><d>, <Vn>.<T>[<index>]\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the DUP (element) instruction.\"},\n{\"Name\":\"MOV (element)\",\"Bits\":\"0|1|1|0|1|1|1|0|0|0|0|imm5:5|0|imm4:4|1|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"MOV <Vd>.<Ts>[<index1>], <Vn>.<Ts>[<index2>]\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the INS (element) instruction.\"},\n{\"Name\":\"MOV (from general)\",\"Bits\":\"0|1|0|0|1|1|1|0|0|0|0|imm5:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"MOV <Vd>.<Ts>[<index>], <R><n>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the INS (general) instruction.\"},\n{\"Name\":\"MOV (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|0|1|Rm:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"MOV <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the ORR (vector, register) instruction.\"},\n{\"Name\":\"MOV (to general)\",\"Bits\":\"0|0|0|0|1|1|1|0|0|0|0|imm5:5|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"MOV <Wd>, <Vn>.S[<index>]\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UMOV instruction.\"},\n{\"Name\":\"MOV (to general)\",\"Bits\":\"0|1|0|0|1|1|1|0|0|0|0|imm5:5|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"MOV <Xd>, <Vn>.D[<index>]\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the UMOV instruction.\"},\n{\"Name\":\"MOVI\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|0|0|0|0|a|b|c|1110:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"8-bit variant\",\"Syntax\":\"MOVI <Vd>.<T>, #<imm8>{, LSL #0}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MOVI\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"16-bit shifted immediate variant\",\"Syntax\":\"MOVI <Vd>.<T>, #<imm8>{, LSL #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MOVI\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"32-bit shifted immediate variant\",\"Syntax\":\"MOVI <Vd>.<T>, #<imm8>{, LSL #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MOVI\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"32-bit shifting ones variant\",\"Syntax\":\"MOVI <Vd>.<T>, #<imm8>, MSL #<amount>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MOVI\",\"Bits\":\"0|0|1|0|1|1|1|1|0|0|0|0|0|a|b|c|1110:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"64-bit scalar variant\",\"Syntax\":\"MOVI <Dd>, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MOVI\",\"Bits\":\"0|1|1|0|1|1|1|1|0|0|0|0|0|a|b|c|1110:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"64-bit vector variant\",\"Syntax\":\"MOVI <Vd>.2D, #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MUL (by element)\",\"Bits\":\"0|Q|0|0|1|1|1|1|size:2|L|M|Rm:4|1|0|0|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"MUL <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MUL (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|1|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"MUL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MVN\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|0|1|0|0|0|0|0|0|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"MVN <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the NOT instruction.\"},\n{\"Name\":\"MVNI\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"16-bit shifted immediate variant\",\"Syntax\":\"MVNI <Vd>.<T>, #<imm8>{, LSL #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MVNI\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"32-bit shifted immediate variant\",\"Syntax\":\"MVNI <Vd>.<T>, #<imm8>{, LSL #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"MVNI\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"32-bit shifting ones variant\",\"Syntax\":\"MVNI <Vd>.<T>, #<imm8>, MSL #<amount>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"NEG (vector)\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|0|0|0|0|0|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"NEG <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"NEG (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|0|0|0|0|0|1|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"NEG <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"NOT\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|0|1|0|0|0|0|0|0|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"NOT <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MVN.\"},\n{\"Name\":\"ORN (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|1|1|Rm:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"ORN <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ORR (vector, immediate)\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"16-bit variant\",\"Syntax\":\"ORR <Vd>.<T>, #<imm8>{, LSL #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ORR (vector, immediate)\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|0|0|0|0|a|b|c|cmode:4|0|1|d|e|f|g|h|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"ORR <Vd>.<T>, #<imm8>{, LSL #<amount>}\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ORR (vector, register)\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|0|1|Rm:5|0|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"ORR <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (vector).\"},\n{\"Name\":\"PMUL\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|1|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"PMUL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"PMULL, PMULL2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|1|1|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"PMULL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"PMULL, PMULL2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|1|1|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"PMULL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"RADDHN, RADDHN2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"RADDHN <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"RADDHN, RADDHN2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"RADDHN2 <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"RBIT (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|1|1|0|0|0|0|0|0|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"RBIT <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"REV16 (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|0|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"REV16 <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"REV32 (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|0|0|0|0|0|0|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"REV32 <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"REV64\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|0|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"REV64 <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"RSHRN, RSHRN2\",\"Bits\":\"0|0|0|0|1|1|1|1|0|immh:4|immb:3|1|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"RSHRN <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"RSHRN, RSHRN2\",\"Bits\":\"0|1|0|0|1|1|1|1|0|immh:4|immb:3|1|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"RSHRN2 <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"RSUBHN, RSUBHN2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|0|1|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"RSUBHN <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"RSUBHN, RSUBHN2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|0|1|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"RSUBHN2 <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SABA\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"SABA <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SABAL, SABAL2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|0|1|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SABAL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SABAL, SABAL2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|0|1|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SABAL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SABD\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"SABD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SABDL, SABDL2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|0|1|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SABDL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SABDL, SABDL2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|0|1|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SABDL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SADALP\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SADALP <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SADDL, SADDL2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SADDL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SADDL, SADDL2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SADDL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SADDLP\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SADDLP <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SADDLV\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|1|0|0|0|0|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SADDLV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SADDW, SADDW2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|0|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SADDW <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SADDW, SADDW2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|0|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SADDW2 <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (vector, fixed-point)\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SCVTF <V><d>, <V><n>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (vector, fixed-point)\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|immh:4|immb:3|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SCVTF <Vd>.<T>, <Vn>.<T>, #<fbits>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (vector, integer)\",\"Bits\":\"0|1|0|1|1|1|1|0|0|sz|1|0|0|0|0|1|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SCVTF <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (vector, integer)\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SCVTF <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (scalar, fixed-point)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|0|0|0|0|1|0|scale:6|Rn:5|Rd:5\",\"Arch\":\"32-bit to single-precision variant\",\"Syntax\":\"SCVTF <Sd>, <Wn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (scalar, fixed-point)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|0|0|0|0|1|0|scale:6|Rn:5|Rd:5\",\"Arch\":\"32-bit to double-precision variant\",\"Syntax\":\"SCVTF <Dd>, <Wn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (scalar, fixed-point)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|0|0|0|0|1|0|scale:6|Rn:5|Rd:5\",\"Arch\":\"64-bit to single-precision variant\",\"Syntax\":\"SCVTF <Sd>, <Xn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (scalar, fixed-point)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|0|0|0|0|1|0|scale:6|Rn:5|Rd:5\",\"Arch\":\"64-bit to double-precision variant\",\"Syntax\":\"SCVTF <Dd>, <Xn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (scalar, integer)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|1|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit to single-precision variant\",\"Syntax\":\"SCVTF <Sd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (scalar, integer)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|1|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit to double-precision variant\",\"Syntax\":\"SCVTF <Dd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (scalar, integer)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|0|0|0|1|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit to single-precision variant\",\"Syntax\":\"SCVTF <Sd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SCVTF (scalar, integer)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|0|0|0|1|0|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit to double-precision variant\",\"Syntax\":\"SCVTF <Dd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA1C\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|0|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA1C <Qd>, <Sn>, <Vm>.4S\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA1H\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|1|0|1|0|0|0|0|0|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA1H <Sd>, <Sn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA1M\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|0|Rm:5|0|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA1M <Qd>, <Sn>, <Vm>.4S\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA1P\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|0|Rm:5|0|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA1P <Qd>, <Sn>, <Vm>.4S\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA1SU0\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|0|Rm:5|0|0|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA1SU0 <Vd>.4S, <Vn>.4S, <Vm>.4S\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA1SU1\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|1|0|1|0|0|0|0|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA1SU1 <Vd>.4S, <Vn>.4S\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA256H2\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|0|Rm:5|0|1|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA256H2 <Qd>, <Qn>, <Vm>.4S\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA256H\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|0|Rm:5|0|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA256H <Qd>, <Qn>, <Vm>.4S\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA256SU0\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|1|0|1|0|0|0|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA256SU0 <Vd>.4S, <Vn>.4S\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHA256SU1\",\"Bits\":\"0|1|0|1|1|1|1|0|0|0|0|Rm:5|0|1|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SHA256SU1 <Vd>.4S, <Vn>.4S, <Vm>.4S\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHADD\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"SHADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHL\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|0|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SHL <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHL\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|immh:4|immb:3|0|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SHL <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SHLL, SHLL2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|0|0|0|0|1|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SHLL <Vd>.<Ta>, <Vn>.<Tb>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHLL, SHLL2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|0|0|0|0|1|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SHLL2 <Vd>.<Ta>, <Vn>.<Tb>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SHRN, SHRN2\",\"Bits\":\"0|0|0|0|1|1|1|1|0|immh:4|immb:3|1|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SHRN <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SHRN, SHRN2\",\"Bits\":\"0|1|0|0|1|1|1|1|0|immh:4|immb:3|1|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SHRN2 <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SHSUB\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"SHSUB <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SLI\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|0|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SLI <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SLI\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|0|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SLI <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SMAX\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"SMAX <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMAXP\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"SMAXP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMAXV\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|1|0|0|0|0|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SMAXV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMIN\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|1|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"SMIN <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMINP\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|1|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"SMINP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMINV\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|1|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"SMINV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMLAL, SMLAL2 (by element)\",\"Bits\":\"0|0|0|0|1|1|1|1|size:2|L|M|Rm:4|0|0|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SMLAL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMLAL, SMLAL2 (by element)\",\"Bits\":\"0|1|0|0|1|1|1|1|size:2|L|M|Rm:4|0|0|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SMLAL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMLAL, SMLAL2 (vector)\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|1|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SMLAL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMLAL, SMLAL2 (vector)\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|1|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SMLAL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMLSL, SMLSL2 (by element)\",\"Bits\":\"0|0|0|0|1|1|1|1|size:2|L|M|Rm:4|0|1|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SMLSL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMLSL, SMLSL2 (by element)\",\"Bits\":\"0|1|0|0|1|1|1|1|size:2|L|M|Rm:4|0|1|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SMLSL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMLSL, SMLSL2 (vector)\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|1|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SMLSL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMLSL, SMLSL2 (vector)\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|1|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SMLSL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMOV\",\"Bits\":\"0|0|0|0|1|1|1|0|0|0|0|imm5:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"SMOV <Wd>, <Vn>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMOV\",\"Bits\":\"0|1|0|0|1|1|1|0|0|0|0|imm5:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"SMOV <Xd>, <Vn>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMULL, SMULL2 (by element)\",\"Bits\":\"0|0|0|0|1|1|1|1|size:2|L|M|Rm:4|1|0|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SMULL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMULL, SMULL2 (by element)\",\"Bits\":\"0|1|0|0|1|1|1|1|size:2|L|M|Rm:4|1|0|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SMULL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMULL, SMULL2 (vector)\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SMULL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SMULL, SMULL2 (vector)\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SMULL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQABS\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|0|0|0|0|0|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQABS <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQABS\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQABS <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQADD\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|0|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQADD <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQADD\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLAL, SQDMLAL2 (by element)\",\"Bits\":\"0|1|0|1|1|1|1|1|size:2|L|M|Rm:4|0|0|1|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQDMLAL <Va><d>, <Vb><n>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLAL, SQDMLAL2 (by element)\",\"Bits\":\"0|0|0|0|1|1|1|1|size:2|L|M|Rm:4|0|0|1|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMLAL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLAL, SQDMLAL2 (by element)\",\"Bits\":\"0|1|0|0|1|1|1|1|size:2|L|M|Rm:4|0|0|1|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMLAL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLAL, SQDMLAL2 (vector)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|1|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQDMLAL <Va><d>, <Vb><n>, <Vb><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLAL, SQDMLAL2 (vector)\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|1|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMLAL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLAL, SQDMLAL2 (vector)\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|1|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMLAL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLSL, SQDMLSL2 (by element)\",\"Bits\":\"0|1|0|1|1|1|1|1|size:2|L|M|Rm:4|0|1|1|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQDMLSL <Va><d>, <Vb><n>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLSL, SQDMLSL2 (by element)\",\"Bits\":\"0|0|0|0|1|1|1|1|size:2|L|M|Rm:4|0|1|1|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMLSL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLSL, SQDMLSL2 (by element)\",\"Bits\":\"0|1|0|0|1|1|1|1|size:2|L|M|Rm:4|0|1|1|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMLSL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLSL, SQDMLSL2 (vector)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|1|0|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQDMLSL <Va><d>, <Vb><n>, <Vb><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLSL, SQDMLSL2 (vector)\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|1|0|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMLSL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMLSL, SQDMLSL2 (vector)\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|1|0|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMLSL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULH (by element)\",\"Bits\":\"0|1|0|1|1|1|1|1|size:2|L|M|Rm:4|1|1|0|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQDMULH <V><d>, <V><n>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULH (by element)\",\"Bits\":\"0|Q|0|0|1|1|1|1|size:2|L|M|Rm:4|1|1|0|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMULH <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULH (vector)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|1|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQDMULH <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULH (vector)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|1|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMULH <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULL, SQDMULL2 (by element)\",\"Bits\":\"0|1|0|1|1|1|1|1|size:2|L|M|Rm:4|1|0|1|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQDMULL <Va><d>, <Vb><n>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULL, SQDMULL2 (by element)\",\"Bits\":\"0|0|0|0|1|1|1|1|size:2|L|M|Rm:4|1|0|1|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMULL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULL, SQDMULL2 (by element)\",\"Bits\":\"0|1|0|0|1|1|1|1|size:2|L|M|Rm:4|1|0|1|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMULL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULL, SQDMULL2 (vector)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|1|1|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQDMULL <Va><d>, <Vb><n>, <Vb><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULL, SQDMULL2 (vector)\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|1|1|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMULL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQDMULL, SQDMULL2 (vector)\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|1|1|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQDMULL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQNEG\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|0|0|0|0|0|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQNEG <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQNEG\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|0|0|0|0|0|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQNEG <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQRDMULH (by element)\",\"Bits\":\"0|1|0|1|1|1|1|1|size:2|L|M|Rm:4|1|1|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQRDMULH <V><d>, <V><n>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQRDMULH (by element)\",\"Bits\":\"0|Q|0|0|1|1|1|1|size:2|L|M|Rm:4|1|1|0|1|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQRDMULH <Vd>.<T>, <Vn>.<T>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQRDMULH (vector)\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|1|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQRDMULH <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQRDMULH (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|1|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQRDMULH <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQRSHL\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|0|1|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQRSHL <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQRSHL\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|1|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQRSHL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQRSHRN, SQRSHRN2\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|1|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQRSHRN <Vb><d>, <Va><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQRSHRN, SQRSHRN2\",\"Bits\":\"0|0|0|0|1|1|1|1|0|immh:4|immb:3|1|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQRSHRN <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQRSHRN, SQRSHRN2\",\"Bits\":\"0|1|0|0|1|1|1|1|0|immh:4|immb:3|1|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQRSHRN2 <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQRSHRUN, SQRSHRUN2\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|1|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQRSHRUN <Vb><d>, <Va><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQRSHRUN, SQRSHRUN2\",\"Bits\":\"0|0|1|0|1|1|1|1|0|immh:4|immb:3|1|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQRSHRUN <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQRSHRUN, SQRSHRUN2\",\"Bits\":\"0|1|1|0|1|1|1|1|0|immh:4|immb:3|1|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQRSHRUN2 <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQSHL (immediate)\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|0|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQSHL <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQSHL (immediate)\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|immh:4|immb:3|0|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQSHL <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQSHL (register)\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|0|1|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQSHL <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQSHL (register)\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|1|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQSHL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQSHLU\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|0|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQSHLU <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQSHLU\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|0|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQSHLU <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQSHRN, SQSHRN2\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|1|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQSHRN <Vb><d>, <Va><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQSHRN, SQSHRN2\",\"Bits\":\"0|0|0|0|1|1|1|1|0|immh:4|immb:3|1|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQSHRN <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQSHRN, SQSHRN2\",\"Bits\":\"0|1|0|0|1|1|1|1|0|immh:4|immb:3|1|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQSHRN2 <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQSHRUN, SQSHRUN2\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|1|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQSHRUN <Vb><d>, <Va><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQSHRUN, SQSHRUN2\",\"Bits\":\"0|0|1|0|1|1|1|1|0|immh:4|immb:3|1|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQSHRUN <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQSHRUN, SQSHRUN2\",\"Bits\":\"0|1|1|0|1|1|1|1|0|immh:4|immb:3|1|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQSHRUN2 <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SQSUB\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQSUB <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQSUB\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQSUB <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQXTN, SQXTN2\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|0|0|0|0|1|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQXTN <Vb><d>, <Va><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQXTN, SQXTN2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|0|0|0|0|1|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQXTN <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQXTN, SQXTN2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|0|0|0|0|1|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQXTN2 <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQXTUN, SQXTUN2\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|0|0|0|0|1|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SQXTUN <Vb><d>, <Va><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQXTUN, SQXTUN2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|0|0|0|0|1|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQXTUN <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SQXTUN, SQXTUN2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|0|0|0|0|1|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SQXTUN2 <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SRHADD\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"SRHADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SRI\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|0|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SRI <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SRI\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|0|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SRI <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SRSHL\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|0|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SRSHL <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SRSHL\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SRSHL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SRSHR\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SRSHR <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SRSHR\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|immh:4|immb:3|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SRSHR <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SRSRA\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|0|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SRSRA <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SRSRA\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|immh:4|immb:3|0|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SRSRA <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SSHL\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|Rm:5|0|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SSHL <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SSHL\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|Rm:5|0|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SSHL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SSHLL, SSHLL2\",\"Bits\":\"0|0|0|0|1|1|1|1|0|immh:4|immb:3|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SSHLL <Vd>.<Ta>, <Vn>.<Tb>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"This instruction is used by the alias SXTL, SXTL2.\"},\n{\"Name\":\"SSHLL, SSHLL2\",\"Bits\":\"0|1|0|0|1|1|1|1|0|immh:4|immb:3|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SSHLL2 <Vd>.<Ta>, <Vn>.<Tb>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"This instruction is used by the alias SXTL, SXTL2.\"},\n{\"Name\":\"SSHR\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SSHR <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SSHR\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|immh:4|immb:3|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SSHR <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SSRA\",\"Bits\":\"0|1|0|1|1|1|1|1|0|immh:4|immb:3|0|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SSRA <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SSRA\",\"Bits\":\"0|Q|0|0|1|1|1|1|0|immh:4|immb:3|0|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SSRA <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"SSUBL, SSUBL2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|0|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SSUBL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SSUBL, SSUBL2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|0|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SSUBL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SSUBW, SSUBW2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|0|0|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SSUBW <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SSUBW, SSUBW2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|0|0|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SSUBW2 <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|0|0|0|0|0|0|0|0111:4|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset One register variant\",\"Syntax\":\"ST1 { <Vt>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|0|0|0|0|0|0|0|1010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset Two registers variant\",\"Syntax\":\"ST1 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|0|0|0|0|0|0|0|0110:4|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset Three registers variant\",\"Syntax\":\"ST1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|0|0|0|0|0|0|0|0010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset Four registers variant\",\"Syntax\":\"ST1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|11111:5|0111:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index One register, immediate offset variant\",\"Syntax\":\"ST1 { <Vt>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|Rm:5|0111:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index One register, register offset variant\",\"Syntax\":\"ST1 { <Vt>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|11111:5|1010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Two registers, immediate offset variant\",\"Syntax\":\"ST1 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|Rm:5|1010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Two registers, register offset variant\",\"Syntax\":\"ST1 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|11111:5|0110:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Three registers, immediate offset variant\",\"Syntax\":\"ST1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|Rm:5|0110:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Three registers, register offset variant\",\"Syntax\":\"ST1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|11111:5|0010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Four registers, immediate offset variant\",\"Syntax\":\"ST1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|Rm:5|0010:4|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Four registers, register offset variant\",\"Syntax\":\"ST1 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|0|0|0|0|0|0|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 8-bit variant\",\"Syntax\":\"ST1 { <Vt>.B }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|0|0|0|0|0|0|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 16-bit variant\",\"Syntax\":\"ST1 { <Vt>.H }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|0|0|0|0|0|0|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"No offset 32-bit variant\",\"Syntax\":\"ST1 { <Vt>.S }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|0|0|0|0|0|0|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"No offset 64-bit variant\",\"Syntax\":\"ST1 { <Vt>.D }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|11111:5|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, immediate offset variant\",\"Syntax\":\"ST1 { <Vt>.B }[<index>], [<Xn|SP>], #1\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|Rm:5|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, register offset variant\",\"Syntax\":\"ST1 { <Vt>.B }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|11111:5|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, immediate offset variant\",\"Syntax\":\"ST1 { <Vt>.H }[<index>], [<Xn|SP>], #2\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|Rm:5|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, register offset variant\",\"Syntax\":\"ST1 { <Vt>.H }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|11111:5|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, immediate offset variant\",\"Syntax\":\"ST1 { <Vt>.S }[<index>], [<Xn|SP>], #4\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|Rm:5|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, register offset variant\",\"Syntax\":\"ST1 { <Vt>.S }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|11111:5|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, immediate offset variant\",\"Syntax\":\"ST1 { <Vt>.D }[<index>], [<Xn|SP>], #8\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST1 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|Rm:5|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, register offset variant\",\"Syntax\":\"ST1 { <Vt>.D }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|0|0|0|0|0|0|0|1|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"ST2 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|11111:5|1|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"ST2 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|Rm:5|1|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"ST2 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|1|0|0|0|0|0|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 8-bit variant\",\"Syntax\":\"ST2 { <Vt>.B, <Vt2>.B }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|1|0|0|0|0|0|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 16-bit variant\",\"Syntax\":\"ST2 { <Vt>.H, <Vt2>.H }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|1|0|0|0|0|0|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"No offset 32-bit variant\",\"Syntax\":\"ST2 { <Vt>.S, <Vt2>.S }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|1|0|0|0|0|0|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"No offset 64-bit variant\",\"Syntax\":\"ST2 { <Vt>.D, <Vt2>.D }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|11111:5|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, immediate offset variant\",\"Syntax\":\"ST2 { <Vt>.B, <Vt2>.B }[<index>], [<Xn|SP>], #2\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|Rm:5|000:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, register offset variant\",\"Syntax\":\"ST2 { <Vt>.B, <Vt2>.B }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|11111:5|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, immediate offset variant\",\"Syntax\":\"ST2 { <Vt>.H, <Vt2>.H }[<index>], [<Xn|SP>], #4\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|Rm:5|010:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, register offset variant\",\"Syntax\":\"ST2 { <Vt>.H, <Vt2>.H }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|11111:5|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, immediate offset variant\",\"Syntax\":\"ST2 { <Vt>.S, <Vt2>.S }[<index>], [<Xn|SP>], #8\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|Rm:5|100:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, register offset variant\",\"Syntax\":\"ST2 { <Vt>.S, <Vt2>.S }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|11111:5|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, immediate offset variant\",\"Syntax\":\"ST2 { <Vt>.D, <Vt2>.D }[<index>], [<Xn|SP>], #16\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST2 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|Rm:5|100:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, register offset variant\",\"Syntax\":\"ST2 { <Vt>.D, <Vt2>.D }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|0|0|0|0|0|0|0|0|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"ST3 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|11111:5|0|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"ST3 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|Rm:5|0|1|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"ST3 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|0|0|0|0|0|0|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 8-bit variant\",\"Syntax\":\"ST3 { <Vt>.B, <Vt2>.B, <Vt3>.B }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|0|0|0|0|0|0|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 16-bit variant\",\"Syntax\":\"ST3 { <Vt>.H, <Vt2>.H, <Vt3>.H }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|0|0|0|0|0|0|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"No offset 32-bit variant\",\"Syntax\":\"ST3 { <Vt>.S, <Vt2>.S, <Vt3>.S }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|0|0|0|0|0|0|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"No offset 64-bit variant\",\"Syntax\":\"ST3 { <Vt>.D, <Vt2>.D, <Vt3>.D }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|11111:5|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, immediate offset variant\",\"Syntax\":\"ST3 { <Vt>.B, <Vt2>.B, <Vt3>.B }[<index>], [<Xn|SP>], #3\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|Rm:5|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, register offset variant\",\"Syntax\":\"ST3 { <Vt>.B, <Vt2>.B, <Vt3>.B }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|11111:5|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, immediate offset variant\",\"Syntax\":\"ST3 { <Vt>.H, <Vt2>.H, <Vt3>.H }[<index>], [<Xn|SP>], #6\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|Rm:5|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, register offset variant\",\"Syntax\":\"ST3 { <Vt>.H, <Vt2>.H, <Vt3>.H }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|11111:5|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, immediate offset variant\",\"Syntax\":\"ST3 { <Vt>.S, <Vt2>.S, <Vt3>.S }[<index>], [<Xn|SP>], #12\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|Rm:5|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, register offset variant\",\"Syntax\":\"ST3 { <Vt>.S, <Vt2>.S, <Vt3>.S }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|11111:5|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, immediate offset variant\",\"Syntax\":\"ST3 { <Vt>.D, <Vt2>.D, <Vt3>.D }[<index>], [<Xn|SP>], #24\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST3 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|0|Rm:5|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, register offset variant\",\"Syntax\":\"ST3 { <Vt>.D, <Vt2>.D, <Vt3>.D }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset No offset variant\",\"Syntax\":\"ST4 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|11111:5|0|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Immediate offset variant\",\"Syntax\":\"ST4 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (multiple structures)\",\"Bits\":\"0|Q|0|0|1|1|0|0|1|0|0|Rm:5|0|0|0|0|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index Register offset variant\",\"Syntax\":\"ST4 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|1|0|0|0|0|0|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 8-bit variant\",\"Syntax\":\"ST4 { <Vt>.B, <Vt2>.B, <Vt3>.B, <Vt4>.B }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|1|0|0|0|0|0|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"No offset 16-bit variant\",\"Syntax\":\"ST4 { <Vt>.H, <Vt2>.H, <Vt3>.H, <Vt4>.H }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|1|0|0|0|0|0|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"No offset 32-bit variant\",\"Syntax\":\"ST4 { <Vt>.S, <Vt2>.S, <Vt3>.S, <Vt4>.S }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|0|0|1|0|0|0|0|0|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"No offset 64-bit variant\",\"Syntax\":\"ST4 { <Vt>.D, <Vt2>.D, <Vt3>.D, <Vt4>.D }[<index>], [<Xn|SP>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|11111:5|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, immediate offset variant\",\"Syntax\":\"ST4 { <Vt>.B, <Vt2>.B, <Vt3>.B, <Vt4>.B }[<index>], [<Xn|SP>], #4\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|Rm:5|001:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit, register offset variant\",\"Syntax\":\"ST4 { <Vt>.B, <Vt2>.B, <Vt3>.B, <Vt4>.B }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|11111:5|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, immediate offset variant\",\"Syntax\":\"ST4 { <Vt>.H, <Vt2>.H, <Vt3>.H, <Vt4>.H }[<index>], [<Xn|SP>], #8\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|Rm:5|011:3|S|size:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit, register offset variant\",\"Syntax\":\"ST4 { <Vt>.H, <Vt2>.H, <Vt3>.H, <Vt4>.H }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|11111:5|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, immediate offset variant\",\"Syntax\":\"ST4 { <Vt>.S, <Vt2>.S, <Vt3>.S, <Vt4>.S }[<index>], [<Xn|SP>], #16\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|Rm:5|101:3|S|00:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit, register offset variant\",\"Syntax\":\"ST4 { <Vt>.S, <Vt2>.S, <Vt3>.S, <Vt4>.S }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|11111:5|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, immediate offset variant\",\"Syntax\":\"ST4 { <Vt>.D, <Vt2>.D, <Vt3>.D, <Vt4>.D }[<index>], [<Xn|SP>], #32\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ST4 (single structure)\",\"Bits\":\"0|Q|0|0|1|1|0|1|1|0|1|Rm:5|101:3|0|01:2|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit, register offset variant\",\"Syntax\":\"ST4 { <Vt>.D, <Vt2>.D, <Vt3>.D, <Vt4>.D }[<index>], [<Xn|SP>], <Xm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STNP (SIMD&FP)\",\"Bits\":\"00:2|1|0|1|1|0|0|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STNP <St1>, <St2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STNP (SIMD&FP)\",\"Bits\":\"01:2|1|0|1|1|0|0|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STNP <Dt1>, <Dt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STNP (SIMD&FP)\",\"Bits\":\"10:2|1|0|1|1|0|0|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"128-bit variant\",\"Syntax\":\"STNP <Qt1>, <Qt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP (SIMD&FP)\",\"Bits\":\"00:2|1|0|1|1|0|0|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"STP <St1>, <St2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP (SIMD&FP)\",\"Bits\":\"01:2|1|0|1|1|0|0|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"STP <Dt1>, <Dt2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP (SIMD&FP)\",\"Bits\":\"10:2|1|0|1|1|0|0|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Post-index 128-bit variant\",\"Syntax\":\"STP <Qt1>, <Qt2>, [<Xn|SP>], #<imm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP (SIMD&FP)\",\"Bits\":\"00:2|1|0|1|1|0|1|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"STP <St1>, <St2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP (SIMD&FP)\",\"Bits\":\"01:2|1|0|1|1|0|1|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"STP <Dt1>, <Dt2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP (SIMD&FP)\",\"Bits\":\"10:2|1|0|1|1|0|1|1|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Pre-index 128-bit variant\",\"Syntax\":\"STP <Qt1>, <Qt2>, [<Xn|SP>, #<imm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP (SIMD&FP)\",\"Bits\":\"00:2|1|0|1|1|0|1|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 32-bit variant\",\"Syntax\":\"STP <St1>, <St2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP (SIMD&FP)\",\"Bits\":\"01:2|1|0|1|1|0|1|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 64-bit variant\",\"Syntax\":\"STP <Dt1>, <Dt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STP (SIMD&FP)\",\"Bits\":\"10:2|1|0|1|1|0|1|0|0|imm7:7|Rt2:5|Rn:5|Rt:5\",\"Arch\":\"Signed offset 128-bit variant\",\"Syntax\":\"STP <Qt1>, <Qt2>, [<Xn|SP>{, #<imm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|00:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 8-bit variant\",\"Syntax\":\"STR <Bt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|0|00:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 16-bit variant\",\"Syntax\":\"STR <Ht>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|0|00:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 32-bit variant\",\"Syntax\":\"STR <St>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|0|00:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 64-bit variant\",\"Syntax\":\"STR <Dt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|10:2|0|imm9:9|0|1|Rn:5|Rt:5\",\"Arch\":\"Post-index 128-bit variant\",\"Syntax\":\"STR <Qt>, [<Xn|SP>], #<simm>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|00:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 8-bit variant\",\"Syntax\":\"STR <Bt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|0|00:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 16-bit variant\",\"Syntax\":\"STR <Ht>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|0|00:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 32-bit variant\",\"Syntax\":\"STR <St>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|0|00:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 64-bit variant\",\"Syntax\":\"STR <Dt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|10:2|0|imm9:9|1|1|Rn:5|Rt:5\",\"Arch\":\"Pre-index 128-bit variant\",\"Syntax\":\"STR <Qt>, [<Xn|SP>, #<simm>]!\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|1|00:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 8-bit variant\",\"Syntax\":\"STR <Bt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|1|00:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 16-bit variant\",\"Syntax\":\"STR <Ht>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|1|00:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 32-bit variant\",\"Syntax\":\"STR <St>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|1|00:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 64-bit variant\",\"Syntax\":\"STR <Dt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (immediate, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|1|10:2|imm12:12|Rn:5|Rt:5\",\"Arch\":\"Unsigned offset 128-bit variant\",\"Syntax\":\"STR <Qt>, [<Xn|SP>{, #<pimm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (register, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|00:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"8-bit variant\",\"Syntax\":\"STR <Bt>, [<Xn|SP>, (<Wm>|<Xm>), <extend> {<amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (register, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|00:2|1|Rm:5|011:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"8-bit variant\",\"Syntax\":\"STR <Bt>, [<Xn|SP>, <Xm>{, LSL <amount>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (register, SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|0|00:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"16-bit variant\",\"Syntax\":\"STR <Ht>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (register, SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|0|00:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STR <St>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (register, SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|0|00:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STR <Dt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STR (register, SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|10:2|1|Rm:5|option:3|S|1|0|Rn:5|Rt:5\",\"Arch\":\"128-bit variant\",\"Syntax\":\"STR <Qt>, [<Xn|SP>, (<Wm>|<Xm>){, <extend> {<amount>}}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STUR (SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|00:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"8-bit variant\",\"Syntax\":\"STUR <Bt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STUR (SIMD&FP)\",\"Bits\":\"01:2|1|1|1|1|0|0|00:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"16-bit variant\",\"Syntax\":\"STUR <Ht>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STUR (SIMD&FP)\",\"Bits\":\"10:2|1|1|1|1|0|0|00:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"STUR <St>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STUR (SIMD&FP)\",\"Bits\":\"11:2|1|1|1|1|0|0|00:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"STUR <Dt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"STUR (SIMD&FP)\",\"Bits\":\"00:2|1|1|1|1|0|0|10:2|0|imm9:9|0|0|Rn:5|Rt:5\",\"Arch\":\"128-bit variant\",\"Syntax\":\"STUR <Qt>, [<Xn|SP>{, #<simm>}]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUB (vector)\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|1|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SUB <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUB (vector)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|1|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SUB <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUBHN, SUBHN2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|Rm:5|0|1|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SUBHN <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUBHN, SUBHN2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|Rm:5|0|1|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"SUBHN2 <Vd>.<Tb>, <Vn>.<Ta>, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUQADD\",\"Bits\":\"0|1|0|1|1|1|1|0|size:2|1|0|0|0|0|0|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"SUQADD <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SUQADD\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|1|0|0|0|0|0|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"SUQADD <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"SXTL, SXTL2\",\"Bits\":\"0|0|0|0|1|1|1|1|0|immh:4|0|0|0|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SXTL <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SSHLL, SSHLL2 instruction.\"},\n{\"Name\":\"SXTL, SXTL2\",\"Bits\":\"0|1|0|0|1|1|1|1|0|immh:4|0|0|0|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"SXTL2 <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the SSHLL, SSHLL2 instruction.\"},\n{\"Name\":\"TBL\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|Rm:5|0|01:2|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Two register table variant\",\"Syntax\":\"TBL <Vd>.<Ta>, { <Vn>.16B, <Vn+1>.16B }, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TBL\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|Rm:5|0|10:2|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three register table variant\",\"Syntax\":\"TBL <Vd>.<Ta>, { <Vn>.16B, <Vn+1>.16B, <Vn+2>.16B }, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TBL\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|Rm:5|0|11:2|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Four register table variant\",\"Syntax\":\"TBL <Vd>.<Ta>, { <Vn>.16B, <Vn+1>.16B, <Vn+2>.16B, <Vn+3>.16B }, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TBL\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|Rm:5|0|00:2|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Single register table variant\",\"Syntax\":\"TBL <Vd>.<Ta>, { <Vn>.16B }, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TBX\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|Rm:5|0|01:2|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Two register table variant\",\"Syntax\":\"TBX <Vd>.<Ta>, { <Vn>.16B, <Vn+1>.16B }, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TBX\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|Rm:5|0|10:2|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three register table variant\",\"Syntax\":\"TBX <Vd>.<Ta>, { <Vn>.16B, <Vn+1>.16B, <Vn+2>.16B }, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TBX\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|Rm:5|0|11:2|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Four register table variant\",\"Syntax\":\"TBX <Vd>.<Ta>, { <Vn>.16B, <Vn+1>.16B, <Vn+2>.16B, <Vn+3>.16B }, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TBX\",\"Bits\":\"0|Q|0|0|1|1|1|0|0|0|0|Rm:5|0|00:2|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Single register table variant\",\"Syntax\":\"TBX <Vd>.<Ta>, { <Vn>.16B }, <Vm>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TRN1\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|0|Rm:5|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"TRN1 <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"TRN2\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|0|Rm:5|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"TRN2 <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UABA\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|1|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"UABA <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UABAL, UABAL2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|0|1|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UABAL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UABAL, UABAL2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|0|1|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UABAL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UABD\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"UABD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UABDL, UABDL2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|0|1|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UABDL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UABDL, UABDL2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|0|1|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UABDL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UADALP\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|0|0|0|0|0|0|1|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UADALP <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UADDL, UADDL2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UADDL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UADDL, UADDL2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UADDL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UADDLP\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|0|0|0|0|0|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UADDLP <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UADDLV\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|1|0|0|0|0|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"UADDLV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UADDW, UADDW2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|0|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UADDW <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UADDW, UADDW2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|0|0|0|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UADDW2 <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (vector, fixed-point)\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UCVTF <V><d>, <V><n>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (vector, fixed-point)\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|1|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UCVTF <Vd>.<T>, <Vn>.<T>, #<fbits>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (vector, integer)\",\"Bits\":\"0|1|1|1|1|1|1|0|0|sz|1|0|0|0|0|1|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UCVTF <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (vector, integer)\",\"Bits\":\"0|Q|1|0|1|1|1|0|0|sz|1|0|0|0|0|1|1|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UCVTF <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (scalar, fixed-point)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|0|0|0|0|1|1|scale:6|Rn:5|Rd:5\",\"Arch\":\"32-bit to single-precision variant\",\"Syntax\":\"UCVTF <Sd>, <Wn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (scalar, fixed-point)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|0|0|0|0|1|1|scale:6|Rn:5|Rd:5\",\"Arch\":\"32-bit to double-precision variant\",\"Syntax\":\"UCVTF <Dd>, <Wn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (scalar, fixed-point)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|0|0|0|0|1|1|scale:6|Rn:5|Rd:5\",\"Arch\":\"64-bit to single-precision variant\",\"Syntax\":\"UCVTF <Sd>, <Xn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (scalar, fixed-point)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|0|0|0|0|1|1|scale:6|Rn:5|Rd:5\",\"Arch\":\"64-bit to double-precision variant\",\"Syntax\":\"UCVTF <Dd>, <Xn>, #<fbits>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (scalar, integer)\",\"Bits\":\"0|0|0|1|1|1|1|0|00:2|1|0|0|0|1|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit to single-precision variant\",\"Syntax\":\"UCVTF <Sd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (scalar, integer)\",\"Bits\":\"0|0|0|1|1|1|1|0|01:2|1|0|0|0|1|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"32-bit to double-precision variant\",\"Syntax\":\"UCVTF <Dd>, <Wn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (scalar, integer)\",\"Bits\":\"1|0|0|1|1|1|1|0|00:2|1|0|0|0|1|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit to single-precision variant\",\"Syntax\":\"UCVTF <Sd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UCVTF (scalar, integer)\",\"Bits\":\"1|0|0|1|1|1|1|0|01:2|1|0|0|0|1|1|0|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"64-bit to double-precision variant\",\"Syntax\":\"UCVTF <Dd>, <Xn>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UHADD\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"UHADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UHSUB\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"UHSUB <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMAX\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|1|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"UMAX <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMAXP\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"UMAXP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMAXV\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|1|0|0|0|0|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"UMAXV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMIN\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|1|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"UMIN <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMINP\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|1|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"UMINP <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMINV\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|1|0|0|0|1|1|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"UMINV <V><d>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMLAL, UMLAL2 (by element)\",\"Bits\":\"0|0|1|0|1|1|1|1|size:2|L|M|Rm:4|0|0|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UMLAL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMLAL, UMLAL2 (by element)\",\"Bits\":\"0|1|1|0|1|1|1|1|size:2|L|M|Rm:4|0|0|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UMLAL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMLAL, UMLAL2 (vector)\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|1|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UMLAL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMLAL, UMLAL2 (vector)\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|1|0|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UMLAL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMLSL, UMLSL2 (by element)\",\"Bits\":\"0|0|1|0|1|1|1|1|size:2|L|M|Rm:4|0|1|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UMLSL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMLSL, UMLSL2 (by element)\",\"Bits\":\"0|1|1|0|1|1|1|1|size:2|L|M|Rm:4|0|1|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UMLSL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMLSL, UMLSL2 (vector)\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|1|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UMLSL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMLSL, UMLSL2 (vector)\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|1|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UMLSL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMOV\",\"Bits\":\"0|0|0|0|1|1|1|0|0|0|0|imm5:5|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"32-bit variant\",\"Syntax\":\"UMOV <Wd>, <Vn>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (to general).\"},\n{\"Name\":\"UMOV\",\"Bits\":\"0|1|0|0|1|1|1|0|0|0|0|imm5:5|0|0|1|1|1|1|Rn:5|Rd:5\",\"Arch\":\"64-bit variant\",\"Syntax\":\"UMOV <Xd>, <Vn>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"This instruction is used by the alias MOV (to general).\"},\n{\"Name\":\"UMULL, UMULL2 (by element)\",\"Bits\":\"0|0|1|0|1|1|1|1|size:2|L|M|Rm:4|1|0|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UMULL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMULL, UMULL2 (by element)\",\"Bits\":\"0|1|1|0|1|1|1|1|size:2|L|M|Rm:4|1|0|1|0|H|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UMULL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Ts>[<index>]\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMULL, UMULL2 (vector)\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UMULL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UMULL, UMULL2 (vector)\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|1|1|0|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"UMULL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQADD\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|0|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UQADD <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQADD\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|0|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQRSHL\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|0|1|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UQRSHL <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQRSHL\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|1|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQRSHL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQRSHRN, UQRSHRN2\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|1|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UQRSHRN <Vb><d>, <Va><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQRSHRN, UQRSHRN2\",\"Bits\":\"0|0|1|0|1|1|1|1|0|immh:4|immb:3|1|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQRSHRN <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"UQRSHRN, UQRSHRN2\",\"Bits\":\"0|1|1|0|1|1|1|1|0|immh:4|immb:3|1|0|0|1|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQRSHRN2 <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"UQSHL (immediate)\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|0|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UQSHL <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQSHL (immediate)\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|0|1|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQSHL <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"UQSHL (register)\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|0|1|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UQSHL <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQSHL (register)\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|1|0|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQSHL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQSHRN, UQSHRN2\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|1|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UQSHRN <Vb><d>, <Va><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQSHRN, UQSHRN2\",\"Bits\":\"0|0|1|0|1|1|1|1|0|immh:4|immb:3|1|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQSHRN <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"UQSHRN, UQSHRN2\",\"Bits\":\"0|1|1|0|1|1|1|1|0|immh:4|immb:3|1|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQSHRN2 <Vd>.<Tb>, <Vn>.<Ta>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"UQSUB\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UQSUB <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQSUB\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|0|1|0|1|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQSUB <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQXTN, UQXTN2\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|0|0|0|0|1|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"UQXTN <Vb><d>, <Va><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQXTN, UQXTN2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|0|0|0|0|1|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQXTN <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UQXTN, UQXTN2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|0|0|0|0|1|0|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"UQXTN2 <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"URECPE\",\"Bits\":\"0|Q|0|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"URECPE <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"URHADD\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Three registers of the same type variant\",\"Syntax\":\"URHADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"URSHL\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|0|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"URSHL <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"URSHL\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|1|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"URSHL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"URSHR\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"URSHR <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"URSHR\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|0|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"URSHR <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"URSQRTE\",\"Bits\":\"0|Q|1|0|1|1|1|0|1|sz|1|0|0|0|0|1|1|1|0|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"URSQRTE <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"URSRA\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|0|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"URSRA <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"URSRA\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|0|0|1|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"URSRA <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"USHL\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|Rm:5|0|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"USHL <V><d>, <V><n>, <V><m>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"USHL\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|Rm:5|0|1|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"USHL <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"USHLL, USHLL2\",\"Bits\":\"0|0|1|0|1|1|1|1|0|immh:4|immb:3|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"USHLL <Vd>.<Ta>, <Vn>.<Tb>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"This instruction is used by the alias UXTL, UXTL2.\"},\n{\"Name\":\"USHLL, USHLL2\",\"Bits\":\"0|1|1|0|1|1|1|1|0|immh:4|immb:3|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"USHLL2 <Vd>.<Ta>, <Vn>.<Tb>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"This instruction is used by the alias UXTL, UXTL2.\"},\n{\"Name\":\"USHR\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"USHR <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"USHR\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|0|0|0|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"USHR <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"USQADD\",\"Bits\":\"0|1|1|1|1|1|1|0|size:2|1|0|0|0|0|0|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"USQADD <V><d>, <V><n>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"USQADD\",\"Bits\":\"0|Q|1|0|1|1|1|0|size:2|1|0|0|0|0|0|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"USQADD <Vd>.<T>, <Vn>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"USRA\",\"Bits\":\"0|1|1|1|1|1|1|1|0|immh:4|immb:3|0|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Scalar Scalar variant\",\"Syntax\":\"USRA <V><d>, <V><n>, #<shift>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"USRA\",\"Bits\":\"0|Q|1|0|1|1|1|1|0|immh:4|immb:3|0|0|0|1|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector Vector variant\",\"Syntax\":\"USRA <Vd>.<T>, <Vn>.<T>, #<shift>\",\"Code\":\"if immh == '0000' then SEE \\\"Advanced SIMD modified immediate\\\";\",\"Alias\":\"\"},\n{\"Name\":\"USUBL, USUBL2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|0|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"USUBL <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"USUBL, USUBL2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|0|0|1|0|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"USUBL2 <Vd>.<Ta>, <Vn>.<Tb>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"USUBW, USUBW2\",\"Bits\":\"0|0|1|0|1|1|1|0|size:2|1|Rm:5|0|0|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"USUBW <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"USUBW, USUBW2\",\"Bits\":\"0|1|1|0|1|1|1|0|size:2|1|Rm:5|0|0|1|1|0|0|Rn:5|Rd:5\",\"Arch\":\"Three registers, not all the same type variant\",\"Syntax\":\"USUBW2 <Vd>.<Ta>, <Vn>.<Ta>, <Vm>.<Tb>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UXTL, UXTL2\",\"Bits\":\"0|0|1|0|1|1|1|1|0|immh:4|0|0|0|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UXTL <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the USHLL, USHLL2 instruction.\"},\n{\"Name\":\"UXTL, UXTL2\",\"Bits\":\"0|1|1|0|1|1|1|1|0|immh:4|0|0|0|1|0|1|0|0|1|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"UXTL2 <Vd>.<Ta>, <Vn>.<Tb>\",\"Code\":\"\",\"Alias\":\"This instruction is an alias of the USHLL, USHLL2 instruction.\"},\n{\"Name\":\"UZP1\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|0|Rm:5|0|0|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"UZP1 <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"UZP2\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|0|Rm:5|0|1|0|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"UZP2 <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"XTN, XTN2\",\"Bits\":\"0|0|0|0|1|1|1|0|size:2|1|0|0|0|0|1|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"XTN <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"XTN, XTN2\",\"Bits\":\"0|1|0|0|1|1|1|0|size:2|1|0|0|0|0|1|0|0|1|0|1|0|Rn:5|Rd:5\",\"Arch\":\"Vector variant\",\"Syntax\":\"XTN2 <Vd>.<Tb>, <Vn>.<Ta>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ZIP1\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|0|Rm:5|0|0|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"ZIP1 <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"},\n{\"Name\":\"ZIP2\",\"Bits\":\"0|Q|0|0|1|1|1|0|size:2|0|Rm:5|0|1|1|1|1|0|Rn:5|Rd:5\",\"Arch\":\"Advanced SIMD variant\",\"Syntax\":\"ZIP2 <Vd>.<T>, <Vn>.<T>, <Vm>.<T>\",\"Code\":\"\",\"Alias\":\"\"}\n]\n"
  },
  {
    "path": "vendor/golang.org/x/arch/arm64/arm64asm/plan9x.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage arm64asm\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"sort\"\n\t\"strings\"\n)\n\n// GoSyntax returns the Go assembler syntax for the instruction.\n// The syntax was originally defined by Plan 9.\n// The pc is the program counter of the instruction, used for\n// expanding PC-relative addresses into absolute ones.\n// The symname function queries the symbol table for the program\n// being disassembled. Given a target address it returns the name\n// and base address of the symbol containing the target, if any;\n// otherwise it returns \"\", 0.\n// The reader text should read from the text segment using text addresses\n// as offsets; it is used to display pc-relative loads as constant loads.\nfunc GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64), text io.ReaderAt) string {\n\tif symname == nil {\n\t\tsymname = func(uint64) (string, uint64) { return \"\", 0 }\n\t}\n\n\tvar args []string\n\tfor _, a := range inst.Args {\n\t\tif a == nil {\n\t\t\tbreak\n\t\t}\n\t\targs = append(args, plan9Arg(&inst, pc, symname, a))\n\t}\n\n\top := inst.Op.String()\n\n\tswitch inst.Op {\n\tcase LDR, LDRB, LDRH, LDRSB, LDRSH, LDRSW:\n\t\t// Check for PC-relative load.\n\t\tif offset, ok := inst.Args[1].(PCRel); ok {\n\t\t\taddr := pc + uint64(offset)\n\t\t\tif _, ok := inst.Args[0].(Reg); !ok {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif s, base := symname(addr); s != \"\" && addr == base {\n\t\t\t\targs[1] = fmt.Sprintf(\"$%s(SB)\", s)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Move addressing mode into opcode suffix.\n\tsuffix := \"\"\n\tswitch inst.Op {\n\tcase LDR, LDRB, LDRH, LDRSB, LDRSH, LDRSW, STR, STRB, STRH, STUR, STURB, STURH, LD1, ST1:\n\t\tswitch mem := inst.Args[1].(type) {\n\t\tcase MemImmediate:\n\t\t\tswitch mem.Mode {\n\t\t\tcase AddrOffset:\n\t\t\t\t// no suffix\n\t\t\tcase AddrPreIndex:\n\t\t\t\tsuffix = \".W\"\n\t\t\tcase AddrPostIndex, AddrPostReg:\n\t\t\t\tsuffix = \".P\"\n\t\t\t}\n\t\t}\n\n\tcase STP, LDP:\n\t\tswitch mem := inst.Args[2].(type) {\n\t\tcase MemImmediate:\n\t\t\tswitch mem.Mode {\n\t\t\tcase AddrOffset:\n\t\t\t\t// no suffix\n\t\t\tcase AddrPreIndex:\n\t\t\t\tsuffix = \".W\"\n\t\t\tcase AddrPostIndex:\n\t\t\t\tsuffix = \".P\"\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch inst.Op {\n\tcase BL:\n\t\treturn \"CALL \" + args[0]\n\n\tcase BLR:\n\t\tr := inst.Args[0].(Reg)\n\t\tregno := uint16(r) & 31\n\t\treturn fmt.Sprintf(\"CALL (R%d)\", regno)\n\n\tcase RET:\n\t\tif r, ok := inst.Args[0].(Reg); ok && r == X30 {\n\t\t\treturn \"RET\"\n\t\t}\n\n\tcase B:\n\t\tif cond, ok := inst.Args[0].(Cond); ok {\n\t\t\treturn \"B\" + cond.String() + \" \" + args[1]\n\t\t}\n\t\treturn \"JMP\" + \" \" + args[0]\n\n\tcase BR:\n\t\tr := inst.Args[0].(Reg)\n\t\tregno := uint16(r) & 31\n\t\treturn fmt.Sprintf(\"JMP (R%d)\", regno)\n\n\tcase MOV:\n\t\trno := -1\n\t\tswitch a := inst.Args[0].(type) {\n\t\tcase Reg:\n\t\t\trno = int(a)\n\t\tcase RegSP:\n\t\t\trno = int(a)\n\t\tcase RegisterWithArrangementAndIndex:\n\t\t\top = \"VMOV\"\n\t\tcase RegisterWithArrangement:\n\t\t\top = \"VMOV\"\n\t\t}\n\t\tif rno >= 0 && rno <= int(WZR) {\n\t\t\top = \"MOVW\"\n\t\t} else if rno >= int(X0) && rno <= int(XZR) {\n\t\t\top = \"MOVD\"\n\t\t}\n\t\tif _, ok := inst.Args[1].(RegisterWithArrangementAndIndex); ok {\n\t\t\top = \"VMOV\"\n\t\t}\n\n\tcase LDR, LDUR:\n\t\tvar rno uint16\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno = uint16(r)\n\t\t} else {\n\t\t\trno = uint16(inst.Args[0].(RegSP))\n\t\t}\n\t\tif rno <= uint16(WZR) {\n\t\t\top = \"MOVWU\" + suffix\n\t\t} else if rno >= uint16(B0) && rno <= uint16(B31) {\n\t\t\top = \"FMOVB\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else if rno >= uint16(H0) && rno <= uint16(H31) {\n\t\t\top = \"FMOVH\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else if rno >= uint16(S0) && rno <= uint16(S31) {\n\t\t\top = \"FMOVS\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else if rno >= uint16(D0) && rno <= uint16(D31) {\n\t\t\top = \"FMOVD\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else if rno >= uint16(Q0) && rno <= uint16(Q31) {\n\t\t\top = \"FMOVQ\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else {\n\t\t\top = \"MOVD\" + suffix\n\t\t}\n\n\tcase LDRB:\n\t\top = \"MOVBU\" + suffix\n\n\tcase LDRH:\n\t\top = \"MOVHU\" + suffix\n\n\tcase LDRSW:\n\t\top = \"MOVW\" + suffix\n\n\tcase LDRSB:\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno <= uint16(WZR) {\n\t\t\t\top = \"MOVBW\" + suffix\n\t\t\t} else {\n\t\t\t\top = \"MOVB\" + suffix\n\t\t\t}\n\t\t}\n\tcase LDRSH:\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno <= uint16(WZR) {\n\t\t\t\top = \"MOVHW\" + suffix\n\t\t\t} else {\n\t\t\t\top = \"MOVH\" + suffix\n\t\t\t}\n\t\t}\n\tcase STR, STUR:\n\t\tvar rno uint16\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno = uint16(r)\n\t\t} else {\n\t\t\trno = uint16(inst.Args[0].(RegSP))\n\t\t}\n\t\tif rno <= uint16(WZR) {\n\t\t\top = \"MOVW\" + suffix\n\t\t} else if rno >= uint16(B0) && rno <= uint16(B31) {\n\t\t\top = \"FMOVB\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else if rno >= uint16(H0) && rno <= uint16(H31) {\n\t\t\top = \"FMOVH\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else if rno >= uint16(S0) && rno <= uint16(S31) {\n\t\t\top = \"FMOVS\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else if rno >= uint16(D0) && rno <= uint16(D31) {\n\t\t\top = \"FMOVD\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else if rno >= uint16(Q0) && rno <= uint16(Q31) {\n\t\t\top = \"FMOVQ\" + suffix\n\t\t\targs[0] = fmt.Sprintf(\"F%d\", rno&31)\n\t\t} else {\n\t\t\top = \"MOVD\" + suffix\n\t\t}\n\t\targs[0], args[1] = args[1], args[0]\n\n\tcase STRB, STURB:\n\t\top = \"MOVB\" + suffix\n\t\targs[0], args[1] = args[1], args[0]\n\n\tcase STRH, STURH:\n\t\top = \"MOVH\" + suffix\n\t\targs[0], args[1] = args[1], args[0]\n\n\tcase TBNZ, TBZ:\n\t\targs[0], args[1], args[2] = args[2], args[0], args[1]\n\n\tcase MADD, MSUB, SMADDL, SMSUBL, UMADDL, UMSUBL:\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno <= uint16(WZR) {\n\t\t\t\top += \"W\"\n\t\t\t}\n\t\t}\n\t\targs[2], args[3] = args[3], args[2]\n\tcase STLR:\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno <= uint16(WZR) {\n\t\t\t\top += \"W\"\n\t\t\t}\n\t\t}\n\t\targs[0], args[1] = args[1], args[0]\n\n\tcase STLRB, STLRH:\n\t\targs[0], args[1] = args[1], args[0]\n\n\tcase STLXR, STXR:\n\t\tif r, ok := inst.Args[1].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno <= uint16(WZR) {\n\t\t\t\top += \"W\"\n\t\t\t}\n\t\t}\n\t\targs[1], args[2] = args[2], args[1]\n\n\tcase STLXRB, STLXRH, STXRB, STXRH:\n\t\targs[1], args[2] = args[2], args[1]\n\n\tcase BFI, BFXIL, SBFIZ, SBFX, UBFIZ, UBFX:\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno <= uint16(WZR) {\n\t\t\t\top += \"W\"\n\t\t\t}\n\t\t}\n\t\targs[1], args[2], args[3] = args[3], args[1], args[2]\n\n\tcase LDAXP, LDXP:\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno <= uint16(WZR) {\n\t\t\t\top += \"W\"\n\t\t\t}\n\t\t}\n\t\targs[0] = fmt.Sprintf(\"(%s, %s)\", args[0], args[1])\n\t\targs[1] = args[2]\n\t\treturn op + \" \" + args[1] + \", \" + args[0]\n\n\tcase STP, LDP:\n\t\targs[0] = fmt.Sprintf(\"(%s, %s)\", args[0], args[1])\n\t\targs[1] = args[2]\n\n\t\trno, ok := inst.Args[0].(Reg)\n\t\tif !ok {\n\t\t\trno = Reg(inst.Args[0].(RegSP))\n\t\t}\n\t\tif rno <= WZR {\n\t\t\top = op + \"W\"\n\t\t} else if rno >= S0 && rno <= S31 {\n\t\t\top = \"F\" + op + \"S\"\n\t\t} else if rno >= D0 && rno <= D31 {\n\t\t\top = \"F\" + op + \"D\"\n\t\t} else if rno >= Q0 && rno <= Q31 {\n\t\t\top = \"F\" + op + \"Q\"\n\t\t}\n\t\top = op + suffix\n\t\tif inst.Op.String() == \"STP\" {\n\t\t\treturn op + \" \" + args[0] + \", \" + args[1]\n\t\t} else {\n\t\t\treturn op + \" \" + args[1] + \", \" + args[0]\n\t\t}\n\n\tcase STLXP, STXP:\n\t\tif r, ok := inst.Args[1].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno <= uint16(WZR) {\n\t\t\t\top += \"W\"\n\t\t\t}\n\t\t}\n\t\targs[1] = fmt.Sprintf(\"(%s, %s)\", args[1], args[2])\n\t\targs[2] = args[3]\n\t\treturn op + \" \" + args[1] + \", \" + args[2] + \", \" + args[0]\n\n\tcase FCCMP, FCCMPE:\n\t\targs[0], args[1] = args[1], args[0]\n\t\tfallthrough\n\n\tcase FCMP, FCMPE:\n\t\tif _, ok := inst.Args[1].(Imm); ok {\n\t\t\targs[1] = \"$(0.0)\"\n\t\t}\n\t\tfallthrough\n\n\tcase FADD, FSUB, FMUL, FNMUL, FDIV, FMAX, FMIN, FMAXNM, FMINNM, FCSEL, FMADD, FMSUB, FNMADD, FNMSUB:\n\t\tif strings.HasSuffix(op, \"MADD\") || strings.HasSuffix(op, \"MSUB\") {\n\t\t\targs[2], args[3] = args[3], args[2]\n\t\t}\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno >= uint16(S0) && rno <= uint16(S31) {\n\t\t\t\top = fmt.Sprintf(\"%sS\", op)\n\t\t\t} else if rno >= uint16(D0) && rno <= uint16(D31) {\n\t\t\t\top = fmt.Sprintf(\"%sD\", op)\n\t\t\t}\n\t\t}\n\n\tcase FCVT:\n\t\tfor i := 1; i >= 0; i-- {\n\t\t\tif r, ok := inst.Args[i].(Reg); ok {\n\t\t\t\trno := uint16(r)\n\t\t\t\tif rno >= uint16(H0) && rno <= uint16(H31) {\n\t\t\t\t\top = fmt.Sprintf(\"%sH\", op)\n\t\t\t\t} else if rno >= uint16(S0) && rno <= uint16(S31) {\n\t\t\t\t\top = fmt.Sprintf(\"%sS\", op)\n\t\t\t\t} else if rno >= uint16(D0) && rno <= uint16(D31) {\n\t\t\t\t\top = fmt.Sprintf(\"%sD\", op)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tcase FABS, FNEG, FSQRT, FRINTN, FRINTP, FRINTM, FRINTZ, FRINTA, FRINTX, FRINTI:\n\t\tif r, ok := inst.Args[1].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno >= uint16(S0) && rno <= uint16(S31) {\n\t\t\t\top = fmt.Sprintf(\"%sS\", op)\n\t\t\t} else if rno >= uint16(D0) && rno <= uint16(D31) {\n\t\t\t\top = fmt.Sprintf(\"%sD\", op)\n\t\t\t}\n\t\t}\n\n\tcase FCVTZS, FCVTZU, SCVTF, UCVTF:\n\t\tif _, ok := inst.Args[2].(Imm); !ok {\n\t\t\tfor i := 1; i >= 0; i-- {\n\t\t\t\tif r, ok := inst.Args[i].(Reg); ok {\n\t\t\t\t\trno := uint16(r)\n\t\t\t\t\tif rno >= uint16(S0) && rno <= uint16(S31) {\n\t\t\t\t\t\top = fmt.Sprintf(\"%sS\", op)\n\t\t\t\t\t} else if rno >= uint16(D0) && rno <= uint16(D31) {\n\t\t\t\t\t\top = fmt.Sprintf(\"%sD\", op)\n\t\t\t\t\t} else if rno <= uint16(WZR) {\n\t\t\t\t\t\top += \"W\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tcase FMOV:\n\t\tfor i := 0; i <= 1; i++ {\n\t\t\tif r, ok := inst.Args[i].(Reg); ok {\n\t\t\t\trno := uint16(r)\n\t\t\t\tif rno >= uint16(S0) && rno <= uint16(S31) {\n\t\t\t\t\top = fmt.Sprintf(\"%sS\", op)\n\t\t\t\t\tbreak\n\t\t\t\t} else if rno >= uint16(D0) && rno <= uint16(D31) {\n\t\t\t\t\top = fmt.Sprintf(\"%sD\", op)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\tcase SYSL:\n\t\top1 := int(inst.Args[1].(Imm).Imm)\n\t\tcn := int(inst.Args[2].(Imm_c))\n\t\tcm := int(inst.Args[3].(Imm_c))\n\t\top2 := int(inst.Args[4].(Imm).Imm)\n\t\tsysregno := int32(op1<<16 | cn<<12 | cm<<8 | op2<<5)\n\t\targs[1] = fmt.Sprintf(\"$%d\", sysregno)\n\t\treturn op + \" \" + args[1] + \", \" + args[0]\n\n\tcase CBNZ, CBZ:\n\t\tif r, ok := inst.Args[0].(Reg); ok {\n\t\t\trno := uint16(r)\n\t\t\tif rno <= uint16(WZR) {\n\t\t\t\top += \"W\"\n\t\t\t}\n\t\t}\n\t\targs[0], args[1] = args[1], args[0]\n\n\tcase ADR, ADRP:\n\t\taddr := int64(inst.Args[1].(PCRel))\n\t\targs[1] = fmt.Sprintf(\"%d(PC)\", addr)\n\n\tcase MSR:\n\t\targs[0] = inst.Args[0].String()\n\n\tcase ST1:\n\t\top = fmt.Sprintf(\"V%s\", op) + suffix\n\t\targs[0], args[1] = args[1], args[0]\n\n\tcase LD1:\n\t\top = fmt.Sprintf(\"V%s\", op) + suffix\n\n\tcase UMOV:\n\t\top = \"VMOV\"\n\tcase NOP:\n\t\top = \"NOOP\"\n\n\tdefault:\n\t\tindex := sort.SearchStrings(noSuffixOpSet, op)\n\t\tif !(index < len(noSuffixOpSet) && noSuffixOpSet[index] == op) {\n\t\t\trno := -1\n\t\t\tswitch a := inst.Args[0].(type) {\n\t\t\tcase Reg:\n\t\t\t\trno = int(a)\n\t\t\tcase RegSP:\n\t\t\t\trno = int(a)\n\t\t\tcase RegisterWithArrangement:\n\t\t\t\top = fmt.Sprintf(\"V%s\", op)\n\t\t\t}\n\n\t\t\tif rno >= int(B0) && rno <= int(Q31) && !strings.HasPrefix(op, \"F\") {\n\t\t\t\top = fmt.Sprintf(\"V%s\", op)\n\t\t\t}\n\t\t\tif rno >= 0 && rno <= int(WZR) {\n\t\t\t\t// Add \"w\" to opcode suffix.\n\t\t\t\top += \"W\"\n\t\t\t}\n\t\t}\n\t\top = op + suffix\n\t}\n\n\t// conditional instructions, replace args.\n\tif _, ok := inst.Args[3].(Cond); ok {\n\t\tif _, ok := inst.Args[2].(Reg); ok {\n\t\t\targs[1], args[2] = args[2], args[1]\n\t\t} else {\n\t\t\targs[0], args[2] = args[2], args[0]\n\t\t}\n\t}\n\t// Reverse args, placing dest last.\n\tfor i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {\n\t\targs[i], args[j] = args[j], args[i]\n\t}\n\n\tif args != nil {\n\t\top += \" \" + strings.Join(args, \", \")\n\t}\n\n\treturn op\n}\n\n// No need add \"W\" to opcode suffix.\n// Opcode must be inserted in ascending order.\nvar noSuffixOpSet = strings.Fields(`\nAESD\nAESE\nAESIMC\nAESMC\nCRC32B\nCRC32CB\nCRC32CH\nCRC32CW\nCRC32CX\nCRC32H\nCRC32W\nCRC32X\nLDARB\nLDARH\nLDAXRB\nLDAXRH\nLDTRH\nLDXRB\nLDXRH\nSHA1C\nSHA1H\nSHA1M\nSHA1P\nSHA1SU0\nSHA1SU1\nSHA256H\nSHA256H2\nSHA256SU0\nSHA256SU1\n`)\n\n// floating point instructions without \"F\" prefix.\nvar fOpsWithoutFPrefix = map[Op]bool{\n\tLDP: true,\n\tSTP: true,\n}\n\nfunc plan9Arg(inst *Inst, pc uint64, symname func(uint64) (string, uint64), arg Arg) string {\n\tswitch a := arg.(type) {\n\tcase Imm:\n\t\treturn fmt.Sprintf(\"$%d\", uint32(a.Imm))\n\n\tcase Imm64:\n\t\treturn fmt.Sprintf(\"$%d\", int64(a.Imm))\n\n\tcase ImmShift:\n\t\tif a.shift == 0 {\n\t\t\treturn fmt.Sprintf(\"$%d\", a.imm)\n\t\t}\n\t\treturn fmt.Sprintf(\"$(%d<<%d)\", a.imm, a.shift)\n\n\tcase PCRel:\n\t\taddr := int64(pc) + int64(a)\n\t\tif s, base := symname(uint64(addr)); s != \"\" && uint64(addr) == base {\n\t\t\treturn fmt.Sprintf(\"%s(SB)\", s)\n\t\t}\n\t\treturn fmt.Sprintf(\"%d(PC)\", a/4)\n\n\tcase Reg:\n\t\tregenum := uint16(a)\n\t\tregno := uint16(a) & 31\n\n\t\tif regenum >= uint16(B0) && regenum <= uint16(Q31) {\n\t\t\tif strings.HasPrefix(inst.Op.String(), \"F\") || strings.HasSuffix(inst.Op.String(), \"CVTF\") || fOpsWithoutFPrefix[inst.Op] {\n\t\t\t\t// FP registers are the same ones as SIMD registers\n\t\t\t\t// Print Fn for scalar variant to align with assembler (e.g., FCVT, SCVTF, UCVTF, etc.)\n\t\t\t\treturn fmt.Sprintf(\"F%d\", regno)\n\t\t\t} else {\n\t\t\t\t// Print Vn to align with assembler (e.g., SHA256H)\n\t\t\t\treturn fmt.Sprintf(\"V%d\", regno)\n\t\t\t}\n\n\t\t}\n\t\treturn plan9gpr(a)\n\n\tcase RegSP:\n\t\tregno := uint16(a) & 31\n\t\tif regno == 31 {\n\t\t\treturn \"RSP\"\n\t\t}\n\t\treturn fmt.Sprintf(\"R%d\", regno)\n\n\tcase RegExtshiftAmount:\n\t\treg := plan9gpr(a.reg)\n\t\textshift := \"\"\n\t\tamount := \"\"\n\t\tif a.extShift != ExtShift(0) {\n\t\t\tswitch a.extShift {\n\t\t\tdefault:\n\t\t\t\textshift = \".\" + a.extShift.String()\n\n\t\t\tcase lsl:\n\t\t\t\textshift = \"<<\"\n\t\t\t\tamount = fmt.Sprintf(\"%d\", a.amount)\n\t\t\t\treturn reg + extshift + amount\n\n\t\t\tcase lsr:\n\t\t\t\textshift = \">>\"\n\t\t\t\tamount = fmt.Sprintf(\"%d\", a.amount)\n\t\t\t\treturn reg + extshift + amount\n\n\t\t\tcase asr:\n\t\t\t\textshift = \"->\"\n\t\t\t\tamount = fmt.Sprintf(\"%d\", a.amount)\n\t\t\t\treturn reg + extshift + amount\n\t\t\tcase ror:\n\t\t\t\textshift = \"@>\"\n\t\t\t\tamount = fmt.Sprintf(\"%d\", a.amount)\n\t\t\t\treturn reg + extshift + amount\n\t\t\t}\n\t\t\tif a.amount != 0 {\n\t\t\t\tamount = fmt.Sprintf(\"<<%d\", a.amount)\n\t\t\t}\n\t\t}\n\t\treturn reg + extshift + amount\n\n\tcase MemImmediate:\n\t\toff := \"\"\n\t\tbase := \"\"\n\t\tregno := uint16(a.Base) & 31\n\t\tif regno == 31 {\n\t\t\tbase = \"(RSP)\"\n\t\t} else {\n\t\t\tbase = fmt.Sprintf(\"(R%d)\", regno)\n\t\t}\n\t\tif a.imm != 0 && a.Mode != AddrPostReg {\n\t\t\toff = fmt.Sprintf(\"%d\", a.imm)\n\t\t} else if a.Mode == AddrPostReg {\n\t\t\tpostR := fmt.Sprintf(\"(R%d)\", a.imm)\n\t\t\treturn base + postR\n\t\t}\n\t\treturn off + base\n\n\tcase MemExtend:\n\t\tbase := \"\"\n\t\tindex := \"\"\n\t\tregno := uint16(a.Base) & 31\n\t\tif regno == 31 {\n\t\t\tbase = \"(RSP)\"\n\t\t} else {\n\t\t\tbase = fmt.Sprintf(\"(R%d)\", regno)\n\t\t}\n\t\tindexreg := plan9gpr(a.Index)\n\n\t\tif a.Extend == lsl {\n\t\t\t// Refer to ARM reference manual, for byte load/store(register), the index\n\t\t\t// shift amount must be 0, encoded in \"S\" as 0 if omitted, or as 1 if present.\n\t\t\t// a.Amount indicates the index shift amount, encoded in \"S\" field.\n\t\t\t// a.ShiftMustBeZero is set true indicates the index shift amount must be 0.\n\t\t\t// When a.ShiftMustBeZero is true, GNU syntax prints \"[Xn, Xm lsl #0]\" if \"S\"\n\t\t\t// equals to 1, or prints \"[Xn, Xm]\" if \"S\" equals to 0.\n\t\t\tif a.Amount != 0 && !a.ShiftMustBeZero {\n\t\t\t\tindex = fmt.Sprintf(\"(%s<<%d)\", indexreg, a.Amount)\n\t\t\t} else if a.ShiftMustBeZero && a.Amount == 1 {\n\t\t\t\t// When a.ShiftMustBeZero is ture, Go syntax prints \"(Rm<<0)\" if \"a.Amount\"\n\t\t\t\t// equals to 1.\n\t\t\t\tindex = fmt.Sprintf(\"(%s<<0)\", indexreg)\n\t\t\t} else {\n\t\t\t\tindex = fmt.Sprintf(\"(%s)\", indexreg)\n\t\t\t}\n\t\t} else {\n\t\t\tif a.Amount != 0 && !a.ShiftMustBeZero {\n\t\t\t\tindex = fmt.Sprintf(\"(%s.%s<<%d)\", indexreg, a.Extend.String(), a.Amount)\n\t\t\t} else {\n\t\t\t\tindex = fmt.Sprintf(\"(%s.%s)\", indexreg, a.Extend.String())\n\t\t\t}\n\t\t}\n\n\t\treturn base + index\n\n\tcase Cond:\n\t\tswitch arg.String() {\n\t\tcase \"CS\":\n\t\t\treturn \"HS\"\n\t\tcase \"CC\":\n\t\t\treturn \"LO\"\n\t\t}\n\n\tcase Imm_clrex:\n\t\treturn fmt.Sprintf(\"$%d\", uint32(a))\n\n\tcase Imm_dcps:\n\t\treturn fmt.Sprintf(\"$%d\", uint32(a))\n\n\tcase Imm_option:\n\t\treturn fmt.Sprintf(\"$%d\", uint8(a))\n\n\tcase Imm_hint:\n\t\treturn fmt.Sprintf(\"$%d\", uint8(a))\n\n\tcase Imm_fp:\n\t\tvar s, pre, numerator, denominator int16\n\t\tvar result float64\n\t\tif a.s == 0 {\n\t\t\ts = 1\n\t\t} else {\n\t\t\ts = -1\n\t\t}\n\t\tpre = s * int16(16+a.pre)\n\t\tif a.exp > 0 {\n\t\t\tnumerator = (pre << uint8(a.exp))\n\t\t\tdenominator = 16\n\t\t} else {\n\t\t\tnumerator = pre\n\t\t\tdenominator = (16 << uint8(-1*a.exp))\n\t\t}\n\t\tresult = float64(numerator) / float64(denominator)\n\t\treturn strings.TrimRight(fmt.Sprintf(\"$%f\", result), \"0\")\n\n\tcase RegisterWithArrangement:\n\t\tresult := a.r.String()\n\t\tarrange := a.a.String()\n\t\tc := []rune(arrange)\n\t\tswitch len(c) {\n\t\tcase 3:\n\t\t\tc[1], c[2] = c[2], c[1] // .8B -> .B8\n\t\tcase 4:\n\t\t\tc[1], c[2], c[3] = c[3], c[1], c[2] // 16B -> B16\n\t\t}\n\t\tarrange = string(c)\n\t\tresult += arrange\n\t\tif a.cnt > 0 {\n\t\t\tresult = \"[\" + result\n\t\t\tfor i := 1; i < int(a.cnt); i++ {\n\t\t\t\tcur := V0 + Reg((uint16(a.r)-uint16(V0)+uint16(i))&31)\n\t\t\t\tresult += \", \" + cur.String() + arrange\n\t\t\t}\n\t\t\tresult += \"]\"\n\t\t}\n\t\treturn result\n\n\tcase RegisterWithArrangementAndIndex:\n\t\tresult := a.r.String()\n\t\tarrange := a.a.String()\n\t\tresult += arrange\n\t\tif a.cnt > 1 {\n\t\t\tresult = \"[\" + result\n\t\t\tfor i := 1; i < int(a.cnt); i++ {\n\t\t\t\tcur := V0 + Reg((uint16(a.r)-uint16(V0)+uint16(i))&31)\n\t\t\t\tresult += \", \" + cur.String() + arrange\n\t\t\t}\n\t\t\tresult += \"]\"\n\t\t}\n\t\treturn fmt.Sprintf(\"%s[%d]\", result, a.index)\n\n\tcase Systemreg:\n\t\treturn fmt.Sprintf(\"$%d\", uint32(a.op0&1)<<14|uint32(a.op1&7)<<11|uint32(a.cn&15)<<7|uint32(a.cm&15)<<3|uint32(a.op2)&7)\n\n\tcase Imm_prfop:\n\t\tif strings.Contains(a.String(), \"#\") {\n\t\t\treturn fmt.Sprintf(\"$%d\", a)\n\t\t}\n\tcase sysOp:\n\t\tresult := a.op.String()\n\t\tif a.r != 0 {\n\t\t\tresult += \", \" + plan9gpr(a.r)\n\t\t}\n\t\treturn result\n\t}\n\n\treturn strings.ToUpper(arg.String())\n}\n\n// Convert a general-purpose register to plan9 assembly format.\nfunc plan9gpr(r Reg) string {\n\tregno := uint16(r) & 31\n\tif regno == 31 {\n\t\treturn \"ZR\"\n\t}\n\treturn fmt.Sprintf(\"R%d\", regno)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/arm64/arm64asm/tables.go",
    "content": "// Generated by ARM internal tool\n// DO NOT EDIT\n\n// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage arm64asm\n\nconst (\n\t_ Op = iota\n\tABS\n\tADC\n\tADCS\n\tADD\n\tADDHN\n\tADDHN2\n\tADDP\n\tADDS\n\tADDV\n\tADR\n\tADRP\n\tAESD\n\tAESE\n\tAESIMC\n\tAESMC\n\tAND\n\tANDS\n\tASR\n\tASRV\n\tAT\n\tB\n\tBFI\n\tBFM\n\tBFXIL\n\tBIC\n\tBICS\n\tBIF\n\tBIT\n\tBL\n\tBLR\n\tBR\n\tBRK\n\tBSL\n\tCBNZ\n\tCBZ\n\tCCMN\n\tCCMP\n\tCINC\n\tCINV\n\tCLREX\n\tCLS\n\tCLZ\n\tCMEQ\n\tCMGE\n\tCMGT\n\tCMHI\n\tCMHS\n\tCMLE\n\tCMLT\n\tCMN\n\tCMP\n\tCMTST\n\tCNEG\n\tCNT\n\tCRC32B\n\tCRC32CB\n\tCRC32CH\n\tCRC32CW\n\tCRC32CX\n\tCRC32H\n\tCRC32W\n\tCRC32X\n\tCSEL\n\tCSET\n\tCSETM\n\tCSINC\n\tCSINV\n\tCSNEG\n\tDC\n\tDCPS1\n\tDCPS2\n\tDCPS3\n\tDMB\n\tDRPS\n\tDSB\n\tDUP\n\tEON\n\tEOR\n\tERET\n\tEXT\n\tEXTR\n\tFABD\n\tFABS\n\tFACGE\n\tFACGT\n\tFADD\n\tFADDP\n\tFCCMP\n\tFCCMPE\n\tFCMEQ\n\tFCMGE\n\tFCMGT\n\tFCMLE\n\tFCMLT\n\tFCMP\n\tFCMPE\n\tFCSEL\n\tFCVT\n\tFCVTAS\n\tFCVTAU\n\tFCVTL\n\tFCVTL2\n\tFCVTMS\n\tFCVTMU\n\tFCVTN\n\tFCVTN2\n\tFCVTNS\n\tFCVTNU\n\tFCVTPS\n\tFCVTPU\n\tFCVTXN\n\tFCVTXN2\n\tFCVTZS\n\tFCVTZU\n\tFDIV\n\tFMADD\n\tFMAX\n\tFMAXNM\n\tFMAXNMP\n\tFMAXNMV\n\tFMAXP\n\tFMAXV\n\tFMIN\n\tFMINNM\n\tFMINNMP\n\tFMINNMV\n\tFMINP\n\tFMINV\n\tFMLA\n\tFMLS\n\tFMOV\n\tFMSUB\n\tFMUL\n\tFMULX\n\tFNEG\n\tFNMADD\n\tFNMSUB\n\tFNMUL\n\tFRECPE\n\tFRECPS\n\tFRECPX\n\tFRINTA\n\tFRINTI\n\tFRINTM\n\tFRINTN\n\tFRINTP\n\tFRINTX\n\tFRINTZ\n\tFRSQRTE\n\tFRSQRTS\n\tFSQRT\n\tFSUB\n\tHINT\n\tHLT\n\tHVC\n\tIC\n\tINS\n\tISB\n\tLD1\n\tLD1R\n\tLD2\n\tLD2R\n\tLD3\n\tLD3R\n\tLD4\n\tLD4R\n\tLDAR\n\tLDARB\n\tLDARH\n\tLDAXP\n\tLDAXR\n\tLDAXRB\n\tLDAXRH\n\tLDNP\n\tLDP\n\tLDPSW\n\tLDR\n\tLDRB\n\tLDRH\n\tLDRSB\n\tLDRSH\n\tLDRSW\n\tLDTR\n\tLDTRB\n\tLDTRH\n\tLDTRSB\n\tLDTRSH\n\tLDTRSW\n\tLDUR\n\tLDURB\n\tLDURH\n\tLDURSB\n\tLDURSH\n\tLDURSW\n\tLDXP\n\tLDXR\n\tLDXRB\n\tLDXRH\n\tLSL\n\tLSLV\n\tLSR\n\tLSRV\n\tMADD\n\tMLA\n\tMLS\n\tMNEG\n\tMOV\n\tMOVI\n\tMOVK\n\tMOVN\n\tMOVZ\n\tMRS\n\tMSR\n\tMSUB\n\tMUL\n\tMVN\n\tMVNI\n\tNEG\n\tNEGS\n\tNGC\n\tNGCS\n\tNOP\n\tNOT\n\tORN\n\tORR\n\tPMUL\n\tPMULL\n\tPMULL2\n\tPRFM\n\tPRFUM\n\tRADDHN\n\tRADDHN2\n\tRBIT\n\tRET\n\tREV\n\tREV16\n\tREV32\n\tREV64\n\tROR\n\tRORV\n\tRSHRN\n\tRSHRN2\n\tRSUBHN\n\tRSUBHN2\n\tSABA\n\tSABAL\n\tSABAL2\n\tSABD\n\tSABDL\n\tSABDL2\n\tSADALP\n\tSADDL\n\tSADDL2\n\tSADDLP\n\tSADDLV\n\tSADDW\n\tSADDW2\n\tSBC\n\tSBCS\n\tSBFIZ\n\tSBFM\n\tSBFX\n\tSCVTF\n\tSDIV\n\tSEV\n\tSEVL\n\tSHA1C\n\tSHA1H\n\tSHA1M\n\tSHA1P\n\tSHA1SU0\n\tSHA1SU1\n\tSHA256H\n\tSHA256H2\n\tSHA256SU0\n\tSHA256SU1\n\tSHADD\n\tSHL\n\tSHLL\n\tSHLL2\n\tSHRN\n\tSHRN2\n\tSHSUB\n\tSLI\n\tSMADDL\n\tSMAX\n\tSMAXP\n\tSMAXV\n\tSMC\n\tSMIN\n\tSMINP\n\tSMINV\n\tSMLAL\n\tSMLAL2\n\tSMLSL\n\tSMLSL2\n\tSMNEGL\n\tSMOV\n\tSMSUBL\n\tSMULH\n\tSMULL\n\tSMULL2\n\tSQABS\n\tSQADD\n\tSQDMLAL\n\tSQDMLAL2\n\tSQDMLSL\n\tSQDMLSL2\n\tSQDMULH\n\tSQDMULL\n\tSQDMULL2\n\tSQNEG\n\tSQRDMULH\n\tSQRSHL\n\tSQRSHRN\n\tSQRSHRN2\n\tSQRSHRUN\n\tSQRSHRUN2\n\tSQSHL\n\tSQSHLU\n\tSQSHRN\n\tSQSHRN2\n\tSQSHRUN\n\tSQSHRUN2\n\tSQSUB\n\tSQXTN\n\tSQXTN2\n\tSQXTUN\n\tSQXTUN2\n\tSRHADD\n\tSRI\n\tSRSHL\n\tSRSHR\n\tSRSRA\n\tSSHL\n\tSSHLL\n\tSSHLL2\n\tSSHR\n\tSSRA\n\tSSUBL\n\tSSUBL2\n\tSSUBW\n\tSSUBW2\n\tST1\n\tST2\n\tST3\n\tST4\n\tSTLR\n\tSTLRB\n\tSTLRH\n\tSTLXP\n\tSTLXR\n\tSTLXRB\n\tSTLXRH\n\tSTNP\n\tSTP\n\tSTR\n\tSTRB\n\tSTRH\n\tSTTR\n\tSTTRB\n\tSTTRH\n\tSTUR\n\tSTURB\n\tSTURH\n\tSTXP\n\tSTXR\n\tSTXRB\n\tSTXRH\n\tSUB\n\tSUBHN\n\tSUBHN2\n\tSUBS\n\tSUQADD\n\tSVC\n\tSXTB\n\tSXTH\n\tSXTL\n\tSXTL2\n\tSXTW\n\tSYS\n\tSYSL\n\tTBL\n\tTBNZ\n\tTBX\n\tTBZ\n\tTLBI\n\tTRN1\n\tTRN2\n\tTST\n\tUABA\n\tUABAL\n\tUABAL2\n\tUABD\n\tUABDL\n\tUABDL2\n\tUADALP\n\tUADDL\n\tUADDL2\n\tUADDLP\n\tUADDLV\n\tUADDW\n\tUADDW2\n\tUBFIZ\n\tUBFM\n\tUBFX\n\tUCVTF\n\tUDIV\n\tUHADD\n\tUHSUB\n\tUMADDL\n\tUMAX\n\tUMAXP\n\tUMAXV\n\tUMIN\n\tUMINP\n\tUMINV\n\tUMLAL\n\tUMLAL2\n\tUMLSL\n\tUMLSL2\n\tUMNEGL\n\tUMOV\n\tUMSUBL\n\tUMULH\n\tUMULL\n\tUMULL2\n\tUQADD\n\tUQRSHL\n\tUQRSHRN\n\tUQRSHRN2\n\tUQSHL\n\tUQSHRN\n\tUQSHRN2\n\tUQSUB\n\tUQXTN\n\tUQXTN2\n\tURECPE\n\tURHADD\n\tURSHL\n\tURSHR\n\tURSQRTE\n\tURSRA\n\tUSHL\n\tUSHLL\n\tUSHLL2\n\tUSHR\n\tUSQADD\n\tUSRA\n\tUSUBL\n\tUSUBL2\n\tUSUBW\n\tUSUBW2\n\tUXTB\n\tUXTH\n\tUXTL\n\tUXTL2\n\tUZP1\n\tUZP2\n\tWFE\n\tWFI\n\tXTN\n\tXTN2\n\tYIELD\n\tZIP1\n\tZIP2\n)\n\nvar opstr = [...]string{\n\tABS:       \"ABS\",\n\tADC:       \"ADC\",\n\tADCS:      \"ADCS\",\n\tADD:       \"ADD\",\n\tADDHN:     \"ADDHN\",\n\tADDHN2:    \"ADDHN2\",\n\tADDP:      \"ADDP\",\n\tADDS:      \"ADDS\",\n\tADDV:      \"ADDV\",\n\tADR:       \"ADR\",\n\tADRP:      \"ADRP\",\n\tAESD:      \"AESD\",\n\tAESE:      \"AESE\",\n\tAESIMC:    \"AESIMC\",\n\tAESMC:     \"AESMC\",\n\tAND:       \"AND\",\n\tANDS:      \"ANDS\",\n\tASR:       \"ASR\",\n\tASRV:      \"ASRV\",\n\tAT:        \"AT\",\n\tB:         \"B\",\n\tBFI:       \"BFI\",\n\tBFM:       \"BFM\",\n\tBFXIL:     \"BFXIL\",\n\tBIC:       \"BIC\",\n\tBICS:      \"BICS\",\n\tBIF:       \"BIF\",\n\tBIT:       \"BIT\",\n\tBL:        \"BL\",\n\tBLR:       \"BLR\",\n\tBR:        \"BR\",\n\tBRK:       \"BRK\",\n\tBSL:       \"BSL\",\n\tCBNZ:      \"CBNZ\",\n\tCBZ:       \"CBZ\",\n\tCCMN:      \"CCMN\",\n\tCCMP:      \"CCMP\",\n\tCINC:      \"CINC\",\n\tCINV:      \"CINV\",\n\tCLREX:     \"CLREX\",\n\tCLS:       \"CLS\",\n\tCLZ:       \"CLZ\",\n\tCMEQ:      \"CMEQ\",\n\tCMGE:      \"CMGE\",\n\tCMGT:      \"CMGT\",\n\tCMHI:      \"CMHI\",\n\tCMHS:      \"CMHS\",\n\tCMLE:      \"CMLE\",\n\tCMLT:      \"CMLT\",\n\tCMN:       \"CMN\",\n\tCMP:       \"CMP\",\n\tCMTST:     \"CMTST\",\n\tCNEG:      \"CNEG\",\n\tCNT:       \"CNT\",\n\tCRC32B:    \"CRC32B\",\n\tCRC32CB:   \"CRC32CB\",\n\tCRC32CH:   \"CRC32CH\",\n\tCRC32CW:   \"CRC32CW\",\n\tCRC32CX:   \"CRC32CX\",\n\tCRC32H:    \"CRC32H\",\n\tCRC32W:    \"CRC32W\",\n\tCRC32X:    \"CRC32X\",\n\tCSEL:      \"CSEL\",\n\tCSET:      \"CSET\",\n\tCSETM:     \"CSETM\",\n\tCSINC:     \"CSINC\",\n\tCSINV:     \"CSINV\",\n\tCSNEG:     \"CSNEG\",\n\tDC:        \"DC\",\n\tDCPS1:     \"DCPS1\",\n\tDCPS2:     \"DCPS2\",\n\tDCPS3:     \"DCPS3\",\n\tDMB:       \"DMB\",\n\tDRPS:      \"DRPS\",\n\tDSB:       \"DSB\",\n\tDUP:       \"DUP\",\n\tEON:       \"EON\",\n\tEOR:       \"EOR\",\n\tERET:      \"ERET\",\n\tEXT:       \"EXT\",\n\tEXTR:      \"EXTR\",\n\tFABD:      \"FABD\",\n\tFABS:      \"FABS\",\n\tFACGE:     \"FACGE\",\n\tFACGT:     \"FACGT\",\n\tFADD:      \"FADD\",\n\tFADDP:     \"FADDP\",\n\tFCCMP:     \"FCCMP\",\n\tFCCMPE:    \"FCCMPE\",\n\tFCMEQ:     \"FCMEQ\",\n\tFCMGE:     \"FCMGE\",\n\tFCMGT:     \"FCMGT\",\n\tFCMLE:     \"FCMLE\",\n\tFCMLT:     \"FCMLT\",\n\tFCMP:      \"FCMP\",\n\tFCMPE:     \"FCMPE\",\n\tFCSEL:     \"FCSEL\",\n\tFCVT:      \"FCVT\",\n\tFCVTAS:    \"FCVTAS\",\n\tFCVTAU:    \"FCVTAU\",\n\tFCVTL:     \"FCVTL\",\n\tFCVTL2:    \"FCVTL2\",\n\tFCVTMS:    \"FCVTMS\",\n\tFCVTMU:    \"FCVTMU\",\n\tFCVTN:     \"FCVTN\",\n\tFCVTN2:    \"FCVTN2\",\n\tFCVTNS:    \"FCVTNS\",\n\tFCVTNU:    \"FCVTNU\",\n\tFCVTPS:    \"FCVTPS\",\n\tFCVTPU:    \"FCVTPU\",\n\tFCVTXN:    \"FCVTXN\",\n\tFCVTXN2:   \"FCVTXN2\",\n\tFCVTZS:    \"FCVTZS\",\n\tFCVTZU:    \"FCVTZU\",\n\tFDIV:      \"FDIV\",\n\tFMADD:     \"FMADD\",\n\tFMAX:      \"FMAX\",\n\tFMAXNM:    \"FMAXNM\",\n\tFMAXNMP:   \"FMAXNMP\",\n\tFMAXNMV:   \"FMAXNMV\",\n\tFMAXP:     \"FMAXP\",\n\tFMAXV:     \"FMAXV\",\n\tFMIN:      \"FMIN\",\n\tFMINNM:    \"FMINNM\",\n\tFMINNMP:   \"FMINNMP\",\n\tFMINNMV:   \"FMINNMV\",\n\tFMINP:     \"FMINP\",\n\tFMINV:     \"FMINV\",\n\tFMLA:      \"FMLA\",\n\tFMLS:      \"FMLS\",\n\tFMOV:      \"FMOV\",\n\tFMSUB:     \"FMSUB\",\n\tFMUL:      \"FMUL\",\n\tFMULX:     \"FMULX\",\n\tFNEG:      \"FNEG\",\n\tFNMADD:    \"FNMADD\",\n\tFNMSUB:    \"FNMSUB\",\n\tFNMUL:     \"FNMUL\",\n\tFRECPE:    \"FRECPE\",\n\tFRECPS:    \"FRECPS\",\n\tFRECPX:    \"FRECPX\",\n\tFRINTA:    \"FRINTA\",\n\tFRINTI:    \"FRINTI\",\n\tFRINTM:    \"FRINTM\",\n\tFRINTN:    \"FRINTN\",\n\tFRINTP:    \"FRINTP\",\n\tFRINTX:    \"FRINTX\",\n\tFRINTZ:    \"FRINTZ\",\n\tFRSQRTE:   \"FRSQRTE\",\n\tFRSQRTS:   \"FRSQRTS\",\n\tFSQRT:     \"FSQRT\",\n\tFSUB:      \"FSUB\",\n\tHINT:      \"HINT\",\n\tHLT:       \"HLT\",\n\tHVC:       \"HVC\",\n\tIC:        \"IC\",\n\tINS:       \"INS\",\n\tISB:       \"ISB\",\n\tLD1:       \"LD1\",\n\tLD1R:      \"LD1R\",\n\tLD2:       \"LD2\",\n\tLD2R:      \"LD2R\",\n\tLD3:       \"LD3\",\n\tLD3R:      \"LD3R\",\n\tLD4:       \"LD4\",\n\tLD4R:      \"LD4R\",\n\tLDAR:      \"LDAR\",\n\tLDARB:     \"LDARB\",\n\tLDARH:     \"LDARH\",\n\tLDAXP:     \"LDAXP\",\n\tLDAXR:     \"LDAXR\",\n\tLDAXRB:    \"LDAXRB\",\n\tLDAXRH:    \"LDAXRH\",\n\tLDNP:      \"LDNP\",\n\tLDP:       \"LDP\",\n\tLDPSW:     \"LDPSW\",\n\tLDR:       \"LDR\",\n\tLDRB:      \"LDRB\",\n\tLDRH:      \"LDRH\",\n\tLDRSB:     \"LDRSB\",\n\tLDRSH:     \"LDRSH\",\n\tLDRSW:     \"LDRSW\",\n\tLDTR:      \"LDTR\",\n\tLDTRB:     \"LDTRB\",\n\tLDTRH:     \"LDTRH\",\n\tLDTRSB:    \"LDTRSB\",\n\tLDTRSH:    \"LDTRSH\",\n\tLDTRSW:    \"LDTRSW\",\n\tLDUR:      \"LDUR\",\n\tLDURB:     \"LDURB\",\n\tLDURH:     \"LDURH\",\n\tLDURSB:    \"LDURSB\",\n\tLDURSH:    \"LDURSH\",\n\tLDURSW:    \"LDURSW\",\n\tLDXP:      \"LDXP\",\n\tLDXR:      \"LDXR\",\n\tLDXRB:     \"LDXRB\",\n\tLDXRH:     \"LDXRH\",\n\tLSL:       \"LSL\",\n\tLSLV:      \"LSLV\",\n\tLSR:       \"LSR\",\n\tLSRV:      \"LSRV\",\n\tMADD:      \"MADD\",\n\tMLA:       \"MLA\",\n\tMLS:       \"MLS\",\n\tMNEG:      \"MNEG\",\n\tMOV:       \"MOV\",\n\tMOVI:      \"MOVI\",\n\tMOVK:      \"MOVK\",\n\tMOVN:      \"MOVN\",\n\tMOVZ:      \"MOVZ\",\n\tMRS:       \"MRS\",\n\tMSR:       \"MSR\",\n\tMSUB:      \"MSUB\",\n\tMUL:       \"MUL\",\n\tMVN:       \"MVN\",\n\tMVNI:      \"MVNI\",\n\tNEG:       \"NEG\",\n\tNEGS:      \"NEGS\",\n\tNGC:       \"NGC\",\n\tNGCS:      \"NGCS\",\n\tNOP:       \"NOP\",\n\tNOT:       \"NOT\",\n\tORN:       \"ORN\",\n\tORR:       \"ORR\",\n\tPMUL:      \"PMUL\",\n\tPMULL:     \"PMULL\",\n\tPMULL2:    \"PMULL2\",\n\tPRFM:      \"PRFM\",\n\tPRFUM:     \"PRFUM\",\n\tRADDHN:    \"RADDHN\",\n\tRADDHN2:   \"RADDHN2\",\n\tRBIT:      \"RBIT\",\n\tRET:       \"RET\",\n\tREV:       \"REV\",\n\tREV16:     \"REV16\",\n\tREV32:     \"REV32\",\n\tREV64:     \"REV64\",\n\tROR:       \"ROR\",\n\tRORV:      \"RORV\",\n\tRSHRN:     \"RSHRN\",\n\tRSHRN2:    \"RSHRN2\",\n\tRSUBHN:    \"RSUBHN\",\n\tRSUBHN2:   \"RSUBHN2\",\n\tSABA:      \"SABA\",\n\tSABAL:     \"SABAL\",\n\tSABAL2:    \"SABAL2\",\n\tSABD:      \"SABD\",\n\tSABDL:     \"SABDL\",\n\tSABDL2:    \"SABDL2\",\n\tSADALP:    \"SADALP\",\n\tSADDL:     \"SADDL\",\n\tSADDL2:    \"SADDL2\",\n\tSADDLP:    \"SADDLP\",\n\tSADDLV:    \"SADDLV\",\n\tSADDW:     \"SADDW\",\n\tSADDW2:    \"SADDW2\",\n\tSBC:       \"SBC\",\n\tSBCS:      \"SBCS\",\n\tSBFIZ:     \"SBFIZ\",\n\tSBFM:      \"SBFM\",\n\tSBFX:      \"SBFX\",\n\tSCVTF:     \"SCVTF\",\n\tSDIV:      \"SDIV\",\n\tSEV:       \"SEV\",\n\tSEVL:      \"SEVL\",\n\tSHA1C:     \"SHA1C\",\n\tSHA1H:     \"SHA1H\",\n\tSHA1M:     \"SHA1M\",\n\tSHA1P:     \"SHA1P\",\n\tSHA1SU0:   \"SHA1SU0\",\n\tSHA1SU1:   \"SHA1SU1\",\n\tSHA256H:   \"SHA256H\",\n\tSHA256H2:  \"SHA256H2\",\n\tSHA256SU0: \"SHA256SU0\",\n\tSHA256SU1: \"SHA256SU1\",\n\tSHADD:     \"SHADD\",\n\tSHL:       \"SHL\",\n\tSHLL:      \"SHLL\",\n\tSHLL2:     \"SHLL2\",\n\tSHRN:      \"SHRN\",\n\tSHRN2:     \"SHRN2\",\n\tSHSUB:     \"SHSUB\",\n\tSLI:       \"SLI\",\n\tSMADDL:    \"SMADDL\",\n\tSMAX:      \"SMAX\",\n\tSMAXP:     \"SMAXP\",\n\tSMAXV:     \"SMAXV\",\n\tSMC:       \"SMC\",\n\tSMIN:      \"SMIN\",\n\tSMINP:     \"SMINP\",\n\tSMINV:     \"SMINV\",\n\tSMLAL:     \"SMLAL\",\n\tSMLAL2:    \"SMLAL2\",\n\tSMLSL:     \"SMLSL\",\n\tSMLSL2:    \"SMLSL2\",\n\tSMNEGL:    \"SMNEGL\",\n\tSMOV:      \"SMOV\",\n\tSMSUBL:    \"SMSUBL\",\n\tSMULH:     \"SMULH\",\n\tSMULL:     \"SMULL\",\n\tSMULL2:    \"SMULL2\",\n\tSQABS:     \"SQABS\",\n\tSQADD:     \"SQADD\",\n\tSQDMLAL:   \"SQDMLAL\",\n\tSQDMLAL2:  \"SQDMLAL2\",\n\tSQDMLSL:   \"SQDMLSL\",\n\tSQDMLSL2:  \"SQDMLSL2\",\n\tSQDMULH:   \"SQDMULH\",\n\tSQDMULL:   \"SQDMULL\",\n\tSQDMULL2:  \"SQDMULL2\",\n\tSQNEG:     \"SQNEG\",\n\tSQRDMULH:  \"SQRDMULH\",\n\tSQRSHL:    \"SQRSHL\",\n\tSQRSHRN:   \"SQRSHRN\",\n\tSQRSHRN2:  \"SQRSHRN2\",\n\tSQRSHRUN:  \"SQRSHRUN\",\n\tSQRSHRUN2: \"SQRSHRUN2\",\n\tSQSHL:     \"SQSHL\",\n\tSQSHLU:    \"SQSHLU\",\n\tSQSHRN:    \"SQSHRN\",\n\tSQSHRN2:   \"SQSHRN2\",\n\tSQSHRUN:   \"SQSHRUN\",\n\tSQSHRUN2:  \"SQSHRUN2\",\n\tSQSUB:     \"SQSUB\",\n\tSQXTN:     \"SQXTN\",\n\tSQXTN2:    \"SQXTN2\",\n\tSQXTUN:    \"SQXTUN\",\n\tSQXTUN2:   \"SQXTUN2\",\n\tSRHADD:    \"SRHADD\",\n\tSRI:       \"SRI\",\n\tSRSHL:     \"SRSHL\",\n\tSRSHR:     \"SRSHR\",\n\tSRSRA:     \"SRSRA\",\n\tSSHL:      \"SSHL\",\n\tSSHLL:     \"SSHLL\",\n\tSSHLL2:    \"SSHLL2\",\n\tSSHR:      \"SSHR\",\n\tSSRA:      \"SSRA\",\n\tSSUBL:     \"SSUBL\",\n\tSSUBL2:    \"SSUBL2\",\n\tSSUBW:     \"SSUBW\",\n\tSSUBW2:    \"SSUBW2\",\n\tST1:       \"ST1\",\n\tST2:       \"ST2\",\n\tST3:       \"ST3\",\n\tST4:       \"ST4\",\n\tSTLR:      \"STLR\",\n\tSTLRB:     \"STLRB\",\n\tSTLRH:     \"STLRH\",\n\tSTLXP:     \"STLXP\",\n\tSTLXR:     \"STLXR\",\n\tSTLXRB:    \"STLXRB\",\n\tSTLXRH:    \"STLXRH\",\n\tSTNP:      \"STNP\",\n\tSTP:       \"STP\",\n\tSTR:       \"STR\",\n\tSTRB:      \"STRB\",\n\tSTRH:      \"STRH\",\n\tSTTR:      \"STTR\",\n\tSTTRB:     \"STTRB\",\n\tSTTRH:     \"STTRH\",\n\tSTUR:      \"STUR\",\n\tSTURB:     \"STURB\",\n\tSTURH:     \"STURH\",\n\tSTXP:      \"STXP\",\n\tSTXR:      \"STXR\",\n\tSTXRB:     \"STXRB\",\n\tSTXRH:     \"STXRH\",\n\tSUB:       \"SUB\",\n\tSUBHN:     \"SUBHN\",\n\tSUBHN2:    \"SUBHN2\",\n\tSUBS:      \"SUBS\",\n\tSUQADD:    \"SUQADD\",\n\tSVC:       \"SVC\",\n\tSXTB:      \"SXTB\",\n\tSXTH:      \"SXTH\",\n\tSXTL:      \"SXTL\",\n\tSXTL2:     \"SXTL2\",\n\tSXTW:      \"SXTW\",\n\tSYS:       \"SYS\",\n\tSYSL:      \"SYSL\",\n\tTBL:       \"TBL\",\n\tTBNZ:      \"TBNZ\",\n\tTBX:       \"TBX\",\n\tTBZ:       \"TBZ\",\n\tTLBI:      \"TLBI\",\n\tTRN1:      \"TRN1\",\n\tTRN2:      \"TRN2\",\n\tTST:       \"TST\",\n\tUABA:      \"UABA\",\n\tUABAL:     \"UABAL\",\n\tUABAL2:    \"UABAL2\",\n\tUABD:      \"UABD\",\n\tUABDL:     \"UABDL\",\n\tUABDL2:    \"UABDL2\",\n\tUADALP:    \"UADALP\",\n\tUADDL:     \"UADDL\",\n\tUADDL2:    \"UADDL2\",\n\tUADDLP:    \"UADDLP\",\n\tUADDLV:    \"UADDLV\",\n\tUADDW:     \"UADDW\",\n\tUADDW2:    \"UADDW2\",\n\tUBFIZ:     \"UBFIZ\",\n\tUBFM:      \"UBFM\",\n\tUBFX:      \"UBFX\",\n\tUCVTF:     \"UCVTF\",\n\tUDIV:      \"UDIV\",\n\tUHADD:     \"UHADD\",\n\tUHSUB:     \"UHSUB\",\n\tUMADDL:    \"UMADDL\",\n\tUMAX:      \"UMAX\",\n\tUMAXP:     \"UMAXP\",\n\tUMAXV:     \"UMAXV\",\n\tUMIN:      \"UMIN\",\n\tUMINP:     \"UMINP\",\n\tUMINV:     \"UMINV\",\n\tUMLAL:     \"UMLAL\",\n\tUMLAL2:    \"UMLAL2\",\n\tUMLSL:     \"UMLSL\",\n\tUMLSL2:    \"UMLSL2\",\n\tUMNEGL:    \"UMNEGL\",\n\tUMOV:      \"UMOV\",\n\tUMSUBL:    \"UMSUBL\",\n\tUMULH:     \"UMULH\",\n\tUMULL:     \"UMULL\",\n\tUMULL2:    \"UMULL2\",\n\tUQADD:     \"UQADD\",\n\tUQRSHL:    \"UQRSHL\",\n\tUQRSHRN:   \"UQRSHRN\",\n\tUQRSHRN2:  \"UQRSHRN2\",\n\tUQSHL:     \"UQSHL\",\n\tUQSHRN:    \"UQSHRN\",\n\tUQSHRN2:   \"UQSHRN2\",\n\tUQSUB:     \"UQSUB\",\n\tUQXTN:     \"UQXTN\",\n\tUQXTN2:    \"UQXTN2\",\n\tURECPE:    \"URECPE\",\n\tURHADD:    \"URHADD\",\n\tURSHL:     \"URSHL\",\n\tURSHR:     \"URSHR\",\n\tURSQRTE:   \"URSQRTE\",\n\tURSRA:     \"URSRA\",\n\tUSHL:      \"USHL\",\n\tUSHLL:     \"USHLL\",\n\tUSHLL2:    \"USHLL2\",\n\tUSHR:      \"USHR\",\n\tUSQADD:    \"USQADD\",\n\tUSRA:      \"USRA\",\n\tUSUBL:     \"USUBL\",\n\tUSUBL2:    \"USUBL2\",\n\tUSUBW:     \"USUBW\",\n\tUSUBW2:    \"USUBW2\",\n\tUXTB:      \"UXTB\",\n\tUXTH:      \"UXTH\",\n\tUXTL:      \"UXTL\",\n\tUXTL2:     \"UXTL2\",\n\tUZP1:      \"UZP1\",\n\tUZP2:      \"UZP2\",\n\tWFE:       \"WFE\",\n\tWFI:       \"WFI\",\n\tXTN:       \"XTN\",\n\tXTN2:      \"XTN2\",\n\tYIELD:     \"YIELD\",\n\tZIP1:      \"ZIP1\",\n\tZIP2:      \"ZIP2\",\n}\n\nvar instFormats = [...]instFormat{\n\t// ADC <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1a000000, ADC, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// ADC <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9a000000, ADC, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// ADCS <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x3a000000, ADCS, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// ADCS <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0xba000000, ADCS, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// ADD <Wd|WSP>, <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\n\t{0xffe00000, 0x0b200000, ADD, instArgs{arg_Wds, arg_Wns, arg_Wm_extend__UXTB_0__UXTH_1__LSL_UXTW_2__UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// ADD <Xd|SP>, <Xn|SP>, <R><m>{, <extend_1> {#<amount>}}\n\t{0xffe00000, 0x8b200000, ADD, instArgs{arg_Xds, arg_Xns, arg_Rm_extend__UXTB_0__UXTH_1__UXTW_2__LSL_UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// MOV <Wd|WSP>, <Wn|WSP>\n\t{0xfffffc00, 0x11000000, MOV, instArgs{arg_Wds, arg_Wns}, mov_add_32_addsub_imm_cond},\n\t// ADD <Wd|WSP>, <Wn|WSP>, #<imm>{, <shift>}\n\t{0xff000000, 0x11000000, ADD, instArgs{arg_Wds, arg_Wns, arg_IAddSub}, nil},\n\t// MOV <Xd|SP>, <Xn|SP>\n\t{0xfffffc00, 0x91000000, MOV, instArgs{arg_Xds, arg_Xns}, mov_add_64_addsub_imm_cond},\n\t// ADD <Xd|SP>, <Xn|SP>, #<imm>{, <shift>}\n\t{0xff000000, 0x91000000, ADD, instArgs{arg_Xds, arg_Xns, arg_IAddSub}, nil},\n\t// ADD <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x0b000000, ADD, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31}, nil},\n\t// ADD <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0x8b000000, ADD, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__0_63}, nil},\n\t// CMN <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\n\t{0xffe0001f, 0x2b20001f, CMN, instArgs{arg_Wns, arg_Wm_extend__UXTB_0__UXTH_1__LSL_UXTW_2__UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// ADDS <Wd>, <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\n\t{0xffe00000, 0x2b200000, ADDS, instArgs{arg_Wd, arg_Wns, arg_Wm_extend__UXTB_0__UXTH_1__LSL_UXTW_2__UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// CMN <Xn|SP>, <R><m>{, <extend_1> {#<amount>}}\n\t{0xffe0001f, 0xab20001f, CMN, instArgs{arg_Xns, arg_Rm_extend__UXTB_0__UXTH_1__UXTW_2__LSL_UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// ADDS <Xd>, <Xn|SP>, <R><m>{, <extend_1> {#<amount>}}\n\t{0xffe00000, 0xab200000, ADDS, instArgs{arg_Xd, arg_Xns, arg_Rm_extend__UXTB_0__UXTH_1__UXTW_2__LSL_UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// CMN <Wn|WSP>, #<imm>{, <shift>}\n\t{0xff00001f, 0x3100001f, CMN, instArgs{arg_Wns, arg_IAddSub}, nil},\n\t// ADDS <Wd>, <Wn|WSP>, #<imm>{, <shift>}\n\t{0xff000000, 0x31000000, ADDS, instArgs{arg_Wd, arg_Wns, arg_IAddSub}, nil},\n\t// CMN <Xn|SP>, #<imm>{, <shift>}\n\t{0xff00001f, 0xb100001f, CMN, instArgs{arg_Xns, arg_IAddSub}, nil},\n\t// ADDS <Xd>, <Xn|SP>, #<imm>{, <shift>}\n\t{0xff000000, 0xb1000000, ADDS, instArgs{arg_Xd, arg_Xns, arg_IAddSub}, nil},\n\t// CMN <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff20801f, 0x2b00001f, CMN, instArgs{arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31}, nil},\n\t// ADDS <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x2b000000, ADDS, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31}, nil},\n\t// CMN <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff20001f, 0xab00001f, CMN, instArgs{arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__0_63}, nil},\n\t// ADDS <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0xab000000, ADDS, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__0_63}, nil},\n\t// ADR <Xd>, <label>\n\t{0x9f000000, 0x10000000, ADR, instArgs{arg_Xd, arg_slabel_immhi_immlo_0}, nil},\n\t// ADRP <Xd>, <label>\n\t{0x9f000000, 0x90000000, ADRP, instArgs{arg_Xd, arg_slabel_immhi_immlo_12}, nil},\n\t// AND <Wd|WSP>, <Wn>, #<imm>\n\t{0xffc00000, 0x12000000, AND, instArgs{arg_Wds, arg_Wn, arg_immediate_bitmask_32_imms_immr}, nil},\n\t// AND <Xd|SP>, <Xn>, #<imm>\n\t{0xff800000, 0x92000000, AND, instArgs{arg_Xds, arg_Xn, arg_immediate_bitmask_64_N_imms_immr}, nil},\n\t// AND <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x0a000000, AND, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// AND <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0x8a000000, AND, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// TST <Wn>, #<imm>\n\t{0xffc0001f, 0x7200001f, TST, instArgs{arg_Wn, arg_immediate_bitmask_32_imms_immr}, nil},\n\t// ANDS <Wd>, <Wn>, #<imm>\n\t{0xffc00000, 0x72000000, ANDS, instArgs{arg_Wd, arg_Wn, arg_immediate_bitmask_32_imms_immr}, nil},\n\t// TST <Xn>, #<imm>\n\t{0xff80001f, 0xf200001f, TST, instArgs{arg_Xn, arg_immediate_bitmask_64_N_imms_immr}, nil},\n\t// ANDS <Xd>, <Xn>, #<imm>\n\t{0xff800000, 0xf2000000, ANDS, instArgs{arg_Xd, arg_Xn, arg_immediate_bitmask_64_N_imms_immr}, nil},\n\t// TST <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff20801f, 0x6a00001f, TST, instArgs{arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// ANDS <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x6a000000, ANDS, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// TST <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff20001f, 0xea00001f, TST, instArgs{arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// ANDS <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0xea000000, ANDS, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// ASR <Wd>, <Wn>, #<shift>\n\t{0xffc0fc00, 0x13007c00, ASR, instArgs{arg_Wd, arg_Wn, arg_immediate_ASR_SBFM_32M_bitfield_0_31_immr}, nil},\n\t// SBFIZ <Wd>, <Wn>, #<lsb>, #<width>\n\t{0xffc00000, 0x13000000, SBFIZ, instArgs{arg_Wd, arg_Wn, arg_immediate_SBFIZ_SBFM_32M_bitfield_lsb_32_immr, arg_immediate_SBFIZ_SBFM_32M_bitfield_width_32_imms}, sbfiz_sbfm_32m_bitfield_cond},\n\t// SBFX <Wd>, <Wn>, #<lsb>, #<width>\n\t{0xffc00000, 0x13000000, SBFX, instArgs{arg_Wd, arg_Wn, arg_immediate_SBFX_SBFM_32M_bitfield_lsb_32_immr, arg_immediate_SBFX_SBFM_32M_bitfield_width_32_imms}, sbfx_sbfm_32m_bitfield_cond},\n\t// SXTB <Wd>, <Wn>\n\t{0xfffffc00, 0x13001c00, SXTB, instArgs{arg_Wd, arg_Wn}, nil},\n\t// SXTH <Wd>, <Wn>\n\t{0xfffffc00, 0x13003c00, SXTH, instArgs{arg_Wd, arg_Wn}, nil},\n\t// SBFM <Wd>, <Wn>, #<immr>, #<imms>\n\t{0xffc00000, 0x13000000, SBFM, instArgs{arg_Wd, arg_Wn, arg_immediate_0_31_immr, arg_immediate_0_31_imms}, nil},\n\t// ASR <Xd>, <Xn>, #<shift>\n\t{0xffc0fc00, 0x9340fc00, ASR, instArgs{arg_Xd, arg_Xn, arg_immediate_ASR_SBFM_64M_bitfield_0_63_immr}, nil},\n\t// SBFIZ <Xd>, <Xn>, #<lsb>, #<width>\n\t{0xffc00000, 0x93400000, SBFIZ, instArgs{arg_Xd, arg_Xn, arg_immediate_SBFIZ_SBFM_64M_bitfield_lsb_64_immr, arg_immediate_SBFIZ_SBFM_64M_bitfield_width_64_imms}, sbfiz_sbfm_64m_bitfield_cond},\n\t// SBFX <Xd>, <Xn>, #<lsb>, #<width>\n\t{0xffc00000, 0x93400000, SBFX, instArgs{arg_Xd, arg_Xn, arg_immediate_SBFX_SBFM_64M_bitfield_lsb_64_immr, arg_immediate_SBFX_SBFM_64M_bitfield_width_64_imms}, sbfx_sbfm_64m_bitfield_cond},\n\t// SXTB <Xd>, <Wn>\n\t{0xfffffc00, 0x93401c00, SXTB, instArgs{arg_Xd, arg_Wn}, nil},\n\t// SXTH <Xd>, <Wn>\n\t{0xfffffc00, 0x93403c00, SXTH, instArgs{arg_Xd, arg_Wn}, nil},\n\t// SXTW <Xd>, <Wn>\n\t{0xfffffc00, 0x93407c00, SXTW, instArgs{arg_Xd, arg_Wn}, nil},\n\t// SBFM <Xd>, <Xn>, #<immr>, #<imms>\n\t{0xffc00000, 0x93400000, SBFM, instArgs{arg_Xd, arg_Xn, arg_immediate_0_63_immr, arg_immediate_0_63_imms}, nil},\n\t// ASR <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac02800, ASR, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// ASRV <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac02800, ASRV, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// ASR <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac02800, ASR, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// ASRV <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac02800, ASRV, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// AT <at>, <Xt>\n\t{0xfff8ff00, 0xd5087800, AT, instArgs{arg_sysop_AT_SYS_CR_system}, at_sys_cr_system_cond},\n\t// DC <dc>, <Xt>\n\t{0xfff8f000, 0xd5087000, DC, instArgs{arg_sysop_DC_SYS_CR_system}, dc_sys_cr_system_cond},\n\t// IC <ic>, {<Xt>}\n\t{0xfff8f000, 0xd5087000, IC, instArgs{arg_sysop_IC_SYS_CR_system}, ic_sys_cr_system_cond},\n\t// TLBI <tlbi>, {<Xt>}\n\t{0xfff8f000, 0xd5088000, TLBI, instArgs{arg_sysop_TLBI_SYS_CR_system}, tlbi_sys_cr_system_cond},\n\t// SYS #<op1>, <Cn>, <Cm>, <op>, {<Xt>}\n\t{0xfff80000, 0xd5080000, SYS, instArgs{arg_immediate_0_7_op1, arg_Cn, arg_Cm, arg_sysop_SYS_CR_system}, nil},\n\t// B <label>\n\t{0xfc000000, 0x14000000, B, instArgs{arg_slabel_imm26_2}, nil},\n\t// B<c> <label>\n\t{0xff000010, 0x54000000, B, instArgs{arg_conditional, arg_slabel_imm19_2}, nil},\n\t// BFI <Wd>, <Wn>, #<lsb>, #<width>\n\t{0xffc00000, 0x33000000, BFI, instArgs{arg_Wd, arg_Wn, arg_immediate_BFI_BFM_32M_bitfield_lsb_32_immr, arg_immediate_BFI_BFM_32M_bitfield_width_32_imms}, bfi_bfm_32m_bitfield_cond},\n\t// BFXIL <Wd>, <Wn>, #<lsb>, #<width>\n\t{0xffc00000, 0x33000000, BFXIL, instArgs{arg_Wd, arg_Wn, arg_immediate_BFXIL_BFM_32M_bitfield_lsb_32_immr, arg_immediate_BFXIL_BFM_32M_bitfield_width_32_imms}, bfxil_bfm_32m_bitfield_cond},\n\t// BFM <Wd>, <Wn>, #<immr>, #<imms>\n\t{0xffc00000, 0x33000000, BFM, instArgs{arg_Wd, arg_Wn, arg_immediate_0_31_immr, arg_immediate_0_31_imms}, nil},\n\t// BFI <Xd>, <Xn>, #<lsb>, #<width>\n\t{0xffc00000, 0xb3400000, BFI, instArgs{arg_Xd, arg_Xn, arg_immediate_BFI_BFM_64M_bitfield_lsb_64_immr, arg_immediate_BFI_BFM_64M_bitfield_width_64_imms}, bfi_bfm_64m_bitfield_cond},\n\t// BFXIL <Xd>, <Xn>, #<lsb>, #<width>\n\t{0xffc00000, 0xb3400000, BFXIL, instArgs{arg_Xd, arg_Xn, arg_immediate_BFXIL_BFM_64M_bitfield_lsb_64_immr, arg_immediate_BFXIL_BFM_64M_bitfield_width_64_imms}, bfxil_bfm_64m_bitfield_cond},\n\t// BFM <Xd>, <Xn>, #<immr>, #<imms>\n\t{0xffc00000, 0xb3400000, BFM, instArgs{arg_Xd, arg_Xn, arg_immediate_0_63_immr, arg_immediate_0_63_imms}, nil},\n\t// BIC <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x0a200000, BIC, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// BIC <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0x8a200000, BIC, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// BICS <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x6a200000, BICS, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// BICS <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0xea200000, BICS, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// BL <label>\n\t{0xfc000000, 0x94000000, BL, instArgs{arg_slabel_imm26_2}, nil},\n\t// BLR <Xn>\n\t{0xfffffc1f, 0xd63f0000, BLR, instArgs{arg_Xn}, nil},\n\t// BR <Xn>\n\t{0xfffffc1f, 0xd61f0000, BR, instArgs{arg_Xn}, nil},\n\t// BRK #<imm>\n\t{0xffe0001f, 0xd4200000, BRK, instArgs{arg_immediate_0_65535_imm16}, nil},\n\t// CBNZ <Wt>, <label>\n\t{0xff000000, 0x35000000, CBNZ, instArgs{arg_Wt, arg_slabel_imm19_2}, nil},\n\t// CBNZ <Xt>, <label>\n\t{0xff000000, 0xb5000000, CBNZ, instArgs{arg_Xt, arg_slabel_imm19_2}, nil},\n\t// CBZ <Wt>, <label>\n\t{0xff000000, 0x34000000, CBZ, instArgs{arg_Wt, arg_slabel_imm19_2}, nil},\n\t// CBZ <Xt>, <label>\n\t{0xff000000, 0xb4000000, CBZ, instArgs{arg_Xt, arg_slabel_imm19_2}, nil},\n\t// CCMN <Wn>, #<imm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0x3a400800, CCMN, instArgs{arg_Wn, arg_immediate_0_31_imm5, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// CCMN <Xn>, #<imm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0xba400800, CCMN, instArgs{arg_Xn, arg_immediate_0_31_imm5, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// CCMN <Wn>, <Wm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0x3a400000, CCMN, instArgs{arg_Wn, arg_Wm, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// CCMN <Xn>, <Xm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0xba400000, CCMN, instArgs{arg_Xn, arg_Xm, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// CCMP <Wn>, #<imm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0x7a400800, CCMP, instArgs{arg_Wn, arg_immediate_0_31_imm5, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// CCMP <Xn>, #<imm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0xfa400800, CCMP, instArgs{arg_Xn, arg_immediate_0_31_imm5, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// CCMP <Wn>, <Wm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0x7a400000, CCMP, instArgs{arg_Wn, arg_Wm, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// CCMP <Xn>, <Xm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0xfa400000, CCMP, instArgs{arg_Xn, arg_Xm, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// CINC <Wd>, <Wn>, <cond>\n\t{0xffe00c00, 0x1a800400, CINC, instArgs{arg_Wd, arg_Wn, arg_cond_NotAllowALNV_Invert}, cinc_csinc_32_condsel_cond},\n\t// CSET <Wd>, <cond>\n\t{0xffff0fe0, 0x1a9f07e0, CSET, instArgs{arg_Wd, arg_cond_NotAllowALNV_Invert}, csinc_general_cond},\n\t// CSINC <Wd>, <Wn>, <Wm>, <cond>\n\t{0xffe00c00, 0x1a800400, CSINC, instArgs{arg_Wd, arg_Wn, arg_Wm, arg_cond_AllowALNV_Normal}, nil},\n\t// CINC <Xd>, <Xn>, <cond>\n\t{0xffe00c00, 0x9a800400, CINC, instArgs{arg_Xd, arg_Xn, arg_cond_NotAllowALNV_Invert}, cinc_csinc_64_condsel_cond},\n\t// CSET <Xd>, <cond>\n\t{0xffff0fe0, 0x9a9f07e0, CSET, instArgs{arg_Xd, arg_cond_NotAllowALNV_Invert}, csinc_general_cond},\n\t// CSINC <Xd>, <Xn>, <Xm>, <cond>\n\t{0xffe00c00, 0x9a800400, CSINC, instArgs{arg_Xd, arg_Xn, arg_Xm, arg_cond_AllowALNV_Normal}, nil},\n\t// CINV <Wd>, <Wn>, <cond>\n\t{0xffe00c00, 0x5a800000, CINV, instArgs{arg_Wd, arg_Wn, arg_cond_NotAllowALNV_Invert}, cinv_csinv_32_condsel_cond},\n\t// CSETM <Wd>, <cond>\n\t{0xffff0fe0, 0x5a9f03e0, CSETM, instArgs{arg_Wd, arg_cond_NotAllowALNV_Invert}, csinv_general_cond},\n\t// CSINV <Wd>, <Wn>, <Wm>, <cond>\n\t{0xffe00c00, 0x5a800000, CSINV, instArgs{arg_Wd, arg_Wn, arg_Wm, arg_cond_AllowALNV_Normal}, nil},\n\t// CINV <Xd>, <Xn>, <cond>\n\t{0xffe00c00, 0xda800000, CINV, instArgs{arg_Xd, arg_Xn, arg_cond_NotAllowALNV_Invert}, cinv_csinv_64_condsel_cond},\n\t// CSETM <Xd>, <cond>\n\t{0xffff0fe0, 0xda9f03e0, CSETM, instArgs{arg_Xd, arg_cond_NotAllowALNV_Invert}, csinv_general_cond},\n\t// CSINV <Xd>, <Xn>, <Xm>, <cond>\n\t{0xffe00c00, 0xda800000, CSINV, instArgs{arg_Xd, arg_Xn, arg_Xm, arg_cond_AllowALNV_Normal}, nil},\n\t// CLREX {#<imm>}\n\t{0xfffff0ff, 0xd503305f, CLREX, instArgs{arg_immediate_optional_0_15_CRm}, nil},\n\t// CLS <Wd>, <Wn>\n\t{0xfffffc00, 0x5ac01400, CLS, instArgs{arg_Wd, arg_Wn}, nil},\n\t// CLS <Xd>, <Xn>\n\t{0xfffffc00, 0xdac01400, CLS, instArgs{arg_Xd, arg_Xn}, nil},\n\t// CLZ <Wd>, <Wn>\n\t{0xfffffc00, 0x5ac01000, CLZ, instArgs{arg_Wd, arg_Wn}, nil},\n\t// CLZ <Xd>, <Xn>\n\t{0xfffffc00, 0xdac01000, CLZ, instArgs{arg_Xd, arg_Xn}, nil},\n\t// CMP <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\n\t{0xffe0001f, 0x6b20001f, CMP, instArgs{arg_Wns, arg_Wm_extend__UXTB_0__UXTH_1__LSL_UXTW_2__UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// SUBS <Wd>, <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\n\t{0xffe00000, 0x6b200000, SUBS, instArgs{arg_Wd, arg_Wns, arg_Wm_extend__UXTB_0__UXTH_1__LSL_UXTW_2__UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// CMP <Xn|SP>, <R><m>{, <extend_1> {#<amount>}}\n\t{0xffe0001f, 0xeb20001f, CMP, instArgs{arg_Xns, arg_Rm_extend__UXTB_0__UXTH_1__UXTW_2__LSL_UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// SUBS <Xd>, <Xn|SP>, <R><m>{, <extend_1> {#<amount>}}\n\t{0xffe00000, 0xeb200000, SUBS, instArgs{arg_Xd, arg_Xns, arg_Rm_extend__UXTB_0__UXTH_1__UXTW_2__LSL_UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// CMP <Wn|WSP>, #<imm>{, <shift>}\n\t{0xff00001f, 0x7100001f, CMP, instArgs{arg_Wns, arg_IAddSub}, nil},\n\t// SUBS <Wd>, <Wn|WSP>, #<imm>{, <shift>}\n\t{0xff000000, 0x71000000, SUBS, instArgs{arg_Wd, arg_Wns, arg_IAddSub}, nil},\n\t// CMP <Xn|SP>, #<imm>{, <shift>}\n\t{0xff00001f, 0xf100001f, CMP, instArgs{arg_Xns, arg_IAddSub}, nil},\n\t// SUBS <Xd>, <Xn|SP>, #<imm>{, <shift>}\n\t{0xff000000, 0xf1000000, SUBS, instArgs{arg_Xd, arg_Xns, arg_IAddSub}, nil},\n\t// CMP <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff20801f, 0x6b00001f, CMP, instArgs{arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31}, nil},\n\t// NEGS <Wd>, <Wm> {, <shift> #<amount> }\n\t{0xff2003e0, 0x6b0003e0, NEGS, instArgs{arg_Wd, arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31}, nil},\n\t// SUBS <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x6b000000, SUBS, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31}, nil},\n\t// CMP <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff20001f, 0xeb00001f, CMP, instArgs{arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__0_63}, nil},\n\t// NEGS <Xd>, <Xm> {, <shift> #<amount> }\n\t{0xff2003e0, 0xeb0003e0, NEGS, instArgs{arg_Xd, arg_Xm_shift__LSL_0__LSR_1__ASR_2__0_63}, nil},\n\t// SUBS <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0xeb000000, SUBS, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__0_63}, nil},\n\t// CNEG <Wd>, <Wn>, <cond>\n\t{0xffe00c00, 0x5a800400, CNEG, instArgs{arg_Wd, arg_Wn, arg_cond_NotAllowALNV_Invert}, cneg_csneg_32_condsel_cond},\n\t// CSNEG <Wd>, <Wn>, <Wm>, <cond>\n\t{0xffe00c00, 0x5a800400, CSNEG, instArgs{arg_Wd, arg_Wn, arg_Wm, arg_cond_AllowALNV_Normal}, nil},\n\t// CNEG <Xd>, <Xn>, <cond>\n\t{0xffe00c00, 0xda800400, CNEG, instArgs{arg_Xd, arg_Xn, arg_cond_NotAllowALNV_Invert}, cneg_csneg_64_condsel_cond},\n\t// CSNEG <Xd>, <Xn>, <Xm>, <cond>\n\t{0xffe00c00, 0xda800400, CSNEG, instArgs{arg_Xd, arg_Xn, arg_Xm, arg_cond_AllowALNV_Normal}, nil},\n\t// CRC32B <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac04000, CRC32B, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// CRC32H <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac04400, CRC32H, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// CRC32W <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac04800, CRC32W, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// CRC32X <Wd>, <Wn>, <Xm>\n\t{0xffe0fc00, 0x9ac04c00, CRC32X, instArgs{arg_Wd, arg_Wn, arg_Xm}, nil},\n\t// CRC32CB <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac05000, CRC32CB, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// CRC32CH <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac05400, CRC32CH, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// CRC32CW <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac05800, CRC32CW, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// CRC32CX <Wd>, <Wn>, <Xm>\n\t{0xffe0fc00, 0x9ac05c00, CRC32CX, instArgs{arg_Wd, arg_Wn, arg_Xm}, nil},\n\t// CSEL <Wd>, <Wn>, <Wm>, <cond>\n\t{0xffe00c00, 0x1a800000, CSEL, instArgs{arg_Wd, arg_Wn, arg_Wm, arg_cond_AllowALNV_Normal}, nil},\n\t// CSEL <Xd>, <Xn>, <Xm>, <cond>\n\t{0xffe00c00, 0x9a800000, CSEL, instArgs{arg_Xd, arg_Xn, arg_Xm, arg_cond_AllowALNV_Normal}, nil},\n\t// DCPS1 {#<imm>}\n\t{0xffe0001f, 0xd4a00001, DCPS1, instArgs{arg_immediate_optional_0_65535_imm16}, nil},\n\t// DCPS2 {#<imm>}\n\t{0xffe0001f, 0xd4a00002, DCPS2, instArgs{arg_immediate_optional_0_65535_imm16}, nil},\n\t// DCPS3 {#<imm>}\n\t{0xffe0001f, 0xd4a00003, DCPS3, instArgs{arg_immediate_optional_0_65535_imm16}, nil},\n\t// DMB <option>|<imm>\n\t{0xfffff0ff, 0xd50330bf, DMB, instArgs{arg_option_DMB_BO_system_CRm}, nil},\n\t// DRPS\n\t{0xffffffff, 0xd6bf03e0, DRPS, instArgs{}, nil},\n\t// DSB <option>|<imm>\n\t{0xfffff0ff, 0xd503309f, DSB, instArgs{arg_option_DSB_BO_system_CRm}, nil},\n\t// EON <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x4a200000, EON, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// EON <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0xca200000, EON, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// EOR <Wd|WSP>, <Wn>, #<imm>\n\t{0xffc00000, 0x52000000, EOR, instArgs{arg_Wds, arg_Wn, arg_immediate_bitmask_32_imms_immr}, nil},\n\t// EOR <Xd|SP>, <Xn>, #<imm>\n\t{0xff800000, 0xd2000000, EOR, instArgs{arg_Xds, arg_Xn, arg_immediate_bitmask_64_N_imms_immr}, nil},\n\t// EOR <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x4a000000, EOR, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// EOR <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0xca000000, EOR, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// ERET\n\t{0xffffffff, 0xd69f03e0, ERET, instArgs{}, nil},\n\t// ROR <Wd>, <Ws>, #<shift>\n\t{0xffe08000, 0x13800000, ROR, instArgs{arg_Wd, arg_Ws, arg_immediate_0_31_imms}, ror_extr_32_extract_cond},\n\t// EXTR <Wd>, <Wn>, <Wm>, #<lsb>\n\t{0xffe08000, 0x13800000, EXTR, instArgs{arg_Wd, arg_Wn, arg_Wm, arg_immediate_0_31_imms}, nil},\n\t// ROR <Xd>, <Xs>, #<shift>\n\t{0xffe00000, 0x93c00000, ROR, instArgs{arg_Xd, arg_Xs, arg_immediate_0_63_imms}, ror_extr_64_extract_cond},\n\t// EXTR <Xd>, <Xn>, <Xm>, #<lsb>\n\t{0xffe00000, 0x93c00000, EXTR, instArgs{arg_Xd, arg_Xn, arg_Xm, arg_immediate_0_63_imms}, nil},\n\t// NOP\n\t{0xffffffff, 0xd503201f, NOP, instArgs{}, nil},\n\t// SEV\n\t{0xffffffff, 0xd503209f, SEV, instArgs{}, nil},\n\t// SEVL\n\t{0xffffffff, 0xd50320bf, SEVL, instArgs{}, nil},\n\t// WFE\n\t{0xffffffff, 0xd503205f, WFE, instArgs{}, nil},\n\t// WFI\n\t{0xffffffff, 0xd503207f, WFI, instArgs{}, nil},\n\t// YIELD\n\t{0xffffffff, 0xd503203f, YIELD, instArgs{}, nil},\n\t// HINT #<imm>\n\t{0xfffff01f, 0xd503201f, HINT, instArgs{arg_immediate_0_127_CRm_op2}, nil},\n\t// HLT #<imm>\n\t{0xffe0001f, 0xd4400000, HLT, instArgs{arg_immediate_0_65535_imm16}, nil},\n\t// ISB {<option>|<imm>}\n\t{0xfffff0ff, 0xd50330df, ISB, instArgs{arg_option_ISB_BI_system_CRm}, nil},\n\t// LDAR <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88c08000, LDAR, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// LDAR <Xt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8c08000, LDAR, instArgs{arg_Xt, arg_Xns_mem}, nil},\n\t// LDARB <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x08c08000, LDARB, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// LDARH <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x48c08000, LDARH, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// LDAXP <Wt>, <Wt2>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88608000, LDAXP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem}, nil},\n\t// LDAXP <Xt>, <Xt2>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8608000, LDAXP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem}, nil},\n\t// LDAXR <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88408000, LDAXR, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// LDAXR <Xt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8408000, LDAXR, instArgs{arg_Xt, arg_Xns_mem}, nil},\n\t// LDAXRB <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x08408000, LDAXRB, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// LDAXRH <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x48408000, LDAXRH, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// LDNP <Wt>, <Wt2>, [<Xn|SP>{, #<imm>}]\n\t{0xffc00000, 0x28400000, LDNP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem_optional_imm7_4_signed}, nil},\n\t// LDNP <Xt>, <Xt2>, [<Xn|SP>{, #<imm_1>}]\n\t{0xffc00000, 0xa8400000, LDNP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_optional_imm7_8_signed}, nil},\n\t// LDP <Wt>, <Wt2>, [<Xn|SP>], #<imm_1>\n\t{0xffc00000, 0x28c00000, LDP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem_post_imm7_4_signed}, nil},\n\t// LDP <Xt>, <Xt2>, [<Xn|SP>], #<imm_3>\n\t{0xffc00000, 0xa8c00000, LDP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_post_imm7_8_signed}, nil},\n\t// LDP <Wt>, <Wt2>, [<Xn|SP>{, #<imm_1>}]!\n\t{0xffc00000, 0x29c00000, LDP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem_wb_imm7_4_signed}, nil},\n\t// LDP <Xt>, <Xt2>, [<Xn|SP>{, #<imm_3>}]!\n\t{0xffc00000, 0xa9c00000, LDP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_wb_imm7_8_signed}, nil},\n\t// LDP <Wt>, <Wt2>, [<Xn|SP>{, #<imm>}]\n\t{0xffc00000, 0x29400000, LDP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem_optional_imm7_4_signed}, nil},\n\t// LDP <Xt>, <Xt2>, [<Xn|SP>{, #<imm_2>}]\n\t{0xffc00000, 0xa9400000, LDP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_optional_imm7_8_signed}, nil},\n\t// LDPSW <Xt>, <Xt2>, [<Xn|SP>], #<imm_1>\n\t{0xffc00000, 0x68c00000, LDPSW, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_post_imm7_4_signed}, nil},\n\t// LDPSW <Xt>, <Xt2>, [<Xn|SP>{, #<imm_1>}]!\n\t{0xffc00000, 0x69c00000, LDPSW, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_wb_imm7_4_signed}, nil},\n\t// LDPSW <Xt>, <Xt2>, [<Xn|SP>{, #<imm>}]\n\t{0xffc00000, 0x69400000, LDPSW, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_optional_imm7_4_signed}, nil},\n\t// LDR <Wt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0xb8400400, LDR, instArgs{arg_Wt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDR <Xt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0xf8400400, LDR, instArgs{arg_Xt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDR <Wt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0xb8400c00, LDR, instArgs{arg_Wt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDR <Xt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0xf8400c00, LDR, instArgs{arg_Xt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDR <Wt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0xb9400000, LDR, instArgs{arg_Wt, arg_Xns_mem_optional_imm12_4_unsigned}, nil},\n\t// LDR <Xt>, [<Xn|SP>{, #<pimm_1>}]\n\t{0xffc00000, 0xf9400000, LDR, instArgs{arg_Xt, arg_Xns_mem_optional_imm12_8_unsigned}, nil},\n\t// LDR <Wt>, <label>\n\t{0xff000000, 0x18000000, LDR, instArgs{arg_Wt, arg_slabel_imm19_2}, nil},\n\t// LDR <Xt>, <label>\n\t{0xff000000, 0x58000000, LDR, instArgs{arg_Xt, arg_slabel_imm19_2}, nil},\n\t// LDR <Wt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xb8600800, LDR, instArgs{arg_Wt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__2_1}, nil},\n\t// LDR <Xt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xf8600800, LDR, instArgs{arg_Xt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__3_1}, nil},\n\t// LDRB <Wt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x38400400, LDRB, instArgs{arg_Wt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDRB <Wt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x38400c00, LDRB, instArgs{arg_Wt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDRB <Wt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x39400000, LDRB, instArgs{arg_Wt, arg_Xns_mem_optional_imm12_1_unsigned}, nil},\n\t// LDRB <Wt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x38600800, LDRB, instArgs{arg_Wt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__absent_0__0_1}, nil},\n\t// LDRH <Wt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x78400400, LDRH, instArgs{arg_Wt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDRH <Wt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x78400c00, LDRH, instArgs{arg_Wt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDRH <Wt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x79400000, LDRH, instArgs{arg_Wt, arg_Xns_mem_optional_imm12_2_unsigned}, nil},\n\t// LDRH <Wt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x78600800, LDRH, instArgs{arg_Wt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__1_1}, nil},\n\t// LDRSB <Wt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x38c00400, LDRSB, instArgs{arg_Wt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDRSB <Xt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x38800400, LDRSB, instArgs{arg_Xt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDRSB <Wt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x38c00c00, LDRSB, instArgs{arg_Wt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDRSB <Xt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x38800c00, LDRSB, instArgs{arg_Xt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDRSB <Wt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x39c00000, LDRSB, instArgs{arg_Wt, arg_Xns_mem_optional_imm12_1_unsigned}, nil},\n\t// LDRSB <Xt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x39800000, LDRSB, instArgs{arg_Xt, arg_Xns_mem_optional_imm12_1_unsigned}, nil},\n\t// LDRSB <Wt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x38e00800, LDRSB, instArgs{arg_Wt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__absent_0__0_1}, nil},\n\t// LDRSB <Xt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x38a00800, LDRSB, instArgs{arg_Xt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__absent_0__0_1}, nil},\n\t// LDRSH <Wt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x78c00400, LDRSH, instArgs{arg_Wt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDRSH <Xt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x78800400, LDRSH, instArgs{arg_Xt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDRSH <Wt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x78c00c00, LDRSH, instArgs{arg_Wt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDRSH <Xt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x78800c00, LDRSH, instArgs{arg_Xt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDRSH <Wt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x79c00000, LDRSH, instArgs{arg_Wt, arg_Xns_mem_optional_imm12_2_unsigned}, nil},\n\t// LDRSH <Xt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x79800000, LDRSH, instArgs{arg_Xt, arg_Xns_mem_optional_imm12_2_unsigned}, nil},\n\t// LDRSH <Wt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x78e00800, LDRSH, instArgs{arg_Wt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__1_1}, nil},\n\t// LDRSH <Xt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x78a00800, LDRSH, instArgs{arg_Xt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__1_1}, nil},\n\t// LDRSW <Xt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0xb8800400, LDRSW, instArgs{arg_Xt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDRSW <Xt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0xb8800c00, LDRSW, instArgs{arg_Xt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDRSW <Xt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0xb9800000, LDRSW, instArgs{arg_Xt, arg_Xns_mem_optional_imm12_4_unsigned}, nil},\n\t// LDRSW <Xt>, <label>\n\t{0xff000000, 0x98000000, LDRSW, instArgs{arg_Xt, arg_slabel_imm19_2}, nil},\n\t// LDRSW <Xt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xb8a00800, LDRSW, instArgs{arg_Xt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__2_1}, nil},\n\t// LDTR <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xb8400800, LDTR, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDTR <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xf8400800, LDTR, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDTRB <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x38400800, LDTRB, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDTRH <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x78400800, LDTRH, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDTRSB <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x38c00800, LDTRSB, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDTRSB <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x38800800, LDTRSB, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDTRSH <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x78c00800, LDTRSH, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDTRSH <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x78800800, LDTRSH, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDTRSW <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xb8800800, LDTRSW, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDUR <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xb8400000, LDUR, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDUR <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xf8400000, LDUR, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDURB <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x38400000, LDURB, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDURH <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x78400000, LDURH, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDURSB <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x38c00000, LDURSB, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDURSB <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x38800000, LDURSB, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDURSH <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x78c00000, LDURSH, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDURSH <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x78800000, LDURSH, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDURSW <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xb8800000, LDURSW, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDXP <Wt>, <Wt2>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88600000, LDXP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem}, nil},\n\t// LDXP <Xt>, <Xt2>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8600000, LDXP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem}, nil},\n\t// LDXR <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88400000, LDXR, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// LDXR <Xt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8400000, LDXR, instArgs{arg_Xt, arg_Xns_mem}, nil},\n\t// LDXRB <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x08400000, LDXRB, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// LDXRH <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x48400000, LDXRH, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// LSL <Wd>, <Wn>, #<shift>\n\t{0xffc08000, 0x53000000, LSL, instArgs{arg_Wd, arg_Wn, arg_immediate_LSL_UBFM_32M_bitfield_0_31_immr}, lsl_ubfm_32m_bitfield_cond},\n\t// LSR <Wd>, <Wn>, #<shift>\n\t{0xffc0fc00, 0x53007c00, LSR, instArgs{arg_Wd, arg_Wn, arg_immediate_LSR_UBFM_32M_bitfield_0_31_immr}, nil},\n\t// UBFIZ <Wd>, <Wn>, #<lsb>, #<width>\n\t{0xffc00000, 0x53000000, UBFIZ, instArgs{arg_Wd, arg_Wn, arg_immediate_UBFIZ_UBFM_32M_bitfield_lsb_32_immr, arg_immediate_UBFIZ_UBFM_32M_bitfield_width_32_imms}, ubfiz_ubfm_32m_bitfield_cond},\n\t// UBFX <Wd>, <Wn>, #<lsb>, #<width>\n\t{0xffc00000, 0x53000000, UBFX, instArgs{arg_Wd, arg_Wn, arg_immediate_UBFX_UBFM_32M_bitfield_lsb_32_immr, arg_immediate_UBFX_UBFM_32M_bitfield_width_32_imms}, ubfx_ubfm_32m_bitfield_cond},\n\t// UXTB <Wd>, <Wn>\n\t{0xfffffc00, 0x53001c00, UXTB, instArgs{arg_Wd, arg_Wn}, nil},\n\t// UXTH <Wd>, <Wn>\n\t{0xfffffc00, 0x53003c00, UXTH, instArgs{arg_Wd, arg_Wn}, nil},\n\t// UBFM <Wd>, <Wn>, #<immr>, #<imms>\n\t{0xffc00000, 0x53000000, UBFM, instArgs{arg_Wd, arg_Wn, arg_immediate_0_31_immr, arg_immediate_0_31_imms}, nil},\n\t// LSL <Xd>, <Xn>, #<shift>\n\t{0xffc00000, 0xd3400000, LSL, instArgs{arg_Xd, arg_Xn, arg_immediate_LSL_UBFM_64M_bitfield_0_63_immr}, lsl_ubfm_64m_bitfield_cond},\n\t// LSR <Xd>, <Xn>, #<shift>\n\t{0xffc0fc00, 0xd340fc00, LSR, instArgs{arg_Xd, arg_Xn, arg_immediate_LSR_UBFM_64M_bitfield_0_63_immr}, nil},\n\t// UBFIZ <Xd>, <Xn>, #<lsb>, #<width>\n\t{0xffc00000, 0xd3400000, UBFIZ, instArgs{arg_Xd, arg_Xn, arg_immediate_UBFIZ_UBFM_64M_bitfield_lsb_64_immr, arg_immediate_UBFIZ_UBFM_64M_bitfield_width_64_imms}, ubfiz_ubfm_64m_bitfield_cond},\n\t// UBFX <Xd>, <Xn>, #<lsb>, #<width>\n\t{0xffc00000, 0xd3400000, UBFX, instArgs{arg_Xd, arg_Xn, arg_immediate_UBFX_UBFM_64M_bitfield_lsb_64_immr, arg_immediate_UBFX_UBFM_64M_bitfield_width_64_imms}, ubfx_ubfm_64m_bitfield_cond},\n\t// UBFM <Xd>, <Xn>, #<immr>, #<imms>\n\t{0xffc00000, 0xd3400000, UBFM, instArgs{arg_Xd, arg_Xn, arg_immediate_0_63_immr, arg_immediate_0_63_imms}, nil},\n\t// LSL <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac02000, LSL, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// LSLV <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac02000, LSLV, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// LSL <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac02000, LSL, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// LSLV <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac02000, LSLV, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// LSR <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac02400, LSR, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// LSRV <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac02400, LSRV, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// LSR <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac02400, LSR, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// LSRV <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac02400, LSRV, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// MUL <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1b007c00, MUL, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// MADD <Wd>, <Wn>, <Wm>, <Wa>\n\t{0xffe08000, 0x1b000000, MADD, instArgs{arg_Wd, arg_Wn, arg_Wm, arg_Wa}, nil},\n\t// MUL <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9b007c00, MUL, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// MADD <Xd>, <Xn>, <Xm>, <Xa>\n\t{0xffe08000, 0x9b000000, MADD, instArgs{arg_Xd, arg_Xn, arg_Xm, arg_Xa}, nil},\n\t// MNEG <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1b00fc00, MNEG, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// MSUB <Wd>, <Wn>, <Wm>, <Wa>\n\t{0xffe08000, 0x1b008000, MSUB, instArgs{arg_Wd, arg_Wn, arg_Wm, arg_Wa}, nil},\n\t// MNEG <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9b00fc00, MNEG, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// MSUB <Xd>, <Xn>, <Xm>, <Xa>\n\t{0xffe08000, 0x9b008000, MSUB, instArgs{arg_Xd, arg_Xn, arg_Xm, arg_Xa}, nil},\n\t// MOV <Wd|WSP>, #<imm>\n\t{0xffc003e0, 0x320003e0, MOV, instArgs{arg_Wds, arg_immediate_bitmask_32_imms_immr}, mov_orr_32_log_imm_cond},\n\t// ORR <Wd|WSP>, <Wn>, #<imm>\n\t{0xffc00000, 0x32000000, ORR, instArgs{arg_Wds, arg_Wn, arg_immediate_bitmask_32_imms_immr}, nil},\n\t// MOV <Xd|SP>, #<imm>\n\t{0xff8003e0, 0xb20003e0, MOV, instArgs{arg_Xds, arg_immediate_bitmask_64_N_imms_immr}, mov_orr_64_log_imm_cond},\n\t// ORR <Xd|SP>, <Xn>, #<imm>\n\t{0xff800000, 0xb2000000, ORR, instArgs{arg_Xds, arg_Xn, arg_immediate_bitmask_64_N_imms_immr}, nil},\n\t// MOV <Wd>, #<imm>\n\t{0xff800000, 0x12800000, MOV, instArgs{arg_Wd, arg_immediate_shift_32_implicit_inverse_imm16_hw}, mov_movn_32_movewide_cond},\n\t// MOVN <Wd>, #<imm>{, LSL #<shift>}\n\t{0xff800000, 0x12800000, MOVN, instArgs{arg_Wd, arg_immediate_OptLSL_amount_16_0_16}, nil},\n\t// MOV <Xd>, #<imm>\n\t{0xff800000, 0x92800000, MOV, instArgs{arg_Xd, arg_immediate_shift_64_implicit_inverse_imm16_hw}, mov_movn_64_movewide_cond},\n\t// MOVN <Xd>, #<imm>{, LSL #<shift>}\n\t{0xff800000, 0x92800000, MOVN, instArgs{arg_Xd, arg_immediate_OptLSL_amount_16_0_48}, nil},\n\t// MOV <Wd>, <Wm>\n\t{0xffe0ffe0, 0x2a0003e0, MOV, instArgs{arg_Wd, arg_Wm}, nil},\n\t// ORR <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x2a000000, ORR, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// MOV <Xd>, <Xm>\n\t{0xffe0ffe0, 0xaa0003e0, MOV, instArgs{arg_Xd, arg_Xm}, nil},\n\t// ORR <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0xaa000000, ORR, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// MOV <Wd>, #<imm>\n\t{0xff800000, 0x52800000, MOV, instArgs{arg_Wd, arg_immediate_shift_32_implicit_imm16_hw}, mov_movz_32_movewide_cond},\n\t// MOVZ <Wd>, #<imm>{, LSL #<shift>}\n\t{0xff800000, 0x52800000, MOVZ, instArgs{arg_Wd, arg_immediate_OptLSL_amount_16_0_16}, nil},\n\t// MOV <Xd>, #<imm>\n\t{0xff800000, 0xd2800000, MOV, instArgs{arg_Xd, arg_immediate_shift_64_implicit_imm16_hw}, mov_movz_64_movewide_cond},\n\t// MOVZ <Xd>, #<imm>{, LSL #<shift>}\n\t{0xff800000, 0xd2800000, MOVZ, instArgs{arg_Xd, arg_immediate_OptLSL_amount_16_0_48}, nil},\n\t// MOVK <Wd>, #<imm>{, LSL #<shift>}\n\t{0xff800000, 0x72800000, MOVK, instArgs{arg_Wd, arg_immediate_OptLSL_amount_16_0_16}, nil},\n\t// MOVK <Xd>, #<imm>{, LSL #<shift>}\n\t{0xff800000, 0xf2800000, MOVK, instArgs{arg_Xd, arg_immediate_OptLSL_amount_16_0_48}, nil},\n\t// MRS <Xt>, <systemreg>\n\t{0xfff00000, 0xd5300000, MRS, instArgs{arg_Xt, arg_sysreg_o0_op1_CRn_CRm_op2}, nil},\n\t// MSR <pstatefield>, #<imm>\n\t{0xfff8f01f, 0xd500401f, MSR, instArgs{arg_pstatefield_op1_op2__SPSel_05__DAIFSet_36__DAIFClr_37, arg_immediate_0_15_CRm}, nil},\n\t// MSR <systemreg>, <Xt>\n\t{0xfff00000, 0xd5100000, MSR, instArgs{arg_sysreg_o0_op1_CRn_CRm_op2, arg_Xt}, nil},\n\t// MVN <Wd>, <Wm> {, <shift> #<amount> }\n\t{0xff2003e0, 0x2a2003e0, MVN, instArgs{arg_Wd, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// ORN <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x2a200000, ORN, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_31}, nil},\n\t// MVN <Xd>, <Xm> {, <shift> #<amount> }\n\t{0xff2003e0, 0xaa2003e0, MVN, instArgs{arg_Xd, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// ORN <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0xaa200000, ORN, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__ROR_3__0_63}, nil},\n\t// NEG <Wd>, <Wm> {, <shift> #<amount> }\n\t{0xff2003e0, 0x4b0003e0, NEG, instArgs{arg_Wd, arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31}, nil},\n\t// SUB <Wd>, <Wn>, <Wm> {, <shift> #<amount> }\n\t{0xff208000, 0x4b000000, SUB, instArgs{arg_Wd, arg_Wn, arg_Wm_shift__LSL_0__LSR_1__ASR_2__0_31}, nil},\n\t// NEG <Xd>, <Xm> {, <shift> #<amount> }\n\t{0xff2003e0, 0xcb0003e0, NEG, instArgs{arg_Xd, arg_Xm_shift__LSL_0__LSR_1__ASR_2__0_63}, nil},\n\t// SUB <Xd>, <Xn>, <Xm> {, <shift> #<amount> }\n\t{0xff200000, 0xcb000000, SUB, instArgs{arg_Xd, arg_Xn, arg_Xm_shift__LSL_0__LSR_1__ASR_2__0_63}, nil},\n\t// NGC <Wd>, <Wm>\n\t{0xffe0ffe0, 0x5a0003e0, NGC, instArgs{arg_Wd, arg_Wm}, nil},\n\t// SBC <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x5a000000, SBC, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// NGC <Xd>, <Xm>\n\t{0xffe0ffe0, 0xda0003e0, NGC, instArgs{arg_Xd, arg_Xm}, nil},\n\t// SBC <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0xda000000, SBC, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// NGCS <Wd>, <Wm>\n\t{0xffe0ffe0, 0x7a0003e0, NGCS, instArgs{arg_Wd, arg_Wm}, nil},\n\t// SBCS <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x7a000000, SBCS, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// NGCS <Xd>, <Xm>\n\t{0xffe0ffe0, 0xfa0003e0, NGCS, instArgs{arg_Xd, arg_Xm}, nil},\n\t// SBCS <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0xfa000000, SBCS, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// PRFM <prfop>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0xf9800000, PRFM, instArgs{arg_prfop_Rt, arg_Xns_mem_optional_imm12_8_unsigned}, nil},\n\t// PRFM <prfop>, <label>\n\t{0xff000000, 0xd8000000, PRFM, instArgs{arg_prfop_Rt, arg_slabel_imm19_2}, nil},\n\t// PRFM <prfop>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xf8a00800, PRFM, instArgs{arg_prfop_Rt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__3_1}, nil},\n\t// PRFUM <prfop>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xf8800000, PRFUM, instArgs{arg_prfop_Rt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// RBIT <Wd>, <Wn>\n\t{0xfffffc00, 0x5ac00000, RBIT, instArgs{arg_Wd, arg_Wn}, nil},\n\t// RBIT <Xd>, <Xn>\n\t{0xfffffc00, 0xdac00000, RBIT, instArgs{arg_Xd, arg_Xn}, nil},\n\t// RET {<Xn>}\n\t{0xfffffc1f, 0xd65f0000, RET, instArgs{arg_Xn}, nil},\n\t// REV <Wd>, <Wn>\n\t{0xfffffc00, 0x5ac00800, REV, instArgs{arg_Wd, arg_Wn}, nil},\n\t// REV <Xd>, <Xn>\n\t{0xfffffc00, 0xdac00c00, REV, instArgs{arg_Xd, arg_Xn}, nil},\n\t// REV16 <Wd>, <Wn>\n\t{0xfffffc00, 0x5ac00400, REV16, instArgs{arg_Wd, arg_Wn}, nil},\n\t// REV16 <Xd>, <Xn>\n\t{0xfffffc00, 0xdac00400, REV16, instArgs{arg_Xd, arg_Xn}, nil},\n\t// REV32 <Xd>, <Xn>\n\t{0xfffffc00, 0xdac00800, REV32, instArgs{arg_Xd, arg_Xn}, nil},\n\t// ROR <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac02c00, ROR, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// RORV <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac02c00, RORV, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// ROR <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac02c00, ROR, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// RORV <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac02c00, RORV, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// SDIV <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac00c00, SDIV, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// SDIV <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac00c00, SDIV, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// SMULL <Xd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x9b207c00, SMULL, instArgs{arg_Xd, arg_Wn, arg_Wm}, nil},\n\t// SMADDL <Xd>, <Wn>, <Wm>, <Xa>\n\t{0xffe08000, 0x9b200000, SMADDL, instArgs{arg_Xd, arg_Wn, arg_Wm, arg_Xa}, nil},\n\t// SMNEGL <Xd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x9b20fc00, SMNEGL, instArgs{arg_Xd, arg_Wn, arg_Wm}, nil},\n\t// SMSUBL <Xd>, <Wn>, <Wm>, <Xa>\n\t{0xffe08000, 0x9b208000, SMSUBL, instArgs{arg_Xd, arg_Wn, arg_Wm, arg_Xa}, nil},\n\t// SMULH <Xd>, <Xn>, <Xm>\n\t{0xffe08000, 0x9b400000, SMULH, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// STLR <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88808000, STLR, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// STLR <Xt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8808000, STLR, instArgs{arg_Xt, arg_Xns_mem}, nil},\n\t// STLRB <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x08808000, STLRB, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// STLRH <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x48808000, STLRH, instArgs{arg_Wt, arg_Xns_mem}, nil},\n\t// STLXP <Ws>, <Wt>, <Wt2>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88208000, STLXP, instArgs{arg_Ws, arg_Wt, arg_Wt2, arg_Xns_mem}, nil},\n\t// STLXP <Ws>, <Xt>, <Xt2>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8208000, STLXP, instArgs{arg_Ws, arg_Xt, arg_Xt2, arg_Xns_mem}, nil},\n\t// STLXR <Ws>, <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88008000, STLXR, instArgs{arg_Ws, arg_Wt, arg_Xns_mem}, nil},\n\t// STLXR <Ws>, <Xt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8008000, STLXR, instArgs{arg_Ws, arg_Xt, arg_Xns_mem}, nil},\n\t// STLXRB <Ws>, <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x08008000, STLXRB, instArgs{arg_Ws, arg_Wt, arg_Xns_mem}, nil},\n\t// STLXRH <Ws>, <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x48008000, STLXRH, instArgs{arg_Ws, arg_Wt, arg_Xns_mem}, nil},\n\t// STNP <Wt>, <Wt2>, [<Xn|SP>{, #<imm>}]\n\t{0xffc00000, 0x28000000, STNP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem_optional_imm7_4_signed}, nil},\n\t// STNP <Xt>, <Xt2>, [<Xn|SP>{, #<imm_1>}]\n\t{0xffc00000, 0xa8000000, STNP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_optional_imm7_8_signed}, nil},\n\t// STP <Wt>, <Wt2>, [<Xn|SP>], #<imm_1>\n\t{0xffc00000, 0x28800000, STP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem_post_imm7_4_signed}, nil},\n\t// STP <Xt>, <Xt2>, [<Xn|SP>], #<imm_3>\n\t{0xffc00000, 0xa8800000, STP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_post_imm7_8_signed}, nil},\n\t// STP <Wt>, <Wt2>, [<Xn|SP>{, #<imm_1>}]!\n\t{0xffc00000, 0x29800000, STP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem_wb_imm7_4_signed}, nil},\n\t// STP <Xt>, <Xt2>, [<Xn|SP>{, #<imm_3>}]!\n\t{0xffc00000, 0xa9800000, STP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_wb_imm7_8_signed}, nil},\n\t// STP <Wt>, <Wt2>, [<Xn|SP>{, #<imm>}]\n\t{0xffc00000, 0x29000000, STP, instArgs{arg_Wt, arg_Wt2, arg_Xns_mem_optional_imm7_4_signed}, nil},\n\t// STP <Xt>, <Xt2>, [<Xn|SP>{, #<imm_2>}]\n\t{0xffc00000, 0xa9000000, STP, instArgs{arg_Xt, arg_Xt2, arg_Xns_mem_optional_imm7_8_signed}, nil},\n\t// STR <Wt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0xb8000400, STR, instArgs{arg_Wt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// STR <Xt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0xf8000400, STR, instArgs{arg_Xt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// STR <Wt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0xb8000c00, STR, instArgs{arg_Wt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// STR <Xt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0xf8000c00, STR, instArgs{arg_Xt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// STR <Wt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0xb9000000, STR, instArgs{arg_Wt, arg_Xns_mem_optional_imm12_4_unsigned}, nil},\n\t// STR <Xt>, [<Xn|SP>{, #<pimm_1>}]\n\t{0xffc00000, 0xf9000000, STR, instArgs{arg_Xt, arg_Xns_mem_optional_imm12_8_unsigned}, nil},\n\t// STR <Wt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xb8200800, STR, instArgs{arg_Wt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__2_1}, nil},\n\t// STR <Xt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xf8200800, STR, instArgs{arg_Xt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__3_1}, nil},\n\t// STRB <Wt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x38000400, STRB, instArgs{arg_Wt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// STRB <Wt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x38000c00, STRB, instArgs{arg_Wt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// STRB <Wt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x39000000, STRB, instArgs{arg_Wt, arg_Xns_mem_optional_imm12_1_unsigned}, nil},\n\t// STRB <Wt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x38200800, STRB, instArgs{arg_Wt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__absent_0__0_1}, nil},\n\t// STRH <Wt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x78000400, STRH, instArgs{arg_Wt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// STRH <Wt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x78000c00, STRH, instArgs{arg_Wt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// STRH <Wt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x79000000, STRH, instArgs{arg_Wt, arg_Xns_mem_optional_imm12_2_unsigned}, nil},\n\t// STRH <Wt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x78200800, STRH, instArgs{arg_Wt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__1_1}, nil},\n\t// STTR <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xb8000800, STTR, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STTR <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xf8000800, STTR, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STTRB <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x38000800, STTRB, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STTRH <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x78000800, STTRH, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STUR <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xb8000000, STUR, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STUR <Xt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xf8000000, STUR, instArgs{arg_Xt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STURB <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x38000000, STURB, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STURH <Wt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x78000000, STURH, instArgs{arg_Wt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STXP <Ws>, <Wt>, <Wt2>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88200000, STXP, instArgs{arg_Ws, arg_Wt, arg_Wt2, arg_Xns_mem}, nil},\n\t// STXP <Ws>, <Xt>, <Xt2>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8200000, STXP, instArgs{arg_Ws, arg_Xt, arg_Xt2, arg_Xns_mem}, nil},\n\t// STXR <Ws>, <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x88000000, STXR, instArgs{arg_Ws, arg_Wt, arg_Xns_mem}, nil},\n\t// STXR <Ws>, <Xt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0xc8000000, STXR, instArgs{arg_Ws, arg_Xt, arg_Xns_mem}, nil},\n\t// STXRB <Ws>, <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x08000000, STXRB, instArgs{arg_Ws, arg_Wt, arg_Xns_mem}, nil},\n\t// STXRH <Ws>, <Wt>, [<Xn|SP>{, #0}]\n\t{0xffe08000, 0x48000000, STXRH, instArgs{arg_Ws, arg_Wt, arg_Xns_mem}, nil},\n\t// SUB <Wd|WSP>, <Wn|WSP>, <Wm>{, <extend> {#<amount>}}\n\t{0xffe00000, 0x4b200000, SUB, instArgs{arg_Wds, arg_Wns, arg_Wm_extend__UXTB_0__UXTH_1__LSL_UXTW_2__UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// SUB <Xd|SP>, <Xn|SP>, <R><m>{, <extend_1> {#<amount>}}\n\t{0xffe00000, 0xcb200000, SUB, instArgs{arg_Xds, arg_Xns, arg_Rm_extend__UXTB_0__UXTH_1__UXTW_2__LSL_UXTX_3__SXTB_4__SXTH_5__SXTW_6__SXTX_7__0_4}, nil},\n\t// SUB <Wd|WSP>, <Wn|WSP>, #<imm>{, <shift>}\n\t{0xff000000, 0x51000000, SUB, instArgs{arg_Wds, arg_Wns, arg_IAddSub}, nil},\n\t// SUB <Xd|SP>, <Xn|SP>, #<imm>{, <shift>}\n\t{0xff000000, 0xd1000000, SUB, instArgs{arg_Xds, arg_Xns, arg_IAddSub}, nil},\n\t// SVC #<imm>\n\t{0xffe0001f, 0xd4000001, SVC, instArgs{arg_immediate_0_65535_imm16}, nil},\n\t// SYSL <Xt>, #<op1>, <Cn>, <Cm>, #<op2>\n\t{0xfff80000, 0xd5280000, SYSL, instArgs{arg_Xt, arg_immediate_0_7_op1, arg_Cn, arg_Cm, arg_immediate_0_7_op2}, nil},\n\t// TBNZ <R><t>, #<imm>, <label>\n\t{0x7f000000, 0x37000000, TBNZ, instArgs{arg_Rt_31_1__W_0__X_1, arg_immediate_0_63_b5_b40, arg_slabel_imm14_2}, nil},\n\t// TBZ <R><t>, #<imm>, <label>\n\t{0x7f000000, 0x36000000, TBZ, instArgs{arg_Rt_31_1__W_0__X_1, arg_immediate_0_63_b5_b40, arg_slabel_imm14_2}, nil},\n\t// UDIV <Wd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x1ac00800, UDIV, instArgs{arg_Wd, arg_Wn, arg_Wm}, nil},\n\t// UDIV <Xd>, <Xn>, <Xm>\n\t{0xffe0fc00, 0x9ac00800, UDIV, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// UMULL <Xd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x9ba07c00, UMULL, instArgs{arg_Xd, arg_Wn, arg_Wm}, nil},\n\t// UMADDL <Xd>, <Wn>, <Wm>, <Xa>\n\t{0xffe08000, 0x9ba00000, UMADDL, instArgs{arg_Xd, arg_Wn, arg_Wm, arg_Xa}, nil},\n\t// UMNEGL <Xd>, <Wn>, <Wm>\n\t{0xffe0fc00, 0x9ba0fc00, UMNEGL, instArgs{arg_Xd, arg_Wn, arg_Wm}, nil},\n\t// UMSUBL <Xd>, <Wn>, <Wm>, <Xa>\n\t{0xffe08000, 0x9ba08000, UMSUBL, instArgs{arg_Xd, arg_Wn, arg_Wm, arg_Xa}, nil},\n\t// UMULH <Xd>, <Xn>, <Xm>\n\t{0xffe08000, 0x9bc00000, UMULH, instArgs{arg_Xd, arg_Xn, arg_Xm}, nil},\n\t// ABS <V><d>, <V><n>\n\t{0xff3ffc00, 0x5e20b800, ABS, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3}, nil},\n\t// ABS <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e20b800, ABS, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// ADD <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e208400, ADD, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// ADD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e208400, ADD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// ADDHN <Vd>.<tb>, <Vn>.<ta>, <Vm>.<ta>\n\t{0xff20fc00, 0x0e204000, ADDHN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// ADDHN2 <Vd>.<tb>, <Vn>.<ta>, <Vm>.<ta>\n\t{0xff20fc00, 0x4e204000, ADDHN2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// ADDP <V><d>, <Vn>.<t>\n\t{0xff3ffc00, 0x5e31b800, ADDP, instArgs{arg_Vd_22_2__D_3, arg_Vn_arrangement_size___2D_3}, nil},\n\t// ADDP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e20bc00, ADDP, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// ADDV <V><d>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e31b800, ADDV, instArgs{arg_Vd_22_2__B_0__H_1__S_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__4S_21}, nil},\n\t// AESD <Vd>.16B, <Vn>.16B\n\t{0xfffffc00, 0x4e285800, AESD, instArgs{arg_Vd_arrangement_16B, arg_Vn_arrangement_16B}, nil},\n\t// AESE <Vd>.16B, <Vn>.16B\n\t{0xfffffc00, 0x4e284800, AESE, instArgs{arg_Vd_arrangement_16B, arg_Vn_arrangement_16B}, nil},\n\t// AESIMC <Vd>.16B, <Vn>.16B\n\t{0xfffffc00, 0x4e287800, AESIMC, instArgs{arg_Vd_arrangement_16B, arg_Vn_arrangement_16B}, nil},\n\t// AESMC <Vd>.16B, <Vn>.16B\n\t{0xfffffc00, 0x4e286800, AESMC, instArgs{arg_Vd_arrangement_16B, arg_Vn_arrangement_16B}, nil},\n\t// AND <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfe0fc00, 0x0e201c00, AND, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// BIC <Vd>.<t>, #<imm8>{, LSL #<amount>}\n\t{0xbff8dc00, 0x2f009400, BIC, instArgs{arg_Vd_arrangement_Q___4H_0__8H_1, arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1}, nil},\n\t// BIC <Vd>.<t_1>, #<imm8>{, LSL #<amount>}\n\t{0xbff89c00, 0x2f001400, BIC, instArgs{arg_Vd_arrangement_Q___2S_0__4S_1, arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1__16_2__24_3}, nil},\n\t// BIC <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfe0fc00, 0x0e601c00, BIC, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// BIF <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfe0fc00, 0x2ee01c00, BIF, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// BIT <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfe0fc00, 0x2ea01c00, BIT, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// BSL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfe0fc00, 0x2e601c00, BSL, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// CLS <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e204800, CLS, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// CLZ <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x2e204800, CLZ, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// CMEQ <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e208c00, CMEQ, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// CMEQ <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e208c00, CMEQ, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// CMEQ <V><d>, <V><n>, #0\n\t{0xff3ffc00, 0x5e209800, CMEQ, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_immediate_zero}, nil},\n\t// CMEQ <Vd>.<t>, <Vn>.<t>, #0\n\t{0xbf3ffc00, 0x0e209800, CMEQ, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_immediate_zero}, nil},\n\t// CMGE <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e203c00, CMGE, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// CMGE <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e203c00, CMGE, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// CMGE <V><d>, <V><n>, #0\n\t{0xff3ffc00, 0x7e208800, CMGE, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_immediate_zero}, nil},\n\t// CMGE <Vd>.<t>, <Vn>.<t>, #0\n\t{0xbf3ffc00, 0x2e208800, CMGE, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_immediate_zero}, nil},\n\t// CMGT <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e203400, CMGT, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// CMGT <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e203400, CMGT, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// CMGT <V><d>, <V><n>, #0\n\t{0xff3ffc00, 0x5e208800, CMGT, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_immediate_zero}, nil},\n\t// CMGT <Vd>.<t>, <Vn>.<t>, #0\n\t{0xbf3ffc00, 0x0e208800, CMGT, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_immediate_zero}, nil},\n\t// CMHI <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e203400, CMHI, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// CMHI <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e203400, CMHI, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// CMHS <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e203c00, CMHS, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// CMHS <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e203c00, CMHS, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// CMLE <V><d>, <V><n>, #0\n\t{0xff3ffc00, 0x7e209800, CMLE, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_immediate_zero}, nil},\n\t// CMLE <Vd>.<t>, <Vn>.<t>, #0\n\t{0xbf3ffc00, 0x2e209800, CMLE, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_immediate_zero}, nil},\n\t// CMLT <V><d>, <V><n>, #0\n\t{0xff3ffc00, 0x5e20a800, CMLT, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_immediate_zero}, nil},\n\t// CMLT <Vd>.<t>, <Vn>.<t>, #0\n\t{0xbf3ffc00, 0x0e20a800, CMLT, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_immediate_zero}, nil},\n\t// CMTST <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e208c00, CMTST, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// CMTST <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e208c00, CMTST, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// CNT <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e205800, CNT, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01, arg_Vn_arrangement_size_Q___8B_00__16B_01}, nil},\n\t// MOV <V><d>, <Vn>.<t_1>[<index>]\n\t{0xffe0fc00, 0x5e000400, MOV, instArgs{arg_Vd_16_5__B_1__H_2__S_4__D_8, arg_Vn_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1}, nil},\n\t// DUP <V><d>, <Vn>.<t_1>[<index>]\n\t{0xffe0fc00, 0x5e000400, DUP, instArgs{arg_Vd_16_5__B_1__H_2__S_4__D_8, arg_Vn_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1}, nil},\n\t// DUP <Vd>.<t>, <Vn>.<ts>[<index>]\n\t{0xbfe0fc00, 0x0e000400, DUP, instArgs{arg_Vd_arrangement_imm5_Q___8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1}, nil},\n\t// DUP <Vd>.<t>, <R><n>\n\t{0xbfe0fc00, 0x0e000c00, DUP, instArgs{arg_Vd_arrangement_imm5_Q___8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Rn_16_5__W_1__W_2__W_4__X_8}, nil},\n\t// EOR <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfe0fc00, 0x2e201c00, EOR, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// EXT <Vd>.<t>, <Vn>.<t>, <Vm>.<t>, #<index>\n\t{0xbfe08400, 0x2e000000, EXT, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1, arg_Vm_arrangement_Q___8B_0__16B_1, arg_immediate_index_Q_imm4__imm4lt20gt_00__imm4_10}, nil},\n\t// FABD <V><d>, <V><n>, <V><m>\n\t{0xffa0fc00, 0x7ea0d400, FABD, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_22_1__S_0__D_1}, nil},\n\t// FABD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2ea0d400, FABD, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FABS <Sd>, <Sn>\n\t{0xfffffc00, 0x1e20c000, FABS, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FABS <Dd>, <Dn>\n\t{0xfffffc00, 0x1e60c000, FABS, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FABS <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0ea0f800, FABS, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FACGE <V><d>, <V><n>, <V><m>\n\t{0xffa0fc00, 0x7e20ec00, FACGE, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_22_1__S_0__D_1}, nil},\n\t// FACGE <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2e20ec00, FACGE, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FACGT <V><d>, <V><n>, <V><m>\n\t{0xffa0fc00, 0x7ea0ec00, FACGT, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_22_1__S_0__D_1}, nil},\n\t// FACGT <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2ea0ec00, FACGT, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FADD <Sd>, <Sn>, <Sm>\n\t{0xffe0fc00, 0x1e202800, FADD, instArgs{arg_Sd, arg_Sn, arg_Sm}, nil},\n\t// FADD <Dd>, <Dn>, <Dm>\n\t{0xffe0fc00, 0x1e602800, FADD, instArgs{arg_Dd, arg_Dn, arg_Dm}, nil},\n\t// FADD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0e20d400, FADD, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FADDP <V><d>, <Vn>.<t>\n\t{0xffbffc00, 0x7e30d800, FADDP, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_arrangement_sz___2S_0__2D_1}, nil},\n\t// FADDP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2e20d400, FADDP, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCCMP <Sn>, <Sm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0x1e200400, FCCMP, instArgs{arg_Sn, arg_Sm, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// FCCMP <Dn>, <Dm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0x1e600400, FCCMP, instArgs{arg_Dn, arg_Dm, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// FCCMPE <Sn>, <Sm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0x1e200410, FCCMPE, instArgs{arg_Sn, arg_Sm, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// FCCMPE <Dn>, <Dm>, #<nzcv>, <cond>\n\t{0xffe00c10, 0x1e600410, FCCMPE, instArgs{arg_Dn, arg_Dm, arg_immediate_0_15_nzcv, arg_cond_AllowALNV_Normal}, nil},\n\t// FCMEQ <V><d>, <V><n>, <V><m>\n\t{0xffa0fc00, 0x5e20e400, FCMEQ, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_22_1__S_0__D_1}, nil},\n\t// FCMEQ <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0e20e400, FCMEQ, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCMEQ <V><d>, <V><n>, #0.0\n\t{0xffbffc00, 0x5ea0d800, FCMEQ, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_immediate_floatzero}, nil},\n\t// FCMEQ <Vd>.<t>, <Vn>.<t>, #0.0\n\t{0xbfbffc00, 0x0ea0d800, FCMEQ, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_immediate_floatzero}, nil},\n\t// FCMGE <V><d>, <V><n>, <V><m>\n\t{0xffa0fc00, 0x7e20e400, FCMGE, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_22_1__S_0__D_1}, nil},\n\t// FCMGE <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2e20e400, FCMGE, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCMGE <V><d>, <V><n>, #0.0\n\t{0xffbffc00, 0x7ea0c800, FCMGE, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_immediate_floatzero}, nil},\n\t// FCMGE <Vd>.<t>, <Vn>.<t>, #0.0\n\t{0xbfbffc00, 0x2ea0c800, FCMGE, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_immediate_floatzero}, nil},\n\t// FCMGT <V><d>, <V><n>, <V><m>\n\t{0xffa0fc00, 0x7ea0e400, FCMGT, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_22_1__S_0__D_1}, nil},\n\t// FCMGT <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2ea0e400, FCMGT, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCMGT <V><d>, <V><n>, #0.0\n\t{0xffbffc00, 0x5ea0c800, FCMGT, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_immediate_floatzero}, nil},\n\t// FCMGT <Vd>.<t>, <Vn>.<t>, #0.0\n\t{0xbfbffc00, 0x0ea0c800, FCMGT, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_immediate_floatzero}, nil},\n\t// FCMLE <V><d>, <V><n>, #0.0\n\t{0xffbffc00, 0x7ea0d800, FCMLE, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_immediate_floatzero}, nil},\n\t// FCMLE <Vd>.<t>, <Vn>.<t>, #0.0\n\t{0xbfbffc00, 0x2ea0d800, FCMLE, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_immediate_floatzero}, nil},\n\t// FCMLT <V><d>, <V><n>, #0.0\n\t{0xffbffc00, 0x5ea0e800, FCMLT, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_immediate_floatzero}, nil},\n\t// FCMLT <Vd>.<t>, <Vn>.<t>, #0.0\n\t{0xbfbffc00, 0x0ea0e800, FCMLT, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_immediate_floatzero}, nil},\n\t// FCMP <Sn>, <Sm>\n\t{0xffe0fc1f, 0x1e202000, FCMP, instArgs{arg_Sn, arg_Sm}, nil},\n\t// FCMP <Sn>, #0.0\n\t{0xffe0fc1f, 0x1e202008, FCMP, instArgs{arg_Sn, arg_immediate_floatzero}, nil},\n\t// FCMP <Dn>, <Dm>\n\t{0xffe0fc1f, 0x1e602000, FCMP, instArgs{arg_Dn, arg_Dm}, nil},\n\t// FCMP <Dn>, #0.0\n\t{0xffe0fc1f, 0x1e602008, FCMP, instArgs{arg_Dn, arg_immediate_floatzero}, nil},\n\t// FCMPE <Sn>, <Sm>\n\t{0xffe0fc1f, 0x1e202010, FCMPE, instArgs{arg_Sn, arg_Sm}, nil},\n\t// FCMPE <Sn>, #0.0\n\t{0xffe0fc1f, 0x1e202018, FCMPE, instArgs{arg_Sn, arg_immediate_floatzero}, nil},\n\t// FCMPE <Dn>, <Dm>\n\t{0xffe0fc1f, 0x1e602010, FCMPE, instArgs{arg_Dn, arg_Dm}, nil},\n\t// FCMPE <Dn>, #0.0\n\t{0xffe0fc1f, 0x1e602018, FCMPE, instArgs{arg_Dn, arg_immediate_floatzero}, nil},\n\t// FCSEL <Sd>, <Sn>, <Sm>, <cond>\n\t{0xffe00c00, 0x1e200c00, FCSEL, instArgs{arg_Sd, arg_Sn, arg_Sm, arg_cond_AllowALNV_Normal}, nil},\n\t// FCSEL <Dd>, <Dn>, <Dm>, <cond>\n\t{0xffe00c00, 0x1e600c00, FCSEL, instArgs{arg_Dd, arg_Dn, arg_Dm, arg_cond_AllowALNV_Normal}, nil},\n\t// FCVT <Sd>, <Hn>\n\t{0xfffffc00, 0x1ee24000, FCVT, instArgs{arg_Sd, arg_Hn}, nil},\n\t// FCVT <Dd>, <Hn>\n\t{0xfffffc00, 0x1ee2c000, FCVT, instArgs{arg_Dd, arg_Hn}, nil},\n\t// FCVT <Hd>, <Sn>\n\t{0xfffffc00, 0x1e23c000, FCVT, instArgs{arg_Hd, arg_Sn}, nil},\n\t// FCVT <Dd>, <Sn>\n\t{0xfffffc00, 0x1e22c000, FCVT, instArgs{arg_Dd, arg_Sn}, nil},\n\t// FCVT <Hd>, <Dn>\n\t{0xfffffc00, 0x1e63c000, FCVT, instArgs{arg_Hd, arg_Dn}, nil},\n\t// FCVT <Sd>, <Dn>\n\t{0xfffffc00, 0x1e624000, FCVT, instArgs{arg_Sd, arg_Dn}, nil},\n\t// FCVTAS <Wd>, <Sn>\n\t{0xfffffc00, 0x1e240000, FCVTAS, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTAS <Xd>, <Sn>\n\t{0xfffffc00, 0x9e240000, FCVTAS, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTAS <Wd>, <Dn>\n\t{0xfffffc00, 0x1e640000, FCVTAS, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTAS <Xd>, <Dn>\n\t{0xfffffc00, 0x9e640000, FCVTAS, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTAS <V><d>, <V><n>\n\t{0xffbffc00, 0x5e21c800, FCVTAS, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTAS <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0e21c800, FCVTAS, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCVTAU <Wd>, <Sn>\n\t{0xfffffc00, 0x1e250000, FCVTAU, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTAU <Xd>, <Sn>\n\t{0xfffffc00, 0x9e250000, FCVTAU, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTAU <Wd>, <Dn>\n\t{0xfffffc00, 0x1e650000, FCVTAU, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTAU <Xd>, <Dn>\n\t{0xfffffc00, 0x9e650000, FCVTAU, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTAU <V><d>, <V><n>\n\t{0xffbffc00, 0x7e21c800, FCVTAU, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTAU <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2e21c800, FCVTAU, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCVTL <Vd>.<ta>, <Vn>.<tb>\n\t{0xffbffc00, 0x0e217800, FCVTL, instArgs{arg_Vd_arrangement_sz___4S_0__2D_1, arg_Vn_arrangement_sz_Q___4H_00__8H_01__2S_10__4S_11}, nil},\n\t// FCVTL2 <Vd>.<ta>, <Vn>.<tb>\n\t{0xffbffc00, 0x4e217800, FCVTL2, instArgs{arg_Vd_arrangement_sz___4S_0__2D_1, arg_Vn_arrangement_sz_Q___4H_00__8H_01__2S_10__4S_11}, nil},\n\t// FCVTMS <Wd>, <Sn>\n\t{0xfffffc00, 0x1e300000, FCVTMS, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTMS <Xd>, <Sn>\n\t{0xfffffc00, 0x9e300000, FCVTMS, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTMS <Wd>, <Dn>\n\t{0xfffffc00, 0x1e700000, FCVTMS, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTMS <Xd>, <Dn>\n\t{0xfffffc00, 0x9e700000, FCVTMS, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTMS <V><d>, <V><n>\n\t{0xffbffc00, 0x5e21b800, FCVTMS, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTMS <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0e21b800, FCVTMS, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCVTMU <Wd>, <Sn>\n\t{0xfffffc00, 0x1e310000, FCVTMU, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTMU <Xd>, <Sn>\n\t{0xfffffc00, 0x9e310000, FCVTMU, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTMU <Wd>, <Dn>\n\t{0xfffffc00, 0x1e710000, FCVTMU, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTMU <Xd>, <Dn>\n\t{0xfffffc00, 0x9e710000, FCVTMU, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTMU <V><d>, <V><n>\n\t{0xffbffc00, 0x7e21b800, FCVTMU, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTMU <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2e21b800, FCVTMU, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCVTN <Vd>.<tb>, <Vn>.<ta>\n\t{0xffbffc00, 0x0e216800, FCVTN, instArgs{arg_Vd_arrangement_sz_Q___4H_00__8H_01__2S_10__4S_11, arg_Vn_arrangement_sz___4S_0__2D_1}, nil},\n\t// FCVTN2 <Vd>.<tb>, <Vn>.<ta>\n\t{0xffbffc00, 0x4e216800, FCVTN2, instArgs{arg_Vd_arrangement_sz_Q___4H_00__8H_01__2S_10__4S_11, arg_Vn_arrangement_sz___4S_0__2D_1}, nil},\n\t// FCVTNS <Wd>, <Sn>\n\t{0xfffffc00, 0x1e200000, FCVTNS, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTNS <Xd>, <Sn>\n\t{0xfffffc00, 0x9e200000, FCVTNS, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTNS <Wd>, <Dn>\n\t{0xfffffc00, 0x1e600000, FCVTNS, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTNS <Xd>, <Dn>\n\t{0xfffffc00, 0x9e600000, FCVTNS, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTNS <V><d>, <V><n>\n\t{0xffbffc00, 0x5e21a800, FCVTNS, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTNS <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0e21a800, FCVTNS, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCVTNU <Wd>, <Sn>\n\t{0xfffffc00, 0x1e210000, FCVTNU, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTNU <Xd>, <Sn>\n\t{0xfffffc00, 0x9e210000, FCVTNU, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTNU <Wd>, <Dn>\n\t{0xfffffc00, 0x1e610000, FCVTNU, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTNU <Xd>, <Dn>\n\t{0xfffffc00, 0x9e610000, FCVTNU, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTNU <V><d>, <V><n>\n\t{0xffbffc00, 0x7e21a800, FCVTNU, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTNU <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2e21a800, FCVTNU, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCVTPS <Wd>, <Sn>\n\t{0xfffffc00, 0x1e280000, FCVTPS, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTPS <Xd>, <Sn>\n\t{0xfffffc00, 0x9e280000, FCVTPS, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTPS <Wd>, <Dn>\n\t{0xfffffc00, 0x1e680000, FCVTPS, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTPS <Xd>, <Dn>\n\t{0xfffffc00, 0x9e680000, FCVTPS, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTPS <V><d>, <V><n>\n\t{0xffbffc00, 0x5ea1a800, FCVTPS, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTPS <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0ea1a800, FCVTPS, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCVTPU <Wd>, <Sn>\n\t{0xfffffc00, 0x1e290000, FCVTPU, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTPU <Xd>, <Sn>\n\t{0xfffffc00, 0x9e290000, FCVTPU, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTPU <Wd>, <Dn>\n\t{0xfffffc00, 0x1e690000, FCVTPU, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTPU <Xd>, <Dn>\n\t{0xfffffc00, 0x9e690000, FCVTPU, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTPU <V><d>, <V><n>\n\t{0xffbffc00, 0x7ea1a800, FCVTPU, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTPU <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2ea1a800, FCVTPU, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCVTXN <V><d>, <V><n>\n\t{0xffbffc00, 0x7e216800, FCVTXN, instArgs{arg_Vd_22_1__S_1, arg_Vn_22_1__D_1}, nil},\n\t// FCVTXN <Vd>.<tb>, <Vn>.<ta>\n\t{0xffbffc00, 0x2e216800, FCVTXN, instArgs{arg_Vd_arrangement_sz_Q___2S_10__4S_11, arg_Vn_arrangement_sz___2D_1}, nil},\n\t// FCVTXN2 <Vd>.<tb>, <Vn>.<ta>\n\t{0xffbffc00, 0x6e216800, FCVTXN2, instArgs{arg_Vd_arrangement_sz_Q___2S_10__4S_11, arg_Vn_arrangement_sz___2D_1}, nil},\n\t// FCVTZS <Wd>, <Sn>, #<fbits>\n\t{0xffff0000, 0x1e180000, FCVTZS, instArgs{arg_Wd, arg_Sn, arg_immediate_fbits_min_1_max_32_sub_64_scale}, nil},\n\t// FCVTZS <Xd>, <Sn>, #<fbits>\n\t{0xffff0000, 0x9e180000, FCVTZS, instArgs{arg_Xd, arg_Sn, arg_immediate_fbits_min_1_max_64_sub_64_scale}, nil},\n\t// FCVTZS <Wd>, <Dn>, #<fbits>\n\t{0xffff0000, 0x1e580000, FCVTZS, instArgs{arg_Wd, arg_Dn, arg_immediate_fbits_min_1_max_32_sub_64_scale}, nil},\n\t// FCVTZS <Xd>, <Dn>, #<fbits>\n\t{0xffff0000, 0x9e580000, FCVTZS, instArgs{arg_Xd, arg_Dn, arg_immediate_fbits_min_1_max_64_sub_64_scale}, nil},\n\t// FCVTZS <Wd>, <Sn>\n\t{0xfffffc00, 0x1e380000, FCVTZS, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTZS <Xd>, <Sn>\n\t{0xfffffc00, 0x9e380000, FCVTZS, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTZS <Wd>, <Dn>\n\t{0xfffffc00, 0x1e780000, FCVTZS, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTZS <Xd>, <Dn>\n\t{0xfffffc00, 0x9e780000, FCVTZS, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTZS <V><d>, <V><n>, #<fbits>\n\t{0xff80fc00, 0x5f00fc00, FCVTZS, instArgs{arg_Vd_19_4__S_4__D_8, arg_Vn_19_4__S_4__D_8, arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__64UIntimmhimmb_4__128UIntimmhimmb_8}, fcvtzs_asisdshf_c_cond},\n\t// FCVTZS <Vd>.<t>, <Vn>.<t>, #<fbits>\n\t{0xbf80fc00, 0x0f00fc00, FCVTZS, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81, arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__64UIntimmhimmb_4__128UIntimmhimmb_8}, fcvtzs_asimdshf_c_cond},\n\t// FCVTZS <V><d>, <V><n>\n\t{0xffbffc00, 0x5ea1b800, FCVTZS, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTZS <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0ea1b800, FCVTZS, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FCVTZU <Wd>, <Sn>, #<fbits>\n\t{0xffff0000, 0x1e190000, FCVTZU, instArgs{arg_Wd, arg_Sn, arg_immediate_fbits_min_1_max_32_sub_64_scale}, nil},\n\t// FCVTZU <Xd>, <Sn>, #<fbits>\n\t{0xffff0000, 0x9e190000, FCVTZU, instArgs{arg_Xd, arg_Sn, arg_immediate_fbits_min_1_max_64_sub_64_scale}, nil},\n\t// FCVTZU <Wd>, <Dn>, #<fbits>\n\t{0xffff0000, 0x1e590000, FCVTZU, instArgs{arg_Wd, arg_Dn, arg_immediate_fbits_min_1_max_32_sub_64_scale}, nil},\n\t// FCVTZU <Xd>, <Dn>, #<fbits>\n\t{0xffff0000, 0x9e590000, FCVTZU, instArgs{arg_Xd, arg_Dn, arg_immediate_fbits_min_1_max_64_sub_64_scale}, nil},\n\t// FCVTZU <Wd>, <Sn>\n\t{0xfffffc00, 0x1e390000, FCVTZU, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FCVTZU <Xd>, <Sn>\n\t{0xfffffc00, 0x9e390000, FCVTZU, instArgs{arg_Xd, arg_Sn}, nil},\n\t// FCVTZU <Wd>, <Dn>\n\t{0xfffffc00, 0x1e790000, FCVTZU, instArgs{arg_Wd, arg_Dn}, nil},\n\t// FCVTZU <Xd>, <Dn>\n\t{0xfffffc00, 0x9e790000, FCVTZU, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FCVTZU <V><d>, <V><n>, #<fbits>\n\t{0xff80fc00, 0x7f00fc00, FCVTZU, instArgs{arg_Vd_19_4__S_4__D_8, arg_Vn_19_4__S_4__D_8, arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__64UIntimmhimmb_4__128UIntimmhimmb_8}, fcvtzu_asisdshf_c_cond},\n\t// FCVTZU <Vd>.<t>, <Vn>.<t>, #<fbits>\n\t{0xbf80fc00, 0x2f00fc00, FCVTZU, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81, arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__64UIntimmhimmb_4__128UIntimmhimmb_8}, fcvtzu_asimdshf_c_cond},\n\t// FCVTZU <V><d>, <V><n>\n\t{0xffbffc00, 0x7ea1b800, FCVTZU, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FCVTZU <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2ea1b800, FCVTZU, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FDIV <Sd>, <Sn>, <Sm>\n\t{0xffe0fc00, 0x1e201800, FDIV, instArgs{arg_Sd, arg_Sn, arg_Sm}, nil},\n\t// FDIV <Dd>, <Dn>, <Dm>\n\t{0xffe0fc00, 0x1e601800, FDIV, instArgs{arg_Dd, arg_Dn, arg_Dm}, nil},\n\t// FDIV <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2e20fc00, FDIV, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMADD <Sd>, <Sn>, <Sm>, <Sa>\n\t{0xffe08000, 0x1f000000, FMADD, instArgs{arg_Sd, arg_Sn, arg_Sm, arg_Sa}, nil},\n\t// FMADD <Dd>, <Dn>, <Dm>, <Da>\n\t{0xffe08000, 0x1f400000, FMADD, instArgs{arg_Dd, arg_Dn, arg_Dm, arg_Da}, nil},\n\t// FMAX <Sd>, <Sn>, <Sm>\n\t{0xffe0fc00, 0x1e204800, FMAX, instArgs{arg_Sd, arg_Sn, arg_Sm}, nil},\n\t// FMAX <Dd>, <Dn>, <Dm>\n\t{0xffe0fc00, 0x1e604800, FMAX, instArgs{arg_Dd, arg_Dn, arg_Dm}, nil},\n\t// FMAX <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0e20f400, FMAX, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMAXNM <Sd>, <Sn>, <Sm>\n\t{0xffe0fc00, 0x1e206800, FMAXNM, instArgs{arg_Sd, arg_Sn, arg_Sm}, nil},\n\t// FMAXNM <Dd>, <Dn>, <Dm>\n\t{0xffe0fc00, 0x1e606800, FMAXNM, instArgs{arg_Dd, arg_Dn, arg_Dm}, nil},\n\t// FMAXNM <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0e20c400, FMAXNM, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMAXNMP <V><d>, <Vn>.<t>\n\t{0xffbffc00, 0x7e30c800, FMAXNMP, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_arrangement_sz___2S_0__2D_1}, nil},\n\t// FMAXNMP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2e20c400, FMAXNMP, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMAXNMV <V><d>, <Vn>.<t>\n\t{0xbfbffc00, 0x2e30c800, FMAXNMV, instArgs{arg_Vd_22_1__S_0, arg_Vn_arrangement_Q_sz___4S_10}, nil},\n\t// FMAXP <V><d>, <Vn>.<t>\n\t{0xffbffc00, 0x7e30f800, FMAXP, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_arrangement_sz___2S_0__2D_1}, nil},\n\t// FMAXP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2e20f400, FMAXP, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMAXV <V><d>, <Vn>.<t>\n\t{0xbfbffc00, 0x2e30f800, FMAXV, instArgs{arg_Vd_22_1__S_0, arg_Vn_arrangement_Q_sz___4S_10}, nil},\n\t// FMIN <Sd>, <Sn>, <Sm>\n\t{0xffe0fc00, 0x1e205800, FMIN, instArgs{arg_Sd, arg_Sn, arg_Sm}, nil},\n\t// FMIN <Dd>, <Dn>, <Dm>\n\t{0xffe0fc00, 0x1e605800, FMIN, instArgs{arg_Dd, arg_Dn, arg_Dm}, nil},\n\t// FMIN <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0ea0f400, FMIN, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMINNM <Sd>, <Sn>, <Sm>\n\t{0xffe0fc00, 0x1e207800, FMINNM, instArgs{arg_Sd, arg_Sn, arg_Sm}, nil},\n\t// FMINNM <Dd>, <Dn>, <Dm>\n\t{0xffe0fc00, 0x1e607800, FMINNM, instArgs{arg_Dd, arg_Dn, arg_Dm}, nil},\n\t// FMINNM <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0ea0c400, FMINNM, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMINNMP <V><d>, <Vn>.<t>\n\t{0xffbffc00, 0x7eb0c800, FMINNMP, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_arrangement_sz___2S_0__2D_1}, nil},\n\t// FMINNMP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2ea0c400, FMINNMP, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMINNMV <V><d>, <Vn>.<t>\n\t{0xbfbffc00, 0x2eb0c800, FMINNMV, instArgs{arg_Vd_22_1__S_0, arg_Vn_arrangement_Q_sz___4S_10}, nil},\n\t// FMINP <V><d>, <Vn>.<t>\n\t{0xffbffc00, 0x7eb0f800, FMINP, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_arrangement_sz___2S_0__2D_1}, nil},\n\t// FMINP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2ea0f400, FMINP, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMINV <V><d>, <Vn>.<t>\n\t{0xbfbffc00, 0x2eb0f800, FMINV, instArgs{arg_Vd_22_1__S_0, arg_Vn_arrangement_Q_sz___4S_10}, nil},\n\t// FMLA <V><d>, <V><n>, <Vm>.<ts_1>[<index_1>]\n\t{0xff80f400, 0x5f801000, FMLA, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1}, nil},\n\t// FMLA <Vd>.<t>, <Vn>.<t>, <Vm>.<ts>[<index>]\n\t{0xbf80f400, 0x0f801000, FMLA, instArgs{arg_Vd_arrangement_Q_sz___2S_00__4S_10__2D_11, arg_Vn_arrangement_Q_sz___2S_00__4S_10__2D_11, arg_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1}, nil},\n\t// FMLA <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0e20cc00, FMLA, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMLS <V><d>, <V><n>, <Vm>.<ts_1>[<index_1>]\n\t{0xff80f400, 0x5f805000, FMLS, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1}, nil},\n\t// FMLS <Vd>.<t>, <Vn>.<t>, <Vm>.<ts>[<index>]\n\t{0xbf80f400, 0x0f805000, FMLS, instArgs{arg_Vd_arrangement_Q_sz___2S_00__4S_10__2D_11, arg_Vn_arrangement_Q_sz___2S_00__4S_10__2D_11, arg_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1}, nil},\n\t// FMLS <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0ea0cc00, FMLS, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMOV <Sd>, <Wn>\n\t{0xfffffc00, 0x1e270000, FMOV, instArgs{arg_Sd, arg_Wn}, nil},\n\t// FMOV <Wd>, <Sn>\n\t{0xfffffc00, 0x1e260000, FMOV, instArgs{arg_Wd, arg_Sn}, nil},\n\t// FMOV <Dd>, <Xn>\n\t{0xfffffc00, 0x9e670000, FMOV, instArgs{arg_Dd, arg_Xn}, nil},\n\t// FMOV <Vd>.D[1], <Xn>\n\t{0xfffffc00, 0x9eaf0000, FMOV, instArgs{arg_Vd_arrangement_D_index__1, arg_Xn}, nil},\n\t// FMOV <Xd>, <Dn>\n\t{0xfffffc00, 0x9e660000, FMOV, instArgs{arg_Xd, arg_Dn}, nil},\n\t// FMOV <Xd>, <Vn>.D[1]\n\t{0xfffffc00, 0x9eae0000, FMOV, instArgs{arg_Xd, arg_Vn_arrangement_D_index__1}, nil},\n\t// FMOV <Sd>, <Sn>\n\t{0xfffffc00, 0x1e204000, FMOV, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FMOV <Dd>, <Dn>\n\t{0xfffffc00, 0x1e604000, FMOV, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FMOV <Sd>, #<imm>\n\t{0xffe01fe0, 0x1e201000, FMOV, instArgs{arg_Sd, arg_immediate_exp_3_pre_4_imm8}, nil},\n\t// FMOV <Dd>, #<imm>\n\t{0xffe01fe0, 0x1e601000, FMOV, instArgs{arg_Dd, arg_immediate_exp_3_pre_4_imm8}, nil},\n\t// FMOV <Vd>.<t>, #<imm>\n\t{0xbff8fc00, 0x0f00f400, FMOV, instArgs{arg_Vd_arrangement_Q___2S_0__4S_1, arg_immediate_exp_3_pre_4_a_b_c_d_e_f_g_h}, nil},\n\t// FMOV <Vd>.2D, #<imm>\n\t{0xfff8fc00, 0x6f00f400, FMOV, instArgs{arg_Vd_arrangement_2D, arg_immediate_exp_3_pre_4_a_b_c_d_e_f_g_h}, nil},\n\t// FMSUB <Sd>, <Sn>, <Sm>, <Sa>\n\t{0xffe08000, 0x1f008000, FMSUB, instArgs{arg_Sd, arg_Sn, arg_Sm, arg_Sa}, nil},\n\t// FMSUB <Dd>, <Dn>, <Dm>, <Da>\n\t{0xffe08000, 0x1f408000, FMSUB, instArgs{arg_Dd, arg_Dn, arg_Dm, arg_Da}, nil},\n\t// FMUL <V><d>, <V><n>, <Vm>.<ts_1>[<index_1>]\n\t{0xff80f400, 0x5f809000, FMUL, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1}, nil},\n\t// FMUL <Vd>.<t>, <Vn>.<t>, <Vm>.<ts>[<index>]\n\t{0xbf80f400, 0x0f809000, FMUL, instArgs{arg_Vd_arrangement_Q_sz___2S_00__4S_10__2D_11, arg_Vn_arrangement_Q_sz___2S_00__4S_10__2D_11, arg_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1}, nil},\n\t// FMUL <Sd>, <Sn>, <Sm>\n\t{0xffe0fc00, 0x1e200800, FMUL, instArgs{arg_Sd, arg_Sn, arg_Sm}, nil},\n\t// FMUL <Dd>, <Dn>, <Dm>\n\t{0xffe0fc00, 0x1e600800, FMUL, instArgs{arg_Dd, arg_Dn, arg_Dm}, nil},\n\t// FMUL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x2e20dc00, FMUL, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMULX <V><d>, <V><n>, <V><m>\n\t{0xffa0fc00, 0x5e20dc00, FMULX, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_22_1__S_0__D_1}, nil},\n\t// FMULX <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0e20dc00, FMULX, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FMULX <V><d>, <V><n>, <Vm>.<ts_1>[<index_1>]\n\t{0xff80f400, 0x7f809000, FMULX, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1}, nil},\n\t// FMULX <Vd>.<t>, <Vn>.<t>, <Vm>.<ts>[<index>]\n\t{0xbf80f400, 0x2f809000, FMULX, instArgs{arg_Vd_arrangement_Q_sz___2S_00__4S_10__2D_11, arg_Vn_arrangement_Q_sz___2S_00__4S_10__2D_11, arg_Vm_arrangement_sz___S_0__D_1_index__sz_L_H__HL_00__H_10_1}, nil},\n\t// FNEG <Sd>, <Sn>\n\t{0xfffffc00, 0x1e214000, FNEG, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FNEG <Dd>, <Dn>\n\t{0xfffffc00, 0x1e614000, FNEG, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FNEG <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2ea0f800, FNEG, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FNMADD <Sd>, <Sn>, <Sm>, <Sa>\n\t{0xffe08000, 0x1f200000, FNMADD, instArgs{arg_Sd, arg_Sn, arg_Sm, arg_Sa}, nil},\n\t// FNMADD <Dd>, <Dn>, <Dm>, <Da>\n\t{0xffe08000, 0x1f600000, FNMADD, instArgs{arg_Dd, arg_Dn, arg_Dm, arg_Da}, nil},\n\t// FNMSUB <Sd>, <Sn>, <Sm>, <Sa>\n\t{0xffe08000, 0x1f208000, FNMSUB, instArgs{arg_Sd, arg_Sn, arg_Sm, arg_Sa}, nil},\n\t// FNMSUB <Dd>, <Dn>, <Dm>, <Da>\n\t{0xffe08000, 0x1f608000, FNMSUB, instArgs{arg_Dd, arg_Dn, arg_Dm, arg_Da}, nil},\n\t// FNMUL <Sd>, <Sn>, <Sm>\n\t{0xffe0fc00, 0x1e208800, FNMUL, instArgs{arg_Sd, arg_Sn, arg_Sm}, nil},\n\t// FNMUL <Dd>, <Dn>, <Dm>\n\t{0xffe0fc00, 0x1e608800, FNMUL, instArgs{arg_Dd, arg_Dn, arg_Dm}, nil},\n\t// FRECPE <V><d>, <V><n>\n\t{0xffbffc00, 0x5ea1d800, FRECPE, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FRECPE <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0ea1d800, FRECPE, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRECPS <V><d>, <V><n>, <V><m>\n\t{0xffa0fc00, 0x5e20fc00, FRECPS, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_22_1__S_0__D_1}, nil},\n\t// FRECPS <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0e20fc00, FRECPS, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRECPX <V><d>, <V><n>\n\t{0xffbffc00, 0x5ea1f800, FRECPX, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FRINTA <Sd>, <Sn>\n\t{0xfffffc00, 0x1e264000, FRINTA, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FRINTA <Dd>, <Dn>\n\t{0xfffffc00, 0x1e664000, FRINTA, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FRINTA <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2e218800, FRINTA, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRINTI <Sd>, <Sn>\n\t{0xfffffc00, 0x1e27c000, FRINTI, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FRINTI <Dd>, <Dn>\n\t{0xfffffc00, 0x1e67c000, FRINTI, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FRINTI <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2ea19800, FRINTI, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRINTM <Sd>, <Sn>\n\t{0xfffffc00, 0x1e254000, FRINTM, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FRINTM <Dd>, <Dn>\n\t{0xfffffc00, 0x1e654000, FRINTM, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FRINTM <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0e219800, FRINTM, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRINTN <Sd>, <Sn>\n\t{0xfffffc00, 0x1e244000, FRINTN, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FRINTN <Dd>, <Dn>\n\t{0xfffffc00, 0x1e644000, FRINTN, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FRINTN <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0e218800, FRINTN, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRINTP <Sd>, <Sn>\n\t{0xfffffc00, 0x1e24c000, FRINTP, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FRINTP <Dd>, <Dn>\n\t{0xfffffc00, 0x1e64c000, FRINTP, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FRINTP <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0ea18800, FRINTP, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRINTX <Sd>, <Sn>\n\t{0xfffffc00, 0x1e274000, FRINTX, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FRINTX <Dd>, <Dn>\n\t{0xfffffc00, 0x1e674000, FRINTX, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FRINTX <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2e219800, FRINTX, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRINTZ <Sd>, <Sn>\n\t{0xfffffc00, 0x1e25c000, FRINTZ, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FRINTZ <Dd>, <Dn>\n\t{0xfffffc00, 0x1e65c000, FRINTZ, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FRINTZ <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0ea19800, FRINTZ, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRSQRTE <V><d>, <V><n>\n\t{0xffbffc00, 0x7ea1d800, FRSQRTE, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// FRSQRTE <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2ea1d800, FRSQRTE, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FRSQRTS <V><d>, <V><n>, <V><m>\n\t{0xffa0fc00, 0x5ea0fc00, FRSQRTS, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1, arg_Vm_22_1__S_0__D_1}, nil},\n\t// FRSQRTS <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0ea0fc00, FRSQRTS, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FSQRT <Sd>, <Sn>\n\t{0xfffffc00, 0x1e21c000, FSQRT, instArgs{arg_Sd, arg_Sn}, nil},\n\t// FSQRT <Dd>, <Dn>\n\t{0xfffffc00, 0x1e61c000, FSQRT, instArgs{arg_Dd, arg_Dn}, nil},\n\t// FSQRT <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2ea1f800, FSQRT, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// FSUB <Sd>, <Sn>, <Sm>\n\t{0xffe0fc00, 0x1e203800, FSUB, instArgs{arg_Sd, arg_Sn, arg_Sm}, nil},\n\t// FSUB <Dd>, <Dn>, <Dm>\n\t{0xffe0fc00, 0x1e603800, FSUB, instArgs{arg_Dd, arg_Dn, arg_Dm}, nil},\n\t// FSUB <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfa0fc00, 0x0ea0d400, FSUB, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vm_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// MOV <Vd>.<ts>[<index1>], <Vn>.<ts>[<index2>]\n\t{0xffe08400, 0x6e000400, MOV, instArgs{arg_Vd_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1, arg_Vn_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5_imm4__imm4lt30gt_1__imm4lt31gt_2__imm4lt32gt_4__imm4lt3gt_8_1}, nil},\n\t// INS <Vd>.<ts>[<index1>], <Vn>.<ts>[<index2>]\n\t{0xffe08400, 0x6e000400, INS, instArgs{arg_Vd_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1, arg_Vn_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5_imm4__imm4lt30gt_1__imm4lt31gt_2__imm4lt32gt_4__imm4lt3gt_8_1}, nil},\n\t// MOV <Vd>.<ts>[<index>], <R><n>\n\t{0xffe0fc00, 0x4e001c00, MOV, instArgs{arg_Vd_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1, arg_Rn_16_5__W_1__W_2__W_4__X_8}, nil},\n\t// INS <Vd>.<ts>[<index>], <R><n>\n\t{0xffe0fc00, 0x4e001c00, INS, instArgs{arg_Vd_arrangement_imm5___B_1__H_2__S_4__D_8_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4__imm5lt4gt_8_1, arg_Rn_16_5__W_1__W_2__W_4__X_8}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c407000, LD1, instArgs{arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c40a000, LD1, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c406000, LD1, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c402000, LD1, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0cdf7000, LD1, instArgs{arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Q__8_0__16_1}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0cc07000, LD1, instArgs{arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>], #<imm_1>\n\t{0xbffff000, 0x0cdfa000, LD1, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Q__16_0__32_1}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0cc0a000, LD1, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>], #<imm_2>\n\t{0xbffff000, 0x0cdf6000, LD1, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Q__24_0__48_1}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0cc06000, LD1, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>], #<imm_3>\n\t{0xbffff000, 0x0cdf2000, LD1, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Q__32_0__64_1}, nil},\n\t// LD1 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0cc02000, LD1, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD1 <Vt>.B[<index>], [<Xn|SP>]\n\t{0xbfffe000, 0x0d400000, LD1, instArgs{arg_Vt_1_arrangement_B_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// LD1 <Vt>.H[<index_2>], [<Xn|SP>]\n\t{0xbfffe400, 0x0d404000, LD1, instArgs{arg_Vt_1_arrangement_H_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// LD1 <Vt>.S[<index_3>], [<Xn|SP>]\n\t{0xbfffec00, 0x0d408000, LD1, instArgs{arg_Vt_1_arrangement_S_index__Q_S_1, arg_Xns_mem_offset}, nil},\n\t// LD1 <Vt>.D[<index_1>], [<Xn|SP>]\n\t{0xbffffc00, 0x0d408400, LD1, instArgs{arg_Vt_1_arrangement_D_index__Q_1, arg_Xns_mem_offset}, nil},\n\t// LD1 <Vt>.B[<index>], [<Xn|SP>], #1\n\t{0xbfffe000, 0x0ddf0000, LD1, instArgs{arg_Vt_1_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_1}, nil},\n\t// LD1 <Vt>.B[<index>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e000, 0x0dc00000, LD1, instArgs{arg_Vt_1_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD1 <Vt>.H[<index_2>], [<Xn|SP>], #2\n\t{0xbfffe400, 0x0ddf4000, LD1, instArgs{arg_Vt_1_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_2}, nil},\n\t// LD1 <Vt>.H[<index_2>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e400, 0x0dc04000, LD1, instArgs{arg_Vt_1_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD1 <Vt>.S[<index_3>], [<Xn|SP>], #4\n\t{0xbfffec00, 0x0ddf8000, LD1, instArgs{arg_Vt_1_arrangement_S_index__Q_S_1, arg_Xns_mem_post_fixedimm_4}, nil},\n\t// LD1 <Vt>.S[<index_3>], [<Xn|SP>], #<Xm>\n\t{0xbfe0ec00, 0x0dc08000, LD1, instArgs{arg_Vt_1_arrangement_S_index__Q_S_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD1 <Vt>.D[<index_1>], [<Xn|SP>], #8\n\t{0xbffffc00, 0x0ddf8400, LD1, instArgs{arg_Vt_1_arrangement_D_index__Q_1, arg_Xns_mem_post_fixedimm_8}, nil},\n\t// LD1 <Vt>.D[<index_1>], [<Xn|SP>], #<Xm>\n\t{0xbfe0fc00, 0x0dc08400, LD1, instArgs{arg_Vt_1_arrangement_D_index__Q_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD1R <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0d40c000, LD1R, instArgs{arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD1R <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0ddfc000, LD1R, instArgs{arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_size__1_0__2_1__4_2__8_3}, nil},\n\t// LD1R <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0dc0c000, LD1R, instArgs{arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD2 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c408000, LD2, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD2 <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0cdf8000, LD2, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Q__16_0__32_1}, nil},\n\t// LD2 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0cc08000, LD2, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD2 <Vt>.B[<index>], [<Xn|SP>]\n\t{0xbfffe000, 0x0d600000, LD2, instArgs{arg_Vt_2_arrangement_B_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// LD2 <Vt>.H[<index_2>], [<Xn|SP>]\n\t{0xbfffe400, 0x0d604000, LD2, instArgs{arg_Vt_2_arrangement_H_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// LD2 <Vt>.S[<index_3>], [<Xn|SP>]\n\t{0xbfffec00, 0x0d608000, LD2, instArgs{arg_Vt_2_arrangement_S_index__Q_S_1, arg_Xns_mem_offset}, nil},\n\t// LD2 <Vt>.D[<index_1>], [<Xn|SP>]\n\t{0xbffffc00, 0x0d608400, LD2, instArgs{arg_Vt_2_arrangement_D_index__Q_1, arg_Xns_mem_offset}, nil},\n\t// LD2 <Vt>.B[<index>], [<Xn|SP>], #2\n\t{0xbfffe000, 0x0dff0000, LD2, instArgs{arg_Vt_2_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_2}, nil},\n\t// LD2 <Vt>.B[<index>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e000, 0x0de00000, LD2, instArgs{arg_Vt_2_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD2 <Vt>.H[<index_2>], [<Xn|SP>], #4\n\t{0xbfffe400, 0x0dff4000, LD2, instArgs{arg_Vt_2_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_4}, nil},\n\t// LD2 <Vt>.H[<index_2>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e400, 0x0de04000, LD2, instArgs{arg_Vt_2_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD2 <Vt>.S[<index_3>], [<Xn|SP>], #8\n\t{0xbfffec00, 0x0dff8000, LD2, instArgs{arg_Vt_2_arrangement_S_index__Q_S_1, arg_Xns_mem_post_fixedimm_8}, nil},\n\t// LD2 <Vt>.S[<index_3>], [<Xn|SP>], #<Xm>\n\t{0xbfe0ec00, 0x0de08000, LD2, instArgs{arg_Vt_2_arrangement_S_index__Q_S_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD2 <Vt>.D[<index_1>], [<Xn|SP>], #16\n\t{0xbffffc00, 0x0dff8400, LD2, instArgs{arg_Vt_2_arrangement_D_index__Q_1, arg_Xns_mem_post_fixedimm_16}, nil},\n\t// LD2 <Vt>.D[<index_1>], [<Xn|SP>], #<Xm>\n\t{0xbfe0fc00, 0x0de08400, LD2, instArgs{arg_Vt_2_arrangement_D_index__Q_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD2R <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0d60c000, LD2R, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD2R <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0dffc000, LD2R, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_size__2_0__4_1__8_2__16_3}, nil},\n\t// LD2R <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0de0c000, LD2R, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD3 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c404000, LD3, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD3 <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0cdf4000, LD3, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Q__24_0__48_1}, nil},\n\t// LD3 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0cc04000, LD3, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD3 <Vt>.B[<index>], [<Xn|SP>]\n\t{0xbfffe000, 0x0d402000, LD3, instArgs{arg_Vt_3_arrangement_B_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// LD3 <Vt>.H[<index_2>], [<Xn|SP>]\n\t{0xbfffe400, 0x0d406000, LD3, instArgs{arg_Vt_3_arrangement_H_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// LD3 <Vt>.S[<index_3>], [<Xn|SP>]\n\t{0xbfffec00, 0x0d40a000, LD3, instArgs{arg_Vt_3_arrangement_S_index__Q_S_1, arg_Xns_mem_offset}, nil},\n\t// LD3 <Vt>.D[<index_1>], [<Xn|SP>]\n\t{0xbffffc00, 0x0d40a400, LD3, instArgs{arg_Vt_3_arrangement_D_index__Q_1, arg_Xns_mem_offset}, nil},\n\t// LD3 <Vt>.B[<index>], [<Xn|SP>], #3\n\t{0xbfffe000, 0x0ddf2000, LD3, instArgs{arg_Vt_3_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_3}, nil},\n\t// LD3 <Vt>.B[<index>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e000, 0x0dc02000, LD3, instArgs{arg_Vt_3_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD3 <Vt>.H[<index_2>], [<Xn|SP>], #6\n\t{0xbfffe400, 0x0ddf6000, LD3, instArgs{arg_Vt_3_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_6}, nil},\n\t// LD3 <Vt>.H[<index_2>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e400, 0x0dc06000, LD3, instArgs{arg_Vt_3_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD3 <Vt>.S[<index_3>], [<Xn|SP>], #12\n\t{0xbfffec00, 0x0ddfa000, LD3, instArgs{arg_Vt_3_arrangement_S_index__Q_S_1, arg_Xns_mem_post_fixedimm_12}, nil},\n\t// LD3 <Vt>.S[<index_3>], [<Xn|SP>], #<Xm>\n\t{0xbfe0ec00, 0x0dc0a000, LD3, instArgs{arg_Vt_3_arrangement_S_index__Q_S_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD3 <Vt>.D[<index_1>], [<Xn|SP>], #24\n\t{0xbffffc00, 0x0ddfa400, LD3, instArgs{arg_Vt_3_arrangement_D_index__Q_1, arg_Xns_mem_post_fixedimm_24}, nil},\n\t// LD3 <Vt>.D[<index_1>], [<Xn|SP>], #<Xm>\n\t{0xbfe0fc00, 0x0dc0a400, LD3, instArgs{arg_Vt_3_arrangement_D_index__Q_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD3R <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0d40e000, LD3R, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD3R <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0ddfe000, LD3R, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_size__3_0__6_1__12_2__24_3}, nil},\n\t// LD3R <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0dc0e000, LD3R, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD4 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c400000, LD4, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD4 <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0cdf0000, LD4, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Q__32_0__64_1}, nil},\n\t// LD4 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0cc00000, LD4, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LD4 <Vt>.B[<index>], [<Xn|SP>]\n\t{0xbfffe000, 0x0d602000, LD4, instArgs{arg_Vt_4_arrangement_B_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// LD4 <Vt>.H[<index_2>], [<Xn|SP>]\n\t{0xbfffe400, 0x0d606000, LD4, instArgs{arg_Vt_4_arrangement_H_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// LD4 <Vt>.S[<index_3>], [<Xn|SP>]\n\t{0xbfffec00, 0x0d60a000, LD4, instArgs{arg_Vt_4_arrangement_S_index__Q_S_1, arg_Xns_mem_offset}, nil},\n\t// LD4 <Vt>.D[<index_1>], [<Xn|SP>]\n\t{0xbffffc00, 0x0d60a400, LD4, instArgs{arg_Vt_4_arrangement_D_index__Q_1, arg_Xns_mem_offset}, nil},\n\t// LD4 <Vt>.B[<index>], [<Xn|SP>], #4\n\t{0xbfffe000, 0x0dff2000, LD4, instArgs{arg_Vt_4_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_4}, nil},\n\t// LD4 <Vt>.B[<index>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e000, 0x0de02000, LD4, instArgs{arg_Vt_4_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD4 <Vt>.H[<index_2>], [<Xn|SP>], #8\n\t{0xbfffe400, 0x0dff6000, LD4, instArgs{arg_Vt_4_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_8}, nil},\n\t// LD4 <Vt>.H[<index_2>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e400, 0x0de06000, LD4, instArgs{arg_Vt_4_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD4 <Vt>.S[<index_3>], [<Xn|SP>], #16\n\t{0xbfffec00, 0x0dffa000, LD4, instArgs{arg_Vt_4_arrangement_S_index__Q_S_1, arg_Xns_mem_post_fixedimm_16}, nil},\n\t// LD4 <Vt>.S[<index_3>], [<Xn|SP>], #<Xm>\n\t{0xbfe0ec00, 0x0de0a000, LD4, instArgs{arg_Vt_4_arrangement_S_index__Q_S_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD4 <Vt>.D[<index_1>], [<Xn|SP>], #32\n\t{0xbffffc00, 0x0dffa400, LD4, instArgs{arg_Vt_4_arrangement_D_index__Q_1, arg_Xns_mem_post_fixedimm_32}, nil},\n\t// LD4 <Vt>.D[<index_1>], [<Xn|SP>], #<Xm>\n\t{0xbfe0fc00, 0x0de0a400, LD4, instArgs{arg_Vt_4_arrangement_D_index__Q_1, arg_Xns_mem_post_Xm}, nil},\n\t// LD4R <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0d60e000, LD4R, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// LD4R <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0dffe000, LD4R, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_size__4_0__8_1__16_2__32_3}, nil},\n\t// LD4R <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0de0e000, LD4R, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// LDNP <St>, <St2>, [<Xn|SP>{, #<imm_2>}]\n\t{0xffc00000, 0x2c400000, LDNP, instArgs{arg_St, arg_St2, arg_Xns_mem_optional_imm7_4_signed}, nil},\n\t// LDNP <Dt>, <Dt2>, [<Xn|SP>{, #<imm>}]\n\t{0xffc00000, 0x6c400000, LDNP, instArgs{arg_Dt, arg_Dt2, arg_Xns_mem_optional_imm7_8_signed}, nil},\n\t// LDNP <Qt>, <Qt2>, [<Xn|SP>{, #<imm_1>}]\n\t{0xffc00000, 0xac400000, LDNP, instArgs{arg_Qt, arg_Qt2, arg_Xns_mem_optional_imm7_16_signed}, nil},\n\t// LDP <St>, <St2>, [<Xn|SP>], #<imm_5>\n\t{0xffc00000, 0x2cc00000, LDP, instArgs{arg_St, arg_St2, arg_Xns_mem_post_imm7_4_signed}, nil},\n\t// LDP <Dt>, <Dt2>, [<Xn|SP>], #<imm_1>\n\t{0xffc00000, 0x6cc00000, LDP, instArgs{arg_Dt, arg_Dt2, arg_Xns_mem_post_imm7_8_signed}, nil},\n\t// LDP <Qt>, <Qt2>, [<Xn|SP>], #<imm_3>\n\t{0xffc00000, 0xacc00000, LDP, instArgs{arg_Qt, arg_Qt2, arg_Xns_mem_post_imm7_16_signed}, nil},\n\t// LDP <St>, <St2>, [<Xn|SP>{, #<imm_5>}]!\n\t{0xffc00000, 0x2dc00000, LDP, instArgs{arg_St, arg_St2, arg_Xns_mem_wb_imm7_4_signed}, nil},\n\t// LDP <Dt>, <Dt2>, [<Xn|SP>{, #<imm_1>}]!\n\t{0xffc00000, 0x6dc00000, LDP, instArgs{arg_Dt, arg_Dt2, arg_Xns_mem_wb_imm7_8_signed}, nil},\n\t// LDP <Qt>, <Qt2>, [<Xn|SP>{, #<imm_3>}]!\n\t{0xffc00000, 0xadc00000, LDP, instArgs{arg_Qt, arg_Qt2, arg_Xns_mem_wb_imm7_16_signed}, nil},\n\t// LDP <St>, <St2>, [<Xn|SP>{, #<imm_4>}]\n\t{0xffc00000, 0x2d400000, LDP, instArgs{arg_St, arg_St2, arg_Xns_mem_optional_imm7_4_signed}, nil},\n\t// LDP <Dt>, <Dt2>, [<Xn|SP>{, #<imm>}]\n\t{0xffc00000, 0x6d400000, LDP, instArgs{arg_Dt, arg_Dt2, arg_Xns_mem_optional_imm7_8_signed}, nil},\n\t// LDP <Qt>, <Qt2>, [<Xn|SP>{, #<imm_2>}]\n\t{0xffc00000, 0xad400000, LDP, instArgs{arg_Qt, arg_Qt2, arg_Xns_mem_optional_imm7_16_signed}, nil},\n\t// LDR <Bt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x3c400400, LDR, instArgs{arg_Bt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDR <Ht>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x7c400400, LDR, instArgs{arg_Ht, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDR <St>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0xbc400400, LDR, instArgs{arg_St, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDR <Dt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0xfc400400, LDR, instArgs{arg_Dt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDR <Qt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x3cc00400, LDR, instArgs{arg_Qt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// LDR <Bt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x3c400c00, LDR, instArgs{arg_Bt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDR <Ht>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x7c400c00, LDR, instArgs{arg_Ht, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDR <St>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0xbc400c00, LDR, instArgs{arg_St, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDR <Dt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0xfc400c00, LDR, instArgs{arg_Dt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDR <Qt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x3cc00c00, LDR, instArgs{arg_Qt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// LDR <Bt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x3d400000, LDR, instArgs{arg_Bt, arg_Xns_mem_optional_imm12_1_unsigned}, nil},\n\t// LDR <Ht>, [<Xn|SP>{, #<pimm_2>}]\n\t{0xffc00000, 0x7d400000, LDR, instArgs{arg_Ht, arg_Xns_mem_optional_imm12_2_unsigned}, nil},\n\t// LDR <St>, [<Xn|SP>{, #<pimm_4>}]\n\t{0xffc00000, 0xbd400000, LDR, instArgs{arg_St, arg_Xns_mem_optional_imm12_4_unsigned}, nil},\n\t// LDR <Dt>, [<Xn|SP>{, #<pimm_1>}]\n\t{0xffc00000, 0xfd400000, LDR, instArgs{arg_Dt, arg_Xns_mem_optional_imm12_8_unsigned}, nil},\n\t// LDR <Qt>, [<Xn|SP>{, #<pimm_3>}]\n\t{0xffc00000, 0x3dc00000, LDR, instArgs{arg_Qt, arg_Xns_mem_optional_imm12_16_unsigned}, nil},\n\t// LDR <St>, <label>\n\t{0xff000000, 0x1c000000, LDR, instArgs{arg_St, arg_slabel_imm19_2}, nil},\n\t// LDR <Dt>, <label>\n\t{0xff000000, 0x5c000000, LDR, instArgs{arg_Dt, arg_slabel_imm19_2}, nil},\n\t// LDR <Qt>, <label>\n\t{0xff000000, 0x9c000000, LDR, instArgs{arg_Qt, arg_slabel_imm19_2}, nil},\n\t// LDR <Bt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x3c600800, LDR, instArgs{arg_Bt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__absent_0__0_1}, nil},\n\t// LDR <Ht>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x7c600800, LDR, instArgs{arg_Ht, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__1_1}, nil},\n\t// LDR <St>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xbc600800, LDR, instArgs{arg_St, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__2_1}, nil},\n\t// LDR <Dt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xfc600800, LDR, instArgs{arg_Dt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__3_1}, nil},\n\t// LDR <Qt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x3ce00800, LDR, instArgs{arg_Qt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__4_1}, nil},\n\t// LDUR <Bt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x3c400000, LDUR, instArgs{arg_Bt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDUR <Ht>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x7c400000, LDUR, instArgs{arg_Ht, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDUR <St>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xbc400000, LDUR, instArgs{arg_St, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDUR <Dt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xfc400000, LDUR, instArgs{arg_Dt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// LDUR <Qt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x3cc00000, LDUR, instArgs{arg_Qt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// MLA <Vd>.<t>, <Vn>.<t>, <Vm>.<ts>[<index>]\n\t{0xbf00f400, 0x2f000000, MLA, instArgs{arg_Vd_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// MLA <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e209400, MLA, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// MLS <Vd>.<t>, <Vn>.<t>, <Vm>.<ts>[<index>]\n\t{0xbf00f400, 0x2f004000, MLS, instArgs{arg_Vd_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// MLS <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e209400, MLS, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// MOV <Wd>, <Vn>.S[<index>]\n\t{0xffe0fc00, 0x0e003c00, MOV, instArgs{arg_Wd, arg_Vn_arrangement_S_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4_1}, mov_umov_asimdins_w_w_cond},\n\t// UMOV <Wd>, <Vn>.<ts>[<index>]\n\t{0xffe0fc00, 0x0e003c00, UMOV, instArgs{arg_Wd, arg_Vn_arrangement_imm5___B_1__H_2__S_4_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4_1}, nil},\n\t// MOV <Xd>, <Vn>.D[<index_1>]\n\t{0xffe0fc00, 0x4e003c00, MOV, instArgs{arg_Xd, arg_Vn_arrangement_D_index__imm5_1}, mov_umov_asimdins_x_x_cond},\n\t// UMOV <Xd>, <Vn>.<ts_1>[<index_1>]\n\t{0xffe0fc00, 0x4e003c00, UMOV, instArgs{arg_Xd, arg_Vn_arrangement_imm5___D_8_index__imm5_1}, nil},\n\t// MOV <Vd>.<t>, <Vn>.<t>\n\t{0xbfe0fc00, 0x0ea01c00, MOV, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1}, mov_orr_asimdsame_only_cond},\n\t// ORR <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfe0fc00, 0x0ea01c00, ORR, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// MOVI <Vd>.<t_2>, #<imm8>{, LSL #0}\n\t{0xbff8fc00, 0x0f00e400, MOVI, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_immediate_OptLSLZero__a_b_c_d_e_f_g_h}, nil},\n\t// MOVI <Vd>.<t>, #<imm8>{, LSL #<amount>}\n\t{0xbff8dc00, 0x0f008400, MOVI, instArgs{arg_Vd_arrangement_Q___4H_0__8H_1, arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1}, nil},\n\t// MOVI <Vd>.<t_1>, #<imm8>{, LSL #<amount>}\n\t{0xbff89c00, 0x0f000400, MOVI, instArgs{arg_Vd_arrangement_Q___2S_0__4S_1, arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1__16_2__24_3}, nil},\n\t// MOVI <Vd>.<t_1>, #<imm8>, MSL #<amount>\n\t{0xbff8ec00, 0x0f00c400, MOVI, instArgs{arg_Vd_arrangement_Q___2S_0__4S_1, arg_immediate_MSL__a_b_c_d_e_f_g_h_cmode__8_0__16_1}, nil},\n\t// MOVI <Dd>, #<imm>\n\t{0xfff8fc00, 0x2f00e400, MOVI, instArgs{arg_Dd, arg_immediate_8x8_a_b_c_d_e_f_g_h}, nil},\n\t// MOVI <Vd>.2D, #<imm>\n\t{0xfff8fc00, 0x6f00e400, MOVI, instArgs{arg_Vd_arrangement_2D, arg_immediate_8x8_a_b_c_d_e_f_g_h}, nil},\n\t// MUL <Vd>.<t>, <Vn>.<t>, <Vm>.<ts>[<index>]\n\t{0xbf00f400, 0x0f008000, MUL, instArgs{arg_Vd_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// MUL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e209c00, MUL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// MVN <Vd>.<t>, <Vn>.<t>\n\t{0xbffffc00, 0x2e205800, MVN, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1}, nil},\n\t// NOT <Vd>.<t>, <Vn>.<t>\n\t{0xbffffc00, 0x2e205800, NOT, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1}, nil},\n\t// MVNI <Vd>.<t>, #<imm8>{, LSL #<amount>}\n\t{0xbff8dc00, 0x2f008400, MVNI, instArgs{arg_Vd_arrangement_Q___4H_0__8H_1, arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1}, nil},\n\t// MVNI <Vd>.<t_1>, #<imm8>{, LSL #<amount>}\n\t{0xbff89c00, 0x2f000400, MVNI, instArgs{arg_Vd_arrangement_Q___2S_0__4S_1, arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1__16_2__24_3}, nil},\n\t// MVNI <Vd>.<t_1>, #<imm8>, MSL #<amount>\n\t{0xbff8ec00, 0x2f00c400, MVNI, instArgs{arg_Vd_arrangement_Q___2S_0__4S_1, arg_immediate_MSL__a_b_c_d_e_f_g_h_cmode__8_0__16_1}, nil},\n\t// NEG <V><d>, <V><n>\n\t{0xff3ffc00, 0x7e20b800, NEG, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3}, nil},\n\t// NEG <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x2e20b800, NEG, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// ORN <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbfe0fc00, 0x0ee01c00, ORN, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// ORR <Vd>.<t>, #<imm8>{, LSL #<amount>}\n\t{0xbff8dc00, 0x0f009400, ORR, instArgs{arg_Vd_arrangement_Q___4H_0__8H_1, arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1}, nil},\n\t// ORR <Vd>.<t_1>, #<imm8>{, LSL #<amount>}\n\t{0xbff89c00, 0x0f001400, ORR, instArgs{arg_Vd_arrangement_Q___2S_0__4S_1, arg_immediate_OptLSL__a_b_c_d_e_f_g_h_cmode__0_0__8_1__16_2__24_3}, nil},\n\t// PMUL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e209c00, PMUL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01, arg_Vn_arrangement_size_Q___8B_00__16B_01, arg_Vm_arrangement_size_Q___8B_00__16B_01}, nil},\n\t// PMULL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e20e000, PMULL, instArgs{arg_Vd_arrangement_size___8H_0__1Q_3, arg_Vn_arrangement_size_Q___8B_00__16B_01__1D_30__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__1D_30__2D_31}, nil},\n\t// PMULL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e20e000, PMULL2, instArgs{arg_Vd_arrangement_size___8H_0__1Q_3, arg_Vn_arrangement_size_Q___8B_00__16B_01__1D_30__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__1D_30__2D_31}, nil},\n\t// RADDHN <Vd>.<tb>, <Vn>.<ta>, <Vm>.<ta>\n\t{0xff20fc00, 0x2e204000, RADDHN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// RADDHN2 <Vd>.<tb>, <Vn>.<ta>, <Vm>.<ta>\n\t{0xff20fc00, 0x6e204000, RADDHN2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// RBIT <Vd>.<t>, <Vn>.<t>\n\t{0xbffffc00, 0x2e605800, RBIT, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_arrangement_Q___8B_0__16B_1}, nil},\n\t// REV16 <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e201800, REV16, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01, arg_Vn_arrangement_size_Q___8B_00__16B_01}, nil},\n\t// REV32 <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x2e200800, REV32, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11}, nil},\n\t// REV64 <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e200800, REV64, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// RSHRN <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x0f008c00, RSHRN, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, rshrn_asimdshf_n_cond},\n\t// RSHRN2 <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x4f008c00, RSHRN2, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, rshrn_asimdshf_n_cond},\n\t// RSUBHN <Vd>.<tb>, <Vn>.<ta>, <Vm>.<ta>\n\t{0xff20fc00, 0x2e206000, RSUBHN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// RSUBHN2 <Vd>.<tb>, <Vn>.<ta>, <Vm>.<ta>\n\t{0xff20fc00, 0x6e206000, RSUBHN2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// SABA <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e207c00, SABA, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SABAL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e205000, SABAL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SABAL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e205000, SABAL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SABD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e207400, SABD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SABDL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e207000, SABDL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SABDL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e207000, SABDL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SADALP <Vd>.<ta>, <Vn>.<tb>\n\t{0xbf3ffc00, 0x0e206800, SADALP, instArgs{arg_Vd_arrangement_size_Q___4H_00__8H_01__2S_10__4S_11__1D_20__2D_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SADDL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e200000, SADDL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SADDL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e200000, SADDL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SADDLP <Vd>.<ta>, <Vn>.<tb>\n\t{0xbf3ffc00, 0x0e202800, SADDLP, instArgs{arg_Vd_arrangement_size_Q___4H_00__8H_01__2S_10__4S_11__1D_20__2D_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SADDLV <V><d>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e303800, SADDLV, instArgs{arg_Vd_22_2__H_0__S_1__D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__4S_21}, nil},\n\t// SADDW <Vd>.<ta>, <Vn>.<ta>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e201000, SADDW, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SADDW2 <Vd>.<ta>, <Vn>.<ta>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e201000, SADDW2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SCVTF <Sd>, <Wn>, #<fbits>\n\t{0xffff0000, 0x1e020000, SCVTF, instArgs{arg_Sd, arg_Wn, arg_immediate_fbits_min_1_max_32_sub_64_scale}, nil},\n\t// SCVTF <Dd>, <Wn>, #<fbits>\n\t{0xffff0000, 0x1e420000, SCVTF, instArgs{arg_Dd, arg_Wn, arg_immediate_fbits_min_1_max_32_sub_64_scale}, nil},\n\t// SCVTF <Sd>, <Xn>, #<fbits>\n\t{0xffff0000, 0x9e020000, SCVTF, instArgs{arg_Sd, arg_Xn, arg_immediate_fbits_min_1_max_64_sub_64_scale}, nil},\n\t// SCVTF <Dd>, <Xn>, #<fbits>\n\t{0xffff0000, 0x9e420000, SCVTF, instArgs{arg_Dd, arg_Xn, arg_immediate_fbits_min_1_max_64_sub_64_scale}, nil},\n\t// SCVTF <Sd>, <Wn>\n\t{0xfffffc00, 0x1e220000, SCVTF, instArgs{arg_Sd, arg_Wn}, nil},\n\t// SCVTF <Dd>, <Wn>\n\t{0xfffffc00, 0x1e620000, SCVTF, instArgs{arg_Dd, arg_Wn}, nil},\n\t// SCVTF <Sd>, <Xn>\n\t{0xfffffc00, 0x9e220000, SCVTF, instArgs{arg_Sd, arg_Xn}, nil},\n\t// SCVTF <Dd>, <Xn>\n\t{0xfffffc00, 0x9e620000, SCVTF, instArgs{arg_Dd, arg_Xn}, nil},\n\t// SCVTF <V><d>, <V><n>, #<fbits>\n\t{0xff80fc00, 0x5f00e400, SCVTF, instArgs{arg_Vd_19_4__S_4__D_8, arg_Vn_19_4__S_4__D_8, arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__64UIntimmhimmb_4__128UIntimmhimmb_8}, scvtf_asisdshf_c_cond},\n\t// SCVTF <Vd>.<t>, <Vn>.<t>, #<fbits>\n\t{0xbf80fc00, 0x0f00e400, SCVTF, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81, arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__64UIntimmhimmb_4__128UIntimmhimmb_8}, scvtf_asimdshf_c_cond},\n\t// SCVTF <V><d>, <V><n>\n\t{0xffbffc00, 0x5e21d800, SCVTF, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// SCVTF <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0e21d800, SCVTF, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// SHA1C <Qd>, <Sn>, <Vm>.4S\n\t{0xffe0fc00, 0x5e000000, SHA1C, instArgs{arg_Qd, arg_Sn, arg_Vm_arrangement_4S}, nil},\n\t// SHA1H <Sd>, <Sn>\n\t{0xfffffc00, 0x5e280800, SHA1H, instArgs{arg_Sd, arg_Sn}, nil},\n\t// SHA1M <Qd>, <Sn>, <Vm>.4S\n\t{0xffe0fc00, 0x5e002000, SHA1M, instArgs{arg_Qd, arg_Sn, arg_Vm_arrangement_4S}, nil},\n\t// SHA1P <Qd>, <Sn>, <Vm>.4S\n\t{0xffe0fc00, 0x5e001000, SHA1P, instArgs{arg_Qd, arg_Sn, arg_Vm_arrangement_4S}, nil},\n\t// SHA1SU0 <Vd>.4S, <Vn>.4S, <Vm>.4S\n\t{0xffe0fc00, 0x5e003000, SHA1SU0, instArgs{arg_Vd_arrangement_4S, arg_Vn_arrangement_4S, arg_Vm_arrangement_4S}, nil},\n\t// SHA1SU1 <Vd>.4S, <Vn>.4S\n\t{0xfffffc00, 0x5e281800, SHA1SU1, instArgs{arg_Vd_arrangement_4S, arg_Vn_arrangement_4S}, nil},\n\t// SHA256H <Qd>, <Qn>, <Vm>.4S\n\t{0xffe0fc00, 0x5e004000, SHA256H, instArgs{arg_Qd, arg_Qn, arg_Vm_arrangement_4S}, nil},\n\t// SHA256H2 <Qd>, <Qn>, <Vm>.4S\n\t{0xffe0fc00, 0x5e005000, SHA256H2, instArgs{arg_Qd, arg_Qn, arg_Vm_arrangement_4S}, nil},\n\t// SHA256SU0 <Vd>.4S, <Vn>.4S\n\t{0xfffffc00, 0x5e282800, SHA256SU0, instArgs{arg_Vd_arrangement_4S, arg_Vn_arrangement_4S}, nil},\n\t// SHA256SU1 <Vd>.4S, <Vn>.4S, <Vm>.4S\n\t{0xffe0fc00, 0x5e006000, SHA256SU1, instArgs{arg_Vd_arrangement_4S, arg_Vn_arrangement_4S, arg_Vm_arrangement_4S}, nil},\n\t// SHADD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e200400, SHADD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SHL <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x5f005400, SHL, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_0_63_immh_immb__UIntimmhimmb64_8}, shl_asisdshf_r_cond},\n\t// SHL <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x0f005400, SHL, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8}, shl_asimdshf_r_cond},\n\t// SHLL <Vd>.<ta>, <Vn>.<tb>, #<shift>\n\t{0xff3ffc00, 0x2e213800, SHLL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_immediate_0_width_size__8_0__16_1__32_2}, nil},\n\t// SHLL2 <Vd>.<ta>, <Vn>.<tb>, #<shift>\n\t{0xff3ffc00, 0x6e213800, SHLL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_immediate_0_width_size__8_0__16_1__32_2}, nil},\n\t// SHRN <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x0f008400, SHRN, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, shrn_asimdshf_n_cond},\n\t// SHRN2 <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x4f008400, SHRN2, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, shrn_asimdshf_n_cond},\n\t// SHSUB <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e202400, SHSUB, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SLI <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f005400, SLI, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_0_63_immh_immb__UIntimmhimmb64_8}, sli_asisdshf_r_cond},\n\t// SLI <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x2f005400, SLI, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8}, sli_asimdshf_r_cond},\n\t// SMAX <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e206400, SMAX, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SMAXP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e20a400, SMAXP, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SMAXV <V><d>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e30a800, SMAXV, instArgs{arg_Vd_22_2__B_0__H_1__S_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__4S_21}, nil},\n\t// SMIN <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e206c00, SMIN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SMINP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e20ac00, SMINP, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SMINV <V><d>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e31a800, SMINV, instArgs{arg_Vd_22_2__B_0__H_1__S_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__4S_21}, nil},\n\t// SMLAL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x0f002000, SMLAL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SMLAL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x4f002000, SMLAL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SMLAL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e208000, SMLAL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SMLAL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e208000, SMLAL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SMLSL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x0f006000, SMLSL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SMLSL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x4f006000, SMLSL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SMLSL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e20a000, SMLSL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SMLSL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e20a000, SMLSL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SMOV <Wd>, <Vn>.<ts>[<index>]\n\t{0xffe0fc00, 0x0e002c00, SMOV, instArgs{arg_Wd, arg_Vn_arrangement_imm5___B_1__H_2_index__imm5__imm5lt41gt_1__imm5lt42gt_2_1}, nil},\n\t// SMOV <Xd>, <Vn>.<ts_1>[<index_1>]\n\t{0xffe0fc00, 0x4e002c00, SMOV, instArgs{arg_Xd, arg_Vn_arrangement_imm5___B_1__H_2__S_4_index__imm5__imm5lt41gt_1__imm5lt42gt_2__imm5lt43gt_4_1}, nil},\n\t// SMULL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x0f00a000, SMULL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SMULL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x4f00a000, SMULL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SMULL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e20c000, SMULL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SMULL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e20c000, SMULL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SQABS <V><d>, <V><n>\n\t{0xff3ffc00, 0x5e207800, SQABS, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// SQABS <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e207800, SQABS, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// SQADD <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e200c00, SQADD, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3, arg_Vm_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// SQADD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e200c00, SQADD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// SQDMLAL <V><d>, <V><n>, <Vm>.<ts_1>[<index_1>]\n\t{0xff00f400, 0x5f003000, SQDMLAL, instArgs{arg_Vd_22_2__S_1__D_2, arg_Vn_22_2__H_1__S_2, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMLAL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x0f003000, SQDMLAL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMLAL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x4f003000, SQDMLAL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMLAL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e209000, SQDMLAL, instArgs{arg_Vd_22_2__S_1__D_2, arg_Vn_22_2__H_1__S_2, arg_Vm_22_2__H_1__S_2}, nil},\n\t// SQDMLAL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e209000, SQDMLAL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SQDMLAL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e209000, SQDMLAL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SQDMLSL <V><d>, <V><n>, <Vm>.<ts_1>[<index_1>]\n\t{0xff00f400, 0x5f007000, SQDMLSL, instArgs{arg_Vd_22_2__S_1__D_2, arg_Vn_22_2__H_1__S_2, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMLSL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x0f007000, SQDMLSL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMLSL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x4f007000, SQDMLSL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMLSL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e20b000, SQDMLSL, instArgs{arg_Vd_22_2__S_1__D_2, arg_Vn_22_2__H_1__S_2, arg_Vm_22_2__H_1__S_2}, nil},\n\t// SQDMLSL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e20b000, SQDMLSL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SQDMLSL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e20b000, SQDMLSL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SQDMULH <V><d>, <V><n>, <Vm>.<ts_1>[<index_1>]\n\t{0xff00f400, 0x5f00c000, SQDMULH, instArgs{arg_Vd_22_2__H_1__S_2, arg_Vn_22_2__H_1__S_2, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMULH <Vd>.<t>, <Vn>.<t>, <Vm>.<ts>[<index>]\n\t{0xbf00f400, 0x0f00c000, SQDMULH, instArgs{arg_Vd_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMULH <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e20b400, SQDMULH, instArgs{arg_Vd_22_2__H_1__S_2, arg_Vn_22_2__H_1__S_2, arg_Vm_22_2__H_1__S_2}, nil},\n\t// SQDMULH <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e20b400, SQDMULH, instArgs{arg_Vd_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SQDMULL <V><d>, <V><n>, <Vm>.<ts_1>[<index_1>]\n\t{0xff00f400, 0x5f00b000, SQDMULL, instArgs{arg_Vd_22_2__S_1__D_2, arg_Vn_22_2__H_1__S_2, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMULL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x0f00b000, SQDMULL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMULL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x4f00b000, SQDMULL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQDMULL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e20d000, SQDMULL, instArgs{arg_Vd_22_2__S_1__D_2, arg_Vn_22_2__H_1__S_2, arg_Vm_22_2__H_1__S_2}, nil},\n\t// SQDMULL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e20d000, SQDMULL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SQDMULL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e20d000, SQDMULL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SQNEG <V><d>, <V><n>\n\t{0xff3ffc00, 0x7e207800, SQNEG, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// SQNEG <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x2e207800, SQNEG, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// SQRDMULH <V><d>, <V><n>, <Vm>.<ts_1>[<index_1>]\n\t{0xff00f400, 0x5f00d000, SQRDMULH, instArgs{arg_Vd_22_2__H_1__S_2, arg_Vn_22_2__H_1__S_2, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQRDMULH <Vd>.<t>, <Vn>.<t>, <Vm>.<ts>[<index>]\n\t{0xbf00f400, 0x0f00d000, SQRDMULH, instArgs{arg_Vd_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// SQRDMULH <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e20b400, SQRDMULH, instArgs{arg_Vd_22_2__H_1__S_2, arg_Vn_22_2__H_1__S_2, arg_Vm_22_2__H_1__S_2}, nil},\n\t// SQRDMULH <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e20b400, SQRDMULH, instArgs{arg_Vd_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SQRSHL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e205c00, SQRSHL, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3, arg_Vm_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// SQRSHL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e205c00, SQRSHL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// SQRSHRN <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x5f009c00, SQRSHRN, instArgs{arg_Vd_19_4__B_1__H_2__S_4, arg_Vn_19_4__H_1__S_2__D_4, arg_immediate_1_width_immh_immb__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqrshrn_asisdshf_n_cond},\n\t// SQRSHRN <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x0f009c00, SQRSHRN, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqrshrn_asimdshf_n_cond},\n\t// SQRSHRN2 <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x4f009c00, SQRSHRN2, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqrshrn_asimdshf_n_cond},\n\t// SQRSHRUN <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f008c00, SQRSHRUN, instArgs{arg_Vd_19_4__B_1__H_2__S_4, arg_Vn_19_4__H_1__S_2__D_4, arg_immediate_1_width_immh_immb__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqrshrun_asisdshf_n_cond},\n\t// SQRSHRUN <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x2f008c00, SQRSHRUN, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqrshrun_asimdshf_n_cond},\n\t// SQRSHRUN2 <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x6f008c00, SQRSHRUN2, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqrshrun_asimdshf_n_cond},\n\t// SQSHL <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x5f007400, SQSHL, instArgs{arg_Vd_19_4__B_1__H_2__S_4__D_8, arg_Vn_19_4__B_1__H_2__S_4__D_8, arg_immediate_0_width_m1_immh_immb__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8}, sqshl_asisdshf_r_cond},\n\t// SQSHL <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x0f007400, SQSHL, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8}, sqshl_asimdshf_r_cond},\n\t// SQSHL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e204c00, SQSHL, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3, arg_Vm_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// SQSHL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e204c00, SQSHL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// SQSHLU <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f006400, SQSHLU, instArgs{arg_Vd_19_4__B_1__H_2__S_4__D_8, arg_Vn_19_4__B_1__H_2__S_4__D_8, arg_immediate_0_width_m1_immh_immb__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8}, sqshlu_asisdshf_r_cond},\n\t// SQSHLU <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x2f006400, SQSHLU, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8}, sqshlu_asimdshf_r_cond},\n\t// SQSHRN <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x5f009400, SQSHRN, instArgs{arg_Vd_19_4__B_1__H_2__S_4, arg_Vn_19_4__H_1__S_2__D_4, arg_immediate_1_width_immh_immb__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqshrn_asisdshf_n_cond},\n\t// SQSHRN <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x0f009400, SQSHRN, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqshrn_asimdshf_n_cond},\n\t// SQSHRN2 <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x4f009400, SQSHRN2, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqshrn_asimdshf_n_cond},\n\t// SQSHRUN <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f008400, SQSHRUN, instArgs{arg_Vd_19_4__B_1__H_2__S_4, arg_Vn_19_4__H_1__S_2__D_4, arg_immediate_1_width_immh_immb__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqshrun_asisdshf_n_cond},\n\t// SQSHRUN <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x2f008400, SQSHRUN, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqshrun_asimdshf_n_cond},\n\t// SQSHRUN2 <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x6f008400, SQSHRUN2, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, sqshrun_asimdshf_n_cond},\n\t// SQSUB <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e202c00, SQSUB, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3, arg_Vm_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// SQSUB <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e202c00, SQSUB, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// SQXTN <V><d>, <V><n>\n\t{0xff3ffc00, 0x5e214800, SQXTN, instArgs{arg_Vd_22_2__B_0__H_1__S_2, arg_Vn_22_2__H_0__S_1__D_2}, nil},\n\t// SQXTN <Vd>.<tb>, <Vn>.<ta>\n\t{0xff3ffc00, 0x0e214800, SQXTN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// SQXTN2 <Vd>.<tb>, <Vn>.<ta>\n\t{0xff3ffc00, 0x4e214800, SQXTN2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// SQXTUN <V><d>, <V><n>\n\t{0xff3ffc00, 0x7e212800, SQXTUN, instArgs{arg_Vd_22_2__B_0__H_1__S_2, arg_Vn_22_2__H_0__S_1__D_2}, nil},\n\t// SQXTUN <Vd>.<tb>, <Vn>.<ta>\n\t{0xff3ffc00, 0x2e212800, SQXTUN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// SQXTUN2 <Vd>.<tb>, <Vn>.<ta>\n\t{0xff3ffc00, 0x6e212800, SQXTUN2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// SRHADD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e201400, SRHADD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SRI <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f004400, SRI, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_1_64_immh_immb__128UIntimmhimmb_8}, sri_asisdshf_r_cond},\n\t// SRI <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x2f004400, SRI, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8}, sri_asimdshf_r_cond},\n\t// SRSHL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e205400, SRSHL, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// SRSHL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e205400, SRSHL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// SRSHR <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x5f002400, SRSHR, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_1_64_immh_immb__128UIntimmhimmb_8}, srshr_asisdshf_r_cond},\n\t// SRSHR <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x0f002400, SRSHR, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8}, srshr_asimdshf_r_cond},\n\t// SRSRA <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x5f003400, SRSRA, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_1_64_immh_immb__128UIntimmhimmb_8}, srsra_asisdshf_r_cond},\n\t// SRSRA <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x0f003400, SRSRA, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8}, srsra_asimdshf_r_cond},\n\t// SSHL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x5e204400, SSHL, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// SSHL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e204400, SSHL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// SXTL <Vd>.<ta>, <Vn>.<tb>\n\t{0xff87fc00, 0x0f00a400, SXTL, instArgs{arg_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41}, sxtl_sshll_asimdshf_l_cond},\n\t// SXTL2 <Vd>.<ta>, <Vn>.<tb>\n\t{0xff87fc00, 0x4f00a400, SXTL2, instArgs{arg_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41}, sxtl_sshll_asimdshf_l_cond},\n\t// SSHLL <Vd>.<ta>, <Vn>.<tb>, #<shift>\n\t{0xff80fc00, 0x0f00a400, SSHLL, instArgs{arg_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4}, sshll_asimdshf_l_cond},\n\t// SSHLL2 <Vd>.<ta>, <Vn>.<tb>, #<shift>\n\t{0xff80fc00, 0x4f00a400, SSHLL2, instArgs{arg_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4}, sshll_asimdshf_l_cond},\n\t// SSHR <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x5f000400, SSHR, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_1_64_immh_immb__128UIntimmhimmb_8}, sshr_asisdshf_r_cond},\n\t// SSHR <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x0f000400, SSHR, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8}, sshr_asimdshf_r_cond},\n\t// SSRA <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x5f001400, SSRA, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_1_64_immh_immb__128UIntimmhimmb_8}, ssra_asisdshf_r_cond},\n\t// SSRA <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x0f001400, SSRA, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8}, ssra_asimdshf_r_cond},\n\t// SSUBL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e202000, SSUBL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SSUBL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e202000, SSUBL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SSUBW <Vd>.<ta>, <Vn>.<ta>, <Vm>.<tb>\n\t{0xff20fc00, 0x0e203000, SSUBW, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// SSUBW2 <Vd>.<ta>, <Vn>.<ta>, <Vm>.<tb>\n\t{0xff20fc00, 0x4e203000, SSUBW2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c007000, ST1, instArgs{arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c00a000, ST1, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c006000, ST1, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c002000, ST1, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_offset}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0c9f7000, ST1, instArgs{arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Q__8_0__16_1}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0c807000, ST1, instArgs{arg_Vt_1_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>], #<imm_1>\n\t{0xbffff000, 0x0c9fa000, ST1, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Q__16_0__32_1}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0c80a000, ST1, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>], #<imm_2>\n\t{0xbffff000, 0x0c9f6000, ST1, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Q__24_0__48_1}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0c806000, ST1, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>], #<imm_3>\n\t{0xbffff000, 0x0c9f2000, ST1, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Q__32_0__64_1}, nil},\n\t// ST1 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0c802000, ST1, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__1D_30__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// ST1 <Vt>.B[<index>], [<Xn|SP>]\n\t{0xbfffe000, 0x0d000000, ST1, instArgs{arg_Vt_1_arrangement_B_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// ST1 <Vt>.H[<index_2>], [<Xn|SP>]\n\t{0xbfffe400, 0x0d004000, ST1, instArgs{arg_Vt_1_arrangement_H_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// ST1 <Vt>.S[<index_3>], [<Xn|SP>]\n\t{0xbfffec00, 0x0d008000, ST1, instArgs{arg_Vt_1_arrangement_S_index__Q_S_1, arg_Xns_mem_offset}, nil},\n\t// ST1 <Vt>.D[<index_1>], [<Xn|SP>]\n\t{0xbffffc00, 0x0d008400, ST1, instArgs{arg_Vt_1_arrangement_D_index__Q_1, arg_Xns_mem_offset}, nil},\n\t// ST1 <Vt>.B[<index>], [<Xn|SP>], #1\n\t{0xbfffe000, 0x0d9f0000, ST1, instArgs{arg_Vt_1_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_1}, nil},\n\t// ST1 <Vt>.B[<index>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e000, 0x0d800000, ST1, instArgs{arg_Vt_1_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST1 <Vt>.H[<index_2>], [<Xn|SP>], #2\n\t{0xbfffe400, 0x0d9f4000, ST1, instArgs{arg_Vt_1_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_2}, nil},\n\t// ST1 <Vt>.H[<index_2>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e400, 0x0d804000, ST1, instArgs{arg_Vt_1_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST1 <Vt>.S[<index_3>], [<Xn|SP>], #4\n\t{0xbfffec00, 0x0d9f8000, ST1, instArgs{arg_Vt_1_arrangement_S_index__Q_S_1, arg_Xns_mem_post_fixedimm_4}, nil},\n\t// ST1 <Vt>.S[<index_3>], [<Xn|SP>], #<Xm>\n\t{0xbfe0ec00, 0x0d808000, ST1, instArgs{arg_Vt_1_arrangement_S_index__Q_S_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST1 <Vt>.D[<index_1>], [<Xn|SP>], #8\n\t{0xbffffc00, 0x0d9f8400, ST1, instArgs{arg_Vt_1_arrangement_D_index__Q_1, arg_Xns_mem_post_fixedimm_8}, nil},\n\t// ST1 <Vt>.D[<index_1>], [<Xn|SP>], #<Xm>\n\t{0xbfe0fc00, 0x0d808400, ST1, instArgs{arg_Vt_1_arrangement_D_index__Q_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST2 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c008000, ST2, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_offset}, nil},\n\t// ST2 <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0c9f8000, ST2, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Q__16_0__32_1}, nil},\n\t// ST2 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0c808000, ST2, instArgs{arg_Vt_2_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// ST2 <Vt>.B[<index>], [<Xn|SP>]\n\t{0xbfffe000, 0x0d200000, ST2, instArgs{arg_Vt_2_arrangement_B_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// ST2 <Vt>.H[<index_2>], [<Xn|SP>]\n\t{0xbfffe400, 0x0d204000, ST2, instArgs{arg_Vt_2_arrangement_H_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// ST2 <Vt>.S[<index_3>], [<Xn|SP>]\n\t{0xbfffec00, 0x0d208000, ST2, instArgs{arg_Vt_2_arrangement_S_index__Q_S_1, arg_Xns_mem_offset}, nil},\n\t// ST2 <Vt>.D[<index_1>], [<Xn|SP>]\n\t{0xbffffc00, 0x0d208400, ST2, instArgs{arg_Vt_2_arrangement_D_index__Q_1, arg_Xns_mem_offset}, nil},\n\t// ST2 <Vt>.B[<index>], [<Xn|SP>], #2\n\t{0xbfffe000, 0x0dbf0000, ST2, instArgs{arg_Vt_2_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_2}, nil},\n\t// ST2 <Vt>.B[<index>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e000, 0x0da00000, ST2, instArgs{arg_Vt_2_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST2 <Vt>.H[<index_2>], [<Xn|SP>], #4\n\t{0xbfffe400, 0x0dbf4000, ST2, instArgs{arg_Vt_2_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_4}, nil},\n\t// ST2 <Vt>.H[<index_2>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e400, 0x0da04000, ST2, instArgs{arg_Vt_2_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST2 <Vt>.S[<index_3>], [<Xn|SP>], #8\n\t{0xbfffec00, 0x0dbf8000, ST2, instArgs{arg_Vt_2_arrangement_S_index__Q_S_1, arg_Xns_mem_post_fixedimm_8}, nil},\n\t// ST2 <Vt>.S[<index_3>], [<Xn|SP>], #<Xm>\n\t{0xbfe0ec00, 0x0da08000, ST2, instArgs{arg_Vt_2_arrangement_S_index__Q_S_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST2 <Vt>.D[<index_1>], [<Xn|SP>], #16\n\t{0xbffffc00, 0x0dbf8400, ST2, instArgs{arg_Vt_2_arrangement_D_index__Q_1, arg_Xns_mem_post_fixedimm_16}, nil},\n\t// ST2 <Vt>.D[<index_1>], [<Xn|SP>], #<Xm>\n\t{0xbfe0fc00, 0x0da08400, ST2, instArgs{arg_Vt_2_arrangement_D_index__Q_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST3 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c004000, ST3, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_offset}, nil},\n\t// ST3 <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0c9f4000, ST3, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Q__24_0__48_1}, nil},\n\t// ST3 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0c804000, ST3, instArgs{arg_Vt_3_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// ST3 <Vt>.B[<index>], [<Xn|SP>]\n\t{0xbfffe000, 0x0d002000, ST3, instArgs{arg_Vt_3_arrangement_B_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// ST3 <Vt>.H[<index_2>], [<Xn|SP>]\n\t{0xbfffe400, 0x0d006000, ST3, instArgs{arg_Vt_3_arrangement_H_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// ST3 <Vt>.S[<index_3>], [<Xn|SP>]\n\t{0xbfffec00, 0x0d00a000, ST3, instArgs{arg_Vt_3_arrangement_S_index__Q_S_1, arg_Xns_mem_offset}, nil},\n\t// ST3 <Vt>.D[<index_1>], [<Xn|SP>]\n\t{0xbffffc00, 0x0d00a400, ST3, instArgs{arg_Vt_3_arrangement_D_index__Q_1, arg_Xns_mem_offset}, nil},\n\t// ST3 <Vt>.B[<index>], [<Xn|SP>], #3\n\t{0xbfffe000, 0x0d9f2000, ST3, instArgs{arg_Vt_3_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_3}, nil},\n\t// ST3 <Vt>.B[<index>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e000, 0x0d802000, ST3, instArgs{arg_Vt_3_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST3 <Vt>.H[<index_2>], [<Xn|SP>], #6\n\t{0xbfffe400, 0x0d9f6000, ST3, instArgs{arg_Vt_3_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_6}, nil},\n\t// ST3 <Vt>.H[<index_2>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e400, 0x0d806000, ST3, instArgs{arg_Vt_3_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST3 <Vt>.S[<index_3>], [<Xn|SP>], #12\n\t{0xbfffec00, 0x0d9fa000, ST3, instArgs{arg_Vt_3_arrangement_S_index__Q_S_1, arg_Xns_mem_post_fixedimm_12}, nil},\n\t// ST3 <Vt>.S[<index_3>], [<Xn|SP>], #<Xm>\n\t{0xbfe0ec00, 0x0d80a000, ST3, instArgs{arg_Vt_3_arrangement_S_index__Q_S_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST3 <Vt>.D[<index_1>], [<Xn|SP>], #24\n\t{0xbffffc00, 0x0d9fa400, ST3, instArgs{arg_Vt_3_arrangement_D_index__Q_1, arg_Xns_mem_post_fixedimm_24}, nil},\n\t// ST3 <Vt>.D[<index_1>], [<Xn|SP>], #<Xm>\n\t{0xbfe0fc00, 0x0d80a400, ST3, instArgs{arg_Vt_3_arrangement_D_index__Q_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST4 <Vt>.<t>, [<Xn|SP>]\n\t{0xbffff000, 0x0c000000, ST4, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_offset}, nil},\n\t// ST4 <Vt>.<t>, [<Xn|SP>], #<imm>\n\t{0xbffff000, 0x0c9f0000, ST4, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Q__32_0__64_1}, nil},\n\t// ST4 <Vt>.<t>, [<Xn|SP>], #<Xm>\n\t{0xbfe0f000, 0x0c800000, ST4, instArgs{arg_Vt_4_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Xns_mem_post_Xm}, nil},\n\t// ST4 <Vt>.B[<index>], [<Xn|SP>]\n\t{0xbfffe000, 0x0d202000, ST4, instArgs{arg_Vt_4_arrangement_B_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// ST4 <Vt>.H[<index_2>], [<Xn|SP>]\n\t{0xbfffe400, 0x0d206000, ST4, instArgs{arg_Vt_4_arrangement_H_index__Q_S_size_1, arg_Xns_mem_offset}, nil},\n\t// ST4 <Vt>.S[<index_3>], [<Xn|SP>]\n\t{0xbfffec00, 0x0d20a000, ST4, instArgs{arg_Vt_4_arrangement_S_index__Q_S_1, arg_Xns_mem_offset}, nil},\n\t// ST4 <Vt>.D[<index_1>], [<Xn|SP>]\n\t{0xbffffc00, 0x0d20a400, ST4, instArgs{arg_Vt_4_arrangement_D_index__Q_1, arg_Xns_mem_offset}, nil},\n\t// ST4 <Vt>.B[<index>], [<Xn|SP>], #4\n\t{0xbfffe000, 0x0dbf2000, ST4, instArgs{arg_Vt_4_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_4}, nil},\n\t// ST4 <Vt>.B[<index>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e000, 0x0da02000, ST4, instArgs{arg_Vt_4_arrangement_B_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST4 <Vt>.H[<index_2>], [<Xn|SP>], #8\n\t{0xbfffe400, 0x0dbf6000, ST4, instArgs{arg_Vt_4_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_fixedimm_8}, nil},\n\t// ST4 <Vt>.H[<index_2>], [<Xn|SP>], #<Xm>\n\t{0xbfe0e400, 0x0da06000, ST4, instArgs{arg_Vt_4_arrangement_H_index__Q_S_size_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST4 <Vt>.S[<index_3>], [<Xn|SP>], #16\n\t{0xbfffec00, 0x0dbfa000, ST4, instArgs{arg_Vt_4_arrangement_S_index__Q_S_1, arg_Xns_mem_post_fixedimm_16}, nil},\n\t// ST4 <Vt>.S[<index_3>], [<Xn|SP>], #<Xm>\n\t{0xbfe0ec00, 0x0da0a000, ST4, instArgs{arg_Vt_4_arrangement_S_index__Q_S_1, arg_Xns_mem_post_Xm}, nil},\n\t// ST4 <Vt>.D[<index_1>], [<Xn|SP>], #32\n\t{0xbffffc00, 0x0dbfa400, ST4, instArgs{arg_Vt_4_arrangement_D_index__Q_1, arg_Xns_mem_post_fixedimm_32}, nil},\n\t// ST4 <Vt>.D[<index_1>], [<Xn|SP>], #<Xm>\n\t{0xbfe0fc00, 0x0da0a400, ST4, instArgs{arg_Vt_4_arrangement_D_index__Q_1, arg_Xns_mem_post_Xm}, nil},\n\t// STNP <St>, <St2>, [<Xn|SP>{, #<imm_2>}]\n\t{0xffc00000, 0x2c000000, STNP, instArgs{arg_St, arg_St2, arg_Xns_mem_optional_imm7_4_signed}, nil},\n\t// STNP <Dt>, <Dt2>, [<Xn|SP>{, #<imm>}]\n\t{0xffc00000, 0x6c000000, STNP, instArgs{arg_Dt, arg_Dt2, arg_Xns_mem_optional_imm7_8_signed}, nil},\n\t// STNP <Qt>, <Qt2>, [<Xn|SP>{, #<imm_1>}]\n\t{0xffc00000, 0xac000000, STNP, instArgs{arg_Qt, arg_Qt2, arg_Xns_mem_optional_imm7_16_signed}, nil},\n\t// STP <St>, <St2>, [<Xn|SP>], #<imm_5>\n\t{0xffc00000, 0x2c800000, STP, instArgs{arg_St, arg_St2, arg_Xns_mem_post_imm7_4_signed}, nil},\n\t// STP <Dt>, <Dt2>, [<Xn|SP>], #<imm_1>\n\t{0xffc00000, 0x6c800000, STP, instArgs{arg_Dt, arg_Dt2, arg_Xns_mem_post_imm7_8_signed}, nil},\n\t// STP <Qt>, <Qt2>, [<Xn|SP>], #<imm_3>\n\t{0xffc00000, 0xac800000, STP, instArgs{arg_Qt, arg_Qt2, arg_Xns_mem_post_imm7_16_signed}, nil},\n\t// STP <St>, <St2>, [<Xn|SP>{, #<imm_5>}]!\n\t{0xffc00000, 0x2d800000, STP, instArgs{arg_St, arg_St2, arg_Xns_mem_wb_imm7_4_signed}, nil},\n\t// STP <Dt>, <Dt2>, [<Xn|SP>{, #<imm_1>}]!\n\t{0xffc00000, 0x6d800000, STP, instArgs{arg_Dt, arg_Dt2, arg_Xns_mem_wb_imm7_8_signed}, nil},\n\t// STP <Qt>, <Qt2>, [<Xn|SP>{, #<imm_3>}]!\n\t{0xffc00000, 0xad800000, STP, instArgs{arg_Qt, arg_Qt2, arg_Xns_mem_wb_imm7_16_signed}, nil},\n\t// STP <St>, <St2>, [<Xn|SP>{, #<imm_4>}]\n\t{0xffc00000, 0x2d000000, STP, instArgs{arg_St, arg_St2, arg_Xns_mem_optional_imm7_4_signed}, nil},\n\t// STP <Dt>, <Dt2>, [<Xn|SP>{, #<imm>}]\n\t{0xffc00000, 0x6d000000, STP, instArgs{arg_Dt, arg_Dt2, arg_Xns_mem_optional_imm7_8_signed}, nil},\n\t// STP <Qt>, <Qt2>, [<Xn|SP>{, #<imm_2>}]\n\t{0xffc00000, 0xad000000, STP, instArgs{arg_Qt, arg_Qt2, arg_Xns_mem_optional_imm7_16_signed}, nil},\n\t// STR <Bt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x3c000400, STR, instArgs{arg_Bt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// STR <Ht>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x7c000400, STR, instArgs{arg_Ht, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// STR <St>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0xbc000400, STR, instArgs{arg_St, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// STR <Dt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0xfc000400, STR, instArgs{arg_Dt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// STR <Qt>, [<Xn|SP>], #<simm>\n\t{0xffe00c00, 0x3c800400, STR, instArgs{arg_Qt, arg_Xns_mem_post_imm9_1_signed}, nil},\n\t// STR <Bt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x3c000c00, STR, instArgs{arg_Bt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// STR <Ht>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x7c000c00, STR, instArgs{arg_Ht, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// STR <St>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0xbc000c00, STR, instArgs{arg_St, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// STR <Dt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0xfc000c00, STR, instArgs{arg_Dt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// STR <Qt>, [<Xn|SP>{, #<simm>}]!\n\t{0xffe00c00, 0x3c800c00, STR, instArgs{arg_Qt, arg_Xns_mem_wb_imm9_1_signed}, nil},\n\t// STR <Bt>, [<Xn|SP>{, #<pimm>}]\n\t{0xffc00000, 0x3d000000, STR, instArgs{arg_Bt, arg_Xns_mem_optional_imm12_1_unsigned}, nil},\n\t// STR <Ht>, [<Xn|SP>{, #<pimm_2>}]\n\t{0xffc00000, 0x7d000000, STR, instArgs{arg_Ht, arg_Xns_mem_optional_imm12_2_unsigned}, nil},\n\t// STR <St>, [<Xn|SP>{, #<pimm_4>}]\n\t{0xffc00000, 0xbd000000, STR, instArgs{arg_St, arg_Xns_mem_optional_imm12_4_unsigned}, nil},\n\t// STR <Dt>, [<Xn|SP>{, #<pimm_1>}]\n\t{0xffc00000, 0xfd000000, STR, instArgs{arg_Dt, arg_Xns_mem_optional_imm12_8_unsigned}, nil},\n\t// STR <Qt>, [<Xn|SP>{, #<pimm_3>}]\n\t{0xffc00000, 0x3d800000, STR, instArgs{arg_Qt, arg_Xns_mem_optional_imm12_16_unsigned}, nil},\n\t// STR <Bt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x3c200800, STR, instArgs{arg_Bt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__absent_0__0_1}, nil},\n\t// STR <Ht>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x7c200800, STR, instArgs{arg_Ht, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__1_1}, nil},\n\t// STR <St>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xbc200800, STR, instArgs{arg_St, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__2_1}, nil},\n\t// STR <Dt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0xfc200800, STR, instArgs{arg_Dt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__3_1}, nil},\n\t// STR <Qt>, [<Xn|SP>, (<Wm>|<Xm>) {, <extend> {<amount>}}]\n\t{0xffe00c00, 0x3ca00800, STR, instArgs{arg_Qt, arg_Xns_mem_extend_m__UXTW_2__LSL_3__SXTW_6__SXTX_7__0_0__4_1}, nil},\n\t// STUR <Bt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x3c000000, STUR, instArgs{arg_Bt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STUR <Ht>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x7c000000, STUR, instArgs{arg_Ht, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STUR <St>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xbc000000, STUR, instArgs{arg_St, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STUR <Dt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0xfc000000, STUR, instArgs{arg_Dt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// STUR <Qt>, [<Xn|SP>{, #<simm>}]\n\t{0xffe00c00, 0x3c800000, STUR, instArgs{arg_Qt, arg_Xns_mem_optional_imm9_1_signed}, nil},\n\t// SUB <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e208400, SUB, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// SUB <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e208400, SUB, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// SUBHN <Vd>.<tb>, <Vn>.<ta>, <Vm>.<ta>\n\t{0xff20fc00, 0x0e206000, SUBHN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// SUBHN2 <Vd>.<tb>, <Vn>.<ta>, <Vm>.<ta>\n\t{0xff20fc00, 0x4e206000, SUBHN2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// SUQADD <V><d>, <V><n>\n\t{0xff3ffc00, 0x5e203800, SUQADD, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// SUQADD <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x0e203800, SUQADD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// TBL <Vd>.<ta>, <Vn>.16B, <Vm>.<ta>\n\t{0xbfe0fc00, 0x0e002000, TBL, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_2_arrangement_16B, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// TBL <Vd>.<ta>, <Vn>.16B, <Vm>.<ta>\n\t{0xbfe0fc00, 0x0e004000, TBL, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_3_arrangement_16B, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// TBL <Vd>.<ta>, <Vn>.16B, <Vm>.<ta>\n\t{0xbfe0fc00, 0x0e006000, TBL, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_4_arrangement_16B, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// TBL <Vd>.<ta>, <Vn>.16B, <Vm>.<ta>\n\t{0xbfe0fc00, 0x0e000000, TBL, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_1_arrangement_16B, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// TBX <Vd>.<ta>, <Vn>.16B, <Vm>.<ta>\n\t{0xbfe0fc00, 0x0e003000, TBX, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_2_arrangement_16B, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// TBX <Vd>.<ta>, <Vn>.16B, <Vm>.<ta>\n\t{0xbfe0fc00, 0x0e005000, TBX, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_3_arrangement_16B, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// TBX <Vd>.<ta>, <Vn>.16B, <Vm>.<ta>\n\t{0xbfe0fc00, 0x0e007000, TBX, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_4_arrangement_16B, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// TBX <Vd>.<ta>, <Vn>.16B, <Vm>.<ta>\n\t{0xbfe0fc00, 0x0e001000, TBX, instArgs{arg_Vd_arrangement_Q___8B_0__16B_1, arg_Vn_1_arrangement_16B, arg_Vm_arrangement_Q___8B_0__16B_1}, nil},\n\t// TRN1 <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e002800, TRN1, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// TRN2 <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e006800, TRN2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// UABA <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e207c00, UABA, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UABAL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x2e205000, UABAL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UABAL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x6e205000, UABAL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UABD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e207400, UABD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UABDL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x2e207000, UABDL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UABDL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x6e207000, UABDL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UADALP <Vd>.<ta>, <Vn>.<tb>\n\t{0xbf3ffc00, 0x2e206800, UADALP, instArgs{arg_Vd_arrangement_size_Q___4H_00__8H_01__2S_10__4S_11__1D_20__2D_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UADDL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x2e200000, UADDL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UADDL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x6e200000, UADDL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UADDLP <Vd>.<ta>, <Vn>.<tb>\n\t{0xbf3ffc00, 0x2e202800, UADDLP, instArgs{arg_Vd_arrangement_size_Q___4H_00__8H_01__2S_10__4S_11__1D_20__2D_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UADDLV <V><d>, <Vn>.<t>\n\t{0xbf3ffc00, 0x2e303800, UADDLV, instArgs{arg_Vd_22_2__H_0__S_1__D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__4S_21}, nil},\n\t// UADDW <Vd>.<ta>, <Vn>.<ta>, <Vm>.<tb>\n\t{0xff20fc00, 0x2e201000, UADDW, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UADDW2 <Vd>.<ta>, <Vn>.<ta>, <Vm>.<tb>\n\t{0xff20fc00, 0x6e201000, UADDW2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UCVTF <Sd>, <Wn>, #<fbits>\n\t{0xffff0000, 0x1e030000, UCVTF, instArgs{arg_Sd, arg_Wn, arg_immediate_fbits_min_1_max_32_sub_64_scale}, nil},\n\t// UCVTF <Dd>, <Wn>, #<fbits>\n\t{0xffff0000, 0x1e430000, UCVTF, instArgs{arg_Dd, arg_Wn, arg_immediate_fbits_min_1_max_32_sub_64_scale}, nil},\n\t// UCVTF <Sd>, <Xn>, #<fbits>\n\t{0xffff0000, 0x9e030000, UCVTF, instArgs{arg_Sd, arg_Xn, arg_immediate_fbits_min_1_max_64_sub_64_scale}, nil},\n\t// UCVTF <Dd>, <Xn>, #<fbits>\n\t{0xffff0000, 0x9e430000, UCVTF, instArgs{arg_Dd, arg_Xn, arg_immediate_fbits_min_1_max_64_sub_64_scale}, nil},\n\t// UCVTF <Sd>, <Wn>\n\t{0xfffffc00, 0x1e230000, UCVTF, instArgs{arg_Sd, arg_Wn}, nil},\n\t// UCVTF <Dd>, <Wn>\n\t{0xfffffc00, 0x1e630000, UCVTF, instArgs{arg_Dd, arg_Wn}, nil},\n\t// UCVTF <Sd>, <Xn>\n\t{0xfffffc00, 0x9e230000, UCVTF, instArgs{arg_Sd, arg_Xn}, nil},\n\t// UCVTF <Dd>, <Xn>\n\t{0xfffffc00, 0x9e630000, UCVTF, instArgs{arg_Dd, arg_Xn}, nil},\n\t// UCVTF <V><d>, <V><n>, #<fbits>\n\t{0xff80fc00, 0x7f00e400, UCVTF, instArgs{arg_Vd_19_4__S_4__D_8, arg_Vn_19_4__S_4__D_8, arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__64UIntimmhimmb_4__128UIntimmhimmb_8}, ucvtf_asisdshf_c_cond},\n\t// UCVTF <Vd>.<t>, <Vn>.<t>, #<fbits>\n\t{0xbf80fc00, 0x2f00e400, UCVTF, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__2S_40__4S_41__2D_81, arg_immediate_fbits_min_1_max_0_sub_0_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__64UIntimmhimmb_4__128UIntimmhimmb_8}, ucvtf_asimdshf_c_cond},\n\t// UCVTF <V><d>, <V><n>\n\t{0xffbffc00, 0x7e21d800, UCVTF, instArgs{arg_Vd_22_1__S_0__D_1, arg_Vn_22_1__S_0__D_1}, nil},\n\t// UCVTF <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2e21d800, UCVTF, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01__2D_11, arg_Vn_arrangement_sz_Q___2S_00__4S_01__2D_11}, nil},\n\t// UHADD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e200400, UHADD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UHSUB <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e202400, UHSUB, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMAX <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e206400, UMAX, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMAXP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e20a400, UMAXP, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMAXV <V><d>, <Vn>.<t>\n\t{0xbf3ffc00, 0x2e30a800, UMAXV, instArgs{arg_Vd_22_2__B_0__H_1__S_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__4S_21}, nil},\n\t// UMIN <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e206c00, UMIN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMINP <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e20ac00, UMINP, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMINV <V><d>, <Vn>.<t>\n\t{0xbf3ffc00, 0x2e31a800, UMINV, instArgs{arg_Vd_22_2__B_0__H_1__S_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__4S_21}, nil},\n\t// UMLAL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x2f002000, UMLAL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// UMLAL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x6f002000, UMLAL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// UMLAL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x2e208000, UMLAL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMLAL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x6e208000, UMLAL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMLSL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x2f006000, UMLSL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// UMLSL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x6f006000, UMLSL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// UMLSL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x2e20a000, UMLSL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMLSL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x6e20a000, UMLSL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMULL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x2f00a000, UMULL, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// UMULL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<ts>[<index>]\n\t{0xff00f400, 0x6f00a000, UMULL2, instArgs{arg_Vd_arrangement_size___4S_1__2D_2, arg_Vn_arrangement_size_Q___4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size___H_1__S_2_index__size_L_H_M__HLM_1__HL_2_1}, nil},\n\t// UMULL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x2e20c000, UMULL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UMULL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x6e20c000, UMULL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UQADD <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e200c00, UQADD, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3, arg_Vm_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// UQADD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e200c00, UQADD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// UQRSHL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e205c00, UQRSHL, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3, arg_Vm_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// UQRSHL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e205c00, UQRSHL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// UQRSHRN <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f009c00, UQRSHRN, instArgs{arg_Vd_19_4__B_1__H_2__S_4, arg_Vn_19_4__H_1__S_2__D_4, arg_immediate_1_width_immh_immb__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, uqrshrn_asisdshf_n_cond},\n\t// UQRSHRN <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x2f009c00, UQRSHRN, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, uqrshrn_asimdshf_n_cond},\n\t// UQRSHRN2 <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x6f009c00, UQRSHRN2, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, uqrshrn_asimdshf_n_cond},\n\t// UQSHL <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f007400, UQSHL, instArgs{arg_Vd_19_4__B_1__H_2__S_4__D_8, arg_Vn_19_4__B_1__H_2__S_4__D_8, arg_immediate_0_width_m1_immh_immb__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8}, uqshl_asisdshf_r_cond},\n\t// UQSHL <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x2f007400, UQSHL, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4__UIntimmhimmb64_8}, uqshl_asimdshf_r_cond},\n\t// UQSHL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e204c00, UQSHL, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3, arg_Vm_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// UQSHL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e204c00, UQSHL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// UQSHRN <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f009400, UQSHRN, instArgs{arg_Vd_19_4__B_1__H_2__S_4, arg_Vn_19_4__H_1__S_2__D_4, arg_immediate_1_width_immh_immb__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, uqshrn_asisdshf_n_cond},\n\t// UQSHRN <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x2f009400, UQSHRN, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, uqshrn_asimdshf_n_cond},\n\t// UQSHRN2 <Vd>.<tb>, <Vn>.<ta>, #<shift>\n\t{0xff80fc00, 0x6f009400, UQSHRN2, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_Vn_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4}, uqshrn_asimdshf_n_cond},\n\t// UQSUB <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e202c00, UQSUB, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3, arg_Vm_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// UQSUB <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e202c00, UQSUB, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// UQXTN <V><d>, <V><n>\n\t{0xff3ffc00, 0x7e214800, UQXTN, instArgs{arg_Vd_22_2__B_0__H_1__S_2, arg_Vn_22_2__H_0__S_1__D_2}, nil},\n\t// UQXTN <Vd>.<tb>, <Vn>.<ta>\n\t{0xff3ffc00, 0x2e214800, UQXTN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// UQXTN2 <Vd>.<tb>, <Vn>.<ta>\n\t{0xff3ffc00, 0x6e214800, UQXTN2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// URECPE <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x0ea1c800, URECPE, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01, arg_Vn_arrangement_sz_Q___2S_00__4S_01}, nil},\n\t// URHADD <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e201400, URHADD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// URSHL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e205400, URSHL, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// URSHL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e205400, URSHL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// URSHR <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f002400, URSHR, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_1_64_immh_immb__128UIntimmhimmb_8}, urshr_asisdshf_r_cond},\n\t// URSHR <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x2f002400, URSHR, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8}, urshr_asimdshf_r_cond},\n\t// URSQRTE <Vd>.<t>, <Vn>.<t>\n\t{0xbfbffc00, 0x2ea1c800, URSQRTE, instArgs{arg_Vd_arrangement_sz_Q___2S_00__4S_01, arg_Vn_arrangement_sz_Q___2S_00__4S_01}, nil},\n\t// URSRA <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f003400, URSRA, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_1_64_immh_immb__128UIntimmhimmb_8}, ursra_asisdshf_r_cond},\n\t// URSRA <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x2f003400, URSRA, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8}, ursra_asimdshf_r_cond},\n\t// USHL <V><d>, <V><n>, <V><m>\n\t{0xff20fc00, 0x7e204400, USHL, instArgs{arg_Vd_22_2__D_3, arg_Vn_22_2__D_3, arg_Vm_22_2__D_3}, nil},\n\t// USHL <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x2e204400, USHL, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// UXTL <Vd>.<ta>, <Vn>.<tb>\n\t{0xff87fc00, 0x2f00a400, UXTL, instArgs{arg_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41}, uxtl_ushll_asimdshf_l_cond},\n\t// UXTL2 <Vd>.<ta>, <Vn>.<tb>\n\t{0xff87fc00, 0x6f00a400, UXTL2, instArgs{arg_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41}, uxtl_ushll_asimdshf_l_cond},\n\t// USHLL <Vd>.<ta>, <Vn>.<tb>, #<shift>\n\t{0xff80fc00, 0x2f00a400, USHLL, instArgs{arg_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4}, ushll_asimdshf_l_cond},\n\t// USHLL2 <Vd>.<ta>, <Vn>.<tb>, #<shift>\n\t{0xff80fc00, 0x6f00a400, USHLL2, instArgs{arg_Vd_arrangement_immh___SEEAdvancedSIMDmodifiedimmediate_0__8H_1__4S_2__2D_4, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41, arg_immediate_0_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__UIntimmhimmb8_1__UIntimmhimmb16_2__UIntimmhimmb32_4}, ushll_asimdshf_l_cond},\n\t// USHR <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f000400, USHR, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_1_64_immh_immb__128UIntimmhimmb_8}, ushr_asisdshf_r_cond},\n\t// USHR <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x2f000400, USHR, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8}, ushr_asimdshf_r_cond},\n\t// USQADD <V><d>, <V><n>\n\t{0xff3ffc00, 0x7e203800, USQADD, instArgs{arg_Vd_22_2__B_0__H_1__S_2__D_3, arg_Vn_22_2__B_0__H_1__S_2__D_3}, nil},\n\t// USQADD <Vd>.<t>, <Vn>.<t>\n\t{0xbf3ffc00, 0x2e203800, USQADD, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// USRA <V><d>, <V><n>, #<shift>\n\t{0xff80fc00, 0x7f001400, USRA, instArgs{arg_Vd_19_4__D_8, arg_Vn_19_4__D_8, arg_immediate_1_64_immh_immb__128UIntimmhimmb_8}, usra_asisdshf_r_cond},\n\t// USRA <Vd>.<t>, <Vn>.<t>, #<shift>\n\t{0xbf80fc00, 0x2f001400, USRA, instArgs{arg_Vd_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_Vn_arrangement_immh_Q___SEEAdvancedSIMDmodifiedimmediate_00__8B_10__16B_11__4H_20__8H_21__2S_40__4S_41__2D_81, arg_immediate_1_width_immh_immb__SEEAdvancedSIMDmodifiedimmediate_0__16UIntimmhimmb_1__32UIntimmhimmb_2__64UIntimmhimmb_4__128UIntimmhimmb_8}, usra_asimdshf_r_cond},\n\t// USUBL <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x2e202000, USUBL, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// USUBL2 <Vd>.<ta>, <Vn>.<tb>, <Vm>.<tb>\n\t{0xff20fc00, 0x6e202000, USUBL2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// USUBW <Vd>.<ta>, <Vn>.<ta>, <Vm>.<tb>\n\t{0xff20fc00, 0x2e203000, USUBW, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// USUBW2 <Vd>.<ta>, <Vn>.<ta>, <Vm>.<tb>\n\t{0xff20fc00, 0x6e203000, USUBW2, instArgs{arg_Vd_arrangement_size___8H_0__4S_1__2D_2, arg_Vn_arrangement_size___8H_0__4S_1__2D_2, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21}, nil},\n\t// UZP1 <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e001800, UZP1, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// UZP2 <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e005800, UZP2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// XTN <Vd>.<tb>, <Vn>.<ta>\n\t{0xff3ffc00, 0x0e212800, XTN, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// XTN2 <Vd>.<tb>, <Vn>.<ta>\n\t{0xff3ffc00, 0x4e212800, XTN2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21, arg_Vn_arrangement_size___8H_0__4S_1__2D_2}, nil},\n\t// ZIP1 <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e003800, ZIP1, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n\t// ZIP2 <Vd>.<t>, <Vn>.<t>, <Vm>.<t>\n\t{0xbf20fc00, 0x0e007800, ZIP2, instArgs{arg_Vd_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vn_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31, arg_Vm_arrangement_size_Q___8B_00__16B_01__4H_10__8H_11__2S_20__4S_21__2D_31}, nil},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/loong64/loong64asm/arg.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage loong64asm\n\n// Naming for Go decoder arguments:\n//\n// - arg_fd: a Floating Point operand register fd encoded in the fd[4:0] field\n//\n// - arg_fj: a Floating Point operand register fj encoded in the fj[9:5] field\n//\n// - arg_fk: a Floating Point operand register fk encoded in the fk[14:10] field\n//\n// - arg_fa: a Floating Point operand register fa encoded in the fa[19:15] field\n//\n// - arg_rd: a general-purpose register rd encoded in the rd[4:0] field\n//\n// - arg_rj: a general-purpose register rj encoded in the rj[9:5] field\n//\n// - arg_rk: a general-purpose register rk encoded in the rk[14:10] field\n//\n// - arg_fcsr_4_0: float control status register encoded in [4:0] field\n//\n// - arg_cd_2_0: condition flag register encoded in [2:0] field\n//\n// - arg_sa2_16_15: shift bits constant encoded in [16:15] field\n//\n// - arg_code_14_0: arg for exception process routine encoded in [14:0] field\n//\n// - arg_ui5_14_10: 5bits unsigned immediate\n//\n// - arg_lsbw: For details, please refer to chapter 2.2.3.8 of instruction manual\n//\n// - arg_msbw: For details, please refer to chapter 2.2.3.9 of instruction manual\n//\n// - arg_hint_4_0: hint field implied the prefetch type and the data should fetch to cache's level\n//\t\t0: load to data cache level 1\n//\t\t8: store to data cache level 1\n//\t\tother: no define\n//\n// - arg_si12_21_10: 12bits signed immediate\n\ntype instArg uint16\n\nconst (\n\t_ instArg = iota\n\t// 1-5\n\targ_fd\n\targ_fj\n\targ_fk\n\targ_fa\n\targ_rd\n\t// 6-10\n\targ_rj\n\targ_rk\n\targ_op_4_0\n\targ_fcsr_4_0\n\targ_fcsr_9_5\n\t// 11-15\n\targ_csr_23_10\n\targ_cd\n\targ_cj\n\targ_ca\n\targ_sa2_16_15\n\t// 16-20\n\targ_sa3_17_15\n\targ_code_4_0\n\targ_code_14_0\n\targ_ui5_14_10\n\targ_ui6_15_10\n\t// 21-25\n\targ_ui12_21_10\n\targ_lsbw\n\targ_msbw\n\targ_lsbd\n\targ_msbd\n\t// 26-30\n\targ_hint_4_0\n\targ_hint_14_0\n\targ_level_14_0\n\targ_level_17_10\n\targ_seq_17_10\n\t// 31-35\n\targ_si12_21_10\n\targ_si14_23_10\n\targ_si16_25_10\n\targ_si20_24_5\n\targ_offset_20_0\n\t// 36~\n\targ_offset_25_0\n\targ_offset_15_0\n)\n"
  },
  {
    "path": "vendor/golang.org/x/arch/loong64/loong64asm/decode.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage loong64asm\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n)\n\ntype instArgs [5]instArg\n\n// An instFormat describes the format of an instruction encoding.\ntype instFormat struct {\n\tmask  uint32\n\tvalue uint32\n\top    Op\n\t// args describe how to decode the instruction arguments.\n\t// args is stored as a fixed-size array.\n\t// if there are fewer than len(args) arguments, args[i] == 0 marks\n\t// the end of the argument list.\n\targs instArgs\n}\n\nvar (\n\terrShort   = fmt.Errorf(\"truncated instruction\")\n\terrUnknown = fmt.Errorf(\"unknown instruction\")\n)\n\nvar decoderCover []bool\n\nfunc init() {\n\tdecoderCover = make([]bool, len(instFormats))\n}\n\n// Decode decodes the 4 bytes in src as a single instruction.\nfunc Decode(src []byte) (inst Inst, err error) {\n\tif len(src) < 4 {\n\t\treturn Inst{}, errShort\n\t}\n\n\tx := binary.LittleEndian.Uint32(src)\n\nSearch:\n\tfor i := range instFormats {\n\t\tf := &instFormats[i]\n\n\t\tif (x & f.mask) != f.value {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Decode args.\n\t\tvar args Args\n\t\tfor j, aop := range f.args {\n\t\t\tif aop == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\targ := decodeArg(aop, x, i)\n\t\t\tif arg == nil {\n\t\t\t\t// Cannot decode argument\n\t\t\t\tcontinue Search\n\t\t\t}\n\n\t\t\targs[j] = arg\n\t\t}\n\n\t\tdecoderCover[i] = true\n\t\tinst = Inst{\n\t\t\tOp:   f.op,\n\t\t\tArgs: args,\n\t\t\tEnc:  x,\n\t\t}\n\t\treturn inst, nil\n\t}\n\n\treturn Inst{}, errUnknown\n}\n\n// decodeArg decodes the arg described by aop from the instruction bits x.\n// It returns nil if x cannot be decoded according to aop.\nfunc decodeArg(aop instArg, x uint32, index int) Arg {\n\tswitch aop {\n\tcase arg_fd:\n\t\treturn F0 + Reg(x&((1<<5)-1))\n\n\tcase arg_fj:\n\t\treturn F0 + Reg((x>>5)&((1<<5)-1))\n\n\tcase arg_fk:\n\t\treturn F0 + Reg((x>>10)&((1<<5)-1))\n\n\tcase arg_fa:\n\t\treturn F0 + Reg((x>>15)&((1<<5)-1))\n\n\tcase arg_rd:\n\t\treturn R0 + Reg(x&((1<<5)-1))\n\n\tcase arg_rj:\n\t\treturn R0 + Reg((x>>5)&((1<<5)-1))\n\n\tcase arg_rk:\n\t\treturn R0 + Reg((x>>10)&((1<<5)-1))\n\n\tcase arg_fcsr_4_0:\n\t\treturn FCSR0 + Fcsr(x&((1<<5)-1))\n\n\tcase arg_fcsr_9_5:\n\t\treturn FCSR0 + Fcsr((x>>5)&((1<<5)-1))\n\n\tcase arg_cd:\n\t\treturn FCC0 + Fcc(x&((1<<3)-1))\n\n\tcase arg_cj:\n\t\treturn FCC0 + Fcc((x>>5)&((1<<3)-1))\n\n\tcase arg_ca:\n\t\treturn FCC0 + Fcc((x>>15)&((1<<3)-1))\n\n\tcase arg_op_4_0:\n\t\ttmp := x & ((1 << 5) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_csr_23_10:\n\t\ttmp := (x >> 10) & ((1 << 14) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_sa2_16_15:\n\t\tf := &instFormats[index]\n\t\ttmp := SaSimm((x >> 15) & ((1 << 2) - 1))\n\t\tif (f.op == ALSL_D) || (f.op == ALSL_W) || (f.op == ALSL_WU) {\n\t\t\treturn tmp + 1\n\t\t} else {\n\t\t\treturn tmp + 0\n\t\t}\n\n\tcase arg_sa3_17_15:\n\t\treturn SaSimm((x >> 15) & ((1 << 3) - 1))\n\n\tcase arg_code_4_0:\n\t\treturn CodeSimm(x & ((1 << 5) - 1))\n\n\tcase arg_code_14_0:\n\t\treturn CodeSimm(x & ((1 << 15) - 1))\n\n\tcase arg_ui5_14_10:\n\t\ttmp := (x >> 10) & ((1 << 5) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_ui6_15_10:\n\t\ttmp := (x >> 10) & ((1 << 6) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_ui12_21_10:\n\t\ttmp := ((x >> 10) & ((1 << 12) - 1) & 0xfff)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_lsbw:\n\t\ttmp := (x >> 10) & ((1 << 5) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_msbw:\n\t\ttmp := (x >> 16) & ((1 << 5) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_lsbd:\n\t\ttmp := (x >> 10) & ((1 << 6) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_msbd:\n\t\ttmp := (x >> 16) & ((1 << 6) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_hint_4_0:\n\t\ttmp := x & ((1 << 5) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_hint_14_0:\n\t\ttmp := x & ((1 << 15) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_level_14_0:\n\t\ttmp := x & ((1 << 15) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_level_17_10:\n\t\ttmp := (x >> 10) & ((1 << 8) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_seq_17_10:\n\t\ttmp := (x >> 10) & ((1 << 8) - 1)\n\t\treturn Uimm{tmp, false}\n\n\tcase arg_si12_21_10:\n\t\tvar tmp int16\n\n\t\t// no int12, so sign-extend a 12-bit signed to 16-bit signed\n\t\tif (x & 0x200000) == 0x200000 {\n\t\t\ttmp = int16(((x >> 10) & ((1 << 12) - 1)) | 0xf000)\n\t\t} else {\n\t\t\ttmp = int16(((x >> 10) & ((1 << 12) - 1)) | 0x0000)\n\t\t}\n\t\treturn Simm16{tmp, 12}\n\n\tcase arg_si14_23_10:\n\t\tvar tmp int32\n\t\tif (x & 0x800000) == 0x800000 {\n\t\t\ttmp = int32((((x >> 10) & ((1 << 14) - 1)) << 2) | 0xffff0000)\n\t\t} else {\n\t\t\ttmp = int32((((x >> 10) & ((1 << 14) - 1)) << 2) | 0x00000000)\n\t\t}\n\t\treturn Simm32{tmp, 14}\n\n\tcase arg_si16_25_10:\n\t\tvar tmp int32\n\n\t\tif (x & 0x2000000) == 0x2000000 {\n\t\t\ttmp = int32(((x >> 10) & ((1 << 16) - 1)) | 0xffff0000)\n\t\t} else {\n\t\t\ttmp = int32(((x >> 10) & ((1 << 16) - 1)) | 0x00000000)\n\t\t}\n\n\t\treturn Simm32{tmp, 16}\n\n\tcase arg_si20_24_5:\n\t\tvar tmp int32\n\t\tif (x & 0x1000000) == 0x1000000 {\n\t\t\ttmp = int32(((x >> 5) & ((1 << 20) - 1)) | 0xfff00000)\n\t\t} else {\n\t\t\ttmp = int32(((x >> 5) & ((1 << 20) - 1)) | 0x00000000)\n\t\t}\n\t\treturn Simm32{tmp, 20}\n\n\tcase arg_offset_20_0:\n\t\tvar tmp int32\n\n\t\tif (x & 0x10) == 0x10 {\n\t\t\ttmp = int32(((((x << 16) | ((x >> 10) & ((1 << 16) - 1))) & ((1 << 21) - 1)) << 2) | 0xff800000)\n\t\t} else {\n\t\t\ttmp = int32((((x << 16) | ((x >> 10) & ((1 << 16) - 1))) & ((1 << 21) - 1)) << 2)\n\t\t}\n\n\t\treturn OffsetSimm{tmp, 21}\n\n\tcase arg_offset_15_0:\n\t\tvar tmp int32\n\t\tif (x & 0x2000000) == 0x2000000 {\n\t\t\ttmp = int32((((x >> 10) & ((1 << 16) - 1)) << 2) | 0xfffc0000)\n\t\t} else {\n\t\t\ttmp = int32((((x >> 10) & ((1 << 16) - 1)) << 2) | 0x00000000)\n\t\t}\n\n\t\treturn OffsetSimm{tmp, 16}\n\n\tcase arg_offset_25_0:\n\t\tvar tmp int32\n\n\t\tif (x & 0x200) == 0x200 {\n\t\t\ttmp = int32(((((x << 16) | ((x >> 10) & ((1 << 16) - 1))) & ((1 << 26) - 1)) << 2) | 0xf0000000)\n\t\t} else {\n\t\t\ttmp = int32(((((x << 16) | ((x >> 10) & ((1 << 16) - 1))) & ((1 << 26) - 1)) << 2) | 0x00000000)\n\t\t}\n\n\t\treturn OffsetSimm{tmp, 26}\n\tdefault:\n\t\treturn nil\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/loong64/loong64asm/gnu.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage loong64asm\n\nimport (\n\t\"strings\"\n)\n\n// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.\n// This form typically matches the syntax defined in the Loong64 Reference Manual. See\n// https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html\nfunc GNUSyntax(inst Inst) string {\n\treturn strings.ToLower(inst.String())\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/loong64/loong64asm/inst.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage loong64asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// An Inst is a single instruction.\ntype Inst struct {\n\tOp   Op     // Opcode mnemonic\n\tEnc  uint32 // Raw encoding bits.\n\tArgs Args   // Instruction arguments, in Loong64 manual order.\n}\n\nfunc (i Inst) String() string {\n\tvar op string = i.Op.String()\n\tvar args []string\n\n\tfor _, arg := range i.Args {\n\t\tif arg == nil {\n\t\t\tbreak\n\t\t}\n\t\targs = append(args, arg.String())\n\t}\n\n\tswitch i.Op {\n\tcase OR:\n\t\tif i.Args[2].(Reg) == R0 {\n\t\t\top = \"move\"\n\t\t\targs = args[0:2]\n\t\t}\n\n\tcase ANDI:\n\t\tif i.Args[0].(Reg) == R0 && i.Args[1].(Reg) == R0 {\n\t\t\treturn \"nop\"\n\t\t}\n\n\tcase JIRL:\n\t\tif i.Args[0].(Reg) == R0 && i.Args[1].(Reg) == R1 && i.Args[2].(OffsetSimm).Imm == 0 {\n\t\t\treturn \"ret\"\n\t\t} else if i.Args[0].(Reg) == R0 && i.Args[2].(OffsetSimm).Imm == 0 {\n\t\t\treturn \"jr \" + args[1]\n\t\t}\n\n\tcase BLT:\n\t\tif i.Args[0].(Reg) == R0 {\n\t\t\top = \"bgtz\"\n\t\t\targs = args[1:]\n\t\t} else if i.Args[1].(Reg) == R0 {\n\t\t\top = \"bltz\"\n\t\t\targs = append(args[:1], args[2:]...)\n\t\t}\n\n\tcase BGE:\n\t\tif i.Args[0].(Reg) == R0 {\n\t\t\top = \"blez\"\n\t\t\targs = args[1:]\n\t\t} else if i.Args[1].(Reg) == R0 {\n\t\t\top = \"bgez\"\n\t\t\targs = append(args[:1], args[2:]...)\n\t\t}\n\t}\n\n\tif len(args) == 0 {\n\t\treturn op\n\t} else {\n\t\treturn op + \" \" + strings.Join(args, \", \")\n\t}\n}\n\n// An Op is an Loong64 opcode.\ntype Op uint16\n\n// NOTE: The actual Op values are defined in tables.go.\n// They are chosen to simplify instruction decoding and\n// are not a dense packing from 0 to N, although the\n// density is high, probably at least 90%.\nfunc (op Op) String() string {\n\tif (op >= Op(len(opstr))) || (opstr[op] == \"\") {\n\t\treturn fmt.Sprintf(\"Op(%d)\", int(op))\n\t}\n\n\treturn opstr[op]\n}\n\n// An Args holds the instruction arguments.\n// If an instruction has fewer than 5 arguments,\n// the final elements in the array are nil.\ntype Args [5]Arg\n\n// An Arg is a single instruction argument\ntype Arg interface {\n\tString() string\n}\n\n// A Reg is a single register.\n// The zero value denotes R0, not the absence of a register.\ntype Reg uint16\n\nconst (\n\t// General-purpose register\n\tR0 Reg = iota\n\tR1\n\tR2\n\tR3\n\tR4\n\tR5\n\tR6\n\tR7\n\tR8\n\tR9\n\tR10\n\tR11\n\tR12\n\tR13\n\tR14\n\tR15\n\tR16\n\tR17\n\tR18\n\tR19\n\tR20\n\tR21\n\tR22\n\tR23\n\tR24\n\tR25\n\tR26\n\tR27\n\tR28\n\tR29\n\tR30\n\tR31\n\n\t// Float point register\n\tF0\n\tF1\n\tF2\n\tF3\n\tF4\n\tF5\n\tF6\n\tF7\n\tF8\n\tF9\n\tF10\n\tF11\n\tF12\n\tF13\n\tF14\n\tF15\n\tF16\n\tF17\n\tF18\n\tF19\n\tF20\n\tF21\n\tF22\n\tF23\n\tF24\n\tF25\n\tF26\n\tF27\n\tF28\n\tF29\n\tF30\n\tF31\n)\n\nfunc (r Reg) String() string {\n\tswitch {\n\tcase r == R0:\n\t\treturn \"$zero\"\n\n\tcase r == R1:\n\t\treturn \"$ra\"\n\n\tcase r == R2:\n\t\treturn \"$tp\"\n\n\tcase r == R3:\n\t\treturn \"$sp\"\n\n\tcase (r >= R4) && (r <= R11):\n\t\treturn fmt.Sprintf(\"$a%d\", int(r-R4))\n\n\tcase (r >= R12) && (r <= R20):\n\t\treturn fmt.Sprintf(\"$t%d\", int(r-R12))\n\n\tcase r == R21:\n\t\treturn \"$r21\"\n\n\tcase r == R22:\n\t\treturn \"$fp\"\n\n\tcase (r >= R23) && (r <= R31):\n\t\treturn fmt.Sprintf(\"$s%d\", int(r-R23))\n\n\tcase (r >= F0) && (r <= F7):\n\t\treturn fmt.Sprintf(\"$fa%d\", int(r-F0))\n\n\tcase (r >= F8) && (r <= F23):\n\t\treturn fmt.Sprintf(\"$ft%d\", int(r-F8))\n\n\tcase (r >= F24) && (r <= F31):\n\t\treturn fmt.Sprintf(\"$fs%d\", int(r-F24))\n\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown(%d)\", int(r))\n\t}\n}\n\n// float control status register\ntype Fcsr uint8\n\nconst (\n\tFCSR0 Fcsr = iota\n\tFCSR1\n\tFCSR2\n\tFCSR3\n)\n\nfunc (f Fcsr) String() string {\n\treturn fmt.Sprintf(\"$fcsr%d\", uint8(f))\n}\n\n// float condition flags register\ntype Fcc uint8\n\nconst (\n\tFCC0 Fcc = iota\n\tFCC1\n\tFCC2\n\tFCC3\n\tFCC4\n\tFCC5\n\tFCC6\n\tFCC7\n)\n\nfunc (f Fcc) String() string {\n\treturn fmt.Sprintf(\"$fcc%d\", uint8(f))\n}\n\n// An Imm is an integer constant.\ntype Uimm struct {\n\tImm     uint32\n\tDecimal bool\n}\n\nfunc (i Uimm) String() string {\n\tif i.Decimal == true {\n\t\treturn fmt.Sprintf(\"%d\", i.Imm)\n\t} else {\n\t\treturn fmt.Sprintf(\"%#x\", i.Imm)\n\t}\n}\n\ntype Simm16 struct {\n\tImm   int16\n\tWidth uint8\n}\n\nfunc (si Simm16) String() string {\n\treturn fmt.Sprintf(\"%d\", int32(si.Imm))\n}\n\ntype Simm32 struct {\n\tImm   int32\n\tWidth uint8\n}\n\nfunc (si Simm32) String() string {\n\treturn fmt.Sprintf(\"%d\", int32(si.Imm))\n}\n\ntype OffsetSimm struct {\n\tImm   int32\n\tWidth uint8\n}\n\nfunc (o OffsetSimm) String() string {\n\treturn fmt.Sprintf(\"%d\", int32(o.Imm))\n}\n\ntype SaSimm int16\n\nfunc (s SaSimm) String() string {\n\treturn fmt.Sprintf(\"%#x\", int(s))\n}\n\ntype CodeSimm int16\n\nfunc (c CodeSimm) String() string {\n\treturn fmt.Sprintf(\"%#x\", int(c))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/loong64/loong64asm/plan9x.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage loong64asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// GoSyntax returns the Go assembler syntax for the instruction.\n// The syntax was originally defined by Plan 9.\n// The pc is the program counter of the instruction, used for\n// expanding PC-relative addresses into absolute ones.\n// The symname function queries the symbol table for the program\n// being disassembled. Given a target address it returns the name\n// and base address of the symbol containing the target, if any;\n// otherwise it returns \"\", 0.\nfunc GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64)) string {\n\tif symname == nil {\n\t\tsymname = func(uint64) (string, uint64) { return \"\", 0 }\n\t}\n\tif inst.Op == 0 && inst.Enc == 0 {\n\t\treturn \"WORD $0\"\n\t} else if inst.Op == 0 {\n\t\treturn \"?\"\n\t}\n\n\tvar args []string\n\tfor _, a := range inst.Args {\n\t\tif a == nil {\n\t\t\tbreak\n\t\t}\n\t\targs = append(args, plan9Arg(&inst, pc, symname, a))\n\t}\n\n\tvar op string = plan9OpMap[inst.Op]\n\tif op == \"\" {\n\t\top = \"Unknown \" + inst.Op.String()\n\t}\n\n\tswitch inst.Op {\n\tcase BSTRPICK_W, BSTRPICK_D, BSTRINS_W, BSTRINS_D:\n\t\tmsbw, lsbw := inst.Args[2].(Uimm), inst.Args[3].(Uimm)\n\t\tif inst.Op == BSTRPICK_D && msbw.Imm == 15 && lsbw.Imm == 0 {\n\t\t\top = \"MOVHU\"\n\t\t\targs = append(args[1:2], args[0:1]...)\n\t\t} else {\n\t\t\targs[0], args[2], args[3] = args[2], args[3], args[0]\n\t\t}\n\n\tcase BCNEZ, BCEQZ:\n\t\targs = args[1:2]\n\n\tcase BEQ, BNE:\n\t\trj := inst.Args[0].(Reg)\n\t\trd := inst.Args[1].(Reg)\n\t\tif rj == rd && inst.Op == BEQ {\n\t\t\top = \"JMP\"\n\t\t\targs = args[2:]\n\t\t} else if rj == R0 {\n\t\t\targs = args[1:]\n\t\t} else if rd == R0 {\n\t\t\targs = append(args[:1], args[2:]...)\n\t\t}\n\n\tcase BEQZ, BNEZ:\n\t\tif inst.Args[0].(Reg) == R0 && inst.Op == BEQ {\n\t\t\top = \"JMP\"\n\t\t\targs = args[1:]\n\t\t}\n\n\tcase BLT, BLTU, BGE, BGEU:\n\t\trj := inst.Args[0].(Reg)\n\t\trd := inst.Args[1].(Reg)\n\t\tif rj == rd && (inst.Op == BGE || inst.Op == BGEU) {\n\t\t\top = \"JMP\"\n\t\t\targs = args[2:]\n\t\t} else if rj == R0 {\n\t\t\tswitch inst.Op {\n\t\t\tcase BGE:\n\t\t\t\top = \"BLEZ\"\n\t\t\tcase BLT:\n\t\t\t\top = \"BGTZ\"\n\t\t\t}\n\t\t\targs = args[1:]\n\t\t} else if rd == R0 {\n\t\t\tif !strings.HasSuffix(op, \"U\") {\n\t\t\t\top += \"Z\"\n\t\t\t}\n\t\t\targs = append(args[:1], args[2:]...)\n\t\t}\n\n\tcase JIRL:\n\t\trd := inst.Args[0].(Reg)\n\t\trj := inst.Args[1].(Reg)\n\t\tregno := uint16(rj) & 31\n\t\toff := inst.Args[2].(OffsetSimm).Imm\n\t\tif rd == R0 && rj == R1 && off == 0 {\n\t\t\treturn fmt.Sprintf(\"RET\")\n\t\t} else if rd == R0 && off == 0 {\n\t\t\treturn fmt.Sprintf(\"JMP (R%d)\", regno)\n\t\t} else if rd == R0 {\n\t\t\treturn fmt.Sprintf(\"JMP %d(R%d)\", off, regno)\n\t\t}\n\t\treturn fmt.Sprintf(\"CALL (R%d)\", regno)\n\n\tcase LD_B, LD_H, LD_W, LD_D, LD_BU, LD_HU, LD_WU, LL_W, LL_D,\n\t\tST_B, ST_H, ST_W, ST_D, SC_W, SC_D, FLD_S, FLD_D, FST_S, FST_D:\n\t\tvar off int32\n\t\tswitch a := inst.Args[2].(type) {\n\t\tcase Simm16:\n\t\t\toff = signumConvInt32(int32(a.Imm), a.Width)\n\t\tcase Simm32:\n\t\t\toff = signumConvInt32(int32(a.Imm), a.Width) >> 2\n\t\t}\n\t\tIop := strings.ToUpper(inst.Op.String())\n\t\tif strings.HasPrefix(Iop, \"L\") || strings.HasPrefix(Iop, \"FL\") {\n\t\t\treturn fmt.Sprintf(\"%s %d(%s), %s\", op, off, args[1], args[0])\n\t\t}\n\t\treturn fmt.Sprintf(\"%s %s, %d(%s)\", op, args[0], off, args[1])\n\n\tcase LDX_B, LDX_H, LDX_W, LDX_D, LDX_BU, LDX_HU, LDX_WU, FLDX_S, FLDX_D,\n\t\tSTX_B, STX_H, STX_W, STX_D, FSTX_S, FSTX_D:\n\t\tIop := strings.ToUpper(inst.Op.String())\n\t\tif strings.HasPrefix(Iop, \"L\") || strings.HasPrefix(Iop, \"FL\") {\n\t\t\treturn fmt.Sprintf(\"%s (%s)(%s), %s\", op, args[1], args[2], args[0])\n\t\t}\n\t\treturn fmt.Sprintf(\"%s %s, (%s)(%s)\", op, args[0], args[1], args[2])\n\n\tcase AMADD_B, AMADD_D, AMADD_DB_B, AMADD_DB_D, AMADD_DB_H, AMADD_DB_W, AMADD_H,\n\t\tAMADD_W, AMAND_D, AMAND_DB_D, AMAND_DB_W, AMAND_W, AMCAS_B, AMCAS_D, AMCAS_DB_B,\n\t\tAMCAS_DB_D, AMCAS_DB_H, AMCAS_DB_W, AMCAS_H, AMCAS_W, AMMAX_D, AMMAX_DB_D,\n\t\tAMMAX_DB_DU, AMMAX_DB_W, AMMAX_DB_WU, AMMAX_DU, AMMAX_W, AMMAX_WU, AMMIN_D,\n\t\tAMMIN_DB_D, AMMIN_DB_DU, AMMIN_DB_W, AMMIN_DB_WU, AMMIN_DU, AMMIN_W, AMMIN_WU,\n\t\tAMOR_D, AMOR_DB_D, AMOR_DB_W, AMOR_W, AMSWAP_B, AMSWAP_D, AMSWAP_DB_B, AMSWAP_DB_D,\n\t\tAMSWAP_DB_H, AMSWAP_DB_W, AMSWAP_H, AMSWAP_W, AMXOR_D, AMXOR_DB_D, AMXOR_DB_W, AMXOR_W:\n\t\treturn fmt.Sprintf(\"%s %s, (%s), %s\", op, args[1], args[2], args[0])\n\n\tdefault:\n\t\t// Reverse args, placing dest last\n\t\tfor i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {\n\t\t\targs[i], args[j] = args[j], args[i]\n\t\t}\n\t\tswitch len(args) { // Special use cases\n\t\tcase 0, 1:\n\t\t\tif inst.Op != B && inst.Op != BL {\n\t\t\t\treturn op\n\t\t\t}\n\n\t\tcase 3:\n\t\t\tswitch a0 := inst.Args[0].(type) {\n\t\t\tcase Reg:\n\t\t\t\trj := inst.Args[1].(Reg)\n\t\t\t\tif a0 == rj && a0 != R0 {\n\t\t\t\t\targs = args[0:2]\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch inst.Op {\n\t\t\tcase SUB_W, SUB_D, ADDI_W, ADDI_D, ORI:\n\t\t\t\trj := inst.Args[1].(Reg)\n\t\t\t\tif rj == R0 {\n\t\t\t\t\targs = append(args[0:1], args[2:]...)\n\t\t\t\t\tif inst.Op == SUB_W {\n\t\t\t\t\t\top = \"NEGW\"\n\t\t\t\t\t} else if inst.Op == SUB_D {\n\t\t\t\t\t\top = \"NEGV\"\n\t\t\t\t\t} else {\n\t\t\t\t\t\top = \"MOVW\"\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\tcase ANDI:\n\t\t\t\tui12 := inst.Args[2].(Uimm)\n\t\t\t\tif ui12.Imm == uint32(0xff) {\n\t\t\t\t\top = \"MOVBU\"\n\t\t\t\t\targs = args[1:]\n\t\t\t\t} else if ui12.Imm == 0 && inst.Args[0].(Reg) == R0 && inst.Args[1].(Reg) == R0 {\n\t\t\t\t\treturn \"NOOP\"\n\t\t\t\t}\n\n\t\t\tcase SLL_W, OR:\n\t\t\t\trk := inst.Args[2].(Reg)\n\t\t\t\tif rk == R0 {\n\t\t\t\t\targs = args[1:]\n\t\t\t\t\tif inst.Op == SLL_W {\n\t\t\t\t\t\top = \"MOVW\"\n\t\t\t\t\t} else {\n\t\t\t\t\t\top = \"MOVV\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif args != nil {\n\t\top += \" \" + strings.Join(args, \", \")\n\t}\n\treturn op\n}\n\nfunc plan9Arg(inst *Inst, pc uint64, symname func(uint64) (string, uint64), arg Arg) string {\n\t// Reg:\t\t\tgpr[0, 31] and fpr[0, 31]\n\t// Fcsr:\t\tfcsr[0, 3]\n\t// Fcc:\t\t\tfcc[0, 7]\n\t// Uimm:\t\tunsigned integer constant\n\t// Simm16:\t\tsi16\n\t// Simm32:\t\tsi32\n\t// OffsetSimm:\tsi32\n\tswitch a := arg.(type) {\n\tcase Reg:\n\t\tregenum := uint16(a)\n\t\tregno := uint16(a) & 0x1f\n\t\t// General-purpose register\n\t\tif regenum >= uint16(R0) && regenum <= uint16(R31) {\n\t\t\treturn fmt.Sprintf(\"R%d\", regno)\n\t\t} else { // Float point register\n\t\t\treturn fmt.Sprintf(\"F%d\", regno)\n\t\t}\n\n\tcase Fcsr:\n\t\tregno := uint8(a) & 0x1f\n\t\treturn fmt.Sprintf(\"FCSR%d\", regno)\n\n\tcase Fcc:\n\t\tregno := uint8(a) & 0x1f\n\t\treturn fmt.Sprintf(\"FCC%d\", regno)\n\n\tcase Uimm:\n\t\treturn fmt.Sprintf(\"$%d\", a.Imm)\n\n\tcase Simm16:\n\t\tsi16 := signumConvInt32(int32(a.Imm), a.Width)\n\t\treturn fmt.Sprintf(\"$%d\", si16)\n\n\tcase Simm32:\n\t\tsi32 := signumConvInt32(a.Imm, a.Width)\n\t\treturn fmt.Sprintf(\"$%d\", si32)\n\n\tcase OffsetSimm:\n\t\toffs := offsConvInt32(a.Imm, a.Width)\n\t\tif inst.Op == B || inst.Op == BL {\n\t\t\taddr := int64(pc) + int64(a.Imm)\n\t\t\tif s, base := symname(uint64(addr)); s != \"\" && uint64(addr) == base {\n\t\t\t\treturn fmt.Sprintf(\"%s(SB)\", s)\n\t\t\t}\n\t\t}\n\t\treturn fmt.Sprintf(\"%d(PC)\", offs>>2)\n\n\tcase SaSimm:\n\t\treturn fmt.Sprintf(\"$%d\", a)\n\n\tcase CodeSimm:\n\t\treturn fmt.Sprintf(\"$%d\", a)\n\n\t}\n\treturn strings.ToUpper(arg.String())\n}\n\nfunc signumConvInt32(imm int32, width uint8) int32 {\n\tactive := uint32(1<<width) - 1\n\tsignum := uint32(imm) & active\n\tif ((signum >> (width - 1)) & 0x1) == 1 {\n\t\tsignum |= ^active\n\t}\n\treturn int32(signum)\n}\n\nfunc offsConvInt32(imm int32, width uint8) int32 {\n\trelWidth := width + 2\n\treturn signumConvInt32(imm, relWidth)\n}\n\nvar plan9OpMap = map[Op]string{\n\tADD_W:       \"ADD\",\n\tADD_D:       \"ADDV\",\n\tSUB_W:       \"SUB\",\n\tSUB_D:       \"SUBV\",\n\tADDI_W:      \"ADD\",\n\tADDI_D:      \"ADDV\",\n\tLU12I_W:     \"LU12IW\",\n\tLU32I_D:     \"LU32ID\",\n\tLU52I_D:     \"LU52ID\",\n\tSLT:         \"SGT\",\n\tSLTU:        \"SGTU\",\n\tSLTI:        \"SGT\",\n\tSLTUI:       \"SGTU\",\n\tPCADDU12I:   \"PCADDU12I\",\n\tPCALAU12I:   \"PCALAU12I\",\n\tAND:         \"AND\",\n\tOR:          \"OR\",\n\tNOR:         \"NOR\",\n\tXOR:         \"XOR\",\n\tANDI:        \"AND\",\n\tORI:         \"OR\",\n\tXORI:        \"XOR\",\n\tMUL_W:       \"MUL\",\n\tMULH_W:      \"MULH\",\n\tMULH_WU:     \"MULHU\",\n\tMUL_D:       \"MULV\",\n\tMULH_D:      \"MULHV\",\n\tMULH_DU:     \"MULHVU\",\n\tDIV_W:       \"DIV\",\n\tDIV_WU:      \"DIVU\",\n\tDIV_D:       \"DIVV\",\n\tDIV_DU:      \"DIVVU\",\n\tMOD_W:       \"REM\",\n\tMOD_WU:      \"REMU\",\n\tMOD_D:       \"REMV\",\n\tMOD_DU:      \"REMVU\",\n\tSLL_W:       \"SLL\",\n\tSRL_W:       \"SRL\",\n\tSRA_W:       \"SRA\",\n\tROTR_W:      \"ROTR\",\n\tSLL_D:       \"SLLV\",\n\tSRL_D:       \"SRLV\",\n\tSRA_D:       \"SRAV\",\n\tROTR_D:      \"ROTRV\",\n\tSLLI_W:      \"SLL\",\n\tSRLI_W:      \"SRL\",\n\tSRAI_W:      \"SRA\",\n\tROTRI_W:     \"ROTR\",\n\tSLLI_D:      \"SLLV\",\n\tSRLI_D:      \"SRLV\",\n\tSRAI_D:      \"SRAV\",\n\tROTRI_D:     \"ROTRV\",\n\tEXT_W_B:     \"?\",\n\tEXT_W_H:     \"?\",\n\tBITREV_W:    \"BITREVW\",\n\tBITREV_D:    \"BITREVV\",\n\tCLO_W:       \"CLOW\",\n\tCLO_D:       \"CLOV\",\n\tCLZ_W:       \"CLZW\",\n\tCLZ_D:       \"CLZV\",\n\tCTO_W:       \"CTOW\",\n\tCTO_D:       \"CTOV\",\n\tCTZ_W:       \"CTZW\",\n\tCTZ_D:       \"CTZV\",\n\tREVB_2H:     \"REVB2H\",\n\tREVB_2W:     \"REVB2W\",\n\tREVB_4H:     \"REVB4H\",\n\tREVB_D:      \"REVBV\",\n\tBSTRPICK_W:  \"BSTRPICKW\",\n\tBSTRPICK_D:  \"BSTRPICKV\",\n\tBSTRINS_W:   \"BSTRINSW\",\n\tBSTRINS_D:   \"BSTRINSV\",\n\tMASKEQZ:     \"MASKEQZ\",\n\tMASKNEZ:     \"MASKNEZ\",\n\tBCNEZ:       \"BFPT\",\n\tBCEQZ:       \"BFPF\",\n\tBEQ:         \"BEQ\",\n\tBNE:         \"BNE\",\n\tBEQZ:        \"BEQ\",\n\tBNEZ:        \"BNE\",\n\tBLT:         \"BLT\",\n\tBLTU:        \"BLTU\",\n\tBGE:         \"BGE\",\n\tBGEU:        \"BGEU\",\n\tB:           \"JMP\",\n\tBL:          \"CALL\",\n\tLD_B:        \"MOVB\",\n\tLD_H:        \"MOVH\",\n\tLD_W:        \"MOVW\",\n\tLD_D:        \"MOVV\",\n\tLD_BU:       \"MOVBU\",\n\tLD_HU:       \"MOVHU\",\n\tLD_WU:       \"MOVWU\",\n\tST_B:        \"MOVB\",\n\tST_H:        \"MOVH\",\n\tST_W:        \"MOVW\",\n\tST_D:        \"MOVV\",\n\tLDX_B:       \"MOVB\",\n\tLDX_BU:      \"MOVBU\",\n\tLDX_D:       \"MOVV\",\n\tLDX_H:       \"MOVH\",\n\tLDX_HU:      \"MOVHU\",\n\tLDX_W:       \"MOVW\",\n\tLDX_WU:      \"MOVWU\",\n\tSTX_B:       \"MOVB\",\n\tSTX_D:       \"MOVV\",\n\tSTX_H:       \"MOVH\",\n\tSTX_W:       \"MOVW\",\n\tAMADD_B:     \"AMADDB\",\n\tAMADD_D:     \"AMADDV\",\n\tAMADD_DB_B:  \"AMADDDBB\",\n\tAMADD_DB_D:  \"AMADDDBV\",\n\tAMADD_DB_H:  \"AMADDDBH\",\n\tAMADD_DB_W:  \"AMADDDBW\",\n\tAMADD_H:     \"AMADDH\",\n\tAMADD_W:     \"AMADDW\",\n\tAMAND_D:     \"AMANDV\",\n\tAMAND_DB_D:  \"AMANDDBV\",\n\tAMAND_DB_W:  \"AMANDDBW\",\n\tAMAND_W:     \"AMANDW\",\n\tAMCAS_B:     \"AMCASB\",\n\tAMCAS_D:     \"AMCASV\",\n\tAMCAS_DB_B:  \"AMCASDBB\",\n\tAMCAS_DB_D:  \"AMCASDBV\",\n\tAMCAS_DB_H:  \"AMCASDBH\",\n\tAMCAS_DB_W:  \"AMCASDBW\",\n\tAMCAS_H:     \"AMCASH\",\n\tAMCAS_W:     \"AMCASW\",\n\tAMMAX_D:     \"AMMAXV\",\n\tAMMAX_DB_D:  \"AMMAXDBV\",\n\tAMMAX_DB_DU: \"AMMAXDBVU\",\n\tAMMAX_DB_W:  \"AMMAXDBW\",\n\tAMMAX_DB_WU: \"AMMAXDBWU\",\n\tAMMAX_DU:    \"AMMAXVU\",\n\tAMMAX_W:     \"AMMAXW\",\n\tAMMAX_WU:    \"AMMAXWU\",\n\tAMMIN_D:     \"AMMINV\",\n\tAMMIN_DB_D:  \"AMMINDBV\",\n\tAMMIN_DB_DU: \"AMMINDBVU\",\n\tAMMIN_DB_W:  \"AMMINDBW\",\n\tAMMIN_DB_WU: \"AMMINDBWU\",\n\tAMMIN_DU:    \"AMMINVU\",\n\tAMMIN_W:     \"AMMINW\",\n\tAMMIN_WU:    \"AMMINWU\",\n\tAMOR_D:      \"AMORV\",\n\tAMOR_DB_D:   \"AMORDBV\",\n\tAMOR_DB_W:   \"AMORDBW\",\n\tAMOR_W:      \"AMORW\",\n\tAMSWAP_B:    \"AMSWAPB\",\n\tAMSWAP_D:    \"AMSWAPV\",\n\tAMSWAP_DB_B: \"AMSWAPDBB\",\n\tAMSWAP_DB_D: \"AMSWAPDBV\",\n\tAMSWAP_DB_H: \"AMSWAPDBH\",\n\tAMSWAP_DB_W: \"AMSWAPDBW\",\n\tAMSWAP_H:    \"AMSWAPH\",\n\tAMSWAP_W:    \"AMSWAPW\",\n\tAMXOR_D:     \"AMXORV\",\n\tAMXOR_DB_D:  \"AMXORDBV\",\n\tAMXOR_DB_W:  \"AMXORDBW\",\n\tAMXOR_W:     \"AMXORW\",\n\tLL_W:        \"LL\",\n\tLL_D:        \"LLV\",\n\tSC_W:        \"SC\",\n\tSC_D:        \"SCV\",\n\tCRCC_W_B_W:  \"CRCCWBW\",\n\tCRCC_W_D_W:  \"CRCCWVW\",\n\tCRCC_W_H_W:  \"CRCCWHW\",\n\tCRCC_W_W_W:  \"CRCCWWW\",\n\tCRC_W_B_W:   \"CRCWBW\",\n\tCRC_W_D_W:   \"CRCWVW\",\n\tCRC_W_H_W:   \"CRCWHW\",\n\tCRC_W_W_W:   \"CRCWWW\",\n\tDBAR:        \"DBAR\",\n\tSYSCALL:     \"SYSCALL\",\n\tBREAK:       \"BREAK\",\n\tRDTIMEL_W:   \"RDTIMELW\",\n\tRDTIMEH_W:   \"RDTIMEHW\",\n\tRDTIME_D:    \"RDTIMED\",\n\tCPUCFG:      \"CPUCFG\",\n\n\t// Floating-point instructions\n\tFADD_S:       \"ADDF\",\n\tFADD_D:       \"ADDD\",\n\tFSUB_S:       \"SUBF\",\n\tFSUB_D:       \"SUBD\",\n\tFMUL_S:       \"MULF\",\n\tFMUL_D:       \"MULD\",\n\tFDIV_S:       \"DIVF\",\n\tFDIV_D:       \"DIVD\",\n\tFMSUB_S:      \"FMSUBF\",\n\tFMSUB_D:      \"FMSUBD\",\n\tFMADD_S:      \"FMADDF\",\n\tFMADD_D:      \"FMADDD\",\n\tFNMADD_S:     \"FNMADDF\",\n\tFNMADD_D:     \"FNMADDD\",\n\tFNMSUB_S:     \"FNMSUBF\",\n\tFNMSUB_D:     \"FNMSUBD\",\n\tFABS_S:       \"ABSF\",\n\tFABS_D:       \"ABSD\",\n\tFNEG_S:       \"NEGF\",\n\tFNEG_D:       \"NEGD\",\n\tFSQRT_S:      \"SQRTF\",\n\tFSQRT_D:      \"SQRTD\",\n\tFCOPYSIGN_S:  \"FCOPYSGF\",\n\tFCOPYSIGN_D:  \"FCOPYSGD\",\n\tFMAX_S:       \"FMAXF\",\n\tFMAX_D:       \"FMAXD\",\n\tFMIN_S:       \"FMINF\",\n\tFMIN_D:       \"FMIND\",\n\tFCLASS_S:     \"FCLASSF\",\n\tFCLASS_D:     \"FCLASSD\",\n\tFCMP_CEQ_S:   \"CMPEQF\",\n\tFCMP_CEQ_D:   \"CMPEQD\",\n\tFCMP_SLE_S:   \"CMPGEF\",\n\tFCMP_SLE_D:   \"CMPGED\",\n\tFCMP_SLT_S:   \"CMPGTF\",\n\tFCMP_SLT_D:   \"CMPGTD\",\n\tFCVT_D_S:     \"MOVFD\",\n\tFCVT_S_D:     \"MOVDF\",\n\tFFINT_S_W:    \"FFINTFW\",\n\tFFINT_S_L:    \"FFINTFV\",\n\tFFINT_D_W:    \"FFINTDW\",\n\tFFINT_D_L:    \"FFINTDV\",\n\tFTINTRM_L_D:  \"FTINTRMVD\",\n\tFTINTRM_L_S:  \"FTINTRMVF\",\n\tFTINTRM_W_D:  \"FTINTRMWD\",\n\tFTINTRM_W_S:  \"FTINTRMWF\",\n\tFTINTRNE_L_D: \"FTINTRNEVD\",\n\tFTINTRNE_L_S: \"FTINTRNEVF\",\n\tFTINTRNE_W_D: \"FTINTRNEWD\",\n\tFTINTRNE_W_S: \"FTINTRNEWF\",\n\tFTINTRP_L_D:  \"FTINTRPVD\",\n\tFTINTRP_L_S:  \"FTINTRPVF\",\n\tFTINTRP_W_D:  \"FTINTRPWD\",\n\tFTINTRP_W_S:  \"FTINTRPWF\",\n\tFTINTRZ_L_D:  \"FTINTRZVD\",\n\tFTINTRZ_L_S:  \"FTINTRZVF\",\n\tFTINTRZ_W_D:  \"FTINTRZWD\",\n\tFTINTRZ_W_S:  \"FTINTRZWF\",\n\tFTINT_L_D:    \"FTINTVD\",\n\tFTINT_L_S:    \"FTINTVF\",\n\tFTINT_W_D:    \"FTINTWD\",\n\tFTINT_W_S:    \"FTINTWF\",\n\tFRINT_S:      \"FRINTS\",\n\tFRINT_D:      \"FRINTD\",\n\tFMOV_S:       \"MOVF\",\n\tFMOV_D:       \"MOVD\",\n\tMOVGR2FR_W:   \"MOVW\",\n\tMOVGR2FR_D:   \"MOVV\",\n\tMOVFR2GR_S:   \"MOVW\",\n\tMOVFR2GR_D:   \"MOVV\",\n\tMOVGR2CF:     \"MOVV\",\n\tMOVCF2GR:     \"MOVV\",\n\tMOVFCSR2GR:   \"MOVV\",\n\tMOVGR2FCSR:   \"MOVV\",\n\tMOVFR2CF:     \"MOVV\",\n\tMOVCF2FR:     \"MOVV\",\n\tFLD_S:        \"MOVF\",\n\tFLD_D:        \"MOVD\",\n\tFST_S:        \"MOVF\",\n\tFST_D:        \"MOVD\",\n\tFLDX_S:       \"MOVF\",\n\tFLDX_D:       \"MOVD\",\n\tFSTX_S:       \"MOVF\",\n\tFSTX_D:       \"MOVD\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/loong64/loong64asm/tables.go",
    "content": "// Code generated by loong64spec LoongArch-Vol1-EN.pdf, DO NOT EDIT.\n\n// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage loong64asm\n\nconst (\n\t_ Op = iota\n\tADDI_D\n\tADDI_W\n\tADDU16I_D\n\tADD_D\n\tADD_W\n\tALSL_D\n\tALSL_W\n\tALSL_WU\n\tAMADD_B\n\tAMADD_D\n\tAMADD_DB_B\n\tAMADD_DB_D\n\tAMADD_DB_H\n\tAMADD_DB_W\n\tAMADD_H\n\tAMADD_W\n\tAMAND_D\n\tAMAND_DB_D\n\tAMAND_DB_W\n\tAMAND_W\n\tAMCAS_B\n\tAMCAS_D\n\tAMCAS_DB_B\n\tAMCAS_DB_D\n\tAMCAS_DB_H\n\tAMCAS_DB_W\n\tAMCAS_H\n\tAMCAS_W\n\tAMMAX_D\n\tAMMAX_DB_D\n\tAMMAX_DB_DU\n\tAMMAX_DB_W\n\tAMMAX_DB_WU\n\tAMMAX_DU\n\tAMMAX_W\n\tAMMAX_WU\n\tAMMIN_D\n\tAMMIN_DB_D\n\tAMMIN_DB_DU\n\tAMMIN_DB_W\n\tAMMIN_DB_WU\n\tAMMIN_DU\n\tAMMIN_W\n\tAMMIN_WU\n\tAMOR_D\n\tAMOR_DB_D\n\tAMOR_DB_W\n\tAMOR_W\n\tAMSWAP_B\n\tAMSWAP_D\n\tAMSWAP_DB_B\n\tAMSWAP_DB_D\n\tAMSWAP_DB_H\n\tAMSWAP_DB_W\n\tAMSWAP_H\n\tAMSWAP_W\n\tAMXOR_D\n\tAMXOR_DB_D\n\tAMXOR_DB_W\n\tAMXOR_W\n\tAND\n\tANDI\n\tANDN\n\tASRTGT_D\n\tASRTLE_D\n\tB\n\tBCEQZ\n\tBCNEZ\n\tBEQ\n\tBEQZ\n\tBGE\n\tBGEU\n\tBITREV_4B\n\tBITREV_8B\n\tBITREV_D\n\tBITREV_W\n\tBL\n\tBLT\n\tBLTU\n\tBNE\n\tBNEZ\n\tBREAK\n\tBSTRINS_D\n\tBSTRINS_W\n\tBSTRPICK_D\n\tBSTRPICK_W\n\tBYTEPICK_D\n\tBYTEPICK_W\n\tCACOP\n\tCLO_D\n\tCLO_W\n\tCLZ_D\n\tCLZ_W\n\tCPUCFG\n\tCRCC_W_B_W\n\tCRCC_W_D_W\n\tCRCC_W_H_W\n\tCRCC_W_W_W\n\tCRC_W_B_W\n\tCRC_W_D_W\n\tCRC_W_H_W\n\tCRC_W_W_W\n\tCSRRD\n\tCSRWR\n\tCSRXCHG\n\tCTO_D\n\tCTO_W\n\tCTZ_D\n\tCTZ_W\n\tDBAR\n\tDBCL\n\tDIV_D\n\tDIV_DU\n\tDIV_W\n\tDIV_WU\n\tERTN\n\tEXT_W_B\n\tEXT_W_H\n\tFABS_D\n\tFABS_S\n\tFADD_D\n\tFADD_S\n\tFCLASS_D\n\tFCLASS_S\n\tFCMP_CAF_D\n\tFCMP_CAF_S\n\tFCMP_CEQ_D\n\tFCMP_CEQ_S\n\tFCMP_CLE_D\n\tFCMP_CLE_S\n\tFCMP_CLT_D\n\tFCMP_CLT_S\n\tFCMP_CNE_D\n\tFCMP_CNE_S\n\tFCMP_COR_D\n\tFCMP_COR_S\n\tFCMP_CUEQ_D\n\tFCMP_CUEQ_S\n\tFCMP_CULE_D\n\tFCMP_CULE_S\n\tFCMP_CULT_D\n\tFCMP_CULT_S\n\tFCMP_CUNE_D\n\tFCMP_CUNE_S\n\tFCMP_CUN_D\n\tFCMP_CUN_S\n\tFCMP_SAF_D\n\tFCMP_SAF_S\n\tFCMP_SEQ_D\n\tFCMP_SEQ_S\n\tFCMP_SLE_D\n\tFCMP_SLE_S\n\tFCMP_SLT_D\n\tFCMP_SLT_S\n\tFCMP_SNE_D\n\tFCMP_SNE_S\n\tFCMP_SOR_D\n\tFCMP_SOR_S\n\tFCMP_SUEQ_D\n\tFCMP_SUEQ_S\n\tFCMP_SULE_D\n\tFCMP_SULE_S\n\tFCMP_SULT_D\n\tFCMP_SULT_S\n\tFCMP_SUNE_D\n\tFCMP_SUNE_S\n\tFCMP_SUN_D\n\tFCMP_SUN_S\n\tFCOPYSIGN_D\n\tFCOPYSIGN_S\n\tFCVT_D_S\n\tFCVT_S_D\n\tFDIV_D\n\tFDIV_S\n\tFFINT_D_L\n\tFFINT_D_W\n\tFFINT_S_L\n\tFFINT_S_W\n\tFLDGT_D\n\tFLDGT_S\n\tFLDLE_D\n\tFLDLE_S\n\tFLDX_D\n\tFLDX_S\n\tFLD_D\n\tFLD_S\n\tFLOGB_D\n\tFLOGB_S\n\tFMADD_D\n\tFMADD_S\n\tFMAXA_D\n\tFMAXA_S\n\tFMAX_D\n\tFMAX_S\n\tFMINA_D\n\tFMINA_S\n\tFMIN_D\n\tFMIN_S\n\tFMOV_D\n\tFMOV_S\n\tFMSUB_D\n\tFMSUB_S\n\tFMUL_D\n\tFMUL_S\n\tFNEG_D\n\tFNEG_S\n\tFNMADD_D\n\tFNMADD_S\n\tFNMSUB_D\n\tFNMSUB_S\n\tFRECIPE_D\n\tFRECIPE_S\n\tFRECIP_D\n\tFRECIP_S\n\tFRINT_D\n\tFRINT_S\n\tFRSQRTE_D\n\tFRSQRTE_S\n\tFRSQRT_D\n\tFRSQRT_S\n\tFSCALEB_D\n\tFSCALEB_S\n\tFSEL\n\tFSQRT_D\n\tFSQRT_S\n\tFSTGT_D\n\tFSTGT_S\n\tFSTLE_D\n\tFSTLE_S\n\tFSTX_D\n\tFSTX_S\n\tFST_D\n\tFST_S\n\tFSUB_D\n\tFSUB_S\n\tFTINTRM_L_D\n\tFTINTRM_L_S\n\tFTINTRM_W_D\n\tFTINTRM_W_S\n\tFTINTRNE_L_D\n\tFTINTRNE_L_S\n\tFTINTRNE_W_D\n\tFTINTRNE_W_S\n\tFTINTRP_L_D\n\tFTINTRP_L_S\n\tFTINTRP_W_D\n\tFTINTRP_W_S\n\tFTINTRZ_L_D\n\tFTINTRZ_L_S\n\tFTINTRZ_W_D\n\tFTINTRZ_W_S\n\tFTINT_L_D\n\tFTINT_L_S\n\tFTINT_W_D\n\tFTINT_W_S\n\tIBAR\n\tIDLE\n\tINVTLB\n\tIOCSRRD_B\n\tIOCSRRD_D\n\tIOCSRRD_H\n\tIOCSRRD_W\n\tIOCSRWR_B\n\tIOCSRWR_D\n\tIOCSRWR_H\n\tIOCSRWR_W\n\tJIRL\n\tLDDIR\n\tLDGT_B\n\tLDGT_D\n\tLDGT_H\n\tLDGT_W\n\tLDLE_B\n\tLDLE_D\n\tLDLE_H\n\tLDLE_W\n\tLDPTE\n\tLDPTR_D\n\tLDPTR_W\n\tLDX_B\n\tLDX_BU\n\tLDX_D\n\tLDX_H\n\tLDX_HU\n\tLDX_W\n\tLDX_WU\n\tLD_B\n\tLD_BU\n\tLD_D\n\tLD_H\n\tLD_HU\n\tLD_W\n\tLD_WU\n\tLLACQ_D\n\tLLACQ_W\n\tLL_D\n\tLL_W\n\tLU12I_W\n\tLU32I_D\n\tLU52I_D\n\tMASKEQZ\n\tMASKNEZ\n\tMOD_D\n\tMOD_DU\n\tMOD_W\n\tMOD_WU\n\tMOVCF2FR\n\tMOVCF2GR\n\tMOVFCSR2GR\n\tMOVFR2CF\n\tMOVFR2GR_D\n\tMOVFR2GR_S\n\tMOVFRH2GR_S\n\tMOVGR2CF\n\tMOVGR2FCSR\n\tMOVGR2FRH_W\n\tMOVGR2FR_D\n\tMOVGR2FR_W\n\tMULH_D\n\tMULH_DU\n\tMULH_W\n\tMULH_WU\n\tMULW_D_W\n\tMULW_D_WU\n\tMUL_D\n\tMUL_W\n\tNOR\n\tOR\n\tORI\n\tORN\n\tPCADDI\n\tPCADDU12I\n\tPCADDU18I\n\tPCALAU12I\n\tPRELD\n\tPRELDX\n\tRDTIMEH_W\n\tRDTIMEL_W\n\tRDTIME_D\n\tREVB_2H\n\tREVB_2W\n\tREVB_4H\n\tREVB_D\n\tREVH_2W\n\tREVH_D\n\tROTRI_D\n\tROTRI_W\n\tROTR_D\n\tROTR_W\n\tSCREL_D\n\tSCREL_W\n\tSC_D\n\tSC_Q\n\tSC_W\n\tSLLI_D\n\tSLLI_W\n\tSLL_D\n\tSLL_W\n\tSLT\n\tSLTI\n\tSLTU\n\tSLTUI\n\tSRAI_D\n\tSRAI_W\n\tSRA_D\n\tSRA_W\n\tSRLI_D\n\tSRLI_W\n\tSRL_D\n\tSRL_W\n\tSTGT_B\n\tSTGT_D\n\tSTGT_H\n\tSTGT_W\n\tSTLE_B\n\tSTLE_D\n\tSTLE_H\n\tSTLE_W\n\tSTPTR_D\n\tSTPTR_W\n\tSTX_B\n\tSTX_D\n\tSTX_H\n\tSTX_W\n\tST_B\n\tST_D\n\tST_H\n\tST_W\n\tSUB_D\n\tSUB_W\n\tSYSCALL\n\tTLBCLR\n\tTLBFILL\n\tTLBFLUSH\n\tTLBRD\n\tTLBSRCH\n\tTLBWR\n\tXOR\n\tXORI\n)\n\nvar opstr = [...]string{\n\tADDI_D:       \"ADDI.D\",\n\tADDI_W:       \"ADDI.W\",\n\tADDU16I_D:    \"ADDU16I.D\",\n\tADD_D:        \"ADD.D\",\n\tADD_W:        \"ADD.W\",\n\tALSL_D:       \"ALSL.D\",\n\tALSL_W:       \"ALSL.W\",\n\tALSL_WU:      \"ALSL.WU\",\n\tAMADD_B:      \"AMADD.B\",\n\tAMADD_D:      \"AMADD.D\",\n\tAMADD_DB_B:   \"AMADD_DB.B\",\n\tAMADD_DB_D:   \"AMADD_DB.D\",\n\tAMADD_DB_H:   \"AMADD_DB.H\",\n\tAMADD_DB_W:   \"AMADD_DB.W\",\n\tAMADD_H:      \"AMADD.H\",\n\tAMADD_W:      \"AMADD.W\",\n\tAMAND_D:      \"AMAND.D\",\n\tAMAND_DB_D:   \"AMAND_DB.D\",\n\tAMAND_DB_W:   \"AMAND_DB.W\",\n\tAMAND_W:      \"AMAND.W\",\n\tAMCAS_B:      \"AMCAS.B\",\n\tAMCAS_D:      \"AMCAS.D\",\n\tAMCAS_DB_B:   \"AMCAS_DB.B\",\n\tAMCAS_DB_D:   \"AMCAS_DB.D\",\n\tAMCAS_DB_H:   \"AMCAS_DB.H\",\n\tAMCAS_DB_W:   \"AMCAS_DB.W\",\n\tAMCAS_H:      \"AMCAS.H\",\n\tAMCAS_W:      \"AMCAS.W\",\n\tAMMAX_D:      \"AMMAX.D\",\n\tAMMAX_DB_D:   \"AMMAX_DB.D\",\n\tAMMAX_DB_DU:  \"AMMAX_DB.DU\",\n\tAMMAX_DB_W:   \"AMMAX_DB.W\",\n\tAMMAX_DB_WU:  \"AMMAX_DB.WU\",\n\tAMMAX_DU:     \"AMMAX.DU\",\n\tAMMAX_W:      \"AMMAX.W\",\n\tAMMAX_WU:     \"AMMAX.WU\",\n\tAMMIN_D:      \"AMMIN.D\",\n\tAMMIN_DB_D:   \"AMMIN_DB.D\",\n\tAMMIN_DB_DU:  \"AMMIN_DB.DU\",\n\tAMMIN_DB_W:   \"AMMIN_DB.W\",\n\tAMMIN_DB_WU:  \"AMMIN_DB.WU\",\n\tAMMIN_DU:     \"AMMIN.DU\",\n\tAMMIN_W:      \"AMMIN.W\",\n\tAMMIN_WU:     \"AMMIN.WU\",\n\tAMOR_D:       \"AMOR.D\",\n\tAMOR_DB_D:    \"AMOR_DB.D\",\n\tAMOR_DB_W:    \"AMOR_DB.W\",\n\tAMOR_W:       \"AMOR.W\",\n\tAMSWAP_B:     \"AMSWAP.B\",\n\tAMSWAP_D:     \"AMSWAP.D\",\n\tAMSWAP_DB_B:  \"AMSWAP_DB.B\",\n\tAMSWAP_DB_D:  \"AMSWAP_DB.D\",\n\tAMSWAP_DB_H:  \"AMSWAP_DB.H\",\n\tAMSWAP_DB_W:  \"AMSWAP_DB.W\",\n\tAMSWAP_H:     \"AMSWAP.H\",\n\tAMSWAP_W:     \"AMSWAP.W\",\n\tAMXOR_D:      \"AMXOR.D\",\n\tAMXOR_DB_D:   \"AMXOR_DB.D\",\n\tAMXOR_DB_W:   \"AMXOR_DB.W\",\n\tAMXOR_W:      \"AMXOR.W\",\n\tAND:          \"AND\",\n\tANDI:         \"ANDI\",\n\tANDN:         \"ANDN\",\n\tASRTGT_D:     \"ASRTGT.D\",\n\tASRTLE_D:     \"ASRTLE.D\",\n\tB:            \"B\",\n\tBCEQZ:        \"BCEQZ\",\n\tBCNEZ:        \"BCNEZ\",\n\tBEQ:          \"BEQ\",\n\tBEQZ:         \"BEQZ\",\n\tBGE:          \"BGE\",\n\tBGEU:         \"BGEU\",\n\tBITREV_4B:    \"BITREV.4B\",\n\tBITREV_8B:    \"BITREV.8B\",\n\tBITREV_D:     \"BITREV.D\",\n\tBITREV_W:     \"BITREV.W\",\n\tBL:           \"BL\",\n\tBLT:          \"BLT\",\n\tBLTU:         \"BLTU\",\n\tBNE:          \"BNE\",\n\tBNEZ:         \"BNEZ\",\n\tBREAK:        \"BREAK\",\n\tBSTRINS_D:    \"BSTRINS.D\",\n\tBSTRINS_W:    \"BSTRINS.W\",\n\tBSTRPICK_D:   \"BSTRPICK.D\",\n\tBSTRPICK_W:   \"BSTRPICK.W\",\n\tBYTEPICK_D:   \"BYTEPICK.D\",\n\tBYTEPICK_W:   \"BYTEPICK.W\",\n\tCACOP:        \"CACOP\",\n\tCLO_D:        \"CLO.D\",\n\tCLO_W:        \"CLO.W\",\n\tCLZ_D:        \"CLZ.D\",\n\tCLZ_W:        \"CLZ.W\",\n\tCPUCFG:       \"CPUCFG\",\n\tCRCC_W_B_W:   \"CRCC.W.B.W\",\n\tCRCC_W_D_W:   \"CRCC.W.D.W\",\n\tCRCC_W_H_W:   \"CRCC.W.H.W\",\n\tCRCC_W_W_W:   \"CRCC.W.W.W\",\n\tCRC_W_B_W:    \"CRC.W.B.W\",\n\tCRC_W_D_W:    \"CRC.W.D.W\",\n\tCRC_W_H_W:    \"CRC.W.H.W\",\n\tCRC_W_W_W:    \"CRC.W.W.W\",\n\tCSRRD:        \"CSRRD\",\n\tCSRWR:        \"CSRWR\",\n\tCSRXCHG:      \"CSRXCHG\",\n\tCTO_D:        \"CTO.D\",\n\tCTO_W:        \"CTO.W\",\n\tCTZ_D:        \"CTZ.D\",\n\tCTZ_W:        \"CTZ.W\",\n\tDBAR:         \"DBAR\",\n\tDBCL:         \"DBCL\",\n\tDIV_D:        \"DIV.D\",\n\tDIV_DU:       \"DIV.DU\",\n\tDIV_W:        \"DIV.W\",\n\tDIV_WU:       \"DIV.WU\",\n\tERTN:         \"ERTN\",\n\tEXT_W_B:      \"EXT.W.B\",\n\tEXT_W_H:      \"EXT.W.H\",\n\tFABS_D:       \"FABS.D\",\n\tFABS_S:       \"FABS.S\",\n\tFADD_D:       \"FADD.D\",\n\tFADD_S:       \"FADD.S\",\n\tFCLASS_D:     \"FCLASS.D\",\n\tFCLASS_S:     \"FCLASS.S\",\n\tFCMP_CAF_D:   \"FCMP.CAF.D\",\n\tFCMP_CAF_S:   \"FCMP.CAF.S\",\n\tFCMP_CEQ_D:   \"FCMP.CEQ.D\",\n\tFCMP_CEQ_S:   \"FCMP.CEQ.S\",\n\tFCMP_CLE_D:   \"FCMP.CLE.D\",\n\tFCMP_CLE_S:   \"FCMP.CLE.S\",\n\tFCMP_CLT_D:   \"FCMP.CLT.D\",\n\tFCMP_CLT_S:   \"FCMP.CLT.S\",\n\tFCMP_CNE_D:   \"FCMP.CNE.D\",\n\tFCMP_CNE_S:   \"FCMP.CNE.S\",\n\tFCMP_COR_D:   \"FCMP.COR.D\",\n\tFCMP_COR_S:   \"FCMP.COR.S\",\n\tFCMP_CUEQ_D:  \"FCMP.CUEQ.D\",\n\tFCMP_CUEQ_S:  \"FCMP.CUEQ.S\",\n\tFCMP_CULE_D:  \"FCMP.CULE.D\",\n\tFCMP_CULE_S:  \"FCMP.CULE.S\",\n\tFCMP_CULT_D:  \"FCMP.CULT.D\",\n\tFCMP_CULT_S:  \"FCMP.CULT.S\",\n\tFCMP_CUNE_D:  \"FCMP.CUNE.D\",\n\tFCMP_CUNE_S:  \"FCMP.CUNE.S\",\n\tFCMP_CUN_D:   \"FCMP.CUN.D\",\n\tFCMP_CUN_S:   \"FCMP.CUN.S\",\n\tFCMP_SAF_D:   \"FCMP.SAF.D\",\n\tFCMP_SAF_S:   \"FCMP.SAF.S\",\n\tFCMP_SEQ_D:   \"FCMP.SEQ.D\",\n\tFCMP_SEQ_S:   \"FCMP.SEQ.S\",\n\tFCMP_SLE_D:   \"FCMP.SLE.D\",\n\tFCMP_SLE_S:   \"FCMP.SLE.S\",\n\tFCMP_SLT_D:   \"FCMP.SLT.D\",\n\tFCMP_SLT_S:   \"FCMP.SLT.S\",\n\tFCMP_SNE_D:   \"FCMP.SNE.D\",\n\tFCMP_SNE_S:   \"FCMP.SNE.S\",\n\tFCMP_SOR_D:   \"FCMP.SOR.D\",\n\tFCMP_SOR_S:   \"FCMP.SOR.S\",\n\tFCMP_SUEQ_D:  \"FCMP.SUEQ.D\",\n\tFCMP_SUEQ_S:  \"FCMP.SUEQ.S\",\n\tFCMP_SULE_D:  \"FCMP.SULE.D\",\n\tFCMP_SULE_S:  \"FCMP.SULE.S\",\n\tFCMP_SULT_D:  \"FCMP.SULT.D\",\n\tFCMP_SULT_S:  \"FCMP.SULT.S\",\n\tFCMP_SUNE_D:  \"FCMP.SUNE.D\",\n\tFCMP_SUNE_S:  \"FCMP.SUNE.S\",\n\tFCMP_SUN_D:   \"FCMP.SUN.D\",\n\tFCMP_SUN_S:   \"FCMP.SUN.S\",\n\tFCOPYSIGN_D:  \"FCOPYSIGN.D\",\n\tFCOPYSIGN_S:  \"FCOPYSIGN.S\",\n\tFCVT_D_S:     \"FCVT.D.S\",\n\tFCVT_S_D:     \"FCVT.S.D\",\n\tFDIV_D:       \"FDIV.D\",\n\tFDIV_S:       \"FDIV.S\",\n\tFFINT_D_L:    \"FFINT.D.L\",\n\tFFINT_D_W:    \"FFINT.D.W\",\n\tFFINT_S_L:    \"FFINT.S.L\",\n\tFFINT_S_W:    \"FFINT.S.W\",\n\tFLDGT_D:      \"FLDGT.D\",\n\tFLDGT_S:      \"FLDGT.S\",\n\tFLDLE_D:      \"FLDLE.D\",\n\tFLDLE_S:      \"FLDLE.S\",\n\tFLDX_D:       \"FLDX.D\",\n\tFLDX_S:       \"FLDX.S\",\n\tFLD_D:        \"FLD.D\",\n\tFLD_S:        \"FLD.S\",\n\tFLOGB_D:      \"FLOGB.D\",\n\tFLOGB_S:      \"FLOGB.S\",\n\tFMADD_D:      \"FMADD.D\",\n\tFMADD_S:      \"FMADD.S\",\n\tFMAXA_D:      \"FMAXA.D\",\n\tFMAXA_S:      \"FMAXA.S\",\n\tFMAX_D:       \"FMAX.D\",\n\tFMAX_S:       \"FMAX.S\",\n\tFMINA_D:      \"FMINA.D\",\n\tFMINA_S:      \"FMINA.S\",\n\tFMIN_D:       \"FMIN.D\",\n\tFMIN_S:       \"FMIN.S\",\n\tFMOV_D:       \"FMOV.D\",\n\tFMOV_S:       \"FMOV.S\",\n\tFMSUB_D:      \"FMSUB.D\",\n\tFMSUB_S:      \"FMSUB.S\",\n\tFMUL_D:       \"FMUL.D\",\n\tFMUL_S:       \"FMUL.S\",\n\tFNEG_D:       \"FNEG.D\",\n\tFNEG_S:       \"FNEG.S\",\n\tFNMADD_D:     \"FNMADD.D\",\n\tFNMADD_S:     \"FNMADD.S\",\n\tFNMSUB_D:     \"FNMSUB.D\",\n\tFNMSUB_S:     \"FNMSUB.S\",\n\tFRECIPE_D:    \"FRECIPE.D\",\n\tFRECIPE_S:    \"FRECIPE.S\",\n\tFRECIP_D:     \"FRECIP.D\",\n\tFRECIP_S:     \"FRECIP.S\",\n\tFRINT_D:      \"FRINT.D\",\n\tFRINT_S:      \"FRINT.S\",\n\tFRSQRTE_D:    \"FRSQRTE.D\",\n\tFRSQRTE_S:    \"FRSQRTE.S\",\n\tFRSQRT_D:     \"FRSQRT.D\",\n\tFRSQRT_S:     \"FRSQRT.S\",\n\tFSCALEB_D:    \"FSCALEB.D\",\n\tFSCALEB_S:    \"FSCALEB.S\",\n\tFSEL:         \"FSEL\",\n\tFSQRT_D:      \"FSQRT.D\",\n\tFSQRT_S:      \"FSQRT.S\",\n\tFSTGT_D:      \"FSTGT.D\",\n\tFSTGT_S:      \"FSTGT.S\",\n\tFSTLE_D:      \"FSTLE.D\",\n\tFSTLE_S:      \"FSTLE.S\",\n\tFSTX_D:       \"FSTX.D\",\n\tFSTX_S:       \"FSTX.S\",\n\tFST_D:        \"FST.D\",\n\tFST_S:        \"FST.S\",\n\tFSUB_D:       \"FSUB.D\",\n\tFSUB_S:       \"FSUB.S\",\n\tFTINTRM_L_D:  \"FTINTRM.L.D\",\n\tFTINTRM_L_S:  \"FTINTRM.L.S\",\n\tFTINTRM_W_D:  \"FTINTRM.W.D\",\n\tFTINTRM_W_S:  \"FTINTRM.W.S\",\n\tFTINTRNE_L_D: \"FTINTRNE.L.D\",\n\tFTINTRNE_L_S: \"FTINTRNE.L.S\",\n\tFTINTRNE_W_D: \"FTINTRNE.W.D\",\n\tFTINTRNE_W_S: \"FTINTRNE.W.S\",\n\tFTINTRP_L_D:  \"FTINTRP.L.D\",\n\tFTINTRP_L_S:  \"FTINTRP.L.S\",\n\tFTINTRP_W_D:  \"FTINTRP.W.D\",\n\tFTINTRP_W_S:  \"FTINTRP.W.S\",\n\tFTINTRZ_L_D:  \"FTINTRZ.L.D\",\n\tFTINTRZ_L_S:  \"FTINTRZ.L.S\",\n\tFTINTRZ_W_D:  \"FTINTRZ.W.D\",\n\tFTINTRZ_W_S:  \"FTINTRZ.W.S\",\n\tFTINT_L_D:    \"FTINT.L.D\",\n\tFTINT_L_S:    \"FTINT.L.S\",\n\tFTINT_W_D:    \"FTINT.W.D\",\n\tFTINT_W_S:    \"FTINT.W.S\",\n\tIBAR:         \"IBAR\",\n\tIDLE:         \"IDLE\",\n\tINVTLB:       \"INVTLB\",\n\tIOCSRRD_B:    \"IOCSRRD.B\",\n\tIOCSRRD_D:    \"IOCSRRD.D\",\n\tIOCSRRD_H:    \"IOCSRRD.H\",\n\tIOCSRRD_W:    \"IOCSRRD.W\",\n\tIOCSRWR_B:    \"IOCSRWR.B\",\n\tIOCSRWR_D:    \"IOCSRWR.D\",\n\tIOCSRWR_H:    \"IOCSRWR.H\",\n\tIOCSRWR_W:    \"IOCSRWR.W\",\n\tJIRL:         \"JIRL\",\n\tLDDIR:        \"LDDIR\",\n\tLDGT_B:       \"LDGT.B\",\n\tLDGT_D:       \"LDGT.D\",\n\tLDGT_H:       \"LDGT.H\",\n\tLDGT_W:       \"LDGT.W\",\n\tLDLE_B:       \"LDLE.B\",\n\tLDLE_D:       \"LDLE.D\",\n\tLDLE_H:       \"LDLE.H\",\n\tLDLE_W:       \"LDLE.W\",\n\tLDPTE:        \"LDPTE\",\n\tLDPTR_D:      \"LDPTR.D\",\n\tLDPTR_W:      \"LDPTR.W\",\n\tLDX_B:        \"LDX.B\",\n\tLDX_BU:       \"LDX.BU\",\n\tLDX_D:        \"LDX.D\",\n\tLDX_H:        \"LDX.H\",\n\tLDX_HU:       \"LDX.HU\",\n\tLDX_W:        \"LDX.W\",\n\tLDX_WU:       \"LDX.WU\",\n\tLD_B:         \"LD.B\",\n\tLD_BU:        \"LD.BU\",\n\tLD_D:         \"LD.D\",\n\tLD_H:         \"LD.H\",\n\tLD_HU:        \"LD.HU\",\n\tLD_W:         \"LD.W\",\n\tLD_WU:        \"LD.WU\",\n\tLLACQ_D:      \"LLACQ.D\",\n\tLLACQ_W:      \"LLACQ.W\",\n\tLL_D:         \"LL.D\",\n\tLL_W:         \"LL.W\",\n\tLU12I_W:      \"LU12I.W\",\n\tLU32I_D:      \"LU32I.D\",\n\tLU52I_D:      \"LU52I.D\",\n\tMASKEQZ:      \"MASKEQZ\",\n\tMASKNEZ:      \"MASKNEZ\",\n\tMOD_D:        \"MOD.D\",\n\tMOD_DU:       \"MOD.DU\",\n\tMOD_W:        \"MOD.W\",\n\tMOD_WU:       \"MOD.WU\",\n\tMOVCF2FR:     \"MOVCF2FR\",\n\tMOVCF2GR:     \"MOVCF2GR\",\n\tMOVFCSR2GR:   \"MOVFCSR2GR\",\n\tMOVFR2CF:     \"MOVFR2CF\",\n\tMOVFR2GR_D:   \"MOVFR2GR.D\",\n\tMOVFR2GR_S:   \"MOVFR2GR.S\",\n\tMOVFRH2GR_S:  \"MOVFRH2GR.S\",\n\tMOVGR2CF:     \"MOVGR2CF\",\n\tMOVGR2FCSR:   \"MOVGR2FCSR\",\n\tMOVGR2FRH_W:  \"MOVGR2FRH.W\",\n\tMOVGR2FR_D:   \"MOVGR2FR.D\",\n\tMOVGR2FR_W:   \"MOVGR2FR.W\",\n\tMULH_D:       \"MULH.D\",\n\tMULH_DU:      \"MULH.DU\",\n\tMULH_W:       \"MULH.W\",\n\tMULH_WU:      \"MULH.WU\",\n\tMULW_D_W:     \"MULW.D.W\",\n\tMULW_D_WU:    \"MULW.D.WU\",\n\tMUL_D:        \"MUL.D\",\n\tMUL_W:        \"MUL.W\",\n\tNOR:          \"NOR\",\n\tOR:           \"OR\",\n\tORI:          \"ORI\",\n\tORN:          \"ORN\",\n\tPCADDI:       \"PCADDI\",\n\tPCADDU12I:    \"PCADDU12I\",\n\tPCADDU18I:    \"PCADDU18I\",\n\tPCALAU12I:    \"PCALAU12I\",\n\tPRELD:        \"PRELD\",\n\tPRELDX:       \"PRELDX\",\n\tRDTIMEH_W:    \"RDTIMEH.W\",\n\tRDTIMEL_W:    \"RDTIMEL.W\",\n\tRDTIME_D:     \"RDTIME.D\",\n\tREVB_2H:      \"REVB.2H\",\n\tREVB_2W:      \"REVB.2W\",\n\tREVB_4H:      \"REVB.4H\",\n\tREVB_D:       \"REVB.D\",\n\tREVH_2W:      \"REVH.2W\",\n\tREVH_D:       \"REVH.D\",\n\tROTRI_D:      \"ROTRI.D\",\n\tROTRI_W:      \"ROTRI.W\",\n\tROTR_D:       \"ROTR.D\",\n\tROTR_W:       \"ROTR.W\",\n\tSCREL_D:      \"SCREL.D\",\n\tSCREL_W:      \"SCREL.W\",\n\tSC_D:         \"SC.D\",\n\tSC_Q:         \"SC.Q\",\n\tSC_W:         \"SC.W\",\n\tSLLI_D:       \"SLLI.D\",\n\tSLLI_W:       \"SLLI.W\",\n\tSLL_D:        \"SLL.D\",\n\tSLL_W:        \"SLL.W\",\n\tSLT:          \"SLT\",\n\tSLTI:         \"SLTI\",\n\tSLTU:         \"SLTU\",\n\tSLTUI:        \"SLTUI\",\n\tSRAI_D:       \"SRAI.D\",\n\tSRAI_W:       \"SRAI.W\",\n\tSRA_D:        \"SRA.D\",\n\tSRA_W:        \"SRA.W\",\n\tSRLI_D:       \"SRLI.D\",\n\tSRLI_W:       \"SRLI.W\",\n\tSRL_D:        \"SRL.D\",\n\tSRL_W:        \"SRL.W\",\n\tSTGT_B:       \"STGT.B\",\n\tSTGT_D:       \"STGT.D\",\n\tSTGT_H:       \"STGT.H\",\n\tSTGT_W:       \"STGT.W\",\n\tSTLE_B:       \"STLE.B\",\n\tSTLE_D:       \"STLE.D\",\n\tSTLE_H:       \"STLE.H\",\n\tSTLE_W:       \"STLE.W\",\n\tSTPTR_D:      \"STPTR.D\",\n\tSTPTR_W:      \"STPTR.W\",\n\tSTX_B:        \"STX.B\",\n\tSTX_D:        \"STX.D\",\n\tSTX_H:        \"STX.H\",\n\tSTX_W:        \"STX.W\",\n\tST_B:         \"ST.B\",\n\tST_D:         \"ST.D\",\n\tST_H:         \"ST.H\",\n\tST_W:         \"ST.W\",\n\tSUB_D:        \"SUB.D\",\n\tSUB_W:        \"SUB.W\",\n\tSYSCALL:      \"SYSCALL\",\n\tTLBCLR:       \"TLBCLR\",\n\tTLBFILL:      \"TLBFILL\",\n\tTLBFLUSH:     \"TLBFLUSH\",\n\tTLBRD:        \"TLBRD\",\n\tTLBSRCH:      \"TLBSRCH\",\n\tTLBWR:        \"TLBWR\",\n\tXOR:          \"XOR\",\n\tXORI:         \"XORI\",\n}\n\nvar instFormats = [...]instFormat{\n\t// ADDI.D rd, rj, si12\n\t{mask: 0xffc00000, value: 0x02c00000, op: ADDI_D, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// ADDI.W rd, rj, si12\n\t{mask: 0xffc00000, value: 0x02800000, op: ADDI_W, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// ADDU16I.D rd, rj, si16\n\t{mask: 0xfc000000, value: 0x10000000, op: ADDU16I_D, args: instArgs{arg_rd, arg_rj, arg_si16_25_10}},\n\t// ADD.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00108000, op: ADD_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// ADD.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00100000, op: ADD_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// ALSL.D rd, rj, rk, sa2\n\t{mask: 0xfffe0000, value: 0x002c0000, op: ALSL_D, args: instArgs{arg_rd, arg_rj, arg_rk, arg_sa2_16_15}},\n\t// ALSL.W rd, rj, rk, sa2\n\t{mask: 0xfffe0000, value: 0x00040000, op: ALSL_W, args: instArgs{arg_rd, arg_rj, arg_rk, arg_sa2_16_15}},\n\t// ALSL.WU rd, rj, rk, sa2\n\t{mask: 0xfffe0000, value: 0x00060000, op: ALSL_WU, args: instArgs{arg_rd, arg_rj, arg_rk, arg_sa2_16_15}},\n\t// AMADD.B rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385d0000, op: AMADD_B, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMADD.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38618000, op: AMADD_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMADD_DB.B rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385f0000, op: AMADD_DB_B, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMADD_DB.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386a8000, op: AMADD_DB_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMADD_DB.H rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385f8000, op: AMADD_DB_H, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMADD_DB.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386a0000, op: AMADD_DB_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMADD.H rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385d8000, op: AMADD_H, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMADD.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38610000, op: AMADD_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMAND.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38628000, op: AMAND_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMAND_DB.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386b8000, op: AMAND_DB_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMAND_DB.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386b0000, op: AMAND_DB_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMAND.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38620000, op: AMAND_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMCAS.B rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38580000, op: AMCAS_B, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMCAS.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38598000, op: AMCAS_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMCAS_DB.B rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385a0000, op: AMCAS_DB_B, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMCAS_DB.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385b8000, op: AMCAS_DB_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMCAS_DB.H rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385a8000, op: AMCAS_DB_H, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMCAS_DB.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385b0000, op: AMCAS_DB_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMCAS.H rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38588000, op: AMCAS_H, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMCAS.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38590000, op: AMCAS_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMAX.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38658000, op: AMMAX_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMAX_DB.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386e8000, op: AMMAX_DB_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMAX_DB.DU rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38708000, op: AMMAX_DB_DU, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMAX_DB.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386e0000, op: AMMAX_DB_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMAX_DB.WU rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38700000, op: AMMAX_DB_WU, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMAX.DU rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38678000, op: AMMAX_DU, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMAX.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38650000, op: AMMAX_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMAX.WU rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38670000, op: AMMAX_WU, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMIN.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38668000, op: AMMIN_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMIN_DB.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386f8000, op: AMMIN_DB_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMIN_DB.DU rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38718000, op: AMMIN_DB_DU, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMIN_DB.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386f0000, op: AMMIN_DB_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMIN_DB.WU rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38710000, op: AMMIN_DB_WU, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMIN.DU rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38688000, op: AMMIN_DU, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMIN.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38660000, op: AMMIN_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMMIN.WU rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38680000, op: AMMIN_WU, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMOR.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38638000, op: AMOR_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMOR_DB.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386c8000, op: AMOR_DB_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMOR_DB.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386c0000, op: AMOR_DB_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMOR.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38630000, op: AMOR_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMSWAP.B rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385c0000, op: AMSWAP_B, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMSWAP.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38608000, op: AMSWAP_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMSWAP_DB.B rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385e0000, op: AMSWAP_DB_B, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMSWAP_DB.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38698000, op: AMSWAP_DB_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMSWAP_DB.H rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385e8000, op: AMSWAP_DB_H, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMSWAP_DB.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38690000, op: AMSWAP_DB_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMSWAP.H rd, rk, rj\n\t{mask: 0xffff8000, value: 0x385c8000, op: AMSWAP_H, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMSWAP.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38600000, op: AMSWAP_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMXOR.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38648000, op: AMXOR_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMXOR_DB.D rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386d8000, op: AMXOR_DB_D, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMXOR_DB.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x386d0000, op: AMXOR_DB_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AMXOR.W rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38640000, op: AMXOR_W, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// AND rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00148000, op: AND, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// ANDI rd, rj, ui12\n\t{mask: 0xffc00000, value: 0x03400000, op: ANDI, args: instArgs{arg_rd, arg_rj, arg_ui12_21_10}},\n\t// ANDN rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00168000, op: ANDN, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// ASRTGT.D rj, rk\n\t{mask: 0xffff801f, value: 0x00018000, op: ASRTGT_D, args: instArgs{arg_rj, arg_rk}},\n\t// ASRTLE.D rj, rk\n\t{mask: 0xffff801f, value: 0x00010000, op: ASRTLE_D, args: instArgs{arg_rj, arg_rk}},\n\t// B offs\n\t{mask: 0xfc000000, value: 0x50000000, op: B, args: instArgs{arg_offset_25_0}},\n\t// BCEQZ cj, offs\n\t{mask: 0xfc000300, value: 0x48000000, op: BCEQZ, args: instArgs{arg_cj, arg_offset_20_0}},\n\t// BCNEZ cj, offs\n\t{mask: 0xfc000300, value: 0x48000100, op: BCNEZ, args: instArgs{arg_cj, arg_offset_20_0}},\n\t// BEQ rj, rd, offs\n\t{mask: 0xfc000000, value: 0x58000000, op: BEQ, args: instArgs{arg_rj, arg_rd, arg_offset_15_0}},\n\t// BEQZ rj, offs\n\t{mask: 0xfc000000, value: 0x40000000, op: BEQZ, args: instArgs{arg_rj, arg_offset_20_0}},\n\t// BGE rj, rd, offs\n\t{mask: 0xfc000000, value: 0x64000000, op: BGE, args: instArgs{arg_rj, arg_rd, arg_offset_15_0}},\n\t// BGEU rj, rd, offs\n\t{mask: 0xfc000000, value: 0x6c000000, op: BGEU, args: instArgs{arg_rj, arg_rd, arg_offset_15_0}},\n\t// BITREV.4B rd, rj\n\t{mask: 0xfffffc00, value: 0x00004800, op: BITREV_4B, args: instArgs{arg_rd, arg_rj}},\n\t// BITREV.8B rd, rj\n\t{mask: 0xfffffc00, value: 0x00004c00, op: BITREV_8B, args: instArgs{arg_rd, arg_rj}},\n\t// BITREV.D rd, rj\n\t{mask: 0xfffffc00, value: 0x00005400, op: BITREV_D, args: instArgs{arg_rd, arg_rj}},\n\t// BITREV.W rd, rj\n\t{mask: 0xfffffc00, value: 0x00005000, op: BITREV_W, args: instArgs{arg_rd, arg_rj}},\n\t// BL offs\n\t{mask: 0xfc000000, value: 0x54000000, op: BL, args: instArgs{arg_offset_25_0}},\n\t// BLT rj, rd, offs\n\t{mask: 0xfc000000, value: 0x60000000, op: BLT, args: instArgs{arg_rj, arg_rd, arg_offset_15_0}},\n\t// BLTU rj, rd, offs\n\t{mask: 0xfc000000, value: 0x68000000, op: BLTU, args: instArgs{arg_rj, arg_rd, arg_offset_15_0}},\n\t// BNE rj, rd, offs\n\t{mask: 0xfc000000, value: 0x5c000000, op: BNE, args: instArgs{arg_rj, arg_rd, arg_offset_15_0}},\n\t// BNEZ rj, offs\n\t{mask: 0xfc000000, value: 0x44000000, op: BNEZ, args: instArgs{arg_rj, arg_offset_20_0}},\n\t// BREAK code\n\t{mask: 0xffff8000, value: 0x002a0000, op: BREAK, args: instArgs{arg_code_14_0}},\n\t// BSTRINS.D rd, rj, msbd, lsbd\n\t{mask: 0xffc00000, value: 0x00800000, op: BSTRINS_D, args: instArgs{arg_rd, arg_rj, arg_msbd, arg_lsbd}},\n\t// BSTRINS.W rd, rj, msbw, lsbw\n\t{mask: 0xffe08000, value: 0x00600000, op: BSTRINS_W, args: instArgs{arg_rd, arg_rj, arg_msbw, arg_lsbw}},\n\t// BSTRPICK.D rd, rj, msbd, lsbd\n\t{mask: 0xffc00000, value: 0x00c00000, op: BSTRPICK_D, args: instArgs{arg_rd, arg_rj, arg_msbd, arg_lsbd}},\n\t// BSTRPICK.W rd, rj, msbw, lsbw\n\t{mask: 0xffe08000, value: 0x00608000, op: BSTRPICK_W, args: instArgs{arg_rd, arg_rj, arg_msbw, arg_lsbw}},\n\t// BYTEPICK.D rd, rj, rk, sa3\n\t{mask: 0xfffc0000, value: 0x000c0000, op: BYTEPICK_D, args: instArgs{arg_rd, arg_rj, arg_rk, arg_sa3_17_15}},\n\t// BYTEPICK.W rd, rj, rk, sa2\n\t{mask: 0xfffe0000, value: 0x00080000, op: BYTEPICK_W, args: instArgs{arg_rd, arg_rj, arg_rk, arg_sa2_16_15}},\n\t// CACOP code, rj, si12\n\t{mask: 0xffc00000, value: 0x06000000, op: CACOP, args: instArgs{arg_code_4_0, arg_rj, arg_si12_21_10}},\n\t// CLO.D rd, rj\n\t{mask: 0xfffffc00, value: 0x00002000, op: CLO_D, args: instArgs{arg_rd, arg_rj}},\n\t// CLO.W rd, rj\n\t{mask: 0xfffffc00, value: 0x00001000, op: CLO_W, args: instArgs{arg_rd, arg_rj}},\n\t// CLZ.D rd, rj\n\t{mask: 0xfffffc00, value: 0x00002400, op: CLZ_D, args: instArgs{arg_rd, arg_rj}},\n\t// CLZ.W rd, rj\n\t{mask: 0xfffffc00, value: 0x00001400, op: CLZ_W, args: instArgs{arg_rd, arg_rj}},\n\t// CPUCFG rd, rj\n\t{mask: 0xfffffc00, value: 0x00006c00, op: CPUCFG, args: instArgs{arg_rd, arg_rj}},\n\t// CRCC.W.B.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00260000, op: CRCC_W_B_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// CRCC.W.D.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00278000, op: CRCC_W_D_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// CRCC.W.H.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00268000, op: CRCC_W_H_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// CRCC.W.W.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00270000, op: CRCC_W_W_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// CRC.W.B.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00240000, op: CRC_W_B_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// CRC.W.D.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00258000, op: CRC_W_D_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// CRC.W.H.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00248000, op: CRC_W_H_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// CRC.W.W.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00250000, op: CRC_W_W_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// CSRRD rd, csr\n\t{mask: 0xff0003e0, value: 0x04000000, op: CSRRD, args: instArgs{arg_rd, arg_csr_23_10}},\n\t// CSRWR rd, csr\n\t{mask: 0xff0003e0, value: 0x04000020, op: CSRWR, args: instArgs{arg_rd, arg_csr_23_10}},\n\t// CSRXCHG rd, rj, csr\n\t{mask: 0xff000000, value: 0x04000000, op: CSRXCHG, args: instArgs{arg_rd, arg_rj, arg_csr_23_10}},\n\t// CTO.D rd, rj\n\t{mask: 0xfffffc00, value: 0x00002800, op: CTO_D, args: instArgs{arg_rd, arg_rj}},\n\t// CTO.W rd, rj\n\t{mask: 0xfffffc00, value: 0x00001800, op: CTO_W, args: instArgs{arg_rd, arg_rj}},\n\t// CTZ.D rd, rj\n\t{mask: 0xfffffc00, value: 0x00002c00, op: CTZ_D, args: instArgs{arg_rd, arg_rj}},\n\t// CTZ.W rd, rj\n\t{mask: 0xfffffc00, value: 0x00001c00, op: CTZ_W, args: instArgs{arg_rd, arg_rj}},\n\t// DBAR hint\n\t{mask: 0xffff8000, value: 0x38720000, op: DBAR, args: instArgs{arg_hint_14_0}},\n\t// DBCL code\n\t{mask: 0xffff8000, value: 0x002a8000, op: DBCL, args: instArgs{arg_code_14_0}},\n\t// DIV.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00220000, op: DIV_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// DIV.DU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00230000, op: DIV_DU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// DIV.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00200000, op: DIV_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// DIV.WU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00210000, op: DIV_WU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// ERTN\n\t{mask: 0xffffffff, value: 0x06483800, op: ERTN, args: instArgs{}},\n\t// EXT.W.B rd, rj\n\t{mask: 0xfffffc00, value: 0x00005c00, op: EXT_W_B, args: instArgs{arg_rd, arg_rj}},\n\t// EXT.W.H rd, rj\n\t{mask: 0xfffffc00, value: 0x00005800, op: EXT_W_H, args: instArgs{arg_rd, arg_rj}},\n\t// FABS.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01140800, op: FABS_D, args: instArgs{arg_fd, arg_fj}},\n\t// FABS.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01140400, op: FABS_S, args: instArgs{arg_fd, arg_fj}},\n\t// FADD.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01010000, op: FADD_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FADD.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01008000, op: FADD_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FCLASS.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01143800, op: FCLASS_D, args: instArgs{arg_fd, arg_fj}},\n\t// FCLASS.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01143400, op: FCLASS_S, args: instArgs{arg_fd, arg_fj}},\n\t// FCMP.CAF.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c200000, op: FCMP_CAF_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CAF.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c100000, op: FCMP_CAF_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CEQ.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c220000, op: FCMP_CEQ_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CEQ.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c120000, op: FCMP_CEQ_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CLE.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c230000, op: FCMP_CLE_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CLE.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c130000, op: FCMP_CLE_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CLT.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c210000, op: FCMP_CLT_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CLT.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c110000, op: FCMP_CLT_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CNE.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c280000, op: FCMP_CNE_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CNE.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c180000, op: FCMP_CNE_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.COR.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c2a0000, op: FCMP_COR_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.COR.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c1a0000, op: FCMP_COR_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CUEQ.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c260000, op: FCMP_CUEQ_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CUEQ.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c160000, op: FCMP_CUEQ_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CULE.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c270000, op: FCMP_CULE_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CULE.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c170000, op: FCMP_CULE_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CULT.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c250000, op: FCMP_CULT_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CULT.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c150000, op: FCMP_CULT_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CUNE.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c2c0000, op: FCMP_CUNE_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CUNE.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c1c0000, op: FCMP_CUNE_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CUN.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c240000, op: FCMP_CUN_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.CUN.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c140000, op: FCMP_CUN_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SAF.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c208000, op: FCMP_SAF_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SAF.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c108000, op: FCMP_SAF_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SEQ.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c228000, op: FCMP_SEQ_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SEQ.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c128000, op: FCMP_SEQ_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SLE.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c238000, op: FCMP_SLE_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SLE.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c138000, op: FCMP_SLE_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SLT.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c218000, op: FCMP_SLT_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SLT.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c118000, op: FCMP_SLT_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SNE.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c288000, op: FCMP_SNE_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SNE.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c188000, op: FCMP_SNE_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SOR.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c2a8000, op: FCMP_SOR_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SOR.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c1a8000, op: FCMP_SOR_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SUEQ.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c268000, op: FCMP_SUEQ_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SUEQ.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c168000, op: FCMP_SUEQ_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SULE.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c278000, op: FCMP_SULE_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SULE.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c178000, op: FCMP_SULE_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SULT.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c258000, op: FCMP_SULT_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SULT.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c158000, op: FCMP_SULT_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SUNE.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c2c8000, op: FCMP_SUNE_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SUNE.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c1c8000, op: FCMP_SUNE_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SUN.D cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c248000, op: FCMP_SUN_D, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCMP.SUN.S cd, fj, fk\n\t{mask: 0xffff8018, value: 0x0c148000, op: FCMP_SUN_S, args: instArgs{arg_cd, arg_fj, arg_fk}},\n\t// FCOPYSIGN.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01130000, op: FCOPYSIGN_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FCOPYSIGN.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01128000, op: FCOPYSIGN_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FCVT.D.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01192400, op: FCVT_D_S, args: instArgs{arg_fd, arg_fj}},\n\t// FCVT.S.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01191800, op: FCVT_S_D, args: instArgs{arg_fd, arg_fj}},\n\t// FDIV.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01070000, op: FDIV_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FDIV.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01068000, op: FDIV_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FFINT.D.L fd, fj\n\t{mask: 0xfffffc00, value: 0x011d2800, op: FFINT_D_L, args: instArgs{arg_fd, arg_fj}},\n\t// FFINT.D.W fd, fj\n\t{mask: 0xfffffc00, value: 0x011d2000, op: FFINT_D_W, args: instArgs{arg_fd, arg_fj}},\n\t// FFINT.S.L fd, fj\n\t{mask: 0xfffffc00, value: 0x011d1800, op: FFINT_S_L, args: instArgs{arg_fd, arg_fj}},\n\t// FFINT.S.W fd, fj\n\t{mask: 0xfffffc00, value: 0x011d1000, op: FFINT_S_W, args: instArgs{arg_fd, arg_fj}},\n\t// FLDGT.D fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38748000, op: FLDGT_D, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FLDGT.S fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38740000, op: FLDGT_S, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FLDLE.D fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38758000, op: FLDLE_D, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FLDLE.S fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38750000, op: FLDLE_S, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FLDX.D fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38340000, op: FLDX_D, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FLDX.S fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38300000, op: FLDX_S, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FLD.D fd, rj, si12\n\t{mask: 0xffc00000, value: 0x2b800000, op: FLD_D, args: instArgs{arg_fd, arg_rj, arg_si12_21_10}},\n\t// FLD.S fd, rj, si12\n\t{mask: 0xffc00000, value: 0x2b000000, op: FLD_S, args: instArgs{arg_fd, arg_rj, arg_si12_21_10}},\n\t// FLOGB.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01142800, op: FLOGB_D, args: instArgs{arg_fd, arg_fj}},\n\t// FLOGB.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01142400, op: FLOGB_S, args: instArgs{arg_fd, arg_fj}},\n\t// FMADD.D fd, fj, fk, fa\n\t{mask: 0xfff00000, value: 0x08200000, op: FMADD_D, args: instArgs{arg_fd, arg_fj, arg_fk, arg_fa}},\n\t// FMADD.S fd, fj, fk, fa\n\t{mask: 0xfff00000, value: 0x08100000, op: FMADD_S, args: instArgs{arg_fd, arg_fj, arg_fk, arg_fa}},\n\t// FMAXA.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x010d0000, op: FMAXA_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FMAXA.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x010c8000, op: FMAXA_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FMAX.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01090000, op: FMAX_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FMAX.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01088000, op: FMAX_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FMINA.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x010f0000, op: FMINA_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FMINA.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x010e8000, op: FMINA_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FMIN.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x010b0000, op: FMIN_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FMIN.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x010a8000, op: FMIN_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FMOV.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01149800, op: FMOV_D, args: instArgs{arg_fd, arg_fj}},\n\t// FMOV.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01149400, op: FMOV_S, args: instArgs{arg_fd, arg_fj}},\n\t// FMSUB.D fd, fj, fk, fa\n\t{mask: 0xfff00000, value: 0x08600000, op: FMSUB_D, args: instArgs{arg_fd, arg_fj, arg_fk, arg_fa}},\n\t// FMSUB.S fd, fj, fk, fa\n\t{mask: 0xfff00000, value: 0x08500000, op: FMSUB_S, args: instArgs{arg_fd, arg_fj, arg_fk, arg_fa}},\n\t// FMUL.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01050000, op: FMUL_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FMUL.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01048000, op: FMUL_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FNEG.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01141800, op: FNEG_D, args: instArgs{arg_fd, arg_fj}},\n\t// FNEG.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01141400, op: FNEG_S, args: instArgs{arg_fd, arg_fj}},\n\t// FNMADD.D fd, fj, fk, fa\n\t{mask: 0xfff00000, value: 0x08a00000, op: FNMADD_D, args: instArgs{arg_fd, arg_fj, arg_fk, arg_fa}},\n\t// FNMADD.S fd, fj, fk, fa\n\t{mask: 0xfff00000, value: 0x08900000, op: FNMADD_S, args: instArgs{arg_fd, arg_fj, arg_fk, arg_fa}},\n\t// FNMSUB.D fd, fj, fk, fa\n\t{mask: 0xfff00000, value: 0x08e00000, op: FNMSUB_D, args: instArgs{arg_fd, arg_fj, arg_fk, arg_fa}},\n\t// FNMSUB.S fd, fj, fk, fa\n\t{mask: 0xfff00000, value: 0x08d00000, op: FNMSUB_S, args: instArgs{arg_fd, arg_fj, arg_fk, arg_fa}},\n\t// FRECIPE.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01147800, op: FRECIPE_D, args: instArgs{arg_fd, arg_fj}},\n\t// FRECIPE.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01147400, op: FRECIPE_S, args: instArgs{arg_fd, arg_fj}},\n\t// FRECIP.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01145800, op: FRECIP_D, args: instArgs{arg_fd, arg_fj}},\n\t// FRECIP.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01145400, op: FRECIP_S, args: instArgs{arg_fd, arg_fj}},\n\t// FRINT.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011e4800, op: FRINT_D, args: instArgs{arg_fd, arg_fj}},\n\t// FRINT.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011e4400, op: FRINT_S, args: instArgs{arg_fd, arg_fj}},\n\t// FRSQRTE.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01148800, op: FRSQRTE_D, args: instArgs{arg_fd, arg_fj}},\n\t// FRSQRTE.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01148400, op: FRSQRTE_S, args: instArgs{arg_fd, arg_fj}},\n\t// FRSQRT.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01146800, op: FRSQRT_D, args: instArgs{arg_fd, arg_fj}},\n\t// FRSQRT.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01146400, op: FRSQRT_S, args: instArgs{arg_fd, arg_fj}},\n\t// FSCALEB.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01110000, op: FSCALEB_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FSCALEB.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01108000, op: FSCALEB_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FSEL fd, fj, fk, ca\n\t{mask: 0xfffc0000, value: 0x0d000000, op: FSEL, args: instArgs{arg_fd, arg_fj, arg_fk, arg_ca}},\n\t// FSQRT.D fd, fj\n\t{mask: 0xfffffc00, value: 0x01144800, op: FSQRT_D, args: instArgs{arg_fd, arg_fj}},\n\t// FSQRT.S fd, fj\n\t{mask: 0xfffffc00, value: 0x01144400, op: FSQRT_S, args: instArgs{arg_fd, arg_fj}},\n\t// FSTGT.D fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38768000, op: FSTGT_D, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FSTGT.S fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38760000, op: FSTGT_S, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FSTLE.D fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38778000, op: FSTLE_D, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FSTLE.S fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38770000, op: FSTLE_S, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FSTX.D fd, rj, rk\n\t{mask: 0xffff8000, value: 0x383c0000, op: FSTX_D, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FSTX.S fd, rj, rk\n\t{mask: 0xffff8000, value: 0x38380000, op: FSTX_S, args: instArgs{arg_fd, arg_rj, arg_rk}},\n\t// FST.D fd, rj, si12\n\t{mask: 0xffc00000, value: 0x2bc00000, op: FST_D, args: instArgs{arg_fd, arg_rj, arg_si12_21_10}},\n\t// FST.S fd, rj, si12\n\t{mask: 0xffc00000, value: 0x2b400000, op: FST_S, args: instArgs{arg_fd, arg_rj, arg_si12_21_10}},\n\t// FSUB.D fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01030000, op: FSUB_D, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FSUB.S fd, fj, fk\n\t{mask: 0xffff8000, value: 0x01028000, op: FSUB_S, args: instArgs{arg_fd, arg_fj, arg_fk}},\n\t// FTINTRM.L.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011a2800, op: FTINTRM_L_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRM.L.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011a2400, op: FTINTRM_L_S, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRM.W.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011a0800, op: FTINTRM_W_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRM.W.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011a0400, op: FTINTRM_W_S, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRNE.L.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011ae800, op: FTINTRNE_L_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRNE.L.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011ae400, op: FTINTRNE_L_S, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRNE.W.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011ac800, op: FTINTRNE_W_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRNE.W.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011ac400, op: FTINTRNE_W_S, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRP.L.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011a6800, op: FTINTRP_L_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRP.L.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011a6400, op: FTINTRP_L_S, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRP.W.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011a4800, op: FTINTRP_W_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRP.W.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011a4400, op: FTINTRP_W_S, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRZ.L.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011aa800, op: FTINTRZ_L_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRZ.L.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011aa400, op: FTINTRZ_L_S, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRZ.W.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011a8800, op: FTINTRZ_W_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINTRZ.W.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011a8400, op: FTINTRZ_W_S, args: instArgs{arg_fd, arg_fj}},\n\t// FTINT.L.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011b2800, op: FTINT_L_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINT.L.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011b2400, op: FTINT_L_S, args: instArgs{arg_fd, arg_fj}},\n\t// FTINT.W.D fd, fj\n\t{mask: 0xfffffc00, value: 0x011b0800, op: FTINT_W_D, args: instArgs{arg_fd, arg_fj}},\n\t// FTINT.W.S fd, fj\n\t{mask: 0xfffffc00, value: 0x011b0400, op: FTINT_W_S, args: instArgs{arg_fd, arg_fj}},\n\t// IBAR hint\n\t{mask: 0xffff8000, value: 0x38728000, op: IBAR, args: instArgs{arg_hint_14_0}},\n\t// IDLE level\n\t{mask: 0xffff8000, value: 0x06488000, op: IDLE, args: instArgs{arg_level_14_0}},\n\t// INVTLB op, rj, rk\n\t{mask: 0xffff8000, value: 0x06498000, op: INVTLB, args: instArgs{arg_op_4_0, arg_rj, arg_rk}},\n\t// IOCSRRD.B rd, rj\n\t{mask: 0xfffffc00, value: 0x06480000, op: IOCSRRD_B, args: instArgs{arg_rd, arg_rj}},\n\t// IOCSRRD.D rd, rj\n\t{mask: 0xfffffc00, value: 0x06480c00, op: IOCSRRD_D, args: instArgs{arg_rd, arg_rj}},\n\t// IOCSRRD.H rd, rj\n\t{mask: 0xfffffc00, value: 0x06480400, op: IOCSRRD_H, args: instArgs{arg_rd, arg_rj}},\n\t// IOCSRRD.W rd, rj\n\t{mask: 0xfffffc00, value: 0x06480800, op: IOCSRRD_W, args: instArgs{arg_rd, arg_rj}},\n\t// IOCSRWR.B rd, rj\n\t{mask: 0xfffffc00, value: 0x06481000, op: IOCSRWR_B, args: instArgs{arg_rd, arg_rj}},\n\t// IOCSRWR.D rd, rj\n\t{mask: 0xfffffc00, value: 0x06481c00, op: IOCSRWR_D, args: instArgs{arg_rd, arg_rj}},\n\t// IOCSRWR.H rd, rj\n\t{mask: 0xfffffc00, value: 0x06481400, op: IOCSRWR_H, args: instArgs{arg_rd, arg_rj}},\n\t// IOCSRWR.W rd, rj\n\t{mask: 0xfffffc00, value: 0x06481800, op: IOCSRWR_W, args: instArgs{arg_rd, arg_rj}},\n\t// JIRL rd, rj, offs\n\t{mask: 0xfc000000, value: 0x4c000000, op: JIRL, args: instArgs{arg_rd, arg_rj, arg_offset_15_0}},\n\t// LDDIR rd, rj, level\n\t{mask: 0xfffc0000, value: 0x06400000, op: LDDIR, args: instArgs{arg_rd, arg_rj, arg_level_17_10}},\n\t// LDGT.B rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38780000, op: LDGT_B, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDGT.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38798000, op: LDGT_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDGT.H rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38788000, op: LDGT_H, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDGT.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38790000, op: LDGT_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDLE.B rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387a0000, op: LDLE_B, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDLE.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387b8000, op: LDLE_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDLE.H rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387a8000, op: LDLE_H, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDLE.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387b0000, op: LDLE_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDPTE rj, seq\n\t{mask: 0xfffc001f, value: 0x06440000, op: LDPTE, args: instArgs{arg_rj, arg_seq_17_10}},\n\t// LDPTR.D rd, rj, si14\n\t{mask: 0xff000000, value: 0x26000000, op: LDPTR_D, args: instArgs{arg_rd, arg_rj, arg_si14_23_10}},\n\t// LDPTR.W rd, rj, si14\n\t{mask: 0xff000000, value: 0x24000000, op: LDPTR_W, args: instArgs{arg_rd, arg_rj, arg_si14_23_10}},\n\t// LDX.B rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38000000, op: LDX_B, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDX.BU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38200000, op: LDX_BU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDX.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x380c0000, op: LDX_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDX.H rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38040000, op: LDX_H, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDX.HU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38240000, op: LDX_HU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDX.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38080000, op: LDX_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LDX.WU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38280000, op: LDX_WU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// LD.B rd, rj, si12\n\t{mask: 0xffc00000, value: 0x28000000, op: LD_B, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// LD.BU rd, rj, si12\n\t{mask: 0xffc00000, value: 0x2a000000, op: LD_BU, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// LD.D rd, rj, si12\n\t{mask: 0xffc00000, value: 0x28c00000, op: LD_D, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// LD.H rd, rj, si12\n\t{mask: 0xffc00000, value: 0x28400000, op: LD_H, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// LD.HU rd, rj, si12\n\t{mask: 0xffc00000, value: 0x2a400000, op: LD_HU, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// LD.W rd, rj, si12\n\t{mask: 0xffc00000, value: 0x28800000, op: LD_W, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// LD.WU rd, rj, si12\n\t{mask: 0xffc00000, value: 0x2a800000, op: LD_WU, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// LLACQ.D rd, rj\n\t{mask: 0xfffffc00, value: 0x38578800, op: LLACQ_D, args: instArgs{arg_rd, arg_rj}},\n\t// LLACQ.W rd, rj\n\t{mask: 0xfffffc00, value: 0x38578000, op: LLACQ_W, args: instArgs{arg_rd, arg_rj}},\n\t// LL.D rd, rj, si14\n\t{mask: 0xff000000, value: 0x22000000, op: LL_D, args: instArgs{arg_rd, arg_rj, arg_si14_23_10}},\n\t// LL.W rd, rj, si14\n\t{mask: 0xff000000, value: 0x20000000, op: LL_W, args: instArgs{arg_rd, arg_rj, arg_si14_23_10}},\n\t// LU12I.W rd, si20\n\t{mask: 0xfe000000, value: 0x14000000, op: LU12I_W, args: instArgs{arg_rd, arg_si20_24_5}},\n\t// LU32I.D rd, si20\n\t{mask: 0xfe000000, value: 0x16000000, op: LU32I_D, args: instArgs{arg_rd, arg_si20_24_5}},\n\t// LU52I.D rd, rj, si12\n\t{mask: 0xffc00000, value: 0x03000000, op: LU52I_D, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// MASKEQZ rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00130000, op: MASKEQZ, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MASKNEZ rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00138000, op: MASKNEZ, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MOD.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00228000, op: MOD_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MOD.DU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00238000, op: MOD_DU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MOD.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00208000, op: MOD_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MOD.WU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00218000, op: MOD_WU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MOVCF2FR fd, cj\n\t{mask: 0xffffff00, value: 0x0114d400, op: MOVCF2FR, args: instArgs{arg_fd, arg_cj}},\n\t// MOVCF2GR rd, cj\n\t{mask: 0xffffff00, value: 0x0114dc00, op: MOVCF2GR, args: instArgs{arg_rd, arg_cj}},\n\t// MOVFCSR2GR rd, fcsr\n\t{mask: 0xfffffc00, value: 0x0114c800, op: MOVFCSR2GR, args: instArgs{arg_rd, arg_fcsr_9_5}},\n\t// MOVFR2CF cd, fj\n\t{mask: 0xfffffc18, value: 0x0114d000, op: MOVFR2CF, args: instArgs{arg_cd, arg_fj}},\n\t// MOVFR2GR.D rd, fj\n\t{mask: 0xfffffc00, value: 0x0114b800, op: MOVFR2GR_D, args: instArgs{arg_rd, arg_fj}},\n\t// MOVFR2GR.S rd, fj\n\t{mask: 0xfffffc00, value: 0x0114b400, op: MOVFR2GR_S, args: instArgs{arg_rd, arg_fj}},\n\t// MOVFRH2GR.S rd, fj\n\t{mask: 0xfffffc00, value: 0x0114bc00, op: MOVFRH2GR_S, args: instArgs{arg_rd, arg_fj}},\n\t// MOVGR2CF cd, rj\n\t{mask: 0xfffffc18, value: 0x0114d800, op: MOVGR2CF, args: instArgs{arg_cd, arg_rj}},\n\t// MOVGR2FCSR fcsr, rj\n\t{mask: 0xfffffc00, value: 0x0114c000, op: MOVGR2FCSR, args: instArgs{arg_fcsr_4_0, arg_rj}},\n\t// MOVGR2FRH.W fd, rj\n\t{mask: 0xfffffc00, value: 0x0114ac00, op: MOVGR2FRH_W, args: instArgs{arg_fd, arg_rj}},\n\t// MOVGR2FR.D fd, rj\n\t{mask: 0xfffffc00, value: 0x0114a800, op: MOVGR2FR_D, args: instArgs{arg_fd, arg_rj}},\n\t// MOVGR2FR.W fd, rj\n\t{mask: 0xfffffc00, value: 0x0114a400, op: MOVGR2FR_W, args: instArgs{arg_fd, arg_rj}},\n\t// MULH.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001e0000, op: MULH_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MULH.DU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001e8000, op: MULH_DU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MULH.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001c8000, op: MULH_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MULH.WU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001d0000, op: MULH_WU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MULW.D.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001f0000, op: MULW_D_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MULW.D.WU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001f8000, op: MULW_D_WU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MUL.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001d8000, op: MUL_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// MUL.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001c0000, op: MUL_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// NOR rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00140000, op: NOR, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// OR rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00150000, op: OR, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// ORI rd, rj, ui12\n\t{mask: 0xffc00000, value: 0x03800000, op: ORI, args: instArgs{arg_rd, arg_rj, arg_ui12_21_10}},\n\t// ORN rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00160000, op: ORN, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// PCADDI rd, si20\n\t{mask: 0xfe000000, value: 0x18000000, op: PCADDI, args: instArgs{arg_rd, arg_si20_24_5}},\n\t// PCADDU12I rd, si20\n\t{mask: 0xfe000000, value: 0x1c000000, op: PCADDU12I, args: instArgs{arg_rd, arg_si20_24_5}},\n\t// PCADDU18I rd, si20\n\t{mask: 0xfe000000, value: 0x1e000000, op: PCADDU18I, args: instArgs{arg_rd, arg_si20_24_5}},\n\t// PCALAU12I rd, si20\n\t{mask: 0xfe000000, value: 0x1a000000, op: PCALAU12I, args: instArgs{arg_rd, arg_si20_24_5}},\n\t// PRELD hint, rj, si12\n\t{mask: 0xffc00000, value: 0x2ac00000, op: PRELD, args: instArgs{arg_hint_4_0, arg_rj, arg_si12_21_10}},\n\t// PRELDX hint, rj, rk\n\t{mask: 0xffff8000, value: 0x382c0000, op: PRELDX, args: instArgs{arg_hint_4_0, arg_rj, arg_rk}},\n\t// RDTIMEH.W rd, rj\n\t{mask: 0xfffffc00, value: 0x00006400, op: RDTIMEH_W, args: instArgs{arg_rd, arg_rj}},\n\t// RDTIMEL.W rd, rj\n\t{mask: 0xfffffc00, value: 0x00006000, op: RDTIMEL_W, args: instArgs{arg_rd, arg_rj}},\n\t// RDTIME.D rd, rj\n\t{mask: 0xfffffc00, value: 0x00006800, op: RDTIME_D, args: instArgs{arg_rd, arg_rj}},\n\t// REVB.2H rd, rj\n\t{mask: 0xfffffc00, value: 0x00003000, op: REVB_2H, args: instArgs{arg_rd, arg_rj}},\n\t// REVB.2W rd, rj\n\t{mask: 0xfffffc00, value: 0x00003800, op: REVB_2W, args: instArgs{arg_rd, arg_rj}},\n\t// REVB.4H rd, rj\n\t{mask: 0xfffffc00, value: 0x00003400, op: REVB_4H, args: instArgs{arg_rd, arg_rj}},\n\t// REVB.D rd, rj\n\t{mask: 0xfffffc00, value: 0x00003c00, op: REVB_D, args: instArgs{arg_rd, arg_rj}},\n\t// REVH.2W rd, rj\n\t{mask: 0xfffffc00, value: 0x00004000, op: REVH_2W, args: instArgs{arg_rd, arg_rj}},\n\t// REVH.D rd, rj\n\t{mask: 0xfffffc00, value: 0x00004400, op: REVH_D, args: instArgs{arg_rd, arg_rj}},\n\t// ROTRI.D rd, rj, ui6\n\t{mask: 0xffff0000, value: 0x004d0000, op: ROTRI_D, args: instArgs{arg_rd, arg_rj, arg_ui6_15_10}},\n\t// ROTRI.W rd, rj, ui5\n\t{mask: 0xffff8000, value: 0x004c8000, op: ROTRI_W, args: instArgs{arg_rd, arg_rj, arg_ui5_14_10}},\n\t// ROTR.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001b8000, op: ROTR_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// ROTR.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x001b0000, op: ROTR_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SCREL.D rd, rj\n\t{mask: 0xfffffc00, value: 0x38578c00, op: SCREL_D, args: instArgs{arg_rd, arg_rj}},\n\t// SCREL.W rd, rj\n\t{mask: 0xfffffc00, value: 0x38578400, op: SCREL_W, args: instArgs{arg_rd, arg_rj}},\n\t// SC.D rd, rj, si14\n\t{mask: 0xff000000, value: 0x23000000, op: SC_D, args: instArgs{arg_rd, arg_rj, arg_si14_23_10}},\n\t// SC.Q rd, rk, rj\n\t{mask: 0xffff8000, value: 0x38570000, op: SC_Q, args: instArgs{arg_rd, arg_rk, arg_rj}},\n\t// SC.W rd, rj, si14\n\t{mask: 0xff000000, value: 0x21000000, op: SC_W, args: instArgs{arg_rd, arg_rj, arg_si14_23_10}},\n\t// SLLI.D rd, rj, ui6\n\t{mask: 0xffff0000, value: 0x00410000, op: SLLI_D, args: instArgs{arg_rd, arg_rj, arg_ui6_15_10}},\n\t// SLLI.W rd, rj, ui5\n\t{mask: 0xffff8000, value: 0x00408000, op: SLLI_W, args: instArgs{arg_rd, arg_rj, arg_ui5_14_10}},\n\t// SLL.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00188000, op: SLL_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SLL.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00170000, op: SLL_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SLT rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00120000, op: SLT, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SLTI rd, rj, si12\n\t{mask: 0xffc00000, value: 0x02000000, op: SLTI, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// SLTU rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00128000, op: SLTU, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SLTUI rd, rj, si12\n\t{mask: 0xffc00000, value: 0x02400000, op: SLTUI, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// SRAI.D rd, rj, ui6\n\t{mask: 0xffff0000, value: 0x00490000, op: SRAI_D, args: instArgs{arg_rd, arg_rj, arg_ui6_15_10}},\n\t// SRAI.W rd, rj, ui5\n\t{mask: 0xffff8000, value: 0x00488000, op: SRAI_W, args: instArgs{arg_rd, arg_rj, arg_ui5_14_10}},\n\t// SRA.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00198000, op: SRA_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SRA.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00180000, op: SRA_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SRLI.D rd, rj, ui6\n\t{mask: 0xffff0000, value: 0x00450000, op: SRLI_D, args: instArgs{arg_rd, arg_rj, arg_ui6_15_10}},\n\t// SRLI.W rd, rj, ui5\n\t{mask: 0xffff8000, value: 0x00448000, op: SRLI_W, args: instArgs{arg_rd, arg_rj, arg_ui5_14_10}},\n\t// SRL.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00190000, op: SRL_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SRL.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00178000, op: SRL_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STGT.B rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387c0000, op: STGT_B, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STGT.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387d8000, op: STGT_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STGT.H rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387c8000, op: STGT_H, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STGT.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387d0000, op: STGT_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STLE.B rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387e0000, op: STLE_B, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STLE.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387f8000, op: STLE_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STLE.H rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387e8000, op: STLE_H, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STLE.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x387f0000, op: STLE_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STPTR.D rd, rj, si14\n\t{mask: 0xff000000, value: 0x27000000, op: STPTR_D, args: instArgs{arg_rd, arg_rj, arg_si14_23_10}},\n\t// STPTR.W rd, rj, si14\n\t{mask: 0xff000000, value: 0x25000000, op: STPTR_W, args: instArgs{arg_rd, arg_rj, arg_si14_23_10}},\n\t// STX.B rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38100000, op: STX_B, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STX.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x381c0000, op: STX_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STX.H rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38140000, op: STX_H, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// STX.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x38180000, op: STX_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// ST.B rd, rj, si12\n\t{mask: 0xffc00000, value: 0x29000000, op: ST_B, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// ST.D rd, rj, si12\n\t{mask: 0xffc00000, value: 0x29c00000, op: ST_D, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// ST.H rd, rj, si12\n\t{mask: 0xffc00000, value: 0x29400000, op: ST_H, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// ST.W rd, rj, si12\n\t{mask: 0xffc00000, value: 0x29800000, op: ST_W, args: instArgs{arg_rd, arg_rj, arg_si12_21_10}},\n\t// SUB.D rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00118000, op: SUB_D, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SUB.W rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00110000, op: SUB_W, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// SYSCALL code\n\t{mask: 0xffff8000, value: 0x002b0000, op: SYSCALL, args: instArgs{arg_code_14_0}},\n\t// TLBCLR\n\t{mask: 0xffffffff, value: 0x06482000, op: TLBCLR, args: instArgs{}},\n\t// TLBFILL\n\t{mask: 0xffffffff, value: 0x06483400, op: TLBFILL, args: instArgs{}},\n\t// TLBFLUSH\n\t{mask: 0xffffffff, value: 0x06482400, op: TLBFLUSH, args: instArgs{}},\n\t// TLBRD\n\t{mask: 0xffffffff, value: 0x06482c00, op: TLBRD, args: instArgs{}},\n\t// TLBSRCH\n\t{mask: 0xffffffff, value: 0x06482800, op: TLBSRCH, args: instArgs{}},\n\t// TLBWR\n\t{mask: 0xffffffff, value: 0x06483000, op: TLBWR, args: instArgs{}},\n\t// XOR rd, rj, rk\n\t{mask: 0xffff8000, value: 0x00158000, op: XOR, args: instArgs{arg_rd, arg_rj, arg_rk}},\n\t// XORI rd, rj, ui12\n\t{mask: 0xffc00000, value: 0x03c00000, op: XORI, args: instArgs{arg_rd, arg_rj, arg_ui12_21_10}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/ppc64/ppc64asm/decode.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ppc64asm\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"log\"\n)\n\nconst debugDecode = false\n\nconst prefixOpcode = 1\n\n// instFormat is a decoding rule for one specific instruction form.\n// an instruction ins matches the rule if ins&Mask == Value\n// DontCare bits should be zero, but the machine might not reject\n// ones in those bits, they are mainly reserved for future expansion\n// of the instruction set.\n// The Args are stored in the same order as the instruction manual.\n//\n// Prefixed instructions are stored as:\n//\n//\tprefix << 32 | suffix,\n//\n// Regular instructions are:\n//\n//\tinst << 32\ntype instFormat struct {\n\tOp       Op\n\tMask     uint64\n\tValue    uint64\n\tDontCare uint64\n\tArgs     [6]*argField\n}\n\n// argField indicate how to decode an argument to an instruction.\n// First parse the value from the BitFields, shift it left by Shift\n// bits to get the actual numerical value.\ntype argField struct {\n\tType  ArgType\n\tShift uint8\n\tBitFields\n}\n\n// Parse parses the Arg out from the given binary instruction i.\nfunc (a argField) Parse(i [2]uint32) Arg {\n\tswitch a.Type {\n\tdefault:\n\t\treturn nil\n\tcase TypeUnknown:\n\t\treturn nil\n\tcase TypeReg:\n\t\treturn R0 + Reg(a.BitFields.Parse(i))\n\tcase TypeCondRegBit:\n\t\treturn Cond0LT + CondReg(a.BitFields.Parse(i))\n\tcase TypeCondRegField:\n\t\treturn CR0 + CondReg(a.BitFields.Parse(i))\n\tcase TypeFPReg:\n\t\treturn F0 + Reg(a.BitFields.Parse(i))\n\tcase TypeVecReg:\n\t\treturn V0 + Reg(a.BitFields.Parse(i))\n\tcase TypeVecSReg:\n\t\treturn VS0 + Reg(a.BitFields.Parse(i))\n\tcase TypeVecSpReg:\n\t\treturn VS0 + Reg(a.BitFields.Parse(i))*2\n\tcase TypeMMAReg:\n\t\treturn A0 + Reg(a.BitFields.Parse(i))\n\tcase TypeSpReg:\n\t\treturn SpReg(a.BitFields.Parse(i))\n\tcase TypeImmSigned:\n\t\treturn Imm(a.BitFields.ParseSigned(i) << a.Shift)\n\tcase TypeImmUnsigned:\n\t\treturn Imm(a.BitFields.Parse(i) << a.Shift)\n\tcase TypePCRel:\n\t\treturn PCRel(a.BitFields.ParseSigned(i) << a.Shift)\n\tcase TypeLabel:\n\t\treturn Label(a.BitFields.ParseSigned(i) << a.Shift)\n\tcase TypeOffset:\n\t\treturn Offset(a.BitFields.ParseSigned(i) << a.Shift)\n\tcase TypeNegOffset:\n\t\t// An oddball encoding of offset for hashchk and similar.\n\t\t// e.g hashchk offset is 0b1111111000000000 | DX << 8 | D << 3\n\t\toff := a.BitFields.ParseSigned(i) << a.Shift\n\t\tneg := int64(-1) << (int(a.Shift) + a.BitFields.NumBits())\n\t\treturn Offset(neg | off)\n\t}\n}\n\ntype ArgType int8\n\nconst (\n\tTypeUnknown      ArgType = iota\n\tTypePCRel                // PC-relative address\n\tTypeLabel                // absolute address\n\tTypeReg                  // integer register\n\tTypeCondRegBit           // conditional register bit (0-31)\n\tTypeCondRegField         // conditional register field (0-7)\n\tTypeFPReg                // floating point register\n\tTypeVecReg               // vector register\n\tTypeVecSReg              // VSX register\n\tTypeVecSpReg             // VSX register pair (even only encoding)\n\tTypeMMAReg               // MMA register\n\tTypeSpReg                // special register (depends on Op)\n\tTypeImmSigned            // signed immediate\n\tTypeImmUnsigned          // unsigned immediate/flag/mask, this is the catch-all type\n\tTypeOffset               // signed offset in load/store\n\tTypeNegOffset            // A negative 16 bit value 0b1111111xxxxx000 encoded as 0bxxxxx (e.g in the hashchk instruction)\n\tTypeLast                 // must be the last one\n)\n\nfunc (t ArgType) String() string {\n\tswitch t {\n\tdefault:\n\t\treturn fmt.Sprintf(\"ArgType(%d)\", int(t))\n\tcase TypeUnknown:\n\t\treturn \"Unknown\"\n\tcase TypeReg:\n\t\treturn \"Reg\"\n\tcase TypeCondRegBit:\n\t\treturn \"CondRegBit\"\n\tcase TypeCondRegField:\n\t\treturn \"CondRegField\"\n\tcase TypeFPReg:\n\t\treturn \"FPReg\"\n\tcase TypeVecReg:\n\t\treturn \"VecReg\"\n\tcase TypeVecSReg:\n\t\treturn \"VecSReg\"\n\tcase TypeVecSpReg:\n\t\treturn \"VecSpReg\"\n\tcase TypeMMAReg:\n\t\treturn \"MMAReg\"\n\tcase TypeSpReg:\n\t\treturn \"SpReg\"\n\tcase TypeImmSigned:\n\t\treturn \"ImmSigned\"\n\tcase TypeImmUnsigned:\n\t\treturn \"ImmUnsigned\"\n\tcase TypePCRel:\n\t\treturn \"PCRel\"\n\tcase TypeLabel:\n\t\treturn \"Label\"\n\tcase TypeOffset:\n\t\treturn \"Offset\"\n\tcase TypeNegOffset:\n\t\treturn \"NegOffset\"\n\t}\n}\n\nfunc (t ArgType) GoString() string {\n\ts := t.String()\n\tif t > 0 && t < TypeLast {\n\t\treturn \"Type\" + s\n\t}\n\treturn s\n}\n\nvar (\n\t// Errors\n\terrShort   = fmt.Errorf(\"truncated instruction\")\n\terrUnknown = fmt.Errorf(\"unknown instruction\")\n)\n\nvar decoderCover []bool\n\n// Decode decodes the leading bytes in src as a single instruction using\n// byte order ord.\nfunc Decode(src []byte, ord binary.ByteOrder) (inst Inst, err error) {\n\tif len(src) < 4 {\n\t\treturn inst, errShort\n\t}\n\tif decoderCover == nil {\n\t\tdecoderCover = make([]bool, len(instFormats))\n\t}\n\tinst.Len = 4\n\tui_extn := [2]uint32{ord.Uint32(src[:inst.Len]), 0}\n\tui := uint64(ui_extn[0]) << 32\n\tinst.Enc = ui_extn[0]\n\topcode := inst.Enc >> 26\n\tif opcode == prefixOpcode {\n\t\t// This is a prefixed instruction\n\t\tinst.Len = 8\n\t\tif len(src) < 8 {\n\t\t\treturn inst, errShort\n\t\t}\n\t\t// Merge the suffixed word.\n\t\tui_extn[1] = ord.Uint32(src[4:inst.Len])\n\t\tui |= uint64(ui_extn[1])\n\t\tinst.SuffixEnc = ui_extn[1]\n\t}\n\tfor i, iform := range instFormats {\n\t\tif ui&iform.Mask != iform.Value {\n\t\t\tcontinue\n\t\t}\n\t\tif ui&iform.DontCare != 0 {\n\t\t\tif debugDecode {\n\t\t\t\tlog.Printf(\"Decode(%#x): unused bit is 1 for Op %s\", ui, iform.Op)\n\t\t\t}\n\t\t\t// to match GNU objdump (libopcodes), we ignore don't care bits\n\t\t}\n\t\tfor i, argfield := range iform.Args {\n\t\t\tif argfield == nil {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tinst.Args[i] = argfield.Parse(ui_extn)\n\t\t}\n\t\tinst.Op = iform.Op\n\t\tif debugDecode {\n\t\t\tlog.Printf(\"%#x: search entry %d\", ui, i)\n\t\t\tcontinue\n\t\t}\n\t\tbreak\n\t}\n\tif inst.Op == 0 && inst.Enc != 0 {\n\t\treturn inst, errUnknown\n\t}\n\treturn inst, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/ppc64/ppc64asm/doc.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package ppc64asm implements decoding of 64-bit PowerPC machine code.\npackage ppc64asm\n"
  },
  {
    "path": "vendor/golang.org/x/arch/ppc64/ppc64asm/field.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ppc64asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// A BitField is a bit-field in a 32-bit word.\n// Bits are counted from 0 from the MSB to 31 as the LSB.\ntype BitField struct {\n\tOffs uint8 // the offset of the left-most bit.\n\tBits uint8 // length in bits.\n\t// This instruction word holding this field.\n\t// It is always 0 for ISA < 3.1 instructions. It is\n\t// in decoding order. (0 == prefix, 1 == suffix on ISA 3.1)\n\tWord uint8\n}\n\nfunc (b BitField) String() string {\n\tif b.Bits > 1 {\n\t\treturn fmt.Sprintf(\"[%d:%d]\", b.Offs, int(b.Offs+b.Bits)-1)\n\t} else if b.Bits == 1 {\n\t\treturn fmt.Sprintf(\"[%d]\", b.Offs)\n\t} else {\n\t\treturn fmt.Sprintf(\"[%d, len=0]\", b.Offs)\n\t}\n}\n\n// Parse extracts the bitfield b from i, and return it as an unsigned integer.\n// Parse will panic if b is invalid.\nfunc (b BitField) Parse(i [2]uint32) uint32 {\n\tif b.Bits > 32 || b.Bits == 0 || b.Offs > 31 || b.Offs+b.Bits > 32 {\n\t\tpanic(fmt.Sprintf(\"invalid bitfiled %v\", b))\n\t}\n\treturn (i[b.Word] >> (32 - b.Offs - b.Bits)) & ((1 << b.Bits) - 1)\n}\n\n// ParseSigned extracts the bitfield b from i, and return it as a signed integer.\n// ParseSigned will panic if b is invalid.\nfunc (b BitField) ParseSigned(i [2]uint32) int32 {\n\tu := int32(b.Parse(i))\n\treturn u << (32 - b.Bits) >> (32 - b.Bits)\n}\n\n// BitFields is a series of BitFields representing a single number.\ntype BitFields []BitField\n\nfunc (bs BitFields) String() string {\n\tss := make([]string, len(bs))\n\tfor i, bf := range bs {\n\t\tss[i] = bf.String()\n\t}\n\treturn fmt.Sprintf(\"<%s>\", strings.Join(ss, \"|\"))\n}\n\nfunc (bs *BitFields) Append(b BitField) {\n\t*bs = append(*bs, b)\n}\n\n// parse extracts the bitfields from i, concatenate them and return the result\n// as an unsigned integer and the total length of all the bitfields.\n// parse will panic if any bitfield in b is invalid, but it doesn't check if\n// the sequence of bitfields is reasonable.\nfunc (bs BitFields) parse(i [2]uint32) (u uint64, Bits uint8) {\n\tfor _, b := range bs {\n\t\tu = (u << b.Bits) | uint64(b.Parse(i))\n\t\tBits += b.Bits\n\t}\n\treturn u, Bits\n}\n\n// Parse extracts the bitfields from i, concatenate them and return the result\n// as an unsigned integer. Parse will panic if any bitfield in b is invalid.\nfunc (bs BitFields) Parse(i [2]uint32) uint64 {\n\tu, _ := bs.parse(i)\n\treturn u\n}\n\n// ParseSigned extracts the bitfields from i, concatenate them and return the result\n// as a signed integer. Parse will panic if any bitfield in b is invalid.\nfunc (bs BitFields) ParseSigned(i [2]uint32) int64 {\n\tu, l := bs.parse(i)\n\treturn int64(u) << (64 - l) >> (64 - l)\n}\n\n// Count the number of bits in the aggregate BitFields\nfunc (bs BitFields) NumBits() int {\n\tnum := 0\n\tfor _, b := range bs {\n\t\tnum += int(b.Bits)\n\t}\n\treturn num\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/ppc64/ppc64asm/gnu.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ppc64asm\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"strings\"\n)\n\nvar (\n\t// bit 3 of index is a negated check.\n\tcondBit = [8]string{\n\t\t\"lt\", \"gt\", \"eq\", \"so\",\n\t\t\"ge\", \"le\", \"ne\", \"ns\"}\n)\n\n// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.\n// This form typically matches the syntax defined in the Power ISA Reference Manual.\nfunc GNUSyntax(inst Inst, pc uint64) string {\n\tvar buf bytes.Buffer\n\t// When there are all 0s, identify them as the disassembler\n\t// in binutils would.\n\tif inst.Enc == 0 {\n\t\treturn \".long 0x0\"\n\t} else if inst.Op == 0 {\n\t\treturn \"error: unknown instruction\"\n\t}\n\n\tPC := pc\n\t// Special handling for some ops\n\tstartArg := 0\n\tsep := \" \"\n\topName := inst.Op.String()\n\targList := inst.Args[:]\n\n\tswitch opName {\n\tcase \"bc\", \"bcl\", \"bca\", \"bcla\", \"bclr\", \"bclrl\", \"bcctr\", \"bcctrl\", \"bctar\", \"bctarl\":\n\t\tsfx := inst.Op.String()[2:]\n\t\tbo := int(inst.Args[0].(Imm))\n\t\tbi := inst.Args[1].(CondReg)\n\t\tatsfx := [4]string{\"\", \"?\", \"-\", \"+\"}\n\t\tdecsfx := [2]string{\"dnz\", \"dz\"}\n\n\t\t//BO field is... complicated (z == ignored bit, at == prediction hint)\n\t\t//Paraphrased from ISA 3.1 Book I Section 2.4:\n\t\t//\n\t\t//0000z -> decrement ctr, b if ctr != 0 and CRbi == 0\n\t\t//0001z -> decrement ctr, b if ctr == 0 and CRbi == 0\n\t\t//001at -> b if CRbi == 0\n\t\t//0100z -> decrement ctr, b if ctr != 0 and CRbi == 1\n\t\t//0101z -> decrement ctr, b if ctr == 0 and CRbi == 1\n\t\t//011at -> b if CRbi == 1\n\t\t//1a00t -> decrement ctr, b if ctr != 0\n\t\t//1a01t -> decrement ctr, b if ctr == 0\n\t\t//1z1zz -> b always\n\n\t\t// Decoding (in this order) we get\n\t\t// BO & 0b00100 == 0b00000 -> dz if BO[1], else dnz (not simplified for bcctrl forms)\n\t\t// BO & 0b10000 == 0b10000 -> (bc and bca forms not simplified), at = B[4]B[0] if B[2] != 0, done\n\t\t// BO & 0b10000 == 0b00000 -> t if BO[3], else f\n\t\t// BO & 0b10100 == 0b00100 -> at = B[0:1]\n\n\t\t// BI fields rename as follows:\n\t\t// less than            : lt BI%4==0 && test == t\n\t\t// less than or equal   : le BI%4==1 && test == f\n\t\t// equal \t\t: eq BI%4==2 && test == t\n\t\t// greater than or equal: ge BI%4==0 && test == f\n\t\t// greater than\t\t: gt BI%4==1 && test == t\n\t\t// not less than\t: nl BI%4==0 && test == f\n\t\t// not equal\t\t: ne BI%4==2 && test == f\n\t\t// not greater than\t: ng BI%4==1 && test == f\n\t\t// summary overflow\t: so BI%4==3 && test == t\n\t\t// not summary overflow : ns BI%4==3 && test == f\n\t\t// unordered\t\t: un BI%4==3 && test == t\n\t\t// not unordered\t: nu BI%4==3 && test == f\n\t\t//\n\t\t// Note, there are only 8 possible tests, but quite a few more\n\t\t// ways to name fields.  For simplicity, we choose those in condBit.\n\n\t\tat := 0   // 0 == no hint, 1 == reserved, 2 == not likely, 3 == likely\n\t\tform := 1 // 1 == n/a,  0 == cr bit not set, 4 == cr bit set\n\t\tcr := (bi - Cond0LT) / 4\n\t\tbh := -1 // Only for lr/tar/ctr variants.\n\t\tswitch opName {\n\t\tcase \"bclr\", \"bclrl\", \"bcctr\", \"bcctrl\", \"bctar\", \"bctarl\":\n\t\t\tbh = int(inst.Args[2].(Imm))\n\t\t}\n\n\t\tif bo&0x14 == 0x14 {\n\t\t\tif bo == 0x14 && bi == Cond0LT { // preferred form of unconditional branch\n\t\t\t\t// Likewise, avoid printing fake b/ba/bl/bla\n\t\t\t\tif opName != \"bc\" && opName != \"bca\" && opName != \"bcl\" && opName != \"bcla\" {\n\t\t\t\t\tstartArg = 2\n\t\t\t\t}\n\t\t\t}\n\t\t} else if bo&0x04 == 0 { // ctr is decremented\n\t\t\tif opName != \"bcctr\" && opName != \"bcctrl\" {\n\t\t\t\tstartArg = 1\n\t\t\t\ttf := \"\"\n\t\t\t\tif bo&0x10 == 0x00 {\n\t\t\t\t\ttf = \"f\"\n\t\t\t\t\tif bo&0x08 == 0x08 {\n\t\t\t\t\t\ttf = \"t\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsfx = decsfx[(bo>>1)&1] + tf + sfx\n\t\t\t}\n\t\t\tif bo&0x10 == 0x10 {\n\t\t\t\tif opName != \"bcctr\" && opName != \"bcctrl\" {\n\t\t\t\t\tstartArg = 2\n\t\t\t\t}\n\t\t\t\tif bi != Cond0LT {\n\t\t\t\t\t// A non-zero BI bit was encoded, but ignored by BO\n\t\t\t\t\tstartArg = 0\n\t\t\t\t}\n\t\t\t\tat = ((bo & 0x8) >> 2) | (bo & 0x1)\n\t\t\t} else if bo&0x4 == 0x4 {\n\t\t\t\tat = bo & 0x3\n\t\t\t}\n\t\t} else if bo&0x10 == 0x10 { // BI field is not used\n\t\t\tif opName != \"bca\" && opName != \"bc\" {\n\t\t\t\tat = ((bo & 0x8) >> 2) | (bo & 0x1)\n\t\t\t\tstartArg = 2\n\t\t\t}\n\t\t\t// If BI is encoded as a bit other than 0, no mnemonic.\n\t\t\tif bo&0x14 == 0x14 {\n\t\t\t\tstartArg = 0\n\t\t\t}\n\t\t} else {\n\t\t\tform = (bo & 0x8) >> 1\n\t\t\tstartArg = 2\n\t\t\tif bo&0x14 == 0x04 {\n\t\t\t\tat = bo & 0x3\n\t\t\t}\n\t\t}\n\t\tsfx += atsfx[at]\n\n\t\tif form != 1 {\n\t\t\tbit := int((bi-Cond0LT)%4) | (^form)&0x4\n\t\t\tsfx = condBit[bit] + sfx\n\t\t}\n\n\t\tif at != 1 && startArg > 0 && bh <= 0 {\n\t\t\tstr := fmt.Sprintf(\"b%s\", sfx)\n\t\t\tif startArg > 1 && (cr != 0 || bh > 0) {\n\t\t\t\tstr += fmt.Sprintf(\" cr%d\", cr)\n\t\t\t\tsep = \",\"\n\t\t\t}\n\t\t\tbuf.WriteString(str)\n\t\t\tif startArg < 2 && bh == 0 {\n\t\t\t\tstr := fmt.Sprintf(\" %s\",\n\t\t\t\t\tgnuArg(&inst, 1, inst.Args[1], PC))\n\t\t\t\tbuf.WriteString(str)\n\t\t\t\tstartArg = 3\n\t\t\t} else if bh == 0 {\n\t\t\t\tstartArg = 3\n\t\t\t}\n\t\t} else {\n\t\t\tif startArg == 0 || bh > 0 || at == 1 {\n\t\t\t\tbuf.WriteString(inst.Op.String())\n\t\t\t\tbuf.WriteString(atsfx[at])\n\t\t\t\tstartArg = 0\n\t\t\t} else {\n\t\t\t\tbuf.WriteString(\"b\" + sfx)\n\t\t\t}\n\t\t\tif bh == 0 {\n\t\t\t\tstr := fmt.Sprintf(\" %d,%s\", bo, gnuArg(&inst, 1, inst.Args[1], PC))\n\t\t\t\tbuf.WriteString(str)\n\t\t\t\tstartArg = 3\n\t\t\t}\n\t\t}\n\n\tcase \"mtspr\":\n\t\topcode := inst.Op.String()\n\t\tbuf.WriteString(opcode[0:2])\n\t\tswitch spr := inst.Args[0].(type) {\n\t\tcase SpReg:\n\t\t\tswitch spr {\n\t\t\tcase 1:\n\t\t\t\tbuf.WriteString(\"xer\")\n\t\t\t\tstartArg = 1\n\t\t\tcase 8:\n\t\t\t\tbuf.WriteString(\"lr\")\n\t\t\t\tstartArg = 1\n\t\t\tcase 9:\n\t\t\t\tbuf.WriteString(\"ctr\")\n\t\t\t\tstartArg = 1\n\t\t\tdefault:\n\t\t\t\tbuf.WriteString(\"spr\")\n\t\t\t}\n\t\tdefault:\n\t\t\tbuf.WriteString(\"spr\")\n\t\t}\n\n\tcase \"mfspr\":\n\t\topcode := inst.Op.String()\n\t\tbuf.WriteString(opcode[0:2])\n\t\targ := inst.Args[0]\n\t\tswitch spr := inst.Args[1].(type) {\n\t\tcase SpReg:\n\t\t\tswitch spr {\n\t\t\tcase 1:\n\t\t\t\tbuf.WriteString(\"xer \")\n\t\t\t\tbuf.WriteString(gnuArg(&inst, 0, arg, PC))\n\t\t\t\tstartArg = 2\n\t\t\tcase 8:\n\t\t\t\tbuf.WriteString(\"lr \")\n\t\t\t\tbuf.WriteString(gnuArg(&inst, 0, arg, PC))\n\t\t\t\tstartArg = 2\n\t\t\tcase 9:\n\t\t\t\tbuf.WriteString(\"ctr \")\n\t\t\t\tbuf.WriteString(gnuArg(&inst, 0, arg, PC))\n\t\t\t\tstartArg = 2\n\t\t\tcase 268:\n\t\t\t\tbuf.WriteString(\"tb \")\n\t\t\t\tbuf.WriteString(gnuArg(&inst, 0, arg, PC))\n\t\t\t\tstartArg = 2\n\t\t\tdefault:\n\t\t\t\tbuf.WriteString(\"spr\")\n\t\t\t}\n\t\tdefault:\n\t\t\tbuf.WriteString(\"spr\")\n\t\t}\n\n\tcase \"mtfsfi\", \"mtfsfi.\":\n\t\tbuf.WriteString(opName)\n\t\tl := inst.Args[2].(Imm)\n\t\tif l == 0 {\n\t\t\t// L == 0 is an extended mnemonic for the same.\n\t\t\tasm := fmt.Sprintf(\" %s,%s\",\n\t\t\t\tgnuArg(&inst, 0, inst.Args[0], PC),\n\t\t\t\tgnuArg(&inst, 1, inst.Args[1], PC))\n\t\t\tbuf.WriteString(asm)\n\t\t\tstartArg = 3\n\t\t}\n\n\tcase \"paste.\":\n\t\tbuf.WriteString(opName)\n\t\tl := inst.Args[2].(Imm)\n\t\tif l == 1 {\n\t\t\t// L == 1 is an extended mnemonic for the same.\n\t\t\tasm := fmt.Sprintf(\" %s,%s\",\n\t\t\t\tgnuArg(&inst, 0, inst.Args[0], PC),\n\t\t\t\tgnuArg(&inst, 1, inst.Args[1], PC))\n\t\t\tbuf.WriteString(asm)\n\t\t\tstartArg = 3\n\t\t}\n\n\tcase \"mtfsf\", \"mtfsf.\":\n\t\tbuf.WriteString(opName)\n\t\tl := inst.Args[3].(Imm)\n\t\tif l == 0 {\n\t\t\t// L == 0 is an extended mnemonic for the same.\n\t\t\tasm := fmt.Sprintf(\" %s,%s,%s\",\n\t\t\t\tgnuArg(&inst, 0, inst.Args[0], PC),\n\t\t\t\tgnuArg(&inst, 1, inst.Args[1], PC),\n\t\t\t\tgnuArg(&inst, 2, inst.Args[2], PC))\n\t\t\tbuf.WriteString(asm)\n\t\t\tstartArg = 4\n\t\t}\n\n\tcase \"sync\":\n\t\tlsc := inst.Args[0].(Imm)<<4 | inst.Args[1].(Imm)\n\t\tswitch lsc {\n\t\tcase 0x00:\n\t\t\tbuf.WriteString(\"hwsync\")\n\t\t\tstartArg = 2\n\t\tcase 0x10:\n\t\t\tbuf.WriteString(\"lwsync\")\n\t\t\tstartArg = 2\n\t\tdefault:\n\t\t\tbuf.WriteString(opName)\n\t\t}\n\n\tcase \"lbarx\", \"lharx\", \"lwarx\", \"ldarx\":\n\t\t// If EH == 0, omit printing EH.\n\t\teh := inst.Args[3].(Imm)\n\t\tif eh == 0 {\n\t\t\targList = inst.Args[:3]\n\t\t}\n\t\tbuf.WriteString(inst.Op.String())\n\n\tcase \"paddi\":\n\t\t// There are several extended mnemonics.  Notably, \"pla\" is\n\t\t// the only valid mnemonic for paddi (R=1), In this case, RA must\n\t\t// always be 0.  Otherwise it is invalid.\n\t\tr := inst.Args[3].(Imm)\n\t\tra := inst.Args[1].(Reg)\n\t\tstr := opName\n\t\tif ra == R0 {\n\t\t\tname := []string{\"pli\", \"pla\"}\n\t\t\tstr = fmt.Sprintf(\"%s %s,%s\",\n\t\t\t\tname[r&1],\n\t\t\t\tgnuArg(&inst, 0, inst.Args[0], PC),\n\t\t\t\tgnuArg(&inst, 2, inst.Args[2], PC))\n\t\t\tstartArg = 4\n\t\t} else {\n\t\t\tstr = fmt.Sprintf(\"%s %s,%s,%s\", opName,\n\t\t\t\tgnuArg(&inst, 0, inst.Args[0], PC),\n\t\t\t\tgnuArg(&inst, 1, inst.Args[1], PC),\n\t\t\t\tgnuArg(&inst, 2, inst.Args[2], PC))\n\t\t\tstartArg = 4\n\t\t\tif r == 1 {\n\t\t\t\t// This is an illegal encoding (ra != 0 && r == 1) on ISA 3.1.\n\t\t\t\tv := uint64(inst.Enc)<<32 | uint64(inst.SuffixEnc)\n\t\t\t\treturn fmt.Sprintf(\".quad 0x%x\", v)\n\t\t\t}\n\t\t}\n\t\tbuf.WriteString(str)\n\n\tdefault:\n\t\t// Prefixed load/stores do not print the displacement register when R==1 (they are PCrel).\n\t\t// This also implies RA should be 0.  Likewise, when R==0, printing of R can be omitted.\n\t\tif strings.HasPrefix(opName, \"pl\") || strings.HasPrefix(opName, \"pst\") {\n\t\t\tr := inst.Args[3].(Imm)\n\t\t\tra := inst.Args[2].(Reg)\n\t\t\td := inst.Args[1].(Offset)\n\t\t\tif r == 1 && ra == R0 {\n\t\t\t\tstr := fmt.Sprintf(\"%s %s,%d\", opName, gnuArg(&inst, 0, inst.Args[0], PC), d)\n\t\t\t\tbuf.WriteString(str)\n\t\t\t\tstartArg = 4\n\t\t\t} else {\n\t\t\t\tstr := fmt.Sprintf(\"%s %s,%d(%s)\", opName,\n\t\t\t\t\tgnuArg(&inst, 0, inst.Args[0], PC),\n\t\t\t\t\td,\n\t\t\t\t\tgnuArg(&inst, 2, inst.Args[2], PC))\n\t\t\t\tif r == 1 {\n\t\t\t\t\t// This is an invalid encoding (ra != 0 && r == 1) on ISA 3.1.\n\t\t\t\t\tv := uint64(inst.Enc)<<32 | uint64(inst.SuffixEnc)\n\t\t\t\t\treturn fmt.Sprintf(\".quad 0x%x\", v)\n\t\t\t\t}\n\t\t\t\tbuf.WriteString(str)\n\t\t\t\tstartArg = 4\n\t\t\t}\n\t\t} else {\n\t\t\tbuf.WriteString(opName)\n\t\t}\n\t}\n\tfor i, arg := range argList {\n\t\tif arg == nil {\n\t\t\tbreak\n\t\t}\n\t\tif i < startArg {\n\t\t\tcontinue\n\t\t}\n\t\ttext := gnuArg(&inst, i, arg, PC)\n\t\tif text == \"\" {\n\t\t\tcontinue\n\t\t}\n\t\tbuf.WriteString(sep)\n\t\tsep = \",\"\n\t\tbuf.WriteString(text)\n\t}\n\treturn buf.String()\n}\n\n// gnuArg formats arg (which is the argIndex's arg in inst) according to GNU rules.\n// NOTE: because GNUSyntax is the only caller of this func, and it receives a copy\n// of inst, it's ok to modify inst.Args here.\nfunc gnuArg(inst *Inst, argIndex int, arg Arg, pc uint64) string {\n\t// special cases for load/store instructions\n\tif _, ok := arg.(Offset); ok {\n\t\tif argIndex+1 == len(inst.Args) || inst.Args[argIndex+1] == nil {\n\t\t\tpanic(fmt.Errorf(\"wrong table: offset not followed by register\"))\n\t\t}\n\t}\n\tswitch arg := arg.(type) {\n\tcase Reg:\n\t\tif isLoadStoreOp(inst.Op) && argIndex == 1 && arg == R0 {\n\t\t\treturn \"0\"\n\t\t}\n\t\treturn arg.String()\n\tcase CondReg:\n\t\t// The CondReg can either be found in a CMP, where the\n\t\t// condition register field is being set, or in an instruction\n\t\t// like a branch or isel that is testing a bit in a condition\n\t\t// register field.\n\t\tif arg == CR0 && strings.HasPrefix(inst.Op.String(), \"cmp\") {\n\t\t\treturn \"\" // don't show cr0 for cmp instructions\n\t\t} else if arg >= CR0 {\n\t\t\treturn fmt.Sprintf(\"cr%d\", int(arg-CR0))\n\t\t}\n\t\tbit := condBit[(arg-Cond0LT)%4]\n\t\tif arg <= Cond0SO {\n\t\t\treturn bit\n\t\t}\n\t\treturn fmt.Sprintf(\"4*cr%d+%s\", int(arg-Cond0LT)/4, bit)\n\tcase Imm:\n\t\treturn fmt.Sprintf(\"%d\", arg)\n\tcase SpReg:\n\t\tswitch int(arg) {\n\t\tcase 1:\n\t\t\treturn \"xer\"\n\t\tcase 8:\n\t\t\treturn \"lr\"\n\t\tcase 9:\n\t\t\treturn \"ctr\"\n\t\tcase 268:\n\t\t\treturn \"tb\"\n\t\tdefault:\n\t\t\treturn fmt.Sprintf(\"%d\", int(arg))\n\t\t}\n\tcase PCRel:\n\t\t// If the arg is 0, use the relative address format.\n\t\t// Otherwise the pc is meaningful, use absolute address.\n\t\tif int(arg) == 0 {\n\t\t\treturn fmt.Sprintf(\".%+#x\", int(arg))\n\t\t}\n\t\taddr := pc + uint64(int64(arg))\n\t\treturn fmt.Sprintf(\"%#x\", addr)\n\tcase Label:\n\t\treturn fmt.Sprintf(\"%#x\", uint32(arg))\n\tcase Offset:\n\t\treg := inst.Args[argIndex+1].(Reg)\n\t\tremoveArg(inst, argIndex+1)\n\t\tif reg == R0 {\n\t\t\treturn fmt.Sprintf(\"%d(0)\", int(arg))\n\t\t}\n\t\treturn fmt.Sprintf(\"%d(r%d)\", int(arg), reg-R0)\n\t}\n\treturn fmt.Sprintf(\"???(%v)\", arg)\n}\n\n// removeArg removes the arg in inst.Args[index].\nfunc removeArg(inst *Inst, index int) {\n\tfor i := index; i < len(inst.Args); i++ {\n\t\tif i+1 < len(inst.Args) {\n\t\t\tinst.Args[i] = inst.Args[i+1]\n\t\t} else {\n\t\t\tinst.Args[i] = nil\n\t\t}\n\t}\n}\n\n// isLoadStoreOp returns true if op is a load or store instruction\nfunc isLoadStoreOp(op Op) bool {\n\tswitch op {\n\tcase LBZ, LBZU, LBZX, LBZUX:\n\t\treturn true\n\tcase LHZ, LHZU, LHZX, LHZUX:\n\t\treturn true\n\tcase LHA, LHAU, LHAX, LHAUX:\n\t\treturn true\n\tcase LWZ, LWZU, LWZX, LWZUX:\n\t\treturn true\n\tcase LWA, LWAX, LWAUX:\n\t\treturn true\n\tcase LD, LDU, LDX, LDUX:\n\t\treturn true\n\tcase LQ:\n\t\treturn true\n\tcase STB, STBU, STBX, STBUX:\n\t\treturn true\n\tcase STH, STHU, STHX, STHUX:\n\t\treturn true\n\tcase STW, STWU, STWX, STWUX:\n\t\treturn true\n\tcase STD, STDU, STDX, STDUX:\n\t\treturn true\n\tcase STQ:\n\t\treturn true\n\tcase LHBRX, LWBRX, STHBRX, STWBRX:\n\t\treturn true\n\tcase LBARX, LWARX, LHARX, LDARX:\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/ppc64/ppc64asm/inst.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ppc64asm\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\ntype Inst struct {\n\tOp        Op     // Opcode mnemonic\n\tEnc       uint32 // Raw encoding bits (if Len == 8, this is the prefix word)\n\tLen       int    // Length of encoding in bytes.\n\tSuffixEnc uint32 // Raw encoding bits of second word (if Len == 8)\n\tArgs      Args   // Instruction arguments, in Power ISA manual order.\n}\n\nfunc (i Inst) String() string {\n\tvar buf bytes.Buffer\n\tbuf.WriteString(i.Op.String())\n\tfor j, arg := range i.Args {\n\t\tif arg == nil {\n\t\t\tbreak\n\t\t}\n\t\tif j == 0 {\n\t\t\tbuf.WriteString(\" \")\n\t\t} else {\n\t\t\tbuf.WriteString(\", \")\n\t\t}\n\t\tbuf.WriteString(arg.String())\n\t}\n\treturn buf.String()\n}\n\n// An Op is an instruction operation.\ntype Op uint16\n\nfunc (o Op) String() string {\n\tif int(o) >= len(opstr) || opstr[o] == \"\" {\n\t\treturn fmt.Sprintf(\"Op(%d)\", int(o))\n\t}\n\treturn opstr[o]\n}\n\n// An Arg is a single instruction argument, one of these types: Reg, CondReg, SpReg, Imm, PCRel, Label, or Offset.\ntype Arg interface {\n\tIsArg()\n\tString() string\n}\n\n// An Args holds the instruction arguments.\n// If an instruction has fewer than 6 arguments,\n// the final elements in the array are nil.\ntype Args [6]Arg\n\n// A Reg is a single register. The zero value means R0, not the absence of a register.\n// It also includes special registers.\ntype Reg uint16\n\nconst (\n\t_ Reg = iota\n\tR0\n\tR1\n\tR2\n\tR3\n\tR4\n\tR5\n\tR6\n\tR7\n\tR8\n\tR9\n\tR10\n\tR11\n\tR12\n\tR13\n\tR14\n\tR15\n\tR16\n\tR17\n\tR18\n\tR19\n\tR20\n\tR21\n\tR22\n\tR23\n\tR24\n\tR25\n\tR26\n\tR27\n\tR28\n\tR29\n\tR30\n\tR31\n\tF0\n\tF1\n\tF2\n\tF3\n\tF4\n\tF5\n\tF6\n\tF7\n\tF8\n\tF9\n\tF10\n\tF11\n\tF12\n\tF13\n\tF14\n\tF15\n\tF16\n\tF17\n\tF18\n\tF19\n\tF20\n\tF21\n\tF22\n\tF23\n\tF24\n\tF25\n\tF26\n\tF27\n\tF28\n\tF29\n\tF30\n\tF31\n\tV0 // VSX extension, F0 is V0[0:63].\n\tV1\n\tV2\n\tV3\n\tV4\n\tV5\n\tV6\n\tV7\n\tV8\n\tV9\n\tV10\n\tV11\n\tV12\n\tV13\n\tV14\n\tV15\n\tV16\n\tV17\n\tV18\n\tV19\n\tV20\n\tV21\n\tV22\n\tV23\n\tV24\n\tV25\n\tV26\n\tV27\n\tV28\n\tV29\n\tV30\n\tV31\n\tVS0\n\tVS1\n\tVS2\n\tVS3\n\tVS4\n\tVS5\n\tVS6\n\tVS7\n\tVS8\n\tVS9\n\tVS10\n\tVS11\n\tVS12\n\tVS13\n\tVS14\n\tVS15\n\tVS16\n\tVS17\n\tVS18\n\tVS19\n\tVS20\n\tVS21\n\tVS22\n\tVS23\n\tVS24\n\tVS25\n\tVS26\n\tVS27\n\tVS28\n\tVS29\n\tVS30\n\tVS31\n\tVS32\n\tVS33\n\tVS34\n\tVS35\n\tVS36\n\tVS37\n\tVS38\n\tVS39\n\tVS40\n\tVS41\n\tVS42\n\tVS43\n\tVS44\n\tVS45\n\tVS46\n\tVS47\n\tVS48\n\tVS49\n\tVS50\n\tVS51\n\tVS52\n\tVS53\n\tVS54\n\tVS55\n\tVS56\n\tVS57\n\tVS58\n\tVS59\n\tVS60\n\tVS61\n\tVS62\n\tVS63\n\tA0 // MMA registers.  These are effectively shadow registers of four adjacent VSR's [An*4,An*4+3]\n\tA1\n\tA2\n\tA3\n\tA4\n\tA5\n\tA6\n\tA7\n)\n\nfunc (Reg) IsArg() {}\nfunc (r Reg) String() string {\n\tswitch {\n\tcase R0 <= r && r <= R31:\n\t\treturn fmt.Sprintf(\"r%d\", int(r-R0))\n\tcase F0 <= r && r <= F31:\n\t\treturn fmt.Sprintf(\"f%d\", int(r-F0))\n\tcase V0 <= r && r <= V31:\n\t\treturn fmt.Sprintf(\"v%d\", int(r-V0))\n\tcase VS0 <= r && r <= VS63:\n\t\treturn fmt.Sprintf(\"vs%d\", int(r-VS0))\n\tcase A0 <= r && r <= A7:\n\t\treturn fmt.Sprintf(\"a%d\", int(r-A0))\n\tdefault:\n\t\treturn fmt.Sprintf(\"Reg(%d)\", int(r))\n\t}\n}\n\n// CondReg is a bit or field in the condition register.\ntype CondReg int8\n\nconst (\n\t_ CondReg = iota\n\t// Condition Regster bits\n\tCond0LT\n\tCond0GT\n\tCond0EQ\n\tCond0SO\n\tCond1LT\n\tCond1GT\n\tCond1EQ\n\tCond1SO\n\tCond2LT\n\tCond2GT\n\tCond2EQ\n\tCond2SO\n\tCond3LT\n\tCond3GT\n\tCond3EQ\n\tCond3SO\n\tCond4LT\n\tCond4GT\n\tCond4EQ\n\tCond4SO\n\tCond5LT\n\tCond5GT\n\tCond5EQ\n\tCond5SO\n\tCond6LT\n\tCond6GT\n\tCond6EQ\n\tCond6SO\n\tCond7LT\n\tCond7GT\n\tCond7EQ\n\tCond7SO\n\t// Condition Register Fields\n\tCR0\n\tCR1\n\tCR2\n\tCR3\n\tCR4\n\tCR5\n\tCR6\n\tCR7\n)\n\nfunc (CondReg) IsArg() {}\nfunc (c CondReg) String() string {\n\tswitch {\n\tdefault:\n\t\treturn fmt.Sprintf(\"CondReg(%d)\", int(c))\n\tcase c >= CR0:\n\t\treturn fmt.Sprintf(\"CR%d\", int(c-CR0))\n\tcase c >= Cond0LT && c < CR0:\n\t\treturn fmt.Sprintf(\"Cond%d%s\", int((c-Cond0LT)/4), [4]string{\"LT\", \"GT\", \"EQ\", \"SO\"}[(c-Cond0LT)%4])\n\t}\n}\n\n// SpReg is a special register, its meaning depends on Op.\ntype SpReg uint16\n\nconst (\n\tSpRegZero SpReg = 0\n)\n\nfunc (SpReg) IsArg() {}\nfunc (s SpReg) String() string {\n\treturn fmt.Sprintf(\"SpReg(%d)\", int(s))\n}\n\n// PCRel is a PC-relative offset, used only in branch instructions.\ntype PCRel int32\n\nfunc (PCRel) IsArg() {}\nfunc (r PCRel) String() string {\n\treturn fmt.Sprintf(\"PC%+#x\", int32(r))\n}\n\n// A Label is a code (text) address, used only in absolute branch instructions.\ntype Label uint32\n\nfunc (Label) IsArg() {}\nfunc (l Label) String() string {\n\treturn fmt.Sprintf(\"%#x\", uint32(l))\n}\n\n// Imm represents an immediate number.\ntype Imm int64\n\nfunc (Imm) IsArg() {}\nfunc (i Imm) String() string {\n\treturn fmt.Sprintf(\"%d\", int32(i))\n}\n\n// Offset represents a memory offset immediate.\ntype Offset int64\n\nfunc (Offset) IsArg() {}\nfunc (o Offset) String() string {\n\treturn fmt.Sprintf(\"%+d\", int32(o))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/ppc64/ppc64asm/plan9.go",
    "content": "// Copyright 2015 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage ppc64asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// GoSyntax returns the Go assembler syntax for the instruction.\n// The pc is the program counter of the first instruction, used for expanding\n// PC-relative addresses into absolute ones.\n// The symname function queries the symbol table for the program\n// being disassembled. It returns the name and base address of the symbol\n// containing the target, if any; otherwise it returns \"\", 0.\nfunc GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64)) string {\n\tif symname == nil {\n\t\tsymname = func(uint64) (string, uint64) { return \"\", 0 }\n\t}\n\tif inst.Op == 0 && inst.Enc == 0 {\n\t\treturn \"WORD $0\"\n\t} else if inst.Op == 0 {\n\t\treturn \"?\"\n\t}\n\tvar args []string\n\tfor i, a := range inst.Args[:] {\n\t\tif a == nil {\n\t\t\tbreak\n\t\t}\n\t\tif s := plan9Arg(&inst, i, pc, a, symname); s != \"\" {\n\t\t\targs = append(args, s)\n\t\t}\n\t}\n\tvar op string\n\top = plan9OpMap[inst.Op]\n\tif op == \"\" {\n\t\top = strings.ToUpper(inst.Op.String())\n\t\tif op[len(op)-1] == '.' {\n\t\t\top = op[:len(op)-1] + \"CC\"\n\t\t}\n\t}\n\t// laid out the instruction\n\tswitch inst.Op {\n\tdefault: // dst, sA, sB, ...\n\t\tswitch len(args) {\n\t\tcase 0:\n\t\t\treturn op\n\t\tcase 1:\n\t\t\treturn fmt.Sprintf(\"%s %s\", op, args[0])\n\t\tcase 2:\n\t\t\tif inst.Op == COPY || inst.Op == PASTECC {\n\t\t\t\treturn op + \" \" + args[0] + \",\" + args[1]\n\t\t\t}\n\t\t\treturn op + \" \" + args[1] + \",\" + args[0]\n\t\tcase 3:\n\t\t\tif reverseOperandOrder(inst.Op) {\n\t\t\t\treturn op + \" \" + args[2] + \",\" + args[1] + \",\" + args[0]\n\t\t\t}\n\t\tcase 4:\n\t\t\tif reverseMiddleOps(inst.Op) {\n\t\t\t\treturn op + \" \" + args[1] + \",\" + args[3] + \",\" + args[2] + \",\" + args[0]\n\t\t\t}\n\t\t}\n\t\targs = append(args, args[0])\n\t\treturn op + \" \" + strings.Join(args[1:], \",\")\n\tcase PASTECC:\n\t\t// paste. has two input registers, and an L field, unlike other 3 operand instructions.\n\t\treturn op + \" \" + args[0] + \",\" + args[1] + \",\" + args[2]\n\tcase SYNC:\n\t\tif args[0] == \"$1\" {\n\t\t\treturn \"LWSYNC\"\n\t\t}\n\t\treturn \"HWSYNC\"\n\n\tcase ISEL:\n\t\treturn \"ISEL \" + args[3] + \",\" + args[1] + \",\" + args[2] + \",\" + args[0]\n\n\t// store instructions always have the memory operand at the end, no need to reorder\n\t// indexed stores handled separately\n\tcase STB, STBU,\n\t\tSTH, STHU,\n\t\tSTW, STWU,\n\t\tSTD, STDU,\n\t\tSTFD, STFDU,\n\t\tSTFS, STFSU,\n\t\tSTQ, HASHST, HASHSTP:\n\t\treturn op + \" \" + strings.Join(args, \",\")\n\n\tcase FCMPU, FCMPO, CMPD, CMPDI, CMPLD, CMPLDI, CMPW, CMPWI, CMPLW, CMPLWI:\n\t\tcrf := int(inst.Args[0].(CondReg) - CR0)\n\t\tcmpstr := op + \" \" + args[1] + \",\" + args[2]\n\t\tif crf != 0 { // print CRx as the final operand if not implied (i.e BF != 0)\n\t\t\tcmpstr += \",\" + args[0]\n\t\t}\n\t\treturn cmpstr\n\n\tcase LIS:\n\t\treturn \"ADDIS $0,\" + args[1] + \",\" + args[0]\n\t// store instructions with index registers\n\tcase STBX, STBUX, STHX, STHUX, STWX, STWUX, STDX, STDUX,\n\t\tSTHBRX, STWBRX, STDBRX, STSWX, STFIWX:\n\t\treturn \"MOV\" + op[2:len(op)-1] + \" \" + args[0] + \",(\" + args[2] + \")(\" + args[1] + \")\"\n\n\tcase STDCXCC, STWCXCC, STHCXCC, STBCXCC:\n\t\treturn op + \" \" + args[0] + \",(\" + args[2] + \")(\" + args[1] + \")\"\n\n\tcase STXVX, STXVD2X, STXVW4X, STXVH8X, STXVB16X, STXSDX, STVX, STVXL, STVEBX, STVEHX, STVEWX, STXSIWX, STFDX, STFDUX, STFDPX, STFSX, STFSUX:\n\t\treturn op + \" \" + args[0] + \",(\" + args[2] + \")(\" + args[1] + \")\"\n\n\tcase STXV:\n\t\treturn op + \" \" + args[0] + \",\" + args[1]\n\n\tcase STXVL, STXVLL:\n\t\treturn op + \" \" + args[0] + \",\" + args[1] + \",\" + args[2]\n\n\tcase LWAX, LWAUX, LWZX, LHZX, LBZX, LDX, LHAX, LHAUX, LDARX, LWARX, LHARX, LBARX, LFDX, LFDUX, LFSX, LFSUX, LDBRX, LWBRX, LHBRX, LDUX, LWZUX, LHZUX, LBZUX:\n\t\tif args[1] == \"0\" {\n\t\t\treturn op + \" (\" + args[2] + \"),\" + args[0]\n\t\t}\n\t\treturn op + \" (\" + args[2] + \")(\" + args[1] + \"),\" + args[0]\n\n\tcase LXVX, LXVD2X, LXVW4X, LXVH8X, LXVB16X, LVX, LVXL, LVSR, LVSL, LVEBX, LVEHX, LVEWX, LXSDX, LXSIWAX:\n\t\treturn op + \" (\" + args[2] + \")(\" + args[1] + \"),\" + args[0]\n\n\tcase LXV:\n\t\treturn op + \" \" + args[1] + \",\" + args[0]\n\n\tcase LXVL, LXVLL:\n\t\treturn op + \" \" + args[1] + \",\" + args[2] + \",\" + args[0]\n\n\tcase DCBT, DCBTST, DCBZ, DCBST, ICBI:\n\t\tif args[0] == \"0\" || args[0] == \"R0\" {\n\t\t\treturn op + \" (\" + args[1] + \")\"\n\t\t}\n\t\treturn op + \" (\" + args[1] + \")(\" + args[0] + \")\"\n\n\t// branch instructions needs additional handling\n\tcase BCLR:\n\t\tif int(inst.Args[0].(Imm))&20 == 20 { // unconditional\n\t\t\treturn \"RET\"\n\t\t}\n\t\treturn op + \" \" + strings.Join(args, \", \")\n\tcase BC:\n\t\tbo := int(inst.Args[0].(Imm))\n\t\tbi := int(inst.Args[1].(CondReg) - Cond0LT)\n\t\tbcname := condName[((bo&0x8)>>1)|(bi&0x3)]\n\t\tif bo&0x17 == 4 { // jump only a CR bit set/unset, no hints (at bits) set.\n\t\t\tif bi >= 4 {\n\t\t\t\treturn fmt.Sprintf(\"B%s CR%d,%s\", bcname, bi>>2, args[2])\n\t\t\t} else {\n\t\t\t\treturn fmt.Sprintf(\"B%s %s\", bcname, args[2])\n\t\t\t}\n\t\t}\n\t\treturn op + \" \" + strings.Join(args, \",\")\n\tcase BCCTR:\n\t\tif int(inst.Args[0].(Imm))&20 == 20 { // unconditional\n\t\t\treturn \"BR (CTR)\"\n\t\t}\n\t\treturn op + \" \" + strings.Join(args, \", \")\n\tcase BCCTRL:\n\t\tif int(inst.Args[0].(Imm))&20 == 20 { // unconditional\n\t\t\treturn \"BL (CTR)\"\n\t\t}\n\t\treturn op + \" \" + strings.Join(args, \",\")\n\tcase BCA, BCL, BCLA, BCLRL, BCTAR, BCTARL:\n\t\treturn op + \" \" + strings.Join(args, \",\")\n\t}\n}\n\n// plan9Arg formats arg (which is the argIndex's arg in inst) according to Plan 9 rules.\n//\n// NOTE: because Plan9Syntax is the only caller of this func, and it receives a copy\n// of inst, it's ok to modify inst.Args here.\nfunc plan9Arg(inst *Inst, argIndex int, pc uint64, arg Arg, symname func(uint64) (string, uint64)) string {\n\t// special cases for load/store instructions\n\tif _, ok := arg.(Offset); ok {\n\t\tif argIndex+1 == len(inst.Args) || inst.Args[argIndex+1] == nil {\n\t\t\tpanic(fmt.Errorf(\"wrong table: offset not followed by register\"))\n\t\t}\n\t}\n\tswitch arg := arg.(type) {\n\tcase Reg:\n\t\tif isLoadStoreOp(inst.Op) && argIndex == 1 && arg == R0 {\n\t\t\treturn \"0\"\n\t\t}\n\t\tif arg == R30 {\n\t\t\treturn \"g\"\n\t\t}\n\t\treturn strings.ToUpper(arg.String())\n\tcase CondReg:\n\t\t// This op is left as its numerical value, not mapped onto CR + condition\n\t\tif inst.Op == ISEL {\n\t\t\treturn fmt.Sprintf(\"$%d\", (arg - Cond0LT))\n\t\t}\n\t\tbit := [4]string{\"LT\", \"GT\", \"EQ\", \"SO\"}[(arg-Cond0LT)%4]\n\t\tif arg <= Cond0SO {\n\t\t\treturn bit\n\t\t} else if arg > Cond0SO && arg <= Cond7SO {\n\t\t\treturn fmt.Sprintf(\"CR%d%s\", int(arg-Cond0LT)/4, bit)\n\t\t} else {\n\t\t\treturn fmt.Sprintf(\"CR%d\", int(arg-CR0))\n\t\t}\n\tcase Imm:\n\t\treturn fmt.Sprintf(\"$%d\", arg)\n\tcase SpReg:\n\t\tswitch arg {\n\t\tcase 8:\n\t\t\treturn \"LR\"\n\t\tcase 9:\n\t\t\treturn \"CTR\"\n\t\t}\n\t\treturn fmt.Sprintf(\"SPR(%d)\", int(arg))\n\tcase PCRel:\n\t\taddr := pc + uint64(int64(arg))\n\t\ts, base := symname(addr)\n\t\tif s != \"\" && addr == base {\n\t\t\treturn fmt.Sprintf(\"%s(SB)\", s)\n\t\t}\n\t\tif inst.Op == BL && s != \"\" && (addr-base) == 8 {\n\t\t\t// When decoding an object built for PIE, a CALL targeting\n\t\t\t// a global entry point will be adjusted to the local entry\n\t\t\t// if any. For now, assume any symname+8 PC is a local call.\n\t\t\treturn fmt.Sprintf(\"%s+%d(SB)\", s, addr-base)\n\t\t}\n\t\treturn fmt.Sprintf(\"%#x\", addr)\n\tcase Label:\n\t\treturn fmt.Sprintf(\"%#x\", int(arg))\n\tcase Offset:\n\t\treg := inst.Args[argIndex+1].(Reg)\n\t\tremoveArg(inst, argIndex+1)\n\t\tif reg == R0 {\n\t\t\treturn fmt.Sprintf(\"%d(0)\", int(arg))\n\t\t}\n\t\treturn fmt.Sprintf(\"%d(R%d)\", int(arg), reg-R0)\n\t}\n\treturn fmt.Sprintf(\"???(%v)\", arg)\n}\n\nfunc reverseMiddleOps(op Op) bool {\n\tswitch op {\n\tcase FMADD, FMADDCC, FMADDS, FMADDSCC, FMSUB, FMSUBCC, FMSUBS, FMSUBSCC, FNMADD, FNMADDCC, FNMADDS, FNMADDSCC, FNMSUB, FNMSUBCC, FNMSUBS, FNMSUBSCC, FSEL, FSELCC:\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc reverseOperandOrder(op Op) bool {\n\tswitch op {\n\t// Special case for SUBF, SUBFC: not reversed\n\tcase ADD, ADDC, ADDE, ADDCC, ADDCCC:\n\t\treturn true\n\tcase MULLW, MULLWCC, MULHW, MULHWCC, MULLD, MULLDCC, MULHD, MULHDCC, MULLWO, MULLWOCC, MULHWU, MULHWUCC, MULLDO, MULLDOCC:\n\t\treturn true\n\tcase DIVD, DIVDCC, DIVDU, DIVDUCC, DIVDE, DIVDECC, DIVDEU, DIVDEUCC, DIVDO, DIVDOCC, DIVDUO, DIVDUOCC:\n\t\treturn true\n\tcase MODUD, MODSD, MODUW, MODSW:\n\t\treturn true\n\tcase FADD, FADDS, FSUB, FSUBS, FMUL, FMULS, FDIV, FDIVS, FMADD, FMADDS, FMSUB, FMSUBS, FNMADD, FNMADDS, FNMSUB, FNMSUBS, FMULSCC:\n\t\treturn true\n\tcase FADDCC, FADDSCC, FSUBCC, FMULCC, FDIVCC, FDIVSCC:\n\t\treturn true\n\tcase OR, ORCC, ORC, ORCCC, AND, ANDCC, ANDC, ANDCCC, XOR, XORCC, NAND, NANDCC, EQV, EQVCC, NOR, NORCC:\n\t\treturn true\n\tcase SLW, SLWCC, SLD, SLDCC, SRW, SRAW, SRWCC, SRAWCC, SRD, SRDCC, SRAD, SRADCC:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// revCondMap maps a conditional register bit to its inverse, if possible.\nvar revCondMap = map[string]string{\n\t\"LT\": \"GE\", \"GT\": \"LE\", \"EQ\": \"NE\",\n}\n\n// Lookup table to map BI[0:1] and BO[3] to an extended mnemonic for CR ops.\n// Bits 0-1 map to a bit with a CR field, and bit 2 selects the inverted (0)\n// or regular (1) extended mnemonic.\nvar condName = []string{\n\t\"GE\",\n\t\"LE\",\n\t\"NE\",\n\t\"NSO\",\n\t\"LT\",\n\t\"GT\",\n\t\"EQ\",\n\t\"SO\",\n}\n\n// plan9OpMap maps an Op to its Plan 9 mnemonics, if different than its GNU mnemonics.\nvar plan9OpMap = map[Op]string{\n\tLWARX:     \"LWAR\",\n\tLDARX:     \"LDAR\",\n\tLHARX:     \"LHAR\",\n\tLBARX:     \"LBAR\",\n\tLWAX:      \"MOVW\",\n\tLHAX:      \"MOVH\",\n\tLWAUX:     \"MOVWU\",\n\tLHAU:      \"MOVHU\",\n\tLHAUX:     \"MOVHU\",\n\tLDX:       \"MOVD\",\n\tLDUX:      \"MOVDU\",\n\tLWZX:      \"MOVWZ\",\n\tLWZUX:     \"MOVWZU\",\n\tLHZX:      \"MOVHZ\",\n\tLHZUX:     \"MOVHZU\",\n\tLBZX:      \"MOVBZ\",\n\tLBZUX:     \"MOVBZU\",\n\tLDBRX:     \"MOVDBR\",\n\tLWBRX:     \"MOVWBR\",\n\tLHBRX:     \"MOVHBR\",\n\tMCRF:      \"MOVFL\",\n\tXORI:      \"XOR\",\n\tORI:       \"OR\",\n\tANDICC:    \"ANDCC\",\n\tANDC:      \"ANDN\",\n\tANDCCC:    \"ANDNCC\",\n\tADDEO:     \"ADDEV\",\n\tADDEOCC:   \"ADDEVCC\",\n\tADDO:      \"ADDV\",\n\tADDOCC:    \"ADDVCC\",\n\tADDMEO:    \"ADDMEV\",\n\tADDMEOCC:  \"ADDMEVCC\",\n\tADDCO:     \"ADDCV\",\n\tADDCOCC:   \"ADDCVCC\",\n\tADDZEO:    \"ADDZEV\",\n\tADDZEOCC:  \"ADDZEVCC\",\n\tSUBFME:    \"SUBME\",\n\tSUBFMECC:  \"SUBMECC\",\n\tSUBFZE:    \"SUBZE\",\n\tSUBFZECC:  \"SUBZECC\",\n\tSUBFZEO:   \"SUBZEV\",\n\tSUBFZEOCC: \"SUBZEVCC\",\n\tSUBF:      \"SUB\",\n\tSUBFC:     \"SUBC\",\n\tSUBFCC:    \"SUBCC\",\n\tSUBFCCC:   \"SUBCCC\",\n\tORC:       \"ORN\",\n\tORCCC:     \"ORNCC\",\n\tMULLWO:    \"MULLWV\",\n\tMULLWOCC:  \"MULLWVCC\",\n\tMULLDO:    \"MULLDV\",\n\tMULLDOCC:  \"MULLDVCC\",\n\tDIVDO:     \"DIVDV\",\n\tDIVDOCC:   \"DIVDVCC\",\n\tDIVDUO:    \"DIVDUV\",\n\tDIVDUOCC:  \"DIVDUVCC\",\n\tADDI:      \"ADD\",\n\tMULLI:     \"MULLD\",\n\tSRADI:     \"SRAD\",\n\tSTBCXCC:   \"STBCCC\",\n\tSTWCXCC:   \"STWCCC\",\n\tSTDCXCC:   \"STDCCC\",\n\tLI:        \"MOVD\",\n\tLBZ:       \"MOVBZ\", STB: \"MOVB\",\n\tLBZU: \"MOVBZU\", STBU: \"MOVBU\",\n\tLHZ: \"MOVHZ\", LHA: \"MOVH\", STH: \"MOVH\",\n\tLHZU: \"MOVHZU\", STHU: \"MOVHU\",\n\tLWZ: \"MOVWZ\", LWA: \"MOVW\", STW: \"MOVW\",\n\tLWZU: \"MOVWZU\", STWU: \"MOVWU\",\n\tLD: \"MOVD\", STD: \"MOVD\",\n\tLDU: \"MOVDU\", STDU: \"MOVDU\",\n\tLFD: \"FMOVD\", STFD: \"FMOVD\",\n\tLFS: \"FMOVS\", STFS: \"FMOVS\",\n\tLFDX: \"FMOVD\", STFDX: \"FMOVD\",\n\tLFDU: \"FMOVDU\", STFDU: \"FMOVDU\",\n\tLFDUX: \"FMOVDU\", STFDUX: \"FMOVDU\",\n\tLFSX: \"FMOVS\", STFSX: \"FMOVS\",\n\tLFSU: \"FMOVSU\", STFSU: \"FMOVSU\",\n\tLFSUX: \"FMOVSU\", STFSUX: \"FMOVSU\",\n\tCMPD: \"CMP\", CMPDI: \"CMP\",\n\tCMPW: \"CMPW\", CMPWI: \"CMPW\",\n\tCMPLD: \"CMPU\", CMPLDI: \"CMPU\",\n\tCMPLW: \"CMPWU\", CMPLWI: \"CMPWU\",\n\tMTSPR: \"MOVD\", MFSPR: \"MOVD\", // the width is ambiguous for SPRs\n\tB:  \"BR\",\n\tBL: \"CALL\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/ppc64/ppc64asm/tables.go",
    "content": "// Code generated by ppc64map -fmt=decoder ../pp64.csv DO NOT EDIT.\n\npackage ppc64asm\n\nconst (\n\t_ Op = iota\n\tHASHCHK\n\tHASHCHKP\n\tHASHST\n\tHASHSTP\n\tBRD\n\tBRH\n\tBRW\n\tCFUGED\n\tCNTLZDM\n\tCNTTZDM\n\tDCFFIXQQ\n\tDCTFIXQQ\n\tLXVKQ\n\tLXVP\n\tLXVPX\n\tLXVRBX\n\tLXVRDX\n\tLXVRHX\n\tLXVRWX\n\tMTVSRBM\n\tMTVSRBMI\n\tMTVSRDM\n\tMTVSRHM\n\tMTVSRQM\n\tMTVSRWM\n\tPADDI\n\tPDEPD\n\tPEXTD\n\tPLBZ\n\tPLD\n\tPLFD\n\tPLFS\n\tPLHA\n\tPLHZ\n\tPLQ\n\tPLWA\n\tPLWZ\n\tPLXSD\n\tPLXSSP\n\tPLXV\n\tPLXVP\n\tPMXVBF16GER2\n\tPMXVBF16GER2NN\n\tPMXVBF16GER2NP\n\tPMXVBF16GER2PN\n\tPMXVBF16GER2PP\n\tPMXVF16GER2\n\tPMXVF16GER2NN\n\tPMXVF16GER2NP\n\tPMXVF16GER2PN\n\tPMXVF16GER2PP\n\tPMXVF32GER\n\tPMXVF32GERNN\n\tPMXVF32GERNP\n\tPMXVF32GERPN\n\tPMXVF32GERPP\n\tPMXVF64GER\n\tPMXVF64GERNN\n\tPMXVF64GERNP\n\tPMXVF64GERPN\n\tPMXVF64GERPP\n\tPMXVI16GER2\n\tPMXVI16GER2PP\n\tPMXVI16GER2S\n\tPMXVI16GER2SPP\n\tPMXVI4GER8\n\tPMXVI4GER8PP\n\tPMXVI8GER4\n\tPMXVI8GER4PP\n\tPMXVI8GER4SPP\n\tPNOP\n\tPSTB\n\tPSTD\n\tPSTFD\n\tPSTFS\n\tPSTH\n\tPSTQ\n\tPSTW\n\tPSTXSD\n\tPSTXSSP\n\tPSTXV\n\tPSTXVP\n\tSETBC\n\tSETBCR\n\tSETNBC\n\tSETNBCR\n\tSTXVP\n\tSTXVPX\n\tSTXVRBX\n\tSTXVRDX\n\tSTXVRHX\n\tSTXVRWX\n\tVCFUGED\n\tVCLRLB\n\tVCLRRB\n\tVCLZDM\n\tVCMPEQUQ\n\tVCMPEQUQCC\n\tVCMPGTSQ\n\tVCMPGTSQCC\n\tVCMPGTUQ\n\tVCMPGTUQCC\n\tVCMPSQ\n\tVCMPUQ\n\tVCNTMBB\n\tVCNTMBD\n\tVCNTMBH\n\tVCNTMBW\n\tVCTZDM\n\tVDIVESD\n\tVDIVESQ\n\tVDIVESW\n\tVDIVEUD\n\tVDIVEUQ\n\tVDIVEUW\n\tVDIVSD\n\tVDIVSQ\n\tVDIVSW\n\tVDIVUD\n\tVDIVUQ\n\tVDIVUW\n\tVEXPANDBM\n\tVEXPANDDM\n\tVEXPANDHM\n\tVEXPANDQM\n\tVEXPANDWM\n\tVEXTDDVLX\n\tVEXTDDVRX\n\tVEXTDUBVLX\n\tVEXTDUBVRX\n\tVEXTDUHVLX\n\tVEXTDUHVRX\n\tVEXTDUWVLX\n\tVEXTDUWVRX\n\tVEXTRACTBM\n\tVEXTRACTDM\n\tVEXTRACTHM\n\tVEXTRACTQM\n\tVEXTRACTWM\n\tVEXTSD2Q\n\tVGNB\n\tVINSBLX\n\tVINSBRX\n\tVINSBVLX\n\tVINSBVRX\n\tVINSD\n\tVINSDLX\n\tVINSDRX\n\tVINSHLX\n\tVINSHRX\n\tVINSHVLX\n\tVINSHVRX\n\tVINSW\n\tVINSWLX\n\tVINSWRX\n\tVINSWVLX\n\tVINSWVRX\n\tVMODSD\n\tVMODSQ\n\tVMODSW\n\tVMODUD\n\tVMODUQ\n\tVMODUW\n\tVMSUMCUD\n\tVMULESD\n\tVMULEUD\n\tVMULHSD\n\tVMULHSW\n\tVMULHUD\n\tVMULHUW\n\tVMULLD\n\tVMULOSD\n\tVMULOUD\n\tVPDEPD\n\tVPEXTD\n\tVRLQ\n\tVRLQMI\n\tVRLQNM\n\tVSLDBI\n\tVSLQ\n\tVSRAQ\n\tVSRDBI\n\tVSRQ\n\tVSTRIBL\n\tVSTRIBLCC\n\tVSTRIBR\n\tVSTRIBRCC\n\tVSTRIHL\n\tVSTRIHLCC\n\tVSTRIHR\n\tVSTRIHRCC\n\tXSCMPEQQP\n\tXSCMPGEQP\n\tXSCMPGTQP\n\tXSCVQPSQZ\n\tXSCVQPUQZ\n\tXSCVSQQP\n\tXSCVUQQP\n\tXSMAXCQP\n\tXSMINCQP\n\tXVBF16GER2\n\tXVBF16GER2NN\n\tXVBF16GER2NP\n\tXVBF16GER2PN\n\tXVBF16GER2PP\n\tXVCVBF16SPN\n\tXVCVSPBF16\n\tXVF16GER2\n\tXVF16GER2NN\n\tXVF16GER2NP\n\tXVF16GER2PN\n\tXVF16GER2PP\n\tXVF32GER\n\tXVF32GERNN\n\tXVF32GERNP\n\tXVF32GERPN\n\tXVF32GERPP\n\tXVF64GER\n\tXVF64GERNN\n\tXVF64GERNP\n\tXVF64GERPN\n\tXVF64GERPP\n\tXVI16GER2\n\tXVI16GER2PP\n\tXVI16GER2S\n\tXVI16GER2SPP\n\tXVI4GER8\n\tXVI4GER8PP\n\tXVI8GER4\n\tXVI8GER4PP\n\tXVI8GER4SPP\n\tXVTLSBB\n\tXXBLENDVB\n\tXXBLENDVD\n\tXXBLENDVH\n\tXXBLENDVW\n\tXXEVAL\n\tXXGENPCVBM\n\tXXGENPCVDM\n\tXXGENPCVHM\n\tXXGENPCVWM\n\tXXMFACC\n\tXXMTACC\n\tXXPERMX\n\tXXSETACCZ\n\tXXSPLTI32DX\n\tXXSPLTIDP\n\tXXSPLTIW\n\tMSGCLRU\n\tMSGSNDU\n\tURFID\n\tADDEX\n\tMFFSCDRN\n\tMFFSCDRNI\n\tMFFSCE\n\tMFFSCRN\n\tMFFSCRNI\n\tMFFSL\n\tSLBIAG\n\tVMSUMUDM\n\tADDPCIS\n\tBCDCFNCC\n\tBCDCFSQCC\n\tBCDCFZCC\n\tBCDCPSGNCC\n\tBCDCTNCC\n\tBCDCTSQCC\n\tBCDCTZCC\n\tBCDSCC\n\tBCDSETSGNCC\n\tBCDSRCC\n\tBCDTRUNCCC\n\tBCDUSCC\n\tBCDUTRUNCCC\n\tCMPEQB\n\tCMPRB\n\tCNTTZD\n\tCNTTZDCC\n\tCNTTZW\n\tCNTTZWCC\n\tCOPY\n\tCPABORT\n\tDARN\n\tDTSTSFI\n\tDTSTSFIQ\n\tEXTSWSLI\n\tEXTSWSLICC\n\tLDAT\n\tLWAT\n\tLXSD\n\tLXSIBZX\n\tLXSIHZX\n\tLXSSP\n\tLXV\n\tLXVB16X\n\tLXVH8X\n\tLXVL\n\tLXVLL\n\tLXVWSX\n\tLXVX\n\tMADDHD\n\tMADDHDU\n\tMADDLD\n\tMCRXRX\n\tMFVSRLD\n\tMODSD\n\tMODSW\n\tMODUD\n\tMODUW\n\tMSGSYNC\n\tMTVSRDD\n\tMTVSRWS\n\tPASTECC\n\tSETB\n\tSLBIEG\n\tSLBSYNC\n\tSTDAT\n\tSTOP\n\tSTWAT\n\tSTXSD\n\tSTXSIBX\n\tSTXSIHX\n\tSTXSSP\n\tSTXV\n\tSTXVB16X\n\tSTXVH8X\n\tSTXVL\n\tSTXVLL\n\tSTXVX\n\tVABSDUB\n\tVABSDUH\n\tVABSDUW\n\tVBPERMD\n\tVCLZLSBB\n\tVCMPNEB\n\tVCMPNEBCC\n\tVCMPNEH\n\tVCMPNEHCC\n\tVCMPNEW\n\tVCMPNEWCC\n\tVCMPNEZB\n\tVCMPNEZBCC\n\tVCMPNEZH\n\tVCMPNEZHCC\n\tVCMPNEZW\n\tVCMPNEZWCC\n\tVCTZB\n\tVCTZD\n\tVCTZH\n\tVCTZLSBB\n\tVCTZW\n\tVEXTRACTD\n\tVEXTRACTUB\n\tVEXTRACTUH\n\tVEXTRACTUW\n\tVEXTSB2D\n\tVEXTSB2W\n\tVEXTSH2D\n\tVEXTSH2W\n\tVEXTSW2D\n\tVEXTUBLX\n\tVEXTUBRX\n\tVEXTUHLX\n\tVEXTUHRX\n\tVEXTUWLX\n\tVEXTUWRX\n\tVINSERTB\n\tVINSERTD\n\tVINSERTH\n\tVINSERTW\n\tVMUL10CUQ\n\tVMUL10ECUQ\n\tVMUL10EUQ\n\tVMUL10UQ\n\tVNEGD\n\tVNEGW\n\tVPERMR\n\tVPRTYBD\n\tVPRTYBQ\n\tVPRTYBW\n\tVRLDMI\n\tVRLDNM\n\tVRLWMI\n\tVRLWNM\n\tVSLV\n\tVSRV\n\tWAIT\n\tXSABSQP\n\tXSADDQP\n\tXSADDQPO\n\tXSCMPEQDP\n\tXSCMPEXPDP\n\tXSCMPEXPQP\n\tXSCMPGEDP\n\tXSCMPGTDP\n\tXSCMPOQP\n\tXSCMPUQP\n\tXSCPSGNQP\n\tXSCVDPHP\n\tXSCVDPQP\n\tXSCVHPDP\n\tXSCVQPDP\n\tXSCVQPDPO\n\tXSCVQPSDZ\n\tXSCVQPSWZ\n\tXSCVQPUDZ\n\tXSCVQPUWZ\n\tXSCVSDQP\n\tXSCVUDQP\n\tXSDIVQP\n\tXSDIVQPO\n\tXSIEXPDP\n\tXSIEXPQP\n\tXSMADDQP\n\tXSMADDQPO\n\tXSMAXCDP\n\tXSMAXJDP\n\tXSMINCDP\n\tXSMINJDP\n\tXSMSUBQP\n\tXSMSUBQPO\n\tXSMULQP\n\tXSMULQPO\n\tXSNABSQP\n\tXSNEGQP\n\tXSNMADDQP\n\tXSNMADDQPO\n\tXSNMSUBQP\n\tXSNMSUBQPO\n\tXSRQPI\n\tXSRQPIX\n\tXSRQPXP\n\tXSSQRTQP\n\tXSSQRTQPO\n\tXSSUBQP\n\tXSSUBQPO\n\tXSTSTDCDP\n\tXSTSTDCQP\n\tXSTSTDCSP\n\tXSXEXPDP\n\tXSXEXPQP\n\tXSXSIGDP\n\tXSXSIGQP\n\tXVCVHPSP\n\tXVCVSPHP\n\tXVIEXPDP\n\tXVIEXPSP\n\tXVTSTDCDP\n\tXVTSTDCSP\n\tXVXEXPDP\n\tXVXEXPSP\n\tXVXSIGDP\n\tXVXSIGSP\n\tXXBRD\n\tXXBRH\n\tXXBRQ\n\tXXBRW\n\tXXEXTRACTUW\n\tXXINSERTW\n\tXXPERM\n\tXXPERMR\n\tXXSPLTIB\n\tBCDADDCC\n\tBCDSUBCC\n\tBCTAR\n\tBCTARL\n\tCLRBHRB\n\tFMRGEW\n\tFMRGOW\n\tICBT\n\tLQARX\n\tLXSIWAX\n\tLXSIWZX\n\tLXSSPX\n\tMFBHRBE\n\tMFVSRD\n\tMFVSRWZ\n\tMSGCLR\n\tMSGCLRP\n\tMSGSND\n\tMSGSNDP\n\tMTVSRD\n\tMTVSRWA\n\tMTVSRWZ\n\tRFEBB\n\tSTQCXCC\n\tSTXSIWX\n\tSTXSSPX\n\tVADDCUQ\n\tVADDECUQ\n\tVADDEUQM\n\tVADDUDM\n\tVADDUQM\n\tVBPERMQ\n\tVCIPHER\n\tVCIPHERLAST\n\tVCLZB\n\tVCLZD\n\tVCLZH\n\tVCLZW\n\tVCMPEQUD\n\tVCMPEQUDCC\n\tVCMPGTSD\n\tVCMPGTSDCC\n\tVCMPGTUD\n\tVCMPGTUDCC\n\tVEQV\n\tVGBBD\n\tVMAXSD\n\tVMAXUD\n\tVMINSD\n\tVMINUD\n\tVMRGEW\n\tVMRGOW\n\tVMULESW\n\tVMULEUW\n\tVMULOSW\n\tVMULOUW\n\tVMULUWM\n\tVNAND\n\tVNCIPHER\n\tVNCIPHERLAST\n\tVORC\n\tVPERMXOR\n\tVPKSDSS\n\tVPKSDUS\n\tVPKUDUM\n\tVPKUDUS\n\tVPMSUMB\n\tVPMSUMD\n\tVPMSUMH\n\tVPMSUMW\n\tVPOPCNTB\n\tVPOPCNTD\n\tVPOPCNTH\n\tVPOPCNTW\n\tVRLD\n\tVSBOX\n\tVSHASIGMAD\n\tVSHASIGMAW\n\tVSLD\n\tVSRAD\n\tVSRD\n\tVSUBCUQ\n\tVSUBECUQ\n\tVSUBEUQM\n\tVSUBUDM\n\tVSUBUQM\n\tVUPKHSW\n\tVUPKLSW\n\tXSADDSP\n\tXSCVDPSPN\n\tXSCVSPDPN\n\tXSCVSXDSP\n\tXSCVUXDSP\n\tXSDIVSP\n\tXSMADDASP\n\tXSMADDMSP\n\tXSMSUBASP\n\tXSMSUBMSP\n\tXSMULSP\n\tXSNMADDASP\n\tXSNMADDMSP\n\tXSNMSUBASP\n\tXSNMSUBMSP\n\tXSRESP\n\tXSRSP\n\tXSRSQRTESP\n\tXSSQRTSP\n\tXSSUBSP\n\tXXLEQV\n\tXXLNAND\n\tXXLORC\n\tADDG6S\n\tBPERMD\n\tCBCDTD\n\tCDTBCD\n\tDCFFIX\n\tDCFFIXCC\n\tDIVDE\n\tDIVDECC\n\tDIVDEO\n\tDIVDEOCC\n\tDIVDEU\n\tDIVDEUCC\n\tDIVDEUO\n\tDIVDEUOCC\n\tDIVWE\n\tDIVWECC\n\tDIVWEO\n\tDIVWEOCC\n\tDIVWEU\n\tDIVWEUCC\n\tDIVWEUO\n\tDIVWEUOCC\n\tFCFIDS\n\tFCFIDSCC\n\tFCFIDU\n\tFCFIDUCC\n\tFCFIDUS\n\tFCFIDUSCC\n\tFCTIDU\n\tFCTIDUCC\n\tFCTIDUZ\n\tFCTIDUZCC\n\tFCTIWU\n\tFCTIWUCC\n\tFCTIWUZ\n\tFCTIWUZCC\n\tFTDIV\n\tFTSQRT\n\tLBARX\n\tLDBRX\n\tLFIWZX\n\tLHARX\n\tLXSDX\n\tLXVD2X\n\tLXVDSX\n\tLXVW4X\n\tPOPCNTD\n\tPOPCNTW\n\tSTBCXCC\n\tSTDBRX\n\tSTHCXCC\n\tSTXSDX\n\tSTXVD2X\n\tSTXVW4X\n\tXSABSDP\n\tXSADDDP\n\tXSCMPODP\n\tXSCMPUDP\n\tXSCPSGNDP\n\tXSCVDPSP\n\tXSCVDPSXDS\n\tXSCVDPSXWS\n\tXSCVDPUXDS\n\tXSCVDPUXWS\n\tXSCVSPDP\n\tXSCVSXDDP\n\tXSCVUXDDP\n\tXSDIVDP\n\tXSMADDADP\n\tXSMADDMDP\n\tXSMAXDP\n\tXSMINDP\n\tXSMSUBADP\n\tXSMSUBMDP\n\tXSMULDP\n\tXSNABSDP\n\tXSNEGDP\n\tXSNMADDADP\n\tXSNMADDMDP\n\tXSNMSUBADP\n\tXSNMSUBMDP\n\tXSRDPI\n\tXSRDPIC\n\tXSRDPIM\n\tXSRDPIP\n\tXSRDPIZ\n\tXSREDP\n\tXSRSQRTEDP\n\tXSSQRTDP\n\tXSSUBDP\n\tXSTDIVDP\n\tXSTSQRTDP\n\tXVABSDP\n\tXVABSSP\n\tXVADDDP\n\tXVADDSP\n\tXVCMPEQDP\n\tXVCMPEQDPCC\n\tXVCMPEQSP\n\tXVCMPEQSPCC\n\tXVCMPGEDP\n\tXVCMPGEDPCC\n\tXVCMPGESP\n\tXVCMPGESPCC\n\tXVCMPGTDP\n\tXVCMPGTDPCC\n\tXVCMPGTSP\n\tXVCMPGTSPCC\n\tXVCPSGNDP\n\tXVCPSGNSP\n\tXVCVDPSP\n\tXVCVDPSXDS\n\tXVCVDPSXWS\n\tXVCVDPUXDS\n\tXVCVDPUXWS\n\tXVCVSPDP\n\tXVCVSPSXDS\n\tXVCVSPSXWS\n\tXVCVSPUXDS\n\tXVCVSPUXWS\n\tXVCVSXDDP\n\tXVCVSXDSP\n\tXVCVSXWDP\n\tXVCVSXWSP\n\tXVCVUXDDP\n\tXVCVUXDSP\n\tXVCVUXWDP\n\tXVCVUXWSP\n\tXVDIVDP\n\tXVDIVSP\n\tXVMADDADP\n\tXVMADDASP\n\tXVMADDMDP\n\tXVMADDMSP\n\tXVMAXDP\n\tXVMAXSP\n\tXVMINDP\n\tXVMINSP\n\tXVMSUBADP\n\tXVMSUBASP\n\tXVMSUBMDP\n\tXVMSUBMSP\n\tXVMULDP\n\tXVMULSP\n\tXVNABSDP\n\tXVNABSSP\n\tXVNEGDP\n\tXVNEGSP\n\tXVNMADDADP\n\tXVNMADDASP\n\tXVNMADDMDP\n\tXVNMADDMSP\n\tXVNMSUBADP\n\tXVNMSUBASP\n\tXVNMSUBMDP\n\tXVNMSUBMSP\n\tXVRDPI\n\tXVRDPIC\n\tXVRDPIM\n\tXVRDPIP\n\tXVRDPIZ\n\tXVREDP\n\tXVRESP\n\tXVRSPI\n\tXVRSPIC\n\tXVRSPIM\n\tXVRSPIP\n\tXVRSPIZ\n\tXVRSQRTEDP\n\tXVRSQRTESP\n\tXVSQRTDP\n\tXVSQRTSP\n\tXVSUBDP\n\tXVSUBSP\n\tXVTDIVDP\n\tXVTDIVSP\n\tXVTSQRTDP\n\tXVTSQRTSP\n\tXXLAND\n\tXXLANDC\n\tXXLNOR\n\tXXLOR\n\tXXLXOR\n\tXXMRGHW\n\tXXMRGLW\n\tXXPERMDI\n\tXXSEL\n\tXXSLDWI\n\tXXSPLTW\n\tCMPB\n\tDADD\n\tDADDCC\n\tDADDQ\n\tDADDQCC\n\tDCFFIXQ\n\tDCFFIXQCC\n\tDCMPO\n\tDCMPOQ\n\tDCMPU\n\tDCMPUQ\n\tDCTDP\n\tDCTDPCC\n\tDCTFIX\n\tDCTFIXCC\n\tDCTFIXQ\n\tDCTFIXQCC\n\tDCTQPQ\n\tDCTQPQCC\n\tDDEDPD\n\tDDEDPDCC\n\tDDEDPDQ\n\tDDEDPDQCC\n\tDDIV\n\tDDIVCC\n\tDDIVQ\n\tDDIVQCC\n\tDENBCD\n\tDENBCDCC\n\tDENBCDQ\n\tDENBCDQCC\n\tDIEX\n\tDIEXCC\n\tDIEXQCC\n\tDIEXQ\n\tDMUL\n\tDMULCC\n\tDMULQ\n\tDMULQCC\n\tDQUA\n\tDQUACC\n\tDQUAI\n\tDQUAICC\n\tDQUAIQ\n\tDQUAIQCC\n\tDQUAQ\n\tDQUAQCC\n\tDRDPQ\n\tDRDPQCC\n\tDRINTN\n\tDRINTNCC\n\tDRINTNQ\n\tDRINTNQCC\n\tDRINTX\n\tDRINTXCC\n\tDRINTXQ\n\tDRINTXQCC\n\tDRRND\n\tDRRNDCC\n\tDRRNDQ\n\tDRRNDQCC\n\tDRSP\n\tDRSPCC\n\tDSCLI\n\tDSCLICC\n\tDSCLIQ\n\tDSCLIQCC\n\tDSCRI\n\tDSCRICC\n\tDSCRIQ\n\tDSCRIQCC\n\tDSUB\n\tDSUBCC\n\tDSUBQ\n\tDSUBQCC\n\tDTSTDC\n\tDTSTDCQ\n\tDTSTDG\n\tDTSTDGQ\n\tDTSTEX\n\tDTSTEXQ\n\tDTSTSF\n\tDTSTSFQ\n\tDXEX\n\tDXEXCC\n\tDXEXQ\n\tDXEXQCC\n\tFCPSGN\n\tFCPSGNCC\n\tLBZCIX\n\tLDCIX\n\tLFDP\n\tLFDPX\n\tLFIWAX\n\tLHZCIX\n\tLWZCIX\n\tPRTYD\n\tPRTYW\n\tSLBFEECC\n\tSTBCIX\n\tSTDCIX\n\tSTFDP\n\tSTFDPX\n\tSTHCIX\n\tSTWCIX\n\tISEL\n\tLVEBX\n\tLVEHX\n\tLVEWX\n\tLVSL\n\tLVSR\n\tLVX\n\tLVXL\n\tMFVSCR\n\tMTVSCR\n\tSTVEBX\n\tSTVEHX\n\tSTVEWX\n\tSTVX\n\tSTVXL\n\tTLBIEL\n\tVADDCUW\n\tVADDFP\n\tVADDSBS\n\tVADDSHS\n\tVADDSWS\n\tVADDUBM\n\tVADDUBS\n\tVADDUHM\n\tVADDUHS\n\tVADDUWM\n\tVADDUWS\n\tVAND\n\tVANDC\n\tVAVGSB\n\tVAVGSH\n\tVAVGSW\n\tVAVGUB\n\tVAVGUH\n\tVAVGUW\n\tVCFSX\n\tVCFUX\n\tVCMPBFP\n\tVCMPBFPCC\n\tVCMPEQFP\n\tVCMPEQFPCC\n\tVCMPEQUB\n\tVCMPEQUBCC\n\tVCMPEQUH\n\tVCMPEQUHCC\n\tVCMPEQUW\n\tVCMPEQUWCC\n\tVCMPGEFP\n\tVCMPGEFPCC\n\tVCMPGTFP\n\tVCMPGTFPCC\n\tVCMPGTSB\n\tVCMPGTSBCC\n\tVCMPGTSH\n\tVCMPGTSHCC\n\tVCMPGTSW\n\tVCMPGTSWCC\n\tVCMPGTUB\n\tVCMPGTUBCC\n\tVCMPGTUH\n\tVCMPGTUHCC\n\tVCMPGTUW\n\tVCMPGTUWCC\n\tVCTSXS\n\tVCTUXS\n\tVEXPTEFP\n\tVLOGEFP\n\tVMADDFP\n\tVMAXFP\n\tVMAXSB\n\tVMAXSH\n\tVMAXSW\n\tVMAXUB\n\tVMAXUH\n\tVMAXUW\n\tVMHADDSHS\n\tVMHRADDSHS\n\tVMINFP\n\tVMINSB\n\tVMINSH\n\tVMINSW\n\tVMINUB\n\tVMINUH\n\tVMINUW\n\tVMLADDUHM\n\tVMRGHB\n\tVMRGHH\n\tVMRGHW\n\tVMRGLB\n\tVMRGLH\n\tVMRGLW\n\tVMSUMMBM\n\tVMSUMSHM\n\tVMSUMSHS\n\tVMSUMUBM\n\tVMSUMUHM\n\tVMSUMUHS\n\tVMULESB\n\tVMULESH\n\tVMULEUB\n\tVMULEUH\n\tVMULOSB\n\tVMULOSH\n\tVMULOUB\n\tVMULOUH\n\tVNMSUBFP\n\tVNOR\n\tVOR\n\tVPERM\n\tVPKPX\n\tVPKSHSS\n\tVPKSHUS\n\tVPKSWSS\n\tVPKSWUS\n\tVPKUHUM\n\tVPKUHUS\n\tVPKUWUM\n\tVPKUWUS\n\tVREFP\n\tVRFIM\n\tVRFIN\n\tVRFIP\n\tVRFIZ\n\tVRLB\n\tVRLH\n\tVRLW\n\tVRSQRTEFP\n\tVSEL\n\tVSL\n\tVSLB\n\tVSLDOI\n\tVSLH\n\tVSLO\n\tVSLW\n\tVSPLTB\n\tVSPLTH\n\tVSPLTISB\n\tVSPLTISH\n\tVSPLTISW\n\tVSPLTW\n\tVSR\n\tVSRAB\n\tVSRAH\n\tVSRAW\n\tVSRB\n\tVSRH\n\tVSRO\n\tVSRW\n\tVSUBCUW\n\tVSUBFP\n\tVSUBSBS\n\tVSUBSHS\n\tVSUBSWS\n\tVSUBUBM\n\tVSUBUBS\n\tVSUBUHM\n\tVSUBUHS\n\tVSUBUWM\n\tVSUBUWS\n\tVSUM2SWS\n\tVSUM4SBS\n\tVSUM4SHS\n\tVSUM4UBS\n\tVSUMSWS\n\tVUPKHPX\n\tVUPKHSB\n\tVUPKHSH\n\tVUPKLPX\n\tVUPKLSB\n\tVUPKLSH\n\tVXOR\n\tFRE\n\tFRECC\n\tFRIM\n\tFRIMCC\n\tFRIN\n\tFRINCC\n\tFRIP\n\tFRIPCC\n\tFRIZ\n\tFRIZCC\n\tFRSQRTES\n\tFRSQRTESCC\n\tHRFID\n\tPOPCNTB\n\tMFOCRF\n\tMTOCRF\n\tSLBMFEE\n\tSLBMFEV\n\tSLBMTE\n\tRFSCV\n\tSCV\n\tLQ\n\tSTQ\n\tCNTLZD\n\tCNTLZDCC\n\tDCBF\n\tDCBST\n\tDCBT\n\tDCBTST\n\tDIVD\n\tDIVDCC\n\tDIVDO\n\tDIVDOCC\n\tDIVDU\n\tDIVDUCC\n\tDIVDUO\n\tDIVDUOCC\n\tDIVW\n\tDIVWCC\n\tDIVWO\n\tDIVWOCC\n\tDIVWU\n\tDIVWUCC\n\tDIVWUO\n\tDIVWUOCC\n\tEIEIO\n\tEXTSB\n\tEXTSBCC\n\tEXTSW\n\tEXTSWCC\n\tFADDS\n\tFADDSCC\n\tFCFID\n\tFCFIDCC\n\tFCTID\n\tFCTIDCC\n\tFCTIDZ\n\tFCTIDZCC\n\tFDIVS\n\tFDIVSCC\n\tFMADDS\n\tFMADDSCC\n\tFMSUBS\n\tFMSUBSCC\n\tFMULS\n\tFMULSCC\n\tFNMADDS\n\tFNMADDSCC\n\tFNMSUBS\n\tFNMSUBSCC\n\tFRES\n\tFRESCC\n\tFRSQRTE\n\tFRSQRTECC\n\tFSEL\n\tFSELCC\n\tFSQRTS\n\tFSQRTSCC\n\tFSUBS\n\tFSUBSCC\n\tICBI\n\tLD\n\tLDARX\n\tLDU\n\tLDUX\n\tLDX\n\tLWA\n\tLWARX\n\tLWAUX\n\tLWAX\n\tMFTB\n\tMTMSRD\n\tMULHD\n\tMULHDCC\n\tMULHDU\n\tMULHDUCC\n\tMULHW\n\tMULHWCC\n\tMULHWU\n\tMULHWUCC\n\tMULLD\n\tMULLDCC\n\tMULLDO\n\tMULLDOCC\n\tRFID\n\tRLDCL\n\tRLDCLCC\n\tRLDCR\n\tRLDCRCC\n\tRLDIC\n\tRLDICCC\n\tRLDICL\n\tRLDICLCC\n\tRLDICR\n\tRLDICRCC\n\tRLDIMI\n\tRLDIMICC\n\tSC\n\tSLBIA\n\tSLBIE\n\tSLD\n\tSLDCC\n\tSRAD\n\tSRADCC\n\tSRADI\n\tSRADICC\n\tSRD\n\tSRDCC\n\tSTD\n\tSTDCXCC\n\tSTDU\n\tSTDUX\n\tSTDX\n\tSTFIWX\n\tSTWCXCC\n\tSUBF\n\tSUBFCC\n\tSUBFO\n\tSUBFOCC\n\tTD\n\tTDI\n\tTLBSYNC\n\tFCTIW\n\tFCTIWCC\n\tFCTIWZ\n\tFCTIWZCC\n\tFSQRT\n\tFSQRTCC\n\tADD\n\tADDCC\n\tADDO\n\tADDOCC\n\tADDC\n\tADDCCC\n\tADDCO\n\tADDCOCC\n\tADDE\n\tADDECC\n\tADDEO\n\tADDEOCC\n\tLI\n\tADDI\n\tADDIC\n\tADDICCC\n\tLIS\n\tADDIS\n\tADDME\n\tADDMECC\n\tADDMEO\n\tADDMEOCC\n\tADDZE\n\tADDZECC\n\tADDZEO\n\tADDZEOCC\n\tAND\n\tANDCC\n\tANDC\n\tANDCCC\n\tANDICC\n\tANDISCC\n\tB\n\tBA\n\tBL\n\tBLA\n\tBC\n\tBCA\n\tBCL\n\tBCLA\n\tBCCTR\n\tBCCTRL\n\tBCLR\n\tBCLRL\n\tCMPW\n\tCMPD\n\tCMP\n\tCMPWI\n\tCMPDI\n\tCMPI\n\tCMPLW\n\tCMPLD\n\tCMPL\n\tCMPLWI\n\tCMPLDI\n\tCMPLI\n\tCNTLZW\n\tCNTLZWCC\n\tCRAND\n\tCRANDC\n\tCREQV\n\tCRNAND\n\tCRNOR\n\tCROR\n\tCRORC\n\tCRXOR\n\tDCBZ\n\tEQV\n\tEQVCC\n\tEXTSH\n\tEXTSHCC\n\tFABS\n\tFABSCC\n\tFADD\n\tFADDCC\n\tFCMPO\n\tFCMPU\n\tFDIV\n\tFDIVCC\n\tFMADD\n\tFMADDCC\n\tFMR\n\tFMRCC\n\tFMSUB\n\tFMSUBCC\n\tFMUL\n\tFMULCC\n\tFNABS\n\tFNABSCC\n\tFNEG\n\tFNEGCC\n\tFNMADD\n\tFNMADDCC\n\tFNMSUB\n\tFNMSUBCC\n\tFRSP\n\tFRSPCC\n\tFSUB\n\tFSUBCC\n\tISYNC\n\tLBZ\n\tLBZU\n\tLBZUX\n\tLBZX\n\tLFD\n\tLFDU\n\tLFDUX\n\tLFDX\n\tLFS\n\tLFSU\n\tLFSUX\n\tLFSX\n\tLHA\n\tLHAU\n\tLHAUX\n\tLHAX\n\tLHBRX\n\tLHZ\n\tLHZU\n\tLHZUX\n\tLHZX\n\tLMW\n\tLSWI\n\tLSWX\n\tLWBRX\n\tLWZ\n\tLWZU\n\tLWZUX\n\tLWZX\n\tMCRF\n\tMCRFS\n\tMFCR\n\tMFFS\n\tMFFSCC\n\tMFMSR\n\tMFSPR\n\tMTCRF\n\tMTFSB0\n\tMTFSB0CC\n\tMTFSB1\n\tMTFSB1CC\n\tMTFSF\n\tMTFSFCC\n\tMTFSFI\n\tMTFSFICC\n\tMTMSR\n\tMTSPR\n\tMULLI\n\tMULLW\n\tMULLWCC\n\tMULLWO\n\tMULLWOCC\n\tNAND\n\tNANDCC\n\tNEG\n\tNEGCC\n\tNEGO\n\tNEGOCC\n\tNOR\n\tNORCC\n\tOR\n\tORCC\n\tORC\n\tORCCC\n\tNOP\n\tORI\n\tORIS\n\tRLWIMI\n\tRLWIMICC\n\tRLWINM\n\tRLWINMCC\n\tRLWNM\n\tRLWNMCC\n\tSLW\n\tSLWCC\n\tSRAW\n\tSRAWCC\n\tSRAWI\n\tSRAWICC\n\tSRW\n\tSRWCC\n\tSTB\n\tSTBU\n\tSTBUX\n\tSTBX\n\tSTFD\n\tSTFDU\n\tSTFDUX\n\tSTFDX\n\tSTFS\n\tSTFSU\n\tSTFSUX\n\tSTFSX\n\tSTH\n\tSTHBRX\n\tSTHU\n\tSTHUX\n\tSTHX\n\tSTMW\n\tSTSWI\n\tSTSWX\n\tSTW\n\tSTWBRX\n\tSTWU\n\tSTWUX\n\tSTWX\n\tSUBFC\n\tSUBFCCC\n\tSUBFCO\n\tSUBFCOCC\n\tSUBFE\n\tSUBFECC\n\tSUBFEO\n\tSUBFEOCC\n\tSUBFIC\n\tSUBFME\n\tSUBFMECC\n\tSUBFMEO\n\tSUBFMEOCC\n\tSUBFZE\n\tSUBFZECC\n\tSUBFZEO\n\tSUBFZEOCC\n\tSYNC\n\tTLBIE\n\tTW\n\tTWI\n\tXOR\n\tXORCC\n\tXORI\n\tXORIS\n)\n\nvar opstr = [...]string{\n\tHASHCHK:        \"hashchk\",\n\tHASHCHKP:       \"hashchkp\",\n\tHASHST:         \"hashst\",\n\tHASHSTP:        \"hashstp\",\n\tBRD:            \"brd\",\n\tBRH:            \"brh\",\n\tBRW:            \"brw\",\n\tCFUGED:         \"cfuged\",\n\tCNTLZDM:        \"cntlzdm\",\n\tCNTTZDM:        \"cnttzdm\",\n\tDCFFIXQQ:       \"dcffixqq\",\n\tDCTFIXQQ:       \"dctfixqq\",\n\tLXVKQ:          \"lxvkq\",\n\tLXVP:           \"lxvp\",\n\tLXVPX:          \"lxvpx\",\n\tLXVRBX:         \"lxvrbx\",\n\tLXVRDX:         \"lxvrdx\",\n\tLXVRHX:         \"lxvrhx\",\n\tLXVRWX:         \"lxvrwx\",\n\tMTVSRBM:        \"mtvsrbm\",\n\tMTVSRBMI:       \"mtvsrbmi\",\n\tMTVSRDM:        \"mtvsrdm\",\n\tMTVSRHM:        \"mtvsrhm\",\n\tMTVSRQM:        \"mtvsrqm\",\n\tMTVSRWM:        \"mtvsrwm\",\n\tPADDI:          \"paddi\",\n\tPDEPD:          \"pdepd\",\n\tPEXTD:          \"pextd\",\n\tPLBZ:           \"plbz\",\n\tPLD:            \"pld\",\n\tPLFD:           \"plfd\",\n\tPLFS:           \"plfs\",\n\tPLHA:           \"plha\",\n\tPLHZ:           \"plhz\",\n\tPLQ:            \"plq\",\n\tPLWA:           \"plwa\",\n\tPLWZ:           \"plwz\",\n\tPLXSD:          \"plxsd\",\n\tPLXSSP:         \"plxssp\",\n\tPLXV:           \"plxv\",\n\tPLXVP:          \"plxvp\",\n\tPMXVBF16GER2:   \"pmxvbf16ger2\",\n\tPMXVBF16GER2NN: \"pmxvbf16ger2nn\",\n\tPMXVBF16GER2NP: \"pmxvbf16ger2np\",\n\tPMXVBF16GER2PN: \"pmxvbf16ger2pn\",\n\tPMXVBF16GER2PP: \"pmxvbf16ger2pp\",\n\tPMXVF16GER2:    \"pmxvf16ger2\",\n\tPMXVF16GER2NN:  \"pmxvf16ger2nn\",\n\tPMXVF16GER2NP:  \"pmxvf16ger2np\",\n\tPMXVF16GER2PN:  \"pmxvf16ger2pn\",\n\tPMXVF16GER2PP:  \"pmxvf16ger2pp\",\n\tPMXVF32GER:     \"pmxvf32ger\",\n\tPMXVF32GERNN:   \"pmxvf32gernn\",\n\tPMXVF32GERNP:   \"pmxvf32gernp\",\n\tPMXVF32GERPN:   \"pmxvf32gerpn\",\n\tPMXVF32GERPP:   \"pmxvf32gerpp\",\n\tPMXVF64GER:     \"pmxvf64ger\",\n\tPMXVF64GERNN:   \"pmxvf64gernn\",\n\tPMXVF64GERNP:   \"pmxvf64gernp\",\n\tPMXVF64GERPN:   \"pmxvf64gerpn\",\n\tPMXVF64GERPP:   \"pmxvf64gerpp\",\n\tPMXVI16GER2:    \"pmxvi16ger2\",\n\tPMXVI16GER2PP:  \"pmxvi16ger2pp\",\n\tPMXVI16GER2S:   \"pmxvi16ger2s\",\n\tPMXVI16GER2SPP: \"pmxvi16ger2spp\",\n\tPMXVI4GER8:     \"pmxvi4ger8\",\n\tPMXVI4GER8PP:   \"pmxvi4ger8pp\",\n\tPMXVI8GER4:     \"pmxvi8ger4\",\n\tPMXVI8GER4PP:   \"pmxvi8ger4pp\",\n\tPMXVI8GER4SPP:  \"pmxvi8ger4spp\",\n\tPNOP:           \"pnop\",\n\tPSTB:           \"pstb\",\n\tPSTD:           \"pstd\",\n\tPSTFD:          \"pstfd\",\n\tPSTFS:          \"pstfs\",\n\tPSTH:           \"psth\",\n\tPSTQ:           \"pstq\",\n\tPSTW:           \"pstw\",\n\tPSTXSD:         \"pstxsd\",\n\tPSTXSSP:        \"pstxssp\",\n\tPSTXV:          \"pstxv\",\n\tPSTXVP:         \"pstxvp\",\n\tSETBC:          \"setbc\",\n\tSETBCR:         \"setbcr\",\n\tSETNBC:         \"setnbc\",\n\tSETNBCR:        \"setnbcr\",\n\tSTXVP:          \"stxvp\",\n\tSTXVPX:         \"stxvpx\",\n\tSTXVRBX:        \"stxvrbx\",\n\tSTXVRDX:        \"stxvrdx\",\n\tSTXVRHX:        \"stxvrhx\",\n\tSTXVRWX:        \"stxvrwx\",\n\tVCFUGED:        \"vcfuged\",\n\tVCLRLB:         \"vclrlb\",\n\tVCLRRB:         \"vclrrb\",\n\tVCLZDM:         \"vclzdm\",\n\tVCMPEQUQ:       \"vcmpequq\",\n\tVCMPEQUQCC:     \"vcmpequq.\",\n\tVCMPGTSQ:       \"vcmpgtsq\",\n\tVCMPGTSQCC:     \"vcmpgtsq.\",\n\tVCMPGTUQ:       \"vcmpgtuq\",\n\tVCMPGTUQCC:     \"vcmpgtuq.\",\n\tVCMPSQ:         \"vcmpsq\",\n\tVCMPUQ:         \"vcmpuq\",\n\tVCNTMBB:        \"vcntmbb\",\n\tVCNTMBD:        \"vcntmbd\",\n\tVCNTMBH:        \"vcntmbh\",\n\tVCNTMBW:        \"vcntmbw\",\n\tVCTZDM:         \"vctzdm\",\n\tVDIVESD:        \"vdivesd\",\n\tVDIVESQ:        \"vdivesq\",\n\tVDIVESW:        \"vdivesw\",\n\tVDIVEUD:        \"vdiveud\",\n\tVDIVEUQ:        \"vdiveuq\",\n\tVDIVEUW:        \"vdiveuw\",\n\tVDIVSD:         \"vdivsd\",\n\tVDIVSQ:         \"vdivsq\",\n\tVDIVSW:         \"vdivsw\",\n\tVDIVUD:         \"vdivud\",\n\tVDIVUQ:         \"vdivuq\",\n\tVDIVUW:         \"vdivuw\",\n\tVEXPANDBM:      \"vexpandbm\",\n\tVEXPANDDM:      \"vexpanddm\",\n\tVEXPANDHM:      \"vexpandhm\",\n\tVEXPANDQM:      \"vexpandqm\",\n\tVEXPANDWM:      \"vexpandwm\",\n\tVEXTDDVLX:      \"vextddvlx\",\n\tVEXTDDVRX:      \"vextddvrx\",\n\tVEXTDUBVLX:     \"vextdubvlx\",\n\tVEXTDUBVRX:     \"vextdubvrx\",\n\tVEXTDUHVLX:     \"vextduhvlx\",\n\tVEXTDUHVRX:     \"vextduhvrx\",\n\tVEXTDUWVLX:     \"vextduwvlx\",\n\tVEXTDUWVRX:     \"vextduwvrx\",\n\tVEXTRACTBM:     \"vextractbm\",\n\tVEXTRACTDM:     \"vextractdm\",\n\tVEXTRACTHM:     \"vextracthm\",\n\tVEXTRACTQM:     \"vextractqm\",\n\tVEXTRACTWM:     \"vextractwm\",\n\tVEXTSD2Q:       \"vextsd2q\",\n\tVGNB:           \"vgnb\",\n\tVINSBLX:        \"vinsblx\",\n\tVINSBRX:        \"vinsbrx\",\n\tVINSBVLX:       \"vinsbvlx\",\n\tVINSBVRX:       \"vinsbvrx\",\n\tVINSD:          \"vinsd\",\n\tVINSDLX:        \"vinsdlx\",\n\tVINSDRX:        \"vinsdrx\",\n\tVINSHLX:        \"vinshlx\",\n\tVINSHRX:        \"vinshrx\",\n\tVINSHVLX:       \"vinshvlx\",\n\tVINSHVRX:       \"vinshvrx\",\n\tVINSW:          \"vinsw\",\n\tVINSWLX:        \"vinswlx\",\n\tVINSWRX:        \"vinswrx\",\n\tVINSWVLX:       \"vinswvlx\",\n\tVINSWVRX:       \"vinswvrx\",\n\tVMODSD:         \"vmodsd\",\n\tVMODSQ:         \"vmodsq\",\n\tVMODSW:         \"vmodsw\",\n\tVMODUD:         \"vmodud\",\n\tVMODUQ:         \"vmoduq\",\n\tVMODUW:         \"vmoduw\",\n\tVMSUMCUD:       \"vmsumcud\",\n\tVMULESD:        \"vmulesd\",\n\tVMULEUD:        \"vmuleud\",\n\tVMULHSD:        \"vmulhsd\",\n\tVMULHSW:        \"vmulhsw\",\n\tVMULHUD:        \"vmulhud\",\n\tVMULHUW:        \"vmulhuw\",\n\tVMULLD:         \"vmulld\",\n\tVMULOSD:        \"vmulosd\",\n\tVMULOUD:        \"vmuloud\",\n\tVPDEPD:         \"vpdepd\",\n\tVPEXTD:         \"vpextd\",\n\tVRLQ:           \"vrlq\",\n\tVRLQMI:         \"vrlqmi\",\n\tVRLQNM:         \"vrlqnm\",\n\tVSLDBI:         \"vsldbi\",\n\tVSLQ:           \"vslq\",\n\tVSRAQ:          \"vsraq\",\n\tVSRDBI:         \"vsrdbi\",\n\tVSRQ:           \"vsrq\",\n\tVSTRIBL:        \"vstribl\",\n\tVSTRIBLCC:      \"vstribl.\",\n\tVSTRIBR:        \"vstribr\",\n\tVSTRIBRCC:      \"vstribr.\",\n\tVSTRIHL:        \"vstrihl\",\n\tVSTRIHLCC:      \"vstrihl.\",\n\tVSTRIHR:        \"vstrihr\",\n\tVSTRIHRCC:      \"vstrihr.\",\n\tXSCMPEQQP:      \"xscmpeqqp\",\n\tXSCMPGEQP:      \"xscmpgeqp\",\n\tXSCMPGTQP:      \"xscmpgtqp\",\n\tXSCVQPSQZ:      \"xscvqpsqz\",\n\tXSCVQPUQZ:      \"xscvqpuqz\",\n\tXSCVSQQP:       \"xscvsqqp\",\n\tXSCVUQQP:       \"xscvuqqp\",\n\tXSMAXCQP:       \"xsmaxcqp\",\n\tXSMINCQP:       \"xsmincqp\",\n\tXVBF16GER2:     \"xvbf16ger2\",\n\tXVBF16GER2NN:   \"xvbf16ger2nn\",\n\tXVBF16GER2NP:   \"xvbf16ger2np\",\n\tXVBF16GER2PN:   \"xvbf16ger2pn\",\n\tXVBF16GER2PP:   \"xvbf16ger2pp\",\n\tXVCVBF16SPN:    \"xvcvbf16spn\",\n\tXVCVSPBF16:     \"xvcvspbf16\",\n\tXVF16GER2:      \"xvf16ger2\",\n\tXVF16GER2NN:    \"xvf16ger2nn\",\n\tXVF16GER2NP:    \"xvf16ger2np\",\n\tXVF16GER2PN:    \"xvf16ger2pn\",\n\tXVF16GER2PP:    \"xvf16ger2pp\",\n\tXVF32GER:       \"xvf32ger\",\n\tXVF32GERNN:     \"xvf32gernn\",\n\tXVF32GERNP:     \"xvf32gernp\",\n\tXVF32GERPN:     \"xvf32gerpn\",\n\tXVF32GERPP:     \"xvf32gerpp\",\n\tXVF64GER:       \"xvf64ger\",\n\tXVF64GERNN:     \"xvf64gernn\",\n\tXVF64GERNP:     \"xvf64gernp\",\n\tXVF64GERPN:     \"xvf64gerpn\",\n\tXVF64GERPP:     \"xvf64gerpp\",\n\tXVI16GER2:      \"xvi16ger2\",\n\tXVI16GER2PP:    \"xvi16ger2pp\",\n\tXVI16GER2S:     \"xvi16ger2s\",\n\tXVI16GER2SPP:   \"xvi16ger2spp\",\n\tXVI4GER8:       \"xvi4ger8\",\n\tXVI4GER8PP:     \"xvi4ger8pp\",\n\tXVI8GER4:       \"xvi8ger4\",\n\tXVI8GER4PP:     \"xvi8ger4pp\",\n\tXVI8GER4SPP:    \"xvi8ger4spp\",\n\tXVTLSBB:        \"xvtlsbb\",\n\tXXBLENDVB:      \"xxblendvb\",\n\tXXBLENDVD:      \"xxblendvd\",\n\tXXBLENDVH:      \"xxblendvh\",\n\tXXBLENDVW:      \"xxblendvw\",\n\tXXEVAL:         \"xxeval\",\n\tXXGENPCVBM:     \"xxgenpcvbm\",\n\tXXGENPCVDM:     \"xxgenpcvdm\",\n\tXXGENPCVHM:     \"xxgenpcvhm\",\n\tXXGENPCVWM:     \"xxgenpcvwm\",\n\tXXMFACC:        \"xxmfacc\",\n\tXXMTACC:        \"xxmtacc\",\n\tXXPERMX:        \"xxpermx\",\n\tXXSETACCZ:      \"xxsetaccz\",\n\tXXSPLTI32DX:    \"xxsplti32dx\",\n\tXXSPLTIDP:      \"xxspltidp\",\n\tXXSPLTIW:       \"xxspltiw\",\n\tMSGCLRU:        \"msgclru\",\n\tMSGSNDU:        \"msgsndu\",\n\tURFID:          \"urfid\",\n\tADDEX:          \"addex\",\n\tMFFSCDRN:       \"mffscdrn\",\n\tMFFSCDRNI:      \"mffscdrni\",\n\tMFFSCE:         \"mffsce\",\n\tMFFSCRN:        \"mffscrn\",\n\tMFFSCRNI:       \"mffscrni\",\n\tMFFSL:          \"mffsl\",\n\tSLBIAG:         \"slbiag\",\n\tVMSUMUDM:       \"vmsumudm\",\n\tADDPCIS:        \"addpcis\",\n\tBCDCFNCC:       \"bcdcfn.\",\n\tBCDCFSQCC:      \"bcdcfsq.\",\n\tBCDCFZCC:       \"bcdcfz.\",\n\tBCDCPSGNCC:     \"bcdcpsgn.\",\n\tBCDCTNCC:       \"bcdctn.\",\n\tBCDCTSQCC:      \"bcdctsq.\",\n\tBCDCTZCC:       \"bcdctz.\",\n\tBCDSCC:         \"bcds.\",\n\tBCDSETSGNCC:    \"bcdsetsgn.\",\n\tBCDSRCC:        \"bcdsr.\",\n\tBCDTRUNCCC:     \"bcdtrunc.\",\n\tBCDUSCC:        \"bcdus.\",\n\tBCDUTRUNCCC:    \"bcdutrunc.\",\n\tCMPEQB:         \"cmpeqb\",\n\tCMPRB:          \"cmprb\",\n\tCNTTZD:         \"cnttzd\",\n\tCNTTZDCC:       \"cnttzd.\",\n\tCNTTZW:         \"cnttzw\",\n\tCNTTZWCC:       \"cnttzw.\",\n\tCOPY:           \"copy\",\n\tCPABORT:        \"cpabort\",\n\tDARN:           \"darn\",\n\tDTSTSFI:        \"dtstsfi\",\n\tDTSTSFIQ:       \"dtstsfiq\",\n\tEXTSWSLI:       \"extswsli\",\n\tEXTSWSLICC:     \"extswsli.\",\n\tLDAT:           \"ldat\",\n\tLWAT:           \"lwat\",\n\tLXSD:           \"lxsd\",\n\tLXSIBZX:        \"lxsibzx\",\n\tLXSIHZX:        \"lxsihzx\",\n\tLXSSP:          \"lxssp\",\n\tLXV:            \"lxv\",\n\tLXVB16X:        \"lxvb16x\",\n\tLXVH8X:         \"lxvh8x\",\n\tLXVL:           \"lxvl\",\n\tLXVLL:          \"lxvll\",\n\tLXVWSX:         \"lxvwsx\",\n\tLXVX:           \"lxvx\",\n\tMADDHD:         \"maddhd\",\n\tMADDHDU:        \"maddhdu\",\n\tMADDLD:         \"maddld\",\n\tMCRXRX:         \"mcrxrx\",\n\tMFVSRLD:        \"mfvsrld\",\n\tMODSD:          \"modsd\",\n\tMODSW:          \"modsw\",\n\tMODUD:          \"modud\",\n\tMODUW:          \"moduw\",\n\tMSGSYNC:        \"msgsync\",\n\tMTVSRDD:        \"mtvsrdd\",\n\tMTVSRWS:        \"mtvsrws\",\n\tPASTECC:        \"paste.\",\n\tSETB:           \"setb\",\n\tSLBIEG:         \"slbieg\",\n\tSLBSYNC:        \"slbsync\",\n\tSTDAT:          \"stdat\",\n\tSTOP:           \"stop\",\n\tSTWAT:          \"stwat\",\n\tSTXSD:          \"stxsd\",\n\tSTXSIBX:        \"stxsibx\",\n\tSTXSIHX:        \"stxsihx\",\n\tSTXSSP:         \"stxssp\",\n\tSTXV:           \"stxv\",\n\tSTXVB16X:       \"stxvb16x\",\n\tSTXVH8X:        \"stxvh8x\",\n\tSTXVL:          \"stxvl\",\n\tSTXVLL:         \"stxvll\",\n\tSTXVX:          \"stxvx\",\n\tVABSDUB:        \"vabsdub\",\n\tVABSDUH:        \"vabsduh\",\n\tVABSDUW:        \"vabsduw\",\n\tVBPERMD:        \"vbpermd\",\n\tVCLZLSBB:       \"vclzlsbb\",\n\tVCMPNEB:        \"vcmpneb\",\n\tVCMPNEBCC:      \"vcmpneb.\",\n\tVCMPNEH:        \"vcmpneh\",\n\tVCMPNEHCC:      \"vcmpneh.\",\n\tVCMPNEW:        \"vcmpnew\",\n\tVCMPNEWCC:      \"vcmpnew.\",\n\tVCMPNEZB:       \"vcmpnezb\",\n\tVCMPNEZBCC:     \"vcmpnezb.\",\n\tVCMPNEZH:       \"vcmpnezh\",\n\tVCMPNEZHCC:     \"vcmpnezh.\",\n\tVCMPNEZW:       \"vcmpnezw\",\n\tVCMPNEZWCC:     \"vcmpnezw.\",\n\tVCTZB:          \"vctzb\",\n\tVCTZD:          \"vctzd\",\n\tVCTZH:          \"vctzh\",\n\tVCTZLSBB:       \"vctzlsbb\",\n\tVCTZW:          \"vctzw\",\n\tVEXTRACTD:      \"vextractd\",\n\tVEXTRACTUB:     \"vextractub\",\n\tVEXTRACTUH:     \"vextractuh\",\n\tVEXTRACTUW:     \"vextractuw\",\n\tVEXTSB2D:       \"vextsb2d\",\n\tVEXTSB2W:       \"vextsb2w\",\n\tVEXTSH2D:       \"vextsh2d\",\n\tVEXTSH2W:       \"vextsh2w\",\n\tVEXTSW2D:       \"vextsw2d\",\n\tVEXTUBLX:       \"vextublx\",\n\tVEXTUBRX:       \"vextubrx\",\n\tVEXTUHLX:       \"vextuhlx\",\n\tVEXTUHRX:       \"vextuhrx\",\n\tVEXTUWLX:       \"vextuwlx\",\n\tVEXTUWRX:       \"vextuwrx\",\n\tVINSERTB:       \"vinsertb\",\n\tVINSERTD:       \"vinsertd\",\n\tVINSERTH:       \"vinserth\",\n\tVINSERTW:       \"vinsertw\",\n\tVMUL10CUQ:      \"vmul10cuq\",\n\tVMUL10ECUQ:     \"vmul10ecuq\",\n\tVMUL10EUQ:      \"vmul10euq\",\n\tVMUL10UQ:       \"vmul10uq\",\n\tVNEGD:          \"vnegd\",\n\tVNEGW:          \"vnegw\",\n\tVPERMR:         \"vpermr\",\n\tVPRTYBD:        \"vprtybd\",\n\tVPRTYBQ:        \"vprtybq\",\n\tVPRTYBW:        \"vprtybw\",\n\tVRLDMI:         \"vrldmi\",\n\tVRLDNM:         \"vrldnm\",\n\tVRLWMI:         \"vrlwmi\",\n\tVRLWNM:         \"vrlwnm\",\n\tVSLV:           \"vslv\",\n\tVSRV:           \"vsrv\",\n\tWAIT:           \"wait\",\n\tXSABSQP:        \"xsabsqp\",\n\tXSADDQP:        \"xsaddqp\",\n\tXSADDQPO:       \"xsaddqpo\",\n\tXSCMPEQDP:      \"xscmpeqdp\",\n\tXSCMPEXPDP:     \"xscmpexpdp\",\n\tXSCMPEXPQP:     \"xscmpexpqp\",\n\tXSCMPGEDP:      \"xscmpgedp\",\n\tXSCMPGTDP:      \"xscmpgtdp\",\n\tXSCMPOQP:       \"xscmpoqp\",\n\tXSCMPUQP:       \"xscmpuqp\",\n\tXSCPSGNQP:      \"xscpsgnqp\",\n\tXSCVDPHP:       \"xscvdphp\",\n\tXSCVDPQP:       \"xscvdpqp\",\n\tXSCVHPDP:       \"xscvhpdp\",\n\tXSCVQPDP:       \"xscvqpdp\",\n\tXSCVQPDPO:      \"xscvqpdpo\",\n\tXSCVQPSDZ:      \"xscvqpsdz\",\n\tXSCVQPSWZ:      \"xscvqpswz\",\n\tXSCVQPUDZ:      \"xscvqpudz\",\n\tXSCVQPUWZ:      \"xscvqpuwz\",\n\tXSCVSDQP:       \"xscvsdqp\",\n\tXSCVUDQP:       \"xscvudqp\",\n\tXSDIVQP:        \"xsdivqp\",\n\tXSDIVQPO:       \"xsdivqpo\",\n\tXSIEXPDP:       \"xsiexpdp\",\n\tXSIEXPQP:       \"xsiexpqp\",\n\tXSMADDQP:       \"xsmaddqp\",\n\tXSMADDQPO:      \"xsmaddqpo\",\n\tXSMAXCDP:       \"xsmaxcdp\",\n\tXSMAXJDP:       \"xsmaxjdp\",\n\tXSMINCDP:       \"xsmincdp\",\n\tXSMINJDP:       \"xsminjdp\",\n\tXSMSUBQP:       \"xsmsubqp\",\n\tXSMSUBQPO:      \"xsmsubqpo\",\n\tXSMULQP:        \"xsmulqp\",\n\tXSMULQPO:       \"xsmulqpo\",\n\tXSNABSQP:       \"xsnabsqp\",\n\tXSNEGQP:        \"xsnegqp\",\n\tXSNMADDQP:      \"xsnmaddqp\",\n\tXSNMADDQPO:     \"xsnmaddqpo\",\n\tXSNMSUBQP:      \"xsnmsubqp\",\n\tXSNMSUBQPO:     \"xsnmsubqpo\",\n\tXSRQPI:         \"xsrqpi\",\n\tXSRQPIX:        \"xsrqpix\",\n\tXSRQPXP:        \"xsrqpxp\",\n\tXSSQRTQP:       \"xssqrtqp\",\n\tXSSQRTQPO:      \"xssqrtqpo\",\n\tXSSUBQP:        \"xssubqp\",\n\tXSSUBQPO:       \"xssubqpo\",\n\tXSTSTDCDP:      \"xststdcdp\",\n\tXSTSTDCQP:      \"xststdcqp\",\n\tXSTSTDCSP:      \"xststdcsp\",\n\tXSXEXPDP:       \"xsxexpdp\",\n\tXSXEXPQP:       \"xsxexpqp\",\n\tXSXSIGDP:       \"xsxsigdp\",\n\tXSXSIGQP:       \"xsxsigqp\",\n\tXVCVHPSP:       \"xvcvhpsp\",\n\tXVCVSPHP:       \"xvcvsphp\",\n\tXVIEXPDP:       \"xviexpdp\",\n\tXVIEXPSP:       \"xviexpsp\",\n\tXVTSTDCDP:      \"xvtstdcdp\",\n\tXVTSTDCSP:      \"xvtstdcsp\",\n\tXVXEXPDP:       \"xvxexpdp\",\n\tXVXEXPSP:       \"xvxexpsp\",\n\tXVXSIGDP:       \"xvxsigdp\",\n\tXVXSIGSP:       \"xvxsigsp\",\n\tXXBRD:          \"xxbrd\",\n\tXXBRH:          \"xxbrh\",\n\tXXBRQ:          \"xxbrq\",\n\tXXBRW:          \"xxbrw\",\n\tXXEXTRACTUW:    \"xxextractuw\",\n\tXXINSERTW:      \"xxinsertw\",\n\tXXPERM:         \"xxperm\",\n\tXXPERMR:        \"xxpermr\",\n\tXXSPLTIB:       \"xxspltib\",\n\tBCDADDCC:       \"bcdadd.\",\n\tBCDSUBCC:       \"bcdsub.\",\n\tBCTAR:          \"bctar\",\n\tBCTARL:         \"bctarl\",\n\tCLRBHRB:        \"clrbhrb\",\n\tFMRGEW:         \"fmrgew\",\n\tFMRGOW:         \"fmrgow\",\n\tICBT:           \"icbt\",\n\tLQARX:          \"lqarx\",\n\tLXSIWAX:        \"lxsiwax\",\n\tLXSIWZX:        \"lxsiwzx\",\n\tLXSSPX:         \"lxsspx\",\n\tMFBHRBE:        \"mfbhrbe\",\n\tMFVSRD:         \"mfvsrd\",\n\tMFVSRWZ:        \"mfvsrwz\",\n\tMSGCLR:         \"msgclr\",\n\tMSGCLRP:        \"msgclrp\",\n\tMSGSND:         \"msgsnd\",\n\tMSGSNDP:        \"msgsndp\",\n\tMTVSRD:         \"mtvsrd\",\n\tMTVSRWA:        \"mtvsrwa\",\n\tMTVSRWZ:        \"mtvsrwz\",\n\tRFEBB:          \"rfebb\",\n\tSTQCXCC:        \"stqcx.\",\n\tSTXSIWX:        \"stxsiwx\",\n\tSTXSSPX:        \"stxsspx\",\n\tVADDCUQ:        \"vaddcuq\",\n\tVADDECUQ:       \"vaddecuq\",\n\tVADDEUQM:       \"vaddeuqm\",\n\tVADDUDM:        \"vaddudm\",\n\tVADDUQM:        \"vadduqm\",\n\tVBPERMQ:        \"vbpermq\",\n\tVCIPHER:        \"vcipher\",\n\tVCIPHERLAST:    \"vcipherlast\",\n\tVCLZB:          \"vclzb\",\n\tVCLZD:          \"vclzd\",\n\tVCLZH:          \"vclzh\",\n\tVCLZW:          \"vclzw\",\n\tVCMPEQUD:       \"vcmpequd\",\n\tVCMPEQUDCC:     \"vcmpequd.\",\n\tVCMPGTSD:       \"vcmpgtsd\",\n\tVCMPGTSDCC:     \"vcmpgtsd.\",\n\tVCMPGTUD:       \"vcmpgtud\",\n\tVCMPGTUDCC:     \"vcmpgtud.\",\n\tVEQV:           \"veqv\",\n\tVGBBD:          \"vgbbd\",\n\tVMAXSD:         \"vmaxsd\",\n\tVMAXUD:         \"vmaxud\",\n\tVMINSD:         \"vminsd\",\n\tVMINUD:         \"vminud\",\n\tVMRGEW:         \"vmrgew\",\n\tVMRGOW:         \"vmrgow\",\n\tVMULESW:        \"vmulesw\",\n\tVMULEUW:        \"vmuleuw\",\n\tVMULOSW:        \"vmulosw\",\n\tVMULOUW:        \"vmulouw\",\n\tVMULUWM:        \"vmuluwm\",\n\tVNAND:          \"vnand\",\n\tVNCIPHER:       \"vncipher\",\n\tVNCIPHERLAST:   \"vncipherlast\",\n\tVORC:           \"vorc\",\n\tVPERMXOR:       \"vpermxor\",\n\tVPKSDSS:        \"vpksdss\",\n\tVPKSDUS:        \"vpksdus\",\n\tVPKUDUM:        \"vpkudum\",\n\tVPKUDUS:        \"vpkudus\",\n\tVPMSUMB:        \"vpmsumb\",\n\tVPMSUMD:        \"vpmsumd\",\n\tVPMSUMH:        \"vpmsumh\",\n\tVPMSUMW:        \"vpmsumw\",\n\tVPOPCNTB:       \"vpopcntb\",\n\tVPOPCNTD:       \"vpopcntd\",\n\tVPOPCNTH:       \"vpopcnth\",\n\tVPOPCNTW:       \"vpopcntw\",\n\tVRLD:           \"vrld\",\n\tVSBOX:          \"vsbox\",\n\tVSHASIGMAD:     \"vshasigmad\",\n\tVSHASIGMAW:     \"vshasigmaw\",\n\tVSLD:           \"vsld\",\n\tVSRAD:          \"vsrad\",\n\tVSRD:           \"vsrd\",\n\tVSUBCUQ:        \"vsubcuq\",\n\tVSUBECUQ:       \"vsubecuq\",\n\tVSUBEUQM:       \"vsubeuqm\",\n\tVSUBUDM:        \"vsubudm\",\n\tVSUBUQM:        \"vsubuqm\",\n\tVUPKHSW:        \"vupkhsw\",\n\tVUPKLSW:        \"vupklsw\",\n\tXSADDSP:        \"xsaddsp\",\n\tXSCVDPSPN:      \"xscvdpspn\",\n\tXSCVSPDPN:      \"xscvspdpn\",\n\tXSCVSXDSP:      \"xscvsxdsp\",\n\tXSCVUXDSP:      \"xscvuxdsp\",\n\tXSDIVSP:        \"xsdivsp\",\n\tXSMADDASP:      \"xsmaddasp\",\n\tXSMADDMSP:      \"xsmaddmsp\",\n\tXSMSUBASP:      \"xsmsubasp\",\n\tXSMSUBMSP:      \"xsmsubmsp\",\n\tXSMULSP:        \"xsmulsp\",\n\tXSNMADDASP:     \"xsnmaddasp\",\n\tXSNMADDMSP:     \"xsnmaddmsp\",\n\tXSNMSUBASP:     \"xsnmsubasp\",\n\tXSNMSUBMSP:     \"xsnmsubmsp\",\n\tXSRESP:         \"xsresp\",\n\tXSRSP:          \"xsrsp\",\n\tXSRSQRTESP:     \"xsrsqrtesp\",\n\tXSSQRTSP:       \"xssqrtsp\",\n\tXSSUBSP:        \"xssubsp\",\n\tXXLEQV:         \"xxleqv\",\n\tXXLNAND:        \"xxlnand\",\n\tXXLORC:         \"xxlorc\",\n\tADDG6S:         \"addg6s\",\n\tBPERMD:         \"bpermd\",\n\tCBCDTD:         \"cbcdtd\",\n\tCDTBCD:         \"cdtbcd\",\n\tDCFFIX:         \"dcffix\",\n\tDCFFIXCC:       \"dcffix.\",\n\tDIVDE:          \"divde\",\n\tDIVDECC:        \"divde.\",\n\tDIVDEO:         \"divdeo\",\n\tDIVDEOCC:       \"divdeo.\",\n\tDIVDEU:         \"divdeu\",\n\tDIVDEUCC:       \"divdeu.\",\n\tDIVDEUO:        \"divdeuo\",\n\tDIVDEUOCC:      \"divdeuo.\",\n\tDIVWE:          \"divwe\",\n\tDIVWECC:        \"divwe.\",\n\tDIVWEO:         \"divweo\",\n\tDIVWEOCC:       \"divweo.\",\n\tDIVWEU:         \"divweu\",\n\tDIVWEUCC:       \"divweu.\",\n\tDIVWEUO:        \"divweuo\",\n\tDIVWEUOCC:      \"divweuo.\",\n\tFCFIDS:         \"fcfids\",\n\tFCFIDSCC:       \"fcfids.\",\n\tFCFIDU:         \"fcfidu\",\n\tFCFIDUCC:       \"fcfidu.\",\n\tFCFIDUS:        \"fcfidus\",\n\tFCFIDUSCC:      \"fcfidus.\",\n\tFCTIDU:         \"fctidu\",\n\tFCTIDUCC:       \"fctidu.\",\n\tFCTIDUZ:        \"fctiduz\",\n\tFCTIDUZCC:      \"fctiduz.\",\n\tFCTIWU:         \"fctiwu\",\n\tFCTIWUCC:       \"fctiwu.\",\n\tFCTIWUZ:        \"fctiwuz\",\n\tFCTIWUZCC:      \"fctiwuz.\",\n\tFTDIV:          \"ftdiv\",\n\tFTSQRT:         \"ftsqrt\",\n\tLBARX:          \"lbarx\",\n\tLDBRX:          \"ldbrx\",\n\tLFIWZX:         \"lfiwzx\",\n\tLHARX:          \"lharx\",\n\tLXSDX:          \"lxsdx\",\n\tLXVD2X:         \"lxvd2x\",\n\tLXVDSX:         \"lxvdsx\",\n\tLXVW4X:         \"lxvw4x\",\n\tPOPCNTD:        \"popcntd\",\n\tPOPCNTW:        \"popcntw\",\n\tSTBCXCC:        \"stbcx.\",\n\tSTDBRX:         \"stdbrx\",\n\tSTHCXCC:        \"sthcx.\",\n\tSTXSDX:         \"stxsdx\",\n\tSTXVD2X:        \"stxvd2x\",\n\tSTXVW4X:        \"stxvw4x\",\n\tXSABSDP:        \"xsabsdp\",\n\tXSADDDP:        \"xsadddp\",\n\tXSCMPODP:       \"xscmpodp\",\n\tXSCMPUDP:       \"xscmpudp\",\n\tXSCPSGNDP:      \"xscpsgndp\",\n\tXSCVDPSP:       \"xscvdpsp\",\n\tXSCVDPSXDS:     \"xscvdpsxds\",\n\tXSCVDPSXWS:     \"xscvdpsxws\",\n\tXSCVDPUXDS:     \"xscvdpuxds\",\n\tXSCVDPUXWS:     \"xscvdpuxws\",\n\tXSCVSPDP:       \"xscvspdp\",\n\tXSCVSXDDP:      \"xscvsxddp\",\n\tXSCVUXDDP:      \"xscvuxddp\",\n\tXSDIVDP:        \"xsdivdp\",\n\tXSMADDADP:      \"xsmaddadp\",\n\tXSMADDMDP:      \"xsmaddmdp\",\n\tXSMAXDP:        \"xsmaxdp\",\n\tXSMINDP:        \"xsmindp\",\n\tXSMSUBADP:      \"xsmsubadp\",\n\tXSMSUBMDP:      \"xsmsubmdp\",\n\tXSMULDP:        \"xsmuldp\",\n\tXSNABSDP:       \"xsnabsdp\",\n\tXSNEGDP:        \"xsnegdp\",\n\tXSNMADDADP:     \"xsnmaddadp\",\n\tXSNMADDMDP:     \"xsnmaddmdp\",\n\tXSNMSUBADP:     \"xsnmsubadp\",\n\tXSNMSUBMDP:     \"xsnmsubmdp\",\n\tXSRDPI:         \"xsrdpi\",\n\tXSRDPIC:        \"xsrdpic\",\n\tXSRDPIM:        \"xsrdpim\",\n\tXSRDPIP:        \"xsrdpip\",\n\tXSRDPIZ:        \"xsrdpiz\",\n\tXSREDP:         \"xsredp\",\n\tXSRSQRTEDP:     \"xsrsqrtedp\",\n\tXSSQRTDP:       \"xssqrtdp\",\n\tXSSUBDP:        \"xssubdp\",\n\tXSTDIVDP:       \"xstdivdp\",\n\tXSTSQRTDP:      \"xstsqrtdp\",\n\tXVABSDP:        \"xvabsdp\",\n\tXVABSSP:        \"xvabssp\",\n\tXVADDDP:        \"xvadddp\",\n\tXVADDSP:        \"xvaddsp\",\n\tXVCMPEQDP:      \"xvcmpeqdp\",\n\tXVCMPEQDPCC:    \"xvcmpeqdp.\",\n\tXVCMPEQSP:      \"xvcmpeqsp\",\n\tXVCMPEQSPCC:    \"xvcmpeqsp.\",\n\tXVCMPGEDP:      \"xvcmpgedp\",\n\tXVCMPGEDPCC:    \"xvcmpgedp.\",\n\tXVCMPGESP:      \"xvcmpgesp\",\n\tXVCMPGESPCC:    \"xvcmpgesp.\",\n\tXVCMPGTDP:      \"xvcmpgtdp\",\n\tXVCMPGTDPCC:    \"xvcmpgtdp.\",\n\tXVCMPGTSP:      \"xvcmpgtsp\",\n\tXVCMPGTSPCC:    \"xvcmpgtsp.\",\n\tXVCPSGNDP:      \"xvcpsgndp\",\n\tXVCPSGNSP:      \"xvcpsgnsp\",\n\tXVCVDPSP:       \"xvcvdpsp\",\n\tXVCVDPSXDS:     \"xvcvdpsxds\",\n\tXVCVDPSXWS:     \"xvcvdpsxws\",\n\tXVCVDPUXDS:     \"xvcvdpuxds\",\n\tXVCVDPUXWS:     \"xvcvdpuxws\",\n\tXVCVSPDP:       \"xvcvspdp\",\n\tXVCVSPSXDS:     \"xvcvspsxds\",\n\tXVCVSPSXWS:     \"xvcvspsxws\",\n\tXVCVSPUXDS:     \"xvcvspuxds\",\n\tXVCVSPUXWS:     \"xvcvspuxws\",\n\tXVCVSXDDP:      \"xvcvsxddp\",\n\tXVCVSXDSP:      \"xvcvsxdsp\",\n\tXVCVSXWDP:      \"xvcvsxwdp\",\n\tXVCVSXWSP:      \"xvcvsxwsp\",\n\tXVCVUXDDP:      \"xvcvuxddp\",\n\tXVCVUXDSP:      \"xvcvuxdsp\",\n\tXVCVUXWDP:      \"xvcvuxwdp\",\n\tXVCVUXWSP:      \"xvcvuxwsp\",\n\tXVDIVDP:        \"xvdivdp\",\n\tXVDIVSP:        \"xvdivsp\",\n\tXVMADDADP:      \"xvmaddadp\",\n\tXVMADDASP:      \"xvmaddasp\",\n\tXVMADDMDP:      \"xvmaddmdp\",\n\tXVMADDMSP:      \"xvmaddmsp\",\n\tXVMAXDP:        \"xvmaxdp\",\n\tXVMAXSP:        \"xvmaxsp\",\n\tXVMINDP:        \"xvmindp\",\n\tXVMINSP:        \"xvminsp\",\n\tXVMSUBADP:      \"xvmsubadp\",\n\tXVMSUBASP:      \"xvmsubasp\",\n\tXVMSUBMDP:      \"xvmsubmdp\",\n\tXVMSUBMSP:      \"xvmsubmsp\",\n\tXVMULDP:        \"xvmuldp\",\n\tXVMULSP:        \"xvmulsp\",\n\tXVNABSDP:       \"xvnabsdp\",\n\tXVNABSSP:       \"xvnabssp\",\n\tXVNEGDP:        \"xvnegdp\",\n\tXVNEGSP:        \"xvnegsp\",\n\tXVNMADDADP:     \"xvnmaddadp\",\n\tXVNMADDASP:     \"xvnmaddasp\",\n\tXVNMADDMDP:     \"xvnmaddmdp\",\n\tXVNMADDMSP:     \"xvnmaddmsp\",\n\tXVNMSUBADP:     \"xvnmsubadp\",\n\tXVNMSUBASP:     \"xvnmsubasp\",\n\tXVNMSUBMDP:     \"xvnmsubmdp\",\n\tXVNMSUBMSP:     \"xvnmsubmsp\",\n\tXVRDPI:         \"xvrdpi\",\n\tXVRDPIC:        \"xvrdpic\",\n\tXVRDPIM:        \"xvrdpim\",\n\tXVRDPIP:        \"xvrdpip\",\n\tXVRDPIZ:        \"xvrdpiz\",\n\tXVREDP:         \"xvredp\",\n\tXVRESP:         \"xvresp\",\n\tXVRSPI:         \"xvrspi\",\n\tXVRSPIC:        \"xvrspic\",\n\tXVRSPIM:        \"xvrspim\",\n\tXVRSPIP:        \"xvrspip\",\n\tXVRSPIZ:        \"xvrspiz\",\n\tXVRSQRTEDP:     \"xvrsqrtedp\",\n\tXVRSQRTESP:     \"xvrsqrtesp\",\n\tXVSQRTDP:       \"xvsqrtdp\",\n\tXVSQRTSP:       \"xvsqrtsp\",\n\tXVSUBDP:        \"xvsubdp\",\n\tXVSUBSP:        \"xvsubsp\",\n\tXVTDIVDP:       \"xvtdivdp\",\n\tXVTDIVSP:       \"xvtdivsp\",\n\tXVTSQRTDP:      \"xvtsqrtdp\",\n\tXVTSQRTSP:      \"xvtsqrtsp\",\n\tXXLAND:         \"xxland\",\n\tXXLANDC:        \"xxlandc\",\n\tXXLNOR:         \"xxlnor\",\n\tXXLOR:          \"xxlor\",\n\tXXLXOR:         \"xxlxor\",\n\tXXMRGHW:        \"xxmrghw\",\n\tXXMRGLW:        \"xxmrglw\",\n\tXXPERMDI:       \"xxpermdi\",\n\tXXSEL:          \"xxsel\",\n\tXXSLDWI:        \"xxsldwi\",\n\tXXSPLTW:        \"xxspltw\",\n\tCMPB:           \"cmpb\",\n\tDADD:           \"dadd\",\n\tDADDCC:         \"dadd.\",\n\tDADDQ:          \"daddq\",\n\tDADDQCC:        \"daddq.\",\n\tDCFFIXQ:        \"dcffixq\",\n\tDCFFIXQCC:      \"dcffixq.\",\n\tDCMPO:          \"dcmpo\",\n\tDCMPOQ:         \"dcmpoq\",\n\tDCMPU:          \"dcmpu\",\n\tDCMPUQ:         \"dcmpuq\",\n\tDCTDP:          \"dctdp\",\n\tDCTDPCC:        \"dctdp.\",\n\tDCTFIX:         \"dctfix\",\n\tDCTFIXCC:       \"dctfix.\",\n\tDCTFIXQ:        \"dctfixq\",\n\tDCTFIXQCC:      \"dctfixq.\",\n\tDCTQPQ:         \"dctqpq\",\n\tDCTQPQCC:       \"dctqpq.\",\n\tDDEDPD:         \"ddedpd\",\n\tDDEDPDCC:       \"ddedpd.\",\n\tDDEDPDQ:        \"ddedpdq\",\n\tDDEDPDQCC:      \"ddedpdq.\",\n\tDDIV:           \"ddiv\",\n\tDDIVCC:         \"ddiv.\",\n\tDDIVQ:          \"ddivq\",\n\tDDIVQCC:        \"ddivq.\",\n\tDENBCD:         \"denbcd\",\n\tDENBCDCC:       \"denbcd.\",\n\tDENBCDQ:        \"denbcdq\",\n\tDENBCDQCC:      \"denbcdq.\",\n\tDIEX:           \"diex\",\n\tDIEXCC:         \"diex.\",\n\tDIEXQCC:        \"diexq.\",\n\tDIEXQ:          \"diexq\",\n\tDMUL:           \"dmul\",\n\tDMULCC:         \"dmul.\",\n\tDMULQ:          \"dmulq\",\n\tDMULQCC:        \"dmulq.\",\n\tDQUA:           \"dqua\",\n\tDQUACC:         \"dqua.\",\n\tDQUAI:          \"dquai\",\n\tDQUAICC:        \"dquai.\",\n\tDQUAIQ:         \"dquaiq\",\n\tDQUAIQCC:       \"dquaiq.\",\n\tDQUAQ:          \"dquaq\",\n\tDQUAQCC:        \"dquaq.\",\n\tDRDPQ:          \"drdpq\",\n\tDRDPQCC:        \"drdpq.\",\n\tDRINTN:         \"drintn\",\n\tDRINTNCC:       \"drintn.\",\n\tDRINTNQ:        \"drintnq\",\n\tDRINTNQCC:      \"drintnq.\",\n\tDRINTX:         \"drintx\",\n\tDRINTXCC:       \"drintx.\",\n\tDRINTXQ:        \"drintxq\",\n\tDRINTXQCC:      \"drintxq.\",\n\tDRRND:          \"drrnd\",\n\tDRRNDCC:        \"drrnd.\",\n\tDRRNDQ:         \"drrndq\",\n\tDRRNDQCC:       \"drrndq.\",\n\tDRSP:           \"drsp\",\n\tDRSPCC:         \"drsp.\",\n\tDSCLI:          \"dscli\",\n\tDSCLICC:        \"dscli.\",\n\tDSCLIQ:         \"dscliq\",\n\tDSCLIQCC:       \"dscliq.\",\n\tDSCRI:          \"dscri\",\n\tDSCRICC:        \"dscri.\",\n\tDSCRIQ:         \"dscriq\",\n\tDSCRIQCC:       \"dscriq.\",\n\tDSUB:           \"dsub\",\n\tDSUBCC:         \"dsub.\",\n\tDSUBQ:          \"dsubq\",\n\tDSUBQCC:        \"dsubq.\",\n\tDTSTDC:         \"dtstdc\",\n\tDTSTDCQ:        \"dtstdcq\",\n\tDTSTDG:         \"dtstdg\",\n\tDTSTDGQ:        \"dtstdgq\",\n\tDTSTEX:         \"dtstex\",\n\tDTSTEXQ:        \"dtstexq\",\n\tDTSTSF:         \"dtstsf\",\n\tDTSTSFQ:        \"dtstsfq\",\n\tDXEX:           \"dxex\",\n\tDXEXCC:         \"dxex.\",\n\tDXEXQ:          \"dxexq\",\n\tDXEXQCC:        \"dxexq.\",\n\tFCPSGN:         \"fcpsgn\",\n\tFCPSGNCC:       \"fcpsgn.\",\n\tLBZCIX:         \"lbzcix\",\n\tLDCIX:          \"ldcix\",\n\tLFDP:           \"lfdp\",\n\tLFDPX:          \"lfdpx\",\n\tLFIWAX:         \"lfiwax\",\n\tLHZCIX:         \"lhzcix\",\n\tLWZCIX:         \"lwzcix\",\n\tPRTYD:          \"prtyd\",\n\tPRTYW:          \"prtyw\",\n\tSLBFEECC:       \"slbfee.\",\n\tSTBCIX:         \"stbcix\",\n\tSTDCIX:         \"stdcix\",\n\tSTFDP:          \"stfdp\",\n\tSTFDPX:         \"stfdpx\",\n\tSTHCIX:         \"sthcix\",\n\tSTWCIX:         \"stwcix\",\n\tISEL:           \"isel\",\n\tLVEBX:          \"lvebx\",\n\tLVEHX:          \"lvehx\",\n\tLVEWX:          \"lvewx\",\n\tLVSL:           \"lvsl\",\n\tLVSR:           \"lvsr\",\n\tLVX:            \"lvx\",\n\tLVXL:           \"lvxl\",\n\tMFVSCR:         \"mfvscr\",\n\tMTVSCR:         \"mtvscr\",\n\tSTVEBX:         \"stvebx\",\n\tSTVEHX:         \"stvehx\",\n\tSTVEWX:         \"stvewx\",\n\tSTVX:           \"stvx\",\n\tSTVXL:          \"stvxl\",\n\tTLBIEL:         \"tlbiel\",\n\tVADDCUW:        \"vaddcuw\",\n\tVADDFP:         \"vaddfp\",\n\tVADDSBS:        \"vaddsbs\",\n\tVADDSHS:        \"vaddshs\",\n\tVADDSWS:        \"vaddsws\",\n\tVADDUBM:        \"vaddubm\",\n\tVADDUBS:        \"vaddubs\",\n\tVADDUHM:        \"vadduhm\",\n\tVADDUHS:        \"vadduhs\",\n\tVADDUWM:        \"vadduwm\",\n\tVADDUWS:        \"vadduws\",\n\tVAND:           \"vand\",\n\tVANDC:          \"vandc\",\n\tVAVGSB:         \"vavgsb\",\n\tVAVGSH:         \"vavgsh\",\n\tVAVGSW:         \"vavgsw\",\n\tVAVGUB:         \"vavgub\",\n\tVAVGUH:         \"vavguh\",\n\tVAVGUW:         \"vavguw\",\n\tVCFSX:          \"vcfsx\",\n\tVCFUX:          \"vcfux\",\n\tVCMPBFP:        \"vcmpbfp\",\n\tVCMPBFPCC:      \"vcmpbfp.\",\n\tVCMPEQFP:       \"vcmpeqfp\",\n\tVCMPEQFPCC:     \"vcmpeqfp.\",\n\tVCMPEQUB:       \"vcmpequb\",\n\tVCMPEQUBCC:     \"vcmpequb.\",\n\tVCMPEQUH:       \"vcmpequh\",\n\tVCMPEQUHCC:     \"vcmpequh.\",\n\tVCMPEQUW:       \"vcmpequw\",\n\tVCMPEQUWCC:     \"vcmpequw.\",\n\tVCMPGEFP:       \"vcmpgefp\",\n\tVCMPGEFPCC:     \"vcmpgefp.\",\n\tVCMPGTFP:       \"vcmpgtfp\",\n\tVCMPGTFPCC:     \"vcmpgtfp.\",\n\tVCMPGTSB:       \"vcmpgtsb\",\n\tVCMPGTSBCC:     \"vcmpgtsb.\",\n\tVCMPGTSH:       \"vcmpgtsh\",\n\tVCMPGTSHCC:     \"vcmpgtsh.\",\n\tVCMPGTSW:       \"vcmpgtsw\",\n\tVCMPGTSWCC:     \"vcmpgtsw.\",\n\tVCMPGTUB:       \"vcmpgtub\",\n\tVCMPGTUBCC:     \"vcmpgtub.\",\n\tVCMPGTUH:       \"vcmpgtuh\",\n\tVCMPGTUHCC:     \"vcmpgtuh.\",\n\tVCMPGTUW:       \"vcmpgtuw\",\n\tVCMPGTUWCC:     \"vcmpgtuw.\",\n\tVCTSXS:         \"vctsxs\",\n\tVCTUXS:         \"vctuxs\",\n\tVEXPTEFP:       \"vexptefp\",\n\tVLOGEFP:        \"vlogefp\",\n\tVMADDFP:        \"vmaddfp\",\n\tVMAXFP:         \"vmaxfp\",\n\tVMAXSB:         \"vmaxsb\",\n\tVMAXSH:         \"vmaxsh\",\n\tVMAXSW:         \"vmaxsw\",\n\tVMAXUB:         \"vmaxub\",\n\tVMAXUH:         \"vmaxuh\",\n\tVMAXUW:         \"vmaxuw\",\n\tVMHADDSHS:      \"vmhaddshs\",\n\tVMHRADDSHS:     \"vmhraddshs\",\n\tVMINFP:         \"vminfp\",\n\tVMINSB:         \"vminsb\",\n\tVMINSH:         \"vminsh\",\n\tVMINSW:         \"vminsw\",\n\tVMINUB:         \"vminub\",\n\tVMINUH:         \"vminuh\",\n\tVMINUW:         \"vminuw\",\n\tVMLADDUHM:      \"vmladduhm\",\n\tVMRGHB:         \"vmrghb\",\n\tVMRGHH:         \"vmrghh\",\n\tVMRGHW:         \"vmrghw\",\n\tVMRGLB:         \"vmrglb\",\n\tVMRGLH:         \"vmrglh\",\n\tVMRGLW:         \"vmrglw\",\n\tVMSUMMBM:       \"vmsummbm\",\n\tVMSUMSHM:       \"vmsumshm\",\n\tVMSUMSHS:       \"vmsumshs\",\n\tVMSUMUBM:       \"vmsumubm\",\n\tVMSUMUHM:       \"vmsumuhm\",\n\tVMSUMUHS:       \"vmsumuhs\",\n\tVMULESB:        \"vmulesb\",\n\tVMULESH:        \"vmulesh\",\n\tVMULEUB:        \"vmuleub\",\n\tVMULEUH:        \"vmuleuh\",\n\tVMULOSB:        \"vmulosb\",\n\tVMULOSH:        \"vmulosh\",\n\tVMULOUB:        \"vmuloub\",\n\tVMULOUH:        \"vmulouh\",\n\tVNMSUBFP:       \"vnmsubfp\",\n\tVNOR:           \"vnor\",\n\tVOR:            \"vor\",\n\tVPERM:          \"vperm\",\n\tVPKPX:          \"vpkpx\",\n\tVPKSHSS:        \"vpkshss\",\n\tVPKSHUS:        \"vpkshus\",\n\tVPKSWSS:        \"vpkswss\",\n\tVPKSWUS:        \"vpkswus\",\n\tVPKUHUM:        \"vpkuhum\",\n\tVPKUHUS:        \"vpkuhus\",\n\tVPKUWUM:        \"vpkuwum\",\n\tVPKUWUS:        \"vpkuwus\",\n\tVREFP:          \"vrefp\",\n\tVRFIM:          \"vrfim\",\n\tVRFIN:          \"vrfin\",\n\tVRFIP:          \"vrfip\",\n\tVRFIZ:          \"vrfiz\",\n\tVRLB:           \"vrlb\",\n\tVRLH:           \"vrlh\",\n\tVRLW:           \"vrlw\",\n\tVRSQRTEFP:      \"vrsqrtefp\",\n\tVSEL:           \"vsel\",\n\tVSL:            \"vsl\",\n\tVSLB:           \"vslb\",\n\tVSLDOI:         \"vsldoi\",\n\tVSLH:           \"vslh\",\n\tVSLO:           \"vslo\",\n\tVSLW:           \"vslw\",\n\tVSPLTB:         \"vspltb\",\n\tVSPLTH:         \"vsplth\",\n\tVSPLTISB:       \"vspltisb\",\n\tVSPLTISH:       \"vspltish\",\n\tVSPLTISW:       \"vspltisw\",\n\tVSPLTW:         \"vspltw\",\n\tVSR:            \"vsr\",\n\tVSRAB:          \"vsrab\",\n\tVSRAH:          \"vsrah\",\n\tVSRAW:          \"vsraw\",\n\tVSRB:           \"vsrb\",\n\tVSRH:           \"vsrh\",\n\tVSRO:           \"vsro\",\n\tVSRW:           \"vsrw\",\n\tVSUBCUW:        \"vsubcuw\",\n\tVSUBFP:         \"vsubfp\",\n\tVSUBSBS:        \"vsubsbs\",\n\tVSUBSHS:        \"vsubshs\",\n\tVSUBSWS:        \"vsubsws\",\n\tVSUBUBM:        \"vsububm\",\n\tVSUBUBS:        \"vsububs\",\n\tVSUBUHM:        \"vsubuhm\",\n\tVSUBUHS:        \"vsubuhs\",\n\tVSUBUWM:        \"vsubuwm\",\n\tVSUBUWS:        \"vsubuws\",\n\tVSUM2SWS:       \"vsum2sws\",\n\tVSUM4SBS:       \"vsum4sbs\",\n\tVSUM4SHS:       \"vsum4shs\",\n\tVSUM4UBS:       \"vsum4ubs\",\n\tVSUMSWS:        \"vsumsws\",\n\tVUPKHPX:        \"vupkhpx\",\n\tVUPKHSB:        \"vupkhsb\",\n\tVUPKHSH:        \"vupkhsh\",\n\tVUPKLPX:        \"vupklpx\",\n\tVUPKLSB:        \"vupklsb\",\n\tVUPKLSH:        \"vupklsh\",\n\tVXOR:           \"vxor\",\n\tFRE:            \"fre\",\n\tFRECC:          \"fre.\",\n\tFRIM:           \"frim\",\n\tFRIMCC:         \"frim.\",\n\tFRIN:           \"frin\",\n\tFRINCC:         \"frin.\",\n\tFRIP:           \"frip\",\n\tFRIPCC:         \"frip.\",\n\tFRIZ:           \"friz\",\n\tFRIZCC:         \"friz.\",\n\tFRSQRTES:       \"frsqrtes\",\n\tFRSQRTESCC:     \"frsqrtes.\",\n\tHRFID:          \"hrfid\",\n\tPOPCNTB:        \"popcntb\",\n\tMFOCRF:         \"mfocrf\",\n\tMTOCRF:         \"mtocrf\",\n\tSLBMFEE:        \"slbmfee\",\n\tSLBMFEV:        \"slbmfev\",\n\tSLBMTE:         \"slbmte\",\n\tRFSCV:          \"rfscv\",\n\tSCV:            \"scv\",\n\tLQ:             \"lq\",\n\tSTQ:            \"stq\",\n\tCNTLZD:         \"cntlzd\",\n\tCNTLZDCC:       \"cntlzd.\",\n\tDCBF:           \"dcbf\",\n\tDCBST:          \"dcbst\",\n\tDCBT:           \"dcbt\",\n\tDCBTST:         \"dcbtst\",\n\tDIVD:           \"divd\",\n\tDIVDCC:         \"divd.\",\n\tDIVDO:          \"divdo\",\n\tDIVDOCC:        \"divdo.\",\n\tDIVDU:          \"divdu\",\n\tDIVDUCC:        \"divdu.\",\n\tDIVDUO:         \"divduo\",\n\tDIVDUOCC:       \"divduo.\",\n\tDIVW:           \"divw\",\n\tDIVWCC:         \"divw.\",\n\tDIVWO:          \"divwo\",\n\tDIVWOCC:        \"divwo.\",\n\tDIVWU:          \"divwu\",\n\tDIVWUCC:        \"divwu.\",\n\tDIVWUO:         \"divwuo\",\n\tDIVWUOCC:       \"divwuo.\",\n\tEIEIO:          \"eieio\",\n\tEXTSB:          \"extsb\",\n\tEXTSBCC:        \"extsb.\",\n\tEXTSW:          \"extsw\",\n\tEXTSWCC:        \"extsw.\",\n\tFADDS:          \"fadds\",\n\tFADDSCC:        \"fadds.\",\n\tFCFID:          \"fcfid\",\n\tFCFIDCC:        \"fcfid.\",\n\tFCTID:          \"fctid\",\n\tFCTIDCC:        \"fctid.\",\n\tFCTIDZ:         \"fctidz\",\n\tFCTIDZCC:       \"fctidz.\",\n\tFDIVS:          \"fdivs\",\n\tFDIVSCC:        \"fdivs.\",\n\tFMADDS:         \"fmadds\",\n\tFMADDSCC:       \"fmadds.\",\n\tFMSUBS:         \"fmsubs\",\n\tFMSUBSCC:       \"fmsubs.\",\n\tFMULS:          \"fmuls\",\n\tFMULSCC:        \"fmuls.\",\n\tFNMADDS:        \"fnmadds\",\n\tFNMADDSCC:      \"fnmadds.\",\n\tFNMSUBS:        \"fnmsubs\",\n\tFNMSUBSCC:      \"fnmsubs.\",\n\tFRES:           \"fres\",\n\tFRESCC:         \"fres.\",\n\tFRSQRTE:        \"frsqrte\",\n\tFRSQRTECC:      \"frsqrte.\",\n\tFSEL:           \"fsel\",\n\tFSELCC:         \"fsel.\",\n\tFSQRTS:         \"fsqrts\",\n\tFSQRTSCC:       \"fsqrts.\",\n\tFSUBS:          \"fsubs\",\n\tFSUBSCC:        \"fsubs.\",\n\tICBI:           \"icbi\",\n\tLD:             \"ld\",\n\tLDARX:          \"ldarx\",\n\tLDU:            \"ldu\",\n\tLDUX:           \"ldux\",\n\tLDX:            \"ldx\",\n\tLWA:            \"lwa\",\n\tLWARX:          \"lwarx\",\n\tLWAUX:          \"lwaux\",\n\tLWAX:           \"lwax\",\n\tMFTB:           \"mftb\",\n\tMTMSRD:         \"mtmsrd\",\n\tMULHD:          \"mulhd\",\n\tMULHDCC:        \"mulhd.\",\n\tMULHDU:         \"mulhdu\",\n\tMULHDUCC:       \"mulhdu.\",\n\tMULHW:          \"mulhw\",\n\tMULHWCC:        \"mulhw.\",\n\tMULHWU:         \"mulhwu\",\n\tMULHWUCC:       \"mulhwu.\",\n\tMULLD:          \"mulld\",\n\tMULLDCC:        \"mulld.\",\n\tMULLDO:         \"mulldo\",\n\tMULLDOCC:       \"mulldo.\",\n\tRFID:           \"rfid\",\n\tRLDCL:          \"rldcl\",\n\tRLDCLCC:        \"rldcl.\",\n\tRLDCR:          \"rldcr\",\n\tRLDCRCC:        \"rldcr.\",\n\tRLDIC:          \"rldic\",\n\tRLDICCC:        \"rldic.\",\n\tRLDICL:         \"rldicl\",\n\tRLDICLCC:       \"rldicl.\",\n\tRLDICR:         \"rldicr\",\n\tRLDICRCC:       \"rldicr.\",\n\tRLDIMI:         \"rldimi\",\n\tRLDIMICC:       \"rldimi.\",\n\tSC:             \"sc\",\n\tSLBIA:          \"slbia\",\n\tSLBIE:          \"slbie\",\n\tSLD:            \"sld\",\n\tSLDCC:          \"sld.\",\n\tSRAD:           \"srad\",\n\tSRADCC:         \"srad.\",\n\tSRADI:          \"sradi\",\n\tSRADICC:        \"sradi.\",\n\tSRD:            \"srd\",\n\tSRDCC:          \"srd.\",\n\tSTD:            \"std\",\n\tSTDCXCC:        \"stdcx.\",\n\tSTDU:           \"stdu\",\n\tSTDUX:          \"stdux\",\n\tSTDX:           \"stdx\",\n\tSTFIWX:         \"stfiwx\",\n\tSTWCXCC:        \"stwcx.\",\n\tSUBF:           \"subf\",\n\tSUBFCC:         \"subf.\",\n\tSUBFO:          \"subfo\",\n\tSUBFOCC:        \"subfo.\",\n\tTD:             \"td\",\n\tTDI:            \"tdi\",\n\tTLBSYNC:        \"tlbsync\",\n\tFCTIW:          \"fctiw\",\n\tFCTIWCC:        \"fctiw.\",\n\tFCTIWZ:         \"fctiwz\",\n\tFCTIWZCC:       \"fctiwz.\",\n\tFSQRT:          \"fsqrt\",\n\tFSQRTCC:        \"fsqrt.\",\n\tADD:            \"add\",\n\tADDCC:          \"add.\",\n\tADDO:           \"addo\",\n\tADDOCC:         \"addo.\",\n\tADDC:           \"addc\",\n\tADDCCC:         \"addc.\",\n\tADDCO:          \"addco\",\n\tADDCOCC:        \"addco.\",\n\tADDE:           \"adde\",\n\tADDECC:         \"adde.\",\n\tADDEO:          \"addeo\",\n\tADDEOCC:        \"addeo.\",\n\tLI:             \"li\",\n\tADDI:           \"addi\",\n\tADDIC:          \"addic\",\n\tADDICCC:        \"addic.\",\n\tLIS:            \"lis\",\n\tADDIS:          \"addis\",\n\tADDME:          \"addme\",\n\tADDMECC:        \"addme.\",\n\tADDMEO:         \"addmeo\",\n\tADDMEOCC:       \"addmeo.\",\n\tADDZE:          \"addze\",\n\tADDZECC:        \"addze.\",\n\tADDZEO:         \"addzeo\",\n\tADDZEOCC:       \"addzeo.\",\n\tAND:            \"and\",\n\tANDCC:          \"and.\",\n\tANDC:           \"andc\",\n\tANDCCC:         \"andc.\",\n\tANDICC:         \"andi.\",\n\tANDISCC:        \"andis.\",\n\tB:              \"b\",\n\tBA:             \"ba\",\n\tBL:             \"bl\",\n\tBLA:            \"bla\",\n\tBC:             \"bc\",\n\tBCA:            \"bca\",\n\tBCL:            \"bcl\",\n\tBCLA:           \"bcla\",\n\tBCCTR:          \"bcctr\",\n\tBCCTRL:         \"bcctrl\",\n\tBCLR:           \"bclr\",\n\tBCLRL:          \"bclrl\",\n\tCMPW:           \"cmpw\",\n\tCMPD:           \"cmpd\",\n\tCMP:            \"cmp\",\n\tCMPWI:          \"cmpwi\",\n\tCMPDI:          \"cmpdi\",\n\tCMPI:           \"cmpi\",\n\tCMPLW:          \"cmplw\",\n\tCMPLD:          \"cmpld\",\n\tCMPL:           \"cmpl\",\n\tCMPLWI:         \"cmplwi\",\n\tCMPLDI:         \"cmpldi\",\n\tCMPLI:          \"cmpli\",\n\tCNTLZW:         \"cntlzw\",\n\tCNTLZWCC:       \"cntlzw.\",\n\tCRAND:          \"crand\",\n\tCRANDC:         \"crandc\",\n\tCREQV:          \"creqv\",\n\tCRNAND:         \"crnand\",\n\tCRNOR:          \"crnor\",\n\tCROR:           \"cror\",\n\tCRORC:          \"crorc\",\n\tCRXOR:          \"crxor\",\n\tDCBZ:           \"dcbz\",\n\tEQV:            \"eqv\",\n\tEQVCC:          \"eqv.\",\n\tEXTSH:          \"extsh\",\n\tEXTSHCC:        \"extsh.\",\n\tFABS:           \"fabs\",\n\tFABSCC:         \"fabs.\",\n\tFADD:           \"fadd\",\n\tFADDCC:         \"fadd.\",\n\tFCMPO:          \"fcmpo\",\n\tFCMPU:          \"fcmpu\",\n\tFDIV:           \"fdiv\",\n\tFDIVCC:         \"fdiv.\",\n\tFMADD:          \"fmadd\",\n\tFMADDCC:        \"fmadd.\",\n\tFMR:            \"fmr\",\n\tFMRCC:          \"fmr.\",\n\tFMSUB:          \"fmsub\",\n\tFMSUBCC:        \"fmsub.\",\n\tFMUL:           \"fmul\",\n\tFMULCC:         \"fmul.\",\n\tFNABS:          \"fnabs\",\n\tFNABSCC:        \"fnabs.\",\n\tFNEG:           \"fneg\",\n\tFNEGCC:         \"fneg.\",\n\tFNMADD:         \"fnmadd\",\n\tFNMADDCC:       \"fnmadd.\",\n\tFNMSUB:         \"fnmsub\",\n\tFNMSUBCC:       \"fnmsub.\",\n\tFRSP:           \"frsp\",\n\tFRSPCC:         \"frsp.\",\n\tFSUB:           \"fsub\",\n\tFSUBCC:         \"fsub.\",\n\tISYNC:          \"isync\",\n\tLBZ:            \"lbz\",\n\tLBZU:           \"lbzu\",\n\tLBZUX:          \"lbzux\",\n\tLBZX:           \"lbzx\",\n\tLFD:            \"lfd\",\n\tLFDU:           \"lfdu\",\n\tLFDUX:          \"lfdux\",\n\tLFDX:           \"lfdx\",\n\tLFS:            \"lfs\",\n\tLFSU:           \"lfsu\",\n\tLFSUX:          \"lfsux\",\n\tLFSX:           \"lfsx\",\n\tLHA:            \"lha\",\n\tLHAU:           \"lhau\",\n\tLHAUX:          \"lhaux\",\n\tLHAX:           \"lhax\",\n\tLHBRX:          \"lhbrx\",\n\tLHZ:            \"lhz\",\n\tLHZU:           \"lhzu\",\n\tLHZUX:          \"lhzux\",\n\tLHZX:           \"lhzx\",\n\tLMW:            \"lmw\",\n\tLSWI:           \"lswi\",\n\tLSWX:           \"lswx\",\n\tLWBRX:          \"lwbrx\",\n\tLWZ:            \"lwz\",\n\tLWZU:           \"lwzu\",\n\tLWZUX:          \"lwzux\",\n\tLWZX:           \"lwzx\",\n\tMCRF:           \"mcrf\",\n\tMCRFS:          \"mcrfs\",\n\tMFCR:           \"mfcr\",\n\tMFFS:           \"mffs\",\n\tMFFSCC:         \"mffs.\",\n\tMFMSR:          \"mfmsr\",\n\tMFSPR:          \"mfspr\",\n\tMTCRF:          \"mtcrf\",\n\tMTFSB0:         \"mtfsb0\",\n\tMTFSB0CC:       \"mtfsb0.\",\n\tMTFSB1:         \"mtfsb1\",\n\tMTFSB1CC:       \"mtfsb1.\",\n\tMTFSF:          \"mtfsf\",\n\tMTFSFCC:        \"mtfsf.\",\n\tMTFSFI:         \"mtfsfi\",\n\tMTFSFICC:       \"mtfsfi.\",\n\tMTMSR:          \"mtmsr\",\n\tMTSPR:          \"mtspr\",\n\tMULLI:          \"mulli\",\n\tMULLW:          \"mullw\",\n\tMULLWCC:        \"mullw.\",\n\tMULLWO:         \"mullwo\",\n\tMULLWOCC:       \"mullwo.\",\n\tNAND:           \"nand\",\n\tNANDCC:         \"nand.\",\n\tNEG:            \"neg\",\n\tNEGCC:          \"neg.\",\n\tNEGO:           \"nego\",\n\tNEGOCC:         \"nego.\",\n\tNOR:            \"nor\",\n\tNORCC:          \"nor.\",\n\tOR:             \"or\",\n\tORCC:           \"or.\",\n\tORC:            \"orc\",\n\tORCCC:          \"orc.\",\n\tNOP:            \"nop\",\n\tORI:            \"ori\",\n\tORIS:           \"oris\",\n\tRLWIMI:         \"rlwimi\",\n\tRLWIMICC:       \"rlwimi.\",\n\tRLWINM:         \"rlwinm\",\n\tRLWINMCC:       \"rlwinm.\",\n\tRLWNM:          \"rlwnm\",\n\tRLWNMCC:        \"rlwnm.\",\n\tSLW:            \"slw\",\n\tSLWCC:          \"slw.\",\n\tSRAW:           \"sraw\",\n\tSRAWCC:         \"sraw.\",\n\tSRAWI:          \"srawi\",\n\tSRAWICC:        \"srawi.\",\n\tSRW:            \"srw\",\n\tSRWCC:          \"srw.\",\n\tSTB:            \"stb\",\n\tSTBU:           \"stbu\",\n\tSTBUX:          \"stbux\",\n\tSTBX:           \"stbx\",\n\tSTFD:           \"stfd\",\n\tSTFDU:          \"stfdu\",\n\tSTFDUX:         \"stfdux\",\n\tSTFDX:          \"stfdx\",\n\tSTFS:           \"stfs\",\n\tSTFSU:          \"stfsu\",\n\tSTFSUX:         \"stfsux\",\n\tSTFSX:          \"stfsx\",\n\tSTH:            \"sth\",\n\tSTHBRX:         \"sthbrx\",\n\tSTHU:           \"sthu\",\n\tSTHUX:          \"sthux\",\n\tSTHX:           \"sthx\",\n\tSTMW:           \"stmw\",\n\tSTSWI:          \"stswi\",\n\tSTSWX:          \"stswx\",\n\tSTW:            \"stw\",\n\tSTWBRX:         \"stwbrx\",\n\tSTWU:           \"stwu\",\n\tSTWUX:          \"stwux\",\n\tSTWX:           \"stwx\",\n\tSUBFC:          \"subfc\",\n\tSUBFCCC:        \"subfc.\",\n\tSUBFCO:         \"subfco\",\n\tSUBFCOCC:       \"subfco.\",\n\tSUBFE:          \"subfe\",\n\tSUBFECC:        \"subfe.\",\n\tSUBFEO:         \"subfeo\",\n\tSUBFEOCC:       \"subfeo.\",\n\tSUBFIC:         \"subfic\",\n\tSUBFME:         \"subfme\",\n\tSUBFMECC:       \"subfme.\",\n\tSUBFMEO:        \"subfmeo\",\n\tSUBFMEOCC:      \"subfmeo.\",\n\tSUBFZE:         \"subfze\",\n\tSUBFZECC:       \"subfze.\",\n\tSUBFZEO:        \"subfzeo\",\n\tSUBFZEOCC:      \"subfzeo.\",\n\tSYNC:           \"sync\",\n\tTLBIE:          \"tlbie\",\n\tTW:             \"tw\",\n\tTWI:            \"twi\",\n\tXOR:            \"xor\",\n\tXORCC:          \"xor.\",\n\tXORI:           \"xori\",\n\tXORIS:          \"xoris\",\n}\n\nvar (\n\tap_Reg_16_20                     = &argField{Type: TypeReg, Shift: 0, BitFields: BitFields{{16, 5, 0}}}\n\tap_NegOffset_31_31_6_10_shift3   = &argField{Type: TypeNegOffset, Shift: 3, BitFields: BitFields{{31, 1, 0}, {6, 5, 0}}}\n\tap_Reg_11_15                     = &argField{Type: TypeReg, Shift: 0, BitFields: BitFields{{11, 5, 0}}}\n\tap_Reg_6_10                      = &argField{Type: TypeReg, Shift: 0, BitFields: BitFields{{6, 5, 0}}}\n\tap_FPReg_6_10                    = &argField{Type: TypeFPReg, Shift: 0, BitFields: BitFields{{6, 5, 0}}}\n\tap_VecReg_16_20                  = &argField{Type: TypeVecReg, Shift: 0, BitFields: BitFields{{16, 5, 0}}}\n\tap_VecReg_6_10                   = &argField{Type: TypeVecReg, Shift: 0, BitFields: BitFields{{6, 5, 0}}}\n\tap_FPReg_16_20                   = &argField{Type: TypeFPReg, Shift: 0, BitFields: BitFields{{16, 5, 0}}}\n\tap_VecSReg_31_31_6_10            = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{31, 1, 0}, {6, 5, 0}}}\n\tap_ImmUnsigned_16_20             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{16, 5, 0}}}\n\tap_VecSpReg_10_10_6_9            = &argField{Type: TypeVecSpReg, Shift: 0, BitFields: BitFields{{10, 1, 0}, {6, 4, 0}}}\n\tap_Offset_16_27_shift4           = &argField{Type: TypeOffset, Shift: 4, BitFields: BitFields{{16, 12, 0}}}\n\tap_ImmUnsigned_16_25_11_15_31_31 = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{16, 10, 0}, {11, 5, 0}, {31, 1, 0}}}\n\tap_Reg_38_42                     = &argField{Type: TypeReg, Shift: 0, BitFields: BitFields{{6, 5, 1}}}\n\tap_Reg_43_47                     = &argField{Type: TypeReg, Shift: 0, BitFields: BitFields{{11, 5, 1}}}\n\tap_ImmSigned_14_31_48_63         = &argField{Type: TypeImmSigned, Shift: 0, BitFields: BitFields{{14, 18, 0}, {16, 16, 1}}}\n\tap_ImmUnsigned_11_11             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{11, 1, 0}}}\n\tap_Offset_14_31_48_63            = &argField{Type: TypeOffset, Shift: 0, BitFields: BitFields{{14, 18, 0}, {16, 16, 1}}}\n\tap_FPReg_38_42                   = &argField{Type: TypeFPReg, Shift: 0, BitFields: BitFields{{6, 5, 1}}}\n\tap_VecReg_38_42                  = &argField{Type: TypeVecReg, Shift: 0, BitFields: BitFields{{6, 5, 1}}}\n\tap_VecSReg_37_37_38_42           = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{5, 1, 1}, {6, 5, 1}}}\n\tap_VecSpReg_42_42_38_41          = &argField{Type: TypeVecSpReg, Shift: 0, BitFields: BitFields{{10, 1, 1}, {6, 4, 1}}}\n\tap_MMAReg_38_40                  = &argField{Type: TypeMMAReg, Shift: 0, BitFields: BitFields{{6, 3, 1}}}\n\tap_VecSReg_61_61_43_47           = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{29, 1, 1}, {11, 5, 1}}}\n\tap_VecSReg_62_62_48_52           = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{30, 1, 1}, {16, 5, 1}}}\n\tap_ImmUnsigned_24_27             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{24, 4, 0}}}\n\tap_ImmUnsigned_28_31             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{28, 4, 0}}}\n\tap_ImmUnsigned_16_17             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{16, 2, 0}}}\n\tap_ImmUnsigned_28_29             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{28, 2, 0}}}\n\tap_ImmUnsigned_16_23             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{16, 8, 0}}}\n\tap_ImmUnsigned_16_19             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{16, 4, 0}}}\n\tap_CondRegBit_11_15              = &argField{Type: TypeCondRegBit, Shift: 0, BitFields: BitFields{{11, 5, 0}}}\n\tap_VecReg_11_15                  = &argField{Type: TypeVecReg, Shift: 0, BitFields: BitFields{{11, 5, 0}}}\n\tap_CondRegField_6_8              = &argField{Type: TypeCondRegField, Shift: 0, BitFields: BitFields{{6, 3, 0}}}\n\tap_ImmUnsigned_15_15             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{15, 1, 0}}}\n\tap_Reg_21_25                     = &argField{Type: TypeReg, Shift: 0, BitFields: BitFields{{21, 5, 0}}}\n\tap_ImmUnsigned_13_15             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{13, 3, 0}}}\n\tap_ImmUnsigned_12_15             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{12, 4, 0}}}\n\tap_VecReg_21_25                  = &argField{Type: TypeVecReg, Shift: 0, BitFields: BitFields{{21, 5, 0}}}\n\tap_ImmUnsigned_23_25             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{23, 3, 0}}}\n\tap_MMAReg_6_8                    = &argField{Type: TypeMMAReg, Shift: 0, BitFields: BitFields{{6, 3, 0}}}\n\tap_VecSReg_29_29_11_15           = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{29, 1, 0}, {11, 5, 0}}}\n\tap_VecSReg_30_30_16_20           = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{30, 1, 0}, {16, 5, 0}}}\n\tap_VecSReg_63_63_38_42           = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{31, 1, 1}, {6, 5, 1}}}\n\tap_VecSReg_60_60_53_57           = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{28, 1, 1}, {21, 5, 1}}}\n\tap_ImmUnsigned_24_31             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{24, 8, 0}}}\n\tap_ImmUnsigned_11_15             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{11, 5, 0}}}\n\tap_ImmUnsigned_29_31             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{29, 3, 0}}}\n\tap_VecSReg_47_47_38_42           = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{15, 1, 1}, {6, 5, 1}}}\n\tap_ImmUnsigned_46_46             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{14, 1, 1}}}\n\tap_ImmUnsigned_16_31_48_63       = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{16, 16, 0}, {16, 16, 1}}}\n\tap_ImmUnsigned_21_22             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{21, 2, 0}}}\n\tap_ImmUnsigned_18_20             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{18, 3, 0}}}\n\tap_ImmUnsigned_19_20             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{19, 2, 0}}}\n\tap_ImmSigned_16_25_11_15_31_31   = &argField{Type: TypeImmSigned, Shift: 0, BitFields: BitFields{{16, 10, 0}, {11, 5, 0}, {31, 1, 0}}}\n\tap_ImmUnsigned_22_22             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{22, 1, 0}}}\n\tap_ImmUnsigned_10_10             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{10, 1, 0}}}\n\tap_ImmUnsigned_14_15             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{14, 2, 0}}}\n\tap_ImmUnsigned_10_15             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{10, 6, 0}}}\n\tap_ImmUnsigned_30_30_16_20       = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{30, 1, 0}, {16, 5, 0}}}\n\tap_Offset_16_29_shift2           = &argField{Type: TypeOffset, Shift: 2, BitFields: BitFields{{16, 14, 0}}}\n\tap_VecSReg_28_28_6_10            = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{28, 1, 0}, {6, 5, 0}}}\n\tap_CondRegField_11_13            = &argField{Type: TypeCondRegField, Shift: 0, BitFields: BitFields{{11, 3, 0}}}\n\tap_ImmUnsigned_9_10              = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{9, 2, 0}}}\n\tap_ImmUnsigned_9_15              = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{9, 7, 0}}}\n\tap_ImmUnsigned_25_25_29_29_11_15 = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{25, 1, 0}, {29, 1, 0}, {11, 5, 0}}}\n\tap_ImmUnsigned_13_20             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{13, 8, 0}}}\n\tap_ImmUnsigned_6_10              = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{6, 5, 0}}}\n\tap_FPReg_11_15                   = &argField{Type: TypeFPReg, Shift: 0, BitFields: BitFields{{11, 5, 0}}}\n\tap_ImmUnsigned_7_10              = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{7, 4, 0}}}\n\tap_ImmUnsigned_31_31             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{31, 1, 0}}}\n\tap_ImmUnsigned_11_20             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{11, 10, 0}}}\n\tap_ImmUnsigned_20_20             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{20, 1, 0}}}\n\tap_ImmUnsigned_16_16             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{16, 1, 0}}}\n\tap_ImmUnsigned_17_20             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{17, 4, 0}}}\n\tap_ImmUnsigned_22_23             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{22, 2, 0}}}\n\tap_VecSReg_28_28_21_25           = &argField{Type: TypeVecSReg, Shift: 0, BitFields: BitFields{{28, 1, 0}, {21, 5, 0}}}\n\tap_ImmUnsigned_11_12             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{11, 2, 0}}}\n\tap_ImmSigned_11_15               = &argField{Type: TypeImmSigned, Shift: 0, BitFields: BitFields{{11, 5, 0}}}\n\tap_ImmUnsigned_16_21             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{16, 6, 0}}}\n\tap_CondRegBit_21_25              = &argField{Type: TypeCondRegBit, Shift: 0, BitFields: BitFields{{21, 5, 0}}}\n\tap_ImmUnsigned_12_13             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{12, 2, 0}}}\n\tap_ImmUnsigned_14_14             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{14, 1, 0}}}\n\tap_ImmUnsigned_22_25             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{22, 4, 0}}}\n\tap_ImmUnsigned_12_19             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{12, 8, 0}}}\n\tap_ImmUnsigned_20_26             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{20, 7, 0}}}\n\tap_ImmUnsigned_8_10              = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{8, 3, 0}}}\n\tap_FPReg_21_25                   = &argField{Type: TypeFPReg, Shift: 0, BitFields: BitFields{{21, 5, 0}}}\n\tap_SpReg_16_20_11_15             = &argField{Type: TypeSpReg, Shift: 0, BitFields: BitFields{{16, 5, 0}, {11, 5, 0}}}\n\tap_ImmUnsigned_26_26_21_25       = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{26, 1, 0}, {21, 5, 0}}}\n\tap_ImmSigned_16_31               = &argField{Type: TypeImmSigned, Shift: 0, BitFields: BitFields{{16, 16, 0}}}\n\tap_ImmUnsigned_16_31             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{16, 16, 0}}}\n\tap_PCRel_6_29_shift2             = &argField{Type: TypePCRel, Shift: 2, BitFields: BitFields{{6, 24, 0}}}\n\tap_Label_6_29_shift2             = &argField{Type: TypeLabel, Shift: 2, BitFields: BitFields{{6, 24, 0}}}\n\tap_PCRel_16_29_shift2            = &argField{Type: TypePCRel, Shift: 2, BitFields: BitFields{{16, 14, 0}}}\n\tap_Label_16_29_shift2            = &argField{Type: TypeLabel, Shift: 2, BitFields: BitFields{{16, 14, 0}}}\n\tap_CondRegBit_6_10               = &argField{Type: TypeCondRegBit, Shift: 0, BitFields: BitFields{{6, 5, 0}}}\n\tap_CondRegBit_16_20              = &argField{Type: TypeCondRegBit, Shift: 0, BitFields: BitFields{{16, 5, 0}}}\n\tap_Offset_16_31                  = &argField{Type: TypeOffset, Shift: 0, BitFields: BitFields{{16, 16, 0}}}\n\tap_ImmUnsigned_7_14              = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{7, 8, 0}}}\n\tap_ImmUnsigned_6_6               = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{6, 1, 0}}}\n\tap_ImmUnsigned_6_8               = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{6, 3, 0}}}\n\tap_ImmUnsigned_21_25             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{21, 5, 0}}}\n\tap_ImmUnsigned_26_30             = &argField{Type: TypeImmUnsigned, Shift: 0, BitFields: BitFields{{26, 5, 0}}}\n)\n\nvar instFormats = [...]instFormat{\n\t{HASHCHK, 0xfc0007fe00000000, 0x7c0005e400000000, 0x0, // Hash Check X-form (hashchk RB,offset(RA))\n\t\t[6]*argField{ap_Reg_16_20, ap_NegOffset_31_31_6_10_shift3, ap_Reg_11_15}},\n\t{HASHCHKP, 0xfc0007fe00000000, 0x7c00056400000000, 0x0, // Hash Check Privileged X-form (hashchkp RB,offset(RA))\n\t\t[6]*argField{ap_Reg_16_20, ap_NegOffset_31_31_6_10_shift3, ap_Reg_11_15}},\n\t{HASHST, 0xfc0007fe00000000, 0x7c0005a400000000, 0x0, // Hash Store X-form (hashst RB,offset(RA))\n\t\t[6]*argField{ap_Reg_16_20, ap_NegOffset_31_31_6_10_shift3, ap_Reg_11_15}},\n\t{HASHSTP, 0xfc0007fe00000000, 0x7c00052400000000, 0x0, // Hash Store Privileged X-form (hashstp RB,offset(RA))\n\t\t[6]*argField{ap_Reg_16_20, ap_NegOffset_31_31_6_10_shift3, ap_Reg_11_15}},\n\t{BRD, 0xfc0007fe00000000, 0x7c00017600000000, 0xf80100000000, // Byte-Reverse Doubleword X-form (brd RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{BRH, 0xfc0007fe00000000, 0x7c0001b600000000, 0xf80100000000, // Byte-Reverse Halfword X-form (brh RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{BRW, 0xfc0007fe00000000, 0x7c00013600000000, 0xf80100000000, // Byte-Reverse Word X-form (brw RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{CFUGED, 0xfc0007fe00000000, 0x7c0001b800000000, 0x100000000, // Centrifuge Doubleword X-form (cfuged RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{CNTLZDM, 0xfc0007fe00000000, 0x7c00007600000000, 0x100000000, // Count Leading Zeros Doubleword under bit Mask X-form (cntlzdm RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{CNTTZDM, 0xfc0007fe00000000, 0x7c00047600000000, 0x100000000, // Count Trailing Zeros Doubleword under bit Mask X-form (cnttzdm RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{DCFFIXQQ, 0xfc1f07fe00000000, 0xfc0007c400000000, 0x100000000, // DFP Convert From Fixed Quadword Quad X-form (dcffixqq FRTp,VRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_VecReg_16_20}},\n\t{DCTFIXQQ, 0xfc1f07fe00000000, 0xfc0107c400000000, 0x100000000, // DFP Convert To Fixed Quadword Quad X-form (dctfixqq VRT,FRBp)\n\t\t[6]*argField{ap_VecReg_6_10, ap_FPReg_16_20}},\n\t{LXVKQ, 0xfc1f07fe00000000, 0xf01f02d000000000, 0x0, // Load VSX Vector Special Value Quadword X-form (lxvkq XT,UIM)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_ImmUnsigned_16_20}},\n\t{LXVP, 0xfc00000f00000000, 0x1800000000000000, 0x0, // Load VSX Vector Paired DQ-form (lxvp XTp,DQ(RA))\n\t\t[6]*argField{ap_VecSpReg_10_10_6_9, ap_Offset_16_27_shift4, ap_Reg_11_15}},\n\t{LXVPX, 0xfc0007fe00000000, 0x7c00029a00000000, 0x100000000, // Load VSX Vector Paired Indexed X-form (lxvpx XTp,RA,RB)\n\t\t[6]*argField{ap_VecSpReg_10_10_6_9, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVRBX, 0xfc0007fe00000000, 0x7c00001a00000000, 0x0, // Load VSX Vector Rightmost Byte Indexed X-form (lxvrbx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVRDX, 0xfc0007fe00000000, 0x7c0000da00000000, 0x0, // Load VSX Vector Rightmost Doubleword Indexed X-form (lxvrdx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVRHX, 0xfc0007fe00000000, 0x7c00005a00000000, 0x0, // Load VSX Vector Rightmost Halfword Indexed X-form (lxvrhx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVRWX, 0xfc0007fe00000000, 0x7c00009a00000000, 0x0, // Load VSX Vector Rightmost Word Indexed X-form (lxvrwx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MTVSRBM, 0xfc1f07ff00000000, 0x1010064200000000, 0x0, // Move to VSR Byte Mask VX-form (mtvsrbm VRT,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_16_20}},\n\t{MTVSRBMI, 0xfc00003e00000000, 0x1000001400000000, 0x0, // Move To VSR Byte Mask Immediate DX-form (mtvsrbmi VRT,bm)\n\t\t[6]*argField{ap_VecReg_6_10, ap_ImmUnsigned_16_25_11_15_31_31}},\n\t{MTVSRDM, 0xfc1f07ff00000000, 0x1013064200000000, 0x0, // Move to VSR Doubleword Mask VX-form (mtvsrdm VRT,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_16_20}},\n\t{MTVSRHM, 0xfc1f07ff00000000, 0x1011064200000000, 0x0, // Move to VSR Halfword Mask VX-form (mtvsrhm VRT,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_16_20}},\n\t{MTVSRQM, 0xfc1f07ff00000000, 0x1014064200000000, 0x0, // Move to VSR Quadword Mask VX-form (mtvsrqm VRT,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_16_20}},\n\t{MTVSRWM, 0xfc1f07ff00000000, 0x1012064200000000, 0x0, // Move to VSR Word Mask VX-form (mtvsrwm VRT,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_16_20}},\n\t{PADDI, 0xff800000fc000000, 0x600000038000000, 0x6c000000000000, // Prefixed Add Immediate MLS:D-form (paddi RT,RA,SI,R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Reg_43_47, ap_ImmSigned_14_31_48_63, ap_ImmUnsigned_11_11}},\n\t{PDEPD, 0xfc0007fe00000000, 0x7c00013800000000, 0x100000000, // Parallel Bits Deposit Doubleword X-form (pdepd RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{PEXTD, 0xfc0007fe00000000, 0x7c00017800000000, 0x100000000, // Parallel Bits Extract Doubleword X-form (pextd RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{PLBZ, 0xff800000fc000000, 0x600000088000000, 0x6c000000000000, // Prefixed Load Byte and Zero MLS:D-form (plbz RT,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLD, 0xff800000fc000000, 0x4000000e4000000, 0x6c000000000000, // Prefixed Load Doubleword 8LS:D-form (pld RT,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLFD, 0xff800000fc000000, 0x6000000c8000000, 0x6c000000000000, // Prefixed Load Floating-Point Double MLS:D-form (plfd FRT,D(RA),R)\n\t\t[6]*argField{ap_FPReg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLFS, 0xff800000fc000000, 0x6000000c0000000, 0x6c000000000000, // Prefixed Load Floating-Point Single MLS:D-form (plfs FRT,D(RA),R)\n\t\t[6]*argField{ap_FPReg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLHA, 0xff800000fc000000, 0x6000000a8000000, 0x6c000000000000, // Prefixed Load Halfword Algebraic MLS:D-form (plha RT,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLHZ, 0xff800000fc000000, 0x6000000a0000000, 0x6c000000000000, // Prefixed Load Halfword and Zero MLS:D-form (plhz RT,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLQ, 0xff800000fc000000, 0x4000000e0000000, 0x6c000000000000, // Prefixed Load Quadword 8LS:D-form (plq RTp,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLWA, 0xff800000fc000000, 0x4000000a4000000, 0x6c000000000000, // Prefixed Load Word Algebraic 8LS:D-form (plwa RT,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLWZ, 0xff800000fc000000, 0x600000080000000, 0x6c000000000000, // Prefixed Load Word and Zero MLS:D-form (plwz RT,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLXSD, 0xff800000fc000000, 0x4000000a8000000, 0x6c000000000000, // Prefixed Load VSX Scalar Doubleword 8LS:D-form (plxsd VRT,D(RA),R)\n\t\t[6]*argField{ap_VecReg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLXSSP, 0xff800000fc000000, 0x4000000ac000000, 0x6c000000000000, // Prefixed Load VSX Scalar Single-Precision 8LS:D-form (plxssp VRT,D(RA),R)\n\t\t[6]*argField{ap_VecReg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLXV, 0xff800000f8000000, 0x4000000c8000000, 0x6c000000000000, // Prefixed Load VSX Vector 8LS:D-form (plxv XT,D(RA),R)\n\t\t[6]*argField{ap_VecSReg_37_37_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PLXVP, 0xff800000fc000000, 0x4000000e8000000, 0x6c000000000000, // Prefixed Load VSX Vector Paired 8LS:D-form (plxvp XTp,D(RA),R)\n\t\t[6]*argField{ap_VecSpReg_42_42_38_41, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PMXVBF16GER2, 0xfff00000fc0007f8, 0x7900000ec000198, 0xf3f0000000000, // Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) MMIRR:XX3-form (pmxvbf16ger2 AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVBF16GER2NN, 0xfff00000fc0007f8, 0x7900000ec000790, 0xf3f0000000000, // Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply, Negative accumulate MMIRR:XX3-form (pmxvbf16ger2nn AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVBF16GER2NP, 0xfff00000fc0007f8, 0x7900000ec000390, 0xf3f0000000000, // Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply, Positive accumulate MMIRR:XX3-form (pmxvbf16ger2np AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVBF16GER2PN, 0xfff00000fc0007f8, 0x7900000ec000590, 0xf3f0000000000, // Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply, Negative accumulate MMIRR:XX3-form (pmxvbf16ger2pn AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVBF16GER2PP, 0xfff00000fc0007f8, 0x7900000ec000190, 0xf3f0000000000, // Prefixed Masked VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply, Positive accumulate MMIRR:XX3-form (pmxvbf16ger2pp AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVF16GER2, 0xfff00000fc0007f8, 0x7900000ec000098, 0xf3f0000000000, // Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update) MMIRR:XX3-form (pmxvf16ger2 AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVF16GER2NN, 0xfff00000fc0007f8, 0x7900000ec000690, 0xf3f0000000000, // Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update) Negative multiply, Negative accumulate MMIRR:XX3-form (pmxvf16ger2nn AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVF16GER2NP, 0xfff00000fc0007f8, 0x7900000ec000290, 0xf3f0000000000, // Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update) Negative multiply, Positive accumulate MMIRR:XX3-form (pmxvf16ger2np AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVF16GER2PN, 0xfff00000fc0007f8, 0x7900000ec000490, 0xf3f0000000000, // Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update) Positive multiply, Negative accumulate MMIRR:XX3-form (pmxvf16ger2pn AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVF16GER2PP, 0xfff00000fc0007f8, 0x7900000ec000090, 0xf3f0000000000, // Prefixed Masked VSX Vector 16-bit Floating-Point GER (rank-2 update) Positive multiply, Positive accumulate MMIRR:XX3-form (pmxvf16ger2pp AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVF32GER, 0xfff00000fc0007f8, 0x7900000ec0000d8, 0xfff0000000000, // Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) MMIRR:XX3-form (pmxvf32ger AT,XA,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31}},\n\t{PMXVF32GERNN, 0xfff00000fc0007f8, 0x7900000ec0006d0, 0xfff0000000000, // Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) Negative multiply, Negative accumulate MMIRR:XX3-form (pmxvf32gernn AT,XA,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31}},\n\t{PMXVF32GERNP, 0xfff00000fc0007f8, 0x7900000ec0002d0, 0xfff0000000000, // Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) Negative multiply, Positive accumulate MMIRR:XX3-form (pmxvf32gernp AT,XA,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31}},\n\t{PMXVF32GERPN, 0xfff00000fc0007f8, 0x7900000ec0004d0, 0xfff0000000000, // Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) Positive multiply, Negative accumulate MMIRR:XX3-form (pmxvf32gerpn AT,XA,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31}},\n\t{PMXVF32GERPP, 0xfff00000fc0007f8, 0x7900000ec0000d0, 0xfff0000000000, // Prefixed Masked VSX Vector 32-bit Floating-Point GER (rank-1 update) Positive multiply, Positive accumulate MMIRR:XX3-form (pmxvf32gerpp AT,XA,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31}},\n\t{PMXVF64GER, 0xfff00000fc0007f8, 0x7900000ec0001d8, 0xfff0300000000, // Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update) MMIRR:XX3-form (pmxvf64ger AT,XAp,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_29}},\n\t{PMXVF64GERNN, 0xfff00000fc0007f8, 0x7900000ec0007d0, 0xfff0300000000, // Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update) Negative multiply, Negative accumulate MMIRR:XX3-form (pmxvf64gernn AT,XAp,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_29}},\n\t{PMXVF64GERNP, 0xfff00000fc0007f8, 0x7900000ec0003d0, 0xfff0300000000, // Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update) Negative multiply, Positive accumulate MMIRR:XX3-form (pmxvf64gernp AT,XAp,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_29}},\n\t{PMXVF64GERPN, 0xfff00000fc0007f8, 0x7900000ec0005d0, 0xfff0300000000, // Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update) Positive multiply, Negative accumulate MMIRR:XX3-form (pmxvf64gerpn AT,XAp,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_29}},\n\t{PMXVF64GERPP, 0xfff00000fc0007f8, 0x7900000ec0001d0, 0xfff0300000000, // Prefixed Masked VSX Vector 64-bit Floating-Point GER (rank-1 update) Positive multiply, Positive accumulate MMIRR:XX3-form (pmxvf64gerpp AT,XAp,XB,XMSK,YMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_29}},\n\t{PMXVI16GER2, 0xfff00000fc0007f8, 0x7900000ec000258, 0xf3f0000000000, // Prefixed Masked VSX Vector 16-bit Signed Integer GER (rank-2 update) MMIRR:XX3-form (pmxvi16ger2 AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVI16GER2PP, 0xfff00000fc0007f8, 0x7900000ec000358, 0xf3f0000000000, // Prefixed Masked VSX Vector 16-bit Signed Integer GER (rank-2 update) Positive multiply, Positive accumulate MMIRR:XX3-form (pmxvi16ger2pp AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVI16GER2S, 0xfff00000fc0007f8, 0x7900000ec000158, 0xf3f0000000000, // Prefixed Masked VSX Vector 16-bit Signed Integer GER (rank-2 update) with Saturation MMIRR:XX3-form (pmxvi16ger2s AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVI16GER2SPP, 0xfff00000fc0007f8, 0x7900000ec000150, 0xf3f0000000000, // Prefixed Masked VSX Vector 16-bit Signed Integer GER (rank-2 update) with Saturation Positive multiply, Positive accumulate MMIRR:XX3-form (pmxvi16ger2spp AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_17}},\n\t{PMXVI4GER8, 0xfff00000fc0007f8, 0x7900000ec000118, 0xf000000000000, // Prefixed Masked VSX Vector 4-bit Signed Integer GER (rank-8 update) MMIRR:XX3-form (pmxvi4ger8 AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_23}},\n\t{PMXVI4GER8PP, 0xfff00000fc0007f8, 0x7900000ec000110, 0xf000000000000, // Prefixed Masked VSX Vector 4-bit Signed Integer GER (rank-8 update) Positive multiply, Positive accumulate MMIRR:XX3-form (pmxvi4ger8pp AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_23}},\n\t{PMXVI8GER4, 0xfff00000fc0007f8, 0x7900000ec000018, 0xf0f0000000000, // Prefixed Masked VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) MMIRR:XX3-form (pmxvi8ger4 AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_19}},\n\t{PMXVI8GER4PP, 0xfff00000fc0007f8, 0x7900000ec000010, 0xf0f0000000000, // Prefixed Masked VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) Positive multiply, Positive accumulate MMIRR:XX3-form (pmxvi8ger4pp AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_19}},\n\t{PMXVI8GER4SPP, 0xfff00000fc0007f8, 0x7900000ec000318, 0xf0f0000000000, // Prefixed Masked VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with Saturate Positive multiply, Positive accumulate MMIRR:XX3-form (pmxvi8ger4spp AT,XA,XB,XMSK,YMSK,PMSK)\n\t\t[6]*argField{ap_MMAReg_38_40, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_ImmUnsigned_24_27, ap_ImmUnsigned_28_31, ap_ImmUnsigned_16_19}},\n\t{PNOP, 0xfff3fffe00000000, 0x700000000000000, 0xc000100000000, // Prefixed Nop MRR:*-form (pnop)\n\t\t[6]*argField{}},\n\t{PSTB, 0xff800000fc000000, 0x600000098000000, 0x6c000000000000, // Prefixed Store Byte MLS:D-form (pstb RS,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTD, 0xff800000fc000000, 0x4000000f4000000, 0x6c000000000000, // Prefixed Store Doubleword 8LS:D-form (pstd RS,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTFD, 0xff800000fc000000, 0x6000000d8000000, 0x6c000000000000, // Prefixed Store Floating-Point Double MLS:D-form (pstfd FRS,D(RA),R)\n\t\t[6]*argField{ap_FPReg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTFS, 0xff800000fc000000, 0x6000000d0000000, 0x6c000000000000, // Prefixed Store Floating-Point Single MLS:D-form (pstfs FRS,D(RA),R)\n\t\t[6]*argField{ap_FPReg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTH, 0xff800000fc000000, 0x6000000b0000000, 0x6c000000000000, // Prefixed Store Halfword MLS:D-form (psth RS,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTQ, 0xff800000fc000000, 0x4000000f0000000, 0x6c000000000000, // Prefixed Store Quadword 8LS:D-form (pstq RSp,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTW, 0xff800000fc000000, 0x600000090000000, 0x6c000000000000, // Prefixed Store Word MLS:D-form (pstw RS,D(RA),R)\n\t\t[6]*argField{ap_Reg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTXSD, 0xff800000fc000000, 0x4000000b8000000, 0x6c000000000000, // Prefixed Store VSX Scalar Doubleword 8LS:D-form (pstxsd VRS,D(RA),R)\n\t\t[6]*argField{ap_VecReg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTXSSP, 0xff800000fc000000, 0x4000000bc000000, 0x6c000000000000, // Prefixed Store VSX Scalar Single-Precision 8LS:D-form (pstxssp VRS,D(RA),R)\n\t\t[6]*argField{ap_VecReg_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTXV, 0xff800000f8000000, 0x4000000d8000000, 0x6c000000000000, // Prefixed Store VSX Vector 8LS:D-form (pstxv XS,D(RA),R)\n\t\t[6]*argField{ap_VecSReg_37_37_38_42, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{PSTXVP, 0xff800000fc000000, 0x4000000f8000000, 0x6c000000000000, // Prefixed Store VSX Vector Paired 8LS:D-form (pstxvp XSp,D(RA),R)\n\t\t[6]*argField{ap_VecSpReg_42_42_38_41, ap_Offset_14_31_48_63, ap_Reg_43_47, ap_ImmUnsigned_11_11}},\n\t{SETBC, 0xfc0007fe00000000, 0x7c00030000000000, 0xf80100000000, // Set Boolean Condition X-form (setbc RT,BI)\n\t\t[6]*argField{ap_Reg_6_10, ap_CondRegBit_11_15}},\n\t{SETBCR, 0xfc0007fe00000000, 0x7c00034000000000, 0xf80100000000, // Set Boolean Condition Reverse X-form (setbcr RT,BI)\n\t\t[6]*argField{ap_Reg_6_10, ap_CondRegBit_11_15}},\n\t{SETNBC, 0xfc0007fe00000000, 0x7c00038000000000, 0xf80100000000, // Set Negative Boolean Condition X-form (setnbc RT,BI)\n\t\t[6]*argField{ap_Reg_6_10, ap_CondRegBit_11_15}},\n\t{SETNBCR, 0xfc0007fe00000000, 0x7c0003c000000000, 0xf80100000000, // Set Negative Boolean Condition Reverse X-form (setnbcr RT,BI)\n\t\t[6]*argField{ap_Reg_6_10, ap_CondRegBit_11_15}},\n\t{STXVP, 0xfc00000f00000000, 0x1800000100000000, 0x0, // Store VSX Vector Paired DQ-form (stxvp XSp,DQ(RA))\n\t\t[6]*argField{ap_VecSpReg_10_10_6_9, ap_Offset_16_27_shift4, ap_Reg_11_15}},\n\t{STXVPX, 0xfc0007fe00000000, 0x7c00039a00000000, 0x100000000, // Store VSX Vector Paired Indexed X-form (stxvpx XSp,RA,RB)\n\t\t[6]*argField{ap_VecSpReg_10_10_6_9, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVRBX, 0xfc0007fe00000000, 0x7c00011a00000000, 0x0, // Store VSX Vector Rightmost Byte Indexed X-form (stxvrbx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVRDX, 0xfc0007fe00000000, 0x7c0001da00000000, 0x0, // Store VSX Vector Rightmost Doubleword Indexed X-form (stxvrdx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVRHX, 0xfc0007fe00000000, 0x7c00015a00000000, 0x0, // Store VSX Vector Rightmost Halfword Indexed X-form (stxvrhx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVRWX, 0xfc0007fe00000000, 0x7c00019a00000000, 0x0, // Store VSX Vector Rightmost Word Indexed X-form (stxvrwx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VCFUGED, 0xfc0007ff00000000, 0x1000054d00000000, 0x0, // Vector Centrifuge Doubleword VX-form (vcfuged VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCLRLB, 0xfc0007ff00000000, 0x1000018d00000000, 0x0, // Vector Clear Leftmost Bytes VX-form (vclrlb VRT,VRA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_Reg_16_20}},\n\t{VCLRRB, 0xfc0007ff00000000, 0x100001cd00000000, 0x0, // Vector Clear Rightmost Bytes VX-form (vclrrb VRT,VRA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_Reg_16_20}},\n\t{VCLZDM, 0xfc0007ff00000000, 0x1000078400000000, 0x0, // Vector Count Leading Zeros Doubleword under bit Mask VX-form (vclzdm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQUQ, 0xfc0007ff00000000, 0x100001c700000000, 0x0, // Vector Compare Equal Quadword VC-form (vcmpequq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQUQCC, 0xfc0007ff00000000, 0x100005c700000000, 0x0, // Vector Compare Equal Quadword VC-form (vcmpequq. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSQ, 0xfc0007ff00000000, 0x1000038700000000, 0x0, // Vector Compare Greater Than Signed Quadword VC-form (vcmpgtsq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSQCC, 0xfc0007ff00000000, 0x1000078700000000, 0x0, // Vector Compare Greater Than Signed Quadword VC-form (vcmpgtsq. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUQ, 0xfc0007ff00000000, 0x1000028700000000, 0x0, // Vector Compare Greater Than Unsigned Quadword VC-form (vcmpgtuq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUQCC, 0xfc0007ff00000000, 0x1000068700000000, 0x0, // Vector Compare Greater Than Unsigned Quadword VC-form (vcmpgtuq. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPSQ, 0xfc0007ff00000000, 0x1000014100000000, 0x60000000000000, // Vector Compare Signed Quadword VX-form (vcmpsq BF,VRA,VRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPUQ, 0xfc0007ff00000000, 0x1000010100000000, 0x60000000000000, // Vector Compare Unsigned Quadword VX-form (vcmpuq BF,VRA,VRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCNTMBB, 0xfc1e07ff00000000, 0x1018064200000000, 0x0, // Vector Count Mask Bits Byte VX-form (vcntmbb RT,VRB,MP)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_15_15}},\n\t{VCNTMBD, 0xfc1e07ff00000000, 0x101e064200000000, 0x0, // Vector Count Mask Bits Doubleword VX-form (vcntmbd RT,VRB,MP)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_15_15}},\n\t{VCNTMBH, 0xfc1e07ff00000000, 0x101a064200000000, 0x0, // Vector Count Mask Bits Halfword VX-form (vcntmbh RT,VRB,MP)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_15_15}},\n\t{VCNTMBW, 0xfc1e07ff00000000, 0x101c064200000000, 0x0, // Vector Count Mask Bits Word VX-form (vcntmbw RT,VRB,MP)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_15_15}},\n\t{VCTZDM, 0xfc0007ff00000000, 0x100007c400000000, 0x0, // Vector Count Trailing Zeros Doubleword under bit Mask VX-form (vctzdm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVESD, 0xfc0007ff00000000, 0x100003cb00000000, 0x0, // Vector Divide Extended Signed Doubleword VX-form (vdivesd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVESQ, 0xfc0007ff00000000, 0x1000030b00000000, 0x0, // Vector Divide Extended Signed Quadword VX-form (vdivesq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVESW, 0xfc0007ff00000000, 0x1000038b00000000, 0x0, // Vector Divide Extended Signed Word VX-form (vdivesw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVEUD, 0xfc0007ff00000000, 0x100002cb00000000, 0x0, // Vector Divide Extended Unsigned Doubleword VX-form (vdiveud VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVEUQ, 0xfc0007ff00000000, 0x1000020b00000000, 0x0, // Vector Divide Extended Unsigned Quadword VX-form (vdiveuq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVEUW, 0xfc0007ff00000000, 0x1000028b00000000, 0x0, // Vector Divide Extended Unsigned Word VX-form (vdiveuw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVSD, 0xfc0007ff00000000, 0x100001cb00000000, 0x0, // Vector Divide Signed Doubleword VX-form (vdivsd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVSQ, 0xfc0007ff00000000, 0x1000010b00000000, 0x0, // Vector Divide Signed Quadword VX-form (vdivsq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVSW, 0xfc0007ff00000000, 0x1000018b00000000, 0x0, // Vector Divide Signed Word VX-form (vdivsw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVUD, 0xfc0007ff00000000, 0x100000cb00000000, 0x0, // Vector Divide Unsigned Doubleword VX-form (vdivud VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVUQ, 0xfc0007ff00000000, 0x1000000b00000000, 0x0, // Vector Divide Unsigned Quadword VX-form (vdivuq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VDIVUW, 0xfc0007ff00000000, 0x1000008b00000000, 0x0, // Vector Divide Unsigned Word VX-form (vdivuw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VEXPANDBM, 0xfc1f07ff00000000, 0x1000064200000000, 0x0, // Vector Expand Byte Mask VX-form (vexpandbm VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXPANDDM, 0xfc1f07ff00000000, 0x1003064200000000, 0x0, // Vector Expand Doubleword Mask VX-form (vexpanddm VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXPANDHM, 0xfc1f07ff00000000, 0x1001064200000000, 0x0, // Vector Expand Halfword Mask VX-form (vexpandhm VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXPANDQM, 0xfc1f07ff00000000, 0x1004064200000000, 0x0, // Vector Expand Quadword Mask VX-form (vexpandqm VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXPANDWM, 0xfc1f07ff00000000, 0x1002064200000000, 0x0, // Vector Expand Word Mask VX-form (vexpandwm VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXTDDVLX, 0xfc00003f00000000, 0x1000001e00000000, 0x0, // Vector Extract Double Doubleword to VSR using GPR-specified Left-Index VA-form (vextddvlx VRT,VRA,VRB,RC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_Reg_21_25}},\n\t{VEXTDDVRX, 0xfc00003f00000000, 0x1000001f00000000, 0x0, // Vector Extract Double Doubleword to VSR using GPR-specified Right-Index VA-form (vextddvrx VRT,VRA,VRB,RC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_Reg_21_25}},\n\t{VEXTDUBVLX, 0xfc00003f00000000, 0x1000001800000000, 0x0, // Vector Extract Double Unsigned Byte to VSR using GPR-specified Left-Index VA-form (vextdubvlx VRT,VRA,VRB,RC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_Reg_21_25}},\n\t{VEXTDUBVRX, 0xfc00003f00000000, 0x1000001900000000, 0x0, // Vector Extract Double Unsigned Byte to VSR using GPR-specified Right-Index VA-form (vextdubvrx VRT,VRA,VRB,RC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_Reg_21_25}},\n\t{VEXTDUHVLX, 0xfc00003f00000000, 0x1000001a00000000, 0x0, // Vector Extract Double Unsigned Halfword to VSR using GPR-specified Left-Index VA-form (vextduhvlx VRT,VRA,VRB,RC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_Reg_21_25}},\n\t{VEXTDUHVRX, 0xfc00003f00000000, 0x1000001b00000000, 0x0, // Vector Extract Double Unsigned Halfword to VSR using GPR-specified Right-Index VA-form (vextduhvrx VRT,VRA,VRB,RC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_Reg_21_25}},\n\t{VEXTDUWVLX, 0xfc00003f00000000, 0x1000001c00000000, 0x0, // Vector Extract Double Unsigned Word to VSR using GPR-specified Left-Index VA-form (vextduwvlx VRT,VRA,VRB,RC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_Reg_21_25}},\n\t{VEXTDUWVRX, 0xfc00003f00000000, 0x1000001d00000000, 0x0, // Vector Extract Double Unsigned Word to VSR using GPR-specified Right-Index VA-form (vextduwvrx VRT,VRA,VRB,RC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_Reg_21_25}},\n\t{VEXTRACTBM, 0xfc1f07ff00000000, 0x1008064200000000, 0x0, // Vector Extract Byte Mask VX-form (vextractbm RT,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20}},\n\t{VEXTRACTDM, 0xfc1f07ff00000000, 0x100b064200000000, 0x0, // Vector Extract Doubleword Mask VX-form (vextractdm RT,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20}},\n\t{VEXTRACTHM, 0xfc1f07ff00000000, 0x1009064200000000, 0x0, // Vector Extract Halfword Mask VX-form (vextracthm RT,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20}},\n\t{VEXTRACTQM, 0xfc1f07ff00000000, 0x100c064200000000, 0x0, // Vector Extract Quadword Mask VX-form (vextractqm RT,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20}},\n\t{VEXTRACTWM, 0xfc1f07ff00000000, 0x100a064200000000, 0x0, // Vector Extract Word Mask VX-form (vextractwm RT,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20}},\n\t{VEXTSD2Q, 0xfc1f07ff00000000, 0x101b060200000000, 0x0, // Vector Extend Sign Doubleword to Quadword VX-form (vextsd2q VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VGNB, 0xfc0007ff00000000, 0x100004cc00000000, 0x18000000000000, // Vector Gather every Nth Bit VX-form (vgnb RT,VRB,N)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_13_15}},\n\t{VINSBLX, 0xfc0007ff00000000, 0x1000020f00000000, 0x0, // Vector Insert Byte from GPR using GPR-specified Left-Index VX-form (vinsblx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VINSBRX, 0xfc0007ff00000000, 0x1000030f00000000, 0x0, // Vector Insert Byte from GPR using GPR-specified Right-Index VX-form (vinsbrx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VINSBVLX, 0xfc0007ff00000000, 0x1000000f00000000, 0x0, // Vector Insert Byte from VSR using GPR-specified Left-Index VX-form (vinsbvlx VRT,RA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VINSBVRX, 0xfc0007ff00000000, 0x1000010f00000000, 0x0, // Vector Insert Byte from VSR using GPR-specified Right-Index VX-form (vinsbvrx VRT,RA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VINSD, 0xfc0007ff00000000, 0x100001cf00000000, 0x10000000000000, // Vector Insert Doubleword from GPR using immediate-specified index VX-form (vinsd VRT,RB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_16_20, ap_ImmUnsigned_12_15}},\n\t{VINSDLX, 0xfc0007ff00000000, 0x100002cf00000000, 0x0, // Vector Insert Doubleword from GPR using GPR-specified Left-Index VX-form (vinsdlx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VINSDRX, 0xfc0007ff00000000, 0x100003cf00000000, 0x0, // Vector Insert Doubleword from GPR using GPR-specified Right-Index VX-form (vinsdrx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VINSHLX, 0xfc0007ff00000000, 0x1000024f00000000, 0x0, // Vector Insert Halfword from GPR using GPR-specified Left-Index VX-form (vinshlx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VINSHRX, 0xfc0007ff00000000, 0x1000034f00000000, 0x0, // Vector Insert Halfword from GPR using GPR-specified Right-Index VX-form (vinshrx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VINSHVLX, 0xfc0007ff00000000, 0x1000004f00000000, 0x0, // Vector Insert Halfword from VSR using GPR-specified Left-Index VX-form (vinshvlx VRT,RA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VINSHVRX, 0xfc0007ff00000000, 0x1000014f00000000, 0x0, // Vector Insert Halfword from VSR using GPR-specified Right-Index VX-form (vinshvrx VRT,RA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VINSW, 0xfc0007ff00000000, 0x100000cf00000000, 0x10000000000000, // Vector Insert Word from GPR using immediate-specified index VX-form (vinsw VRT,RB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_16_20, ap_ImmUnsigned_12_15}},\n\t{VINSWLX, 0xfc0007ff00000000, 0x1000028f00000000, 0x0, // Vector Insert Word from GPR using GPR-specified Left-Index VX-form (vinswlx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VINSWRX, 0xfc0007ff00000000, 0x1000038f00000000, 0x0, // Vector Insert Word from GPR using GPR-specified Right-Index VX-form (vinswrx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VINSWVLX, 0xfc0007ff00000000, 0x1000008f00000000, 0x0, // Vector Insert Word from VSR using GPR-specified Left-Index VX-form (vinswvlx VRT,RA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VINSWVRX, 0xfc0007ff00000000, 0x1000018f00000000, 0x0, // Vector Insert Word from VSR using GPR-specified Left-Index VX-form (vinswvrx VRT,RA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VMODSD, 0xfc0007ff00000000, 0x100007cb00000000, 0x0, // Vector Modulo Signed Doubleword VX-form (vmodsd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMODSQ, 0xfc0007ff00000000, 0x1000070b00000000, 0x0, // Vector Modulo Signed Quadword VX-form (vmodsq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMODSW, 0xfc0007ff00000000, 0x1000078b00000000, 0x0, // Vector Modulo Signed Word VX-form (vmodsw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMODUD, 0xfc0007ff00000000, 0x100006cb00000000, 0x0, // Vector Modulo Unsigned Doubleword VX-form (vmodud VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMODUQ, 0xfc0007ff00000000, 0x1000060b00000000, 0x0, // Vector Modulo Unsigned Quadword VX-form (vmoduq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMODUW, 0xfc0007ff00000000, 0x1000068b00000000, 0x0, // Vector Modulo Unsigned Word VX-form (vmoduw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMSUMCUD, 0xfc00003f00000000, 0x1000001700000000, 0x0, // Vector Multiply-Sum & write Carry-out Unsigned Doubleword VA-form (vmsumcud VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMULESD, 0xfc0007ff00000000, 0x100003c800000000, 0x0, // Vector Multiply Even Signed Doubleword VX-form (vmulesd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULEUD, 0xfc0007ff00000000, 0x100002c800000000, 0x0, // Vector Multiply Even Unsigned Doubleword VX-form (vmuleud VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULHSD, 0xfc0007ff00000000, 0x100003c900000000, 0x0, // Vector Multiply High Signed Doubleword VX-form (vmulhsd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULHSW, 0xfc0007ff00000000, 0x1000038900000000, 0x0, // Vector Multiply High Signed Word VX-form (vmulhsw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULHUD, 0xfc0007ff00000000, 0x100002c900000000, 0x0, // Vector Multiply High Unsigned Doubleword VX-form (vmulhud VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULHUW, 0xfc0007ff00000000, 0x1000028900000000, 0x0, // Vector Multiply High Unsigned Word VX-form (vmulhuw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULLD, 0xfc0007ff00000000, 0x100001c900000000, 0x0, // Vector Multiply Low Doubleword VX-form (vmulld VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULOSD, 0xfc0007ff00000000, 0x100001c800000000, 0x0, // Vector Multiply Odd Signed Doubleword VX-form (vmulosd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULOUD, 0xfc0007ff00000000, 0x100000c800000000, 0x0, // Vector Multiply Odd Unsigned Doubleword VX-form (vmuloud VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPDEPD, 0xfc0007ff00000000, 0x100005cd00000000, 0x0, // Vector Parallel Bits Deposit Doubleword VX-form (vpdepd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPEXTD, 0xfc0007ff00000000, 0x1000058d00000000, 0x0, // Vector Parallel Bits Extract Doubleword VX-form (vpextd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VRLQ, 0xfc0007ff00000000, 0x1000000500000000, 0x0, // Vector Rotate Left Quadword VX-form (vrlq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VRLQMI, 0xfc0007ff00000000, 0x1000004500000000, 0x0, // Vector Rotate Left Quadword then Mask Insert VX-form (vrlqmi VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VRLQNM, 0xfc0007ff00000000, 0x1000014500000000, 0x0, // Vector Rotate Left Quadword then AND with Mask VX-form (vrlqnm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSLDBI, 0xfc00063f00000000, 0x1000001600000000, 0x0, // Vector Shift Left Double by Bit Immediate VN-form (vsldbi VRT,VRA,VRB,SH)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_ImmUnsigned_23_25}},\n\t{VSLQ, 0xfc0007ff00000000, 0x1000010500000000, 0x0, // Vector Shift Left Quadword VX-form (vslq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRAQ, 0xfc0007ff00000000, 0x1000030500000000, 0x0, // Vector Shift Right Algebraic Quadword VX-form (vsraq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRDBI, 0xfc00063f00000000, 0x1000021600000000, 0x0, // Vector Shift Right Double by Bit Immediate VN-form (vsrdbi VRT,VRA,VRB,SH)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_ImmUnsigned_23_25}},\n\t{VSRQ, 0xfc0007ff00000000, 0x1000020500000000, 0x0, // Vector Shift Right Quadword VX-form (vsrq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSTRIBL, 0xfc1f07ff00000000, 0x1000000d00000000, 0x0, // Vector String Isolate Byte Left-justified VX-form (vstribl VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VSTRIBLCC, 0xfc1f07ff00000000, 0x1000040d00000000, 0x0, // Vector String Isolate Byte Left-justified VX-form (vstribl. VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VSTRIBR, 0xfc1f07ff00000000, 0x1001000d00000000, 0x0, // Vector String Isolate Byte Right-justified VX-form (vstribr VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VSTRIBRCC, 0xfc1f07ff00000000, 0x1001040d00000000, 0x0, // Vector String Isolate Byte Right-justified VX-form (vstribr. VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VSTRIHL, 0xfc1f07ff00000000, 0x1002000d00000000, 0x0, // Vector String Isolate Halfword Left-justified VX-form (vstrihl VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VSTRIHLCC, 0xfc1f07ff00000000, 0x1002040d00000000, 0x0, // Vector String Isolate Halfword Left-justified VX-form (vstrihl. VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VSTRIHR, 0xfc1f07ff00000000, 0x1003000d00000000, 0x0, // Vector String Isolate Halfword Right-justified VX-form (vstrihr VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VSTRIHRCC, 0xfc1f07ff00000000, 0x1003040d00000000, 0x0, // Vector String Isolate Halfword Right-justified VX-form (vstrihr. VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCMPEQQP, 0xfc0007fe00000000, 0xfc00008800000000, 0x100000000, // VSX Scalar Compare Equal Quad-Precision X-form (xscmpeqqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSCMPGEQP, 0xfc0007fe00000000, 0xfc00018800000000, 0x100000000, // VSX Scalar Compare Greater Than or Equal Quad-Precision X-form (xscmpgeqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSCMPGTQP, 0xfc0007fe00000000, 0xfc0001c800000000, 0x100000000, // VSX Scalar Compare Greater Than Quad-Precision X-form (xscmpgtqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSCVQPSQZ, 0xfc1f07fe00000000, 0xfc08068800000000, 0x100000000, // VSX Scalar Convert with round to zero Quad-Precision to Signed Quadword X-form (xscvqpsqz VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVQPUQZ, 0xfc1f07fe00000000, 0xfc00068800000000, 0x100000000, // VSX Scalar Convert with round to zero Quad-Precision to Unsigned Quadword X-form (xscvqpuqz VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVSQQP, 0xfc1f07fe00000000, 0xfc0b068800000000, 0x100000000, // VSX Scalar Convert with round Signed Quadword to Quad-Precision X-form (xscvsqqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVUQQP, 0xfc1f07fe00000000, 0xfc03068800000000, 0x100000000, // VSX Scalar Convert with round Unsigned Quadword to Quad-Precision X-form (xscvuqqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSMAXCQP, 0xfc0007fe00000000, 0xfc00054800000000, 0x100000000, // VSX Scalar Maximum Type-C Quad-Precision X-form (xsmaxcqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSMINCQP, 0xfc0007fe00000000, 0xfc0005c800000000, 0x100000000, // VSX Scalar Minimum Type-C Quad-Precision X-form (xsmincqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XVBF16GER2, 0xfc0007f800000000, 0xec00019800000000, 0x60000100000000, // VSX Vector bfloat16 GER (Rank-2 Update) XX3-form (xvbf16ger2 AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVBF16GER2NN, 0xfc0007f800000000, 0xec00079000000000, 0x60000100000000, // VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply, Negative accumulate XX3-form (xvbf16ger2nn AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVBF16GER2NP, 0xfc0007f800000000, 0xec00039000000000, 0x60000100000000, // VSX Vector bfloat16 GER (Rank-2 Update) Negative multiply, Positive accumulate XX3-form (xvbf16ger2np AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVBF16GER2PN, 0xfc0007f800000000, 0xec00059000000000, 0x60000100000000, // VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply, Negative accumulate XX3-form (xvbf16ger2pn AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVBF16GER2PP, 0xfc0007f800000000, 0xec00019000000000, 0x60000100000000, // VSX Vector bfloat16 GER (Rank-2 Update) Positive multiply, Positive accumulate XX3-form (xvbf16ger2pp AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCVBF16SPN, 0xfc1f07fc00000000, 0xf010076c00000000, 0x0, // VSX Vector Convert bfloat16 to Single-Precision format Non-signaling XX2-form (xvcvbf16spn XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSPBF16, 0xfc1f07fc00000000, 0xf011076c00000000, 0x0, // VSX Vector Convert with round Single-Precision to bfloat16 format XX2-form (xvcvspbf16 XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVF16GER2, 0xfc0007f800000000, 0xec00009800000000, 0x60000100000000, // VSX Vector 16-bit Floating-Point GER (rank-2 update) XX3-form (xvf16ger2 AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF16GER2NN, 0xfc0007f800000000, 0xec00069000000000, 0x60000100000000, // VSX Vector 16-bit Floating-Point GER (rank-2 update) Negative multiply, Negative accumulate XX3-form (xvf16ger2nn AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF16GER2NP, 0xfc0007f800000000, 0xec00029000000000, 0x60000100000000, // VSX Vector 16-bit Floating-Point GER (rank-2 update) Negative multiply, Positive accumulate XX3-form (xvf16ger2np AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF16GER2PN, 0xfc0007f800000000, 0xec00049000000000, 0x60000100000000, // VSX Vector 16-bit Floating-Point GER (rank-2 update) Positive multiply, Negative accumulate XX3-form (xvf16ger2pn AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF16GER2PP, 0xfc0007f800000000, 0xec00009000000000, 0x60000100000000, // VSX Vector 16-bit Floating-Point GER (rank-2 update) Positive multiply, Positive accumulate XX3-form (xvf16ger2pp AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF32GER, 0xfc0007f800000000, 0xec0000d800000000, 0x60000100000000, // VSX Vector 32-bit Floating-Point GER (rank-1 update) XX3-form (xvf32ger AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF32GERNN, 0xfc0007f800000000, 0xec0006d000000000, 0x60000100000000, // VSX Vector 32-bit Floating-Point GER (rank-1 update) Negative multiply, Negative accumulate XX3-form (xvf32gernn AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF32GERNP, 0xfc0007f800000000, 0xec0002d000000000, 0x60000100000000, // VSX Vector 32-bit Floating-Point GER (rank-1 update) Negative multiply, Positive accumulate XX3-form (xvf32gernp AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF32GERPN, 0xfc0007f800000000, 0xec0004d000000000, 0x60000100000000, // VSX Vector 32-bit Floating-Point GER (rank-1 update) Positive multiply, Negative accumulate XX3-form (xvf32gerpn AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF32GERPP, 0xfc0007f800000000, 0xec0000d000000000, 0x60000100000000, // VSX Vector 32-bit Floating-Point GER (rank-1 update) Positive multiply, Positive accumulate XX3-form (xvf32gerpp AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF64GER, 0xfc0007f800000000, 0xec0001d800000000, 0x60000100000000, // VSX Vector 64-bit Floating-Point GER (rank-1 update) XX3-form (xvf64ger AT,XAp,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF64GERNN, 0xfc0007f800000000, 0xec0007d000000000, 0x60000100000000, // VSX Vector 64-bit Floating-Point GER (rank-1 update) Negative multiply, Negative accumulate XX3-form (xvf64gernn AT,XAp,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF64GERNP, 0xfc0007f800000000, 0xec0003d000000000, 0x60000100000000, // VSX Vector 64-bit Floating-Point GER (rank-1 update) Negative multiply, Positive accumulate XX3-form (xvf64gernp AT,XAp,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF64GERPN, 0xfc0007f800000000, 0xec0005d000000000, 0x60000100000000, // VSX Vector 64-bit Floating-Point GER (rank-1 update) Positive multiply, Negative accumulate XX3-form (xvf64gerpn AT,XAp,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVF64GERPP, 0xfc0007f800000000, 0xec0001d000000000, 0x60000100000000, // VSX Vector 64-bit Floating-Point GER (rank-1 update) Positive multiply, Positive accumulate XX3-form (xvf64gerpp AT,XAp,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVI16GER2, 0xfc0007f800000000, 0xec00025800000000, 0x60000100000000, // VSX Vector 16-bit Signed Integer GER (rank-2 update) XX3-form (xvi16ger2 AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVI16GER2PP, 0xfc0007f800000000, 0xec00035800000000, 0x60000100000000, // VSX Vector 16-bit Signed Integer GER (rank-2 update) Positive multiply, Positive accumulate XX3-form (xvi16ger2pp AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVI16GER2S, 0xfc0007f800000000, 0xec00015800000000, 0x60000100000000, // VSX Vector 16-bit Signed Integer GER (rank-2 update) with Saturation XX3-form (xvi16ger2s AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVI16GER2SPP, 0xfc0007f800000000, 0xec00015000000000, 0x60000100000000, // VSX Vector 16-bit Signed Integer GER (rank-2 update) with Saturation Positive multiply, Positive accumulate XX3-form (xvi16ger2spp AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVI4GER8, 0xfc0007f800000000, 0xec00011800000000, 0x60000100000000, // VSX Vector 4-bit Signed Integer GER (rank-8 update) XX3-form (xvi4ger8 AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVI4GER8PP, 0xfc0007f800000000, 0xec00011000000000, 0x60000100000000, // VSX Vector 4-bit Signed Integer GER (rank-8 update) Positive multiply, Positive accumulate XX3-form (xvi4ger8pp AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVI8GER4, 0xfc0007f800000000, 0xec00001800000000, 0x60000100000000, // VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) XX3-form (xvi8ger4 AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVI8GER4PP, 0xfc0007f800000000, 0xec00001000000000, 0x60000100000000, // VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) Positive multiply, Positive accumulate XX3-form (xvi8ger4pp AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVI8GER4SPP, 0xfc0007f800000000, 0xec00031800000000, 0x60000100000000, // VSX Vector 8-bit Signed/Unsigned Integer GER (rank-4 update) with Saturate Positive multiply, Positive accumulate XX3-form (xvi8ger4spp AT,XA,XB)\n\t\t[6]*argField{ap_MMAReg_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVTLSBB, 0xfc1f07fc00000000, 0xf002076c00000000, 0x60000100000000, // VSX Vector Test Least-Significant Bit by Byte XX2-form (xvtlsbb BF,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_30_30_16_20}},\n\t{XXBLENDVB, 0xfff00000fc000030, 0x500000084000000, 0xfffff00000000, // VSX Vector Blend Variable Byte 8RR:XX4-form (xxblendvb XT,XA,XB,XC)\n\t\t[6]*argField{ap_VecSReg_63_63_38_42, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_VecSReg_60_60_53_57}},\n\t{XXBLENDVD, 0xfff00000fc000030, 0x500000084000030, 0xfffff00000000, // VSX Vector Blend Variable Doubleword 8RR:XX4-form (xxblendvd XT,XA,XB,XC)\n\t\t[6]*argField{ap_VecSReg_63_63_38_42, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_VecSReg_60_60_53_57}},\n\t{XXBLENDVH, 0xfff00000fc000030, 0x500000084000010, 0xfffff00000000, // VSX Vector Blend Variable Halfword 8RR:XX4-form (xxblendvh XT,XA,XB,XC)\n\t\t[6]*argField{ap_VecSReg_63_63_38_42, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_VecSReg_60_60_53_57}},\n\t{XXBLENDVW, 0xfff00000fc000030, 0x500000084000020, 0xfffff00000000, // VSX Vector Blend Variable Word 8RR:XX4-form (xxblendvw XT,XA,XB,XC)\n\t\t[6]*argField{ap_VecSReg_63_63_38_42, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_VecSReg_60_60_53_57}},\n\t{XXEVAL, 0xfff00000fc000030, 0x500000088000010, 0xfff0000000000, // VSX Vector Evaluate 8RR-XX4-form (xxeval XT,XA,XB,XC,IMM)\n\t\t[6]*argField{ap_VecSReg_63_63_38_42, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_VecSReg_60_60_53_57, ap_ImmUnsigned_24_31}},\n\t{XXGENPCVBM, 0xfc0007fe00000000, 0xf000072800000000, 0x0, // VSX Vector Generate PCV from Byte Mask X-form (xxgenpcvbm XT,VRB,IMM)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecReg_16_20, ap_ImmUnsigned_11_15}},\n\t{XXGENPCVDM, 0xfc0007fe00000000, 0xf000076a00000000, 0x0, // VSX Vector Generate PCV from Doubleword Mask X-form (xxgenpcvdm XT,VRB,IMM)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecReg_16_20, ap_ImmUnsigned_11_15}},\n\t{XXGENPCVHM, 0xfc0007fe00000000, 0xf000072a00000000, 0x0, // VSX Vector Generate PCV from Halfword Mask X-form (xxgenpcvhm XT,VRB,IMM)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecReg_16_20, ap_ImmUnsigned_11_15}},\n\t{XXGENPCVWM, 0xfc0007fe00000000, 0xf000076800000000, 0x0, // VSX Vector Generate PCV from Word Mask X-form (xxgenpcvwm XT,VRB,IMM)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecReg_16_20, ap_ImmUnsigned_11_15}},\n\t{XXMFACC, 0xfc1f07fe00000000, 0x7c00016200000000, 0x60f80100000000, // VSX Move From Accumulator X-form (xxmfacc AS)\n\t\t[6]*argField{ap_MMAReg_6_8}},\n\t{XXMTACC, 0xfc1f07fe00000000, 0x7c01016200000000, 0x60f80100000000, // VSX Move To Accumulator X-form (xxmtacc AT)\n\t\t[6]*argField{ap_MMAReg_6_8}},\n\t{XXPERMX, 0xfff00000fc000030, 0x500000088000000, 0xffff800000000, // VSX Vector Permute Extended 8RR:XX4-form (xxpermx XT,XA,XB,XC,UIM)\n\t\t[6]*argField{ap_VecSReg_63_63_38_42, ap_VecSReg_61_61_43_47, ap_VecSReg_62_62_48_52, ap_VecSReg_60_60_53_57, ap_ImmUnsigned_29_31}},\n\t{XXSETACCZ, 0xfc1f07fe00000000, 0x7c03016200000000, 0x60f80100000000, // VSX Set Accumulator to Zero X-form (xxsetaccz AT)\n\t\t[6]*argField{ap_MMAReg_6_8}},\n\t{XXSPLTI32DX, 0xfff00000fc1c0000, 0x500000080000000, 0xf000000000000, // VSX Vector Splat Immediate32 Doubleword Indexed 8RR:D-form (xxsplti32dx XT,IX,IMM32)\n\t\t[6]*argField{ap_VecSReg_47_47_38_42, ap_ImmUnsigned_46_46, ap_ImmUnsigned_16_31_48_63}},\n\t{XXSPLTIDP, 0xfff00000fc1e0000, 0x500000080040000, 0xf000000000000, // VSX Vector Splat Immediate Double-Precision 8RR:D-form (xxspltidp XT,IMM32)\n\t\t[6]*argField{ap_VecSReg_47_47_38_42, ap_ImmUnsigned_16_31_48_63}},\n\t{XXSPLTIW, 0xfff00000fc1e0000, 0x500000080060000, 0xf000000000000, // VSX Vector Splat Immediate Word 8RR:D-form (xxspltiw XT,IMM32)\n\t\t[6]*argField{ap_VecSReg_47_47_38_42, ap_ImmUnsigned_16_31_48_63}},\n\t{MSGCLRU, 0xfc0007fe00000000, 0x7c0000dc00000000, 0x3ff000100000000, // Ultravisor Message Clear X-form (msgclru RB)\n\t\t[6]*argField{ap_Reg_16_20}},\n\t{MSGSNDU, 0xfc0007fe00000000, 0x7c00009c00000000, 0x3ff000100000000, // Ultravisor Message SendX-form (msgsndu RB)\n\t\t[6]*argField{ap_Reg_16_20}},\n\t{URFID, 0xfc0007fe00000000, 0x4c00026400000000, 0x3fff80100000000, // Ultravisor Return From Interrupt Doubleword XL-form (urfid)\n\t\t[6]*argField{}},\n\t{ADDEX, 0xfc0001fe00000000, 0x7c00015400000000, 0x100000000, // Add Extended using alternate carry bit Z23-form (addex RT,RA,RB,CY)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_21_22}},\n\t{MFFSCDRN, 0xfc1f07fe00000000, 0xfc14048e00000000, 0x100000000, // Move From FPSCR Control & Set DRN X-form (mffscdrn FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{MFFSCDRNI, 0xfc1f07fe00000000, 0xfc15048e00000000, 0xc00100000000, // Move From FPSCR Control & Set DRN Immediate X-form (mffscdrni FRT,DRM)\n\t\t[6]*argField{ap_FPReg_6_10, ap_ImmUnsigned_18_20}},\n\t{MFFSCE, 0xfc1f07fe00000000, 0xfc01048e00000000, 0xf80100000000, // Move From FPSCR & Clear Enables X-form (mffsce FRT)\n\t\t[6]*argField{ap_FPReg_6_10}},\n\t{MFFSCRN, 0xfc1f07fe00000000, 0xfc16048e00000000, 0x100000000, // Move From FPSCR Control & Set RN X-form (mffscrn FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{MFFSCRNI, 0xfc1f07fe00000000, 0xfc17048e00000000, 0xe00100000000, // Move From FPSCR Control & Set RN Immediate X-form (mffscrni FRT,RM)\n\t\t[6]*argField{ap_FPReg_6_10, ap_ImmUnsigned_19_20}},\n\t{MFFSL, 0xfc1f07fe00000000, 0xfc18048e00000000, 0xf80100000000, // Move From FPSCR Lightweight X-form (mffsl FRT)\n\t\t[6]*argField{ap_FPReg_6_10}},\n\t{SLBIAG, 0xfc0007fe00000000, 0x7c0006a400000000, 0x1ef80100000000, // SLB Invalidate All Global X-form (slbiag RS, L)\n\t\t[6]*argField{ap_Reg_6_10, ap_ImmUnsigned_15_15}},\n\t{VMSUMUDM, 0xfc00003f00000000, 0x1000002300000000, 0x0, // Vector Multiply-Sum Unsigned Doubleword Modulo VA-form (vmsumudm VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{ADDPCIS, 0xfc00003e00000000, 0x4c00000400000000, 0x0, // Add PC Immediate Shifted DX-form (addpcis RT,D)\n\t\t[6]*argField{ap_Reg_6_10, ap_ImmSigned_16_25_11_15_31_31}},\n\t{BCDCFNCC, 0xfc1f05ff00000000, 0x1007058100000000, 0x0, // Decimal Convert From National VX-form (bcdcfn. VRT,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCDCFSQCC, 0xfc1f05ff00000000, 0x1002058100000000, 0x0, // Decimal Convert From Signed Quadword VX-form (bcdcfsq. VRT,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCDCFZCC, 0xfc1f05ff00000000, 0x1006058100000000, 0x0, // Decimal Convert From Zoned VX-form (bcdcfz. VRT,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCDCPSGNCC, 0xfc0007ff00000000, 0x1000034100000000, 0x0, // Decimal Copy Sign VX-form (bcdcpsgn. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{BCDCTNCC, 0xfc1f05ff00000000, 0x1005058100000000, 0x20000000000, // Decimal Convert To National VX-form (bcdctn. VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{BCDCTSQCC, 0xfc1f05ff00000000, 0x1000058100000000, 0x20000000000, // Decimal Convert To Signed Quadword VX-form (bcdctsq. VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{BCDCTZCC, 0xfc1f05ff00000000, 0x1004058100000000, 0x0, // Decimal Convert To Zoned VX-form (bcdctz. VRT,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCDSCC, 0xfc0005ff00000000, 0x100004c100000000, 0x0, // Decimal Shift VX-form (bcds. VRT,VRA,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCDSETSGNCC, 0xfc1f05ff00000000, 0x101f058100000000, 0x0, // Decimal Set Sign VX-form (bcdsetsgn. VRT,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCDSRCC, 0xfc0005ff00000000, 0x100005c100000000, 0x0, // Decimal Shift and Round VX-form (bcdsr. VRT,VRA,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCDTRUNCCC, 0xfc0005ff00000000, 0x1000050100000000, 0x0, // Decimal Truncate VX-form (bcdtrunc. VRT,VRA,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCDUSCC, 0xfc0005ff00000000, 0x1000048100000000, 0x20000000000, // Decimal Unsigned Shift VX-form (bcdus. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{BCDUTRUNCCC, 0xfc0005ff00000000, 0x1000054100000000, 0x20000000000, // Decimal Unsigned Truncate VX-form (bcdutrunc. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{CMPEQB, 0xfc0007fe00000000, 0x7c0001c000000000, 0x60000100000000, // Compare Equal Byte X-form (cmpeqb BF,RA,RB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_Reg_16_20}},\n\t{CMPRB, 0xfc0007fe00000000, 0x7c00018000000000, 0x40000100000000, // Compare Ranged Byte X-form (cmprb BF,L,RA,RB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_ImmUnsigned_10_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{CNTTZD, 0xfc0007ff00000000, 0x7c00047400000000, 0xf80000000000, // Count Trailing Zeros Doubleword X-form (cnttzd RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{CNTTZDCC, 0xfc0007ff00000000, 0x7c00047500000000, 0xf80000000000, // Count Trailing Zeros Doubleword X-form (cnttzd. RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{CNTTZW, 0xfc0007ff00000000, 0x7c00043400000000, 0xf80000000000, // Count Trailing Zeros Word X-form (cnttzw RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{CNTTZWCC, 0xfc0007ff00000000, 0x7c00043500000000, 0xf80000000000, // Count Trailing Zeros Word X-form (cnttzw. RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{COPY, 0xfc2007fe00000000, 0x7c20060c00000000, 0x3c0000100000000, // Copy X-form (copy RA,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_16_20}},\n\t{CPABORT, 0xfc0007fe00000000, 0x7c00068c00000000, 0x3fff80100000000, // Copy-Paste Abort X-form (cpabort)\n\t\t[6]*argField{}},\n\t{DARN, 0xfc0007fe00000000, 0x7c0005e600000000, 0x1cf80100000000, // Deliver A Random Number X-form (darn RT,L)\n\t\t[6]*argField{ap_Reg_6_10, ap_ImmUnsigned_14_15}},\n\t{DTSTSFI, 0xfc0007fe00000000, 0xec00054600000000, 0x40000100000000, // DFP Test Significance Immediate X-form (dtstsfi BF,UIM,FRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_ImmUnsigned_10_15, ap_FPReg_16_20}},\n\t{DTSTSFIQ, 0xfc0007fe00000000, 0xfc00054600000000, 0x40000100000000, // DFP Test Significance Immediate Quad X-form (dtstsfiq BF,UIM,FRBp)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_ImmUnsigned_10_15, ap_FPReg_16_20}},\n\t{EXTSWSLI, 0xfc0007fd00000000, 0x7c0006f400000000, 0x0, // Extend Sign Word and Shift Left Immediate XS-form (extswsli RA,RS,SH)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20}},\n\t{EXTSWSLICC, 0xfc0007fd00000000, 0x7c0006f500000000, 0x0, // Extend Sign Word and Shift Left Immediate XS-form (extswsli. RA,RS,SH)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20}},\n\t{LDAT, 0xfc0007fe00000000, 0x7c0004cc00000000, 0x100000000, // Load Doubleword ATomic X-form (ldat RT,RA,FC)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmUnsigned_16_20}},\n\t{LWAT, 0xfc0007fe00000000, 0x7c00048c00000000, 0x100000000, // Load Word ATomic X-form (lwat RT,RA,FC)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmUnsigned_16_20}},\n\t{LXSD, 0xfc00000300000000, 0xe400000200000000, 0x0, // Load VSX Scalar Doubleword DS-form (lxsd VRT,DS(RA))\n\t\t[6]*argField{ap_VecReg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{LXSIBZX, 0xfc0007fe00000000, 0x7c00061a00000000, 0x0, // Load VSX Scalar as Integer Byte & Zero Indexed X-form (lxsibzx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXSIHZX, 0xfc0007fe00000000, 0x7c00065a00000000, 0x0, // Load VSX Scalar as Integer Halfword & Zero Indexed X-form (lxsihzx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXSSP, 0xfc00000300000000, 0xe400000300000000, 0x0, // Load VSX Scalar Single-Precision DS-form (lxssp VRT,DS(RA))\n\t\t[6]*argField{ap_VecReg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{LXV, 0xfc00000700000000, 0xf400000100000000, 0x0, // Load VSX Vector DQ-form (lxv XT,DQ(RA))\n\t\t[6]*argField{ap_VecSReg_28_28_6_10, ap_Offset_16_27_shift4, ap_Reg_11_15}},\n\t{LXVB16X, 0xfc0007fe00000000, 0x7c0006d800000000, 0x0, // Load VSX Vector Byte*16 Indexed X-form (lxvb16x XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVH8X, 0xfc0007fe00000000, 0x7c00065800000000, 0x0, // Load VSX Vector Halfword*8 Indexed X-form (lxvh8x XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVL, 0xfc0007fe00000000, 0x7c00021a00000000, 0x0, // Load VSX Vector with Length X-form (lxvl XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVLL, 0xfc0007fe00000000, 0x7c00025a00000000, 0x0, // Load VSX Vector with Length Left-justified X-form (lxvll XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVWSX, 0xfc0007fe00000000, 0x7c0002d800000000, 0x0, // Load VSX Vector Word & Splat Indexed X-form (lxvwsx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVX, 0xfc0007be00000000, 0x7c00021800000000, 0x4000000000, // Load VSX Vector Indexed X-form (lxvx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MADDHD, 0xfc00003f00000000, 0x1000003000000000, 0x0, // Multiply-Add High Doubleword VA-form (maddhd RT,RA,RB,RC)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_Reg_21_25}},\n\t{MADDHDU, 0xfc00003f00000000, 0x1000003100000000, 0x0, // Multiply-Add High Doubleword Unsigned VA-form (maddhdu RT,RA,RB,RC)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_Reg_21_25}},\n\t{MADDLD, 0xfc00003f00000000, 0x1000003300000000, 0x0, // Multiply-Add Low Doubleword VA-form (maddld RT,RA,RB,RC)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_Reg_21_25}},\n\t{MCRXRX, 0xfc0007fe00000000, 0x7c00048000000000, 0x7ff80100000000, // Move to CR from XER Extended X-form (mcrxrx BF)\n\t\t[6]*argField{ap_CondRegField_6_8}},\n\t{MFVSRLD, 0xfc0007fe00000000, 0x7c00026600000000, 0xf80000000000, // Move From VSR Lower Doubleword X-form (mfvsrld RA,XS)\n\t\t[6]*argField{ap_Reg_11_15, ap_VecSReg_31_31_6_10}},\n\t{MODSD, 0xfc0007fe00000000, 0x7c00061200000000, 0x100000000, // Modulo Signed Doubleword X-form (modsd RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MODSW, 0xfc0007fe00000000, 0x7c00061600000000, 0x100000000, // Modulo Signed Word X-form (modsw RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MODUD, 0xfc0007fe00000000, 0x7c00021200000000, 0x100000000, // Modulo Unsigned Doubleword X-form (modud RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MODUW, 0xfc0007fe00000000, 0x7c00021600000000, 0x100000000, // Modulo Unsigned Word X-form (moduw RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MSGSYNC, 0xfc0007fe00000000, 0x7c0006ec00000000, 0x3fff80100000000, // Message Synchronize X-form (msgsync)\n\t\t[6]*argField{}},\n\t{MTVSRDD, 0xfc0007fe00000000, 0x7c00036600000000, 0x0, // Move To VSR Double Doubleword X-form (mtvsrdd XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MTVSRWS, 0xfc0007fe00000000, 0x7c00032600000000, 0xf80000000000, // Move To VSR Word & Splat X-form (mtvsrws XT,RA)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15}},\n\t{PASTECC, 0xfc0007ff00000000, 0x7c00070d00000000, 0x3c0000000000000, // Paste X-form (paste. RA,RB,L)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_10_10}},\n\t{SETB, 0xfc0007fe00000000, 0x7c00010000000000, 0x3f80100000000, // Set Boolean X-form (setb RT,BFA)\n\t\t[6]*argField{ap_Reg_6_10, ap_CondRegField_11_13}},\n\t{SLBIEG, 0xfc0007fe00000000, 0x7c0003a400000000, 0x1f000100000000, // SLB Invalidate Entry Global X-form (slbieg RS,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_16_20}},\n\t{SLBSYNC, 0xfc0007fe00000000, 0x7c0002a400000000, 0x3fff80100000000, // SLB Synchronize X-form (slbsync)\n\t\t[6]*argField{}},\n\t{STDAT, 0xfc0007fe00000000, 0x7c0005cc00000000, 0x100000000, // Store Doubleword ATomic X-form (stdat RS,RA,FC)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmUnsigned_16_20}},\n\t{STOP, 0xfc0007fe00000000, 0x4c0002e400000000, 0x3fff80100000000, // Stop XL-form (stop)\n\t\t[6]*argField{}},\n\t{STWAT, 0xfc0007fe00000000, 0x7c00058c00000000, 0x100000000, // Store Word ATomic X-form (stwat RS,RA,FC)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmUnsigned_16_20}},\n\t{STXSD, 0xfc00000300000000, 0xf400000200000000, 0x0, // Store VSX Scalar Doubleword DS-form (stxsd VRS,DS(RA))\n\t\t[6]*argField{ap_VecReg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{STXSIBX, 0xfc0007fe00000000, 0x7c00071a00000000, 0x0, // Store VSX Scalar as Integer Byte Indexed X-form (stxsibx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXSIHX, 0xfc0007fe00000000, 0x7c00075a00000000, 0x0, // Store VSX Scalar as Integer Halfword Indexed X-form (stxsihx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXSSP, 0xfc00000300000000, 0xf400000300000000, 0x0, // Store VSX Scalar Single DS-form (stxssp VRS,DS(RA))\n\t\t[6]*argField{ap_VecReg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{STXV, 0xfc00000700000000, 0xf400000500000000, 0x0, // Store VSX Vector DQ-form (stxv XS,DQ(RA))\n\t\t[6]*argField{ap_VecSReg_28_28_6_10, ap_Offset_16_27_shift4, ap_Reg_11_15}},\n\t{STXVB16X, 0xfc0007fe00000000, 0x7c0007d800000000, 0x0, // Store VSX Vector Byte*16 Indexed X-form (stxvb16x XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVH8X, 0xfc0007fe00000000, 0x7c00075800000000, 0x0, // Store VSX Vector Halfword*8 Indexed X-form (stxvh8x XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVL, 0xfc0007fe00000000, 0x7c00031a00000000, 0x0, // Store VSX Vector with Length X-form (stxvl XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVLL, 0xfc0007fe00000000, 0x7c00035a00000000, 0x0, // Store VSX Vector with Length Left-justified X-form (stxvll XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVX, 0xfc0007fe00000000, 0x7c00031800000000, 0x0, // Store VSX Vector Indexed X-form (stxvx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VABSDUB, 0xfc0007ff00000000, 0x1000040300000000, 0x0, // Vector Absolute Difference Unsigned Byte VX-form (vabsdub VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VABSDUH, 0xfc0007ff00000000, 0x1000044300000000, 0x0, // Vector Absolute Difference Unsigned Halfword VX-form (vabsduh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VABSDUW, 0xfc0007ff00000000, 0x1000048300000000, 0x0, // Vector Absolute Difference Unsigned Word VX-form (vabsduw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VBPERMD, 0xfc0007ff00000000, 0x100005cc00000000, 0x0, // Vector Bit Permute Doubleword VX-form (vbpermd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCLZLSBB, 0xfc1f07ff00000000, 0x1000060200000000, 0x0, // Vector Count Leading Zero Least-Significant Bits Byte VX-form (vclzlsbb RT,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20}},\n\t{VCMPNEB, 0xfc0007ff00000000, 0x1000000700000000, 0x0, // Vector Compare Not Equal Byte VC-form (vcmpneb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEBCC, 0xfc0007ff00000000, 0x1000040700000000, 0x0, // Vector Compare Not Equal Byte VC-form (vcmpneb. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEH, 0xfc0007ff00000000, 0x1000004700000000, 0x0, // Vector Compare Not Equal Halfword VC-form (vcmpneh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEHCC, 0xfc0007ff00000000, 0x1000044700000000, 0x0, // Vector Compare Not Equal Halfword VC-form (vcmpneh. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEW, 0xfc0007ff00000000, 0x1000008700000000, 0x0, // Vector Compare Not Equal Word VC-form (vcmpnew VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEWCC, 0xfc0007ff00000000, 0x1000048700000000, 0x0, // Vector Compare Not Equal Word VC-form (vcmpnew. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEZB, 0xfc0007ff00000000, 0x1000010700000000, 0x0, // Vector Compare Not Equal or Zero Byte VC-form (vcmpnezb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEZBCC, 0xfc0007ff00000000, 0x1000050700000000, 0x0, // Vector Compare Not Equal or Zero Byte VC-form (vcmpnezb. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEZH, 0xfc0007ff00000000, 0x1000014700000000, 0x0, // Vector Compare Not Equal or Zero Halfword VC-form (vcmpnezh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEZHCC, 0xfc0007ff00000000, 0x1000054700000000, 0x0, // Vector Compare Not Equal or Zero Halfword VC-form (vcmpnezh. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEZW, 0xfc0007ff00000000, 0x1000018700000000, 0x0, // Vector Compare Not Equal or Zero Word VC-form (vcmpnezw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPNEZWCC, 0xfc0007ff00000000, 0x1000058700000000, 0x0, // Vector Compare Not Equal or Zero Word VC-form (vcmpnezw. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCTZB, 0xfc1f07ff00000000, 0x101c060200000000, 0x0, // Vector Count Trailing Zeros Byte VX-form (vctzb VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VCTZD, 0xfc1f07ff00000000, 0x101f060200000000, 0x0, // Vector Count Trailing Zeros Doubleword VX-form (vctzd VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VCTZH, 0xfc1f07ff00000000, 0x101d060200000000, 0x0, // Vector Count Trailing Zeros Halfword VX-form (vctzh VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VCTZLSBB, 0xfc1f07ff00000000, 0x1001060200000000, 0x0, // Vector Count Trailing Zero Least-Significant Bits Byte VX-form (vctzlsbb RT,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecReg_16_20}},\n\t{VCTZW, 0xfc1f07ff00000000, 0x101e060200000000, 0x0, // Vector Count Trailing Zeros Word VX-form (vctzw VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXTRACTD, 0xfc0007ff00000000, 0x100002cd00000000, 0x10000000000000, // Vector Extract Doubleword to VSR using immediate-specified index VX-form (vextractd VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_12_15}},\n\t{VEXTRACTUB, 0xfc0007ff00000000, 0x1000020d00000000, 0x10000000000000, // Vector Extract Unsigned Byte to VSR using immediate-specified index VX-form (vextractub VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_12_15}},\n\t{VEXTRACTUH, 0xfc0007ff00000000, 0x1000024d00000000, 0x10000000000000, // Vector Extract Unsigned Halfword to VSR using immediate-specified index VX-form (vextractuh VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_12_15}},\n\t{VEXTRACTUW, 0xfc0007ff00000000, 0x1000028d00000000, 0x10000000000000, // Vector Extract Unsigned Word to VSR using immediate-specified index VX-form (vextractuw VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_12_15}},\n\t{VEXTSB2D, 0xfc1f07ff00000000, 0x1018060200000000, 0x0, // Vector Extend Sign Byte To Doubleword VX-form (vextsb2d VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXTSB2W, 0xfc1f07ff00000000, 0x1010060200000000, 0x0, // Vector Extend Sign Byte To Word VX-form (vextsb2w VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXTSH2D, 0xfc1f07ff00000000, 0x1019060200000000, 0x0, // Vector Extend Sign Halfword To Doubleword VX-form (vextsh2d VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXTSH2W, 0xfc1f07ff00000000, 0x1011060200000000, 0x0, // Vector Extend Sign Halfword To Word VX-form (vextsh2w VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXTSW2D, 0xfc1f07ff00000000, 0x101a060200000000, 0x0, // Vector Extend Sign Word To Doubleword VX-form (vextsw2d VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VEXTUBLX, 0xfc0007ff00000000, 0x1000060d00000000, 0x0, // Vector Extract Unsigned Byte to GPR using GPR-specified Left-Index VX-form (vextublx RT,RA,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VEXTUBRX, 0xfc0007ff00000000, 0x1000070d00000000, 0x0, // Vector Extract Unsigned Byte to GPR using GPR-specified Right-Index VX-form (vextubrx RT,RA,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VEXTUHLX, 0xfc0007ff00000000, 0x1000064d00000000, 0x0, // Vector Extract Unsigned Halfword to GPR using GPR-specified Left-Index VX-form (vextuhlx RT,RA,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VEXTUHRX, 0xfc0007ff00000000, 0x1000074d00000000, 0x0, // Vector Extract Unsigned Halfword to GPR using GPR-specified Right-Index VX-form (vextuhrx RT,RA,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VEXTUWLX, 0xfc0007ff00000000, 0x1000068d00000000, 0x0, // Vector Extract Unsigned Word to GPR using GPR-specified Left-Index VX-form (vextuwlx RT,RA,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VEXTUWRX, 0xfc0007ff00000000, 0x1000078d00000000, 0x0, // Vector Extract Unsigned Word to GPR using GPR-specified Right-Index VX-form (vextuwrx RT,RA,VRB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_VecReg_16_20}},\n\t{VINSERTB, 0xfc0007ff00000000, 0x1000030d00000000, 0x10000000000000, // Vector Insert Byte from VSR using immediate-specified index VX-form (vinsertb VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_12_15}},\n\t{VINSERTD, 0xfc0007ff00000000, 0x100003cd00000000, 0x10000000000000, // Vector Insert Doubleword from VSR using immediate-specified index VX-form (vinsertd VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_12_15}},\n\t{VINSERTH, 0xfc0007ff00000000, 0x1000034d00000000, 0x10000000000000, // Vector Insert Halfword from VSR using immediate-specified index VX-form (vinserth VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_12_15}},\n\t{VINSERTW, 0xfc0007ff00000000, 0x1000038d00000000, 0x10000000000000, // Vector Insert Word from VSR using immediate-specified index VX-form (vinsertw VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_12_15}},\n\t{VMUL10CUQ, 0xfc0007ff00000000, 0x1000000100000000, 0xf80000000000, // Vector Multiply-by-10 & write Carry-out Unsigned Quadword VX-form (vmul10cuq VRT,VRA)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15}},\n\t{VMUL10ECUQ, 0xfc0007ff00000000, 0x1000004100000000, 0x0, // Vector Multiply-by-10 Extended & write Carry-out Unsigned Quadword VX-form (vmul10ecuq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMUL10EUQ, 0xfc0007ff00000000, 0x1000024100000000, 0x0, // Vector Multiply-by-10 Extended Unsigned Quadword VX-form (vmul10euq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMUL10UQ, 0xfc0007ff00000000, 0x1000020100000000, 0xf80000000000, // Vector Multiply-by-10 Unsigned Quadword VX-form (vmul10uq VRT,VRA)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15}},\n\t{VNEGD, 0xfc1f07ff00000000, 0x1007060200000000, 0x0, // Vector Negate Doubleword VX-form (vnegd VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VNEGW, 0xfc1f07ff00000000, 0x1006060200000000, 0x0, // Vector Negate Word VX-form (vnegw VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VPERMR, 0xfc00003f00000000, 0x1000003b00000000, 0x0, // Vector Permute Right-indexed VA-form (vpermr VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VPRTYBD, 0xfc1f07ff00000000, 0x1009060200000000, 0x0, // Vector Parity Byte Doubleword VX-form (vprtybd VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VPRTYBQ, 0xfc1f07ff00000000, 0x100a060200000000, 0x0, // Vector Parity Byte Quadword VX-form (vprtybq VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VPRTYBW, 0xfc1f07ff00000000, 0x1008060200000000, 0x0, // Vector Parity Byte Word VX-form (vprtybw VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VRLDMI, 0xfc0007ff00000000, 0x100000c500000000, 0x0, // Vector Rotate Left Doubleword then Mask Insert VX-form (vrldmi VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VRLDNM, 0xfc0007ff00000000, 0x100001c500000000, 0x0, // Vector Rotate Left Doubleword then AND with Mask VX-form (vrldnm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VRLWMI, 0xfc0007ff00000000, 0x1000008500000000, 0x0, // Vector Rotate Left Word then Mask Insert VX-form (vrlwmi VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VRLWNM, 0xfc0007ff00000000, 0x1000018500000000, 0x0, // Vector Rotate Left Word then AND with Mask VX-form (vrlwnm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSLV, 0xfc0007ff00000000, 0x1000074400000000, 0x0, // Vector Shift Left Variable VX-form (vslv VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRV, 0xfc0007ff00000000, 0x1000070400000000, 0x0, // Vector Shift Right Variable VX-form (vsrv VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{WAIT, 0xfc0007fe00000000, 0x7c00003c00000000, 0x9cf80100000000, // Wait X-form (wait WC,PL)\n\t\t[6]*argField{ap_ImmUnsigned_9_10, ap_ImmUnsigned_14_15}},\n\t{XSABSQP, 0xfc1f07fe00000000, 0xfc00064800000000, 0x100000000, // VSX Scalar Absolute Quad-Precision X-form (xsabsqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSADDQP, 0xfc0007ff00000000, 0xfc00000800000000, 0x0, // VSX Scalar Add Quad-Precision [using round to Odd] X-form (xsaddqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSADDQPO, 0xfc0007ff00000000, 0xfc00000900000000, 0x0, // VSX Scalar Add Quad-Precision [using round to Odd] X-form (xsaddqpo VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSCMPEQDP, 0xfc0007f800000000, 0xf000001800000000, 0x0, // VSX Scalar Compare Equal Double-Precision XX3-form (xscmpeqdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSCMPEXPDP, 0xfc0007f800000000, 0xf00001d800000000, 0x60000100000000, // VSX Scalar Compare Exponents Double-Precision XX3-form (xscmpexpdp BF,XA,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSCMPEXPQP, 0xfc0007fe00000000, 0xfc00014800000000, 0x60000100000000, // VSX Scalar Compare Exponents Quad-Precision X-form (xscmpexpqp BF,VRA,VRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSCMPGEDP, 0xfc0007f800000000, 0xf000009800000000, 0x0, // VSX Scalar Compare Greater Than or Equal Double-Precision XX3-form (xscmpgedp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSCMPGTDP, 0xfc0007f800000000, 0xf000005800000000, 0x0, // VSX Scalar Compare Greater Than Double-Precision XX3-form (xscmpgtdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSCMPOQP, 0xfc0007fe00000000, 0xfc00010800000000, 0x60000100000000, // VSX Scalar Compare Ordered Quad-Precision X-form (xscmpoqp BF,VRA,VRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSCMPUQP, 0xfc0007fe00000000, 0xfc00050800000000, 0x60000100000000, // VSX Scalar Compare Unordered Quad-Precision X-form (xscmpuqp BF,VRA,VRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSCPSGNQP, 0xfc0007fe00000000, 0xfc0000c800000000, 0x100000000, // VSX Scalar Copy Sign Quad-Precision X-form (xscpsgnqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSCVDPHP, 0xfc1f07fc00000000, 0xf011056c00000000, 0x0, // VSX Scalar Convert with round Double-Precision to Half-Precision format XX2-form (xscvdphp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVDPQP, 0xfc1f07fe00000000, 0xfc16068800000000, 0x100000000, // VSX Scalar Convert Double-Precision to Quad-Precision format X-form (xscvdpqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVHPDP, 0xfc1f07fc00000000, 0xf010056c00000000, 0x0, // VSX Scalar Convert Half-Precision to Double-Precision format XX2-form (xscvhpdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVQPDP, 0xfc1f07ff00000000, 0xfc14068800000000, 0x0, // VSX Scalar Convert with round Quad-Precision to Double-Precision format [using round to Odd] X-form (xscvqpdp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVQPDPO, 0xfc1f07ff00000000, 0xfc14068900000000, 0x0, // VSX Scalar Convert with round Quad-Precision to Double-Precision format [using round to Odd] X-form (xscvqpdpo VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVQPSDZ, 0xfc1f07fe00000000, 0xfc19068800000000, 0x100000000, // VSX Scalar Convert with round to zero Quad-Precision to Signed Doubleword format X-form (xscvqpsdz VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVQPSWZ, 0xfc1f07fe00000000, 0xfc09068800000000, 0x100000000, // VSX Scalar Convert with round to zero Quad-Precision to Signed Word format X-form (xscvqpswz VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVQPUDZ, 0xfc1f07fe00000000, 0xfc11068800000000, 0x100000000, // VSX Scalar Convert with round to zero Quad-Precision to Unsigned Doubleword format X-form (xscvqpudz VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVQPUWZ, 0xfc1f07fe00000000, 0xfc01068800000000, 0x100000000, // VSX Scalar Convert with round to zero Quad-Precision to Unsigned Word format X-form (xscvqpuwz VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVSDQP, 0xfc1f07fe00000000, 0xfc0a068800000000, 0x100000000, // VSX Scalar Convert Signed Doubleword to Quad-Precision format X-form (xscvsdqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSCVUDQP, 0xfc1f07fe00000000, 0xfc02068800000000, 0x100000000, // VSX Scalar Convert Unsigned Doubleword to Quad-Precision format X-form (xscvudqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSDIVQP, 0xfc0007ff00000000, 0xfc00044800000000, 0x0, // VSX Scalar Divide Quad-Precision [using round to Odd] X-form (xsdivqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSDIVQPO, 0xfc0007ff00000000, 0xfc00044900000000, 0x0, // VSX Scalar Divide Quad-Precision [using round to Odd] X-form (xsdivqpo VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSIEXPDP, 0xfc0007fe00000000, 0xf000072c00000000, 0x0, // VSX Scalar Insert Exponent Double-Precision X-form (xsiexpdp XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{XSIEXPQP, 0xfc0007fe00000000, 0xfc0006c800000000, 0x100000000, // VSX Scalar Insert Exponent Quad-Precision X-form (xsiexpqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSMADDQP, 0xfc0007ff00000000, 0xfc00030800000000, 0x0, // VSX Scalar Multiply-Add Quad-Precision [using round to Odd] X-form (xsmaddqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSMADDQPO, 0xfc0007ff00000000, 0xfc00030900000000, 0x0, // VSX Scalar Multiply-Add Quad-Precision [using round to Odd] X-form (xsmaddqpo VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSMAXCDP, 0xfc0007f800000000, 0xf000040000000000, 0x0, // VSX Scalar Maximum Type-C Double-Precision XX3-form (xsmaxcdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMAXJDP, 0xfc0007f800000000, 0xf000048000000000, 0x0, // VSX Scalar Maximum Type-J Double-Precision XX3-form (xsmaxjdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMINCDP, 0xfc0007f800000000, 0xf000044000000000, 0x0, // VSX Scalar Minimum Type-C Double-Precision XX3-form (xsmincdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMINJDP, 0xfc0007f800000000, 0xf00004c000000000, 0x0, // VSX Scalar Minimum Type-J Double-Precision XX3-form (xsminjdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMSUBQP, 0xfc0007ff00000000, 0xfc00034800000000, 0x0, // VSX Scalar Multiply-Subtract Quad-Precision [using round to Odd] X-form (xsmsubqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSMSUBQPO, 0xfc0007ff00000000, 0xfc00034900000000, 0x0, // VSX Scalar Multiply-Subtract Quad-Precision [using round to Odd] X-form (xsmsubqpo VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSMULQP, 0xfc0007ff00000000, 0xfc00004800000000, 0x0, // VSX Scalar Multiply Quad-Precision [using round to Odd] X-form (xsmulqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSMULQPO, 0xfc0007ff00000000, 0xfc00004900000000, 0x0, // VSX Scalar Multiply Quad-Precision [using round to Odd] X-form (xsmulqpo VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSNABSQP, 0xfc1f07fe00000000, 0xfc08064800000000, 0x0, // VSX Scalar Negative Absolute Quad-Precision X-form (xsnabsqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSNEGQP, 0xfc1f07fe00000000, 0xfc10064800000000, 0x100000000, // VSX Scalar Negate Quad-Precision X-form (xsnegqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSNMADDQP, 0xfc0007ff00000000, 0xfc00038800000000, 0x0, // VSX Scalar Negative Multiply-Add Quad-Precision [using round to Odd] X-form (xsnmaddqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSNMADDQPO, 0xfc0007ff00000000, 0xfc00038900000000, 0x0, // VSX Scalar Negative Multiply-Add Quad-Precision [using round to Odd] X-form (xsnmaddqpo VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSNMSUBQP, 0xfc0007ff00000000, 0xfc0003c800000000, 0x0, // VSX Scalar Negative Multiply-Subtract Quad-Precision [using round to Odd] X-form (xsnmsubqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSNMSUBQPO, 0xfc0007ff00000000, 0xfc0003c900000000, 0x0, // VSX Scalar Negative Multiply-Subtract Quad-Precision [using round to Odd] X-form (xsnmsubqpo VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSRQPI, 0xfc0001ff00000000, 0xfc00000a00000000, 0x1e000000000000, // VSX Scalar Round to Quad-Precision Integer [with Inexact] Z23-form (xsrqpi R,VRT,VRB,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_21_22}},\n\t{XSRQPIX, 0xfc0001ff00000000, 0xfc00000b00000000, 0x1e000000000000, // VSX Scalar Round to Quad-Precision Integer [with Inexact] Z23-form (xsrqpix R,VRT,VRB,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_21_22}},\n\t{XSRQPXP, 0xfc0001fe00000000, 0xfc00004a00000000, 0x1e000100000000, // VSX Scalar Round Quad-Precision to Double-Extended Precision Z23-form (xsrqpxp R,VRT,VRB,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_21_22}},\n\t{XSSQRTQP, 0xfc1f07ff00000000, 0xfc1b064800000000, 0x0, // VSX Scalar Square Root Quad-Precision [using round to Odd] X-form (xssqrtqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSSQRTQPO, 0xfc1f07ff00000000, 0xfc1b064900000000, 0x0, // VSX Scalar Square Root Quad-Precision [using round to Odd] X-form (xssqrtqpo VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSSUBQP, 0xfc0007ff00000000, 0xfc00040800000000, 0x0, // VSX Scalar Subtract Quad-Precision [using round to Odd] X-form (xssubqp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSSUBQPO, 0xfc0007ff00000000, 0xfc00040900000000, 0x0, // VSX Scalar Subtract Quad-Precision [using round to Odd] X-form (xssubqpo VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{XSTSTDCDP, 0xfc0007fc00000000, 0xf00005a800000000, 0x100000000, // VSX Scalar Test Data Class Double-Precision XX2-form (xststdcdp BF,XB,DCMX)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_9_15}},\n\t{XSTSTDCQP, 0xfc0007fe00000000, 0xfc00058800000000, 0x100000000, // VSX Scalar Test Data Class Quad-Precision X-form (xststdcqp BF,VRB,DCMX)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecReg_16_20, ap_ImmUnsigned_9_15}},\n\t{XSTSTDCSP, 0xfc0007fc00000000, 0xf00004a800000000, 0x100000000, // VSX Scalar Test Data Class Single-Precision XX2-form (xststdcsp BF,XB,DCMX)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_9_15}},\n\t{XSXEXPDP, 0xfc1f07fc00000000, 0xf000056c00000000, 0x100000000, // VSX Scalar Extract Exponent Double-Precision XX2-form (xsxexpdp RT,XB)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSXEXPQP, 0xfc1f07fe00000000, 0xfc02064800000000, 0x100000000, // VSX Scalar Extract Exponent Quad-Precision X-form (xsxexpqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSXSIGDP, 0xfc1f07fc00000000, 0xf001056c00000000, 0x100000000, // VSX Scalar Extract Significand Double-Precision XX2-form (xsxsigdp RT,XB)\n\t\t[6]*argField{ap_Reg_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSXSIGQP, 0xfc1f07fe00000000, 0xfc12064800000000, 0x100000000, // VSX Scalar Extract Significand Quad-Precision X-form (xsxsigqp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XVCVHPSP, 0xfc1f07fc00000000, 0xf018076c00000000, 0x0, // VSX Vector Convert Half-Precision to Single-Precision format XX2-form (xvcvhpsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSPHP, 0xfc1f07fc00000000, 0xf019076c00000000, 0x0, // VSX Vector Convert with round Single-Precision to Half-Precision format XX2-form (xvcvsphp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVIEXPDP, 0xfc0007f800000000, 0xf00007c000000000, 0x0, // VSX Vector Insert Exponent Double-Precision XX3-form (xviexpdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVIEXPSP, 0xfc0007f800000000, 0xf00006c000000000, 0x0, // VSX Vector Insert Exponent Single-Precision XX3-form (xviexpsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVTSTDCDP, 0xfc0007b800000000, 0xf00007a800000000, 0x0, // VSX Vector Test Data Class Double-Precision XX2-form (xvtstdcdp XT,XB,DCMX)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_25_25_29_29_11_15}},\n\t{XVTSTDCSP, 0xfc0007b800000000, 0xf00006a800000000, 0x0, // VSX Vector Test Data Class Single-Precision XX2-form (xvtstdcsp XT,XB,DCMX)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_25_25_29_29_11_15}},\n\t{XVXEXPDP, 0xfc1f07fc00000000, 0xf000076c00000000, 0x0, // VSX Vector Extract Exponent Double-Precision XX2-form (xvxexpdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVXEXPSP, 0xfc1f07fc00000000, 0xf008076c00000000, 0x0, // VSX Vector Extract Exponent Single-Precision XX2-form (xvxexpsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVXSIGDP, 0xfc1f07fc00000000, 0xf001076c00000000, 0x0, // VSX Vector Extract Significand Double-Precision XX2-form (xvxsigdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVXSIGSP, 0xfc1f07fc00000000, 0xf009076c00000000, 0x0, // VSX Vector Extract Significand Single-Precision XX2-form (xvxsigsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XXBRD, 0xfc1f07fc00000000, 0xf017076c00000000, 0x0, // VSX Vector Byte-Reverse Doubleword XX2-form (xxbrd XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XXBRH, 0xfc1f07fc00000000, 0xf007076c00000000, 0x0, // VSX Vector Byte-Reverse Halfword XX2-form (xxbrh XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XXBRQ, 0xfc1f07fc00000000, 0xf01f076c00000000, 0x0, // VSX Vector Byte-Reverse Quadword XX2-form (xxbrq XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XXBRW, 0xfc1f07fc00000000, 0xf00f076c00000000, 0x0, // VSX Vector Byte-Reverse Word XX2-form (xxbrw XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XXEXTRACTUW, 0xfc0007fc00000000, 0xf000029400000000, 0x10000000000000, // VSX Vector Extract Unsigned Word XX2-form (xxextractuw XT,XB,UIM)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_12_15}},\n\t{XXINSERTW, 0xfc0007fc00000000, 0xf00002d400000000, 0x10000000000000, // VSX Vector Insert Word XX2-form (xxinsertw XT,XB,UIM)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_12_15}},\n\t{XXPERM, 0xfc0007f800000000, 0xf00000d000000000, 0x0, // VSX Vector Permute XX3-form (xxperm XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXPERMR, 0xfc0007f800000000, 0xf00001d000000000, 0x0, // VSX Vector Permute Right-indexed XX3-form (xxpermr XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXSPLTIB, 0xfc1807fe00000000, 0xf00002d000000000, 0x0, // VSX Vector Splat Immediate Byte X-form (xxspltib XT,IMM8)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_ImmUnsigned_13_20}},\n\t{BCDADDCC, 0xfc0005ff00000000, 0x1000040100000000, 0x0, // Decimal Add Modulo VX-form (bcdadd. VRT,VRA,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCDSUBCC, 0xfc0005ff00000000, 0x1000044100000000, 0x0, // Decimal Subtract Modulo VX-form (bcdsub. VRT,VRA,VRB,PS)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_ImmUnsigned_22_22}},\n\t{BCTAR, 0xfc0007ff00000000, 0x4c00046000000000, 0xe00000000000, // Branch Conditional to Branch Target Address Register XL-form (bctar BO,BI,BH)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_ImmUnsigned_19_20}},\n\t{BCTARL, 0xfc0007ff00000000, 0x4c00046100000000, 0xe00000000000, // Branch Conditional to Branch Target Address Register XL-form (bctarl BO,BI,BH)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_ImmUnsigned_19_20}},\n\t{CLRBHRB, 0xfc0007fe00000000, 0x7c00035c00000000, 0x3fff80100000000, // Clear BHRB X-form (clrbhrb)\n\t\t[6]*argField{}},\n\t{FMRGEW, 0xfc0007fe00000000, 0xfc00078c00000000, 0x100000000, // Floating Merge Even Word X-form (fmrgew FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FMRGOW, 0xfc0007fe00000000, 0xfc00068c00000000, 0x100000000, // Floating Merge Odd Word X-form (fmrgow FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{ICBT, 0xfc0007fe00000000, 0x7c00002c00000000, 0x200000100000000, // Instruction Cache Block Touch X-form (icbt CT, RA, RB)\n\t\t[6]*argField{ap_ImmUnsigned_7_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LQARX, 0xfc0007fe00000000, 0x7c00022800000000, 0x0, // Load Quadword And Reserve Indexed X-form (lqarx RTp,RA,RB,EH)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_31_31}},\n\t{LXSIWAX, 0xfc0007fe00000000, 0x7c00009800000000, 0x0, // Load VSX Scalar as Integer Word Algebraic Indexed X-form (lxsiwax XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXSIWZX, 0xfc0007fe00000000, 0x7c00001800000000, 0x0, // Load VSX Scalar as Integer Word & Zero Indexed X-form (lxsiwzx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXSSPX, 0xfc0007fe00000000, 0x7c00041800000000, 0x0, // Load VSX Scalar Single-Precision Indexed X-form (lxsspx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MFBHRBE, 0xfc0007fe00000000, 0x7c00025c00000000, 0x100000000, // Move From BHRB XFX-form (mfbhrbe RT,BHRBE)\n\t\t[6]*argField{ap_Reg_6_10, ap_ImmUnsigned_11_20}},\n\t{MFVSRD, 0xfc0007fe00000000, 0x7c00006600000000, 0xf80000000000, // Move From VSR Doubleword X-form (mfvsrd RA,XS)\n\t\t[6]*argField{ap_Reg_11_15, ap_VecSReg_31_31_6_10}},\n\t{MFVSRWZ, 0xfc0007fe00000000, 0x7c0000e600000000, 0xf80000000000, // Move From VSR Word and Zero X-form (mfvsrwz RA,XS)\n\t\t[6]*argField{ap_Reg_11_15, ap_VecSReg_31_31_6_10}},\n\t{MSGCLR, 0xfc0007fe00000000, 0x7c0001dc00000000, 0x3ff000100000000, // Message Clear X-form (msgclr RB)\n\t\t[6]*argField{ap_Reg_16_20}},\n\t{MSGCLRP, 0xfc0007fe00000000, 0x7c00015c00000000, 0x3ff000100000000, // Message Clear Privileged X-form (msgclrp RB)\n\t\t[6]*argField{ap_Reg_16_20}},\n\t{MSGSND, 0xfc0007fe00000000, 0x7c00019c00000000, 0x3ff000100000000, // Message Send X-form (msgsnd RB)\n\t\t[6]*argField{ap_Reg_16_20}},\n\t{MSGSNDP, 0xfc0007fe00000000, 0x7c00011c00000000, 0x3ff000100000000, // Message Send Privileged X-form (msgsndp RB)\n\t\t[6]*argField{ap_Reg_16_20}},\n\t{MTVSRD, 0xfc0007fe00000000, 0x7c00016600000000, 0xf80000000000, // Move To VSR Doubleword X-form (mtvsrd XT,RA)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15}},\n\t{MTVSRWA, 0xfc0007fe00000000, 0x7c0001a600000000, 0xf80000000000, // Move To VSR Word Algebraic X-form (mtvsrwa XT,RA)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15}},\n\t{MTVSRWZ, 0xfc0007fe00000000, 0x7c0001e600000000, 0xf80000000000, // Move To VSR Word and Zero X-form (mtvsrwz XT,RA)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15}},\n\t{RFEBB, 0xfc0007fe00000000, 0x4c00012400000000, 0x3fff00100000000, // Return from Event Based Branch XL-form (rfebb S)\n\t\t[6]*argField{ap_ImmUnsigned_20_20}},\n\t{STQCXCC, 0xfc0007ff00000000, 0x7c00016d00000000, 0x0, // Store Quadword Conditional Indexed X-form (stqcx. RSp,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXSIWX, 0xfc0007fe00000000, 0x7c00011800000000, 0x0, // Store VSX Scalar as Integer Word Indexed X-form (stxsiwx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXSSPX, 0xfc0007fe00000000, 0x7c00051800000000, 0x0, // Store VSX Scalar Single-Precision Indexed X-form (stxsspx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{VADDCUQ, 0xfc0007ff00000000, 0x1000014000000000, 0x0, // Vector Add & write Carry Unsigned Quadword VX-form (vaddcuq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDECUQ, 0xfc00003f00000000, 0x1000003d00000000, 0x0, // Vector Add Extended & write Carry Unsigned Quadword VA-form (vaddecuq VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VADDEUQM, 0xfc00003f00000000, 0x1000003c00000000, 0x0, // Vector Add Extended Unsigned Quadword Modulo VA-form (vaddeuqm VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VADDUDM, 0xfc0007ff00000000, 0x100000c000000000, 0x0, // Vector Add Unsigned Doubleword Modulo VX-form (vaddudm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDUQM, 0xfc0007ff00000000, 0x1000010000000000, 0x0, // Vector Add Unsigned Quadword Modulo VX-form (vadduqm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VBPERMQ, 0xfc0007ff00000000, 0x1000054c00000000, 0x0, // Vector Bit Permute Quadword VX-form (vbpermq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCIPHER, 0xfc0007ff00000000, 0x1000050800000000, 0x0, // Vector AES Cipher VX-form (vcipher VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCIPHERLAST, 0xfc0007ff00000000, 0x1000050900000000, 0x0, // Vector AES Cipher Last VX-form (vcipherlast VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCLZB, 0xfc0007ff00000000, 0x1000070200000000, 0x1f000000000000, // Vector Count Leading Zeros Byte VX-form (vclzb VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VCLZD, 0xfc0007ff00000000, 0x100007c200000000, 0x1f000000000000, // Vector Count Leading Zeros Doubleword VX-form (vclzd VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VCLZH, 0xfc0007ff00000000, 0x1000074200000000, 0x1f000000000000, // Vector Count Leading Zeros Halfword VX-form (vclzh VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VCLZW, 0xfc0007ff00000000, 0x1000078200000000, 0x1f000000000000, // Vector Count Leading Zeros Word VX-form (vclzw VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VCMPEQUD, 0xfc0007ff00000000, 0x100000c700000000, 0x0, // Vector Compare Equal Unsigned Doubleword VC-form (vcmpequd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQUDCC, 0xfc0007ff00000000, 0x100004c700000000, 0x0, // Vector Compare Equal Unsigned Doubleword VC-form (vcmpequd. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSD, 0xfc0007ff00000000, 0x100003c700000000, 0x0, // Vector Compare Greater Than Signed Doubleword VC-form (vcmpgtsd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSDCC, 0xfc0007ff00000000, 0x100007c700000000, 0x0, // Vector Compare Greater Than Signed Doubleword VC-form (vcmpgtsd. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUD, 0xfc0007ff00000000, 0x100002c700000000, 0x0, // Vector Compare Greater Than Unsigned Doubleword VC-form (vcmpgtud VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUDCC, 0xfc0007ff00000000, 0x100006c700000000, 0x0, // Vector Compare Greater Than Unsigned Doubleword VC-form (vcmpgtud. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VEQV, 0xfc0007ff00000000, 0x1000068400000000, 0x0, // Vector Logical Equivalence VX-form (veqv VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VGBBD, 0xfc0007ff00000000, 0x1000050c00000000, 0x1f000000000000, // Vector Gather Bits by Bytes by Doubleword VX-form (vgbbd VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VMAXSD, 0xfc0007ff00000000, 0x100001c200000000, 0x0, // Vector Maximum Signed Doubleword VX-form (vmaxsd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMAXUD, 0xfc0007ff00000000, 0x100000c200000000, 0x0, // Vector Maximum Unsigned Doubleword VX-form (vmaxud VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMINSD, 0xfc0007ff00000000, 0x100003c200000000, 0x0, // Vector Minimum Signed Doubleword VX-form (vminsd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMINUD, 0xfc0007ff00000000, 0x100002c200000000, 0x0, // Vector Minimum Unsigned Doubleword VX-form (vminud VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMRGEW, 0xfc0007ff00000000, 0x1000078c00000000, 0x0, // Vector Merge Even Word VX-form (vmrgew VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMRGOW, 0xfc0007ff00000000, 0x1000068c00000000, 0x0, // Vector Merge Odd Word VX-form (vmrgow VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULESW, 0xfc0007ff00000000, 0x1000038800000000, 0x0, // Vector Multiply Even Signed Word VX-form (vmulesw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULEUW, 0xfc0007ff00000000, 0x1000028800000000, 0x0, // Vector Multiply Even Unsigned Word VX-form (vmuleuw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULOSW, 0xfc0007ff00000000, 0x1000018800000000, 0x0, // Vector Multiply Odd Signed Word VX-form (vmulosw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULOUW, 0xfc0007ff00000000, 0x1000008800000000, 0x0, // Vector Multiply Odd Unsigned Word VX-form (vmulouw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULUWM, 0xfc0007ff00000000, 0x1000008900000000, 0x0, // Vector Multiply Unsigned Word Modulo VX-form (vmuluwm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VNAND, 0xfc0007ff00000000, 0x1000058400000000, 0x0, // Vector Logical NAND VX-form (vnand VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VNCIPHER, 0xfc0007ff00000000, 0x1000054800000000, 0x0, // Vector AES Inverse Cipher VX-form (vncipher VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VNCIPHERLAST, 0xfc0007ff00000000, 0x1000054900000000, 0x0, // Vector AES Inverse Cipher Last VX-form (vncipherlast VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VORC, 0xfc0007ff00000000, 0x1000054400000000, 0x0, // Vector Logical OR with Complement VX-form (vorc VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPERMXOR, 0xfc00003f00000000, 0x1000002d00000000, 0x0, // Vector Permute & Exclusive-OR VA-form (vpermxor VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VPKSDSS, 0xfc0007ff00000000, 0x100005ce00000000, 0x0, // Vector Pack Signed Doubleword Signed Saturate VX-form (vpksdss VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKSDUS, 0xfc0007ff00000000, 0x1000054e00000000, 0x0, // Vector Pack Signed Doubleword Unsigned Saturate VX-form (vpksdus VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKUDUM, 0xfc0007ff00000000, 0x1000044e00000000, 0x0, // Vector Pack Unsigned Doubleword Unsigned Modulo VX-form (vpkudum VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKUDUS, 0xfc0007ff00000000, 0x100004ce00000000, 0x0, // Vector Pack Unsigned Doubleword Unsigned Saturate VX-form (vpkudus VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPMSUMB, 0xfc0007ff00000000, 0x1000040800000000, 0x0, // Vector Polynomial Multiply-Sum Byte VX-form (vpmsumb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPMSUMD, 0xfc0007ff00000000, 0x100004c800000000, 0x0, // Vector Polynomial Multiply-Sum Doubleword VX-form (vpmsumd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPMSUMH, 0xfc0007ff00000000, 0x1000044800000000, 0x0, // Vector Polynomial Multiply-Sum Halfword VX-form (vpmsumh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPMSUMW, 0xfc0007ff00000000, 0x1000048800000000, 0x0, // Vector Polynomial Multiply-Sum Word VX-form (vpmsumw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPOPCNTB, 0xfc0007ff00000000, 0x1000070300000000, 0x1f000000000000, // Vector Population Count Byte VX-form (vpopcntb VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VPOPCNTD, 0xfc0007ff00000000, 0x100007c300000000, 0x1f000000000000, // Vector Population Count Doubleword VX-form (vpopcntd VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VPOPCNTH, 0xfc0007ff00000000, 0x1000074300000000, 0x1f000000000000, // Vector Population Count Halfword VX-form (vpopcnth VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VPOPCNTW, 0xfc0007ff00000000, 0x1000078300000000, 0x1f000000000000, // Vector Population Count Word VX-form (vpopcntw VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VRLD, 0xfc0007ff00000000, 0x100000c400000000, 0x0, // Vector Rotate Left Doubleword VX-form (vrld VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSBOX, 0xfc0007ff00000000, 0x100005c800000000, 0xf80000000000, // Vector AES SubBytes VX-form (vsbox VRT,VRA)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15}},\n\t{VSHASIGMAD, 0xfc0007ff00000000, 0x100006c200000000, 0x0, // Vector SHA-512 Sigma Doubleword VX-form (vshasigmad VRT,VRA,ST,SIX)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_ImmUnsigned_16_16, ap_ImmUnsigned_17_20}},\n\t{VSHASIGMAW, 0xfc0007ff00000000, 0x1000068200000000, 0x0, // Vector SHA-256 Sigma Word VX-form (vshasigmaw VRT,VRA,ST,SIX)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_ImmUnsigned_16_16, ap_ImmUnsigned_17_20}},\n\t{VSLD, 0xfc0007ff00000000, 0x100005c400000000, 0x0, // Vector Shift Left Doubleword VX-form (vsld VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRAD, 0xfc0007ff00000000, 0x100003c400000000, 0x0, // Vector Shift Right Algebraic Doubleword VX-form (vsrad VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRD, 0xfc0007ff00000000, 0x100006c400000000, 0x0, // Vector Shift Right Doubleword VX-form (vsrd VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBCUQ, 0xfc0007ff00000000, 0x1000054000000000, 0x0, // Vector Subtract & write Carry-out Unsigned Quadword VX-form (vsubcuq VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBECUQ, 0xfc00003f00000000, 0x1000003f00000000, 0x0, // Vector Subtract Extended & write Carry-out Unsigned Quadword VA-form (vsubecuq VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VSUBEUQM, 0xfc00003f00000000, 0x1000003e00000000, 0x0, // Vector Subtract Extended Unsigned Quadword Modulo VA-form (vsubeuqm VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VSUBUDM, 0xfc0007ff00000000, 0x100004c000000000, 0x0, // Vector Subtract Unsigned Doubleword Modulo VX-form (vsubudm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBUQM, 0xfc0007ff00000000, 0x1000050000000000, 0x0, // Vector Subtract Unsigned Quadword Modulo VX-form (vsubuqm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VUPKHSW, 0xfc0007ff00000000, 0x1000064e00000000, 0x1f000000000000, // Vector Unpack High Signed Word VX-form (vupkhsw VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VUPKLSW, 0xfc0007ff00000000, 0x100006ce00000000, 0x1f000000000000, // Vector Unpack Low Signed Word VX-form (vupklsw VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{XSADDSP, 0xfc0007f800000000, 0xf000000000000000, 0x0, // VSX Scalar Add Single-Precision XX3-form (xsaddsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSCVDPSPN, 0xfc0007fc00000000, 0xf000042c00000000, 0x1f000000000000, // VSX Scalar Convert Scalar Single-Precision to Vector Single-Precision format Non-signalling XX2-form (xscvdpspn XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVSPDPN, 0xfc0007fc00000000, 0xf000052c00000000, 0x1f000000000000, // VSX Scalar Convert Single-Precision to Double-Precision format Non-signalling XX2-form (xscvspdpn XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVSXDSP, 0xfc0007fc00000000, 0xf00004e000000000, 0x1f000000000000, // VSX Scalar Convert with round Signed Doubleword to Single-Precision format XX2-form (xscvsxdsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVUXDSP, 0xfc0007fc00000000, 0xf00004a000000000, 0x1f000000000000, // VSX Scalar Convert with round Unsigned Doubleword to Single-Precision XX2-form (xscvuxdsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSDIVSP, 0xfc0007f800000000, 0xf00000c000000000, 0x0, // VSX Scalar Divide Single-Precision XX3-form (xsdivsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMADDASP, 0xfc0007f800000000, 0xf000000800000000, 0x0, // VSX Scalar Multiply-Add Type-A Single-Precision XX3-form (xsmaddasp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMADDMSP, 0xfc0007f800000000, 0xf000004800000000, 0x0, // VSX Scalar Multiply-Add Type-M Single-Precision XX3-form (xsmaddmsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMSUBASP, 0xfc0007f800000000, 0xf000008800000000, 0x0, // VSX Scalar Multiply-Subtract Type-A Single-Precision XX3-form (xsmsubasp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMSUBMSP, 0xfc0007f800000000, 0xf00000c800000000, 0x0, // VSX Scalar Multiply-Subtract Type-M Single-Precision XX3-form (xsmsubmsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMULSP, 0xfc0007f800000000, 0xf000008000000000, 0x0, // VSX Scalar Multiply Single-Precision XX3-form (xsmulsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSNMADDASP, 0xfc0007f800000000, 0xf000040800000000, 0x0, // VSX Scalar Negative Multiply-Add Type-A Single-Precision XX3-form (xsnmaddasp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSNMADDMSP, 0xfc0007f800000000, 0xf000044800000000, 0x0, // VSX Scalar Negative Multiply-Add Type-M Single-Precision XX3-form (xsnmaddmsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSNMSUBASP, 0xfc0007f800000000, 0xf000048800000000, 0x0, // VSX Scalar Negative Multiply-Subtract Type-A Single-Precision XX3-form (xsnmsubasp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSNMSUBMSP, 0xfc0007f800000000, 0xf00004c800000000, 0x0, // VSX Scalar Negative Multiply-Subtract Type-M Single-Precision XX3-form (xsnmsubmsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSRESP, 0xfc0007fc00000000, 0xf000006800000000, 0x1f000000000000, // VSX Scalar Reciprocal Estimate Single-Precision XX2-form (xsresp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSRSP, 0xfc0007fc00000000, 0xf000046400000000, 0x1f000000000000, // VSX Scalar Round to Single-Precision XX2-form (xsrsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSRSQRTESP, 0xfc0007fc00000000, 0xf000002800000000, 0x1f000000000000, // VSX Scalar Reciprocal Square Root Estimate Single-Precision XX2-form (xsrsqrtesp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSSQRTSP, 0xfc0007fc00000000, 0xf000002c00000000, 0x1f000000000000, // VSX Scalar Square Root Single-Precision XX2-form (xssqrtsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSSUBSP, 0xfc0007f800000000, 0xf000004000000000, 0x0, // VSX Scalar Subtract Single-Precision XX3-form (xssubsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXLEQV, 0xfc0007f800000000, 0xf00005d000000000, 0x0, // VSX Vector Logical Equivalence XX3-form (xxleqv XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXLNAND, 0xfc0007f800000000, 0xf000059000000000, 0x0, // VSX Vector Logical NAND XX3-form (xxlnand XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXLORC, 0xfc0007f800000000, 0xf000055000000000, 0x0, // VSX Vector Logical OR with Complement XX3-form (xxlorc XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{ADDG6S, 0xfc0003fe00000000, 0x7c00009400000000, 0x40100000000, // Add and Generate Sixes XO-form (addg6s RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{BPERMD, 0xfc0007fe00000000, 0x7c0001f800000000, 0x100000000, // Bit Permute Doubleword X-form (bpermd RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{CBCDTD, 0xfc0007fe00000000, 0x7c00027400000000, 0xf80100000000, // Convert Binary Coded Decimal To Declets X-form (cbcdtd RA, RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{CDTBCD, 0xfc0007fe00000000, 0x7c00023400000000, 0xf80100000000, // Convert Declets To Binary Coded Decimal X-form (cdtbcd RA, RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{DCFFIX, 0xfc0007ff00000000, 0xec00064400000000, 0x1f000000000000, // DFP Convert From Fixed X-form (dcffix FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCFFIXCC, 0xfc0007ff00000000, 0xec00064500000000, 0x1f000000000000, // DFP Convert From Fixed X-form (dcffix. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DIVDE, 0xfc0007ff00000000, 0x7c00035200000000, 0x0, // Divide Doubleword Extended XO-form (divde RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDECC, 0xfc0007ff00000000, 0x7c00035300000000, 0x0, // Divide Doubleword Extended XO-form (divde. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDEO, 0xfc0007ff00000000, 0x7c00075200000000, 0x0, // Divide Doubleword Extended XO-form (divdeo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDEOCC, 0xfc0007ff00000000, 0x7c00075300000000, 0x0, // Divide Doubleword Extended XO-form (divdeo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDEU, 0xfc0007ff00000000, 0x7c00031200000000, 0x0, // Divide Doubleword Extended Unsigned XO-form (divdeu RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDEUCC, 0xfc0007ff00000000, 0x7c00031300000000, 0x0, // Divide Doubleword Extended Unsigned XO-form (divdeu. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDEUO, 0xfc0007ff00000000, 0x7c00071200000000, 0x0, // Divide Doubleword Extended Unsigned XO-form (divdeuo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDEUOCC, 0xfc0007ff00000000, 0x7c00071300000000, 0x0, // Divide Doubleword Extended Unsigned XO-form (divdeuo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWE, 0xfc0007ff00000000, 0x7c00035600000000, 0x0, // Divide Word Extended XO-form (divwe RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWECC, 0xfc0007ff00000000, 0x7c00035700000000, 0x0, // Divide Word Extended XO-form (divwe. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWEO, 0xfc0007ff00000000, 0x7c00075600000000, 0x0, // Divide Word Extended XO-form (divweo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWEOCC, 0xfc0007ff00000000, 0x7c00075700000000, 0x0, // Divide Word Extended XO-form (divweo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWEU, 0xfc0007ff00000000, 0x7c00031600000000, 0x0, // Divide Word Extended Unsigned XO-form (divweu RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWEUCC, 0xfc0007ff00000000, 0x7c00031700000000, 0x0, // Divide Word Extended Unsigned XO-form (divweu. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWEUO, 0xfc0007ff00000000, 0x7c00071600000000, 0x0, // Divide Word Extended Unsigned XO-form (divweuo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWEUOCC, 0xfc0007ff00000000, 0x7c00071700000000, 0x0, // Divide Word Extended Unsigned XO-form (divweuo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{FCFIDS, 0xfc0007ff00000000, 0xec00069c00000000, 0x1f000000000000, // Floating Convert with round Signed Doubleword to Single-Precision format X-form (fcfids FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCFIDSCC, 0xfc0007ff00000000, 0xec00069d00000000, 0x1f000000000000, // Floating Convert with round Signed Doubleword to Single-Precision format X-form (fcfids. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCFIDU, 0xfc0007ff00000000, 0xfc00079c00000000, 0x1f000000000000, // Floating Convert with round Unsigned Doubleword to Double-Precision format X-form (fcfidu FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCFIDUCC, 0xfc0007ff00000000, 0xfc00079d00000000, 0x1f000000000000, // Floating Convert with round Unsigned Doubleword to Double-Precision format X-form (fcfidu. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCFIDUS, 0xfc0007ff00000000, 0xec00079c00000000, 0x1f000000000000, // Floating Convert with round Unsigned Doubleword to Single-Precision format X-form (fcfidus FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCFIDUSCC, 0xfc0007ff00000000, 0xec00079d00000000, 0x1f000000000000, // Floating Convert with round Unsigned Doubleword to Single-Precision format X-form (fcfidus. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIDU, 0xfc0007ff00000000, 0xfc00075c00000000, 0x1f000000000000, // Floating Convert with round Double-Precision To Unsigned Doubleword format X-form (fctidu FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIDUCC, 0xfc0007ff00000000, 0xfc00075d00000000, 0x1f000000000000, // Floating Convert with round Double-Precision To Unsigned Doubleword format X-form (fctidu. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIDUZ, 0xfc0007ff00000000, 0xfc00075e00000000, 0x1f000000000000, // Floating Convert with truncate Double-Precision To Unsigned Doubleword format X-form (fctiduz FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIDUZCC, 0xfc0007ff00000000, 0xfc00075f00000000, 0x1f000000000000, // Floating Convert with truncate Double-Precision To Unsigned Doubleword format X-form (fctiduz. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIWU, 0xfc0007ff00000000, 0xfc00011c00000000, 0x1f000000000000, // Floating Convert with round Double-Precision To Unsigned Word format X-form (fctiwu FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIWUCC, 0xfc0007ff00000000, 0xfc00011d00000000, 0x1f000000000000, // Floating Convert with round Double-Precision To Unsigned Word format X-form (fctiwu. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIWUZ, 0xfc0007ff00000000, 0xfc00011e00000000, 0x1f000000000000, // Floating Convert with truncate Double-Precision To Unsigned Word format X-form (fctiwuz FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIWUZCC, 0xfc0007ff00000000, 0xfc00011f00000000, 0x1f000000000000, // Floating Convert with truncate Double-Precision To Unsigned Word format X-form (fctiwuz. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FTDIV, 0xfc0007fe00000000, 0xfc00010000000000, 0x60000100000000, // Floating Test for software Divide X-form (ftdiv BF,FRA,FRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FTSQRT, 0xfc0007fe00000000, 0xfc00014000000000, 0x7f000100000000, // Floating Test for software Square Root X-form (ftsqrt BF,FRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_16_20}},\n\t{LBARX, 0xfc0007fe00000000, 0x7c00006800000000, 0x0, // Load Byte And Reserve Indexed X-form (lbarx RT,RA,RB,EH)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_31_31}},\n\t{LDBRX, 0xfc0007fe00000000, 0x7c00042800000000, 0x100000000, // Load Doubleword Byte-Reverse Indexed X-form (ldbrx RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LFIWZX, 0xfc0007fe00000000, 0x7c0006ee00000000, 0x100000000, // Load Floating-Point as Integer Word & Zero Indexed X-form (lfiwzx FRT,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LHARX, 0xfc0007fe00000000, 0x7c0000e800000000, 0x0, // Load Halfword And Reserve Indexed Xform (lharx RT,RA,RB,EH)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_31_31}},\n\t{LXSDX, 0xfc0007fe00000000, 0x7c00049800000000, 0x0, // Load VSX Scalar Doubleword Indexed X-form (lxsdx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVD2X, 0xfc0007fe00000000, 0x7c00069800000000, 0x0, // Load VSX Vector Doubleword*2 Indexed X-form (lxvd2x XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVDSX, 0xfc0007fe00000000, 0x7c00029800000000, 0x0, // Load VSX Vector Doubleword & Splat Indexed X-form (lxvdsx XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LXVW4X, 0xfc0007fe00000000, 0x7c00061800000000, 0x0, // Load VSX Vector Word*4 Indexed X-form (lxvw4x XT,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{POPCNTD, 0xfc0007fe00000000, 0x7c0003f400000000, 0xf80100000000, // Population Count Doubleword X-form (popcntd RA, RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{POPCNTW, 0xfc0007fe00000000, 0x7c0002f400000000, 0xf80100000000, // Population Count Words X-form (popcntw RA, RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{STBCXCC, 0xfc0007ff00000000, 0x7c00056d00000000, 0x0, // Store Byte Conditional Indexed X-form (stbcx. RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STDBRX, 0xfc0007fe00000000, 0x7c00052800000000, 0x100000000, // Store Doubleword Byte-Reverse Indexed X-form (stdbrx RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STHCXCC, 0xfc0007ff00000000, 0x7c0005ad00000000, 0x0, // Store Halfword Conditional Indexed X-form (sthcx. RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXSDX, 0xfc0007fe00000000, 0x7c00059800000000, 0x0, // Store VSX Scalar Doubleword Indexed X-form (stxsdx XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVD2X, 0xfc0007fe00000000, 0x7c00079800000000, 0x0, // Store VSX Vector Doubleword*2 Indexed X-form (stxvd2x XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STXVW4X, 0xfc0007fe00000000, 0x7c00071800000000, 0x0, // Store VSX Vector Word*4 Indexed X-form (stxvw4x XS,RA,RB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{XSABSDP, 0xfc0007fc00000000, 0xf000056400000000, 0x1f000000000000, // VSX Scalar Absolute Double-Precision XX2-form (xsabsdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSADDDP, 0xfc0007f800000000, 0xf000010000000000, 0x0, // VSX Scalar Add Double-Precision XX3-form (xsadddp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSCMPODP, 0xfc0007f800000000, 0xf000015800000000, 0x60000100000000, // VSX Scalar Compare Ordered Double-Precision XX3-form (xscmpodp BF,XA,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSCMPUDP, 0xfc0007f800000000, 0xf000011800000000, 0x60000100000000, // VSX Scalar Compare Unordered Double-Precision XX3-form (xscmpudp BF,XA,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSCPSGNDP, 0xfc0007f800000000, 0xf000058000000000, 0x0, // VSX Scalar Copy Sign Double-Precision XX3-form (xscpsgndp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSCVDPSP, 0xfc0007fc00000000, 0xf000042400000000, 0x1f000000000000, // VSX Scalar Convert with round Double-Precision to Single-Precision format XX2-form (xscvdpsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVDPSXDS, 0xfc0007fc00000000, 0xf000056000000000, 0x1f000000000000, // VSX Scalar Convert with round to zero Double-Precision to Signed Doubleword format XX2-form (xscvdpsxds XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVDPSXWS, 0xfc0007fc00000000, 0xf000016000000000, 0x1f000000000000, // VSX Scalar Convert with round to zero Double-Precision to Signed Word format XX2-form (xscvdpsxws XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVDPUXDS, 0xfc0007fc00000000, 0xf000052000000000, 0x1f000000000000, // VSX Scalar Convert with round to zero Double-Precision to Unsigned Doubleword format XX2-form (xscvdpuxds XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVDPUXWS, 0xfc0007fc00000000, 0xf000012000000000, 0x1f000000000000, // VSX Scalar Convert with round to zero Double-Precision to Unsigned Word format XX2-form (xscvdpuxws XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVSPDP, 0xfc0007fc00000000, 0xf000052400000000, 0x1f000000000000, // VSX Scalar Convert Single-Precision to Double-Precision format XX2-form (xscvspdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVSXDDP, 0xfc0007fc00000000, 0xf00005e000000000, 0x1f000000000000, // VSX Scalar Convert with round Signed Doubleword to Double-Precision format XX2-form (xscvsxddp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSCVUXDDP, 0xfc0007fc00000000, 0xf00005a000000000, 0x1f000000000000, // VSX Scalar Convert with round Unsigned Doubleword to Double-Precision format XX2-form (xscvuxddp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSDIVDP, 0xfc0007f800000000, 0xf00001c000000000, 0x0, // VSX Scalar Divide Double-Precision XX3-form (xsdivdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMADDADP, 0xfc0007f800000000, 0xf000010800000000, 0x0, // VSX Scalar Multiply-Add Type-A Double-Precision XX3-form (xsmaddadp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMADDMDP, 0xfc0007f800000000, 0xf000014800000000, 0x0, // VSX Scalar Multiply-Add Type-M Double-Precision XX3-form (xsmaddmdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMAXDP, 0xfc0007f800000000, 0xf000050000000000, 0x0, // VSX Scalar Maximum Double-Precision XX3-form (xsmaxdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMINDP, 0xfc0007f800000000, 0xf000054000000000, 0x0, // VSX Scalar Minimum Double-Precision XX3-form (xsmindp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMSUBADP, 0xfc0007f800000000, 0xf000018800000000, 0x0, // VSX Scalar Multiply-Subtract Type-A Double-Precision XX3-form (xsmsubadp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMSUBMDP, 0xfc0007f800000000, 0xf00001c800000000, 0x0, // VSX Scalar Multiply-Subtract Type-M Double-Precision XX3-form (xsmsubmdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSMULDP, 0xfc0007f800000000, 0xf000018000000000, 0x0, // VSX Scalar Multiply Double-Precision XX3-form (xsmuldp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSNABSDP, 0xfc0007fc00000000, 0xf00005a400000000, 0x1f000000000000, // VSX Scalar Negative Absolute Double-Precision XX2-form (xsnabsdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSNEGDP, 0xfc0007fc00000000, 0xf00005e400000000, 0x1f000000000000, // VSX Scalar Negate Double-Precision XX2-form (xsnegdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSNMADDADP, 0xfc0007f800000000, 0xf000050800000000, 0x0, // VSX Scalar Negative Multiply-Add Type-A Double-Precision XX3-form (xsnmaddadp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSNMADDMDP, 0xfc0007f800000000, 0xf000054800000000, 0x0, // VSX Scalar Negative Multiply-Add Type-M Double-Precision XX3-form (xsnmaddmdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSNMSUBADP, 0xfc0007f800000000, 0xf000058800000000, 0x0, // VSX Scalar Negative Multiply-Subtract Type-A Double-Precision XX3-form (xsnmsubadp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSNMSUBMDP, 0xfc0007f800000000, 0xf00005c800000000, 0x0, // VSX Scalar Negative Multiply-Subtract Type-M Double-Precision XX3-form (xsnmsubmdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSRDPI, 0xfc0007fc00000000, 0xf000012400000000, 0x1f000000000000, // VSX Scalar Round to Double-Precision Integer using round to Nearest Away XX2-form (xsrdpi XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSRDPIC, 0xfc0007fc00000000, 0xf00001ac00000000, 0x1f000000000000, // VSX Scalar Round to Double-Precision Integer exact using Current rounding mode XX2-form (xsrdpic XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSRDPIM, 0xfc0007fc00000000, 0xf00001e400000000, 0x1f000000000000, // VSX Scalar Round to Double-Precision Integer using round toward -Infinity XX2-form (xsrdpim XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSRDPIP, 0xfc0007fc00000000, 0xf00001a400000000, 0x1f000000000000, // VSX Scalar Round to Double-Precision Integer using round toward +Infinity XX2-form (xsrdpip XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSRDPIZ, 0xfc0007fc00000000, 0xf000016400000000, 0x1f000000000000, // VSX Scalar Round to Double-Precision Integer using round toward Zero XX2-form (xsrdpiz XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSREDP, 0xfc0007fc00000000, 0xf000016800000000, 0x1f000000000000, // VSX Scalar Reciprocal Estimate Double-Precision XX2-form (xsredp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSRSQRTEDP, 0xfc0007fc00000000, 0xf000012800000000, 0x1f000000000000, // VSX Scalar Reciprocal Square Root Estimate Double-Precision XX2-form (xsrsqrtedp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSSQRTDP, 0xfc0007fc00000000, 0xf000012c00000000, 0x1f000000000000, // VSX Scalar Square Root Double-Precision XX2-form (xssqrtdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XSSUBDP, 0xfc0007f800000000, 0xf000014000000000, 0x0, // VSX Scalar Subtract Double-Precision XX3-form (xssubdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSTDIVDP, 0xfc0007f800000000, 0xf00001e800000000, 0x60000100000000, // VSX Scalar Test for software Divide Double-Precision XX3-form (xstdivdp BF,XA,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XSTSQRTDP, 0xfc0007fc00000000, 0xf00001a800000000, 0x7f000100000000, // VSX Scalar Test for software Square Root Double-Precision XX2-form (xstsqrtdp BF,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_30_30_16_20}},\n\t{XVABSDP, 0xfc0007fc00000000, 0xf000076400000000, 0x1f000000000000, // VSX Vector Absolute Value Double-Precision XX2-form (xvabsdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVABSSP, 0xfc0007fc00000000, 0xf000066400000000, 0x1f000000000000, // VSX Vector Absolute Value Single-Precision XX2-form (xvabssp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVADDDP, 0xfc0007f800000000, 0xf000030000000000, 0x0, // VSX Vector Add Double-Precision XX3-form (xvadddp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVADDSP, 0xfc0007f800000000, 0xf000020000000000, 0x0, // VSX Vector Add Single-Precision XX3-form (xvaddsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPEQDP, 0xfc0007f800000000, 0xf000031800000000, 0x0, // VSX Vector Compare Equal To Double-Precision XX3-form (xvcmpeqdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPEQDPCC, 0xfc0007f800000000, 0xf000071800000000, 0x0, // VSX Vector Compare Equal To Double-Precision XX3-form (xvcmpeqdp. XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPEQSP, 0xfc0007f800000000, 0xf000021800000000, 0x0, // VSX Vector Compare Equal To Single-Precision XX3-form (xvcmpeqsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPEQSPCC, 0xfc0007f800000000, 0xf000061800000000, 0x0, // VSX Vector Compare Equal To Single-Precision XX3-form (xvcmpeqsp. XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPGEDP, 0xfc0007f800000000, 0xf000039800000000, 0x0, // VSX Vector Compare Greater Than or Equal To Double-Precision XX3-form (xvcmpgedp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPGEDPCC, 0xfc0007f800000000, 0xf000079800000000, 0x0, // VSX Vector Compare Greater Than or Equal To Double-Precision XX3-form (xvcmpgedp. XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPGESP, 0xfc0007f800000000, 0xf000029800000000, 0x0, // VSX Vector Compare Greater Than or Equal To Single-Precision XX3-form (xvcmpgesp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPGESPCC, 0xfc0007f800000000, 0xf000069800000000, 0x0, // VSX Vector Compare Greater Than or Equal To Single-Precision XX3-form (xvcmpgesp. XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPGTDP, 0xfc0007f800000000, 0xf000035800000000, 0x0, // VSX Vector Compare Greater Than Double-Precision XX3-form (xvcmpgtdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPGTDPCC, 0xfc0007f800000000, 0xf000075800000000, 0x0, // VSX Vector Compare Greater Than Double-Precision XX3-form (xvcmpgtdp. XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPGTSP, 0xfc0007f800000000, 0xf000025800000000, 0x0, // VSX Vector Compare Greater Than Single-Precision XX3-form (xvcmpgtsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCMPGTSPCC, 0xfc0007f800000000, 0xf000065800000000, 0x0, // VSX Vector Compare Greater Than Single-Precision XX3-form (xvcmpgtsp. XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCPSGNDP, 0xfc0007f800000000, 0xf000078000000000, 0x0, // VSX Vector Copy Sign Double-Precision XX3-form (xvcpsgndp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCPSGNSP, 0xfc0007f800000000, 0xf000068000000000, 0x0, // VSX Vector Copy Sign Single-Precision XX3-form (xvcpsgnsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVCVDPSP, 0xfc0007fc00000000, 0xf000062400000000, 0x1f000000000000, // VSX Vector Convert with round Double-Precision to Single-Precision format XX2-form (xvcvdpsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVDPSXDS, 0xfc0007fc00000000, 0xf000076000000000, 0x1f000000000000, // VSX Vector Convert with round to zero Double-Precision to Signed Doubleword format XX2-form (xvcvdpsxds XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVDPSXWS, 0xfc0007fc00000000, 0xf000036000000000, 0x1f000000000000, // VSX Vector Convert with round to zero Double-Precision to Signed Word format XX2-form (xvcvdpsxws XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVDPUXDS, 0xfc0007fc00000000, 0xf000072000000000, 0x1f000000000000, // VSX Vector Convert with round to zero Double-Precision to Unsigned Doubleword format XX2-form (xvcvdpuxds XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVDPUXWS, 0xfc0007fc00000000, 0xf000032000000000, 0x1f000000000000, // VSX Vector Convert with round to zero Double-Precision to Unsigned Word format XX2-form (xvcvdpuxws XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSPDP, 0xfc0007fc00000000, 0xf000072400000000, 0x1f000000000000, // VSX Vector Convert Single-Precision to Double-Precision format XX2-form (xvcvspdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSPSXDS, 0xfc0007fc00000000, 0xf000066000000000, 0x1f000000000000, // VSX Vector Convert with round to zero Single-Precision to Signed Doubleword format XX2-form (xvcvspsxds XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSPSXWS, 0xfc0007fc00000000, 0xf000026000000000, 0x1f000000000000, // VSX Vector Convert with round to zero Single-Precision to Signed Word format XX2-form (xvcvspsxws XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSPUXDS, 0xfc0007fc00000000, 0xf000062000000000, 0x1f000000000000, // VSX Vector Convert with round to zero Single-Precision to Unsigned Doubleword format XX2-form (xvcvspuxds XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSPUXWS, 0xfc0007fc00000000, 0xf000022000000000, 0x1f000000000000, // VSX Vector Convert with round to zero Single-Precision to Unsigned Word format XX2-form (xvcvspuxws XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSXDDP, 0xfc0007fc00000000, 0xf00007e000000000, 0x1f000000000000, // VSX Vector Convert with round Signed Doubleword to Double-Precision format XX2-form (xvcvsxddp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSXDSP, 0xfc0007fc00000000, 0xf00006e000000000, 0x1f000000000000, // VSX Vector Convert with round Signed Doubleword to Single-Precision format XX2-form (xvcvsxdsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSXWDP, 0xfc0007fc00000000, 0xf00003e000000000, 0x1f000000000000, // VSX Vector Convert Signed Word to Double-Precision format XX2-form (xvcvsxwdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVSXWSP, 0xfc0007fc00000000, 0xf00002e000000000, 0x1f000000000000, // VSX Vector Convert with round Signed Word to Single-Precision format XX2-form (xvcvsxwsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVUXDDP, 0xfc0007fc00000000, 0xf00007a000000000, 0x1f000000000000, // VSX Vector Convert with round Unsigned Doubleword to Double-Precision format XX2-form (xvcvuxddp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVUXDSP, 0xfc0007fc00000000, 0xf00006a000000000, 0x1f000000000000, // VSX Vector Convert with round Unsigned Doubleword to Single-Precision format XX2-form (xvcvuxdsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVUXWDP, 0xfc0007fc00000000, 0xf00003a000000000, 0x1f000000000000, // VSX Vector Convert Unsigned Word to Double-Precision format XX2-form (xvcvuxwdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVCVUXWSP, 0xfc0007fc00000000, 0xf00002a000000000, 0x1f000000000000, // VSX Vector Convert with round Unsigned Word to Single-Precision format XX2-form (xvcvuxwsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVDIVDP, 0xfc0007f800000000, 0xf00003c000000000, 0x0, // VSX Vector Divide Double-Precision XX3-form (xvdivdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVDIVSP, 0xfc0007f800000000, 0xf00002c000000000, 0x0, // VSX Vector Divide Single-Precision XX3-form (xvdivsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMADDADP, 0xfc0007f800000000, 0xf000030800000000, 0x0, // VSX Vector Multiply-Add Type-A Double-Precision XX3-form (xvmaddadp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMADDASP, 0xfc0007f800000000, 0xf000020800000000, 0x0, // VSX Vector Multiply-Add Type-A Single-Precision XX3-form (xvmaddasp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMADDMDP, 0xfc0007f800000000, 0xf000034800000000, 0x0, // VSX Vector Multiply-Add Type-M Double-Precision XX3-form (xvmaddmdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMADDMSP, 0xfc0007f800000000, 0xf000024800000000, 0x0, // VSX Vector Multiply-Add Type-M Single-Precision XX3-form (xvmaddmsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMAXDP, 0xfc0007f800000000, 0xf000070000000000, 0x0, // VSX Vector Maximum Double-Precision XX3-form (xvmaxdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMAXSP, 0xfc0007f800000000, 0xf000060000000000, 0x0, // VSX Vector Maximum Single-Precision XX3-form (xvmaxsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMINDP, 0xfc0007f800000000, 0xf000074000000000, 0x0, // VSX Vector Minimum Double-Precision XX3-form (xvmindp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMINSP, 0xfc0007f800000000, 0xf000064000000000, 0x0, // VSX Vector Minimum Single-Precision XX3-form (xvminsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMSUBADP, 0xfc0007f800000000, 0xf000038800000000, 0x0, // VSX Vector Multiply-Subtract Type-A Double-Precision XX3-form (xvmsubadp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMSUBASP, 0xfc0007f800000000, 0xf000028800000000, 0x0, // VSX Vector Multiply-Subtract Type-A Single-Precision XX3-form (xvmsubasp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMSUBMDP, 0xfc0007f800000000, 0xf00003c800000000, 0x0, // VSX Vector Multiply-Subtract Type-M Double-Precision XX3-form (xvmsubmdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMSUBMSP, 0xfc0007f800000000, 0xf00002c800000000, 0x0, // VSX Vector Multiply-Subtract Type-M Single-Precision XX3-form (xvmsubmsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMULDP, 0xfc0007f800000000, 0xf000038000000000, 0x0, // VSX Vector Multiply Double-Precision XX3-form (xvmuldp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVMULSP, 0xfc0007f800000000, 0xf000028000000000, 0x0, // VSX Vector Multiply Single-Precision XX3-form (xvmulsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVNABSDP, 0xfc0007fc00000000, 0xf00007a400000000, 0x1f000000000000, // VSX Vector Negative Absolute Double-Precision XX2-form (xvnabsdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVNABSSP, 0xfc0007fc00000000, 0xf00006a400000000, 0x1f000000000000, // VSX Vector Negative Absolute Single-Precision XX2-form (xvnabssp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVNEGDP, 0xfc0007fc00000000, 0xf00007e400000000, 0x1f000000000000, // VSX Vector Negate Double-Precision XX2-form (xvnegdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVNEGSP, 0xfc0007fc00000000, 0xf00006e400000000, 0x1f000000000000, // VSX Vector Negate Single-Precision XX2-form (xvnegsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVNMADDADP, 0xfc0007f800000000, 0xf000070800000000, 0x0, // VSX Vector Negative Multiply-Add Type-A Double-Precision XX3-form (xvnmaddadp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVNMADDASP, 0xfc0007f800000000, 0xf000060800000000, 0x0, // VSX Vector Negative Multiply-Add Type-A Single-Precision XX3-form (xvnmaddasp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVNMADDMDP, 0xfc0007f800000000, 0xf000074800000000, 0x0, // VSX Vector Negative Multiply-Add Type-M Double-Precision XX3-form (xvnmaddmdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVNMADDMSP, 0xfc0007f800000000, 0xf000064800000000, 0x0, // VSX Vector Negative Multiply-Add Type-M Single-Precision XX3-form (xvnmaddmsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVNMSUBADP, 0xfc0007f800000000, 0xf000078800000000, 0x0, // VSX Vector Negative Multiply-Subtract Type-A Double-Precision XX3-form (xvnmsubadp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVNMSUBASP, 0xfc0007f800000000, 0xf000068800000000, 0x0, // VSX Vector Negative Multiply-Subtract Type-A Single-Precision XX3-form (xvnmsubasp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVNMSUBMDP, 0xfc0007f800000000, 0xf00007c800000000, 0x0, // VSX Vector Negative Multiply-Subtract Type-M Double-Precision XX3-form (xvnmsubmdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVNMSUBMSP, 0xfc0007f800000000, 0xf00006c800000000, 0x0, // VSX Vector Negative Multiply-Subtract Type-M Single-Precision XX3-form (xvnmsubmsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVRDPI, 0xfc0007fc00000000, 0xf000032400000000, 0x1f000000000000, // VSX Vector Round to Double-Precision Integer using round to Nearest Away XX2-form (xvrdpi XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRDPIC, 0xfc0007fc00000000, 0xf00003ac00000000, 0x1f000000000000, // VSX Vector Round to Double-Precision Integer Exact using Current rounding mode XX2-form (xvrdpic XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRDPIM, 0xfc0007fc00000000, 0xf00003e400000000, 0x1f000000000000, // VSX Vector Round to Double-Precision Integer using round toward -Infinity XX2-form (xvrdpim XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRDPIP, 0xfc0007fc00000000, 0xf00003a400000000, 0x1f000000000000, // VSX Vector Round to Double-Precision Integer using round toward +Infinity XX2-form (xvrdpip XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRDPIZ, 0xfc0007fc00000000, 0xf000036400000000, 0x1f000000000000, // VSX Vector Round to Double-Precision Integer using round toward Zero XX2-form (xvrdpiz XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVREDP, 0xfc0007fc00000000, 0xf000036800000000, 0x1f000000000000, // VSX Vector Reciprocal Estimate Double-Precision XX2-form (xvredp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRESP, 0xfc0007fc00000000, 0xf000026800000000, 0x1f000000000000, // VSX Vector Reciprocal Estimate Single-Precision XX2-form (xvresp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRSPI, 0xfc0007fc00000000, 0xf000022400000000, 0x1f000000000000, // VSX Vector Round to Single-Precision Integer using round to Nearest Away XX2-form (xvrspi XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRSPIC, 0xfc0007fc00000000, 0xf00002ac00000000, 0x1f000000000000, // VSX Vector Round to Single-Precision Integer Exact using Current rounding mode XX2-form (xvrspic XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRSPIM, 0xfc0007fc00000000, 0xf00002e400000000, 0x1f000000000000, // VSX Vector Round to Single-Precision Integer using round toward -Infinity XX2-form (xvrspim XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRSPIP, 0xfc0007fc00000000, 0xf00002a400000000, 0x1f000000000000, // VSX Vector Round to Single-Precision Integer using round toward +Infinity XX2-form (xvrspip XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRSPIZ, 0xfc0007fc00000000, 0xf000026400000000, 0x1f000000000000, // VSX Vector Round to Single-Precision Integer using round toward Zero XX2-form (xvrspiz XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRSQRTEDP, 0xfc0007fc00000000, 0xf000032800000000, 0x1f000000000000, // VSX Vector Reciprocal Square Root Estimate Double-Precision XX2-form (xvrsqrtedp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVRSQRTESP, 0xfc0007fc00000000, 0xf000022800000000, 0x1f000000000000, // VSX Vector Reciprocal Square Root Estimate Single-Precision XX2-form (xvrsqrtesp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVSQRTDP, 0xfc0007fc00000000, 0xf000032c00000000, 0x1f000000000000, // VSX Vector Square Root Double-Precision XX2-form (xvsqrtdp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVSQRTSP, 0xfc0007fc00000000, 0xf000022c00000000, 0x1f000000000000, // VSX Vector Square Root Single-Precision XX2-form (xvsqrtsp XT,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20}},\n\t{XVSUBDP, 0xfc0007f800000000, 0xf000034000000000, 0x0, // VSX Vector Subtract Double-Precision XX3-form (xvsubdp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVSUBSP, 0xfc0007f800000000, 0xf000024000000000, 0x0, // VSX Vector Subtract Single-Precision XX3-form (xvsubsp XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVTDIVDP, 0xfc0007f800000000, 0xf00003e800000000, 0x60000100000000, // VSX Vector Test for software Divide Double-Precision XX3-form (xvtdivdp BF,XA,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVTDIVSP, 0xfc0007f800000000, 0xf00002e800000000, 0x60000100000000, // VSX Vector Test for software Divide Single-Precision XX3-form (xvtdivsp BF,XA,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XVTSQRTDP, 0xfc0007fc00000000, 0xf00003a800000000, 0x7f000100000000, // VSX Vector Test for software Square Root Double-Precision XX2-form (xvtsqrtdp BF,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_30_30_16_20}},\n\t{XVTSQRTSP, 0xfc0007fc00000000, 0xf00002a800000000, 0x7f000100000000, // VSX Vector Test for software Square Root Single-Precision XX2-form (xvtsqrtsp BF,XB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_VecSReg_30_30_16_20}},\n\t{XXLAND, 0xfc0007f800000000, 0xf000041000000000, 0x0, // VSX Vector Logical AND XX3-form (xxland XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXLANDC, 0xfc0007f800000000, 0xf000045000000000, 0x0, // VSX Vector Logical AND with Complement XX3-form (xxlandc XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXLNOR, 0xfc0007f800000000, 0xf000051000000000, 0x0, // VSX Vector Logical NOR XX3-form (xxlnor XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXLOR, 0xfc0007f800000000, 0xf000049000000000, 0x0, // VSX Vector Logical OR XX3-form (xxlor XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXLXOR, 0xfc0007f800000000, 0xf00004d000000000, 0x0, // VSX Vector Logical XOR XX3-form (xxlxor XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXMRGHW, 0xfc0007f800000000, 0xf000009000000000, 0x0, // VSX Vector Merge High Word XX3-form (xxmrghw XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXMRGLW, 0xfc0007f800000000, 0xf000019000000000, 0x0, // VSX Vector Merge Low Word XX3-form (xxmrglw XT,XA,XB)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20}},\n\t{XXPERMDI, 0xfc0004f800000000, 0xf000005000000000, 0x0, // VSX Vector Permute Doubleword Immediate XX3-form (xxpermdi XT,XA,XB,DM)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_22_23}},\n\t{XXSEL, 0xfc00003000000000, 0xf000003000000000, 0x0, // VSX Vector Select XX4-form (xxsel XT,XA,XB,XC)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20, ap_VecSReg_28_28_21_25}},\n\t{XXSLDWI, 0xfc0004f800000000, 0xf000001000000000, 0x0, // VSX Vector Shift Left Double by Word Immediate XX3-form (xxsldwi XT,XA,XB,SHW)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_29_29_11_15, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_22_23}},\n\t{XXSPLTW, 0xfc0007fc00000000, 0xf000029000000000, 0x1c000000000000, // VSX Vector Splat Word XX2-form (xxspltw XT,XB,UIM)\n\t\t[6]*argField{ap_VecSReg_31_31_6_10, ap_VecSReg_30_30_16_20, ap_ImmUnsigned_14_15}},\n\t{CMPB, 0xfc0007fe00000000, 0x7c0003f800000000, 0x100000000, // Compare Bytes X-form (cmpb RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{DADD, 0xfc0007ff00000000, 0xec00000400000000, 0x0, // DFP Add X-form (dadd FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DADDCC, 0xfc0007ff00000000, 0xec00000500000000, 0x0, // DFP Add X-form (dadd. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DADDQ, 0xfc0007ff00000000, 0xfc00000400000000, 0x0, // DFP Add Quad X-form (daddq FRTp,FRAp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DADDQCC, 0xfc0007ff00000000, 0xfc00000500000000, 0x0, // DFP Add Quad X-form (daddq. FRTp,FRAp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DCFFIXQ, 0xfc0007ff00000000, 0xfc00064400000000, 0x1f000000000000, // DFP Convert From Fixed Quad X-form (dcffixq FRTp,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCFFIXQCC, 0xfc0007ff00000000, 0xfc00064500000000, 0x1f000000000000, // DFP Convert From Fixed Quad X-form (dcffixq. FRTp,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCMPO, 0xfc0007fe00000000, 0xec00010400000000, 0x60000100000000, // DFP Compare Ordered X-form (dcmpo BF,FRA,FRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DCMPOQ, 0xfc0007fe00000000, 0xfc00010400000000, 0x60000100000000, // DFP Compare Ordered Quad X-form (dcmpoq BF,FRAp,FRBp)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DCMPU, 0xfc0007fe00000000, 0xec00050400000000, 0x60000100000000, // DFP Compare Unordered X-form (dcmpu BF,FRA,FRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DCMPUQ, 0xfc0007fe00000000, 0xfc00050400000000, 0x60000100000000, // DFP Compare Unordered Quad X-form (dcmpuq BF,FRAp,FRBp)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DCTDP, 0xfc0007ff00000000, 0xec00020400000000, 0x1f000000000000, // DFP Convert To DFP Long X-form (dctdp FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCTDPCC, 0xfc0007ff00000000, 0xec00020500000000, 0x1f000000000000, // DFP Convert To DFP Long X-form (dctdp. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCTFIX, 0xfc0007ff00000000, 0xec00024400000000, 0x1f000000000000, // DFP Convert To Fixed X-form (dctfix FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCTFIXCC, 0xfc0007ff00000000, 0xec00024500000000, 0x1f000000000000, // DFP Convert To Fixed X-form (dctfix. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCTFIXQ, 0xfc0007ff00000000, 0xfc00024400000000, 0x1f000000000000, // DFP Convert To Fixed Quad X-form (dctfixq FRT,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCTFIXQCC, 0xfc0007ff00000000, 0xfc00024500000000, 0x1f000000000000, // DFP Convert To Fixed Quad X-form (dctfixq. FRT,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCTQPQ, 0xfc0007ff00000000, 0xfc00020400000000, 0x1f000000000000, // DFP Convert To DFP Extended X-form (dctqpq FRTp,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DCTQPQCC, 0xfc0007ff00000000, 0xfc00020500000000, 0x1f000000000000, // DFP Convert To DFP Extended X-form (dctqpq. FRTp,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DDEDPD, 0xfc0007ff00000000, 0xec00028400000000, 0x7000000000000, // DFP Decode DPD To BCD X-form (ddedpd SP,FRT,FRB)\n\t\t[6]*argField{ap_ImmUnsigned_11_12, ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DDEDPDCC, 0xfc0007ff00000000, 0xec00028500000000, 0x7000000000000, // DFP Decode DPD To BCD X-form (ddedpd. SP,FRT,FRB)\n\t\t[6]*argField{ap_ImmUnsigned_11_12, ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DDEDPDQ, 0xfc0007ff00000000, 0xfc00028400000000, 0x7000000000000, // DFP Decode DPD To BCD Quad X-form (ddedpdq SP,FRTp,FRBp)\n\t\t[6]*argField{ap_ImmUnsigned_11_12, ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DDEDPDQCC, 0xfc0007ff00000000, 0xfc00028500000000, 0x7000000000000, // DFP Decode DPD To BCD Quad X-form (ddedpdq. SP,FRTp,FRBp)\n\t\t[6]*argField{ap_ImmUnsigned_11_12, ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DDIV, 0xfc0007ff00000000, 0xec00044400000000, 0x0, // DFP Divide X-form (ddiv FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DDIVCC, 0xfc0007ff00000000, 0xec00044500000000, 0x0, // DFP Divide X-form (ddiv. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DDIVQ, 0xfc0007ff00000000, 0xfc00044400000000, 0x0, // DFP Divide Quad X-form (ddivq FRTp,FRAp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DDIVQCC, 0xfc0007ff00000000, 0xfc00044500000000, 0x0, // DFP Divide Quad X-form (ddivq. FRTp,FRAp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DENBCD, 0xfc0007ff00000000, 0xec00068400000000, 0xf000000000000, // DFP Encode BCD To DPD X-form (denbcd S,FRT,FRB)\n\t\t[6]*argField{ap_ImmUnsigned_11_11, ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DENBCDCC, 0xfc0007ff00000000, 0xec00068500000000, 0xf000000000000, // DFP Encode BCD To DPD X-form (denbcd. S,FRT,FRB)\n\t\t[6]*argField{ap_ImmUnsigned_11_11, ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DENBCDQ, 0xfc0007ff00000000, 0xfc00068400000000, 0xf000000000000, // DFP Encode BCD To DPD Quad X-form (denbcdq S,FRTp,FRBp)\n\t\t[6]*argField{ap_ImmUnsigned_11_11, ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DENBCDQCC, 0xfc0007ff00000000, 0xfc00068500000000, 0xf000000000000, // DFP Encode BCD To DPD Quad X-form (denbcdq. S,FRTp,FRBp)\n\t\t[6]*argField{ap_ImmUnsigned_11_11, ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DIEX, 0xfc0007ff00000000, 0xec0006c400000000, 0x0, // DFP Insert Biased Exponent X-form (diex FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DIEXCC, 0xfc0007ff00000000, 0xec0006c500000000, 0x0, // DFP Insert Biased Exponent X-form (diex. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DIEXQCC, 0xfc0007ff00000000, 0xfc0006c500000000, 0x0, // DFP Insert Biased Exponent Quad X-form (diexq. FRTp,FRA,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DIEXQ, 0xfc0007fe00000000, 0xfc0006c400000000, 0x0, // DFP Insert Biased Exponent Quad X-form (diexq FRTp,FRA,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DMUL, 0xfc0007ff00000000, 0xec00004400000000, 0x0, // DFP Multiply X-form (dmul FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DMULCC, 0xfc0007ff00000000, 0xec00004500000000, 0x0, // DFP Multiply X-form (dmul. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DMULQ, 0xfc0007ff00000000, 0xfc00004400000000, 0x0, // DFP Multiply Quad X-form (dmulq FRTp,FRAp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DMULQCC, 0xfc0007ff00000000, 0xfc00004500000000, 0x0, // DFP Multiply Quad X-form (dmulq. FRTp,FRAp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DQUA, 0xfc0001ff00000000, 0xec00000600000000, 0x0, // DFP Quantize Z23-form (dqua FRT,FRA,FRB,RMC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DQUACC, 0xfc0001ff00000000, 0xec00000700000000, 0x0, // DFP Quantize Z23-form (dqua. FRT,FRA,FRB,RMC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DQUAI, 0xfc0001ff00000000, 0xec00008600000000, 0x0, // DFP Quantize Immediate Z23-form (dquai TE,FRT,FRB,RMC)\n\t\t[6]*argField{ap_ImmSigned_11_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DQUAICC, 0xfc0001ff00000000, 0xec00008700000000, 0x0, // DFP Quantize Immediate Z23-form (dquai. TE,FRT,FRB,RMC)\n\t\t[6]*argField{ap_ImmSigned_11_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DQUAIQ, 0xfc0001ff00000000, 0xfc00008600000000, 0x0, // DFP Quantize Immediate Quad Z23-form (dquaiq TE,FRTp,FRBp,RMC)\n\t\t[6]*argField{ap_ImmSigned_11_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DQUAIQCC, 0xfc0001ff00000000, 0xfc00008700000000, 0x0, // DFP Quantize Immediate Quad Z23-form (dquaiq. TE,FRTp,FRBp,RMC)\n\t\t[6]*argField{ap_ImmSigned_11_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DQUAQ, 0xfc0001ff00000000, 0xfc00000600000000, 0x0, // DFP Quantize Quad Z23-form (dquaq FRTp,FRAp,FRBp,RMC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DQUAQCC, 0xfc0001ff00000000, 0xfc00000700000000, 0x0, // DFP Quantize Quad Z23-form (dquaq. FRTp,FRAp,FRBp,RMC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRDPQ, 0xfc0007ff00000000, 0xfc00060400000000, 0x1f000000000000, // DFP Round To DFP Long X-form (drdpq FRTp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DRDPQCC, 0xfc0007ff00000000, 0xfc00060500000000, 0x1f000000000000, // DFP Round To DFP Long X-form (drdpq. FRTp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DRINTN, 0xfc0001ff00000000, 0xec0001c600000000, 0x1e000000000000, // DFP Round To FP Integer Without Inexact Z23-form (drintn R,FRT,FRB,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRINTNCC, 0xfc0001ff00000000, 0xec0001c700000000, 0x1e000000000000, // DFP Round To FP Integer Without Inexact Z23-form (drintn. R,FRT,FRB,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRINTNQ, 0xfc0001ff00000000, 0xfc0001c600000000, 0x1e000000000000, // DFP Round To FP Integer Without Inexact Quad Z23-form (drintnq R,FRTp,FRBp,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRINTNQCC, 0xfc0001ff00000000, 0xfc0001c700000000, 0x1e000000000000, // DFP Round To FP Integer Without Inexact Quad Z23-form (drintnq. R,FRTp,FRBp,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRINTX, 0xfc0001ff00000000, 0xec0000c600000000, 0x1e000000000000, // DFP Round To FP Integer With Inexact Z23-form (drintx R,FRT,FRB,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRINTXCC, 0xfc0001ff00000000, 0xec0000c700000000, 0x1e000000000000, // DFP Round To FP Integer With Inexact Z23-form (drintx. R,FRT,FRB,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRINTXQ, 0xfc0001ff00000000, 0xfc0000c600000000, 0x1e000000000000, // DFP Round To FP Integer With Inexact Quad Z23-form (drintxq R,FRTp,FRBp,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRINTXQCC, 0xfc0001ff00000000, 0xfc0000c700000000, 0x1e000000000000, // DFP Round To FP Integer With Inexact Quad Z23-form (drintxq. R,FRTp,FRBp,RMC)\n\t\t[6]*argField{ap_ImmUnsigned_15_15, ap_FPReg_6_10, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRRND, 0xfc0001ff00000000, 0xec00004600000000, 0x0, // DFP Reround Z23-form (drrnd FRT,FRA,FRB,RMC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRRNDCC, 0xfc0001ff00000000, 0xec00004700000000, 0x0, // DFP Reround Z23-form (drrnd. FRT,FRA,FRB,RMC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRRNDQ, 0xfc0001ff00000000, 0xfc00004600000000, 0x0, // DFP Reround Quad Z23-form (drrndq FRTp,FRA,FRBp,RMC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRRNDQCC, 0xfc0001ff00000000, 0xfc00004700000000, 0x0, // DFP Reround Quad Z23-form (drrndq. FRTp,FRA,FRBp,RMC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20, ap_ImmUnsigned_21_22}},\n\t{DRSP, 0xfc0007ff00000000, 0xec00060400000000, 0x1f000000000000, // DFP Round To DFP Short X-form (drsp FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DRSPCC, 0xfc0007ff00000000, 0xec00060500000000, 0x1f000000000000, // DFP Round To DFP Short X-form (drsp. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DSCLI, 0xfc0003ff00000000, 0xec00008400000000, 0x0, // DFP Shift Significand Left Immediate Z22-form (dscli FRT,FRA,SH)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DSCLICC, 0xfc0003ff00000000, 0xec00008500000000, 0x0, // DFP Shift Significand Left Immediate Z22-form (dscli. FRT,FRA,SH)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DSCLIQ, 0xfc0003ff00000000, 0xfc00008400000000, 0x0, // DFP Shift Significand Left Immediate Quad Z22-form (dscliq FRTp,FRAp,SH)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DSCLIQCC, 0xfc0003ff00000000, 0xfc00008500000000, 0x0, // DFP Shift Significand Left Immediate Quad Z22-form (dscliq. FRTp,FRAp,SH)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DSCRI, 0xfc0003ff00000000, 0xec0000c400000000, 0x0, // DFP Shift Significand Right Immediate Z22-form (dscri FRT,FRA,SH)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DSCRICC, 0xfc0003ff00000000, 0xec0000c500000000, 0x0, // DFP Shift Significand Right Immediate Z22-form (dscri. FRT,FRA,SH)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DSCRIQ, 0xfc0003ff00000000, 0xfc0000c400000000, 0x0, // DFP Shift Significand Right Immediate Quad Z22-form (dscriq FRTp,FRAp,SH)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DSCRIQCC, 0xfc0003ff00000000, 0xfc0000c500000000, 0x0, // DFP Shift Significand Right Immediate Quad Z22-form (dscriq. FRTp,FRAp,SH)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DSUB, 0xfc0007ff00000000, 0xec00040400000000, 0x0, // DFP Subtract X-form (dsub FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DSUBCC, 0xfc0007ff00000000, 0xec00040500000000, 0x0, // DFP Subtract X-form (dsub. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DSUBQ, 0xfc0007ff00000000, 0xfc00040400000000, 0x0, // DFP Subtract Quad X-form (dsubq FRTp,FRAp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DSUBQCC, 0xfc0007ff00000000, 0xfc00040500000000, 0x0, // DFP Subtract Quad X-form (dsubq. FRTp,FRAp,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DTSTDC, 0xfc0003fe00000000, 0xec00018400000000, 0x60000100000000, // DFP Test Data Class Z22-form (dtstdc BF,FRA,DCM)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DTSTDCQ, 0xfc0003fe00000000, 0xfc00018400000000, 0x60000100000000, // DFP Test Data Class Quad Z22-form (dtstdcq BF,FRAp,DCM)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DTSTDG, 0xfc0003fe00000000, 0xec0001c400000000, 0x60000100000000, // DFP Test Data Group Z22-form (dtstdg BF,FRA,DGM)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DTSTDGQ, 0xfc0003fe00000000, 0xfc0001c400000000, 0x60000100000000, // DFP Test Data Group Quad Z22-form (dtstdgq BF,FRAp,DGM)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_ImmUnsigned_16_21}},\n\t{DTSTEX, 0xfc0007fe00000000, 0xec00014400000000, 0x60000100000000, // DFP Test Exponent X-form (dtstex BF,FRA,FRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DTSTEXQ, 0xfc0007fe00000000, 0xfc00014400000000, 0x60000100000000, // DFP Test Exponent Quad X-form (dtstexq BF,FRAp,FRBp)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DTSTSF, 0xfc0007fe00000000, 0xec00054400000000, 0x60000100000000, // DFP Test Significance X-form (dtstsf BF,FRA,FRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DTSTSFQ, 0xfc0007fe00000000, 0xfc00054400000000, 0x60000100000000, // DFP Test Significance Quad X-form (dtstsfq BF,FRA,FRBp)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{DXEX, 0xfc0007ff00000000, 0xec0002c400000000, 0x1f000000000000, // DFP Extract Biased Exponent X-form (dxex FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DXEXCC, 0xfc0007ff00000000, 0xec0002c500000000, 0x1f000000000000, // DFP Extract Biased Exponent X-form (dxex. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DXEXQ, 0xfc0007ff00000000, 0xfc0002c400000000, 0x1f000000000000, // DFP Extract Biased Exponent Quad X-form (dxexq FRT,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{DXEXQCC, 0xfc0007ff00000000, 0xfc0002c500000000, 0x1f000000000000, // DFP Extract Biased Exponent Quad X-form (dxexq. FRT,FRBp)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCPSGN, 0xfc0007ff00000000, 0xfc00001000000000, 0x0, // Floating Copy Sign X-form (fcpsgn FRT, FRA, FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FCPSGNCC, 0xfc0007ff00000000, 0xfc00001100000000, 0x0, // Floating Copy Sign X-form (fcpsgn. FRT, FRA, FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{LBZCIX, 0xfc0007fe00000000, 0x7c0006aa00000000, 0x100000000, // Load Byte & Zero Caching Inhibited Indexed X-form (lbzcix RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LDCIX, 0xfc0007fe00000000, 0x7c0006ea00000000, 0x100000000, // Load Doubleword Caching Inhibited Indexed X-form (ldcix RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LFDP, 0xfc00000300000000, 0xe400000000000000, 0x0, // Load Floating-Point Double Pair DS-form (lfdp FRTp,DS(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{LFDPX, 0xfc0007fe00000000, 0x7c00062e00000000, 0x100000000, // Load Floating-Point Double Pair Indexed X-form (lfdpx FRTp,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LFIWAX, 0xfc0007fe00000000, 0x7c0006ae00000000, 0x100000000, // Load Floating-Point as Integer Word Algebraic Indexed X-form (lfiwax FRT,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LHZCIX, 0xfc0007fe00000000, 0x7c00066a00000000, 0x100000000, // Load Halfword & Zero Caching Inhibited Indexed X-form (lhzcix RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LWZCIX, 0xfc0007fe00000000, 0x7c00062a00000000, 0x100000000, // Load Word & Zero Caching Inhibited Indexed X-form (lwzcix RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{PRTYD, 0xfc0007fe00000000, 0x7c00017400000000, 0xf80100000000, // Parity Doubleword X-form (prtyd RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{PRTYW, 0xfc0007fe00000000, 0x7c00013400000000, 0xf80100000000, // Parity Word X-form (prtyw RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{SLBFEECC, 0xfc0007ff00000000, 0x7c0007a700000000, 0x1f000000000000, // SLB Find Entry ESID X-form (slbfee. RT,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_16_20}},\n\t{STBCIX, 0xfc0007fe00000000, 0x7c0007aa00000000, 0x100000000, // Store Byte Caching Inhibited Indexed X-form (stbcix RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STDCIX, 0xfc0007fe00000000, 0x7c0007ea00000000, 0x100000000, // Store Doubleword Caching Inhibited Indexed X-form (stdcix RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STFDP, 0xfc00000300000000, 0xf400000000000000, 0x0, // Store Floating-Point Double Pair DS-form (stfdp FRSp,DS(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{STFDPX, 0xfc0007fe00000000, 0x7c00072e00000000, 0x100000000, // Store Floating-Point Double Pair Indexed X-form (stfdpx FRSp,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STHCIX, 0xfc0007fe00000000, 0x7c00076a00000000, 0x100000000, // Store Halfword Caching Inhibited Indexed X-form (sthcix RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STWCIX, 0xfc0007fe00000000, 0x7c00072a00000000, 0x100000000, // Store Word Caching Inhibited Indexed X-form (stwcix RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ISEL, 0xfc00003e00000000, 0x7c00001e00000000, 0x100000000, // Integer Select A-form (isel RT,RA,RB,BC)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_CondRegBit_21_25}},\n\t{LVEBX, 0xfc0007fe00000000, 0x7c00000e00000000, 0x100000000, // Load Vector Element Byte Indexed X-form (lvebx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LVEHX, 0xfc0007fe00000000, 0x7c00004e00000000, 0x100000000, // Load Vector Element Halfword Indexed X-form (lvehx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LVEWX, 0xfc0007fe00000000, 0x7c00008e00000000, 0x100000000, // Load Vector Element Word Indexed X-form (lvewx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LVSL, 0xfc0007fe00000000, 0x7c00000c00000000, 0x100000000, // Load Vector for Shift Left Indexed X-form (lvsl VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LVSR, 0xfc0007fe00000000, 0x7c00004c00000000, 0x100000000, // Load Vector for Shift Right Indexed X-form (lvsr VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LVX, 0xfc0007fe00000000, 0x7c0000ce00000000, 0x100000000, // Load Vector Indexed X-form (lvx VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LVXL, 0xfc0007fe00000000, 0x7c0002ce00000000, 0x100000000, // Load Vector Indexed Last X-form (lvxl VRT,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MFVSCR, 0xfc0007ff00000000, 0x1000060400000000, 0x1ff80000000000, // Move From Vector Status and Control Register VX-form (mfvscr VRT)\n\t\t[6]*argField{ap_VecReg_6_10}},\n\t{MTVSCR, 0xfc0007ff00000000, 0x1000064400000000, 0x3ff000000000000, // Move To Vector Status and Control Register VX-form (mtvscr VRB)\n\t\t[6]*argField{ap_VecReg_16_20}},\n\t{STVEBX, 0xfc0007fe00000000, 0x7c00010e00000000, 0x100000000, // Store Vector Element Byte Indexed X-form (stvebx VRS,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STVEHX, 0xfc0007fe00000000, 0x7c00014e00000000, 0x100000000, // Store Vector Element Halfword Indexed X-form (stvehx VRS,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STVEWX, 0xfc0007fe00000000, 0x7c00018e00000000, 0x100000000, // Store Vector Element Word Indexed X-form (stvewx VRS,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STVX, 0xfc0007fe00000000, 0x7c0001ce00000000, 0x100000000, // Store Vector Indexed X-form (stvx VRS,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STVXL, 0xfc0007fe00000000, 0x7c0003ce00000000, 0x100000000, // Store Vector Indexed Last X-form (stvxl VRS,RA,RB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{TLBIEL, 0xfc0007fe00000000, 0x7c00022400000000, 0x10000100000000, // TLB Invalidate Entry Local X-form (tlbiel RB,RS,RIC,PRS,R)\n\t\t[6]*argField{ap_Reg_16_20, ap_Reg_6_10, ap_ImmUnsigned_12_13, ap_ImmUnsigned_14_14, ap_ImmUnsigned_15_15}},\n\t{VADDCUW, 0xfc0007ff00000000, 0x1000018000000000, 0x0, // Vector Add & write Carry Unsigned Word VX-form (vaddcuw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDFP, 0xfc0007ff00000000, 0x1000000a00000000, 0x0, // Vector Add Floating-Point VX-form (vaddfp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDSBS, 0xfc0007ff00000000, 0x1000030000000000, 0x0, // Vector Add Signed Byte Saturate VX-form (vaddsbs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDSHS, 0xfc0007ff00000000, 0x1000034000000000, 0x0, // Vector Add Signed Halfword Saturate VX-form (vaddshs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDSWS, 0xfc0007ff00000000, 0x1000038000000000, 0x0, // Vector Add Signed Word Saturate VX-form (vaddsws VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDUBM, 0xfc0007ff00000000, 0x1000000000000000, 0x0, // Vector Add Unsigned Byte Modulo VX-form (vaddubm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDUBS, 0xfc0007ff00000000, 0x1000020000000000, 0x0, // Vector Add Unsigned Byte Saturate VX-form (vaddubs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDUHM, 0xfc0007ff00000000, 0x1000004000000000, 0x0, // Vector Add Unsigned Halfword Modulo VX-form (vadduhm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDUHS, 0xfc0007ff00000000, 0x1000024000000000, 0x0, // Vector Add Unsigned Halfword Saturate VX-form (vadduhs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDUWM, 0xfc0007ff00000000, 0x1000008000000000, 0x0, // Vector Add Unsigned Word Modulo VX-form (vadduwm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VADDUWS, 0xfc0007ff00000000, 0x1000028000000000, 0x0, // Vector Add Unsigned Word Saturate VX-form (vadduws VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VAND, 0xfc0007ff00000000, 0x1000040400000000, 0x0, // Vector Logical AND VX-form (vand VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VANDC, 0xfc0007ff00000000, 0x1000044400000000, 0x0, // Vector Logical AND with Complement VX-form (vandc VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VAVGSB, 0xfc0007ff00000000, 0x1000050200000000, 0x0, // Vector Average Signed Byte VX-form (vavgsb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VAVGSH, 0xfc0007ff00000000, 0x1000054200000000, 0x0, // Vector Average Signed Halfword VX-form (vavgsh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VAVGSW, 0xfc0007ff00000000, 0x1000058200000000, 0x0, // Vector Average Signed Word VX-form (vavgsw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VAVGUB, 0xfc0007ff00000000, 0x1000040200000000, 0x0, // Vector Average Unsigned Byte VX-form (vavgub VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VAVGUH, 0xfc0007ff00000000, 0x1000044200000000, 0x0, // Vector Average Unsigned Halfword VX-form (vavguh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VAVGUW, 0xfc0007ff00000000, 0x1000048200000000, 0x0, // Vector Average Unsigned Word VX-form (vavguw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCFSX, 0xfc0007ff00000000, 0x1000034a00000000, 0x0, // Vector Convert with round to nearest From Signed Word to floating-point format VX-form (vcfsx VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_11_15}},\n\t{VCFUX, 0xfc0007ff00000000, 0x1000030a00000000, 0x0, // Vector Convert with round to nearest From Unsigned Word to floating-point format VX-form (vcfux VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_11_15}},\n\t{VCMPBFP, 0xfc0007ff00000000, 0x100003c600000000, 0x0, // Vector Compare Bounds Floating-Point VC-form (vcmpbfp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPBFPCC, 0xfc0007ff00000000, 0x100007c600000000, 0x0, // Vector Compare Bounds Floating-Point VC-form (vcmpbfp. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQFP, 0xfc0007ff00000000, 0x100000c600000000, 0x0, // Vector Compare Equal Floating-Point VC-form (vcmpeqfp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQFPCC, 0xfc0007ff00000000, 0x100004c600000000, 0x0, // Vector Compare Equal Floating-Point VC-form (vcmpeqfp. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQUB, 0xfc0007ff00000000, 0x1000000600000000, 0x0, // Vector Compare Equal Unsigned Byte VC-form (vcmpequb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQUBCC, 0xfc0007ff00000000, 0x1000040600000000, 0x0, // Vector Compare Equal Unsigned Byte VC-form (vcmpequb. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQUH, 0xfc0007ff00000000, 0x1000004600000000, 0x0, // Vector Compare Equal Unsigned Halfword VC-form (vcmpequh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQUHCC, 0xfc0007ff00000000, 0x1000044600000000, 0x0, // Vector Compare Equal Unsigned Halfword VC-form (vcmpequh. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQUW, 0xfc0007ff00000000, 0x1000008600000000, 0x0, // Vector Compare Equal Unsigned Word VC-form (vcmpequw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPEQUWCC, 0xfc0007ff00000000, 0x1000048600000000, 0x0, // Vector Compare Equal Unsigned Word VC-form (vcmpequw. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGEFP, 0xfc0007ff00000000, 0x100001c600000000, 0x0, // Vector Compare Greater Than or Equal Floating-Point VC-form (vcmpgefp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGEFPCC, 0xfc0007ff00000000, 0x100005c600000000, 0x0, // Vector Compare Greater Than or Equal Floating-Point VC-form (vcmpgefp. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTFP, 0xfc0007ff00000000, 0x100002c600000000, 0x0, // Vector Compare Greater Than Floating-Point VC-form (vcmpgtfp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTFPCC, 0xfc0007ff00000000, 0x100006c600000000, 0x0, // Vector Compare Greater Than Floating-Point VC-form (vcmpgtfp. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSB, 0xfc0007ff00000000, 0x1000030600000000, 0x0, // Vector Compare Greater Than Signed Byte VC-form (vcmpgtsb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSBCC, 0xfc0007ff00000000, 0x1000070600000000, 0x0, // Vector Compare Greater Than Signed Byte VC-form (vcmpgtsb. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSH, 0xfc0007ff00000000, 0x1000034600000000, 0x0, // Vector Compare Greater Than Signed Halfword VC-form (vcmpgtsh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSHCC, 0xfc0007ff00000000, 0x1000074600000000, 0x0, // Vector Compare Greater Than Signed Halfword VC-form (vcmpgtsh. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSW, 0xfc0007ff00000000, 0x1000038600000000, 0x0, // Vector Compare Greater Than Signed Word VC-form (vcmpgtsw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTSWCC, 0xfc0007ff00000000, 0x1000078600000000, 0x0, // Vector Compare Greater Than Signed Word VC-form (vcmpgtsw. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUB, 0xfc0007ff00000000, 0x1000020600000000, 0x0, // Vector Compare Greater Than Unsigned Byte VC-form (vcmpgtub VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUBCC, 0xfc0007ff00000000, 0x1000060600000000, 0x0, // Vector Compare Greater Than Unsigned Byte VC-form (vcmpgtub. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUH, 0xfc0007ff00000000, 0x1000024600000000, 0x0, // Vector Compare Greater Than Unsigned Halfword VC-form (vcmpgtuh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUHCC, 0xfc0007ff00000000, 0x1000064600000000, 0x0, // Vector Compare Greater Than Unsigned Halfword VC-form (vcmpgtuh. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUW, 0xfc0007ff00000000, 0x1000028600000000, 0x0, // Vector Compare Greater Than Unsigned Word VC-form (vcmpgtuw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCMPGTUWCC, 0xfc0007ff00000000, 0x1000068600000000, 0x0, // Vector Compare Greater Than Unsigned Word VC-form (vcmpgtuw. VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VCTSXS, 0xfc0007ff00000000, 0x100003ca00000000, 0x0, // Vector Convert with round to zero from floating-point To Signed Word format Saturate VX-form (vctsxs VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_11_15}},\n\t{VCTUXS, 0xfc0007ff00000000, 0x1000038a00000000, 0x0, // Vector Convert with round to zero from floating-point To Unsigned Word format Saturate VX-form (vctuxs VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_11_15}},\n\t{VEXPTEFP, 0xfc0007ff00000000, 0x1000018a00000000, 0x1f000000000000, // Vector 2 Raised to the Exponent Estimate Floating-Point VX-form (vexptefp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VLOGEFP, 0xfc0007ff00000000, 0x100001ca00000000, 0x1f000000000000, // Vector Log Base 2 Estimate Floating-Point VX-form (vlogefp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VMADDFP, 0xfc00003f00000000, 0x1000002e00000000, 0x0, // Vector Multiply-Add Floating-Point VA-form (vmaddfp VRT,VRA,VRC,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_21_25, ap_VecReg_16_20}},\n\t{VMAXFP, 0xfc0007ff00000000, 0x1000040a00000000, 0x0, // Vector Maximum Floating-Point VX-form (vmaxfp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMAXSB, 0xfc0007ff00000000, 0x1000010200000000, 0x0, // Vector Maximum Signed Byte VX-form (vmaxsb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMAXSH, 0xfc0007ff00000000, 0x1000014200000000, 0x0, // Vector Maximum Signed Halfword VX-form (vmaxsh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMAXSW, 0xfc0007ff00000000, 0x1000018200000000, 0x0, // Vector Maximum Signed Word VX-form (vmaxsw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMAXUB, 0xfc0007ff00000000, 0x1000000200000000, 0x0, // Vector Maximum Unsigned Byte VX-form (vmaxub VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMAXUH, 0xfc0007ff00000000, 0x1000004200000000, 0x0, // Vector Maximum Unsigned Halfword VX-form (vmaxuh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMAXUW, 0xfc0007ff00000000, 0x1000008200000000, 0x0, // Vector Maximum Unsigned Word VX-form (vmaxuw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMHADDSHS, 0xfc00003f00000000, 0x1000002000000000, 0x0, // Vector Multiply-High-Add Signed Halfword Saturate VA-form (vmhaddshs VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMHRADDSHS, 0xfc00003f00000000, 0x1000002100000000, 0x0, // Vector Multiply-High-Round-Add Signed Halfword Saturate VA-form (vmhraddshs VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMINFP, 0xfc0007ff00000000, 0x1000044a00000000, 0x0, // Vector Minimum Floating-Point VX-form (vminfp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMINSB, 0xfc0007ff00000000, 0x1000030200000000, 0x0, // Vector Minimum Signed Byte VX-form (vminsb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMINSH, 0xfc0007ff00000000, 0x1000034200000000, 0x0, // Vector Minimum Signed Halfword VX-form (vminsh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMINSW, 0xfc0007ff00000000, 0x1000038200000000, 0x0, // Vector Minimum Signed Word VX-form (vminsw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMINUB, 0xfc0007ff00000000, 0x1000020200000000, 0x0, // Vector Minimum Unsigned Byte VX-form (vminub VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMINUH, 0xfc0007ff00000000, 0x1000024200000000, 0x0, // Vector Minimum Unsigned Halfword VX-form (vminuh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMINUW, 0xfc0007ff00000000, 0x1000028200000000, 0x0, // Vector Minimum Unsigned Word VX-form (vminuw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMLADDUHM, 0xfc00003f00000000, 0x1000002200000000, 0x0, // Vector Multiply-Low-Add Unsigned Halfword Modulo VA-form (vmladduhm VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMRGHB, 0xfc0007ff00000000, 0x1000000c00000000, 0x0, // Vector Merge High Byte VX-form (vmrghb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMRGHH, 0xfc0007ff00000000, 0x1000004c00000000, 0x0, // Vector Merge High Halfword VX-form (vmrghh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMRGHW, 0xfc0007ff00000000, 0x1000008c00000000, 0x0, // Vector Merge High Word VX-form (vmrghw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMRGLB, 0xfc0007ff00000000, 0x1000010c00000000, 0x0, // Vector Merge Low Byte VX-form (vmrglb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMRGLH, 0xfc0007ff00000000, 0x1000014c00000000, 0x0, // Vector Merge Low Halfword VX-form (vmrglh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMRGLW, 0xfc0007ff00000000, 0x1000018c00000000, 0x0, // Vector Merge Low Word VX-form (vmrglw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMSUMMBM, 0xfc00003f00000000, 0x1000002500000000, 0x0, // Vector Multiply-Sum Mixed Byte Modulo VA-form (vmsummbm VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMSUMSHM, 0xfc00003f00000000, 0x1000002800000000, 0x0, // Vector Multiply-Sum Signed Halfword Modulo VA-form (vmsumshm VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMSUMSHS, 0xfc00003f00000000, 0x1000002900000000, 0x0, // Vector Multiply-Sum Signed Halfword Saturate VA-form (vmsumshs VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMSUMUBM, 0xfc00003f00000000, 0x1000002400000000, 0x0, // Vector Multiply-Sum Unsigned Byte Modulo VA-form (vmsumubm VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMSUMUHM, 0xfc00003f00000000, 0x1000002600000000, 0x0, // Vector Multiply-Sum Unsigned Halfword Modulo VA-form (vmsumuhm VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMSUMUHS, 0xfc00003f00000000, 0x1000002700000000, 0x0, // Vector Multiply-Sum Unsigned Halfword Saturate VA-form (vmsumuhs VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VMULESB, 0xfc0007ff00000000, 0x1000030800000000, 0x0, // Vector Multiply Even Signed Byte VX-form (vmulesb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULESH, 0xfc0007ff00000000, 0x1000034800000000, 0x0, // Vector Multiply Even Signed Halfword VX-form (vmulesh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULEUB, 0xfc0007ff00000000, 0x1000020800000000, 0x0, // Vector Multiply Even Unsigned Byte VX-form (vmuleub VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULEUH, 0xfc0007ff00000000, 0x1000024800000000, 0x0, // Vector Multiply Even Unsigned Halfword VX-form (vmuleuh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULOSB, 0xfc0007ff00000000, 0x1000010800000000, 0x0, // Vector Multiply Odd Signed Byte VX-form (vmulosb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULOSH, 0xfc0007ff00000000, 0x1000014800000000, 0x0, // Vector Multiply Odd Signed Halfword VX-form (vmulosh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULOUB, 0xfc0007ff00000000, 0x1000000800000000, 0x0, // Vector Multiply Odd Unsigned Byte VX-form (vmuloub VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VMULOUH, 0xfc0007ff00000000, 0x1000004800000000, 0x0, // Vector Multiply Odd Unsigned Halfword VX-form (vmulouh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VNMSUBFP, 0xfc00003f00000000, 0x1000002f00000000, 0x0, // Vector Negative Multiply-Subtract Floating-Point VA-form (vnmsubfp VRT,VRA,VRC,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_21_25, ap_VecReg_16_20}},\n\t{VNOR, 0xfc0007ff00000000, 0x1000050400000000, 0x0, // Vector Logical NOR VX-form (vnor VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VOR, 0xfc0007ff00000000, 0x1000048400000000, 0x0, // Vector Logical OR VX-form (vor VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPERM, 0xfc00003f00000000, 0x1000002b00000000, 0x0, // Vector Permute VA-form (vperm VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VPKPX, 0xfc0007ff00000000, 0x1000030e00000000, 0x0, // Vector Pack Pixel VX-form (vpkpx VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKSHSS, 0xfc0007ff00000000, 0x1000018e00000000, 0x0, // Vector Pack Signed Halfword Signed Saturate VX-form (vpkshss VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKSHUS, 0xfc0007ff00000000, 0x1000010e00000000, 0x0, // Vector Pack Signed Halfword Unsigned Saturate VX-form (vpkshus VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKSWSS, 0xfc0007ff00000000, 0x100001ce00000000, 0x0, // Vector Pack Signed Word Signed Saturate VX-form (vpkswss VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKSWUS, 0xfc0007ff00000000, 0x1000014e00000000, 0x0, // Vector Pack Signed Word Unsigned Saturate VX-form (vpkswus VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKUHUM, 0xfc0007ff00000000, 0x1000000e00000000, 0x0, // Vector Pack Unsigned Halfword Unsigned Modulo VX-form (vpkuhum VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKUHUS, 0xfc0007ff00000000, 0x1000008e00000000, 0x0, // Vector Pack Unsigned Halfword Unsigned Saturate VX-form (vpkuhus VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKUWUM, 0xfc0007ff00000000, 0x1000004e00000000, 0x0, // Vector Pack Unsigned Word Unsigned Modulo VX-form (vpkuwum VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VPKUWUS, 0xfc0007ff00000000, 0x100000ce00000000, 0x0, // Vector Pack Unsigned Word Unsigned Saturate VX-form (vpkuwus VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VREFP, 0xfc0007ff00000000, 0x1000010a00000000, 0x1f000000000000, // Vector Reciprocal Estimate Floating-Point VX-form (vrefp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VRFIM, 0xfc0007ff00000000, 0x100002ca00000000, 0x1f000000000000, // Vector Round to Floating-Point Integer toward -Infinity VX-form (vrfim VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VRFIN, 0xfc0007ff00000000, 0x1000020a00000000, 0x1f000000000000, // Vector Round to Floating-Point Integer Nearest VX-form (vrfin VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VRFIP, 0xfc0007ff00000000, 0x1000028a00000000, 0x1f000000000000, // Vector Round to Floating-Point Integer toward +Infinity VX-form (vrfip VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VRFIZ, 0xfc0007ff00000000, 0x1000024a00000000, 0x1f000000000000, // Vector Round to Floating-Point Integer toward Zero VX-form (vrfiz VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VRLB, 0xfc0007ff00000000, 0x1000000400000000, 0x0, // Vector Rotate Left Byte VX-form (vrlb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VRLH, 0xfc0007ff00000000, 0x1000004400000000, 0x0, // Vector Rotate Left Halfword VX-form (vrlh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VRLW, 0xfc0007ff00000000, 0x1000008400000000, 0x0, // Vector Rotate Left Word VX-form (vrlw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VRSQRTEFP, 0xfc0007ff00000000, 0x1000014a00000000, 0x1f000000000000, // Vector Reciprocal Square Root Estimate Floating-Point VX-form (vrsqrtefp VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VSEL, 0xfc00003f00000000, 0x1000002a00000000, 0x0, // Vector Select VA-form (vsel VRT,VRA,VRB,VRC)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_VecReg_21_25}},\n\t{VSL, 0xfc0007ff00000000, 0x100001c400000000, 0x0, // Vector Shift Left VX-form (vsl VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSLB, 0xfc0007ff00000000, 0x1000010400000000, 0x0, // Vector Shift Left Byte VX-form (vslb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSLDOI, 0xfc00003f00000000, 0x1000002c00000000, 0x40000000000, // Vector Shift Left Double by Octet Immediate VA-form (vsldoi VRT,VRA,VRB,SHB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20, ap_ImmUnsigned_22_25}},\n\t{VSLH, 0xfc0007ff00000000, 0x1000014400000000, 0x0, // Vector Shift Left Halfword VX-form (vslh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSLO, 0xfc0007ff00000000, 0x1000040c00000000, 0x0, // Vector Shift Left by Octet VX-form (vslo VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSLW, 0xfc0007ff00000000, 0x1000018400000000, 0x0, // Vector Shift Left Word VX-form (vslw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSPLTB, 0xfc0007ff00000000, 0x1000020c00000000, 0x10000000000000, // Vector Splat Byte VX-form (vspltb VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_12_15}},\n\t{VSPLTH, 0xfc0007ff00000000, 0x1000024c00000000, 0x18000000000000, // Vector Splat Halfword VX-form (vsplth VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_13_15}},\n\t{VSPLTISB, 0xfc0007ff00000000, 0x1000030c00000000, 0xf80000000000, // Vector Splat Immediate Signed Byte VX-form (vspltisb VRT,SIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_ImmSigned_11_15}},\n\t{VSPLTISH, 0xfc0007ff00000000, 0x1000034c00000000, 0xf80000000000, // Vector Splat Immediate Signed Halfword VX-form (vspltish VRT,SIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_ImmSigned_11_15}},\n\t{VSPLTISW, 0xfc0007ff00000000, 0x1000038c00000000, 0xf80000000000, // Vector Splat Immediate Signed Word VX-form (vspltisw VRT,SIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_ImmSigned_11_15}},\n\t{VSPLTW, 0xfc0007ff00000000, 0x1000028c00000000, 0x1c000000000000, // Vector Splat Word VX-form (vspltw VRT,VRB,UIM)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20, ap_ImmUnsigned_14_15}},\n\t{VSR, 0xfc0007ff00000000, 0x100002c400000000, 0x0, // Vector Shift Right VX-form (vsr VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRAB, 0xfc0007ff00000000, 0x1000030400000000, 0x0, // Vector Shift Right Algebraic Byte VX-form (vsrab VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRAH, 0xfc0007ff00000000, 0x1000034400000000, 0x0, // Vector Shift Right Algebraic Halfword VX-form (vsrah VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRAW, 0xfc0007ff00000000, 0x1000038400000000, 0x0, // Vector Shift Right Algebraic Word VX-form (vsraw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRB, 0xfc0007ff00000000, 0x1000020400000000, 0x0, // Vector Shift Right Byte VX-form (vsrb VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRH, 0xfc0007ff00000000, 0x1000024400000000, 0x0, // Vector Shift Right Halfword VX-form (vsrh VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRO, 0xfc0007ff00000000, 0x1000044c00000000, 0x0, // Vector Shift Right by Octet VX-form (vsro VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSRW, 0xfc0007ff00000000, 0x1000028400000000, 0x0, // Vector Shift Right Word VX-form (vsrw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBCUW, 0xfc0007ff00000000, 0x1000058000000000, 0x0, // Vector Subtract & Write Carry-out Unsigned Word VX-form (vsubcuw VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBFP, 0xfc0007ff00000000, 0x1000004a00000000, 0x0, // Vector Subtract Floating-Point VX-form (vsubfp VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBSBS, 0xfc0007ff00000000, 0x1000070000000000, 0x0, // Vector Subtract Signed Byte Saturate VX-form (vsubsbs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBSHS, 0xfc0007ff00000000, 0x1000074000000000, 0x0, // Vector Subtract Signed Halfword Saturate VX-form (vsubshs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBSWS, 0xfc0007ff00000000, 0x1000078000000000, 0x0, // Vector Subtract Signed Word Saturate VX-form (vsubsws VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBUBM, 0xfc0007ff00000000, 0x1000040000000000, 0x0, // Vector Subtract Unsigned Byte Modulo VX-form (vsububm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBUBS, 0xfc0007ff00000000, 0x1000060000000000, 0x0, // Vector Subtract Unsigned Byte Saturate VX-form (vsububs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBUHM, 0xfc0007ff00000000, 0x1000044000000000, 0x0, // Vector Subtract Unsigned Halfword Modulo VX-form (vsubuhm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBUHS, 0xfc0007ff00000000, 0x1000064000000000, 0x0, // Vector Subtract Unsigned Halfword Saturate VX-form (vsubuhs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBUWM, 0xfc0007ff00000000, 0x1000048000000000, 0x0, // Vector Subtract Unsigned Word Modulo VX-form (vsubuwm VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUBUWS, 0xfc0007ff00000000, 0x1000068000000000, 0x0, // Vector Subtract Unsigned Word Saturate VX-form (vsubuws VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUM2SWS, 0xfc0007ff00000000, 0x1000068800000000, 0x0, // Vector Sum across Half Signed Word Saturate VX-form (vsum2sws VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUM4SBS, 0xfc0007ff00000000, 0x1000070800000000, 0x0, // Vector Sum across Quarter Signed Byte Saturate VX-form (vsum4sbs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUM4SHS, 0xfc0007ff00000000, 0x1000064800000000, 0x0, // Vector Sum across Quarter Signed Halfword Saturate VX-form (vsum4shs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUM4UBS, 0xfc0007ff00000000, 0x1000060800000000, 0x0, // Vector Sum across Quarter Unsigned Byte Saturate VX-form (vsum4ubs VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VSUMSWS, 0xfc0007ff00000000, 0x1000078800000000, 0x0, // Vector Sum across Signed Word Saturate VX-form (vsumsws VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{VUPKHPX, 0xfc0007ff00000000, 0x1000034e00000000, 0x1f000000000000, // Vector Unpack High Pixel VX-form (vupkhpx VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VUPKHSB, 0xfc0007ff00000000, 0x1000020e00000000, 0x1f000000000000, // Vector Unpack High Signed Byte VX-form (vupkhsb VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VUPKHSH, 0xfc0007ff00000000, 0x1000024e00000000, 0x1f000000000000, // Vector Unpack High Signed Halfword VX-form (vupkhsh VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VUPKLPX, 0xfc0007ff00000000, 0x100003ce00000000, 0x1f000000000000, // Vector Unpack Low Pixel VX-form (vupklpx VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VUPKLSB, 0xfc0007ff00000000, 0x1000028e00000000, 0x1f000000000000, // Vector Unpack Low Signed Byte VX-form (vupklsb VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VUPKLSH, 0xfc0007ff00000000, 0x100002ce00000000, 0x1f000000000000, // Vector Unpack Low Signed Halfword VX-form (vupklsh VRT,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_16_20}},\n\t{VXOR, 0xfc0007ff00000000, 0x100004c400000000, 0x0, // Vector Logical XOR VX-form (vxor VRT,VRA,VRB)\n\t\t[6]*argField{ap_VecReg_6_10, ap_VecReg_11_15, ap_VecReg_16_20}},\n\t{FRE, 0xfc00003f00000000, 0xfc00003000000000, 0x1f07c000000000, // Floating Reciprocal Estimate A-form (fre FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRECC, 0xfc00003f00000000, 0xfc00003100000000, 0x1f07c000000000, // Floating Reciprocal Estimate A-form (fre. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRIM, 0xfc0007ff00000000, 0xfc0003d000000000, 0x1f000000000000, // Floating Round to Integer Minus X-form (frim FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRIMCC, 0xfc0007ff00000000, 0xfc0003d100000000, 0x1f000000000000, // Floating Round to Integer Minus X-form (frim. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRIN, 0xfc0007ff00000000, 0xfc00031000000000, 0x1f000000000000, // Floating Round to Integer Nearest X-form (frin FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRINCC, 0xfc0007ff00000000, 0xfc00031100000000, 0x1f000000000000, // Floating Round to Integer Nearest X-form (frin. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRIP, 0xfc0007ff00000000, 0xfc00039000000000, 0x1f000000000000, // Floating Round to Integer Plus X-form (frip FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRIPCC, 0xfc0007ff00000000, 0xfc00039100000000, 0x1f000000000000, // Floating Round to Integer Plus X-form (frip. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRIZ, 0xfc0007ff00000000, 0xfc00035000000000, 0x1f000000000000, // Floating Round to Integer Toward Zero X-form (friz FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRIZCC, 0xfc0007ff00000000, 0xfc00035100000000, 0x1f000000000000, // Floating Round to Integer Toward Zero X-form (friz. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRSQRTES, 0xfc00003f00000000, 0xec00003400000000, 0x1f07c000000000, // Floating Reciprocal Square Root Estimate Single A-form (frsqrtes FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRSQRTESCC, 0xfc00003f00000000, 0xec00003500000000, 0x1f07c000000000, // Floating Reciprocal Square Root Estimate Single A-form (frsqrtes. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{HRFID, 0xfc0007fe00000000, 0x4c00022400000000, 0x3fff80100000000, // Return From Interrupt Doubleword Hypervisor XL-form (hrfid)\n\t\t[6]*argField{}},\n\t{POPCNTB, 0xfc0007fe00000000, 0x7c0000f400000000, 0xf80100000000, // Population Count Bytes X-form (popcntb RA, RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{MFOCRF, 0xfc1007fe00000000, 0x7c10002600000000, 0x80100000000, // Move From One Condition Register Field XFX-form (mfocrf RT,FXM)\n\t\t[6]*argField{ap_Reg_6_10, ap_ImmUnsigned_12_19}},\n\t{MTOCRF, 0xfc1007fe00000000, 0x7c10012000000000, 0x80100000000, // Move To One Condition Register Field XFX-form (mtocrf FXM,RS)\n\t\t[6]*argField{ap_ImmUnsigned_12_19, ap_Reg_6_10}},\n\t{SLBMFEE, 0xfc0007fe00000000, 0x7c00072600000000, 0x1e000100000000, // SLB Move From Entry ESID X-form (slbmfee RT,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_16_20}},\n\t{SLBMFEV, 0xfc0007fe00000000, 0x7c0006a600000000, 0x1e000100000000, // SLB Move From Entry VSID X-form (slbmfev RT,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_16_20}},\n\t{SLBMTE, 0xfc0007fe00000000, 0x7c00032400000000, 0x1f000100000000, // SLB Move To Entry X-form (slbmte RS,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_16_20}},\n\t{RFSCV, 0xfc0007fe00000000, 0x4c0000a400000000, 0x3fff80100000000, // Return From System Call Vectored XL-form (rfscv)\n\t\t[6]*argField{}},\n\t{SCV, 0xfc00000300000000, 0x4400000100000000, 0x3fff01c00000000, // System Call Vectored SC-form (scv LEV)\n\t\t[6]*argField{ap_ImmUnsigned_20_26}},\n\t{LQ, 0xfc00000000000000, 0xe000000000000000, 0xf00000000, // Load Quadword DQ-form (lq RTp,DQ(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_27_shift4, ap_Reg_11_15}},\n\t{STQ, 0xfc00000300000000, 0xf800000200000000, 0x0, // Store Quadword DS-form (stq RSp,DS(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{CNTLZD, 0xfc0007ff00000000, 0x7c00007400000000, 0xf80000000000, // Count Leading Zeros Doubleword X-form (cntlzd RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{CNTLZDCC, 0xfc0007ff00000000, 0x7c00007500000000, 0xf80000000000, // Count Leading Zeros Doubleword X-form (cntlzd. RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{DCBF, 0xfc0007fe00000000, 0x7c0000ac00000000, 0x300000100000000, // Data Cache Block Flush X-form (dcbf RA,RB,L)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_8_10}},\n\t{DCBST, 0xfc0007fe00000000, 0x7c00006c00000000, 0x3e0000100000000, // Data Cache Block Store X-form (dcbst RA,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_16_20}},\n\t{DCBT, 0xfc0007fe00000000, 0x7c00022c00000000, 0x100000000, // Data Cache Block Touch X-form (dcbt RA,RB,TH)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_6_10}},\n\t{DCBTST, 0xfc0007fe00000000, 0x7c0001ec00000000, 0x100000000, // Data Cache Block Touch for Store X-form (dcbtst RA,RB,TH)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_6_10}},\n\t{DIVD, 0xfc0007ff00000000, 0x7c0003d200000000, 0x0, // Divide Doubleword XO-form (divd RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDCC, 0xfc0007ff00000000, 0x7c0003d300000000, 0x0, // Divide Doubleword XO-form (divd. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDO, 0xfc0007ff00000000, 0x7c0007d200000000, 0x0, // Divide Doubleword XO-form (divdo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDOCC, 0xfc0007ff00000000, 0x7c0007d300000000, 0x0, // Divide Doubleword XO-form (divdo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDU, 0xfc0007ff00000000, 0x7c00039200000000, 0x0, // Divide Doubleword Unsigned XO-form (divdu RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDUCC, 0xfc0007ff00000000, 0x7c00039300000000, 0x0, // Divide Doubleword Unsigned XO-form (divdu. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDUO, 0xfc0007ff00000000, 0x7c00079200000000, 0x0, // Divide Doubleword Unsigned XO-form (divduo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVDUOCC, 0xfc0007ff00000000, 0x7c00079300000000, 0x0, // Divide Doubleword Unsigned XO-form (divduo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVW, 0xfc0007ff00000000, 0x7c0003d600000000, 0x0, // Divide Word XO-form (divw RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWCC, 0xfc0007ff00000000, 0x7c0003d700000000, 0x0, // Divide Word XO-form (divw. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWO, 0xfc0007ff00000000, 0x7c0007d600000000, 0x0, // Divide Word XO-form (divwo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWOCC, 0xfc0007ff00000000, 0x7c0007d700000000, 0x0, // Divide Word XO-form (divwo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWU, 0xfc0007ff00000000, 0x7c00039600000000, 0x0, // Divide Word Unsigned XO-form (divwu RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWUCC, 0xfc0007ff00000000, 0x7c00039700000000, 0x0, // Divide Word Unsigned XO-form (divwu. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWUO, 0xfc0007ff00000000, 0x7c00079600000000, 0x0, // Divide Word Unsigned XO-form (divwuo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{DIVWUOCC, 0xfc0007ff00000000, 0x7c00079700000000, 0x0, // Divide Word Unsigned XO-form (divwuo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{EIEIO, 0xfc0007fe00000000, 0x7c0006ac00000000, 0x3fff80100000000, // Enforce In-order Execution of I/O X-form (eieio)\n\t\t[6]*argField{}},\n\t{EXTSB, 0xfc0007ff00000000, 0x7c00077400000000, 0xf80000000000, // Extend Sign Byte X-form (extsb RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{EXTSBCC, 0xfc0007ff00000000, 0x7c00077500000000, 0xf80000000000, // Extend Sign Byte X-form (extsb. RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{EXTSW, 0xfc0007ff00000000, 0x7c0007b400000000, 0xf80000000000, // Extend Sign Word X-form (extsw RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{EXTSWCC, 0xfc0007ff00000000, 0x7c0007b500000000, 0xf80000000000, // Extend Sign Word X-form (extsw. RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{FADDS, 0xfc00003f00000000, 0xec00002a00000000, 0x7c000000000, // Floating Add Single A-form (fadds FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FADDSCC, 0xfc00003f00000000, 0xec00002b00000000, 0x7c000000000, // Floating Add Single A-form (fadds. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FCFID, 0xfc0007ff00000000, 0xfc00069c00000000, 0x1f000000000000, // Floating Convert with round Signed Doubleword to Double-Precision format X-form (fcfid FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCFIDCC, 0xfc0007ff00000000, 0xfc00069d00000000, 0x1f000000000000, // Floating Convert with round Signed Doubleword to Double-Precision format X-form (fcfid. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTID, 0xfc0007ff00000000, 0xfc00065c00000000, 0x1f000000000000, // Floating Convert with round Double-Precision To Signed Doubleword format X-form (fctid FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIDCC, 0xfc0007ff00000000, 0xfc00065d00000000, 0x1f000000000000, // Floating Convert with round Double-Precision To Signed Doubleword format X-form (fctid. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIDZ, 0xfc0007ff00000000, 0xfc00065e00000000, 0x1f000000000000, // Floating Convert with truncate Double-Precision To Signed Doubleword format X-form (fctidz FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIDZCC, 0xfc0007ff00000000, 0xfc00065f00000000, 0x1f000000000000, // Floating Convert with truncate Double-Precision To Signed Doubleword format X-form (fctidz. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FDIVS, 0xfc00003f00000000, 0xec00002400000000, 0x7c000000000, // Floating Divide Single A-form (fdivs FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FDIVSCC, 0xfc00003f00000000, 0xec00002500000000, 0x7c000000000, // Floating Divide Single A-form (fdivs. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FMADDS, 0xfc00003f00000000, 0xec00003a00000000, 0x0, // Floating Multiply-Add Single A-form (fmadds FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FMADDSCC, 0xfc00003f00000000, 0xec00003b00000000, 0x0, // Floating Multiply-Add Single A-form (fmadds. FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FMSUBS, 0xfc00003f00000000, 0xec00003800000000, 0x0, // Floating Multiply-Subtract Single A-form (fmsubs FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FMSUBSCC, 0xfc00003f00000000, 0xec00003900000000, 0x0, // Floating Multiply-Subtract Single A-form (fmsubs. FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FMULS, 0xfc00003f00000000, 0xec00003200000000, 0xf80000000000, // Floating Multiply Single A-form (fmuls FRT,FRA,FRC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25}},\n\t{FMULSCC, 0xfc00003f00000000, 0xec00003300000000, 0xf80000000000, // Floating Multiply Single A-form (fmuls. FRT,FRA,FRC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25}},\n\t{FNMADDS, 0xfc00003f00000000, 0xec00003e00000000, 0x0, // Floating Negative Multiply-Add Single A-form (fnmadds FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FNMADDSCC, 0xfc00003f00000000, 0xec00003f00000000, 0x0, // Floating Negative Multiply-Add Single A-form (fnmadds. FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FNMSUBS, 0xfc00003f00000000, 0xec00003c00000000, 0x0, // Floating Negative Multiply-Subtract Single A-form (fnmsubs FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FNMSUBSCC, 0xfc00003f00000000, 0xec00003d00000000, 0x0, // Floating Negative Multiply-Subtract Single A-form (fnmsubs. FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FRES, 0xfc00003f00000000, 0xec00003000000000, 0x1f07c000000000, // Floating Reciprocal Estimate Single A-form (fres FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRESCC, 0xfc00003f00000000, 0xec00003100000000, 0x1f07c000000000, // Floating Reciprocal Estimate Single A-form (fres. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRSQRTE, 0xfc00003f00000000, 0xfc00003400000000, 0x1f07c000000000, // Floating Reciprocal Square Root Estimate A-form (frsqrte FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRSQRTECC, 0xfc00003f00000000, 0xfc00003500000000, 0x1f07c000000000, // Floating Reciprocal Square Root Estimate A-form (frsqrte. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FSEL, 0xfc00003f00000000, 0xfc00002e00000000, 0x0, // Floating Select A-form (fsel FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FSELCC, 0xfc00003f00000000, 0xfc00002f00000000, 0x0, // Floating Select A-form (fsel. FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FSQRTS, 0xfc00003f00000000, 0xec00002c00000000, 0x1f07c000000000, // Floating Square Root Single A-form (fsqrts FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FSQRTSCC, 0xfc00003f00000000, 0xec00002d00000000, 0x1f07c000000000, // Floating Square Root Single A-form (fsqrts. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FSUBS, 0xfc00003f00000000, 0xec00002800000000, 0x7c000000000, // Floating Subtract Single A-form (fsubs FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FSUBSCC, 0xfc00003f00000000, 0xec00002900000000, 0x7c000000000, // Floating Subtract Single A-form (fsubs. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{ICBI, 0xfc0007fe00000000, 0x7c0007ac00000000, 0x3e0000100000000, // Instruction Cache Block Invalidate X-form (icbi RA,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_16_20}},\n\t{LD, 0xfc00000300000000, 0xe800000000000000, 0x0, // Load Doubleword DS-form (ld RT,DS(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{LDARX, 0xfc0007fe00000000, 0x7c0000a800000000, 0x0, // Load Doubleword And Reserve Indexed X-form (ldarx RT,RA,RB,EH)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_31_31}},\n\t{LDU, 0xfc00000300000000, 0xe800000100000000, 0x0, // Load Doubleword with Update DS-form (ldu RT,DS(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{LDUX, 0xfc0007fe00000000, 0x7c00006a00000000, 0x100000000, // Load Doubleword with Update Indexed X-form (ldux RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LDX, 0xfc0007fe00000000, 0x7c00002a00000000, 0x100000000, // Load Doubleword Indexed X-form (ldx RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LWA, 0xfc00000300000000, 0xe800000200000000, 0x0, // Load Word Algebraic DS-form (lwa RT,DS(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{LWARX, 0xfc0007fe00000000, 0x7c00002800000000, 0x0, // Load Word & Reserve Indexed X-form (lwarx RT,RA,RB,EH)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20, ap_ImmUnsigned_31_31}},\n\t{LWAUX, 0xfc0007fe00000000, 0x7c0002ea00000000, 0x100000000, // Load Word Algebraic with Update Indexed X-form (lwaux RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LWAX, 0xfc0007fe00000000, 0x7c0002aa00000000, 0x100000000, // Load Word Algebraic Indexed X-form (lwax RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MFTB, 0xfc0007fe00000000, 0x7c0002e600000000, 0x100000000, // Move From Time Base XFX-form (mftb RT,TBR)\n\t\t[6]*argField{ap_Reg_6_10, ap_SpReg_16_20_11_15}},\n\t{MTMSRD, 0xfc0007fe00000000, 0x7c00016400000000, 0x1ef80100000000, // Move To MSR Doubleword X-form (mtmsrd RS,L)\n\t\t[6]*argField{ap_Reg_6_10, ap_ImmUnsigned_15_15}},\n\t{MULHD, 0xfc0003ff00000000, 0x7c00009200000000, 0x40000000000, // Multiply High Doubleword XO-form (mulhd RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULHDCC, 0xfc0003ff00000000, 0x7c00009300000000, 0x40000000000, // Multiply High Doubleword XO-form (mulhd. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULHDU, 0xfc0003ff00000000, 0x7c00001200000000, 0x40000000000, // Multiply High Doubleword Unsigned XO-form (mulhdu RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULHDUCC, 0xfc0003ff00000000, 0x7c00001300000000, 0x40000000000, // Multiply High Doubleword Unsigned XO-form (mulhdu. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULHW, 0xfc0003ff00000000, 0x7c00009600000000, 0x40000000000, // Multiply High Word XO-form (mulhw RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULHWCC, 0xfc0003ff00000000, 0x7c00009700000000, 0x40000000000, // Multiply High Word XO-form (mulhw. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULHWU, 0xfc0003ff00000000, 0x7c00001600000000, 0x40000000000, // Multiply High Word Unsigned XO-form (mulhwu RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULHWUCC, 0xfc0003ff00000000, 0x7c00001700000000, 0x40000000000, // Multiply High Word Unsigned XO-form (mulhwu. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULLD, 0xfc0007ff00000000, 0x7c0001d200000000, 0x0, // Multiply Low Doubleword XO-form (mulld RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULLDCC, 0xfc0007ff00000000, 0x7c0001d300000000, 0x0, // Multiply Low Doubleword XO-form (mulld. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULLDO, 0xfc0007ff00000000, 0x7c0005d200000000, 0x0, // Multiply Low Doubleword XO-form (mulldo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULLDOCC, 0xfc0007ff00000000, 0x7c0005d300000000, 0x0, // Multiply Low Doubleword XO-form (mulldo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{RFID, 0xfc0007fe00000000, 0x4c00002400000000, 0x3fff80100000000, // Return from Interrupt Doubleword XL-form (rfid)\n\t\t[6]*argField{}},\n\t{RLDCL, 0xfc00001f00000000, 0x7800001000000000, 0x0, // Rotate Left Doubleword then Clear Left MDS-form (rldcl RA,RS,RB,MB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDCLCC, 0xfc00001f00000000, 0x7800001100000000, 0x0, // Rotate Left Doubleword then Clear Left MDS-form (rldcl. RA,RS,RB,MB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDCR, 0xfc00001f00000000, 0x7800001200000000, 0x0, // Rotate Left Doubleword then Clear Right MDS-form (rldcr RA,RS,RB,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDCRCC, 0xfc00001f00000000, 0x7800001300000000, 0x0, // Rotate Left Doubleword then Clear Right MDS-form (rldcr. RA,RS,RB,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDIC, 0xfc00001d00000000, 0x7800000800000000, 0x0, // Rotate Left Doubleword Immediate then Clear MD-form (rldic RA,RS,SH,MB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDICCC, 0xfc00001d00000000, 0x7800000900000000, 0x0, // Rotate Left Doubleword Immediate then Clear MD-form (rldic. RA,RS,SH,MB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDICL, 0xfc00001d00000000, 0x7800000000000000, 0x0, // Rotate Left Doubleword Immediate then Clear Left MD-form (rldicl RA,RS,SH,MB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDICLCC, 0xfc00001d00000000, 0x7800000100000000, 0x0, // Rotate Left Doubleword Immediate then Clear Left MD-form (rldicl. RA,RS,SH,MB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDICR, 0xfc00001d00000000, 0x7800000400000000, 0x0, // Rotate Left Doubleword Immediate then Clear Right MD-form (rldicr RA,RS,SH,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDICRCC, 0xfc00001d00000000, 0x7800000500000000, 0x0, // Rotate Left Doubleword Immediate then Clear Right MD-form (rldicr. RA,RS,SH,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDIMI, 0xfc00001d00000000, 0x7800000c00000000, 0x0, // Rotate Left Doubleword Immediate then Mask Insert MD-form (rldimi RA,RS,SH,MB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{RLDIMICC, 0xfc00001d00000000, 0x7800000d00000000, 0x0, // Rotate Left Doubleword Immediate then Mask Insert MD-form (rldimi. RA,RS,SH,MB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20, ap_ImmUnsigned_26_26_21_25}},\n\t{SC, 0xfc00000200000000, 0x4400000200000000, 0x3fff01d00000000, // System Call SC-form (sc LEV)\n\t\t[6]*argField{ap_ImmUnsigned_20_26}},\n\t{SLBIA, 0xfc0007fe00000000, 0x7c0003e400000000, 0x31ff80100000000, // SLB Invalidate All X-form (slbia IH)\n\t\t[6]*argField{ap_ImmUnsigned_8_10}},\n\t{SLBIE, 0xfc0007fe00000000, 0x7c00036400000000, 0x3ff000100000000, // SLB Invalidate Entry X-form (slbie RB)\n\t\t[6]*argField{ap_Reg_16_20}},\n\t{SLD, 0xfc0007ff00000000, 0x7c00003600000000, 0x0, // Shift Left Doubleword X-form (sld RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SLDCC, 0xfc0007ff00000000, 0x7c00003700000000, 0x0, // Shift Left Doubleword X-form (sld. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SRAD, 0xfc0007ff00000000, 0x7c00063400000000, 0x0, // Shift Right Algebraic Doubleword X-form (srad RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SRADCC, 0xfc0007ff00000000, 0x7c00063500000000, 0x0, // Shift Right Algebraic Doubleword X-form (srad. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SRADI, 0xfc0007fd00000000, 0x7c00067400000000, 0x0, // Shift Right Algebraic Doubleword Immediate XS-form (sradi RA,RS,SH)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20}},\n\t{SRADICC, 0xfc0007fd00000000, 0x7c00067500000000, 0x0, // Shift Right Algebraic Doubleword Immediate XS-form (sradi. RA,RS,SH)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_30_30_16_20}},\n\t{SRD, 0xfc0007ff00000000, 0x7c00043600000000, 0x0, // Shift Right Doubleword X-form (srd RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SRDCC, 0xfc0007ff00000000, 0x7c00043700000000, 0x0, // Shift Right Doubleword X-form (srd. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{STD, 0xfc00000300000000, 0xf800000000000000, 0x0, // Store Doubleword DS-form (std RS,DS(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{STDCXCC, 0xfc0007ff00000000, 0x7c0001ad00000000, 0x0, // Store Doubleword Conditional Indexed X-form (stdcx. RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STDU, 0xfc00000300000000, 0xf800000100000000, 0x0, // Store Doubleword with Update DS-form (stdu RS,DS(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_29_shift2, ap_Reg_11_15}},\n\t{STDUX, 0xfc0007fe00000000, 0x7c00016a00000000, 0x100000000, // Store Doubleword with Update Indexed X-form (stdux RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STDX, 0xfc0007fe00000000, 0x7c00012a00000000, 0x100000000, // Store Doubleword Indexed X-form (stdx RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STFIWX, 0xfc0007fe00000000, 0x7c0007ae00000000, 0x100000000, // Store Floating-Point as Integer Word Indexed X-form (stfiwx FRS,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STWCXCC, 0xfc0007ff00000000, 0x7c00012d00000000, 0x0, // Store Word Conditional Indexed X-form (stwcx. RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBF, 0xfc0007ff00000000, 0x7c00005000000000, 0x0, // Subtract From XO-form (subf RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFCC, 0xfc0007ff00000000, 0x7c00005100000000, 0x0, // Subtract From XO-form (subf. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFO, 0xfc0007ff00000000, 0x7c00045000000000, 0x0, // Subtract From XO-form (subfo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFOCC, 0xfc0007ff00000000, 0x7c00045100000000, 0x0, // Subtract From XO-form (subfo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{TD, 0xfc0007fe00000000, 0x7c00008800000000, 0x100000000, // Trap Doubleword X-form (td TO,RA,RB)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{TDI, 0xfc00000000000000, 0x800000000000000, 0x0, // Trap Doubleword Immediate D-form (tdi TO,RA,SI)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{TLBSYNC, 0xfc0007fe00000000, 0x7c00046c00000000, 0x3fff80100000000, // TLB Synchronize X-form (tlbsync)\n\t\t[6]*argField{}},\n\t{FCTIW, 0xfc0007ff00000000, 0xfc00001c00000000, 0x1f000000000000, // Floating Convert with round Double-Precision To Signed Word format X-form (fctiw FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIWCC, 0xfc0007ff00000000, 0xfc00001d00000000, 0x1f000000000000, // Floating Convert with round Double-Precision To Signed Word format X-form (fctiw. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIWZ, 0xfc0007ff00000000, 0xfc00001e00000000, 0x1f000000000000, // Floating Convert with truncate Double-Precision To Signed Word fomat X-form (fctiwz FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FCTIWZCC, 0xfc0007ff00000000, 0xfc00001f00000000, 0x1f000000000000, // Floating Convert with truncate Double-Precision To Signed Word fomat X-form (fctiwz. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FSQRT, 0xfc00003f00000000, 0xfc00002c00000000, 0x1f07c000000000, // Floating Square Root A-form (fsqrt FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FSQRTCC, 0xfc00003f00000000, 0xfc00002d00000000, 0x1f07c000000000, // Floating Square Root A-form (fsqrt. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{ADD, 0xfc0007ff00000000, 0x7c00021400000000, 0x0, // Add XO-form (add RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDCC, 0xfc0007ff00000000, 0x7c00021500000000, 0x0, // Add XO-form (add. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDO, 0xfc0007ff00000000, 0x7c00061400000000, 0x0, // Add XO-form (addo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDOCC, 0xfc0007ff00000000, 0x7c00061500000000, 0x0, // Add XO-form (addo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDC, 0xfc0007ff00000000, 0x7c00001400000000, 0x0, // Add Carrying XO-form (addc RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDCCC, 0xfc0007ff00000000, 0x7c00001500000000, 0x0, // Add Carrying XO-form (addc. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDCO, 0xfc0007ff00000000, 0x7c00041400000000, 0x0, // Add Carrying XO-form (addco RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDCOCC, 0xfc0007ff00000000, 0x7c00041500000000, 0x0, // Add Carrying XO-form (addco. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDE, 0xfc0007ff00000000, 0x7c00011400000000, 0x0, // Add Extended XO-form (adde RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDECC, 0xfc0007ff00000000, 0x7c00011500000000, 0x0, // Add Extended XO-form (adde. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDEO, 0xfc0007ff00000000, 0x7c00051400000000, 0x0, // Add Extended XO-form (addeo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{ADDEOCC, 0xfc0007ff00000000, 0x7c00051500000000, 0x0, // Add Extended XO-form (addeo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LI, 0xfc1f000000000000, 0x3800000000000000, 0x0, // Add Immediate D-form (li RT,SI)\n\t\t[6]*argField{ap_Reg_6_10, ap_ImmSigned_16_31}},\n\t{ADDI, 0xfc00000000000000, 0x3800000000000000, 0x0, // Add Immediate D-form (addi RT,RA,SI)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{ADDIC, 0xfc00000000000000, 0x3000000000000000, 0x0, // Add Immediate Carrying D-form (addic RT,RA,SI)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{ADDICCC, 0xfc00000000000000, 0x3400000000000000, 0x0, // Add Immediate Carrying and Record D-form (addic. RT,RA,SI)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{LIS, 0xfc1f000000000000, 0x3c00000000000000, 0x0, // Add Immediate Shifted D-form (lis RT,SI)\n\t\t[6]*argField{ap_Reg_6_10, ap_ImmSigned_16_31}},\n\t{ADDIS, 0xfc00000000000000, 0x3c00000000000000, 0x0, // Add Immediate Shifted D-form (addis RT,RA,SI)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{ADDME, 0xfc0007ff00000000, 0x7c0001d400000000, 0xf80000000000, // Add to Minus One Extended XO-form (addme RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{ADDMECC, 0xfc0007ff00000000, 0x7c0001d500000000, 0xf80000000000, // Add to Minus One Extended XO-form (addme. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{ADDMEO, 0xfc0007ff00000000, 0x7c0005d400000000, 0xf80000000000, // Add to Minus One Extended XO-form (addmeo RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{ADDMEOCC, 0xfc0007ff00000000, 0x7c0005d500000000, 0xf80000000000, // Add to Minus One Extended XO-form (addmeo. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{ADDZE, 0xfc0007ff00000000, 0x7c00019400000000, 0xf80000000000, // Add to Zero Extended XO-form (addze RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{ADDZECC, 0xfc0007ff00000000, 0x7c00019500000000, 0xf80000000000, // Add to Zero Extended XO-form (addze. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{ADDZEO, 0xfc0007ff00000000, 0x7c00059400000000, 0xf80000000000, // Add to Zero Extended XO-form (addzeo RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{ADDZEOCC, 0xfc0007ff00000000, 0x7c00059500000000, 0xf80000000000, // Add to Zero Extended XO-form (addzeo. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{AND, 0xfc0007ff00000000, 0x7c00003800000000, 0x0, // AND X-form (and RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{ANDCC, 0xfc0007ff00000000, 0x7c00003900000000, 0x0, // AND X-form (and. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{ANDC, 0xfc0007ff00000000, 0x7c00007800000000, 0x0, // AND with Complement X-form (andc RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{ANDCCC, 0xfc0007ff00000000, 0x7c00007900000000, 0x0, // AND with Complement X-form (andc. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{ANDICC, 0xfc00000000000000, 0x7000000000000000, 0x0, // AND Immediate D-form (andi. RA,RS,UI)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_31}},\n\t{ANDISCC, 0xfc00000000000000, 0x7400000000000000, 0x0, // AND Immediate Shifted D-form (andis. RA,RS,UI)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_31}},\n\t{B, 0xfc00000300000000, 0x4800000000000000, 0x0, // Branch I-form (b target_addr)\n\t\t[6]*argField{ap_PCRel_6_29_shift2}},\n\t{BA, 0xfc00000300000000, 0x4800000200000000, 0x0, // Branch I-form (ba target_addr)\n\t\t[6]*argField{ap_Label_6_29_shift2}},\n\t{BL, 0xfc00000300000000, 0x4800000100000000, 0x0, // Branch I-form (bl target_addr)\n\t\t[6]*argField{ap_PCRel_6_29_shift2}},\n\t{BLA, 0xfc00000300000000, 0x4800000300000000, 0x0, // Branch I-form (bla target_addr)\n\t\t[6]*argField{ap_Label_6_29_shift2}},\n\t{BC, 0xfc00000300000000, 0x4000000000000000, 0x0, // Branch Conditional B-form (bc BO,BI,target_addr)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_PCRel_16_29_shift2}},\n\t{BCA, 0xfc00000300000000, 0x4000000200000000, 0x0, // Branch Conditional B-form (bca BO,BI,target_addr)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_Label_16_29_shift2}},\n\t{BCL, 0xfc00000300000000, 0x4000000100000000, 0x0, // Branch Conditional B-form (bcl BO,BI,target_addr)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_PCRel_16_29_shift2}},\n\t{BCLA, 0xfc00000300000000, 0x4000000300000000, 0x0, // Branch Conditional B-form (bcla BO,BI,target_addr)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_Label_16_29_shift2}},\n\t{BCCTR, 0xfc0007ff00000000, 0x4c00042000000000, 0xe00000000000, // Branch Conditional to Count Register XL-form (bcctr BO,BI,BH)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_ImmUnsigned_19_20}},\n\t{BCCTRL, 0xfc0007ff00000000, 0x4c00042100000000, 0xe00000000000, // Branch Conditional to Count Register XL-form (bcctrl BO,BI,BH)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_ImmUnsigned_19_20}},\n\t{BCLR, 0xfc0007ff00000000, 0x4c00002000000000, 0xe00000000000, // Branch Conditional to Link Register XL-form (bclr BO,BI,BH)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_ImmUnsigned_19_20}},\n\t{BCLRL, 0xfc0007ff00000000, 0x4c00002100000000, 0xe00000000000, // Branch Conditional to Link Register XL-form (bclrl BO,BI,BH)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_CondRegBit_11_15, ap_ImmUnsigned_19_20}},\n\t{CMPW, 0xfc2007fe00000000, 0x7c00000000000000, 0x40000100000000, // Compare X-form (cmpw BF,RA,RB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_Reg_16_20}},\n\t{CMPD, 0xfc2007fe00000000, 0x7c20000000000000, 0x40000100000000, // Compare X-form (cmpd BF,RA,RB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_Reg_16_20}},\n\t{CMP, 0xfc0007fe00000000, 0x7c00000000000000, 0x40000100000000, // Compare X-form (cmp BF,L,RA,RB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_ImmUnsigned_10_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{CMPWI, 0xfc20000000000000, 0x2c00000000000000, 0x40000000000000, // Compare Immediate D-form (cmpwi BF,RA,SI)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{CMPDI, 0xfc20000000000000, 0x2c20000000000000, 0x40000000000000, // Compare Immediate D-form (cmpdi BF,RA,SI)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{CMPI, 0xfc00000000000000, 0x2c00000000000000, 0x40000000000000, // Compare Immediate D-form (cmpi BF,L,RA,SI)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_ImmUnsigned_10_10, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{CMPLW, 0xfc2007fe00000000, 0x7c00004000000000, 0x40000100000000, // Compare Logical X-form (cmplw BF,RA,RB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_Reg_16_20}},\n\t{CMPLD, 0xfc2007fe00000000, 0x7c20004000000000, 0x40000100000000, // Compare Logical X-form (cmpld BF,RA,RB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_Reg_16_20}},\n\t{CMPL, 0xfc0007fe00000000, 0x7c00004000000000, 0x40000100000000, // Compare Logical X-form (cmpl BF,L,RA,RB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_ImmUnsigned_10_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{CMPLWI, 0xfc20000000000000, 0x2800000000000000, 0x40000000000000, // Compare Logical Immediate D-form (cmplwi BF,RA,UI)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_ImmUnsigned_16_31}},\n\t{CMPLDI, 0xfc20000000000000, 0x2820000000000000, 0x40000000000000, // Compare Logical Immediate D-form (cmpldi BF,RA,UI)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_Reg_11_15, ap_ImmUnsigned_16_31}},\n\t{CMPLI, 0xfc00000000000000, 0x2800000000000000, 0x40000000000000, // Compare Logical Immediate D-form (cmpli BF,L,RA,UI)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_ImmUnsigned_10_10, ap_Reg_11_15, ap_ImmUnsigned_16_31}},\n\t{CNTLZW, 0xfc0007ff00000000, 0x7c00003400000000, 0xf80000000000, // Count Leading Zeros Word X-form (cntlzw RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{CNTLZWCC, 0xfc0007ff00000000, 0x7c00003500000000, 0xf80000000000, // Count Leading Zeros Word X-form (cntlzw. RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{CRAND, 0xfc0007fe00000000, 0x4c00020200000000, 0x100000000, // Condition Register AND XL-form (crand BT,BA,BB)\n\t\t[6]*argField{ap_CondRegBit_6_10, ap_CondRegBit_11_15, ap_CondRegBit_16_20}},\n\t{CRANDC, 0xfc0007fe00000000, 0x4c00010200000000, 0x100000000, // Condition Register AND with Complement XL-form (crandc BT,BA,BB)\n\t\t[6]*argField{ap_CondRegBit_6_10, ap_CondRegBit_11_15, ap_CondRegBit_16_20}},\n\t{CREQV, 0xfc0007fe00000000, 0x4c00024200000000, 0x100000000, // Condition Register Equivalent XL-form (creqv BT,BA,BB)\n\t\t[6]*argField{ap_CondRegBit_6_10, ap_CondRegBit_11_15, ap_CondRegBit_16_20}},\n\t{CRNAND, 0xfc0007fe00000000, 0x4c0001c200000000, 0x100000000, // Condition Register NAND XL-form (crnand BT,BA,BB)\n\t\t[6]*argField{ap_CondRegBit_6_10, ap_CondRegBit_11_15, ap_CondRegBit_16_20}},\n\t{CRNOR, 0xfc0007fe00000000, 0x4c00004200000000, 0x100000000, // Condition Register NOR XL-form (crnor BT,BA,BB)\n\t\t[6]*argField{ap_CondRegBit_6_10, ap_CondRegBit_11_15, ap_CondRegBit_16_20}},\n\t{CROR, 0xfc0007fe00000000, 0x4c00038200000000, 0x100000000, // Condition Register OR XL-form (cror BT,BA,BB)\n\t\t[6]*argField{ap_CondRegBit_6_10, ap_CondRegBit_11_15, ap_CondRegBit_16_20}},\n\t{CRORC, 0xfc0007fe00000000, 0x4c00034200000000, 0x100000000, // Condition Register OR with Complement XL-form (crorc BT,BA,BB)\n\t\t[6]*argField{ap_CondRegBit_6_10, ap_CondRegBit_11_15, ap_CondRegBit_16_20}},\n\t{CRXOR, 0xfc0007fe00000000, 0x4c00018200000000, 0x100000000, // Condition Register XOR XL-form (crxor BT,BA,BB)\n\t\t[6]*argField{ap_CondRegBit_6_10, ap_CondRegBit_11_15, ap_CondRegBit_16_20}},\n\t{DCBZ, 0xfc0007fe00000000, 0x7c0007ec00000000, 0x3e0000100000000, // Data Cache Block set to Zero X-form (dcbz RA,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_16_20}},\n\t{EQV, 0xfc0007ff00000000, 0x7c00023800000000, 0x0, // Equivalent X-form (eqv RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{EQVCC, 0xfc0007ff00000000, 0x7c00023900000000, 0x0, // Equivalent X-form (eqv. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{EXTSH, 0xfc0007ff00000000, 0x7c00073400000000, 0xf80000000000, // Extend Sign Halfword X-form (extsh RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{EXTSHCC, 0xfc0007ff00000000, 0x7c00073500000000, 0xf80000000000, // Extend Sign Halfword X-form (extsh. RA,RS)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10}},\n\t{FABS, 0xfc0007ff00000000, 0xfc00021000000000, 0x1f000000000000, // Floating Absolute Value X-form (fabs FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FABSCC, 0xfc0007ff00000000, 0xfc00021100000000, 0x1f000000000000, // Floating Absolute Value X-form (fabs. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FADD, 0xfc00003f00000000, 0xfc00002a00000000, 0x7c000000000, // Floating Add A-form (fadd FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FADDCC, 0xfc00003f00000000, 0xfc00002b00000000, 0x7c000000000, // Floating Add A-form (fadd. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FCMPO, 0xfc0007fe00000000, 0xfc00004000000000, 0x60000100000000, // Floating Compare Ordered X-form (fcmpo BF,FRA,FRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FCMPU, 0xfc0007fe00000000, 0xfc00000000000000, 0x60000100000000, // Floating Compare Unordered X-form (fcmpu BF,FRA,FRB)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FDIV, 0xfc00003f00000000, 0xfc00002400000000, 0x7c000000000, // Floating Divide A-form (fdiv FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FDIVCC, 0xfc00003f00000000, 0xfc00002500000000, 0x7c000000000, // Floating Divide A-form (fdiv. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FMADD, 0xfc00003f00000000, 0xfc00003a00000000, 0x0, // Floating Multiply-Add A-form (fmadd FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FMADDCC, 0xfc00003f00000000, 0xfc00003b00000000, 0x0, // Floating Multiply-Add A-form (fmadd. FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FMR, 0xfc0007ff00000000, 0xfc00009000000000, 0x1f000000000000, // Floating Move Register X-form (fmr FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FMRCC, 0xfc0007ff00000000, 0xfc00009100000000, 0x1f000000000000, // Floating Move Register X-form (fmr. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FMSUB, 0xfc00003f00000000, 0xfc00003800000000, 0x0, // Floating Multiply-Subtract A-form (fmsub FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FMSUBCC, 0xfc00003f00000000, 0xfc00003900000000, 0x0, // Floating Multiply-Subtract A-form (fmsub. FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FMUL, 0xfc00003f00000000, 0xfc00003200000000, 0xf80000000000, // Floating Multiply A-form (fmul FRT,FRA,FRC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25}},\n\t{FMULCC, 0xfc00003f00000000, 0xfc00003300000000, 0xf80000000000, // Floating Multiply A-form (fmul. FRT,FRA,FRC)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25}},\n\t{FNABS, 0xfc0007ff00000000, 0xfc00011000000000, 0x1f000000000000, // Floating Negative Absolute Value X-form (fnabs FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FNABSCC, 0xfc0007ff00000000, 0xfc00011100000000, 0x1f000000000000, // Floating Negative Absolute Value X-form (fnabs. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FNEG, 0xfc0007ff00000000, 0xfc00005000000000, 0x1f000000000000, // Floating Negate X-form (fneg FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FNEGCC, 0xfc0007ff00000000, 0xfc00005100000000, 0x1f000000000000, // Floating Negate X-form (fneg. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FNMADD, 0xfc00003f00000000, 0xfc00003e00000000, 0x0, // Floating Negative Multiply-Add A-form (fnmadd FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FNMADDCC, 0xfc00003f00000000, 0xfc00003f00000000, 0x0, // Floating Negative Multiply-Add A-form (fnmadd. FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FNMSUB, 0xfc00003f00000000, 0xfc00003c00000000, 0x0, // Floating Negative Multiply-Subtract A-form (fnmsub FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FNMSUBCC, 0xfc00003f00000000, 0xfc00003d00000000, 0x0, // Floating Negative Multiply-Subtract A-form (fnmsub. FRT,FRA,FRC,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_21_25, ap_FPReg_16_20}},\n\t{FRSP, 0xfc0007ff00000000, 0xfc00001800000000, 0x1f000000000000, // Floating Round to Single-Precision X-form (frsp FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FRSPCC, 0xfc0007ff00000000, 0xfc00001900000000, 0x1f000000000000, // Floating Round to Single-Precision X-form (frsp. FRT,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_16_20}},\n\t{FSUB, 0xfc00003f00000000, 0xfc00002800000000, 0x7c000000000, // Floating Subtract A-form (fsub FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{FSUBCC, 0xfc00003f00000000, 0xfc00002900000000, 0x7c000000000, // Floating Subtract A-form (fsub. FRT,FRA,FRB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_FPReg_11_15, ap_FPReg_16_20}},\n\t{ISYNC, 0xfc0007fe00000000, 0x4c00012c00000000, 0x3fff80100000000, // Instruction Synchronize XL-form (isync)\n\t\t[6]*argField{}},\n\t{LBZ, 0xfc00000000000000, 0x8800000000000000, 0x0, // Load Byte and Zero D-form (lbz RT,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LBZU, 0xfc00000000000000, 0x8c00000000000000, 0x0, // Load Byte and Zero with Update D-form (lbzu RT,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LBZUX, 0xfc0007fe00000000, 0x7c0000ee00000000, 0x100000000, // Load Byte and Zero with Update Indexed X-form (lbzux RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LBZX, 0xfc0007fe00000000, 0x7c0000ae00000000, 0x100000000, // Load Byte and Zero Indexed X-form (lbzx RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LFD, 0xfc00000000000000, 0xc800000000000000, 0x0, // Load Floating-Point Double D-form (lfd FRT,D(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LFDU, 0xfc00000000000000, 0xcc00000000000000, 0x0, // Load Floating-Point Double with Update D-form (lfdu FRT,D(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LFDUX, 0xfc0007fe00000000, 0x7c0004ee00000000, 0x100000000, // Load Floating-Point Double with Update Indexed X-form (lfdux FRT,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LFDX, 0xfc0007fe00000000, 0x7c0004ae00000000, 0x100000000, // Load Floating-Point Double Indexed X-form (lfdx FRT,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LFS, 0xfc00000000000000, 0xc000000000000000, 0x0, // Load Floating-Point Single D-form (lfs FRT,D(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LFSU, 0xfc00000000000000, 0xc400000000000000, 0x0, // Load Floating-Point Single with Update D-form (lfsu FRT,D(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LFSUX, 0xfc0007fe00000000, 0x7c00046e00000000, 0x100000000, // Load Floating-Point Single with Update Indexed X-form (lfsux FRT,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LFSX, 0xfc0007fe00000000, 0x7c00042e00000000, 0x100000000, // Load Floating-Point Single Indexed X-form (lfsx FRT,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LHA, 0xfc00000000000000, 0xa800000000000000, 0x0, // Load Halfword Algebraic D-form (lha RT,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LHAU, 0xfc00000000000000, 0xac00000000000000, 0x0, // Load Halfword Algebraic with Update D-form (lhau RT,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LHAUX, 0xfc0007fe00000000, 0x7c0002ee00000000, 0x100000000, // Load Halfword Algebraic with Update Indexed X-form (lhaux RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LHAX, 0xfc0007fe00000000, 0x7c0002ae00000000, 0x100000000, // Load Halfword Algebraic Indexed X-form (lhax RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LHBRX, 0xfc0007fe00000000, 0x7c00062c00000000, 0x100000000, // Load Halfword Byte-Reverse Indexed X-form (lhbrx RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LHZ, 0xfc00000000000000, 0xa000000000000000, 0x0, // Load Halfword and Zero D-form (lhz RT,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LHZU, 0xfc00000000000000, 0xa400000000000000, 0x0, // Load Halfword and Zero with Update D-form (lhzu RT,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LHZUX, 0xfc0007fe00000000, 0x7c00026e00000000, 0x100000000, // Load Halfword and Zero with Update Indexed X-form (lhzux RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LHZX, 0xfc0007fe00000000, 0x7c00022e00000000, 0x100000000, // Load Halfword and Zero Indexed X-form (lhzx RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LMW, 0xfc00000000000000, 0xb800000000000000, 0x0, // Load Multiple Word D-form (lmw RT,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LSWI, 0xfc0007fe00000000, 0x7c0004aa00000000, 0x100000000, // Load String Word Immediate X-form (lswi RT,RA,NB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmUnsigned_16_20}},\n\t{LSWX, 0xfc0007fe00000000, 0x7c00042a00000000, 0x100000000, // Load String Word Indexed X-form (lswx RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LWBRX, 0xfc0007fe00000000, 0x7c00042c00000000, 0x100000000, // Load Word Byte-Reverse Indexed X-form (lwbrx RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LWZ, 0xfc00000000000000, 0x8000000000000000, 0x0, // Load Word and Zero D-form (lwz RT,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LWZU, 0xfc00000000000000, 0x8400000000000000, 0x0, // Load Word and Zero with Update D-form (lwzu RT,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{LWZUX, 0xfc0007fe00000000, 0x7c00006e00000000, 0x100000000, // Load Word and Zero with Update Indexed X-form (lwzux RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{LWZX, 0xfc0007fe00000000, 0x7c00002e00000000, 0x100000000, // Load Word and Zero Indexed X-form (lwzx RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MCRF, 0xfc0007fe00000000, 0x4c00000000000000, 0x63f80100000000, // Move Condition Register Field XL-form (mcrf BF,BFA)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_CondRegField_11_13}},\n\t{MCRFS, 0xfc0007fe00000000, 0xfc00008000000000, 0x63f80100000000, // Move to Condition Register from FPSCR X-form (mcrfs BF,BFA)\n\t\t[6]*argField{ap_CondRegField_6_8, ap_CondRegField_11_13}},\n\t{MFCR, 0xfc1007fe00000000, 0x7c00002600000000, 0xff80100000000, // Move From Condition Register XFX-form (mfcr RT)\n\t\t[6]*argField{ap_Reg_6_10}},\n\t{MFFS, 0xfc1f07ff00000000, 0xfc00048e00000000, 0xf80000000000, // Move From FPSCR X-form (mffs FRT)\n\t\t[6]*argField{ap_FPReg_6_10}},\n\t{MFFSCC, 0xfc1f07ff00000000, 0xfc00048f00000000, 0xf80000000000, // Move From FPSCR X-form (mffs. FRT)\n\t\t[6]*argField{ap_FPReg_6_10}},\n\t{MFMSR, 0xfc0007fe00000000, 0x7c0000a600000000, 0x1ff80100000000, // Move From MSR X-form (mfmsr RT)\n\t\t[6]*argField{ap_Reg_6_10}},\n\t{MFSPR, 0xfc0007fe00000000, 0x7c0002a600000000, 0x100000000, // Move From Special Purpose Register XFX-form (mfspr RT,SPR)\n\t\t[6]*argField{ap_Reg_6_10, ap_SpReg_16_20_11_15}},\n\t{MTCRF, 0xfc1007fe00000000, 0x7c00012000000000, 0x80100000000, // Move To Condition Register Fields XFX-form (mtcrf FXM,RS)\n\t\t[6]*argField{ap_ImmUnsigned_12_19, ap_Reg_6_10}},\n\t{MTFSB0, 0xfc0007ff00000000, 0xfc00008c00000000, 0x1ff80000000000, // Move To FPSCR Bit 0 X-form (mtfsb0 BT)\n\t\t[6]*argField{ap_ImmUnsigned_6_10}},\n\t{MTFSB0CC, 0xfc0007ff00000000, 0xfc00008d00000000, 0x1ff80000000000, // Move To FPSCR Bit 0 X-form (mtfsb0. BT)\n\t\t[6]*argField{ap_ImmUnsigned_6_10}},\n\t{MTFSB1, 0xfc0007ff00000000, 0xfc00004c00000000, 0x1ff80000000000, // Move To FPSCR Bit 1 X-form (mtfsb1 BT)\n\t\t[6]*argField{ap_ImmUnsigned_6_10}},\n\t{MTFSB1CC, 0xfc0007ff00000000, 0xfc00004d00000000, 0x1ff80000000000, // Move To FPSCR Bit 1 X-form (mtfsb1. BT)\n\t\t[6]*argField{ap_ImmUnsigned_6_10}},\n\t{MTFSF, 0xfc0007ff00000000, 0xfc00058e00000000, 0x0, // Move To FPSCR Fields XFL-form (mtfsf FLM,FRB,L,W)\n\t\t[6]*argField{ap_ImmUnsigned_7_14, ap_FPReg_16_20, ap_ImmUnsigned_6_6, ap_ImmUnsigned_15_15}},\n\t{MTFSFCC, 0xfc0007ff00000000, 0xfc00058f00000000, 0x0, // Move To FPSCR Fields XFL-form (mtfsf. FLM,FRB,L,W)\n\t\t[6]*argField{ap_ImmUnsigned_7_14, ap_FPReg_16_20, ap_ImmUnsigned_6_6, ap_ImmUnsigned_15_15}},\n\t{MTFSFI, 0xfc0007ff00000000, 0xfc00010c00000000, 0x7e080000000000, // Move To FPSCR Field Immediate X-form (mtfsfi BF,U,W)\n\t\t[6]*argField{ap_ImmUnsigned_6_8, ap_ImmUnsigned_16_19, ap_ImmUnsigned_15_15}},\n\t{MTFSFICC, 0xfc0007ff00000000, 0xfc00010d00000000, 0x7e080000000000, // Move To FPSCR Field Immediate X-form (mtfsfi. BF,U,W)\n\t\t[6]*argField{ap_ImmUnsigned_6_8, ap_ImmUnsigned_16_19, ap_ImmUnsigned_15_15}},\n\t{MTMSR, 0xfc0007fe00000000, 0x7c00012400000000, 0x1ef80100000000, // Move To MSR X-form (mtmsr RS,L)\n\t\t[6]*argField{ap_Reg_6_10, ap_ImmUnsigned_15_15}},\n\t{MTSPR, 0xfc0007fe00000000, 0x7c0003a600000000, 0x100000000, // Move To Special Purpose Register XFX-form (mtspr SPR,RS)\n\t\t[6]*argField{ap_SpReg_16_20_11_15, ap_Reg_6_10}},\n\t{MULLI, 0xfc00000000000000, 0x1c00000000000000, 0x0, // Multiply Low Immediate D-form (mulli RT,RA,SI)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{MULLW, 0xfc0007ff00000000, 0x7c0001d600000000, 0x0, // Multiply Low Word XO-form (mullw RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULLWCC, 0xfc0007ff00000000, 0x7c0001d700000000, 0x0, // Multiply Low Word XO-form (mullw. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULLWO, 0xfc0007ff00000000, 0x7c0005d600000000, 0x0, // Multiply Low Word XO-form (mullwo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{MULLWOCC, 0xfc0007ff00000000, 0x7c0005d700000000, 0x0, // Multiply Low Word XO-form (mullwo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{NAND, 0xfc0007ff00000000, 0x7c0003b800000000, 0x0, // NAND X-form (nand RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{NANDCC, 0xfc0007ff00000000, 0x7c0003b900000000, 0x0, // NAND X-form (nand. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{NEG, 0xfc0007ff00000000, 0x7c0000d000000000, 0xf80000000000, // Negate XO-form (neg RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{NEGCC, 0xfc0007ff00000000, 0x7c0000d100000000, 0xf80000000000, // Negate XO-form (neg. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{NEGO, 0xfc0007ff00000000, 0x7c0004d000000000, 0xf80000000000, // Negate XO-form (nego RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{NEGOCC, 0xfc0007ff00000000, 0x7c0004d100000000, 0xf80000000000, // Negate XO-form (nego. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{NOR, 0xfc0007ff00000000, 0x7c0000f800000000, 0x0, // NOR X-form (nor RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{NORCC, 0xfc0007ff00000000, 0x7c0000f900000000, 0x0, // NOR X-form (nor. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{OR, 0xfc0007ff00000000, 0x7c00037800000000, 0x0, // OR X-form (or RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{ORCC, 0xfc0007ff00000000, 0x7c00037900000000, 0x0, // OR X-form (or. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{ORC, 0xfc0007ff00000000, 0x7c00033800000000, 0x0, // OR with Complement X-form (orc RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{ORCCC, 0xfc0007ff00000000, 0x7c00033900000000, 0x0, // OR with Complement X-form (orc. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{NOP, 0xffffffff00000000, 0x6000000000000000, 0x0, // OR Immediate D-form (nop)\n\t\t[6]*argField{}},\n\t{ORI, 0xfc00000000000000, 0x6000000000000000, 0x0, // OR Immediate D-form (ori RA,RS,UI)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_31}},\n\t{ORIS, 0xfc00000000000000, 0x6400000000000000, 0x0, // OR Immediate Shifted D-form (oris RA,RS,UI)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_31}},\n\t{RLWIMI, 0xfc00000100000000, 0x5000000000000000, 0x0, // Rotate Left Word Immediate then Mask Insert M-form (rlwimi RA,RS,SH,MB,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_20, ap_ImmUnsigned_21_25, ap_ImmUnsigned_26_30}},\n\t{RLWIMICC, 0xfc00000100000000, 0x5000000100000000, 0x0, // Rotate Left Word Immediate then Mask Insert M-form (rlwimi. RA,RS,SH,MB,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_20, ap_ImmUnsigned_21_25, ap_ImmUnsigned_26_30}},\n\t{RLWINM, 0xfc00000100000000, 0x5400000000000000, 0x0, // Rotate Left Word Immediate then AND with Mask M-form (rlwinm RA,RS,SH,MB,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_20, ap_ImmUnsigned_21_25, ap_ImmUnsigned_26_30}},\n\t{RLWINMCC, 0xfc00000100000000, 0x5400000100000000, 0x0, // Rotate Left Word Immediate then AND with Mask M-form (rlwinm. RA,RS,SH,MB,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_20, ap_ImmUnsigned_21_25, ap_ImmUnsigned_26_30}},\n\t{RLWNM, 0xfc00000100000000, 0x5c00000000000000, 0x0, // Rotate Left Word then AND with Mask M-form (rlwnm RA,RS,RB,MB,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20, ap_ImmUnsigned_21_25, ap_ImmUnsigned_26_30}},\n\t{RLWNMCC, 0xfc00000100000000, 0x5c00000100000000, 0x0, // Rotate Left Word then AND with Mask M-form (rlwnm. RA,RS,RB,MB,ME)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20, ap_ImmUnsigned_21_25, ap_ImmUnsigned_26_30}},\n\t{SLW, 0xfc0007ff00000000, 0x7c00003000000000, 0x0, // Shift Left Word X-form (slw RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SLWCC, 0xfc0007ff00000000, 0x7c00003100000000, 0x0, // Shift Left Word X-form (slw. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SRAW, 0xfc0007ff00000000, 0x7c00063000000000, 0x0, // Shift Right Algebraic Word X-form (sraw RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SRAWCC, 0xfc0007ff00000000, 0x7c00063100000000, 0x0, // Shift Right Algebraic Word X-form (sraw. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SRAWI, 0xfc0007ff00000000, 0x7c00067000000000, 0x0, // Shift Right Algebraic Word Immediate X-form (srawi RA,RS,SH)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_20}},\n\t{SRAWICC, 0xfc0007ff00000000, 0x7c00067100000000, 0x0, // Shift Right Algebraic Word Immediate X-form (srawi. RA,RS,SH)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_20}},\n\t{SRW, 0xfc0007ff00000000, 0x7c00043000000000, 0x0, // Shift Right Word X-form (srw RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{SRWCC, 0xfc0007ff00000000, 0x7c00043100000000, 0x0, // Shift Right Word X-form (srw. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{STB, 0xfc00000000000000, 0x9800000000000000, 0x0, // Store Byte D-form (stb RS,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STBU, 0xfc00000000000000, 0x9c00000000000000, 0x0, // Store Byte with Update D-form (stbu RS,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STBUX, 0xfc0007fe00000000, 0x7c0001ee00000000, 0x100000000, // Store Byte with Update Indexed X-form (stbux RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STBX, 0xfc0007fe00000000, 0x7c0001ae00000000, 0x100000000, // Store Byte Indexed X-form (stbx RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STFD, 0xfc00000000000000, 0xd800000000000000, 0x0, // Store Floating-Point Double D-form (stfd FRS,D(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STFDU, 0xfc00000000000000, 0xdc00000000000000, 0x0, // Store Floating-Point Double with Update D-form (stfdu FRS,D(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STFDUX, 0xfc0007fe00000000, 0x7c0005ee00000000, 0x100000000, // Store Floating-Point Double with Update Indexed X-form (stfdux FRS,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STFDX, 0xfc0007fe00000000, 0x7c0005ae00000000, 0x100000000, // Store Floating-Point Double Indexed X-form (stfdx FRS,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STFS, 0xfc00000000000000, 0xd000000000000000, 0x0, // Store Floating-Point Single D-form (stfs FRS,D(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STFSU, 0xfc00000000000000, 0xd400000000000000, 0x0, // Store Floating-Point Single with Update D-form (stfsu FRS,D(RA))\n\t\t[6]*argField{ap_FPReg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STFSUX, 0xfc0007fe00000000, 0x7c00056e00000000, 0x100000000, // Store Floating-Point Single with Update Indexed X-form (stfsux FRS,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STFSX, 0xfc0007fe00000000, 0x7c00052e00000000, 0x100000000, // Store Floating-Point Single Indexed X-form (stfsx FRS,RA,RB)\n\t\t[6]*argField{ap_FPReg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STH, 0xfc00000000000000, 0xb000000000000000, 0x0, // Store Halfword D-form (sth RS,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STHBRX, 0xfc0007fe00000000, 0x7c00072c00000000, 0x100000000, // Store Halfword Byte-Reverse Indexed X-form (sthbrx RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STHU, 0xfc00000000000000, 0xb400000000000000, 0x0, // Store Halfword with Update D-form (sthu RS,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STHUX, 0xfc0007fe00000000, 0x7c00036e00000000, 0x100000000, // Store Halfword with Update Indexed X-form (sthux RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STHX, 0xfc0007fe00000000, 0x7c00032e00000000, 0x100000000, // Store Halfword Indexed X-form (sthx RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STMW, 0xfc00000000000000, 0xbc00000000000000, 0x0, // Store Multiple Word D-form (stmw RS,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STSWI, 0xfc0007fe00000000, 0x7c0005aa00000000, 0x100000000, // Store String Word Immediate X-form (stswi RS,RA,NB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmUnsigned_16_20}},\n\t{STSWX, 0xfc0007fe00000000, 0x7c00052a00000000, 0x100000000, // Store String Word Indexed X-form (stswx RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STW, 0xfc00000000000000, 0x9000000000000000, 0x0, // Store Word D-form (stw RS,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STWBRX, 0xfc0007fe00000000, 0x7c00052c00000000, 0x100000000, // Store Word Byte-Reverse Indexed X-form (stwbrx RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STWU, 0xfc00000000000000, 0x9400000000000000, 0x0, // Store Word with Update D-form (stwu RS,D(RA))\n\t\t[6]*argField{ap_Reg_6_10, ap_Offset_16_31, ap_Reg_11_15}},\n\t{STWUX, 0xfc0007fe00000000, 0x7c00016e00000000, 0x100000000, // Store Word with Update Indexed X-form (stwux RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{STWX, 0xfc0007fe00000000, 0x7c00012e00000000, 0x100000000, // Store Word Indexed X-form (stwx RS,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFC, 0xfc0007ff00000000, 0x7c00001000000000, 0x0, // Subtract From Carrying XO-form (subfc RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFCCC, 0xfc0007ff00000000, 0x7c00001100000000, 0x0, // Subtract From Carrying XO-form (subfc. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFCO, 0xfc0007ff00000000, 0x7c00041000000000, 0x0, // Subtract From Carrying XO-form (subfco RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFCOCC, 0xfc0007ff00000000, 0x7c00041100000000, 0x0, // Subtract From Carrying XO-form (subfco. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFE, 0xfc0007ff00000000, 0x7c00011000000000, 0x0, // Subtract From Extended XO-form (subfe RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFECC, 0xfc0007ff00000000, 0x7c00011100000000, 0x0, // Subtract From Extended XO-form (subfe. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFEO, 0xfc0007ff00000000, 0x7c00051000000000, 0x0, // Subtract From Extended XO-form (subfeo RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFEOCC, 0xfc0007ff00000000, 0x7c00051100000000, 0x0, // Subtract From Extended XO-form (subfeo. RT,RA,RB)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{SUBFIC, 0xfc00000000000000, 0x2000000000000000, 0x0, // Subtract From Immediate Carrying D-form (subfic RT,RA,SI)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{SUBFME, 0xfc0007ff00000000, 0x7c0001d000000000, 0xf80000000000, // Subtract From Minus One Extended XO-form (subfme RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{SUBFMECC, 0xfc0007ff00000000, 0x7c0001d100000000, 0xf80000000000, // Subtract From Minus One Extended XO-form (subfme. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{SUBFMEO, 0xfc0007ff00000000, 0x7c0005d000000000, 0xf80000000000, // Subtract From Minus One Extended XO-form (subfmeo RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{SUBFMEOCC, 0xfc0007ff00000000, 0x7c0005d100000000, 0xf80000000000, // Subtract From Minus One Extended XO-form (subfmeo. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{SUBFZE, 0xfc0007ff00000000, 0x7c00019000000000, 0xf80000000000, // Subtract From Zero Extended XO-form (subfze RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{SUBFZECC, 0xfc0007ff00000000, 0x7c00019100000000, 0xf80000000000, // Subtract From Zero Extended XO-form (subfze. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{SUBFZEO, 0xfc0007ff00000000, 0x7c00059000000000, 0xf80000000000, // Subtract From Zero Extended XO-form (subfzeo RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{SUBFZEOCC, 0xfc0007ff00000000, 0x7c00059100000000, 0xf80000000000, // Subtract From Zero Extended XO-form (subfzeo. RT,RA)\n\t\t[6]*argField{ap_Reg_6_10, ap_Reg_11_15}},\n\t{SYNC, 0xfc0007fe00000000, 0x7c0004ac00000000, 0x31cf80100000000, // Synchronize X-form (sync L,SC)\n\t\t[6]*argField{ap_ImmUnsigned_8_10, ap_ImmUnsigned_14_15}},\n\t{TLBIE, 0xfc0007fe00000000, 0x7c00026400000000, 0x10000100000000, // TLB Invalidate Entry X-form (tlbie RB,RS,RIC,PRS,R)\n\t\t[6]*argField{ap_Reg_16_20, ap_Reg_6_10, ap_ImmUnsigned_12_13, ap_ImmUnsigned_14_14, ap_ImmUnsigned_15_15}},\n\t{TW, 0xfc0007fe00000000, 0x7c00000800000000, 0x100000000, // Trap Word X-form (tw TO,RA,RB)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_Reg_11_15, ap_Reg_16_20}},\n\t{TWI, 0xfc00000000000000, 0xc00000000000000, 0x0, // Trap Word Immediate D-form (twi TO,RA,SI)\n\t\t[6]*argField{ap_ImmUnsigned_6_10, ap_Reg_11_15, ap_ImmSigned_16_31}},\n\t{XOR, 0xfc0007ff00000000, 0x7c00027800000000, 0x0, // XOR X-form (xor RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{XORCC, 0xfc0007ff00000000, 0x7c00027900000000, 0x0, // XOR X-form (xor. RA,RS,RB)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_Reg_16_20}},\n\t{XORI, 0xfc00000000000000, 0x6800000000000000, 0x0, // XOR Immediate D-form (xori RA,RS,UI)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_31}},\n\t{XORIS, 0xfc00000000000000, 0x6c00000000000000, 0x0, // XOR Immediate Shifted D-form (xoris RA,RS,UI)\n\t\t[6]*argField{ap_Reg_11_15, ap_Reg_6_10, ap_ImmUnsigned_16_31}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/riscv64/riscv64asm/arg.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage riscv64asm\n\n// Naming for Go decoder arguments:\n//\n// - arg_rd: a general purpose register rd encoded in rd[11:7] field\n//\n// - arg_rs1: a general purpose register rs1 encoded in rs1[19:15] field\n//\n// - arg_rs2: a general purpose register rs2 encoded in rs2[24:20] field\n//\n// - arg_rs3: a general purpose register rs3 encoded in rs3[31:27] field\n//\n// - arg_fd: a floating point register rd encoded in rd[11:7] field\n//\n// - arg_fs1: a floating point register rs1 encoded in rs1[19:15] field\n//\n// - arg_fs2: a floating point register rs2 encoded in rs2[24:20] field\n//\n// - arg_fs3: a floating point register rs3 encoded in rs3[31:27] field\n//\n// - arg_csr: a control status register encoded in csr[31:20] field\n//\n// - arg_rs1_mem: source register with offset in load commands\n//\n// - arg_rs1_store: source register with offset in store commands\n//\n// - arg_rs1_amo: source register with offset in atomic commands\n//\n// - arg_pred: predecessor memory ordering information encoded in pred[27:24] field\n//             For details, please refer to chapter 2.7 of ISA manual volume 1\n//\n// - arg_succ: successor memory ordering information encoded in succ[23:20] field\n//             For details, please refer to chapter 2.7 of ISA manual volume 1\n//\n// - arg_zimm: a unsigned immediate encoded in zimm[19:15] field\n//\n// - arg_imm12: an I-type immediate encoded in imm12[31:20] field\n//\n// - arg_simm12: a S-type immediate encoded in simm12[31:25|11:7] field\n//\n// - arg_bimm12: a B-type immediate encoded in bimm12[31:25|11:7] field\n//\n// - arg_imm20: an U-type immediate encoded in imm20[31:12] field\n//\n// - arg_jimm20: a J-type immediate encoded in jimm20[31:12] field\n//\n// - arg_shamt5: a shift amount encoded in shamt5[24:20] field\n//\n// - arg_shamt6: a shift amount encoded in shamt6[25:20] field\n//\n\ntype argType uint16\n\nconst (\n\t_ argType = iota\n\targ_rd\n\targ_rs1\n\targ_rs2\n\targ_rs3\n\targ_fd\n\targ_fs1\n\targ_fs2\n\targ_fs3\n\targ_csr\n\n\targ_rs1_amo\n\targ_rs1_mem\n\targ_rs1_store\n\n\targ_pred\n\targ_succ\n\n\targ_zimm\n\targ_imm12\n\targ_simm12\n\targ_bimm12\n\targ_imm20\n\targ_jimm20\n\targ_shamt5\n\targ_shamt6\n\n\t// RISC-V Compressed Extension Args\n\targ_rd_p\n\targ_fd_p\n\targ_rs1_p\n\targ_rd_rs1_p\n\targ_fs2_p\n\targ_rs2_p\n\targ_rd_n0\n\targ_rs1_n0\n\targ_rd_rs1_n0\n\targ_c_rs1_n0\n\targ_c_rs2_n0\n\targ_c_fs2\n\targ_c_rs2\n\targ_rd_n2\n\n\targ_c_imm6\n\targ_c_nzimm6\n\targ_c_nzuimm6\n\targ_c_uimm7\n\targ_c_uimm8\n\targ_c_uimm8sp_s\n\targ_c_uimm8sp\n\targ_c_uimm9sp_s\n\targ_c_uimm9sp\n\targ_c_bimm9\n\targ_c_nzimm10\n\targ_c_nzuimm10\n\targ_c_imm12\n\targ_c_nzimm18\n)\n"
  },
  {
    "path": "vendor/golang.org/x/arch/riscv64/riscv64asm/csr_string.go",
    "content": "// Code generated by \"stringer -type=CSR\"; DO NOT EDIT.\n\npackage riscv64asm\n\nimport \"strconv\"\n\nfunc _() {\n\t// An \"invalid array index\" compiler error signifies that the constant values have changed.\n\t// Re-run the stringer command to generate them again.\n\tvar x [1]struct{}\n\t_ = x[USTATUS-0]\n\t_ = x[FFLAGS-1]\n\t_ = x[FRM-2]\n\t_ = x[FCSR-3]\n\t_ = x[UIE-4]\n\t_ = x[UTVEC-5]\n\t_ = x[UTVT-7]\n\t_ = x[VSTART-8]\n\t_ = x[VXSAT-9]\n\t_ = x[VXRM-10]\n\t_ = x[VCSR-15]\n\t_ = x[USCRATCH-64]\n\t_ = x[UEPC-65]\n\t_ = x[UCAUSE-66]\n\t_ = x[UTVAL-67]\n\t_ = x[UIP-68]\n\t_ = x[UNXTI-69]\n\t_ = x[UINTSTATUS-70]\n\t_ = x[USCRATCHCSW-72]\n\t_ = x[USCRATCHCSWL-73]\n\t_ = x[SSTATUS-256]\n\t_ = x[SEDELEG-258]\n\t_ = x[SIDELEG-259]\n\t_ = x[SIE-260]\n\t_ = x[STVEC-261]\n\t_ = x[SCOUNTEREN-262]\n\t_ = x[STVT-263]\n\t_ = x[SSCRATCH-320]\n\t_ = x[SEPC-321]\n\t_ = x[SCAUSE-322]\n\t_ = x[STVAL-323]\n\t_ = x[SIP-324]\n\t_ = x[SNXTI-325]\n\t_ = x[SINTSTATUS-326]\n\t_ = x[SSCRATCHCSW-328]\n\t_ = x[SSCRATCHCSWL-329]\n\t_ = x[SATP-384]\n\t_ = x[VSSTATUS-512]\n\t_ = x[VSIE-516]\n\t_ = x[VSTVEC-517]\n\t_ = x[VSSCRATCH-576]\n\t_ = x[VSEPC-577]\n\t_ = x[VSCAUSE-578]\n\t_ = x[VSTVAL-579]\n\t_ = x[VSIP-580]\n\t_ = x[VSATP-640]\n\t_ = x[MSTATUS-768]\n\t_ = x[MISA-769]\n\t_ = x[MEDELEG-770]\n\t_ = x[MIDELEG-771]\n\t_ = x[MIE-772]\n\t_ = x[MTVEC-773]\n\t_ = x[MCOUNTEREN-774]\n\t_ = x[MTVT-775]\n\t_ = x[MSTATUSH-784]\n\t_ = x[MCOUNTINHIBIT-800]\n\t_ = x[MHPMEVENT3-803]\n\t_ = x[MHPMEVENT4-804]\n\t_ = x[MHPMEVENT5-805]\n\t_ = x[MHPMEVENT6-806]\n\t_ = x[MHPMEVENT7-807]\n\t_ = x[MHPMEVENT8-808]\n\t_ = x[MHPMEVENT9-809]\n\t_ = x[MHPMEVENT10-810]\n\t_ = x[MHPMEVENT11-811]\n\t_ = x[MHPMEVENT12-812]\n\t_ = x[MHPMEVENT13-813]\n\t_ = x[MHPMEVENT14-814]\n\t_ = x[MHPMEVENT15-815]\n\t_ = x[MHPMEVENT16-816]\n\t_ = x[MHPMEVENT17-817]\n\t_ = x[MHPMEVENT18-818]\n\t_ = x[MHPMEVENT19-819]\n\t_ = x[MHPMEVENT20-820]\n\t_ = x[MHPMEVENT21-821]\n\t_ = x[MHPMEVENT22-822]\n\t_ = x[MHPMEVENT23-823]\n\t_ = x[MHPMEVENT24-824]\n\t_ = x[MHPMEVENT25-825]\n\t_ = x[MHPMEVENT26-826]\n\t_ = x[MHPMEVENT27-827]\n\t_ = x[MHPMEVENT28-828]\n\t_ = x[MHPMEVENT29-829]\n\t_ = x[MHPMEVENT30-830]\n\t_ = x[MHPMEVENT31-831]\n\t_ = x[MSCRATCH-832]\n\t_ = x[MEPC-833]\n\t_ = x[MCAUSE-834]\n\t_ = x[MTVAL-835]\n\t_ = x[MIP-836]\n\t_ = x[MNXTI-837]\n\t_ = x[MINTSTATUS-838]\n\t_ = x[MSCRATCHCSW-840]\n\t_ = x[MSCRATCHCSWL-841]\n\t_ = x[MTINST-842]\n\t_ = x[MTVAL2-843]\n\t_ = x[PMPCFG0-928]\n\t_ = x[PMPCFG1-929]\n\t_ = x[PMPCFG2-930]\n\t_ = x[PMPCFG3-931]\n\t_ = x[PMPADDR0-944]\n\t_ = x[PMPADDR1-945]\n\t_ = x[PMPADDR2-946]\n\t_ = x[PMPADDR3-947]\n\t_ = x[PMPADDR4-948]\n\t_ = x[PMPADDR5-949]\n\t_ = x[PMPADDR6-950]\n\t_ = x[PMPADDR7-951]\n\t_ = x[PMPADDR8-952]\n\t_ = x[PMPADDR9-953]\n\t_ = x[PMPADDR10-954]\n\t_ = x[PMPADDR11-955]\n\t_ = x[PMPADDR12-956]\n\t_ = x[PMPADDR13-957]\n\t_ = x[PMPADDR14-958]\n\t_ = x[PMPADDR15-959]\n\t_ = x[HSTATUS-1536]\n\t_ = x[HEDELEG-1538]\n\t_ = x[HIDELEG-1539]\n\t_ = x[HIE-1540]\n\t_ = x[HTIMEDELTA-1541]\n\t_ = x[HCOUNTEREN-1542]\n\t_ = x[HGEIE-1543]\n\t_ = x[HTIMEDELTAH-1557]\n\t_ = x[HTVAL-1603]\n\t_ = x[HIP-1604]\n\t_ = x[HVIP-1605]\n\t_ = x[HTINST-1610]\n\t_ = x[HGATP-1664]\n\t_ = x[TSELECT-1952]\n\t_ = x[TDATA1-1953]\n\t_ = x[TDATA2-1954]\n\t_ = x[TDATA3-1955]\n\t_ = x[TINFO-1956]\n\t_ = x[TCONTROL-1957]\n\t_ = x[MCONTEXT-1960]\n\t_ = x[MNOISE-1961]\n\t_ = x[SCONTEXT-1962]\n\t_ = x[DCSR-1968]\n\t_ = x[DPC-1969]\n\t_ = x[DSCRATCH0-1970]\n\t_ = x[DSCRATCH1-1971]\n\t_ = x[MCYCLE-2816]\n\t_ = x[MINSTRET-2818]\n\t_ = x[MHPMCOUNTER3-2819]\n\t_ = x[MHPMCOUNTER4-2820]\n\t_ = x[MHPMCOUNTER5-2821]\n\t_ = x[MHPMCOUNTER6-2822]\n\t_ = x[MHPMCOUNTER7-2823]\n\t_ = x[MHPMCOUNTER8-2824]\n\t_ = x[MHPMCOUNTER9-2825]\n\t_ = x[MHPMCOUNTER10-2826]\n\t_ = x[MHPMCOUNTER11-2827]\n\t_ = x[MHPMCOUNTER12-2828]\n\t_ = x[MHPMCOUNTER13-2829]\n\t_ = x[MHPMCOUNTER14-2830]\n\t_ = x[MHPMCOUNTER15-2831]\n\t_ = x[MHPMCOUNTER16-2832]\n\t_ = x[MHPMCOUNTER17-2833]\n\t_ = x[MHPMCOUNTER18-2834]\n\t_ = x[MHPMCOUNTER19-2835]\n\t_ = x[MHPMCOUNTER20-2836]\n\t_ = x[MHPMCOUNTER21-2837]\n\t_ = x[MHPMCOUNTER22-2838]\n\t_ = x[MHPMCOUNTER23-2839]\n\t_ = x[MHPMCOUNTER24-2840]\n\t_ = x[MHPMCOUNTER25-2841]\n\t_ = x[MHPMCOUNTER26-2842]\n\t_ = x[MHPMCOUNTER27-2843]\n\t_ = x[MHPMCOUNTER28-2844]\n\t_ = x[MHPMCOUNTER29-2845]\n\t_ = x[MHPMCOUNTER30-2846]\n\t_ = x[MHPMCOUNTER31-2847]\n\t_ = x[MCYCLEH-2944]\n\t_ = x[MINSTRETH-2946]\n\t_ = x[MHPMCOUNTER3H-2947]\n\t_ = x[MHPMCOUNTER4H-2948]\n\t_ = x[MHPMCOUNTER5H-2949]\n\t_ = x[MHPMCOUNTER6H-2950]\n\t_ = x[MHPMCOUNTER7H-2951]\n\t_ = x[MHPMCOUNTER8H-2952]\n\t_ = x[MHPMCOUNTER9H-2953]\n\t_ = x[MHPMCOUNTER10H-2954]\n\t_ = x[MHPMCOUNTER11H-2955]\n\t_ = x[MHPMCOUNTER12H-2956]\n\t_ = x[MHPMCOUNTER13H-2957]\n\t_ = x[MHPMCOUNTER14H-2958]\n\t_ = x[MHPMCOUNTER15H-2959]\n\t_ = x[MHPMCOUNTER16H-2960]\n\t_ = x[MHPMCOUNTER17H-2961]\n\t_ = x[MHPMCOUNTER18H-2962]\n\t_ = x[MHPMCOUNTER19H-2963]\n\t_ = x[MHPMCOUNTER20H-2964]\n\t_ = x[MHPMCOUNTER21H-2965]\n\t_ = x[MHPMCOUNTER22H-2966]\n\t_ = x[MHPMCOUNTER23H-2967]\n\t_ = x[MHPMCOUNTER24H-2968]\n\t_ = x[MHPMCOUNTER25H-2969]\n\t_ = x[MHPMCOUNTER26H-2970]\n\t_ = x[MHPMCOUNTER27H-2971]\n\t_ = x[MHPMCOUNTER28H-2972]\n\t_ = x[MHPMCOUNTER29H-2973]\n\t_ = x[MHPMCOUNTER30H-2974]\n\t_ = x[MHPMCOUNTER31H-2975]\n\t_ = x[CYCLE-3072]\n\t_ = x[TIME-3073]\n\t_ = x[INSTRET-3074]\n\t_ = x[HPMCOUNTER3-3075]\n\t_ = x[HPMCOUNTER4-3076]\n\t_ = x[HPMCOUNTER5-3077]\n\t_ = x[HPMCOUNTER6-3078]\n\t_ = x[HPMCOUNTER7-3079]\n\t_ = x[HPMCOUNTER8-3080]\n\t_ = x[HPMCOUNTER9-3081]\n\t_ = x[HPMCOUNTER10-3082]\n\t_ = x[HPMCOUNTER11-3083]\n\t_ = x[HPMCOUNTER12-3084]\n\t_ = x[HPMCOUNTER13-3085]\n\t_ = x[HPMCOUNTER14-3086]\n\t_ = x[HPMCOUNTER15-3087]\n\t_ = x[HPMCOUNTER16-3088]\n\t_ = x[HPMCOUNTER17-3089]\n\t_ = x[HPMCOUNTER18-3090]\n\t_ = x[HPMCOUNTER19-3091]\n\t_ = x[HPMCOUNTER20-3092]\n\t_ = x[HPMCOUNTER21-3093]\n\t_ = x[HPMCOUNTER22-3094]\n\t_ = x[HPMCOUNTER23-3095]\n\t_ = x[HPMCOUNTER24-3096]\n\t_ = x[HPMCOUNTER25-3097]\n\t_ = x[HPMCOUNTER26-3098]\n\t_ = x[HPMCOUNTER27-3099]\n\t_ = x[HPMCOUNTER28-3100]\n\t_ = x[HPMCOUNTER29-3101]\n\t_ = x[HPMCOUNTER30-3102]\n\t_ = x[HPMCOUNTER31-3103]\n\t_ = x[VL-3104]\n\t_ = x[VTYPE-3105]\n\t_ = x[VLENB-3106]\n\t_ = x[CYCLEH-3200]\n\t_ = x[TIMEH-3201]\n\t_ = x[INSTRETH-3202]\n\t_ = x[HPMCOUNTER3H-3203]\n\t_ = x[HPMCOUNTER4H-3204]\n\t_ = x[HPMCOUNTER5H-3205]\n\t_ = x[HPMCOUNTER6H-3206]\n\t_ = x[HPMCOUNTER7H-3207]\n\t_ = x[HPMCOUNTER8H-3208]\n\t_ = x[HPMCOUNTER9H-3209]\n\t_ = x[HPMCOUNTER10H-3210]\n\t_ = x[HPMCOUNTER11H-3211]\n\t_ = x[HPMCOUNTER12H-3212]\n\t_ = x[HPMCOUNTER13H-3213]\n\t_ = x[HPMCOUNTER14H-3214]\n\t_ = x[HPMCOUNTER15H-3215]\n\t_ = x[HPMCOUNTER16H-3216]\n\t_ = x[HPMCOUNTER17H-3217]\n\t_ = x[HPMCOUNTER18H-3218]\n\t_ = x[HPMCOUNTER19H-3219]\n\t_ = x[HPMCOUNTER20H-3220]\n\t_ = x[HPMCOUNTER21H-3221]\n\t_ = x[HPMCOUNTER22H-3222]\n\t_ = x[HPMCOUNTER23H-3223]\n\t_ = x[HPMCOUNTER24H-3224]\n\t_ = x[HPMCOUNTER25H-3225]\n\t_ = x[HPMCOUNTER26H-3226]\n\t_ = x[HPMCOUNTER27H-3227]\n\t_ = x[HPMCOUNTER28H-3228]\n\t_ = x[HPMCOUNTER29H-3229]\n\t_ = x[HPMCOUNTER30H-3230]\n\t_ = x[HPMCOUNTER31H-3231]\n\t_ = x[HGEIP-3602]\n\t_ = x[MVENDORID-3857]\n\t_ = x[MARCHID-3858]\n\t_ = x[MIMPID-3859]\n\t_ = x[MHARTID-3860]\n\t_ = x[MENTROPY-3861]\n}\n\nconst _CSR_name = \"USTATUSFFLAGSFRMFCSRUIEUTVECUTVTVSTARTVXSATVXRMVCSRUSCRATCHUEPCUCAUSEUTVALUIPUNXTIUINTSTATUSUSCRATCHCSWUSCRATCHCSWLSSTATUSSEDELEGSIDELEGSIESTVECSCOUNTERENSTVTSSCRATCHSEPCSCAUSESTVALSIPSNXTISINTSTATUSSSCRATCHCSWSSCRATCHCSWLSATPVSSTATUSVSIEVSTVECVSSCRATCHVSEPCVSCAUSEVSTVALVSIPVSATPMSTATUSMISAMEDELEGMIDELEGMIEMTVECMCOUNTERENMTVTMSTATUSHMCOUNTINHIBITMHPMEVENT3MHPMEVENT4MHPMEVENT5MHPMEVENT6MHPMEVENT7MHPMEVENT8MHPMEVENT9MHPMEVENT10MHPMEVENT11MHPMEVENT12MHPMEVENT13MHPMEVENT14MHPMEVENT15MHPMEVENT16MHPMEVENT17MHPMEVENT18MHPMEVENT19MHPMEVENT20MHPMEVENT21MHPMEVENT22MHPMEVENT23MHPMEVENT24MHPMEVENT25MHPMEVENT26MHPMEVENT27MHPMEVENT28MHPMEVENT29MHPMEVENT30MHPMEVENT31MSCRATCHMEPCMCAUSEMTVALMIPMNXTIMINTSTATUSMSCRATCHCSWMSCRATCHCSWLMTINSTMTVAL2PMPCFG0PMPCFG1PMPCFG2PMPCFG3PMPADDR0PMPADDR1PMPADDR2PMPADDR3PMPADDR4PMPADDR5PMPADDR6PMPADDR7PMPADDR8PMPADDR9PMPADDR10PMPADDR11PMPADDR12PMPADDR13PMPADDR14PMPADDR15HSTATUSHEDELEGHIDELEGHIEHTIMEDELTAHCOUNTERENHGEIEHTIMEDELTAHHTVALHIPHVIPHTINSTHGATPTSELECTTDATA1TDATA2TDATA3TINFOTCONTROLMCONTEXTMNOISESCONTEXTDCSRDPCDSCRATCH0DSCRATCH1MCYCLEMINSTRETMHPMCOUNTER3MHPMCOUNTER4MHPMCOUNTER5MHPMCOUNTER6MHPMCOUNTER7MHPMCOUNTER8MHPMCOUNTER9MHPMCOUNTER10MHPMCOUNTER11MHPMCOUNTER12MHPMCOUNTER13MHPMCOUNTER14MHPMCOUNTER15MHPMCOUNTER16MHPMCOUNTER17MHPMCOUNTER18MHPMCOUNTER19MHPMCOUNTER20MHPMCOUNTER21MHPMCOUNTER22MHPMCOUNTER23MHPMCOUNTER24MHPMCOUNTER25MHPMCOUNTER26MHPMCOUNTER27MHPMCOUNTER28MHPMCOUNTER29MHPMCOUNTER30MHPMCOUNTER31MCYCLEHMINSTRETHMHPMCOUNTER3HMHPMCOUNTER4HMHPMCOUNTER5HMHPMCOUNTER6HMHPMCOUNTER7HMHPMCOUNTER8HMHPMCOUNTER9HMHPMCOUNTER10HMHPMCOUNTER11HMHPMCOUNTER12HMHPMCOUNTER13HMHPMCOUNTER14HMHPMCOUNTER15HMHPMCOUNTER16HMHPMCOUNTER17HMHPMCOUNTER18HMHPMCOUNTER19HMHPMCOUNTER20HMHPMCOUNTER21HMHPMCOUNTER22HMHPMCOUNTER23HMHPMCOUNTER24HMHPMCOUNTER25HMHPMCOUNTER26HMHPMCOUNTER27HMHPMCOUNTER28HMHPMCOUNTER29HMHPMCOUNTER30HMHPMCOUNTER31HCYCLETIMEINSTRETHPMCOUNTER3HPMCOUNTER4HPMCOUNTER5HPMCOUNTER6HPMCOUNTER7HPMCOUNTER8HPMCOUNTER9HPMCOUNTER10HPMCOUNTER11HPMCOUNTER12HPMCOUNTER13HPMCOUNTER14HPMCOUNTER15HPMCOUNTER16HPMCOUNTER17HPMCOUNTER18HPMCOUNTER19HPMCOUNTER20HPMCOUNTER21HPMCOUNTER22HPMCOUNTER23HPMCOUNTER24HPMCOUNTER25HPMCOUNTER26HPMCOUNTER27HPMCOUNTER28HPMCOUNTER29HPMCOUNTER30HPMCOUNTER31VLVTYPEVLENBCYCLEHTIMEHINSTRETHHPMCOUNTER3HHPMCOUNTER4HHPMCOUNTER5HHPMCOUNTER6HHPMCOUNTER7HHPMCOUNTER8HHPMCOUNTER9HHPMCOUNTER10HHPMCOUNTER11HHPMCOUNTER12HHPMCOUNTER13HHPMCOUNTER14HHPMCOUNTER15HHPMCOUNTER16HHPMCOUNTER17HHPMCOUNTER18HHPMCOUNTER19HHPMCOUNTER20HHPMCOUNTER21HHPMCOUNTER22HHPMCOUNTER23HHPMCOUNTER24HHPMCOUNTER25HHPMCOUNTER26HHPMCOUNTER27HHPMCOUNTER28HHPMCOUNTER29HHPMCOUNTER30HHPMCOUNTER31HHGEIPMVENDORIDMARCHIDMIMPIDMHARTIDMENTROPY\"\n\nvar _CSR_map = map[CSR]string{\n\t0:    _CSR_name[0:7],\n\t1:    _CSR_name[7:13],\n\t2:    _CSR_name[13:16],\n\t3:    _CSR_name[16:20],\n\t4:    _CSR_name[20:23],\n\t5:    _CSR_name[23:28],\n\t7:    _CSR_name[28:32],\n\t8:    _CSR_name[32:38],\n\t9:    _CSR_name[38:43],\n\t10:   _CSR_name[43:47],\n\t15:   _CSR_name[47:51],\n\t64:   _CSR_name[51:59],\n\t65:   _CSR_name[59:63],\n\t66:   _CSR_name[63:69],\n\t67:   _CSR_name[69:74],\n\t68:   _CSR_name[74:77],\n\t69:   _CSR_name[77:82],\n\t70:   _CSR_name[82:92],\n\t72:   _CSR_name[92:103],\n\t73:   _CSR_name[103:115],\n\t256:  _CSR_name[115:122],\n\t258:  _CSR_name[122:129],\n\t259:  _CSR_name[129:136],\n\t260:  _CSR_name[136:139],\n\t261:  _CSR_name[139:144],\n\t262:  _CSR_name[144:154],\n\t263:  _CSR_name[154:158],\n\t320:  _CSR_name[158:166],\n\t321:  _CSR_name[166:170],\n\t322:  _CSR_name[170:176],\n\t323:  _CSR_name[176:181],\n\t324:  _CSR_name[181:184],\n\t325:  _CSR_name[184:189],\n\t326:  _CSR_name[189:199],\n\t328:  _CSR_name[199:210],\n\t329:  _CSR_name[210:222],\n\t384:  _CSR_name[222:226],\n\t512:  _CSR_name[226:234],\n\t516:  _CSR_name[234:238],\n\t517:  _CSR_name[238:244],\n\t576:  _CSR_name[244:253],\n\t577:  _CSR_name[253:258],\n\t578:  _CSR_name[258:265],\n\t579:  _CSR_name[265:271],\n\t580:  _CSR_name[271:275],\n\t640:  _CSR_name[275:280],\n\t768:  _CSR_name[280:287],\n\t769:  _CSR_name[287:291],\n\t770:  _CSR_name[291:298],\n\t771:  _CSR_name[298:305],\n\t772:  _CSR_name[305:308],\n\t773:  _CSR_name[308:313],\n\t774:  _CSR_name[313:323],\n\t775:  _CSR_name[323:327],\n\t784:  _CSR_name[327:335],\n\t800:  _CSR_name[335:348],\n\t803:  _CSR_name[348:358],\n\t804:  _CSR_name[358:368],\n\t805:  _CSR_name[368:378],\n\t806:  _CSR_name[378:388],\n\t807:  _CSR_name[388:398],\n\t808:  _CSR_name[398:408],\n\t809:  _CSR_name[408:418],\n\t810:  _CSR_name[418:429],\n\t811:  _CSR_name[429:440],\n\t812:  _CSR_name[440:451],\n\t813:  _CSR_name[451:462],\n\t814:  _CSR_name[462:473],\n\t815:  _CSR_name[473:484],\n\t816:  _CSR_name[484:495],\n\t817:  _CSR_name[495:506],\n\t818:  _CSR_name[506:517],\n\t819:  _CSR_name[517:528],\n\t820:  _CSR_name[528:539],\n\t821:  _CSR_name[539:550],\n\t822:  _CSR_name[550:561],\n\t823:  _CSR_name[561:572],\n\t824:  _CSR_name[572:583],\n\t825:  _CSR_name[583:594],\n\t826:  _CSR_name[594:605],\n\t827:  _CSR_name[605:616],\n\t828:  _CSR_name[616:627],\n\t829:  _CSR_name[627:638],\n\t830:  _CSR_name[638:649],\n\t831:  _CSR_name[649:660],\n\t832:  _CSR_name[660:668],\n\t833:  _CSR_name[668:672],\n\t834:  _CSR_name[672:678],\n\t835:  _CSR_name[678:683],\n\t836:  _CSR_name[683:686],\n\t837:  _CSR_name[686:691],\n\t838:  _CSR_name[691:701],\n\t840:  _CSR_name[701:712],\n\t841:  _CSR_name[712:724],\n\t842:  _CSR_name[724:730],\n\t843:  _CSR_name[730:736],\n\t928:  _CSR_name[736:743],\n\t929:  _CSR_name[743:750],\n\t930:  _CSR_name[750:757],\n\t931:  _CSR_name[757:764],\n\t944:  _CSR_name[764:772],\n\t945:  _CSR_name[772:780],\n\t946:  _CSR_name[780:788],\n\t947:  _CSR_name[788:796],\n\t948:  _CSR_name[796:804],\n\t949:  _CSR_name[804:812],\n\t950:  _CSR_name[812:820],\n\t951:  _CSR_name[820:828],\n\t952:  _CSR_name[828:836],\n\t953:  _CSR_name[836:844],\n\t954:  _CSR_name[844:853],\n\t955:  _CSR_name[853:862],\n\t956:  _CSR_name[862:871],\n\t957:  _CSR_name[871:880],\n\t958:  _CSR_name[880:889],\n\t959:  _CSR_name[889:898],\n\t1536: _CSR_name[898:905],\n\t1538: _CSR_name[905:912],\n\t1539: _CSR_name[912:919],\n\t1540: _CSR_name[919:922],\n\t1541: _CSR_name[922:932],\n\t1542: _CSR_name[932:942],\n\t1543: _CSR_name[942:947],\n\t1557: _CSR_name[947:958],\n\t1603: _CSR_name[958:963],\n\t1604: _CSR_name[963:966],\n\t1605: _CSR_name[966:970],\n\t1610: _CSR_name[970:976],\n\t1664: _CSR_name[976:981],\n\t1952: _CSR_name[981:988],\n\t1953: _CSR_name[988:994],\n\t1954: _CSR_name[994:1000],\n\t1955: _CSR_name[1000:1006],\n\t1956: _CSR_name[1006:1011],\n\t1957: _CSR_name[1011:1019],\n\t1960: _CSR_name[1019:1027],\n\t1961: _CSR_name[1027:1033],\n\t1962: _CSR_name[1033:1041],\n\t1968: _CSR_name[1041:1045],\n\t1969: _CSR_name[1045:1048],\n\t1970: _CSR_name[1048:1057],\n\t1971: _CSR_name[1057:1066],\n\t2816: _CSR_name[1066:1072],\n\t2818: _CSR_name[1072:1080],\n\t2819: _CSR_name[1080:1092],\n\t2820: _CSR_name[1092:1104],\n\t2821: _CSR_name[1104:1116],\n\t2822: _CSR_name[1116:1128],\n\t2823: _CSR_name[1128:1140],\n\t2824: _CSR_name[1140:1152],\n\t2825: _CSR_name[1152:1164],\n\t2826: _CSR_name[1164:1177],\n\t2827: _CSR_name[1177:1190],\n\t2828: _CSR_name[1190:1203],\n\t2829: _CSR_name[1203:1216],\n\t2830: _CSR_name[1216:1229],\n\t2831: _CSR_name[1229:1242],\n\t2832: _CSR_name[1242:1255],\n\t2833: _CSR_name[1255:1268],\n\t2834: _CSR_name[1268:1281],\n\t2835: _CSR_name[1281:1294],\n\t2836: _CSR_name[1294:1307],\n\t2837: _CSR_name[1307:1320],\n\t2838: _CSR_name[1320:1333],\n\t2839: _CSR_name[1333:1346],\n\t2840: _CSR_name[1346:1359],\n\t2841: _CSR_name[1359:1372],\n\t2842: _CSR_name[1372:1385],\n\t2843: _CSR_name[1385:1398],\n\t2844: _CSR_name[1398:1411],\n\t2845: _CSR_name[1411:1424],\n\t2846: _CSR_name[1424:1437],\n\t2847: _CSR_name[1437:1450],\n\t2944: _CSR_name[1450:1457],\n\t2946: _CSR_name[1457:1466],\n\t2947: _CSR_name[1466:1479],\n\t2948: _CSR_name[1479:1492],\n\t2949: _CSR_name[1492:1505],\n\t2950: _CSR_name[1505:1518],\n\t2951: _CSR_name[1518:1531],\n\t2952: _CSR_name[1531:1544],\n\t2953: _CSR_name[1544:1557],\n\t2954: _CSR_name[1557:1571],\n\t2955: _CSR_name[1571:1585],\n\t2956: _CSR_name[1585:1599],\n\t2957: _CSR_name[1599:1613],\n\t2958: _CSR_name[1613:1627],\n\t2959: _CSR_name[1627:1641],\n\t2960: _CSR_name[1641:1655],\n\t2961: _CSR_name[1655:1669],\n\t2962: _CSR_name[1669:1683],\n\t2963: _CSR_name[1683:1697],\n\t2964: _CSR_name[1697:1711],\n\t2965: _CSR_name[1711:1725],\n\t2966: _CSR_name[1725:1739],\n\t2967: _CSR_name[1739:1753],\n\t2968: _CSR_name[1753:1767],\n\t2969: _CSR_name[1767:1781],\n\t2970: _CSR_name[1781:1795],\n\t2971: _CSR_name[1795:1809],\n\t2972: _CSR_name[1809:1823],\n\t2973: _CSR_name[1823:1837],\n\t2974: _CSR_name[1837:1851],\n\t2975: _CSR_name[1851:1865],\n\t3072: _CSR_name[1865:1870],\n\t3073: _CSR_name[1870:1874],\n\t3074: _CSR_name[1874:1881],\n\t3075: _CSR_name[1881:1892],\n\t3076: _CSR_name[1892:1903],\n\t3077: _CSR_name[1903:1914],\n\t3078: _CSR_name[1914:1925],\n\t3079: _CSR_name[1925:1936],\n\t3080: _CSR_name[1936:1947],\n\t3081: _CSR_name[1947:1958],\n\t3082: _CSR_name[1958:1970],\n\t3083: _CSR_name[1970:1982],\n\t3084: _CSR_name[1982:1994],\n\t3085: _CSR_name[1994:2006],\n\t3086: _CSR_name[2006:2018],\n\t3087: _CSR_name[2018:2030],\n\t3088: _CSR_name[2030:2042],\n\t3089: _CSR_name[2042:2054],\n\t3090: _CSR_name[2054:2066],\n\t3091: _CSR_name[2066:2078],\n\t3092: _CSR_name[2078:2090],\n\t3093: _CSR_name[2090:2102],\n\t3094: _CSR_name[2102:2114],\n\t3095: _CSR_name[2114:2126],\n\t3096: _CSR_name[2126:2138],\n\t3097: _CSR_name[2138:2150],\n\t3098: _CSR_name[2150:2162],\n\t3099: _CSR_name[2162:2174],\n\t3100: _CSR_name[2174:2186],\n\t3101: _CSR_name[2186:2198],\n\t3102: _CSR_name[2198:2210],\n\t3103: _CSR_name[2210:2222],\n\t3104: _CSR_name[2222:2224],\n\t3105: _CSR_name[2224:2229],\n\t3106: _CSR_name[2229:2234],\n\t3200: _CSR_name[2234:2240],\n\t3201: _CSR_name[2240:2245],\n\t3202: _CSR_name[2245:2253],\n\t3203: _CSR_name[2253:2265],\n\t3204: _CSR_name[2265:2277],\n\t3205: _CSR_name[2277:2289],\n\t3206: _CSR_name[2289:2301],\n\t3207: _CSR_name[2301:2313],\n\t3208: _CSR_name[2313:2325],\n\t3209: _CSR_name[2325:2337],\n\t3210: _CSR_name[2337:2350],\n\t3211: _CSR_name[2350:2363],\n\t3212: _CSR_name[2363:2376],\n\t3213: _CSR_name[2376:2389],\n\t3214: _CSR_name[2389:2402],\n\t3215: _CSR_name[2402:2415],\n\t3216: _CSR_name[2415:2428],\n\t3217: _CSR_name[2428:2441],\n\t3218: _CSR_name[2441:2454],\n\t3219: _CSR_name[2454:2467],\n\t3220: _CSR_name[2467:2480],\n\t3221: _CSR_name[2480:2493],\n\t3222: _CSR_name[2493:2506],\n\t3223: _CSR_name[2506:2519],\n\t3224: _CSR_name[2519:2532],\n\t3225: _CSR_name[2532:2545],\n\t3226: _CSR_name[2545:2558],\n\t3227: _CSR_name[2558:2571],\n\t3228: _CSR_name[2571:2584],\n\t3229: _CSR_name[2584:2597],\n\t3230: _CSR_name[2597:2610],\n\t3231: _CSR_name[2610:2623],\n\t3602: _CSR_name[2623:2628],\n\t3857: _CSR_name[2628:2637],\n\t3858: _CSR_name[2637:2644],\n\t3859: _CSR_name[2644:2650],\n\t3860: _CSR_name[2650:2657],\n\t3861: _CSR_name[2657:2665],\n}\n\nfunc (i CSR) String() string {\n\tif str, ok := _CSR_map[i]; ok {\n\t\treturn str\n\t}\n\treturn \"CSR(\" + strconv.FormatInt(int64(i), 10) + \")\"\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/riscv64/riscv64asm/decode.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage riscv64asm\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n)\n\ntype argTypeList [6]argType\n\n// An instFormat describes the format of an instruction encoding.\ntype instFormat struct {\n\tmask  uint32\n\tvalue uint32\n\top    Op\n\t// args describe how to decode the instruction arguments.\n\t// args is stored as a fixed-size array.\n\t// if there are fewer than len(args) arguments, args[i] == 0 marks\n\t// the end of the argument list.\n\targs argTypeList\n}\n\nvar (\n\terrShort   = errors.New(\"truncated instruction\")\n\terrUnknown = errors.New(\"unknown instruction\")\n)\n\nvar decoderCover []bool\n\nfunc init() {\n\tdecoderCover = make([]bool, len(instFormats))\n}\n\n// Decode decodes the 4 bytes in src as a single instruction.\nfunc Decode(src []byte) (Inst, error) {\n\tlength := len(src)\n\tif length < 2 {\n\t\treturn Inst{}, errShort\n\t}\n\n\tvar x uint32\n\t// Non-RVC instructions always starts with 0x11\n\t// So check whether src[0] & 3 == 3\n\tif src[0]&3 == 3 {\n\t\tif length < 4 {\n\t\t\treturn Inst{}, errShort\n\t\t}\n\t\tlength = 4\n\t\tx = binary.LittleEndian.Uint32(src)\n\t} else {\n\t\tlength = 2\n\t\tx = uint32(binary.LittleEndian.Uint16(src))\n\t}\n\nSearch:\n\tfor i, f := range instFormats {\n\t\tif (x & f.mask) != f.value {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Decode args.\n\t\tvar args Args\n\t\tfor j, aop := range f.args {\n\t\t\tif aop == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\targ := decodeArg(aop, x, i)\n\t\t\tif arg == nil && f.op != C_NOP {\n\t\t\t\t// Cannot decode argument.\n\t\t\t\tcontinue Search\n\t\t\t}\n\t\t\targs[j] = arg\n\t\t}\n\n\t\tif length == 2 {\n\t\t\targs = convertCompressedIns(&f, args)\n\t\t}\n\n\t\tdecoderCover[i] = true\n\t\tinst := Inst{\n\t\t\tOp:   f.op,\n\t\t\tArgs: args,\n\t\t\tEnc:  x,\n\t\t\tLen:  length,\n\t\t}\n\t\treturn inst, nil\n\t}\n\treturn Inst{}, errUnknown\n}\n\n// decodeArg decodes the arg described by aop from the instruction bits x.\n// It returns nil if x cannot be decoded according to aop.\nfunc decodeArg(aop argType, x uint32, index int) Arg {\n\tswitch aop {\n\tcase arg_rd:\n\t\treturn X0 + Reg((x>>7)&((1<<5)-1))\n\n\tcase arg_rs1:\n\t\treturn X0 + Reg((x>>15)&((1<<5)-1))\n\n\tcase arg_rs2:\n\t\treturn X0 + Reg((x>>20)&((1<<5)-1))\n\n\tcase arg_rs3:\n\t\treturn X0 + Reg((x>>27)&((1<<5)-1))\n\n\tcase arg_fd:\n\t\treturn F0 + Reg((x>>7)&((1<<5)-1))\n\n\tcase arg_fs1:\n\t\treturn F0 + Reg((x>>15)&((1<<5)-1))\n\n\tcase arg_fs2:\n\t\treturn F0 + Reg((x>>20)&((1<<5)-1))\n\n\tcase arg_fs3:\n\t\treturn F0 + Reg((x>>27)&((1<<5)-1))\n\n\tcase arg_rs1_amo:\n\t\treturn AmoReg{X0 + Reg((x>>15)&((1<<5)-1))}\n\n\tcase arg_rs1_mem:\n\t\timm := x >> 20\n\t\t// Sign-extend\n\t\tif imm>>uint32(12-1) == 1 {\n\t\t\timm |= 0xfffff << 12\n\t\t}\n\t\treturn RegOffset{X0 + Reg((x>>15)&((1<<5)-1)), Simm{int32(imm), true, 12}}\n\n\tcase arg_rs1_store:\n\t\timm := (x<<20)>>27 | (x>>25)<<5\n\t\t// Sign-extend\n\t\tif imm>>uint32(12-1) == 1 {\n\t\t\timm |= 0xfffff << 12\n\t\t}\n\t\treturn RegOffset{X0 + Reg((x>>15)&((1<<5)-1)), Simm{int32(imm), true, 12}}\n\n\tcase arg_pred:\n\t\timm := x << 4 >> 28\n\t\treturn MemOrder(uint8(imm))\n\n\tcase arg_succ:\n\t\timm := x << 8 >> 28\n\t\treturn MemOrder(uint8(imm))\n\n\tcase arg_csr:\n\t\timm := x >> 20\n\t\treturn CSR(imm)\n\n\tcase arg_zimm:\n\t\timm := x << 12 >> 27\n\t\treturn Uimm{imm, true}\n\n\tcase arg_shamt5:\n\t\timm := x << 7 >> 27\n\t\treturn Uimm{imm, false}\n\n\tcase arg_shamt6:\n\t\timm := x << 6 >> 26\n\t\treturn Uimm{imm, false}\n\n\tcase arg_imm12:\n\t\timm := x >> 20\n\t\t// Sign-extend\n\t\tif imm>>uint32(12-1) == 1 {\n\t\t\timm |= 0xfffff << 12\n\t\t}\n\t\treturn Simm{int32(imm), true, 12}\n\n\tcase arg_imm20:\n\t\timm := x >> 12\n\t\treturn Uimm{imm, false}\n\n\tcase arg_jimm20:\n\t\timm := (x>>31)<<20 | (x<<1)>>22<<1 | (x<<11)>>31<<11 | (x<<12)>>24<<12\n\t\t// Sign-extend\n\t\tif imm>>uint32(21-1) == 1 {\n\t\t\timm |= 0x7ff << 21\n\t\t}\n\t\treturn Simm{int32(imm), true, 21}\n\n\tcase arg_simm12:\n\t\timm := (x<<20)>>27 | (x>>25)<<5\n\t\t// Sign-extend\n\t\tif imm>>uint32(12-1) == 1 {\n\t\t\timm |= 0xfffff << 12\n\t\t}\n\t\treturn Simm{int32(imm), true, 12}\n\n\tcase arg_bimm12:\n\t\timm := (x<<20)>>28<<1 | (x<<1)>>26<<5 | (x<<24)>>31<<11 | (x>>31)<<12\n\t\t// Sign-extend\n\t\tif imm>>uint32(13-1) == 1 {\n\t\t\timm |= 0x7ffff << 13\n\t\t}\n\t\treturn Simm{int32(imm), true, 13}\n\n\tcase arg_rd_p, arg_rs2_p:\n\t\treturn X8 + Reg((x>>2)&((1<<3)-1))\n\n\tcase arg_fd_p, arg_fs2_p:\n\t\treturn F8 + Reg((x>>2)&((1<<3)-1))\n\n\tcase arg_rs1_p, arg_rd_rs1_p:\n\t\treturn X8 + Reg((x>>7)&((1<<3)-1))\n\n\tcase arg_rd_n0, arg_rs1_n0, arg_rd_rs1_n0, arg_c_rs1_n0:\n\t\tif X0+Reg((x>>7)&((1<<5)-1)) == X0 {\n\t\t\treturn nil\n\t\t}\n\t\treturn X0 + Reg((x>>7)&((1<<5)-1))\n\n\tcase arg_c_rs2_n0:\n\t\tif X0+Reg((x>>2)&((1<<5)-1)) == X0 {\n\t\t\treturn nil\n\t\t}\n\t\treturn X0 + Reg((x>>2)&((1<<5)-1))\n\n\tcase arg_c_fs2:\n\t\treturn F0 + Reg((x>>2)&((1<<5)-1))\n\n\tcase arg_c_rs2:\n\t\treturn X0 + Reg((x>>2)&((1<<5)-1))\n\n\tcase arg_rd_n2:\n\t\tif X0+Reg((x>>7)&((1<<5)-1)) == X0 || X0+Reg((x>>7)&((1<<5)-1)) == X2 {\n\t\t\treturn nil\n\t\t}\n\t\treturn X0 + Reg((x>>7)&((1<<5)-1))\n\n\tcase arg_c_imm6:\n\t\timm := (x<<25)>>27 | (x<<19)>>31<<5\n\t\t// Sign-extend\n\t\tif imm>>uint32(6-1) == 1 {\n\t\t\timm |= 0x3ffffff << 6\n\t\t}\n\t\treturn Simm{int32(imm), true, 6}\n\n\tcase arg_c_nzimm6:\n\t\timm := (x<<25)>>27 | (x<<19)>>31<<5\n\t\t// Sign-extend\n\t\tif imm>>uint32(6-1) == 1 {\n\t\t\timm |= 0x3ffffff << 6\n\t\t}\n\t\tif int32(imm) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Simm{int32(imm), true, 6}\n\n\tcase arg_c_nzuimm6:\n\t\timm := (x<<25)>>27 | (x<<19)>>31<<5\n\t\tif int32(imm) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Uimm{imm, false}\n\n\tcase arg_c_uimm7:\n\t\timm := (x<<26)>>31<<6 | (x<<25)>>31<<2 | (x<<19)>>29<<3\n\t\treturn Uimm{imm, false}\n\n\tcase arg_c_uimm8:\n\t\timm := (x<<25)>>30<<6 | (x<<19)>>29<<3\n\t\treturn Uimm{imm, false}\n\n\tcase arg_c_uimm8sp_s:\n\t\timm := (x<<23)>>30<<6 | (x<<19)>>28<<2\n\t\treturn Uimm{imm, false}\n\n\tcase arg_c_uimm8sp:\n\t\timm := (x<<25)>>29<<2 | (x<<19)>>31<<5 | (x<<28)>>30<<6\n\t\treturn Uimm{imm, false}\n\n\tcase arg_c_uimm9sp_s:\n\t\timm := (x<<22)>>29<<6 | (x<<19)>>29<<3\n\t\treturn Uimm{imm, false}\n\n\tcase arg_c_uimm9sp:\n\t\timm := (x<<25)>>30<<3 | (x<<19)>>31<<5 | (x<<27)>>29<<6\n\t\treturn Uimm{imm, false}\n\n\tcase arg_c_bimm9:\n\t\timm := (x<<29)>>31<<5 | (x<<27)>>30<<1 | (x<<25)>>30<<6 | (x<<19)>>31<<8 | (x<<20)>>30<<3\n\t\t// Sign-extend\n\t\tif imm>>uint32(9-1) == 1 {\n\t\t\timm |= 0x7fffff << 9\n\t\t}\n\t\treturn Simm{int32(imm), true, 9}\n\n\tcase arg_c_nzimm10:\n\t\timm := (x<<29)>>31<<5 | (x<<27)>>30<<7 | (x<<26)>>31<<6 | (x<<25)>>31<<4 | (x<<19)>>31<<9\n\t\t// Sign-extend\n\t\tif imm>>uint32(10-1) == 1 {\n\t\t\timm |= 0x3fffff << 10\n\t\t}\n\t\tif int32(imm) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Simm{int32(imm), true, 10}\n\n\tcase arg_c_nzuimm10:\n\t\timm := (x<<26)>>31<<3 | (x<<25)>>31<<2 | (x<<21)>>28<<6 | (x<<19)>>30<<4\n\t\tif int32(imm) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Uimm{imm, false}\n\n\tcase arg_c_imm12:\n\t\timm := (x<<29)>>31<<5 | (x<<26)>>28<<1 | (x<<25)>>31<<7 | (x<<24)>>31<<6 | (x<<23)>>31<<10 | (x<<21)>>30<<8 | (x<<20)>>31<<4 | (x<<19)>>31<<11\n\t\t// Sign-extend\n\t\tif imm>>uint32(12-1) == 1 {\n\t\t\timm |= 0xfffff << 12\n\t\t}\n\t\treturn Simm{int32(imm), true, 12}\n\n\tcase arg_c_nzimm18:\n\t\timm := (x<<25)>>27<<12 | (x<<19)>>31<<17\n\t\t// Sign-extend\n\t\tif imm>>uint32(18-1) == 1 {\n\t\t\timm |= 0x3fff << 18\n\t\t}\n\t\tif int32(imm) == 0 {\n\t\t\treturn nil\n\t\t}\n\t\treturn Simm{int32(imm), true, 18}\n\n\tdefault:\n\t\treturn nil\n\t}\n}\n\n// convertCompressedIns rewrites the RVC Instruction to regular Instructions\nfunc convertCompressedIns(f *instFormat, args Args) Args {\n\tvar newargs Args\n\tswitch f.op {\n\tcase C_ADDI4SPN:\n\t\tf.op = ADDI\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = Reg(X2)\n\t\tnewargs[2] = Simm{int32(args[1].(Uimm).Imm), true, 12}\n\n\tcase C_LW:\n\t\tf.op = LW\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = RegOffset{args[1].(Reg), Simm{int32(args[2].(Uimm).Imm), true, 12}}\n\n\tcase C_SW:\n\t\tf.op = SW\n\t\tnewargs[0] = args[1]\n\t\tnewargs[1] = RegOffset{args[0].(Reg), Simm{int32(args[2].(Uimm).Imm), true, 12}}\n\n\tcase C_NOP:\n\t\tf.op = ADDI\n\t\tnewargs[0] = X0\n\t\tnewargs[1] = X0\n\t\tnewargs[2] = Simm{0, true, 12}\n\n\tcase C_ADDI:\n\t\tf.op = ADDI\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = Simm{args[1].(Simm).Imm, true, 12}\n\n\tcase C_LI:\n\t\tf.op = ADDI\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = Reg(X0)\n\t\tnewargs[2] = Simm{args[1].(Simm).Imm, true, 12}\n\n\tcase C_ADDI16SP:\n\t\tf.op = ADDI\n\t\tnewargs[0] = Reg(X2)\n\t\tnewargs[1] = Reg(X2)\n\t\tnewargs[2] = Simm{args[0].(Simm).Imm, true, 12}\n\n\tcase C_LUI:\n\t\tf.op = LUI\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = Uimm{uint32(args[1].(Simm).Imm >> 12), false}\n\n\tcase C_ANDI:\n\t\tf.op = ANDI\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = Simm{args[1].(Simm).Imm, true, 12}\n\n\tcase C_SUB:\n\t\tf.op = SUB\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_XOR:\n\t\tf.op = XOR\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_OR:\n\t\tf.op = OR\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_AND:\n\t\tf.op = AND\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_J:\n\t\tf.op = JAL\n\t\tnewargs[0] = Reg(X0)\n\t\tnewargs[1] = Simm{args[0].(Simm).Imm, true, 21}\n\n\tcase C_BEQZ:\n\t\tf.op = BEQ\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = Reg(X0)\n\t\tnewargs[2] = Simm{args[1].(Simm).Imm, true, 13}\n\n\tcase C_BNEZ:\n\t\tf.op = BNE\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = Reg(X0)\n\t\tnewargs[2] = Simm{args[1].(Simm).Imm, true, 13}\n\n\tcase C_LWSP:\n\t\tf.op = LW\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = RegOffset{Reg(X2), Simm{int32(args[1].(Uimm).Imm), true, 12}}\n\n\tcase C_JR:\n\t\tf.op = JALR\n\t\tnewargs[0] = Reg(X0)\n\t\tnewargs[1] = RegOffset{args[0].(Reg), Simm{0, true, 12}}\n\n\tcase C_MV:\n\t\tf.op = ADD\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = Reg(X0)\n\t\tnewargs[2] = args[1]\n\n\tcase C_EBREAK:\n\t\tf.op = EBREAK\n\n\tcase C_JALR:\n\t\tf.op = JALR\n\t\tnewargs[0] = Reg(X1)\n\t\tnewargs[1] = RegOffset{args[0].(Reg), Simm{0, true, 12}}\n\n\tcase C_ADD:\n\t\tf.op = ADD\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_SWSP:\n\t\tf.op = SW\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = RegOffset{Reg(X2), Simm{int32(args[1].(Uimm).Imm), true, 12}}\n\n\t// riscv64 compressed instructions\n\tcase C_LD:\n\t\tf.op = LD\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = RegOffset{args[1].(Reg), Simm{int32(args[2].(Uimm).Imm), true, 12}}\n\n\tcase C_SD:\n\t\tf.op = SD\n\t\tnewargs[0] = args[1]\n\t\tnewargs[1] = RegOffset{args[0].(Reg), Simm{int32(args[2].(Uimm).Imm), true, 12}}\n\n\tcase C_ADDIW:\n\t\tf.op = ADDIW\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = Simm{args[1].(Simm).Imm, true, 12}\n\n\tcase C_SRLI:\n\t\tf.op = SRLI\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_SRAI:\n\t\tf.op = SRAI\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_SUBW:\n\t\tf.op = SUBW\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_ADDW:\n\t\tf.op = ADDW\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_SLLI:\n\t\tf.op = SLLI\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = args[0]\n\t\tnewargs[2] = args[1]\n\n\tcase C_LDSP:\n\t\tf.op = LD\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = RegOffset{Reg(X2), Simm{int32(args[1].(Uimm).Imm), true, 12}}\n\n\tcase C_SDSP:\n\t\tf.op = SD\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = RegOffset{Reg(X2), Simm{int32(args[1].(Uimm).Imm), true, 12}}\n\n\t// riscv double precision floating point compressed instructions\n\tcase C_FLD:\n\t\tf.op = FLD\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = RegOffset{args[1].(Reg), Simm{int32(args[2].(Uimm).Imm), true, 12}}\n\n\tcase C_FSD:\n\t\tf.op = FSD\n\t\tnewargs[0] = args[1]\n\t\tnewargs[1] = RegOffset{args[0].(Reg), Simm{int32(args[2].(Uimm).Imm), true, 12}}\n\n\tcase C_FLDSP:\n\t\tf.op = FLD\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = RegOffset{Reg(X2), Simm{int32(args[1].(Uimm).Imm), true, 12}}\n\n\tcase C_FSDSP:\n\t\tf.op = FSD\n\t\tnewargs[0] = args[0]\n\t\tnewargs[1] = RegOffset{Reg(X2), Simm{int32(args[1].(Uimm).Imm), true, 12}}\n\n\tcase C_UNIMP:\n\t\tf.op = CSRRW\n\t\tnewargs[0] = Reg(X0)\n\t\tnewargs[1] = CSR(CYCLE)\n\t\tnewargs[2] = Reg(X0)\n\t}\n\treturn newargs\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/riscv64/riscv64asm/gnu.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage riscv64asm\n\nimport (\n\t\"strings\"\n)\n\n// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.\n// This form typically matches the syntax defined in the RISC-V Instruction Set Manual. See\n// https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf\nfunc GNUSyntax(inst Inst) string {\n\top := strings.ToLower(inst.Op.String())\n\tvar args []string\n\tfor _, a := range inst.Args {\n\t\tif a == nil {\n\t\t\tbreak\n\t\t}\n\t\targs = append(args, strings.ToLower(a.String()))\n\t}\n\n\tswitch inst.Op {\n\tcase ADDI, ADDIW, ANDI, ORI, SLLI, SLLIW, SRAI, SRAIW, SRLI, SRLIW, XORI:\n\t\tif inst.Op == ADDI {\n\t\t\tif inst.Args[1].(Reg) == X0 && inst.Args[0].(Reg) != X0 {\n\t\t\t\top = \"li\"\n\t\t\t\targs[1] = args[2]\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tif inst.Args[2].(Simm).Imm == 0 {\n\t\t\t\tif inst.Args[0].(Reg) == X0 && inst.Args[1].(Reg) == X0 {\n\t\t\t\t\top = \"nop\"\n\t\t\t\t\targs = nil\n\t\t\t\t} else {\n\t\t\t\t\top = \"mv\"\n\t\t\t\t\targs = args[:len(args)-1]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif inst.Op == ADDIW && inst.Args[2].(Simm).Imm == 0 {\n\t\t\top = \"sext.w\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\t\tif inst.Op == XORI && inst.Args[2].(Simm).String() == \"-1\" {\n\t\t\top = \"not\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase ADD:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"mv\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase BEQ:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"beqz\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase BGE:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"bgez\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t} else if inst.Args[0].(Reg) == X0 {\n\t\t\top = \"blez\"\n\t\t\targs[0], args[1] = args[1], args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase BLT:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"bltz\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t} else if inst.Args[0].(Reg) == X0 {\n\t\t\top = \"bgtz\"\n\t\t\targs[0], args[1] = args[1], args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase BNE:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"bnez\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase CSRRC:\n\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\top = \"csrc\"\n\t\t\targs[0], args[1] = args[1], args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase CSRRCI:\n\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\top = \"csrci\"\n\t\t\targs[0], args[1] = args[1], args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase CSRRS:\n\t\tif inst.Args[2].(Reg) == X0 {\n\t\t\tswitch inst.Args[1].(CSR) {\n\t\t\tcase FCSR:\n\t\t\t\top = \"frcsr\"\n\t\t\t\targs = args[:len(args)-2]\n\n\t\t\tcase FFLAGS:\n\t\t\t\top = \"frflags\"\n\t\t\t\targs = args[:len(args)-2]\n\n\t\t\tcase FRM:\n\t\t\t\top = \"frrm\"\n\t\t\t\targs = args[:len(args)-2]\n\n\t\t\t// rdcycleh, rdinstreth and rdtimeh are RV-32 only instructions.\n\t\t\t// So not included there.\n\t\t\tcase CYCLE:\n\t\t\t\top = \"rdcycle\"\n\t\t\t\targs = args[:len(args)-2]\n\n\t\t\tcase INSTRET:\n\t\t\t\top = \"rdinstret\"\n\t\t\t\targs = args[:len(args)-2]\n\n\t\t\tcase TIME:\n\t\t\t\top = \"rdtime\"\n\t\t\t\targs = args[:len(args)-2]\n\n\t\t\tdefault:\n\t\t\t\top = \"csrr\"\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t}\n\t\t} else if inst.Args[0].(Reg) == X0 {\n\t\t\top = \"csrs\"\n\t\t\targs[0], args[1] = args[1], args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase CSRRSI:\n\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\top = \"csrsi\"\n\t\t\targs[0], args[1] = args[1], args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase CSRRW:\n\t\tswitch inst.Args[1].(CSR) {\n\t\tcase FCSR:\n\t\t\top = \"fscsr\"\n\t\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\t\targs[0] = args[2]\n\t\t\t\targs = args[:len(args)-2]\n\t\t\t} else {\n\t\t\t\targs[1] = args[2]\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t}\n\n\t\tcase FFLAGS:\n\t\t\top = \"fsflags\"\n\t\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\t\targs[0] = args[2]\n\t\t\t\targs = args[:len(args)-2]\n\t\t\t} else {\n\t\t\t\targs[1] = args[2]\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t}\n\n\t\tcase FRM:\n\t\t\top = \"fsrm\"\n\t\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\t\targs[0] = args[2]\n\t\t\t\targs = args[:len(args)-2]\n\t\t\t} else {\n\t\t\t\targs[1] = args[2]\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t}\n\n\t\tcase CYCLE:\n\t\t\tif inst.Args[0].(Reg) == X0 && inst.Args[2].(Reg) == X0 {\n\t\t\t\top = \"unimp\"\n\t\t\t\targs = nil\n\t\t\t}\n\n\t\tdefault:\n\t\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\t\top = \"csrw\"\n\t\t\t\targs[0], args[1] = args[1], args[2]\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t}\n\t\t}\n\n\tcase CSRRWI:\n\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\top = \"csrwi\"\n\t\t\targs[0], args[1] = args[1], args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\t// When both pred and succ equals to iorw, the GNU objdump will omit them.\n\tcase FENCE:\n\t\tif inst.Args[0].(MemOrder).String() == \"iorw\" &&\n\t\t\tinst.Args[1].(MemOrder).String() == \"iorw\" {\n\t\t\targs = nil\n\t\t}\n\n\tcase FSGNJX_D:\n\t\tif inst.Args[1].(Reg) == inst.Args[2].(Reg) {\n\t\t\top = \"fabs.d\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJX_S:\n\t\tif inst.Args[1].(Reg) == inst.Args[2].(Reg) {\n\t\t\top = \"fabs.s\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJ_D:\n\t\tif inst.Args[1].(Reg) == inst.Args[2].(Reg) {\n\t\t\top = \"fmv.d\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJ_S:\n\t\tif inst.Args[1].(Reg) == inst.Args[2].(Reg) {\n\t\t\top = \"fmv.s\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJN_D:\n\t\tif inst.Args[1].(Reg) == inst.Args[2].(Reg) {\n\t\t\top = \"fneg.d\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJN_S:\n\t\tif inst.Args[1].(Reg) == inst.Args[2].(Reg) {\n\t\t\top = \"fneg.s\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase JAL:\n\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\top = \"j\"\n\t\t\targs[0] = args[1]\n\t\t\targs = args[:len(args)-1]\n\t\t} else if inst.Args[0].(Reg) == X1 {\n\t\t\top = \"jal\"\n\t\t\targs[0] = args[1]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase JALR:\n\t\tif inst.Args[0].(Reg) == X1 && inst.Args[1].(RegOffset).Ofs.Imm == 0 {\n\t\t\targs[0] = inst.Args[1].(RegOffset).OfsReg.String()\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\tif inst.Args[1].(RegOffset).OfsReg == X1 && inst.Args[1].(RegOffset).Ofs.Imm == 0 {\n\t\t\t\top = \"ret\"\n\t\t\t\targs = nil\n\t\t\t} else if inst.Args[1].(RegOffset).Ofs.Imm == 0 {\n\t\t\t\top = \"jr\"\n\t\t\t\targs[0] = inst.Args[1].(RegOffset).OfsReg.String()\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t} else {\n\t\t\t\top = \"jr\"\n\t\t\t\targs[0] = inst.Args[1].(RegOffset).String()\n\t\t\t\targs = args[:len(args)-1]\n\t\t\t}\n\t\t}\n\n\tcase SLTIU:\n\t\tif inst.Args[2].(Simm).String() == \"1\" {\n\t\t\top = \"seqz\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase SLT:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"sgtz\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t} else if inst.Args[2].(Reg) == X0 {\n\t\t\top = \"sltz\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase SLTU:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"snez\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase SUB:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"neg\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase SUBW:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"negw\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\t}\n\n\tif args != nil {\n\t\top += \" \" + strings.Join(args, \",\")\n\t}\n\treturn op\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/riscv64/riscv64asm/inst.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage riscv64asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// An Op is a RISC-V opcode.\ntype Op uint16\n\n// NOTE: The actual Op values are defined in tables.go.\nfunc (op Op) String() string {\n\tif op >= Op(len(opstr)) || opstr[op] == \"\" {\n\t\treturn fmt.Sprintf(\"Op(%d)\", op)\n\t}\n\n\treturn opstr[op]\n}\n\n// An Arg is a single instruction argument.\ntype Arg interface {\n\tString() string\n}\n\n// An Args holds the instruction arguments.\n// If an instruction has fewer than 6 arguments,\n// the final elements in the array are nil.\ntype Args [6]Arg\n\n// An Inst is a single instruction.\ntype Inst struct {\n\tOp   Op     // Opcode mnemonic.\n\tEnc  uint32 // Raw encoding bits.\n\tArgs Args   // Instruction arguments, in RISC-V mamual order.\n\tLen  int    // Length of encoded instruction in bytes\n}\n\nfunc (i Inst) String() string {\n\tvar args []string\n\tfor _, arg := range i.Args {\n\t\tif arg == nil {\n\t\t\tbreak\n\t\t}\n\t\targs = append(args, arg.String())\n\t}\n\n\tif len(args) == 0 {\n\t\treturn i.Op.String()\n\t}\n\treturn i.Op.String() + \" \" + strings.Join(args, \",\")\n}\n\n// A Reg is a single register.\n// The zero value denotes X0, not the absence of a register.\ntype Reg uint16\n\nconst (\n\t// General-purpose register\n\tX0 Reg = iota\n\tX1\n\tX2\n\tX3\n\tX4\n\tX5\n\tX6\n\tX7\n\tX8\n\tX9\n\tX10\n\tX11\n\tX12\n\tX13\n\tX14\n\tX15\n\tX16\n\tX17\n\tX18\n\tX19\n\tX20\n\tX21\n\tX22\n\tX23\n\tX24\n\tX25\n\tX26\n\tX27\n\tX28\n\tX29\n\tX30\n\tX31\n\n\t//Float point register\n\tF0\n\tF1\n\tF2\n\tF3\n\tF4\n\tF5\n\tF6\n\tF7\n\tF8\n\tF9\n\tF10\n\tF11\n\tF12\n\tF13\n\tF14\n\tF15\n\tF16\n\tF17\n\tF18\n\tF19\n\tF20\n\tF21\n\tF22\n\tF23\n\tF24\n\tF25\n\tF26\n\tF27\n\tF28\n\tF29\n\tF30\n\tF31\n)\n\nfunc (r Reg) String() string {\n\tswitch {\n\tcase r >= X0 && r <= X31:\n\t\treturn fmt.Sprintf(\"x%d\", r)\n\n\tcase r >= F0 && r <= F31:\n\t\treturn fmt.Sprintf(\"f%d\", r-F0)\n\n\tdefault:\n\t\treturn fmt.Sprintf(\"Unknown(%d)\", r)\n\t}\n}\n\n// A CSR is a single control and status register.\n// Use stringer to generate CSR match table.\n//\n//go:generate stringer -type=CSR\ntype CSR uint16\n\nconst (\n\t// Control status register\n\tUSTATUS        CSR = 0x0000\n\tFFLAGS         CSR = 0x0001\n\tFRM            CSR = 0x0002\n\tFCSR           CSR = 0x0003\n\tUIE            CSR = 0x0004\n\tUTVEC          CSR = 0x0005\n\tUTVT           CSR = 0x0007\n\tVSTART         CSR = 0x0008\n\tVXSAT          CSR = 0x0009\n\tVXRM           CSR = 0x000a\n\tVCSR           CSR = 0x000f\n\tUSCRATCH       CSR = 0x0040\n\tUEPC           CSR = 0x0041\n\tUCAUSE         CSR = 0x0042\n\tUTVAL          CSR = 0x0043\n\tUIP            CSR = 0x0044\n\tUNXTI          CSR = 0x0045\n\tUINTSTATUS     CSR = 0x0046\n\tUSCRATCHCSW    CSR = 0x0048\n\tUSCRATCHCSWL   CSR = 0x0049\n\tSSTATUS        CSR = 0x0100\n\tSEDELEG        CSR = 0x0102\n\tSIDELEG        CSR = 0x0103\n\tSIE            CSR = 0x0104\n\tSTVEC          CSR = 0x0105\n\tSCOUNTEREN     CSR = 0x0106\n\tSTVT           CSR = 0x0107\n\tSSCRATCH       CSR = 0x0140\n\tSEPC           CSR = 0x0141\n\tSCAUSE         CSR = 0x0142\n\tSTVAL          CSR = 0x0143\n\tSIP            CSR = 0x0144\n\tSNXTI          CSR = 0x0145\n\tSINTSTATUS     CSR = 0x0146\n\tSSCRATCHCSW    CSR = 0x0148\n\tSSCRATCHCSWL   CSR = 0x0149\n\tSATP           CSR = 0x0180\n\tVSSTATUS       CSR = 0x0200\n\tVSIE           CSR = 0x0204\n\tVSTVEC         CSR = 0x0205\n\tVSSCRATCH      CSR = 0x0240\n\tVSEPC          CSR = 0x0241\n\tVSCAUSE        CSR = 0x0242\n\tVSTVAL         CSR = 0x0243\n\tVSIP           CSR = 0x0244\n\tVSATP          CSR = 0x0280\n\tMSTATUS        CSR = 0x0300\n\tMISA           CSR = 0x0301\n\tMEDELEG        CSR = 0x0302\n\tMIDELEG        CSR = 0x0303\n\tMIE            CSR = 0x0304\n\tMTVEC          CSR = 0x0305\n\tMCOUNTEREN     CSR = 0x0306\n\tMTVT           CSR = 0x0307\n\tMSTATUSH       CSR = 0x0310\n\tMCOUNTINHIBIT  CSR = 0x0320\n\tMHPMEVENT3     CSR = 0x0323\n\tMHPMEVENT4     CSR = 0x0324\n\tMHPMEVENT5     CSR = 0x0325\n\tMHPMEVENT6     CSR = 0x0326\n\tMHPMEVENT7     CSR = 0x0327\n\tMHPMEVENT8     CSR = 0x0328\n\tMHPMEVENT9     CSR = 0x0329\n\tMHPMEVENT10    CSR = 0x032a\n\tMHPMEVENT11    CSR = 0x032b\n\tMHPMEVENT12    CSR = 0x032c\n\tMHPMEVENT13    CSR = 0x032d\n\tMHPMEVENT14    CSR = 0x032e\n\tMHPMEVENT15    CSR = 0x032f\n\tMHPMEVENT16    CSR = 0x0330\n\tMHPMEVENT17    CSR = 0x0331\n\tMHPMEVENT18    CSR = 0x0332\n\tMHPMEVENT19    CSR = 0x0333\n\tMHPMEVENT20    CSR = 0x0334\n\tMHPMEVENT21    CSR = 0x0335\n\tMHPMEVENT22    CSR = 0x0336\n\tMHPMEVENT23    CSR = 0x0337\n\tMHPMEVENT24    CSR = 0x0338\n\tMHPMEVENT25    CSR = 0x0339\n\tMHPMEVENT26    CSR = 0x033a\n\tMHPMEVENT27    CSR = 0x033b\n\tMHPMEVENT28    CSR = 0x033c\n\tMHPMEVENT29    CSR = 0x033d\n\tMHPMEVENT30    CSR = 0x033e\n\tMHPMEVENT31    CSR = 0x033f\n\tMSCRATCH       CSR = 0x0340\n\tMEPC           CSR = 0x0341\n\tMCAUSE         CSR = 0x0342\n\tMTVAL          CSR = 0x0343\n\tMIP            CSR = 0x0344\n\tMNXTI          CSR = 0x0345\n\tMINTSTATUS     CSR = 0x0346\n\tMSCRATCHCSW    CSR = 0x0348\n\tMSCRATCHCSWL   CSR = 0x0349\n\tMTINST         CSR = 0x034a\n\tMTVAL2         CSR = 0x034b\n\tPMPCFG0        CSR = 0x03a0\n\tPMPCFG1        CSR = 0x03a1\n\tPMPCFG2        CSR = 0x03a2\n\tPMPCFG3        CSR = 0x03a3\n\tPMPADDR0       CSR = 0x03b0\n\tPMPADDR1       CSR = 0x03b1\n\tPMPADDR2       CSR = 0x03b2\n\tPMPADDR3       CSR = 0x03b3\n\tPMPADDR4       CSR = 0x03b4\n\tPMPADDR5       CSR = 0x03b5\n\tPMPADDR6       CSR = 0x03b6\n\tPMPADDR7       CSR = 0x03b7\n\tPMPADDR8       CSR = 0x03b8\n\tPMPADDR9       CSR = 0x03b9\n\tPMPADDR10      CSR = 0x03ba\n\tPMPADDR11      CSR = 0x03bb\n\tPMPADDR12      CSR = 0x03bc\n\tPMPADDR13      CSR = 0x03bd\n\tPMPADDR14      CSR = 0x03be\n\tPMPADDR15      CSR = 0x03bf\n\tHSTATUS        CSR = 0x0600\n\tHEDELEG        CSR = 0x0602\n\tHIDELEG        CSR = 0x0603\n\tHIE            CSR = 0x0604\n\tHTIMEDELTA     CSR = 0x0605\n\tHCOUNTEREN     CSR = 0x0606\n\tHGEIE          CSR = 0x0607\n\tHTIMEDELTAH    CSR = 0x0615\n\tHTVAL          CSR = 0x0643\n\tHIP            CSR = 0x0644\n\tHVIP           CSR = 0x0645\n\tHTINST         CSR = 0x064a\n\tHGATP          CSR = 0x0680\n\tTSELECT        CSR = 0x07a0\n\tTDATA1         CSR = 0x07a1\n\tTDATA2         CSR = 0x07a2\n\tTDATA3         CSR = 0x07a3\n\tTINFO          CSR = 0x07a4\n\tTCONTROL       CSR = 0x07a5\n\tMCONTEXT       CSR = 0x07a8\n\tMNOISE         CSR = 0x07a9\n\tSCONTEXT       CSR = 0x07aa\n\tDCSR           CSR = 0x07b0\n\tDPC            CSR = 0x07b1\n\tDSCRATCH0      CSR = 0x07b2\n\tDSCRATCH1      CSR = 0x07b3\n\tMCYCLE         CSR = 0x0b00\n\tMINSTRET       CSR = 0x0b02\n\tMHPMCOUNTER3   CSR = 0x0b03\n\tMHPMCOUNTER4   CSR = 0x0b04\n\tMHPMCOUNTER5   CSR = 0x0b05\n\tMHPMCOUNTER6   CSR = 0x0b06\n\tMHPMCOUNTER7   CSR = 0x0b07\n\tMHPMCOUNTER8   CSR = 0x0b08\n\tMHPMCOUNTER9   CSR = 0x0b09\n\tMHPMCOUNTER10  CSR = 0x0b0a\n\tMHPMCOUNTER11  CSR = 0x0b0b\n\tMHPMCOUNTER12  CSR = 0x0b0c\n\tMHPMCOUNTER13  CSR = 0x0b0d\n\tMHPMCOUNTER14  CSR = 0x0b0e\n\tMHPMCOUNTER15  CSR = 0x0b0f\n\tMHPMCOUNTER16  CSR = 0x0b10\n\tMHPMCOUNTER17  CSR = 0x0b11\n\tMHPMCOUNTER18  CSR = 0x0b12\n\tMHPMCOUNTER19  CSR = 0x0b13\n\tMHPMCOUNTER20  CSR = 0x0b14\n\tMHPMCOUNTER21  CSR = 0x0b15\n\tMHPMCOUNTER22  CSR = 0x0b16\n\tMHPMCOUNTER23  CSR = 0x0b17\n\tMHPMCOUNTER24  CSR = 0x0b18\n\tMHPMCOUNTER25  CSR = 0x0b19\n\tMHPMCOUNTER26  CSR = 0x0b1a\n\tMHPMCOUNTER27  CSR = 0x0b1b\n\tMHPMCOUNTER28  CSR = 0x0b1c\n\tMHPMCOUNTER29  CSR = 0x0b1d\n\tMHPMCOUNTER30  CSR = 0x0b1e\n\tMHPMCOUNTER31  CSR = 0x0b1f\n\tMCYCLEH        CSR = 0x0b80\n\tMINSTRETH      CSR = 0x0b82\n\tMHPMCOUNTER3H  CSR = 0x0b83\n\tMHPMCOUNTER4H  CSR = 0x0b84\n\tMHPMCOUNTER5H  CSR = 0x0b85\n\tMHPMCOUNTER6H  CSR = 0x0b86\n\tMHPMCOUNTER7H  CSR = 0x0b87\n\tMHPMCOUNTER8H  CSR = 0x0b88\n\tMHPMCOUNTER9H  CSR = 0x0b89\n\tMHPMCOUNTER10H CSR = 0x0b8a\n\tMHPMCOUNTER11H CSR = 0x0b8b\n\tMHPMCOUNTER12H CSR = 0x0b8c\n\tMHPMCOUNTER13H CSR = 0x0b8d\n\tMHPMCOUNTER14H CSR = 0x0b8e\n\tMHPMCOUNTER15H CSR = 0x0b8f\n\tMHPMCOUNTER16H CSR = 0x0b90\n\tMHPMCOUNTER17H CSR = 0x0b91\n\tMHPMCOUNTER18H CSR = 0x0b92\n\tMHPMCOUNTER19H CSR = 0x0b93\n\tMHPMCOUNTER20H CSR = 0x0b94\n\tMHPMCOUNTER21H CSR = 0x0b95\n\tMHPMCOUNTER22H CSR = 0x0b96\n\tMHPMCOUNTER23H CSR = 0x0b97\n\tMHPMCOUNTER24H CSR = 0x0b98\n\tMHPMCOUNTER25H CSR = 0x0b99\n\tMHPMCOUNTER26H CSR = 0x0b9a\n\tMHPMCOUNTER27H CSR = 0x0b9b\n\tMHPMCOUNTER28H CSR = 0x0b9c\n\tMHPMCOUNTER29H CSR = 0x0b9d\n\tMHPMCOUNTER30H CSR = 0x0b9e\n\tMHPMCOUNTER31H CSR = 0x0b9f\n\tCYCLE          CSR = 0x0c00\n\tTIME           CSR = 0x0c01\n\tINSTRET        CSR = 0x0c02\n\tHPMCOUNTER3    CSR = 0x0c03\n\tHPMCOUNTER4    CSR = 0x0c04\n\tHPMCOUNTER5    CSR = 0x0c05\n\tHPMCOUNTER6    CSR = 0x0c06\n\tHPMCOUNTER7    CSR = 0x0c07\n\tHPMCOUNTER8    CSR = 0x0c08\n\tHPMCOUNTER9    CSR = 0x0c09\n\tHPMCOUNTER10   CSR = 0x0c0a\n\tHPMCOUNTER11   CSR = 0x0c0b\n\tHPMCOUNTER12   CSR = 0x0c0c\n\tHPMCOUNTER13   CSR = 0x0c0d\n\tHPMCOUNTER14   CSR = 0x0c0e\n\tHPMCOUNTER15   CSR = 0x0c0f\n\tHPMCOUNTER16   CSR = 0x0c10\n\tHPMCOUNTER17   CSR = 0x0c11\n\tHPMCOUNTER18   CSR = 0x0c12\n\tHPMCOUNTER19   CSR = 0x0c13\n\tHPMCOUNTER20   CSR = 0x0c14\n\tHPMCOUNTER21   CSR = 0x0c15\n\tHPMCOUNTER22   CSR = 0x0c16\n\tHPMCOUNTER23   CSR = 0x0c17\n\tHPMCOUNTER24   CSR = 0x0c18\n\tHPMCOUNTER25   CSR = 0x0c19\n\tHPMCOUNTER26   CSR = 0x0c1a\n\tHPMCOUNTER27   CSR = 0x0c1b\n\tHPMCOUNTER28   CSR = 0x0c1c\n\tHPMCOUNTER29   CSR = 0x0c1d\n\tHPMCOUNTER30   CSR = 0x0c1e\n\tHPMCOUNTER31   CSR = 0x0c1f\n\tVL             CSR = 0x0c20\n\tVTYPE          CSR = 0x0c21\n\tVLENB          CSR = 0x0c22\n\tCYCLEH         CSR = 0x0c80\n\tTIMEH          CSR = 0x0c81\n\tINSTRETH       CSR = 0x0c82\n\tHPMCOUNTER3H   CSR = 0x0c83\n\tHPMCOUNTER4H   CSR = 0x0c84\n\tHPMCOUNTER5H   CSR = 0x0c85\n\tHPMCOUNTER6H   CSR = 0x0c86\n\tHPMCOUNTER7H   CSR = 0x0c87\n\tHPMCOUNTER8H   CSR = 0x0c88\n\tHPMCOUNTER9H   CSR = 0x0c89\n\tHPMCOUNTER10H  CSR = 0x0c8a\n\tHPMCOUNTER11H  CSR = 0x0c8b\n\tHPMCOUNTER12H  CSR = 0x0c8c\n\tHPMCOUNTER13H  CSR = 0x0c8d\n\tHPMCOUNTER14H  CSR = 0x0c8e\n\tHPMCOUNTER15H  CSR = 0x0c8f\n\tHPMCOUNTER16H  CSR = 0x0c90\n\tHPMCOUNTER17H  CSR = 0x0c91\n\tHPMCOUNTER18H  CSR = 0x0c92\n\tHPMCOUNTER19H  CSR = 0x0c93\n\tHPMCOUNTER20H  CSR = 0x0c94\n\tHPMCOUNTER21H  CSR = 0x0c95\n\tHPMCOUNTER22H  CSR = 0x0c96\n\tHPMCOUNTER23H  CSR = 0x0c97\n\tHPMCOUNTER24H  CSR = 0x0c98\n\tHPMCOUNTER25H  CSR = 0x0c99\n\tHPMCOUNTER26H  CSR = 0x0c9a\n\tHPMCOUNTER27H  CSR = 0x0c9b\n\tHPMCOUNTER28H  CSR = 0x0c9c\n\tHPMCOUNTER29H  CSR = 0x0c9d\n\tHPMCOUNTER30H  CSR = 0x0c9e\n\tHPMCOUNTER31H  CSR = 0x0c9f\n\tHGEIP          CSR = 0x0e12\n\tMVENDORID      CSR = 0x0f11\n\tMARCHID        CSR = 0x0f12\n\tMIMPID         CSR = 0x0f13\n\tMHARTID        CSR = 0x0f14\n\tMENTROPY       CSR = 0x0f15\n)\n\n// An Uimm is an unsigned immediate number\ntype Uimm struct {\n\tImm     uint32 // 32-bit unsigned integer\n\tDecimal bool   // Print format of the immediate, either decimal or hexadecimal\n}\n\nfunc (ui Uimm) String() string {\n\tif ui.Decimal {\n\t\treturn fmt.Sprintf(\"%d\", ui.Imm)\n\t}\n\treturn fmt.Sprintf(\"%#x\", ui.Imm)\n}\n\n// A Simm is a signed immediate number\ntype Simm struct {\n\tImm     int32 // 32-bit signed integer\n\tDecimal bool  // Print format of the immediate, either decimal or hexadecimal\n\tWidth   uint8 // Actual width of the Simm\n}\n\nfunc (si Simm) String() string {\n\tif si.Decimal {\n\t\treturn fmt.Sprintf(\"%d\", si.Imm)\n\t}\n\treturn fmt.Sprintf(\"%#x\", si.Imm)\n}\n\n// An AmoReg is an atomic address register used in AMO instructions\ntype AmoReg struct {\n\treg Reg // Avoid promoted String method\n}\n\nfunc (amoReg AmoReg) String() string {\n\treturn fmt.Sprintf(\"(%s)\", amoReg.reg)\n}\n\n// A RegOffset is a register with offset value\ntype RegOffset struct {\n\tOfsReg Reg\n\tOfs    Simm\n}\n\nfunc (regofs RegOffset) String() string {\n\treturn fmt.Sprintf(\"%s(%s)\", regofs.Ofs, regofs.OfsReg)\n}\n\n// A MemOrder is a memory order hint in fence instruction\ntype MemOrder uint8\n\nfunc (memOrder MemOrder) String() string {\n\tvar str string\n\tif memOrder<<7>>7 == 1 {\n\t\tstr += \"i\"\n\t}\n\tif memOrder>>1<<7>>7 == 1 {\n\t\tstr += \"o\"\n\t}\n\tif memOrder>>2<<7>>7 == 1 {\n\t\tstr += \"r\"\n\t}\n\tif memOrder>>3<<7>>7 == 1 {\n\t\tstr += \"w\"\n\t}\n\treturn str\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/riscv64/riscv64asm/plan9x.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage riscv64asm\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"strconv\"\n\t\"strings\"\n)\n\n// GoSyntax returns the Go assembler syntax for the instruction.\n// The syntax was originally defined by Plan 9.\n// The pc is the program counter of the instruction, used for\n// expanding PC-relative addresses into absolute ones.\n// The symname function queries the symbol table for the program\n// being disassembled. Given a target address it returns the name\n// and base address of the symbol containing the target, if any;\n// otherwise it returns \"\", 0.\n// The reader text should read from the text segment using text addresses\n// as offsets; it is used to display pc-relative loads as constant loads.\nfunc GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64), text io.ReaderAt) string {\n\tif symname == nil {\n\t\tsymname = func(uint64) (string, uint64) { return \"\", 0 }\n\t}\n\n\tvar args []string\n\tfor _, a := range inst.Args {\n\t\tif a == nil {\n\t\t\tbreak\n\t\t}\n\t\targs = append(args, plan9Arg(&inst, pc, symname, a))\n\t}\n\n\top := inst.Op.String()\n\n\tswitch inst.Op {\n\n\tcase AMOADD_D, AMOADD_D_AQ, AMOADD_D_RL, AMOADD_D_AQRL, AMOADD_W, AMOADD_W_AQ,\n\t\tAMOADD_W_RL, AMOADD_W_AQRL, AMOAND_D, AMOAND_D_AQ, AMOAND_D_RL, AMOAND_D_AQRL,\n\t\tAMOAND_W, AMOAND_W_AQ, AMOAND_W_RL, AMOAND_W_AQRL, AMOMAXU_D, AMOMAXU_D_AQ,\n\t\tAMOMAXU_D_RL, AMOMAXU_D_AQRL, AMOMAXU_W, AMOMAXU_W_AQ, AMOMAXU_W_RL, AMOMAXU_W_AQRL,\n\t\tAMOMAX_D, AMOMAX_D_AQ, AMOMAX_D_RL, AMOMAX_D_AQRL, AMOMAX_W, AMOMAX_W_AQ, AMOMAX_W_RL,\n\t\tAMOMAX_W_AQRL, AMOMINU_D, AMOMINU_D_AQ, AMOMINU_D_RL, AMOMINU_D_AQRL, AMOMINU_W,\n\t\tAMOMINU_W_AQ, AMOMINU_W_RL, AMOMINU_W_AQRL, AMOMIN_D, AMOMIN_D_AQ, AMOMIN_D_RL,\n\t\tAMOMIN_D_AQRL, AMOMIN_W, AMOMIN_W_AQ, AMOMIN_W_RL, AMOMIN_W_AQRL, AMOOR_D, AMOOR_D_AQ,\n\t\tAMOOR_D_RL, AMOOR_D_AQRL, AMOOR_W, AMOOR_W_AQ, AMOOR_W_RL, AMOOR_W_AQRL, AMOSWAP_D,\n\t\tAMOSWAP_D_AQ, AMOSWAP_D_RL, AMOSWAP_D_AQRL, AMOSWAP_W, AMOSWAP_W_AQ, AMOSWAP_W_RL,\n\t\tAMOSWAP_W_AQRL, AMOXOR_D, AMOXOR_D_AQ, AMOXOR_D_RL, AMOXOR_D_AQRL, AMOXOR_W,\n\t\tAMOXOR_W_AQ, AMOXOR_W_RL, AMOXOR_W_AQRL, SC_D, SC_D_AQ, SC_D_RL, SC_D_AQRL,\n\t\tSC_W, SC_W_AQ, SC_W_RL, SC_W_AQRL:\n\t\t// Atomic instructions have special operand order.\n\t\targs[2], args[1] = args[1], args[2]\n\n\tcase ADDI:\n\t\tif inst.Args[2].(Simm).Imm == 0 {\n\t\t\top = \"MOV\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase ADDIW:\n\t\tif inst.Args[2].(Simm).Imm == 0 {\n\t\t\top = \"MOVW\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase ANDI:\n\t\tif inst.Args[2].(Simm).Imm == 255 {\n\t\t\top = \"MOVBU\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase BEQ:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"BEQZ\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\t\tfor i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {\n\t\t\targs[i], args[j] = args[j], args[i]\n\t\t}\n\n\tcase BGE:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"BGEZ\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\t\tfor i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {\n\t\t\targs[i], args[j] = args[j], args[i]\n\t\t}\n\n\tcase BLT:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"BLTZ\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\t\tfor i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {\n\t\t\targs[i], args[j] = args[j], args[i]\n\t\t}\n\n\tcase BNE:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"BNEZ\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\t\tfor i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {\n\t\t\targs[i], args[j] = args[j], args[i]\n\t\t}\n\n\tcase BLTU, BGEU:\n\t\tfor i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {\n\t\t\targs[i], args[j] = args[j], args[i]\n\t\t}\n\n\tcase CSRRW:\n\t\tswitch inst.Args[1].(CSR) {\n\t\tcase FCSR:\n\t\t\top = \"FSCSR\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\tcase FFLAGS:\n\t\t\top = \"FSFLAGS\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\tcase FRM:\n\t\t\top = \"FSRM\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\tcase CYCLE:\n\t\t\tif inst.Args[0].(Reg) == X0 && inst.Args[2].(Reg) == X0 {\n\t\t\t\top = \"UNIMP\"\n\t\t\t\targs = nil\n\t\t\t}\n\t\t}\n\n\tcase CSRRS:\n\t\tif inst.Args[2].(Reg) == X0 {\n\t\t\tswitch inst.Args[1].(CSR) {\n\t\t\tcase FCSR:\n\t\t\t\top = \"FRCSR\"\n\t\t\t\targs = args[:len(args)-2]\n\t\t\tcase FFLAGS:\n\t\t\t\top = \"FRFLAGS\"\n\t\t\t\targs = args[:len(args)-2]\n\t\t\tcase FRM:\n\t\t\t\top = \"FRRM\"\n\t\t\t\targs = args[:len(args)-2]\n\t\t\tcase CYCLE:\n\t\t\t\top = \"RDCYCLE\"\n\t\t\t\targs = args[:len(args)-2]\n\t\t\tcase CYCLEH:\n\t\t\t\top = \"RDCYCLEH\"\n\t\t\t\targs = args[:len(args)-2]\n\t\t\tcase INSTRET:\n\t\t\t\top = \"RDINSTRET\"\n\t\t\t\targs = args[:len(args)-2]\n\t\t\tcase INSTRETH:\n\t\t\t\top = \"RDINSTRETH\"\n\t\t\t\targs = args[:len(args)-2]\n\t\t\tcase TIME:\n\t\t\t\top = \"RDTIME\"\n\t\t\t\targs = args[:len(args)-2]\n\t\t\tcase TIMEH:\n\t\t\t\top = \"RDTIMEH\"\n\t\t\t\targs = args[:len(args)-2]\n\t\t\t}\n\t\t}\n\n\t// Fence instruction in plan9 doesn't have any operands.\n\tcase FENCE:\n\t\targs = nil\n\n\tcase FMADD_D, FMADD_H, FMADD_Q, FMADD_S, FMSUB_D, FMSUB_H,\n\t\tFMSUB_Q, FMSUB_S, FNMADD_D, FNMADD_H, FNMADD_Q, FNMADD_S,\n\t\tFNMSUB_D, FNMSUB_H, FNMSUB_Q, FNMSUB_S:\n\t\targs[1], args[3] = args[3], args[1]\n\n\tcase FSGNJ_S:\n\t\tif inst.Args[2] == inst.Args[1] {\n\t\t\top = \"MOVF\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJ_D:\n\t\tif inst.Args[2] == inst.Args[1] {\n\t\t\top = \"MOVD\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJX_S:\n\t\tif inst.Args[2] == inst.Args[1] {\n\t\t\top = \"FABSS\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJX_D:\n\t\tif inst.Args[2] == inst.Args[1] {\n\t\t\top = \"FABSD\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJN_S:\n\t\tif inst.Args[2] == inst.Args[1] {\n\t\t\top = \"FNEGS\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase FSGNJN_D:\n\t\tif inst.Args[2] == inst.Args[1] {\n\t\t\top = \"FNESD\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase LD, SD:\n\t\top = \"MOV\"\n\t\tif inst.Op == SD {\n\t\t\targs[0], args[1] = args[1], args[0]\n\t\t}\n\n\tcase LB, SB:\n\t\top = \"MOVB\"\n\t\tif inst.Op == SB {\n\t\t\targs[0], args[1] = args[1], args[0]\n\t\t}\n\n\tcase LH, SH:\n\t\top = \"MOVH\"\n\t\tif inst.Op == SH {\n\t\t\targs[0], args[1] = args[1], args[0]\n\t\t}\n\n\tcase LW, SW:\n\t\top = \"MOVW\"\n\t\tif inst.Op == SW {\n\t\t\targs[0], args[1] = args[1], args[0]\n\t\t}\n\n\tcase LBU:\n\t\top = \"MOVBU\"\n\n\tcase LHU:\n\t\top = \"MOVHU\"\n\n\tcase LWU:\n\t\top = \"MOVWU\"\n\n\tcase FLW, FSW:\n\t\top = \"MOVF\"\n\t\tif inst.Op == FLW {\n\t\t\targs[0], args[1] = args[1], args[0]\n\t\t}\n\n\tcase FLD, FSD:\n\t\top = \"MOVD\"\n\t\tif inst.Op == FLD {\n\t\t\targs[0], args[1] = args[1], args[0]\n\t\t}\n\n\tcase SUB:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"NEG\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase XORI:\n\t\tif inst.Args[2].(Simm).String() == \"-1\" {\n\t\t\top = \"NOT\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase SLTIU:\n\t\tif inst.Args[2].(Simm).Imm == 1 {\n\t\t\top = \"SEQZ\"\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase SLTU:\n\t\tif inst.Args[1].(Reg) == X0 {\n\t\t\top = \"SNEZ\"\n\t\t\targs[1] = args[2]\n\t\t\targs = args[:len(args)-1]\n\t\t}\n\n\tcase JAL:\n\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\top = \"JMP\"\n\t\t\targs[0] = args[1]\n\t\t\targs = args[:len(args)-1]\n\t\t} else if inst.Args[0].(Reg) == X1 {\n\t\t\top = \"CALL\"\n\t\t\targs[0] = args[1]\n\t\t\targs = args[:len(args)-1]\n\t\t} else {\n\t\t\targs[0], args[1] = args[1], args[0]\n\t\t}\n\n\tcase JALR:\n\t\tif inst.Args[0].(Reg) == X0 {\n\t\t\tif inst.Args[1].(RegOffset).OfsReg == X1 && inst.Args[1].(RegOffset).Ofs.Imm == 0 {\n\t\t\t\top = \"RET\"\n\t\t\t\targs = nil\n\t\t\t\tbreak\n\t\t\t}\n\t\t\top = \"JMP\"\n\t\t\targs[0] = args[1]\n\t\t\targs = args[:len(args)-1]\n\t\t} else if inst.Args[0].(Reg) == X1 {\n\t\t\top = \"CALL\"\n\t\t\targs[0] = args[1]\n\t\t\targs = args[:len(args)-1]\n\t\t} else {\n\t\t\targs[0], args[1] = args[1], args[0]\n\t\t}\n\t}\n\n\t// Reverse args, placing dest last.\n\tfor i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {\n\t\targs[i], args[j] = args[j], args[i]\n\t}\n\n\t// Change to plan9 opcode format\n\t// Atomic instructions do not have reorder suffix, so remove them\n\top = strings.Replace(op, \".AQRL\", \"\", -1)\n\top = strings.Replace(op, \".AQ\", \"\", -1)\n\top = strings.Replace(op, \".RL\", \"\", -1)\n\top = strings.Replace(op, \".\", \"\", -1)\n\n\tif args != nil {\n\t\top += \" \" + strings.Join(args, \", \")\n\t}\n\n\treturn op\n}\n\nfunc plan9Arg(inst *Inst, pc uint64, symname func(uint64) (string, uint64), arg Arg) string {\n\tswitch a := arg.(type) {\n\tcase Uimm:\n\t\treturn fmt.Sprintf(\"$%d\", uint32(a.Imm))\n\n\tcase Simm:\n\t\timm, _ := strconv.Atoi(a.String())\n\t\tif a.Width == 13 || a.Width == 21 {\n\t\t\taddr := int64(pc) + int64(imm)\n\t\t\tif s, base := symname(uint64(addr)); s != \"\" && uint64(addr) == base {\n\t\t\t\treturn fmt.Sprintf(\"%s(SB)\", s)\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"%d(PC)\", imm/4)\n\t\t}\n\t\treturn fmt.Sprintf(\"$%d\", int32(imm))\n\n\tcase Reg:\n\t\tif a <= 31 {\n\t\t\treturn fmt.Sprintf(\"X%d\", a)\n\t\t} else {\n\t\t\treturn fmt.Sprintf(\"F%d\", a-32)\n\t\t}\n\n\tcase RegOffset:\n\t\tif a.Ofs.Imm == 0 {\n\t\t\treturn fmt.Sprintf(\"(X%d)\", a.OfsReg)\n\t\t} else {\n\t\t\treturn fmt.Sprintf(\"%s(X%d)\", a.Ofs.String(), a.OfsReg)\n\t\t}\n\n\tcase AmoReg:\n\t\treturn fmt.Sprintf(\"(X%d)\", a.reg)\n\n\tdefault:\n\t\treturn strings.ToUpper(arg.String())\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/riscv64/riscv64asm/tables.go",
    "content": "// Code generated by riscv64spec riscv-opcodes\n// DO NOT EDIT\n\n// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage riscv64asm\n\nconst (\n\t_ Op = iota\n\tADD\n\tADDI\n\tADDIW\n\tADDW\n\tADD_UW\n\tAMOADD_D\n\tAMOADD_D_AQ\n\tAMOADD_D_AQRL\n\tAMOADD_D_RL\n\tAMOADD_W\n\tAMOADD_W_AQ\n\tAMOADD_W_AQRL\n\tAMOADD_W_RL\n\tAMOAND_D\n\tAMOAND_D_AQ\n\tAMOAND_D_AQRL\n\tAMOAND_D_RL\n\tAMOAND_W\n\tAMOAND_W_AQ\n\tAMOAND_W_AQRL\n\tAMOAND_W_RL\n\tAMOMAXU_D\n\tAMOMAXU_D_AQ\n\tAMOMAXU_D_AQRL\n\tAMOMAXU_D_RL\n\tAMOMAXU_W\n\tAMOMAXU_W_AQ\n\tAMOMAXU_W_AQRL\n\tAMOMAXU_W_RL\n\tAMOMAX_D\n\tAMOMAX_D_AQ\n\tAMOMAX_D_AQRL\n\tAMOMAX_D_RL\n\tAMOMAX_W\n\tAMOMAX_W_AQ\n\tAMOMAX_W_AQRL\n\tAMOMAX_W_RL\n\tAMOMINU_D\n\tAMOMINU_D_AQ\n\tAMOMINU_D_AQRL\n\tAMOMINU_D_RL\n\tAMOMINU_W\n\tAMOMINU_W_AQ\n\tAMOMINU_W_AQRL\n\tAMOMINU_W_RL\n\tAMOMIN_D\n\tAMOMIN_D_AQ\n\tAMOMIN_D_AQRL\n\tAMOMIN_D_RL\n\tAMOMIN_W\n\tAMOMIN_W_AQ\n\tAMOMIN_W_AQRL\n\tAMOMIN_W_RL\n\tAMOOR_D\n\tAMOOR_D_AQ\n\tAMOOR_D_AQRL\n\tAMOOR_D_RL\n\tAMOOR_W\n\tAMOOR_W_AQ\n\tAMOOR_W_AQRL\n\tAMOOR_W_RL\n\tAMOSWAP_D\n\tAMOSWAP_D_AQ\n\tAMOSWAP_D_AQRL\n\tAMOSWAP_D_RL\n\tAMOSWAP_W\n\tAMOSWAP_W_AQ\n\tAMOSWAP_W_AQRL\n\tAMOSWAP_W_RL\n\tAMOXOR_D\n\tAMOXOR_D_AQ\n\tAMOXOR_D_AQRL\n\tAMOXOR_D_RL\n\tAMOXOR_W\n\tAMOXOR_W_AQ\n\tAMOXOR_W_AQRL\n\tAMOXOR_W_RL\n\tAND\n\tANDI\n\tANDN\n\tAUIPC\n\tBCLR\n\tBCLRI\n\tBEQ\n\tBEXT\n\tBEXTI\n\tBGE\n\tBGEU\n\tBINV\n\tBINVI\n\tBLT\n\tBLTU\n\tBNE\n\tBSET\n\tBSETI\n\tCLZ\n\tCLZW\n\tCPOP\n\tCPOPW\n\tCSRRC\n\tCSRRCI\n\tCSRRS\n\tCSRRSI\n\tCSRRW\n\tCSRRWI\n\tCTZ\n\tCTZW\n\tC_ADD\n\tC_ADDI\n\tC_ADDI16SP\n\tC_ADDI4SPN\n\tC_ADDIW\n\tC_ADDW\n\tC_AND\n\tC_ANDI\n\tC_BEQZ\n\tC_BNEZ\n\tC_EBREAK\n\tC_FLD\n\tC_FLDSP\n\tC_FSD\n\tC_FSDSP\n\tC_J\n\tC_JALR\n\tC_JR\n\tC_LD\n\tC_LDSP\n\tC_LI\n\tC_LUI\n\tC_LW\n\tC_LWSP\n\tC_MV\n\tC_NOP\n\tC_OR\n\tC_SD\n\tC_SDSP\n\tC_SLLI\n\tC_SRAI\n\tC_SRLI\n\tC_SUB\n\tC_SUBW\n\tC_SW\n\tC_SWSP\n\tC_UNIMP\n\tC_XOR\n\tDIV\n\tDIVU\n\tDIVUW\n\tDIVW\n\tEBREAK\n\tECALL\n\tFADD_D\n\tFADD_H\n\tFADD_Q\n\tFADD_S\n\tFCLASS_D\n\tFCLASS_H\n\tFCLASS_Q\n\tFCLASS_S\n\tFCVT_D_L\n\tFCVT_D_LU\n\tFCVT_D_Q\n\tFCVT_D_S\n\tFCVT_D_W\n\tFCVT_D_WU\n\tFCVT_H_L\n\tFCVT_H_LU\n\tFCVT_H_S\n\tFCVT_H_W\n\tFCVT_H_WU\n\tFCVT_LU_D\n\tFCVT_LU_H\n\tFCVT_LU_Q\n\tFCVT_LU_S\n\tFCVT_L_D\n\tFCVT_L_H\n\tFCVT_L_Q\n\tFCVT_L_S\n\tFCVT_Q_D\n\tFCVT_Q_L\n\tFCVT_Q_LU\n\tFCVT_Q_S\n\tFCVT_Q_W\n\tFCVT_Q_WU\n\tFCVT_S_D\n\tFCVT_S_H\n\tFCVT_S_L\n\tFCVT_S_LU\n\tFCVT_S_Q\n\tFCVT_S_W\n\tFCVT_S_WU\n\tFCVT_WU_D\n\tFCVT_WU_H\n\tFCVT_WU_Q\n\tFCVT_WU_S\n\tFCVT_W_D\n\tFCVT_W_H\n\tFCVT_W_Q\n\tFCVT_W_S\n\tFDIV_D\n\tFDIV_H\n\tFDIV_Q\n\tFDIV_S\n\tFENCE\n\tFENCE_I\n\tFEQ_D\n\tFEQ_H\n\tFEQ_Q\n\tFEQ_S\n\tFLD\n\tFLE_D\n\tFLE_H\n\tFLE_Q\n\tFLE_S\n\tFLH\n\tFLQ\n\tFLT_D\n\tFLT_H\n\tFLT_Q\n\tFLT_S\n\tFLW\n\tFMADD_D\n\tFMADD_H\n\tFMADD_Q\n\tFMADD_S\n\tFMAX_D\n\tFMAX_H\n\tFMAX_Q\n\tFMAX_S\n\tFMIN_D\n\tFMIN_H\n\tFMIN_Q\n\tFMIN_S\n\tFMSUB_D\n\tFMSUB_H\n\tFMSUB_Q\n\tFMSUB_S\n\tFMUL_D\n\tFMUL_H\n\tFMUL_Q\n\tFMUL_S\n\tFMV_D_X\n\tFMV_H_X\n\tFMV_W_X\n\tFMV_X_D\n\tFMV_X_H\n\tFMV_X_W\n\tFNMADD_D\n\tFNMADD_H\n\tFNMADD_Q\n\tFNMADD_S\n\tFNMSUB_D\n\tFNMSUB_H\n\tFNMSUB_Q\n\tFNMSUB_S\n\tFSD\n\tFSGNJN_D\n\tFSGNJN_H\n\tFSGNJN_Q\n\tFSGNJN_S\n\tFSGNJX_D\n\tFSGNJX_H\n\tFSGNJX_Q\n\tFSGNJX_S\n\tFSGNJ_D\n\tFSGNJ_H\n\tFSGNJ_Q\n\tFSGNJ_S\n\tFSH\n\tFSQ\n\tFSQRT_D\n\tFSQRT_H\n\tFSQRT_Q\n\tFSQRT_S\n\tFSUB_D\n\tFSUB_H\n\tFSUB_Q\n\tFSUB_S\n\tFSW\n\tJAL\n\tJALR\n\tLB\n\tLBU\n\tLD\n\tLH\n\tLHU\n\tLR_D\n\tLR_D_AQ\n\tLR_D_AQRL\n\tLR_D_RL\n\tLR_W\n\tLR_W_AQ\n\tLR_W_AQRL\n\tLR_W_RL\n\tLUI\n\tLW\n\tLWU\n\tMAX\n\tMAXU\n\tMIN\n\tMINU\n\tMUL\n\tMULH\n\tMULHSU\n\tMULHU\n\tMULW\n\tOR\n\tORC_B\n\tORI\n\tORN\n\tREM\n\tREMU\n\tREMUW\n\tREMW\n\tREV8\n\tROL\n\tROLW\n\tROR\n\tRORI\n\tRORIW\n\tRORW\n\tSB\n\tSC_D\n\tSC_D_AQ\n\tSC_D_AQRL\n\tSC_D_RL\n\tSC_W\n\tSC_W_AQ\n\tSC_W_AQRL\n\tSC_W_RL\n\tSD\n\tSEXT_B\n\tSEXT_H\n\tSH\n\tSH1ADD\n\tSH1ADD_UW\n\tSH2ADD\n\tSH2ADD_UW\n\tSH3ADD\n\tSH3ADD_UW\n\tSLL\n\tSLLI\n\tSLLIW\n\tSLLI_UW\n\tSLLW\n\tSLT\n\tSLTI\n\tSLTIU\n\tSLTU\n\tSRA\n\tSRAI\n\tSRAIW\n\tSRAW\n\tSRL\n\tSRLI\n\tSRLIW\n\tSRLW\n\tSUB\n\tSUBW\n\tSW\n\tXNOR\n\tXOR\n\tXORI\n\tZEXT_H\n)\n\nvar opstr = [...]string{\n\tADD:            \"ADD\",\n\tADDI:           \"ADDI\",\n\tADDIW:          \"ADDIW\",\n\tADDW:           \"ADDW\",\n\tADD_UW:         \"ADD.UW\",\n\tAMOADD_D:       \"AMOADD.D\",\n\tAMOADD_D_AQ:    \"AMOADD.D.AQ\",\n\tAMOADD_D_AQRL:  \"AMOADD.D.AQRL\",\n\tAMOADD_D_RL:    \"AMOADD.D.RL\",\n\tAMOADD_W:       \"AMOADD.W\",\n\tAMOADD_W_AQ:    \"AMOADD.W.AQ\",\n\tAMOADD_W_AQRL:  \"AMOADD.W.AQRL\",\n\tAMOADD_W_RL:    \"AMOADD.W.RL\",\n\tAMOAND_D:       \"AMOAND.D\",\n\tAMOAND_D_AQ:    \"AMOAND.D.AQ\",\n\tAMOAND_D_AQRL:  \"AMOAND.D.AQRL\",\n\tAMOAND_D_RL:    \"AMOAND.D.RL\",\n\tAMOAND_W:       \"AMOAND.W\",\n\tAMOAND_W_AQ:    \"AMOAND.W.AQ\",\n\tAMOAND_W_AQRL:  \"AMOAND.W.AQRL\",\n\tAMOAND_W_RL:    \"AMOAND.W.RL\",\n\tAMOMAXU_D:      \"AMOMAXU.D\",\n\tAMOMAXU_D_AQ:   \"AMOMAXU.D.AQ\",\n\tAMOMAXU_D_AQRL: \"AMOMAXU.D.AQRL\",\n\tAMOMAXU_D_RL:   \"AMOMAXU.D.RL\",\n\tAMOMAXU_W:      \"AMOMAXU.W\",\n\tAMOMAXU_W_AQ:   \"AMOMAXU.W.AQ\",\n\tAMOMAXU_W_AQRL: \"AMOMAXU.W.AQRL\",\n\tAMOMAXU_W_RL:   \"AMOMAXU.W.RL\",\n\tAMOMAX_D:       \"AMOMAX.D\",\n\tAMOMAX_D_AQ:    \"AMOMAX.D.AQ\",\n\tAMOMAX_D_AQRL:  \"AMOMAX.D.AQRL\",\n\tAMOMAX_D_RL:    \"AMOMAX.D.RL\",\n\tAMOMAX_W:       \"AMOMAX.W\",\n\tAMOMAX_W_AQ:    \"AMOMAX.W.AQ\",\n\tAMOMAX_W_AQRL:  \"AMOMAX.W.AQRL\",\n\tAMOMAX_W_RL:    \"AMOMAX.W.RL\",\n\tAMOMINU_D:      \"AMOMINU.D\",\n\tAMOMINU_D_AQ:   \"AMOMINU.D.AQ\",\n\tAMOMINU_D_AQRL: \"AMOMINU.D.AQRL\",\n\tAMOMINU_D_RL:   \"AMOMINU.D.RL\",\n\tAMOMINU_W:      \"AMOMINU.W\",\n\tAMOMINU_W_AQ:   \"AMOMINU.W.AQ\",\n\tAMOMINU_W_AQRL: \"AMOMINU.W.AQRL\",\n\tAMOMINU_W_RL:   \"AMOMINU.W.RL\",\n\tAMOMIN_D:       \"AMOMIN.D\",\n\tAMOMIN_D_AQ:    \"AMOMIN.D.AQ\",\n\tAMOMIN_D_AQRL:  \"AMOMIN.D.AQRL\",\n\tAMOMIN_D_RL:    \"AMOMIN.D.RL\",\n\tAMOMIN_W:       \"AMOMIN.W\",\n\tAMOMIN_W_AQ:    \"AMOMIN.W.AQ\",\n\tAMOMIN_W_AQRL:  \"AMOMIN.W.AQRL\",\n\tAMOMIN_W_RL:    \"AMOMIN.W.RL\",\n\tAMOOR_D:        \"AMOOR.D\",\n\tAMOOR_D_AQ:     \"AMOOR.D.AQ\",\n\tAMOOR_D_AQRL:   \"AMOOR.D.AQRL\",\n\tAMOOR_D_RL:     \"AMOOR.D.RL\",\n\tAMOOR_W:        \"AMOOR.W\",\n\tAMOOR_W_AQ:     \"AMOOR.W.AQ\",\n\tAMOOR_W_AQRL:   \"AMOOR.W.AQRL\",\n\tAMOOR_W_RL:     \"AMOOR.W.RL\",\n\tAMOSWAP_D:      \"AMOSWAP.D\",\n\tAMOSWAP_D_AQ:   \"AMOSWAP.D.AQ\",\n\tAMOSWAP_D_AQRL: \"AMOSWAP.D.AQRL\",\n\tAMOSWAP_D_RL:   \"AMOSWAP.D.RL\",\n\tAMOSWAP_W:      \"AMOSWAP.W\",\n\tAMOSWAP_W_AQ:   \"AMOSWAP.W.AQ\",\n\tAMOSWAP_W_AQRL: \"AMOSWAP.W.AQRL\",\n\tAMOSWAP_W_RL:   \"AMOSWAP.W.RL\",\n\tAMOXOR_D:       \"AMOXOR.D\",\n\tAMOXOR_D_AQ:    \"AMOXOR.D.AQ\",\n\tAMOXOR_D_AQRL:  \"AMOXOR.D.AQRL\",\n\tAMOXOR_D_RL:    \"AMOXOR.D.RL\",\n\tAMOXOR_W:       \"AMOXOR.W\",\n\tAMOXOR_W_AQ:    \"AMOXOR.W.AQ\",\n\tAMOXOR_W_AQRL:  \"AMOXOR.W.AQRL\",\n\tAMOXOR_W_RL:    \"AMOXOR.W.RL\",\n\tAND:            \"AND\",\n\tANDI:           \"ANDI\",\n\tANDN:           \"ANDN\",\n\tAUIPC:          \"AUIPC\",\n\tBCLR:           \"BCLR\",\n\tBCLRI:          \"BCLRI\",\n\tBEQ:            \"BEQ\",\n\tBEXT:           \"BEXT\",\n\tBEXTI:          \"BEXTI\",\n\tBGE:            \"BGE\",\n\tBGEU:           \"BGEU\",\n\tBINV:           \"BINV\",\n\tBINVI:          \"BINVI\",\n\tBLT:            \"BLT\",\n\tBLTU:           \"BLTU\",\n\tBNE:            \"BNE\",\n\tBSET:           \"BSET\",\n\tBSETI:          \"BSETI\",\n\tCLZ:            \"CLZ\",\n\tCLZW:           \"CLZW\",\n\tCPOP:           \"CPOP\",\n\tCPOPW:          \"CPOPW\",\n\tCSRRC:          \"CSRRC\",\n\tCSRRCI:         \"CSRRCI\",\n\tCSRRS:          \"CSRRS\",\n\tCSRRSI:         \"CSRRSI\",\n\tCSRRW:          \"CSRRW\",\n\tCSRRWI:         \"CSRRWI\",\n\tCTZ:            \"CTZ\",\n\tCTZW:           \"CTZW\",\n\tC_ADD:          \"C.ADD\",\n\tC_ADDI:         \"C.ADDI\",\n\tC_ADDI16SP:     \"C.ADDI16SP\",\n\tC_ADDI4SPN:     \"C.ADDI4SPN\",\n\tC_ADDIW:        \"C.ADDIW\",\n\tC_ADDW:         \"C.ADDW\",\n\tC_AND:          \"C.AND\",\n\tC_ANDI:         \"C.ANDI\",\n\tC_BEQZ:         \"C.BEQZ\",\n\tC_BNEZ:         \"C.BNEZ\",\n\tC_EBREAK:       \"C.EBREAK\",\n\tC_FLD:          \"C.FLD\",\n\tC_FLDSP:        \"C.FLDSP\",\n\tC_FSD:          \"C.FSD\",\n\tC_FSDSP:        \"C.FSDSP\",\n\tC_J:            \"C.J\",\n\tC_JALR:         \"C.JALR\",\n\tC_JR:           \"C.JR\",\n\tC_LD:           \"C.LD\",\n\tC_LDSP:         \"C.LDSP\",\n\tC_LI:           \"C.LI\",\n\tC_LUI:          \"C.LUI\",\n\tC_LW:           \"C.LW\",\n\tC_LWSP:         \"C.LWSP\",\n\tC_MV:           \"C.MV\",\n\tC_NOP:          \"C.NOP\",\n\tC_OR:           \"C.OR\",\n\tC_SD:           \"C.SD\",\n\tC_SDSP:         \"C.SDSP\",\n\tC_SLLI:         \"C.SLLI\",\n\tC_SRAI:         \"C.SRAI\",\n\tC_SRLI:         \"C.SRLI\",\n\tC_SUB:          \"C.SUB\",\n\tC_SUBW:         \"C.SUBW\",\n\tC_SW:           \"C.SW\",\n\tC_SWSP:         \"C.SWSP\",\n\tC_UNIMP:        \"C.UNIMP\",\n\tC_XOR:          \"C.XOR\",\n\tDIV:            \"DIV\",\n\tDIVU:           \"DIVU\",\n\tDIVUW:          \"DIVUW\",\n\tDIVW:           \"DIVW\",\n\tEBREAK:         \"EBREAK\",\n\tECALL:          \"ECALL\",\n\tFADD_D:         \"FADD.D\",\n\tFADD_H:         \"FADD.H\",\n\tFADD_Q:         \"FADD.Q\",\n\tFADD_S:         \"FADD.S\",\n\tFCLASS_D:       \"FCLASS.D\",\n\tFCLASS_H:       \"FCLASS.H\",\n\tFCLASS_Q:       \"FCLASS.Q\",\n\tFCLASS_S:       \"FCLASS.S\",\n\tFCVT_D_L:       \"FCVT.D.L\",\n\tFCVT_D_LU:      \"FCVT.D.LU\",\n\tFCVT_D_Q:       \"FCVT.D.Q\",\n\tFCVT_D_S:       \"FCVT.D.S\",\n\tFCVT_D_W:       \"FCVT.D.W\",\n\tFCVT_D_WU:      \"FCVT.D.WU\",\n\tFCVT_H_L:       \"FCVT.H.L\",\n\tFCVT_H_LU:      \"FCVT.H.LU\",\n\tFCVT_H_S:       \"FCVT.H.S\",\n\tFCVT_H_W:       \"FCVT.H.W\",\n\tFCVT_H_WU:      \"FCVT.H.WU\",\n\tFCVT_LU_D:      \"FCVT.LU.D\",\n\tFCVT_LU_H:      \"FCVT.LU.H\",\n\tFCVT_LU_Q:      \"FCVT.LU.Q\",\n\tFCVT_LU_S:      \"FCVT.LU.S\",\n\tFCVT_L_D:       \"FCVT.L.D\",\n\tFCVT_L_H:       \"FCVT.L.H\",\n\tFCVT_L_Q:       \"FCVT.L.Q\",\n\tFCVT_L_S:       \"FCVT.L.S\",\n\tFCVT_Q_D:       \"FCVT.Q.D\",\n\tFCVT_Q_L:       \"FCVT.Q.L\",\n\tFCVT_Q_LU:      \"FCVT.Q.LU\",\n\tFCVT_Q_S:       \"FCVT.Q.S\",\n\tFCVT_Q_W:       \"FCVT.Q.W\",\n\tFCVT_Q_WU:      \"FCVT.Q.WU\",\n\tFCVT_S_D:       \"FCVT.S.D\",\n\tFCVT_S_H:       \"FCVT.S.H\",\n\tFCVT_S_L:       \"FCVT.S.L\",\n\tFCVT_S_LU:      \"FCVT.S.LU\",\n\tFCVT_S_Q:       \"FCVT.S.Q\",\n\tFCVT_S_W:       \"FCVT.S.W\",\n\tFCVT_S_WU:      \"FCVT.S.WU\",\n\tFCVT_WU_D:      \"FCVT.WU.D\",\n\tFCVT_WU_H:      \"FCVT.WU.H\",\n\tFCVT_WU_Q:      \"FCVT.WU.Q\",\n\tFCVT_WU_S:      \"FCVT.WU.S\",\n\tFCVT_W_D:       \"FCVT.W.D\",\n\tFCVT_W_H:       \"FCVT.W.H\",\n\tFCVT_W_Q:       \"FCVT.W.Q\",\n\tFCVT_W_S:       \"FCVT.W.S\",\n\tFDIV_D:         \"FDIV.D\",\n\tFDIV_H:         \"FDIV.H\",\n\tFDIV_Q:         \"FDIV.Q\",\n\tFDIV_S:         \"FDIV.S\",\n\tFENCE:          \"FENCE\",\n\tFENCE_I:        \"FENCE.I\",\n\tFEQ_D:          \"FEQ.D\",\n\tFEQ_H:          \"FEQ.H\",\n\tFEQ_Q:          \"FEQ.Q\",\n\tFEQ_S:          \"FEQ.S\",\n\tFLD:            \"FLD\",\n\tFLE_D:          \"FLE.D\",\n\tFLE_H:          \"FLE.H\",\n\tFLE_Q:          \"FLE.Q\",\n\tFLE_S:          \"FLE.S\",\n\tFLH:            \"FLH\",\n\tFLQ:            \"FLQ\",\n\tFLT_D:          \"FLT.D\",\n\tFLT_H:          \"FLT.H\",\n\tFLT_Q:          \"FLT.Q\",\n\tFLT_S:          \"FLT.S\",\n\tFLW:            \"FLW\",\n\tFMADD_D:        \"FMADD.D\",\n\tFMADD_H:        \"FMADD.H\",\n\tFMADD_Q:        \"FMADD.Q\",\n\tFMADD_S:        \"FMADD.S\",\n\tFMAX_D:         \"FMAX.D\",\n\tFMAX_H:         \"FMAX.H\",\n\tFMAX_Q:         \"FMAX.Q\",\n\tFMAX_S:         \"FMAX.S\",\n\tFMIN_D:         \"FMIN.D\",\n\tFMIN_H:         \"FMIN.H\",\n\tFMIN_Q:         \"FMIN.Q\",\n\tFMIN_S:         \"FMIN.S\",\n\tFMSUB_D:        \"FMSUB.D\",\n\tFMSUB_H:        \"FMSUB.H\",\n\tFMSUB_Q:        \"FMSUB.Q\",\n\tFMSUB_S:        \"FMSUB.S\",\n\tFMUL_D:         \"FMUL.D\",\n\tFMUL_H:         \"FMUL.H\",\n\tFMUL_Q:         \"FMUL.Q\",\n\tFMUL_S:         \"FMUL.S\",\n\tFMV_D_X:        \"FMV.D.X\",\n\tFMV_H_X:        \"FMV.H.X\",\n\tFMV_W_X:        \"FMV.W.X\",\n\tFMV_X_D:        \"FMV.X.D\",\n\tFMV_X_H:        \"FMV.X.H\",\n\tFMV_X_W:        \"FMV.X.W\",\n\tFNMADD_D:       \"FNMADD.D\",\n\tFNMADD_H:       \"FNMADD.H\",\n\tFNMADD_Q:       \"FNMADD.Q\",\n\tFNMADD_S:       \"FNMADD.S\",\n\tFNMSUB_D:       \"FNMSUB.D\",\n\tFNMSUB_H:       \"FNMSUB.H\",\n\tFNMSUB_Q:       \"FNMSUB.Q\",\n\tFNMSUB_S:       \"FNMSUB.S\",\n\tFSD:            \"FSD\",\n\tFSGNJN_D:       \"FSGNJN.D\",\n\tFSGNJN_H:       \"FSGNJN.H\",\n\tFSGNJN_Q:       \"FSGNJN.Q\",\n\tFSGNJN_S:       \"FSGNJN.S\",\n\tFSGNJX_D:       \"FSGNJX.D\",\n\tFSGNJX_H:       \"FSGNJX.H\",\n\tFSGNJX_Q:       \"FSGNJX.Q\",\n\tFSGNJX_S:       \"FSGNJX.S\",\n\tFSGNJ_D:        \"FSGNJ.D\",\n\tFSGNJ_H:        \"FSGNJ.H\",\n\tFSGNJ_Q:        \"FSGNJ.Q\",\n\tFSGNJ_S:        \"FSGNJ.S\",\n\tFSH:            \"FSH\",\n\tFSQ:            \"FSQ\",\n\tFSQRT_D:        \"FSQRT.D\",\n\tFSQRT_H:        \"FSQRT.H\",\n\tFSQRT_Q:        \"FSQRT.Q\",\n\tFSQRT_S:        \"FSQRT.S\",\n\tFSUB_D:         \"FSUB.D\",\n\tFSUB_H:         \"FSUB.H\",\n\tFSUB_Q:         \"FSUB.Q\",\n\tFSUB_S:         \"FSUB.S\",\n\tFSW:            \"FSW\",\n\tJAL:            \"JAL\",\n\tJALR:           \"JALR\",\n\tLB:             \"LB\",\n\tLBU:            \"LBU\",\n\tLD:             \"LD\",\n\tLH:             \"LH\",\n\tLHU:            \"LHU\",\n\tLR_D:           \"LR.D\",\n\tLR_D_AQ:        \"LR.D.AQ\",\n\tLR_D_AQRL:      \"LR.D.AQRL\",\n\tLR_D_RL:        \"LR.D.RL\",\n\tLR_W:           \"LR.W\",\n\tLR_W_AQ:        \"LR.W.AQ\",\n\tLR_W_AQRL:      \"LR.W.AQRL\",\n\tLR_W_RL:        \"LR.W.RL\",\n\tLUI:            \"LUI\",\n\tLW:             \"LW\",\n\tLWU:            \"LWU\",\n\tMAX:            \"MAX\",\n\tMAXU:           \"MAXU\",\n\tMIN:            \"MIN\",\n\tMINU:           \"MINU\",\n\tMUL:            \"MUL\",\n\tMULH:           \"MULH\",\n\tMULHSU:         \"MULHSU\",\n\tMULHU:          \"MULHU\",\n\tMULW:           \"MULW\",\n\tOR:             \"OR\",\n\tORC_B:          \"ORC.B\",\n\tORI:            \"ORI\",\n\tORN:            \"ORN\",\n\tREM:            \"REM\",\n\tREMU:           \"REMU\",\n\tREMUW:          \"REMUW\",\n\tREMW:           \"REMW\",\n\tREV8:           \"REV8\",\n\tROL:            \"ROL\",\n\tROLW:           \"ROLW\",\n\tROR:            \"ROR\",\n\tRORI:           \"RORI\",\n\tRORIW:          \"RORIW\",\n\tRORW:           \"RORW\",\n\tSB:             \"SB\",\n\tSC_D:           \"SC.D\",\n\tSC_D_AQ:        \"SC.D.AQ\",\n\tSC_D_AQRL:      \"SC.D.AQRL\",\n\tSC_D_RL:        \"SC.D.RL\",\n\tSC_W:           \"SC.W\",\n\tSC_W_AQ:        \"SC.W.AQ\",\n\tSC_W_AQRL:      \"SC.W.AQRL\",\n\tSC_W_RL:        \"SC.W.RL\",\n\tSD:             \"SD\",\n\tSEXT_B:         \"SEXT.B\",\n\tSEXT_H:         \"SEXT.H\",\n\tSH:             \"SH\",\n\tSH1ADD:         \"SH1ADD\",\n\tSH1ADD_UW:      \"SH1ADD.UW\",\n\tSH2ADD:         \"SH2ADD\",\n\tSH2ADD_UW:      \"SH2ADD.UW\",\n\tSH3ADD:         \"SH3ADD\",\n\tSH3ADD_UW:      \"SH3ADD.UW\",\n\tSLL:            \"SLL\",\n\tSLLI:           \"SLLI\",\n\tSLLIW:          \"SLLIW\",\n\tSLLI_UW:        \"SLLI.UW\",\n\tSLLW:           \"SLLW\",\n\tSLT:            \"SLT\",\n\tSLTI:           \"SLTI\",\n\tSLTIU:          \"SLTIU\",\n\tSLTU:           \"SLTU\",\n\tSRA:            \"SRA\",\n\tSRAI:           \"SRAI\",\n\tSRAIW:          \"SRAIW\",\n\tSRAW:           \"SRAW\",\n\tSRL:            \"SRL\",\n\tSRLI:           \"SRLI\",\n\tSRLIW:          \"SRLIW\",\n\tSRLW:           \"SRLW\",\n\tSUB:            \"SUB\",\n\tSUBW:           \"SUBW\",\n\tSW:             \"SW\",\n\tXNOR:           \"XNOR\",\n\tXOR:            \"XOR\",\n\tXORI:           \"XORI\",\n\tZEXT_H:         \"ZEXT.H\",\n}\n\nvar instFormats = [...]instFormat{\n\t// ADD rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x00000033, op: ADD, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// ADDI rd, rs1, imm12\n\t{mask: 0x0000707f, value: 0x00000013, op: ADDI, args: argTypeList{arg_rd, arg_rs1, arg_imm12}},\n\t// ADDIW rd, rs1, imm12\n\t{mask: 0x0000707f, value: 0x0000001b, op: ADDIW, args: argTypeList{arg_rd, arg_rs1, arg_imm12}},\n\t// ADDW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0000003b, op: ADDW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// ADD.UW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0800003b, op: ADD_UW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// AMOADD.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0000302f, op: AMOADD_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOADD.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0400302f, op: AMOADD_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOADD.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0600302f, op: AMOADD_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOADD.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0200302f, op: AMOADD_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOADD.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0000202f, op: AMOADD_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOADD.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0400202f, op: AMOADD_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOADD.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0600202f, op: AMOADD_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOADD.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0200202f, op: AMOADD_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOAND.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x6000302f, op: AMOAND_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOAND.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x6400302f, op: AMOAND_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOAND.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x6600302f, op: AMOAND_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOAND.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x6200302f, op: AMOAND_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOAND.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x6000202f, op: AMOAND_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOAND.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x6400202f, op: AMOAND_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOAND.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x6600202f, op: AMOAND_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOAND.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x6200202f, op: AMOAND_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAXU.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xe000302f, op: AMOMAXU_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAXU.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xe400302f, op: AMOMAXU_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAXU.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xe600302f, op: AMOMAXU_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAXU.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xe200302f, op: AMOMAXU_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAXU.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xe000202f, op: AMOMAXU_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAXU.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xe400202f, op: AMOMAXU_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAXU.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xe600202f, op: AMOMAXU_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAXU.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xe200202f, op: AMOMAXU_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAX.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xa000302f, op: AMOMAX_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAX.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xa400302f, op: AMOMAX_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAX.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xa600302f, op: AMOMAX_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAX.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xa200302f, op: AMOMAX_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAX.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xa000202f, op: AMOMAX_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAX.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xa400202f, op: AMOMAX_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAX.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xa600202f, op: AMOMAX_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMAX.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xa200202f, op: AMOMAX_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMINU.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xc000302f, op: AMOMINU_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMINU.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xc400302f, op: AMOMINU_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMINU.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xc600302f, op: AMOMINU_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMINU.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xc200302f, op: AMOMINU_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMINU.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xc000202f, op: AMOMINU_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMINU.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xc400202f, op: AMOMINU_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMINU.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xc600202f, op: AMOMINU_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMINU.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0xc200202f, op: AMOMINU_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMIN.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x8000302f, op: AMOMIN_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMIN.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x8400302f, op: AMOMIN_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMIN.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x8600302f, op: AMOMIN_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMIN.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x8200302f, op: AMOMIN_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMIN.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x8000202f, op: AMOMIN_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMIN.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x8400202f, op: AMOMIN_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMIN.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x8600202f, op: AMOMIN_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOMIN.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x8200202f, op: AMOMIN_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOOR.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x4000302f, op: AMOOR_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOOR.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x4400302f, op: AMOOR_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOOR.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x4600302f, op: AMOOR_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOOR.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x4200302f, op: AMOOR_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOOR.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x4000202f, op: AMOOR_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOOR.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x4400202f, op: AMOOR_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOOR.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x4600202f, op: AMOOR_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOOR.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x4200202f, op: AMOOR_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOSWAP.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0800302f, op: AMOSWAP_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOSWAP.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0c00302f, op: AMOSWAP_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOSWAP.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0e00302f, op: AMOSWAP_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOSWAP.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0a00302f, op: AMOSWAP_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOSWAP.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0800202f, op: AMOSWAP_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOSWAP.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0c00202f, op: AMOSWAP_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOSWAP.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0e00202f, op: AMOSWAP_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOSWAP.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x0a00202f, op: AMOSWAP_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOXOR.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x2000302f, op: AMOXOR_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOXOR.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x2400302f, op: AMOXOR_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOXOR.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x2600302f, op: AMOXOR_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOXOR.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x2200302f, op: AMOXOR_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOXOR.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x2000202f, op: AMOXOR_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOXOR.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x2400202f, op: AMOXOR_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOXOR.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x2600202f, op: AMOXOR_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AMOXOR.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x2200202f, op: AMOXOR_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// AND rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x00007033, op: AND, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// ANDI rd, rs1, imm12\n\t{mask: 0x0000707f, value: 0x00007013, op: ANDI, args: argTypeList{arg_rd, arg_rs1, arg_imm12}},\n\t// ANDN rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x40007033, op: ANDN, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// AUIPC rd, imm20\n\t{mask: 0x0000007f, value: 0x00000017, op: AUIPC, args: argTypeList{arg_rd, arg_imm20}},\n\t// BCLR rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x48001033, op: BCLR, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// BCLRI rd, rs1, shamt6\n\t{mask: 0xfc00707f, value: 0x48001013, op: BCLRI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},\n\t// BEQ rs1, rs2, bimm12\n\t{mask: 0x0000707f, value: 0x00000063, op: BEQ, args: argTypeList{arg_rs1, arg_rs2, arg_bimm12}},\n\t// BEXT rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x48005033, op: BEXT, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// BEXTI rd, rs1, shamt6\n\t{mask: 0xfc00707f, value: 0x48005013, op: BEXTI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},\n\t// BGE rs1, rs2, bimm12\n\t{mask: 0x0000707f, value: 0x00005063, op: BGE, args: argTypeList{arg_rs1, arg_rs2, arg_bimm12}},\n\t// BGEU rs1, rs2, bimm12\n\t{mask: 0x0000707f, value: 0x00007063, op: BGEU, args: argTypeList{arg_rs1, arg_rs2, arg_bimm12}},\n\t// BINV rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x68001033, op: BINV, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// BINVI rd, rs1, shamt6\n\t{mask: 0xfc00707f, value: 0x68001013, op: BINVI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},\n\t// BLT rs1, rs2, bimm12\n\t{mask: 0x0000707f, value: 0x00004063, op: BLT, args: argTypeList{arg_rs1, arg_rs2, arg_bimm12}},\n\t// BLTU rs1, rs2, bimm12\n\t{mask: 0x0000707f, value: 0x00006063, op: BLTU, args: argTypeList{arg_rs1, arg_rs2, arg_bimm12}},\n\t// BNE rs1, rs2, bimm12\n\t{mask: 0x0000707f, value: 0x00001063, op: BNE, args: argTypeList{arg_rs1, arg_rs2, arg_bimm12}},\n\t// BSET rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x28001033, op: BSET, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// BSETI rd, rs1, shamt6\n\t{mask: 0xfc00707f, value: 0x28001013, op: BSETI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},\n\t// CLZ rd, rs1\n\t{mask: 0xfff0707f, value: 0x60001013, op: CLZ, args: argTypeList{arg_rd, arg_rs1}},\n\t// CLZW rd, rs1\n\t{mask: 0xfff0707f, value: 0x6000101b, op: CLZW, args: argTypeList{arg_rd, arg_rs1}},\n\t// CPOP rd, rs1\n\t{mask: 0xfff0707f, value: 0x60201013, op: CPOP, args: argTypeList{arg_rd, arg_rs1}},\n\t// CPOPW rd, rs1\n\t{mask: 0xfff0707f, value: 0x6020101b, op: CPOPW, args: argTypeList{arg_rd, arg_rs1}},\n\t// CSRRC rd, csr, rs1\n\t{mask: 0x0000707f, value: 0x00003073, op: CSRRC, args: argTypeList{arg_rd, arg_csr, arg_rs1}},\n\t// CSRRCI rd, csr, zimm\n\t{mask: 0x0000707f, value: 0x00007073, op: CSRRCI, args: argTypeList{arg_rd, arg_csr, arg_zimm}},\n\t// CSRRS rd, csr, rs1\n\t{mask: 0x0000707f, value: 0x00002073, op: CSRRS, args: argTypeList{arg_rd, arg_csr, arg_rs1}},\n\t// CSRRSI rd, csr, zimm\n\t{mask: 0x0000707f, value: 0x00006073, op: CSRRSI, args: argTypeList{arg_rd, arg_csr, arg_zimm}},\n\t// CSRRW rd, csr, rs1\n\t{mask: 0x0000707f, value: 0x00001073, op: CSRRW, args: argTypeList{arg_rd, arg_csr, arg_rs1}},\n\t// CSRRWI rd, csr, zimm\n\t{mask: 0x0000707f, value: 0x00005073, op: CSRRWI, args: argTypeList{arg_rd, arg_csr, arg_zimm}},\n\t// CTZ rd, rs1\n\t{mask: 0xfff0707f, value: 0x60101013, op: CTZ, args: argTypeList{arg_rd, arg_rs1}},\n\t// CTZW rd, rs1\n\t{mask: 0xfff0707f, value: 0x6010101b, op: CTZW, args: argTypeList{arg_rd, arg_rs1}},\n\t// C.ADD rd_rs1_n0, c_rs2_n0\n\t{mask: 0x0000f003, value: 0x00009002, op: C_ADD, args: argTypeList{arg_rd_rs1_n0, arg_c_rs2_n0}},\n\t// C.ADDI rd_rs1_n0, c_nzimm6\n\t{mask: 0x0000e003, value: 0x00000001, op: C_ADDI, args: argTypeList{arg_rd_rs1_n0, arg_c_nzimm6}},\n\t// C.ADDI16SP c_nzimm10\n\t{mask: 0x0000ef83, value: 0x00006101, op: C_ADDI16SP, args: argTypeList{arg_c_nzimm10}},\n\t// C.ADDI4SPN rd_p, c_nzuimm10\n\t{mask: 0x0000e003, value: 0x00000000, op: C_ADDI4SPN, args: argTypeList{arg_rd_p, arg_c_nzuimm10}},\n\t// C.ADDIW rd_rs1_n0, c_imm6\n\t{mask: 0x0000e003, value: 0x00002001, op: C_ADDIW, args: argTypeList{arg_rd_rs1_n0, arg_c_imm6}},\n\t// C.ADDW rd_rs1_p, rs2_p\n\t{mask: 0x0000fc63, value: 0x00009c21, op: C_ADDW, args: argTypeList{arg_rd_rs1_p, arg_rs2_p}},\n\t// C.AND rd_rs1_p, rs2_p\n\t{mask: 0x0000fc63, value: 0x00008c61, op: C_AND, args: argTypeList{arg_rd_rs1_p, arg_rs2_p}},\n\t// C.ANDI rd_rs1_p, c_imm6\n\t{mask: 0x0000ec03, value: 0x00008801, op: C_ANDI, args: argTypeList{arg_rd_rs1_p, arg_c_imm6}},\n\t// C.BEQZ rs1_p, c_bimm9\n\t{mask: 0x0000e003, value: 0x0000c001, op: C_BEQZ, args: argTypeList{arg_rs1_p, arg_c_bimm9}},\n\t// C.BNEZ rs1_p, c_bimm9\n\t{mask: 0x0000e003, value: 0x0000e001, op: C_BNEZ, args: argTypeList{arg_rs1_p, arg_c_bimm9}},\n\t// C.EBREAK\n\t{mask: 0x0000ffff, value: 0x00009002, op: C_EBREAK, args: argTypeList{}},\n\t// C.FLD fd_p, rs1_p, c_uimm8\n\t{mask: 0x0000e003, value: 0x00002000, op: C_FLD, args: argTypeList{arg_fd_p, arg_rs1_p, arg_c_uimm8}},\n\t// C.FLDSP fd, c_uimm9sp\n\t{mask: 0x0000e003, value: 0x00002002, op: C_FLDSP, args: argTypeList{arg_fd, arg_c_uimm9sp}},\n\t// C.FSD rs1_p, fs2_p, c_uimm8\n\t{mask: 0x0000e003, value: 0x0000a000, op: C_FSD, args: argTypeList{arg_rs1_p, arg_fs2_p, arg_c_uimm8}},\n\t// C.FSDSP c_fs2, c_uimm9sp_s\n\t{mask: 0x0000e003, value: 0x0000a002, op: C_FSDSP, args: argTypeList{arg_c_fs2, arg_c_uimm9sp_s}},\n\t// C.J c_imm12\n\t{mask: 0x0000e003, value: 0x0000a001, op: C_J, args: argTypeList{arg_c_imm12}},\n\t// C.JALR c_rs1_n0\n\t{mask: 0x0000f07f, value: 0x00009002, op: C_JALR, args: argTypeList{arg_c_rs1_n0}},\n\t// C.JR rs1_n0\n\t{mask: 0x0000f07f, value: 0x00008002, op: C_JR, args: argTypeList{arg_rs1_n0}},\n\t// C.LD rd_p, rs1_p, c_uimm8\n\t{mask: 0x0000e003, value: 0x00006000, op: C_LD, args: argTypeList{arg_rd_p, arg_rs1_p, arg_c_uimm8}},\n\t// C.LDSP rd_n0, c_uimm9sp\n\t{mask: 0x0000e003, value: 0x00006002, op: C_LDSP, args: argTypeList{arg_rd_n0, arg_c_uimm9sp}},\n\t// C.LI rd_n0, c_imm6\n\t{mask: 0x0000e003, value: 0x00004001, op: C_LI, args: argTypeList{arg_rd_n0, arg_c_imm6}},\n\t// C.LUI rd_n2, c_nzimm18\n\t{mask: 0x0000e003, value: 0x00006001, op: C_LUI, args: argTypeList{arg_rd_n2, arg_c_nzimm18}},\n\t// C.LW rd_p, rs1_p, c_uimm7\n\t{mask: 0x0000e003, value: 0x00004000, op: C_LW, args: argTypeList{arg_rd_p, arg_rs1_p, arg_c_uimm7}},\n\t// C.LWSP rd_n0, c_uimm8sp\n\t{mask: 0x0000e003, value: 0x00004002, op: C_LWSP, args: argTypeList{arg_rd_n0, arg_c_uimm8sp}},\n\t// C.MV rd_n0, c_rs2_n0\n\t{mask: 0x0000f003, value: 0x00008002, op: C_MV, args: argTypeList{arg_rd_n0, arg_c_rs2_n0}},\n\t// C.NOP c_nzimm6\n\t{mask: 0x0000ef83, value: 0x00000001, op: C_NOP, args: argTypeList{arg_c_nzimm6}},\n\t// C.OR rd_rs1_p, rs2_p\n\t{mask: 0x0000fc63, value: 0x00008c41, op: C_OR, args: argTypeList{arg_rd_rs1_p, arg_rs2_p}},\n\t// C.SD rs1_p, rs2_p, c_uimm8\n\t{mask: 0x0000e003, value: 0x0000e000, op: C_SD, args: argTypeList{arg_rs1_p, arg_rs2_p, arg_c_uimm8}},\n\t// C.SDSP c_rs2, c_uimm9sp_s\n\t{mask: 0x0000e003, value: 0x0000e002, op: C_SDSP, args: argTypeList{arg_c_rs2, arg_c_uimm9sp_s}},\n\t// C.SLLI rd_rs1_n0, c_nzuimm6\n\t{mask: 0x0000e003, value: 0x00000002, op: C_SLLI, args: argTypeList{arg_rd_rs1_n0, arg_c_nzuimm6}},\n\t// C.SRAI rd_rs1_p, c_nzuimm6\n\t{mask: 0x0000ec03, value: 0x00008401, op: C_SRAI, args: argTypeList{arg_rd_rs1_p, arg_c_nzuimm6}},\n\t// C.SRLI rd_rs1_p, c_nzuimm6\n\t{mask: 0x0000ec03, value: 0x00008001, op: C_SRLI, args: argTypeList{arg_rd_rs1_p, arg_c_nzuimm6}},\n\t// C.SUB rd_rs1_p, rs2_p\n\t{mask: 0x0000fc63, value: 0x00008c01, op: C_SUB, args: argTypeList{arg_rd_rs1_p, arg_rs2_p}},\n\t// C.SUBW rd_rs1_p, rs2_p\n\t{mask: 0x0000fc63, value: 0x00009c01, op: C_SUBW, args: argTypeList{arg_rd_rs1_p, arg_rs2_p}},\n\t// C.SW rs1_p, rs2_p, c_uimm7\n\t{mask: 0x0000e003, value: 0x0000c000, op: C_SW, args: argTypeList{arg_rs1_p, arg_rs2_p, arg_c_uimm7}},\n\t// C.SWSP c_rs2, c_uimm8sp_s\n\t{mask: 0x0000e003, value: 0x0000c002, op: C_SWSP, args: argTypeList{arg_c_rs2, arg_c_uimm8sp_s}},\n\t// C.UNIMP\n\t{mask: 0x0000ffff, value: 0x00000000, op: C_UNIMP, args: argTypeList{}},\n\t// C.XOR rd_rs1_p, rs2_p\n\t{mask: 0x0000fc63, value: 0x00008c21, op: C_XOR, args: argTypeList{arg_rd_rs1_p, arg_rs2_p}},\n\t// DIV rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x02004033, op: DIV, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// DIVU rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x02005033, op: DIVU, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// DIVUW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0200503b, op: DIVUW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// DIVW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0200403b, op: DIVW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// EBREAK\n\t{mask: 0xffffffff, value: 0x00100073, op: EBREAK, args: argTypeList{}},\n\t// ECALL\n\t{mask: 0xffffffff, value: 0x00000073, op: ECALL, args: argTypeList{}},\n\t// FADD.D fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x02000053, op: FADD_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FADD.H fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x04000053, op: FADD_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FADD.Q fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x06000053, op: FADD_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FADD.S fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x00000053, op: FADD_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FCLASS.D rd, fs1\n\t{mask: 0xfff0707f, value: 0xe2001053, op: FCLASS_D, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCLASS.H rd, fs1\n\t{mask: 0xfff0707f, value: 0xe4001053, op: FCLASS_H, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCLASS.Q rd, fs1\n\t{mask: 0xfff0707f, value: 0xe6001053, op: FCLASS_Q, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCLASS.S rd, fs1\n\t{mask: 0xfff0707f, value: 0xe0001053, op: FCLASS_S, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.D.L fd, rs1\n\t{mask: 0xfff0007f, value: 0xd2200053, op: FCVT_D_L, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.D.LU fd, rs1\n\t{mask: 0xfff0007f, value: 0xd2300053, op: FCVT_D_LU, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.D.Q fd, fs1\n\t{mask: 0xfff0007f, value: 0x42300053, op: FCVT_D_Q, args: argTypeList{arg_fd, arg_fs1}},\n\t// FCVT.D.S fd, fs1\n\t{mask: 0xfff0007f, value: 0x42000053, op: FCVT_D_S, args: argTypeList{arg_fd, arg_fs1}},\n\t// FCVT.D.W fd, rs1\n\t{mask: 0xfff0007f, value: 0xd2000053, op: FCVT_D_W, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.D.WU fd, rs1\n\t{mask: 0xfff0007f, value: 0xd2100053, op: FCVT_D_WU, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.H.L fd, rs1\n\t{mask: 0xfff0007f, value: 0xd4200053, op: FCVT_H_L, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.H.LU fd, rs1\n\t{mask: 0xfff0007f, value: 0xd4300053, op: FCVT_H_LU, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.H.S fd, fs1\n\t{mask: 0xfff0007f, value: 0x44000053, op: FCVT_H_S, args: argTypeList{arg_fd, arg_fs1}},\n\t// FCVT.H.W fd, rs1\n\t{mask: 0xfff0007f, value: 0xd4000053, op: FCVT_H_W, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.H.WU fd, rs1\n\t{mask: 0xfff0007f, value: 0xd4100053, op: FCVT_H_WU, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.LU.D rd, fs1\n\t{mask: 0xfff0007f, value: 0xc2300053, op: FCVT_LU_D, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.LU.H rd, fs1\n\t{mask: 0xfff0007f, value: 0xc4300053, op: FCVT_LU_H, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.LU.Q rd, fs1\n\t{mask: 0xfff0007f, value: 0xc6300053, op: FCVT_LU_Q, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.LU.S rd, fs1\n\t{mask: 0xfff0007f, value: 0xc0300053, op: FCVT_LU_S, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.L.D rd, fs1\n\t{mask: 0xfff0007f, value: 0xc2200053, op: FCVT_L_D, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.L.H rd, fs1\n\t{mask: 0xfff0007f, value: 0xc4200053, op: FCVT_L_H, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.L.Q rd, fs1\n\t{mask: 0xfff0007f, value: 0xc6200053, op: FCVT_L_Q, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.L.S rd, fs1\n\t{mask: 0xfff0007f, value: 0xc0200053, op: FCVT_L_S, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.Q.D fd, fs1\n\t{mask: 0xfff0007f, value: 0x46100053, op: FCVT_Q_D, args: argTypeList{arg_fd, arg_fs1}},\n\t// FCVT.Q.L fd, rs1\n\t{mask: 0xfff0007f, value: 0xd6200053, op: FCVT_Q_L, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.Q.LU fd, rs1\n\t{mask: 0xfff0007f, value: 0xd6300053, op: FCVT_Q_LU, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.Q.S fd, fs1\n\t{mask: 0xfff0007f, value: 0x46000053, op: FCVT_Q_S, args: argTypeList{arg_fd, arg_fs1}},\n\t// FCVT.Q.W fd, rs1\n\t{mask: 0xfff0007f, value: 0xd6000053, op: FCVT_Q_W, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.Q.WU fd, rs1\n\t{mask: 0xfff0007f, value: 0xd6100053, op: FCVT_Q_WU, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.S.D fd, fs1\n\t{mask: 0xfff0007f, value: 0x40100053, op: FCVT_S_D, args: argTypeList{arg_fd, arg_fs1}},\n\t// FCVT.S.H fd, fs1\n\t{mask: 0xfff0007f, value: 0x40200053, op: FCVT_S_H, args: argTypeList{arg_fd, arg_fs1}},\n\t// FCVT.S.L fd, rs1\n\t{mask: 0xfff0007f, value: 0xd0200053, op: FCVT_S_L, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.S.LU fd, rs1\n\t{mask: 0xfff0007f, value: 0xd0300053, op: FCVT_S_LU, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.S.Q fd, fs1\n\t{mask: 0xfff0007f, value: 0x40300053, op: FCVT_S_Q, args: argTypeList{arg_fd, arg_fs1}},\n\t// FCVT.S.W fd, rs1\n\t{mask: 0xfff0007f, value: 0xd0000053, op: FCVT_S_W, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.S.WU fd, rs1\n\t{mask: 0xfff0007f, value: 0xd0100053, op: FCVT_S_WU, args: argTypeList{arg_fd, arg_rs1}},\n\t// FCVT.WU.D rd, fs1\n\t{mask: 0xfff0007f, value: 0xc2100053, op: FCVT_WU_D, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.WU.H rd, fs1\n\t{mask: 0xfff0007f, value: 0xc4100053, op: FCVT_WU_H, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.WU.Q rd, fs1\n\t{mask: 0xfff0007f, value: 0xc6100053, op: FCVT_WU_Q, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.WU.S rd, fs1\n\t{mask: 0xfff0007f, value: 0xc0100053, op: FCVT_WU_S, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.W.D rd, fs1\n\t{mask: 0xfff0007f, value: 0xc2000053, op: FCVT_W_D, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.W.H rd, fs1\n\t{mask: 0xfff0007f, value: 0xc4000053, op: FCVT_W_H, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.W.Q rd, fs1\n\t{mask: 0xfff0007f, value: 0xc6000053, op: FCVT_W_Q, args: argTypeList{arg_rd, arg_fs1}},\n\t// FCVT.W.S rd, fs1\n\t{mask: 0xfff0007f, value: 0xc0000053, op: FCVT_W_S, args: argTypeList{arg_rd, arg_fs1}},\n\t// FDIV.D fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x1a000053, op: FDIV_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FDIV.H fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x1c000053, op: FDIV_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FDIV.Q fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x1e000053, op: FDIV_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FDIV.S fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x18000053, op: FDIV_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FENCE pred, succ\n\t{mask: 0x0000707f, value: 0x0000000f, op: FENCE, args: argTypeList{arg_pred, arg_succ}},\n\t// FENCE.I\n\t{mask: 0x0000707f, value: 0x0000100f, op: FENCE_I, args: argTypeList{}},\n\t// FEQ.D rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa2002053, op: FEQ_D, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FEQ.H rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa4002053, op: FEQ_H, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FEQ.Q rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa6002053, op: FEQ_Q, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FEQ.S rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa0002053, op: FEQ_S, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FLD fd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00003007, op: FLD, args: argTypeList{arg_fd, arg_rs1_mem}},\n\t// FLE.D rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa2000053, op: FLE_D, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FLE.H rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa4000053, op: FLE_H, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FLE.Q rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa6000053, op: FLE_Q, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FLE.S rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa0000053, op: FLE_S, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FLH fd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00001007, op: FLH, args: argTypeList{arg_fd, arg_rs1_mem}},\n\t// FLQ fd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00004007, op: FLQ, args: argTypeList{arg_fd, arg_rs1_mem}},\n\t// FLT.D rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa2001053, op: FLT_D, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FLT.H rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa4001053, op: FLT_H, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FLT.Q rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa6001053, op: FLT_Q, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FLT.S rd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0xa0001053, op: FLT_S, args: argTypeList{arg_rd, arg_fs1, arg_fs2}},\n\t// FLW fd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00002007, op: FLW, args: argTypeList{arg_fd, arg_rs1_mem}},\n\t// FMADD.D fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x02000043, op: FMADD_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FMADD.H fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x04000043, op: FMADD_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FMADD.Q fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x06000043, op: FMADD_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FMADD.S fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x00000043, op: FMADD_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FMAX.D fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x2a001053, op: FMAX_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMAX.H fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x2c001053, op: FMAX_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMAX.Q fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x2e001053, op: FMAX_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMAX.S fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x28001053, op: FMAX_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMIN.D fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x2a000053, op: FMIN_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMIN.H fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x2c000053, op: FMIN_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMIN.Q fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x2e000053, op: FMIN_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMIN.S fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x28000053, op: FMIN_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMSUB.D fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x02000047, op: FMSUB_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FMSUB.H fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x04000047, op: FMSUB_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FMSUB.Q fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x06000047, op: FMSUB_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FMSUB.S fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x00000047, op: FMSUB_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FMUL.D fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x12000053, op: FMUL_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMUL.H fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x14000053, op: FMUL_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMUL.Q fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x16000053, op: FMUL_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMUL.S fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x10000053, op: FMUL_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FMV.D.X fd, rs1\n\t{mask: 0xfff0707f, value: 0xf2000053, op: FMV_D_X, args: argTypeList{arg_fd, arg_rs1}},\n\t// FMV.H.X fd, rs1\n\t{mask: 0xfff0707f, value: 0xf4000053, op: FMV_H_X, args: argTypeList{arg_fd, arg_rs1}},\n\t// FMV.W.X fd, rs1\n\t{mask: 0xfff0707f, value: 0xf0000053, op: FMV_W_X, args: argTypeList{arg_fd, arg_rs1}},\n\t// FMV.X.D rd, fs1\n\t{mask: 0xfff0707f, value: 0xe2000053, op: FMV_X_D, args: argTypeList{arg_rd, arg_fs1}},\n\t// FMV.X.H rd, fs1\n\t{mask: 0xfff0707f, value: 0xe4000053, op: FMV_X_H, args: argTypeList{arg_rd, arg_fs1}},\n\t// FMV.X.W rd, fs1\n\t{mask: 0xfff0707f, value: 0xe0000053, op: FMV_X_W, args: argTypeList{arg_rd, arg_fs1}},\n\t// FNMADD.D fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x0200004f, op: FNMADD_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FNMADD.H fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x0400004f, op: FNMADD_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FNMADD.Q fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x0600004f, op: FNMADD_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FNMADD.S fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x0000004f, op: FNMADD_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FNMSUB.D fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x0200004b, op: FNMSUB_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FNMSUB.H fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x0400004b, op: FNMSUB_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FNMSUB.Q fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x0600004b, op: FNMSUB_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FNMSUB.S fd, fs1, fs2, fs3\n\t{mask: 0x0600007f, value: 0x0000004b, op: FNMSUB_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2, arg_fs3}},\n\t// FSD fs2, rs1_store\n\t{mask: 0x0000707f, value: 0x00003027, op: FSD, args: argTypeList{arg_fs2, arg_rs1_store}},\n\t// FSGNJN.D fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x22001053, op: FSGNJN_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJN.H fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x24001053, op: FSGNJN_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJN.Q fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x26001053, op: FSGNJN_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJN.S fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x20001053, op: FSGNJN_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJX.D fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x22002053, op: FSGNJX_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJX.H fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x24002053, op: FSGNJX_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJX.Q fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x26002053, op: FSGNJX_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJX.S fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x20002053, op: FSGNJX_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJ.D fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x22000053, op: FSGNJ_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJ.H fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x24000053, op: FSGNJ_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJ.Q fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x26000053, op: FSGNJ_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSGNJ.S fd, fs1, fs2\n\t{mask: 0xfe00707f, value: 0x20000053, op: FSGNJ_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSH fs2, rs1_store\n\t{mask: 0x0000707f, value: 0x00001027, op: FSH, args: argTypeList{arg_fs2, arg_rs1_store}},\n\t// FSQ fs2, rs1_store\n\t{mask: 0x0000707f, value: 0x00004027, op: FSQ, args: argTypeList{arg_fs2, arg_rs1_store}},\n\t// FSQRT.D fd, fs1\n\t{mask: 0xfff0007f, value: 0x5a000053, op: FSQRT_D, args: argTypeList{arg_fd, arg_fs1}},\n\t// FSQRT.H fd, fs1\n\t{mask: 0xfff0007f, value: 0x5c000053, op: FSQRT_H, args: argTypeList{arg_fd, arg_fs1}},\n\t// FSQRT.Q fd, fs1\n\t{mask: 0xfff0007f, value: 0x5e000053, op: FSQRT_Q, args: argTypeList{arg_fd, arg_fs1}},\n\t// FSQRT.S fd, fs1\n\t{mask: 0xfff0007f, value: 0x58000053, op: FSQRT_S, args: argTypeList{arg_fd, arg_fs1}},\n\t// FSUB.D fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x0a000053, op: FSUB_D, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSUB.H fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x0c000053, op: FSUB_H, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSUB.Q fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x0e000053, op: FSUB_Q, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSUB.S fd, fs1, fs2\n\t{mask: 0xfe00007f, value: 0x08000053, op: FSUB_S, args: argTypeList{arg_fd, arg_fs1, arg_fs2}},\n\t// FSW fs2, rs1_store\n\t{mask: 0x0000707f, value: 0x00002027, op: FSW, args: argTypeList{arg_fs2, arg_rs1_store}},\n\t// JAL rd, jimm20\n\t{mask: 0x0000007f, value: 0x0000006f, op: JAL, args: argTypeList{arg_rd, arg_jimm20}},\n\t// JALR rd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00000067, op: JALR, args: argTypeList{arg_rd, arg_rs1_mem}},\n\t// LB rd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00000003, op: LB, args: argTypeList{arg_rd, arg_rs1_mem}},\n\t// LBU rd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00004003, op: LBU, args: argTypeList{arg_rd, arg_rs1_mem}},\n\t// LD rd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00003003, op: LD, args: argTypeList{arg_rd, arg_rs1_mem}},\n\t// LH rd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00001003, op: LH, args: argTypeList{arg_rd, arg_rs1_mem}},\n\t// LHU rd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00005003, op: LHU, args: argTypeList{arg_rd, arg_rs1_mem}},\n\t// LR.D rd, rs1_amo\n\t{mask: 0xfff0707f, value: 0x1000302f, op: LR_D, args: argTypeList{arg_rd, arg_rs1_amo}},\n\t// LR.D.AQ rd, rs1_amo\n\t{mask: 0xfff0707f, value: 0x1400302f, op: LR_D_AQ, args: argTypeList{arg_rd, arg_rs1_amo}},\n\t// LR.D.AQRL rd, rs1_amo\n\t{mask: 0xfff0707f, value: 0x1600302f, op: LR_D_AQRL, args: argTypeList{arg_rd, arg_rs1_amo}},\n\t// LR.D.RL rd, rs1_amo\n\t{mask: 0xfff0707f, value: 0x1200302f, op: LR_D_RL, args: argTypeList{arg_rd, arg_rs1_amo}},\n\t// LR.W rd, rs1_amo\n\t{mask: 0xfff0707f, value: 0x1000202f, op: LR_W, args: argTypeList{arg_rd, arg_rs1_amo}},\n\t// LR.W.AQ rd, rs1_amo\n\t{mask: 0xfff0707f, value: 0x1400202f, op: LR_W_AQ, args: argTypeList{arg_rd, arg_rs1_amo}},\n\t// LR.W.AQRL rd, rs1_amo\n\t{mask: 0xfff0707f, value: 0x1600202f, op: LR_W_AQRL, args: argTypeList{arg_rd, arg_rs1_amo}},\n\t// LR.W.RL rd, rs1_amo\n\t{mask: 0xfff0707f, value: 0x1200202f, op: LR_W_RL, args: argTypeList{arg_rd, arg_rs1_amo}},\n\t// LUI rd, imm20\n\t{mask: 0x0000007f, value: 0x00000037, op: LUI, args: argTypeList{arg_rd, arg_imm20}},\n\t// LW rd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00002003, op: LW, args: argTypeList{arg_rd, arg_rs1_mem}},\n\t// LWU rd, rs1_mem\n\t{mask: 0x0000707f, value: 0x00006003, op: LWU, args: argTypeList{arg_rd, arg_rs1_mem}},\n\t// MAX rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0a006033, op: MAX, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// MAXU rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0a007033, op: MAXU, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// MIN rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0a004033, op: MIN, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// MINU rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0a005033, op: MINU, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// MUL rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x02000033, op: MUL, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// MULH rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x02001033, op: MULH, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// MULHSU rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x02002033, op: MULHSU, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// MULHU rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x02003033, op: MULHU, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// MULW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0200003b, op: MULW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// OR rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x00006033, op: OR, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// ORC.B rd, rs1\n\t{mask: 0xfff0707f, value: 0x28705013, op: ORC_B, args: argTypeList{arg_rd, arg_rs1}},\n\t// ORI rd, rs1, imm12\n\t{mask: 0x0000707f, value: 0x00006013, op: ORI, args: argTypeList{arg_rd, arg_rs1, arg_imm12}},\n\t// ORN rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x40006033, op: ORN, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// REM rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x02006033, op: REM, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// REMU rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x02007033, op: REMU, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// REMUW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0200703b, op: REMUW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// REMW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0200603b, op: REMW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// REV8 rd, rs1\n\t{mask: 0xfff0707f, value: 0x6b805013, op: REV8, args: argTypeList{arg_rd, arg_rs1}},\n\t// ROL rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x60001033, op: ROL, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// ROLW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x6000103b, op: ROLW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// ROR rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x60005033, op: ROR, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// RORI rd, rs1, shamt6\n\t{mask: 0xfc00707f, value: 0x60005013, op: RORI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},\n\t// RORIW rd, rs1, shamt5\n\t{mask: 0xfe00707f, value: 0x6000501b, op: RORIW, args: argTypeList{arg_rd, arg_rs1, arg_shamt5}},\n\t// RORW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x6000503b, op: RORW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SB rs2, rs1_store\n\t{mask: 0x0000707f, value: 0x00000023, op: SB, args: argTypeList{arg_rs2, arg_rs1_store}},\n\t// SC.D rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x1800302f, op: SC_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// SC.D.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x1c00302f, op: SC_D_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// SC.D.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x1e00302f, op: SC_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// SC.D.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x1a00302f, op: SC_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// SC.W rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x1800202f, op: SC_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// SC.W.AQ rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x1c00202f, op: SC_W_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// SC.W.AQRL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x1e00202f, op: SC_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// SC.W.RL rd, rs2, rs1_amo\n\t{mask: 0xfe00707f, value: 0x1a00202f, op: SC_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_amo}},\n\t// SD rs2, rs1_store\n\t{mask: 0x0000707f, value: 0x00003023, op: SD, args: argTypeList{arg_rs2, arg_rs1_store}},\n\t// SEXT.B rd, rs1\n\t{mask: 0xfff0707f, value: 0x60401013, op: SEXT_B, args: argTypeList{arg_rd, arg_rs1}},\n\t// SEXT.H rd, rs1\n\t{mask: 0xfff0707f, value: 0x60501013, op: SEXT_H, args: argTypeList{arg_rd, arg_rs1}},\n\t// SH rs2, rs1_store\n\t{mask: 0x0000707f, value: 0x00001023, op: SH, args: argTypeList{arg_rs2, arg_rs1_store}},\n\t// SH1ADD rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x20002033, op: SH1ADD, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SH1ADD.UW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x2000203b, op: SH1ADD_UW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SH2ADD rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x20004033, op: SH2ADD, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SH2ADD.UW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x2000403b, op: SH2ADD_UW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SH3ADD rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x20006033, op: SH3ADD, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SH3ADD.UW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x2000603b, op: SH3ADD_UW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SLL rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x00001033, op: SLL, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SLLI rd, rs1, shamt6\n\t{mask: 0xfc00707f, value: 0x00001013, op: SLLI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},\n\t// SLLIW rd, rs1, shamt5\n\t{mask: 0xfe00707f, value: 0x0000101b, op: SLLIW, args: argTypeList{arg_rd, arg_rs1, arg_shamt5}},\n\t// SLLI.UW rd, rs1, shamt6\n\t{mask: 0xfc00707f, value: 0x0800101b, op: SLLI_UW, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},\n\t// SLLW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0000103b, op: SLLW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SLT rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x00002033, op: SLT, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SLTI rd, rs1, imm12\n\t{mask: 0x0000707f, value: 0x00002013, op: SLTI, args: argTypeList{arg_rd, arg_rs1, arg_imm12}},\n\t// SLTIU rd, rs1, imm12\n\t{mask: 0x0000707f, value: 0x00003013, op: SLTIU, args: argTypeList{arg_rd, arg_rs1, arg_imm12}},\n\t// SLTU rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x00003033, op: SLTU, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SRA rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x40005033, op: SRA, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SRAI rd, rs1, shamt6\n\t{mask: 0xfc00707f, value: 0x40005013, op: SRAI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},\n\t// SRAIW rd, rs1, shamt5\n\t{mask: 0xfe00707f, value: 0x4000501b, op: SRAIW, args: argTypeList{arg_rd, arg_rs1, arg_shamt5}},\n\t// SRAW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x4000503b, op: SRAW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SRL rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x00005033, op: SRL, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SRLI rd, rs1, shamt6\n\t{mask: 0xfc00707f, value: 0x00005013, op: SRLI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},\n\t// SRLIW rd, rs1, shamt5\n\t{mask: 0xfe00707f, value: 0x0000501b, op: SRLIW, args: argTypeList{arg_rd, arg_rs1, arg_shamt5}},\n\t// SRLW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x0000503b, op: SRLW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SUB rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x40000033, op: SUB, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SUBW rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x4000003b, op: SUBW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// SW rs2, rs1_store\n\t{mask: 0x0000707f, value: 0x00002023, op: SW, args: argTypeList{arg_rs2, arg_rs1_store}},\n\t// XNOR rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x40004033, op: XNOR, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// XOR rd, rs1, rs2\n\t{mask: 0xfe00707f, value: 0x00004033, op: XOR, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},\n\t// XORI rd, rs1, imm12\n\t{mask: 0x0000707f, value: 0x00004013, op: XORI, args: argTypeList{arg_rd, arg_rs1, arg_imm12}},\n\t// ZEXT.H rd, rs1\n\t{mask: 0xfff0707f, value: 0x0800403b, op: ZEXT_H, args: argTypeList{arg_rd, arg_rs1}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/x86/x86asm/Makefile",
    "content": "tables.go: ../x86map/map.go ../x86.csv \n\tgo run ../x86map/map.go -fmt=decoder ../x86.csv >_tables.go && gofmt _tables.go >tables.go && rm _tables.go\n\n"
  },
  {
    "path": "vendor/golang.org/x/arch/x86/x86asm/decode.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Table-driven decoding of x86 instructions.\n\npackage x86asm\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"runtime\"\n)\n\n// Set trace to true to cause the decoder to print the PC sequence\n// of the executed instruction codes. This is typically only useful\n// when you are running a test of a single input case.\nconst trace = false\n\n// A decodeOp is a single instruction in the decoder bytecode program.\n//\n// The decodeOps correspond to consuming and conditionally branching\n// on input bytes, consuming additional fields, and then interpreting\n// consumed data as instruction arguments. The names of the xRead and xArg\n// operations are taken from the Intel manual conventions, for example\n// Volume 2, Section 3.1.1, page 487 of\n// http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf\n//\n// The actual decoding program is generated by ../x86map.\n//\n// TODO(rsc): We may be able to merge various of the memory operands\n// since we don't care about, say, the distinction between m80dec and m80bcd.\n// Similarly, mm and mm1 have identical meaning, as do xmm and xmm1.\n\ntype decodeOp uint16\n\nconst (\n\txFail  decodeOp = iota // invalid instruction (return)\n\txMatch                 // completed match\n\txJump                  // jump to pc\n\n\txCondByte     // switch on instruction byte value\n\txCondSlashR   // read and switch on instruction /r value\n\txCondPrefix   // switch on presence of instruction prefix\n\txCondIs64     // switch on 64-bit processor mode\n\txCondDataSize // switch on operand size\n\txCondAddrSize // switch on address size\n\txCondIsMem    // switch on memory vs register argument\n\n\txSetOp // set instruction opcode\n\n\txReadSlashR // read /r\n\txReadIb     // read ib\n\txReadIw     // read iw\n\txReadId     // read id\n\txReadIo     // read io\n\txReadCb     // read cb\n\txReadCw     // read cw\n\txReadCd     // read cd\n\txReadCp     // read cp\n\txReadCm     // read cm\n\n\txArg1            // arg 1\n\txArg3            // arg 3\n\txArgAL           // arg AL\n\txArgAX           // arg AX\n\txArgCL           // arg CL\n\txArgCR0dashCR7   // arg CR0-CR7\n\txArgCS           // arg CS\n\txArgDR0dashDR7   // arg DR0-DR7\n\txArgDS           // arg DS\n\txArgDX           // arg DX\n\txArgEAX          // arg EAX\n\txArgEDX          // arg EDX\n\txArgES           // arg ES\n\txArgFS           // arg FS\n\txArgGS           // arg GS\n\txArgImm16        // arg imm16\n\txArgImm32        // arg imm32\n\txArgImm64        // arg imm64\n\txArgImm8         // arg imm8\n\txArgImm8u        // arg imm8 but record as unsigned\n\txArgImm16u       // arg imm8 but record as unsigned\n\txArgM            // arg m\n\txArgM128         // arg m128\n\txArgM256         // arg m256\n\txArgM1428byte    // arg m14/28byte\n\txArgM16          // arg m16\n\txArgM16and16     // arg m16&16\n\txArgM16and32     // arg m16&32\n\txArgM16and64     // arg m16&64\n\txArgM16colon16   // arg m16:16\n\txArgM16colon32   // arg m16:32\n\txArgM16colon64   // arg m16:64\n\txArgM16int       // arg m16int\n\txArgM2byte       // arg m2byte\n\txArgM32          // arg m32\n\txArgM32and32     // arg m32&32\n\txArgM32fp        // arg m32fp\n\txArgM32int       // arg m32int\n\txArgM512byte     // arg m512byte\n\txArgM64          // arg m64\n\txArgM64fp        // arg m64fp\n\txArgM64int       // arg m64int\n\txArgM8           // arg m8\n\txArgM80bcd       // arg m80bcd\n\txArgM80dec       // arg m80dec\n\txArgM80fp        // arg m80fp\n\txArgM94108byte   // arg m94/108byte\n\txArgMm           // arg mm\n\txArgMm1          // arg mm1\n\txArgMm2          // arg mm2\n\txArgMm2M64       // arg mm2/m64\n\txArgMmM32        // arg mm/m32\n\txArgMmM64        // arg mm/m64\n\txArgMem          // arg mem\n\txArgMoffs16      // arg moffs16\n\txArgMoffs32      // arg moffs32\n\txArgMoffs64      // arg moffs64\n\txArgMoffs8       // arg moffs8\n\txArgPtr16colon16 // arg ptr16:16\n\txArgPtr16colon32 // arg ptr16:32\n\txArgR16          // arg r16\n\txArgR16op        // arg r16 with +rw in opcode\n\txArgR32          // arg r32\n\txArgR32M16       // arg r32/m16\n\txArgR32M8        // arg r32/m8\n\txArgR32op        // arg r32 with +rd in opcode\n\txArgR64          // arg r64\n\txArgR64M16       // arg r64/m16\n\txArgR64op        // arg r64 with +rd in opcode\n\txArgR8           // arg r8\n\txArgR8op         // arg r8 with +rb in opcode\n\txArgRAX          // arg RAX\n\txArgRDX          // arg RDX\n\txArgRM           // arg r/m\n\txArgRM16         // arg r/m16\n\txArgRM32         // arg r/m32\n\txArgRM64         // arg r/m64\n\txArgRM8          // arg r/m8\n\txArgReg          // arg reg\n\txArgRegM16       // arg reg/m16\n\txArgRegM32       // arg reg/m32\n\txArgRegM8        // arg reg/m8\n\txArgRel16        // arg rel16\n\txArgRel32        // arg rel32\n\txArgRel8         // arg rel8\n\txArgSS           // arg SS\n\txArgST           // arg ST, aka ST(0)\n\txArgSTi          // arg ST(i) with +i in opcode\n\txArgSreg         // arg Sreg\n\txArgTR0dashTR7   // arg TR0-TR7\n\txArgXmm          // arg xmm\n\txArgXMM0         // arg <XMM0>\n\txArgXmm1         // arg xmm1\n\txArgXmm2         // arg xmm2\n\txArgXmm2M128     // arg xmm2/m128\n\txArgYmm2M256     // arg ymm2/m256\n\txArgXmm2M16      // arg xmm2/m16\n\txArgXmm2M32      // arg xmm2/m32\n\txArgXmm2M64      // arg xmm2/m64\n\txArgXmmM128      // arg xmm/m128\n\txArgXmmM32       // arg xmm/m32\n\txArgXmmM64       // arg xmm/m64\n\txArgYmm1         // arg ymm1\n\txArgRmf16        // arg r/m16 but force mod=3\n\txArgRmf32        // arg r/m32 but force mod=3\n\txArgRmf64        // arg r/m64 but force mod=3\n)\n\n// instPrefix returns an Inst describing just one prefix byte.\n// It is only used if there is a prefix followed by an unintelligible\n// or invalid instruction byte sequence.\nfunc instPrefix(b byte, mode int) (Inst, error) {\n\t// When tracing it is useful to see what called instPrefix to report an error.\n\tif trace {\n\t\t_, file, line, _ := runtime.Caller(1)\n\t\tfmt.Printf(\"%s:%d\\n\", file, line)\n\t}\n\tp := Prefix(b)\n\tswitch p {\n\tcase PrefixDataSize:\n\t\tif mode == 16 {\n\t\t\tp = PrefixData32\n\t\t} else {\n\t\t\tp = PrefixData16\n\t\t}\n\tcase PrefixAddrSize:\n\t\tif mode == 32 {\n\t\t\tp = PrefixAddr16\n\t\t} else {\n\t\t\tp = PrefixAddr32\n\t\t}\n\t}\n\t// Note: using composite literal with Prefix key confuses 'bundle' tool.\n\tinst := Inst{Len: 1}\n\tinst.Prefix = Prefixes{p}\n\treturn inst, nil\n}\n\n// truncated reports a truncated instruction.\n// For now we use instPrefix but perhaps later we will return\n// a specific error here.\nfunc truncated(src []byte, mode int) (Inst, error) {\n\tif len(src) == 0 {\n\t\treturn Inst{}, ErrTruncated\n\t}\n\treturn instPrefix(src[0], mode) // too long\n}\n\n// These are the errors returned by Decode.\nvar (\n\tErrInvalidMode  = errors.New(\"invalid x86 mode in Decode\")\n\tErrTruncated    = errors.New(\"truncated instruction\")\n\tErrUnrecognized = errors.New(\"unrecognized instruction\")\n)\n\n// decoderCover records coverage information for which parts\n// of the byte code have been executed.\nvar decoderCover []bool\n\n// Decode decodes the leading bytes in src as a single instruction.\n// The mode arguments specifies the assumed processor mode:\n// 16, 32, or 64 for 16-, 32-, and 64-bit execution modes.\nfunc Decode(src []byte, mode int) (inst Inst, err error) {\n\treturn decode1(src, mode, false)\n}\n\n// decode1 is the implementation of Decode but takes an extra\n// gnuCompat flag to cause it to change its behavior to mimic\n// bugs (or at least unique features) of GNU libopcodes as used\n// by objdump. We don't believe that logic is the right thing to do\n// in general, but when testing against libopcodes it simplifies the\n// comparison if we adjust a few small pieces of logic.\n// The affected logic is in the conditional branch for \"mandatory\" prefixes,\n// case xCondPrefix.\nfunc decode1(src []byte, mode int, gnuCompat bool) (Inst, error) {\n\tswitch mode {\n\tcase 16, 32, 64:\n\t\t// ok\n\t\t// TODO(rsc): 64-bit mode not tested, probably not working.\n\tdefault:\n\t\treturn Inst{}, ErrInvalidMode\n\t}\n\n\t// Maximum instruction size is 15 bytes.\n\t// If we need to read more, return 'truncated instruction.\n\tif len(src) > 15 {\n\t\tsrc = src[:15]\n\t}\n\n\tvar (\n\t\t// prefix decoding information\n\t\tpos           = 0    // position reading src\n\t\tnprefix       = 0    // number of prefixes\n\t\tlockIndex     = -1   // index of LOCK prefix in src and inst.Prefix\n\t\trepIndex      = -1   // index of REP/REPN prefix in src and inst.Prefix\n\t\tsegIndex      = -1   // index of Group 2 prefix in src and inst.Prefix\n\t\tdataSizeIndex = -1   // index of Group 3 prefix in src and inst.Prefix\n\t\taddrSizeIndex = -1   // index of Group 4 prefix in src and inst.Prefix\n\t\trex           Prefix // rex byte if present (or 0)\n\t\trexUsed       Prefix // bits used in rex byte\n\t\trexIndex      = -1   // index of rex byte\n\t\tvex           Prefix // use vex encoding\n\t\tvexIndex      = -1   // index of vex prefix\n\n\t\taddrMode = mode // address mode (width in bits)\n\t\tdataMode = mode // operand mode (width in bits)\n\n\t\t// decoded ModR/M fields\n\t\thaveModrm bool\n\t\tmodrm     int\n\t\tmod       int\n\t\tregop     int\n\t\trm        int\n\n\t\t// if ModR/M is memory reference, Mem form\n\t\tmem     Mem\n\t\thaveMem bool\n\n\t\t// decoded SIB fields\n\t\thaveSIB bool\n\t\tsib     int\n\t\tscale   int\n\t\tindex   int\n\t\tbase    int\n\t\tdisplen int\n\t\tdispoff int\n\n\t\t// decoded immediate values\n\t\timm     int64\n\t\timm8    int8\n\t\timmc    int64\n\t\timmcpos int\n\n\t\t// output\n\t\topshift int\n\t\tinst    Inst\n\t\tnarg    int // number of arguments written to inst\n\t)\n\n\tif mode == 64 {\n\t\tdataMode = 32\n\t}\n\n\t// Prefixes are certainly the most complex and underspecified part of\n\t// decoding x86 instructions. Although the manuals say things like\n\t// up to four prefixes, one from each group, nearly everyone seems to\n\t// agree that in practice as many prefixes as possible, including multiple\n\t// from a particular group or repetitions of a given prefix, can be used on\n\t// an instruction, provided the total instruction length including prefixes\n\t// does not exceed the agreed-upon maximum of 15 bytes.\n\t// Everyone also agrees that if one of these prefixes is the LOCK prefix\n\t// and the instruction is not one of the instructions that can be used with\n\t// the LOCK prefix or if the destination is not a memory operand,\n\t// then the instruction is invalid and produces the #UD exception.\n\t// However, that is the end of any semblance of agreement.\n\t//\n\t// What happens if prefixes are given that conflict with other prefixes?\n\t// For example, the memory segment overrides CS, DS, ES, FS, GS, SS\n\t// conflict with each other: only one segment can be in effect.\n\t// Disassemblers seem to agree that later prefixes take priority over\n\t// earlier ones. I have not taken the time to write assembly programs\n\t// to check to see if the hardware agrees.\n\t//\n\t// What happens if prefixes are given that have no meaning for the\n\t// specific instruction to which they are attached? It depends.\n\t// If they really have no meaning, they are ignored. However, a future\n\t// processor may assign a different meaning. As a disassembler, we\n\t// don't really know whether we're seeing a meaningless prefix or one\n\t// whose meaning we simply haven't been told yet.\n\t//\n\t// Combining the two questions, what happens when conflicting\n\t// extension prefixes are given? No one seems to know for sure.\n\t// For example, MOVQ is 66 0F D6 /r, MOVDQ2Q is F2 0F D6 /r,\n\t// and MOVQ2DQ is F3 0F D6 /r. What is '66 F2 F3 0F D6 /r'?\n\t// Which prefix wins? See the xCondPrefix prefix for more.\n\t//\n\t// Writing assembly test cases to divine which interpretation the\n\t// CPU uses might clarify the situation, but more likely it would\n\t// make the situation even less clear.\n\n\t// Read non-REX prefixes.\nReadPrefixes:\n\tfor ; pos < len(src); pos++ {\n\t\tp := Prefix(src[pos])\n\t\tswitch p {\n\t\tdefault:\n\t\t\tnprefix = pos\n\t\t\tbreak ReadPrefixes\n\n\t\t// Group 1 - lock and repeat prefixes\n\t\t// According to Intel, there should only be one from this set,\n\t\t// but according to AMD both can be present.\n\t\tcase 0xF0:\n\t\t\tif lockIndex >= 0 {\n\t\t\t\tinst.Prefix[lockIndex] |= PrefixIgnored\n\t\t\t}\n\t\t\tlockIndex = pos\n\t\tcase 0xF2, 0xF3:\n\t\t\tif repIndex >= 0 {\n\t\t\t\tinst.Prefix[repIndex] |= PrefixIgnored\n\t\t\t}\n\t\t\trepIndex = pos\n\n\t\t// Group 2 - segment override / branch hints\n\t\tcase 0x26, 0x2E, 0x36, 0x3E:\n\t\t\tif mode == 64 {\n\t\t\t\tp |= PrefixIgnored\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfallthrough\n\t\tcase 0x64, 0x65:\n\t\t\tif segIndex >= 0 {\n\t\t\t\tinst.Prefix[segIndex] |= PrefixIgnored\n\t\t\t}\n\t\t\tsegIndex = pos\n\n\t\t// Group 3 - operand size override\n\t\tcase 0x66:\n\t\t\tif mode == 16 {\n\t\t\t\tdataMode = 32\n\t\t\t\tp = PrefixData32\n\t\t\t} else {\n\t\t\t\tdataMode = 16\n\t\t\t\tp = PrefixData16\n\t\t\t}\n\t\t\tif dataSizeIndex >= 0 {\n\t\t\t\tinst.Prefix[dataSizeIndex] |= PrefixIgnored\n\t\t\t}\n\t\t\tdataSizeIndex = pos\n\n\t\t// Group 4 - address size override\n\t\tcase 0x67:\n\t\t\tif mode == 32 {\n\t\t\t\taddrMode = 16\n\t\t\t\tp = PrefixAddr16\n\t\t\t} else {\n\t\t\t\taddrMode = 32\n\t\t\t\tp = PrefixAddr32\n\t\t\t}\n\t\t\tif addrSizeIndex >= 0 {\n\t\t\t\tinst.Prefix[addrSizeIndex] |= PrefixIgnored\n\t\t\t}\n\t\t\taddrSizeIndex = pos\n\n\t\t//Group 5 - Vex encoding\n\t\tcase 0xC5:\n\t\t\tif pos == 0 && pos+1 < len(src) && (mode == 64 || (mode == 32 && src[pos+1]&0xc0 == 0xc0)) {\n\t\t\t\tvex = p\n\t\t\t\tvexIndex = pos\n\t\t\t\tinst.Prefix[pos] = p\n\t\t\t\tinst.Prefix[pos+1] = Prefix(src[pos+1])\n\t\t\t\tpos += 1\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\tnprefix = pos\n\t\t\t\tbreak ReadPrefixes\n\t\t\t}\n\t\tcase 0xC4:\n\t\t\tif pos == 0 && pos+2 < len(src) && (mode == 64 || (mode == 32 && src[pos+1]&0xc0 == 0xc0)) {\n\t\t\t\tvex = p\n\t\t\t\tvexIndex = pos\n\t\t\t\tinst.Prefix[pos] = p\n\t\t\t\tinst.Prefix[pos+1] = Prefix(src[pos+1])\n\t\t\t\tinst.Prefix[pos+2] = Prefix(src[pos+2])\n\t\t\t\tpos += 2\n\t\t\t\tcontinue\n\t\t\t} else {\n\t\t\t\tnprefix = pos\n\t\t\t\tbreak ReadPrefixes\n\t\t\t}\n\t\t}\n\n\t\tif pos >= len(inst.Prefix) {\n\t\t\treturn instPrefix(src[0], mode) // too long\n\t\t}\n\n\t\tinst.Prefix[pos] = p\n\t}\n\n\t// Read REX prefix.\n\tif pos < len(src) && mode == 64 && Prefix(src[pos]).IsREX() && vex == 0 {\n\t\trex = Prefix(src[pos])\n\t\trexIndex = pos\n\t\tif pos >= len(inst.Prefix) {\n\t\t\treturn instPrefix(src[0], mode) // too long\n\t\t}\n\t\tinst.Prefix[pos] = rex\n\t\tpos++\n\t\tif rex&PrefixREXW != 0 {\n\t\t\tdataMode = 64\n\t\t\tif dataSizeIndex >= 0 {\n\t\t\t\tinst.Prefix[dataSizeIndex] |= PrefixIgnored\n\t\t\t}\n\t\t}\n\t}\n\n\t// Decode instruction stream, interpreting decoding instructions.\n\t// opshift gives the shift to use when saving the next\n\t// opcode byte into inst.Opcode.\n\topshift = 24\n\n\t// Decode loop, executing decoder program.\n\tvar oldPC, prevPC int\nDecode:\n\tfor pc := 1; ; { // TODO uint\n\t\toldPC = prevPC\n\t\tprevPC = pc\n\t\tif trace {\n\t\t\tprintln(\"run\", pc)\n\t\t}\n\t\tx := decoder[pc]\n\t\tif decoderCover != nil {\n\t\t\tdecoderCover[pc] = true\n\t\t}\n\t\tpc++\n\n\t\t// Read and decode ModR/M if needed by opcode.\n\t\tswitch decodeOp(x) {\n\t\tcase xCondSlashR, xReadSlashR:\n\t\t\tif haveModrm {\n\t\t\t\treturn Inst{Len: pos}, errInternal\n\t\t\t}\n\t\t\thaveModrm = true\n\t\t\tif pos >= len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\tmodrm = int(src[pos])\n\t\t\tpos++\n\t\t\tif opshift >= 0 {\n\t\t\t\tinst.Opcode |= uint32(modrm) << uint(opshift)\n\t\t\t\topshift -= 8\n\t\t\t}\n\t\t\tmod = modrm >> 6\n\t\t\tregop = (modrm >> 3) & 07\n\t\t\trm = modrm & 07\n\t\t\tif rex&PrefixREXR != 0 {\n\t\t\t\trexUsed |= PrefixREXR\n\t\t\t\tregop |= 8\n\t\t\t}\n\t\t\tif addrMode == 16 {\n\t\t\t\t// 16-bit modrm form\n\t\t\t\tif mod != 3 {\n\t\t\t\t\thaveMem = true\n\t\t\t\t\tmem = addr16[rm]\n\t\t\t\t\tif rm == 6 && mod == 0 {\n\t\t\t\t\t\tmem.Base = 0\n\t\t\t\t\t}\n\n\t\t\t\t\t// Consume disp16 if present.\n\t\t\t\t\tif mod == 0 && rm == 6 || mod == 2 {\n\t\t\t\t\t\tif pos+2 > len(src) {\n\t\t\t\t\t\t\treturn truncated(src, mode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmem.Disp = int64(binary.LittleEndian.Uint16(src[pos:]))\n\t\t\t\t\t\tpos += 2\n\t\t\t\t\t}\n\n\t\t\t\t\t// Consume disp8 if present.\n\t\t\t\t\tif mod == 1 {\n\t\t\t\t\t\tif pos >= len(src) {\n\t\t\t\t\t\t\treturn truncated(src, mode)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmem.Disp = int64(int8(src[pos]))\n\t\t\t\t\t\tpos++\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\thaveMem = mod != 3\n\n\t\t\t\t// 32-bit or 64-bit form\n\t\t\t\t// Consume SIB encoding if present.\n\t\t\t\tif rm == 4 && mod != 3 {\n\t\t\t\t\thaveSIB = true\n\t\t\t\t\tif pos >= len(src) {\n\t\t\t\t\t\treturn truncated(src, mode)\n\t\t\t\t\t}\n\t\t\t\t\tsib = int(src[pos])\n\t\t\t\t\tpos++\n\t\t\t\t\tif opshift >= 0 {\n\t\t\t\t\t\tinst.Opcode |= uint32(sib) << uint(opshift)\n\t\t\t\t\t\topshift -= 8\n\t\t\t\t\t}\n\t\t\t\t\tscale = sib >> 6\n\t\t\t\t\tindex = (sib >> 3) & 07\n\t\t\t\t\tbase = sib & 07\n\t\t\t\t\tif rex&PrefixREXB != 0 || vex == 0xC4 && inst.Prefix[vexIndex+1]&0x20 == 0 {\n\t\t\t\t\t\trexUsed |= PrefixREXB\n\t\t\t\t\t\tbase |= 8\n\t\t\t\t\t}\n\t\t\t\t\tif rex&PrefixREXX != 0 || vex == 0xC4 && inst.Prefix[vexIndex+1]&0x40 == 0 {\n\t\t\t\t\t\trexUsed |= PrefixREXX\n\t\t\t\t\t\tindex |= 8\n\t\t\t\t\t}\n\n\t\t\t\t\tmem.Scale = 1 << uint(scale)\n\t\t\t\t\tif index == 4 {\n\t\t\t\t\t\t// no mem.Index\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmem.Index = baseRegForBits(addrMode) + Reg(index)\n\t\t\t\t\t}\n\t\t\t\t\tif base&7 == 5 && mod == 0 {\n\t\t\t\t\t\t// no mem.Base\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmem.Base = baseRegForBits(addrMode) + Reg(base)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif rex&PrefixREXB != 0 {\n\t\t\t\t\t\trexUsed |= PrefixREXB\n\t\t\t\t\t\trm |= 8\n\t\t\t\t\t}\n\t\t\t\t\tif mod == 0 && rm&7 == 5 || rm&7 == 4 {\n\t\t\t\t\t\t// base omitted\n\t\t\t\t\t} else if mod != 3 {\n\t\t\t\t\t\tmem.Base = baseRegForBits(addrMode) + Reg(rm)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Consume disp32 if present.\n\t\t\t\tif mod == 0 && (rm&7 == 5 || haveSIB && base&7 == 5) || mod == 2 {\n\t\t\t\t\tif pos+4 > len(src) {\n\t\t\t\t\t\treturn truncated(src, mode)\n\t\t\t\t\t}\n\t\t\t\t\tdispoff = pos\n\t\t\t\t\tdisplen = 4\n\t\t\t\t\tmem.Disp = int64(binary.LittleEndian.Uint32(src[pos:]))\n\t\t\t\t\tpos += 4\n\t\t\t\t}\n\n\t\t\t\t// Consume disp8 if present.\n\t\t\t\tif mod == 1 {\n\t\t\t\t\tif pos >= len(src) {\n\t\t\t\t\t\treturn truncated(src, mode)\n\t\t\t\t\t}\n\t\t\t\t\tdispoff = pos\n\t\t\t\t\tdisplen = 1\n\t\t\t\t\tmem.Disp = int64(int8(src[pos]))\n\t\t\t\t\tpos++\n\t\t\t\t}\n\n\t\t\t\t// In 64-bit, mod=0 rm=5 is PC-relative instead of just disp.\n\t\t\t\t// See Vol 2A. Table 2-7.\n\t\t\t\tif mode == 64 && mod == 0 && rm&7 == 5 {\n\t\t\t\t\tif addrMode == 32 {\n\t\t\t\t\t\tmem.Base = EIP\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmem.Base = RIP\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif segIndex >= 0 {\n\t\t\t\tmem.Segment = prefixToSegment(inst.Prefix[segIndex])\n\t\t\t}\n\t\t}\n\n\t\t// Execute single opcode.\n\t\tswitch decodeOp(x) {\n\t\tdefault:\n\t\t\tprintln(\"bad op\", x, \"at\", pc-1, \"from\", oldPC)\n\t\t\treturn Inst{Len: pos}, errInternal\n\n\t\tcase xFail:\n\t\t\tinst.Op = 0\n\t\t\tbreak Decode\n\n\t\tcase xMatch:\n\t\t\tbreak Decode\n\n\t\tcase xJump:\n\t\t\tpc = int(decoder[pc])\n\n\t\t// Conditional branches.\n\n\t\tcase xCondByte:\n\t\t\tif pos >= len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\tb := src[pos]\n\t\t\tn := int(decoder[pc])\n\t\t\tpc++\n\t\t\tfor i := 0; i < n; i++ {\n\t\t\t\txb, xpc := decoder[pc], int(decoder[pc+1])\n\t\t\t\tpc += 2\n\t\t\t\tif b == byte(xb) {\n\t\t\t\t\tpc = xpc\n\t\t\t\t\tpos++\n\t\t\t\t\tif opshift >= 0 {\n\t\t\t\t\t\tinst.Opcode |= uint32(b) << uint(opshift)\n\t\t\t\t\t\topshift -= 8\n\t\t\t\t\t}\n\t\t\t\t\tcontinue Decode\n\t\t\t\t}\n\t\t\t}\n\t\t\t// xCondByte is the only conditional with a fall through,\n\t\t\t// so that it can be used to pick off special cases before\n\t\t\t// an xCondSlash. If the fallthrough instruction is xFail,\n\t\t\t// advance the position so that the decoded instruction\n\t\t\t// size includes the byte we just compared against.\n\t\t\tif decodeOp(decoder[pc]) == xJump {\n\t\t\t\tpc = int(decoder[pc+1])\n\t\t\t}\n\t\t\tif decodeOp(decoder[pc]) == xFail {\n\t\t\t\tpos++\n\t\t\t}\n\n\t\tcase xCondIs64:\n\t\t\tif mode == 64 {\n\t\t\t\tpc = int(decoder[pc+1])\n\t\t\t} else {\n\t\t\t\tpc = int(decoder[pc])\n\t\t\t}\n\n\t\tcase xCondIsMem:\n\t\t\tmem := haveMem\n\t\t\tif !haveModrm {\n\t\t\t\tif pos >= len(src) {\n\t\t\t\t\treturn instPrefix(src[0], mode) // too long\n\t\t\t\t}\n\t\t\t\tmem = src[pos]>>6 != 3\n\t\t\t}\n\t\t\tif mem {\n\t\t\t\tpc = int(decoder[pc+1])\n\t\t\t} else {\n\t\t\t\tpc = int(decoder[pc])\n\t\t\t}\n\n\t\tcase xCondDataSize:\n\t\t\tswitch dataMode {\n\t\t\tcase 16:\n\t\t\t\tif dataSizeIndex >= 0 {\n\t\t\t\t\tinst.Prefix[dataSizeIndex] |= PrefixImplicit\n\t\t\t\t}\n\t\t\t\tpc = int(decoder[pc])\n\t\t\tcase 32:\n\t\t\t\tif dataSizeIndex >= 0 {\n\t\t\t\t\tinst.Prefix[dataSizeIndex] |= PrefixImplicit\n\t\t\t\t}\n\t\t\t\tpc = int(decoder[pc+1])\n\t\t\tcase 64:\n\t\t\t\trexUsed |= PrefixREXW\n\t\t\t\tpc = int(decoder[pc+2])\n\t\t\t}\n\n\t\tcase xCondAddrSize:\n\t\t\tswitch addrMode {\n\t\t\tcase 16:\n\t\t\t\tif addrSizeIndex >= 0 {\n\t\t\t\t\tinst.Prefix[addrSizeIndex] |= PrefixImplicit\n\t\t\t\t}\n\t\t\t\tpc = int(decoder[pc])\n\t\t\tcase 32:\n\t\t\t\tif addrSizeIndex >= 0 {\n\t\t\t\t\tinst.Prefix[addrSizeIndex] |= PrefixImplicit\n\t\t\t\t}\n\t\t\t\tpc = int(decoder[pc+1])\n\t\t\tcase 64:\n\t\t\t\tpc = int(decoder[pc+2])\n\t\t\t}\n\n\t\tcase xCondPrefix:\n\t\t\t// Conditional branch based on presence or absence of prefixes.\n\t\t\t// The conflict cases here are completely undocumented and\n\t\t\t// differ significantly between GNU libopcodes and Intel xed.\n\t\t\t// I have not written assembly code to divine what various CPUs\n\t\t\t// do, but it wouldn't surprise me if they are not consistent either.\n\t\t\t//\n\t\t\t// The basic idea is to switch on the presence of a prefix, so that\n\t\t\t// for example:\n\t\t\t//\n\t\t\t//\txCondPrefix, 4\n\t\t\t//\t0xF3, 123,\n\t\t\t//\t0xF2, 234,\n\t\t\t//\t0x66, 345,\n\t\t\t//\t0, 456\n\t\t\t//\n\t\t\t// branch to 123 if the F3 prefix is present, 234 if the F2 prefix\n\t\t\t// is present, 66 if the 345 prefix is present, and 456 otherwise.\n\t\t\t// The prefixes are given in descending order so that the 0 will be last.\n\t\t\t//\n\t\t\t// It is unclear what should happen if multiple conditions are\n\t\t\t// satisfied: what if F2 and F3 are both present, or if 66 and F2\n\t\t\t// are present, or if all three are present? The one chosen becomes\n\t\t\t// part of the opcode and the others do not. Perhaps the answer\n\t\t\t// depends on the specific opcodes in question.\n\t\t\t//\n\t\t\t// The only clear example is that CRC32 is F2 0F 38 F1 /r, and\n\t\t\t// it comes in 16-bit and 32-bit forms based on the 66 prefix,\n\t\t\t// so 66 F2 0F 38 F1 /r should be treated as F2 taking priority,\n\t\t\t// with the 66 being only an operand size override, and probably\n\t\t\t// F2 66 0F 38 F1 /r should be treated the same.\n\t\t\t// Perhaps that rule is specific to the case of CRC32, since no\n\t\t\t// 66 0F 38 F1 instruction is defined (today) (that we know of).\n\t\t\t// However, both libopcodes and xed seem to generalize this\n\t\t\t// example and choose F2/F3 in preference to 66, and we\n\t\t\t// do the same.\n\t\t\t//\n\t\t\t// Next, what if both F2 and F3 are present? Which wins?\n\t\t\t// The Intel xed rule, and ours, is that the one that occurs last wins.\n\t\t\t// The GNU libopcodes rule, which we implement only in gnuCompat mode,\n\t\t\t// is that F3 beats F2 unless F3 has no special meaning, in which\n\t\t\t// case F3 can be a modified on an F2 special meaning.\n\t\t\t//\n\t\t\t// Concretely,\n\t\t\t//\t66 0F D6 /r is MOVQ\n\t\t\t//\tF2 0F D6 /r is MOVDQ2Q\n\t\t\t//\tF3 0F D6 /r is MOVQ2DQ.\n\t\t\t//\n\t\t\t//\tF2 66 0F D6 /r is 66 + MOVDQ2Q always.\n\t\t\t//\t66 F2 0F D6 /r is 66 + MOVDQ2Q always.\n\t\t\t//\tF3 66 0F D6 /r is 66 + MOVQ2DQ always.\n\t\t\t//\t66 F3 0F D6 /r is 66 + MOVQ2DQ always.\n\t\t\t//\tF2 F3 0F D6 /r is F2 + MOVQ2DQ always.\n\t\t\t//\tF3 F2 0F D6 /r is F3 + MOVQ2DQ in Intel xed, but F2 + MOVQ2DQ in GNU libopcodes.\n\t\t\t//\tAdding 66 anywhere in the prefix section of the\n\t\t\t//\tlast two cases does not change the outcome.\n\t\t\t//\n\t\t\t// Finally, what if there is a variant in which 66 is a mandatory\n\t\t\t// prefix rather than an operand size override, but we know of\n\t\t\t// no corresponding F2/F3 form, and we see both F2/F3 and 66.\n\t\t\t// Does F2/F3 still take priority, so that the result is an unknown\n\t\t\t// instruction, or does the 66 take priority, so that the extended\n\t\t\t// 66 instruction should be interpreted as having a REP/REPN prefix?\n\t\t\t// Intel xed does the former and GNU libopcodes does the latter.\n\t\t\t// We side with Intel xed, unless we are trying to match libopcodes\n\t\t\t// more closely during the comparison-based test suite.\n\t\t\t//\n\t\t\t// In 64-bit mode REX.W is another valid prefix to test for, but\n\t\t\t// there is less ambiguity about that. When present, REX.W is\n\t\t\t// always the first entry in the table.\n\t\t\tn := int(decoder[pc])\n\t\t\tpc++\n\t\t\tsawF3 := false\n\t\t\tfor j := 0; j < n; j++ {\n\t\t\t\tprefix := Prefix(decoder[pc+2*j])\n\t\t\t\tif prefix.IsREX() {\n\t\t\t\t\trexUsed |= prefix\n\t\t\t\t\tif rex&prefix == prefix {\n\t\t\t\t\t\tpc = int(decoder[pc+2*j+1])\n\t\t\t\t\t\tcontinue Decode\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tok := false\n\t\t\t\tif prefix == 0 {\n\t\t\t\t\tok = true\n\t\t\t\t} else if prefix.IsREX() {\n\t\t\t\t\trexUsed |= prefix\n\t\t\t\t\tif rex&prefix == prefix {\n\t\t\t\t\t\tok = true\n\t\t\t\t\t}\n\t\t\t\t} else if prefix == 0xC5 || prefix == 0xC4 {\n\t\t\t\t\tif vex == prefix {\n\t\t\t\t\t\tok = true\n\t\t\t\t\t}\n\t\t\t\t} else if vex != 0 && (prefix == 0x0F || prefix == 0x0F38 || prefix == 0x0F3A ||\n\t\t\t\t\tprefix == 0x66 || prefix == 0xF2 || prefix == 0xF3) {\n\t\t\t\t\tvar vexM, vexP Prefix\n\t\t\t\t\tif vex == 0xC5 {\n\t\t\t\t\t\tvexM = 1 // 2 byte vex always implies 0F\n\t\t\t\t\t\tvexP = inst.Prefix[vexIndex+1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvexM = inst.Prefix[vexIndex+1]\n\t\t\t\t\t\tvexP = inst.Prefix[vexIndex+2]\n\t\t\t\t\t}\n\t\t\t\t\tswitch prefix {\n\t\t\t\t\tcase 0x66:\n\t\t\t\t\t\tok = vexP&3 == 1\n\t\t\t\t\tcase 0xF3:\n\t\t\t\t\t\tok = vexP&3 == 2\n\t\t\t\t\tcase 0xF2:\n\t\t\t\t\t\tok = vexP&3 == 3\n\t\t\t\t\tcase 0x0F:\n\t\t\t\t\t\tok = vexM&3 == 1\n\t\t\t\t\tcase 0x0F38:\n\t\t\t\t\t\tok = vexM&3 == 2\n\t\t\t\t\tcase 0x0F3A:\n\t\t\t\t\t\tok = vexM&3 == 3\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif prefix == 0xF3 {\n\t\t\t\t\t\tsawF3 = true\n\t\t\t\t\t}\n\t\t\t\t\tswitch prefix {\n\t\t\t\t\tcase PrefixLOCK:\n\t\t\t\t\t\tif lockIndex >= 0 {\n\t\t\t\t\t\t\tinst.Prefix[lockIndex] |= PrefixImplicit\n\t\t\t\t\t\t\tok = true\n\t\t\t\t\t\t}\n\t\t\t\t\tcase PrefixREP, PrefixREPN:\n\t\t\t\t\t\tif repIndex >= 0 && inst.Prefix[repIndex]&0xFF == prefix {\n\t\t\t\t\t\t\tinst.Prefix[repIndex] |= PrefixImplicit\n\t\t\t\t\t\t\tok = true\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif gnuCompat && !ok && prefix == 0xF3 && repIndex >= 0 && (j+1 >= n || decoder[pc+2*(j+1)] != 0xF2) {\n\t\t\t\t\t\t\t// Check to see if earlier prefix F3 is present.\n\t\t\t\t\t\t\tfor i := repIndex - 1; i >= 0; i-- {\n\t\t\t\t\t\t\t\tif inst.Prefix[i]&0xFF == prefix {\n\t\t\t\t\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\t\t\t\t\tok = true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif gnuCompat && !ok && prefix == 0xF2 && repIndex >= 0 && !sawF3 && inst.Prefix[repIndex]&0xFF == 0xF3 {\n\t\t\t\t\t\t\t// Check to see if earlier prefix F2 is present.\n\t\t\t\t\t\t\tfor i := repIndex - 1; i >= 0; i-- {\n\t\t\t\t\t\t\t\tif inst.Prefix[i]&0xFF == prefix {\n\t\t\t\t\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\t\t\t\t\tok = true\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\tcase PrefixCS, PrefixDS, PrefixES, PrefixFS, PrefixGS, PrefixSS:\n\t\t\t\t\t\tif segIndex >= 0 && inst.Prefix[segIndex]&0xFF == prefix {\n\t\t\t\t\t\t\tinst.Prefix[segIndex] |= PrefixImplicit\n\t\t\t\t\t\t\tok = true\n\t\t\t\t\t\t}\n\t\t\t\t\tcase PrefixDataSize:\n\t\t\t\t\t\t// Looking for 66 mandatory prefix.\n\t\t\t\t\t\t// The F2/F3 mandatory prefixes take priority when both are present.\n\t\t\t\t\t\t// If we got this far in the xCondPrefix table and an F2/F3 is present,\n\t\t\t\t\t\t// it means the table didn't have any entry for that prefix. But if 66 has\n\t\t\t\t\t\t// special meaning, perhaps F2/F3 have special meaning that we don't know.\n\t\t\t\t\t\t// Intel xed works this way, treating the F2/F3 as inhibiting the 66.\n\t\t\t\t\t\t// GNU libopcodes allows the 66 to match. We do what Intel xed does\n\t\t\t\t\t\t// except in gnuCompat mode.\n\t\t\t\t\t\tif repIndex >= 0 && !gnuCompat {\n\t\t\t\t\t\t\tinst.Op = 0\n\t\t\t\t\t\t\tbreak Decode\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif dataSizeIndex >= 0 {\n\t\t\t\t\t\t\tinst.Prefix[dataSizeIndex] |= PrefixImplicit\n\t\t\t\t\t\t\tok = true\n\t\t\t\t\t\t}\n\t\t\t\t\tcase PrefixAddrSize:\n\t\t\t\t\t\tif addrSizeIndex >= 0 {\n\t\t\t\t\t\t\tinst.Prefix[addrSizeIndex] |= PrefixImplicit\n\t\t\t\t\t\t\tok = true\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ok {\n\t\t\t\t\tpc = int(decoder[pc+2*j+1])\n\t\t\t\t\tcontinue Decode\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst.Op = 0\n\t\t\tbreak Decode\n\n\t\tcase xCondSlashR:\n\t\t\tpc = int(decoder[pc+regop&7])\n\n\t\t// Input.\n\n\t\tcase xReadSlashR:\n\t\t\t// done above\n\n\t\tcase xReadIb:\n\t\t\tif pos >= len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\timm8 = int8(src[pos])\n\t\t\tpos++\n\n\t\tcase xReadIw:\n\t\t\tif pos+2 > len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\timm = int64(binary.LittleEndian.Uint16(src[pos:]))\n\t\t\tpos += 2\n\n\t\tcase xReadId:\n\t\t\tif pos+4 > len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\timm = int64(binary.LittleEndian.Uint32(src[pos:]))\n\t\t\tpos += 4\n\n\t\tcase xReadIo:\n\t\t\tif pos+8 > len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\timm = int64(binary.LittleEndian.Uint64(src[pos:]))\n\t\t\tpos += 8\n\n\t\tcase xReadCb:\n\t\t\tif pos >= len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\timmcpos = pos\n\t\t\timmc = int64(src[pos])\n\t\t\tpos++\n\n\t\tcase xReadCw:\n\t\t\tif pos+2 > len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\timmcpos = pos\n\t\t\timmc = int64(binary.LittleEndian.Uint16(src[pos:]))\n\t\t\tpos += 2\n\n\t\tcase xReadCm:\n\t\t\timmcpos = pos\n\t\t\tif addrMode == 16 {\n\t\t\t\tif pos+2 > len(src) {\n\t\t\t\t\treturn truncated(src, mode)\n\t\t\t\t}\n\t\t\t\timmc = int64(binary.LittleEndian.Uint16(src[pos:]))\n\t\t\t\tpos += 2\n\t\t\t} else if addrMode == 32 {\n\t\t\t\tif pos+4 > len(src) {\n\t\t\t\t\treturn truncated(src, mode)\n\t\t\t\t}\n\t\t\t\timmc = int64(binary.LittleEndian.Uint32(src[pos:]))\n\t\t\t\tpos += 4\n\t\t\t} else {\n\t\t\t\tif pos+8 > len(src) {\n\t\t\t\t\treturn truncated(src, mode)\n\t\t\t\t}\n\t\t\t\timmc = int64(binary.LittleEndian.Uint64(src[pos:]))\n\t\t\t\tpos += 8\n\t\t\t}\n\t\tcase xReadCd:\n\t\t\timmcpos = pos\n\t\t\tif pos+4 > len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\timmc = int64(binary.LittleEndian.Uint32(src[pos:]))\n\t\t\tpos += 4\n\n\t\tcase xReadCp:\n\t\t\timmcpos = pos\n\t\t\tif pos+6 > len(src) {\n\t\t\t\treturn truncated(src, mode)\n\t\t\t}\n\t\t\tw := binary.LittleEndian.Uint32(src[pos:])\n\t\t\tw2 := binary.LittleEndian.Uint16(src[pos+4:])\n\t\t\timmc = int64(w2)<<32 | int64(w)\n\t\t\tpos += 6\n\n\t\t// Output.\n\n\t\tcase xSetOp:\n\t\t\tinst.Op = Op(decoder[pc])\n\t\t\tpc++\n\n\t\tcase xArg1,\n\t\t\txArg3,\n\t\t\txArgAL,\n\t\t\txArgAX,\n\t\t\txArgCL,\n\t\t\txArgCS,\n\t\t\txArgDS,\n\t\t\txArgDX,\n\t\t\txArgEAX,\n\t\t\txArgEDX,\n\t\t\txArgES,\n\t\t\txArgFS,\n\t\t\txArgGS,\n\t\t\txArgRAX,\n\t\t\txArgRDX,\n\t\t\txArgSS,\n\t\t\txArgST,\n\t\t\txArgXMM0:\n\t\t\tinst.Args[narg] = fixedArg[x]\n\t\t\tnarg++\n\n\t\tcase xArgImm8:\n\t\t\tinst.Args[narg] = Imm(imm8)\n\t\t\tnarg++\n\n\t\tcase xArgImm8u:\n\t\t\tinst.Args[narg] = Imm(uint8(imm8))\n\t\t\tnarg++\n\n\t\tcase xArgImm16:\n\t\t\tinst.Args[narg] = Imm(int16(imm))\n\t\t\tnarg++\n\n\t\tcase xArgImm16u:\n\t\t\tinst.Args[narg] = Imm(uint16(imm))\n\t\t\tnarg++\n\n\t\tcase xArgImm32:\n\t\t\tinst.Args[narg] = Imm(int32(imm))\n\t\t\tnarg++\n\n\t\tcase xArgImm64:\n\t\t\tinst.Args[narg] = Imm(imm)\n\t\t\tnarg++\n\n\t\tcase xArgM,\n\t\t\txArgM128,\n\t\t\txArgM256,\n\t\t\txArgM1428byte,\n\t\t\txArgM16,\n\t\t\txArgM16and16,\n\t\t\txArgM16and32,\n\t\t\txArgM16and64,\n\t\t\txArgM16colon16,\n\t\t\txArgM16colon32,\n\t\t\txArgM16colon64,\n\t\t\txArgM16int,\n\t\t\txArgM2byte,\n\t\t\txArgM32,\n\t\t\txArgM32and32,\n\t\t\txArgM32fp,\n\t\t\txArgM32int,\n\t\t\txArgM512byte,\n\t\t\txArgM64,\n\t\t\txArgM64fp,\n\t\t\txArgM64int,\n\t\t\txArgM8,\n\t\t\txArgM80bcd,\n\t\t\txArgM80dec,\n\t\t\txArgM80fp,\n\t\t\txArgM94108byte,\n\t\t\txArgMem:\n\t\t\tif !haveMem {\n\t\t\t\tinst.Op = 0\n\t\t\t\tbreak Decode\n\t\t\t}\n\t\t\tinst.Args[narg] = mem\n\t\t\tinst.MemBytes = int(memBytes[decodeOp(x)])\n\t\t\tif mem.Base == RIP {\n\t\t\t\tinst.PCRel = displen\n\t\t\t\tinst.PCRelOff = dispoff\n\t\t\t}\n\t\t\tnarg++\n\n\t\tcase xArgPtr16colon16:\n\t\t\tinst.Args[narg] = Imm(immc >> 16)\n\t\t\tinst.Args[narg+1] = Imm(immc & (1<<16 - 1))\n\t\t\tnarg += 2\n\n\t\tcase xArgPtr16colon32:\n\t\t\tinst.Args[narg] = Imm(immc >> 32)\n\t\t\tinst.Args[narg+1] = Imm(immc & (1<<32 - 1))\n\t\t\tnarg += 2\n\n\t\tcase xArgMoffs8, xArgMoffs16, xArgMoffs32, xArgMoffs64:\n\t\t\t// TODO(rsc): Can address be 64 bits?\n\t\t\tmem = Mem{Disp: int64(immc)}\n\t\t\tif segIndex >= 0 {\n\t\t\t\tmem.Segment = prefixToSegment(inst.Prefix[segIndex])\n\t\t\t\tinst.Prefix[segIndex] |= PrefixImplicit\n\t\t\t}\n\t\t\tinst.Args[narg] = mem\n\t\t\tinst.MemBytes = int(memBytes[decodeOp(x)])\n\t\t\tif mem.Base == RIP {\n\t\t\t\tinst.PCRel = displen\n\t\t\t\tinst.PCRelOff = dispoff\n\t\t\t}\n\t\t\tnarg++\n\n\t\tcase xArgYmm1:\n\t\t\tbase := baseReg[x]\n\t\t\tindex := Reg(regop)\n\t\t\tif inst.Prefix[vexIndex+1]&0x80 == 0 {\n\t\t\t\tindex += 8\n\t\t\t}\n\t\t\tinst.Args[narg] = base + index\n\t\t\tnarg++\n\n\t\tcase xArgR8, xArgR16, xArgR32, xArgR64, xArgXmm, xArgXmm1, xArgDR0dashDR7:\n\t\t\tbase := baseReg[x]\n\t\t\tindex := Reg(regop)\n\t\t\tif rex != 0 && base == AL && index >= 4 {\n\t\t\t\trexUsed |= PrefixREX\n\t\t\t\tindex -= 4\n\t\t\t\tbase = SPB\n\t\t\t}\n\t\t\tinst.Args[narg] = base + index\n\t\t\tnarg++\n\n\t\tcase xArgMm, xArgMm1, xArgTR0dashTR7:\n\t\t\tinst.Args[narg] = baseReg[x] + Reg(regop&7)\n\t\t\tnarg++\n\n\t\tcase xArgCR0dashCR7:\n\t\t\t// AMD documents an extension that the LOCK prefix\n\t\t\t// can be used in place of a REX prefix in order to access\n\t\t\t// CR8 from 32-bit mode. The LOCK prefix is allowed in\n\t\t\t// all modes, provided the corresponding CPUID bit is set.\n\t\t\tif lockIndex >= 0 {\n\t\t\t\tinst.Prefix[lockIndex] |= PrefixImplicit\n\t\t\t\tregop += 8\n\t\t\t}\n\t\t\tinst.Args[narg] = CR0 + Reg(regop)\n\t\t\tnarg++\n\n\t\tcase xArgSreg:\n\t\t\tregop &= 7\n\t\t\tif regop >= 6 {\n\t\t\t\tinst.Op = 0\n\t\t\t\tbreak Decode\n\t\t\t}\n\t\t\tinst.Args[narg] = ES + Reg(regop)\n\t\t\tnarg++\n\n\t\tcase xArgRmf16, xArgRmf32, xArgRmf64:\n\t\t\tbase := baseReg[x]\n\t\t\tindex := Reg(modrm & 07)\n\t\t\tif rex&PrefixREXB != 0 {\n\t\t\t\trexUsed |= PrefixREXB\n\t\t\t\tindex += 8\n\t\t\t}\n\t\t\tinst.Args[narg] = base + index\n\t\t\tnarg++\n\n\t\tcase xArgR8op, xArgR16op, xArgR32op, xArgR64op, xArgSTi:\n\t\t\tn := inst.Opcode >> uint(opshift+8) & 07\n\t\t\tbase := baseReg[x]\n\t\t\tindex := Reg(n)\n\t\t\tif rex&PrefixREXB != 0 && decodeOp(x) != xArgSTi {\n\t\t\t\trexUsed |= PrefixREXB\n\t\t\t\tindex += 8\n\t\t\t}\n\t\t\tif rex != 0 && base == AL && index >= 4 {\n\t\t\t\trexUsed |= PrefixREX\n\t\t\t\tindex -= 4\n\t\t\t\tbase = SPB\n\t\t\t}\n\t\t\tinst.Args[narg] = base + index\n\t\t\tnarg++\n\t\tcase xArgRM8, xArgRM16, xArgRM32, xArgRM64, xArgR32M16, xArgR32M8, xArgR64M16,\n\t\t\txArgMmM32, xArgMmM64, xArgMm2M64,\n\t\t\txArgXmm2M16, xArgXmm2M32, xArgXmm2M64, xArgXmmM64, xArgXmmM128, xArgXmmM32, xArgXmm2M128,\n\t\t\txArgYmm2M256:\n\t\t\tif haveMem {\n\t\t\t\tinst.Args[narg] = mem\n\t\t\t\tinst.MemBytes = int(memBytes[decodeOp(x)])\n\t\t\t\tif mem.Base == RIP {\n\t\t\t\t\tinst.PCRel = displen\n\t\t\t\t\tinst.PCRelOff = dispoff\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tbase := baseReg[x]\n\t\t\t\tindex := Reg(rm)\n\t\t\t\tswitch decodeOp(x) {\n\t\t\t\tcase xArgMmM32, xArgMmM64, xArgMm2M64:\n\t\t\t\t\t// There are only 8 MMX registers, so these ignore the REX.X bit.\n\t\t\t\t\tindex &= 7\n\t\t\t\tcase xArgRM8:\n\t\t\t\t\tif rex != 0 && index >= 4 {\n\t\t\t\t\t\trexUsed |= PrefixREX\n\t\t\t\t\t\tindex -= 4\n\t\t\t\t\t\tbase = SPB\n\t\t\t\t\t}\n\t\t\t\tcase xArgYmm2M256:\n\t\t\t\t\tif vex == 0xC4 && inst.Prefix[vexIndex+1]&0x40 == 0x40 {\n\t\t\t\t\t\tindex += 8\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tinst.Args[narg] = base + index\n\t\t\t}\n\t\t\tnarg++\n\n\t\tcase xArgMm2: // register only; TODO(rsc): Handle with tag modrm_regonly tag\n\t\t\tif haveMem {\n\t\t\t\tinst.Op = 0\n\t\t\t\tbreak Decode\n\t\t\t}\n\t\t\tinst.Args[narg] = baseReg[x] + Reg(rm&7)\n\t\t\tnarg++\n\n\t\tcase xArgXmm2: // register only; TODO(rsc): Handle with tag modrm_regonly tag\n\t\t\tif haveMem {\n\t\t\t\tinst.Op = 0\n\t\t\t\tbreak Decode\n\t\t\t}\n\t\t\tinst.Args[narg] = baseReg[x] + Reg(rm)\n\t\t\tnarg++\n\n\t\tcase xArgRel8:\n\t\t\tinst.PCRelOff = immcpos\n\t\t\tinst.PCRel = 1\n\t\t\tinst.Args[narg] = Rel(int8(immc))\n\t\t\tnarg++\n\n\t\tcase xArgRel16:\n\t\t\tinst.PCRelOff = immcpos\n\t\t\tinst.PCRel = 2\n\t\t\tinst.Args[narg] = Rel(int16(immc))\n\t\t\tnarg++\n\n\t\tcase xArgRel32:\n\t\t\tinst.PCRelOff = immcpos\n\t\t\tinst.PCRel = 4\n\t\t\tinst.Args[narg] = Rel(int32(immc))\n\t\t\tnarg++\n\t\t}\n\t}\n\n\tif inst.Op == 0 {\n\t\t// Invalid instruction.\n\t\tif nprefix > 0 {\n\t\t\treturn instPrefix(src[0], mode) // invalid instruction\n\t\t}\n\t\treturn Inst{Len: pos}, ErrUnrecognized\n\t}\n\n\t// Matched! Hooray!\n\n\t// 90 decodes as XCHG EAX, EAX but is NOP.\n\t// 66 90 decodes as XCHG AX, AX and is NOP too.\n\t// 48 90 decodes as XCHG RAX, RAX and is NOP too.\n\t// 43 90 decodes as XCHG R8D, EAX and is *not* NOP.\n\t// F3 90 decodes as REP XCHG EAX, EAX but is PAUSE.\n\t// It's all too special to handle in the decoding tables, at least for now.\n\tif inst.Op == XCHG && inst.Opcode>>24 == 0x90 {\n\t\tif inst.Args[0] == RAX || inst.Args[0] == EAX || inst.Args[0] == AX {\n\t\t\tinst.Op = NOP\n\t\t\tif dataSizeIndex >= 0 {\n\t\t\t\tinst.Prefix[dataSizeIndex] &^= PrefixImplicit\n\t\t\t}\n\t\t\tinst.Args[0] = nil\n\t\t\tinst.Args[1] = nil\n\t\t}\n\t\tif repIndex >= 0 && inst.Prefix[repIndex] == 0xF3 {\n\t\t\tinst.Prefix[repIndex] |= PrefixImplicit\n\t\t\tinst.Op = PAUSE\n\t\t\tinst.Args[0] = nil\n\t\t\tinst.Args[1] = nil\n\t\t} else if gnuCompat {\n\t\t\tfor i := nprefix - 1; i >= 0; i-- {\n\t\t\t\tif inst.Prefix[i]&0xFF == 0xF3 {\n\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\tinst.Op = PAUSE\n\t\t\t\t\tinst.Args[0] = nil\n\t\t\t\t\tinst.Args[1] = nil\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// defaultSeg returns the default segment for an implicit\n\t// memory reference: the final override if present, or else DS.\n\tdefaultSeg := func() Reg {\n\t\tif segIndex >= 0 {\n\t\t\tinst.Prefix[segIndex] |= PrefixImplicit\n\t\t\treturn prefixToSegment(inst.Prefix[segIndex])\n\t\t}\n\t\treturn DS\n\t}\n\n\t// Add implicit arguments not present in the tables.\n\t// Normally we shy away from making implicit arguments explicit,\n\t// following the Intel manuals, but adding the arguments seems\n\t// the best way to express the effect of the segment override prefixes.\n\t// TODO(rsc): Perhaps add these to the tables and\n\t// create bytecode instructions for them.\n\tusedAddrSize := false\n\tswitch inst.Op {\n\tcase INSB, INSW, INSD:\n\t\tinst.Args[0] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}\n\t\tinst.Args[1] = DX\n\t\tusedAddrSize = true\n\n\tcase OUTSB, OUTSW, OUTSD:\n\t\tinst.Args[0] = DX\n\t\tinst.Args[1] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + SI - AX}\n\t\tusedAddrSize = true\n\n\tcase MOVSB, MOVSW, MOVSD, MOVSQ:\n\t\tinst.Args[0] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}\n\t\tinst.Args[1] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + SI - AX}\n\t\tusedAddrSize = true\n\n\tcase CMPSB, CMPSW, CMPSD, CMPSQ:\n\t\tinst.Args[0] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + SI - AX}\n\t\tinst.Args[1] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}\n\t\tusedAddrSize = true\n\n\tcase LODSB, LODSW, LODSD, LODSQ:\n\t\tswitch inst.Op {\n\t\tcase LODSB:\n\t\t\tinst.Args[0] = AL\n\t\tcase LODSW:\n\t\t\tinst.Args[0] = AX\n\t\tcase LODSD:\n\t\t\tinst.Args[0] = EAX\n\t\tcase LODSQ:\n\t\t\tinst.Args[0] = RAX\n\t\t}\n\t\tinst.Args[1] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + SI - AX}\n\t\tusedAddrSize = true\n\n\tcase STOSB, STOSW, STOSD, STOSQ:\n\t\tinst.Args[0] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}\n\t\tswitch inst.Op {\n\t\tcase STOSB:\n\t\t\tinst.Args[1] = AL\n\t\tcase STOSW:\n\t\t\tinst.Args[1] = AX\n\t\tcase STOSD:\n\t\t\tinst.Args[1] = EAX\n\t\tcase STOSQ:\n\t\t\tinst.Args[1] = RAX\n\t\t}\n\t\tusedAddrSize = true\n\n\tcase SCASB, SCASW, SCASD, SCASQ:\n\t\tinst.Args[1] = Mem{Segment: ES, Base: baseRegForBits(addrMode) + DI - AX}\n\t\tswitch inst.Op {\n\t\tcase SCASB:\n\t\t\tinst.Args[0] = AL\n\t\tcase SCASW:\n\t\t\tinst.Args[0] = AX\n\t\tcase SCASD:\n\t\t\tinst.Args[0] = EAX\n\t\tcase SCASQ:\n\t\t\tinst.Args[0] = RAX\n\t\t}\n\t\tusedAddrSize = true\n\n\tcase XLATB:\n\t\tinst.Args[0] = Mem{Segment: defaultSeg(), Base: baseRegForBits(addrMode) + BX - AX}\n\t\tusedAddrSize = true\n\t}\n\n\t// If we used the address size annotation to construct the\n\t// argument list, mark that prefix as implicit: it doesn't need\n\t// to be shown when printing the instruction.\n\tif haveMem || usedAddrSize {\n\t\tif addrSizeIndex >= 0 {\n\t\t\tinst.Prefix[addrSizeIndex] |= PrefixImplicit\n\t\t}\n\t}\n\n\t// Similarly, if there's some memory operand, the segment\n\t// will be shown there and doesn't need to be shown as an\n\t// explicit prefix.\n\tif haveMem {\n\t\tif segIndex >= 0 {\n\t\t\tinst.Prefix[segIndex] |= PrefixImplicit\n\t\t}\n\t}\n\n\t// Branch predict prefixes are overloaded segment prefixes,\n\t// since segment prefixes don't make sense on conditional jumps.\n\t// Rewrite final instance to prediction prefix.\n\t// The set of instructions to which the prefixes apply (other then the\n\t// Jcc conditional jumps) is not 100% clear from the manuals, but\n\t// the disassemblers seem to agree about the LOOP and JCXZ instructions,\n\t// so we'll follow along.\n\t// TODO(rsc): Perhaps this instruction class should be derived from the CSV.\n\tif isCondJmp[inst.Op] || isLoop[inst.Op] || inst.Op == JCXZ || inst.Op == JECXZ || inst.Op == JRCXZ {\n\tPredictLoop:\n\t\tfor i := nprefix - 1; i >= 0; i-- {\n\t\t\tp := inst.Prefix[i]\n\t\t\tswitch p & 0xFF {\n\t\t\tcase PrefixCS:\n\t\t\t\tinst.Prefix[i] = PrefixPN\n\t\t\t\tbreak PredictLoop\n\t\t\tcase PrefixDS:\n\t\t\t\tinst.Prefix[i] = PrefixPT\n\t\t\t\tbreak PredictLoop\n\t\t\t}\n\t\t}\n\t}\n\n\t// The BND prefix is part of the Intel Memory Protection Extensions (MPX).\n\t// A REPN applied to certain control transfers is a BND prefix to bound\n\t// the range of possible destinations. There's surprisingly little documentation\n\t// about this, so we just do what libopcodes and xed agree on.\n\t// In particular, it's unclear why a REPN applied to LOOP or JCXZ instructions\n\t// does not turn into a BND.\n\t// TODO(rsc): Perhaps this instruction class should be derived from the CSV.\n\tif isCondJmp[inst.Op] || inst.Op == JMP || inst.Op == CALL || inst.Op == RET {\n\t\tfor i := nprefix - 1; i >= 0; i-- {\n\t\t\tp := inst.Prefix[i]\n\t\t\tif p&^PrefixIgnored == PrefixREPN {\n\t\t\t\tinst.Prefix[i] = PrefixBND\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\n\t// The LOCK prefix only applies to certain instructions, and then only\n\t// to instances of the instruction with a memory destination.\n\t// Other uses of LOCK are invalid and cause a processor exception,\n\t// in contrast to the \"just ignore it\" spirit applied to all other prefixes.\n\t// Mark invalid lock prefixes.\n\thasLock := false\n\tif lockIndex >= 0 && inst.Prefix[lockIndex]&PrefixImplicit == 0 {\n\t\tswitch inst.Op {\n\t\t// TODO(rsc): Perhaps this instruction class should be derived from the CSV.\n\t\tcase ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, CMPXCHG16B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD, XCHG:\n\t\t\tif isMem(inst.Args[0]) {\n\t\t\t\thasLock = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfallthrough\n\t\tdefault:\n\t\t\tinst.Prefix[lockIndex] |= PrefixInvalid\n\t\t}\n\t}\n\n\t// In certain cases, all of which require a memory destination,\n\t// the REPN and REP prefixes are interpreted as XACQUIRE and XRELEASE\n\t// from the Intel Transactional Synchroniation Extensions (TSX).\n\t//\n\t// The specific rules are:\n\t// (1) Any instruction with a valid LOCK prefix can have XACQUIRE or XRELEASE.\n\t// (2) Any XCHG, which always has an implicit LOCK, can have XACQUIRE or XRELEASE.\n\t// (3) Any 0x88-, 0x89-, 0xC6-, or 0xC7-opcode MOV can have XRELEASE.\n\tif isMem(inst.Args[0]) {\n\t\tif inst.Op == XCHG {\n\t\t\thasLock = true\n\t\t}\n\n\t\tfor i := len(inst.Prefix) - 1; i >= 0; i-- {\n\t\t\tp := inst.Prefix[i] &^ PrefixIgnored\n\t\t\tswitch p {\n\t\t\tcase PrefixREPN:\n\t\t\t\tif hasLock {\n\t\t\t\t\tinst.Prefix[i] = inst.Prefix[i]&PrefixIgnored | PrefixXACQUIRE\n\t\t\t\t}\n\n\t\t\tcase PrefixREP:\n\t\t\t\tif hasLock {\n\t\t\t\t\tinst.Prefix[i] = inst.Prefix[i]&PrefixIgnored | PrefixXRELEASE\n\t\t\t\t}\n\n\t\t\t\tif inst.Op == MOV {\n\t\t\t\t\top := (inst.Opcode >> 24) &^ 1\n\t\t\t\t\tif op == 0x88 || op == 0xC6 {\n\t\t\t\t\t\tinst.Prefix[i] = inst.Prefix[i]&PrefixIgnored | PrefixXRELEASE\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// If REP is used on a non-REP-able instruction, mark the prefix as ignored.\n\tif repIndex >= 0 {\n\t\tswitch inst.Prefix[repIndex] {\n\t\tcase PrefixREP, PrefixREPN:\n\t\t\tswitch inst.Op {\n\t\t\t// According to the manuals, the REP/REPE prefix applies to all of these,\n\t\t\t// while the REPN applies only to some of them. However, both libopcodes\n\t\t\t// and xed show both prefixes explicitly for all instructions, so we do the same.\n\t\t\t// TODO(rsc): Perhaps this instruction class should be derived from the CSV.\n\t\t\tcase INSB, INSW, INSD,\n\t\t\t\tMOVSB, MOVSW, MOVSD, MOVSQ,\n\t\t\t\tOUTSB, OUTSW, OUTSD,\n\t\t\t\tLODSB, LODSW, LODSD, LODSQ,\n\t\t\t\tCMPSB, CMPSW, CMPSD, CMPSQ,\n\t\t\t\tSCASB, SCASW, SCASD, SCASQ,\n\t\t\t\tSTOSB, STOSW, STOSD, STOSQ:\n\t\t\t\t// ok\n\t\t\tdefault:\n\t\t\t\tinst.Prefix[repIndex] |= PrefixIgnored\n\t\t\t}\n\t\t}\n\t}\n\n\t// If REX was present, mark implicit if all the 1 bits were consumed.\n\tif rexIndex >= 0 {\n\t\tif rexUsed != 0 {\n\t\t\trexUsed |= PrefixREX\n\t\t}\n\t\tif rex&^rexUsed == 0 {\n\t\t\tinst.Prefix[rexIndex] |= PrefixImplicit\n\t\t}\n\t}\n\n\tinst.DataSize = dataMode\n\tinst.AddrSize = addrMode\n\tinst.Mode = mode\n\tinst.Len = pos\n\treturn inst, nil\n}\n\nvar errInternal = errors.New(\"internal error\")\n\n// addr16 records the eight 16-bit addressing modes.\nvar addr16 = [8]Mem{\n\t{Base: BX, Scale: 1, Index: SI},\n\t{Base: BX, Scale: 1, Index: DI},\n\t{Base: BP, Scale: 1, Index: SI},\n\t{Base: BP, Scale: 1, Index: DI},\n\t{Base: SI},\n\t{Base: DI},\n\t{Base: BP},\n\t{Base: BX},\n}\n\n// baseRegForBits returns the base register for a given register size in bits.\nfunc baseRegForBits(bits int) Reg {\n\tswitch bits {\n\tcase 8:\n\t\treturn AL\n\tcase 16:\n\t\treturn AX\n\tcase 32:\n\t\treturn EAX\n\tcase 64:\n\t\treturn RAX\n\t}\n\treturn 0\n}\n\n// baseReg records the base register for argument types that specify\n// a range of registers indexed by op, regop, or rm.\nvar baseReg = [...]Reg{\n\txArgDR0dashDR7: DR0,\n\txArgMm1:        M0,\n\txArgMm2:        M0,\n\txArgMm2M64:     M0,\n\txArgMm:         M0,\n\txArgMmM32:      M0,\n\txArgMmM64:      M0,\n\txArgR16:        AX,\n\txArgR16op:      AX,\n\txArgR32:        EAX,\n\txArgR32M16:     EAX,\n\txArgR32M8:      EAX,\n\txArgR32op:      EAX,\n\txArgR64:        RAX,\n\txArgR64M16:     RAX,\n\txArgR64op:      RAX,\n\txArgR8:         AL,\n\txArgR8op:       AL,\n\txArgRM16:       AX,\n\txArgRM32:       EAX,\n\txArgRM64:       RAX,\n\txArgRM8:        AL,\n\txArgRmf16:      AX,\n\txArgRmf32:      EAX,\n\txArgRmf64:      RAX,\n\txArgSTi:        F0,\n\txArgTR0dashTR7: TR0,\n\txArgXmm1:       X0,\n\txArgYmm1:       X0,\n\txArgXmm2:       X0,\n\txArgXmm2M128:   X0,\n\txArgYmm2M256:   X0,\n\txArgXmm2M16:    X0,\n\txArgXmm2M32:    X0,\n\txArgXmm2M64:    X0,\n\txArgXmm:        X0,\n\txArgXmmM128:    X0,\n\txArgXmmM32:     X0,\n\txArgXmmM64:     X0,\n}\n\n// prefixToSegment returns the segment register\n// corresponding to a particular segment prefix.\nfunc prefixToSegment(p Prefix) Reg {\n\tswitch p &^ PrefixImplicit {\n\tcase PrefixCS:\n\t\treturn CS\n\tcase PrefixDS:\n\t\treturn DS\n\tcase PrefixES:\n\t\treturn ES\n\tcase PrefixFS:\n\t\treturn FS\n\tcase PrefixGS:\n\t\treturn GS\n\tcase PrefixSS:\n\t\treturn SS\n\t}\n\treturn 0\n}\n\n// fixedArg records the fixed arguments corresponding to the given bytecodes.\nvar fixedArg = [...]Arg{\n\txArg1:    Imm(1),\n\txArg3:    Imm(3),\n\txArgAL:   AL,\n\txArgAX:   AX,\n\txArgDX:   DX,\n\txArgEAX:  EAX,\n\txArgEDX:  EDX,\n\txArgRAX:  RAX,\n\txArgRDX:  RDX,\n\txArgCL:   CL,\n\txArgCS:   CS,\n\txArgDS:   DS,\n\txArgES:   ES,\n\txArgFS:   FS,\n\txArgGS:   GS,\n\txArgSS:   SS,\n\txArgST:   F0,\n\txArgXMM0: X0,\n}\n\n// memBytes records the size of the memory pointed at\n// by a memory argument of the given form.\nvar memBytes = [...]int8{\n\txArgM128:       128 / 8,\n\txArgM256:       256 / 8,\n\txArgM16:        16 / 8,\n\txArgM16and16:   (16 + 16) / 8,\n\txArgM16colon16: (16 + 16) / 8,\n\txArgM16colon32: (16 + 32) / 8,\n\txArgM16int:     16 / 8,\n\txArgM2byte:     2,\n\txArgM32:        32 / 8,\n\txArgM32and32:   (32 + 32) / 8,\n\txArgM32fp:      32 / 8,\n\txArgM32int:     32 / 8,\n\txArgM64:        64 / 8,\n\txArgM64fp:      64 / 8,\n\txArgM64int:     64 / 8,\n\txArgMm2M64:     64 / 8,\n\txArgMmM32:      32 / 8,\n\txArgMmM64:      64 / 8,\n\txArgMoffs16:    16 / 8,\n\txArgMoffs32:    32 / 8,\n\txArgMoffs64:    64 / 8,\n\txArgMoffs8:     8 / 8,\n\txArgR32M16:     16 / 8,\n\txArgR32M8:      8 / 8,\n\txArgR64M16:     16 / 8,\n\txArgRM16:       16 / 8,\n\txArgRM32:       32 / 8,\n\txArgRM64:       64 / 8,\n\txArgRM8:        8 / 8,\n\txArgXmm2M128:   128 / 8,\n\txArgYmm2M256:   256 / 8,\n\txArgXmm2M16:    16 / 8,\n\txArgXmm2M32:    32 / 8,\n\txArgXmm2M64:    64 / 8,\n\txArgXmm:        128 / 8,\n\txArgXmmM128:    128 / 8,\n\txArgXmmM32:     32 / 8,\n\txArgXmmM64:     64 / 8,\n}\n\n// isCondJmp records the conditional jumps.\nvar isCondJmp = [maxOp + 1]bool{\n\tJA:  true,\n\tJAE: true,\n\tJB:  true,\n\tJBE: true,\n\tJE:  true,\n\tJG:  true,\n\tJGE: true,\n\tJL:  true,\n\tJLE: true,\n\tJNE: true,\n\tJNO: true,\n\tJNP: true,\n\tJNS: true,\n\tJO:  true,\n\tJP:  true,\n\tJS:  true,\n}\n\n// isLoop records the loop operators.\nvar isLoop = [maxOp + 1]bool{\n\tLOOP:   true,\n\tLOOPE:  true,\n\tLOOPNE: true,\n\tJECXZ:  true,\n\tJRCXZ:  true,\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/x86/x86asm/gnu.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage x86asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.\n// This general form is often called “AT&T syntax” as a reference to AT&T System V Unix.\nfunc GNUSyntax(inst Inst, pc uint64, symname SymLookup) string {\n\t// Rewrite instruction to mimic GNU peculiarities.\n\t// Note that inst has been passed by value and contains\n\t// no pointers, so any changes we make here are local\n\t// and will not propagate back out to the caller.\n\n\tif symname == nil {\n\t\tsymname = func(uint64) (string, uint64) { return \"\", 0 }\n\t}\n\n\t// Adjust opcode [sic].\n\tswitch inst.Op {\n\tcase FDIV, FDIVR, FSUB, FSUBR, FDIVP, FDIVRP, FSUBP, FSUBRP:\n\t\t// DC E0, DC F0: libopcodes swaps FSUBR/FSUB and FDIVR/FDIV, at least\n\t\t// if you believe the Intel manual is correct (the encoding is irregular as given;\n\t\t// libopcodes uses the more regular expected encoding).\n\t\t// TODO(rsc): Test to ensure Intel manuals are correct and report to libopcodes maintainers?\n\t\t// NOTE: iant thinks this is deliberate, but we can't find the history.\n\t\t_, reg1 := inst.Args[0].(Reg)\n\t\t_, reg2 := inst.Args[1].(Reg)\n\t\tif reg1 && reg2 && (inst.Opcode>>24 == 0xDC || inst.Opcode>>24 == 0xDE) {\n\t\t\tswitch inst.Op {\n\t\t\tcase FDIV:\n\t\t\t\tinst.Op = FDIVR\n\t\t\tcase FDIVR:\n\t\t\t\tinst.Op = FDIV\n\t\t\tcase FSUB:\n\t\t\t\tinst.Op = FSUBR\n\t\t\tcase FSUBR:\n\t\t\t\tinst.Op = FSUB\n\t\t\tcase FDIVP:\n\t\t\t\tinst.Op = FDIVRP\n\t\t\tcase FDIVRP:\n\t\t\t\tinst.Op = FDIVP\n\t\t\tcase FSUBP:\n\t\t\t\tinst.Op = FSUBRP\n\t\t\tcase FSUBRP:\n\t\t\t\tinst.Op = FSUBP\n\t\t\t}\n\t\t}\n\n\tcase MOVNTSD:\n\t\t// MOVNTSD is F2 0F 2B /r.\n\t\t// MOVNTSS is F3 0F 2B /r (supposedly; not in manuals).\n\t\t// Usually inner prefixes win for display,\n\t\t// so that F3 F2 0F 2B 11 is REP MOVNTSD\n\t\t// and F2 F3 0F 2B 11 is REPN MOVNTSS.\n\t\t// Libopcodes always prefers MOVNTSS regardless of prefix order.\n\t\tif countPrefix(&inst, 0xF3) > 0 {\n\t\t\tfound := false\n\t\t\tfor i := len(inst.Prefix) - 1; i >= 0; i-- {\n\t\t\t\tswitch inst.Prefix[i] & 0xFF {\n\t\t\t\tcase 0xF3:\n\t\t\t\t\tif !found {\n\t\t\t\t\t\tfound = true\n\t\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\t}\n\t\t\t\tcase 0xF2:\n\t\t\t\t\tinst.Prefix[i] &^= PrefixImplicit\n\t\t\t\t}\n\t\t\t}\n\t\t\tinst.Op = MOVNTSS\n\t\t}\n\t}\n\n\t// Add implicit arguments.\n\tswitch inst.Op {\n\tcase MONITOR:\n\t\tinst.Args[0] = EDX\n\t\tinst.Args[1] = ECX\n\t\tinst.Args[2] = EAX\n\t\tif inst.AddrSize == 16 {\n\t\t\tinst.Args[2] = AX\n\t\t}\n\n\tcase MWAIT:\n\t\tif inst.Mode == 64 {\n\t\t\tinst.Args[0] = RCX\n\t\t\tinst.Args[1] = RAX\n\t\t} else {\n\t\t\tinst.Args[0] = ECX\n\t\t\tinst.Args[1] = EAX\n\t\t}\n\t}\n\n\t// Adjust which prefixes will be displayed.\n\t// The rule is to display all the prefixes not implied by\n\t// the usual instruction display, that is, all the prefixes\n\t// except the ones with PrefixImplicit set.\n\t// However, of course, there are exceptions to the rule.\n\tswitch inst.Op {\n\tcase CRC32:\n\t\t// CRC32 has a mandatory F2 prefix.\n\t\t// If there are multiple F2s and no F3s, the extra F2s do not print.\n\t\t// (And Decode has already marked them implicit.)\n\t\t// However, if there is an F3 anywhere, then the extra F2s do print.\n\t\t// If there are multiple F2 prefixes *and* an (ignored) F3,\n\t\t// then libopcodes prints the extra F2s as REPNs.\n\t\tif countPrefix(&inst, 0xF2) > 1 {\n\t\t\tunmarkImplicit(&inst, 0xF2)\n\t\t\tmarkLastImplicit(&inst, 0xF2)\n\t\t}\n\n\t\t// An unused data size override should probably be shown,\n\t\t// to distinguish DATA16 CRC32B from plain CRC32B,\n\t\t// but libopcodes always treats the final override as implicit\n\t\t// and the others as explicit.\n\t\tunmarkImplicit(&inst, PrefixDataSize)\n\t\tmarkLastImplicit(&inst, PrefixDataSize)\n\n\tcase CVTSI2SD, CVTSI2SS:\n\t\tif !isMem(inst.Args[1]) {\n\t\t\tmarkLastImplicit(&inst, PrefixDataSize)\n\t\t}\n\n\tcase CVTSD2SI, CVTSS2SI, CVTTSD2SI, CVTTSS2SI,\n\t\tENTER, FLDENV, FNSAVE, FNSTENV, FRSTOR, LGDT, LIDT, LRET,\n\t\tPOP, PUSH, RET, SGDT, SIDT, SYSRET, XBEGIN:\n\t\tmarkLastImplicit(&inst, PrefixDataSize)\n\n\tcase LOOP, LOOPE, LOOPNE, MONITOR:\n\t\tmarkLastImplicit(&inst, PrefixAddrSize)\n\n\tcase MOV:\n\t\t// The 16-bit and 32-bit forms of MOV Sreg, dst and MOV src, Sreg\n\t\t// cannot be distinguished when src or dst refers to memory, because\n\t\t// Sreg is always a 16-bit value, even when we're doing a 32-bit\n\t\t// instruction. Because the instruction tables distinguished these two,\n\t\t// any operand size prefix has been marked as used (to decide which\n\t\t// branch to take). Unmark it, so that it will show up in disassembly,\n\t\t// so that the reader can tell the size of memory operand.\n\t\t// up with the same arguments\n\t\tdst, _ := inst.Args[0].(Reg)\n\t\tsrc, _ := inst.Args[1].(Reg)\n\t\tif ES <= src && src <= GS && isMem(inst.Args[0]) || ES <= dst && dst <= GS && isMem(inst.Args[1]) {\n\t\t\tunmarkImplicit(&inst, PrefixDataSize)\n\t\t}\n\n\tcase MOVDQU:\n\t\tif countPrefix(&inst, 0xF3) > 1 {\n\t\t\tunmarkImplicit(&inst, 0xF3)\n\t\t\tmarkLastImplicit(&inst, 0xF3)\n\t\t}\n\n\tcase MOVQ2DQ:\n\t\tmarkLastImplicit(&inst, PrefixDataSize)\n\n\tcase SLDT, SMSW, STR, FXRSTOR, XRSTOR, XSAVE, XSAVEOPT, CMPXCHG8B:\n\t\tif isMem(inst.Args[0]) {\n\t\t\tunmarkImplicit(&inst, PrefixDataSize)\n\t\t}\n\n\tcase SYSEXIT:\n\t\tunmarkImplicit(&inst, PrefixDataSize)\n\t}\n\n\tif isCondJmp[inst.Op] || isLoop[inst.Op] || inst.Op == JCXZ || inst.Op == JECXZ || inst.Op == JRCXZ {\n\t\tif countPrefix(&inst, PrefixCS) > 0 && countPrefix(&inst, PrefixDS) > 0 {\n\t\t\tfor i, p := range inst.Prefix {\n\t\t\t\tswitch p & 0xFFF {\n\t\t\t\tcase PrefixPN, PrefixPT:\n\t\t\t\t\tinst.Prefix[i] &= 0xF0FF // cut interpretation bits, producing original segment prefix\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// XACQUIRE/XRELEASE adjustment.\n\tif inst.Op == MOV {\n\t\t// MOV into memory is a candidate for turning REP into XRELEASE.\n\t\t// However, if the REP is followed by a REPN, that REPN blocks the\n\t\t// conversion.\n\t\thaveREPN := false\n\t\tfor i := len(inst.Prefix) - 1; i >= 0; i-- {\n\t\t\tswitch inst.Prefix[i] &^ PrefixIgnored {\n\t\t\tcase PrefixREPN:\n\t\t\t\thaveREPN = true\n\t\t\tcase PrefixXRELEASE:\n\t\t\t\tif haveREPN {\n\t\t\t\t\tinst.Prefix[i] = PrefixREP\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// We only format the final F2/F3 as XRELEASE/XACQUIRE.\n\thaveXA := false\n\thaveXR := false\n\tfor i := len(inst.Prefix) - 1; i >= 0; i-- {\n\t\tswitch inst.Prefix[i] &^ PrefixIgnored {\n\t\tcase PrefixXRELEASE:\n\t\t\tif !haveXR {\n\t\t\t\thaveXR = true\n\t\t\t} else {\n\t\t\t\tinst.Prefix[i] = PrefixREP\n\t\t\t}\n\n\t\tcase PrefixXACQUIRE:\n\t\t\tif !haveXA {\n\t\t\t\thaveXA = true\n\t\t\t} else {\n\t\t\t\tinst.Prefix[i] = PrefixREPN\n\t\t\t}\n\t\t}\n\t}\n\n\t// Determine opcode.\n\top := strings.ToLower(inst.Op.String())\n\tif alt := gnuOp[inst.Op]; alt != \"\" {\n\t\top = alt\n\t}\n\n\t// Determine opcode suffix.\n\t// Libopcodes omits the suffix if the width of the operation\n\t// can be inferred from a register arguments. For example,\n\t// add $1, %ebx has no suffix because you can tell from the\n\t// 32-bit register destination that it is a 32-bit add,\n\t// but in addl $1, (%ebx), the destination is memory, so the\n\t// size is not evident without the l suffix.\n\tneedSuffix := true\nSuffixLoop:\n\tfor i, a := range inst.Args {\n\t\tif a == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch a := a.(type) {\n\t\tcase Reg:\n\t\t\tswitch inst.Op {\n\t\t\tcase MOVSX, MOVZX:\n\t\t\t\tcontinue\n\n\t\t\tcase SHL, SHR, RCL, RCR, ROL, ROR, SAR:\n\t\t\t\tif i == 1 {\n\t\t\t\t\t// shift count does not tell us operand size\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\tcase CRC32:\n\t\t\t\t// The source argument does tell us operand size,\n\t\t\t\t// but libopcodes still always puts a suffix on crc32.\n\t\t\t\tcontinue\n\n\t\t\tcase PUSH, POP:\n\t\t\t\t// Even though segment registers are 16-bit, push and pop\n\t\t\t\t// can save/restore them from 32-bit slots, so they\n\t\t\t\t// do not imply operand size.\n\t\t\t\tif ES <= a && a <= GS {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\tcase CVTSI2SD, CVTSI2SS:\n\t\t\t\t// The integer register argument takes priority.\n\t\t\t\tif X0 <= a && a <= X15 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif AL <= a && a <= R15 || ES <= a && a <= GS || X0 <= a && a <= X15 || M0 <= a && a <= M7 {\n\t\t\t\tneedSuffix = false\n\t\t\t\tbreak SuffixLoop\n\t\t\t}\n\t\t}\n\t}\n\n\tif needSuffix {\n\t\tswitch inst.Op {\n\t\tcase CMPXCHG8B, FLDCW, FNSTCW, FNSTSW, LDMXCSR, LLDT, LMSW, LTR, PCLMULQDQ,\n\t\t\tSETA, SETAE, SETB, SETBE, SETE, SETG, SETGE, SETL, SETLE, SETNE, SETNO, SETNP, SETNS, SETO, SETP, SETS,\n\t\t\tSLDT, SMSW, STMXCSR, STR, VERR, VERW:\n\t\t\t// For various reasons, libopcodes emits no suffix for these instructions.\n\n\t\tcase CRC32:\n\t\t\top += byteSizeSuffix(argBytes(&inst, inst.Args[1]))\n\n\t\tcase LGDT, LIDT, SGDT, SIDT:\n\t\t\top += byteSizeSuffix(inst.DataSize / 8)\n\n\t\tcase MOVZX, MOVSX:\n\t\t\t// Integer size conversions get two suffixes.\n\t\t\top = op[:4] + byteSizeSuffix(argBytes(&inst, inst.Args[1])) + byteSizeSuffix(argBytes(&inst, inst.Args[0]))\n\n\t\tcase LOOP, LOOPE, LOOPNE:\n\t\t\t// Add w suffix to indicate use of CX register instead of ECX.\n\t\t\tif inst.AddrSize == 16 {\n\t\t\t\top += \"w\"\n\t\t\t}\n\n\t\tcase CALL, ENTER, JMP, LCALL, LEAVE, LJMP, LRET, RET, SYSRET, XBEGIN:\n\t\t\t// Add w suffix to indicate use of 16-bit target.\n\t\t\t// Exclude JMP rel8.\n\t\t\tif inst.Opcode>>24 == 0xEB {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif inst.DataSize == 16 && inst.Mode != 16 {\n\t\t\t\tmarkLastImplicit(&inst, PrefixDataSize)\n\t\t\t\top += \"w\"\n\t\t\t} else if inst.Mode == 64 {\n\t\t\t\top += \"q\"\n\t\t\t}\n\n\t\tcase FRSTOR, FNSAVE, FNSTENV, FLDENV:\n\t\t\t// Add s suffix to indicate shortened FPU state (I guess).\n\t\t\tif inst.DataSize == 16 {\n\t\t\t\top += \"s\"\n\t\t\t}\n\n\t\tcase PUSH, POP:\n\t\t\tif markLastImplicit(&inst, PrefixDataSize) {\n\t\t\t\top += byteSizeSuffix(inst.DataSize / 8)\n\t\t\t} else if inst.Mode == 64 {\n\t\t\t\top += \"q\"\n\t\t\t} else {\n\t\t\t\top += byteSizeSuffix(inst.MemBytes)\n\t\t\t}\n\n\t\tdefault:\n\t\t\tif isFloat(inst.Op) {\n\t\t\t\t// I can't explain any of this, but it's what libopcodes does.\n\t\t\t\tswitch inst.MemBytes {\n\t\t\t\tdefault:\n\t\t\t\t\tif (inst.Op == FLD || inst.Op == FSTP) && isMem(inst.Args[0]) {\n\t\t\t\t\t\top += \"t\"\n\t\t\t\t\t}\n\t\t\t\tcase 4:\n\t\t\t\t\tif isFloatInt(inst.Op) {\n\t\t\t\t\t\top += \"l\"\n\t\t\t\t\t} else {\n\t\t\t\t\t\top += \"s\"\n\t\t\t\t\t}\n\t\t\t\tcase 8:\n\t\t\t\t\tif isFloatInt(inst.Op) {\n\t\t\t\t\t\top += \"ll\"\n\t\t\t\t\t} else {\n\t\t\t\t\t\top += \"l\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\top += byteSizeSuffix(inst.MemBytes)\n\t\t}\n\t}\n\n\t// Adjust special case opcodes.\n\tswitch inst.Op {\n\tcase 0:\n\t\tif inst.Prefix[0] != 0 {\n\t\t\treturn strings.ToLower(inst.Prefix[0].String())\n\t\t}\n\n\tcase INT:\n\t\tif inst.Opcode>>24 == 0xCC {\n\t\t\tinst.Args[0] = nil\n\t\t\top = \"int3\"\n\t\t}\n\n\tcase CMPPS, CMPPD, CMPSD_XMM, CMPSS:\n\t\timm, ok := inst.Args[2].(Imm)\n\t\tif ok && 0 <= imm && imm < 8 {\n\t\t\tinst.Args[2] = nil\n\t\t\top = cmppsOps[imm] + op[3:]\n\t\t}\n\n\tcase PCLMULQDQ:\n\t\timm, ok := inst.Args[2].(Imm)\n\t\tif ok && imm&^0x11 == 0 {\n\t\t\tinst.Args[2] = nil\n\t\t\top = pclmulqOps[(imm&0x10)>>3|(imm&1)]\n\t\t}\n\n\tcase XLATB:\n\t\tif markLastImplicit(&inst, PrefixAddrSize) {\n\t\t\top = \"xlat\" // not xlatb\n\t\t}\n\t}\n\n\t// Build list of argument strings.\n\tvar (\n\t\tusedPrefixes bool     // segment prefixes consumed by Mem formatting\n\t\targs         []string // formatted arguments\n\t)\n\tfor i, a := range inst.Args {\n\t\tif a == nil {\n\t\t\tbreak\n\t\t}\n\t\tswitch inst.Op {\n\t\tcase MOVSB, MOVSW, MOVSD, MOVSQ, OUTSB, OUTSW, OUTSD:\n\t\t\tif i == 0 {\n\t\t\t\tusedPrefixes = true // disable use of prefixes for first argument\n\t\t\t} else {\n\t\t\t\tusedPrefixes = false\n\t\t\t}\n\t\t}\n\t\tif a == Imm(1) && (inst.Opcode>>24)&^1 == 0xD0 {\n\t\t\tcontinue\n\t\t}\n\t\targs = append(args, gnuArg(&inst, pc, symname, a, &usedPrefixes))\n\t}\n\n\t// The default is to print the arguments in reverse Intel order.\n\t// A few instructions inhibit this behavior.\n\tswitch inst.Op {\n\tcase BOUND, LCALL, ENTER, LJMP:\n\t\t// no reverse\n\tdefault:\n\t\t// reverse args\n\t\tfor i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {\n\t\t\targs[i], args[j] = args[j], args[i]\n\t\t}\n\t}\n\n\t// Build prefix string.\n\t// Must be after argument formatting, which can turn off segment prefixes.\n\tvar (\n\t\tprefix       = \"\" // output string\n\t\tnumAddr      = 0\n\t\tnumData      = 0\n\t\timplicitData = false\n\t)\n\tfor _, p := range inst.Prefix {\n\t\tif p&0xFF == PrefixDataSize && p&PrefixImplicit != 0 {\n\t\t\timplicitData = true\n\t\t}\n\t}\n\tfor _, p := range inst.Prefix {\n\t\tif p == 0 || p.IsVEX() {\n\t\t\tbreak\n\t\t}\n\t\tif p&PrefixImplicit != 0 {\n\t\t\tcontinue\n\t\t}\n\t\tswitch p &^ (PrefixIgnored | PrefixInvalid) {\n\t\tdefault:\n\t\t\tif p.IsREX() {\n\t\t\t\tif p&0xFF == PrefixREX {\n\t\t\t\t\tprefix += \"rex \"\n\t\t\t\t} else {\n\t\t\t\t\tprefix += \"rex.\" + p.String()[4:] + \" \"\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tprefix += strings.ToLower(p.String()) + \" \"\n\n\t\tcase PrefixPN:\n\t\t\top += \",pn\"\n\t\t\tcontinue\n\n\t\tcase PrefixPT:\n\t\t\top += \",pt\"\n\t\t\tcontinue\n\n\t\tcase PrefixAddrSize, PrefixAddr16, PrefixAddr32:\n\t\t\t// For unknown reasons, if the addr16 prefix is repeated,\n\t\t\t// libopcodes displays all but the last as addr32, even though\n\t\t\t// the addressing form used in a memory reference is clearly\n\t\t\t// still 16-bit.\n\t\t\tn := 32\n\t\t\tif inst.Mode == 32 {\n\t\t\t\tn = 16\n\t\t\t}\n\t\t\tnumAddr++\n\t\t\tif countPrefix(&inst, PrefixAddrSize) > numAddr {\n\t\t\t\tn = inst.Mode\n\t\t\t}\n\t\t\tprefix += fmt.Sprintf(\"addr%d \", n)\n\t\t\tcontinue\n\n\t\tcase PrefixData16, PrefixData32:\n\t\t\tif implicitData && countPrefix(&inst, PrefixDataSize) > 1 {\n\t\t\t\t// Similar to the addr32 logic above, but it only kicks in\n\t\t\t\t// when something used the data size prefix (one is implicit).\n\t\t\t\tn := 16\n\t\t\t\tif inst.Mode == 16 {\n\t\t\t\t\tn = 32\n\t\t\t\t}\n\t\t\t\tnumData++\n\t\t\t\tif countPrefix(&inst, PrefixDataSize) > numData {\n\t\t\t\t\tif inst.Mode == 16 {\n\t\t\t\t\t\tn = 16\n\t\t\t\t\t} else {\n\t\t\t\t\t\tn = 32\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tprefix += fmt.Sprintf(\"data%d \", n)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tprefix += strings.ToLower(p.String()) + \" \"\n\t\t}\n\t}\n\n\t// Finally! Put it all together.\n\ttext := prefix + op\n\tif args != nil {\n\t\ttext += \" \"\n\t\t// Indirect call/jmp gets a star to distinguish from direct jump address.\n\t\tif (inst.Op == CALL || inst.Op == JMP || inst.Op == LJMP || inst.Op == LCALL) && (isMem(inst.Args[0]) || isReg(inst.Args[0])) {\n\t\t\ttext += \"*\"\n\t\t}\n\t\ttext += strings.Join(args, \",\")\n\t}\n\treturn text\n}\n\n// gnuArg returns the GNU syntax for the argument x from the instruction inst.\n// If *usedPrefixes is false and x is a Mem, then the formatting\n// includes any segment prefixes and sets *usedPrefixes to true.\nfunc gnuArg(inst *Inst, pc uint64, symname SymLookup, x Arg, usedPrefixes *bool) string {\n\tif x == nil {\n\t\treturn \"<nil>\"\n\t}\n\tswitch x := x.(type) {\n\tcase Reg:\n\t\tswitch inst.Op {\n\t\tcase CVTSI2SS, CVTSI2SD, CVTSS2SI, CVTSD2SI, CVTTSD2SI, CVTTSS2SI:\n\t\t\tif inst.DataSize == 16 && EAX <= x && x <= R15L {\n\t\t\t\tx -= EAX - AX\n\t\t\t}\n\n\t\tcase IN, INSB, INSW, INSD, OUT, OUTSB, OUTSW, OUTSD:\n\t\t\t// DX is the port, but libopcodes prints it as if it were a memory reference.\n\t\t\tif x == DX {\n\t\t\t\treturn \"(%dx)\"\n\t\t\t}\n\t\tcase VMOVDQA, VMOVDQU, VMOVNTDQA, VMOVNTDQ:\n\t\t\treturn strings.Replace(gccRegName[x], \"xmm\", \"ymm\", -1)\n\t\t}\n\t\treturn gccRegName[x]\n\tcase Mem:\n\t\tif s, disp := memArgToSymbol(x, pc, inst.Len, symname); s != \"\" {\n\t\t\tsuffix := \"\"\n\t\t\tif disp != 0 {\n\t\t\t\tsuffix = fmt.Sprintf(\"%+d\", disp)\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"%s%s\", s, suffix)\n\t\t}\n\t\tseg := \"\"\n\t\tvar haveCS, haveDS, haveES, haveFS, haveGS, haveSS bool\n\t\tswitch x.Segment {\n\t\tcase CS:\n\t\t\thaveCS = true\n\t\tcase DS:\n\t\t\thaveDS = true\n\t\tcase ES:\n\t\t\thaveES = true\n\t\tcase FS:\n\t\t\thaveFS = true\n\t\tcase GS:\n\t\t\thaveGS = true\n\t\tcase SS:\n\t\t\thaveSS = true\n\t\t}\n\t\tswitch inst.Op {\n\t\tcase INSB, INSW, INSD, STOSB, STOSW, STOSD, STOSQ, SCASB, SCASW, SCASD, SCASQ:\n\t\t\t// These do not accept segment prefixes, at least in the GNU rendering.\n\t\tdefault:\n\t\t\tif *usedPrefixes {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tfor i := len(inst.Prefix) - 1; i >= 0; i-- {\n\t\t\t\tp := inst.Prefix[i] &^ PrefixIgnored\n\t\t\t\tif p == 0 {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tswitch p {\n\t\t\t\tcase PrefixCS:\n\t\t\t\t\tif !haveCS {\n\t\t\t\t\t\thaveCS = true\n\t\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\t}\n\t\t\t\tcase PrefixDS:\n\t\t\t\t\tif !haveDS {\n\t\t\t\t\t\thaveDS = true\n\t\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\t}\n\t\t\t\tcase PrefixES:\n\t\t\t\t\tif !haveES {\n\t\t\t\t\t\thaveES = true\n\t\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\t}\n\t\t\t\tcase PrefixFS:\n\t\t\t\t\tif !haveFS {\n\t\t\t\t\t\thaveFS = true\n\t\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\t}\n\t\t\t\tcase PrefixGS:\n\t\t\t\t\tif !haveGS {\n\t\t\t\t\t\thaveGS = true\n\t\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\t}\n\t\t\t\tcase PrefixSS:\n\t\t\t\t\tif !haveSS {\n\t\t\t\t\t\thaveSS = true\n\t\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t*usedPrefixes = true\n\t\t}\n\t\tif haveCS {\n\t\t\tseg += \"%cs:\"\n\t\t}\n\t\tif haveDS {\n\t\t\tseg += \"%ds:\"\n\t\t}\n\t\tif haveSS {\n\t\t\tseg += \"%ss:\"\n\t\t}\n\t\tif haveES {\n\t\t\tseg += \"%es:\"\n\t\t}\n\t\tif haveFS {\n\t\t\tseg += \"%fs:\"\n\t\t}\n\t\tif haveGS {\n\t\t\tseg += \"%gs:\"\n\t\t}\n\t\tdisp := \"\"\n\t\tif x.Disp != 0 {\n\t\t\tdisp = fmt.Sprintf(\"%#x\", x.Disp)\n\t\t}\n\t\tif x.Scale == 0 || x.Index == 0 && x.Scale == 1 && (x.Base == ESP || x.Base == RSP || x.Base == 0 && inst.Mode == 64) {\n\t\t\tif x.Base == 0 {\n\t\t\t\treturn seg + disp\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"%s%s(%s)\", seg, disp, gccRegName[x.Base])\n\t\t}\n\t\tbase := gccRegName[x.Base]\n\t\tif x.Base == 0 {\n\t\t\tbase = \"\"\n\t\t}\n\t\tindex := gccRegName[x.Index]\n\t\tif x.Index == 0 {\n\t\t\tif inst.AddrSize == 64 {\n\t\t\t\tindex = \"%riz\"\n\t\t\t} else {\n\t\t\t\tindex = \"%eiz\"\n\t\t\t}\n\t\t}\n\t\tif AX <= x.Base && x.Base <= DI {\n\t\t\t// 16-bit addressing - no scale\n\t\t\treturn fmt.Sprintf(\"%s%s(%s,%s)\", seg, disp, base, index)\n\t\t}\n\t\treturn fmt.Sprintf(\"%s%s(%s,%s,%d)\", seg, disp, base, index, x.Scale)\n\tcase Rel:\n\t\tif pc == 0 {\n\t\t\treturn fmt.Sprintf(\".%+#x\", int64(x))\n\t\t} else {\n\t\t\taddr := pc + uint64(inst.Len) + uint64(x)\n\t\t\tif s, base := symname(addr); s != \"\" && addr == base {\n\t\t\t\treturn fmt.Sprintf(\"%s\", s)\n\t\t\t} else {\n\t\t\t\taddr := pc + uint64(inst.Len) + uint64(x)\n\t\t\t\treturn fmt.Sprintf(\"%#x\", addr)\n\t\t\t}\n\t\t}\n\tcase Imm:\n\t\tif s, base := symname(uint64(x)); s != \"\" {\n\t\t\tsuffix := \"\"\n\t\t\tif uint64(x) != base {\n\t\t\t\tsuffix = fmt.Sprintf(\"%+d\", uint64(x)-base)\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"$%s%s\", s, suffix)\n\t\t}\n\t\tif inst.Mode == 32 {\n\t\t\treturn fmt.Sprintf(\"$%#x\", uint32(x))\n\t\t}\n\t\treturn fmt.Sprintf(\"$%#x\", int64(x))\n\t}\n\treturn x.String()\n}\n\nvar gccRegName = [...]string{\n\t0:    \"REG0\",\n\tAL:   \"%al\",\n\tCL:   \"%cl\",\n\tBL:   \"%bl\",\n\tDL:   \"%dl\",\n\tAH:   \"%ah\",\n\tCH:   \"%ch\",\n\tBH:   \"%bh\",\n\tDH:   \"%dh\",\n\tSPB:  \"%spl\",\n\tBPB:  \"%bpl\",\n\tSIB:  \"%sil\",\n\tDIB:  \"%dil\",\n\tR8B:  \"%r8b\",\n\tR9B:  \"%r9b\",\n\tR10B: \"%r10b\",\n\tR11B: \"%r11b\",\n\tR12B: \"%r12b\",\n\tR13B: \"%r13b\",\n\tR14B: \"%r14b\",\n\tR15B: \"%r15b\",\n\tAX:   \"%ax\",\n\tCX:   \"%cx\",\n\tBX:   \"%bx\",\n\tDX:   \"%dx\",\n\tSP:   \"%sp\",\n\tBP:   \"%bp\",\n\tSI:   \"%si\",\n\tDI:   \"%di\",\n\tR8W:  \"%r8w\",\n\tR9W:  \"%r9w\",\n\tR10W: \"%r10w\",\n\tR11W: \"%r11w\",\n\tR12W: \"%r12w\",\n\tR13W: \"%r13w\",\n\tR14W: \"%r14w\",\n\tR15W: \"%r15w\",\n\tEAX:  \"%eax\",\n\tECX:  \"%ecx\",\n\tEDX:  \"%edx\",\n\tEBX:  \"%ebx\",\n\tESP:  \"%esp\",\n\tEBP:  \"%ebp\",\n\tESI:  \"%esi\",\n\tEDI:  \"%edi\",\n\tR8L:  \"%r8d\",\n\tR9L:  \"%r9d\",\n\tR10L: \"%r10d\",\n\tR11L: \"%r11d\",\n\tR12L: \"%r12d\",\n\tR13L: \"%r13d\",\n\tR14L: \"%r14d\",\n\tR15L: \"%r15d\",\n\tRAX:  \"%rax\",\n\tRCX:  \"%rcx\",\n\tRDX:  \"%rdx\",\n\tRBX:  \"%rbx\",\n\tRSP:  \"%rsp\",\n\tRBP:  \"%rbp\",\n\tRSI:  \"%rsi\",\n\tRDI:  \"%rdi\",\n\tR8:   \"%r8\",\n\tR9:   \"%r9\",\n\tR10:  \"%r10\",\n\tR11:  \"%r11\",\n\tR12:  \"%r12\",\n\tR13:  \"%r13\",\n\tR14:  \"%r14\",\n\tR15:  \"%r15\",\n\tIP:   \"%ip\",\n\tEIP:  \"%eip\",\n\tRIP:  \"%rip\",\n\tF0:   \"%st\",\n\tF1:   \"%st(1)\",\n\tF2:   \"%st(2)\",\n\tF3:   \"%st(3)\",\n\tF4:   \"%st(4)\",\n\tF5:   \"%st(5)\",\n\tF6:   \"%st(6)\",\n\tF7:   \"%st(7)\",\n\tM0:   \"%mm0\",\n\tM1:   \"%mm1\",\n\tM2:   \"%mm2\",\n\tM3:   \"%mm3\",\n\tM4:   \"%mm4\",\n\tM5:   \"%mm5\",\n\tM6:   \"%mm6\",\n\tM7:   \"%mm7\",\n\tX0:   \"%xmm0\",\n\tX1:   \"%xmm1\",\n\tX2:   \"%xmm2\",\n\tX3:   \"%xmm3\",\n\tX4:   \"%xmm4\",\n\tX5:   \"%xmm5\",\n\tX6:   \"%xmm6\",\n\tX7:   \"%xmm7\",\n\tX8:   \"%xmm8\",\n\tX9:   \"%xmm9\",\n\tX10:  \"%xmm10\",\n\tX11:  \"%xmm11\",\n\tX12:  \"%xmm12\",\n\tX13:  \"%xmm13\",\n\tX14:  \"%xmm14\",\n\tX15:  \"%xmm15\",\n\tCS:   \"%cs\",\n\tSS:   \"%ss\",\n\tDS:   \"%ds\",\n\tES:   \"%es\",\n\tFS:   \"%fs\",\n\tGS:   \"%gs\",\n\tGDTR: \"%gdtr\",\n\tIDTR: \"%idtr\",\n\tLDTR: \"%ldtr\",\n\tMSW:  \"%msw\",\n\tTASK: \"%task\",\n\tCR0:  \"%cr0\",\n\tCR1:  \"%cr1\",\n\tCR2:  \"%cr2\",\n\tCR3:  \"%cr3\",\n\tCR4:  \"%cr4\",\n\tCR5:  \"%cr5\",\n\tCR6:  \"%cr6\",\n\tCR7:  \"%cr7\",\n\tCR8:  \"%cr8\",\n\tCR9:  \"%cr9\",\n\tCR10: \"%cr10\",\n\tCR11: \"%cr11\",\n\tCR12: \"%cr12\",\n\tCR13: \"%cr13\",\n\tCR14: \"%cr14\",\n\tCR15: \"%cr15\",\n\tDR0:  \"%db0\",\n\tDR1:  \"%db1\",\n\tDR2:  \"%db2\",\n\tDR3:  \"%db3\",\n\tDR4:  \"%db4\",\n\tDR5:  \"%db5\",\n\tDR6:  \"%db6\",\n\tDR7:  \"%db7\",\n\tTR0:  \"%tr0\",\n\tTR1:  \"%tr1\",\n\tTR2:  \"%tr2\",\n\tTR3:  \"%tr3\",\n\tTR4:  \"%tr4\",\n\tTR5:  \"%tr5\",\n\tTR6:  \"%tr6\",\n\tTR7:  \"%tr7\",\n}\n\nvar gnuOp = map[Op]string{\n\tCBW:       \"cbtw\",\n\tCDQ:       \"cltd\",\n\tCMPSD:     \"cmpsl\",\n\tCMPSD_XMM: \"cmpsd\",\n\tCWD:       \"cwtd\",\n\tCWDE:      \"cwtl\",\n\tCQO:       \"cqto\",\n\tINSD:      \"insl\",\n\tIRET:      \"iretw\",\n\tIRETD:     \"iret\",\n\tIRETQ:     \"iretq\",\n\tLODSB:     \"lods\",\n\tLODSD:     \"lods\",\n\tLODSQ:     \"lods\",\n\tLODSW:     \"lods\",\n\tMOVSD:     \"movsl\",\n\tMOVSD_XMM: \"movsd\",\n\tOUTSD:     \"outsl\",\n\tPOPA:      \"popaw\",\n\tPOPAD:     \"popa\",\n\tPOPF:      \"popfw\",\n\tPOPFD:     \"popf\",\n\tPUSHA:     \"pushaw\",\n\tPUSHAD:    \"pusha\",\n\tPUSHF:     \"pushfw\",\n\tPUSHFD:    \"pushf\",\n\tSCASB:     \"scas\",\n\tSCASD:     \"scas\",\n\tSCASQ:     \"scas\",\n\tSCASW:     \"scas\",\n\tSTOSB:     \"stos\",\n\tSTOSD:     \"stos\",\n\tSTOSQ:     \"stos\",\n\tSTOSW:     \"stos\",\n\tXLATB:     \"xlat\",\n}\n\nvar cmppsOps = []string{\n\t\"cmpeq\",\n\t\"cmplt\",\n\t\"cmple\",\n\t\"cmpunord\",\n\t\"cmpneq\",\n\t\"cmpnlt\",\n\t\"cmpnle\",\n\t\"cmpord\",\n}\n\nvar pclmulqOps = []string{\n\t\"pclmullqlqdq\",\n\t\"pclmulhqlqdq\",\n\t\"pclmullqhqdq\",\n\t\"pclmulhqhqdq\",\n}\n\nfunc countPrefix(inst *Inst, target Prefix) int {\n\tn := 0\n\tfor _, p := range inst.Prefix {\n\t\tif p&0xFF == target&0xFF {\n\t\t\tn++\n\t\t}\n\t}\n\treturn n\n}\n\nfunc markLastImplicit(inst *Inst, prefix Prefix) bool {\n\tfor i := len(inst.Prefix) - 1; i >= 0; i-- {\n\t\tp := inst.Prefix[i]\n\t\tif p&0xFF == prefix {\n\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc unmarkImplicit(inst *Inst, prefix Prefix) {\n\tfor i := len(inst.Prefix) - 1; i >= 0; i-- {\n\t\tp := inst.Prefix[i]\n\t\tif p&0xFF == prefix {\n\t\t\tinst.Prefix[i] &^= PrefixImplicit\n\t\t}\n\t}\n}\n\nfunc byteSizeSuffix(b int) string {\n\tswitch b {\n\tcase 1:\n\t\treturn \"b\"\n\tcase 2:\n\t\treturn \"w\"\n\tcase 4:\n\t\treturn \"l\"\n\tcase 8:\n\t\treturn \"q\"\n\t}\n\treturn \"\"\n}\n\nfunc argBytes(inst *Inst, arg Arg) int {\n\tif isMem(arg) {\n\t\treturn inst.MemBytes\n\t}\n\treturn regBytes(arg)\n}\n\nfunc isFloat(op Op) bool {\n\tswitch op {\n\tcase FADD, FCOM, FCOMP, FDIV, FDIVR, FIADD, FICOM, FICOMP, FIDIV, FIDIVR, FILD, FIMUL, FIST, FISTP, FISTTP, FISUB, FISUBR, FLD, FMUL, FST, FSTP, FSUB, FSUBR:\n\t\treturn true\n\t}\n\treturn false\n}\n\nfunc isFloatInt(op Op) bool {\n\tswitch op {\n\tcase FIADD, FICOM, FICOMP, FIDIV, FIDIVR, FILD, FIMUL, FIST, FISTP, FISTTP, FISUB, FISUBR:\n\t\treturn true\n\t}\n\treturn false\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/x86/x86asm/inst.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package x86asm implements decoding of x86 machine code.\npackage x86asm\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n)\n\n// An Inst is a single instruction.\ntype Inst struct {\n\tPrefix   Prefixes // Prefixes applied to the instruction.\n\tOp       Op       // Opcode mnemonic\n\tOpcode   uint32   // Encoded opcode bits, left aligned (first byte is Opcode>>24, etc)\n\tArgs     Args     // Instruction arguments, in Intel order\n\tMode     int      // processor mode in bits: 16, 32, or 64\n\tAddrSize int      // address size in bits: 16, 32, or 64\n\tDataSize int      // operand size in bits: 16, 32, or 64\n\tMemBytes int      // size of memory argument in bytes: 1, 2, 4, 8, 16, and so on.\n\tLen      int      // length of encoded instruction in bytes\n\tPCRel    int      // length of PC-relative address in instruction encoding\n\tPCRelOff int      // index of start of PC-relative address in instruction encoding\n}\n\n// Prefixes is an array of prefixes associated with a single instruction.\n// The prefixes are listed in the same order as found in the instruction:\n// each prefix byte corresponds to one slot in the array. The first zero\n// in the array marks the end of the prefixes.\ntype Prefixes [14]Prefix\n\n// A Prefix represents an Intel instruction prefix.\n// The low 8 bits are the actual prefix byte encoding,\n// and the top 8 bits contain distinguishing bits and metadata.\ntype Prefix uint16\n\nconst (\n\t// Metadata about the role of a prefix in an instruction.\n\tPrefixImplicit Prefix = 0x8000 // prefix is implied by instruction text\n\tPrefixIgnored  Prefix = 0x4000 // prefix is ignored: either irrelevant or overridden by a later prefix\n\tPrefixInvalid  Prefix = 0x2000 // prefix makes entire instruction invalid (bad LOCK)\n\n\t// Memory segment overrides.\n\tPrefixES Prefix = 0x26 // ES segment override\n\tPrefixCS Prefix = 0x2E // CS segment override\n\tPrefixSS Prefix = 0x36 // SS segment override\n\tPrefixDS Prefix = 0x3E // DS segment override\n\tPrefixFS Prefix = 0x64 // FS segment override\n\tPrefixGS Prefix = 0x65 // GS segment override\n\n\t// Branch prediction.\n\tPrefixPN Prefix = 0x12E // predict not taken (conditional branch only)\n\tPrefixPT Prefix = 0x13E // predict taken (conditional branch only)\n\n\t// Size attributes.\n\tPrefixDataSize Prefix = 0x66 // operand size override\n\tPrefixData16   Prefix = 0x166\n\tPrefixData32   Prefix = 0x266\n\tPrefixAddrSize Prefix = 0x67 // address size override\n\tPrefixAddr16   Prefix = 0x167\n\tPrefixAddr32   Prefix = 0x267\n\n\t// One of a kind.\n\tPrefixLOCK     Prefix = 0xF0 // lock\n\tPrefixREPN     Prefix = 0xF2 // repeat not zero\n\tPrefixXACQUIRE Prefix = 0x1F2\n\tPrefixBND      Prefix = 0x2F2\n\tPrefixREP      Prefix = 0xF3 // repeat\n\tPrefixXRELEASE Prefix = 0x1F3\n\n\t// The REX prefixes must be in the range [PrefixREX, PrefixREX+0x10).\n\t// the other bits are set or not according to the intended use.\n\tPrefixREX       Prefix = 0x40 // REX 64-bit extension prefix\n\tPrefixREXW      Prefix = 0x08 // extension bit W (64-bit instruction width)\n\tPrefixREXR      Prefix = 0x04 // extension bit R (r field in modrm)\n\tPrefixREXX      Prefix = 0x02 // extension bit X (index field in sib)\n\tPrefixREXB      Prefix = 0x01 // extension bit B (r/m field in modrm or base field in sib)\n\tPrefixVEX2Bytes Prefix = 0xC5 // Short form of vex prefix\n\tPrefixVEX3Bytes Prefix = 0xC4 // Long form of vex prefix\n)\n\n// IsREX reports whether p is a REX prefix byte.\nfunc (p Prefix) IsREX() bool {\n\treturn p&0xF0 == PrefixREX\n}\n\nfunc (p Prefix) IsVEX() bool {\n\treturn p&0xFF == PrefixVEX2Bytes || p&0xFF == PrefixVEX3Bytes\n}\n\nfunc (p Prefix) String() string {\n\tp &^= PrefixImplicit | PrefixIgnored | PrefixInvalid\n\tif s := prefixNames[p]; s != \"\" {\n\t\treturn s\n\t}\n\n\tif p.IsREX() {\n\t\ts := \"REX.\"\n\t\tif p&PrefixREXW != 0 {\n\t\t\ts += \"W\"\n\t\t}\n\t\tif p&PrefixREXR != 0 {\n\t\t\ts += \"R\"\n\t\t}\n\t\tif p&PrefixREXX != 0 {\n\t\t\ts += \"X\"\n\t\t}\n\t\tif p&PrefixREXB != 0 {\n\t\t\ts += \"B\"\n\t\t}\n\t\treturn s\n\t}\n\n\treturn fmt.Sprintf(\"Prefix(%#x)\", int(p))\n}\n\n// An Op is an x86 opcode.\ntype Op uint32\n\nfunc (op Op) String() string {\n\ti := int(op)\n\tif i < 0 || i >= len(opNames) || opNames[i] == \"\" {\n\t\treturn fmt.Sprintf(\"Op(%d)\", i)\n\t}\n\treturn opNames[i]\n}\n\n// An Args holds the instruction arguments.\n// If an instruction has fewer than 4 arguments,\n// the final elements in the array are nil.\ntype Args [4]Arg\n\n// An Arg is a single instruction argument,\n// one of these types: Reg, Mem, Imm, Rel.\ntype Arg interface {\n\tString() string\n\tisArg()\n}\n\n// Note that the implements of Arg that follow are all sized\n// so that on a 64-bit machine the data can be inlined in\n// the interface value instead of requiring an allocation.\n\n// A Reg is a single register.\n// The zero Reg value has no name but indicates “no register.”\ntype Reg uint8\n\nconst (\n\t_ Reg = iota\n\n\t// 8-bit\n\tAL\n\tCL\n\tDL\n\tBL\n\tAH\n\tCH\n\tDH\n\tBH\n\tSPB\n\tBPB\n\tSIB\n\tDIB\n\tR8B\n\tR9B\n\tR10B\n\tR11B\n\tR12B\n\tR13B\n\tR14B\n\tR15B\n\n\t// 16-bit\n\tAX\n\tCX\n\tDX\n\tBX\n\tSP\n\tBP\n\tSI\n\tDI\n\tR8W\n\tR9W\n\tR10W\n\tR11W\n\tR12W\n\tR13W\n\tR14W\n\tR15W\n\n\t// 32-bit\n\tEAX\n\tECX\n\tEDX\n\tEBX\n\tESP\n\tEBP\n\tESI\n\tEDI\n\tR8L\n\tR9L\n\tR10L\n\tR11L\n\tR12L\n\tR13L\n\tR14L\n\tR15L\n\n\t// 64-bit\n\tRAX\n\tRCX\n\tRDX\n\tRBX\n\tRSP\n\tRBP\n\tRSI\n\tRDI\n\tR8\n\tR9\n\tR10\n\tR11\n\tR12\n\tR13\n\tR14\n\tR15\n\n\t// Instruction pointer.\n\tIP  // 16-bit\n\tEIP // 32-bit\n\tRIP // 64-bit\n\n\t// 387 floating point registers.\n\tF0\n\tF1\n\tF2\n\tF3\n\tF4\n\tF5\n\tF6\n\tF7\n\n\t// MMX registers.\n\tM0\n\tM1\n\tM2\n\tM3\n\tM4\n\tM5\n\tM6\n\tM7\n\n\t// XMM registers.\n\tX0\n\tX1\n\tX2\n\tX3\n\tX4\n\tX5\n\tX6\n\tX7\n\tX8\n\tX9\n\tX10\n\tX11\n\tX12\n\tX13\n\tX14\n\tX15\n\n\t// Segment registers.\n\tES\n\tCS\n\tSS\n\tDS\n\tFS\n\tGS\n\n\t// System registers.\n\tGDTR\n\tIDTR\n\tLDTR\n\tMSW\n\tTASK\n\n\t// Control registers.\n\tCR0\n\tCR1\n\tCR2\n\tCR3\n\tCR4\n\tCR5\n\tCR6\n\tCR7\n\tCR8\n\tCR9\n\tCR10\n\tCR11\n\tCR12\n\tCR13\n\tCR14\n\tCR15\n\n\t// Debug registers.\n\tDR0\n\tDR1\n\tDR2\n\tDR3\n\tDR4\n\tDR5\n\tDR6\n\tDR7\n\tDR8\n\tDR9\n\tDR10\n\tDR11\n\tDR12\n\tDR13\n\tDR14\n\tDR15\n\n\t// Task registers.\n\tTR0\n\tTR1\n\tTR2\n\tTR3\n\tTR4\n\tTR5\n\tTR6\n\tTR7\n)\n\nconst regMax = TR7\n\nfunc (Reg) isArg() {}\n\nfunc (r Reg) String() string {\n\ti := int(r)\n\tif i < 0 || i >= len(regNames) || regNames[i] == \"\" {\n\t\treturn fmt.Sprintf(\"Reg(%d)\", i)\n\t}\n\treturn regNames[i]\n}\n\n// A Mem is a memory reference.\n// The general form is Segment:[Base+Scale*Index+Disp].\ntype Mem struct {\n\tSegment Reg\n\tBase    Reg\n\tScale   uint8\n\tIndex   Reg\n\tDisp    int64\n}\n\nfunc (Mem) isArg() {}\n\nfunc (m Mem) String() string {\n\tvar base, plus, scale, index, disp string\n\n\tif m.Base != 0 {\n\t\tbase = m.Base.String()\n\t}\n\tif m.Scale != 0 {\n\t\tif m.Base != 0 {\n\t\t\tplus = \"+\"\n\t\t}\n\t\tif m.Scale > 1 {\n\t\t\tscale = fmt.Sprintf(\"%d*\", m.Scale)\n\t\t}\n\t\tindex = m.Index.String()\n\t}\n\tif m.Disp != 0 || m.Base == 0 && m.Scale == 0 {\n\t\tdisp = fmt.Sprintf(\"%+#x\", m.Disp)\n\t}\n\treturn \"[\" + base + plus + scale + index + disp + \"]\"\n}\n\n// A Rel is an offset relative to the current instruction pointer.\ntype Rel int32\n\nfunc (Rel) isArg() {}\n\nfunc (r Rel) String() string {\n\treturn fmt.Sprintf(\".%+d\", r)\n}\n\n// An Imm is an integer constant.\ntype Imm int64\n\nfunc (Imm) isArg() {}\n\nfunc (i Imm) String() string {\n\treturn fmt.Sprintf(\"%#x\", int64(i))\n}\n\nfunc (i Inst) String() string {\n\tvar buf bytes.Buffer\n\tfor _, p := range i.Prefix {\n\t\tif p == 0 {\n\t\t\tbreak\n\t\t}\n\t\tif p&PrefixImplicit != 0 {\n\t\t\tcontinue\n\t\t}\n\t\tfmt.Fprintf(&buf, \"%v \", p)\n\t}\n\tfmt.Fprintf(&buf, \"%v\", i.Op)\n\tsep := \" \"\n\tfor _, v := range i.Args {\n\t\tif v == nil {\n\t\t\tbreak\n\t\t}\n\t\tfmt.Fprintf(&buf, \"%s%v\", sep, v)\n\t\tsep = \", \"\n\t}\n\treturn buf.String()\n}\n\nfunc isReg(a Arg) bool {\n\t_, ok := a.(Reg)\n\treturn ok\n}\n\nfunc isSegReg(a Arg) bool {\n\tr, ok := a.(Reg)\n\treturn ok && ES <= r && r <= GS\n}\n\nfunc isMem(a Arg) bool {\n\t_, ok := a.(Mem)\n\treturn ok\n}\n\nfunc isImm(a Arg) bool {\n\t_, ok := a.(Imm)\n\treturn ok\n}\n\nfunc regBytes(a Arg) int {\n\tr, ok := a.(Reg)\n\tif !ok {\n\t\treturn 0\n\t}\n\tif AL <= r && r <= R15B {\n\t\treturn 1\n\t}\n\tif AX <= r && r <= R15W {\n\t\treturn 2\n\t}\n\tif EAX <= r && r <= R15L {\n\t\treturn 4\n\t}\n\tif RAX <= r && r <= R15 {\n\t\treturn 8\n\t}\n\treturn 0\n}\n\nfunc isSegment(p Prefix) bool {\n\tswitch p {\n\tcase PrefixCS, PrefixDS, PrefixES, PrefixFS, PrefixGS, PrefixSS:\n\t\treturn true\n\t}\n\treturn false\n}\n\n// The Op definitions and string list are in tables.go.\n\nvar prefixNames = map[Prefix]string{\n\tPrefixCS:       \"CS\",\n\tPrefixDS:       \"DS\",\n\tPrefixES:       \"ES\",\n\tPrefixFS:       \"FS\",\n\tPrefixGS:       \"GS\",\n\tPrefixSS:       \"SS\",\n\tPrefixLOCK:     \"LOCK\",\n\tPrefixREP:      \"REP\",\n\tPrefixREPN:     \"REPN\",\n\tPrefixAddrSize: \"ADDRSIZE\",\n\tPrefixDataSize: \"DATASIZE\",\n\tPrefixAddr16:   \"ADDR16\",\n\tPrefixData16:   \"DATA16\",\n\tPrefixAddr32:   \"ADDR32\",\n\tPrefixData32:   \"DATA32\",\n\tPrefixBND:      \"BND\",\n\tPrefixXACQUIRE: \"XACQUIRE\",\n\tPrefixXRELEASE: \"XRELEASE\",\n\tPrefixREX:      \"REX\",\n\tPrefixPT:       \"PT\",\n\tPrefixPN:       \"PN\",\n}\n\nvar regNames = [...]string{\n\tAL:   \"AL\",\n\tCL:   \"CL\",\n\tBL:   \"BL\",\n\tDL:   \"DL\",\n\tAH:   \"AH\",\n\tCH:   \"CH\",\n\tBH:   \"BH\",\n\tDH:   \"DH\",\n\tSPB:  \"SPB\",\n\tBPB:  \"BPB\",\n\tSIB:  \"SIB\",\n\tDIB:  \"DIB\",\n\tR8B:  \"R8B\",\n\tR9B:  \"R9B\",\n\tR10B: \"R10B\",\n\tR11B: \"R11B\",\n\tR12B: \"R12B\",\n\tR13B: \"R13B\",\n\tR14B: \"R14B\",\n\tR15B: \"R15B\",\n\tAX:   \"AX\",\n\tCX:   \"CX\",\n\tBX:   \"BX\",\n\tDX:   \"DX\",\n\tSP:   \"SP\",\n\tBP:   \"BP\",\n\tSI:   \"SI\",\n\tDI:   \"DI\",\n\tR8W:  \"R8W\",\n\tR9W:  \"R9W\",\n\tR10W: \"R10W\",\n\tR11W: \"R11W\",\n\tR12W: \"R12W\",\n\tR13W: \"R13W\",\n\tR14W: \"R14W\",\n\tR15W: \"R15W\",\n\tEAX:  \"EAX\",\n\tECX:  \"ECX\",\n\tEDX:  \"EDX\",\n\tEBX:  \"EBX\",\n\tESP:  \"ESP\",\n\tEBP:  \"EBP\",\n\tESI:  \"ESI\",\n\tEDI:  \"EDI\",\n\tR8L:  \"R8L\",\n\tR9L:  \"R9L\",\n\tR10L: \"R10L\",\n\tR11L: \"R11L\",\n\tR12L: \"R12L\",\n\tR13L: \"R13L\",\n\tR14L: \"R14L\",\n\tR15L: \"R15L\",\n\tRAX:  \"RAX\",\n\tRCX:  \"RCX\",\n\tRDX:  \"RDX\",\n\tRBX:  \"RBX\",\n\tRSP:  \"RSP\",\n\tRBP:  \"RBP\",\n\tRSI:  \"RSI\",\n\tRDI:  \"RDI\",\n\tR8:   \"R8\",\n\tR9:   \"R9\",\n\tR10:  \"R10\",\n\tR11:  \"R11\",\n\tR12:  \"R12\",\n\tR13:  \"R13\",\n\tR14:  \"R14\",\n\tR15:  \"R15\",\n\tIP:   \"IP\",\n\tEIP:  \"EIP\",\n\tRIP:  \"RIP\",\n\tF0:   \"F0\",\n\tF1:   \"F1\",\n\tF2:   \"F2\",\n\tF3:   \"F3\",\n\tF4:   \"F4\",\n\tF5:   \"F5\",\n\tF6:   \"F6\",\n\tF7:   \"F7\",\n\tM0:   \"M0\",\n\tM1:   \"M1\",\n\tM2:   \"M2\",\n\tM3:   \"M3\",\n\tM4:   \"M4\",\n\tM5:   \"M5\",\n\tM6:   \"M6\",\n\tM7:   \"M7\",\n\tX0:   \"X0\",\n\tX1:   \"X1\",\n\tX2:   \"X2\",\n\tX3:   \"X3\",\n\tX4:   \"X4\",\n\tX5:   \"X5\",\n\tX6:   \"X6\",\n\tX7:   \"X7\",\n\tX8:   \"X8\",\n\tX9:   \"X9\",\n\tX10:  \"X10\",\n\tX11:  \"X11\",\n\tX12:  \"X12\",\n\tX13:  \"X13\",\n\tX14:  \"X14\",\n\tX15:  \"X15\",\n\tCS:   \"CS\",\n\tSS:   \"SS\",\n\tDS:   \"DS\",\n\tES:   \"ES\",\n\tFS:   \"FS\",\n\tGS:   \"GS\",\n\tGDTR: \"GDTR\",\n\tIDTR: \"IDTR\",\n\tLDTR: \"LDTR\",\n\tMSW:  \"MSW\",\n\tTASK: \"TASK\",\n\tCR0:  \"CR0\",\n\tCR1:  \"CR1\",\n\tCR2:  \"CR2\",\n\tCR3:  \"CR3\",\n\tCR4:  \"CR4\",\n\tCR5:  \"CR5\",\n\tCR6:  \"CR6\",\n\tCR7:  \"CR7\",\n\tCR8:  \"CR8\",\n\tCR9:  \"CR9\",\n\tCR10: \"CR10\",\n\tCR11: \"CR11\",\n\tCR12: \"CR12\",\n\tCR13: \"CR13\",\n\tCR14: \"CR14\",\n\tCR15: \"CR15\",\n\tDR0:  \"DR0\",\n\tDR1:  \"DR1\",\n\tDR2:  \"DR2\",\n\tDR3:  \"DR3\",\n\tDR4:  \"DR4\",\n\tDR5:  \"DR5\",\n\tDR6:  \"DR6\",\n\tDR7:  \"DR7\",\n\tDR8:  \"DR8\",\n\tDR9:  \"DR9\",\n\tDR10: \"DR10\",\n\tDR11: \"DR11\",\n\tDR12: \"DR12\",\n\tDR13: \"DR13\",\n\tDR14: \"DR14\",\n\tDR15: \"DR15\",\n\tTR0:  \"TR0\",\n\tTR1:  \"TR1\",\n\tTR2:  \"TR2\",\n\tTR3:  \"TR3\",\n\tTR4:  \"TR4\",\n\tTR5:  \"TR5\",\n\tTR6:  \"TR6\",\n\tTR7:  \"TR7\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/x86/x86asm/intel.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage x86asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\n// IntelSyntax returns the Intel assembler syntax for the instruction, as defined by Intel's XED tool.\nfunc IntelSyntax(inst Inst, pc uint64, symname SymLookup) string {\n\tif symname == nil {\n\t\tsymname = func(uint64) (string, uint64) { return \"\", 0 }\n\t}\n\n\tvar iargs []Arg\n\tfor _, a := range inst.Args {\n\t\tif a == nil {\n\t\t\tbreak\n\t\t}\n\t\tiargs = append(iargs, a)\n\t}\n\n\tswitch inst.Op {\n\tcase INSB, INSD, INSW, OUTSB, OUTSD, OUTSW, LOOPNE, JCXZ, JECXZ, JRCXZ, LOOP, LOOPE, MOV, XLATB:\n\t\tif inst.Op == MOV && (inst.Opcode>>16)&0xFFFC != 0x0F20 {\n\t\t\tbreak\n\t\t}\n\t\tfor i, p := range inst.Prefix {\n\t\t\tif p&0xFF == PrefixAddrSize {\n\t\t\t\tinst.Prefix[i] &^= PrefixImplicit\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch inst.Op {\n\tcase MOV:\n\t\tdst, _ := inst.Args[0].(Reg)\n\t\tsrc, _ := inst.Args[1].(Reg)\n\t\tif ES <= dst && dst <= GS && EAX <= src && src <= R15L {\n\t\t\tsrc -= EAX - AX\n\t\t\tiargs[1] = src\n\t\t}\n\t\tif ES <= dst && dst <= GS && RAX <= src && src <= R15 {\n\t\t\tsrc -= RAX - AX\n\t\t\tiargs[1] = src\n\t\t}\n\n\t\tif inst.Opcode>>24&^3 == 0xA0 {\n\t\t\tfor i, p := range inst.Prefix {\n\t\t\t\tif p&0xFF == PrefixAddrSize {\n\t\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch inst.Op {\n\tcase AAM, AAD:\n\t\tif imm, ok := iargs[0].(Imm); ok {\n\t\t\tif inst.DataSize == 32 {\n\t\t\t\tiargs[0] = Imm(uint32(int8(imm)))\n\t\t\t} else if inst.DataSize == 16 {\n\t\t\t\tiargs[0] = Imm(uint16(int8(imm)))\n\t\t\t}\n\t\t}\n\n\tcase PUSH:\n\t\tif imm, ok := iargs[0].(Imm); ok {\n\t\t\tiargs[0] = Imm(uint32(imm))\n\t\t}\n\t}\n\n\tfor _, p := range inst.Prefix {\n\t\tif p&PrefixImplicit != 0 {\n\t\t\tfor j, pj := range inst.Prefix {\n\t\t\t\tif pj&0xFF == p&0xFF {\n\t\t\t\t\tinst.Prefix[j] |= PrefixImplicit\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif inst.Op != 0 {\n\t\tfor i, p := range inst.Prefix {\n\t\t\tswitch p &^ PrefixIgnored {\n\t\t\tcase PrefixData16, PrefixData32, PrefixCS, PrefixDS, PrefixES, PrefixSS:\n\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t}\n\t\t\tif p.IsREX() {\n\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t}\n\t\t\tif p.IsVEX() {\n\t\t\t\tif p == PrefixVEX3Bytes {\n\t\t\t\t\tinst.Prefix[i+2] |= PrefixImplicit\n\t\t\t\t}\n\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t\tinst.Prefix[i+1] |= PrefixImplicit\n\t\t\t}\n\t\t}\n\t}\n\n\tif isLoop[inst.Op] || inst.Op == JCXZ || inst.Op == JECXZ || inst.Op == JRCXZ {\n\t\tfor i, p := range inst.Prefix {\n\t\t\tif p == PrefixPT || p == PrefixPN {\n\t\t\t\tinst.Prefix[i] |= PrefixImplicit\n\t\t\t}\n\t\t}\n\t}\n\n\tswitch inst.Op {\n\tcase AAA, AAS, CBW, CDQE, CLC, CLD, CLI, CLTS, CMC, CPUID, CQO, CWD, DAA, DAS,\n\t\tFDECSTP, FINCSTP, FNCLEX, FNINIT, FNOP, FWAIT, HLT,\n\t\tICEBP, INSB, INSD, INSW, INT, INTO, INVD, IRET, IRETQ,\n\t\tLAHF, LEAVE, LRET, MONITOR, MWAIT, NOP, OUTSB, OUTSD, OUTSW,\n\t\tPAUSE, POPA, POPF, POPFQ, PUSHA, PUSHF, PUSHFQ,\n\t\tRDMSR, RDPMC, RDTSC, RDTSCP, RET, RSM,\n\t\tSAHF, STC, STD, STI, SYSENTER, SYSEXIT, SYSRET,\n\t\tUD2, WBINVD, WRMSR, XEND, XLATB, XTEST:\n\n\t\tif inst.Op == NOP && inst.Opcode>>24 != 0x90 {\n\t\t\tbreak\n\t\t}\n\t\tif inst.Op == RET && inst.Opcode>>24 != 0xC3 {\n\t\t\tbreak\n\t\t}\n\t\tif inst.Op == INT && inst.Opcode>>24 != 0xCC {\n\t\t\tbreak\n\t\t}\n\t\tif inst.Op == LRET && inst.Opcode>>24 != 0xcb {\n\t\t\tbreak\n\t\t}\n\t\tfor i, p := range inst.Prefix {\n\t\t\tif p&0xFF == PrefixDataSize {\n\t\t\t\tinst.Prefix[i] &^= PrefixImplicit | PrefixIgnored\n\t\t\t}\n\t\t}\n\n\tcase 0:\n\t\t// ok\n\t}\n\n\tswitch inst.Op {\n\tcase INSB, INSD, INSW, OUTSB, OUTSD, OUTSW, MONITOR, MWAIT, XLATB:\n\t\tiargs = nil\n\n\tcase STOSB, STOSW, STOSD, STOSQ:\n\t\tiargs = iargs[:1]\n\n\tcase LODSB, LODSW, LODSD, LODSQ, SCASB, SCASW, SCASD, SCASQ:\n\t\tiargs = iargs[1:]\n\t}\n\n\tconst (\n\t\thaveData16 = 1 << iota\n\t\thaveData32\n\t\thaveAddr16\n\t\thaveAddr32\n\t\thaveXacquire\n\t\thaveXrelease\n\t\thaveLock\n\t\thaveHintTaken\n\t\thaveHintNotTaken\n\t\thaveBnd\n\t)\n\tvar prefixBits uint32\n\tprefix := \"\"\n\tfor _, p := range inst.Prefix {\n\t\tif p == 0 {\n\t\t\tbreak\n\t\t}\n\t\tif p&0xFF == 0xF3 {\n\t\t\tprefixBits &^= haveBnd\n\t\t}\n\t\tif p&(PrefixImplicit|PrefixIgnored) != 0 {\n\t\t\tcontinue\n\t\t}\n\t\tswitch p {\n\t\tdefault:\n\t\t\tprefix += strings.ToLower(p.String()) + \" \"\n\t\tcase PrefixCS, PrefixDS, PrefixES, PrefixFS, PrefixGS, PrefixSS:\n\t\t\tif inst.Op == 0 {\n\t\t\t\tprefix += strings.ToLower(p.String()) + \" \"\n\t\t\t}\n\t\tcase PrefixREPN:\n\t\t\tprefix += \"repne \"\n\t\tcase PrefixLOCK:\n\t\t\tprefixBits |= haveLock\n\t\tcase PrefixData16, PrefixDataSize:\n\t\t\tprefixBits |= haveData16\n\t\tcase PrefixData32:\n\t\t\tprefixBits |= haveData32\n\t\tcase PrefixAddrSize, PrefixAddr16:\n\t\t\tprefixBits |= haveAddr16\n\t\tcase PrefixAddr32:\n\t\t\tprefixBits |= haveAddr32\n\t\tcase PrefixXACQUIRE:\n\t\t\tprefixBits |= haveXacquire\n\t\tcase PrefixXRELEASE:\n\t\t\tprefixBits |= haveXrelease\n\t\tcase PrefixPT:\n\t\t\tprefixBits |= haveHintTaken\n\t\tcase PrefixPN:\n\t\t\tprefixBits |= haveHintNotTaken\n\t\tcase PrefixBND:\n\t\t\tprefixBits |= haveBnd\n\t\t}\n\t}\n\tswitch inst.Op {\n\tcase JMP:\n\t\tif inst.Opcode>>24 == 0xEB {\n\t\t\tprefixBits &^= haveBnd\n\t\t}\n\tcase RET, LRET:\n\t\tprefixBits &^= haveData16 | haveData32\n\t}\n\n\tif prefixBits&haveXacquire != 0 {\n\t\tprefix += \"xacquire \"\n\t}\n\tif prefixBits&haveXrelease != 0 {\n\t\tprefix += \"xrelease \"\n\t}\n\tif prefixBits&haveLock != 0 {\n\t\tprefix += \"lock \"\n\t}\n\tif prefixBits&haveBnd != 0 {\n\t\tprefix += \"bnd \"\n\t}\n\tif prefixBits&haveHintTaken != 0 {\n\t\tprefix += \"hint-taken \"\n\t}\n\tif prefixBits&haveHintNotTaken != 0 {\n\t\tprefix += \"hint-not-taken \"\n\t}\n\tif prefixBits&haveAddr16 != 0 {\n\t\tprefix += \"addr16 \"\n\t}\n\tif prefixBits&haveAddr32 != 0 {\n\t\tprefix += \"addr32 \"\n\t}\n\tif prefixBits&haveData16 != 0 {\n\t\tprefix += \"data16 \"\n\t}\n\tif prefixBits&haveData32 != 0 {\n\t\tprefix += \"data32 \"\n\t}\n\n\tif inst.Op == 0 {\n\t\tif prefix == \"\" {\n\t\t\treturn \"<no instruction>\"\n\t\t}\n\t\treturn prefix[:len(prefix)-1]\n\t}\n\n\tvar args []string\n\tfor _, a := range iargs {\n\t\tif a == nil {\n\t\t\tbreak\n\t\t}\n\t\targs = append(args, intelArg(&inst, pc, symname, a))\n\t}\n\n\tvar op string\n\tswitch inst.Op {\n\tcase NOP:\n\t\tif inst.Opcode>>24 == 0x0F {\n\t\t\tif inst.DataSize == 16 {\n\t\t\t\targs = append(args, \"ax\")\n\t\t\t} else {\n\t\t\t\targs = append(args, \"eax\")\n\t\t\t}\n\t\t}\n\n\tcase BLENDVPD, BLENDVPS, PBLENDVB:\n\t\targs = args[:2]\n\n\tcase INT:\n\t\tif inst.Opcode>>24 == 0xCC {\n\t\t\targs = nil\n\t\t\top = \"int3\"\n\t\t}\n\n\tcase LCALL, LJMP:\n\t\tif len(args) == 2 {\n\t\t\targs[0], args[1] = args[1], args[0]\n\t\t}\n\n\tcase FCHS, FABS, FTST, FLDPI, FLDL2E, FLDLG2, F2XM1, FXAM, FLD1, FLDL2T, FSQRT, FRNDINT, FCOS, FSIN:\n\t\tif len(args) == 0 {\n\t\t\targs = append(args, \"st0\")\n\t\t}\n\n\tcase FPTAN, FSINCOS, FUCOMPP, FCOMPP, FYL2X, FPATAN, FXTRACT, FPREM1, FPREM, FYL2XP1, FSCALE:\n\t\tif len(args) == 0 {\n\t\t\targs = []string{\"st0\", \"st1\"}\n\t\t}\n\n\tcase FST, FSTP, FISTTP, FIST, FISTP, FBSTP:\n\t\tif len(args) == 1 {\n\t\t\targs = append(args, \"st0\")\n\t\t}\n\n\tcase FLD, FXCH, FCOM, FCOMP, FIADD, FIMUL, FICOM, FICOMP, FISUBR, FIDIV, FUCOM, FUCOMP, FILD, FBLD, FADD, FMUL, FSUB, FSUBR, FISUB, FDIV, FDIVR, FIDIVR:\n\t\tif len(args) == 1 {\n\t\t\targs = []string{\"st0\", args[0]}\n\t\t}\n\n\tcase MASKMOVDQU, MASKMOVQ, XLATB, OUTSB, OUTSW, OUTSD:\n\tFixSegment:\n\t\tfor i := len(inst.Prefix) - 1; i >= 0; i-- {\n\t\t\tp := inst.Prefix[i] & 0xFF\n\t\t\tswitch p {\n\t\t\tcase PrefixCS, PrefixES, PrefixFS, PrefixGS, PrefixSS:\n\t\t\t\tif inst.Mode != 64 || p == PrefixFS || p == PrefixGS {\n\t\t\t\t\targs = append(args, strings.ToLower((inst.Prefix[i] & 0xFF).String()))\n\t\t\t\t\tbreak FixSegment\n\t\t\t\t}\n\t\t\tcase PrefixDS:\n\t\t\t\tif inst.Mode != 64 {\n\t\t\t\t\tbreak FixSegment\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif op == \"\" {\n\t\top = intelOp[inst.Op]\n\t}\n\tif op == \"\" {\n\t\top = strings.ToLower(inst.Op.String())\n\t}\n\tif args != nil {\n\t\top += \" \" + strings.Join(args, \", \")\n\t}\n\treturn prefix + op\n}\n\nfunc intelArg(inst *Inst, pc uint64, symname SymLookup, arg Arg) string {\n\tswitch a := arg.(type) {\n\tcase Imm:\n\t\tif s, base := symname(uint64(a)); s != \"\" {\n\t\t\tsuffix := \"\"\n\t\t\tif uint64(a) != base {\n\t\t\t\tsuffix = fmt.Sprintf(\"%+d\", uint64(a)-base)\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"$%s%s\", s, suffix)\n\t\t}\n\t\tif inst.Mode == 32 {\n\t\t\treturn fmt.Sprintf(\"%#x\", uint32(a))\n\t\t}\n\t\tif Imm(int32(a)) == a {\n\t\t\treturn fmt.Sprintf(\"%#x\", int64(a))\n\t\t}\n\t\treturn fmt.Sprintf(\"%#x\", uint64(a))\n\tcase Mem:\n\t\tif a.Base == EIP {\n\t\t\ta.Base = RIP\n\t\t}\n\t\tprefix := \"\"\n\t\tswitch inst.MemBytes {\n\t\tcase 1:\n\t\t\tprefix = \"byte \"\n\t\tcase 2:\n\t\t\tprefix = \"word \"\n\t\tcase 4:\n\t\t\tprefix = \"dword \"\n\t\tcase 8:\n\t\t\tprefix = \"qword \"\n\t\tcase 16:\n\t\t\tprefix = \"xmmword \"\n\t\tcase 32:\n\t\t\tprefix = \"ymmword \"\n\t\t}\n\t\tswitch inst.Op {\n\t\tcase INVLPG:\n\t\t\tprefix = \"byte \"\n\t\tcase STOSB, MOVSB, CMPSB, LODSB, SCASB:\n\t\t\tprefix = \"byte \"\n\t\tcase STOSW, MOVSW, CMPSW, LODSW, SCASW:\n\t\t\tprefix = \"word \"\n\t\tcase STOSD, MOVSD, CMPSD, LODSD, SCASD:\n\t\t\tprefix = \"dword \"\n\t\tcase STOSQ, MOVSQ, CMPSQ, LODSQ, SCASQ:\n\t\t\tprefix = \"qword \"\n\t\tcase LAR:\n\t\t\tprefix = \"word \"\n\t\tcase BOUND:\n\t\t\tif inst.Mode == 32 {\n\t\t\t\tprefix = \"qword \"\n\t\t\t} else {\n\t\t\t\tprefix = \"dword \"\n\t\t\t}\n\t\tcase PREFETCHW, PREFETCHNTA, PREFETCHT0, PREFETCHT1, PREFETCHT2, CLFLUSH:\n\t\t\tprefix = \"zmmword \"\n\t\t}\n\t\tswitch inst.Op {\n\t\tcase MOVSB, MOVSW, MOVSD, MOVSQ, CMPSB, CMPSW, CMPSD, CMPSQ, STOSB, STOSW, STOSD, STOSQ, SCASB, SCASW, SCASD, SCASQ, LODSB, LODSW, LODSD, LODSQ:\n\t\t\tswitch a.Base {\n\t\t\tcase DI, EDI, RDI:\n\t\t\t\tif a.Segment == ES {\n\t\t\t\t\ta.Segment = 0\n\t\t\t\t}\n\t\t\tcase SI, ESI, RSI:\n\t\t\t\tif a.Segment == DS {\n\t\t\t\t\ta.Segment = 0\n\t\t\t\t}\n\t\t\t}\n\t\tcase LEA:\n\t\t\ta.Segment = 0\n\t\tdefault:\n\t\t\tswitch a.Base {\n\t\t\tcase SP, ESP, RSP, BP, EBP, RBP:\n\t\t\t\tif a.Segment == SS {\n\t\t\t\t\ta.Segment = 0\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tif a.Segment == DS {\n\t\t\t\t\ta.Segment = 0\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif inst.Mode == 64 && a.Segment != FS && a.Segment != GS {\n\t\t\ta.Segment = 0\n\t\t}\n\n\t\tprefix += \"ptr \"\n\t\tif s, disp := memArgToSymbol(a, pc, inst.Len, symname); s != \"\" {\n\t\t\tsuffix := \"\"\n\t\t\tif disp != 0 {\n\t\t\t\tsuffix = fmt.Sprintf(\"%+d\", disp)\n\t\t\t}\n\t\t\treturn prefix + fmt.Sprintf(\"[%s%s]\", s, suffix)\n\t\t}\n\t\tif a.Segment != 0 {\n\t\t\tprefix += strings.ToLower(a.Segment.String()) + \":\"\n\t\t}\n\t\tprefix += \"[\"\n\t\tif a.Base != 0 {\n\t\t\tprefix += intelArg(inst, pc, symname, a.Base)\n\t\t}\n\t\tif a.Scale != 0 && a.Index != 0 {\n\t\t\tif a.Base != 0 {\n\t\t\t\tprefix += \"+\"\n\t\t\t}\n\t\t\tprefix += fmt.Sprintf(\"%s*%d\", intelArg(inst, pc, symname, a.Index), a.Scale)\n\t\t}\n\t\tif a.Disp != 0 {\n\t\t\tif prefix[len(prefix)-1] == '[' && (a.Disp >= 0 || int64(int32(a.Disp)) != a.Disp) {\n\t\t\t\tprefix += fmt.Sprintf(\"%#x\", uint64(a.Disp))\n\t\t\t} else {\n\t\t\t\tprefix += fmt.Sprintf(\"%+#x\", a.Disp)\n\t\t\t}\n\t\t}\n\t\tprefix += \"]\"\n\t\treturn prefix\n\tcase Rel:\n\t\tif pc == 0 {\n\t\t\treturn fmt.Sprintf(\".%+#x\", int64(a))\n\t\t} else {\n\t\t\taddr := pc + uint64(inst.Len) + uint64(a)\n\t\t\tif s, base := symname(addr); s != \"\" && addr == base {\n\t\t\t\treturn fmt.Sprintf(\"%s\", s)\n\t\t\t} else {\n\t\t\t\taddr := pc + uint64(inst.Len) + uint64(a)\n\t\t\t\treturn fmt.Sprintf(\"%#x\", addr)\n\t\t\t}\n\t\t}\n\tcase Reg:\n\t\tif int(a) < len(intelReg) && intelReg[a] != \"\" {\n\t\t\tswitch inst.Op {\n\t\t\tcase VMOVDQA, VMOVDQU, VMOVNTDQA, VMOVNTDQ:\n\t\t\t\treturn strings.Replace(intelReg[a], \"xmm\", \"ymm\", -1)\n\t\t\tdefault:\n\t\t\t\treturn intelReg[a]\n\t\t\t}\n\t\t}\n\t}\n\treturn strings.ToLower(arg.String())\n}\n\nvar intelOp = map[Op]string{\n\tJAE:       \"jnb\",\n\tJA:        \"jnbe\",\n\tJGE:       \"jnl\",\n\tJNE:       \"jnz\",\n\tJG:        \"jnle\",\n\tJE:        \"jz\",\n\tSETAE:     \"setnb\",\n\tSETA:      \"setnbe\",\n\tSETGE:     \"setnl\",\n\tSETNE:     \"setnz\",\n\tSETG:      \"setnle\",\n\tSETE:      \"setz\",\n\tCMOVAE:    \"cmovnb\",\n\tCMOVA:     \"cmovnbe\",\n\tCMOVGE:    \"cmovnl\",\n\tCMOVNE:    \"cmovnz\",\n\tCMOVG:     \"cmovnle\",\n\tCMOVE:     \"cmovz\",\n\tLCALL:     \"call far\",\n\tLJMP:      \"jmp far\",\n\tLRET:      \"ret far\",\n\tICEBP:     \"int1\",\n\tMOVSD_XMM: \"movsd\",\n\tXLATB:     \"xlat\",\n}\n\nvar intelReg = [...]string{\n\tF0:  \"st0\",\n\tF1:  \"st1\",\n\tF2:  \"st2\",\n\tF3:  \"st3\",\n\tF4:  \"st4\",\n\tF5:  \"st5\",\n\tF6:  \"st6\",\n\tF7:  \"st7\",\n\tM0:  \"mmx0\",\n\tM1:  \"mmx1\",\n\tM2:  \"mmx2\",\n\tM3:  \"mmx3\",\n\tM4:  \"mmx4\",\n\tM5:  \"mmx5\",\n\tM6:  \"mmx6\",\n\tM7:  \"mmx7\",\n\tX0:  \"xmm0\",\n\tX1:  \"xmm1\",\n\tX2:  \"xmm2\",\n\tX3:  \"xmm3\",\n\tX4:  \"xmm4\",\n\tX5:  \"xmm5\",\n\tX6:  \"xmm6\",\n\tX7:  \"xmm7\",\n\tX8:  \"xmm8\",\n\tX9:  \"xmm9\",\n\tX10: \"xmm10\",\n\tX11: \"xmm11\",\n\tX12: \"xmm12\",\n\tX13: \"xmm13\",\n\tX14: \"xmm14\",\n\tX15: \"xmm15\",\n\n\t// TODO: Maybe the constants are named wrong.\n\tSPB: \"spl\",\n\tBPB: \"bpl\",\n\tSIB: \"sil\",\n\tDIB: \"dil\",\n\n\tR8L:  \"r8d\",\n\tR9L:  \"r9d\",\n\tR10L: \"r10d\",\n\tR11L: \"r11d\",\n\tR12L: \"r12d\",\n\tR13L: \"r13d\",\n\tR14L: \"r14d\",\n\tR15L: \"r15d\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/x86/x86asm/plan9x.go",
    "content": "// Copyright 2014 The Go Authors.  All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage x86asm\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype SymLookup func(uint64) (string, uint64)\n\n// GoSyntax returns the Go assembler syntax for the instruction.\n// The syntax was originally defined by Plan 9.\n// The pc is the program counter of the instruction, used for expanding\n// PC-relative addresses into absolute ones.\n// The symname function queries the symbol table for the program\n// being disassembled. Given a target address it returns the name and base\n// address of the symbol containing the target, if any; otherwise it returns \"\", 0.\nfunc GoSyntax(inst Inst, pc uint64, symname SymLookup) string {\n\tif symname == nil {\n\t\tsymname = func(uint64) (string, uint64) { return \"\", 0 }\n\t}\n\tvar args []string\n\tfor i := len(inst.Args) - 1; i >= 0; i-- {\n\t\ta := inst.Args[i]\n\t\tif a == nil {\n\t\t\tcontinue\n\t\t}\n\t\targs = append(args, plan9Arg(&inst, pc, symname, a))\n\t}\n\n\tvar rep string\n\tvar last Prefix\n\tfor _, p := range inst.Prefix {\n\t\tif p == 0 || p.IsREX() || p.IsVEX() {\n\t\t\tbreak\n\t\t}\n\n\t\tswitch {\n\t\t// Don't show prefixes implied by the instruction text.\n\t\tcase p&0xFF00 == PrefixImplicit:\n\t\t\tcontinue\n\t\t// Only REP and REPN are recognized repeaters. Plan 9 syntax\n\t\t// treats them as separate opcodes.\n\t\tcase p&0xFF == PrefixREP:\n\t\t\trep = \"REP; \"\n\t\tcase p&0xFF == PrefixREPN:\n\t\t\trep = \"REPNE; \"\n\t\tdefault:\n\t\t\tlast = p\n\t\t}\n\t}\n\n\tprefix := \"\"\n\tswitch last & 0xFF {\n\tcase 0, 0x66, 0x67:\n\t\t// ignore\n\tdefault:\n\t\tprefix += last.String() + \" \"\n\t}\n\n\top := inst.Op.String()\n\tif plan9Suffix[inst.Op] {\n\t\ts := inst.DataSize\n\t\tif inst.MemBytes != 0 {\n\t\t\ts = inst.MemBytes * 8\n\t\t} else if inst.Args[1] == nil { // look for register-only 64-bit instruction, like PUSHQ AX\n\t\t\tif r, ok := inst.Args[0].(Reg); ok && RAX <= r && r <= R15 {\n\t\t\t\ts = 64\n\t\t\t}\n\t\t}\n\t\tswitch s {\n\t\tcase 8:\n\t\t\top += \"B\"\n\t\tcase 16:\n\t\t\top += \"W\"\n\t\tcase 32:\n\t\t\top += \"L\"\n\t\tcase 64:\n\t\t\top += \"Q\"\n\t\t}\n\t}\n\n\tif inst.Op == CMP {\n\t\t// Use reads-left-to-right ordering for comparisons.\n\t\t// See issue 60920.\n\t\targs[0], args[1] = args[1], args[0]\n\t}\n\n\tif args != nil {\n\t\top += \" \" + strings.Join(args, \", \")\n\t}\n\n\treturn rep + prefix + op\n}\n\nfunc plan9Arg(inst *Inst, pc uint64, symname func(uint64) (string, uint64), arg Arg) string {\n\tswitch a := arg.(type) {\n\tcase Reg:\n\t\treturn plan9Reg[a]\n\tcase Rel:\n\t\tif pc == 0 {\n\t\t\tbreak\n\t\t}\n\t\t// If the absolute address is the start of a symbol, use the name.\n\t\t// Otherwise use the raw address, so that things like relative\n\t\t// jumps show up as JMP 0x123 instead of JMP f+10(SB).\n\t\t// It is usually easier to search for 0x123 than to do the mental\n\t\t// arithmetic to find f+10.\n\t\taddr := pc + uint64(inst.Len) + uint64(a)\n\t\tif s, base := symname(addr); s != \"\" && addr == base {\n\t\t\treturn fmt.Sprintf(\"%s(SB)\", s)\n\t\t}\n\t\treturn fmt.Sprintf(\"%#x\", addr)\n\n\tcase Imm:\n\t\tif s, base := symname(uint64(a)); s != \"\" {\n\t\t\tsuffix := \"\"\n\t\t\tif uint64(a) != base {\n\t\t\t\tsuffix = fmt.Sprintf(\"%+d\", uint64(a)-base)\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"$%s%s(SB)\", s, suffix)\n\t\t}\n\t\tif inst.Mode == 32 {\n\t\t\treturn fmt.Sprintf(\"$%#x\", uint32(a))\n\t\t}\n\t\tif Imm(int32(a)) == a {\n\t\t\treturn fmt.Sprintf(\"$%#x\", int64(a))\n\t\t}\n\t\treturn fmt.Sprintf(\"$%#x\", uint64(a))\n\tcase Mem:\n\t\tif s, disp := memArgToSymbol(a, pc, inst.Len, symname); s != \"\" {\n\t\t\tsuffix := \"\"\n\t\t\tif disp != 0 {\n\t\t\t\tsuffix = fmt.Sprintf(\"%+d\", disp)\n\t\t\t}\n\t\t\treturn fmt.Sprintf(\"%s%s(SB)\", s, suffix)\n\t\t}\n\t\ts := \"\"\n\t\tif a.Segment != 0 {\n\t\t\ts += fmt.Sprintf(\"%s:\", plan9Reg[a.Segment])\n\t\t}\n\t\tif a.Disp != 0 {\n\t\t\ts += fmt.Sprintf(\"%#x\", a.Disp)\n\t\t} else {\n\t\t\ts += \"0\"\n\t\t}\n\t\tif a.Base != 0 {\n\t\t\ts += fmt.Sprintf(\"(%s)\", plan9Reg[a.Base])\n\t\t}\n\t\tif a.Index != 0 && a.Scale != 0 {\n\t\t\ts += fmt.Sprintf(\"(%s*%d)\", plan9Reg[a.Index], a.Scale)\n\t\t}\n\t\treturn s\n\t}\n\treturn arg.String()\n}\n\nfunc memArgToSymbol(a Mem, pc uint64, instrLen int, symname SymLookup) (string, int64) {\n\tif a.Segment != 0 || a.Disp == 0 || a.Index != 0 || a.Scale != 0 {\n\t\treturn \"\", 0\n\t}\n\n\tvar disp uint64\n\tswitch a.Base {\n\tcase IP, EIP, RIP:\n\t\tdisp = uint64(a.Disp + int64(pc) + int64(instrLen))\n\tcase 0:\n\t\tdisp = uint64(a.Disp)\n\tdefault:\n\t\treturn \"\", 0\n\t}\n\n\ts, base := symname(disp)\n\treturn s, int64(disp) - int64(base)\n}\n\nvar plan9Suffix = [maxOp + 1]bool{\n\tADC:       true,\n\tADD:       true,\n\tAND:       true,\n\tBSF:       true,\n\tBSR:       true,\n\tBT:        true,\n\tBTC:       true,\n\tBTR:       true,\n\tBTS:       true,\n\tCMP:       true,\n\tCMPXCHG:   true,\n\tCVTSI2SD:  true,\n\tCVTSI2SS:  true,\n\tCVTSD2SI:  true,\n\tCVTSS2SI:  true,\n\tCVTTSD2SI: true,\n\tCVTTSS2SI: true,\n\tDEC:       true,\n\tDIV:       true,\n\tFLDENV:    true,\n\tFRSTOR:    true,\n\tIDIV:      true,\n\tIMUL:      true,\n\tIN:        true,\n\tINC:       true,\n\tLEA:       true,\n\tMOV:       true,\n\tMOVNTI:    true,\n\tMUL:       true,\n\tNEG:       true,\n\tNOP:       true,\n\tNOT:       true,\n\tOR:        true,\n\tOUT:       true,\n\tPOP:       true,\n\tPOPA:      true,\n\tPOPCNT:    true,\n\tPUSH:      true,\n\tPUSHA:     true,\n\tRCL:       true,\n\tRCR:       true,\n\tROL:       true,\n\tROR:       true,\n\tSAR:       true,\n\tSBB:       true,\n\tSHL:       true,\n\tSHLD:      true,\n\tSHR:       true,\n\tSHRD:      true,\n\tSUB:       true,\n\tTEST:      true,\n\tXADD:      true,\n\tXCHG:      true,\n\tXOR:       true,\n}\n\nvar plan9Reg = [...]string{\n\tAL:   \"AL\",\n\tCL:   \"CL\",\n\tBL:   \"BL\",\n\tDL:   \"DL\",\n\tAH:   \"AH\",\n\tCH:   \"CH\",\n\tBH:   \"BH\",\n\tDH:   \"DH\",\n\tSPB:  \"SP\",\n\tBPB:  \"BP\",\n\tSIB:  \"SI\",\n\tDIB:  \"DI\",\n\tR8B:  \"R8\",\n\tR9B:  \"R9\",\n\tR10B: \"R10\",\n\tR11B: \"R11\",\n\tR12B: \"R12\",\n\tR13B: \"R13\",\n\tR14B: \"R14\",\n\tR15B: \"R15\",\n\tAX:   \"AX\",\n\tCX:   \"CX\",\n\tBX:   \"BX\",\n\tDX:   \"DX\",\n\tSP:   \"SP\",\n\tBP:   \"BP\",\n\tSI:   \"SI\",\n\tDI:   \"DI\",\n\tR8W:  \"R8\",\n\tR9W:  \"R9\",\n\tR10W: \"R10\",\n\tR11W: \"R11\",\n\tR12W: \"R12\",\n\tR13W: \"R13\",\n\tR14W: \"R14\",\n\tR15W: \"R15\",\n\tEAX:  \"AX\",\n\tECX:  \"CX\",\n\tEDX:  \"DX\",\n\tEBX:  \"BX\",\n\tESP:  \"SP\",\n\tEBP:  \"BP\",\n\tESI:  \"SI\",\n\tEDI:  \"DI\",\n\tR8L:  \"R8\",\n\tR9L:  \"R9\",\n\tR10L: \"R10\",\n\tR11L: \"R11\",\n\tR12L: \"R12\",\n\tR13L: \"R13\",\n\tR14L: \"R14\",\n\tR15L: \"R15\",\n\tRAX:  \"AX\",\n\tRCX:  \"CX\",\n\tRDX:  \"DX\",\n\tRBX:  \"BX\",\n\tRSP:  \"SP\",\n\tRBP:  \"BP\",\n\tRSI:  \"SI\",\n\tRDI:  \"DI\",\n\tR8:   \"R8\",\n\tR9:   \"R9\",\n\tR10:  \"R10\",\n\tR11:  \"R11\",\n\tR12:  \"R12\",\n\tR13:  \"R13\",\n\tR14:  \"R14\",\n\tR15:  \"R15\",\n\tIP:   \"IP\",\n\tEIP:  \"IP\",\n\tRIP:  \"IP\",\n\tF0:   \"F0\",\n\tF1:   \"F1\",\n\tF2:   \"F2\",\n\tF3:   \"F3\",\n\tF4:   \"F4\",\n\tF5:   \"F5\",\n\tF6:   \"F6\",\n\tF7:   \"F7\",\n\tM0:   \"M0\",\n\tM1:   \"M1\",\n\tM2:   \"M2\",\n\tM3:   \"M3\",\n\tM4:   \"M4\",\n\tM5:   \"M5\",\n\tM6:   \"M6\",\n\tM7:   \"M7\",\n\tX0:   \"X0\",\n\tX1:   \"X1\",\n\tX2:   \"X2\",\n\tX3:   \"X3\",\n\tX4:   \"X4\",\n\tX5:   \"X5\",\n\tX6:   \"X6\",\n\tX7:   \"X7\",\n\tX8:   \"X8\",\n\tX9:   \"X9\",\n\tX10:  \"X10\",\n\tX11:  \"X11\",\n\tX12:  \"X12\",\n\tX13:  \"X13\",\n\tX14:  \"X14\",\n\tX15:  \"X15\",\n\tCS:   \"CS\",\n\tSS:   \"SS\",\n\tDS:   \"DS\",\n\tES:   \"ES\",\n\tFS:   \"FS\",\n\tGS:   \"GS\",\n\tGDTR: \"GDTR\",\n\tIDTR: \"IDTR\",\n\tLDTR: \"LDTR\",\n\tMSW:  \"MSW\",\n\tTASK: \"TASK\",\n\tCR0:  \"CR0\",\n\tCR1:  \"CR1\",\n\tCR2:  \"CR2\",\n\tCR3:  \"CR3\",\n\tCR4:  \"CR4\",\n\tCR5:  \"CR5\",\n\tCR6:  \"CR6\",\n\tCR7:  \"CR7\",\n\tCR8:  \"CR8\",\n\tCR9:  \"CR9\",\n\tCR10: \"CR10\",\n\tCR11: \"CR11\",\n\tCR12: \"CR12\",\n\tCR13: \"CR13\",\n\tCR14: \"CR14\",\n\tCR15: \"CR15\",\n\tDR0:  \"DR0\",\n\tDR1:  \"DR1\",\n\tDR2:  \"DR2\",\n\tDR3:  \"DR3\",\n\tDR4:  \"DR4\",\n\tDR5:  \"DR5\",\n\tDR6:  \"DR6\",\n\tDR7:  \"DR7\",\n\tDR8:  \"DR8\",\n\tDR9:  \"DR9\",\n\tDR10: \"DR10\",\n\tDR11: \"DR11\",\n\tDR12: \"DR12\",\n\tDR13: \"DR13\",\n\tDR14: \"DR14\",\n\tDR15: \"DR15\",\n\tTR0:  \"TR0\",\n\tTR1:  \"TR1\",\n\tTR2:  \"TR2\",\n\tTR3:  \"TR3\",\n\tTR4:  \"TR4\",\n\tTR5:  \"TR5\",\n\tTR6:  \"TR6\",\n\tTR7:  \"TR7\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/arch/x86/x86asm/tables.go",
    "content": "// Code generated by x86map -fmt=decoder x86.csv DO NOT EDIT.\n\npackage x86asm\n\nvar decoder = [...]uint16{\n\tuint16(xFail),\n\t/*1*/ uint16(xCondByte), 243,\n\t0x00, 490,\n\t0x01, 496,\n\t0x02, 525,\n\t0x03, 531,\n\t0x04, 560,\n\t0x05, 566,\n\t0x06, 595,\n\t0x07, 602,\n\t0x08, 609,\n\t0x09, 615,\n\t0x0A, 644,\n\t0x0B, 650,\n\t0x0C, 679,\n\t0x0D, 685,\n\t0x0E, 714,\n\t0x0F, 721,\n\t0x10, 8045,\n\t0x11, 8051,\n\t0x12, 8080,\n\t0x13, 8086,\n\t0x14, 8115,\n\t0x15, 8121,\n\t0x16, 8150,\n\t0x17, 8157,\n\t0x18, 8164,\n\t0x19, 8170,\n\t0x1A, 8199,\n\t0x1B, 8205,\n\t0x1C, 8234,\n\t0x1D, 8240,\n\t0x1E, 8269,\n\t0x1F, 8276,\n\t0x20, 8283,\n\t0x21, 8289,\n\t0x22, 8318,\n\t0x23, 8324,\n\t0x24, 8353,\n\t0x25, 8359,\n\t0x27, 8388,\n\t0x28, 8394,\n\t0x29, 8400,\n\t0x2A, 8429,\n\t0x2B, 8471,\n\t0x2C, 8500,\n\t0x2D, 8506,\n\t0x2F, 8535,\n\t0x30, 8541,\n\t0x31, 8547,\n\t0x32, 8576,\n\t0x33, 8582,\n\t0x34, 8611,\n\t0x35, 8617,\n\t0x37, 8646,\n\t0x38, 8652,\n\t0x39, 8658,\n\t0x3A, 8687,\n\t0x3B, 8693,\n\t0x3C, 8722,\n\t0x3D, 8728,\n\t0x3F, 8757,\n\t0x40, 8763,\n\t0x41, 8763,\n\t0x42, 8763,\n\t0x43, 8763,\n\t0x44, 8763,\n\t0x45, 8763,\n\t0x46, 8763,\n\t0x47, 8763,\n\t0x48, 8778,\n\t0x49, 8778,\n\t0x4a, 8778,\n\t0x4b, 8778,\n\t0x4c, 8778,\n\t0x4d, 8778,\n\t0x4e, 8778,\n\t0x4f, 8778,\n\t0x50, 8793,\n\t0x51, 8793,\n\t0x52, 8793,\n\t0x53, 8793,\n\t0x54, 8793,\n\t0x55, 8793,\n\t0x56, 8793,\n\t0x57, 8793,\n\t0x58, 8820,\n\t0x59, 8820,\n\t0x5a, 8820,\n\t0x5b, 8820,\n\t0x5c, 8820,\n\t0x5d, 8820,\n\t0x5e, 8820,\n\t0x5f, 8820,\n\t0x60, 8847,\n\t0x61, 8860,\n\t0x62, 8873,\n\t0x63, 8892,\n\t0x68, 8923,\n\t0x69, 8942,\n\t0x6A, 8977,\n\t0x6B, 8982,\n\t0x6C, 9017,\n\t0x6D, 9020,\n\t0x6E, 9033,\n\t0x6F, 9036,\n\t0x70, 9109,\n\t0x71, 9114,\n\t0x72, 9119,\n\t0x73, 9124,\n\t0x74, 9129,\n\t0x75, 9134,\n\t0x76, 9139,\n\t0x77, 9144,\n\t0x78, 9171,\n\t0x79, 9176,\n\t0x7A, 9181,\n\t0x7B, 9186,\n\t0x7C, 9191,\n\t0x7D, 9196,\n\t0x7E, 9201,\n\t0x7F, 9206,\n\t0x80, 9271,\n\t0x81, 9328,\n\t0x83, 9569,\n\t0x84, 9810,\n\t0x85, 9816,\n\t0x86, 9845,\n\t0x87, 9851,\n\t0x88, 9880,\n\t0x89, 9886,\n\t0x8A, 9908,\n\t0x8B, 9914,\n\t0x8C, 9936,\n\t0x8D, 9965,\n\t0x8E, 9994,\n\t0x8F, 10023,\n\t0x90, 10059,\n\t0x91, 10059,\n\t0x92, 10059,\n\t0x93, 10059,\n\t0x94, 10059,\n\t0x95, 10059,\n\t0x96, 10059,\n\t0x97, 10059,\n\t0x98, 10085,\n\t0x99, 10105,\n\t0x9A, 10125,\n\t0x9B, 10142,\n\t0x9C, 10145,\n\t0x9D, 10168,\n\t0x9E, 10191,\n\t0x9F, 10194,\n\t0xA0, 10197,\n\t0xA1, 10216,\n\t0xA2, 10238,\n\t0xA3, 10257,\n\t0xA4, 10279,\n\t0xA5, 10282,\n\t0xA6, 10302,\n\t0xA7, 10305,\n\t0xA8, 10325,\n\t0xA9, 10331,\n\t0xAA, 10360,\n\t0xAB, 10363,\n\t0xAC, 10383,\n\t0xAD, 10386,\n\t0xAE, 10406,\n\t0xAF, 10409,\n\t0xb0, 10429,\n\t0xb1, 10429,\n\t0xb2, 10429,\n\t0xb3, 10429,\n\t0xb4, 10429,\n\t0xb5, 10429,\n\t0xb6, 10429,\n\t0xb7, 10429,\n\t0xb8, 10435,\n\t0xb9, 10435,\n\t0xba, 10435,\n\t0xbb, 10435,\n\t0xbc, 10435,\n\t0xbd, 10435,\n\t0xbe, 10435,\n\t0xbf, 10435,\n\t0xC0, 10464,\n\t0xC1, 10515,\n\t0xC2, 10713,\n\t0xC3, 10718,\n\t0xC4, 10721,\n\t0xC5, 10740,\n\t0xC6, 10759,\n\t0xC7, 10783,\n\t0xC8, 10844,\n\t0xC9, 10851,\n\t0xCA, 10874,\n\t0xCB, 10879,\n\t0xCC, 10882,\n\t0xCD, 10886,\n\t0xCE, 10891,\n\t0xCF, 10897,\n\t0xD0, 10917,\n\t0xD1, 10961,\n\t0xD2, 11152,\n\t0xD3, 11196,\n\t0xD4, 11387,\n\t0xD5, 11395,\n\t0xD7, 11403,\n\t0xD8, 11416,\n\t0xD9, 11625,\n\t0xDA, 11844,\n\t0xDB, 11976,\n\t0xDC, 12147,\n\t0xDD, 12316,\n\t0xDE, 12455,\n\t0xDF, 12629,\n\t0xE0, 12740,\n\t0xE1, 12745,\n\t0xE2, 12750,\n\t0xE3, 12755,\n\t0xE4, 12781,\n\t0xE5, 12787,\n\t0xE6, 12809,\n\t0xE7, 12815,\n\t0xE8, 12873,\n\t0xE9, 12904,\n\t0xEA, 12935,\n\t0xEB, 12952,\n\t0xEC, 12957,\n\t0xED, 12962,\n\t0xEE, 12981,\n\t0xEF, 12986,\n\t0xF1, 13005,\n\t0xF4, 13008,\n\t0xF5, 13011,\n\t0xF6, 13014,\n\t0xF7, 13053,\n\t0xF8, 13229,\n\t0xF9, 13232,\n\t0xFA, 13235,\n\t0xFB, 13238,\n\t0xFC, 13241,\n\t0xFD, 13244,\n\t0xFE, 13247,\n\t0xFF, 13264,\n\tuint16(xFail),\n\t/*490*/ uint16(xSetOp), uint16(ADD),\n\t/*492*/ uint16(xReadSlashR),\n\t/*493*/ uint16(xArgRM8),\n\t/*494*/ uint16(xArgR8),\n\t/*495*/ uint16(xMatch),\n\t/*496*/ uint16(xCondIs64), 499, 515,\n\t/*499*/ uint16(xCondDataSize), 503, 509, 0,\n\t/*503*/ uint16(xSetOp), uint16(ADD),\n\t/*505*/ uint16(xReadSlashR),\n\t/*506*/ uint16(xArgRM16),\n\t/*507*/ uint16(xArgR16),\n\t/*508*/ uint16(xMatch),\n\t/*509*/ uint16(xSetOp), uint16(ADD),\n\t/*511*/ uint16(xReadSlashR),\n\t/*512*/ uint16(xArgRM32),\n\t/*513*/ uint16(xArgR32),\n\t/*514*/ uint16(xMatch),\n\t/*515*/ uint16(xCondDataSize), 503, 509, 519,\n\t/*519*/ uint16(xSetOp), uint16(ADD),\n\t/*521*/ uint16(xReadSlashR),\n\t/*522*/ uint16(xArgRM64),\n\t/*523*/ uint16(xArgR64),\n\t/*524*/ uint16(xMatch),\n\t/*525*/ uint16(xSetOp), uint16(ADD),\n\t/*527*/ uint16(xReadSlashR),\n\t/*528*/ uint16(xArgR8),\n\t/*529*/ uint16(xArgRM8),\n\t/*530*/ uint16(xMatch),\n\t/*531*/ uint16(xCondIs64), 534, 550,\n\t/*534*/ uint16(xCondDataSize), 538, 544, 0,\n\t/*538*/ uint16(xSetOp), uint16(ADD),\n\t/*540*/ uint16(xReadSlashR),\n\t/*541*/ uint16(xArgR16),\n\t/*542*/ uint16(xArgRM16),\n\t/*543*/ uint16(xMatch),\n\t/*544*/ uint16(xSetOp), uint16(ADD),\n\t/*546*/ uint16(xReadSlashR),\n\t/*547*/ uint16(xArgR32),\n\t/*548*/ uint16(xArgRM32),\n\t/*549*/ uint16(xMatch),\n\t/*550*/ uint16(xCondDataSize), 538, 544, 554,\n\t/*554*/ uint16(xSetOp), uint16(ADD),\n\t/*556*/ uint16(xReadSlashR),\n\t/*557*/ uint16(xArgR64),\n\t/*558*/ uint16(xArgRM64),\n\t/*559*/ uint16(xMatch),\n\t/*560*/ uint16(xSetOp), uint16(ADD),\n\t/*562*/ uint16(xReadIb),\n\t/*563*/ uint16(xArgAL),\n\t/*564*/ uint16(xArgImm8u),\n\t/*565*/ uint16(xMatch),\n\t/*566*/ uint16(xCondIs64), 569, 585,\n\t/*569*/ uint16(xCondDataSize), 573, 579, 0,\n\t/*573*/ uint16(xSetOp), uint16(ADD),\n\t/*575*/ uint16(xReadIw),\n\t/*576*/ uint16(xArgAX),\n\t/*577*/ uint16(xArgImm16),\n\t/*578*/ uint16(xMatch),\n\t/*579*/ uint16(xSetOp), uint16(ADD),\n\t/*581*/ uint16(xReadId),\n\t/*582*/ uint16(xArgEAX),\n\t/*583*/ uint16(xArgImm32),\n\t/*584*/ uint16(xMatch),\n\t/*585*/ uint16(xCondDataSize), 573, 579, 589,\n\t/*589*/ uint16(xSetOp), uint16(ADD),\n\t/*591*/ uint16(xReadId),\n\t/*592*/ uint16(xArgRAX),\n\t/*593*/ uint16(xArgImm32),\n\t/*594*/ uint16(xMatch),\n\t/*595*/ uint16(xCondIs64), 598, 0,\n\t/*598*/ uint16(xSetOp), uint16(PUSH),\n\t/*600*/ uint16(xArgES),\n\t/*601*/ uint16(xMatch),\n\t/*602*/ uint16(xCondIs64), 605, 0,\n\t/*605*/ uint16(xSetOp), uint16(POP),\n\t/*607*/ uint16(xArgES),\n\t/*608*/ uint16(xMatch),\n\t/*609*/ uint16(xSetOp), uint16(OR),\n\t/*611*/ uint16(xReadSlashR),\n\t/*612*/ uint16(xArgRM8),\n\t/*613*/ uint16(xArgR8),\n\t/*614*/ uint16(xMatch),\n\t/*615*/ uint16(xCondIs64), 618, 634,\n\t/*618*/ uint16(xCondDataSize), 622, 628, 0,\n\t/*622*/ uint16(xSetOp), uint16(OR),\n\t/*624*/ uint16(xReadSlashR),\n\t/*625*/ uint16(xArgRM16),\n\t/*626*/ uint16(xArgR16),\n\t/*627*/ uint16(xMatch),\n\t/*628*/ uint16(xSetOp), uint16(OR),\n\t/*630*/ uint16(xReadSlashR),\n\t/*631*/ uint16(xArgRM32),\n\t/*632*/ uint16(xArgR32),\n\t/*633*/ uint16(xMatch),\n\t/*634*/ uint16(xCondDataSize), 622, 628, 638,\n\t/*638*/ uint16(xSetOp), uint16(OR),\n\t/*640*/ uint16(xReadSlashR),\n\t/*641*/ uint16(xArgRM64),\n\t/*642*/ uint16(xArgR64),\n\t/*643*/ uint16(xMatch),\n\t/*644*/ uint16(xSetOp), uint16(OR),\n\t/*646*/ uint16(xReadSlashR),\n\t/*647*/ uint16(xArgR8),\n\t/*648*/ uint16(xArgRM8),\n\t/*649*/ uint16(xMatch),\n\t/*650*/ uint16(xCondIs64), 653, 669,\n\t/*653*/ uint16(xCondDataSize), 657, 663, 0,\n\t/*657*/ uint16(xSetOp), uint16(OR),\n\t/*659*/ uint16(xReadSlashR),\n\t/*660*/ uint16(xArgR16),\n\t/*661*/ uint16(xArgRM16),\n\t/*662*/ uint16(xMatch),\n\t/*663*/ uint16(xSetOp), uint16(OR),\n\t/*665*/ uint16(xReadSlashR),\n\t/*666*/ uint16(xArgR32),\n\t/*667*/ uint16(xArgRM32),\n\t/*668*/ uint16(xMatch),\n\t/*669*/ uint16(xCondDataSize), 657, 663, 673,\n\t/*673*/ uint16(xSetOp), uint16(OR),\n\t/*675*/ uint16(xReadSlashR),\n\t/*676*/ uint16(xArgR64),\n\t/*677*/ uint16(xArgRM64),\n\t/*678*/ uint16(xMatch),\n\t/*679*/ uint16(xSetOp), uint16(OR),\n\t/*681*/ uint16(xReadIb),\n\t/*682*/ uint16(xArgAL),\n\t/*683*/ uint16(xArgImm8u),\n\t/*684*/ uint16(xMatch),\n\t/*685*/ uint16(xCondIs64), 688, 704,\n\t/*688*/ uint16(xCondDataSize), 692, 698, 0,\n\t/*692*/ uint16(xSetOp), uint16(OR),\n\t/*694*/ uint16(xReadIw),\n\t/*695*/ uint16(xArgAX),\n\t/*696*/ uint16(xArgImm16),\n\t/*697*/ uint16(xMatch),\n\t/*698*/ uint16(xSetOp), uint16(OR),\n\t/*700*/ uint16(xReadId),\n\t/*701*/ uint16(xArgEAX),\n\t/*702*/ uint16(xArgImm32),\n\t/*703*/ uint16(xMatch),\n\t/*704*/ uint16(xCondDataSize), 692, 698, 708,\n\t/*708*/ uint16(xSetOp), uint16(OR),\n\t/*710*/ uint16(xReadId),\n\t/*711*/ uint16(xArgRAX),\n\t/*712*/ uint16(xArgImm32),\n\t/*713*/ uint16(xMatch),\n\t/*714*/ uint16(xCondIs64), 717, 0,\n\t/*717*/ uint16(xSetOp), uint16(PUSH),\n\t/*719*/ uint16(xArgCS),\n\t/*720*/ uint16(xMatch),\n\t/*721*/ uint16(xCondByte), 229,\n\t0x00, 1182,\n\t0x01, 1239,\n\t0x02, 1347,\n\t0x03, 1369,\n\t0x05, 1391,\n\t0x06, 1397,\n\t0x07, 1400,\n\t0x08, 1406,\n\t0x09, 1409,\n\t0x0B, 1412,\n\t0x0D, 1415,\n\t0x10, 1428,\n\t0x11, 1462,\n\t0x12, 1496,\n\t0x13, 1539,\n\t0x14, 1557,\n\t0x15, 1575,\n\t0x16, 1593,\n\t0x17, 1628,\n\t0x18, 1646,\n\t0x1F, 1671,\n\t0x20, 1692,\n\t0x21, 1707,\n\t0x22, 1722,\n\t0x23, 1737,\n\t0x24, 1752,\n\t0x26, 1767,\n\t0x28, 1782,\n\t0x29, 1800,\n\t0x2A, 1818,\n\t0x2B, 1905,\n\t0x2C, 1939,\n\t0x2D, 2026,\n\t0x2E, 2113,\n\t0x2F, 2131,\n\t0x30, 2149,\n\t0x31, 2152,\n\t0x32, 2155,\n\t0x33, 2158,\n\t0x34, 2161,\n\t0x35, 2164,\n\t0x38, 2174,\n\t0x3A, 3075,\n\t0x40, 3486,\n\t0x41, 3515,\n\t0x42, 3544,\n\t0x43, 3573,\n\t0x44, 3602,\n\t0x45, 3631,\n\t0x46, 3660,\n\t0x47, 3689,\n\t0x48, 3718,\n\t0x49, 3747,\n\t0x4A, 3776,\n\t0x4B, 3805,\n\t0x4C, 3834,\n\t0x4D, 3863,\n\t0x4E, 3892,\n\t0x4F, 3921,\n\t0x50, 3950,\n\t0x51, 3968,\n\t0x52, 4002,\n\t0x53, 4020,\n\t0x54, 4038,\n\t0x55, 4056,\n\t0x56, 4074,\n\t0x57, 4092,\n\t0x58, 4110,\n\t0x59, 4144,\n\t0x5A, 4178,\n\t0x5B, 4212,\n\t0x5C, 4238,\n\t0x5D, 4272,\n\t0x5E, 4306,\n\t0x5F, 4340,\n\t0x60, 4374,\n\t0x61, 4392,\n\t0x62, 4410,\n\t0x63, 4428,\n\t0x64, 4446,\n\t0x65, 4464,\n\t0x66, 4482,\n\t0x67, 4500,\n\t0x68, 4518,\n\t0x69, 4536,\n\t0x6A, 4554,\n\t0x6B, 4572,\n\t0x6C, 4590,\n\t0x6D, 4600,\n\t0x6E, 4610,\n\t0x6F, 4677,\n\t0x70, 4703,\n\t0x71, 4745,\n\t0x72, 4808,\n\t0x73, 4871,\n\t0x74, 4936,\n\t0x75, 4954,\n\t0x76, 4972,\n\t0x77, 4990,\n\t0x7C, 4993,\n\t0x7D, 5011,\n\t0x7E, 5029,\n\t0x7F, 5106,\n\t0x80, 5132,\n\t0x81, 5163,\n\t0x82, 5194,\n\t0x83, 5225,\n\t0x84, 5256,\n\t0x85, 5287,\n\t0x86, 5318,\n\t0x87, 5349,\n\t0x88, 5380,\n\t0x89, 5411,\n\t0x8A, 5442,\n\t0x8B, 5473,\n\t0x8C, 5504,\n\t0x8D, 5535,\n\t0x8E, 5566,\n\t0x8F, 5597,\n\t0x90, 5628,\n\t0x91, 5633,\n\t0x92, 5638,\n\t0x93, 5643,\n\t0x94, 5648,\n\t0x95, 5653,\n\t0x96, 5658,\n\t0x97, 5663,\n\t0x98, 5668,\n\t0x99, 5673,\n\t0x9A, 5678,\n\t0x9B, 5683,\n\t0x9C, 5688,\n\t0x9D, 5693,\n\t0x9E, 5698,\n\t0x9F, 5703,\n\t0xA0, 5708,\n\t0xA1, 5712,\n\t0xA2, 5739,\n\t0xA3, 5742,\n\t0xA4, 5771,\n\t0xA5, 5806,\n\t0xA8, 5838,\n\t0xA9, 5842,\n\t0xAA, 5869,\n\t0xAB, 5872,\n\t0xAC, 5901,\n\t0xAD, 5936,\n\t0xAE, 5968,\n\t0xAF, 6226,\n\t0xB0, 6255,\n\t0xB1, 6261,\n\t0xB2, 6290,\n\t0xB3, 6319,\n\t0xB4, 6348,\n\t0xB5, 6377,\n\t0xB6, 6406,\n\t0xB7, 6435,\n\t0xB8, 6464,\n\t0xB9, 6501,\n\t0xBA, 6511,\n\t0xBB, 6636,\n\t0xBC, 6665,\n\t0xBD, 6732,\n\t0xBE, 6799,\n\t0xBF, 6828,\n\t0xC0, 6857,\n\t0xC1, 6863,\n\t0xC2, 6892,\n\t0xC3, 6934,\n\t0xC4, 6963,\n\t0xC5, 6985,\n\t0xC6, 7007,\n\t0xC7, 7029,\n\t0xc8, 7158,\n\t0xc9, 7158,\n\t0xca, 7158,\n\t0xcb, 7158,\n\t0xcc, 7158,\n\t0xcd, 7158,\n\t0xce, 7158,\n\t0xcf, 7158,\n\t0xD0, 7181,\n\t0xD1, 7199,\n\t0xD2, 7217,\n\t0xD3, 7235,\n\t0xD4, 7253,\n\t0xD5, 7271,\n\t0xD6, 7289,\n\t0xD7, 7315,\n\t0xD8, 7333,\n\t0xD9, 7351,\n\t0xDA, 7369,\n\t0xDB, 7387,\n\t0xDC, 7405,\n\t0xDD, 7423,\n\t0xDE, 7441,\n\t0xDF, 7459,\n\t0xE0, 7477,\n\t0xE1, 7495,\n\t0xE2, 7513,\n\t0xE3, 7531,\n\t0xE4, 7549,\n\t0xE5, 7567,\n\t0xE6, 7585,\n\t0xE7, 7611,\n\t0xE8, 7629,\n\t0xE9, 7647,\n\t0xEA, 7665,\n\t0xEB, 7683,\n\t0xEC, 7701,\n\t0xED, 7719,\n\t0xEE, 7737,\n\t0xEF, 7755,\n\t0xF0, 7773,\n\t0xF1, 7783,\n\t0xF2, 7801,\n\t0xF3, 7819,\n\t0xF4, 7837,\n\t0xF5, 7855,\n\t0xF6, 7873,\n\t0xF7, 7891,\n\t0xF8, 7909,\n\t0xF9, 7927,\n\t0xFA, 7945,\n\t0xFB, 7963,\n\t0xFC, 7981,\n\t0xFD, 7999,\n\t0xFE, 8017,\n\t0xFF, 8035,\n\tuint16(xFail),\n\t/*1182*/ uint16(xCondSlashR),\n\t1191, // 0\n\t1207, // 1\n\t1223, // 2\n\t1227, // 3\n\t1231, // 4\n\t1235, // 5\n\t0,    // 6\n\t0,    // 7\n\t/*1191*/ uint16(xCondDataSize), 1195, 1199, 1203,\n\t/*1195*/ uint16(xSetOp), uint16(SLDT),\n\t/*1197*/ uint16(xArgRM16),\n\t/*1198*/ uint16(xMatch),\n\t/*1199*/ uint16(xSetOp), uint16(SLDT),\n\t/*1201*/ uint16(xArgR32M16),\n\t/*1202*/ uint16(xMatch),\n\t/*1203*/ uint16(xSetOp), uint16(SLDT),\n\t/*1205*/ uint16(xArgR64M16),\n\t/*1206*/ uint16(xMatch),\n\t/*1207*/ uint16(xCondDataSize), 1211, 1215, 1219,\n\t/*1211*/ uint16(xSetOp), uint16(STR),\n\t/*1213*/ uint16(xArgRM16),\n\t/*1214*/ uint16(xMatch),\n\t/*1215*/ uint16(xSetOp), uint16(STR),\n\t/*1217*/ uint16(xArgR32M16),\n\t/*1218*/ uint16(xMatch),\n\t/*1219*/ uint16(xSetOp), uint16(STR),\n\t/*1221*/ uint16(xArgR64M16),\n\t/*1222*/ uint16(xMatch),\n\t/*1223*/ uint16(xSetOp), uint16(LLDT),\n\t/*1225*/ uint16(xArgRM16),\n\t/*1226*/ uint16(xMatch),\n\t/*1227*/ uint16(xSetOp), uint16(LTR),\n\t/*1229*/ uint16(xArgRM16),\n\t/*1230*/ uint16(xMatch),\n\t/*1231*/ uint16(xSetOp), uint16(VERR),\n\t/*1233*/ uint16(xArgRM16),\n\t/*1234*/ uint16(xMatch),\n\t/*1235*/ uint16(xSetOp), uint16(VERW),\n\t/*1237*/ uint16(xArgRM16),\n\t/*1238*/ uint16(xMatch),\n\t/*1239*/ uint16(xCondByte), 8,\n\t0xC8, 1320,\n\t0xC9, 1323,\n\t0xD0, 1326,\n\t0xD1, 1329,\n\t0xD5, 1332,\n\t0xD6, 1335,\n\t0xF8, 1338,\n\t0xF9, 1344,\n\t/*1257*/ uint16(xCondSlashR),\n\t1266, // 0\n\t1270, // 1\n\t1274, // 2\n\t1285, // 3\n\t1296, // 4\n\t0,    // 5\n\t1312, // 6\n\t1316, // 7\n\t/*1266*/ uint16(xSetOp), uint16(SGDT),\n\t/*1268*/ uint16(xArgM),\n\t/*1269*/ uint16(xMatch),\n\t/*1270*/ uint16(xSetOp), uint16(SIDT),\n\t/*1272*/ uint16(xArgM),\n\t/*1273*/ uint16(xMatch),\n\t/*1274*/ uint16(xCondIs64), 1277, 1281,\n\t/*1277*/ uint16(xSetOp), uint16(LGDT),\n\t/*1279*/ uint16(xArgM16and32),\n\t/*1280*/ uint16(xMatch),\n\t/*1281*/ uint16(xSetOp), uint16(LGDT),\n\t/*1283*/ uint16(xArgM16and64),\n\t/*1284*/ uint16(xMatch),\n\t/*1285*/ uint16(xCondIs64), 1288, 1292,\n\t/*1288*/ uint16(xSetOp), uint16(LIDT),\n\t/*1290*/ uint16(xArgM16and32),\n\t/*1291*/ uint16(xMatch),\n\t/*1292*/ uint16(xSetOp), uint16(LIDT),\n\t/*1294*/ uint16(xArgM16and64),\n\t/*1295*/ uint16(xMatch),\n\t/*1296*/ uint16(xCondDataSize), 1300, 1304, 1308,\n\t/*1300*/ uint16(xSetOp), uint16(SMSW),\n\t/*1302*/ uint16(xArgRM16),\n\t/*1303*/ uint16(xMatch),\n\t/*1304*/ uint16(xSetOp), uint16(SMSW),\n\t/*1306*/ uint16(xArgR32M16),\n\t/*1307*/ uint16(xMatch),\n\t/*1308*/ uint16(xSetOp), uint16(SMSW),\n\t/*1310*/ uint16(xArgR64M16),\n\t/*1311*/ uint16(xMatch),\n\t/*1312*/ uint16(xSetOp), uint16(LMSW),\n\t/*1314*/ uint16(xArgRM16),\n\t/*1315*/ uint16(xMatch),\n\t/*1316*/ uint16(xSetOp), uint16(INVLPG),\n\t/*1318*/ uint16(xArgM),\n\t/*1319*/ uint16(xMatch),\n\t/*1320*/ uint16(xSetOp), uint16(MONITOR),\n\t/*1322*/ uint16(xMatch),\n\t/*1323*/ uint16(xSetOp), uint16(MWAIT),\n\t/*1325*/ uint16(xMatch),\n\t/*1326*/ uint16(xSetOp), uint16(XGETBV),\n\t/*1328*/ uint16(xMatch),\n\t/*1329*/ uint16(xSetOp), uint16(XSETBV),\n\t/*1331*/ uint16(xMatch),\n\t/*1332*/ uint16(xSetOp), uint16(XEND),\n\t/*1334*/ uint16(xMatch),\n\t/*1335*/ uint16(xSetOp), uint16(XTEST),\n\t/*1337*/ uint16(xMatch),\n\t/*1338*/ uint16(xCondIs64), 0, 1341,\n\t/*1341*/ uint16(xSetOp), uint16(SWAPGS),\n\t/*1343*/ uint16(xMatch),\n\t/*1344*/ uint16(xSetOp), uint16(RDTSCP),\n\t/*1346*/ uint16(xMatch),\n\t/*1347*/ uint16(xCondDataSize), 1351, 1357, 1363,\n\t/*1351*/ uint16(xSetOp), uint16(LAR),\n\t/*1353*/ uint16(xReadSlashR),\n\t/*1354*/ uint16(xArgR16),\n\t/*1355*/ uint16(xArgRM16),\n\t/*1356*/ uint16(xMatch),\n\t/*1357*/ uint16(xSetOp), uint16(LAR),\n\t/*1359*/ uint16(xReadSlashR),\n\t/*1360*/ uint16(xArgR32),\n\t/*1361*/ uint16(xArgR32M16),\n\t/*1362*/ uint16(xMatch),\n\t/*1363*/ uint16(xSetOp), uint16(LAR),\n\t/*1365*/ uint16(xReadSlashR),\n\t/*1366*/ uint16(xArgR64),\n\t/*1367*/ uint16(xArgR64M16),\n\t/*1368*/ uint16(xMatch),\n\t/*1369*/ uint16(xCondDataSize), 1373, 1379, 1385,\n\t/*1373*/ uint16(xSetOp), uint16(LSL),\n\t/*1375*/ uint16(xReadSlashR),\n\t/*1376*/ uint16(xArgR16),\n\t/*1377*/ uint16(xArgRM16),\n\t/*1378*/ uint16(xMatch),\n\t/*1379*/ uint16(xSetOp), uint16(LSL),\n\t/*1381*/ uint16(xReadSlashR),\n\t/*1382*/ uint16(xArgR32),\n\t/*1383*/ uint16(xArgR32M16),\n\t/*1384*/ uint16(xMatch),\n\t/*1385*/ uint16(xSetOp), uint16(LSL),\n\t/*1387*/ uint16(xReadSlashR),\n\t/*1388*/ uint16(xArgR64),\n\t/*1389*/ uint16(xArgR32M16),\n\t/*1390*/ uint16(xMatch),\n\t/*1391*/ uint16(xCondIs64), 0, 1394,\n\t/*1394*/ uint16(xSetOp), uint16(SYSCALL),\n\t/*1396*/ uint16(xMatch),\n\t/*1397*/ uint16(xSetOp), uint16(CLTS),\n\t/*1399*/ uint16(xMatch),\n\t/*1400*/ uint16(xCondIs64), 0, 1403,\n\t/*1403*/ uint16(xSetOp), uint16(SYSRET),\n\t/*1405*/ uint16(xMatch),\n\t/*1406*/ uint16(xSetOp), uint16(INVD),\n\t/*1408*/ uint16(xMatch),\n\t/*1409*/ uint16(xSetOp), uint16(WBINVD),\n\t/*1411*/ uint16(xMatch),\n\t/*1412*/ uint16(xSetOp), uint16(UD2),\n\t/*1414*/ uint16(xMatch),\n\t/*1415*/ uint16(xCondSlashR),\n\t0,    // 0\n\t1424, // 1\n\t0,    // 2\n\t0,    // 3\n\t0,    // 4\n\t0,    // 5\n\t0,    // 6\n\t0,    // 7\n\t/*1424*/ uint16(xSetOp), uint16(PREFETCHW),\n\t/*1426*/ uint16(xArgM8),\n\t/*1427*/ uint16(xMatch),\n\t/*1428*/ uint16(xCondPrefix), 4,\n\t0xF3, 1456,\n\t0xF2, 1450,\n\t0x66, 1444,\n\t0x0, 1438,\n\t/*1438*/ uint16(xSetOp), uint16(MOVUPS),\n\t/*1440*/ uint16(xReadSlashR),\n\t/*1441*/ uint16(xArgXmm1),\n\t/*1442*/ uint16(xArgXmm2M128),\n\t/*1443*/ uint16(xMatch),\n\t/*1444*/ uint16(xSetOp), uint16(MOVUPD),\n\t/*1446*/ uint16(xReadSlashR),\n\t/*1447*/ uint16(xArgXmm1),\n\t/*1448*/ uint16(xArgXmm2M128),\n\t/*1449*/ uint16(xMatch),\n\t/*1450*/ uint16(xSetOp), uint16(MOVSD_XMM),\n\t/*1452*/ uint16(xReadSlashR),\n\t/*1453*/ uint16(xArgXmm1),\n\t/*1454*/ uint16(xArgXmm2M64),\n\t/*1455*/ uint16(xMatch),\n\t/*1456*/ uint16(xSetOp), uint16(MOVSS),\n\t/*1458*/ uint16(xReadSlashR),\n\t/*1459*/ uint16(xArgXmm1),\n\t/*1460*/ uint16(xArgXmm2M32),\n\t/*1461*/ uint16(xMatch),\n\t/*1462*/ uint16(xCondPrefix), 4,\n\t0xF3, 1490,\n\t0xF2, 1484,\n\t0x66, 1478,\n\t0x0, 1472,\n\t/*1472*/ uint16(xSetOp), uint16(MOVUPS),\n\t/*1474*/ uint16(xReadSlashR),\n\t/*1475*/ uint16(xArgXmm2M128),\n\t/*1476*/ uint16(xArgXmm1),\n\t/*1477*/ uint16(xMatch),\n\t/*1478*/ uint16(xSetOp), uint16(MOVUPD),\n\t/*1480*/ uint16(xReadSlashR),\n\t/*1481*/ uint16(xArgXmm2M128),\n\t/*1482*/ uint16(xArgXmm),\n\t/*1483*/ uint16(xMatch),\n\t/*1484*/ uint16(xSetOp), uint16(MOVSD_XMM),\n\t/*1486*/ uint16(xReadSlashR),\n\t/*1487*/ uint16(xArgXmm2M64),\n\t/*1488*/ uint16(xArgXmm1),\n\t/*1489*/ uint16(xMatch),\n\t/*1490*/ uint16(xSetOp), uint16(MOVSS),\n\t/*1492*/ uint16(xReadSlashR),\n\t/*1493*/ uint16(xArgXmm2M32),\n\t/*1494*/ uint16(xArgXmm),\n\t/*1495*/ uint16(xMatch),\n\t/*1496*/ uint16(xCondPrefix), 4,\n\t0xF3, 1533,\n\t0xF2, 1527,\n\t0x66, 1521,\n\t0x0, 1506,\n\t/*1506*/ uint16(xCondIsMem), 1509, 1515,\n\t/*1509*/ uint16(xSetOp), uint16(MOVHLPS),\n\t/*1511*/ uint16(xReadSlashR),\n\t/*1512*/ uint16(xArgXmm1),\n\t/*1513*/ uint16(xArgXmm2),\n\t/*1514*/ uint16(xMatch),\n\t/*1515*/ uint16(xSetOp), uint16(MOVLPS),\n\t/*1517*/ uint16(xReadSlashR),\n\t/*1518*/ uint16(xArgXmm),\n\t/*1519*/ uint16(xArgM64),\n\t/*1520*/ uint16(xMatch),\n\t/*1521*/ uint16(xSetOp), uint16(MOVLPD),\n\t/*1523*/ uint16(xReadSlashR),\n\t/*1524*/ uint16(xArgXmm),\n\t/*1525*/ uint16(xArgXmm2M64),\n\t/*1526*/ uint16(xMatch),\n\t/*1527*/ uint16(xSetOp), uint16(MOVDDUP),\n\t/*1529*/ uint16(xReadSlashR),\n\t/*1530*/ uint16(xArgXmm1),\n\t/*1531*/ uint16(xArgXmm2M64),\n\t/*1532*/ uint16(xMatch),\n\t/*1533*/ uint16(xSetOp), uint16(MOVSLDUP),\n\t/*1535*/ uint16(xReadSlashR),\n\t/*1536*/ uint16(xArgXmm1),\n\t/*1537*/ uint16(xArgXmm2M128),\n\t/*1538*/ uint16(xMatch),\n\t/*1539*/ uint16(xCondPrefix), 2,\n\t0x66, 1551,\n\t0x0, 1545,\n\t/*1545*/ uint16(xSetOp), uint16(MOVLPS),\n\t/*1547*/ uint16(xReadSlashR),\n\t/*1548*/ uint16(xArgM64),\n\t/*1549*/ uint16(xArgXmm),\n\t/*1550*/ uint16(xMatch),\n\t/*1551*/ uint16(xSetOp), uint16(MOVLPD),\n\t/*1553*/ uint16(xReadSlashR),\n\t/*1554*/ uint16(xArgXmm2M64),\n\t/*1555*/ uint16(xArgXmm),\n\t/*1556*/ uint16(xMatch),\n\t/*1557*/ uint16(xCondPrefix), 2,\n\t0x66, 1569,\n\t0x0, 1563,\n\t/*1563*/ uint16(xSetOp), uint16(UNPCKLPS),\n\t/*1565*/ uint16(xReadSlashR),\n\t/*1566*/ uint16(xArgXmm1),\n\t/*1567*/ uint16(xArgXmm2M128),\n\t/*1568*/ uint16(xMatch),\n\t/*1569*/ uint16(xSetOp), uint16(UNPCKLPD),\n\t/*1571*/ uint16(xReadSlashR),\n\t/*1572*/ uint16(xArgXmm1),\n\t/*1573*/ uint16(xArgXmm2M128),\n\t/*1574*/ uint16(xMatch),\n\t/*1575*/ uint16(xCondPrefix), 2,\n\t0x66, 1587,\n\t0x0, 1581,\n\t/*1581*/ uint16(xSetOp), uint16(UNPCKHPS),\n\t/*1583*/ uint16(xReadSlashR),\n\t/*1584*/ uint16(xArgXmm1),\n\t/*1585*/ uint16(xArgXmm2M128),\n\t/*1586*/ uint16(xMatch),\n\t/*1587*/ uint16(xSetOp), uint16(UNPCKHPD),\n\t/*1589*/ uint16(xReadSlashR),\n\t/*1590*/ uint16(xArgXmm1),\n\t/*1591*/ uint16(xArgXmm2M128),\n\t/*1592*/ uint16(xMatch),\n\t/*1593*/ uint16(xCondPrefix), 3,\n\t0xF3, 1622,\n\t0x66, 1616,\n\t0x0, 1601,\n\t/*1601*/ uint16(xCondIsMem), 1604, 1610,\n\t/*1604*/ uint16(xSetOp), uint16(MOVLHPS),\n\t/*1606*/ uint16(xReadSlashR),\n\t/*1607*/ uint16(xArgXmm1),\n\t/*1608*/ uint16(xArgXmm2),\n\t/*1609*/ uint16(xMatch),\n\t/*1610*/ uint16(xSetOp), uint16(MOVHPS),\n\t/*1612*/ uint16(xReadSlashR),\n\t/*1613*/ uint16(xArgXmm),\n\t/*1614*/ uint16(xArgM64),\n\t/*1615*/ uint16(xMatch),\n\t/*1616*/ uint16(xSetOp), uint16(MOVHPD),\n\t/*1618*/ uint16(xReadSlashR),\n\t/*1619*/ uint16(xArgXmm),\n\t/*1620*/ uint16(xArgXmm2M64),\n\t/*1621*/ uint16(xMatch),\n\t/*1622*/ uint16(xSetOp), uint16(MOVSHDUP),\n\t/*1624*/ uint16(xReadSlashR),\n\t/*1625*/ uint16(xArgXmm1),\n\t/*1626*/ uint16(xArgXmm2M128),\n\t/*1627*/ uint16(xMatch),\n\t/*1628*/ uint16(xCondPrefix), 2,\n\t0x66, 1640,\n\t0x0, 1634,\n\t/*1634*/ uint16(xSetOp), uint16(MOVHPS),\n\t/*1636*/ uint16(xReadSlashR),\n\t/*1637*/ uint16(xArgM64),\n\t/*1638*/ uint16(xArgXmm),\n\t/*1639*/ uint16(xMatch),\n\t/*1640*/ uint16(xSetOp), uint16(MOVHPD),\n\t/*1642*/ uint16(xReadSlashR),\n\t/*1643*/ uint16(xArgXmm2M64),\n\t/*1644*/ uint16(xArgXmm),\n\t/*1645*/ uint16(xMatch),\n\t/*1646*/ uint16(xCondSlashR),\n\t1655, // 0\n\t1659, // 1\n\t1663, // 2\n\t1667, // 3\n\t0,    // 4\n\t0,    // 5\n\t0,    // 6\n\t0,    // 7\n\t/*1655*/ uint16(xSetOp), uint16(PREFETCHNTA),\n\t/*1657*/ uint16(xArgM8),\n\t/*1658*/ uint16(xMatch),\n\t/*1659*/ uint16(xSetOp), uint16(PREFETCHT0),\n\t/*1661*/ uint16(xArgM8),\n\t/*1662*/ uint16(xMatch),\n\t/*1663*/ uint16(xSetOp), uint16(PREFETCHT1),\n\t/*1665*/ uint16(xArgM8),\n\t/*1666*/ uint16(xMatch),\n\t/*1667*/ uint16(xSetOp), uint16(PREFETCHT2),\n\t/*1669*/ uint16(xArgM8),\n\t/*1670*/ uint16(xMatch),\n\t/*1671*/ uint16(xCondSlashR),\n\t1680, // 0\n\t0,    // 1\n\t0,    // 2\n\t0,    // 3\n\t0,    // 4\n\t0,    // 5\n\t0,    // 6\n\t0,    // 7\n\t/*1680*/ uint16(xCondDataSize), 1684, 1688, 0,\n\t/*1684*/ uint16(xSetOp), uint16(NOP),\n\t/*1686*/ uint16(xArgRM16),\n\t/*1687*/ uint16(xMatch),\n\t/*1688*/ uint16(xSetOp), uint16(NOP),\n\t/*1690*/ uint16(xArgRM32),\n\t/*1691*/ uint16(xMatch),\n\t/*1692*/ uint16(xCondIs64), 1695, 1701,\n\t/*1695*/ uint16(xSetOp), uint16(MOV),\n\t/*1697*/ uint16(xReadSlashR),\n\t/*1698*/ uint16(xArgRmf32),\n\t/*1699*/ uint16(xArgCR0dashCR7),\n\t/*1700*/ uint16(xMatch),\n\t/*1701*/ uint16(xSetOp), uint16(MOV),\n\t/*1703*/ uint16(xReadSlashR),\n\t/*1704*/ uint16(xArgRmf64),\n\t/*1705*/ uint16(xArgCR0dashCR7),\n\t/*1706*/ uint16(xMatch),\n\t/*1707*/ uint16(xCondIs64), 1710, 1716,\n\t/*1710*/ uint16(xSetOp), uint16(MOV),\n\t/*1712*/ uint16(xReadSlashR),\n\t/*1713*/ uint16(xArgRmf32),\n\t/*1714*/ uint16(xArgDR0dashDR7),\n\t/*1715*/ uint16(xMatch),\n\t/*1716*/ uint16(xSetOp), uint16(MOV),\n\t/*1718*/ uint16(xReadSlashR),\n\t/*1719*/ uint16(xArgRmf64),\n\t/*1720*/ uint16(xArgDR0dashDR7),\n\t/*1721*/ uint16(xMatch),\n\t/*1722*/ uint16(xCondIs64), 1725, 1731,\n\t/*1725*/ uint16(xSetOp), uint16(MOV),\n\t/*1727*/ uint16(xReadSlashR),\n\t/*1728*/ uint16(xArgCR0dashCR7),\n\t/*1729*/ uint16(xArgRmf32),\n\t/*1730*/ uint16(xMatch),\n\t/*1731*/ uint16(xSetOp), uint16(MOV),\n\t/*1733*/ uint16(xReadSlashR),\n\t/*1734*/ uint16(xArgCR0dashCR7),\n\t/*1735*/ uint16(xArgRmf64),\n\t/*1736*/ uint16(xMatch),\n\t/*1737*/ uint16(xCondIs64), 1740, 1746,\n\t/*1740*/ uint16(xSetOp), uint16(MOV),\n\t/*1742*/ uint16(xReadSlashR),\n\t/*1743*/ uint16(xArgDR0dashDR7),\n\t/*1744*/ uint16(xArgRmf32),\n\t/*1745*/ uint16(xMatch),\n\t/*1746*/ uint16(xSetOp), uint16(MOV),\n\t/*1748*/ uint16(xReadSlashR),\n\t/*1749*/ uint16(xArgDR0dashDR7),\n\t/*1750*/ uint16(xArgRmf64),\n\t/*1751*/ uint16(xMatch),\n\t/*1752*/ uint16(xCondIs64), 1755, 1761,\n\t/*1755*/ uint16(xSetOp), uint16(MOV),\n\t/*1757*/ uint16(xReadSlashR),\n\t/*1758*/ uint16(xArgRmf32),\n\t/*1759*/ uint16(xArgTR0dashTR7),\n\t/*1760*/ uint16(xMatch),\n\t/*1761*/ uint16(xSetOp), uint16(MOV),\n\t/*1763*/ uint16(xReadSlashR),\n\t/*1764*/ uint16(xArgRmf64),\n\t/*1765*/ uint16(xArgTR0dashTR7),\n\t/*1766*/ uint16(xMatch),\n\t/*1767*/ uint16(xCondIs64), 1770, 1776,\n\t/*1770*/ uint16(xSetOp), uint16(MOV),\n\t/*1772*/ uint16(xReadSlashR),\n\t/*1773*/ uint16(xArgTR0dashTR7),\n\t/*1774*/ uint16(xArgRmf32),\n\t/*1775*/ uint16(xMatch),\n\t/*1776*/ uint16(xSetOp), uint16(MOV),\n\t/*1778*/ uint16(xReadSlashR),\n\t/*1779*/ uint16(xArgTR0dashTR7),\n\t/*1780*/ uint16(xArgRmf64),\n\t/*1781*/ uint16(xMatch),\n\t/*1782*/ uint16(xCondPrefix), 2,\n\t0x66, 1794,\n\t0x0, 1788,\n\t/*1788*/ uint16(xSetOp), uint16(MOVAPS),\n\t/*1790*/ uint16(xReadSlashR),\n\t/*1791*/ uint16(xArgXmm1),\n\t/*1792*/ uint16(xArgXmm2M128),\n\t/*1793*/ uint16(xMatch),\n\t/*1794*/ uint16(xSetOp), uint16(MOVAPD),\n\t/*1796*/ uint16(xReadSlashR),\n\t/*1797*/ uint16(xArgXmm1),\n\t/*1798*/ uint16(xArgXmm2M128),\n\t/*1799*/ uint16(xMatch),\n\t/*1800*/ uint16(xCondPrefix), 2,\n\t0x66, 1812,\n\t0x0, 1806,\n\t/*1806*/ uint16(xSetOp), uint16(MOVAPS),\n\t/*1808*/ uint16(xReadSlashR),\n\t/*1809*/ uint16(xArgXmm2M128),\n\t/*1810*/ uint16(xArgXmm1),\n\t/*1811*/ uint16(xMatch),\n\t/*1812*/ uint16(xSetOp), uint16(MOVAPD),\n\t/*1814*/ uint16(xReadSlashR),\n\t/*1815*/ uint16(xArgXmm2M128),\n\t/*1816*/ uint16(xArgXmm1),\n\t/*1817*/ uint16(xMatch),\n\t/*1818*/ uint16(xCondIs64), 1821, 1875,\n\t/*1821*/ uint16(xCondPrefix), 4,\n\t0xF3, 1859,\n\t0xF2, 1843,\n\t0x66, 1837,\n\t0x0, 1831,\n\t/*1831*/ uint16(xSetOp), uint16(CVTPI2PS),\n\t/*1833*/ uint16(xReadSlashR),\n\t/*1834*/ uint16(xArgXmm),\n\t/*1835*/ uint16(xArgMmM64),\n\t/*1836*/ uint16(xMatch),\n\t/*1837*/ uint16(xSetOp), uint16(CVTPI2PD),\n\t/*1839*/ uint16(xReadSlashR),\n\t/*1840*/ uint16(xArgXmm),\n\t/*1841*/ uint16(xArgMmM64),\n\t/*1842*/ uint16(xMatch),\n\t/*1843*/ uint16(xCondDataSize), 1847, 1853, 0,\n\t/*1847*/ uint16(xSetOp), uint16(CVTSI2SD),\n\t/*1849*/ uint16(xReadSlashR),\n\t/*1850*/ uint16(xArgXmm),\n\t/*1851*/ uint16(xArgRM32),\n\t/*1852*/ uint16(xMatch),\n\t/*1853*/ uint16(xSetOp), uint16(CVTSI2SD),\n\t/*1855*/ uint16(xReadSlashR),\n\t/*1856*/ uint16(xArgXmm),\n\t/*1857*/ uint16(xArgRM32),\n\t/*1858*/ uint16(xMatch),\n\t/*1859*/ uint16(xCondDataSize), 1863, 1869, 0,\n\t/*1863*/ uint16(xSetOp), uint16(CVTSI2SS),\n\t/*1865*/ uint16(xReadSlashR),\n\t/*1866*/ uint16(xArgXmm),\n\t/*1867*/ uint16(xArgRM32),\n\t/*1868*/ uint16(xMatch),\n\t/*1869*/ uint16(xSetOp), uint16(CVTSI2SS),\n\t/*1871*/ uint16(xReadSlashR),\n\t/*1872*/ uint16(xArgXmm),\n\t/*1873*/ uint16(xArgRM32),\n\t/*1874*/ uint16(xMatch),\n\t/*1875*/ uint16(xCondPrefix), 4,\n\t0xF3, 1895,\n\t0xF2, 1885,\n\t0x66, 1837,\n\t0x0, 1831,\n\t/*1885*/ uint16(xCondDataSize), 1847, 1853, 1889,\n\t/*1889*/ uint16(xSetOp), uint16(CVTSI2SD),\n\t/*1891*/ uint16(xReadSlashR),\n\t/*1892*/ uint16(xArgXmm),\n\t/*1893*/ uint16(xArgRM64),\n\t/*1894*/ uint16(xMatch),\n\t/*1895*/ uint16(xCondDataSize), 1863, 1869, 1899,\n\t/*1899*/ uint16(xSetOp), uint16(CVTSI2SS),\n\t/*1901*/ uint16(xReadSlashR),\n\t/*1902*/ uint16(xArgXmm),\n\t/*1903*/ uint16(xArgRM64),\n\t/*1904*/ uint16(xMatch),\n\t/*1905*/ uint16(xCondPrefix), 4,\n\t0xF3, 1933,\n\t0xF2, 1927,\n\t0x66, 1921,\n\t0x0, 1915,\n\t/*1915*/ uint16(xSetOp), uint16(MOVNTPS),\n\t/*1917*/ uint16(xReadSlashR),\n\t/*1918*/ uint16(xArgM128),\n\t/*1919*/ uint16(xArgXmm),\n\t/*1920*/ uint16(xMatch),\n\t/*1921*/ uint16(xSetOp), uint16(MOVNTPD),\n\t/*1923*/ uint16(xReadSlashR),\n\t/*1924*/ uint16(xArgM128),\n\t/*1925*/ uint16(xArgXmm),\n\t/*1926*/ uint16(xMatch),\n\t/*1927*/ uint16(xSetOp), uint16(MOVNTSD),\n\t/*1929*/ uint16(xReadSlashR),\n\t/*1930*/ uint16(xArgM64),\n\t/*1931*/ uint16(xArgXmm),\n\t/*1932*/ uint16(xMatch),\n\t/*1933*/ uint16(xSetOp), uint16(MOVNTSS),\n\t/*1935*/ uint16(xReadSlashR),\n\t/*1936*/ uint16(xArgM32),\n\t/*1937*/ uint16(xArgXmm),\n\t/*1938*/ uint16(xMatch),\n\t/*1939*/ uint16(xCondIs64), 1942, 1996,\n\t/*1942*/ uint16(xCondPrefix), 4,\n\t0xF3, 1980,\n\t0xF2, 1964,\n\t0x66, 1958,\n\t0x0, 1952,\n\t/*1952*/ uint16(xSetOp), uint16(CVTTPS2PI),\n\t/*1954*/ uint16(xReadSlashR),\n\t/*1955*/ uint16(xArgMm),\n\t/*1956*/ uint16(xArgXmmM64),\n\t/*1957*/ uint16(xMatch),\n\t/*1958*/ uint16(xSetOp), uint16(CVTTPD2PI),\n\t/*1960*/ uint16(xReadSlashR),\n\t/*1961*/ uint16(xArgMm),\n\t/*1962*/ uint16(xArgXmmM128),\n\t/*1963*/ uint16(xMatch),\n\t/*1964*/ uint16(xCondDataSize), 1968, 1974, 0,\n\t/*1968*/ uint16(xSetOp), uint16(CVTTSD2SI),\n\t/*1970*/ uint16(xReadSlashR),\n\t/*1971*/ uint16(xArgR32),\n\t/*1972*/ uint16(xArgXmmM64),\n\t/*1973*/ uint16(xMatch),\n\t/*1974*/ uint16(xSetOp), uint16(CVTTSD2SI),\n\t/*1976*/ uint16(xReadSlashR),\n\t/*1977*/ uint16(xArgR32),\n\t/*1978*/ uint16(xArgXmmM64),\n\t/*1979*/ uint16(xMatch),\n\t/*1980*/ uint16(xCondDataSize), 1984, 1990, 0,\n\t/*1984*/ uint16(xSetOp), uint16(CVTTSS2SI),\n\t/*1986*/ uint16(xReadSlashR),\n\t/*1987*/ uint16(xArgR32),\n\t/*1988*/ uint16(xArgXmmM32),\n\t/*1989*/ uint16(xMatch),\n\t/*1990*/ uint16(xSetOp), uint16(CVTTSS2SI),\n\t/*1992*/ uint16(xReadSlashR),\n\t/*1993*/ uint16(xArgR32),\n\t/*1994*/ uint16(xArgXmmM32),\n\t/*1995*/ uint16(xMatch),\n\t/*1996*/ uint16(xCondPrefix), 4,\n\t0xF3, 2016,\n\t0xF2, 2006,\n\t0x66, 1958,\n\t0x0, 1952,\n\t/*2006*/ uint16(xCondDataSize), 1968, 1974, 2010,\n\t/*2010*/ uint16(xSetOp), uint16(CVTTSD2SI),\n\t/*2012*/ uint16(xReadSlashR),\n\t/*2013*/ uint16(xArgR64),\n\t/*2014*/ uint16(xArgXmmM64),\n\t/*2015*/ uint16(xMatch),\n\t/*2016*/ uint16(xCondDataSize), 1984, 1990, 2020,\n\t/*2020*/ uint16(xSetOp), uint16(CVTTSS2SI),\n\t/*2022*/ uint16(xReadSlashR),\n\t/*2023*/ uint16(xArgR64),\n\t/*2024*/ uint16(xArgXmmM32),\n\t/*2025*/ uint16(xMatch),\n\t/*2026*/ uint16(xCondIs64), 2029, 2083,\n\t/*2029*/ uint16(xCondPrefix), 4,\n\t0xF3, 2067,\n\t0xF2, 2051,\n\t0x66, 2045,\n\t0x0, 2039,\n\t/*2039*/ uint16(xSetOp), uint16(CVTPS2PI),\n\t/*2041*/ uint16(xReadSlashR),\n\t/*2042*/ uint16(xArgMm),\n\t/*2043*/ uint16(xArgXmmM64),\n\t/*2044*/ uint16(xMatch),\n\t/*2045*/ uint16(xSetOp), uint16(CVTPD2PI),\n\t/*2047*/ uint16(xReadSlashR),\n\t/*2048*/ uint16(xArgMm),\n\t/*2049*/ uint16(xArgXmmM128),\n\t/*2050*/ uint16(xMatch),\n\t/*2051*/ uint16(xCondDataSize), 2055, 2061, 0,\n\t/*2055*/ uint16(xSetOp), uint16(CVTSD2SI),\n\t/*2057*/ uint16(xReadSlashR),\n\t/*2058*/ uint16(xArgR32),\n\t/*2059*/ uint16(xArgXmmM64),\n\t/*2060*/ uint16(xMatch),\n\t/*2061*/ uint16(xSetOp), uint16(CVTSD2SI),\n\t/*2063*/ uint16(xReadSlashR),\n\t/*2064*/ uint16(xArgR32),\n\t/*2065*/ uint16(xArgXmmM64),\n\t/*2066*/ uint16(xMatch),\n\t/*2067*/ uint16(xCondDataSize), 2071, 2077, 0,\n\t/*2071*/ uint16(xSetOp), uint16(CVTSS2SI),\n\t/*2073*/ uint16(xReadSlashR),\n\t/*2074*/ uint16(xArgR32),\n\t/*2075*/ uint16(xArgXmmM32),\n\t/*2076*/ uint16(xMatch),\n\t/*2077*/ uint16(xSetOp), uint16(CVTSS2SI),\n\t/*2079*/ uint16(xReadSlashR),\n\t/*2080*/ uint16(xArgR32),\n\t/*2081*/ uint16(xArgXmmM32),\n\t/*2082*/ uint16(xMatch),\n\t/*2083*/ uint16(xCondPrefix), 4,\n\t0xF3, 2103,\n\t0xF2, 2093,\n\t0x66, 2045,\n\t0x0, 2039,\n\t/*2093*/ uint16(xCondDataSize), 2055, 2061, 2097,\n\t/*2097*/ uint16(xSetOp), uint16(CVTSD2SI),\n\t/*2099*/ uint16(xReadSlashR),\n\t/*2100*/ uint16(xArgR64),\n\t/*2101*/ uint16(xArgXmmM64),\n\t/*2102*/ uint16(xMatch),\n\t/*2103*/ uint16(xCondDataSize), 2071, 2077, 2107,\n\t/*2107*/ uint16(xSetOp), uint16(CVTSS2SI),\n\t/*2109*/ uint16(xReadSlashR),\n\t/*2110*/ uint16(xArgR64),\n\t/*2111*/ uint16(xArgXmmM32),\n\t/*2112*/ uint16(xMatch),\n\t/*2113*/ uint16(xCondPrefix), 2,\n\t0x66, 2125,\n\t0x0, 2119,\n\t/*2119*/ uint16(xSetOp), uint16(UCOMISS),\n\t/*2121*/ uint16(xReadSlashR),\n\t/*2122*/ uint16(xArgXmm1),\n\t/*2123*/ uint16(xArgXmm2M32),\n\t/*2124*/ uint16(xMatch),\n\t/*2125*/ uint16(xSetOp), uint16(UCOMISD),\n\t/*2127*/ uint16(xReadSlashR),\n\t/*2128*/ uint16(xArgXmm1),\n\t/*2129*/ uint16(xArgXmm2M64),\n\t/*2130*/ uint16(xMatch),\n\t/*2131*/ uint16(xCondPrefix), 2,\n\t0x66, 2143,\n\t0x0, 2137,\n\t/*2137*/ uint16(xSetOp), uint16(COMISS),\n\t/*2139*/ uint16(xReadSlashR),\n\t/*2140*/ uint16(xArgXmm1),\n\t/*2141*/ uint16(xArgXmm2M32),\n\t/*2142*/ uint16(xMatch),\n\t/*2143*/ uint16(xSetOp), uint16(COMISD),\n\t/*2145*/ uint16(xReadSlashR),\n\t/*2146*/ uint16(xArgXmm1),\n\t/*2147*/ uint16(xArgXmm2M64),\n\t/*2148*/ uint16(xMatch),\n\t/*2149*/ uint16(xSetOp), uint16(WRMSR),\n\t/*2151*/ uint16(xMatch),\n\t/*2152*/ uint16(xSetOp), uint16(RDTSC),\n\t/*2154*/ uint16(xMatch),\n\t/*2155*/ uint16(xSetOp), uint16(RDMSR),\n\t/*2157*/ uint16(xMatch),\n\t/*2158*/ uint16(xSetOp), uint16(RDPMC),\n\t/*2160*/ uint16(xMatch),\n\t/*2161*/ uint16(xSetOp), uint16(SYSENTER),\n\t/*2163*/ uint16(xMatch),\n\t/*2164*/ uint16(xCondDataSize), 2168, 2168, 2171,\n\t/*2168*/ uint16(xSetOp), uint16(SYSEXIT),\n\t/*2170*/ uint16(xMatch),\n\t/*2171*/ uint16(xSetOp), uint16(SYSEXIT),\n\t/*2173*/ uint16(xMatch),\n\t/*2174*/ uint16(xCondByte), 54,\n\t0x00, 2285,\n\t0x01, 2303,\n\t0x02, 2321,\n\t0x03, 2339,\n\t0x04, 2357,\n\t0x05, 2375,\n\t0x06, 2393,\n\t0x07, 2411,\n\t0x08, 2429,\n\t0x09, 2447,\n\t0x0A, 2465,\n\t0x0B, 2483,\n\t0x10, 2501,\n\t0x14, 2512,\n\t0x15, 2523,\n\t0x17, 2534,\n\t0x1C, 2544,\n\t0x1D, 2562,\n\t0x1E, 2580,\n\t0x20, 2598,\n\t0x21, 2608,\n\t0x22, 2618,\n\t0x23, 2628,\n\t0x24, 2638,\n\t0x25, 2648,\n\t0x28, 2658,\n\t0x29, 2668,\n\t0x2A, 2678,\n\t0x2B, 2688,\n\t0x30, 2698,\n\t0x31, 2708,\n\t0x32, 2718,\n\t0x33, 2728,\n\t0x34, 2738,\n\t0x35, 2748,\n\t0x37, 2758,\n\t0x38, 2768,\n\t0x39, 2778,\n\t0x3A, 2788,\n\t0x3B, 2798,\n\t0x3C, 2808,\n\t0x3D, 2818,\n\t0x3E, 2828,\n\t0x3F, 2838,\n\t0x40, 2848,\n\t0x41, 2858,\n\t0x82, 2868,\n\t0xDB, 2891,\n\t0xDC, 2901,\n\t0xDD, 2911,\n\t0xDE, 2921,\n\t0xDF, 2931,\n\t0xF0, 2941,\n\t0xF1, 3008,\n\tuint16(xFail),\n\t/*2285*/ uint16(xCondPrefix), 2,\n\t0x66, 2297,\n\t0x0, 2291,\n\t/*2291*/ uint16(xSetOp), uint16(PSHUFB),\n\t/*2293*/ uint16(xReadSlashR),\n\t/*2294*/ uint16(xArgMm1),\n\t/*2295*/ uint16(xArgMm2M64),\n\t/*2296*/ uint16(xMatch),\n\t/*2297*/ uint16(xSetOp), uint16(PSHUFB),\n\t/*2299*/ uint16(xReadSlashR),\n\t/*2300*/ uint16(xArgXmm1),\n\t/*2301*/ uint16(xArgXmm2M128),\n\t/*2302*/ uint16(xMatch),\n\t/*2303*/ uint16(xCondPrefix), 2,\n\t0x66, 2315,\n\t0x0, 2309,\n\t/*2309*/ uint16(xSetOp), uint16(PHADDW),\n\t/*2311*/ uint16(xReadSlashR),\n\t/*2312*/ uint16(xArgMm1),\n\t/*2313*/ uint16(xArgMm2M64),\n\t/*2314*/ uint16(xMatch),\n\t/*2315*/ uint16(xSetOp), uint16(PHADDW),\n\t/*2317*/ uint16(xReadSlashR),\n\t/*2318*/ uint16(xArgXmm1),\n\t/*2319*/ uint16(xArgXmm2M128),\n\t/*2320*/ uint16(xMatch),\n\t/*2321*/ uint16(xCondPrefix), 2,\n\t0x66, 2333,\n\t0x0, 2327,\n\t/*2327*/ uint16(xSetOp), uint16(PHADDD),\n\t/*2329*/ uint16(xReadSlashR),\n\t/*2330*/ uint16(xArgMm1),\n\t/*2331*/ uint16(xArgMm2M64),\n\t/*2332*/ uint16(xMatch),\n\t/*2333*/ uint16(xSetOp), uint16(PHADDD),\n\t/*2335*/ uint16(xReadSlashR),\n\t/*2336*/ uint16(xArgXmm1),\n\t/*2337*/ uint16(xArgXmm2M128),\n\t/*2338*/ uint16(xMatch),\n\t/*2339*/ uint16(xCondPrefix), 2,\n\t0x66, 2351,\n\t0x0, 2345,\n\t/*2345*/ uint16(xSetOp), uint16(PHADDSW),\n\t/*2347*/ uint16(xReadSlashR),\n\t/*2348*/ uint16(xArgMm1),\n\t/*2349*/ uint16(xArgMm2M64),\n\t/*2350*/ uint16(xMatch),\n\t/*2351*/ uint16(xSetOp), uint16(PHADDSW),\n\t/*2353*/ uint16(xReadSlashR),\n\t/*2354*/ uint16(xArgXmm1),\n\t/*2355*/ uint16(xArgXmm2M128),\n\t/*2356*/ uint16(xMatch),\n\t/*2357*/ uint16(xCondPrefix), 2,\n\t0x66, 2369,\n\t0x0, 2363,\n\t/*2363*/ uint16(xSetOp), uint16(PMADDUBSW),\n\t/*2365*/ uint16(xReadSlashR),\n\t/*2366*/ uint16(xArgMm1),\n\t/*2367*/ uint16(xArgMm2M64),\n\t/*2368*/ uint16(xMatch),\n\t/*2369*/ uint16(xSetOp), uint16(PMADDUBSW),\n\t/*2371*/ uint16(xReadSlashR),\n\t/*2372*/ uint16(xArgXmm1),\n\t/*2373*/ uint16(xArgXmm2M128),\n\t/*2374*/ uint16(xMatch),\n\t/*2375*/ uint16(xCondPrefix), 2,\n\t0x66, 2387,\n\t0x0, 2381,\n\t/*2381*/ uint16(xSetOp), uint16(PHSUBW),\n\t/*2383*/ uint16(xReadSlashR),\n\t/*2384*/ uint16(xArgMm1),\n\t/*2385*/ uint16(xArgMm2M64),\n\t/*2386*/ uint16(xMatch),\n\t/*2387*/ uint16(xSetOp), uint16(PHSUBW),\n\t/*2389*/ uint16(xReadSlashR),\n\t/*2390*/ uint16(xArgXmm1),\n\t/*2391*/ uint16(xArgXmm2M128),\n\t/*2392*/ uint16(xMatch),\n\t/*2393*/ uint16(xCondPrefix), 2,\n\t0x66, 2405,\n\t0x0, 2399,\n\t/*2399*/ uint16(xSetOp), uint16(PHSUBD),\n\t/*2401*/ uint16(xReadSlashR),\n\t/*2402*/ uint16(xArgMm1),\n\t/*2403*/ uint16(xArgMm2M64),\n\t/*2404*/ uint16(xMatch),\n\t/*2405*/ uint16(xSetOp), uint16(PHSUBD),\n\t/*2407*/ uint16(xReadSlashR),\n\t/*2408*/ uint16(xArgXmm1),\n\t/*2409*/ uint16(xArgXmm2M128),\n\t/*2410*/ uint16(xMatch),\n\t/*2411*/ uint16(xCondPrefix), 2,\n\t0x66, 2423,\n\t0x0, 2417,\n\t/*2417*/ uint16(xSetOp), uint16(PHSUBSW),\n\t/*2419*/ uint16(xReadSlashR),\n\t/*2420*/ uint16(xArgMm1),\n\t/*2421*/ uint16(xArgMm2M64),\n\t/*2422*/ uint16(xMatch),\n\t/*2423*/ uint16(xSetOp), uint16(PHSUBSW),\n\t/*2425*/ uint16(xReadSlashR),\n\t/*2426*/ uint16(xArgXmm1),\n\t/*2427*/ uint16(xArgXmm2M128),\n\t/*2428*/ uint16(xMatch),\n\t/*2429*/ uint16(xCondPrefix), 2,\n\t0x66, 2441,\n\t0x0, 2435,\n\t/*2435*/ uint16(xSetOp), uint16(PSIGNB),\n\t/*2437*/ uint16(xReadSlashR),\n\t/*2438*/ uint16(xArgMm1),\n\t/*2439*/ uint16(xArgMm2M64),\n\t/*2440*/ uint16(xMatch),\n\t/*2441*/ uint16(xSetOp), uint16(PSIGNB),\n\t/*2443*/ uint16(xReadSlashR),\n\t/*2444*/ uint16(xArgXmm1),\n\t/*2445*/ uint16(xArgXmm2M128),\n\t/*2446*/ uint16(xMatch),\n\t/*2447*/ uint16(xCondPrefix), 2,\n\t0x66, 2459,\n\t0x0, 2453,\n\t/*2453*/ uint16(xSetOp), uint16(PSIGNW),\n\t/*2455*/ uint16(xReadSlashR),\n\t/*2456*/ uint16(xArgMm1),\n\t/*2457*/ uint16(xArgMm2M64),\n\t/*2458*/ uint16(xMatch),\n\t/*2459*/ uint16(xSetOp), uint16(PSIGNW),\n\t/*2461*/ uint16(xReadSlashR),\n\t/*2462*/ uint16(xArgXmm1),\n\t/*2463*/ uint16(xArgXmm2M128),\n\t/*2464*/ uint16(xMatch),\n\t/*2465*/ uint16(xCondPrefix), 2,\n\t0x66, 2477,\n\t0x0, 2471,\n\t/*2471*/ uint16(xSetOp), uint16(PSIGND),\n\t/*2473*/ uint16(xReadSlashR),\n\t/*2474*/ uint16(xArgMm1),\n\t/*2475*/ uint16(xArgMm2M64),\n\t/*2476*/ uint16(xMatch),\n\t/*2477*/ uint16(xSetOp), uint16(PSIGND),\n\t/*2479*/ uint16(xReadSlashR),\n\t/*2480*/ uint16(xArgXmm1),\n\t/*2481*/ uint16(xArgXmm2M128),\n\t/*2482*/ uint16(xMatch),\n\t/*2483*/ uint16(xCondPrefix), 2,\n\t0x66, 2495,\n\t0x0, 2489,\n\t/*2489*/ uint16(xSetOp), uint16(PMULHRSW),\n\t/*2491*/ uint16(xReadSlashR),\n\t/*2492*/ uint16(xArgMm1),\n\t/*2493*/ uint16(xArgMm2M64),\n\t/*2494*/ uint16(xMatch),\n\t/*2495*/ uint16(xSetOp), uint16(PMULHRSW),\n\t/*2497*/ uint16(xReadSlashR),\n\t/*2498*/ uint16(xArgXmm1),\n\t/*2499*/ uint16(xArgXmm2M128),\n\t/*2500*/ uint16(xMatch),\n\t/*2501*/ uint16(xCondPrefix), 1,\n\t0x66, 2505,\n\t/*2505*/ uint16(xSetOp), uint16(PBLENDVB),\n\t/*2507*/ uint16(xReadSlashR),\n\t/*2508*/ uint16(xArgXmm1),\n\t/*2509*/ uint16(xArgXmm2M128),\n\t/*2510*/ uint16(xArgXMM0),\n\t/*2511*/ uint16(xMatch),\n\t/*2512*/ uint16(xCondPrefix), 1,\n\t0x66, 2516,\n\t/*2516*/ uint16(xSetOp), uint16(BLENDVPS),\n\t/*2518*/ uint16(xReadSlashR),\n\t/*2519*/ uint16(xArgXmm1),\n\t/*2520*/ uint16(xArgXmm2M128),\n\t/*2521*/ uint16(xArgXMM0),\n\t/*2522*/ uint16(xMatch),\n\t/*2523*/ uint16(xCondPrefix), 1,\n\t0x66, 2527,\n\t/*2527*/ uint16(xSetOp), uint16(BLENDVPD),\n\t/*2529*/ uint16(xReadSlashR),\n\t/*2530*/ uint16(xArgXmm1),\n\t/*2531*/ uint16(xArgXmm2M128),\n\t/*2532*/ uint16(xArgXMM0),\n\t/*2533*/ uint16(xMatch),\n\t/*2534*/ uint16(xCondPrefix), 1,\n\t0x66, 2538,\n\t/*2538*/ uint16(xSetOp), uint16(PTEST),\n\t/*2540*/ uint16(xReadSlashR),\n\t/*2541*/ uint16(xArgXmm1),\n\t/*2542*/ uint16(xArgXmm2M128),\n\t/*2543*/ uint16(xMatch),\n\t/*2544*/ uint16(xCondPrefix), 2,\n\t0x66, 2556,\n\t0x0, 2550,\n\t/*2550*/ uint16(xSetOp), uint16(PABSB),\n\t/*2552*/ uint16(xReadSlashR),\n\t/*2553*/ uint16(xArgMm1),\n\t/*2554*/ uint16(xArgMm2M64),\n\t/*2555*/ uint16(xMatch),\n\t/*2556*/ uint16(xSetOp), uint16(PABSB),\n\t/*2558*/ uint16(xReadSlashR),\n\t/*2559*/ uint16(xArgXmm1),\n\t/*2560*/ uint16(xArgXmm2M128),\n\t/*2561*/ uint16(xMatch),\n\t/*2562*/ uint16(xCondPrefix), 2,\n\t0x66, 2574,\n\t0x0, 2568,\n\t/*2568*/ uint16(xSetOp), uint16(PABSW),\n\t/*2570*/ uint16(xReadSlashR),\n\t/*2571*/ uint16(xArgMm1),\n\t/*2572*/ uint16(xArgMm2M64),\n\t/*2573*/ uint16(xMatch),\n\t/*2574*/ uint16(xSetOp), uint16(PABSW),\n\t/*2576*/ uint16(xReadSlashR),\n\t/*2577*/ uint16(xArgXmm1),\n\t/*2578*/ uint16(xArgXmm2M128),\n\t/*2579*/ uint16(xMatch),\n\t/*2580*/ uint16(xCondPrefix), 2,\n\t0x66, 2592,\n\t0x0, 2586,\n\t/*2586*/ uint16(xSetOp), uint16(PABSD),\n\t/*2588*/ uint16(xReadSlashR),\n\t/*2589*/ uint16(xArgMm1),\n\t/*2590*/ uint16(xArgMm2M64),\n\t/*2591*/ uint16(xMatch),\n\t/*2592*/ uint16(xSetOp), uint16(PABSD),\n\t/*2594*/ uint16(xReadSlashR),\n\t/*2595*/ uint16(xArgXmm1),\n\t/*2596*/ uint16(xArgXmm2M128),\n\t/*2597*/ uint16(xMatch),\n\t/*2598*/ uint16(xCondPrefix), 1,\n\t0x66, 2602,\n\t/*2602*/ uint16(xSetOp), uint16(PMOVSXBW),\n\t/*2604*/ uint16(xReadSlashR),\n\t/*2605*/ uint16(xArgXmm1),\n\t/*2606*/ uint16(xArgXmm2M64),\n\t/*2607*/ uint16(xMatch),\n\t/*2608*/ uint16(xCondPrefix), 1,\n\t0x66, 2612,\n\t/*2612*/ uint16(xSetOp), uint16(PMOVSXBD),\n\t/*2614*/ uint16(xReadSlashR),\n\t/*2615*/ uint16(xArgXmm1),\n\t/*2616*/ uint16(xArgXmm2M32),\n\t/*2617*/ uint16(xMatch),\n\t/*2618*/ uint16(xCondPrefix), 1,\n\t0x66, 2622,\n\t/*2622*/ uint16(xSetOp), uint16(PMOVSXBQ),\n\t/*2624*/ uint16(xReadSlashR),\n\t/*2625*/ uint16(xArgXmm1),\n\t/*2626*/ uint16(xArgXmm2M16),\n\t/*2627*/ uint16(xMatch),\n\t/*2628*/ uint16(xCondPrefix), 1,\n\t0x66, 2632,\n\t/*2632*/ uint16(xSetOp), uint16(PMOVSXWD),\n\t/*2634*/ uint16(xReadSlashR),\n\t/*2635*/ uint16(xArgXmm1),\n\t/*2636*/ uint16(xArgXmm2M64),\n\t/*2637*/ uint16(xMatch),\n\t/*2638*/ uint16(xCondPrefix), 1,\n\t0x66, 2642,\n\t/*2642*/ uint16(xSetOp), uint16(PMOVSXWQ),\n\t/*2644*/ uint16(xReadSlashR),\n\t/*2645*/ uint16(xArgXmm1),\n\t/*2646*/ uint16(xArgXmm2M32),\n\t/*2647*/ uint16(xMatch),\n\t/*2648*/ uint16(xCondPrefix), 1,\n\t0x66, 2652,\n\t/*2652*/ uint16(xSetOp), uint16(PMOVSXDQ),\n\t/*2654*/ uint16(xReadSlashR),\n\t/*2655*/ uint16(xArgXmm1),\n\t/*2656*/ uint16(xArgXmm2M64),\n\t/*2657*/ uint16(xMatch),\n\t/*2658*/ uint16(xCondPrefix), 1,\n\t0x66, 2662,\n\t/*2662*/ uint16(xSetOp), uint16(PMULDQ),\n\t/*2664*/ uint16(xReadSlashR),\n\t/*2665*/ uint16(xArgXmm1),\n\t/*2666*/ uint16(xArgXmm2M128),\n\t/*2667*/ uint16(xMatch),\n\t/*2668*/ uint16(xCondPrefix), 1,\n\t0x66, 2672,\n\t/*2672*/ uint16(xSetOp), uint16(PCMPEQQ),\n\t/*2674*/ uint16(xReadSlashR),\n\t/*2675*/ uint16(xArgXmm1),\n\t/*2676*/ uint16(xArgXmm2M128),\n\t/*2677*/ uint16(xMatch),\n\t/*2678*/ uint16(xCondPrefix), 1,\n\t0x66, 2682,\n\t/*2682*/ uint16(xSetOp), uint16(MOVNTDQA),\n\t/*2684*/ uint16(xReadSlashR),\n\t/*2685*/ uint16(xArgXmm1),\n\t/*2686*/ uint16(xArgM128),\n\t/*2687*/ uint16(xMatch),\n\t/*2688*/ uint16(xCondPrefix), 1,\n\t0x66, 2692,\n\t/*2692*/ uint16(xSetOp), uint16(PACKUSDW),\n\t/*2694*/ uint16(xReadSlashR),\n\t/*2695*/ uint16(xArgXmm1),\n\t/*2696*/ uint16(xArgXmm2M128),\n\t/*2697*/ uint16(xMatch),\n\t/*2698*/ uint16(xCondPrefix), 1,\n\t0x66, 2702,\n\t/*2702*/ uint16(xSetOp), uint16(PMOVZXBW),\n\t/*2704*/ uint16(xReadSlashR),\n\t/*2705*/ uint16(xArgXmm1),\n\t/*2706*/ uint16(xArgXmm2M64),\n\t/*2707*/ uint16(xMatch),\n\t/*2708*/ uint16(xCondPrefix), 1,\n\t0x66, 2712,\n\t/*2712*/ uint16(xSetOp), uint16(PMOVZXBD),\n\t/*2714*/ uint16(xReadSlashR),\n\t/*2715*/ uint16(xArgXmm1),\n\t/*2716*/ uint16(xArgXmm2M32),\n\t/*2717*/ uint16(xMatch),\n\t/*2718*/ uint16(xCondPrefix), 1,\n\t0x66, 2722,\n\t/*2722*/ uint16(xSetOp), uint16(PMOVZXBQ),\n\t/*2724*/ uint16(xReadSlashR),\n\t/*2725*/ uint16(xArgXmm1),\n\t/*2726*/ uint16(xArgXmm2M16),\n\t/*2727*/ uint16(xMatch),\n\t/*2728*/ uint16(xCondPrefix), 1,\n\t0x66, 2732,\n\t/*2732*/ uint16(xSetOp), uint16(PMOVZXWD),\n\t/*2734*/ uint16(xReadSlashR),\n\t/*2735*/ uint16(xArgXmm1),\n\t/*2736*/ uint16(xArgXmm2M64),\n\t/*2737*/ uint16(xMatch),\n\t/*2738*/ uint16(xCondPrefix), 1,\n\t0x66, 2742,\n\t/*2742*/ uint16(xSetOp), uint16(PMOVZXWQ),\n\t/*2744*/ uint16(xReadSlashR),\n\t/*2745*/ uint16(xArgXmm1),\n\t/*2746*/ uint16(xArgXmm2M32),\n\t/*2747*/ uint16(xMatch),\n\t/*2748*/ uint16(xCondPrefix), 1,\n\t0x66, 2752,\n\t/*2752*/ uint16(xSetOp), uint16(PMOVZXDQ),\n\t/*2754*/ uint16(xReadSlashR),\n\t/*2755*/ uint16(xArgXmm1),\n\t/*2756*/ uint16(xArgXmm2M64),\n\t/*2757*/ uint16(xMatch),\n\t/*2758*/ uint16(xCondPrefix), 1,\n\t0x66, 2762,\n\t/*2762*/ uint16(xSetOp), uint16(PCMPGTQ),\n\t/*2764*/ uint16(xReadSlashR),\n\t/*2765*/ uint16(xArgXmm1),\n\t/*2766*/ uint16(xArgXmm2M128),\n\t/*2767*/ uint16(xMatch),\n\t/*2768*/ uint16(xCondPrefix), 1,\n\t0x66, 2772,\n\t/*2772*/ uint16(xSetOp), uint16(PMINSB),\n\t/*2774*/ uint16(xReadSlashR),\n\t/*2775*/ uint16(xArgXmm1),\n\t/*2776*/ uint16(xArgXmm2M128),\n\t/*2777*/ uint16(xMatch),\n\t/*2778*/ uint16(xCondPrefix), 1,\n\t0x66, 2782,\n\t/*2782*/ uint16(xSetOp), uint16(PMINSD),\n\t/*2784*/ uint16(xReadSlashR),\n\t/*2785*/ uint16(xArgXmm1),\n\t/*2786*/ uint16(xArgXmm2M128),\n\t/*2787*/ uint16(xMatch),\n\t/*2788*/ uint16(xCondPrefix), 1,\n\t0x66, 2792,\n\t/*2792*/ uint16(xSetOp), uint16(PMINUW),\n\t/*2794*/ uint16(xReadSlashR),\n\t/*2795*/ uint16(xArgXmm1),\n\t/*2796*/ uint16(xArgXmm2M128),\n\t/*2797*/ uint16(xMatch),\n\t/*2798*/ uint16(xCondPrefix), 1,\n\t0x66, 2802,\n\t/*2802*/ uint16(xSetOp), uint16(PMINUD),\n\t/*2804*/ uint16(xReadSlashR),\n\t/*2805*/ uint16(xArgXmm1),\n\t/*2806*/ uint16(xArgXmm2M128),\n\t/*2807*/ uint16(xMatch),\n\t/*2808*/ uint16(xCondPrefix), 1,\n\t0x66, 2812,\n\t/*2812*/ uint16(xSetOp), uint16(PMAXSB),\n\t/*2814*/ uint16(xReadSlashR),\n\t/*2815*/ uint16(xArgXmm1),\n\t/*2816*/ uint16(xArgXmm2M128),\n\t/*2817*/ uint16(xMatch),\n\t/*2818*/ uint16(xCondPrefix), 1,\n\t0x66, 2822,\n\t/*2822*/ uint16(xSetOp), uint16(PMAXSD),\n\t/*2824*/ uint16(xReadSlashR),\n\t/*2825*/ uint16(xArgXmm1),\n\t/*2826*/ uint16(xArgXmm2M128),\n\t/*2827*/ uint16(xMatch),\n\t/*2828*/ uint16(xCondPrefix), 1,\n\t0x66, 2832,\n\t/*2832*/ uint16(xSetOp), uint16(PMAXUW),\n\t/*2834*/ uint16(xReadSlashR),\n\t/*2835*/ uint16(xArgXmm1),\n\t/*2836*/ uint16(xArgXmm2M128),\n\t/*2837*/ uint16(xMatch),\n\t/*2838*/ uint16(xCondPrefix), 1,\n\t0x66, 2842,\n\t/*2842*/ uint16(xSetOp), uint16(PMAXUD),\n\t/*2844*/ uint16(xReadSlashR),\n\t/*2845*/ uint16(xArgXmm1),\n\t/*2846*/ uint16(xArgXmm2M128),\n\t/*2847*/ uint16(xMatch),\n\t/*2848*/ uint16(xCondPrefix), 1,\n\t0x66, 2852,\n\t/*2852*/ uint16(xSetOp), uint16(PMULLD),\n\t/*2854*/ uint16(xReadSlashR),\n\t/*2855*/ uint16(xArgXmm1),\n\t/*2856*/ uint16(xArgXmm2M128),\n\t/*2857*/ uint16(xMatch),\n\t/*2858*/ uint16(xCondPrefix), 1,\n\t0x66, 2862,\n\t/*2862*/ uint16(xSetOp), uint16(PHMINPOSUW),\n\t/*2864*/ uint16(xReadSlashR),\n\t/*2865*/ uint16(xArgXmm1),\n\t/*2866*/ uint16(xArgXmm2M128),\n\t/*2867*/ uint16(xMatch),\n\t/*2868*/ uint16(xCondIs64), 2871, 2881,\n\t/*2871*/ uint16(xCondPrefix), 1,\n\t0x66, 2875,\n\t/*2875*/ uint16(xSetOp), uint16(INVPCID),\n\t/*2877*/ uint16(xReadSlashR),\n\t/*2878*/ uint16(xArgR32),\n\t/*2879*/ uint16(xArgM128),\n\t/*2880*/ uint16(xMatch),\n\t/*2881*/ uint16(xCondPrefix), 1,\n\t0x66, 2885,\n\t/*2885*/ uint16(xSetOp), uint16(INVPCID),\n\t/*2887*/ uint16(xReadSlashR),\n\t/*2888*/ uint16(xArgR64),\n\t/*2889*/ uint16(xArgM128),\n\t/*2890*/ uint16(xMatch),\n\t/*2891*/ uint16(xCondPrefix), 1,\n\t0x66, 2895,\n\t/*2895*/ uint16(xSetOp), uint16(AESIMC),\n\t/*2897*/ uint16(xReadSlashR),\n\t/*2898*/ uint16(xArgXmm1),\n\t/*2899*/ uint16(xArgXmm2M128),\n\t/*2900*/ uint16(xMatch),\n\t/*2901*/ uint16(xCondPrefix), 1,\n\t0x66, 2905,\n\t/*2905*/ uint16(xSetOp), uint16(AESENC),\n\t/*2907*/ uint16(xReadSlashR),\n\t/*2908*/ uint16(xArgXmm1),\n\t/*2909*/ uint16(xArgXmm2M128),\n\t/*2910*/ uint16(xMatch),\n\t/*2911*/ uint16(xCondPrefix), 1,\n\t0x66, 2915,\n\t/*2915*/ uint16(xSetOp), uint16(AESENCLAST),\n\t/*2917*/ uint16(xReadSlashR),\n\t/*2918*/ uint16(xArgXmm1),\n\t/*2919*/ uint16(xArgXmm2M128),\n\t/*2920*/ uint16(xMatch),\n\t/*2921*/ uint16(xCondPrefix), 1,\n\t0x66, 2925,\n\t/*2925*/ uint16(xSetOp), uint16(AESDEC),\n\t/*2927*/ uint16(xReadSlashR),\n\t/*2928*/ uint16(xArgXmm1),\n\t/*2929*/ uint16(xArgXmm2M128),\n\t/*2930*/ uint16(xMatch),\n\t/*2931*/ uint16(xCondPrefix), 1,\n\t0x66, 2935,\n\t/*2935*/ uint16(xSetOp), uint16(AESDECLAST),\n\t/*2937*/ uint16(xReadSlashR),\n\t/*2938*/ uint16(xArgXmm1),\n\t/*2939*/ uint16(xArgXmm2M128),\n\t/*2940*/ uint16(xMatch),\n\t/*2941*/ uint16(xCondIs64), 2944, 2982,\n\t/*2944*/ uint16(xCondPrefix), 2,\n\t0xF2, 2966,\n\t0x0, 2950,\n\t/*2950*/ uint16(xCondDataSize), 2954, 2960, 0,\n\t/*2954*/ uint16(xSetOp), uint16(MOVBE),\n\t/*2956*/ uint16(xReadSlashR),\n\t/*2957*/ uint16(xArgR16),\n\t/*2958*/ uint16(xArgM16),\n\t/*2959*/ uint16(xMatch),\n\t/*2960*/ uint16(xSetOp), uint16(MOVBE),\n\t/*2962*/ uint16(xReadSlashR),\n\t/*2963*/ uint16(xArgR32),\n\t/*2964*/ uint16(xArgM32),\n\t/*2965*/ uint16(xMatch),\n\t/*2966*/ uint16(xCondDataSize), 2970, 2976, 0,\n\t/*2970*/ uint16(xSetOp), uint16(CRC32),\n\t/*2972*/ uint16(xReadSlashR),\n\t/*2973*/ uint16(xArgR32),\n\t/*2974*/ uint16(xArgRM8),\n\t/*2975*/ uint16(xMatch),\n\t/*2976*/ uint16(xSetOp), uint16(CRC32),\n\t/*2978*/ uint16(xReadSlashR),\n\t/*2979*/ uint16(xArgR32),\n\t/*2980*/ uint16(xArgRM8),\n\t/*2981*/ uint16(xMatch),\n\t/*2982*/ uint16(xCondPrefix), 2,\n\t0xF2, 2998,\n\t0x0, 2988,\n\t/*2988*/ uint16(xCondDataSize), 2954, 2960, 2992,\n\t/*2992*/ uint16(xSetOp), uint16(MOVBE),\n\t/*2994*/ uint16(xReadSlashR),\n\t/*2995*/ uint16(xArgR64),\n\t/*2996*/ uint16(xArgM64),\n\t/*2997*/ uint16(xMatch),\n\t/*2998*/ uint16(xCondDataSize), 2970, 2976, 3002,\n\t/*3002*/ uint16(xSetOp), uint16(CRC32),\n\t/*3004*/ uint16(xReadSlashR),\n\t/*3005*/ uint16(xArgR64),\n\t/*3006*/ uint16(xArgRM8),\n\t/*3007*/ uint16(xMatch),\n\t/*3008*/ uint16(xCondIs64), 3011, 3049,\n\t/*3011*/ uint16(xCondPrefix), 2,\n\t0xF2, 3033,\n\t0x0, 3017,\n\t/*3017*/ uint16(xCondDataSize), 3021, 3027, 0,\n\t/*3021*/ uint16(xSetOp), uint16(MOVBE),\n\t/*3023*/ uint16(xReadSlashR),\n\t/*3024*/ uint16(xArgM16),\n\t/*3025*/ uint16(xArgR16),\n\t/*3026*/ uint16(xMatch),\n\t/*3027*/ uint16(xSetOp), uint16(MOVBE),\n\t/*3029*/ uint16(xReadSlashR),\n\t/*3030*/ uint16(xArgM32),\n\t/*3031*/ uint16(xArgR32),\n\t/*3032*/ uint16(xMatch),\n\t/*3033*/ uint16(xCondDataSize), 3037, 3043, 0,\n\t/*3037*/ uint16(xSetOp), uint16(CRC32),\n\t/*3039*/ uint16(xReadSlashR),\n\t/*3040*/ uint16(xArgR32),\n\t/*3041*/ uint16(xArgRM16),\n\t/*3042*/ uint16(xMatch),\n\t/*3043*/ uint16(xSetOp), uint16(CRC32),\n\t/*3045*/ uint16(xReadSlashR),\n\t/*3046*/ uint16(xArgR32),\n\t/*3047*/ uint16(xArgRM32),\n\t/*3048*/ uint16(xMatch),\n\t/*3049*/ uint16(xCondPrefix), 2,\n\t0xF2, 3065,\n\t0x0, 3055,\n\t/*3055*/ uint16(xCondDataSize), 3021, 3027, 3059,\n\t/*3059*/ uint16(xSetOp), uint16(MOVBE),\n\t/*3061*/ uint16(xReadSlashR),\n\t/*3062*/ uint16(xArgM64),\n\t/*3063*/ uint16(xArgR64),\n\t/*3064*/ uint16(xMatch),\n\t/*3065*/ uint16(xCondDataSize), 3037, 3043, 3069,\n\t/*3069*/ uint16(xSetOp), uint16(CRC32),\n\t/*3071*/ uint16(xReadSlashR),\n\t/*3072*/ uint16(xArgR64),\n\t/*3073*/ uint16(xArgRM64),\n\t/*3074*/ uint16(xMatch),\n\t/*3075*/ uint16(xCondByte), 24,\n\t0x08, 3126,\n\t0x09, 3138,\n\t0x0A, 3150,\n\t0x0B, 3162,\n\t0x0C, 3174,\n\t0x0D, 3186,\n\t0x0E, 3198,\n\t0x0F, 3210,\n\t0x14, 3232,\n\t0x15, 3244,\n\t0x16, 3256,\n\t0x17, 3299,\n\t0x20, 3311,\n\t0x21, 3323,\n\t0x22, 3335,\n\t0x40, 3378,\n\t0x41, 3390,\n\t0x42, 3402,\n\t0x44, 3414,\n\t0x60, 3426,\n\t0x61, 3438,\n\t0x62, 3450,\n\t0x63, 3462,\n\t0xDF, 3474,\n\tuint16(xFail),\n\t/*3126*/ uint16(xCondPrefix), 1,\n\t0x66, 3130,\n\t/*3130*/ uint16(xSetOp), uint16(ROUNDPS),\n\t/*3132*/ uint16(xReadSlashR),\n\t/*3133*/ uint16(xReadIb),\n\t/*3134*/ uint16(xArgXmm1),\n\t/*3135*/ uint16(xArgXmm2M128),\n\t/*3136*/ uint16(xArgImm8u),\n\t/*3137*/ uint16(xMatch),\n\t/*3138*/ uint16(xCondPrefix), 1,\n\t0x66, 3142,\n\t/*3142*/ uint16(xSetOp), uint16(ROUNDPD),\n\t/*3144*/ uint16(xReadSlashR),\n\t/*3145*/ uint16(xReadIb),\n\t/*3146*/ uint16(xArgXmm1),\n\t/*3147*/ uint16(xArgXmm2M128),\n\t/*3148*/ uint16(xArgImm8u),\n\t/*3149*/ uint16(xMatch),\n\t/*3150*/ uint16(xCondPrefix), 1,\n\t0x66, 3154,\n\t/*3154*/ uint16(xSetOp), uint16(ROUNDSS),\n\t/*3156*/ uint16(xReadSlashR),\n\t/*3157*/ uint16(xReadIb),\n\t/*3158*/ uint16(xArgXmm1),\n\t/*3159*/ uint16(xArgXmm2M32),\n\t/*3160*/ uint16(xArgImm8u),\n\t/*3161*/ uint16(xMatch),\n\t/*3162*/ uint16(xCondPrefix), 1,\n\t0x66, 3166,\n\t/*3166*/ uint16(xSetOp), uint16(ROUNDSD),\n\t/*3168*/ uint16(xReadSlashR),\n\t/*3169*/ uint16(xReadIb),\n\t/*3170*/ uint16(xArgXmm1),\n\t/*3171*/ uint16(xArgXmm2M64),\n\t/*3172*/ uint16(xArgImm8u),\n\t/*3173*/ uint16(xMatch),\n\t/*3174*/ uint16(xCondPrefix), 1,\n\t0x66, 3178,\n\t/*3178*/ uint16(xSetOp), uint16(BLENDPS),\n\t/*3180*/ uint16(xReadSlashR),\n\t/*3181*/ uint16(xReadIb),\n\t/*3182*/ uint16(xArgXmm1),\n\t/*3183*/ uint16(xArgXmm2M128),\n\t/*3184*/ uint16(xArgImm8u),\n\t/*3185*/ uint16(xMatch),\n\t/*3186*/ uint16(xCondPrefix), 1,\n\t0x66, 3190,\n\t/*3190*/ uint16(xSetOp), uint16(BLENDPD),\n\t/*3192*/ uint16(xReadSlashR),\n\t/*3193*/ uint16(xReadIb),\n\t/*3194*/ uint16(xArgXmm1),\n\t/*3195*/ uint16(xArgXmm2M128),\n\t/*3196*/ uint16(xArgImm8u),\n\t/*3197*/ uint16(xMatch),\n\t/*3198*/ uint16(xCondPrefix), 1,\n\t0x66, 3202,\n\t/*3202*/ uint16(xSetOp), uint16(PBLENDW),\n\t/*3204*/ uint16(xReadSlashR),\n\t/*3205*/ uint16(xReadIb),\n\t/*3206*/ uint16(xArgXmm1),\n\t/*3207*/ uint16(xArgXmm2M128),\n\t/*3208*/ uint16(xArgImm8u),\n\t/*3209*/ uint16(xMatch),\n\t/*3210*/ uint16(xCondPrefix), 2,\n\t0x66, 3224,\n\t0x0, 3216,\n\t/*3216*/ uint16(xSetOp), uint16(PALIGNR),\n\t/*3218*/ uint16(xReadSlashR),\n\t/*3219*/ uint16(xReadIb),\n\t/*3220*/ uint16(xArgMm1),\n\t/*3221*/ uint16(xArgMm2M64),\n\t/*3222*/ uint16(xArgImm8u),\n\t/*3223*/ uint16(xMatch),\n\t/*3224*/ uint16(xSetOp), uint16(PALIGNR),\n\t/*3226*/ uint16(xReadSlashR),\n\t/*3227*/ uint16(xReadIb),\n\t/*3228*/ uint16(xArgXmm1),\n\t/*3229*/ uint16(xArgXmm2M128),\n\t/*3230*/ uint16(xArgImm8u),\n\t/*3231*/ uint16(xMatch),\n\t/*3232*/ uint16(xCondPrefix), 1,\n\t0x66, 3236,\n\t/*3236*/ uint16(xSetOp), uint16(PEXTRB),\n\t/*3238*/ uint16(xReadSlashR),\n\t/*3239*/ uint16(xReadIb),\n\t/*3240*/ uint16(xArgR32M8),\n\t/*3241*/ uint16(xArgXmm1),\n\t/*3242*/ uint16(xArgImm8u),\n\t/*3243*/ uint16(xMatch),\n\t/*3244*/ uint16(xCondPrefix), 1,\n\t0x66, 3248,\n\t/*3248*/ uint16(xSetOp), uint16(PEXTRW),\n\t/*3250*/ uint16(xReadSlashR),\n\t/*3251*/ uint16(xReadIb),\n\t/*3252*/ uint16(xArgR32M16),\n\t/*3253*/ uint16(xArgXmm1),\n\t/*3254*/ uint16(xArgImm8u),\n\t/*3255*/ uint16(xMatch),\n\t/*3256*/ uint16(xCondIs64), 3259, 3283,\n\t/*3259*/ uint16(xCondPrefix), 1,\n\t0x66, 3263,\n\t/*3263*/ uint16(xCondDataSize), 3267, 3275, 0,\n\t/*3267*/ uint16(xSetOp), uint16(PEXTRD),\n\t/*3269*/ uint16(xReadSlashR),\n\t/*3270*/ uint16(xReadIb),\n\t/*3271*/ uint16(xArgRM32),\n\t/*3272*/ uint16(xArgXmm1),\n\t/*3273*/ uint16(xArgImm8u),\n\t/*3274*/ uint16(xMatch),\n\t/*3275*/ uint16(xSetOp), uint16(PEXTRD),\n\t/*3277*/ uint16(xReadSlashR),\n\t/*3278*/ uint16(xReadIb),\n\t/*3279*/ uint16(xArgRM32),\n\t/*3280*/ uint16(xArgXmm1),\n\t/*3281*/ uint16(xArgImm8u),\n\t/*3282*/ uint16(xMatch),\n\t/*3283*/ uint16(xCondPrefix), 1,\n\t0x66, 3287,\n\t/*3287*/ uint16(xCondDataSize), 3267, 3275, 3291,\n\t/*3291*/ uint16(xSetOp), uint16(PEXTRQ),\n\t/*3293*/ uint16(xReadSlashR),\n\t/*3294*/ uint16(xReadIb),\n\t/*3295*/ uint16(xArgRM64),\n\t/*3296*/ uint16(xArgXmm1),\n\t/*3297*/ uint16(xArgImm8u),\n\t/*3298*/ uint16(xMatch),\n\t/*3299*/ uint16(xCondPrefix), 1,\n\t0x66, 3303,\n\t/*3303*/ uint16(xSetOp), uint16(EXTRACTPS),\n\t/*3305*/ uint16(xReadSlashR),\n\t/*3306*/ uint16(xReadIb),\n\t/*3307*/ uint16(xArgRM32),\n\t/*3308*/ uint16(xArgXmm1),\n\t/*3309*/ uint16(xArgImm8u),\n\t/*3310*/ uint16(xMatch),\n\t/*3311*/ uint16(xCondPrefix), 1,\n\t0x66, 3315,\n\t/*3315*/ uint16(xSetOp), uint16(PINSRB),\n\t/*3317*/ uint16(xReadSlashR),\n\t/*3318*/ uint16(xReadIb),\n\t/*3319*/ uint16(xArgXmm1),\n\t/*3320*/ uint16(xArgR32M8),\n\t/*3321*/ uint16(xArgImm8u),\n\t/*3322*/ uint16(xMatch),\n\t/*3323*/ uint16(xCondPrefix), 1,\n\t0x66, 3327,\n\t/*3327*/ uint16(xSetOp), uint16(INSERTPS),\n\t/*3329*/ uint16(xReadSlashR),\n\t/*3330*/ uint16(xReadIb),\n\t/*3331*/ uint16(xArgXmm1),\n\t/*3332*/ uint16(xArgXmm2M32),\n\t/*3333*/ uint16(xArgImm8u),\n\t/*3334*/ uint16(xMatch),\n\t/*3335*/ uint16(xCondIs64), 3338, 3362,\n\t/*3338*/ uint16(xCondPrefix), 1,\n\t0x66, 3342,\n\t/*3342*/ uint16(xCondDataSize), 3346, 3354, 0,\n\t/*3346*/ uint16(xSetOp), uint16(PINSRD),\n\t/*3348*/ uint16(xReadSlashR),\n\t/*3349*/ uint16(xReadIb),\n\t/*3350*/ uint16(xArgXmm1),\n\t/*3351*/ uint16(xArgRM32),\n\t/*3352*/ uint16(xArgImm8u),\n\t/*3353*/ uint16(xMatch),\n\t/*3354*/ uint16(xSetOp), uint16(PINSRD),\n\t/*3356*/ uint16(xReadSlashR),\n\t/*3357*/ uint16(xReadIb),\n\t/*3358*/ uint16(xArgXmm1),\n\t/*3359*/ uint16(xArgRM32),\n\t/*3360*/ uint16(xArgImm8u),\n\t/*3361*/ uint16(xMatch),\n\t/*3362*/ uint16(xCondPrefix), 1,\n\t0x66, 3366,\n\t/*3366*/ uint16(xCondDataSize), 3346, 3354, 3370,\n\t/*3370*/ uint16(xSetOp), uint16(PINSRQ),\n\t/*3372*/ uint16(xReadSlashR),\n\t/*3373*/ uint16(xReadIb),\n\t/*3374*/ uint16(xArgXmm1),\n\t/*3375*/ uint16(xArgRM64),\n\t/*3376*/ uint16(xArgImm8u),\n\t/*3377*/ uint16(xMatch),\n\t/*3378*/ uint16(xCondPrefix), 1,\n\t0x66, 3382,\n\t/*3382*/ uint16(xSetOp), uint16(DPPS),\n\t/*3384*/ uint16(xReadSlashR),\n\t/*3385*/ uint16(xReadIb),\n\t/*3386*/ uint16(xArgXmm1),\n\t/*3387*/ uint16(xArgXmm2M128),\n\t/*3388*/ uint16(xArgImm8u),\n\t/*3389*/ uint16(xMatch),\n\t/*3390*/ uint16(xCondPrefix), 1,\n\t0x66, 3394,\n\t/*3394*/ uint16(xSetOp), uint16(DPPD),\n\t/*3396*/ uint16(xReadSlashR),\n\t/*3397*/ uint16(xReadIb),\n\t/*3398*/ uint16(xArgXmm1),\n\t/*3399*/ uint16(xArgXmm2M128),\n\t/*3400*/ uint16(xArgImm8u),\n\t/*3401*/ uint16(xMatch),\n\t/*3402*/ uint16(xCondPrefix), 1,\n\t0x66, 3406,\n\t/*3406*/ uint16(xSetOp), uint16(MPSADBW),\n\t/*3408*/ uint16(xReadSlashR),\n\t/*3409*/ uint16(xReadIb),\n\t/*3410*/ uint16(xArgXmm1),\n\t/*3411*/ uint16(xArgXmm2M128),\n\t/*3412*/ uint16(xArgImm8u),\n\t/*3413*/ uint16(xMatch),\n\t/*3414*/ uint16(xCondPrefix), 1,\n\t0x66, 3418,\n\t/*3418*/ uint16(xSetOp), uint16(PCLMULQDQ),\n\t/*3420*/ uint16(xReadSlashR),\n\t/*3421*/ uint16(xReadIb),\n\t/*3422*/ uint16(xArgXmm1),\n\t/*3423*/ uint16(xArgXmm2M128),\n\t/*3424*/ uint16(xArgImm8u),\n\t/*3425*/ uint16(xMatch),\n\t/*3426*/ uint16(xCondPrefix), 1,\n\t0x66, 3430,\n\t/*3430*/ uint16(xSetOp), uint16(PCMPESTRM),\n\t/*3432*/ uint16(xReadSlashR),\n\t/*3433*/ uint16(xReadIb),\n\t/*3434*/ uint16(xArgXmm1),\n\t/*3435*/ uint16(xArgXmm2M128),\n\t/*3436*/ uint16(xArgImm8u),\n\t/*3437*/ uint16(xMatch),\n\t/*3438*/ uint16(xCondPrefix), 1,\n\t0x66, 3442,\n\t/*3442*/ uint16(xSetOp), uint16(PCMPESTRI),\n\t/*3444*/ uint16(xReadSlashR),\n\t/*3445*/ uint16(xReadIb),\n\t/*3446*/ uint16(xArgXmm1),\n\t/*3447*/ uint16(xArgXmm2M128),\n\t/*3448*/ uint16(xArgImm8u),\n\t/*3449*/ uint16(xMatch),\n\t/*3450*/ uint16(xCondPrefix), 1,\n\t0x66, 3454,\n\t/*3454*/ uint16(xSetOp), uint16(PCMPISTRM),\n\t/*3456*/ uint16(xReadSlashR),\n\t/*3457*/ uint16(xReadIb),\n\t/*3458*/ uint16(xArgXmm1),\n\t/*3459*/ uint16(xArgXmm2M128),\n\t/*3460*/ uint16(xArgImm8u),\n\t/*3461*/ uint16(xMatch),\n\t/*3462*/ uint16(xCondPrefix), 1,\n\t0x66, 3466,\n\t/*3466*/ uint16(xSetOp), uint16(PCMPISTRI),\n\t/*3468*/ uint16(xReadSlashR),\n\t/*3469*/ uint16(xReadIb),\n\t/*3470*/ uint16(xArgXmm1),\n\t/*3471*/ uint16(xArgXmm2M128),\n\t/*3472*/ uint16(xArgImm8u),\n\t/*3473*/ uint16(xMatch),\n\t/*3474*/ uint16(xCondPrefix), 1,\n\t0x66, 3478,\n\t/*3478*/ uint16(xSetOp), uint16(AESKEYGENASSIST),\n\t/*3480*/ uint16(xReadSlashR),\n\t/*3481*/ uint16(xReadIb),\n\t/*3482*/ uint16(xArgXmm1),\n\t/*3483*/ uint16(xArgXmm2M128),\n\t/*3484*/ uint16(xArgImm8u),\n\t/*3485*/ uint16(xMatch),\n\t/*3486*/ uint16(xCondIs64), 3489, 3505,\n\t/*3489*/ uint16(xCondDataSize), 3493, 3499, 0,\n\t/*3493*/ uint16(xSetOp), uint16(CMOVO),\n\t/*3495*/ uint16(xReadSlashR),\n\t/*3496*/ uint16(xArgR16),\n\t/*3497*/ uint16(xArgRM16),\n\t/*3498*/ uint16(xMatch),\n\t/*3499*/ uint16(xSetOp), uint16(CMOVO),\n\t/*3501*/ uint16(xReadSlashR),\n\t/*3502*/ uint16(xArgR32),\n\t/*3503*/ uint16(xArgRM32),\n\t/*3504*/ uint16(xMatch),\n\t/*3505*/ uint16(xCondDataSize), 3493, 3499, 3509,\n\t/*3509*/ uint16(xSetOp), uint16(CMOVO),\n\t/*3511*/ uint16(xReadSlashR),\n\t/*3512*/ uint16(xArgR64),\n\t/*3513*/ uint16(xArgRM64),\n\t/*3514*/ uint16(xMatch),\n\t/*3515*/ uint16(xCondIs64), 3518, 3534,\n\t/*3518*/ uint16(xCondDataSize), 3522, 3528, 0,\n\t/*3522*/ uint16(xSetOp), uint16(CMOVNO),\n\t/*3524*/ uint16(xReadSlashR),\n\t/*3525*/ uint16(xArgR16),\n\t/*3526*/ uint16(xArgRM16),\n\t/*3527*/ uint16(xMatch),\n\t/*3528*/ uint16(xSetOp), uint16(CMOVNO),\n\t/*3530*/ uint16(xReadSlashR),\n\t/*3531*/ uint16(xArgR32),\n\t/*3532*/ uint16(xArgRM32),\n\t/*3533*/ uint16(xMatch),\n\t/*3534*/ uint16(xCondDataSize), 3522, 3528, 3538,\n\t/*3538*/ uint16(xSetOp), uint16(CMOVNO),\n\t/*3540*/ uint16(xReadSlashR),\n\t/*3541*/ uint16(xArgR64),\n\t/*3542*/ uint16(xArgRM64),\n\t/*3543*/ uint16(xMatch),\n\t/*3544*/ uint16(xCondIs64), 3547, 3563,\n\t/*3547*/ uint16(xCondDataSize), 3551, 3557, 0,\n\t/*3551*/ uint16(xSetOp), uint16(CMOVB),\n\t/*3553*/ uint16(xReadSlashR),\n\t/*3554*/ uint16(xArgR16),\n\t/*3555*/ uint16(xArgRM16),\n\t/*3556*/ uint16(xMatch),\n\t/*3557*/ uint16(xSetOp), uint16(CMOVB),\n\t/*3559*/ uint16(xReadSlashR),\n\t/*3560*/ uint16(xArgR32),\n\t/*3561*/ uint16(xArgRM32),\n\t/*3562*/ uint16(xMatch),\n\t/*3563*/ uint16(xCondDataSize), 3551, 3557, 3567,\n\t/*3567*/ uint16(xSetOp), uint16(CMOVB),\n\t/*3569*/ uint16(xReadSlashR),\n\t/*3570*/ uint16(xArgR64),\n\t/*3571*/ uint16(xArgRM64),\n\t/*3572*/ uint16(xMatch),\n\t/*3573*/ uint16(xCondIs64), 3576, 3592,\n\t/*3576*/ uint16(xCondDataSize), 3580, 3586, 0,\n\t/*3580*/ uint16(xSetOp), uint16(CMOVAE),\n\t/*3582*/ uint16(xReadSlashR),\n\t/*3583*/ uint16(xArgR16),\n\t/*3584*/ uint16(xArgRM16),\n\t/*3585*/ uint16(xMatch),\n\t/*3586*/ uint16(xSetOp), uint16(CMOVAE),\n\t/*3588*/ uint16(xReadSlashR),\n\t/*3589*/ uint16(xArgR32),\n\t/*3590*/ uint16(xArgRM32),\n\t/*3591*/ uint16(xMatch),\n\t/*3592*/ uint16(xCondDataSize), 3580, 3586, 3596,\n\t/*3596*/ uint16(xSetOp), uint16(CMOVAE),\n\t/*3598*/ uint16(xReadSlashR),\n\t/*3599*/ uint16(xArgR64),\n\t/*3600*/ uint16(xArgRM64),\n\t/*3601*/ uint16(xMatch),\n\t/*3602*/ uint16(xCondIs64), 3605, 3621,\n\t/*3605*/ uint16(xCondDataSize), 3609, 3615, 0,\n\t/*3609*/ uint16(xSetOp), uint16(CMOVE),\n\t/*3611*/ uint16(xReadSlashR),\n\t/*3612*/ uint16(xArgR16),\n\t/*3613*/ uint16(xArgRM16),\n\t/*3614*/ uint16(xMatch),\n\t/*3615*/ uint16(xSetOp), uint16(CMOVE),\n\t/*3617*/ uint16(xReadSlashR),\n\t/*3618*/ uint16(xArgR32),\n\t/*3619*/ uint16(xArgRM32),\n\t/*3620*/ uint16(xMatch),\n\t/*3621*/ uint16(xCondDataSize), 3609, 3615, 3625,\n\t/*3625*/ uint16(xSetOp), uint16(CMOVE),\n\t/*3627*/ uint16(xReadSlashR),\n\t/*3628*/ uint16(xArgR64),\n\t/*3629*/ uint16(xArgRM64),\n\t/*3630*/ uint16(xMatch),\n\t/*3631*/ uint16(xCondIs64), 3634, 3650,\n\t/*3634*/ uint16(xCondDataSize), 3638, 3644, 0,\n\t/*3638*/ uint16(xSetOp), uint16(CMOVNE),\n\t/*3640*/ uint16(xReadSlashR),\n\t/*3641*/ uint16(xArgR16),\n\t/*3642*/ uint16(xArgRM16),\n\t/*3643*/ uint16(xMatch),\n\t/*3644*/ uint16(xSetOp), uint16(CMOVNE),\n\t/*3646*/ uint16(xReadSlashR),\n\t/*3647*/ uint16(xArgR32),\n\t/*3648*/ uint16(xArgRM32),\n\t/*3649*/ uint16(xMatch),\n\t/*3650*/ uint16(xCondDataSize), 3638, 3644, 3654,\n\t/*3654*/ uint16(xSetOp), uint16(CMOVNE),\n\t/*3656*/ uint16(xReadSlashR),\n\t/*3657*/ uint16(xArgR64),\n\t/*3658*/ uint16(xArgRM64),\n\t/*3659*/ uint16(xMatch),\n\t/*3660*/ uint16(xCondIs64), 3663, 3679,\n\t/*3663*/ uint16(xCondDataSize), 3667, 3673, 0,\n\t/*3667*/ uint16(xSetOp), uint16(CMOVBE),\n\t/*3669*/ uint16(xReadSlashR),\n\t/*3670*/ uint16(xArgR16),\n\t/*3671*/ uint16(xArgRM16),\n\t/*3672*/ uint16(xMatch),\n\t/*3673*/ uint16(xSetOp), uint16(CMOVBE),\n\t/*3675*/ uint16(xReadSlashR),\n\t/*3676*/ uint16(xArgR32),\n\t/*3677*/ uint16(xArgRM32),\n\t/*3678*/ uint16(xMatch),\n\t/*3679*/ uint16(xCondDataSize), 3667, 3673, 3683,\n\t/*3683*/ uint16(xSetOp), uint16(CMOVBE),\n\t/*3685*/ uint16(xReadSlashR),\n\t/*3686*/ uint16(xArgR64),\n\t/*3687*/ uint16(xArgRM64),\n\t/*3688*/ uint16(xMatch),\n\t/*3689*/ uint16(xCondIs64), 3692, 3708,\n\t/*3692*/ uint16(xCondDataSize), 3696, 3702, 0,\n\t/*3696*/ uint16(xSetOp), uint16(CMOVA),\n\t/*3698*/ uint16(xReadSlashR),\n\t/*3699*/ uint16(xArgR16),\n\t/*3700*/ uint16(xArgRM16),\n\t/*3701*/ uint16(xMatch),\n\t/*3702*/ uint16(xSetOp), uint16(CMOVA),\n\t/*3704*/ uint16(xReadSlashR),\n\t/*3705*/ uint16(xArgR32),\n\t/*3706*/ uint16(xArgRM32),\n\t/*3707*/ uint16(xMatch),\n\t/*3708*/ uint16(xCondDataSize), 3696, 3702, 3712,\n\t/*3712*/ uint16(xSetOp), uint16(CMOVA),\n\t/*3714*/ uint16(xReadSlashR),\n\t/*3715*/ uint16(xArgR64),\n\t/*3716*/ uint16(xArgRM64),\n\t/*3717*/ uint16(xMatch),\n\t/*3718*/ uint16(xCondIs64), 3721, 3737,\n\t/*3721*/ uint16(xCondDataSize), 3725, 3731, 0,\n\t/*3725*/ uint16(xSetOp), uint16(CMOVS),\n\t/*3727*/ uint16(xReadSlashR),\n\t/*3728*/ uint16(xArgR16),\n\t/*3729*/ uint16(xArgRM16),\n\t/*3730*/ uint16(xMatch),\n\t/*3731*/ uint16(xSetOp), uint16(CMOVS),\n\t/*3733*/ uint16(xReadSlashR),\n\t/*3734*/ uint16(xArgR32),\n\t/*3735*/ uint16(xArgRM32),\n\t/*3736*/ uint16(xMatch),\n\t/*3737*/ uint16(xCondDataSize), 3725, 3731, 3741,\n\t/*3741*/ uint16(xSetOp), uint16(CMOVS),\n\t/*3743*/ uint16(xReadSlashR),\n\t/*3744*/ uint16(xArgR64),\n\t/*3745*/ uint16(xArgRM64),\n\t/*3746*/ uint16(xMatch),\n\t/*3747*/ uint16(xCondIs64), 3750, 3766,\n\t/*3750*/ uint16(xCondDataSize), 3754, 3760, 0,\n\t/*3754*/ uint16(xSetOp), uint16(CMOVNS),\n\t/*3756*/ uint16(xReadSlashR),\n\t/*3757*/ uint16(xArgR16),\n\t/*3758*/ uint16(xArgRM16),\n\t/*3759*/ uint16(xMatch),\n\t/*3760*/ uint16(xSetOp), uint16(CMOVNS),\n\t/*3762*/ uint16(xReadSlashR),\n\t/*3763*/ uint16(xArgR32),\n\t/*3764*/ uint16(xArgRM32),\n\t/*3765*/ uint16(xMatch),\n\t/*3766*/ uint16(xCondDataSize), 3754, 3760, 3770,\n\t/*3770*/ uint16(xSetOp), uint16(CMOVNS),\n\t/*3772*/ uint16(xReadSlashR),\n\t/*3773*/ uint16(xArgR64),\n\t/*3774*/ uint16(xArgRM64),\n\t/*3775*/ uint16(xMatch),\n\t/*3776*/ uint16(xCondIs64), 3779, 3795,\n\t/*3779*/ uint16(xCondDataSize), 3783, 3789, 0,\n\t/*3783*/ uint16(xSetOp), uint16(CMOVP),\n\t/*3785*/ uint16(xReadSlashR),\n\t/*3786*/ uint16(xArgR16),\n\t/*3787*/ uint16(xArgRM16),\n\t/*3788*/ uint16(xMatch),\n\t/*3789*/ uint16(xSetOp), uint16(CMOVP),\n\t/*3791*/ uint16(xReadSlashR),\n\t/*3792*/ uint16(xArgR32),\n\t/*3793*/ uint16(xArgRM32),\n\t/*3794*/ uint16(xMatch),\n\t/*3795*/ uint16(xCondDataSize), 3783, 3789, 3799,\n\t/*3799*/ uint16(xSetOp), uint16(CMOVP),\n\t/*3801*/ uint16(xReadSlashR),\n\t/*3802*/ uint16(xArgR64),\n\t/*3803*/ uint16(xArgRM64),\n\t/*3804*/ uint16(xMatch),\n\t/*3805*/ uint16(xCondIs64), 3808, 3824,\n\t/*3808*/ uint16(xCondDataSize), 3812, 3818, 0,\n\t/*3812*/ uint16(xSetOp), uint16(CMOVNP),\n\t/*3814*/ uint16(xReadSlashR),\n\t/*3815*/ uint16(xArgR16),\n\t/*3816*/ uint16(xArgRM16),\n\t/*3817*/ uint16(xMatch),\n\t/*3818*/ uint16(xSetOp), uint16(CMOVNP),\n\t/*3820*/ uint16(xReadSlashR),\n\t/*3821*/ uint16(xArgR32),\n\t/*3822*/ uint16(xArgRM32),\n\t/*3823*/ uint16(xMatch),\n\t/*3824*/ uint16(xCondDataSize), 3812, 3818, 3828,\n\t/*3828*/ uint16(xSetOp), uint16(CMOVNP),\n\t/*3830*/ uint16(xReadSlashR),\n\t/*3831*/ uint16(xArgR64),\n\t/*3832*/ uint16(xArgRM64),\n\t/*3833*/ uint16(xMatch),\n\t/*3834*/ uint16(xCondIs64), 3837, 3853,\n\t/*3837*/ uint16(xCondDataSize), 3841, 3847, 0,\n\t/*3841*/ uint16(xSetOp), uint16(CMOVL),\n\t/*3843*/ uint16(xReadSlashR),\n\t/*3844*/ uint16(xArgR16),\n\t/*3845*/ uint16(xArgRM16),\n\t/*3846*/ uint16(xMatch),\n\t/*3847*/ uint16(xSetOp), uint16(CMOVL),\n\t/*3849*/ uint16(xReadSlashR),\n\t/*3850*/ uint16(xArgR32),\n\t/*3851*/ uint16(xArgRM32),\n\t/*3852*/ uint16(xMatch),\n\t/*3853*/ uint16(xCondDataSize), 3841, 3847, 3857,\n\t/*3857*/ uint16(xSetOp), uint16(CMOVL),\n\t/*3859*/ uint16(xReadSlashR),\n\t/*3860*/ uint16(xArgR64),\n\t/*3861*/ uint16(xArgRM64),\n\t/*3862*/ uint16(xMatch),\n\t/*3863*/ uint16(xCondIs64), 3866, 3882,\n\t/*3866*/ uint16(xCondDataSize), 3870, 3876, 0,\n\t/*3870*/ uint16(xSetOp), uint16(CMOVGE),\n\t/*3872*/ uint16(xReadSlashR),\n\t/*3873*/ uint16(xArgR16),\n\t/*3874*/ uint16(xArgRM16),\n\t/*3875*/ uint16(xMatch),\n\t/*3876*/ uint16(xSetOp), uint16(CMOVGE),\n\t/*3878*/ uint16(xReadSlashR),\n\t/*3879*/ uint16(xArgR32),\n\t/*3880*/ uint16(xArgRM32),\n\t/*3881*/ uint16(xMatch),\n\t/*3882*/ uint16(xCondDataSize), 3870, 3876, 3886,\n\t/*3886*/ uint16(xSetOp), uint16(CMOVGE),\n\t/*3888*/ uint16(xReadSlashR),\n\t/*3889*/ uint16(xArgR64),\n\t/*3890*/ uint16(xArgRM64),\n\t/*3891*/ uint16(xMatch),\n\t/*3892*/ uint16(xCondIs64), 3895, 3911,\n\t/*3895*/ uint16(xCondDataSize), 3899, 3905, 0,\n\t/*3899*/ uint16(xSetOp), uint16(CMOVLE),\n\t/*3901*/ uint16(xReadSlashR),\n\t/*3902*/ uint16(xArgR16),\n\t/*3903*/ uint16(xArgRM16),\n\t/*3904*/ uint16(xMatch),\n\t/*3905*/ uint16(xSetOp), uint16(CMOVLE),\n\t/*3907*/ uint16(xReadSlashR),\n\t/*3908*/ uint16(xArgR32),\n\t/*3909*/ uint16(xArgRM32),\n\t/*3910*/ uint16(xMatch),\n\t/*3911*/ uint16(xCondDataSize), 3899, 3905, 3915,\n\t/*3915*/ uint16(xSetOp), uint16(CMOVLE),\n\t/*3917*/ uint16(xReadSlashR),\n\t/*3918*/ uint16(xArgR64),\n\t/*3919*/ uint16(xArgRM64),\n\t/*3920*/ uint16(xMatch),\n\t/*3921*/ uint16(xCondIs64), 3924, 3940,\n\t/*3924*/ uint16(xCondDataSize), 3928, 3934, 0,\n\t/*3928*/ uint16(xSetOp), uint16(CMOVG),\n\t/*3930*/ uint16(xReadSlashR),\n\t/*3931*/ uint16(xArgR16),\n\t/*3932*/ uint16(xArgRM16),\n\t/*3933*/ uint16(xMatch),\n\t/*3934*/ uint16(xSetOp), uint16(CMOVG),\n\t/*3936*/ uint16(xReadSlashR),\n\t/*3937*/ uint16(xArgR32),\n\t/*3938*/ uint16(xArgRM32),\n\t/*3939*/ uint16(xMatch),\n\t/*3940*/ uint16(xCondDataSize), 3928, 3934, 3944,\n\t/*3944*/ uint16(xSetOp), uint16(CMOVG),\n\t/*3946*/ uint16(xReadSlashR),\n\t/*3947*/ uint16(xArgR64),\n\t/*3948*/ uint16(xArgRM64),\n\t/*3949*/ uint16(xMatch),\n\t/*3950*/ uint16(xCondPrefix), 2,\n\t0x66, 3962,\n\t0x0, 3956,\n\t/*3956*/ uint16(xSetOp), uint16(MOVMSKPS),\n\t/*3958*/ uint16(xReadSlashR),\n\t/*3959*/ uint16(xArgR32),\n\t/*3960*/ uint16(xArgXmm2),\n\t/*3961*/ uint16(xMatch),\n\t/*3962*/ uint16(xSetOp), uint16(MOVMSKPD),\n\t/*3964*/ uint16(xReadSlashR),\n\t/*3965*/ uint16(xArgR32),\n\t/*3966*/ uint16(xArgXmm2),\n\t/*3967*/ uint16(xMatch),\n\t/*3968*/ uint16(xCondPrefix), 4,\n\t0xF3, 3996,\n\t0xF2, 3990,\n\t0x66, 3984,\n\t0x0, 3978,\n\t/*3978*/ uint16(xSetOp), uint16(SQRTPS),\n\t/*3980*/ uint16(xReadSlashR),\n\t/*3981*/ uint16(xArgXmm1),\n\t/*3982*/ uint16(xArgXmm2M128),\n\t/*3983*/ uint16(xMatch),\n\t/*3984*/ uint16(xSetOp), uint16(SQRTPD),\n\t/*3986*/ uint16(xReadSlashR),\n\t/*3987*/ uint16(xArgXmm1),\n\t/*3988*/ uint16(xArgXmm2M128),\n\t/*3989*/ uint16(xMatch),\n\t/*3990*/ uint16(xSetOp), uint16(SQRTSD),\n\t/*3992*/ uint16(xReadSlashR),\n\t/*3993*/ uint16(xArgXmm1),\n\t/*3994*/ uint16(xArgXmm2M64),\n\t/*3995*/ uint16(xMatch),\n\t/*3996*/ uint16(xSetOp), uint16(SQRTSS),\n\t/*3998*/ uint16(xReadSlashR),\n\t/*3999*/ uint16(xArgXmm1),\n\t/*4000*/ uint16(xArgXmm2M32),\n\t/*4001*/ uint16(xMatch),\n\t/*4002*/ uint16(xCondPrefix), 2,\n\t0xF3, 4014,\n\t0x0, 4008,\n\t/*4008*/ uint16(xSetOp), uint16(RSQRTPS),\n\t/*4010*/ uint16(xReadSlashR),\n\t/*4011*/ uint16(xArgXmm1),\n\t/*4012*/ uint16(xArgXmm2M128),\n\t/*4013*/ uint16(xMatch),\n\t/*4014*/ uint16(xSetOp), uint16(RSQRTSS),\n\t/*4016*/ uint16(xReadSlashR),\n\t/*4017*/ uint16(xArgXmm1),\n\t/*4018*/ uint16(xArgXmm2M32),\n\t/*4019*/ uint16(xMatch),\n\t/*4020*/ uint16(xCondPrefix), 2,\n\t0xF3, 4032,\n\t0x0, 4026,\n\t/*4026*/ uint16(xSetOp), uint16(RCPPS),\n\t/*4028*/ uint16(xReadSlashR),\n\t/*4029*/ uint16(xArgXmm1),\n\t/*4030*/ uint16(xArgXmm2M128),\n\t/*4031*/ uint16(xMatch),\n\t/*4032*/ uint16(xSetOp), uint16(RCPSS),\n\t/*4034*/ uint16(xReadSlashR),\n\t/*4035*/ uint16(xArgXmm1),\n\t/*4036*/ uint16(xArgXmm2M32),\n\t/*4037*/ uint16(xMatch),\n\t/*4038*/ uint16(xCondPrefix), 2,\n\t0x66, 4050,\n\t0x0, 4044,\n\t/*4044*/ uint16(xSetOp), uint16(ANDPS),\n\t/*4046*/ uint16(xReadSlashR),\n\t/*4047*/ uint16(xArgXmm1),\n\t/*4048*/ uint16(xArgXmm2M128),\n\t/*4049*/ uint16(xMatch),\n\t/*4050*/ uint16(xSetOp), uint16(ANDPD),\n\t/*4052*/ uint16(xReadSlashR),\n\t/*4053*/ uint16(xArgXmm1),\n\t/*4054*/ uint16(xArgXmm2M128),\n\t/*4055*/ uint16(xMatch),\n\t/*4056*/ uint16(xCondPrefix), 2,\n\t0x66, 4068,\n\t0x0, 4062,\n\t/*4062*/ uint16(xSetOp), uint16(ANDNPS),\n\t/*4064*/ uint16(xReadSlashR),\n\t/*4065*/ uint16(xArgXmm1),\n\t/*4066*/ uint16(xArgXmm2M128),\n\t/*4067*/ uint16(xMatch),\n\t/*4068*/ uint16(xSetOp), uint16(ANDNPD),\n\t/*4070*/ uint16(xReadSlashR),\n\t/*4071*/ uint16(xArgXmm1),\n\t/*4072*/ uint16(xArgXmm2M128),\n\t/*4073*/ uint16(xMatch),\n\t/*4074*/ uint16(xCondPrefix), 2,\n\t0x66, 4086,\n\t0x0, 4080,\n\t/*4080*/ uint16(xSetOp), uint16(ORPS),\n\t/*4082*/ uint16(xReadSlashR),\n\t/*4083*/ uint16(xArgXmm1),\n\t/*4084*/ uint16(xArgXmm2M128),\n\t/*4085*/ uint16(xMatch),\n\t/*4086*/ uint16(xSetOp), uint16(ORPD),\n\t/*4088*/ uint16(xReadSlashR),\n\t/*4089*/ uint16(xArgXmm1),\n\t/*4090*/ uint16(xArgXmm2M128),\n\t/*4091*/ uint16(xMatch),\n\t/*4092*/ uint16(xCondPrefix), 2,\n\t0x66, 4104,\n\t0x0, 4098,\n\t/*4098*/ uint16(xSetOp), uint16(XORPS),\n\t/*4100*/ uint16(xReadSlashR),\n\t/*4101*/ uint16(xArgXmm1),\n\t/*4102*/ uint16(xArgXmm2M128),\n\t/*4103*/ uint16(xMatch),\n\t/*4104*/ uint16(xSetOp), uint16(XORPD),\n\t/*4106*/ uint16(xReadSlashR),\n\t/*4107*/ uint16(xArgXmm1),\n\t/*4108*/ uint16(xArgXmm2M128),\n\t/*4109*/ uint16(xMatch),\n\t/*4110*/ uint16(xCondPrefix), 4,\n\t0xF3, 4138,\n\t0xF2, 4132,\n\t0x66, 4126,\n\t0x0, 4120,\n\t/*4120*/ uint16(xSetOp), uint16(ADDPS),\n\t/*4122*/ uint16(xReadSlashR),\n\t/*4123*/ uint16(xArgXmm1),\n\t/*4124*/ uint16(xArgXmm2M128),\n\t/*4125*/ uint16(xMatch),\n\t/*4126*/ uint16(xSetOp), uint16(ADDPD),\n\t/*4128*/ uint16(xReadSlashR),\n\t/*4129*/ uint16(xArgXmm1),\n\t/*4130*/ uint16(xArgXmm2M128),\n\t/*4131*/ uint16(xMatch),\n\t/*4132*/ uint16(xSetOp), uint16(ADDSD),\n\t/*4134*/ uint16(xReadSlashR),\n\t/*4135*/ uint16(xArgXmm1),\n\t/*4136*/ uint16(xArgXmm2M64),\n\t/*4137*/ uint16(xMatch),\n\t/*4138*/ uint16(xSetOp), uint16(ADDSS),\n\t/*4140*/ uint16(xReadSlashR),\n\t/*4141*/ uint16(xArgXmm1),\n\t/*4142*/ uint16(xArgXmm2M32),\n\t/*4143*/ uint16(xMatch),\n\t/*4144*/ uint16(xCondPrefix), 4,\n\t0xF3, 4172,\n\t0xF2, 4166,\n\t0x66, 4160,\n\t0x0, 4154,\n\t/*4154*/ uint16(xSetOp), uint16(MULPS),\n\t/*4156*/ uint16(xReadSlashR),\n\t/*4157*/ uint16(xArgXmm1),\n\t/*4158*/ uint16(xArgXmm2M128),\n\t/*4159*/ uint16(xMatch),\n\t/*4160*/ uint16(xSetOp), uint16(MULPD),\n\t/*4162*/ uint16(xReadSlashR),\n\t/*4163*/ uint16(xArgXmm1),\n\t/*4164*/ uint16(xArgXmm2M128),\n\t/*4165*/ uint16(xMatch),\n\t/*4166*/ uint16(xSetOp), uint16(MULSD),\n\t/*4168*/ uint16(xReadSlashR),\n\t/*4169*/ uint16(xArgXmm1),\n\t/*4170*/ uint16(xArgXmm2M64),\n\t/*4171*/ uint16(xMatch),\n\t/*4172*/ uint16(xSetOp), uint16(MULSS),\n\t/*4174*/ uint16(xReadSlashR),\n\t/*4175*/ uint16(xArgXmm1),\n\t/*4176*/ uint16(xArgXmm2M32),\n\t/*4177*/ uint16(xMatch),\n\t/*4178*/ uint16(xCondPrefix), 4,\n\t0xF3, 4206,\n\t0xF2, 4200,\n\t0x66, 4194,\n\t0x0, 4188,\n\t/*4188*/ uint16(xSetOp), uint16(CVTPS2PD),\n\t/*4190*/ uint16(xReadSlashR),\n\t/*4191*/ uint16(xArgXmm1),\n\t/*4192*/ uint16(xArgXmm2M64),\n\t/*4193*/ uint16(xMatch),\n\t/*4194*/ uint16(xSetOp), uint16(CVTPD2PS),\n\t/*4196*/ uint16(xReadSlashR),\n\t/*4197*/ uint16(xArgXmm1),\n\t/*4198*/ uint16(xArgXmm2M128),\n\t/*4199*/ uint16(xMatch),\n\t/*4200*/ uint16(xSetOp), uint16(CVTSD2SS),\n\t/*4202*/ uint16(xReadSlashR),\n\t/*4203*/ uint16(xArgXmm1),\n\t/*4204*/ uint16(xArgXmm2M64),\n\t/*4205*/ uint16(xMatch),\n\t/*4206*/ uint16(xSetOp), uint16(CVTSS2SD),\n\t/*4208*/ uint16(xReadSlashR),\n\t/*4209*/ uint16(xArgXmm1),\n\t/*4210*/ uint16(xArgXmm2M32),\n\t/*4211*/ uint16(xMatch),\n\t/*4212*/ uint16(xCondPrefix), 3,\n\t0xF3, 4232,\n\t0x66, 4226,\n\t0x0, 4220,\n\t/*4220*/ uint16(xSetOp), uint16(CVTDQ2PS),\n\t/*4222*/ uint16(xReadSlashR),\n\t/*4223*/ uint16(xArgXmm1),\n\t/*4224*/ uint16(xArgXmm2M128),\n\t/*4225*/ uint16(xMatch),\n\t/*4226*/ uint16(xSetOp), uint16(CVTPS2DQ),\n\t/*4228*/ uint16(xReadSlashR),\n\t/*4229*/ uint16(xArgXmm1),\n\t/*4230*/ uint16(xArgXmm2M128),\n\t/*4231*/ uint16(xMatch),\n\t/*4232*/ uint16(xSetOp), uint16(CVTTPS2DQ),\n\t/*4234*/ uint16(xReadSlashR),\n\t/*4235*/ uint16(xArgXmm1),\n\t/*4236*/ uint16(xArgXmm2M128),\n\t/*4237*/ uint16(xMatch),\n\t/*4238*/ uint16(xCondPrefix), 4,\n\t0xF3, 4266,\n\t0xF2, 4260,\n\t0x66, 4254,\n\t0x0, 4248,\n\t/*4248*/ uint16(xSetOp), uint16(SUBPS),\n\t/*4250*/ uint16(xReadSlashR),\n\t/*4251*/ uint16(xArgXmm1),\n\t/*4252*/ uint16(xArgXmm2M128),\n\t/*4253*/ uint16(xMatch),\n\t/*4254*/ uint16(xSetOp), uint16(SUBPD),\n\t/*4256*/ uint16(xReadSlashR),\n\t/*4257*/ uint16(xArgXmm1),\n\t/*4258*/ uint16(xArgXmm2M128),\n\t/*4259*/ uint16(xMatch),\n\t/*4260*/ uint16(xSetOp), uint16(SUBSD),\n\t/*4262*/ uint16(xReadSlashR),\n\t/*4263*/ uint16(xArgXmm1),\n\t/*4264*/ uint16(xArgXmm2M64),\n\t/*4265*/ uint16(xMatch),\n\t/*4266*/ uint16(xSetOp), uint16(SUBSS),\n\t/*4268*/ uint16(xReadSlashR),\n\t/*4269*/ uint16(xArgXmm1),\n\t/*4270*/ uint16(xArgXmm2M32),\n\t/*4271*/ uint16(xMatch),\n\t/*4272*/ uint16(xCondPrefix), 4,\n\t0xF3, 4300,\n\t0xF2, 4294,\n\t0x66, 4288,\n\t0x0, 4282,\n\t/*4282*/ uint16(xSetOp), uint16(MINPS),\n\t/*4284*/ uint16(xReadSlashR),\n\t/*4285*/ uint16(xArgXmm1),\n\t/*4286*/ uint16(xArgXmm2M128),\n\t/*4287*/ uint16(xMatch),\n\t/*4288*/ uint16(xSetOp), uint16(MINPD),\n\t/*4290*/ uint16(xReadSlashR),\n\t/*4291*/ uint16(xArgXmm1),\n\t/*4292*/ uint16(xArgXmm2M128),\n\t/*4293*/ uint16(xMatch),\n\t/*4294*/ uint16(xSetOp), uint16(MINSD),\n\t/*4296*/ uint16(xReadSlashR),\n\t/*4297*/ uint16(xArgXmm1),\n\t/*4298*/ uint16(xArgXmm2M64),\n\t/*4299*/ uint16(xMatch),\n\t/*4300*/ uint16(xSetOp), uint16(MINSS),\n\t/*4302*/ uint16(xReadSlashR),\n\t/*4303*/ uint16(xArgXmm1),\n\t/*4304*/ uint16(xArgXmm2M32),\n\t/*4305*/ uint16(xMatch),\n\t/*4306*/ uint16(xCondPrefix), 4,\n\t0xF3, 4334,\n\t0xF2, 4328,\n\t0x66, 4322,\n\t0x0, 4316,\n\t/*4316*/ uint16(xSetOp), uint16(DIVPS),\n\t/*4318*/ uint16(xReadSlashR),\n\t/*4319*/ uint16(xArgXmm1),\n\t/*4320*/ uint16(xArgXmm2M128),\n\t/*4321*/ uint16(xMatch),\n\t/*4322*/ uint16(xSetOp), uint16(DIVPD),\n\t/*4324*/ uint16(xReadSlashR),\n\t/*4325*/ uint16(xArgXmm1),\n\t/*4326*/ uint16(xArgXmm2M128),\n\t/*4327*/ uint16(xMatch),\n\t/*4328*/ uint16(xSetOp), uint16(DIVSD),\n\t/*4330*/ uint16(xReadSlashR),\n\t/*4331*/ uint16(xArgXmm1),\n\t/*4332*/ uint16(xArgXmm2M64),\n\t/*4333*/ uint16(xMatch),\n\t/*4334*/ uint16(xSetOp), uint16(DIVSS),\n\t/*4336*/ uint16(xReadSlashR),\n\t/*4337*/ uint16(xArgXmm1),\n\t/*4338*/ uint16(xArgXmm2M32),\n\t/*4339*/ uint16(xMatch),\n\t/*4340*/ uint16(xCondPrefix), 4,\n\t0xF3, 4368,\n\t0xF2, 4362,\n\t0x66, 4356,\n\t0x0, 4350,\n\t/*4350*/ uint16(xSetOp), uint16(MAXPS),\n\t/*4352*/ uint16(xReadSlashR),\n\t/*4353*/ uint16(xArgXmm1),\n\t/*4354*/ uint16(xArgXmm2M128),\n\t/*4355*/ uint16(xMatch),\n\t/*4356*/ uint16(xSetOp), uint16(MAXPD),\n\t/*4358*/ uint16(xReadSlashR),\n\t/*4359*/ uint16(xArgXmm1),\n\t/*4360*/ uint16(xArgXmm2M128),\n\t/*4361*/ uint16(xMatch),\n\t/*4362*/ uint16(xSetOp), uint16(MAXSD),\n\t/*4364*/ uint16(xReadSlashR),\n\t/*4365*/ uint16(xArgXmm1),\n\t/*4366*/ uint16(xArgXmm2M64),\n\t/*4367*/ uint16(xMatch),\n\t/*4368*/ uint16(xSetOp), uint16(MAXSS),\n\t/*4370*/ uint16(xReadSlashR),\n\t/*4371*/ uint16(xArgXmm1),\n\t/*4372*/ uint16(xArgXmm2M32),\n\t/*4373*/ uint16(xMatch),\n\t/*4374*/ uint16(xCondPrefix), 2,\n\t0x66, 4386,\n\t0x0, 4380,\n\t/*4380*/ uint16(xSetOp), uint16(PUNPCKLBW),\n\t/*4382*/ uint16(xReadSlashR),\n\t/*4383*/ uint16(xArgMm),\n\t/*4384*/ uint16(xArgMmM32),\n\t/*4385*/ uint16(xMatch),\n\t/*4386*/ uint16(xSetOp), uint16(PUNPCKLBW),\n\t/*4388*/ uint16(xReadSlashR),\n\t/*4389*/ uint16(xArgXmm1),\n\t/*4390*/ uint16(xArgXmm2M128),\n\t/*4391*/ uint16(xMatch),\n\t/*4392*/ uint16(xCondPrefix), 2,\n\t0x66, 4404,\n\t0x0, 4398,\n\t/*4398*/ uint16(xSetOp), uint16(PUNPCKLWD),\n\t/*4400*/ uint16(xReadSlashR),\n\t/*4401*/ uint16(xArgMm),\n\t/*4402*/ uint16(xArgMmM32),\n\t/*4403*/ uint16(xMatch),\n\t/*4404*/ uint16(xSetOp), uint16(PUNPCKLWD),\n\t/*4406*/ uint16(xReadSlashR),\n\t/*4407*/ uint16(xArgXmm1),\n\t/*4408*/ uint16(xArgXmm2M128),\n\t/*4409*/ uint16(xMatch),\n\t/*4410*/ uint16(xCondPrefix), 2,\n\t0x66, 4422,\n\t0x0, 4416,\n\t/*4416*/ uint16(xSetOp), uint16(PUNPCKLDQ),\n\t/*4418*/ uint16(xReadSlashR),\n\t/*4419*/ uint16(xArgMm),\n\t/*4420*/ uint16(xArgMmM32),\n\t/*4421*/ uint16(xMatch),\n\t/*4422*/ uint16(xSetOp), uint16(PUNPCKLDQ),\n\t/*4424*/ uint16(xReadSlashR),\n\t/*4425*/ uint16(xArgXmm1),\n\t/*4426*/ uint16(xArgXmm2M128),\n\t/*4427*/ uint16(xMatch),\n\t/*4428*/ uint16(xCondPrefix), 2,\n\t0x66, 4440,\n\t0x0, 4434,\n\t/*4434*/ uint16(xSetOp), uint16(PACKSSWB),\n\t/*4436*/ uint16(xReadSlashR),\n\t/*4437*/ uint16(xArgMm1),\n\t/*4438*/ uint16(xArgMm2M64),\n\t/*4439*/ uint16(xMatch),\n\t/*4440*/ uint16(xSetOp), uint16(PACKSSWB),\n\t/*4442*/ uint16(xReadSlashR),\n\t/*4443*/ uint16(xArgXmm1),\n\t/*4444*/ uint16(xArgXmm2M128),\n\t/*4445*/ uint16(xMatch),\n\t/*4446*/ uint16(xCondPrefix), 2,\n\t0x66, 4458,\n\t0x0, 4452,\n\t/*4452*/ uint16(xSetOp), uint16(PCMPGTB),\n\t/*4454*/ uint16(xReadSlashR),\n\t/*4455*/ uint16(xArgMm),\n\t/*4456*/ uint16(xArgMmM64),\n\t/*4457*/ uint16(xMatch),\n\t/*4458*/ uint16(xSetOp), uint16(PCMPGTB),\n\t/*4460*/ uint16(xReadSlashR),\n\t/*4461*/ uint16(xArgXmm1),\n\t/*4462*/ uint16(xArgXmm2M128),\n\t/*4463*/ uint16(xMatch),\n\t/*4464*/ uint16(xCondPrefix), 2,\n\t0x66, 4476,\n\t0x0, 4470,\n\t/*4470*/ uint16(xSetOp), uint16(PCMPGTW),\n\t/*4472*/ uint16(xReadSlashR),\n\t/*4473*/ uint16(xArgMm),\n\t/*4474*/ uint16(xArgMmM64),\n\t/*4475*/ uint16(xMatch),\n\t/*4476*/ uint16(xSetOp), uint16(PCMPGTW),\n\t/*4478*/ uint16(xReadSlashR),\n\t/*4479*/ uint16(xArgXmm1),\n\t/*4480*/ uint16(xArgXmm2M128),\n\t/*4481*/ uint16(xMatch),\n\t/*4482*/ uint16(xCondPrefix), 2,\n\t0x66, 4494,\n\t0x0, 4488,\n\t/*4488*/ uint16(xSetOp), uint16(PCMPGTD),\n\t/*4490*/ uint16(xReadSlashR),\n\t/*4491*/ uint16(xArgMm),\n\t/*4492*/ uint16(xArgMmM64),\n\t/*4493*/ uint16(xMatch),\n\t/*4494*/ uint16(xSetOp), uint16(PCMPGTD),\n\t/*4496*/ uint16(xReadSlashR),\n\t/*4497*/ uint16(xArgXmm1),\n\t/*4498*/ uint16(xArgXmm2M128),\n\t/*4499*/ uint16(xMatch),\n\t/*4500*/ uint16(xCondPrefix), 2,\n\t0x66, 4512,\n\t0x0, 4506,\n\t/*4506*/ uint16(xSetOp), uint16(PACKUSWB),\n\t/*4508*/ uint16(xReadSlashR),\n\t/*4509*/ uint16(xArgMm),\n\t/*4510*/ uint16(xArgMmM64),\n\t/*4511*/ uint16(xMatch),\n\t/*4512*/ uint16(xSetOp), uint16(PACKUSWB),\n\t/*4514*/ uint16(xReadSlashR),\n\t/*4515*/ uint16(xArgXmm1),\n\t/*4516*/ uint16(xArgXmm2M128),\n\t/*4517*/ uint16(xMatch),\n\t/*4518*/ uint16(xCondPrefix), 2,\n\t0x66, 4530,\n\t0x0, 4524,\n\t/*4524*/ uint16(xSetOp), uint16(PUNPCKHBW),\n\t/*4526*/ uint16(xReadSlashR),\n\t/*4527*/ uint16(xArgMm),\n\t/*4528*/ uint16(xArgMmM64),\n\t/*4529*/ uint16(xMatch),\n\t/*4530*/ uint16(xSetOp), uint16(PUNPCKHBW),\n\t/*4532*/ uint16(xReadSlashR),\n\t/*4533*/ uint16(xArgXmm1),\n\t/*4534*/ uint16(xArgXmm2M128),\n\t/*4535*/ uint16(xMatch),\n\t/*4536*/ uint16(xCondPrefix), 2,\n\t0x66, 4548,\n\t0x0, 4542,\n\t/*4542*/ uint16(xSetOp), uint16(PUNPCKHWD),\n\t/*4544*/ uint16(xReadSlashR),\n\t/*4545*/ uint16(xArgMm),\n\t/*4546*/ uint16(xArgMmM64),\n\t/*4547*/ uint16(xMatch),\n\t/*4548*/ uint16(xSetOp), uint16(PUNPCKHWD),\n\t/*4550*/ uint16(xReadSlashR),\n\t/*4551*/ uint16(xArgXmm1),\n\t/*4552*/ uint16(xArgXmm2M128),\n\t/*4553*/ uint16(xMatch),\n\t/*4554*/ uint16(xCondPrefix), 2,\n\t0x66, 4566,\n\t0x0, 4560,\n\t/*4560*/ uint16(xSetOp), uint16(PUNPCKHDQ),\n\t/*4562*/ uint16(xReadSlashR),\n\t/*4563*/ uint16(xArgMm),\n\t/*4564*/ uint16(xArgMmM64),\n\t/*4565*/ uint16(xMatch),\n\t/*4566*/ uint16(xSetOp), uint16(PUNPCKHDQ),\n\t/*4568*/ uint16(xReadSlashR),\n\t/*4569*/ uint16(xArgXmm1),\n\t/*4570*/ uint16(xArgXmm2M128),\n\t/*4571*/ uint16(xMatch),\n\t/*4572*/ uint16(xCondPrefix), 2,\n\t0x66, 4584,\n\t0x0, 4578,\n\t/*4578*/ uint16(xSetOp), uint16(PACKSSDW),\n\t/*4580*/ uint16(xReadSlashR),\n\t/*4581*/ uint16(xArgMm1),\n\t/*4582*/ uint16(xArgMm2M64),\n\t/*4583*/ uint16(xMatch),\n\t/*4584*/ uint16(xSetOp), uint16(PACKSSDW),\n\t/*4586*/ uint16(xReadSlashR),\n\t/*4587*/ uint16(xArgXmm1),\n\t/*4588*/ uint16(xArgXmm2M128),\n\t/*4589*/ uint16(xMatch),\n\t/*4590*/ uint16(xCondPrefix), 1,\n\t0x66, 4594,\n\t/*4594*/ uint16(xSetOp), uint16(PUNPCKLQDQ),\n\t/*4596*/ uint16(xReadSlashR),\n\t/*4597*/ uint16(xArgXmm1),\n\t/*4598*/ uint16(xArgXmm2M128),\n\t/*4599*/ uint16(xMatch),\n\t/*4600*/ uint16(xCondPrefix), 1,\n\t0x66, 4604,\n\t/*4604*/ uint16(xSetOp), uint16(PUNPCKHQDQ),\n\t/*4606*/ uint16(xReadSlashR),\n\t/*4607*/ uint16(xArgXmm1),\n\t/*4608*/ uint16(xArgXmm2M128),\n\t/*4609*/ uint16(xMatch),\n\t/*4610*/ uint16(xCondIs64), 4613, 4651,\n\t/*4613*/ uint16(xCondPrefix), 2,\n\t0x66, 4635,\n\t0x0, 4619,\n\t/*4619*/ uint16(xCondDataSize), 4623, 4629, 0,\n\t/*4623*/ uint16(xSetOp), uint16(MOVD),\n\t/*4625*/ uint16(xReadSlashR),\n\t/*4626*/ uint16(xArgMm),\n\t/*4627*/ uint16(xArgRM32),\n\t/*4628*/ uint16(xMatch),\n\t/*4629*/ uint16(xSetOp), uint16(MOVD),\n\t/*4631*/ uint16(xReadSlashR),\n\t/*4632*/ uint16(xArgMm),\n\t/*4633*/ uint16(xArgRM32),\n\t/*4634*/ uint16(xMatch),\n\t/*4635*/ uint16(xCondDataSize), 4639, 4645, 0,\n\t/*4639*/ uint16(xSetOp), uint16(MOVD),\n\t/*4641*/ uint16(xReadSlashR),\n\t/*4642*/ uint16(xArgXmm),\n\t/*4643*/ uint16(xArgRM32),\n\t/*4644*/ uint16(xMatch),\n\t/*4645*/ uint16(xSetOp), uint16(MOVD),\n\t/*4647*/ uint16(xReadSlashR),\n\t/*4648*/ uint16(xArgXmm),\n\t/*4649*/ uint16(xArgRM32),\n\t/*4650*/ uint16(xMatch),\n\t/*4651*/ uint16(xCondPrefix), 2,\n\t0x66, 4667,\n\t0x0, 4657,\n\t/*4657*/ uint16(xCondDataSize), 4623, 4629, 4661,\n\t/*4661*/ uint16(xSetOp), uint16(MOVQ),\n\t/*4663*/ uint16(xReadSlashR),\n\t/*4664*/ uint16(xArgMm),\n\t/*4665*/ uint16(xArgRM64),\n\t/*4666*/ uint16(xMatch),\n\t/*4667*/ uint16(xCondDataSize), 4639, 4645, 4671,\n\t/*4671*/ uint16(xSetOp), uint16(MOVQ),\n\t/*4673*/ uint16(xReadSlashR),\n\t/*4674*/ uint16(xArgXmm),\n\t/*4675*/ uint16(xArgRM64),\n\t/*4676*/ uint16(xMatch),\n\t/*4677*/ uint16(xCondPrefix), 3,\n\t0xF3, 4697,\n\t0x66, 4691,\n\t0x0, 4685,\n\t/*4685*/ uint16(xSetOp), uint16(MOVQ),\n\t/*4687*/ uint16(xReadSlashR),\n\t/*4688*/ uint16(xArgMm),\n\t/*4689*/ uint16(xArgMmM64),\n\t/*4690*/ uint16(xMatch),\n\t/*4691*/ uint16(xSetOp), uint16(MOVDQA),\n\t/*4693*/ uint16(xReadSlashR),\n\t/*4694*/ uint16(xArgXmm1),\n\t/*4695*/ uint16(xArgXmm2M128),\n\t/*4696*/ uint16(xMatch),\n\t/*4697*/ uint16(xSetOp), uint16(MOVDQU),\n\t/*4699*/ uint16(xReadSlashR),\n\t/*4700*/ uint16(xArgXmm1),\n\t/*4701*/ uint16(xArgXmm2M128),\n\t/*4702*/ uint16(xMatch),\n\t/*4703*/ uint16(xCondPrefix), 4,\n\t0xF3, 4737,\n\t0xF2, 4729,\n\t0x66, 4721,\n\t0x0, 4713,\n\t/*4713*/ uint16(xSetOp), uint16(PSHUFW),\n\t/*4715*/ uint16(xReadSlashR),\n\t/*4716*/ uint16(xReadIb),\n\t/*4717*/ uint16(xArgMm1),\n\t/*4718*/ uint16(xArgMm2M64),\n\t/*4719*/ uint16(xArgImm8u),\n\t/*4720*/ uint16(xMatch),\n\t/*4721*/ uint16(xSetOp), uint16(PSHUFD),\n\t/*4723*/ uint16(xReadSlashR),\n\t/*4724*/ uint16(xReadIb),\n\t/*4725*/ uint16(xArgXmm1),\n\t/*4726*/ uint16(xArgXmm2M128),\n\t/*4727*/ uint16(xArgImm8u),\n\t/*4728*/ uint16(xMatch),\n\t/*4729*/ uint16(xSetOp), uint16(PSHUFLW),\n\t/*4731*/ uint16(xReadSlashR),\n\t/*4732*/ uint16(xReadIb),\n\t/*4733*/ uint16(xArgXmm1),\n\t/*4734*/ uint16(xArgXmm2M128),\n\t/*4735*/ uint16(xArgImm8u),\n\t/*4736*/ uint16(xMatch),\n\t/*4737*/ uint16(xSetOp), uint16(PSHUFHW),\n\t/*4739*/ uint16(xReadSlashR),\n\t/*4740*/ uint16(xReadIb),\n\t/*4741*/ uint16(xArgXmm1),\n\t/*4742*/ uint16(xArgXmm2M128),\n\t/*4743*/ uint16(xArgImm8u),\n\t/*4744*/ uint16(xMatch),\n\t/*4745*/ uint16(xCondSlashR),\n\t0,    // 0\n\t0,    // 1\n\t4754, // 2\n\t0,    // 3\n\t4772, // 4\n\t0,    // 5\n\t4790, // 6\n\t0,    // 7\n\t/*4754*/ uint16(xCondPrefix), 2,\n\t0x66, 4766,\n\t0x0, 4760,\n\t/*4760*/ uint16(xSetOp), uint16(PSRLW),\n\t/*4762*/ uint16(xReadIb),\n\t/*4763*/ uint16(xArgMm2),\n\t/*4764*/ uint16(xArgImm8u),\n\t/*4765*/ uint16(xMatch),\n\t/*4766*/ uint16(xSetOp), uint16(PSRLW),\n\t/*4768*/ uint16(xReadIb),\n\t/*4769*/ uint16(xArgXmm2),\n\t/*4770*/ uint16(xArgImm8u),\n\t/*4771*/ uint16(xMatch),\n\t/*4772*/ uint16(xCondPrefix), 2,\n\t0x66, 4784,\n\t0x0, 4778,\n\t/*4778*/ uint16(xSetOp), uint16(PSRAW),\n\t/*4780*/ uint16(xReadIb),\n\t/*4781*/ uint16(xArgMm2),\n\t/*4782*/ uint16(xArgImm8u),\n\t/*4783*/ uint16(xMatch),\n\t/*4784*/ uint16(xSetOp), uint16(PSRAW),\n\t/*4786*/ uint16(xReadIb),\n\t/*4787*/ uint16(xArgXmm2),\n\t/*4788*/ uint16(xArgImm8u),\n\t/*4789*/ uint16(xMatch),\n\t/*4790*/ uint16(xCondPrefix), 2,\n\t0x66, 4802,\n\t0x0, 4796,\n\t/*4796*/ uint16(xSetOp), uint16(PSLLW),\n\t/*4798*/ uint16(xReadIb),\n\t/*4799*/ uint16(xArgMm2),\n\t/*4800*/ uint16(xArgImm8u),\n\t/*4801*/ uint16(xMatch),\n\t/*4802*/ uint16(xSetOp), uint16(PSLLW),\n\t/*4804*/ uint16(xReadIb),\n\t/*4805*/ uint16(xArgXmm2),\n\t/*4806*/ uint16(xArgImm8u),\n\t/*4807*/ uint16(xMatch),\n\t/*4808*/ uint16(xCondSlashR),\n\t0,    // 0\n\t0,    // 1\n\t4817, // 2\n\t0,    // 3\n\t4835, // 4\n\t0,    // 5\n\t4853, // 6\n\t0,    // 7\n\t/*4817*/ uint16(xCondPrefix), 2,\n\t0x66, 4829,\n\t0x0, 4823,\n\t/*4823*/ uint16(xSetOp), uint16(PSRLD),\n\t/*4825*/ uint16(xReadIb),\n\t/*4826*/ uint16(xArgMm2),\n\t/*4827*/ uint16(xArgImm8u),\n\t/*4828*/ uint16(xMatch),\n\t/*4829*/ uint16(xSetOp), uint16(PSRLD),\n\t/*4831*/ uint16(xReadIb),\n\t/*4832*/ uint16(xArgXmm2),\n\t/*4833*/ uint16(xArgImm8u),\n\t/*4834*/ uint16(xMatch),\n\t/*4835*/ uint16(xCondPrefix), 2,\n\t0x66, 4847,\n\t0x0, 4841,\n\t/*4841*/ uint16(xSetOp), uint16(PSRAD),\n\t/*4843*/ uint16(xReadIb),\n\t/*4844*/ uint16(xArgMm2),\n\t/*4845*/ uint16(xArgImm8u),\n\t/*4846*/ uint16(xMatch),\n\t/*4847*/ uint16(xSetOp), uint16(PSRAD),\n\t/*4849*/ uint16(xReadIb),\n\t/*4850*/ uint16(xArgXmm2),\n\t/*4851*/ uint16(xArgImm8u),\n\t/*4852*/ uint16(xMatch),\n\t/*4853*/ uint16(xCondPrefix), 2,\n\t0x66, 4865,\n\t0x0, 4859,\n\t/*4859*/ uint16(xSetOp), uint16(PSLLD),\n\t/*4861*/ uint16(xReadIb),\n\t/*4862*/ uint16(xArgMm2),\n\t/*4863*/ uint16(xArgImm8u),\n\t/*4864*/ uint16(xMatch),\n\t/*4865*/ uint16(xSetOp), uint16(PSLLD),\n\t/*4867*/ uint16(xReadIb),\n\t/*4868*/ uint16(xArgXmm2),\n\t/*4869*/ uint16(xArgImm8u),\n\t/*4870*/ uint16(xMatch),\n\t/*4871*/ uint16(xCondSlashR),\n\t0,    // 0\n\t0,    // 1\n\t4880, // 2\n\t4898, // 3\n\t0,    // 4\n\t0,    // 5\n\t4908, // 6\n\t4926, // 7\n\t/*4880*/ uint16(xCondPrefix), 2,\n\t0x66, 4892,\n\t0x0, 4886,\n\t/*4886*/ uint16(xSetOp), uint16(PSRLQ),\n\t/*4888*/ uint16(xReadIb),\n\t/*4889*/ uint16(xArgMm2),\n\t/*4890*/ uint16(xArgImm8u),\n\t/*4891*/ uint16(xMatch),\n\t/*4892*/ uint16(xSetOp), uint16(PSRLQ),\n\t/*4894*/ uint16(xReadIb),\n\t/*4895*/ uint16(xArgXmm2),\n\t/*4896*/ uint16(xArgImm8u),\n\t/*4897*/ uint16(xMatch),\n\t/*4898*/ uint16(xCondPrefix), 1,\n\t0x66, 4902,\n\t/*4902*/ uint16(xSetOp), uint16(PSRLDQ),\n\t/*4904*/ uint16(xReadIb),\n\t/*4905*/ uint16(xArgXmm2),\n\t/*4906*/ uint16(xArgImm8u),\n\t/*4907*/ uint16(xMatch),\n\t/*4908*/ uint16(xCondPrefix), 2,\n\t0x66, 4920,\n\t0x0, 4914,\n\t/*4914*/ uint16(xSetOp), uint16(PSLLQ),\n\t/*4916*/ uint16(xReadIb),\n\t/*4917*/ uint16(xArgMm2),\n\t/*4918*/ uint16(xArgImm8u),\n\t/*4919*/ uint16(xMatch),\n\t/*4920*/ uint16(xSetOp), uint16(PSLLQ),\n\t/*4922*/ uint16(xReadIb),\n\t/*4923*/ uint16(xArgXmm2),\n\t/*4924*/ uint16(xArgImm8u),\n\t/*4925*/ uint16(xMatch),\n\t/*4926*/ uint16(xCondPrefix), 1,\n\t0x66, 4930,\n\t/*4930*/ uint16(xSetOp), uint16(PSLLDQ),\n\t/*4932*/ uint16(xReadIb),\n\t/*4933*/ uint16(xArgXmm2),\n\t/*4934*/ uint16(xArgImm8u),\n\t/*4935*/ uint16(xMatch),\n\t/*4936*/ uint16(xCondPrefix), 2,\n\t0x66, 4948,\n\t0x0, 4942,\n\t/*4942*/ uint16(xSetOp), uint16(PCMPEQB),\n\t/*4944*/ uint16(xReadSlashR),\n\t/*4945*/ uint16(xArgMm),\n\t/*4946*/ uint16(xArgMmM64),\n\t/*4947*/ uint16(xMatch),\n\t/*4948*/ uint16(xSetOp), uint16(PCMPEQB),\n\t/*4950*/ uint16(xReadSlashR),\n\t/*4951*/ uint16(xArgXmm1),\n\t/*4952*/ uint16(xArgXmm2M128),\n\t/*4953*/ uint16(xMatch),\n\t/*4954*/ uint16(xCondPrefix), 2,\n\t0x66, 4966,\n\t0x0, 4960,\n\t/*4960*/ uint16(xSetOp), uint16(PCMPEQW),\n\t/*4962*/ uint16(xReadSlashR),\n\t/*4963*/ uint16(xArgMm),\n\t/*4964*/ uint16(xArgMmM64),\n\t/*4965*/ uint16(xMatch),\n\t/*4966*/ uint16(xSetOp), uint16(PCMPEQW),\n\t/*4968*/ uint16(xReadSlashR),\n\t/*4969*/ uint16(xArgXmm1),\n\t/*4970*/ uint16(xArgXmm2M128),\n\t/*4971*/ uint16(xMatch),\n\t/*4972*/ uint16(xCondPrefix), 2,\n\t0x66, 4984,\n\t0x0, 4978,\n\t/*4978*/ uint16(xSetOp), uint16(PCMPEQD),\n\t/*4980*/ uint16(xReadSlashR),\n\t/*4981*/ uint16(xArgMm),\n\t/*4982*/ uint16(xArgMmM64),\n\t/*4983*/ uint16(xMatch),\n\t/*4984*/ uint16(xSetOp), uint16(PCMPEQD),\n\t/*4986*/ uint16(xReadSlashR),\n\t/*4987*/ uint16(xArgXmm1),\n\t/*4988*/ uint16(xArgXmm2M128),\n\t/*4989*/ uint16(xMatch),\n\t/*4990*/ uint16(xSetOp), uint16(EMMS),\n\t/*4992*/ uint16(xMatch),\n\t/*4993*/ uint16(xCondPrefix), 2,\n\t0xF2, 5005,\n\t0x66, 4999,\n\t/*4999*/ uint16(xSetOp), uint16(HADDPD),\n\t/*5001*/ uint16(xReadSlashR),\n\t/*5002*/ uint16(xArgXmm1),\n\t/*5003*/ uint16(xArgXmm2M128),\n\t/*5004*/ uint16(xMatch),\n\t/*5005*/ uint16(xSetOp), uint16(HADDPS),\n\t/*5007*/ uint16(xReadSlashR),\n\t/*5008*/ uint16(xArgXmm1),\n\t/*5009*/ uint16(xArgXmm2M128),\n\t/*5010*/ uint16(xMatch),\n\t/*5011*/ uint16(xCondPrefix), 2,\n\t0xF2, 5023,\n\t0x66, 5017,\n\t/*5017*/ uint16(xSetOp), uint16(HSUBPD),\n\t/*5019*/ uint16(xReadSlashR),\n\t/*5020*/ uint16(xArgXmm1),\n\t/*5021*/ uint16(xArgXmm2M128),\n\t/*5022*/ uint16(xMatch),\n\t/*5023*/ uint16(xSetOp), uint16(HSUBPS),\n\t/*5025*/ uint16(xReadSlashR),\n\t/*5026*/ uint16(xArgXmm1),\n\t/*5027*/ uint16(xArgXmm2M128),\n\t/*5028*/ uint16(xMatch),\n\t/*5029*/ uint16(xCondIs64), 5032, 5078,\n\t/*5032*/ uint16(xCondPrefix), 3,\n\t0xF3, 5072,\n\t0x66, 5056,\n\t0x0, 5040,\n\t/*5040*/ uint16(xCondDataSize), 5044, 5050, 0,\n\t/*5044*/ uint16(xSetOp), uint16(MOVD),\n\t/*5046*/ uint16(xReadSlashR),\n\t/*5047*/ uint16(xArgRM32),\n\t/*5048*/ uint16(xArgMm),\n\t/*5049*/ uint16(xMatch),\n\t/*5050*/ uint16(xSetOp), uint16(MOVD),\n\t/*5052*/ uint16(xReadSlashR),\n\t/*5053*/ uint16(xArgRM32),\n\t/*5054*/ uint16(xArgMm),\n\t/*5055*/ uint16(xMatch),\n\t/*5056*/ uint16(xCondDataSize), 5060, 5066, 0,\n\t/*5060*/ uint16(xSetOp), uint16(MOVD),\n\t/*5062*/ uint16(xReadSlashR),\n\t/*5063*/ uint16(xArgRM32),\n\t/*5064*/ uint16(xArgXmm),\n\t/*5065*/ uint16(xMatch),\n\t/*5066*/ uint16(xSetOp), uint16(MOVD),\n\t/*5068*/ uint16(xReadSlashR),\n\t/*5069*/ uint16(xArgRM32),\n\t/*5070*/ uint16(xArgXmm),\n\t/*5071*/ uint16(xMatch),\n\t/*5072*/ uint16(xSetOp), uint16(MOVQ),\n\t/*5074*/ uint16(xReadSlashR),\n\t/*5075*/ uint16(xArgXmm1),\n\t/*5076*/ uint16(xArgXmm2M64),\n\t/*5077*/ uint16(xMatch),\n\t/*5078*/ uint16(xCondPrefix), 3,\n\t0xF3, 5072,\n\t0x66, 5096,\n\t0x0, 5086,\n\t/*5086*/ uint16(xCondDataSize), 5044, 5050, 5090,\n\t/*5090*/ uint16(xSetOp), uint16(MOVQ),\n\t/*5092*/ uint16(xReadSlashR),\n\t/*5093*/ uint16(xArgRM64),\n\t/*5094*/ uint16(xArgMm),\n\t/*5095*/ uint16(xMatch),\n\t/*5096*/ uint16(xCondDataSize), 5060, 5066, 5100,\n\t/*5100*/ uint16(xSetOp), uint16(MOVQ),\n\t/*5102*/ uint16(xReadSlashR),\n\t/*5103*/ uint16(xArgRM64),\n\t/*5104*/ uint16(xArgXmm),\n\t/*5105*/ uint16(xMatch),\n\t/*5106*/ uint16(xCondPrefix), 3,\n\t0xF3, 5126,\n\t0x66, 5120,\n\t0x0, 5114,\n\t/*5114*/ uint16(xSetOp), uint16(MOVQ),\n\t/*5116*/ uint16(xReadSlashR),\n\t/*5117*/ uint16(xArgMmM64),\n\t/*5118*/ uint16(xArgMm),\n\t/*5119*/ uint16(xMatch),\n\t/*5120*/ uint16(xSetOp), uint16(MOVDQA),\n\t/*5122*/ uint16(xReadSlashR),\n\t/*5123*/ uint16(xArgXmm2M128),\n\t/*5124*/ uint16(xArgXmm1),\n\t/*5125*/ uint16(xMatch),\n\t/*5126*/ uint16(xSetOp), uint16(MOVDQU),\n\t/*5128*/ uint16(xReadSlashR),\n\t/*5129*/ uint16(xArgXmm2M128),\n\t/*5130*/ uint16(xArgXmm1),\n\t/*5131*/ uint16(xMatch),\n\t/*5132*/ uint16(xCondIs64), 5135, 5149,\n\t/*5135*/ uint16(xCondDataSize), 5139, 5144, 0,\n\t/*5139*/ uint16(xSetOp), uint16(JO),\n\t/*5141*/ uint16(xReadCw),\n\t/*5142*/ uint16(xArgRel16),\n\t/*5143*/ uint16(xMatch),\n\t/*5144*/ uint16(xSetOp), uint16(JO),\n\t/*5146*/ uint16(xReadCd),\n\t/*5147*/ uint16(xArgRel32),\n\t/*5148*/ uint16(xMatch),\n\t/*5149*/ uint16(xCondDataSize), 5153, 5144, 5158,\n\t/*5153*/ uint16(xSetOp), uint16(JO),\n\t/*5155*/ uint16(xReadCd),\n\t/*5156*/ uint16(xArgRel32),\n\t/*5157*/ uint16(xMatch),\n\t/*5158*/ uint16(xSetOp), uint16(JO),\n\t/*5160*/ uint16(xReadCd),\n\t/*5161*/ uint16(xArgRel32),\n\t/*5162*/ uint16(xMatch),\n\t/*5163*/ uint16(xCondIs64), 5166, 5180,\n\t/*5166*/ uint16(xCondDataSize), 5170, 5175, 0,\n\t/*5170*/ uint16(xSetOp), uint16(JNO),\n\t/*5172*/ uint16(xReadCw),\n\t/*5173*/ uint16(xArgRel16),\n\t/*5174*/ uint16(xMatch),\n\t/*5175*/ uint16(xSetOp), uint16(JNO),\n\t/*5177*/ uint16(xReadCd),\n\t/*5178*/ uint16(xArgRel32),\n\t/*5179*/ uint16(xMatch),\n\t/*5180*/ uint16(xCondDataSize), 5184, 5175, 5189,\n\t/*5184*/ uint16(xSetOp), uint16(JNO),\n\t/*5186*/ uint16(xReadCd),\n\t/*5187*/ uint16(xArgRel32),\n\t/*5188*/ uint16(xMatch),\n\t/*5189*/ uint16(xSetOp), uint16(JNO),\n\t/*5191*/ uint16(xReadCd),\n\t/*5192*/ uint16(xArgRel32),\n\t/*5193*/ uint16(xMatch),\n\t/*5194*/ uint16(xCondIs64), 5197, 5211,\n\t/*5197*/ uint16(xCondDataSize), 5201, 5206, 0,\n\t/*5201*/ uint16(xSetOp), uint16(JB),\n\t/*5203*/ uint16(xReadCw),\n\t/*5204*/ uint16(xArgRel16),\n\t/*5205*/ uint16(xMatch),\n\t/*5206*/ uint16(xSetOp), uint16(JB),\n\t/*5208*/ uint16(xReadCd),\n\t/*5209*/ uint16(xArgRel32),\n\t/*5210*/ uint16(xMatch),\n\t/*5211*/ uint16(xCondDataSize), 5215, 5206, 5220,\n\t/*5215*/ uint16(xSetOp), uint16(JB),\n\t/*5217*/ uint16(xReadCd),\n\t/*5218*/ uint16(xArgRel32),\n\t/*5219*/ uint16(xMatch),\n\t/*5220*/ uint16(xSetOp), uint16(JB),\n\t/*5222*/ uint16(xReadCd),\n\t/*5223*/ uint16(xArgRel32),\n\t/*5224*/ uint16(xMatch),\n\t/*5225*/ uint16(xCondIs64), 5228, 5242,\n\t/*5228*/ uint16(xCondDataSize), 5232, 5237, 0,\n\t/*5232*/ uint16(xSetOp), uint16(JAE),\n\t/*5234*/ uint16(xReadCw),\n\t/*5235*/ uint16(xArgRel16),\n\t/*5236*/ uint16(xMatch),\n\t/*5237*/ uint16(xSetOp), uint16(JAE),\n\t/*5239*/ uint16(xReadCd),\n\t/*5240*/ uint16(xArgRel32),\n\t/*5241*/ uint16(xMatch),\n\t/*5242*/ uint16(xCondDataSize), 5246, 5237, 5251,\n\t/*5246*/ uint16(xSetOp), uint16(JAE),\n\t/*5248*/ uint16(xReadCd),\n\t/*5249*/ uint16(xArgRel32),\n\t/*5250*/ uint16(xMatch),\n\t/*5251*/ uint16(xSetOp), uint16(JAE),\n\t/*5253*/ uint16(xReadCd),\n\t/*5254*/ uint16(xArgRel32),\n\t/*5255*/ uint16(xMatch),\n\t/*5256*/ uint16(xCondIs64), 5259, 5273,\n\t/*5259*/ uint16(xCondDataSize), 5263, 5268, 0,\n\t/*5263*/ uint16(xSetOp), uint16(JE),\n\t/*5265*/ uint16(xReadCw),\n\t/*5266*/ uint16(xArgRel16),\n\t/*5267*/ uint16(xMatch),\n\t/*5268*/ uint16(xSetOp), uint16(JE),\n\t/*5270*/ uint16(xReadCd),\n\t/*5271*/ uint16(xArgRel32),\n\t/*5272*/ uint16(xMatch),\n\t/*5273*/ uint16(xCondDataSize), 5277, 5268, 5282,\n\t/*5277*/ uint16(xSetOp), uint16(JE),\n\t/*5279*/ uint16(xReadCd),\n\t/*5280*/ uint16(xArgRel32),\n\t/*5281*/ uint16(xMatch),\n\t/*5282*/ uint16(xSetOp), uint16(JE),\n\t/*5284*/ uint16(xReadCd),\n\t/*5285*/ uint16(xArgRel32),\n\t/*5286*/ uint16(xMatch),\n\t/*5287*/ uint16(xCondIs64), 5290, 5304,\n\t/*5290*/ uint16(xCondDataSize), 5294, 5299, 0,\n\t/*5294*/ uint16(xSetOp), uint16(JNE),\n\t/*5296*/ uint16(xReadCw),\n\t/*5297*/ uint16(xArgRel16),\n\t/*5298*/ uint16(xMatch),\n\t/*5299*/ uint16(xSetOp), uint16(JNE),\n\t/*5301*/ uint16(xReadCd),\n\t/*5302*/ uint16(xArgRel32),\n\t/*5303*/ uint16(xMatch),\n\t/*5304*/ uint16(xCondDataSize), 5308, 5299, 5313,\n\t/*5308*/ uint16(xSetOp), uint16(JNE),\n\t/*5310*/ uint16(xReadCd),\n\t/*5311*/ uint16(xArgRel32),\n\t/*5312*/ uint16(xMatch),\n\t/*5313*/ uint16(xSetOp), uint16(JNE),\n\t/*5315*/ uint16(xReadCd),\n\t/*5316*/ uint16(xArgRel32),\n\t/*5317*/ uint16(xMatch),\n\t/*5318*/ uint16(xCondIs64), 5321, 5335,\n\t/*5321*/ uint16(xCondDataSize), 5325, 5330, 0,\n\t/*5325*/ uint16(xSetOp), uint16(JBE),\n\t/*5327*/ uint16(xReadCw),\n\t/*5328*/ uint16(xArgRel16),\n\t/*5329*/ uint16(xMatch),\n\t/*5330*/ uint16(xSetOp), uint16(JBE),\n\t/*5332*/ uint16(xReadCd),\n\t/*5333*/ uint16(xArgRel32),\n\t/*5334*/ uint16(xMatch),\n\t/*5335*/ uint16(xCondDataSize), 5339, 5330, 5344,\n\t/*5339*/ uint16(xSetOp), uint16(JBE),\n\t/*5341*/ uint16(xReadCd),\n\t/*5342*/ uint16(xArgRel32),\n\t/*5343*/ uint16(xMatch),\n\t/*5344*/ uint16(xSetOp), uint16(JBE),\n\t/*5346*/ uint16(xReadCd),\n\t/*5347*/ uint16(xArgRel32),\n\t/*5348*/ uint16(xMatch),\n\t/*5349*/ uint16(xCondIs64), 5352, 5366,\n\t/*5352*/ uint16(xCondDataSize), 5356, 5361, 0,\n\t/*5356*/ uint16(xSetOp), uint16(JA),\n\t/*5358*/ uint16(xReadCw),\n\t/*5359*/ uint16(xArgRel16),\n\t/*5360*/ uint16(xMatch),\n\t/*5361*/ uint16(xSetOp), uint16(JA),\n\t/*5363*/ uint16(xReadCd),\n\t/*5364*/ uint16(xArgRel32),\n\t/*5365*/ uint16(xMatch),\n\t/*5366*/ uint16(xCondDataSize), 5370, 5361, 5375,\n\t/*5370*/ uint16(xSetOp), uint16(JA),\n\t/*5372*/ uint16(xReadCd),\n\t/*5373*/ uint16(xArgRel32),\n\t/*5374*/ uint16(xMatch),\n\t/*5375*/ uint16(xSetOp), uint16(JA),\n\t/*5377*/ uint16(xReadCd),\n\t/*5378*/ uint16(xArgRel32),\n\t/*5379*/ uint16(xMatch),\n\t/*5380*/ uint16(xCondIs64), 5383, 5397,\n\t/*5383*/ uint16(xCondDataSize), 5387, 5392, 0,\n\t/*5387*/ uint16(xSetOp), uint16(JS),\n\t/*5389*/ uint16(xReadCw),\n\t/*5390*/ uint16(xArgRel16),\n\t/*5391*/ uint16(xMatch),\n\t/*5392*/ uint16(xSetOp), uint16(JS),\n\t/*5394*/ uint16(xReadCd),\n\t/*5395*/ uint16(xArgRel32),\n\t/*5396*/ uint16(xMatch),\n\t/*5397*/ uint16(xCondDataSize), 5401, 5392, 5406,\n\t/*5401*/ uint16(xSetOp), uint16(JS),\n\t/*5403*/ uint16(xReadCd),\n\t/*5404*/ uint16(xArgRel32),\n\t/*5405*/ uint16(xMatch),\n\t/*5406*/ uint16(xSetOp), uint16(JS),\n\t/*5408*/ uint16(xReadCd),\n\t/*5409*/ uint16(xArgRel32),\n\t/*5410*/ uint16(xMatch),\n\t/*5411*/ uint16(xCondIs64), 5414, 5428,\n\t/*5414*/ uint16(xCondDataSize), 5418, 5423, 0,\n\t/*5418*/ uint16(xSetOp), uint16(JNS),\n\t/*5420*/ uint16(xReadCw),\n\t/*5421*/ uint16(xArgRel16),\n\t/*5422*/ uint16(xMatch),\n\t/*5423*/ uint16(xSetOp), uint16(JNS),\n\t/*5425*/ uint16(xReadCd),\n\t/*5426*/ uint16(xArgRel32),\n\t/*5427*/ uint16(xMatch),\n\t/*5428*/ uint16(xCondDataSize), 5432, 5423, 5437,\n\t/*5432*/ uint16(xSetOp), uint16(JNS),\n\t/*5434*/ uint16(xReadCd),\n\t/*5435*/ uint16(xArgRel32),\n\t/*5436*/ uint16(xMatch),\n\t/*5437*/ uint16(xSetOp), uint16(JNS),\n\t/*5439*/ uint16(xReadCd),\n\t/*5440*/ uint16(xArgRel32),\n\t/*5441*/ uint16(xMatch),\n\t/*5442*/ uint16(xCondIs64), 5445, 5459,\n\t/*5445*/ uint16(xCondDataSize), 5449, 5454, 0,\n\t/*5449*/ uint16(xSetOp), uint16(JP),\n\t/*5451*/ uint16(xReadCw),\n\t/*5452*/ uint16(xArgRel16),\n\t/*5453*/ uint16(xMatch),\n\t/*5454*/ uint16(xSetOp), uint16(JP),\n\t/*5456*/ uint16(xReadCd),\n\t/*5457*/ uint16(xArgRel32),\n\t/*5458*/ uint16(xMatch),\n\t/*5459*/ uint16(xCondDataSize), 5463, 5454, 5468,\n\t/*5463*/ uint16(xSetOp), uint16(JP),\n\t/*5465*/ uint16(xReadCd),\n\t/*5466*/ uint16(xArgRel32),\n\t/*5467*/ uint16(xMatch),\n\t/*5468*/ uint16(xSetOp), uint16(JP),\n\t/*5470*/ uint16(xReadCd),\n\t/*5471*/ uint16(xArgRel32),\n\t/*5472*/ uint16(xMatch),\n\t/*5473*/ uint16(xCondIs64), 5476, 5490,\n\t/*5476*/ uint16(xCondDataSize), 5480, 5485, 0,\n\t/*5480*/ uint16(xSetOp), uint16(JNP),\n\t/*5482*/ uint16(xReadCw),\n\t/*5483*/ uint16(xArgRel16),\n\t/*5484*/ uint16(xMatch),\n\t/*5485*/ uint16(xSetOp), uint16(JNP),\n\t/*5487*/ uint16(xReadCd),\n\t/*5488*/ uint16(xArgRel32),\n\t/*5489*/ uint16(xMatch),\n\t/*5490*/ uint16(xCondDataSize), 5494, 5485, 5499,\n\t/*5494*/ uint16(xSetOp), uint16(JNP),\n\t/*5496*/ uint16(xReadCd),\n\t/*5497*/ uint16(xArgRel32),\n\t/*5498*/ uint16(xMatch),\n\t/*5499*/ uint16(xSetOp), uint16(JNP),\n\t/*5501*/ uint16(xReadCd),\n\t/*5502*/ uint16(xArgRel32),\n\t/*5503*/ uint16(xMatch),\n\t/*5504*/ uint16(xCondIs64), 5507, 5521,\n\t/*5507*/ uint16(xCondDataSize), 5511, 5516, 0,\n\t/*5511*/ uint16(xSetOp), uint16(JL),\n\t/*5513*/ uint16(xReadCw),\n\t/*5514*/ uint16(xArgRel16),\n\t/*5515*/ uint16(xMatch),\n\t/*5516*/ uint16(xSetOp), uint16(JL),\n\t/*5518*/ uint16(xReadCd),\n\t/*5519*/ uint16(xArgRel32),\n\t/*5520*/ uint16(xMatch),\n\t/*5521*/ uint16(xCondDataSize), 5525, 5516, 5530,\n\t/*5525*/ uint16(xSetOp), uint16(JL),\n\t/*5527*/ uint16(xReadCd),\n\t/*5528*/ uint16(xArgRel32),\n\t/*5529*/ uint16(xMatch),\n\t/*5530*/ uint16(xSetOp), uint16(JL),\n\t/*5532*/ uint16(xReadCd),\n\t/*5533*/ uint16(xArgRel32),\n\t/*5534*/ uint16(xMatch),\n\t/*5535*/ uint16(xCondIs64), 5538, 5552,\n\t/*5538*/ uint16(xCondDataSize), 5542, 5547, 0,\n\t/*5542*/ uint16(xSetOp), uint16(JGE),\n\t/*5544*/ uint16(xReadCw),\n\t/*5545*/ uint16(xArgRel16),\n\t/*5546*/ uint16(xMatch),\n\t/*5547*/ uint16(xSetOp), uint16(JGE),\n\t/*5549*/ uint16(xReadCd),\n\t/*5550*/ uint16(xArgRel32),\n\t/*5551*/ uint16(xMatch),\n\t/*5552*/ uint16(xCondDataSize), 5556, 5547, 5561,\n\t/*5556*/ uint16(xSetOp), uint16(JGE),\n\t/*5558*/ uint16(xReadCd),\n\t/*5559*/ uint16(xArgRel32),\n\t/*5560*/ uint16(xMatch),\n\t/*5561*/ uint16(xSetOp), uint16(JGE),\n\t/*5563*/ uint16(xReadCd),\n\t/*5564*/ uint16(xArgRel32),\n\t/*5565*/ uint16(xMatch),\n\t/*5566*/ uint16(xCondIs64), 5569, 5583,\n\t/*5569*/ uint16(xCondDataSize), 5573, 5578, 0,\n\t/*5573*/ uint16(xSetOp), uint16(JLE),\n\t/*5575*/ uint16(xReadCw),\n\t/*5576*/ uint16(xArgRel16),\n\t/*5577*/ uint16(xMatch),\n\t/*5578*/ uint16(xSetOp), uint16(JLE),\n\t/*5580*/ uint16(xReadCd),\n\t/*5581*/ uint16(xArgRel32),\n\t/*5582*/ uint16(xMatch),\n\t/*5583*/ uint16(xCondDataSize), 5587, 5578, 5592,\n\t/*5587*/ uint16(xSetOp), uint16(JLE),\n\t/*5589*/ uint16(xReadCd),\n\t/*5590*/ uint16(xArgRel32),\n\t/*5591*/ uint16(xMatch),\n\t/*5592*/ uint16(xSetOp), uint16(JLE),\n\t/*5594*/ uint16(xReadCd),\n\t/*5595*/ uint16(xArgRel32),\n\t/*5596*/ uint16(xMatch),\n\t/*5597*/ uint16(xCondIs64), 5600, 5614,\n\t/*5600*/ uint16(xCondDataSize), 5604, 5609, 0,\n\t/*5604*/ uint16(xSetOp), uint16(JG),\n\t/*5606*/ uint16(xReadCw),\n\t/*5607*/ uint16(xArgRel16),\n\t/*5608*/ uint16(xMatch),\n\t/*5609*/ uint16(xSetOp), uint16(JG),\n\t/*5611*/ uint16(xReadCd),\n\t/*5612*/ uint16(xArgRel32),\n\t/*5613*/ uint16(xMatch),\n\t/*5614*/ uint16(xCondDataSize), 5618, 5609, 5623,\n\t/*5618*/ uint16(xSetOp), uint16(JG),\n\t/*5620*/ uint16(xReadCd),\n\t/*5621*/ uint16(xArgRel32),\n\t/*5622*/ uint16(xMatch),\n\t/*5623*/ uint16(xSetOp), uint16(JG),\n\t/*5625*/ uint16(xReadCd),\n\t/*5626*/ uint16(xArgRel32),\n\t/*5627*/ uint16(xMatch),\n\t/*5628*/ uint16(xSetOp), uint16(SETO),\n\t/*5630*/ uint16(xReadSlashR),\n\t/*5631*/ uint16(xArgRM8),\n\t/*5632*/ uint16(xMatch),\n\t/*5633*/ uint16(xSetOp), uint16(SETNO),\n\t/*5635*/ uint16(xReadSlashR),\n\t/*5636*/ uint16(xArgRM8),\n\t/*5637*/ uint16(xMatch),\n\t/*5638*/ uint16(xSetOp), uint16(SETB),\n\t/*5640*/ uint16(xReadSlashR),\n\t/*5641*/ uint16(xArgRM8),\n\t/*5642*/ uint16(xMatch),\n\t/*5643*/ uint16(xSetOp), uint16(SETAE),\n\t/*5645*/ uint16(xReadSlashR),\n\t/*5646*/ uint16(xArgRM8),\n\t/*5647*/ uint16(xMatch),\n\t/*5648*/ uint16(xSetOp), uint16(SETE),\n\t/*5650*/ uint16(xReadSlashR),\n\t/*5651*/ uint16(xArgRM8),\n\t/*5652*/ uint16(xMatch),\n\t/*5653*/ uint16(xSetOp), uint16(SETNE),\n\t/*5655*/ uint16(xReadSlashR),\n\t/*5656*/ uint16(xArgRM8),\n\t/*5657*/ uint16(xMatch),\n\t/*5658*/ uint16(xSetOp), uint16(SETBE),\n\t/*5660*/ uint16(xReadSlashR),\n\t/*5661*/ uint16(xArgRM8),\n\t/*5662*/ uint16(xMatch),\n\t/*5663*/ uint16(xSetOp), uint16(SETA),\n\t/*5665*/ uint16(xReadSlashR),\n\t/*5666*/ uint16(xArgRM8),\n\t/*5667*/ uint16(xMatch),\n\t/*5668*/ uint16(xSetOp), uint16(SETS),\n\t/*5670*/ uint16(xReadSlashR),\n\t/*5671*/ uint16(xArgRM8),\n\t/*5672*/ uint16(xMatch),\n\t/*5673*/ uint16(xSetOp), uint16(SETNS),\n\t/*5675*/ uint16(xReadSlashR),\n\t/*5676*/ uint16(xArgRM8),\n\t/*5677*/ uint16(xMatch),\n\t/*5678*/ uint16(xSetOp), uint16(SETP),\n\t/*5680*/ uint16(xReadSlashR),\n\t/*5681*/ uint16(xArgRM8),\n\t/*5682*/ uint16(xMatch),\n\t/*5683*/ uint16(xSetOp), uint16(SETNP),\n\t/*5685*/ uint16(xReadSlashR),\n\t/*5686*/ uint16(xArgRM8),\n\t/*5687*/ uint16(xMatch),\n\t/*5688*/ uint16(xSetOp), uint16(SETL),\n\t/*5690*/ uint16(xReadSlashR),\n\t/*5691*/ uint16(xArgRM8),\n\t/*5692*/ uint16(xMatch),\n\t/*5693*/ uint16(xSetOp), uint16(SETGE),\n\t/*5695*/ uint16(xReadSlashR),\n\t/*5696*/ uint16(xArgRM8),\n\t/*5697*/ uint16(xMatch),\n\t/*5698*/ uint16(xSetOp), uint16(SETLE),\n\t/*5700*/ uint16(xReadSlashR),\n\t/*5701*/ uint16(xArgRM8),\n\t/*5702*/ uint16(xMatch),\n\t/*5703*/ uint16(xSetOp), uint16(SETG),\n\t/*5705*/ uint16(xReadSlashR),\n\t/*5706*/ uint16(xArgRM8),\n\t/*5707*/ uint16(xMatch),\n\t/*5708*/ uint16(xSetOp), uint16(PUSH),\n\t/*5710*/ uint16(xArgFS),\n\t/*5711*/ uint16(xMatch),\n\t/*5712*/ uint16(xCondIs64), 5715, 5727,\n\t/*5715*/ uint16(xCondDataSize), 5719, 5723, 0,\n\t/*5719*/ uint16(xSetOp), uint16(POP),\n\t/*5721*/ uint16(xArgFS),\n\t/*5722*/ uint16(xMatch),\n\t/*5723*/ uint16(xSetOp), uint16(POP),\n\t/*5725*/ uint16(xArgFS),\n\t/*5726*/ uint16(xMatch),\n\t/*5727*/ uint16(xCondDataSize), 5719, 5731, 5735,\n\t/*5731*/ uint16(xSetOp), uint16(POP),\n\t/*5733*/ uint16(xArgFS),\n\t/*5734*/ uint16(xMatch),\n\t/*5735*/ uint16(xSetOp), uint16(POP),\n\t/*5737*/ uint16(xArgFS),\n\t/*5738*/ uint16(xMatch),\n\t/*5739*/ uint16(xSetOp), uint16(CPUID),\n\t/*5741*/ uint16(xMatch),\n\t/*5742*/ uint16(xCondIs64), 5745, 5761,\n\t/*5745*/ uint16(xCondDataSize), 5749, 5755, 0,\n\t/*5749*/ uint16(xSetOp), uint16(BT),\n\t/*5751*/ uint16(xReadSlashR),\n\t/*5752*/ uint16(xArgRM16),\n\t/*5753*/ uint16(xArgR16),\n\t/*5754*/ uint16(xMatch),\n\t/*5755*/ uint16(xSetOp), uint16(BT),\n\t/*5757*/ uint16(xReadSlashR),\n\t/*5758*/ uint16(xArgRM32),\n\t/*5759*/ uint16(xArgR32),\n\t/*5760*/ uint16(xMatch),\n\t/*5761*/ uint16(xCondDataSize), 5749, 5755, 5765,\n\t/*5765*/ uint16(xSetOp), uint16(BT),\n\t/*5767*/ uint16(xReadSlashR),\n\t/*5768*/ uint16(xArgRM64),\n\t/*5769*/ uint16(xArgR64),\n\t/*5770*/ uint16(xMatch),\n\t/*5771*/ uint16(xCondIs64), 5774, 5794,\n\t/*5774*/ uint16(xCondDataSize), 5778, 5786, 0,\n\t/*5778*/ uint16(xSetOp), uint16(SHLD),\n\t/*5780*/ uint16(xReadSlashR),\n\t/*5781*/ uint16(xReadIb),\n\t/*5782*/ uint16(xArgRM16),\n\t/*5783*/ uint16(xArgR16),\n\t/*5784*/ uint16(xArgImm8u),\n\t/*5785*/ uint16(xMatch),\n\t/*5786*/ uint16(xSetOp), uint16(SHLD),\n\t/*5788*/ uint16(xReadSlashR),\n\t/*5789*/ uint16(xReadIb),\n\t/*5790*/ uint16(xArgRM32),\n\t/*5791*/ uint16(xArgR32),\n\t/*5792*/ uint16(xArgImm8u),\n\t/*5793*/ uint16(xMatch),\n\t/*5794*/ uint16(xCondDataSize), 5778, 5786, 5798,\n\t/*5798*/ uint16(xSetOp), uint16(SHLD),\n\t/*5800*/ uint16(xReadSlashR),\n\t/*5801*/ uint16(xReadIb),\n\t/*5802*/ uint16(xArgRM64),\n\t/*5803*/ uint16(xArgR64),\n\t/*5804*/ uint16(xArgImm8u),\n\t/*5805*/ uint16(xMatch),\n\t/*5806*/ uint16(xCondIs64), 5809, 5827,\n\t/*5809*/ uint16(xCondDataSize), 5813, 5820, 0,\n\t/*5813*/ uint16(xSetOp), uint16(SHLD),\n\t/*5815*/ uint16(xReadSlashR),\n\t/*5816*/ uint16(xArgRM16),\n\t/*5817*/ uint16(xArgR16),\n\t/*5818*/ uint16(xArgCL),\n\t/*5819*/ uint16(xMatch),\n\t/*5820*/ uint16(xSetOp), uint16(SHLD),\n\t/*5822*/ uint16(xReadSlashR),\n\t/*5823*/ uint16(xArgRM32),\n\t/*5824*/ uint16(xArgR32),\n\t/*5825*/ uint16(xArgCL),\n\t/*5826*/ uint16(xMatch),\n\t/*5827*/ uint16(xCondDataSize), 5813, 5820, 5831,\n\t/*5831*/ uint16(xSetOp), uint16(SHLD),\n\t/*5833*/ uint16(xReadSlashR),\n\t/*5834*/ uint16(xArgRM64),\n\t/*5835*/ uint16(xArgR64),\n\t/*5836*/ uint16(xArgCL),\n\t/*5837*/ uint16(xMatch),\n\t/*5838*/ uint16(xSetOp), uint16(PUSH),\n\t/*5840*/ uint16(xArgGS),\n\t/*5841*/ uint16(xMatch),\n\t/*5842*/ uint16(xCondIs64), 5845, 5857,\n\t/*5845*/ uint16(xCondDataSize), 5849, 5853, 0,\n\t/*5849*/ uint16(xSetOp), uint16(POP),\n\t/*5851*/ uint16(xArgGS),\n\t/*5852*/ uint16(xMatch),\n\t/*5853*/ uint16(xSetOp), uint16(POP),\n\t/*5855*/ uint16(xArgGS),\n\t/*5856*/ uint16(xMatch),\n\t/*5857*/ uint16(xCondDataSize), 5849, 5861, 5865,\n\t/*5861*/ uint16(xSetOp), uint16(POP),\n\t/*5863*/ uint16(xArgGS),\n\t/*5864*/ uint16(xMatch),\n\t/*5865*/ uint16(xSetOp), uint16(POP),\n\t/*5867*/ uint16(xArgGS),\n\t/*5868*/ uint16(xMatch),\n\t/*5869*/ uint16(xSetOp), uint16(RSM),\n\t/*5871*/ uint16(xMatch),\n\t/*5872*/ uint16(xCondIs64), 5875, 5891,\n\t/*5875*/ uint16(xCondDataSize), 5879, 5885, 0,\n\t/*5879*/ uint16(xSetOp), uint16(BTS),\n\t/*5881*/ uint16(xReadSlashR),\n\t/*5882*/ uint16(xArgRM16),\n\t/*5883*/ uint16(xArgR16),\n\t/*5884*/ uint16(xMatch),\n\t/*5885*/ uint16(xSetOp), uint16(BTS),\n\t/*5887*/ uint16(xReadSlashR),\n\t/*5888*/ uint16(xArgRM32),\n\t/*5889*/ uint16(xArgR32),\n\t/*5890*/ uint16(xMatch),\n\t/*5891*/ uint16(xCondDataSize), 5879, 5885, 5895,\n\t/*5895*/ uint16(xSetOp), uint16(BTS),\n\t/*5897*/ uint16(xReadSlashR),\n\t/*5898*/ uint16(xArgRM64),\n\t/*5899*/ uint16(xArgR64),\n\t/*5900*/ uint16(xMatch),\n\t/*5901*/ uint16(xCondIs64), 5904, 5924,\n\t/*5904*/ uint16(xCondDataSize), 5908, 5916, 0,\n\t/*5908*/ uint16(xSetOp), uint16(SHRD),\n\t/*5910*/ uint16(xReadSlashR),\n\t/*5911*/ uint16(xReadIb),\n\t/*5912*/ uint16(xArgRM16),\n\t/*5913*/ uint16(xArgR16),\n\t/*5914*/ uint16(xArgImm8u),\n\t/*5915*/ uint16(xMatch),\n\t/*5916*/ uint16(xSetOp), uint16(SHRD),\n\t/*5918*/ uint16(xReadSlashR),\n\t/*5919*/ uint16(xReadIb),\n\t/*5920*/ uint16(xArgRM32),\n\t/*5921*/ uint16(xArgR32),\n\t/*5922*/ uint16(xArgImm8u),\n\t/*5923*/ uint16(xMatch),\n\t/*5924*/ uint16(xCondDataSize), 5908, 5916, 5928,\n\t/*5928*/ uint16(xSetOp), uint16(SHRD),\n\t/*5930*/ uint16(xReadSlashR),\n\t/*5931*/ uint16(xReadIb),\n\t/*5932*/ uint16(xArgRM64),\n\t/*5933*/ uint16(xArgR64),\n\t/*5934*/ uint16(xArgImm8u),\n\t/*5935*/ uint16(xMatch),\n\t/*5936*/ uint16(xCondIs64), 5939, 5957,\n\t/*5939*/ uint16(xCondDataSize), 5943, 5950, 0,\n\t/*5943*/ uint16(xSetOp), uint16(SHRD),\n\t/*5945*/ uint16(xReadSlashR),\n\t/*5946*/ uint16(xArgRM16),\n\t/*5947*/ uint16(xArgR16),\n\t/*5948*/ uint16(xArgCL),\n\t/*5949*/ uint16(xMatch),\n\t/*5950*/ uint16(xSetOp), uint16(SHRD),\n\t/*5952*/ uint16(xReadSlashR),\n\t/*5953*/ uint16(xArgRM32),\n\t/*5954*/ uint16(xArgR32),\n\t/*5955*/ uint16(xArgCL),\n\t/*5956*/ uint16(xMatch),\n\t/*5957*/ uint16(xCondDataSize), 5943, 5950, 5961,\n\t/*5961*/ uint16(xSetOp), uint16(SHRD),\n\t/*5963*/ uint16(xReadSlashR),\n\t/*5964*/ uint16(xArgRM64),\n\t/*5965*/ uint16(xArgR64),\n\t/*5966*/ uint16(xArgCL),\n\t/*5967*/ uint16(xMatch),\n\t/*5968*/ uint16(xCondByte), 3,\n\t0xE8, 6217,\n\t0xF0, 6220,\n\t0xF8, 6223,\n\t/*5976*/ uint16(xCondSlashR),\n\t5985, // 0\n\t6039, // 1\n\t6093, // 2\n\t6122, // 3\n\t6151, // 4\n\t6174, // 5\n\t6197, // 6\n\t6213, // 7\n\t/*5985*/ uint16(xCondIs64), 5988, 6000,\n\t/*5988*/ uint16(xCondDataSize), 5992, 5996, 0,\n\t/*5992*/ uint16(xSetOp), uint16(FXSAVE),\n\t/*5994*/ uint16(xArgM512byte),\n\t/*5995*/ uint16(xMatch),\n\t/*5996*/ uint16(xSetOp), uint16(FXSAVE),\n\t/*5998*/ uint16(xArgM512byte),\n\t/*5999*/ uint16(xMatch),\n\t/*6000*/ uint16(xCondPrefix), 2,\n\t0xF3, 6014,\n\t0x0, 6006,\n\t/*6006*/ uint16(xCondDataSize), 5992, 5996, 6010,\n\t/*6010*/ uint16(xSetOp), uint16(FXSAVE64),\n\t/*6012*/ uint16(xArgM512byte),\n\t/*6013*/ uint16(xMatch),\n\t/*6014*/ uint16(xCondDataSize), 6018, 6025, 6032,\n\t/*6018*/ uint16(xCondIsMem), 6021, 0,\n\t/*6021*/ uint16(xSetOp), uint16(RDFSBASE),\n\t/*6023*/ uint16(xArgRM32),\n\t/*6024*/ uint16(xMatch),\n\t/*6025*/ uint16(xCondIsMem), 6028, 0,\n\t/*6028*/ uint16(xSetOp), uint16(RDFSBASE),\n\t/*6030*/ uint16(xArgRM32),\n\t/*6031*/ uint16(xMatch),\n\t/*6032*/ uint16(xCondIsMem), 6035, 0,\n\t/*6035*/ uint16(xSetOp), uint16(RDFSBASE),\n\t/*6037*/ uint16(xArgRM64),\n\t/*6038*/ uint16(xMatch),\n\t/*6039*/ uint16(xCondIs64), 6042, 6054,\n\t/*6042*/ uint16(xCondDataSize), 6046, 6050, 0,\n\t/*6046*/ uint16(xSetOp), uint16(FXRSTOR),\n\t/*6048*/ uint16(xArgM512byte),\n\t/*6049*/ uint16(xMatch),\n\t/*6050*/ uint16(xSetOp), uint16(FXRSTOR),\n\t/*6052*/ uint16(xArgM512byte),\n\t/*6053*/ uint16(xMatch),\n\t/*6054*/ uint16(xCondPrefix), 2,\n\t0xF3, 6068,\n\t0x0, 6060,\n\t/*6060*/ uint16(xCondDataSize), 6046, 6050, 6064,\n\t/*6064*/ uint16(xSetOp), uint16(FXRSTOR64),\n\t/*6066*/ uint16(xArgM512byte),\n\t/*6067*/ uint16(xMatch),\n\t/*6068*/ uint16(xCondDataSize), 6072, 6079, 6086,\n\t/*6072*/ uint16(xCondIsMem), 6075, 0,\n\t/*6075*/ uint16(xSetOp), uint16(RDGSBASE),\n\t/*6077*/ uint16(xArgRM32),\n\t/*6078*/ uint16(xMatch),\n\t/*6079*/ uint16(xCondIsMem), 6082, 0,\n\t/*6082*/ uint16(xSetOp), uint16(RDGSBASE),\n\t/*6084*/ uint16(xArgRM32),\n\t/*6085*/ uint16(xMatch),\n\t/*6086*/ uint16(xCondIsMem), 6089, 0,\n\t/*6089*/ uint16(xSetOp), uint16(RDGSBASE),\n\t/*6091*/ uint16(xArgRM64),\n\t/*6092*/ uint16(xMatch),\n\t/*6093*/ uint16(xCondIs64), 6096, 6100,\n\t/*6096*/ uint16(xSetOp), uint16(LDMXCSR),\n\t/*6098*/ uint16(xArgM32),\n\t/*6099*/ uint16(xMatch),\n\t/*6100*/ uint16(xCondPrefix), 2,\n\t0xF3, 6106,\n\t0x0, 6096,\n\t/*6106*/ uint16(xCondDataSize), 6110, 6114, 6118,\n\t/*6110*/ uint16(xSetOp), uint16(WRFSBASE),\n\t/*6112*/ uint16(xArgRM32),\n\t/*6113*/ uint16(xMatch),\n\t/*6114*/ uint16(xSetOp), uint16(WRFSBASE),\n\t/*6116*/ uint16(xArgRM32),\n\t/*6117*/ uint16(xMatch),\n\t/*6118*/ uint16(xSetOp), uint16(WRFSBASE),\n\t/*6120*/ uint16(xArgRM64),\n\t/*6121*/ uint16(xMatch),\n\t/*6122*/ uint16(xCondIs64), 6125, 6129,\n\t/*6125*/ uint16(xSetOp), uint16(STMXCSR),\n\t/*6127*/ uint16(xArgM32),\n\t/*6128*/ uint16(xMatch),\n\t/*6129*/ uint16(xCondPrefix), 2,\n\t0xF3, 6135,\n\t0x0, 6125,\n\t/*6135*/ uint16(xCondDataSize), 6139, 6143, 6147,\n\t/*6139*/ uint16(xSetOp), uint16(WRGSBASE),\n\t/*6141*/ uint16(xArgRM32),\n\t/*6142*/ uint16(xMatch),\n\t/*6143*/ uint16(xSetOp), uint16(WRGSBASE),\n\t/*6145*/ uint16(xArgRM32),\n\t/*6146*/ uint16(xMatch),\n\t/*6147*/ uint16(xSetOp), uint16(WRGSBASE),\n\t/*6149*/ uint16(xArgRM64),\n\t/*6150*/ uint16(xMatch),\n\t/*6151*/ uint16(xCondIs64), 6154, 6166,\n\t/*6154*/ uint16(xCondDataSize), 6158, 6162, 0,\n\t/*6158*/ uint16(xSetOp), uint16(XSAVE),\n\t/*6160*/ uint16(xArgMem),\n\t/*6161*/ uint16(xMatch),\n\t/*6162*/ uint16(xSetOp), uint16(XSAVE),\n\t/*6164*/ uint16(xArgMem),\n\t/*6165*/ uint16(xMatch),\n\t/*6166*/ uint16(xCondDataSize), 6158, 6162, 6170,\n\t/*6170*/ uint16(xSetOp), uint16(XSAVE64),\n\t/*6172*/ uint16(xArgMem),\n\t/*6173*/ uint16(xMatch),\n\t/*6174*/ uint16(xCondIs64), 6177, 6189,\n\t/*6177*/ uint16(xCondDataSize), 6181, 6185, 0,\n\t/*6181*/ uint16(xSetOp), uint16(XRSTOR),\n\t/*6183*/ uint16(xArgMem),\n\t/*6184*/ uint16(xMatch),\n\t/*6185*/ uint16(xSetOp), uint16(XRSTOR),\n\t/*6187*/ uint16(xArgMem),\n\t/*6188*/ uint16(xMatch),\n\t/*6189*/ uint16(xCondDataSize), 6181, 6185, 6193,\n\t/*6193*/ uint16(xSetOp), uint16(XRSTOR64),\n\t/*6195*/ uint16(xArgMem),\n\t/*6196*/ uint16(xMatch),\n\t/*6197*/ uint16(xCondDataSize), 6201, 6205, 6209,\n\t/*6201*/ uint16(xSetOp), uint16(XSAVEOPT),\n\t/*6203*/ uint16(xArgMem),\n\t/*6204*/ uint16(xMatch),\n\t/*6205*/ uint16(xSetOp), uint16(XSAVEOPT),\n\t/*6207*/ uint16(xArgMem),\n\t/*6208*/ uint16(xMatch),\n\t/*6209*/ uint16(xSetOp), uint16(XSAVEOPT64),\n\t/*6211*/ uint16(xArgMem),\n\t/*6212*/ uint16(xMatch),\n\t/*6213*/ uint16(xSetOp), uint16(CLFLUSH),\n\t/*6215*/ uint16(xArgM8),\n\t/*6216*/ uint16(xMatch),\n\t/*6217*/ uint16(xSetOp), uint16(LFENCE),\n\t/*6219*/ uint16(xMatch),\n\t/*6220*/ uint16(xSetOp), uint16(MFENCE),\n\t/*6222*/ uint16(xMatch),\n\t/*6223*/ uint16(xSetOp), uint16(SFENCE),\n\t/*6225*/ uint16(xMatch),\n\t/*6226*/ uint16(xCondIs64), 6229, 6245,\n\t/*6229*/ uint16(xCondDataSize), 6233, 6239, 0,\n\t/*6233*/ uint16(xSetOp), uint16(IMUL),\n\t/*6235*/ uint16(xReadSlashR),\n\t/*6236*/ uint16(xArgR16),\n\t/*6237*/ uint16(xArgRM16),\n\t/*6238*/ uint16(xMatch),\n\t/*6239*/ uint16(xSetOp), uint16(IMUL),\n\t/*6241*/ uint16(xReadSlashR),\n\t/*6242*/ uint16(xArgR32),\n\t/*6243*/ uint16(xArgRM32),\n\t/*6244*/ uint16(xMatch),\n\t/*6245*/ uint16(xCondDataSize), 6233, 6239, 6249,\n\t/*6249*/ uint16(xSetOp), uint16(IMUL),\n\t/*6251*/ uint16(xReadSlashR),\n\t/*6252*/ uint16(xArgR64),\n\t/*6253*/ uint16(xArgRM64),\n\t/*6254*/ uint16(xMatch),\n\t/*6255*/ uint16(xSetOp), uint16(CMPXCHG),\n\t/*6257*/ uint16(xReadSlashR),\n\t/*6258*/ uint16(xArgRM8),\n\t/*6259*/ uint16(xArgR8),\n\t/*6260*/ uint16(xMatch),\n\t/*6261*/ uint16(xCondIs64), 6264, 6280,\n\t/*6264*/ uint16(xCondDataSize), 6268, 6274, 0,\n\t/*6268*/ uint16(xSetOp), uint16(CMPXCHG),\n\t/*6270*/ uint16(xReadSlashR),\n\t/*6271*/ uint16(xArgRM16),\n\t/*6272*/ uint16(xArgR16),\n\t/*6273*/ uint16(xMatch),\n\t/*6274*/ uint16(xSetOp), uint16(CMPXCHG),\n\t/*6276*/ uint16(xReadSlashR),\n\t/*6277*/ uint16(xArgRM32),\n\t/*6278*/ uint16(xArgR32),\n\t/*6279*/ uint16(xMatch),\n\t/*6280*/ uint16(xCondDataSize), 6268, 6274, 6284,\n\t/*6284*/ uint16(xSetOp), uint16(CMPXCHG),\n\t/*6286*/ uint16(xReadSlashR),\n\t/*6287*/ uint16(xArgRM64),\n\t/*6288*/ uint16(xArgR64),\n\t/*6289*/ uint16(xMatch),\n\t/*6290*/ uint16(xCondIs64), 6293, 6309,\n\t/*6293*/ uint16(xCondDataSize), 6297, 6303, 0,\n\t/*6297*/ uint16(xSetOp), uint16(LSS),\n\t/*6299*/ uint16(xReadSlashR),\n\t/*6300*/ uint16(xArgR16),\n\t/*6301*/ uint16(xArgM16colon16),\n\t/*6302*/ uint16(xMatch),\n\t/*6303*/ uint16(xSetOp), uint16(LSS),\n\t/*6305*/ uint16(xReadSlashR),\n\t/*6306*/ uint16(xArgR32),\n\t/*6307*/ uint16(xArgM16colon32),\n\t/*6308*/ uint16(xMatch),\n\t/*6309*/ uint16(xCondDataSize), 6297, 6303, 6313,\n\t/*6313*/ uint16(xSetOp), uint16(LSS),\n\t/*6315*/ uint16(xReadSlashR),\n\t/*6316*/ uint16(xArgR64),\n\t/*6317*/ uint16(xArgM16colon64),\n\t/*6318*/ uint16(xMatch),\n\t/*6319*/ uint16(xCondIs64), 6322, 6338,\n\t/*6322*/ uint16(xCondDataSize), 6326, 6332, 0,\n\t/*6326*/ uint16(xSetOp), uint16(BTR),\n\t/*6328*/ uint16(xReadSlashR),\n\t/*6329*/ uint16(xArgRM16),\n\t/*6330*/ uint16(xArgR16),\n\t/*6331*/ uint16(xMatch),\n\t/*6332*/ uint16(xSetOp), uint16(BTR),\n\t/*6334*/ uint16(xReadSlashR),\n\t/*6335*/ uint16(xArgRM32),\n\t/*6336*/ uint16(xArgR32),\n\t/*6337*/ uint16(xMatch),\n\t/*6338*/ uint16(xCondDataSize), 6326, 6332, 6342,\n\t/*6342*/ uint16(xSetOp), uint16(BTR),\n\t/*6344*/ uint16(xReadSlashR),\n\t/*6345*/ uint16(xArgRM64),\n\t/*6346*/ uint16(xArgR64),\n\t/*6347*/ uint16(xMatch),\n\t/*6348*/ uint16(xCondIs64), 6351, 6367,\n\t/*6351*/ uint16(xCondDataSize), 6355, 6361, 0,\n\t/*6355*/ uint16(xSetOp), uint16(LFS),\n\t/*6357*/ uint16(xReadSlashR),\n\t/*6358*/ uint16(xArgR16),\n\t/*6359*/ uint16(xArgM16colon16),\n\t/*6360*/ uint16(xMatch),\n\t/*6361*/ uint16(xSetOp), uint16(LFS),\n\t/*6363*/ uint16(xReadSlashR),\n\t/*6364*/ uint16(xArgR32),\n\t/*6365*/ uint16(xArgM16colon32),\n\t/*6366*/ uint16(xMatch),\n\t/*6367*/ uint16(xCondDataSize), 6355, 6361, 6371,\n\t/*6371*/ uint16(xSetOp), uint16(LFS),\n\t/*6373*/ uint16(xReadSlashR),\n\t/*6374*/ uint16(xArgR64),\n\t/*6375*/ uint16(xArgM16colon64),\n\t/*6376*/ uint16(xMatch),\n\t/*6377*/ uint16(xCondIs64), 6380, 6396,\n\t/*6380*/ uint16(xCondDataSize), 6384, 6390, 0,\n\t/*6384*/ uint16(xSetOp), uint16(LGS),\n\t/*6386*/ uint16(xReadSlashR),\n\t/*6387*/ uint16(xArgR16),\n\t/*6388*/ uint16(xArgM16colon16),\n\t/*6389*/ uint16(xMatch),\n\t/*6390*/ uint16(xSetOp), uint16(LGS),\n\t/*6392*/ uint16(xReadSlashR),\n\t/*6393*/ uint16(xArgR32),\n\t/*6394*/ uint16(xArgM16colon32),\n\t/*6395*/ uint16(xMatch),\n\t/*6396*/ uint16(xCondDataSize), 6384, 6390, 6400,\n\t/*6400*/ uint16(xSetOp), uint16(LGS),\n\t/*6402*/ uint16(xReadSlashR),\n\t/*6403*/ uint16(xArgR64),\n\t/*6404*/ uint16(xArgM16colon64),\n\t/*6405*/ uint16(xMatch),\n\t/*6406*/ uint16(xCondIs64), 6409, 6425,\n\t/*6409*/ uint16(xCondDataSize), 6413, 6419, 0,\n\t/*6413*/ uint16(xSetOp), uint16(MOVZX),\n\t/*6415*/ uint16(xReadSlashR),\n\t/*6416*/ uint16(xArgR16),\n\t/*6417*/ uint16(xArgRM8),\n\t/*6418*/ uint16(xMatch),\n\t/*6419*/ uint16(xSetOp), uint16(MOVZX),\n\t/*6421*/ uint16(xReadSlashR),\n\t/*6422*/ uint16(xArgR32),\n\t/*6423*/ uint16(xArgRM8),\n\t/*6424*/ uint16(xMatch),\n\t/*6425*/ uint16(xCondDataSize), 6413, 6419, 6429,\n\t/*6429*/ uint16(xSetOp), uint16(MOVZX),\n\t/*6431*/ uint16(xReadSlashR),\n\t/*6432*/ uint16(xArgR64),\n\t/*6433*/ uint16(xArgRM8),\n\t/*6434*/ uint16(xMatch),\n\t/*6435*/ uint16(xCondIs64), 6438, 6454,\n\t/*6438*/ uint16(xCondDataSize), 6442, 6448, 0,\n\t/*6442*/ uint16(xSetOp), uint16(MOVZX),\n\t/*6444*/ uint16(xReadSlashR),\n\t/*6445*/ uint16(xArgR16),\n\t/*6446*/ uint16(xArgRM16),\n\t/*6447*/ uint16(xMatch),\n\t/*6448*/ uint16(xSetOp), uint16(MOVZX),\n\t/*6450*/ uint16(xReadSlashR),\n\t/*6451*/ uint16(xArgR32),\n\t/*6452*/ uint16(xArgRM16),\n\t/*6453*/ uint16(xMatch),\n\t/*6454*/ uint16(xCondDataSize), 6442, 6448, 6458,\n\t/*6458*/ uint16(xSetOp), uint16(MOVZX),\n\t/*6460*/ uint16(xReadSlashR),\n\t/*6461*/ uint16(xArgR64),\n\t/*6462*/ uint16(xArgRM16),\n\t/*6463*/ uint16(xMatch),\n\t/*6464*/ uint16(xCondIs64), 6467, 6487,\n\t/*6467*/ uint16(xCondPrefix), 1,\n\t0xF3, 6471,\n\t/*6471*/ uint16(xCondDataSize), 6475, 6481, 0,\n\t/*6475*/ uint16(xSetOp), uint16(POPCNT),\n\t/*6477*/ uint16(xReadSlashR),\n\t/*6478*/ uint16(xArgR16),\n\t/*6479*/ uint16(xArgRM16),\n\t/*6480*/ uint16(xMatch),\n\t/*6481*/ uint16(xSetOp), uint16(POPCNT),\n\t/*6483*/ uint16(xReadSlashR),\n\t/*6484*/ uint16(xArgR32),\n\t/*6485*/ uint16(xArgRM32),\n\t/*6486*/ uint16(xMatch),\n\t/*6487*/ uint16(xCondPrefix), 1,\n\t0xF3, 6491,\n\t/*6491*/ uint16(xCondDataSize), 6475, 6481, 6495,\n\t/*6495*/ uint16(xSetOp), uint16(POPCNT),\n\t/*6497*/ uint16(xReadSlashR),\n\t/*6498*/ uint16(xArgR64),\n\t/*6499*/ uint16(xArgRM64),\n\t/*6500*/ uint16(xMatch),\n\t/*6501*/ uint16(xCondDataSize), 0, 6505, 0,\n\t/*6505*/ uint16(xSetOp), uint16(UD1),\n\t/*6507*/ uint16(xReadSlashR),\n\t/*6508*/ uint16(xArgR32),\n\t/*6509*/ uint16(xArgRM32),\n\t/*6510*/ uint16(xMatch),\n\t/*6511*/ uint16(xCondSlashR),\n\t0,    // 0\n\t0,    // 1\n\t0,    // 2\n\t0,    // 3\n\t6520, // 4\n\t6549, // 5\n\t6578, // 6\n\t6607, // 7\n\t/*6520*/ uint16(xCondIs64), 6523, 6539,\n\t/*6523*/ uint16(xCondDataSize), 6527, 6533, 0,\n\t/*6527*/ uint16(xSetOp), uint16(BT),\n\t/*6529*/ uint16(xReadIb),\n\t/*6530*/ uint16(xArgRM16),\n\t/*6531*/ uint16(xArgImm8u),\n\t/*6532*/ uint16(xMatch),\n\t/*6533*/ uint16(xSetOp), uint16(BT),\n\t/*6535*/ uint16(xReadIb),\n\t/*6536*/ uint16(xArgRM32),\n\t/*6537*/ uint16(xArgImm8u),\n\t/*6538*/ uint16(xMatch),\n\t/*6539*/ uint16(xCondDataSize), 6527, 6533, 6543,\n\t/*6543*/ uint16(xSetOp), uint16(BT),\n\t/*6545*/ uint16(xReadIb),\n\t/*6546*/ uint16(xArgRM64),\n\t/*6547*/ uint16(xArgImm8u),\n\t/*6548*/ uint16(xMatch),\n\t/*6549*/ uint16(xCondIs64), 6552, 6568,\n\t/*6552*/ uint16(xCondDataSize), 6556, 6562, 0,\n\t/*6556*/ uint16(xSetOp), uint16(BTS),\n\t/*6558*/ uint16(xReadIb),\n\t/*6559*/ uint16(xArgRM16),\n\t/*6560*/ uint16(xArgImm8u),\n\t/*6561*/ uint16(xMatch),\n\t/*6562*/ uint16(xSetOp), uint16(BTS),\n\t/*6564*/ uint16(xReadIb),\n\t/*6565*/ uint16(xArgRM32),\n\t/*6566*/ uint16(xArgImm8u),\n\t/*6567*/ uint16(xMatch),\n\t/*6568*/ uint16(xCondDataSize), 6556, 6562, 6572,\n\t/*6572*/ uint16(xSetOp), uint16(BTS),\n\t/*6574*/ uint16(xReadIb),\n\t/*6575*/ uint16(xArgRM64),\n\t/*6576*/ uint16(xArgImm8u),\n\t/*6577*/ uint16(xMatch),\n\t/*6578*/ uint16(xCondIs64), 6581, 6597,\n\t/*6581*/ uint16(xCondDataSize), 6585, 6591, 0,\n\t/*6585*/ uint16(xSetOp), uint16(BTR),\n\t/*6587*/ uint16(xReadIb),\n\t/*6588*/ uint16(xArgRM16),\n\t/*6589*/ uint16(xArgImm8u),\n\t/*6590*/ uint16(xMatch),\n\t/*6591*/ uint16(xSetOp), uint16(BTR),\n\t/*6593*/ uint16(xReadIb),\n\t/*6594*/ uint16(xArgRM32),\n\t/*6595*/ uint16(xArgImm8u),\n\t/*6596*/ uint16(xMatch),\n\t/*6597*/ uint16(xCondDataSize), 6585, 6591, 6601,\n\t/*6601*/ uint16(xSetOp), uint16(BTR),\n\t/*6603*/ uint16(xReadIb),\n\t/*6604*/ uint16(xArgRM64),\n\t/*6605*/ uint16(xArgImm8u),\n\t/*6606*/ uint16(xMatch),\n\t/*6607*/ uint16(xCondIs64), 6610, 6626,\n\t/*6610*/ uint16(xCondDataSize), 6614, 6620, 0,\n\t/*6614*/ uint16(xSetOp), uint16(BTC),\n\t/*6616*/ uint16(xReadIb),\n\t/*6617*/ uint16(xArgRM16),\n\t/*6618*/ uint16(xArgImm8u),\n\t/*6619*/ uint16(xMatch),\n\t/*6620*/ uint16(xSetOp), uint16(BTC),\n\t/*6622*/ uint16(xReadIb),\n\t/*6623*/ uint16(xArgRM32),\n\t/*6624*/ uint16(xArgImm8u),\n\t/*6625*/ uint16(xMatch),\n\t/*6626*/ uint16(xCondDataSize), 6614, 6620, 6630,\n\t/*6630*/ uint16(xSetOp), uint16(BTC),\n\t/*6632*/ uint16(xReadIb),\n\t/*6633*/ uint16(xArgRM64),\n\t/*6634*/ uint16(xArgImm8u),\n\t/*6635*/ uint16(xMatch),\n\t/*6636*/ uint16(xCondIs64), 6639, 6655,\n\t/*6639*/ uint16(xCondDataSize), 6643, 6649, 0,\n\t/*6643*/ uint16(xSetOp), uint16(BTC),\n\t/*6645*/ uint16(xReadSlashR),\n\t/*6646*/ uint16(xArgRM16),\n\t/*6647*/ uint16(xArgR16),\n\t/*6648*/ uint16(xMatch),\n\t/*6649*/ uint16(xSetOp), uint16(BTC),\n\t/*6651*/ uint16(xReadSlashR),\n\t/*6652*/ uint16(xArgRM32),\n\t/*6653*/ uint16(xArgR32),\n\t/*6654*/ uint16(xMatch),\n\t/*6655*/ uint16(xCondDataSize), 6643, 6649, 6659,\n\t/*6659*/ uint16(xSetOp), uint16(BTC),\n\t/*6661*/ uint16(xReadSlashR),\n\t/*6662*/ uint16(xArgRM64),\n\t/*6663*/ uint16(xArgR64),\n\t/*6664*/ uint16(xMatch),\n\t/*6665*/ uint16(xCondIs64), 6668, 6706,\n\t/*6668*/ uint16(xCondPrefix), 2,\n\t0xF3, 6690,\n\t0x0, 6674,\n\t/*6674*/ uint16(xCondDataSize), 6678, 6684, 0,\n\t/*6678*/ uint16(xSetOp), uint16(BSF),\n\t/*6680*/ uint16(xReadSlashR),\n\t/*6681*/ uint16(xArgR16),\n\t/*6682*/ uint16(xArgRM16),\n\t/*6683*/ uint16(xMatch),\n\t/*6684*/ uint16(xSetOp), uint16(BSF),\n\t/*6686*/ uint16(xReadSlashR),\n\t/*6687*/ uint16(xArgR32),\n\t/*6688*/ uint16(xArgRM32),\n\t/*6689*/ uint16(xMatch),\n\t/*6690*/ uint16(xCondDataSize), 6694, 6700, 0,\n\t/*6694*/ uint16(xSetOp), uint16(TZCNT),\n\t/*6696*/ uint16(xReadSlashR),\n\t/*6697*/ uint16(xArgR16),\n\t/*6698*/ uint16(xArgRM16),\n\t/*6699*/ uint16(xMatch),\n\t/*6700*/ uint16(xSetOp), uint16(TZCNT),\n\t/*6702*/ uint16(xReadSlashR),\n\t/*6703*/ uint16(xArgR32),\n\t/*6704*/ uint16(xArgRM32),\n\t/*6705*/ uint16(xMatch),\n\t/*6706*/ uint16(xCondPrefix), 2,\n\t0xF3, 6722,\n\t0x0, 6712,\n\t/*6712*/ uint16(xCondDataSize), 6678, 6684, 6716,\n\t/*6716*/ uint16(xSetOp), uint16(BSF),\n\t/*6718*/ uint16(xReadSlashR),\n\t/*6719*/ uint16(xArgR64),\n\t/*6720*/ uint16(xArgRM64),\n\t/*6721*/ uint16(xMatch),\n\t/*6722*/ uint16(xCondDataSize), 6694, 6700, 6726,\n\t/*6726*/ uint16(xSetOp), uint16(TZCNT),\n\t/*6728*/ uint16(xReadSlashR),\n\t/*6729*/ uint16(xArgR64),\n\t/*6730*/ uint16(xArgRM64),\n\t/*6731*/ uint16(xMatch),\n\t/*6732*/ uint16(xCondIs64), 6735, 6773,\n\t/*6735*/ uint16(xCondPrefix), 2,\n\t0xF3, 6757,\n\t0x0, 6741,\n\t/*6741*/ uint16(xCondDataSize), 6745, 6751, 0,\n\t/*6745*/ uint16(xSetOp), uint16(BSR),\n\t/*6747*/ uint16(xReadSlashR),\n\t/*6748*/ uint16(xArgR16),\n\t/*6749*/ uint16(xArgRM16),\n\t/*6750*/ uint16(xMatch),\n\t/*6751*/ uint16(xSetOp), uint16(BSR),\n\t/*6753*/ uint16(xReadSlashR),\n\t/*6754*/ uint16(xArgR32),\n\t/*6755*/ uint16(xArgRM32),\n\t/*6756*/ uint16(xMatch),\n\t/*6757*/ uint16(xCondDataSize), 6761, 6767, 0,\n\t/*6761*/ uint16(xSetOp), uint16(LZCNT),\n\t/*6763*/ uint16(xReadSlashR),\n\t/*6764*/ uint16(xArgR16),\n\t/*6765*/ uint16(xArgRM16),\n\t/*6766*/ uint16(xMatch),\n\t/*6767*/ uint16(xSetOp), uint16(LZCNT),\n\t/*6769*/ uint16(xReadSlashR),\n\t/*6770*/ uint16(xArgR32),\n\t/*6771*/ uint16(xArgRM32),\n\t/*6772*/ uint16(xMatch),\n\t/*6773*/ uint16(xCondPrefix), 2,\n\t0xF3, 6789,\n\t0x0, 6779,\n\t/*6779*/ uint16(xCondDataSize), 6745, 6751, 6783,\n\t/*6783*/ uint16(xSetOp), uint16(BSR),\n\t/*6785*/ uint16(xReadSlashR),\n\t/*6786*/ uint16(xArgR64),\n\t/*6787*/ uint16(xArgRM64),\n\t/*6788*/ uint16(xMatch),\n\t/*6789*/ uint16(xCondDataSize), 6761, 6767, 6793,\n\t/*6793*/ uint16(xSetOp), uint16(LZCNT),\n\t/*6795*/ uint16(xReadSlashR),\n\t/*6796*/ uint16(xArgR64),\n\t/*6797*/ uint16(xArgRM64),\n\t/*6798*/ uint16(xMatch),\n\t/*6799*/ uint16(xCondIs64), 6802, 6818,\n\t/*6802*/ uint16(xCondDataSize), 6806, 6812, 0,\n\t/*6806*/ uint16(xSetOp), uint16(MOVSX),\n\t/*6808*/ uint16(xReadSlashR),\n\t/*6809*/ uint16(xArgR16),\n\t/*6810*/ uint16(xArgRM8),\n\t/*6811*/ uint16(xMatch),\n\t/*6812*/ uint16(xSetOp), uint16(MOVSX),\n\t/*6814*/ uint16(xReadSlashR),\n\t/*6815*/ uint16(xArgR32),\n\t/*6816*/ uint16(xArgRM8),\n\t/*6817*/ uint16(xMatch),\n\t/*6818*/ uint16(xCondDataSize), 6806, 6812, 6822,\n\t/*6822*/ uint16(xSetOp), uint16(MOVSX),\n\t/*6824*/ uint16(xReadSlashR),\n\t/*6825*/ uint16(xArgR64),\n\t/*6826*/ uint16(xArgRM8),\n\t/*6827*/ uint16(xMatch),\n\t/*6828*/ uint16(xCondIs64), 6831, 6847,\n\t/*6831*/ uint16(xCondDataSize), 6835, 6841, 0,\n\t/*6835*/ uint16(xSetOp), uint16(MOVSX),\n\t/*6837*/ uint16(xReadSlashR),\n\t/*6838*/ uint16(xArgR16),\n\t/*6839*/ uint16(xArgRM16),\n\t/*6840*/ uint16(xMatch),\n\t/*6841*/ uint16(xSetOp), uint16(MOVSX),\n\t/*6843*/ uint16(xReadSlashR),\n\t/*6844*/ uint16(xArgR32),\n\t/*6845*/ uint16(xArgRM16),\n\t/*6846*/ uint16(xMatch),\n\t/*6847*/ uint16(xCondDataSize), 6835, 6841, 6851,\n\t/*6851*/ uint16(xSetOp), uint16(MOVSX),\n\t/*6853*/ uint16(xReadSlashR),\n\t/*6854*/ uint16(xArgR64),\n\t/*6855*/ uint16(xArgRM16),\n\t/*6856*/ uint16(xMatch),\n\t/*6857*/ uint16(xSetOp), uint16(XADD),\n\t/*6859*/ uint16(xReadSlashR),\n\t/*6860*/ uint16(xArgRM8),\n\t/*6861*/ uint16(xArgR8),\n\t/*6862*/ uint16(xMatch),\n\t/*6863*/ uint16(xCondIs64), 6866, 6882,\n\t/*6866*/ uint16(xCondDataSize), 6870, 6876, 0,\n\t/*6870*/ uint16(xSetOp), uint16(XADD),\n\t/*6872*/ uint16(xReadSlashR),\n\t/*6873*/ uint16(xArgRM16),\n\t/*6874*/ uint16(xArgR16),\n\t/*6875*/ uint16(xMatch),\n\t/*6876*/ uint16(xSetOp), uint16(XADD),\n\t/*6878*/ uint16(xReadSlashR),\n\t/*6879*/ uint16(xArgRM32),\n\t/*6880*/ uint16(xArgR32),\n\t/*6881*/ uint16(xMatch),\n\t/*6882*/ uint16(xCondDataSize), 6870, 6876, 6886,\n\t/*6886*/ uint16(xSetOp), uint16(XADD),\n\t/*6888*/ uint16(xReadSlashR),\n\t/*6889*/ uint16(xArgRM64),\n\t/*6890*/ uint16(xArgR64),\n\t/*6891*/ uint16(xMatch),\n\t/*6892*/ uint16(xCondPrefix), 4,\n\t0xF3, 6926,\n\t0xF2, 6918,\n\t0x66, 6910,\n\t0x0, 6902,\n\t/*6902*/ uint16(xSetOp), uint16(CMPPS),\n\t/*6904*/ uint16(xReadSlashR),\n\t/*6905*/ uint16(xReadIb),\n\t/*6906*/ uint16(xArgXmm1),\n\t/*6907*/ uint16(xArgXmm2M128),\n\t/*6908*/ uint16(xArgImm8u),\n\t/*6909*/ uint16(xMatch),\n\t/*6910*/ uint16(xSetOp), uint16(CMPPD),\n\t/*6912*/ uint16(xReadSlashR),\n\t/*6913*/ uint16(xReadIb),\n\t/*6914*/ uint16(xArgXmm1),\n\t/*6915*/ uint16(xArgXmm2M128),\n\t/*6916*/ uint16(xArgImm8u),\n\t/*6917*/ uint16(xMatch),\n\t/*6918*/ uint16(xSetOp), uint16(CMPSD_XMM),\n\t/*6920*/ uint16(xReadSlashR),\n\t/*6921*/ uint16(xReadIb),\n\t/*6922*/ uint16(xArgXmm1),\n\t/*6923*/ uint16(xArgXmm2M64),\n\t/*6924*/ uint16(xArgImm8u),\n\t/*6925*/ uint16(xMatch),\n\t/*6926*/ uint16(xSetOp), uint16(CMPSS),\n\t/*6928*/ uint16(xReadSlashR),\n\t/*6929*/ uint16(xReadIb),\n\t/*6930*/ uint16(xArgXmm1),\n\t/*6931*/ uint16(xArgXmm2M32),\n\t/*6932*/ uint16(xArgImm8u),\n\t/*6933*/ uint16(xMatch),\n\t/*6934*/ uint16(xCondIs64), 6937, 6953,\n\t/*6937*/ uint16(xCondDataSize), 6941, 6947, 0,\n\t/*6941*/ uint16(xSetOp), uint16(MOVNTI),\n\t/*6943*/ uint16(xReadSlashR),\n\t/*6944*/ uint16(xArgM32),\n\t/*6945*/ uint16(xArgR32),\n\t/*6946*/ uint16(xMatch),\n\t/*6947*/ uint16(xSetOp), uint16(MOVNTI),\n\t/*6949*/ uint16(xReadSlashR),\n\t/*6950*/ uint16(xArgM32),\n\t/*6951*/ uint16(xArgR32),\n\t/*6952*/ uint16(xMatch),\n\t/*6953*/ uint16(xCondDataSize), 6941, 6947, 6957,\n\t/*6957*/ uint16(xSetOp), uint16(MOVNTI),\n\t/*6959*/ uint16(xReadSlashR),\n\t/*6960*/ uint16(xArgM64),\n\t/*6961*/ uint16(xArgR64),\n\t/*6962*/ uint16(xMatch),\n\t/*6963*/ uint16(xCondPrefix), 2,\n\t0x66, 6977,\n\t0x0, 6969,\n\t/*6969*/ uint16(xSetOp), uint16(PINSRW),\n\t/*6971*/ uint16(xReadSlashR),\n\t/*6972*/ uint16(xReadIb),\n\t/*6973*/ uint16(xArgMm),\n\t/*6974*/ uint16(xArgR32M16),\n\t/*6975*/ uint16(xArgImm8u),\n\t/*6976*/ uint16(xMatch),\n\t/*6977*/ uint16(xSetOp), uint16(PINSRW),\n\t/*6979*/ uint16(xReadSlashR),\n\t/*6980*/ uint16(xReadIb),\n\t/*6981*/ uint16(xArgXmm),\n\t/*6982*/ uint16(xArgR32M16),\n\t/*6983*/ uint16(xArgImm8u),\n\t/*6984*/ uint16(xMatch),\n\t/*6985*/ uint16(xCondPrefix), 2,\n\t0x66, 6999,\n\t0x0, 6991,\n\t/*6991*/ uint16(xSetOp), uint16(PEXTRW),\n\t/*6993*/ uint16(xReadSlashR),\n\t/*6994*/ uint16(xReadIb),\n\t/*6995*/ uint16(xArgR32),\n\t/*6996*/ uint16(xArgMm2),\n\t/*6997*/ uint16(xArgImm8u),\n\t/*6998*/ uint16(xMatch),\n\t/*6999*/ uint16(xSetOp), uint16(PEXTRW),\n\t/*7001*/ uint16(xReadSlashR),\n\t/*7002*/ uint16(xReadIb),\n\t/*7003*/ uint16(xArgR32),\n\t/*7004*/ uint16(xArgXmm2),\n\t/*7005*/ uint16(xArgImm8u),\n\t/*7006*/ uint16(xMatch),\n\t/*7007*/ uint16(xCondPrefix), 2,\n\t0x66, 7021,\n\t0x0, 7013,\n\t/*7013*/ uint16(xSetOp), uint16(SHUFPS),\n\t/*7015*/ uint16(xReadSlashR),\n\t/*7016*/ uint16(xReadIb),\n\t/*7017*/ uint16(xArgXmm1),\n\t/*7018*/ uint16(xArgXmm2M128),\n\t/*7019*/ uint16(xArgImm8u),\n\t/*7020*/ uint16(xMatch),\n\t/*7021*/ uint16(xSetOp), uint16(SHUFPD),\n\t/*7023*/ uint16(xReadSlashR),\n\t/*7024*/ uint16(xReadIb),\n\t/*7025*/ uint16(xArgXmm1),\n\t/*7026*/ uint16(xArgXmm2M128),\n\t/*7027*/ uint16(xArgImm8u),\n\t/*7028*/ uint16(xMatch),\n\t/*7029*/ uint16(xCondSlashR),\n\t0,    // 0\n\t7038, // 1\n\t0,    // 2\n\t7061, // 3\n\t7084, // 4\n\t7107, // 5\n\t7130, // 6\n\t0,    // 7\n\t/*7038*/ uint16(xCondIs64), 7041, 7053,\n\t/*7041*/ uint16(xCondDataSize), 7045, 7049, 0,\n\t/*7045*/ uint16(xSetOp), uint16(CMPXCHG8B),\n\t/*7047*/ uint16(xArgM64),\n\t/*7048*/ uint16(xMatch),\n\t/*7049*/ uint16(xSetOp), uint16(CMPXCHG8B),\n\t/*7051*/ uint16(xArgM64),\n\t/*7052*/ uint16(xMatch),\n\t/*7053*/ uint16(xCondDataSize), 7045, 7049, 7057,\n\t/*7057*/ uint16(xSetOp), uint16(CMPXCHG16B),\n\t/*7059*/ uint16(xArgM128),\n\t/*7060*/ uint16(xMatch),\n\t/*7061*/ uint16(xCondIs64), 7064, 7076,\n\t/*7064*/ uint16(xCondDataSize), 7068, 7072, 0,\n\t/*7068*/ uint16(xSetOp), uint16(XRSTORS),\n\t/*7070*/ uint16(xArgMem),\n\t/*7071*/ uint16(xMatch),\n\t/*7072*/ uint16(xSetOp), uint16(XRSTORS),\n\t/*7074*/ uint16(xArgMem),\n\t/*7075*/ uint16(xMatch),\n\t/*7076*/ uint16(xCondDataSize), 7068, 7072, 7080,\n\t/*7080*/ uint16(xSetOp), uint16(XRSTORS64),\n\t/*7082*/ uint16(xArgMem),\n\t/*7083*/ uint16(xMatch),\n\t/*7084*/ uint16(xCondIs64), 7087, 7099,\n\t/*7087*/ uint16(xCondDataSize), 7091, 7095, 0,\n\t/*7091*/ uint16(xSetOp), uint16(XSAVEC),\n\t/*7093*/ uint16(xArgMem),\n\t/*7094*/ uint16(xMatch),\n\t/*7095*/ uint16(xSetOp), uint16(XSAVEC),\n\t/*7097*/ uint16(xArgMem),\n\t/*7098*/ uint16(xMatch),\n\t/*7099*/ uint16(xCondDataSize), 7091, 7095, 7103,\n\t/*7103*/ uint16(xSetOp), uint16(XSAVEC64),\n\t/*7105*/ uint16(xArgMem),\n\t/*7106*/ uint16(xMatch),\n\t/*7107*/ uint16(xCondIs64), 7110, 7122,\n\t/*7110*/ uint16(xCondDataSize), 7114, 7118, 0,\n\t/*7114*/ uint16(xSetOp), uint16(XSAVES),\n\t/*7116*/ uint16(xArgMem),\n\t/*7117*/ uint16(xMatch),\n\t/*7118*/ uint16(xSetOp), uint16(XSAVES),\n\t/*7120*/ uint16(xArgMem),\n\t/*7121*/ uint16(xMatch),\n\t/*7122*/ uint16(xCondDataSize), 7114, 7118, 7126,\n\t/*7126*/ uint16(xSetOp), uint16(XSAVES64),\n\t/*7128*/ uint16(xArgMem),\n\t/*7129*/ uint16(xMatch),\n\t/*7130*/ uint16(xCondIs64), 7133, 7151,\n\t/*7133*/ uint16(xCondDataSize), 7137, 7144, 0,\n\t/*7137*/ uint16(xCondIsMem), 7140, 0,\n\t/*7140*/ uint16(xSetOp), uint16(RDRAND),\n\t/*7142*/ uint16(xArgRmf16),\n\t/*7143*/ uint16(xMatch),\n\t/*7144*/ uint16(xCondIsMem), 7147, 0,\n\t/*7147*/ uint16(xSetOp), uint16(RDRAND),\n\t/*7149*/ uint16(xArgRmf32),\n\t/*7150*/ uint16(xMatch),\n\t/*7151*/ uint16(xCondDataSize), 7137, 7144, 7155,\n\t/*7155*/ uint16(xSetOp), uint16(RDRAND),\n\t/*7157*/ uint16(xMatch),\n\t/*7158*/ uint16(xCondIs64), 7161, 7173,\n\t/*7161*/ uint16(xCondDataSize), 7165, 7169, 0,\n\t/*7165*/ uint16(xSetOp), uint16(BSWAP),\n\t/*7167*/ uint16(xArgR16op),\n\t/*7168*/ uint16(xMatch),\n\t/*7169*/ uint16(xSetOp), uint16(BSWAP),\n\t/*7171*/ uint16(xArgR32op),\n\t/*7172*/ uint16(xMatch),\n\t/*7173*/ uint16(xCondDataSize), 7165, 7169, 7177,\n\t/*7177*/ uint16(xSetOp), uint16(BSWAP),\n\t/*7179*/ uint16(xArgR64op),\n\t/*7180*/ uint16(xMatch),\n\t/*7181*/ uint16(xCondPrefix), 2,\n\t0xF2, 7193,\n\t0x66, 7187,\n\t/*7187*/ uint16(xSetOp), uint16(ADDSUBPD),\n\t/*7189*/ uint16(xReadSlashR),\n\t/*7190*/ uint16(xArgXmm1),\n\t/*7191*/ uint16(xArgXmm2M128),\n\t/*7192*/ uint16(xMatch),\n\t/*7193*/ uint16(xSetOp), uint16(ADDSUBPS),\n\t/*7195*/ uint16(xReadSlashR),\n\t/*7196*/ uint16(xArgXmm1),\n\t/*7197*/ uint16(xArgXmm2M128),\n\t/*7198*/ uint16(xMatch),\n\t/*7199*/ uint16(xCondPrefix), 2,\n\t0x66, 7211,\n\t0x0, 7205,\n\t/*7205*/ uint16(xSetOp), uint16(PSRLW),\n\t/*7207*/ uint16(xReadSlashR),\n\t/*7208*/ uint16(xArgMm),\n\t/*7209*/ uint16(xArgMmM64),\n\t/*7210*/ uint16(xMatch),\n\t/*7211*/ uint16(xSetOp), uint16(PSRLW),\n\t/*7213*/ uint16(xReadSlashR),\n\t/*7214*/ uint16(xArgXmm1),\n\t/*7215*/ uint16(xArgXmm2M128),\n\t/*7216*/ uint16(xMatch),\n\t/*7217*/ uint16(xCondPrefix), 2,\n\t0x66, 7229,\n\t0x0, 7223,\n\t/*7223*/ uint16(xSetOp), uint16(PSRLD),\n\t/*7225*/ uint16(xReadSlashR),\n\t/*7226*/ uint16(xArgMm),\n\t/*7227*/ uint16(xArgMmM64),\n\t/*7228*/ uint16(xMatch),\n\t/*7229*/ uint16(xSetOp), uint16(PSRLD),\n\t/*7231*/ uint16(xReadSlashR),\n\t/*7232*/ uint16(xArgXmm1),\n\t/*7233*/ uint16(xArgXmm2M128),\n\t/*7234*/ uint16(xMatch),\n\t/*7235*/ uint16(xCondPrefix), 2,\n\t0x66, 7247,\n\t0x0, 7241,\n\t/*7241*/ uint16(xSetOp), uint16(PSRLQ),\n\t/*7243*/ uint16(xReadSlashR),\n\t/*7244*/ uint16(xArgMm),\n\t/*7245*/ uint16(xArgMmM64),\n\t/*7246*/ uint16(xMatch),\n\t/*7247*/ uint16(xSetOp), uint16(PSRLQ),\n\t/*7249*/ uint16(xReadSlashR),\n\t/*7250*/ uint16(xArgXmm1),\n\t/*7251*/ uint16(xArgXmm2M128),\n\t/*7252*/ uint16(xMatch),\n\t/*7253*/ uint16(xCondPrefix), 2,\n\t0x66, 7265,\n\t0x0, 7259,\n\t/*7259*/ uint16(xSetOp), uint16(PADDQ),\n\t/*7261*/ uint16(xReadSlashR),\n\t/*7262*/ uint16(xArgMm1),\n\t/*7263*/ uint16(xArgMm2M64),\n\t/*7264*/ uint16(xMatch),\n\t/*7265*/ uint16(xSetOp), uint16(PADDQ),\n\t/*7267*/ uint16(xReadSlashR),\n\t/*7268*/ uint16(xArgXmm1),\n\t/*7269*/ uint16(xArgXmm2M128),\n\t/*7270*/ uint16(xMatch),\n\t/*7271*/ uint16(xCondPrefix), 2,\n\t0x66, 7283,\n\t0x0, 7277,\n\t/*7277*/ uint16(xSetOp), uint16(PMULLW),\n\t/*7279*/ uint16(xReadSlashR),\n\t/*7280*/ uint16(xArgMm),\n\t/*7281*/ uint16(xArgMmM64),\n\t/*7282*/ uint16(xMatch),\n\t/*7283*/ uint16(xSetOp), uint16(PMULLW),\n\t/*7285*/ uint16(xReadSlashR),\n\t/*7286*/ uint16(xArgXmm1),\n\t/*7287*/ uint16(xArgXmm2M128),\n\t/*7288*/ uint16(xMatch),\n\t/*7289*/ uint16(xCondPrefix), 3,\n\t0xF3, 7309,\n\t0xF2, 7303,\n\t0x66, 7297,\n\t/*7297*/ uint16(xSetOp), uint16(MOVQ),\n\t/*7299*/ uint16(xReadSlashR),\n\t/*7300*/ uint16(xArgXmm2M64),\n\t/*7301*/ uint16(xArgXmm1),\n\t/*7302*/ uint16(xMatch),\n\t/*7303*/ uint16(xSetOp), uint16(MOVDQ2Q),\n\t/*7305*/ uint16(xReadSlashR),\n\t/*7306*/ uint16(xArgMm),\n\t/*7307*/ uint16(xArgXmm2),\n\t/*7308*/ uint16(xMatch),\n\t/*7309*/ uint16(xSetOp), uint16(MOVQ2DQ),\n\t/*7311*/ uint16(xReadSlashR),\n\t/*7312*/ uint16(xArgXmm1),\n\t/*7313*/ uint16(xArgMm2),\n\t/*7314*/ uint16(xMatch),\n\t/*7315*/ uint16(xCondPrefix), 2,\n\t0x66, 7327,\n\t0x0, 7321,\n\t/*7321*/ uint16(xSetOp), uint16(PMOVMSKB),\n\t/*7323*/ uint16(xReadSlashR),\n\t/*7324*/ uint16(xArgR32),\n\t/*7325*/ uint16(xArgMm2),\n\t/*7326*/ uint16(xMatch),\n\t/*7327*/ uint16(xSetOp), uint16(PMOVMSKB),\n\t/*7329*/ uint16(xReadSlashR),\n\t/*7330*/ uint16(xArgR32),\n\t/*7331*/ uint16(xArgXmm2),\n\t/*7332*/ uint16(xMatch),\n\t/*7333*/ uint16(xCondPrefix), 2,\n\t0x66, 7345,\n\t0x0, 7339,\n\t/*7339*/ uint16(xSetOp), uint16(PSUBUSB),\n\t/*7341*/ uint16(xReadSlashR),\n\t/*7342*/ uint16(xArgMm),\n\t/*7343*/ uint16(xArgMmM64),\n\t/*7344*/ uint16(xMatch),\n\t/*7345*/ uint16(xSetOp), uint16(PSUBUSB),\n\t/*7347*/ uint16(xReadSlashR),\n\t/*7348*/ uint16(xArgXmm1),\n\t/*7349*/ uint16(xArgXmm2M128),\n\t/*7350*/ uint16(xMatch),\n\t/*7351*/ uint16(xCondPrefix), 2,\n\t0x66, 7363,\n\t0x0, 7357,\n\t/*7357*/ uint16(xSetOp), uint16(PSUBUSW),\n\t/*7359*/ uint16(xReadSlashR),\n\t/*7360*/ uint16(xArgMm),\n\t/*7361*/ uint16(xArgMmM64),\n\t/*7362*/ uint16(xMatch),\n\t/*7363*/ uint16(xSetOp), uint16(PSUBUSW),\n\t/*7365*/ uint16(xReadSlashR),\n\t/*7366*/ uint16(xArgXmm1),\n\t/*7367*/ uint16(xArgXmm2M128),\n\t/*7368*/ uint16(xMatch),\n\t/*7369*/ uint16(xCondPrefix), 2,\n\t0x66, 7381,\n\t0x0, 7375,\n\t/*7375*/ uint16(xSetOp), uint16(PMINUB),\n\t/*7377*/ uint16(xReadSlashR),\n\t/*7378*/ uint16(xArgMm1),\n\t/*7379*/ uint16(xArgMm2M64),\n\t/*7380*/ uint16(xMatch),\n\t/*7381*/ uint16(xSetOp), uint16(PMINUB),\n\t/*7383*/ uint16(xReadSlashR),\n\t/*7384*/ uint16(xArgXmm1),\n\t/*7385*/ uint16(xArgXmm2M128),\n\t/*7386*/ uint16(xMatch),\n\t/*7387*/ uint16(xCondPrefix), 2,\n\t0x66, 7399,\n\t0x0, 7393,\n\t/*7393*/ uint16(xSetOp), uint16(PAND),\n\t/*7395*/ uint16(xReadSlashR),\n\t/*7396*/ uint16(xArgMm),\n\t/*7397*/ uint16(xArgMmM64),\n\t/*7398*/ uint16(xMatch),\n\t/*7399*/ uint16(xSetOp), uint16(PAND),\n\t/*7401*/ uint16(xReadSlashR),\n\t/*7402*/ uint16(xArgXmm1),\n\t/*7403*/ uint16(xArgXmm2M128),\n\t/*7404*/ uint16(xMatch),\n\t/*7405*/ uint16(xCondPrefix), 2,\n\t0x66, 7417,\n\t0x0, 7411,\n\t/*7411*/ uint16(xSetOp), uint16(PADDUSB),\n\t/*7413*/ uint16(xReadSlashR),\n\t/*7414*/ uint16(xArgMm),\n\t/*7415*/ uint16(xArgMmM64),\n\t/*7416*/ uint16(xMatch),\n\t/*7417*/ uint16(xSetOp), uint16(PADDUSB),\n\t/*7419*/ uint16(xReadSlashR),\n\t/*7420*/ uint16(xArgXmm1),\n\t/*7421*/ uint16(xArgXmm2M128),\n\t/*7422*/ uint16(xMatch),\n\t/*7423*/ uint16(xCondPrefix), 2,\n\t0x66, 7435,\n\t0x0, 7429,\n\t/*7429*/ uint16(xSetOp), uint16(PADDUSW),\n\t/*7431*/ uint16(xReadSlashR),\n\t/*7432*/ uint16(xArgMm),\n\t/*7433*/ uint16(xArgMmM64),\n\t/*7434*/ uint16(xMatch),\n\t/*7435*/ uint16(xSetOp), uint16(PADDUSW),\n\t/*7437*/ uint16(xReadSlashR),\n\t/*7438*/ uint16(xArgXmm1),\n\t/*7439*/ uint16(xArgXmm2M128),\n\t/*7440*/ uint16(xMatch),\n\t/*7441*/ uint16(xCondPrefix), 2,\n\t0x66, 7453,\n\t0x0, 7447,\n\t/*7447*/ uint16(xSetOp), uint16(PMAXUB),\n\t/*7449*/ uint16(xReadSlashR),\n\t/*7450*/ uint16(xArgMm1),\n\t/*7451*/ uint16(xArgMm2M64),\n\t/*7452*/ uint16(xMatch),\n\t/*7453*/ uint16(xSetOp), uint16(PMAXUB),\n\t/*7455*/ uint16(xReadSlashR),\n\t/*7456*/ uint16(xArgXmm1),\n\t/*7457*/ uint16(xArgXmm2M128),\n\t/*7458*/ uint16(xMatch),\n\t/*7459*/ uint16(xCondPrefix), 2,\n\t0x66, 7471,\n\t0x0, 7465,\n\t/*7465*/ uint16(xSetOp), uint16(PANDN),\n\t/*7467*/ uint16(xReadSlashR),\n\t/*7468*/ uint16(xArgMm),\n\t/*7469*/ uint16(xArgMmM64),\n\t/*7470*/ uint16(xMatch),\n\t/*7471*/ uint16(xSetOp), uint16(PANDN),\n\t/*7473*/ uint16(xReadSlashR),\n\t/*7474*/ uint16(xArgXmm1),\n\t/*7475*/ uint16(xArgXmm2M128),\n\t/*7476*/ uint16(xMatch),\n\t/*7477*/ uint16(xCondPrefix), 2,\n\t0x66, 7489,\n\t0x0, 7483,\n\t/*7483*/ uint16(xSetOp), uint16(PAVGB),\n\t/*7485*/ uint16(xReadSlashR),\n\t/*7486*/ uint16(xArgMm1),\n\t/*7487*/ uint16(xArgMm2M64),\n\t/*7488*/ uint16(xMatch),\n\t/*7489*/ uint16(xSetOp), uint16(PAVGB),\n\t/*7491*/ uint16(xReadSlashR),\n\t/*7492*/ uint16(xArgXmm1),\n\t/*7493*/ uint16(xArgXmm2M128),\n\t/*7494*/ uint16(xMatch),\n\t/*7495*/ uint16(xCondPrefix), 2,\n\t0x66, 7507,\n\t0x0, 7501,\n\t/*7501*/ uint16(xSetOp), uint16(PSRAW),\n\t/*7503*/ uint16(xReadSlashR),\n\t/*7504*/ uint16(xArgMm),\n\t/*7505*/ uint16(xArgMmM64),\n\t/*7506*/ uint16(xMatch),\n\t/*7507*/ uint16(xSetOp), uint16(PSRAW),\n\t/*7509*/ uint16(xReadSlashR),\n\t/*7510*/ uint16(xArgXmm1),\n\t/*7511*/ uint16(xArgXmm2M128),\n\t/*7512*/ uint16(xMatch),\n\t/*7513*/ uint16(xCondPrefix), 2,\n\t0x66, 7525,\n\t0x0, 7519,\n\t/*7519*/ uint16(xSetOp), uint16(PSRAD),\n\t/*7521*/ uint16(xReadSlashR),\n\t/*7522*/ uint16(xArgMm),\n\t/*7523*/ uint16(xArgMmM64),\n\t/*7524*/ uint16(xMatch),\n\t/*7525*/ uint16(xSetOp), uint16(PSRAD),\n\t/*7527*/ uint16(xReadSlashR),\n\t/*7528*/ uint16(xArgXmm1),\n\t/*7529*/ uint16(xArgXmm2M128),\n\t/*7530*/ uint16(xMatch),\n\t/*7531*/ uint16(xCondPrefix), 2,\n\t0x66, 7543,\n\t0x0, 7537,\n\t/*7537*/ uint16(xSetOp), uint16(PAVGW),\n\t/*7539*/ uint16(xReadSlashR),\n\t/*7540*/ uint16(xArgMm1),\n\t/*7541*/ uint16(xArgMm2M64),\n\t/*7542*/ uint16(xMatch),\n\t/*7543*/ uint16(xSetOp), uint16(PAVGW),\n\t/*7545*/ uint16(xReadSlashR),\n\t/*7546*/ uint16(xArgXmm1),\n\t/*7547*/ uint16(xArgXmm2M128),\n\t/*7548*/ uint16(xMatch),\n\t/*7549*/ uint16(xCondPrefix), 2,\n\t0x66, 7561,\n\t0x0, 7555,\n\t/*7555*/ uint16(xSetOp), uint16(PMULHUW),\n\t/*7557*/ uint16(xReadSlashR),\n\t/*7558*/ uint16(xArgMm1),\n\t/*7559*/ uint16(xArgMm2M64),\n\t/*7560*/ uint16(xMatch),\n\t/*7561*/ uint16(xSetOp), uint16(PMULHUW),\n\t/*7563*/ uint16(xReadSlashR),\n\t/*7564*/ uint16(xArgXmm1),\n\t/*7565*/ uint16(xArgXmm2M128),\n\t/*7566*/ uint16(xMatch),\n\t/*7567*/ uint16(xCondPrefix), 2,\n\t0x66, 7579,\n\t0x0, 7573,\n\t/*7573*/ uint16(xSetOp), uint16(PMULHW),\n\t/*7575*/ uint16(xReadSlashR),\n\t/*7576*/ uint16(xArgMm),\n\t/*7577*/ uint16(xArgMmM64),\n\t/*7578*/ uint16(xMatch),\n\t/*7579*/ uint16(xSetOp), uint16(PMULHW),\n\t/*7581*/ uint16(xReadSlashR),\n\t/*7582*/ uint16(xArgXmm1),\n\t/*7583*/ uint16(xArgXmm2M128),\n\t/*7584*/ uint16(xMatch),\n\t/*7585*/ uint16(xCondPrefix), 3,\n\t0xF3, 7605,\n\t0xF2, 7599,\n\t0x66, 7593,\n\t/*7593*/ uint16(xSetOp), uint16(CVTTPD2DQ),\n\t/*7595*/ uint16(xReadSlashR),\n\t/*7596*/ uint16(xArgXmm1),\n\t/*7597*/ uint16(xArgXmm2M128),\n\t/*7598*/ uint16(xMatch),\n\t/*7599*/ uint16(xSetOp), uint16(CVTPD2DQ),\n\t/*7601*/ uint16(xReadSlashR),\n\t/*7602*/ uint16(xArgXmm1),\n\t/*7603*/ uint16(xArgXmm2M128),\n\t/*7604*/ uint16(xMatch),\n\t/*7605*/ uint16(xSetOp), uint16(CVTDQ2PD),\n\t/*7607*/ uint16(xReadSlashR),\n\t/*7608*/ uint16(xArgXmm1),\n\t/*7609*/ uint16(xArgXmm2M64),\n\t/*7610*/ uint16(xMatch),\n\t/*7611*/ uint16(xCondPrefix), 2,\n\t0x66, 7623,\n\t0x0, 7617,\n\t/*7617*/ uint16(xSetOp), uint16(MOVNTQ),\n\t/*7619*/ uint16(xReadSlashR),\n\t/*7620*/ uint16(xArgM64),\n\t/*7621*/ uint16(xArgMm),\n\t/*7622*/ uint16(xMatch),\n\t/*7623*/ uint16(xSetOp), uint16(MOVNTDQ),\n\t/*7625*/ uint16(xReadSlashR),\n\t/*7626*/ uint16(xArgM128),\n\t/*7627*/ uint16(xArgXmm),\n\t/*7628*/ uint16(xMatch),\n\t/*7629*/ uint16(xCondPrefix), 2,\n\t0x66, 7641,\n\t0x0, 7635,\n\t/*7635*/ uint16(xSetOp), uint16(PSUBSB),\n\t/*7637*/ uint16(xReadSlashR),\n\t/*7638*/ uint16(xArgMm),\n\t/*7639*/ uint16(xArgMmM64),\n\t/*7640*/ uint16(xMatch),\n\t/*7641*/ uint16(xSetOp), uint16(PSUBSB),\n\t/*7643*/ uint16(xReadSlashR),\n\t/*7644*/ uint16(xArgXmm1),\n\t/*7645*/ uint16(xArgXmm2M128),\n\t/*7646*/ uint16(xMatch),\n\t/*7647*/ uint16(xCondPrefix), 2,\n\t0x66, 7659,\n\t0x0, 7653,\n\t/*7653*/ uint16(xSetOp), uint16(PSUBSW),\n\t/*7655*/ uint16(xReadSlashR),\n\t/*7656*/ uint16(xArgMm),\n\t/*7657*/ uint16(xArgMmM64),\n\t/*7658*/ uint16(xMatch),\n\t/*7659*/ uint16(xSetOp), uint16(PSUBSW),\n\t/*7661*/ uint16(xReadSlashR),\n\t/*7662*/ uint16(xArgXmm1),\n\t/*7663*/ uint16(xArgXmm2M128),\n\t/*7664*/ uint16(xMatch),\n\t/*7665*/ uint16(xCondPrefix), 2,\n\t0x66, 7677,\n\t0x0, 7671,\n\t/*7671*/ uint16(xSetOp), uint16(PMINSW),\n\t/*7673*/ uint16(xReadSlashR),\n\t/*7674*/ uint16(xArgMm1),\n\t/*7675*/ uint16(xArgMm2M64),\n\t/*7676*/ uint16(xMatch),\n\t/*7677*/ uint16(xSetOp), uint16(PMINSW),\n\t/*7679*/ uint16(xReadSlashR),\n\t/*7680*/ uint16(xArgXmm1),\n\t/*7681*/ uint16(xArgXmm2M128),\n\t/*7682*/ uint16(xMatch),\n\t/*7683*/ uint16(xCondPrefix), 2,\n\t0x66, 7695,\n\t0x0, 7689,\n\t/*7689*/ uint16(xSetOp), uint16(POR),\n\t/*7691*/ uint16(xReadSlashR),\n\t/*7692*/ uint16(xArgMm),\n\t/*7693*/ uint16(xArgMmM64),\n\t/*7694*/ uint16(xMatch),\n\t/*7695*/ uint16(xSetOp), uint16(POR),\n\t/*7697*/ uint16(xReadSlashR),\n\t/*7698*/ uint16(xArgXmm1),\n\t/*7699*/ uint16(xArgXmm2M128),\n\t/*7700*/ uint16(xMatch),\n\t/*7701*/ uint16(xCondPrefix), 2,\n\t0x66, 7713,\n\t0x0, 7707,\n\t/*7707*/ uint16(xSetOp), uint16(PADDSB),\n\t/*7709*/ uint16(xReadSlashR),\n\t/*7710*/ uint16(xArgMm),\n\t/*7711*/ uint16(xArgMmM64),\n\t/*7712*/ uint16(xMatch),\n\t/*7713*/ uint16(xSetOp), uint16(PADDSB),\n\t/*7715*/ uint16(xReadSlashR),\n\t/*7716*/ uint16(xArgXmm1),\n\t/*7717*/ uint16(xArgXmm2M128),\n\t/*7718*/ uint16(xMatch),\n\t/*7719*/ uint16(xCondPrefix), 2,\n\t0x66, 7731,\n\t0x0, 7725,\n\t/*7725*/ uint16(xSetOp), uint16(PADDSW),\n\t/*7727*/ uint16(xReadSlashR),\n\t/*7728*/ uint16(xArgMm),\n\t/*7729*/ uint16(xArgMmM64),\n\t/*7730*/ uint16(xMatch),\n\t/*7731*/ uint16(xSetOp), uint16(PADDSW),\n\t/*7733*/ uint16(xReadSlashR),\n\t/*7734*/ uint16(xArgXmm1),\n\t/*7735*/ uint16(xArgXmm2M128),\n\t/*7736*/ uint16(xMatch),\n\t/*7737*/ uint16(xCondPrefix), 2,\n\t0x66, 7749,\n\t0x0, 7743,\n\t/*7743*/ uint16(xSetOp), uint16(PMAXSW),\n\t/*7745*/ uint16(xReadSlashR),\n\t/*7746*/ uint16(xArgMm1),\n\t/*7747*/ uint16(xArgMm2M64),\n\t/*7748*/ uint16(xMatch),\n\t/*7749*/ uint16(xSetOp), uint16(PMAXSW),\n\t/*7751*/ uint16(xReadSlashR),\n\t/*7752*/ uint16(xArgXmm1),\n\t/*7753*/ uint16(xArgXmm2M128),\n\t/*7754*/ uint16(xMatch),\n\t/*7755*/ uint16(xCondPrefix), 2,\n\t0x66, 7767,\n\t0x0, 7761,\n\t/*7761*/ uint16(xSetOp), uint16(PXOR),\n\t/*7763*/ uint16(xReadSlashR),\n\t/*7764*/ uint16(xArgMm),\n\t/*7765*/ uint16(xArgMmM64),\n\t/*7766*/ uint16(xMatch),\n\t/*7767*/ uint16(xSetOp), uint16(PXOR),\n\t/*7769*/ uint16(xReadSlashR),\n\t/*7770*/ uint16(xArgXmm1),\n\t/*7771*/ uint16(xArgXmm2M128),\n\t/*7772*/ uint16(xMatch),\n\t/*7773*/ uint16(xCondPrefix), 1,\n\t0xF2, 7777,\n\t/*7777*/ uint16(xSetOp), uint16(LDDQU),\n\t/*7779*/ uint16(xReadSlashR),\n\t/*7780*/ uint16(xArgXmm1),\n\t/*7781*/ uint16(xArgM128),\n\t/*7782*/ uint16(xMatch),\n\t/*7783*/ uint16(xCondPrefix), 2,\n\t0x66, 7795,\n\t0x0, 7789,\n\t/*7789*/ uint16(xSetOp), uint16(PSLLW),\n\t/*7791*/ uint16(xReadSlashR),\n\t/*7792*/ uint16(xArgMm),\n\t/*7793*/ uint16(xArgMmM64),\n\t/*7794*/ uint16(xMatch),\n\t/*7795*/ uint16(xSetOp), uint16(PSLLW),\n\t/*7797*/ uint16(xReadSlashR),\n\t/*7798*/ uint16(xArgXmm1),\n\t/*7799*/ uint16(xArgXmm2M128),\n\t/*7800*/ uint16(xMatch),\n\t/*7801*/ uint16(xCondPrefix), 2,\n\t0x66, 7813,\n\t0x0, 7807,\n\t/*7807*/ uint16(xSetOp), uint16(PSLLD),\n\t/*7809*/ uint16(xReadSlashR),\n\t/*7810*/ uint16(xArgMm),\n\t/*7811*/ uint16(xArgMmM64),\n\t/*7812*/ uint16(xMatch),\n\t/*7813*/ uint16(xSetOp), uint16(PSLLD),\n\t/*7815*/ uint16(xReadSlashR),\n\t/*7816*/ uint16(xArgXmm1),\n\t/*7817*/ uint16(xArgXmm2M128),\n\t/*7818*/ uint16(xMatch),\n\t/*7819*/ uint16(xCondPrefix), 2,\n\t0x66, 7831,\n\t0x0, 7825,\n\t/*7825*/ uint16(xSetOp), uint16(PSLLQ),\n\t/*7827*/ uint16(xReadSlashR),\n\t/*7828*/ uint16(xArgMm),\n\t/*7829*/ uint16(xArgMmM64),\n\t/*7830*/ uint16(xMatch),\n\t/*7831*/ uint16(xSetOp), uint16(PSLLQ),\n\t/*7833*/ uint16(xReadSlashR),\n\t/*7834*/ uint16(xArgXmm1),\n\t/*7835*/ uint16(xArgXmm2M128),\n\t/*7836*/ uint16(xMatch),\n\t/*7837*/ uint16(xCondPrefix), 2,\n\t0x66, 7849,\n\t0x0, 7843,\n\t/*7843*/ uint16(xSetOp), uint16(PMULUDQ),\n\t/*7845*/ uint16(xReadSlashR),\n\t/*7846*/ uint16(xArgMm1),\n\t/*7847*/ uint16(xArgMm2M64),\n\t/*7848*/ uint16(xMatch),\n\t/*7849*/ uint16(xSetOp), uint16(PMULUDQ),\n\t/*7851*/ uint16(xReadSlashR),\n\t/*7852*/ uint16(xArgXmm1),\n\t/*7853*/ uint16(xArgXmm2M128),\n\t/*7854*/ uint16(xMatch),\n\t/*7855*/ uint16(xCondPrefix), 2,\n\t0x66, 7867,\n\t0x0, 7861,\n\t/*7861*/ uint16(xSetOp), uint16(PMADDWD),\n\t/*7863*/ uint16(xReadSlashR),\n\t/*7864*/ uint16(xArgMm),\n\t/*7865*/ uint16(xArgMmM64),\n\t/*7866*/ uint16(xMatch),\n\t/*7867*/ uint16(xSetOp), uint16(PMADDWD),\n\t/*7869*/ uint16(xReadSlashR),\n\t/*7870*/ uint16(xArgXmm1),\n\t/*7871*/ uint16(xArgXmm2M128),\n\t/*7872*/ uint16(xMatch),\n\t/*7873*/ uint16(xCondPrefix), 2,\n\t0x66, 7885,\n\t0x0, 7879,\n\t/*7879*/ uint16(xSetOp), uint16(PSADBW),\n\t/*7881*/ uint16(xReadSlashR),\n\t/*7882*/ uint16(xArgMm1),\n\t/*7883*/ uint16(xArgMm2M64),\n\t/*7884*/ uint16(xMatch),\n\t/*7885*/ uint16(xSetOp), uint16(PSADBW),\n\t/*7887*/ uint16(xReadSlashR),\n\t/*7888*/ uint16(xArgXmm1),\n\t/*7889*/ uint16(xArgXmm2M128),\n\t/*7890*/ uint16(xMatch),\n\t/*7891*/ uint16(xCondPrefix), 2,\n\t0x66, 7903,\n\t0x0, 7897,\n\t/*7897*/ uint16(xSetOp), uint16(MASKMOVQ),\n\t/*7899*/ uint16(xReadSlashR),\n\t/*7900*/ uint16(xArgMm1),\n\t/*7901*/ uint16(xArgMm2),\n\t/*7902*/ uint16(xMatch),\n\t/*7903*/ uint16(xSetOp), uint16(MASKMOVDQU),\n\t/*7905*/ uint16(xReadSlashR),\n\t/*7906*/ uint16(xArgXmm1),\n\t/*7907*/ uint16(xArgXmm2),\n\t/*7908*/ uint16(xMatch),\n\t/*7909*/ uint16(xCondPrefix), 2,\n\t0x66, 7921,\n\t0x0, 7915,\n\t/*7915*/ uint16(xSetOp), uint16(PSUBB),\n\t/*7917*/ uint16(xReadSlashR),\n\t/*7918*/ uint16(xArgMm),\n\t/*7919*/ uint16(xArgMmM64),\n\t/*7920*/ uint16(xMatch),\n\t/*7921*/ uint16(xSetOp), uint16(PSUBB),\n\t/*7923*/ uint16(xReadSlashR),\n\t/*7924*/ uint16(xArgXmm1),\n\t/*7925*/ uint16(xArgXmm2M128),\n\t/*7926*/ uint16(xMatch),\n\t/*7927*/ uint16(xCondPrefix), 2,\n\t0x66, 7939,\n\t0x0, 7933,\n\t/*7933*/ uint16(xSetOp), uint16(PSUBW),\n\t/*7935*/ uint16(xReadSlashR),\n\t/*7936*/ uint16(xArgMm),\n\t/*7937*/ uint16(xArgMmM64),\n\t/*7938*/ uint16(xMatch),\n\t/*7939*/ uint16(xSetOp), uint16(PSUBW),\n\t/*7941*/ uint16(xReadSlashR),\n\t/*7942*/ uint16(xArgXmm1),\n\t/*7943*/ uint16(xArgXmm2M128),\n\t/*7944*/ uint16(xMatch),\n\t/*7945*/ uint16(xCondPrefix), 2,\n\t0x66, 7957,\n\t0x0, 7951,\n\t/*7951*/ uint16(xSetOp), uint16(PSUBD),\n\t/*7953*/ uint16(xReadSlashR),\n\t/*7954*/ uint16(xArgMm),\n\t/*7955*/ uint16(xArgMmM64),\n\t/*7956*/ uint16(xMatch),\n\t/*7957*/ uint16(xSetOp), uint16(PSUBD),\n\t/*7959*/ uint16(xReadSlashR),\n\t/*7960*/ uint16(xArgXmm1),\n\t/*7961*/ uint16(xArgXmm2M128),\n\t/*7962*/ uint16(xMatch),\n\t/*7963*/ uint16(xCondPrefix), 2,\n\t0x66, 7975,\n\t0x0, 7969,\n\t/*7969*/ uint16(xSetOp), uint16(PSUBQ),\n\t/*7971*/ uint16(xReadSlashR),\n\t/*7972*/ uint16(xArgMm1),\n\t/*7973*/ uint16(xArgMm2M64),\n\t/*7974*/ uint16(xMatch),\n\t/*7975*/ uint16(xSetOp), uint16(PSUBQ),\n\t/*7977*/ uint16(xReadSlashR),\n\t/*7978*/ uint16(xArgXmm1),\n\t/*7979*/ uint16(xArgXmm2M128),\n\t/*7980*/ uint16(xMatch),\n\t/*7981*/ uint16(xCondPrefix), 2,\n\t0x66, 7993,\n\t0x0, 7987,\n\t/*7987*/ uint16(xSetOp), uint16(PADDB),\n\t/*7989*/ uint16(xReadSlashR),\n\t/*7990*/ uint16(xArgMm),\n\t/*7991*/ uint16(xArgMmM64),\n\t/*7992*/ uint16(xMatch),\n\t/*7993*/ uint16(xSetOp), uint16(PADDB),\n\t/*7995*/ uint16(xReadSlashR),\n\t/*7996*/ uint16(xArgXmm1),\n\t/*7997*/ uint16(xArgXmm2M128),\n\t/*7998*/ uint16(xMatch),\n\t/*7999*/ uint16(xCondPrefix), 2,\n\t0x66, 8011,\n\t0x0, 8005,\n\t/*8005*/ uint16(xSetOp), uint16(PADDW),\n\t/*8007*/ uint16(xReadSlashR),\n\t/*8008*/ uint16(xArgMm),\n\t/*8009*/ uint16(xArgMmM64),\n\t/*8010*/ uint16(xMatch),\n\t/*8011*/ uint16(xSetOp), uint16(PADDW),\n\t/*8013*/ uint16(xReadSlashR),\n\t/*8014*/ uint16(xArgXmm1),\n\t/*8015*/ uint16(xArgXmm2M128),\n\t/*8016*/ uint16(xMatch),\n\t/*8017*/ uint16(xCondPrefix), 2,\n\t0x66, 8029,\n\t0x0, 8023,\n\t/*8023*/ uint16(xSetOp), uint16(PADDD),\n\t/*8025*/ uint16(xReadSlashR),\n\t/*8026*/ uint16(xArgMm),\n\t/*8027*/ uint16(xArgMmM64),\n\t/*8028*/ uint16(xMatch),\n\t/*8029*/ uint16(xSetOp), uint16(PADDD),\n\t/*8031*/ uint16(xReadSlashR),\n\t/*8032*/ uint16(xArgXmm1),\n\t/*8033*/ uint16(xArgXmm2M128),\n\t/*8034*/ uint16(xMatch),\n\t/*8035*/ uint16(xCondDataSize), 0, 8039, 0,\n\t/*8039*/ uint16(xSetOp), uint16(UD0),\n\t/*8041*/ uint16(xReadSlashR),\n\t/*8042*/ uint16(xArgR32),\n\t/*8043*/ uint16(xArgRM32),\n\t/*8044*/ uint16(xMatch),\n\t/*8045*/ uint16(xSetOp), uint16(ADC),\n\t/*8047*/ uint16(xReadSlashR),\n\t/*8048*/ uint16(xArgRM8),\n\t/*8049*/ uint16(xArgR8),\n\t/*8050*/ uint16(xMatch),\n\t/*8051*/ uint16(xCondIs64), 8054, 8070,\n\t/*8054*/ uint16(xCondDataSize), 8058, 8064, 0,\n\t/*8058*/ uint16(xSetOp), uint16(ADC),\n\t/*8060*/ uint16(xReadSlashR),\n\t/*8061*/ uint16(xArgRM16),\n\t/*8062*/ uint16(xArgR16),\n\t/*8063*/ uint16(xMatch),\n\t/*8064*/ uint16(xSetOp), uint16(ADC),\n\t/*8066*/ uint16(xReadSlashR),\n\t/*8067*/ uint16(xArgRM32),\n\t/*8068*/ uint16(xArgR32),\n\t/*8069*/ uint16(xMatch),\n\t/*8070*/ uint16(xCondDataSize), 8058, 8064, 8074,\n\t/*8074*/ uint16(xSetOp), uint16(ADC),\n\t/*8076*/ uint16(xReadSlashR),\n\t/*8077*/ uint16(xArgRM64),\n\t/*8078*/ uint16(xArgR64),\n\t/*8079*/ uint16(xMatch),\n\t/*8080*/ uint16(xSetOp), uint16(ADC),\n\t/*8082*/ uint16(xReadSlashR),\n\t/*8083*/ uint16(xArgR8),\n\t/*8084*/ uint16(xArgRM8),\n\t/*8085*/ uint16(xMatch),\n\t/*8086*/ uint16(xCondIs64), 8089, 8105,\n\t/*8089*/ uint16(xCondDataSize), 8093, 8099, 0,\n\t/*8093*/ uint16(xSetOp), uint16(ADC),\n\t/*8095*/ uint16(xReadSlashR),\n\t/*8096*/ uint16(xArgR16),\n\t/*8097*/ uint16(xArgRM16),\n\t/*8098*/ uint16(xMatch),\n\t/*8099*/ uint16(xSetOp), uint16(ADC),\n\t/*8101*/ uint16(xReadSlashR),\n\t/*8102*/ uint16(xArgR32),\n\t/*8103*/ uint16(xArgRM32),\n\t/*8104*/ uint16(xMatch),\n\t/*8105*/ uint16(xCondDataSize), 8093, 8099, 8109,\n\t/*8109*/ uint16(xSetOp), uint16(ADC),\n\t/*8111*/ uint16(xReadSlashR),\n\t/*8112*/ uint16(xArgR64),\n\t/*8113*/ uint16(xArgRM64),\n\t/*8114*/ uint16(xMatch),\n\t/*8115*/ uint16(xSetOp), uint16(ADC),\n\t/*8117*/ uint16(xReadIb),\n\t/*8118*/ uint16(xArgAL),\n\t/*8119*/ uint16(xArgImm8u),\n\t/*8120*/ uint16(xMatch),\n\t/*8121*/ uint16(xCondIs64), 8124, 8140,\n\t/*8124*/ uint16(xCondDataSize), 8128, 8134, 0,\n\t/*8128*/ uint16(xSetOp), uint16(ADC),\n\t/*8130*/ uint16(xReadIw),\n\t/*8131*/ uint16(xArgAX),\n\t/*8132*/ uint16(xArgImm16),\n\t/*8133*/ uint16(xMatch),\n\t/*8134*/ uint16(xSetOp), uint16(ADC),\n\t/*8136*/ uint16(xReadId),\n\t/*8137*/ uint16(xArgEAX),\n\t/*8138*/ uint16(xArgImm32),\n\t/*8139*/ uint16(xMatch),\n\t/*8140*/ uint16(xCondDataSize), 8128, 8134, 8144,\n\t/*8144*/ uint16(xSetOp), uint16(ADC),\n\t/*8146*/ uint16(xReadId),\n\t/*8147*/ uint16(xArgRAX),\n\t/*8148*/ uint16(xArgImm32),\n\t/*8149*/ uint16(xMatch),\n\t/*8150*/ uint16(xCondIs64), 8153, 0,\n\t/*8153*/ uint16(xSetOp), uint16(PUSH),\n\t/*8155*/ uint16(xArgSS),\n\t/*8156*/ uint16(xMatch),\n\t/*8157*/ uint16(xCondIs64), 8160, 0,\n\t/*8160*/ uint16(xSetOp), uint16(POP),\n\t/*8162*/ uint16(xArgSS),\n\t/*8163*/ uint16(xMatch),\n\t/*8164*/ uint16(xSetOp), uint16(SBB),\n\t/*8166*/ uint16(xReadSlashR),\n\t/*8167*/ uint16(xArgRM8),\n\t/*8168*/ uint16(xArgR8),\n\t/*8169*/ uint16(xMatch),\n\t/*8170*/ uint16(xCondIs64), 8173, 8189,\n\t/*8173*/ uint16(xCondDataSize), 8177, 8183, 0,\n\t/*8177*/ uint16(xSetOp), uint16(SBB),\n\t/*8179*/ uint16(xReadSlashR),\n\t/*8180*/ uint16(xArgRM16),\n\t/*8181*/ uint16(xArgR16),\n\t/*8182*/ uint16(xMatch),\n\t/*8183*/ uint16(xSetOp), uint16(SBB),\n\t/*8185*/ uint16(xReadSlashR),\n\t/*8186*/ uint16(xArgRM32),\n\t/*8187*/ uint16(xArgR32),\n\t/*8188*/ uint16(xMatch),\n\t/*8189*/ uint16(xCondDataSize), 8177, 8183, 8193,\n\t/*8193*/ uint16(xSetOp), uint16(SBB),\n\t/*8195*/ uint16(xReadSlashR),\n\t/*8196*/ uint16(xArgRM64),\n\t/*8197*/ uint16(xArgR64),\n\t/*8198*/ uint16(xMatch),\n\t/*8199*/ uint16(xSetOp), uint16(SBB),\n\t/*8201*/ uint16(xReadSlashR),\n\t/*8202*/ uint16(xArgR8),\n\t/*8203*/ uint16(xArgRM8),\n\t/*8204*/ uint16(xMatch),\n\t/*8205*/ uint16(xCondIs64), 8208, 8224,\n\t/*8208*/ uint16(xCondDataSize), 8212, 8218, 0,\n\t/*8212*/ uint16(xSetOp), uint16(SBB),\n\t/*8214*/ uint16(xReadSlashR),\n\t/*8215*/ uint16(xArgR16),\n\t/*8216*/ uint16(xArgRM16),\n\t/*8217*/ uint16(xMatch),\n\t/*8218*/ uint16(xSetOp), uint16(SBB),\n\t/*8220*/ uint16(xReadSlashR),\n\t/*8221*/ uint16(xArgR32),\n\t/*8222*/ uint16(xArgRM32),\n\t/*8223*/ uint16(xMatch),\n\t/*8224*/ uint16(xCondDataSize), 8212, 8218, 8228,\n\t/*8228*/ uint16(xSetOp), uint16(SBB),\n\t/*8230*/ uint16(xReadSlashR),\n\t/*8231*/ uint16(xArgR64),\n\t/*8232*/ uint16(xArgRM64),\n\t/*8233*/ uint16(xMatch),\n\t/*8234*/ uint16(xSetOp), uint16(SBB),\n\t/*8236*/ uint16(xReadIb),\n\t/*8237*/ uint16(xArgAL),\n\t/*8238*/ uint16(xArgImm8u),\n\t/*8239*/ uint16(xMatch),\n\t/*8240*/ uint16(xCondIs64), 8243, 8259,\n\t/*8243*/ uint16(xCondDataSize), 8247, 8253, 0,\n\t/*8247*/ uint16(xSetOp), uint16(SBB),\n\t/*8249*/ uint16(xReadIw),\n\t/*8250*/ uint16(xArgAX),\n\t/*8251*/ uint16(xArgImm16),\n\t/*8252*/ uint16(xMatch),\n\t/*8253*/ uint16(xSetOp), uint16(SBB),\n\t/*8255*/ uint16(xReadId),\n\t/*8256*/ uint16(xArgEAX),\n\t/*8257*/ uint16(xArgImm32),\n\t/*8258*/ uint16(xMatch),\n\t/*8259*/ uint16(xCondDataSize), 8247, 8253, 8263,\n\t/*8263*/ uint16(xSetOp), uint16(SBB),\n\t/*8265*/ uint16(xReadId),\n\t/*8266*/ uint16(xArgRAX),\n\t/*8267*/ uint16(xArgImm32),\n\t/*8268*/ uint16(xMatch),\n\t/*8269*/ uint16(xCondIs64), 8272, 0,\n\t/*8272*/ uint16(xSetOp), uint16(PUSH),\n\t/*8274*/ uint16(xArgDS),\n\t/*8275*/ uint16(xMatch),\n\t/*8276*/ uint16(xCondIs64), 8279, 0,\n\t/*8279*/ uint16(xSetOp), uint16(POP),\n\t/*8281*/ uint16(xArgDS),\n\t/*8282*/ uint16(xMatch),\n\t/*8283*/ uint16(xSetOp), uint16(AND),\n\t/*8285*/ uint16(xReadSlashR),\n\t/*8286*/ uint16(xArgRM8),\n\t/*8287*/ uint16(xArgR8),\n\t/*8288*/ uint16(xMatch),\n\t/*8289*/ uint16(xCondIs64), 8292, 8308,\n\t/*8292*/ uint16(xCondDataSize), 8296, 8302, 0,\n\t/*8296*/ uint16(xSetOp), uint16(AND),\n\t/*8298*/ uint16(xReadSlashR),\n\t/*8299*/ uint16(xArgRM16),\n\t/*8300*/ uint16(xArgR16),\n\t/*8301*/ uint16(xMatch),\n\t/*8302*/ uint16(xSetOp), uint16(AND),\n\t/*8304*/ uint16(xReadSlashR),\n\t/*8305*/ uint16(xArgRM32),\n\t/*8306*/ uint16(xArgR32),\n\t/*8307*/ uint16(xMatch),\n\t/*8308*/ uint16(xCondDataSize), 8296, 8302, 8312,\n\t/*8312*/ uint16(xSetOp), uint16(AND),\n\t/*8314*/ uint16(xReadSlashR),\n\t/*8315*/ uint16(xArgRM64),\n\t/*8316*/ uint16(xArgR64),\n\t/*8317*/ uint16(xMatch),\n\t/*8318*/ uint16(xSetOp), uint16(AND),\n\t/*8320*/ uint16(xReadSlashR),\n\t/*8321*/ uint16(xArgR8),\n\t/*8322*/ uint16(xArgRM8),\n\t/*8323*/ uint16(xMatch),\n\t/*8324*/ uint16(xCondIs64), 8327, 8343,\n\t/*8327*/ uint16(xCondDataSize), 8331, 8337, 0,\n\t/*8331*/ uint16(xSetOp), uint16(AND),\n\t/*8333*/ uint16(xReadSlashR),\n\t/*8334*/ uint16(xArgR16),\n\t/*8335*/ uint16(xArgRM16),\n\t/*8336*/ uint16(xMatch),\n\t/*8337*/ uint16(xSetOp), uint16(AND),\n\t/*8339*/ uint16(xReadSlashR),\n\t/*8340*/ uint16(xArgR32),\n\t/*8341*/ uint16(xArgRM32),\n\t/*8342*/ uint16(xMatch),\n\t/*8343*/ uint16(xCondDataSize), 8331, 8337, 8347,\n\t/*8347*/ uint16(xSetOp), uint16(AND),\n\t/*8349*/ uint16(xReadSlashR),\n\t/*8350*/ uint16(xArgR64),\n\t/*8351*/ uint16(xArgRM64),\n\t/*8352*/ uint16(xMatch),\n\t/*8353*/ uint16(xSetOp), uint16(AND),\n\t/*8355*/ uint16(xReadIb),\n\t/*8356*/ uint16(xArgAL),\n\t/*8357*/ uint16(xArgImm8u),\n\t/*8358*/ uint16(xMatch),\n\t/*8359*/ uint16(xCondIs64), 8362, 8378,\n\t/*8362*/ uint16(xCondDataSize), 8366, 8372, 0,\n\t/*8366*/ uint16(xSetOp), uint16(AND),\n\t/*8368*/ uint16(xReadIw),\n\t/*8369*/ uint16(xArgAX),\n\t/*8370*/ uint16(xArgImm16),\n\t/*8371*/ uint16(xMatch),\n\t/*8372*/ uint16(xSetOp), uint16(AND),\n\t/*8374*/ uint16(xReadId),\n\t/*8375*/ uint16(xArgEAX),\n\t/*8376*/ uint16(xArgImm32),\n\t/*8377*/ uint16(xMatch),\n\t/*8378*/ uint16(xCondDataSize), 8366, 8372, 8382,\n\t/*8382*/ uint16(xSetOp), uint16(AND),\n\t/*8384*/ uint16(xReadId),\n\t/*8385*/ uint16(xArgRAX),\n\t/*8386*/ uint16(xArgImm32),\n\t/*8387*/ uint16(xMatch),\n\t/*8388*/ uint16(xCondIs64), 8391, 0,\n\t/*8391*/ uint16(xSetOp), uint16(DAA),\n\t/*8393*/ uint16(xMatch),\n\t/*8394*/ uint16(xSetOp), uint16(SUB),\n\t/*8396*/ uint16(xReadSlashR),\n\t/*8397*/ uint16(xArgRM8),\n\t/*8398*/ uint16(xArgR8),\n\t/*8399*/ uint16(xMatch),\n\t/*8400*/ uint16(xCondIs64), 8403, 8419,\n\t/*8403*/ uint16(xCondDataSize), 8407, 8413, 0,\n\t/*8407*/ uint16(xSetOp), uint16(SUB),\n\t/*8409*/ uint16(xReadSlashR),\n\t/*8410*/ uint16(xArgRM16),\n\t/*8411*/ uint16(xArgR16),\n\t/*8412*/ uint16(xMatch),\n\t/*8413*/ uint16(xSetOp), uint16(SUB),\n\t/*8415*/ uint16(xReadSlashR),\n\t/*8416*/ uint16(xArgRM32),\n\t/*8417*/ uint16(xArgR32),\n\t/*8418*/ uint16(xMatch),\n\t/*8419*/ uint16(xCondDataSize), 8407, 8413, 8423,\n\t/*8423*/ uint16(xSetOp), uint16(SUB),\n\t/*8425*/ uint16(xReadSlashR),\n\t/*8426*/ uint16(xArgRM64),\n\t/*8427*/ uint16(xArgR64),\n\t/*8428*/ uint16(xMatch),\n\t/*8429*/ uint16(xCondPrefix), 3,\n\t0xC5, 8457,\n\t0xC4, 8443,\n\t0x0, 8437,\n\t/*8437*/ uint16(xSetOp), uint16(SUB),\n\t/*8439*/ uint16(xReadSlashR),\n\t/*8440*/ uint16(xArgR8),\n\t/*8441*/ uint16(xArgRM8),\n\t/*8442*/ uint16(xMatch),\n\t/*8443*/ uint16(xCondPrefix), 1,\n\t0x66, 8447,\n\t/*8447*/ uint16(xCondPrefix), 1,\n\t0x0F38, 8451,\n\t/*8451*/ uint16(xSetOp), uint16(VMOVNTDQA),\n\t/*8453*/ uint16(xReadSlashR),\n\t/*8454*/ uint16(xArgYmm1),\n\t/*8455*/ uint16(xArgM256),\n\t/*8456*/ uint16(xMatch),\n\t/*8457*/ uint16(xCondPrefix), 1,\n\t0x66, 8461,\n\t/*8461*/ uint16(xCondPrefix), 1,\n\t0x0F38, 8465,\n\t/*8465*/ uint16(xSetOp), uint16(VMOVNTDQA),\n\t/*8467*/ uint16(xReadSlashR),\n\t/*8468*/ uint16(xArgYmm1),\n\t/*8469*/ uint16(xArgM256),\n\t/*8470*/ uint16(xMatch),\n\t/*8471*/ uint16(xCondIs64), 8474, 8490,\n\t/*8474*/ uint16(xCondDataSize), 8478, 8484, 0,\n\t/*8478*/ uint16(xSetOp), uint16(SUB),\n\t/*8480*/ uint16(xReadSlashR),\n\t/*8481*/ uint16(xArgR16),\n\t/*8482*/ uint16(xArgRM16),\n\t/*8483*/ uint16(xMatch),\n\t/*8484*/ uint16(xSetOp), uint16(SUB),\n\t/*8486*/ uint16(xReadSlashR),\n\t/*8487*/ uint16(xArgR32),\n\t/*8488*/ uint16(xArgRM32),\n\t/*8489*/ uint16(xMatch),\n\t/*8490*/ uint16(xCondDataSize), 8478, 8484, 8494,\n\t/*8494*/ uint16(xSetOp), uint16(SUB),\n\t/*8496*/ uint16(xReadSlashR),\n\t/*8497*/ uint16(xArgR64),\n\t/*8498*/ uint16(xArgRM64),\n\t/*8499*/ uint16(xMatch),\n\t/*8500*/ uint16(xSetOp), uint16(SUB),\n\t/*8502*/ uint16(xReadIb),\n\t/*8503*/ uint16(xArgAL),\n\t/*8504*/ uint16(xArgImm8u),\n\t/*8505*/ uint16(xMatch),\n\t/*8506*/ uint16(xCondIs64), 8509, 8525,\n\t/*8509*/ uint16(xCondDataSize), 8513, 8519, 0,\n\t/*8513*/ uint16(xSetOp), uint16(SUB),\n\t/*8515*/ uint16(xReadIw),\n\t/*8516*/ uint16(xArgAX),\n\t/*8517*/ uint16(xArgImm16),\n\t/*8518*/ uint16(xMatch),\n\t/*8519*/ uint16(xSetOp), uint16(SUB),\n\t/*8521*/ uint16(xReadId),\n\t/*8522*/ uint16(xArgEAX),\n\t/*8523*/ uint16(xArgImm32),\n\t/*8524*/ uint16(xMatch),\n\t/*8525*/ uint16(xCondDataSize), 8513, 8519, 8529,\n\t/*8529*/ uint16(xSetOp), uint16(SUB),\n\t/*8531*/ uint16(xReadId),\n\t/*8532*/ uint16(xArgRAX),\n\t/*8533*/ uint16(xArgImm32),\n\t/*8534*/ uint16(xMatch),\n\t/*8535*/ uint16(xCondIs64), 8538, 0,\n\t/*8538*/ uint16(xSetOp), uint16(DAS),\n\t/*8540*/ uint16(xMatch),\n\t/*8541*/ uint16(xSetOp), uint16(XOR),\n\t/*8543*/ uint16(xReadSlashR),\n\t/*8544*/ uint16(xArgRM8),\n\t/*8545*/ uint16(xArgR8),\n\t/*8546*/ uint16(xMatch),\n\t/*8547*/ uint16(xCondIs64), 8550, 8566,\n\t/*8550*/ uint16(xCondDataSize), 8554, 8560, 0,\n\t/*8554*/ uint16(xSetOp), uint16(XOR),\n\t/*8556*/ uint16(xReadSlashR),\n\t/*8557*/ uint16(xArgRM16),\n\t/*8558*/ uint16(xArgR16),\n\t/*8559*/ uint16(xMatch),\n\t/*8560*/ uint16(xSetOp), uint16(XOR),\n\t/*8562*/ uint16(xReadSlashR),\n\t/*8563*/ uint16(xArgRM32),\n\t/*8564*/ uint16(xArgR32),\n\t/*8565*/ uint16(xMatch),\n\t/*8566*/ uint16(xCondDataSize), 8554, 8560, 8570,\n\t/*8570*/ uint16(xSetOp), uint16(XOR),\n\t/*8572*/ uint16(xReadSlashR),\n\t/*8573*/ uint16(xArgRM64),\n\t/*8574*/ uint16(xArgR64),\n\t/*8575*/ uint16(xMatch),\n\t/*8576*/ uint16(xSetOp), uint16(XOR),\n\t/*8578*/ uint16(xReadSlashR),\n\t/*8579*/ uint16(xArgR8),\n\t/*8580*/ uint16(xArgRM8),\n\t/*8581*/ uint16(xMatch),\n\t/*8582*/ uint16(xCondIs64), 8585, 8601,\n\t/*8585*/ uint16(xCondDataSize), 8589, 8595, 0,\n\t/*8589*/ uint16(xSetOp), uint16(XOR),\n\t/*8591*/ uint16(xReadSlashR),\n\t/*8592*/ uint16(xArgR16),\n\t/*8593*/ uint16(xArgRM16),\n\t/*8594*/ uint16(xMatch),\n\t/*8595*/ uint16(xSetOp), uint16(XOR),\n\t/*8597*/ uint16(xReadSlashR),\n\t/*8598*/ uint16(xArgR32),\n\t/*8599*/ uint16(xArgRM32),\n\t/*8600*/ uint16(xMatch),\n\t/*8601*/ uint16(xCondDataSize), 8589, 8595, 8605,\n\t/*8605*/ uint16(xSetOp), uint16(XOR),\n\t/*8607*/ uint16(xReadSlashR),\n\t/*8608*/ uint16(xArgR64),\n\t/*8609*/ uint16(xArgRM64),\n\t/*8610*/ uint16(xMatch),\n\t/*8611*/ uint16(xSetOp), uint16(XOR),\n\t/*8613*/ uint16(xReadIb),\n\t/*8614*/ uint16(xArgAL),\n\t/*8615*/ uint16(xArgImm8u),\n\t/*8616*/ uint16(xMatch),\n\t/*8617*/ uint16(xCondIs64), 8620, 8636,\n\t/*8620*/ uint16(xCondDataSize), 8624, 8630, 0,\n\t/*8624*/ uint16(xSetOp), uint16(XOR),\n\t/*8626*/ uint16(xReadIw),\n\t/*8627*/ uint16(xArgAX),\n\t/*8628*/ uint16(xArgImm16),\n\t/*8629*/ uint16(xMatch),\n\t/*8630*/ uint16(xSetOp), uint16(XOR),\n\t/*8632*/ uint16(xReadId),\n\t/*8633*/ uint16(xArgEAX),\n\t/*8634*/ uint16(xArgImm32),\n\t/*8635*/ uint16(xMatch),\n\t/*8636*/ uint16(xCondDataSize), 8624, 8630, 8640,\n\t/*8640*/ uint16(xSetOp), uint16(XOR),\n\t/*8642*/ uint16(xReadId),\n\t/*8643*/ uint16(xArgRAX),\n\t/*8644*/ uint16(xArgImm32),\n\t/*8645*/ uint16(xMatch),\n\t/*8646*/ uint16(xCondIs64), 8649, 0,\n\t/*8649*/ uint16(xSetOp), uint16(AAA),\n\t/*8651*/ uint16(xMatch),\n\t/*8652*/ uint16(xSetOp), uint16(CMP),\n\t/*8654*/ uint16(xReadSlashR),\n\t/*8655*/ uint16(xArgRM8),\n\t/*8656*/ uint16(xArgR8),\n\t/*8657*/ uint16(xMatch),\n\t/*8658*/ uint16(xCondIs64), 8661, 8677,\n\t/*8661*/ uint16(xCondDataSize), 8665, 8671, 0,\n\t/*8665*/ uint16(xSetOp), uint16(CMP),\n\t/*8667*/ uint16(xReadSlashR),\n\t/*8668*/ uint16(xArgRM16),\n\t/*8669*/ uint16(xArgR16),\n\t/*8670*/ uint16(xMatch),\n\t/*8671*/ uint16(xSetOp), uint16(CMP),\n\t/*8673*/ uint16(xReadSlashR),\n\t/*8674*/ uint16(xArgRM32),\n\t/*8675*/ uint16(xArgR32),\n\t/*8676*/ uint16(xMatch),\n\t/*8677*/ uint16(xCondDataSize), 8665, 8671, 8681,\n\t/*8681*/ uint16(xSetOp), uint16(CMP),\n\t/*8683*/ uint16(xReadSlashR),\n\t/*8684*/ uint16(xArgRM64),\n\t/*8685*/ uint16(xArgR64),\n\t/*8686*/ uint16(xMatch),\n\t/*8687*/ uint16(xSetOp), uint16(CMP),\n\t/*8689*/ uint16(xReadSlashR),\n\t/*8690*/ uint16(xArgR8),\n\t/*8691*/ uint16(xArgRM8),\n\t/*8692*/ uint16(xMatch),\n\t/*8693*/ uint16(xCondIs64), 8696, 8712,\n\t/*8696*/ uint16(xCondDataSize), 8700, 8706, 0,\n\t/*8700*/ uint16(xSetOp), uint16(CMP),\n\t/*8702*/ uint16(xReadSlashR),\n\t/*8703*/ uint16(xArgR16),\n\t/*8704*/ uint16(xArgRM16),\n\t/*8705*/ uint16(xMatch),\n\t/*8706*/ uint16(xSetOp), uint16(CMP),\n\t/*8708*/ uint16(xReadSlashR),\n\t/*8709*/ uint16(xArgR32),\n\t/*8710*/ uint16(xArgRM32),\n\t/*8711*/ uint16(xMatch),\n\t/*8712*/ uint16(xCondDataSize), 8700, 8706, 8716,\n\t/*8716*/ uint16(xSetOp), uint16(CMP),\n\t/*8718*/ uint16(xReadSlashR),\n\t/*8719*/ uint16(xArgR64),\n\t/*8720*/ uint16(xArgRM64),\n\t/*8721*/ uint16(xMatch),\n\t/*8722*/ uint16(xSetOp), uint16(CMP),\n\t/*8724*/ uint16(xReadIb),\n\t/*8725*/ uint16(xArgAL),\n\t/*8726*/ uint16(xArgImm8u),\n\t/*8727*/ uint16(xMatch),\n\t/*8728*/ uint16(xCondIs64), 8731, 8747,\n\t/*8731*/ uint16(xCondDataSize), 8735, 8741, 0,\n\t/*8735*/ uint16(xSetOp), uint16(CMP),\n\t/*8737*/ uint16(xReadIw),\n\t/*8738*/ uint16(xArgAX),\n\t/*8739*/ uint16(xArgImm16),\n\t/*8740*/ uint16(xMatch),\n\t/*8741*/ uint16(xSetOp), uint16(CMP),\n\t/*8743*/ uint16(xReadId),\n\t/*8744*/ uint16(xArgEAX),\n\t/*8745*/ uint16(xArgImm32),\n\t/*8746*/ uint16(xMatch),\n\t/*8747*/ uint16(xCondDataSize), 8735, 8741, 8751,\n\t/*8751*/ uint16(xSetOp), uint16(CMP),\n\t/*8753*/ uint16(xReadId),\n\t/*8754*/ uint16(xArgRAX),\n\t/*8755*/ uint16(xArgImm32),\n\t/*8756*/ uint16(xMatch),\n\t/*8757*/ uint16(xCondIs64), 8760, 0,\n\t/*8760*/ uint16(xSetOp), uint16(AAS),\n\t/*8762*/ uint16(xMatch),\n\t/*8763*/ uint16(xCondIs64), 8766, 0,\n\t/*8766*/ uint16(xCondDataSize), 8770, 8774, 0,\n\t/*8770*/ uint16(xSetOp), uint16(INC),\n\t/*8772*/ uint16(xArgR16op),\n\t/*8773*/ uint16(xMatch),\n\t/*8774*/ uint16(xSetOp), uint16(INC),\n\t/*8776*/ uint16(xArgR32op),\n\t/*8777*/ uint16(xMatch),\n\t/*8778*/ uint16(xCondIs64), 8781, 0,\n\t/*8781*/ uint16(xCondDataSize), 8785, 8789, 0,\n\t/*8785*/ uint16(xSetOp), uint16(DEC),\n\t/*8787*/ uint16(xArgR16op),\n\t/*8788*/ uint16(xMatch),\n\t/*8789*/ uint16(xSetOp), uint16(DEC),\n\t/*8791*/ uint16(xArgR32op),\n\t/*8792*/ uint16(xMatch),\n\t/*8793*/ uint16(xCondIs64), 8796, 8808,\n\t/*8796*/ uint16(xCondDataSize), 8800, 8804, 0,\n\t/*8800*/ uint16(xSetOp), uint16(PUSH),\n\t/*8802*/ uint16(xArgR16op),\n\t/*8803*/ uint16(xMatch),\n\t/*8804*/ uint16(xSetOp), uint16(PUSH),\n\t/*8806*/ uint16(xArgR32op),\n\t/*8807*/ uint16(xMatch),\n\t/*8808*/ uint16(xCondDataSize), 8800, 8812, 8816,\n\t/*8812*/ uint16(xSetOp), uint16(PUSH),\n\t/*8814*/ uint16(xArgR64op),\n\t/*8815*/ uint16(xMatch),\n\t/*8816*/ uint16(xSetOp), uint16(PUSH),\n\t/*8818*/ uint16(xArgR64op),\n\t/*8819*/ uint16(xMatch),\n\t/*8820*/ uint16(xCondIs64), 8823, 8835,\n\t/*8823*/ uint16(xCondDataSize), 8827, 8831, 0,\n\t/*8827*/ uint16(xSetOp), uint16(POP),\n\t/*8829*/ uint16(xArgR16op),\n\t/*8830*/ uint16(xMatch),\n\t/*8831*/ uint16(xSetOp), uint16(POP),\n\t/*8833*/ uint16(xArgR32op),\n\t/*8834*/ uint16(xMatch),\n\t/*8835*/ uint16(xCondDataSize), 8827, 8839, 8843,\n\t/*8839*/ uint16(xSetOp), uint16(POP),\n\t/*8841*/ uint16(xArgR64op),\n\t/*8842*/ uint16(xMatch),\n\t/*8843*/ uint16(xSetOp), uint16(POP),\n\t/*8845*/ uint16(xArgR64op),\n\t/*8846*/ uint16(xMatch),\n\t/*8847*/ uint16(xCondIs64), 8850, 0,\n\t/*8850*/ uint16(xCondDataSize), 8854, 8857, 0,\n\t/*8854*/ uint16(xSetOp), uint16(PUSHA),\n\t/*8856*/ uint16(xMatch),\n\t/*8857*/ uint16(xSetOp), uint16(PUSHAD),\n\t/*8859*/ uint16(xMatch),\n\t/*8860*/ uint16(xCondIs64), 8863, 0,\n\t/*8863*/ uint16(xCondDataSize), 8867, 8870, 0,\n\t/*8867*/ uint16(xSetOp), uint16(POPA),\n\t/*8869*/ uint16(xMatch),\n\t/*8870*/ uint16(xSetOp), uint16(POPAD),\n\t/*8872*/ uint16(xMatch),\n\t/*8873*/ uint16(xCondIs64), 8876, 0,\n\t/*8876*/ uint16(xCondDataSize), 8880, 8886, 0,\n\t/*8880*/ uint16(xSetOp), uint16(BOUND),\n\t/*8882*/ uint16(xReadSlashR),\n\t/*8883*/ uint16(xArgR16),\n\t/*8884*/ uint16(xArgM16and16),\n\t/*8885*/ uint16(xMatch),\n\t/*8886*/ uint16(xSetOp), uint16(BOUND),\n\t/*8888*/ uint16(xReadSlashR),\n\t/*8889*/ uint16(xArgR32),\n\t/*8890*/ uint16(xArgM32and32),\n\t/*8891*/ uint16(xMatch),\n\t/*8892*/ uint16(xCondIs64), 8895, 8901,\n\t/*8895*/ uint16(xSetOp), uint16(ARPL),\n\t/*8897*/ uint16(xReadSlashR),\n\t/*8898*/ uint16(xArgRM16),\n\t/*8899*/ uint16(xArgR16),\n\t/*8900*/ uint16(xMatch),\n\t/*8901*/ uint16(xCondDataSize), 8905, 8911, 8917,\n\t/*8905*/ uint16(xSetOp), uint16(MOVSXD),\n\t/*8907*/ uint16(xReadSlashR),\n\t/*8908*/ uint16(xArgR16),\n\t/*8909*/ uint16(xArgRM32),\n\t/*8910*/ uint16(xMatch),\n\t/*8911*/ uint16(xSetOp), uint16(MOVSXD),\n\t/*8913*/ uint16(xReadSlashR),\n\t/*8914*/ uint16(xArgR32),\n\t/*8915*/ uint16(xArgRM32),\n\t/*8916*/ uint16(xMatch),\n\t/*8917*/ uint16(xSetOp), uint16(MOVSXD),\n\t/*8919*/ uint16(xReadSlashR),\n\t/*8920*/ uint16(xArgR64),\n\t/*8921*/ uint16(xArgRM32),\n\t/*8922*/ uint16(xMatch),\n\t/*8923*/ uint16(xCondDataSize), 8927, 8932, 8937,\n\t/*8927*/ uint16(xSetOp), uint16(PUSH),\n\t/*8929*/ uint16(xReadIw),\n\t/*8930*/ uint16(xArgImm16),\n\t/*8931*/ uint16(xMatch),\n\t/*8932*/ uint16(xSetOp), uint16(PUSH),\n\t/*8934*/ uint16(xReadId),\n\t/*8935*/ uint16(xArgImm32),\n\t/*8936*/ uint16(xMatch),\n\t/*8937*/ uint16(xSetOp), uint16(PUSH),\n\t/*8939*/ uint16(xReadId),\n\t/*8940*/ uint16(xArgImm32),\n\t/*8941*/ uint16(xMatch),\n\t/*8942*/ uint16(xCondIs64), 8945, 8965,\n\t/*8945*/ uint16(xCondDataSize), 8949, 8957, 0,\n\t/*8949*/ uint16(xSetOp), uint16(IMUL),\n\t/*8951*/ uint16(xReadSlashR),\n\t/*8952*/ uint16(xReadIw),\n\t/*8953*/ uint16(xArgR16),\n\t/*8954*/ uint16(xArgRM16),\n\t/*8955*/ uint16(xArgImm16),\n\t/*8956*/ uint16(xMatch),\n\t/*8957*/ uint16(xSetOp), uint16(IMUL),\n\t/*8959*/ uint16(xReadSlashR),\n\t/*8960*/ uint16(xReadId),\n\t/*8961*/ uint16(xArgR32),\n\t/*8962*/ uint16(xArgRM32),\n\t/*8963*/ uint16(xArgImm32),\n\t/*8964*/ uint16(xMatch),\n\t/*8965*/ uint16(xCondDataSize), 8949, 8957, 8969,\n\t/*8969*/ uint16(xSetOp), uint16(IMUL),\n\t/*8971*/ uint16(xReadSlashR),\n\t/*8972*/ uint16(xReadId),\n\t/*8973*/ uint16(xArgR64),\n\t/*8974*/ uint16(xArgRM64),\n\t/*8975*/ uint16(xArgImm32),\n\t/*8976*/ uint16(xMatch),\n\t/*8977*/ uint16(xSetOp), uint16(PUSH),\n\t/*8979*/ uint16(xReadIb),\n\t/*8980*/ uint16(xArgImm8),\n\t/*8981*/ uint16(xMatch),\n\t/*8982*/ uint16(xCondIs64), 8985, 9005,\n\t/*8985*/ uint16(xCondDataSize), 8989, 8997, 0,\n\t/*8989*/ uint16(xSetOp), uint16(IMUL),\n\t/*8991*/ uint16(xReadSlashR),\n\t/*8992*/ uint16(xReadIb),\n\t/*8993*/ uint16(xArgR16),\n\t/*8994*/ uint16(xArgRM16),\n\t/*8995*/ uint16(xArgImm8),\n\t/*8996*/ uint16(xMatch),\n\t/*8997*/ uint16(xSetOp), uint16(IMUL),\n\t/*8999*/ uint16(xReadSlashR),\n\t/*9000*/ uint16(xReadIb),\n\t/*9001*/ uint16(xArgR32),\n\t/*9002*/ uint16(xArgRM32),\n\t/*9003*/ uint16(xArgImm8),\n\t/*9004*/ uint16(xMatch),\n\t/*9005*/ uint16(xCondDataSize), 8989, 8997, 9009,\n\t/*9009*/ uint16(xSetOp), uint16(IMUL),\n\t/*9011*/ uint16(xReadSlashR),\n\t/*9012*/ uint16(xReadIb),\n\t/*9013*/ uint16(xArgR64),\n\t/*9014*/ uint16(xArgRM64),\n\t/*9015*/ uint16(xArgImm8),\n\t/*9016*/ uint16(xMatch),\n\t/*9017*/ uint16(xSetOp), uint16(INSB),\n\t/*9019*/ uint16(xMatch),\n\t/*9020*/ uint16(xCondDataSize), 9024, 9027, 9030,\n\t/*9024*/ uint16(xSetOp), uint16(INSW),\n\t/*9026*/ uint16(xMatch),\n\t/*9027*/ uint16(xSetOp), uint16(INSD),\n\t/*9029*/ uint16(xMatch),\n\t/*9030*/ uint16(xSetOp), uint16(INSD),\n\t/*9032*/ uint16(xMatch),\n\t/*9033*/ uint16(xSetOp), uint16(OUTSB),\n\t/*9035*/ uint16(xMatch),\n\t/*9036*/ uint16(xCondPrefix), 3,\n\t0xC5, 9083,\n\t0xC4, 9057,\n\t0x0, 9044,\n\t/*9044*/ uint16(xCondDataSize), 9048, 9051, 9054,\n\t/*9048*/ uint16(xSetOp), uint16(OUTSW),\n\t/*9050*/ uint16(xMatch),\n\t/*9051*/ uint16(xSetOp), uint16(OUTSD),\n\t/*9053*/ uint16(xMatch),\n\t/*9054*/ uint16(xSetOp), uint16(OUTSD),\n\t/*9056*/ uint16(xMatch),\n\t/*9057*/ uint16(xCondPrefix), 2,\n\t0xF3, 9073,\n\t0x66, 9063,\n\t/*9063*/ uint16(xCondPrefix), 1,\n\t0x0F, 9067,\n\t/*9067*/ uint16(xSetOp), uint16(VMOVDQA),\n\t/*9069*/ uint16(xReadSlashR),\n\t/*9070*/ uint16(xArgYmm1),\n\t/*9071*/ uint16(xArgYmm2M256),\n\t/*9072*/ uint16(xMatch),\n\t/*9073*/ uint16(xCondPrefix), 1,\n\t0x0F, 9077,\n\t/*9077*/ uint16(xSetOp), uint16(VMOVDQU),\n\t/*9079*/ uint16(xReadSlashR),\n\t/*9080*/ uint16(xArgYmm1),\n\t/*9081*/ uint16(xArgYmm2M256),\n\t/*9082*/ uint16(xMatch),\n\t/*9083*/ uint16(xCondPrefix), 2,\n\t0xF3, 9099,\n\t0x66, 9089,\n\t/*9089*/ uint16(xCondPrefix), 1,\n\t0x0F, 9093,\n\t/*9093*/ uint16(xSetOp), uint16(VMOVDQA),\n\t/*9095*/ uint16(xReadSlashR),\n\t/*9096*/ uint16(xArgYmm1),\n\t/*9097*/ uint16(xArgYmm2M256),\n\t/*9098*/ uint16(xMatch),\n\t/*9099*/ uint16(xCondPrefix), 1,\n\t0x0F, 9103,\n\t/*9103*/ uint16(xSetOp), uint16(VMOVDQU),\n\t/*9105*/ uint16(xReadSlashR),\n\t/*9106*/ uint16(xArgYmm1),\n\t/*9107*/ uint16(xArgYmm2M256),\n\t/*9108*/ uint16(xMatch),\n\t/*9109*/ uint16(xSetOp), uint16(JO),\n\t/*9111*/ uint16(xReadCb),\n\t/*9112*/ uint16(xArgRel8),\n\t/*9113*/ uint16(xMatch),\n\t/*9114*/ uint16(xSetOp), uint16(JNO),\n\t/*9116*/ uint16(xReadCb),\n\t/*9117*/ uint16(xArgRel8),\n\t/*9118*/ uint16(xMatch),\n\t/*9119*/ uint16(xSetOp), uint16(JB),\n\t/*9121*/ uint16(xReadCb),\n\t/*9122*/ uint16(xArgRel8),\n\t/*9123*/ uint16(xMatch),\n\t/*9124*/ uint16(xSetOp), uint16(JAE),\n\t/*9126*/ uint16(xReadCb),\n\t/*9127*/ uint16(xArgRel8),\n\t/*9128*/ uint16(xMatch),\n\t/*9129*/ uint16(xSetOp), uint16(JE),\n\t/*9131*/ uint16(xReadCb),\n\t/*9132*/ uint16(xArgRel8),\n\t/*9133*/ uint16(xMatch),\n\t/*9134*/ uint16(xSetOp), uint16(JNE),\n\t/*9136*/ uint16(xReadCb),\n\t/*9137*/ uint16(xArgRel8),\n\t/*9138*/ uint16(xMatch),\n\t/*9139*/ uint16(xSetOp), uint16(JBE),\n\t/*9141*/ uint16(xReadCb),\n\t/*9142*/ uint16(xArgRel8),\n\t/*9143*/ uint16(xMatch),\n\t/*9144*/ uint16(xCondPrefix), 3,\n\t0xC5, 9164,\n\t0xC4, 9157,\n\t0x0, 9152,\n\t/*9152*/ uint16(xSetOp), uint16(JA),\n\t/*9154*/ uint16(xReadCb),\n\t/*9155*/ uint16(xArgRel8),\n\t/*9156*/ uint16(xMatch),\n\t/*9157*/ uint16(xCondPrefix), 1,\n\t0x0F, 9161,\n\t/*9161*/ uint16(xSetOp), uint16(VZEROUPPER),\n\t/*9163*/ uint16(xMatch),\n\t/*9164*/ uint16(xCondPrefix), 1,\n\t0x0F, 9168,\n\t/*9168*/ uint16(xSetOp), uint16(VZEROUPPER),\n\t/*9170*/ uint16(xMatch),\n\t/*9171*/ uint16(xSetOp), uint16(JS),\n\t/*9173*/ uint16(xReadCb),\n\t/*9174*/ uint16(xArgRel8),\n\t/*9175*/ uint16(xMatch),\n\t/*9176*/ uint16(xSetOp), uint16(JNS),\n\t/*9178*/ uint16(xReadCb),\n\t/*9179*/ uint16(xArgRel8),\n\t/*9180*/ uint16(xMatch),\n\t/*9181*/ uint16(xSetOp), uint16(JP),\n\t/*9183*/ uint16(xReadCb),\n\t/*9184*/ uint16(xArgRel8),\n\t/*9185*/ uint16(xMatch),\n\t/*9186*/ uint16(xSetOp), uint16(JNP),\n\t/*9188*/ uint16(xReadCb),\n\t/*9189*/ uint16(xArgRel8),\n\t/*9190*/ uint16(xMatch),\n\t/*9191*/ uint16(xSetOp), uint16(JL),\n\t/*9193*/ uint16(xReadCb),\n\t/*9194*/ uint16(xArgRel8),\n\t/*9195*/ uint16(xMatch),\n\t/*9196*/ uint16(xSetOp), uint16(JGE),\n\t/*9198*/ uint16(xReadCb),\n\t/*9199*/ uint16(xArgRel8),\n\t/*9200*/ uint16(xMatch),\n\t/*9201*/ uint16(xSetOp), uint16(JLE),\n\t/*9203*/ uint16(xReadCb),\n\t/*9204*/ uint16(xArgRel8),\n\t/*9205*/ uint16(xMatch),\n\t/*9206*/ uint16(xCondPrefix), 3,\n\t0xC5, 9245,\n\t0xC4, 9219,\n\t0x0, 9214,\n\t/*9214*/ uint16(xSetOp), uint16(JG),\n\t/*9216*/ uint16(xReadCb),\n\t/*9217*/ uint16(xArgRel8),\n\t/*9218*/ uint16(xMatch),\n\t/*9219*/ uint16(xCondPrefix), 2,\n\t0xF3, 9235,\n\t0x66, 9225,\n\t/*9225*/ uint16(xCondPrefix), 1,\n\t0x0F, 9229,\n\t/*9229*/ uint16(xSetOp), uint16(VMOVDQA),\n\t/*9231*/ uint16(xReadSlashR),\n\t/*9232*/ uint16(xArgYmm2M256),\n\t/*9233*/ uint16(xArgYmm1),\n\t/*9234*/ uint16(xMatch),\n\t/*9235*/ uint16(xCondPrefix), 1,\n\t0x0F, 9239,\n\t/*9239*/ uint16(xSetOp), uint16(VMOVDQU),\n\t/*9241*/ uint16(xReadSlashR),\n\t/*9242*/ uint16(xArgYmm2M256),\n\t/*9243*/ uint16(xArgYmm1),\n\t/*9244*/ uint16(xMatch),\n\t/*9245*/ uint16(xCondPrefix), 2,\n\t0xF3, 9261,\n\t0x66, 9251,\n\t/*9251*/ uint16(xCondPrefix), 1,\n\t0x0F, 9255,\n\t/*9255*/ uint16(xSetOp), uint16(VMOVDQA),\n\t/*9257*/ uint16(xReadSlashR),\n\t/*9258*/ uint16(xArgYmm2M256),\n\t/*9259*/ uint16(xArgYmm1),\n\t/*9260*/ uint16(xMatch),\n\t/*9261*/ uint16(xCondPrefix), 1,\n\t0x0F, 9265,\n\t/*9265*/ uint16(xSetOp), uint16(VMOVDQU),\n\t/*9267*/ uint16(xReadSlashR),\n\t/*9268*/ uint16(xArgYmm2M256),\n\t/*9269*/ uint16(xArgYmm1),\n\t/*9270*/ uint16(xMatch),\n\t/*9271*/ uint16(xCondSlashR),\n\t9280, // 0\n\t9286, // 1\n\t9292, // 2\n\t9298, // 3\n\t9304, // 4\n\t9310, // 5\n\t9316, // 6\n\t9322, // 7\n\t/*9280*/ uint16(xSetOp), uint16(ADD),\n\t/*9282*/ uint16(xReadIb),\n\t/*9283*/ uint16(xArgRM8),\n\t/*9284*/ uint16(xArgImm8u),\n\t/*9285*/ uint16(xMatch),\n\t/*9286*/ uint16(xSetOp), uint16(OR),\n\t/*9288*/ uint16(xReadIb),\n\t/*9289*/ uint16(xArgRM8),\n\t/*9290*/ uint16(xArgImm8u),\n\t/*9291*/ uint16(xMatch),\n\t/*9292*/ uint16(xSetOp), uint16(ADC),\n\t/*9294*/ uint16(xReadIb),\n\t/*9295*/ uint16(xArgRM8),\n\t/*9296*/ uint16(xArgImm8u),\n\t/*9297*/ uint16(xMatch),\n\t/*9298*/ uint16(xSetOp), uint16(SBB),\n\t/*9300*/ uint16(xReadIb),\n\t/*9301*/ uint16(xArgRM8),\n\t/*9302*/ uint16(xArgImm8u),\n\t/*9303*/ uint16(xMatch),\n\t/*9304*/ uint16(xSetOp), uint16(AND),\n\t/*9306*/ uint16(xReadIb),\n\t/*9307*/ uint16(xArgRM8),\n\t/*9308*/ uint16(xArgImm8u),\n\t/*9309*/ uint16(xMatch),\n\t/*9310*/ uint16(xSetOp), uint16(SUB),\n\t/*9312*/ uint16(xReadIb),\n\t/*9313*/ uint16(xArgRM8),\n\t/*9314*/ uint16(xArgImm8u),\n\t/*9315*/ uint16(xMatch),\n\t/*9316*/ uint16(xSetOp), uint16(XOR),\n\t/*9318*/ uint16(xReadIb),\n\t/*9319*/ uint16(xArgRM8),\n\t/*9320*/ uint16(xArgImm8u),\n\t/*9321*/ uint16(xMatch),\n\t/*9322*/ uint16(xSetOp), uint16(CMP),\n\t/*9324*/ uint16(xReadIb),\n\t/*9325*/ uint16(xArgRM8),\n\t/*9326*/ uint16(xArgImm8u),\n\t/*9327*/ uint16(xMatch),\n\t/*9328*/ uint16(xCondSlashR),\n\t9337, // 0\n\t9366, // 1\n\t9395, // 2\n\t9424, // 3\n\t9453, // 4\n\t9482, // 5\n\t9511, // 6\n\t9540, // 7\n\t/*9337*/ uint16(xCondIs64), 9340, 9356,\n\t/*9340*/ uint16(xCondDataSize), 9344, 9350, 0,\n\t/*9344*/ uint16(xSetOp), uint16(ADD),\n\t/*9346*/ uint16(xReadIw),\n\t/*9347*/ uint16(xArgRM16),\n\t/*9348*/ uint16(xArgImm16),\n\t/*9349*/ uint16(xMatch),\n\t/*9350*/ uint16(xSetOp), uint16(ADD),\n\t/*9352*/ uint16(xReadId),\n\t/*9353*/ uint16(xArgRM32),\n\t/*9354*/ uint16(xArgImm32),\n\t/*9355*/ uint16(xMatch),\n\t/*9356*/ uint16(xCondDataSize), 9344, 9350, 9360,\n\t/*9360*/ uint16(xSetOp), uint16(ADD),\n\t/*9362*/ uint16(xReadId),\n\t/*9363*/ uint16(xArgRM64),\n\t/*9364*/ uint16(xArgImm32),\n\t/*9365*/ uint16(xMatch),\n\t/*9366*/ uint16(xCondIs64), 9369, 9385,\n\t/*9369*/ uint16(xCondDataSize), 9373, 9379, 0,\n\t/*9373*/ uint16(xSetOp), uint16(OR),\n\t/*9375*/ uint16(xReadIw),\n\t/*9376*/ uint16(xArgRM16),\n\t/*9377*/ uint16(xArgImm16),\n\t/*9378*/ uint16(xMatch),\n\t/*9379*/ uint16(xSetOp), uint16(OR),\n\t/*9381*/ uint16(xReadId),\n\t/*9382*/ uint16(xArgRM32),\n\t/*9383*/ uint16(xArgImm32),\n\t/*9384*/ uint16(xMatch),\n\t/*9385*/ uint16(xCondDataSize), 9373, 9379, 9389,\n\t/*9389*/ uint16(xSetOp), uint16(OR),\n\t/*9391*/ uint16(xReadId),\n\t/*9392*/ uint16(xArgRM64),\n\t/*9393*/ uint16(xArgImm32),\n\t/*9394*/ uint16(xMatch),\n\t/*9395*/ uint16(xCondIs64), 9398, 9414,\n\t/*9398*/ uint16(xCondDataSize), 9402, 9408, 0,\n\t/*9402*/ uint16(xSetOp), uint16(ADC),\n\t/*9404*/ uint16(xReadIw),\n\t/*9405*/ uint16(xArgRM16),\n\t/*9406*/ uint16(xArgImm16),\n\t/*9407*/ uint16(xMatch),\n\t/*9408*/ uint16(xSetOp), uint16(ADC),\n\t/*9410*/ uint16(xReadId),\n\t/*9411*/ uint16(xArgRM32),\n\t/*9412*/ uint16(xArgImm32),\n\t/*9413*/ uint16(xMatch),\n\t/*9414*/ uint16(xCondDataSize), 9402, 9408, 9418,\n\t/*9418*/ uint16(xSetOp), uint16(ADC),\n\t/*9420*/ uint16(xReadId),\n\t/*9421*/ uint16(xArgRM64),\n\t/*9422*/ uint16(xArgImm32),\n\t/*9423*/ uint16(xMatch),\n\t/*9424*/ uint16(xCondIs64), 9427, 9443,\n\t/*9427*/ uint16(xCondDataSize), 9431, 9437, 0,\n\t/*9431*/ uint16(xSetOp), uint16(SBB),\n\t/*9433*/ uint16(xReadIw),\n\t/*9434*/ uint16(xArgRM16),\n\t/*9435*/ uint16(xArgImm16),\n\t/*9436*/ uint16(xMatch),\n\t/*9437*/ uint16(xSetOp), uint16(SBB),\n\t/*9439*/ uint16(xReadId),\n\t/*9440*/ uint16(xArgRM32),\n\t/*9441*/ uint16(xArgImm32),\n\t/*9442*/ uint16(xMatch),\n\t/*9443*/ uint16(xCondDataSize), 9431, 9437, 9447,\n\t/*9447*/ uint16(xSetOp), uint16(SBB),\n\t/*9449*/ uint16(xReadId),\n\t/*9450*/ uint16(xArgRM64),\n\t/*9451*/ uint16(xArgImm32),\n\t/*9452*/ uint16(xMatch),\n\t/*9453*/ uint16(xCondIs64), 9456, 9472,\n\t/*9456*/ uint16(xCondDataSize), 9460, 9466, 0,\n\t/*9460*/ uint16(xSetOp), uint16(AND),\n\t/*9462*/ uint16(xReadIw),\n\t/*9463*/ uint16(xArgRM16),\n\t/*9464*/ uint16(xArgImm16),\n\t/*9465*/ uint16(xMatch),\n\t/*9466*/ uint16(xSetOp), uint16(AND),\n\t/*9468*/ uint16(xReadId),\n\t/*9469*/ uint16(xArgRM32),\n\t/*9470*/ uint16(xArgImm32),\n\t/*9471*/ uint16(xMatch),\n\t/*9472*/ uint16(xCondDataSize), 9460, 9466, 9476,\n\t/*9476*/ uint16(xSetOp), uint16(AND),\n\t/*9478*/ uint16(xReadId),\n\t/*9479*/ uint16(xArgRM64),\n\t/*9480*/ uint16(xArgImm32),\n\t/*9481*/ uint16(xMatch),\n\t/*9482*/ uint16(xCondIs64), 9485, 9501,\n\t/*9485*/ uint16(xCondDataSize), 9489, 9495, 0,\n\t/*9489*/ uint16(xSetOp), uint16(SUB),\n\t/*9491*/ uint16(xReadIw),\n\t/*9492*/ uint16(xArgRM16),\n\t/*9493*/ uint16(xArgImm16),\n\t/*9494*/ uint16(xMatch),\n\t/*9495*/ uint16(xSetOp), uint16(SUB),\n\t/*9497*/ uint16(xReadId),\n\t/*9498*/ uint16(xArgRM32),\n\t/*9499*/ uint16(xArgImm32),\n\t/*9500*/ uint16(xMatch),\n\t/*9501*/ uint16(xCondDataSize), 9489, 9495, 9505,\n\t/*9505*/ uint16(xSetOp), uint16(SUB),\n\t/*9507*/ uint16(xReadId),\n\t/*9508*/ uint16(xArgRM64),\n\t/*9509*/ uint16(xArgImm32),\n\t/*9510*/ uint16(xMatch),\n\t/*9511*/ uint16(xCondIs64), 9514, 9530,\n\t/*9514*/ uint16(xCondDataSize), 9518, 9524, 0,\n\t/*9518*/ uint16(xSetOp), uint16(XOR),\n\t/*9520*/ uint16(xReadIw),\n\t/*9521*/ uint16(xArgRM16),\n\t/*9522*/ uint16(xArgImm16),\n\t/*9523*/ uint16(xMatch),\n\t/*9524*/ uint16(xSetOp), uint16(XOR),\n\t/*9526*/ uint16(xReadId),\n\t/*9527*/ uint16(xArgRM32),\n\t/*9528*/ uint16(xArgImm32),\n\t/*9529*/ uint16(xMatch),\n\t/*9530*/ uint16(xCondDataSize), 9518, 9524, 9534,\n\t/*9534*/ uint16(xSetOp), uint16(XOR),\n\t/*9536*/ uint16(xReadId),\n\t/*9537*/ uint16(xArgRM64),\n\t/*9538*/ uint16(xArgImm32),\n\t/*9539*/ uint16(xMatch),\n\t/*9540*/ uint16(xCondIs64), 9543, 9559,\n\t/*9543*/ uint16(xCondDataSize), 9547, 9553, 0,\n\t/*9547*/ uint16(xSetOp), uint16(CMP),\n\t/*9549*/ uint16(xReadIw),\n\t/*9550*/ uint16(xArgRM16),\n\t/*9551*/ uint16(xArgImm16),\n\t/*9552*/ uint16(xMatch),\n\t/*9553*/ uint16(xSetOp), uint16(CMP),\n\t/*9555*/ uint16(xReadId),\n\t/*9556*/ uint16(xArgRM32),\n\t/*9557*/ uint16(xArgImm32),\n\t/*9558*/ uint16(xMatch),\n\t/*9559*/ uint16(xCondDataSize), 9547, 9553, 9563,\n\t/*9563*/ uint16(xSetOp), uint16(CMP),\n\t/*9565*/ uint16(xReadId),\n\t/*9566*/ uint16(xArgRM64),\n\t/*9567*/ uint16(xArgImm32),\n\t/*9568*/ uint16(xMatch),\n\t/*9569*/ uint16(xCondSlashR),\n\t9578, // 0\n\t9607, // 1\n\t9636, // 2\n\t9665, // 3\n\t9694, // 4\n\t9723, // 5\n\t9752, // 6\n\t9781, // 7\n\t/*9578*/ uint16(xCondIs64), 9581, 9597,\n\t/*9581*/ uint16(xCondDataSize), 9585, 9591, 0,\n\t/*9585*/ uint16(xSetOp), uint16(ADD),\n\t/*9587*/ uint16(xReadIb),\n\t/*9588*/ uint16(xArgRM16),\n\t/*9589*/ uint16(xArgImm8),\n\t/*9590*/ uint16(xMatch),\n\t/*9591*/ uint16(xSetOp), uint16(ADD),\n\t/*9593*/ uint16(xReadIb),\n\t/*9594*/ uint16(xArgRM32),\n\t/*9595*/ uint16(xArgImm8),\n\t/*9596*/ uint16(xMatch),\n\t/*9597*/ uint16(xCondDataSize), 9585, 9591, 9601,\n\t/*9601*/ uint16(xSetOp), uint16(ADD),\n\t/*9603*/ uint16(xReadIb),\n\t/*9604*/ uint16(xArgRM64),\n\t/*9605*/ uint16(xArgImm8),\n\t/*9606*/ uint16(xMatch),\n\t/*9607*/ uint16(xCondIs64), 9610, 9626,\n\t/*9610*/ uint16(xCondDataSize), 9614, 9620, 0,\n\t/*9614*/ uint16(xSetOp), uint16(OR),\n\t/*9616*/ uint16(xReadIb),\n\t/*9617*/ uint16(xArgRM16),\n\t/*9618*/ uint16(xArgImm8),\n\t/*9619*/ uint16(xMatch),\n\t/*9620*/ uint16(xSetOp), uint16(OR),\n\t/*9622*/ uint16(xReadIb),\n\t/*9623*/ uint16(xArgRM32),\n\t/*9624*/ uint16(xArgImm8),\n\t/*9625*/ uint16(xMatch),\n\t/*9626*/ uint16(xCondDataSize), 9614, 9620, 9630,\n\t/*9630*/ uint16(xSetOp), uint16(OR),\n\t/*9632*/ uint16(xReadIb),\n\t/*9633*/ uint16(xArgRM64),\n\t/*9634*/ uint16(xArgImm8),\n\t/*9635*/ uint16(xMatch),\n\t/*9636*/ uint16(xCondIs64), 9639, 9655,\n\t/*9639*/ uint16(xCondDataSize), 9643, 9649, 0,\n\t/*9643*/ uint16(xSetOp), uint16(ADC),\n\t/*9645*/ uint16(xReadIb),\n\t/*9646*/ uint16(xArgRM16),\n\t/*9647*/ uint16(xArgImm8),\n\t/*9648*/ uint16(xMatch),\n\t/*9649*/ uint16(xSetOp), uint16(ADC),\n\t/*9651*/ uint16(xReadIb),\n\t/*9652*/ uint16(xArgRM32),\n\t/*9653*/ uint16(xArgImm8),\n\t/*9654*/ uint16(xMatch),\n\t/*9655*/ uint16(xCondDataSize), 9643, 9649, 9659,\n\t/*9659*/ uint16(xSetOp), uint16(ADC),\n\t/*9661*/ uint16(xReadIb),\n\t/*9662*/ uint16(xArgRM64),\n\t/*9663*/ uint16(xArgImm8),\n\t/*9664*/ uint16(xMatch),\n\t/*9665*/ uint16(xCondIs64), 9668, 9684,\n\t/*9668*/ uint16(xCondDataSize), 9672, 9678, 0,\n\t/*9672*/ uint16(xSetOp), uint16(SBB),\n\t/*9674*/ uint16(xReadIb),\n\t/*9675*/ uint16(xArgRM16),\n\t/*9676*/ uint16(xArgImm8),\n\t/*9677*/ uint16(xMatch),\n\t/*9678*/ uint16(xSetOp), uint16(SBB),\n\t/*9680*/ uint16(xReadIb),\n\t/*9681*/ uint16(xArgRM32),\n\t/*9682*/ uint16(xArgImm8),\n\t/*9683*/ uint16(xMatch),\n\t/*9684*/ uint16(xCondDataSize), 9672, 9678, 9688,\n\t/*9688*/ uint16(xSetOp), uint16(SBB),\n\t/*9690*/ uint16(xReadIb),\n\t/*9691*/ uint16(xArgRM64),\n\t/*9692*/ uint16(xArgImm8),\n\t/*9693*/ uint16(xMatch),\n\t/*9694*/ uint16(xCondIs64), 9697, 9713,\n\t/*9697*/ uint16(xCondDataSize), 9701, 9707, 0,\n\t/*9701*/ uint16(xSetOp), uint16(AND),\n\t/*9703*/ uint16(xReadIb),\n\t/*9704*/ uint16(xArgRM16),\n\t/*9705*/ uint16(xArgImm8),\n\t/*9706*/ uint16(xMatch),\n\t/*9707*/ uint16(xSetOp), uint16(AND),\n\t/*9709*/ uint16(xReadIb),\n\t/*9710*/ uint16(xArgRM32),\n\t/*9711*/ uint16(xArgImm8),\n\t/*9712*/ uint16(xMatch),\n\t/*9713*/ uint16(xCondDataSize), 9701, 9707, 9717,\n\t/*9717*/ uint16(xSetOp), uint16(AND),\n\t/*9719*/ uint16(xReadIb),\n\t/*9720*/ uint16(xArgRM64),\n\t/*9721*/ uint16(xArgImm8),\n\t/*9722*/ uint16(xMatch),\n\t/*9723*/ uint16(xCondIs64), 9726, 9742,\n\t/*9726*/ uint16(xCondDataSize), 9730, 9736, 0,\n\t/*9730*/ uint16(xSetOp), uint16(SUB),\n\t/*9732*/ uint16(xReadIb),\n\t/*9733*/ uint16(xArgRM16),\n\t/*9734*/ uint16(xArgImm8),\n\t/*9735*/ uint16(xMatch),\n\t/*9736*/ uint16(xSetOp), uint16(SUB),\n\t/*9738*/ uint16(xReadIb),\n\t/*9739*/ uint16(xArgRM32),\n\t/*9740*/ uint16(xArgImm8),\n\t/*9741*/ uint16(xMatch),\n\t/*9742*/ uint16(xCondDataSize), 9730, 9736, 9746,\n\t/*9746*/ uint16(xSetOp), uint16(SUB),\n\t/*9748*/ uint16(xReadIb),\n\t/*9749*/ uint16(xArgRM64),\n\t/*9750*/ uint16(xArgImm8),\n\t/*9751*/ uint16(xMatch),\n\t/*9752*/ uint16(xCondIs64), 9755, 9771,\n\t/*9755*/ uint16(xCondDataSize), 9759, 9765, 0,\n\t/*9759*/ uint16(xSetOp), uint16(XOR),\n\t/*9761*/ uint16(xReadIb),\n\t/*9762*/ uint16(xArgRM16),\n\t/*9763*/ uint16(xArgImm8),\n\t/*9764*/ uint16(xMatch),\n\t/*9765*/ uint16(xSetOp), uint16(XOR),\n\t/*9767*/ uint16(xReadIb),\n\t/*9768*/ uint16(xArgRM32),\n\t/*9769*/ uint16(xArgImm8),\n\t/*9770*/ uint16(xMatch),\n\t/*9771*/ uint16(xCondDataSize), 9759, 9765, 9775,\n\t/*9775*/ uint16(xSetOp), uint16(XOR),\n\t/*9777*/ uint16(xReadIb),\n\t/*9778*/ uint16(xArgRM64),\n\t/*9779*/ uint16(xArgImm8),\n\t/*9780*/ uint16(xMatch),\n\t/*9781*/ uint16(xCondIs64), 9784, 9800,\n\t/*9784*/ uint16(xCondDataSize), 9788, 9794, 0,\n\t/*9788*/ uint16(xSetOp), uint16(CMP),\n\t/*9790*/ uint16(xReadIb),\n\t/*9791*/ uint16(xArgRM16),\n\t/*9792*/ uint16(xArgImm8),\n\t/*9793*/ uint16(xMatch),\n\t/*9794*/ uint16(xSetOp), uint16(CMP),\n\t/*9796*/ uint16(xReadIb),\n\t/*9797*/ uint16(xArgRM32),\n\t/*9798*/ uint16(xArgImm8),\n\t/*9799*/ uint16(xMatch),\n\t/*9800*/ uint16(xCondDataSize), 9788, 9794, 9804,\n\t/*9804*/ uint16(xSetOp), uint16(CMP),\n\t/*9806*/ uint16(xReadIb),\n\t/*9807*/ uint16(xArgRM64),\n\t/*9808*/ uint16(xArgImm8),\n\t/*9809*/ uint16(xMatch),\n\t/*9810*/ uint16(xSetOp), uint16(TEST),\n\t/*9812*/ uint16(xReadSlashR),\n\t/*9813*/ uint16(xArgRM8),\n\t/*9814*/ uint16(xArgR8),\n\t/*9815*/ uint16(xMatch),\n\t/*9816*/ uint16(xCondIs64), 9819, 9835,\n\t/*9819*/ uint16(xCondDataSize), 9823, 9829, 0,\n\t/*9823*/ uint16(xSetOp), uint16(TEST),\n\t/*9825*/ uint16(xReadSlashR),\n\t/*9826*/ uint16(xArgRM16),\n\t/*9827*/ uint16(xArgR16),\n\t/*9828*/ uint16(xMatch),\n\t/*9829*/ uint16(xSetOp), uint16(TEST),\n\t/*9831*/ uint16(xReadSlashR),\n\t/*9832*/ uint16(xArgRM32),\n\t/*9833*/ uint16(xArgR32),\n\t/*9834*/ uint16(xMatch),\n\t/*9835*/ uint16(xCondDataSize), 9823, 9829, 9839,\n\t/*9839*/ uint16(xSetOp), uint16(TEST),\n\t/*9841*/ uint16(xReadSlashR),\n\t/*9842*/ uint16(xArgRM64),\n\t/*9843*/ uint16(xArgR64),\n\t/*9844*/ uint16(xMatch),\n\t/*9845*/ uint16(xSetOp), uint16(XCHG),\n\t/*9847*/ uint16(xReadSlashR),\n\t/*9848*/ uint16(xArgRM8),\n\t/*9849*/ uint16(xArgR8),\n\t/*9850*/ uint16(xMatch),\n\t/*9851*/ uint16(xCondIs64), 9854, 9870,\n\t/*9854*/ uint16(xCondDataSize), 9858, 9864, 0,\n\t/*9858*/ uint16(xSetOp), uint16(XCHG),\n\t/*9860*/ uint16(xReadSlashR),\n\t/*9861*/ uint16(xArgRM16),\n\t/*9862*/ uint16(xArgR16),\n\t/*9863*/ uint16(xMatch),\n\t/*9864*/ uint16(xSetOp), uint16(XCHG),\n\t/*9866*/ uint16(xReadSlashR),\n\t/*9867*/ uint16(xArgRM32),\n\t/*9868*/ uint16(xArgR32),\n\t/*9869*/ uint16(xMatch),\n\t/*9870*/ uint16(xCondDataSize), 9858, 9864, 9874,\n\t/*9874*/ uint16(xSetOp), uint16(XCHG),\n\t/*9876*/ uint16(xReadSlashR),\n\t/*9877*/ uint16(xArgRM64),\n\t/*9878*/ uint16(xArgR64),\n\t/*9879*/ uint16(xMatch),\n\t/*9880*/ uint16(xSetOp), uint16(MOV),\n\t/*9882*/ uint16(xReadSlashR),\n\t/*9883*/ uint16(xArgRM8),\n\t/*9884*/ uint16(xArgR8),\n\t/*9885*/ uint16(xMatch),\n\t/*9886*/ uint16(xCondDataSize), 9890, 9896, 9902,\n\t/*9890*/ uint16(xSetOp), uint16(MOV),\n\t/*9892*/ uint16(xReadSlashR),\n\t/*9893*/ uint16(xArgRM16),\n\t/*9894*/ uint16(xArgR16),\n\t/*9895*/ uint16(xMatch),\n\t/*9896*/ uint16(xSetOp), uint16(MOV),\n\t/*9898*/ uint16(xReadSlashR),\n\t/*9899*/ uint16(xArgRM32),\n\t/*9900*/ uint16(xArgR32),\n\t/*9901*/ uint16(xMatch),\n\t/*9902*/ uint16(xSetOp), uint16(MOV),\n\t/*9904*/ uint16(xReadSlashR),\n\t/*9905*/ uint16(xArgRM64),\n\t/*9906*/ uint16(xArgR64),\n\t/*9907*/ uint16(xMatch),\n\t/*9908*/ uint16(xSetOp), uint16(MOV),\n\t/*9910*/ uint16(xReadSlashR),\n\t/*9911*/ uint16(xArgR8),\n\t/*9912*/ uint16(xArgRM8),\n\t/*9913*/ uint16(xMatch),\n\t/*9914*/ uint16(xCondDataSize), 9918, 9924, 9930,\n\t/*9918*/ uint16(xSetOp), uint16(MOV),\n\t/*9920*/ uint16(xReadSlashR),\n\t/*9921*/ uint16(xArgR16),\n\t/*9922*/ uint16(xArgRM16),\n\t/*9923*/ uint16(xMatch),\n\t/*9924*/ uint16(xSetOp), uint16(MOV),\n\t/*9926*/ uint16(xReadSlashR),\n\t/*9927*/ uint16(xArgR32),\n\t/*9928*/ uint16(xArgRM32),\n\t/*9929*/ uint16(xMatch),\n\t/*9930*/ uint16(xSetOp), uint16(MOV),\n\t/*9932*/ uint16(xReadSlashR),\n\t/*9933*/ uint16(xArgR64),\n\t/*9934*/ uint16(xArgRM64),\n\t/*9935*/ uint16(xMatch),\n\t/*9936*/ uint16(xCondIs64), 9939, 9955,\n\t/*9939*/ uint16(xCondDataSize), 9943, 9949, 0,\n\t/*9943*/ uint16(xSetOp), uint16(MOV),\n\t/*9945*/ uint16(xReadSlashR),\n\t/*9946*/ uint16(xArgRM16),\n\t/*9947*/ uint16(xArgSreg),\n\t/*9948*/ uint16(xMatch),\n\t/*9949*/ uint16(xSetOp), uint16(MOV),\n\t/*9951*/ uint16(xReadSlashR),\n\t/*9952*/ uint16(xArgR32M16),\n\t/*9953*/ uint16(xArgSreg),\n\t/*9954*/ uint16(xMatch),\n\t/*9955*/ uint16(xCondDataSize), 9943, 9949, 9959,\n\t/*9959*/ uint16(xSetOp), uint16(MOV),\n\t/*9961*/ uint16(xReadSlashR),\n\t/*9962*/ uint16(xArgR64M16),\n\t/*9963*/ uint16(xArgSreg),\n\t/*9964*/ uint16(xMatch),\n\t/*9965*/ uint16(xCondIs64), 9968, 9984,\n\t/*9968*/ uint16(xCondDataSize), 9972, 9978, 0,\n\t/*9972*/ uint16(xSetOp), uint16(LEA),\n\t/*9974*/ uint16(xReadSlashR),\n\t/*9975*/ uint16(xArgR16),\n\t/*9976*/ uint16(xArgM),\n\t/*9977*/ uint16(xMatch),\n\t/*9978*/ uint16(xSetOp), uint16(LEA),\n\t/*9980*/ uint16(xReadSlashR),\n\t/*9981*/ uint16(xArgR32),\n\t/*9982*/ uint16(xArgM),\n\t/*9983*/ uint16(xMatch),\n\t/*9984*/ uint16(xCondDataSize), 9972, 9978, 9988,\n\t/*9988*/ uint16(xSetOp), uint16(LEA),\n\t/*9990*/ uint16(xReadSlashR),\n\t/*9991*/ uint16(xArgR64),\n\t/*9992*/ uint16(xArgM),\n\t/*9993*/ uint16(xMatch),\n\t/*9994*/ uint16(xCondIs64), 9997, 10013,\n\t/*9997*/ uint16(xCondDataSize), 10001, 10007, 0,\n\t/*10001*/ uint16(xSetOp), uint16(MOV),\n\t/*10003*/ uint16(xReadSlashR),\n\t/*10004*/ uint16(xArgSreg),\n\t/*10005*/ uint16(xArgRM16),\n\t/*10006*/ uint16(xMatch),\n\t/*10007*/ uint16(xSetOp), uint16(MOV),\n\t/*10009*/ uint16(xReadSlashR),\n\t/*10010*/ uint16(xArgSreg),\n\t/*10011*/ uint16(xArgR32M16),\n\t/*10012*/ uint16(xMatch),\n\t/*10013*/ uint16(xCondDataSize), 10001, 10007, 10017,\n\t/*10017*/ uint16(xSetOp), uint16(MOV),\n\t/*10019*/ uint16(xReadSlashR),\n\t/*10020*/ uint16(xArgSreg),\n\t/*10021*/ uint16(xArgR64M16),\n\t/*10022*/ uint16(xMatch),\n\t/*10023*/ uint16(xCondSlashR),\n\t10032, // 0\n\t0,     // 1\n\t0,     // 2\n\t0,     // 3\n\t0,     // 4\n\t0,     // 5\n\t0,     // 6\n\t0,     // 7\n\t/*10032*/ uint16(xCondIs64), 10035, 10047,\n\t/*10035*/ uint16(xCondDataSize), 10039, 10043, 0,\n\t/*10039*/ uint16(xSetOp), uint16(POP),\n\t/*10041*/ uint16(xArgRM16),\n\t/*10042*/ uint16(xMatch),\n\t/*10043*/ uint16(xSetOp), uint16(POP),\n\t/*10045*/ uint16(xArgRM32),\n\t/*10046*/ uint16(xMatch),\n\t/*10047*/ uint16(xCondDataSize), 10039, 10051, 10055,\n\t/*10051*/ uint16(xSetOp), uint16(POP),\n\t/*10053*/ uint16(xArgRM64),\n\t/*10054*/ uint16(xMatch),\n\t/*10055*/ uint16(xSetOp), uint16(POP),\n\t/*10057*/ uint16(xArgRM64),\n\t/*10058*/ uint16(xMatch),\n\t/*10059*/ uint16(xCondIs64), 10062, 10076,\n\t/*10062*/ uint16(xCondDataSize), 10066, 10071, 0,\n\t/*10066*/ uint16(xSetOp), uint16(XCHG),\n\t/*10068*/ uint16(xArgR16op),\n\t/*10069*/ uint16(xArgAX),\n\t/*10070*/ uint16(xMatch),\n\t/*10071*/ uint16(xSetOp), uint16(XCHG),\n\t/*10073*/ uint16(xArgR32op),\n\t/*10074*/ uint16(xArgEAX),\n\t/*10075*/ uint16(xMatch),\n\t/*10076*/ uint16(xCondDataSize), 10066, 10071, 10080,\n\t/*10080*/ uint16(xSetOp), uint16(XCHG),\n\t/*10082*/ uint16(xArgR64op),\n\t/*10083*/ uint16(xArgRAX),\n\t/*10084*/ uint16(xMatch),\n\t/*10085*/ uint16(xCondIs64), 10088, 10098,\n\t/*10088*/ uint16(xCondDataSize), 10092, 10095, 0,\n\t/*10092*/ uint16(xSetOp), uint16(CBW),\n\t/*10094*/ uint16(xMatch),\n\t/*10095*/ uint16(xSetOp), uint16(CWDE),\n\t/*10097*/ uint16(xMatch),\n\t/*10098*/ uint16(xCondDataSize), 10092, 10095, 10102,\n\t/*10102*/ uint16(xSetOp), uint16(CDQE),\n\t/*10104*/ uint16(xMatch),\n\t/*10105*/ uint16(xCondIs64), 10108, 10118,\n\t/*10108*/ uint16(xCondDataSize), 10112, 10115, 0,\n\t/*10112*/ uint16(xSetOp), uint16(CWD),\n\t/*10114*/ uint16(xMatch),\n\t/*10115*/ uint16(xSetOp), uint16(CDQ),\n\t/*10117*/ uint16(xMatch),\n\t/*10118*/ uint16(xCondDataSize), 10112, 10115, 10122,\n\t/*10122*/ uint16(xSetOp), uint16(CQO),\n\t/*10124*/ uint16(xMatch),\n\t/*10125*/ uint16(xCondIs64), 10128, 0,\n\t/*10128*/ uint16(xCondDataSize), 10132, 10137, 0,\n\t/*10132*/ uint16(xSetOp), uint16(LCALL),\n\t/*10134*/ uint16(xReadCd),\n\t/*10135*/ uint16(xArgPtr16colon16),\n\t/*10136*/ uint16(xMatch),\n\t/*10137*/ uint16(xSetOp), uint16(LCALL),\n\t/*10139*/ uint16(xReadCp),\n\t/*10140*/ uint16(xArgPtr16colon32),\n\t/*10141*/ uint16(xMatch),\n\t/*10142*/ uint16(xSetOp), uint16(FWAIT),\n\t/*10144*/ uint16(xMatch),\n\t/*10145*/ uint16(xCondIs64), 10148, 10158,\n\t/*10148*/ uint16(xCondDataSize), 10152, 10155, 0,\n\t/*10152*/ uint16(xSetOp), uint16(PUSHF),\n\t/*10154*/ uint16(xMatch),\n\t/*10155*/ uint16(xSetOp), uint16(PUSHFD),\n\t/*10157*/ uint16(xMatch),\n\t/*10158*/ uint16(xCondDataSize), 10152, 10162, 10165,\n\t/*10162*/ uint16(xSetOp), uint16(PUSHFQ),\n\t/*10164*/ uint16(xMatch),\n\t/*10165*/ uint16(xSetOp), uint16(PUSHFQ),\n\t/*10167*/ uint16(xMatch),\n\t/*10168*/ uint16(xCondIs64), 10171, 10181,\n\t/*10171*/ uint16(xCondDataSize), 10175, 10178, 0,\n\t/*10175*/ uint16(xSetOp), uint16(POPF),\n\t/*10177*/ uint16(xMatch),\n\t/*10178*/ uint16(xSetOp), uint16(POPFD),\n\t/*10180*/ uint16(xMatch),\n\t/*10181*/ uint16(xCondDataSize), 10175, 10185, 10188,\n\t/*10185*/ uint16(xSetOp), uint16(POPFQ),\n\t/*10187*/ uint16(xMatch),\n\t/*10188*/ uint16(xSetOp), uint16(POPFQ),\n\t/*10190*/ uint16(xMatch),\n\t/*10191*/ uint16(xSetOp), uint16(SAHF),\n\t/*10193*/ uint16(xMatch),\n\t/*10194*/ uint16(xSetOp), uint16(LAHF),\n\t/*10196*/ uint16(xMatch),\n\t/*10197*/ uint16(xCondIs64), 10200, 10206,\n\t/*10200*/ uint16(xSetOp), uint16(MOV),\n\t/*10202*/ uint16(xReadCm),\n\t/*10203*/ uint16(xArgAL),\n\t/*10204*/ uint16(xArgMoffs8),\n\t/*10205*/ uint16(xMatch),\n\t/*10206*/ uint16(xCondDataSize), 10200, 10200, 10210,\n\t/*10210*/ uint16(xSetOp), uint16(MOV),\n\t/*10212*/ uint16(xReadCm),\n\t/*10213*/ uint16(xArgAL),\n\t/*10214*/ uint16(xArgMoffs8),\n\t/*10215*/ uint16(xMatch),\n\t/*10216*/ uint16(xCondDataSize), 10220, 10226, 10232,\n\t/*10220*/ uint16(xSetOp), uint16(MOV),\n\t/*10222*/ uint16(xReadCm),\n\t/*10223*/ uint16(xArgAX),\n\t/*10224*/ uint16(xArgMoffs16),\n\t/*10225*/ uint16(xMatch),\n\t/*10226*/ uint16(xSetOp), uint16(MOV),\n\t/*10228*/ uint16(xReadCm),\n\t/*10229*/ uint16(xArgEAX),\n\t/*10230*/ uint16(xArgMoffs32),\n\t/*10231*/ uint16(xMatch),\n\t/*10232*/ uint16(xSetOp), uint16(MOV),\n\t/*10234*/ uint16(xReadCm),\n\t/*10235*/ uint16(xArgRAX),\n\t/*10236*/ uint16(xArgMoffs64),\n\t/*10237*/ uint16(xMatch),\n\t/*10238*/ uint16(xCondIs64), 10241, 10247,\n\t/*10241*/ uint16(xSetOp), uint16(MOV),\n\t/*10243*/ uint16(xReadCm),\n\t/*10244*/ uint16(xArgMoffs8),\n\t/*10245*/ uint16(xArgAL),\n\t/*10246*/ uint16(xMatch),\n\t/*10247*/ uint16(xCondDataSize), 10241, 10241, 10251,\n\t/*10251*/ uint16(xSetOp), uint16(MOV),\n\t/*10253*/ uint16(xReadCm),\n\t/*10254*/ uint16(xArgMoffs8),\n\t/*10255*/ uint16(xArgAL),\n\t/*10256*/ uint16(xMatch),\n\t/*10257*/ uint16(xCondDataSize), 10261, 10267, 10273,\n\t/*10261*/ uint16(xSetOp), uint16(MOV),\n\t/*10263*/ uint16(xReadCm),\n\t/*10264*/ uint16(xArgMoffs16),\n\t/*10265*/ uint16(xArgAX),\n\t/*10266*/ uint16(xMatch),\n\t/*10267*/ uint16(xSetOp), uint16(MOV),\n\t/*10269*/ uint16(xReadCm),\n\t/*10270*/ uint16(xArgMoffs32),\n\t/*10271*/ uint16(xArgEAX),\n\t/*10272*/ uint16(xMatch),\n\t/*10273*/ uint16(xSetOp), uint16(MOV),\n\t/*10275*/ uint16(xReadCm),\n\t/*10276*/ uint16(xArgMoffs64),\n\t/*10277*/ uint16(xArgRAX),\n\t/*10278*/ uint16(xMatch),\n\t/*10279*/ uint16(xSetOp), uint16(MOVSB),\n\t/*10281*/ uint16(xMatch),\n\t/*10282*/ uint16(xCondIs64), 10285, 10295,\n\t/*10285*/ uint16(xCondDataSize), 10289, 10292, 0,\n\t/*10289*/ uint16(xSetOp), uint16(MOVSW),\n\t/*10291*/ uint16(xMatch),\n\t/*10292*/ uint16(xSetOp), uint16(MOVSD),\n\t/*10294*/ uint16(xMatch),\n\t/*10295*/ uint16(xCondDataSize), 10289, 10292, 10299,\n\t/*10299*/ uint16(xSetOp), uint16(MOVSQ),\n\t/*10301*/ uint16(xMatch),\n\t/*10302*/ uint16(xSetOp), uint16(CMPSB),\n\t/*10304*/ uint16(xMatch),\n\t/*10305*/ uint16(xCondIs64), 10308, 10318,\n\t/*10308*/ uint16(xCondDataSize), 10312, 10315, 0,\n\t/*10312*/ uint16(xSetOp), uint16(CMPSW),\n\t/*10314*/ uint16(xMatch),\n\t/*10315*/ uint16(xSetOp), uint16(CMPSD),\n\t/*10317*/ uint16(xMatch),\n\t/*10318*/ uint16(xCondDataSize), 10312, 10315, 10322,\n\t/*10322*/ uint16(xSetOp), uint16(CMPSQ),\n\t/*10324*/ uint16(xMatch),\n\t/*10325*/ uint16(xSetOp), uint16(TEST),\n\t/*10327*/ uint16(xReadIb),\n\t/*10328*/ uint16(xArgAL),\n\t/*10329*/ uint16(xArgImm8u),\n\t/*10330*/ uint16(xMatch),\n\t/*10331*/ uint16(xCondIs64), 10334, 10350,\n\t/*10334*/ uint16(xCondDataSize), 10338, 10344, 0,\n\t/*10338*/ uint16(xSetOp), uint16(TEST),\n\t/*10340*/ uint16(xReadIw),\n\t/*10341*/ uint16(xArgAX),\n\t/*10342*/ uint16(xArgImm16),\n\t/*10343*/ uint16(xMatch),\n\t/*10344*/ uint16(xSetOp), uint16(TEST),\n\t/*10346*/ uint16(xReadId),\n\t/*10347*/ uint16(xArgEAX),\n\t/*10348*/ uint16(xArgImm32),\n\t/*10349*/ uint16(xMatch),\n\t/*10350*/ uint16(xCondDataSize), 10338, 10344, 10354,\n\t/*10354*/ uint16(xSetOp), uint16(TEST),\n\t/*10356*/ uint16(xReadId),\n\t/*10357*/ uint16(xArgRAX),\n\t/*10358*/ uint16(xArgImm32),\n\t/*10359*/ uint16(xMatch),\n\t/*10360*/ uint16(xSetOp), uint16(STOSB),\n\t/*10362*/ uint16(xMatch),\n\t/*10363*/ uint16(xCondIs64), 10366, 10376,\n\t/*10366*/ uint16(xCondDataSize), 10370, 10373, 0,\n\t/*10370*/ uint16(xSetOp), uint16(STOSW),\n\t/*10372*/ uint16(xMatch),\n\t/*10373*/ uint16(xSetOp), uint16(STOSD),\n\t/*10375*/ uint16(xMatch),\n\t/*10376*/ uint16(xCondDataSize), 10370, 10373, 10380,\n\t/*10380*/ uint16(xSetOp), uint16(STOSQ),\n\t/*10382*/ uint16(xMatch),\n\t/*10383*/ uint16(xSetOp), uint16(LODSB),\n\t/*10385*/ uint16(xMatch),\n\t/*10386*/ uint16(xCondIs64), 10389, 10399,\n\t/*10389*/ uint16(xCondDataSize), 10393, 10396, 0,\n\t/*10393*/ uint16(xSetOp), uint16(LODSW),\n\t/*10395*/ uint16(xMatch),\n\t/*10396*/ uint16(xSetOp), uint16(LODSD),\n\t/*10398*/ uint16(xMatch),\n\t/*10399*/ uint16(xCondDataSize), 10393, 10396, 10403,\n\t/*10403*/ uint16(xSetOp), uint16(LODSQ),\n\t/*10405*/ uint16(xMatch),\n\t/*10406*/ uint16(xSetOp), uint16(SCASB),\n\t/*10408*/ uint16(xMatch),\n\t/*10409*/ uint16(xCondIs64), 10412, 10422,\n\t/*10412*/ uint16(xCondDataSize), 10416, 10419, 0,\n\t/*10416*/ uint16(xSetOp), uint16(SCASW),\n\t/*10418*/ uint16(xMatch),\n\t/*10419*/ uint16(xSetOp), uint16(SCASD),\n\t/*10421*/ uint16(xMatch),\n\t/*10422*/ uint16(xCondDataSize), 10416, 10419, 10426,\n\t/*10426*/ uint16(xSetOp), uint16(SCASQ),\n\t/*10428*/ uint16(xMatch),\n\t/*10429*/ uint16(xSetOp), uint16(MOV),\n\t/*10431*/ uint16(xReadIb),\n\t/*10432*/ uint16(xArgR8op),\n\t/*10433*/ uint16(xArgImm8u),\n\t/*10434*/ uint16(xMatch),\n\t/*10435*/ uint16(xCondIs64), 10438, 10454,\n\t/*10438*/ uint16(xCondDataSize), 10442, 10448, 0,\n\t/*10442*/ uint16(xSetOp), uint16(MOV),\n\t/*10444*/ uint16(xReadIw),\n\t/*10445*/ uint16(xArgR16op),\n\t/*10446*/ uint16(xArgImm16),\n\t/*10447*/ uint16(xMatch),\n\t/*10448*/ uint16(xSetOp), uint16(MOV),\n\t/*10450*/ uint16(xReadId),\n\t/*10451*/ uint16(xArgR32op),\n\t/*10452*/ uint16(xArgImm32),\n\t/*10453*/ uint16(xMatch),\n\t/*10454*/ uint16(xCondDataSize), 10442, 10448, 10458,\n\t/*10458*/ uint16(xSetOp), uint16(MOV),\n\t/*10460*/ uint16(xReadIo),\n\t/*10461*/ uint16(xArgR64op),\n\t/*10462*/ uint16(xArgImm64),\n\t/*10463*/ uint16(xMatch),\n\t/*10464*/ uint16(xCondSlashR),\n\t10473, // 0\n\t10479, // 1\n\t10485, // 2\n\t10491, // 3\n\t10497, // 4\n\t10503, // 5\n\t0,     // 6\n\t10509, // 7\n\t/*10473*/ uint16(xSetOp), uint16(ROL),\n\t/*10475*/ uint16(xReadIb),\n\t/*10476*/ uint16(xArgRM8),\n\t/*10477*/ uint16(xArgImm8u),\n\t/*10478*/ uint16(xMatch),\n\t/*10479*/ uint16(xSetOp), uint16(ROR),\n\t/*10481*/ uint16(xReadIb),\n\t/*10482*/ uint16(xArgRM8),\n\t/*10483*/ uint16(xArgImm8u),\n\t/*10484*/ uint16(xMatch),\n\t/*10485*/ uint16(xSetOp), uint16(RCL),\n\t/*10487*/ uint16(xReadIb),\n\t/*10488*/ uint16(xArgRM8),\n\t/*10489*/ uint16(xArgImm8u),\n\t/*10490*/ uint16(xMatch),\n\t/*10491*/ uint16(xSetOp), uint16(RCR),\n\t/*10493*/ uint16(xReadIb),\n\t/*10494*/ uint16(xArgRM8),\n\t/*10495*/ uint16(xArgImm8u),\n\t/*10496*/ uint16(xMatch),\n\t/*10497*/ uint16(xSetOp), uint16(SHL),\n\t/*10499*/ uint16(xReadIb),\n\t/*10500*/ uint16(xArgRM8),\n\t/*10501*/ uint16(xArgImm8u),\n\t/*10502*/ uint16(xMatch),\n\t/*10503*/ uint16(xSetOp), uint16(SHR),\n\t/*10505*/ uint16(xReadIb),\n\t/*10506*/ uint16(xArgRM8),\n\t/*10507*/ uint16(xArgImm8u),\n\t/*10508*/ uint16(xMatch),\n\t/*10509*/ uint16(xSetOp), uint16(SAR),\n\t/*10511*/ uint16(xReadIb),\n\t/*10512*/ uint16(xArgRM8),\n\t/*10513*/ uint16(xArgImm8u),\n\t/*10514*/ uint16(xMatch),\n\t/*10515*/ uint16(xCondSlashR),\n\t10524, // 0\n\t10546, // 1\n\t10568, // 2\n\t10597, // 3\n\t10626, // 4\n\t10655, // 5\n\t0,     // 6\n\t10684, // 7\n\t/*10524*/ uint16(xCondDataSize), 10528, 10534, 10540,\n\t/*10528*/ uint16(xSetOp), uint16(ROL),\n\t/*10530*/ uint16(xReadIb),\n\t/*10531*/ uint16(xArgRM16),\n\t/*10532*/ uint16(xArgImm8u),\n\t/*10533*/ uint16(xMatch),\n\t/*10534*/ uint16(xSetOp), uint16(ROL),\n\t/*10536*/ uint16(xReadIb),\n\t/*10537*/ uint16(xArgRM32),\n\t/*10538*/ uint16(xArgImm8u),\n\t/*10539*/ uint16(xMatch),\n\t/*10540*/ uint16(xSetOp), uint16(ROL),\n\t/*10542*/ uint16(xReadIb),\n\t/*10543*/ uint16(xArgRM64),\n\t/*10544*/ uint16(xArgImm8u),\n\t/*10545*/ uint16(xMatch),\n\t/*10546*/ uint16(xCondDataSize), 10550, 10556, 10562,\n\t/*10550*/ uint16(xSetOp), uint16(ROR),\n\t/*10552*/ uint16(xReadIb),\n\t/*10553*/ uint16(xArgRM16),\n\t/*10554*/ uint16(xArgImm8u),\n\t/*10555*/ uint16(xMatch),\n\t/*10556*/ uint16(xSetOp), uint16(ROR),\n\t/*10558*/ uint16(xReadIb),\n\t/*10559*/ uint16(xArgRM32),\n\t/*10560*/ uint16(xArgImm8u),\n\t/*10561*/ uint16(xMatch),\n\t/*10562*/ uint16(xSetOp), uint16(ROR),\n\t/*10564*/ uint16(xReadIb),\n\t/*10565*/ uint16(xArgRM64),\n\t/*10566*/ uint16(xArgImm8u),\n\t/*10567*/ uint16(xMatch),\n\t/*10568*/ uint16(xCondIs64), 10571, 10587,\n\t/*10571*/ uint16(xCondDataSize), 10575, 10581, 0,\n\t/*10575*/ uint16(xSetOp), uint16(RCL),\n\t/*10577*/ uint16(xReadIb),\n\t/*10578*/ uint16(xArgRM16),\n\t/*10579*/ uint16(xArgImm8u),\n\t/*10580*/ uint16(xMatch),\n\t/*10581*/ uint16(xSetOp), uint16(RCL),\n\t/*10583*/ uint16(xReadIb),\n\t/*10584*/ uint16(xArgRM32),\n\t/*10585*/ uint16(xArgImm8u),\n\t/*10586*/ uint16(xMatch),\n\t/*10587*/ uint16(xCondDataSize), 10575, 10581, 10591,\n\t/*10591*/ uint16(xSetOp), uint16(RCL),\n\t/*10593*/ uint16(xReadIb),\n\t/*10594*/ uint16(xArgRM64),\n\t/*10595*/ uint16(xArgImm8u),\n\t/*10596*/ uint16(xMatch),\n\t/*10597*/ uint16(xCondIs64), 10600, 10616,\n\t/*10600*/ uint16(xCondDataSize), 10604, 10610, 0,\n\t/*10604*/ uint16(xSetOp), uint16(RCR),\n\t/*10606*/ uint16(xReadIb),\n\t/*10607*/ uint16(xArgRM16),\n\t/*10608*/ uint16(xArgImm8u),\n\t/*10609*/ uint16(xMatch),\n\t/*10610*/ uint16(xSetOp), uint16(RCR),\n\t/*10612*/ uint16(xReadIb),\n\t/*10613*/ uint16(xArgRM32),\n\t/*10614*/ uint16(xArgImm8u),\n\t/*10615*/ uint16(xMatch),\n\t/*10616*/ uint16(xCondDataSize), 10604, 10610, 10620,\n\t/*10620*/ uint16(xSetOp), uint16(RCR),\n\t/*10622*/ uint16(xReadIb),\n\t/*10623*/ uint16(xArgRM64),\n\t/*10624*/ uint16(xArgImm8u),\n\t/*10625*/ uint16(xMatch),\n\t/*10626*/ uint16(xCondIs64), 10629, 10645,\n\t/*10629*/ uint16(xCondDataSize), 10633, 10639, 0,\n\t/*10633*/ uint16(xSetOp), uint16(SHL),\n\t/*10635*/ uint16(xReadIb),\n\t/*10636*/ uint16(xArgRM16),\n\t/*10637*/ uint16(xArgImm8u),\n\t/*10638*/ uint16(xMatch),\n\t/*10639*/ uint16(xSetOp), uint16(SHL),\n\t/*10641*/ uint16(xReadIb),\n\t/*10642*/ uint16(xArgRM32),\n\t/*10643*/ uint16(xArgImm8u),\n\t/*10644*/ uint16(xMatch),\n\t/*10645*/ uint16(xCondDataSize), 10633, 10639, 10649,\n\t/*10649*/ uint16(xSetOp), uint16(SHL),\n\t/*10651*/ uint16(xReadIb),\n\t/*10652*/ uint16(xArgRM64),\n\t/*10653*/ uint16(xArgImm8u),\n\t/*10654*/ uint16(xMatch),\n\t/*10655*/ uint16(xCondIs64), 10658, 10674,\n\t/*10658*/ uint16(xCondDataSize), 10662, 10668, 0,\n\t/*10662*/ uint16(xSetOp), uint16(SHR),\n\t/*10664*/ uint16(xReadIb),\n\t/*10665*/ uint16(xArgRM16),\n\t/*10666*/ uint16(xArgImm8u),\n\t/*10667*/ uint16(xMatch),\n\t/*10668*/ uint16(xSetOp), uint16(SHR),\n\t/*10670*/ uint16(xReadIb),\n\t/*10671*/ uint16(xArgRM32),\n\t/*10672*/ uint16(xArgImm8u),\n\t/*10673*/ uint16(xMatch),\n\t/*10674*/ uint16(xCondDataSize), 10662, 10668, 10678,\n\t/*10678*/ uint16(xSetOp), uint16(SHR),\n\t/*10680*/ uint16(xReadIb),\n\t/*10681*/ uint16(xArgRM64),\n\t/*10682*/ uint16(xArgImm8u),\n\t/*10683*/ uint16(xMatch),\n\t/*10684*/ uint16(xCondIs64), 10687, 10703,\n\t/*10687*/ uint16(xCondDataSize), 10691, 10697, 0,\n\t/*10691*/ uint16(xSetOp), uint16(SAR),\n\t/*10693*/ uint16(xReadIb),\n\t/*10694*/ uint16(xArgRM16),\n\t/*10695*/ uint16(xArgImm8u),\n\t/*10696*/ uint16(xMatch),\n\t/*10697*/ uint16(xSetOp), uint16(SAR),\n\t/*10699*/ uint16(xReadIb),\n\t/*10700*/ uint16(xArgRM32),\n\t/*10701*/ uint16(xArgImm8u),\n\t/*10702*/ uint16(xMatch),\n\t/*10703*/ uint16(xCondDataSize), 10691, 10697, 10707,\n\t/*10707*/ uint16(xSetOp), uint16(SAR),\n\t/*10709*/ uint16(xReadIb),\n\t/*10710*/ uint16(xArgRM64),\n\t/*10711*/ uint16(xArgImm8u),\n\t/*10712*/ uint16(xMatch),\n\t/*10713*/ uint16(xSetOp), uint16(RET),\n\t/*10715*/ uint16(xReadIw),\n\t/*10716*/ uint16(xArgImm16u),\n\t/*10717*/ uint16(xMatch),\n\t/*10718*/ uint16(xSetOp), uint16(RET),\n\t/*10720*/ uint16(xMatch),\n\t/*10721*/ uint16(xCondIs64), 10724, 0,\n\t/*10724*/ uint16(xCondDataSize), 10728, 10734, 0,\n\t/*10728*/ uint16(xSetOp), uint16(LES),\n\t/*10730*/ uint16(xReadSlashR),\n\t/*10731*/ uint16(xArgR16),\n\t/*10732*/ uint16(xArgM16colon16),\n\t/*10733*/ uint16(xMatch),\n\t/*10734*/ uint16(xSetOp), uint16(LES),\n\t/*10736*/ uint16(xReadSlashR),\n\t/*10737*/ uint16(xArgR32),\n\t/*10738*/ uint16(xArgM16colon32),\n\t/*10739*/ uint16(xMatch),\n\t/*10740*/ uint16(xCondIs64), 10743, 0,\n\t/*10743*/ uint16(xCondDataSize), 10747, 10753, 0,\n\t/*10747*/ uint16(xSetOp), uint16(LDS),\n\t/*10749*/ uint16(xReadSlashR),\n\t/*10750*/ uint16(xArgR16),\n\t/*10751*/ uint16(xArgM16colon16),\n\t/*10752*/ uint16(xMatch),\n\t/*10753*/ uint16(xSetOp), uint16(LDS),\n\t/*10755*/ uint16(xReadSlashR),\n\t/*10756*/ uint16(xArgR32),\n\t/*10757*/ uint16(xArgM16colon32),\n\t/*10758*/ uint16(xMatch),\n\t/*10759*/ uint16(xCondByte), 1,\n\t0xF8, 10778,\n\t/*10763*/ uint16(xCondSlashR),\n\t10772, // 0\n\t0,     // 1\n\t0,     // 2\n\t0,     // 3\n\t0,     // 4\n\t0,     // 5\n\t0,     // 6\n\t0,     // 7\n\t/*10772*/ uint16(xSetOp), uint16(MOV),\n\t/*10774*/ uint16(xReadIb),\n\t/*10775*/ uint16(xArgRM8),\n\t/*10776*/ uint16(xArgImm8u),\n\t/*10777*/ uint16(xMatch),\n\t/*10778*/ uint16(xSetOp), uint16(XABORT),\n\t/*10780*/ uint16(xReadIb),\n\t/*10781*/ uint16(xArgImm8u),\n\t/*10782*/ uint16(xMatch),\n\t/*10783*/ uint16(xCondByte), 1,\n\t0xF8, 10825,\n\t/*10787*/ uint16(xCondSlashR),\n\t10796, // 0\n\t0,     // 1\n\t0,     // 2\n\t0,     // 3\n\t0,     // 4\n\t0,     // 5\n\t0,     // 6\n\t0,     // 7\n\t/*10796*/ uint16(xCondIs64), 10799, 10815,\n\t/*10799*/ uint16(xCondDataSize), 10803, 10809, 0,\n\t/*10803*/ uint16(xSetOp), uint16(MOV),\n\t/*10805*/ uint16(xReadIw),\n\t/*10806*/ uint16(xArgRM16),\n\t/*10807*/ uint16(xArgImm16),\n\t/*10808*/ uint16(xMatch),\n\t/*10809*/ uint16(xSetOp), uint16(MOV),\n\t/*10811*/ uint16(xReadId),\n\t/*10812*/ uint16(xArgRM32),\n\t/*10813*/ uint16(xArgImm32),\n\t/*10814*/ uint16(xMatch),\n\t/*10815*/ uint16(xCondDataSize), 10803, 10809, 10819,\n\t/*10819*/ uint16(xSetOp), uint16(MOV),\n\t/*10821*/ uint16(xReadId),\n\t/*10822*/ uint16(xArgRM64),\n\t/*10823*/ uint16(xArgImm32),\n\t/*10824*/ uint16(xMatch),\n\t/*10825*/ uint16(xCondDataSize), 10829, 10834, 10839,\n\t/*10829*/ uint16(xSetOp), uint16(XBEGIN),\n\t/*10831*/ uint16(xReadCw),\n\t/*10832*/ uint16(xArgRel16),\n\t/*10833*/ uint16(xMatch),\n\t/*10834*/ uint16(xSetOp), uint16(XBEGIN),\n\t/*10836*/ uint16(xReadCd),\n\t/*10837*/ uint16(xArgRel32),\n\t/*10838*/ uint16(xMatch),\n\t/*10839*/ uint16(xSetOp), uint16(XBEGIN),\n\t/*10841*/ uint16(xReadCd),\n\t/*10842*/ uint16(xArgRel32),\n\t/*10843*/ uint16(xMatch),\n\t/*10844*/ uint16(xSetOp), uint16(ENTER),\n\t/*10846*/ uint16(xReadIw),\n\t/*10847*/ uint16(xReadIb),\n\t/*10848*/ uint16(xArgImm16u),\n\t/*10849*/ uint16(xArgImm8u),\n\t/*10850*/ uint16(xMatch),\n\t/*10851*/ uint16(xCondIs64), 10854, 10864,\n\t/*10854*/ uint16(xCondDataSize), 10858, 10861, 0,\n\t/*10858*/ uint16(xSetOp), uint16(LEAVE),\n\t/*10860*/ uint16(xMatch),\n\t/*10861*/ uint16(xSetOp), uint16(LEAVE),\n\t/*10863*/ uint16(xMatch),\n\t/*10864*/ uint16(xCondDataSize), 10858, 10868, 10871,\n\t/*10868*/ uint16(xSetOp), uint16(LEAVE),\n\t/*10870*/ uint16(xMatch),\n\t/*10871*/ uint16(xSetOp), uint16(LEAVE),\n\t/*10873*/ uint16(xMatch),\n\t/*10874*/ uint16(xSetOp), uint16(LRET),\n\t/*10876*/ uint16(xReadIw),\n\t/*10877*/ uint16(xArgImm16u),\n\t/*10878*/ uint16(xMatch),\n\t/*10879*/ uint16(xSetOp), uint16(LRET),\n\t/*10881*/ uint16(xMatch),\n\t/*10882*/ uint16(xSetOp), uint16(INT),\n\t/*10884*/ uint16(xArg3),\n\t/*10885*/ uint16(xMatch),\n\t/*10886*/ uint16(xSetOp), uint16(INT),\n\t/*10888*/ uint16(xReadIb),\n\t/*10889*/ uint16(xArgImm8u),\n\t/*10890*/ uint16(xMatch),\n\t/*10891*/ uint16(xCondIs64), 10894, 0,\n\t/*10894*/ uint16(xSetOp), uint16(INTO),\n\t/*10896*/ uint16(xMatch),\n\t/*10897*/ uint16(xCondIs64), 10900, 10910,\n\t/*10900*/ uint16(xCondDataSize), 10904, 10907, 0,\n\t/*10904*/ uint16(xSetOp), uint16(IRET),\n\t/*10906*/ uint16(xMatch),\n\t/*10907*/ uint16(xSetOp), uint16(IRETD),\n\t/*10909*/ uint16(xMatch),\n\t/*10910*/ uint16(xCondDataSize), 10904, 10907, 10914,\n\t/*10914*/ uint16(xSetOp), uint16(IRETQ),\n\t/*10916*/ uint16(xMatch),\n\t/*10917*/ uint16(xCondSlashR),\n\t10926, // 0\n\t10931, // 1\n\t10936, // 2\n\t10941, // 3\n\t10946, // 4\n\t10951, // 5\n\t0,     // 6\n\t10956, // 7\n\t/*10926*/ uint16(xSetOp), uint16(ROL),\n\t/*10928*/ uint16(xArgRM8),\n\t/*10929*/ uint16(xArg1),\n\t/*10930*/ uint16(xMatch),\n\t/*10931*/ uint16(xSetOp), uint16(ROR),\n\t/*10933*/ uint16(xArgRM8),\n\t/*10934*/ uint16(xArg1),\n\t/*10935*/ uint16(xMatch),\n\t/*10936*/ uint16(xSetOp), uint16(RCL),\n\t/*10938*/ uint16(xArgRM8),\n\t/*10939*/ uint16(xArg1),\n\t/*10940*/ uint16(xMatch),\n\t/*10941*/ uint16(xSetOp), uint16(RCR),\n\t/*10943*/ uint16(xArgRM8),\n\t/*10944*/ uint16(xArg1),\n\t/*10945*/ uint16(xMatch),\n\t/*10946*/ uint16(xSetOp), uint16(SHL),\n\t/*10948*/ uint16(xArgRM8),\n\t/*10949*/ uint16(xArg1),\n\t/*10950*/ uint16(xMatch),\n\t/*10951*/ uint16(xSetOp), uint16(SHR),\n\t/*10953*/ uint16(xArgRM8),\n\t/*10954*/ uint16(xArg1),\n\t/*10955*/ uint16(xMatch),\n\t/*10956*/ uint16(xSetOp), uint16(SAR),\n\t/*10958*/ uint16(xArgRM8),\n\t/*10959*/ uint16(xArg1),\n\t/*10960*/ uint16(xMatch),\n\t/*10961*/ uint16(xCondSlashR),\n\t10970, // 0\n\t10996, // 1\n\t11022, // 2\n\t11048, // 3\n\t11074, // 4\n\t11100, // 5\n\t0,     // 6\n\t11126, // 7\n\t/*10970*/ uint16(xCondIs64), 10973, 10987,\n\t/*10973*/ uint16(xCondDataSize), 10977, 10982, 0,\n\t/*10977*/ uint16(xSetOp), uint16(ROL),\n\t/*10979*/ uint16(xArgRM16),\n\t/*10980*/ uint16(xArg1),\n\t/*10981*/ uint16(xMatch),\n\t/*10982*/ uint16(xSetOp), uint16(ROL),\n\t/*10984*/ uint16(xArgRM32),\n\t/*10985*/ uint16(xArg1),\n\t/*10986*/ uint16(xMatch),\n\t/*10987*/ uint16(xCondDataSize), 10977, 10982, 10991,\n\t/*10991*/ uint16(xSetOp), uint16(ROL),\n\t/*10993*/ uint16(xArgRM64),\n\t/*10994*/ uint16(xArg1),\n\t/*10995*/ uint16(xMatch),\n\t/*10996*/ uint16(xCondIs64), 10999, 11013,\n\t/*10999*/ uint16(xCondDataSize), 11003, 11008, 0,\n\t/*11003*/ uint16(xSetOp), uint16(ROR),\n\t/*11005*/ uint16(xArgRM16),\n\t/*11006*/ uint16(xArg1),\n\t/*11007*/ uint16(xMatch),\n\t/*11008*/ uint16(xSetOp), uint16(ROR),\n\t/*11010*/ uint16(xArgRM32),\n\t/*11011*/ uint16(xArg1),\n\t/*11012*/ uint16(xMatch),\n\t/*11013*/ uint16(xCondDataSize), 11003, 11008, 11017,\n\t/*11017*/ uint16(xSetOp), uint16(ROR),\n\t/*11019*/ uint16(xArgRM64),\n\t/*11020*/ uint16(xArg1),\n\t/*11021*/ uint16(xMatch),\n\t/*11022*/ uint16(xCondIs64), 11025, 11039,\n\t/*11025*/ uint16(xCondDataSize), 11029, 11034, 0,\n\t/*11029*/ uint16(xSetOp), uint16(RCL),\n\t/*11031*/ uint16(xArgRM16),\n\t/*11032*/ uint16(xArg1),\n\t/*11033*/ uint16(xMatch),\n\t/*11034*/ uint16(xSetOp), uint16(RCL),\n\t/*11036*/ uint16(xArgRM32),\n\t/*11037*/ uint16(xArg1),\n\t/*11038*/ uint16(xMatch),\n\t/*11039*/ uint16(xCondDataSize), 11029, 11034, 11043,\n\t/*11043*/ uint16(xSetOp), uint16(RCL),\n\t/*11045*/ uint16(xArgRM64),\n\t/*11046*/ uint16(xArg1),\n\t/*11047*/ uint16(xMatch),\n\t/*11048*/ uint16(xCondIs64), 11051, 11065,\n\t/*11051*/ uint16(xCondDataSize), 11055, 11060, 0,\n\t/*11055*/ uint16(xSetOp), uint16(RCR),\n\t/*11057*/ uint16(xArgRM16),\n\t/*11058*/ uint16(xArg1),\n\t/*11059*/ uint16(xMatch),\n\t/*11060*/ uint16(xSetOp), uint16(RCR),\n\t/*11062*/ uint16(xArgRM32),\n\t/*11063*/ uint16(xArg1),\n\t/*11064*/ uint16(xMatch),\n\t/*11065*/ uint16(xCondDataSize), 11055, 11060, 11069,\n\t/*11069*/ uint16(xSetOp), uint16(RCR),\n\t/*11071*/ uint16(xArgRM64),\n\t/*11072*/ uint16(xArg1),\n\t/*11073*/ uint16(xMatch),\n\t/*11074*/ uint16(xCondIs64), 11077, 11091,\n\t/*11077*/ uint16(xCondDataSize), 11081, 11086, 0,\n\t/*11081*/ uint16(xSetOp), uint16(SHL),\n\t/*11083*/ uint16(xArgRM16),\n\t/*11084*/ uint16(xArg1),\n\t/*11085*/ uint16(xMatch),\n\t/*11086*/ uint16(xSetOp), uint16(SHL),\n\t/*11088*/ uint16(xArgRM32),\n\t/*11089*/ uint16(xArg1),\n\t/*11090*/ uint16(xMatch),\n\t/*11091*/ uint16(xCondDataSize), 11081, 11086, 11095,\n\t/*11095*/ uint16(xSetOp), uint16(SHL),\n\t/*11097*/ uint16(xArgRM64),\n\t/*11098*/ uint16(xArg1),\n\t/*11099*/ uint16(xMatch),\n\t/*11100*/ uint16(xCondIs64), 11103, 11117,\n\t/*11103*/ uint16(xCondDataSize), 11107, 11112, 0,\n\t/*11107*/ uint16(xSetOp), uint16(SHR),\n\t/*11109*/ uint16(xArgRM16),\n\t/*11110*/ uint16(xArg1),\n\t/*11111*/ uint16(xMatch),\n\t/*11112*/ uint16(xSetOp), uint16(SHR),\n\t/*11114*/ uint16(xArgRM32),\n\t/*11115*/ uint16(xArg1),\n\t/*11116*/ uint16(xMatch),\n\t/*11117*/ uint16(xCondDataSize), 11107, 11112, 11121,\n\t/*11121*/ uint16(xSetOp), uint16(SHR),\n\t/*11123*/ uint16(xArgRM64),\n\t/*11124*/ uint16(xArg1),\n\t/*11125*/ uint16(xMatch),\n\t/*11126*/ uint16(xCondIs64), 11129, 11143,\n\t/*11129*/ uint16(xCondDataSize), 11133, 11138, 0,\n\t/*11133*/ uint16(xSetOp), uint16(SAR),\n\t/*11135*/ uint16(xArgRM16),\n\t/*11136*/ uint16(xArg1),\n\t/*11137*/ uint16(xMatch),\n\t/*11138*/ uint16(xSetOp), uint16(SAR),\n\t/*11140*/ uint16(xArgRM32),\n\t/*11141*/ uint16(xArg1),\n\t/*11142*/ uint16(xMatch),\n\t/*11143*/ uint16(xCondDataSize), 11133, 11138, 11147,\n\t/*11147*/ uint16(xSetOp), uint16(SAR),\n\t/*11149*/ uint16(xArgRM64),\n\t/*11150*/ uint16(xArg1),\n\t/*11151*/ uint16(xMatch),\n\t/*11152*/ uint16(xCondSlashR),\n\t11161, // 0\n\t11166, // 1\n\t11171, // 2\n\t11176, // 3\n\t11181, // 4\n\t11186, // 5\n\t0,     // 6\n\t11191, // 7\n\t/*11161*/ uint16(xSetOp), uint16(ROL),\n\t/*11163*/ uint16(xArgRM8),\n\t/*11164*/ uint16(xArgCL),\n\t/*11165*/ uint16(xMatch),\n\t/*11166*/ uint16(xSetOp), uint16(ROR),\n\t/*11168*/ uint16(xArgRM8),\n\t/*11169*/ uint16(xArgCL),\n\t/*11170*/ uint16(xMatch),\n\t/*11171*/ uint16(xSetOp), uint16(RCL),\n\t/*11173*/ uint16(xArgRM8),\n\t/*11174*/ uint16(xArgCL),\n\t/*11175*/ uint16(xMatch),\n\t/*11176*/ uint16(xSetOp), uint16(RCR),\n\t/*11178*/ uint16(xArgRM8),\n\t/*11179*/ uint16(xArgCL),\n\t/*11180*/ uint16(xMatch),\n\t/*11181*/ uint16(xSetOp), uint16(SHL),\n\t/*11183*/ uint16(xArgRM8),\n\t/*11184*/ uint16(xArgCL),\n\t/*11185*/ uint16(xMatch),\n\t/*11186*/ uint16(xSetOp), uint16(SHR),\n\t/*11188*/ uint16(xArgRM8),\n\t/*11189*/ uint16(xArgCL),\n\t/*11190*/ uint16(xMatch),\n\t/*11191*/ uint16(xSetOp), uint16(SAR),\n\t/*11193*/ uint16(xArgRM8),\n\t/*11194*/ uint16(xArgCL),\n\t/*11195*/ uint16(xMatch),\n\t/*11196*/ uint16(xCondSlashR),\n\t11205, // 0\n\t11231, // 1\n\t11257, // 2\n\t11283, // 3\n\t11309, // 4\n\t11335, // 5\n\t0,     // 6\n\t11361, // 7\n\t/*11205*/ uint16(xCondIs64), 11208, 11222,\n\t/*11208*/ uint16(xCondDataSize), 11212, 11217, 0,\n\t/*11212*/ uint16(xSetOp), uint16(ROL),\n\t/*11214*/ uint16(xArgRM16),\n\t/*11215*/ uint16(xArgCL),\n\t/*11216*/ uint16(xMatch),\n\t/*11217*/ uint16(xSetOp), uint16(ROL),\n\t/*11219*/ uint16(xArgRM32),\n\t/*11220*/ uint16(xArgCL),\n\t/*11221*/ uint16(xMatch),\n\t/*11222*/ uint16(xCondDataSize), 11212, 11217, 11226,\n\t/*11226*/ uint16(xSetOp), uint16(ROL),\n\t/*11228*/ uint16(xArgRM64),\n\t/*11229*/ uint16(xArgCL),\n\t/*11230*/ uint16(xMatch),\n\t/*11231*/ uint16(xCondIs64), 11234, 11248,\n\t/*11234*/ uint16(xCondDataSize), 11238, 11243, 0,\n\t/*11238*/ uint16(xSetOp), uint16(ROR),\n\t/*11240*/ uint16(xArgRM16),\n\t/*11241*/ uint16(xArgCL),\n\t/*11242*/ uint16(xMatch),\n\t/*11243*/ uint16(xSetOp), uint16(ROR),\n\t/*11245*/ uint16(xArgRM32),\n\t/*11246*/ uint16(xArgCL),\n\t/*11247*/ uint16(xMatch),\n\t/*11248*/ uint16(xCondDataSize), 11238, 11243, 11252,\n\t/*11252*/ uint16(xSetOp), uint16(ROR),\n\t/*11254*/ uint16(xArgRM64),\n\t/*11255*/ uint16(xArgCL),\n\t/*11256*/ uint16(xMatch),\n\t/*11257*/ uint16(xCondIs64), 11260, 11274,\n\t/*11260*/ uint16(xCondDataSize), 11264, 11269, 0,\n\t/*11264*/ uint16(xSetOp), uint16(RCL),\n\t/*11266*/ uint16(xArgRM16),\n\t/*11267*/ uint16(xArgCL),\n\t/*11268*/ uint16(xMatch),\n\t/*11269*/ uint16(xSetOp), uint16(RCL),\n\t/*11271*/ uint16(xArgRM32),\n\t/*11272*/ uint16(xArgCL),\n\t/*11273*/ uint16(xMatch),\n\t/*11274*/ uint16(xCondDataSize), 11264, 11269, 11278,\n\t/*11278*/ uint16(xSetOp), uint16(RCL),\n\t/*11280*/ uint16(xArgRM64),\n\t/*11281*/ uint16(xArgCL),\n\t/*11282*/ uint16(xMatch),\n\t/*11283*/ uint16(xCondIs64), 11286, 11300,\n\t/*11286*/ uint16(xCondDataSize), 11290, 11295, 0,\n\t/*11290*/ uint16(xSetOp), uint16(RCR),\n\t/*11292*/ uint16(xArgRM16),\n\t/*11293*/ uint16(xArgCL),\n\t/*11294*/ uint16(xMatch),\n\t/*11295*/ uint16(xSetOp), uint16(RCR),\n\t/*11297*/ uint16(xArgRM32),\n\t/*11298*/ uint16(xArgCL),\n\t/*11299*/ uint16(xMatch),\n\t/*11300*/ uint16(xCondDataSize), 11290, 11295, 11304,\n\t/*11304*/ uint16(xSetOp), uint16(RCR),\n\t/*11306*/ uint16(xArgRM64),\n\t/*11307*/ uint16(xArgCL),\n\t/*11308*/ uint16(xMatch),\n\t/*11309*/ uint16(xCondIs64), 11312, 11326,\n\t/*11312*/ uint16(xCondDataSize), 11316, 11321, 0,\n\t/*11316*/ uint16(xSetOp), uint16(SHL),\n\t/*11318*/ uint16(xArgRM16),\n\t/*11319*/ uint16(xArgCL),\n\t/*11320*/ uint16(xMatch),\n\t/*11321*/ uint16(xSetOp), uint16(SHL),\n\t/*11323*/ uint16(xArgRM32),\n\t/*11324*/ uint16(xArgCL),\n\t/*11325*/ uint16(xMatch),\n\t/*11326*/ uint16(xCondDataSize), 11316, 11321, 11330,\n\t/*11330*/ uint16(xSetOp), uint16(SHL),\n\t/*11332*/ uint16(xArgRM64),\n\t/*11333*/ uint16(xArgCL),\n\t/*11334*/ uint16(xMatch),\n\t/*11335*/ uint16(xCondIs64), 11338, 11352,\n\t/*11338*/ uint16(xCondDataSize), 11342, 11347, 0,\n\t/*11342*/ uint16(xSetOp), uint16(SHR),\n\t/*11344*/ uint16(xArgRM16),\n\t/*11345*/ uint16(xArgCL),\n\t/*11346*/ uint16(xMatch),\n\t/*11347*/ uint16(xSetOp), uint16(SHR),\n\t/*11349*/ uint16(xArgRM32),\n\t/*11350*/ uint16(xArgCL),\n\t/*11351*/ uint16(xMatch),\n\t/*11352*/ uint16(xCondDataSize), 11342, 11347, 11356,\n\t/*11356*/ uint16(xSetOp), uint16(SHR),\n\t/*11358*/ uint16(xArgRM64),\n\t/*11359*/ uint16(xArgCL),\n\t/*11360*/ uint16(xMatch),\n\t/*11361*/ uint16(xCondIs64), 11364, 11378,\n\t/*11364*/ uint16(xCondDataSize), 11368, 11373, 0,\n\t/*11368*/ uint16(xSetOp), uint16(SAR),\n\t/*11370*/ uint16(xArgRM16),\n\t/*11371*/ uint16(xArgCL),\n\t/*11372*/ uint16(xMatch),\n\t/*11373*/ uint16(xSetOp), uint16(SAR),\n\t/*11375*/ uint16(xArgRM32),\n\t/*11376*/ uint16(xArgCL),\n\t/*11377*/ uint16(xMatch),\n\t/*11378*/ uint16(xCondDataSize), 11368, 11373, 11382,\n\t/*11382*/ uint16(xSetOp), uint16(SAR),\n\t/*11384*/ uint16(xArgRM64),\n\t/*11385*/ uint16(xArgCL),\n\t/*11386*/ uint16(xMatch),\n\t/*11387*/ uint16(xCondIs64), 11390, 0,\n\t/*11390*/ uint16(xSetOp), uint16(AAM),\n\t/*11392*/ uint16(xReadIb),\n\t/*11393*/ uint16(xArgImm8u),\n\t/*11394*/ uint16(xMatch),\n\t/*11395*/ uint16(xCondIs64), 11398, 0,\n\t/*11398*/ uint16(xSetOp), uint16(AAD),\n\t/*11400*/ uint16(xReadIb),\n\t/*11401*/ uint16(xArgImm8u),\n\t/*11402*/ uint16(xMatch),\n\t/*11403*/ uint16(xCondIs64), 11406, 11409,\n\t/*11406*/ uint16(xSetOp), uint16(XLATB),\n\t/*11408*/ uint16(xMatch),\n\t/*11409*/ uint16(xCondDataSize), 11406, 11406, 11413,\n\t/*11413*/ uint16(xSetOp), uint16(XLATB),\n\t/*11415*/ uint16(xMatch),\n\t/*11416*/ uint16(xCondByte), 64,\n\t0xc0, 11587,\n\t0xc1, 11587,\n\t0xc2, 11587,\n\t0xc3, 11587,\n\t0xc4, 11587,\n\t0xc5, 11587,\n\t0xc6, 11587,\n\t0xc7, 11587,\n\t0xc8, 11592,\n\t0xc9, 11592,\n\t0xca, 11592,\n\t0xcb, 11592,\n\t0xcc, 11592,\n\t0xcd, 11592,\n\t0xce, 11592,\n\t0xcf, 11592,\n\t0xd0, 11597,\n\t0xd1, 11597,\n\t0xd2, 11597,\n\t0xd3, 11597,\n\t0xd4, 11597,\n\t0xd5, 11597,\n\t0xd6, 11597,\n\t0xd7, 11597,\n\t0xd8, 11601,\n\t0xd9, 11601,\n\t0xda, 11601,\n\t0xdb, 11601,\n\t0xdc, 11601,\n\t0xdd, 11601,\n\t0xde, 11601,\n\t0xdf, 11601,\n\t0xe0, 11605,\n\t0xe1, 11605,\n\t0xe2, 11605,\n\t0xe3, 11605,\n\t0xe4, 11605,\n\t0xe5, 11605,\n\t0xe6, 11605,\n\t0xe7, 11605,\n\t0xe8, 11610,\n\t0xe9, 11610,\n\t0xea, 11610,\n\t0xeb, 11610,\n\t0xec, 11610,\n\t0xed, 11610,\n\t0xee, 11610,\n\t0xef, 11610,\n\t0xf0, 11615,\n\t0xf1, 11615,\n\t0xf2, 11615,\n\t0xf3, 11615,\n\t0xf4, 11615,\n\t0xf5, 11615,\n\t0xf6, 11615,\n\t0xf7, 11615,\n\t0xf8, 11620,\n\t0xf9, 11620,\n\t0xfa, 11620,\n\t0xfb, 11620,\n\t0xfc, 11620,\n\t0xfd, 11620,\n\t0xfe, 11620,\n\t0xff, 11620,\n\t/*11546*/ uint16(xCondSlashR),\n\t11555, // 0\n\t11559, // 1\n\t11563, // 2\n\t11567, // 3\n\t11571, // 4\n\t11575, // 5\n\t11579, // 6\n\t11583, // 7\n\t/*11555*/ uint16(xSetOp), uint16(FADD),\n\t/*11557*/ uint16(xArgM32fp),\n\t/*11558*/ uint16(xMatch),\n\t/*11559*/ uint16(xSetOp), uint16(FMUL),\n\t/*11561*/ uint16(xArgM32fp),\n\t/*11562*/ uint16(xMatch),\n\t/*11563*/ uint16(xSetOp), uint16(FCOM),\n\t/*11565*/ uint16(xArgM32fp),\n\t/*11566*/ uint16(xMatch),\n\t/*11567*/ uint16(xSetOp), uint16(FCOMP),\n\t/*11569*/ uint16(xArgM32fp),\n\t/*11570*/ uint16(xMatch),\n\t/*11571*/ uint16(xSetOp), uint16(FSUB),\n\t/*11573*/ uint16(xArgM32fp),\n\t/*11574*/ uint16(xMatch),\n\t/*11575*/ uint16(xSetOp), uint16(FSUBR),\n\t/*11577*/ uint16(xArgM32fp),\n\t/*11578*/ uint16(xMatch),\n\t/*11579*/ uint16(xSetOp), uint16(FDIV),\n\t/*11581*/ uint16(xArgM32fp),\n\t/*11582*/ uint16(xMatch),\n\t/*11583*/ uint16(xSetOp), uint16(FDIVR),\n\t/*11585*/ uint16(xArgM32fp),\n\t/*11586*/ uint16(xMatch),\n\t/*11587*/ uint16(xSetOp), uint16(FADD),\n\t/*11589*/ uint16(xArgST),\n\t/*11590*/ uint16(xArgSTi),\n\t/*11591*/ uint16(xMatch),\n\t/*11592*/ uint16(xSetOp), uint16(FMUL),\n\t/*11594*/ uint16(xArgST),\n\t/*11595*/ uint16(xArgSTi),\n\t/*11596*/ uint16(xMatch),\n\t/*11597*/ uint16(xSetOp), uint16(FCOM),\n\t/*11599*/ uint16(xArgSTi),\n\t/*11600*/ uint16(xMatch),\n\t/*11601*/ uint16(xSetOp), uint16(FCOMP),\n\t/*11603*/ uint16(xArgSTi),\n\t/*11604*/ uint16(xMatch),\n\t/*11605*/ uint16(xSetOp), uint16(FSUB),\n\t/*11607*/ uint16(xArgST),\n\t/*11608*/ uint16(xArgSTi),\n\t/*11609*/ uint16(xMatch),\n\t/*11610*/ uint16(xSetOp), uint16(FSUBR),\n\t/*11612*/ uint16(xArgST),\n\t/*11613*/ uint16(xArgSTi),\n\t/*11614*/ uint16(xMatch),\n\t/*11615*/ uint16(xSetOp), uint16(FDIV),\n\t/*11617*/ uint16(xArgST),\n\t/*11618*/ uint16(xArgSTi),\n\t/*11619*/ uint16(xMatch),\n\t/*11620*/ uint16(xSetOp), uint16(FDIVR),\n\t/*11622*/ uint16(xArgST),\n\t/*11623*/ uint16(xArgSTi),\n\t/*11624*/ uint16(xMatch),\n\t/*11625*/ uint16(xCondByte), 44,\n\t0xc0, 11752,\n\t0xc1, 11752,\n\t0xc2, 11752,\n\t0xc3, 11752,\n\t0xc4, 11752,\n\t0xc5, 11752,\n\t0xc6, 11752,\n\t0xc7, 11752,\n\t0xc8, 11756,\n\t0xc9, 11756,\n\t0xca, 11756,\n\t0xcb, 11756,\n\t0xcc, 11756,\n\t0xcd, 11756,\n\t0xce, 11756,\n\t0xcf, 11756,\n\t0xD0, 11760,\n\t0xE0, 11763,\n\t0xE1, 11766,\n\t0xE4, 11769,\n\t0xE5, 11772,\n\t0xE8, 11775,\n\t0xE9, 11778,\n\t0xEA, 11781,\n\t0xEB, 11784,\n\t0xEC, 11787,\n\t0xED, 11790,\n\t0xEE, 11793,\n\t0xF0, 11796,\n\t0xF1, 11799,\n\t0xF2, 11802,\n\t0xF3, 11805,\n\t0xF4, 11808,\n\t0xF5, 11811,\n\t0xF6, 11814,\n\t0xF7, 11817,\n\t0xF8, 11820,\n\t0xF9, 11823,\n\t0xFA, 11826,\n\t0xFB, 11829,\n\t0xFC, 11832,\n\t0xFD, 11835,\n\t0xFE, 11838,\n\t0xFF, 11841,\n\t/*11715*/ uint16(xCondSlashR),\n\t11724, // 0\n\t0,     // 1\n\t11728, // 2\n\t11732, // 3\n\t11736, // 4\n\t11740, // 5\n\t11744, // 6\n\t11748, // 7\n\t/*11724*/ uint16(xSetOp), uint16(FLD),\n\t/*11726*/ uint16(xArgM32fp),\n\t/*11727*/ uint16(xMatch),\n\t/*11728*/ uint16(xSetOp), uint16(FST),\n\t/*11730*/ uint16(xArgM32fp),\n\t/*11731*/ uint16(xMatch),\n\t/*11732*/ uint16(xSetOp), uint16(FSTP),\n\t/*11734*/ uint16(xArgM32fp),\n\t/*11735*/ uint16(xMatch),\n\t/*11736*/ uint16(xSetOp), uint16(FLDENV),\n\t/*11738*/ uint16(xArgM1428byte),\n\t/*11739*/ uint16(xMatch),\n\t/*11740*/ uint16(xSetOp), uint16(FLDCW),\n\t/*11742*/ uint16(xArgM2byte),\n\t/*11743*/ uint16(xMatch),\n\t/*11744*/ uint16(xSetOp), uint16(FNSTENV),\n\t/*11746*/ uint16(xArgM1428byte),\n\t/*11747*/ uint16(xMatch),\n\t/*11748*/ uint16(xSetOp), uint16(FNSTCW),\n\t/*11750*/ uint16(xArgM2byte),\n\t/*11751*/ uint16(xMatch),\n\t/*11752*/ uint16(xSetOp), uint16(FLD),\n\t/*11754*/ uint16(xArgSTi),\n\t/*11755*/ uint16(xMatch),\n\t/*11756*/ uint16(xSetOp), uint16(FXCH),\n\t/*11758*/ uint16(xArgSTi),\n\t/*11759*/ uint16(xMatch),\n\t/*11760*/ uint16(xSetOp), uint16(FNOP),\n\t/*11762*/ uint16(xMatch),\n\t/*11763*/ uint16(xSetOp), uint16(FCHS),\n\t/*11765*/ uint16(xMatch),\n\t/*11766*/ uint16(xSetOp), uint16(FABS),\n\t/*11768*/ uint16(xMatch),\n\t/*11769*/ uint16(xSetOp), uint16(FTST),\n\t/*11771*/ uint16(xMatch),\n\t/*11772*/ uint16(xSetOp), uint16(FXAM),\n\t/*11774*/ uint16(xMatch),\n\t/*11775*/ uint16(xSetOp), uint16(FLD1),\n\t/*11777*/ uint16(xMatch),\n\t/*11778*/ uint16(xSetOp), uint16(FLDL2T),\n\t/*11780*/ uint16(xMatch),\n\t/*11781*/ uint16(xSetOp), uint16(FLDL2E),\n\t/*11783*/ uint16(xMatch),\n\t/*11784*/ uint16(xSetOp), uint16(FLDPI),\n\t/*11786*/ uint16(xMatch),\n\t/*11787*/ uint16(xSetOp), uint16(FLDLG2),\n\t/*11789*/ uint16(xMatch),\n\t/*11790*/ uint16(xSetOp), uint16(FLDLN2),\n\t/*11792*/ uint16(xMatch),\n\t/*11793*/ uint16(xSetOp), uint16(FLDZ),\n\t/*11795*/ uint16(xMatch),\n\t/*11796*/ uint16(xSetOp), uint16(F2XM1),\n\t/*11798*/ uint16(xMatch),\n\t/*11799*/ uint16(xSetOp), uint16(FYL2X),\n\t/*11801*/ uint16(xMatch),\n\t/*11802*/ uint16(xSetOp), uint16(FPTAN),\n\t/*11804*/ uint16(xMatch),\n\t/*11805*/ uint16(xSetOp), uint16(FPATAN),\n\t/*11807*/ uint16(xMatch),\n\t/*11808*/ uint16(xSetOp), uint16(FXTRACT),\n\t/*11810*/ uint16(xMatch),\n\t/*11811*/ uint16(xSetOp), uint16(FPREM1),\n\t/*11813*/ uint16(xMatch),\n\t/*11814*/ uint16(xSetOp), uint16(FDECSTP),\n\t/*11816*/ uint16(xMatch),\n\t/*11817*/ uint16(xSetOp), uint16(FINCSTP),\n\t/*11819*/ uint16(xMatch),\n\t/*11820*/ uint16(xSetOp), uint16(FPREM),\n\t/*11822*/ uint16(xMatch),\n\t/*11823*/ uint16(xSetOp), uint16(FYL2XP1),\n\t/*11825*/ uint16(xMatch),\n\t/*11826*/ uint16(xSetOp), uint16(FSQRT),\n\t/*11828*/ uint16(xMatch),\n\t/*11829*/ uint16(xSetOp), uint16(FSINCOS),\n\t/*11831*/ uint16(xMatch),\n\t/*11832*/ uint16(xSetOp), uint16(FRNDINT),\n\t/*11834*/ uint16(xMatch),\n\t/*11835*/ uint16(xSetOp), uint16(FSCALE),\n\t/*11837*/ uint16(xMatch),\n\t/*11838*/ uint16(xSetOp), uint16(FSIN),\n\t/*11840*/ uint16(xMatch),\n\t/*11841*/ uint16(xSetOp), uint16(FCOS),\n\t/*11843*/ uint16(xMatch),\n\t/*11844*/ uint16(xCondByte), 33,\n\t0xc0, 11953,\n\t0xc1, 11953,\n\t0xc2, 11953,\n\t0xc3, 11953,\n\t0xc4, 11953,\n\t0xc5, 11953,\n\t0xc6, 11953,\n\t0xc7, 11953,\n\t0xc8, 11958,\n\t0xc9, 11958,\n\t0xca, 11958,\n\t0xcb, 11958,\n\t0xcc, 11958,\n\t0xcd, 11958,\n\t0xce, 11958,\n\t0xcf, 11958,\n\t0xd0, 11963,\n\t0xd1, 11963,\n\t0xd2, 11963,\n\t0xd3, 11963,\n\t0xd4, 11963,\n\t0xd5, 11963,\n\t0xd6, 11963,\n\t0xd7, 11963,\n\t0xd8, 11968,\n\t0xd9, 11968,\n\t0xda, 11968,\n\t0xdb, 11968,\n\t0xdc, 11968,\n\t0xdd, 11968,\n\t0xde, 11968,\n\t0xdf, 11968,\n\t0xE9, 11973,\n\t/*11912*/ uint16(xCondSlashR),\n\t11921, // 0\n\t11925, // 1\n\t11929, // 2\n\t11933, // 3\n\t11937, // 4\n\t11941, // 5\n\t11945, // 6\n\t11949, // 7\n\t/*11921*/ uint16(xSetOp), uint16(FIADD),\n\t/*11923*/ uint16(xArgM32int),\n\t/*11924*/ uint16(xMatch),\n\t/*11925*/ uint16(xSetOp), uint16(FIMUL),\n\t/*11927*/ uint16(xArgM32int),\n\t/*11928*/ uint16(xMatch),\n\t/*11929*/ uint16(xSetOp), uint16(FICOM),\n\t/*11931*/ uint16(xArgM32int),\n\t/*11932*/ uint16(xMatch),\n\t/*11933*/ uint16(xSetOp), uint16(FICOMP),\n\t/*11935*/ uint16(xArgM32int),\n\t/*11936*/ uint16(xMatch),\n\t/*11937*/ uint16(xSetOp), uint16(FISUB),\n\t/*11939*/ uint16(xArgM32int),\n\t/*11940*/ uint16(xMatch),\n\t/*11941*/ uint16(xSetOp), uint16(FISUBR),\n\t/*11943*/ uint16(xArgM32int),\n\t/*11944*/ uint16(xMatch),\n\t/*11945*/ uint16(xSetOp), uint16(FIDIV),\n\t/*11947*/ uint16(xArgM32int),\n\t/*11948*/ uint16(xMatch),\n\t/*11949*/ uint16(xSetOp), uint16(FIDIVR),\n\t/*11951*/ uint16(xArgM32int),\n\t/*11952*/ uint16(xMatch),\n\t/*11953*/ uint16(xSetOp), uint16(FCMOVB),\n\t/*11955*/ uint16(xArgST),\n\t/*11956*/ uint16(xArgSTi),\n\t/*11957*/ uint16(xMatch),\n\t/*11958*/ uint16(xSetOp), uint16(FCMOVE),\n\t/*11960*/ uint16(xArgST),\n\t/*11961*/ uint16(xArgSTi),\n\t/*11962*/ uint16(xMatch),\n\t/*11963*/ uint16(xSetOp), uint16(FCMOVBE),\n\t/*11965*/ uint16(xArgST),\n\t/*11966*/ uint16(xArgSTi),\n\t/*11967*/ uint16(xMatch),\n\t/*11968*/ uint16(xSetOp), uint16(FCMOVU),\n\t/*11970*/ uint16(xArgST),\n\t/*11971*/ uint16(xArgSTi),\n\t/*11972*/ uint16(xMatch),\n\t/*11973*/ uint16(xSetOp), uint16(FUCOMPP),\n\t/*11975*/ uint16(xMatch),\n\t/*11976*/ uint16(xCondByte), 50,\n\t0xc0, 12111,\n\t0xc1, 12111,\n\t0xc2, 12111,\n\t0xc3, 12111,\n\t0xc4, 12111,\n\t0xc5, 12111,\n\t0xc6, 12111,\n\t0xc7, 12111,\n\t0xc8, 12116,\n\t0xc9, 12116,\n\t0xca, 12116,\n\t0xcb, 12116,\n\t0xcc, 12116,\n\t0xcd, 12116,\n\t0xce, 12116,\n\t0xcf, 12116,\n\t0xd0, 12121,\n\t0xd1, 12121,\n\t0xd2, 12121,\n\t0xd3, 12121,\n\t0xd4, 12121,\n\t0xd5, 12121,\n\t0xd6, 12121,\n\t0xd7, 12121,\n\t0xd8, 12126,\n\t0xd9, 12126,\n\t0xda, 12126,\n\t0xdb, 12126,\n\t0xdc, 12126,\n\t0xdd, 12126,\n\t0xde, 12126,\n\t0xdf, 12126,\n\t0xE2, 12131,\n\t0xE3, 12134,\n\t0xe8, 12137,\n\t0xe9, 12137,\n\t0xea, 12137,\n\t0xeb, 12137,\n\t0xec, 12137,\n\t0xed, 12137,\n\t0xee, 12137,\n\t0xef, 12137,\n\t0xf0, 12142,\n\t0xf1, 12142,\n\t0xf2, 12142,\n\t0xf3, 12142,\n\t0xf4, 12142,\n\t0xf5, 12142,\n\t0xf6, 12142,\n\t0xf7, 12142,\n\t/*12078*/ uint16(xCondSlashR),\n\t12087, // 0\n\t12091, // 1\n\t12095, // 2\n\t12099, // 3\n\t0,     // 4\n\t12103, // 5\n\t0,     // 6\n\t12107, // 7\n\t/*12087*/ uint16(xSetOp), uint16(FILD),\n\t/*12089*/ uint16(xArgM32int),\n\t/*12090*/ uint16(xMatch),\n\t/*12091*/ uint16(xSetOp), uint16(FISTTP),\n\t/*12093*/ uint16(xArgM32int),\n\t/*12094*/ uint16(xMatch),\n\t/*12095*/ uint16(xSetOp), uint16(FIST),\n\t/*12097*/ uint16(xArgM32int),\n\t/*12098*/ uint16(xMatch),\n\t/*12099*/ uint16(xSetOp), uint16(FISTP),\n\t/*12101*/ uint16(xArgM32int),\n\t/*12102*/ uint16(xMatch),\n\t/*12103*/ uint16(xSetOp), uint16(FLD),\n\t/*12105*/ uint16(xArgM80fp),\n\t/*12106*/ uint16(xMatch),\n\t/*12107*/ uint16(xSetOp), uint16(FSTP),\n\t/*12109*/ uint16(xArgM80fp),\n\t/*12110*/ uint16(xMatch),\n\t/*12111*/ uint16(xSetOp), uint16(FCMOVNB),\n\t/*12113*/ uint16(xArgST),\n\t/*12114*/ uint16(xArgSTi),\n\t/*12115*/ uint16(xMatch),\n\t/*12116*/ uint16(xSetOp), uint16(FCMOVNE),\n\t/*12118*/ uint16(xArgST),\n\t/*12119*/ uint16(xArgSTi),\n\t/*12120*/ uint16(xMatch),\n\t/*12121*/ uint16(xSetOp), uint16(FCMOVNBE),\n\t/*12123*/ uint16(xArgST),\n\t/*12124*/ uint16(xArgSTi),\n\t/*12125*/ uint16(xMatch),\n\t/*12126*/ uint16(xSetOp), uint16(FCMOVNU),\n\t/*12128*/ uint16(xArgST),\n\t/*12129*/ uint16(xArgSTi),\n\t/*12130*/ uint16(xMatch),\n\t/*12131*/ uint16(xSetOp), uint16(FNCLEX),\n\t/*12133*/ uint16(xMatch),\n\t/*12134*/ uint16(xSetOp), uint16(FNINIT),\n\t/*12136*/ uint16(xMatch),\n\t/*12137*/ uint16(xSetOp), uint16(FUCOMI),\n\t/*12139*/ uint16(xArgST),\n\t/*12140*/ uint16(xArgSTi),\n\t/*12141*/ uint16(xMatch),\n\t/*12142*/ uint16(xSetOp), uint16(FCOMI),\n\t/*12144*/ uint16(xArgST),\n\t/*12145*/ uint16(xArgSTi),\n\t/*12146*/ uint16(xMatch),\n\t/*12147*/ uint16(xCondByte), 48,\n\t0xc0, 12286,\n\t0xc1, 12286,\n\t0xc2, 12286,\n\t0xc3, 12286,\n\t0xc4, 12286,\n\t0xc5, 12286,\n\t0xc6, 12286,\n\t0xc7, 12286,\n\t0xc8, 12291,\n\t0xc9, 12291,\n\t0xca, 12291,\n\t0xcb, 12291,\n\t0xcc, 12291,\n\t0xcd, 12291,\n\t0xce, 12291,\n\t0xcf, 12291,\n\t0xe0, 12296,\n\t0xe1, 12296,\n\t0xe2, 12296,\n\t0xe3, 12296,\n\t0xe4, 12296,\n\t0xe5, 12296,\n\t0xe6, 12296,\n\t0xe7, 12296,\n\t0xe8, 12301,\n\t0xe9, 12301,\n\t0xea, 12301,\n\t0xeb, 12301,\n\t0xec, 12301,\n\t0xed, 12301,\n\t0xee, 12301,\n\t0xef, 12301,\n\t0xf0, 12306,\n\t0xf1, 12306,\n\t0xf2, 12306,\n\t0xf3, 12306,\n\t0xf4, 12306,\n\t0xf5, 12306,\n\t0xf6, 12306,\n\t0xf7, 12306,\n\t0xf8, 12311,\n\t0xf9, 12311,\n\t0xfa, 12311,\n\t0xfb, 12311,\n\t0xfc, 12311,\n\t0xfd, 12311,\n\t0xfe, 12311,\n\t0xff, 12311,\n\t/*12245*/ uint16(xCondSlashR),\n\t12254, // 0\n\t12258, // 1\n\t12262, // 2\n\t12266, // 3\n\t12270, // 4\n\t12274, // 5\n\t12278, // 6\n\t12282, // 7\n\t/*12254*/ uint16(xSetOp), uint16(FADD),\n\t/*12256*/ uint16(xArgM64fp),\n\t/*12257*/ uint16(xMatch),\n\t/*12258*/ uint16(xSetOp), uint16(FMUL),\n\t/*12260*/ uint16(xArgM64fp),\n\t/*12261*/ uint16(xMatch),\n\t/*12262*/ uint16(xSetOp), uint16(FCOM),\n\t/*12264*/ uint16(xArgM64fp),\n\t/*12265*/ uint16(xMatch),\n\t/*12266*/ uint16(xSetOp), uint16(FCOMP),\n\t/*12268*/ uint16(xArgM64fp),\n\t/*12269*/ uint16(xMatch),\n\t/*12270*/ uint16(xSetOp), uint16(FSUB),\n\t/*12272*/ uint16(xArgM64fp),\n\t/*12273*/ uint16(xMatch),\n\t/*12274*/ uint16(xSetOp), uint16(FSUBR),\n\t/*12276*/ uint16(xArgM64fp),\n\t/*12277*/ uint16(xMatch),\n\t/*12278*/ uint16(xSetOp), uint16(FDIV),\n\t/*12280*/ uint16(xArgM64fp),\n\t/*12281*/ uint16(xMatch),\n\t/*12282*/ uint16(xSetOp), uint16(FDIVR),\n\t/*12284*/ uint16(xArgM64fp),\n\t/*12285*/ uint16(xMatch),\n\t/*12286*/ uint16(xSetOp), uint16(FADD),\n\t/*12288*/ uint16(xArgSTi),\n\t/*12289*/ uint16(xArgST),\n\t/*12290*/ uint16(xMatch),\n\t/*12291*/ uint16(xSetOp), uint16(FMUL),\n\t/*12293*/ uint16(xArgSTi),\n\t/*12294*/ uint16(xArgST),\n\t/*12295*/ uint16(xMatch),\n\t/*12296*/ uint16(xSetOp), uint16(FSUBR),\n\t/*12298*/ uint16(xArgSTi),\n\t/*12299*/ uint16(xArgST),\n\t/*12300*/ uint16(xMatch),\n\t/*12301*/ uint16(xSetOp), uint16(FSUB),\n\t/*12303*/ uint16(xArgSTi),\n\t/*12304*/ uint16(xArgST),\n\t/*12305*/ uint16(xMatch),\n\t/*12306*/ uint16(xSetOp), uint16(FDIVR),\n\t/*12308*/ uint16(xArgSTi),\n\t/*12309*/ uint16(xArgST),\n\t/*12310*/ uint16(xMatch),\n\t/*12311*/ uint16(xSetOp), uint16(FDIV),\n\t/*12313*/ uint16(xArgSTi),\n\t/*12314*/ uint16(xArgST),\n\t/*12315*/ uint16(xMatch),\n\t/*12316*/ uint16(xCondByte), 40,\n\t0xc0, 12435,\n\t0xc1, 12435,\n\t0xc2, 12435,\n\t0xc3, 12435,\n\t0xc4, 12435,\n\t0xc5, 12435,\n\t0xc6, 12435,\n\t0xc7, 12435,\n\t0xd0, 12439,\n\t0xd1, 12439,\n\t0xd2, 12439,\n\t0xd3, 12439,\n\t0xd4, 12439,\n\t0xd5, 12439,\n\t0xd6, 12439,\n\t0xd7, 12439,\n\t0xd8, 12443,\n\t0xd9, 12443,\n\t0xda, 12443,\n\t0xdb, 12443,\n\t0xdc, 12443,\n\t0xdd, 12443,\n\t0xde, 12443,\n\t0xdf, 12443,\n\t0xe0, 12447,\n\t0xe1, 12447,\n\t0xe2, 12447,\n\t0xe3, 12447,\n\t0xe4, 12447,\n\t0xe5, 12447,\n\t0xe6, 12447,\n\t0xe7, 12447,\n\t0xe8, 12451,\n\t0xe9, 12451,\n\t0xea, 12451,\n\t0xeb, 12451,\n\t0xec, 12451,\n\t0xed, 12451,\n\t0xee, 12451,\n\t0xef, 12451,\n\t/*12398*/ uint16(xCondSlashR),\n\t12407, // 0\n\t12411, // 1\n\t12415, // 2\n\t12419, // 3\n\t12423, // 4\n\t0,     // 5\n\t12427, // 6\n\t12431, // 7\n\t/*12407*/ uint16(xSetOp), uint16(FLD),\n\t/*12409*/ uint16(xArgM64fp),\n\t/*12410*/ uint16(xMatch),\n\t/*12411*/ uint16(xSetOp), uint16(FISTTP),\n\t/*12413*/ uint16(xArgM64int),\n\t/*12414*/ uint16(xMatch),\n\t/*12415*/ uint16(xSetOp), uint16(FST),\n\t/*12417*/ uint16(xArgM64fp),\n\t/*12418*/ uint16(xMatch),\n\t/*12419*/ uint16(xSetOp), uint16(FSTP),\n\t/*12421*/ uint16(xArgM64fp),\n\t/*12422*/ uint16(xMatch),\n\t/*12423*/ uint16(xSetOp), uint16(FRSTOR),\n\t/*12425*/ uint16(xArgM94108byte),\n\t/*12426*/ uint16(xMatch),\n\t/*12427*/ uint16(xSetOp), uint16(FNSAVE),\n\t/*12429*/ uint16(xArgM94108byte),\n\t/*12430*/ uint16(xMatch),\n\t/*12431*/ uint16(xSetOp), uint16(FNSTSW),\n\t/*12433*/ uint16(xArgM2byte),\n\t/*12434*/ uint16(xMatch),\n\t/*12435*/ uint16(xSetOp), uint16(FFREE),\n\t/*12437*/ uint16(xArgSTi),\n\t/*12438*/ uint16(xMatch),\n\t/*12439*/ uint16(xSetOp), uint16(FST),\n\t/*12441*/ uint16(xArgSTi),\n\t/*12442*/ uint16(xMatch),\n\t/*12443*/ uint16(xSetOp), uint16(FSTP),\n\t/*12445*/ uint16(xArgSTi),\n\t/*12446*/ uint16(xMatch),\n\t/*12447*/ uint16(xSetOp), uint16(FUCOM),\n\t/*12449*/ uint16(xArgSTi),\n\t/*12450*/ uint16(xMatch),\n\t/*12451*/ uint16(xSetOp), uint16(FUCOMP),\n\t/*12453*/ uint16(xArgSTi),\n\t/*12454*/ uint16(xMatch),\n\t/*12455*/ uint16(xCondByte), 49,\n\t0xc0, 12596,\n\t0xc1, 12596,\n\t0xc2, 12596,\n\t0xc3, 12596,\n\t0xc4, 12596,\n\t0xc5, 12596,\n\t0xc6, 12596,\n\t0xc7, 12596,\n\t0xc8, 12601,\n\t0xc9, 12601,\n\t0xca, 12601,\n\t0xcb, 12601,\n\t0xcc, 12601,\n\t0xcd, 12601,\n\t0xce, 12601,\n\t0xcf, 12601,\n\t0xD9, 12606,\n\t0xe0, 12609,\n\t0xe1, 12609,\n\t0xe2, 12609,\n\t0xe3, 12609,\n\t0xe4, 12609,\n\t0xe5, 12609,\n\t0xe6, 12609,\n\t0xe7, 12609,\n\t0xe8, 12614,\n\t0xe9, 12614,\n\t0xea, 12614,\n\t0xeb, 12614,\n\t0xec, 12614,\n\t0xed, 12614,\n\t0xee, 12614,\n\t0xef, 12614,\n\t0xf0, 12619,\n\t0xf1, 12619,\n\t0xf2, 12619,\n\t0xf3, 12619,\n\t0xf4, 12619,\n\t0xf5, 12619,\n\t0xf6, 12619,\n\t0xf7, 12619,\n\t0xf8, 12624,\n\t0xf9, 12624,\n\t0xfa, 12624,\n\t0xfb, 12624,\n\t0xfc, 12624,\n\t0xfd, 12624,\n\t0xfe, 12624,\n\t0xff, 12624,\n\t/*12555*/ uint16(xCondSlashR),\n\t12564, // 0\n\t12568, // 1\n\t12572, // 2\n\t12576, // 3\n\t12580, // 4\n\t12584, // 5\n\t12588, // 6\n\t12592, // 7\n\t/*12564*/ uint16(xSetOp), uint16(FIADD),\n\t/*12566*/ uint16(xArgM16int),\n\t/*12567*/ uint16(xMatch),\n\t/*12568*/ uint16(xSetOp), uint16(FIMUL),\n\t/*12570*/ uint16(xArgM16int),\n\t/*12571*/ uint16(xMatch),\n\t/*12572*/ uint16(xSetOp), uint16(FICOM),\n\t/*12574*/ uint16(xArgM16int),\n\t/*12575*/ uint16(xMatch),\n\t/*12576*/ uint16(xSetOp), uint16(FICOMP),\n\t/*12578*/ uint16(xArgM16int),\n\t/*12579*/ uint16(xMatch),\n\t/*12580*/ uint16(xSetOp), uint16(FISUB),\n\t/*12582*/ uint16(xArgM16int),\n\t/*12583*/ uint16(xMatch),\n\t/*12584*/ uint16(xSetOp), uint16(FISUBR),\n\t/*12586*/ uint16(xArgM16int),\n\t/*12587*/ uint16(xMatch),\n\t/*12588*/ uint16(xSetOp), uint16(FIDIV),\n\t/*12590*/ uint16(xArgM16int),\n\t/*12591*/ uint16(xMatch),\n\t/*12592*/ uint16(xSetOp), uint16(FIDIVR),\n\t/*12594*/ uint16(xArgM16int),\n\t/*12595*/ uint16(xMatch),\n\t/*12596*/ uint16(xSetOp), uint16(FADDP),\n\t/*12598*/ uint16(xArgSTi),\n\t/*12599*/ uint16(xArgST),\n\t/*12600*/ uint16(xMatch),\n\t/*12601*/ uint16(xSetOp), uint16(FMULP),\n\t/*12603*/ uint16(xArgSTi),\n\t/*12604*/ uint16(xArgST),\n\t/*12605*/ uint16(xMatch),\n\t/*12606*/ uint16(xSetOp), uint16(FCOMPP),\n\t/*12608*/ uint16(xMatch),\n\t/*12609*/ uint16(xSetOp), uint16(FSUBRP),\n\t/*12611*/ uint16(xArgSTi),\n\t/*12612*/ uint16(xArgST),\n\t/*12613*/ uint16(xMatch),\n\t/*12614*/ uint16(xSetOp), uint16(FSUBP),\n\t/*12616*/ uint16(xArgSTi),\n\t/*12617*/ uint16(xArgST),\n\t/*12618*/ uint16(xMatch),\n\t/*12619*/ uint16(xSetOp), uint16(FDIVRP),\n\t/*12621*/ uint16(xArgSTi),\n\t/*12622*/ uint16(xArgST),\n\t/*12623*/ uint16(xMatch),\n\t/*12624*/ uint16(xSetOp), uint16(FDIVP),\n\t/*12626*/ uint16(xArgSTi),\n\t/*12627*/ uint16(xArgST),\n\t/*12628*/ uint16(xMatch),\n\t/*12629*/ uint16(xCondByte), 25,\n\t0xc0, 12722,\n\t0xc1, 12722,\n\t0xc2, 12722,\n\t0xc3, 12722,\n\t0xc4, 12722,\n\t0xc5, 12722,\n\t0xc6, 12722,\n\t0xc7, 12722,\n\t0xE0, 12726,\n\t0xe8, 12730,\n\t0xe9, 12730,\n\t0xea, 12730,\n\t0xeb, 12730,\n\t0xec, 12730,\n\t0xed, 12730,\n\t0xee, 12730,\n\t0xef, 12730,\n\t0xf0, 12735,\n\t0xf1, 12735,\n\t0xf2, 12735,\n\t0xf3, 12735,\n\t0xf4, 12735,\n\t0xf5, 12735,\n\t0xf6, 12735,\n\t0xf7, 12735,\n\t/*12681*/ uint16(xCondSlashR),\n\t12690, // 0\n\t12694, // 1\n\t12698, // 2\n\t12702, // 3\n\t12706, // 4\n\t12710, // 5\n\t12714, // 6\n\t12718, // 7\n\t/*12690*/ uint16(xSetOp), uint16(FILD),\n\t/*12692*/ uint16(xArgM16int),\n\t/*12693*/ uint16(xMatch),\n\t/*12694*/ uint16(xSetOp), uint16(FISTTP),\n\t/*12696*/ uint16(xArgM16int),\n\t/*12697*/ uint16(xMatch),\n\t/*12698*/ uint16(xSetOp), uint16(FIST),\n\t/*12700*/ uint16(xArgM16int),\n\t/*12701*/ uint16(xMatch),\n\t/*12702*/ uint16(xSetOp), uint16(FISTP),\n\t/*12704*/ uint16(xArgM16int),\n\t/*12705*/ uint16(xMatch),\n\t/*12706*/ uint16(xSetOp), uint16(FBLD),\n\t/*12708*/ uint16(xArgM80dec),\n\t/*12709*/ uint16(xMatch),\n\t/*12710*/ uint16(xSetOp), uint16(FILD),\n\t/*12712*/ uint16(xArgM64int),\n\t/*12713*/ uint16(xMatch),\n\t/*12714*/ uint16(xSetOp), uint16(FBSTP),\n\t/*12716*/ uint16(xArgM80bcd),\n\t/*12717*/ uint16(xMatch),\n\t/*12718*/ uint16(xSetOp), uint16(FISTP),\n\t/*12720*/ uint16(xArgM64int),\n\t/*12721*/ uint16(xMatch),\n\t/*12722*/ uint16(xSetOp), uint16(FFREEP),\n\t/*12724*/ uint16(xArgSTi),\n\t/*12725*/ uint16(xMatch),\n\t/*12726*/ uint16(xSetOp), uint16(FNSTSW),\n\t/*12728*/ uint16(xArgAX),\n\t/*12729*/ uint16(xMatch),\n\t/*12730*/ uint16(xSetOp), uint16(FUCOMIP),\n\t/*12732*/ uint16(xArgST),\n\t/*12733*/ uint16(xArgSTi),\n\t/*12734*/ uint16(xMatch),\n\t/*12735*/ uint16(xSetOp), uint16(FCOMIP),\n\t/*12737*/ uint16(xArgST),\n\t/*12738*/ uint16(xArgSTi),\n\t/*12739*/ uint16(xMatch),\n\t/*12740*/ uint16(xSetOp), uint16(LOOPNE),\n\t/*12742*/ uint16(xReadCb),\n\t/*12743*/ uint16(xArgRel8),\n\t/*12744*/ uint16(xMatch),\n\t/*12745*/ uint16(xSetOp), uint16(LOOPE),\n\t/*12747*/ uint16(xReadCb),\n\t/*12748*/ uint16(xArgRel8),\n\t/*12749*/ uint16(xMatch),\n\t/*12750*/ uint16(xSetOp), uint16(LOOP),\n\t/*12752*/ uint16(xReadCb),\n\t/*12753*/ uint16(xArgRel8),\n\t/*12754*/ uint16(xMatch),\n\t/*12755*/ uint16(xCondIs64), 12758, 12772,\n\t/*12758*/ uint16(xCondAddrSize), 12762, 12767, 0,\n\t/*12762*/ uint16(xSetOp), uint16(JCXZ),\n\t/*12764*/ uint16(xReadCb),\n\t/*12765*/ uint16(xArgRel8),\n\t/*12766*/ uint16(xMatch),\n\t/*12767*/ uint16(xSetOp), uint16(JECXZ),\n\t/*12769*/ uint16(xReadCb),\n\t/*12770*/ uint16(xArgRel8),\n\t/*12771*/ uint16(xMatch),\n\t/*12772*/ uint16(xCondAddrSize), 0, 12767, 12776,\n\t/*12776*/ uint16(xSetOp), uint16(JRCXZ),\n\t/*12778*/ uint16(xReadCb),\n\t/*12779*/ uint16(xArgRel8),\n\t/*12780*/ uint16(xMatch),\n\t/*12781*/ uint16(xSetOp), uint16(IN),\n\t/*12783*/ uint16(xReadIb),\n\t/*12784*/ uint16(xArgAL),\n\t/*12785*/ uint16(xArgImm8u),\n\t/*12786*/ uint16(xMatch),\n\t/*12787*/ uint16(xCondDataSize), 12791, 12797, 12803,\n\t/*12791*/ uint16(xSetOp), uint16(IN),\n\t/*12793*/ uint16(xReadIb),\n\t/*12794*/ uint16(xArgAX),\n\t/*12795*/ uint16(xArgImm8u),\n\t/*12796*/ uint16(xMatch),\n\t/*12797*/ uint16(xSetOp), uint16(IN),\n\t/*12799*/ uint16(xReadIb),\n\t/*12800*/ uint16(xArgEAX),\n\t/*12801*/ uint16(xArgImm8u),\n\t/*12802*/ uint16(xMatch),\n\t/*12803*/ uint16(xSetOp), uint16(IN),\n\t/*12805*/ uint16(xReadIb),\n\t/*12806*/ uint16(xArgEAX),\n\t/*12807*/ uint16(xArgImm8u),\n\t/*12808*/ uint16(xMatch),\n\t/*12809*/ uint16(xSetOp), uint16(OUT),\n\t/*12811*/ uint16(xReadIb),\n\t/*12812*/ uint16(xArgImm8u),\n\t/*12813*/ uint16(xArgAL),\n\t/*12814*/ uint16(xMatch),\n\t/*12815*/ uint16(xCondPrefix), 3,\n\t0xC5, 12859,\n\t0xC4, 12845,\n\t0x0, 12823,\n\t/*12823*/ uint16(xCondDataSize), 12827, 12833, 12839,\n\t/*12827*/ uint16(xSetOp), uint16(OUT),\n\t/*12829*/ uint16(xReadIb),\n\t/*12830*/ uint16(xArgImm8u),\n\t/*12831*/ uint16(xArgAX),\n\t/*12832*/ uint16(xMatch),\n\t/*12833*/ uint16(xSetOp), uint16(OUT),\n\t/*12835*/ uint16(xReadIb),\n\t/*12836*/ uint16(xArgImm8u),\n\t/*12837*/ uint16(xArgEAX),\n\t/*12838*/ uint16(xMatch),\n\t/*12839*/ uint16(xSetOp), uint16(OUT),\n\t/*12841*/ uint16(xReadIb),\n\t/*12842*/ uint16(xArgImm8u),\n\t/*12843*/ uint16(xArgEAX),\n\t/*12844*/ uint16(xMatch),\n\t/*12845*/ uint16(xCondPrefix), 1,\n\t0x66, 12849,\n\t/*12849*/ uint16(xCondPrefix), 1,\n\t0x0F, 12853,\n\t/*12853*/ uint16(xSetOp), uint16(VMOVNTDQ),\n\t/*12855*/ uint16(xReadSlashR),\n\t/*12856*/ uint16(xArgM256),\n\t/*12857*/ uint16(xArgYmm1),\n\t/*12858*/ uint16(xMatch),\n\t/*12859*/ uint16(xCondPrefix), 1,\n\t0x66, 12863,\n\t/*12863*/ uint16(xCondPrefix), 1,\n\t0x0F, 12867,\n\t/*12867*/ uint16(xSetOp), uint16(VMOVNTDQ),\n\t/*12869*/ uint16(xReadSlashR),\n\t/*12870*/ uint16(xArgM256),\n\t/*12871*/ uint16(xArgYmm1),\n\t/*12872*/ uint16(xMatch),\n\t/*12873*/ uint16(xCondIs64), 12876, 12890,\n\t/*12876*/ uint16(xCondDataSize), 12880, 12885, 0,\n\t/*12880*/ uint16(xSetOp), uint16(CALL),\n\t/*12882*/ uint16(xReadCw),\n\t/*12883*/ uint16(xArgRel16),\n\t/*12884*/ uint16(xMatch),\n\t/*12885*/ uint16(xSetOp), uint16(CALL),\n\t/*12887*/ uint16(xReadCd),\n\t/*12888*/ uint16(xArgRel32),\n\t/*12889*/ uint16(xMatch),\n\t/*12890*/ uint16(xCondDataSize), 12894, 12885, 12899,\n\t/*12894*/ uint16(xSetOp), uint16(CALL),\n\t/*12896*/ uint16(xReadCd),\n\t/*12897*/ uint16(xArgRel32),\n\t/*12898*/ uint16(xMatch),\n\t/*12899*/ uint16(xSetOp), uint16(CALL),\n\t/*12901*/ uint16(xReadCd),\n\t/*12902*/ uint16(xArgRel32),\n\t/*12903*/ uint16(xMatch),\n\t/*12904*/ uint16(xCondIs64), 12907, 12921,\n\t/*12907*/ uint16(xCondDataSize), 12911, 12916, 0,\n\t/*12911*/ uint16(xSetOp), uint16(JMP),\n\t/*12913*/ uint16(xReadCw),\n\t/*12914*/ uint16(xArgRel16),\n\t/*12915*/ uint16(xMatch),\n\t/*12916*/ uint16(xSetOp), uint16(JMP),\n\t/*12918*/ uint16(xReadCd),\n\t/*12919*/ uint16(xArgRel32),\n\t/*12920*/ uint16(xMatch),\n\t/*12921*/ uint16(xCondDataSize), 12925, 12916, 12930,\n\t/*12925*/ uint16(xSetOp), uint16(JMP),\n\t/*12927*/ uint16(xReadCd),\n\t/*12928*/ uint16(xArgRel32),\n\t/*12929*/ uint16(xMatch),\n\t/*12930*/ uint16(xSetOp), uint16(JMP),\n\t/*12932*/ uint16(xReadCd),\n\t/*12933*/ uint16(xArgRel32),\n\t/*12934*/ uint16(xMatch),\n\t/*12935*/ uint16(xCondIs64), 12938, 0,\n\t/*12938*/ uint16(xCondDataSize), 12942, 12947, 0,\n\t/*12942*/ uint16(xSetOp), uint16(LJMP),\n\t/*12944*/ uint16(xReadCd),\n\t/*12945*/ uint16(xArgPtr16colon16),\n\t/*12946*/ uint16(xMatch),\n\t/*12947*/ uint16(xSetOp), uint16(LJMP),\n\t/*12949*/ uint16(xReadCp),\n\t/*12950*/ uint16(xArgPtr16colon32),\n\t/*12951*/ uint16(xMatch),\n\t/*12952*/ uint16(xSetOp), uint16(JMP),\n\t/*12954*/ uint16(xReadCb),\n\t/*12955*/ uint16(xArgRel8),\n\t/*12956*/ uint16(xMatch),\n\t/*12957*/ uint16(xSetOp), uint16(IN),\n\t/*12959*/ uint16(xArgAL),\n\t/*12960*/ uint16(xArgDX),\n\t/*12961*/ uint16(xMatch),\n\t/*12962*/ uint16(xCondDataSize), 12966, 12971, 12976,\n\t/*12966*/ uint16(xSetOp), uint16(IN),\n\t/*12968*/ uint16(xArgAX),\n\t/*12969*/ uint16(xArgDX),\n\t/*12970*/ uint16(xMatch),\n\t/*12971*/ uint16(xSetOp), uint16(IN),\n\t/*12973*/ uint16(xArgEAX),\n\t/*12974*/ uint16(xArgDX),\n\t/*12975*/ uint16(xMatch),\n\t/*12976*/ uint16(xSetOp), uint16(IN),\n\t/*12978*/ uint16(xArgEAX),\n\t/*12979*/ uint16(xArgDX),\n\t/*12980*/ uint16(xMatch),\n\t/*12981*/ uint16(xSetOp), uint16(OUT),\n\t/*12983*/ uint16(xArgDX),\n\t/*12984*/ uint16(xArgAL),\n\t/*12985*/ uint16(xMatch),\n\t/*12986*/ uint16(xCondDataSize), 12990, 12995, 13000,\n\t/*12990*/ uint16(xSetOp), uint16(OUT),\n\t/*12992*/ uint16(xArgDX),\n\t/*12993*/ uint16(xArgAX),\n\t/*12994*/ uint16(xMatch),\n\t/*12995*/ uint16(xSetOp), uint16(OUT),\n\t/*12997*/ uint16(xArgDX),\n\t/*12998*/ uint16(xArgEAX),\n\t/*12999*/ uint16(xMatch),\n\t/*13000*/ uint16(xSetOp), uint16(OUT),\n\t/*13002*/ uint16(xArgDX),\n\t/*13003*/ uint16(xArgEAX),\n\t/*13004*/ uint16(xMatch),\n\t/*13005*/ uint16(xSetOp), uint16(ICEBP),\n\t/*13007*/ uint16(xMatch),\n\t/*13008*/ uint16(xSetOp), uint16(HLT),\n\t/*13010*/ uint16(xMatch),\n\t/*13011*/ uint16(xSetOp), uint16(CMC),\n\t/*13013*/ uint16(xMatch),\n\t/*13014*/ uint16(xCondSlashR),\n\t13023, // 0\n\t0,     // 1\n\t13029, // 2\n\t13033, // 3\n\t13037, // 4\n\t13041, // 5\n\t13045, // 6\n\t13049, // 7\n\t/*13023*/ uint16(xSetOp), uint16(TEST),\n\t/*13025*/ uint16(xReadIb),\n\t/*13026*/ uint16(xArgRM8),\n\t/*13027*/ uint16(xArgImm8u),\n\t/*13028*/ uint16(xMatch),\n\t/*13029*/ uint16(xSetOp), uint16(NOT),\n\t/*13031*/ uint16(xArgRM8),\n\t/*13032*/ uint16(xMatch),\n\t/*13033*/ uint16(xSetOp), uint16(NEG),\n\t/*13035*/ uint16(xArgRM8),\n\t/*13036*/ uint16(xMatch),\n\t/*13037*/ uint16(xSetOp), uint16(MUL),\n\t/*13039*/ uint16(xArgRM8),\n\t/*13040*/ uint16(xMatch),\n\t/*13041*/ uint16(xSetOp), uint16(IMUL),\n\t/*13043*/ uint16(xArgRM8),\n\t/*13044*/ uint16(xMatch),\n\t/*13045*/ uint16(xSetOp), uint16(DIV),\n\t/*13047*/ uint16(xArgRM8),\n\t/*13048*/ uint16(xMatch),\n\t/*13049*/ uint16(xSetOp), uint16(IDIV),\n\t/*13051*/ uint16(xArgRM8),\n\t/*13052*/ uint16(xMatch),\n\t/*13053*/ uint16(xCondSlashR),\n\t13062, // 0\n\t0,     // 1\n\t13091, // 2\n\t13114, // 3\n\t13137, // 4\n\t13160, // 5\n\t13183, // 6\n\t13206, // 7\n\t/*13062*/ uint16(xCondIs64), 13065, 13081,\n\t/*13065*/ uint16(xCondDataSize), 13069, 13075, 0,\n\t/*13069*/ uint16(xSetOp), uint16(TEST),\n\t/*13071*/ uint16(xReadIw),\n\t/*13072*/ uint16(xArgRM16),\n\t/*13073*/ uint16(xArgImm16),\n\t/*13074*/ uint16(xMatch),\n\t/*13075*/ uint16(xSetOp), uint16(TEST),\n\t/*13077*/ uint16(xReadId),\n\t/*13078*/ uint16(xArgRM32),\n\t/*13079*/ uint16(xArgImm32),\n\t/*13080*/ uint16(xMatch),\n\t/*13081*/ uint16(xCondDataSize), 13069, 13075, 13085,\n\t/*13085*/ uint16(xSetOp), uint16(TEST),\n\t/*13087*/ uint16(xReadId),\n\t/*13088*/ uint16(xArgRM64),\n\t/*13089*/ uint16(xArgImm32),\n\t/*13090*/ uint16(xMatch),\n\t/*13091*/ uint16(xCondIs64), 13094, 13106,\n\t/*13094*/ uint16(xCondDataSize), 13098, 13102, 0,\n\t/*13098*/ uint16(xSetOp), uint16(NOT),\n\t/*13100*/ uint16(xArgRM16),\n\t/*13101*/ uint16(xMatch),\n\t/*13102*/ uint16(xSetOp), uint16(NOT),\n\t/*13104*/ uint16(xArgRM32),\n\t/*13105*/ uint16(xMatch),\n\t/*13106*/ uint16(xCondDataSize), 13098, 13102, 13110,\n\t/*13110*/ uint16(xSetOp), uint16(NOT),\n\t/*13112*/ uint16(xArgRM64),\n\t/*13113*/ uint16(xMatch),\n\t/*13114*/ uint16(xCondIs64), 13117, 13129,\n\t/*13117*/ uint16(xCondDataSize), 13121, 13125, 0,\n\t/*13121*/ uint16(xSetOp), uint16(NEG),\n\t/*13123*/ uint16(xArgRM16),\n\t/*13124*/ uint16(xMatch),\n\t/*13125*/ uint16(xSetOp), uint16(NEG),\n\t/*13127*/ uint16(xArgRM32),\n\t/*13128*/ uint16(xMatch),\n\t/*13129*/ uint16(xCondDataSize), 13121, 13125, 13133,\n\t/*13133*/ uint16(xSetOp), uint16(NEG),\n\t/*13135*/ uint16(xArgRM64),\n\t/*13136*/ uint16(xMatch),\n\t/*13137*/ uint16(xCondIs64), 13140, 13152,\n\t/*13140*/ uint16(xCondDataSize), 13144, 13148, 0,\n\t/*13144*/ uint16(xSetOp), uint16(MUL),\n\t/*13146*/ uint16(xArgRM16),\n\t/*13147*/ uint16(xMatch),\n\t/*13148*/ uint16(xSetOp), uint16(MUL),\n\t/*13150*/ uint16(xArgRM32),\n\t/*13151*/ uint16(xMatch),\n\t/*13152*/ uint16(xCondDataSize), 13144, 13148, 13156,\n\t/*13156*/ uint16(xSetOp), uint16(MUL),\n\t/*13158*/ uint16(xArgRM64),\n\t/*13159*/ uint16(xMatch),\n\t/*13160*/ uint16(xCondIs64), 13163, 13175,\n\t/*13163*/ uint16(xCondDataSize), 13167, 13171, 0,\n\t/*13167*/ uint16(xSetOp), uint16(IMUL),\n\t/*13169*/ uint16(xArgRM16),\n\t/*13170*/ uint16(xMatch),\n\t/*13171*/ uint16(xSetOp), uint16(IMUL),\n\t/*13173*/ uint16(xArgRM32),\n\t/*13174*/ uint16(xMatch),\n\t/*13175*/ uint16(xCondDataSize), 13167, 13171, 13179,\n\t/*13179*/ uint16(xSetOp), uint16(IMUL),\n\t/*13181*/ uint16(xArgRM64),\n\t/*13182*/ uint16(xMatch),\n\t/*13183*/ uint16(xCondIs64), 13186, 13198,\n\t/*13186*/ uint16(xCondDataSize), 13190, 13194, 0,\n\t/*13190*/ uint16(xSetOp), uint16(DIV),\n\t/*13192*/ uint16(xArgRM16),\n\t/*13193*/ uint16(xMatch),\n\t/*13194*/ uint16(xSetOp), uint16(DIV),\n\t/*13196*/ uint16(xArgRM32),\n\t/*13197*/ uint16(xMatch),\n\t/*13198*/ uint16(xCondDataSize), 13190, 13194, 13202,\n\t/*13202*/ uint16(xSetOp), uint16(DIV),\n\t/*13204*/ uint16(xArgRM64),\n\t/*13205*/ uint16(xMatch),\n\t/*13206*/ uint16(xCondIs64), 13209, 13221,\n\t/*13209*/ uint16(xCondDataSize), 13213, 13217, 0,\n\t/*13213*/ uint16(xSetOp), uint16(IDIV),\n\t/*13215*/ uint16(xArgRM16),\n\t/*13216*/ uint16(xMatch),\n\t/*13217*/ uint16(xSetOp), uint16(IDIV),\n\t/*13219*/ uint16(xArgRM32),\n\t/*13220*/ uint16(xMatch),\n\t/*13221*/ uint16(xCondDataSize), 13213, 13217, 13225,\n\t/*13225*/ uint16(xSetOp), uint16(IDIV),\n\t/*13227*/ uint16(xArgRM64),\n\t/*13228*/ uint16(xMatch),\n\t/*13229*/ uint16(xSetOp), uint16(CLC),\n\t/*13231*/ uint16(xMatch),\n\t/*13232*/ uint16(xSetOp), uint16(STC),\n\t/*13234*/ uint16(xMatch),\n\t/*13235*/ uint16(xSetOp), uint16(CLI),\n\t/*13237*/ uint16(xMatch),\n\t/*13238*/ uint16(xSetOp), uint16(STI),\n\t/*13240*/ uint16(xMatch),\n\t/*13241*/ uint16(xSetOp), uint16(CLD),\n\t/*13243*/ uint16(xMatch),\n\t/*13244*/ uint16(xSetOp), uint16(STD),\n\t/*13246*/ uint16(xMatch),\n\t/*13247*/ uint16(xCondSlashR),\n\t13256, // 0\n\t13260, // 1\n\t0,     // 2\n\t0,     // 3\n\t0,     // 4\n\t0,     // 5\n\t0,     // 6\n\t0,     // 7\n\t/*13256*/ uint16(xSetOp), uint16(INC),\n\t/*13258*/ uint16(xArgRM8),\n\t/*13259*/ uint16(xMatch),\n\t/*13260*/ uint16(xSetOp), uint16(DEC),\n\t/*13262*/ uint16(xArgRM8),\n\t/*13263*/ uint16(xMatch),\n\t/*13264*/ uint16(xCondSlashR),\n\t13273, // 0\n\t13296, // 1\n\t13319, // 2\n\t13338, // 3\n\t13361, // 4\n\t13380, // 5\n\t13403, // 6\n\t0,     // 7\n\t/*13273*/ uint16(xCondIs64), 13276, 13288,\n\t/*13276*/ uint16(xCondDataSize), 13280, 13284, 0,\n\t/*13280*/ uint16(xSetOp), uint16(INC),\n\t/*13282*/ uint16(xArgRM16),\n\t/*13283*/ uint16(xMatch),\n\t/*13284*/ uint16(xSetOp), uint16(INC),\n\t/*13286*/ uint16(xArgRM32),\n\t/*13287*/ uint16(xMatch),\n\t/*13288*/ uint16(xCondDataSize), 13280, 13284, 13292,\n\t/*13292*/ uint16(xSetOp), uint16(INC),\n\t/*13294*/ uint16(xArgRM64),\n\t/*13295*/ uint16(xMatch),\n\t/*13296*/ uint16(xCondIs64), 13299, 13311,\n\t/*13299*/ uint16(xCondDataSize), 13303, 13307, 0,\n\t/*13303*/ uint16(xSetOp), uint16(DEC),\n\t/*13305*/ uint16(xArgRM16),\n\t/*13306*/ uint16(xMatch),\n\t/*13307*/ uint16(xSetOp), uint16(DEC),\n\t/*13309*/ uint16(xArgRM32),\n\t/*13310*/ uint16(xMatch),\n\t/*13311*/ uint16(xCondDataSize), 13303, 13307, 13315,\n\t/*13315*/ uint16(xSetOp), uint16(DEC),\n\t/*13317*/ uint16(xArgRM64),\n\t/*13318*/ uint16(xMatch),\n\t/*13319*/ uint16(xCondIs64), 13322, 13334,\n\t/*13322*/ uint16(xCondDataSize), 13326, 13330, 0,\n\t/*13326*/ uint16(xSetOp), uint16(CALL),\n\t/*13328*/ uint16(xArgRM16),\n\t/*13329*/ uint16(xMatch),\n\t/*13330*/ uint16(xSetOp), uint16(CALL),\n\t/*13332*/ uint16(xArgRM32),\n\t/*13333*/ uint16(xMatch),\n\t/*13334*/ uint16(xSetOp), uint16(CALL),\n\t/*13336*/ uint16(xArgRM64),\n\t/*13337*/ uint16(xMatch),\n\t/*13338*/ uint16(xCondIs64), 13341, 13353,\n\t/*13341*/ uint16(xCondDataSize), 13345, 13349, 0,\n\t/*13345*/ uint16(xSetOp), uint16(LCALL),\n\t/*13347*/ uint16(xArgM16colon16),\n\t/*13348*/ uint16(xMatch),\n\t/*13349*/ uint16(xSetOp), uint16(LCALL),\n\t/*13351*/ uint16(xArgM16colon32),\n\t/*13352*/ uint16(xMatch),\n\t/*13353*/ uint16(xCondDataSize), 13345, 13349, 13357,\n\t/*13357*/ uint16(xSetOp), uint16(LCALL),\n\t/*13359*/ uint16(xArgM16colon64),\n\t/*13360*/ uint16(xMatch),\n\t/*13361*/ uint16(xCondIs64), 13364, 13376,\n\t/*13364*/ uint16(xCondDataSize), 13368, 13372, 0,\n\t/*13368*/ uint16(xSetOp), uint16(JMP),\n\t/*13370*/ uint16(xArgRM16),\n\t/*13371*/ uint16(xMatch),\n\t/*13372*/ uint16(xSetOp), uint16(JMP),\n\t/*13374*/ uint16(xArgRM32),\n\t/*13375*/ uint16(xMatch),\n\t/*13376*/ uint16(xSetOp), uint16(JMP),\n\t/*13378*/ uint16(xArgRM64),\n\t/*13379*/ uint16(xMatch),\n\t/*13380*/ uint16(xCondIs64), 13383, 13395,\n\t/*13383*/ uint16(xCondDataSize), 13387, 13391, 0,\n\t/*13387*/ uint16(xSetOp), uint16(LJMP),\n\t/*13389*/ uint16(xArgM16colon16),\n\t/*13390*/ uint16(xMatch),\n\t/*13391*/ uint16(xSetOp), uint16(LJMP),\n\t/*13393*/ uint16(xArgM16colon32),\n\t/*13394*/ uint16(xMatch),\n\t/*13395*/ uint16(xCondDataSize), 13387, 13391, 13399,\n\t/*13399*/ uint16(xSetOp), uint16(LJMP),\n\t/*13401*/ uint16(xArgM16colon64),\n\t/*13402*/ uint16(xMatch),\n\t/*13403*/ uint16(xCondIs64), 13406, 13418,\n\t/*13406*/ uint16(xCondDataSize), 13410, 13414, 0,\n\t/*13410*/ uint16(xSetOp), uint16(PUSH),\n\t/*13412*/ uint16(xArgRM16),\n\t/*13413*/ uint16(xMatch),\n\t/*13414*/ uint16(xSetOp), uint16(PUSH),\n\t/*13416*/ uint16(xArgRM32),\n\t/*13417*/ uint16(xMatch),\n\t/*13418*/ uint16(xCondDataSize), 13410, 13422, 13426,\n\t/*13422*/ uint16(xSetOp), uint16(PUSH),\n\t/*13424*/ uint16(xArgRM64),\n\t/*13425*/ uint16(xMatch),\n\t/*13426*/ uint16(xSetOp), uint16(PUSH),\n\t/*13428*/ uint16(xArgRM64),\n\t/*13429*/ uint16(xMatch),\n}\n\nconst (\n\t_ Op = iota\n\n\tAAA\n\tAAD\n\tAAM\n\tAAS\n\tADC\n\tADD\n\tADDPD\n\tADDPS\n\tADDSD\n\tADDSS\n\tADDSUBPD\n\tADDSUBPS\n\tAESDEC\n\tAESDECLAST\n\tAESENC\n\tAESENCLAST\n\tAESIMC\n\tAESKEYGENASSIST\n\tAND\n\tANDNPD\n\tANDNPS\n\tANDPD\n\tANDPS\n\tARPL\n\tBLENDPD\n\tBLENDPS\n\tBLENDVPD\n\tBLENDVPS\n\tBOUND\n\tBSF\n\tBSR\n\tBSWAP\n\tBT\n\tBTC\n\tBTR\n\tBTS\n\tCALL\n\tCBW\n\tCDQ\n\tCDQE\n\tCLC\n\tCLD\n\tCLFLUSH\n\tCLI\n\tCLTS\n\tCMC\n\tCMOVA\n\tCMOVAE\n\tCMOVB\n\tCMOVBE\n\tCMOVE\n\tCMOVG\n\tCMOVGE\n\tCMOVL\n\tCMOVLE\n\tCMOVNE\n\tCMOVNO\n\tCMOVNP\n\tCMOVNS\n\tCMOVO\n\tCMOVP\n\tCMOVS\n\tCMP\n\tCMPPD\n\tCMPPS\n\tCMPSB\n\tCMPSD\n\tCMPSD_XMM\n\tCMPSQ\n\tCMPSS\n\tCMPSW\n\tCMPXCHG\n\tCMPXCHG16B\n\tCMPXCHG8B\n\tCOMISD\n\tCOMISS\n\tCPUID\n\tCQO\n\tCRC32\n\tCVTDQ2PD\n\tCVTDQ2PS\n\tCVTPD2DQ\n\tCVTPD2PI\n\tCVTPD2PS\n\tCVTPI2PD\n\tCVTPI2PS\n\tCVTPS2DQ\n\tCVTPS2PD\n\tCVTPS2PI\n\tCVTSD2SI\n\tCVTSD2SS\n\tCVTSI2SD\n\tCVTSI2SS\n\tCVTSS2SD\n\tCVTSS2SI\n\tCVTTPD2DQ\n\tCVTTPD2PI\n\tCVTTPS2DQ\n\tCVTTPS2PI\n\tCVTTSD2SI\n\tCVTTSS2SI\n\tCWD\n\tCWDE\n\tDAA\n\tDAS\n\tDEC\n\tDIV\n\tDIVPD\n\tDIVPS\n\tDIVSD\n\tDIVSS\n\tDPPD\n\tDPPS\n\tEMMS\n\tENTER\n\tEXTRACTPS\n\tF2XM1\n\tFABS\n\tFADD\n\tFADDP\n\tFBLD\n\tFBSTP\n\tFCHS\n\tFCMOVB\n\tFCMOVBE\n\tFCMOVE\n\tFCMOVNB\n\tFCMOVNBE\n\tFCMOVNE\n\tFCMOVNU\n\tFCMOVU\n\tFCOM\n\tFCOMI\n\tFCOMIP\n\tFCOMP\n\tFCOMPP\n\tFCOS\n\tFDECSTP\n\tFDIV\n\tFDIVP\n\tFDIVR\n\tFDIVRP\n\tFFREE\n\tFFREEP\n\tFIADD\n\tFICOM\n\tFICOMP\n\tFIDIV\n\tFIDIVR\n\tFILD\n\tFIMUL\n\tFINCSTP\n\tFIST\n\tFISTP\n\tFISTTP\n\tFISUB\n\tFISUBR\n\tFLD\n\tFLD1\n\tFLDCW\n\tFLDENV\n\tFLDL2E\n\tFLDL2T\n\tFLDLG2\n\tFLDLN2\n\tFLDPI\n\tFLDZ\n\tFMUL\n\tFMULP\n\tFNCLEX\n\tFNINIT\n\tFNOP\n\tFNSAVE\n\tFNSTCW\n\tFNSTENV\n\tFNSTSW\n\tFPATAN\n\tFPREM\n\tFPREM1\n\tFPTAN\n\tFRNDINT\n\tFRSTOR\n\tFSCALE\n\tFSIN\n\tFSINCOS\n\tFSQRT\n\tFST\n\tFSTP\n\tFSUB\n\tFSUBP\n\tFSUBR\n\tFSUBRP\n\tFTST\n\tFUCOM\n\tFUCOMI\n\tFUCOMIP\n\tFUCOMP\n\tFUCOMPP\n\tFWAIT\n\tFXAM\n\tFXCH\n\tFXRSTOR\n\tFXRSTOR64\n\tFXSAVE\n\tFXSAVE64\n\tFXTRACT\n\tFYL2X\n\tFYL2XP1\n\tHADDPD\n\tHADDPS\n\tHLT\n\tHSUBPD\n\tHSUBPS\n\tICEBP\n\tIDIV\n\tIMUL\n\tIN\n\tINC\n\tINSB\n\tINSD\n\tINSERTPS\n\tINSW\n\tINT\n\tINTO\n\tINVD\n\tINVLPG\n\tINVPCID\n\tIRET\n\tIRETD\n\tIRETQ\n\tJA\n\tJAE\n\tJB\n\tJBE\n\tJCXZ\n\tJE\n\tJECXZ\n\tJG\n\tJGE\n\tJL\n\tJLE\n\tJMP\n\tJNE\n\tJNO\n\tJNP\n\tJNS\n\tJO\n\tJP\n\tJRCXZ\n\tJS\n\tLAHF\n\tLAR\n\tLCALL\n\tLDDQU\n\tLDMXCSR\n\tLDS\n\tLEA\n\tLEAVE\n\tLES\n\tLFENCE\n\tLFS\n\tLGDT\n\tLGS\n\tLIDT\n\tLJMP\n\tLLDT\n\tLMSW\n\tLODSB\n\tLODSD\n\tLODSQ\n\tLODSW\n\tLOOP\n\tLOOPE\n\tLOOPNE\n\tLRET\n\tLSL\n\tLSS\n\tLTR\n\tLZCNT\n\tMASKMOVDQU\n\tMASKMOVQ\n\tMAXPD\n\tMAXPS\n\tMAXSD\n\tMAXSS\n\tMFENCE\n\tMINPD\n\tMINPS\n\tMINSD\n\tMINSS\n\tMONITOR\n\tMOV\n\tMOVAPD\n\tMOVAPS\n\tMOVBE\n\tMOVD\n\tMOVDDUP\n\tMOVDQ2Q\n\tMOVDQA\n\tMOVDQU\n\tMOVHLPS\n\tMOVHPD\n\tMOVHPS\n\tMOVLHPS\n\tMOVLPD\n\tMOVLPS\n\tMOVMSKPD\n\tMOVMSKPS\n\tMOVNTDQ\n\tMOVNTDQA\n\tMOVNTI\n\tMOVNTPD\n\tMOVNTPS\n\tMOVNTQ\n\tMOVNTSD\n\tMOVNTSS\n\tMOVQ\n\tMOVQ2DQ\n\tMOVSB\n\tMOVSD\n\tMOVSD_XMM\n\tMOVSHDUP\n\tMOVSLDUP\n\tMOVSQ\n\tMOVSS\n\tMOVSW\n\tMOVSX\n\tMOVSXD\n\tMOVUPD\n\tMOVUPS\n\tMOVZX\n\tMPSADBW\n\tMUL\n\tMULPD\n\tMULPS\n\tMULSD\n\tMULSS\n\tMWAIT\n\tNEG\n\tNOP\n\tNOT\n\tOR\n\tORPD\n\tORPS\n\tOUT\n\tOUTSB\n\tOUTSD\n\tOUTSW\n\tPABSB\n\tPABSD\n\tPABSW\n\tPACKSSDW\n\tPACKSSWB\n\tPACKUSDW\n\tPACKUSWB\n\tPADDB\n\tPADDD\n\tPADDQ\n\tPADDSB\n\tPADDSW\n\tPADDUSB\n\tPADDUSW\n\tPADDW\n\tPALIGNR\n\tPAND\n\tPANDN\n\tPAUSE\n\tPAVGB\n\tPAVGW\n\tPBLENDVB\n\tPBLENDW\n\tPCLMULQDQ\n\tPCMPEQB\n\tPCMPEQD\n\tPCMPEQQ\n\tPCMPEQW\n\tPCMPESTRI\n\tPCMPESTRM\n\tPCMPGTB\n\tPCMPGTD\n\tPCMPGTQ\n\tPCMPGTW\n\tPCMPISTRI\n\tPCMPISTRM\n\tPEXTRB\n\tPEXTRD\n\tPEXTRQ\n\tPEXTRW\n\tPHADDD\n\tPHADDSW\n\tPHADDW\n\tPHMINPOSUW\n\tPHSUBD\n\tPHSUBSW\n\tPHSUBW\n\tPINSRB\n\tPINSRD\n\tPINSRQ\n\tPINSRW\n\tPMADDUBSW\n\tPMADDWD\n\tPMAXSB\n\tPMAXSD\n\tPMAXSW\n\tPMAXUB\n\tPMAXUD\n\tPMAXUW\n\tPMINSB\n\tPMINSD\n\tPMINSW\n\tPMINUB\n\tPMINUD\n\tPMINUW\n\tPMOVMSKB\n\tPMOVSXBD\n\tPMOVSXBQ\n\tPMOVSXBW\n\tPMOVSXDQ\n\tPMOVSXWD\n\tPMOVSXWQ\n\tPMOVZXBD\n\tPMOVZXBQ\n\tPMOVZXBW\n\tPMOVZXDQ\n\tPMOVZXWD\n\tPMOVZXWQ\n\tPMULDQ\n\tPMULHRSW\n\tPMULHUW\n\tPMULHW\n\tPMULLD\n\tPMULLW\n\tPMULUDQ\n\tPOP\n\tPOPA\n\tPOPAD\n\tPOPCNT\n\tPOPF\n\tPOPFD\n\tPOPFQ\n\tPOR\n\tPREFETCHNTA\n\tPREFETCHT0\n\tPREFETCHT1\n\tPREFETCHT2\n\tPREFETCHW\n\tPSADBW\n\tPSHUFB\n\tPSHUFD\n\tPSHUFHW\n\tPSHUFLW\n\tPSHUFW\n\tPSIGNB\n\tPSIGND\n\tPSIGNW\n\tPSLLD\n\tPSLLDQ\n\tPSLLQ\n\tPSLLW\n\tPSRAD\n\tPSRAW\n\tPSRLD\n\tPSRLDQ\n\tPSRLQ\n\tPSRLW\n\tPSUBB\n\tPSUBD\n\tPSUBQ\n\tPSUBSB\n\tPSUBSW\n\tPSUBUSB\n\tPSUBUSW\n\tPSUBW\n\tPTEST\n\tPUNPCKHBW\n\tPUNPCKHDQ\n\tPUNPCKHQDQ\n\tPUNPCKHWD\n\tPUNPCKLBW\n\tPUNPCKLDQ\n\tPUNPCKLQDQ\n\tPUNPCKLWD\n\tPUSH\n\tPUSHA\n\tPUSHAD\n\tPUSHF\n\tPUSHFD\n\tPUSHFQ\n\tPXOR\n\tRCL\n\tRCPPS\n\tRCPSS\n\tRCR\n\tRDFSBASE\n\tRDGSBASE\n\tRDMSR\n\tRDPMC\n\tRDRAND\n\tRDTSC\n\tRDTSCP\n\tRET\n\tROL\n\tROR\n\tROUNDPD\n\tROUNDPS\n\tROUNDSD\n\tROUNDSS\n\tRSM\n\tRSQRTPS\n\tRSQRTSS\n\tSAHF\n\tSAR\n\tSBB\n\tSCASB\n\tSCASD\n\tSCASQ\n\tSCASW\n\tSETA\n\tSETAE\n\tSETB\n\tSETBE\n\tSETE\n\tSETG\n\tSETGE\n\tSETL\n\tSETLE\n\tSETNE\n\tSETNO\n\tSETNP\n\tSETNS\n\tSETO\n\tSETP\n\tSETS\n\tSFENCE\n\tSGDT\n\tSHL\n\tSHLD\n\tSHR\n\tSHRD\n\tSHUFPD\n\tSHUFPS\n\tSIDT\n\tSLDT\n\tSMSW\n\tSQRTPD\n\tSQRTPS\n\tSQRTSD\n\tSQRTSS\n\tSTC\n\tSTD\n\tSTI\n\tSTMXCSR\n\tSTOSB\n\tSTOSD\n\tSTOSQ\n\tSTOSW\n\tSTR\n\tSUB\n\tSUBPD\n\tSUBPS\n\tSUBSD\n\tSUBSS\n\tSWAPGS\n\tSYSCALL\n\tSYSENTER\n\tSYSEXIT\n\tSYSRET\n\tTEST\n\tTZCNT\n\tUCOMISD\n\tUCOMISS\n\tUD0\n\tUD1\n\tUD2\n\tUNPCKHPD\n\tUNPCKHPS\n\tUNPCKLPD\n\tUNPCKLPS\n\tVERR\n\tVERW\n\tVMOVDQA\n\tVMOVDQU\n\tVMOVNTDQ\n\tVMOVNTDQA\n\tVZEROUPPER\n\tWBINVD\n\tWRFSBASE\n\tWRGSBASE\n\tWRMSR\n\tXABORT\n\tXADD\n\tXBEGIN\n\tXCHG\n\tXEND\n\tXGETBV\n\tXLATB\n\tXOR\n\tXORPD\n\tXORPS\n\tXRSTOR\n\tXRSTOR64\n\tXRSTORS\n\tXRSTORS64\n\tXSAVE\n\tXSAVE64\n\tXSAVEC\n\tXSAVEC64\n\tXSAVEOPT\n\tXSAVEOPT64\n\tXSAVES\n\tXSAVES64\n\tXSETBV\n\tXTEST\n)\n\nconst maxOp = XTEST\n\nvar opNames = [...]string{\n\tAAA:             \"AAA\",\n\tAAD:             \"AAD\",\n\tAAM:             \"AAM\",\n\tAAS:             \"AAS\",\n\tADC:             \"ADC\",\n\tADD:             \"ADD\",\n\tADDPD:           \"ADDPD\",\n\tADDPS:           \"ADDPS\",\n\tADDSD:           \"ADDSD\",\n\tADDSS:           \"ADDSS\",\n\tADDSUBPD:        \"ADDSUBPD\",\n\tADDSUBPS:        \"ADDSUBPS\",\n\tAESDEC:          \"AESDEC\",\n\tAESDECLAST:      \"AESDECLAST\",\n\tAESENC:          \"AESENC\",\n\tAESENCLAST:      \"AESENCLAST\",\n\tAESIMC:          \"AESIMC\",\n\tAESKEYGENASSIST: \"AESKEYGENASSIST\",\n\tAND:             \"AND\",\n\tANDNPD:          \"ANDNPD\",\n\tANDNPS:          \"ANDNPS\",\n\tANDPD:           \"ANDPD\",\n\tANDPS:           \"ANDPS\",\n\tARPL:            \"ARPL\",\n\tBLENDPD:         \"BLENDPD\",\n\tBLENDPS:         \"BLENDPS\",\n\tBLENDVPD:        \"BLENDVPD\",\n\tBLENDVPS:        \"BLENDVPS\",\n\tBOUND:           \"BOUND\",\n\tBSF:             \"BSF\",\n\tBSR:             \"BSR\",\n\tBSWAP:           \"BSWAP\",\n\tBT:              \"BT\",\n\tBTC:             \"BTC\",\n\tBTR:             \"BTR\",\n\tBTS:             \"BTS\",\n\tCALL:            \"CALL\",\n\tCBW:             \"CBW\",\n\tCDQ:             \"CDQ\",\n\tCDQE:            \"CDQE\",\n\tCLC:             \"CLC\",\n\tCLD:             \"CLD\",\n\tCLFLUSH:         \"CLFLUSH\",\n\tCLI:             \"CLI\",\n\tCLTS:            \"CLTS\",\n\tCMC:             \"CMC\",\n\tCMOVA:           \"CMOVA\",\n\tCMOVAE:          \"CMOVAE\",\n\tCMOVB:           \"CMOVB\",\n\tCMOVBE:          \"CMOVBE\",\n\tCMOVE:           \"CMOVE\",\n\tCMOVG:           \"CMOVG\",\n\tCMOVGE:          \"CMOVGE\",\n\tCMOVL:           \"CMOVL\",\n\tCMOVLE:          \"CMOVLE\",\n\tCMOVNE:          \"CMOVNE\",\n\tCMOVNO:          \"CMOVNO\",\n\tCMOVNP:          \"CMOVNP\",\n\tCMOVNS:          \"CMOVNS\",\n\tCMOVO:           \"CMOVO\",\n\tCMOVP:           \"CMOVP\",\n\tCMOVS:           \"CMOVS\",\n\tCMP:             \"CMP\",\n\tCMPPD:           \"CMPPD\",\n\tCMPPS:           \"CMPPS\",\n\tCMPSB:           \"CMPSB\",\n\tCMPSD:           \"CMPSD\",\n\tCMPSD_XMM:       \"CMPSD_XMM\",\n\tCMPSQ:           \"CMPSQ\",\n\tCMPSS:           \"CMPSS\",\n\tCMPSW:           \"CMPSW\",\n\tCMPXCHG:         \"CMPXCHG\",\n\tCMPXCHG16B:      \"CMPXCHG16B\",\n\tCMPXCHG8B:       \"CMPXCHG8B\",\n\tCOMISD:          \"COMISD\",\n\tCOMISS:          \"COMISS\",\n\tCPUID:           \"CPUID\",\n\tCQO:             \"CQO\",\n\tCRC32:           \"CRC32\",\n\tCVTDQ2PD:        \"CVTDQ2PD\",\n\tCVTDQ2PS:        \"CVTDQ2PS\",\n\tCVTPD2DQ:        \"CVTPD2DQ\",\n\tCVTPD2PI:        \"CVTPD2PI\",\n\tCVTPD2PS:        \"CVTPD2PS\",\n\tCVTPI2PD:        \"CVTPI2PD\",\n\tCVTPI2PS:        \"CVTPI2PS\",\n\tCVTPS2DQ:        \"CVTPS2DQ\",\n\tCVTPS2PD:        \"CVTPS2PD\",\n\tCVTPS2PI:        \"CVTPS2PI\",\n\tCVTSD2SI:        \"CVTSD2SI\",\n\tCVTSD2SS:        \"CVTSD2SS\",\n\tCVTSI2SD:        \"CVTSI2SD\",\n\tCVTSI2SS:        \"CVTSI2SS\",\n\tCVTSS2SD:        \"CVTSS2SD\",\n\tCVTSS2SI:        \"CVTSS2SI\",\n\tCVTTPD2DQ:       \"CVTTPD2DQ\",\n\tCVTTPD2PI:       \"CVTTPD2PI\",\n\tCVTTPS2DQ:       \"CVTTPS2DQ\",\n\tCVTTPS2PI:       \"CVTTPS2PI\",\n\tCVTTSD2SI:       \"CVTTSD2SI\",\n\tCVTTSS2SI:       \"CVTTSS2SI\",\n\tCWD:             \"CWD\",\n\tCWDE:            \"CWDE\",\n\tDAA:             \"DAA\",\n\tDAS:             \"DAS\",\n\tDEC:             \"DEC\",\n\tDIV:             \"DIV\",\n\tDIVPD:           \"DIVPD\",\n\tDIVPS:           \"DIVPS\",\n\tDIVSD:           \"DIVSD\",\n\tDIVSS:           \"DIVSS\",\n\tDPPD:            \"DPPD\",\n\tDPPS:            \"DPPS\",\n\tEMMS:            \"EMMS\",\n\tENTER:           \"ENTER\",\n\tEXTRACTPS:       \"EXTRACTPS\",\n\tF2XM1:           \"F2XM1\",\n\tFABS:            \"FABS\",\n\tFADD:            \"FADD\",\n\tFADDP:           \"FADDP\",\n\tFBLD:            \"FBLD\",\n\tFBSTP:           \"FBSTP\",\n\tFCHS:            \"FCHS\",\n\tFCMOVB:          \"FCMOVB\",\n\tFCMOVBE:         \"FCMOVBE\",\n\tFCMOVE:          \"FCMOVE\",\n\tFCMOVNB:         \"FCMOVNB\",\n\tFCMOVNBE:        \"FCMOVNBE\",\n\tFCMOVNE:         \"FCMOVNE\",\n\tFCMOVNU:         \"FCMOVNU\",\n\tFCMOVU:          \"FCMOVU\",\n\tFCOM:            \"FCOM\",\n\tFCOMI:           \"FCOMI\",\n\tFCOMIP:          \"FCOMIP\",\n\tFCOMP:           \"FCOMP\",\n\tFCOMPP:          \"FCOMPP\",\n\tFCOS:            \"FCOS\",\n\tFDECSTP:         \"FDECSTP\",\n\tFDIV:            \"FDIV\",\n\tFDIVP:           \"FDIVP\",\n\tFDIVR:           \"FDIVR\",\n\tFDIVRP:          \"FDIVRP\",\n\tFFREE:           \"FFREE\",\n\tFFREEP:          \"FFREEP\",\n\tFIADD:           \"FIADD\",\n\tFICOM:           \"FICOM\",\n\tFICOMP:          \"FICOMP\",\n\tFIDIV:           \"FIDIV\",\n\tFIDIVR:          \"FIDIVR\",\n\tFILD:            \"FILD\",\n\tFIMUL:           \"FIMUL\",\n\tFINCSTP:         \"FINCSTP\",\n\tFIST:            \"FIST\",\n\tFISTP:           \"FISTP\",\n\tFISTTP:          \"FISTTP\",\n\tFISUB:           \"FISUB\",\n\tFISUBR:          \"FISUBR\",\n\tFLD:             \"FLD\",\n\tFLD1:            \"FLD1\",\n\tFLDCW:           \"FLDCW\",\n\tFLDENV:          \"FLDENV\",\n\tFLDL2E:          \"FLDL2E\",\n\tFLDL2T:          \"FLDL2T\",\n\tFLDLG2:          \"FLDLG2\",\n\tFLDLN2:          \"FLDLN2\",\n\tFLDPI:           \"FLDPI\",\n\tFLDZ:            \"FLDZ\",\n\tFMUL:            \"FMUL\",\n\tFMULP:           \"FMULP\",\n\tFNCLEX:          \"FNCLEX\",\n\tFNINIT:          \"FNINIT\",\n\tFNOP:            \"FNOP\",\n\tFNSAVE:          \"FNSAVE\",\n\tFNSTCW:          \"FNSTCW\",\n\tFNSTENV:         \"FNSTENV\",\n\tFNSTSW:          \"FNSTSW\",\n\tFPATAN:          \"FPATAN\",\n\tFPREM:           \"FPREM\",\n\tFPREM1:          \"FPREM1\",\n\tFPTAN:           \"FPTAN\",\n\tFRNDINT:         \"FRNDINT\",\n\tFRSTOR:          \"FRSTOR\",\n\tFSCALE:          \"FSCALE\",\n\tFSIN:            \"FSIN\",\n\tFSINCOS:         \"FSINCOS\",\n\tFSQRT:           \"FSQRT\",\n\tFST:             \"FST\",\n\tFSTP:            \"FSTP\",\n\tFSUB:            \"FSUB\",\n\tFSUBP:           \"FSUBP\",\n\tFSUBR:           \"FSUBR\",\n\tFSUBRP:          \"FSUBRP\",\n\tFTST:            \"FTST\",\n\tFUCOM:           \"FUCOM\",\n\tFUCOMI:          \"FUCOMI\",\n\tFUCOMIP:         \"FUCOMIP\",\n\tFUCOMP:          \"FUCOMP\",\n\tFUCOMPP:         \"FUCOMPP\",\n\tFWAIT:           \"FWAIT\",\n\tFXAM:            \"FXAM\",\n\tFXCH:            \"FXCH\",\n\tFXRSTOR:         \"FXRSTOR\",\n\tFXRSTOR64:       \"FXRSTOR64\",\n\tFXSAVE:          \"FXSAVE\",\n\tFXSAVE64:        \"FXSAVE64\",\n\tFXTRACT:         \"FXTRACT\",\n\tFYL2X:           \"FYL2X\",\n\tFYL2XP1:         \"FYL2XP1\",\n\tHADDPD:          \"HADDPD\",\n\tHADDPS:          \"HADDPS\",\n\tHLT:             \"HLT\",\n\tHSUBPD:          \"HSUBPD\",\n\tHSUBPS:          \"HSUBPS\",\n\tICEBP:           \"ICEBP\",\n\tIDIV:            \"IDIV\",\n\tIMUL:            \"IMUL\",\n\tIN:              \"IN\",\n\tINC:             \"INC\",\n\tINSB:            \"INSB\",\n\tINSD:            \"INSD\",\n\tINSERTPS:        \"INSERTPS\",\n\tINSW:            \"INSW\",\n\tINT:             \"INT\",\n\tINTO:            \"INTO\",\n\tINVD:            \"INVD\",\n\tINVLPG:          \"INVLPG\",\n\tINVPCID:         \"INVPCID\",\n\tIRET:            \"IRET\",\n\tIRETD:           \"IRETD\",\n\tIRETQ:           \"IRETQ\",\n\tJA:              \"JA\",\n\tJAE:             \"JAE\",\n\tJB:              \"JB\",\n\tJBE:             \"JBE\",\n\tJCXZ:            \"JCXZ\",\n\tJE:              \"JE\",\n\tJECXZ:           \"JECXZ\",\n\tJG:              \"JG\",\n\tJGE:             \"JGE\",\n\tJL:              \"JL\",\n\tJLE:             \"JLE\",\n\tJMP:             \"JMP\",\n\tJNE:             \"JNE\",\n\tJNO:             \"JNO\",\n\tJNP:             \"JNP\",\n\tJNS:             \"JNS\",\n\tJO:              \"JO\",\n\tJP:              \"JP\",\n\tJRCXZ:           \"JRCXZ\",\n\tJS:              \"JS\",\n\tLAHF:            \"LAHF\",\n\tLAR:             \"LAR\",\n\tLCALL:           \"LCALL\",\n\tLDDQU:           \"LDDQU\",\n\tLDMXCSR:         \"LDMXCSR\",\n\tLDS:             \"LDS\",\n\tLEA:             \"LEA\",\n\tLEAVE:           \"LEAVE\",\n\tLES:             \"LES\",\n\tLFENCE:          \"LFENCE\",\n\tLFS:             \"LFS\",\n\tLGDT:            \"LGDT\",\n\tLGS:             \"LGS\",\n\tLIDT:            \"LIDT\",\n\tLJMP:            \"LJMP\",\n\tLLDT:            \"LLDT\",\n\tLMSW:            \"LMSW\",\n\tLODSB:           \"LODSB\",\n\tLODSD:           \"LODSD\",\n\tLODSQ:           \"LODSQ\",\n\tLODSW:           \"LODSW\",\n\tLOOP:            \"LOOP\",\n\tLOOPE:           \"LOOPE\",\n\tLOOPNE:          \"LOOPNE\",\n\tLRET:            \"LRET\",\n\tLSL:             \"LSL\",\n\tLSS:             \"LSS\",\n\tLTR:             \"LTR\",\n\tLZCNT:           \"LZCNT\",\n\tMASKMOVDQU:      \"MASKMOVDQU\",\n\tMASKMOVQ:        \"MASKMOVQ\",\n\tMAXPD:           \"MAXPD\",\n\tMAXPS:           \"MAXPS\",\n\tMAXSD:           \"MAXSD\",\n\tMAXSS:           \"MAXSS\",\n\tMFENCE:          \"MFENCE\",\n\tMINPD:           \"MINPD\",\n\tMINPS:           \"MINPS\",\n\tMINSD:           \"MINSD\",\n\tMINSS:           \"MINSS\",\n\tMONITOR:         \"MONITOR\",\n\tMOV:             \"MOV\",\n\tMOVAPD:          \"MOVAPD\",\n\tMOVAPS:          \"MOVAPS\",\n\tMOVBE:           \"MOVBE\",\n\tMOVD:            \"MOVD\",\n\tMOVDDUP:         \"MOVDDUP\",\n\tMOVDQ2Q:         \"MOVDQ2Q\",\n\tMOVDQA:          \"MOVDQA\",\n\tMOVDQU:          \"MOVDQU\",\n\tMOVHLPS:         \"MOVHLPS\",\n\tMOVHPD:          \"MOVHPD\",\n\tMOVHPS:          \"MOVHPS\",\n\tMOVLHPS:         \"MOVLHPS\",\n\tMOVLPD:          \"MOVLPD\",\n\tMOVLPS:          \"MOVLPS\",\n\tMOVMSKPD:        \"MOVMSKPD\",\n\tMOVMSKPS:        \"MOVMSKPS\",\n\tMOVNTDQ:         \"MOVNTDQ\",\n\tMOVNTDQA:        \"MOVNTDQA\",\n\tMOVNTI:          \"MOVNTI\",\n\tMOVNTPD:         \"MOVNTPD\",\n\tMOVNTPS:         \"MOVNTPS\",\n\tMOVNTQ:          \"MOVNTQ\",\n\tMOVNTSD:         \"MOVNTSD\",\n\tMOVNTSS:         \"MOVNTSS\",\n\tMOVQ:            \"MOVQ\",\n\tMOVQ2DQ:         \"MOVQ2DQ\",\n\tMOVSB:           \"MOVSB\",\n\tMOVSD:           \"MOVSD\",\n\tMOVSD_XMM:       \"MOVSD_XMM\",\n\tMOVSHDUP:        \"MOVSHDUP\",\n\tMOVSLDUP:        \"MOVSLDUP\",\n\tMOVSQ:           \"MOVSQ\",\n\tMOVSS:           \"MOVSS\",\n\tMOVSW:           \"MOVSW\",\n\tMOVSX:           \"MOVSX\",\n\tMOVSXD:          \"MOVSXD\",\n\tMOVUPD:          \"MOVUPD\",\n\tMOVUPS:          \"MOVUPS\",\n\tMOVZX:           \"MOVZX\",\n\tMPSADBW:         \"MPSADBW\",\n\tMUL:             \"MUL\",\n\tMULPD:           \"MULPD\",\n\tMULPS:           \"MULPS\",\n\tMULSD:           \"MULSD\",\n\tMULSS:           \"MULSS\",\n\tMWAIT:           \"MWAIT\",\n\tNEG:             \"NEG\",\n\tNOP:             \"NOP\",\n\tNOT:             \"NOT\",\n\tOR:              \"OR\",\n\tORPD:            \"ORPD\",\n\tORPS:            \"ORPS\",\n\tOUT:             \"OUT\",\n\tOUTSB:           \"OUTSB\",\n\tOUTSD:           \"OUTSD\",\n\tOUTSW:           \"OUTSW\",\n\tPABSB:           \"PABSB\",\n\tPABSD:           \"PABSD\",\n\tPABSW:           \"PABSW\",\n\tPACKSSDW:        \"PACKSSDW\",\n\tPACKSSWB:        \"PACKSSWB\",\n\tPACKUSDW:        \"PACKUSDW\",\n\tPACKUSWB:        \"PACKUSWB\",\n\tPADDB:           \"PADDB\",\n\tPADDD:           \"PADDD\",\n\tPADDQ:           \"PADDQ\",\n\tPADDSB:          \"PADDSB\",\n\tPADDSW:          \"PADDSW\",\n\tPADDUSB:         \"PADDUSB\",\n\tPADDUSW:         \"PADDUSW\",\n\tPADDW:           \"PADDW\",\n\tPALIGNR:         \"PALIGNR\",\n\tPAND:            \"PAND\",\n\tPANDN:           \"PANDN\",\n\tPAUSE:           \"PAUSE\",\n\tPAVGB:           \"PAVGB\",\n\tPAVGW:           \"PAVGW\",\n\tPBLENDVB:        \"PBLENDVB\",\n\tPBLENDW:         \"PBLENDW\",\n\tPCLMULQDQ:       \"PCLMULQDQ\",\n\tPCMPEQB:         \"PCMPEQB\",\n\tPCMPEQD:         \"PCMPEQD\",\n\tPCMPEQQ:         \"PCMPEQQ\",\n\tPCMPEQW:         \"PCMPEQW\",\n\tPCMPESTRI:       \"PCMPESTRI\",\n\tPCMPESTRM:       \"PCMPESTRM\",\n\tPCMPGTB:         \"PCMPGTB\",\n\tPCMPGTD:         \"PCMPGTD\",\n\tPCMPGTQ:         \"PCMPGTQ\",\n\tPCMPGTW:         \"PCMPGTW\",\n\tPCMPISTRI:       \"PCMPISTRI\",\n\tPCMPISTRM:       \"PCMPISTRM\",\n\tPEXTRB:          \"PEXTRB\",\n\tPEXTRD:          \"PEXTRD\",\n\tPEXTRQ:          \"PEXTRQ\",\n\tPEXTRW:          \"PEXTRW\",\n\tPHADDD:          \"PHADDD\",\n\tPHADDSW:         \"PHADDSW\",\n\tPHADDW:          \"PHADDW\",\n\tPHMINPOSUW:      \"PHMINPOSUW\",\n\tPHSUBD:          \"PHSUBD\",\n\tPHSUBSW:         \"PHSUBSW\",\n\tPHSUBW:          \"PHSUBW\",\n\tPINSRB:          \"PINSRB\",\n\tPINSRD:          \"PINSRD\",\n\tPINSRQ:          \"PINSRQ\",\n\tPINSRW:          \"PINSRW\",\n\tPMADDUBSW:       \"PMADDUBSW\",\n\tPMADDWD:         \"PMADDWD\",\n\tPMAXSB:          \"PMAXSB\",\n\tPMAXSD:          \"PMAXSD\",\n\tPMAXSW:          \"PMAXSW\",\n\tPMAXUB:          \"PMAXUB\",\n\tPMAXUD:          \"PMAXUD\",\n\tPMAXUW:          \"PMAXUW\",\n\tPMINSB:          \"PMINSB\",\n\tPMINSD:          \"PMINSD\",\n\tPMINSW:          \"PMINSW\",\n\tPMINUB:          \"PMINUB\",\n\tPMINUD:          \"PMINUD\",\n\tPMINUW:          \"PMINUW\",\n\tPMOVMSKB:        \"PMOVMSKB\",\n\tPMOVSXBD:        \"PMOVSXBD\",\n\tPMOVSXBQ:        \"PMOVSXBQ\",\n\tPMOVSXBW:        \"PMOVSXBW\",\n\tPMOVSXDQ:        \"PMOVSXDQ\",\n\tPMOVSXWD:        \"PMOVSXWD\",\n\tPMOVSXWQ:        \"PMOVSXWQ\",\n\tPMOVZXBD:        \"PMOVZXBD\",\n\tPMOVZXBQ:        \"PMOVZXBQ\",\n\tPMOVZXBW:        \"PMOVZXBW\",\n\tPMOVZXDQ:        \"PMOVZXDQ\",\n\tPMOVZXWD:        \"PMOVZXWD\",\n\tPMOVZXWQ:        \"PMOVZXWQ\",\n\tPMULDQ:          \"PMULDQ\",\n\tPMULHRSW:        \"PMULHRSW\",\n\tPMULHUW:         \"PMULHUW\",\n\tPMULHW:          \"PMULHW\",\n\tPMULLD:          \"PMULLD\",\n\tPMULLW:          \"PMULLW\",\n\tPMULUDQ:         \"PMULUDQ\",\n\tPOP:             \"POP\",\n\tPOPA:            \"POPA\",\n\tPOPAD:           \"POPAD\",\n\tPOPCNT:          \"POPCNT\",\n\tPOPF:            \"POPF\",\n\tPOPFD:           \"POPFD\",\n\tPOPFQ:           \"POPFQ\",\n\tPOR:             \"POR\",\n\tPREFETCHNTA:     \"PREFETCHNTA\",\n\tPREFETCHT0:      \"PREFETCHT0\",\n\tPREFETCHT1:      \"PREFETCHT1\",\n\tPREFETCHT2:      \"PREFETCHT2\",\n\tPREFETCHW:       \"PREFETCHW\",\n\tPSADBW:          \"PSADBW\",\n\tPSHUFB:          \"PSHUFB\",\n\tPSHUFD:          \"PSHUFD\",\n\tPSHUFHW:         \"PSHUFHW\",\n\tPSHUFLW:         \"PSHUFLW\",\n\tPSHUFW:          \"PSHUFW\",\n\tPSIGNB:          \"PSIGNB\",\n\tPSIGND:          \"PSIGND\",\n\tPSIGNW:          \"PSIGNW\",\n\tPSLLD:           \"PSLLD\",\n\tPSLLDQ:          \"PSLLDQ\",\n\tPSLLQ:           \"PSLLQ\",\n\tPSLLW:           \"PSLLW\",\n\tPSRAD:           \"PSRAD\",\n\tPSRAW:           \"PSRAW\",\n\tPSRLD:           \"PSRLD\",\n\tPSRLDQ:          \"PSRLDQ\",\n\tPSRLQ:           \"PSRLQ\",\n\tPSRLW:           \"PSRLW\",\n\tPSUBB:           \"PSUBB\",\n\tPSUBD:           \"PSUBD\",\n\tPSUBQ:           \"PSUBQ\",\n\tPSUBSB:          \"PSUBSB\",\n\tPSUBSW:          \"PSUBSW\",\n\tPSUBUSB:         \"PSUBUSB\",\n\tPSUBUSW:         \"PSUBUSW\",\n\tPSUBW:           \"PSUBW\",\n\tPTEST:           \"PTEST\",\n\tPUNPCKHBW:       \"PUNPCKHBW\",\n\tPUNPCKHDQ:       \"PUNPCKHDQ\",\n\tPUNPCKHQDQ:      \"PUNPCKHQDQ\",\n\tPUNPCKHWD:       \"PUNPCKHWD\",\n\tPUNPCKLBW:       \"PUNPCKLBW\",\n\tPUNPCKLDQ:       \"PUNPCKLDQ\",\n\tPUNPCKLQDQ:      \"PUNPCKLQDQ\",\n\tPUNPCKLWD:       \"PUNPCKLWD\",\n\tPUSH:            \"PUSH\",\n\tPUSHA:           \"PUSHA\",\n\tPUSHAD:          \"PUSHAD\",\n\tPUSHF:           \"PUSHF\",\n\tPUSHFD:          \"PUSHFD\",\n\tPUSHFQ:          \"PUSHFQ\",\n\tPXOR:            \"PXOR\",\n\tRCL:             \"RCL\",\n\tRCPPS:           \"RCPPS\",\n\tRCPSS:           \"RCPSS\",\n\tRCR:             \"RCR\",\n\tRDFSBASE:        \"RDFSBASE\",\n\tRDGSBASE:        \"RDGSBASE\",\n\tRDMSR:           \"RDMSR\",\n\tRDPMC:           \"RDPMC\",\n\tRDRAND:          \"RDRAND\",\n\tRDTSC:           \"RDTSC\",\n\tRDTSCP:          \"RDTSCP\",\n\tRET:             \"RET\",\n\tROL:             \"ROL\",\n\tROR:             \"ROR\",\n\tROUNDPD:         \"ROUNDPD\",\n\tROUNDPS:         \"ROUNDPS\",\n\tROUNDSD:         \"ROUNDSD\",\n\tROUNDSS:         \"ROUNDSS\",\n\tRSM:             \"RSM\",\n\tRSQRTPS:         \"RSQRTPS\",\n\tRSQRTSS:         \"RSQRTSS\",\n\tSAHF:            \"SAHF\",\n\tSAR:             \"SAR\",\n\tSBB:             \"SBB\",\n\tSCASB:           \"SCASB\",\n\tSCASD:           \"SCASD\",\n\tSCASQ:           \"SCASQ\",\n\tSCASW:           \"SCASW\",\n\tSETA:            \"SETA\",\n\tSETAE:           \"SETAE\",\n\tSETB:            \"SETB\",\n\tSETBE:           \"SETBE\",\n\tSETE:            \"SETE\",\n\tSETG:            \"SETG\",\n\tSETGE:           \"SETGE\",\n\tSETL:            \"SETL\",\n\tSETLE:           \"SETLE\",\n\tSETNE:           \"SETNE\",\n\tSETNO:           \"SETNO\",\n\tSETNP:           \"SETNP\",\n\tSETNS:           \"SETNS\",\n\tSETO:            \"SETO\",\n\tSETP:            \"SETP\",\n\tSETS:            \"SETS\",\n\tSFENCE:          \"SFENCE\",\n\tSGDT:            \"SGDT\",\n\tSHL:             \"SHL\",\n\tSHLD:            \"SHLD\",\n\tSHR:             \"SHR\",\n\tSHRD:            \"SHRD\",\n\tSHUFPD:          \"SHUFPD\",\n\tSHUFPS:          \"SHUFPS\",\n\tSIDT:            \"SIDT\",\n\tSLDT:            \"SLDT\",\n\tSMSW:            \"SMSW\",\n\tSQRTPD:          \"SQRTPD\",\n\tSQRTPS:          \"SQRTPS\",\n\tSQRTSD:          \"SQRTSD\",\n\tSQRTSS:          \"SQRTSS\",\n\tSTC:             \"STC\",\n\tSTD:             \"STD\",\n\tSTI:             \"STI\",\n\tSTMXCSR:         \"STMXCSR\",\n\tSTOSB:           \"STOSB\",\n\tSTOSD:           \"STOSD\",\n\tSTOSQ:           \"STOSQ\",\n\tSTOSW:           \"STOSW\",\n\tSTR:             \"STR\",\n\tSUB:             \"SUB\",\n\tSUBPD:           \"SUBPD\",\n\tSUBPS:           \"SUBPS\",\n\tSUBSD:           \"SUBSD\",\n\tSUBSS:           \"SUBSS\",\n\tSWAPGS:          \"SWAPGS\",\n\tSYSCALL:         \"SYSCALL\",\n\tSYSENTER:        \"SYSENTER\",\n\tSYSEXIT:         \"SYSEXIT\",\n\tSYSRET:          \"SYSRET\",\n\tTEST:            \"TEST\",\n\tTZCNT:           \"TZCNT\",\n\tUCOMISD:         \"UCOMISD\",\n\tUCOMISS:         \"UCOMISS\",\n\tUD0:             \"UD0\",\n\tUD1:             \"UD1\",\n\tUD2:             \"UD2\",\n\tUNPCKHPD:        \"UNPCKHPD\",\n\tUNPCKHPS:        \"UNPCKHPS\",\n\tUNPCKLPD:        \"UNPCKLPD\",\n\tUNPCKLPS:        \"UNPCKLPS\",\n\tVERR:            \"VERR\",\n\tVERW:            \"VERW\",\n\tVMOVDQA:         \"VMOVDQA\",\n\tVMOVDQU:         \"VMOVDQU\",\n\tVMOVNTDQ:        \"VMOVNTDQ\",\n\tVMOVNTDQA:       \"VMOVNTDQA\",\n\tVZEROUPPER:      \"VZEROUPPER\",\n\tWBINVD:          \"WBINVD\",\n\tWRFSBASE:        \"WRFSBASE\",\n\tWRGSBASE:        \"WRGSBASE\",\n\tWRMSR:           \"WRMSR\",\n\tXABORT:          \"XABORT\",\n\tXADD:            \"XADD\",\n\tXBEGIN:          \"XBEGIN\",\n\tXCHG:            \"XCHG\",\n\tXEND:            \"XEND\",\n\tXGETBV:          \"XGETBV\",\n\tXLATB:           \"XLATB\",\n\tXOR:             \"XOR\",\n\tXORPD:           \"XORPD\",\n\tXORPS:           \"XORPS\",\n\tXRSTOR:          \"XRSTOR\",\n\tXRSTOR64:        \"XRSTOR64\",\n\tXRSTORS:         \"XRSTORS\",\n\tXRSTORS64:       \"XRSTORS64\",\n\tXSAVE:           \"XSAVE\",\n\tXSAVE64:         \"XSAVE64\",\n\tXSAVEC:          \"XSAVEC\",\n\tXSAVEC64:        \"XSAVEC64\",\n\tXSAVEOPT:        \"XSAVEOPT\",\n\tXSAVEOPT64:      \"XSAVEOPT64\",\n\tXSAVES:          \"XSAVES\",\n\tXSAVES64:        \"XSAVES64\",\n\tXSETBV:          \"XSETBV\",\n\tXTEST:           \"XTEST\",\n}\n"
  },
  {
    "path": "vendor/golang.org/x/exp/LICENSE",
    "content": "Copyright (c) 2009 The Go Authors. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google Inc. nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/exp/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/exp/constraints/constraints.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package constraints defines a set of useful constraints to be used\n// with type parameters.\npackage constraints\n\n// Signed is a constraint that permits any signed integer type.\n// If future releases of Go add new predeclared signed integer types,\n// this constraint will be modified to include them.\ntype Signed interface {\n\t~int | ~int8 | ~int16 | ~int32 | ~int64\n}\n\n// Unsigned is a constraint that permits any unsigned integer type.\n// If future releases of Go add new predeclared unsigned integer types,\n// this constraint will be modified to include them.\ntype Unsigned interface {\n\t~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr\n}\n\n// Integer is a constraint that permits any integer type.\n// If future releases of Go add new predeclared integer types,\n// this constraint will be modified to include them.\ntype Integer interface {\n\tSigned | Unsigned\n}\n\n// Float is a constraint that permits any floating-point type.\n// If future releases of Go add new predeclared floating-point types,\n// this constraint will be modified to include them.\ntype Float interface {\n\t~float32 | ~float64\n}\n\n// Complex is a constraint that permits any complex numeric type.\n// If future releases of Go add new predeclared complex numeric types,\n// this constraint will be modified to include them.\ntype Complex interface {\n\t~complex64 | ~complex128\n}\n\n// Ordered is a constraint that permits any ordered type: any type\n// that supports the operators < <= >= >.\n// If future releases of Go add new ordered types,\n// this constraint will be modified to include them.\ntype Ordered interface {\n\tInteger | Float | ~string\n}\n"
  },
  {
    "path": "vendor/golang.org/x/exp/maps/maps.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package maps defines various functions useful with maps of any type.\npackage maps\n\n// Keys returns the keys of the map m.\n// The keys will be in an indeterminate order.\nfunc Keys[M ~map[K]V, K comparable, V any](m M) []K {\n\tr := make([]K, 0, len(m))\n\tfor k := range m {\n\t\tr = append(r, k)\n\t}\n\treturn r\n}\n\n// Values returns the values of the map m.\n// The values will be in an indeterminate order.\nfunc Values[M ~map[K]V, K comparable, V any](m M) []V {\n\tr := make([]V, 0, len(m))\n\tfor _, v := range m {\n\t\tr = append(r, v)\n\t}\n\treturn r\n}\n\n// Equal reports whether two maps contain the same key/value pairs.\n// Values are compared using ==.\nfunc Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool {\n\tif len(m1) != len(m2) {\n\t\treturn false\n\t}\n\tfor k, v1 := range m1 {\n\t\tif v2, ok := m2[k]; !ok || v1 != v2 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// EqualFunc is like Equal, but compares values using eq.\n// Keys are still compared with ==.\nfunc EqualFunc[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool {\n\tif len(m1) != len(m2) {\n\t\treturn false\n\t}\n\tfor k, v1 := range m1 {\n\t\tif v2, ok := m2[k]; !ok || !eq(v1, v2) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Clear removes all entries from m, leaving it empty.\nfunc Clear[M ~map[K]V, K comparable, V any](m M) {\n\tfor k := range m {\n\t\tdelete(m, k)\n\t}\n}\n\n// Clone returns a copy of m.  This is a shallow clone:\n// the new keys and values are set using ordinary assignment.\nfunc Clone[M ~map[K]V, K comparable, V any](m M) M {\n\t// Preserve nil in case it matters.\n\tif m == nil {\n\t\treturn nil\n\t}\n\tr := make(M, len(m))\n\tfor k, v := range m {\n\t\tr[k] = v\n\t}\n\treturn r\n}\n\n// Copy copies all key/value pairs in src adding them to dst.\n// When a key in src is already present in dst,\n// the value in dst will be overwritten by the value associated\n// with the key in src.\nfunc Copy[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2) {\n\tfor k, v := range src {\n\t\tdst[k] = v\n\t}\n}\n\n// DeleteFunc deletes any key/value pairs from m for which del returns true.\nfunc DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool) {\n\tfor k, v := range m {\n\t\tif del(k, v) {\n\t\t\tdelete(m, k)\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/exp/slices/slices.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package slices defines various functions useful with slices of any type.\n// Unless otherwise specified, these functions all apply to the elements\n// of a slice at index 0 <= i < len(s).\n//\n// Note that the less function in IsSortedFunc, SortFunc, SortStableFunc requires a\n// strict weak ordering (https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings),\n// or the sorting may fail to sort correctly. A common case is when sorting slices of\n// floating-point numbers containing NaN values.\npackage slices\n\nimport \"golang.org/x/exp/constraints\"\n\n// Equal reports whether two slices are equal: the same length and all\n// elements equal. If the lengths are different, Equal returns false.\n// Otherwise, the elements are compared in increasing index order, and the\n// comparison stops at the first unequal pair.\n// Floating point NaNs are not considered equal.\nfunc Equal[E comparable](s1, s2 []E) bool {\n\tif len(s1) != len(s2) {\n\t\treturn false\n\t}\n\tfor i := range s1 {\n\t\tif s1[i] != s2[i] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// EqualFunc reports whether two slices are equal using a comparison\n// function on each pair of elements. If the lengths are different,\n// EqualFunc returns false. Otherwise, the elements are compared in\n// increasing index order, and the comparison stops at the first index\n// for which eq returns false.\nfunc EqualFunc[E1, E2 any](s1 []E1, s2 []E2, eq func(E1, E2) bool) bool {\n\tif len(s1) != len(s2) {\n\t\treturn false\n\t}\n\tfor i, v1 := range s1 {\n\t\tv2 := s2[i]\n\t\tif !eq(v1, v2) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Compare compares the elements of s1 and s2.\n// The elements are compared sequentially, starting at index 0,\n// until one element is not equal to the other.\n// The result of comparing the first non-matching elements is returned.\n// If both slices are equal until one of them ends, the shorter slice is\n// considered less than the longer one.\n// The result is 0 if s1 == s2, -1 if s1 < s2, and +1 if s1 > s2.\n// Comparisons involving floating point NaNs are ignored.\nfunc Compare[E constraints.Ordered](s1, s2 []E) int {\n\ts2len := len(s2)\n\tfor i, v1 := range s1 {\n\t\tif i >= s2len {\n\t\t\treturn +1\n\t\t}\n\t\tv2 := s2[i]\n\t\tswitch {\n\t\tcase v1 < v2:\n\t\t\treturn -1\n\t\tcase v1 > v2:\n\t\t\treturn +1\n\t\t}\n\t}\n\tif len(s1) < s2len {\n\t\treturn -1\n\t}\n\treturn 0\n}\n\n// CompareFunc is like Compare but uses a comparison function\n// on each pair of elements. The elements are compared in increasing\n// index order, and the comparisons stop after the first time cmp\n// returns non-zero.\n// The result is the first non-zero result of cmp; if cmp always\n// returns 0 the result is 0 if len(s1) == len(s2), -1 if len(s1) < len(s2),\n// and +1 if len(s1) > len(s2).\nfunc CompareFunc[E1, E2 any](s1 []E1, s2 []E2, cmp func(E1, E2) int) int {\n\ts2len := len(s2)\n\tfor i, v1 := range s1 {\n\t\tif i >= s2len {\n\t\t\treturn +1\n\t\t}\n\t\tv2 := s2[i]\n\t\tif c := cmp(v1, v2); c != 0 {\n\t\t\treturn c\n\t\t}\n\t}\n\tif len(s1) < s2len {\n\t\treturn -1\n\t}\n\treturn 0\n}\n\n// Index returns the index of the first occurrence of v in s,\n// or -1 if not present.\nfunc Index[E comparable](s []E, v E) int {\n\tfor i, vs := range s {\n\t\tif v == vs {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// IndexFunc returns the first index i satisfying f(s[i]),\n// or -1 if none do.\nfunc IndexFunc[E any](s []E, f func(E) bool) int {\n\tfor i, v := range s {\n\t\tif f(v) {\n\t\t\treturn i\n\t\t}\n\t}\n\treturn -1\n}\n\n// Contains reports whether v is present in s.\nfunc Contains[E comparable](s []E, v E) bool {\n\treturn Index(s, v) >= 0\n}\n\n// ContainsFunc reports whether at least one\n// element e of s satisfies f(e).\nfunc ContainsFunc[E any](s []E, f func(E) bool) bool {\n\treturn IndexFunc(s, f) >= 0\n}\n\n// Insert inserts the values v... into s at index i,\n// returning the modified slice.\n// In the returned slice r, r[i] == v[0].\n// Insert panics if i is out of range.\n// This function is O(len(s) + len(v)).\nfunc Insert[S ~[]E, E any](s S, i int, v ...E) S {\n\ttot := len(s) + len(v)\n\tif tot <= cap(s) {\n\t\ts2 := s[:tot]\n\t\tcopy(s2[i+len(v):], s[i:])\n\t\tcopy(s2[i:], v)\n\t\treturn s2\n\t}\n\ts2 := make(S, tot)\n\tcopy(s2, s[:i])\n\tcopy(s2[i:], v)\n\tcopy(s2[i+len(v):], s[i:])\n\treturn s2\n}\n\n// Delete removes the elements s[i:j] from s, returning the modified slice.\n// Delete panics if s[i:j] is not a valid slice of s.\n// Delete modifies the contents of the slice s; it does not create a new slice.\n// Delete is O(len(s)-j), so if many items must be deleted, it is better to\n// make a single call deleting them all together than to delete one at a time.\n// Delete might not modify the elements s[len(s)-(j-i):len(s)]. If those\n// elements contain pointers you might consider zeroing those elements so that\n// objects they reference can be garbage collected.\nfunc Delete[S ~[]E, E any](s S, i, j int) S {\n\t_ = s[i:j] // bounds check\n\n\treturn append(s[:i], s[j:]...)\n}\n\n// Replace replaces the elements s[i:j] by the given v, and returns the\n// modified slice. Replace panics if s[i:j] is not a valid slice of s.\nfunc Replace[S ~[]E, E any](s S, i, j int, v ...E) S {\n\t_ = s[i:j] // verify that i:j is a valid subslice\n\ttot := len(s[:i]) + len(v) + len(s[j:])\n\tif tot <= cap(s) {\n\t\ts2 := s[:tot]\n\t\tcopy(s2[i+len(v):], s[j:])\n\t\tcopy(s2[i:], v)\n\t\treturn s2\n\t}\n\ts2 := make(S, tot)\n\tcopy(s2, s[:i])\n\tcopy(s2[i:], v)\n\tcopy(s2[i+len(v):], s[j:])\n\treturn s2\n}\n\n// Clone returns a copy of the slice.\n// The elements are copied using assignment, so this is a shallow clone.\nfunc Clone[S ~[]E, E any](s S) S {\n\t// Preserve nil in case it matters.\n\tif s == nil {\n\t\treturn nil\n\t}\n\treturn append(S([]E{}), s...)\n}\n\n// Compact replaces consecutive runs of equal elements with a single copy.\n// This is like the uniq command found on Unix.\n// Compact modifies the contents of the slice s; it does not create a new slice.\n// When Compact discards m elements in total, it might not modify the elements\n// s[len(s)-m:len(s)]. If those elements contain pointers you might consider\n// zeroing those elements so that objects they reference can be garbage collected.\nfunc Compact[S ~[]E, E comparable](s S) S {\n\tif len(s) < 2 {\n\t\treturn s\n\t}\n\ti := 1\n\tlast := s[0]\n\tfor _, v := range s[1:] {\n\t\tif v != last {\n\t\t\ts[i] = v\n\t\t\ti++\n\t\t\tlast = v\n\t\t}\n\t}\n\treturn s[:i]\n}\n\n// CompactFunc is like Compact but uses a comparison function.\nfunc CompactFunc[S ~[]E, E any](s S, eq func(E, E) bool) S {\n\tif len(s) < 2 {\n\t\treturn s\n\t}\n\ti := 1\n\tlast := s[0]\n\tfor _, v := range s[1:] {\n\t\tif !eq(v, last) {\n\t\t\ts[i] = v\n\t\t\ti++\n\t\t\tlast = v\n\t\t}\n\t}\n\treturn s[:i]\n}\n\n// Grow increases the slice's capacity, if necessary, to guarantee space for\n// another n elements. After Grow(n), at least n elements can be appended\n// to the slice without another allocation. If n is negative or too large to\n// allocate the memory, Grow panics.\nfunc Grow[S ~[]E, E any](s S, n int) S {\n\tif n < 0 {\n\t\tpanic(\"cannot be negative\")\n\t}\n\tif n -= cap(s) - len(s); n > 0 {\n\t\t// TODO(https://go.dev/issue/53888): Make using []E instead of S\n\t\t// to workaround a compiler bug where the runtime.growslice optimization\n\t\t// does not take effect. Revert when the compiler is fixed.\n\t\ts = append([]E(s)[:cap(s)], make([]E, n)...)[:len(s)]\n\t}\n\treturn s\n}\n\n// Clip removes unused capacity from the slice, returning s[:len(s):len(s)].\nfunc Clip[S ~[]E, E any](s S) S {\n\treturn s[:len(s):len(s)]\n}\n"
  },
  {
    "path": "vendor/golang.org/x/exp/slices/sort.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage slices\n\nimport (\n\t\"math/bits\"\n\n\t\"golang.org/x/exp/constraints\"\n)\n\n// Sort sorts a slice of any ordered type in ascending order.\n// Sort may fail to sort correctly when sorting slices of floating-point\n// numbers containing Not-a-number (NaN) values.\n// Use slices.SortFunc(x, func(a, b float64) bool {return a < b || (math.IsNaN(a) && !math.IsNaN(b))})\n// instead if the input may contain NaNs.\nfunc Sort[E constraints.Ordered](x []E) {\n\tn := len(x)\n\tpdqsortOrdered(x, 0, n, bits.Len(uint(n)))\n}\n\n// SortFunc sorts the slice x in ascending order as determined by the less function.\n// This sort is not guaranteed to be stable.\n//\n// SortFunc requires that less is a strict weak ordering.\n// See https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings.\nfunc SortFunc[E any](x []E, less func(a, b E) bool) {\n\tn := len(x)\n\tpdqsortLessFunc(x, 0, n, bits.Len(uint(n)), less)\n}\n\n// SortStableFunc sorts the slice x while keeping the original order of equal\n// elements, using less to compare elements.\nfunc SortStableFunc[E any](x []E, less func(a, b E) bool) {\n\tstableLessFunc(x, len(x), less)\n}\n\n// IsSorted reports whether x is sorted in ascending order.\nfunc IsSorted[E constraints.Ordered](x []E) bool {\n\tfor i := len(x) - 1; i > 0; i-- {\n\t\tif x[i] < x[i-1] {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// IsSortedFunc reports whether x is sorted in ascending order, with less as the\n// comparison function.\nfunc IsSortedFunc[E any](x []E, less func(a, b E) bool) bool {\n\tfor i := len(x) - 1; i > 0; i-- {\n\t\tif less(x[i], x[i-1]) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// BinarySearch searches for target in a sorted slice and returns the position\n// where target is found, or the position where target would appear in the\n// sort order; it also returns a bool saying whether the target is really found\n// in the slice. The slice must be sorted in increasing order.\nfunc BinarySearch[E constraints.Ordered](x []E, target E) (int, bool) {\n\t// Inlining is faster than calling BinarySearchFunc with a lambda.\n\tn := len(x)\n\t// Define x[-1] < target and x[n] >= target.\n\t// Invariant: x[i-1] < target, x[j] >= target.\n\ti, j := 0, n\n\tfor i < j {\n\t\th := int(uint(i+j) >> 1) // avoid overflow when computing h\n\t\t// i ≤ h < j\n\t\tif x[h] < target {\n\t\t\ti = h + 1 // preserves x[i-1] < target\n\t\t} else {\n\t\t\tj = h // preserves x[j] >= target\n\t\t}\n\t}\n\t// i == j, x[i-1] < target, and x[j] (= x[i]) >= target  =>  answer is i.\n\treturn i, i < n && x[i] == target\n}\n\n// BinarySearchFunc works like BinarySearch, but uses a custom comparison\n// function. The slice must be sorted in increasing order, where \"increasing\" is\n// defined by cmp. cmp(a, b) is expected to return an integer comparing the two\n// parameters: 0 if a == b, a negative number if a < b and a positive number if\n// a > b.\nfunc BinarySearchFunc[E, T any](x []E, target T, cmp func(E, T) int) (int, bool) {\n\tn := len(x)\n\t// Define cmp(x[-1], target) < 0 and cmp(x[n], target) >= 0 .\n\t// Invariant: cmp(x[i - 1], target) < 0, cmp(x[j], target) >= 0.\n\ti, j := 0, n\n\tfor i < j {\n\t\th := int(uint(i+j) >> 1) // avoid overflow when computing h\n\t\t// i ≤ h < j\n\t\tif cmp(x[h], target) < 0 {\n\t\t\ti = h + 1 // preserves cmp(x[i - 1], target) < 0\n\t\t} else {\n\t\t\tj = h // preserves cmp(x[j], target) >= 0\n\t\t}\n\t}\n\t// i == j, cmp(x[i-1], target) < 0, and cmp(x[j], target) (= cmp(x[i], target)) >= 0  =>  answer is i.\n\treturn i, i < n && cmp(x[i], target) == 0\n}\n\ntype sortedHint int // hint for pdqsort when choosing the pivot\n\nconst (\n\tunknownHint sortedHint = iota\n\tincreasingHint\n\tdecreasingHint\n)\n\n// xorshift paper: https://www.jstatsoft.org/article/view/v008i14/xorshift.pdf\ntype xorshift uint64\n\nfunc (r *xorshift) Next() uint64 {\n\t*r ^= *r << 13\n\t*r ^= *r >> 17\n\t*r ^= *r << 5\n\treturn uint64(*r)\n}\n\nfunc nextPowerOfTwo(length int) uint {\n\treturn 1 << bits.Len(uint(length))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/exp/slices/zsortfunc.go",
    "content": "// Code generated by gen_sort_variants.go; DO NOT EDIT.\n\n// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage slices\n\n// insertionSortLessFunc sorts data[a:b] using insertion sort.\nfunc insertionSortLessFunc[E any](data []E, a, b int, less func(a, b E) bool) {\n\tfor i := a + 1; i < b; i++ {\n\t\tfor j := i; j > a && less(data[j], data[j-1]); j-- {\n\t\t\tdata[j], data[j-1] = data[j-1], data[j]\n\t\t}\n\t}\n}\n\n// siftDownLessFunc implements the heap property on data[lo:hi].\n// first is an offset into the array where the root of the heap lies.\nfunc siftDownLessFunc[E any](data []E, lo, hi, first int, less func(a, b E) bool) {\n\troot := lo\n\tfor {\n\t\tchild := 2*root + 1\n\t\tif child >= hi {\n\t\t\tbreak\n\t\t}\n\t\tif child+1 < hi && less(data[first+child], data[first+child+1]) {\n\t\t\tchild++\n\t\t}\n\t\tif !less(data[first+root], data[first+child]) {\n\t\t\treturn\n\t\t}\n\t\tdata[first+root], data[first+child] = data[first+child], data[first+root]\n\t\troot = child\n\t}\n}\n\nfunc heapSortLessFunc[E any](data []E, a, b int, less func(a, b E) bool) {\n\tfirst := a\n\tlo := 0\n\thi := b - a\n\n\t// Build heap with greatest element at top.\n\tfor i := (hi - 1) / 2; i >= 0; i-- {\n\t\tsiftDownLessFunc(data, i, hi, first, less)\n\t}\n\n\t// Pop elements, largest first, into end of data.\n\tfor i := hi - 1; i >= 0; i-- {\n\t\tdata[first], data[first+i] = data[first+i], data[first]\n\t\tsiftDownLessFunc(data, lo, i, first, less)\n\t}\n}\n\n// pdqsortLessFunc sorts data[a:b].\n// The algorithm based on pattern-defeating quicksort(pdqsort), but without the optimizations from BlockQuicksort.\n// pdqsort paper: https://arxiv.org/pdf/2106.05123.pdf\n// C++ implementation: https://github.com/orlp/pdqsort\n// Rust implementation: https://docs.rs/pdqsort/latest/pdqsort/\n// limit is the number of allowed bad (very unbalanced) pivots before falling back to heapsort.\nfunc pdqsortLessFunc[E any](data []E, a, b, limit int, less func(a, b E) bool) {\n\tconst maxInsertion = 12\n\n\tvar (\n\t\twasBalanced    = true // whether the last partitioning was reasonably balanced\n\t\twasPartitioned = true // whether the slice was already partitioned\n\t)\n\n\tfor {\n\t\tlength := b - a\n\n\t\tif length <= maxInsertion {\n\t\t\tinsertionSortLessFunc(data, a, b, less)\n\t\t\treturn\n\t\t}\n\n\t\t// Fall back to heapsort if too many bad choices were made.\n\t\tif limit == 0 {\n\t\t\theapSortLessFunc(data, a, b, less)\n\t\t\treturn\n\t\t}\n\n\t\t// If the last partitioning was imbalanced, we need to breaking patterns.\n\t\tif !wasBalanced {\n\t\t\tbreakPatternsLessFunc(data, a, b, less)\n\t\t\tlimit--\n\t\t}\n\n\t\tpivot, hint := choosePivotLessFunc(data, a, b, less)\n\t\tif hint == decreasingHint {\n\t\t\treverseRangeLessFunc(data, a, b, less)\n\t\t\t// The chosen pivot was pivot-a elements after the start of the array.\n\t\t\t// After reversing it is pivot-a elements before the end of the array.\n\t\t\t// The idea came from Rust's implementation.\n\t\t\tpivot = (b - 1) - (pivot - a)\n\t\t\thint = increasingHint\n\t\t}\n\n\t\t// The slice is likely already sorted.\n\t\tif wasBalanced && wasPartitioned && hint == increasingHint {\n\t\t\tif partialInsertionSortLessFunc(data, a, b, less) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\t// Probably the slice contains many duplicate elements, partition the slice into\n\t\t// elements equal to and elements greater than the pivot.\n\t\tif a > 0 && !less(data[a-1], data[pivot]) {\n\t\t\tmid := partitionEqualLessFunc(data, a, b, pivot, less)\n\t\t\ta = mid\n\t\t\tcontinue\n\t\t}\n\n\t\tmid, alreadyPartitioned := partitionLessFunc(data, a, b, pivot, less)\n\t\twasPartitioned = alreadyPartitioned\n\n\t\tleftLen, rightLen := mid-a, b-mid\n\t\tbalanceThreshold := length / 8\n\t\tif leftLen < rightLen {\n\t\t\twasBalanced = leftLen >= balanceThreshold\n\t\t\tpdqsortLessFunc(data, a, mid, limit, less)\n\t\t\ta = mid + 1\n\t\t} else {\n\t\t\twasBalanced = rightLen >= balanceThreshold\n\t\t\tpdqsortLessFunc(data, mid+1, b, limit, less)\n\t\t\tb = mid\n\t\t}\n\t}\n}\n\n// partitionLessFunc does one quicksort partition.\n// Let p = data[pivot]\n// Moves elements in data[a:b] around, so that data[i]<p and data[j]>=p for i<newpivot and j>newpivot.\n// On return, data[newpivot] = p\nfunc partitionLessFunc[E any](data []E, a, b, pivot int, less func(a, b E) bool) (newpivot int, alreadyPartitioned bool) {\n\tdata[a], data[pivot] = data[pivot], data[a]\n\ti, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned\n\n\tfor i <= j && less(data[i], data[a]) {\n\t\ti++\n\t}\n\tfor i <= j && !less(data[j], data[a]) {\n\t\tj--\n\t}\n\tif i > j {\n\t\tdata[j], data[a] = data[a], data[j]\n\t\treturn j, true\n\t}\n\tdata[i], data[j] = data[j], data[i]\n\ti++\n\tj--\n\n\tfor {\n\t\tfor i <= j && less(data[i], data[a]) {\n\t\t\ti++\n\t\t}\n\t\tfor i <= j && !less(data[j], data[a]) {\n\t\t\tj--\n\t\t}\n\t\tif i > j {\n\t\t\tbreak\n\t\t}\n\t\tdata[i], data[j] = data[j], data[i]\n\t\ti++\n\t\tj--\n\t}\n\tdata[j], data[a] = data[a], data[j]\n\treturn j, false\n}\n\n// partitionEqualLessFunc partitions data[a:b] into elements equal to data[pivot] followed by elements greater than data[pivot].\n// It assumed that data[a:b] does not contain elements smaller than the data[pivot].\nfunc partitionEqualLessFunc[E any](data []E, a, b, pivot int, less func(a, b E) bool) (newpivot int) {\n\tdata[a], data[pivot] = data[pivot], data[a]\n\ti, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned\n\n\tfor {\n\t\tfor i <= j && !less(data[a], data[i]) {\n\t\t\ti++\n\t\t}\n\t\tfor i <= j && less(data[a], data[j]) {\n\t\t\tj--\n\t\t}\n\t\tif i > j {\n\t\t\tbreak\n\t\t}\n\t\tdata[i], data[j] = data[j], data[i]\n\t\ti++\n\t\tj--\n\t}\n\treturn i\n}\n\n// partialInsertionSortLessFunc partially sorts a slice, returns true if the slice is sorted at the end.\nfunc partialInsertionSortLessFunc[E any](data []E, a, b int, less func(a, b E) bool) bool {\n\tconst (\n\t\tmaxSteps         = 5  // maximum number of adjacent out-of-order pairs that will get shifted\n\t\tshortestShifting = 50 // don't shift any elements on short arrays\n\t)\n\ti := a + 1\n\tfor j := 0; j < maxSteps; j++ {\n\t\tfor i < b && !less(data[i], data[i-1]) {\n\t\t\ti++\n\t\t}\n\n\t\tif i == b {\n\t\t\treturn true\n\t\t}\n\n\t\tif b-a < shortestShifting {\n\t\t\treturn false\n\t\t}\n\n\t\tdata[i], data[i-1] = data[i-1], data[i]\n\n\t\t// Shift the smaller one to the left.\n\t\tif i-a >= 2 {\n\t\t\tfor j := i - 1; j >= 1; j-- {\n\t\t\t\tif !less(data[j], data[j-1]) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdata[j], data[j-1] = data[j-1], data[j]\n\t\t\t}\n\t\t}\n\t\t// Shift the greater one to the right.\n\t\tif b-i >= 2 {\n\t\t\tfor j := i + 1; j < b; j++ {\n\t\t\t\tif !less(data[j], data[j-1]) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdata[j], data[j-1] = data[j-1], data[j]\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\n// breakPatternsLessFunc scatters some elements around in an attempt to break some patterns\n// that might cause imbalanced partitions in quicksort.\nfunc breakPatternsLessFunc[E any](data []E, a, b int, less func(a, b E) bool) {\n\tlength := b - a\n\tif length >= 8 {\n\t\trandom := xorshift(length)\n\t\tmodulus := nextPowerOfTwo(length)\n\n\t\tfor idx := a + (length/4)*2 - 1; idx <= a+(length/4)*2+1; idx++ {\n\t\t\tother := int(uint(random.Next()) & (modulus - 1))\n\t\t\tif other >= length {\n\t\t\t\tother -= length\n\t\t\t}\n\t\t\tdata[idx], data[a+other] = data[a+other], data[idx]\n\t\t}\n\t}\n}\n\n// choosePivotLessFunc chooses a pivot in data[a:b].\n//\n// [0,8): chooses a static pivot.\n// [8,shortestNinther): uses the simple median-of-three method.\n// [shortestNinther,∞): uses the Tukey ninther method.\nfunc choosePivotLessFunc[E any](data []E, a, b int, less func(a, b E) bool) (pivot int, hint sortedHint) {\n\tconst (\n\t\tshortestNinther = 50\n\t\tmaxSwaps        = 4 * 3\n\t)\n\n\tl := b - a\n\n\tvar (\n\t\tswaps int\n\t\ti     = a + l/4*1\n\t\tj     = a + l/4*2\n\t\tk     = a + l/4*3\n\t)\n\n\tif l >= 8 {\n\t\tif l >= shortestNinther {\n\t\t\t// Tukey ninther method, the idea came from Rust's implementation.\n\t\t\ti = medianAdjacentLessFunc(data, i, &swaps, less)\n\t\t\tj = medianAdjacentLessFunc(data, j, &swaps, less)\n\t\t\tk = medianAdjacentLessFunc(data, k, &swaps, less)\n\t\t}\n\t\t// Find the median among i, j, k and stores it into j.\n\t\tj = medianLessFunc(data, i, j, k, &swaps, less)\n\t}\n\n\tswitch swaps {\n\tcase 0:\n\t\treturn j, increasingHint\n\tcase maxSwaps:\n\t\treturn j, decreasingHint\n\tdefault:\n\t\treturn j, unknownHint\n\t}\n}\n\n// order2LessFunc returns x,y where data[x] <= data[y], where x,y=a,b or x,y=b,a.\nfunc order2LessFunc[E any](data []E, a, b int, swaps *int, less func(a, b E) bool) (int, int) {\n\tif less(data[b], data[a]) {\n\t\t*swaps++\n\t\treturn b, a\n\t}\n\treturn a, b\n}\n\n// medianLessFunc returns x where data[x] is the median of data[a],data[b],data[c], where x is a, b, or c.\nfunc medianLessFunc[E any](data []E, a, b, c int, swaps *int, less func(a, b E) bool) int {\n\ta, b = order2LessFunc(data, a, b, swaps, less)\n\tb, c = order2LessFunc(data, b, c, swaps, less)\n\ta, b = order2LessFunc(data, a, b, swaps, less)\n\treturn b\n}\n\n// medianAdjacentLessFunc finds the median of data[a - 1], data[a], data[a + 1] and stores the index into a.\nfunc medianAdjacentLessFunc[E any](data []E, a int, swaps *int, less func(a, b E) bool) int {\n\treturn medianLessFunc(data, a-1, a, a+1, swaps, less)\n}\n\nfunc reverseRangeLessFunc[E any](data []E, a, b int, less func(a, b E) bool) {\n\ti := a\n\tj := b - 1\n\tfor i < j {\n\t\tdata[i], data[j] = data[j], data[i]\n\t\ti++\n\t\tj--\n\t}\n}\n\nfunc swapRangeLessFunc[E any](data []E, a, b, n int, less func(a, b E) bool) {\n\tfor i := 0; i < n; i++ {\n\t\tdata[a+i], data[b+i] = data[b+i], data[a+i]\n\t}\n}\n\nfunc stableLessFunc[E any](data []E, n int, less func(a, b E) bool) {\n\tblockSize := 20 // must be > 0\n\ta, b := 0, blockSize\n\tfor b <= n {\n\t\tinsertionSortLessFunc(data, a, b, less)\n\t\ta = b\n\t\tb += blockSize\n\t}\n\tinsertionSortLessFunc(data, a, n, less)\n\n\tfor blockSize < n {\n\t\ta, b = 0, 2*blockSize\n\t\tfor b <= n {\n\t\t\tsymMergeLessFunc(data, a, a+blockSize, b, less)\n\t\t\ta = b\n\t\t\tb += 2 * blockSize\n\t\t}\n\t\tif m := a + blockSize; m < n {\n\t\t\tsymMergeLessFunc(data, a, m, n, less)\n\t\t}\n\t\tblockSize *= 2\n\t}\n}\n\n// symMergeLessFunc merges the two sorted subsequences data[a:m] and data[m:b] using\n// the SymMerge algorithm from Pok-Son Kim and Arne Kutzner, \"Stable Minimum\n// Storage Merging by Symmetric Comparisons\", in Susanne Albers and Tomasz\n// Radzik, editors, Algorithms - ESA 2004, volume 3221 of Lecture Notes in\n// Computer Science, pages 714-723. Springer, 2004.\n//\n// Let M = m-a and N = b-n. Wolog M < N.\n// The recursion depth is bound by ceil(log(N+M)).\n// The algorithm needs O(M*log(N/M + 1)) calls to data.Less.\n// The algorithm needs O((M+N)*log(M)) calls to data.Swap.\n//\n// The paper gives O((M+N)*log(M)) as the number of assignments assuming a\n// rotation algorithm which uses O(M+N+gcd(M+N)) assignments. The argumentation\n// in the paper carries through for Swap operations, especially as the block\n// swapping rotate uses only O(M+N) Swaps.\n//\n// symMerge assumes non-degenerate arguments: a < m && m < b.\n// Having the caller check this condition eliminates many leaf recursion calls,\n// which improves performance.\nfunc symMergeLessFunc[E any](data []E, a, m, b int, less func(a, b E) bool) {\n\t// Avoid unnecessary recursions of symMerge\n\t// by direct insertion of data[a] into data[m:b]\n\t// if data[a:m] only contains one element.\n\tif m-a == 1 {\n\t\t// Use binary search to find the lowest index i\n\t\t// such that data[i] >= data[a] for m <= i < b.\n\t\t// Exit the search loop with i == b in case no such index exists.\n\t\ti := m\n\t\tj := b\n\t\tfor i < j {\n\t\t\th := int(uint(i+j) >> 1)\n\t\t\tif less(data[h], data[a]) {\n\t\t\t\ti = h + 1\n\t\t\t} else {\n\t\t\t\tj = h\n\t\t\t}\n\t\t}\n\t\t// Swap values until data[a] reaches the position before i.\n\t\tfor k := a; k < i-1; k++ {\n\t\t\tdata[k], data[k+1] = data[k+1], data[k]\n\t\t}\n\t\treturn\n\t}\n\n\t// Avoid unnecessary recursions of symMerge\n\t// by direct insertion of data[m] into data[a:m]\n\t// if data[m:b] only contains one element.\n\tif b-m == 1 {\n\t\t// Use binary search to find the lowest index i\n\t\t// such that data[i] > data[m] for a <= i < m.\n\t\t// Exit the search loop with i == m in case no such index exists.\n\t\ti := a\n\t\tj := m\n\t\tfor i < j {\n\t\t\th := int(uint(i+j) >> 1)\n\t\t\tif !less(data[m], data[h]) {\n\t\t\t\ti = h + 1\n\t\t\t} else {\n\t\t\t\tj = h\n\t\t\t}\n\t\t}\n\t\t// Swap values until data[m] reaches the position i.\n\t\tfor k := m; k > i; k-- {\n\t\t\tdata[k], data[k-1] = data[k-1], data[k]\n\t\t}\n\t\treturn\n\t}\n\n\tmid := int(uint(a+b) >> 1)\n\tn := mid + m\n\tvar start, r int\n\tif m > mid {\n\t\tstart = n - b\n\t\tr = mid\n\t} else {\n\t\tstart = a\n\t\tr = m\n\t}\n\tp := n - 1\n\n\tfor start < r {\n\t\tc := int(uint(start+r) >> 1)\n\t\tif !less(data[p-c], data[c]) {\n\t\t\tstart = c + 1\n\t\t} else {\n\t\t\tr = c\n\t\t}\n\t}\n\n\tend := n - start\n\tif start < m && m < end {\n\t\trotateLessFunc(data, start, m, end, less)\n\t}\n\tif a < start && start < mid {\n\t\tsymMergeLessFunc(data, a, start, mid, less)\n\t}\n\tif mid < end && end < b {\n\t\tsymMergeLessFunc(data, mid, end, b, less)\n\t}\n}\n\n// rotateLessFunc rotates two consecutive blocks u = data[a:m] and v = data[m:b] in data:\n// Data of the form 'x u v y' is changed to 'x v u y'.\n// rotate performs at most b-a many calls to data.Swap,\n// and it assumes non-degenerate arguments: a < m && m < b.\nfunc rotateLessFunc[E any](data []E, a, m, b int, less func(a, b E) bool) {\n\ti := m - a\n\tj := b - m\n\n\tfor i != j {\n\t\tif i > j {\n\t\t\tswapRangeLessFunc(data, m-i, m, j, less)\n\t\t\ti -= j\n\t\t} else {\n\t\t\tswapRangeLessFunc(data, m-i, m+j-i, i, less)\n\t\t\tj -= i\n\t\t}\n\t}\n\t// i == j\n\tswapRangeLessFunc(data, m-i, m, i, less)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/exp/slices/zsortordered.go",
    "content": "// Code generated by gen_sort_variants.go; DO NOT EDIT.\n\n// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage slices\n\nimport \"golang.org/x/exp/constraints\"\n\n// insertionSortOrdered sorts data[a:b] using insertion sort.\nfunc insertionSortOrdered[E constraints.Ordered](data []E, a, b int) {\n\tfor i := a + 1; i < b; i++ {\n\t\tfor j := i; j > a && (data[j] < data[j-1]); j-- {\n\t\t\tdata[j], data[j-1] = data[j-1], data[j]\n\t\t}\n\t}\n}\n\n// siftDownOrdered implements the heap property on data[lo:hi].\n// first is an offset into the array where the root of the heap lies.\nfunc siftDownOrdered[E constraints.Ordered](data []E, lo, hi, first int) {\n\troot := lo\n\tfor {\n\t\tchild := 2*root + 1\n\t\tif child >= hi {\n\t\t\tbreak\n\t\t}\n\t\tif child+1 < hi && (data[first+child] < data[first+child+1]) {\n\t\t\tchild++\n\t\t}\n\t\tif !(data[first+root] < data[first+child]) {\n\t\t\treturn\n\t\t}\n\t\tdata[first+root], data[first+child] = data[first+child], data[first+root]\n\t\troot = child\n\t}\n}\n\nfunc heapSortOrdered[E constraints.Ordered](data []E, a, b int) {\n\tfirst := a\n\tlo := 0\n\thi := b - a\n\n\t// Build heap with greatest element at top.\n\tfor i := (hi - 1) / 2; i >= 0; i-- {\n\t\tsiftDownOrdered(data, i, hi, first)\n\t}\n\n\t// Pop elements, largest first, into end of data.\n\tfor i := hi - 1; i >= 0; i-- {\n\t\tdata[first], data[first+i] = data[first+i], data[first]\n\t\tsiftDownOrdered(data, lo, i, first)\n\t}\n}\n\n// pdqsortOrdered sorts data[a:b].\n// The algorithm based on pattern-defeating quicksort(pdqsort), but without the optimizations from BlockQuicksort.\n// pdqsort paper: https://arxiv.org/pdf/2106.05123.pdf\n// C++ implementation: https://github.com/orlp/pdqsort\n// Rust implementation: https://docs.rs/pdqsort/latest/pdqsort/\n// limit is the number of allowed bad (very unbalanced) pivots before falling back to heapsort.\nfunc pdqsortOrdered[E constraints.Ordered](data []E, a, b, limit int) {\n\tconst maxInsertion = 12\n\n\tvar (\n\t\twasBalanced    = true // whether the last partitioning was reasonably balanced\n\t\twasPartitioned = true // whether the slice was already partitioned\n\t)\n\n\tfor {\n\t\tlength := b - a\n\n\t\tif length <= maxInsertion {\n\t\t\tinsertionSortOrdered(data, a, b)\n\t\t\treturn\n\t\t}\n\n\t\t// Fall back to heapsort if too many bad choices were made.\n\t\tif limit == 0 {\n\t\t\theapSortOrdered(data, a, b)\n\t\t\treturn\n\t\t}\n\n\t\t// If the last partitioning was imbalanced, we need to breaking patterns.\n\t\tif !wasBalanced {\n\t\t\tbreakPatternsOrdered(data, a, b)\n\t\t\tlimit--\n\t\t}\n\n\t\tpivot, hint := choosePivotOrdered(data, a, b)\n\t\tif hint == decreasingHint {\n\t\t\treverseRangeOrdered(data, a, b)\n\t\t\t// The chosen pivot was pivot-a elements after the start of the array.\n\t\t\t// After reversing it is pivot-a elements before the end of the array.\n\t\t\t// The idea came from Rust's implementation.\n\t\t\tpivot = (b - 1) - (pivot - a)\n\t\t\thint = increasingHint\n\t\t}\n\n\t\t// The slice is likely already sorted.\n\t\tif wasBalanced && wasPartitioned && hint == increasingHint {\n\t\t\tif partialInsertionSortOrdered(data, a, b) {\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\t// Probably the slice contains many duplicate elements, partition the slice into\n\t\t// elements equal to and elements greater than the pivot.\n\t\tif a > 0 && !(data[a-1] < data[pivot]) {\n\t\t\tmid := partitionEqualOrdered(data, a, b, pivot)\n\t\t\ta = mid\n\t\t\tcontinue\n\t\t}\n\n\t\tmid, alreadyPartitioned := partitionOrdered(data, a, b, pivot)\n\t\twasPartitioned = alreadyPartitioned\n\n\t\tleftLen, rightLen := mid-a, b-mid\n\t\tbalanceThreshold := length / 8\n\t\tif leftLen < rightLen {\n\t\t\twasBalanced = leftLen >= balanceThreshold\n\t\t\tpdqsortOrdered(data, a, mid, limit)\n\t\t\ta = mid + 1\n\t\t} else {\n\t\t\twasBalanced = rightLen >= balanceThreshold\n\t\t\tpdqsortOrdered(data, mid+1, b, limit)\n\t\t\tb = mid\n\t\t}\n\t}\n}\n\n// partitionOrdered does one quicksort partition.\n// Let p = data[pivot]\n// Moves elements in data[a:b] around, so that data[i]<p and data[j]>=p for i<newpivot and j>newpivot.\n// On return, data[newpivot] = p\nfunc partitionOrdered[E constraints.Ordered](data []E, a, b, pivot int) (newpivot int, alreadyPartitioned bool) {\n\tdata[a], data[pivot] = data[pivot], data[a]\n\ti, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned\n\n\tfor i <= j && (data[i] < data[a]) {\n\t\ti++\n\t}\n\tfor i <= j && !(data[j] < data[a]) {\n\t\tj--\n\t}\n\tif i > j {\n\t\tdata[j], data[a] = data[a], data[j]\n\t\treturn j, true\n\t}\n\tdata[i], data[j] = data[j], data[i]\n\ti++\n\tj--\n\n\tfor {\n\t\tfor i <= j && (data[i] < data[a]) {\n\t\t\ti++\n\t\t}\n\t\tfor i <= j && !(data[j] < data[a]) {\n\t\t\tj--\n\t\t}\n\t\tif i > j {\n\t\t\tbreak\n\t\t}\n\t\tdata[i], data[j] = data[j], data[i]\n\t\ti++\n\t\tj--\n\t}\n\tdata[j], data[a] = data[a], data[j]\n\treturn j, false\n}\n\n// partitionEqualOrdered partitions data[a:b] into elements equal to data[pivot] followed by elements greater than data[pivot].\n// It assumed that data[a:b] does not contain elements smaller than the data[pivot].\nfunc partitionEqualOrdered[E constraints.Ordered](data []E, a, b, pivot int) (newpivot int) {\n\tdata[a], data[pivot] = data[pivot], data[a]\n\ti, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned\n\n\tfor {\n\t\tfor i <= j && !(data[a] < data[i]) {\n\t\t\ti++\n\t\t}\n\t\tfor i <= j && (data[a] < data[j]) {\n\t\t\tj--\n\t\t}\n\t\tif i > j {\n\t\t\tbreak\n\t\t}\n\t\tdata[i], data[j] = data[j], data[i]\n\t\ti++\n\t\tj--\n\t}\n\treturn i\n}\n\n// partialInsertionSortOrdered partially sorts a slice, returns true if the slice is sorted at the end.\nfunc partialInsertionSortOrdered[E constraints.Ordered](data []E, a, b int) bool {\n\tconst (\n\t\tmaxSteps         = 5  // maximum number of adjacent out-of-order pairs that will get shifted\n\t\tshortestShifting = 50 // don't shift any elements on short arrays\n\t)\n\ti := a + 1\n\tfor j := 0; j < maxSteps; j++ {\n\t\tfor i < b && !(data[i] < data[i-1]) {\n\t\t\ti++\n\t\t}\n\n\t\tif i == b {\n\t\t\treturn true\n\t\t}\n\n\t\tif b-a < shortestShifting {\n\t\t\treturn false\n\t\t}\n\n\t\tdata[i], data[i-1] = data[i-1], data[i]\n\n\t\t// Shift the smaller one to the left.\n\t\tif i-a >= 2 {\n\t\t\tfor j := i - 1; j >= 1; j-- {\n\t\t\t\tif !(data[j] < data[j-1]) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdata[j], data[j-1] = data[j-1], data[j]\n\t\t\t}\n\t\t}\n\t\t// Shift the greater one to the right.\n\t\tif b-i >= 2 {\n\t\t\tfor j := i + 1; j < b; j++ {\n\t\t\t\tif !(data[j] < data[j-1]) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tdata[j], data[j-1] = data[j-1], data[j]\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n\n// breakPatternsOrdered scatters some elements around in an attempt to break some patterns\n// that might cause imbalanced partitions in quicksort.\nfunc breakPatternsOrdered[E constraints.Ordered](data []E, a, b int) {\n\tlength := b - a\n\tif length >= 8 {\n\t\trandom := xorshift(length)\n\t\tmodulus := nextPowerOfTwo(length)\n\n\t\tfor idx := a + (length/4)*2 - 1; idx <= a+(length/4)*2+1; idx++ {\n\t\t\tother := int(uint(random.Next()) & (modulus - 1))\n\t\t\tif other >= length {\n\t\t\t\tother -= length\n\t\t\t}\n\t\t\tdata[idx], data[a+other] = data[a+other], data[idx]\n\t\t}\n\t}\n}\n\n// choosePivotOrdered chooses a pivot in data[a:b].\n//\n// [0,8): chooses a static pivot.\n// [8,shortestNinther): uses the simple median-of-three method.\n// [shortestNinther,∞): uses the Tukey ninther method.\nfunc choosePivotOrdered[E constraints.Ordered](data []E, a, b int) (pivot int, hint sortedHint) {\n\tconst (\n\t\tshortestNinther = 50\n\t\tmaxSwaps        = 4 * 3\n\t)\n\n\tl := b - a\n\n\tvar (\n\t\tswaps int\n\t\ti     = a + l/4*1\n\t\tj     = a + l/4*2\n\t\tk     = a + l/4*3\n\t)\n\n\tif l >= 8 {\n\t\tif l >= shortestNinther {\n\t\t\t// Tukey ninther method, the idea came from Rust's implementation.\n\t\t\ti = medianAdjacentOrdered(data, i, &swaps)\n\t\t\tj = medianAdjacentOrdered(data, j, &swaps)\n\t\t\tk = medianAdjacentOrdered(data, k, &swaps)\n\t\t}\n\t\t// Find the median among i, j, k and stores it into j.\n\t\tj = medianOrdered(data, i, j, k, &swaps)\n\t}\n\n\tswitch swaps {\n\tcase 0:\n\t\treturn j, increasingHint\n\tcase maxSwaps:\n\t\treturn j, decreasingHint\n\tdefault:\n\t\treturn j, unknownHint\n\t}\n}\n\n// order2Ordered returns x,y where data[x] <= data[y], where x,y=a,b or x,y=b,a.\nfunc order2Ordered[E constraints.Ordered](data []E, a, b int, swaps *int) (int, int) {\n\tif data[b] < data[a] {\n\t\t*swaps++\n\t\treturn b, a\n\t}\n\treturn a, b\n}\n\n// medianOrdered returns x where data[x] is the median of data[a],data[b],data[c], where x is a, b, or c.\nfunc medianOrdered[E constraints.Ordered](data []E, a, b, c int, swaps *int) int {\n\ta, b = order2Ordered(data, a, b, swaps)\n\tb, c = order2Ordered(data, b, c, swaps)\n\ta, b = order2Ordered(data, a, b, swaps)\n\treturn b\n}\n\n// medianAdjacentOrdered finds the median of data[a - 1], data[a], data[a + 1] and stores the index into a.\nfunc medianAdjacentOrdered[E constraints.Ordered](data []E, a int, swaps *int) int {\n\treturn medianOrdered(data, a-1, a, a+1, swaps)\n}\n\nfunc reverseRangeOrdered[E constraints.Ordered](data []E, a, b int) {\n\ti := a\n\tj := b - 1\n\tfor i < j {\n\t\tdata[i], data[j] = data[j], data[i]\n\t\ti++\n\t\tj--\n\t}\n}\n\nfunc swapRangeOrdered[E constraints.Ordered](data []E, a, b, n int) {\n\tfor i := 0; i < n; i++ {\n\t\tdata[a+i], data[b+i] = data[b+i], data[a+i]\n\t}\n}\n\nfunc stableOrdered[E constraints.Ordered](data []E, n int) {\n\tblockSize := 20 // must be > 0\n\ta, b := 0, blockSize\n\tfor b <= n {\n\t\tinsertionSortOrdered(data, a, b)\n\t\ta = b\n\t\tb += blockSize\n\t}\n\tinsertionSortOrdered(data, a, n)\n\n\tfor blockSize < n {\n\t\ta, b = 0, 2*blockSize\n\t\tfor b <= n {\n\t\t\tsymMergeOrdered(data, a, a+blockSize, b)\n\t\t\ta = b\n\t\t\tb += 2 * blockSize\n\t\t}\n\t\tif m := a + blockSize; m < n {\n\t\t\tsymMergeOrdered(data, a, m, n)\n\t\t}\n\t\tblockSize *= 2\n\t}\n}\n\n// symMergeOrdered merges the two sorted subsequences data[a:m] and data[m:b] using\n// the SymMerge algorithm from Pok-Son Kim and Arne Kutzner, \"Stable Minimum\n// Storage Merging by Symmetric Comparisons\", in Susanne Albers and Tomasz\n// Radzik, editors, Algorithms - ESA 2004, volume 3221 of Lecture Notes in\n// Computer Science, pages 714-723. Springer, 2004.\n//\n// Let M = m-a and N = b-n. Wolog M < N.\n// The recursion depth is bound by ceil(log(N+M)).\n// The algorithm needs O(M*log(N/M + 1)) calls to data.Less.\n// The algorithm needs O((M+N)*log(M)) calls to data.Swap.\n//\n// The paper gives O((M+N)*log(M)) as the number of assignments assuming a\n// rotation algorithm which uses O(M+N+gcd(M+N)) assignments. The argumentation\n// in the paper carries through for Swap operations, especially as the block\n// swapping rotate uses only O(M+N) Swaps.\n//\n// symMerge assumes non-degenerate arguments: a < m && m < b.\n// Having the caller check this condition eliminates many leaf recursion calls,\n// which improves performance.\nfunc symMergeOrdered[E constraints.Ordered](data []E, a, m, b int) {\n\t// Avoid unnecessary recursions of symMerge\n\t// by direct insertion of data[a] into data[m:b]\n\t// if data[a:m] only contains one element.\n\tif m-a == 1 {\n\t\t// Use binary search to find the lowest index i\n\t\t// such that data[i] >= data[a] for m <= i < b.\n\t\t// Exit the search loop with i == b in case no such index exists.\n\t\ti := m\n\t\tj := b\n\t\tfor i < j {\n\t\t\th := int(uint(i+j) >> 1)\n\t\t\tif data[h] < data[a] {\n\t\t\t\ti = h + 1\n\t\t\t} else {\n\t\t\t\tj = h\n\t\t\t}\n\t\t}\n\t\t// Swap values until data[a] reaches the position before i.\n\t\tfor k := a; k < i-1; k++ {\n\t\t\tdata[k], data[k+1] = data[k+1], data[k]\n\t\t}\n\t\treturn\n\t}\n\n\t// Avoid unnecessary recursions of symMerge\n\t// by direct insertion of data[m] into data[a:m]\n\t// if data[m:b] only contains one element.\n\tif b-m == 1 {\n\t\t// Use binary search to find the lowest index i\n\t\t// such that data[i] > data[m] for a <= i < m.\n\t\t// Exit the search loop with i == m in case no such index exists.\n\t\ti := a\n\t\tj := m\n\t\tfor i < j {\n\t\t\th := int(uint(i+j) >> 1)\n\t\t\tif !(data[m] < data[h]) {\n\t\t\t\ti = h + 1\n\t\t\t} else {\n\t\t\t\tj = h\n\t\t\t}\n\t\t}\n\t\t// Swap values until data[m] reaches the position i.\n\t\tfor k := m; k > i; k-- {\n\t\t\tdata[k], data[k-1] = data[k-1], data[k]\n\t\t}\n\t\treturn\n\t}\n\n\tmid := int(uint(a+b) >> 1)\n\tn := mid + m\n\tvar start, r int\n\tif m > mid {\n\t\tstart = n - b\n\t\tr = mid\n\t} else {\n\t\tstart = a\n\t\tr = m\n\t}\n\tp := n - 1\n\n\tfor start < r {\n\t\tc := int(uint(start+r) >> 1)\n\t\tif !(data[p-c] < data[c]) {\n\t\t\tstart = c + 1\n\t\t} else {\n\t\t\tr = c\n\t\t}\n\t}\n\n\tend := n - start\n\tif start < m && m < end {\n\t\trotateOrdered(data, start, m, end)\n\t}\n\tif a < start && start < mid {\n\t\tsymMergeOrdered(data, a, start, mid)\n\t}\n\tif mid < end && end < b {\n\t\tsymMergeOrdered(data, mid, end, b)\n\t}\n}\n\n// rotateOrdered rotates two consecutive blocks u = data[a:m] and v = data[m:b] in data:\n// Data of the form 'x u v y' is changed to 'x v u y'.\n// rotate performs at most b-a many calls to data.Swap,\n// and it assumes non-degenerate arguments: a < m && m < b.\nfunc rotateOrdered[E constraints.Ordered](data []E, a, m, b int) {\n\ti := m - a\n\tj := b - m\n\n\tfor i != j {\n\t\tif i > j {\n\t\t\tswapRangeOrdered(data, m-i, m, j)\n\t\t\ti -= j\n\t\t} else {\n\t\t\tswapRangeOrdered(data, m-i, m+j-i, i)\n\t\t\tj -= i\n\t\t}\n\t}\n\t// i == j\n\tswapRangeOrdered(data, m-i, m, i)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sync/LICENSE",
    "content": "Copyright 2009 The Go Authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google LLC nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/sync/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/sync/errgroup/errgroup.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Package errgroup provides synchronization, error propagation, and Context\n// cancelation for groups of goroutines working on subtasks of a common task.\n//\n// [errgroup.Group] is related to [sync.WaitGroup] but adds handling of tasks\n// returning errors.\npackage errgroup\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"sync\"\n)\n\ntype token struct{}\n\n// A Group is a collection of goroutines working on subtasks that are part of\n// the same overall task.\n//\n// A zero Group is valid, has no limit on the number of active goroutines,\n// and does not cancel on error.\ntype Group struct {\n\tcancel func(error)\n\n\twg sync.WaitGroup\n\n\tsem chan token\n\n\terrOnce sync.Once\n\terr     error\n}\n\nfunc (g *Group) done() {\n\tif g.sem != nil {\n\t\t<-g.sem\n\t}\n\tg.wg.Done()\n}\n\n// WithContext returns a new Group and an associated Context derived from ctx.\n//\n// The derived Context is canceled the first time a function passed to Go\n// returns a non-nil error or the first time Wait returns, whichever occurs\n// first.\nfunc WithContext(ctx context.Context) (*Group, context.Context) {\n\tctx, cancel := withCancelCause(ctx)\n\treturn &Group{cancel: cancel}, ctx\n}\n\n// Wait blocks until all function calls from the Go method have returned, then\n// returns the first non-nil error (if any) from them.\nfunc (g *Group) Wait() error {\n\tg.wg.Wait()\n\tif g.cancel != nil {\n\t\tg.cancel(g.err)\n\t}\n\treturn g.err\n}\n\n// Go calls the given function in a new goroutine.\n// It blocks until the new goroutine can be added without the number of\n// active goroutines in the group exceeding the configured limit.\n//\n// The first call to return a non-nil error cancels the group's context, if the\n// group was created by calling WithContext. The error will be returned by Wait.\nfunc (g *Group) Go(f func() error) {\n\tif g.sem != nil {\n\t\tg.sem <- token{}\n\t}\n\n\tg.wg.Add(1)\n\tgo func() {\n\t\tdefer g.done()\n\n\t\tif err := f(); err != nil {\n\t\t\tg.errOnce.Do(func() {\n\t\t\t\tg.err = err\n\t\t\t\tif g.cancel != nil {\n\t\t\t\t\tg.cancel(g.err)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}()\n}\n\n// TryGo calls the given function in a new goroutine only if the number of\n// active goroutines in the group is currently below the configured limit.\n//\n// The return value reports whether the goroutine was started.\nfunc (g *Group) TryGo(f func() error) bool {\n\tif g.sem != nil {\n\t\tselect {\n\t\tcase g.sem <- token{}:\n\t\t\t// Note: this allows barging iff channels in general allow barging.\n\t\tdefault:\n\t\t\treturn false\n\t\t}\n\t}\n\n\tg.wg.Add(1)\n\tgo func() {\n\t\tdefer g.done()\n\n\t\tif err := f(); err != nil {\n\t\t\tg.errOnce.Do(func() {\n\t\t\t\tg.err = err\n\t\t\t\tif g.cancel != nil {\n\t\t\t\t\tg.cancel(g.err)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}()\n\treturn true\n}\n\n// SetLimit limits the number of active goroutines in this group to at most n.\n// A negative value indicates no limit.\n//\n// Any subsequent call to the Go method will block until it can add an active\n// goroutine without exceeding the configured limit.\n//\n// The limit must not be modified while any goroutines in the group are active.\nfunc (g *Group) SetLimit(n int) {\n\tif n < 0 {\n\t\tg.sem = nil\n\t\treturn\n\t}\n\tif len(g.sem) != 0 {\n\t\tpanic(fmt.Errorf(\"errgroup: modify limit while %v goroutines in the group are still active\", len(g.sem)))\n\t}\n\tg.sem = make(chan token, n)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sync/errgroup/go120.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build go1.20\n\npackage errgroup\n\nimport \"context\"\n\nfunc withCancelCause(parent context.Context) (context.Context, func(error)) {\n\treturn context.WithCancelCause(parent)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sync/errgroup/pre_go120.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !go1.20\n\npackage errgroup\n\nimport \"context\"\n\nfunc withCancelCause(parent context.Context) (context.Context, func(error)) {\n\tctx, cancel := context.WithCancel(parent)\n\treturn ctx, func(error) { cancel() }\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/LICENSE",
    "content": "Copyright 2009 The Go Authors.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n   * Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n   * Redistributions in binary form must reproduce the above\ncopyright notice, this list of conditions and the following disclaimer\nin the documentation and/or other materials provided with the\ndistribution.\n   * Neither the name of Google LLC nor the names of its\ncontributors may be used to endorse or promote products derived from\nthis software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "vendor/golang.org/x/sys/PATENTS",
    "content": "Additional IP Rights Grant (Patents)\n\n\"This implementation\" means the copyrightable works distributed by\nGoogle as part of the Go project.\n\nGoogle hereby grants to You a perpetual, worldwide, non-exclusive,\nno-charge, royalty-free, irrevocable (except as stated in this section)\npatent license to make, have made, use, offer to sell, sell, import,\ntransfer and otherwise run, modify and propagate the contents of this\nimplementation of Go, where such license applies only to those patent\nclaims, both currently owned or controlled by Google and acquired in\nthe future, licensable by Google that are necessarily infringed by this\nimplementation of Go.  This grant does not include claims that would be\ninfringed only as a consequence of further modification of this\nimplementation.  If you or your agent or exclusive licensee institute or\norder or agree to the institution of patent litigation against any\nentity (including a cross-claim or counterclaim in a lawsuit) alleging\nthat this implementation of Go or any code incorporated within this\nimplementation of Go constitutes direct or contributory patent\ninfringement, or inducement of patent infringement, then any patent\nrights granted to you under this License for this implementation of Go\nshall terminate as of the date such litigation is filed.\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/.gitignore",
    "content": "_obj/\nunix.test\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/README.md",
    "content": "# Building `sys/unix`\n\nThe sys/unix package provides access to the raw system call interface of the\nunderlying operating system. See: https://godoc.org/golang.org/x/sys/unix\n\nPorting Go to a new architecture/OS combination or adding syscalls, types, or\nconstants to an existing architecture/OS pair requires some manual effort;\nhowever, there are tools that automate much of the process.\n\n## Build Systems\n\nThere are currently two ways we generate the necessary files. We are currently\nmigrating the build system to use containers so the builds are reproducible.\nThis is being done on an OS-by-OS basis. Please update this documentation as\ncomponents of the build system change.\n\n### Old Build System (currently for `GOOS != \"linux\"`)\n\nThe old build system generates the Go files based on the C header files\npresent on your system. This means that files\nfor a given GOOS/GOARCH pair must be generated on a system with that OS and\narchitecture. This also means that the generated code can differ from system\nto system, based on differences in the header files.\n\nTo avoid this, if you are using the old build system, only generate the Go\nfiles on an installation with unmodified header files. It is also important to\nkeep track of which version of the OS the files were generated from (ex.\nDarwin 14 vs Darwin 15). This makes it easier to track the progress of changes\nand have each OS upgrade correspond to a single change.\n\nTo build the files for your current OS and architecture, make sure GOOS and\nGOARCH are set correctly and run `mkall.sh`. This will generate the files for\nyour specific system. Running `mkall.sh -n` shows the commands that will be run.\n\nRequirements: bash, go\n\n### New Build System (currently for `GOOS == \"linux\"`)\n\nThe new build system uses a Docker container to generate the go files directly\nfrom source checkouts of the kernel and various system libraries. This means\nthat on any platform that supports Docker, all the files using the new build\nsystem can be generated at once, and generated files will not change based on\nwhat the person running the scripts has installed on their computer.\n\nThe OS specific files for the new build system are located in the `${GOOS}`\ndirectory, and the build is coordinated by the `${GOOS}/mkall.go` program. When\nthe kernel or system library updates, modify the Dockerfile at\n`${GOOS}/Dockerfile` to checkout the new release of the source.\n\nTo build all the files under the new build system, you must be on an amd64/Linux\nsystem and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will\nthen generate all of the files for all of the GOOS/GOARCH pairs in the new build\nsystem. Running `mkall.sh -n` shows the commands that will be run.\n\nRequirements: bash, go, docker\n\n## Component files\n\nThis section describes the various files used in the code generation process.\nIt also contains instructions on how to modify these files to add a new\narchitecture/OS or to add additional syscalls, types, or constants. Note that\nif you are using the new build system, the scripts/programs cannot be called normally.\nThey must be called from within the docker container.\n\n### asm files\n\nThe hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system\ncall dispatch. There are three entry points:\n```\n  func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)\n  func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr)\n  func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr)\n```\nThe first and second are the standard ones; they differ only in how many\narguments can be passed to the kernel. The third is for low-level use by the\nForkExec wrapper. Unlike the first two, it does not call into the scheduler to\nlet it know that a system call is running.\n\nWhen porting Go to a new architecture/OS, this file must be implemented for\neach GOOS/GOARCH pair.\n\n### mksysnum\n\nMksysnum is a Go program located at `${GOOS}/mksysnum.go` (or `mksysnum_${GOOS}.go`\nfor the old system). This program takes in a list of header files containing the\nsyscall number declarations and parses them to produce the corresponding list of\nGo numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated\nconstants.\n\nAdding new syscall numbers is mostly done by running the build on a sufficiently\nnew installation of the target OS (or updating the source checkouts for the\nnew build system). However, depending on the OS, you may need to update the\nparsing in mksysnum.\n\n### mksyscall.go\n\nThe `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are\nhand-written Go files which implement system calls (for unix, the specific OS,\nor the specific OS/Architecture pair respectively) that need special handling\nand list `//sys` comments giving prototypes for ones that can be generated.\n\nThe mksyscall.go program takes the `//sys` and `//sysnb` comments and converts\nthem into syscalls. This requires the name of the prototype in the comment to\nmatch a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function\nprototype can be exported (capitalized) or not.\n\nAdding a new syscall often just requires adding a new `//sys` function prototype\nwith the desired arguments and a capitalized name so it is exported. However, if\nyou want the interface to the syscall to be different, often one will make an\nunexported `//sys` prototype, and then write a custom wrapper in\n`syscall_${GOOS}.go`.\n\n### types files\n\nFor each OS, there is a hand-written Go file at `${GOOS}/types.go` (or\n`types_${GOOS}.go` on the old system). This file includes standard C headers and\ncreates Go type aliases to the corresponding C types. The file is then fed\nthrough godef to get the Go compatible definitions. Finally, the generated code\nis fed though mkpost.go to format the code correctly and remove any hidden or\nprivate identifiers. This cleaned-up code is written to\n`ztypes_${GOOS}_${GOARCH}.go`.\n\nThe hardest part about preparing this file is figuring out which headers to\ninclude and which symbols need to be `#define`d to get the actual data\nstructures that pass through to the kernel system calls. Some C libraries\npreset alternate versions for binary compatibility and translate them on the\nway in and out of system calls, but there is almost always a `#define` that can\nget the real ones.\nSee `types_darwin.go` and `linux/types.go` for examples.\n\nTo add a new type, add in the necessary include statement at the top of the\nfile (if it is not already there) and add in a type alias line. Note that if\nyour type is significantly different on different architectures, you may need\nsome `#if/#elif` macros in your include statements.\n\n### mkerrors.sh\n\nThis script is used to generate the system's various constants. This doesn't\njust include the error numbers and error strings, but also the signal numbers\nand a wide variety of miscellaneous constants. The constants come from the list\nof include files in the `includes_${uname}` variable. A regex then picks out\nthe desired `#define` statements, and generates the corresponding Go constants.\nThe error numbers and strings are generated from `#include <errno.h>`, and the\nsignal numbers and strings are generated from `#include <signal.h>`. All of\nthese constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program,\n`_errors.c`, which prints out all the constants.\n\nTo add a constant, add the header that includes it to the appropriate variable.\nThen, edit the regex (if necessary) to match the desired constant. Avoid making\nthe regex too broad to avoid matching unintended constants.\n\n### internal/mkmerge\n\nThis program is used to extract duplicate const, func, and type declarations\nfrom the generated architecture-specific files listed below, and merge these\ninto a common file for each OS.\n\nThe merge is performed in the following steps:\n1. Construct the set of common code that is identical in all architecture-specific files.\n2. Write this common code to the merged file.\n3. Remove the common code from all architecture-specific files.\n\n\n## Generated files\n\n### `zerrors_${GOOS}_${GOARCH}.go`\n\nA file containing all of the system's generated error numbers, error strings,\nsignal numbers, and constants. Generated by `mkerrors.sh` (see above).\n\n### `zsyscall_${GOOS}_${GOARCH}.go`\n\nA file containing all the generated syscalls for a specific GOOS and GOARCH.\nGenerated by `mksyscall.go` (see above).\n\n### `zsysnum_${GOOS}_${GOARCH}.go`\n\nA list of numeric constants for all the syscall number of the specific GOOS\nand GOARCH. Generated by mksysnum (see above).\n\n### `ztypes_${GOOS}_${GOARCH}.go`\n\nA file containing Go types for passing into (or returning from) syscalls.\nGenerated by godefs and the types file (see above).\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/affinity_linux.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// CPU affinity functions\n\npackage unix\n\nimport (\n\t\"math/bits\"\n\t\"unsafe\"\n)\n\nconst cpuSetSize = _CPU_SETSIZE / _NCPUBITS\n\n// CPUSet represents a CPU affinity mask.\ntype CPUSet [cpuSetSize]cpuMask\n\nfunc schedAffinity(trap uintptr, pid int, set *CPUSet) error {\n\t_, _, e := RawSyscall(trap, uintptr(pid), uintptr(unsafe.Sizeof(*set)), uintptr(unsafe.Pointer(set)))\n\tif e != 0 {\n\t\treturn errnoErr(e)\n\t}\n\treturn nil\n}\n\n// SchedGetaffinity gets the CPU affinity mask of the thread specified by pid.\n// If pid is 0 the calling thread is used.\nfunc SchedGetaffinity(pid int, set *CPUSet) error {\n\treturn schedAffinity(SYS_SCHED_GETAFFINITY, pid, set)\n}\n\n// SchedSetaffinity sets the CPU affinity mask of the thread specified by pid.\n// If pid is 0 the calling thread is used.\nfunc SchedSetaffinity(pid int, set *CPUSet) error {\n\treturn schedAffinity(SYS_SCHED_SETAFFINITY, pid, set)\n}\n\n// Zero clears the set s, so that it contains no CPUs.\nfunc (s *CPUSet) Zero() {\n\tfor i := range s {\n\t\ts[i] = 0\n\t}\n}\n\nfunc cpuBitsIndex(cpu int) int {\n\treturn cpu / _NCPUBITS\n}\n\nfunc cpuBitsMask(cpu int) cpuMask {\n\treturn cpuMask(1 << (uint(cpu) % _NCPUBITS))\n}\n\n// Set adds cpu to the set s.\nfunc (s *CPUSet) Set(cpu int) {\n\ti := cpuBitsIndex(cpu)\n\tif i < len(s) {\n\t\ts[i] |= cpuBitsMask(cpu)\n\t}\n}\n\n// Clear removes cpu from the set s.\nfunc (s *CPUSet) Clear(cpu int) {\n\ti := cpuBitsIndex(cpu)\n\tif i < len(s) {\n\t\ts[i] &^= cpuBitsMask(cpu)\n\t}\n}\n\n// IsSet reports whether cpu is in the set s.\nfunc (s *CPUSet) IsSet(cpu int) bool {\n\ti := cpuBitsIndex(cpu)\n\tif i < len(s) {\n\t\treturn s[i]&cpuBitsMask(cpu) != 0\n\t}\n\treturn false\n}\n\n// Count returns the number of CPUs in the set s.\nfunc (s *CPUSet) Count() int {\n\tc := 0\n\tfor _, b := range s {\n\t\tc += bits.OnesCount64(uint64(b))\n\t}\n\treturn c\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/aliases.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nimport \"syscall\"\n\ntype Signal = syscall.Signal\ntype Errno = syscall.Errno\ntype SysProcAttr = syscall.SysProcAttr\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_aix_ppc64.s",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for ppc64, AIX are implemented in runtime/syscall_aix.go\n//\n\nTEXT ·syscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·syscall6(SB)\n\nTEXT ·rawSyscall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·rawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_386.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for 386 BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_amd64.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || dragonfly || freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for AMD64 BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_arm.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for ARM BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-52\n\tB\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_arm64.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for ARM64 BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_ppc64.s",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n//\n// System call support for ppc64, BSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_bsd_riscv64.s",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || freebsd || netbsd || openbsd) && gc\n\n#include \"textflag.h\"\n\n// System call support for RISCV64 BSD\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_386.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for 386, Linux\n//\n\n// See ../runtime/sys_linux_386.s for the reason why we always use int 0x80\n// instead of the glibc-specific \"CALL 0x10(GS)\".\n#define INVOKE_SYSCALL\tINT\t$0x80\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-24\n\tCALL\truntime·entersyscall(SB)\n\tMOVL\ttrap+0(FP), AX  // syscall entry\n\tMOVL\ta1+4(FP), BX\n\tMOVL\ta2+8(FP), CX\n\tMOVL\ta3+12(FP), DX\n\tMOVL\t$0, SI\n\tMOVL\t$0, DI\n\tINVOKE_SYSCALL\n\tMOVL\tAX, r1+16(FP)\n\tMOVL\tDX, r2+20(FP)\n\tCALL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24\n\tMOVL\ttrap+0(FP), AX  // syscall entry\n\tMOVL\ta1+4(FP), BX\n\tMOVL\ta2+8(FP), CX\n\tMOVL\ta3+12(FP), DX\n\tMOVL\t$0, SI\n\tMOVL\t$0, DI\n\tINVOKE_SYSCALL\n\tMOVL\tAX, r1+16(FP)\n\tMOVL\tDX, r2+20(FP)\n\tRET\n\nTEXT ·socketcall(SB),NOSPLIT,$0-36\n\tJMP\tsyscall·socketcall(SB)\n\nTEXT ·rawsocketcall(SB),NOSPLIT,$0-36\n\tJMP\tsyscall·rawsocketcall(SB)\n\nTEXT ·seek(SB),NOSPLIT,$0-28\n\tJMP\tsyscall·seek(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_amd64.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for AMD64, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tCALL\truntime·entersyscall(SB)\n\tMOVQ\ta1+8(FP), DI\n\tMOVQ\ta2+16(FP), SI\n\tMOVQ\ta3+24(FP), DX\n\tMOVQ\t$0, R10\n\tMOVQ\t$0, R8\n\tMOVQ\t$0, R9\n\tMOVQ\ttrap+0(FP), AX\t// syscall entry\n\tSYSCALL\n\tMOVQ\tAX, r1+32(FP)\n\tMOVQ\tDX, r2+40(FP)\n\tCALL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVQ\ta1+8(FP), DI\n\tMOVQ\ta2+16(FP), SI\n\tMOVQ\ta3+24(FP), DX\n\tMOVQ\t$0, R10\n\tMOVQ\t$0, R8\n\tMOVQ\t$0, R9\n\tMOVQ\ttrap+0(FP), AX\t// syscall entry\n\tSYSCALL\n\tMOVQ\tAX, r1+32(FP)\n\tMOVQ\tDX, r2+40(FP)\n\tRET\n\nTEXT ·gettimeofday(SB),NOSPLIT,$0-16\n\tJMP\tsyscall·gettimeofday(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_arm.s",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for arm, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-24\n\tBL\truntime·entersyscall(SB)\n\tMOVW\ttrap+0(FP), R7\n\tMOVW\ta1+4(FP), R0\n\tMOVW\ta2+8(FP), R1\n\tMOVW\ta3+12(FP), R2\n\tMOVW\t$0, R3\n\tMOVW\t$0, R4\n\tMOVW\t$0, R5\n\tSWI\t$0\n\tMOVW\tR0, r1+16(FP)\n\tMOVW\t$0, R0\n\tMOVW\tR0, r2+20(FP)\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tB\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24\n\tMOVW\ttrap+0(FP), R7\t// syscall entry\n\tMOVW\ta1+4(FP), R0\n\tMOVW\ta2+8(FP), R1\n\tMOVW\ta3+12(FP), R2\n\tSWI\t$0\n\tMOVW\tR0, r1+16(FP)\n\tMOVW\t$0, R0\n\tMOVW\tR0, r2+20(FP)\n\tRET\n\nTEXT ·seek(SB),NOSPLIT,$0-28\n\tB\tsyscall·seek(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_arm64.s",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && arm64 && gc\n\n#include \"textflag.h\"\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tBL\truntime·entersyscall(SB)\n\tMOVD\ta1+8(FP), R0\n\tMOVD\ta2+16(FP), R1\n\tMOVD\ta3+24(FP), R2\n\tMOVD\t$0, R3\n\tMOVD\t$0, R4\n\tMOVD\t$0, R5\n\tMOVD\ttrap+0(FP), R8\t// syscall entry\n\tSVC\n\tMOVD\tR0, r1+32(FP)\t// r1\n\tMOVD\tR1, r2+40(FP)\t// r2\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tB\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tB\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVD\ta1+8(FP), R0\n\tMOVD\ta2+16(FP), R1\n\tMOVD\ta3+24(FP), R2\n\tMOVD\t$0, R3\n\tMOVD\t$0, R4\n\tMOVD\t$0, R5\n\tMOVD\ttrap+0(FP), R8\t// syscall entry\n\tSVC\n\tMOVD\tR0, r1+32(FP)\n\tMOVD\tR1, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_loong64.s",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && loong64 && gc\n\n#include \"textflag.h\"\n\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tJAL\truntime·entersyscall(SB)\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R11\t// syscall entry\n\tSYSCALL\n\tMOVV\tR4, r1+32(FP)\n\tMOVV\tR0, r2+40(FP)\t// r2 is not used. Always set to 0\n\tJAL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R11\t// syscall entry\n\tSYSCALL\n\tMOVV\tR4, r1+32(FP)\n\tMOVV\tR0, r2+40(FP)\t// r2 is not used. Always set to 0\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_mips64x.s",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (mips64 || mips64le) && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for mips64, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tJAL\truntime·entersyscall(SB)\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVV\tR2, r1+32(FP)\n\tMOVV\tR3, r2+40(FP)\n\tJAL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVV\ta1+8(FP), R4\n\tMOVV\ta2+16(FP), R5\n\tMOVV\ta3+24(FP), R6\n\tMOVV\tR0, R7\n\tMOVV\tR0, R8\n\tMOVV\tR0, R9\n\tMOVV\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVV\tR2, r1+32(FP)\n\tMOVV\tR3, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_mipsx.s",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (mips || mipsle) && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for mips, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-28\n\tJMP syscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-40\n\tJMP syscall·Syscall6(SB)\n\nTEXT ·Syscall9(SB),NOSPLIT,$0-52\n\tJMP syscall·Syscall9(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-24\n\tJAL\truntime·entersyscall(SB)\n\tMOVW\ta1+4(FP), R4\n\tMOVW\ta2+8(FP), R5\n\tMOVW\ta3+12(FP), R6\n\tMOVW\tR0, R7\n\tMOVW\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVW\tR2, r1+16(FP)\t// r1\n\tMOVW\tR3, r2+20(FP)\t// r2\n\tJAL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-28\n\tJMP syscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-40\n\tJMP syscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-24\n\tMOVW\ta1+4(FP), R4\n\tMOVW\ta2+8(FP), R5\n\tMOVW\ta3+12(FP), R6\n\tMOVW\ttrap+0(FP), R2\t// syscall entry\n\tSYSCALL\n\tMOVW\tR2, r1+16(FP)\n\tMOVW\tR3, r2+20(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (ppc64 || ppc64le) && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for ppc64, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tBL\truntime·entersyscall(SB)\n\tMOVD\ta1+8(FP), R3\n\tMOVD\ta2+16(FP), R4\n\tMOVD\ta3+24(FP), R5\n\tMOVD\tR0, R6\n\tMOVD\tR0, R7\n\tMOVD\tR0, R8\n\tMOVD\ttrap+0(FP), R9\t// syscall entry\n\tSYSCALL R9\n\tMOVD\tR3, r1+32(FP)\n\tMOVD\tR4, r2+40(FP)\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVD\ta1+8(FP), R3\n\tMOVD\ta2+16(FP), R4\n\tMOVD\ta3+24(FP), R5\n\tMOVD\tR0, R6\n\tMOVD\tR0, R7\n\tMOVD\tR0, R8\n\tMOVD\ttrap+0(FP), R9\t// syscall entry\n\tSYSCALL R9\n\tMOVD\tR3, r1+32(FP)\n\tMOVD\tR4, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_riscv64.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build riscv64 && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for linux/riscv64.\n//\n// Where available, just jump to package syscall's implementation of\n// these functions.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tCALL\truntime·entersyscall(SB)\n\tMOV\ta1+8(FP), A0\n\tMOV\ta2+16(FP), A1\n\tMOV\ta3+24(FP), A2\n\tMOV\ttrap+0(FP), A7\t// syscall entry\n\tECALL\n\tMOV\tA0, r1+32(FP)\t// r1\n\tMOV\tA1, r2+40(FP)\t// r2\n\tCALL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOV\ta1+8(FP), A0\n\tMOV\ta2+16(FP), A1\n\tMOV\ta3+24(FP), A2\n\tMOV\ttrap+0(FP), A7\t// syscall entry\n\tECALL\n\tMOV\tA0, r1+32(FP)\n\tMOV\tA1, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_linux_s390x.s",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && s390x && gc\n\n#include \"textflag.h\"\n\n//\n// System calls for s390x, Linux\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT ·Syscall(SB),NOSPLIT,$0-56\n\tBR\tsyscall·Syscall(SB)\n\nTEXT ·Syscall6(SB),NOSPLIT,$0-80\n\tBR\tsyscall·Syscall6(SB)\n\nTEXT ·SyscallNoError(SB),NOSPLIT,$0-48\n\tBL\truntime·entersyscall(SB)\n\tMOVD\ta1+8(FP), R2\n\tMOVD\ta2+16(FP), R3\n\tMOVD\ta3+24(FP), R4\n\tMOVD\t$0, R5\n\tMOVD\t$0, R6\n\tMOVD\t$0, R7\n\tMOVD\ttrap+0(FP), R1\t// syscall entry\n\tSYSCALL\n\tMOVD\tR2, r1+32(FP)\n\tMOVD\tR3, r2+40(FP)\n\tBL\truntime·exitsyscall(SB)\n\tRET\n\nTEXT ·RawSyscall(SB),NOSPLIT,$0-56\n\tBR\tsyscall·RawSyscall(SB)\n\nTEXT ·RawSyscall6(SB),NOSPLIT,$0-80\n\tBR\tsyscall·RawSyscall6(SB)\n\nTEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48\n\tMOVD\ta1+8(FP), R2\n\tMOVD\ta2+16(FP), R3\n\tMOVD\ta3+24(FP), R4\n\tMOVD\t$0, R5\n\tMOVD\t$0, R6\n\tMOVD\t$0, R7\n\tMOVD\ttrap+0(FP), R1\t// syscall entry\n\tSYSCALL\n\tMOVD\tR2, r1+32(FP)\n\tMOVD\tR3, r2+40(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System call support for mips64, OpenBSD\n//\n\n// Just jump to package syscall's implementation for all these functions.\n// The runtime may know about them.\n\nTEXT\t·Syscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·Syscall(SB)\n\nTEXT\t·Syscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·Syscall6(SB)\n\nTEXT\t·Syscall9(SB),NOSPLIT,$0-104\n\tJMP\tsyscall·Syscall9(SB)\n\nTEXT\t·RawSyscall(SB),NOSPLIT,$0-56\n\tJMP\tsyscall·RawSyscall(SB)\n\nTEXT\t·RawSyscall6(SB),NOSPLIT,$0-80\n\tJMP\tsyscall·RawSyscall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_solaris_amd64.s",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gc\n\n#include \"textflag.h\"\n\n//\n// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go\n//\n\nTEXT ·sysvicall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·sysvicall6(SB)\n\nTEXT ·rawSysvicall6(SB),NOSPLIT,$0-88\n\tJMP\tsyscall·rawSysvicall6(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/asm_zos_s390x.s",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x && gc\n\n#include \"textflag.h\"\n\n#define PSALAA            1208(R0)\n#define GTAB64(x)           80(x)\n#define LCA64(x)            88(x)\n#define SAVSTACK_ASYNC(x)  336(x) // in the LCA\n#define CAA(x)               8(x)\n#define CEECAATHDID(x)     976(x) // in the CAA\n#define EDCHPXV(x)        1016(x) // in the CAA\n#define GOCB(x)           1104(x) // in the CAA\n\n// SS_*, where x=SAVSTACK_ASYNC\n#define SS_LE(x)             0(x)\n#define SS_GO(x)             8(x)\n#define SS_ERRNO(x)         16(x)\n#define SS_ERRNOJR(x)       20(x)\n\n// Function Descriptor Offsets\n#define __errno  0x156*16\n#define __err2ad 0x16C*16\n\n// Call Instructions\n#define LE_CALL    BYTE $0x0D; BYTE $0x76 // BL R7, R6\n#define SVC_LOAD   BYTE $0x0A; BYTE $0x08 // SVC 08 LOAD\n#define SVC_DELETE BYTE $0x0A; BYTE $0x09 // SVC 09 DELETE\n\nDATA zosLibVec<>(SB)/8, $0\nGLOBL zosLibVec<>(SB), NOPTR, $8\n\nTEXT ·initZosLibVec(SB), NOSPLIT|NOFRAME, $0-0\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD CAA(R8), R8\n\tMOVD EDCHPXV(R8), R8\n\tMOVD R8, zosLibVec<>(SB)\n\tRET\n\nTEXT ·GetZosLibVec(SB), NOSPLIT|NOFRAME, $0-0\n\tMOVD zosLibVec<>(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·clearErrno(SB), NOSPLIT, $0-0\n\tBL   addrerrno<>(SB)\n\tMOVD $0, 0(R3)\n\tRET\n\n// Returns the address of errno in R3.\nTEXT addrerrno<>(SB), NOSPLIT|NOFRAME, $0-0\n\t// Get library control area (LCA).\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\n\t// Get __errno FuncDesc.\n\tMOVD CAA(R8), R9\n\tMOVD EDCHPXV(R9), R9\n\tADD  $(__errno), R9\n\tLMG  0(R9), R5, R6\n\n\t// Switch to saved LE stack.\n\tMOVD SAVSTACK_ASYNC(R8), R9\n\tMOVD 0(R9), R4\n\tMOVD $0, 0(R9)\n\n\t// Call __errno function.\n\tLE_CALL\n\tNOPH\n\n\t// Switch back to Go stack.\n\tXOR  R0, R0    // Restore R0 to $0.\n\tMOVD R4, 0(R9) // Save stack pointer.\n\tRET\n\n// func svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64)\nTEXT ·svcCall(SB), NOSPLIT, $0\n\tBL   runtime·save_g(SB)     // Save g and stack pointer\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD SAVSTACK_ASYNC(R8), R9\n\tMOVD R15, 0(R9)\n\n\tMOVD argv+8(FP), R1   // Move function arguments into registers\n\tMOVD dsa+16(FP), g\n\tMOVD fnptr+0(FP), R15\n\n\tBYTE $0x0D // Branch to function\n\tBYTE $0xEF\n\n\tBL   runtime·load_g(SB)     // Restore g and stack pointer\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD SAVSTACK_ASYNC(R8), R9\n\tMOVD 0(R9), R15\n\n\tRET\n\n// func svcLoad(name *byte) unsafe.Pointer\nTEXT ·svcLoad(SB), NOSPLIT, $0\n\tMOVD R15, R2         // Save go stack pointer\n\tMOVD name+0(FP), R0  // Move SVC args into registers\n\tMOVD $0x80000000, R1\n\tMOVD $0, R15\n\tSVC_LOAD\n\tMOVW R15, R3         // Save return code from SVC\n\tMOVD R2, R15         // Restore go stack pointer\n\tCMP  R3, $0          // Check SVC return code\n\tBNE  error\n\n\tMOVD $-2, R3       // Reset last bit of entry point to zero\n\tAND  R0, R3\n\tMOVD R3, ret+8(FP) // Return entry point returned by SVC\n\tCMP  R0, R3        // Check if last bit of entry point was set\n\tBNE  done\n\n\tMOVD R15, R2 // Save go stack pointer\n\tMOVD $0, R15 // Move SVC args into registers (entry point still in r0 from SVC 08)\n\tSVC_DELETE\n\tMOVD R2, R15 // Restore go stack pointer\n\nerror:\n\tMOVD $0, ret+8(FP) // Return 0 on failure\n\ndone:\n\tXOR R0, R0 // Reset r0 to 0\n\tRET\n\n// func svcUnload(name *byte, fnptr unsafe.Pointer) int64\nTEXT ·svcUnload(SB), NOSPLIT, $0\n\tMOVD R15, R2          // Save go stack pointer\n\tMOVD name+0(FP), R0   // Move SVC args into registers\n\tMOVD fnptr+8(FP), R15\n\tSVC_DELETE\n\tXOR  R0, R0           // Reset r0 to 0\n\tMOVD R15, R1          // Save SVC return code\n\tMOVD R2, R15          // Restore go stack pointer\n\tMOVD R1, ret+16(FP)   // Return SVC return code\n\tRET\n\n// func gettid() uint64\nTEXT ·gettid(SB), NOSPLIT, $0\n\t// Get library control area (LCA).\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\n\t// Get CEECAATHDID\n\tMOVD CAA(R8), R9\n\tMOVD CEECAATHDID(R9), R9\n\tMOVD R9, ret+0(FP)\n\n\tRET\n\n//\n// Call LE function, if the return is -1\n// errno and errno2 is retrieved\n//\nTEXT ·CallLeFuncWithErr(SB), NOSPLIT, $0\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD CAA(R8), R9\n\tMOVD g, GOCB(R9)\n\n\t// Restore LE stack.\n\tMOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address\n\tMOVD 0(R9), R4              // R4-> restore previously saved stack frame pointer\n\n\tMOVD parms_base+8(FP), R7 // R7 -> argument array\n\tMOVD parms_len+16(FP), R8 // R8 number of arguments\n\n\t//  arg 1 ---> R1\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tMOVD 0(R7), R1\n\n\t//  arg 2 ---> R2\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tADD  $8, R7\n\tMOVD 0(R7), R2\n\n\t//  arg 3 --> R3\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tADD  $8, R7\n\tMOVD 0(R7), R3\n\n\tCMP  R8, $0\n\tBEQ  docall\n\tMOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument\n\nrepeat:\n\tADD  $8, R7\n\tMOVD 0(R7), R0      // advance arg pointer by 8 byte\n\tADD  $8, R6         // advance LE argument address by 8 byte\n\tMOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame\n\tSUB  $1, R8\n\tCMP  R8, $0\n\tBNE  repeat\n\ndocall:\n\tMOVD funcdesc+0(FP), R8 // R8-> function descriptor\n\tLMG  0(R8), R5, R6\n\tMOVD $0, 0(R9)          // R9 address of SAVSTACK_ASYNC\n\tLE_CALL                 // balr R7, R6 (return #1)\n\tNOPH\n\tMOVD R3, ret+32(FP)\n\tCMP  R3, $-1            // compare result to -1\n\tBNE  done\n\n\t// retrieve errno and errno2\n\tMOVD  zosLibVec<>(SB), R8\n\tADD   $(__errno), R8\n\tLMG   0(R8), R5, R6\n\tLE_CALL                   // balr R7, R6 __errno (return #3)\n\tNOPH\n\tMOVWZ 0(R3), R3\n\tMOVD  R3, err+48(FP)\n\tMOVD  zosLibVec<>(SB), R8\n\tADD   $(__err2ad), R8\n\tLMG   0(R8), R5, R6\n\tLE_CALL                   // balr R7, R6 __err2ad (return #2)\n\tNOPH\n\tMOVW  (R3), R2            // retrieve errno2\n\tMOVD  R2, errno2+40(FP)   // store in return area\n\ndone:\n\tMOVD R4, 0(R9)            // Save stack pointer.\n\tRET\n\n//\n// Call LE function, if the return is 0\n// errno and errno2 is retrieved\n//\nTEXT ·CallLeFuncWithPtrReturn(SB), NOSPLIT, $0\n\tMOVW PSALAA, R8\n\tMOVD LCA64(R8), R8\n\tMOVD CAA(R8), R9\n\tMOVD g, GOCB(R9)\n\n\t// Restore LE stack.\n\tMOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address\n\tMOVD 0(R9), R4              // R4-> restore previously saved stack frame pointer\n\n\tMOVD parms_base+8(FP), R7 // R7 -> argument array\n\tMOVD parms_len+16(FP), R8 // R8 number of arguments\n\n\t//  arg 1 ---> R1\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tMOVD 0(R7), R1\n\n\t//  arg 2 ---> R2\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tADD  $8, R7\n\tMOVD 0(R7), R2\n\n\t//  arg 3 --> R3\n\tCMP  R8, $0\n\tBEQ  docall\n\tSUB  $1, R8\n\tADD  $8, R7\n\tMOVD 0(R7), R3\n\n\tCMP  R8, $0\n\tBEQ  docall\n\tMOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument\n\nrepeat:\n\tADD  $8, R7\n\tMOVD 0(R7), R0      // advance arg pointer by 8 byte\n\tADD  $8, R6         // advance LE argument address by 8 byte\n\tMOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame\n\tSUB  $1, R8\n\tCMP  R8, $0\n\tBNE  repeat\n\ndocall:\n\tMOVD funcdesc+0(FP), R8 // R8-> function descriptor\n\tLMG  0(R8), R5, R6\n\tMOVD $0, 0(R9)          // R9 address of SAVSTACK_ASYNC\n\tLE_CALL                 // balr R7, R6 (return #1)\n\tNOPH\n\tMOVD R3, ret+32(FP)\n\tCMP  R3, $0             // compare result to 0\n\tBNE  done\n\n\t// retrieve errno and errno2\n\tMOVD  zosLibVec<>(SB), R8\n\tADD   $(__errno), R8\n\tLMG   0(R8), R5, R6\n\tLE_CALL                   // balr R7, R6 __errno (return #3)\n\tNOPH\n\tMOVWZ 0(R3), R3\n\tMOVD  R3, err+48(FP)\n\tMOVD  zosLibVec<>(SB), R8\n\tADD   $(__err2ad), R8\n\tLMG   0(R8), R5, R6\n\tLE_CALL                   // balr R7, R6 __err2ad (return #2)\n\tNOPH\n\tMOVW  (R3), R2            // retrieve errno2\n\tMOVD  R2, errno2+40(FP)   // store in return area\n\tXOR   R2, R2\n\tMOVWZ R2, (R3)            // clear errno2\n\ndone:\n\tMOVD R4, 0(R9)            // Save stack pointer.\n\tRET\n\n//\n// function to test if a pointer can be safely dereferenced (content read)\n// return 0 for succces\n//\nTEXT ·ptrtest(SB), NOSPLIT, $0-16\n\tMOVD arg+0(FP), R10 // test pointer in R10\n\n\t// set up R2 to point to CEECAADMC\n\tBYTE $0xE3; BYTE $0x20; BYTE $0x04; BYTE $0xB8; BYTE $0x00; BYTE $0x17 // llgt  2,1208\n\tBYTE $0xB9; BYTE $0x17; BYTE $0x00; BYTE $0x22                         // llgtr 2,2\n\tBYTE $0xA5; BYTE $0x26; BYTE $0x7F; BYTE $0xFF                         // nilh  2,32767\n\tBYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x58; BYTE $0x00; BYTE $0x04 // lg    2,88(2)\n\tBYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x08; BYTE $0x00; BYTE $0x04 // lg    2,8(2)\n\tBYTE $0x41; BYTE $0x22; BYTE $0x03; BYTE $0x68                         // la    2,872(2)\n\n\t// set up R5 to point to the \"shunt\" path which set 1 to R3 (failure)\n\tBYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x33 // xgr   3,3\n\tBYTE $0xA7; BYTE $0x55; BYTE $0x00; BYTE $0x04 // bras  5,lbl1\n\tBYTE $0xA7; BYTE $0x39; BYTE $0x00; BYTE $0x01 // lghi  3,1\n\n\t// if r3 is not zero (failed) then branch to finish\n\tBYTE $0xB9; BYTE $0x02; BYTE $0x00; BYTE $0x33 // lbl1     ltgr  3,3\n\tBYTE $0xA7; BYTE $0x74; BYTE $0x00; BYTE $0x08 // brc   b'0111',lbl2\n\n\t// stomic store shunt address in R5 into CEECAADMC\n\tBYTE $0xE3; BYTE $0x52; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg   5,0(2)\n\n\t// now try reading from the test pointer in R10, if it fails it branches to the \"lghi\" instruction above\n\tBYTE $0xE3; BYTE $0x9A; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x04 // lg    9,0(10)\n\n\t// finish here, restore 0 into CEECAADMC\n\tBYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x99                         // lbl2     xgr   9,9\n\tBYTE $0xE3; BYTE $0x92; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg   9,0(2)\n\tMOVD R3, ret+8(FP)                                                     // result in R3\n\tRET\n\n//\n// function to test if a untptr can be loaded from a pointer\n// return 1: the 8-byte content\n//        2: 0 for success, 1 for failure\n//\n// func safeload(ptr uintptr) ( value uintptr, error uintptr)\nTEXT ·safeload(SB), NOSPLIT, $0-24\n\tMOVD ptr+0(FP), R10                                                    // test pointer in R10\n\tMOVD $0x0, R6\n\tBYTE $0xE3; BYTE $0x20; BYTE $0x04; BYTE $0xB8; BYTE $0x00; BYTE $0x17 // llgt  2,1208\n\tBYTE $0xB9; BYTE $0x17; BYTE $0x00; BYTE $0x22                         // llgtr 2,2\n\tBYTE $0xA5; BYTE $0x26; BYTE $0x7F; BYTE $0xFF                         // nilh  2,32767\n\tBYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x58; BYTE $0x00; BYTE $0x04 // lg    2,88(2)\n\tBYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x08; BYTE $0x00; BYTE $0x04 // lg    2,8(2)\n\tBYTE $0x41; BYTE $0x22; BYTE $0x03; BYTE $0x68                         // la    2,872(2)\n\tBYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x33                         // xgr   3,3\n\tBYTE $0xA7; BYTE $0x55; BYTE $0x00; BYTE $0x04                         // bras  5,lbl1\n\tBYTE $0xA7; BYTE $0x39; BYTE $0x00; BYTE $0x01                         // lghi  3,1\n\tBYTE $0xB9; BYTE $0x02; BYTE $0x00; BYTE $0x33                         // lbl1     ltgr  3,3\n\tBYTE $0xA7; BYTE $0x74; BYTE $0x00; BYTE $0x08                         // brc   b'0111',lbl2\n\tBYTE $0xE3; BYTE $0x52; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 5,0(2)\n\tBYTE $0xE3; BYTE $0x6A; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x04 // lg    6,0(10)\n\tBYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x99                         // lbl2     xgr   9,9\n\tBYTE $0xE3; BYTE $0x92; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg   9,0(2)\n\tMOVD R6, value+8(FP)                                                   // result in R6\n\tMOVD R3, error+16(FP)                                                  // error in R3\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/bluetooth_linux.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Bluetooth sockets and messages\n\npackage unix\n\n// Bluetooth Protocols\nconst (\n\tBTPROTO_L2CAP  = 0\n\tBTPROTO_HCI    = 1\n\tBTPROTO_SCO    = 2\n\tBTPROTO_RFCOMM = 3\n\tBTPROTO_BNEP   = 4\n\tBTPROTO_CMTP   = 5\n\tBTPROTO_HIDP   = 6\n\tBTPROTO_AVDTP  = 7\n)\n\nconst (\n\tHCI_CHANNEL_RAW     = 0\n\tHCI_CHANNEL_USER    = 1\n\tHCI_CHANNEL_MONITOR = 2\n\tHCI_CHANNEL_CONTROL = 3\n\tHCI_CHANNEL_LOGGING = 4\n)\n\n// Socketoption Level\nconst (\n\tSOL_BLUETOOTH = 0x112\n\tSOL_HCI       = 0x0\n\tSOL_L2CAP     = 0x6\n\tSOL_RFCOMM    = 0x12\n\tSOL_SCO       = 0x11\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/bpxsvc_zos.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos\n\npackage unix\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"unsafe\"\n)\n\n//go:noescape\nfunc bpxcall(plist []unsafe.Pointer, bpx_offset int64)\n\n//go:noescape\nfunc A2e([]byte)\n\n//go:noescape\nfunc E2a([]byte)\n\nconst (\n\tBPX4STA = 192  // stat\n\tBPX4FST = 104  // fstat\n\tBPX4LST = 132  // lstat\n\tBPX4OPN = 156  // open\n\tBPX4CLO = 72   // close\n\tBPX4CHR = 500  // chattr\n\tBPX4FCR = 504  // fchattr\n\tBPX4LCR = 1180 // lchattr\n\tBPX4CTW = 492  // cond_timed_wait\n\tBPX4GTH = 1056 // __getthent\n\tBPX4PTQ = 412  // pthread_quiesc\n\tBPX4PTR = 320  // ptrace\n)\n\nconst (\n\t//options\n\t//byte1\n\tBPX_OPNFHIGH = 0x80\n\t//byte2\n\tBPX_OPNFEXEC = 0x80\n\t//byte3\n\tBPX_O_NOLARGEFILE = 0x08\n\tBPX_O_LARGEFILE   = 0x04\n\tBPX_O_ASYNCSIG    = 0x02\n\tBPX_O_SYNC        = 0x01\n\t//byte4\n\tBPX_O_CREXCL   = 0xc0\n\tBPX_O_CREAT    = 0x80\n\tBPX_O_EXCL     = 0x40\n\tBPX_O_NOCTTY   = 0x20\n\tBPX_O_TRUNC    = 0x10\n\tBPX_O_APPEND   = 0x08\n\tBPX_O_NONBLOCK = 0x04\n\tBPX_FNDELAY    = 0x04\n\tBPX_O_RDWR     = 0x03\n\tBPX_O_RDONLY   = 0x02\n\tBPX_O_WRONLY   = 0x01\n\tBPX_O_ACCMODE  = 0x03\n\tBPX_O_GETFL    = 0x0f\n\n\t//mode\n\t// byte1 (file type)\n\tBPX_FT_DIR      = 1\n\tBPX_FT_CHARSPEC = 2\n\tBPX_FT_REGFILE  = 3\n\tBPX_FT_FIFO     = 4\n\tBPX_FT_SYMLINK  = 5\n\tBPX_FT_SOCKET   = 6\n\t//byte3\n\tBPX_S_ISUID  = 0x08\n\tBPX_S_ISGID  = 0x04\n\tBPX_S_ISVTX  = 0x02\n\tBPX_S_IRWXU1 = 0x01\n\tBPX_S_IRUSR  = 0x01\n\t//byte4\n\tBPX_S_IRWXU2 = 0xc0\n\tBPX_S_IWUSR  = 0x80\n\tBPX_S_IXUSR  = 0x40\n\tBPX_S_IRWXG  = 0x38\n\tBPX_S_IRGRP  = 0x20\n\tBPX_S_IWGRP  = 0x10\n\tBPX_S_IXGRP  = 0x08\n\tBPX_S_IRWXOX = 0x07\n\tBPX_S_IROTH  = 0x04\n\tBPX_S_IWOTH  = 0x02\n\tBPX_S_IXOTH  = 0x01\n\n\tCW_INTRPT  = 1\n\tCW_CONDVAR = 32\n\tCW_TIMEOUT = 64\n\n\tPGTHA_NEXT        = 2\n\tPGTHA_CURRENT     = 1\n\tPGTHA_FIRST       = 0\n\tPGTHA_LAST        = 3\n\tPGTHA_PROCESS     = 0x80\n\tPGTHA_CONTTY      = 0x40\n\tPGTHA_PATH        = 0x20\n\tPGTHA_COMMAND     = 0x10\n\tPGTHA_FILEDATA    = 0x08\n\tPGTHA_THREAD      = 0x04\n\tPGTHA_PTAG        = 0x02\n\tPGTHA_COMMANDLONG = 0x01\n\tPGTHA_THREADFAST  = 0x80\n\tPGTHA_FILEPATH    = 0x40\n\tPGTHA_THDSIGMASK  = 0x20\n\t// thread quiece mode\n\tQUIESCE_TERM       int32 = 1\n\tQUIESCE_FORCE      int32 = 2\n\tQUIESCE_QUERY      int32 = 3\n\tQUIESCE_FREEZE     int32 = 4\n\tQUIESCE_UNFREEZE   int32 = 5\n\tFREEZE_THIS_THREAD int32 = 6\n\tFREEZE_EXIT        int32 = 8\n\tQUIESCE_SRB        int32 = 9\n)\n\ntype Pgtha struct {\n\tPid        uint32 // 0\n\tTid0       uint32 // 4\n\tTid1       uint32\n\tAccesspid  byte    // C\n\tAccesstid  byte    // D\n\tAccessasid uint16  // E\n\tLoginname  [8]byte // 10\n\tFlag1      byte    // 18\n\tFlag1b2    byte    // 19\n}\n\ntype Bpxystat_t struct { // DSECT BPXYSTAT\n\tSt_id           [4]uint8  // 0\n\tSt_length       uint16    // 0x4\n\tSt_version      uint16    // 0x6\n\tSt_mode         uint32    // 0x8\n\tSt_ino          uint32    // 0xc\n\tSt_dev          uint32    // 0x10\n\tSt_nlink        uint32    // 0x14\n\tSt_uid          uint32    // 0x18\n\tSt_gid          uint32    // 0x1c\n\tSt_size         uint64    // 0x20\n\tSt_atime        uint32    // 0x28\n\tSt_mtime        uint32    // 0x2c\n\tSt_ctime        uint32    // 0x30\n\tSt_rdev         uint32    // 0x34\n\tSt_auditoraudit uint32    // 0x38\n\tSt_useraudit    uint32    // 0x3c\n\tSt_blksize      uint32    // 0x40\n\tSt_createtime   uint32    // 0x44\n\tSt_auditid      [4]uint32 // 0x48\n\tSt_res01        uint32    // 0x58\n\tFt_ccsid        uint16    // 0x5c\n\tFt_flags        uint16    // 0x5e\n\tSt_res01a       [2]uint32 // 0x60\n\tSt_res02        uint32    // 0x68\n\tSt_blocks       uint32    // 0x6c\n\tSt_opaque       [3]uint8  // 0x70\n\tSt_visible      uint8     // 0x73\n\tSt_reftime      uint32    // 0x74\n\tSt_fid          uint64    // 0x78\n\tSt_filefmt      uint8     // 0x80\n\tSt_fspflag2     uint8     // 0x81\n\tSt_res03        [2]uint8  // 0x82\n\tSt_ctimemsec    uint32    // 0x84\n\tSt_seclabel     [8]uint8  // 0x88\n\tSt_res04        [4]uint8  // 0x90\n\t// end of version 1\n\t_               uint32    // 0x94\n\tSt_atime64      uint64    // 0x98\n\tSt_mtime64      uint64    // 0xa0\n\tSt_ctime64      uint64    // 0xa8\n\tSt_createtime64 uint64    // 0xb0\n\tSt_reftime64    uint64    // 0xb8\n\t_               uint64    // 0xc0\n\tSt_res05        [16]uint8 // 0xc8\n\t// end of version 2\n}\n\ntype BpxFilestatus struct {\n\tOflag1 byte\n\tOflag2 byte\n\tOflag3 byte\n\tOflag4 byte\n}\n\ntype BpxMode struct {\n\tFtype byte\n\tMode1 byte\n\tMode2 byte\n\tMode3 byte\n}\n\n// Thr attribute structure for extended attributes\ntype Bpxyatt_t struct { // DSECT BPXYATT\n\tAtt_id           [4]uint8\n\tAtt_version      uint16\n\tAtt_res01        [2]uint8\n\tAtt_setflags1    uint8\n\tAtt_setflags2    uint8\n\tAtt_setflags3    uint8\n\tAtt_setflags4    uint8\n\tAtt_mode         uint32\n\tAtt_uid          uint32\n\tAtt_gid          uint32\n\tAtt_opaquemask   [3]uint8\n\tAtt_visblmaskres uint8\n\tAtt_opaque       [3]uint8\n\tAtt_visibleres   uint8\n\tAtt_size_h       uint32\n\tAtt_size_l       uint32\n\tAtt_atime        uint32\n\tAtt_mtime        uint32\n\tAtt_auditoraudit uint32\n\tAtt_useraudit    uint32\n\tAtt_ctime        uint32\n\tAtt_reftime      uint32\n\t// end of version 1\n\tAtt_filefmt uint8\n\tAtt_res02   [3]uint8\n\tAtt_filetag uint32\n\tAtt_res03   [8]uint8\n\t// end of version 2\n\tAtt_atime64   uint64\n\tAtt_mtime64   uint64\n\tAtt_ctime64   uint64\n\tAtt_reftime64 uint64\n\tAtt_seclabel  [8]uint8\n\tAtt_ver3res02 [8]uint8\n\t// end of version 3\n}\n\nfunc BpxOpen(name string, options *BpxFilestatus, mode *BpxMode) (rv int32, rc int32, rn int32) {\n\tif len(name) < 1024 {\n\t\tvar namebuf [1024]byte\n\t\tsz := int32(copy(namebuf[:], name))\n\t\tA2e(namebuf[:sz])\n\t\tvar parms [7]unsafe.Pointer\n\t\tparms[0] = unsafe.Pointer(&sz)\n\t\tparms[1] = unsafe.Pointer(&namebuf[0])\n\t\tparms[2] = unsafe.Pointer(options)\n\t\tparms[3] = unsafe.Pointer(mode)\n\t\tparms[4] = unsafe.Pointer(&rv)\n\t\tparms[5] = unsafe.Pointer(&rc)\n\t\tparms[6] = unsafe.Pointer(&rn)\n\t\tbpxcall(parms[:], BPX4OPN)\n\t\treturn rv, rc, rn\n\t}\n\treturn -1, -1, -1\n}\n\nfunc BpxClose(fd int32) (rv int32, rc int32, rn int32) {\n\tvar parms [4]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&fd)\n\tparms[1] = unsafe.Pointer(&rv)\n\tparms[2] = unsafe.Pointer(&rc)\n\tparms[3] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4CLO)\n\treturn rv, rc, rn\n}\n\nfunc BpxFileFStat(fd int32, st *Bpxystat_t) (rv int32, rc int32, rn int32) {\n\tst.St_id = [4]uint8{0xe2, 0xe3, 0xc1, 0xe3}\n\tst.St_version = 2\n\tstat_sz := uint32(unsafe.Sizeof(*st))\n\tvar parms [6]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&fd)\n\tparms[1] = unsafe.Pointer(&stat_sz)\n\tparms[2] = unsafe.Pointer(st)\n\tparms[3] = unsafe.Pointer(&rv)\n\tparms[4] = unsafe.Pointer(&rc)\n\tparms[5] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4FST)\n\treturn rv, rc, rn\n}\n\nfunc BpxFileStat(name string, st *Bpxystat_t) (rv int32, rc int32, rn int32) {\n\tif len(name) < 1024 {\n\t\tvar namebuf [1024]byte\n\t\tsz := int32(copy(namebuf[:], name))\n\t\tA2e(namebuf[:sz])\n\t\tst.St_id = [4]uint8{0xe2, 0xe3, 0xc1, 0xe3}\n\t\tst.St_version = 2\n\t\tstat_sz := uint32(unsafe.Sizeof(*st))\n\t\tvar parms [7]unsafe.Pointer\n\t\tparms[0] = unsafe.Pointer(&sz)\n\t\tparms[1] = unsafe.Pointer(&namebuf[0])\n\t\tparms[2] = unsafe.Pointer(&stat_sz)\n\t\tparms[3] = unsafe.Pointer(st)\n\t\tparms[4] = unsafe.Pointer(&rv)\n\t\tparms[5] = unsafe.Pointer(&rc)\n\t\tparms[6] = unsafe.Pointer(&rn)\n\t\tbpxcall(parms[:], BPX4STA)\n\t\treturn rv, rc, rn\n\t}\n\treturn -1, -1, -1\n}\n\nfunc BpxFileLStat(name string, st *Bpxystat_t) (rv int32, rc int32, rn int32) {\n\tif len(name) < 1024 {\n\t\tvar namebuf [1024]byte\n\t\tsz := int32(copy(namebuf[:], name))\n\t\tA2e(namebuf[:sz])\n\t\tst.St_id = [4]uint8{0xe2, 0xe3, 0xc1, 0xe3}\n\t\tst.St_version = 2\n\t\tstat_sz := uint32(unsafe.Sizeof(*st))\n\t\tvar parms [7]unsafe.Pointer\n\t\tparms[0] = unsafe.Pointer(&sz)\n\t\tparms[1] = unsafe.Pointer(&namebuf[0])\n\t\tparms[2] = unsafe.Pointer(&stat_sz)\n\t\tparms[3] = unsafe.Pointer(st)\n\t\tparms[4] = unsafe.Pointer(&rv)\n\t\tparms[5] = unsafe.Pointer(&rc)\n\t\tparms[6] = unsafe.Pointer(&rn)\n\t\tbpxcall(parms[:], BPX4LST)\n\t\treturn rv, rc, rn\n\t}\n\treturn -1, -1, -1\n}\n\nfunc BpxChattr(path string, attr *Bpxyatt_t) (rv int32, rc int32, rn int32) {\n\tif len(path) >= 1024 {\n\t\treturn -1, -1, -1\n\t}\n\tvar namebuf [1024]byte\n\tsz := int32(copy(namebuf[:], path))\n\tA2e(namebuf[:sz])\n\tattr_sz := uint32(unsafe.Sizeof(*attr))\n\tvar parms [7]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&sz)\n\tparms[1] = unsafe.Pointer(&namebuf[0])\n\tparms[2] = unsafe.Pointer(&attr_sz)\n\tparms[3] = unsafe.Pointer(attr)\n\tparms[4] = unsafe.Pointer(&rv)\n\tparms[5] = unsafe.Pointer(&rc)\n\tparms[6] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4CHR)\n\treturn rv, rc, rn\n}\n\nfunc BpxLchattr(path string, attr *Bpxyatt_t) (rv int32, rc int32, rn int32) {\n\tif len(path) >= 1024 {\n\t\treturn -1, -1, -1\n\t}\n\tvar namebuf [1024]byte\n\tsz := int32(copy(namebuf[:], path))\n\tA2e(namebuf[:sz])\n\tattr_sz := uint32(unsafe.Sizeof(*attr))\n\tvar parms [7]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&sz)\n\tparms[1] = unsafe.Pointer(&namebuf[0])\n\tparms[2] = unsafe.Pointer(&attr_sz)\n\tparms[3] = unsafe.Pointer(attr)\n\tparms[4] = unsafe.Pointer(&rv)\n\tparms[5] = unsafe.Pointer(&rc)\n\tparms[6] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4LCR)\n\treturn rv, rc, rn\n}\n\nfunc BpxFchattr(fd int32, attr *Bpxyatt_t) (rv int32, rc int32, rn int32) {\n\tattr_sz := uint32(unsafe.Sizeof(*attr))\n\tvar parms [6]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&fd)\n\tparms[1] = unsafe.Pointer(&attr_sz)\n\tparms[2] = unsafe.Pointer(attr)\n\tparms[3] = unsafe.Pointer(&rv)\n\tparms[4] = unsafe.Pointer(&rc)\n\tparms[5] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4FCR)\n\treturn rv, rc, rn\n}\n\nfunc BpxCondTimedWait(sec uint32, nsec uint32, events uint32, secrem *uint32, nsecrem *uint32) (rv int32, rc int32, rn int32) {\n\tvar parms [8]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&sec)\n\tparms[1] = unsafe.Pointer(&nsec)\n\tparms[2] = unsafe.Pointer(&events)\n\tparms[3] = unsafe.Pointer(secrem)\n\tparms[4] = unsafe.Pointer(nsecrem)\n\tparms[5] = unsafe.Pointer(&rv)\n\tparms[6] = unsafe.Pointer(&rc)\n\tparms[7] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4CTW)\n\treturn rv, rc, rn\n}\nfunc BpxGetthent(in *Pgtha, outlen *uint32, out unsafe.Pointer) (rv int32, rc int32, rn int32) {\n\tvar parms [7]unsafe.Pointer\n\tinlen := uint32(26) // nothing else will work. Go says Pgtha is 28-byte because of alignment, but Pgtha is \"packed\" and must be 26-byte\n\tparms[0] = unsafe.Pointer(&inlen)\n\tparms[1] = unsafe.Pointer(&in)\n\tparms[2] = unsafe.Pointer(outlen)\n\tparms[3] = unsafe.Pointer(&out)\n\tparms[4] = unsafe.Pointer(&rv)\n\tparms[5] = unsafe.Pointer(&rc)\n\tparms[6] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4GTH)\n\treturn rv, rc, rn\n}\nfunc ZosJobname() (jobname string, err error) {\n\tvar pgtha Pgtha\n\tpgtha.Pid = uint32(Getpid())\n\tpgtha.Accesspid = PGTHA_CURRENT\n\tpgtha.Flag1 = PGTHA_PROCESS\n\tvar out [256]byte\n\tvar outlen uint32\n\toutlen = 256\n\trv, rc, rn := BpxGetthent(&pgtha, &outlen, unsafe.Pointer(&out[0]))\n\tif rv == 0 {\n\t\tgthc := []byte{0x87, 0xa3, 0x88, 0x83} // 'gthc' in ebcdic\n\t\tix := bytes.Index(out[:], gthc)\n\t\tif ix == -1 {\n\t\t\terr = fmt.Errorf(\"BPX4GTH: gthc return data not found\")\n\t\t\treturn\n\t\t}\n\t\tjn := out[ix+80 : ix+88] // we didn't declare Pgthc, but jobname is 8-byte at offset 80\n\t\tE2a(jn)\n\t\tjobname = string(bytes.TrimRight(jn, \" \"))\n\n\t} else {\n\t\terr = fmt.Errorf(\"BPX4GTH: rc=%d errno=%d reason=code=0x%x\", rv, rc, rn)\n\t}\n\treturn\n}\nfunc Bpx4ptq(code int32, data string) (rv int32, rc int32, rn int32) {\n\tvar userdata [8]byte\n\tvar parms [5]unsafe.Pointer\n\tcopy(userdata[:], data+\"        \")\n\tA2e(userdata[:])\n\tparms[0] = unsafe.Pointer(&code)\n\tparms[1] = unsafe.Pointer(&userdata[0])\n\tparms[2] = unsafe.Pointer(&rv)\n\tparms[3] = unsafe.Pointer(&rc)\n\tparms[4] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4PTQ)\n\treturn rv, rc, rn\n}\n\nconst (\n\tPT_TRACE_ME             = 0  // Debug this process\n\tPT_READ_I               = 1  // Read a full word\n\tPT_READ_D               = 2  // Read a full word\n\tPT_READ_U               = 3  // Read control info\n\tPT_WRITE_I              = 4  //Write a full word\n\tPT_WRITE_D              = 5  //Write a full word\n\tPT_CONTINUE             = 7  //Continue the process\n\tPT_KILL                 = 8  //Terminate the process\n\tPT_READ_GPR             = 11 // Read GPR, CR, PSW\n\tPT_READ_FPR             = 12 // Read FPR\n\tPT_READ_VR              = 13 // Read VR\n\tPT_WRITE_GPR            = 14 // Write GPR, CR, PSW\n\tPT_WRITE_FPR            = 15 // Write FPR\n\tPT_WRITE_VR             = 16 // Write VR\n\tPT_READ_BLOCK           = 17 // Read storage\n\tPT_WRITE_BLOCK          = 19 // Write storage\n\tPT_READ_GPRH            = 20 // Read GPRH\n\tPT_WRITE_GPRH           = 21 // Write GPRH\n\tPT_REGHSET              = 22 // Read all GPRHs\n\tPT_ATTACH               = 30 // Attach to a process\n\tPT_DETACH               = 31 // Detach from a process\n\tPT_REGSET               = 32 // Read all GPRs\n\tPT_REATTACH             = 33 // Reattach to a process\n\tPT_LDINFO               = 34 // Read loader info\n\tPT_MULTI                = 35 // Multi process mode\n\tPT_LD64INFO             = 36 // RMODE64 Info Area\n\tPT_BLOCKREQ             = 40 // Block request\n\tPT_THREAD_INFO          = 60 // Read thread info\n\tPT_THREAD_MODIFY        = 61\n\tPT_THREAD_READ_FOCUS    = 62\n\tPT_THREAD_WRITE_FOCUS   = 63\n\tPT_THREAD_HOLD          = 64\n\tPT_THREAD_SIGNAL        = 65\n\tPT_EXPLAIN              = 66\n\tPT_EVENTS               = 67\n\tPT_THREAD_INFO_EXTENDED = 68\n\tPT_REATTACH2            = 71\n\tPT_CAPTURE              = 72\n\tPT_UNCAPTURE            = 73\n\tPT_GET_THREAD_TCB       = 74\n\tPT_GET_ALET             = 75\n\tPT_SWAPIN               = 76\n\tPT_EXTENDED_EVENT       = 98\n\tPT_RECOVER              = 99  // Debug a program check\n\tPT_GPR0                 = 0   // General purpose register 0\n\tPT_GPR1                 = 1   // General purpose register 1\n\tPT_GPR2                 = 2   // General purpose register 2\n\tPT_GPR3                 = 3   // General purpose register 3\n\tPT_GPR4                 = 4   // General purpose register 4\n\tPT_GPR5                 = 5   // General purpose register 5\n\tPT_GPR6                 = 6   // General purpose register 6\n\tPT_GPR7                 = 7   // General purpose register 7\n\tPT_GPR8                 = 8   // General purpose register 8\n\tPT_GPR9                 = 9   // General purpose register 9\n\tPT_GPR10                = 10  // General purpose register 10\n\tPT_GPR11                = 11  // General purpose register 11\n\tPT_GPR12                = 12  // General purpose register 12\n\tPT_GPR13                = 13  // General purpose register 13\n\tPT_GPR14                = 14  // General purpose register 14\n\tPT_GPR15                = 15  // General purpose register 15\n\tPT_FPR0                 = 16  // Floating point register 0\n\tPT_FPR1                 = 17  // Floating point register 1\n\tPT_FPR2                 = 18  // Floating point register 2\n\tPT_FPR3                 = 19  // Floating point register 3\n\tPT_FPR4                 = 20  // Floating point register 4\n\tPT_FPR5                 = 21  // Floating point register 5\n\tPT_FPR6                 = 22  // Floating point register 6\n\tPT_FPR7                 = 23  // Floating point register 7\n\tPT_FPR8                 = 24  // Floating point register 8\n\tPT_FPR9                 = 25  // Floating point register 9\n\tPT_FPR10                = 26  // Floating point register 10\n\tPT_FPR11                = 27  // Floating point register 11\n\tPT_FPR12                = 28  // Floating point register 12\n\tPT_FPR13                = 29  // Floating point register 13\n\tPT_FPR14                = 30  // Floating point register 14\n\tPT_FPR15                = 31  // Floating point register 15\n\tPT_FPC                  = 32  // Floating point control register\n\tPT_PSW                  = 40  // PSW\n\tPT_PSW0                 = 40  // Left half of the PSW\n\tPT_PSW1                 = 41  // Right half of the PSW\n\tPT_CR0                  = 42  // Control register 0\n\tPT_CR1                  = 43  // Control register 1\n\tPT_CR2                  = 44  // Control register 2\n\tPT_CR3                  = 45  // Control register 3\n\tPT_CR4                  = 46  // Control register 4\n\tPT_CR5                  = 47  // Control register 5\n\tPT_CR6                  = 48  // Control register 6\n\tPT_CR7                  = 49  // Control register 7\n\tPT_CR8                  = 50  // Control register 8\n\tPT_CR9                  = 51  // Control register 9\n\tPT_CR10                 = 52  // Control register 10\n\tPT_CR11                 = 53  // Control register 11\n\tPT_CR12                 = 54  // Control register 12\n\tPT_CR13                 = 55  // Control register 13\n\tPT_CR14                 = 56  // Control register 14\n\tPT_CR15                 = 57  // Control register 15\n\tPT_GPRH0                = 58  // GP High register 0\n\tPT_GPRH1                = 59  // GP High register 1\n\tPT_GPRH2                = 60  // GP High register 2\n\tPT_GPRH3                = 61  // GP High register 3\n\tPT_GPRH4                = 62  // GP High register 4\n\tPT_GPRH5                = 63  // GP High register 5\n\tPT_GPRH6                = 64  // GP High register 6\n\tPT_GPRH7                = 65  // GP High register 7\n\tPT_GPRH8                = 66  // GP High register 8\n\tPT_GPRH9                = 67  // GP High register 9\n\tPT_GPRH10               = 68  // GP High register 10\n\tPT_GPRH11               = 69  // GP High register 11\n\tPT_GPRH12               = 70  // GP High register 12\n\tPT_GPRH13               = 71  // GP High register 13\n\tPT_GPRH14               = 72  // GP High register 14\n\tPT_GPRH15               = 73  // GP High register 15\n\tPT_VR0                  = 74  // Vector register 0\n\tPT_VR1                  = 75  // Vector register 1\n\tPT_VR2                  = 76  // Vector register 2\n\tPT_VR3                  = 77  // Vector register 3\n\tPT_VR4                  = 78  // Vector register 4\n\tPT_VR5                  = 79  // Vector register 5\n\tPT_VR6                  = 80  // Vector register 6\n\tPT_VR7                  = 81  // Vector register 7\n\tPT_VR8                  = 82  // Vector register 8\n\tPT_VR9                  = 83  // Vector register 9\n\tPT_VR10                 = 84  // Vector register 10\n\tPT_VR11                 = 85  // Vector register 11\n\tPT_VR12                 = 86  // Vector register 12\n\tPT_VR13                 = 87  // Vector register 13\n\tPT_VR14                 = 88  // Vector register 14\n\tPT_VR15                 = 89  // Vector register 15\n\tPT_VR16                 = 90  // Vector register 16\n\tPT_VR17                 = 91  // Vector register 17\n\tPT_VR18                 = 92  // Vector register 18\n\tPT_VR19                 = 93  // Vector register 19\n\tPT_VR20                 = 94  // Vector register 20\n\tPT_VR21                 = 95  // Vector register 21\n\tPT_VR22                 = 96  // Vector register 22\n\tPT_VR23                 = 97  // Vector register 23\n\tPT_VR24                 = 98  // Vector register 24\n\tPT_VR25                 = 99  // Vector register 25\n\tPT_VR26                 = 100 // Vector register 26\n\tPT_VR27                 = 101 // Vector register 27\n\tPT_VR28                 = 102 // Vector register 28\n\tPT_VR29                 = 103 // Vector register 29\n\tPT_VR30                 = 104 // Vector register 30\n\tPT_VR31                 = 105 // Vector register 31\n\tPT_PSWG                 = 106 // PSWG\n\tPT_PSWG0                = 106 // Bytes 0-3\n\tPT_PSWG1                = 107 // Bytes 4-7\n\tPT_PSWG2                = 108 // Bytes 8-11 (IA high word)\n\tPT_PSWG3                = 109 // Bytes 12-15 (IA low word)\n)\n\nfunc Bpx4ptr(request int32, pid int32, addr unsafe.Pointer, data unsafe.Pointer, buffer unsafe.Pointer) (rv int32, rc int32, rn int32) {\n\tvar parms [8]unsafe.Pointer\n\tparms[0] = unsafe.Pointer(&request)\n\tparms[1] = unsafe.Pointer(&pid)\n\tparms[2] = unsafe.Pointer(&addr)\n\tparms[3] = unsafe.Pointer(&data)\n\tparms[4] = unsafe.Pointer(&buffer)\n\tparms[5] = unsafe.Pointer(&rv)\n\tparms[6] = unsafe.Pointer(&rc)\n\tparms[7] = unsafe.Pointer(&rn)\n\tbpxcall(parms[:], BPX4PTR)\n\treturn rv, rc, rn\n}\n\nfunc copyU8(val uint8, dest []uint8) int {\n\tif len(dest) < 1 {\n\t\treturn 0\n\t}\n\tdest[0] = val\n\treturn 1\n}\n\nfunc copyU8Arr(src, dest []uint8) int {\n\tif len(dest) < len(src) {\n\t\treturn 0\n\t}\n\tfor i, v := range src {\n\t\tdest[i] = v\n\t}\n\treturn len(src)\n}\n\nfunc copyU16(val uint16, dest []uint16) int {\n\tif len(dest) < 1 {\n\t\treturn 0\n\t}\n\tdest[0] = val\n\treturn 1\n}\n\nfunc copyU32(val uint32, dest []uint32) int {\n\tif len(dest) < 1 {\n\t\treturn 0\n\t}\n\tdest[0] = val\n\treturn 1\n}\n\nfunc copyU32Arr(src, dest []uint32) int {\n\tif len(dest) < len(src) {\n\t\treturn 0\n\t}\n\tfor i, v := range src {\n\t\tdest[i] = v\n\t}\n\treturn len(src)\n}\n\nfunc copyU64(val uint64, dest []uint64) int {\n\tif len(dest) < 1 {\n\t\treturn 0\n\t}\n\tdest[0] = val\n\treturn 1\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/bpxsvc_zos.s",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n#include \"go_asm.h\"\n#include \"textflag.h\"\n\n// function to call USS assembly language services\n//\n// doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bit64env.htm\n//\n//   arg1 unsafe.Pointer array that ressembles an OS PLIST\n//\n//   arg2 function offset as in\n//       doc: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_3.1.0/com.ibm.zos.v3r1.bpxb100/bpx2cr_List_of_offsets.htm\n//\n// func bpxcall(plist []unsafe.Pointer, bpx_offset int64)\n\nTEXT ·bpxcall(SB), NOSPLIT|NOFRAME, $0\n\tMOVD  plist_base+0(FP), R1  // r1 points to plist\n\tMOVD  bpx_offset+24(FP), R2 // r2 offset to BPX vector table\n\tMOVD  R14, R7               // save r14\n\tMOVD  R15, R8               // save r15\n\tMOVWZ 16(R0), R9\n\tMOVWZ 544(R9), R9\n\tMOVWZ 24(R9), R9            // call vector in r9\n\tADD   R2, R9                // add offset to vector table\n\tMOVWZ (R9), R9              // r9 points to entry point\n\tBYTE  $0x0D                 // BL R14,R9 --> basr r14,r9\n\tBYTE  $0xE9                 // clobbers 0,1,14,15\n\tMOVD  R8, R15               // restore 15\n\tJMP   R7                    // return via saved return address\n\n//   func A2e(arr [] byte)\n//   code page conversion from  819 to 1047\nTEXT ·A2e(SB), NOSPLIT|NOFRAME, $0\n\tMOVD arg_base+0(FP), R2                        // pointer to arry of characters\n\tMOVD arg_len+8(FP), R3                         // count\n\tXOR  R0, R0\n\tXOR  R1, R1\n\tBYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2))\n\n\t// ASCII -> EBCDIC conversion table:\n\tBYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03\n\tBYTE $0x37; BYTE $0x2d; BYTE $0x2e; BYTE $0x2f\n\tBYTE $0x16; BYTE $0x05; BYTE $0x15; BYTE $0x0b\n\tBYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f\n\tBYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13\n\tBYTE $0x3c; BYTE $0x3d; BYTE $0x32; BYTE $0x26\n\tBYTE $0x18; BYTE $0x19; BYTE $0x3f; BYTE $0x27\n\tBYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f\n\tBYTE $0x40; BYTE $0x5a; BYTE $0x7f; BYTE $0x7b\n\tBYTE $0x5b; BYTE $0x6c; BYTE $0x50; BYTE $0x7d\n\tBYTE $0x4d; BYTE $0x5d; BYTE $0x5c; BYTE $0x4e\n\tBYTE $0x6b; BYTE $0x60; BYTE $0x4b; BYTE $0x61\n\tBYTE $0xf0; BYTE $0xf1; BYTE $0xf2; BYTE $0xf3\n\tBYTE $0xf4; BYTE $0xf5; BYTE $0xf6; BYTE $0xf7\n\tBYTE $0xf8; BYTE $0xf9; BYTE $0x7a; BYTE $0x5e\n\tBYTE $0x4c; BYTE $0x7e; BYTE $0x6e; BYTE $0x6f\n\tBYTE $0x7c; BYTE $0xc1; BYTE $0xc2; BYTE $0xc3\n\tBYTE $0xc4; BYTE $0xc5; BYTE $0xc6; BYTE $0xc7\n\tBYTE $0xc8; BYTE $0xc9; BYTE $0xd1; BYTE $0xd2\n\tBYTE $0xd3; BYTE $0xd4; BYTE $0xd5; BYTE $0xd6\n\tBYTE $0xd7; BYTE $0xd8; BYTE $0xd9; BYTE $0xe2\n\tBYTE $0xe3; BYTE $0xe4; BYTE $0xe5; BYTE $0xe6\n\tBYTE $0xe7; BYTE $0xe8; BYTE $0xe9; BYTE $0xad\n\tBYTE $0xe0; BYTE $0xbd; BYTE $0x5f; BYTE $0x6d\n\tBYTE $0x79; BYTE $0x81; BYTE $0x82; BYTE $0x83\n\tBYTE $0x84; BYTE $0x85; BYTE $0x86; BYTE $0x87\n\tBYTE $0x88; BYTE $0x89; BYTE $0x91; BYTE $0x92\n\tBYTE $0x93; BYTE $0x94; BYTE $0x95; BYTE $0x96\n\tBYTE $0x97; BYTE $0x98; BYTE $0x99; BYTE $0xa2\n\tBYTE $0xa3; BYTE $0xa4; BYTE $0xa5; BYTE $0xa6\n\tBYTE $0xa7; BYTE $0xa8; BYTE $0xa9; BYTE $0xc0\n\tBYTE $0x4f; BYTE $0xd0; BYTE $0xa1; BYTE $0x07\n\tBYTE $0x20; BYTE $0x21; BYTE $0x22; BYTE $0x23\n\tBYTE $0x24; BYTE $0x25; BYTE $0x06; BYTE $0x17\n\tBYTE $0x28; BYTE $0x29; BYTE $0x2a; BYTE $0x2b\n\tBYTE $0x2c; BYTE $0x09; BYTE $0x0a; BYTE $0x1b\n\tBYTE $0x30; BYTE $0x31; BYTE $0x1a; BYTE $0x33\n\tBYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x08\n\tBYTE $0x38; BYTE $0x39; BYTE $0x3a; BYTE $0x3b\n\tBYTE $0x04; BYTE $0x14; BYTE $0x3e; BYTE $0xff\n\tBYTE $0x41; BYTE $0xaa; BYTE $0x4a; BYTE $0xb1\n\tBYTE $0x9f; BYTE $0xb2; BYTE $0x6a; BYTE $0xb5\n\tBYTE $0xbb; BYTE $0xb4; BYTE $0x9a; BYTE $0x8a\n\tBYTE $0xb0; BYTE $0xca; BYTE $0xaf; BYTE $0xbc\n\tBYTE $0x90; BYTE $0x8f; BYTE $0xea; BYTE $0xfa\n\tBYTE $0xbe; BYTE $0xa0; BYTE $0xb6; BYTE $0xb3\n\tBYTE $0x9d; BYTE $0xda; BYTE $0x9b; BYTE $0x8b\n\tBYTE $0xb7; BYTE $0xb8; BYTE $0xb9; BYTE $0xab\n\tBYTE $0x64; BYTE $0x65; BYTE $0x62; BYTE $0x66\n\tBYTE $0x63; BYTE $0x67; BYTE $0x9e; BYTE $0x68\n\tBYTE $0x74; BYTE $0x71; BYTE $0x72; BYTE $0x73\n\tBYTE $0x78; BYTE $0x75; BYTE $0x76; BYTE $0x77\n\tBYTE $0xac; BYTE $0x69; BYTE $0xed; BYTE $0xee\n\tBYTE $0xeb; BYTE $0xef; BYTE $0xec; BYTE $0xbf\n\tBYTE $0x80; BYTE $0xfd; BYTE $0xfe; BYTE $0xfb\n\tBYTE $0xfc; BYTE $0xba; BYTE $0xae; BYTE $0x59\n\tBYTE $0x44; BYTE $0x45; BYTE $0x42; BYTE $0x46\n\tBYTE $0x43; BYTE $0x47; BYTE $0x9c; BYTE $0x48\n\tBYTE $0x54; BYTE $0x51; BYTE $0x52; BYTE $0x53\n\tBYTE $0x58; BYTE $0x55; BYTE $0x56; BYTE $0x57\n\tBYTE $0x8c; BYTE $0x49; BYTE $0xcd; BYTE $0xce\n\tBYTE $0xcb; BYTE $0xcf; BYTE $0xcc; BYTE $0xe1\n\tBYTE $0x70; BYTE $0xdd; BYTE $0xde; BYTE $0xdb\n\tBYTE $0xdc; BYTE $0x8d; BYTE $0x8e; BYTE $0xdf\n\nretry:\n\tWORD $0xB9931022 // TROO 2,2,b'0001'\n\tBVS  retry\n\tRET\n\n//   func e2a(arr [] byte)\n//   code page conversion from  1047 to 819\nTEXT ·E2a(SB), NOSPLIT|NOFRAME, $0\n\tMOVD arg_base+0(FP), R2                        // pointer to arry of characters\n\tMOVD arg_len+8(FP), R3                         // count\n\tXOR  R0, R0\n\tXOR  R1, R1\n\tBYTE $0xA7; BYTE $0x15; BYTE $0x00; BYTE $0x82 // BRAS 1,(2+(256/2))\n\n\t// EBCDIC -> ASCII conversion table:\n\tBYTE $0x00; BYTE $0x01; BYTE $0x02; BYTE $0x03\n\tBYTE $0x9c; BYTE $0x09; BYTE $0x86; BYTE $0x7f\n\tBYTE $0x97; BYTE $0x8d; BYTE $0x8e; BYTE $0x0b\n\tBYTE $0x0c; BYTE $0x0d; BYTE $0x0e; BYTE $0x0f\n\tBYTE $0x10; BYTE $0x11; BYTE $0x12; BYTE $0x13\n\tBYTE $0x9d; BYTE $0x0a; BYTE $0x08; BYTE $0x87\n\tBYTE $0x18; BYTE $0x19; BYTE $0x92; BYTE $0x8f\n\tBYTE $0x1c; BYTE $0x1d; BYTE $0x1e; BYTE $0x1f\n\tBYTE $0x80; BYTE $0x81; BYTE $0x82; BYTE $0x83\n\tBYTE $0x84; BYTE $0x85; BYTE $0x17; BYTE $0x1b\n\tBYTE $0x88; BYTE $0x89; BYTE $0x8a; BYTE $0x8b\n\tBYTE $0x8c; BYTE $0x05; BYTE $0x06; BYTE $0x07\n\tBYTE $0x90; BYTE $0x91; BYTE $0x16; BYTE $0x93\n\tBYTE $0x94; BYTE $0x95; BYTE $0x96; BYTE $0x04\n\tBYTE $0x98; BYTE $0x99; BYTE $0x9a; BYTE $0x9b\n\tBYTE $0x14; BYTE $0x15; BYTE $0x9e; BYTE $0x1a\n\tBYTE $0x20; BYTE $0xa0; BYTE $0xe2; BYTE $0xe4\n\tBYTE $0xe0; BYTE $0xe1; BYTE $0xe3; BYTE $0xe5\n\tBYTE $0xe7; BYTE $0xf1; BYTE $0xa2; BYTE $0x2e\n\tBYTE $0x3c; BYTE $0x28; BYTE $0x2b; BYTE $0x7c\n\tBYTE $0x26; BYTE $0xe9; BYTE $0xea; BYTE $0xeb\n\tBYTE $0xe8; BYTE $0xed; BYTE $0xee; BYTE $0xef\n\tBYTE $0xec; BYTE $0xdf; BYTE $0x21; BYTE $0x24\n\tBYTE $0x2a; BYTE $0x29; BYTE $0x3b; BYTE $0x5e\n\tBYTE $0x2d; BYTE $0x2f; BYTE $0xc2; BYTE $0xc4\n\tBYTE $0xc0; BYTE $0xc1; BYTE $0xc3; BYTE $0xc5\n\tBYTE $0xc7; BYTE $0xd1; BYTE $0xa6; BYTE $0x2c\n\tBYTE $0x25; BYTE $0x5f; BYTE $0x3e; BYTE $0x3f\n\tBYTE $0xf8; BYTE $0xc9; BYTE $0xca; BYTE $0xcb\n\tBYTE $0xc8; BYTE $0xcd; BYTE $0xce; BYTE $0xcf\n\tBYTE $0xcc; BYTE $0x60; BYTE $0x3a; BYTE $0x23\n\tBYTE $0x40; BYTE $0x27; BYTE $0x3d; BYTE $0x22\n\tBYTE $0xd8; BYTE $0x61; BYTE $0x62; BYTE $0x63\n\tBYTE $0x64; BYTE $0x65; BYTE $0x66; BYTE $0x67\n\tBYTE $0x68; BYTE $0x69; BYTE $0xab; BYTE $0xbb\n\tBYTE $0xf0; BYTE $0xfd; BYTE $0xfe; BYTE $0xb1\n\tBYTE $0xb0; BYTE $0x6a; BYTE $0x6b; BYTE $0x6c\n\tBYTE $0x6d; BYTE $0x6e; BYTE $0x6f; BYTE $0x70\n\tBYTE $0x71; BYTE $0x72; BYTE $0xaa; BYTE $0xba\n\tBYTE $0xe6; BYTE $0xb8; BYTE $0xc6; BYTE $0xa4\n\tBYTE $0xb5; BYTE $0x7e; BYTE $0x73; BYTE $0x74\n\tBYTE $0x75; BYTE $0x76; BYTE $0x77; BYTE $0x78\n\tBYTE $0x79; BYTE $0x7a; BYTE $0xa1; BYTE $0xbf\n\tBYTE $0xd0; BYTE $0x5b; BYTE $0xde; BYTE $0xae\n\tBYTE $0xac; BYTE $0xa3; BYTE $0xa5; BYTE $0xb7\n\tBYTE $0xa9; BYTE $0xa7; BYTE $0xb6; BYTE $0xbc\n\tBYTE $0xbd; BYTE $0xbe; BYTE $0xdd; BYTE $0xa8\n\tBYTE $0xaf; BYTE $0x5d; BYTE $0xb4; BYTE $0xd7\n\tBYTE $0x7b; BYTE $0x41; BYTE $0x42; BYTE $0x43\n\tBYTE $0x44; BYTE $0x45; BYTE $0x46; BYTE $0x47\n\tBYTE $0x48; BYTE $0x49; BYTE $0xad; BYTE $0xf4\n\tBYTE $0xf6; BYTE $0xf2; BYTE $0xf3; BYTE $0xf5\n\tBYTE $0x7d; BYTE $0x4a; BYTE $0x4b; BYTE $0x4c\n\tBYTE $0x4d; BYTE $0x4e; BYTE $0x4f; BYTE $0x50\n\tBYTE $0x51; BYTE $0x52; BYTE $0xb9; BYTE $0xfb\n\tBYTE $0xfc; BYTE $0xf9; BYTE $0xfa; BYTE $0xff\n\tBYTE $0x5c; BYTE $0xf7; BYTE $0x53; BYTE $0x54\n\tBYTE $0x55; BYTE $0x56; BYTE $0x57; BYTE $0x58\n\tBYTE $0x59; BYTE $0x5a; BYTE $0xb2; BYTE $0xd4\n\tBYTE $0xd6; BYTE $0xd2; BYTE $0xd3; BYTE $0xd5\n\tBYTE $0x30; BYTE $0x31; BYTE $0x32; BYTE $0x33\n\tBYTE $0x34; BYTE $0x35; BYTE $0x36; BYTE $0x37\n\tBYTE $0x38; BYTE $0x39; BYTE $0xb3; BYTE $0xdb\n\tBYTE $0xdc; BYTE $0xd9; BYTE $0xda; BYTE $0x9f\n\nretry:\n\tWORD $0xB9931022 // TROO 2,2,b'0001'\n\tBVS  retry\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/cap_freebsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build freebsd\n\npackage unix\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n)\n\n// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c\n\nconst (\n\t// This is the version of CapRights this package understands. See C implementation for parallels.\n\tcapRightsGoVersion = CAP_RIGHTS_VERSION_00\n\tcapArSizeMin       = CAP_RIGHTS_VERSION_00 + 2\n\tcapArSizeMax       = capRightsGoVersion + 2\n)\n\nvar (\n\tbit2idx = []int{\n\t\t-1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1,\n\t\t4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n\t}\n)\n\nfunc capidxbit(right uint64) int {\n\treturn int((right >> 57) & 0x1f)\n}\n\nfunc rightToIndex(right uint64) (int, error) {\n\tidx := capidxbit(right)\n\tif idx < 0 || idx >= len(bit2idx) {\n\t\treturn -2, fmt.Errorf(\"index for right 0x%x out of range\", right)\n\t}\n\treturn bit2idx[idx], nil\n}\n\nfunc caprver(right uint64) int {\n\treturn int(right >> 62)\n}\n\nfunc capver(rights *CapRights) int {\n\treturn caprver(rights.Rights[0])\n}\n\nfunc caparsize(rights *CapRights) int {\n\treturn capver(rights) + 2\n}\n\n// CapRightsSet sets the permissions in setrights in rights.\nfunc CapRightsSet(rights *CapRights, setrights []uint64) error {\n\t// This is essentially a copy of cap_rights_vset()\n\tif capver(rights) != CAP_RIGHTS_VERSION_00 {\n\t\treturn fmt.Errorf(\"bad rights version %d\", capver(rights))\n\t}\n\n\tn := caparsize(rights)\n\tif n < capArSizeMin || n > capArSizeMax {\n\t\treturn errors.New(\"bad rights size\")\n\t}\n\n\tfor _, right := range setrights {\n\t\tif caprver(right) != CAP_RIGHTS_VERSION_00 {\n\t\t\treturn errors.New(\"bad right version\")\n\t\t}\n\t\ti, err := rightToIndex(right)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif i >= n {\n\t\t\treturn errors.New(\"index overflow\")\n\t\t}\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch\")\n\t\t}\n\t\trights.Rights[i] |= right\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch (after assign)\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// CapRightsClear clears the permissions in clearrights from rights.\nfunc CapRightsClear(rights *CapRights, clearrights []uint64) error {\n\t// This is essentially a copy of cap_rights_vclear()\n\tif capver(rights) != CAP_RIGHTS_VERSION_00 {\n\t\treturn fmt.Errorf(\"bad rights version %d\", capver(rights))\n\t}\n\n\tn := caparsize(rights)\n\tif n < capArSizeMin || n > capArSizeMax {\n\t\treturn errors.New(\"bad rights size\")\n\t}\n\n\tfor _, right := range clearrights {\n\t\tif caprver(right) != CAP_RIGHTS_VERSION_00 {\n\t\t\treturn errors.New(\"bad right version\")\n\t\t}\n\t\ti, err := rightToIndex(right)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tif i >= n {\n\t\t\treturn errors.New(\"index overflow\")\n\t\t}\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch\")\n\t\t}\n\t\trights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF)\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn errors.New(\"index mismatch (after assign)\")\n\t\t}\n\t}\n\n\treturn nil\n}\n\n// CapRightsIsSet checks whether all the permissions in setrights are present in rights.\nfunc CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) {\n\t// This is essentially a copy of cap_rights_is_vset()\n\tif capver(rights) != CAP_RIGHTS_VERSION_00 {\n\t\treturn false, fmt.Errorf(\"bad rights version %d\", capver(rights))\n\t}\n\n\tn := caparsize(rights)\n\tif n < capArSizeMin || n > capArSizeMax {\n\t\treturn false, errors.New(\"bad rights size\")\n\t}\n\n\tfor _, right := range setrights {\n\t\tif caprver(right) != CAP_RIGHTS_VERSION_00 {\n\t\t\treturn false, errors.New(\"bad right version\")\n\t\t}\n\t\ti, err := rightToIndex(right)\n\t\tif err != nil {\n\t\t\treturn false, err\n\t\t}\n\t\tif i >= n {\n\t\t\treturn false, errors.New(\"index overflow\")\n\t\t}\n\t\tif capidxbit(rights.Rights[i]) != capidxbit(right) {\n\t\t\treturn false, errors.New(\"index mismatch\")\n\t\t}\n\t\tif (rights.Rights[i] & right) != right {\n\t\t\treturn false, nil\n\t\t}\n\t}\n\n\treturn true, nil\n}\n\nfunc capright(idx uint64, bit uint64) uint64 {\n\treturn ((1 << (57 + idx)) | bit)\n}\n\n// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights.\n// See man cap_rights_init(3) and rights(4).\nfunc CapRightsInit(rights []uint64) (*CapRights, error) {\n\tvar r CapRights\n\tr.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0)\n\tr.Rights[1] = capright(1, 0)\n\n\terr := CapRightsSet(&r, rights)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &r, nil\n}\n\n// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights.\n// The capability rights on fd can never be increased by CapRightsLimit.\n// See man cap_rights_limit(2) and rights(4).\nfunc CapRightsLimit(fd uintptr, rights *CapRights) error {\n\treturn capRightsLimit(int(fd), rights)\n}\n\n// CapRightsGet returns a CapRights structure containing the operations permitted on fd.\n// See man cap_rights_get(3) and rights(4).\nfunc CapRightsGet(fd uintptr) (*CapRights, error) {\n\tr, err := CapRightsInit(nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\terr = capRightsGet(capRightsGoVersion, int(fd), r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn r, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/constants.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nconst (\n\tR_OK = 0x4\n\tW_OK = 0x2\n\tX_OK = 0x1\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_aix_ppc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix && ppc\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used by AIX.\n\npackage unix\n\n// Major returns the major component of a Linux device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 16) & 0xffff)\n}\n\n// Minor returns the minor component of a Linux device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffff)\n}\n\n// Mkdev returns a Linux device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn uint64(((major) << 16) | (minor))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_aix_ppc64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix && ppc64\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used AIX.\n\npackage unix\n\n// Major returns the major component of a Linux device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev & 0x3fffffff00000000) >> 32)\n}\n\n// Minor returns the minor component of a Linux device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32((dev & 0x00000000ffffffff) >> 0)\n}\n\n// Mkdev returns a Linux device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tvar DEVNO64 uint64\n\tDEVNO64 = 0x8000000000000000\n\treturn ((uint64(major) << 32) | (uint64(minor) & 0x00000000FFFFFFFF) | DEVNO64)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_darwin.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in Darwin's sys/types.h header.\n\npackage unix\n\n// Major returns the major component of a Darwin device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 24) & 0xff)\n}\n\n// Minor returns the minor component of a Darwin device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffffff)\n}\n\n// Mkdev returns a Darwin device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 24) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_dragonfly.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in Dragonfly's sys/types.h header.\n//\n// The information below is extracted and adapted from sys/types.h:\n//\n// Minor gives a cookie instead of an index since in order to avoid changing the\n// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for\n// devices that don't use them.\n\npackage unix\n\n// Major returns the major component of a DragonFlyBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 8) & 0xff)\n}\n\n// Minor returns the minor component of a DragonFlyBSD device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffff00ff)\n}\n\n// Mkdev returns a DragonFlyBSD device number generated from the given major and\n// minor components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 8) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_freebsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in FreeBSD's sys/types.h header.\n//\n// The information below is extracted and adapted from sys/types.h:\n//\n// Minor gives a cookie instead of an index since in order to avoid changing the\n// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for\n// devices that don't use them.\n\npackage unix\n\n// Major returns the major component of a FreeBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 8) & 0xff)\n}\n\n// Minor returns the minor component of a FreeBSD device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0xffff00ff)\n}\n\n// Mkdev returns a FreeBSD device number generated from the given major and\n// minor components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 8) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_linux.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used by the Linux kernel and glibc.\n//\n// The information below is extracted and adapted from bits/sysmacros.h in the\n// glibc sources:\n//\n// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's\n// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major\n// number and m is a hex digit of the minor number. This is backward compatible\n// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also\n// backward compatible with the Linux kernel, which for some architectures uses\n// 32-bit dev_t, encoded as mmmM MMmm.\n\npackage unix\n\n// Major returns the major component of a Linux device number.\nfunc Major(dev uint64) uint32 {\n\tmajor := uint32((dev & 0x00000000000fff00) >> 8)\n\tmajor |= uint32((dev & 0xfffff00000000000) >> 32)\n\treturn major\n}\n\n// Minor returns the minor component of a Linux device number.\nfunc Minor(dev uint64) uint32 {\n\tminor := uint32((dev & 0x00000000000000ff) >> 0)\n\tminor |= uint32((dev & 0x00000ffffff00000) >> 12)\n\treturn minor\n}\n\n// Mkdev returns a Linux device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tdev := (uint64(major) & 0x00000fff) << 8\n\tdev |= (uint64(major) & 0xfffff000) << 32\n\tdev |= (uint64(minor) & 0x000000ff) << 0\n\tdev |= (uint64(minor) & 0xffffff00) << 12\n\treturn dev\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_netbsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in NetBSD's sys/types.h header.\n\npackage unix\n\n// Major returns the major component of a NetBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev & 0x000fff00) >> 8)\n}\n\n// Minor returns the minor component of a NetBSD device number.\nfunc Minor(dev uint64) uint32 {\n\tminor := uint32((dev & 0x000000ff) >> 0)\n\tminor |= uint32((dev & 0xfff00000) >> 12)\n\treturn minor\n}\n\n// Mkdev returns a NetBSD device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tdev := (uint64(major) << 8) & 0x000fff00\n\tdev |= (uint64(minor) << 12) & 0xfff00000\n\tdev |= (uint64(minor) << 0) & 0x000000ff\n\treturn dev\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_openbsd.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used in OpenBSD's sys/types.h header.\n\npackage unix\n\n// Major returns the major component of an OpenBSD device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev & 0x0000ff00) >> 8)\n}\n\n// Minor returns the minor component of an OpenBSD device number.\nfunc Minor(dev uint64) uint32 {\n\tminor := uint32((dev & 0x000000ff) >> 0)\n\tminor |= uint32((dev & 0xffff0000) >> 8)\n\treturn minor\n}\n\n// Mkdev returns an OpenBSD device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\tdev := (uint64(major) << 8) & 0x0000ff00\n\tdev |= (uint64(minor) << 8) & 0xffff0000\n\tdev |= (uint64(minor) << 0) & 0x000000ff\n\treturn dev\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dev_zos.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x\n\n// Functions to access/create device major and minor numbers matching the\n// encoding used by z/OS.\n//\n// The information below is extracted and adapted from <sys/stat.h> macros.\n\npackage unix\n\n// Major returns the major component of a z/OS device number.\nfunc Major(dev uint64) uint32 {\n\treturn uint32((dev >> 16) & 0x0000FFFF)\n}\n\n// Minor returns the minor component of a z/OS device number.\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(dev & 0x0000FFFF)\n}\n\n// Mkdev returns a z/OS device number generated from the given major and minor\n// components.\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn (uint64(major) << 16) | uint64(minor)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/dirent.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nimport \"unsafe\"\n\n// readInt returns the size-bytes unsigned integer in native byte order at offset off.\nfunc readInt(b []byte, off, size uintptr) (u uint64, ok bool) {\n\tif len(b) < int(off+size) {\n\t\treturn 0, false\n\t}\n\tif isBigEndian {\n\t\treturn readIntBE(b[off:], size), true\n\t}\n\treturn readIntLE(b[off:], size), true\n}\n\nfunc readIntBE(b []byte, size uintptr) uint64 {\n\tswitch size {\n\tcase 1:\n\t\treturn uint64(b[0])\n\tcase 2:\n\t\t_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[1]) | uint64(b[0])<<8\n\tcase 4:\n\t\t_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24\n\tcase 8:\n\t\t_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |\n\t\t\tuint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56\n\tdefault:\n\t\tpanic(\"syscall: readInt with unsupported size\")\n\t}\n}\n\nfunc readIntLE(b []byte, size uintptr) uint64 {\n\tswitch size {\n\tcase 1:\n\t\treturn uint64(b[0])\n\tcase 2:\n\t\t_ = b[1] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[0]) | uint64(b[1])<<8\n\tcase 4:\n\t\t_ = b[3] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24\n\tcase 8:\n\t\t_ = b[7] // bounds check hint to compiler; see golang.org/issue/14808\n\t\treturn uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 |\n\t\t\tuint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56\n\tdefault:\n\t\tpanic(\"syscall: readInt with unsupported size\")\n\t}\n}\n\n// ParseDirent parses up to max directory entries in buf,\n// appending the names to names. It returns the number of\n// bytes consumed from buf, the number of entries added\n// to names, and the new names slice.\nfunc ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) {\n\toriglen := len(buf)\n\tcount = 0\n\tfor max != 0 && len(buf) > 0 {\n\t\treclen, ok := direntReclen(buf)\n\t\tif !ok || reclen > uint64(len(buf)) {\n\t\t\treturn origlen, count, names\n\t\t}\n\t\trec := buf[:reclen]\n\t\tbuf = buf[reclen:]\n\t\tino, ok := direntIno(rec)\n\t\tif !ok {\n\t\t\tbreak\n\t\t}\n\t\tif ino == 0 { // File absent in directory.\n\t\t\tcontinue\n\t\t}\n\t\tconst namoff = uint64(unsafe.Offsetof(Dirent{}.Name))\n\t\tnamlen, ok := direntNamlen(rec)\n\t\tif !ok || namoff+namlen > uint64(len(rec)) {\n\t\t\tbreak\n\t\t}\n\t\tname := rec[namoff : namoff+namlen]\n\t\tfor i, c := range name {\n\t\t\tif c == 0 {\n\t\t\t\tname = name[:i]\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// Check for useless names before allocating a string.\n\t\tif string(name) == \".\" || string(name) == \"..\" {\n\t\t\tcontinue\n\t\t}\n\t\tmax--\n\t\tcount++\n\t\tnames = append(names, string(name))\n\t}\n\treturn origlen - len(buf), count, names\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/endian_big.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n//\n//go:build armbe || arm64be || m68k || mips || mips64 || mips64p32 || ppc || ppc64 || s390 || s390x || shbe || sparc || sparc64\n\npackage unix\n\nconst isBigEndian = true\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/endian_little.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n//\n//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh\n\npackage unix\n\nconst isBigEndian = false\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/env_unix.go",
    "content": "// Copyright 2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\n// Unix environment variables.\n\npackage unix\n\nimport \"syscall\"\n\nfunc Getenv(key string) (value string, found bool) {\n\treturn syscall.Getenv(key)\n}\n\nfunc Setenv(key, value string) error {\n\treturn syscall.Setenv(key, value)\n}\n\nfunc Clearenv() {\n\tsyscall.Clearenv()\n}\n\nfunc Environ() []string {\n\treturn syscall.Environ()\n}\n\nfunc Unsetenv(key string) error {\n\treturn syscall.Unsetenv(key)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fcntl.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build dragonfly || freebsd || linux || netbsd\n\npackage unix\n\nimport \"unsafe\"\n\n// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux\n// systems by fcntl_linux_32bit.go to be SYS_FCNTL64.\nvar fcntl64Syscall uintptr = SYS_FCNTL\n\nfunc fcntl(fd int, cmd, arg int) (int, error) {\n\tvalptr, _, errno := Syscall(fcntl64Syscall, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tvar err error\n\tif errno != 0 {\n\t\terr = errno\n\t}\n\treturn int(valptr), err\n}\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn fcntl(int(fd), cmd, arg)\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk)))\n\tif errno == 0 {\n\t\treturn nil\n\t}\n\treturn errno\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fcntl_darwin.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport \"unsafe\"\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn fcntl(int(fd), cmd, arg)\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk))))\n\treturn err\n}\n\n// FcntlFstore performs a fcntl syscall for the F_PREALLOCATE command.\nfunc FcntlFstore(fd uintptr, cmd int, fstore *Fstore_t) error {\n\t_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(fstore))))\n\treturn err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fcntl_linux_32bit.go",
    "content": "// Copyright 2014 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (linux && 386) || (linux && arm) || (linux && mips) || (linux && mipsle) || (linux && ppc)\n\npackage unix\n\nfunc init() {\n\t// On 32-bit Linux systems, the fcntl syscall that matches Go's\n\t// Flock_t type is SYS_FCNTL64, not SYS_FCNTL.\n\tfcntl64Syscall = SYS_FCNTL64\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/fdset.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\n// Set adds fd to the set fds.\nfunc (fds *FdSet) Set(fd int) {\n\tfds.Bits[fd/NFDBITS] |= (1 << (uintptr(fd) % NFDBITS))\n}\n\n// Clear removes fd from the set fds.\nfunc (fds *FdSet) Clear(fd int) {\n\tfds.Bits[fd/NFDBITS] &^= (1 << (uintptr(fd) % NFDBITS))\n}\n\n// IsSet returns whether fd is in the set fds.\nfunc (fds *FdSet) IsSet(fd int) bool {\n\treturn fds.Bits[fd/NFDBITS]&(1<<(uintptr(fd)%NFDBITS)) != 0\n}\n\n// Zero clears the set fds.\nfunc (fds *FdSet) Zero() {\n\tfor i := range fds.Bits {\n\t\tfds.Bits[i] = 0\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/gccgo.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gccgo && !aix && !hurd\n\npackage unix\n\nimport \"syscall\"\n\n// We can't use the gc-syntax .s files for gccgo. On the plus side\n// much of the functionality can be written directly in Go.\n\nfunc realSyscallNoError(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r uintptr)\n\nfunc realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr)\n\nfunc SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {\n\tsyscall.Entersyscall()\n\tr := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\tsyscall.Exitsyscall()\n\treturn r, 0\n}\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tsyscall.Entersyscall()\n\tr, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\tsyscall.Exitsyscall()\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tsyscall.Entersyscall()\n\tr, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)\n\tsyscall.Exitsyscall()\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tsyscall.Entersyscall()\n\tr, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9)\n\tsyscall.Exitsyscall()\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr) {\n\tr := realSyscallNoError(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\treturn r, 0\n}\n\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tr, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0)\n\treturn r, 0, syscall.Errno(errno)\n}\n\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\tr, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)\n\treturn r, 0, syscall.Errno(errno)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/gccgo_c.c",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gccgo && !aix && !hurd\n\n#include <errno.h>\n#include <stdint.h>\n#include <unistd.h>\n\n#define _STRINGIFY2_(x) #x\n#define _STRINGIFY_(x) _STRINGIFY2_(x)\n#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__)\n\n// Call syscall from C code because the gccgo support for calling from\n// Go to C does not support varargs functions.\n\nstruct ret {\n\tuintptr_t r;\n\tuintptr_t err;\n};\n\nstruct ret gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)\n  __asm__(GOSYM_PREFIX GOPKGPATH \".realSyscall\");\n\nstruct ret\ngccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)\n{\n\tstruct ret r;\n\n\terrno = 0;\n\tr.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n\tr.err = errno;\n\treturn r;\n}\n\nuintptr_t gccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)\n  __asm__(GOSYM_PREFIX GOPKGPATH \".realSyscallNoError\");\n\nuintptr_t\ngccgoRealSyscallNoError(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9)\n{\n\treturn syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9);\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build gccgo && linux && amd64\n\npackage unix\n\nimport \"syscall\"\n\n//extern gettimeofday\nfunc realGettimeofday(*Timeval, *byte) int32\n\nfunc gettimeofday(tv *Timeval) (err syscall.Errno) {\n\tr := realGettimeofday(tv, nil)\n\tif r < 0 {\n\t\treturn syscall.GetErrno()\n\t}\n\treturn 0\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ifreq_linux.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// Helpers for dealing with ifreq since it contains a union and thus requires a\n// lot of unsafe.Pointer casts to use properly.\n\n// An Ifreq is a type-safe wrapper around the raw ifreq struct. An Ifreq\n// contains an interface name and a union of arbitrary data which can be\n// accessed using the Ifreq's methods. To create an Ifreq, use the NewIfreq\n// function.\n//\n// Use the Name method to access the stored interface name. The union data\n// fields can be get and set using the following methods:\n//   - Uint16/SetUint16: flags\n//   - Uint32/SetUint32: ifindex, metric, mtu\ntype Ifreq struct{ raw ifreq }\n\n// NewIfreq creates an Ifreq with the input network interface name after\n// validating the name does not exceed IFNAMSIZ-1 (trailing NULL required)\n// bytes.\nfunc NewIfreq(name string) (*Ifreq, error) {\n\t// Leave room for terminating NULL byte.\n\tif len(name) >= IFNAMSIZ {\n\t\treturn nil, EINVAL\n\t}\n\n\tvar ifr ifreq\n\tcopy(ifr.Ifrn[:], name)\n\n\treturn &Ifreq{raw: ifr}, nil\n}\n\n// TODO(mdlayher): get/set methods for hardware address sockaddr, char array, etc.\n\n// Name returns the interface name associated with the Ifreq.\nfunc (ifr *Ifreq) Name() string {\n\treturn ByteSliceToString(ifr.raw.Ifrn[:])\n}\n\n// According to netdevice(7), only AF_INET addresses are returned for numerous\n// sockaddr ioctls. For convenience, we expose these as Inet4Addr since the Port\n// field and other data is always empty.\n\n// Inet4Addr returns the Ifreq union data from an embedded sockaddr as a C\n// in_addr/Go []byte (4-byte IPv4 address) value. If the sockaddr family is not\n// AF_INET, an error is returned.\nfunc (ifr *Ifreq) Inet4Addr() ([]byte, error) {\n\traw := *(*RawSockaddrInet4)(unsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]))\n\tif raw.Family != AF_INET {\n\t\t// Cannot safely interpret raw.Addr bytes as an IPv4 address.\n\t\treturn nil, EINVAL\n\t}\n\n\treturn raw.Addr[:], nil\n}\n\n// SetInet4Addr sets a C in_addr/Go []byte (4-byte IPv4 address) value in an\n// embedded sockaddr within the Ifreq's union data. v must be 4 bytes in length\n// or an error will be returned.\nfunc (ifr *Ifreq) SetInet4Addr(v []byte) error {\n\tif len(v) != 4 {\n\t\treturn EINVAL\n\t}\n\n\tvar addr [4]byte\n\tcopy(addr[:], v)\n\n\tifr.clear()\n\t*(*RawSockaddrInet4)(\n\t\tunsafe.Pointer(&ifr.raw.Ifru[:SizeofSockaddrInet4][0]),\n\t) = RawSockaddrInet4{\n\t\t// Always set IP family as ioctls would require it anyway.\n\t\tFamily: AF_INET,\n\t\tAddr:   addr,\n\t}\n\n\treturn nil\n}\n\n// Uint16 returns the Ifreq union data as a C short/Go uint16 value.\nfunc (ifr *Ifreq) Uint16() uint16 {\n\treturn *(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0]))\n}\n\n// SetUint16 sets a C short/Go uint16 value as the Ifreq's union data.\nfunc (ifr *Ifreq) SetUint16(v uint16) {\n\tifr.clear()\n\t*(*uint16)(unsafe.Pointer(&ifr.raw.Ifru[:2][0])) = v\n}\n\n// Uint32 returns the Ifreq union data as a C int/Go uint32 value.\nfunc (ifr *Ifreq) Uint32() uint32 {\n\treturn *(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0]))\n}\n\n// SetUint32 sets a C int/Go uint32 value as the Ifreq's union data.\nfunc (ifr *Ifreq) SetUint32(v uint32) {\n\tifr.clear()\n\t*(*uint32)(unsafe.Pointer(&ifr.raw.Ifru[:4][0])) = v\n}\n\n// clear zeroes the ifreq's union field to prevent trailing garbage data from\n// being sent to the kernel if an ifreq is reused.\nfunc (ifr *Ifreq) clear() {\n\tfor i := range ifr.raw.Ifru {\n\t\tifr.raw.Ifru[i] = 0\n\t}\n}\n\n// TODO(mdlayher): export as IfreqData? For now we can provide helpers such as\n// IoctlGetEthtoolDrvinfo which use these APIs under the hood.\n\n// An ifreqData is an Ifreq which carries pointer data. To produce an ifreqData,\n// use the Ifreq.withData method.\ntype ifreqData struct {\n\tname [IFNAMSIZ]byte\n\t// A type separate from ifreq is required in order to comply with the\n\t// unsafe.Pointer rules since the \"pointer-ness\" of data would not be\n\t// preserved if it were cast into the byte array of a raw ifreq.\n\tdata unsafe.Pointer\n\t// Pad to the same size as ifreq.\n\t_ [len(ifreq{}.Ifru) - SizeofPtr]byte\n}\n\n// withData produces an ifreqData with the pointer p set for ioctls which require\n// arbitrary pointer data.\nfunc (ifr Ifreq) withData(p unsafe.Pointer) ifreqData {\n\treturn ifreqData{\n\t\tname: ifr.raw.Ifrn,\n\t\tdata: p,\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ioctl_linux.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport \"unsafe\"\n\n// IoctlRetInt performs an ioctl operation specified by req on a device\n// associated with opened file descriptor fd, and returns a non-negative\n// integer that is returned by the ioctl syscall.\nfunc IoctlRetInt(fd int, req uint) (int, error) {\n\tret, _, err := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(ret), nil\n}\n\nfunc IoctlGetUint32(fd int, req uint) (uint32, error) {\n\tvar value uint32\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn value, err\n}\n\nfunc IoctlGetRTCTime(fd int) (*RTCTime, error) {\n\tvar value RTCTime\n\terr := ioctlPtr(fd, RTC_RD_TIME, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlSetRTCTime(fd int, value *RTCTime) error {\n\treturn ioctlPtr(fd, RTC_SET_TIME, unsafe.Pointer(value))\n}\n\nfunc IoctlGetRTCWkAlrm(fd int) (*RTCWkAlrm, error) {\n\tvar value RTCWkAlrm\n\terr := ioctlPtr(fd, RTC_WKALM_RD, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlSetRTCWkAlrm(fd int, value *RTCWkAlrm) error {\n\treturn ioctlPtr(fd, RTC_WKALM_SET, unsafe.Pointer(value))\n}\n\n// IoctlGetEthtoolDrvinfo fetches ethtool driver information for the network\n// device specified by ifname.\nfunc IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) {\n\tifr, err := NewIfreq(ifname)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvalue := EthtoolDrvinfo{Cmd: ETHTOOL_GDRVINFO}\n\tifrd := ifr.withData(unsafe.Pointer(&value))\n\n\terr = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd)\n\treturn &value, err\n}\n\n// IoctlGetWatchdogInfo fetches information about a watchdog device from the\n// Linux watchdog API. For more information, see:\n// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.\nfunc IoctlGetWatchdogInfo(fd int) (*WatchdogInfo, error) {\n\tvar value WatchdogInfo\n\terr := ioctlPtr(fd, WDIOC_GETSUPPORT, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n// IoctlWatchdogKeepalive issues a keepalive ioctl to a watchdog device. For\n// more information, see:\n// https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html.\nfunc IoctlWatchdogKeepalive(fd int) error {\n\t// arg is ignored and not a pointer, so ioctl is fine instead of ioctlPtr.\n\treturn ioctl(fd, WDIOC_KEEPALIVE, 0)\n}\n\n// IoctlFileCloneRange performs an FICLONERANGE ioctl operation to clone the\n// range of data conveyed in value to the file associated with the file\n// descriptor destFd. See the ioctl_ficlonerange(2) man page for details.\nfunc IoctlFileCloneRange(destFd int, value *FileCloneRange) error {\n\treturn ioctlPtr(destFd, FICLONERANGE, unsafe.Pointer(value))\n}\n\n// IoctlFileClone performs an FICLONE ioctl operation to clone the entire file\n// associated with the file description srcFd to the file associated with the\n// file descriptor destFd. See the ioctl_ficlone(2) man page for details.\nfunc IoctlFileClone(destFd, srcFd int) error {\n\treturn ioctl(destFd, FICLONE, uintptr(srcFd))\n}\n\ntype FileDedupeRange struct {\n\tSrc_offset uint64\n\tSrc_length uint64\n\tReserved1  uint16\n\tReserved2  uint32\n\tInfo       []FileDedupeRangeInfo\n}\n\ntype FileDedupeRangeInfo struct {\n\tDest_fd       int64\n\tDest_offset   uint64\n\tBytes_deduped uint64\n\tStatus        int32\n\tReserved      uint32\n}\n\n// IoctlFileDedupeRange performs an FIDEDUPERANGE ioctl operation to share the\n// range of data conveyed in value from the file associated with the file\n// descriptor srcFd to the value.Info destinations. See the\n// ioctl_fideduperange(2) man page for details.\nfunc IoctlFileDedupeRange(srcFd int, value *FileDedupeRange) error {\n\tbuf := make([]byte, SizeofRawFileDedupeRange+\n\t\tlen(value.Info)*SizeofRawFileDedupeRangeInfo)\n\trawrange := (*RawFileDedupeRange)(unsafe.Pointer(&buf[0]))\n\trawrange.Src_offset = value.Src_offset\n\trawrange.Src_length = value.Src_length\n\trawrange.Dest_count = uint16(len(value.Info))\n\trawrange.Reserved1 = value.Reserved1\n\trawrange.Reserved2 = value.Reserved2\n\n\tfor i := range value.Info {\n\t\trawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer(\n\t\t\tuintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) +\n\t\t\t\tuintptr(i*SizeofRawFileDedupeRangeInfo)))\n\t\trawinfo.Dest_fd = value.Info[i].Dest_fd\n\t\trawinfo.Dest_offset = value.Info[i].Dest_offset\n\t\trawinfo.Bytes_deduped = value.Info[i].Bytes_deduped\n\t\trawinfo.Status = value.Info[i].Status\n\t\trawinfo.Reserved = value.Info[i].Reserved\n\t}\n\n\terr := ioctlPtr(srcFd, FIDEDUPERANGE, unsafe.Pointer(&buf[0]))\n\n\t// Output\n\tfor i := range value.Info {\n\t\trawinfo := (*RawFileDedupeRangeInfo)(unsafe.Pointer(\n\t\t\tuintptr(unsafe.Pointer(&buf[0])) + uintptr(SizeofRawFileDedupeRange) +\n\t\t\t\tuintptr(i*SizeofRawFileDedupeRangeInfo)))\n\t\tvalue.Info[i].Dest_fd = rawinfo.Dest_fd\n\t\tvalue.Info[i].Dest_offset = rawinfo.Dest_offset\n\t\tvalue.Info[i].Bytes_deduped = rawinfo.Bytes_deduped\n\t\tvalue.Info[i].Status = rawinfo.Status\n\t\tvalue.Info[i].Reserved = rawinfo.Reserved\n\t}\n\n\treturn err\n}\n\nfunc IoctlHIDGetDesc(fd int, value *HIDRawReportDescriptor) error {\n\treturn ioctlPtr(fd, HIDIOCGRDESC, unsafe.Pointer(value))\n}\n\nfunc IoctlHIDGetRawInfo(fd int) (*HIDRawDevInfo, error) {\n\tvar value HIDRawDevInfo\n\terr := ioctlPtr(fd, HIDIOCGRAWINFO, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlHIDGetRawName(fd int) (string, error) {\n\tvar value [_HIDIOCGRAWNAME_LEN]byte\n\terr := ioctlPtr(fd, _HIDIOCGRAWNAME, unsafe.Pointer(&value[0]))\n\treturn ByteSliceToString(value[:]), err\n}\n\nfunc IoctlHIDGetRawPhys(fd int) (string, error) {\n\tvar value [_HIDIOCGRAWPHYS_LEN]byte\n\terr := ioctlPtr(fd, _HIDIOCGRAWPHYS, unsafe.Pointer(&value[0]))\n\treturn ByteSliceToString(value[:]), err\n}\n\nfunc IoctlHIDGetRawUniq(fd int) (string, error) {\n\tvar value [_HIDIOCGRAWUNIQ_LEN]byte\n\terr := ioctlPtr(fd, _HIDIOCGRAWUNIQ, unsafe.Pointer(&value[0]))\n\treturn ByteSliceToString(value[:]), err\n}\n\n// IoctlIfreq performs an ioctl using an Ifreq structure for input and/or\n// output. See the netdevice(7) man page for details.\nfunc IoctlIfreq(fd int, req uint, value *Ifreq) error {\n\t// It is possible we will add more fields to *Ifreq itself later to prevent\n\t// misuse, so pass the raw *ifreq directly.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(&value.raw))\n}\n\n// TODO(mdlayher): export if and when IfreqData is exported.\n\n// ioctlIfreqData performs an ioctl using an ifreqData structure for input\n// and/or output. See the netdevice(7) man page for details.\nfunc ioctlIfreqData(fd int, req uint, value *ifreqData) error {\n\t// The memory layout of IfreqData (type-safe) and ifreq (not type-safe) are\n\t// identical so pass *IfreqData directly.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlKCMClone attaches a new file descriptor to a multiplexor by cloning an\n// existing KCM socket, returning a structure containing the file descriptor of\n// the new socket.\nfunc IoctlKCMClone(fd int) (*KCMClone, error) {\n\tvar info KCMClone\n\tif err := ioctlPtr(fd, SIOCKCMCLONE, unsafe.Pointer(&info)); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &info, nil\n}\n\n// IoctlKCMAttach attaches a TCP socket and associated BPF program file\n// descriptor to a multiplexor.\nfunc IoctlKCMAttach(fd int, info KCMAttach) error {\n\treturn ioctlPtr(fd, SIOCKCMATTACH, unsafe.Pointer(&info))\n}\n\n// IoctlKCMUnattach unattaches a TCP socket file descriptor from a multiplexor.\nfunc IoctlKCMUnattach(fd int, info KCMUnattach) error {\n\treturn ioctlPtr(fd, SIOCKCMUNATTACH, unsafe.Pointer(&info))\n}\n\n// IoctlLoopGetStatus64 gets the status of the loop device associated with the\n// file descriptor fd using the LOOP_GET_STATUS64 operation.\nfunc IoctlLoopGetStatus64(fd int) (*LoopInfo64, error) {\n\tvar value LoopInfo64\n\tif err := ioctlPtr(fd, LOOP_GET_STATUS64, unsafe.Pointer(&value)); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &value, nil\n}\n\n// IoctlLoopSetStatus64 sets the status of the loop device associated with the\n// file descriptor fd using the LOOP_SET_STATUS64 operation.\nfunc IoctlLoopSetStatus64(fd int, value *LoopInfo64) error {\n\treturn ioctlPtr(fd, LOOP_SET_STATUS64, unsafe.Pointer(value))\n}\n\n// IoctlLoopConfigure configures all loop device parameters in a single step\nfunc IoctlLoopConfigure(fd int, value *LoopConfig) error {\n\treturn ioctlPtr(fd, LOOP_CONFIGURE, unsafe.Pointer(value))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ioctl_signed.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || solaris\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req int, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\n// IoctlSetPointerInt performs an ioctl operation which sets an\n// integer value on fd, using the specified request number. The ioctl\n// argument is called with a pointer to the integer value, rather than\n// passing the integer value directly.\nfunc IoctlSetPointerInt(fd int, req int, value int) error {\n\tv := int32(value)\n\treturn ioctlPtr(fd, req, unsafe.Pointer(&v))\n}\n\n// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.\n//\n// To change fd's window size, the req argument should be TIOCSWINSZ.\nfunc IoctlSetWinsize(fd int, req int, value *Winsize) error {\n\t// TODO: if we get the chance, remove the req parameter and\n\t// hardcode TIOCSWINSZ.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlSetTermios performs an ioctl on fd with a *Termios.\n//\n// The req value will usually be TCSETA or TIOCSETA.\nfunc IoctlSetTermios(fd int, req int, value *Termios) error {\n\t// TODO: if we get the chance, remove the req parameter.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\n//\n// A few ioctl requests use the return value as an output parameter;\n// for those, IoctlRetInt should be used instead of this function.\nfunc IoctlGetInt(fd int, req int) (int, error) {\n\tvar value int\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req int) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req int) (*Termios, error) {\n\tvar value Termios\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ioctl_unsigned.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin || dragonfly || freebsd || hurd || linux || netbsd || openbsd\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req uint, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\n// IoctlSetPointerInt performs an ioctl operation which sets an\n// integer value on fd, using the specified request number. The ioctl\n// argument is called with a pointer to the integer value, rather than\n// passing the integer value directly.\nfunc IoctlSetPointerInt(fd int, req uint, value int) error {\n\tv := int32(value)\n\treturn ioctlPtr(fd, req, unsafe.Pointer(&v))\n}\n\n// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.\n//\n// To change fd's window size, the req argument should be TIOCSWINSZ.\nfunc IoctlSetWinsize(fd int, req uint, value *Winsize) error {\n\t// TODO: if we get the chance, remove the req parameter and\n\t// hardcode TIOCSWINSZ.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlSetTermios performs an ioctl on fd with a *Termios.\n//\n// The req value will usually be TCSETA or TIOCSETA.\nfunc IoctlSetTermios(fd int, req uint, value *Termios) error {\n\t// TODO: if we get the chance, remove the req parameter.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\n//\n// A few ioctl requests use the return value as an output parameter;\n// for those, IoctlRetInt should be used instead of this function.\nfunc IoctlGetInt(fd int, req uint) (int, error) {\n\tvar value int\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req uint) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc IoctlGetTermios(fd int, req uint) (*Termios, error) {\n\tvar value Termios\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ioctl_zos.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"unsafe\"\n)\n\n// ioctl itself should not be exposed directly, but additional get/set\n// functions for specific types are permissible.\n\n// IoctlSetInt performs an ioctl operation which sets an integer value\n// on fd, using the specified request number.\nfunc IoctlSetInt(fd int, req int, value int) error {\n\treturn ioctl(fd, req, uintptr(value))\n}\n\n// IoctlSetWinsize performs an ioctl on fd with a *Winsize argument.\n//\n// To change fd's window size, the req argument should be TIOCSWINSZ.\nfunc IoctlSetWinsize(fd int, req int, value *Winsize) error {\n\t// TODO: if we get the chance, remove the req parameter and\n\t// hardcode TIOCSWINSZ.\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\n// IoctlSetTermios performs an ioctl on fd with a *Termios.\n//\n// The req value is expected to be TCSETS, TCSETSW, or TCSETSF\nfunc IoctlSetTermios(fd int, req int, value *Termios) error {\n\tif (req != TCSETS) && (req != TCSETSW) && (req != TCSETSF) {\n\t\treturn ENOSYS\n\t}\n\terr := Tcsetattr(fd, int(req), value)\n\truntime.KeepAlive(value)\n\treturn err\n}\n\n// IoctlGetInt performs an ioctl operation which gets an integer value\n// from fd, using the specified request number.\n//\n// A few ioctl requests use the return value as an output parameter;\n// for those, IoctlRetInt should be used instead of this function.\nfunc IoctlGetInt(fd int, req int) (int, error) {\n\tvar value int\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn value, err\n}\n\nfunc IoctlGetWinsize(fd int, req int) (*Winsize, error) {\n\tvar value Winsize\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n// IoctlGetTermios performs an ioctl on fd with a *Termios.\n//\n// The req value is expected to be TCGETS\nfunc IoctlGetTermios(fd int, req int) (*Termios, error) {\n\tvar value Termios\n\tif req != TCGETS {\n\t\treturn &value, ENOSYS\n\t}\n\terr := Tcgetattr(fd, &value)\n\treturn &value, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mkall.sh",
    "content": "#!/usr/bin/env bash\n# Copyright 2009 The Go Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style\n# license that can be found in the LICENSE file.\n\n# This script runs or (given -n) prints suggested commands to generate files for\n# the Architecture/OS specified by the GOARCH and GOOS environment variables.\n# See README.md for more information about how the build system works.\n\nGOOSARCH=\"${GOOS}_${GOARCH}\"\n\n# defaults\nmksyscall=\"go run mksyscall.go\"\nmkerrors=\"./mkerrors.sh\"\nzerrors=\"zerrors_$GOOSARCH.go\"\nmksysctl=\"\"\nzsysctl=\"zsysctl_$GOOSARCH.go\"\nmksysnum=\nmktypes=\nmkasm=\nrun=\"sh\"\ncmd=\"\"\n\ncase \"$1\" in\n-syscalls)\n\tfor i in zsyscall*go\n\tdo\n\t\t# Run the command line that appears in the first line\n\t\t# of the generated file to regenerate it.\n\t\tsed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i\n\t\trm _$i\n\tdone\n\texit 0\n\t;;\n-n)\n\trun=\"cat\"\n\tcmd=\"echo\"\n\tshift\nesac\n\ncase \"$#\" in\n0)\n\t;;\n*)\n\techo 'usage: mkall.sh [-n]' 1>&2\n\texit 2\nesac\n\nif [[ \"$GOOS\" = \"linux\" ]]; then\n\t# Use the Docker-based build system\n\t# Files generated through docker (use $cmd so you can Ctl-C the build or run)\n\t$cmd docker build --tag generate:$GOOS $GOOS\n\t$cmd docker run --interactive --tty --volume $(cd -- \"$(dirname -- \"$0\")/..\" && pwd):/build generate:$GOOS\n\texit\nfi\n\nGOOSARCH_in=syscall_$GOOSARCH.go\ncase \"$GOOSARCH\" in\n_* | *_ | _)\n\techo 'undefined $GOOS_$GOARCH:' \"$GOOSARCH\" 1>&2\n\texit 1\n\t;;\naix_ppc)\n\tmkerrors=\"$mkerrors -maix32\"\n\tmksyscall=\"go run mksyscall_aix_ppc.go -aix\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\naix_ppc64)\n\tmkerrors=\"$mkerrors -maix64\"\n\tmksyscall=\"go run mksyscall_aix_ppc64.go -aix\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\ndarwin_amd64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\tmkasm=\"go run mkasm.go\"\n\t;;\ndarwin_arm64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\tmkasm=\"go run mkasm.go\"\n\t;;\ndragonfly_amd64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -dragonfly\"\n\tmksysnum=\"go run mksysnum.go 'https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nfreebsd_386)\n\tmkerrors=\"$mkerrors -m32\"\n\tmksyscall=\"go run mksyscall.go -l32\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nfreebsd_amd64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nfreebsd_arm)\n\tmkerrors=\"$mkerrors\"\n\tmksyscall=\"go run mksyscall.go -l32 -arm\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nfreebsd_arm64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nfreebsd_riscv64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksysnum=\"go run mksysnum.go 'https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nnetbsd_386)\n\tmkerrors=\"$mkerrors -m32\"\n\tmksyscall=\"go run mksyscall.go -l32 -netbsd\"\n\tmksysnum=\"go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nnetbsd_amd64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -netbsd\"\n\tmksysnum=\"go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nnetbsd_arm)\n\tmkerrors=\"$mkerrors\"\n\tmksyscall=\"go run mksyscall.go -l32 -netbsd -arm\"\n\tmksysnum=\"go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nnetbsd_arm64)\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -netbsd\"\n\tmksysnum=\"go run mksysnum.go 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master'\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nopenbsd_386)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m32\"\n\tmksyscall=\"go run mksyscall.go -l32 -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nopenbsd_amd64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nopenbsd_arm)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors\"\n\tmksyscall=\"go run mksyscall.go -l32 -openbsd -arm -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nopenbsd_arm64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nopenbsd_mips64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nopenbsd_ppc64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nopenbsd_riscv64)\n\tmkasm=\"go run mkasm.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksyscall=\"go run mksyscall.go -openbsd -libc\"\n\tmksysctl=\"go run mksysctl_openbsd.go\"\n\t# Let the type of C char be signed for making the bare syscall\n\t# API consistent across platforms.\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char\"\n\t;;\nsolaris_amd64)\n\tmksyscall=\"go run mksyscall_solaris.go\"\n\tmkerrors=\"$mkerrors -m64\"\n\tmksysnum=\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\nillumos_amd64)\n        mksyscall=\"go run mksyscall_solaris.go\"\n\tmkerrors=\n\tmksysnum=\n\tmktypes=\"GOARCH=$GOARCH go tool cgo -godefs\"\n\t;;\n*)\n\techo 'unrecognized $GOOS_$GOARCH: ' \"$GOOSARCH\" 1>&2\n\texit 1\n\t;;\nesac\n\n(\n\tif [ -n \"$mkerrors\" ]; then echo \"$mkerrors |gofmt >$zerrors\"; fi\n\tcase \"$GOOS\" in\n\t*)\n\t\tsyscall_goos=\"syscall_$GOOS.go\"\n\t\tcase \"$GOOS\" in\n\t\tdarwin | dragonfly | freebsd | netbsd | openbsd)\n\t\t\tsyscall_goos=\"syscall_bsd.go $syscall_goos\"\n\t\t\t;;\n\t\tesac\n\t\tif [ -n \"$mksyscall\" ]; then\n\t\t\tif [ \"$GOOSARCH\" == \"aix_ppc64\" ]; then\n\t\t\t\t# aix/ppc64 script generates files instead of writing to stdin.\n\t\t\t\techo \"$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in && gofmt -w zsyscall_$GOOSARCH.go && gofmt -w zsyscall_\"$GOOSARCH\"_gccgo.go && gofmt -w zsyscall_\"$GOOSARCH\"_gc.go \" ;\n\t\t\telif [ \"$GOOS\" == \"illumos\" ]; then\n\t\t\t        # illumos code generation requires a --illumos switch\n\t\t\t        echo \"$mksyscall -illumos -tags illumos,$GOARCH syscall_illumos.go |gofmt > zsyscall_illumos_$GOARCH.go\";\n\t\t\t        # illumos implies solaris, so solaris code generation is also required\n\t\t\t\techo \"$mksyscall -tags solaris,$GOARCH syscall_solaris.go syscall_solaris_$GOARCH.go |gofmt >zsyscall_solaris_$GOARCH.go\";\n\t\t\telse\n\t\t\t\techo \"$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go\";\n\t\t\tfi\n\t\tfi\n\tesac\n\tif [ -n \"$mksysctl\" ]; then echo \"$mksysctl |gofmt >$zsysctl\"; fi\n\tif [ -n \"$mksysnum\" ]; then echo \"$mksysnum |gofmt >zsysnum_$GOOSARCH.go\"; fi\n\tif [ -n \"$mktypes\" ]; then echo \"$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go\"; fi\n\tif [ -n \"$mkasm\" ]; then echo \"$mkasm $GOOS $GOARCH\"; fi\n) | $run\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mkerrors.sh",
    "content": "#!/usr/bin/env bash\n# Copyright 2009 The Go Authors. All rights reserved.\n# Use of this source code is governed by a BSD-style\n# license that can be found in the LICENSE file.\n\n# Generate Go code listing errors and other #defined constant\n# values (ENAMETOOLONG etc.), by asking the preprocessor\n# about the definitions.\n\nunset LANG\nexport LC_ALL=C\nexport LC_CTYPE=C\n\nif test -z \"$GOARCH\" -o -z \"$GOOS\"; then\n\techo 1>&2 \"GOARCH or GOOS not defined in environment\"\n\texit 1\nfi\n\n# Check that we are using the new build system if we should\nif [[ \"$GOOS\" = \"linux\" ]] && [[ \"$GOLANG_SYS_BUILD\" != \"docker\" ]]; then\n\techo 1>&2 \"In the Docker based build system, mkerrors should not be called directly.\"\n\techo 1>&2 \"See README.md\"\n\texit 1\nfi\n\nif [[ \"$GOOS\" = \"aix\" ]]; then\n\tCC=${CC:-gcc}\nelse\n\tCC=${CC:-cc}\nfi\n\nif [[ \"$GOOS\" = \"solaris\" ]]; then\n\t# Assumes GNU versions of utilities in PATH.\n\texport PATH=/usr/gnu/bin:$PATH\nfi\n\nuname=$(uname)\n\nincludes_AIX='\n#include <net/if.h>\n#include <net/netopt.h>\n#include <netinet/ip_mroute.h>\n#include <sys/protosw.h>\n#include <sys/stropts.h>\n#include <sys/mman.h>\n#include <sys/poll.h>\n#include <sys/select.h>\n#include <sys/termio.h>\n#include <termios.h>\n#include <fcntl.h>\n\n#define AF_LOCAL AF_UNIX\n'\n\nincludes_Darwin='\n#define _DARWIN_C_SOURCE\n#define KERNEL 1\n#define _DARWIN_USE_64_BIT_INODE\n#define __APPLE_USE_RFC_3542\n#include <stdint.h>\n#include <sys/stdio.h>\n#include <sys/attr.h>\n#include <sys/clonefile.h>\n#include <sys/kern_control.h>\n#include <sys/types.h>\n#include <sys/event.h>\n#include <sys/ptrace.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/stat.h>\n#include <sys/un.h>\n#include <sys/sockio.h>\n#include <sys/sys_domain.h>\n#include <sys/sysctl.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/utsname.h>\n#include <sys/wait.h>\n#include <sys/xattr.h>\n#include <sys/vsock.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/ip.h>\n#include <termios.h>\n\n// for backwards compatibility because moved TIOCREMOTE to Kernel.framework after MacOSX12.0.sdk.\n#define TIOCREMOTE 0x80047469\n'\n\nincludes_DragonFly='\n#include <sys/types.h>\n#include <sys/event.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/sockio.h>\n#include <sys/stat.h>\n#include <sys/sysctl.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/wait.h>\n#include <sys/ioctl.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_clone.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <termios.h>\n#include <netinet/ip.h>\n#include <net/ip_mroute/ip_mroute.h>\n'\n\nincludes_FreeBSD='\n#include <sys/capsicum.h>\n#include <sys/param.h>\n#include <sys/types.h>\n#include <sys/disk.h>\n#include <sys/event.h>\n#include <sys/sched.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/un.h>\n#include <sys/sockio.h>\n#include <sys/stat.h>\n#include <sys/sysctl.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/wait.h>\n#include <sys/ioctl.h>\n#include <sys/ptrace.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <termios.h>\n#include <netinet/ip.h>\n#include <netinet/ip_mroute.h>\n#include <sys/extattr.h>\n\n#if __FreeBSD__ >= 10\n#define IFT_CARP\t0xf8\t// IFT_CARP is deprecated in FreeBSD 10\n#undef SIOCAIFADDR\n#define SIOCAIFADDR\t_IOW(105, 26, struct oifaliasreq)\t// ifaliasreq contains if_data\n#undef SIOCSIFPHYADDR\n#define SIOCSIFPHYADDR\t_IOW(105, 70, struct oifaliasreq)\t// ifaliasreq contains if_data\n#endif\n'\n\nincludes_Linux='\n#define _LARGEFILE_SOURCE\n#define _LARGEFILE64_SOURCE\n#ifndef __LP64__\n#define _FILE_OFFSET_BITS 64\n#endif\n#define _GNU_SOURCE\n\n// <sys/ioctl.h> is broken on powerpc64, as it fails to include definitions of\n// these structures. We just include them copied from <bits/termios.h>.\n#if defined(__powerpc__)\nstruct sgttyb {\n        char    sg_ispeed;\n        char    sg_ospeed;\n        char    sg_erase;\n        char    sg_kill;\n        short   sg_flags;\n};\n\nstruct tchars {\n        char    t_intrc;\n        char    t_quitc;\n        char    t_startc;\n        char    t_stopc;\n        char    t_eofc;\n        char    t_brkc;\n};\n\nstruct ltchars {\n        char    t_suspc;\n        char    t_dsuspc;\n        char    t_rprntc;\n        char    t_flushc;\n        char    t_werasc;\n        char    t_lnextc;\n};\n#endif\n\n#include <bits/sockaddr.h>\n#include <sys/epoll.h>\n#include <sys/eventfd.h>\n#include <sys/inotify.h>\n#include <sys/ioctl.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/prctl.h>\n#include <sys/stat.h>\n#include <sys/types.h>\n#include <sys/time.h>\n#include <sys/select.h>\n#include <sys/signalfd.h>\n#include <sys/socket.h>\n#include <sys/timerfd.h>\n#include <sys/uio.h>\n#include <sys/xattr.h>\n#include <netinet/udp.h>\n#include <linux/audit.h>\n#include <linux/bpf.h>\n#include <linux/can.h>\n#include <linux/can/error.h>\n#include <linux/can/netlink.h>\n#include <linux/can/raw.h>\n#include <linux/capability.h>\n#include <linux/cryptouser.h>\n#include <linux/devlink.h>\n#include <linux/dm-ioctl.h>\n#include <linux/errqueue.h>\n#include <linux/ethtool_netlink.h>\n#include <linux/falloc.h>\n#include <linux/fanotify.h>\n#include <linux/fib_rules.h>\n#include <linux/filter.h>\n#include <linux/fs.h>\n#include <linux/fscrypt.h>\n#include <linux/fsverity.h>\n#include <linux/genetlink.h>\n#include <linux/hdreg.h>\n#include <linux/hidraw.h>\n#include <linux/if.h>\n#include <linux/if_addr.h>\n#include <linux/if_alg.h>\n#include <linux/if_arp.h>\n#include <linux/if_ether.h>\n#include <linux/if_ppp.h>\n#include <linux/if_tun.h>\n#include <linux/if_packet.h>\n#include <linux/if_xdp.h>\n#include <linux/input.h>\n#include <linux/kcm.h>\n#include <linux/kexec.h>\n#include <linux/keyctl.h>\n#include <linux/landlock.h>\n#include <linux/loop.h>\n#include <linux/lwtunnel.h>\n#include <linux/magic.h>\n#include <linux/memfd.h>\n#include <linux/module.h>\n#include <linux/mount.h>\n#include <linux/netfilter/nfnetlink.h>\n#include <linux/netfilter/nf_tables.h>\n#include <linux/netlink.h>\n#include <linux/net_namespace.h>\n#include <linux/nfc.h>\n#include <linux/nsfs.h>\n#include <linux/perf_event.h>\n#include <linux/pps.h>\n#include <linux/ptrace.h>\n#include <linux/random.h>\n#include <linux/reboot.h>\n#include <linux/rtc.h>\n#include <linux/rtnetlink.h>\n#include <linux/sched.h>\n#include <linux/seccomp.h>\n#include <linux/serial.h>\n#include <linux/sock_diag.h>\n#include <linux/sockios.h>\n#include <linux/taskstats.h>\n#include <linux/tipc.h>\n#include <linux/vm_sockets.h>\n#include <linux/wait.h>\n#include <linux/watchdog.h>\n#include <linux/wireguard.h>\n\n#include <mtd/ubi-user.h>\n#include <mtd/mtd-user.h>\n#include <net/route.h>\n\n#if defined(__sparc__)\n// On sparc{,64}, the kernel defines struct termios2 itself which clashes with the\n// definition in glibc. As only the error constants are needed here, include the\n// generic termibits.h (which is included by termbits.h on sparc).\n#include <asm-generic/termbits.h>\n#else\n#include <asm/termbits.h>\n#endif\n\n#ifndef PTRACE_GETREGS\n#define PTRACE_GETREGS\t0xc\n#endif\n\n#ifndef PTRACE_SETREGS\n#define PTRACE_SETREGS\t0xd\n#endif\n\n#ifdef SOL_BLUETOOTH\n// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h\n// but it is already in bluetooth_linux.go\n#undef SOL_BLUETOOTH\n#endif\n\n// Certain constants are missing from the fs/crypto UAPI\n#define FS_KEY_DESC_PREFIX              \"fscrypt:\"\n#define FS_KEY_DESC_PREFIX_SIZE         8\n#define FS_MAX_KEY_SIZE                 64\n\n// The code generator produces -0x1 for (~0), but an unsigned value is necessary\n// for the tipc_subscr timeout __u32 field.\n#undef TIPC_WAIT_FOREVER\n#define TIPC_WAIT_FOREVER 0xffffffff\n\n// Copied from linux/netfilter/nf_nat.h\n// Including linux/netfilter/nf_nat.h here causes conflicts between linux/in.h\n// and netinet/in.h.\n#define NF_NAT_RANGE_MAP_IPS\t\t\t(1 << 0)\n#define NF_NAT_RANGE_PROTO_SPECIFIED\t\t(1 << 1)\n#define NF_NAT_RANGE_PROTO_RANDOM\t\t(1 << 2)\n#define NF_NAT_RANGE_PERSISTENT\t\t\t(1 << 3)\n#define NF_NAT_RANGE_PROTO_RANDOM_FULLY\t\t(1 << 4)\n#define NF_NAT_RANGE_PROTO_OFFSET\t\t(1 << 5)\n#define NF_NAT_RANGE_NETMAP\t\t\t(1 << 6)\n#define NF_NAT_RANGE_PROTO_RANDOM_ALL\t\t\\\n\t(NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)\n#define NF_NAT_RANGE_MASK\t\t\t\t\t\\\n\t(NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED |\t\\\n\t NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT |\t\\\n\t NF_NAT_RANGE_PROTO_RANDOM_FULLY | NF_NAT_RANGE_PROTO_OFFSET | \\\n\t NF_NAT_RANGE_NETMAP)\n\n// Copied from linux/hid.h.\n// Keep in sync with the size of the referenced fields.\n#define _HIDIOCGRAWNAME_LEN\t128 // sizeof_field(struct hid_device, name)\n#define _HIDIOCGRAWPHYS_LEN\t64  // sizeof_field(struct hid_device, phys)\n#define _HIDIOCGRAWUNIQ_LEN\t64  // sizeof_field(struct hid_device, uniq)\n\n#define _HIDIOCGRAWNAME\t\tHIDIOCGRAWNAME(_HIDIOCGRAWNAME_LEN)\n#define _HIDIOCGRAWPHYS\t\tHIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN)\n#define _HIDIOCGRAWUNIQ\t\tHIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN)\n\n'\n\nincludes_NetBSD='\n#include <sys/types.h>\n#include <sys/param.h>\n#include <sys/event.h>\n#include <sys/extattr.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/sched.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/sockio.h>\n#include <sys/sysctl.h>\n#include <sys/termios.h>\n#include <sys/ttycom.h>\n#include <sys/wait.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/in_systm.h>\n#include <netinet/ip.h>\n#include <netinet/ip_mroute.h>\n#include <netinet/if_ether.h>\n\n// Needed since <sys/param.h> refers to it...\n#define schedppq 1\n'\n\nincludes_OpenBSD='\n#include <sys/types.h>\n#include <sys/param.h>\n#include <sys/event.h>\n#include <sys/mman.h>\n#include <sys/mount.h>\n#include <sys/select.h>\n#include <sys/sched.h>\n#include <sys/socket.h>\n#include <sys/sockio.h>\n#include <sys/stat.h>\n#include <sys/sysctl.h>\n#include <sys/termios.h>\n#include <sys/ttycom.h>\n#include <sys/unistd.h>\n#include <sys/wait.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_types.h>\n#include <net/if_var.h>\n#include <net/route.h>\n#include <netinet/in.h>\n#include <netinet/in_systm.h>\n#include <netinet/ip.h>\n#include <netinet/ip_mroute.h>\n#include <netinet/if_ether.h>\n#include <net/if_bridge.h>\n\n// We keep some constants not supported in OpenBSD 5.5 and beyond for\n// the promise of compatibility.\n#define EMUL_ENABLED\t\t0x1\n#define EMUL_NATIVE\t\t0x2\n#define IPV6_FAITH\t\t0x1d\n#define IPV6_OPTIONS\t\t0x1\n#define IPV6_RTHDR_STRICT\t0x1\n#define IPV6_SOCKOPT_RESERVED1\t0x3\n#define SIOCGIFGENERIC\t\t0xc020693a\n#define SIOCSIFGENERIC\t\t0x80206939\n#define WALTSIG\t\t\t0x4\n'\n\nincludes_SunOS='\n#include <limits.h>\n#include <sys/types.h>\n#include <sys/select.h>\n#include <sys/socket.h>\n#include <sys/sockio.h>\n#include <sys/stat.h>\n#include <sys/stream.h>\n#include <sys/mman.h>\n#include <sys/wait.h>\n#include <sys/ioctl.h>\n#include <sys/mkdev.h>\n#include <net/bpf.h>\n#include <net/if.h>\n#include <net/if_arp.h>\n#include <net/if_types.h>\n#include <net/route.h>\n#include <netinet/icmp6.h>\n#include <netinet/in.h>\n#include <netinet/ip.h>\n#include <netinet/ip_mroute.h>\n#include <termios.h>\n'\n\n\nincludes='\n#include <sys/types.h>\n#include <sys/file.h>\n#include <fcntl.h>\n#include <dirent.h>\n#include <sys/socket.h>\n#include <netinet/in.h>\n#include <netinet/ip.h>\n#include <netinet/ip6.h>\n#include <netinet/tcp.h>\n#include <errno.h>\n#include <sys/signal.h>\n#include <signal.h>\n#include <sys/resource.h>\n#include <time.h>\n'\nccflags=\"$@\"\n\n# Write go tool cgo -godefs input.\n(\n\techo package unix\n\techo\n\techo '/*'\n\tindirect=\"includes_$(uname)\"\n\techo \"${!indirect} $includes\"\n\techo '*/'\n\techo 'import \"C\"'\n\techo 'import \"syscall\"'\n\techo\n\techo 'const ('\n\n\t# The gcc command line prints all the #defines\n\t# it encounters while processing the input\n\techo \"${!indirect} $includes\" | $CC -x c - -E -dM $ccflags |\n\tawk '\n\t\t$1 != \"#define\" || $2 ~ /\\(/ || $3 == \"\" {next}\n\n\t\t$2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next}  # 386 registers\n\t\t$2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next}\n\t\t$2 ~ /^(SCM_SRCRT)$/ {next}\n\t\t$2 ~ /^(MAP_FAILED)$/ {next}\n\t\t$2 ~ /^ELF_.*$/ {next}# <asm/elf.h> contains ELF_ARCH, etc.\n\n\t\t$2 ~ /^EXTATTR_NAMESPACE_NAMES/ ||\n\t\t$2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next}\n\n\t\t$2 !~ /^ECCAPBITS/ &&\n\t\t$2 !~ /^ETH_/ &&\n\t\t$2 !~ /^EPROC_/ &&\n\t\t$2 !~ /^EQUIV_/ &&\n\t\t$2 !~ /^EXPR_/ &&\n\t\t$2 !~ /^EVIOC/ &&\n\t\t$2 ~ /^E[A-Z0-9_]+$/ ||\n\t\t$2 ~ /^B[0-9_]+$/ ||\n\t\t$2 ~ /^(OLD|NEW)DEV$/ ||\n\t\t$2 == \"BOTHER\" ||\n\t\t$2 ~ /^CI?BAUD(EX)?$/ ||\n\t\t$2 == \"IBSHIFT\" ||\n\t\t$2 ~ /^V[A-Z0-9]+$/ ||\n\t\t$2 ~ /^CS[A-Z0-9]/ ||\n\t\t$2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ ||\n\t\t$2 ~ /^IGN/ ||\n\t\t$2 ~ /^IX(ON|ANY|OFF)$/ ||\n\t\t$2 ~ /^IN(LCR|PCK)$/ ||\n\t\t$2 !~ \"X86_CR3_PCID_NOFLUSH\" &&\n\t\t$2 ~ /(^FLU?SH)|(FLU?SH$)/ ||\n\t\t$2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ ||\n\t\t$2 == \"BRKINT\" ||\n\t\t$2 == \"HUPCL\" ||\n\t\t$2 == \"PENDIN\" ||\n\t\t$2 == \"TOSTOP\" ||\n\t\t$2 == \"XCASE\" ||\n\t\t$2 == \"ALTWERASE\" ||\n\t\t$2 == \"NOKERNINFO\" ||\n\t\t$2 == \"NFDBITS\" ||\n\t\t$2 ~ /^PAR/ ||\n\t\t$2 ~ /^SIG[^_]/ ||\n\t\t$2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ ||\n\t\t$2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ ||\n\t\t$2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ ||\n\t\t$2 ~ /^O?XTABS$/ ||\n\t\t$2 ~ /^TC[IO](ON|OFF)$/ ||\n\t\t$2 ~ /^IN_/ ||\n\t\t$2 ~ /^KCM/ ||\n\t\t$2 ~ /^LANDLOCK_/ ||\n\t\t$2 ~ /^LOCK_(SH|EX|NB|UN)$/ ||\n\t\t$2 ~ /^LO_(KEY|NAME)_SIZE$/ ||\n\t\t$2 ~ /^LOOP_(CLR|CTL|GET|SET)_/ ||\n\t\t$2 == \"LOOP_CONFIGURE\" ||\n\t\t$2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ ||\n\t\t$2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ ||\n\t\t$2 ~ /^NFC_.*_(MAX)?SIZE$/ ||\n\t\t$2 ~ /^RAW_PAYLOAD_/ ||\n\t\t$2 ~ /^[US]F_/ ||\n\t\t$2 ~ /^TP_STATUS_/ ||\n\t\t$2 ~ /^FALLOC_/ ||\n\t\t$2 ~ /^ICMPV?6?_(FILTER|SEC)/ ||\n\t\t$2 == \"SOMAXCONN\" ||\n\t\t$2 == \"NAME_MAX\" ||\n\t\t$2 == \"IFNAMSIZ\" ||\n\t\t$2 ~ /^CTL_(HW|KERN|MAXNAME|NET|QUERY)$/ ||\n\t\t$2 ~ /^KERN_(HOSTNAME|OS(RELEASE|TYPE)|VERSION)$/ ||\n\t\t$2 ~ /^HW_MACHINE$/ ||\n\t\t$2 ~ /^SYSCTL_VERS/ ||\n\t\t$2 !~ \"MNT_BITS\" &&\n\t\t$2 ~ /^(MS|MNT|MOUNT|UMOUNT)_/ ||\n\t\t$2 ~ /^NS_GET_/ ||\n\t\t$2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ ||\n\t\t$2 ~ /^(O|F|[ES]?FD|NAME|S|PTRACE|PT|PIOD|TFD)_/ ||\n\t\t$2 ~ /^KEXEC_/ ||\n\t\t$2 ~ /^LINUX_REBOOT_CMD_/ ||\n\t\t$2 ~ /^LINUX_REBOOT_MAGIC[12]$/ ||\n\t\t$2 ~ /^MODULE_INIT_/ ||\n\t\t$2 !~ \"NLA_TYPE_MASK\" &&\n\t\t$2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ &&\n\t\t$2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ ||\n\t\t$2 ~ /^SOCK_|SK_DIAG_|SKNLGRP_$/ ||\n\t\t$2 ~ /^(CONNECT|SAE)_/ ||\n\t\t$2 ~ /^FIORDCHK$/ ||\n\t\t$2 ~ /^SIOC/ ||\n\t\t$2 ~ /^TIOC/ ||\n\t\t$2 ~ /^TCGET/ ||\n\t\t$2 ~ /^TCSET/ ||\n\t\t$2 ~ /^TC(FLSH|SBRKP?|XONC)$/ ||\n\t\t$2 !~ \"RTF_BITS\" &&\n\t\t$2 ~ /^(IFF|IFT|NET_RT|RTM(GRP)?|RTF|RTV|RTA|RTAX)_/ ||\n\t\t$2 ~ /^BIOC/ ||\n\t\t$2 ~ /^DIOC/ ||\n\t\t$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||\n\t\t$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||\n\t\t$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||\n\t\t$2 ~ /^CLONE_[A-Z_]+/ ||\n\t\t$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+|BPF_F_LINK)$/ &&\n\t\t$2 ~ /^(BPF|DLT)_/ ||\n\t\t$2 ~ /^AUDIT_/ ||\n\t\t$2 ~ /^(CLOCK|TIMER)_/ ||\n\t\t$2 ~ /^CAN_/ ||\n\t\t$2 ~ /^CAP_/ ||\n\t\t$2 ~ /^CP_/ ||\n\t\t$2 ~ /^CPUSTATES$/ ||\n\t\t$2 ~ /^CTLIOCGINFO$/ ||\n\t\t$2 ~ /^ALG_/ ||\n\t\t$2 ~ /^FI(CLONE|DEDUPERANGE)/ ||\n\t\t$2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE)/ ||\n\t\t$2 ~ /^FS_IOC_.*(ENCRYPTION|VERITY|[GS]ETFLAGS)/ ||\n\t\t$2 ~ /^FS_VERITY_/ ||\n\t\t$2 ~ /^FSCRYPT_/ ||\n\t\t$2 ~ /^DM_/ ||\n\t\t$2 ~ /^GRND_/ ||\n\t\t$2 ~ /^RND/ ||\n\t\t$2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ ||\n\t\t$2 ~ /^KEYCTL_/ ||\n\t\t$2 ~ /^PERF_/ ||\n\t\t$2 ~ /^SECCOMP_/ ||\n\t\t$2 ~ /^SEEK_/ ||\n\t\t$2 ~ /^SCHED_/ ||\n\t\t$2 ~ /^SPLICE_/ ||\n\t\t$2 ~ /^SYNC_FILE_RANGE_/ ||\n\t\t$2 !~ /IOC_MAGIC/ &&\n\t\t$2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ ||\n\t\t$2 ~ /^(VM|VMADDR)_/ ||\n\t\t$2 ~ /^IOCTL_VM_SOCKETS_/ ||\n\t\t$2 ~ /^(TASKSTATS|TS)_/ ||\n\t\t$2 ~ /^CGROUPSTATS_/ ||\n\t\t$2 ~ /^GENL_/ ||\n\t\t$2 ~ /^STATX_/ ||\n\t\t$2 ~ /^RENAME/ ||\n\t\t$2 ~ /^UBI_IOC[A-Z]/ ||\n\t\t$2 ~ /^UTIME_/ ||\n\t\t$2 ~ /^XATTR_(CREATE|REPLACE|NO(DEFAULT|FOLLOW|SECURITY)|SHOWCOMPRESSION)/ ||\n\t\t$2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ ||\n\t\t$2 ~ /^FSOPT_/ ||\n\t\t$2 ~ /^WDIO[CFS]_/ ||\n\t\t$2 ~ /^NFN/ ||\n\t\t$2 !~ /^NFT_META_IIFTYPE/ &&\n\t\t$2 ~ /^NFT_/ ||\n\t\t$2 ~ /^NF_NAT_/ ||\n\t\t$2 ~ /^XDP_/ ||\n\t\t$2 ~ /^RWF_/ ||\n\t\t$2 ~ /^(HDIO|WIN|SMART)_/ ||\n\t\t$2 ~ /^CRYPTO_/ ||\n\t\t$2 ~ /^TIPC_/ ||\n\t\t$2 !~  \"DEVLINK_RELOAD_LIMITS_VALID_MASK\" &&\n\t\t$2 ~ /^DEVLINK_/ ||\n\t\t$2 ~ /^ETHTOOL_/ ||\n\t\t$2 ~ /^LWTUNNEL_IP/ ||\n\t\t$2 ~ /^ITIMER_/ ||\n\t\t$2 !~ \"WMESGLEN\" &&\n\t\t$2 ~ /^W[A-Z0-9]+$/ ||\n\t\t$2 ~ /^P_/ ||\n\t\t$2 ~/^PPPIOC/ ||\n\t\t$2 ~ /^FAN_|FANOTIFY_/ ||\n\t\t$2 == \"HID_MAX_DESCRIPTOR_SIZE\" ||\n\t\t$2 ~ /^_?HIDIOC/ ||\n\t\t$2 ~ /^BUS_(USB|HIL|BLUETOOTH|VIRTUAL)$/ ||\n\t\t$2 ~ /^MTD/ ||\n\t\t$2 ~ /^OTP/ ||\n\t\t$2 ~ /^MEM/ ||\n\t\t$2 ~ /^WG/ ||\n\t\t$2 ~ /^FIB_RULE_/ ||\n\t\t$2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE|IOMIN$|IOOPT$|ALIGNOFF$|DISCARD|ROTATIONAL$|ZEROOUT$|GETDISKSEQ$)/ {printf(\"\\t%s = C.%s\\n\", $2, $2)}\n\t\t$2 ~ /^__WCOREFLAG$/ {next}\n\t\t$2 ~ /^__W[A-Z0-9]+$/ {printf(\"\\t%s = C.%s\\n\", substr($2,3), $2)}\n\n\t\t{next}\n\t' | sort\n\n\techo ')'\n) >_const.go\n\n# Pull out the error names for later.\nerrors=$(\n\techo '#include <errno.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' |\n\tsort\n)\n\n# Pull out the signal names for later.\nsignals=$(\n\techo '#include <signal.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' |\n\tgrep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |\n\tsort\n)\n\n# Again, writing regexps to a file.\necho '#include <errno.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^E[A-Z0-9_]+$/ { print \"^\\t\" $2 \"[ \\t]*=\" }' |\n\tsort >_error.grep\necho '#include <signal.h>' | $CC -x c - -E -dM $ccflags |\n\tawk '$1==\"#define\" && $2 ~ /^SIG[A-Z0-9]+$/ { print \"^\\t\" $2 \"[ \\t]*=\" }' |\n\tgrep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' |\n\tsort >_signal.grep\n\necho '// mkerrors.sh' \"$@\"\necho '// Code generated by the command above; see README.md. DO NOT EDIT.'\necho\necho \"//go:build ${GOARCH} && ${GOOS}\"\necho\ngo tool cgo -godefs -- \"$@\" _const.go >_error.out\ncat _error.out | grep -vf _error.grep | grep -vf _signal.grep\necho\necho '// Errors'\necho 'const ('\ncat _error.out | grep -f _error.grep | sed 's/=\\(.*\\)/= syscall.Errno(\\1)/'\necho ')'\n\necho\necho '// Signals'\necho 'const ('\ncat _error.out | grep -f _signal.grep | sed 's/=\\(.*\\)/= syscall.Signal(\\1)/'\necho ')'\n\n# Run C program to print error and syscall strings.\n(\n\techo -E \"\n#include <stdio.h>\n#include <stdlib.h>\n#include <errno.h>\n#include <ctype.h>\n#include <string.h>\n#include <signal.h>\n\n#define nelem(x) (sizeof(x)/sizeof((x)[0]))\n\nenum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below\n\nstruct tuple {\n\tint num;\n\tconst char *name;\n};\n\nstruct tuple errors[] = {\n\"\n\tfor i in $errors\n\tdo\n\t\techo -E '\t{'$i', \"'$i'\" },'\n\tdone\n\n\techo -E \"\n};\n\nstruct tuple signals[] = {\n\"\n\tfor i in $signals\n\tdo\n\t\techo -E '\t{'$i', \"'$i'\" },'\n\tdone\n\n\t# Use -E because on some systems bash builtin interprets \\n itself.\n\techo -E '\n};\n\nstatic int\ntuplecmp(const void *a, const void *b)\n{\n\treturn ((struct tuple *)a)->num - ((struct tuple *)b)->num;\n}\n\nint\nmain(void)\n{\n\tint i, e;\n\tchar buf[1024], *p;\n\n\tprintf(\"\\n\\n// Error table\\n\");\n\tprintf(\"var errorList = [...]struct {\\n\");\n\tprintf(\"\\tnum  syscall.Errno\\n\");\n\tprintf(\"\\tname string\\n\");\n\tprintf(\"\\tdesc string\\n\");\n\tprintf(\"} {\\n\");\n\tqsort(errors, nelem(errors), sizeof errors[0], tuplecmp);\n\tfor(i=0; i<nelem(errors); i++) {\n\t\te = errors[i].num;\n\t\tif(i > 0 && errors[i-1].num == e)\n\t\t\tcontinue;\n\t\tstrncpy(buf, strerror(e), sizeof(buf) - 1);\n\t\tbuf[sizeof(buf) - 1] = '\\0';\n\t\t// lowercase first letter: Bad -> bad, but STREAM -> STREAM.\n\t\tif(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)\n\t\t\tbuf[0] += a - A;\n\t\tprintf(\"\\t{ %d, \\\"%s\\\", \\\"%s\\\" },\\n\", e, errors[i].name, buf);\n\t}\n\tprintf(\"}\\n\\n\");\n\n\tprintf(\"\\n\\n// Signal table\\n\");\n\tprintf(\"var signalList = [...]struct {\\n\");\n\tprintf(\"\\tnum  syscall.Signal\\n\");\n\tprintf(\"\\tname string\\n\");\n\tprintf(\"\\tdesc string\\n\");\n\tprintf(\"} {\\n\");\n\tqsort(signals, nelem(signals), sizeof signals[0], tuplecmp);\n\tfor(i=0; i<nelem(signals); i++) {\n\t\te = signals[i].num;\n\t\tif(i > 0 && signals[i-1].num == e)\n\t\t\tcontinue;\n\t\tstrncpy(buf, strsignal(e), sizeof(buf) - 1);\n\t\tbuf[sizeof(buf) - 1] = '\\0';\n\t\t// lowercase first letter: Bad -> bad, but STREAM -> STREAM.\n\t\tif(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z)\n\t\t\tbuf[0] += a - A;\n\t\t// cut trailing : number.\n\t\tp = strrchr(buf, \":\"[0]);\n\t\tif(p)\n\t\t\t*p = '\\0';\n\t\tprintf(\"\\t{ %d, \\\"%s\\\", \\\"%s\\\" },\\n\", e, signals[i].name, buf);\n\t}\n\tprintf(\"}\\n\\n\");\n\n\treturn 0;\n}\n\n'\n) >_errors.c\n\n$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mmap_nomremap.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || openbsd || solaris || zos\n\npackage unix\n\nvar mapper = &mmapper{\n\tactive: make(map[*byte][]byte),\n\tmmap:   mmap,\n\tmunmap: munmap,\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/mremap.go",
    "content": "// Copyright 2023 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux || netbsd\n\npackage unix\n\nimport \"unsafe\"\n\ntype mremapMmapper struct {\n\tmmapper\n\tmremap func(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error)\n}\n\nvar mapper = &mremapMmapper{\n\tmmapper: mmapper{\n\t\tactive: make(map[*byte][]byte),\n\t\tmmap:   mmap,\n\t\tmunmap: munmap,\n\t},\n\tmremap: mremap,\n}\n\nfunc (m *mremapMmapper) Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) {\n\tif newLength <= 0 || len(oldData) == 0 || len(oldData) != cap(oldData) || flags&mremapFixed != 0 {\n\t\treturn nil, EINVAL\n\t}\n\n\tpOld := &oldData[cap(oldData)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tbOld := m.active[pOld]\n\tif bOld == nil || &bOld[0] != &oldData[0] {\n\t\treturn nil, EINVAL\n\t}\n\tnewAddr, errno := m.mremap(uintptr(unsafe.Pointer(&bOld[0])), uintptr(len(bOld)), uintptr(newLength), flags, 0)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\tbNew := unsafe.Slice((*byte)(unsafe.Pointer(newAddr)), newLength)\n\tpNew := &bNew[cap(bNew)-1]\n\tif flags&mremapDontunmap == 0 {\n\t\tdelete(m.active, pOld)\n\t}\n\tm.active[pNew] = bNew\n\treturn bNew, nil\n}\n\nfunc Mremap(oldData []byte, newLength int, flags int) (data []byte, err error) {\n\treturn mapper.Mremap(oldData, newLength, flags)\n}\n\nfunc MremapPtr(oldAddr unsafe.Pointer, oldSize uintptr, newAddr unsafe.Pointer, newSize uintptr, flags int) (ret unsafe.Pointer, err error) {\n\txaddr, err := mapper.mremap(uintptr(oldAddr), oldSize, newSize, flags, uintptr(newAddr))\n\treturn unsafe.Pointer(xaddr), err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/pagesize_unix.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\n// For Unix, get the pagesize from the runtime.\n\npackage unix\n\nimport \"syscall\"\n\nfunc Getpagesize() int {\n\treturn syscall.Getpagesize()\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/pledge_openbsd.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strconv\"\n)\n\n// Pledge implements the pledge syscall.\n//\n// This changes both the promises and execpromises; use PledgePromises or\n// PledgeExecpromises to only change the promises or execpromises\n// respectively.\n//\n// For more information see pledge(2).\nfunc Pledge(promises, execpromises string) error {\n\tif err := pledgeAvailable(); err != nil {\n\t\treturn err\n\t}\n\n\tpptr, err := BytePtrFromString(promises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\texptr, err := BytePtrFromString(execpromises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn pledge(pptr, exptr)\n}\n\n// PledgePromises implements the pledge syscall.\n//\n// This changes the promises and leaves the execpromises untouched.\n//\n// For more information see pledge(2).\nfunc PledgePromises(promises string) error {\n\tif err := pledgeAvailable(); err != nil {\n\t\treturn err\n\t}\n\n\tpptr, err := BytePtrFromString(promises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn pledge(pptr, nil)\n}\n\n// PledgeExecpromises implements the pledge syscall.\n//\n// This changes the execpromises and leaves the promises untouched.\n//\n// For more information see pledge(2).\nfunc PledgeExecpromises(execpromises string) error {\n\tif err := pledgeAvailable(); err != nil {\n\t\treturn err\n\t}\n\n\texptr, err := BytePtrFromString(execpromises)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn pledge(nil, exptr)\n}\n\n// majmin returns major and minor version number for an OpenBSD system.\nfunc majmin() (major int, minor int, err error) {\n\tvar v Utsname\n\terr = Uname(&v)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tmajor, err = strconv.Atoi(string(v.Release[0]))\n\tif err != nil {\n\t\terr = errors.New(\"cannot parse major version number returned by uname\")\n\t\treturn\n\t}\n\n\tminor, err = strconv.Atoi(string(v.Release[2]))\n\tif err != nil {\n\t\terr = errors.New(\"cannot parse minor version number returned by uname\")\n\t\treturn\n\t}\n\n\treturn\n}\n\n// pledgeAvailable checks for availability of the pledge(2) syscall\n// based on the running OpenBSD version.\nfunc pledgeAvailable() error {\n\tmaj, min, err := majmin()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// Require OpenBSD 6.4 as a minimum.\n\tif maj < 6 || (maj == 6 && min <= 3) {\n\t\treturn fmt.Errorf(\"cannot call Pledge on OpenBSD %d.%d\", maj, min)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ptrace_darwin.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin && !ios\n\npackage unix\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) error {\n\treturn ptrace1(request, pid, addr, data)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/ptrace_ios.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build ios\n\npackage unix\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\treturn ENOTSUP\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/race.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin && race) || (linux && race) || (freebsd && race)\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"unsafe\"\n)\n\nconst raceenabled = true\n\nfunc raceAcquire(addr unsafe.Pointer) {\n\truntime.RaceAcquire(addr)\n}\n\nfunc raceReleaseMerge(addr unsafe.Pointer) {\n\truntime.RaceReleaseMerge(addr)\n}\n\nfunc raceReadRange(addr unsafe.Pointer, len int) {\n\truntime.RaceReadRange(addr, len)\n}\n\nfunc raceWriteRange(addr unsafe.Pointer, len int) {\n\truntime.RaceWriteRange(addr, len)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/race0.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || (darwin && !race) || (linux && !race) || (freebsd && !race) || netbsd || openbsd || solaris || dragonfly || zos\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nconst raceenabled = false\n\nfunc raceAcquire(addr unsafe.Pointer) {\n}\n\nfunc raceReleaseMerge(addr unsafe.Pointer) {\n}\n\nfunc raceReadRange(addr unsafe.Pointer, len int) {\n}\n\nfunc raceWriteRange(addr unsafe.Pointer, len int) {\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/readdirent_getdents.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || dragonfly || freebsd || linux || netbsd || openbsd\n\npackage unix\n\n// ReadDirent reads directory entries from fd and writes them into buf.\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\treturn Getdents(fd, buf)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/readdirent_getdirentries.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin || zos\n\npackage unix\n\nimport \"unsafe\"\n\n// ReadDirent reads directory entries from fd and writes them into buf.\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\t// Final argument is (basep *uintptr) and the syscall doesn't take nil.\n\t// 64 bits should be enough. (32 bits isn't even on 386). Since the\n\t// actual system call is getdirentries64, 64 is a good guess.\n\t// TODO(rsc): Can we use a single global basep for all calls?\n\tvar base = (*uintptr)(unsafe.Pointer(new(uint64)))\n\treturn Getdirentries(fd, buf, base)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_dragonfly.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\n// Round the length of a raw sockaddr up to align it properly.\nfunc cmsgAlignOf(salen int) int {\n\tsalign := SizeofPtr\n\tif SizeofPtr == 8 && !supportsABI(_dragonflyABIChangeVersion) {\n\t\t// 64-bit Dragonfly before the September 2019 ABI changes still requires\n\t\t// 32-bit aligned access to network subsystem.\n\t\tsalign = 4\n\t}\n\treturn (salen + salign - 1) & ^(salign - 1)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_linux.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Socket control messages\n\npackage unix\n\nimport \"unsafe\"\n\n// UnixCredentials encodes credentials into a socket control message\n// for sending to another process. This can be used for\n// authentication.\nfunc UnixCredentials(ucred *Ucred) []byte {\n\tb := make([]byte, CmsgSpace(SizeofUcred))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_SOCKET\n\th.Type = SCM_CREDENTIALS\n\th.SetLen(CmsgLen(SizeofUcred))\n\t*(*Ucred)(h.data(0)) = *ucred\n\treturn b\n}\n\n// ParseUnixCredentials decodes a socket control message that contains\n// credentials in a Ucred structure. To receive such a message, the\n// SO_PASSCRED option must be enabled on the socket.\nfunc ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {\n\tif m.Header.Level != SOL_SOCKET {\n\t\treturn nil, EINVAL\n\t}\n\tif m.Header.Type != SCM_CREDENTIALS {\n\t\treturn nil, EINVAL\n\t}\n\tucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))\n\treturn &ucred, nil\n}\n\n// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO.\nfunc PktInfo4(info *Inet4Pktinfo) []byte {\n\tb := make([]byte, CmsgSpace(SizeofInet4Pktinfo))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_IP\n\th.Type = IP_PKTINFO\n\th.SetLen(CmsgLen(SizeofInet4Pktinfo))\n\t*(*Inet4Pktinfo)(h.data(0)) = *info\n\treturn b\n}\n\n// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO.\nfunc PktInfo6(info *Inet6Pktinfo) []byte {\n\tb := make([]byte, CmsgSpace(SizeofInet6Pktinfo))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_IPV6\n\th.Type = IPV6_PKTINFO\n\th.SetLen(CmsgLen(SizeofInet6Pktinfo))\n\t*(*Inet6Pktinfo)(h.data(0)) = *info\n\treturn b\n}\n\n// ParseOrigDstAddr decodes a socket control message containing the original\n// destination address. To receive such a message the IP_RECVORIGDSTADDR or\n// IPV6_RECVORIGDSTADDR option must be enabled on the socket.\nfunc ParseOrigDstAddr(m *SocketControlMessage) (Sockaddr, error) {\n\tswitch {\n\tcase m.Header.Level == SOL_IP && m.Header.Type == IP_ORIGDSTADDR:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(&m.Data[0]))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase m.Header.Level == SOL_IPV6 && m.Header.Type == IPV6_ORIGDSTADDR:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(&m.Data[0]))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tdefault:\n\t\treturn nil, EINVAL\n\t}\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_unix.go",
    "content": "// Copyright 2011 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\n// Socket control messages\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// CmsgLen returns the value to store in the Len field of the Cmsghdr\n// structure, taking into account any necessary alignment.\nfunc CmsgLen(datalen int) int {\n\treturn cmsgAlignOf(SizeofCmsghdr) + datalen\n}\n\n// CmsgSpace returns the number of bytes an ancillary element with\n// payload of the passed data length occupies.\nfunc CmsgSpace(datalen int) int {\n\treturn cmsgAlignOf(SizeofCmsghdr) + cmsgAlignOf(datalen)\n}\n\nfunc (h *Cmsghdr) data(offset uintptr) unsafe.Pointer {\n\treturn unsafe.Pointer(uintptr(unsafe.Pointer(h)) + uintptr(cmsgAlignOf(SizeofCmsghdr)) + offset)\n}\n\n// SocketControlMessage represents a socket control message.\ntype SocketControlMessage struct {\n\tHeader Cmsghdr\n\tData   []byte\n}\n\n// ParseSocketControlMessage parses b as an array of socket control\n// messages.\nfunc ParseSocketControlMessage(b []byte) ([]SocketControlMessage, error) {\n\tvar msgs []SocketControlMessage\n\ti := 0\n\tfor i+CmsgLen(0) <= len(b) {\n\t\th, dbuf, err := socketControlMessageHeaderAndData(b[i:])\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tm := SocketControlMessage{Header: *h, Data: dbuf}\n\t\tmsgs = append(msgs, m)\n\t\ti += cmsgAlignOf(int(h.Len))\n\t}\n\treturn msgs, nil\n}\n\n// ParseOneSocketControlMessage parses a single socket control message from b, returning the message header,\n// message data (a slice of b), and the remainder of b after that single message.\n// When there are no remaining messages, len(remainder) == 0.\nfunc ParseOneSocketControlMessage(b []byte) (hdr Cmsghdr, data []byte, remainder []byte, err error) {\n\th, dbuf, err := socketControlMessageHeaderAndData(b)\n\tif err != nil {\n\t\treturn Cmsghdr{}, nil, nil, err\n\t}\n\tif i := cmsgAlignOf(int(h.Len)); i < len(b) {\n\t\tremainder = b[i:]\n\t}\n\treturn *h, dbuf, remainder, nil\n}\n\nfunc socketControlMessageHeaderAndData(b []byte) (*Cmsghdr, []byte, error) {\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\tif h.Len < SizeofCmsghdr || uint64(h.Len) > uint64(len(b)) {\n\t\treturn nil, nil, EINVAL\n\t}\n\treturn h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil\n}\n\n// UnixRights encodes a set of open file descriptors into a socket\n// control message for sending to another process.\nfunc UnixRights(fds ...int) []byte {\n\tdatalen := len(fds) * 4\n\tb := make([]byte, CmsgSpace(datalen))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_SOCKET\n\th.Type = SCM_RIGHTS\n\th.SetLen(CmsgLen(datalen))\n\tfor i, fd := range fds {\n\t\t*(*int32)(h.data(4 * uintptr(i))) = int32(fd)\n\t}\n\treturn b\n}\n\n// ParseUnixRights decodes a socket control message that contains an\n// integer array of open file descriptors from another process.\nfunc ParseUnixRights(m *SocketControlMessage) ([]int, error) {\n\tif m.Header.Level != SOL_SOCKET {\n\t\treturn nil, EINVAL\n\t}\n\tif m.Header.Type != SCM_RIGHTS {\n\t\treturn nil, EINVAL\n\t}\n\tfds := make([]int, len(m.Data)>>2)\n\tfor i, j := 0, 0; i < len(m.Data); i += 4 {\n\t\tfds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i])))\n\t\tj++\n\t}\n\treturn fds, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_unix_other.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nimport (\n\t\"runtime\"\n)\n\n// Round the length of a raw sockaddr up to align it properly.\nfunc cmsgAlignOf(salen int) int {\n\tsalign := SizeofPtr\n\n\t// dragonfly needs to check ABI version at runtime, see cmsgAlignOf in\n\t// sockcmsg_dragonfly.go\n\tswitch runtime.GOOS {\n\tcase \"aix\":\n\t\t// There is no alignment on AIX.\n\t\tsalign = 1\n\tcase \"darwin\", \"ios\", \"illumos\", \"solaris\":\n\t\t// NOTE: It seems like 64-bit Darwin, Illumos and Solaris\n\t\t// kernels still require 32-bit aligned access to network\n\t\t// subsystem.\n\t\tif SizeofPtr == 8 {\n\t\t\tsalign = 4\n\t\t}\n\tcase \"netbsd\", \"openbsd\":\n\t\t// NetBSD and OpenBSD armv7 require 64-bit alignment.\n\t\tif runtime.GOARCH == \"arm\" {\n\t\t\tsalign = 8\n\t\t}\n\t\t// NetBSD aarch64 requires 128-bit alignment.\n\t\tif runtime.GOOS == \"netbsd\" && runtime.GOARCH == \"arm64\" {\n\t\t\tsalign = 16\n\t\t}\n\tcase \"zos\":\n\t\t// z/OS socket macros use [32-bit] sizeof(int) alignment,\n\t\t// not pointer width.\n\t\tsalign = SizeofInt\n\t}\n\n\treturn (salen + salign - 1) & ^(salign - 1)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sockcmsg_zos.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Socket control messages\n\npackage unix\n\nimport \"unsafe\"\n\n// UnixCredentials encodes credentials into a socket control message\n// for sending to another process. This can be used for\n// authentication.\nfunc UnixCredentials(ucred *Ucred) []byte {\n\tb := make([]byte, CmsgSpace(SizeofUcred))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_SOCKET\n\th.Type = SCM_CREDENTIALS\n\th.SetLen(CmsgLen(SizeofUcred))\n\t*(*Ucred)(h.data(0)) = *ucred\n\treturn b\n}\n\n// ParseUnixCredentials decodes a socket control message that contains\n// credentials in a Ucred structure. To receive such a message, the\n// SO_PASSCRED option must be enabled on the socket.\nfunc ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {\n\tif m.Header.Level != SOL_SOCKET {\n\t\treturn nil, EINVAL\n\t}\n\tif m.Header.Type != SCM_CREDENTIALS {\n\t\treturn nil, EINVAL\n\t}\n\tucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))\n\treturn &ucred, nil\n}\n\n// PktInfo4 encodes Inet4Pktinfo into a socket control message of type IP_PKTINFO.\nfunc PktInfo4(info *Inet4Pktinfo) []byte {\n\tb := make([]byte, CmsgSpace(SizeofInet4Pktinfo))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_IP\n\th.Type = IP_PKTINFO\n\th.SetLen(CmsgLen(SizeofInet4Pktinfo))\n\t*(*Inet4Pktinfo)(h.data(0)) = *info\n\treturn b\n}\n\n// PktInfo6 encodes Inet6Pktinfo into a socket control message of type IPV6_PKTINFO.\nfunc PktInfo6(info *Inet6Pktinfo) []byte {\n\tb := make([]byte, CmsgSpace(SizeofInet6Pktinfo))\n\th := (*Cmsghdr)(unsafe.Pointer(&b[0]))\n\th.Level = SOL_IPV6\n\th.Type = IPV6_PKTINFO\n\th.SetLen(CmsgLen(SizeofInet6Pktinfo))\n\t*(*Inet6Pktinfo)(h.data(0)) = *info\n\treturn b\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/symaddr_zos_s390x.s",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x && gc\n\n#include \"textflag.h\"\n\n//  provide the address of function variable to be fixed up.\n\nTEXT ·getPipe2Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Pipe2(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_FlockAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Flock(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_GetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Getxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_NanosleepAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Nanosleep(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_SetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Setxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_Wait4Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Wait4(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_MountAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Mount(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_UnmountAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Unmount(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_UtimesNanoAtAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·UtimesNanoAt(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_UtimesNanoAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·UtimesNano(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_MkfifoatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Mkfifoat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_ChtagAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Chtag(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\nTEXT ·get_ReadlinkatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Readlinkat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\t\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\n// Package unix contains an interface to the low-level operating system\n// primitives. OS details vary depending on the underlying system, and\n// by default, godoc will display OS-specific documentation for the current\n// system. If you want godoc to display OS documentation for another\n// system, set $GOOS and $GOARCH to the desired system. For example, if\n// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS\n// to freebsd and $GOARCH to arm.\n//\n// The primary use of this package is inside other packages that provide a more\n// portable interface to the system, such as \"os\", \"time\" and \"net\".  Use\n// those packages rather than this one if you can.\n//\n// For details of the functions and data types in this package consult\n// the manuals for the appropriate operating system.\n//\n// These calls return err == nil to indicate success; otherwise\n// err represents an operating system error describing the failure and\n// holds a value of type syscall.Errno.\npackage unix // import \"golang.org/x/sys/unix\"\n\nimport (\n\t\"bytes\"\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// ByteSliceFromString returns a NUL-terminated slice of bytes\n// containing the text of s. If s contains a NUL byte at any\n// location, it returns (nil, EINVAL).\nfunc ByteSliceFromString(s string) ([]byte, error) {\n\tif strings.IndexByte(s, 0) != -1 {\n\t\treturn nil, EINVAL\n\t}\n\ta := make([]byte, len(s)+1)\n\tcopy(a, s)\n\treturn a, nil\n}\n\n// BytePtrFromString returns a pointer to a NUL-terminated array of\n// bytes containing the text of s. If s contains a NUL byte at any\n// location, it returns (nil, EINVAL).\nfunc BytePtrFromString(s string) (*byte, error) {\n\ta, err := ByteSliceFromString(s)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn &a[0], nil\n}\n\n// ByteSliceToString returns a string form of the text represented by the slice s, with a terminating NUL and any\n// bytes after the NUL removed.\nfunc ByteSliceToString(s []byte) string {\n\tif i := bytes.IndexByte(s, 0); i != -1 {\n\t\ts = s[:i]\n\t}\n\treturn string(s)\n}\n\n// BytePtrToString takes a pointer to a sequence of text and returns the corresponding string.\n// If the pointer is nil, it returns the empty string. It assumes that the text sequence is terminated\n// at a zero byte; if the zero byte is not present, the program may crash.\nfunc BytePtrToString(p *byte) string {\n\tif p == nil {\n\t\treturn \"\"\n\t}\n\tif *p == 0 {\n\t\treturn \"\"\n\t}\n\n\t// Find NUL terminator.\n\tn := 0\n\tfor ptr := unsafe.Pointer(p); *(*byte)(ptr) != 0; n++ {\n\t\tptr = unsafe.Pointer(uintptr(ptr) + 1)\n\t}\n\n\treturn string(unsafe.Slice(p, n))\n}\n\n// Single-word zero for use when we need a valid pointer to 0 bytes.\nvar _zero uintptr\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_aix.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix\n\n// Aix system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and\n// wrap it in our own nicer implementation.\n\npackage unix\n\nimport \"unsafe\"\n\n/*\n * Wrapped\n */\n\nfunc Access(path string, mode uint32) (err error) {\n\treturn Faccessat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chmod(path string, mode uint32) (err error) {\n\treturn Fchmodat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, 0)\n}\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\treturn Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)\n}\n\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc Utimes(path string, tv []Timeval) error {\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n > len(sa.raw.Path) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tif n == len(sa.raw.Path) && name[0] != '@' {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = uint8(name[i])\n\t}\n\t// length is family (uint16), name, NUL.\n\tsl := _Socklen(2)\n\tif n > 0 {\n\t\tsl += _Socklen(n) + 1\n\t}\n\tif sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) {\n\t\t// Check sl > 3 so we don't change unnamed socket behavior.\n\t\tsa.raw.Path[0] = 0\n\t\t// Don't count trailing NUL for abstract address.\n\t\tsl--\n\t}\n\n\treturn unsafe.Pointer(&sa.raw), sl, nil\n}\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\n//sys\tgetcwd(buf []byte) (err error)\n\nconst ImplementsGetwd = true\n\nfunc Getwd() (ret string, err error) {\n\tfor len := uint64(4096); ; len *= 2 {\n\t\tb := make([]byte, len)\n\t\terr := getcwd(b)\n\t\tif err == nil {\n\t\t\ti := 0\n\t\t\tfor b[i] != 0 {\n\t\t\t\ti++\n\t\t\t}\n\t\t\treturn string(b[0:i]), nil\n\t\t}\n\t\tif err != ERANGE {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n}\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\terr = getcwd(buf)\n\tif err == nil {\n\t\ti := 0\n\t\tfor buf[i] != 0 {\n\t\t\ti++\n\t\t}\n\t\tn = i + 1\n\t}\n\treturn\n}\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count. Max is 16 on BSD.\n\tif n < 0 || n > 1000 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\n/*\n * Socket\n */\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif nfd == -1 {\n\t\treturn\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif emptyIovecs(iov) {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = recvmsg(fd, &msg, flags); n == -1 {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\treturn\n}\n\nfunc sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = uint32(salen)\n\tvar dummy byte\n\tvar empty bool\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tempty = emptyIovecs(iov)\n\t\tif empty {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && empty {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\n\t\t// Some versions of AIX have a bug in getsockname (see IV78655).\n\t\t// We can't rely on sa.Len being set correctly.\n\t\tn := SizeofSockaddrUnix - 3 // subtract leading Family, Len, terminating NUL.\n\t\tfor i := 0; i < n; i++ {\n\t\t\tif pp.Path[i] == 0 {\n\t\t\t\tn = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\terr = gettimeofday(tv, nil)\n\treturn\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\n}\n\n//sys\tgetdirent(fd int, buf []byte) (n int, err error)\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\treturn getdirent(fd, buf)\n}\n\n//sys\twait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tvar status _C_int\n\tvar r Pid_t\n\terr = ERESTART\n\t// AIX wait4 may return with ERESTART errno, while the process is still\n\t// active.\n\tfor err == ERESTART {\n\t\tr, err = wait4(Pid_t(pid), &status, options, rusage)\n\t}\n\twpid = int(r)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n/*\n * Wait\n */\n\ntype WaitStatus uint32\n\nfunc (w WaitStatus) Stopped() bool { return w&0x40 != 0 }\nfunc (w WaitStatus) StopSignal() Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn Signal(w>>8) & 0xFF\n}\n\nfunc (w WaitStatus) Exited() bool { return w&0xFF == 0 }\nfunc (w WaitStatus) ExitStatus() int {\n\tif !w.Exited() {\n\t\treturn -1\n\t}\n\treturn int((w >> 8) & 0xFF)\n}\n\nfunc (w WaitStatus) Signaled() bool { return w&0x40 == 0 && w&0xFF != 0 }\nfunc (w WaitStatus) Signal() Signal {\n\tif !w.Signaled() {\n\t\treturn -1\n\t}\n\treturn Signal(w>>16) & 0xFF\n}\n\nfunc (w WaitStatus) Continued() bool { return w&0x01000000 != 0 }\n\nfunc (w WaitStatus) CoreDump() bool { return w&0x80 == 0x80 }\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\tioctl(fd int, req int, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = ioctl\n\n// fcntl must never be called with cmd=F_DUP2FD because it doesn't work on AIX\n// There is no way to create a custom fcntl and to keep //sys fcntl easily,\n// Therefore, the programmer must call dup2 instead of fcntl in this case.\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\n//sys\tFcntlInt(fd uintptr, cmd int, arg int) (r int,err error) = fcntl\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\n//sys\tFcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) = fcntl\n\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n\n//sys\tfsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range\n\nfunc Fsync(fd int) error {\n\treturn fsyncRange(fd, O_SYNC, 0, 0)\n}\n\n/*\n * Direct access\n */\n\n//sys\tAcct(path string) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(oldfd int) (fd int, err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFdatasync(fd int) (err error)\n// readdir_r\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n\n//sys\tGetpgrp() (pid int)\n\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tKill(pid int, sig Signal) (err error)\n//sys\tKlogctl(typ int, buf []byte) (n int, err error) = syslog\n//sys\tMkdir(dirfd int, path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error) = open64\n//sys\tOpenat(dirfd int, path string, flags int, mode uint32) (fd int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSetdomainname(p []byte) (err error)\n//sys\tSethostname(p []byte) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tv *Timeval) (err error)\n\n//sys\tSetuid(uid int) (err error)\n//sys\tSetgid(uid int) (err error)\n\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sys\tStatx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)\n//sys\tSync()\n//sysnb\tTimes(tms *Tms) (ticks uintptr, err error)\n//sysnb\tUmask(mask int) (oldmask int)\n//sysnb\tUname(buf *Utsname) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = posix_fadvise64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tfstat(fd int, stat *Stat_t) (err error)\n//sys\tfstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = fstatat\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tlstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = pread64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = pwrite64\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tPselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tstat(path string, statptr *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n\n// In order to use msghdr structure with Control, Controllen, nrecvmsg and nsendmsg must be used.\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error) = nrecvmsg\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error) = nsendmsg\n\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tMadvise(b []byte, advice int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n\n//sysnb\tpipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n//sys\tgettimeofday(tv *Timeval, tzp *Timezone) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n\n//sys\tGetsystemcfg(label int) (n uint64)\n\n//sys\tumount(target string) (err error)\n\nfunc Unmount(target string, flags int) (err error) {\n\tif flags != 0 {\n\t\t// AIX doesn't have any flags for umount.\n\t\treturn ENOSYS\n\t}\n\treturn umount(target)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_aix_ppc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix && ppc\n\npackage unix\n\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error) = getrlimit64\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = lseek64\n\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\treturn fstat(fd, stat)\n}\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {\n\treturn fstatat(dirfd, path, stat, flags)\n}\n\nfunc Lstat(path string, stat *Stat_t) error {\n\treturn lstat(path, stat)\n}\n\nfunc Stat(path string, statptr *Stat_t) error {\n\treturn stat(path, statptr)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_aix_ppc64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix && ppc64\n\npackage unix\n\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = lseek\n\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) = mmap64\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int64(sec), Usec: int32(usec)}\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// In order to only have Timespec structure, type of Stat_t's fields\n// Atim, Mtim and Ctim is changed from StTimespec to Timespec during\n// ztypes generation.\n// On ppc64, Timespec.Nsec is an int64 while StTimespec.Nsec is an\n// int32, so the fields' value must be modified.\nfunc fixStatTimFields(stat *Stat_t) {\n\tstat.Atim.Nsec >>= 32\n\tstat.Mtim.Nsec >>= 32\n\tstat.Ctim.Nsec >>= 32\n}\n\nfunc Fstat(fd int, stat *Stat_t) error {\n\terr := fstat(fd, stat)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(stat)\n\treturn nil\n}\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) error {\n\terr := fstatat(dirfd, path, stat, flags)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(stat)\n\treturn nil\n}\n\nfunc Lstat(path string, stat *Stat_t) error {\n\terr := lstat(path, stat)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(stat)\n\treturn nil\n}\n\nfunc Stat(path string, statptr *Stat_t) error {\n\terr := stat(path, statptr)\n\tif err != nil {\n\t\treturn err\n\t}\n\tfixStatTimFields(statptr)\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_bsd.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin || dragonfly || freebsd || netbsd || openbsd\n\n// BSD system call wrappers shared by *BSD based systems\n// including OS X (Darwin) and FreeBSD.  Like the other\n// syscall_*.go files it is compiled as Go code but also\n// used as input to mksyscall which parses the //sys\n// lines and generates system call stubs.\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nconst ImplementsGetwd = true\n\nfunc Getwd() (string, error) {\n\tvar buf [PathMax]byte\n\t_, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[:n]), nil\n}\n\n/*\n * Wrapped\n */\n\n//sysnb\tgetgroups(ngid int, gid *_Gid_t) (n int, err error)\n//sysnb\tsetgroups(ngid int, gid *_Gid_t) (err error)\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count. Max is 16 on BSD.\n\tif n < 0 || n > 1000 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits.\n\ntype WaitStatus uint32\n\nconst (\n\tmask  = 0x7F\n\tcore  = 0x80\n\tshift = 8\n\n\texited  = 0\n\tkilled  = 9\n\tstopped = 0x7F\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif w&mask != exited {\n\t\treturn -1\n\t}\n\treturn int(w >> shift)\n}\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }\n\nfunc (w WaitStatus) Signal() syscall.Signal {\n\tsig := syscall.Signal(w & mask)\n\tif sig == stopped || sig == 0 {\n\t\treturn -1\n\t}\n\treturn sig\n}\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }\n\nfunc (w WaitStatus) Killed() bool { return w&mask == killed && syscall.Signal(w>>shift) != SIGKILL }\n\nfunc (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }\n\nfunc (w WaitStatus) StopSignal() syscall.Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\twait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tvar status _C_int\n\twpid, err = wait4(pid, &status, options, rusage)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\tShutdown(s int, how int) (err error)\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet4\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet6\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) || n == 0 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Index == 0 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = sa.Len\n\tsa.raw.Family = AF_LINK\n\tsa.raw.Index = sa.Index\n\tsa.raw.Type = sa.Type\n\tsa.raw.Nlen = sa.Nlen\n\tsa.raw.Alen = sa.Alen\n\tsa.raw.Slen = sa.Slen\n\tsa.raw.Data = sa.Data\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_LINK:\n\t\tpp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrDatalink)\n\t\tsa.Len = pp.Len\n\t\tsa.Family = pp.Family\n\t\tsa.Index = pp.Index\n\t\tsa.Type = pp.Type\n\t\tsa.Nlen = pp.Nlen\n\t\tsa.Alen = pp.Alen\n\t\tsa.Slen = pp.Slen\n\t\tsa.Data = pp.Data\n\t\treturn sa, nil\n\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tif pp.Len < 2 || pp.Len > SizeofSockaddrUnix {\n\t\t\treturn nil, EINVAL\n\t\t}\n\t\tsa := new(SockaddrUnix)\n\n\t\t// Some BSDs include the trailing NUL in the length, whereas\n\t\t// others do not. Work around this by subtracting the leading\n\t\t// family and len. The path is then scanned to see if a NUL\n\t\t// terminator still exists within the length.\n\t\tn := int(pp.Len) - 2 // subtract leading Family, Len\n\t\tfor i := 0; i < n; i++ {\n\t\t\tif pp.Path[i] == 0 {\n\t\t\t\t// found early NUL; assume Len included the NUL\n\t\t\t\t// or was overestimating.\n\t\t\t\tn = i\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\t}\n\treturn anyToSockaddrGOOS(fd, rsa)\n}\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif err != nil {\n\t\treturn\n\t}\n\tif (runtime.GOOS == \"darwin\" || runtime.GOOS == \"ios\") && len == 0 {\n\t\t// Accepted socket has no address.\n\t\t// This is likely due to a bug in xnu kernels,\n\t\t// where instead of ECONNABORTED error socket\n\t\t// is accepted, but has no address.\n\t\tClose(nfd)\n\t\treturn 0, nil, ECONNABORTED\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\t// TODO(jsing): DragonFly has a \"bug\" (see issue 3349), which should be\n\t// reported upstream.\n\tif runtime.GOOS == \"dragonfly\" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 {\n\t\trsa.Addr.Family = AF_UNIX\n\t\trsa.Addr.Len = SizeofSockaddrUnix\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn ByteSliceToString(buf[:vallen]), nil\n}\n\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\nfunc recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif emptyIovecs(iov) {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = recvmsg(fd, &msg, flags); err != nil {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\treturn\n}\n\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\nfunc sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = uint32(salen)\n\tvar dummy byte\n\tvar empty bool\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tempty = emptyIovecs(iov)\n\t\tif empty {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && empty {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\n//sys\tkevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error)\n\nfunc Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) {\n\tvar change, event unsafe.Pointer\n\tif len(changes) > 0 {\n\t\tchange = unsafe.Pointer(&changes[0])\n\t}\n\tif len(events) > 0 {\n\t\tevent = unsafe.Pointer(&events[0])\n\t}\n\treturn kevent(kq, change, len(changes), event, len(events), timeout)\n}\n\n// sysctlmib translates name to mib number and appends any additional args.\nfunc sysctlmib(name string, args ...int) ([]_C_int, error) {\n\t// Translate name to mib number.\n\tmib, err := nametomib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor _, a := range args {\n\t\tmib = append(mib, _C_int(a))\n\t}\n\n\treturn mib, nil\n}\n\nfunc Sysctl(name string) (string, error) {\n\treturn SysctlArgs(name)\n}\n\nfunc SysctlArgs(name string, args ...int) (string, error) {\n\tbuf, err := SysctlRaw(name, args...)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := len(buf)\n\n\t// Throw away terminating NUL.\n\tif n > 0 && buf[n-1] == '\\x00' {\n\t\tn--\n\t}\n\treturn string(buf[0:n]), nil\n}\n\nfunc SysctlUint32(name string) (uint32, error) {\n\treturn SysctlUint32Args(name)\n}\n\nfunc SysctlUint32Args(name string, args ...int) (uint32, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tn := uintptr(4)\n\tbuf := make([]byte, 4)\n\tif err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {\n\t\treturn 0, err\n\t}\n\tif n != 4 {\n\t\treturn 0, EIO\n\t}\n\treturn *(*uint32)(unsafe.Pointer(&buf[0])), nil\n}\n\nfunc SysctlUint64(name string, args ...int) (uint64, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\tn := uintptr(8)\n\tbuf := make([]byte, 8)\n\tif err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {\n\t\treturn 0, err\n\t}\n\tif n != 8 {\n\t\treturn 0, EIO\n\t}\n\treturn *(*uint64)(unsafe.Pointer(&buf[0])), nil\n}\n\nfunc SysctlRaw(name string, args ...int) ([]byte, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Find size.\n\tn := uintptr(0)\n\tif err := sysctl(mib, nil, &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Read into buffer of that size.\n\tbuf := make([]byte, n)\n\tif err := sysctl(mib, &buf[0], &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// The actual call may return less than the original reported required\n\t// size so ensure we deal with that.\n\treturn buf[:n], nil\n}\n\nfunc SysctlClockinfo(name string) (*Clockinfo, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofClockinfo)\n\tvar ci Clockinfo\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&ci)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofClockinfo {\n\t\treturn nil, EIO\n\t}\n\treturn &ci, nil\n}\n\nfunc SysctlTimeval(name string) (*Timeval, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar tv Timeval\n\tn := uintptr(unsafe.Sizeof(tv))\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&tv)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != unsafe.Sizeof(tv) {\n\t\treturn nil, EIO\n\t}\n\treturn &tv, nil\n}\n\n//sys\tutimes(path string, timeval *[2]Timeval) (err error)\n\nfunc Utimes(path string, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif ts == nil {\n\t\terr := utimensat(AT_FDCWD, path, nil, 0)\n\t\tif err != ENOSYS {\n\t\t\treturn err\n\t\t}\n\t\treturn utimes(path, nil)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\terr := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\t// Not as efficient as it could be because Timespec and\n\t// Timeval have different types in the different OSes\n\ttv := [2]Timeval{\n\t\tNsecToTimeval(TimespecToNsec(ts[0])),\n\t\tNsecToTimeval(TimespecToNsec(ts[1])),\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\n//sys\tfutimes(fd int, timeval *[2]Timeval) (err error)\n\nfunc Futimes(fd int, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn futimes(fd, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\n// TODO: wrap\n//\tAcct(name nil-string) (err error)\n//\tGethostuuid(uuid *byte, timeout *Timespec) (err error)\n//\tPtrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error)\n\n//sys\tMadvise(b []byte, behav int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Darwin system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"fmt\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//sys\tclosedir(dir uintptr) (err error)\n//sys\treaddir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno)\n\nfunc fdopendir(fd int) (dir uintptr, err error) {\n\tr0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0)\n\tdir = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fdopendir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fdopendir fdopendir \"/usr/lib/libSystem.B.dylib\"\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\t// Simulate Getdirentries using fdopendir/readdir_r/closedir.\n\t// We store the number of entries to skip in the seek\n\t// offset of fd. See issue #31368.\n\t// It's not the full required semantics, but should handle the case\n\t// of calling Getdirentries or ReadDirent repeatedly.\n\t// It won't handle assigning the results of lseek to *basep, or handle\n\t// the directory being edited underfoot.\n\tskip, err := Seek(fd, 0, 1 /* SEEK_CUR */)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// We need to duplicate the incoming file descriptor\n\t// because the caller expects to retain control of it, but\n\t// fdopendir expects to take control of its argument.\n\t// Just Dup'ing the file descriptor is not enough, as the\n\t// result shares underlying state. Use Openat to make a really\n\t// new file descriptor referring to the same directory.\n\tfd2, err := Openat(fd, \".\", O_RDONLY, 0)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\td, err := fdopendir(fd2)\n\tif err != nil {\n\t\tClose(fd2)\n\t\treturn 0, err\n\t}\n\tdefer closedir(d)\n\n\tvar cnt int64\n\tfor {\n\t\tvar entry Dirent\n\t\tvar entryp *Dirent\n\t\te := readdir_r(d, &entry, &entryp)\n\t\tif e != 0 {\n\t\t\treturn n, errnoErr(e)\n\t\t}\n\t\tif entryp == nil {\n\t\t\tbreak\n\t\t}\n\t\tif skip > 0 {\n\t\t\tskip--\n\t\t\tcnt++\n\t\t\tcontinue\n\t\t}\n\n\t\treclen := int(entry.Reclen)\n\t\tif reclen > len(buf) {\n\t\t\t// Not enough room. Return for now.\n\t\t\t// The counter will let us know where we should start up again.\n\t\t\t// Note: this strategy for suspending in the middle and\n\t\t\t// restarting is O(n^2) in the length of the directory. Oh well.\n\t\t\tbreak\n\t\t}\n\n\t\t// Copy entry into return buffer.\n\t\ts := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen)\n\t\tcopy(buf, s)\n\n\t\tbuf = buf[reclen:]\n\t\tn += reclen\n\t\tcnt++\n\t}\n\t// Set the seek offset of the input fd to record\n\t// how many files we've already returned.\n\t_, err = Seek(fd, cnt, 0 /* SEEK_SET */)\n\tif err != nil {\n\t\treturn n, err\n\t}\n\n\treturn n, nil\n}\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\traw    RawSockaddrDatalink\n}\n\n// SockaddrCtl implements the Sockaddr interface for AF_SYSTEM type sockets.\ntype SockaddrCtl struct {\n\tID   uint32\n\tUnit uint32\n\traw  RawSockaddrCtl\n}\n\nfunc (sa *SockaddrCtl) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Sc_len = SizeofSockaddrCtl\n\tsa.raw.Sc_family = AF_SYSTEM\n\tsa.raw.Ss_sysaddr = AF_SYS_CONTROL\n\tsa.raw.Sc_id = sa.ID\n\tsa.raw.Sc_unit = sa.Unit\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrCtl, nil\n}\n\n// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.\n// SockaddrVM provides access to Darwin VM sockets: a mechanism that enables\n// bidirectional communication between a hypervisor and its guest virtual\n// machines.\ntype SockaddrVM struct {\n\t// CID and Port specify a context ID and port address for a VM socket.\n\t// Guests have a unique CID, and hosts may have a well-known CID of:\n\t//  - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.\n\t//  - VMADDR_CID_LOCAL: refers to local communication (loopback).\n\t//  - VMADDR_CID_HOST: refers to other processes on the host.\n\tCID  uint32\n\tPort uint32\n\traw  RawSockaddrVM\n}\n\nfunc (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Len = SizeofSockaddrVM\n\tsa.raw.Family = AF_VSOCK\n\tsa.raw.Port = sa.Port\n\tsa.raw.Cid = sa.CID\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_SYSTEM:\n\t\tpp := (*RawSockaddrCtl)(unsafe.Pointer(rsa))\n\t\tif pp.Ss_sysaddr == AF_SYS_CONTROL {\n\t\t\tsa := new(SockaddrCtl)\n\t\t\tsa.ID = pp.Sc_id\n\t\t\tsa.Unit = pp.Sc_unit\n\t\t\treturn sa, nil\n\t\t}\n\tcase AF_VSOCK:\n\t\tpp := (*RawSockaddrVM)(unsafe.Pointer(rsa))\n\t\tsa := &SockaddrVM{\n\t\t\tCID:  pp.Cid,\n\t\t\tPort: pp.Port,\n\t\t}\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\n// Some external packages rely on SYS___SYSCTL being defined to implement their\n// own sysctl wrappers. Provide it here, even though direct syscalls are no\n// longer supported on darwin.\nconst SYS___SYSCTL = SYS_SYSCTL\n\n// Translate \"kern.hostname\" to []_C_int{0,1,2,3}.\nfunc nametomib(name string) (mib []_C_int, err error) {\n\tconst siz = unsafe.Sizeof(mib[0])\n\n\t// NOTE(rsc): It seems strange to set the buffer to have\n\t// size CTL_MAXNAME+2 but use only CTL_MAXNAME\n\t// as the size. I don't know why the +2 is here, but the\n\t// kernel uses +2 for its own implementation of this function.\n\t// I am scared that if we don't include the +2 here, the kernel\n\t// will silently write 2 words farther than we specify\n\t// and we'll get memory corruption.\n\tvar buf [CTL_MAXNAME + 2]_C_int\n\tn := uintptr(CTL_MAXNAME) * siz\n\n\tp := (*byte)(unsafe.Pointer(&buf[0]))\n\tbytes, err := ByteSliceFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Magic sysctl: \"setting\" 0.3 to a string name\n\t// lets you read back the array of integers form.\n\tif err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf[0 : n/siz], nil\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\nfunc PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) }\nfunc PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) }\nfunc PtraceDenyAttach() (err error)    { return ptrace(PT_DENY_ATTACH, 0, 0, 0) }\n\n//sysnb\tpipe(p *[2]int32) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar x [2]int32\n\terr = pipe(&x)\n\tif err == nil {\n\t\tp[0] = int(x[0])\n\t\tp[1] = int(x[1])\n\t}\n\treturn\n}\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tvar bufsize uintptr\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\treturn getfsstat(_p0, bufsize, flags)\n}\n\nfunc xattrPointer(dest []byte) *byte {\n\t// It's only when dest is set to NULL that the OS X implementations of\n\t// getxattr() and listxattr() return the current sizes of the named attributes.\n\t// An empty byte array is not sufficient. To maintain the same behaviour as the\n\t// linux implementation, we wrap around the system calls and pass in NULL when\n\t// dest is empty.\n\tvar destp *byte\n\tif len(dest) > 0 {\n\t\tdestp = &dest[0]\n\t}\n\treturn destp\n}\n\n//sys\tgetxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\treturn getxattr(path, attr, xattrPointer(dest), len(dest), 0, 0)\n}\n\nfunc Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\treturn getxattr(link, attr, xattrPointer(dest), len(dest), 0, XATTR_NOFOLLOW)\n}\n\n//sys\tfgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error)\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\treturn fgetxattr(fd, attr, xattrPointer(dest), len(dest), 0, 0)\n}\n\n//sys\tsetxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error)\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\t// The parameters for the OS X implementation vary slightly compared to the\n\t// linux system call, specifically the position parameter:\n\t//\n\t//  linux:\n\t//      int setxattr(\n\t//          const char *path,\n\t//          const char *name,\n\t//          const void *value,\n\t//          size_t size,\n\t//          int flags\n\t//      );\n\t//\n\t//  darwin:\n\t//      int setxattr(\n\t//          const char *path,\n\t//          const char *name,\n\t//          void *value,\n\t//          size_t size,\n\t//          u_int32_t position,\n\t//          int options\n\t//      );\n\t//\n\t// position specifies the offset within the extended attribute. In the\n\t// current implementation, only the resource fork extended attribute makes\n\t// use of this argument. For all others, position is reserved. We simply\n\t// default to setting it to zero.\n\treturn setxattr(path, attr, xattrPointer(data), len(data), 0, flags)\n}\n\nfunc Lsetxattr(link string, attr string, data []byte, flags int) (err error) {\n\treturn setxattr(link, attr, xattrPointer(data), len(data), 0, flags|XATTR_NOFOLLOW)\n}\n\n//sys\tfsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error)\n\nfunc Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {\n\treturn fsetxattr(fd, attr, xattrPointer(data), len(data), 0, 0)\n}\n\n//sys\tremovexattr(path string, attr string, options int) (err error)\n\nfunc Removexattr(path string, attr string) (err error) {\n\t// We wrap around and explicitly zero out the options provided to the OS X\n\t// implementation of removexattr, we do so for interoperability with the\n\t// linux variant.\n\treturn removexattr(path, attr, 0)\n}\n\nfunc Lremovexattr(link string, attr string) (err error) {\n\treturn removexattr(link, attr, XATTR_NOFOLLOW)\n}\n\n//sys\tfremovexattr(fd int, attr string, options int) (err error)\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\treturn fremovexattr(fd, attr, 0)\n}\n\n//sys\tlistxattr(path string, dest *byte, size int, options int) (sz int, err error)\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\treturn listxattr(path, xattrPointer(dest), len(dest), 0)\n}\n\nfunc Llistxattr(link string, dest []byte) (sz int, err error) {\n\treturn listxattr(link, xattrPointer(dest), len(dest), XATTR_NOFOLLOW)\n}\n\n//sys\tflistxattr(fd int, dest *byte, size int, options int) (sz int, err error)\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\treturn flistxattr(fd, xattrPointer(dest), len(dest), 0)\n}\n\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\n/*\n * Wrapped\n */\n\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n\n//sys\tkill(pid int, signum int, posix int) (err error)\n\nfunc Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) }\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\nfunc IoctlCtlInfo(fd int, ctlInfo *CtlInfo) error {\n\treturn ioctlPtr(fd, CTLIOCGINFO, unsafe.Pointer(ctlInfo))\n}\n\n// IfreqMTU is struct ifreq used to get or set a network device's MTU.\ntype IfreqMTU struct {\n\tName [IFNAMSIZ]byte\n\tMTU  int32\n}\n\n// IoctlGetIfreqMTU performs the SIOCGIFMTU ioctl operation on fd to get the MTU\n// of the network device specified by ifname.\nfunc IoctlGetIfreqMTU(fd int, ifname string) (*IfreqMTU, error) {\n\tvar ifreq IfreqMTU\n\tcopy(ifreq.Name[:], ifname)\n\terr := ioctlPtr(fd, SIOCGIFMTU, unsafe.Pointer(&ifreq))\n\treturn &ifreq, err\n}\n\n// IoctlSetIfreqMTU performs the SIOCSIFMTU ioctl operation on fd to set the MTU\n// of the network device specified by ifreq.Name.\nfunc IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error {\n\treturn ioctlPtr(fd, SIOCSIFMTU, unsafe.Pointer(ifreq))\n}\n\n//sys\trenamexNp(from string, to string, flag uint32) (err error)\n\nfunc RenamexNp(from string, to string, flag uint32) (err error) {\n\treturn renamexNp(from, to, flag)\n}\n\n//sys\trenameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error)\n\nfunc RenameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) {\n\treturn renameatxNp(fromfd, from, tofd, to, flag)\n}\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tvar length = int64(count)\n\terr = sendfile(infd, outfd, *offset, &length, nil, 0)\n\twritten = int(length)\n\treturn\n}\n\nfunc GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {\n\tvar value IPMreqn\n\tvallen := _Socklen(SizeofIPMreqn)\n\terrno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, errno\n}\n\nfunc SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\n// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct.\n// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively.\nfunc GetsockoptXucred(fd, level, opt int) (*Xucred, error) {\n\tx := new(Xucred)\n\tvallen := _Socklen(SizeofXucred)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen)\n\treturn x, err\n}\n\nfunc GetsockoptTCPConnectionInfo(fd, level, opt int) (*TCPConnectionInfo, error) {\n\tvar value TCPConnectionInfo\n\tvallen := _Socklen(SizeofTCPConnectionInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc SysctlKinfoProc(name string, args ...int) (*KinfoProc, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar kinfo KinfoProc\n\tn := uintptr(SizeofKinfoProc)\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&kinfo)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofKinfoProc {\n\t\treturn nil, EIO\n\t}\n\treturn &kinfo, nil\n}\n\nfunc SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) {\n\tmib, err := sysctlmib(name, args...)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tfor {\n\t\t// Find size.\n\t\tn := uintptr(0)\n\t\tif err := sysctl(mib, nil, &n, nil, 0); err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif n == 0 {\n\t\t\treturn nil, nil\n\t\t}\n\t\tif n%SizeofKinfoProc != 0 {\n\t\t\treturn nil, fmt.Errorf(\"sysctl() returned a size of %d, which is not a multiple of %d\", n, SizeofKinfoProc)\n\t\t}\n\n\t\t// Read into buffer of that size.\n\t\tbuf := make([]KinfoProc, n/SizeofKinfoProc)\n\t\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&buf[0])), &n, nil, 0); err != nil {\n\t\t\tif err == ENOMEM {\n\t\t\t\t// Process table grew. Try again.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn nil, err\n\t\t}\n\t\tif n%SizeofKinfoProc != 0 {\n\t\t\treturn nil, fmt.Errorf(\"sysctl() returned a size of %d, which is not a multiple of %d\", n, SizeofKinfoProc)\n\t\t}\n\n\t\t// The actual call may return less than the original reported required\n\t\t// size so ensure we deal with that.\n\t\treturn buf[:n/SizeofKinfoProc], nil\n\t}\n}\n\n//sys\tpthread_chdir_np(path string) (err error)\n\nfunc PthreadChdir(path string) (err error) {\n\treturn pthread_chdir_np(path)\n}\n\n//sys\tpthread_fchdir_np(fd int) (err error)\n\nfunc PthreadFchdir(fd int) (err error) {\n\treturn pthread_fchdir_np(fd)\n}\n\n// Connectx calls connectx(2) to initiate a connection on a socket.\n//\n// srcIf, srcAddr, and dstAddr are filled into a [SaEndpoints] struct and passed as the endpoints argument.\n//\n//   - srcIf is the optional source interface index. 0 means unspecified.\n//   - srcAddr is the optional source address. nil means unspecified.\n//   - dstAddr is the destination address.\n//\n// On success, Connectx returns the number of bytes enqueued for transmission.\nfunc Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocID, flags uint32, iov []Iovec, connid *SaeConnID) (n uintptr, err error) {\n\tendpoints := SaEndpoints{\n\t\tSrcif: srcIf,\n\t}\n\n\tif srcAddr != nil {\n\t\taddrp, addrlen, err := srcAddr.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tendpoints.Srcaddr = (*RawSockaddr)(addrp)\n\t\tendpoints.Srcaddrlen = uint32(addrlen)\n\t}\n\n\tif dstAddr != nil {\n\t\taddrp, addrlen, err := dstAddr.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tendpoints.Dstaddr = (*RawSockaddr)(addrp)\n\t\tendpoints.Dstaddrlen = uint32(addrlen)\n\t}\n\n\terr = connectx(fd, &endpoints, associd, flags, iov, &n, connid)\n\treturn\n}\n\n//sys\tconnectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error)\n//sys\tsendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)\n\n//sys\tshmat(id int, addr uintptr, flag int) (ret uintptr, err error)\n//sys\tshmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)\n//sys\tshmdt(addr uintptr) (err error)\n//sys\tshmget(key int, size int, flag int) (id int, err error)\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tClonefile(src string, dst string, flags int) (err error)\n//sys\tClonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExchangedata(path1 string, path2 string, options int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tGetcwd(buf []byte) (n int, err error)\n//sys\tGetdtablesize() (size int)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tp *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sysnb\tIssetugid() (tainted bool)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMount(fsType string, dir string, flags int, data unsafe.Pointer) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tSetattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error)\n//sys\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sys\tSetprivexec(flag int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUndelete(path string) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && darwin\n\npackage unix\n\nimport \"syscall\"\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64\n//sys\tgetfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tStatfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && darwin\n\npackage unix\n\nimport \"syscall\"\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic\n\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tgetfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build darwin\n\npackage unix\n\nimport _ \"unsafe\"\n\n// Implemented in the runtime package (runtime/sys_darwin.go)\nfunc syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) // 32-bit only\nfunc syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\n\n//go:linkname syscall_syscall syscall.syscall\n//go:linkname syscall_syscall6 syscall.syscall6\n//go:linkname syscall_syscall6X syscall.syscall6X\n//go:linkname syscall_syscall9 syscall.syscall9\n//go:linkname syscall_rawSyscall syscall.rawSyscall\n//go:linkname syscall_rawSyscall6 syscall.rawSyscall6\n//go:linkname syscall_syscallPtr syscall.syscallPtr\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_dragonfly.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// DragonFly BSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"sync\"\n\t\"unsafe\"\n)\n\n// See version list in https://github.com/DragonFlyBSD/DragonFlyBSD/blob/master/sys/sys/param.h\nvar (\n\tosreldateOnce sync.Once\n\tosreldate     uint32\n)\n\n// First __DragonFly_version after September 2019 ABI changes\n// http://lists.dragonflybsd.org/pipermail/users/2019-September/358280.html\nconst _dragonflyABIChangeVersion = 500705\n\nfunc supportsABI(ver uint32) bool {\n\tosreldateOnce.Do(func() { osreldate, _ = SysctlUint32(\"kern.osreldate\") })\n\treturn osreldate >= ver\n}\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\tRcf    uint16\n\tRoute  [16]uint16\n\traw    RawSockaddrDatalink\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\treturn nil, EAFNOSUPPORT\n}\n\n// Translate \"kern.hostname\" to []_C_int{0,1,2,3}.\nfunc nametomib(name string) (mib []_C_int, err error) {\n\tconst siz = unsafe.Sizeof(mib[0])\n\n\t// NOTE(rsc): It seems strange to set the buffer to have\n\t// size CTL_MAXNAME+2 but use only CTL_MAXNAME\n\t// as the size. I don't know why the +2 is here, but the\n\t// kernel uses +2 for its own implementation of this function.\n\t// I am scared that if we don't include the +2 here, the kernel\n\t// will silently write 2 words farther than we specify\n\t// and we'll get memory corruption.\n\tvar buf [CTL_MAXNAME + 2]_C_int\n\tn := uintptr(CTL_MAXNAME) * siz\n\n\tp := (*byte)(unsafe.Pointer(&buf[0]))\n\tbytes, err := ByteSliceFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Magic sysctl: \"setting\" 0.3 to a string name\n\t// lets you read back the array of integers form.\n\tif err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf[0 : n/siz], nil\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\tnamlen, ok := direntNamlen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn (16 + namlen + 1 + 7) &^ 7, true\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\n//sysnb\tpipe() (r int, w int, err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tr, w, err := pipe()\n\tif err == nil {\n\t\tp[0], p[1] = r, w\n\t}\n\treturn\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (r int, w int, err error)\n\nfunc Pipe2(p []int, flags int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\t// pipe2 on dragonfly takes an fds array as an argument, but still\n\t// returns the file descriptors.\n\tr, w, err := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0], p[1] = r, w\n\t}\n\treturn err\n}\n\n//sys\textpread(fd int, p []byte, flags int, offset int64) (n int, err error)\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\treturn extpread(fd, p, 0, offset)\n}\n\n//sys\textpwrite(fd int, p []byte, flags int, offset int64) (n int, err error)\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\treturn extpwrite(fd, p, 0, offset)\n}\n\nfunc Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tvar bufsize uintptr\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL\n\nfunc sysctlUname(mib []_C_int, old *byte, oldlen *uintptr) error {\n\terr := sysctl(mib, old, oldlen, nil, 0)\n\tif err != nil {\n\t\t// Utsname members on Dragonfly are only 32 bytes and\n\t\t// the syscall returns ENOMEM in case the actual value\n\t\t// is longer.\n\t\tif err == ENOMEM {\n\t\t\terr = nil\n\t\t}\n\t}\n\treturn err\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctlUname(mib, &uname.Sysname[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Sysname[unsafe.Sizeof(uname.Sysname)-1] = 0\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctlUname(mib, &uname.Nodename[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Nodename[unsafe.Sizeof(uname.Nodename)-1] = 0\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctlUname(mib, &uname.Release[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Release[unsafe.Sizeof(uname.Release)-1] = 0\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctlUname(mib, &uname.Version[0], &n); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctlUname(mib, &uname.Machine[0], &n); err != nil {\n\t\treturn err\n\t}\n\tuname.Machine[unsafe.Sizeof(uname.Machine)-1] = 0\n\n\treturn nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tGetdents(fd int, buf []byte) (n int, err error)\n//sys\tGetdirentries(fd int, buf []byte, basep *uintptr) (n int, err error)\n//sys\tGetdtablesize() (size int)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(fd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUndelete(path string) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\taccept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && dragonfly\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// FreeBSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"errors\"\n\t\"sync\"\n\t\"unsafe\"\n)\n\n// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html.\nvar (\n\tosreldateOnce sync.Once\n\tosreldate     uint32\n)\n\nfunc supportsABI(ver uint32) bool {\n\tosreldateOnce.Do(func() { osreldate, _ = SysctlUint32(\"kern.osreldate\") })\n\treturn osreldate >= ver\n}\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [46]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\treturn nil, EAFNOSUPPORT\n}\n\n// Translate \"kern.hostname\" to []_C_int{0,1,2,3}.\nfunc nametomib(name string) (mib []_C_int, err error) {\n\tconst siz = unsafe.Sizeof(mib[0])\n\n\t// NOTE(rsc): It seems strange to set the buffer to have\n\t// size CTL_MAXNAME+2 but use only CTL_MAXNAME\n\t// as the size. I don't know why the +2 is here, but the\n\t// kernel uses +2 for its own implementation of this function.\n\t// I am scared that if we don't include the +2 here, the kernel\n\t// will silently write 2 words farther than we specify\n\t// and we'll get memory corruption.\n\tvar buf [CTL_MAXNAME + 2]_C_int\n\tn := uintptr(CTL_MAXNAME) * siz\n\n\tp := (*byte)(unsafe.Pointer(&buf[0]))\n\tbytes, err := ByteSliceFromString(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Magic sysctl: \"setting\" 0.3 to a string name\n\t// lets you read back the array of integers form.\n\tif err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil {\n\t\treturn nil, err\n\t}\n\treturn buf[0 : n/siz], nil\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\nfunc Pipe(p []int) (err error) {\n\treturn Pipe2(p, 0)\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\nfunc GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {\n\tvar value IPMreqn\n\tvallen := _Socklen(SizeofIPMreqn)\n\terrno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, errno\n}\n\nfunc SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\n// GetsockoptXucred is a getsockopt wrapper that returns an Xucred struct.\n// The usual level and opt are SOL_LOCAL and LOCAL_PEERCRED, respectively.\nfunc GetsockoptXucred(fd, level, opt int) (*Xucred, error) {\n\tx := new(Xucred)\n\tvallen := _Socklen(SizeofXucred)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(x), &vallen)\n\treturn x, err\n}\n\nfunc Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar (\n\t\t_p0     unsafe.Pointer\n\t\tbufsize uintptr\n\t)\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\tr0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\t// Suppress ENOMEM errors to be compatible with the C library __xuname() implementation.\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil && !errors.Is(err, ENOMEM) {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Stat(path string, st *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, st, 0)\n}\n\nfunc Lstat(path string, st *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, st, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\treturn Getdirentries(fd, buf, nil)\n}\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tif basep == nil || unsafe.Sizeof(*basep) == 8 {\n\t\treturn getdirentries(fd, buf, (*uint64)(unsafe.Pointer(basep)))\n\t}\n\t// The syscall needs a 64-bit base. On 32-bit machines\n\t// we can't just use the basep passed in. See #32498.\n\tvar base uint64 = uint64(*basep)\n\tn, err = getdirentries(fd, buf, &base)\n\t*basep = uintptr(base)\n\tif base>>32 != 0 {\n\t\t// We can't stuff the base back into a uintptr, so any\n\t\t// future calls would be suspect. Generate an error.\n\t\t// EIO is allowed by getdirentries.\n\t\terr = EIO\n\t}\n\treturn\n}\n\nfunc Mknod(path string, mode uint32, dev uint64) (err error) {\n\treturn Mknodat(AT_FDCWD, path, mode, dev)\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n//sys\tptrace(request int, pid int, addr uintptr, data int) (err error)\n//sys\tptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) = SYS_PTRACE\n\nfunc PtraceAttach(pid int) (err error) {\n\treturn ptrace(PT_ATTACH, pid, 0, 0)\n}\n\nfunc PtraceCont(pid int, signal int) (err error) {\n\treturn ptrace(PT_CONTINUE, pid, 1, signal)\n}\n\nfunc PtraceDetach(pid int) (err error) {\n\treturn ptrace(PT_DETACH, pid, 1, 0)\n}\n\nfunc PtraceGetFpRegs(pid int, fpregsout *FpReg) (err error) {\n\treturn ptracePtr(PT_GETFPREGS, pid, unsafe.Pointer(fpregsout), 0)\n}\n\nfunc PtraceGetRegs(pid int, regsout *Reg) (err error) {\n\treturn ptracePtr(PT_GETREGS, pid, unsafe.Pointer(regsout), 0)\n}\n\nfunc PtraceIO(req int, pid int, offs uintptr, out []byte, countin int) (count int, err error) {\n\tioDesc := PtraceIoDesc{\n\t\tOp:   int32(req),\n\t\tOffs: offs,\n\t}\n\tif countin > 0 {\n\t\t_ = out[:countin] // check bounds\n\t\tioDesc.Addr = &out[0]\n\t} else if out != nil {\n\t\tioDesc.Addr = (*byte)(unsafe.Pointer(&_zero))\n\t}\n\tioDesc.SetLen(countin)\n\n\terr = ptracePtr(PT_IO, pid, unsafe.Pointer(&ioDesc), 0)\n\treturn int(ioDesc.Len), err\n}\n\nfunc PtraceLwpEvents(pid int, enable int) (err error) {\n\treturn ptrace(PT_LWP_EVENTS, pid, 0, enable)\n}\n\nfunc PtraceLwpInfo(pid int, info *PtraceLwpInfoStruct) (err error) {\n\treturn ptracePtr(PT_LWPINFO, pid, unsafe.Pointer(info), int(unsafe.Sizeof(*info)))\n}\n\nfunc PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn PtraceIO(PIOD_READ_D, pid, addr, out, SizeofLong)\n}\n\nfunc PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn PtraceIO(PIOD_READ_I, pid, addr, out, SizeofLong)\n}\n\nfunc PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn PtraceIO(PIOD_WRITE_D, pid, addr, data, SizeofLong)\n}\n\nfunc PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn PtraceIO(PIOD_WRITE_I, pid, addr, data, SizeofLong)\n}\n\nfunc PtraceSetRegs(pid int, regs *Reg) (err error) {\n\treturn ptracePtr(PT_SETREGS, pid, unsafe.Pointer(regs), 0)\n}\n\nfunc PtraceSingleStep(pid int) (err error) {\n\treturn ptrace(PT_STEP, pid, 1, 0)\n}\n\nfunc Dup3(oldfd, newfd, flags int) error {\n\tif oldfd == newfd || flags&^O_CLOEXEC != 0 {\n\t\treturn EINVAL\n\t}\n\thow := F_DUP2FD\n\tif flags&O_CLOEXEC != 0 {\n\t\thow = F_DUP2FD_CLOEXEC\n\t}\n\t_, err := fcntl(oldfd, how, newfd)\n\treturn err\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tCapEnter() (err error)\n//sys\tcapRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET\n//sys\tcapRightsLimit(fd int, rightsp *CapRights) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tExit(code int)\n//sys\tExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tgetdirentries(fd int, buf []byte, basep *uint64) (n int, err error)\n//sys\tGetdtablesize() (size int)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMknodat(fd int, path string, mode uint32, dev uint64) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(fdat int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUndelete(path string) (err error)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\taccept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc PtraceGetFsBase(pid int, fsbase *int64) (err error) {\n\treturn ptracePtr(PT_GETFSBASE, pid, unsafe.Pointer(fsbase), 0)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint64(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc PtraceGetFsBase(pid int, fsbase *int64) (err error) {\n\treturn ptracePtr(PT_GETFSBASE, pid, unsafe.Pointer(fsbase), 0)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go",
    "content": "// Copyright 2012 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint32(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_arm64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint64(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_freebsd_riscv64.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build riscv64 && freebsd\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (d *PtraceIoDesc) SetLen(length int) {\n\td.Len = uint64(length)\n}\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tvar writtenOut uint64 = 0\n\t_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)\n\n\twritten = int(writtenOut)\n\n\tif e1 != 0 {\n\t\terr = e1\n\t}\n\treturn\n}\n\nfunc Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_hurd.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build hurd\n\npackage unix\n\n/*\n#include <stdint.h>\nint ioctl(int, unsigned long int, uintptr_t);\n*/\nimport \"C\"\nimport \"unsafe\"\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\tr0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(arg))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\tr0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(uintptr(arg)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_hurd_386.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && hurd\n\npackage unix\n\nconst (\n\tTIOCGETA = 0x62251713\n)\n\ntype Winsize struct {\n\tRow    uint16\n\tCol    uint16\n\tXpixel uint16\n\tYpixel uint16\n}\n\ntype Termios struct {\n\tIflag  uint32\n\tOflag  uint32\n\tCflag  uint32\n\tLflag  uint32\n\tCc     [20]uint8\n\tIspeed int32\n\tOspeed int32\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_illumos.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// illumos system calls not present on Solaris.\n\n//go:build amd64 && illumos\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nfunc bytes2iovec(bs [][]byte) []Iovec {\n\tiovecs := make([]Iovec, len(bs))\n\tfor i, b := range bs {\n\t\tiovecs[i].SetLen(len(b))\n\t\tif len(b) > 0 {\n\t\t\tiovecs[i].Base = &b[0]\n\t\t} else {\n\t\t\tiovecs[i].Base = (*byte)(unsafe.Pointer(&_zero))\n\t\t}\n\t}\n\treturn iovecs\n}\n\n//sys\treadv(fd int, iovs []Iovec) (n int, err error)\n\nfunc Readv(fd int, iovs [][]byte) (n int, err error) {\n\tiovecs := bytes2iovec(iovs)\n\tn, err = readv(fd, iovecs)\n\treturn n, err\n}\n\n//sys\tpreadv(fd int, iovs []Iovec, off int64) (n int, err error)\n\nfunc Preadv(fd int, iovs [][]byte, off int64) (n int, err error) {\n\tiovecs := bytes2iovec(iovs)\n\tn, err = preadv(fd, iovecs, off)\n\treturn n, err\n}\n\n//sys\twritev(fd int, iovs []Iovec) (n int, err error)\n\nfunc Writev(fd int, iovs [][]byte) (n int, err error) {\n\tiovecs := bytes2iovec(iovs)\n\tn, err = writev(fd, iovecs)\n\treturn n, err\n}\n\n//sys\tpwritev(fd int, iovs []Iovec, off int64) (n int, err error)\n\nfunc Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) {\n\tiovecs := bytes2iovec(iovs)\n\tn, err = pwritev(fd, iovecs, off)\n\treturn n, err\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = libsocket.accept4\n\nfunc Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Linux system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and\n// wrap it in our own nicer implementation.\n\npackage unix\n\nimport (\n\t\"encoding/binary\"\n\t\"strconv\"\n\t\"syscall\"\n\t\"time\"\n\t\"unsafe\"\n)\n\n/*\n * Wrapped\n */\n\nfunc Access(path string, mode uint32) (err error) {\n\treturn Faccessat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chmod(path string, mode uint32) (err error) {\n\treturn Fchmodat(AT_FDCWD, path, mode, 0)\n}\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, 0)\n}\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\treturn Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)\n}\n\nfunc EpollCreate(size int) (fd int, err error) {\n\tif size <= 0 {\n\t\treturn -1, EINVAL\n\t}\n\treturn EpollCreate1(0)\n}\n\n//sys\tFanotifyInit(flags uint, event_f_flags uint) (fd int, err error)\n//sys\tfanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error)\n\nfunc FanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname string) (err error) {\n\tif pathname == \"\" {\n\t\treturn fanotifyMark(fd, flags, mask, dirFd, nil)\n\t}\n\tp, err := BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn fanotifyMark(fd, flags, mask, dirFd, p)\n}\n\n//sys\tfchmodat(dirfd int, path string, mode uint32) (err error)\n//sys\tfchmodat2(dirfd int, path string, mode uint32, flags int) (err error)\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) error {\n\t// Linux fchmodat doesn't support the flags parameter, but fchmodat2 does.\n\t// Try fchmodat2 if flags are specified.\n\tif flags != 0 {\n\t\terr := fchmodat2(dirfd, path, mode, flags)\n\t\tif err == ENOSYS {\n\t\t\t// fchmodat2 isn't available. If the flags are known to be valid,\n\t\t\t// return EOPNOTSUPP to indicate that fchmodat doesn't support them.\n\t\t\tif flags&^(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 {\n\t\t\t\treturn EINVAL\n\t\t\t} else if flags&(AT_SYMLINK_NOFOLLOW|AT_EMPTY_PATH) != 0 {\n\t\t\t\treturn EOPNOTSUPP\n\t\t\t}\n\t\t}\n\t\treturn err\n\t}\n\treturn fchmodat(dirfd, path, mode)\n}\n\nfunc InotifyInit() (fd int, err error) {\n\treturn InotifyInit1(0)\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error) = SYS_IOCTL\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n// ioctl itself should not be exposed directly, but additional get/set functions\n// for specific types are permissible. These are defined in ioctl.go and\n// ioctl_linux.go.\n//\n// The third argument to ioctl is often a pointer but sometimes an integer.\n// Callers should use ioctlPtr when the third argument is a pointer and ioctl\n// when the third argument is an integer.\n//\n// TODO: some existing code incorrectly uses ioctl when it should use ioctlPtr.\n\n//sys\tLinkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)\n\nfunc Link(oldpath string, newpath string) (err error) {\n\treturn Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0)\n}\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\treturn Mkdirat(AT_FDCWD, path, mode)\n}\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\treturn Mknodat(AT_FDCWD, path, mode, dev)\n}\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\treturn openat(AT_FDCWD, path, mode|O_LARGEFILE, perm)\n}\n\n//sys\topenat(dirfd int, path string, flags int, mode uint32) (fd int, err error)\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\treturn openat(dirfd, path, flags|O_LARGEFILE, mode)\n}\n\n//sys\topenat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error)\n\nfunc Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) {\n\treturn openat2(dirfd, path, how, SizeofOpenHow)\n}\n\nfunc Pipe(p []int) error {\n\treturn Pipe2(p, 0)\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\n//sys\tppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)\n\nfunc Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn ppoll(nil, 0, timeout, sigmask)\n\t}\n\treturn ppoll(&fds[0], len(fds), timeout, sigmask)\n}\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout >= 0 {\n\t\tts = new(Timespec)\n\t\t*ts = NsecToTimespec(int64(timeout) * 1e6)\n\t}\n\treturn Ppoll(fds, ts, nil)\n}\n\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\treturn Readlinkat(AT_FDCWD, path, buf)\n}\n\nfunc Rename(oldpath string, newpath string) (err error) {\n\treturn Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath)\n}\n\nfunc Rmdir(path string) error {\n\treturn Unlinkat(AT_FDCWD, path, AT_REMOVEDIR)\n}\n\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n\nfunc Symlink(oldpath string, newpath string) (err error) {\n\treturn Symlinkat(oldpath, AT_FDCWD, newpath)\n}\n\nfunc Unlink(path string) error {\n\treturn Unlinkat(AT_FDCWD, path, 0)\n}\n\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n\nfunc Utimes(path string, tv []Timeval) error {\n\tif tv == nil {\n\t\terr := utimensat(AT_FDCWD, path, nil, 0)\n\t\tif err != ENOSYS {\n\t\t\treturn err\n\t\t}\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar ts [2]Timespec\n\tts[0] = NsecToTimespec(TimevalToNsec(tv[0]))\n\tts[1] = NsecToTimespec(TimevalToNsec(tv[1]))\n\terr := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\treturn UtimesNanoAt(AT_FDCWD, path, ts, 0)\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\nfunc Futimesat(dirfd int, path string, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn futimesat(dirfd, path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimesat(dirfd, path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc Futimes(fd int, tv []Timeval) (err error) {\n\t// Believe it or not, this is the best we can do on Linux\n\t// (and is what glibc does).\n\treturn Utimes(\"/proc/self/fd/\"+strconv.Itoa(fd), tv)\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error)\n\nfunc Getwd() (wd string, err error) {\n\tvar buf [PathMax]byte\n\tn, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\t// Getcwd returns the number of bytes written to buf, including the NUL.\n\tif n < 1 || n > len(buf) || buf[n-1] != 0 {\n\t\treturn \"\", EINVAL\n\t}\n\t// In some cases, Linux can return a path that starts with the\n\t// \"(unreachable)\" prefix, which can potentially be a valid relative\n\t// path. To work around that, return ENOENT if path is not absolute.\n\tif buf[0] != '/' {\n\t\treturn \"\", ENOENT\n\t}\n\n\treturn string(buf[0 : n-1]), nil\n}\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count. Max is 1<<16 on Linux.\n\tif n < 0 || n > 1<<20 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\ntype WaitStatus uint32\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits. At least that's the idea.\n// There are various irregularities. For example, the\n// \"continued\" status is 0xFFFF, distinguishing itself\n// from stopped via the core dump bit.\n\nconst (\n\tmask    = 0x7F\n\tcore    = 0x80\n\texited  = 0x00\n\tstopped = 0x7F\n\tshift   = 8\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited }\n\nfunc (w WaitStatus) Stopped() bool { return w&0xFF == stopped }\n\nfunc (w WaitStatus) Continued() bool { return w == 0xFFFF }\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif !w.Exited() {\n\t\treturn -1\n\t}\n\treturn int(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) Signal() syscall.Signal {\n\tif !w.Signaled() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w & mask)\n}\n\nfunc (w WaitStatus) StopSignal() syscall.Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int {\n\tif w.StopSignal() != SIGTRAP {\n\t\treturn -1\n\t}\n\treturn int(w>>shift) >> 8\n}\n\n//sys\twait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tvar status _C_int\n\twpid, err = wait4(pid, &status, options, rusage)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n//sys\tWaitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error)\n\nfunc Mkfifo(path string, mode uint32) error {\n\treturn Mknod(path, mode|S_IFIFO, 0)\n}\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) error {\n\treturn Mknodat(dirfd, path, mode|S_IFIFO, 0)\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\t// length is family (uint16), name, NUL.\n\tsl := _Socklen(2)\n\tif n > 0 {\n\t\tsl += _Socklen(n) + 1\n\t}\n\tif sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) {\n\t\t// Check sl > 3 so we don't change unnamed socket behavior.\n\t\tsa.raw.Path[0] = 0\n\t\t// Don't count trailing NUL for abstract address.\n\t\tsl--\n\t}\n\n\treturn unsafe.Pointer(&sa.raw), sl, nil\n}\n\n// SockaddrLinklayer implements the Sockaddr interface for AF_PACKET type sockets.\ntype SockaddrLinklayer struct {\n\tProtocol uint16\n\tIfindex  int\n\tHatype   uint16\n\tPkttype  uint8\n\tHalen    uint8\n\tAddr     [8]byte\n\traw      RawSockaddrLinklayer\n}\n\nfunc (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_PACKET\n\tsa.raw.Protocol = sa.Protocol\n\tsa.raw.Ifindex = int32(sa.Ifindex)\n\tsa.raw.Hatype = sa.Hatype\n\tsa.raw.Pkttype = sa.Pkttype\n\tsa.raw.Halen = sa.Halen\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil\n}\n\n// SockaddrNetlink implements the Sockaddr interface for AF_NETLINK type sockets.\ntype SockaddrNetlink struct {\n\tFamily uint16\n\tPad    uint16\n\tPid    uint32\n\tGroups uint32\n\traw    RawSockaddrNetlink\n}\n\nfunc (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_NETLINK\n\tsa.raw.Pad = sa.Pad\n\tsa.raw.Pid = sa.Pid\n\tsa.raw.Groups = sa.Groups\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil\n}\n\n// SockaddrHCI implements the Sockaddr interface for AF_BLUETOOTH type sockets\n// using the HCI protocol.\ntype SockaddrHCI struct {\n\tDev     uint16\n\tChannel uint16\n\traw     RawSockaddrHCI\n}\n\nfunc (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_BLUETOOTH\n\tsa.raw.Dev = sa.Dev\n\tsa.raw.Channel = sa.Channel\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil\n}\n\n// SockaddrL2 implements the Sockaddr interface for AF_BLUETOOTH type sockets\n// using the L2CAP protocol.\ntype SockaddrL2 struct {\n\tPSM      uint16\n\tCID      uint16\n\tAddr     [6]uint8\n\tAddrType uint8\n\traw      RawSockaddrL2\n}\n\nfunc (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_BLUETOOTH\n\tpsm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm))\n\tpsm[0] = byte(sa.PSM)\n\tpsm[1] = byte(sa.PSM >> 8)\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i]\n\t}\n\tcid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid))\n\tcid[0] = byte(sa.CID)\n\tcid[1] = byte(sa.CID >> 8)\n\tsa.raw.Bdaddr_type = sa.AddrType\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrL2, nil\n}\n\n// SockaddrRFCOMM implements the Sockaddr interface for AF_BLUETOOTH type sockets\n// using the RFCOMM protocol.\n//\n// Server example:\n//\n//\tfd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)\n//\t_ = unix.Bind(fd, &unix.SockaddrRFCOMM{\n//\t\tChannel: 1,\n//\t\tAddr:    [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00\n//\t})\n//\t_ = Listen(fd, 1)\n//\tnfd, sa, _ := Accept(fd)\n//\tfmt.Printf(\"conn addr=%v fd=%d\", sa.(*unix.SockaddrRFCOMM).Addr, nfd)\n//\tRead(nfd, buf)\n//\n// Client example:\n//\n//\tfd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM)\n//\t_ = Connect(fd, &SockaddrRFCOMM{\n//\t\tChannel: 1,\n//\t\tAddr:    [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11\n//\t})\n//\tWrite(fd, []byte(`hello`))\ntype SockaddrRFCOMM struct {\n\t// Addr represents a bluetooth address, byte ordering is little-endian.\n\tAddr [6]uint8\n\n\t// Channel is a designated bluetooth channel, only 1-30 are available for use.\n\t// Since Linux 2.6.7 and further zero value is the first available channel.\n\tChannel uint8\n\n\traw RawSockaddrRFCOMM\n}\n\nfunc (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_BLUETOOTH\n\tsa.raw.Channel = sa.Channel\n\tsa.raw.Bdaddr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrRFCOMM, nil\n}\n\n// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets.\n// The RxID and TxID fields are used for transport protocol addressing in\n// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with\n// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning.\n//\n// The SockaddrCAN struct must be bound to the socket file descriptor\n// using Bind before the CAN socket can be used.\n//\n//\t// Read one raw CAN frame\n//\tfd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW)\n//\taddr := &SockaddrCAN{Ifindex: index}\n//\tBind(fd, addr)\n//\tframe := make([]byte, 16)\n//\tRead(fd, frame)\n//\n// The full SocketCAN documentation can be found in the linux kernel\n// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt\ntype SockaddrCAN struct {\n\tIfindex int\n\tRxID    uint32\n\tTxID    uint32\n\traw     RawSockaddrCAN\n}\n\nfunc (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_CAN\n\tsa.raw.Ifindex = int32(sa.Ifindex)\n\trx := (*[4]byte)(unsafe.Pointer(&sa.RxID))\n\tfor i := 0; i < 4; i++ {\n\t\tsa.raw.Addr[i] = rx[i]\n\t}\n\ttx := (*[4]byte)(unsafe.Pointer(&sa.TxID))\n\tfor i := 0; i < 4; i++ {\n\t\tsa.raw.Addr[i+4] = tx[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil\n}\n\n// SockaddrCANJ1939 implements the Sockaddr interface for AF_CAN using J1939\n// protocol (https://en.wikipedia.org/wiki/SAE_J1939). For more information\n// on the purposes of the fields, check the official linux kernel documentation\n// available here: https://www.kernel.org/doc/Documentation/networking/j1939.rst\ntype SockaddrCANJ1939 struct {\n\tIfindex int\n\tName    uint64\n\tPGN     uint32\n\tAddr    uint8\n\traw     RawSockaddrCAN\n}\n\nfunc (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_CAN\n\tsa.raw.Ifindex = int32(sa.Ifindex)\n\tn := (*[8]byte)(unsafe.Pointer(&sa.Name))\n\tfor i := 0; i < 8; i++ {\n\t\tsa.raw.Addr[i] = n[i]\n\t}\n\tp := (*[4]byte)(unsafe.Pointer(&sa.PGN))\n\tfor i := 0; i < 4; i++ {\n\t\tsa.raw.Addr[i+8] = p[i]\n\t}\n\tsa.raw.Addr[12] = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil\n}\n\n// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets.\n// SockaddrALG enables userspace access to the Linux kernel's cryptography\n// subsystem. The Type and Name fields specify which type of hash or cipher\n// should be used with a given socket.\n//\n// To create a file descriptor that provides access to a hash or cipher, both\n// Bind and Accept must be used. Once the setup process is complete, input\n// data can be written to the socket, processed by the kernel, and then read\n// back as hash output or ciphertext.\n//\n// Here is an example of using an AF_ALG socket with SHA1 hashing.\n// The initial socket setup process is as follows:\n//\n//\t// Open a socket to perform SHA1 hashing.\n//\tfd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0)\n//\taddr := &unix.SockaddrALG{Type: \"hash\", Name: \"sha1\"}\n//\tunix.Bind(fd, addr)\n//\t// Note: unix.Accept does not work at this time; must invoke accept()\n//\t// manually using unix.Syscall.\n//\thashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0)\n//\n// Once a file descriptor has been returned from Accept, it may be used to\n// perform SHA1 hashing. The descriptor is not safe for concurrent use, but\n// may be re-used repeatedly with subsequent Write and Read operations.\n//\n// When hashing a small byte slice or string, a single Write and Read may\n// be used:\n//\n//\t// Assume hashfd is already configured using the setup process.\n//\thash := os.NewFile(hashfd, \"sha1\")\n//\t// Hash an input string and read the results. Each Write discards\n//\t// previous hash state. Read always reads the current state.\n//\tb := make([]byte, 20)\n//\tfor i := 0; i < 2; i++ {\n//\t    io.WriteString(hash, \"Hello, world.\")\n//\t    hash.Read(b)\n//\t    fmt.Println(hex.EncodeToString(b))\n//\t}\n//\t// Output:\n//\t// 2ae01472317d1935a84797ec1983ae243fc6aa28\n//\t// 2ae01472317d1935a84797ec1983ae243fc6aa28\n//\n// For hashing larger byte slices, or byte streams such as those read from\n// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update\n// the hash digest instead of creating a new one for a given chunk and finalizing it.\n//\n//\t// Assume hashfd and addr are already configured using the setup process.\n//\thash := os.NewFile(hashfd, \"sha1\")\n//\t// Hash the contents of a file.\n//\tf, _ := os.Open(\"/tmp/linux-4.10-rc7.tar.xz\")\n//\tb := make([]byte, 4096)\n//\tfor {\n//\t    n, err := f.Read(b)\n//\t    if err == io.EOF {\n//\t        break\n//\t    }\n//\t    unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr)\n//\t}\n//\thash.Read(b)\n//\tfmt.Println(hex.EncodeToString(b))\n//\t// Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5\n//\n// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html.\ntype SockaddrALG struct {\n\tType    string\n\tName    string\n\tFeature uint32\n\tMask    uint32\n\traw     RawSockaddrALG\n}\n\nfunc (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\t// Leave room for NUL byte terminator.\n\tif len(sa.Type) > len(sa.raw.Type)-1 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tif len(sa.Name) > len(sa.raw.Name)-1 {\n\t\treturn nil, 0, EINVAL\n\t}\n\n\tsa.raw.Family = AF_ALG\n\tsa.raw.Feat = sa.Feature\n\tsa.raw.Mask = sa.Mask\n\n\tcopy(sa.raw.Type[:], sa.Type)\n\tcopy(sa.raw.Name[:], sa.Name)\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil\n}\n\n// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets.\n// SockaddrVM provides access to Linux VM sockets: a mechanism that enables\n// bidirectional communication between a hypervisor and its guest virtual\n// machines.\ntype SockaddrVM struct {\n\t// CID and Port specify a context ID and port address for a VM socket.\n\t// Guests have a unique CID, and hosts may have a well-known CID of:\n\t//  - VMADDR_CID_HYPERVISOR: refers to the hypervisor process.\n\t//  - VMADDR_CID_LOCAL: refers to local communication (loopback).\n\t//  - VMADDR_CID_HOST: refers to other processes on the host.\n\tCID   uint32\n\tPort  uint32\n\tFlags uint8\n\traw   RawSockaddrVM\n}\n\nfunc (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_VSOCK\n\tsa.raw.Port = sa.Port\n\tsa.raw.Cid = sa.CID\n\tsa.raw.Flags = sa.Flags\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil\n}\n\ntype SockaddrXDP struct {\n\tFlags        uint16\n\tIfindex      uint32\n\tQueueID      uint32\n\tSharedUmemFD uint32\n\traw          RawSockaddrXDP\n}\n\nfunc (sa *SockaddrXDP) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_XDP\n\tsa.raw.Flags = sa.Flags\n\tsa.raw.Ifindex = sa.Ifindex\n\tsa.raw.Queue_id = sa.QueueID\n\tsa.raw.Shared_umem_fd = sa.SharedUmemFD\n\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrXDP, nil\n}\n\n// This constant mirrors the #define of PX_PROTO_OE in\n// linux/if_pppox.h. We're defining this by hand here instead of\n// autogenerating through mkerrors.sh because including\n// linux/if_pppox.h causes some declaration conflicts with other\n// includes (linux/if_pppox.h includes linux/in.h, which conflicts\n// with netinet/in.h). Given that we only need a single zero constant\n// out of that file, it's cleaner to just define it by hand here.\nconst px_proto_oe = 0\n\ntype SockaddrPPPoE struct {\n\tSID    uint16\n\tRemote []byte\n\tDev    string\n\traw    RawSockaddrPPPoX\n}\n\nfunc (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif len(sa.Remote) != 6 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tif len(sa.Dev) > IFNAMSIZ-1 {\n\t\treturn nil, 0, EINVAL\n\t}\n\n\t*(*uint16)(unsafe.Pointer(&sa.raw[0])) = AF_PPPOX\n\t// This next field is in host-endian byte order. We can't use the\n\t// same unsafe pointer cast as above, because this value is not\n\t// 32-bit aligned and some architectures don't allow unaligned\n\t// access.\n\t//\n\t// However, the value of px_proto_oe is 0, so we can use\n\t// encoding/binary helpers to write the bytes without worrying\n\t// about the ordering.\n\tbinary.BigEndian.PutUint32(sa.raw[2:6], px_proto_oe)\n\t// This field is deliberately big-endian, unlike the previous\n\t// one. The kernel expects SID to be in network byte order.\n\tbinary.BigEndian.PutUint16(sa.raw[6:8], sa.SID)\n\tcopy(sa.raw[8:14], sa.Remote)\n\tfor i := 14; i < 14+IFNAMSIZ; i++ {\n\t\tsa.raw[i] = 0\n\t}\n\tcopy(sa.raw[14:], sa.Dev)\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil\n}\n\n// SockaddrTIPC implements the Sockaddr interface for AF_TIPC type sockets.\n// For more information on TIPC, see: http://tipc.sourceforge.net/.\ntype SockaddrTIPC struct {\n\t// Scope is the publication scopes when binding service/service range.\n\t// Should be set to TIPC_CLUSTER_SCOPE or TIPC_NODE_SCOPE.\n\tScope int\n\n\t// Addr is the type of address used to manipulate a socket. Addr must be\n\t// one of:\n\t//  - *TIPCSocketAddr: \"id\" variant in the C addr union\n\t//  - *TIPCServiceRange: \"nameseq\" variant in the C addr union\n\t//  - *TIPCServiceName: \"name\" variant in the C addr union\n\t//\n\t// If nil, EINVAL will be returned when the structure is used.\n\tAddr TIPCAddr\n\n\traw RawSockaddrTIPC\n}\n\n// TIPCAddr is implemented by types that can be used as an address for\n// SockaddrTIPC. It is only implemented by *TIPCSocketAddr, *TIPCServiceRange,\n// and *TIPCServiceName.\ntype TIPCAddr interface {\n\ttipcAddrtype() uint8\n\ttipcAddr() [12]byte\n}\n\nfunc (sa *TIPCSocketAddr) tipcAddr() [12]byte {\n\tvar out [12]byte\n\tcopy(out[:], (*(*[unsafe.Sizeof(TIPCSocketAddr{})]byte)(unsafe.Pointer(sa)))[:])\n\treturn out\n}\n\nfunc (sa *TIPCSocketAddr) tipcAddrtype() uint8 { return TIPC_SOCKET_ADDR }\n\nfunc (sa *TIPCServiceRange) tipcAddr() [12]byte {\n\tvar out [12]byte\n\tcopy(out[:], (*(*[unsafe.Sizeof(TIPCServiceRange{})]byte)(unsafe.Pointer(sa)))[:])\n\treturn out\n}\n\nfunc (sa *TIPCServiceRange) tipcAddrtype() uint8 { return TIPC_SERVICE_RANGE }\n\nfunc (sa *TIPCServiceName) tipcAddr() [12]byte {\n\tvar out [12]byte\n\tcopy(out[:], (*(*[unsafe.Sizeof(TIPCServiceName{})]byte)(unsafe.Pointer(sa)))[:])\n\treturn out\n}\n\nfunc (sa *TIPCServiceName) tipcAddrtype() uint8 { return TIPC_SERVICE_ADDR }\n\nfunc (sa *SockaddrTIPC) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Addr == nil {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_TIPC\n\tsa.raw.Scope = int8(sa.Scope)\n\tsa.raw.Addrtype = sa.Addr.tipcAddrtype()\n\tsa.raw.Addr = sa.Addr.tipcAddr()\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrTIPC, nil\n}\n\n// SockaddrL2TPIP implements the Sockaddr interface for IPPROTO_L2TP/AF_INET sockets.\ntype SockaddrL2TPIP struct {\n\tAddr   [4]byte\n\tConnId uint32\n\traw    RawSockaddrL2TPIP\n}\n\nfunc (sa *SockaddrL2TPIP) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_INET\n\tsa.raw.Conn_id = sa.ConnId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP, nil\n}\n\n// SockaddrL2TPIP6 implements the Sockaddr interface for IPPROTO_L2TP/AF_INET6 sockets.\ntype SockaddrL2TPIP6 struct {\n\tAddr   [16]byte\n\tZoneId uint32\n\tConnId uint32\n\traw    RawSockaddrL2TPIP6\n}\n\nfunc (sa *SockaddrL2TPIP6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_INET6\n\tsa.raw.Conn_id = sa.ConnId\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrL2TPIP6, nil\n}\n\n// SockaddrIUCV implements the Sockaddr interface for AF_IUCV sockets.\ntype SockaddrIUCV struct {\n\tUserID string\n\tName   string\n\traw    RawSockaddrIUCV\n}\n\nfunc (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Family = AF_IUCV\n\t// These are EBCDIC encoded by the kernel, but we still need to pad them\n\t// with blanks. Initializing with blanks allows the caller to feed in either\n\t// a padded or an unpadded string.\n\tfor i := 0; i < 8; i++ {\n\t\tsa.raw.Nodeid[i] = ' '\n\t\tsa.raw.User_id[i] = ' '\n\t\tsa.raw.Name[i] = ' '\n\t}\n\tif len(sa.UserID) > 8 || len(sa.Name) > 8 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tfor i, b := range []byte(sa.UserID[:]) {\n\t\tsa.raw.User_id[i] = int8(b)\n\t}\n\tfor i, b := range []byte(sa.Name[:]) {\n\t\tsa.raw.Name[i] = int8(b)\n\t}\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrIUCV, nil\n}\n\ntype SockaddrNFC struct {\n\tDeviceIdx   uint32\n\tTargetIdx   uint32\n\tNFCProtocol uint32\n\traw         RawSockaddrNFC\n}\n\nfunc (sa *SockaddrNFC) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Sa_family = AF_NFC\n\tsa.raw.Dev_idx = sa.DeviceIdx\n\tsa.raw.Target_idx = sa.TargetIdx\n\tsa.raw.Nfc_protocol = sa.NFCProtocol\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrNFC, nil\n}\n\ntype SockaddrNFCLLCP struct {\n\tDeviceIdx      uint32\n\tTargetIdx      uint32\n\tNFCProtocol    uint32\n\tDestinationSAP uint8\n\tSourceSAP      uint8\n\tServiceName    string\n\traw            RawSockaddrNFCLLCP\n}\n\nfunc (sa *SockaddrNFCLLCP) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tsa.raw.Sa_family = AF_NFC\n\tsa.raw.Dev_idx = sa.DeviceIdx\n\tsa.raw.Target_idx = sa.TargetIdx\n\tsa.raw.Nfc_protocol = sa.NFCProtocol\n\tsa.raw.Dsap = sa.DestinationSAP\n\tsa.raw.Ssap = sa.SourceSAP\n\tif len(sa.ServiceName) > len(sa.raw.Service_name) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tcopy(sa.raw.Service_name[:], sa.ServiceName)\n\tsa.raw.SetServiceNameLen(len(sa.ServiceName))\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrNFCLLCP, nil\n}\n\nvar socketProtocol = func(fd int) (int, error) {\n\treturn GetsockoptInt(fd, SOL_SOCKET, SO_PROTOCOL)\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_NETLINK:\n\t\tpp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrNetlink)\n\t\tsa.Family = pp.Family\n\t\tsa.Pad = pp.Pad\n\t\tsa.Pid = pp.Pid\n\t\tsa.Groups = pp.Groups\n\t\treturn sa, nil\n\n\tcase AF_PACKET:\n\t\tpp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrLinklayer)\n\t\tsa.Protocol = pp.Protocol\n\t\tsa.Ifindex = int(pp.Ifindex)\n\t\tsa.Hatype = pp.Hatype\n\t\tsa.Pkttype = pp.Pkttype\n\t\tsa.Halen = pp.Halen\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\t\tif pp.Path[0] == 0 {\n\t\t\t// \"Abstract\" Unix domain socket.\n\t\t\t// Rewrite leading NUL as @ for textual display.\n\t\t\t// (This is the standard convention.)\n\t\t\t// Not friendly to overwrite in place,\n\t\t\t// but the callers below don't care.\n\t\t\tpp.Path[0] = '@'\n\t\t}\n\n\t\t// Assume path ends at NUL.\n\t\t// This is not technically the Linux semantics for\n\t\t// abstract Unix domain sockets--they are supposed\n\t\t// to be uninterpreted fixed-size binary blobs--but\n\t\t// everyone uses this convention.\n\t\tn := 0\n\t\tfor n < len(pp.Path) && pp.Path[n] != 0 {\n\t\t\tn++\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch proto {\n\t\tcase IPPROTO_L2TP:\n\t\t\tpp := (*RawSockaddrL2TPIP)(unsafe.Pointer(rsa))\n\t\t\tsa := new(SockaddrL2TPIP)\n\t\t\tsa.ConnId = pp.Conn_id\n\t\t\tsa.Addr = pp.Addr\n\t\t\treturn sa, nil\n\t\tdefault:\n\t\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\t\tsa := new(SockaddrInet4)\n\t\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\t\tsa.Addr = pp.Addr\n\t\t\treturn sa, nil\n\t\t}\n\n\tcase AF_INET6:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tswitch proto {\n\t\tcase IPPROTO_L2TP:\n\t\t\tpp := (*RawSockaddrL2TPIP6)(unsafe.Pointer(rsa))\n\t\t\tsa := new(SockaddrL2TPIP6)\n\t\t\tsa.ConnId = pp.Conn_id\n\t\t\tsa.ZoneId = pp.Scope_id\n\t\t\tsa.Addr = pp.Addr\n\t\t\treturn sa, nil\n\t\tdefault:\n\t\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\t\tsa := new(SockaddrInet6)\n\t\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\t\tsa.ZoneId = pp.Scope_id\n\t\t\tsa.Addr = pp.Addr\n\t\t\treturn sa, nil\n\t\t}\n\n\tcase AF_VSOCK:\n\t\tpp := (*RawSockaddrVM)(unsafe.Pointer(rsa))\n\t\tsa := &SockaddrVM{\n\t\t\tCID:   pp.Cid,\n\t\t\tPort:  pp.Port,\n\t\t\tFlags: pp.Flags,\n\t\t}\n\t\treturn sa, nil\n\tcase AF_BLUETOOTH:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\t// only BTPROTO_L2CAP and BTPROTO_RFCOMM can accept connections\n\t\tswitch proto {\n\t\tcase BTPROTO_L2CAP:\n\t\t\tpp := (*RawSockaddrL2)(unsafe.Pointer(rsa))\n\t\t\tsa := &SockaddrL2{\n\t\t\t\tPSM:      pp.Psm,\n\t\t\t\tCID:      pp.Cid,\n\t\t\t\tAddr:     pp.Bdaddr,\n\t\t\t\tAddrType: pp.Bdaddr_type,\n\t\t\t}\n\t\t\treturn sa, nil\n\t\tcase BTPROTO_RFCOMM:\n\t\t\tpp := (*RawSockaddrRFCOMM)(unsafe.Pointer(rsa))\n\t\t\tsa := &SockaddrRFCOMM{\n\t\t\t\tChannel: pp.Channel,\n\t\t\t\tAddr:    pp.Bdaddr,\n\t\t\t}\n\t\t\treturn sa, nil\n\t\t}\n\tcase AF_XDP:\n\t\tpp := (*RawSockaddrXDP)(unsafe.Pointer(rsa))\n\t\tsa := &SockaddrXDP{\n\t\t\tFlags:        pp.Flags,\n\t\t\tIfindex:      pp.Ifindex,\n\t\t\tQueueID:      pp.Queue_id,\n\t\t\tSharedUmemFD: pp.Shared_umem_fd,\n\t\t}\n\t\treturn sa, nil\n\tcase AF_PPPOX:\n\t\tpp := (*RawSockaddrPPPoX)(unsafe.Pointer(rsa))\n\t\tif binary.BigEndian.Uint32(pp[2:6]) != px_proto_oe {\n\t\t\treturn nil, EINVAL\n\t\t}\n\t\tsa := &SockaddrPPPoE{\n\t\t\tSID:    binary.BigEndian.Uint16(pp[6:8]),\n\t\t\tRemote: pp[8:14],\n\t\t}\n\t\tfor i := 14; i < 14+IFNAMSIZ; i++ {\n\t\t\tif pp[i] == 0 {\n\t\t\t\tsa.Dev = string(pp[14:i])\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn sa, nil\n\tcase AF_TIPC:\n\t\tpp := (*RawSockaddrTIPC)(unsafe.Pointer(rsa))\n\n\t\tsa := &SockaddrTIPC{\n\t\t\tScope: int(pp.Scope),\n\t\t}\n\n\t\t// Determine which union variant is present in pp.Addr by checking\n\t\t// pp.Addrtype.\n\t\tswitch pp.Addrtype {\n\t\tcase TIPC_SERVICE_RANGE:\n\t\t\tsa.Addr = (*TIPCServiceRange)(unsafe.Pointer(&pp.Addr))\n\t\tcase TIPC_SERVICE_ADDR:\n\t\t\tsa.Addr = (*TIPCServiceName)(unsafe.Pointer(&pp.Addr))\n\t\tcase TIPC_SOCKET_ADDR:\n\t\t\tsa.Addr = (*TIPCSocketAddr)(unsafe.Pointer(&pp.Addr))\n\t\tdefault:\n\t\t\treturn nil, EINVAL\n\t\t}\n\n\t\treturn sa, nil\n\tcase AF_IUCV:\n\t\tpp := (*RawSockaddrIUCV)(unsafe.Pointer(rsa))\n\n\t\tvar user [8]byte\n\t\tvar name [8]byte\n\n\t\tfor i := 0; i < 8; i++ {\n\t\t\tuser[i] = byte(pp.User_id[i])\n\t\t\tname[i] = byte(pp.Name[i])\n\t\t}\n\n\t\tsa := &SockaddrIUCV{\n\t\t\tUserID: string(user[:]),\n\t\t\tName:   string(name[:]),\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_CAN:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\tpp := (*RawSockaddrCAN)(unsafe.Pointer(rsa))\n\n\t\tswitch proto {\n\t\tcase CAN_J1939:\n\t\t\tsa := &SockaddrCANJ1939{\n\t\t\t\tIfindex: int(pp.Ifindex),\n\t\t\t}\n\t\t\tname := (*[8]byte)(unsafe.Pointer(&sa.Name))\n\t\t\tfor i := 0; i < 8; i++ {\n\t\t\t\tname[i] = pp.Addr[i]\n\t\t\t}\n\t\t\tpgn := (*[4]byte)(unsafe.Pointer(&sa.PGN))\n\t\t\tfor i := 0; i < 4; i++ {\n\t\t\t\tpgn[i] = pp.Addr[i+8]\n\t\t\t}\n\t\t\taddr := (*[1]byte)(unsafe.Pointer(&sa.Addr))\n\t\t\taddr[0] = pp.Addr[12]\n\t\t\treturn sa, nil\n\t\tdefault:\n\t\t\tsa := &SockaddrCAN{\n\t\t\t\tIfindex: int(pp.Ifindex),\n\t\t\t}\n\t\t\trx := (*[4]byte)(unsafe.Pointer(&sa.RxID))\n\t\t\tfor i := 0; i < 4; i++ {\n\t\t\t\trx[i] = pp.Addr[i]\n\t\t\t}\n\t\t\ttx := (*[4]byte)(unsafe.Pointer(&sa.TxID))\n\t\t\tfor i := 0; i < 4; i++ {\n\t\t\t\ttx[i] = pp.Addr[i+4]\n\t\t\t}\n\t\t\treturn sa, nil\n\t\t}\n\tcase AF_NFC:\n\t\tproto, err := socketProtocol(fd)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tswitch proto {\n\t\tcase NFC_SOCKPROTO_RAW:\n\t\t\tpp := (*RawSockaddrNFC)(unsafe.Pointer(rsa))\n\t\t\tsa := &SockaddrNFC{\n\t\t\t\tDeviceIdx:   pp.Dev_idx,\n\t\t\t\tTargetIdx:   pp.Target_idx,\n\t\t\t\tNFCProtocol: pp.Nfc_protocol,\n\t\t\t}\n\t\t\treturn sa, nil\n\t\tcase NFC_SOCKPROTO_LLCP:\n\t\t\tpp := (*RawSockaddrNFCLLCP)(unsafe.Pointer(rsa))\n\t\t\tif uint64(pp.Service_name_len) > uint64(len(pp.Service_name)) {\n\t\t\t\treturn nil, EINVAL\n\t\t\t}\n\t\t\tsa := &SockaddrNFCLLCP{\n\t\t\t\tDeviceIdx:      pp.Dev_idx,\n\t\t\t\tTargetIdx:      pp.Target_idx,\n\t\t\t\tNFCProtocol:    pp.Nfc_protocol,\n\t\t\t\tDestinationSAP: pp.Dsap,\n\t\t\t\tSourceSAP:      pp.Ssap,\n\t\t\t\tServiceName:    string(pp.Service_name[:pp.Service_name_len]),\n\t\t\t}\n\t\t\treturn sa, nil\n\t\tdefault:\n\t\t\treturn nil, EINVAL\n\t\t}\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, 0)\n\tif err != nil {\n\t\treturn\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\nfunc GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) {\n\tvar value IPMreqn\n\tvallen := _Socklen(SizeofIPMreqn)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptUcred(fd, level, opt int) (*Ucred, error) {\n\tvar value Ucred\n\tvallen := _Socklen(SizeofUcred)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {\n\tvar value TCPInfo\n\tvallen := _Socklen(SizeofTCPInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\n// GetsockoptTCPCCVegasInfo returns algorithm specific congestion control information for a socket using the \"vegas\"\n// algorithm.\n//\n// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:\n//\n//\talgo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)\nfunc GetsockoptTCPCCVegasInfo(fd, level, opt int) (*TCPVegasInfo, error) {\n\tvar value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment\n\tvallen := _Socklen(SizeofTCPCCInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\tout := (*TCPVegasInfo)(unsafe.Pointer(&value[0]))\n\treturn out, err\n}\n\n// GetsockoptTCPCCDCTCPInfo returns algorithm specific congestion control information for a socket using the \"dctp\"\n// algorithm.\n//\n// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:\n//\n//\talgo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)\nfunc GetsockoptTCPCCDCTCPInfo(fd, level, opt int) (*TCPDCTCPInfo, error) {\n\tvar value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment\n\tvallen := _Socklen(SizeofTCPCCInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\tout := (*TCPDCTCPInfo)(unsafe.Pointer(&value[0]))\n\treturn out, err\n}\n\n// GetsockoptTCPCCBBRInfo returns algorithm specific congestion control information for a socket using the \"bbr\"\n// algorithm.\n//\n// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option:\n//\n//\talgo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION)\nfunc GetsockoptTCPCCBBRInfo(fd, level, opt int) (*TCPBBRInfo, error) {\n\tvar value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment\n\tvallen := _Socklen(SizeofTCPCCInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\tout := (*TCPBBRInfo)(unsafe.Pointer(&value[0]))\n\treturn out, err\n}\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\tif err == ERANGE {\n\t\t\tbuf = make([]byte, vallen)\n\t\t\terr = getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\t}\n\treturn ByteSliceToString(buf[:vallen]), nil\n}\n\nfunc GetsockoptTpacketStats(fd, level, opt int) (*TpacketStats, error) {\n\tvar value TpacketStats\n\tvallen := _Socklen(SizeofTpacketStats)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptTpacketStatsV3(fd, level, opt int) (*TpacketStatsV3, error) {\n\tvar value TpacketStatsV3\n\tvallen := _Socklen(SizeofTpacketStatsV3)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\nfunc SetsockoptPacketMreq(fd, level, opt int, mreq *PacketMreq) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq))\n}\n\n// SetsockoptSockFprog attaches a classic BPF or an extended BPF program to a\n// socket to filter incoming packets.  See 'man 7 socket' for usage information.\nfunc SetsockoptSockFprog(fd, level, opt int, fprog *SockFprog) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(fprog), unsafe.Sizeof(*fprog))\n}\n\nfunc SetsockoptCanRawFilter(fd, level, opt int, filter []CanFilter) error {\n\tvar p unsafe.Pointer\n\tif len(filter) > 0 {\n\t\tp = unsafe.Pointer(&filter[0])\n\t}\n\treturn setsockopt(fd, level, opt, p, uintptr(len(filter)*SizeofCanFilter))\n}\n\nfunc SetsockoptTpacketReq(fd, level, opt int, tp *TpacketReq) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))\n}\n\nfunc SetsockoptTpacketReq3(fd, level, opt int, tp *TpacketReq3) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tp), unsafe.Sizeof(*tp))\n}\n\nfunc SetsockoptTCPRepairOpt(fd, level, opt int, o []TCPRepairOpt) (err error) {\n\tif len(o) == 0 {\n\t\treturn EINVAL\n\t}\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&o[0]), uintptr(SizeofTCPRepairOpt*len(o)))\n}\n\nfunc SetsockoptTCPMD5Sig(fd, level, opt int, s *TCPMD5Sig) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(s), unsafe.Sizeof(*s))\n}\n\n// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html)\n\n// KeyctlInt calls keyctl commands in which each argument is an int.\n// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK,\n// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT,\n// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT,\n// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT.\n//sys\tKeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlBuffer calls keyctl commands in which the third and fourth\n// arguments are a buffer and its length, respectively.\n// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE.\n//sys\tKeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlString calls keyctl commands which return a string.\n// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY.\nfunc KeyctlString(cmd int, id int) (string, error) {\n\t// We must loop as the string data may change in between the syscalls.\n\t// We could allocate a large buffer here to reduce the chance that the\n\t// syscall needs to be called twice; however, this is unnecessary as\n\t// the performance loss is negligible.\n\tvar buffer []byte\n\tfor {\n\t\t// Try to fill the buffer with data\n\t\tlength, err := KeyctlBuffer(cmd, id, buffer, 0)\n\t\tif err != nil {\n\t\t\treturn \"\", err\n\t\t}\n\n\t\t// Check if the data was written\n\t\tif length <= len(buffer) {\n\t\t\t// Exclude the null terminator\n\t\t\treturn string(buffer[:length-1]), nil\n\t\t}\n\n\t\t// Make a bigger buffer if needed\n\t\tbuffer = make([]byte, length)\n\t}\n}\n\n// Keyctl commands with special signatures.\n\n// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html\nfunc KeyctlGetKeyringID(id int, create bool) (ringid int, err error) {\n\tcreateInt := 0\n\tif create {\n\t\tcreateInt = 1\n\t}\n\treturn KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0)\n}\n\n// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the\n// key handle permission mask as described in the \"keyctl setperm\" section of\n// http://man7.org/linux/man-pages/man1/keyctl.1.html.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html\nfunc KeyctlSetperm(id int, perm uint32) error {\n\t_, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0)\n\treturn err\n}\n\n//sys\tkeyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html\nfunc KeyctlJoinSessionKeyring(name string) (ringid int, err error) {\n\treturn keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name)\n}\n\n//sys\tkeyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlSearch implements the KEYCTL_SEARCH command.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_search.3.html\nfunc KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) {\n\treturn keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid)\n}\n\n//sys\tkeyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL\n\n// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This\n// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice\n// of Iovec (each of which represents a buffer) instead of a single buffer.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html\nfunc KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error {\n\treturn keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid)\n}\n\n//sys\tkeyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL\n\n// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command\n// computes a Diffie-Hellman shared secret based on the provide params. The\n// secret is written to the provided buffer and the returned size is the number\n// of bytes written (returning an error if there is insufficient space in the\n// buffer). If a nil buffer is passed in, this function returns the minimum\n// buffer length needed to store the appropriate data. Note that this differs\n// from KEYCTL_READ's behavior which always returns the requested payload size.\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html\nfunc KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) {\n\treturn keyctlDH(KEYCTL_DH_COMPUTE, params, buffer)\n}\n\n// KeyctlRestrictKeyring implements the KEYCTL_RESTRICT_KEYRING command. This\n// command limits the set of keys that can be linked to the keyring, regardless\n// of keyring permissions. The command requires the \"setattr\" permission.\n//\n// When called with an empty keyType the command locks the keyring, preventing\n// any further keys from being linked to the keyring.\n//\n// The \"asymmetric\" keyType defines restrictions requiring key payloads to be\n// DER encoded X.509 certificates signed by keys in another keyring. Restrictions\n// for \"asymmetric\" include \"builtin_trusted\", \"builtin_and_secondary_trusted\",\n// \"key_or_keyring:<key>\", and \"key_or_keyring:<key>:chain\".\n//\n// As of Linux 4.12, only the \"asymmetric\" keyType defines type-specific\n// restrictions.\n//\n// See the full documentation at:\n// http://man7.org/linux/man-pages/man3/keyctl_restrict_keyring.3.html\n// http://man7.org/linux/man-pages/man2/keyctl.2.html\nfunc KeyctlRestrictKeyring(ringid int, keyType string, restriction string) error {\n\tif keyType == \"\" {\n\t\treturn keyctlRestrictKeyring(KEYCTL_RESTRICT_KEYRING, ringid)\n\t}\n\treturn keyctlRestrictKeyringByType(KEYCTL_RESTRICT_KEYRING, ringid, keyType, restriction)\n}\n\n//sys\tkeyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) = SYS_KEYCTL\n//sys\tkeyctlRestrictKeyring(cmd int, arg2 int) (err error) = SYS_KEYCTL\n\nfunc recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\tif emptyIovecs(iov) {\n\t\t\tvar sockType int\n\t\t\tsockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)\n\t\t\tif err != nil {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// receive at least one normal byte\n\t\t\tif sockType != SOCK_DGRAM {\n\t\t\t\tvar iova [1]Iovec\n\t\t\t\tiova[0].Base = &dummy\n\t\t\t\tiova[0].SetLen(1)\n\t\t\t\tiov = iova[:]\n\t\t\t}\n\t\t}\n\t\tmsg.Control = &oob[0]\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = recvmsg(fd, &msg, flags); err != nil {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\treturn\n}\n\nfunc sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(ptr)\n\tmsg.Namelen = uint32(salen)\n\tvar dummy byte\n\tvar empty bool\n\tif len(oob) > 0 {\n\t\tempty = emptyIovecs(iov)\n\t\tif empty {\n\t\t\tvar sockType int\n\t\t\tsockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE)\n\t\t\tif err != nil {\n\t\t\t\treturn 0, err\n\t\t\t}\n\t\t\t// send at least one normal byte\n\t\t\tif sockType != SOCK_DGRAM {\n\t\t\t\tvar iova [1]Iovec\n\t\t\t\tiova[0].Base = &dummy\n\t\t\t\tiova[0].SetLen(1)\n\t\t\t\tiov = iova[:]\n\t\t\t}\n\t\t}\n\t\tmsg.Control = &oob[0]\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && empty {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\n// BindToDevice binds the socket associated with fd to device.\nfunc BindToDevice(fd int, device string) (err error) {\n\treturn SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device)\n}\n\n//sys\tptrace(request int, pid int, addr uintptr, data uintptr) (err error)\n//sys\tptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) = SYS_PTRACE\n\nfunc ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) {\n\t// The peek requests are machine-size oriented, so we wrap it\n\t// to retrieve arbitrary-length data.\n\n\t// The ptrace syscall differs from glibc's ptrace.\n\t// Peeks returns the word in *data, not as the return value.\n\n\tvar buf [SizeofPtr]byte\n\n\t// Leading edge. PEEKTEXT/PEEKDATA don't require aligned\n\t// access (PEEKUSER warns that it might), but if we don't\n\t// align our reads, we might straddle an unmapped page\n\t// boundary and not get the bytes leading up to the page\n\t// boundary.\n\tn := 0\n\tif addr%SizeofPtr != 0 {\n\t\terr = ptracePtr(req, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0]))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn += copy(out, buf[addr%SizeofPtr:])\n\t\tout = out[n:]\n\t}\n\n\t// Remainder.\n\tfor len(out) > 0 {\n\t\t// We use an internal buffer to guarantee alignment.\n\t\t// It's not documented if this is necessary, but we're paranoid.\n\t\terr = ptracePtr(req, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tcopied := copy(out, buf[0:])\n\t\tn += copied\n\t\tout = out[copied:]\n\t}\n\n\treturn n, nil\n}\n\nfunc PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn ptracePeek(PTRACE_PEEKTEXT, pid, addr, out)\n}\n\nfunc PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn ptracePeek(PTRACE_PEEKDATA, pid, addr, out)\n}\n\nfunc PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) {\n\treturn ptracePeek(PTRACE_PEEKUSR, pid, addr, out)\n}\n\nfunc ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) {\n\t// As for ptracePeek, we need to align our accesses to deal\n\t// with the possibility of straddling an invalid page.\n\n\t// Leading edge.\n\tn := 0\n\tif addr%SizeofPtr != 0 {\n\t\tvar buf [SizeofPtr]byte\n\t\terr = ptracePtr(peekReq, pid, addr-addr%SizeofPtr, unsafe.Pointer(&buf[0]))\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tn += copy(buf[addr%SizeofPtr:], data)\n\t\tword := *((*uintptr)(unsafe.Pointer(&buf[0])))\n\t\terr = ptrace(pokeReq, pid, addr-addr%SizeofPtr, word)\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t\tdata = data[n:]\n\t}\n\n\t// Interior.\n\tfor len(data) > SizeofPtr {\n\t\tword := *((*uintptr)(unsafe.Pointer(&data[0])))\n\t\terr = ptrace(pokeReq, pid, addr+uintptr(n), word)\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tn += SizeofPtr\n\t\tdata = data[SizeofPtr:]\n\t}\n\n\t// Trailing edge.\n\tif len(data) > 0 {\n\t\tvar buf [SizeofPtr]byte\n\t\terr = ptracePtr(peekReq, pid, addr+uintptr(n), unsafe.Pointer(&buf[0]))\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tcopy(buf[0:], data)\n\t\tword := *((*uintptr)(unsafe.Pointer(&buf[0])))\n\t\terr = ptrace(pokeReq, pid, addr+uintptr(n), word)\n\t\tif err != nil {\n\t\t\treturn n, err\n\t\t}\n\t\tn += len(data)\n\t}\n\n\treturn n, nil\n}\n\nfunc PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data)\n}\n\nfunc PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data)\n}\n\nfunc PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) {\n\treturn ptracePoke(PTRACE_POKEUSR, PTRACE_PEEKUSR, pid, addr, data)\n}\n\n// elfNT_PRSTATUS is a copy of the debug/elf.NT_PRSTATUS constant so\n// x/sys/unix doesn't need to depend on debug/elf and thus\n// compress/zlib, debug/dwarf, and other packages.\nconst elfNT_PRSTATUS = 1\n\nfunc PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) {\n\tvar iov Iovec\n\tiov.Base = (*byte)(unsafe.Pointer(regsout))\n\tiov.SetLen(int(unsafe.Sizeof(*regsout)))\n\treturn ptracePtr(PTRACE_GETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov))\n}\n\nfunc PtraceSetRegs(pid int, regs *PtraceRegs) (err error) {\n\tvar iov Iovec\n\tiov.Base = (*byte)(unsafe.Pointer(regs))\n\tiov.SetLen(int(unsafe.Sizeof(*regs)))\n\treturn ptracePtr(PTRACE_SETREGSET, pid, uintptr(elfNT_PRSTATUS), unsafe.Pointer(&iov))\n}\n\nfunc PtraceSetOptions(pid int, options int) (err error) {\n\treturn ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options))\n}\n\nfunc PtraceGetEventMsg(pid int) (msg uint, err error) {\n\tvar data _C_long\n\terr = ptracePtr(PTRACE_GETEVENTMSG, pid, 0, unsafe.Pointer(&data))\n\tmsg = uint(data)\n\treturn\n}\n\nfunc PtraceCont(pid int, signal int) (err error) {\n\treturn ptrace(PTRACE_CONT, pid, 0, uintptr(signal))\n}\n\nfunc PtraceSyscall(pid int, signal int) (err error) {\n\treturn ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal))\n}\n\nfunc PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) }\n\nfunc PtraceInterrupt(pid int) (err error) { return ptrace(PTRACE_INTERRUPT, pid, 0, 0) }\n\nfunc PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) }\n\nfunc PtraceSeize(pid int) (err error) { return ptrace(PTRACE_SEIZE, pid, 0, 0) }\n\nfunc PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) }\n\n//sys\treboot(magic1 uint, magic2 uint, cmd int, arg string) (err error)\n\nfunc Reboot(cmd int) (err error) {\n\treturn reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, \"\")\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\n}\n\n//sys\tmount(source string, target string, fstype string, flags uintptr, data *byte) (err error)\n\nfunc Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {\n\t// Certain file systems get rather angry and EINVAL if you give\n\t// them an empty string of data, rather than NULL.\n\tif data == \"\" {\n\t\treturn mount(source, target, fstype, flags, nil)\n\t}\n\tdatap, err := BytePtrFromString(data)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn mount(source, target, fstype, flags, datap)\n}\n\n//sys\tmountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) = SYS_MOUNT_SETATTR\n\n// MountSetattr is a wrapper for mount_setattr(2).\n// https://man7.org/linux/man-pages/man2/mount_setattr.2.html\n//\n// Requires kernel >= 5.12.\nfunc MountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr) error {\n\treturn mountSetattr(dirfd, pathname, flags, attr, unsafe.Sizeof(*attr))\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n// Sendto\n// Recvfrom\n// Socketpair\n\n/*\n * Direct access\n */\n//sys\tAcct(path string) (err error)\n//sys\tAddKey(keyType string, description string, payload []byte, ringid int) (id int, err error)\n//sys\tAdjtimex(buf *Timex) (state int, err error)\n//sysnb\tCapget(hdr *CapUserHeader, data *CapUserData) (err error)\n//sysnb\tCapset(hdr *CapUserHeader, data *CapUserData) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockAdjtime(clockid int32, buf *Timex) (state int, err error)\n//sys\tClockGetres(clockid int32, res *Timespec) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tCloseRange(first uint, last uint, flags uint) (err error)\n//sys\tCopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tDeleteModule(name string, flags int) (err error)\n//sys\tDup(oldfd int) (fd int, err error)\n\nfunc Dup2(oldfd, newfd int) error {\n\treturn Dup3(oldfd, newfd, 0)\n}\n\n//sys\tDup3(oldfd int, newfd int, flags int) (err error)\n//sysnb\tEpollCreate1(flag int) (fd int, err error)\n//sysnb\tEpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error)\n//sys\tEventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2\n//sys\tExit(code int) = SYS_EXIT_GROUP\n//sys\tFallocate(fd int, mode uint32, off int64, len int64) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFdatasync(fd int) (err error)\n//sys\tFgetxattr(fd int, attr string, dest []byte) (sz int, err error)\n//sys\tFinitModule(fd int, params string, flags int) (err error)\n//sys\tFlistxattr(fd int, dest []byte) (sz int, err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFremovexattr(fd int, attr string) (err error)\n//sys\tFsetxattr(fd int, attr string, dest []byte, flags int) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFsmount(fd int, flags int, mountAttrs int) (fsfd int, err error)\n//sys\tFsopen(fsName string, flags int) (fd int, err error)\n//sys\tFspick(dirfd int, pathName string, flags int) (fd int, err error)\n\n//sys\tfsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error)\n\nfunc fsconfigCommon(fd int, cmd uint, key string, value *byte, aux int) (err error) {\n\tvar keyp *byte\n\tif keyp, err = BytePtrFromString(key); err != nil {\n\t\treturn\n\t}\n\treturn fsconfig(fd, cmd, keyp, value, aux)\n}\n\n// FsconfigSetFlag is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_FLAG.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\nfunc FsconfigSetFlag(fd int, key string) (err error) {\n\treturn fsconfigCommon(fd, FSCONFIG_SET_FLAG, key, nil, 0)\n}\n\n// FsconfigSetString is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_STRING.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\n// value is the parameter value to set.\nfunc FsconfigSetString(fd int, key string, value string) (err error) {\n\tvar valuep *byte\n\tif valuep, err = BytePtrFromString(value); err != nil {\n\t\treturn\n\t}\n\treturn fsconfigCommon(fd, FSCONFIG_SET_STRING, key, valuep, 0)\n}\n\n// FsconfigSetBinary is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_BINARY.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\n// value is the parameter value to set.\nfunc FsconfigSetBinary(fd int, key string, value []byte) (err error) {\n\tif len(value) == 0 {\n\t\treturn EINVAL\n\t}\n\treturn fsconfigCommon(fd, FSCONFIG_SET_BINARY, key, &value[0], len(value))\n}\n\n// FsconfigSetPath is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_PATH.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\n// path is a non-empty path for specified key.\n// atfd is a file descriptor at which to start lookup from or AT_FDCWD.\nfunc FsconfigSetPath(fd int, key string, path string, atfd int) (err error) {\n\tvar valuep *byte\n\tif valuep, err = BytePtrFromString(path); err != nil {\n\t\treturn\n\t}\n\treturn fsconfigCommon(fd, FSCONFIG_SET_PATH, key, valuep, atfd)\n}\n\n// FsconfigSetPathEmpty is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_PATH_EMPTY. The same as\n// FconfigSetPath but with AT_PATH_EMPTY implied.\nfunc FsconfigSetPathEmpty(fd int, key string, path string, atfd int) (err error) {\n\tvar valuep *byte\n\tif valuep, err = BytePtrFromString(path); err != nil {\n\t\treturn\n\t}\n\treturn fsconfigCommon(fd, FSCONFIG_SET_PATH_EMPTY, key, valuep, atfd)\n}\n\n// FsconfigSetFd is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_SET_FD.\n//\n// fd is the filesystem context to act upon.\n// key the parameter key to set.\n// value is a file descriptor to be assigned to specified key.\nfunc FsconfigSetFd(fd int, key string, value int) (err error) {\n\treturn fsconfigCommon(fd, FSCONFIG_SET_FD, key, nil, value)\n}\n\n// FsconfigCreate is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_CMD_CREATE.\n//\n// fd is the filesystem context to act upon.\nfunc FsconfigCreate(fd int) (err error) {\n\treturn fsconfig(fd, FSCONFIG_CMD_CREATE, nil, nil, 0)\n}\n\n// FsconfigReconfigure is equivalent to fsconfig(2) called\n// with cmd == FSCONFIG_CMD_RECONFIGURE.\n//\n// fd is the filesystem context to act upon.\nfunc FsconfigReconfigure(fd int) (err error) {\n\treturn fsconfig(fd, FSCONFIG_CMD_RECONFIGURE, nil, nil, 0)\n}\n\n//sys\tGetdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n\nfunc Getpgrp() (pid int) {\n\tpid, _ = Getpgid(0)\n\treturn\n}\n\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n\nfunc Getrandom(buf []byte, flags int) (n int, err error) {\n\tvdsoRet, supported := vgetrandom(buf, uint32(flags))\n\tif supported {\n\t\tif vdsoRet < 0 {\n\t\t\treturn 0, errnoErr(syscall.Errno(-vdsoRet))\n\t\t}\n\t\treturn vdsoRet, nil\n\t}\n\tvar p *byte\n\tif len(buf) > 0 {\n\t\tp = &buf[0]\n\t}\n\tr, _, e := Syscall(SYS_GETRANDOM, uintptr(unsafe.Pointer(p)), uintptr(len(buf)), uintptr(flags))\n\tif e != 0 {\n\t\treturn 0, errnoErr(e)\n\t}\n\treturn int(r), nil\n}\n\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettid() (tid int)\n//sys\tGetxattr(path string, attr string, dest []byte) (sz int, err error)\n//sys\tInitModule(moduleImage []byte, params string) (err error)\n//sys\tInotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)\n//sysnb\tInotifyInit1(flags int) (fd int, err error)\n//sysnb\tInotifyRmWatch(fd int, watchdesc uint32) (success int, err error)\n//sysnb\tKill(pid int, sig syscall.Signal) (err error)\n//sys\tKlogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG\n//sys\tLgetxattr(path string, attr string, dest []byte) (sz int, err error)\n//sys\tListxattr(path string, dest []byte) (sz int, err error)\n//sys\tLlistxattr(path string, dest []byte) (sz int, err error)\n//sys\tLremovexattr(path string, attr string) (err error)\n//sys\tLsetxattr(path string, attr string, data []byte, flags int) (err error)\n//sys\tMemfdCreate(name string, flags int) (fd int, err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tMoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpenTree(dfd int, fileName string, flags uint) (r int, err error)\n//sys\tPerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)\n//sys\tPivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT\n//sys\tPrctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)\n//sys\tpselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tRemovexattr(path string, attr string) (err error)\n//sys\tRenameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error)\n//sys\tRequestKey(keyType string, description string, callback string, destRingid int) (id int, err error)\n//sys\tSetdomainname(p []byte) (err error)\n//sys\tSethostname(p []byte) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tv *Timeval) (err error)\n//sys\tSetns(fd int, nstype int) (err error)\n\n//go:linkname syscall_prlimit syscall.prlimit\nfunc syscall_prlimit(pid, resource int, newlimit, old *syscall.Rlimit) error\n\nfunc Prlimit(pid, resource int, newlimit, old *Rlimit) error {\n\t// Just call the syscall version, because as of Go 1.21\n\t// it will affect starting a new process.\n\treturn syscall_prlimit(pid, resource, (*syscall.Rlimit)(newlimit), (*syscall.Rlimit)(old))\n}\n\n// PrctlRetInt performs a prctl operation specified by option and further\n// optional arguments arg2 through arg5 depending on option. It returns a\n// non-negative integer that is returned by the prctl syscall.\nfunc PrctlRetInt(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (int, error) {\n\tret, _, err := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(ret), nil\n}\n\nfunc Setuid(uid int) (err error) {\n\treturn syscall.Setuid(uid)\n}\n\nfunc Setgid(gid int) (err error) {\n\treturn syscall.Setgid(gid)\n}\n\nfunc Setreuid(ruid, euid int) (err error) {\n\treturn syscall.Setreuid(ruid, euid)\n}\n\nfunc Setregid(rgid, egid int) (err error) {\n\treturn syscall.Setregid(rgid, egid)\n}\n\nfunc Setresuid(ruid, euid, suid int) (err error) {\n\treturn syscall.Setresuid(ruid, euid, suid)\n}\n\nfunc Setresgid(rgid, egid, sgid int) (err error) {\n\treturn syscall.Setresgid(rgid, egid, sgid)\n}\n\n// SetfsgidRetGid sets fsgid for current thread and returns previous fsgid set.\n// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability.\n// If the call fails due to other reasons, current fsgid will be returned.\nfunc SetfsgidRetGid(gid int) (int, error) {\n\treturn setfsgid(gid)\n}\n\n// SetfsuidRetUid sets fsuid for current thread and returns previous fsuid set.\n// setfsgid(2) will return a non-nil error only if its caller lacks CAP_SETUID capability\n// If the call fails due to other reasons, current fsuid will be returned.\nfunc SetfsuidRetUid(uid int) (int, error) {\n\treturn setfsuid(uid)\n}\n\nfunc Setfsgid(gid int) error {\n\t_, err := setfsgid(gid)\n\treturn err\n}\n\nfunc Setfsuid(uid int) error {\n\t_, err := setfsuid(uid)\n\treturn err\n}\n\nfunc Signalfd(fd int, sigmask *Sigset_t, flags int) (newfd int, err error) {\n\treturn signalfd(fd, sigmask, _C__NSIG/8, flags)\n}\n\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sys\tSetxattr(path string, attr string, data []byte, flags int) (err error)\n//sys\tsignalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) = SYS_SIGNALFD4\n//sys\tStatx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error)\n//sys\tSync()\n//sys\tSyncfs(fd int) (err error)\n//sysnb\tSysinfo(info *Sysinfo_t) (err error)\n//sys\tTee(rfd int, wfd int, len int, flags int) (n int64, err error)\n//sysnb\tTimerfdCreate(clockid int, flags int) (fd int, err error)\n//sysnb\tTimerfdGettime(fd int, currValue *ItimerSpec) (err error)\n//sysnb\tTimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error)\n//sysnb\tTgkill(tgid int, tid int, sig syscall.Signal) (err error)\n//sysnb\tTimes(tms *Tms) (ticks uintptr, err error)\n//sysnb\tUmask(mask int) (oldmask int)\n//sysnb\tUname(buf *Utsname) (err error)\n//sys\tUnmount(target string, flags int) (err error) = SYS_UMOUNT2\n//sys\tUnshare(flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\texitThread(code int) (err error) = SYS_EXIT\n//sys\treadv(fd int, iovs []Iovec) (n int, err error) = SYS_READV\n//sys\twritev(fd int, iovs []Iovec) (n int, err error) = SYS_WRITEV\n//sys\tpreadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PREADV\n//sys\tpwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) = SYS_PWRITEV\n//sys\tpreadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PREADV2\n//sys\tpwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) = SYS_PWRITEV2\n\n// minIovec is the size of the small initial allocation used by\n// Readv, Writev, etc.\n//\n// This small allocation gets stack allocated, which lets the\n// common use case of len(iovs) <= minIovs avoid more expensive\n// heap allocations.\nconst minIovec = 8\n\n// appendBytes converts bs to Iovecs and appends them to vecs.\nfunc appendBytes(vecs []Iovec, bs [][]byte) []Iovec {\n\tfor _, b := range bs {\n\t\tvar v Iovec\n\t\tv.SetLen(len(b))\n\t\tif len(b) > 0 {\n\t\t\tv.Base = &b[0]\n\t\t} else {\n\t\t\tv.Base = (*byte)(unsafe.Pointer(&_zero))\n\t\t}\n\t\tvecs = append(vecs, v)\n\t}\n\treturn vecs\n}\n\n// offs2lohi splits offs into its low and high order bits.\nfunc offs2lohi(offs int64) (lo, hi uintptr) {\n\tconst longBits = SizeofLong * 8\n\treturn uintptr(offs), uintptr(uint64(offs) >> (longBits - 1) >> 1) // two shifts to avoid false positive in vet\n}\n\nfunc Readv(fd int, iovs [][]byte) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tn, err = readv(fd, iovecs)\n\treadvRacedetect(iovecs, n, err)\n\treturn n, err\n}\n\nfunc Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tlo, hi := offs2lohi(offset)\n\tn, err = preadv(fd, iovecs, lo, hi)\n\treadvRacedetect(iovecs, n, err)\n\treturn n, err\n}\n\nfunc Preadv2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tlo, hi := offs2lohi(offset)\n\tn, err = preadv2(fd, iovecs, lo, hi, flags)\n\treadvRacedetect(iovecs, n, err)\n\treturn n, err\n}\n\nfunc readvRacedetect(iovecs []Iovec, n int, err error) {\n\tif !raceenabled {\n\t\treturn\n\t}\n\tfor i := 0; n > 0 && i < len(iovecs); i++ {\n\t\tm := int(iovecs[i].Len)\n\t\tif m > n {\n\t\t\tm = n\n\t\t}\n\t\tn -= m\n\t\tif m > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(iovecs[i].Base), m)\n\t\t}\n\t}\n\tif err == nil {\n\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t}\n}\n\nfunc Writev(fd int, iovs [][]byte) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = writev(fd, iovecs)\n\twritevRacedetect(iovecs, n)\n\treturn n, err\n}\n\nfunc Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tlo, hi := offs2lohi(offset)\n\tn, err = pwritev(fd, iovecs, lo, hi)\n\twritevRacedetect(iovecs, n)\n\treturn n, err\n}\n\nfunc Pwritev2(fd int, iovs [][]byte, offset int64, flags int) (n int, err error) {\n\tiovecs := make([]Iovec, 0, minIovec)\n\tiovecs = appendBytes(iovecs, iovs)\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tlo, hi := offs2lohi(offset)\n\tn, err = pwritev2(fd, iovecs, lo, hi, flags)\n\twritevRacedetect(iovecs, n)\n\treturn n, err\n}\n\nfunc writevRacedetect(iovecs []Iovec, n int) {\n\tif !raceenabled {\n\t\treturn\n\t}\n\tfor i := 0; n > 0 && i < len(iovecs); i++ {\n\t\tm := int(iovecs[i].Len)\n\t\tif m > n {\n\t\t\tm = n\n\t\t}\n\t\tn -= m\n\t\tif m > 0 {\n\t\t\traceReadRange(unsafe.Pointer(iovecs[i].Base), m)\n\t\t}\n\t}\n}\n\n// mmap varies by architecture; see syscall_linux_*.go.\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tmremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error)\n//sys\tMadvise(b []byte, advice int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n\nconst (\n\tmremapFixed     = MREMAP_FIXED\n\tmremapDontunmap = MREMAP_DONTUNMAP\n\tmremapMaymove   = MREMAP_MAYMOVE\n)\n\n// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd,\n// using the specified flags.\nfunc Vmsplice(fd int, iovs []Iovec, flags int) (int, error) {\n\tvar p unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\tp = unsafe.Pointer(&iovs[0])\n\t}\n\n\tn, _, errno := Syscall6(SYS_VMSPLICE, uintptr(fd), uintptr(p), uintptr(len(iovs)), uintptr(flags), 0, 0)\n\tif errno != 0 {\n\t\treturn 0, syscall.Errno(errno)\n\t}\n\n\treturn int(n), nil\n}\n\nfunc isGroupMember(gid int) bool {\n\tgroups, err := Getgroups()\n\tif err != nil {\n\t\treturn false\n\t}\n\n\tfor _, g := range groups {\n\t\tif g == gid {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc isCapDacOverrideSet() bool {\n\thdr := CapUserHeader{Version: LINUX_CAPABILITY_VERSION_3}\n\tdata := [2]CapUserData{}\n\terr := Capget(&hdr, &data[0])\n\n\treturn err == nil && data[0].Effective&(1<<CAP_DAC_OVERRIDE) != 0\n}\n\n//sys\tfaccessat(dirfd int, path string, mode uint32) (err error)\n//sys\tFaccessat2(dirfd int, path string, mode uint32, flags int) (err error)\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tif flags == 0 {\n\t\treturn faccessat(dirfd, path, mode)\n\t}\n\n\tif err := Faccessat2(dirfd, path, mode, flags); err != ENOSYS && err != EPERM {\n\t\treturn err\n\t}\n\n\t// The Linux kernel faccessat system call does not take any flags.\n\t// The glibc faccessat implements the flags itself; see\n\t// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/faccessat.c;hb=HEAD\n\t// Because people naturally expect syscall.Faccessat to act\n\t// like C faccessat, we do the same.\n\n\tif flags & ^(AT_SYMLINK_NOFOLLOW|AT_EACCESS) != 0 {\n\t\treturn EINVAL\n\t}\n\n\tvar st Stat_t\n\tif err := Fstatat(dirfd, path, &st, flags&AT_SYMLINK_NOFOLLOW); err != nil {\n\t\treturn err\n\t}\n\n\tmode &= 7\n\tif mode == 0 {\n\t\treturn nil\n\t}\n\n\tvar uid int\n\tif flags&AT_EACCESS != 0 {\n\t\tuid = Geteuid()\n\t\tif uid != 0 && isCapDacOverrideSet() {\n\t\t\t// If CAP_DAC_OVERRIDE is set, file access check is\n\t\t\t// done by the kernel in the same way as for root\n\t\t\t// (see generic_permission() in the Linux sources).\n\t\t\tuid = 0\n\t\t}\n\t} else {\n\t\tuid = Getuid()\n\t}\n\n\tif uid == 0 {\n\t\tif mode&1 == 0 {\n\t\t\t// Root can read and write any file.\n\t\t\treturn nil\n\t\t}\n\t\tif st.Mode&0111 != 0 {\n\t\t\t// Root can execute any file that anybody can execute.\n\t\t\treturn nil\n\t\t}\n\t\treturn EACCES\n\t}\n\n\tvar fmode uint32\n\tif uint32(uid) == st.Uid {\n\t\tfmode = (st.Mode >> 6) & 7\n\t} else {\n\t\tvar gid int\n\t\tif flags&AT_EACCESS != 0 {\n\t\t\tgid = Getegid()\n\t\t} else {\n\t\t\tgid = Getgid()\n\t\t}\n\n\t\tif uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) {\n\t\t\tfmode = (st.Mode >> 3) & 7\n\t\t} else {\n\t\t\tfmode = st.Mode & 7\n\t\t}\n\t}\n\n\tif fmode&mode == mode {\n\t\treturn nil\n\t}\n\n\treturn EACCES\n}\n\n//sys\tnameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) = SYS_NAME_TO_HANDLE_AT\n//sys\topenByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) = SYS_OPEN_BY_HANDLE_AT\n\n// fileHandle is the argument to nameToHandleAt and openByHandleAt. We\n// originally tried to generate it via unix/linux/types.go with \"type\n// fileHandle C.struct_file_handle\" but that generated empty structs\n// for mips64 and mips64le. Instead, hard code it for now (it's the\n// same everywhere else) until the mips64 generator issue is fixed.\ntype fileHandle struct {\n\tBytes uint32\n\tType  int32\n}\n\n// FileHandle represents the C struct file_handle used by\n// name_to_handle_at (see NameToHandleAt) and open_by_handle_at (see\n// OpenByHandleAt).\ntype FileHandle struct {\n\t*fileHandle\n}\n\n// NewFileHandle constructs a FileHandle.\nfunc NewFileHandle(handleType int32, handle []byte) FileHandle {\n\tconst hdrSize = unsafe.Sizeof(fileHandle{})\n\tbuf := make([]byte, hdrSize+uintptr(len(handle)))\n\tcopy(buf[hdrSize:], handle)\n\tfh := (*fileHandle)(unsafe.Pointer(&buf[0]))\n\tfh.Type = handleType\n\tfh.Bytes = uint32(len(handle))\n\treturn FileHandle{fh}\n}\n\nfunc (fh *FileHandle) Size() int   { return int(fh.fileHandle.Bytes) }\nfunc (fh *FileHandle) Type() int32 { return fh.fileHandle.Type }\nfunc (fh *FileHandle) Bytes() []byte {\n\tn := fh.Size()\n\tif n == 0 {\n\t\treturn nil\n\t}\n\treturn unsafe.Slice((*byte)(unsafe.Pointer(uintptr(unsafe.Pointer(&fh.fileHandle.Type))+4)), n)\n}\n\n// NameToHandleAt wraps the name_to_handle_at system call; it obtains\n// a handle for a path name.\nfunc NameToHandleAt(dirfd int, path string, flags int) (handle FileHandle, mountID int, err error) {\n\tvar mid _C_int\n\t// Try first with a small buffer, assuming the handle will\n\t// only be 32 bytes.\n\tsize := uint32(32 + unsafe.Sizeof(fileHandle{}))\n\tdidResize := false\n\tfor {\n\t\tbuf := make([]byte, size)\n\t\tfh := (*fileHandle)(unsafe.Pointer(&buf[0]))\n\t\tfh.Bytes = size - uint32(unsafe.Sizeof(fileHandle{}))\n\t\terr = nameToHandleAt(dirfd, path, fh, &mid, flags)\n\t\tif err == EOVERFLOW {\n\t\t\tif didResize {\n\t\t\t\t// We shouldn't need to resize more than once\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdidResize = true\n\t\t\tsize = fh.Bytes + uint32(unsafe.Sizeof(fileHandle{}))\n\t\t\tcontinue\n\t\t}\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn FileHandle{fh}, int(mid), nil\n\t}\n}\n\n// OpenByHandleAt wraps the open_by_handle_at system call; it opens a\n// file via a handle as previously returned by NameToHandleAt.\nfunc OpenByHandleAt(mountFD int, handle FileHandle, flags int) (fd int, err error) {\n\treturn openByHandleAt(mountFD, handle.fileHandle, flags)\n}\n\n// Klogset wraps the sys_syslog system call; it sets console_loglevel to\n// the value specified by arg and passes a dummy pointer to bufp.\nfunc Klogset(typ int, arg int) (err error) {\n\tvar p unsafe.Pointer\n\t_, _, errno := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(p), uintptr(arg))\n\tif errno != 0 {\n\t\treturn errnoErr(errno)\n\t}\n\treturn nil\n}\n\n// RemoteIovec is Iovec with the pointer replaced with an integer.\n// It is used for ProcessVMReadv and ProcessVMWritev, where the pointer\n// refers to a location in a different process' address space, which\n// would confuse the Go garbage collector.\ntype RemoteIovec struct {\n\tBase uintptr\n\tLen  int\n}\n\n//sys\tProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_READV\n//sys\tProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) = SYS_PROCESS_VM_WRITEV\n\n//sys\tPidfdOpen(pid int, flags int) (fd int, err error) = SYS_PIDFD_OPEN\n//sys\tPidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) = SYS_PIDFD_GETFD\n//sys\tPidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) = SYS_PIDFD_SEND_SIGNAL\n\n//sys\tshmat(id int, addr uintptr, flag int) (ret uintptr, err error)\n//sys\tshmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error)\n//sys\tshmdt(addr uintptr) (err error)\n//sys\tshmget(key int, size int, flag int) (id int, err error)\n\n//sys\tgetitimer(which int, currValue *Itimerval) (err error)\n//sys\tsetitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error)\n\n// MakeItimerval creates an Itimerval from interval and value durations.\nfunc MakeItimerval(interval, value time.Duration) Itimerval {\n\treturn Itimerval{\n\t\tInterval: NsecToTimeval(interval.Nanoseconds()),\n\t\tValue:    NsecToTimeval(value.Nanoseconds()),\n\t}\n}\n\n// A value which may be passed to the which parameter for Getitimer and\n// Setitimer.\ntype ItimerWhich int\n\n// Possible which values for Getitimer and Setitimer.\nconst (\n\tItimerReal    ItimerWhich = ITIMER_REAL\n\tItimerVirtual ItimerWhich = ITIMER_VIRTUAL\n\tItimerProf    ItimerWhich = ITIMER_PROF\n)\n\n// Getitimer wraps getitimer(2) to return the current value of the timer\n// specified by which.\nfunc Getitimer(which ItimerWhich) (Itimerval, error) {\n\tvar it Itimerval\n\tif err := getitimer(int(which), &it); err != nil {\n\t\treturn Itimerval{}, err\n\t}\n\n\treturn it, nil\n}\n\n// Setitimer wraps setitimer(2) to arm or disarm the timer specified by which.\n// It returns the previous value of the timer.\n//\n// If the Itimerval argument is the zero value, the timer will be disarmed.\nfunc Setitimer(which ItimerWhich, it Itimerval) (Itimerval, error) {\n\tvar prev Itimerval\n\tif err := setitimer(int(which), &it, &prev); err != nil {\n\t\treturn Itimerval{}, err\n\t}\n\n\treturn prev, nil\n}\n\n//sysnb\trtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) = SYS_RT_SIGPROCMASK\n\nfunc PthreadSigmask(how int, set, oldset *Sigset_t) error {\n\tif oldset != nil {\n\t\t// Explicitly clear in case Sigset_t is larger than _C__NSIG.\n\t\t*oldset = Sigset_t{}\n\t}\n\treturn rtSigprocmask(how, set, oldset, _C__NSIG/8)\n}\n\n//sysnb\tgetresuid(ruid *_C_int, euid *_C_int, suid *_C_int)\n//sysnb\tgetresgid(rgid *_C_int, egid *_C_int, sgid *_C_int)\n\nfunc Getresuid() (ruid, euid, suid int) {\n\tvar r, e, s _C_int\n\tgetresuid(&r, &e, &s)\n\treturn int(r), int(e), int(s)\n}\n\nfunc Getresgid() (rgid, egid, sgid int) {\n\tvar r, e, s _C_int\n\tgetresgid(&r, &e, &s)\n\treturn int(r), int(e), int(s)\n}\n\n// Pselect is a wrapper around the Linux pselect6 system call.\n// This version does not modify the timeout argument.\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\t// Per https://man7.org/linux/man-pages/man2/select.2.html#NOTES,\n\t// The Linux pselect6() system call modifies its timeout argument.\n\t// [Not modifying the argument] is the behavior required by POSIX.1-2001.\n\tvar mutableTimeout *Timespec\n\tif timeout != nil {\n\t\tmutableTimeout = new(Timespec)\n\t\t*mutableTimeout = *timeout\n\t}\n\n\t// The final argument of the pselect6() system call is not a\n\t// sigset_t * pointer, but is instead a structure\n\tvar kernelMask *sigset_argpack\n\tif sigmask != nil {\n\t\twordBits := 32 << (^uintptr(0) >> 63) // see math.intSize\n\n\t\t// A sigset stores one bit per signal,\n\t\t// offset by 1 (because signal 0 does not exist).\n\t\t// So the number of words needed is ⌈__C_NSIG - 1 / wordBits⌉.\n\t\tsigsetWords := (_C__NSIG - 1 + wordBits - 1) / (wordBits)\n\n\t\tsigsetBytes := uintptr(sigsetWords * (wordBits / 8))\n\t\tkernelMask = &sigset_argpack{\n\t\t\tss:    sigmask,\n\t\t\tssLen: sigsetBytes,\n\t\t}\n\t}\n\n\treturn pselect6(nfd, r, w, e, mutableTimeout, kernelMask)\n}\n\n//sys\tschedSetattr(pid int, attr *SchedAttr, flags uint) (err error)\n//sys\tschedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error)\n\n// SchedSetAttr is a wrapper for sched_setattr(2) syscall.\n// https://man7.org/linux/man-pages/man2/sched_setattr.2.html\nfunc SchedSetAttr(pid int, attr *SchedAttr, flags uint) error {\n\tif attr == nil {\n\t\treturn EINVAL\n\t}\n\tattr.Size = SizeofSchedAttr\n\treturn schedSetattr(pid, attr, flags)\n}\n\n// SchedGetAttr is a wrapper for sched_getattr(2) syscall.\n// https://man7.org/linux/man-pages/man2/sched_getattr.2.html\nfunc SchedGetAttr(pid int, flags uint) (*SchedAttr, error) {\n\tattr := &SchedAttr{}\n\tif err := schedGetattr(pid, attr, SizeofSchedAttr, flags); err != nil {\n\t\treturn nil, err\n\t}\n\treturn attr, nil\n}\n\n//sys\tCachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error)\n//sys\tMseal(b []byte, flags uint) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\n// 64-bit file system and 32-bit uid calls\n// (386 default is 32-bit file system and 16-bit uid).\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64\n//sys\tFchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n//sysnb\tGetegid() (egid int) = SYS_GETEGID32\n//sysnb\tGeteuid() (euid int) = SYS_GETEUID32\n//sysnb\tGetgid() (gid int) = SYS_GETGID32\n//sysnb\tGetuid() (uid int) = SYS_GETUID32\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tsetfsgid(gid int) (prev int, err error) = SYS_SETFSGID32\n//sys\tsetfsuid(uid int) (prev int, err error) = SYS_SETFSUID32\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n//sys\tPause() (err error)\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb\tgetrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tnewoffset, errno := seek(fd, offset, whence)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\treturn newoffset, nil\n}\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\n// On x86 Linux, all the socket calls go through an extra indirection,\n// I think because the 5-register system call interface can't handle\n// the 6-argument calls like sendto and recvfrom. Instead the\n// arguments to the underlying system call are the number below\n// and a pointer to an array of uintptr. We hide the pointer in the\n// socketcall assembly to avoid allocation on every system call.\n\nconst (\n\t// see linux/net.h\n\t_SOCKET      = 1\n\t_BIND        = 2\n\t_CONNECT     = 3\n\t_LISTEN      = 4\n\t_ACCEPT      = 5\n\t_GETSOCKNAME = 6\n\t_GETPEERNAME = 7\n\t_SOCKETPAIR  = 8\n\t_SEND        = 9\n\t_RECV        = 10\n\t_SENDTO      = 11\n\t_RECVFROM    = 12\n\t_SHUTDOWN    = 13\n\t_SETSOCKOPT  = 14\n\t_GETSOCKOPT  = 15\n\t_SENDMSG     = 16\n\t_RECVMSG     = 17\n\t_ACCEPT4     = 18\n\t_RECVMMSG    = 19\n\t_SENDMMSG    = 20\n)\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tfd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {\n\t_, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tfd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\tn, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\t_, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tn, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tn, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Listen(s int, n int) (err error) {\n\t_, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Shutdown(s, how int) (err error) {\n\t_, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0)\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_alarm.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (386 || amd64 || mips || mipsle || mips64 || mipsle || ppc64 || ppc64le || ppc || s390x || sparc64)\n\npackage unix\n\n// SYS_ALARM is not defined on arm or riscv, but is available for other GOARCH\n// values.\n\n//sys\tAlarm(seconds uint) (remaining uint, err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && linux\n\npackage unix\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tMemfdSecret(flags int) (fd int, err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\t// Use fstatat, because Android's seccomp policy blocks stat.\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\terrno := gettimeofday(tv)\n\tif errno != 0 {\n\t\treturn errno\n\t}\n\treturn nil\n}\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terrno := gettimeofday(&tv)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Rip }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && linux && gc\n\npackage unix\n\nimport \"syscall\"\n\n//go:noescape\nfunc gettimeofday(tv *Timeval) (err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_arm.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tnewoffset, errno := seek(fd, offset, whence)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\treturn newoffset, nil\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tsocketpair(domain int, typ int, flags int, fd *[2]int32) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\n// 64-bit file system and 32-bit uid calls\n// (16-bit uid calls are not always supported in newer kernels)\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sysnb\tGetegid() (egid int) = SYS_GETEGID32\n//sysnb\tGeteuid() (euid int) = SYS_GETEUID32\n//sysnb\tGetgid() (gid int) = SYS_GETGID32\n//sysnb\tGetuid() (uid int) = SYS_GETUID32\n//sys\tLchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tPause() (err error)\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsetfsgid(gid int) (prev int, err error) = SYS_SETFSGID32\n//sys\tsetfsuid(uid int) (prev int, err error) = SYS_SETFSUID32\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb\tgetrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint32(length)\n}\n\n//sys\tarmSyncFileRange(fd int, flags int, off int64, n int64) (err error) = SYS_ARM_SYNC_FILE_RANGE\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) error {\n\t// The sync_file_range and arm_sync_file_range syscalls differ only in the\n\t// order of their arguments.\n\treturn armSyncFileRange(fd, flags, off, n)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_arm64.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && linux\n\npackage unix\n\nimport \"unsafe\"\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tgetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tListen(s int, n int) (err error)\n//sys\tMemfdSecret(flags int) (fd int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\treturn ENOSYS\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(dirfd, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\nfunc utimes(path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\n// Getrlimit prefers the prlimit64 system call. See issue 38604.\nfunc Getrlimit(resource int, rlim *Rlimit) error {\n\terr := Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\treturn getrlimit(resource, rlim)\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Pc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\nfunc Pause() error {\n\t_, err := ppoll(nil, 0, nil, nil)\n\treturn err\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n\nconst SYS_FSTATAT = SYS_NEWFSTATAT\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gc.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && gc\n\npackage unix\n\n// SyscallNoError may be used instead of Syscall for syscalls that don't fail.\nfunc SyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)\n\n// RawSyscallNoError may be used instead of RawSyscall for syscalls that don't\n// fail.\nfunc RawSyscallNoError(trap, a1, a2, a3 uintptr) (r1, r2 uintptr)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gc_386.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && gc && 386\n\npackage unix\n\nimport \"syscall\"\n\n// Underlying system call writes to newoffset via pointer.\n// Implemented in assembly to avoid allocation.\nfunc seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)\n\nfunc socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)\nfunc rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && gc && linux\n\npackage unix\n\nimport \"syscall\"\n\n// Underlying system call writes to newoffset via pointer.\n// Implemented in assembly to avoid allocation.\nfunc seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gccgo_386.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && gccgo && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc seek(fd int, offset int64, whence int) (int64, syscall.Errno) {\n\tvar newoffset int64\n\toffsetLow := uint32(offset & 0xffffffff)\n\toffsetHigh := uint32((offset >> 32) & 0xffffffff)\n\t_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)\n\treturn newoffset, err\n}\n\nfunc socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {\n\tfd, _, err := Syscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)\n\treturn int(fd), err\n}\n\nfunc rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (int, syscall.Errno) {\n\tfd, _, err := RawSyscall(SYS_SOCKETCALL, uintptr(call), uintptr(unsafe.Pointer(&a0)), 0)\n\treturn int(fd), err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_gccgo_arm.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && gccgo && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc seek(fd int, offset int64, whence int) (int64, syscall.Errno) {\n\tvar newoffset int64\n\toffsetLow := uint32(offset & 0xffffffff)\n\toffsetHigh := uint32((offset >> 32) & 0xffffffff)\n\t_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)\n\treturn newoffset, err\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_loong64.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build loong64 && linux\n\npackage unix\n\nimport \"unsafe\"\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tListen(s int, n int) (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc timespecFromStatxTimestamp(x StatxTimestamp) Timespec {\n\treturn Timespec{\n\t\tSec:  x.Sec,\n\t\tNsec: int64(x.Nsec),\n\t}\n}\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) error {\n\tvar r Statx_t\n\t// Do it the glibc way, add AT_NO_AUTOMOUNT.\n\tif err := Statx(fd, path, AT_NO_AUTOMOUNT|flags, STATX_BASIC_STATS, &r); err != nil {\n\t\treturn err\n\t}\n\n\tstat.Dev = Mkdev(r.Dev_major, r.Dev_minor)\n\tstat.Ino = r.Ino\n\tstat.Mode = uint32(r.Mode)\n\tstat.Nlink = r.Nlink\n\tstat.Uid = r.Uid\n\tstat.Gid = r.Gid\n\tstat.Rdev = Mkdev(r.Rdev_major, r.Rdev_minor)\n\t// hope we don't get to process files so large to overflow these size\n\t// fields...\n\tstat.Size = int64(r.Size)\n\tstat.Blksize = int32(r.Blksize)\n\tstat.Blocks = int64(r.Blocks)\n\tstat.Atim = timespecFromStatxTimestamp(r.Atime)\n\tstat.Mtim = timespecFromStatxTimestamp(r.Mtime)\n\tstat.Ctim = timespecFromStatxTimestamp(r.Ctime)\n\n\treturn nil\n}\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\treturn Fstatat(fd, \"\", stat, AT_EMPTY_PATH)\n}\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\treturn ENOSYS\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\treturn\n}\n\nfunc futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(dirfd, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\nfunc utimes(path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Era }\n\nfunc (r *PtraceRegs) SetPC(era uint64) { r.Era = era }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\nfunc Pause() error {\n\t_, err := ppoll(nil, 0, nil, nil)\n\treturn err\n}\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\treturn Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n\nconst SYS_FSTATAT = SYS_NEWFSTATAT\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go",
    "content": "// Copyright 2015 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (mips64 || mips64le)\n\npackage unix\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\treturn ENOSYS\n}\n\nfunc Iopl(level int) (err error) {\n\treturn ENOSYS\n}\n\ntype stat_t struct {\n\tDev        uint32\n\tPad0       [3]int32\n\tIno        uint64\n\tMode       uint32\n\tNlink      uint32\n\tUid        uint32\n\tGid        uint32\n\tRdev       uint32\n\tPad1       [3]uint32\n\tSize       int64\n\tAtime      uint32\n\tAtime_nsec uint32\n\tMtime      uint32\n\tMtime_nsec uint32\n\tCtime      uint32\n\tCtime_nsec uint32\n\tBlksize    uint32\n\tPad2       uint32\n\tBlocks     int64\n}\n\n//sys\tfstat(fd int, st *stat_t) (err error)\n//sys\tfstatat(dirfd int, path string, st *stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tlstat(path string, st *stat_t) (err error)\n//sys\tstat(path string, st *stat_t) (err error)\n\nfunc Fstat(fd int, s *Stat_t) (err error) {\n\tst := &stat_t{}\n\terr = fstat(fd, st)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc Fstatat(dirfd int, path string, s *Stat_t, flags int) (err error) {\n\tst := &stat_t{}\n\terr = fstatat(dirfd, path, st, flags)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc Lstat(path string, s *Stat_t) (err error) {\n\tst := &stat_t{}\n\terr = lstat(path, st)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc Stat(path string, s *Stat_t) (err error) {\n\tst := &stat_t{}\n\terr = stat(path, st)\n\tfillStat_t(s, st)\n\treturn\n}\n\nfunc fillStat_t(s *Stat_t, st *stat_t) {\n\ts.Dev = st.Dev\n\ts.Ino = st.Ino\n\ts.Mode = st.Mode\n\ts.Nlink = st.Nlink\n\ts.Uid = st.Uid\n\ts.Gid = st.Gid\n\ts.Rdev = st.Rdev\n\ts.Size = st.Size\n\ts.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)}\n\ts.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)}\n\ts.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)}\n\ts.Blksize = st.Blksize\n\ts.Blocks = st.Blocks\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Epc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (mips || mipsle)\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n\n//sys\tPause() (err error)\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = errnoErr(e)\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = errnoErr(e)\n\t}\n\treturn\n}\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\t_, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0)\n\tif e != 0 {\n\t\terr = errnoErr(e)\n\t}\n\treturn\n}\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb\tgetrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Epc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_ppc.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && ppc\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFtruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetuid() (uid int)\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error)\n//sys\tStat(path string, stat *Stat_t) (err error) = SYS_STAT64\n//sys\tTruncate(path string, length int64) (err error) = SYS_TRUNCATE64\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nfunc seek(fd int, offset int64, whence int) (int64, syscall.Errno) {\n\tvar newoffset int64\n\toffsetLow := uint32(offset & 0xffffffff)\n\toffsetHigh := uint32((offset >> 32) & 0xffffffff)\n\t_, _, err := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offsetHigh), uintptr(offsetLow), uintptr(unsafe.Pointer(&newoffset)), uintptr(whence), 0)\n\treturn newoffset, err\n}\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tnewoffset, errno := seek(fd, offset, whence)\n\tif errno != 0 {\n\t\treturn 0, errno\n\t}\n\treturn newoffset, nil\n}\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf)))\n\tif e != 0 {\n\t\terr = e\n\t}\n\treturn\n}\n\n//sys\tmmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error)\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tpage := uintptr(offset / 4096)\n\tif offset != int64(page)*4096 {\n\t\treturn 0, EINVAL\n\t}\n\treturn mmap2(addr, length, prot, flags, fd, page)\n}\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: int32(sec), Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: int32(sec), Usec: int32(usec)}\n}\n\ntype rlimit32 struct {\n\tCur uint32\n\tMax uint32\n}\n\n//sysnb\tgetrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT\n\nconst rlimInf32 = ^uint32(0)\nconst rlimInf64 = ^uint64(0)\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\terr = Prlimit(0, resource, nil, rlim)\n\tif err != ENOSYS {\n\t\treturn err\n\t}\n\n\trl := rlimit32{}\n\terr = getrlimit(resource, &rl)\n\tif err != nil {\n\t\treturn\n\t}\n\n\tif rl.Cur == rlimInf32 {\n\t\trlim.Cur = rlimInf64\n\t} else {\n\t\trlim.Cur = uint64(rl.Cur)\n\t}\n\n\tif rl.Max == rlimInf32 {\n\t\trlim.Max = rlimInf64\n\t} else {\n\t\trlim.Max = uint64(rl.Max)\n\t}\n\treturn\n}\n\nfunc (r *PtraceRegs) PC() uint32 { return r.Nip }\n\nfunc (r *PtraceRegs) SetPC(pc uint32) { r.Nip = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint32(length)\n}\n\n//sys\tsyncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) error {\n\t// The sync_file_range and sync_file_range2 syscalls differ only in the\n\t// order of their arguments.\n\treturn syncFileRange2(fd, flags, off, n)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (ppc64 || ppc64le)\n\npackage unix\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT\n//sysnb\tGetuid() (uid int)\n//sys\tIoperm(from int, num int, on int) (err error)\n//sys\tIopl(level int) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tTime(t *Time_t) (tt Time_t, err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Nip }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\n//sys\tsyncFileRange2(fd int, flags int, off int64, n int64) (err error) = SYS_SYNC_FILE_RANGE2\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) error {\n\t// The sync_file_range and sync_file_range2 syscalls differ only in the\n\t// order of their arguments.\n\treturn syncFileRange2(fd, flags, off, n)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build riscv64 && linux\n\npackage unix\n\nimport \"unsafe\"\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tListen(s int, n int) (err error)\n//sys\tMemfdSecret(flags int) (fd int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tvar ts *Timespec\n\tif timeout != nil {\n\t\tts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000}\n\t}\n\treturn pselect6(nfd, r, w, e, ts, nil)\n}\n\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, 0)\n}\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\treturn Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW)\n}\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\treturn Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW)\n}\n\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\treturn ENOSYS\n}\n\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc futimesat(dirfd int, path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(dirfd, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc Time(t *Time_t) (Time_t, error) {\n\tvar tv Timeval\n\terr := Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc Utime(path string, buf *Utimbuf) error {\n\ttv := []Timeval{\n\t\t{Sec: buf.Actime},\n\t\t{Sec: buf.Modtime},\n\t}\n\treturn Utimes(path, tv)\n}\n\nfunc utimes(path string, tv *[2]Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Pc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\nfunc Pause() error {\n\t_, err := ppoll(nil, 0, nil, nil)\n\treturn err\n}\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\treturn Renameat2(olddirfd, oldpath, newdirfd, newpath, 0)\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n\n//sys\triscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error)\n\nfunc RISCVHWProbe(pairs []RISCVHWProbePairs, set *CPUSet, flags uint) (err error) {\n\tvar setSize uintptr\n\n\tif set != nil {\n\t\tsetSize = uintptr(unsafe.Sizeof(*set))\n\t}\n\treturn riscvHWProbe(pairs, setSize, set, flags)\n}\n\nconst SYS_FSTATAT = SYS_NEWFSTATAT\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_s390x.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build s390x && linux\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_NEWFSTATAT\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\treturn ENOSYS\n}\n\nfunc Iopl(level int) (err error) {\n\treturn ENOSYS\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Psw.Addr }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n\n// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct.\n// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in <asm/unistd.h>.\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tmmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)}\n\tr0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// On s390x Linux, all the socket calls go through an extra indirection.\n// The arguments to the underlying system call (SYS_SOCKETCALL) are the\n// number below and a pointer to an array of uintptr.\nconst (\n\t// see linux/net.h\n\tnetSocket      = 1\n\tnetBind        = 2\n\tnetConnect     = 3\n\tnetListen      = 4\n\tnetAccept      = 5\n\tnetGetSockName = 6\n\tnetGetPeerName = 7\n\tnetSocketPair  = 8\n\tnetSend        = 9\n\tnetRecv        = 10\n\tnetSendTo      = 11\n\tnetRecvFrom    = 12\n\tnetShutdown    = 13\n\tnetSetSockOpt  = 14\n\tnetGetSockOpt  = 15\n\tnetSendMsg     = 16\n\tnetRecvMsg     = 17\n\tnetAccept4     = 18\n\tnetRecvMMsg    = 19\n\tnetSendMMsg    = 20\n)\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) {\n\targs := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)}\n\tfd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(fd), nil\n}\n\nfunc getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}\n\t_, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))}\n\t_, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc socketpair(domain int, typ int, flags int, fd *[2]int32) error {\n\targs := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))}\n\t_, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) error {\n\targs := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc socket(domain int, typ int, proto int) (int, error) {\n\targs := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)}\n\tfd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(fd), nil\n}\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error {\n\targs := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error {\n\targs := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\targs := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))}\n\tn, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error {\n\tvar base uintptr\n\tif len(p) > 0 {\n\t\tbase = uintptr(unsafe.Pointer(&p[0]))\n\t}\n\targs := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (int, error) {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)}\n\tn, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (int, error) {\n\targs := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)}\n\tn, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn 0, err\n\t}\n\treturn int(n), nil\n}\n\nfunc Listen(s int, n int) error {\n\targs := [2]uintptr{uintptr(s), uintptr(n)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc Shutdown(s, how int) error {\n\targs := [2]uintptr{uintptr(s), uintptr(how)}\n\t_, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0)\n\tif err != 0 {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n//sys\tkexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error)\n\nfunc KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error {\n\tcmdlineLen := len(cmdline)\n\tif cmdlineLen > 0 {\n\t\t// Account for the additional NULL byte added by\n\t\t// BytePtrFromString in kexecFileLoad. The kexec_file_load\n\t\t// syscall expects a NULL-terminated string.\n\t\tcmdlineLen++\n\t}\n\treturn kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build sparc64 && linux\n\npackage unix\n\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (euid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tListen(s int, n int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error)\n//sys\tsetfsgid(gid int) (prev int, err error)\n//sys\tsetfsuid(uid int) (prev int, err error)\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tSplice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, buf *Statfs_t) (err error)\n//sys\tSyncFileRange(fd int, off int64, n int64, flags int) (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error)\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error)\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error)\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error)\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error)\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\treturn ENOSYS\n}\n\nfunc Iopl(level int) (err error) {\n\treturn ENOSYS\n}\n\n//sys\tfutimesat(dirfd int, path string, times *[2]Timeval) (err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc (r *PtraceRegs) PC() uint64 { return r.Tpc }\n\nfunc (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = pc }\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint64(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint64(length)\n}\n\nfunc (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) {\n\trsa.Service_name_len = uint64(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// NetBSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [12]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) {\n\tvar olen uintptr\n\n\t// Get a list of all sysctl nodes below the given MIB by performing\n\t// a sysctl for the given MIB with CTL_QUERY appended.\n\tmib = append(mib, CTL_QUERY)\n\tqnode := Sysctlnode{Flags: SYSCTL_VERS_1}\n\tqp := (*byte)(unsafe.Pointer(&qnode))\n\tsz := unsafe.Sizeof(qnode)\n\tif err = sysctl(mib, nil, &olen, qp, sz); err != nil {\n\t\treturn nil, err\n\t}\n\n\t// Now that we know the size, get the actual nodes.\n\tnodes = make([]Sysctlnode, olen/sz)\n\tnp := (*byte)(unsafe.Pointer(&nodes[0]))\n\tif err = sysctl(mib, np, &olen, qp, sz); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn nodes, nil\n}\n\nfunc nametomib(name string) (mib []_C_int, err error) {\n\t// Split name into components.\n\tvar parts []string\n\tlast := 0\n\tfor i := 0; i < len(name); i++ {\n\t\tif name[i] == '.' {\n\t\t\tparts = append(parts, name[last:i])\n\t\t\tlast = i + 1\n\t\t}\n\t}\n\tparts = append(parts, name[last:])\n\n\t// Discover the nodes and construct the MIB OID.\n\tfor partno, part := range parts {\n\t\tnodes, err := sysctlNodes(mib)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfor _, node := range nodes {\n\t\t\tn := make([]byte, 0)\n\t\t\tfor i := range node.Name {\n\t\t\t\tif node.Name[i] != 0 {\n\t\t\t\t\tn = append(n, byte(node.Name[i]))\n\t\t\t\t}\n\t\t\t}\n\t\t\tif string(n) == part {\n\t\t\t\tmib = append(mib, _C_int(node.Num))\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif len(mib) != partno+1 {\n\t\t\treturn nil, EINVAL\n\t\t}\n\t}\n\n\treturn mib, nil\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\nfunc SysctlUvmexp(name string) (*Uvmexp, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofUvmexp)\n\tvar u Uvmexp\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\treturn &u, nil\n}\n\nfunc Pipe(p []int) (err error) {\n\treturn Pipe2(p, 0)\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\n//sys\tGetdents(fd int, buf []byte) (n int, err error)\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tn, err = Getdents(fd, buf)\n\tif err != nil || basep == nil {\n\t\treturn\n\t}\n\n\tvar off int64\n\toff, err = Seek(fd, 0, 1 /* SEEK_CUR */)\n\tif err != nil {\n\t\t*basep = ^uintptr(0)\n\t\treturn\n\t}\n\t*basep = uintptr(off)\n\tif unsafe.Sizeof(*basep) == 8 {\n\t\treturn\n\t}\n\tif off>>32 != 0 {\n\t\t// We can't stuff the offset back into a uintptr, so any\n\t\t// future calls would be suspect. Generate an error.\n\t\t// EIO is allowed by getdirentries.\n\t\terr = EIO\n\t}\n\treturn\n}\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL\n\nfunc IoctlGetPtmget(fd int, req uint) (*Ptmget, error) {\n\tvar value Ptmget\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\nfunc Fstatvfs(fd int, buf *Statvfs_t) (err error) {\n\treturn Fstatvfs1(fd, buf, ST_WAIT)\n}\n\nfunc Statvfs(path string, buf *Statvfs_t) (err error) {\n\treturn Statvfs1(path, buf, ST_WAIT)\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tDup3(from int, to int, flags int) (err error)\n//sys\tExit(code int)\n//sys\tExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)\n//sys\tExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)\n//sys\tExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) = SYS_FSTATVFS1\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMkfifoat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatvfs1(path string, buf *Statvfs_t, flags int) (err error) = SYS_STATVFS1\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n\nconst (\n\tmremapFixed     = MAP_FIXED\n\tmremapDontunmap = 0\n\tmremapMaymove   = 0\n)\n\n//sys\tmremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) = SYS_MREMAP\n\nfunc mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (uintptr, error) {\n\treturn mremapNetBSD(oldaddr, oldlength, newaddr, newlength, flags)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go",
    "content": "// Copyright 2013 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_netbsd_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && netbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = uint32(mode)\n\tk.Flags = uint32(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd.go",
    "content": "// Copyright 2009,2010 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// OpenBSD system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_bsd.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"sort\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tLen    uint8\n\tFamily uint8\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [24]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc anyToSockaddrGOOS(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\nfunc nametomib(name string) (mib []_C_int, err error) {\n\ti := sort.Search(len(sysctlMib), func(i int) bool {\n\t\treturn sysctlMib[i].ctlname >= name\n\t})\n\tif i < len(sysctlMib) && sysctlMib[i].ctlname == name {\n\t\treturn sysctlMib[i].ctloid, nil\n\t}\n\treturn nil, EINVAL\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen))\n}\n\nfunc SysctlUvmexp(name string) (*Uvmexp, error) {\n\tmib, err := sysctlmib(name)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tn := uintptr(SizeofUvmexp)\n\tvar u Uvmexp\n\tif err := sysctl(mib, (*byte)(unsafe.Pointer(&u)), &n, nil, 0); err != nil {\n\t\treturn nil, err\n\t}\n\tif n != SizeofUvmexp {\n\t\treturn nil, EIO\n\t}\n\treturn &u, nil\n}\n\nfunc Pipe(p []int) (err error) {\n\treturn Pipe2(p, 0)\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\n//sys\tGetdents(fd int, buf []byte) (n int, err error)\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tn, err = Getdents(fd, buf)\n\tif err != nil || basep == nil {\n\t\treturn\n\t}\n\n\tvar off int64\n\toff, err = Seek(fd, 0, 1 /* SEEK_CUR */)\n\tif err != nil {\n\t\t*basep = ^uintptr(0)\n\t\treturn\n\t}\n\t*basep = uintptr(off)\n\tif unsafe.Sizeof(*basep) == 8 {\n\t\treturn\n\t}\n\tif off>>32 != 0 {\n\t\t// We can't stuff the offset back into a uintptr, so any\n\t\t// future calls would be suspect. Generate an error.\n\t\t// EIO was allowed by getdirentries.\n\t\terr = EIO\n\t}\n\treturn\n}\n\n//sys\tGetcwd(buf []byte) (n int, err error) = SYS___GETCWD\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n// TODO\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\treturn -1, ENOSYS\n}\n\nfunc Getfsstat(buf []Statfs_t, flags int) (n int, err error) {\n\tvar bufptr *Statfs_t\n\tvar bufsize uintptr\n\tif len(buf) > 0 {\n\t\tbufptr = &buf[0]\n\t\tbufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf))\n\t}\n\treturn getfsstat(bufptr, bufsize, flags)\n}\n\n//sysnb\tgetresuid(ruid *_C_int, euid *_C_int, suid *_C_int)\n//sysnb\tgetresgid(rgid *_C_int, egid *_C_int, sgid *_C_int)\n\nfunc Getresuid() (ruid, euid, suid int) {\n\tvar r, e, s _C_int\n\tgetresuid(&r, &e, &s)\n\treturn int(r), int(e), int(s)\n}\n\nfunc Getresgid() (rgid, egid, sgid int) {\n\tvar r, e, s _C_int\n\tgetresgid(&r, &e, &s)\n\treturn int(r), int(e), int(s)\n}\n\n//sys\tioctl(fd int, req uint, arg uintptr) (err error)\n//sys\tioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) = SYS_IOCTL\n\n//sys\tsysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL\n\n//sys\tfcntl(fd int, cmd int, arg int) (n int, err error)\n//sys\tfcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) = SYS_FCNTL\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\treturn fcntl(int(fd), cmd, arg)\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(lk))\n\treturn err\n}\n\n//sys\tppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error)\n\nfunc Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn ppoll(nil, 0, timeout, sigmask)\n\t}\n\treturn ppoll(&fds[0], len(fds), timeout, sigmask)\n}\n\nfunc Uname(uname *Utsname) error {\n\tmib := []_C_int{CTL_KERN, KERN_OSTYPE}\n\tn := unsafe.Sizeof(uname.Sysname)\n\tif err := sysctl(mib, &uname.Sysname[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_HOSTNAME}\n\tn = unsafe.Sizeof(uname.Nodename)\n\tif err := sysctl(mib, &uname.Nodename[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_OSRELEASE}\n\tn = unsafe.Sizeof(uname.Release)\n\tif err := sysctl(mib, &uname.Release[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\tmib = []_C_int{CTL_KERN, KERN_VERSION}\n\tn = unsafe.Sizeof(uname.Version)\n\tif err := sysctl(mib, &uname.Version[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\t// The version might have newlines or tabs in it, convert them to\n\t// spaces.\n\tfor i, b := range uname.Version {\n\t\tif b == '\\n' || b == '\\t' {\n\t\t\tif i == len(uname.Version)-1 {\n\t\t\t\tuname.Version[i] = 0\n\t\t\t} else {\n\t\t\t\tuname.Version[i] = ' '\n\t\t\t}\n\t\t}\n\t}\n\n\tmib = []_C_int{CTL_HW, HW_MACHINE}\n\tn = unsafe.Sizeof(uname.Machine)\n\tif err := sysctl(mib, &uname.Machine[0], &n, nil, 0); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChflags(path string, flags int) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(from int, to int) (err error)\n//sys\tDup3(from int, to int, flags int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchflags(fd int, flags int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatfs(fd int, stat *Statfs_t) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sysnb\tGetegid() (egid int)\n//sysnb\tGeteuid() (uid int)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgrp int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrtable() (rtable int, err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tIssetugid() (tainted bool)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tKqueue() (fd int, err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tLinkat(pathfd int, path string, linkfd int, link string, flags int) (err error)\n//sys\tListen(s int, backlog int) (err error)\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMkfifoat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tMount(fsType string, dir string, flags int, data unsafe.Pointer) (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, mode int, perm uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tReadlinkat(dirfd int, path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(fromfd int, from string, tofd int, to string) (err error)\n//sys\tRevoke(path string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSetlogin(name string) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetresgid(rgid int, egid int, sgid int) (err error)\n//sysnb\tSetresuid(ruid int, euid int, suid int) (err error)\n//sysnb\tSetrtable(rtable int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSettimeofday(tp *Timeval) (err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatfs(path string, stat *Statfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSymlinkat(oldpath string, newdirfd int, newpath string) (err error)\n//sys\tSync() (err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tUmask(newmask int) (oldmask int)\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUnmount(path string, flags int) (err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tgetfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error)\n//sys\tutimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error)\n//sys\tpledge(promises *byte, execpromises *byte) (err error)\n//sys\tunveil(path *byte, flags *byte) (err error)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_386.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build 386 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/386 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: int32(nsec)}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: int32(usec)}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint32(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/arm the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_arm64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build arm64 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/amd64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_libc.go",
    "content": "// Copyright 2022 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build openbsd\n\npackage unix\n\nimport _ \"unsafe\"\n\n// Implemented in the runtime package (runtime/sys_openbsd3.go)\nfunc syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\n\n//go:linkname syscall_syscall syscall.syscall\n//go:linkname syscall_syscall6 syscall.syscall6\n//go:linkname syscall_syscall10 syscall.syscall10\n//go:linkname syscall_rawSyscall syscall.rawSyscall\n//go:linkname syscall_rawSyscall6 syscall.rawSyscall6\n\nfunc syscall_syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) {\n\treturn syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, 0)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of OpenBSD the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_ppc64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build ppc64 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/ppc64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_openbsd_riscv64.go",
    "content": "// Copyright 2019 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build riscv64 && openbsd\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc SetKevent(k *Kevent_t, fd, mode, flags int) {\n\tk.Ident = uint64(fd)\n\tk.Filter = int16(mode)\n\tk.Flags = uint16(flags)\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = uint32(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = uint32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n\n// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions\n// of openbsd/riscv64 the syscall is called sysctl instead of __sysctl.\nconst SYS___SYSCTL = SYS_SYSCTL\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_solaris.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n// Solaris system calls.\n// This file is compiled as ordinary Go code,\n// but it is also input to mksyscall,\n// which parses the //sys lines and generates system call stubs.\n// Note that sometimes we use a lowercase //sys name and wrap\n// it in our own nicer implementation, either here or in\n// syscall_solaris.go or syscall_unix.go.\n\npackage unix\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"runtime\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// Implemented in runtime/syscall_solaris.go.\ntype syscallFunc uintptr\n\nfunc rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\n\n// SockaddrDatalink implements the Sockaddr interface for AF_LINK type sockets.\ntype SockaddrDatalink struct {\n\tFamily uint16\n\tIndex  uint16\n\tType   uint8\n\tNlen   uint8\n\tAlen   uint8\n\tSlen   uint8\n\tData   [244]int8\n\traw    RawSockaddrDatalink\n}\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\n}\n\n//sysnb\tpipe(p *[2]_C_int) (n int, err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\tn, err := pipe(&pp)\n\tif n != 0 {\n\t\treturn err\n\t}\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn nil\n}\n\n//sysnb\tpipe2(p *[2]_C_int, flags int) (err error)\n\nfunc Pipe2(p []int, flags int) error {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr := pipe2(&pp, flags)\n\tif err == nil {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn err\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tsa.raw.Addr = sa.Addr\n\treturn unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\t// length is family (uint16), name, NUL.\n\tsl := _Socklen(2)\n\tif n > 0 {\n\t\tsl += _Socklen(n) + 1\n\t}\n\tif sa.raw.Path[0] == '@' || (sa.raw.Path[0] == 0 && sl > 3) {\n\t\t// Check sl > 3 so we don't change unnamed socket behavior.\n\t\tsa.raw.Path[0] = 0\n\t\t// Don't count trailing NUL for abstract address.\n\t\tsl--\n\t}\n\n\treturn unsafe.Pointer(&sa.raw), sl, nil\n}\n\n//sys\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn ByteSliceToString(buf[:vallen]), nil\n}\n\nconst ImplementsGetwd = true\n\n//sys\tGetcwd(buf []byte) (n int, err error)\n\nfunc Getwd() (wd string, err error) {\n\tvar buf [PathMax]byte\n\t// Getcwd will return an error if it failed for any reason.\n\t_, err = Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tn := clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[:n]), nil\n}\n\n/*\n * Wrapped\n */\n\n//sysnb\tgetgroups(ngid int, gid *_Gid_t) (n int, err error)\n//sysnb\tsetgroups(ngid int, gid *_Gid_t) (err error)\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\t// Check for error and sanity check group count. Newer versions of\n\t// Solaris allow up to 1024 (NGROUPS_MAX).\n\tif n < 0 || n > 1024 {\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\treturn nil, EINVAL\n\t} else if n == 0 {\n\t\treturn nil, nil\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif n == -1 {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\n// ReadDirent reads directory entries from fd and writes them into buf.\nfunc ReadDirent(fd int, buf []byte) (n int, err error) {\n\t// Final argument is (basep *uintptr) and the syscall doesn't take nil.\n\t// TODO(rsc): Can we use a single global basep for all calls?\n\treturn Getdents(fd, buf, new(uintptr))\n}\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits.\n\ntype WaitStatus uint32\n\nconst (\n\tmask  = 0x7F\n\tcore  = 0x80\n\tshift = 8\n\n\texited  = 0\n\tstopped = 0x7F\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif w&mask != exited {\n\t\treturn -1\n\t}\n\treturn int(w >> shift)\n}\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 }\n\nfunc (w WaitStatus) Signal() syscall.Signal {\n\tsig := syscall.Signal(w & mask)\n\tif sig == stopped || sig == 0 {\n\t\treturn -1\n\t}\n\treturn sig\n}\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP }\n\nfunc (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP }\n\nfunc (w WaitStatus) StopSignal() syscall.Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn syscall.Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\twait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error)\n\nfunc Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) {\n\tvar status _C_int\n\trpid, err := wait4(int32(pid), &status, options, rusage)\n\twpid := int(rpid)\n\tif wpid == -1 {\n\t\treturn wpid, err\n\t}\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn wpid, nil\n}\n\n//sys\tgethostname(buf []byte) (n int, err error)\n\nfunc Gethostname() (name string, err error) {\n\tvar buf [MaxHostNameLen]byte\n\tn, err := gethostname(buf[:])\n\tif n != 0 {\n\t\treturn \"\", err\n\t}\n\tn = clen(buf[:])\n\tif n < 1 {\n\t\treturn \"\", EFAULT\n\t}\n\treturn string(buf[:n]), nil\n}\n\n//sys\tutimes(path string, times *[2]Timeval) (err error)\n\nfunc Utimes(path string, tv []Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(fd int, path string, times *[2]Timespec, flag int) (err error)\n\nfunc UtimesNano(path string, ts []Timespec) error {\n\tif ts == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\n//sys\tfcntl(fd int, cmd int, arg int) (val int, err error)\n\n// FcntlInt performs a fcntl syscall on fd with the provided command and argument.\nfunc FcntlInt(fd uintptr, cmd, arg int) (int, error) {\n\tvalptr, _, errno := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)\n\tvar err error\n\tif errno != 0 {\n\t\terr = errno\n\t}\n\treturn int(valptr), err\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0)\n\tif e1 != 0 {\n\t\treturn e1\n\t}\n\treturn nil\n}\n\n//sys\tfutimesat(fildes int, path *byte, times *[2]Timeval) (err error)\n\nfunc Futimesat(dirfd int, path string, tv []Timeval) error {\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif tv == nil {\n\t\treturn futimesat(dirfd, pathp, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n// Solaris doesn't have an futimes function because it allows NULL to be\n// specified as the path for futimesat. However, Go doesn't like\n// NULL-style string interfaces, so this simple wrapper is provided.\nfunc Futimes(fd int, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn futimesat(fd, nil, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\nfunc anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\tswitch rsa.Addr.Family {\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\t\t// Assume path ends at NUL.\n\t\t// This is not technically the Solaris semantics for\n\t\t// abstract Unix domain sockets -- they are supposed\n\t\t// to be uninterpreted fixed-size binary blobs -- but\n\t\t// everyone uses this convention.\n\t\tn := 0\n\t\tfor n < len(pp.Path) && pp.Path[n] != 0 {\n\t\t\tn++\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tsa.Addr = pp.Addr\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif nfd == -1 {\n\t\treturn\n\t}\n\tsa, err = anyToSockaddr(fd, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg\n\nfunc recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(rsa))\n\tmsg.Namelen = uint32(SizeofSockaddrAny)\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif emptyIovecs(iov) {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Accrightslen = int32(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = recvmsg(fd, &msg, flags); n == -1 {\n\t\treturn\n\t}\n\toobn = int(msg.Accrightslen)\n\treturn\n}\n\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg\n\nfunc sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = uint32(salen)\n\tvar dummy byte\n\tvar empty bool\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tempty = emptyIovecs(iov)\n\t\tif empty {\n\t\t\tvar iova [1]Iovec\n\t\t\tiova[0].Base = &dummy\n\t\t\tiova[0].SetLen(1)\n\t\t\tiov = iova[:]\n\t\t}\n\t\tmsg.Accrightslen = int32(len(oob))\n\t}\n\tif len(iov) > 0 {\n\t\tmsg.Iov = &iov[0]\n\t\tmsg.SetIovlen(len(iov))\n\t}\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && empty {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\n//sys\tacct(path *byte) (err error)\n\nfunc Acct(path string) (err error) {\n\tif len(path) == 0 {\n\t\t// Assume caller wants to disable accounting.\n\t\treturn acct(nil)\n\t}\n\n\tpathp, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn acct(pathp)\n}\n\n//sys\t__makedev(version int, major uint, minor uint) (val uint64)\n\nfunc Mkdev(major, minor uint32) uint64 {\n\treturn __makedev(NEWDEV, uint(major), uint(minor))\n}\n\n//sys\t__major(version int, dev uint64) (val uint)\n\nfunc Major(dev uint64) uint32 {\n\treturn uint32(__major(NEWDEV, dev))\n}\n\n//sys\t__minor(version int, dev uint64) (val uint)\n\nfunc Minor(dev uint64) uint32 {\n\treturn uint32(__minor(NEWDEV, dev))\n}\n\n/*\n * Expose the ioctl function\n */\n\n//sys\tioctlRet(fd int, req int, arg uintptr) (ret int, err error) = libc.ioctl\n//sys\tioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) = libc.ioctl\n\nfunc ioctl(fd int, req int, arg uintptr) (err error) {\n\t_, err = ioctlRet(fd, req, arg)\n\treturn err\n}\n\nfunc ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {\n\t_, err = ioctlPtrRet(fd, req, arg)\n\treturn err\n}\n\nfunc IoctlSetTermio(fd int, req int, value *Termio) error {\n\treturn ioctlPtr(fd, req, unsafe.Pointer(value))\n}\n\nfunc IoctlGetTermio(fd int, req int) (*Termio, error) {\n\tvar value Termio\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&value))\n\treturn &value, err\n}\n\n//sys\tpoll(fds *PollFd, nfds int, timeout int) (n int, err error)\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tif len(fds) == 0 {\n\t\treturn poll(nil, 0, timeout)\n\t}\n\treturn poll(&fds[0], len(fds), timeout)\n}\n\nfunc Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\treturn sendfile(outfd, infd, offset, count)\n}\n\n/*\n * Exposed directly\n */\n//sys\tAccess(path string, mode uint32) (err error)\n//sys\tAdjtime(delta *Timeval, olddelta *Timeval) (err error)\n//sys\tChdir(path string) (err error)\n//sys\tChmod(path string, mode uint32) (err error)\n//sys\tChown(path string, uid int, gid int) (err error)\n//sys\tChroot(path string) (err error)\n//sys\tClockGettime(clockid int32, time *Timespec) (err error)\n//sys\tClose(fd int) (err error)\n//sys\tCreat(path string, mode uint32) (fd int, err error)\n//sys\tDup(fd int) (nfd int, err error)\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error)\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(dirfd int, path string, uid int, gid int, flags int) (err error)\n//sys\tFdatasync(fd int) (err error)\n//sys\tFlock(fd int, how int) (err error)\n//sys\tFpathconf(fd int, name int) (val int, err error)\n//sys\tFstat(fd int, stat *Stat_t) (err error)\n//sys\tFstatat(fd int, path string, stat *Stat_t, flags int) (err error)\n//sys\tFstatvfs(fd int, vfsstat *Statvfs_t) (err error)\n//sys\tGetdents(fd int, buf []byte, basep *uintptr) (n int, err error)\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error)\n//sysnb\tGetpgrp() (pgid int, err error)\n//sys\tGeteuid() (euid int)\n//sys\tGetegid() (egid int)\n//sys\tGetppid() (ppid int)\n//sys\tGetpriority(which int, who int) (n int, err error)\n//sysnb\tGetrlimit(which int, lim *Rlimit) (err error)\n//sysnb\tGetrusage(who int, rusage *Rusage) (err error)\n//sysnb\tGetsid(pid int) (sid int, err error)\n//sysnb\tGettimeofday(tv *Timeval) (err error)\n//sysnb\tGetuid() (uid int)\n//sys\tKill(pid int, signum syscall.Signal) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error)\n//sys\tLink(path string, link string) (err error)\n//sys\tListen(s int, backlog int) (err error) = libsocket.__xnet_llisten\n//sys\tLstat(path string, stat *Stat_t) (err error)\n//sys\tMadvise(b []byte, advice int) (err error)\n//sys\tMkdir(path string, mode uint32) (err error)\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error)\n//sys\tMkfifo(path string, mode uint32) (err error)\n//sys\tMkfifoat(dirfd int, path string, mode uint32) (err error)\n//sys\tMknod(path string, mode uint32, dev int) (err error)\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error)\n//sys\tMlock(b []byte) (err error)\n//sys\tMlockall(flags int) (err error)\n//sys\tMprotect(b []byte, prot int) (err error)\n//sys\tMsync(b []byte, flags int) (err error)\n//sys\tMunlock(b []byte) (err error)\n//sys\tMunlockall() (err error)\n//sys\tNanosleep(time *Timespec, leftover *Timespec) (err error)\n//sys\tOpen(path string, mode int, perm uint32) (fd int, err error)\n//sys\tOpenat(dirfd int, path string, flags int, mode uint32) (fd int, err error)\n//sys\tPathconf(path string, name int) (val int, err error)\n//sys\tPause() (err error)\n//sys\tpread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tpwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\tReadlink(path string, buf []byte) (n int, err error)\n//sys\tRename(from string, to string) (err error)\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)\n//sys\tRmdir(path string) (err error)\n//sys\tSeek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek\n//sys\tSelect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error)\n//sysnb\tSetegid(egid int) (err error)\n//sysnb\tSeteuid(euid int) (err error)\n//sysnb\tSetgid(gid int) (err error)\n//sys\tSethostname(p []byte) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error)\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error)\n//sysnb\tSetreuid(ruid int, euid int) (err error)\n//sysnb\tSetsid() (pid int, err error)\n//sysnb\tSetuid(uid int) (err error)\n//sys\tShutdown(s int, how int) (err error) = libsocket.shutdown\n//sys\tStat(path string, stat *Stat_t) (err error)\n//sys\tStatvfs(path string, vfsstat *Statvfs_t) (err error)\n//sys\tSymlink(path string, link string) (err error)\n//sys\tSync() (err error)\n//sys\tSysconf(which int) (n int64, err error)\n//sysnb\tTimes(tms *Tms) (ticks uintptr, err error)\n//sys\tTruncate(path string, length int64) (err error)\n//sys\tFsync(fd int) (err error)\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tUmask(mask int) (oldmask int)\n//sysnb\tUname(buf *Utsname) (err error)\n//sys\tUnmount(target string, flags int) (err error) = libc.umount\n//sys\tUnlink(path string) (err error)\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error)\n//sys\tUstat(dev int, ubuf *Ustat_t) (err error)\n//sys\tUtime(path string, buf *Utimbuf) (err error)\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_bind\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect\n//sys\tmmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)\n//sys\tmunmap(addr uintptr, length uintptr) (err error)\n//sys\tsendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = libsendfile.sendfile\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto\n//sys\tsocket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair\n//sys\twrite(fd int, p []byte) (n int, err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.__xnet_getsockopt\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom\n\n// Event Ports\n\ntype fileObjCookie struct {\n\tfobj   *fileObj\n\tcookie interface{}\n}\n\n// EventPort provides a safe abstraction on top of Solaris/illumos Event Ports.\ntype EventPort struct {\n\tport  int\n\tmu    sync.Mutex\n\tfds   map[uintptr]*fileObjCookie\n\tpaths map[string]*fileObjCookie\n\t// The user cookie presents an interesting challenge from a memory management perspective.\n\t// There are two paths by which we can discover that it is no longer in use:\n\t// 1. The user calls port_dissociate before any events fire\n\t// 2. An event fires and we return it to the user\n\t// The tricky situation is if the event has fired in the kernel but\n\t// the user hasn't requested/received it yet.\n\t// If the user wants to port_dissociate before the event has been processed,\n\t// we should handle things gracefully. To do so, we need to keep an extra\n\t// reference to the cookie around until the event is processed\n\t// thus the otherwise seemingly extraneous \"cookies\" map\n\t// The key of this map is a pointer to the corresponding fCookie\n\tcookies map[*fileObjCookie]struct{}\n}\n\n// PortEvent is an abstraction of the port_event C struct.\n// Compare Source against PORT_SOURCE_FILE or PORT_SOURCE_FD\n// to see if Path or Fd was the event source. The other will be\n// uninitialized.\ntype PortEvent struct {\n\tCookie interface{}\n\tEvents int32\n\tFd     uintptr\n\tPath   string\n\tSource uint16\n\tfobj   *fileObj\n}\n\n// NewEventPort creates a new EventPort including the\n// underlying call to port_create(3c).\nfunc NewEventPort() (*EventPort, error) {\n\tport, err := port_create()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\te := &EventPort{\n\t\tport:    port,\n\t\tfds:     make(map[uintptr]*fileObjCookie),\n\t\tpaths:   make(map[string]*fileObjCookie),\n\t\tcookies: make(map[*fileObjCookie]struct{}),\n\t}\n\treturn e, nil\n}\n\n//sys\tport_create() (n int, err error)\n//sys\tport_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error)\n//sys\tport_dissociate(port int, source int, object uintptr) (n int, err error)\n//sys\tport_get(port int, pe *portEvent, timeout *Timespec) (n int, err error)\n//sys\tport_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error)\n\n// Close closes the event port.\nfunc (e *EventPort) Close() error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\terr := Close(e.port)\n\tif err != nil {\n\t\treturn err\n\t}\n\te.fds = nil\n\te.paths = nil\n\te.cookies = nil\n\treturn nil\n}\n\n// PathIsWatched checks to see if path is associated with this EventPort.\nfunc (e *EventPort) PathIsWatched(path string) bool {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\t_, found := e.paths[path]\n\treturn found\n}\n\n// FdIsWatched checks to see if fd is associated with this EventPort.\nfunc (e *EventPort) FdIsWatched(fd uintptr) bool {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\t_, found := e.fds[fd]\n\treturn found\n}\n\n// AssociatePath wraps port_associate(3c) for a filesystem path including\n// creating the necessary file_obj from the provided stat information.\nfunc (e *EventPort) AssociatePath(path string, stat os.FileInfo, events int, cookie interface{}) error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tif _, found := e.paths[path]; found {\n\t\treturn fmt.Errorf(\"%v is already associated with this Event Port\", path)\n\t}\n\tfCookie, err := createFileObjCookie(path, stat, cookie)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = port_associate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(fCookie.fobj)), events, (*byte)(unsafe.Pointer(fCookie)))\n\tif err != nil {\n\t\treturn err\n\t}\n\te.paths[path] = fCookie\n\te.cookies[fCookie] = struct{}{}\n\treturn nil\n}\n\n// DissociatePath wraps port_dissociate(3c) for a filesystem path.\nfunc (e *EventPort) DissociatePath(path string) error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tf, ok := e.paths[path]\n\tif !ok {\n\t\treturn fmt.Errorf(\"%v is not associated with this Event Port\", path)\n\t}\n\t_, err := port_dissociate(e.port, PORT_SOURCE_FILE, uintptr(unsafe.Pointer(f.fobj)))\n\t// If the path is no longer associated with this event port (ENOENT)\n\t// we should delete it from our map. We can still return ENOENT to the caller.\n\t// But we need to save the cookie\n\tif err != nil && err != ENOENT {\n\t\treturn err\n\t}\n\tif err == nil {\n\t\t// dissociate was successful, safe to delete the cookie\n\t\tfCookie := e.paths[path]\n\t\tdelete(e.cookies, fCookie)\n\t}\n\tdelete(e.paths, path)\n\treturn err\n}\n\n// AssociateFd wraps calls to port_associate(3c) on file descriptors.\nfunc (e *EventPort) AssociateFd(fd uintptr, events int, cookie interface{}) error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tif _, found := e.fds[fd]; found {\n\t\treturn fmt.Errorf(\"%v is already associated with this Event Port\", fd)\n\t}\n\tfCookie, err := createFileObjCookie(\"\", nil, cookie)\n\tif err != nil {\n\t\treturn err\n\t}\n\t_, err = port_associate(e.port, PORT_SOURCE_FD, fd, events, (*byte)(unsafe.Pointer(fCookie)))\n\tif err != nil {\n\t\treturn err\n\t}\n\te.fds[fd] = fCookie\n\te.cookies[fCookie] = struct{}{}\n\treturn nil\n}\n\n// DissociateFd wraps calls to port_dissociate(3c) on file descriptors.\nfunc (e *EventPort) DissociateFd(fd uintptr) error {\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\t_, ok := e.fds[fd]\n\tif !ok {\n\t\treturn fmt.Errorf(\"%v is not associated with this Event Port\", fd)\n\t}\n\t_, err := port_dissociate(e.port, PORT_SOURCE_FD, fd)\n\tif err != nil && err != ENOENT {\n\t\treturn err\n\t}\n\tif err == nil {\n\t\t// dissociate was successful, safe to delete the cookie\n\t\tfCookie := e.fds[fd]\n\t\tdelete(e.cookies, fCookie)\n\t}\n\tdelete(e.fds, fd)\n\treturn err\n}\n\nfunc createFileObjCookie(name string, stat os.FileInfo, cookie interface{}) (*fileObjCookie, error) {\n\tfCookie := new(fileObjCookie)\n\tfCookie.cookie = cookie\n\tif name != \"\" && stat != nil {\n\t\tfCookie.fobj = new(fileObj)\n\t\tbs, err := ByteSliceFromString(name)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tfCookie.fobj.Name = (*int8)(unsafe.Pointer(&bs[0]))\n\t\ts := stat.Sys().(*syscall.Stat_t)\n\t\tfCookie.fobj.Atim.Sec = s.Atim.Sec\n\t\tfCookie.fobj.Atim.Nsec = s.Atim.Nsec\n\t\tfCookie.fobj.Mtim.Sec = s.Mtim.Sec\n\t\tfCookie.fobj.Mtim.Nsec = s.Mtim.Nsec\n\t\tfCookie.fobj.Ctim.Sec = s.Ctim.Sec\n\t\tfCookie.fobj.Ctim.Nsec = s.Ctim.Nsec\n\t}\n\treturn fCookie, nil\n}\n\n// GetOne wraps port_get(3c) and returns a single PortEvent.\nfunc (e *EventPort) GetOne(t *Timespec) (*PortEvent, error) {\n\tpe := new(portEvent)\n\t_, err := port_get(e.port, pe, t)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tp := new(PortEvent)\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\terr = e.peIntToExt(pe, p)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn p, nil\n}\n\n// peIntToExt converts a cgo portEvent struct into the friendlier PortEvent\n// NOTE: Always call this function while holding the e.mu mutex\nfunc (e *EventPort) peIntToExt(peInt *portEvent, peExt *PortEvent) error {\n\tif e.cookies == nil {\n\t\treturn fmt.Errorf(\"this EventPort is already closed\")\n\t}\n\tpeExt.Events = peInt.Events\n\tpeExt.Source = peInt.Source\n\tfCookie := (*fileObjCookie)(unsafe.Pointer(peInt.User))\n\t_, found := e.cookies[fCookie]\n\n\tif !found {\n\t\tpanic(\"unexpected event port address; may be due to kernel bug; see https://go.dev/issue/54254\")\n\t}\n\tpeExt.Cookie = fCookie.cookie\n\tdelete(e.cookies, fCookie)\n\n\tswitch peInt.Source {\n\tcase PORT_SOURCE_FD:\n\t\tpeExt.Fd = uintptr(peInt.Object)\n\t\t// Only remove the fds entry if it exists and this cookie matches\n\t\tif fobj, ok := e.fds[peExt.Fd]; ok {\n\t\t\tif fobj == fCookie {\n\t\t\t\tdelete(e.fds, peExt.Fd)\n\t\t\t}\n\t\t}\n\tcase PORT_SOURCE_FILE:\n\t\tpeExt.fobj = fCookie.fobj\n\t\tpeExt.Path = BytePtrToString((*byte)(unsafe.Pointer(peExt.fobj.Name)))\n\t\t// Only remove the paths entry if it exists and this cookie matches\n\t\tif fobj, ok := e.paths[peExt.Path]; ok {\n\t\t\tif fobj == fCookie {\n\t\t\t\tdelete(e.paths, peExt.Path)\n\t\t\t}\n\t\t}\n\t}\n\treturn nil\n}\n\n// Pending wraps port_getn(3c) and returns how many events are pending.\nfunc (e *EventPort) Pending() (int, error) {\n\tvar n uint32 = 0\n\t_, err := port_getn(e.port, nil, 0, &n, nil)\n\treturn int(n), err\n}\n\n// Get wraps port_getn(3c) and fills a slice of PortEvent.\n// It will block until either min events have been received\n// or the timeout has been exceeded. It will return how many\n// events were actually received along with any error information.\nfunc (e *EventPort) Get(s []PortEvent, min int, timeout *Timespec) (int, error) {\n\tif min == 0 {\n\t\treturn 0, fmt.Errorf(\"need to request at least one event or use Pending() instead\")\n\t}\n\tif len(s) < min {\n\t\treturn 0, fmt.Errorf(\"len(s) (%d) is less than min events requested (%d)\", len(s), min)\n\t}\n\tgot := uint32(min)\n\tmax := uint32(len(s))\n\tvar err error\n\tps := make([]portEvent, max)\n\t_, err = port_getn(e.port, &ps[0], max, &got, timeout)\n\t// got will be trustworthy with ETIME, but not any other error.\n\tif err != nil && err != ETIME {\n\t\treturn 0, err\n\t}\n\te.mu.Lock()\n\tdefer e.mu.Unlock()\n\tvalid := 0\n\tfor i := 0; i < int(got); i++ {\n\t\terr2 := e.peIntToExt(&ps[i], &s[i])\n\t\tif err2 != nil {\n\t\t\tif valid == 0 && err == nil {\n\t\t\t\t// If err2 is the only error and there are no valid events\n\t\t\t\t// to return, return it to the caller.\n\t\t\t\terr = err2\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tvalid = i + 1\n\t}\n\treturn valid, err\n}\n\n//sys\tputmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error)\n\nfunc Putmsg(fd int, cl []byte, data []byte, flags int) (err error) {\n\tvar clp, datap *strbuf\n\tif len(cl) > 0 {\n\t\tclp = &strbuf{\n\t\t\tLen: int32(len(cl)),\n\t\t\tBuf: (*int8)(unsafe.Pointer(&cl[0])),\n\t\t}\n\t}\n\tif len(data) > 0 {\n\t\tdatap = &strbuf{\n\t\t\tLen: int32(len(data)),\n\t\t\tBuf: (*int8)(unsafe.Pointer(&data[0])),\n\t\t}\n\t}\n\treturn putmsg(fd, clp, datap, flags)\n}\n\n//sys\tgetmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error)\n\nfunc Getmsg(fd int, cl []byte, data []byte) (retCl []byte, retData []byte, flags int, err error) {\n\tvar clp, datap *strbuf\n\tif len(cl) > 0 {\n\t\tclp = &strbuf{\n\t\t\tMaxlen: int32(len(cl)),\n\t\t\tBuf:    (*int8)(unsafe.Pointer(&cl[0])),\n\t\t}\n\t}\n\tif len(data) > 0 {\n\t\tdatap = &strbuf{\n\t\t\tMaxlen: int32(len(data)),\n\t\t\tBuf:    (*int8)(unsafe.Pointer(&data[0])),\n\t\t}\n\t}\n\n\tif err = getmsg(fd, clp, datap, &flags); err != nil {\n\t\treturn nil, nil, 0, err\n\t}\n\n\tif len(cl) > 0 {\n\t\tretCl = cl[:clp.Len]\n\t}\n\tif len(data) > 0 {\n\t\tretData = data[:datap.Len]\n\t}\n\treturn retCl, retData, flags, nil\n}\n\nfunc IoctlSetIntRetInt(fd int, req int, arg int) (int, error) {\n\treturn ioctlRet(fd, req, uintptr(arg))\n}\n\nfunc IoctlSetString(fd int, req int, val string) error {\n\tbs := make([]byte, len(val)+1)\n\tcopy(bs[:len(bs)-1], val)\n\terr := ioctlPtr(fd, req, unsafe.Pointer(&bs[0]))\n\truntime.KeepAlive(&bs[0])\n\treturn err\n}\n\n// Lifreq Helpers\n\nfunc (l *Lifreq) SetName(name string) error {\n\tif len(name) >= len(l.Name) {\n\t\treturn fmt.Errorf(\"name cannot be more than %d characters\", len(l.Name)-1)\n\t}\n\tfor i := range name {\n\t\tl.Name[i] = int8(name[i])\n\t}\n\treturn nil\n}\n\nfunc (l *Lifreq) SetLifruInt(d int) {\n\t*(*int)(unsafe.Pointer(&l.Lifru[0])) = d\n}\n\nfunc (l *Lifreq) GetLifruInt() int {\n\treturn *(*int)(unsafe.Pointer(&l.Lifru[0]))\n}\n\nfunc (l *Lifreq) SetLifruUint(d uint) {\n\t*(*uint)(unsafe.Pointer(&l.Lifru[0])) = d\n}\n\nfunc (l *Lifreq) GetLifruUint() uint {\n\treturn *(*uint)(unsafe.Pointer(&l.Lifru[0]))\n}\n\nfunc IoctlLifreq(fd int, req int, l *Lifreq) error {\n\treturn ioctlPtr(fd, req, unsafe.Pointer(l))\n}\n\n// Strioctl Helpers\n\nfunc (s *Strioctl) SetInt(i int) {\n\ts.Len = int32(unsafe.Sizeof(i))\n\ts.Dp = (*int8)(unsafe.Pointer(&i))\n}\n\nfunc IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) {\n\treturn ioctlPtrRet(fd, req, unsafe.Pointer(s))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build amd64 && solaris\n\npackage unix\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval {\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetIovlen(length int) {\n\tmsghdr.Iovlen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = uint32(length)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_unix.go",
    "content": "// Copyright 2009 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris\n\npackage unix\n\nimport (\n\t\"bytes\"\n\t\"sort\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar (\n\tStdin  = 0\n\tStdout = 1\n\tStderr = 2\n)\n\n// Do the interface allocations only once for common\n// Errno values.\nvar (\n\terrEAGAIN error = syscall.EAGAIN\n\terrEINVAL error = syscall.EINVAL\n\terrENOENT error = syscall.ENOENT\n)\n\nvar (\n\tsignalNameMapOnce sync.Once\n\tsignalNameMap     map[string]syscall.Signal\n)\n\n// errnoErr returns common boxed Errno values, to prevent\n// allocations at runtime.\nfunc errnoErr(e syscall.Errno) error {\n\tswitch e {\n\tcase 0:\n\t\treturn nil\n\tcase EAGAIN:\n\t\treturn errEAGAIN\n\tcase EINVAL:\n\t\treturn errEINVAL\n\tcase ENOENT:\n\t\treturn errENOENT\n\t}\n\treturn e\n}\n\n// ErrnoName returns the error name for error number e.\nfunc ErrnoName(e syscall.Errno) string {\n\ti := sort.Search(len(errorList), func(i int) bool {\n\t\treturn errorList[i].num >= e\n\t})\n\tif i < len(errorList) && errorList[i].num == e {\n\t\treturn errorList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalName returns the signal name for signal number s.\nfunc SignalName(s syscall.Signal) string {\n\ti := sort.Search(len(signalList), func(i int) bool {\n\t\treturn signalList[i].num >= s\n\t})\n\tif i < len(signalList) && signalList[i].num == s {\n\t\treturn signalList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalNum returns the syscall.Signal for signal named s,\n// or 0 if a signal with such name is not found.\n// The signal name should start with \"SIG\".\nfunc SignalNum(s string) syscall.Signal {\n\tsignalNameMapOnce.Do(func() {\n\t\tsignalNameMap = make(map[string]syscall.Signal, len(signalList))\n\t\tfor _, signal := range signalList {\n\t\t\tsignalNameMap[signal.name] = signal.num\n\t\t}\n\t})\n\treturn signalNameMap[s]\n}\n\n// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.\nfunc clen(n []byte) int {\n\ti := bytes.IndexByte(n, 0)\n\tif i == -1 {\n\t\ti = len(n)\n\t}\n\treturn i\n}\n\n// Mmap manager, for use by operating system-specific implementations.\n\ntype mmapper struct {\n\tsync.Mutex\n\tactive map[*byte][]byte // active mappings; key is last byte in mapping\n\tmmap   func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error)\n\tmunmap func(addr uintptr, length uintptr) error\n}\n\nfunc (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\tif length <= 0 {\n\t\treturn nil, EINVAL\n\t}\n\n\t// Map the requested memory.\n\taddr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\t// Use unsafe to convert addr into a []byte.\n\tb := unsafe.Slice((*byte)(unsafe.Pointer(addr)), length)\n\n\t// Register mapping in m and return it.\n\tp := &b[cap(b)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tm.active[p] = b\n\treturn b, nil\n}\n\nfunc (m *mmapper) Munmap(data []byte) (err error) {\n\tif len(data) == 0 || len(data) != cap(data) {\n\t\treturn EINVAL\n\t}\n\n\t// Find the base of the mapping.\n\tp := &data[cap(data)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tb := m.active[p]\n\tif b == nil || &b[0] != &data[0] {\n\t\treturn EINVAL\n\t}\n\n\t// Unmap the memory and update m.\n\tif errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil {\n\t\treturn errno\n\t}\n\tdelete(m.active, p)\n\treturn nil\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn mapper.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn mapper.Munmap(b)\n}\n\nfunc MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) {\n\txaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset)\n\treturn unsafe.Pointer(xaddr), err\n}\n\nfunc MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) {\n\treturn mapper.munmap(uintptr(addr), length)\n}\n\nfunc Read(fd int, p []byte) (n int, err error) {\n\tn, err = read(fd, p)\n\tif raceenabled {\n\t\tif n > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(&p[0]), n)\n\t\t}\n\t\tif err == nil {\n\t\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t\t}\n\t}\n\treturn\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = write(fd, p)\n\tif raceenabled && n > 0 {\n\t\traceReadRange(unsafe.Pointer(&p[0]), n)\n\t}\n\treturn\n}\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tn, err = pread(fd, p, offset)\n\tif raceenabled {\n\t\tif n > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(&p[0]), n)\n\t\t}\n\t\tif err == nil {\n\t\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t\t}\n\t}\n\treturn\n}\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = pwrite(fd, p, offset)\n\tif raceenabled && n > 0 {\n\t\traceReadRange(unsafe.Pointer(&p[0]), n)\n\t}\n\treturn\n}\n\n// For testing: clients can set this flag to force\n// creation of IPv6 sockets to return EAFNOSUPPORT.\nvar SocketDisableIPv6 bool\n\n// Sockaddr represents a socket address.\ntype Sockaddr interface {\n\tsockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs\n}\n\n// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets.\ntype SockaddrInet4 struct {\n\tPort int\n\tAddr [4]byte\n\traw  RawSockaddrInet4\n}\n\n// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets.\ntype SockaddrInet6 struct {\n\tPort   int\n\tZoneId uint32\n\tAddr   [16]byte\n\traw    RawSockaddrInet6\n}\n\n// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets.\ntype SockaddrUnix struct {\n\tName string\n\traw  RawSockaddrUnix\n}\n\nfunc Bind(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn bind(fd, ptr, n)\n}\n\nfunc Connect(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn connect(fd, ptr, n)\n}\n\nfunc Getpeername(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getpeername(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\nfunc GetsockoptByte(fd, level, opt int) (value byte, err error) {\n\tvar n byte\n\tvallen := _Socklen(1)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc GetsockoptInt(fd, level, opt int) (value int, err error) {\n\tvar n int32\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn int(n), err\n}\n\nfunc GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\treturn value, err\n}\n\nfunc GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {\n\tvar value IPMreq\n\tvallen := _Socklen(SizeofIPMreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {\n\tvar value IPv6Mreq\n\tvallen := _Socklen(SizeofIPv6Mreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {\n\tvar value IPv6MTUInfo\n\tvallen := _Socklen(SizeofIPv6MTUInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {\n\tvar value ICMPv6Filter\n\tvallen := _Socklen(SizeofICMPv6Filter)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptLinger(fd, level, opt int) (*Linger, error) {\n\tvar linger Linger\n\tvallen := _Socklen(SizeofLinger)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen)\n\treturn &linger, err\n}\n\nfunc GetsockoptTimeval(fd, level, opt int) (*Timeval, error) {\n\tvar tv Timeval\n\tvallen := _Socklen(unsafe.Sizeof(tv))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen)\n\treturn &tv, err\n}\n\nfunc GetsockoptUint64(fd, level, opt int) (value uint64, err error) {\n\tvar n uint64\n\tvallen := _Socklen(8)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\n// Recvmsg receives a message from a socket using the recvmsg system call. The\n// received non-control data will be written to p, and any \"out of band\"\n// control data will be written to oob. The flags are passed to recvmsg.\n//\n// The results are:\n//   - n is the number of non-control data bytes read into p\n//   - oobn is the number of control data bytes read into oob; this may be interpreted using [ParseSocketControlMessage]\n//   - recvflags is flags returned by recvmsg\n//   - from is the address of the sender\n//\n// If the underlying socket type is not SOCK_DGRAM, a received message\n// containing oob data and a single '\\0' of non-control data is treated as if\n// the message contained only control data, i.e. n will be zero on return.\nfunc Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\tvar iov [1]Iovec\n\tif len(p) > 0 {\n\t\tiov[0].Base = &p[0]\n\t\tiov[0].SetLen(len(p))\n\t}\n\tvar rsa RawSockaddrAny\n\tn, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa)\n\t// source address is only specified if the socket is unconnected\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\n// RecvmsgBuffers receives a message from a socket using the recvmsg system\n// call. This function is equivalent to Recvmsg, but non-control data read is\n// scattered into the buffers slices.\nfunc RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\tiov := make([]Iovec, len(buffers))\n\tfor i := range buffers {\n\t\tif len(buffers[i]) > 0 {\n\t\t\tiov[i].Base = &buffers[i][0]\n\t\t\tiov[i].SetLen(len(buffers[i]))\n\t\t} else {\n\t\t\tiov[i].Base = (*byte)(unsafe.Pointer(&_zero))\n\t\t}\n\t}\n\tvar rsa RawSockaddrAny\n\tn, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa)\n\tif err == nil && rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\n// Sendmsg sends a message on a socket to an address using the sendmsg system\n// call. This function is equivalent to SendmsgN, but does not return the\n// number of bytes actually sent.\nfunc Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {\n\t_, err = SendmsgN(fd, p, oob, to, flags)\n\treturn\n}\n\n// SendmsgN sends a message on a socket to an address using the sendmsg system\n// call. p contains the non-control data to send, and oob contains the \"out of\n// band\" control data. The flags are passed to sendmsg. The number of\n// non-control bytes actually written to the socket is returned.\n//\n// Some socket types do not support sending control data without accompanying\n// non-control data. If p is empty, and oob contains control data, and the\n// underlying socket type is not SOCK_DGRAM, p will be treated as containing a\n// single '\\0' and the return value will indicate zero bytes sent.\n//\n// The Go function Recvmsg, if called with an empty p and a non-empty oob,\n// will read and ignore this additional '\\0'.  If the message is received by\n// code that does not use Recvmsg, or that does not use Go at all, that code\n// will need to be written to expect and ignore the additional '\\0'.\n//\n// If you need to send non-empty oob with p actually empty, and if the\n// underlying socket type supports it, you can do so via a raw system call as\n// follows:\n//\n//\tmsg := &unix.Msghdr{\n//\t    Control: &oob[0],\n//\t}\n//\tmsg.SetControllen(len(oob))\n//\tn, _, errno := unix.Syscall(unix.SYS_SENDMSG, uintptr(fd), uintptr(unsafe.Pointer(msg)), flags)\nfunc SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\tvar iov [1]Iovec\n\tif len(p) > 0 {\n\t\tiov[0].Base = &p[0]\n\t\tiov[0].SetLen(len(p))\n\t}\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\treturn sendmsgN(fd, iov[:], oob, ptr, salen, flags)\n}\n\n// SendmsgBuffers sends a message on a socket to an address using the sendmsg\n// system call. This function is equivalent to SendmsgN, but the non-control\n// data is gathered from buffers.\nfunc SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\tiov := make([]Iovec, len(buffers))\n\tfor i := range buffers {\n\t\tif len(buffers[i]) > 0 {\n\t\t\tiov[i].Base = &buffers[i][0]\n\t\t\tiov[i].SetLen(len(buffers[i]))\n\t\t} else {\n\t\t\tiov[i].Base = (*byte)(unsafe.Pointer(&_zero))\n\t\t}\n\t}\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\treturn sendmsgN(fd, iov, oob, ptr, salen, flags)\n}\n\nfunc Send(s int, buf []byte, flags int) (err error) {\n\treturn sendto(s, buf, flags, nil, 0)\n}\n\nfunc Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\treturn sendto(fd, p, flags, ptr, salen)\n}\n\nfunc SetsockoptByte(fd, level, opt int, value byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 1)\n}\n\nfunc SetsockoptInt(fd, level, opt int, value int) (err error) {\n\tvar n = int32(value)\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&n), 4)\n}\n\nfunc SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4)\n}\n\nfunc SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq)\n}\n\nfunc SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq)\n}\n\nfunc SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter)\n}\n\nfunc SetsockoptLinger(fd, level, opt int, l *Linger) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger)\n}\n\nfunc SetsockoptString(fd, level, opt int, s string) (err error) {\n\tvar p unsafe.Pointer\n\tif len(s) > 0 {\n\t\tp = unsafe.Pointer(&[]byte(s)[0])\n\t}\n\treturn setsockopt(fd, level, opt, p, uintptr(len(s)))\n}\n\nfunc SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv))\n}\n\nfunc SetsockoptUint64(fd, level, opt int, value uint64) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 8)\n}\n\nfunc Socket(domain, typ, proto int) (fd int, err error) {\n\tif domain == AF_INET6 && SocketDisableIPv6 {\n\t\treturn -1, EAFNOSUPPORT\n\t}\n\tfd, err = socket(domain, typ, proto)\n\treturn\n}\n\nfunc Socketpair(domain, typ, proto int) (fd [2]int, err error) {\n\tvar fdx [2]int32\n\terr = socketpair(domain, typ, proto, &fdx)\n\tif err == nil {\n\t\tfd[0] = int(fdx[0])\n\t\tfd[1] = int(fdx[1])\n\t}\n\treturn\n}\n\nvar ioSync int64\n\nfunc CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) }\n\nfunc SetNonblock(fd int, nonblocking bool) (err error) {\n\tflag, err := fcntl(fd, F_GETFL, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif (flag&O_NONBLOCK != 0) == nonblocking {\n\t\treturn nil\n\t}\n\tif nonblocking {\n\t\tflag |= O_NONBLOCK\n\t} else {\n\t\tflag &= ^O_NONBLOCK\n\t}\n\t_, err = fcntl(fd, F_SETFL, flag)\n\treturn err\n}\n\n// Exec calls execve(2), which replaces the calling executable in the process\n// tree. argv0 should be the full path to an executable (\"/bin/ls\") and the\n// executable name should also be the first argument in argv ([\"ls\", \"-l\"]).\n// envv are the environment variables that should be passed to the new\n// process ([\"USER=go\", \"PWD=/tmp\"]).\nfunc Exec(argv0 string, argv []string, envv []string) error {\n\treturn syscall.Exec(argv0, argv, envv)\n}\n\n// Lutimes sets the access and modification times tv on path. If path refers to\n// a symlink, it is not dereferenced and the timestamps are set on the symlink.\n// If tv is nil, the access and modification times are set to the current time.\n// Otherwise tv must contain exactly 2 elements, with access time as the first\n// element and modification time as the second element.\nfunc Lutimes(path string, tv []Timeval) error {\n\tif tv == nil {\n\t\treturn UtimesNanoAt(AT_FDCWD, path, nil, AT_SYMLINK_NOFOLLOW)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\tts := []Timespec{\n\t\tNsecToTimespec(TimevalToNsec(tv[0])),\n\t\tNsecToTimespec(TimevalToNsec(tv[1])),\n\t}\n\treturn UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW)\n}\n\n// emptyIovecs reports whether there are no bytes in the slice of Iovec.\nfunc emptyIovecs(iov []Iovec) bool {\n\tfor i := range iov {\n\t\tif iov[i].Len > 0 {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn true\n}\n\n// Setrlimit sets a resource limit.\nfunc Setrlimit(resource int, rlim *Rlimit) error {\n\t// Just call the syscall version, because as of Go 1.21\n\t// it will affect starting a new process.\n\treturn syscall.Setrlimit(resource, (*syscall.Rlimit)(rlim))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_unix_gc.go",
    "content": "// Copyright 2016 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin || dragonfly || freebsd || (linux && !ppc64 && !ppc64le) || netbsd || openbsd || solaris) && gc\n\npackage unix\n\nimport \"syscall\"\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno)\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && (ppc64le || ppc64) && gc\n\npackage unix\n\nimport \"syscall\"\n\nfunc Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.Syscall(trap, a1, a2, a3)\n}\nfunc Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6)\n}\nfunc RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.RawSyscall(trap, a1, a2, a3)\n}\nfunc RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {\n\treturn syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/syscall_zos_s390x.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x\n\n// Many of the following syscalls are not available on all versions of z/OS.\n// Some missing calls have legacy implementations/simulations but others\n// will be missing completely. To achieve consistent failing behaviour on\n// legacy systems, we first test the function pointer via a safeloading\n// mechanism to see if the function exists on a given system. Then execution\n// is branched to either continue the function call, or return an error.\n\npackage unix\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"reflect\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//go:noescape\nfunc initZosLibVec()\n\n//go:noescape\nfunc GetZosLibVec() uintptr\n\nfunc init() {\n\tinitZosLibVec()\n\tr0, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS_____GETENV_A<<4, uintptr(unsafe.Pointer(&([]byte(\"__ZOS_XSYSTRACE\\x00\"))[0])))\n\tif r0 != 0 {\n\t\tn, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___ATOI_A<<4, r0)\n\t\tZosTraceLevel = int(n)\n\t\tr0, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS_____GETENV_A<<4, uintptr(unsafe.Pointer(&([]byte(\"__ZOS_XSYSTRACEFD\\x00\"))[0])))\n\t\tif r0 != 0 {\n\t\t\tfd, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___ATOI_A<<4, r0)\n\t\t\tf := os.NewFile(fd, \"zostracefile\")\n\t\t\tif f != nil {\n\t\t\t\tZosTracefile = f\n\t\t\t}\n\t\t}\n\n\t}\n}\n\n//go:noescape\nfunc CallLeFuncWithErr(funcdesc uintptr, parms ...uintptr) (ret, errno2 uintptr, err Errno)\n\n//go:noescape\nfunc CallLeFuncWithPtrReturn(funcdesc uintptr, parms ...uintptr) (ret, errno2 uintptr, err Errno)\n\n// -------------------------------\n// pointer validity test\n// good pointer returns 0\n// bad pointer returns 1\n//\n//go:nosplit\nfunc ptrtest(uintptr) uint64\n\n// Load memory at ptr location with error handling if the location is invalid\n//\n//go:noescape\nfunc safeload(ptr uintptr) (value uintptr, error uintptr)\n\nconst (\n\tentrypointLocationOffset = 8 // From function descriptor\n\n\txplinkEyecatcher   = 0x00c300c500c500f1 // \".C.E.E.1\"\n\teyecatcherOffset   = 16                 // From function entrypoint (negative)\n\tppa1LocationOffset = 8                  // From function entrypoint (negative)\n\n\tnameLenOffset = 0x14 // From PPA1 start\n\tnameOffset    = 0x16 // From PPA1 start\n)\n\nfunc getPpaOffset(funcptr uintptr) int64 {\n\tentrypoint, err := safeload(funcptr + entrypointLocationOffset)\n\tif err != 0 {\n\t\treturn -1\n\t}\n\n\t// XPLink functions have \".C.E.E.1\" as the first 8 bytes (EBCDIC)\n\tval, err := safeload(entrypoint - eyecatcherOffset)\n\tif err != 0 {\n\t\treturn -1\n\t}\n\tif val != xplinkEyecatcher {\n\t\treturn -1\n\t}\n\n\tppaoff, err := safeload(entrypoint - ppa1LocationOffset)\n\tif err != 0 {\n\t\treturn -1\n\t}\n\n\tppaoff >>= 32\n\treturn int64(ppaoff)\n}\n\n//-------------------------------\n// function descriptor pointer validity test\n// good pointer returns 0\n// bad pointer returns 1\n\n// TODO: currently mksyscall_zos_s390x.go generate empty string for funcName\n// have correct funcName pass to the funcptrtest function\nfunc funcptrtest(funcptr uintptr, funcName string) uint64 {\n\tentrypoint, err := safeload(funcptr + entrypointLocationOffset)\n\tif err != 0 {\n\t\treturn 1\n\t}\n\n\tppaoff := getPpaOffset(funcptr)\n\tif ppaoff == -1 {\n\t\treturn 1\n\t}\n\n\t// PPA1 offset value is from the start of the entire function block, not the entrypoint\n\tppa1 := (entrypoint - eyecatcherOffset) + uintptr(ppaoff)\n\n\tnameLen, err := safeload(ppa1 + nameLenOffset)\n\tif err != 0 {\n\t\treturn 1\n\t}\n\n\tnameLen >>= 48\n\tif nameLen > 128 {\n\t\treturn 1\n\t}\n\n\t// no function name input to argument end here\n\tif funcName == \"\" {\n\t\treturn 0\n\t}\n\n\tvar funcname [128]byte\n\tfor i := 0; i < int(nameLen); i += 8 {\n\t\tv, err := safeload(ppa1 + nameOffset + uintptr(i))\n\t\tif err != 0 {\n\t\t\treturn 1\n\t\t}\n\t\tfuncname[i] = byte(v >> 56)\n\t\tfuncname[i+1] = byte(v >> 48)\n\t\tfuncname[i+2] = byte(v >> 40)\n\t\tfuncname[i+3] = byte(v >> 32)\n\t\tfuncname[i+4] = byte(v >> 24)\n\t\tfuncname[i+5] = byte(v >> 16)\n\t\tfuncname[i+6] = byte(v >> 8)\n\t\tfuncname[i+7] = byte(v)\n\t}\n\n\truntime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4, // __e2a_l\n\t\t[]uintptr{uintptr(unsafe.Pointer(&funcname[0])), nameLen})\n\n\tname := string(funcname[:nameLen])\n\tif name != funcName {\n\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n// For detection of capabilities on a system.\n// Is function descriptor f a valid function?\nfunc isValidLeFunc(f uintptr) error {\n\tret := funcptrtest(f, \"\")\n\tif ret != 0 {\n\t\treturn fmt.Errorf(\"Bad pointer, not an LE function \")\n\t}\n\treturn nil\n}\n\n// Retrieve function name from descriptor\nfunc getLeFuncName(f uintptr) (string, error) {\n\t// assume it has been checked, only check ppa1 validity here\n\tentry := ((*[2]uintptr)(unsafe.Pointer(f)))[1]\n\tpreamp := ((*[4]uint32)(unsafe.Pointer(entry - eyecatcherOffset)))\n\n\toffsetPpa1 := preamp[2]\n\tif offsetPpa1 > 0x0ffff {\n\t\treturn \"\", fmt.Errorf(\"PPA1 offset seems too big 0x%x\\n\", offsetPpa1)\n\t}\n\n\tppa1 := uintptr(unsafe.Pointer(preamp)) + uintptr(offsetPpa1)\n\tres := ptrtest(ppa1)\n\tif res != 0 {\n\t\treturn \"\", fmt.Errorf(\"PPA1 address not valid\")\n\t}\n\n\tsize := *(*uint16)(unsafe.Pointer(ppa1 + nameLenOffset))\n\tif size > 128 {\n\t\treturn \"\", fmt.Errorf(\"Function name seems too long, length=%d\\n\", size)\n\t}\n\n\tvar name [128]byte\n\tfuncname := (*[128]byte)(unsafe.Pointer(ppa1 + nameOffset))\n\tcopy(name[0:size], funcname[0:size])\n\n\truntime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4, // __e2a_l\n\t\t[]uintptr{uintptr(unsafe.Pointer(&name[0])), uintptr(size)})\n\n\treturn string(name[:size]), nil\n}\n\n// Check z/OS version\nfunc zosLeVersion() (version, release uint32) {\n\tp1 := (*(*uintptr)(unsafe.Pointer(uintptr(1208)))) >> 32\n\tp1 = *(*uintptr)(unsafe.Pointer(uintptr(p1 + 88)))\n\tp1 = *(*uintptr)(unsafe.Pointer(uintptr(p1 + 8)))\n\tp1 = *(*uintptr)(unsafe.Pointer(uintptr(p1 + 984)))\n\tvrm := *(*uint32)(unsafe.Pointer(p1 + 80))\n\tversion = (vrm & 0x00ff0000) >> 16\n\trelease = (vrm & 0x0000ff00) >> 8\n\treturn\n}\n\n// returns a zos C FILE * for stdio fd 0, 1, 2\nfunc ZosStdioFilep(fd int32) uintptr {\n\treturn uintptr(*(*uint64)(unsafe.Pointer(uintptr(*(*uint64)(unsafe.Pointer(uintptr(*(*uint64)(unsafe.Pointer(uintptr(uint64(*(*uint32)(unsafe.Pointer(uintptr(1208)))) + 80))) + uint64((fd+2)<<3))))))))\n}\n\nfunc copyStat(stat *Stat_t, statLE *Stat_LE_t) {\n\tstat.Dev = uint64(statLE.Dev)\n\tstat.Ino = uint64(statLE.Ino)\n\tstat.Nlink = uint64(statLE.Nlink)\n\tstat.Mode = uint32(statLE.Mode)\n\tstat.Uid = uint32(statLE.Uid)\n\tstat.Gid = uint32(statLE.Gid)\n\tstat.Rdev = uint64(statLE.Rdev)\n\tstat.Size = statLE.Size\n\tstat.Atim.Sec = int64(statLE.Atim)\n\tstat.Atim.Nsec = 0 //zos doesn't return nanoseconds\n\tstat.Mtim.Sec = int64(statLE.Mtim)\n\tstat.Mtim.Nsec = 0 //zos doesn't return nanoseconds\n\tstat.Ctim.Sec = int64(statLE.Ctim)\n\tstat.Ctim.Nsec = 0 //zos doesn't return nanoseconds\n\tstat.Blksize = int64(statLE.Blksize)\n\tstat.Blocks = statLE.Blocks\n}\n\nfunc svcCall(fnptr unsafe.Pointer, argv *unsafe.Pointer, dsa *uint64)\nfunc svcLoad(name *byte) unsafe.Pointer\nfunc svcUnload(name *byte, fnptr unsafe.Pointer) int64\n\nfunc (d *Dirent) NameString() string {\n\tif d == nil {\n\t\treturn \"\"\n\t}\n\ts := string(d.Name[:])\n\tidx := strings.IndexByte(s, 0)\n\tif idx == -1 {\n\t\treturn s\n\t} else {\n\t\treturn s[:idx]\n\t}\n}\n\nfunc DecodeData(dest []byte, sz int, val uint64) {\n\tfor i := 0; i < sz; i++ {\n\t\tdest[sz-1-i] = byte((val >> (uint64(i * 8))) & 0xff)\n\t}\n}\n\nfunc EncodeData(data []byte) uint64 {\n\tvar value uint64\n\tsz := len(data)\n\tfor i := 0; i < sz; i++ {\n\t\tvalue |= uint64(data[i]) << uint64(((sz - i - 1) * 8))\n\t}\n\treturn value\n}\n\nfunc (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet4\n\tsa.raw.Family = AF_INET\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tif sa.Port < 0 || sa.Port > 0xFFFF {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = SizeofSockaddrInet6\n\tsa.raw.Family = AF_INET6\n\tp := (*[2]byte)(unsafe.Pointer(&sa.raw.Port))\n\tp[0] = byte(sa.Port >> 8)\n\tp[1] = byte(sa.Port)\n\tsa.raw.Scope_id = sa.ZoneId\n\tfor i := 0; i < len(sa.Addr); i++ {\n\t\tsa.raw.Addr[i] = sa.Addr[i]\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) {\n\tname := sa.Name\n\tn := len(name)\n\tif n >= len(sa.raw.Path) || n == 0 {\n\t\treturn nil, 0, EINVAL\n\t}\n\tsa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL\n\tsa.raw.Family = AF_UNIX\n\tfor i := 0; i < n; i++ {\n\t\tsa.raw.Path[i] = int8(name[i])\n\t}\n\treturn unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil\n}\n\nfunc anyToSockaddr(_ int, rsa *RawSockaddrAny) (Sockaddr, error) {\n\t// TODO(neeilan): Implement use of first param (fd)\n\tswitch rsa.Addr.Family {\n\tcase AF_UNIX:\n\t\tpp := (*RawSockaddrUnix)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrUnix)\n\t\t// For z/OS, only replace NUL with @ when the\n\t\t// length is not zero.\n\t\tif pp.Len != 0 && pp.Path[0] == 0 {\n\t\t\t// \"Abstract\" Unix domain socket.\n\t\t\t// Rewrite leading NUL as @ for textual display.\n\t\t\t// (This is the standard convention.)\n\t\t\t// Not friendly to overwrite in place,\n\t\t\t// but the callers below don't care.\n\t\t\tpp.Path[0] = '@'\n\t\t}\n\n\t\t// Assume path ends at NUL.\n\t\t//\n\t\t// For z/OS, the length of the name is a field\n\t\t// in the structure. To be on the safe side, we\n\t\t// will still scan the name for a NUL but only\n\t\t// to the length provided in the structure.\n\t\t//\n\t\t// This is not technically the Linux semantics for\n\t\t// abstract Unix domain sockets--they are supposed\n\t\t// to be uninterpreted fixed-size binary blobs--but\n\t\t// everyone uses this convention.\n\t\tn := 0\n\t\tfor n < int(pp.Len) && pp.Path[n] != 0 {\n\t\t\tn++\n\t\t}\n\t\tsa.Name = string(unsafe.Slice((*byte)(unsafe.Pointer(&pp.Path[0])), n))\n\t\treturn sa, nil\n\n\tcase AF_INET:\n\t\tpp := (*RawSockaddrInet4)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet4)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\n\tcase AF_INET6:\n\t\tpp := (*RawSockaddrInet6)(unsafe.Pointer(rsa))\n\t\tsa := new(SockaddrInet6)\n\t\tp := (*[2]byte)(unsafe.Pointer(&pp.Port))\n\t\tsa.Port = int(p[0])<<8 + int(p[1])\n\t\tsa.ZoneId = pp.Scope_id\n\t\tfor i := 0; i < len(sa.Addr); i++ {\n\t\t\tsa.Addr[i] = pp.Addr[i]\n\t\t}\n\t\treturn sa, nil\n\t}\n\treturn nil, EAFNOSUPPORT\n}\n\nfunc Accept(fd int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept(fd, &rsa, &len)\n\tif err != nil {\n\t\treturn\n\t}\n\t// TODO(neeilan): Remove 0 in call\n\tsa, err = anyToSockaddr(0, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tnfd, err = accept4(fd, &rsa, &len, flags)\n\tif err != nil {\n\t\treturn\n\t}\n\tif len > SizeofSockaddrAny {\n\t\tpanic(\"RawSockaddrAny too small\")\n\t}\n\t// TODO(neeilan): Remove 0 in call\n\tsa, err = anyToSockaddr(0, &rsa)\n\tif err != nil {\n\t\tClose(nfd)\n\t\tnfd = 0\n\t}\n\treturn\n}\n\nfunc Ctermid() (tty string, err error) {\n\tvar termdev [1025]byte\n\truntime.EnterSyscall()\n\tr0, err2, err1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___CTERMID_A<<4, uintptr(unsafe.Pointer(&termdev[0])))\n\truntime.ExitSyscall()\n\tif r0 == 0 {\n\t\treturn \"\", fmt.Errorf(\"%s (errno2=0x%x)\\n\", err1.Error(), err2)\n\t}\n\ts := string(termdev[:])\n\tidx := strings.Index(s, string(rune(0)))\n\tif idx == -1 {\n\t\ttty = s\n\t} else {\n\t\ttty = s[:idx]\n\t}\n\treturn\n}\n\nfunc (iov *Iovec) SetLen(length int) {\n\tiov.Len = uint64(length)\n}\n\nfunc (msghdr *Msghdr) SetControllen(length int) {\n\tmsghdr.Controllen = int32(length)\n}\n\nfunc (cmsg *Cmsghdr) SetLen(length int) {\n\tcmsg.Len = int32(length)\n}\n\n//sys   fcntl(fd int, cmd int, arg int) (val int, err error)\n//sys   Flistxattr(fd int, dest []byte) (sz int, err error) = SYS___FLISTXATTR_A\n//sys   Fremovexattr(fd int, attr string) (err error) = SYS___FREMOVEXATTR_A\n//sys\tread(fd int, p []byte) (n int, err error)\n//sys\twrite(fd int, p []byte) (n int, err error)\n\n//sys   Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) = SYS___FGETXATTR_A\n//sys   Fsetxattr(fd int, attr string, data []byte, flag int) (err error) = SYS___FSETXATTR_A\n\n//sys\taccept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = SYS___ACCEPT_A\n//sys\taccept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = SYS___ACCEPT4_A\n//sys\tbind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___BIND_A\n//sys\tconnect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = SYS___CONNECT_A\n//sysnb\tgetgroups(n int, list *_Gid_t) (nn int, err error)\n//sysnb\tsetgroups(n int, list *_Gid_t) (err error)\n//sys\tgetsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error)\n//sys\tsetsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error)\n//sysnb\tsocket(domain int, typ int, proto int) (fd int, err error)\n//sysnb\tsocketpair(domain int, typ int, proto int, fd *[2]int32) (err error)\n//sysnb\tgetpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETPEERNAME_A\n//sysnb\tgetsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = SYS___GETSOCKNAME_A\n//sys   Removexattr(path string, attr string) (err error) = SYS___REMOVEXATTR_A\n//sys\trecvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = SYS___RECVFROM_A\n//sys\tsendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = SYS___SENDTO_A\n//sys\trecvmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___RECVMSG_A\n//sys\tsendmsg(s int, msg *Msghdr, flags int) (n int, err error) = SYS___SENDMSG_A\n//sys   mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) = SYS_MMAP\n//sys   munmap(addr uintptr, length uintptr) (err error) = SYS_MUNMAP\n//sys   ioctl(fd int, req int, arg uintptr) (err error) = SYS_IOCTL\n//sys   ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) = SYS_IOCTL\n//sys\tshmat(id int, addr uintptr, flag int) (ret uintptr, err error) = SYS_SHMAT\n//sys\tshmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) = SYS_SHMCTL64\n//sys\tshmdt(addr uintptr) (err error) = SYS_SHMDT\n//sys\tshmget(key int, size int, flag int) (id int, err error) = SYS_SHMGET\n\n//sys   Access(path string, mode uint32) (err error) = SYS___ACCESS_A\n//sys   Chdir(path string) (err error) = SYS___CHDIR_A\n//sys\tChown(path string, uid int, gid int) (err error) = SYS___CHOWN_A\n//sys\tChmod(path string, mode uint32) (err error) = SYS___CHMOD_A\n//sys   Creat(path string, mode uint32) (fd int, err error) = SYS___CREAT_A\n//sys\tDup(oldfd int) (fd int, err error)\n//sys\tDup2(oldfd int, newfd int) (err error)\n//sys\tDup3(oldfd int, newfd int, flags int) (err error) = SYS_DUP3\n//sys\tDirfd(dirp uintptr) (fd int, err error) = SYS_DIRFD\n//sys\tEpollCreate(size int) (fd int, err error) = SYS_EPOLL_CREATE\n//sys\tEpollCreate1(flags int) (fd int, err error) = SYS_EPOLL_CREATE1\n//sys\tEpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) = SYS_EPOLL_CTL\n//sys\tEpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) = SYS_EPOLL_PWAIT\n//sys\tEpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_WAIT\n//sys\tErrno2() (er2 int) = SYS___ERRNO2\n//sys\tEventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD\n//sys\tExit(code int)\n//sys\tFaccessat(dirfd int, path string, mode uint32, flags int) (err error) = SYS___FACCESSAT_A\n\nfunc Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) {\n\treturn Faccessat(dirfd, path, mode, flags)\n}\n\n//sys\tFchdir(fd int) (err error)\n//sys\tFchmod(fd int, mode uint32) (err error)\n//sys\tFchmodat(dirfd int, path string, mode uint32, flags int) (err error) = SYS___FCHMODAT_A\n//sys\tFchown(fd int, uid int, gid int) (err error)\n//sys\tFchownat(fd int, path string, uid int, gid int, flags int) (err error) = SYS___FCHOWNAT_A\n//sys\tFcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) = SYS_FCNTL\n//sys\tFdatasync(fd int) (err error) = SYS_FDATASYNC\n//sys\tfstat(fd int, stat *Stat_LE_t) (err error)\n//sys\tfstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) = SYS___FSTATAT_A\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\tvar statLE Stat_LE_t\n\terr = fstat(fd, &statLE)\n\tcopyStat(stat, &statLE)\n\treturn\n}\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar statLE Stat_LE_t\n\terr = fstatat(dirfd, path, &statLE, flags)\n\tcopyStat(stat, &statLE)\n\treturn\n}\n\nfunc impl_Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)))\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_GetxattrAddr() *(func(path string, attr string, dest []byte) (sz int, err error))\n\nvar Getxattr = enter_Getxattr\n\nfunc enter_Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tfuncref := get_GetxattrAddr()\n\tif validGetxattr() {\n\t\t*funcref = impl_Getxattr\n\t} else {\n\t\t*funcref = error_Getxattr\n\t}\n\treturn (*funcref)(path, attr, dest)\n}\n\nfunc error_Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\treturn -1, ENOSYS\n}\n\nfunc validGetxattr() bool {\n\tif funcptrtest(GetZosLibVec()+SYS___GETXATTR_A<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS___GETXATTR_A<<4); err == nil {\n\t\t\treturn name == \"__getxattr_a\"\n\t\t}\n\t}\n\treturn false\n}\n\n//sys   Lgetxattr(link string, attr string, dest []byte) (sz int, err error) = SYS___LGETXATTR_A\n//sys   Lsetxattr(path string, attr string, data []byte, flags int) (err error) = SYS___LSETXATTR_A\n\nfunc impl_Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SetxattrAddr() *(func(path string, attr string, data []byte, flags int) (err error))\n\nvar Setxattr = enter_Setxattr\n\nfunc enter_Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tfuncref := get_SetxattrAddr()\n\tif validSetxattr() {\n\t\t*funcref = impl_Setxattr\n\t} else {\n\t\t*funcref = error_Setxattr\n\t}\n\treturn (*funcref)(path, attr, data, flags)\n}\n\nfunc error_Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\treturn ENOSYS\n}\n\nfunc validSetxattr() bool {\n\tif funcptrtest(GetZosLibVec()+SYS___SETXATTR_A<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS___SETXATTR_A<<4); err == nil {\n\t\t\treturn name == \"__setxattr_a\"\n\t\t}\n\t}\n\treturn false\n}\n\n//sys\tFstatfs(fd int, buf *Statfs_t) (err error) = SYS_FSTATFS\n//sys\tFstatvfs(fd int, stat *Statvfs_t) (err error) = SYS_FSTATVFS\n//sys\tFsync(fd int) (err error)\n//sys\tFutimes(fd int, tv []Timeval) (err error) = SYS_FUTIMES\n//sys\tFutimesat(dirfd int, path string, tv []Timeval) (err error) = SYS___FUTIMESAT_A\n//sys\tFtruncate(fd int, length int64) (err error)\n//sys\tGetrandom(buf []byte, flags int) (n int, err error) = SYS_GETRANDOM\n//sys\tInotifyInit() (fd int, err error) = SYS_INOTIFY_INIT\n//sys\tInotifyInit1(flags int) (fd int, err error) = SYS_INOTIFY_INIT1\n//sys\tInotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) = SYS___INOTIFY_ADD_WATCH_A\n//sys\tInotifyRmWatch(fd int, watchdesc uint32) (success int, err error) = SYS_INOTIFY_RM_WATCH\n//sys   Listxattr(path string, dest []byte) (sz int, err error) = SYS___LISTXATTR_A\n//sys   Llistxattr(path string, dest []byte) (sz int, err error) = SYS___LLISTXATTR_A\n//sys   Lremovexattr(path string, attr string) (err error) = SYS___LREMOVEXATTR_A\n//sys\tLutimes(path string, tv []Timeval) (err error) = SYS___LUTIMES_A\n//sys   Mprotect(b []byte, prot int) (err error) = SYS_MPROTECT\n//sys   Msync(b []byte, flags int) (err error) = SYS_MSYNC\n//sys   Console2(cmsg *ConsMsg2, modstr *byte, concmd *uint32) (err error) = SYS___CONSOLE2\n\n// Pipe2 begin\n\n//go:nosplit\nfunc getPipe2Addr() *(func([]int, int) error)\n\nvar Pipe2 = pipe2Enter\n\nfunc pipe2Enter(p []int, flags int) (err error) {\n\tif funcptrtest(GetZosLibVec()+SYS_PIPE2<<4, \"\") == 0 {\n\t\t*getPipe2Addr() = pipe2Impl\n\t} else {\n\t\t*getPipe2Addr() = pipe2Error\n\t}\n\treturn (*getPipe2Addr())(p, flags)\n}\n\nfunc pipe2Impl(p []int, flags int) (err error) {\n\tvar pp [2]_C_int\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PIPE2<<4, uintptr(unsafe.Pointer(&pp[0])), uintptr(flags))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t} else {\n\t\tp[0] = int(pp[0])\n\t\tp[1] = int(pp[1])\n\t}\n\treturn\n}\nfunc pipe2Error(p []int, flags int) (err error) {\n\treturn fmt.Errorf(\"Pipe2 is not available on this system\")\n}\n\n// Pipe2 end\n\n//sys   Poll(fds []PollFd, timeout int) (n int, err error) = SYS_POLL\n\nfunc Readdir(dir uintptr) (dirent *Dirent, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___READDIR_A<<4, uintptr(dir))\n\truntime.ExitSyscall()\n\tdirent = (*Dirent)(unsafe.Pointer(r0))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//sys\tReaddir_r(dirp uintptr, entry *direntLE, result **direntLE) (err error) = SYS___READDIR_R_A\n//sys\tStatfs(path string, buf *Statfs_t) (err error) = SYS___STATFS_A\n//sys\tSyncfs(fd int) (err error) = SYS_SYNCFS\n//sys   Times(tms *Tms) (ticks uintptr, err error) = SYS_TIMES\n//sys   W_Getmntent(buff *byte, size int) (lastsys int, err error) = SYS_W_GETMNTENT\n//sys   W_Getmntent_A(buff *byte, size int) (lastsys int, err error) = SYS___W_GETMNTENT_A\n\n//sys   mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) = SYS___MOUNT_A\n//sys   unmount_LE(filesystem string, mtm int) (err error) = SYS___UMOUNT_A\n//sys   Chroot(path string) (err error) = SYS___CHROOT_A\n//sys   Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) = SYS_SELECT\n//sysnb Uname(buf *Utsname) (err error) = SYS_____OSNAME_A\n//sys   Unshare(flags int) (err error) = SYS_UNSHARE\n\nfunc Ptsname(fd int) (name string, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___PTSNAME_A<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif r0 == 0 {\n\t\terr = errnoErr2(e1, e2)\n\t} else {\n\t\tname = u2s(unsafe.Pointer(r0))\n\t}\n\treturn\n}\n\nfunc u2s(cstr unsafe.Pointer) string {\n\tstr := (*[1024]uint8)(cstr)\n\ti := 0\n\tfor str[i] != 0 {\n\t\ti++\n\t}\n\treturn string(str[:i])\n}\n\nfunc Close(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_CLOSE<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tfor i := 0; e1 == EAGAIN && i < 10; i++ {\n\t\truntime.EnterSyscall()\n\t\tCallLeFuncWithErr(GetZosLibVec()+SYS_USLEEP<<4, uintptr(10))\n\t\truntime.ExitSyscall()\n\t\truntime.EnterSyscall()\n\t\tr0, e2, e1 = CallLeFuncWithErr(GetZosLibVec()+SYS_CLOSE<<4, uintptr(fd))\n\t\truntime.ExitSyscall()\n\t}\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// Dummy function: there are no semantics for Madvise on z/OS\nfunc Madvise(b []byte, advice int) (err error) {\n\treturn\n}\n\nfunc Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\treturn mapper.Mmap(fd, offset, length, prot, flags)\n}\n\nfunc Munmap(b []byte) (err error) {\n\treturn mapper.Munmap(b)\n}\n\n//sys   Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A\n//sysnb\tGetgid() (gid int)\n//sysnb\tGetpid() (pid int)\n//sysnb\tGetpgid(pid int) (pgid int, err error) = SYS_GETPGID\n\nfunc Getpgrp() (pid int) {\n\tpid, _ = Getpgid(0)\n\treturn\n}\n\n//sysnb\tGetppid() (pid int)\n//sys\tGetpriority(which int, who int) (prio int, err error)\n//sysnb\tGetrlimit(resource int, rlim *Rlimit) (err error) = SYS_GETRLIMIT\n\n//sysnb getrusage(who int, rusage *rusage_zos) (err error) = SYS_GETRUSAGE\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\tvar ruz rusage_zos\n\terr = getrusage(who, &ruz)\n\t//Only the first two fields of Rusage are set\n\trusage.Utime.Sec = ruz.Utime.Sec\n\trusage.Utime.Usec = int64(ruz.Utime.Usec)\n\trusage.Stime.Sec = ruz.Stime.Sec\n\trusage.Stime.Usec = int64(ruz.Stime.Usec)\n\treturn\n}\n\n//sys\tGetegid() (egid int) = SYS_GETEGID\n//sys\tGeteuid() (euid int) = SYS_GETEUID\n//sysnb Getsid(pid int) (sid int, err error) = SYS_GETSID\n//sysnb\tGetuid() (uid int)\n//sysnb\tKill(pid int, sig Signal) (err error)\n//sys\tLchown(path string, uid int, gid int) (err error) = SYS___LCHOWN_A\n//sys\tLink(path string, link string) (err error) = SYS___LINK_A\n//sys\tLinkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) = SYS___LINKAT_A\n//sys\tListen(s int, n int) (err error)\n//sys\tlstat(path string, stat *Stat_LE_t) (err error) = SYS___LSTAT_A\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar statLE Stat_LE_t\n\terr = lstat(path, &statLE)\n\tcopyStat(stat, &statLE)\n\treturn\n}\n\n// for checking symlinks begins with $VERSION/ $SYSNAME/ $SYSSYMR/ $SYSSYMA/\nfunc isSpecialPath(path []byte) (v bool) {\n\tvar special = [4][8]byte{\n\t\t[8]byte{'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'},\n\t\t[8]byte{'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'},\n\t\t[8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'},\n\t\t[8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}}\n\n\tvar i, j int\n\tfor i = 0; i < len(special); i++ {\n\t\tfor j = 0; j < len(special[i]); j++ {\n\t\t\tif path[j] != special[i][j] {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif j == len(special[i]) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}\n\nfunc realpath(srcpath string, abspath []byte) (pathlen int, errno int) {\n\tvar source [1024]byte\n\tcopy(source[:], srcpath)\n\tsource[len(srcpath)] = 0\n\tret := runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___REALPATH_A<<4, //__realpath_a()\n\t\t[]uintptr{uintptr(unsafe.Pointer(&source[0])),\n\t\t\tuintptr(unsafe.Pointer(&abspath[0]))})\n\tif ret != 0 {\n\t\tindex := bytes.IndexByte(abspath[:], byte(0))\n\t\tif index != -1 {\n\t\t\treturn index, 0\n\t\t}\n\t} else {\n\t\terrptr := (*int)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4, []uintptr{}))) //__errno()\n\t\treturn 0, *errptr\n\t}\n\treturn 0, 245 // EBADDATA   245\n}\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tn = int(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___READLINK_A<<4,\n\t\t[]uintptr{uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))}))\n\truntime.KeepAlive(unsafe.Pointer(_p0))\n\tif n == -1 {\n\t\tvalue := *(*int32)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4, []uintptr{})))\n\t\terr = errnoErr(Errno(value))\n\t} else {\n\t\tif buf[0] == '$' {\n\t\t\tif isSpecialPath(buf[1:9]) {\n\t\t\t\tcnt, err1 := realpath(path, buf)\n\t\t\t\tif err1 == 0 {\n\t\t\t\t\tn = cnt\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\nfunc impl_Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___READLINKAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t\treturn n, err\n\t} else {\n\t\tif buf[0] == '$' {\n\t\t\tif isSpecialPath(buf[1:9]) {\n\t\t\t\tcnt, err1 := realpath(path, buf)\n\t\t\t\tif err1 == 0 {\n\t\t\t\t\tn = cnt\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_ReadlinkatAddr() *(func(dirfd int, path string, buf []byte) (n int, err error))\n\nvar Readlinkat = enter_Readlinkat\n\nfunc enter_Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tfuncref := get_ReadlinkatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___READLINKAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Readlinkat\n\t} else {\n\t\t*funcref = error_Readlinkat\n\t}\n\treturn (*funcref)(dirfd, path, buf)\n}\n\nfunc error_Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tn = -1\n\terr = ENOSYS\n\treturn\n}\n\n//sys\tMkdir(path string, mode uint32) (err error) = SYS___MKDIR_A\n//sys\tMkdirat(dirfd int, path string, mode uint32) (err error) = SYS___MKDIRAT_A\n//sys   Mkfifo(path string, mode uint32) (err error) = SYS___MKFIFO_A\n//sys\tMknod(path string, mode uint32, dev int) (err error) = SYS___MKNOD_A\n//sys\tMknodat(dirfd int, path string, mode uint32, dev int) (err error) = SYS___MKNODAT_A\n//sys\tPivotRoot(newroot string, oldroot string) (err error) = SYS___PIVOT_ROOT_A\n//sys\tPread(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPwrite(fd int, p []byte, offset int64) (n int, err error)\n//sys\tPrctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) = SYS___PRCTL_A\n//sysnb\tPrlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT\n//sys\tRename(from string, to string) (err error) = SYS___RENAME_A\n//sys\tRenameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) = SYS___RENAMEAT_A\n//sys\tRenameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) = SYS___RENAMEAT2_A\n//sys\tRmdir(path string) (err error) = SYS___RMDIR_A\n//sys   Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK\n//sys\tSetegid(egid int) (err error) = SYS_SETEGID\n//sys\tSeteuid(euid int) (err error) = SYS_SETEUID\n//sys\tSethostname(p []byte) (err error) = SYS___SETHOSTNAME_A\n//sys   Setns(fd int, nstype int) (err error) = SYS_SETNS\n//sys\tSetpriority(which int, who int, prio int) (err error)\n//sysnb\tSetpgid(pid int, pgid int) (err error) = SYS_SETPGID\n//sysnb\tSetrlimit(resource int, lim *Rlimit) (err error)\n//sysnb\tSetregid(rgid int, egid int) (err error) = SYS_SETREGID\n//sysnb\tSetreuid(ruid int, euid int) (err error) = SYS_SETREUID\n//sysnb\tSetsid() (pid int, err error) = SYS_SETSID\n//sys\tSetuid(uid int) (err error) = SYS_SETUID\n//sys\tSetgid(uid int) (err error) = SYS_SETGID\n//sys\tShutdown(fd int, how int) (err error)\n//sys\tstat(path string, statLE *Stat_LE_t) (err error) = SYS___STAT_A\n\nfunc Stat(path string, sta *Stat_t) (err error) {\n\tvar statLE Stat_LE_t\n\terr = stat(path, &statLE)\n\tcopyStat(sta, &statLE)\n\treturn\n}\n\n//sys\tSymlink(path string, link string) (err error) = SYS___SYMLINK_A\n//sys\tSymlinkat(oldPath string, dirfd int, newPath string) (err error) = SYS___SYMLINKAT_A\n//sys\tSync() = SYS_SYNC\n//sys\tTruncate(path string, length int64) (err error) = SYS___TRUNCATE_A\n//sys\tTcgetattr(fildes int, termptr *Termios) (err error) = SYS_TCGETATTR\n//sys\tTcsetattr(fildes int, when int, termptr *Termios) (err error) = SYS_TCSETATTR\n//sys\tUmask(mask int) (oldmask int)\n//sys\tUnlink(path string) (err error) = SYS___UNLINK_A\n//sys\tUnlinkat(dirfd int, path string, flags int) (err error) = SYS___UNLINKAT_A\n//sys\tUtime(path string, utim *Utimbuf) (err error) = SYS___UTIME_A\n\n//sys\topen(path string, mode int, perm uint32) (fd int, err error) = SYS___OPEN_A\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tif mode&O_ACCMODE == 0 {\n\t\tmode |= O_RDONLY\n\t}\n\treturn open(path, mode, perm)\n}\n\n//sys\topenat(dirfd int, path string, flags int, mode uint32) (fd int, err error) = SYS___OPENAT_A\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tif flags&O_ACCMODE == 0 {\n\t\tflags |= O_RDONLY\n\t}\n\treturn openat(dirfd, path, flags, mode)\n}\n\n//sys\topenat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) = SYS___OPENAT2_A\n\nfunc Openat2(dirfd int, path string, how *OpenHow) (fd int, err error) {\n\tif how.Flags&O_ACCMODE == 0 {\n\t\thow.Flags |= O_RDONLY\n\t}\n\treturn openat2(dirfd, path, how, SizeofOpenHow)\n}\n\nfunc ZosFdToPath(dirfd int) (path string, err error) {\n\tvar buffer [1024]byte\n\truntime.EnterSyscall()\n\tret, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_W_IOCTL<<4, uintptr(dirfd), 17, 1024, uintptr(unsafe.Pointer(&buffer[0])))\n\truntime.ExitSyscall()\n\tif ret == 0 {\n\t\tzb := bytes.IndexByte(buffer[:], 0)\n\t\tif zb == -1 {\n\t\t\tzb = len(buffer)\n\t\t}\n\t\tCallLeFuncWithErr(GetZosLibVec()+SYS___E2A_L<<4, uintptr(unsafe.Pointer(&buffer[0])), uintptr(zb))\n\t\treturn string(buffer[:zb]), nil\n\t}\n\treturn \"\", errnoErr2(e1, e2)\n}\n\n//sys\tremove(path string) (err error)\n\nfunc Remove(path string) error {\n\treturn remove(path)\n}\n\nconst ImplementsGetwd = true\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar p unsafe.Pointer\n\tif len(buf) > 0 {\n\t\tp = unsafe.Pointer(&buf[0])\n\t} else {\n\t\tp = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___GETCWD_A<<4, uintptr(p), uintptr(len(buf)))\n\truntime.ExitSyscall()\n\tn = clen(buf) + 1\n\tif r0 == 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Getwd() (wd string, err error) {\n\tvar buf [PathMax]byte\n\tn, err := Getcwd(buf[0:])\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\t// Getcwd returns the number of bytes written to buf, including the NUL.\n\tif n < 1 || n > len(buf) || buf[n-1] != 0 {\n\t\treturn \"\", EINVAL\n\t}\n\treturn string(buf[0 : n-1]), nil\n}\n\nfunc Getgroups() (gids []int, err error) {\n\tn, err := getgroups(0, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif n == 0 {\n\t\treturn nil, nil\n\t}\n\n\t// Sanity check group count.  Max is 1<<16 on Linux.\n\tif n < 0 || n > 1<<20 {\n\t\treturn nil, EINVAL\n\t}\n\n\ta := make([]_Gid_t, n)\n\tn, err = getgroups(n, &a[0])\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tgids = make([]int, n)\n\tfor i, v := range a[0:n] {\n\t\tgids[i] = int(v)\n\t}\n\treturn\n}\n\nfunc Setgroups(gids []int) (err error) {\n\tif len(gids) == 0 {\n\t\treturn setgroups(0, nil)\n\t}\n\n\ta := make([]_Gid_t, len(gids))\n\tfor i, v := range gids {\n\t\ta[i] = _Gid_t(v)\n\t}\n\treturn setgroups(len(a), &a[0])\n}\n\nfunc gettid() uint64\n\nfunc Gettid() (tid int) {\n\treturn int(gettid())\n}\n\ntype WaitStatus uint32\n\n// Wait status is 7 bits at bottom, either 0 (exited),\n// 0x7F (stopped), or a signal number that caused an exit.\n// The 0x80 bit is whether there was a core dump.\n// An extra number (exit code, signal causing a stop)\n// is in the high bits.  At least that's the idea.\n// There are various irregularities.  For example, the\n// \"continued\" status is 0xFFFF, distinguishing itself\n// from stopped via the core dump bit.\n\nconst (\n\tmask    = 0x7F\n\tcore    = 0x80\n\texited  = 0x00\n\tstopped = 0x7F\n\tshift   = 8\n)\n\nfunc (w WaitStatus) Exited() bool { return w&mask == exited }\n\nfunc (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited }\n\nfunc (w WaitStatus) Stopped() bool { return w&0xFF == stopped }\n\nfunc (w WaitStatus) Continued() bool { return w == 0xFFFF }\n\nfunc (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 }\n\nfunc (w WaitStatus) ExitStatus() int {\n\tif !w.Exited() {\n\t\treturn -1\n\t}\n\treturn int(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) Signal() Signal {\n\tif !w.Signaled() {\n\t\treturn -1\n\t}\n\treturn Signal(w & mask)\n}\n\nfunc (w WaitStatus) StopSignal() Signal {\n\tif !w.Stopped() {\n\t\treturn -1\n\t}\n\treturn Signal(w>>shift) & 0xFF\n}\n\nfunc (w WaitStatus) TrapCause() int { return -1 }\n\n//sys\twaitid(idType int, id int, info *Siginfo, options int) (err error)\n\nfunc Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) {\n\treturn waitid(idType, id, info, options)\n}\n\n//sys\twaitpid(pid int, wstatus *_C_int, options int) (wpid int, err error)\n\nfunc impl_Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WAIT4<<4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)))\n\truntime.ExitSyscall()\n\twpid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_Wait4Addr() *(func(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error))\n\nvar Wait4 = enter_Wait4\n\nfunc enter_Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\tfuncref := get_Wait4Addr()\n\tif funcptrtest(GetZosLibVec()+SYS_WAIT4<<4, \"\") == 0 {\n\t\t*funcref = impl_Wait4\n\t} else {\n\t\t*funcref = legacyWait4\n\t}\n\treturn (*funcref)(pid, wstatus, options, rusage)\n}\n\nfunc legacyWait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) {\n\t// TODO(mundaym): z/OS doesn't have wait4. I don't think getrusage does what we want.\n\t// At the moment rusage will not be touched.\n\tvar status _C_int\n\twpid, err = waitpid(pid, &status, options)\n\tif wstatus != nil {\n\t\t*wstatus = WaitStatus(status)\n\t}\n\treturn\n}\n\n//sysnb\tgettimeofday(tv *timeval_zos) (err error)\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\tvar tvz timeval_zos\n\terr = gettimeofday(&tvz)\n\ttv.Sec = tvz.Sec\n\ttv.Usec = int64(tvz.Usec)\n\treturn\n}\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tvar tv Timeval\n\terr = Gettimeofday(&tv)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tif t != nil {\n\t\t*t = Time_t(tv.Sec)\n\t}\n\treturn Time_t(tv.Sec), nil\n}\n\nfunc setTimespec(sec, nsec int64) Timespec {\n\treturn Timespec{Sec: sec, Nsec: nsec}\n}\n\nfunc setTimeval(sec, usec int64) Timeval { //fix\n\treturn Timeval{Sec: sec, Usec: usec}\n}\n\n//sysnb pipe(p *[2]_C_int) (err error)\n\nfunc Pipe(p []int) (err error) {\n\tif len(p) != 2 {\n\t\treturn EINVAL\n\t}\n\tvar pp [2]_C_int\n\terr = pipe(&pp)\n\tp[0] = int(pp[0])\n\tp[1] = int(pp[1])\n\treturn\n}\n\n//sys\tutimes(path string, timeval *[2]Timeval) (err error) = SYS___UTIMES_A\n\nfunc Utimes(path string, tv []Timeval) (err error) {\n\tif tv == nil {\n\t\treturn utimes(path, nil)\n\t}\n\tif len(tv) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n//sys\tutimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) = SYS___UTIMENSAT_A\n\nfunc validUtimensat() bool {\n\tif funcptrtest(GetZosLibVec()+SYS___UTIMENSAT_A<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS___UTIMENSAT_A<<4); err == nil {\n\t\t\treturn name == \"__utimensat_a\"\n\t\t}\n\t}\n\treturn false\n}\n\n// Begin UtimesNano\n\n//go:nosplit\nfunc get_UtimesNanoAddr() *(func(path string, ts []Timespec) (err error))\n\nvar UtimesNano = enter_UtimesNano\n\nfunc enter_UtimesNano(path string, ts []Timespec) (err error) {\n\tfuncref := get_UtimesNanoAddr()\n\tif validUtimensat() {\n\t\t*funcref = utimesNanoImpl\n\t} else {\n\t\t*funcref = legacyUtimesNano\n\t}\n\treturn (*funcref)(path, ts)\n}\n\nfunc utimesNanoImpl(path string, ts []Timespec) (err error) {\n\tif ts == nil {\n\t\treturn utimensat(AT_FDCWD, path, nil, 0)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0)\n}\n\nfunc legacyUtimesNano(path string, ts []Timespec) (err error) {\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\t// Not as efficient as it could be because Timespec and\n\t// Timeval have different types in the different OSes\n\ttv := [2]Timeval{\n\t\tNsecToTimeval(TimespecToNsec(ts[0])),\n\t\tNsecToTimeval(TimespecToNsec(ts[1])),\n\t}\n\treturn utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0])))\n}\n\n// End UtimesNano\n\n// Begin UtimesNanoAt\n\n//go:nosplit\nfunc get_UtimesNanoAtAddr() *(func(dirfd int, path string, ts []Timespec, flags int) (err error))\n\nvar UtimesNanoAt = enter_UtimesNanoAt\n\nfunc enter_UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) (err error) {\n\tfuncref := get_UtimesNanoAtAddr()\n\tif validUtimensat() {\n\t\t*funcref = utimesNanoAtImpl\n\t} else {\n\t\t*funcref = legacyUtimesNanoAt\n\t}\n\treturn (*funcref)(dirfd, path, ts, flags)\n}\n\nfunc utimesNanoAtImpl(dirfd int, path string, ts []Timespec, flags int) (err error) {\n\tif ts == nil {\n\t\treturn utimensat(dirfd, path, nil, flags)\n\t}\n\tif len(ts) != 2 {\n\t\treturn EINVAL\n\t}\n\treturn utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags)\n}\n\nfunc legacyUtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) (err error) {\n\tif path[0] != '/' {\n\t\tdirPath, err := ZosFdToPath(dirfd)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpath = dirPath + \"/\" + path\n\t}\n\tif flags == AT_SYMLINK_NOFOLLOW {\n\t\tif len(ts) != 2 {\n\t\t\treturn EINVAL\n\t\t}\n\n\t\tif ts[0].Nsec >= 5e8 {\n\t\t\tts[0].Sec++\n\t\t}\n\t\tts[0].Nsec = 0\n\t\tif ts[1].Nsec >= 5e8 {\n\t\t\tts[1].Sec++\n\t\t}\n\t\tts[1].Nsec = 0\n\n\t\t// Not as efficient as it could be because Timespec and\n\t\t// Timeval have different types in the different OSes\n\t\ttv := []Timeval{\n\t\t\tNsecToTimeval(TimespecToNsec(ts[0])),\n\t\t\tNsecToTimeval(TimespecToNsec(ts[1])),\n\t\t}\n\t\treturn Lutimes(path, tv)\n\t}\n\treturn UtimesNano(path, ts)\n}\n\n// End UtimesNanoAt\n\nfunc Getsockname(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getsockname(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\t// TODO(neeilan) : Remove this 0 ( added to get sys/unix compiling on z/OS )\n\treturn anyToSockaddr(0, &rsa)\n}\n\nconst (\n\t// identifier constants\n\tnwmHeaderIdentifier    = 0xd5e6d4c8\n\tnwmFilterIdentifier    = 0xd5e6d4c6\n\tnwmTCPConnIdentifier   = 0xd5e6d4c3\n\tnwmRecHeaderIdentifier = 0xd5e6d4d9\n\tnwmIPStatsIdentifier   = 0xd5e6d4c9d7e2e340\n\tnwmIPGStatsIdentifier  = 0xd5e6d4c9d7c7e2e3\n\tnwmTCPStatsIdentifier  = 0xd5e6d4e3c3d7e2e3\n\tnwmUDPStatsIdentifier  = 0xd5e6d4e4c4d7e2e3\n\tnwmICMPGStatsEntry     = 0xd5e6d4c9c3d4d7c7\n\tnwmICMPTStatsEntry     = 0xd5e6d4c9c3d4d7e3\n\n\t// nwmHeader constants\n\tnwmVersion1   = 1\n\tnwmVersion2   = 2\n\tnwmCurrentVer = 2\n\n\tnwmTCPConnType     = 1\n\tnwmGlobalStatsType = 14\n\n\t// nwmFilter constants\n\tnwmFilterLclAddrMask = 0x20000000 // Local address\n\tnwmFilterSrcAddrMask = 0x20000000 // Source address\n\tnwmFilterLclPortMask = 0x10000000 // Local port\n\tnwmFilterSrcPortMask = 0x10000000 // Source port\n\n\t// nwmConnEntry constants\n\tnwmTCPStateClosed   = 1\n\tnwmTCPStateListen   = 2\n\tnwmTCPStateSynSent  = 3\n\tnwmTCPStateSynRcvd  = 4\n\tnwmTCPStateEstab    = 5\n\tnwmTCPStateFinWait1 = 6\n\tnwmTCPStateFinWait2 = 7\n\tnwmTCPStateClosWait = 8\n\tnwmTCPStateLastAck  = 9\n\tnwmTCPStateClosing  = 10\n\tnwmTCPStateTimeWait = 11\n\tnwmTCPStateDeletTCB = 12\n\n\t// Existing constants on linux\n\tBPF_TCP_CLOSE        = 1\n\tBPF_TCP_LISTEN       = 2\n\tBPF_TCP_SYN_SENT     = 3\n\tBPF_TCP_SYN_RECV     = 4\n\tBPF_TCP_ESTABLISHED  = 5\n\tBPF_TCP_FIN_WAIT1    = 6\n\tBPF_TCP_FIN_WAIT2    = 7\n\tBPF_TCP_CLOSE_WAIT   = 8\n\tBPF_TCP_LAST_ACK     = 9\n\tBPF_TCP_CLOSING      = 10\n\tBPF_TCP_TIME_WAIT    = 11\n\tBPF_TCP_NEW_SYN_RECV = -1\n\tBPF_TCP_MAX_STATES   = -2\n)\n\ntype nwmTriplet struct {\n\toffset uint32\n\tlength uint32\n\tnumber uint32\n}\n\ntype nwmQuadruplet struct {\n\toffset uint32\n\tlength uint32\n\tnumber uint32\n\tmatch  uint32\n}\n\ntype nwmHeader struct {\n\tident       uint32\n\tlength      uint32\n\tversion     uint16\n\tnwmType     uint16\n\tbytesNeeded uint32\n\toptions     uint32\n\t_           [16]byte\n\tinputDesc   nwmTriplet\n\toutputDesc  nwmQuadruplet\n}\n\ntype nwmFilter struct {\n\tident         uint32\n\tflags         uint32\n\tresourceName  [8]byte\n\tresourceId    uint32\n\tlistenerId    uint32\n\tlocal         [28]byte // union of sockaddr4 and sockaddr6\n\tremote        [28]byte // union of sockaddr4 and sockaddr6\n\t_             uint16\n\t_             uint16\n\tasid          uint16\n\t_             [2]byte\n\ttnLuName      [8]byte\n\ttnMonGrp      uint32\n\ttnAppl        [8]byte\n\tapplData      [40]byte\n\tnInterface    [16]byte\n\tdVipa         [16]byte\n\tdVipaPfx      uint16\n\tdVipaPort     uint16\n\tdVipaFamily   byte\n\t_             [3]byte\n\tdestXCF       [16]byte\n\tdestXCFPfx    uint16\n\tdestXCFFamily byte\n\t_             [1]byte\n\ttargIP        [16]byte\n\ttargIPPfx     uint16\n\ttargIPFamily  byte\n\t_             [1]byte\n\t_             [20]byte\n}\n\ntype nwmRecHeader struct {\n\tident  uint32\n\tlength uint32\n\tnumber byte\n\t_      [3]byte\n}\n\ntype nwmTCPStatsEntry struct {\n\tident             uint64\n\tcurrEstab         uint32\n\tactiveOpened      uint32\n\tpassiveOpened     uint32\n\tconnClosed        uint32\n\testabResets       uint32\n\tattemptFails      uint32\n\tpassiveDrops      uint32\n\ttimeWaitReused    uint32\n\tinSegs            uint64\n\tpredictAck        uint32\n\tpredictData       uint32\n\tinDupAck          uint32\n\tinBadSum          uint32\n\tinBadLen          uint32\n\tinShort           uint32\n\tinDiscOldTime     uint32\n\tinAllBeforeWin    uint32\n\tinSomeBeforeWin   uint32\n\tinAllAfterWin     uint32\n\tinSomeAfterWin    uint32\n\tinOutOfOrder      uint32\n\tinAfterClose      uint32\n\tinWinProbes       uint32\n\tinWinUpdates      uint32\n\toutWinUpdates     uint32\n\toutSegs           uint64\n\toutDelayAcks      uint32\n\toutRsts           uint32\n\tretransSegs       uint32\n\tretransTimeouts   uint32\n\tretransDrops      uint32\n\tpmtuRetrans       uint32\n\tpmtuErrors        uint32\n\toutWinProbes      uint32\n\tprobeDrops        uint32\n\tkeepAliveProbes   uint32\n\tkeepAliveDrops    uint32\n\tfinwait2Drops     uint32\n\tacceptCount       uint64\n\tinBulkQSegs       uint64\n\tinDiscards        uint64\n\tconnFloods        uint32\n\tconnStalls        uint32\n\tcfgEphemDef       uint16\n\tephemInUse        uint16\n\tephemHiWater      uint16\n\tflags             byte\n\t_                 [1]byte\n\tephemExhaust      uint32\n\tsmcRCurrEstabLnks uint32\n\tsmcRLnkActTimeOut uint32\n\tsmcRActLnkOpened  uint32\n\tsmcRPasLnkOpened  uint32\n\tsmcRLnksClosed    uint32\n\tsmcRCurrEstab     uint32\n\tsmcRActiveOpened  uint32\n\tsmcRPassiveOpened uint32\n\tsmcRConnClosed    uint32\n\tsmcRInSegs        uint64\n\tsmcROutSegs       uint64\n\tsmcRInRsts        uint32\n\tsmcROutRsts       uint32\n\tsmcDCurrEstabLnks uint32\n\tsmcDActLnkOpened  uint32\n\tsmcDPasLnkOpened  uint32\n\tsmcDLnksClosed    uint32\n\tsmcDCurrEstab     uint32\n\tsmcDActiveOpened  uint32\n\tsmcDPassiveOpened uint32\n\tsmcDConnClosed    uint32\n\tsmcDInSegs        uint64\n\tsmcDOutSegs       uint64\n\tsmcDInRsts        uint32\n\tsmcDOutRsts       uint32\n}\n\ntype nwmConnEntry struct {\n\tident             uint32\n\tlocal             [28]byte // union of sockaddr4 and sockaddr6\n\tremote            [28]byte // union of sockaddr4 and sockaddr6\n\tstartTime         [8]byte  // uint64, changed to prevent padding from being inserted\n\tlastActivity      [8]byte  // uint64\n\tbytesIn           [8]byte  // uint64\n\tbytesOut          [8]byte  // uint64\n\tinSegs            [8]byte  // uint64\n\toutSegs           [8]byte  // uint64\n\tstate             uint16\n\tactiveOpen        byte\n\tflag01            byte\n\toutBuffered       uint32\n\tinBuffered        uint32\n\tmaxSndWnd         uint32\n\treXmtCount        uint32\n\tcongestionWnd     uint32\n\tssThresh          uint32\n\troundTripTime     uint32\n\troundTripVar      uint32\n\tsendMSS           uint32\n\tsndWnd            uint32\n\trcvBufSize        uint32\n\tsndBufSize        uint32\n\toutOfOrderCount   uint32\n\tlcl0WindowCount   uint32\n\trmt0WindowCount   uint32\n\tdupacks           uint32\n\tflag02            byte\n\tsockOpt6Cont      byte\n\tasid              uint16\n\tresourceName      [8]byte\n\tresourceId        uint32\n\tsubtask           uint32\n\tsockOpt           byte\n\tsockOpt6          byte\n\tclusterConnFlag   byte\n\tproto             byte\n\ttargetAppl        [8]byte\n\tluName            [8]byte\n\tclientUserId      [8]byte\n\tlogMode           [8]byte\n\ttimeStamp         uint32\n\ttimeStampAge      uint32\n\tserverResourceId  uint32\n\tintfName          [16]byte\n\tttlsStatPol       byte\n\tttlsStatConn      byte\n\tttlsSSLProt       uint16\n\tttlsNegCiph       [2]byte\n\tttlsSecType       byte\n\tttlsFIPS140Mode   byte\n\tttlsUserID        [8]byte\n\tapplData          [40]byte\n\tinOldestTime      [8]byte // uint64\n\toutOldestTime     [8]byte // uint64\n\ttcpTrustedPartner byte\n\t_                 [3]byte\n\tbulkDataIntfName  [16]byte\n\tttlsNegCiph4      [4]byte\n\tsmcReason         uint32\n\tlclSMCLinkId      uint32\n\trmtSMCLinkId      uint32\n\tsmcStatus         byte\n\tsmcFlags          byte\n\t_                 [2]byte\n\trcvWnd            uint32\n\tlclSMCBufSz       uint32\n\trmtSMCBufSz       uint32\n\tttlsSessID        [32]byte\n\tttlsSessIDLen     int16\n\t_                 [1]byte\n\tsmcDStatus        byte\n\tsmcDReason        uint32\n}\n\nvar svcNameTable [][]byte = [][]byte{\n\t[]byte(\"\\xc5\\xe9\\xc2\\xd5\\xd4\\xc9\\xc6\\xf4\"), // svc_EZBNMIF4\n}\n\nconst (\n\tsvc_EZBNMIF4 = 0\n)\n\nfunc GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) {\n\tjobname := []byte(\"\\x5c\\x40\\x40\\x40\\x40\\x40\\x40\\x40\") // \"*\"\n\tresponseBuffer := [4096]byte{0}\n\tvar bufferAlet, reasonCode uint32 = 0, 0\n\tvar bufferLen, returnValue, returnCode int32 = 4096, 0, 0\n\n\tdsa := [18]uint64{0}\n\tvar argv [7]unsafe.Pointer\n\targv[0] = unsafe.Pointer(&jobname[0])\n\targv[1] = unsafe.Pointer(&responseBuffer[0])\n\targv[2] = unsafe.Pointer(&bufferAlet)\n\targv[3] = unsafe.Pointer(&bufferLen)\n\targv[4] = unsafe.Pointer(&returnValue)\n\targv[5] = unsafe.Pointer(&returnCode)\n\targv[6] = unsafe.Pointer(&reasonCode)\n\n\trequest := (*struct {\n\t\theader nwmHeader\n\t\tfilter nwmFilter\n\t})(unsafe.Pointer(&responseBuffer[0]))\n\n\tEZBNMIF4 := svcLoad(&svcNameTable[svc_EZBNMIF4][0])\n\tif EZBNMIF4 == nil {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// GetGlobalStats EZBNMIF4 call\n\trequest.header.ident = nwmHeaderIdentifier\n\trequest.header.length = uint32(unsafe.Sizeof(request.header))\n\trequest.header.version = nwmCurrentVer\n\trequest.header.nwmType = nwmGlobalStatsType\n\trequest.header.options = 0x80000000\n\n\tsvcCall(EZBNMIF4, &argv[0], &dsa[0])\n\n\t// outputDesc field is filled by EZBNMIF4 on success\n\tif returnCode != 0 || request.header.outputDesc.offset == 0 {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// Check that EZBNMIF4 returned a nwmRecHeader\n\trecHeader := (*nwmRecHeader)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset]))\n\tif recHeader.ident != nwmRecHeaderIdentifier {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// Parse nwmTriplets to get offsets of returned entries\n\tvar sections []*uint64\n\tvar sectionDesc *nwmTriplet = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[0]))\n\tfor i := uint32(0); i < uint32(recHeader.number); i++ {\n\t\toffset := request.header.outputDesc.offset + uint32(unsafe.Sizeof(*recHeader)) + i*uint32(unsafe.Sizeof(*sectionDesc))\n\t\tsectionDesc = (*nwmTriplet)(unsafe.Pointer(&responseBuffer[offset]))\n\t\tfor j := uint32(0); j < sectionDesc.number; j++ {\n\t\t\toffset = request.header.outputDesc.offset + sectionDesc.offset + j*sectionDesc.length\n\t\t\tsections = append(sections, (*uint64)(unsafe.Pointer(&responseBuffer[offset])))\n\t\t}\n\t}\n\n\t// Find nwmTCPStatsEntry in returned entries\n\tvar tcpStats *nwmTCPStatsEntry = nil\n\tfor _, ptr := range sections {\n\t\tswitch *ptr {\n\t\tcase nwmTCPStatsIdentifier:\n\t\t\tif tcpStats != nil {\n\t\t\t\treturn nil, errnoErr(EINVAL)\n\t\t\t}\n\t\t\ttcpStats = (*nwmTCPStatsEntry)(unsafe.Pointer(ptr))\n\t\tcase nwmIPStatsIdentifier:\n\t\tcase nwmIPGStatsIdentifier:\n\t\tcase nwmUDPStatsIdentifier:\n\t\tcase nwmICMPGStatsEntry:\n\t\tcase nwmICMPTStatsEntry:\n\t\tdefault:\n\t\t\treturn nil, errnoErr(EINVAL)\n\t\t}\n\t}\n\tif tcpStats == nil {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// GetConnectionDetail EZBNMIF4 call\n\tresponseBuffer = [4096]byte{0}\n\tdsa = [18]uint64{0}\n\tbufferAlet, reasonCode = 0, 0\n\tbufferLen, returnValue, returnCode = 4096, 0, 0\n\tnameptr := (*uint32)(unsafe.Pointer(uintptr(0x21c))) // Get jobname of current process\n\tnameptr = (*uint32)(unsafe.Pointer(uintptr(*nameptr + 12)))\n\targv[0] = unsafe.Pointer(uintptr(*nameptr))\n\n\trequest.header.ident = nwmHeaderIdentifier\n\trequest.header.length = uint32(unsafe.Sizeof(request.header))\n\trequest.header.version = nwmCurrentVer\n\trequest.header.nwmType = nwmTCPConnType\n\trequest.header.options = 0x80000000\n\n\trequest.filter.ident = nwmFilterIdentifier\n\n\tvar localSockaddr RawSockaddrAny\n\tsocklen := _Socklen(SizeofSockaddrAny)\n\terr := getsockname(fd, &localSockaddr, &socklen)\n\tif err != nil {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\tif localSockaddr.Addr.Family == AF_INET {\n\t\tlocalSockaddr := (*RawSockaddrInet4)(unsafe.Pointer(&localSockaddr.Addr))\n\t\tlocalSockFilter := (*RawSockaddrInet4)(unsafe.Pointer(&request.filter.local[0]))\n\t\tlocalSockFilter.Family = AF_INET\n\t\tvar i int\n\t\tfor i = 0; i < 4; i++ {\n\t\t\tif localSockaddr.Addr[i] != 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif i != 4 {\n\t\t\trequest.filter.flags |= nwmFilterLclAddrMask\n\t\t\tfor i = 0; i < 4; i++ {\n\t\t\t\tlocalSockFilter.Addr[i] = localSockaddr.Addr[i]\n\t\t\t}\n\t\t}\n\t\tif localSockaddr.Port != 0 {\n\t\t\trequest.filter.flags |= nwmFilterLclPortMask\n\t\t\tlocalSockFilter.Port = localSockaddr.Port\n\t\t}\n\t} else if localSockaddr.Addr.Family == AF_INET6 {\n\t\tlocalSockaddr := (*RawSockaddrInet6)(unsafe.Pointer(&localSockaddr.Addr))\n\t\tlocalSockFilter := (*RawSockaddrInet6)(unsafe.Pointer(&request.filter.local[0]))\n\t\tlocalSockFilter.Family = AF_INET6\n\t\tvar i int\n\t\tfor i = 0; i < 16; i++ {\n\t\t\tif localSockaddr.Addr[i] != 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif i != 16 {\n\t\t\trequest.filter.flags |= nwmFilterLclAddrMask\n\t\t\tfor i = 0; i < 16; i++ {\n\t\t\t\tlocalSockFilter.Addr[i] = localSockaddr.Addr[i]\n\t\t\t}\n\t\t}\n\t\tif localSockaddr.Port != 0 {\n\t\t\trequest.filter.flags |= nwmFilterLclPortMask\n\t\t\tlocalSockFilter.Port = localSockaddr.Port\n\t\t}\n\t}\n\n\tsvcCall(EZBNMIF4, &argv[0], &dsa[0])\n\n\t// outputDesc field is filled by EZBNMIF4 on success\n\tif returnCode != 0 || request.header.outputDesc.offset == 0 {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// Check that EZBNMIF4 returned a nwmConnEntry\n\tconn := (*nwmConnEntry)(unsafe.Pointer(&responseBuffer[request.header.outputDesc.offset]))\n\tif conn.ident != nwmTCPConnIdentifier {\n\t\treturn nil, errnoErr(EINVAL)\n\t}\n\n\t// Copy data from the returned data structures into tcpInfo\n\t// Stats from nwmConnEntry are specific to that connection.\n\t// Stats from nwmTCPStatsEntry are global (to the interface?)\n\t// Fields may not be an exact match. Some fields have no equivalent.\n\tvar tcpinfo TCPInfo\n\ttcpinfo.State = uint8(conn.state)\n\ttcpinfo.Ca_state = 0 // dummy\n\ttcpinfo.Retransmits = uint8(tcpStats.retransSegs)\n\ttcpinfo.Probes = uint8(tcpStats.outWinProbes)\n\ttcpinfo.Backoff = 0 // dummy\n\ttcpinfo.Options = 0 // dummy\n\ttcpinfo.Rto = tcpStats.retransTimeouts\n\ttcpinfo.Ato = tcpStats.outDelayAcks\n\ttcpinfo.Snd_mss = conn.sendMSS\n\ttcpinfo.Rcv_mss = conn.sendMSS // dummy\n\ttcpinfo.Unacked = 0            // dummy\n\ttcpinfo.Sacked = 0             // dummy\n\ttcpinfo.Lost = 0               // dummy\n\ttcpinfo.Retrans = conn.reXmtCount\n\ttcpinfo.Fackets = 0 // dummy\n\ttcpinfo.Last_data_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.lastActivity[0])))\n\ttcpinfo.Last_ack_sent = uint32(*(*uint64)(unsafe.Pointer(&conn.outOldestTime[0])))\n\ttcpinfo.Last_data_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0])))\n\ttcpinfo.Last_ack_recv = uint32(*(*uint64)(unsafe.Pointer(&conn.inOldestTime[0])))\n\ttcpinfo.Pmtu = conn.sendMSS // dummy, NWMIfRouteMtu is a candidate\n\ttcpinfo.Rcv_ssthresh = conn.ssThresh\n\ttcpinfo.Rtt = conn.roundTripTime\n\ttcpinfo.Rttvar = conn.roundTripVar\n\ttcpinfo.Snd_ssthresh = conn.ssThresh // dummy\n\ttcpinfo.Snd_cwnd = conn.congestionWnd\n\ttcpinfo.Advmss = conn.sendMSS        // dummy\n\ttcpinfo.Reordering = 0               // dummy\n\ttcpinfo.Rcv_rtt = conn.roundTripTime // dummy\n\ttcpinfo.Rcv_space = conn.sendMSS     // dummy\n\ttcpinfo.Total_retrans = conn.reXmtCount\n\n\tsvcUnload(&svcNameTable[svc_EZBNMIF4][0], EZBNMIF4)\n\n\treturn &tcpinfo, nil\n}\n\n// GetsockoptString returns the string value of the socket option opt for the\n// socket associated with fd at the given socket level.\nfunc GetsockoptString(fd, level, opt int) (string, error) {\n\tbuf := make([]byte, 256)\n\tvallen := _Socklen(len(buf))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&buf[0]), &vallen)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn ByteSliceToString(buf[:vallen]), nil\n}\n\nfunc Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {\n\tvar msg Msghdr\n\tvar rsa RawSockaddrAny\n\tmsg.Name = (*byte)(unsafe.Pointer(&rsa))\n\tmsg.Namelen = SizeofSockaddrAny\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = (*byte)(unsafe.Pointer(&p[0]))\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// receive at least one normal byte\n\t\tif len(p) == 0 {\n\t\t\tiov.Base = &dummy\n\t\t\tiov.SetLen(1)\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = recvmsg(fd, &msg, flags); err != nil {\n\t\treturn\n\t}\n\toobn = int(msg.Controllen)\n\trecvflags = int(msg.Flags)\n\t// source address is only specified if the socket is unconnected\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\t// TODO(neeilan): Remove 0 arg added to get this compiling on z/OS\n\t\tfrom, err = anyToSockaddr(0, &rsa)\n\t}\n\treturn\n}\n\nfunc Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {\n\t_, err = SendmsgN(fd, p, oob, to, flags)\n\treturn\n}\n\nfunc SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {\n\tvar ptr unsafe.Pointer\n\tvar salen _Socklen\n\tif to != nil {\n\t\tvar err error\n\t\tptr, salen, err = to.sockaddr()\n\t\tif err != nil {\n\t\t\treturn 0, err\n\t\t}\n\t}\n\tvar msg Msghdr\n\tmsg.Name = (*byte)(unsafe.Pointer(ptr))\n\tmsg.Namelen = int32(salen)\n\tvar iov Iovec\n\tif len(p) > 0 {\n\t\tiov.Base = (*byte)(unsafe.Pointer(&p[0]))\n\t\tiov.SetLen(len(p))\n\t}\n\tvar dummy byte\n\tif len(oob) > 0 {\n\t\t// send at least one normal byte\n\t\tif len(p) == 0 {\n\t\t\tiov.Base = &dummy\n\t\t\tiov.SetLen(1)\n\t\t}\n\t\tmsg.Control = (*byte)(unsafe.Pointer(&oob[0]))\n\t\tmsg.SetControllen(len(oob))\n\t}\n\tmsg.Iov = &iov\n\tmsg.Iovlen = 1\n\tif n, err = sendmsg(fd, &msg, flags); err != nil {\n\t\treturn 0, err\n\t}\n\tif len(oob) > 0 && len(p) == 0 {\n\t\tn = 0\n\t}\n\treturn n, nil\n}\n\nfunc Opendir(name string) (uintptr, error) {\n\tp, err := BytePtrFromString(name)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\terr = nil\n\truntime.EnterSyscall()\n\tdir, e2, e1 := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___OPENDIR_A<<4, uintptr(unsafe.Pointer(p)))\n\truntime.ExitSyscall()\n\truntime.KeepAlive(unsafe.Pointer(p))\n\tif dir == 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn dir, err\n}\n\n// clearsyscall.Errno resets the errno value to 0.\nfunc clearErrno()\n\nfunc Closedir(dir uintptr) error {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_CLOSEDIR<<4, dir)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\treturn errnoErr2(e1, e2)\n\t}\n\treturn nil\n}\n\nfunc Seekdir(dir uintptr, pos int) {\n\truntime.EnterSyscall()\n\tCallLeFuncWithErr(GetZosLibVec()+SYS_SEEKDIR<<4, dir, uintptr(pos))\n\truntime.ExitSyscall()\n}\n\nfunc Telldir(dir uintptr) (int, error) {\n\tp, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TELLDIR<<4, dir)\n\tpos := int(p)\n\tif int64(p) == -1 {\n\t\treturn pos, errnoErr2(e1, e2)\n\t}\n\treturn pos, nil\n}\n\n// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {\n\t// struct flock is packed on z/OS. We can't emulate that in Go so\n\t// instead we pack it here.\n\tvar flock [24]byte\n\t*(*int16)(unsafe.Pointer(&flock[0])) = lk.Type\n\t*(*int16)(unsafe.Pointer(&flock[2])) = lk.Whence\n\t*(*int64)(unsafe.Pointer(&flock[4])) = lk.Start\n\t*(*int64)(unsafe.Pointer(&flock[12])) = lk.Len\n\t*(*int32)(unsafe.Pointer(&flock[20])) = lk.Pid\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, fd, uintptr(cmd), uintptr(unsafe.Pointer(&flock)))\n\truntime.ExitSyscall()\n\tlk.Type = *(*int16)(unsafe.Pointer(&flock[0]))\n\tlk.Whence = *(*int16)(unsafe.Pointer(&flock[2]))\n\tlk.Start = *(*int64)(unsafe.Pointer(&flock[4]))\n\tlk.Len = *(*int64)(unsafe.Pointer(&flock[12]))\n\tlk.Pid = *(*int32)(unsafe.Pointer(&flock[20]))\n\tif r0 == 0 {\n\t\treturn nil\n\t}\n\treturn errnoErr2(e1, e2)\n}\n\nfunc impl_Flock(fd int, how int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FLOCK<<4, uintptr(fd), uintptr(how))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FlockAddr() *(func(fd int, how int) (err error))\n\nvar Flock = enter_Flock\n\nfunc validFlock(fp uintptr) bool {\n\tif funcptrtest(GetZosLibVec()+SYS_FLOCK<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS_FLOCK<<4); err == nil {\n\t\t\treturn name == \"flock\"\n\t\t}\n\t}\n\treturn false\n}\n\nfunc enter_Flock(fd int, how int) (err error) {\n\tfuncref := get_FlockAddr()\n\tif validFlock(GetZosLibVec() + SYS_FLOCK<<4) {\n\t\t*funcref = impl_Flock\n\t} else {\n\t\t*funcref = legacyFlock\n\t}\n\treturn (*funcref)(fd, how)\n}\n\nfunc legacyFlock(fd int, how int) error {\n\n\tvar flock_type int16\n\tvar fcntl_cmd int\n\n\tswitch how {\n\tcase LOCK_SH | LOCK_NB:\n\t\tflock_type = F_RDLCK\n\t\tfcntl_cmd = F_SETLK\n\tcase LOCK_EX | LOCK_NB:\n\t\tflock_type = F_WRLCK\n\t\tfcntl_cmd = F_SETLK\n\tcase LOCK_EX:\n\t\tflock_type = F_WRLCK\n\t\tfcntl_cmd = F_SETLKW\n\tcase LOCK_UN:\n\t\tflock_type = F_UNLCK\n\t\tfcntl_cmd = F_SETLKW\n\tdefault:\n\t}\n\n\tflock := Flock_t{\n\t\tType:   int16(flock_type),\n\t\tWhence: int16(0),\n\t\tStart:  int64(0),\n\t\tLen:    int64(0),\n\t\tPid:    int32(Getppid()),\n\t}\n\n\terr := FcntlFlock(uintptr(fd), fcntl_cmd, &flock)\n\treturn err\n}\n\nfunc Mlock(b []byte) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_NONSWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Mlock2(b []byte, flags int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_NONSWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Mlockall(flags int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_NONSWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Munlock(b []byte) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_SWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc Munlockall() (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MLOCKALL<<4, _BPX_SWAP)\n\truntime.ExitSyscall()\n\tif r0 != 0 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\nfunc ClockGettime(clockid int32, ts *Timespec) error {\n\n\tvar ticks_per_sec uint32 = 100 //TODO(kenan): value is currently hardcoded; need sysconf() call otherwise\n\tvar nsec_per_sec int64 = 1000000000\n\n\tif ts == nil {\n\t\treturn EFAULT\n\t}\n\tif clockid == CLOCK_REALTIME || clockid == CLOCK_MONOTONIC {\n\t\tvar nanotime int64 = runtime.Nanotime1()\n\t\tts.Sec = nanotime / nsec_per_sec\n\t\tts.Nsec = nanotime % nsec_per_sec\n\t} else if clockid == CLOCK_PROCESS_CPUTIME_ID || clockid == CLOCK_THREAD_CPUTIME_ID {\n\t\tvar tm Tms\n\t\t_, err := Times(&tm)\n\t\tif err != nil {\n\t\t\treturn EFAULT\n\t\t}\n\t\tts.Sec = int64(tm.Utime / ticks_per_sec)\n\t\tts.Nsec = int64(tm.Utime) * nsec_per_sec / int64(ticks_per_sec)\n\t} else {\n\t\treturn EINVAL\n\t}\n\treturn nil\n}\n\n// Chtag\n\n//go:nosplit\nfunc get_ChtagAddr() *(func(path string, ccsid uint64, textbit uint64) error)\n\nvar Chtag = enter_Chtag\n\nfunc enter_Chtag(path string, ccsid uint64, textbit uint64) error {\n\tfuncref := get_ChtagAddr()\n\tif validSetxattr() {\n\t\t*funcref = impl_Chtag\n\t} else {\n\t\t*funcref = legacy_Chtag\n\t}\n\treturn (*funcref)(path, ccsid, textbit)\n}\n\nfunc legacy_Chtag(path string, ccsid uint64, textbit uint64) error {\n\ttag := ccsid<<16 | textbit<<15\n\tvar tag_buff [8]byte\n\tDecodeData(tag_buff[:], 8, tag)\n\treturn Setxattr(path, \"filetag\", tag_buff[:], XATTR_REPLACE)\n}\n\nfunc impl_Chtag(path string, ccsid uint64, textbit uint64) error {\n\ttag := ccsid<<16 | textbit<<15\n\tvar tag_buff [4]byte\n\tDecodeData(tag_buff[:], 4, tag)\n\treturn Setxattr(path, \"system.filetag\", tag_buff[:], XATTR_REPLACE)\n}\n\n// End of Chtag\n\n// Nanosleep\n\n//go:nosplit\nfunc get_NanosleepAddr() *(func(time *Timespec, leftover *Timespec) error)\n\nvar Nanosleep = enter_Nanosleep\n\nfunc enter_Nanosleep(time *Timespec, leftover *Timespec) error {\n\tfuncref := get_NanosleepAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_NANOSLEEP<<4, \"\") == 0 {\n\t\t*funcref = impl_Nanosleep\n\t} else {\n\t\t*funcref = legacyNanosleep\n\t}\n\treturn (*funcref)(time, leftover)\n}\n\nfunc impl_Nanosleep(time *Timespec, leftover *Timespec) error {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_NANOSLEEP<<4, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\treturn errnoErr2(e1, e2)\n\t}\n\treturn nil\n}\n\nfunc legacyNanosleep(time *Timespec, leftover *Timespec) error {\n\tt0 := runtime.Nanotime1()\n\tvar secrem uint32\n\tvar nsecrem uint32\n\ttotal := time.Sec*1000000000 + time.Nsec\n\telapsed := runtime.Nanotime1() - t0\n\tvar rv int32\n\tvar rc int32\n\tvar err error\n\t// repeatedly sleep for 1 second until less than 1 second left\n\tfor total-elapsed > 1000000000 {\n\t\trv, rc, _ = BpxCondTimedWait(uint32(1), uint32(0), uint32(CW_CONDVAR), &secrem, &nsecrem)\n\t\tif rv != 0 && rc != 112 { // 112 is EAGAIN\n\t\t\tif leftover != nil && rc == 120 { // 120 is EINTR\n\t\t\t\tleftover.Sec = int64(secrem)\n\t\t\t\tleftover.Nsec = int64(nsecrem)\n\t\t\t}\n\t\t\terr = Errno(rc)\n\t\t\treturn err\n\t\t}\n\t\telapsed = runtime.Nanotime1() - t0\n\t}\n\t// sleep the remainder\n\tif total > elapsed {\n\t\trv, rc, _ = BpxCondTimedWait(uint32(0), uint32(total-elapsed), uint32(CW_CONDVAR), &secrem, &nsecrem)\n\t}\n\tif leftover != nil && rc == 120 {\n\t\tleftover.Sec = int64(secrem)\n\t\tleftover.Nsec = int64(nsecrem)\n\t}\n\tif rv != 0 && rc != 112 {\n\t\terr = Errno(rc)\n\t}\n\treturn err\n}\n\n// End of Nanosleep\n\nvar (\n\tStdin  = 0\n\tStdout = 1\n\tStderr = 2\n)\n\n// Do the interface allocations only once for common\n// Errno values.\nvar (\n\terrEAGAIN error = syscall.EAGAIN\n\terrEINVAL error = syscall.EINVAL\n\terrENOENT error = syscall.ENOENT\n)\n\nvar ZosTraceLevel int\nvar ZosTracefile *os.File\n\nvar (\n\tsignalNameMapOnce sync.Once\n\tsignalNameMap     map[string]syscall.Signal\n)\n\n// errnoErr returns common boxed Errno values, to prevent\n// allocations at runtime.\nfunc errnoErr(e Errno) error {\n\tswitch e {\n\tcase 0:\n\t\treturn nil\n\tcase EAGAIN:\n\t\treturn errEAGAIN\n\tcase EINVAL:\n\t\treturn errEINVAL\n\tcase ENOENT:\n\t\treturn errENOENT\n\t}\n\treturn e\n}\n\nvar reg *regexp.Regexp\n\n// enhanced with zos specific errno2\nfunc errnoErr2(e Errno, e2 uintptr) error {\n\tswitch e {\n\tcase 0:\n\t\treturn nil\n\tcase EAGAIN:\n\t\treturn errEAGAIN\n\t\t/*\n\t\t\tAllow the retrieval of errno2 for EINVAL and ENOENT on zos\n\t\t\t\tcase EINVAL:\n\t\t\t\t\treturn errEINVAL\n\t\t\t\tcase ENOENT:\n\t\t\t\t\treturn errENOENT\n\t\t*/\n\t}\n\tif ZosTraceLevel > 0 {\n\t\tvar name string\n\t\tif reg == nil {\n\t\t\treg = regexp.MustCompile(\"(^unix\\\\.[^/]+$|.*\\\\/unix\\\\.[^/]+$)\")\n\t\t}\n\t\ti := 1\n\t\tpc, file, line, ok := runtime.Caller(i)\n\t\tif ok {\n\t\t\tname = runtime.FuncForPC(pc).Name()\n\t\t}\n\t\tfor ok && reg.MatchString(runtime.FuncForPC(pc).Name()) {\n\t\t\ti += 1\n\t\t\tpc, file, line, ok = runtime.Caller(i)\n\t\t}\n\t\tif ok {\n\t\t\tif ZosTracefile == nil {\n\t\t\t\tZosConsolePrintf(\"From %s:%d\\n\", file, line)\n\t\t\t\tZosConsolePrintf(\"%s: %s (errno2=0x%x)\\n\", name, e.Error(), e2)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(ZosTracefile, \"From %s:%d\\n\", file, line)\n\t\t\t\tfmt.Fprintf(ZosTracefile, \"%s: %s (errno2=0x%x)\\n\", name, e.Error(), e2)\n\t\t\t}\n\t\t} else {\n\t\t\tif ZosTracefile == nil {\n\t\t\t\tZosConsolePrintf(\"%s (errno2=0x%x)\\n\", e.Error(), e2)\n\t\t\t} else {\n\t\t\t\tfmt.Fprintf(ZosTracefile, \"%s (errno2=0x%x)\\n\", e.Error(), e2)\n\t\t\t}\n\t\t}\n\t}\n\treturn e\n}\n\n// ErrnoName returns the error name for error number e.\nfunc ErrnoName(e Errno) string {\n\ti := sort.Search(len(errorList), func(i int) bool {\n\t\treturn errorList[i].num >= e\n\t})\n\tif i < len(errorList) && errorList[i].num == e {\n\t\treturn errorList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalName returns the signal name for signal number s.\nfunc SignalName(s syscall.Signal) string {\n\ti := sort.Search(len(signalList), func(i int) bool {\n\t\treturn signalList[i].num >= s\n\t})\n\tif i < len(signalList) && signalList[i].num == s {\n\t\treturn signalList[i].name\n\t}\n\treturn \"\"\n}\n\n// SignalNum returns the syscall.Signal for signal named s,\n// or 0 if a signal with such name is not found.\n// The signal name should start with \"SIG\".\nfunc SignalNum(s string) syscall.Signal {\n\tsignalNameMapOnce.Do(func() {\n\t\tsignalNameMap = make(map[string]syscall.Signal, len(signalList))\n\t\tfor _, signal := range signalList {\n\t\t\tsignalNameMap[signal.name] = signal.num\n\t\t}\n\t})\n\treturn signalNameMap[s]\n}\n\n// clen returns the index of the first NULL byte in n or len(n) if n contains no NULL byte.\nfunc clen(n []byte) int {\n\ti := bytes.IndexByte(n, 0)\n\tif i == -1 {\n\t\ti = len(n)\n\t}\n\treturn i\n}\n\n// Mmap manager, for use by operating system-specific implementations.\n\ntype mmapper struct {\n\tsync.Mutex\n\tactive map[*byte][]byte // active mappings; key is last byte in mapping\n\tmmap   func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error)\n\tmunmap func(addr uintptr, length uintptr) error\n}\n\nfunc (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {\n\tif length <= 0 {\n\t\treturn nil, EINVAL\n\t}\n\n\t// Set __MAP_64 by default\n\tflags |= __MAP_64\n\n\t// Map the requested memory.\n\taddr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\t// Slice memory layout\n\tvar sl = struct {\n\t\taddr uintptr\n\t\tlen  int\n\t\tcap  int\n\t}{addr, length, length}\n\n\t// Use unsafe to turn sl into a []byte.\n\tb := *(*[]byte)(unsafe.Pointer(&sl))\n\n\t// Register mapping in m and return it.\n\tp := &b[cap(b)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tm.active[p] = b\n\treturn b, nil\n}\n\nfunc (m *mmapper) Munmap(data []byte) (err error) {\n\tif len(data) == 0 || len(data) != cap(data) {\n\t\treturn EINVAL\n\t}\n\n\t// Find the base of the mapping.\n\tp := &data[cap(data)-1]\n\tm.Lock()\n\tdefer m.Unlock()\n\tb := m.active[p]\n\tif b == nil || &b[0] != &data[0] {\n\t\treturn EINVAL\n\t}\n\n\t// Unmap the memory and update m.\n\tif errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil {\n\t\treturn errno\n\t}\n\tdelete(m.active, p)\n\treturn nil\n}\n\nfunc Read(fd int, p []byte) (n int, err error) {\n\tn, err = read(fd, p)\n\tif raceenabled {\n\t\tif n > 0 {\n\t\t\traceWriteRange(unsafe.Pointer(&p[0]), n)\n\t\t}\n\t\tif err == nil {\n\t\t\traceAcquire(unsafe.Pointer(&ioSync))\n\t\t}\n\t}\n\treturn\n}\n\nfunc Write(fd int, p []byte) (n int, err error) {\n\tif raceenabled {\n\t\traceReleaseMerge(unsafe.Pointer(&ioSync))\n\t}\n\tn, err = write(fd, p)\n\tif raceenabled && n > 0 {\n\t\traceReadRange(unsafe.Pointer(&p[0]), n)\n\t}\n\treturn\n}\n\n// For testing: clients can set this flag to force\n// creation of IPv6 sockets to return EAFNOSUPPORT.\nvar SocketDisableIPv6 bool\n\n// Sockaddr represents a socket address.\ntype Sockaddr interface {\n\tsockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs\n}\n\n// SockaddrInet4 implements the Sockaddr interface for AF_INET type sockets.\ntype SockaddrInet4 struct {\n\tPort int\n\tAddr [4]byte\n\traw  RawSockaddrInet4\n}\n\n// SockaddrInet6 implements the Sockaddr interface for AF_INET6 type sockets.\ntype SockaddrInet6 struct {\n\tPort   int\n\tZoneId uint32\n\tAddr   [16]byte\n\traw    RawSockaddrInet6\n}\n\n// SockaddrUnix implements the Sockaddr interface for AF_UNIX type sockets.\ntype SockaddrUnix struct {\n\tName string\n\traw  RawSockaddrUnix\n}\n\nfunc Bind(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn bind(fd, ptr, n)\n}\n\nfunc Connect(fd int, sa Sockaddr) (err error) {\n\tptr, n, err := sa.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn connect(fd, ptr, n)\n}\n\nfunc Getpeername(fd int) (sa Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif err = getpeername(fd, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\treturn anyToSockaddr(fd, &rsa)\n}\n\nfunc GetsockoptByte(fd, level, opt int) (value byte, err error) {\n\tvar n byte\n\tvallen := _Socklen(1)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc GetsockoptInt(fd, level, opt int) (value int, err error) {\n\tvar n int32\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn int(n), err\n}\n\nfunc GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) {\n\tvallen := _Socklen(4)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen)\n\treturn value, err\n}\n\nfunc GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) {\n\tvar value IPMreq\n\tvallen := _Socklen(SizeofIPMreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) {\n\tvar value IPv6Mreq\n\tvallen := _Socklen(SizeofIPv6Mreq)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) {\n\tvar value IPv6MTUInfo\n\tvallen := _Socklen(SizeofIPv6MTUInfo)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) {\n\tvar value ICMPv6Filter\n\tvallen := _Socklen(SizeofICMPv6Filter)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen)\n\treturn &value, err\n}\n\nfunc GetsockoptLinger(fd, level, opt int) (*Linger, error) {\n\tvar linger Linger\n\tvallen := _Socklen(SizeofLinger)\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&linger), &vallen)\n\treturn &linger, err\n}\n\nfunc GetsockoptTimeval(fd, level, opt int) (*Timeval, error) {\n\tvar tv Timeval\n\tvallen := _Socklen(unsafe.Sizeof(tv))\n\terr := getsockopt(fd, level, opt, unsafe.Pointer(&tv), &vallen)\n\treturn &tv, err\n}\n\nfunc GetsockoptUint64(fd, level, opt int) (value uint64, err error) {\n\tvar n uint64\n\tvallen := _Socklen(8)\n\terr = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen)\n\treturn n, err\n}\n\nfunc Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {\n\tvar rsa RawSockaddrAny\n\tvar len _Socklen = SizeofSockaddrAny\n\tif n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil {\n\t\treturn\n\t}\n\tif rsa.Addr.Family != AF_UNSPEC {\n\t\tfrom, err = anyToSockaddr(fd, &rsa)\n\t}\n\treturn\n}\n\nfunc Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) {\n\tptr, n, err := to.sockaddr()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn sendto(fd, p, flags, ptr, n)\n}\n\nfunc SetsockoptByte(fd, level, opt int, value byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 1)\n}\n\nfunc SetsockoptInt(fd, level, opt int, value int) (err error) {\n\tvar n = int32(value)\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&n), 4)\n}\n\nfunc SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4)\n}\n\nfunc SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq)\n}\n\nfunc SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq)\n}\n\nfunc SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter)\n}\n\nfunc SetsockoptLinger(fd, level, opt int, l *Linger) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger)\n}\n\nfunc SetsockoptString(fd, level, opt int, s string) (err error) {\n\tvar p unsafe.Pointer\n\tif len(s) > 0 {\n\t\tp = unsafe.Pointer(&[]byte(s)[0])\n\t}\n\treturn setsockopt(fd, level, opt, p, uintptr(len(s)))\n}\n\nfunc SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv))\n}\n\nfunc SetsockoptUint64(fd, level, opt int, value uint64) (err error) {\n\treturn setsockopt(fd, level, opt, unsafe.Pointer(&value), 8)\n}\n\nfunc Socket(domain, typ, proto int) (fd int, err error) {\n\tif domain == AF_INET6 && SocketDisableIPv6 {\n\t\treturn -1, EAFNOSUPPORT\n\t}\n\tfd, err = socket(domain, typ, proto)\n\treturn\n}\n\nfunc Socketpair(domain, typ, proto int) (fd [2]int, err error) {\n\tvar fdx [2]int32\n\terr = socketpair(domain, typ, proto, &fdx)\n\tif err == nil {\n\t\tfd[0] = int(fdx[0])\n\t\tfd[1] = int(fdx[1])\n\t}\n\treturn\n}\n\nvar ioSync int64\n\nfunc CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) }\n\nfunc SetNonblock(fd int, nonblocking bool) (err error) {\n\tflag, err := fcntl(fd, F_GETFL, 0)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif nonblocking {\n\t\tflag |= O_NONBLOCK\n\t} else {\n\t\tflag &= ^O_NONBLOCK\n\t}\n\t_, err = fcntl(fd, F_SETFL, flag)\n\treturn err\n}\n\n// Exec calls execve(2), which replaces the calling executable in the process\n// tree. argv0 should be the full path to an executable (\"/bin/ls\") and the\n// executable name should also be the first argument in argv ([\"ls\", \"-l\"]).\n// envv are the environment variables that should be passed to the new\n// process ([\"USER=go\", \"PWD=/tmp\"]).\nfunc Exec(argv0 string, argv []string, envv []string) error {\n\treturn syscall.Exec(argv0, argv, envv)\n}\n\nfunc Getag(path string) (ccsid uint16, flag uint16, err error) {\n\tvar val [8]byte\n\tsz, err := Getxattr(path, \"ccsid\", val[:])\n\tif err != nil {\n\t\treturn\n\t}\n\tccsid = uint16(EncodeData(val[0:sz]))\n\tsz, err = Getxattr(path, \"flags\", val[:])\n\tif err != nil {\n\t\treturn\n\t}\n\tflag = uint16(EncodeData(val[0:sz]) >> 15)\n\treturn\n}\n\n// Mount begin\nfunc impl_Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p3 *byte\n\t_p3, err = BytePtrFromString(data)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MOUNT1_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(_p3)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_MountAddr() *(func(source string, target string, fstype string, flags uintptr, data string) (err error))\n\nvar Mount = enter_Mount\n\nfunc enter_Mount(source string, target string, fstype string, flags uintptr, data string) (err error) {\n\tfuncref := get_MountAddr()\n\tif validMount() {\n\t\t*funcref = impl_Mount\n\t} else {\n\t\t*funcref = legacyMount\n\t}\n\treturn (*funcref)(source, target, fstype, flags, data)\n}\n\nfunc legacyMount(source string, target string, fstype string, flags uintptr, data string) (err error) {\n\tif needspace := 8 - len(fstype); needspace <= 0 {\n\t\tfstype = fstype[0:8]\n\t} else {\n\t\tfstype += \"        \"[0:needspace]\n\t}\n\treturn mount_LE(target, source, fstype, uint32(flags), int32(len(data)), data)\n}\n\nfunc validMount() bool {\n\tif funcptrtest(GetZosLibVec()+SYS___MOUNT1_A<<4, \"\") == 0 {\n\t\tif name, err := getLeFuncName(GetZosLibVec() + SYS___MOUNT1_A<<4); err == nil {\n\t\t\treturn name == \"__mount1_a\"\n\t\t}\n\t}\n\treturn false\n}\n\n// Mount end\n\n// Unmount begin\nfunc impl_Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UMOUNT2_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_UnmountAddr() *(func(target string, flags int) (err error))\n\nvar Unmount = enter_Unmount\n\nfunc enter_Unmount(target string, flags int) (err error) {\n\tfuncref := get_UnmountAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___UMOUNT2_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Unmount\n\t} else {\n\t\t*funcref = legacyUnmount\n\t}\n\treturn (*funcref)(target, flags)\n}\n\nfunc legacyUnmount(name string, mtm int) (err error) {\n\t// mountpoint is always a full path and starts with a '/'\n\t// check if input string is not a mountpoint but a filesystem name\n\tif name[0] != '/' {\n\t\treturn unmount_LE(name, mtm)\n\t}\n\t// treat name as mountpoint\n\tb2s := func(arr []byte) string {\n\t\tvar str string\n\t\tfor i := 0; i < len(arr); i++ {\n\t\t\tif arr[i] == 0 {\n\t\t\t\tstr = string(arr[:i])\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn str\n\t}\n\tvar buffer struct {\n\t\theader W_Mnth\n\t\tfsinfo [64]W_Mntent\n\t}\n\tfs_count, err := W_Getmntent_A((*byte)(unsafe.Pointer(&buffer)), int(unsafe.Sizeof(buffer)))\n\tif err == nil {\n\t\terr = EINVAL\n\t\tfor i := 0; i < fs_count; i++ {\n\t\t\tif b2s(buffer.fsinfo[i].Mountpoint[:]) == name {\n\t\t\t\terr = unmount_LE(b2s(buffer.fsinfo[i].Fsname[:]), mtm)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t} else if fs_count == 0 {\n\t\terr = EINVAL\n\t}\n\treturn err\n}\n\n// Unmount end\n\nfunc direntIno(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino))\n}\n\nfunc direntReclen(buf []byte) (uint64, bool) {\n\treturn readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen))\n}\n\nfunc direntNamlen(buf []byte) (uint64, bool) {\n\treclen, ok := direntReclen(buf)\n\tif !ok {\n\t\treturn 0, false\n\t}\n\treturn reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true\n}\n\nfunc direntLeToDirentUnix(dirent *direntLE, dir uintptr, path string) (Dirent, error) {\n\tvar d Dirent\n\n\td.Ino = uint64(dirent.Ino)\n\toffset, err := Telldir(dir)\n\tif err != nil {\n\t\treturn d, err\n\t}\n\n\td.Off = int64(offset)\n\ts := string(bytes.Split(dirent.Name[:], []byte{0})[0])\n\tcopy(d.Name[:], s)\n\n\td.Reclen = uint16(24 + len(d.NameString()))\n\tvar st Stat_t\n\tpath = path + \"/\" + s\n\terr = Lstat(path, &st)\n\tif err != nil {\n\t\treturn d, err\n\t}\n\n\td.Type = uint8(st.Mode >> 24)\n\treturn d, err\n}\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\t// Simulation of Getdirentries port from the Darwin implementation.\n\t// COMMENTS FROM DARWIN:\n\t// It's not the full required semantics, but should handle the case\n\t// of calling Getdirentries or ReadDirent repeatedly.\n\t// It won't handle assigning the results of lseek to *basep, or handle\n\t// the directory being edited underfoot.\n\n\tskip, err := Seek(fd, 0, 1 /* SEEK_CUR */)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\n\t// Get path from fd to avoid unavailable call (fdopendir)\n\tpath, err := ZosFdToPath(fd)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\td, err := Opendir(path)\n\tif err != nil {\n\t\treturn 0, err\n\t}\n\tdefer Closedir(d)\n\n\tvar cnt int64\n\tfor {\n\t\tvar entryLE direntLE\n\t\tvar entrypLE *direntLE\n\t\te := Readdir_r(d, &entryLE, &entrypLE)\n\t\tif e != nil {\n\t\t\treturn n, e\n\t\t}\n\t\tif entrypLE == nil {\n\t\t\tbreak\n\t\t}\n\t\tif skip > 0 {\n\t\t\tskip--\n\t\t\tcnt++\n\t\t\tcontinue\n\t\t}\n\n\t\t// Dirent on zos has a different structure\n\t\tentry, e := direntLeToDirentUnix(&entryLE, d, path)\n\t\tif e != nil {\n\t\t\treturn n, e\n\t\t}\n\n\t\treclen := int(entry.Reclen)\n\t\tif reclen > len(buf) {\n\t\t\t// Not enough room. Return for now.\n\t\t\t// The counter will let us know where we should start up again.\n\t\t\t// Note: this strategy for suspending in the middle and\n\t\t\t// restarting is O(n^2) in the length of the directory. Oh well.\n\t\t\tbreak\n\t\t}\n\n\t\t// Copy entry into return buffer.\n\t\ts := unsafe.Slice((*byte)(unsafe.Pointer(&entry)), reclen)\n\t\tcopy(buf, s)\n\n\t\tbuf = buf[reclen:]\n\t\tn += reclen\n\t\tcnt++\n\t}\n\t// Set the seek offset of the input fd to record\n\t// how many files we've already returned.\n\t_, err = Seek(fd, cnt, 0 /* SEEK_SET */)\n\tif err != nil {\n\t\treturn n, err\n\t}\n\n\treturn n, nil\n}\n\nfunc Err2ad() (eadd *int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS___ERR2AD<<4)\n\teadd = (*int)(unsafe.Pointer(r0))\n\treturn\n}\n\nfunc ZosConsolePrintf(format string, v ...interface{}) (int, error) {\n\ttype __cmsg struct {\n\t\t_            uint16\n\t\t_            [2]uint8\n\t\t__msg_length uint32\n\t\t__msg        uintptr\n\t\t_            [4]uint8\n\t}\n\tmsg := fmt.Sprintf(format, v...)\n\tstrptr := unsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&msg)).Data)\n\tlen := (*reflect.StringHeader)(unsafe.Pointer(&msg)).Len\n\tcmsg := __cmsg{__msg_length: uint32(len), __msg: uintptr(strptr)}\n\tcmd := uint32(0)\n\truntime.EnterSyscall()\n\trc, err2, err1 := CallLeFuncWithErr(GetZosLibVec()+SYS_____CONSOLE_A<<4, uintptr(unsafe.Pointer(&cmsg)), 0, uintptr(unsafe.Pointer(&cmd)))\n\truntime.ExitSyscall()\n\tif rc != 0 {\n\t\treturn 0, fmt.Errorf(\"%s (errno2=0x%x)\\n\", err1.Error(), err2)\n\t}\n\treturn 0, nil\n}\nfunc ZosStringToEbcdicBytes(str string, nullterm bool) (ebcdicBytes []byte) {\n\tif nullterm {\n\t\tebcdicBytes = []byte(str + \"\\x00\")\n\t} else {\n\t\tebcdicBytes = []byte(str)\n\t}\n\tA2e(ebcdicBytes)\n\treturn\n}\nfunc ZosEbcdicBytesToString(b []byte, trimRight bool) (str string) {\n\tres := make([]byte, len(b))\n\tcopy(res, b)\n\tE2a(res)\n\tif trimRight {\n\t\tstr = string(bytes.TrimRight(res, \" \\x00\"))\n\t} else {\n\t\tstr = string(res)\n\t}\n\treturn\n}\n\nfunc fdToPath(dirfd int) (path string, err error) {\n\tvar buffer [1024]byte\n\t// w_ctrl()\n\tret := runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_W_IOCTL<<4,\n\t\t[]uintptr{uintptr(dirfd), 17, 1024, uintptr(unsafe.Pointer(&buffer[0]))})\n\tif ret == 0 {\n\t\tzb := bytes.IndexByte(buffer[:], 0)\n\t\tif zb == -1 {\n\t\t\tzb = len(buffer)\n\t\t}\n\t\t// __e2a_l()\n\t\truntime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___E2A_L<<4,\n\t\t\t[]uintptr{uintptr(unsafe.Pointer(&buffer[0])), uintptr(zb)})\n\t\treturn string(buffer[:zb]), nil\n\t}\n\t// __errno()\n\terrno := int(*(*int32)(unsafe.Pointer(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO<<4,\n\t\t[]uintptr{}))))\n\t// __errno2()\n\terrno2 := int(runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS___ERRNO2<<4,\n\t\t[]uintptr{}))\n\t// strerror_r()\n\tret = runtime.CallLeFuncByPtr(runtime.XplinkLibvec+SYS_STRERROR_R<<4,\n\t\t[]uintptr{uintptr(errno), uintptr(unsafe.Pointer(&buffer[0])), 1024})\n\tif ret == 0 {\n\t\tzb := bytes.IndexByte(buffer[:], 0)\n\t\tif zb == -1 {\n\t\t\tzb = len(buffer)\n\t\t}\n\t\treturn \"\", fmt.Errorf(\"%s (errno2=0x%x)\", buffer[:zb], errno2)\n\t} else {\n\t\treturn \"\", fmt.Errorf(\"fdToPath errno %d (errno2=0x%x)\", errno, errno2)\n\t}\n}\n\nfunc impl_Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKFIFOAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_MkfifoatAddr() *(func(dirfd int, path string, mode uint32) (err error))\n\nvar Mkfifoat = enter_Mkfifoat\n\nfunc enter_Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tfuncref := get_MkfifoatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___MKFIFOAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Mkfifoat\n\t} else {\n\t\t*funcref = legacy_Mkfifoat\n\t}\n\treturn (*funcref)(dirfd, path, mode)\n}\n\nfunc legacy_Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tdirname, err := ZosFdToPath(dirfd)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn Mkfifo(dirname+\"/\"+path, mode)\n}\n\n//sys\tPosix_openpt(oflag int) (fd int, err error) = SYS_POSIX_OPENPT\n//sys\tGrantpt(fildes int) (rc int, err error) = SYS_GRANTPT\n//sys\tUnlockpt(fildes int) (rc int, err error) = SYS_UNLOCKPT\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sysvshm_linux.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux\n\npackage unix\n\nimport \"runtime\"\n\n// SysvShmCtl performs control operations on the shared memory segment\n// specified by id.\nfunc SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) {\n\tif runtime.GOARCH == \"arm\" ||\n\t\truntime.GOARCH == \"mips64\" || runtime.GOARCH == \"mips64le\" {\n\t\tcmd |= ipc_64\n\t}\n\n\treturn shmctl(id, cmd, desc)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sysvshm_unix.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin && !ios) || linux || zos\n\npackage unix\n\nimport \"unsafe\"\n\n// SysvShmAttach attaches the Sysv shared memory segment associated with the\n// shared memory identifier id.\nfunc SysvShmAttach(id int, addr uintptr, flag int) ([]byte, error) {\n\taddr, errno := shmat(id, addr, flag)\n\tif errno != nil {\n\t\treturn nil, errno\n\t}\n\n\t// Retrieve the size of the shared memory to enable slice creation\n\tvar info SysvShmDesc\n\n\t_, err := SysvShmCtl(id, IPC_STAT, &info)\n\tif err != nil {\n\t\t// release the shared memory if we can't find the size\n\n\t\t// ignoring error from shmdt as there's nothing sensible to return here\n\t\tshmdt(addr)\n\t\treturn nil, err\n\t}\n\n\t// Use unsafe to convert addr into a []byte.\n\tb := unsafe.Slice((*byte)(unsafe.Pointer(addr)), int(info.Segsz))\n\treturn b, nil\n}\n\n// SysvShmDetach unmaps the shared memory slice returned from SysvShmAttach.\n//\n// It is not safe to use the slice after calling this function.\nfunc SysvShmDetach(data []byte) error {\n\tif len(data) == 0 {\n\t\treturn EINVAL\n\t}\n\n\treturn shmdt(uintptr(unsafe.Pointer(&data[0])))\n}\n\n// SysvShmGet returns the Sysv shared memory identifier associated with key.\n// If the IPC_CREAT flag is specified a new segment is created.\nfunc SysvShmGet(key, size, flag int) (id int, err error) {\n\treturn shmget(key, size, flag)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/sysvshm_unix_other.go",
    "content": "// Copyright 2021 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build (darwin && !ios) || zos\n\npackage unix\n\n// SysvShmCtl performs control operations on the shared memory segment\n// specified by id.\nfunc SysvShmCtl(id, cmd int, desc *SysvShmDesc) (result int, err error) {\n\treturn shmctl(id, cmd, desc)\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/timestruct.go",
    "content": "// Copyright 2017 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos\n\npackage unix\n\nimport \"time\"\n\n// TimespecToNsec returns the time stored in ts as nanoseconds.\nfunc TimespecToNsec(ts Timespec) int64 { return ts.Nano() }\n\n// NsecToTimespec converts a number of nanoseconds into a Timespec.\nfunc NsecToTimespec(nsec int64) Timespec {\n\tsec := nsec / 1e9\n\tnsec = nsec % 1e9\n\tif nsec < 0 {\n\t\tnsec += 1e9\n\t\tsec--\n\t}\n\treturn setTimespec(sec, nsec)\n}\n\n// TimeToTimespec converts t into a Timespec.\n// On some 32-bit systems the range of valid Timespec values are smaller\n// than that of time.Time values.  So if t is out of the valid range of\n// Timespec, it returns a zero Timespec and ERANGE.\nfunc TimeToTimespec(t time.Time) (Timespec, error) {\n\tsec := t.Unix()\n\tnsec := int64(t.Nanosecond())\n\tts := setTimespec(sec, nsec)\n\n\t// Currently all targets have either int32 or int64 for Timespec.Sec.\n\t// If there were a new target with floating point type for it, we have\n\t// to consider the rounding error.\n\tif int64(ts.Sec) != sec {\n\t\treturn Timespec{}, ERANGE\n\t}\n\treturn ts, nil\n}\n\n// TimevalToNsec returns the time stored in tv as nanoseconds.\nfunc TimevalToNsec(tv Timeval) int64 { return tv.Nano() }\n\n// NsecToTimeval converts a number of nanoseconds into a Timeval.\nfunc NsecToTimeval(nsec int64) Timeval {\n\tnsec += 999 // round up to microsecond\n\tusec := nsec % 1e9 / 1e3\n\tsec := nsec / 1e9\n\tif usec < 0 {\n\t\tusec += 1e6\n\t\tsec--\n\t}\n\treturn setTimeval(sec, usec)\n}\n\n// Unix returns the time stored in ts as seconds plus nanoseconds.\nfunc (ts *Timespec) Unix() (sec int64, nsec int64) {\n\treturn int64(ts.Sec), int64(ts.Nsec)\n}\n\n// Unix returns the time stored in tv as seconds plus nanoseconds.\nfunc (tv *Timeval) Unix() (sec int64, nsec int64) {\n\treturn int64(tv.Sec), int64(tv.Usec) * 1000\n}\n\n// Nano returns the time stored in ts as nanoseconds.\nfunc (ts *Timespec) Nano() int64 {\n\treturn int64(ts.Sec)*1e9 + int64(ts.Nsec)\n}\n\n// Nano returns the time stored in tv as nanoseconds.\nfunc (tv *Timeval) Nano() int64 {\n\treturn int64(tv.Sec)*1e9 + int64(tv.Usec)*1000\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/unveil_openbsd.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\npackage unix\n\nimport \"fmt\"\n\n// Unveil implements the unveil syscall.\n// For more information see unveil(2).\n// Note that the special case of blocking further\n// unveil calls is handled by UnveilBlock.\nfunc Unveil(path string, flags string) error {\n\tif err := supportsUnveil(); err != nil {\n\t\treturn err\n\t}\n\tpathPtr, err := BytePtrFromString(path)\n\tif err != nil {\n\t\treturn err\n\t}\n\tflagsPtr, err := BytePtrFromString(flags)\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn unveil(pathPtr, flagsPtr)\n}\n\n// UnveilBlock blocks future unveil calls.\n// For more information see unveil(2).\nfunc UnveilBlock() error {\n\tif err := supportsUnveil(); err != nil {\n\t\treturn err\n\t}\n\treturn unveil(nil, nil)\n}\n\n// supportsUnveil checks for availability of the unveil(2) system call based\n// on the running OpenBSD version.\nfunc supportsUnveil() error {\n\tmaj, min, err := majmin()\n\tif err != nil {\n\t\treturn err\n\t}\n\n\t// unveil is not available before 6.4\n\tif maj < 6 || (maj == 6 && min <= 3) {\n\t\treturn fmt.Errorf(\"cannot call Unveil on OpenBSD %d.%d\", maj, min)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/vgetrandom_linux.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build linux && go1.24\n\npackage unix\n\nimport _ \"unsafe\"\n\n//go:linkname vgetrandom runtime.vgetrandom\n//go:noescape\nfunc vgetrandom(p []byte, flags uint32) (ret int, supported bool)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go",
    "content": "// Copyright 2024 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build !linux || !go1.24\n\npackage unix\n\nfunc vgetrandom(p []byte, flags uint32) (ret int, supported bool) {\n\treturn -1, false\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/xattr_bsd.go",
    "content": "// Copyright 2018 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build freebsd || netbsd\n\npackage unix\n\nimport (\n\t\"strings\"\n\t\"unsafe\"\n)\n\n// Derive extattr namespace and attribute name\n\nfunc xattrnamespace(fullattr string) (ns int, attr string, err error) {\n\ts := strings.IndexByte(fullattr, '.')\n\tif s == -1 {\n\t\treturn -1, \"\", ENOATTR\n\t}\n\n\tnamespace := fullattr[0:s]\n\tattr = fullattr[s+1:]\n\n\tswitch namespace {\n\tcase \"user\":\n\t\treturn EXTATTR_NAMESPACE_USER, attr, nil\n\tcase \"system\":\n\t\treturn EXTATTR_NAMESPACE_SYSTEM, attr, nil\n\tdefault:\n\t\treturn -1, \"\", ENOATTR\n\t}\n}\n\nfunc initxattrdest(dest []byte, idx int) (d unsafe.Pointer) {\n\tif len(dest) > idx {\n\t\treturn unsafe.Pointer(&dest[idx])\n\t}\n\tif dest != nil {\n\t\t// extattr_get_file and extattr_list_file treat NULL differently from\n\t\t// a non-NULL pointer of length zero. Preserve the property of nilness,\n\t\t// even if we can't use dest directly.\n\t\treturn unsafe.Pointer(&_zero)\n\t}\n\treturn nil\n}\n\n// FreeBSD and NetBSD implement their own syscalls to handle extended attributes\n\nfunc Getxattr(file string, attr string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsize := len(dest)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn ExtattrGetFile(file, nsid, a, uintptr(d), destsize)\n}\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsize := len(dest)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)\n}\n\nfunc Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsize := len(dest)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn -1, err\n\t}\n\n\treturn ExtattrGetLink(link, nsid, a, uintptr(d), destsize)\n}\n\n// flags are unused on FreeBSD\n\nfunc Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {\n\tvar d unsafe.Pointer\n\tif len(data) > 0 {\n\t\td = unsafe.Pointer(&data[0])\n\t}\n\tdatasiz := len(data)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)\n\treturn\n}\n\nfunc Setxattr(file string, attr string, data []byte, flags int) (err error) {\n\tvar d unsafe.Pointer\n\tif len(data) > 0 {\n\t\td = unsafe.Pointer(&data[0])\n\t}\n\tdatasiz := len(data)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)\n\treturn\n}\n\nfunc Lsetxattr(link string, attr string, data []byte, flags int) (err error) {\n\tvar d unsafe.Pointer\n\tif len(data) > 0 {\n\t\td = unsafe.Pointer(&data[0])\n\t}\n\tdatasiz := len(data)\n\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\t_, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)\n\treturn\n}\n\nfunc Removexattr(file string, attr string) (err error) {\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = ExtattrDeleteFile(file, nsid, a)\n\treturn\n}\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = ExtattrDeleteFd(fd, nsid, a)\n\treturn\n}\n\nfunc Lremovexattr(link string, attr string) (err error) {\n\tnsid, a, err := xattrnamespace(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\n\terr = ExtattrDeleteLink(link, nsid, a)\n\treturn\n}\n\nfunc Listxattr(file string, dest []byte) (sz int, err error) {\n\tdestsiz := len(dest)\n\n\t// FreeBSD won't allow you to list xattrs from multiple namespaces\n\ts, pos := 0, 0\n\tfor _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {\n\t\tstmp, e := ListxattrNS(file, nsid, dest[pos:])\n\n\t\t/* Errors accessing system attrs are ignored so that\n\t\t * we can implement the Linux-like behavior of omitting errors that\n\t\t * we don't have read permissions on\n\t\t *\n\t\t * Linux will still error if we ask for user attributes on a file that\n\t\t * we don't have read permissions on, so don't ignore those errors\n\t\t */\n\t\tif e != nil {\n\t\t\tif e == EPERM && nsid != EXTATTR_NAMESPACE_USER {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn s, e\n\t\t}\n\n\t\ts += stmp\n\t\tpos = s\n\t\tif pos > destsiz {\n\t\t\tpos = destsiz\n\t\t}\n\t}\n\n\treturn s, nil\n}\n\nfunc ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsiz := len(dest)\n\n\ts, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)\n\tif e != nil {\n\t\treturn 0, err\n\t}\n\n\treturn s, nil\n}\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tdestsiz := len(dest)\n\n\ts, pos := 0, 0\n\tfor _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {\n\t\tstmp, e := FlistxattrNS(fd, nsid, dest[pos:])\n\n\t\tif e != nil {\n\t\t\tif e == EPERM && nsid != EXTATTR_NAMESPACE_USER {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn s, e\n\t\t}\n\n\t\ts += stmp\n\t\tpos = s\n\t\tif pos > destsiz {\n\t\t\tpos = destsiz\n\t\t}\n\t}\n\n\treturn s, nil\n}\n\nfunc FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsiz := len(dest)\n\n\ts, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)\n\tif e != nil {\n\t\treturn 0, err\n\t}\n\n\treturn s, nil\n}\n\nfunc Llistxattr(link string, dest []byte) (sz int, err error) {\n\tdestsiz := len(dest)\n\n\ts, pos := 0, 0\n\tfor _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} {\n\t\tstmp, e := LlistxattrNS(link, nsid, dest[pos:])\n\n\t\tif e != nil {\n\t\t\tif e == EPERM && nsid != EXTATTR_NAMESPACE_USER {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn s, e\n\t\t}\n\n\t\ts += stmp\n\t\tpos = s\n\t\tif pos > destsiz {\n\t\t\tpos = destsiz\n\t\t}\n\t}\n\n\treturn s, nil\n}\n\nfunc LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) {\n\td := initxattrdest(dest, 0)\n\tdestsiz := len(dest)\n\n\ts, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)\n\tif e != nil {\n\t\treturn 0, err\n\t}\n\n\treturn s, nil\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_aix_ppc.go",
    "content": "// mkerrors.sh -maix32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc && aix\n\n// Created by cgo -godefs - DO NOT EDIT\n// cgo -godefs -- -maix32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                  = 0x10\n\tAF_BYPASS                     = 0x19\n\tAF_CCITT                      = 0xa\n\tAF_CHAOS                      = 0x5\n\tAF_DATAKIT                    = 0x9\n\tAF_DECnet                     = 0xc\n\tAF_DLI                        = 0xd\n\tAF_ECMA                       = 0x8\n\tAF_HYLINK                     = 0xf\n\tAF_IMPLINK                    = 0x3\n\tAF_INET                       = 0x2\n\tAF_INET6                      = 0x18\n\tAF_INTF                       = 0x14\n\tAF_ISO                        = 0x7\n\tAF_LAT                        = 0xe\n\tAF_LINK                       = 0x12\n\tAF_LOCAL                      = 0x1\n\tAF_MAX                        = 0x1e\n\tAF_NDD                        = 0x17\n\tAF_NETWARE                    = 0x16\n\tAF_NS                         = 0x6\n\tAF_OSI                        = 0x7\n\tAF_PUP                        = 0x4\n\tAF_RIF                        = 0x15\n\tAF_ROUTE                      = 0x11\n\tAF_SNA                        = 0xb\n\tAF_UNIX                       = 0x1\n\tAF_UNSPEC                     = 0x0\n\tALTWERASE                     = 0x400000\n\tARPHRD_802_3                  = 0x6\n\tARPHRD_802_5                  = 0x6\n\tARPHRD_ETHER                  = 0x1\n\tARPHRD_FDDI                   = 0x1\n\tB0                            = 0x0\n\tB110                          = 0x3\n\tB1200                         = 0x9\n\tB134                          = 0x4\n\tB150                          = 0x5\n\tB1800                         = 0xa\n\tB19200                        = 0xe\n\tB200                          = 0x6\n\tB2400                         = 0xb\n\tB300                          = 0x7\n\tB38400                        = 0xf\n\tB4800                         = 0xc\n\tB50                           = 0x1\n\tB600                          = 0x8\n\tB75                           = 0x2\n\tB9600                         = 0xd\n\tBRKINT                        = 0x2\n\tBS0                           = 0x0\n\tBS1                           = 0x1000\n\tBSDLY                         = 0x1000\n\tCAP_AACCT                     = 0x6\n\tCAP_ARM_APPLICATION           = 0x5\n\tCAP_BYPASS_RAC_VMM            = 0x3\n\tCAP_CLEAR                     = 0x0\n\tCAP_CREDENTIALS               = 0x7\n\tCAP_EFFECTIVE                 = 0x1\n\tCAP_EWLM_AGENT                = 0x4\n\tCAP_INHERITABLE               = 0x2\n\tCAP_MAXIMUM                   = 0x7\n\tCAP_NUMA_ATTACH               = 0x2\n\tCAP_PERMITTED                 = 0x3\n\tCAP_PROPAGATE                 = 0x1\n\tCAP_PROPOGATE                 = 0x1\n\tCAP_SET                       = 0x1\n\tCBAUD                         = 0xf\n\tCFLUSH                        = 0xf\n\tCIBAUD                        = 0xf0000\n\tCLOCAL                        = 0x800\n\tCLOCK_MONOTONIC               = 0xa\n\tCLOCK_PROCESS_CPUTIME_ID      = 0xb\n\tCLOCK_REALTIME                = 0x9\n\tCLOCK_THREAD_CPUTIME_ID       = 0xc\n\tCR0                           = 0x0\n\tCR1                           = 0x100\n\tCR2                           = 0x200\n\tCR3                           = 0x300\n\tCRDLY                         = 0x300\n\tCREAD                         = 0x80\n\tCS5                           = 0x0\n\tCS6                           = 0x10\n\tCS7                           = 0x20\n\tCS8                           = 0x30\n\tCSIOCGIFCONF                  = -0x3ff796dc\n\tCSIZE                         = 0x30\n\tCSMAP_DIR                     = \"/usr/lib/nls/csmap/\"\n\tCSTART                        = '\\021'\n\tCSTOP                         = '\\023'\n\tCSTOPB                        = 0x40\n\tCSUSP                         = 0x1a\n\tECHO                          = 0x8\n\tECHOCTL                       = 0x20000\n\tECHOE                         = 0x10\n\tECHOK                         = 0x20\n\tECHOKE                        = 0x80000\n\tECHONL                        = 0x40\n\tECHOPRT                       = 0x40000\n\tECH_ICMPID                    = 0x2\n\tETHERNET_CSMACD               = 0x6\n\tEVENP                         = 0x80\n\tEXCONTINUE                    = 0x0\n\tEXDLOK                        = 0x3\n\tEXIO                          = 0x2\n\tEXPGIO                        = 0x0\n\tEXRESUME                      = 0x2\n\tEXRETURN                      = 0x1\n\tEXSIG                         = 0x4\n\tEXTA                          = 0xe\n\tEXTB                          = 0xf\n\tEXTRAP                        = 0x1\n\tEYEC_RTENTRYA                 = 0x257274656e747241\n\tEYEC_RTENTRYF                 = 0x257274656e747246\n\tE_ACC                         = 0x0\n\tFD_CLOEXEC                    = 0x1\n\tFD_SETSIZE                    = 0xfffe\n\tFF0                           = 0x0\n\tFF1                           = 0x2000\n\tFFDLY                         = 0x2000\n\tFLUSHBAND                     = 0x40\n\tFLUSHLOW                      = 0x8\n\tFLUSHO                        = 0x100000\n\tFLUSHR                        = 0x1\n\tFLUSHRW                       = 0x3\n\tFLUSHW                        = 0x2\n\tF_CLOSEM                      = 0xa\n\tF_DUP2FD                      = 0xe\n\tF_DUPFD                       = 0x0\n\tF_GETFD                       = 0x1\n\tF_GETFL                       = 0x3\n\tF_GETLK                       = 0x5\n\tF_GETLK64                     = 0xb\n\tF_GETOWN                      = 0x8\n\tF_LOCK                        = 0x1\n\tF_OK                          = 0x0\n\tF_RDLCK                       = 0x1\n\tF_SETFD                       = 0x2\n\tF_SETFL                       = 0x4\n\tF_SETLK                       = 0x6\n\tF_SETLK64                     = 0xc\n\tF_SETLKW                      = 0x7\n\tF_SETLKW64                    = 0xd\n\tF_SETOWN                      = 0x9\n\tF_TEST                        = 0x3\n\tF_TLOCK                       = 0x2\n\tF_TSTLK                       = 0xf\n\tF_ULOCK                       = 0x0\n\tF_UNLCK                       = 0x3\n\tF_WRLCK                       = 0x2\n\tHUPCL                         = 0x400\n\tIBSHIFT                       = 0x10\n\tICANON                        = 0x2\n\tICMP6_FILTER                  = 0x26\n\tICMP6_SEC_SEND_DEL            = 0x46\n\tICMP6_SEC_SEND_GET            = 0x47\n\tICMP6_SEC_SEND_SET            = 0x44\n\tICMP6_SEC_SEND_SET_CGA_ADDR   = 0x45\n\tICRNL                         = 0x100\n\tIEXTEN                        = 0x200000\n\tIFA_FIRSTALIAS                = 0x2000\n\tIFA_ROUTE                     = 0x1\n\tIFF_64BIT                     = 0x4000000\n\tIFF_ALLCAST                   = 0x20000\n\tIFF_ALLMULTI                  = 0x200\n\tIFF_BPF                       = 0x8000000\n\tIFF_BRIDGE                    = 0x40000\n\tIFF_BROADCAST                 = 0x2\n\tIFF_CANTCHANGE                = 0x80c52\n\tIFF_CHECKSUM_OFFLOAD          = 0x10000000\n\tIFF_D1                        = 0x8000\n\tIFF_D2                        = 0x4000\n\tIFF_D3                        = 0x2000\n\tIFF_D4                        = 0x1000\n\tIFF_DEBUG                     = 0x4\n\tIFF_DEVHEALTH                 = 0x4000\n\tIFF_DO_HW_LOOPBACK            = 0x10000\n\tIFF_GROUP_ROUTING             = 0x2000000\n\tIFF_IFBUFMGT                  = 0x800000\n\tIFF_LINK0                     = 0x100000\n\tIFF_LINK1                     = 0x200000\n\tIFF_LINK2                     = 0x400000\n\tIFF_LOOPBACK                  = 0x8\n\tIFF_MULTICAST                 = 0x80000\n\tIFF_NOARP                     = 0x80\n\tIFF_NOECHO                    = 0x800\n\tIFF_NOTRAILERS                = 0x20\n\tIFF_OACTIVE                   = 0x400\n\tIFF_POINTOPOINT               = 0x10\n\tIFF_PROMISC                   = 0x100\n\tIFF_PSEG                      = 0x40000000\n\tIFF_RUNNING                   = 0x40\n\tIFF_SIMPLEX                   = 0x800\n\tIFF_SNAP                      = 0x8000\n\tIFF_TCP_DISABLE_CKSUM         = 0x20000000\n\tIFF_TCP_NOCKSUM               = 0x1000000\n\tIFF_UP                        = 0x1\n\tIFF_VIPA                      = 0x80000000\n\tIFNAMSIZ                      = 0x10\n\tIFO_FLUSH                     = 0x1\n\tIFT_1822                      = 0x2\n\tIFT_AAL5                      = 0x31\n\tIFT_ARCNET                    = 0x23\n\tIFT_ARCNETPLUS                = 0x24\n\tIFT_ATM                       = 0x25\n\tIFT_CEPT                      = 0x13\n\tIFT_CLUSTER                   = 0x3e\n\tIFT_DS3                       = 0x1e\n\tIFT_EON                       = 0x19\n\tIFT_ETHER                     = 0x6\n\tIFT_FCS                       = 0x3a\n\tIFT_FDDI                      = 0xf\n\tIFT_FRELAY                    = 0x20\n\tIFT_FRELAYDCE                 = 0x2c\n\tIFT_GIFTUNNEL                 = 0x3c\n\tIFT_HDH1822                   = 0x3\n\tIFT_HF                        = 0x3d\n\tIFT_HIPPI                     = 0x2f\n\tIFT_HSSI                      = 0x2e\n\tIFT_HY                        = 0xe\n\tIFT_IB                        = 0xc7\n\tIFT_ISDNBASIC                 = 0x14\n\tIFT_ISDNPRIMARY               = 0x15\n\tIFT_ISO88022LLC               = 0x29\n\tIFT_ISO88023                  = 0x7\n\tIFT_ISO88024                  = 0x8\n\tIFT_ISO88025                  = 0x9\n\tIFT_ISO88026                  = 0xa\n\tIFT_LAPB                      = 0x10\n\tIFT_LOCALTALK                 = 0x2a\n\tIFT_LOOP                      = 0x18\n\tIFT_MIOX25                    = 0x26\n\tIFT_MODEM                     = 0x30\n\tIFT_NSIP                      = 0x1b\n\tIFT_OTHER                     = 0x1\n\tIFT_P10                       = 0xc\n\tIFT_P80                       = 0xd\n\tIFT_PARA                      = 0x22\n\tIFT_PPP                       = 0x17\n\tIFT_PROPMUX                   = 0x36\n\tIFT_PROPVIRTUAL               = 0x35\n\tIFT_PTPSERIAL                 = 0x16\n\tIFT_RS232                     = 0x21\n\tIFT_SDLC                      = 0x11\n\tIFT_SIP                       = 0x1f\n\tIFT_SLIP                      = 0x1c\n\tIFT_SMDSDXI                   = 0x2b\n\tIFT_SMDSICIP                  = 0x34\n\tIFT_SN                        = 0x38\n\tIFT_SONET                     = 0x27\n\tIFT_SONETPATH                 = 0x32\n\tIFT_SONETVT                   = 0x33\n\tIFT_SP                        = 0x39\n\tIFT_STARLAN                   = 0xb\n\tIFT_T1                        = 0x12\n\tIFT_TUNNEL                    = 0x3b\n\tIFT_ULTRA                     = 0x1d\n\tIFT_V35                       = 0x2d\n\tIFT_VIPA                      = 0x37\n\tIFT_X25                       = 0x5\n\tIFT_X25DDN                    = 0x4\n\tIFT_X25PLE                    = 0x28\n\tIFT_XETHER                    = 0x1a\n\tIGNBRK                        = 0x1\n\tIGNCR                         = 0x80\n\tIGNPAR                        = 0x4\n\tIMAXBEL                       = 0x10000\n\tINLCR                         = 0x40\n\tINPCK                         = 0x10\n\tIN_CLASSA_HOST                = 0xffffff\n\tIN_CLASSA_MAX                 = 0x80\n\tIN_CLASSA_NET                 = 0xff000000\n\tIN_CLASSA_NSHIFT              = 0x18\n\tIN_CLASSB_HOST                = 0xffff\n\tIN_CLASSB_MAX                 = 0x10000\n\tIN_CLASSB_NET                 = 0xffff0000\n\tIN_CLASSB_NSHIFT              = 0x10\n\tIN_CLASSC_HOST                = 0xff\n\tIN_CLASSC_NET                 = 0xffffff00\n\tIN_CLASSC_NSHIFT              = 0x8\n\tIN_CLASSD_HOST                = 0xfffffff\n\tIN_CLASSD_NET                 = 0xf0000000\n\tIN_CLASSD_NSHIFT              = 0x1c\n\tIN_LOOPBACKNET                = 0x7f\n\tIN_USE                        = 0x1\n\tIPPROTO_AH                    = 0x33\n\tIPPROTO_BIP                   = 0x53\n\tIPPROTO_DSTOPTS               = 0x3c\n\tIPPROTO_EGP                   = 0x8\n\tIPPROTO_EON                   = 0x50\n\tIPPROTO_ESP                   = 0x32\n\tIPPROTO_FRAGMENT              = 0x2c\n\tIPPROTO_GGP                   = 0x3\n\tIPPROTO_GIF                   = 0x8c\n\tIPPROTO_GRE                   = 0x2f\n\tIPPROTO_HOPOPTS               = 0x0\n\tIPPROTO_ICMP                  = 0x1\n\tIPPROTO_ICMPV6                = 0x3a\n\tIPPROTO_IDP                   = 0x16\n\tIPPROTO_IGMP                  = 0x2\n\tIPPROTO_IP                    = 0x0\n\tIPPROTO_IPIP                  = 0x4\n\tIPPROTO_IPV6                  = 0x29\n\tIPPROTO_LOCAL                 = 0x3f\n\tIPPROTO_MAX                   = 0x100\n\tIPPROTO_MH                    = 0x87\n\tIPPROTO_NONE                  = 0x3b\n\tIPPROTO_PUP                   = 0xc\n\tIPPROTO_QOS                   = 0x2d\n\tIPPROTO_RAW                   = 0xff\n\tIPPROTO_ROUTING               = 0x2b\n\tIPPROTO_RSVP                  = 0x2e\n\tIPPROTO_SCTP                  = 0x84\n\tIPPROTO_TCP                   = 0x6\n\tIPPROTO_TP                    = 0x1d\n\tIPPROTO_UDP                   = 0x11\n\tIPV6_ADDRFORM                 = 0x16\n\tIPV6_ADDR_PREFERENCES         = 0x4a\n\tIPV6_ADD_MEMBERSHIP           = 0xc\n\tIPV6_AIXRAWSOCKET             = 0x39\n\tIPV6_CHECKSUM                 = 0x27\n\tIPV6_DONTFRAG                 = 0x2d\n\tIPV6_DROP_MEMBERSHIP          = 0xd\n\tIPV6_DSTOPTS                  = 0x36\n\tIPV6_FLOWINFO_FLOWLABEL       = 0xffffff\n\tIPV6_FLOWINFO_PRIFLOW         = 0xfffffff\n\tIPV6_FLOWINFO_PRIORITY        = 0xf000000\n\tIPV6_FLOWINFO_SRFLAG          = 0x10000000\n\tIPV6_FLOWINFO_VERSION         = 0xf0000000\n\tIPV6_HOPLIMIT                 = 0x28\n\tIPV6_HOPOPTS                  = 0x34\n\tIPV6_JOIN_GROUP               = 0xc\n\tIPV6_LEAVE_GROUP              = 0xd\n\tIPV6_MIPDSTOPTS               = 0x36\n\tIPV6_MULTICAST_HOPS           = 0xa\n\tIPV6_MULTICAST_IF             = 0x9\n\tIPV6_MULTICAST_LOOP           = 0xb\n\tIPV6_NEXTHOP                  = 0x30\n\tIPV6_NOPROBE                  = 0x1c\n\tIPV6_PATHMTU                  = 0x2e\n\tIPV6_PKTINFO                  = 0x21\n\tIPV6_PKTOPTIONS               = 0x24\n\tIPV6_PRIORITY_10              = 0xa000000\n\tIPV6_PRIORITY_11              = 0xb000000\n\tIPV6_PRIORITY_12              = 0xc000000\n\tIPV6_PRIORITY_13              = 0xd000000\n\tIPV6_PRIORITY_14              = 0xe000000\n\tIPV6_PRIORITY_15              = 0xf000000\n\tIPV6_PRIORITY_8               = 0x8000000\n\tIPV6_PRIORITY_9               = 0x9000000\n\tIPV6_PRIORITY_BULK            = 0x4000000\n\tIPV6_PRIORITY_CONTROL         = 0x7000000\n\tIPV6_PRIORITY_FILLER          = 0x1000000\n\tIPV6_PRIORITY_INTERACTIVE     = 0x6000000\n\tIPV6_PRIORITY_RESERVED1       = 0x3000000\n\tIPV6_PRIORITY_RESERVED2       = 0x5000000\n\tIPV6_PRIORITY_UNATTENDED      = 0x2000000\n\tIPV6_PRIORITY_UNCHARACTERIZED = 0x0\n\tIPV6_RECVDSTOPTS              = 0x38\n\tIPV6_RECVHOPLIMIT             = 0x29\n\tIPV6_RECVHOPOPTS              = 0x35\n\tIPV6_RECVHOPS                 = 0x22\n\tIPV6_RECVIF                   = 0x1e\n\tIPV6_RECVPATHMTU              = 0x2f\n\tIPV6_RECVPKTINFO              = 0x23\n\tIPV6_RECVRTHDR                = 0x33\n\tIPV6_RECVSRCRT                = 0x1d\n\tIPV6_RECVTCLASS               = 0x2a\n\tIPV6_RTHDR                    = 0x32\n\tIPV6_RTHDRDSTOPTS             = 0x37\n\tIPV6_RTHDR_TYPE_0             = 0x0\n\tIPV6_RTHDR_TYPE_2             = 0x2\n\tIPV6_SENDIF                   = 0x1f\n\tIPV6_SRFLAG_LOOSE             = 0x0\n\tIPV6_SRFLAG_STRICT            = 0x10000000\n\tIPV6_TCLASS                   = 0x2b\n\tIPV6_TOKEN_LENGTH             = 0x40\n\tIPV6_UNICAST_HOPS             = 0x4\n\tIPV6_USE_MIN_MTU              = 0x2c\n\tIPV6_V6ONLY                   = 0x25\n\tIPV6_VERSION                  = 0x60000000\n\tIP_ADDRFORM                   = 0x16\n\tIP_ADD_MEMBERSHIP             = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP      = 0x3c\n\tIP_BLOCK_SOURCE               = 0x3a\n\tIP_BROADCAST_IF               = 0x10\n\tIP_CACHE_LINE_SIZE            = 0x80\n\tIP_DEFAULT_MULTICAST_LOOP     = 0x1\n\tIP_DEFAULT_MULTICAST_TTL      = 0x1\n\tIP_DF                         = 0x4000\n\tIP_DHCPMODE                   = 0x11\n\tIP_DONTFRAG                   = 0x19\n\tIP_DROP_MEMBERSHIP            = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP     = 0x3d\n\tIP_FINDPMTU                   = 0x1a\n\tIP_HDRINCL                    = 0x2\n\tIP_INC_MEMBERSHIPS            = 0x14\n\tIP_INIT_MEMBERSHIP            = 0x14\n\tIP_MAXPACKET                  = 0xffff\n\tIP_MF                         = 0x2000\n\tIP_MSS                        = 0x240\n\tIP_MULTICAST_HOPS             = 0xa\n\tIP_MULTICAST_IF               = 0x9\n\tIP_MULTICAST_LOOP             = 0xb\n\tIP_MULTICAST_TTL              = 0xa\n\tIP_OPT                        = 0x1b\n\tIP_OPTIONS                    = 0x1\n\tIP_PMTUAGE                    = 0x1b\n\tIP_RECVDSTADDR                = 0x7\n\tIP_RECVIF                     = 0x14\n\tIP_RECVIFINFO                 = 0xf\n\tIP_RECVINTERFACE              = 0x20\n\tIP_RECVMACHDR                 = 0xe\n\tIP_RECVOPTS                   = 0x5\n\tIP_RECVRETOPTS                = 0x6\n\tIP_RECVTTL                    = 0x22\n\tIP_RETOPTS                    = 0x8\n\tIP_SOURCE_FILTER              = 0x48\n\tIP_TOS                        = 0x3\n\tIP_TTL                        = 0x4\n\tIP_UNBLOCK_SOURCE             = 0x3b\n\tIP_UNICAST_HOPS               = 0x4\n\tISIG                          = 0x1\n\tISTRIP                        = 0x20\n\tIUCLC                         = 0x800\n\tIXANY                         = 0x1000\n\tIXOFF                         = 0x400\n\tIXON                          = 0x200\n\tI_FLUSH                       = 0x20005305\n\tLNOFLSH                       = 0x8000\n\tLOCK_EX                       = 0x2\n\tLOCK_NB                       = 0x4\n\tLOCK_SH                       = 0x1\n\tLOCK_UN                       = 0x8\n\tMADV_DONTNEED                 = 0x4\n\tMADV_NORMAL                   = 0x0\n\tMADV_RANDOM                   = 0x1\n\tMADV_SEQUENTIAL               = 0x2\n\tMADV_SPACEAVAIL               = 0x5\n\tMADV_WILLNEED                 = 0x3\n\tMAP_ANON                      = 0x10\n\tMAP_ANONYMOUS                 = 0x10\n\tMAP_FILE                      = 0x0\n\tMAP_FIXED                     = 0x100\n\tMAP_PRIVATE                   = 0x2\n\tMAP_SHARED                    = 0x1\n\tMAP_TYPE                      = 0xf0\n\tMAP_VARIABLE                  = 0x0\n\tMCAST_BLOCK_SOURCE            = 0x40\n\tMCAST_EXCLUDE                 = 0x2\n\tMCAST_INCLUDE                 = 0x1\n\tMCAST_JOIN_GROUP              = 0x3e\n\tMCAST_JOIN_SOURCE_GROUP       = 0x42\n\tMCAST_LEAVE_GROUP             = 0x3f\n\tMCAST_LEAVE_SOURCE_GROUP      = 0x43\n\tMCAST_SOURCE_FILTER           = 0x49\n\tMCAST_UNBLOCK_SOURCE          = 0x41\n\tMCL_CURRENT                   = 0x100\n\tMCL_FUTURE                    = 0x200\n\tMSG_ANY                       = 0x4\n\tMSG_ARGEXT                    = 0x400\n\tMSG_BAND                      = 0x2\n\tMSG_COMPAT                    = 0x8000\n\tMSG_CTRUNC                    = 0x20\n\tMSG_DONTROUTE                 = 0x4\n\tMSG_EOR                       = 0x8\n\tMSG_HIPRI                     = 0x1\n\tMSG_MAXIOVLEN                 = 0x10\n\tMSG_MPEG2                     = 0x80\n\tMSG_NONBLOCK                  = 0x4000\n\tMSG_NOSIGNAL                  = 0x100\n\tMSG_OOB                       = 0x1\n\tMSG_PEEK                      = 0x2\n\tMSG_TRUNC                     = 0x10\n\tMSG_WAITALL                   = 0x40\n\tMSG_WAITFORONE                = 0x200\n\tMS_ASYNC                      = 0x10\n\tMS_EINTR                      = 0x80\n\tMS_INVALIDATE                 = 0x40\n\tMS_PER_SEC                    = 0x3e8\n\tMS_SYNC                       = 0x20\n\tNFDBITS                       = 0x20\n\tNL0                           = 0x0\n\tNL1                           = 0x4000\n\tNL2                           = 0x8000\n\tNL3                           = 0xc000\n\tNLDLY                         = 0x4000\n\tNOFLSH                        = 0x80\n\tNOFLUSH                       = 0x80000000\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\n\tOLCUC                         = 0x2\n\tONLCR                         = 0x4\n\tONLRET                        = 0x20\n\tONOCR                         = 0x10\n\tONOEOT                        = 0x80000\n\tOPOST                         = 0x1\n\tOXTABS                        = 0x40000\n\tO_ACCMODE                     = 0x23\n\tO_APPEND                      = 0x8\n\tO_CIO                         = 0x80\n\tO_CIOR                        = 0x800000000\n\tO_CLOEXEC                     = 0x800000\n\tO_CREAT                       = 0x100\n\tO_DEFER                       = 0x2000\n\tO_DELAY                       = 0x4000\n\tO_DIRECT                      = 0x8000000\n\tO_DIRECTORY                   = 0x80000\n\tO_DSYNC                       = 0x400000\n\tO_EFSOFF                      = 0x400000000\n\tO_EFSON                       = 0x200000000\n\tO_EXCL                        = 0x400\n\tO_EXEC                        = 0x20\n\tO_LARGEFILE                   = 0x4000000\n\tO_NDELAY                      = 0x8000\n\tO_NOCACHE                     = 0x100000\n\tO_NOCTTY                      = 0x800\n\tO_NOFOLLOW                    = 0x1000000\n\tO_NONBLOCK                    = 0x4\n\tO_NONE                        = 0x3\n\tO_NSHARE                      = 0x10000\n\tO_RAW                         = 0x100000000\n\tO_RDONLY                      = 0x0\n\tO_RDWR                        = 0x2\n\tO_RSHARE                      = 0x1000\n\tO_RSYNC                       = 0x200000\n\tO_SEARCH                      = 0x20\n\tO_SNAPSHOT                    = 0x40\n\tO_SYNC                        = 0x10\n\tO_TRUNC                       = 0x200\n\tO_TTY_INIT                    = 0x0\n\tO_WRONLY                      = 0x1\n\tPARENB                        = 0x100\n\tPAREXT                        = 0x100000\n\tPARMRK                        = 0x8\n\tPARODD                        = 0x200\n\tPENDIN                        = 0x20000000\n\tPRIO_PGRP                     = 0x1\n\tPRIO_PROCESS                  = 0x0\n\tPRIO_USER                     = 0x2\n\tPROT_EXEC                     = 0x4\n\tPROT_NONE                     = 0x0\n\tPROT_READ                     = 0x1\n\tPROT_WRITE                    = 0x2\n\tPR_64BIT                      = 0x20\n\tPR_ADDR                       = 0x2\n\tPR_ARGEXT                     = 0x400\n\tPR_ATOMIC                     = 0x1\n\tPR_CONNREQUIRED               = 0x4\n\tPR_FASTHZ                     = 0x5\n\tPR_INP                        = 0x40\n\tPR_INTRLEVEL                  = 0x8000\n\tPR_MLS                        = 0x100\n\tPR_MLS_1_LABEL                = 0x200\n\tPR_NOEOR                      = 0x4000\n\tPR_RIGHTS                     = 0x10\n\tPR_SLOWHZ                     = 0x2\n\tPR_WANTRCVD                   = 0x8\n\tRLIMIT_AS                     = 0x6\n\tRLIMIT_CORE                   = 0x4\n\tRLIMIT_CPU                    = 0x0\n\tRLIMIT_DATA                   = 0x2\n\tRLIMIT_FSIZE                  = 0x1\n\tRLIMIT_NOFILE                 = 0x7\n\tRLIMIT_NPROC                  = 0x9\n\tRLIMIT_RSS                    = 0x5\n\tRLIMIT_STACK                  = 0x3\n\tRLIM_INFINITY                 = 0x7fffffff\n\tRTAX_AUTHOR                   = 0x6\n\tRTAX_BRD                      = 0x7\n\tRTAX_DST                      = 0x0\n\tRTAX_GATEWAY                  = 0x1\n\tRTAX_GENMASK                  = 0x3\n\tRTAX_IFA                      = 0x5\n\tRTAX_IFP                      = 0x4\n\tRTAX_MAX                      = 0x8\n\tRTAX_NETMASK                  = 0x2\n\tRTA_AUTHOR                    = 0x40\n\tRTA_BRD                       = 0x80\n\tRTA_DOWNSTREAM                = 0x100\n\tRTA_DST                       = 0x1\n\tRTA_GATEWAY                   = 0x2\n\tRTA_GENMASK                   = 0x8\n\tRTA_IFA                       = 0x20\n\tRTA_IFP                       = 0x10\n\tRTA_NETMASK                   = 0x4\n\tRTC_IA64                      = 0x3\n\tRTC_POWER                     = 0x1\n\tRTC_POWER_PC                  = 0x2\n\tRTF_ACTIVE_DGD                = 0x1000000\n\tRTF_BCE                       = 0x80000\n\tRTF_BLACKHOLE                 = 0x1000\n\tRTF_BROADCAST                 = 0x400000\n\tRTF_BUL                       = 0x2000\n\tRTF_CLONE                     = 0x10000\n\tRTF_CLONED                    = 0x20000\n\tRTF_CLONING                   = 0x100\n\tRTF_DONE                      = 0x40\n\tRTF_DYNAMIC                   = 0x10\n\tRTF_FREE_IN_PROG              = 0x4000000\n\tRTF_GATEWAY                   = 0x2\n\tRTF_HOST                      = 0x4\n\tRTF_LLINFO                    = 0x400\n\tRTF_LOCAL                     = 0x200000\n\tRTF_MASK                      = 0x80\n\tRTF_MODIFIED                  = 0x20\n\tRTF_MULTICAST                 = 0x800000\n\tRTF_PERMANENT6                = 0x8000000\n\tRTF_PINNED                    = 0x100000\n\tRTF_PROTO1                    = 0x8000\n\tRTF_PROTO2                    = 0x4000\n\tRTF_PROTO3                    = 0x40000\n\tRTF_REJECT                    = 0x8\n\tRTF_SMALLMTU                  = 0x40000\n\tRTF_STATIC                    = 0x800\n\tRTF_STOPSRCH                  = 0x2000000\n\tRTF_UNREACHABLE               = 0x10000000\n\tRTF_UP                        = 0x1\n\tRTF_XRESOLVE                  = 0x200\n\tRTM_ADD                       = 0x1\n\tRTM_CHANGE                    = 0x3\n\tRTM_DELADDR                   = 0xd\n\tRTM_DELETE                    = 0x2\n\tRTM_EXPIRE                    = 0xf\n\tRTM_GET                       = 0x4\n\tRTM_GETNEXT                   = 0x11\n\tRTM_IFINFO                    = 0xe\n\tRTM_LOCK                      = 0x8\n\tRTM_LOSING                    = 0x5\n\tRTM_MISS                      = 0x7\n\tRTM_NEWADDR                   = 0xc\n\tRTM_OLDADD                    = 0x9\n\tRTM_OLDDEL                    = 0xa\n\tRTM_REDIRECT                  = 0x6\n\tRTM_RESOLVE                   = 0xb\n\tRTM_RTLOST                    = 0x10\n\tRTM_RTTUNIT                   = 0xf4240\n\tRTM_SAMEADDR                  = 0x12\n\tRTM_SET                       = 0x13\n\tRTM_VERSION                   = 0x2\n\tRTM_VERSION_GR                = 0x4\n\tRTM_VERSION_GR_COMPAT         = 0x3\n\tRTM_VERSION_POLICY            = 0x5\n\tRTM_VERSION_POLICY_EXT        = 0x6\n\tRTM_VERSION_POLICY_PRFN       = 0x7\n\tRTV_EXPIRE                    = 0x4\n\tRTV_HOPCOUNT                  = 0x2\n\tRTV_MTU                       = 0x1\n\tRTV_RPIPE                     = 0x8\n\tRTV_RTT                       = 0x40\n\tRTV_RTTVAR                    = 0x80\n\tRTV_SPIPE                     = 0x10\n\tRTV_SSTHRESH                  = 0x20\n\tRUSAGE_CHILDREN               = -0x1\n\tRUSAGE_SELF                   = 0x0\n\tRUSAGE_THREAD                 = 0x1\n\tSCM_RIGHTS                    = 0x1\n\tSHUT_RD                       = 0x0\n\tSHUT_RDWR                     = 0x2\n\tSHUT_WR                       = 0x1\n\tSIGMAX64                      = 0xff\n\tSIGQUEUE_MAX                  = 0x20\n\tSIOCADDIFVIPA                 = 0x20006942\n\tSIOCADDMTU                    = -0x7ffb9690\n\tSIOCADDMULTI                  = -0x7fdf96cf\n\tSIOCADDNETID                  = -0x7fd796a9\n\tSIOCADDRT                     = -0x7fcf8df6\n\tSIOCAIFADDR                   = -0x7fbf96e6\n\tSIOCATMARK                    = 0x40047307\n\tSIOCDARP                      = -0x7fb396e0\n\tSIOCDELIFVIPA                 = 0x20006943\n\tSIOCDELMTU                    = -0x7ffb968f\n\tSIOCDELMULTI                  = -0x7fdf96ce\n\tSIOCDELPMTU                   = -0x7fd78ff6\n\tSIOCDELRT                     = -0x7fcf8df5\n\tSIOCDIFADDR                   = -0x7fd796e7\n\tSIOCDNETOPT                   = -0x3ffe9680\n\tSIOCDX25XLATE                 = -0x7fd7969b\n\tSIOCFIFADDR                   = -0x7fdf966d\n\tSIOCGARP                      = -0x3fb396da\n\tSIOCGETMTUS                   = 0x2000696f\n\tSIOCGETSGCNT                  = -0x3feb8acc\n\tSIOCGETVIFCNT                 = -0x3feb8acd\n\tSIOCGHIWAT                    = 0x40047301\n\tSIOCGIFADDR                   = -0x3fd796df\n\tSIOCGIFADDRS                  = 0x2000698c\n\tSIOCGIFBAUDRATE               = -0x3fdf9669\n\tSIOCGIFBRDADDR                = -0x3fd796dd\n\tSIOCGIFCONF                   = -0x3ff796bb\n\tSIOCGIFCONFGLOB               = -0x3ff79670\n\tSIOCGIFDSTADDR                = -0x3fd796de\n\tSIOCGIFFLAGS                  = -0x3fd796ef\n\tSIOCGIFGIDLIST                = 0x20006968\n\tSIOCGIFHWADDR                 = -0x3fab966b\n\tSIOCGIFMETRIC                 = -0x3fd796e9\n\tSIOCGIFMTU                    = -0x3fd796aa\n\tSIOCGIFNETMASK                = -0x3fd796db\n\tSIOCGIFOPTIONS                = -0x3fd796d6\n\tSIOCGISNO                     = -0x3fd79695\n\tSIOCGLOADF                    = -0x3ffb967e\n\tSIOCGLOWAT                    = 0x40047303\n\tSIOCGNETOPT                   = -0x3ffe96a5\n\tSIOCGNETOPT1                  = -0x3fdf967f\n\tSIOCGNMTUS                    = 0x2000696e\n\tSIOCGPGRP                     = 0x40047309\n\tSIOCGSIZIFCONF                = 0x4004696a\n\tSIOCGSRCFILTER                = -0x3fe796cb\n\tSIOCGTUNEPHASE                = -0x3ffb9676\n\tSIOCGX25XLATE                 = -0x3fd7969c\n\tSIOCIFATTACH                  = -0x7fdf9699\n\tSIOCIFDETACH                  = -0x7fdf969a\n\tSIOCIFGETPKEY                 = -0x7fdf969b\n\tSIOCIF_ATM_DARP               = -0x7fdf9683\n\tSIOCIF_ATM_DUMPARP            = -0x7fdf9685\n\tSIOCIF_ATM_GARP               = -0x7fdf9682\n\tSIOCIF_ATM_IDLE               = -0x7fdf9686\n\tSIOCIF_ATM_SARP               = -0x7fdf9681\n\tSIOCIF_ATM_SNMPARP            = -0x7fdf9687\n\tSIOCIF_ATM_SVC                = -0x7fdf9684\n\tSIOCIF_ATM_UBR                = -0x7fdf9688\n\tSIOCIF_DEVHEALTH              = -0x7ffb966c\n\tSIOCIF_IB_ARP_INCOMP          = -0x7fdf9677\n\tSIOCIF_IB_ARP_TIMER           = -0x7fdf9678\n\tSIOCIF_IB_CLEAR_PINFO         = -0x3fdf966f\n\tSIOCIF_IB_DEL_ARP             = -0x7fdf967f\n\tSIOCIF_IB_DEL_PINFO           = -0x3fdf9670\n\tSIOCIF_IB_DUMP_ARP            = -0x7fdf9680\n\tSIOCIF_IB_GET_ARP             = -0x7fdf967e\n\tSIOCIF_IB_GET_INFO            = -0x3f879675\n\tSIOCIF_IB_GET_STATS           = -0x3f879672\n\tSIOCIF_IB_NOTIFY_ADDR_REM     = -0x3f87966a\n\tSIOCIF_IB_RESET_STATS         = -0x3f879671\n\tSIOCIF_IB_RESIZE_CQ           = -0x7fdf9679\n\tSIOCIF_IB_SET_ARP             = -0x7fdf967d\n\tSIOCIF_IB_SET_PKEY            = -0x7fdf967c\n\tSIOCIF_IB_SET_PORT            = -0x7fdf967b\n\tSIOCIF_IB_SET_QKEY            = -0x7fdf9676\n\tSIOCIF_IB_SET_QSIZE           = -0x7fdf967a\n\tSIOCLISTIFVIPA                = 0x20006944\n\tSIOCSARP                      = -0x7fb396e2\n\tSIOCSHIWAT                    = 0x80047300\n\tSIOCSIFADDR                   = -0x7fd796f4\n\tSIOCSIFADDRORI                = -0x7fdb9673\n\tSIOCSIFBRDADDR                = -0x7fd796ed\n\tSIOCSIFDSTADDR                = -0x7fd796f2\n\tSIOCSIFFLAGS                  = -0x7fd796f0\n\tSIOCSIFGIDLIST                = 0x20006969\n\tSIOCSIFMETRIC                 = -0x7fd796e8\n\tSIOCSIFMTU                    = -0x7fd796a8\n\tSIOCSIFNETDUMP                = -0x7fd796e4\n\tSIOCSIFNETMASK                = -0x7fd796ea\n\tSIOCSIFOPTIONS                = -0x7fd796d7\n\tSIOCSIFSUBCHAN                = -0x7fd796e5\n\tSIOCSISNO                     = -0x7fd79694\n\tSIOCSLOADF                    = -0x3ffb967d\n\tSIOCSLOWAT                    = 0x80047302\n\tSIOCSNETOPT                   = -0x7ffe96a6\n\tSIOCSPGRP                     = 0x80047308\n\tSIOCSX25XLATE                 = -0x7fd7969d\n\tSOCK_CONN_DGRAM               = 0x6\n\tSOCK_DGRAM                    = 0x2\n\tSOCK_RAW                      = 0x3\n\tSOCK_RDM                      = 0x4\n\tSOCK_SEQPACKET                = 0x5\n\tSOCK_STREAM                   = 0x1\n\tSOL_SOCKET                    = 0xffff\n\tSOMAXCONN                     = 0x400\n\tSO_ACCEPTCONN                 = 0x2\n\tSO_AUDIT                      = 0x8000\n\tSO_BROADCAST                  = 0x20\n\tSO_CKSUMRECV                  = 0x800\n\tSO_DEBUG                      = 0x1\n\tSO_DONTROUTE                  = 0x10\n\tSO_ERROR                      = 0x1007\n\tSO_KEEPALIVE                  = 0x8\n\tSO_KERNACCEPT                 = 0x2000\n\tSO_LINGER                     = 0x80\n\tSO_NOMULTIPATH                = 0x4000\n\tSO_NOREUSEADDR                = 0x1000\n\tSO_OOBINLINE                  = 0x100\n\tSO_PEERID                     = 0x1009\n\tSO_RCVBUF                     = 0x1002\n\tSO_RCVLOWAT                   = 0x1004\n\tSO_RCVTIMEO                   = 0x1006\n\tSO_REUSEADDR                  = 0x4\n\tSO_REUSEPORT                  = 0x200\n\tSO_SNDBUF                     = 0x1001\n\tSO_SNDLOWAT                   = 0x1003\n\tSO_SNDTIMEO                   = 0x1005\n\tSO_TIMESTAMPNS                = 0x100a\n\tSO_TYPE                       = 0x1008\n\tSO_USELOOPBACK                = 0x40\n\tSO_USE_IFBUFS                 = 0x400\n\tS_BANDURG                     = 0x400\n\tS_EMODFMT                     = 0x3c000000\n\tS_ENFMT                       = 0x400\n\tS_ERROR                       = 0x100\n\tS_HANGUP                      = 0x200\n\tS_HIPRI                       = 0x2\n\tS_ICRYPTO                     = 0x80000\n\tS_IEXEC                       = 0x40\n\tS_IFBLK                       = 0x6000\n\tS_IFCHR                       = 0x2000\n\tS_IFDIR                       = 0x4000\n\tS_IFIFO                       = 0x1000\n\tS_IFJOURNAL                   = 0x10000\n\tS_IFLNK                       = 0xa000\n\tS_IFMPX                       = 0x2200\n\tS_IFMT                        = 0xf000\n\tS_IFPDIR                      = 0x4000000\n\tS_IFPSDIR                     = 0x8000000\n\tS_IFPSSDIR                    = 0xc000000\n\tS_IFREG                       = 0x8000\n\tS_IFSOCK                      = 0xc000\n\tS_IFSYSEA                     = 0x30000000\n\tS_INPUT                       = 0x1\n\tS_IREAD                       = 0x100\n\tS_IRGRP                       = 0x20\n\tS_IROTH                       = 0x4\n\tS_IRUSR                       = 0x100\n\tS_IRWXG                       = 0x38\n\tS_IRWXO                       = 0x7\n\tS_IRWXU                       = 0x1c0\n\tS_ISGID                       = 0x400\n\tS_ISUID                       = 0x800\n\tS_ISVTX                       = 0x200\n\tS_ITCB                        = 0x1000000\n\tS_ITP                         = 0x800000\n\tS_IWGRP                       = 0x10\n\tS_IWOTH                       = 0x2\n\tS_IWRITE                      = 0x80\n\tS_IWUSR                       = 0x80\n\tS_IXACL                       = 0x2000000\n\tS_IXATTR                      = 0x40000\n\tS_IXGRP                       = 0x8\n\tS_IXINTERFACE                 = 0x100000\n\tS_IXMOD                       = 0x40000000\n\tS_IXOTH                       = 0x1\n\tS_IXUSR                       = 0x40\n\tS_MSG                         = 0x8\n\tS_OUTPUT                      = 0x4\n\tS_RDBAND                      = 0x20\n\tS_RDNORM                      = 0x10\n\tS_RESERVED1                   = 0x20000\n\tS_RESERVED2                   = 0x200000\n\tS_RESERVED3                   = 0x400000\n\tS_RESERVED4                   = 0x80000000\n\tS_RESFMT1                     = 0x10000000\n\tS_RESFMT10                    = 0x34000000\n\tS_RESFMT11                    = 0x38000000\n\tS_RESFMT12                    = 0x3c000000\n\tS_RESFMT2                     = 0x14000000\n\tS_RESFMT3                     = 0x18000000\n\tS_RESFMT4                     = 0x1c000000\n\tS_RESFMT5                     = 0x20000000\n\tS_RESFMT6                     = 0x24000000\n\tS_RESFMT7                     = 0x28000000\n\tS_RESFMT8                     = 0x2c000000\n\tS_WRBAND                      = 0x80\n\tS_WRNORM                      = 0x40\n\tTAB0                          = 0x0\n\tTAB1                          = 0x400\n\tTAB2                          = 0x800\n\tTAB3                          = 0xc00\n\tTABDLY                        = 0xc00\n\tTCFLSH                        = 0x540c\n\tTCGETA                        = 0x5405\n\tTCGETS                        = 0x5401\n\tTCIFLUSH                      = 0x0\n\tTCIOFF                        = 0x2\n\tTCIOFLUSH                     = 0x2\n\tTCION                         = 0x3\n\tTCOFLUSH                      = 0x1\n\tTCOOFF                        = 0x0\n\tTCOON                         = 0x1\n\tTCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800\n\tTCP_ACLADD                    = 0x23\n\tTCP_ACLBIND                   = 0x26\n\tTCP_ACLCLEAR                  = 0x22\n\tTCP_ACLDEL                    = 0x24\n\tTCP_ACLDENY                   = 0x8\n\tTCP_ACLFLUSH                  = 0x21\n\tTCP_ACLGID                    = 0x1\n\tTCP_ACLLS                     = 0x25\n\tTCP_ACLSUBNET                 = 0x4\n\tTCP_ACLUID                    = 0x2\n\tTCP_CWND_DF                   = 0x16\n\tTCP_CWND_IF                   = 0x15\n\tTCP_DELAY_ACK_FIN             = 0x2\n\tTCP_DELAY_ACK_SYN             = 0x1\n\tTCP_FASTNAME                  = 0x101080a\n\tTCP_KEEPCNT                   = 0x13\n\tTCP_KEEPIDLE                  = 0x11\n\tTCP_KEEPINTVL                 = 0x12\n\tTCP_LSPRIV                    = 0x29\n\tTCP_LUID                      = 0x20\n\tTCP_MAXBURST                  = 0x8\n\tTCP_MAXDF                     = 0x64\n\tTCP_MAXIF                     = 0x64\n\tTCP_MAXSEG                    = 0x2\n\tTCP_MAXWIN                    = 0xffff\n\tTCP_MAXWINDOWSCALE            = 0xe\n\tTCP_MAX_SACK                  = 0x4\n\tTCP_MSS                       = 0x5b4\n\tTCP_NODELAY                   = 0x1\n\tTCP_NODELAYACK                = 0x14\n\tTCP_NOREDUCE_CWND_EXIT_FRXMT  = 0x19\n\tTCP_NOREDUCE_CWND_IN_FRXMT    = 0x18\n\tTCP_NOTENTER_SSTART           = 0x17\n\tTCP_OPT                       = 0x19\n\tTCP_RFC1323                   = 0x4\n\tTCP_SETPRIV                   = 0x27\n\tTCP_STDURG                    = 0x10\n\tTCP_TIMESTAMP_OPTLEN          = 0xc\n\tTCP_UNSETPRIV                 = 0x28\n\tTCSAFLUSH                     = 0x2\n\tTCSBRK                        = 0x5409\n\tTCSETA                        = 0x5406\n\tTCSETAF                       = 0x5408\n\tTCSETAW                       = 0x5407\n\tTCSETS                        = 0x5402\n\tTCSETSF                       = 0x5404\n\tTCSETSW                       = 0x5403\n\tTCXONC                        = 0x540b\n\tTIMER_ABSTIME                 = 0x3e7\n\tTIMER_MAX                     = 0x20\n\tTIOC                          = 0x5400\n\tTIOCCBRK                      = 0x2000747a\n\tTIOCCDTR                      = 0x20007478\n\tTIOCCONS                      = 0x80047462\n\tTIOCEXCL                      = 0x2000740d\n\tTIOCFLUSH                     = 0x80047410\n\tTIOCGETC                      = 0x40067412\n\tTIOCGETD                      = 0x40047400\n\tTIOCGETP                      = 0x40067408\n\tTIOCGLTC                      = 0x40067474\n\tTIOCGPGRP                     = 0x40047477\n\tTIOCGSID                      = 0x40047448\n\tTIOCGSIZE                     = 0x40087468\n\tTIOCGWINSZ                    = 0x40087468\n\tTIOCHPCL                      = 0x20007402\n\tTIOCLBIC                      = 0x8004747e\n\tTIOCLBIS                      = 0x8004747f\n\tTIOCLGET                      = 0x4004747c\n\tTIOCLSET                      = 0x8004747d\n\tTIOCMBIC                      = 0x8004746b\n\tTIOCMBIS                      = 0x8004746c\n\tTIOCMGET                      = 0x4004746a\n\tTIOCMIWAIT                    = 0x80047464\n\tTIOCMODG                      = 0x40047403\n\tTIOCMODS                      = 0x80047404\n\tTIOCMSET                      = 0x8004746d\n\tTIOCM_CAR                     = 0x40\n\tTIOCM_CD                      = 0x40\n\tTIOCM_CTS                     = 0x20\n\tTIOCM_DSR                     = 0x100\n\tTIOCM_DTR                     = 0x2\n\tTIOCM_LE                      = 0x1\n\tTIOCM_RI                      = 0x80\n\tTIOCM_RNG                     = 0x80\n\tTIOCM_RTS                     = 0x4\n\tTIOCM_SR                      = 0x10\n\tTIOCM_ST                      = 0x8\n\tTIOCNOTTY                     = 0x20007471\n\tTIOCNXCL                      = 0x2000740e\n\tTIOCOUTQ                      = 0x40047473\n\tTIOCPKT                       = 0x80047470\n\tTIOCPKT_DATA                  = 0x0\n\tTIOCPKT_DOSTOP                = 0x20\n\tTIOCPKT_FLUSHREAD             = 0x1\n\tTIOCPKT_FLUSHWRITE            = 0x2\n\tTIOCPKT_NOSTOP                = 0x10\n\tTIOCPKT_START                 = 0x8\n\tTIOCPKT_STOP                  = 0x4\n\tTIOCREMOTE                    = 0x80047469\n\tTIOCSBRK                      = 0x2000747b\n\tTIOCSDTR                      = 0x20007479\n\tTIOCSETC                      = 0x80067411\n\tTIOCSETD                      = 0x80047401\n\tTIOCSETN                      = 0x8006740a\n\tTIOCSETP                      = 0x80067409\n\tTIOCSLTC                      = 0x80067475\n\tTIOCSPGRP                     = 0x80047476\n\tTIOCSSIZE                     = 0x80087467\n\tTIOCSTART                     = 0x2000746e\n\tTIOCSTI                       = 0x80017472\n\tTIOCSTOP                      = 0x2000746f\n\tTIOCSWINSZ                    = 0x80087467\n\tTIOCUCNTL                     = 0x80047466\n\tTOSTOP                        = 0x10000\n\tUTIME_NOW                     = -0x2\n\tUTIME_OMIT                    = -0x3\n\tVDISCRD                       = 0xc\n\tVDSUSP                        = 0xa\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\n\tVINTR                         = 0x0\n\tVKILL                         = 0x3\n\tVLNEXT                        = 0xe\n\tVMIN                          = 0x4\n\tVQUIT                         = 0x1\n\tVREPRINT                      = 0xb\n\tVSTART                        = 0x7\n\tVSTOP                         = 0x8\n\tVSTRT                         = 0x7\n\tVSUSP                         = 0x9\n\tVT0                           = 0x0\n\tVT1                           = 0x8000\n\tVTDELAY                       = 0x2000\n\tVTDLY                         = 0x8000\n\tVTIME                         = 0x5\n\tVWERSE                        = 0xd\n\tWPARSTART                     = 0x1\n\tWPARSTOP                      = 0x2\n\tWPARTTYNAME                   = \"Global\"\n\tXCASE                         = 0x4\n\tXTABS                         = 0xc00\n\t_FDATAFLUSH                   = 0x2000000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x43)\n\tEADDRNOTAVAIL   = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x42)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x38)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x78)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x75)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECLONEME        = syscall.Errno(0x52)\n\tECONNABORTED    = syscall.Errno(0x48)\n\tECONNREFUSED    = syscall.Errno(0x4f)\n\tECONNRESET      = syscall.Errno(0x49)\n\tECORRUPT        = syscall.Errno(0x59)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDESTADDREQ     = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x3a)\n\tEDIST           = syscall.Errno(0x35)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x58)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFORMAT         = syscall.Errno(0x30)\n\tEHOSTDOWN       = syscall.Errno(0x50)\n\tEHOSTUNREACH    = syscall.Errno(0x51)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x74)\n\tEINPROGRESS     = syscall.Errno(0x37)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x4b)\n\tEISDIR          = syscall.Errno(0x15)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x55)\n\tEMEDIA          = syscall.Errno(0x6e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x3b)\n\tEMULTIHOP       = syscall.Errno(0x7d)\n\tENAMETOOLONG    = syscall.Errno(0x56)\n\tENETDOWN        = syscall.Errno(0x45)\n\tENETRESET       = syscall.Errno(0x47)\n\tENETUNREACH     = syscall.Errno(0x46)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x70)\n\tENOBUFS         = syscall.Errno(0x4a)\n\tENOCONNECT      = syscall.Errno(0x32)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x7a)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x31)\n\tENOLINK         = syscall.Errno(0x7e)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENOPROTOOPT     = syscall.Errno(0x3d)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x76)\n\tENOSTR          = syscall.Errno(0x7b)\n\tENOSYS          = syscall.Errno(0x6d)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x4c)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x11)\n\tENOTREADY       = syscall.Errno(0x2e)\n\tENOTRECOVERABLE = syscall.Errno(0x5e)\n\tENOTRUST        = syscall.Errno(0x72)\n\tENOTSOCK        = syscall.Errno(0x39)\n\tENOTSUP         = syscall.Errno(0x7c)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x40)\n\tEOVERFLOW       = syscall.Errno(0x7f)\n\tEOWNERDEAD      = syscall.Errno(0x5f)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x41)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x53)\n\tEPROTO          = syscall.Errno(0x79)\n\tEPROTONOSUPPORT = syscall.Errno(0x3e)\n\tEPROTOTYPE      = syscall.Errno(0x3c)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x5d)\n\tERESTART        = syscall.Errno(0x52)\n\tEROFS           = syscall.Errno(0x1e)\n\tESAD            = syscall.Errno(0x71)\n\tESHUTDOWN       = syscall.Errno(0x4d)\n\tESOCKTNOSUPPORT = syscall.Errno(0x3f)\n\tESOFT           = syscall.Errno(0x6f)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x34)\n\tESYSERROR       = syscall.Errno(0x5a)\n\tETIME           = syscall.Errno(0x77)\n\tETIMEDOUT       = syscall.Errno(0x4e)\n\tETOOMANYREFS    = syscall.Errno(0x73)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x54)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEWRPROTECT      = syscall.Errno(0x2f)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT     = syscall.Signal(0x6)\n\tSIGAIO      = syscall.Signal(0x17)\n\tSIGALRM     = syscall.Signal(0xe)\n\tSIGALRM1    = syscall.Signal(0x26)\n\tSIGBUS      = syscall.Signal(0xa)\n\tSIGCAPI     = syscall.Signal(0x31)\n\tSIGCHLD     = syscall.Signal(0x14)\n\tSIGCLD      = syscall.Signal(0x14)\n\tSIGCONT     = syscall.Signal(0x13)\n\tSIGCPUFAIL  = syscall.Signal(0x3b)\n\tSIGDANGER   = syscall.Signal(0x21)\n\tSIGEMT      = syscall.Signal(0x7)\n\tSIGFPE      = syscall.Signal(0x8)\n\tSIGGRANT    = syscall.Signal(0x3c)\n\tSIGHUP      = syscall.Signal(0x1)\n\tSIGILL      = syscall.Signal(0x4)\n\tSIGINT      = syscall.Signal(0x2)\n\tSIGIO       = syscall.Signal(0x17)\n\tSIGIOINT    = syscall.Signal(0x10)\n\tSIGIOT      = syscall.Signal(0x6)\n\tSIGKAP      = syscall.Signal(0x3c)\n\tSIGKILL     = syscall.Signal(0x9)\n\tSIGLOST     = syscall.Signal(0x6)\n\tSIGMAX      = syscall.Signal(0x3f)\n\tSIGMAX32    = syscall.Signal(0x3f)\n\tSIGMIGRATE  = syscall.Signal(0x23)\n\tSIGMSG      = syscall.Signal(0x1b)\n\tSIGPIPE     = syscall.Signal(0xd)\n\tSIGPOLL     = syscall.Signal(0x17)\n\tSIGPRE      = syscall.Signal(0x24)\n\tSIGPROF     = syscall.Signal(0x20)\n\tSIGPTY      = syscall.Signal(0x17)\n\tSIGPWR      = syscall.Signal(0x1d)\n\tSIGQUIT     = syscall.Signal(0x3)\n\tSIGRECONFIG = syscall.Signal(0x3a)\n\tSIGRETRACT  = syscall.Signal(0x3d)\n\tSIGSAK      = syscall.Signal(0x3f)\n\tSIGSEGV     = syscall.Signal(0xb)\n\tSIGSOUND    = syscall.Signal(0x3e)\n\tSIGSTOP     = syscall.Signal(0x11)\n\tSIGSYS      = syscall.Signal(0xc)\n\tSIGSYSERROR = syscall.Signal(0x30)\n\tSIGTALRM    = syscall.Signal(0x26)\n\tSIGTERM     = syscall.Signal(0xf)\n\tSIGTRAP     = syscall.Signal(0x5)\n\tSIGTSTP     = syscall.Signal(0x12)\n\tSIGTTIN     = syscall.Signal(0x15)\n\tSIGTTOU     = syscall.Signal(0x16)\n\tSIGURG      = syscall.Signal(0x10)\n\tSIGUSR1     = syscall.Signal(0x1e)\n\tSIGUSR2     = syscall.Signal(0x1f)\n\tSIGVIRT     = syscall.Signal(0x25)\n\tSIGVTALRM   = syscall.Signal(0x22)\n\tSIGWAITING  = syscall.Signal(0x27)\n\tSIGWINCH    = syscall.Signal(0x1c)\n\tSIGXCPU     = syscall.Signal(0x18)\n\tSIGXFSZ     = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"not owner\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"I/O error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"arg list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file number\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"not enough space\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"ENOTEMPTY\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"file table overflow\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"not a typewriter\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"deadlock condition if locked\"},\n\t{46, \"ENOTREADY\", \"device not ready\"},\n\t{47, \"EWRPROTECT\", \"write-protected media\"},\n\t{48, \"EFORMAT\", \"unformatted or incompatible media\"},\n\t{49, \"ENOLCK\", \"no locks available\"},\n\t{50, \"ENOCONNECT\", \"cannot Establish Connection\"},\n\t{52, \"ESTALE\", \"missing file or filesystem\"},\n\t{53, \"EDIST\", \"requests blocked by Administrator\"},\n\t{55, \"EINPROGRESS\", \"operation now in progress\"},\n\t{56, \"EALREADY\", \"operation already in progress\"},\n\t{57, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{58, \"EDESTADDREQ\", \"destination address required\"},\n\t{59, \"EMSGSIZE\", \"message too long\"},\n\t{60, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{61, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{62, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{63, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{64, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{65, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{66, \"EAFNOSUPPORT\", \"addr family not supported by protocol\"},\n\t{67, \"EADDRINUSE\", \"address already in use\"},\n\t{68, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{69, \"ENETDOWN\", \"network is down\"},\n\t{70, \"ENETUNREACH\", \"network is unreachable\"},\n\t{71, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{72, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{73, \"ECONNRESET\", \"connection reset by peer\"},\n\t{74, \"ENOBUFS\", \"no buffer space available\"},\n\t{75, \"EISCONN\", \"socket is already connected\"},\n\t{76, \"ENOTCONN\", \"socket is not connected\"},\n\t{77, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{78, \"ETIMEDOUT\", \"connection timed out\"},\n\t{79, \"ECONNREFUSED\", \"connection refused\"},\n\t{80, \"EHOSTDOWN\", \"host is down\"},\n\t{81, \"EHOSTUNREACH\", \"no route to host\"},\n\t{82, \"ERESTART\", \"restart the system call\"},\n\t{83, \"EPROCLIM\", \"too many processes\"},\n\t{84, \"EUSERS\", \"too many users\"},\n\t{85, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{86, \"ENAMETOOLONG\", \"file name too long\"},\n\t{88, \"EDQUOT\", \"disk quota exceeded\"},\n\t{89, \"ECORRUPT\", \"invalid file system control data detected\"},\n\t{90, \"ESYSERROR\", \"for future use \"},\n\t{93, \"EREMOTE\", \"item is not local to host\"},\n\t{94, \"ENOTRECOVERABLE\", \"state not recoverable \"},\n\t{95, \"EOWNERDEAD\", \"previous owner died \"},\n\t{109, \"ENOSYS\", \"function not implemented\"},\n\t{110, \"EMEDIA\", \"media surface error\"},\n\t{111, \"ESOFT\", \"I/O completed, but needs relocation\"},\n\t{112, \"ENOATTR\", \"no attribute found\"},\n\t{113, \"ESAD\", \"security Authentication Denied\"},\n\t{114, \"ENOTRUST\", \"not a Trusted Program\"},\n\t{115, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{116, \"EILSEQ\", \"invalid wide character\"},\n\t{117, \"ECANCELED\", \"asynchronous I/O cancelled\"},\n\t{118, \"ENOSR\", \"out of STREAMS resources\"},\n\t{119, \"ETIME\", \"system call timed out\"},\n\t{120, \"EBADMSG\", \"next message has wrong type\"},\n\t{121, \"EPROTO\", \"error in protocol\"},\n\t{122, \"ENODATA\", \"no message on stream head read q\"},\n\t{123, \"ENOSTR\", \"fd not associated with a stream\"},\n\t{124, \"ENOTSUP\", \"unsupported attribute value\"},\n\t{125, \"EMULTIHOP\", \"multihop is not allowed\"},\n\t{126, \"ENOLINK\", \"the server link has been severed\"},\n\t{127, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"IOT/Abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible/complete\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{27, \"SIGMSG\", \"input device data\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGPWR\", \"power-failure\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPROF\", \"profiling timer expired\"},\n\t{33, \"SIGDANGER\", \"paging space low\"},\n\t{34, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{35, \"SIGMIGRATE\", \"signal 35\"},\n\t{36, \"SIGPRE\", \"signal 36\"},\n\t{37, \"SIGVIRT\", \"signal 37\"},\n\t{38, \"SIGTALRM\", \"signal 38\"},\n\t{39, \"SIGWAITING\", \"signal 39\"},\n\t{48, \"SIGSYSERROR\", \"signal 48\"},\n\t{49, \"SIGCAPI\", \"signal 49\"},\n\t{58, \"SIGRECONFIG\", \"signal 58\"},\n\t{59, \"SIGCPUFAIL\", \"CPU Failure Predicted\"},\n\t{60, \"SIGKAP\", \"monitor mode granted\"},\n\t{61, \"SIGRETRACT\", \"monitor mode retracted\"},\n\t{62, \"SIGSOUND\", \"sound completed\"},\n\t{63, \"SIGSAK\", \"secure attention\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go",
    "content": "// mkerrors.sh -maix64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && aix\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -maix64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                  = 0x10\n\tAF_BYPASS                     = 0x19\n\tAF_CCITT                      = 0xa\n\tAF_CHAOS                      = 0x5\n\tAF_DATAKIT                    = 0x9\n\tAF_DECnet                     = 0xc\n\tAF_DLI                        = 0xd\n\tAF_ECMA                       = 0x8\n\tAF_HYLINK                     = 0xf\n\tAF_IMPLINK                    = 0x3\n\tAF_INET                       = 0x2\n\tAF_INET6                      = 0x18\n\tAF_INTF                       = 0x14\n\tAF_ISO                        = 0x7\n\tAF_LAT                        = 0xe\n\tAF_LINK                       = 0x12\n\tAF_LOCAL                      = 0x1\n\tAF_MAX                        = 0x1e\n\tAF_NDD                        = 0x17\n\tAF_NETWARE                    = 0x16\n\tAF_NS                         = 0x6\n\tAF_OSI                        = 0x7\n\tAF_PUP                        = 0x4\n\tAF_RIF                        = 0x15\n\tAF_ROUTE                      = 0x11\n\tAF_SNA                        = 0xb\n\tAF_UNIX                       = 0x1\n\tAF_UNSPEC                     = 0x0\n\tALTWERASE                     = 0x400000\n\tARPHRD_802_3                  = 0x6\n\tARPHRD_802_5                  = 0x6\n\tARPHRD_ETHER                  = 0x1\n\tARPHRD_FDDI                   = 0x1\n\tB0                            = 0x0\n\tB110                          = 0x3\n\tB1200                         = 0x9\n\tB134                          = 0x4\n\tB150                          = 0x5\n\tB1800                         = 0xa\n\tB19200                        = 0xe\n\tB200                          = 0x6\n\tB2400                         = 0xb\n\tB300                          = 0x7\n\tB38400                        = 0xf\n\tB4800                         = 0xc\n\tB50                           = 0x1\n\tB600                          = 0x8\n\tB75                           = 0x2\n\tB9600                         = 0xd\n\tBRKINT                        = 0x2\n\tBS0                           = 0x0\n\tBS1                           = 0x1000\n\tBSDLY                         = 0x1000\n\tCAP_AACCT                     = 0x6\n\tCAP_ARM_APPLICATION           = 0x5\n\tCAP_BYPASS_RAC_VMM            = 0x3\n\tCAP_CLEAR                     = 0x0\n\tCAP_CREDENTIALS               = 0x7\n\tCAP_EFFECTIVE                 = 0x1\n\tCAP_EWLM_AGENT                = 0x4\n\tCAP_INHERITABLE               = 0x2\n\tCAP_MAXIMUM                   = 0x7\n\tCAP_NUMA_ATTACH               = 0x2\n\tCAP_PERMITTED                 = 0x3\n\tCAP_PROPAGATE                 = 0x1\n\tCAP_PROPOGATE                 = 0x1\n\tCAP_SET                       = 0x1\n\tCBAUD                         = 0xf\n\tCFLUSH                        = 0xf\n\tCIBAUD                        = 0xf0000\n\tCLOCAL                        = 0x800\n\tCLOCK_MONOTONIC               = 0xa\n\tCLOCK_PROCESS_CPUTIME_ID      = 0xb\n\tCLOCK_REALTIME                = 0x9\n\tCLOCK_THREAD_CPUTIME_ID       = 0xc\n\tCR0                           = 0x0\n\tCR1                           = 0x100\n\tCR2                           = 0x200\n\tCR3                           = 0x300\n\tCRDLY                         = 0x300\n\tCREAD                         = 0x80\n\tCS5                           = 0x0\n\tCS6                           = 0x10\n\tCS7                           = 0x20\n\tCS8                           = 0x30\n\tCSIOCGIFCONF                  = -0x3fef96dc\n\tCSIZE                         = 0x30\n\tCSMAP_DIR                     = \"/usr/lib/nls/csmap/\"\n\tCSTART                        = '\\021'\n\tCSTOP                         = '\\023'\n\tCSTOPB                        = 0x40\n\tCSUSP                         = 0x1a\n\tECHO                          = 0x8\n\tECHOCTL                       = 0x20000\n\tECHOE                         = 0x10\n\tECHOK                         = 0x20\n\tECHOKE                        = 0x80000\n\tECHONL                        = 0x40\n\tECHOPRT                       = 0x40000\n\tECH_ICMPID                    = 0x2\n\tETHERNET_CSMACD               = 0x6\n\tEVENP                         = 0x80\n\tEXCONTINUE                    = 0x0\n\tEXDLOK                        = 0x3\n\tEXIO                          = 0x2\n\tEXPGIO                        = 0x0\n\tEXRESUME                      = 0x2\n\tEXRETURN                      = 0x1\n\tEXSIG                         = 0x4\n\tEXTA                          = 0xe\n\tEXTB                          = 0xf\n\tEXTRAP                        = 0x1\n\tEYEC_RTENTRYA                 = 0x257274656e747241\n\tEYEC_RTENTRYF                 = 0x257274656e747246\n\tE_ACC                         = 0x0\n\tFD_CLOEXEC                    = 0x1\n\tFD_SETSIZE                    = 0xfffe\n\tFF0                           = 0x0\n\tFF1                           = 0x2000\n\tFFDLY                         = 0x2000\n\tFLUSHBAND                     = 0x40\n\tFLUSHLOW                      = 0x8\n\tFLUSHO                        = 0x100000\n\tFLUSHR                        = 0x1\n\tFLUSHRW                       = 0x3\n\tFLUSHW                        = 0x2\n\tF_CLOSEM                      = 0xa\n\tF_DUP2FD                      = 0xe\n\tF_DUPFD                       = 0x0\n\tF_GETFD                       = 0x1\n\tF_GETFL                       = 0x3\n\tF_GETLK                       = 0xb\n\tF_GETLK64                     = 0xb\n\tF_GETOWN                      = 0x8\n\tF_LOCK                        = 0x1\n\tF_OK                          = 0x0\n\tF_RDLCK                       = 0x1\n\tF_SETFD                       = 0x2\n\tF_SETFL                       = 0x4\n\tF_SETLK                       = 0xc\n\tF_SETLK64                     = 0xc\n\tF_SETLKW                      = 0xd\n\tF_SETLKW64                    = 0xd\n\tF_SETOWN                      = 0x9\n\tF_TEST                        = 0x3\n\tF_TLOCK                       = 0x2\n\tF_TSTLK                       = 0xf\n\tF_ULOCK                       = 0x0\n\tF_UNLCK                       = 0x3\n\tF_WRLCK                       = 0x2\n\tHUPCL                         = 0x400\n\tIBSHIFT                       = 0x10\n\tICANON                        = 0x2\n\tICMP6_FILTER                  = 0x26\n\tICMP6_SEC_SEND_DEL            = 0x46\n\tICMP6_SEC_SEND_GET            = 0x47\n\tICMP6_SEC_SEND_SET            = 0x44\n\tICMP6_SEC_SEND_SET_CGA_ADDR   = 0x45\n\tICRNL                         = 0x100\n\tIEXTEN                        = 0x200000\n\tIFA_FIRSTALIAS                = 0x2000\n\tIFA_ROUTE                     = 0x1\n\tIFF_64BIT                     = 0x4000000\n\tIFF_ALLCAST                   = 0x20000\n\tIFF_ALLMULTI                  = 0x200\n\tIFF_BPF                       = 0x8000000\n\tIFF_BRIDGE                    = 0x40000\n\tIFF_BROADCAST                 = 0x2\n\tIFF_CANTCHANGE                = 0x80c52\n\tIFF_CHECKSUM_OFFLOAD          = 0x10000000\n\tIFF_D1                        = 0x8000\n\tIFF_D2                        = 0x4000\n\tIFF_D3                        = 0x2000\n\tIFF_D4                        = 0x1000\n\tIFF_DEBUG                     = 0x4\n\tIFF_DEVHEALTH                 = 0x4000\n\tIFF_DO_HW_LOOPBACK            = 0x10000\n\tIFF_GROUP_ROUTING             = 0x2000000\n\tIFF_IFBUFMGT                  = 0x800000\n\tIFF_LINK0                     = 0x100000\n\tIFF_LINK1                     = 0x200000\n\tIFF_LINK2                     = 0x400000\n\tIFF_LOOPBACK                  = 0x8\n\tIFF_MULTICAST                 = 0x80000\n\tIFF_NOARP                     = 0x80\n\tIFF_NOECHO                    = 0x800\n\tIFF_NOTRAILERS                = 0x20\n\tIFF_OACTIVE                   = 0x400\n\tIFF_POINTOPOINT               = 0x10\n\tIFF_PROMISC                   = 0x100\n\tIFF_PSEG                      = 0x40000000\n\tIFF_RUNNING                   = 0x40\n\tIFF_SIMPLEX                   = 0x800\n\tIFF_SNAP                      = 0x8000\n\tIFF_TCP_DISABLE_CKSUM         = 0x20000000\n\tIFF_TCP_NOCKSUM               = 0x1000000\n\tIFF_UP                        = 0x1\n\tIFF_VIPA                      = 0x80000000\n\tIFNAMSIZ                      = 0x10\n\tIFO_FLUSH                     = 0x1\n\tIFT_1822                      = 0x2\n\tIFT_AAL5                      = 0x31\n\tIFT_ARCNET                    = 0x23\n\tIFT_ARCNETPLUS                = 0x24\n\tIFT_ATM                       = 0x25\n\tIFT_CEPT                      = 0x13\n\tIFT_CLUSTER                   = 0x3e\n\tIFT_DS3                       = 0x1e\n\tIFT_EON                       = 0x19\n\tIFT_ETHER                     = 0x6\n\tIFT_FCS                       = 0x3a\n\tIFT_FDDI                      = 0xf\n\tIFT_FRELAY                    = 0x20\n\tIFT_FRELAYDCE                 = 0x2c\n\tIFT_GIFTUNNEL                 = 0x3c\n\tIFT_HDH1822                   = 0x3\n\tIFT_HF                        = 0x3d\n\tIFT_HIPPI                     = 0x2f\n\tIFT_HSSI                      = 0x2e\n\tIFT_HY                        = 0xe\n\tIFT_IB                        = 0xc7\n\tIFT_ISDNBASIC                 = 0x14\n\tIFT_ISDNPRIMARY               = 0x15\n\tIFT_ISO88022LLC               = 0x29\n\tIFT_ISO88023                  = 0x7\n\tIFT_ISO88024                  = 0x8\n\tIFT_ISO88025                  = 0x9\n\tIFT_ISO88026                  = 0xa\n\tIFT_LAPB                      = 0x10\n\tIFT_LOCALTALK                 = 0x2a\n\tIFT_LOOP                      = 0x18\n\tIFT_MIOX25                    = 0x26\n\tIFT_MODEM                     = 0x30\n\tIFT_NSIP                      = 0x1b\n\tIFT_OTHER                     = 0x1\n\tIFT_P10                       = 0xc\n\tIFT_P80                       = 0xd\n\tIFT_PARA                      = 0x22\n\tIFT_PPP                       = 0x17\n\tIFT_PROPMUX                   = 0x36\n\tIFT_PROPVIRTUAL               = 0x35\n\tIFT_PTPSERIAL                 = 0x16\n\tIFT_RS232                     = 0x21\n\tIFT_SDLC                      = 0x11\n\tIFT_SIP                       = 0x1f\n\tIFT_SLIP                      = 0x1c\n\tIFT_SMDSDXI                   = 0x2b\n\tIFT_SMDSICIP                  = 0x34\n\tIFT_SN                        = 0x38\n\tIFT_SONET                     = 0x27\n\tIFT_SONETPATH                 = 0x32\n\tIFT_SONETVT                   = 0x33\n\tIFT_SP                        = 0x39\n\tIFT_STARLAN                   = 0xb\n\tIFT_T1                        = 0x12\n\tIFT_TUNNEL                    = 0x3b\n\tIFT_ULTRA                     = 0x1d\n\tIFT_V35                       = 0x2d\n\tIFT_VIPA                      = 0x37\n\tIFT_X25                       = 0x5\n\tIFT_X25DDN                    = 0x4\n\tIFT_X25PLE                    = 0x28\n\tIFT_XETHER                    = 0x1a\n\tIGNBRK                        = 0x1\n\tIGNCR                         = 0x80\n\tIGNPAR                        = 0x4\n\tIMAXBEL                       = 0x10000\n\tINLCR                         = 0x40\n\tINPCK                         = 0x10\n\tIN_CLASSA_HOST                = 0xffffff\n\tIN_CLASSA_MAX                 = 0x80\n\tIN_CLASSA_NET                 = 0xff000000\n\tIN_CLASSA_NSHIFT              = 0x18\n\tIN_CLASSB_HOST                = 0xffff\n\tIN_CLASSB_MAX                 = 0x10000\n\tIN_CLASSB_NET                 = 0xffff0000\n\tIN_CLASSB_NSHIFT              = 0x10\n\tIN_CLASSC_HOST                = 0xff\n\tIN_CLASSC_NET                 = 0xffffff00\n\tIN_CLASSC_NSHIFT              = 0x8\n\tIN_CLASSD_HOST                = 0xfffffff\n\tIN_CLASSD_NET                 = 0xf0000000\n\tIN_CLASSD_NSHIFT              = 0x1c\n\tIN_LOOPBACKNET                = 0x7f\n\tIN_USE                        = 0x1\n\tIPPROTO_AH                    = 0x33\n\tIPPROTO_BIP                   = 0x53\n\tIPPROTO_DSTOPTS               = 0x3c\n\tIPPROTO_EGP                   = 0x8\n\tIPPROTO_EON                   = 0x50\n\tIPPROTO_ESP                   = 0x32\n\tIPPROTO_FRAGMENT              = 0x2c\n\tIPPROTO_GGP                   = 0x3\n\tIPPROTO_GIF                   = 0x8c\n\tIPPROTO_GRE                   = 0x2f\n\tIPPROTO_HOPOPTS               = 0x0\n\tIPPROTO_ICMP                  = 0x1\n\tIPPROTO_ICMPV6                = 0x3a\n\tIPPROTO_IDP                   = 0x16\n\tIPPROTO_IGMP                  = 0x2\n\tIPPROTO_IP                    = 0x0\n\tIPPROTO_IPIP                  = 0x4\n\tIPPROTO_IPV6                  = 0x29\n\tIPPROTO_LOCAL                 = 0x3f\n\tIPPROTO_MAX                   = 0x100\n\tIPPROTO_MH                    = 0x87\n\tIPPROTO_NONE                  = 0x3b\n\tIPPROTO_PUP                   = 0xc\n\tIPPROTO_QOS                   = 0x2d\n\tIPPROTO_RAW                   = 0xff\n\tIPPROTO_ROUTING               = 0x2b\n\tIPPROTO_RSVP                  = 0x2e\n\tIPPROTO_SCTP                  = 0x84\n\tIPPROTO_TCP                   = 0x6\n\tIPPROTO_TP                    = 0x1d\n\tIPPROTO_UDP                   = 0x11\n\tIPV6_ADDRFORM                 = 0x16\n\tIPV6_ADDR_PREFERENCES         = 0x4a\n\tIPV6_ADD_MEMBERSHIP           = 0xc\n\tIPV6_AIXRAWSOCKET             = 0x39\n\tIPV6_CHECKSUM                 = 0x27\n\tIPV6_DONTFRAG                 = 0x2d\n\tIPV6_DROP_MEMBERSHIP          = 0xd\n\tIPV6_DSTOPTS                  = 0x36\n\tIPV6_FLOWINFO_FLOWLABEL       = 0xffffff\n\tIPV6_FLOWINFO_PRIFLOW         = 0xfffffff\n\tIPV6_FLOWINFO_PRIORITY        = 0xf000000\n\tIPV6_FLOWINFO_SRFLAG          = 0x10000000\n\tIPV6_FLOWINFO_VERSION         = 0xf0000000\n\tIPV6_HOPLIMIT                 = 0x28\n\tIPV6_HOPOPTS                  = 0x34\n\tIPV6_JOIN_GROUP               = 0xc\n\tIPV6_LEAVE_GROUP              = 0xd\n\tIPV6_MIPDSTOPTS               = 0x36\n\tIPV6_MULTICAST_HOPS           = 0xa\n\tIPV6_MULTICAST_IF             = 0x9\n\tIPV6_MULTICAST_LOOP           = 0xb\n\tIPV6_NEXTHOP                  = 0x30\n\tIPV6_NOPROBE                  = 0x1c\n\tIPV6_PATHMTU                  = 0x2e\n\tIPV6_PKTINFO                  = 0x21\n\tIPV6_PKTOPTIONS               = 0x24\n\tIPV6_PRIORITY_10              = 0xa000000\n\tIPV6_PRIORITY_11              = 0xb000000\n\tIPV6_PRIORITY_12              = 0xc000000\n\tIPV6_PRIORITY_13              = 0xd000000\n\tIPV6_PRIORITY_14              = 0xe000000\n\tIPV6_PRIORITY_15              = 0xf000000\n\tIPV6_PRIORITY_8               = 0x8000000\n\tIPV6_PRIORITY_9               = 0x9000000\n\tIPV6_PRIORITY_BULK            = 0x4000000\n\tIPV6_PRIORITY_CONTROL         = 0x7000000\n\tIPV6_PRIORITY_FILLER          = 0x1000000\n\tIPV6_PRIORITY_INTERACTIVE     = 0x6000000\n\tIPV6_PRIORITY_RESERVED1       = 0x3000000\n\tIPV6_PRIORITY_RESERVED2       = 0x5000000\n\tIPV6_PRIORITY_UNATTENDED      = 0x2000000\n\tIPV6_PRIORITY_UNCHARACTERIZED = 0x0\n\tIPV6_RECVDSTOPTS              = 0x38\n\tIPV6_RECVHOPLIMIT             = 0x29\n\tIPV6_RECVHOPOPTS              = 0x35\n\tIPV6_RECVHOPS                 = 0x22\n\tIPV6_RECVIF                   = 0x1e\n\tIPV6_RECVPATHMTU              = 0x2f\n\tIPV6_RECVPKTINFO              = 0x23\n\tIPV6_RECVRTHDR                = 0x33\n\tIPV6_RECVSRCRT                = 0x1d\n\tIPV6_RECVTCLASS               = 0x2a\n\tIPV6_RTHDR                    = 0x32\n\tIPV6_RTHDRDSTOPTS             = 0x37\n\tIPV6_RTHDR_TYPE_0             = 0x0\n\tIPV6_RTHDR_TYPE_2             = 0x2\n\tIPV6_SENDIF                   = 0x1f\n\tIPV6_SRFLAG_LOOSE             = 0x0\n\tIPV6_SRFLAG_STRICT            = 0x10000000\n\tIPV6_TCLASS                   = 0x2b\n\tIPV6_TOKEN_LENGTH             = 0x40\n\tIPV6_UNICAST_HOPS             = 0x4\n\tIPV6_USE_MIN_MTU              = 0x2c\n\tIPV6_V6ONLY                   = 0x25\n\tIPV6_VERSION                  = 0x60000000\n\tIP_ADDRFORM                   = 0x16\n\tIP_ADD_MEMBERSHIP             = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP      = 0x3c\n\tIP_BLOCK_SOURCE               = 0x3a\n\tIP_BROADCAST_IF               = 0x10\n\tIP_CACHE_LINE_SIZE            = 0x80\n\tIP_DEFAULT_MULTICAST_LOOP     = 0x1\n\tIP_DEFAULT_MULTICAST_TTL      = 0x1\n\tIP_DF                         = 0x4000\n\tIP_DHCPMODE                   = 0x11\n\tIP_DONTFRAG                   = 0x19\n\tIP_DROP_MEMBERSHIP            = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP     = 0x3d\n\tIP_FINDPMTU                   = 0x1a\n\tIP_HDRINCL                    = 0x2\n\tIP_INC_MEMBERSHIPS            = 0x14\n\tIP_INIT_MEMBERSHIP            = 0x14\n\tIP_MAXPACKET                  = 0xffff\n\tIP_MF                         = 0x2000\n\tIP_MSS                        = 0x240\n\tIP_MULTICAST_HOPS             = 0xa\n\tIP_MULTICAST_IF               = 0x9\n\tIP_MULTICAST_LOOP             = 0xb\n\tIP_MULTICAST_TTL              = 0xa\n\tIP_OPT                        = 0x1b\n\tIP_OPTIONS                    = 0x1\n\tIP_PMTUAGE                    = 0x1b\n\tIP_RECVDSTADDR                = 0x7\n\tIP_RECVIF                     = 0x14\n\tIP_RECVIFINFO                 = 0xf\n\tIP_RECVINTERFACE              = 0x20\n\tIP_RECVMACHDR                 = 0xe\n\tIP_RECVOPTS                   = 0x5\n\tIP_RECVRETOPTS                = 0x6\n\tIP_RECVTTL                    = 0x22\n\tIP_RETOPTS                    = 0x8\n\tIP_SOURCE_FILTER              = 0x48\n\tIP_TOS                        = 0x3\n\tIP_TTL                        = 0x4\n\tIP_UNBLOCK_SOURCE             = 0x3b\n\tIP_UNICAST_HOPS               = 0x4\n\tISIG                          = 0x1\n\tISTRIP                        = 0x20\n\tIUCLC                         = 0x800\n\tIXANY                         = 0x1000\n\tIXOFF                         = 0x400\n\tIXON                          = 0x200\n\tI_FLUSH                       = 0x20005305\n\tLNOFLSH                       = 0x8000\n\tLOCK_EX                       = 0x2\n\tLOCK_NB                       = 0x4\n\tLOCK_SH                       = 0x1\n\tLOCK_UN                       = 0x8\n\tMADV_DONTNEED                 = 0x4\n\tMADV_NORMAL                   = 0x0\n\tMADV_RANDOM                   = 0x1\n\tMADV_SEQUENTIAL               = 0x2\n\tMADV_SPACEAVAIL               = 0x5\n\tMADV_WILLNEED                 = 0x3\n\tMAP_ANON                      = 0x10\n\tMAP_ANONYMOUS                 = 0x10\n\tMAP_FILE                      = 0x0\n\tMAP_FIXED                     = 0x100\n\tMAP_PRIVATE                   = 0x2\n\tMAP_SHARED                    = 0x1\n\tMAP_TYPE                      = 0xf0\n\tMAP_VARIABLE                  = 0x0\n\tMCAST_BLOCK_SOURCE            = 0x40\n\tMCAST_EXCLUDE                 = 0x2\n\tMCAST_INCLUDE                 = 0x1\n\tMCAST_JOIN_GROUP              = 0x3e\n\tMCAST_JOIN_SOURCE_GROUP       = 0x42\n\tMCAST_LEAVE_GROUP             = 0x3f\n\tMCAST_LEAVE_SOURCE_GROUP      = 0x43\n\tMCAST_SOURCE_FILTER           = 0x49\n\tMCAST_UNBLOCK_SOURCE          = 0x41\n\tMCL_CURRENT                   = 0x100\n\tMCL_FUTURE                    = 0x200\n\tMSG_ANY                       = 0x4\n\tMSG_ARGEXT                    = 0x400\n\tMSG_BAND                      = 0x2\n\tMSG_COMPAT                    = 0x8000\n\tMSG_CTRUNC                    = 0x20\n\tMSG_DONTROUTE                 = 0x4\n\tMSG_EOR                       = 0x8\n\tMSG_HIPRI                     = 0x1\n\tMSG_MAXIOVLEN                 = 0x10\n\tMSG_MPEG2                     = 0x80\n\tMSG_NONBLOCK                  = 0x4000\n\tMSG_NOSIGNAL                  = 0x100\n\tMSG_OOB                       = 0x1\n\tMSG_PEEK                      = 0x2\n\tMSG_TRUNC                     = 0x10\n\tMSG_WAITALL                   = 0x40\n\tMSG_WAITFORONE                = 0x200\n\tMS_ASYNC                      = 0x10\n\tMS_EINTR                      = 0x80\n\tMS_INVALIDATE                 = 0x40\n\tMS_PER_SEC                    = 0x3e8\n\tMS_SYNC                       = 0x20\n\tNFDBITS                       = 0x40\n\tNL0                           = 0x0\n\tNL1                           = 0x4000\n\tNL2                           = 0x8000\n\tNL3                           = 0xc000\n\tNLDLY                         = 0x4000\n\tNOFLSH                        = 0x80\n\tNOFLUSH                       = 0x80000000\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\n\tOLCUC                         = 0x2\n\tONLCR                         = 0x4\n\tONLRET                        = 0x20\n\tONOCR                         = 0x10\n\tONOEOT                        = 0x80000\n\tOPOST                         = 0x1\n\tOXTABS                        = 0x40000\n\tO_ACCMODE                     = 0x23\n\tO_APPEND                      = 0x8\n\tO_CIO                         = 0x80\n\tO_CIOR                        = 0x800000000\n\tO_CLOEXEC                     = 0x800000\n\tO_CREAT                       = 0x100\n\tO_DEFER                       = 0x2000\n\tO_DELAY                       = 0x4000\n\tO_DIRECT                      = 0x8000000\n\tO_DIRECTORY                   = 0x80000\n\tO_DSYNC                       = 0x400000\n\tO_EFSOFF                      = 0x400000000\n\tO_EFSON                       = 0x200000000\n\tO_EXCL                        = 0x400\n\tO_EXEC                        = 0x20\n\tO_LARGEFILE                   = 0x4000000\n\tO_NDELAY                      = 0x8000\n\tO_NOCACHE                     = 0x100000\n\tO_NOCTTY                      = 0x800\n\tO_NOFOLLOW                    = 0x1000000\n\tO_NONBLOCK                    = 0x4\n\tO_NONE                        = 0x3\n\tO_NSHARE                      = 0x10000\n\tO_RAW                         = 0x100000000\n\tO_RDONLY                      = 0x0\n\tO_RDWR                        = 0x2\n\tO_RSHARE                      = 0x1000\n\tO_RSYNC                       = 0x200000\n\tO_SEARCH                      = 0x20\n\tO_SNAPSHOT                    = 0x40\n\tO_SYNC                        = 0x10\n\tO_TRUNC                       = 0x200\n\tO_TTY_INIT                    = 0x0\n\tO_WRONLY                      = 0x1\n\tPARENB                        = 0x100\n\tPAREXT                        = 0x100000\n\tPARMRK                        = 0x8\n\tPARODD                        = 0x200\n\tPENDIN                        = 0x20000000\n\tPRIO_PGRP                     = 0x1\n\tPRIO_PROCESS                  = 0x0\n\tPRIO_USER                     = 0x2\n\tPROT_EXEC                     = 0x4\n\tPROT_NONE                     = 0x0\n\tPROT_READ                     = 0x1\n\tPROT_WRITE                    = 0x2\n\tPR_64BIT                      = 0x20\n\tPR_ADDR                       = 0x2\n\tPR_ARGEXT                     = 0x400\n\tPR_ATOMIC                     = 0x1\n\tPR_CONNREQUIRED               = 0x4\n\tPR_FASTHZ                     = 0x5\n\tPR_INP                        = 0x40\n\tPR_INTRLEVEL                  = 0x8000\n\tPR_MLS                        = 0x100\n\tPR_MLS_1_LABEL                = 0x200\n\tPR_NOEOR                      = 0x4000\n\tPR_RIGHTS                     = 0x10\n\tPR_SLOWHZ                     = 0x2\n\tPR_WANTRCVD                   = 0x8\n\tRLIMIT_AS                     = 0x6\n\tRLIMIT_CORE                   = 0x4\n\tRLIMIT_CPU                    = 0x0\n\tRLIMIT_DATA                   = 0x2\n\tRLIMIT_FSIZE                  = 0x1\n\tRLIMIT_NOFILE                 = 0x7\n\tRLIMIT_NPROC                  = 0x9\n\tRLIMIT_RSS                    = 0x5\n\tRLIMIT_STACK                  = 0x3\n\tRLIM_INFINITY                 = 0x7fffffffffffffff\n\tRTAX_AUTHOR                   = 0x6\n\tRTAX_BRD                      = 0x7\n\tRTAX_DST                      = 0x0\n\tRTAX_GATEWAY                  = 0x1\n\tRTAX_GENMASK                  = 0x3\n\tRTAX_IFA                      = 0x5\n\tRTAX_IFP                      = 0x4\n\tRTAX_MAX                      = 0x8\n\tRTAX_NETMASK                  = 0x2\n\tRTA_AUTHOR                    = 0x40\n\tRTA_BRD                       = 0x80\n\tRTA_DOWNSTREAM                = 0x100\n\tRTA_DST                       = 0x1\n\tRTA_GATEWAY                   = 0x2\n\tRTA_GENMASK                   = 0x8\n\tRTA_IFA                       = 0x20\n\tRTA_IFP                       = 0x10\n\tRTA_NETMASK                   = 0x4\n\tRTC_IA64                      = 0x3\n\tRTC_POWER                     = 0x1\n\tRTC_POWER_PC                  = 0x2\n\tRTF_ACTIVE_DGD                = 0x1000000\n\tRTF_BCE                       = 0x80000\n\tRTF_BLACKHOLE                 = 0x1000\n\tRTF_BROADCAST                 = 0x400000\n\tRTF_BUL                       = 0x2000\n\tRTF_CLONE                     = 0x10000\n\tRTF_CLONED                    = 0x20000\n\tRTF_CLONING                   = 0x100\n\tRTF_DONE                      = 0x40\n\tRTF_DYNAMIC                   = 0x10\n\tRTF_FREE_IN_PROG              = 0x4000000\n\tRTF_GATEWAY                   = 0x2\n\tRTF_HOST                      = 0x4\n\tRTF_LLINFO                    = 0x400\n\tRTF_LOCAL                     = 0x200000\n\tRTF_MASK                      = 0x80\n\tRTF_MODIFIED                  = 0x20\n\tRTF_MULTICAST                 = 0x800000\n\tRTF_PERMANENT6                = 0x8000000\n\tRTF_PINNED                    = 0x100000\n\tRTF_PROTO1                    = 0x8000\n\tRTF_PROTO2                    = 0x4000\n\tRTF_PROTO3                    = 0x40000\n\tRTF_REJECT                    = 0x8\n\tRTF_SMALLMTU                  = 0x40000\n\tRTF_STATIC                    = 0x800\n\tRTF_STOPSRCH                  = 0x2000000\n\tRTF_UNREACHABLE               = 0x10000000\n\tRTF_UP                        = 0x1\n\tRTF_XRESOLVE                  = 0x200\n\tRTM_ADD                       = 0x1\n\tRTM_CHANGE                    = 0x3\n\tRTM_DELADDR                   = 0xd\n\tRTM_DELETE                    = 0x2\n\tRTM_EXPIRE                    = 0xf\n\tRTM_GET                       = 0x4\n\tRTM_GETNEXT                   = 0x11\n\tRTM_IFINFO                    = 0xe\n\tRTM_LOCK                      = 0x8\n\tRTM_LOSING                    = 0x5\n\tRTM_MISS                      = 0x7\n\tRTM_NEWADDR                   = 0xc\n\tRTM_OLDADD                    = 0x9\n\tRTM_OLDDEL                    = 0xa\n\tRTM_REDIRECT                  = 0x6\n\tRTM_RESOLVE                   = 0xb\n\tRTM_RTLOST                    = 0x10\n\tRTM_RTTUNIT                   = 0xf4240\n\tRTM_SAMEADDR                  = 0x12\n\tRTM_SET                       = 0x13\n\tRTM_VERSION                   = 0x2\n\tRTM_VERSION_GR                = 0x4\n\tRTM_VERSION_GR_COMPAT         = 0x3\n\tRTM_VERSION_POLICY            = 0x5\n\tRTM_VERSION_POLICY_EXT        = 0x6\n\tRTM_VERSION_POLICY_PRFN       = 0x7\n\tRTV_EXPIRE                    = 0x4\n\tRTV_HOPCOUNT                  = 0x2\n\tRTV_MTU                       = 0x1\n\tRTV_RPIPE                     = 0x8\n\tRTV_RTT                       = 0x40\n\tRTV_RTTVAR                    = 0x80\n\tRTV_SPIPE                     = 0x10\n\tRTV_SSTHRESH                  = 0x20\n\tRUSAGE_CHILDREN               = -0x1\n\tRUSAGE_SELF                   = 0x0\n\tRUSAGE_THREAD                 = 0x1\n\tSCM_RIGHTS                    = 0x1\n\tSHUT_RD                       = 0x0\n\tSHUT_RDWR                     = 0x2\n\tSHUT_WR                       = 0x1\n\tSIGMAX64                      = 0xff\n\tSIGQUEUE_MAX                  = 0x20\n\tSIOCADDIFVIPA                 = 0x20006942\n\tSIOCADDMTU                    = -0x7ffb9690\n\tSIOCADDMULTI                  = -0x7fdf96cf\n\tSIOCADDNETID                  = -0x7fd796a9\n\tSIOCADDRT                     = -0x7fc78df6\n\tSIOCAIFADDR                   = -0x7fbf96e6\n\tSIOCATMARK                    = 0x40047307\n\tSIOCDARP                      = -0x7fb396e0\n\tSIOCDELIFVIPA                 = 0x20006943\n\tSIOCDELMTU                    = -0x7ffb968f\n\tSIOCDELMULTI                  = -0x7fdf96ce\n\tSIOCDELPMTU                   = -0x7fd78ff6\n\tSIOCDELRT                     = -0x7fc78df5\n\tSIOCDIFADDR                   = -0x7fd796e7\n\tSIOCDNETOPT                   = -0x3ffe9680\n\tSIOCDX25XLATE                 = -0x7fd7969b\n\tSIOCFIFADDR                   = -0x7fdf966d\n\tSIOCGARP                      = -0x3fb396da\n\tSIOCGETMTUS                   = 0x2000696f\n\tSIOCGETSGCNT                  = -0x3feb8acc\n\tSIOCGETVIFCNT                 = -0x3feb8acd\n\tSIOCGHIWAT                    = 0x40047301\n\tSIOCGIFADDR                   = -0x3fd796df\n\tSIOCGIFADDRS                  = 0x2000698c\n\tSIOCGIFBAUDRATE               = -0x3fdf9669\n\tSIOCGIFBRDADDR                = -0x3fd796dd\n\tSIOCGIFCONF                   = -0x3fef96bb\n\tSIOCGIFCONFGLOB               = -0x3fef9670\n\tSIOCGIFDSTADDR                = -0x3fd796de\n\tSIOCGIFFLAGS                  = -0x3fd796ef\n\tSIOCGIFGIDLIST                = 0x20006968\n\tSIOCGIFHWADDR                 = -0x3fab966b\n\tSIOCGIFMETRIC                 = -0x3fd796e9\n\tSIOCGIFMTU                    = -0x3fd796aa\n\tSIOCGIFNETMASK                = -0x3fd796db\n\tSIOCGIFOPTIONS                = -0x3fd796d6\n\tSIOCGISNO                     = -0x3fd79695\n\tSIOCGLOADF                    = -0x3ffb967e\n\tSIOCGLOWAT                    = 0x40047303\n\tSIOCGNETOPT                   = -0x3ffe96a5\n\tSIOCGNETOPT1                  = -0x3fdf967f\n\tSIOCGNMTUS                    = 0x2000696e\n\tSIOCGPGRP                     = 0x40047309\n\tSIOCGSIZIFCONF                = 0x4004696a\n\tSIOCGSRCFILTER                = -0x3fe796cb\n\tSIOCGTUNEPHASE                = -0x3ffb9676\n\tSIOCGX25XLATE                 = -0x3fd7969c\n\tSIOCIFATTACH                  = -0x7fdf9699\n\tSIOCIFDETACH                  = -0x7fdf969a\n\tSIOCIFGETPKEY                 = -0x7fdf969b\n\tSIOCIF_ATM_DARP               = -0x7fdf9683\n\tSIOCIF_ATM_DUMPARP            = -0x7fdf9685\n\tSIOCIF_ATM_GARP               = -0x7fdf9682\n\tSIOCIF_ATM_IDLE               = -0x7fdf9686\n\tSIOCIF_ATM_SARP               = -0x7fdf9681\n\tSIOCIF_ATM_SNMPARP            = -0x7fdf9687\n\tSIOCIF_ATM_SVC                = -0x7fdf9684\n\tSIOCIF_ATM_UBR                = -0x7fdf9688\n\tSIOCIF_DEVHEALTH              = -0x7ffb966c\n\tSIOCIF_IB_ARP_INCOMP          = -0x7fdf9677\n\tSIOCIF_IB_ARP_TIMER           = -0x7fdf9678\n\tSIOCIF_IB_CLEAR_PINFO         = -0x3fdf966f\n\tSIOCIF_IB_DEL_ARP             = -0x7fdf967f\n\tSIOCIF_IB_DEL_PINFO           = -0x3fdf9670\n\tSIOCIF_IB_DUMP_ARP            = -0x7fdf9680\n\tSIOCIF_IB_GET_ARP             = -0x7fdf967e\n\tSIOCIF_IB_GET_INFO            = -0x3f879675\n\tSIOCIF_IB_GET_STATS           = -0x3f879672\n\tSIOCIF_IB_NOTIFY_ADDR_REM     = -0x3f87966a\n\tSIOCIF_IB_RESET_STATS         = -0x3f879671\n\tSIOCIF_IB_RESIZE_CQ           = -0x7fdf9679\n\tSIOCIF_IB_SET_ARP             = -0x7fdf967d\n\tSIOCIF_IB_SET_PKEY            = -0x7fdf967c\n\tSIOCIF_IB_SET_PORT            = -0x7fdf967b\n\tSIOCIF_IB_SET_QKEY            = -0x7fdf9676\n\tSIOCIF_IB_SET_QSIZE           = -0x7fdf967a\n\tSIOCLISTIFVIPA                = 0x20006944\n\tSIOCSARP                      = -0x7fb396e2\n\tSIOCSHIWAT                    = 0xffffffff80047300\n\tSIOCSIFADDR                   = -0x7fd796f4\n\tSIOCSIFADDRORI                = -0x7fdb9673\n\tSIOCSIFBRDADDR                = -0x7fd796ed\n\tSIOCSIFDSTADDR                = -0x7fd796f2\n\tSIOCSIFFLAGS                  = -0x7fd796f0\n\tSIOCSIFGIDLIST                = 0x20006969\n\tSIOCSIFMETRIC                 = -0x7fd796e8\n\tSIOCSIFMTU                    = -0x7fd796a8\n\tSIOCSIFNETDUMP                = -0x7fd796e4\n\tSIOCSIFNETMASK                = -0x7fd796ea\n\tSIOCSIFOPTIONS                = -0x7fd796d7\n\tSIOCSIFSUBCHAN                = -0x7fd796e5\n\tSIOCSISNO                     = -0x7fd79694\n\tSIOCSLOADF                    = -0x3ffb967d\n\tSIOCSLOWAT                    = 0xffffffff80047302\n\tSIOCSNETOPT                   = -0x7ffe96a6\n\tSIOCSPGRP                     = 0xffffffff80047308\n\tSIOCSX25XLATE                 = -0x7fd7969d\n\tSOCK_CONN_DGRAM               = 0x6\n\tSOCK_DGRAM                    = 0x2\n\tSOCK_RAW                      = 0x3\n\tSOCK_RDM                      = 0x4\n\tSOCK_SEQPACKET                = 0x5\n\tSOCK_STREAM                   = 0x1\n\tSOL_SOCKET                    = 0xffff\n\tSOMAXCONN                     = 0x400\n\tSO_ACCEPTCONN                 = 0x2\n\tSO_AUDIT                      = 0x8000\n\tSO_BROADCAST                  = 0x20\n\tSO_CKSUMRECV                  = 0x800\n\tSO_DEBUG                      = 0x1\n\tSO_DONTROUTE                  = 0x10\n\tSO_ERROR                      = 0x1007\n\tSO_KEEPALIVE                  = 0x8\n\tSO_KERNACCEPT                 = 0x2000\n\tSO_LINGER                     = 0x80\n\tSO_NOMULTIPATH                = 0x4000\n\tSO_NOREUSEADDR                = 0x1000\n\tSO_OOBINLINE                  = 0x100\n\tSO_PEERID                     = 0x1009\n\tSO_RCVBUF                     = 0x1002\n\tSO_RCVLOWAT                   = 0x1004\n\tSO_RCVTIMEO                   = 0x1006\n\tSO_REUSEADDR                  = 0x4\n\tSO_REUSEPORT                  = 0x200\n\tSO_SNDBUF                     = 0x1001\n\tSO_SNDLOWAT                   = 0x1003\n\tSO_SNDTIMEO                   = 0x1005\n\tSO_TIMESTAMPNS                = 0x100a\n\tSO_TYPE                       = 0x1008\n\tSO_USELOOPBACK                = 0x40\n\tSO_USE_IFBUFS                 = 0x400\n\tS_BANDURG                     = 0x400\n\tS_EMODFMT                     = 0x3c000000\n\tS_ENFMT                       = 0x400\n\tS_ERROR                       = 0x100\n\tS_HANGUP                      = 0x200\n\tS_HIPRI                       = 0x2\n\tS_ICRYPTO                     = 0x80000\n\tS_IEXEC                       = 0x40\n\tS_IFBLK                       = 0x6000\n\tS_IFCHR                       = 0x2000\n\tS_IFDIR                       = 0x4000\n\tS_IFIFO                       = 0x1000\n\tS_IFJOURNAL                   = 0x10000\n\tS_IFLNK                       = 0xa000\n\tS_IFMPX                       = 0x2200\n\tS_IFMT                        = 0xf000\n\tS_IFPDIR                      = 0x4000000\n\tS_IFPSDIR                     = 0x8000000\n\tS_IFPSSDIR                    = 0xc000000\n\tS_IFREG                       = 0x8000\n\tS_IFSOCK                      = 0xc000\n\tS_IFSYSEA                     = 0x30000000\n\tS_INPUT                       = 0x1\n\tS_IREAD                       = 0x100\n\tS_IRGRP                       = 0x20\n\tS_IROTH                       = 0x4\n\tS_IRUSR                       = 0x100\n\tS_IRWXG                       = 0x38\n\tS_IRWXO                       = 0x7\n\tS_IRWXU                       = 0x1c0\n\tS_ISGID                       = 0x400\n\tS_ISUID                       = 0x800\n\tS_ISVTX                       = 0x200\n\tS_ITCB                        = 0x1000000\n\tS_ITP                         = 0x800000\n\tS_IWGRP                       = 0x10\n\tS_IWOTH                       = 0x2\n\tS_IWRITE                      = 0x80\n\tS_IWUSR                       = 0x80\n\tS_IXACL                       = 0x2000000\n\tS_IXATTR                      = 0x40000\n\tS_IXGRP                       = 0x8\n\tS_IXINTERFACE                 = 0x100000\n\tS_IXMOD                       = 0x40000000\n\tS_IXOTH                       = 0x1\n\tS_IXUSR                       = 0x40\n\tS_MSG                         = 0x8\n\tS_OUTPUT                      = 0x4\n\tS_RDBAND                      = 0x20\n\tS_RDNORM                      = 0x10\n\tS_RESERVED1                   = 0x20000\n\tS_RESERVED2                   = 0x200000\n\tS_RESERVED3                   = 0x400000\n\tS_RESERVED4                   = 0x80000000\n\tS_RESFMT1                     = 0x10000000\n\tS_RESFMT10                    = 0x34000000\n\tS_RESFMT11                    = 0x38000000\n\tS_RESFMT12                    = 0x3c000000\n\tS_RESFMT2                     = 0x14000000\n\tS_RESFMT3                     = 0x18000000\n\tS_RESFMT4                     = 0x1c000000\n\tS_RESFMT5                     = 0x20000000\n\tS_RESFMT6                     = 0x24000000\n\tS_RESFMT7                     = 0x28000000\n\tS_RESFMT8                     = 0x2c000000\n\tS_WRBAND                      = 0x80\n\tS_WRNORM                      = 0x40\n\tTAB0                          = 0x0\n\tTAB1                          = 0x400\n\tTAB2                          = 0x800\n\tTAB3                          = 0xc00\n\tTABDLY                        = 0xc00\n\tTCFLSH                        = 0x540c\n\tTCGETA                        = 0x5405\n\tTCGETS                        = 0x5401\n\tTCIFLUSH                      = 0x0\n\tTCIOFF                        = 0x2\n\tTCIOFLUSH                     = 0x2\n\tTCION                         = 0x3\n\tTCOFLUSH                      = 0x1\n\tTCOOFF                        = 0x0\n\tTCOON                         = 0x1\n\tTCP_24DAYS_WORTH_OF_SLOWTICKS = 0x3f4800\n\tTCP_ACLADD                    = 0x23\n\tTCP_ACLBIND                   = 0x26\n\tTCP_ACLCLEAR                  = 0x22\n\tTCP_ACLDEL                    = 0x24\n\tTCP_ACLDENY                   = 0x8\n\tTCP_ACLFLUSH                  = 0x21\n\tTCP_ACLGID                    = 0x1\n\tTCP_ACLLS                     = 0x25\n\tTCP_ACLSUBNET                 = 0x4\n\tTCP_ACLUID                    = 0x2\n\tTCP_CWND_DF                   = 0x16\n\tTCP_CWND_IF                   = 0x15\n\tTCP_DELAY_ACK_FIN             = 0x2\n\tTCP_DELAY_ACK_SYN             = 0x1\n\tTCP_FASTNAME                  = 0x101080a\n\tTCP_KEEPCNT                   = 0x13\n\tTCP_KEEPIDLE                  = 0x11\n\tTCP_KEEPINTVL                 = 0x12\n\tTCP_LSPRIV                    = 0x29\n\tTCP_LUID                      = 0x20\n\tTCP_MAXBURST                  = 0x8\n\tTCP_MAXDF                     = 0x64\n\tTCP_MAXIF                     = 0x64\n\tTCP_MAXSEG                    = 0x2\n\tTCP_MAXWIN                    = 0xffff\n\tTCP_MAXWINDOWSCALE            = 0xe\n\tTCP_MAX_SACK                  = 0x4\n\tTCP_MSS                       = 0x5b4\n\tTCP_NODELAY                   = 0x1\n\tTCP_NODELAYACK                = 0x14\n\tTCP_NOREDUCE_CWND_EXIT_FRXMT  = 0x19\n\tTCP_NOREDUCE_CWND_IN_FRXMT    = 0x18\n\tTCP_NOTENTER_SSTART           = 0x17\n\tTCP_OPT                       = 0x19\n\tTCP_RFC1323                   = 0x4\n\tTCP_SETPRIV                   = 0x27\n\tTCP_STDURG                    = 0x10\n\tTCP_TIMESTAMP_OPTLEN          = 0xc\n\tTCP_UNSETPRIV                 = 0x28\n\tTCSAFLUSH                     = 0x2\n\tTCSBRK                        = 0x5409\n\tTCSETA                        = 0x5406\n\tTCSETAF                       = 0x5408\n\tTCSETAW                       = 0x5407\n\tTCSETS                        = 0x5402\n\tTCSETSF                       = 0x5404\n\tTCSETSW                       = 0x5403\n\tTCXONC                        = 0x540b\n\tTIMER_ABSTIME                 = 0x3e7\n\tTIMER_MAX                     = 0x20\n\tTIOC                          = 0x5400\n\tTIOCCBRK                      = 0x2000747a\n\tTIOCCDTR                      = 0x20007478\n\tTIOCCONS                      = 0xffffffff80047462\n\tTIOCEXCL                      = 0x2000740d\n\tTIOCFLUSH                     = 0xffffffff80047410\n\tTIOCGETC                      = 0x40067412\n\tTIOCGETD                      = 0x40047400\n\tTIOCGETP                      = 0x40067408\n\tTIOCGLTC                      = 0x40067474\n\tTIOCGPGRP                     = 0x40047477\n\tTIOCGSID                      = 0x40047448\n\tTIOCGSIZE                     = 0x40087468\n\tTIOCGWINSZ                    = 0x40087468\n\tTIOCHPCL                      = 0x20007402\n\tTIOCLBIC                      = 0xffffffff8004747e\n\tTIOCLBIS                      = 0xffffffff8004747f\n\tTIOCLGET                      = 0x4004747c\n\tTIOCLSET                      = 0xffffffff8004747d\n\tTIOCMBIC                      = 0xffffffff8004746b\n\tTIOCMBIS                      = 0xffffffff8004746c\n\tTIOCMGET                      = 0x4004746a\n\tTIOCMIWAIT                    = 0xffffffff80047464\n\tTIOCMODG                      = 0x40047403\n\tTIOCMODS                      = 0xffffffff80047404\n\tTIOCMSET                      = 0xffffffff8004746d\n\tTIOCM_CAR                     = 0x40\n\tTIOCM_CD                      = 0x40\n\tTIOCM_CTS                     = 0x20\n\tTIOCM_DSR                     = 0x100\n\tTIOCM_DTR                     = 0x2\n\tTIOCM_LE                      = 0x1\n\tTIOCM_RI                      = 0x80\n\tTIOCM_RNG                     = 0x80\n\tTIOCM_RTS                     = 0x4\n\tTIOCM_SR                      = 0x10\n\tTIOCM_ST                      = 0x8\n\tTIOCNOTTY                     = 0x20007471\n\tTIOCNXCL                      = 0x2000740e\n\tTIOCOUTQ                      = 0x40047473\n\tTIOCPKT                       = 0xffffffff80047470\n\tTIOCPKT_DATA                  = 0x0\n\tTIOCPKT_DOSTOP                = 0x20\n\tTIOCPKT_FLUSHREAD             = 0x1\n\tTIOCPKT_FLUSHWRITE            = 0x2\n\tTIOCPKT_NOSTOP                = 0x10\n\tTIOCPKT_START                 = 0x8\n\tTIOCPKT_STOP                  = 0x4\n\tTIOCREMOTE                    = 0xffffffff80047469\n\tTIOCSBRK                      = 0x2000747b\n\tTIOCSDTR                      = 0x20007479\n\tTIOCSETC                      = 0xffffffff80067411\n\tTIOCSETD                      = 0xffffffff80047401\n\tTIOCSETN                      = 0xffffffff8006740a\n\tTIOCSETP                      = 0xffffffff80067409\n\tTIOCSLTC                      = 0xffffffff80067475\n\tTIOCSPGRP                     = 0xffffffff80047476\n\tTIOCSSIZE                     = 0xffffffff80087467\n\tTIOCSTART                     = 0x2000746e\n\tTIOCSTI                       = 0xffffffff80017472\n\tTIOCSTOP                      = 0x2000746f\n\tTIOCSWINSZ                    = 0xffffffff80087467\n\tTIOCUCNTL                     = 0xffffffff80047466\n\tTOSTOP                        = 0x10000\n\tUTIME_NOW                     = -0x2\n\tUTIME_OMIT                    = -0x3\n\tVDISCRD                       = 0xc\n\tVDSUSP                        = 0xa\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\n\tVINTR                         = 0x0\n\tVKILL                         = 0x3\n\tVLNEXT                        = 0xe\n\tVMIN                          = 0x4\n\tVQUIT                         = 0x1\n\tVREPRINT                      = 0xb\n\tVSTART                        = 0x7\n\tVSTOP                         = 0x8\n\tVSTRT                         = 0x7\n\tVSUSP                         = 0x9\n\tVT0                           = 0x0\n\tVT1                           = 0x8000\n\tVTDELAY                       = 0x2000\n\tVTDLY                         = 0x8000\n\tVTIME                         = 0x5\n\tVWERSE                        = 0xd\n\tWPARSTART                     = 0x1\n\tWPARSTOP                      = 0x2\n\tWPARTTYNAME                   = \"Global\"\n\tXCASE                         = 0x4\n\tXTABS                         = 0xc00\n\t_FDATAFLUSH                   = 0x2000000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x43)\n\tEADDRNOTAVAIL   = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x42)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x38)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x78)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x75)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECLONEME        = syscall.Errno(0x52)\n\tECONNABORTED    = syscall.Errno(0x48)\n\tECONNREFUSED    = syscall.Errno(0x4f)\n\tECONNRESET      = syscall.Errno(0x49)\n\tECORRUPT        = syscall.Errno(0x59)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDESTADDREQ     = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x3a)\n\tEDIST           = syscall.Errno(0x35)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x58)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFORMAT         = syscall.Errno(0x30)\n\tEHOSTDOWN       = syscall.Errno(0x50)\n\tEHOSTUNREACH    = syscall.Errno(0x51)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x74)\n\tEINPROGRESS     = syscall.Errno(0x37)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x4b)\n\tEISDIR          = syscall.Errno(0x15)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x55)\n\tEMEDIA          = syscall.Errno(0x6e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x3b)\n\tEMULTIHOP       = syscall.Errno(0x7d)\n\tENAMETOOLONG    = syscall.Errno(0x56)\n\tENETDOWN        = syscall.Errno(0x45)\n\tENETRESET       = syscall.Errno(0x47)\n\tENETUNREACH     = syscall.Errno(0x46)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x70)\n\tENOBUFS         = syscall.Errno(0x4a)\n\tENOCONNECT      = syscall.Errno(0x32)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x7a)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x31)\n\tENOLINK         = syscall.Errno(0x7e)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENOPROTOOPT     = syscall.Errno(0x3d)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x76)\n\tENOSTR          = syscall.Errno(0x7b)\n\tENOSYS          = syscall.Errno(0x6d)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x4c)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x11)\n\tENOTREADY       = syscall.Errno(0x2e)\n\tENOTRECOVERABLE = syscall.Errno(0x5e)\n\tENOTRUST        = syscall.Errno(0x72)\n\tENOTSOCK        = syscall.Errno(0x39)\n\tENOTSUP         = syscall.Errno(0x7c)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x40)\n\tEOVERFLOW       = syscall.Errno(0x7f)\n\tEOWNERDEAD      = syscall.Errno(0x5f)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x41)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x53)\n\tEPROTO          = syscall.Errno(0x79)\n\tEPROTONOSUPPORT = syscall.Errno(0x3e)\n\tEPROTOTYPE      = syscall.Errno(0x3c)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x5d)\n\tERESTART        = syscall.Errno(0x52)\n\tEROFS           = syscall.Errno(0x1e)\n\tESAD            = syscall.Errno(0x71)\n\tESHUTDOWN       = syscall.Errno(0x4d)\n\tESOCKTNOSUPPORT = syscall.Errno(0x3f)\n\tESOFT           = syscall.Errno(0x6f)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x34)\n\tESYSERROR       = syscall.Errno(0x5a)\n\tETIME           = syscall.Errno(0x77)\n\tETIMEDOUT       = syscall.Errno(0x4e)\n\tETOOMANYREFS    = syscall.Errno(0x73)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x54)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEWRPROTECT      = syscall.Errno(0x2f)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT     = syscall.Signal(0x6)\n\tSIGAIO      = syscall.Signal(0x17)\n\tSIGALRM     = syscall.Signal(0xe)\n\tSIGALRM1    = syscall.Signal(0x26)\n\tSIGBUS      = syscall.Signal(0xa)\n\tSIGCAPI     = syscall.Signal(0x31)\n\tSIGCHLD     = syscall.Signal(0x14)\n\tSIGCLD      = syscall.Signal(0x14)\n\tSIGCONT     = syscall.Signal(0x13)\n\tSIGCPUFAIL  = syscall.Signal(0x3b)\n\tSIGDANGER   = syscall.Signal(0x21)\n\tSIGEMT      = syscall.Signal(0x7)\n\tSIGFPE      = syscall.Signal(0x8)\n\tSIGGRANT    = syscall.Signal(0x3c)\n\tSIGHUP      = syscall.Signal(0x1)\n\tSIGILL      = syscall.Signal(0x4)\n\tSIGINT      = syscall.Signal(0x2)\n\tSIGIO       = syscall.Signal(0x17)\n\tSIGIOINT    = syscall.Signal(0x10)\n\tSIGIOT      = syscall.Signal(0x6)\n\tSIGKAP      = syscall.Signal(0x3c)\n\tSIGKILL     = syscall.Signal(0x9)\n\tSIGLOST     = syscall.Signal(0x6)\n\tSIGMAX      = syscall.Signal(0xff)\n\tSIGMAX32    = syscall.Signal(0x3f)\n\tSIGMIGRATE  = syscall.Signal(0x23)\n\tSIGMSG      = syscall.Signal(0x1b)\n\tSIGPIPE     = syscall.Signal(0xd)\n\tSIGPOLL     = syscall.Signal(0x17)\n\tSIGPRE      = syscall.Signal(0x24)\n\tSIGPROF     = syscall.Signal(0x20)\n\tSIGPTY      = syscall.Signal(0x17)\n\tSIGPWR      = syscall.Signal(0x1d)\n\tSIGQUIT     = syscall.Signal(0x3)\n\tSIGRECONFIG = syscall.Signal(0x3a)\n\tSIGRETRACT  = syscall.Signal(0x3d)\n\tSIGSAK      = syscall.Signal(0x3f)\n\tSIGSEGV     = syscall.Signal(0xb)\n\tSIGSOUND    = syscall.Signal(0x3e)\n\tSIGSTOP     = syscall.Signal(0x11)\n\tSIGSYS      = syscall.Signal(0xc)\n\tSIGSYSERROR = syscall.Signal(0x30)\n\tSIGTALRM    = syscall.Signal(0x26)\n\tSIGTERM     = syscall.Signal(0xf)\n\tSIGTRAP     = syscall.Signal(0x5)\n\tSIGTSTP     = syscall.Signal(0x12)\n\tSIGTTIN     = syscall.Signal(0x15)\n\tSIGTTOU     = syscall.Signal(0x16)\n\tSIGURG      = syscall.Signal(0x10)\n\tSIGUSR1     = syscall.Signal(0x1e)\n\tSIGUSR2     = syscall.Signal(0x1f)\n\tSIGVIRT     = syscall.Signal(0x25)\n\tSIGVTALRM   = syscall.Signal(0x22)\n\tSIGWAITING  = syscall.Signal(0x27)\n\tSIGWINCH    = syscall.Signal(0x1c)\n\tSIGXCPU     = syscall.Signal(0x18)\n\tSIGXFSZ     = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"not owner\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"I/O error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"arg list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file number\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"not enough space\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"ENOTEMPTY\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"file table overflow\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"not a typewriter\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"deadlock condition if locked\"},\n\t{46, \"ENOTREADY\", \"device not ready\"},\n\t{47, \"EWRPROTECT\", \"write-protected media\"},\n\t{48, \"EFORMAT\", \"unformatted or incompatible media\"},\n\t{49, \"ENOLCK\", \"no locks available\"},\n\t{50, \"ENOCONNECT\", \"cannot Establish Connection\"},\n\t{52, \"ESTALE\", \"missing file or filesystem\"},\n\t{53, \"EDIST\", \"requests blocked by Administrator\"},\n\t{55, \"EINPROGRESS\", \"operation now in progress\"},\n\t{56, \"EALREADY\", \"operation already in progress\"},\n\t{57, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{58, \"EDESTADDREQ\", \"destination address required\"},\n\t{59, \"EMSGSIZE\", \"message too long\"},\n\t{60, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{61, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{62, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{63, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{64, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{65, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{66, \"EAFNOSUPPORT\", \"addr family not supported by protocol\"},\n\t{67, \"EADDRINUSE\", \"address already in use\"},\n\t{68, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{69, \"ENETDOWN\", \"network is down\"},\n\t{70, \"ENETUNREACH\", \"network is unreachable\"},\n\t{71, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{72, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{73, \"ECONNRESET\", \"connection reset by peer\"},\n\t{74, \"ENOBUFS\", \"no buffer space available\"},\n\t{75, \"EISCONN\", \"socket is already connected\"},\n\t{76, \"ENOTCONN\", \"socket is not connected\"},\n\t{77, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{78, \"ETIMEDOUT\", \"connection timed out\"},\n\t{79, \"ECONNREFUSED\", \"connection refused\"},\n\t{80, \"EHOSTDOWN\", \"host is down\"},\n\t{81, \"EHOSTUNREACH\", \"no route to host\"},\n\t{82, \"ERESTART\", \"restart the system call\"},\n\t{83, \"EPROCLIM\", \"too many processes\"},\n\t{84, \"EUSERS\", \"too many users\"},\n\t{85, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{86, \"ENAMETOOLONG\", \"file name too long\"},\n\t{88, \"EDQUOT\", \"disk quota exceeded\"},\n\t{89, \"ECORRUPT\", \"invalid file system control data detected\"},\n\t{90, \"ESYSERROR\", \"for future use \"},\n\t{93, \"EREMOTE\", \"item is not local to host\"},\n\t{94, \"ENOTRECOVERABLE\", \"state not recoverable \"},\n\t{95, \"EOWNERDEAD\", \"previous owner died \"},\n\t{109, \"ENOSYS\", \"function not implemented\"},\n\t{110, \"EMEDIA\", \"media surface error\"},\n\t{111, \"ESOFT\", \"I/O completed, but needs relocation\"},\n\t{112, \"ENOATTR\", \"no attribute found\"},\n\t{113, \"ESAD\", \"security Authentication Denied\"},\n\t{114, \"ENOTRUST\", \"not a Trusted Program\"},\n\t{115, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{116, \"EILSEQ\", \"invalid wide character\"},\n\t{117, \"ECANCELED\", \"asynchronous I/O cancelled\"},\n\t{118, \"ENOSR\", \"out of STREAMS resources\"},\n\t{119, \"ETIME\", \"system call timed out\"},\n\t{120, \"EBADMSG\", \"next message has wrong type\"},\n\t{121, \"EPROTO\", \"error in protocol\"},\n\t{122, \"ENODATA\", \"no message on stream head read q\"},\n\t{123, \"ENOSTR\", \"fd not associated with a stream\"},\n\t{124, \"ENOTSUP\", \"unsupported attribute value\"},\n\t{125, \"EMULTIHOP\", \"multihop is not allowed\"},\n\t{126, \"ENOLINK\", \"the server link has been severed\"},\n\t{127, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"IOT/Abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible/complete\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{27, \"SIGMSG\", \"input device data\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGPWR\", \"power-failure\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPROF\", \"profiling timer expired\"},\n\t{33, \"SIGDANGER\", \"paging space low\"},\n\t{34, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{35, \"SIGMIGRATE\", \"signal 35\"},\n\t{36, \"SIGPRE\", \"signal 36\"},\n\t{37, \"SIGVIRT\", \"signal 37\"},\n\t{38, \"SIGTALRM\", \"signal 38\"},\n\t{39, \"SIGWAITING\", \"signal 39\"},\n\t{48, \"SIGSYSERROR\", \"signal 48\"},\n\t{49, \"SIGCAPI\", \"signal 49\"},\n\t{58, \"SIGRECONFIG\", \"signal 58\"},\n\t{59, \"SIGCPUFAIL\", \"CPU Failure Predicted\"},\n\t{60, \"SIGGRANT\", \"monitor mode granted\"},\n\t{61, \"SIGRETRACT\", \"monitor mode retracted\"},\n\t{62, \"SIGSOUND\", \"sound completed\"},\n\t{63, \"SIGMAX32\", \"secure attention\"},\n\t{255, \"SIGMAX\", \"signal 255\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && darwin\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                            = 0x10\n\tAF_CCITT                                = 0xa\n\tAF_CHAOS                                = 0x5\n\tAF_CNT                                  = 0x15\n\tAF_COIP                                 = 0x14\n\tAF_DATAKIT                              = 0x9\n\tAF_DECnet                               = 0xc\n\tAF_DLI                                  = 0xd\n\tAF_E164                                 = 0x1c\n\tAF_ECMA                                 = 0x8\n\tAF_HYLINK                               = 0xf\n\tAF_IEEE80211                            = 0x25\n\tAF_IMPLINK                              = 0x3\n\tAF_INET                                 = 0x2\n\tAF_INET6                                = 0x1e\n\tAF_IPX                                  = 0x17\n\tAF_ISDN                                 = 0x1c\n\tAF_ISO                                  = 0x7\n\tAF_LAT                                  = 0xe\n\tAF_LINK                                 = 0x12\n\tAF_LOCAL                                = 0x1\n\tAF_MAX                                  = 0x29\n\tAF_NATM                                 = 0x1f\n\tAF_NDRV                                 = 0x1b\n\tAF_NETBIOS                              = 0x21\n\tAF_NS                                   = 0x6\n\tAF_OSI                                  = 0x7\n\tAF_PPP                                  = 0x22\n\tAF_PUP                                  = 0x4\n\tAF_RESERVED_36                          = 0x24\n\tAF_ROUTE                                = 0x11\n\tAF_SIP                                  = 0x18\n\tAF_SNA                                  = 0xb\n\tAF_SYSTEM                               = 0x20\n\tAF_SYS_CONTROL                          = 0x2\n\tAF_UNIX                                 = 0x1\n\tAF_UNSPEC                               = 0x0\n\tAF_UTUN                                 = 0x26\n\tAF_VSOCK                                = 0x28\n\tALTWERASE                               = 0x200\n\tATTR_BIT_MAP_COUNT                      = 0x5\n\tATTR_CMN_ACCESSMASK                     = 0x20000\n\tATTR_CMN_ACCTIME                        = 0x1000\n\tATTR_CMN_ADDEDTIME                      = 0x10000000\n\tATTR_CMN_BKUPTIME                       = 0x2000\n\tATTR_CMN_CHGTIME                        = 0x800\n\tATTR_CMN_CRTIME                         = 0x200\n\tATTR_CMN_DATA_PROTECT_FLAGS             = 0x40000000\n\tATTR_CMN_DEVID                          = 0x2\n\tATTR_CMN_DOCUMENT_ID                    = 0x100000\n\tATTR_CMN_ERROR                          = 0x20000000\n\tATTR_CMN_EXTENDED_SECURITY              = 0x400000\n\tATTR_CMN_FILEID                         = 0x2000000\n\tATTR_CMN_FLAGS                          = 0x40000\n\tATTR_CMN_FNDRINFO                       = 0x4000\n\tATTR_CMN_FSID                           = 0x4\n\tATTR_CMN_FULLPATH                       = 0x8000000\n\tATTR_CMN_GEN_COUNT                      = 0x80000\n\tATTR_CMN_GRPID                          = 0x10000\n\tATTR_CMN_GRPUUID                        = 0x1000000\n\tATTR_CMN_MODTIME                        = 0x400\n\tATTR_CMN_NAME                           = 0x1\n\tATTR_CMN_NAMEDATTRCOUNT                 = 0x80000\n\tATTR_CMN_NAMEDATTRLIST                  = 0x100000\n\tATTR_CMN_OBJID                          = 0x20\n\tATTR_CMN_OBJPERMANENTID                 = 0x40\n\tATTR_CMN_OBJTAG                         = 0x10\n\tATTR_CMN_OBJTYPE                        = 0x8\n\tATTR_CMN_OWNERID                        = 0x8000\n\tATTR_CMN_PARENTID                       = 0x4000000\n\tATTR_CMN_PAROBJID                       = 0x80\n\tATTR_CMN_RETURNED_ATTRS                 = 0x80000000\n\tATTR_CMN_SCRIPT                         = 0x100\n\tATTR_CMN_SETMASK                        = 0x51c7ff00\n\tATTR_CMN_USERACCESS                     = 0x200000\n\tATTR_CMN_UUID                           = 0x800000\n\tATTR_CMN_VALIDMASK                      = 0xffffffff\n\tATTR_CMN_VOLSETMASK                     = 0x6700\n\tATTR_FILE_ALLOCSIZE                     = 0x4\n\tATTR_FILE_CLUMPSIZE                     = 0x10\n\tATTR_FILE_DATAALLOCSIZE                 = 0x400\n\tATTR_FILE_DATAEXTENTS                   = 0x800\n\tATTR_FILE_DATALENGTH                    = 0x200\n\tATTR_FILE_DEVTYPE                       = 0x20\n\tATTR_FILE_FILETYPE                      = 0x40\n\tATTR_FILE_FORKCOUNT                     = 0x80\n\tATTR_FILE_FORKLIST                      = 0x100\n\tATTR_FILE_IOBLOCKSIZE                   = 0x8\n\tATTR_FILE_LINKCOUNT                     = 0x1\n\tATTR_FILE_RSRCALLOCSIZE                 = 0x2000\n\tATTR_FILE_RSRCEXTENTS                   = 0x4000\n\tATTR_FILE_RSRCLENGTH                    = 0x1000\n\tATTR_FILE_SETMASK                       = 0x20\n\tATTR_FILE_TOTALSIZE                     = 0x2\n\tATTR_FILE_VALIDMASK                     = 0x37ff\n\tATTR_VOL_ALLOCATIONCLUMP                = 0x40\n\tATTR_VOL_ATTRIBUTES                     = 0x40000000\n\tATTR_VOL_CAPABILITIES                   = 0x20000\n\tATTR_VOL_DIRCOUNT                       = 0x400\n\tATTR_VOL_ENCODINGSUSED                  = 0x10000\n\tATTR_VOL_FILECOUNT                      = 0x200\n\tATTR_VOL_FSTYPE                         = 0x1\n\tATTR_VOL_INFO                           = 0x80000000\n\tATTR_VOL_IOBLOCKSIZE                    = 0x80\n\tATTR_VOL_MAXOBJCOUNT                    = 0x800\n\tATTR_VOL_MINALLOCATION                  = 0x20\n\tATTR_VOL_MOUNTEDDEVICE                  = 0x8000\n\tATTR_VOL_MOUNTFLAGS                     = 0x4000\n\tATTR_VOL_MOUNTPOINT                     = 0x1000\n\tATTR_VOL_NAME                           = 0x2000\n\tATTR_VOL_OBJCOUNT                       = 0x100\n\tATTR_VOL_QUOTA_SIZE                     = 0x10000000\n\tATTR_VOL_RESERVED_SIZE                  = 0x20000000\n\tATTR_VOL_SETMASK                        = 0x80002000\n\tATTR_VOL_SIGNATURE                      = 0x2\n\tATTR_VOL_SIZE                           = 0x4\n\tATTR_VOL_SPACEAVAIL                     = 0x10\n\tATTR_VOL_SPACEFREE                      = 0x8\n\tATTR_VOL_SPACEUSED                      = 0x800000\n\tATTR_VOL_UUID                           = 0x40000\n\tATTR_VOL_VALIDMASK                      = 0xf087ffff\n\tB0                                      = 0x0\n\tB110                                    = 0x6e\n\tB115200                                 = 0x1c200\n\tB1200                                   = 0x4b0\n\tB134                                    = 0x86\n\tB14400                                  = 0x3840\n\tB150                                    = 0x96\n\tB1800                                   = 0x708\n\tB19200                                  = 0x4b00\n\tB200                                    = 0xc8\n\tB230400                                 = 0x38400\n\tB2400                                   = 0x960\n\tB28800                                  = 0x7080\n\tB300                                    = 0x12c\n\tB38400                                  = 0x9600\n\tB4800                                   = 0x12c0\n\tB50                                     = 0x32\n\tB57600                                  = 0xe100\n\tB600                                    = 0x258\n\tB7200                                   = 0x1c20\n\tB75                                     = 0x4b\n\tB76800                                  = 0x12c00\n\tB9600                                   = 0x2580\n\tBIOCFLUSH                               = 0x20004268\n\tBIOCGBLEN                               = 0x40044266\n\tBIOCGDLT                                = 0x4004426a\n\tBIOCGDLTLIST                            = 0xc00c4279\n\tBIOCGETIF                               = 0x4020426b\n\tBIOCGHDRCMPLT                           = 0x40044274\n\tBIOCGRSIG                               = 0x40044272\n\tBIOCGRTIMEOUT                           = 0x4010426e\n\tBIOCGSEESENT                            = 0x40044276\n\tBIOCGSTATS                              = 0x4008426f\n\tBIOCIMMEDIATE                           = 0x80044270\n\tBIOCPROMISC                             = 0x20004269\n\tBIOCSBLEN                               = 0xc0044266\n\tBIOCSDLT                                = 0x80044278\n\tBIOCSETF                                = 0x80104267\n\tBIOCSETFNR                              = 0x8010427e\n\tBIOCSETIF                               = 0x8020426c\n\tBIOCSHDRCMPLT                           = 0x80044275\n\tBIOCSRSIG                               = 0x80044273\n\tBIOCSRTIMEOUT                           = 0x8010426d\n\tBIOCSSEESENT                            = 0x80044277\n\tBIOCVERSION                             = 0x40044271\n\tBPF_A                                   = 0x10\n\tBPF_ABS                                 = 0x20\n\tBPF_ADD                                 = 0x0\n\tBPF_ALIGNMENT                           = 0x4\n\tBPF_ALU                                 = 0x4\n\tBPF_AND                                 = 0x50\n\tBPF_B                                   = 0x10\n\tBPF_DIV                                 = 0x30\n\tBPF_H                                   = 0x8\n\tBPF_IMM                                 = 0x0\n\tBPF_IND                                 = 0x40\n\tBPF_JA                                  = 0x0\n\tBPF_JEQ                                 = 0x10\n\tBPF_JGE                                 = 0x30\n\tBPF_JGT                                 = 0x20\n\tBPF_JMP                                 = 0x5\n\tBPF_JSET                                = 0x40\n\tBPF_K                                   = 0x0\n\tBPF_LD                                  = 0x0\n\tBPF_LDX                                 = 0x1\n\tBPF_LEN                                 = 0x80\n\tBPF_LSH                                 = 0x60\n\tBPF_MAJOR_VERSION                       = 0x1\n\tBPF_MAXBUFSIZE                          = 0x80000\n\tBPF_MAXINSNS                            = 0x200\n\tBPF_MEM                                 = 0x60\n\tBPF_MEMWORDS                            = 0x10\n\tBPF_MINBUFSIZE                          = 0x20\n\tBPF_MINOR_VERSION                       = 0x1\n\tBPF_MISC                                = 0x7\n\tBPF_MSH                                 = 0xa0\n\tBPF_MUL                                 = 0x20\n\tBPF_NEG                                 = 0x80\n\tBPF_OR                                  = 0x40\n\tBPF_RELEASE                             = 0x30bb6\n\tBPF_RET                                 = 0x6\n\tBPF_RSH                                 = 0x70\n\tBPF_ST                                  = 0x2\n\tBPF_STX                                 = 0x3\n\tBPF_SUB                                 = 0x10\n\tBPF_TAX                                 = 0x0\n\tBPF_TXA                                 = 0x80\n\tBPF_W                                   = 0x0\n\tBPF_X                                   = 0x8\n\tBRKINT                                  = 0x2\n\tBS0                                     = 0x0\n\tBS1                                     = 0x8000\n\tBSDLY                                   = 0x8000\n\tCFLUSH                                  = 0xf\n\tCLOCAL                                  = 0x8000\n\tCLOCK_MONOTONIC                         = 0x6\n\tCLOCK_MONOTONIC_RAW                     = 0x4\n\tCLOCK_MONOTONIC_RAW_APPROX              = 0x5\n\tCLOCK_PROCESS_CPUTIME_ID                = 0xc\n\tCLOCK_REALTIME                          = 0x0\n\tCLOCK_THREAD_CPUTIME_ID                 = 0x10\n\tCLOCK_UPTIME_RAW                        = 0x8\n\tCLOCK_UPTIME_RAW_APPROX                 = 0x9\n\tCLONE_NOFOLLOW                          = 0x1\n\tCLONE_NOOWNERCOPY                       = 0x2\n\tCONNECT_DATA_AUTHENTICATED              = 0x4\n\tCONNECT_DATA_IDEMPOTENT                 = 0x2\n\tCONNECT_RESUME_ON_READ_WRITE            = 0x1\n\tCR0                                     = 0x0\n\tCR1                                     = 0x1000\n\tCR2                                     = 0x2000\n\tCR3                                     = 0x3000\n\tCRDLY                                   = 0x3000\n\tCREAD                                   = 0x800\n\tCRTSCTS                                 = 0x30000\n\tCS5                                     = 0x0\n\tCS6                                     = 0x100\n\tCS7                                     = 0x200\n\tCS8                                     = 0x300\n\tCSIZE                                   = 0x300\n\tCSTART                                  = 0x11\n\tCSTATUS                                 = 0x14\n\tCSTOP                                   = 0x13\n\tCSTOPB                                  = 0x400\n\tCSUSP                                   = 0x1a\n\tCTLIOCGINFO                             = 0xc0644e03\n\tCTL_HW                                  = 0x6\n\tCTL_KERN                                = 0x1\n\tCTL_MAXNAME                             = 0xc\n\tCTL_NET                                 = 0x4\n\tDLT_A429                                = 0xb8\n\tDLT_A653_ICM                            = 0xb9\n\tDLT_AIRONET_HEADER                      = 0x78\n\tDLT_AOS                                 = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394              = 0x8a\n\tDLT_ARCNET                              = 0x7\n\tDLT_ARCNET_LINUX                        = 0x81\n\tDLT_ATM_CLIP                            = 0x13\n\tDLT_ATM_RFC1483                         = 0xb\n\tDLT_AURORA                              = 0x7e\n\tDLT_AX25                                = 0x3\n\tDLT_AX25_KISS                           = 0xca\n\tDLT_BACNET_MS_TP                        = 0xa5\n\tDLT_BLUETOOTH_HCI_H4                    = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR          = 0xc9\n\tDLT_CAN20B                              = 0xbe\n\tDLT_CAN_SOCKETCAN                       = 0xe3\n\tDLT_CHAOS                               = 0x5\n\tDLT_CHDLC                               = 0x68\n\tDLT_CISCO_IOS                           = 0x76\n\tDLT_C_HDLC                              = 0x68\n\tDLT_C_HDLC_WITH_DIR                     = 0xcd\n\tDLT_DBUS                                = 0xe7\n\tDLT_DECT                                = 0xdd\n\tDLT_DOCSIS                              = 0x8f\n\tDLT_DVB_CI                              = 0xeb\n\tDLT_ECONET                              = 0x73\n\tDLT_EN10MB                              = 0x1\n\tDLT_EN3MB                               = 0x2\n\tDLT_ENC                                 = 0x6d\n\tDLT_ERF                                 = 0xc5\n\tDLT_ERF_ETH                             = 0xaf\n\tDLT_ERF_POS                             = 0xb0\n\tDLT_FC_2                                = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS              = 0xe1\n\tDLT_FDDI                                = 0xa\n\tDLT_FLEXRAY                             = 0xd2\n\tDLT_FRELAY                              = 0x6b\n\tDLT_FRELAY_WITH_DIR                     = 0xce\n\tDLT_GCOM_SERIAL                         = 0xad\n\tDLT_GCOM_T1E1                           = 0xac\n\tDLT_GPF_F                               = 0xab\n\tDLT_GPF_T                               = 0xaa\n\tDLT_GPRS_LLC                            = 0xa9\n\tDLT_GSMTAP_ABIS                         = 0xda\n\tDLT_GSMTAP_UM                           = 0xd9\n\tDLT_HHDLC                               = 0x79\n\tDLT_IBM_SN                              = 0x92\n\tDLT_IBM_SP                              = 0x91\n\tDLT_IEEE802                             = 0x6\n\tDLT_IEEE802_11                          = 0x69\n\tDLT_IEEE802_11_RADIO                    = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS                = 0xa3\n\tDLT_IEEE802_15_4                        = 0xc3\n\tDLT_IEEE802_15_4_LINUX                  = 0xbf\n\tDLT_IEEE802_15_4_NOFCS                  = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY             = 0xd7\n\tDLT_IEEE802_16_MAC_CPS                  = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO            = 0xc1\n\tDLT_IPFILTER                            = 0x74\n\tDLT_IPMB                                = 0xc7\n\tDLT_IPMB_LINUX                          = 0xd1\n\tDLT_IPNET                               = 0xe2\n\tDLT_IPOIB                               = 0xf2\n\tDLT_IPV4                                = 0xe4\n\tDLT_IPV6                                = 0xe5\n\tDLT_IP_OVER_FC                          = 0x7a\n\tDLT_JUNIPER_ATM1                        = 0x89\n\tDLT_JUNIPER_ATM2                        = 0x87\n\tDLT_JUNIPER_ATM_CEMIC                   = 0xee\n\tDLT_JUNIPER_CHDLC                       = 0xb5\n\tDLT_JUNIPER_ES                          = 0x84\n\tDLT_JUNIPER_ETHER                       = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL                = 0xea\n\tDLT_JUNIPER_FRELAY                      = 0xb4\n\tDLT_JUNIPER_GGSN                        = 0x85\n\tDLT_JUNIPER_ISM                         = 0xc2\n\tDLT_JUNIPER_MFR                         = 0x86\n\tDLT_JUNIPER_MLFR                        = 0x83\n\tDLT_JUNIPER_MLPPP                       = 0x82\n\tDLT_JUNIPER_MONITOR                     = 0xa4\n\tDLT_JUNIPER_PIC_PEER                    = 0xae\n\tDLT_JUNIPER_PPP                         = 0xb3\n\tDLT_JUNIPER_PPPOE                       = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM                   = 0xa8\n\tDLT_JUNIPER_SERVICES                    = 0x88\n\tDLT_JUNIPER_SRX_E2E                     = 0xe9\n\tDLT_JUNIPER_ST                          = 0xc8\n\tDLT_JUNIPER_VP                          = 0xb7\n\tDLT_JUNIPER_VS                          = 0xe8\n\tDLT_LAPB_WITH_DIR                       = 0xcf\n\tDLT_LAPD                                = 0xcb\n\tDLT_LIN                                 = 0xd4\n\tDLT_LINUX_EVDEV                         = 0xd8\n\tDLT_LINUX_IRDA                          = 0x90\n\tDLT_LINUX_LAPD                          = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION             = 0xa6\n\tDLT_LINUX_SLL                           = 0x71\n\tDLT_LOOP                                = 0x6c\n\tDLT_LTALK                               = 0x72\n\tDLT_MATCHING_MAX                        = 0x10a\n\tDLT_MATCHING_MIN                        = 0x68\n\tDLT_MFR                                 = 0xb6\n\tDLT_MOST                                = 0xd3\n\tDLT_MPEG_2_TS                           = 0xf3\n\tDLT_MPLS                                = 0xdb\n\tDLT_MTP2                                = 0x8c\n\tDLT_MTP2_WITH_PHDR                      = 0x8b\n\tDLT_MTP3                                = 0x8d\n\tDLT_MUX27010                            = 0xec\n\tDLT_NETANALYZER                         = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT             = 0xf1\n\tDLT_NFC_LLCP                            = 0xf5\n\tDLT_NFLOG                               = 0xef\n\tDLT_NG40                                = 0xf4\n\tDLT_NULL                                = 0x0\n\tDLT_PCI_EXP                             = 0x7d\n\tDLT_PFLOG                               = 0x75\n\tDLT_PFSYNC                              = 0x12\n\tDLT_PPI                                 = 0xc0\n\tDLT_PPP                                 = 0x9\n\tDLT_PPP_BSDOS                           = 0x10\n\tDLT_PPP_ETHER                           = 0x33\n\tDLT_PPP_PPPD                            = 0xa6\n\tDLT_PPP_SERIAL                          = 0x32\n\tDLT_PPP_WITH_DIR                        = 0xcc\n\tDLT_PPP_WITH_DIRECTION                  = 0xa6\n\tDLT_PRISM_HEADER                        = 0x77\n\tDLT_PRONET                              = 0x4\n\tDLT_RAIF1                               = 0xc6\n\tDLT_RAW                                 = 0xc\n\tDLT_RIO                                 = 0x7c\n\tDLT_SCCP                                = 0x8e\n\tDLT_SITA                                = 0xc4\n\tDLT_SLIP                                = 0x8\n\tDLT_SLIP_BSDOS                          = 0xf\n\tDLT_STANAG_5066_D_PDU                   = 0xed\n\tDLT_SUNATM                              = 0x7b\n\tDLT_SYMANTEC_FIREWALL                   = 0x63\n\tDLT_TZSP                                = 0x80\n\tDLT_USB                                 = 0xba\n\tDLT_USB_DARWIN                          = 0x10a\n\tDLT_USB_LINUX                           = 0xbd\n\tDLT_USB_LINUX_MMAPPED                   = 0xdc\n\tDLT_USER0                               = 0x93\n\tDLT_USER1                               = 0x94\n\tDLT_USER10                              = 0x9d\n\tDLT_USER11                              = 0x9e\n\tDLT_USER12                              = 0x9f\n\tDLT_USER13                              = 0xa0\n\tDLT_USER14                              = 0xa1\n\tDLT_USER15                              = 0xa2\n\tDLT_USER2                               = 0x95\n\tDLT_USER3                               = 0x96\n\tDLT_USER4                               = 0x97\n\tDLT_USER5                               = 0x98\n\tDLT_USER6                               = 0x99\n\tDLT_USER7                               = 0x9a\n\tDLT_USER8                               = 0x9b\n\tDLT_USER9                               = 0x9c\n\tDLT_WIHART                              = 0xdf\n\tDLT_X2E_SERIAL                          = 0xd5\n\tDLT_X2E_XORAYA                          = 0xd6\n\tDT_BLK                                  = 0x6\n\tDT_CHR                                  = 0x2\n\tDT_DIR                                  = 0x4\n\tDT_FIFO                                 = 0x1\n\tDT_LNK                                  = 0xa\n\tDT_REG                                  = 0x8\n\tDT_SOCK                                 = 0xc\n\tDT_UNKNOWN                              = 0x0\n\tDT_WHT                                  = 0xe\n\tECHO                                    = 0x8\n\tECHOCTL                                 = 0x40\n\tECHOE                                   = 0x2\n\tECHOK                                   = 0x4\n\tECHOKE                                  = 0x1\n\tECHONL                                  = 0x10\n\tECHOPRT                                 = 0x20\n\tEVFILT_AIO                              = -0x3\n\tEVFILT_EXCEPT                           = -0xf\n\tEVFILT_FS                               = -0x9\n\tEVFILT_MACHPORT                         = -0x8\n\tEVFILT_PROC                             = -0x5\n\tEVFILT_READ                             = -0x1\n\tEVFILT_SIGNAL                           = -0x6\n\tEVFILT_SYSCOUNT                         = 0x11\n\tEVFILT_THREADMARKER                     = 0x11\n\tEVFILT_TIMER                            = -0x7\n\tEVFILT_USER                             = -0xa\n\tEVFILT_VM                               = -0xc\n\tEVFILT_VNODE                            = -0x4\n\tEVFILT_WRITE                            = -0x2\n\tEV_ADD                                  = 0x1\n\tEV_CLEAR                                = 0x20\n\tEV_DELETE                               = 0x2\n\tEV_DISABLE                              = 0x8\n\tEV_DISPATCH                             = 0x80\n\tEV_DISPATCH2                            = 0x180\n\tEV_ENABLE                               = 0x4\n\tEV_EOF                                  = 0x8000\n\tEV_ERROR                                = 0x4000\n\tEV_FLAG0                                = 0x1000\n\tEV_FLAG1                                = 0x2000\n\tEV_ONESHOT                              = 0x10\n\tEV_OOBAND                               = 0x2000\n\tEV_POLL                                 = 0x1000\n\tEV_RECEIPT                              = 0x40\n\tEV_SYSFLAGS                             = 0xf000\n\tEV_UDATA_SPECIFIC                       = 0x100\n\tEV_VANISHED                             = 0x200\n\tEXTA                                    = 0x4b00\n\tEXTB                                    = 0x9600\n\tEXTPROC                                 = 0x800\n\tFD_CLOEXEC                              = 0x1\n\tFD_SETSIZE                              = 0x400\n\tFF0                                     = 0x0\n\tFF1                                     = 0x4000\n\tFFDLY                                   = 0x4000\n\tFLUSHO                                  = 0x800000\n\tFSOPT_ATTR_CMN_EXTENDED                 = 0x20\n\tFSOPT_NOFOLLOW                          = 0x1\n\tFSOPT_NOINMEMUPDATE                     = 0x2\n\tFSOPT_PACK_INVAL_ATTRS                  = 0x8\n\tFSOPT_REPORT_FULLSIZE                   = 0x4\n\tFSOPT_RETURN_REALDEV                    = 0x200\n\tF_ADDFILESIGS                           = 0x3d\n\tF_ADDFILESIGS_FOR_DYLD_SIM              = 0x53\n\tF_ADDFILESIGS_INFO                      = 0x67\n\tF_ADDFILESIGS_RETURN                    = 0x61\n\tF_ADDFILESUPPL                          = 0x68\n\tF_ADDSIGS                               = 0x3b\n\tF_ALLOCATEALL                           = 0x4\n\tF_ALLOCATECONTIG                        = 0x2\n\tF_BARRIERFSYNC                          = 0x55\n\tF_CHECK_LV                              = 0x62\n\tF_CHKCLEAN                              = 0x29\n\tF_DUPFD                                 = 0x0\n\tF_DUPFD_CLOEXEC                         = 0x43\n\tF_FINDSIGS                              = 0x4e\n\tF_FLUSH_DATA                            = 0x28\n\tF_FREEZE_FS                             = 0x35\n\tF_FULLFSYNC                             = 0x33\n\tF_GETCODEDIR                            = 0x48\n\tF_GETFD                                 = 0x1\n\tF_GETFL                                 = 0x3\n\tF_GETLK                                 = 0x7\n\tF_GETLKPID                              = 0x42\n\tF_GETNOSIGPIPE                          = 0x4a\n\tF_GETOWN                                = 0x5\n\tF_GETPATH                               = 0x32\n\tF_GETPATH_MTMINFO                       = 0x47\n\tF_GETPATH_NOFIRMLINK                    = 0x66\n\tF_GETPROTECTIONCLASS                    = 0x3f\n\tF_GETPROTECTIONLEVEL                    = 0x4d\n\tF_GETSIGSINFO                           = 0x69\n\tF_GLOBAL_NOCACHE                        = 0x37\n\tF_LOG2PHYS                              = 0x31\n\tF_LOG2PHYS_EXT                          = 0x41\n\tF_NOCACHE                               = 0x30\n\tF_NODIRECT                              = 0x3e\n\tF_OK                                    = 0x0\n\tF_PATHPKG_CHECK                         = 0x34\n\tF_PEOFPOSMODE                           = 0x3\n\tF_PREALLOCATE                           = 0x2a\n\tF_PUNCHHOLE                             = 0x63\n\tF_RDADVISE                              = 0x2c\n\tF_RDAHEAD                               = 0x2d\n\tF_RDLCK                                 = 0x1\n\tF_SETBACKINGSTORE                       = 0x46\n\tF_SETFD                                 = 0x2\n\tF_SETFL                                 = 0x4\n\tF_SETLK                                 = 0x8\n\tF_SETLKW                                = 0x9\n\tF_SETLKWTIMEOUT                         = 0xa\n\tF_SETNOSIGPIPE                          = 0x49\n\tF_SETOWN                                = 0x6\n\tF_SETPROTECTIONCLASS                    = 0x40\n\tF_SETSIZE                               = 0x2b\n\tF_SINGLE_WRITER                         = 0x4c\n\tF_SPECULATIVE_READ                      = 0x65\n\tF_THAW_FS                               = 0x36\n\tF_TRANSCODEKEY                          = 0x4b\n\tF_TRIM_ACTIVE_FILE                      = 0x64\n\tF_UNLCK                                 = 0x2\n\tF_VOLPOSMODE                            = 0x4\n\tF_WRLCK                                 = 0x3\n\tHUPCL                                   = 0x4000\n\tHW_MACHINE                              = 0x1\n\tICANON                                  = 0x100\n\tICMP6_FILTER                            = 0x12\n\tICRNL                                   = 0x100\n\tIEXTEN                                  = 0x400\n\tIFF_ALLMULTI                            = 0x200\n\tIFF_ALTPHYS                             = 0x4000\n\tIFF_BROADCAST                           = 0x2\n\tIFF_DEBUG                               = 0x4\n\tIFF_LINK0                               = 0x1000\n\tIFF_LINK1                               = 0x2000\n\tIFF_LINK2                               = 0x4000\n\tIFF_LOOPBACK                            = 0x8\n\tIFF_MULTICAST                           = 0x8000\n\tIFF_NOARP                               = 0x80\n\tIFF_NOTRAILERS                          = 0x20\n\tIFF_OACTIVE                             = 0x400\n\tIFF_POINTOPOINT                         = 0x10\n\tIFF_PROMISC                             = 0x100\n\tIFF_RUNNING                             = 0x40\n\tIFF_SIMPLEX                             = 0x800\n\tIFF_UP                                  = 0x1\n\tIFNAMSIZ                                = 0x10\n\tIFT_1822                                = 0x2\n\tIFT_6LOWPAN                             = 0x40\n\tIFT_AAL5                                = 0x31\n\tIFT_ARCNET                              = 0x23\n\tIFT_ARCNETPLUS                          = 0x24\n\tIFT_ATM                                 = 0x25\n\tIFT_BRIDGE                              = 0xd1\n\tIFT_CARP                                = 0xf8\n\tIFT_CELLULAR                            = 0xff\n\tIFT_CEPT                                = 0x13\n\tIFT_DS3                                 = 0x1e\n\tIFT_ENC                                 = 0xf4\n\tIFT_EON                                 = 0x19\n\tIFT_ETHER                               = 0x6\n\tIFT_FAITH                               = 0x38\n\tIFT_FDDI                                = 0xf\n\tIFT_FRELAY                              = 0x20\n\tIFT_FRELAYDCE                           = 0x2c\n\tIFT_GIF                                 = 0x37\n\tIFT_HDH1822                             = 0x3\n\tIFT_HIPPI                               = 0x2f\n\tIFT_HSSI                                = 0x2e\n\tIFT_HY                                  = 0xe\n\tIFT_IEEE1394                            = 0x90\n\tIFT_IEEE8023ADLAG                       = 0x88\n\tIFT_ISDNBASIC                           = 0x14\n\tIFT_ISDNPRIMARY                         = 0x15\n\tIFT_ISO88022LLC                         = 0x29\n\tIFT_ISO88023                            = 0x7\n\tIFT_ISO88024                            = 0x8\n\tIFT_ISO88025                            = 0x9\n\tIFT_ISO88026                            = 0xa\n\tIFT_L2VLAN                              = 0x87\n\tIFT_LAPB                                = 0x10\n\tIFT_LOCALTALK                           = 0x2a\n\tIFT_LOOP                                = 0x18\n\tIFT_MIOX25                              = 0x26\n\tIFT_MODEM                               = 0x30\n\tIFT_NSIP                                = 0x1b\n\tIFT_OTHER                               = 0x1\n\tIFT_P10                                 = 0xc\n\tIFT_P80                                 = 0xd\n\tIFT_PARA                                = 0x22\n\tIFT_PDP                                 = 0xff\n\tIFT_PFLOG                               = 0xf5\n\tIFT_PFSYNC                              = 0xf6\n\tIFT_PKTAP                               = 0xfe\n\tIFT_PPP                                 = 0x17\n\tIFT_PROPMUX                             = 0x36\n\tIFT_PROPVIRTUAL                         = 0x35\n\tIFT_PTPSERIAL                           = 0x16\n\tIFT_RS232                               = 0x21\n\tIFT_SDLC                                = 0x11\n\tIFT_SIP                                 = 0x1f\n\tIFT_SLIP                                = 0x1c\n\tIFT_SMDSDXI                             = 0x2b\n\tIFT_SMDSICIP                            = 0x34\n\tIFT_SONET                               = 0x27\n\tIFT_SONETPATH                           = 0x32\n\tIFT_SONETVT                             = 0x33\n\tIFT_STARLAN                             = 0xb\n\tIFT_STF                                 = 0x39\n\tIFT_T1                                  = 0x12\n\tIFT_ULTRA                               = 0x1d\n\tIFT_V35                                 = 0x2d\n\tIFT_X25                                 = 0x5\n\tIFT_X25DDN                              = 0x4\n\tIFT_X25PLE                              = 0x28\n\tIFT_XETHER                              = 0x1a\n\tIGNBRK                                  = 0x1\n\tIGNCR                                   = 0x80\n\tIGNPAR                                  = 0x4\n\tIMAXBEL                                 = 0x2000\n\tINLCR                                   = 0x40\n\tINPCK                                   = 0x10\n\tIN_CLASSA_HOST                          = 0xffffff\n\tIN_CLASSA_MAX                           = 0x80\n\tIN_CLASSA_NET                           = 0xff000000\n\tIN_CLASSA_NSHIFT                        = 0x18\n\tIN_CLASSB_HOST                          = 0xffff\n\tIN_CLASSB_MAX                           = 0x10000\n\tIN_CLASSB_NET                           = 0xffff0000\n\tIN_CLASSB_NSHIFT                        = 0x10\n\tIN_CLASSC_HOST                          = 0xff\n\tIN_CLASSC_NET                           = 0xffffff00\n\tIN_CLASSC_NSHIFT                        = 0x8\n\tIN_CLASSD_HOST                          = 0xfffffff\n\tIN_CLASSD_NET                           = 0xf0000000\n\tIN_CLASSD_NSHIFT                        = 0x1c\n\tIN_LINKLOCALNETNUM                      = 0xa9fe0000\n\tIN_LOOPBACKNET                          = 0x7f\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID          = 0x400473d1\n\tIPPROTO_3PC                             = 0x22\n\tIPPROTO_ADFS                            = 0x44\n\tIPPROTO_AH                              = 0x33\n\tIPPROTO_AHIP                            = 0x3d\n\tIPPROTO_APES                            = 0x63\n\tIPPROTO_ARGUS                           = 0xd\n\tIPPROTO_AX25                            = 0x5d\n\tIPPROTO_BHA                             = 0x31\n\tIPPROTO_BLT                             = 0x1e\n\tIPPROTO_BRSATMON                        = 0x4c\n\tIPPROTO_CFTP                            = 0x3e\n\tIPPROTO_CHAOS                           = 0x10\n\tIPPROTO_CMTP                            = 0x26\n\tIPPROTO_CPHB                            = 0x49\n\tIPPROTO_CPNX                            = 0x48\n\tIPPROTO_DDP                             = 0x25\n\tIPPROTO_DGP                             = 0x56\n\tIPPROTO_DIVERT                          = 0xfe\n\tIPPROTO_DONE                            = 0x101\n\tIPPROTO_DSTOPTS                         = 0x3c\n\tIPPROTO_EGP                             = 0x8\n\tIPPROTO_EMCON                           = 0xe\n\tIPPROTO_ENCAP                           = 0x62\n\tIPPROTO_EON                             = 0x50\n\tIPPROTO_ESP                             = 0x32\n\tIPPROTO_ETHERIP                         = 0x61\n\tIPPROTO_FRAGMENT                        = 0x2c\n\tIPPROTO_GGP                             = 0x3\n\tIPPROTO_GMTP                            = 0x64\n\tIPPROTO_GRE                             = 0x2f\n\tIPPROTO_HELLO                           = 0x3f\n\tIPPROTO_HMP                             = 0x14\n\tIPPROTO_HOPOPTS                         = 0x0\n\tIPPROTO_ICMP                            = 0x1\n\tIPPROTO_ICMPV6                          = 0x3a\n\tIPPROTO_IDP                             = 0x16\n\tIPPROTO_IDPR                            = 0x23\n\tIPPROTO_IDRP                            = 0x2d\n\tIPPROTO_IGMP                            = 0x2\n\tIPPROTO_IGP                             = 0x55\n\tIPPROTO_IGRP                            = 0x58\n\tIPPROTO_IL                              = 0x28\n\tIPPROTO_INLSP                           = 0x34\n\tIPPROTO_INP                             = 0x20\n\tIPPROTO_IP                              = 0x0\n\tIPPROTO_IPCOMP                          = 0x6c\n\tIPPROTO_IPCV                            = 0x47\n\tIPPROTO_IPEIP                           = 0x5e\n\tIPPROTO_IPIP                            = 0x4\n\tIPPROTO_IPPC                            = 0x43\n\tIPPROTO_IPV4                            = 0x4\n\tIPPROTO_IPV6                            = 0x29\n\tIPPROTO_IRTP                            = 0x1c\n\tIPPROTO_KRYPTOLAN                       = 0x41\n\tIPPROTO_LARP                            = 0x5b\n\tIPPROTO_LEAF1                           = 0x19\n\tIPPROTO_LEAF2                           = 0x1a\n\tIPPROTO_MAX                             = 0x100\n\tIPPROTO_MAXID                           = 0x34\n\tIPPROTO_MEAS                            = 0x13\n\tIPPROTO_MHRP                            = 0x30\n\tIPPROTO_MICP                            = 0x5f\n\tIPPROTO_MTP                             = 0x5c\n\tIPPROTO_MUX                             = 0x12\n\tIPPROTO_ND                              = 0x4d\n\tIPPROTO_NHRP                            = 0x36\n\tIPPROTO_NONE                            = 0x3b\n\tIPPROTO_NSP                             = 0x1f\n\tIPPROTO_NVPII                           = 0xb\n\tIPPROTO_OSPFIGP                         = 0x59\n\tIPPROTO_PGM                             = 0x71\n\tIPPROTO_PIGP                            = 0x9\n\tIPPROTO_PIM                             = 0x67\n\tIPPROTO_PRM                             = 0x15\n\tIPPROTO_PUP                             = 0xc\n\tIPPROTO_PVP                             = 0x4b\n\tIPPROTO_RAW                             = 0xff\n\tIPPROTO_RCCMON                          = 0xa\n\tIPPROTO_RDP                             = 0x1b\n\tIPPROTO_ROUTING                         = 0x2b\n\tIPPROTO_RSVP                            = 0x2e\n\tIPPROTO_RVD                             = 0x42\n\tIPPROTO_SATEXPAK                        = 0x40\n\tIPPROTO_SATMON                          = 0x45\n\tIPPROTO_SCCSP                           = 0x60\n\tIPPROTO_SCTP                            = 0x84\n\tIPPROTO_SDRP                            = 0x2a\n\tIPPROTO_SEP                             = 0x21\n\tIPPROTO_SRPC                            = 0x5a\n\tIPPROTO_ST                              = 0x7\n\tIPPROTO_SVMTP                           = 0x52\n\tIPPROTO_SWIPE                           = 0x35\n\tIPPROTO_TCF                             = 0x57\n\tIPPROTO_TCP                             = 0x6\n\tIPPROTO_TP                              = 0x1d\n\tIPPROTO_TPXX                            = 0x27\n\tIPPROTO_TRUNK1                          = 0x17\n\tIPPROTO_TRUNK2                          = 0x18\n\tIPPROTO_TTP                             = 0x54\n\tIPPROTO_UDP                             = 0x11\n\tIPPROTO_VINES                           = 0x53\n\tIPPROTO_VISA                            = 0x46\n\tIPPROTO_VMTP                            = 0x51\n\tIPPROTO_WBEXPAK                         = 0x4f\n\tIPPROTO_WBMON                           = 0x4e\n\tIPPROTO_WSN                             = 0x4a\n\tIPPROTO_XNET                            = 0xf\n\tIPPROTO_XTP                             = 0x24\n\tIPV6_2292DSTOPTS                        = 0x17\n\tIPV6_2292HOPLIMIT                       = 0x14\n\tIPV6_2292HOPOPTS                        = 0x16\n\tIPV6_2292NEXTHOP                        = 0x15\n\tIPV6_2292PKTINFO                        = 0x13\n\tIPV6_2292PKTOPTIONS                     = 0x19\n\tIPV6_2292RTHDR                          = 0x18\n\tIPV6_3542DSTOPTS                        = 0x32\n\tIPV6_3542HOPLIMIT                       = 0x2f\n\tIPV6_3542HOPOPTS                        = 0x31\n\tIPV6_3542NEXTHOP                        = 0x30\n\tIPV6_3542PKTINFO                        = 0x2e\n\tIPV6_3542RTHDR                          = 0x33\n\tIPV6_ADDR_MC_FLAGS_PREFIX               = 0x20\n\tIPV6_ADDR_MC_FLAGS_TRANSIENT            = 0x10\n\tIPV6_ADDR_MC_FLAGS_UNICAST_BASED        = 0x30\n\tIPV6_AUTOFLOWLABEL                      = 0x3b\n\tIPV6_BINDV6ONLY                         = 0x1b\n\tIPV6_BOUND_IF                           = 0x7d\n\tIPV6_CHECKSUM                           = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS             = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP             = 0x1\n\tIPV6_DEFHLIM                            = 0x40\n\tIPV6_DONTFRAG                           = 0x3e\n\tIPV6_DSTOPTS                            = 0x32\n\tIPV6_FAITH                              = 0x1d\n\tIPV6_FLOWINFO_MASK                      = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK                     = 0xffff0f00\n\tIPV6_FLOW_ECN_MASK                      = 0x3000\n\tIPV6_FRAGTTL                            = 0x3c\n\tIPV6_FW_ADD                             = 0x1e\n\tIPV6_FW_DEL                             = 0x1f\n\tIPV6_FW_FLUSH                           = 0x20\n\tIPV6_FW_GET                             = 0x22\n\tIPV6_FW_ZERO                            = 0x21\n\tIPV6_HLIMDEC                            = 0x1\n\tIPV6_HOPLIMIT                           = 0x2f\n\tIPV6_HOPOPTS                            = 0x31\n\tIPV6_IPSEC_POLICY                       = 0x1c\n\tIPV6_JOIN_GROUP                         = 0xc\n\tIPV6_LEAVE_GROUP                        = 0xd\n\tIPV6_MAXHLIM                            = 0xff\n\tIPV6_MAXOPTHDR                          = 0x800\n\tIPV6_MAXPACKET                          = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER               = 0x200\n\tIPV6_MAX_MEMBERSHIPS                    = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER                = 0x80\n\tIPV6_MIN_MEMBERSHIPS                    = 0x1f\n\tIPV6_MMTU                               = 0x500\n\tIPV6_MSFILTER                           = 0x4a\n\tIPV6_MULTICAST_HOPS                     = 0xa\n\tIPV6_MULTICAST_IF                       = 0x9\n\tIPV6_MULTICAST_LOOP                     = 0xb\n\tIPV6_NEXTHOP                            = 0x30\n\tIPV6_PATHMTU                            = 0x2c\n\tIPV6_PKTINFO                            = 0x2e\n\tIPV6_PORTRANGE                          = 0xe\n\tIPV6_PORTRANGE_DEFAULT                  = 0x0\n\tIPV6_PORTRANGE_HIGH                     = 0x1\n\tIPV6_PORTRANGE_LOW                      = 0x2\n\tIPV6_PREFER_TEMPADDR                    = 0x3f\n\tIPV6_RECVDSTOPTS                        = 0x28\n\tIPV6_RECVHOPLIMIT                       = 0x25\n\tIPV6_RECVHOPOPTS                        = 0x27\n\tIPV6_RECVPATHMTU                        = 0x2b\n\tIPV6_RECVPKTINFO                        = 0x3d\n\tIPV6_RECVRTHDR                          = 0x26\n\tIPV6_RECVTCLASS                         = 0x23\n\tIPV6_RTHDR                              = 0x33\n\tIPV6_RTHDRDSTOPTS                       = 0x39\n\tIPV6_RTHDR_LOOSE                        = 0x0\n\tIPV6_RTHDR_STRICT                       = 0x1\n\tIPV6_RTHDR_TYPE_0                       = 0x0\n\tIPV6_SOCKOPT_RESERVED1                  = 0x3\n\tIPV6_TCLASS                             = 0x24\n\tIPV6_UNICAST_HOPS                       = 0x4\n\tIPV6_USE_MIN_MTU                        = 0x2a\n\tIPV6_V6ONLY                             = 0x1b\n\tIPV6_VERSION                            = 0x60\n\tIPV6_VERSION_MASK                       = 0xf0\n\tIP_ADD_MEMBERSHIP                       = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP                = 0x46\n\tIP_BLOCK_SOURCE                         = 0x48\n\tIP_BOUND_IF                             = 0x19\n\tIP_DEFAULT_MULTICAST_LOOP               = 0x1\n\tIP_DEFAULT_MULTICAST_TTL                = 0x1\n\tIP_DF                                   = 0x4000\n\tIP_DONTFRAG                             = 0x1c\n\tIP_DROP_MEMBERSHIP                      = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP               = 0x47\n\tIP_DUMMYNET_CONFIGURE                   = 0x3c\n\tIP_DUMMYNET_DEL                         = 0x3d\n\tIP_DUMMYNET_FLUSH                       = 0x3e\n\tIP_DUMMYNET_GET                         = 0x40\n\tIP_FAITH                                = 0x16\n\tIP_FW_ADD                               = 0x28\n\tIP_FW_DEL                               = 0x29\n\tIP_FW_FLUSH                             = 0x2a\n\tIP_FW_GET                               = 0x2c\n\tIP_FW_RESETLOG                          = 0x2d\n\tIP_FW_ZERO                              = 0x2b\n\tIP_HDRINCL                              = 0x2\n\tIP_IPSEC_POLICY                         = 0x15\n\tIP_MAXPACKET                            = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER                 = 0x200\n\tIP_MAX_MEMBERSHIPS                      = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER                 = 0x80\n\tIP_MAX_SOCK_SRC_FILTER                  = 0x80\n\tIP_MF                                   = 0x2000\n\tIP_MIN_MEMBERSHIPS                      = 0x1f\n\tIP_MSFILTER                             = 0x4a\n\tIP_MSS                                  = 0x240\n\tIP_MULTICAST_IF                         = 0x9\n\tIP_MULTICAST_IFINDEX                    = 0x42\n\tIP_MULTICAST_LOOP                       = 0xb\n\tIP_MULTICAST_TTL                        = 0xa\n\tIP_MULTICAST_VIF                        = 0xe\n\tIP_NAT__XXX                             = 0x37\n\tIP_OFFMASK                              = 0x1fff\n\tIP_OLD_FW_ADD                           = 0x32\n\tIP_OLD_FW_DEL                           = 0x33\n\tIP_OLD_FW_FLUSH                         = 0x34\n\tIP_OLD_FW_GET                           = 0x36\n\tIP_OLD_FW_RESETLOG                      = 0x38\n\tIP_OLD_FW_ZERO                          = 0x35\n\tIP_OPTIONS                              = 0x1\n\tIP_PKTINFO                              = 0x1a\n\tIP_PORTRANGE                            = 0x13\n\tIP_PORTRANGE_DEFAULT                    = 0x0\n\tIP_PORTRANGE_HIGH                       = 0x1\n\tIP_PORTRANGE_LOW                        = 0x2\n\tIP_RECVDSTADDR                          = 0x7\n\tIP_RECVIF                               = 0x14\n\tIP_RECVOPTS                             = 0x5\n\tIP_RECVPKTINFO                          = 0x1a\n\tIP_RECVRETOPTS                          = 0x6\n\tIP_RECVTOS                              = 0x1b\n\tIP_RECVTTL                              = 0x18\n\tIP_RETOPTS                              = 0x8\n\tIP_RF                                   = 0x8000\n\tIP_RSVP_OFF                             = 0x10\n\tIP_RSVP_ON                              = 0xf\n\tIP_RSVP_VIF_OFF                         = 0x12\n\tIP_RSVP_VIF_ON                          = 0x11\n\tIP_STRIPHDR                             = 0x17\n\tIP_TOS                                  = 0x3\n\tIP_TRAFFIC_MGT_BACKGROUND               = 0x41\n\tIP_TTL                                  = 0x4\n\tIP_UNBLOCK_SOURCE                       = 0x49\n\tISIG                                    = 0x80\n\tISTRIP                                  = 0x20\n\tIUTF8                                   = 0x4000\n\tIXANY                                   = 0x800\n\tIXOFF                                   = 0x400\n\tIXON                                    = 0x200\n\tKERN_HOSTNAME                           = 0xa\n\tKERN_OSRELEASE                          = 0x2\n\tKERN_OSTYPE                             = 0x1\n\tKERN_VERSION                            = 0x4\n\tLOCAL_PEERCRED                          = 0x1\n\tLOCAL_PEEREPID                          = 0x3\n\tLOCAL_PEEREUUID                         = 0x5\n\tLOCAL_PEERPID                           = 0x2\n\tLOCAL_PEERTOKEN                         = 0x6\n\tLOCAL_PEERUUID                          = 0x4\n\tLOCK_EX                                 = 0x2\n\tLOCK_NB                                 = 0x4\n\tLOCK_SH                                 = 0x1\n\tLOCK_UN                                 = 0x8\n\tMADV_CAN_REUSE                          = 0x9\n\tMADV_DONTNEED                           = 0x4\n\tMADV_FREE                               = 0x5\n\tMADV_FREE_REUSABLE                      = 0x7\n\tMADV_FREE_REUSE                         = 0x8\n\tMADV_NORMAL                             = 0x0\n\tMADV_PAGEOUT                            = 0xa\n\tMADV_RANDOM                             = 0x1\n\tMADV_SEQUENTIAL                         = 0x2\n\tMADV_WILLNEED                           = 0x3\n\tMADV_ZERO_WIRED_PAGES                   = 0x6\n\tMAP_32BIT                               = 0x8000\n\tMAP_ANON                                = 0x1000\n\tMAP_ANONYMOUS                           = 0x1000\n\tMAP_COPY                                = 0x2\n\tMAP_FILE                                = 0x0\n\tMAP_FIXED                               = 0x10\n\tMAP_HASSEMAPHORE                        = 0x200\n\tMAP_JIT                                 = 0x800\n\tMAP_NOCACHE                             = 0x400\n\tMAP_NOEXTEND                            = 0x100\n\tMAP_NORESERVE                           = 0x40\n\tMAP_PRIVATE                             = 0x2\n\tMAP_RENAME                              = 0x20\n\tMAP_RESERVED0080                        = 0x80\n\tMAP_RESILIENT_CODESIGN                  = 0x2000\n\tMAP_RESILIENT_MEDIA                     = 0x4000\n\tMAP_SHARED                              = 0x1\n\tMAP_TRANSLATED_ALLOW_EXECUTE            = 0x20000\n\tMAP_UNIX03                              = 0x40000\n\tMCAST_BLOCK_SOURCE                      = 0x54\n\tMCAST_EXCLUDE                           = 0x2\n\tMCAST_INCLUDE                           = 0x1\n\tMCAST_JOIN_GROUP                        = 0x50\n\tMCAST_JOIN_SOURCE_GROUP                 = 0x52\n\tMCAST_LEAVE_GROUP                       = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP                = 0x53\n\tMCAST_UNBLOCK_SOURCE                    = 0x55\n\tMCAST_UNDEFINED                         = 0x0\n\tMCL_CURRENT                             = 0x1\n\tMCL_FUTURE                              = 0x2\n\tMNT_ASYNC                               = 0x40\n\tMNT_AUTOMOUNTED                         = 0x400000\n\tMNT_CMDFLAGS                            = 0xf0000\n\tMNT_CPROTECT                            = 0x80\n\tMNT_DEFWRITE                            = 0x2000000\n\tMNT_DONTBROWSE                          = 0x100000\n\tMNT_DOVOLFS                             = 0x8000\n\tMNT_DWAIT                               = 0x4\n\tMNT_EXPORTED                            = 0x100\n\tMNT_EXT_ROOT_DATA_VOL                   = 0x1\n\tMNT_FORCE                               = 0x80000\n\tMNT_IGNORE_OWNERSHIP                    = 0x200000\n\tMNT_JOURNALED                           = 0x800000\n\tMNT_LOCAL                               = 0x1000\n\tMNT_MULTILABEL                          = 0x4000000\n\tMNT_NOATIME                             = 0x10000000\n\tMNT_NOBLOCK                             = 0x20000\n\tMNT_NODEV                               = 0x10\n\tMNT_NOEXEC                              = 0x4\n\tMNT_NOSUID                              = 0x8\n\tMNT_NOUSERXATTR                         = 0x1000000\n\tMNT_NOWAIT                              = 0x2\n\tMNT_QUARANTINE                          = 0x400\n\tMNT_QUOTA                               = 0x2000\n\tMNT_RDONLY                              = 0x1\n\tMNT_RELOAD                              = 0x40000\n\tMNT_REMOVABLE                           = 0x200\n\tMNT_ROOTFS                              = 0x4000\n\tMNT_SNAPSHOT                            = 0x40000000\n\tMNT_STRICTATIME                         = 0x80000000\n\tMNT_SYNCHRONOUS                         = 0x2\n\tMNT_UNION                               = 0x20\n\tMNT_UNKNOWNPERMISSIONS                  = 0x200000\n\tMNT_UPDATE                              = 0x10000\n\tMNT_VISFLAGMASK                         = 0xd7f0f7ff\n\tMNT_WAIT                                = 0x1\n\tMSG_CTRUNC                              = 0x20\n\tMSG_DONTROUTE                           = 0x4\n\tMSG_DONTWAIT                            = 0x80\n\tMSG_EOF                                 = 0x100\n\tMSG_EOR                                 = 0x8\n\tMSG_FLUSH                               = 0x400\n\tMSG_HAVEMORE                            = 0x2000\n\tMSG_HOLD                                = 0x800\n\tMSG_NEEDSA                              = 0x10000\n\tMSG_NOSIGNAL                            = 0x80000\n\tMSG_OOB                                 = 0x1\n\tMSG_PEEK                                = 0x2\n\tMSG_RCVMORE                             = 0x4000\n\tMSG_SEND                                = 0x1000\n\tMSG_TRUNC                               = 0x10\n\tMSG_WAITALL                             = 0x40\n\tMSG_WAITSTREAM                          = 0x200\n\tMS_ASYNC                                = 0x1\n\tMS_DEACTIVATE                           = 0x8\n\tMS_INVALIDATE                           = 0x2\n\tMS_KILLPAGES                            = 0x4\n\tMS_SYNC                                 = 0x10\n\tNAME_MAX                                = 0xff\n\tNET_RT_DUMP                             = 0x1\n\tNET_RT_DUMP2                            = 0x7\n\tNET_RT_FLAGS                            = 0x2\n\tNET_RT_FLAGS_PRIV                       = 0xa\n\tNET_RT_IFLIST                           = 0x3\n\tNET_RT_IFLIST2                          = 0x6\n\tNET_RT_MAXID                            = 0xb\n\tNET_RT_STAT                             = 0x4\n\tNET_RT_TRASH                            = 0x5\n\tNFDBITS                                 = 0x20\n\tNL0                                     = 0x0\n\tNL1                                     = 0x100\n\tNL2                                     = 0x200\n\tNL3                                     = 0x300\n\tNLDLY                                   = 0x300\n\tNOFLSH                                  = 0x80000000\n\tNOKERNINFO                              = 0x2000000\n\tNOTE_ABSOLUTE                           = 0x8\n\tNOTE_ATTRIB                             = 0x8\n\tNOTE_BACKGROUND                         = 0x40\n\tNOTE_CHILD                              = 0x4\n\tNOTE_CRITICAL                           = 0x20\n\tNOTE_DELETE                             = 0x1\n\tNOTE_EXEC                               = 0x20000000\n\tNOTE_EXIT                               = 0x80000000\n\tNOTE_EXITSTATUS                         = 0x4000000\n\tNOTE_EXIT_CSERROR                       = 0x40000\n\tNOTE_EXIT_DECRYPTFAIL                   = 0x10000\n\tNOTE_EXIT_DETAIL                        = 0x2000000\n\tNOTE_EXIT_DETAIL_MASK                   = 0x70000\n\tNOTE_EXIT_MEMORY                        = 0x20000\n\tNOTE_EXIT_REPARENTED                    = 0x80000\n\tNOTE_EXTEND                             = 0x4\n\tNOTE_FFAND                              = 0x40000000\n\tNOTE_FFCOPY                             = 0xc0000000\n\tNOTE_FFCTRLMASK                         = 0xc0000000\n\tNOTE_FFLAGSMASK                         = 0xffffff\n\tNOTE_FFNOP                              = 0x0\n\tNOTE_FFOR                               = 0x80000000\n\tNOTE_FORK                               = 0x40000000\n\tNOTE_FUNLOCK                            = 0x100\n\tNOTE_LEEWAY                             = 0x10\n\tNOTE_LINK                               = 0x10\n\tNOTE_LOWAT                              = 0x1\n\tNOTE_MACHTIME                           = 0x100\n\tNOTE_MACH_CONTINUOUS_TIME               = 0x80\n\tNOTE_NONE                               = 0x80\n\tNOTE_NSECONDS                           = 0x4\n\tNOTE_OOB                                = 0x2\n\tNOTE_PCTRLMASK                          = -0x100000\n\tNOTE_PDATAMASK                          = 0xfffff\n\tNOTE_REAP                               = 0x10000000\n\tNOTE_RENAME                             = 0x20\n\tNOTE_REVOKE                             = 0x40\n\tNOTE_SECONDS                            = 0x1\n\tNOTE_SIGNAL                             = 0x8000000\n\tNOTE_TRACK                              = 0x1\n\tNOTE_TRACKERR                           = 0x2\n\tNOTE_TRIGGER                            = 0x1000000\n\tNOTE_USECONDS                           = 0x2\n\tNOTE_VM_ERROR                           = 0x10000000\n\tNOTE_VM_PRESSURE                        = 0x80000000\n\tNOTE_VM_PRESSURE_SUDDEN_TERMINATE       = 0x20000000\n\tNOTE_VM_PRESSURE_TERMINATE              = 0x40000000\n\tNOTE_WRITE                              = 0x2\n\tOCRNL                                   = 0x10\n\tOFDEL                                   = 0x20000\n\tOFILL                                   = 0x80\n\tONLCR                                   = 0x2\n\tONLRET                                  = 0x40\n\tONOCR                                   = 0x20\n\tONOEOT                                  = 0x8\n\tOPOST                                   = 0x1\n\tOXTABS                                  = 0x4\n\tO_ACCMODE                               = 0x3\n\tO_ALERT                                 = 0x20000000\n\tO_APPEND                                = 0x8\n\tO_ASYNC                                 = 0x40\n\tO_CLOEXEC                               = 0x1000000\n\tO_CREAT                                 = 0x200\n\tO_DIRECTORY                             = 0x100000\n\tO_DP_GETRAWENCRYPTED                    = 0x1\n\tO_DP_GETRAWUNENCRYPTED                  = 0x2\n\tO_DSYNC                                 = 0x400000\n\tO_EVTONLY                               = 0x8000\n\tO_EXCL                                  = 0x800\n\tO_EXLOCK                                = 0x20\n\tO_FSYNC                                 = 0x80\n\tO_NDELAY                                = 0x4\n\tO_NOCTTY                                = 0x20000\n\tO_NOFOLLOW                              = 0x100\n\tO_NOFOLLOW_ANY                          = 0x20000000\n\tO_NONBLOCK                              = 0x4\n\tO_POPUP                                 = 0x80000000\n\tO_RDONLY                                = 0x0\n\tO_RDWR                                  = 0x2\n\tO_SHLOCK                                = 0x10\n\tO_SYMLINK                               = 0x200000\n\tO_SYNC                                  = 0x80\n\tO_TRUNC                                 = 0x400\n\tO_WRONLY                                = 0x1\n\tPARENB                                  = 0x1000\n\tPARMRK                                  = 0x8\n\tPARODD                                  = 0x2000\n\tPENDIN                                  = 0x20000000\n\tPRIO_PGRP                               = 0x1\n\tPRIO_PROCESS                            = 0x0\n\tPRIO_USER                               = 0x2\n\tPROT_EXEC                               = 0x4\n\tPROT_NONE                               = 0x0\n\tPROT_READ                               = 0x1\n\tPROT_WRITE                              = 0x2\n\tPT_ATTACH                               = 0xa\n\tPT_ATTACHEXC                            = 0xe\n\tPT_CONTINUE                             = 0x7\n\tPT_DENY_ATTACH                          = 0x1f\n\tPT_DETACH                               = 0xb\n\tPT_FIRSTMACH                            = 0x20\n\tPT_FORCEQUOTA                           = 0x1e\n\tPT_KILL                                 = 0x8\n\tPT_READ_D                               = 0x2\n\tPT_READ_I                               = 0x1\n\tPT_READ_U                               = 0x3\n\tPT_SIGEXC                               = 0xc\n\tPT_STEP                                 = 0x9\n\tPT_THUPDATE                             = 0xd\n\tPT_TRACE_ME                             = 0x0\n\tPT_WRITE_D                              = 0x5\n\tPT_WRITE_I                              = 0x4\n\tPT_WRITE_U                              = 0x6\n\tRENAME_EXCL                             = 0x4\n\tRENAME_NOFOLLOW_ANY                     = 0x10\n\tRENAME_RESERVED1                        = 0x8\n\tRENAME_SECLUDE                          = 0x1\n\tRENAME_SWAP                             = 0x2\n\tRLIMIT_AS                               = 0x5\n\tRLIMIT_CORE                             = 0x4\n\tRLIMIT_CPU                              = 0x0\n\tRLIMIT_CPU_USAGE_MONITOR                = 0x2\n\tRLIMIT_DATA                             = 0x2\n\tRLIMIT_FSIZE                            = 0x1\n\tRLIMIT_MEMLOCK                          = 0x6\n\tRLIMIT_NOFILE                           = 0x8\n\tRLIMIT_NPROC                            = 0x7\n\tRLIMIT_RSS                              = 0x5\n\tRLIMIT_STACK                            = 0x3\n\tRLIM_INFINITY                           = 0x7fffffffffffffff\n\tRTAX_AUTHOR                             = 0x6\n\tRTAX_BRD                                = 0x7\n\tRTAX_DST                                = 0x0\n\tRTAX_GATEWAY                            = 0x1\n\tRTAX_GENMASK                            = 0x3\n\tRTAX_IFA                                = 0x5\n\tRTAX_IFP                                = 0x4\n\tRTAX_MAX                                = 0x8\n\tRTAX_NETMASK                            = 0x2\n\tRTA_AUTHOR                              = 0x40\n\tRTA_BRD                                 = 0x80\n\tRTA_DST                                 = 0x1\n\tRTA_GATEWAY                             = 0x2\n\tRTA_GENMASK                             = 0x8\n\tRTA_IFA                                 = 0x20\n\tRTA_IFP                                 = 0x10\n\tRTA_NETMASK                             = 0x4\n\tRTF_BLACKHOLE                           = 0x1000\n\tRTF_BROADCAST                           = 0x400000\n\tRTF_CLONING                             = 0x100\n\tRTF_CONDEMNED                           = 0x2000000\n\tRTF_DEAD                                = 0x20000000\n\tRTF_DELCLONE                            = 0x80\n\tRTF_DONE                                = 0x40\n\tRTF_DYNAMIC                             = 0x10\n\tRTF_GATEWAY                             = 0x2\n\tRTF_GLOBAL                              = 0x40000000\n\tRTF_HOST                                = 0x4\n\tRTF_IFREF                               = 0x4000000\n\tRTF_IFSCOPE                             = 0x1000000\n\tRTF_LLDATA                              = 0x400\n\tRTF_LLINFO                              = 0x400\n\tRTF_LOCAL                               = 0x200000\n\tRTF_MODIFIED                            = 0x20\n\tRTF_MULTICAST                           = 0x800000\n\tRTF_NOIFREF                             = 0x2000\n\tRTF_PINNED                              = 0x100000\n\tRTF_PRCLONING                           = 0x10000\n\tRTF_PROTO1                              = 0x8000\n\tRTF_PROTO2                              = 0x4000\n\tRTF_PROTO3                              = 0x40000\n\tRTF_PROXY                               = 0x8000000\n\tRTF_REJECT                              = 0x8\n\tRTF_ROUTER                              = 0x10000000\n\tRTF_STATIC                              = 0x800\n\tRTF_UP                                  = 0x1\n\tRTF_WASCLONED                           = 0x20000\n\tRTF_XRESOLVE                            = 0x200\n\tRTM_ADD                                 = 0x1\n\tRTM_CHANGE                              = 0x3\n\tRTM_DELADDR                             = 0xd\n\tRTM_DELETE                              = 0x2\n\tRTM_DELMADDR                            = 0x10\n\tRTM_GET                                 = 0x4\n\tRTM_GET2                                = 0x14\n\tRTM_IFINFO                              = 0xe\n\tRTM_IFINFO2                             = 0x12\n\tRTM_LOCK                                = 0x8\n\tRTM_LOSING                              = 0x5\n\tRTM_MISS                                = 0x7\n\tRTM_NEWADDR                             = 0xc\n\tRTM_NEWMADDR                            = 0xf\n\tRTM_NEWMADDR2                           = 0x13\n\tRTM_OLDADD                              = 0x9\n\tRTM_OLDDEL                              = 0xa\n\tRTM_REDIRECT                            = 0x6\n\tRTM_RESOLVE                             = 0xb\n\tRTM_RTTUNIT                             = 0xf4240\n\tRTM_VERSION                             = 0x5\n\tRTV_EXPIRE                              = 0x4\n\tRTV_HOPCOUNT                            = 0x2\n\tRTV_MTU                                 = 0x1\n\tRTV_RPIPE                               = 0x8\n\tRTV_RTT                                 = 0x40\n\tRTV_RTTVAR                              = 0x80\n\tRTV_SPIPE                               = 0x10\n\tRTV_SSTHRESH                            = 0x20\n\tRUSAGE_CHILDREN                         = -0x1\n\tRUSAGE_SELF                             = 0x0\n\tSAE_ASSOCID_ALL                         = 0xffffffff\n\tSAE_ASSOCID_ANY                         = 0x0\n\tSAE_CONNID_ALL                          = 0xffffffff\n\tSAE_CONNID_ANY                          = 0x0\n\tSCM_CREDS                               = 0x3\n\tSCM_RIGHTS                              = 0x1\n\tSCM_TIMESTAMP                           = 0x2\n\tSCM_TIMESTAMP_MONOTONIC                 = 0x4\n\tSEEK_CUR                                = 0x1\n\tSEEK_DATA                               = 0x4\n\tSEEK_END                                = 0x2\n\tSEEK_HOLE                               = 0x3\n\tSEEK_SET                                = 0x0\n\tSF_APPEND                               = 0x40000\n\tSF_ARCHIVED                             = 0x10000\n\tSF_DATALESS                             = 0x40000000\n\tSF_FIRMLINK                             = 0x800000\n\tSF_IMMUTABLE                            = 0x20000\n\tSF_NOUNLINK                             = 0x100000\n\tSF_RESTRICTED                           = 0x80000\n\tSF_SETTABLE                             = 0x3fff0000\n\tSF_SUPPORTED                            = 0x9f0000\n\tSF_SYNTHETIC                            = 0xc0000000\n\tSHUT_RD                                 = 0x0\n\tSHUT_RDWR                               = 0x2\n\tSHUT_WR                                 = 0x1\n\tSIOCADDMULTI                            = 0x80206931\n\tSIOCAIFADDR                             = 0x8040691a\n\tSIOCARPIPLL                             = 0xc0206928\n\tSIOCATMARK                              = 0x40047307\n\tSIOCAUTOADDR                            = 0xc0206926\n\tSIOCAUTONETMASK                         = 0x80206927\n\tSIOCDELMULTI                            = 0x80206932\n\tSIOCDIFADDR                             = 0x80206919\n\tSIOCDIFPHYADDR                          = 0x80206941\n\tSIOCGDRVSPEC                            = 0xc028697b\n\tSIOCGETVLAN                             = 0xc020697f\n\tSIOCGHIWAT                              = 0x40047301\n\tSIOCGIF6LOWPAN                          = 0xc02069c5\n\tSIOCGIFADDR                             = 0xc0206921\n\tSIOCGIFALTMTU                           = 0xc0206948\n\tSIOCGIFASYNCMAP                         = 0xc020697c\n\tSIOCGIFBOND                             = 0xc0206947\n\tSIOCGIFBRDADDR                          = 0xc0206923\n\tSIOCGIFCAP                              = 0xc020695b\n\tSIOCGIFCONF                             = 0xc00c6924\n\tSIOCGIFDEVMTU                           = 0xc0206944\n\tSIOCGIFDSTADDR                          = 0xc0206922\n\tSIOCGIFFLAGS                            = 0xc0206911\n\tSIOCGIFFUNCTIONALTYPE                   = 0xc02069ad\n\tSIOCGIFGENERIC                          = 0xc020693a\n\tSIOCGIFKPI                              = 0xc0206987\n\tSIOCGIFMAC                              = 0xc0206982\n\tSIOCGIFMEDIA                            = 0xc02c6938\n\tSIOCGIFMETRIC                           = 0xc0206917\n\tSIOCGIFMTU                              = 0xc0206933\n\tSIOCGIFNETMASK                          = 0xc0206925\n\tSIOCGIFPDSTADDR                         = 0xc0206940\n\tSIOCGIFPHYS                             = 0xc0206935\n\tSIOCGIFPSRCADDR                         = 0xc020693f\n\tSIOCGIFSTATUS                           = 0xc331693d\n\tSIOCGIFVLAN                             = 0xc020697f\n\tSIOCGIFWAKEFLAGS                        = 0xc0206988\n\tSIOCGIFXMEDIA                           = 0xc02c6948\n\tSIOCGLOWAT                              = 0x40047303\n\tSIOCGPGRP                               = 0x40047309\n\tSIOCIFCREATE                            = 0xc0206978\n\tSIOCIFCREATE2                           = 0xc020697a\n\tSIOCIFDESTROY                           = 0x80206979\n\tSIOCIFGCLONERS                          = 0xc0106981\n\tSIOCRSLVMULTI                           = 0xc010693b\n\tSIOCSDRVSPEC                            = 0x8028697b\n\tSIOCSETVLAN                             = 0x8020697e\n\tSIOCSHIWAT                              = 0x80047300\n\tSIOCSIF6LOWPAN                          = 0x802069c4\n\tSIOCSIFADDR                             = 0x8020690c\n\tSIOCSIFALTMTU                           = 0x80206945\n\tSIOCSIFASYNCMAP                         = 0x8020697d\n\tSIOCSIFBOND                             = 0x80206946\n\tSIOCSIFBRDADDR                          = 0x80206913\n\tSIOCSIFCAP                              = 0x8020695a\n\tSIOCSIFDSTADDR                          = 0x8020690e\n\tSIOCSIFFLAGS                            = 0x80206910\n\tSIOCSIFGENERIC                          = 0x80206939\n\tSIOCSIFKPI                              = 0x80206986\n\tSIOCSIFLLADDR                           = 0x8020693c\n\tSIOCSIFMAC                              = 0x80206983\n\tSIOCSIFMEDIA                            = 0xc0206937\n\tSIOCSIFMETRIC                           = 0x80206918\n\tSIOCSIFMTU                              = 0x80206934\n\tSIOCSIFNETMASK                          = 0x80206916\n\tSIOCSIFPHYADDR                          = 0x8040693e\n\tSIOCSIFPHYS                             = 0x80206936\n\tSIOCSIFVLAN                             = 0x8020697e\n\tSIOCSLOWAT                              = 0x80047302\n\tSIOCSPGRP                               = 0x80047308\n\tSOCK_DGRAM                              = 0x2\n\tSOCK_MAXADDRLEN                         = 0xff\n\tSOCK_RAW                                = 0x3\n\tSOCK_RDM                                = 0x4\n\tSOCK_SEQPACKET                          = 0x5\n\tSOCK_STREAM                             = 0x1\n\tSOL_LOCAL                               = 0x0\n\tSOL_SOCKET                              = 0xffff\n\tSOMAXCONN                               = 0x80\n\tSO_ACCEPTCONN                           = 0x2\n\tSO_BROADCAST                            = 0x20\n\tSO_DEBUG                                = 0x1\n\tSO_DONTROUTE                            = 0x10\n\tSO_DONTTRUNC                            = 0x2000\n\tSO_ERROR                                = 0x1007\n\tSO_KEEPALIVE                            = 0x8\n\tSO_LABEL                                = 0x1010\n\tSO_LINGER                               = 0x80\n\tSO_LINGER_SEC                           = 0x1080\n\tSO_NETSVC_MARKING_LEVEL                 = 0x1119\n\tSO_NET_SERVICE_TYPE                     = 0x1116\n\tSO_NKE                                  = 0x1021\n\tSO_NOADDRERR                            = 0x1023\n\tSO_NOSIGPIPE                            = 0x1022\n\tSO_NOTIFYCONFLICT                       = 0x1026\n\tSO_NP_EXTENSIONS                        = 0x1083\n\tSO_NREAD                                = 0x1020\n\tSO_NUMRCVPKT                            = 0x1112\n\tSO_NWRITE                               = 0x1024\n\tSO_OOBINLINE                            = 0x100\n\tSO_PEERLABEL                            = 0x1011\n\tSO_RANDOMPORT                           = 0x1082\n\tSO_RCVBUF                               = 0x1002\n\tSO_RCVLOWAT                             = 0x1004\n\tSO_RCVTIMEO                             = 0x1006\n\tSO_REUSEADDR                            = 0x4\n\tSO_REUSEPORT                            = 0x200\n\tSO_REUSESHAREUID                        = 0x1025\n\tSO_SNDBUF                               = 0x1001\n\tSO_SNDLOWAT                             = 0x1003\n\tSO_SNDTIMEO                             = 0x1005\n\tSO_TIMESTAMP                            = 0x400\n\tSO_TIMESTAMP_MONOTONIC                  = 0x800\n\tSO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1\n\tSO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4\n\tSO_TRACKER_ATTRIBUTE_FLAGS_TRACKER      = 0x2\n\tSO_TRACKER_TRANSPARENCY_VERSION         = 0x3\n\tSO_TYPE                                 = 0x1008\n\tSO_UPCALLCLOSEWAIT                      = 0x1027\n\tSO_USELOOPBACK                          = 0x40\n\tSO_WANTMORE                             = 0x4000\n\tSO_WANTOOBFLAG                          = 0x8000\n\tS_IEXEC                                 = 0x40\n\tS_IFBLK                                 = 0x6000\n\tS_IFCHR                                 = 0x2000\n\tS_IFDIR                                 = 0x4000\n\tS_IFIFO                                 = 0x1000\n\tS_IFLNK                                 = 0xa000\n\tS_IFMT                                  = 0xf000\n\tS_IFREG                                 = 0x8000\n\tS_IFSOCK                                = 0xc000\n\tS_IFWHT                                 = 0xe000\n\tS_IREAD                                 = 0x100\n\tS_IRGRP                                 = 0x20\n\tS_IROTH                                 = 0x4\n\tS_IRUSR                                 = 0x100\n\tS_IRWXG                                 = 0x38\n\tS_IRWXO                                 = 0x7\n\tS_IRWXU                                 = 0x1c0\n\tS_ISGID                                 = 0x400\n\tS_ISTXT                                 = 0x200\n\tS_ISUID                                 = 0x800\n\tS_ISVTX                                 = 0x200\n\tS_IWGRP                                 = 0x10\n\tS_IWOTH                                 = 0x2\n\tS_IWRITE                                = 0x80\n\tS_IWUSR                                 = 0x80\n\tS_IXGRP                                 = 0x8\n\tS_IXOTH                                 = 0x1\n\tS_IXUSR                                 = 0x40\n\tTAB0                                    = 0x0\n\tTAB1                                    = 0x400\n\tTAB2                                    = 0x800\n\tTAB3                                    = 0x4\n\tTABDLY                                  = 0xc04\n\tTCIFLUSH                                = 0x1\n\tTCIOFF                                  = 0x3\n\tTCIOFLUSH                               = 0x3\n\tTCION                                   = 0x4\n\tTCOFLUSH                                = 0x2\n\tTCOOFF                                  = 0x1\n\tTCOON                                   = 0x2\n\tTCPOPT_CC                               = 0xb\n\tTCPOPT_CCECHO                           = 0xd\n\tTCPOPT_CCNEW                            = 0xc\n\tTCPOPT_EOL                              = 0x0\n\tTCPOPT_FASTOPEN                         = 0x22\n\tTCPOPT_MAXSEG                           = 0x2\n\tTCPOPT_NOP                              = 0x1\n\tTCPOPT_SACK                             = 0x5\n\tTCPOPT_SACK_HDR                         = 0x1010500\n\tTCPOPT_SACK_PERMITTED                   = 0x4\n\tTCPOPT_SACK_PERMIT_HDR                  = 0x1010402\n\tTCPOPT_SIGNATURE                        = 0x13\n\tTCPOPT_TIMESTAMP                        = 0x8\n\tTCPOPT_TSTAMP_HDR                       = 0x101080a\n\tTCPOPT_WINDOW                           = 0x3\n\tTCP_CONNECTIONTIMEOUT                   = 0x20\n\tTCP_CONNECTION_INFO                     = 0x106\n\tTCP_ENABLE_ECN                          = 0x104\n\tTCP_FASTOPEN                            = 0x105\n\tTCP_KEEPALIVE                           = 0x10\n\tTCP_KEEPCNT                             = 0x102\n\tTCP_KEEPINTVL                           = 0x101\n\tTCP_MAXHLEN                             = 0x3c\n\tTCP_MAXOLEN                             = 0x28\n\tTCP_MAXSEG                              = 0x2\n\tTCP_MAXWIN                              = 0xffff\n\tTCP_MAX_SACK                            = 0x4\n\tTCP_MAX_WINSHIFT                        = 0xe\n\tTCP_MINMSS                              = 0xd8\n\tTCP_MSS                                 = 0x200\n\tTCP_NODELAY                             = 0x1\n\tTCP_NOOPT                               = 0x8\n\tTCP_NOPUSH                              = 0x4\n\tTCP_NOTSENT_LOWAT                       = 0x201\n\tTCP_RXT_CONNDROPTIME                    = 0x80\n\tTCP_RXT_FINDROP                         = 0x100\n\tTCP_SENDMOREACKS                        = 0x103\n\tTCSAFLUSH                               = 0x2\n\tTIOCCBRK                                = 0x2000747a\n\tTIOCCDTR                                = 0x20007478\n\tTIOCCONS                                = 0x80047462\n\tTIOCDCDTIMESTAMP                        = 0x40107458\n\tTIOCDRAIN                               = 0x2000745e\n\tTIOCDSIMICROCODE                        = 0x20007455\n\tTIOCEXCL                                = 0x2000740d\n\tTIOCEXT                                 = 0x80047460\n\tTIOCFLUSH                               = 0x80047410\n\tTIOCGDRAINWAIT                          = 0x40047456\n\tTIOCGETA                                = 0x40487413\n\tTIOCGETD                                = 0x4004741a\n\tTIOCGPGRP                               = 0x40047477\n\tTIOCGWINSZ                              = 0x40087468\n\tTIOCIXOFF                               = 0x20007480\n\tTIOCIXON                                = 0x20007481\n\tTIOCMBIC                                = 0x8004746b\n\tTIOCMBIS                                = 0x8004746c\n\tTIOCMGDTRWAIT                           = 0x4004745a\n\tTIOCMGET                                = 0x4004746a\n\tTIOCMODG                                = 0x40047403\n\tTIOCMODS                                = 0x80047404\n\tTIOCMSDTRWAIT                           = 0x8004745b\n\tTIOCMSET                                = 0x8004746d\n\tTIOCM_CAR                               = 0x40\n\tTIOCM_CD                                = 0x40\n\tTIOCM_CTS                               = 0x20\n\tTIOCM_DSR                               = 0x100\n\tTIOCM_DTR                               = 0x2\n\tTIOCM_LE                                = 0x1\n\tTIOCM_RI                                = 0x80\n\tTIOCM_RNG                               = 0x80\n\tTIOCM_RTS                               = 0x4\n\tTIOCM_SR                                = 0x10\n\tTIOCM_ST                                = 0x8\n\tTIOCNOTTY                               = 0x20007471\n\tTIOCNXCL                                = 0x2000740e\n\tTIOCOUTQ                                = 0x40047473\n\tTIOCPKT                                 = 0x80047470\n\tTIOCPKT_DATA                            = 0x0\n\tTIOCPKT_DOSTOP                          = 0x20\n\tTIOCPKT_FLUSHREAD                       = 0x1\n\tTIOCPKT_FLUSHWRITE                      = 0x2\n\tTIOCPKT_IOCTL                           = 0x40\n\tTIOCPKT_NOSTOP                          = 0x10\n\tTIOCPKT_START                           = 0x8\n\tTIOCPKT_STOP                            = 0x4\n\tTIOCPTYGNAME                            = 0x40807453\n\tTIOCPTYGRANT                            = 0x20007454\n\tTIOCPTYUNLK                             = 0x20007452\n\tTIOCREMOTE                              = 0x80047469\n\tTIOCSBRK                                = 0x2000747b\n\tTIOCSCONS                               = 0x20007463\n\tTIOCSCTTY                               = 0x20007461\n\tTIOCSDRAINWAIT                          = 0x80047457\n\tTIOCSDTR                                = 0x20007479\n\tTIOCSETA                                = 0x80487414\n\tTIOCSETAF                               = 0x80487416\n\tTIOCSETAW                               = 0x80487415\n\tTIOCSETD                                = 0x8004741b\n\tTIOCSIG                                 = 0x2000745f\n\tTIOCSPGRP                               = 0x80047476\n\tTIOCSTART                               = 0x2000746e\n\tTIOCSTAT                                = 0x20007465\n\tTIOCSTI                                 = 0x80017472\n\tTIOCSTOP                                = 0x2000746f\n\tTIOCSWINSZ                              = 0x80087467\n\tTIOCTIMESTAMP                           = 0x40107459\n\tTIOCUCNTL                               = 0x80047466\n\tTOSTOP                                  = 0x400000\n\tUF_APPEND                               = 0x4\n\tUF_COMPRESSED                           = 0x20\n\tUF_DATAVAULT                            = 0x80\n\tUF_HIDDEN                               = 0x8000\n\tUF_IMMUTABLE                            = 0x2\n\tUF_NODUMP                               = 0x1\n\tUF_OPAQUE                               = 0x8\n\tUF_SETTABLE                             = 0xffff\n\tUF_TRACKED                              = 0x40\n\tVDISCARD                                = 0xf\n\tVDSUSP                                  = 0xb\n\tVEOF                                    = 0x0\n\tVEOL                                    = 0x1\n\tVEOL2                                   = 0x2\n\tVERASE                                  = 0x3\n\tVINTR                                   = 0x8\n\tVKILL                                   = 0x5\n\tVLNEXT                                  = 0xe\n\tVMADDR_CID_ANY                          = 0xffffffff\n\tVMADDR_CID_HOST                         = 0x2\n\tVMADDR_CID_HYPERVISOR                   = 0x0\n\tVMADDR_CID_RESERVED                     = 0x1\n\tVMADDR_PORT_ANY                         = 0xffffffff\n\tVMIN                                    = 0x10\n\tVM_LOADAVG                              = 0x2\n\tVM_MACHFACTOR                           = 0x4\n\tVM_MAXID                                = 0x6\n\tVM_METER                                = 0x1\n\tVM_SWAPUSAGE                            = 0x5\n\tVQUIT                                   = 0x9\n\tVREPRINT                                = 0x6\n\tVSTART                                  = 0xc\n\tVSTATUS                                 = 0x12\n\tVSTOP                                   = 0xd\n\tVSUSP                                   = 0xa\n\tVT0                                     = 0x0\n\tVT1                                     = 0x10000\n\tVTDLY                                   = 0x10000\n\tVTIME                                   = 0x11\n\tVWERASE                                 = 0x4\n\tWCONTINUED                              = 0x10\n\tWCOREFLAG                               = 0x80\n\tWEXITED                                 = 0x4\n\tWNOHANG                                 = 0x1\n\tWNOWAIT                                 = 0x20\n\tWORDSIZE                                = 0x40\n\tWSTOPPED                                = 0x8\n\tWUNTRACED                               = 0x2\n\tXATTR_CREATE                            = 0x2\n\tXATTR_NODEFAULT                         = 0x10\n\tXATTR_NOFOLLOW                          = 0x1\n\tXATTR_NOSECURITY                        = 0x8\n\tXATTR_REPLACE                           = 0x4\n\tXATTR_SHOWCOMPRESSION                   = 0x20\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADARCH        = syscall.Errno(0x56)\n\tEBADEXEC        = syscall.Errno(0x55)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMACHO       = syscall.Errno(0x58)\n\tEBADMSG         = syscall.Errno(0x5e)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x59)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDEVERR         = syscall.Errno(0x53)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x5a)\n\tEILSEQ          = syscall.Errno(0x5c)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x6a)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5f)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x60)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x61)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5b)\n\tENOPOLICY       = syscall.Errno(0x67)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x62)\n\tENOSTR          = syscall.Errno(0x63)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x68)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x66)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x69)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x64)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEPWROFF         = syscall.Errno(0x52)\n\tEQFULL          = syscall.Errno(0x6a)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHLIBVERS      = syscall.Errno(0x57)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x65)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EPWROFF\", \"device power is off\"},\n\t{83, \"EDEVERR\", \"device error\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EBADEXEC\", \"bad executable (or shared library)\"},\n\t{86, \"EBADARCH\", \"bad CPU type in executable\"},\n\t{87, \"ESHLIBVERS\", \"shared library version mismatch\"},\n\t{88, \"EBADMACHO\", \"malformed Mach-o file\"},\n\t{89, \"ECANCELED\", \"operation canceled\"},\n\t{90, \"EIDRM\", \"identifier removed\"},\n\t{91, \"ENOMSG\", \"no message of desired type\"},\n\t{92, \"EILSEQ\", \"illegal byte sequence\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EBADMSG\", \"bad message\"},\n\t{95, \"EMULTIHOP\", \"EMULTIHOP (Reserved)\"},\n\t{96, \"ENODATA\", \"no message available on STREAM\"},\n\t{97, \"ENOLINK\", \"ENOLINK (Reserved)\"},\n\t{98, \"ENOSR\", \"no STREAM resources\"},\n\t{99, \"ENOSTR\", \"not a STREAM\"},\n\t{100, \"EPROTO\", \"protocol error\"},\n\t{101, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{102, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{103, \"ENOPOLICY\", \"policy not found\"},\n\t{104, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{105, \"EOWNERDEAD\", \"previous owner died\"},\n\t{106, \"EQFULL\", \"interface output queue is full\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && darwin\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                            = 0x10\n\tAF_CCITT                                = 0xa\n\tAF_CHAOS                                = 0x5\n\tAF_CNT                                  = 0x15\n\tAF_COIP                                 = 0x14\n\tAF_DATAKIT                              = 0x9\n\tAF_DECnet                               = 0xc\n\tAF_DLI                                  = 0xd\n\tAF_E164                                 = 0x1c\n\tAF_ECMA                                 = 0x8\n\tAF_HYLINK                               = 0xf\n\tAF_IEEE80211                            = 0x25\n\tAF_IMPLINK                              = 0x3\n\tAF_INET                                 = 0x2\n\tAF_INET6                                = 0x1e\n\tAF_IPX                                  = 0x17\n\tAF_ISDN                                 = 0x1c\n\tAF_ISO                                  = 0x7\n\tAF_LAT                                  = 0xe\n\tAF_LINK                                 = 0x12\n\tAF_LOCAL                                = 0x1\n\tAF_MAX                                  = 0x29\n\tAF_NATM                                 = 0x1f\n\tAF_NDRV                                 = 0x1b\n\tAF_NETBIOS                              = 0x21\n\tAF_NS                                   = 0x6\n\tAF_OSI                                  = 0x7\n\tAF_PPP                                  = 0x22\n\tAF_PUP                                  = 0x4\n\tAF_RESERVED_36                          = 0x24\n\tAF_ROUTE                                = 0x11\n\tAF_SIP                                  = 0x18\n\tAF_SNA                                  = 0xb\n\tAF_SYSTEM                               = 0x20\n\tAF_SYS_CONTROL                          = 0x2\n\tAF_UNIX                                 = 0x1\n\tAF_UNSPEC                               = 0x0\n\tAF_UTUN                                 = 0x26\n\tAF_VSOCK                                = 0x28\n\tALTWERASE                               = 0x200\n\tATTR_BIT_MAP_COUNT                      = 0x5\n\tATTR_CMN_ACCESSMASK                     = 0x20000\n\tATTR_CMN_ACCTIME                        = 0x1000\n\tATTR_CMN_ADDEDTIME                      = 0x10000000\n\tATTR_CMN_BKUPTIME                       = 0x2000\n\tATTR_CMN_CHGTIME                        = 0x800\n\tATTR_CMN_CRTIME                         = 0x200\n\tATTR_CMN_DATA_PROTECT_FLAGS             = 0x40000000\n\tATTR_CMN_DEVID                          = 0x2\n\tATTR_CMN_DOCUMENT_ID                    = 0x100000\n\tATTR_CMN_ERROR                          = 0x20000000\n\tATTR_CMN_EXTENDED_SECURITY              = 0x400000\n\tATTR_CMN_FILEID                         = 0x2000000\n\tATTR_CMN_FLAGS                          = 0x40000\n\tATTR_CMN_FNDRINFO                       = 0x4000\n\tATTR_CMN_FSID                           = 0x4\n\tATTR_CMN_FULLPATH                       = 0x8000000\n\tATTR_CMN_GEN_COUNT                      = 0x80000\n\tATTR_CMN_GRPID                          = 0x10000\n\tATTR_CMN_GRPUUID                        = 0x1000000\n\tATTR_CMN_MODTIME                        = 0x400\n\tATTR_CMN_NAME                           = 0x1\n\tATTR_CMN_NAMEDATTRCOUNT                 = 0x80000\n\tATTR_CMN_NAMEDATTRLIST                  = 0x100000\n\tATTR_CMN_OBJID                          = 0x20\n\tATTR_CMN_OBJPERMANENTID                 = 0x40\n\tATTR_CMN_OBJTAG                         = 0x10\n\tATTR_CMN_OBJTYPE                        = 0x8\n\tATTR_CMN_OWNERID                        = 0x8000\n\tATTR_CMN_PARENTID                       = 0x4000000\n\tATTR_CMN_PAROBJID                       = 0x80\n\tATTR_CMN_RETURNED_ATTRS                 = 0x80000000\n\tATTR_CMN_SCRIPT                         = 0x100\n\tATTR_CMN_SETMASK                        = 0x51c7ff00\n\tATTR_CMN_USERACCESS                     = 0x200000\n\tATTR_CMN_UUID                           = 0x800000\n\tATTR_CMN_VALIDMASK                      = 0xffffffff\n\tATTR_CMN_VOLSETMASK                     = 0x6700\n\tATTR_FILE_ALLOCSIZE                     = 0x4\n\tATTR_FILE_CLUMPSIZE                     = 0x10\n\tATTR_FILE_DATAALLOCSIZE                 = 0x400\n\tATTR_FILE_DATAEXTENTS                   = 0x800\n\tATTR_FILE_DATALENGTH                    = 0x200\n\tATTR_FILE_DEVTYPE                       = 0x20\n\tATTR_FILE_FILETYPE                      = 0x40\n\tATTR_FILE_FORKCOUNT                     = 0x80\n\tATTR_FILE_FORKLIST                      = 0x100\n\tATTR_FILE_IOBLOCKSIZE                   = 0x8\n\tATTR_FILE_LINKCOUNT                     = 0x1\n\tATTR_FILE_RSRCALLOCSIZE                 = 0x2000\n\tATTR_FILE_RSRCEXTENTS                   = 0x4000\n\tATTR_FILE_RSRCLENGTH                    = 0x1000\n\tATTR_FILE_SETMASK                       = 0x20\n\tATTR_FILE_TOTALSIZE                     = 0x2\n\tATTR_FILE_VALIDMASK                     = 0x37ff\n\tATTR_VOL_ALLOCATIONCLUMP                = 0x40\n\tATTR_VOL_ATTRIBUTES                     = 0x40000000\n\tATTR_VOL_CAPABILITIES                   = 0x20000\n\tATTR_VOL_DIRCOUNT                       = 0x400\n\tATTR_VOL_ENCODINGSUSED                  = 0x10000\n\tATTR_VOL_FILECOUNT                      = 0x200\n\tATTR_VOL_FSTYPE                         = 0x1\n\tATTR_VOL_INFO                           = 0x80000000\n\tATTR_VOL_IOBLOCKSIZE                    = 0x80\n\tATTR_VOL_MAXOBJCOUNT                    = 0x800\n\tATTR_VOL_MINALLOCATION                  = 0x20\n\tATTR_VOL_MOUNTEDDEVICE                  = 0x8000\n\tATTR_VOL_MOUNTFLAGS                     = 0x4000\n\tATTR_VOL_MOUNTPOINT                     = 0x1000\n\tATTR_VOL_NAME                           = 0x2000\n\tATTR_VOL_OBJCOUNT                       = 0x100\n\tATTR_VOL_QUOTA_SIZE                     = 0x10000000\n\tATTR_VOL_RESERVED_SIZE                  = 0x20000000\n\tATTR_VOL_SETMASK                        = 0x80002000\n\tATTR_VOL_SIGNATURE                      = 0x2\n\tATTR_VOL_SIZE                           = 0x4\n\tATTR_VOL_SPACEAVAIL                     = 0x10\n\tATTR_VOL_SPACEFREE                      = 0x8\n\tATTR_VOL_SPACEUSED                      = 0x800000\n\tATTR_VOL_UUID                           = 0x40000\n\tATTR_VOL_VALIDMASK                      = 0xf087ffff\n\tB0                                      = 0x0\n\tB110                                    = 0x6e\n\tB115200                                 = 0x1c200\n\tB1200                                   = 0x4b0\n\tB134                                    = 0x86\n\tB14400                                  = 0x3840\n\tB150                                    = 0x96\n\tB1800                                   = 0x708\n\tB19200                                  = 0x4b00\n\tB200                                    = 0xc8\n\tB230400                                 = 0x38400\n\tB2400                                   = 0x960\n\tB28800                                  = 0x7080\n\tB300                                    = 0x12c\n\tB38400                                  = 0x9600\n\tB4800                                   = 0x12c0\n\tB50                                     = 0x32\n\tB57600                                  = 0xe100\n\tB600                                    = 0x258\n\tB7200                                   = 0x1c20\n\tB75                                     = 0x4b\n\tB76800                                  = 0x12c00\n\tB9600                                   = 0x2580\n\tBIOCFLUSH                               = 0x20004268\n\tBIOCGBLEN                               = 0x40044266\n\tBIOCGDLT                                = 0x4004426a\n\tBIOCGDLTLIST                            = 0xc00c4279\n\tBIOCGETIF                               = 0x4020426b\n\tBIOCGHDRCMPLT                           = 0x40044274\n\tBIOCGRSIG                               = 0x40044272\n\tBIOCGRTIMEOUT                           = 0x4010426e\n\tBIOCGSEESENT                            = 0x40044276\n\tBIOCGSTATS                              = 0x4008426f\n\tBIOCIMMEDIATE                           = 0x80044270\n\tBIOCPROMISC                             = 0x20004269\n\tBIOCSBLEN                               = 0xc0044266\n\tBIOCSDLT                                = 0x80044278\n\tBIOCSETF                                = 0x80104267\n\tBIOCSETFNR                              = 0x8010427e\n\tBIOCSETIF                               = 0x8020426c\n\tBIOCSHDRCMPLT                           = 0x80044275\n\tBIOCSRSIG                               = 0x80044273\n\tBIOCSRTIMEOUT                           = 0x8010426d\n\tBIOCSSEESENT                            = 0x80044277\n\tBIOCVERSION                             = 0x40044271\n\tBPF_A                                   = 0x10\n\tBPF_ABS                                 = 0x20\n\tBPF_ADD                                 = 0x0\n\tBPF_ALIGNMENT                           = 0x4\n\tBPF_ALU                                 = 0x4\n\tBPF_AND                                 = 0x50\n\tBPF_B                                   = 0x10\n\tBPF_DIV                                 = 0x30\n\tBPF_H                                   = 0x8\n\tBPF_IMM                                 = 0x0\n\tBPF_IND                                 = 0x40\n\tBPF_JA                                  = 0x0\n\tBPF_JEQ                                 = 0x10\n\tBPF_JGE                                 = 0x30\n\tBPF_JGT                                 = 0x20\n\tBPF_JMP                                 = 0x5\n\tBPF_JSET                                = 0x40\n\tBPF_K                                   = 0x0\n\tBPF_LD                                  = 0x0\n\tBPF_LDX                                 = 0x1\n\tBPF_LEN                                 = 0x80\n\tBPF_LSH                                 = 0x60\n\tBPF_MAJOR_VERSION                       = 0x1\n\tBPF_MAXBUFSIZE                          = 0x80000\n\tBPF_MAXINSNS                            = 0x200\n\tBPF_MEM                                 = 0x60\n\tBPF_MEMWORDS                            = 0x10\n\tBPF_MINBUFSIZE                          = 0x20\n\tBPF_MINOR_VERSION                       = 0x1\n\tBPF_MISC                                = 0x7\n\tBPF_MSH                                 = 0xa0\n\tBPF_MUL                                 = 0x20\n\tBPF_NEG                                 = 0x80\n\tBPF_OR                                  = 0x40\n\tBPF_RELEASE                             = 0x30bb6\n\tBPF_RET                                 = 0x6\n\tBPF_RSH                                 = 0x70\n\tBPF_ST                                  = 0x2\n\tBPF_STX                                 = 0x3\n\tBPF_SUB                                 = 0x10\n\tBPF_TAX                                 = 0x0\n\tBPF_TXA                                 = 0x80\n\tBPF_W                                   = 0x0\n\tBPF_X                                   = 0x8\n\tBRKINT                                  = 0x2\n\tBS0                                     = 0x0\n\tBS1                                     = 0x8000\n\tBSDLY                                   = 0x8000\n\tCFLUSH                                  = 0xf\n\tCLOCAL                                  = 0x8000\n\tCLOCK_MONOTONIC                         = 0x6\n\tCLOCK_MONOTONIC_RAW                     = 0x4\n\tCLOCK_MONOTONIC_RAW_APPROX              = 0x5\n\tCLOCK_PROCESS_CPUTIME_ID                = 0xc\n\tCLOCK_REALTIME                          = 0x0\n\tCLOCK_THREAD_CPUTIME_ID                 = 0x10\n\tCLOCK_UPTIME_RAW                        = 0x8\n\tCLOCK_UPTIME_RAW_APPROX                 = 0x9\n\tCLONE_NOFOLLOW                          = 0x1\n\tCLONE_NOOWNERCOPY                       = 0x2\n\tCONNECT_DATA_AUTHENTICATED              = 0x4\n\tCONNECT_DATA_IDEMPOTENT                 = 0x2\n\tCONNECT_RESUME_ON_READ_WRITE            = 0x1\n\tCR0                                     = 0x0\n\tCR1                                     = 0x1000\n\tCR2                                     = 0x2000\n\tCR3                                     = 0x3000\n\tCRDLY                                   = 0x3000\n\tCREAD                                   = 0x800\n\tCRTSCTS                                 = 0x30000\n\tCS5                                     = 0x0\n\tCS6                                     = 0x100\n\tCS7                                     = 0x200\n\tCS8                                     = 0x300\n\tCSIZE                                   = 0x300\n\tCSTART                                  = 0x11\n\tCSTATUS                                 = 0x14\n\tCSTOP                                   = 0x13\n\tCSTOPB                                  = 0x400\n\tCSUSP                                   = 0x1a\n\tCTLIOCGINFO                             = 0xc0644e03\n\tCTL_HW                                  = 0x6\n\tCTL_KERN                                = 0x1\n\tCTL_MAXNAME                             = 0xc\n\tCTL_NET                                 = 0x4\n\tDLT_A429                                = 0xb8\n\tDLT_A653_ICM                            = 0xb9\n\tDLT_AIRONET_HEADER                      = 0x78\n\tDLT_AOS                                 = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394              = 0x8a\n\tDLT_ARCNET                              = 0x7\n\tDLT_ARCNET_LINUX                        = 0x81\n\tDLT_ATM_CLIP                            = 0x13\n\tDLT_ATM_RFC1483                         = 0xb\n\tDLT_AURORA                              = 0x7e\n\tDLT_AX25                                = 0x3\n\tDLT_AX25_KISS                           = 0xca\n\tDLT_BACNET_MS_TP                        = 0xa5\n\tDLT_BLUETOOTH_HCI_H4                    = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR          = 0xc9\n\tDLT_CAN20B                              = 0xbe\n\tDLT_CAN_SOCKETCAN                       = 0xe3\n\tDLT_CHAOS                               = 0x5\n\tDLT_CHDLC                               = 0x68\n\tDLT_CISCO_IOS                           = 0x76\n\tDLT_C_HDLC                              = 0x68\n\tDLT_C_HDLC_WITH_DIR                     = 0xcd\n\tDLT_DBUS                                = 0xe7\n\tDLT_DECT                                = 0xdd\n\tDLT_DOCSIS                              = 0x8f\n\tDLT_DVB_CI                              = 0xeb\n\tDLT_ECONET                              = 0x73\n\tDLT_EN10MB                              = 0x1\n\tDLT_EN3MB                               = 0x2\n\tDLT_ENC                                 = 0x6d\n\tDLT_ERF                                 = 0xc5\n\tDLT_ERF_ETH                             = 0xaf\n\tDLT_ERF_POS                             = 0xb0\n\tDLT_FC_2                                = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS              = 0xe1\n\tDLT_FDDI                                = 0xa\n\tDLT_FLEXRAY                             = 0xd2\n\tDLT_FRELAY                              = 0x6b\n\tDLT_FRELAY_WITH_DIR                     = 0xce\n\tDLT_GCOM_SERIAL                         = 0xad\n\tDLT_GCOM_T1E1                           = 0xac\n\tDLT_GPF_F                               = 0xab\n\tDLT_GPF_T                               = 0xaa\n\tDLT_GPRS_LLC                            = 0xa9\n\tDLT_GSMTAP_ABIS                         = 0xda\n\tDLT_GSMTAP_UM                           = 0xd9\n\tDLT_HHDLC                               = 0x79\n\tDLT_IBM_SN                              = 0x92\n\tDLT_IBM_SP                              = 0x91\n\tDLT_IEEE802                             = 0x6\n\tDLT_IEEE802_11                          = 0x69\n\tDLT_IEEE802_11_RADIO                    = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS                = 0xa3\n\tDLT_IEEE802_15_4                        = 0xc3\n\tDLT_IEEE802_15_4_LINUX                  = 0xbf\n\tDLT_IEEE802_15_4_NOFCS                  = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY             = 0xd7\n\tDLT_IEEE802_16_MAC_CPS                  = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO            = 0xc1\n\tDLT_IPFILTER                            = 0x74\n\tDLT_IPMB                                = 0xc7\n\tDLT_IPMB_LINUX                          = 0xd1\n\tDLT_IPNET                               = 0xe2\n\tDLT_IPOIB                               = 0xf2\n\tDLT_IPV4                                = 0xe4\n\tDLT_IPV6                                = 0xe5\n\tDLT_IP_OVER_FC                          = 0x7a\n\tDLT_JUNIPER_ATM1                        = 0x89\n\tDLT_JUNIPER_ATM2                        = 0x87\n\tDLT_JUNIPER_ATM_CEMIC                   = 0xee\n\tDLT_JUNIPER_CHDLC                       = 0xb5\n\tDLT_JUNIPER_ES                          = 0x84\n\tDLT_JUNIPER_ETHER                       = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL                = 0xea\n\tDLT_JUNIPER_FRELAY                      = 0xb4\n\tDLT_JUNIPER_GGSN                        = 0x85\n\tDLT_JUNIPER_ISM                         = 0xc2\n\tDLT_JUNIPER_MFR                         = 0x86\n\tDLT_JUNIPER_MLFR                        = 0x83\n\tDLT_JUNIPER_MLPPP                       = 0x82\n\tDLT_JUNIPER_MONITOR                     = 0xa4\n\tDLT_JUNIPER_PIC_PEER                    = 0xae\n\tDLT_JUNIPER_PPP                         = 0xb3\n\tDLT_JUNIPER_PPPOE                       = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM                   = 0xa8\n\tDLT_JUNIPER_SERVICES                    = 0x88\n\tDLT_JUNIPER_SRX_E2E                     = 0xe9\n\tDLT_JUNIPER_ST                          = 0xc8\n\tDLT_JUNIPER_VP                          = 0xb7\n\tDLT_JUNIPER_VS                          = 0xe8\n\tDLT_LAPB_WITH_DIR                       = 0xcf\n\tDLT_LAPD                                = 0xcb\n\tDLT_LIN                                 = 0xd4\n\tDLT_LINUX_EVDEV                         = 0xd8\n\tDLT_LINUX_IRDA                          = 0x90\n\tDLT_LINUX_LAPD                          = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION             = 0xa6\n\tDLT_LINUX_SLL                           = 0x71\n\tDLT_LOOP                                = 0x6c\n\tDLT_LTALK                               = 0x72\n\tDLT_MATCHING_MAX                        = 0x10a\n\tDLT_MATCHING_MIN                        = 0x68\n\tDLT_MFR                                 = 0xb6\n\tDLT_MOST                                = 0xd3\n\tDLT_MPEG_2_TS                           = 0xf3\n\tDLT_MPLS                                = 0xdb\n\tDLT_MTP2                                = 0x8c\n\tDLT_MTP2_WITH_PHDR                      = 0x8b\n\tDLT_MTP3                                = 0x8d\n\tDLT_MUX27010                            = 0xec\n\tDLT_NETANALYZER                         = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT             = 0xf1\n\tDLT_NFC_LLCP                            = 0xf5\n\tDLT_NFLOG                               = 0xef\n\tDLT_NG40                                = 0xf4\n\tDLT_NULL                                = 0x0\n\tDLT_PCI_EXP                             = 0x7d\n\tDLT_PFLOG                               = 0x75\n\tDLT_PFSYNC                              = 0x12\n\tDLT_PPI                                 = 0xc0\n\tDLT_PPP                                 = 0x9\n\tDLT_PPP_BSDOS                           = 0x10\n\tDLT_PPP_ETHER                           = 0x33\n\tDLT_PPP_PPPD                            = 0xa6\n\tDLT_PPP_SERIAL                          = 0x32\n\tDLT_PPP_WITH_DIR                        = 0xcc\n\tDLT_PPP_WITH_DIRECTION                  = 0xa6\n\tDLT_PRISM_HEADER                        = 0x77\n\tDLT_PRONET                              = 0x4\n\tDLT_RAIF1                               = 0xc6\n\tDLT_RAW                                 = 0xc\n\tDLT_RIO                                 = 0x7c\n\tDLT_SCCP                                = 0x8e\n\tDLT_SITA                                = 0xc4\n\tDLT_SLIP                                = 0x8\n\tDLT_SLIP_BSDOS                          = 0xf\n\tDLT_STANAG_5066_D_PDU                   = 0xed\n\tDLT_SUNATM                              = 0x7b\n\tDLT_SYMANTEC_FIREWALL                   = 0x63\n\tDLT_TZSP                                = 0x80\n\tDLT_USB                                 = 0xba\n\tDLT_USB_DARWIN                          = 0x10a\n\tDLT_USB_LINUX                           = 0xbd\n\tDLT_USB_LINUX_MMAPPED                   = 0xdc\n\tDLT_USER0                               = 0x93\n\tDLT_USER1                               = 0x94\n\tDLT_USER10                              = 0x9d\n\tDLT_USER11                              = 0x9e\n\tDLT_USER12                              = 0x9f\n\tDLT_USER13                              = 0xa0\n\tDLT_USER14                              = 0xa1\n\tDLT_USER15                              = 0xa2\n\tDLT_USER2                               = 0x95\n\tDLT_USER3                               = 0x96\n\tDLT_USER4                               = 0x97\n\tDLT_USER5                               = 0x98\n\tDLT_USER6                               = 0x99\n\tDLT_USER7                               = 0x9a\n\tDLT_USER8                               = 0x9b\n\tDLT_USER9                               = 0x9c\n\tDLT_WIHART                              = 0xdf\n\tDLT_X2E_SERIAL                          = 0xd5\n\tDLT_X2E_XORAYA                          = 0xd6\n\tDT_BLK                                  = 0x6\n\tDT_CHR                                  = 0x2\n\tDT_DIR                                  = 0x4\n\tDT_FIFO                                 = 0x1\n\tDT_LNK                                  = 0xa\n\tDT_REG                                  = 0x8\n\tDT_SOCK                                 = 0xc\n\tDT_UNKNOWN                              = 0x0\n\tDT_WHT                                  = 0xe\n\tECHO                                    = 0x8\n\tECHOCTL                                 = 0x40\n\tECHOE                                   = 0x2\n\tECHOK                                   = 0x4\n\tECHOKE                                  = 0x1\n\tECHONL                                  = 0x10\n\tECHOPRT                                 = 0x20\n\tEVFILT_AIO                              = -0x3\n\tEVFILT_EXCEPT                           = -0xf\n\tEVFILT_FS                               = -0x9\n\tEVFILT_MACHPORT                         = -0x8\n\tEVFILT_PROC                             = -0x5\n\tEVFILT_READ                             = -0x1\n\tEVFILT_SIGNAL                           = -0x6\n\tEVFILT_SYSCOUNT                         = 0x11\n\tEVFILT_THREADMARKER                     = 0x11\n\tEVFILT_TIMER                            = -0x7\n\tEVFILT_USER                             = -0xa\n\tEVFILT_VM                               = -0xc\n\tEVFILT_VNODE                            = -0x4\n\tEVFILT_WRITE                            = -0x2\n\tEV_ADD                                  = 0x1\n\tEV_CLEAR                                = 0x20\n\tEV_DELETE                               = 0x2\n\tEV_DISABLE                              = 0x8\n\tEV_DISPATCH                             = 0x80\n\tEV_DISPATCH2                            = 0x180\n\tEV_ENABLE                               = 0x4\n\tEV_EOF                                  = 0x8000\n\tEV_ERROR                                = 0x4000\n\tEV_FLAG0                                = 0x1000\n\tEV_FLAG1                                = 0x2000\n\tEV_ONESHOT                              = 0x10\n\tEV_OOBAND                               = 0x2000\n\tEV_POLL                                 = 0x1000\n\tEV_RECEIPT                              = 0x40\n\tEV_SYSFLAGS                             = 0xf000\n\tEV_UDATA_SPECIFIC                       = 0x100\n\tEV_VANISHED                             = 0x200\n\tEXTA                                    = 0x4b00\n\tEXTB                                    = 0x9600\n\tEXTPROC                                 = 0x800\n\tFD_CLOEXEC                              = 0x1\n\tFD_SETSIZE                              = 0x400\n\tFF0                                     = 0x0\n\tFF1                                     = 0x4000\n\tFFDLY                                   = 0x4000\n\tFLUSHO                                  = 0x800000\n\tFSOPT_ATTR_CMN_EXTENDED                 = 0x20\n\tFSOPT_NOFOLLOW                          = 0x1\n\tFSOPT_NOINMEMUPDATE                     = 0x2\n\tFSOPT_PACK_INVAL_ATTRS                  = 0x8\n\tFSOPT_REPORT_FULLSIZE                   = 0x4\n\tFSOPT_RETURN_REALDEV                    = 0x200\n\tF_ADDFILESIGS                           = 0x3d\n\tF_ADDFILESIGS_FOR_DYLD_SIM              = 0x53\n\tF_ADDFILESIGS_INFO                      = 0x67\n\tF_ADDFILESIGS_RETURN                    = 0x61\n\tF_ADDFILESUPPL                          = 0x68\n\tF_ADDSIGS                               = 0x3b\n\tF_ALLOCATEALL                           = 0x4\n\tF_ALLOCATECONTIG                        = 0x2\n\tF_BARRIERFSYNC                          = 0x55\n\tF_CHECK_LV                              = 0x62\n\tF_CHKCLEAN                              = 0x29\n\tF_DUPFD                                 = 0x0\n\tF_DUPFD_CLOEXEC                         = 0x43\n\tF_FINDSIGS                              = 0x4e\n\tF_FLUSH_DATA                            = 0x28\n\tF_FREEZE_FS                             = 0x35\n\tF_FULLFSYNC                             = 0x33\n\tF_GETCODEDIR                            = 0x48\n\tF_GETFD                                 = 0x1\n\tF_GETFL                                 = 0x3\n\tF_GETLK                                 = 0x7\n\tF_GETLKPID                              = 0x42\n\tF_GETNOSIGPIPE                          = 0x4a\n\tF_GETOWN                                = 0x5\n\tF_GETPATH                               = 0x32\n\tF_GETPATH_MTMINFO                       = 0x47\n\tF_GETPATH_NOFIRMLINK                    = 0x66\n\tF_GETPROTECTIONCLASS                    = 0x3f\n\tF_GETPROTECTIONLEVEL                    = 0x4d\n\tF_GETSIGSINFO                           = 0x69\n\tF_GLOBAL_NOCACHE                        = 0x37\n\tF_LOG2PHYS                              = 0x31\n\tF_LOG2PHYS_EXT                          = 0x41\n\tF_NOCACHE                               = 0x30\n\tF_NODIRECT                              = 0x3e\n\tF_OK                                    = 0x0\n\tF_PATHPKG_CHECK                         = 0x34\n\tF_PEOFPOSMODE                           = 0x3\n\tF_PREALLOCATE                           = 0x2a\n\tF_PUNCHHOLE                             = 0x63\n\tF_RDADVISE                              = 0x2c\n\tF_RDAHEAD                               = 0x2d\n\tF_RDLCK                                 = 0x1\n\tF_SETBACKINGSTORE                       = 0x46\n\tF_SETFD                                 = 0x2\n\tF_SETFL                                 = 0x4\n\tF_SETLK                                 = 0x8\n\tF_SETLKW                                = 0x9\n\tF_SETLKWTIMEOUT                         = 0xa\n\tF_SETNOSIGPIPE                          = 0x49\n\tF_SETOWN                                = 0x6\n\tF_SETPROTECTIONCLASS                    = 0x40\n\tF_SETSIZE                               = 0x2b\n\tF_SINGLE_WRITER                         = 0x4c\n\tF_SPECULATIVE_READ                      = 0x65\n\tF_THAW_FS                               = 0x36\n\tF_TRANSCODEKEY                          = 0x4b\n\tF_TRIM_ACTIVE_FILE                      = 0x64\n\tF_UNLCK                                 = 0x2\n\tF_VOLPOSMODE                            = 0x4\n\tF_WRLCK                                 = 0x3\n\tHUPCL                                   = 0x4000\n\tHW_MACHINE                              = 0x1\n\tICANON                                  = 0x100\n\tICMP6_FILTER                            = 0x12\n\tICRNL                                   = 0x100\n\tIEXTEN                                  = 0x400\n\tIFF_ALLMULTI                            = 0x200\n\tIFF_ALTPHYS                             = 0x4000\n\tIFF_BROADCAST                           = 0x2\n\tIFF_DEBUG                               = 0x4\n\tIFF_LINK0                               = 0x1000\n\tIFF_LINK1                               = 0x2000\n\tIFF_LINK2                               = 0x4000\n\tIFF_LOOPBACK                            = 0x8\n\tIFF_MULTICAST                           = 0x8000\n\tIFF_NOARP                               = 0x80\n\tIFF_NOTRAILERS                          = 0x20\n\tIFF_OACTIVE                             = 0x400\n\tIFF_POINTOPOINT                         = 0x10\n\tIFF_PROMISC                             = 0x100\n\tIFF_RUNNING                             = 0x40\n\tIFF_SIMPLEX                             = 0x800\n\tIFF_UP                                  = 0x1\n\tIFNAMSIZ                                = 0x10\n\tIFT_1822                                = 0x2\n\tIFT_6LOWPAN                             = 0x40\n\tIFT_AAL5                                = 0x31\n\tIFT_ARCNET                              = 0x23\n\tIFT_ARCNETPLUS                          = 0x24\n\tIFT_ATM                                 = 0x25\n\tIFT_BRIDGE                              = 0xd1\n\tIFT_CARP                                = 0xf8\n\tIFT_CELLULAR                            = 0xff\n\tIFT_CEPT                                = 0x13\n\tIFT_DS3                                 = 0x1e\n\tIFT_ENC                                 = 0xf4\n\tIFT_EON                                 = 0x19\n\tIFT_ETHER                               = 0x6\n\tIFT_FAITH                               = 0x38\n\tIFT_FDDI                                = 0xf\n\tIFT_FRELAY                              = 0x20\n\tIFT_FRELAYDCE                           = 0x2c\n\tIFT_GIF                                 = 0x37\n\tIFT_HDH1822                             = 0x3\n\tIFT_HIPPI                               = 0x2f\n\tIFT_HSSI                                = 0x2e\n\tIFT_HY                                  = 0xe\n\tIFT_IEEE1394                            = 0x90\n\tIFT_IEEE8023ADLAG                       = 0x88\n\tIFT_ISDNBASIC                           = 0x14\n\tIFT_ISDNPRIMARY                         = 0x15\n\tIFT_ISO88022LLC                         = 0x29\n\tIFT_ISO88023                            = 0x7\n\tIFT_ISO88024                            = 0x8\n\tIFT_ISO88025                            = 0x9\n\tIFT_ISO88026                            = 0xa\n\tIFT_L2VLAN                              = 0x87\n\tIFT_LAPB                                = 0x10\n\tIFT_LOCALTALK                           = 0x2a\n\tIFT_LOOP                                = 0x18\n\tIFT_MIOX25                              = 0x26\n\tIFT_MODEM                               = 0x30\n\tIFT_NSIP                                = 0x1b\n\tIFT_OTHER                               = 0x1\n\tIFT_P10                                 = 0xc\n\tIFT_P80                                 = 0xd\n\tIFT_PARA                                = 0x22\n\tIFT_PDP                                 = 0xff\n\tIFT_PFLOG                               = 0xf5\n\tIFT_PFSYNC                              = 0xf6\n\tIFT_PKTAP                               = 0xfe\n\tIFT_PPP                                 = 0x17\n\tIFT_PROPMUX                             = 0x36\n\tIFT_PROPVIRTUAL                         = 0x35\n\tIFT_PTPSERIAL                           = 0x16\n\tIFT_RS232                               = 0x21\n\tIFT_SDLC                                = 0x11\n\tIFT_SIP                                 = 0x1f\n\tIFT_SLIP                                = 0x1c\n\tIFT_SMDSDXI                             = 0x2b\n\tIFT_SMDSICIP                            = 0x34\n\tIFT_SONET                               = 0x27\n\tIFT_SONETPATH                           = 0x32\n\tIFT_SONETVT                             = 0x33\n\tIFT_STARLAN                             = 0xb\n\tIFT_STF                                 = 0x39\n\tIFT_T1                                  = 0x12\n\tIFT_ULTRA                               = 0x1d\n\tIFT_V35                                 = 0x2d\n\tIFT_X25                                 = 0x5\n\tIFT_X25DDN                              = 0x4\n\tIFT_X25PLE                              = 0x28\n\tIFT_XETHER                              = 0x1a\n\tIGNBRK                                  = 0x1\n\tIGNCR                                   = 0x80\n\tIGNPAR                                  = 0x4\n\tIMAXBEL                                 = 0x2000\n\tINLCR                                   = 0x40\n\tINPCK                                   = 0x10\n\tIN_CLASSA_HOST                          = 0xffffff\n\tIN_CLASSA_MAX                           = 0x80\n\tIN_CLASSA_NET                           = 0xff000000\n\tIN_CLASSA_NSHIFT                        = 0x18\n\tIN_CLASSB_HOST                          = 0xffff\n\tIN_CLASSB_MAX                           = 0x10000\n\tIN_CLASSB_NET                           = 0xffff0000\n\tIN_CLASSB_NSHIFT                        = 0x10\n\tIN_CLASSC_HOST                          = 0xff\n\tIN_CLASSC_NET                           = 0xffffff00\n\tIN_CLASSC_NSHIFT                        = 0x8\n\tIN_CLASSD_HOST                          = 0xfffffff\n\tIN_CLASSD_NET                           = 0xf0000000\n\tIN_CLASSD_NSHIFT                        = 0x1c\n\tIN_LINKLOCALNETNUM                      = 0xa9fe0000\n\tIN_LOOPBACKNET                          = 0x7f\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID          = 0x400473d1\n\tIPPROTO_3PC                             = 0x22\n\tIPPROTO_ADFS                            = 0x44\n\tIPPROTO_AH                              = 0x33\n\tIPPROTO_AHIP                            = 0x3d\n\tIPPROTO_APES                            = 0x63\n\tIPPROTO_ARGUS                           = 0xd\n\tIPPROTO_AX25                            = 0x5d\n\tIPPROTO_BHA                             = 0x31\n\tIPPROTO_BLT                             = 0x1e\n\tIPPROTO_BRSATMON                        = 0x4c\n\tIPPROTO_CFTP                            = 0x3e\n\tIPPROTO_CHAOS                           = 0x10\n\tIPPROTO_CMTP                            = 0x26\n\tIPPROTO_CPHB                            = 0x49\n\tIPPROTO_CPNX                            = 0x48\n\tIPPROTO_DDP                             = 0x25\n\tIPPROTO_DGP                             = 0x56\n\tIPPROTO_DIVERT                          = 0xfe\n\tIPPROTO_DONE                            = 0x101\n\tIPPROTO_DSTOPTS                         = 0x3c\n\tIPPROTO_EGP                             = 0x8\n\tIPPROTO_EMCON                           = 0xe\n\tIPPROTO_ENCAP                           = 0x62\n\tIPPROTO_EON                             = 0x50\n\tIPPROTO_ESP                             = 0x32\n\tIPPROTO_ETHERIP                         = 0x61\n\tIPPROTO_FRAGMENT                        = 0x2c\n\tIPPROTO_GGP                             = 0x3\n\tIPPROTO_GMTP                            = 0x64\n\tIPPROTO_GRE                             = 0x2f\n\tIPPROTO_HELLO                           = 0x3f\n\tIPPROTO_HMP                             = 0x14\n\tIPPROTO_HOPOPTS                         = 0x0\n\tIPPROTO_ICMP                            = 0x1\n\tIPPROTO_ICMPV6                          = 0x3a\n\tIPPROTO_IDP                             = 0x16\n\tIPPROTO_IDPR                            = 0x23\n\tIPPROTO_IDRP                            = 0x2d\n\tIPPROTO_IGMP                            = 0x2\n\tIPPROTO_IGP                             = 0x55\n\tIPPROTO_IGRP                            = 0x58\n\tIPPROTO_IL                              = 0x28\n\tIPPROTO_INLSP                           = 0x34\n\tIPPROTO_INP                             = 0x20\n\tIPPROTO_IP                              = 0x0\n\tIPPROTO_IPCOMP                          = 0x6c\n\tIPPROTO_IPCV                            = 0x47\n\tIPPROTO_IPEIP                           = 0x5e\n\tIPPROTO_IPIP                            = 0x4\n\tIPPROTO_IPPC                            = 0x43\n\tIPPROTO_IPV4                            = 0x4\n\tIPPROTO_IPV6                            = 0x29\n\tIPPROTO_IRTP                            = 0x1c\n\tIPPROTO_KRYPTOLAN                       = 0x41\n\tIPPROTO_LARP                            = 0x5b\n\tIPPROTO_LEAF1                           = 0x19\n\tIPPROTO_LEAF2                           = 0x1a\n\tIPPROTO_MAX                             = 0x100\n\tIPPROTO_MAXID                           = 0x34\n\tIPPROTO_MEAS                            = 0x13\n\tIPPROTO_MHRP                            = 0x30\n\tIPPROTO_MICP                            = 0x5f\n\tIPPROTO_MTP                             = 0x5c\n\tIPPROTO_MUX                             = 0x12\n\tIPPROTO_ND                              = 0x4d\n\tIPPROTO_NHRP                            = 0x36\n\tIPPROTO_NONE                            = 0x3b\n\tIPPROTO_NSP                             = 0x1f\n\tIPPROTO_NVPII                           = 0xb\n\tIPPROTO_OSPFIGP                         = 0x59\n\tIPPROTO_PGM                             = 0x71\n\tIPPROTO_PIGP                            = 0x9\n\tIPPROTO_PIM                             = 0x67\n\tIPPROTO_PRM                             = 0x15\n\tIPPROTO_PUP                             = 0xc\n\tIPPROTO_PVP                             = 0x4b\n\tIPPROTO_RAW                             = 0xff\n\tIPPROTO_RCCMON                          = 0xa\n\tIPPROTO_RDP                             = 0x1b\n\tIPPROTO_ROUTING                         = 0x2b\n\tIPPROTO_RSVP                            = 0x2e\n\tIPPROTO_RVD                             = 0x42\n\tIPPROTO_SATEXPAK                        = 0x40\n\tIPPROTO_SATMON                          = 0x45\n\tIPPROTO_SCCSP                           = 0x60\n\tIPPROTO_SCTP                            = 0x84\n\tIPPROTO_SDRP                            = 0x2a\n\tIPPROTO_SEP                             = 0x21\n\tIPPROTO_SRPC                            = 0x5a\n\tIPPROTO_ST                              = 0x7\n\tIPPROTO_SVMTP                           = 0x52\n\tIPPROTO_SWIPE                           = 0x35\n\tIPPROTO_TCF                             = 0x57\n\tIPPROTO_TCP                             = 0x6\n\tIPPROTO_TP                              = 0x1d\n\tIPPROTO_TPXX                            = 0x27\n\tIPPROTO_TRUNK1                          = 0x17\n\tIPPROTO_TRUNK2                          = 0x18\n\tIPPROTO_TTP                             = 0x54\n\tIPPROTO_UDP                             = 0x11\n\tIPPROTO_VINES                           = 0x53\n\tIPPROTO_VISA                            = 0x46\n\tIPPROTO_VMTP                            = 0x51\n\tIPPROTO_WBEXPAK                         = 0x4f\n\tIPPROTO_WBMON                           = 0x4e\n\tIPPROTO_WSN                             = 0x4a\n\tIPPROTO_XNET                            = 0xf\n\tIPPROTO_XTP                             = 0x24\n\tIPV6_2292DSTOPTS                        = 0x17\n\tIPV6_2292HOPLIMIT                       = 0x14\n\tIPV6_2292HOPOPTS                        = 0x16\n\tIPV6_2292NEXTHOP                        = 0x15\n\tIPV6_2292PKTINFO                        = 0x13\n\tIPV6_2292PKTOPTIONS                     = 0x19\n\tIPV6_2292RTHDR                          = 0x18\n\tIPV6_3542DSTOPTS                        = 0x32\n\tIPV6_3542HOPLIMIT                       = 0x2f\n\tIPV6_3542HOPOPTS                        = 0x31\n\tIPV6_3542NEXTHOP                        = 0x30\n\tIPV6_3542PKTINFO                        = 0x2e\n\tIPV6_3542RTHDR                          = 0x33\n\tIPV6_ADDR_MC_FLAGS_PREFIX               = 0x20\n\tIPV6_ADDR_MC_FLAGS_TRANSIENT            = 0x10\n\tIPV6_ADDR_MC_FLAGS_UNICAST_BASED        = 0x30\n\tIPV6_AUTOFLOWLABEL                      = 0x3b\n\tIPV6_BINDV6ONLY                         = 0x1b\n\tIPV6_BOUND_IF                           = 0x7d\n\tIPV6_CHECKSUM                           = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS             = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP             = 0x1\n\tIPV6_DEFHLIM                            = 0x40\n\tIPV6_DONTFRAG                           = 0x3e\n\tIPV6_DSTOPTS                            = 0x32\n\tIPV6_FAITH                              = 0x1d\n\tIPV6_FLOWINFO_MASK                      = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK                     = 0xffff0f00\n\tIPV6_FLOW_ECN_MASK                      = 0x3000\n\tIPV6_FRAGTTL                            = 0x3c\n\tIPV6_FW_ADD                             = 0x1e\n\tIPV6_FW_DEL                             = 0x1f\n\tIPV6_FW_FLUSH                           = 0x20\n\tIPV6_FW_GET                             = 0x22\n\tIPV6_FW_ZERO                            = 0x21\n\tIPV6_HLIMDEC                            = 0x1\n\tIPV6_HOPLIMIT                           = 0x2f\n\tIPV6_HOPOPTS                            = 0x31\n\tIPV6_IPSEC_POLICY                       = 0x1c\n\tIPV6_JOIN_GROUP                         = 0xc\n\tIPV6_LEAVE_GROUP                        = 0xd\n\tIPV6_MAXHLIM                            = 0xff\n\tIPV6_MAXOPTHDR                          = 0x800\n\tIPV6_MAXPACKET                          = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER               = 0x200\n\tIPV6_MAX_MEMBERSHIPS                    = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER                = 0x80\n\tIPV6_MIN_MEMBERSHIPS                    = 0x1f\n\tIPV6_MMTU                               = 0x500\n\tIPV6_MSFILTER                           = 0x4a\n\tIPV6_MULTICAST_HOPS                     = 0xa\n\tIPV6_MULTICAST_IF                       = 0x9\n\tIPV6_MULTICAST_LOOP                     = 0xb\n\tIPV6_NEXTHOP                            = 0x30\n\tIPV6_PATHMTU                            = 0x2c\n\tIPV6_PKTINFO                            = 0x2e\n\tIPV6_PORTRANGE                          = 0xe\n\tIPV6_PORTRANGE_DEFAULT                  = 0x0\n\tIPV6_PORTRANGE_HIGH                     = 0x1\n\tIPV6_PORTRANGE_LOW                      = 0x2\n\tIPV6_PREFER_TEMPADDR                    = 0x3f\n\tIPV6_RECVDSTOPTS                        = 0x28\n\tIPV6_RECVHOPLIMIT                       = 0x25\n\tIPV6_RECVHOPOPTS                        = 0x27\n\tIPV6_RECVPATHMTU                        = 0x2b\n\tIPV6_RECVPKTINFO                        = 0x3d\n\tIPV6_RECVRTHDR                          = 0x26\n\tIPV6_RECVTCLASS                         = 0x23\n\tIPV6_RTHDR                              = 0x33\n\tIPV6_RTHDRDSTOPTS                       = 0x39\n\tIPV6_RTHDR_LOOSE                        = 0x0\n\tIPV6_RTHDR_STRICT                       = 0x1\n\tIPV6_RTHDR_TYPE_0                       = 0x0\n\tIPV6_SOCKOPT_RESERVED1                  = 0x3\n\tIPV6_TCLASS                             = 0x24\n\tIPV6_UNICAST_HOPS                       = 0x4\n\tIPV6_USE_MIN_MTU                        = 0x2a\n\tIPV6_V6ONLY                             = 0x1b\n\tIPV6_VERSION                            = 0x60\n\tIPV6_VERSION_MASK                       = 0xf0\n\tIP_ADD_MEMBERSHIP                       = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP                = 0x46\n\tIP_BLOCK_SOURCE                         = 0x48\n\tIP_BOUND_IF                             = 0x19\n\tIP_DEFAULT_MULTICAST_LOOP               = 0x1\n\tIP_DEFAULT_MULTICAST_TTL                = 0x1\n\tIP_DF                                   = 0x4000\n\tIP_DONTFRAG                             = 0x1c\n\tIP_DROP_MEMBERSHIP                      = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP               = 0x47\n\tIP_DUMMYNET_CONFIGURE                   = 0x3c\n\tIP_DUMMYNET_DEL                         = 0x3d\n\tIP_DUMMYNET_FLUSH                       = 0x3e\n\tIP_DUMMYNET_GET                         = 0x40\n\tIP_FAITH                                = 0x16\n\tIP_FW_ADD                               = 0x28\n\tIP_FW_DEL                               = 0x29\n\tIP_FW_FLUSH                             = 0x2a\n\tIP_FW_GET                               = 0x2c\n\tIP_FW_RESETLOG                          = 0x2d\n\tIP_FW_ZERO                              = 0x2b\n\tIP_HDRINCL                              = 0x2\n\tIP_IPSEC_POLICY                         = 0x15\n\tIP_MAXPACKET                            = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER                 = 0x200\n\tIP_MAX_MEMBERSHIPS                      = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER                 = 0x80\n\tIP_MAX_SOCK_SRC_FILTER                  = 0x80\n\tIP_MF                                   = 0x2000\n\tIP_MIN_MEMBERSHIPS                      = 0x1f\n\tIP_MSFILTER                             = 0x4a\n\tIP_MSS                                  = 0x240\n\tIP_MULTICAST_IF                         = 0x9\n\tIP_MULTICAST_IFINDEX                    = 0x42\n\tIP_MULTICAST_LOOP                       = 0xb\n\tIP_MULTICAST_TTL                        = 0xa\n\tIP_MULTICAST_VIF                        = 0xe\n\tIP_NAT__XXX                             = 0x37\n\tIP_OFFMASK                              = 0x1fff\n\tIP_OLD_FW_ADD                           = 0x32\n\tIP_OLD_FW_DEL                           = 0x33\n\tIP_OLD_FW_FLUSH                         = 0x34\n\tIP_OLD_FW_GET                           = 0x36\n\tIP_OLD_FW_RESETLOG                      = 0x38\n\tIP_OLD_FW_ZERO                          = 0x35\n\tIP_OPTIONS                              = 0x1\n\tIP_PKTINFO                              = 0x1a\n\tIP_PORTRANGE                            = 0x13\n\tIP_PORTRANGE_DEFAULT                    = 0x0\n\tIP_PORTRANGE_HIGH                       = 0x1\n\tIP_PORTRANGE_LOW                        = 0x2\n\tIP_RECVDSTADDR                          = 0x7\n\tIP_RECVIF                               = 0x14\n\tIP_RECVOPTS                             = 0x5\n\tIP_RECVPKTINFO                          = 0x1a\n\tIP_RECVRETOPTS                          = 0x6\n\tIP_RECVTOS                              = 0x1b\n\tIP_RECVTTL                              = 0x18\n\tIP_RETOPTS                              = 0x8\n\tIP_RF                                   = 0x8000\n\tIP_RSVP_OFF                             = 0x10\n\tIP_RSVP_ON                              = 0xf\n\tIP_RSVP_VIF_OFF                         = 0x12\n\tIP_RSVP_VIF_ON                          = 0x11\n\tIP_STRIPHDR                             = 0x17\n\tIP_TOS                                  = 0x3\n\tIP_TRAFFIC_MGT_BACKGROUND               = 0x41\n\tIP_TTL                                  = 0x4\n\tIP_UNBLOCK_SOURCE                       = 0x49\n\tISIG                                    = 0x80\n\tISTRIP                                  = 0x20\n\tIUTF8                                   = 0x4000\n\tIXANY                                   = 0x800\n\tIXOFF                                   = 0x400\n\tIXON                                    = 0x200\n\tKERN_HOSTNAME                           = 0xa\n\tKERN_OSRELEASE                          = 0x2\n\tKERN_OSTYPE                             = 0x1\n\tKERN_VERSION                            = 0x4\n\tLOCAL_PEERCRED                          = 0x1\n\tLOCAL_PEEREPID                          = 0x3\n\tLOCAL_PEEREUUID                         = 0x5\n\tLOCAL_PEERPID                           = 0x2\n\tLOCAL_PEERTOKEN                         = 0x6\n\tLOCAL_PEERUUID                          = 0x4\n\tLOCK_EX                                 = 0x2\n\tLOCK_NB                                 = 0x4\n\tLOCK_SH                                 = 0x1\n\tLOCK_UN                                 = 0x8\n\tMADV_CAN_REUSE                          = 0x9\n\tMADV_DONTNEED                           = 0x4\n\tMADV_FREE                               = 0x5\n\tMADV_FREE_REUSABLE                      = 0x7\n\tMADV_FREE_REUSE                         = 0x8\n\tMADV_NORMAL                             = 0x0\n\tMADV_PAGEOUT                            = 0xa\n\tMADV_RANDOM                             = 0x1\n\tMADV_SEQUENTIAL                         = 0x2\n\tMADV_WILLNEED                           = 0x3\n\tMADV_ZERO_WIRED_PAGES                   = 0x6\n\tMAP_32BIT                               = 0x8000\n\tMAP_ANON                                = 0x1000\n\tMAP_ANONYMOUS                           = 0x1000\n\tMAP_COPY                                = 0x2\n\tMAP_FILE                                = 0x0\n\tMAP_FIXED                               = 0x10\n\tMAP_HASSEMAPHORE                        = 0x200\n\tMAP_JIT                                 = 0x800\n\tMAP_NOCACHE                             = 0x400\n\tMAP_NOEXTEND                            = 0x100\n\tMAP_NORESERVE                           = 0x40\n\tMAP_PRIVATE                             = 0x2\n\tMAP_RENAME                              = 0x20\n\tMAP_RESERVED0080                        = 0x80\n\tMAP_RESILIENT_CODESIGN                  = 0x2000\n\tMAP_RESILIENT_MEDIA                     = 0x4000\n\tMAP_SHARED                              = 0x1\n\tMAP_TRANSLATED_ALLOW_EXECUTE            = 0x20000\n\tMAP_UNIX03                              = 0x40000\n\tMCAST_BLOCK_SOURCE                      = 0x54\n\tMCAST_EXCLUDE                           = 0x2\n\tMCAST_INCLUDE                           = 0x1\n\tMCAST_JOIN_GROUP                        = 0x50\n\tMCAST_JOIN_SOURCE_GROUP                 = 0x52\n\tMCAST_LEAVE_GROUP                       = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP                = 0x53\n\tMCAST_UNBLOCK_SOURCE                    = 0x55\n\tMCAST_UNDEFINED                         = 0x0\n\tMCL_CURRENT                             = 0x1\n\tMCL_FUTURE                              = 0x2\n\tMNT_ASYNC                               = 0x40\n\tMNT_AUTOMOUNTED                         = 0x400000\n\tMNT_CMDFLAGS                            = 0xf0000\n\tMNT_CPROTECT                            = 0x80\n\tMNT_DEFWRITE                            = 0x2000000\n\tMNT_DONTBROWSE                          = 0x100000\n\tMNT_DOVOLFS                             = 0x8000\n\tMNT_DWAIT                               = 0x4\n\tMNT_EXPORTED                            = 0x100\n\tMNT_EXT_ROOT_DATA_VOL                   = 0x1\n\tMNT_FORCE                               = 0x80000\n\tMNT_IGNORE_OWNERSHIP                    = 0x200000\n\tMNT_JOURNALED                           = 0x800000\n\tMNT_LOCAL                               = 0x1000\n\tMNT_MULTILABEL                          = 0x4000000\n\tMNT_NOATIME                             = 0x10000000\n\tMNT_NOBLOCK                             = 0x20000\n\tMNT_NODEV                               = 0x10\n\tMNT_NOEXEC                              = 0x4\n\tMNT_NOSUID                              = 0x8\n\tMNT_NOUSERXATTR                         = 0x1000000\n\tMNT_NOWAIT                              = 0x2\n\tMNT_QUARANTINE                          = 0x400\n\tMNT_QUOTA                               = 0x2000\n\tMNT_RDONLY                              = 0x1\n\tMNT_RELOAD                              = 0x40000\n\tMNT_REMOVABLE                           = 0x200\n\tMNT_ROOTFS                              = 0x4000\n\tMNT_SNAPSHOT                            = 0x40000000\n\tMNT_STRICTATIME                         = 0x80000000\n\tMNT_SYNCHRONOUS                         = 0x2\n\tMNT_UNION                               = 0x20\n\tMNT_UNKNOWNPERMISSIONS                  = 0x200000\n\tMNT_UPDATE                              = 0x10000\n\tMNT_VISFLAGMASK                         = 0xd7f0f7ff\n\tMNT_WAIT                                = 0x1\n\tMSG_CTRUNC                              = 0x20\n\tMSG_DONTROUTE                           = 0x4\n\tMSG_DONTWAIT                            = 0x80\n\tMSG_EOF                                 = 0x100\n\tMSG_EOR                                 = 0x8\n\tMSG_FLUSH                               = 0x400\n\tMSG_HAVEMORE                            = 0x2000\n\tMSG_HOLD                                = 0x800\n\tMSG_NEEDSA                              = 0x10000\n\tMSG_NOSIGNAL                            = 0x80000\n\tMSG_OOB                                 = 0x1\n\tMSG_PEEK                                = 0x2\n\tMSG_RCVMORE                             = 0x4000\n\tMSG_SEND                                = 0x1000\n\tMSG_TRUNC                               = 0x10\n\tMSG_WAITALL                             = 0x40\n\tMSG_WAITSTREAM                          = 0x200\n\tMS_ASYNC                                = 0x1\n\tMS_DEACTIVATE                           = 0x8\n\tMS_INVALIDATE                           = 0x2\n\tMS_KILLPAGES                            = 0x4\n\tMS_SYNC                                 = 0x10\n\tNAME_MAX                                = 0xff\n\tNET_RT_DUMP                             = 0x1\n\tNET_RT_DUMP2                            = 0x7\n\tNET_RT_FLAGS                            = 0x2\n\tNET_RT_FLAGS_PRIV                       = 0xa\n\tNET_RT_IFLIST                           = 0x3\n\tNET_RT_IFLIST2                          = 0x6\n\tNET_RT_MAXID                            = 0xb\n\tNET_RT_STAT                             = 0x4\n\tNET_RT_TRASH                            = 0x5\n\tNFDBITS                                 = 0x20\n\tNL0                                     = 0x0\n\tNL1                                     = 0x100\n\tNL2                                     = 0x200\n\tNL3                                     = 0x300\n\tNLDLY                                   = 0x300\n\tNOFLSH                                  = 0x80000000\n\tNOKERNINFO                              = 0x2000000\n\tNOTE_ABSOLUTE                           = 0x8\n\tNOTE_ATTRIB                             = 0x8\n\tNOTE_BACKGROUND                         = 0x40\n\tNOTE_CHILD                              = 0x4\n\tNOTE_CRITICAL                           = 0x20\n\tNOTE_DELETE                             = 0x1\n\tNOTE_EXEC                               = 0x20000000\n\tNOTE_EXIT                               = 0x80000000\n\tNOTE_EXITSTATUS                         = 0x4000000\n\tNOTE_EXIT_CSERROR                       = 0x40000\n\tNOTE_EXIT_DECRYPTFAIL                   = 0x10000\n\tNOTE_EXIT_DETAIL                        = 0x2000000\n\tNOTE_EXIT_DETAIL_MASK                   = 0x70000\n\tNOTE_EXIT_MEMORY                        = 0x20000\n\tNOTE_EXIT_REPARENTED                    = 0x80000\n\tNOTE_EXTEND                             = 0x4\n\tNOTE_FFAND                              = 0x40000000\n\tNOTE_FFCOPY                             = 0xc0000000\n\tNOTE_FFCTRLMASK                         = 0xc0000000\n\tNOTE_FFLAGSMASK                         = 0xffffff\n\tNOTE_FFNOP                              = 0x0\n\tNOTE_FFOR                               = 0x80000000\n\tNOTE_FORK                               = 0x40000000\n\tNOTE_FUNLOCK                            = 0x100\n\tNOTE_LEEWAY                             = 0x10\n\tNOTE_LINK                               = 0x10\n\tNOTE_LOWAT                              = 0x1\n\tNOTE_MACHTIME                           = 0x100\n\tNOTE_MACH_CONTINUOUS_TIME               = 0x80\n\tNOTE_NONE                               = 0x80\n\tNOTE_NSECONDS                           = 0x4\n\tNOTE_OOB                                = 0x2\n\tNOTE_PCTRLMASK                          = -0x100000\n\tNOTE_PDATAMASK                          = 0xfffff\n\tNOTE_REAP                               = 0x10000000\n\tNOTE_RENAME                             = 0x20\n\tNOTE_REVOKE                             = 0x40\n\tNOTE_SECONDS                            = 0x1\n\tNOTE_SIGNAL                             = 0x8000000\n\tNOTE_TRACK                              = 0x1\n\tNOTE_TRACKERR                           = 0x2\n\tNOTE_TRIGGER                            = 0x1000000\n\tNOTE_USECONDS                           = 0x2\n\tNOTE_VM_ERROR                           = 0x10000000\n\tNOTE_VM_PRESSURE                        = 0x80000000\n\tNOTE_VM_PRESSURE_SUDDEN_TERMINATE       = 0x20000000\n\tNOTE_VM_PRESSURE_TERMINATE              = 0x40000000\n\tNOTE_WRITE                              = 0x2\n\tOCRNL                                   = 0x10\n\tOFDEL                                   = 0x20000\n\tOFILL                                   = 0x80\n\tONLCR                                   = 0x2\n\tONLRET                                  = 0x40\n\tONOCR                                   = 0x20\n\tONOEOT                                  = 0x8\n\tOPOST                                   = 0x1\n\tOXTABS                                  = 0x4\n\tO_ACCMODE                               = 0x3\n\tO_ALERT                                 = 0x20000000\n\tO_APPEND                                = 0x8\n\tO_ASYNC                                 = 0x40\n\tO_CLOEXEC                               = 0x1000000\n\tO_CREAT                                 = 0x200\n\tO_DIRECTORY                             = 0x100000\n\tO_DP_GETRAWENCRYPTED                    = 0x1\n\tO_DP_GETRAWUNENCRYPTED                  = 0x2\n\tO_DSYNC                                 = 0x400000\n\tO_EVTONLY                               = 0x8000\n\tO_EXCL                                  = 0x800\n\tO_EXLOCK                                = 0x20\n\tO_FSYNC                                 = 0x80\n\tO_NDELAY                                = 0x4\n\tO_NOCTTY                                = 0x20000\n\tO_NOFOLLOW                              = 0x100\n\tO_NOFOLLOW_ANY                          = 0x20000000\n\tO_NONBLOCK                              = 0x4\n\tO_POPUP                                 = 0x80000000\n\tO_RDONLY                                = 0x0\n\tO_RDWR                                  = 0x2\n\tO_SHLOCK                                = 0x10\n\tO_SYMLINK                               = 0x200000\n\tO_SYNC                                  = 0x80\n\tO_TRUNC                                 = 0x400\n\tO_WRONLY                                = 0x1\n\tPARENB                                  = 0x1000\n\tPARMRK                                  = 0x8\n\tPARODD                                  = 0x2000\n\tPENDIN                                  = 0x20000000\n\tPRIO_PGRP                               = 0x1\n\tPRIO_PROCESS                            = 0x0\n\tPRIO_USER                               = 0x2\n\tPROT_EXEC                               = 0x4\n\tPROT_NONE                               = 0x0\n\tPROT_READ                               = 0x1\n\tPROT_WRITE                              = 0x2\n\tPT_ATTACH                               = 0xa\n\tPT_ATTACHEXC                            = 0xe\n\tPT_CONTINUE                             = 0x7\n\tPT_DENY_ATTACH                          = 0x1f\n\tPT_DETACH                               = 0xb\n\tPT_FIRSTMACH                            = 0x20\n\tPT_FORCEQUOTA                           = 0x1e\n\tPT_KILL                                 = 0x8\n\tPT_READ_D                               = 0x2\n\tPT_READ_I                               = 0x1\n\tPT_READ_U                               = 0x3\n\tPT_SIGEXC                               = 0xc\n\tPT_STEP                                 = 0x9\n\tPT_THUPDATE                             = 0xd\n\tPT_TRACE_ME                             = 0x0\n\tPT_WRITE_D                              = 0x5\n\tPT_WRITE_I                              = 0x4\n\tPT_WRITE_U                              = 0x6\n\tRENAME_EXCL                             = 0x4\n\tRENAME_NOFOLLOW_ANY                     = 0x10\n\tRENAME_RESERVED1                        = 0x8\n\tRENAME_SECLUDE                          = 0x1\n\tRENAME_SWAP                             = 0x2\n\tRLIMIT_AS                               = 0x5\n\tRLIMIT_CORE                             = 0x4\n\tRLIMIT_CPU                              = 0x0\n\tRLIMIT_CPU_USAGE_MONITOR                = 0x2\n\tRLIMIT_DATA                             = 0x2\n\tRLIMIT_FSIZE                            = 0x1\n\tRLIMIT_MEMLOCK                          = 0x6\n\tRLIMIT_NOFILE                           = 0x8\n\tRLIMIT_NPROC                            = 0x7\n\tRLIMIT_RSS                              = 0x5\n\tRLIMIT_STACK                            = 0x3\n\tRLIM_INFINITY                           = 0x7fffffffffffffff\n\tRTAX_AUTHOR                             = 0x6\n\tRTAX_BRD                                = 0x7\n\tRTAX_DST                                = 0x0\n\tRTAX_GATEWAY                            = 0x1\n\tRTAX_GENMASK                            = 0x3\n\tRTAX_IFA                                = 0x5\n\tRTAX_IFP                                = 0x4\n\tRTAX_MAX                                = 0x8\n\tRTAX_NETMASK                            = 0x2\n\tRTA_AUTHOR                              = 0x40\n\tRTA_BRD                                 = 0x80\n\tRTA_DST                                 = 0x1\n\tRTA_GATEWAY                             = 0x2\n\tRTA_GENMASK                             = 0x8\n\tRTA_IFA                                 = 0x20\n\tRTA_IFP                                 = 0x10\n\tRTA_NETMASK                             = 0x4\n\tRTF_BLACKHOLE                           = 0x1000\n\tRTF_BROADCAST                           = 0x400000\n\tRTF_CLONING                             = 0x100\n\tRTF_CONDEMNED                           = 0x2000000\n\tRTF_DEAD                                = 0x20000000\n\tRTF_DELCLONE                            = 0x80\n\tRTF_DONE                                = 0x40\n\tRTF_DYNAMIC                             = 0x10\n\tRTF_GATEWAY                             = 0x2\n\tRTF_GLOBAL                              = 0x40000000\n\tRTF_HOST                                = 0x4\n\tRTF_IFREF                               = 0x4000000\n\tRTF_IFSCOPE                             = 0x1000000\n\tRTF_LLDATA                              = 0x400\n\tRTF_LLINFO                              = 0x400\n\tRTF_LOCAL                               = 0x200000\n\tRTF_MODIFIED                            = 0x20\n\tRTF_MULTICAST                           = 0x800000\n\tRTF_NOIFREF                             = 0x2000\n\tRTF_PINNED                              = 0x100000\n\tRTF_PRCLONING                           = 0x10000\n\tRTF_PROTO1                              = 0x8000\n\tRTF_PROTO2                              = 0x4000\n\tRTF_PROTO3                              = 0x40000\n\tRTF_PROXY                               = 0x8000000\n\tRTF_REJECT                              = 0x8\n\tRTF_ROUTER                              = 0x10000000\n\tRTF_STATIC                              = 0x800\n\tRTF_UP                                  = 0x1\n\tRTF_WASCLONED                           = 0x20000\n\tRTF_XRESOLVE                            = 0x200\n\tRTM_ADD                                 = 0x1\n\tRTM_CHANGE                              = 0x3\n\tRTM_DELADDR                             = 0xd\n\tRTM_DELETE                              = 0x2\n\tRTM_DELMADDR                            = 0x10\n\tRTM_GET                                 = 0x4\n\tRTM_GET2                                = 0x14\n\tRTM_IFINFO                              = 0xe\n\tRTM_IFINFO2                             = 0x12\n\tRTM_LOCK                                = 0x8\n\tRTM_LOSING                              = 0x5\n\tRTM_MISS                                = 0x7\n\tRTM_NEWADDR                             = 0xc\n\tRTM_NEWMADDR                            = 0xf\n\tRTM_NEWMADDR2                           = 0x13\n\tRTM_OLDADD                              = 0x9\n\tRTM_OLDDEL                              = 0xa\n\tRTM_REDIRECT                            = 0x6\n\tRTM_RESOLVE                             = 0xb\n\tRTM_RTTUNIT                             = 0xf4240\n\tRTM_VERSION                             = 0x5\n\tRTV_EXPIRE                              = 0x4\n\tRTV_HOPCOUNT                            = 0x2\n\tRTV_MTU                                 = 0x1\n\tRTV_RPIPE                               = 0x8\n\tRTV_RTT                                 = 0x40\n\tRTV_RTTVAR                              = 0x80\n\tRTV_SPIPE                               = 0x10\n\tRTV_SSTHRESH                            = 0x20\n\tRUSAGE_CHILDREN                         = -0x1\n\tRUSAGE_SELF                             = 0x0\n\tSAE_ASSOCID_ALL                         = 0xffffffff\n\tSAE_ASSOCID_ANY                         = 0x0\n\tSAE_CONNID_ALL                          = 0xffffffff\n\tSAE_CONNID_ANY                          = 0x0\n\tSCM_CREDS                               = 0x3\n\tSCM_RIGHTS                              = 0x1\n\tSCM_TIMESTAMP                           = 0x2\n\tSCM_TIMESTAMP_MONOTONIC                 = 0x4\n\tSEEK_CUR                                = 0x1\n\tSEEK_DATA                               = 0x4\n\tSEEK_END                                = 0x2\n\tSEEK_HOLE                               = 0x3\n\tSEEK_SET                                = 0x0\n\tSF_APPEND                               = 0x40000\n\tSF_ARCHIVED                             = 0x10000\n\tSF_DATALESS                             = 0x40000000\n\tSF_FIRMLINK                             = 0x800000\n\tSF_IMMUTABLE                            = 0x20000\n\tSF_NOUNLINK                             = 0x100000\n\tSF_RESTRICTED                           = 0x80000\n\tSF_SETTABLE                             = 0x3fff0000\n\tSF_SUPPORTED                            = 0x9f0000\n\tSF_SYNTHETIC                            = 0xc0000000\n\tSHUT_RD                                 = 0x0\n\tSHUT_RDWR                               = 0x2\n\tSHUT_WR                                 = 0x1\n\tSIOCADDMULTI                            = 0x80206931\n\tSIOCAIFADDR                             = 0x8040691a\n\tSIOCARPIPLL                             = 0xc0206928\n\tSIOCATMARK                              = 0x40047307\n\tSIOCAUTOADDR                            = 0xc0206926\n\tSIOCAUTONETMASK                         = 0x80206927\n\tSIOCDELMULTI                            = 0x80206932\n\tSIOCDIFADDR                             = 0x80206919\n\tSIOCDIFPHYADDR                          = 0x80206941\n\tSIOCGDRVSPEC                            = 0xc028697b\n\tSIOCGETVLAN                             = 0xc020697f\n\tSIOCGHIWAT                              = 0x40047301\n\tSIOCGIF6LOWPAN                          = 0xc02069c5\n\tSIOCGIFADDR                             = 0xc0206921\n\tSIOCGIFALTMTU                           = 0xc0206948\n\tSIOCGIFASYNCMAP                         = 0xc020697c\n\tSIOCGIFBOND                             = 0xc0206947\n\tSIOCGIFBRDADDR                          = 0xc0206923\n\tSIOCGIFCAP                              = 0xc020695b\n\tSIOCGIFCONF                             = 0xc00c6924\n\tSIOCGIFDEVMTU                           = 0xc0206944\n\tSIOCGIFDSTADDR                          = 0xc0206922\n\tSIOCGIFFLAGS                            = 0xc0206911\n\tSIOCGIFFUNCTIONALTYPE                   = 0xc02069ad\n\tSIOCGIFGENERIC                          = 0xc020693a\n\tSIOCGIFKPI                              = 0xc0206987\n\tSIOCGIFMAC                              = 0xc0206982\n\tSIOCGIFMEDIA                            = 0xc02c6938\n\tSIOCGIFMETRIC                           = 0xc0206917\n\tSIOCGIFMTU                              = 0xc0206933\n\tSIOCGIFNETMASK                          = 0xc0206925\n\tSIOCGIFPDSTADDR                         = 0xc0206940\n\tSIOCGIFPHYS                             = 0xc0206935\n\tSIOCGIFPSRCADDR                         = 0xc020693f\n\tSIOCGIFSTATUS                           = 0xc331693d\n\tSIOCGIFVLAN                             = 0xc020697f\n\tSIOCGIFWAKEFLAGS                        = 0xc0206988\n\tSIOCGIFXMEDIA                           = 0xc02c6948\n\tSIOCGLOWAT                              = 0x40047303\n\tSIOCGPGRP                               = 0x40047309\n\tSIOCIFCREATE                            = 0xc0206978\n\tSIOCIFCREATE2                           = 0xc020697a\n\tSIOCIFDESTROY                           = 0x80206979\n\tSIOCIFGCLONERS                          = 0xc0106981\n\tSIOCRSLVMULTI                           = 0xc010693b\n\tSIOCSDRVSPEC                            = 0x8028697b\n\tSIOCSETVLAN                             = 0x8020697e\n\tSIOCSHIWAT                              = 0x80047300\n\tSIOCSIF6LOWPAN                          = 0x802069c4\n\tSIOCSIFADDR                             = 0x8020690c\n\tSIOCSIFALTMTU                           = 0x80206945\n\tSIOCSIFASYNCMAP                         = 0x8020697d\n\tSIOCSIFBOND                             = 0x80206946\n\tSIOCSIFBRDADDR                          = 0x80206913\n\tSIOCSIFCAP                              = 0x8020695a\n\tSIOCSIFDSTADDR                          = 0x8020690e\n\tSIOCSIFFLAGS                            = 0x80206910\n\tSIOCSIFGENERIC                          = 0x80206939\n\tSIOCSIFKPI                              = 0x80206986\n\tSIOCSIFLLADDR                           = 0x8020693c\n\tSIOCSIFMAC                              = 0x80206983\n\tSIOCSIFMEDIA                            = 0xc0206937\n\tSIOCSIFMETRIC                           = 0x80206918\n\tSIOCSIFMTU                              = 0x80206934\n\tSIOCSIFNETMASK                          = 0x80206916\n\tSIOCSIFPHYADDR                          = 0x8040693e\n\tSIOCSIFPHYS                             = 0x80206936\n\tSIOCSIFVLAN                             = 0x8020697e\n\tSIOCSLOWAT                              = 0x80047302\n\tSIOCSPGRP                               = 0x80047308\n\tSOCK_DGRAM                              = 0x2\n\tSOCK_MAXADDRLEN                         = 0xff\n\tSOCK_RAW                                = 0x3\n\tSOCK_RDM                                = 0x4\n\tSOCK_SEQPACKET                          = 0x5\n\tSOCK_STREAM                             = 0x1\n\tSOL_LOCAL                               = 0x0\n\tSOL_SOCKET                              = 0xffff\n\tSOMAXCONN                               = 0x80\n\tSO_ACCEPTCONN                           = 0x2\n\tSO_BROADCAST                            = 0x20\n\tSO_DEBUG                                = 0x1\n\tSO_DONTROUTE                            = 0x10\n\tSO_DONTTRUNC                            = 0x2000\n\tSO_ERROR                                = 0x1007\n\tSO_KEEPALIVE                            = 0x8\n\tSO_LABEL                                = 0x1010\n\tSO_LINGER                               = 0x80\n\tSO_LINGER_SEC                           = 0x1080\n\tSO_NETSVC_MARKING_LEVEL                 = 0x1119\n\tSO_NET_SERVICE_TYPE                     = 0x1116\n\tSO_NKE                                  = 0x1021\n\tSO_NOADDRERR                            = 0x1023\n\tSO_NOSIGPIPE                            = 0x1022\n\tSO_NOTIFYCONFLICT                       = 0x1026\n\tSO_NP_EXTENSIONS                        = 0x1083\n\tSO_NREAD                                = 0x1020\n\tSO_NUMRCVPKT                            = 0x1112\n\tSO_NWRITE                               = 0x1024\n\tSO_OOBINLINE                            = 0x100\n\tSO_PEERLABEL                            = 0x1011\n\tSO_RANDOMPORT                           = 0x1082\n\tSO_RCVBUF                               = 0x1002\n\tSO_RCVLOWAT                             = 0x1004\n\tSO_RCVTIMEO                             = 0x1006\n\tSO_REUSEADDR                            = 0x4\n\tSO_REUSEPORT                            = 0x200\n\tSO_REUSESHAREUID                        = 0x1025\n\tSO_SNDBUF                               = 0x1001\n\tSO_SNDLOWAT                             = 0x1003\n\tSO_SNDTIMEO                             = 0x1005\n\tSO_TIMESTAMP                            = 0x400\n\tSO_TIMESTAMP_MONOTONIC                  = 0x800\n\tSO_TRACKER_ATTRIBUTE_FLAGS_APP_APPROVED = 0x1\n\tSO_TRACKER_ATTRIBUTE_FLAGS_DOMAIN_SHORT = 0x4\n\tSO_TRACKER_ATTRIBUTE_FLAGS_TRACKER      = 0x2\n\tSO_TRACKER_TRANSPARENCY_VERSION         = 0x3\n\tSO_TYPE                                 = 0x1008\n\tSO_UPCALLCLOSEWAIT                      = 0x1027\n\tSO_USELOOPBACK                          = 0x40\n\tSO_WANTMORE                             = 0x4000\n\tSO_WANTOOBFLAG                          = 0x8000\n\tS_IEXEC                                 = 0x40\n\tS_IFBLK                                 = 0x6000\n\tS_IFCHR                                 = 0x2000\n\tS_IFDIR                                 = 0x4000\n\tS_IFIFO                                 = 0x1000\n\tS_IFLNK                                 = 0xa000\n\tS_IFMT                                  = 0xf000\n\tS_IFREG                                 = 0x8000\n\tS_IFSOCK                                = 0xc000\n\tS_IFWHT                                 = 0xe000\n\tS_IREAD                                 = 0x100\n\tS_IRGRP                                 = 0x20\n\tS_IROTH                                 = 0x4\n\tS_IRUSR                                 = 0x100\n\tS_IRWXG                                 = 0x38\n\tS_IRWXO                                 = 0x7\n\tS_IRWXU                                 = 0x1c0\n\tS_ISGID                                 = 0x400\n\tS_ISTXT                                 = 0x200\n\tS_ISUID                                 = 0x800\n\tS_ISVTX                                 = 0x200\n\tS_IWGRP                                 = 0x10\n\tS_IWOTH                                 = 0x2\n\tS_IWRITE                                = 0x80\n\tS_IWUSR                                 = 0x80\n\tS_IXGRP                                 = 0x8\n\tS_IXOTH                                 = 0x1\n\tS_IXUSR                                 = 0x40\n\tTAB0                                    = 0x0\n\tTAB1                                    = 0x400\n\tTAB2                                    = 0x800\n\tTAB3                                    = 0x4\n\tTABDLY                                  = 0xc04\n\tTCIFLUSH                                = 0x1\n\tTCIOFF                                  = 0x3\n\tTCIOFLUSH                               = 0x3\n\tTCION                                   = 0x4\n\tTCOFLUSH                                = 0x2\n\tTCOOFF                                  = 0x1\n\tTCOON                                   = 0x2\n\tTCPOPT_CC                               = 0xb\n\tTCPOPT_CCECHO                           = 0xd\n\tTCPOPT_CCNEW                            = 0xc\n\tTCPOPT_EOL                              = 0x0\n\tTCPOPT_FASTOPEN                         = 0x22\n\tTCPOPT_MAXSEG                           = 0x2\n\tTCPOPT_NOP                              = 0x1\n\tTCPOPT_SACK                             = 0x5\n\tTCPOPT_SACK_HDR                         = 0x1010500\n\tTCPOPT_SACK_PERMITTED                   = 0x4\n\tTCPOPT_SACK_PERMIT_HDR                  = 0x1010402\n\tTCPOPT_SIGNATURE                        = 0x13\n\tTCPOPT_TIMESTAMP                        = 0x8\n\tTCPOPT_TSTAMP_HDR                       = 0x101080a\n\tTCPOPT_WINDOW                           = 0x3\n\tTCP_CONNECTIONTIMEOUT                   = 0x20\n\tTCP_CONNECTION_INFO                     = 0x106\n\tTCP_ENABLE_ECN                          = 0x104\n\tTCP_FASTOPEN                            = 0x105\n\tTCP_KEEPALIVE                           = 0x10\n\tTCP_KEEPCNT                             = 0x102\n\tTCP_KEEPINTVL                           = 0x101\n\tTCP_MAXHLEN                             = 0x3c\n\tTCP_MAXOLEN                             = 0x28\n\tTCP_MAXSEG                              = 0x2\n\tTCP_MAXWIN                              = 0xffff\n\tTCP_MAX_SACK                            = 0x4\n\tTCP_MAX_WINSHIFT                        = 0xe\n\tTCP_MINMSS                              = 0xd8\n\tTCP_MSS                                 = 0x200\n\tTCP_NODELAY                             = 0x1\n\tTCP_NOOPT                               = 0x8\n\tTCP_NOPUSH                              = 0x4\n\tTCP_NOTSENT_LOWAT                       = 0x201\n\tTCP_RXT_CONNDROPTIME                    = 0x80\n\tTCP_RXT_FINDROP                         = 0x100\n\tTCP_SENDMOREACKS                        = 0x103\n\tTCSAFLUSH                               = 0x2\n\tTIOCCBRK                                = 0x2000747a\n\tTIOCCDTR                                = 0x20007478\n\tTIOCCONS                                = 0x80047462\n\tTIOCDCDTIMESTAMP                        = 0x40107458\n\tTIOCDRAIN                               = 0x2000745e\n\tTIOCDSIMICROCODE                        = 0x20007455\n\tTIOCEXCL                                = 0x2000740d\n\tTIOCEXT                                 = 0x80047460\n\tTIOCFLUSH                               = 0x80047410\n\tTIOCGDRAINWAIT                          = 0x40047456\n\tTIOCGETA                                = 0x40487413\n\tTIOCGETD                                = 0x4004741a\n\tTIOCGPGRP                               = 0x40047477\n\tTIOCGWINSZ                              = 0x40087468\n\tTIOCIXOFF                               = 0x20007480\n\tTIOCIXON                                = 0x20007481\n\tTIOCMBIC                                = 0x8004746b\n\tTIOCMBIS                                = 0x8004746c\n\tTIOCMGDTRWAIT                           = 0x4004745a\n\tTIOCMGET                                = 0x4004746a\n\tTIOCMODG                                = 0x40047403\n\tTIOCMODS                                = 0x80047404\n\tTIOCMSDTRWAIT                           = 0x8004745b\n\tTIOCMSET                                = 0x8004746d\n\tTIOCM_CAR                               = 0x40\n\tTIOCM_CD                                = 0x40\n\tTIOCM_CTS                               = 0x20\n\tTIOCM_DSR                               = 0x100\n\tTIOCM_DTR                               = 0x2\n\tTIOCM_LE                                = 0x1\n\tTIOCM_RI                                = 0x80\n\tTIOCM_RNG                               = 0x80\n\tTIOCM_RTS                               = 0x4\n\tTIOCM_SR                                = 0x10\n\tTIOCM_ST                                = 0x8\n\tTIOCNOTTY                               = 0x20007471\n\tTIOCNXCL                                = 0x2000740e\n\tTIOCOUTQ                                = 0x40047473\n\tTIOCPKT                                 = 0x80047470\n\tTIOCPKT_DATA                            = 0x0\n\tTIOCPKT_DOSTOP                          = 0x20\n\tTIOCPKT_FLUSHREAD                       = 0x1\n\tTIOCPKT_FLUSHWRITE                      = 0x2\n\tTIOCPKT_IOCTL                           = 0x40\n\tTIOCPKT_NOSTOP                          = 0x10\n\tTIOCPKT_START                           = 0x8\n\tTIOCPKT_STOP                            = 0x4\n\tTIOCPTYGNAME                            = 0x40807453\n\tTIOCPTYGRANT                            = 0x20007454\n\tTIOCPTYUNLK                             = 0x20007452\n\tTIOCREMOTE                              = 0x80047469\n\tTIOCSBRK                                = 0x2000747b\n\tTIOCSCONS                               = 0x20007463\n\tTIOCSCTTY                               = 0x20007461\n\tTIOCSDRAINWAIT                          = 0x80047457\n\tTIOCSDTR                                = 0x20007479\n\tTIOCSETA                                = 0x80487414\n\tTIOCSETAF                               = 0x80487416\n\tTIOCSETAW                               = 0x80487415\n\tTIOCSETD                                = 0x8004741b\n\tTIOCSIG                                 = 0x2000745f\n\tTIOCSPGRP                               = 0x80047476\n\tTIOCSTART                               = 0x2000746e\n\tTIOCSTAT                                = 0x20007465\n\tTIOCSTI                                 = 0x80017472\n\tTIOCSTOP                                = 0x2000746f\n\tTIOCSWINSZ                              = 0x80087467\n\tTIOCTIMESTAMP                           = 0x40107459\n\tTIOCUCNTL                               = 0x80047466\n\tTOSTOP                                  = 0x400000\n\tUF_APPEND                               = 0x4\n\tUF_COMPRESSED                           = 0x20\n\tUF_DATAVAULT                            = 0x80\n\tUF_HIDDEN                               = 0x8000\n\tUF_IMMUTABLE                            = 0x2\n\tUF_NODUMP                               = 0x1\n\tUF_OPAQUE                               = 0x8\n\tUF_SETTABLE                             = 0xffff\n\tUF_TRACKED                              = 0x40\n\tVDISCARD                                = 0xf\n\tVDSUSP                                  = 0xb\n\tVEOF                                    = 0x0\n\tVEOL                                    = 0x1\n\tVEOL2                                   = 0x2\n\tVERASE                                  = 0x3\n\tVINTR                                   = 0x8\n\tVKILL                                   = 0x5\n\tVLNEXT                                  = 0xe\n\tVMADDR_CID_ANY                          = 0xffffffff\n\tVMADDR_CID_HOST                         = 0x2\n\tVMADDR_CID_HYPERVISOR                   = 0x0\n\tVMADDR_CID_RESERVED                     = 0x1\n\tVMADDR_PORT_ANY                         = 0xffffffff\n\tVMIN                                    = 0x10\n\tVM_LOADAVG                              = 0x2\n\tVM_MACHFACTOR                           = 0x4\n\tVM_MAXID                                = 0x6\n\tVM_METER                                = 0x1\n\tVM_SWAPUSAGE                            = 0x5\n\tVQUIT                                   = 0x9\n\tVREPRINT                                = 0x6\n\tVSTART                                  = 0xc\n\tVSTATUS                                 = 0x12\n\tVSTOP                                   = 0xd\n\tVSUSP                                   = 0xa\n\tVT0                                     = 0x0\n\tVT1                                     = 0x10000\n\tVTDLY                                   = 0x10000\n\tVTIME                                   = 0x11\n\tVWERASE                                 = 0x4\n\tWCONTINUED                              = 0x10\n\tWCOREFLAG                               = 0x80\n\tWEXITED                                 = 0x4\n\tWNOHANG                                 = 0x1\n\tWNOWAIT                                 = 0x20\n\tWORDSIZE                                = 0x40\n\tWSTOPPED                                = 0x8\n\tWUNTRACED                               = 0x2\n\tXATTR_CREATE                            = 0x2\n\tXATTR_NODEFAULT                         = 0x10\n\tXATTR_NOFOLLOW                          = 0x1\n\tXATTR_NOSECURITY                        = 0x8\n\tXATTR_REPLACE                           = 0x4\n\tXATTR_SHOWCOMPRESSION                   = 0x20\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADARCH        = syscall.Errno(0x56)\n\tEBADEXEC        = syscall.Errno(0x55)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMACHO       = syscall.Errno(0x58)\n\tEBADMSG         = syscall.Errno(0x5e)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x59)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDEVERR         = syscall.Errno(0x53)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x5a)\n\tEILSEQ          = syscall.Errno(0x5c)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x6a)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5f)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x60)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x61)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5b)\n\tENOPOLICY       = syscall.Errno(0x67)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x62)\n\tENOSTR          = syscall.Errno(0x63)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x68)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x66)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x69)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x64)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEPWROFF         = syscall.Errno(0x52)\n\tEQFULL          = syscall.Errno(0x6a)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHLIBVERS      = syscall.Errno(0x57)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x65)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EPWROFF\", \"device power is off\"},\n\t{83, \"EDEVERR\", \"device error\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EBADEXEC\", \"bad executable (or shared library)\"},\n\t{86, \"EBADARCH\", \"bad CPU type in executable\"},\n\t{87, \"ESHLIBVERS\", \"shared library version mismatch\"},\n\t{88, \"EBADMACHO\", \"malformed Mach-o file\"},\n\t{89, \"ECANCELED\", \"operation canceled\"},\n\t{90, \"EIDRM\", \"identifier removed\"},\n\t{91, \"ENOMSG\", \"no message of desired type\"},\n\t{92, \"EILSEQ\", \"illegal byte sequence\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EBADMSG\", \"bad message\"},\n\t{95, \"EMULTIHOP\", \"EMULTIHOP (Reserved)\"},\n\t{96, \"ENODATA\", \"no message available on STREAM\"},\n\t{97, \"ENOLINK\", \"ENOLINK (Reserved)\"},\n\t{98, \"ENOSR\", \"no STREAM resources\"},\n\t{99, \"ENOSTR\", \"not a STREAM\"},\n\t{100, \"EPROTO\", \"protocol error\"},\n\t{101, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{102, \"EOPNOTSUPP\", \"operation not supported on socket\"},\n\t{103, \"ENOPOLICY\", \"policy not found\"},\n\t{104, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{105, \"EOWNERDEAD\", \"previous owner died\"},\n\t{106, \"EQFULL\", \"interface output queue is full\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && dragonfly\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ATM                            = 0x1e\n\tAF_BLUETOOTH                      = 0x21\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x23\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x1c\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x22\n\tAF_NATM                           = 0x1d\n\tAF_NETBIOS                        = 0x6\n\tAF_NETGRAPH                       = 0x20\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x18\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0104279\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044272\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSEESENT                      = 0x40044276\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x2000427a\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044278\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x8010427b\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044273\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCSSEESENT                      = 0x80044277\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x8\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DEFAULTBUFSIZE                = 0x1000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x80000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MAX_CLONES                    = 0x80\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MOD                           = 0x90\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBPF_XOR                           = 0xa0\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_MONOTONIC                   = 0x4\n\tCLOCK_MONOTONIC_FAST              = 0xc\n\tCLOCK_MONOTONIC_PRECISE           = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID          = 0xf\n\tCLOCK_PROF                        = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_REALTIME_FAST               = 0xa\n\tCLOCK_REALTIME_PRECISE            = 0x9\n\tCLOCK_SECOND                      = 0xd\n\tCLOCK_THREAD_CPUTIME_ID           = 0xe\n\tCLOCK_UPTIME                      = 0x5\n\tCLOCK_UPTIME_FAST                 = 0x8\n\tCLOCK_UPTIME_PRECISE              = 0x7\n\tCLOCK_VIRTUAL                     = 0x1\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x30000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB            = 0xff\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_BLUETOOTH_LE_LL               = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR     = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR       = 0xfe\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CHDLC                         = 0x68\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DBUS                          = 0xe7\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_DVB_CI                        = 0xeb\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_EPON                          = 0x103\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HHDLC                         = 0x79\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NOFCS            = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_INFINIBAND                    = 0xf7\n\tDLT_IPFILTER                      = 0x74\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPMI_HPM_2                    = 0x104\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPOIB                         = 0xf2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_ISO_14443                     = 0x108\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_ATM_CEMIC             = 0xee\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL          = 0xea\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_SRX_E2E               = 0xe9\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_JUNIPER_VS                    = 0xe8\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MATCHING_MAX                  = 0x109\n\tDLT_MATCHING_MIN                  = 0x68\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPEG_2_TS                     = 0xf3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_MUX27010                      = 0xec\n\tDLT_NETANALYZER                   = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT       = 0xf1\n\tDLT_NETLINK                       = 0xfd\n\tDLT_NFC_LLCP                      = 0xf5\n\tDLT_NFLOG                         = 0xef\n\tDLT_NG40                          = 0xf4\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PKTAP                         = 0x102\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PROFIBUS_DL                   = 0x101\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RDS                           = 0x109\n\tDLT_REDBACK_SMARTEDGE             = 0x20\n\tDLT_RIO                           = 0x7c\n\tDLT_RTAC_SERIAL                   = 0xfa\n\tDLT_SCCP                          = 0x8e\n\tDLT_SCTP                          = 0xf8\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_STANAG_5066_D_PDU             = 0xed\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USB_FREEBSD                   = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDLT_WATTSTOPPER_DLM               = 0x107\n\tDLT_WIHART                        = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU           = 0xfc\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDLT_ZWAVE_R1_R2                   = 0x105\n\tDLT_ZWAVE_R3                      = 0x106\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DBF                            = 0xf\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_EXCEPT                     = -0x8\n\tEVFILT_FS                         = -0xa\n\tEVFILT_MARKER                     = 0xf\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0xa\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_USER                       = -0x9\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_HUP                            = 0x800\n\tEV_NODATA                         = 0x1000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTEXIT_LWP                       = 0x10000\n\tEXTEXIT_PROC                      = 0x0\n\tEXTEXIT_SETINT                    = 0x1\n\tEXTEXIT_SIMPLE                    = 0x0\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUP2FD                          = 0xa\n\tF_DUP2FD_CLOEXEC                  = 0x12\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0x11\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_ALTPHYS                       = 0x4000\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x318e72\n\tIFF_DEBUG                         = 0x4\n\tIFF_IDIRECT                       = 0x200000\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MONITOR                       = 0x40000\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NPOLLING                      = 0x100000\n\tIFF_OACTIVE                       = 0x400\n\tIFF_OACTIVE_COMPAT                = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_POLLING                       = 0x10000\n\tIFF_POLLING_COMPAT                = 0x10000\n\tIFF_PPROMISC                      = 0x20000\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_SMART                         = 0x20\n\tIFF_STATICARP                     = 0x80000\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xf3\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_MASK                   = 0xfffffffe\n\tIPPROTO_3PC                       = 0x22\n\tIPPROTO_ADFS                      = 0x44\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_AHIP                      = 0x3d\n\tIPPROTO_APES                      = 0x63\n\tIPPROTO_ARGUS                     = 0xd\n\tIPPROTO_AX25                      = 0x5d\n\tIPPROTO_BHA                       = 0x31\n\tIPPROTO_BLT                       = 0x1e\n\tIPPROTO_BRSATMON                  = 0x4c\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_CFTP                      = 0x3e\n\tIPPROTO_CHAOS                     = 0x10\n\tIPPROTO_CMTP                      = 0x26\n\tIPPROTO_CPHB                      = 0x49\n\tIPPROTO_CPNX                      = 0x48\n\tIPPROTO_DDP                       = 0x25\n\tIPPROTO_DGP                       = 0x56\n\tIPPROTO_DIVERT                    = 0xfe\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_EMCON                     = 0xe\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GMTP                      = 0x64\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HELLO                     = 0x3f\n\tIPPROTO_HMP                       = 0x14\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IDPR                      = 0x23\n\tIPPROTO_IDRP                      = 0x2d\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IGP                       = 0x55\n\tIPPROTO_IGRP                      = 0x58\n\tIPPROTO_IL                        = 0x28\n\tIPPROTO_INLSP                     = 0x34\n\tIPPROTO_INP                       = 0x20\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPCV                      = 0x47\n\tIPPROTO_IPEIP                     = 0x5e\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPPC                      = 0x43\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IRTP                      = 0x1c\n\tIPPROTO_KRYPTOLAN                 = 0x41\n\tIPPROTO_LARP                      = 0x5b\n\tIPPROTO_LEAF1                     = 0x19\n\tIPPROTO_LEAF2                     = 0x1a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MEAS                      = 0x13\n\tIPPROTO_MHRP                      = 0x30\n\tIPPROTO_MICP                      = 0x5f\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MTP                       = 0x5c\n\tIPPROTO_MUX                       = 0x12\n\tIPPROTO_ND                        = 0x4d\n\tIPPROTO_NHRP                      = 0x36\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_NSP                       = 0x1f\n\tIPPROTO_NVPII                     = 0xb\n\tIPPROTO_OSPFIGP                   = 0x59\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PGM                       = 0x71\n\tIPPROTO_PIGP                      = 0x9\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PRM                       = 0x15\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_PVP                       = 0x4b\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_RCCMON                    = 0xa\n\tIPPROTO_RDP                       = 0x1b\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_RVD                       = 0x42\n\tIPPROTO_SATEXPAK                  = 0x40\n\tIPPROTO_SATMON                    = 0x45\n\tIPPROTO_SCCSP                     = 0x60\n\tIPPROTO_SDRP                      = 0x2a\n\tIPPROTO_SEP                       = 0x21\n\tIPPROTO_SKIP                      = 0x39\n\tIPPROTO_SRPC                      = 0x5a\n\tIPPROTO_ST                        = 0x7\n\tIPPROTO_SVMTP                     = 0x52\n\tIPPROTO_SWIPE                     = 0x35\n\tIPPROTO_TCF                       = 0x57\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TLSP                      = 0x38\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_TPXX                      = 0x27\n\tIPPROTO_TRUNK1                    = 0x17\n\tIPPROTO_TRUNK2                    = 0x18\n\tIPPROTO_TTP                       = 0x54\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UNKNOWN                   = 0x102\n\tIPPROTO_VINES                     = 0x53\n\tIPPROTO_VISA                      = 0x46\n\tIPPROTO_VMTP                      = 0x51\n\tIPPROTO_WBEXPAK                   = 0x4f\n\tIPPROTO_WBMON                     = 0x4e\n\tIPPROTO_WSN                       = 0x4a\n\tIPPROTO_XNET                      = 0xf\n\tIPPROTO_XTP                       = 0x24\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_BINDV6ONLY                   = 0x1b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_FW_ADD                       = 0x1e\n\tIPV6_FW_DEL                       = 0x1f\n\tIPV6_FW_FLUSH                     = 0x20\n\tIPV6_FW_GET                       = 0x22\n\tIPV6_FW_ZERO                      = 0x21\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHLIM                      = 0x28\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MSFILTER                     = 0x4a\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PKTOPTIONS                   = 0x34\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_PREFER_TEMPADDR              = 0x3f\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_DUMMYNET_CONFIGURE             = 0x3c\n\tIP_DUMMYNET_DEL                   = 0x3d\n\tIP_DUMMYNET_FLUSH                 = 0x3e\n\tIP_DUMMYNET_GET                   = 0x40\n\tIP_FW_ADD                         = 0x32\n\tIP_FW_DEL                         = 0x33\n\tIP_FW_FLUSH                       = 0x34\n\tIP_FW_GET                         = 0x36\n\tIP_FW_RESETLOG                    = 0x37\n\tIP_FW_TBL_ADD                     = 0x2a\n\tIP_FW_TBL_CREATE                  = 0x28\n\tIP_FW_TBL_DEL                     = 0x2b\n\tIP_FW_TBL_DESTROY                 = 0x29\n\tIP_FW_TBL_EXPIRE                  = 0x2f\n\tIP_FW_TBL_FLUSH                   = 0x2c\n\tIP_FW_TBL_GET                     = 0x2d\n\tIP_FW_TBL_ZERO                    = 0x2e\n\tIP_FW_X                           = 0x31\n\tIP_FW_ZERO                        = 0x35\n\tIP_HDRINCL                        = 0x2\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x42\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_MULTICAST_VIF                  = 0xe\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x41\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RSVP_OFF                       = 0x10\n\tIP_RSVP_ON                        = 0xf\n\tIP_RSVP_VIF_OFF                   = 0x12\n\tIP_RSVP_VIF_ON                    = 0x11\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_AUTOSYNC                     = 0x7\n\tMADV_CONTROL_END                  = 0xb\n\tMADV_CONTROL_START                = 0xa\n\tMADV_CORE                         = 0x9\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x5\n\tMADV_INVAL                        = 0xa\n\tMADV_NOCORE                       = 0x8\n\tMADV_NORMAL                       = 0x0\n\tMADV_NOSYNC                       = 0x6\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SETMAP                       = 0xb\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_NOCORE                        = 0x20000\n\tMAP_NOEXTEND                      = 0x100\n\tMAP_NORESERVE                     = 0x40\n\tMAP_NOSYNC                        = 0x800\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_SIZEALIGN                     = 0x40000\n\tMAP_STACK                         = 0x400\n\tMAP_TRYFIXED                      = 0x10000\n\tMAP_VPAGETABLE                    = 0x2000\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_AUTOMOUNTED                   = 0x20\n\tMNT_CMDFLAGS                      = 0xf0000\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x20000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_IGNORE                        = 0x800000\n\tMNT_LAZY                          = 0x4\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x10000000\n\tMNT_NOCLUSTERR                    = 0x40000000\n\tMNT_NOCLUSTERW                    = 0x80000000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOSYMFOLLOW                   = 0x400000\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x200000\n\tMNT_SUIDDIR                       = 0x100000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_TRIM                          = 0x1000000\n\tMNT_UPDATE                        = 0x10000\n\tMNT_USER                          = 0x8000\n\tMNT_VISFLAGMASK                   = 0xf1f0ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_CMSG_CLOEXEC                  = 0x1000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOF                           = 0x100\n\tMSG_EOR                           = 0x8\n\tMSG_FBLOCKING                     = 0x10000\n\tMSG_FMASK                         = 0xffff0000\n\tMSG_FNONBLOCKING                  = 0x20000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_SYNC                          = 0x800\n\tMSG_TRUNC                         = 0x10\n\tMSG_UNUSED09                      = 0x200\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x0\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_MAXID                      = 0x4\n\tNFDBITS                           = 0x40\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FFAND                        = 0x40000000\n\tNOTE_FFCOPY                       = 0xc0000000\n\tNOTE_FFCTRLMASK                   = 0xc0000000\n\tNOTE_FFLAGSMASK                   = 0xffffff\n\tNOTE_FFNOP                        = 0x0\n\tNOTE_FFOR                         = 0x80000000\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x2\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRIGGER                      = 0x1000000\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x20000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x10000\n\tO_DIRECTORY                       = 0x8000000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FAPPEND                         = 0x100000\n\tO_FASYNCWRITE                     = 0x800000\n\tO_FBLOCKING                       = 0x40000\n\tO_FMASK                           = 0xfc0000\n\tO_FNONBLOCKING                    = 0x80000\n\tO_FOFFSET                         = 0x200000\n\tO_FSYNC                           = 0x80\n\tO_FSYNCWRITE                      = 0x400000\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0xb\n\tRTAX_MPLS1                        = 0x8\n\tRTAX_MPLS2                        = 0x9\n\tRTAX_MPLS3                        = 0xa\n\tRTAX_NETMASK                      = 0x2\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_MPLS1                         = 0x100\n\tRTA_MPLS2                         = 0x200\n\tRTA_MPLS3                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPLSOPS                       = 0x1000000\n\tRTF_MULTICAST                     = 0x800000\n\tRTF_PINNED                        = 0x100000\n\tRTF_PRCLONING                     = 0x10000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x40000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_WASCLONED                     = 0x20000\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DELMADDR                      = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x12\n\tRTM_IFANNOUNCE                    = 0x11\n\tRTM_IFINFO                        = 0xe\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_NEWMADDR                      = 0xf\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_VERSION                       = 0x7\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_IWCAPSEGS                     = 0x400\n\tRTV_IWMAXSEGS                     = 0x200\n\tRTV_MSL                           = 0x100\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x3\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x2\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCALIFADDR                      = 0x8118691b\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDLIFADDR                      = 0x8118691d\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETSGCNT                      = 0xc0207210\n\tSIOCGETVIFCNT                     = 0xc028720f\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFALIAS                      = 0xc0406929\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCAP                        = 0xc020691f\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc0206926\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFINDEX                      = 0xc0206920\n\tSIOCGIFMEDIA                      = 0xc0306938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc0206933\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPDSTADDR                   = 0xc0206948\n\tSIOCGIFPHYS                       = 0xc0206935\n\tSIOCGIFPOLLCPU                    = 0xc020697e\n\tSIOCGIFPSRCADDR                   = 0xc0206947\n\tSIOCGIFSTATUS                     = 0xc331693b\n\tSIOCGIFTSOLEN                     = 0xc0206980\n\tSIOCGLIFADDR                      = 0xc118691c\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPRIVATE_0                    = 0xc0206950\n\tSIOCGPRIVATE_1                    = 0xc0206951\n\tSIOCIFCREATE                      = 0xc020697a\n\tSIOCIFCREATE2                     = 0xc020697c\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFCAP                        = 0x8020691e\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020693c\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x80206934\n\tSIOCSIFNAME                       = 0x80206928\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSIFPHYS                       = 0x80206936\n\tSIOCSIFPOLLCPU                    = 0x8020697d\n\tSIOCSIFTSOLEN                     = 0x8020697f\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_MAXADDRLEN                   = 0xff\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_CPUHINT                        = 0x1030\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_RERROR                         = 0x2000\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDSPACE                       = 0x100a\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_TIMESTAMP                      = 0x400\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDB                            = 0x9000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTAB0                              = 0x0\n\tTAB3                              = 0x4\n\tTABDLY                            = 0x4\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCP_FASTKEEP                      = 0x80\n\tTCP_KEEPCNT                       = 0x400\n\tTCP_KEEPIDLE                      = 0x100\n\tTCP_KEEPINIT                      = 0x20\n\tTCP_KEEPINTVL                     = 0x200\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXHLEN                       = 0x3c\n\tTCP_MAXOLEN                       = 0x28\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MINMSS                        = 0x100\n\tTCP_MIN_WINSHIFT                  = 0x5\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOOPT                         = 0x8\n\tTCP_NOPUSH                        = 0x4\n\tTCP_SIGNATURE_ENABLE              = 0x10\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGDRAINWAIT                    = 0x40047456\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCISPTMASTER                    = 0x20007455\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGDTRWAIT                     = 0x4004745a\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x40047403\n\tTIOCMODS                          = 0x80047404\n\tTIOCMSDTRWAIT                     = 0x8004745b\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDRAINWAIT                    = 0x80047457\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCTIMESTAMP                     = 0x40107459\n\tTIOCUCNTL                         = 0x80047466\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x1\n\tUTIME_OMIT                        = -0x2\n\tVCHECKPT                          = 0x13\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVERASE2                           = 0x7\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_BCACHE_SIZE_MAX                = 0x0\n\tVM_SWZONE_SIZE_MAX                = 0x4000000000\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWCONTINUED                        = 0x4\n\tWCOREFLAG                         = 0x80\n\tWEXITED                           = 0x10\n\tWLINUXCLONE                       = 0x80000000\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x8\n\tWSTOPPED                          = 0x2\n\tWTRAPPED                          = 0x20\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEASYNC          = syscall.Errno(0x63)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x63)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEDIUM       = syscall.Errno(0x5d)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT     = syscall.Signal(0x6)\n\tSIGALRM     = syscall.Signal(0xe)\n\tSIGBUS      = syscall.Signal(0xa)\n\tSIGCHLD     = syscall.Signal(0x14)\n\tSIGCKPT     = syscall.Signal(0x21)\n\tSIGCKPTEXIT = syscall.Signal(0x22)\n\tSIGCONT     = syscall.Signal(0x13)\n\tSIGEMT      = syscall.Signal(0x7)\n\tSIGFPE      = syscall.Signal(0x8)\n\tSIGHUP      = syscall.Signal(0x1)\n\tSIGILL      = syscall.Signal(0x4)\n\tSIGINFO     = syscall.Signal(0x1d)\n\tSIGINT      = syscall.Signal(0x2)\n\tSIGIO       = syscall.Signal(0x17)\n\tSIGIOT      = syscall.Signal(0x6)\n\tSIGKILL     = syscall.Signal(0x9)\n\tSIGPIPE     = syscall.Signal(0xd)\n\tSIGPROF     = syscall.Signal(0x1b)\n\tSIGQUIT     = syscall.Signal(0x3)\n\tSIGSEGV     = syscall.Signal(0xb)\n\tSIGSTOP     = syscall.Signal(0x11)\n\tSIGSYS      = syscall.Signal(0xc)\n\tSIGTERM     = syscall.Signal(0xf)\n\tSIGTHR      = syscall.Signal(0x20)\n\tSIGTRAP     = syscall.Signal(0x5)\n\tSIGTSTP     = syscall.Signal(0x12)\n\tSIGTTIN     = syscall.Signal(0x15)\n\tSIGTTOU     = syscall.Signal(0x16)\n\tSIGURG      = syscall.Signal(0x10)\n\tSIGUSR1     = syscall.Signal(0x1e)\n\tSIGUSR2     = syscall.Signal(0x1f)\n\tSIGVTALRM   = syscall.Signal(0x1a)\n\tSIGWINCH    = syscall.Signal(0x1c)\n\tSIGXCPU     = syscall.Signal(0x18)\n\tSIGXFSZ     = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOMEDIUM\", \"no medium found\"},\n\t{99, \"EASYNC\", \"unknown error: 99\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread Scheduler\"},\n\t{33, \"SIGCKPT\", \"checkPoint\"},\n\t{34, \"SIGCKPTEXIT\", \"checkPointExit\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0084279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4004427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4008426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x400c4280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80084267\n\tBIOCSETFNR                     = 0x80084282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8008427b\n\tBIOCSETZBUF                    = 0x800c4281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8008426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x4\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc144648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFRONTSTUFF                = 0x40086486\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x804c6490\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCZONECMD                    = 0xc06c648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNFDBITS                        = 0x20\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETFSBASE                   = 0x47\n\tPT_GETGSBASE                   = 0x49\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GETXMMREGS                  = 0x40\n\tPT_GETXSTATE                   = 0x45\n\tPT_GETXSTATE_INFO              = 0x44\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETFSBASE                   = 0x48\n\tPT_SETGSBASE                   = 0x4a\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SETXMMREGS                  = 0x41\n\tPT_SETXSTATE                   = 0x46\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80246987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80246989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc01c697b\n\tSIOCGETSGCNT                   = 0xc0147210\n\tSIOCGETVIFCNT                  = 0xc014720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0086924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc024698a\n\tSIOCGIFGROUP                   = 0xc0246988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0286938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc028698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc00c6978\n\tSIOCSDRVSPEC                   = 0x801c697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40087459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVM_BCACHE_SIZE_MAX             = 0x70e0000\n\tVM_SWZONE_SIZE_MAX             = 0x2280000\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0104279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4008427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x40184280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80104267\n\tBIOCSETFNR                     = 0x80104282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8010427b\n\tBIOCSETZBUF                    = 0x80184281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x8\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffffffffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc148648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFRONTSTUFF                = 0x40086486\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x80506490\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCZONECMD                    = 0xc080648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_32BIT                      = 0x80000\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNFDBITS                        = 0x40\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETFSBASE                   = 0x47\n\tPT_GETGSBASE                   = 0x49\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GETXSTATE                   = 0x45\n\tPT_GETXSTATE_INFO              = 0x44\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETFSBASE                   = 0x48\n\tPT_SETGSBASE                   = 0x4a\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SETXSTATE                   = 0x46\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80286987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80286989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc028697b\n\tSIOCGETSGCNT                   = 0xc0207210\n\tSIOCGETVIFCNT                  = 0xc028720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0106924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc028698a\n\tSIOCGIFGROUP                   = 0xc0286988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0306938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc030698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc0106978\n\tSIOCSDRVSPEC                   = 0x8028697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go",
    "content": "// mkerrors.sh\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0084279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4004427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x400c4280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80084267\n\tBIOCSETFNR                     = 0x80084282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8008427b\n\tBIOCSETZBUF                    = 0x800c4281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x4\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc148648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFRONTSTUFF                = 0x40086486\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x804c6490\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCZONECMD                    = 0xc078648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNFDBITS                        = 0x20\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GETVFPREGS                  = 0x40\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SETVFPREGS                  = 0x41\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80246987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80246989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc01c697b\n\tSIOCGETSGCNT                   = 0xc0147210\n\tSIOCGETVIFCNT                  = 0xc014720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0086924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc024698a\n\tSIOCGIFGROUP                   = 0xc0246988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0286938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc028698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc00c6978\n\tSIOCSDRVSPEC                   = 0x801c697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2a\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR02                    = 0x2b\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB38400                         = 0x9600\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0104279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4008427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x40184280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80104267\n\tBIOCSETFNR                     = 0x80104282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8010427b\n\tBIOCSETZBUF                    = 0x80184281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x8\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffffffffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc148648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFRONTSTUFF                = 0x40086486\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x80506490\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCZONECMD                    = 0xc080648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f52\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_32BIT                      = 0x80000\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0xd0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNFDBITS                        = 0x40\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_RNH_LOCKED                 = 0x40000000\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80286987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80286989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc028697b\n\tSIOCGETSGCNT                   = 0xc0207210\n\tSIOCGETVIFCNT                  = 0xc028720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0106924\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc028698a\n\tSIOCGIFGROUP                   = 0xc0286988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0306938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc030698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc0106978\n\tSIOCSDRVSPEC                   = 0x8028697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_INFO                       = 0x20\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVM_BCACHE_SIZE_MAX             = 0x19000000\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_freebsd_riscv64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && freebsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                   = 0x10\n\tAF_ARP                         = 0x23\n\tAF_ATM                         = 0x1e\n\tAF_BLUETOOTH                   = 0x24\n\tAF_CCITT                       = 0xa\n\tAF_CHAOS                       = 0x5\n\tAF_CNT                         = 0x15\n\tAF_COIP                        = 0x14\n\tAF_DATAKIT                     = 0x9\n\tAF_DECnet                      = 0xc\n\tAF_DLI                         = 0xd\n\tAF_E164                        = 0x1a\n\tAF_ECMA                        = 0x8\n\tAF_HYLINK                      = 0xf\n\tAF_HYPERV                      = 0x2b\n\tAF_IEEE80211                   = 0x25\n\tAF_IMPLINK                     = 0x3\n\tAF_INET                        = 0x2\n\tAF_INET6                       = 0x1c\n\tAF_INET6_SDP                   = 0x2a\n\tAF_INET_SDP                    = 0x28\n\tAF_IPX                         = 0x17\n\tAF_ISDN                        = 0x1a\n\tAF_ISO                         = 0x7\n\tAF_LAT                         = 0xe\n\tAF_LINK                        = 0x12\n\tAF_LOCAL                       = 0x1\n\tAF_MAX                         = 0x2b\n\tAF_NATM                        = 0x1d\n\tAF_NETBIOS                     = 0x6\n\tAF_NETGRAPH                    = 0x20\n\tAF_OSI                         = 0x7\n\tAF_PUP                         = 0x4\n\tAF_ROUTE                       = 0x11\n\tAF_SCLUSTER                    = 0x22\n\tAF_SIP                         = 0x18\n\tAF_SLOW                        = 0x21\n\tAF_SNA                         = 0xb\n\tAF_UNIX                        = 0x1\n\tAF_UNSPEC                      = 0x0\n\tAF_VENDOR00                    = 0x27\n\tAF_VENDOR01                    = 0x29\n\tAF_VENDOR03                    = 0x2d\n\tAF_VENDOR04                    = 0x2f\n\tAF_VENDOR05                    = 0x31\n\tAF_VENDOR06                    = 0x33\n\tAF_VENDOR07                    = 0x35\n\tAF_VENDOR08                    = 0x37\n\tAF_VENDOR09                    = 0x39\n\tAF_VENDOR10                    = 0x3b\n\tAF_VENDOR11                    = 0x3d\n\tAF_VENDOR12                    = 0x3f\n\tAF_VENDOR13                    = 0x41\n\tAF_VENDOR14                    = 0x43\n\tAF_VENDOR15                    = 0x45\n\tAF_VENDOR16                    = 0x47\n\tAF_VENDOR17                    = 0x49\n\tAF_VENDOR18                    = 0x4b\n\tAF_VENDOR19                    = 0x4d\n\tAF_VENDOR20                    = 0x4f\n\tAF_VENDOR21                    = 0x51\n\tAF_VENDOR22                    = 0x53\n\tAF_VENDOR23                    = 0x55\n\tAF_VENDOR24                    = 0x57\n\tAF_VENDOR25                    = 0x59\n\tAF_VENDOR26                    = 0x5b\n\tAF_VENDOR27                    = 0x5d\n\tAF_VENDOR28                    = 0x5f\n\tAF_VENDOR29                    = 0x61\n\tAF_VENDOR30                    = 0x63\n\tAF_VENDOR31                    = 0x65\n\tAF_VENDOR32                    = 0x67\n\tAF_VENDOR33                    = 0x69\n\tAF_VENDOR34                    = 0x6b\n\tAF_VENDOR35                    = 0x6d\n\tAF_VENDOR36                    = 0x6f\n\tAF_VENDOR37                    = 0x71\n\tAF_VENDOR38                    = 0x73\n\tAF_VENDOR39                    = 0x75\n\tAF_VENDOR40                    = 0x77\n\tAF_VENDOR41                    = 0x79\n\tAF_VENDOR42                    = 0x7b\n\tAF_VENDOR43                    = 0x7d\n\tAF_VENDOR44                    = 0x7f\n\tAF_VENDOR45                    = 0x81\n\tAF_VENDOR46                    = 0x83\n\tAF_VENDOR47                    = 0x85\n\tALTWERASE                      = 0x200\n\tB0                             = 0x0\n\tB1000000                       = 0xf4240\n\tB110                           = 0x6e\n\tB115200                        = 0x1c200\n\tB1200                          = 0x4b0\n\tB134                           = 0x86\n\tB14400                         = 0x3840\n\tB150                           = 0x96\n\tB1500000                       = 0x16e360\n\tB1800                          = 0x708\n\tB19200                         = 0x4b00\n\tB200                           = 0xc8\n\tB2000000                       = 0x1e8480\n\tB230400                        = 0x38400\n\tB2400                          = 0x960\n\tB2500000                       = 0x2625a0\n\tB28800                         = 0x7080\n\tB300                           = 0x12c\n\tB3000000                       = 0x2dc6c0\n\tB3500000                       = 0x3567e0\n\tB38400                         = 0x9600\n\tB4000000                       = 0x3d0900\n\tB460800                        = 0x70800\n\tB4800                          = 0x12c0\n\tB50                            = 0x32\n\tB500000                        = 0x7a120\n\tB57600                         = 0xe100\n\tB600                           = 0x258\n\tB7200                          = 0x1c20\n\tB75                            = 0x4b\n\tB76800                         = 0x12c00\n\tB921600                        = 0xe1000\n\tB9600                          = 0x2580\n\tBIOCFEEDBACK                   = 0x8004427c\n\tBIOCFLUSH                      = 0x20004268\n\tBIOCGBLEN                      = 0x40044266\n\tBIOCGDIRECTION                 = 0x40044276\n\tBIOCGDLT                       = 0x4004426a\n\tBIOCGDLTLIST                   = 0xc0104279\n\tBIOCGETBUFMODE                 = 0x4004427d\n\tBIOCGETIF                      = 0x4020426b\n\tBIOCGETZMAX                    = 0x4008427f\n\tBIOCGHDRCMPLT                  = 0x40044274\n\tBIOCGRSIG                      = 0x40044272\n\tBIOCGRTIMEOUT                  = 0x4010426e\n\tBIOCGSEESENT                   = 0x40044276\n\tBIOCGSTATS                     = 0x4008426f\n\tBIOCGTSTAMP                    = 0x40044283\n\tBIOCIMMEDIATE                  = 0x80044270\n\tBIOCLOCK                       = 0x2000427a\n\tBIOCPROMISC                    = 0x20004269\n\tBIOCROTZBUF                    = 0x40184280\n\tBIOCSBLEN                      = 0xc0044266\n\tBIOCSDIRECTION                 = 0x80044277\n\tBIOCSDLT                       = 0x80044278\n\tBIOCSETBUFMODE                 = 0x8004427e\n\tBIOCSETF                       = 0x80104267\n\tBIOCSETFNR                     = 0x80104282\n\tBIOCSETIF                      = 0x8020426c\n\tBIOCSETVLANPCP                 = 0x80044285\n\tBIOCSETWF                      = 0x8010427b\n\tBIOCSETZBUF                    = 0x80184281\n\tBIOCSHDRCMPLT                  = 0x80044275\n\tBIOCSRSIG                      = 0x80044273\n\tBIOCSRTIMEOUT                  = 0x8010426d\n\tBIOCSSEESENT                   = 0x80044277\n\tBIOCSTSTAMP                    = 0x80044284\n\tBIOCVERSION                    = 0x40044271\n\tBPF_A                          = 0x10\n\tBPF_ABS                        = 0x20\n\tBPF_ADD                        = 0x0\n\tBPF_ALIGNMENT                  = 0x8\n\tBPF_ALU                        = 0x4\n\tBPF_AND                        = 0x50\n\tBPF_B                          = 0x10\n\tBPF_BUFMODE_BUFFER             = 0x1\n\tBPF_BUFMODE_ZBUF               = 0x2\n\tBPF_DIV                        = 0x30\n\tBPF_H                          = 0x8\n\tBPF_IMM                        = 0x0\n\tBPF_IND                        = 0x40\n\tBPF_JA                         = 0x0\n\tBPF_JEQ                        = 0x10\n\tBPF_JGE                        = 0x30\n\tBPF_JGT                        = 0x20\n\tBPF_JMP                        = 0x5\n\tBPF_JSET                       = 0x40\n\tBPF_K                          = 0x0\n\tBPF_LD                         = 0x0\n\tBPF_LDX                        = 0x1\n\tBPF_LEN                        = 0x80\n\tBPF_LSH                        = 0x60\n\tBPF_MAJOR_VERSION              = 0x1\n\tBPF_MAXBUFSIZE                 = 0x80000\n\tBPF_MAXINSNS                   = 0x200\n\tBPF_MEM                        = 0x60\n\tBPF_MEMWORDS                   = 0x10\n\tBPF_MINBUFSIZE                 = 0x20\n\tBPF_MINOR_VERSION              = 0x1\n\tBPF_MISC                       = 0x7\n\tBPF_MOD                        = 0x90\n\tBPF_MSH                        = 0xa0\n\tBPF_MUL                        = 0x20\n\tBPF_NEG                        = 0x80\n\tBPF_OR                         = 0x40\n\tBPF_RELEASE                    = 0x30bb6\n\tBPF_RET                        = 0x6\n\tBPF_RSH                        = 0x70\n\tBPF_ST                         = 0x2\n\tBPF_STX                        = 0x3\n\tBPF_SUB                        = 0x10\n\tBPF_TAX                        = 0x0\n\tBPF_TXA                        = 0x80\n\tBPF_T_BINTIME                  = 0x2\n\tBPF_T_BINTIME_FAST             = 0x102\n\tBPF_T_BINTIME_MONOTONIC        = 0x202\n\tBPF_T_BINTIME_MONOTONIC_FAST   = 0x302\n\tBPF_T_FAST                     = 0x100\n\tBPF_T_FLAG_MASK                = 0x300\n\tBPF_T_FORMAT_MASK              = 0x3\n\tBPF_T_MICROTIME                = 0x0\n\tBPF_T_MICROTIME_FAST           = 0x100\n\tBPF_T_MICROTIME_MONOTONIC      = 0x200\n\tBPF_T_MICROTIME_MONOTONIC_FAST = 0x300\n\tBPF_T_MONOTONIC                = 0x200\n\tBPF_T_MONOTONIC_FAST           = 0x300\n\tBPF_T_NANOTIME                 = 0x1\n\tBPF_T_NANOTIME_FAST            = 0x101\n\tBPF_T_NANOTIME_MONOTONIC       = 0x201\n\tBPF_T_NANOTIME_MONOTONIC_FAST  = 0x301\n\tBPF_T_NONE                     = 0x3\n\tBPF_T_NORMAL                   = 0x0\n\tBPF_W                          = 0x0\n\tBPF_X                          = 0x8\n\tBPF_XOR                        = 0xa0\n\tBRKINT                         = 0x2\n\tCAP_ACCEPT                     = 0x200000020000000\n\tCAP_ACL_CHECK                  = 0x400000000010000\n\tCAP_ACL_DELETE                 = 0x400000000020000\n\tCAP_ACL_GET                    = 0x400000000040000\n\tCAP_ACL_SET                    = 0x400000000080000\n\tCAP_ALL0                       = 0x20007ffffffffff\n\tCAP_ALL1                       = 0x4000000001fffff\n\tCAP_BIND                       = 0x200000040000000\n\tCAP_BINDAT                     = 0x200008000000400\n\tCAP_CHFLAGSAT                  = 0x200000000001400\n\tCAP_CONNECT                    = 0x200000080000000\n\tCAP_CONNECTAT                  = 0x200010000000400\n\tCAP_CREATE                     = 0x200000000000040\n\tCAP_EVENT                      = 0x400000000000020\n\tCAP_EXTATTR_DELETE             = 0x400000000001000\n\tCAP_EXTATTR_GET                = 0x400000000002000\n\tCAP_EXTATTR_LIST               = 0x400000000004000\n\tCAP_EXTATTR_SET                = 0x400000000008000\n\tCAP_FCHDIR                     = 0x200000000000800\n\tCAP_FCHFLAGS                   = 0x200000000001000\n\tCAP_FCHMOD                     = 0x200000000002000\n\tCAP_FCHMODAT                   = 0x200000000002400\n\tCAP_FCHOWN                     = 0x200000000004000\n\tCAP_FCHOWNAT                   = 0x200000000004400\n\tCAP_FCNTL                      = 0x200000000008000\n\tCAP_FCNTL_ALL                  = 0x78\n\tCAP_FCNTL_GETFL                = 0x8\n\tCAP_FCNTL_GETOWN               = 0x20\n\tCAP_FCNTL_SETFL                = 0x10\n\tCAP_FCNTL_SETOWN               = 0x40\n\tCAP_FEXECVE                    = 0x200000000000080\n\tCAP_FLOCK                      = 0x200000000010000\n\tCAP_FPATHCONF                  = 0x200000000020000\n\tCAP_FSCK                       = 0x200000000040000\n\tCAP_FSTAT                      = 0x200000000080000\n\tCAP_FSTATAT                    = 0x200000000080400\n\tCAP_FSTATFS                    = 0x200000000100000\n\tCAP_FSYNC                      = 0x200000000000100\n\tCAP_FTRUNCATE                  = 0x200000000000200\n\tCAP_FUTIMES                    = 0x200000000200000\n\tCAP_FUTIMESAT                  = 0x200000000200400\n\tCAP_GETPEERNAME                = 0x200000100000000\n\tCAP_GETSOCKNAME                = 0x200000200000000\n\tCAP_GETSOCKOPT                 = 0x200000400000000\n\tCAP_IOCTL                      = 0x400000000000080\n\tCAP_IOCTLS_ALL                 = 0x7fffffffffffffff\n\tCAP_KQUEUE                     = 0x400000000100040\n\tCAP_KQUEUE_CHANGE              = 0x400000000100000\n\tCAP_KQUEUE_EVENT               = 0x400000000000040\n\tCAP_LINKAT_SOURCE              = 0x200020000000400\n\tCAP_LINKAT_TARGET              = 0x200000000400400\n\tCAP_LISTEN                     = 0x200000800000000\n\tCAP_LOOKUP                     = 0x200000000000400\n\tCAP_MAC_GET                    = 0x400000000000001\n\tCAP_MAC_SET                    = 0x400000000000002\n\tCAP_MKDIRAT                    = 0x200000000800400\n\tCAP_MKFIFOAT                   = 0x200000001000400\n\tCAP_MKNODAT                    = 0x200000002000400\n\tCAP_MMAP                       = 0x200000000000010\n\tCAP_MMAP_R                     = 0x20000000000001d\n\tCAP_MMAP_RW                    = 0x20000000000001f\n\tCAP_MMAP_RWX                   = 0x20000000000003f\n\tCAP_MMAP_RX                    = 0x20000000000003d\n\tCAP_MMAP_W                     = 0x20000000000001e\n\tCAP_MMAP_WX                    = 0x20000000000003e\n\tCAP_MMAP_X                     = 0x20000000000003c\n\tCAP_PDGETPID                   = 0x400000000000200\n\tCAP_PDKILL                     = 0x400000000000800\n\tCAP_PDWAIT                     = 0x400000000000400\n\tCAP_PEELOFF                    = 0x200001000000000\n\tCAP_POLL_EVENT                 = 0x400000000000020\n\tCAP_PREAD                      = 0x20000000000000d\n\tCAP_PWRITE                     = 0x20000000000000e\n\tCAP_READ                       = 0x200000000000001\n\tCAP_RECV                       = 0x200000000000001\n\tCAP_RENAMEAT_SOURCE            = 0x200000004000400\n\tCAP_RENAMEAT_TARGET            = 0x200040000000400\n\tCAP_RIGHTS_VERSION             = 0x0\n\tCAP_RIGHTS_VERSION_00          = 0x0\n\tCAP_SEEK                       = 0x20000000000000c\n\tCAP_SEEK_TELL                  = 0x200000000000004\n\tCAP_SEM_GETVALUE               = 0x400000000000004\n\tCAP_SEM_POST                   = 0x400000000000008\n\tCAP_SEM_WAIT                   = 0x400000000000010\n\tCAP_SEND                       = 0x200000000000002\n\tCAP_SETSOCKOPT                 = 0x200002000000000\n\tCAP_SHUTDOWN                   = 0x200004000000000\n\tCAP_SOCK_CLIENT                = 0x200007780000003\n\tCAP_SOCK_SERVER                = 0x200007f60000003\n\tCAP_SYMLINKAT                  = 0x200000008000400\n\tCAP_TTYHOOK                    = 0x400000000000100\n\tCAP_UNLINKAT                   = 0x200000010000400\n\tCAP_UNUSED0_44                 = 0x200080000000000\n\tCAP_UNUSED0_57                 = 0x300000000000000\n\tCAP_UNUSED1_22                 = 0x400000000200000\n\tCAP_UNUSED1_57                 = 0x500000000000000\n\tCAP_WRITE                      = 0x200000000000002\n\tCFLUSH                         = 0xf\n\tCLOCAL                         = 0x8000\n\tCLOCK_BOOTTIME                 = 0x5\n\tCLOCK_MONOTONIC                = 0x4\n\tCLOCK_MONOTONIC_COARSE         = 0xc\n\tCLOCK_MONOTONIC_FAST           = 0xc\n\tCLOCK_MONOTONIC_PRECISE        = 0xb\n\tCLOCK_PROCESS_CPUTIME_ID       = 0xf\n\tCLOCK_PROF                     = 0x2\n\tCLOCK_REALTIME                 = 0x0\n\tCLOCK_REALTIME_COARSE          = 0xa\n\tCLOCK_REALTIME_FAST            = 0xa\n\tCLOCK_REALTIME_PRECISE         = 0x9\n\tCLOCK_SECOND                   = 0xd\n\tCLOCK_THREAD_CPUTIME_ID        = 0xe\n\tCLOCK_UPTIME                   = 0x5\n\tCLOCK_UPTIME_FAST              = 0x8\n\tCLOCK_UPTIME_PRECISE           = 0x7\n\tCLOCK_VIRTUAL                  = 0x1\n\tCPUSTATES                      = 0x5\n\tCP_IDLE                        = 0x4\n\tCP_INTR                        = 0x3\n\tCP_NICE                        = 0x1\n\tCP_SYS                         = 0x2\n\tCP_USER                        = 0x0\n\tCREAD                          = 0x800\n\tCRTSCTS                        = 0x30000\n\tCS5                            = 0x0\n\tCS6                            = 0x100\n\tCS7                            = 0x200\n\tCS8                            = 0x300\n\tCSIZE                          = 0x300\n\tCSTART                         = 0x11\n\tCSTATUS                        = 0x14\n\tCSTOP                          = 0x13\n\tCSTOPB                         = 0x400\n\tCSUSP                          = 0x1a\n\tCTL_HW                         = 0x6\n\tCTL_KERN                       = 0x1\n\tCTL_MAXNAME                    = 0x18\n\tCTL_NET                        = 0x4\n\tDIOCGATTR                      = 0xc148648e\n\tDIOCGDELETE                    = 0x80106488\n\tDIOCGFLUSH                     = 0x20006487\n\tDIOCGFWHEADS                   = 0x40046483\n\tDIOCGFWSECTORS                 = 0x40046482\n\tDIOCGIDENT                     = 0x41006489\n\tDIOCGKERNELDUMP                = 0xc0986492\n\tDIOCGMEDIASIZE                 = 0x40086481\n\tDIOCGPHYSPATH                  = 0x4400648d\n\tDIOCGPROVIDERNAME              = 0x4400648a\n\tDIOCGSECTORSIZE                = 0x40046480\n\tDIOCGSTRIPEOFFSET              = 0x4008648c\n\tDIOCGSTRIPESIZE                = 0x4008648b\n\tDIOCSKERNELDUMP                = 0x80986491\n\tDIOCSKERNELDUMP_FREEBSD11      = 0x80046485\n\tDIOCSKERNELDUMP_FREEBSD12      = 0x80506490\n\tDIOCZONECMD                    = 0xc080648f\n\tDLT_A429                       = 0xb8\n\tDLT_A653_ICM                   = 0xb9\n\tDLT_AIRONET_HEADER             = 0x78\n\tDLT_AOS                        = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394     = 0x8a\n\tDLT_ARCNET                     = 0x7\n\tDLT_ARCNET_LINUX               = 0x81\n\tDLT_ATM_CLIP                   = 0x13\n\tDLT_ATM_RFC1483                = 0xb\n\tDLT_AURORA                     = 0x7e\n\tDLT_AX25                       = 0x3\n\tDLT_AX25_KISS                  = 0xca\n\tDLT_BACNET_MS_TP               = 0xa5\n\tDLT_BLUETOOTH_BREDR_BB         = 0xff\n\tDLT_BLUETOOTH_HCI_H4           = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9\n\tDLT_BLUETOOTH_LE_LL            = 0xfb\n\tDLT_BLUETOOTH_LE_LL_WITH_PHDR  = 0x100\n\tDLT_BLUETOOTH_LINUX_MONITOR    = 0xfe\n\tDLT_CAN20B                     = 0xbe\n\tDLT_CAN_SOCKETCAN              = 0xe3\n\tDLT_CHAOS                      = 0x5\n\tDLT_CHDLC                      = 0x68\n\tDLT_CISCO_IOS                  = 0x76\n\tDLT_CLASS_NETBSD_RAWAF         = 0x2240000\n\tDLT_C_HDLC                     = 0x68\n\tDLT_C_HDLC_WITH_DIR            = 0xcd\n\tDLT_DBUS                       = 0xe7\n\tDLT_DECT                       = 0xdd\n\tDLT_DISPLAYPORT_AUX            = 0x113\n\tDLT_DOCSIS                     = 0x8f\n\tDLT_DOCSIS31_XRA31             = 0x111\n\tDLT_DVB_CI                     = 0xeb\n\tDLT_ECONET                     = 0x73\n\tDLT_EN10MB                     = 0x1\n\tDLT_EN3MB                      = 0x2\n\tDLT_ENC                        = 0x6d\n\tDLT_EPON                       = 0x103\n\tDLT_ERF                        = 0xc5\n\tDLT_ERF_ETH                    = 0xaf\n\tDLT_ERF_POS                    = 0xb0\n\tDLT_ETHERNET_MPACKET           = 0x112\n\tDLT_FC_2                       = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS     = 0xe1\n\tDLT_FDDI                       = 0xa\n\tDLT_FLEXRAY                    = 0xd2\n\tDLT_FRELAY                     = 0x6b\n\tDLT_FRELAY_WITH_DIR            = 0xce\n\tDLT_GCOM_SERIAL                = 0xad\n\tDLT_GCOM_T1E1                  = 0xac\n\tDLT_GPF_F                      = 0xab\n\tDLT_GPF_T                      = 0xaa\n\tDLT_GPRS_LLC                   = 0xa9\n\tDLT_GSMTAP_ABIS                = 0xda\n\tDLT_GSMTAP_UM                  = 0xd9\n\tDLT_IBM_SN                     = 0x92\n\tDLT_IBM_SP                     = 0x91\n\tDLT_IEEE802                    = 0x6\n\tDLT_IEEE802_11                 = 0x69\n\tDLT_IEEE802_11_RADIO           = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS       = 0xa3\n\tDLT_IEEE802_15_4               = 0xc3\n\tDLT_IEEE802_15_4_LINUX         = 0xbf\n\tDLT_IEEE802_15_4_NOFCS         = 0xe6\n\tDLT_IEEE802_15_4_NONASK_PHY    = 0xd7\n\tDLT_IEEE802_16_MAC_CPS         = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO   = 0xc1\n\tDLT_INFINIBAND                 = 0xf7\n\tDLT_IPFILTER                   = 0x74\n\tDLT_IPMB_KONTRON               = 0xc7\n\tDLT_IPMB_LINUX                 = 0xd1\n\tDLT_IPMI_HPM_2                 = 0x104\n\tDLT_IPNET                      = 0xe2\n\tDLT_IPOIB                      = 0xf2\n\tDLT_IPV4                       = 0xe4\n\tDLT_IPV6                       = 0xe5\n\tDLT_IP_OVER_FC                 = 0x7a\n\tDLT_ISO_14443                  = 0x108\n\tDLT_JUNIPER_ATM1               = 0x89\n\tDLT_JUNIPER_ATM2               = 0x87\n\tDLT_JUNIPER_ATM_CEMIC          = 0xee\n\tDLT_JUNIPER_CHDLC              = 0xb5\n\tDLT_JUNIPER_ES                 = 0x84\n\tDLT_JUNIPER_ETHER              = 0xb2\n\tDLT_JUNIPER_FIBRECHANNEL       = 0xea\n\tDLT_JUNIPER_FRELAY             = 0xb4\n\tDLT_JUNIPER_GGSN               = 0x85\n\tDLT_JUNIPER_ISM                = 0xc2\n\tDLT_JUNIPER_MFR                = 0x86\n\tDLT_JUNIPER_MLFR               = 0x83\n\tDLT_JUNIPER_MLPPP              = 0x82\n\tDLT_JUNIPER_MONITOR            = 0xa4\n\tDLT_JUNIPER_PIC_PEER           = 0xae\n\tDLT_JUNIPER_PPP                = 0xb3\n\tDLT_JUNIPER_PPPOE              = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM          = 0xa8\n\tDLT_JUNIPER_SERVICES           = 0x88\n\tDLT_JUNIPER_SRX_E2E            = 0xe9\n\tDLT_JUNIPER_ST                 = 0xc8\n\tDLT_JUNIPER_VP                 = 0xb7\n\tDLT_JUNIPER_VS                 = 0xe8\n\tDLT_LAPB_WITH_DIR              = 0xcf\n\tDLT_LAPD                       = 0xcb\n\tDLT_LIN                        = 0xd4\n\tDLT_LINUX_EVDEV                = 0xd8\n\tDLT_LINUX_IRDA                 = 0x90\n\tDLT_LINUX_LAPD                 = 0xb1\n\tDLT_LINUX_PPP_WITHDIRECTION    = 0xa6\n\tDLT_LINUX_SLL                  = 0x71\n\tDLT_LINUX_SLL2                 = 0x114\n\tDLT_LOOP                       = 0x6c\n\tDLT_LORATAP                    = 0x10e\n\tDLT_LTALK                      = 0x72\n\tDLT_MATCHING_MAX               = 0x114\n\tDLT_MATCHING_MIN               = 0x68\n\tDLT_MFR                        = 0xb6\n\tDLT_MOST                       = 0xd3\n\tDLT_MPEG_2_TS                  = 0xf3\n\tDLT_MPLS                       = 0xdb\n\tDLT_MTP2                       = 0x8c\n\tDLT_MTP2_WITH_PHDR             = 0x8b\n\tDLT_MTP3                       = 0x8d\n\tDLT_MUX27010                   = 0xec\n\tDLT_NETANALYZER                = 0xf0\n\tDLT_NETANALYZER_TRANSPARENT    = 0xf1\n\tDLT_NETLINK                    = 0xfd\n\tDLT_NFC_LLCP                   = 0xf5\n\tDLT_NFLOG                      = 0xef\n\tDLT_NG40                       = 0xf4\n\tDLT_NORDIC_BLE                 = 0x110\n\tDLT_NULL                       = 0x0\n\tDLT_OPENFLOW                   = 0x10b\n\tDLT_PCI_EXP                    = 0x7d\n\tDLT_PFLOG                      = 0x75\n\tDLT_PFSYNC                     = 0x79\n\tDLT_PKTAP                      = 0x102\n\tDLT_PPI                        = 0xc0\n\tDLT_PPP                        = 0x9\n\tDLT_PPP_BSDOS                  = 0xe\n\tDLT_PPP_ETHER                  = 0x33\n\tDLT_PPP_PPPD                   = 0xa6\n\tDLT_PPP_SERIAL                 = 0x32\n\tDLT_PPP_WITH_DIR               = 0xcc\n\tDLT_PPP_WITH_DIRECTION         = 0xa6\n\tDLT_PRISM_HEADER               = 0x77\n\tDLT_PROFIBUS_DL                = 0x101\n\tDLT_PRONET                     = 0x4\n\tDLT_RAIF1                      = 0xc6\n\tDLT_RAW                        = 0xc\n\tDLT_RDS                        = 0x109\n\tDLT_REDBACK_SMARTEDGE          = 0x20\n\tDLT_RIO                        = 0x7c\n\tDLT_RTAC_SERIAL                = 0xfa\n\tDLT_SCCP                       = 0x8e\n\tDLT_SCTP                       = 0xf8\n\tDLT_SDLC                       = 0x10c\n\tDLT_SITA                       = 0xc4\n\tDLT_SLIP                       = 0x8\n\tDLT_SLIP_BSDOS                 = 0xd\n\tDLT_STANAG_5066_D_PDU          = 0xed\n\tDLT_SUNATM                     = 0x7b\n\tDLT_SYMANTEC_FIREWALL          = 0x63\n\tDLT_TI_LLN_SNIFFER             = 0x10d\n\tDLT_TZSP                       = 0x80\n\tDLT_USB                        = 0xba\n\tDLT_USBPCAP                    = 0xf9\n\tDLT_USB_DARWIN                 = 0x10a\n\tDLT_USB_FREEBSD                = 0xba\n\tDLT_USB_LINUX                  = 0xbd\n\tDLT_USB_LINUX_MMAPPED          = 0xdc\n\tDLT_USER0                      = 0x93\n\tDLT_USER1                      = 0x94\n\tDLT_USER10                     = 0x9d\n\tDLT_USER11                     = 0x9e\n\tDLT_USER12                     = 0x9f\n\tDLT_USER13                     = 0xa0\n\tDLT_USER14                     = 0xa1\n\tDLT_USER15                     = 0xa2\n\tDLT_USER2                      = 0x95\n\tDLT_USER3                      = 0x96\n\tDLT_USER4                      = 0x97\n\tDLT_USER5                      = 0x98\n\tDLT_USER6                      = 0x99\n\tDLT_USER7                      = 0x9a\n\tDLT_USER8                      = 0x9b\n\tDLT_USER9                      = 0x9c\n\tDLT_VSOCK                      = 0x10f\n\tDLT_WATTSTOPPER_DLM            = 0x107\n\tDLT_WIHART                     = 0xdf\n\tDLT_WIRESHARK_UPPER_PDU        = 0xfc\n\tDLT_X2E_SERIAL                 = 0xd5\n\tDLT_X2E_XORAYA                 = 0xd6\n\tDLT_ZWAVE_R1_R2                = 0x105\n\tDLT_ZWAVE_R3                   = 0x106\n\tDT_BLK                         = 0x6\n\tDT_CHR                         = 0x2\n\tDT_DIR                         = 0x4\n\tDT_FIFO                        = 0x1\n\tDT_LNK                         = 0xa\n\tDT_REG                         = 0x8\n\tDT_SOCK                        = 0xc\n\tDT_UNKNOWN                     = 0x0\n\tDT_WHT                         = 0xe\n\tECHO                           = 0x8\n\tECHOCTL                        = 0x40\n\tECHOE                          = 0x2\n\tECHOK                          = 0x4\n\tECHOKE                         = 0x1\n\tECHONL                         = 0x10\n\tECHOPRT                        = 0x20\n\tEHE_DEAD_PRIORITY              = -0x1\n\tEVFILT_AIO                     = -0x3\n\tEVFILT_EMPTY                   = -0xd\n\tEVFILT_FS                      = -0x9\n\tEVFILT_LIO                     = -0xa\n\tEVFILT_PROC                    = -0x5\n\tEVFILT_PROCDESC                = -0x8\n\tEVFILT_READ                    = -0x1\n\tEVFILT_SENDFILE                = -0xc\n\tEVFILT_SIGNAL                  = -0x6\n\tEVFILT_SYSCOUNT                = 0xd\n\tEVFILT_TIMER                   = -0x7\n\tEVFILT_USER                    = -0xb\n\tEVFILT_VNODE                   = -0x4\n\tEVFILT_WRITE                   = -0x2\n\tEVNAMEMAP_NAME_SIZE            = 0x40\n\tEV_ADD                         = 0x1\n\tEV_CLEAR                       = 0x20\n\tEV_DELETE                      = 0x2\n\tEV_DISABLE                     = 0x8\n\tEV_DISPATCH                    = 0x80\n\tEV_DROP                        = 0x1000\n\tEV_ENABLE                      = 0x4\n\tEV_EOF                         = 0x8000\n\tEV_ERROR                       = 0x4000\n\tEV_FLAG1                       = 0x2000\n\tEV_FLAG2                       = 0x4000\n\tEV_FORCEONESHOT                = 0x100\n\tEV_ONESHOT                     = 0x10\n\tEV_RECEIPT                     = 0x40\n\tEV_SYSFLAGS                    = 0xf000\n\tEXTA                           = 0x4b00\n\tEXTATTR_MAXNAMELEN             = 0xff\n\tEXTATTR_NAMESPACE_EMPTY        = 0x0\n\tEXTATTR_NAMESPACE_SYSTEM       = 0x2\n\tEXTATTR_NAMESPACE_USER         = 0x1\n\tEXTB                           = 0x9600\n\tEXTPROC                        = 0x800\n\tFD_CLOEXEC                     = 0x1\n\tFD_NONE                        = -0xc8\n\tFD_SETSIZE                     = 0x400\n\tFLUSHO                         = 0x800000\n\tF_ADD_SEALS                    = 0x13\n\tF_CANCEL                       = 0x5\n\tF_DUP2FD                       = 0xa\n\tF_DUP2FD_CLOEXEC               = 0x12\n\tF_DUPFD                        = 0x0\n\tF_DUPFD_CLOEXEC                = 0x11\n\tF_GETFD                        = 0x1\n\tF_GETFL                        = 0x3\n\tF_GETLK                        = 0xb\n\tF_GETOWN                       = 0x5\n\tF_GET_SEALS                    = 0x14\n\tF_ISUNIONSTACK                 = 0x15\n\tF_KINFO                        = 0x16\n\tF_OGETLK                       = 0x7\n\tF_OK                           = 0x0\n\tF_OSETLK                       = 0x8\n\tF_OSETLKW                      = 0x9\n\tF_RDAHEAD                      = 0x10\n\tF_RDLCK                        = 0x1\n\tF_READAHEAD                    = 0xf\n\tF_SEAL_GROW                    = 0x4\n\tF_SEAL_SEAL                    = 0x1\n\tF_SEAL_SHRINK                  = 0x2\n\tF_SEAL_WRITE                   = 0x8\n\tF_SETFD                        = 0x2\n\tF_SETFL                        = 0x4\n\tF_SETLK                        = 0xc\n\tF_SETLKW                       = 0xd\n\tF_SETLK_REMOTE                 = 0xe\n\tF_SETOWN                       = 0x6\n\tF_UNLCK                        = 0x2\n\tF_UNLCKSYS                     = 0x4\n\tF_WRLCK                        = 0x3\n\tHUPCL                          = 0x4000\n\tHW_MACHINE                     = 0x1\n\tICANON                         = 0x100\n\tICMP6_FILTER                   = 0x12\n\tICRNL                          = 0x100\n\tIEXTEN                         = 0x400\n\tIFAN_ARRIVAL                   = 0x0\n\tIFAN_DEPARTURE                 = 0x1\n\tIFCAP_WOL_MAGIC                = 0x2000\n\tIFF_ALLMULTI                   = 0x200\n\tIFF_ALTPHYS                    = 0x4000\n\tIFF_BROADCAST                  = 0x2\n\tIFF_CANTCHANGE                 = 0x218f72\n\tIFF_CANTCONFIG                 = 0x10000\n\tIFF_DEBUG                      = 0x4\n\tIFF_DRV_OACTIVE                = 0x400\n\tIFF_DRV_RUNNING                = 0x40\n\tIFF_DYING                      = 0x200000\n\tIFF_KNOWSEPOCH                 = 0x20\n\tIFF_LINK0                      = 0x1000\n\tIFF_LINK1                      = 0x2000\n\tIFF_LINK2                      = 0x4000\n\tIFF_LOOPBACK                   = 0x8\n\tIFF_MONITOR                    = 0x40000\n\tIFF_MULTICAST                  = 0x8000\n\tIFF_NOARP                      = 0x80\n\tIFF_NOGROUP                    = 0x800000\n\tIFF_OACTIVE                    = 0x400\n\tIFF_POINTOPOINT                = 0x10\n\tIFF_PPROMISC                   = 0x20000\n\tIFF_PROMISC                    = 0x100\n\tIFF_RENAMING                   = 0x400000\n\tIFF_RUNNING                    = 0x40\n\tIFF_SIMPLEX                    = 0x800\n\tIFF_STATICARP                  = 0x80000\n\tIFF_UP                         = 0x1\n\tIFNAMSIZ                       = 0x10\n\tIFT_BRIDGE                     = 0xd1\n\tIFT_CARP                       = 0xf8\n\tIFT_IEEE1394                   = 0x90\n\tIFT_INFINIBAND                 = 0xc7\n\tIFT_L2VLAN                     = 0x87\n\tIFT_L3IPVLAN                   = 0x88\n\tIFT_PPP                        = 0x17\n\tIFT_PROPVIRTUAL                = 0x35\n\tIGNBRK                         = 0x1\n\tIGNCR                          = 0x80\n\tIGNPAR                         = 0x4\n\tIMAXBEL                        = 0x2000\n\tINLCR                          = 0x40\n\tINPCK                          = 0x10\n\tIN_CLASSA_HOST                 = 0xffffff\n\tIN_CLASSA_MAX                  = 0x80\n\tIN_CLASSA_NET                  = 0xff000000\n\tIN_CLASSA_NSHIFT               = 0x18\n\tIN_CLASSB_HOST                 = 0xffff\n\tIN_CLASSB_MAX                  = 0x10000\n\tIN_CLASSB_NET                  = 0xffff0000\n\tIN_CLASSB_NSHIFT               = 0x10\n\tIN_CLASSC_HOST                 = 0xff\n\tIN_CLASSC_NET                  = 0xffffff00\n\tIN_CLASSC_NSHIFT               = 0x8\n\tIN_CLASSD_HOST                 = 0xfffffff\n\tIN_CLASSD_NET                  = 0xf0000000\n\tIN_CLASSD_NSHIFT               = 0x1c\n\tIN_LOOPBACKNET                 = 0x7f\n\tIN_NETMASK_DEFAULT             = 0xffffff00\n\tIN_RFC3021_MASK                = 0xfffffffe\n\tIPPROTO_3PC                    = 0x22\n\tIPPROTO_ADFS                   = 0x44\n\tIPPROTO_AH                     = 0x33\n\tIPPROTO_AHIP                   = 0x3d\n\tIPPROTO_APES                   = 0x63\n\tIPPROTO_ARGUS                  = 0xd\n\tIPPROTO_AX25                   = 0x5d\n\tIPPROTO_BHA                    = 0x31\n\tIPPROTO_BLT                    = 0x1e\n\tIPPROTO_BRSATMON               = 0x4c\n\tIPPROTO_CARP                   = 0x70\n\tIPPROTO_CFTP                   = 0x3e\n\tIPPROTO_CHAOS                  = 0x10\n\tIPPROTO_CMTP                   = 0x26\n\tIPPROTO_CPHB                   = 0x49\n\tIPPROTO_CPNX                   = 0x48\n\tIPPROTO_DCCP                   = 0x21\n\tIPPROTO_DDP                    = 0x25\n\tIPPROTO_DGP                    = 0x56\n\tIPPROTO_DIVERT                 = 0x102\n\tIPPROTO_DONE                   = 0x101\n\tIPPROTO_DSTOPTS                = 0x3c\n\tIPPROTO_EGP                    = 0x8\n\tIPPROTO_EMCON                  = 0xe\n\tIPPROTO_ENCAP                  = 0x62\n\tIPPROTO_EON                    = 0x50\n\tIPPROTO_ESP                    = 0x32\n\tIPPROTO_ETHERIP                = 0x61\n\tIPPROTO_FRAGMENT               = 0x2c\n\tIPPROTO_GGP                    = 0x3\n\tIPPROTO_GMTP                   = 0x64\n\tIPPROTO_GRE                    = 0x2f\n\tIPPROTO_HELLO                  = 0x3f\n\tIPPROTO_HIP                    = 0x8b\n\tIPPROTO_HMP                    = 0x14\n\tIPPROTO_HOPOPTS                = 0x0\n\tIPPROTO_ICMP                   = 0x1\n\tIPPROTO_ICMPV6                 = 0x3a\n\tIPPROTO_IDP                    = 0x16\n\tIPPROTO_IDPR                   = 0x23\n\tIPPROTO_IDRP                   = 0x2d\n\tIPPROTO_IGMP                   = 0x2\n\tIPPROTO_IGP                    = 0x55\n\tIPPROTO_IGRP                   = 0x58\n\tIPPROTO_IL                     = 0x28\n\tIPPROTO_INLSP                  = 0x34\n\tIPPROTO_INP                    = 0x20\n\tIPPROTO_IP                     = 0x0\n\tIPPROTO_IPCOMP                 = 0x6c\n\tIPPROTO_IPCV                   = 0x47\n\tIPPROTO_IPEIP                  = 0x5e\n\tIPPROTO_IPIP                   = 0x4\n\tIPPROTO_IPPC                   = 0x43\n\tIPPROTO_IPV4                   = 0x4\n\tIPPROTO_IPV6                   = 0x29\n\tIPPROTO_IRTP                   = 0x1c\n\tIPPROTO_KRYPTOLAN              = 0x41\n\tIPPROTO_LARP                   = 0x5b\n\tIPPROTO_LEAF1                  = 0x19\n\tIPPROTO_LEAF2                  = 0x1a\n\tIPPROTO_MAX                    = 0x100\n\tIPPROTO_MEAS                   = 0x13\n\tIPPROTO_MH                     = 0x87\n\tIPPROTO_MHRP                   = 0x30\n\tIPPROTO_MICP                   = 0x5f\n\tIPPROTO_MOBILE                 = 0x37\n\tIPPROTO_MPLS                   = 0x89\n\tIPPROTO_MTP                    = 0x5c\n\tIPPROTO_MUX                    = 0x12\n\tIPPROTO_ND                     = 0x4d\n\tIPPROTO_NHRP                   = 0x36\n\tIPPROTO_NONE                   = 0x3b\n\tIPPROTO_NSP                    = 0x1f\n\tIPPROTO_NVPII                  = 0xb\n\tIPPROTO_OLD_DIVERT             = 0xfe\n\tIPPROTO_OSPFIGP                = 0x59\n\tIPPROTO_PFSYNC                 = 0xf0\n\tIPPROTO_PGM                    = 0x71\n\tIPPROTO_PIGP                   = 0x9\n\tIPPROTO_PIM                    = 0x67\n\tIPPROTO_PRM                    = 0x15\n\tIPPROTO_PUP                    = 0xc\n\tIPPROTO_PVP                    = 0x4b\n\tIPPROTO_RAW                    = 0xff\n\tIPPROTO_RCCMON                 = 0xa\n\tIPPROTO_RDP                    = 0x1b\n\tIPPROTO_RESERVED_253           = 0xfd\n\tIPPROTO_RESERVED_254           = 0xfe\n\tIPPROTO_ROUTING                = 0x2b\n\tIPPROTO_RSVP                   = 0x2e\n\tIPPROTO_RVD                    = 0x42\n\tIPPROTO_SATEXPAK               = 0x40\n\tIPPROTO_SATMON                 = 0x45\n\tIPPROTO_SCCSP                  = 0x60\n\tIPPROTO_SCTP                   = 0x84\n\tIPPROTO_SDRP                   = 0x2a\n\tIPPROTO_SEND                   = 0x103\n\tIPPROTO_SHIM6                  = 0x8c\n\tIPPROTO_SKIP                   = 0x39\n\tIPPROTO_SPACER                 = 0x7fff\n\tIPPROTO_SRPC                   = 0x5a\n\tIPPROTO_ST                     = 0x7\n\tIPPROTO_SVMTP                  = 0x52\n\tIPPROTO_SWIPE                  = 0x35\n\tIPPROTO_TCF                    = 0x57\n\tIPPROTO_TCP                    = 0x6\n\tIPPROTO_TLSP                   = 0x38\n\tIPPROTO_TP                     = 0x1d\n\tIPPROTO_TPXX                   = 0x27\n\tIPPROTO_TRUNK1                 = 0x17\n\tIPPROTO_TRUNK2                 = 0x18\n\tIPPROTO_TTP                    = 0x54\n\tIPPROTO_UDP                    = 0x11\n\tIPPROTO_UDPLITE                = 0x88\n\tIPPROTO_VINES                  = 0x53\n\tIPPROTO_VISA                   = 0x46\n\tIPPROTO_VMTP                   = 0x51\n\tIPPROTO_WBEXPAK                = 0x4f\n\tIPPROTO_WBMON                  = 0x4e\n\tIPPROTO_WSN                    = 0x4a\n\tIPPROTO_XNET                   = 0xf\n\tIPPROTO_XTP                    = 0x24\n\tIPV6_AUTOFLOWLABEL             = 0x3b\n\tIPV6_BINDANY                   = 0x40\n\tIPV6_BINDMULTI                 = 0x41\n\tIPV6_BINDV6ONLY                = 0x1b\n\tIPV6_CHECKSUM                  = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS    = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP    = 0x1\n\tIPV6_DEFHLIM                   = 0x40\n\tIPV6_DONTFRAG                  = 0x3e\n\tIPV6_DSTOPTS                   = 0x32\n\tIPV6_FLOWID                    = 0x43\n\tIPV6_FLOWINFO_MASK             = 0xffffff0f\n\tIPV6_FLOWLABEL_LEN             = 0x14\n\tIPV6_FLOWLABEL_MASK            = 0xffff0f00\n\tIPV6_FLOWTYPE                  = 0x44\n\tIPV6_FRAGTTL                   = 0x78\n\tIPV6_FW_ADD                    = 0x1e\n\tIPV6_FW_DEL                    = 0x1f\n\tIPV6_FW_FLUSH                  = 0x20\n\tIPV6_FW_GET                    = 0x22\n\tIPV6_FW_ZERO                   = 0x21\n\tIPV6_HLIMDEC                   = 0x1\n\tIPV6_HOPLIMIT                  = 0x2f\n\tIPV6_HOPOPTS                   = 0x31\n\tIPV6_IPSEC_POLICY              = 0x1c\n\tIPV6_JOIN_GROUP                = 0xc\n\tIPV6_LEAVE_GROUP               = 0xd\n\tIPV6_MAXHLIM                   = 0xff\n\tIPV6_MAXOPTHDR                 = 0x800\n\tIPV6_MAXPACKET                 = 0xffff\n\tIPV6_MAX_GROUP_SRC_FILTER      = 0x200\n\tIPV6_MAX_MEMBERSHIPS           = 0xfff\n\tIPV6_MAX_SOCK_SRC_FILTER       = 0x80\n\tIPV6_MMTU                      = 0x500\n\tIPV6_MSFILTER                  = 0x4a\n\tIPV6_MULTICAST_HOPS            = 0xa\n\tIPV6_MULTICAST_IF              = 0x9\n\tIPV6_MULTICAST_LOOP            = 0xb\n\tIPV6_NEXTHOP                   = 0x30\n\tIPV6_ORIGDSTADDR               = 0x48\n\tIPV6_PATHMTU                   = 0x2c\n\tIPV6_PKTINFO                   = 0x2e\n\tIPV6_PORTRANGE                 = 0xe\n\tIPV6_PORTRANGE_DEFAULT         = 0x0\n\tIPV6_PORTRANGE_HIGH            = 0x1\n\tIPV6_PORTRANGE_LOW             = 0x2\n\tIPV6_PREFER_TEMPADDR           = 0x3f\n\tIPV6_RECVDSTOPTS               = 0x28\n\tIPV6_RECVFLOWID                = 0x46\n\tIPV6_RECVHOPLIMIT              = 0x25\n\tIPV6_RECVHOPOPTS               = 0x27\n\tIPV6_RECVORIGDSTADDR           = 0x48\n\tIPV6_RECVPATHMTU               = 0x2b\n\tIPV6_RECVPKTINFO               = 0x24\n\tIPV6_RECVRSSBUCKETID           = 0x47\n\tIPV6_RECVRTHDR                 = 0x26\n\tIPV6_RECVTCLASS                = 0x39\n\tIPV6_RSSBUCKETID               = 0x45\n\tIPV6_RSS_LISTEN_BUCKET         = 0x42\n\tIPV6_RTHDR                     = 0x33\n\tIPV6_RTHDRDSTOPTS              = 0x23\n\tIPV6_RTHDR_LOOSE               = 0x0\n\tIPV6_RTHDR_STRICT              = 0x1\n\tIPV6_RTHDR_TYPE_0              = 0x0\n\tIPV6_SOCKOPT_RESERVED1         = 0x3\n\tIPV6_TCLASS                    = 0x3d\n\tIPV6_UNICAST_HOPS              = 0x4\n\tIPV6_USE_MIN_MTU               = 0x2a\n\tIPV6_V6ONLY                    = 0x1b\n\tIPV6_VERSION                   = 0x60\n\tIPV6_VERSION_MASK              = 0xf0\n\tIPV6_VLAN_PCP                  = 0x4b\n\tIP_ADD_MEMBERSHIP              = 0xc\n\tIP_ADD_SOURCE_MEMBERSHIP       = 0x46\n\tIP_BINDANY                     = 0x18\n\tIP_BINDMULTI                   = 0x19\n\tIP_BLOCK_SOURCE                = 0x48\n\tIP_DEFAULT_MULTICAST_LOOP      = 0x1\n\tIP_DEFAULT_MULTICAST_TTL       = 0x1\n\tIP_DF                          = 0x4000\n\tIP_DONTFRAG                    = 0x43\n\tIP_DROP_MEMBERSHIP             = 0xd\n\tIP_DROP_SOURCE_MEMBERSHIP      = 0x47\n\tIP_DUMMYNET3                   = 0x31\n\tIP_DUMMYNET_CONFIGURE          = 0x3c\n\tIP_DUMMYNET_DEL                = 0x3d\n\tIP_DUMMYNET_FLUSH              = 0x3e\n\tIP_DUMMYNET_GET                = 0x40\n\tIP_FLOWID                      = 0x5a\n\tIP_FLOWTYPE                    = 0x5b\n\tIP_FW3                         = 0x30\n\tIP_FW_ADD                      = 0x32\n\tIP_FW_DEL                      = 0x33\n\tIP_FW_FLUSH                    = 0x34\n\tIP_FW_GET                      = 0x36\n\tIP_FW_NAT_CFG                  = 0x38\n\tIP_FW_NAT_DEL                  = 0x39\n\tIP_FW_NAT_GET_CONFIG           = 0x3a\n\tIP_FW_NAT_GET_LOG              = 0x3b\n\tIP_FW_RESETLOG                 = 0x37\n\tIP_FW_TABLE_ADD                = 0x28\n\tIP_FW_TABLE_DEL                = 0x29\n\tIP_FW_TABLE_FLUSH              = 0x2a\n\tIP_FW_TABLE_GETSIZE            = 0x2b\n\tIP_FW_TABLE_LIST               = 0x2c\n\tIP_FW_ZERO                     = 0x35\n\tIP_HDRINCL                     = 0x2\n\tIP_IPSEC_POLICY                = 0x15\n\tIP_MAXPACKET                   = 0xffff\n\tIP_MAX_GROUP_SRC_FILTER        = 0x200\n\tIP_MAX_MEMBERSHIPS             = 0xfff\n\tIP_MAX_SOCK_MUTE_FILTER        = 0x80\n\tIP_MAX_SOCK_SRC_FILTER         = 0x80\n\tIP_MF                          = 0x2000\n\tIP_MINTTL                      = 0x42\n\tIP_MSFILTER                    = 0x4a\n\tIP_MSS                         = 0x240\n\tIP_MULTICAST_IF                = 0x9\n\tIP_MULTICAST_LOOP              = 0xb\n\tIP_MULTICAST_TTL               = 0xa\n\tIP_MULTICAST_VIF               = 0xe\n\tIP_OFFMASK                     = 0x1fff\n\tIP_ONESBCAST                   = 0x17\n\tIP_OPTIONS                     = 0x1\n\tIP_ORIGDSTADDR                 = 0x1b\n\tIP_PORTRANGE                   = 0x13\n\tIP_PORTRANGE_DEFAULT           = 0x0\n\tIP_PORTRANGE_HIGH              = 0x1\n\tIP_PORTRANGE_LOW               = 0x2\n\tIP_RECVDSTADDR                 = 0x7\n\tIP_RECVFLOWID                  = 0x5d\n\tIP_RECVIF                      = 0x14\n\tIP_RECVOPTS                    = 0x5\n\tIP_RECVORIGDSTADDR             = 0x1b\n\tIP_RECVRETOPTS                 = 0x6\n\tIP_RECVRSSBUCKETID             = 0x5e\n\tIP_RECVTOS                     = 0x44\n\tIP_RECVTTL                     = 0x41\n\tIP_RETOPTS                     = 0x8\n\tIP_RF                          = 0x8000\n\tIP_RSSBUCKETID                 = 0x5c\n\tIP_RSS_LISTEN_BUCKET           = 0x1a\n\tIP_RSVP_OFF                    = 0x10\n\tIP_RSVP_ON                     = 0xf\n\tIP_RSVP_VIF_OFF                = 0x12\n\tIP_RSVP_VIF_ON                 = 0x11\n\tIP_SENDSRCADDR                 = 0x7\n\tIP_TOS                         = 0x3\n\tIP_TTL                         = 0x4\n\tIP_UNBLOCK_SOURCE              = 0x49\n\tIP_VLAN_PCP                    = 0x4b\n\tISIG                           = 0x80\n\tISTRIP                         = 0x20\n\tITIMER_PROF                    = 0x2\n\tITIMER_REAL                    = 0x0\n\tITIMER_VIRTUAL                 = 0x1\n\tIXANY                          = 0x800\n\tIXOFF                          = 0x400\n\tIXON                           = 0x200\n\tKERN_HOSTNAME                  = 0xa\n\tKERN_OSRELEASE                 = 0x2\n\tKERN_OSTYPE                    = 0x1\n\tKERN_VERSION                   = 0x4\n\tLOCAL_CONNWAIT                 = 0x4\n\tLOCAL_CREDS                    = 0x2\n\tLOCAL_CREDS_PERSISTENT         = 0x3\n\tLOCAL_PEERCRED                 = 0x1\n\tLOCAL_VENDOR                   = 0x80000000\n\tLOCK_EX                        = 0x2\n\tLOCK_NB                        = 0x4\n\tLOCK_SH                        = 0x1\n\tLOCK_UN                        = 0x8\n\tMADV_AUTOSYNC                  = 0x7\n\tMADV_CORE                      = 0x9\n\tMADV_DONTNEED                  = 0x4\n\tMADV_FREE                      = 0x5\n\tMADV_NOCORE                    = 0x8\n\tMADV_NORMAL                    = 0x0\n\tMADV_NOSYNC                    = 0x6\n\tMADV_PROTECT                   = 0xa\n\tMADV_RANDOM                    = 0x1\n\tMADV_SEQUENTIAL                = 0x2\n\tMADV_WILLNEED                  = 0x3\n\tMAP_32BIT                      = 0x80000\n\tMAP_ALIGNED_SUPER              = 0x1000000\n\tMAP_ALIGNMENT_MASK             = -0x1000000\n\tMAP_ALIGNMENT_SHIFT            = 0x18\n\tMAP_ANON                       = 0x1000\n\tMAP_ANONYMOUS                  = 0x1000\n\tMAP_COPY                       = 0x2\n\tMAP_EXCL                       = 0x4000\n\tMAP_FILE                       = 0x0\n\tMAP_FIXED                      = 0x10\n\tMAP_GUARD                      = 0x2000\n\tMAP_HASSEMAPHORE               = 0x200\n\tMAP_NOCORE                     = 0x20000\n\tMAP_NOSYNC                     = 0x800\n\tMAP_PREFAULT_READ              = 0x40000\n\tMAP_PRIVATE                    = 0x2\n\tMAP_RESERVED0020               = 0x20\n\tMAP_RESERVED0040               = 0x40\n\tMAP_RESERVED0080               = 0x80\n\tMAP_RESERVED0100               = 0x100\n\tMAP_SHARED                     = 0x1\n\tMAP_STACK                      = 0x400\n\tMCAST_BLOCK_SOURCE             = 0x54\n\tMCAST_EXCLUDE                  = 0x2\n\tMCAST_INCLUDE                  = 0x1\n\tMCAST_JOIN_GROUP               = 0x50\n\tMCAST_JOIN_SOURCE_GROUP        = 0x52\n\tMCAST_LEAVE_GROUP              = 0x51\n\tMCAST_LEAVE_SOURCE_GROUP       = 0x53\n\tMCAST_UNBLOCK_SOURCE           = 0x55\n\tMCAST_UNDEFINED                = 0x0\n\tMCL_CURRENT                    = 0x1\n\tMCL_FUTURE                     = 0x2\n\tMFD_ALLOW_SEALING              = 0x2\n\tMFD_CLOEXEC                    = 0x1\n\tMFD_HUGETLB                    = 0x4\n\tMFD_HUGE_16GB                  = -0x78000000\n\tMFD_HUGE_16MB                  = 0x60000000\n\tMFD_HUGE_1GB                   = 0x78000000\n\tMFD_HUGE_1MB                   = 0x50000000\n\tMFD_HUGE_256MB                 = 0x70000000\n\tMFD_HUGE_2GB                   = 0x7c000000\n\tMFD_HUGE_2MB                   = 0x54000000\n\tMFD_HUGE_32MB                  = 0x64000000\n\tMFD_HUGE_512KB                 = 0x4c000000\n\tMFD_HUGE_512MB                 = 0x74000000\n\tMFD_HUGE_64KB                  = 0x40000000\n\tMFD_HUGE_8MB                   = 0x5c000000\n\tMFD_HUGE_MASK                  = 0xfc000000\n\tMFD_HUGE_SHIFT                 = 0x1a\n\tMNT_ACLS                       = 0x8000000\n\tMNT_ASYNC                      = 0x40\n\tMNT_AUTOMOUNTED                = 0x200000000\n\tMNT_BYFSID                     = 0x8000000\n\tMNT_CMDFLAGS                   = 0x300d0f0000\n\tMNT_DEFEXPORTED                = 0x200\n\tMNT_DELEXPORT                  = 0x20000\n\tMNT_EMPTYDIR                   = 0x2000000000\n\tMNT_EXKERB                     = 0x800\n\tMNT_EXPORTANON                 = 0x400\n\tMNT_EXPORTED                   = 0x100\n\tMNT_EXPUBLIC                   = 0x20000000\n\tMNT_EXRDONLY                   = 0x80\n\tMNT_EXTLS                      = 0x4000000000\n\tMNT_EXTLSCERT                  = 0x8000000000\n\tMNT_EXTLSCERTUSER              = 0x10000000000\n\tMNT_FORCE                      = 0x80000\n\tMNT_GJOURNAL                   = 0x2000000\n\tMNT_IGNORE                     = 0x800000\n\tMNT_LAZY                       = 0x3\n\tMNT_LOCAL                      = 0x1000\n\tMNT_MULTILABEL                 = 0x4000000\n\tMNT_NFS4ACLS                   = 0x10\n\tMNT_NOATIME                    = 0x10000000\n\tMNT_NOCLUSTERR                 = 0x40000000\n\tMNT_NOCLUSTERW                 = 0x80000000\n\tMNT_NOCOVER                    = 0x1000000000\n\tMNT_NOEXEC                     = 0x4\n\tMNT_NONBUSY                    = 0x4000000\n\tMNT_NOSUID                     = 0x8\n\tMNT_NOSYMFOLLOW                = 0x400000\n\tMNT_NOWAIT                     = 0x2\n\tMNT_QUOTA                      = 0x2000\n\tMNT_RDONLY                     = 0x1\n\tMNT_RELOAD                     = 0x40000\n\tMNT_ROOTFS                     = 0x4000\n\tMNT_SNAPSHOT                   = 0x1000000\n\tMNT_SOFTDEP                    = 0x200000\n\tMNT_SUIDDIR                    = 0x100000\n\tMNT_SUJ                        = 0x100000000\n\tMNT_SUSPEND                    = 0x4\n\tMNT_SYNCHRONOUS                = 0x2\n\tMNT_UNION                      = 0x20\n\tMNT_UNTRUSTED                  = 0x800000000\n\tMNT_UPDATE                     = 0x10000\n\tMNT_UPDATEMASK                 = 0xad8d0807e\n\tMNT_USER                       = 0x8000\n\tMNT_VERIFIED                   = 0x400000000\n\tMNT_VISFLAGMASK                = 0xffef0ffff\n\tMNT_WAIT                       = 0x1\n\tMSG_CMSG_CLOEXEC               = 0x40000\n\tMSG_COMPAT                     = 0x8000\n\tMSG_CTRUNC                     = 0x20\n\tMSG_DONTROUTE                  = 0x4\n\tMSG_DONTWAIT                   = 0x80\n\tMSG_EOF                        = 0x100\n\tMSG_EOR                        = 0x8\n\tMSG_NBIO                       = 0x4000\n\tMSG_NOSIGNAL                   = 0x20000\n\tMSG_NOTIFICATION               = 0x2000\n\tMSG_OOB                        = 0x1\n\tMSG_PEEK                       = 0x2\n\tMSG_TRUNC                      = 0x10\n\tMSG_WAITALL                    = 0x40\n\tMSG_WAITFORONE                 = 0x80000\n\tMS_ASYNC                       = 0x1\n\tMS_INVALIDATE                  = 0x2\n\tMS_SYNC                        = 0x0\n\tNAME_MAX                       = 0xff\n\tNET_RT_DUMP                    = 0x1\n\tNET_RT_FLAGS                   = 0x2\n\tNET_RT_IFLIST                  = 0x3\n\tNET_RT_IFLISTL                 = 0x5\n\tNET_RT_IFMALIST                = 0x4\n\tNET_RT_NHGRP                   = 0x7\n\tNET_RT_NHOP                    = 0x6\n\tNFDBITS                        = 0x40\n\tNOFLSH                         = 0x80000000\n\tNOKERNINFO                     = 0x2000000\n\tNOTE_ABSTIME                   = 0x10\n\tNOTE_ATTRIB                    = 0x8\n\tNOTE_CHILD                     = 0x4\n\tNOTE_CLOSE                     = 0x100\n\tNOTE_CLOSE_WRITE               = 0x200\n\tNOTE_DELETE                    = 0x1\n\tNOTE_EXEC                      = 0x20000000\n\tNOTE_EXIT                      = 0x80000000\n\tNOTE_EXTEND                    = 0x4\n\tNOTE_FFAND                     = 0x40000000\n\tNOTE_FFCOPY                    = 0xc0000000\n\tNOTE_FFCTRLMASK                = 0xc0000000\n\tNOTE_FFLAGSMASK                = 0xffffff\n\tNOTE_FFNOP                     = 0x0\n\tNOTE_FFOR                      = 0x80000000\n\tNOTE_FILE_POLL                 = 0x2\n\tNOTE_FORK                      = 0x40000000\n\tNOTE_LINK                      = 0x10\n\tNOTE_LOWAT                     = 0x1\n\tNOTE_MSECONDS                  = 0x2\n\tNOTE_NSECONDS                  = 0x8\n\tNOTE_OPEN                      = 0x80\n\tNOTE_PCTRLMASK                 = 0xf0000000\n\tNOTE_PDATAMASK                 = 0xfffff\n\tNOTE_READ                      = 0x400\n\tNOTE_RENAME                    = 0x20\n\tNOTE_REVOKE                    = 0x40\n\tNOTE_SECONDS                   = 0x1\n\tNOTE_TRACK                     = 0x1\n\tNOTE_TRACKERR                  = 0x2\n\tNOTE_TRIGGER                   = 0x1000000\n\tNOTE_USECONDS                  = 0x4\n\tNOTE_WRITE                     = 0x2\n\tOCRNL                          = 0x10\n\tONLCR                          = 0x2\n\tONLRET                         = 0x40\n\tONOCR                          = 0x20\n\tONOEOT                         = 0x8\n\tOPOST                          = 0x1\n\tOXTABS                         = 0x4\n\tO_ACCMODE                      = 0x3\n\tO_APPEND                       = 0x8\n\tO_ASYNC                        = 0x40\n\tO_CLOEXEC                      = 0x100000\n\tO_CREAT                        = 0x200\n\tO_DIRECT                       = 0x10000\n\tO_DIRECTORY                    = 0x20000\n\tO_DSYNC                        = 0x1000000\n\tO_EMPTY_PATH                   = 0x2000000\n\tO_EXCL                         = 0x800\n\tO_EXEC                         = 0x40000\n\tO_EXLOCK                       = 0x20\n\tO_FSYNC                        = 0x80\n\tO_NDELAY                       = 0x4\n\tO_NOCTTY                       = 0x8000\n\tO_NOFOLLOW                     = 0x100\n\tO_NONBLOCK                     = 0x4\n\tO_PATH                         = 0x400000\n\tO_RDONLY                       = 0x0\n\tO_RDWR                         = 0x2\n\tO_RESOLVE_BENEATH              = 0x800000\n\tO_SEARCH                       = 0x40000\n\tO_SHLOCK                       = 0x10\n\tO_SYNC                         = 0x80\n\tO_TRUNC                        = 0x400\n\tO_TTY_INIT                     = 0x80000\n\tO_VERIFY                       = 0x200000\n\tO_WRONLY                       = 0x1\n\tPARENB                         = 0x1000\n\tPARMRK                         = 0x8\n\tPARODD                         = 0x2000\n\tPENDIN                         = 0x20000000\n\tPIOD_READ_D                    = 0x1\n\tPIOD_READ_I                    = 0x3\n\tPIOD_WRITE_D                   = 0x2\n\tPIOD_WRITE_I                   = 0x4\n\tPRIO_PGRP                      = 0x1\n\tPRIO_PROCESS                   = 0x0\n\tPRIO_USER                      = 0x2\n\tPROT_EXEC                      = 0x4\n\tPROT_NONE                      = 0x0\n\tPROT_READ                      = 0x1\n\tPROT_WRITE                     = 0x2\n\tPTRACE_DEFAULT                 = 0x1\n\tPTRACE_EXEC                    = 0x1\n\tPTRACE_FORK                    = 0x8\n\tPTRACE_LWP                     = 0x10\n\tPTRACE_SCE                     = 0x2\n\tPTRACE_SCX                     = 0x4\n\tPTRACE_SYSCALL                 = 0x6\n\tPTRACE_VFORK                   = 0x20\n\tPT_ATTACH                      = 0xa\n\tPT_CLEARSTEP                   = 0x10\n\tPT_CONTINUE                    = 0x7\n\tPT_COREDUMP                    = 0x1d\n\tPT_DETACH                      = 0xb\n\tPT_FIRSTMACH                   = 0x40\n\tPT_FOLLOW_FORK                 = 0x17\n\tPT_GETDBREGS                   = 0x25\n\tPT_GETFPREGS                   = 0x23\n\tPT_GETLWPLIST                  = 0xf\n\tPT_GETNUMLWPS                  = 0xe\n\tPT_GETREGS                     = 0x21\n\tPT_GET_EVENT_MASK              = 0x19\n\tPT_GET_SC_ARGS                 = 0x1b\n\tPT_GET_SC_RET                  = 0x1c\n\tPT_IO                          = 0xc\n\tPT_KILL                        = 0x8\n\tPT_LWPINFO                     = 0xd\n\tPT_LWP_EVENTS                  = 0x18\n\tPT_READ_D                      = 0x2\n\tPT_READ_I                      = 0x1\n\tPT_RESUME                      = 0x13\n\tPT_SETDBREGS                   = 0x26\n\tPT_SETFPREGS                   = 0x24\n\tPT_SETREGS                     = 0x22\n\tPT_SETSTEP                     = 0x11\n\tPT_SET_EVENT_MASK              = 0x1a\n\tPT_STEP                        = 0x9\n\tPT_SUSPEND                     = 0x12\n\tPT_SYSCALL                     = 0x16\n\tPT_TO_SCE                      = 0x14\n\tPT_TO_SCX                      = 0x15\n\tPT_TRACE_ME                    = 0x0\n\tPT_VM_ENTRY                    = 0x29\n\tPT_VM_TIMESTAMP                = 0x28\n\tPT_WRITE_D                     = 0x5\n\tPT_WRITE_I                     = 0x4\n\tP_ZONEID                       = 0xc\n\tRLIMIT_AS                      = 0xa\n\tRLIMIT_CORE                    = 0x4\n\tRLIMIT_CPU                     = 0x0\n\tRLIMIT_DATA                    = 0x2\n\tRLIMIT_FSIZE                   = 0x1\n\tRLIMIT_MEMLOCK                 = 0x6\n\tRLIMIT_NOFILE                  = 0x8\n\tRLIMIT_NPROC                   = 0x7\n\tRLIMIT_RSS                     = 0x5\n\tRLIMIT_STACK                   = 0x3\n\tRLIM_INFINITY                  = 0x7fffffffffffffff\n\tRTAX_AUTHOR                    = 0x6\n\tRTAX_BRD                       = 0x7\n\tRTAX_DST                       = 0x0\n\tRTAX_GATEWAY                   = 0x1\n\tRTAX_GENMASK                   = 0x3\n\tRTAX_IFA                       = 0x5\n\tRTAX_IFP                       = 0x4\n\tRTAX_MAX                       = 0x8\n\tRTAX_NETMASK                   = 0x2\n\tRTA_AUTHOR                     = 0x40\n\tRTA_BRD                        = 0x80\n\tRTA_DST                        = 0x1\n\tRTA_GATEWAY                    = 0x2\n\tRTA_GENMASK                    = 0x8\n\tRTA_IFA                        = 0x20\n\tRTA_IFP                        = 0x10\n\tRTA_NETMASK                    = 0x4\n\tRTF_BLACKHOLE                  = 0x1000\n\tRTF_BROADCAST                  = 0x400000\n\tRTF_DONE                       = 0x40\n\tRTF_DYNAMIC                    = 0x10\n\tRTF_FIXEDMTU                   = 0x80000\n\tRTF_FMASK                      = 0x1004d808\n\tRTF_GATEWAY                    = 0x2\n\tRTF_GWFLAG_COMPAT              = 0x80000000\n\tRTF_HOST                       = 0x4\n\tRTF_LLDATA                     = 0x400\n\tRTF_LLINFO                     = 0x400\n\tRTF_LOCAL                      = 0x200000\n\tRTF_MODIFIED                   = 0x20\n\tRTF_MULTICAST                  = 0x800000\n\tRTF_PINNED                     = 0x100000\n\tRTF_PROTO1                     = 0x8000\n\tRTF_PROTO2                     = 0x4000\n\tRTF_PROTO3                     = 0x40000\n\tRTF_REJECT                     = 0x8\n\tRTF_STATIC                     = 0x800\n\tRTF_STICKY                     = 0x10000000\n\tRTF_UP                         = 0x1\n\tRTF_XRESOLVE                   = 0x200\n\tRTM_ADD                        = 0x1\n\tRTM_CHANGE                     = 0x3\n\tRTM_DELADDR                    = 0xd\n\tRTM_DELETE                     = 0x2\n\tRTM_DELMADDR                   = 0x10\n\tRTM_GET                        = 0x4\n\tRTM_IEEE80211                  = 0x12\n\tRTM_IFANNOUNCE                 = 0x11\n\tRTM_IFINFO                     = 0xe\n\tRTM_LOCK                       = 0x8\n\tRTM_LOSING                     = 0x5\n\tRTM_MISS                       = 0x7\n\tRTM_NEWADDR                    = 0xc\n\tRTM_NEWMADDR                   = 0xf\n\tRTM_REDIRECT                   = 0x6\n\tRTM_RESOLVE                    = 0xb\n\tRTM_RTTUNIT                    = 0xf4240\n\tRTM_VERSION                    = 0x5\n\tRTV_EXPIRE                     = 0x4\n\tRTV_HOPCOUNT                   = 0x2\n\tRTV_MTU                        = 0x1\n\tRTV_RPIPE                      = 0x8\n\tRTV_RTT                        = 0x40\n\tRTV_RTTVAR                     = 0x80\n\tRTV_SPIPE                      = 0x10\n\tRTV_SSTHRESH                   = 0x20\n\tRTV_WEIGHT                     = 0x100\n\tRT_ALL_FIBS                    = -0x1\n\tRT_BLACKHOLE                   = 0x40\n\tRT_DEFAULT_FIB                 = 0x0\n\tRT_DEFAULT_WEIGHT              = 0x1\n\tRT_HAS_GW                      = 0x80\n\tRT_HAS_HEADER                  = 0x10\n\tRT_HAS_HEADER_BIT              = 0x4\n\tRT_L2_ME                       = 0x4\n\tRT_L2_ME_BIT                   = 0x2\n\tRT_LLE_CACHE                   = 0x100\n\tRT_MAX_WEIGHT                  = 0xffffff\n\tRT_MAY_LOOP                    = 0x8\n\tRT_MAY_LOOP_BIT                = 0x3\n\tRT_REJECT                      = 0x20\n\tRUSAGE_CHILDREN                = -0x1\n\tRUSAGE_SELF                    = 0x0\n\tRUSAGE_THREAD                  = 0x1\n\tSCM_BINTIME                    = 0x4\n\tSCM_CREDS                      = 0x3\n\tSCM_CREDS2                     = 0x8\n\tSCM_MONOTONIC                  = 0x6\n\tSCM_REALTIME                   = 0x5\n\tSCM_RIGHTS                     = 0x1\n\tSCM_TIMESTAMP                  = 0x2\n\tSCM_TIME_INFO                  = 0x7\n\tSEEK_CUR                       = 0x1\n\tSEEK_DATA                      = 0x3\n\tSEEK_END                       = 0x2\n\tSEEK_HOLE                      = 0x4\n\tSEEK_SET                       = 0x0\n\tSHUT_RD                        = 0x0\n\tSHUT_RDWR                      = 0x2\n\tSHUT_WR                        = 0x1\n\tSIOCADDMULTI                   = 0x80206931\n\tSIOCAIFADDR                    = 0x8040691a\n\tSIOCAIFGROUP                   = 0x80286987\n\tSIOCATMARK                     = 0x40047307\n\tSIOCDELMULTI                   = 0x80206932\n\tSIOCDIFADDR                    = 0x80206919\n\tSIOCDIFGROUP                   = 0x80286989\n\tSIOCDIFPHYADDR                 = 0x80206949\n\tSIOCGDRVSPEC                   = 0xc028697b\n\tSIOCGETSGCNT                   = 0xc0207210\n\tSIOCGETVIFCNT                  = 0xc028720f\n\tSIOCGHIWAT                     = 0x40047301\n\tSIOCGHWADDR                    = 0xc020693e\n\tSIOCGI2C                       = 0xc020693d\n\tSIOCGIFADDR                    = 0xc0206921\n\tSIOCGIFALIAS                   = 0xc044692d\n\tSIOCGIFBRDADDR                 = 0xc0206923\n\tSIOCGIFCAP                     = 0xc020691f\n\tSIOCGIFCONF                    = 0xc0106924\n\tSIOCGIFDATA                    = 0x8020692c\n\tSIOCGIFDESCR                   = 0xc020692a\n\tSIOCGIFDOWNREASON              = 0xc058699a\n\tSIOCGIFDSTADDR                 = 0xc0206922\n\tSIOCGIFFIB                     = 0xc020695c\n\tSIOCGIFFLAGS                   = 0xc0206911\n\tSIOCGIFGENERIC                 = 0xc020693a\n\tSIOCGIFGMEMB                   = 0xc028698a\n\tSIOCGIFGROUP                   = 0xc0286988\n\tSIOCGIFINDEX                   = 0xc0206920\n\tSIOCGIFMAC                     = 0xc0206926\n\tSIOCGIFMEDIA                   = 0xc0306938\n\tSIOCGIFMETRIC                  = 0xc0206917\n\tSIOCGIFMTU                     = 0xc0206933\n\tSIOCGIFNETMASK                 = 0xc0206925\n\tSIOCGIFPDSTADDR                = 0xc0206948\n\tSIOCGIFPHYS                    = 0xc0206935\n\tSIOCGIFPSRCADDR                = 0xc0206947\n\tSIOCGIFRSSHASH                 = 0xc0186997\n\tSIOCGIFRSSKEY                  = 0xc0946996\n\tSIOCGIFSTATUS                  = 0xc331693b\n\tSIOCGIFXMEDIA                  = 0xc030698b\n\tSIOCGLANPCP                    = 0xc0206998\n\tSIOCGLOWAT                     = 0x40047303\n\tSIOCGPGRP                      = 0x40047309\n\tSIOCGPRIVATE_0                 = 0xc0206950\n\tSIOCGPRIVATE_1                 = 0xc0206951\n\tSIOCGTUNFIB                    = 0xc020695e\n\tSIOCIFCREATE                   = 0xc020697a\n\tSIOCIFCREATE2                  = 0xc020697c\n\tSIOCIFDESTROY                  = 0x80206979\n\tSIOCIFGCLONERS                 = 0xc0106978\n\tSIOCSDRVSPEC                   = 0x8028697b\n\tSIOCSHIWAT                     = 0x80047300\n\tSIOCSIFADDR                    = 0x8020690c\n\tSIOCSIFBRDADDR                 = 0x80206913\n\tSIOCSIFCAP                     = 0x8020691e\n\tSIOCSIFDESCR                   = 0x80206929\n\tSIOCSIFDSTADDR                 = 0x8020690e\n\tSIOCSIFFIB                     = 0x8020695d\n\tSIOCSIFFLAGS                   = 0x80206910\n\tSIOCSIFGENERIC                 = 0x80206939\n\tSIOCSIFLLADDR                  = 0x8020693c\n\tSIOCSIFMAC                     = 0x80206927\n\tSIOCSIFMEDIA                   = 0xc0206937\n\tSIOCSIFMETRIC                  = 0x80206918\n\tSIOCSIFMTU                     = 0x80206934\n\tSIOCSIFNAME                    = 0x80206928\n\tSIOCSIFNETMASK                 = 0x80206916\n\tSIOCSIFPHYADDR                 = 0x80406946\n\tSIOCSIFPHYS                    = 0x80206936\n\tSIOCSIFRVNET                   = 0xc020695b\n\tSIOCSIFVNET                    = 0xc020695a\n\tSIOCSLANPCP                    = 0x80206999\n\tSIOCSLOWAT                     = 0x80047302\n\tSIOCSPGRP                      = 0x80047308\n\tSIOCSTUNFIB                    = 0x8020695f\n\tSOCK_CLOEXEC                   = 0x10000000\n\tSOCK_DGRAM                     = 0x2\n\tSOCK_MAXADDRLEN                = 0xff\n\tSOCK_NONBLOCK                  = 0x20000000\n\tSOCK_RAW                       = 0x3\n\tSOCK_RDM                       = 0x4\n\tSOCK_SEQPACKET                 = 0x5\n\tSOCK_STREAM                    = 0x1\n\tSOL_LOCAL                      = 0x0\n\tSOL_SOCKET                     = 0xffff\n\tSOMAXCONN                      = 0x80\n\tSO_ACCEPTCONN                  = 0x2\n\tSO_ACCEPTFILTER                = 0x1000\n\tSO_BINTIME                     = 0x2000\n\tSO_BROADCAST                   = 0x20\n\tSO_DEBUG                       = 0x1\n\tSO_DOMAIN                      = 0x1019\n\tSO_DONTROUTE                   = 0x10\n\tSO_ERROR                       = 0x1007\n\tSO_KEEPALIVE                   = 0x8\n\tSO_LABEL                       = 0x1009\n\tSO_LINGER                      = 0x80\n\tSO_LISTENINCQLEN               = 0x1013\n\tSO_LISTENQLEN                  = 0x1012\n\tSO_LISTENQLIMIT                = 0x1011\n\tSO_MAX_PACING_RATE             = 0x1018\n\tSO_NOSIGPIPE                   = 0x800\n\tSO_NO_DDP                      = 0x8000\n\tSO_NO_OFFLOAD                  = 0x4000\n\tSO_OOBINLINE                   = 0x100\n\tSO_PEERLABEL                   = 0x1010\n\tSO_PROTOCOL                    = 0x1016\n\tSO_PROTOTYPE                   = 0x1016\n\tSO_RCVBUF                      = 0x1002\n\tSO_RCVLOWAT                    = 0x1004\n\tSO_RCVTIMEO                    = 0x1006\n\tSO_RERROR                      = 0x20000\n\tSO_REUSEADDR                   = 0x4\n\tSO_REUSEPORT                   = 0x200\n\tSO_REUSEPORT_LB                = 0x10000\n\tSO_SETFIB                      = 0x1014\n\tSO_SNDBUF                      = 0x1001\n\tSO_SNDLOWAT                    = 0x1003\n\tSO_SNDTIMEO                    = 0x1005\n\tSO_TIMESTAMP                   = 0x400\n\tSO_TS_BINTIME                  = 0x1\n\tSO_TS_CLOCK                    = 0x1017\n\tSO_TS_CLOCK_MAX                = 0x3\n\tSO_TS_DEFAULT                  = 0x0\n\tSO_TS_MONOTONIC                = 0x3\n\tSO_TS_REALTIME                 = 0x2\n\tSO_TS_REALTIME_MICRO           = 0x0\n\tSO_TYPE                        = 0x1008\n\tSO_USELOOPBACK                 = 0x40\n\tSO_USER_COOKIE                 = 0x1015\n\tSO_VENDOR                      = 0x80000000\n\tS_BLKSIZE                      = 0x200\n\tS_IEXEC                        = 0x40\n\tS_IFBLK                        = 0x6000\n\tS_IFCHR                        = 0x2000\n\tS_IFDIR                        = 0x4000\n\tS_IFIFO                        = 0x1000\n\tS_IFLNK                        = 0xa000\n\tS_IFMT                         = 0xf000\n\tS_IFREG                        = 0x8000\n\tS_IFSOCK                       = 0xc000\n\tS_IFWHT                        = 0xe000\n\tS_IREAD                        = 0x100\n\tS_IRGRP                        = 0x20\n\tS_IROTH                        = 0x4\n\tS_IRUSR                        = 0x100\n\tS_IRWXG                        = 0x38\n\tS_IRWXO                        = 0x7\n\tS_IRWXU                        = 0x1c0\n\tS_ISGID                        = 0x400\n\tS_ISTXT                        = 0x200\n\tS_ISUID                        = 0x800\n\tS_ISVTX                        = 0x200\n\tS_IWGRP                        = 0x10\n\tS_IWOTH                        = 0x2\n\tS_IWRITE                       = 0x80\n\tS_IWUSR                        = 0x80\n\tS_IXGRP                        = 0x8\n\tS_IXOTH                        = 0x1\n\tS_IXUSR                        = 0x40\n\tTAB0                           = 0x0\n\tTAB3                           = 0x4\n\tTABDLY                         = 0x4\n\tTCIFLUSH                       = 0x1\n\tTCIOFF                         = 0x3\n\tTCIOFLUSH                      = 0x3\n\tTCION                          = 0x4\n\tTCOFLUSH                       = 0x2\n\tTCOOFF                         = 0x1\n\tTCOON                          = 0x2\n\tTCPOPT_EOL                     = 0x0\n\tTCPOPT_FAST_OPEN               = 0x22\n\tTCPOPT_MAXSEG                  = 0x2\n\tTCPOPT_NOP                     = 0x1\n\tTCPOPT_PAD                     = 0x0\n\tTCPOPT_SACK                    = 0x5\n\tTCPOPT_SACK_PERMITTED          = 0x4\n\tTCPOPT_SIGNATURE               = 0x13\n\tTCPOPT_TIMESTAMP               = 0x8\n\tTCPOPT_WINDOW                  = 0x3\n\tTCP_BBR_ACK_COMP_ALG           = 0x448\n\tTCP_BBR_ALGORITHM              = 0x43b\n\tTCP_BBR_DRAIN_INC_EXTRA        = 0x43c\n\tTCP_BBR_DRAIN_PG               = 0x42e\n\tTCP_BBR_EXTRA_GAIN             = 0x449\n\tTCP_BBR_EXTRA_STATE            = 0x453\n\tTCP_BBR_FLOOR_MIN_TSO          = 0x454\n\tTCP_BBR_HDWR_PACE              = 0x451\n\tTCP_BBR_HOLD_TARGET            = 0x436\n\tTCP_BBR_IWINTSO                = 0x42b\n\tTCP_BBR_LOWGAIN_FD             = 0x436\n\tTCP_BBR_LOWGAIN_HALF           = 0x435\n\tTCP_BBR_LOWGAIN_THRESH         = 0x434\n\tTCP_BBR_MAX_RTO                = 0x439\n\tTCP_BBR_MIN_RTO                = 0x438\n\tTCP_BBR_MIN_TOPACEOUT          = 0x455\n\tTCP_BBR_ONE_RETRAN             = 0x431\n\tTCP_BBR_PACE_CROSS             = 0x442\n\tTCP_BBR_PACE_DEL_TAR           = 0x43f\n\tTCP_BBR_PACE_OH                = 0x435\n\tTCP_BBR_PACE_PER_SEC           = 0x43e\n\tTCP_BBR_PACE_SEG_MAX           = 0x440\n\tTCP_BBR_PACE_SEG_MIN           = 0x441\n\tTCP_BBR_POLICER_DETECT         = 0x457\n\tTCP_BBR_PROBE_RTT_GAIN         = 0x44d\n\tTCP_BBR_PROBE_RTT_INT          = 0x430\n\tTCP_BBR_PROBE_RTT_LEN          = 0x44e\n\tTCP_BBR_RACK_INIT_RATE         = 0x458\n\tTCP_BBR_RACK_RTT_USE           = 0x44a\n\tTCP_BBR_RECFORCE               = 0x42c\n\tTCP_BBR_REC_OVER_HPTS          = 0x43a\n\tTCP_BBR_RETRAN_WTSO            = 0x44b\n\tTCP_BBR_RWND_IS_APP            = 0x42f\n\tTCP_BBR_SEND_IWND_IN_TSO       = 0x44f\n\tTCP_BBR_STARTUP_EXIT_EPOCH     = 0x43d\n\tTCP_BBR_STARTUP_LOSS_EXIT      = 0x432\n\tTCP_BBR_STARTUP_PG             = 0x42d\n\tTCP_BBR_TMR_PACE_OH            = 0x448\n\tTCP_BBR_TSLIMITS               = 0x434\n\tTCP_BBR_TSTMP_RAISES           = 0x456\n\tTCP_BBR_UNLIMITED              = 0x43b\n\tTCP_BBR_USEDEL_RATE            = 0x437\n\tTCP_BBR_USE_LOWGAIN            = 0x433\n\tTCP_BBR_USE_RACK_CHEAT         = 0x450\n\tTCP_BBR_USE_RACK_RR            = 0x450\n\tTCP_BBR_UTTER_MAX_TSO          = 0x452\n\tTCP_CA_NAME_MAX                = 0x10\n\tTCP_CCALGOOPT                  = 0x41\n\tTCP_CONGESTION                 = 0x40\n\tTCP_DATA_AFTER_CLOSE           = 0x44c\n\tTCP_DEFER_OPTIONS              = 0x470\n\tTCP_DELACK                     = 0x48\n\tTCP_FASTOPEN                   = 0x401\n\tTCP_FASTOPEN_MAX_COOKIE_LEN    = 0x10\n\tTCP_FASTOPEN_MIN_COOKIE_LEN    = 0x4\n\tTCP_FASTOPEN_PSK_LEN           = 0x10\n\tTCP_FAST_RSM_HACK              = 0x471\n\tTCP_FIN_IS_RST                 = 0x49\n\tTCP_FUNCTION_BLK               = 0x2000\n\tTCP_FUNCTION_NAME_LEN_MAX      = 0x20\n\tTCP_HDWR_RATE_CAP              = 0x46a\n\tTCP_HDWR_UP_ONLY               = 0x46c\n\tTCP_IDLE_REDUCE                = 0x46\n\tTCP_INFO                       = 0x20\n\tTCP_IWND_NB                    = 0x2b\n\tTCP_IWND_NSEG                  = 0x2c\n\tTCP_KEEPCNT                    = 0x400\n\tTCP_KEEPIDLE                   = 0x100\n\tTCP_KEEPINIT                   = 0x80\n\tTCP_KEEPINTVL                  = 0x200\n\tTCP_LOG                        = 0x22\n\tTCP_LOGBUF                     = 0x23\n\tTCP_LOGDUMP                    = 0x25\n\tTCP_LOGDUMPID                  = 0x26\n\tTCP_LOGID                      = 0x24\n\tTCP_LOGID_CNT                  = 0x2e\n\tTCP_LOG_ID_LEN                 = 0x40\n\tTCP_LOG_LIMIT                  = 0x4a\n\tTCP_LOG_TAG                    = 0x2f\n\tTCP_MAXBURST                   = 0x4\n\tTCP_MAXHLEN                    = 0x3c\n\tTCP_MAXOLEN                    = 0x28\n\tTCP_MAXPEAKRATE                = 0x45\n\tTCP_MAXSEG                     = 0x2\n\tTCP_MAXUNACKTIME               = 0x44\n\tTCP_MAXWIN                     = 0xffff\n\tTCP_MAX_SACK                   = 0x4\n\tTCP_MAX_WINSHIFT               = 0xe\n\tTCP_MD5SIG                     = 0x10\n\tTCP_MINMSS                     = 0xd8\n\tTCP_MSS                        = 0x218\n\tTCP_NODELAY                    = 0x1\n\tTCP_NOOPT                      = 0x8\n\tTCP_NOPUSH                     = 0x4\n\tTCP_NO_PRR                     = 0x462\n\tTCP_PACING_RATE_CAP            = 0x46b\n\tTCP_PCAP_IN                    = 0x1000\n\tTCP_PCAP_OUT                   = 0x800\n\tTCP_PERF_INFO                  = 0x4e\n\tTCP_PROC_ACCOUNTING            = 0x4c\n\tTCP_RACK_ABC_VAL               = 0x46d\n\tTCP_RACK_CHEAT_NOT_CONF_RATE   = 0x459\n\tTCP_RACK_DO_DETECTION          = 0x449\n\tTCP_RACK_EARLY_RECOV           = 0x423\n\tTCP_RACK_EARLY_SEG             = 0x424\n\tTCP_RACK_FORCE_MSEG            = 0x45d\n\tTCP_RACK_GP_INCREASE           = 0x446\n\tTCP_RACK_GP_INCREASE_CA        = 0x45a\n\tTCP_RACK_GP_INCREASE_REC       = 0x45c\n\tTCP_RACK_GP_INCREASE_SS        = 0x45b\n\tTCP_RACK_IDLE_REDUCE_HIGH      = 0x444\n\tTCP_RACK_MBUF_QUEUE            = 0x41a\n\tTCP_RACK_MEASURE_CNT           = 0x46f\n\tTCP_RACK_MIN_PACE              = 0x445\n\tTCP_RACK_MIN_PACE_SEG          = 0x446\n\tTCP_RACK_MIN_TO                = 0x422\n\tTCP_RACK_NONRXT_CFG_RATE       = 0x463\n\tTCP_RACK_NO_PUSH_AT_MAX        = 0x466\n\tTCP_RACK_PACE_ALWAYS           = 0x41f\n\tTCP_RACK_PACE_MAX_SEG          = 0x41e\n\tTCP_RACK_PACE_RATE_CA          = 0x45e\n\tTCP_RACK_PACE_RATE_REC         = 0x460\n\tTCP_RACK_PACE_RATE_SS          = 0x45f\n\tTCP_RACK_PACE_REDUCE           = 0x41d\n\tTCP_RACK_PACE_TO_FILL          = 0x467\n\tTCP_RACK_PACING_BETA           = 0x472\n\tTCP_RACK_PACING_BETA_ECN       = 0x473\n\tTCP_RACK_PKT_DELAY             = 0x428\n\tTCP_RACK_PROFILE               = 0x469\n\tTCP_RACK_PROP                  = 0x41b\n\tTCP_RACK_PROP_RATE             = 0x420\n\tTCP_RACK_PRR_SENDALOT          = 0x421\n\tTCP_RACK_REORD_FADE            = 0x426\n\tTCP_RACK_REORD_THRESH          = 0x425\n\tTCP_RACK_RR_CONF               = 0x459\n\tTCP_RACK_TIMER_SLOP            = 0x474\n\tTCP_RACK_TLP_INC_VAR           = 0x429\n\tTCP_RACK_TLP_REDUCE            = 0x41c\n\tTCP_RACK_TLP_THRESH            = 0x427\n\tTCP_RACK_TLP_USE               = 0x447\n\tTCP_REC_ABC_VAL                = 0x46e\n\tTCP_REMOTE_UDP_ENCAPS_PORT     = 0x47\n\tTCP_REUSPORT_LB_NUMA           = 0x402\n\tTCP_REUSPORT_LB_NUMA_CURDOM    = -0x1\n\tTCP_REUSPORT_LB_NUMA_NODOM     = -0x2\n\tTCP_RXTLS_ENABLE               = 0x29\n\tTCP_RXTLS_MODE                 = 0x2a\n\tTCP_SHARED_CWND_ALLOWED        = 0x4b\n\tTCP_SHARED_CWND_ENABLE         = 0x464\n\tTCP_SHARED_CWND_TIME_LIMIT     = 0x468\n\tTCP_STATS                      = 0x21\n\tTCP_TIMELY_DYN_ADJ             = 0x465\n\tTCP_TLS_MODE_IFNET             = 0x2\n\tTCP_TLS_MODE_NONE              = 0x0\n\tTCP_TLS_MODE_SW                = 0x1\n\tTCP_TLS_MODE_TOE               = 0x3\n\tTCP_TXTLS_ENABLE               = 0x27\n\tTCP_TXTLS_MODE                 = 0x28\n\tTCP_USER_LOG                   = 0x30\n\tTCP_USE_CMP_ACKS               = 0x4d\n\tTCP_VENDOR                     = 0x80000000\n\tTCSAFLUSH                      = 0x2\n\tTIMER_ABSTIME                  = 0x1\n\tTIMER_RELTIME                  = 0x0\n\tTIOCCBRK                       = 0x2000747a\n\tTIOCCDTR                       = 0x20007478\n\tTIOCCONS                       = 0x80047462\n\tTIOCDRAIN                      = 0x2000745e\n\tTIOCEXCL                       = 0x2000740d\n\tTIOCEXT                        = 0x80047460\n\tTIOCFLUSH                      = 0x80047410\n\tTIOCGDRAINWAIT                 = 0x40047456\n\tTIOCGETA                       = 0x402c7413\n\tTIOCGETD                       = 0x4004741a\n\tTIOCGPGRP                      = 0x40047477\n\tTIOCGPTN                       = 0x4004740f\n\tTIOCGSID                       = 0x40047463\n\tTIOCGWINSZ                     = 0x40087468\n\tTIOCMBIC                       = 0x8004746b\n\tTIOCMBIS                       = 0x8004746c\n\tTIOCMGDTRWAIT                  = 0x4004745a\n\tTIOCMGET                       = 0x4004746a\n\tTIOCMSDTRWAIT                  = 0x8004745b\n\tTIOCMSET                       = 0x8004746d\n\tTIOCM_CAR                      = 0x40\n\tTIOCM_CD                       = 0x40\n\tTIOCM_CTS                      = 0x20\n\tTIOCM_DCD                      = 0x40\n\tTIOCM_DSR                      = 0x100\n\tTIOCM_DTR                      = 0x2\n\tTIOCM_LE                       = 0x1\n\tTIOCM_RI                       = 0x80\n\tTIOCM_RNG                      = 0x80\n\tTIOCM_RTS                      = 0x4\n\tTIOCM_SR                       = 0x10\n\tTIOCM_ST                       = 0x8\n\tTIOCNOTTY                      = 0x20007471\n\tTIOCNXCL                       = 0x2000740e\n\tTIOCOUTQ                       = 0x40047473\n\tTIOCPKT                        = 0x80047470\n\tTIOCPKT_DATA                   = 0x0\n\tTIOCPKT_DOSTOP                 = 0x20\n\tTIOCPKT_FLUSHREAD              = 0x1\n\tTIOCPKT_FLUSHWRITE             = 0x2\n\tTIOCPKT_IOCTL                  = 0x40\n\tTIOCPKT_NOSTOP                 = 0x10\n\tTIOCPKT_START                  = 0x8\n\tTIOCPKT_STOP                   = 0x4\n\tTIOCPTMASTER                   = 0x2000741c\n\tTIOCSBRK                       = 0x2000747b\n\tTIOCSCTTY                      = 0x20007461\n\tTIOCSDRAINWAIT                 = 0x80047457\n\tTIOCSDTR                       = 0x20007479\n\tTIOCSETA                       = 0x802c7414\n\tTIOCSETAF                      = 0x802c7416\n\tTIOCSETAW                      = 0x802c7415\n\tTIOCSETD                       = 0x8004741b\n\tTIOCSIG                        = 0x2004745f\n\tTIOCSPGRP                      = 0x80047476\n\tTIOCSTART                      = 0x2000746e\n\tTIOCSTAT                       = 0x20007465\n\tTIOCSTI                        = 0x80017472\n\tTIOCSTOP                       = 0x2000746f\n\tTIOCSWINSZ                     = 0x80087467\n\tTIOCTIMESTAMP                  = 0x40107459\n\tTIOCUCNTL                      = 0x80047466\n\tTOSTOP                         = 0x400000\n\tUTIME_NOW                      = -0x1\n\tUTIME_OMIT                     = -0x2\n\tVDISCARD                       = 0xf\n\tVDSUSP                         = 0xb\n\tVEOF                           = 0x0\n\tVEOL                           = 0x1\n\tVEOL2                          = 0x2\n\tVERASE                         = 0x3\n\tVERASE2                        = 0x7\n\tVINTR                          = 0x8\n\tVKILL                          = 0x5\n\tVLNEXT                         = 0xe\n\tVMIN                           = 0x10\n\tVQUIT                          = 0x9\n\tVREPRINT                       = 0x6\n\tVSTART                         = 0xc\n\tVSTATUS                        = 0x12\n\tVSTOP                          = 0xd\n\tVSUSP                          = 0xa\n\tVTIME                          = 0x11\n\tVWERASE                        = 0x4\n\tWCONTINUED                     = 0x4\n\tWCOREFLAG                      = 0x80\n\tWEXITED                        = 0x10\n\tWLINUXCLONE                    = 0x80000000\n\tWNOHANG                        = 0x1\n\tWNOWAIT                        = 0x8\n\tWSTOPPED                       = 0x2\n\tWTRAPPED                       = 0x20\n\tWUNTRACED                      = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x59)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x55)\n\tECAPMODE        = syscall.Errno(0x5e)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDOOFUS         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x56)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTEGRITY      = syscall.Errno(0x61)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x61)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5a)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x57)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5b)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCAPABLE     = syscall.Errno(0x5d)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5f)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEOWNERDEAD      = syscall.Errno(0x60)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5c)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGLIBRT  = syscall.Signal(0x21)\n\tSIGLWP    = syscall.Signal(0x20)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EWOULDBLOCK\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"ECANCELED\", \"operation canceled\"},\n\t{86, \"EILSEQ\", \"illegal byte sequence\"},\n\t{87, \"ENOATTR\", \"attribute not found\"},\n\t{88, \"EDOOFUS\", \"programming error\"},\n\t{89, \"EBADMSG\", \"bad message\"},\n\t{90, \"EMULTIHOP\", \"multihop attempted\"},\n\t{91, \"ENOLINK\", \"link has been severed\"},\n\t{92, \"EPROTO\", \"protocol error\"},\n\t{93, \"ENOTCAPABLE\", \"capabilities insufficient\"},\n\t{94, \"ECAPMODE\", \"not permitted in capability mode\"},\n\t{95, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{96, \"EOWNERDEAD\", \"previous owner died\"},\n\t{97, \"EINTEGRITY\", \"integrity check failed\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"unknown signal\"},\n\t{33, \"SIGLIBRT\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux.go",
    "content": "// Code generated by mkmerge; DO NOT EDIT.\n\n//go:build linux\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAAFS_MAGIC                                  = 0x5a3c69f0\n\tADFS_SUPER_MAGIC                            = 0xadf5\n\tAFFS_SUPER_MAGIC                            = 0xadff\n\tAFS_FS_MAGIC                                = 0x6b414653\n\tAFS_SUPER_MAGIC                             = 0x5346414f\n\tAF_ALG                                      = 0x26\n\tAF_APPLETALK                                = 0x5\n\tAF_ASH                                      = 0x12\n\tAF_ATMPVC                                   = 0x8\n\tAF_ATMSVC                                   = 0x14\n\tAF_AX25                                     = 0x3\n\tAF_BLUETOOTH                                = 0x1f\n\tAF_BRIDGE                                   = 0x7\n\tAF_CAIF                                     = 0x25\n\tAF_CAN                                      = 0x1d\n\tAF_DECnet                                   = 0xc\n\tAF_ECONET                                   = 0x13\n\tAF_FILE                                     = 0x1\n\tAF_IB                                       = 0x1b\n\tAF_IEEE802154                               = 0x24\n\tAF_INET                                     = 0x2\n\tAF_INET6                                    = 0xa\n\tAF_IPX                                      = 0x4\n\tAF_IRDA                                     = 0x17\n\tAF_ISDN                                     = 0x22\n\tAF_IUCV                                     = 0x20\n\tAF_KCM                                      = 0x29\n\tAF_KEY                                      = 0xf\n\tAF_LLC                                      = 0x1a\n\tAF_LOCAL                                    = 0x1\n\tAF_MAX                                      = 0x2e\n\tAF_MCTP                                     = 0x2d\n\tAF_MPLS                                     = 0x1c\n\tAF_NETBEUI                                  = 0xd\n\tAF_NETLINK                                  = 0x10\n\tAF_NETROM                                   = 0x6\n\tAF_NFC                                      = 0x27\n\tAF_PACKET                                   = 0x11\n\tAF_PHONET                                   = 0x23\n\tAF_PPPOX                                    = 0x18\n\tAF_QIPCRTR                                  = 0x2a\n\tAF_RDS                                      = 0x15\n\tAF_ROSE                                     = 0xb\n\tAF_ROUTE                                    = 0x10\n\tAF_RXRPC                                    = 0x21\n\tAF_SECURITY                                 = 0xe\n\tAF_SMC                                      = 0x2b\n\tAF_SNA                                      = 0x16\n\tAF_TIPC                                     = 0x1e\n\tAF_UNIX                                     = 0x1\n\tAF_UNSPEC                                   = 0x0\n\tAF_VSOCK                                    = 0x28\n\tAF_WANPIPE                                  = 0x19\n\tAF_X25                                      = 0x9\n\tAF_XDP                                      = 0x2c\n\tALG_OP_DECRYPT                              = 0x0\n\tALG_OP_ENCRYPT                              = 0x1\n\tALG_SET_AEAD_ASSOCLEN                       = 0x4\n\tALG_SET_AEAD_AUTHSIZE                       = 0x5\n\tALG_SET_DRBG_ENTROPY                        = 0x6\n\tALG_SET_IV                                  = 0x2\n\tALG_SET_KEY                                 = 0x1\n\tALG_SET_KEY_BY_KEY_SERIAL                   = 0x7\n\tALG_SET_OP                                  = 0x3\n\tANON_INODE_FS_MAGIC                         = 0x9041934\n\tARPHRD_6LOWPAN                              = 0x339\n\tARPHRD_ADAPT                                = 0x108\n\tARPHRD_APPLETLK                             = 0x8\n\tARPHRD_ARCNET                               = 0x7\n\tARPHRD_ASH                                  = 0x30d\n\tARPHRD_ATM                                  = 0x13\n\tARPHRD_AX25                                 = 0x3\n\tARPHRD_BIF                                  = 0x307\n\tARPHRD_CAIF                                 = 0x336\n\tARPHRD_CAN                                  = 0x118\n\tARPHRD_CHAOS                                = 0x5\n\tARPHRD_CISCO                                = 0x201\n\tARPHRD_CSLIP                                = 0x101\n\tARPHRD_CSLIP6                               = 0x103\n\tARPHRD_DDCMP                                = 0x205\n\tARPHRD_DLCI                                 = 0xf\n\tARPHRD_ECONET                               = 0x30e\n\tARPHRD_EETHER                               = 0x2\n\tARPHRD_ETHER                                = 0x1\n\tARPHRD_EUI64                                = 0x1b\n\tARPHRD_FCAL                                 = 0x311\n\tARPHRD_FCFABRIC                             = 0x313\n\tARPHRD_FCPL                                 = 0x312\n\tARPHRD_FCPP                                 = 0x310\n\tARPHRD_FDDI                                 = 0x306\n\tARPHRD_FRAD                                 = 0x302\n\tARPHRD_HDLC                                 = 0x201\n\tARPHRD_HIPPI                                = 0x30c\n\tARPHRD_HWX25                                = 0x110\n\tARPHRD_IEEE1394                             = 0x18\n\tARPHRD_IEEE802                              = 0x6\n\tARPHRD_IEEE80211                            = 0x321\n\tARPHRD_IEEE80211_PRISM                      = 0x322\n\tARPHRD_IEEE80211_RADIOTAP                   = 0x323\n\tARPHRD_IEEE802154                           = 0x324\n\tARPHRD_IEEE802154_MONITOR                   = 0x325\n\tARPHRD_IEEE802_TR                           = 0x320\n\tARPHRD_INFINIBAND                           = 0x20\n\tARPHRD_IP6GRE                               = 0x337\n\tARPHRD_IPDDP                                = 0x309\n\tARPHRD_IPGRE                                = 0x30a\n\tARPHRD_IRDA                                 = 0x30f\n\tARPHRD_LAPB                                 = 0x204\n\tARPHRD_LOCALTLK                             = 0x305\n\tARPHRD_LOOPBACK                             = 0x304\n\tARPHRD_MCTP                                 = 0x122\n\tARPHRD_METRICOM                             = 0x17\n\tARPHRD_NETLINK                              = 0x338\n\tARPHRD_NETROM                               = 0x0\n\tARPHRD_NONE                                 = 0xfffe\n\tARPHRD_PHONET                               = 0x334\n\tARPHRD_PHONET_PIPE                          = 0x335\n\tARPHRD_PIMREG                               = 0x30b\n\tARPHRD_PPP                                  = 0x200\n\tARPHRD_PRONET                               = 0x4\n\tARPHRD_RAWHDLC                              = 0x206\n\tARPHRD_RAWIP                                = 0x207\n\tARPHRD_ROSE                                 = 0x10e\n\tARPHRD_RSRVD                                = 0x104\n\tARPHRD_SIT                                  = 0x308\n\tARPHRD_SKIP                                 = 0x303\n\tARPHRD_SLIP                                 = 0x100\n\tARPHRD_SLIP6                                = 0x102\n\tARPHRD_TUNNEL                               = 0x300\n\tARPHRD_TUNNEL6                              = 0x301\n\tARPHRD_VOID                                 = 0xffff\n\tARPHRD_VSOCKMON                             = 0x33a\n\tARPHRD_X25                                  = 0x10f\n\tAUDIT_ADD                                   = 0x3eb\n\tAUDIT_ADD_RULE                              = 0x3f3\n\tAUDIT_ALWAYS                                = 0x2\n\tAUDIT_ANOM_ABEND                            = 0x6a5\n\tAUDIT_ANOM_CREAT                            = 0x6a7\n\tAUDIT_ANOM_LINK                             = 0x6a6\n\tAUDIT_ANOM_PROMISCUOUS                      = 0x6a4\n\tAUDIT_ARCH                                  = 0xb\n\tAUDIT_ARCH_AARCH64                          = 0xc00000b7\n\tAUDIT_ARCH_ALPHA                            = 0xc0009026\n\tAUDIT_ARCH_ARCOMPACT                        = 0x4000005d\n\tAUDIT_ARCH_ARCOMPACTBE                      = 0x5d\n\tAUDIT_ARCH_ARCV2                            = 0x400000c3\n\tAUDIT_ARCH_ARCV2BE                          = 0xc3\n\tAUDIT_ARCH_ARM                              = 0x40000028\n\tAUDIT_ARCH_ARMEB                            = 0x28\n\tAUDIT_ARCH_C6X                              = 0x4000008c\n\tAUDIT_ARCH_C6XBE                            = 0x8c\n\tAUDIT_ARCH_CRIS                             = 0x4000004c\n\tAUDIT_ARCH_CSKY                             = 0x400000fc\n\tAUDIT_ARCH_FRV                              = 0x5441\n\tAUDIT_ARCH_H8300                            = 0x2e\n\tAUDIT_ARCH_HEXAGON                          = 0xa4\n\tAUDIT_ARCH_I386                             = 0x40000003\n\tAUDIT_ARCH_IA64                             = 0xc0000032\n\tAUDIT_ARCH_LOONGARCH32                      = 0x40000102\n\tAUDIT_ARCH_LOONGARCH64                      = 0xc0000102\n\tAUDIT_ARCH_M32R                             = 0x58\n\tAUDIT_ARCH_M68K                             = 0x4\n\tAUDIT_ARCH_MICROBLAZE                       = 0xbd\n\tAUDIT_ARCH_MIPS                             = 0x8\n\tAUDIT_ARCH_MIPS64                           = 0x80000008\n\tAUDIT_ARCH_MIPS64N32                        = 0xa0000008\n\tAUDIT_ARCH_MIPSEL                           = 0x40000008\n\tAUDIT_ARCH_MIPSEL64                         = 0xc0000008\n\tAUDIT_ARCH_MIPSEL64N32                      = 0xe0000008\n\tAUDIT_ARCH_NDS32                            = 0x400000a7\n\tAUDIT_ARCH_NDS32BE                          = 0xa7\n\tAUDIT_ARCH_NIOS2                            = 0x40000071\n\tAUDIT_ARCH_OPENRISC                         = 0x5c\n\tAUDIT_ARCH_PARISC                           = 0xf\n\tAUDIT_ARCH_PARISC64                         = 0x8000000f\n\tAUDIT_ARCH_PPC                              = 0x14\n\tAUDIT_ARCH_PPC64                            = 0x80000015\n\tAUDIT_ARCH_PPC64LE                          = 0xc0000015\n\tAUDIT_ARCH_RISCV32                          = 0x400000f3\n\tAUDIT_ARCH_RISCV64                          = 0xc00000f3\n\tAUDIT_ARCH_S390                             = 0x16\n\tAUDIT_ARCH_S390X                            = 0x80000016\n\tAUDIT_ARCH_SH                               = 0x2a\n\tAUDIT_ARCH_SH64                             = 0x8000002a\n\tAUDIT_ARCH_SHEL                             = 0x4000002a\n\tAUDIT_ARCH_SHEL64                           = 0xc000002a\n\tAUDIT_ARCH_SPARC                            = 0x2\n\tAUDIT_ARCH_SPARC64                          = 0x8000002b\n\tAUDIT_ARCH_TILEGX                           = 0xc00000bf\n\tAUDIT_ARCH_TILEGX32                         = 0x400000bf\n\tAUDIT_ARCH_TILEPRO                          = 0x400000bc\n\tAUDIT_ARCH_UNICORE                          = 0x4000006e\n\tAUDIT_ARCH_X86_64                           = 0xc000003e\n\tAUDIT_ARCH_XTENSA                           = 0x5e\n\tAUDIT_ARG0                                  = 0xc8\n\tAUDIT_ARG1                                  = 0xc9\n\tAUDIT_ARG2                                  = 0xca\n\tAUDIT_ARG3                                  = 0xcb\n\tAUDIT_AVC                                   = 0x578\n\tAUDIT_AVC_PATH                              = 0x57a\n\tAUDIT_BITMASK_SIZE                          = 0x40\n\tAUDIT_BIT_MASK                              = 0x8000000\n\tAUDIT_BIT_TEST                              = 0x48000000\n\tAUDIT_BPF                                   = 0x536\n\tAUDIT_BPRM_FCAPS                            = 0x529\n\tAUDIT_CAPSET                                = 0x52a\n\tAUDIT_CLASS_CHATTR                          = 0x2\n\tAUDIT_CLASS_CHATTR_32                       = 0x3\n\tAUDIT_CLASS_DIR_WRITE                       = 0x0\n\tAUDIT_CLASS_DIR_WRITE_32                    = 0x1\n\tAUDIT_CLASS_READ                            = 0x4\n\tAUDIT_CLASS_READ_32                         = 0x5\n\tAUDIT_CLASS_SIGNAL                          = 0x8\n\tAUDIT_CLASS_SIGNAL_32                       = 0x9\n\tAUDIT_CLASS_WRITE                           = 0x6\n\tAUDIT_CLASS_WRITE_32                        = 0x7\n\tAUDIT_COMPARE_AUID_TO_EUID                  = 0x10\n\tAUDIT_COMPARE_AUID_TO_FSUID                 = 0xe\n\tAUDIT_COMPARE_AUID_TO_OBJ_UID               = 0x5\n\tAUDIT_COMPARE_AUID_TO_SUID                  = 0xf\n\tAUDIT_COMPARE_EGID_TO_FSGID                 = 0x17\n\tAUDIT_COMPARE_EGID_TO_OBJ_GID               = 0x4\n\tAUDIT_COMPARE_EGID_TO_SGID                  = 0x18\n\tAUDIT_COMPARE_EUID_TO_FSUID                 = 0x12\n\tAUDIT_COMPARE_EUID_TO_OBJ_UID               = 0x3\n\tAUDIT_COMPARE_EUID_TO_SUID                  = 0x11\n\tAUDIT_COMPARE_FSGID_TO_OBJ_GID              = 0x9\n\tAUDIT_COMPARE_FSUID_TO_OBJ_UID              = 0x8\n\tAUDIT_COMPARE_GID_TO_EGID                   = 0x14\n\tAUDIT_COMPARE_GID_TO_FSGID                  = 0x15\n\tAUDIT_COMPARE_GID_TO_OBJ_GID                = 0x2\n\tAUDIT_COMPARE_GID_TO_SGID                   = 0x16\n\tAUDIT_COMPARE_SGID_TO_FSGID                 = 0x19\n\tAUDIT_COMPARE_SGID_TO_OBJ_GID               = 0x7\n\tAUDIT_COMPARE_SUID_TO_FSUID                 = 0x13\n\tAUDIT_COMPARE_SUID_TO_OBJ_UID               = 0x6\n\tAUDIT_COMPARE_UID_TO_AUID                   = 0xa\n\tAUDIT_COMPARE_UID_TO_EUID                   = 0xb\n\tAUDIT_COMPARE_UID_TO_FSUID                  = 0xc\n\tAUDIT_COMPARE_UID_TO_OBJ_UID                = 0x1\n\tAUDIT_COMPARE_UID_TO_SUID                   = 0xd\n\tAUDIT_CONFIG_CHANGE                         = 0x519\n\tAUDIT_CWD                                   = 0x51b\n\tAUDIT_DAEMON_ABORT                          = 0x4b2\n\tAUDIT_DAEMON_CONFIG                         = 0x4b3\n\tAUDIT_DAEMON_END                            = 0x4b1\n\tAUDIT_DAEMON_START                          = 0x4b0\n\tAUDIT_DEL                                   = 0x3ec\n\tAUDIT_DEL_RULE                              = 0x3f4\n\tAUDIT_DEVMAJOR                              = 0x64\n\tAUDIT_DEVMINOR                              = 0x65\n\tAUDIT_DIR                                   = 0x6b\n\tAUDIT_DM_CTRL                               = 0x53a\n\tAUDIT_DM_EVENT                              = 0x53b\n\tAUDIT_EGID                                  = 0x6\n\tAUDIT_EOE                                   = 0x528\n\tAUDIT_EQUAL                                 = 0x40000000\n\tAUDIT_EUID                                  = 0x2\n\tAUDIT_EVENT_LISTENER                        = 0x537\n\tAUDIT_EXE                                   = 0x70\n\tAUDIT_EXECVE                                = 0x51d\n\tAUDIT_EXIT                                  = 0x67\n\tAUDIT_FAIL_PANIC                            = 0x2\n\tAUDIT_FAIL_PRINTK                           = 0x1\n\tAUDIT_FAIL_SILENT                           = 0x0\n\tAUDIT_FANOTIFY                              = 0x533\n\tAUDIT_FD_PAIR                               = 0x525\n\tAUDIT_FEATURE_BITMAP_ALL                    = 0x7f\n\tAUDIT_FEATURE_BITMAP_BACKLOG_LIMIT          = 0x1\n\tAUDIT_FEATURE_BITMAP_BACKLOG_WAIT_TIME      = 0x2\n\tAUDIT_FEATURE_BITMAP_EXCLUDE_EXTEND         = 0x8\n\tAUDIT_FEATURE_BITMAP_EXECUTABLE_PATH        = 0x4\n\tAUDIT_FEATURE_BITMAP_FILTER_FS              = 0x40\n\tAUDIT_FEATURE_BITMAP_LOST_RESET             = 0x20\n\tAUDIT_FEATURE_BITMAP_SESSIONID_FILTER       = 0x10\n\tAUDIT_FEATURE_CHANGE                        = 0x530\n\tAUDIT_FEATURE_LOGINUID_IMMUTABLE            = 0x1\n\tAUDIT_FEATURE_ONLY_UNSET_LOGINUID           = 0x0\n\tAUDIT_FEATURE_VERSION                       = 0x1\n\tAUDIT_FIELD_COMPARE                         = 0x6f\n\tAUDIT_FILETYPE                              = 0x6c\n\tAUDIT_FILTERKEY                             = 0xd2\n\tAUDIT_FILTER_ENTRY                          = 0x2\n\tAUDIT_FILTER_EXCLUDE                        = 0x5\n\tAUDIT_FILTER_EXIT                           = 0x4\n\tAUDIT_FILTER_FS                             = 0x6\n\tAUDIT_FILTER_PREPEND                        = 0x10\n\tAUDIT_FILTER_TASK                           = 0x1\n\tAUDIT_FILTER_TYPE                           = 0x5\n\tAUDIT_FILTER_URING_EXIT                     = 0x7\n\tAUDIT_FILTER_USER                           = 0x0\n\tAUDIT_FILTER_WATCH                          = 0x3\n\tAUDIT_FIRST_KERN_ANOM_MSG                   = 0x6a4\n\tAUDIT_FIRST_USER_MSG                        = 0x44c\n\tAUDIT_FIRST_USER_MSG2                       = 0x834\n\tAUDIT_FSGID                                 = 0x8\n\tAUDIT_FSTYPE                                = 0x1a\n\tAUDIT_FSUID                                 = 0x4\n\tAUDIT_GET                                   = 0x3e8\n\tAUDIT_GET_FEATURE                           = 0x3fb\n\tAUDIT_GID                                   = 0x5\n\tAUDIT_GREATER_THAN                          = 0x20000000\n\tAUDIT_GREATER_THAN_OR_EQUAL                 = 0x60000000\n\tAUDIT_INODE                                 = 0x66\n\tAUDIT_INTEGRITY_DATA                        = 0x708\n\tAUDIT_INTEGRITY_EVM_XATTR                   = 0x70e\n\tAUDIT_INTEGRITY_HASH                        = 0x70b\n\tAUDIT_INTEGRITY_METADATA                    = 0x709\n\tAUDIT_INTEGRITY_PCR                         = 0x70c\n\tAUDIT_INTEGRITY_POLICY_RULE                 = 0x70f\n\tAUDIT_INTEGRITY_RULE                        = 0x70d\n\tAUDIT_INTEGRITY_STATUS                      = 0x70a\n\tAUDIT_IPC                                   = 0x517\n\tAUDIT_IPC_SET_PERM                          = 0x51f\n\tAUDIT_KERNEL                                = 0x7d0\n\tAUDIT_KERNEL_OTHER                          = 0x524\n\tAUDIT_KERN_MODULE                           = 0x532\n\tAUDIT_LAST_FEATURE                          = 0x1\n\tAUDIT_LAST_KERN_ANOM_MSG                    = 0x707\n\tAUDIT_LAST_USER_MSG                         = 0x4af\n\tAUDIT_LAST_USER_MSG2                        = 0xbb7\n\tAUDIT_LESS_THAN                             = 0x10000000\n\tAUDIT_LESS_THAN_OR_EQUAL                    = 0x50000000\n\tAUDIT_LIST                                  = 0x3ea\n\tAUDIT_LIST_RULES                            = 0x3f5\n\tAUDIT_LOGIN                                 = 0x3ee\n\tAUDIT_LOGINUID                              = 0x9\n\tAUDIT_LOGINUID_SET                          = 0x18\n\tAUDIT_MAC_CALIPSO_ADD                       = 0x58a\n\tAUDIT_MAC_CALIPSO_DEL                       = 0x58b\n\tAUDIT_MAC_CIPSOV4_ADD                       = 0x57f\n\tAUDIT_MAC_CIPSOV4_DEL                       = 0x580\n\tAUDIT_MAC_CONFIG_CHANGE                     = 0x57d\n\tAUDIT_MAC_IPSEC_ADDSA                       = 0x583\n\tAUDIT_MAC_IPSEC_ADDSPD                      = 0x585\n\tAUDIT_MAC_IPSEC_DELSA                       = 0x584\n\tAUDIT_MAC_IPSEC_DELSPD                      = 0x586\n\tAUDIT_MAC_IPSEC_EVENT                       = 0x587\n\tAUDIT_MAC_MAP_ADD                           = 0x581\n\tAUDIT_MAC_MAP_DEL                           = 0x582\n\tAUDIT_MAC_POLICY_LOAD                       = 0x57b\n\tAUDIT_MAC_STATUS                            = 0x57c\n\tAUDIT_MAC_UNLBL_ALLOW                       = 0x57e\n\tAUDIT_MAC_UNLBL_STCADD                      = 0x588\n\tAUDIT_MAC_UNLBL_STCDEL                      = 0x589\n\tAUDIT_MAKE_EQUIV                            = 0x3f7\n\tAUDIT_MAX_FIELDS                            = 0x40\n\tAUDIT_MAX_FIELD_COMPARE                     = 0x19\n\tAUDIT_MAX_KEY_LEN                           = 0x100\n\tAUDIT_MESSAGE_TEXT_MAX                      = 0x2170\n\tAUDIT_MMAP                                  = 0x52b\n\tAUDIT_MQ_GETSETATTR                         = 0x523\n\tAUDIT_MQ_NOTIFY                             = 0x522\n\tAUDIT_MQ_OPEN                               = 0x520\n\tAUDIT_MQ_SENDRECV                           = 0x521\n\tAUDIT_MSGTYPE                               = 0xc\n\tAUDIT_NEGATE                                = 0x80000000\n\tAUDIT_NETFILTER_CFG                         = 0x52d\n\tAUDIT_NETFILTER_PKT                         = 0x52c\n\tAUDIT_NEVER                                 = 0x0\n\tAUDIT_NLGRP_MAX                             = 0x1\n\tAUDIT_NOT_EQUAL                             = 0x30000000\n\tAUDIT_NR_FILTERS                            = 0x8\n\tAUDIT_OBJ_GID                               = 0x6e\n\tAUDIT_OBJ_LEV_HIGH                          = 0x17\n\tAUDIT_OBJ_LEV_LOW                           = 0x16\n\tAUDIT_OBJ_PID                               = 0x526\n\tAUDIT_OBJ_ROLE                              = 0x14\n\tAUDIT_OBJ_TYPE                              = 0x15\n\tAUDIT_OBJ_UID                               = 0x6d\n\tAUDIT_OBJ_USER                              = 0x13\n\tAUDIT_OPENAT2                               = 0x539\n\tAUDIT_OPERATORS                             = 0x78000000\n\tAUDIT_PATH                                  = 0x516\n\tAUDIT_PERM                                  = 0x6a\n\tAUDIT_PERM_ATTR                             = 0x8\n\tAUDIT_PERM_EXEC                             = 0x1\n\tAUDIT_PERM_READ                             = 0x4\n\tAUDIT_PERM_WRITE                            = 0x2\n\tAUDIT_PERS                                  = 0xa\n\tAUDIT_PID                                   = 0x0\n\tAUDIT_POSSIBLE                              = 0x1\n\tAUDIT_PPID                                  = 0x12\n\tAUDIT_PROCTITLE                             = 0x52f\n\tAUDIT_REPLACE                               = 0x531\n\tAUDIT_SADDR_FAM                             = 0x71\n\tAUDIT_SECCOMP                               = 0x52e\n\tAUDIT_SELINUX_ERR                           = 0x579\n\tAUDIT_SESSIONID                             = 0x19\n\tAUDIT_SET                                   = 0x3e9\n\tAUDIT_SET_FEATURE                           = 0x3fa\n\tAUDIT_SGID                                  = 0x7\n\tAUDIT_SID_UNSET                             = 0xffffffff\n\tAUDIT_SIGNAL_INFO                           = 0x3f2\n\tAUDIT_SOCKADDR                              = 0x51a\n\tAUDIT_SOCKETCALL                            = 0x518\n\tAUDIT_STATUS_BACKLOG_LIMIT                  = 0x10\n\tAUDIT_STATUS_BACKLOG_WAIT_TIME              = 0x20\n\tAUDIT_STATUS_BACKLOG_WAIT_TIME_ACTUAL       = 0x80\n\tAUDIT_STATUS_ENABLED                        = 0x1\n\tAUDIT_STATUS_FAILURE                        = 0x2\n\tAUDIT_STATUS_LOST                           = 0x40\n\tAUDIT_STATUS_PID                            = 0x4\n\tAUDIT_STATUS_RATE_LIMIT                     = 0x8\n\tAUDIT_SUBJ_CLR                              = 0x11\n\tAUDIT_SUBJ_ROLE                             = 0xe\n\tAUDIT_SUBJ_SEN                              = 0x10\n\tAUDIT_SUBJ_TYPE                             = 0xf\n\tAUDIT_SUBJ_USER                             = 0xd\n\tAUDIT_SUCCESS                               = 0x68\n\tAUDIT_SUID                                  = 0x3\n\tAUDIT_SYSCALL                               = 0x514\n\tAUDIT_SYSCALL_CLASSES                       = 0x10\n\tAUDIT_TIME_ADJNTPVAL                        = 0x535\n\tAUDIT_TIME_INJOFFSET                        = 0x534\n\tAUDIT_TRIM                                  = 0x3f6\n\tAUDIT_TTY                                   = 0x527\n\tAUDIT_TTY_GET                               = 0x3f8\n\tAUDIT_TTY_SET                               = 0x3f9\n\tAUDIT_UID                                   = 0x1\n\tAUDIT_UID_UNSET                             = 0xffffffff\n\tAUDIT_UNUSED_BITS                           = 0x7fffc00\n\tAUDIT_URINGOP                               = 0x538\n\tAUDIT_USER                                  = 0x3ed\n\tAUDIT_USER_AVC                              = 0x453\n\tAUDIT_USER_TTY                              = 0x464\n\tAUDIT_VERSION_BACKLOG_LIMIT                 = 0x1\n\tAUDIT_VERSION_BACKLOG_WAIT_TIME             = 0x2\n\tAUDIT_VERSION_LATEST                        = 0x7f\n\tAUDIT_WATCH                                 = 0x69\n\tAUDIT_WATCH_INS                             = 0x3ef\n\tAUDIT_WATCH_LIST                            = 0x3f1\n\tAUDIT_WATCH_REM                             = 0x3f0\n\tAUTOFS_SUPER_MAGIC                          = 0x187\n\tB0                                          = 0x0\n\tB110                                        = 0x3\n\tB1200                                       = 0x9\n\tB134                                        = 0x4\n\tB150                                        = 0x5\n\tB1800                                       = 0xa\n\tB19200                                      = 0xe\n\tB200                                        = 0x6\n\tB2400                                       = 0xb\n\tB300                                        = 0x7\n\tB38400                                      = 0xf\n\tB4800                                       = 0xc\n\tB50                                         = 0x1\n\tB600                                        = 0x8\n\tB75                                         = 0x2\n\tB9600                                       = 0xd\n\tBCACHEFS_SUPER_MAGIC                        = 0xca451a4e\n\tBDEVFS_MAGIC                                = 0x62646576\n\tBINDERFS_SUPER_MAGIC                        = 0x6c6f6f70\n\tBINFMTFS_MAGIC                              = 0x42494e4d\n\tBPF_A                                       = 0x10\n\tBPF_ABS                                     = 0x20\n\tBPF_ADD                                     = 0x0\n\tBPF_ALU                                     = 0x4\n\tBPF_ALU64                                   = 0x7\n\tBPF_AND                                     = 0x50\n\tBPF_ARSH                                    = 0xc0\n\tBPF_ATOMIC                                  = 0xc0\n\tBPF_B                                       = 0x10\n\tBPF_BUILD_ID_SIZE                           = 0x14\n\tBPF_CALL                                    = 0x80\n\tBPF_CMPXCHG                                 = 0xf1\n\tBPF_DIV                                     = 0x30\n\tBPF_DW                                      = 0x18\n\tBPF_END                                     = 0xd0\n\tBPF_EXIT                                    = 0x90\n\tBPF_FETCH                                   = 0x1\n\tBPF_FROM_BE                                 = 0x8\n\tBPF_FROM_LE                                 = 0x0\n\tBPF_FS_MAGIC                                = 0xcafe4a11\n\tBPF_F_AFTER                                 = 0x10\n\tBPF_F_ALLOW_MULTI                           = 0x2\n\tBPF_F_ALLOW_OVERRIDE                        = 0x1\n\tBPF_F_ANY_ALIGNMENT                         = 0x2\n\tBPF_F_BEFORE                                = 0x8\n\tBPF_F_ID                                    = 0x20\n\tBPF_F_NETFILTER_IP_DEFRAG                   = 0x1\n\tBPF_F_QUERY_EFFECTIVE                       = 0x1\n\tBPF_F_REPLACE                               = 0x4\n\tBPF_F_SLEEPABLE                             = 0x10\n\tBPF_F_STRICT_ALIGNMENT                      = 0x1\n\tBPF_F_TEST_REG_INVARIANTS                   = 0x80\n\tBPF_F_TEST_RND_HI32                         = 0x4\n\tBPF_F_TEST_RUN_ON_CPU                       = 0x1\n\tBPF_F_TEST_SKB_CHECKSUM_COMPLETE            = 0x4\n\tBPF_F_TEST_STATE_FREQ                       = 0x8\n\tBPF_F_TEST_XDP_LIVE_FRAMES                  = 0x2\n\tBPF_F_XDP_DEV_BOUND_ONLY                    = 0x40\n\tBPF_F_XDP_HAS_FRAGS                         = 0x20\n\tBPF_H                                       = 0x8\n\tBPF_IMM                                     = 0x0\n\tBPF_IND                                     = 0x40\n\tBPF_JA                                      = 0x0\n\tBPF_JCOND                                   = 0xe0\n\tBPF_JEQ                                     = 0x10\n\tBPF_JGE                                     = 0x30\n\tBPF_JGT                                     = 0x20\n\tBPF_JLE                                     = 0xb0\n\tBPF_JLT                                     = 0xa0\n\tBPF_JMP                                     = 0x5\n\tBPF_JMP32                                   = 0x6\n\tBPF_JNE                                     = 0x50\n\tBPF_JSET                                    = 0x40\n\tBPF_JSGE                                    = 0x70\n\tBPF_JSGT                                    = 0x60\n\tBPF_JSLE                                    = 0xd0\n\tBPF_JSLT                                    = 0xc0\n\tBPF_K                                       = 0x0\n\tBPF_LD                                      = 0x0\n\tBPF_LDX                                     = 0x1\n\tBPF_LEN                                     = 0x80\n\tBPF_LL_OFF                                  = -0x200000\n\tBPF_LSH                                     = 0x60\n\tBPF_MAJOR_VERSION                           = 0x1\n\tBPF_MAXINSNS                                = 0x1000\n\tBPF_MEM                                     = 0x60\n\tBPF_MEMSX                                   = 0x80\n\tBPF_MEMWORDS                                = 0x10\n\tBPF_MINOR_VERSION                           = 0x1\n\tBPF_MISC                                    = 0x7\n\tBPF_MOD                                     = 0x90\n\tBPF_MOV                                     = 0xb0\n\tBPF_MSH                                     = 0xa0\n\tBPF_MUL                                     = 0x20\n\tBPF_NEG                                     = 0x80\n\tBPF_NET_OFF                                 = -0x100000\n\tBPF_OBJ_NAME_LEN                            = 0x10\n\tBPF_OR                                      = 0x40\n\tBPF_PSEUDO_BTF_ID                           = 0x3\n\tBPF_PSEUDO_CALL                             = 0x1\n\tBPF_PSEUDO_FUNC                             = 0x4\n\tBPF_PSEUDO_KFUNC_CALL                       = 0x2\n\tBPF_PSEUDO_MAP_FD                           = 0x1\n\tBPF_PSEUDO_MAP_IDX                          = 0x5\n\tBPF_PSEUDO_MAP_IDX_VALUE                    = 0x6\n\tBPF_PSEUDO_MAP_VALUE                        = 0x2\n\tBPF_RET                                     = 0x6\n\tBPF_RSH                                     = 0x70\n\tBPF_ST                                      = 0x2\n\tBPF_STX                                     = 0x3\n\tBPF_SUB                                     = 0x10\n\tBPF_TAG_SIZE                                = 0x8\n\tBPF_TAX                                     = 0x0\n\tBPF_TO_BE                                   = 0x8\n\tBPF_TO_LE                                   = 0x0\n\tBPF_TXA                                     = 0x80\n\tBPF_W                                       = 0x0\n\tBPF_X                                       = 0x8\n\tBPF_XADD                                    = 0xc0\n\tBPF_XCHG                                    = 0xe1\n\tBPF_XOR                                     = 0xa0\n\tBRKINT                                      = 0x2\n\tBS0                                         = 0x0\n\tBTRFS_SUPER_MAGIC                           = 0x9123683e\n\tBTRFS_TEST_MAGIC                            = 0x73727279\n\tBUS_BLUETOOTH                               = 0x5\n\tBUS_HIL                                     = 0x4\n\tBUS_USB                                     = 0x3\n\tBUS_VIRTUAL                                 = 0x6\n\tCAN_BCM                                     = 0x2\n\tCAN_BUS_OFF_THRESHOLD                       = 0x100\n\tCAN_CTRLMODE_3_SAMPLES                      = 0x4\n\tCAN_CTRLMODE_BERR_REPORTING                 = 0x10\n\tCAN_CTRLMODE_CC_LEN8_DLC                    = 0x100\n\tCAN_CTRLMODE_FD                             = 0x20\n\tCAN_CTRLMODE_FD_NON_ISO                     = 0x80\n\tCAN_CTRLMODE_LISTENONLY                     = 0x2\n\tCAN_CTRLMODE_LOOPBACK                       = 0x1\n\tCAN_CTRLMODE_ONE_SHOT                       = 0x8\n\tCAN_CTRLMODE_PRESUME_ACK                    = 0x40\n\tCAN_CTRLMODE_TDC_AUTO                       = 0x200\n\tCAN_CTRLMODE_TDC_MANUAL                     = 0x400\n\tCAN_EFF_FLAG                                = 0x80000000\n\tCAN_EFF_ID_BITS                             = 0x1d\n\tCAN_EFF_MASK                                = 0x1fffffff\n\tCAN_ERROR_PASSIVE_THRESHOLD                 = 0x80\n\tCAN_ERROR_WARNING_THRESHOLD                 = 0x60\n\tCAN_ERR_ACK                                 = 0x20\n\tCAN_ERR_BUSERROR                            = 0x80\n\tCAN_ERR_BUSOFF                              = 0x40\n\tCAN_ERR_CNT                                 = 0x200\n\tCAN_ERR_CRTL                                = 0x4\n\tCAN_ERR_CRTL_ACTIVE                         = 0x40\n\tCAN_ERR_CRTL_RX_OVERFLOW                    = 0x1\n\tCAN_ERR_CRTL_RX_PASSIVE                     = 0x10\n\tCAN_ERR_CRTL_RX_WARNING                     = 0x4\n\tCAN_ERR_CRTL_TX_OVERFLOW                    = 0x2\n\tCAN_ERR_CRTL_TX_PASSIVE                     = 0x20\n\tCAN_ERR_CRTL_TX_WARNING                     = 0x8\n\tCAN_ERR_CRTL_UNSPEC                         = 0x0\n\tCAN_ERR_DLC                                 = 0x8\n\tCAN_ERR_FLAG                                = 0x20000000\n\tCAN_ERR_LOSTARB                             = 0x2\n\tCAN_ERR_LOSTARB_UNSPEC                      = 0x0\n\tCAN_ERR_MASK                                = 0x1fffffff\n\tCAN_ERR_PROT                                = 0x8\n\tCAN_ERR_PROT_ACTIVE                         = 0x40\n\tCAN_ERR_PROT_BIT                            = 0x1\n\tCAN_ERR_PROT_BIT0                           = 0x8\n\tCAN_ERR_PROT_BIT1                           = 0x10\n\tCAN_ERR_PROT_FORM                           = 0x2\n\tCAN_ERR_PROT_LOC_ACK                        = 0x19\n\tCAN_ERR_PROT_LOC_ACK_DEL                    = 0x1b\n\tCAN_ERR_PROT_LOC_CRC_DEL                    = 0x18\n\tCAN_ERR_PROT_LOC_CRC_SEQ                    = 0x8\n\tCAN_ERR_PROT_LOC_DATA                       = 0xa\n\tCAN_ERR_PROT_LOC_DLC                        = 0xb\n\tCAN_ERR_PROT_LOC_EOF                        = 0x1a\n\tCAN_ERR_PROT_LOC_ID04_00                    = 0xe\n\tCAN_ERR_PROT_LOC_ID12_05                    = 0xf\n\tCAN_ERR_PROT_LOC_ID17_13                    = 0x7\n\tCAN_ERR_PROT_LOC_ID20_18                    = 0x6\n\tCAN_ERR_PROT_LOC_ID28_21                    = 0x2\n\tCAN_ERR_PROT_LOC_IDE                        = 0x5\n\tCAN_ERR_PROT_LOC_INTERM                     = 0x12\n\tCAN_ERR_PROT_LOC_RES0                       = 0x9\n\tCAN_ERR_PROT_LOC_RES1                       = 0xd\n\tCAN_ERR_PROT_LOC_RTR                        = 0xc\n\tCAN_ERR_PROT_LOC_SOF                        = 0x3\n\tCAN_ERR_PROT_LOC_SRTR                       = 0x4\n\tCAN_ERR_PROT_LOC_UNSPEC                     = 0x0\n\tCAN_ERR_PROT_OVERLOAD                       = 0x20\n\tCAN_ERR_PROT_STUFF                          = 0x4\n\tCAN_ERR_PROT_TX                             = 0x80\n\tCAN_ERR_PROT_UNSPEC                         = 0x0\n\tCAN_ERR_RESTARTED                           = 0x100\n\tCAN_ERR_TRX                                 = 0x10\n\tCAN_ERR_TRX_CANH_NO_WIRE                    = 0x4\n\tCAN_ERR_TRX_CANH_SHORT_TO_BAT               = 0x5\n\tCAN_ERR_TRX_CANH_SHORT_TO_GND               = 0x7\n\tCAN_ERR_TRX_CANH_SHORT_TO_VCC               = 0x6\n\tCAN_ERR_TRX_CANL_NO_WIRE                    = 0x40\n\tCAN_ERR_TRX_CANL_SHORT_TO_BAT               = 0x50\n\tCAN_ERR_TRX_CANL_SHORT_TO_CANH              = 0x80\n\tCAN_ERR_TRX_CANL_SHORT_TO_GND               = 0x70\n\tCAN_ERR_TRX_CANL_SHORT_TO_VCC               = 0x60\n\tCAN_ERR_TRX_UNSPEC                          = 0x0\n\tCAN_ERR_TX_TIMEOUT                          = 0x1\n\tCAN_INV_FILTER                              = 0x20000000\n\tCAN_ISOTP                                   = 0x6\n\tCAN_J1939                                   = 0x7\n\tCAN_MAX_DLC                                 = 0x8\n\tCAN_MAX_DLEN                                = 0x8\n\tCAN_MAX_RAW_DLC                             = 0xf\n\tCAN_MCNET                                   = 0x5\n\tCAN_MTU                                     = 0x10\n\tCAN_NPROTO                                  = 0x8\n\tCAN_RAW                                     = 0x1\n\tCAN_RAW_FILTER_MAX                          = 0x200\n\tCAN_RAW_XL_VCID_RX_FILTER                   = 0x4\n\tCAN_RAW_XL_VCID_TX_PASS                     = 0x2\n\tCAN_RAW_XL_VCID_TX_SET                      = 0x1\n\tCAN_RTR_FLAG                                = 0x40000000\n\tCAN_SFF_ID_BITS                             = 0xb\n\tCAN_SFF_MASK                                = 0x7ff\n\tCAN_TERMINATION_DISABLED                    = 0x0\n\tCAN_TP16                                    = 0x3\n\tCAN_TP20                                    = 0x4\n\tCAP_AUDIT_CONTROL                           = 0x1e\n\tCAP_AUDIT_READ                              = 0x25\n\tCAP_AUDIT_WRITE                             = 0x1d\n\tCAP_BLOCK_SUSPEND                           = 0x24\n\tCAP_BPF                                     = 0x27\n\tCAP_CHECKPOINT_RESTORE                      = 0x28\n\tCAP_CHOWN                                   = 0x0\n\tCAP_DAC_OVERRIDE                            = 0x1\n\tCAP_DAC_READ_SEARCH                         = 0x2\n\tCAP_FOWNER                                  = 0x3\n\tCAP_FSETID                                  = 0x4\n\tCAP_IPC_LOCK                                = 0xe\n\tCAP_IPC_OWNER                               = 0xf\n\tCAP_KILL                                    = 0x5\n\tCAP_LAST_CAP                                = 0x28\n\tCAP_LEASE                                   = 0x1c\n\tCAP_LINUX_IMMUTABLE                         = 0x9\n\tCAP_MAC_ADMIN                               = 0x21\n\tCAP_MAC_OVERRIDE                            = 0x20\n\tCAP_MKNOD                                   = 0x1b\n\tCAP_NET_ADMIN                               = 0xc\n\tCAP_NET_BIND_SERVICE                        = 0xa\n\tCAP_NET_BROADCAST                           = 0xb\n\tCAP_NET_RAW                                 = 0xd\n\tCAP_PERFMON                                 = 0x26\n\tCAP_SETFCAP                                 = 0x1f\n\tCAP_SETGID                                  = 0x6\n\tCAP_SETPCAP                                 = 0x8\n\tCAP_SETUID                                  = 0x7\n\tCAP_SYSLOG                                  = 0x22\n\tCAP_SYS_ADMIN                               = 0x15\n\tCAP_SYS_BOOT                                = 0x16\n\tCAP_SYS_CHROOT                              = 0x12\n\tCAP_SYS_MODULE                              = 0x10\n\tCAP_SYS_NICE                                = 0x17\n\tCAP_SYS_PACCT                               = 0x14\n\tCAP_SYS_PTRACE                              = 0x13\n\tCAP_SYS_RAWIO                               = 0x11\n\tCAP_SYS_RESOURCE                            = 0x18\n\tCAP_SYS_TIME                                = 0x19\n\tCAP_SYS_TTY_CONFIG                          = 0x1a\n\tCAP_WAKE_ALARM                              = 0x23\n\tCEPH_SUPER_MAGIC                            = 0xc36400\n\tCFLUSH                                      = 0xf\n\tCGROUP2_SUPER_MAGIC                         = 0x63677270\n\tCGROUP_SUPER_MAGIC                          = 0x27e0eb\n\tCIFS_SUPER_MAGIC                            = 0xff534d42\n\tCLOCK_BOOTTIME                              = 0x7\n\tCLOCK_BOOTTIME_ALARM                        = 0x9\n\tCLOCK_DEFAULT                               = 0x0\n\tCLOCK_EXT                                   = 0x1\n\tCLOCK_INT                                   = 0x2\n\tCLOCK_MONOTONIC                             = 0x1\n\tCLOCK_MONOTONIC_COARSE                      = 0x6\n\tCLOCK_MONOTONIC_RAW                         = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID                    = 0x2\n\tCLOCK_REALTIME                              = 0x0\n\tCLOCK_REALTIME_ALARM                        = 0x8\n\tCLOCK_REALTIME_COARSE                       = 0x5\n\tCLOCK_TAI                                   = 0xb\n\tCLOCK_THREAD_CPUTIME_ID                     = 0x3\n\tCLOCK_TXFROMRX                              = 0x4\n\tCLOCK_TXINT                                 = 0x3\n\tCLONE_ARGS_SIZE_VER0                        = 0x40\n\tCLONE_ARGS_SIZE_VER1                        = 0x50\n\tCLONE_ARGS_SIZE_VER2                        = 0x58\n\tCLONE_CHILD_CLEARTID                        = 0x200000\n\tCLONE_CHILD_SETTID                          = 0x1000000\n\tCLONE_CLEAR_SIGHAND                         = 0x100000000\n\tCLONE_DETACHED                              = 0x400000\n\tCLONE_FILES                                 = 0x400\n\tCLONE_FS                                    = 0x200\n\tCLONE_INTO_CGROUP                           = 0x200000000\n\tCLONE_IO                                    = 0x80000000\n\tCLONE_NEWCGROUP                             = 0x2000000\n\tCLONE_NEWIPC                                = 0x8000000\n\tCLONE_NEWNET                                = 0x40000000\n\tCLONE_NEWNS                                 = 0x20000\n\tCLONE_NEWPID                                = 0x20000000\n\tCLONE_NEWTIME                               = 0x80\n\tCLONE_NEWUSER                               = 0x10000000\n\tCLONE_NEWUTS                                = 0x4000000\n\tCLONE_PARENT                                = 0x8000\n\tCLONE_PARENT_SETTID                         = 0x100000\n\tCLONE_PIDFD                                 = 0x1000\n\tCLONE_PTRACE                                = 0x2000\n\tCLONE_SETTLS                                = 0x80000\n\tCLONE_SIGHAND                               = 0x800\n\tCLONE_SYSVSEM                               = 0x40000\n\tCLONE_THREAD                                = 0x10000\n\tCLONE_UNTRACED                              = 0x800000\n\tCLONE_VFORK                                 = 0x4000\n\tCLONE_VM                                    = 0x100\n\tCMSPAR                                      = 0x40000000\n\tCODA_SUPER_MAGIC                            = 0x73757245\n\tCR0                                         = 0x0\n\tCRAMFS_MAGIC                                = 0x28cd3d45\n\tCRTSCTS                                     = 0x80000000\n\tCRYPTO_MAX_NAME                             = 0x40\n\tCRYPTO_MSG_MAX                              = 0x15\n\tCRYPTO_NR_MSGTYPES                          = 0x6\n\tCRYPTO_REPORT_MAXSIZE                       = 0x160\n\tCS5                                         = 0x0\n\tCSIGNAL                                     = 0xff\n\tCSTART                                      = 0x11\n\tCSTATUS                                     = 0x0\n\tCSTOP                                       = 0x13\n\tCSUSP                                       = 0x1a\n\tDAXFS_MAGIC                                 = 0x64646178\n\tDEBUGFS_MAGIC                               = 0x64626720\n\tDEVLINK_CMD_ESWITCH_MODE_GET                = 0x1d\n\tDEVLINK_CMD_ESWITCH_MODE_SET                = 0x1e\n\tDEVLINK_FLASH_OVERWRITE_IDENTIFIERS         = 0x2\n\tDEVLINK_FLASH_OVERWRITE_SETTINGS            = 0x1\n\tDEVLINK_GENL_MCGRP_CONFIG_NAME              = \"config\"\n\tDEVLINK_GENL_NAME                           = \"devlink\"\n\tDEVLINK_GENL_VERSION                        = 0x1\n\tDEVLINK_PORT_FN_CAP_IPSEC_CRYPTO            = 0x4\n\tDEVLINK_PORT_FN_CAP_IPSEC_PACKET            = 0x8\n\tDEVLINK_PORT_FN_CAP_MIGRATABLE              = 0x2\n\tDEVLINK_PORT_FN_CAP_ROCE                    = 0x1\n\tDEVLINK_SB_THRESHOLD_TO_ALPHA_MAX           = 0x14\n\tDEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS  = 0x3\n\tDEVMEM_MAGIC                                = 0x454d444d\n\tDEVPTS_SUPER_MAGIC                          = 0x1cd1\n\tDMA_BUF_MAGIC                               = 0x444d4142\n\tDM_ACTIVE_PRESENT_FLAG                      = 0x20\n\tDM_BUFFER_FULL_FLAG                         = 0x100\n\tDM_CONTROL_NODE                             = \"control\"\n\tDM_DATA_OUT_FLAG                            = 0x10000\n\tDM_DEFERRED_REMOVE                          = 0x20000\n\tDM_DEV_ARM_POLL                             = 0xc138fd10\n\tDM_DEV_CREATE                               = 0xc138fd03\n\tDM_DEV_REMOVE                               = 0xc138fd04\n\tDM_DEV_RENAME                               = 0xc138fd05\n\tDM_DEV_SET_GEOMETRY                         = 0xc138fd0f\n\tDM_DEV_STATUS                               = 0xc138fd07\n\tDM_DEV_SUSPEND                              = 0xc138fd06\n\tDM_DEV_WAIT                                 = 0xc138fd08\n\tDM_DIR                                      = \"mapper\"\n\tDM_GET_TARGET_VERSION                       = 0xc138fd11\n\tDM_IMA_MEASUREMENT_FLAG                     = 0x80000\n\tDM_INACTIVE_PRESENT_FLAG                    = 0x40\n\tDM_INTERNAL_SUSPEND_FLAG                    = 0x40000\n\tDM_IOCTL                                    = 0xfd\n\tDM_LIST_DEVICES                             = 0xc138fd02\n\tDM_LIST_VERSIONS                            = 0xc138fd0d\n\tDM_MAX_TYPE_NAME                            = 0x10\n\tDM_NAME_LEN                                 = 0x80\n\tDM_NAME_LIST_FLAG_DOESNT_HAVE_UUID          = 0x2\n\tDM_NAME_LIST_FLAG_HAS_UUID                  = 0x1\n\tDM_NOFLUSH_FLAG                             = 0x800\n\tDM_PERSISTENT_DEV_FLAG                      = 0x8\n\tDM_QUERY_INACTIVE_TABLE_FLAG                = 0x1000\n\tDM_READONLY_FLAG                            = 0x1\n\tDM_REMOVE_ALL                               = 0xc138fd01\n\tDM_SECURE_DATA_FLAG                         = 0x8000\n\tDM_SKIP_BDGET_FLAG                          = 0x200\n\tDM_SKIP_LOCKFS_FLAG                         = 0x400\n\tDM_STATUS_TABLE_FLAG                        = 0x10\n\tDM_SUSPEND_FLAG                             = 0x2\n\tDM_TABLE_CLEAR                              = 0xc138fd0a\n\tDM_TABLE_DEPS                               = 0xc138fd0b\n\tDM_TABLE_LOAD                               = 0xc138fd09\n\tDM_TABLE_STATUS                             = 0xc138fd0c\n\tDM_TARGET_MSG                               = 0xc138fd0e\n\tDM_UEVENT_GENERATED_FLAG                    = 0x2000\n\tDM_UUID_FLAG                                = 0x4000\n\tDM_UUID_LEN                                 = 0x81\n\tDM_VERSION                                  = 0xc138fd00\n\tDM_VERSION_EXTRA                            = \"-ioctl (2023-03-01)\"\n\tDM_VERSION_MAJOR                            = 0x4\n\tDM_VERSION_MINOR                            = 0x30\n\tDM_VERSION_PATCHLEVEL                       = 0x0\n\tDT_BLK                                      = 0x6\n\tDT_CHR                                      = 0x2\n\tDT_DIR                                      = 0x4\n\tDT_FIFO                                     = 0x1\n\tDT_LNK                                      = 0xa\n\tDT_REG                                      = 0x8\n\tDT_SOCK                                     = 0xc\n\tDT_UNKNOWN                                  = 0x0\n\tDT_WHT                                      = 0xe\n\tECHO                                        = 0x8\n\tECRYPTFS_SUPER_MAGIC                        = 0xf15f\n\tEFD_SEMAPHORE                               = 0x1\n\tEFIVARFS_MAGIC                              = 0xde5e81e4\n\tEFS_SUPER_MAGIC                             = 0x414a53\n\tEM_386                                      = 0x3\n\tEM_486                                      = 0x6\n\tEM_68K                                      = 0x4\n\tEM_860                                      = 0x7\n\tEM_88K                                      = 0x5\n\tEM_AARCH64                                  = 0xb7\n\tEM_ALPHA                                    = 0x9026\n\tEM_ALTERA_NIOS2                             = 0x71\n\tEM_ARCOMPACT                                = 0x5d\n\tEM_ARCV2                                    = 0xc3\n\tEM_ARM                                      = 0x28\n\tEM_BLACKFIN                                 = 0x6a\n\tEM_BPF                                      = 0xf7\n\tEM_CRIS                                     = 0x4c\n\tEM_CSKY                                     = 0xfc\n\tEM_CYGNUS_M32R                              = 0x9041\n\tEM_CYGNUS_MN10300                           = 0xbeef\n\tEM_FRV                                      = 0x5441\n\tEM_H8_300                                   = 0x2e\n\tEM_HEXAGON                                  = 0xa4\n\tEM_IA_64                                    = 0x32\n\tEM_LOONGARCH                                = 0x102\n\tEM_M32                                      = 0x1\n\tEM_M32R                                     = 0x58\n\tEM_MICROBLAZE                               = 0xbd\n\tEM_MIPS                                     = 0x8\n\tEM_MIPS_RS3_LE                              = 0xa\n\tEM_MIPS_RS4_BE                              = 0xa\n\tEM_MN10300                                  = 0x59\n\tEM_NDS32                                    = 0xa7\n\tEM_NONE                                     = 0x0\n\tEM_OPENRISC                                 = 0x5c\n\tEM_PARISC                                   = 0xf\n\tEM_PPC                                      = 0x14\n\tEM_PPC64                                    = 0x15\n\tEM_RISCV                                    = 0xf3\n\tEM_S390                                     = 0x16\n\tEM_S390_OLD                                 = 0xa390\n\tEM_SH                                       = 0x2a\n\tEM_SPARC                                    = 0x2\n\tEM_SPARC32PLUS                              = 0x12\n\tEM_SPARCV9                                  = 0x2b\n\tEM_SPU                                      = 0x17\n\tEM_TILEGX                                   = 0xbf\n\tEM_TILEPRO                                  = 0xbc\n\tEM_TI_C6000                                 = 0x8c\n\tEM_UNICORE                                  = 0x6e\n\tEM_X86_64                                   = 0x3e\n\tEM_XTENSA                                   = 0x5e\n\tENCODING_DEFAULT                            = 0x0\n\tENCODING_FM_MARK                            = 0x3\n\tENCODING_FM_SPACE                           = 0x4\n\tENCODING_MANCHESTER                         = 0x5\n\tENCODING_NRZ                                = 0x1\n\tENCODING_NRZI                               = 0x2\n\tEPOLLERR                                    = 0x8\n\tEPOLLET                                     = 0x80000000\n\tEPOLLEXCLUSIVE                              = 0x10000000\n\tEPOLLHUP                                    = 0x10\n\tEPOLLIN                                     = 0x1\n\tEPOLLMSG                                    = 0x400\n\tEPOLLONESHOT                                = 0x40000000\n\tEPOLLOUT                                    = 0x4\n\tEPOLLPRI                                    = 0x2\n\tEPOLLRDBAND                                 = 0x80\n\tEPOLLRDHUP                                  = 0x2000\n\tEPOLLRDNORM                                 = 0x40\n\tEPOLLWAKEUP                                 = 0x20000000\n\tEPOLLWRBAND                                 = 0x200\n\tEPOLLWRNORM                                 = 0x100\n\tEPOLL_CTL_ADD                               = 0x1\n\tEPOLL_CTL_DEL                               = 0x2\n\tEPOLL_CTL_MOD                               = 0x3\n\tEPOLL_IOC_TYPE                              = 0x8a\n\tEROFS_SUPER_MAGIC_V1                        = 0xe0f5e1e2\n\tESP_V4_FLOW                                 = 0xa\n\tESP_V6_FLOW                                 = 0xc\n\tETHER_FLOW                                  = 0x12\n\tETHTOOL_BUSINFO_LEN                         = 0x20\n\tETHTOOL_EROMVERS_LEN                        = 0x20\n\tETHTOOL_FEC_AUTO                            = 0x2\n\tETHTOOL_FEC_BASER                           = 0x10\n\tETHTOOL_FEC_LLRS                            = 0x20\n\tETHTOOL_FEC_NONE                            = 0x1\n\tETHTOOL_FEC_OFF                             = 0x4\n\tETHTOOL_FEC_RS                              = 0x8\n\tETHTOOL_FLAG_ALL                            = 0x7\n\tETHTOOL_FLASHDEV                            = 0x33\n\tETHTOOL_FLASH_MAX_FILENAME                  = 0x80\n\tETHTOOL_FWVERS_LEN                          = 0x20\n\tETHTOOL_F_COMPAT                            = 0x4\n\tETHTOOL_F_UNSUPPORTED                       = 0x1\n\tETHTOOL_F_WISH                              = 0x2\n\tETHTOOL_GCHANNELS                           = 0x3c\n\tETHTOOL_GCOALESCE                           = 0xe\n\tETHTOOL_GDRVINFO                            = 0x3\n\tETHTOOL_GEEE                                = 0x44\n\tETHTOOL_GEEPROM                             = 0xb\n\tETHTOOL_GENL_NAME                           = \"ethtool\"\n\tETHTOOL_GENL_VERSION                        = 0x1\n\tETHTOOL_GET_DUMP_DATA                       = 0x40\n\tETHTOOL_GET_DUMP_FLAG                       = 0x3f\n\tETHTOOL_GET_TS_INFO                         = 0x41\n\tETHTOOL_GFEATURES                           = 0x3a\n\tETHTOOL_GFECPARAM                           = 0x50\n\tETHTOOL_GFLAGS                              = 0x25\n\tETHTOOL_GGRO                                = 0x2b\n\tETHTOOL_GGSO                                = 0x23\n\tETHTOOL_GLINK                               = 0xa\n\tETHTOOL_GLINKSETTINGS                       = 0x4c\n\tETHTOOL_GMODULEEEPROM                       = 0x43\n\tETHTOOL_GMODULEINFO                         = 0x42\n\tETHTOOL_GMSGLVL                             = 0x7\n\tETHTOOL_GPAUSEPARAM                         = 0x12\n\tETHTOOL_GPERMADDR                           = 0x20\n\tETHTOOL_GPFLAGS                             = 0x27\n\tETHTOOL_GPHYSTATS                           = 0x4a\n\tETHTOOL_GREGS                               = 0x4\n\tETHTOOL_GRINGPARAM                          = 0x10\n\tETHTOOL_GRSSH                               = 0x46\n\tETHTOOL_GRXCLSRLALL                         = 0x30\n\tETHTOOL_GRXCLSRLCNT                         = 0x2e\n\tETHTOOL_GRXCLSRULE                          = 0x2f\n\tETHTOOL_GRXCSUM                             = 0x14\n\tETHTOOL_GRXFH                               = 0x29\n\tETHTOOL_GRXFHINDIR                          = 0x38\n\tETHTOOL_GRXNTUPLE                           = 0x36\n\tETHTOOL_GRXRINGS                            = 0x2d\n\tETHTOOL_GSET                                = 0x1\n\tETHTOOL_GSG                                 = 0x18\n\tETHTOOL_GSSET_INFO                          = 0x37\n\tETHTOOL_GSTATS                              = 0x1d\n\tETHTOOL_GSTRINGS                            = 0x1b\n\tETHTOOL_GTSO                                = 0x1e\n\tETHTOOL_GTUNABLE                            = 0x48\n\tETHTOOL_GTXCSUM                             = 0x16\n\tETHTOOL_GUFO                                = 0x21\n\tETHTOOL_GWOL                                = 0x5\n\tETHTOOL_MCGRP_MONITOR_NAME                  = \"monitor\"\n\tETHTOOL_NWAY_RST                            = 0x9\n\tETHTOOL_PERQUEUE                            = 0x4b\n\tETHTOOL_PHYS_ID                             = 0x1c\n\tETHTOOL_PHY_EDPD_DFLT_TX_MSECS              = 0xffff\n\tETHTOOL_PHY_EDPD_DISABLE                    = 0x0\n\tETHTOOL_PHY_EDPD_NO_TX                      = 0xfffe\n\tETHTOOL_PHY_FAST_LINK_DOWN_OFF              = 0xff\n\tETHTOOL_PHY_FAST_LINK_DOWN_ON               = 0x0\n\tETHTOOL_PHY_GTUNABLE                        = 0x4e\n\tETHTOOL_PHY_STUNABLE                        = 0x4f\n\tETHTOOL_RESET                               = 0x34\n\tETHTOOL_RXNTUPLE_ACTION_CLEAR               = -0x2\n\tETHTOOL_RXNTUPLE_ACTION_DROP                = -0x1\n\tETHTOOL_RX_FLOW_SPEC_RING                   = 0xffffffff\n\tETHTOOL_RX_FLOW_SPEC_RING_VF                = 0xff00000000\n\tETHTOOL_RX_FLOW_SPEC_RING_VF_OFF            = 0x20\n\tETHTOOL_SCHANNELS                           = 0x3d\n\tETHTOOL_SCOALESCE                           = 0xf\n\tETHTOOL_SEEE                                = 0x45\n\tETHTOOL_SEEPROM                             = 0xc\n\tETHTOOL_SET_DUMP                            = 0x3e\n\tETHTOOL_SFEATURES                           = 0x3b\n\tETHTOOL_SFECPARAM                           = 0x51\n\tETHTOOL_SFLAGS                              = 0x26\n\tETHTOOL_SGRO                                = 0x2c\n\tETHTOOL_SGSO                                = 0x24\n\tETHTOOL_SLINKSETTINGS                       = 0x4d\n\tETHTOOL_SMSGLVL                             = 0x8\n\tETHTOOL_SPAUSEPARAM                         = 0x13\n\tETHTOOL_SPFLAGS                             = 0x28\n\tETHTOOL_SRINGPARAM                          = 0x11\n\tETHTOOL_SRSSH                               = 0x47\n\tETHTOOL_SRXCLSRLDEL                         = 0x31\n\tETHTOOL_SRXCLSRLINS                         = 0x32\n\tETHTOOL_SRXCSUM                             = 0x15\n\tETHTOOL_SRXFH                               = 0x2a\n\tETHTOOL_SRXFHINDIR                          = 0x39\n\tETHTOOL_SRXNTUPLE                           = 0x35\n\tETHTOOL_SSET                                = 0x2\n\tETHTOOL_SSG                                 = 0x19\n\tETHTOOL_STSO                                = 0x1f\n\tETHTOOL_STUNABLE                            = 0x49\n\tETHTOOL_STXCSUM                             = 0x17\n\tETHTOOL_SUFO                                = 0x22\n\tETHTOOL_SWOL                                = 0x6\n\tETHTOOL_TEST                                = 0x1a\n\tETH_P_1588                                  = 0x88f7\n\tETH_P_8021AD                                = 0x88a8\n\tETH_P_8021AH                                = 0x88e7\n\tETH_P_8021Q                                 = 0x8100\n\tETH_P_80221                                 = 0x8917\n\tETH_P_802_2                                 = 0x4\n\tETH_P_802_3                                 = 0x1\n\tETH_P_802_3_MIN                             = 0x600\n\tETH_P_802_EX1                               = 0x88b5\n\tETH_P_AARP                                  = 0x80f3\n\tETH_P_AF_IUCV                               = 0xfbfb\n\tETH_P_ALL                                   = 0x3\n\tETH_P_AOE                                   = 0x88a2\n\tETH_P_ARCNET                                = 0x1a\n\tETH_P_ARP                                   = 0x806\n\tETH_P_ATALK                                 = 0x809b\n\tETH_P_ATMFATE                               = 0x8884\n\tETH_P_ATMMPOA                               = 0x884c\n\tETH_P_AX25                                  = 0x2\n\tETH_P_BATMAN                                = 0x4305\n\tETH_P_BPQ                                   = 0x8ff\n\tETH_P_CAIF                                  = 0xf7\n\tETH_P_CAN                                   = 0xc\n\tETH_P_CANFD                                 = 0xd\n\tETH_P_CANXL                                 = 0xe\n\tETH_P_CFM                                   = 0x8902\n\tETH_P_CONTROL                               = 0x16\n\tETH_P_CUST                                  = 0x6006\n\tETH_P_DDCMP                                 = 0x6\n\tETH_P_DEC                                   = 0x6000\n\tETH_P_DIAG                                  = 0x6005\n\tETH_P_DNA_DL                                = 0x6001\n\tETH_P_DNA_RC                                = 0x6002\n\tETH_P_DNA_RT                                = 0x6003\n\tETH_P_DSA                                   = 0x1b\n\tETH_P_DSA_8021Q                             = 0xdadb\n\tETH_P_DSA_A5PSW                             = 0xe001\n\tETH_P_ECONET                                = 0x18\n\tETH_P_EDSA                                  = 0xdada\n\tETH_P_ERSPAN                                = 0x88be\n\tETH_P_ERSPAN2                               = 0x22eb\n\tETH_P_ETHERCAT                              = 0x88a4\n\tETH_P_FCOE                                  = 0x8906\n\tETH_P_FIP                                   = 0x8914\n\tETH_P_HDLC                                  = 0x19\n\tETH_P_HSR                                   = 0x892f\n\tETH_P_IBOE                                  = 0x8915\n\tETH_P_IEEE802154                            = 0xf6\n\tETH_P_IEEEPUP                               = 0xa00\n\tETH_P_IEEEPUPAT                             = 0xa01\n\tETH_P_IFE                                   = 0xed3e\n\tETH_P_IP                                    = 0x800\n\tETH_P_IPV6                                  = 0x86dd\n\tETH_P_IPX                                   = 0x8137\n\tETH_P_IRDA                                  = 0x17\n\tETH_P_LAT                                   = 0x6004\n\tETH_P_LINK_CTL                              = 0x886c\n\tETH_P_LLDP                                  = 0x88cc\n\tETH_P_LOCALTALK                             = 0x9\n\tETH_P_LOOP                                  = 0x60\n\tETH_P_LOOPBACK                              = 0x9000\n\tETH_P_MACSEC                                = 0x88e5\n\tETH_P_MAP                                   = 0xf9\n\tETH_P_MCTP                                  = 0xfa\n\tETH_P_MOBITEX                               = 0x15\n\tETH_P_MPLS_MC                               = 0x8848\n\tETH_P_MPLS_UC                               = 0x8847\n\tETH_P_MRP                                   = 0x88e3\n\tETH_P_MVRP                                  = 0x88f5\n\tETH_P_NCSI                                  = 0x88f8\n\tETH_P_NSH                                   = 0x894f\n\tETH_P_PAE                                   = 0x888e\n\tETH_P_PAUSE                                 = 0x8808\n\tETH_P_PHONET                                = 0xf5\n\tETH_P_PPPTALK                               = 0x10\n\tETH_P_PPP_DISC                              = 0x8863\n\tETH_P_PPP_MP                                = 0x8\n\tETH_P_PPP_SES                               = 0x8864\n\tETH_P_PREAUTH                               = 0x88c7\n\tETH_P_PROFINET                              = 0x8892\n\tETH_P_PRP                                   = 0x88fb\n\tETH_P_PUP                                   = 0x200\n\tETH_P_PUPAT                                 = 0x201\n\tETH_P_QINQ1                                 = 0x9100\n\tETH_P_QINQ2                                 = 0x9200\n\tETH_P_QINQ3                                 = 0x9300\n\tETH_P_RARP                                  = 0x8035\n\tETH_P_REALTEK                               = 0x8899\n\tETH_P_SCA                                   = 0x6007\n\tETH_P_SLOW                                  = 0x8809\n\tETH_P_SNAP                                  = 0x5\n\tETH_P_TDLS                                  = 0x890d\n\tETH_P_TEB                                   = 0x6558\n\tETH_P_TIPC                                  = 0x88ca\n\tETH_P_TRAILER                               = 0x1c\n\tETH_P_TR_802_2                              = 0x11\n\tETH_P_TSN                                   = 0x22f0\n\tETH_P_WAN_PPP                               = 0x7\n\tETH_P_WCCP                                  = 0x883e\n\tETH_P_X25                                   = 0x805\n\tETH_P_XDSA                                  = 0xf8\n\tEV_ABS                                      = 0x3\n\tEV_CNT                                      = 0x20\n\tEV_FF                                       = 0x15\n\tEV_FF_STATUS                                = 0x17\n\tEV_KEY                                      = 0x1\n\tEV_LED                                      = 0x11\n\tEV_MAX                                      = 0x1f\n\tEV_MSC                                      = 0x4\n\tEV_PWR                                      = 0x16\n\tEV_REL                                      = 0x2\n\tEV_REP                                      = 0x14\n\tEV_SND                                      = 0x12\n\tEV_SW                                       = 0x5\n\tEV_SYN                                      = 0x0\n\tEV_VERSION                                  = 0x10001\n\tEXABYTE_ENABLE_NEST                         = 0xf0\n\tEXFAT_SUPER_MAGIC                           = 0x2011bab0\n\tEXT2_SUPER_MAGIC                            = 0xef53\n\tEXT3_SUPER_MAGIC                            = 0xef53\n\tEXT4_SUPER_MAGIC                            = 0xef53\n\tEXTA                                        = 0xe\n\tEXTB                                        = 0xf\n\tF2FS_SUPER_MAGIC                            = 0xf2f52010\n\tFALLOC_FL_COLLAPSE_RANGE                    = 0x8\n\tFALLOC_FL_INSERT_RANGE                      = 0x20\n\tFALLOC_FL_KEEP_SIZE                         = 0x1\n\tFALLOC_FL_NO_HIDE_STALE                     = 0x4\n\tFALLOC_FL_PUNCH_HOLE                        = 0x2\n\tFALLOC_FL_UNSHARE_RANGE                     = 0x40\n\tFALLOC_FL_ZERO_RANGE                        = 0x10\n\tFANOTIFY_METADATA_VERSION                   = 0x3\n\tFAN_ACCESS                                  = 0x1\n\tFAN_ACCESS_PERM                             = 0x20000\n\tFAN_ALLOW                                   = 0x1\n\tFAN_ALL_CLASS_BITS                          = 0xc\n\tFAN_ALL_EVENTS                              = 0x3b\n\tFAN_ALL_INIT_FLAGS                          = 0x3f\n\tFAN_ALL_MARK_FLAGS                          = 0xff\n\tFAN_ALL_OUTGOING_EVENTS                     = 0x3403b\n\tFAN_ALL_PERM_EVENTS                         = 0x30000\n\tFAN_ATTRIB                                  = 0x4\n\tFAN_AUDIT                                   = 0x10\n\tFAN_CLASS_CONTENT                           = 0x4\n\tFAN_CLASS_NOTIF                             = 0x0\n\tFAN_CLASS_PRE_CONTENT                       = 0x8\n\tFAN_CLOEXEC                                 = 0x1\n\tFAN_CLOSE                                   = 0x18\n\tFAN_CLOSE_NOWRITE                           = 0x10\n\tFAN_CLOSE_WRITE                             = 0x8\n\tFAN_CREATE                                  = 0x100\n\tFAN_DELETE                                  = 0x200\n\tFAN_DELETE_SELF                             = 0x400\n\tFAN_DENY                                    = 0x2\n\tFAN_ENABLE_AUDIT                            = 0x40\n\tFAN_EPIDFD                                  = -0x2\n\tFAN_EVENT_INFO_TYPE_DFID                    = 0x3\n\tFAN_EVENT_INFO_TYPE_DFID_NAME               = 0x2\n\tFAN_EVENT_INFO_TYPE_ERROR                   = 0x5\n\tFAN_EVENT_INFO_TYPE_FID                     = 0x1\n\tFAN_EVENT_INFO_TYPE_NEW_DFID_NAME           = 0xc\n\tFAN_EVENT_INFO_TYPE_OLD_DFID_NAME           = 0xa\n\tFAN_EVENT_INFO_TYPE_PIDFD                   = 0x4\n\tFAN_EVENT_METADATA_LEN                      = 0x18\n\tFAN_EVENT_ON_CHILD                          = 0x8000000\n\tFAN_FS_ERROR                                = 0x8000\n\tFAN_INFO                                    = 0x20\n\tFAN_MARK_ADD                                = 0x1\n\tFAN_MARK_DONT_FOLLOW                        = 0x4\n\tFAN_MARK_EVICTABLE                          = 0x200\n\tFAN_MARK_FILESYSTEM                         = 0x100\n\tFAN_MARK_FLUSH                              = 0x80\n\tFAN_MARK_IGNORE                             = 0x400\n\tFAN_MARK_IGNORED_MASK                       = 0x20\n\tFAN_MARK_IGNORED_SURV_MODIFY                = 0x40\n\tFAN_MARK_IGNORE_SURV                        = 0x440\n\tFAN_MARK_INODE                              = 0x0\n\tFAN_MARK_MOUNT                              = 0x10\n\tFAN_MARK_ONLYDIR                            = 0x8\n\tFAN_MARK_REMOVE                             = 0x2\n\tFAN_MODIFY                                  = 0x2\n\tFAN_MOVE                                    = 0xc0\n\tFAN_MOVED_FROM                              = 0x40\n\tFAN_MOVED_TO                                = 0x80\n\tFAN_MOVE_SELF                               = 0x800\n\tFAN_NOFD                                    = -0x1\n\tFAN_NONBLOCK                                = 0x2\n\tFAN_NOPIDFD                                 = -0x1\n\tFAN_ONDIR                                   = 0x40000000\n\tFAN_OPEN                                    = 0x20\n\tFAN_OPEN_EXEC                               = 0x1000\n\tFAN_OPEN_EXEC_PERM                          = 0x40000\n\tFAN_OPEN_PERM                               = 0x10000\n\tFAN_Q_OVERFLOW                              = 0x4000\n\tFAN_RENAME                                  = 0x10000000\n\tFAN_REPORT_DFID_NAME                        = 0xc00\n\tFAN_REPORT_DFID_NAME_TARGET                 = 0x1e00\n\tFAN_REPORT_DIR_FID                          = 0x400\n\tFAN_REPORT_FID                              = 0x200\n\tFAN_REPORT_NAME                             = 0x800\n\tFAN_REPORT_PIDFD                            = 0x80\n\tFAN_REPORT_TARGET_FID                       = 0x1000\n\tFAN_REPORT_TID                              = 0x100\n\tFAN_RESPONSE_INFO_AUDIT_RULE                = 0x1\n\tFAN_RESPONSE_INFO_NONE                      = 0x0\n\tFAN_UNLIMITED_MARKS                         = 0x20\n\tFAN_UNLIMITED_QUEUE                         = 0x10\n\tFD_CLOEXEC                                  = 0x1\n\tFD_SETSIZE                                  = 0x400\n\tFF0                                         = 0x0\n\tFIB_RULE_DEV_DETACHED                       = 0x8\n\tFIB_RULE_FIND_SADDR                         = 0x10000\n\tFIB_RULE_IIF_DETACHED                       = 0x8\n\tFIB_RULE_INVERT                             = 0x2\n\tFIB_RULE_OIF_DETACHED                       = 0x10\n\tFIB_RULE_PERMANENT                          = 0x1\n\tFIB_RULE_UNRESOLVED                         = 0x4\n\tFIDEDUPERANGE                               = 0xc0189436\n\tFSCRYPT_KEY_DESCRIPTOR_SIZE                 = 0x8\n\tFSCRYPT_KEY_DESC_PREFIX                     = \"fscrypt:\"\n\tFSCRYPT_KEY_DESC_PREFIX_SIZE                = 0x8\n\tFSCRYPT_KEY_IDENTIFIER_SIZE                 = 0x10\n\tFSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY  = 0x1\n\tFSCRYPT_KEY_REMOVAL_STATUS_FLAG_OTHER_USERS = 0x2\n\tFSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR            = 0x1\n\tFSCRYPT_KEY_SPEC_TYPE_IDENTIFIER            = 0x2\n\tFSCRYPT_KEY_STATUS_ABSENT                   = 0x1\n\tFSCRYPT_KEY_STATUS_FLAG_ADDED_BY_SELF       = 0x1\n\tFSCRYPT_KEY_STATUS_INCOMPLETELY_REMOVED     = 0x3\n\tFSCRYPT_KEY_STATUS_PRESENT                  = 0x2\n\tFSCRYPT_MAX_KEY_SIZE                        = 0x40\n\tFSCRYPT_MODE_ADIANTUM                       = 0x9\n\tFSCRYPT_MODE_AES_128_CBC                    = 0x5\n\tFSCRYPT_MODE_AES_128_CTS                    = 0x6\n\tFSCRYPT_MODE_AES_256_CTS                    = 0x4\n\tFSCRYPT_MODE_AES_256_HCTR2                  = 0xa\n\tFSCRYPT_MODE_AES_256_XTS                    = 0x1\n\tFSCRYPT_MODE_SM4_CTS                        = 0x8\n\tFSCRYPT_MODE_SM4_XTS                        = 0x7\n\tFSCRYPT_POLICY_FLAGS_PAD_16                 = 0x2\n\tFSCRYPT_POLICY_FLAGS_PAD_32                 = 0x3\n\tFSCRYPT_POLICY_FLAGS_PAD_4                  = 0x0\n\tFSCRYPT_POLICY_FLAGS_PAD_8                  = 0x1\n\tFSCRYPT_POLICY_FLAGS_PAD_MASK               = 0x3\n\tFSCRYPT_POLICY_FLAG_DIRECT_KEY              = 0x4\n\tFSCRYPT_POLICY_FLAG_IV_INO_LBLK_32          = 0x10\n\tFSCRYPT_POLICY_FLAG_IV_INO_LBLK_64          = 0x8\n\tFSCRYPT_POLICY_V1                           = 0x0\n\tFSCRYPT_POLICY_V2                           = 0x2\n\tFS_ENCRYPTION_MODE_ADIANTUM                 = 0x9\n\tFS_ENCRYPTION_MODE_AES_128_CBC              = 0x5\n\tFS_ENCRYPTION_MODE_AES_128_CTS              = 0x6\n\tFS_ENCRYPTION_MODE_AES_256_CBC              = 0x3\n\tFS_ENCRYPTION_MODE_AES_256_CTS              = 0x4\n\tFS_ENCRYPTION_MODE_AES_256_GCM              = 0x2\n\tFS_ENCRYPTION_MODE_AES_256_XTS              = 0x1\n\tFS_ENCRYPTION_MODE_INVALID                  = 0x0\n\tFS_IOC_ADD_ENCRYPTION_KEY                   = 0xc0506617\n\tFS_IOC_GET_ENCRYPTION_KEY_STATUS            = 0xc080661a\n\tFS_IOC_GET_ENCRYPTION_POLICY_EX             = 0xc0096616\n\tFS_IOC_MEASURE_VERITY                       = 0xc0046686\n\tFS_IOC_READ_VERITY_METADATA                 = 0xc0286687\n\tFS_IOC_REMOVE_ENCRYPTION_KEY                = 0xc0406618\n\tFS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS      = 0xc0406619\n\tFS_KEY_DESCRIPTOR_SIZE                      = 0x8\n\tFS_KEY_DESC_PREFIX                          = \"fscrypt:\"\n\tFS_KEY_DESC_PREFIX_SIZE                     = 0x8\n\tFS_MAX_KEY_SIZE                             = 0x40\n\tFS_POLICY_FLAGS_PAD_16                      = 0x2\n\tFS_POLICY_FLAGS_PAD_32                      = 0x3\n\tFS_POLICY_FLAGS_PAD_4                       = 0x0\n\tFS_POLICY_FLAGS_PAD_8                       = 0x1\n\tFS_POLICY_FLAGS_PAD_MASK                    = 0x3\n\tFS_POLICY_FLAGS_VALID                       = 0x7\n\tFS_VERITY_FL                                = 0x100000\n\tFS_VERITY_HASH_ALG_SHA256                   = 0x1\n\tFS_VERITY_HASH_ALG_SHA512                   = 0x2\n\tFS_VERITY_METADATA_TYPE_DESCRIPTOR          = 0x2\n\tFS_VERITY_METADATA_TYPE_MERKLE_TREE         = 0x1\n\tFS_VERITY_METADATA_TYPE_SIGNATURE           = 0x3\n\tFUSE_SUPER_MAGIC                            = 0x65735546\n\tFUTEXFS_SUPER_MAGIC                         = 0xbad1dea\n\tF_ADD_SEALS                                 = 0x409\n\tF_DUPFD                                     = 0x0\n\tF_DUPFD_CLOEXEC                             = 0x406\n\tF_EXLCK                                     = 0x4\n\tF_GETFD                                     = 0x1\n\tF_GETFL                                     = 0x3\n\tF_GETLEASE                                  = 0x401\n\tF_GETOWN_EX                                 = 0x10\n\tF_GETPIPE_SZ                                = 0x408\n\tF_GETSIG                                    = 0xb\n\tF_GET_FILE_RW_HINT                          = 0x40d\n\tF_GET_RW_HINT                               = 0x40b\n\tF_GET_SEALS                                 = 0x40a\n\tF_LOCK                                      = 0x1\n\tF_NOTIFY                                    = 0x402\n\tF_OFD_GETLK                                 = 0x24\n\tF_OFD_SETLK                                 = 0x25\n\tF_OFD_SETLKW                                = 0x26\n\tF_OK                                        = 0x0\n\tF_SEAL_EXEC                                 = 0x20\n\tF_SEAL_FUTURE_WRITE                         = 0x10\n\tF_SEAL_GROW                                 = 0x4\n\tF_SEAL_SEAL                                 = 0x1\n\tF_SEAL_SHRINK                               = 0x2\n\tF_SEAL_WRITE                                = 0x8\n\tF_SETFD                                     = 0x2\n\tF_SETFL                                     = 0x4\n\tF_SETLEASE                                  = 0x400\n\tF_SETOWN_EX                                 = 0xf\n\tF_SETPIPE_SZ                                = 0x407\n\tF_SETSIG                                    = 0xa\n\tF_SET_FILE_RW_HINT                          = 0x40e\n\tF_SET_RW_HINT                               = 0x40c\n\tF_SHLCK                                     = 0x8\n\tF_TEST                                      = 0x3\n\tF_TLOCK                                     = 0x2\n\tF_ULOCK                                     = 0x0\n\tGENL_ADMIN_PERM                             = 0x1\n\tGENL_CMD_CAP_DO                             = 0x2\n\tGENL_CMD_CAP_DUMP                           = 0x4\n\tGENL_CMD_CAP_HASPOL                         = 0x8\n\tGENL_HDRLEN                                 = 0x4\n\tGENL_ID_CTRL                                = 0x10\n\tGENL_ID_PMCRAID                             = 0x12\n\tGENL_ID_VFS_DQUOT                           = 0x11\n\tGENL_MAX_ID                                 = 0x3ff\n\tGENL_MIN_ID                                 = 0x10\n\tGENL_NAMSIZ                                 = 0x10\n\tGENL_START_ALLOC                            = 0x13\n\tGENL_UNS_ADMIN_PERM                         = 0x10\n\tGRND_INSECURE                               = 0x4\n\tGRND_NONBLOCK                               = 0x1\n\tGRND_RANDOM                                 = 0x2\n\tHDIO_DRIVE_CMD                              = 0x31f\n\tHDIO_DRIVE_CMD_AEB                          = 0x31e\n\tHDIO_DRIVE_CMD_HDR_SIZE                     = 0x4\n\tHDIO_DRIVE_HOB_HDR_SIZE                     = 0x8\n\tHDIO_DRIVE_RESET                            = 0x31c\n\tHDIO_DRIVE_TASK                             = 0x31e\n\tHDIO_DRIVE_TASKFILE                         = 0x31d\n\tHDIO_DRIVE_TASK_HDR_SIZE                    = 0x8\n\tHDIO_GETGEO                                 = 0x301\n\tHDIO_GET_32BIT                              = 0x309\n\tHDIO_GET_ACOUSTIC                           = 0x30f\n\tHDIO_GET_ADDRESS                            = 0x310\n\tHDIO_GET_BUSSTATE                           = 0x31a\n\tHDIO_GET_DMA                                = 0x30b\n\tHDIO_GET_IDENTITY                           = 0x30d\n\tHDIO_GET_KEEPSETTINGS                       = 0x308\n\tHDIO_GET_MULTCOUNT                          = 0x304\n\tHDIO_GET_NICE                               = 0x30c\n\tHDIO_GET_NOWERR                             = 0x30a\n\tHDIO_GET_QDMA                               = 0x305\n\tHDIO_GET_UNMASKINTR                         = 0x302\n\tHDIO_GET_WCACHE                             = 0x30e\n\tHDIO_OBSOLETE_IDENTITY                      = 0x307\n\tHDIO_SCAN_HWIF                              = 0x328\n\tHDIO_SET_32BIT                              = 0x324\n\tHDIO_SET_ACOUSTIC                           = 0x32c\n\tHDIO_SET_ADDRESS                            = 0x32f\n\tHDIO_SET_BUSSTATE                           = 0x32d\n\tHDIO_SET_DMA                                = 0x326\n\tHDIO_SET_KEEPSETTINGS                       = 0x323\n\tHDIO_SET_MULTCOUNT                          = 0x321\n\tHDIO_SET_NICE                               = 0x329\n\tHDIO_SET_NOWERR                             = 0x325\n\tHDIO_SET_PIO_MODE                           = 0x327\n\tHDIO_SET_QDMA                               = 0x32e\n\tHDIO_SET_UNMASKINTR                         = 0x322\n\tHDIO_SET_WCACHE                             = 0x32b\n\tHDIO_SET_XFER                               = 0x306\n\tHDIO_TRISTATE_HWIF                          = 0x31b\n\tHDIO_UNREGISTER_HWIF                        = 0x32a\n\tHID_MAX_DESCRIPTOR_SIZE                     = 0x1000\n\tHOSTFS_SUPER_MAGIC                          = 0xc0ffee\n\tHPFS_SUPER_MAGIC                            = 0xf995e849\n\tHUGETLBFS_MAGIC                             = 0x958458f6\n\tIBSHIFT                                     = 0x10\n\tICRNL                                       = 0x100\n\tIFA_F_DADFAILED                             = 0x8\n\tIFA_F_DEPRECATED                            = 0x20\n\tIFA_F_HOMEADDRESS                           = 0x10\n\tIFA_F_MANAGETEMPADDR                        = 0x100\n\tIFA_F_MCAUTOJOIN                            = 0x400\n\tIFA_F_NODAD                                 = 0x2\n\tIFA_F_NOPREFIXROUTE                         = 0x200\n\tIFA_F_OPTIMISTIC                            = 0x4\n\tIFA_F_PERMANENT                             = 0x80\n\tIFA_F_SECONDARY                             = 0x1\n\tIFA_F_STABLE_PRIVACY                        = 0x800\n\tIFA_F_TEMPORARY                             = 0x1\n\tIFA_F_TENTATIVE                             = 0x40\n\tIFA_MAX                                     = 0xb\n\tIFF_ALLMULTI                                = 0x200\n\tIFF_ATTACH_QUEUE                            = 0x200\n\tIFF_AUTOMEDIA                               = 0x4000\n\tIFF_BROADCAST                               = 0x2\n\tIFF_DEBUG                                   = 0x4\n\tIFF_DETACH_QUEUE                            = 0x400\n\tIFF_DORMANT                                 = 0x20000\n\tIFF_DYNAMIC                                 = 0x8000\n\tIFF_ECHO                                    = 0x40000\n\tIFF_LOOPBACK                                = 0x8\n\tIFF_LOWER_UP                                = 0x10000\n\tIFF_MASTER                                  = 0x400\n\tIFF_MULTICAST                               = 0x1000\n\tIFF_MULTI_QUEUE                             = 0x100\n\tIFF_NAPI                                    = 0x10\n\tIFF_NAPI_FRAGS                              = 0x20\n\tIFF_NOARP                                   = 0x80\n\tIFF_NOFILTER                                = 0x1000\n\tIFF_NOTRAILERS                              = 0x20\n\tIFF_NO_CARRIER                              = 0x40\n\tIFF_NO_PI                                   = 0x1000\n\tIFF_ONE_QUEUE                               = 0x2000\n\tIFF_PERSIST                                 = 0x800\n\tIFF_POINTOPOINT                             = 0x10\n\tIFF_PORTSEL                                 = 0x2000\n\tIFF_PROMISC                                 = 0x100\n\tIFF_RUNNING                                 = 0x40\n\tIFF_SLAVE                                   = 0x800\n\tIFF_TAP                                     = 0x2\n\tIFF_TUN                                     = 0x1\n\tIFF_TUN_EXCL                                = 0x8000\n\tIFF_UP                                      = 0x1\n\tIFF_VNET_HDR                                = 0x4000\n\tIFF_VOLATILE                                = 0x70c5a\n\tIFNAMSIZ                                    = 0x10\n\tIGNBRK                                      = 0x1\n\tIGNCR                                       = 0x80\n\tIGNPAR                                      = 0x4\n\tIMAXBEL                                     = 0x2000\n\tINLCR                                       = 0x40\n\tINPCK                                       = 0x10\n\tIN_ACCESS                                   = 0x1\n\tIN_ALL_EVENTS                               = 0xfff\n\tIN_ATTRIB                                   = 0x4\n\tIN_CLASSA_HOST                              = 0xffffff\n\tIN_CLASSA_MAX                               = 0x80\n\tIN_CLASSA_NET                               = 0xff000000\n\tIN_CLASSA_NSHIFT                            = 0x18\n\tIN_CLASSB_HOST                              = 0xffff\n\tIN_CLASSB_MAX                               = 0x10000\n\tIN_CLASSB_NET                               = 0xffff0000\n\tIN_CLASSB_NSHIFT                            = 0x10\n\tIN_CLASSC_HOST                              = 0xff\n\tIN_CLASSC_NET                               = 0xffffff00\n\tIN_CLASSC_NSHIFT                            = 0x8\n\tIN_CLOSE                                    = 0x18\n\tIN_CLOSE_NOWRITE                            = 0x10\n\tIN_CLOSE_WRITE                              = 0x8\n\tIN_CREATE                                   = 0x100\n\tIN_DELETE                                   = 0x200\n\tIN_DELETE_SELF                              = 0x400\n\tIN_DONT_FOLLOW                              = 0x2000000\n\tIN_EXCL_UNLINK                              = 0x4000000\n\tIN_IGNORED                                  = 0x8000\n\tIN_ISDIR                                    = 0x40000000\n\tIN_LOOPBACKNET                              = 0x7f\n\tIN_MASK_ADD                                 = 0x20000000\n\tIN_MASK_CREATE                              = 0x10000000\n\tIN_MODIFY                                   = 0x2\n\tIN_MOVE                                     = 0xc0\n\tIN_MOVED_FROM                               = 0x40\n\tIN_MOVED_TO                                 = 0x80\n\tIN_MOVE_SELF                                = 0x800\n\tIN_ONESHOT                                  = 0x80000000\n\tIN_ONLYDIR                                  = 0x1000000\n\tIN_OPEN                                     = 0x20\n\tIN_Q_OVERFLOW                               = 0x4000\n\tIN_UNMOUNT                                  = 0x2000\n\tIPPROTO_AH                                  = 0x33\n\tIPPROTO_BEETPH                              = 0x5e\n\tIPPROTO_COMP                                = 0x6c\n\tIPPROTO_DCCP                                = 0x21\n\tIPPROTO_DSTOPTS                             = 0x3c\n\tIPPROTO_EGP                                 = 0x8\n\tIPPROTO_ENCAP                               = 0x62\n\tIPPROTO_ESP                                 = 0x32\n\tIPPROTO_ETHERNET                            = 0x8f\n\tIPPROTO_FRAGMENT                            = 0x2c\n\tIPPROTO_GRE                                 = 0x2f\n\tIPPROTO_HOPOPTS                             = 0x0\n\tIPPROTO_ICMP                                = 0x1\n\tIPPROTO_ICMPV6                              = 0x3a\n\tIPPROTO_IDP                                 = 0x16\n\tIPPROTO_IGMP                                = 0x2\n\tIPPROTO_IP                                  = 0x0\n\tIPPROTO_IPIP                                = 0x4\n\tIPPROTO_IPV6                                = 0x29\n\tIPPROTO_L2TP                                = 0x73\n\tIPPROTO_MH                                  = 0x87\n\tIPPROTO_MPLS                                = 0x89\n\tIPPROTO_MPTCP                               = 0x106\n\tIPPROTO_MTP                                 = 0x5c\n\tIPPROTO_NONE                                = 0x3b\n\tIPPROTO_PIM                                 = 0x67\n\tIPPROTO_PUP                                 = 0xc\n\tIPPROTO_RAW                                 = 0xff\n\tIPPROTO_ROUTING                             = 0x2b\n\tIPPROTO_RSVP                                = 0x2e\n\tIPPROTO_SCTP                                = 0x84\n\tIPPROTO_TCP                                 = 0x6\n\tIPPROTO_TP                                  = 0x1d\n\tIPPROTO_UDP                                 = 0x11\n\tIPPROTO_UDPLITE                             = 0x88\n\tIPV6_2292DSTOPTS                            = 0x4\n\tIPV6_2292HOPLIMIT                           = 0x8\n\tIPV6_2292HOPOPTS                            = 0x3\n\tIPV6_2292PKTINFO                            = 0x2\n\tIPV6_2292PKTOPTIONS                         = 0x6\n\tIPV6_2292RTHDR                              = 0x5\n\tIPV6_ADDRFORM                               = 0x1\n\tIPV6_ADDR_PREFERENCES                       = 0x48\n\tIPV6_ADD_MEMBERSHIP                         = 0x14\n\tIPV6_AUTHHDR                                = 0xa\n\tIPV6_AUTOFLOWLABEL                          = 0x46\n\tIPV6_CHECKSUM                               = 0x7\n\tIPV6_DONTFRAG                               = 0x3e\n\tIPV6_DROP_MEMBERSHIP                        = 0x15\n\tIPV6_DSTOPTS                                = 0x3b\n\tIPV6_FLOW                                   = 0x11\n\tIPV6_FREEBIND                               = 0x4e\n\tIPV6_HDRINCL                                = 0x24\n\tIPV6_HOPLIMIT                               = 0x34\n\tIPV6_HOPOPTS                                = 0x36\n\tIPV6_IPSEC_POLICY                           = 0x22\n\tIPV6_JOIN_ANYCAST                           = 0x1b\n\tIPV6_JOIN_GROUP                             = 0x14\n\tIPV6_LEAVE_ANYCAST                          = 0x1c\n\tIPV6_LEAVE_GROUP                            = 0x15\n\tIPV6_MINHOPCOUNT                            = 0x49\n\tIPV6_MTU                                    = 0x18\n\tIPV6_MTU_DISCOVER                           = 0x17\n\tIPV6_MULTICAST_ALL                          = 0x1d\n\tIPV6_MULTICAST_HOPS                         = 0x12\n\tIPV6_MULTICAST_IF                           = 0x11\n\tIPV6_MULTICAST_LOOP                         = 0x13\n\tIPV6_NEXTHOP                                = 0x9\n\tIPV6_ORIGDSTADDR                            = 0x4a\n\tIPV6_PATHMTU                                = 0x3d\n\tIPV6_PKTINFO                                = 0x32\n\tIPV6_PMTUDISC_DO                            = 0x2\n\tIPV6_PMTUDISC_DONT                          = 0x0\n\tIPV6_PMTUDISC_INTERFACE                     = 0x4\n\tIPV6_PMTUDISC_OMIT                          = 0x5\n\tIPV6_PMTUDISC_PROBE                         = 0x3\n\tIPV6_PMTUDISC_WANT                          = 0x1\n\tIPV6_RECVDSTOPTS                            = 0x3a\n\tIPV6_RECVERR                                = 0x19\n\tIPV6_RECVERR_RFC4884                        = 0x1f\n\tIPV6_RECVFRAGSIZE                           = 0x4d\n\tIPV6_RECVHOPLIMIT                           = 0x33\n\tIPV6_RECVHOPOPTS                            = 0x35\n\tIPV6_RECVORIGDSTADDR                        = 0x4a\n\tIPV6_RECVPATHMTU                            = 0x3c\n\tIPV6_RECVPKTINFO                            = 0x31\n\tIPV6_RECVRTHDR                              = 0x38\n\tIPV6_RECVTCLASS                             = 0x42\n\tIPV6_ROUTER_ALERT                           = 0x16\n\tIPV6_ROUTER_ALERT_ISOLATE                   = 0x1e\n\tIPV6_RTHDR                                  = 0x39\n\tIPV6_RTHDRDSTOPTS                           = 0x37\n\tIPV6_RTHDR_LOOSE                            = 0x0\n\tIPV6_RTHDR_STRICT                           = 0x1\n\tIPV6_RTHDR_TYPE_0                           = 0x0\n\tIPV6_RXDSTOPTS                              = 0x3b\n\tIPV6_RXHOPOPTS                              = 0x36\n\tIPV6_TCLASS                                 = 0x43\n\tIPV6_TRANSPARENT                            = 0x4b\n\tIPV6_UNICAST_HOPS                           = 0x10\n\tIPV6_UNICAST_IF                             = 0x4c\n\tIPV6_USER_FLOW                              = 0xe\n\tIPV6_V6ONLY                                 = 0x1a\n\tIPV6_XFRM_POLICY                            = 0x23\n\tIP_ADD_MEMBERSHIP                           = 0x23\n\tIP_ADD_SOURCE_MEMBERSHIP                    = 0x27\n\tIP_BIND_ADDRESS_NO_PORT                     = 0x18\n\tIP_BLOCK_SOURCE                             = 0x26\n\tIP_CHECKSUM                                 = 0x17\n\tIP_DEFAULT_MULTICAST_LOOP                   = 0x1\n\tIP_DEFAULT_MULTICAST_TTL                    = 0x1\n\tIP_DF                                       = 0x4000\n\tIP_DROP_MEMBERSHIP                          = 0x24\n\tIP_DROP_SOURCE_MEMBERSHIP                   = 0x28\n\tIP_FREEBIND                                 = 0xf\n\tIP_HDRINCL                                  = 0x3\n\tIP_IPSEC_POLICY                             = 0x10\n\tIP_LOCAL_PORT_RANGE                         = 0x33\n\tIP_MAXPACKET                                = 0xffff\n\tIP_MAX_MEMBERSHIPS                          = 0x14\n\tIP_MF                                       = 0x2000\n\tIP_MINTTL                                   = 0x15\n\tIP_MSFILTER                                 = 0x29\n\tIP_MSS                                      = 0x240\n\tIP_MTU                                      = 0xe\n\tIP_MTU_DISCOVER                             = 0xa\n\tIP_MULTICAST_ALL                            = 0x31\n\tIP_MULTICAST_IF                             = 0x20\n\tIP_MULTICAST_LOOP                           = 0x22\n\tIP_MULTICAST_TTL                            = 0x21\n\tIP_NODEFRAG                                 = 0x16\n\tIP_OFFMASK                                  = 0x1fff\n\tIP_OPTIONS                                  = 0x4\n\tIP_ORIGDSTADDR                              = 0x14\n\tIP_PASSSEC                                  = 0x12\n\tIP_PKTINFO                                  = 0x8\n\tIP_PKTOPTIONS                               = 0x9\n\tIP_PMTUDISC                                 = 0xa\n\tIP_PMTUDISC_DO                              = 0x2\n\tIP_PMTUDISC_DONT                            = 0x0\n\tIP_PMTUDISC_INTERFACE                       = 0x4\n\tIP_PMTUDISC_OMIT                            = 0x5\n\tIP_PMTUDISC_PROBE                           = 0x3\n\tIP_PMTUDISC_WANT                            = 0x1\n\tIP_PROTOCOL                                 = 0x34\n\tIP_RECVERR                                  = 0xb\n\tIP_RECVERR_RFC4884                          = 0x1a\n\tIP_RECVFRAGSIZE                             = 0x19\n\tIP_RECVOPTS                                 = 0x6\n\tIP_RECVORIGDSTADDR                          = 0x14\n\tIP_RECVRETOPTS                              = 0x7\n\tIP_RECVTOS                                  = 0xd\n\tIP_RECVTTL                                  = 0xc\n\tIP_RETOPTS                                  = 0x7\n\tIP_RF                                       = 0x8000\n\tIP_ROUTER_ALERT                             = 0x5\n\tIP_TOS                                      = 0x1\n\tIP_TRANSPARENT                              = 0x13\n\tIP_TTL                                      = 0x2\n\tIP_UNBLOCK_SOURCE                           = 0x25\n\tIP_UNICAST_IF                               = 0x32\n\tIP_USER_FLOW                                = 0xd\n\tIP_XFRM_POLICY                              = 0x11\n\tISOFS_SUPER_MAGIC                           = 0x9660\n\tISTRIP                                      = 0x20\n\tITIMER_PROF                                 = 0x2\n\tITIMER_REAL                                 = 0x0\n\tITIMER_VIRTUAL                              = 0x1\n\tIUTF8                                       = 0x4000\n\tIXANY                                       = 0x800\n\tJFFS2_SUPER_MAGIC                           = 0x72b6\n\tKCMPROTO_CONNECTED                          = 0x0\n\tKCM_RECV_DISABLE                            = 0x1\n\tKEXEC_ARCH_386                              = 0x30000\n\tKEXEC_ARCH_68K                              = 0x40000\n\tKEXEC_ARCH_AARCH64                          = 0xb70000\n\tKEXEC_ARCH_ARM                              = 0x280000\n\tKEXEC_ARCH_DEFAULT                          = 0x0\n\tKEXEC_ARCH_IA_64                            = 0x320000\n\tKEXEC_ARCH_LOONGARCH                        = 0x1020000\n\tKEXEC_ARCH_MASK                             = 0xffff0000\n\tKEXEC_ARCH_MIPS                             = 0x80000\n\tKEXEC_ARCH_MIPS_LE                          = 0xa0000\n\tKEXEC_ARCH_PARISC                           = 0xf0000\n\tKEXEC_ARCH_PPC                              = 0x140000\n\tKEXEC_ARCH_PPC64                            = 0x150000\n\tKEXEC_ARCH_RISCV                            = 0xf30000\n\tKEXEC_ARCH_S390                             = 0x160000\n\tKEXEC_ARCH_SH                               = 0x2a0000\n\tKEXEC_ARCH_X86_64                           = 0x3e0000\n\tKEXEC_CRASH_HOTPLUG_SUPPORT                 = 0x8\n\tKEXEC_FILE_DEBUG                            = 0x8\n\tKEXEC_FILE_NO_INITRAMFS                     = 0x4\n\tKEXEC_FILE_ON_CRASH                         = 0x2\n\tKEXEC_FILE_UNLOAD                           = 0x1\n\tKEXEC_ON_CRASH                              = 0x1\n\tKEXEC_PRESERVE_CONTEXT                      = 0x2\n\tKEXEC_SEGMENT_MAX                           = 0x10\n\tKEXEC_UPDATE_ELFCOREHDR                     = 0x4\n\tKEYCTL_ASSUME_AUTHORITY                     = 0x10\n\tKEYCTL_CAPABILITIES                         = 0x1f\n\tKEYCTL_CAPS0_BIG_KEY                        = 0x10\n\tKEYCTL_CAPS0_CAPABILITIES                   = 0x1\n\tKEYCTL_CAPS0_DIFFIE_HELLMAN                 = 0x4\n\tKEYCTL_CAPS0_INVALIDATE                     = 0x20\n\tKEYCTL_CAPS0_MOVE                           = 0x80\n\tKEYCTL_CAPS0_PERSISTENT_KEYRINGS            = 0x2\n\tKEYCTL_CAPS0_PUBLIC_KEY                     = 0x8\n\tKEYCTL_CAPS0_RESTRICT_KEYRING               = 0x40\n\tKEYCTL_CAPS1_NOTIFICATIONS                  = 0x4\n\tKEYCTL_CAPS1_NS_KEYRING_NAME                = 0x1\n\tKEYCTL_CAPS1_NS_KEY_TAG                     = 0x2\n\tKEYCTL_CHOWN                                = 0x4\n\tKEYCTL_CLEAR                                = 0x7\n\tKEYCTL_DESCRIBE                             = 0x6\n\tKEYCTL_DH_COMPUTE                           = 0x17\n\tKEYCTL_GET_KEYRING_ID                       = 0x0\n\tKEYCTL_GET_PERSISTENT                       = 0x16\n\tKEYCTL_GET_SECURITY                         = 0x11\n\tKEYCTL_INSTANTIATE                          = 0xc\n\tKEYCTL_INSTANTIATE_IOV                      = 0x14\n\tKEYCTL_INVALIDATE                           = 0x15\n\tKEYCTL_JOIN_SESSION_KEYRING                 = 0x1\n\tKEYCTL_LINK                                 = 0x8\n\tKEYCTL_MOVE                                 = 0x1e\n\tKEYCTL_MOVE_EXCL                            = 0x1\n\tKEYCTL_NEGATE                               = 0xd\n\tKEYCTL_PKEY_DECRYPT                         = 0x1a\n\tKEYCTL_PKEY_ENCRYPT                         = 0x19\n\tKEYCTL_PKEY_QUERY                           = 0x18\n\tKEYCTL_PKEY_SIGN                            = 0x1b\n\tKEYCTL_PKEY_VERIFY                          = 0x1c\n\tKEYCTL_READ                                 = 0xb\n\tKEYCTL_REJECT                               = 0x13\n\tKEYCTL_RESTRICT_KEYRING                     = 0x1d\n\tKEYCTL_REVOKE                               = 0x3\n\tKEYCTL_SEARCH                               = 0xa\n\tKEYCTL_SESSION_TO_PARENT                    = 0x12\n\tKEYCTL_SETPERM                              = 0x5\n\tKEYCTL_SET_REQKEY_KEYRING                   = 0xe\n\tKEYCTL_SET_TIMEOUT                          = 0xf\n\tKEYCTL_SUPPORTS_DECRYPT                     = 0x2\n\tKEYCTL_SUPPORTS_ENCRYPT                     = 0x1\n\tKEYCTL_SUPPORTS_SIGN                        = 0x4\n\tKEYCTL_SUPPORTS_VERIFY                      = 0x8\n\tKEYCTL_UNLINK                               = 0x9\n\tKEYCTL_UPDATE                               = 0x2\n\tKEYCTL_WATCH_KEY                            = 0x20\n\tKEY_REQKEY_DEFL_DEFAULT                     = 0x0\n\tKEY_REQKEY_DEFL_GROUP_KEYRING               = 0x6\n\tKEY_REQKEY_DEFL_NO_CHANGE                   = -0x1\n\tKEY_REQKEY_DEFL_PROCESS_KEYRING             = 0x2\n\tKEY_REQKEY_DEFL_REQUESTOR_KEYRING           = 0x7\n\tKEY_REQKEY_DEFL_SESSION_KEYRING             = 0x3\n\tKEY_REQKEY_DEFL_THREAD_KEYRING              = 0x1\n\tKEY_REQKEY_DEFL_USER_KEYRING                = 0x4\n\tKEY_REQKEY_DEFL_USER_SESSION_KEYRING        = 0x5\n\tKEY_SPEC_GROUP_KEYRING                      = -0x6\n\tKEY_SPEC_PROCESS_KEYRING                    = -0x2\n\tKEY_SPEC_REQKEY_AUTH_KEY                    = -0x7\n\tKEY_SPEC_REQUESTOR_KEYRING                  = -0x8\n\tKEY_SPEC_SESSION_KEYRING                    = -0x3\n\tKEY_SPEC_THREAD_KEYRING                     = -0x1\n\tKEY_SPEC_USER_KEYRING                       = -0x4\n\tKEY_SPEC_USER_SESSION_KEYRING               = -0x5\n\tLANDLOCK_ACCESS_FS_EXECUTE                  = 0x1\n\tLANDLOCK_ACCESS_FS_IOCTL_DEV                = 0x8000\n\tLANDLOCK_ACCESS_FS_MAKE_BLOCK               = 0x800\n\tLANDLOCK_ACCESS_FS_MAKE_CHAR                = 0x40\n\tLANDLOCK_ACCESS_FS_MAKE_DIR                 = 0x80\n\tLANDLOCK_ACCESS_FS_MAKE_FIFO                = 0x400\n\tLANDLOCK_ACCESS_FS_MAKE_REG                 = 0x100\n\tLANDLOCK_ACCESS_FS_MAKE_SOCK                = 0x200\n\tLANDLOCK_ACCESS_FS_MAKE_SYM                 = 0x1000\n\tLANDLOCK_ACCESS_FS_READ_DIR                 = 0x8\n\tLANDLOCK_ACCESS_FS_READ_FILE                = 0x4\n\tLANDLOCK_ACCESS_FS_REFER                    = 0x2000\n\tLANDLOCK_ACCESS_FS_REMOVE_DIR               = 0x10\n\tLANDLOCK_ACCESS_FS_REMOVE_FILE              = 0x20\n\tLANDLOCK_ACCESS_FS_TRUNCATE                 = 0x4000\n\tLANDLOCK_ACCESS_FS_WRITE_FILE               = 0x2\n\tLANDLOCK_ACCESS_NET_BIND_TCP                = 0x1\n\tLANDLOCK_ACCESS_NET_CONNECT_TCP             = 0x2\n\tLANDLOCK_CREATE_RULESET_VERSION             = 0x1\n\tLINUX_REBOOT_CMD_CAD_OFF                    = 0x0\n\tLINUX_REBOOT_CMD_CAD_ON                     = 0x89abcdef\n\tLINUX_REBOOT_CMD_HALT                       = 0xcdef0123\n\tLINUX_REBOOT_CMD_KEXEC                      = 0x45584543\n\tLINUX_REBOOT_CMD_POWER_OFF                  = 0x4321fedc\n\tLINUX_REBOOT_CMD_RESTART                    = 0x1234567\n\tLINUX_REBOOT_CMD_RESTART2                   = 0xa1b2c3d4\n\tLINUX_REBOOT_CMD_SW_SUSPEND                 = 0xd000fce2\n\tLINUX_REBOOT_MAGIC1                         = 0xfee1dead\n\tLINUX_REBOOT_MAGIC2                         = 0x28121969\n\tLOCK_EX                                     = 0x2\n\tLOCK_NB                                     = 0x4\n\tLOCK_SH                                     = 0x1\n\tLOCK_UN                                     = 0x8\n\tLOOP_CLR_FD                                 = 0x4c01\n\tLOOP_CONFIGURE                              = 0x4c0a\n\tLOOP_CTL_ADD                                = 0x4c80\n\tLOOP_CTL_GET_FREE                           = 0x4c82\n\tLOOP_CTL_REMOVE                             = 0x4c81\n\tLOOP_GET_STATUS                             = 0x4c03\n\tLOOP_GET_STATUS64                           = 0x4c05\n\tLOOP_SET_BLOCK_SIZE                         = 0x4c09\n\tLOOP_SET_CAPACITY                           = 0x4c07\n\tLOOP_SET_DIRECT_IO                          = 0x4c08\n\tLOOP_SET_FD                                 = 0x4c00\n\tLOOP_SET_STATUS                             = 0x4c02\n\tLOOP_SET_STATUS64                           = 0x4c04\n\tLOOP_SET_STATUS_CLEARABLE_FLAGS             = 0x4\n\tLOOP_SET_STATUS_SETTABLE_FLAGS              = 0xc\n\tLO_KEY_SIZE                                 = 0x20\n\tLO_NAME_SIZE                                = 0x40\n\tLWTUNNEL_IP6_MAX                            = 0x8\n\tLWTUNNEL_IP_MAX                             = 0x8\n\tLWTUNNEL_IP_OPTS_MAX                        = 0x3\n\tLWTUNNEL_IP_OPT_ERSPAN_MAX                  = 0x4\n\tLWTUNNEL_IP_OPT_GENEVE_MAX                  = 0x3\n\tLWTUNNEL_IP_OPT_VXLAN_MAX                   = 0x1\n\tMADV_COLD                                   = 0x14\n\tMADV_COLLAPSE                               = 0x19\n\tMADV_DODUMP                                 = 0x11\n\tMADV_DOFORK                                 = 0xb\n\tMADV_DONTDUMP                               = 0x10\n\tMADV_DONTFORK                               = 0xa\n\tMADV_DONTNEED                               = 0x4\n\tMADV_DONTNEED_LOCKED                        = 0x18\n\tMADV_FREE                                   = 0x8\n\tMADV_HUGEPAGE                               = 0xe\n\tMADV_HWPOISON                               = 0x64\n\tMADV_KEEPONFORK                             = 0x13\n\tMADV_MERGEABLE                              = 0xc\n\tMADV_NOHUGEPAGE                             = 0xf\n\tMADV_NORMAL                                 = 0x0\n\tMADV_PAGEOUT                                = 0x15\n\tMADV_POPULATE_READ                          = 0x16\n\tMADV_POPULATE_WRITE                         = 0x17\n\tMADV_RANDOM                                 = 0x1\n\tMADV_REMOVE                                 = 0x9\n\tMADV_SEQUENTIAL                             = 0x2\n\tMADV_UNMERGEABLE                            = 0xd\n\tMADV_WILLNEED                               = 0x3\n\tMADV_WIPEONFORK                             = 0x12\n\tMAP_FILE                                    = 0x0\n\tMAP_FIXED                                   = 0x10\n\tMAP_FIXED_NOREPLACE                         = 0x100000\n\tMAP_HUGE_16GB                               = 0x88000000\n\tMAP_HUGE_16KB                               = 0x38000000\n\tMAP_HUGE_16MB                               = 0x60000000\n\tMAP_HUGE_1GB                                = 0x78000000\n\tMAP_HUGE_1MB                                = 0x50000000\n\tMAP_HUGE_256MB                              = 0x70000000\n\tMAP_HUGE_2GB                                = 0x7c000000\n\tMAP_HUGE_2MB                                = 0x54000000\n\tMAP_HUGE_32MB                               = 0x64000000\n\tMAP_HUGE_512KB                              = 0x4c000000\n\tMAP_HUGE_512MB                              = 0x74000000\n\tMAP_HUGE_64KB                               = 0x40000000\n\tMAP_HUGE_8MB                                = 0x5c000000\n\tMAP_HUGE_MASK                               = 0x3f\n\tMAP_HUGE_SHIFT                              = 0x1a\n\tMAP_PRIVATE                                 = 0x2\n\tMAP_SHARED                                  = 0x1\n\tMAP_SHARED_VALIDATE                         = 0x3\n\tMAP_TYPE                                    = 0xf\n\tMCAST_BLOCK_SOURCE                          = 0x2b\n\tMCAST_EXCLUDE                               = 0x0\n\tMCAST_INCLUDE                               = 0x1\n\tMCAST_JOIN_GROUP                            = 0x2a\n\tMCAST_JOIN_SOURCE_GROUP                     = 0x2e\n\tMCAST_LEAVE_GROUP                           = 0x2d\n\tMCAST_LEAVE_SOURCE_GROUP                    = 0x2f\n\tMCAST_MSFILTER                              = 0x30\n\tMCAST_UNBLOCK_SOURCE                        = 0x2c\n\tMEMGETREGIONINFO                            = 0xc0104d08\n\tMEMREADOOB64                                = 0xc0184d16\n\tMEMWRITE                                    = 0xc0304d18\n\tMEMWRITEOOB64                               = 0xc0184d15\n\tMFD_ALLOW_SEALING                           = 0x2\n\tMFD_CLOEXEC                                 = 0x1\n\tMFD_EXEC                                    = 0x10\n\tMFD_HUGETLB                                 = 0x4\n\tMFD_HUGE_16GB                               = 0x88000000\n\tMFD_HUGE_16MB                               = 0x60000000\n\tMFD_HUGE_1GB                                = 0x78000000\n\tMFD_HUGE_1MB                                = 0x50000000\n\tMFD_HUGE_256MB                              = 0x70000000\n\tMFD_HUGE_2GB                                = 0x7c000000\n\tMFD_HUGE_2MB                                = 0x54000000\n\tMFD_HUGE_32MB                               = 0x64000000\n\tMFD_HUGE_512KB                              = 0x4c000000\n\tMFD_HUGE_512MB                              = 0x74000000\n\tMFD_HUGE_64KB                               = 0x40000000\n\tMFD_HUGE_8MB                                = 0x5c000000\n\tMFD_HUGE_MASK                               = 0x3f\n\tMFD_HUGE_SHIFT                              = 0x1a\n\tMFD_NOEXEC_SEAL                             = 0x8\n\tMINIX2_SUPER_MAGIC                          = 0x2468\n\tMINIX2_SUPER_MAGIC2                         = 0x2478\n\tMINIX3_SUPER_MAGIC                          = 0x4d5a\n\tMINIX_SUPER_MAGIC                           = 0x137f\n\tMINIX_SUPER_MAGIC2                          = 0x138f\n\tMNT_DETACH                                  = 0x2\n\tMNT_EXPIRE                                  = 0x4\n\tMNT_FORCE                                   = 0x1\n\tMNT_ID_REQ_SIZE_VER0                        = 0x18\n\tMNT_ID_REQ_SIZE_VER1                        = 0x20\n\tMODULE_INIT_COMPRESSED_FILE                 = 0x4\n\tMODULE_INIT_IGNORE_MODVERSIONS              = 0x1\n\tMODULE_INIT_IGNORE_VERMAGIC                 = 0x2\n\tMOUNT_ATTR_IDMAP                            = 0x100000\n\tMOUNT_ATTR_NOATIME                          = 0x10\n\tMOUNT_ATTR_NODEV                            = 0x4\n\tMOUNT_ATTR_NODIRATIME                       = 0x80\n\tMOUNT_ATTR_NOEXEC                           = 0x8\n\tMOUNT_ATTR_NOSUID                           = 0x2\n\tMOUNT_ATTR_NOSYMFOLLOW                      = 0x200000\n\tMOUNT_ATTR_RDONLY                           = 0x1\n\tMOUNT_ATTR_RELATIME                         = 0x0\n\tMOUNT_ATTR_SIZE_VER0                        = 0x20\n\tMOUNT_ATTR_STRICTATIME                      = 0x20\n\tMOUNT_ATTR__ATIME                           = 0x70\n\tMREMAP_DONTUNMAP                            = 0x4\n\tMREMAP_FIXED                                = 0x2\n\tMREMAP_MAYMOVE                              = 0x1\n\tMSDOS_SUPER_MAGIC                           = 0x4d44\n\tMSG_BATCH                                   = 0x40000\n\tMSG_CMSG_CLOEXEC                            = 0x40000000\n\tMSG_CONFIRM                                 = 0x800\n\tMSG_CTRUNC                                  = 0x8\n\tMSG_DONTROUTE                               = 0x4\n\tMSG_DONTWAIT                                = 0x40\n\tMSG_EOR                                     = 0x80\n\tMSG_ERRQUEUE                                = 0x2000\n\tMSG_FASTOPEN                                = 0x20000000\n\tMSG_FIN                                     = 0x200\n\tMSG_MORE                                    = 0x8000\n\tMSG_NOSIGNAL                                = 0x4000\n\tMSG_OOB                                     = 0x1\n\tMSG_PEEK                                    = 0x2\n\tMSG_PROXY                                   = 0x10\n\tMSG_RST                                     = 0x1000\n\tMSG_SYN                                     = 0x400\n\tMSG_TRUNC                                   = 0x20\n\tMSG_TRYHARD                                 = 0x4\n\tMSG_WAITALL                                 = 0x100\n\tMSG_WAITFORONE                              = 0x10000\n\tMSG_ZEROCOPY                                = 0x4000000\n\tMS_ACTIVE                                   = 0x40000000\n\tMS_ASYNC                                    = 0x1\n\tMS_BIND                                     = 0x1000\n\tMS_BORN                                     = 0x20000000\n\tMS_DIRSYNC                                  = 0x80\n\tMS_INVALIDATE                               = 0x2\n\tMS_I_VERSION                                = 0x800000\n\tMS_KERNMOUNT                                = 0x400000\n\tMS_LAZYTIME                                 = 0x2000000\n\tMS_MANDLOCK                                 = 0x40\n\tMS_MGC_MSK                                  = 0xffff0000\n\tMS_MGC_VAL                                  = 0xc0ed0000\n\tMS_MOVE                                     = 0x2000\n\tMS_NOATIME                                  = 0x400\n\tMS_NODEV                                    = 0x4\n\tMS_NODIRATIME                               = 0x800\n\tMS_NOEXEC                                   = 0x8\n\tMS_NOREMOTELOCK                             = 0x8000000\n\tMS_NOSEC                                    = 0x10000000\n\tMS_NOSUID                                   = 0x2\n\tMS_NOSYMFOLLOW                              = 0x100\n\tMS_NOUSER                                   = -0x80000000\n\tMS_POSIXACL                                 = 0x10000\n\tMS_PRIVATE                                  = 0x40000\n\tMS_RDONLY                                   = 0x1\n\tMS_REC                                      = 0x4000\n\tMS_RELATIME                                 = 0x200000\n\tMS_REMOUNT                                  = 0x20\n\tMS_RMT_MASK                                 = 0x2800051\n\tMS_SHARED                                   = 0x100000\n\tMS_SILENT                                   = 0x8000\n\tMS_SLAVE                                    = 0x80000\n\tMS_STRICTATIME                              = 0x1000000\n\tMS_SUBMOUNT                                 = 0x4000000\n\tMS_SYNC                                     = 0x4\n\tMS_SYNCHRONOUS                              = 0x10\n\tMS_UNBINDABLE                               = 0x20000\n\tMS_VERBOSE                                  = 0x8000\n\tMTD_ABSENT                                  = 0x0\n\tMTD_BIT_WRITEABLE                           = 0x800\n\tMTD_CAP_NANDFLASH                           = 0x400\n\tMTD_CAP_NORFLASH                            = 0xc00\n\tMTD_CAP_NVRAM                               = 0x1c00\n\tMTD_CAP_RAM                                 = 0x1c00\n\tMTD_CAP_ROM                                 = 0x0\n\tMTD_DATAFLASH                               = 0x6\n\tMTD_INODE_FS_MAGIC                          = 0x11307854\n\tMTD_MAX_ECCPOS_ENTRIES                      = 0x40\n\tMTD_MAX_OOBFREE_ENTRIES                     = 0x8\n\tMTD_MLCNANDFLASH                            = 0x8\n\tMTD_NANDECC_AUTOPLACE                       = 0x2\n\tMTD_NANDECC_AUTOPL_USR                      = 0x4\n\tMTD_NANDECC_OFF                             = 0x0\n\tMTD_NANDECC_PLACE                           = 0x1\n\tMTD_NANDECC_PLACEONLY                       = 0x3\n\tMTD_NANDFLASH                               = 0x4\n\tMTD_NORFLASH                                = 0x3\n\tMTD_NO_ERASE                                = 0x1000\n\tMTD_OTP_FACTORY                             = 0x1\n\tMTD_OTP_OFF                                 = 0x0\n\tMTD_OTP_USER                                = 0x2\n\tMTD_POWERUP_LOCK                            = 0x2000\n\tMTD_RAM                                     = 0x1\n\tMTD_ROM                                     = 0x2\n\tMTD_SLC_ON_MLC_EMULATION                    = 0x4000\n\tMTD_UBIVOLUME                               = 0x7\n\tMTD_WRITEABLE                               = 0x400\n\tNAME_MAX                                    = 0xff\n\tNCP_SUPER_MAGIC                             = 0x564c\n\tNETLINK_ADD_MEMBERSHIP                      = 0x1\n\tNETLINK_AUDIT                               = 0x9\n\tNETLINK_BROADCAST_ERROR                     = 0x4\n\tNETLINK_CAP_ACK                             = 0xa\n\tNETLINK_CONNECTOR                           = 0xb\n\tNETLINK_CRYPTO                              = 0x15\n\tNETLINK_DNRTMSG                             = 0xe\n\tNETLINK_DROP_MEMBERSHIP                     = 0x2\n\tNETLINK_ECRYPTFS                            = 0x13\n\tNETLINK_EXT_ACK                             = 0xb\n\tNETLINK_FIB_LOOKUP                          = 0xa\n\tNETLINK_FIREWALL                            = 0x3\n\tNETLINK_GENERIC                             = 0x10\n\tNETLINK_GET_STRICT_CHK                      = 0xc\n\tNETLINK_INET_DIAG                           = 0x4\n\tNETLINK_IP6_FW                              = 0xd\n\tNETLINK_ISCSI                               = 0x8\n\tNETLINK_KOBJECT_UEVENT                      = 0xf\n\tNETLINK_LISTEN_ALL_NSID                     = 0x8\n\tNETLINK_LIST_MEMBERSHIPS                    = 0x9\n\tNETLINK_NETFILTER                           = 0xc\n\tNETLINK_NFLOG                               = 0x5\n\tNETLINK_NO_ENOBUFS                          = 0x5\n\tNETLINK_PKTINFO                             = 0x3\n\tNETLINK_RDMA                                = 0x14\n\tNETLINK_ROUTE                               = 0x0\n\tNETLINK_RX_RING                             = 0x6\n\tNETLINK_SCSITRANSPORT                       = 0x12\n\tNETLINK_SELINUX                             = 0x7\n\tNETLINK_SMC                                 = 0x16\n\tNETLINK_SOCK_DIAG                           = 0x4\n\tNETLINK_TX_RING                             = 0x7\n\tNETLINK_UNUSED                              = 0x1\n\tNETLINK_USERSOCK                            = 0x2\n\tNETLINK_XFRM                                = 0x6\n\tNETNSA_MAX                                  = 0x5\n\tNETNSA_NSID_NOT_ASSIGNED                    = -0x1\n\tNFC_ATR_REQ_GB_MAXSIZE                      = 0x30\n\tNFC_ATR_REQ_MAXSIZE                         = 0x40\n\tNFC_ATR_RES_GB_MAXSIZE                      = 0x2f\n\tNFC_ATR_RES_MAXSIZE                         = 0x40\n\tNFC_COMM_ACTIVE                             = 0x0\n\tNFC_COMM_PASSIVE                            = 0x1\n\tNFC_DEVICE_NAME_MAXSIZE                     = 0x8\n\tNFC_DIRECTION_RX                            = 0x0\n\tNFC_DIRECTION_TX                            = 0x1\n\tNFC_FIRMWARE_NAME_MAXSIZE                   = 0x20\n\tNFC_GB_MAXSIZE                              = 0x30\n\tNFC_GENL_MCAST_EVENT_NAME                   = \"events\"\n\tNFC_GENL_NAME                               = \"nfc\"\n\tNFC_GENL_VERSION                            = 0x1\n\tNFC_HEADER_SIZE                             = 0x1\n\tNFC_ISO15693_UID_MAXSIZE                    = 0x8\n\tNFC_LLCP_MAX_SERVICE_NAME                   = 0x3f\n\tNFC_LLCP_MIUX                               = 0x1\n\tNFC_LLCP_REMOTE_LTO                         = 0x3\n\tNFC_LLCP_REMOTE_MIU                         = 0x2\n\tNFC_LLCP_REMOTE_RW                          = 0x4\n\tNFC_LLCP_RW                                 = 0x0\n\tNFC_NFCID1_MAXSIZE                          = 0xa\n\tNFC_NFCID2_MAXSIZE                          = 0x8\n\tNFC_NFCID3_MAXSIZE                          = 0xa\n\tNFC_PROTO_FELICA                            = 0x3\n\tNFC_PROTO_FELICA_MASK                       = 0x8\n\tNFC_PROTO_ISO14443                          = 0x4\n\tNFC_PROTO_ISO14443_B                        = 0x6\n\tNFC_PROTO_ISO14443_B_MASK                   = 0x40\n\tNFC_PROTO_ISO14443_MASK                     = 0x10\n\tNFC_PROTO_ISO15693                          = 0x7\n\tNFC_PROTO_ISO15693_MASK                     = 0x80\n\tNFC_PROTO_JEWEL                             = 0x1\n\tNFC_PROTO_JEWEL_MASK                        = 0x2\n\tNFC_PROTO_MAX                               = 0x8\n\tNFC_PROTO_MIFARE                            = 0x2\n\tNFC_PROTO_MIFARE_MASK                       = 0x4\n\tNFC_PROTO_NFC_DEP                           = 0x5\n\tNFC_PROTO_NFC_DEP_MASK                      = 0x20\n\tNFC_RAW_HEADER_SIZE                         = 0x2\n\tNFC_RF_INITIATOR                            = 0x0\n\tNFC_RF_NONE                                 = 0x2\n\tNFC_RF_TARGET                               = 0x1\n\tNFC_SENSB_RES_MAXSIZE                       = 0xc\n\tNFC_SENSF_RES_MAXSIZE                       = 0x12\n\tNFC_SE_DISABLED                             = 0x0\n\tNFC_SE_EMBEDDED                             = 0x2\n\tNFC_SE_ENABLED                              = 0x1\n\tNFC_SE_UICC                                 = 0x1\n\tNFC_SOCKPROTO_LLCP                          = 0x1\n\tNFC_SOCKPROTO_MAX                           = 0x2\n\tNFC_SOCKPROTO_RAW                           = 0x0\n\tNFNETLINK_V0                                = 0x0\n\tNFNLGRP_ACCT_QUOTA                          = 0x8\n\tNFNLGRP_CONNTRACK_DESTROY                   = 0x3\n\tNFNLGRP_CONNTRACK_EXP_DESTROY               = 0x6\n\tNFNLGRP_CONNTRACK_EXP_NEW                   = 0x4\n\tNFNLGRP_CONNTRACK_EXP_UPDATE                = 0x5\n\tNFNLGRP_CONNTRACK_NEW                       = 0x1\n\tNFNLGRP_CONNTRACK_UPDATE                    = 0x2\n\tNFNLGRP_MAX                                 = 0x9\n\tNFNLGRP_NFTABLES                            = 0x7\n\tNFNLGRP_NFTRACE                             = 0x9\n\tNFNLGRP_NONE                                = 0x0\n\tNFNL_BATCH_MAX                              = 0x1\n\tNFNL_MSG_BATCH_BEGIN                        = 0x10\n\tNFNL_MSG_BATCH_END                          = 0x11\n\tNFNL_NFA_NEST                               = 0x8000\n\tNFNL_SUBSYS_ACCT                            = 0x7\n\tNFNL_SUBSYS_COUNT                           = 0xd\n\tNFNL_SUBSYS_CTHELPER                        = 0x9\n\tNFNL_SUBSYS_CTNETLINK                       = 0x1\n\tNFNL_SUBSYS_CTNETLINK_EXP                   = 0x2\n\tNFNL_SUBSYS_CTNETLINK_TIMEOUT               = 0x8\n\tNFNL_SUBSYS_HOOK                            = 0xc\n\tNFNL_SUBSYS_IPSET                           = 0x6\n\tNFNL_SUBSYS_NFTABLES                        = 0xa\n\tNFNL_SUBSYS_NFT_COMPAT                      = 0xb\n\tNFNL_SUBSYS_NONE                            = 0x0\n\tNFNL_SUBSYS_OSF                             = 0x5\n\tNFNL_SUBSYS_QUEUE                           = 0x3\n\tNFNL_SUBSYS_ULOG                            = 0x4\n\tNFS_SUPER_MAGIC                             = 0x6969\n\tNFT_CHAIN_FLAGS                             = 0x7\n\tNFT_CHAIN_MAXNAMELEN                        = 0x100\n\tNFT_CT_MAX                                  = 0x17\n\tNFT_DATA_RESERVED_MASK                      = 0xffffff00\n\tNFT_DATA_VALUE_MAXLEN                       = 0x40\n\tNFT_EXTHDR_OP_MAX                           = 0x4\n\tNFT_FIB_RESULT_MAX                          = 0x3\n\tNFT_INNER_MASK                              = 0xf\n\tNFT_LOGLEVEL_MAX                            = 0x8\n\tNFT_NAME_MAXLEN                             = 0x100\n\tNFT_NG_MAX                                  = 0x1\n\tNFT_OBJECT_CONNLIMIT                        = 0x5\n\tNFT_OBJECT_COUNTER                          = 0x1\n\tNFT_OBJECT_CT_EXPECT                        = 0x9\n\tNFT_OBJECT_CT_HELPER                        = 0x3\n\tNFT_OBJECT_CT_TIMEOUT                       = 0x7\n\tNFT_OBJECT_LIMIT                            = 0x4\n\tNFT_OBJECT_MAX                              = 0xa\n\tNFT_OBJECT_QUOTA                            = 0x2\n\tNFT_OBJECT_SECMARK                          = 0x8\n\tNFT_OBJECT_SYNPROXY                         = 0xa\n\tNFT_OBJECT_TUNNEL                           = 0x6\n\tNFT_OBJECT_UNSPEC                           = 0x0\n\tNFT_OBJ_MAXNAMELEN                          = 0x100\n\tNFT_OSF_MAXGENRELEN                         = 0x10\n\tNFT_QUEUE_FLAG_BYPASS                       = 0x1\n\tNFT_QUEUE_FLAG_CPU_FANOUT                   = 0x2\n\tNFT_QUEUE_FLAG_MASK                         = 0x3\n\tNFT_REG32_COUNT                             = 0x10\n\tNFT_REG32_SIZE                              = 0x4\n\tNFT_REG_MAX                                 = 0x4\n\tNFT_REG_SIZE                                = 0x10\n\tNFT_REJECT_ICMPX_MAX                        = 0x3\n\tNFT_RT_MAX                                  = 0x4\n\tNFT_SECMARK_CTX_MAXLEN                      = 0x1000\n\tNFT_SET_MAXNAMELEN                          = 0x100\n\tNFT_SOCKET_MAX                              = 0x3\n\tNFT_TABLE_F_MASK                            = 0x7\n\tNFT_TABLE_MAXNAMELEN                        = 0x100\n\tNFT_TRACETYPE_MAX                           = 0x3\n\tNFT_TUNNEL_F_MASK                           = 0x7\n\tNFT_TUNNEL_MAX                              = 0x1\n\tNFT_TUNNEL_MODE_MAX                         = 0x2\n\tNFT_USERDATA_MAXLEN                         = 0x100\n\tNFT_XFRM_KEY_MAX                            = 0x6\n\tNF_NAT_RANGE_MAP_IPS                        = 0x1\n\tNF_NAT_RANGE_MASK                           = 0x7f\n\tNF_NAT_RANGE_NETMAP                         = 0x40\n\tNF_NAT_RANGE_PERSISTENT                     = 0x8\n\tNF_NAT_RANGE_PROTO_OFFSET                   = 0x20\n\tNF_NAT_RANGE_PROTO_RANDOM                   = 0x4\n\tNF_NAT_RANGE_PROTO_RANDOM_ALL               = 0x14\n\tNF_NAT_RANGE_PROTO_RANDOM_FULLY             = 0x10\n\tNF_NAT_RANGE_PROTO_SPECIFIED                = 0x2\n\tNILFS_SUPER_MAGIC                           = 0x3434\n\tNL0                                         = 0x0\n\tNL1                                         = 0x100\n\tNLA_ALIGNTO                                 = 0x4\n\tNLA_F_NESTED                                = 0x8000\n\tNLA_F_NET_BYTEORDER                         = 0x4000\n\tNLA_HDRLEN                                  = 0x4\n\tNLMSG_ALIGNTO                               = 0x4\n\tNLMSG_DONE                                  = 0x3\n\tNLMSG_ERROR                                 = 0x2\n\tNLMSG_HDRLEN                                = 0x10\n\tNLMSG_MIN_TYPE                              = 0x10\n\tNLMSG_NOOP                                  = 0x1\n\tNLMSG_OVERRUN                               = 0x4\n\tNLM_F_ACK                                   = 0x4\n\tNLM_F_ACK_TLVS                              = 0x200\n\tNLM_F_APPEND                                = 0x800\n\tNLM_F_ATOMIC                                = 0x400\n\tNLM_F_BULK                                  = 0x200\n\tNLM_F_CAPPED                                = 0x100\n\tNLM_F_CREATE                                = 0x400\n\tNLM_F_DUMP                                  = 0x300\n\tNLM_F_DUMP_FILTERED                         = 0x20\n\tNLM_F_DUMP_INTR                             = 0x10\n\tNLM_F_ECHO                                  = 0x8\n\tNLM_F_EXCL                                  = 0x200\n\tNLM_F_MATCH                                 = 0x200\n\tNLM_F_MULTI                                 = 0x2\n\tNLM_F_NONREC                                = 0x100\n\tNLM_F_REPLACE                               = 0x100\n\tNLM_F_REQUEST                               = 0x1\n\tNLM_F_ROOT                                  = 0x100\n\tNSFS_MAGIC                                  = 0x6e736673\n\tOCFS2_SUPER_MAGIC                           = 0x7461636f\n\tOCRNL                                       = 0x8\n\tOFDEL                                       = 0x80\n\tOFILL                                       = 0x40\n\tONLRET                                      = 0x20\n\tONOCR                                       = 0x10\n\tOPENPROM_SUPER_MAGIC                        = 0x9fa1\n\tOPOST                                       = 0x1\n\tOVERLAYFS_SUPER_MAGIC                       = 0x794c7630\n\tO_ACCMODE                                   = 0x3\n\tO_RDONLY                                    = 0x0\n\tO_RDWR                                      = 0x2\n\tO_WRONLY                                    = 0x1\n\tPACKET_ADD_MEMBERSHIP                       = 0x1\n\tPACKET_AUXDATA                              = 0x8\n\tPACKET_BROADCAST                            = 0x1\n\tPACKET_COPY_THRESH                          = 0x7\n\tPACKET_DROP_MEMBERSHIP                      = 0x2\n\tPACKET_FANOUT                               = 0x12\n\tPACKET_FANOUT_CBPF                          = 0x6\n\tPACKET_FANOUT_CPU                           = 0x2\n\tPACKET_FANOUT_DATA                          = 0x16\n\tPACKET_FANOUT_EBPF                          = 0x7\n\tPACKET_FANOUT_FLAG_DEFRAG                   = 0x8000\n\tPACKET_FANOUT_FLAG_IGNORE_OUTGOING          = 0x4000\n\tPACKET_FANOUT_FLAG_ROLLOVER                 = 0x1000\n\tPACKET_FANOUT_FLAG_UNIQUEID                 = 0x2000\n\tPACKET_FANOUT_HASH                          = 0x0\n\tPACKET_FANOUT_LB                            = 0x1\n\tPACKET_FANOUT_QM                            = 0x5\n\tPACKET_FANOUT_RND                           = 0x4\n\tPACKET_FANOUT_ROLLOVER                      = 0x3\n\tPACKET_FASTROUTE                            = 0x6\n\tPACKET_HDRLEN                               = 0xb\n\tPACKET_HOST                                 = 0x0\n\tPACKET_IGNORE_OUTGOING                      = 0x17\n\tPACKET_KERNEL                               = 0x7\n\tPACKET_LOOPBACK                             = 0x5\n\tPACKET_LOSS                                 = 0xe\n\tPACKET_MR_ALLMULTI                          = 0x2\n\tPACKET_MR_MULTICAST                         = 0x0\n\tPACKET_MR_PROMISC                           = 0x1\n\tPACKET_MR_UNICAST                           = 0x3\n\tPACKET_MULTICAST                            = 0x2\n\tPACKET_ORIGDEV                              = 0x9\n\tPACKET_OTHERHOST                            = 0x3\n\tPACKET_OUTGOING                             = 0x4\n\tPACKET_QDISC_BYPASS                         = 0x14\n\tPACKET_RECV_OUTPUT                          = 0x3\n\tPACKET_RESERVE                              = 0xc\n\tPACKET_ROLLOVER_STATS                       = 0x15\n\tPACKET_RX_RING                              = 0x5\n\tPACKET_STATISTICS                           = 0x6\n\tPACKET_TIMESTAMP                            = 0x11\n\tPACKET_TX_HAS_OFF                           = 0x13\n\tPACKET_TX_RING                              = 0xd\n\tPACKET_TX_TIMESTAMP                         = 0x10\n\tPACKET_USER                                 = 0x6\n\tPACKET_VERSION                              = 0xa\n\tPACKET_VNET_HDR                             = 0xf\n\tPACKET_VNET_HDR_SZ                          = 0x18\n\tPARITY_CRC16_PR0                            = 0x2\n\tPARITY_CRC16_PR0_CCITT                      = 0x4\n\tPARITY_CRC16_PR1                            = 0x3\n\tPARITY_CRC16_PR1_CCITT                      = 0x5\n\tPARITY_CRC32_PR0_CCITT                      = 0x6\n\tPARITY_CRC32_PR1_CCITT                      = 0x7\n\tPARITY_DEFAULT                              = 0x0\n\tPARITY_NONE                                 = 0x1\n\tPARMRK                                      = 0x8\n\tPERF_ATTR_SIZE_VER0                         = 0x40\n\tPERF_ATTR_SIZE_VER1                         = 0x48\n\tPERF_ATTR_SIZE_VER2                         = 0x50\n\tPERF_ATTR_SIZE_VER3                         = 0x60\n\tPERF_ATTR_SIZE_VER4                         = 0x68\n\tPERF_ATTR_SIZE_VER5                         = 0x70\n\tPERF_ATTR_SIZE_VER6                         = 0x78\n\tPERF_ATTR_SIZE_VER7                         = 0x80\n\tPERF_ATTR_SIZE_VER8                         = 0x88\n\tPERF_AUX_FLAG_COLLISION                     = 0x8\n\tPERF_AUX_FLAG_CORESIGHT_FORMAT_CORESIGHT    = 0x0\n\tPERF_AUX_FLAG_CORESIGHT_FORMAT_RAW          = 0x100\n\tPERF_AUX_FLAG_OVERWRITE                     = 0x2\n\tPERF_AUX_FLAG_PARTIAL                       = 0x4\n\tPERF_AUX_FLAG_PMU_FORMAT_TYPE_MASK          = 0xff00\n\tPERF_AUX_FLAG_TRUNCATED                     = 0x1\n\tPERF_BRANCH_ENTRY_INFO_BITS_MAX             = 0x21\n\tPERF_BR_ARM64_DEBUG_DATA                    = 0x7\n\tPERF_BR_ARM64_DEBUG_EXIT                    = 0x5\n\tPERF_BR_ARM64_DEBUG_HALT                    = 0x4\n\tPERF_BR_ARM64_DEBUG_INST                    = 0x6\n\tPERF_BR_ARM64_FIQ                           = 0x3\n\tPERF_FLAG_FD_CLOEXEC                        = 0x8\n\tPERF_FLAG_FD_NO_GROUP                       = 0x1\n\tPERF_FLAG_FD_OUTPUT                         = 0x2\n\tPERF_FLAG_PID_CGROUP                        = 0x4\n\tPERF_HW_EVENT_MASK                          = 0xffffffff\n\tPERF_MAX_CONTEXTS_PER_STACK                 = 0x8\n\tPERF_MAX_STACK_DEPTH                        = 0x7f\n\tPERF_MEM_BLK_ADDR                           = 0x4\n\tPERF_MEM_BLK_DATA                           = 0x2\n\tPERF_MEM_BLK_NA                             = 0x1\n\tPERF_MEM_BLK_SHIFT                          = 0x28\n\tPERF_MEM_HOPS_0                             = 0x1\n\tPERF_MEM_HOPS_1                             = 0x2\n\tPERF_MEM_HOPS_2                             = 0x3\n\tPERF_MEM_HOPS_3                             = 0x4\n\tPERF_MEM_HOPS_SHIFT                         = 0x2b\n\tPERF_MEM_LOCK_LOCKED                        = 0x2\n\tPERF_MEM_LOCK_NA                            = 0x1\n\tPERF_MEM_LOCK_SHIFT                         = 0x18\n\tPERF_MEM_LVLNUM_ANY_CACHE                   = 0xb\n\tPERF_MEM_LVLNUM_CXL                         = 0x9\n\tPERF_MEM_LVLNUM_IO                          = 0xa\n\tPERF_MEM_LVLNUM_L1                          = 0x1\n\tPERF_MEM_LVLNUM_L2                          = 0x2\n\tPERF_MEM_LVLNUM_L2_MHB                      = 0x5\n\tPERF_MEM_LVLNUM_L3                          = 0x3\n\tPERF_MEM_LVLNUM_L4                          = 0x4\n\tPERF_MEM_LVLNUM_LFB                         = 0xc\n\tPERF_MEM_LVLNUM_MSC                         = 0x6\n\tPERF_MEM_LVLNUM_NA                          = 0xf\n\tPERF_MEM_LVLNUM_PMEM                        = 0xe\n\tPERF_MEM_LVLNUM_RAM                         = 0xd\n\tPERF_MEM_LVLNUM_SHIFT                       = 0x21\n\tPERF_MEM_LVLNUM_UNC                         = 0x8\n\tPERF_MEM_LVL_HIT                            = 0x2\n\tPERF_MEM_LVL_IO                             = 0x1000\n\tPERF_MEM_LVL_L1                             = 0x8\n\tPERF_MEM_LVL_L2                             = 0x20\n\tPERF_MEM_LVL_L3                             = 0x40\n\tPERF_MEM_LVL_LFB                            = 0x10\n\tPERF_MEM_LVL_LOC_RAM                        = 0x80\n\tPERF_MEM_LVL_MISS                           = 0x4\n\tPERF_MEM_LVL_NA                             = 0x1\n\tPERF_MEM_LVL_REM_CCE1                       = 0x400\n\tPERF_MEM_LVL_REM_CCE2                       = 0x800\n\tPERF_MEM_LVL_REM_RAM1                       = 0x100\n\tPERF_MEM_LVL_REM_RAM2                       = 0x200\n\tPERF_MEM_LVL_SHIFT                          = 0x5\n\tPERF_MEM_LVL_UNC                            = 0x2000\n\tPERF_MEM_OP_EXEC                            = 0x10\n\tPERF_MEM_OP_LOAD                            = 0x2\n\tPERF_MEM_OP_NA                              = 0x1\n\tPERF_MEM_OP_PFETCH                          = 0x8\n\tPERF_MEM_OP_SHIFT                           = 0x0\n\tPERF_MEM_OP_STORE                           = 0x4\n\tPERF_MEM_REMOTE_REMOTE                      = 0x1\n\tPERF_MEM_REMOTE_SHIFT                       = 0x25\n\tPERF_MEM_SNOOPX_FWD                         = 0x1\n\tPERF_MEM_SNOOPX_PEER                        = 0x2\n\tPERF_MEM_SNOOPX_SHIFT                       = 0x26\n\tPERF_MEM_SNOOP_HIT                          = 0x4\n\tPERF_MEM_SNOOP_HITM                         = 0x10\n\tPERF_MEM_SNOOP_MISS                         = 0x8\n\tPERF_MEM_SNOOP_NA                           = 0x1\n\tPERF_MEM_SNOOP_NONE                         = 0x2\n\tPERF_MEM_SNOOP_SHIFT                        = 0x13\n\tPERF_MEM_TLB_HIT                            = 0x2\n\tPERF_MEM_TLB_L1                             = 0x8\n\tPERF_MEM_TLB_L2                             = 0x10\n\tPERF_MEM_TLB_MISS                           = 0x4\n\tPERF_MEM_TLB_NA                             = 0x1\n\tPERF_MEM_TLB_OS                             = 0x40\n\tPERF_MEM_TLB_SHIFT                          = 0x1a\n\tPERF_MEM_TLB_WK                             = 0x20\n\tPERF_PMU_TYPE_SHIFT                         = 0x20\n\tPERF_RECORD_KSYMBOL_FLAGS_UNREGISTER        = 0x1\n\tPERF_RECORD_MISC_COMM_EXEC                  = 0x2000\n\tPERF_RECORD_MISC_CPUMODE_MASK               = 0x7\n\tPERF_RECORD_MISC_CPUMODE_UNKNOWN            = 0x0\n\tPERF_RECORD_MISC_EXACT_IP                   = 0x4000\n\tPERF_RECORD_MISC_EXT_RESERVED               = 0x8000\n\tPERF_RECORD_MISC_FORK_EXEC                  = 0x2000\n\tPERF_RECORD_MISC_GUEST_KERNEL               = 0x4\n\tPERF_RECORD_MISC_GUEST_USER                 = 0x5\n\tPERF_RECORD_MISC_HYPERVISOR                 = 0x3\n\tPERF_RECORD_MISC_KERNEL                     = 0x1\n\tPERF_RECORD_MISC_MMAP_BUILD_ID              = 0x4000\n\tPERF_RECORD_MISC_MMAP_DATA                  = 0x2000\n\tPERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT     = 0x1000\n\tPERF_RECORD_MISC_SWITCH_OUT                 = 0x2000\n\tPERF_RECORD_MISC_SWITCH_OUT_PREEMPT         = 0x4000\n\tPERF_RECORD_MISC_USER                       = 0x2\n\tPERF_SAMPLE_BRANCH_PLM_ALL                  = 0x7\n\tPERF_SAMPLE_WEIGHT_TYPE                     = 0x1004000\n\tPID_FS_MAGIC                                = 0x50494446\n\tPIPEFS_MAGIC                                = 0x50495045\n\tPPPIOCGNPMODE                               = 0xc008744c\n\tPPPIOCNEWUNIT                               = 0xc004743e\n\tPRIO_PGRP                                   = 0x1\n\tPRIO_PROCESS                                = 0x0\n\tPRIO_USER                                   = 0x2\n\tPROCFS_IOCTL_MAGIC                          = 'f'\n\tPROC_SUPER_MAGIC                            = 0x9fa0\n\tPROT_EXEC                                   = 0x4\n\tPROT_GROWSDOWN                              = 0x1000000\n\tPROT_GROWSUP                                = 0x2000000\n\tPROT_NONE                                   = 0x0\n\tPROT_READ                                   = 0x1\n\tPROT_WRITE                                  = 0x2\n\tPR_CAPBSET_DROP                             = 0x18\n\tPR_CAPBSET_READ                             = 0x17\n\tPR_CAP_AMBIENT                              = 0x2f\n\tPR_CAP_AMBIENT_CLEAR_ALL                    = 0x4\n\tPR_CAP_AMBIENT_IS_SET                       = 0x1\n\tPR_CAP_AMBIENT_LOWER                        = 0x3\n\tPR_CAP_AMBIENT_RAISE                        = 0x2\n\tPR_ENDIAN_BIG                               = 0x0\n\tPR_ENDIAN_LITTLE                            = 0x1\n\tPR_ENDIAN_PPC_LITTLE                        = 0x2\n\tPR_FPEMU_NOPRINT                            = 0x1\n\tPR_FPEMU_SIGFPE                             = 0x2\n\tPR_FP_EXC_ASYNC                             = 0x2\n\tPR_FP_EXC_DISABLED                          = 0x0\n\tPR_FP_EXC_DIV                               = 0x10000\n\tPR_FP_EXC_INV                               = 0x100000\n\tPR_FP_EXC_NONRECOV                          = 0x1\n\tPR_FP_EXC_OVF                               = 0x20000\n\tPR_FP_EXC_PRECISE                           = 0x3\n\tPR_FP_EXC_RES                               = 0x80000\n\tPR_FP_EXC_SW_ENABLE                         = 0x80\n\tPR_FP_EXC_UND                               = 0x40000\n\tPR_FP_MODE_FR                               = 0x1\n\tPR_FP_MODE_FRE                              = 0x2\n\tPR_GET_AUXV                                 = 0x41555856\n\tPR_GET_CHILD_SUBREAPER                      = 0x25\n\tPR_GET_DUMPABLE                             = 0x3\n\tPR_GET_ENDIAN                               = 0x13\n\tPR_GET_FPEMU                                = 0x9\n\tPR_GET_FPEXC                                = 0xb\n\tPR_GET_FP_MODE                              = 0x2e\n\tPR_GET_IO_FLUSHER                           = 0x3a\n\tPR_GET_KEEPCAPS                             = 0x7\n\tPR_GET_MDWE                                 = 0x42\n\tPR_GET_MEMORY_MERGE                         = 0x44\n\tPR_GET_NAME                                 = 0x10\n\tPR_GET_NO_NEW_PRIVS                         = 0x27\n\tPR_GET_PDEATHSIG                            = 0x2\n\tPR_GET_SECCOMP                              = 0x15\n\tPR_GET_SECUREBITS                           = 0x1b\n\tPR_GET_SPECULATION_CTRL                     = 0x34\n\tPR_GET_TAGGED_ADDR_CTRL                     = 0x38\n\tPR_GET_THP_DISABLE                          = 0x2a\n\tPR_GET_TID_ADDRESS                          = 0x28\n\tPR_GET_TIMERSLACK                           = 0x1e\n\tPR_GET_TIMING                               = 0xd\n\tPR_GET_TSC                                  = 0x19\n\tPR_GET_UNALIGN                              = 0x5\n\tPR_MCE_KILL                                 = 0x21\n\tPR_MCE_KILL_CLEAR                           = 0x0\n\tPR_MCE_KILL_DEFAULT                         = 0x2\n\tPR_MCE_KILL_EARLY                           = 0x1\n\tPR_MCE_KILL_GET                             = 0x22\n\tPR_MCE_KILL_LATE                            = 0x0\n\tPR_MCE_KILL_SET                             = 0x1\n\tPR_MDWE_NO_INHERIT                          = 0x2\n\tPR_MDWE_REFUSE_EXEC_GAIN                    = 0x1\n\tPR_MPX_DISABLE_MANAGEMENT                   = 0x2c\n\tPR_MPX_ENABLE_MANAGEMENT                    = 0x2b\n\tPR_MTE_TAG_MASK                             = 0x7fff8\n\tPR_MTE_TAG_SHIFT                            = 0x3\n\tPR_MTE_TCF_ASYNC                            = 0x4\n\tPR_MTE_TCF_MASK                             = 0x6\n\tPR_MTE_TCF_NONE                             = 0x0\n\tPR_MTE_TCF_SHIFT                            = 0x1\n\tPR_MTE_TCF_SYNC                             = 0x2\n\tPR_PAC_APDAKEY                              = 0x4\n\tPR_PAC_APDBKEY                              = 0x8\n\tPR_PAC_APGAKEY                              = 0x10\n\tPR_PAC_APIAKEY                              = 0x1\n\tPR_PAC_APIBKEY                              = 0x2\n\tPR_PAC_GET_ENABLED_KEYS                     = 0x3d\n\tPR_PAC_RESET_KEYS                           = 0x36\n\tPR_PAC_SET_ENABLED_KEYS                     = 0x3c\n\tPR_PPC_DEXCR_CTRL_CLEAR                     = 0x4\n\tPR_PPC_DEXCR_CTRL_CLEAR_ONEXEC              = 0x10\n\tPR_PPC_DEXCR_CTRL_EDITABLE                  = 0x1\n\tPR_PPC_DEXCR_CTRL_MASK                      = 0x1f\n\tPR_PPC_DEXCR_CTRL_SET                       = 0x2\n\tPR_PPC_DEXCR_CTRL_SET_ONEXEC                = 0x8\n\tPR_PPC_DEXCR_IBRTPD                         = 0x1\n\tPR_PPC_DEXCR_NPHIE                          = 0x3\n\tPR_PPC_DEXCR_SBHE                           = 0x0\n\tPR_PPC_DEXCR_SRAPD                          = 0x2\n\tPR_PPC_GET_DEXCR                            = 0x48\n\tPR_PPC_SET_DEXCR                            = 0x49\n\tPR_RISCV_CTX_SW_FENCEI_OFF                  = 0x1\n\tPR_RISCV_CTX_SW_FENCEI_ON                   = 0x0\n\tPR_RISCV_SCOPE_PER_PROCESS                  = 0x0\n\tPR_RISCV_SCOPE_PER_THREAD                   = 0x1\n\tPR_RISCV_SET_ICACHE_FLUSH_CTX               = 0x47\n\tPR_RISCV_V_GET_CONTROL                      = 0x46\n\tPR_RISCV_V_SET_CONTROL                      = 0x45\n\tPR_RISCV_V_VSTATE_CTRL_CUR_MASK             = 0x3\n\tPR_RISCV_V_VSTATE_CTRL_DEFAULT              = 0x0\n\tPR_RISCV_V_VSTATE_CTRL_INHERIT              = 0x10\n\tPR_RISCV_V_VSTATE_CTRL_MASK                 = 0x1f\n\tPR_RISCV_V_VSTATE_CTRL_NEXT_MASK            = 0xc\n\tPR_RISCV_V_VSTATE_CTRL_OFF                  = 0x1\n\tPR_RISCV_V_VSTATE_CTRL_ON                   = 0x2\n\tPR_SCHED_CORE                               = 0x3e\n\tPR_SCHED_CORE_CREATE                        = 0x1\n\tPR_SCHED_CORE_GET                           = 0x0\n\tPR_SCHED_CORE_MAX                           = 0x4\n\tPR_SCHED_CORE_SCOPE_PROCESS_GROUP           = 0x2\n\tPR_SCHED_CORE_SCOPE_THREAD                  = 0x0\n\tPR_SCHED_CORE_SCOPE_THREAD_GROUP            = 0x1\n\tPR_SCHED_CORE_SHARE_FROM                    = 0x3\n\tPR_SCHED_CORE_SHARE_TO                      = 0x2\n\tPR_SET_CHILD_SUBREAPER                      = 0x24\n\tPR_SET_DUMPABLE                             = 0x4\n\tPR_SET_ENDIAN                               = 0x14\n\tPR_SET_FPEMU                                = 0xa\n\tPR_SET_FPEXC                                = 0xc\n\tPR_SET_FP_MODE                              = 0x2d\n\tPR_SET_IO_FLUSHER                           = 0x39\n\tPR_SET_KEEPCAPS                             = 0x8\n\tPR_SET_MDWE                                 = 0x41\n\tPR_SET_MEMORY_MERGE                         = 0x43\n\tPR_SET_MM                                   = 0x23\n\tPR_SET_MM_ARG_END                           = 0x9\n\tPR_SET_MM_ARG_START                         = 0x8\n\tPR_SET_MM_AUXV                              = 0xc\n\tPR_SET_MM_BRK                               = 0x7\n\tPR_SET_MM_END_CODE                          = 0x2\n\tPR_SET_MM_END_DATA                          = 0x4\n\tPR_SET_MM_ENV_END                           = 0xb\n\tPR_SET_MM_ENV_START                         = 0xa\n\tPR_SET_MM_EXE_FILE                          = 0xd\n\tPR_SET_MM_MAP                               = 0xe\n\tPR_SET_MM_MAP_SIZE                          = 0xf\n\tPR_SET_MM_START_BRK                         = 0x6\n\tPR_SET_MM_START_CODE                        = 0x1\n\tPR_SET_MM_START_DATA                        = 0x3\n\tPR_SET_MM_START_STACK                       = 0x5\n\tPR_SET_NAME                                 = 0xf\n\tPR_SET_NO_NEW_PRIVS                         = 0x26\n\tPR_SET_PDEATHSIG                            = 0x1\n\tPR_SET_PTRACER                              = 0x59616d61\n\tPR_SET_SECCOMP                              = 0x16\n\tPR_SET_SECUREBITS                           = 0x1c\n\tPR_SET_SPECULATION_CTRL                     = 0x35\n\tPR_SET_SYSCALL_USER_DISPATCH                = 0x3b\n\tPR_SET_TAGGED_ADDR_CTRL                     = 0x37\n\tPR_SET_THP_DISABLE                          = 0x29\n\tPR_SET_TIMERSLACK                           = 0x1d\n\tPR_SET_TIMING                               = 0xe\n\tPR_SET_TSC                                  = 0x1a\n\tPR_SET_UNALIGN                              = 0x6\n\tPR_SET_VMA                                  = 0x53564d41\n\tPR_SET_VMA_ANON_NAME                        = 0x0\n\tPR_SME_GET_VL                               = 0x40\n\tPR_SME_SET_VL                               = 0x3f\n\tPR_SME_SET_VL_ONEXEC                        = 0x40000\n\tPR_SME_VL_INHERIT                           = 0x20000\n\tPR_SME_VL_LEN_MASK                          = 0xffff\n\tPR_SPEC_DISABLE                             = 0x4\n\tPR_SPEC_DISABLE_NOEXEC                      = 0x10\n\tPR_SPEC_ENABLE                              = 0x2\n\tPR_SPEC_FORCE_DISABLE                       = 0x8\n\tPR_SPEC_INDIRECT_BRANCH                     = 0x1\n\tPR_SPEC_L1D_FLUSH                           = 0x2\n\tPR_SPEC_NOT_AFFECTED                        = 0x0\n\tPR_SPEC_PRCTL                               = 0x1\n\tPR_SPEC_STORE_BYPASS                        = 0x0\n\tPR_SVE_GET_VL                               = 0x33\n\tPR_SVE_SET_VL                               = 0x32\n\tPR_SVE_SET_VL_ONEXEC                        = 0x40000\n\tPR_SVE_VL_INHERIT                           = 0x20000\n\tPR_SVE_VL_LEN_MASK                          = 0xffff\n\tPR_SYS_DISPATCH_OFF                         = 0x0\n\tPR_SYS_DISPATCH_ON                          = 0x1\n\tPR_TAGGED_ADDR_ENABLE                       = 0x1\n\tPR_TASK_PERF_EVENTS_DISABLE                 = 0x1f\n\tPR_TASK_PERF_EVENTS_ENABLE                  = 0x20\n\tPR_TIMING_STATISTICAL                       = 0x0\n\tPR_TIMING_TIMESTAMP                         = 0x1\n\tPR_TSC_ENABLE                               = 0x1\n\tPR_TSC_SIGSEGV                              = 0x2\n\tPR_UNALIGN_NOPRINT                          = 0x1\n\tPR_UNALIGN_SIGBUS                           = 0x2\n\tPSTOREFS_MAGIC                              = 0x6165676c\n\tPTRACE_ATTACH                               = 0x10\n\tPTRACE_CONT                                 = 0x7\n\tPTRACE_DETACH                               = 0x11\n\tPTRACE_EVENTMSG_SYSCALL_ENTRY               = 0x1\n\tPTRACE_EVENTMSG_SYSCALL_EXIT                = 0x2\n\tPTRACE_EVENT_CLONE                          = 0x3\n\tPTRACE_EVENT_EXEC                           = 0x4\n\tPTRACE_EVENT_EXIT                           = 0x6\n\tPTRACE_EVENT_FORK                           = 0x1\n\tPTRACE_EVENT_SECCOMP                        = 0x7\n\tPTRACE_EVENT_STOP                           = 0x80\n\tPTRACE_EVENT_VFORK                          = 0x2\n\tPTRACE_EVENT_VFORK_DONE                     = 0x5\n\tPTRACE_GETEVENTMSG                          = 0x4201\n\tPTRACE_GETREGS                              = 0xc\n\tPTRACE_GETREGSET                            = 0x4204\n\tPTRACE_GETSIGINFO                           = 0x4202\n\tPTRACE_GETSIGMASK                           = 0x420a\n\tPTRACE_GET_RSEQ_CONFIGURATION               = 0x420f\n\tPTRACE_GET_SYSCALL_INFO                     = 0x420e\n\tPTRACE_GET_SYSCALL_USER_DISPATCH_CONFIG     = 0x4211\n\tPTRACE_INTERRUPT                            = 0x4207\n\tPTRACE_KILL                                 = 0x8\n\tPTRACE_LISTEN                               = 0x4208\n\tPTRACE_O_EXITKILL                           = 0x100000\n\tPTRACE_O_MASK                               = 0x3000ff\n\tPTRACE_O_SUSPEND_SECCOMP                    = 0x200000\n\tPTRACE_O_TRACECLONE                         = 0x8\n\tPTRACE_O_TRACEEXEC                          = 0x10\n\tPTRACE_O_TRACEEXIT                          = 0x40\n\tPTRACE_O_TRACEFORK                          = 0x2\n\tPTRACE_O_TRACESECCOMP                       = 0x80\n\tPTRACE_O_TRACESYSGOOD                       = 0x1\n\tPTRACE_O_TRACEVFORK                         = 0x4\n\tPTRACE_O_TRACEVFORKDONE                     = 0x20\n\tPTRACE_PEEKDATA                             = 0x2\n\tPTRACE_PEEKSIGINFO                          = 0x4209\n\tPTRACE_PEEKSIGINFO_SHARED                   = 0x1\n\tPTRACE_PEEKTEXT                             = 0x1\n\tPTRACE_PEEKUSR                              = 0x3\n\tPTRACE_POKEDATA                             = 0x5\n\tPTRACE_POKETEXT                             = 0x4\n\tPTRACE_POKEUSR                              = 0x6\n\tPTRACE_SECCOMP_GET_FILTER                   = 0x420c\n\tPTRACE_SECCOMP_GET_METADATA                 = 0x420d\n\tPTRACE_SEIZE                                = 0x4206\n\tPTRACE_SETOPTIONS                           = 0x4200\n\tPTRACE_SETREGS                              = 0xd\n\tPTRACE_SETREGSET                            = 0x4205\n\tPTRACE_SETSIGINFO                           = 0x4203\n\tPTRACE_SETSIGMASK                           = 0x420b\n\tPTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG     = 0x4210\n\tPTRACE_SINGLESTEP                           = 0x9\n\tPTRACE_SYSCALL                              = 0x18\n\tPTRACE_SYSCALL_INFO_ENTRY                   = 0x1\n\tPTRACE_SYSCALL_INFO_EXIT                    = 0x2\n\tPTRACE_SYSCALL_INFO_NONE                    = 0x0\n\tPTRACE_SYSCALL_INFO_SECCOMP                 = 0x3\n\tPTRACE_TRACEME                              = 0x0\n\tP_ALL                                       = 0x0\n\tP_PGID                                      = 0x2\n\tP_PID                                       = 0x1\n\tP_PIDFD                                     = 0x3\n\tQNX4_SUPER_MAGIC                            = 0x2f\n\tQNX6_SUPER_MAGIC                            = 0x68191122\n\tRAMFS_MAGIC                                 = 0x858458f6\n\tRAW_PAYLOAD_DIGITAL                         = 0x3\n\tRAW_PAYLOAD_HCI                             = 0x2\n\tRAW_PAYLOAD_LLCP                            = 0x0\n\tRAW_PAYLOAD_NCI                             = 0x1\n\tRAW_PAYLOAD_PROPRIETARY                     = 0x4\n\tRDTGROUP_SUPER_MAGIC                        = 0x7655821\n\tREISERFS_SUPER_MAGIC                        = 0x52654973\n\tRENAME_EXCHANGE                             = 0x2\n\tRENAME_NOREPLACE                            = 0x1\n\tRENAME_WHITEOUT                             = 0x4\n\tRLIMIT_CORE                                 = 0x4\n\tRLIMIT_CPU                                  = 0x0\n\tRLIMIT_DATA                                 = 0x2\n\tRLIMIT_FSIZE                                = 0x1\n\tRLIMIT_LOCKS                                = 0xa\n\tRLIMIT_MSGQUEUE                             = 0xc\n\tRLIMIT_NICE                                 = 0xd\n\tRLIMIT_RTPRIO                               = 0xe\n\tRLIMIT_RTTIME                               = 0xf\n\tRLIMIT_SIGPENDING                           = 0xb\n\tRLIMIT_STACK                                = 0x3\n\tRLIM_INFINITY                               = 0xffffffffffffffff\n\tRTAX_ADVMSS                                 = 0x8\n\tRTAX_CC_ALGO                                = 0x10\n\tRTAX_CWND                                   = 0x7\n\tRTAX_FASTOPEN_NO_COOKIE                     = 0x11\n\tRTAX_FEATURES                               = 0xc\n\tRTAX_FEATURE_ALLFRAG                        = 0x8\n\tRTAX_FEATURE_ECN                            = 0x1\n\tRTAX_FEATURE_MASK                           = 0x1f\n\tRTAX_FEATURE_SACK                           = 0x2\n\tRTAX_FEATURE_TCP_USEC_TS                    = 0x10\n\tRTAX_FEATURE_TIMESTAMP                      = 0x4\n\tRTAX_HOPLIMIT                               = 0xa\n\tRTAX_INITCWND                               = 0xb\n\tRTAX_INITRWND                               = 0xe\n\tRTAX_LOCK                                   = 0x1\n\tRTAX_MAX                                    = 0x11\n\tRTAX_MTU                                    = 0x2\n\tRTAX_QUICKACK                               = 0xf\n\tRTAX_REORDERING                             = 0x9\n\tRTAX_RTO_MIN                                = 0xd\n\tRTAX_RTT                                    = 0x4\n\tRTAX_RTTVAR                                 = 0x5\n\tRTAX_SSTHRESH                               = 0x6\n\tRTAX_UNSPEC                                 = 0x0\n\tRTAX_WINDOW                                 = 0x3\n\tRTA_ALIGNTO                                 = 0x4\n\tRTA_MAX                                     = 0x1e\n\tRTCF_DIRECTSRC                              = 0x4000000\n\tRTCF_DOREDIRECT                             = 0x1000000\n\tRTCF_LOG                                    = 0x2000000\n\tRTCF_MASQ                                   = 0x400000\n\tRTCF_NAT                                    = 0x800000\n\tRTCF_VALVE                                  = 0x200000\n\tRTC_AF                                      = 0x20\n\tRTC_BSM_DIRECT                              = 0x1\n\tRTC_BSM_DISABLED                            = 0x0\n\tRTC_BSM_LEVEL                               = 0x2\n\tRTC_BSM_STANDBY                             = 0x3\n\tRTC_FEATURE_ALARM                           = 0x0\n\tRTC_FEATURE_ALARM_RES_2S                    = 0x3\n\tRTC_FEATURE_ALARM_RES_MINUTE                = 0x1\n\tRTC_FEATURE_ALARM_WAKEUP_ONLY               = 0x7\n\tRTC_FEATURE_BACKUP_SWITCH_MODE              = 0x6\n\tRTC_FEATURE_CNT                             = 0x8\n\tRTC_FEATURE_CORRECTION                      = 0x5\n\tRTC_FEATURE_NEED_WEEK_DAY                   = 0x2\n\tRTC_FEATURE_UPDATE_INTERRUPT                = 0x4\n\tRTC_IRQF                                    = 0x80\n\tRTC_MAX_FREQ                                = 0x2000\n\tRTC_PARAM_BACKUP_SWITCH_MODE                = 0x2\n\tRTC_PARAM_CORRECTION                        = 0x1\n\tRTC_PARAM_FEATURES                          = 0x0\n\tRTC_PF                                      = 0x40\n\tRTC_UF                                      = 0x10\n\tRTF_ADDRCLASSMASK                           = 0xf8000000\n\tRTF_ADDRCONF                                = 0x40000\n\tRTF_ALLONLINK                               = 0x20000\n\tRTF_BROADCAST                               = 0x10000000\n\tRTF_CACHE                                   = 0x1000000\n\tRTF_DEFAULT                                 = 0x10000\n\tRTF_DYNAMIC                                 = 0x10\n\tRTF_FLOW                                    = 0x2000000\n\tRTF_GATEWAY                                 = 0x2\n\tRTF_HOST                                    = 0x4\n\tRTF_INTERFACE                               = 0x40000000\n\tRTF_IRTT                                    = 0x100\n\tRTF_LINKRT                                  = 0x100000\n\tRTF_LOCAL                                   = 0x80000000\n\tRTF_MODIFIED                                = 0x20\n\tRTF_MSS                                     = 0x40\n\tRTF_MTU                                     = 0x40\n\tRTF_MULTICAST                               = 0x20000000\n\tRTF_NAT                                     = 0x8000000\n\tRTF_NOFORWARD                               = 0x1000\n\tRTF_NONEXTHOP                               = 0x200000\n\tRTF_NOPMTUDISC                              = 0x4000\n\tRTF_POLICY                                  = 0x4000000\n\tRTF_REINSTATE                               = 0x8\n\tRTF_REJECT                                  = 0x200\n\tRTF_STATIC                                  = 0x400\n\tRTF_THROW                                   = 0x2000\n\tRTF_UP                                      = 0x1\n\tRTF_WINDOW                                  = 0x80\n\tRTF_XRESOLVE                                = 0x800\n\tRTMGRP_DECnet_IFADDR                        = 0x1000\n\tRTMGRP_DECnet_ROUTE                         = 0x4000\n\tRTMGRP_IPV4_IFADDR                          = 0x10\n\tRTMGRP_IPV4_MROUTE                          = 0x20\n\tRTMGRP_IPV4_ROUTE                           = 0x40\n\tRTMGRP_IPV4_RULE                            = 0x80\n\tRTMGRP_IPV6_IFADDR                          = 0x100\n\tRTMGRP_IPV6_IFINFO                          = 0x800\n\tRTMGRP_IPV6_MROUTE                          = 0x200\n\tRTMGRP_IPV6_PREFIX                          = 0x20000\n\tRTMGRP_IPV6_ROUTE                           = 0x400\n\tRTMGRP_LINK                                 = 0x1\n\tRTMGRP_NEIGH                                = 0x4\n\tRTMGRP_NOTIFY                               = 0x2\n\tRTMGRP_TC                                   = 0x8\n\tRTM_BASE                                    = 0x10\n\tRTM_DELACTION                               = 0x31\n\tRTM_DELADDR                                 = 0x15\n\tRTM_DELADDRLABEL                            = 0x49\n\tRTM_DELCHAIN                                = 0x65\n\tRTM_DELLINK                                 = 0x11\n\tRTM_DELLINKPROP                             = 0x6d\n\tRTM_DELMDB                                  = 0x55\n\tRTM_DELNEIGH                                = 0x1d\n\tRTM_DELNETCONF                              = 0x51\n\tRTM_DELNEXTHOP                              = 0x69\n\tRTM_DELNEXTHOPBUCKET                        = 0x75\n\tRTM_DELNSID                                 = 0x59\n\tRTM_DELQDISC                                = 0x25\n\tRTM_DELROUTE                                = 0x19\n\tRTM_DELRULE                                 = 0x21\n\tRTM_DELTCLASS                               = 0x29\n\tRTM_DELTFILTER                              = 0x2d\n\tRTM_DELTUNNEL                               = 0x79\n\tRTM_DELVLAN                                 = 0x71\n\tRTM_F_CLONED                                = 0x200\n\tRTM_F_EQUALIZE                              = 0x400\n\tRTM_F_FIB_MATCH                             = 0x2000\n\tRTM_F_LOOKUP_TABLE                          = 0x1000\n\tRTM_F_NOTIFY                                = 0x100\n\tRTM_F_OFFLOAD                               = 0x4000\n\tRTM_F_OFFLOAD_FAILED                        = 0x20000000\n\tRTM_F_PREFIX                                = 0x800\n\tRTM_F_TRAP                                  = 0x8000\n\tRTM_GETACTION                               = 0x32\n\tRTM_GETADDR                                 = 0x16\n\tRTM_GETADDRLABEL                            = 0x4a\n\tRTM_GETANYCAST                              = 0x3e\n\tRTM_GETCHAIN                                = 0x66\n\tRTM_GETDCB                                  = 0x4e\n\tRTM_GETLINK                                 = 0x12\n\tRTM_GETLINKPROP                             = 0x6e\n\tRTM_GETMDB                                  = 0x56\n\tRTM_GETMULTICAST                            = 0x3a\n\tRTM_GETNEIGH                                = 0x1e\n\tRTM_GETNEIGHTBL                             = 0x42\n\tRTM_GETNETCONF                              = 0x52\n\tRTM_GETNEXTHOP                              = 0x6a\n\tRTM_GETNEXTHOPBUCKET                        = 0x76\n\tRTM_GETNSID                                 = 0x5a\n\tRTM_GETQDISC                                = 0x26\n\tRTM_GETROUTE                                = 0x1a\n\tRTM_GETRULE                                 = 0x22\n\tRTM_GETSTATS                                = 0x5e\n\tRTM_GETTCLASS                               = 0x2a\n\tRTM_GETTFILTER                              = 0x2e\n\tRTM_GETTUNNEL                               = 0x7a\n\tRTM_GETVLAN                                 = 0x72\n\tRTM_MAX                                     = 0x7b\n\tRTM_NEWACTION                               = 0x30\n\tRTM_NEWADDR                                 = 0x14\n\tRTM_NEWADDRLABEL                            = 0x48\n\tRTM_NEWCACHEREPORT                          = 0x60\n\tRTM_NEWCHAIN                                = 0x64\n\tRTM_NEWLINK                                 = 0x10\n\tRTM_NEWLINKPROP                             = 0x6c\n\tRTM_NEWMDB                                  = 0x54\n\tRTM_NEWNDUSEROPT                            = 0x44\n\tRTM_NEWNEIGH                                = 0x1c\n\tRTM_NEWNEIGHTBL                             = 0x40\n\tRTM_NEWNETCONF                              = 0x50\n\tRTM_NEWNEXTHOP                              = 0x68\n\tRTM_NEWNEXTHOPBUCKET                        = 0x74\n\tRTM_NEWNSID                                 = 0x58\n\tRTM_NEWNVLAN                                = 0x70\n\tRTM_NEWPREFIX                               = 0x34\n\tRTM_NEWQDISC                                = 0x24\n\tRTM_NEWROUTE                                = 0x18\n\tRTM_NEWRULE                                 = 0x20\n\tRTM_NEWSTATS                                = 0x5c\n\tRTM_NEWTCLASS                               = 0x28\n\tRTM_NEWTFILTER                              = 0x2c\n\tRTM_NEWTUNNEL                               = 0x78\n\tRTM_NR_FAMILIES                             = 0x1b\n\tRTM_NR_MSGTYPES                             = 0x6c\n\tRTM_SETDCB                                  = 0x4f\n\tRTM_SETLINK                                 = 0x13\n\tRTM_SETNEIGHTBL                             = 0x43\n\tRTM_SETSTATS                                = 0x5f\n\tRTNH_ALIGNTO                                = 0x4\n\tRTNH_COMPARE_MASK                           = 0x59\n\tRTNH_F_DEAD                                 = 0x1\n\tRTNH_F_LINKDOWN                             = 0x10\n\tRTNH_F_OFFLOAD                              = 0x8\n\tRTNH_F_ONLINK                               = 0x4\n\tRTNH_F_PERVASIVE                            = 0x2\n\tRTNH_F_TRAP                                 = 0x40\n\tRTNH_F_UNRESOLVED                           = 0x20\n\tRTN_MAX                                     = 0xb\n\tRTPROT_BABEL                                = 0x2a\n\tRTPROT_BGP                                  = 0xba\n\tRTPROT_BIRD                                 = 0xc\n\tRTPROT_BOOT                                 = 0x3\n\tRTPROT_DHCP                                 = 0x10\n\tRTPROT_DNROUTED                             = 0xd\n\tRTPROT_EIGRP                                = 0xc0\n\tRTPROT_GATED                                = 0x8\n\tRTPROT_ISIS                                 = 0xbb\n\tRTPROT_KEEPALIVED                           = 0x12\n\tRTPROT_KERNEL                               = 0x2\n\tRTPROT_MROUTED                              = 0x11\n\tRTPROT_MRT                                  = 0xa\n\tRTPROT_NTK                                  = 0xf\n\tRTPROT_OPENR                                = 0x63\n\tRTPROT_OSPF                                 = 0xbc\n\tRTPROT_RA                                   = 0x9\n\tRTPROT_REDIRECT                             = 0x1\n\tRTPROT_RIP                                  = 0xbd\n\tRTPROT_STATIC                               = 0x4\n\tRTPROT_UNSPEC                               = 0x0\n\tRTPROT_XORP                                 = 0xe\n\tRTPROT_ZEBRA                                = 0xb\n\tRT_CLASS_DEFAULT                            = 0xfd\n\tRT_CLASS_LOCAL                              = 0xff\n\tRT_CLASS_MAIN                               = 0xfe\n\tRT_CLASS_MAX                                = 0xff\n\tRT_CLASS_UNSPEC                             = 0x0\n\tRUSAGE_CHILDREN                             = -0x1\n\tRUSAGE_SELF                                 = 0x0\n\tRUSAGE_THREAD                               = 0x1\n\tRWF_APPEND                                  = 0x10\n\tRWF_ATOMIC                                  = 0x40\n\tRWF_DSYNC                                   = 0x2\n\tRWF_HIPRI                                   = 0x1\n\tRWF_NOAPPEND                                = 0x20\n\tRWF_NOWAIT                                  = 0x8\n\tRWF_SUPPORTED                               = 0x7f\n\tRWF_SYNC                                    = 0x4\n\tRWF_WRITE_LIFE_NOT_SET                      = 0x0\n\tSCHED_BATCH                                 = 0x3\n\tSCHED_DEADLINE                              = 0x6\n\tSCHED_FIFO                                  = 0x1\n\tSCHED_FLAG_ALL                              = 0x7f\n\tSCHED_FLAG_DL_OVERRUN                       = 0x4\n\tSCHED_FLAG_KEEP_ALL                         = 0x18\n\tSCHED_FLAG_KEEP_PARAMS                      = 0x10\n\tSCHED_FLAG_KEEP_POLICY                      = 0x8\n\tSCHED_FLAG_RECLAIM                          = 0x2\n\tSCHED_FLAG_RESET_ON_FORK                    = 0x1\n\tSCHED_FLAG_UTIL_CLAMP                       = 0x60\n\tSCHED_FLAG_UTIL_CLAMP_MAX                   = 0x40\n\tSCHED_FLAG_UTIL_CLAMP_MIN                   = 0x20\n\tSCHED_IDLE                                  = 0x5\n\tSCHED_NORMAL                                = 0x0\n\tSCHED_RESET_ON_FORK                         = 0x40000000\n\tSCHED_RR                                    = 0x2\n\tSCM_CREDENTIALS                             = 0x2\n\tSCM_PIDFD                                   = 0x4\n\tSCM_RIGHTS                                  = 0x1\n\tSCM_SECURITY                                = 0x3\n\tSCM_TIMESTAMP                               = 0x1d\n\tSC_LOG_FLUSH                                = 0x100000\n\tSECCOMP_ADDFD_FLAG_SEND                     = 0x2\n\tSECCOMP_ADDFD_FLAG_SETFD                    = 0x1\n\tSECCOMP_FILTER_FLAG_LOG                     = 0x2\n\tSECCOMP_FILTER_FLAG_NEW_LISTENER            = 0x8\n\tSECCOMP_FILTER_FLAG_SPEC_ALLOW              = 0x4\n\tSECCOMP_FILTER_FLAG_TSYNC                   = 0x1\n\tSECCOMP_FILTER_FLAG_TSYNC_ESRCH             = 0x10\n\tSECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV      = 0x20\n\tSECCOMP_GET_ACTION_AVAIL                    = 0x2\n\tSECCOMP_GET_NOTIF_SIZES                     = 0x3\n\tSECCOMP_IOCTL_NOTIF_RECV                    = 0xc0502100\n\tSECCOMP_IOCTL_NOTIF_SEND                    = 0xc0182101\n\tSECCOMP_IOC_MAGIC                           = '!'\n\tSECCOMP_MODE_DISABLED                       = 0x0\n\tSECCOMP_MODE_FILTER                         = 0x2\n\tSECCOMP_MODE_STRICT                         = 0x1\n\tSECCOMP_RET_ACTION                          = 0x7fff0000\n\tSECCOMP_RET_ACTION_FULL                     = 0xffff0000\n\tSECCOMP_RET_ALLOW                           = 0x7fff0000\n\tSECCOMP_RET_DATA                            = 0xffff\n\tSECCOMP_RET_ERRNO                           = 0x50000\n\tSECCOMP_RET_KILL                            = 0x0\n\tSECCOMP_RET_KILL_PROCESS                    = 0x80000000\n\tSECCOMP_RET_KILL_THREAD                     = 0x0\n\tSECCOMP_RET_LOG                             = 0x7ffc0000\n\tSECCOMP_RET_TRACE                           = 0x7ff00000\n\tSECCOMP_RET_TRAP                            = 0x30000\n\tSECCOMP_RET_USER_NOTIF                      = 0x7fc00000\n\tSECCOMP_SET_MODE_FILTER                     = 0x1\n\tSECCOMP_SET_MODE_STRICT                     = 0x0\n\tSECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP          = 0x1\n\tSECCOMP_USER_NOTIF_FLAG_CONTINUE            = 0x1\n\tSECRETMEM_MAGIC                             = 0x5345434d\n\tSECURITYFS_MAGIC                            = 0x73636673\n\tSEEK_CUR                                    = 0x1\n\tSEEK_DATA                                   = 0x3\n\tSEEK_END                                    = 0x2\n\tSEEK_HOLE                                   = 0x4\n\tSEEK_MAX                                    = 0x4\n\tSEEK_SET                                    = 0x0\n\tSELINUX_MAGIC                               = 0xf97cff8c\n\tSHUT_RD                                     = 0x0\n\tSHUT_RDWR                                   = 0x2\n\tSHUT_WR                                     = 0x1\n\tSIOCADDDLCI                                 = 0x8980\n\tSIOCADDMULTI                                = 0x8931\n\tSIOCADDRT                                   = 0x890b\n\tSIOCBONDCHANGEACTIVE                        = 0x8995\n\tSIOCBONDENSLAVE                             = 0x8990\n\tSIOCBONDINFOQUERY                           = 0x8994\n\tSIOCBONDRELEASE                             = 0x8991\n\tSIOCBONDSETHWADDR                           = 0x8992\n\tSIOCBONDSLAVEINFOQUERY                      = 0x8993\n\tSIOCBRADDBR                                 = 0x89a0\n\tSIOCBRADDIF                                 = 0x89a2\n\tSIOCBRDELBR                                 = 0x89a1\n\tSIOCBRDELIF                                 = 0x89a3\n\tSIOCDARP                                    = 0x8953\n\tSIOCDELDLCI                                 = 0x8981\n\tSIOCDELMULTI                                = 0x8932\n\tSIOCDELRT                                   = 0x890c\n\tSIOCDEVPRIVATE                              = 0x89f0\n\tSIOCDIFADDR                                 = 0x8936\n\tSIOCDRARP                                   = 0x8960\n\tSIOCETHTOOL                                 = 0x8946\n\tSIOCGARP                                    = 0x8954\n\tSIOCGETLINKNAME                             = 0x89e0\n\tSIOCGETNODEID                               = 0x89e1\n\tSIOCGHWTSTAMP                               = 0x89b1\n\tSIOCGIFADDR                                 = 0x8915\n\tSIOCGIFBR                                   = 0x8940\n\tSIOCGIFBRDADDR                              = 0x8919\n\tSIOCGIFCONF                                 = 0x8912\n\tSIOCGIFCOUNT                                = 0x8938\n\tSIOCGIFDSTADDR                              = 0x8917\n\tSIOCGIFENCAP                                = 0x8925\n\tSIOCGIFFLAGS                                = 0x8913\n\tSIOCGIFHWADDR                               = 0x8927\n\tSIOCGIFINDEX                                = 0x8933\n\tSIOCGIFMAP                                  = 0x8970\n\tSIOCGIFMEM                                  = 0x891f\n\tSIOCGIFMETRIC                               = 0x891d\n\tSIOCGIFMTU                                  = 0x8921\n\tSIOCGIFNAME                                 = 0x8910\n\tSIOCGIFNETMASK                              = 0x891b\n\tSIOCGIFPFLAGS                               = 0x8935\n\tSIOCGIFSLAVE                                = 0x8929\n\tSIOCGIFTXQLEN                               = 0x8942\n\tSIOCGIFVLAN                                 = 0x8982\n\tSIOCGMIIPHY                                 = 0x8947\n\tSIOCGMIIREG                                 = 0x8948\n\tSIOCGPPPCSTATS                              = 0x89f2\n\tSIOCGPPPSTATS                               = 0x89f0\n\tSIOCGPPPVER                                 = 0x89f1\n\tSIOCGRARP                                   = 0x8961\n\tSIOCGSKNS                                   = 0x894c\n\tSIOCGSTAMP                                  = 0x8906\n\tSIOCGSTAMPNS                                = 0x8907\n\tSIOCGSTAMPNS_OLD                            = 0x8907\n\tSIOCGSTAMP_OLD                              = 0x8906\n\tSIOCKCMATTACH                               = 0x89e0\n\tSIOCKCMCLONE                                = 0x89e2\n\tSIOCKCMUNATTACH                             = 0x89e1\n\tSIOCOUTQNSD                                 = 0x894b\n\tSIOCPROTOPRIVATE                            = 0x89e0\n\tSIOCRTMSG                                   = 0x890d\n\tSIOCSARP                                    = 0x8955\n\tSIOCSHWTSTAMP                               = 0x89b0\n\tSIOCSIFADDR                                 = 0x8916\n\tSIOCSIFBR                                   = 0x8941\n\tSIOCSIFBRDADDR                              = 0x891a\n\tSIOCSIFDSTADDR                              = 0x8918\n\tSIOCSIFENCAP                                = 0x8926\n\tSIOCSIFFLAGS                                = 0x8914\n\tSIOCSIFHWADDR                               = 0x8924\n\tSIOCSIFHWBROADCAST                          = 0x8937\n\tSIOCSIFLINK                                 = 0x8911\n\tSIOCSIFMAP                                  = 0x8971\n\tSIOCSIFMEM                                  = 0x8920\n\tSIOCSIFMETRIC                               = 0x891e\n\tSIOCSIFMTU                                  = 0x8922\n\tSIOCSIFNAME                                 = 0x8923\n\tSIOCSIFNETMASK                              = 0x891c\n\tSIOCSIFPFLAGS                               = 0x8934\n\tSIOCSIFSLAVE                                = 0x8930\n\tSIOCSIFTXQLEN                               = 0x8943\n\tSIOCSIFVLAN                                 = 0x8983\n\tSIOCSMIIREG                                 = 0x8949\n\tSIOCSRARP                                   = 0x8962\n\tSIOCWANDEV                                  = 0x894a\n\tSK_DIAG_BPF_STORAGE_MAX                     = 0x3\n\tSK_DIAG_BPF_STORAGE_REQ_MAX                 = 0x1\n\tSMACK_MAGIC                                 = 0x43415d53\n\tSMART_AUTOSAVE                              = 0xd2\n\tSMART_AUTO_OFFLINE                          = 0xdb\n\tSMART_DISABLE                               = 0xd9\n\tSMART_ENABLE                                = 0xd8\n\tSMART_HCYL_PASS                             = 0xc2\n\tSMART_IMMEDIATE_OFFLINE                     = 0xd4\n\tSMART_LCYL_PASS                             = 0x4f\n\tSMART_READ_LOG_SECTOR                       = 0xd5\n\tSMART_READ_THRESHOLDS                       = 0xd1\n\tSMART_READ_VALUES                           = 0xd0\n\tSMART_SAVE                                  = 0xd3\n\tSMART_STATUS                                = 0xda\n\tSMART_WRITE_LOG_SECTOR                      = 0xd6\n\tSMART_WRITE_THRESHOLDS                      = 0xd7\n\tSMB2_SUPER_MAGIC                            = 0xfe534d42\n\tSMB_SUPER_MAGIC                             = 0x517b\n\tSOCKFS_MAGIC                                = 0x534f434b\n\tSOCK_BUF_LOCK_MASK                          = 0x3\n\tSOCK_DCCP                                   = 0x6\n\tSOCK_DESTROY                                = 0x15\n\tSOCK_DIAG_BY_FAMILY                         = 0x14\n\tSOCK_IOC_TYPE                               = 0x89\n\tSOCK_PACKET                                 = 0xa\n\tSOCK_RAW                                    = 0x3\n\tSOCK_RCVBUF_LOCK                            = 0x2\n\tSOCK_RDM                                    = 0x4\n\tSOCK_SEQPACKET                              = 0x5\n\tSOCK_SNDBUF_LOCK                            = 0x1\n\tSOCK_TXREHASH_DEFAULT                       = 0xff\n\tSOCK_TXREHASH_DISABLED                      = 0x0\n\tSOCK_TXREHASH_ENABLED                       = 0x1\n\tSOL_AAL                                     = 0x109\n\tSOL_ALG                                     = 0x117\n\tSOL_ATM                                     = 0x108\n\tSOL_CAIF                                    = 0x116\n\tSOL_CAN_BASE                                = 0x64\n\tSOL_CAN_RAW                                 = 0x65\n\tSOL_DCCP                                    = 0x10d\n\tSOL_DECNET                                  = 0x105\n\tSOL_ICMPV6                                  = 0x3a\n\tSOL_IP                                      = 0x0\n\tSOL_IPV6                                    = 0x29\n\tSOL_IRDA                                    = 0x10a\n\tSOL_IUCV                                    = 0x115\n\tSOL_KCM                                     = 0x119\n\tSOL_LLC                                     = 0x10c\n\tSOL_MCTP                                    = 0x11d\n\tSOL_MPTCP                                   = 0x11c\n\tSOL_NETBEUI                                 = 0x10b\n\tSOL_NETLINK                                 = 0x10e\n\tSOL_NFC                                     = 0x118\n\tSOL_PACKET                                  = 0x107\n\tSOL_PNPIPE                                  = 0x113\n\tSOL_PPPOL2TP                                = 0x111\n\tSOL_RAW                                     = 0xff\n\tSOL_RDS                                     = 0x114\n\tSOL_RXRPC                                   = 0x110\n\tSOL_SMC                                     = 0x11e\n\tSOL_TCP                                     = 0x6\n\tSOL_TIPC                                    = 0x10f\n\tSOL_TLS                                     = 0x11a\n\tSOL_UDP                                     = 0x11\n\tSOL_VSOCK                                   = 0x11f\n\tSOL_X25                                     = 0x106\n\tSOL_XDP                                     = 0x11b\n\tSOMAXCONN                                   = 0x1000\n\tSO_ATTACH_FILTER                            = 0x1a\n\tSO_DEBUG                                    = 0x1\n\tSO_DETACH_BPF                               = 0x1b\n\tSO_DETACH_FILTER                            = 0x1b\n\tSO_EE_CODE_TXTIME_INVALID_PARAM             = 0x1\n\tSO_EE_CODE_TXTIME_MISSED                    = 0x2\n\tSO_EE_CODE_ZEROCOPY_COPIED                  = 0x1\n\tSO_EE_ORIGIN_ICMP                           = 0x2\n\tSO_EE_ORIGIN_ICMP6                          = 0x3\n\tSO_EE_ORIGIN_LOCAL                          = 0x1\n\tSO_EE_ORIGIN_NONE                           = 0x0\n\tSO_EE_ORIGIN_TIMESTAMPING                   = 0x4\n\tSO_EE_ORIGIN_TXSTATUS                       = 0x4\n\tSO_EE_ORIGIN_TXTIME                         = 0x6\n\tSO_EE_ORIGIN_ZEROCOPY                       = 0x5\n\tSO_EE_RFC4884_FLAG_INVALID                  = 0x1\n\tSO_GET_FILTER                               = 0x1a\n\tSO_NO_CHECK                                 = 0xb\n\tSO_PEERNAME                                 = 0x1c\n\tSO_PRIORITY                                 = 0xc\n\tSO_TIMESTAMP                                = 0x1d\n\tSO_TIMESTAMP_OLD                            = 0x1d\n\tSO_VM_SOCKETS_BUFFER_MAX_SIZE               = 0x2\n\tSO_VM_SOCKETS_BUFFER_MIN_SIZE               = 0x1\n\tSO_VM_SOCKETS_BUFFER_SIZE                   = 0x0\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT               = 0x6\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT_NEW           = 0x8\n\tSO_VM_SOCKETS_CONNECT_TIMEOUT_OLD           = 0x6\n\tSO_VM_SOCKETS_NONBLOCK_TXRX                 = 0x7\n\tSO_VM_SOCKETS_PEER_HOST_VM_ID               = 0x3\n\tSO_VM_SOCKETS_TRUSTED                       = 0x5\n\tSPLICE_F_GIFT                               = 0x8\n\tSPLICE_F_MORE                               = 0x4\n\tSPLICE_F_MOVE                               = 0x1\n\tSPLICE_F_NONBLOCK                           = 0x2\n\tSQUASHFS_MAGIC                              = 0x73717368\n\tSTACK_END_MAGIC                             = 0x57ac6e9d\n\tSTATX_ALL                                   = 0xfff\n\tSTATX_ATIME                                 = 0x20\n\tSTATX_ATTR_APPEND                           = 0x20\n\tSTATX_ATTR_AUTOMOUNT                        = 0x1000\n\tSTATX_ATTR_COMPRESSED                       = 0x4\n\tSTATX_ATTR_DAX                              = 0x200000\n\tSTATX_ATTR_ENCRYPTED                        = 0x800\n\tSTATX_ATTR_IMMUTABLE                        = 0x10\n\tSTATX_ATTR_MOUNT_ROOT                       = 0x2000\n\tSTATX_ATTR_NODUMP                           = 0x40\n\tSTATX_ATTR_VERITY                           = 0x100000\n\tSTATX_ATTR_WRITE_ATOMIC                     = 0x400000\n\tSTATX_BASIC_STATS                           = 0x7ff\n\tSTATX_BLOCKS                                = 0x400\n\tSTATX_BTIME                                 = 0x800\n\tSTATX_CTIME                                 = 0x80\n\tSTATX_DIOALIGN                              = 0x2000\n\tSTATX_GID                                   = 0x10\n\tSTATX_INO                                   = 0x100\n\tSTATX_MNT_ID                                = 0x1000\n\tSTATX_MNT_ID_UNIQUE                         = 0x4000\n\tSTATX_MODE                                  = 0x2\n\tSTATX_MTIME                                 = 0x40\n\tSTATX_NLINK                                 = 0x4\n\tSTATX_SIZE                                  = 0x200\n\tSTATX_SUBVOL                                = 0x8000\n\tSTATX_TYPE                                  = 0x1\n\tSTATX_UID                                   = 0x8\n\tSTATX_WRITE_ATOMIC                          = 0x10000\n\tSTATX__RESERVED                             = 0x80000000\n\tSYNC_FILE_RANGE_WAIT_AFTER                  = 0x4\n\tSYNC_FILE_RANGE_WAIT_BEFORE                 = 0x1\n\tSYNC_FILE_RANGE_WRITE                       = 0x2\n\tSYNC_FILE_RANGE_WRITE_AND_WAIT              = 0x7\n\tSYSFS_MAGIC                                 = 0x62656572\n\tS_BLKSIZE                                   = 0x200\n\tS_IEXEC                                     = 0x40\n\tS_IFBLK                                     = 0x6000\n\tS_IFCHR                                     = 0x2000\n\tS_IFDIR                                     = 0x4000\n\tS_IFIFO                                     = 0x1000\n\tS_IFLNK                                     = 0xa000\n\tS_IFMT                                      = 0xf000\n\tS_IFREG                                     = 0x8000\n\tS_IFSOCK                                    = 0xc000\n\tS_IREAD                                     = 0x100\n\tS_IRGRP                                     = 0x20\n\tS_IROTH                                     = 0x4\n\tS_IRUSR                                     = 0x100\n\tS_IRWXG                                     = 0x38\n\tS_IRWXO                                     = 0x7\n\tS_IRWXU                                     = 0x1c0\n\tS_ISGID                                     = 0x400\n\tS_ISUID                                     = 0x800\n\tS_ISVTX                                     = 0x200\n\tS_IWGRP                                     = 0x10\n\tS_IWOTH                                     = 0x2\n\tS_IWRITE                                    = 0x80\n\tS_IWUSR                                     = 0x80\n\tS_IXGRP                                     = 0x8\n\tS_IXOTH                                     = 0x1\n\tS_IXUSR                                     = 0x40\n\tTAB0                                        = 0x0\n\tTASKSTATS_CMD_ATTR_MAX                      = 0x4\n\tTASKSTATS_CMD_MAX                           = 0x2\n\tTASKSTATS_GENL_NAME                         = \"TASKSTATS\"\n\tTASKSTATS_GENL_VERSION                      = 0x1\n\tTASKSTATS_TYPE_MAX                          = 0x6\n\tTASKSTATS_VERSION                           = 0xe\n\tTCIFLUSH                                    = 0x0\n\tTCIOFF                                      = 0x2\n\tTCIOFLUSH                                   = 0x2\n\tTCION                                       = 0x3\n\tTCOFLUSH                                    = 0x1\n\tTCOOFF                                      = 0x0\n\tTCOON                                       = 0x1\n\tTCPOPT_EOL                                  = 0x0\n\tTCPOPT_MAXSEG                               = 0x2\n\tTCPOPT_NOP                                  = 0x1\n\tTCPOPT_SACK                                 = 0x5\n\tTCPOPT_SACK_PERMITTED                       = 0x4\n\tTCPOPT_TIMESTAMP                            = 0x8\n\tTCPOPT_TSTAMP_HDR                           = 0x101080a\n\tTCPOPT_WINDOW                               = 0x3\n\tTCP_CC_INFO                                 = 0x1a\n\tTCP_CM_INQ                                  = 0x24\n\tTCP_CONGESTION                              = 0xd\n\tTCP_COOKIE_IN_ALWAYS                        = 0x1\n\tTCP_COOKIE_MAX                              = 0x10\n\tTCP_COOKIE_MIN                              = 0x8\n\tTCP_COOKIE_OUT_NEVER                        = 0x2\n\tTCP_COOKIE_PAIR_SIZE                        = 0x20\n\tTCP_COOKIE_TRANSACTIONS                     = 0xf\n\tTCP_CORK                                    = 0x3\n\tTCP_DEFER_ACCEPT                            = 0x9\n\tTCP_FASTOPEN                                = 0x17\n\tTCP_FASTOPEN_CONNECT                        = 0x1e\n\tTCP_FASTOPEN_KEY                            = 0x21\n\tTCP_FASTOPEN_NO_COOKIE                      = 0x22\n\tTCP_INFO                                    = 0xb\n\tTCP_INQ                                     = 0x24\n\tTCP_KEEPCNT                                 = 0x6\n\tTCP_KEEPIDLE                                = 0x4\n\tTCP_KEEPINTVL                               = 0x5\n\tTCP_LINGER2                                 = 0x8\n\tTCP_MAXSEG                                  = 0x2\n\tTCP_MAXWIN                                  = 0xffff\n\tTCP_MAX_WINSHIFT                            = 0xe\n\tTCP_MD5SIG                                  = 0xe\n\tTCP_MD5SIG_EXT                              = 0x20\n\tTCP_MD5SIG_FLAG_IFINDEX                     = 0x2\n\tTCP_MD5SIG_FLAG_PREFIX                      = 0x1\n\tTCP_MD5SIG_MAXKEYLEN                        = 0x50\n\tTCP_MSS                                     = 0x200\n\tTCP_MSS_DEFAULT                             = 0x218\n\tTCP_MSS_DESIRED                             = 0x4c4\n\tTCP_NODELAY                                 = 0x1\n\tTCP_NOTSENT_LOWAT                           = 0x19\n\tTCP_QUEUE_SEQ                               = 0x15\n\tTCP_QUICKACK                                = 0xc\n\tTCP_REPAIR                                  = 0x13\n\tTCP_REPAIR_OFF                              = 0x0\n\tTCP_REPAIR_OFF_NO_WP                        = -0x1\n\tTCP_REPAIR_ON                               = 0x1\n\tTCP_REPAIR_OPTIONS                          = 0x16\n\tTCP_REPAIR_QUEUE                            = 0x14\n\tTCP_REPAIR_WINDOW                           = 0x1d\n\tTCP_SAVED_SYN                               = 0x1c\n\tTCP_SAVE_SYN                                = 0x1b\n\tTCP_SYNCNT                                  = 0x7\n\tTCP_S_DATA_IN                               = 0x4\n\tTCP_S_DATA_OUT                              = 0x8\n\tTCP_THIN_DUPACK                             = 0x11\n\tTCP_THIN_LINEAR_TIMEOUTS                    = 0x10\n\tTCP_TIMESTAMP                               = 0x18\n\tTCP_TX_DELAY                                = 0x25\n\tTCP_ULP                                     = 0x1f\n\tTCP_USER_TIMEOUT                            = 0x12\n\tTCP_V4_FLOW                                 = 0x1\n\tTCP_V6_FLOW                                 = 0x5\n\tTCP_WINDOW_CLAMP                            = 0xa\n\tTCP_ZEROCOPY_RECEIVE                        = 0x23\n\tTFD_TIMER_ABSTIME                           = 0x1\n\tTFD_TIMER_CANCEL_ON_SET                     = 0x2\n\tTIMER_ABSTIME                               = 0x1\n\tTIOCM_DTR                                   = 0x2\n\tTIOCM_LE                                    = 0x1\n\tTIOCM_RTS                                   = 0x4\n\tTIOCPKT_DATA                                = 0x0\n\tTIOCPKT_DOSTOP                              = 0x20\n\tTIOCPKT_FLUSHREAD                           = 0x1\n\tTIOCPKT_FLUSHWRITE                          = 0x2\n\tTIOCPKT_IOCTL                               = 0x40\n\tTIOCPKT_NOSTOP                              = 0x10\n\tTIOCPKT_START                               = 0x8\n\tTIOCPKT_STOP                                = 0x4\n\tTIPC_ADDR_ID                                = 0x3\n\tTIPC_ADDR_MCAST                             = 0x1\n\tTIPC_ADDR_NAME                              = 0x2\n\tTIPC_ADDR_NAMESEQ                           = 0x1\n\tTIPC_AEAD_ALG_NAME                          = 0x20\n\tTIPC_AEAD_KEYLEN_MAX                        = 0x24\n\tTIPC_AEAD_KEYLEN_MIN                        = 0x14\n\tTIPC_AEAD_KEY_SIZE_MAX                      = 0x48\n\tTIPC_CFG_SRV                                = 0x0\n\tTIPC_CLUSTER_BITS                           = 0xc\n\tTIPC_CLUSTER_MASK                           = 0xfff000\n\tTIPC_CLUSTER_OFFSET                         = 0xc\n\tTIPC_CLUSTER_SIZE                           = 0xfff\n\tTIPC_CONN_SHUTDOWN                          = 0x5\n\tTIPC_CONN_TIMEOUT                           = 0x82\n\tTIPC_CRITICAL_IMPORTANCE                    = 0x3\n\tTIPC_DESTNAME                               = 0x3\n\tTIPC_DEST_DROPPABLE                         = 0x81\n\tTIPC_ERRINFO                                = 0x1\n\tTIPC_ERR_NO_NAME                            = 0x1\n\tTIPC_ERR_NO_NODE                            = 0x3\n\tTIPC_ERR_NO_PORT                            = 0x2\n\tTIPC_ERR_OVERLOAD                           = 0x4\n\tTIPC_GROUP_JOIN                             = 0x87\n\tTIPC_GROUP_LEAVE                            = 0x88\n\tTIPC_GROUP_LOOPBACK                         = 0x1\n\tTIPC_GROUP_MEMBER_EVTS                      = 0x2\n\tTIPC_HIGH_IMPORTANCE                        = 0x2\n\tTIPC_IMPORTANCE                             = 0x7f\n\tTIPC_LINK_STATE                             = 0x2\n\tTIPC_LOW_IMPORTANCE                         = 0x0\n\tTIPC_MAX_BEARER_NAME                        = 0x20\n\tTIPC_MAX_IF_NAME                            = 0x10\n\tTIPC_MAX_LINK_NAME                          = 0x44\n\tTIPC_MAX_MEDIA_NAME                         = 0x10\n\tTIPC_MAX_USER_MSG_SIZE                      = 0x101d0\n\tTIPC_MCAST_BROADCAST                        = 0x85\n\tTIPC_MCAST_REPLICAST                        = 0x86\n\tTIPC_MEDIUM_IMPORTANCE                      = 0x1\n\tTIPC_NODEID_LEN                             = 0x10\n\tTIPC_NODELAY                                = 0x8a\n\tTIPC_NODE_BITS                              = 0xc\n\tTIPC_NODE_MASK                              = 0xfff\n\tTIPC_NODE_OFFSET                            = 0x0\n\tTIPC_NODE_RECVQ_DEPTH                       = 0x83\n\tTIPC_NODE_SIZE                              = 0xfff\n\tTIPC_NODE_STATE                             = 0x0\n\tTIPC_OK                                     = 0x0\n\tTIPC_PUBLISHED                              = 0x1\n\tTIPC_REKEYING_NOW                           = 0xffffffff\n\tTIPC_RESERVED_TYPES                         = 0x40\n\tTIPC_RETDATA                                = 0x2\n\tTIPC_SERVICE_ADDR                           = 0x2\n\tTIPC_SERVICE_RANGE                          = 0x1\n\tTIPC_SOCKET_ADDR                            = 0x3\n\tTIPC_SOCK_RECVQ_DEPTH                       = 0x84\n\tTIPC_SOCK_RECVQ_USED                        = 0x89\n\tTIPC_SRC_DROPPABLE                          = 0x80\n\tTIPC_SUBSCR_TIMEOUT                         = 0x3\n\tTIPC_SUB_CANCEL                             = 0x4\n\tTIPC_SUB_PORTS                              = 0x1\n\tTIPC_SUB_SERVICE                            = 0x2\n\tTIPC_TOP_SRV                                = 0x1\n\tTIPC_WAIT_FOREVER                           = 0xffffffff\n\tTIPC_WITHDRAWN                              = 0x2\n\tTIPC_ZONE_BITS                              = 0x8\n\tTIPC_ZONE_CLUSTER_MASK                      = 0xfffff000\n\tTIPC_ZONE_MASK                              = 0xff000000\n\tTIPC_ZONE_OFFSET                            = 0x18\n\tTIPC_ZONE_SCOPE                             = 0x1\n\tTIPC_ZONE_SIZE                              = 0xff\n\tTMPFS_MAGIC                                 = 0x1021994\n\tTPACKET_ALIGNMENT                           = 0x10\n\tTPACKET_HDRLEN                              = 0x34\n\tTP_STATUS_AVAILABLE                         = 0x0\n\tTP_STATUS_BLK_TMO                           = 0x20\n\tTP_STATUS_COPY                              = 0x2\n\tTP_STATUS_CSUMNOTREADY                      = 0x8\n\tTP_STATUS_CSUM_VALID                        = 0x80\n\tTP_STATUS_GSO_TCP                           = 0x100\n\tTP_STATUS_KERNEL                            = 0x0\n\tTP_STATUS_LOSING                            = 0x4\n\tTP_STATUS_SENDING                           = 0x2\n\tTP_STATUS_SEND_REQUEST                      = 0x1\n\tTP_STATUS_TS_RAW_HARDWARE                   = 0x80000000\n\tTP_STATUS_TS_SOFTWARE                       = 0x20000000\n\tTP_STATUS_TS_SYS_HARDWARE                   = 0x40000000\n\tTP_STATUS_USER                              = 0x1\n\tTP_STATUS_VLAN_TPID_VALID                   = 0x40\n\tTP_STATUS_VLAN_VALID                        = 0x10\n\tTP_STATUS_WRONG_FORMAT                      = 0x4\n\tTRACEFS_MAGIC                               = 0x74726163\n\tTS_COMM_LEN                                 = 0x20\n\tUDF_SUPER_MAGIC                             = 0x15013346\n\tUDP_CORK                                    = 0x1\n\tUDP_ENCAP                                   = 0x64\n\tUDP_ENCAP_ESPINUDP                          = 0x2\n\tUDP_ENCAP_ESPINUDP_NON_IKE                  = 0x1\n\tUDP_ENCAP_GTP0                              = 0x4\n\tUDP_ENCAP_GTP1U                             = 0x5\n\tUDP_ENCAP_L2TPINUDP                         = 0x3\n\tUDP_GRO                                     = 0x68\n\tUDP_NO_CHECK6_RX                            = 0x66\n\tUDP_NO_CHECK6_TX                            = 0x65\n\tUDP_SEGMENT                                 = 0x67\n\tUDP_V4_FLOW                                 = 0x2\n\tUDP_V6_FLOW                                 = 0x6\n\tUMOUNT_NOFOLLOW                             = 0x8\n\tUSBDEVICE_SUPER_MAGIC                       = 0x9fa2\n\tUTIME_NOW                                   = 0x3fffffff\n\tUTIME_OMIT                                  = 0x3ffffffe\n\tV9FS_MAGIC                                  = 0x1021997\n\tVERASE                                      = 0x2\n\tVINTR                                       = 0x0\n\tVKILL                                       = 0x3\n\tVLNEXT                                      = 0xf\n\tVMADDR_CID_ANY                              = 0xffffffff\n\tVMADDR_CID_HOST                             = 0x2\n\tVMADDR_CID_HYPERVISOR                       = 0x0\n\tVMADDR_CID_LOCAL                            = 0x1\n\tVMADDR_FLAG_TO_HOST                         = 0x1\n\tVMADDR_PORT_ANY                             = 0xffffffff\n\tVM_SOCKETS_INVALID_VERSION                  = 0xffffffff\n\tVQUIT                                       = 0x1\n\tVT0                                         = 0x0\n\tWAKE_MAGIC                                  = 0x20\n\tWALL                                        = 0x40000000\n\tWCLONE                                      = 0x80000000\n\tWCONTINUED                                  = 0x8\n\tWDIOC_SETPRETIMEOUT                         = 0xc0045708\n\tWDIOC_SETTIMEOUT                            = 0xc0045706\n\tWDIOF_ALARMONLY                             = 0x400\n\tWDIOF_CARDRESET                             = 0x20\n\tWDIOF_EXTERN1                               = 0x4\n\tWDIOF_EXTERN2                               = 0x8\n\tWDIOF_FANFAULT                              = 0x2\n\tWDIOF_KEEPALIVEPING                         = 0x8000\n\tWDIOF_MAGICCLOSE                            = 0x100\n\tWDIOF_OVERHEAT                              = 0x1\n\tWDIOF_POWEROVER                             = 0x40\n\tWDIOF_POWERUNDER                            = 0x10\n\tWDIOF_PRETIMEOUT                            = 0x200\n\tWDIOF_SETTIMEOUT                            = 0x80\n\tWDIOF_UNKNOWN                               = -0x1\n\tWDIOS_DISABLECARD                           = 0x1\n\tWDIOS_ENABLECARD                            = 0x2\n\tWDIOS_TEMPPANIC                             = 0x4\n\tWDIOS_UNKNOWN                               = -0x1\n\tWEXITED                                     = 0x4\n\tWGALLOWEDIP_A_MAX                           = 0x3\n\tWGDEVICE_A_MAX                              = 0x8\n\tWGPEER_A_MAX                                = 0xa\n\tWG_CMD_MAX                                  = 0x1\n\tWG_GENL_NAME                                = \"wireguard\"\n\tWG_GENL_VERSION                             = 0x1\n\tWG_KEY_LEN                                  = 0x20\n\tWIN_ACKMEDIACHANGE                          = 0xdb\n\tWIN_CHECKPOWERMODE1                         = 0xe5\n\tWIN_CHECKPOWERMODE2                         = 0x98\n\tWIN_DEVICE_RESET                            = 0x8\n\tWIN_DIAGNOSE                                = 0x90\n\tWIN_DOORLOCK                                = 0xde\n\tWIN_DOORUNLOCK                              = 0xdf\n\tWIN_DOWNLOAD_MICROCODE                      = 0x92\n\tWIN_FLUSH_CACHE                             = 0xe7\n\tWIN_FLUSH_CACHE_EXT                         = 0xea\n\tWIN_FORMAT                                  = 0x50\n\tWIN_GETMEDIASTATUS                          = 0xda\n\tWIN_IDENTIFY                                = 0xec\n\tWIN_IDENTIFY_DMA                            = 0xee\n\tWIN_IDLEIMMEDIATE                           = 0xe1\n\tWIN_INIT                                    = 0x60\n\tWIN_MEDIAEJECT                              = 0xed\n\tWIN_MULTREAD                                = 0xc4\n\tWIN_MULTREAD_EXT                            = 0x29\n\tWIN_MULTWRITE                               = 0xc5\n\tWIN_MULTWRITE_EXT                           = 0x39\n\tWIN_NOP                                     = 0x0\n\tWIN_PACKETCMD                               = 0xa0\n\tWIN_PIDENTIFY                               = 0xa1\n\tWIN_POSTBOOT                                = 0xdc\n\tWIN_PREBOOT                                 = 0xdd\n\tWIN_QUEUED_SERVICE                          = 0xa2\n\tWIN_READ                                    = 0x20\n\tWIN_READDMA                                 = 0xc8\n\tWIN_READDMA_EXT                             = 0x25\n\tWIN_READDMA_ONCE                            = 0xc9\n\tWIN_READDMA_QUEUED                          = 0xc7\n\tWIN_READDMA_QUEUED_EXT                      = 0x26\n\tWIN_READ_BUFFER                             = 0xe4\n\tWIN_READ_EXT                                = 0x24\n\tWIN_READ_LONG                               = 0x22\n\tWIN_READ_LONG_ONCE                          = 0x23\n\tWIN_READ_NATIVE_MAX                         = 0xf8\n\tWIN_READ_NATIVE_MAX_EXT                     = 0x27\n\tWIN_READ_ONCE                               = 0x21\n\tWIN_RECAL                                   = 0x10\n\tWIN_RESTORE                                 = 0x10\n\tWIN_SECURITY_DISABLE                        = 0xf6\n\tWIN_SECURITY_ERASE_PREPARE                  = 0xf3\n\tWIN_SECURITY_ERASE_UNIT                     = 0xf4\n\tWIN_SECURITY_FREEZE_LOCK                    = 0xf5\n\tWIN_SECURITY_SET_PASS                       = 0xf1\n\tWIN_SECURITY_UNLOCK                         = 0xf2\n\tWIN_SEEK                                    = 0x70\n\tWIN_SETFEATURES                             = 0xef\n\tWIN_SETIDLE1                                = 0xe3\n\tWIN_SETIDLE2                                = 0x97\n\tWIN_SETMULT                                 = 0xc6\n\tWIN_SET_MAX                                 = 0xf9\n\tWIN_SET_MAX_EXT                             = 0x37\n\tWIN_SLEEPNOW1                               = 0xe6\n\tWIN_SLEEPNOW2                               = 0x99\n\tWIN_SMART                                   = 0xb0\n\tWIN_SPECIFY                                 = 0x91\n\tWIN_SRST                                    = 0x8\n\tWIN_STANDBY                                 = 0xe2\n\tWIN_STANDBY2                                = 0x96\n\tWIN_STANDBYNOW1                             = 0xe0\n\tWIN_STANDBYNOW2                             = 0x94\n\tWIN_VERIFY                                  = 0x40\n\tWIN_VERIFY_EXT                              = 0x42\n\tWIN_VERIFY_ONCE                             = 0x41\n\tWIN_WRITE                                   = 0x30\n\tWIN_WRITEDMA                                = 0xca\n\tWIN_WRITEDMA_EXT                            = 0x35\n\tWIN_WRITEDMA_ONCE                           = 0xcb\n\tWIN_WRITEDMA_QUEUED                         = 0xcc\n\tWIN_WRITEDMA_QUEUED_EXT                     = 0x36\n\tWIN_WRITE_BUFFER                            = 0xe8\n\tWIN_WRITE_EXT                               = 0x34\n\tWIN_WRITE_LONG                              = 0x32\n\tWIN_WRITE_LONG_ONCE                         = 0x33\n\tWIN_WRITE_ONCE                              = 0x31\n\tWIN_WRITE_SAME                              = 0xe9\n\tWIN_WRITE_VERIFY                            = 0x3c\n\tWNOHANG                                     = 0x1\n\tWNOTHREAD                                   = 0x20000000\n\tWNOWAIT                                     = 0x1000000\n\tWSTOPPED                                    = 0x2\n\tWUNTRACED                                   = 0x2\n\tXATTR_CREATE                                = 0x1\n\tXATTR_REPLACE                               = 0x2\n\tXDP_COPY                                    = 0x2\n\tXDP_FLAGS_DRV_MODE                          = 0x4\n\tXDP_FLAGS_HW_MODE                           = 0x8\n\tXDP_FLAGS_MASK                              = 0x1f\n\tXDP_FLAGS_MODES                             = 0xe\n\tXDP_FLAGS_REPLACE                           = 0x10\n\tXDP_FLAGS_SKB_MODE                          = 0x2\n\tXDP_FLAGS_UPDATE_IF_NOEXIST                 = 0x1\n\tXDP_MMAP_OFFSETS                            = 0x1\n\tXDP_OPTIONS                                 = 0x8\n\tXDP_OPTIONS_ZEROCOPY                        = 0x1\n\tXDP_PACKET_HEADROOM                         = 0x100\n\tXDP_PGOFF_RX_RING                           = 0x0\n\tXDP_PGOFF_TX_RING                           = 0x80000000\n\tXDP_PKT_CONTD                               = 0x1\n\tXDP_RING_NEED_WAKEUP                        = 0x1\n\tXDP_RX_RING                                 = 0x2\n\tXDP_SHARED_UMEM                             = 0x1\n\tXDP_STATISTICS                              = 0x7\n\tXDP_TXMD_FLAGS_CHECKSUM                     = 0x2\n\tXDP_TXMD_FLAGS_TIMESTAMP                    = 0x1\n\tXDP_TX_METADATA                             = 0x2\n\tXDP_TX_RING                                 = 0x3\n\tXDP_UMEM_COMPLETION_RING                    = 0x6\n\tXDP_UMEM_FILL_RING                          = 0x5\n\tXDP_UMEM_PGOFF_COMPLETION_RING              = 0x180000000\n\tXDP_UMEM_PGOFF_FILL_RING                    = 0x100000000\n\tXDP_UMEM_REG                                = 0x4\n\tXDP_UMEM_TX_METADATA_LEN                    = 0x4\n\tXDP_UMEM_TX_SW_CSUM                         = 0x2\n\tXDP_UMEM_UNALIGNED_CHUNK_FLAG               = 0x1\n\tXDP_USE_NEED_WAKEUP                         = 0x8\n\tXDP_USE_SG                                  = 0x10\n\tXDP_ZEROCOPY                                = 0x4\n\tXENFS_SUPER_MAGIC                           = 0xabba1974\n\tXFS_SUPER_MAGIC                             = 0x58465342\n\tZONEFS_MAGIC                                = 0x5a4f4653\n\t_HIDIOCGRAWNAME_LEN                         = 0x80\n\t_HIDIOCGRAWPHYS_LEN                         = 0x40\n\t_HIDIOCGRAWUNIQ_LEN                         = 0x40\n)\n\n// Errors\nconst (\n\tE2BIG       = syscall.Errno(0x7)\n\tEACCES      = syscall.Errno(0xd)\n\tEAGAIN      = syscall.Errno(0xb)\n\tEBADF       = syscall.Errno(0x9)\n\tEBUSY       = syscall.Errno(0x10)\n\tECHILD      = syscall.Errno(0xa)\n\tEDOM        = syscall.Errno(0x21)\n\tEEXIST      = syscall.Errno(0x11)\n\tEFAULT      = syscall.Errno(0xe)\n\tEFBIG       = syscall.Errno(0x1b)\n\tEINTR       = syscall.Errno(0x4)\n\tEINVAL      = syscall.Errno(0x16)\n\tEIO         = syscall.Errno(0x5)\n\tEISDIR      = syscall.Errno(0x15)\n\tEMFILE      = syscall.Errno(0x18)\n\tEMLINK      = syscall.Errno(0x1f)\n\tENFILE      = syscall.Errno(0x17)\n\tENODEV      = syscall.Errno(0x13)\n\tENOENT      = syscall.Errno(0x2)\n\tENOEXEC     = syscall.Errno(0x8)\n\tENOMEM      = syscall.Errno(0xc)\n\tENOSPC      = syscall.Errno(0x1c)\n\tENOTBLK     = syscall.Errno(0xf)\n\tENOTDIR     = syscall.Errno(0x14)\n\tENOTTY      = syscall.Errno(0x19)\n\tENXIO       = syscall.Errno(0x6)\n\tEPERM       = syscall.Errno(0x1)\n\tEPIPE       = syscall.Errno(0x20)\n\tERANGE      = syscall.Errno(0x22)\n\tEROFS       = syscall.Errno(0x1e)\n\tESPIPE      = syscall.Errno(0x1d)\n\tESRCH       = syscall.Errno(0x3)\n\tETXTBSY     = syscall.Errno(0x1a)\n\tEWOULDBLOCK = syscall.Errno(0xb)\n\tEXDEV       = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT = syscall.Signal(0x6)\n\tSIGALRM = syscall.Signal(0xe)\n\tSIGFPE  = syscall.Signal(0x8)\n\tSIGHUP  = syscall.Signal(0x1)\n\tSIGILL  = syscall.Signal(0x4)\n\tSIGINT  = syscall.Signal(0x2)\n\tSIGIOT  = syscall.Signal(0x6)\n\tSIGKILL = syscall.Signal(0x9)\n\tSIGPIPE = syscall.Signal(0xd)\n\tSIGQUIT = syscall.Signal(0x3)\n\tSIGSEGV = syscall.Signal(0xb)\n\tSIGTERM = syscall.Signal(0xf)\n\tSIGTRAP = syscall.Signal(0x5)\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_386.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/386/include -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/386/include -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80041270\n\tBLKBSZSET                        = 0x40041271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80041272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFP_XSTATE_MAGIC2                 = 0x46505845\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0xc\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0xd\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0xe\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_32BIT                        = 0x40\n\tMAP_ABOVE4G                      = 0x80\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc03c4d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x20\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x8000\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8008743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40087446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x400c744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40087447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETFPXREGS                = 0x12\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETFPXREGS                = 0x13\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x21\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8004700d\n\tRTC_EPOCH_SET                    = 0x4004700e\n\tRTC_IRQP_READ                    = 0x8004700b\n\tRTC_IRQP_SET                     = 0x4004700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x801c7011\n\tRTC_PLL_SET                      = 0x401c7012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x400854d5\n\tTUNDETACHFILTER                  = 0x400854d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x800854db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x20\n\tX86_FXSR_MAGIC                   = 0x0\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/amd64/include -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/amd64/include -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFP_XSTATE_MAGIC2                 = 0x46505845\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_32BIT                        = 0x40\n\tMAP_ABOVE4G                      = 0x80\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_ARCH_PRCTL                = 0x1e\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETFPXREGS                = 0x12\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETFPXREGS                = 0x13\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x21\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_arm.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/arm/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/arm/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80041270\n\tBLKBSZSET                        = 0x40041271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80041272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0xc\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0xd\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0xe\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x20\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x10000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x20000\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8008743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40087446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x400c744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40087447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTRACE_GETCRUNCHREGS             = 0x19\n\tPTRACE_GETFDPIC                  = 0x1f\n\tPTRACE_GETFDPIC_EXEC             = 0x0\n\tPTRACE_GETFDPIC_INTERP           = 0x1\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETHBPREGS                = 0x1d\n\tPTRACE_GETVFPREGS                = 0x1b\n\tPTRACE_GETWMMXREGS               = 0x12\n\tPTRACE_GET_THREAD_AREA           = 0x16\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_SETCRUNCHREGS             = 0x1a\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETHBPREGS                = 0x1e\n\tPTRACE_SETVFPREGS                = 0x1c\n\tPTRACE_SETWMMXREGS               = 0x13\n\tPTRACE_SET_SYSCALL               = 0x17\n\tPT_DATA_ADDR                     = 0x10004\n\tPT_TEXT_ADDR                     = 0x10000\n\tPT_TEXT_END_ADDR                 = 0x10008\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8004700d\n\tRTC_EPOCH_SET                    = 0x4004700e\n\tRTC_IRQP_READ                    = 0x8004700b\n\tRTC_IRQP_SET                     = 0x4004700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x801c7011\n\tRTC_PLL_SET                      = 0x401c7012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x400854d5\n\tTUNDETACHFILTER                  = 0x400854d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x800854db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x20\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/arm64/include -fsigned-char\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/arm64/include -fsigned-char _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tESR_MAGIC                        = 0x45535201\n\tEXTPROC                          = 0x10000\n\tEXTRA_MAGIC                      = 0x45585401\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFPMR_MAGIC                       = 0x46504d52\n\tFPSIMD_MAGIC                     = 0x46508001\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x10000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPROT_BTI                         = 0x10\n\tPROT_MTE                         = 0x20\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_PEEKMTETAGS               = 0x21\n\tPTRACE_POKEMTETAGS               = 0x22\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tSVE_MAGIC                        = 0x53564501\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTPIDR2_MAGIC                     = 0x54504902\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\tZA_MAGIC                         = 0x54366345\n\tZT_MAGIC                         = 0x5a544e01\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/loong64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build loong64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/loong64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFPU_CTX_MAGIC                    = 0x46505501\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tLASX_CTX_MAGIC                   = 0x41535801\n\tLBT_CTX_MAGIC                    = 0x42540001\n\tLSX_CTX_MAGIC                    = 0x53580001\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mips.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/mips/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/mips/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40041270\n\tBLKBSZSET                        = 0x80041271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40041272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x80\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x2000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x21\n\tF_GETLK64                        = 0x21\n\tF_GETOWN                         = 0x17\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x22\n\tF_SETLK64                        = 0x22\n\tF_SETLKW                         = 0x23\n\tF_SETLKW64                       = 0x23\n\tF_SETOWN                         = 0x18\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x100\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x80\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x800\n\tMAP_ANONYMOUS                    = 0x800\n\tMAP_DENYWRITE                    = 0x2000\n\tMAP_EXECUTABLE                   = 0x4000\n\tMAP_GROWSDOWN                    = 0x1000\n\tMAP_HUGETLB                      = 0x80000\n\tMAP_LOCKED                       = 0x8000\n\tMAP_NONBLOCK                     = 0x20000\n\tMAP_NORESERVE                    = 0x400\n\tMAP_POPULATE                     = 0x10000\n\tMAP_RENAME                       = 0x800\n\tMAP_STACK                        = 0x40000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x20\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x1000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x100\n\tO_DIRECT                         = 0x8000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x10\n\tO_EXCL                           = 0x400\n\tO_FSYNC                          = 0x4010\n\tO_LARGEFILE                      = 0x2000\n\tO_NDELAY                         = 0x80\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x800\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x80\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x4010\n\tO_SYNC                           = 0x4010\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4008743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80087446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x800c744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80087447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_GET_THREAD_AREA_3264      = 0xc4\n\tPTRACE_GET_WATCH_REGS            = 0xd0\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_3264             = 0xc1\n\tPTRACE_PEEKTEXT_3264             = 0xc0\n\tPTRACE_POKEDATA_3264             = 0xc3\n\tPTRACE_POKETEXT_3264             = 0xc2\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SET_WATCH_REGS            = 0xd1\n\tRLIMIT_AS                        = 0x6\n\tRLIMIT_MEMLOCK                   = 0x9\n\tRLIMIT_NOFILE                    = 0x5\n\tRLIMIT_NPROC                     = 0x8\n\tRLIMIT_RSS                       = 0x7\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4004700d\n\tRTC_EPOCH_SET                    = 0x8004700e\n\tRTC_IRQP_READ                    = 0x4004700b\n\tRTC_IRQP_SET                     = 0x8004700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x401c7011\n\tRTC_PLL_SET                      = 0x801c7012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x80\n\tSIOCATMARK                       = 0x40047307\n\tSIOCGPGRP                        = 0x40047309\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x467f\n\tSIOCOUTQ                         = 0x7472\n\tSIOCSPGRP                        = 0x80047308\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x1\n\tSOCK_NONBLOCK                    = 0x80\n\tSOCK_STREAM                      = 0x2\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x11\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x12\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x1004\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x1006\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x1006\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x1f\n\tSO_SNDLOWAT                      = 0x1003\n\tSO_SNDTIMEO                      = 0x1005\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x1005\n\tSO_STYLE                         = 0x1008\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x5407\n\tTCGETA                           = 0x5401\n\tTCGETS                           = 0x540d\n\tTCGETS2                          = 0x4030542a\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCSBRKP                          = 0x5486\n\tTCSETA                           = 0x5402\n\tTCSETAF                          = 0x5404\n\tTCSETAW                          = 0x5403\n\tTCSETS                           = 0x540e\n\tTCSETS2                          = 0x8030542b\n\tTCSETSF                          = 0x5410\n\tTCSETSF2                         = 0x8030542d\n\tTCSETSW                          = 0x540f\n\tTCSETSW2                         = 0x8030542c\n\tTCXONC                           = 0x5406\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x80\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x4020542e\n\tTIOCGSERIAL                      = 0x5484\n\tTIOCGSID                         = 0x7416\n\tTIOCGSOFTCAR                     = 0x5481\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x467f\n\tTIOCLINUX                        = 0x5483\n\tTIOCMBIC                         = 0x741c\n\tTIOCMBIS                         = 0x741b\n\tTIOCMGET                         = 0x741d\n\tTIOCMIWAIT                       = 0x5491\n\tTIOCMSET                         = 0x741a\n\tTIOCM_CAR                        = 0x100\n\tTIOCM_CD                         = 0x100\n\tTIOCM_CTS                        = 0x40\n\tTIOCM_DSR                        = 0x400\n\tTIOCM_RI                         = 0x200\n\tTIOCM_RNG                        = 0x200\n\tTIOCM_SR                         = 0x20\n\tTIOCM_ST                         = 0x10\n\tTIOCNOTTY                        = 0x5471\n\tTIOCNXCL                         = 0x740e\n\tTIOCOUTQ                         = 0x7472\n\tTIOCPKT                          = 0x5470\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x5480\n\tTIOCSERCONFIG                    = 0x5488\n\tTIOCSERGETLSR                    = 0x548e\n\tTIOCSERGETMULTI                  = 0x548f\n\tTIOCSERGSTRUCT                   = 0x548d\n\tTIOCSERGWILD                     = 0x5489\n\tTIOCSERSETMULTI                  = 0x5490\n\tTIOCSERSWILD                     = 0x548a\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x7401\n\tTIOCSETN                         = 0x740a\n\tTIOCSETP                         = 0x7409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x548c\n\tTIOCSLTC                         = 0x7475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0xc020542f\n\tTIOCSSERIAL                      = 0x5485\n\tTIOCSSOFTCAR                     = 0x5482\n\tTIOCSTI                          = 0x5472\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x8000\n\tTUNATTACHFILTER                  = 0x800854d5\n\tTUNDETACHFILTER                  = 0x800854d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x400854db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x10\n\tVEOL                             = 0x11\n\tVEOL2                            = 0x6\n\tVMIN                             = 0x4\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVSWTCH                           = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x20\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/mips64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x80\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x2000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0xe\n\tF_GETLK64                        = 0xe\n\tF_GETOWN                         = 0x17\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x18\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x100\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x80\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x800\n\tMAP_ANONYMOUS                    = 0x800\n\tMAP_DENYWRITE                    = 0x2000\n\tMAP_EXECUTABLE                   = 0x4000\n\tMAP_GROWSDOWN                    = 0x1000\n\tMAP_HUGETLB                      = 0x80000\n\tMAP_LOCKED                       = 0x8000\n\tMAP_NONBLOCK                     = 0x20000\n\tMAP_NORESERVE                    = 0x400\n\tMAP_POPULATE                     = 0x10000\n\tMAP_RENAME                       = 0x800\n\tMAP_STACK                        = 0x40000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x1000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x100\n\tO_DIRECT                         = 0x8000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x10\n\tO_EXCL                           = 0x400\n\tO_FSYNC                          = 0x4010\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x80\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x800\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x80\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x4010\n\tO_SYNC                           = 0x4010\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_GET_THREAD_AREA_3264      = 0xc4\n\tPTRACE_GET_WATCH_REGS            = 0xd0\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_3264             = 0xc1\n\tPTRACE_PEEKTEXT_3264             = 0xc0\n\tPTRACE_POKEDATA_3264             = 0xc3\n\tPTRACE_POKETEXT_3264             = 0xc2\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SET_WATCH_REGS            = 0xd1\n\tRLIMIT_AS                        = 0x6\n\tRLIMIT_MEMLOCK                   = 0x9\n\tRLIMIT_NOFILE                    = 0x5\n\tRLIMIT_NPROC                     = 0x8\n\tRLIMIT_RSS                       = 0x7\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x80\n\tSIOCATMARK                       = 0x40047307\n\tSIOCGPGRP                        = 0x40047309\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x467f\n\tSIOCOUTQ                         = 0x7472\n\tSIOCSPGRP                        = 0x80047308\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x1\n\tSOCK_NONBLOCK                    = 0x80\n\tSOCK_STREAM                      = 0x2\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x11\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x12\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x1004\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x1006\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x1006\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x1f\n\tSO_SNDLOWAT                      = 0x1003\n\tSO_SNDTIMEO                      = 0x1005\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x1005\n\tSO_STYLE                         = 0x1008\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x5407\n\tTCGETA                           = 0x5401\n\tTCGETS                           = 0x540d\n\tTCGETS2                          = 0x4030542a\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCSBRKP                          = 0x5486\n\tTCSETA                           = 0x5402\n\tTCSETAF                          = 0x5404\n\tTCSETAW                          = 0x5403\n\tTCSETS                           = 0x540e\n\tTCSETS2                          = 0x8030542b\n\tTCSETSF                          = 0x5410\n\tTCSETSF2                         = 0x8030542d\n\tTCSETSW                          = 0x540f\n\tTCSETSW2                         = 0x8030542c\n\tTCXONC                           = 0x5406\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x80\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x4020542e\n\tTIOCGSERIAL                      = 0x5484\n\tTIOCGSID                         = 0x7416\n\tTIOCGSOFTCAR                     = 0x5481\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x467f\n\tTIOCLINUX                        = 0x5483\n\tTIOCMBIC                         = 0x741c\n\tTIOCMBIS                         = 0x741b\n\tTIOCMGET                         = 0x741d\n\tTIOCMIWAIT                       = 0x5491\n\tTIOCMSET                         = 0x741a\n\tTIOCM_CAR                        = 0x100\n\tTIOCM_CD                         = 0x100\n\tTIOCM_CTS                        = 0x40\n\tTIOCM_DSR                        = 0x400\n\tTIOCM_RI                         = 0x200\n\tTIOCM_RNG                        = 0x200\n\tTIOCM_SR                         = 0x20\n\tTIOCM_ST                         = 0x10\n\tTIOCNOTTY                        = 0x5471\n\tTIOCNXCL                         = 0x740e\n\tTIOCOUTQ                         = 0x7472\n\tTIOCPKT                          = 0x5470\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x5480\n\tTIOCSERCONFIG                    = 0x5488\n\tTIOCSERGETLSR                    = 0x548e\n\tTIOCSERGETMULTI                  = 0x548f\n\tTIOCSERGSTRUCT                   = 0x548d\n\tTIOCSERGWILD                     = 0x5489\n\tTIOCSERSETMULTI                  = 0x5490\n\tTIOCSERSWILD                     = 0x548a\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x7401\n\tTIOCSETN                         = 0x740a\n\tTIOCSETP                         = 0x7409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x548c\n\tTIOCSLTC                         = 0x7475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0xc020542f\n\tTIOCSSERIAL                      = 0x5485\n\tTIOCSSOFTCAR                     = 0x5482\n\tTIOCSTI                          = 0x5472\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x8000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x10\n\tVEOL                             = 0x11\n\tVEOL2                            = 0x6\n\tVMIN                             = 0x4\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVSWTCH                           = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/mips64le/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64le && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/mips64le/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x80\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x2000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0xe\n\tF_GETLK64                        = 0xe\n\tF_GETOWN                         = 0x17\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x18\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x100\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x80\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x800\n\tMAP_ANONYMOUS                    = 0x800\n\tMAP_DENYWRITE                    = 0x2000\n\tMAP_EXECUTABLE                   = 0x4000\n\tMAP_GROWSDOWN                    = 0x1000\n\tMAP_HUGETLB                      = 0x80000\n\tMAP_LOCKED                       = 0x8000\n\tMAP_NONBLOCK                     = 0x20000\n\tMAP_NORESERVE                    = 0x400\n\tMAP_POPULATE                     = 0x10000\n\tMAP_RENAME                       = 0x800\n\tMAP_STACK                        = 0x40000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x1000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x100\n\tO_DIRECT                         = 0x8000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x10\n\tO_EXCL                           = 0x400\n\tO_FSYNC                          = 0x4010\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x80\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x800\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x80\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x4010\n\tO_SYNC                           = 0x4010\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_GET_THREAD_AREA_3264      = 0xc4\n\tPTRACE_GET_WATCH_REGS            = 0xd0\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_3264             = 0xc1\n\tPTRACE_PEEKTEXT_3264             = 0xc0\n\tPTRACE_POKEDATA_3264             = 0xc3\n\tPTRACE_POKETEXT_3264             = 0xc2\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SET_WATCH_REGS            = 0xd1\n\tRLIMIT_AS                        = 0x6\n\tRLIMIT_MEMLOCK                   = 0x9\n\tRLIMIT_NOFILE                    = 0x5\n\tRLIMIT_NPROC                     = 0x8\n\tRLIMIT_RSS                       = 0x7\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x80\n\tSIOCATMARK                       = 0x40047307\n\tSIOCGPGRP                        = 0x40047309\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x467f\n\tSIOCOUTQ                         = 0x7472\n\tSIOCSPGRP                        = 0x80047308\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x1\n\tSOCK_NONBLOCK                    = 0x80\n\tSOCK_STREAM                      = 0x2\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x11\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x12\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x1004\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x1006\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x1006\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x1f\n\tSO_SNDLOWAT                      = 0x1003\n\tSO_SNDTIMEO                      = 0x1005\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x1005\n\tSO_STYLE                         = 0x1008\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x5407\n\tTCGETA                           = 0x5401\n\tTCGETS                           = 0x540d\n\tTCGETS2                          = 0x4030542a\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCSBRKP                          = 0x5486\n\tTCSETA                           = 0x5402\n\tTCSETAF                          = 0x5404\n\tTCSETAW                          = 0x5403\n\tTCSETS                           = 0x540e\n\tTCSETS2                          = 0x8030542b\n\tTCSETSF                          = 0x5410\n\tTCSETSF2                         = 0x8030542d\n\tTCSETSW                          = 0x540f\n\tTCSETSW2                         = 0x8030542c\n\tTCXONC                           = 0x5406\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x80\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x4020542e\n\tTIOCGSERIAL                      = 0x5484\n\tTIOCGSID                         = 0x7416\n\tTIOCGSOFTCAR                     = 0x5481\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x467f\n\tTIOCLINUX                        = 0x5483\n\tTIOCMBIC                         = 0x741c\n\tTIOCMBIS                         = 0x741b\n\tTIOCMGET                         = 0x741d\n\tTIOCMIWAIT                       = 0x5491\n\tTIOCMSET                         = 0x741a\n\tTIOCM_CAR                        = 0x100\n\tTIOCM_CD                         = 0x100\n\tTIOCM_CTS                        = 0x40\n\tTIOCM_DSR                        = 0x400\n\tTIOCM_RI                         = 0x200\n\tTIOCM_RNG                        = 0x200\n\tTIOCM_SR                         = 0x20\n\tTIOCM_ST                         = 0x10\n\tTIOCNOTTY                        = 0x5471\n\tTIOCNXCL                         = 0x740e\n\tTIOCOUTQ                         = 0x7472\n\tTIOCPKT                          = 0x5470\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x5480\n\tTIOCSERCONFIG                    = 0x5488\n\tTIOCSERGETLSR                    = 0x548e\n\tTIOCSERGETMULTI                  = 0x548f\n\tTIOCSERGSTRUCT                   = 0x548d\n\tTIOCSERGWILD                     = 0x5489\n\tTIOCSERSETMULTI                  = 0x5490\n\tTIOCSERSWILD                     = 0x548a\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x7401\n\tTIOCSETN                         = 0x740a\n\tTIOCSETP                         = 0x7409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x548c\n\tTIOCSLTC                         = 0x7475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0xc020542f\n\tTIOCSSERIAL                      = 0x5485\n\tTIOCSSOFTCAR                     = 0x5482\n\tTIOCSTI                          = 0x5472\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x8000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x10\n\tVEOL                             = 0x11\n\tVEOL2                            = 0x6\n\tVMIN                             = 0x4\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVSWTCH                           = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/mipsle/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mipsle && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/mipsle/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40041270\n\tBLKBSZSET                        = 0x80041271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40041272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x80\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x2000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x21\n\tF_GETLK64                        = 0x21\n\tF_GETOWN                         = 0x17\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x22\n\tF_SETLK64                        = 0x22\n\tF_SETLKW                         = 0x23\n\tF_SETLKW64                       = 0x23\n\tF_SETOWN                         = 0x18\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x100\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x80\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x800\n\tMAP_ANONYMOUS                    = 0x800\n\tMAP_DENYWRITE                    = 0x2000\n\tMAP_EXECUTABLE                   = 0x4000\n\tMAP_GROWSDOWN                    = 0x1000\n\tMAP_HUGETLB                      = 0x80000\n\tMAP_LOCKED                       = 0x8000\n\tMAP_NONBLOCK                     = 0x20000\n\tMAP_NORESERVE                    = 0x400\n\tMAP_POPULATE                     = 0x10000\n\tMAP_RENAME                       = 0x800\n\tMAP_STACK                        = 0x40000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x20\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x1000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x100\n\tO_DIRECT                         = 0x8000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x10\n\tO_EXCL                           = 0x400\n\tO_FSYNC                          = 0x4010\n\tO_LARGEFILE                      = 0x2000\n\tO_NDELAY                         = 0x80\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x800\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x80\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x4010\n\tO_SYNC                           = 0x4010\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4008743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80087446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x800c744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80087447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GET_THREAD_AREA           = 0x19\n\tPTRACE_GET_THREAD_AREA_3264      = 0xc4\n\tPTRACE_GET_WATCH_REGS            = 0xd0\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_3264             = 0xc1\n\tPTRACE_PEEKTEXT_3264             = 0xc0\n\tPTRACE_POKEDATA_3264             = 0xc3\n\tPTRACE_POKETEXT_3264             = 0xc2\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SET_THREAD_AREA           = 0x1a\n\tPTRACE_SET_WATCH_REGS            = 0xd1\n\tRLIMIT_AS                        = 0x6\n\tRLIMIT_MEMLOCK                   = 0x9\n\tRLIMIT_NOFILE                    = 0x5\n\tRLIMIT_NPROC                     = 0x8\n\tRLIMIT_RSS                       = 0x7\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4004700d\n\tRTC_EPOCH_SET                    = 0x8004700e\n\tRTC_IRQP_READ                    = 0x4004700b\n\tRTC_IRQP_SET                     = 0x8004700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x401c7011\n\tRTC_PLL_SET                      = 0x801c7012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x80\n\tSIOCATMARK                       = 0x40047307\n\tSIOCGPGRP                        = 0x40047309\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x467f\n\tSIOCOUTQ                         = 0x7472\n\tSIOCSPGRP                        = 0x80047308\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x1\n\tSOCK_NONBLOCK                    = 0x80\n\tSOCK_STREAM                      = 0x2\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x1009\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x11\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x12\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x1004\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x1006\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x1006\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x1f\n\tSO_SNDLOWAT                      = 0x1003\n\tSO_SNDTIMEO                      = 0x1005\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x1005\n\tSO_STYLE                         = 0x1008\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x5407\n\tTCGETA                           = 0x5401\n\tTCGETS                           = 0x540d\n\tTCGETS2                          = 0x4030542a\n\tTCSAFLUSH                        = 0x5410\n\tTCSBRK                           = 0x5405\n\tTCSBRKP                          = 0x5486\n\tTCSETA                           = 0x5402\n\tTCSETAF                          = 0x5404\n\tTCSETAW                          = 0x5403\n\tTCSETS                           = 0x540e\n\tTCSETS2                          = 0x8030542b\n\tTCSETSF                          = 0x5410\n\tTCSETSF2                         = 0x8030542d\n\tTCSETSW                          = 0x540f\n\tTCSETSW2                         = 0x8030542c\n\tTCXONC                           = 0x5406\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x80\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x80047478\n\tTIOCEXCL                         = 0x740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x7400\n\tTIOCGETP                         = 0x7408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x5492\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x548b\n\tTIOCGLTC                         = 0x7474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x4020542e\n\tTIOCGSERIAL                      = 0x5484\n\tTIOCGSID                         = 0x7416\n\tTIOCGSOFTCAR                     = 0x5481\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x467f\n\tTIOCLINUX                        = 0x5483\n\tTIOCMBIC                         = 0x741c\n\tTIOCMBIS                         = 0x741b\n\tTIOCMGET                         = 0x741d\n\tTIOCMIWAIT                       = 0x5491\n\tTIOCMSET                         = 0x741a\n\tTIOCM_CAR                        = 0x100\n\tTIOCM_CD                         = 0x100\n\tTIOCM_CTS                        = 0x40\n\tTIOCM_DSR                        = 0x400\n\tTIOCM_RI                         = 0x200\n\tTIOCM_RNG                        = 0x200\n\tTIOCM_SR                         = 0x20\n\tTIOCM_ST                         = 0x10\n\tTIOCNOTTY                        = 0x5471\n\tTIOCNXCL                         = 0x740e\n\tTIOCOUTQ                         = 0x7472\n\tTIOCPKT                          = 0x5470\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x5480\n\tTIOCSERCONFIG                    = 0x5488\n\tTIOCSERGETLSR                    = 0x548e\n\tTIOCSERGETMULTI                  = 0x548f\n\tTIOCSERGSTRUCT                   = 0x548d\n\tTIOCSERGWILD                     = 0x5489\n\tTIOCSERSETMULTI                  = 0x5490\n\tTIOCSERSWILD                     = 0x548a\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x7401\n\tTIOCSETN                         = 0x740a\n\tTIOCSETP                         = 0x7409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x548c\n\tTIOCSLTC                         = 0x7475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0xc020542f\n\tTIOCSSERIAL                      = 0x5485\n\tTIOCSSOFTCAR                     = 0x5482\n\tTIOCSTI                          = 0x5472\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x8000\n\tTUNATTACHFILTER                  = 0x800854d5\n\tTUNDETACHFILTER                  = 0x800854d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x400854db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x10\n\tVEOL                             = 0x11\n\tVEOL2                            = 0x6\n\tVMIN                             = 0x4\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVSWTCH                           = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x20\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x9e)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x46d)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEHWPOISON       = syscall.Errno(0xa8)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINIT           = syscall.Errno(0x8d)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISNAM          = syscall.Errno(0x8b)\n\tEKEYEXPIRED     = syscall.Errno(0xa2)\n\tEKEYREJECTED    = syscall.Errno(0xa4)\n\tEKEYREVOKED     = syscall.Errno(0xa3)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMEDIUMTYPE     = syscall.Errno(0xa0)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENAVAIL         = syscall.Errno(0x8a)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0xa1)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x9f)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTNAM         = syscall.Errno(0x89)\n\tENOTRECOVERABLE = syscall.Errno(0xa6)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x7a)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0xa5)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMDEV         = syscall.Errno(0x8e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x8c)\n\tERESTART        = syscall.Errno(0x5b)\n\tERFKILL         = syscall.Errno(0xa7)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tEUCLEAN         = syscall.Errno(0x87)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x12)\n\tSIGCLD    = syscall.Signal(0x12)\n\tSIGCONT   = syscall.Signal(0x19)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x16)\n\tSIGPOLL   = syscall.Signal(0x16)\n\tSIGPROF   = syscall.Signal(0x1d)\n\tSIGPWR    = syscall.Signal(0x13)\n\tSIGSTOP   = syscall.Signal(0x17)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x18)\n\tSIGTTIN   = syscall.Signal(0x1a)\n\tSIGTTOU   = syscall.Signal(0x1b)\n\tSIGURG    = syscall.Signal(0x15)\n\tSIGUSR1   = syscall.Signal(0x10)\n\tSIGUSR2   = syscall.Signal(0x11)\n\tSIGVTALRM = syscall.Signal(0x1c)\n\tSIGWINCH  = syscall.Signal(0x14)\n\tSIGXCPU   = syscall.Signal(0x1e)\n\tSIGXFSZ   = syscall.Signal(0x1f)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{46, \"ENOLCK\", \"no locks available\"},\n\t{50, \"EBADE\", \"invalid exchange\"},\n\t{51, \"EBADR\", \"invalid request descriptor\"},\n\t{52, \"EXFULL\", \"exchange full\"},\n\t{53, \"ENOANO\", \"no anode\"},\n\t{54, \"EBADRQC\", \"invalid request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"bad message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{87, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{89, \"ENOSYS\", \"function not implemented\"},\n\t{90, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{91, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{92, \"ESTRPIPE\", \"streams pipe error\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"ENOTSUP\", \"operation not supported\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{135, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{137, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{138, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{139, \"EISNAM\", \"is a named type file\"},\n\t{140, \"EREMOTEIO\", \"remote I/O error\"},\n\t{141, \"EINIT\", \"unknown error 141\"},\n\t{142, \"EREMDEV\", \"unknown error 142\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale file handle\"},\n\t{158, \"ECANCELED\", \"operation canceled\"},\n\t{159, \"ENOMEDIUM\", \"no medium found\"},\n\t{160, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{161, \"ENOKEY\", \"required key not available\"},\n\t{162, \"EKEYEXPIRED\", \"key has expired\"},\n\t{163, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{164, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{165, \"EOWNERDEAD\", \"owner died\"},\n\t{166, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{167, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{168, \"EHWPOISON\", \"memory page has hardware error\"},\n\t{1133, \"EDQUOT\", \"disk quota exceeded\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGCHLD\", \"child exited\"},\n\t{19, \"SIGPWR\", \"power failure\"},\n\t{20, \"SIGWINCH\", \"window changed\"},\n\t{21, \"SIGURG\", \"urgent I/O condition\"},\n\t{22, \"SIGIO\", \"I/O possible\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{29, \"SIGPROF\", \"profiling timer expired\"},\n\t{30, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{31, \"SIGXFSZ\", \"file size limit exceeded\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/ppc/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x17\n\tB115200                          = 0x11\n\tB1152000                         = 0x18\n\tB1500000                         = 0x19\n\tB2000000                         = 0x1a\n\tB230400                          = 0x12\n\tB2500000                         = 0x1b\n\tB3000000                         = 0x1c\n\tB3500000                         = 0x1d\n\tB4000000                         = 0x1e\n\tB460800                          = 0x13\n\tB500000                          = 0x14\n\tB57600                           = 0x10\n\tB576000                          = 0x15\n\tB921600                          = 0x16\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40041270\n\tBLKBSZSET                        = 0x80041271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40041272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1f\n\tBS1                              = 0x8000\n\tBSDLY                            = 0x8000\n\tCBAUD                            = 0xff\n\tCBAUDEX                          = 0x0\n\tCIBAUD                           = 0xff0000\n\tCLOCAL                           = 0x8000\n\tCR1                              = 0x1000\n\tCR2                              = 0x2000\n\tCR3                              = 0x3000\n\tCRDLY                            = 0x3000\n\tCREAD                            = 0x800\n\tCS6                              = 0x100\n\tCS7                              = 0x200\n\tCS8                              = 0x300\n\tCSIZE                            = 0x300\n\tCSTOPB                           = 0x400\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x40\n\tECHOE                            = 0x2\n\tECHOK                            = 0x4\n\tECHOKE                           = 0x1\n\tECHONL                           = 0x10\n\tECHOPRT                          = 0x20\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000000\n\tFF1                              = 0x4000\n\tFFDLY                            = 0x4000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x800000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40046601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80046602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0xc\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0xd\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0xe\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHUPCL                            = 0x4000\n\tICANON                           = 0x100\n\tIEXTEN                           = 0x400\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tISIG                             = 0x80\n\tIUCLC                            = 0x1000\n\tIXOFF                            = 0x400\n\tIXON                             = 0x200\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x80\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x40\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMCL_ONFAULT                      = 0x8000\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc00c4d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc00c4d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x20\n\tNL2                              = 0x200\n\tNL3                              = 0x300\n\tNLDLY                            = 0x300\n\tNOFLSH                           = 0x80000000\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x4\n\tONLCR                            = 0x2\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x20000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x10000\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x1000\n\tPARODD                           = 0x2000\n\tPENDIN                           = 0x20000000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40042407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8004240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc004240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80042406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4008743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80087446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x800c744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80087447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPROT_SAO                         = 0x10\n\tPR_SET_PTRACER_ANY               = 0xffffffff\n\tPTRACE_GETEVRREGS                = 0x14\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETREGS64                 = 0x16\n\tPTRACE_GETVRREGS                 = 0x12\n\tPTRACE_GETVSRREGS                = 0x1b\n\tPTRACE_GET_DEBUGREG              = 0x19\n\tPTRACE_SETEVRREGS                = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETREGS64                 = 0x17\n\tPTRACE_SETVRREGS                 = 0x13\n\tPTRACE_SETVSRREGS                = 0x1c\n\tPTRACE_SET_DEBUGREG              = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x100\n\tPTRACE_SYSEMU                    = 0x1d\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x1e\n\tPT_CCR                           = 0x26\n\tPT_CTR                           = 0x23\n\tPT_DAR                           = 0x29\n\tPT_DSCR                          = 0x2c\n\tPT_DSISR                         = 0x2a\n\tPT_FPR0                          = 0x30\n\tPT_FPR31                         = 0x6e\n\tPT_FPSCR                         = 0x71\n\tPT_LNK                           = 0x24\n\tPT_MQ                            = 0x27\n\tPT_MSR                           = 0x21\n\tPT_NIP                           = 0x20\n\tPT_ORIG_R3                       = 0x22\n\tPT_R0                            = 0x0\n\tPT_R1                            = 0x1\n\tPT_R10                           = 0xa\n\tPT_R11                           = 0xb\n\tPT_R12                           = 0xc\n\tPT_R13                           = 0xd\n\tPT_R14                           = 0xe\n\tPT_R15                           = 0xf\n\tPT_R16                           = 0x10\n\tPT_R17                           = 0x11\n\tPT_R18                           = 0x12\n\tPT_R19                           = 0x13\n\tPT_R2                            = 0x2\n\tPT_R20                           = 0x14\n\tPT_R21                           = 0x15\n\tPT_R22                           = 0x16\n\tPT_R23                           = 0x17\n\tPT_R24                           = 0x18\n\tPT_R25                           = 0x19\n\tPT_R26                           = 0x1a\n\tPT_R27                           = 0x1b\n\tPT_R28                           = 0x1c\n\tPT_R29                           = 0x1d\n\tPT_R3                            = 0x3\n\tPT_R30                           = 0x1e\n\tPT_R31                           = 0x1f\n\tPT_R4                            = 0x4\n\tPT_R5                            = 0x5\n\tPT_R6                            = 0x6\n\tPT_R7                            = 0x7\n\tPT_R8                            = 0x8\n\tPT_R9                            = 0x9\n\tPT_REGS_COUNT                    = 0x2c\n\tPT_RESULT                        = 0x2b\n\tPT_TRAP                          = 0x28\n\tPT_XER                           = 0x25\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4004700d\n\tRTC_EPOCH_SET                    = 0x8004700e\n\tRTC_IRQP_READ                    = 0x4004700b\n\tRTC_IRQP_SET                     = 0x8004700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x401c7011\n\tRTC_PLL_SET                      = 0x801c7012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x4004667f\n\tSIOCOUTQ                         = 0x40047473\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x14\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x15\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x10\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x12\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x12\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x11\n\tSO_SNDTIMEO                      = 0x13\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x13\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x400\n\tTAB2                             = 0x800\n\tTAB3                             = 0xc00\n\tTABDLY                           = 0xc00\n\tTCFLSH                           = 0x2000741f\n\tTCGETA                           = 0x40147417\n\tTCGETS                           = 0x402c7413\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x2000741d\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x80147418\n\tTCSETAF                          = 0x8014741c\n\tTCSETAW                          = 0x80147419\n\tTCSETS                           = 0x802c7414\n\tTCSETSF                          = 0x802c7416\n\tTCSETSW                          = 0x802c7415\n\tTCXONC                           = 0x2000741e\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETC                         = 0x40067412\n\tTIOCGETD                         = 0x5424\n\tTIOCGETP                         = 0x40067408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGLTC                         = 0x40067474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x4004667f\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_LOOP                       = 0x8000\n\tTIOCM_OUT1                       = 0x2000\n\tTIOCM_OUT2                       = 0x4000\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x40047473\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETC                         = 0x80067411\n\tTIOCSETD                         = 0x5423\n\tTIOCSETN                         = 0x8006740a\n\tTIOCSETP                         = 0x80067409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSLTC                         = 0x80067475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTART                        = 0x2000746e\n\tTIOCSTI                          = 0x5412\n\tTIOCSTOP                         = 0x2000746f\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x400000\n\tTUNATTACHFILTER                  = 0x800854d5\n\tTUNDETACHFILTER                  = 0x800854d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x400854db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0x10\n\tVEOF                             = 0x4\n\tVEOL                             = 0x6\n\tVEOL2                            = 0x8\n\tVMIN                             = 0x5\n\tVREPRINT                         = 0xb\n\tVSTART                           = 0xd\n\tVSTOP                            = 0xe\n\tVSUSP                            = 0xc\n\tVSWTC                            = 0x9\n\tVT1                              = 0x10000\n\tVTDLY                            = 0x10000\n\tVTIME                            = 0x7\n\tVWERASE                          = 0xa\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x20\n\tXCASE                            = 0x4000\n\tXTABS                            = 0xc00\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{58, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x17\n\tB115200                          = 0x11\n\tB1152000                         = 0x18\n\tB1500000                         = 0x19\n\tB2000000                         = 0x1a\n\tB230400                          = 0x12\n\tB2500000                         = 0x1b\n\tB3000000                         = 0x1c\n\tB3500000                         = 0x1d\n\tB4000000                         = 0x1e\n\tB460800                          = 0x13\n\tB500000                          = 0x14\n\tB57600                           = 0x10\n\tB576000                          = 0x15\n\tB921600                          = 0x16\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1f\n\tBS1                              = 0x8000\n\tBSDLY                            = 0x8000\n\tCBAUD                            = 0xff\n\tCBAUDEX                          = 0x0\n\tCIBAUD                           = 0xff0000\n\tCLOCAL                           = 0x8000\n\tCR1                              = 0x1000\n\tCR2                              = 0x2000\n\tCR3                              = 0x3000\n\tCRDLY                            = 0x3000\n\tCREAD                            = 0x800\n\tCS6                              = 0x100\n\tCS7                              = 0x200\n\tCS8                              = 0x300\n\tCSIZE                            = 0x300\n\tCSTOPB                           = 0x400\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x40\n\tECHOE                            = 0x2\n\tECHOK                            = 0x4\n\tECHOKE                           = 0x1\n\tECHONL                           = 0x10\n\tECHOPRT                          = 0x20\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000000\n\tFF1                              = 0x4000\n\tFFDLY                            = 0x4000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x800000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHUPCL                            = 0x4000\n\tICANON                           = 0x100\n\tIEXTEN                           = 0x400\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tISIG                             = 0x80\n\tIUCLC                            = 0x1000\n\tIXOFF                            = 0x400\n\tIXON                             = 0x200\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x80\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x40\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMCL_ONFAULT                      = 0x8000\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNL2                              = 0x200\n\tNL3                              = 0x300\n\tNLDLY                            = 0x300\n\tNOFLSH                           = 0x80000000\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x4\n\tONLCR                            = 0x2\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x20000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x1000\n\tPARODD                           = 0x2000\n\tPENDIN                           = 0x20000000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPROT_SAO                         = 0x10\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_GETEVRREGS                = 0x14\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETREGS64                 = 0x16\n\tPTRACE_GETVRREGS                 = 0x12\n\tPTRACE_GETVSRREGS                = 0x1b\n\tPTRACE_GET_DEBUGREG              = 0x19\n\tPTRACE_SETEVRREGS                = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETREGS64                 = 0x17\n\tPTRACE_SETVRREGS                 = 0x13\n\tPTRACE_SETVSRREGS                = 0x1c\n\tPTRACE_SET_DEBUGREG              = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x100\n\tPTRACE_SYSEMU                    = 0x1d\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x1e\n\tPT_CCR                           = 0x26\n\tPT_CTR                           = 0x23\n\tPT_DAR                           = 0x29\n\tPT_DSCR                          = 0x2c\n\tPT_DSISR                         = 0x2a\n\tPT_FPR0                          = 0x30\n\tPT_FPSCR                         = 0x50\n\tPT_LNK                           = 0x24\n\tPT_MSR                           = 0x21\n\tPT_NIP                           = 0x20\n\tPT_ORIG_R3                       = 0x22\n\tPT_R0                            = 0x0\n\tPT_R1                            = 0x1\n\tPT_R10                           = 0xa\n\tPT_R11                           = 0xb\n\tPT_R12                           = 0xc\n\tPT_R13                           = 0xd\n\tPT_R14                           = 0xe\n\tPT_R15                           = 0xf\n\tPT_R16                           = 0x10\n\tPT_R17                           = 0x11\n\tPT_R18                           = 0x12\n\tPT_R19                           = 0x13\n\tPT_R2                            = 0x2\n\tPT_R20                           = 0x14\n\tPT_R21                           = 0x15\n\tPT_R22                           = 0x16\n\tPT_R23                           = 0x17\n\tPT_R24                           = 0x18\n\tPT_R25                           = 0x19\n\tPT_R26                           = 0x1a\n\tPT_R27                           = 0x1b\n\tPT_R28                           = 0x1c\n\tPT_R29                           = 0x1d\n\tPT_R3                            = 0x3\n\tPT_R30                           = 0x1e\n\tPT_R31                           = 0x1f\n\tPT_R4                            = 0x4\n\tPT_R5                            = 0x5\n\tPT_R6                            = 0x6\n\tPT_R7                            = 0x7\n\tPT_R8                            = 0x8\n\tPT_R9                            = 0x9\n\tPT_REGS_COUNT                    = 0x2c\n\tPT_RESULT                        = 0x2b\n\tPT_SOFTE                         = 0x27\n\tPT_TRAP                          = 0x28\n\tPT_VR0                           = 0x52\n\tPT_VRSAVE                        = 0x94\n\tPT_VSCR                          = 0x93\n\tPT_VSR0                          = 0x96\n\tPT_VSR31                         = 0xd4\n\tPT_XER                           = 0x25\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x4004667f\n\tSIOCOUTQ                         = 0x40047473\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x14\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x15\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x10\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x12\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x12\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x11\n\tSO_SNDTIMEO                      = 0x13\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x13\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x400\n\tTAB2                             = 0x800\n\tTAB3                             = 0xc00\n\tTABDLY                           = 0xc00\n\tTCFLSH                           = 0x2000741f\n\tTCGETA                           = 0x40147417\n\tTCGETS                           = 0x402c7413\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x2000741d\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x80147418\n\tTCSETAF                          = 0x8014741c\n\tTCSETAW                          = 0x80147419\n\tTCSETS                           = 0x802c7414\n\tTCSETSF                          = 0x802c7416\n\tTCSETSW                          = 0x802c7415\n\tTCXONC                           = 0x2000741e\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETC                         = 0x40067412\n\tTIOCGETD                         = 0x5424\n\tTIOCGETP                         = 0x40067408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGLTC                         = 0x40067474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x4004667f\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_LOOP                       = 0x8000\n\tTIOCM_OUT1                       = 0x2000\n\tTIOCM_OUT2                       = 0x4000\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x40047473\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETC                         = 0x80067411\n\tTIOCSETD                         = 0x5423\n\tTIOCSETN                         = 0x8006740a\n\tTIOCSETP                         = 0x80067409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSLTC                         = 0x80067475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTART                        = 0x2000746e\n\tTIOCSTI                          = 0x5412\n\tTIOCSTOP                         = 0x2000746f\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x400000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0x10\n\tVEOF                             = 0x4\n\tVEOL                             = 0x6\n\tVEOL2                            = 0x8\n\tVMIN                             = 0x5\n\tVREPRINT                         = 0xb\n\tVSTART                           = 0xd\n\tVSTOP                            = 0xe\n\tVSUSP                            = 0xc\n\tVSWTC                            = 0x9\n\tVT1                              = 0x10000\n\tVTDLY                            = 0x10000\n\tVTIME                            = 0x7\n\tVWERASE                          = 0xa\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4000\n\tXTABS                            = 0xc00\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{58, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/ppc64le/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64le && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/ppc64le/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x17\n\tB115200                          = 0x11\n\tB1152000                         = 0x18\n\tB1500000                         = 0x19\n\tB2000000                         = 0x1a\n\tB230400                          = 0x12\n\tB2500000                         = 0x1b\n\tB3000000                         = 0x1c\n\tB3500000                         = 0x1d\n\tB4000000                         = 0x1e\n\tB460800                          = 0x13\n\tB500000                          = 0x14\n\tB57600                           = 0x10\n\tB576000                          = 0x15\n\tB921600                          = 0x16\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1f\n\tBS1                              = 0x8000\n\tBSDLY                            = 0x8000\n\tCBAUD                            = 0xff\n\tCBAUDEX                          = 0x0\n\tCIBAUD                           = 0xff0000\n\tCLOCAL                           = 0x8000\n\tCR1                              = 0x1000\n\tCR2                              = 0x2000\n\tCR3                              = 0x3000\n\tCRDLY                            = 0x3000\n\tCREAD                            = 0x800\n\tCS6                              = 0x100\n\tCS7                              = 0x200\n\tCS8                              = 0x300\n\tCSIZE                            = 0x300\n\tCSTOPB                           = 0x400\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x40\n\tECHOE                            = 0x2\n\tECHOK                            = 0x4\n\tECHOKE                           = 0x1\n\tECHONL                           = 0x10\n\tECHOPRT                          = 0x20\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000000\n\tFF1                              = 0x4000\n\tFFDLY                            = 0x4000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x800000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0xc\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0xd\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0xe\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHUPCL                            = 0x4000\n\tICANON                           = 0x100\n\tIEXTEN                           = 0x400\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tISIG                             = 0x80\n\tIUCLC                            = 0x1000\n\tIXOFF                            = 0x400\n\tIXON                             = 0x200\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x80\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x40\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMCL_ONFAULT                      = 0x8000\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNL2                              = 0x200\n\tNL3                              = 0x300\n\tNLDLY                            = 0x300\n\tNOFLSH                           = 0x80000000\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x4\n\tONLCR                            = 0x2\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x20000\n\tO_DIRECTORY                      = 0x4000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x8000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x404000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x1000\n\tPARODD                           = 0x2000\n\tPENDIN                           = 0x20000000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPROT_SAO                         = 0x10\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_GETEVRREGS                = 0x14\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETREGS64                 = 0x16\n\tPTRACE_GETVRREGS                 = 0x12\n\tPTRACE_GETVSRREGS                = 0x1b\n\tPTRACE_GET_DEBUGREG              = 0x19\n\tPTRACE_SETEVRREGS                = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETREGS64                 = 0x17\n\tPTRACE_SETVRREGS                 = 0x13\n\tPTRACE_SETVSRREGS                = 0x1c\n\tPTRACE_SET_DEBUGREG              = 0x1a\n\tPTRACE_SINGLEBLOCK               = 0x100\n\tPTRACE_SYSEMU                    = 0x1d\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x1e\n\tPT_CCR                           = 0x26\n\tPT_CTR                           = 0x23\n\tPT_DAR                           = 0x29\n\tPT_DSCR                          = 0x2c\n\tPT_DSISR                         = 0x2a\n\tPT_FPR0                          = 0x30\n\tPT_FPSCR                         = 0x50\n\tPT_LNK                           = 0x24\n\tPT_MSR                           = 0x21\n\tPT_NIP                           = 0x20\n\tPT_ORIG_R3                       = 0x22\n\tPT_R0                            = 0x0\n\tPT_R1                            = 0x1\n\tPT_R10                           = 0xa\n\tPT_R11                           = 0xb\n\tPT_R12                           = 0xc\n\tPT_R13                           = 0xd\n\tPT_R14                           = 0xe\n\tPT_R15                           = 0xf\n\tPT_R16                           = 0x10\n\tPT_R17                           = 0x11\n\tPT_R18                           = 0x12\n\tPT_R19                           = 0x13\n\tPT_R2                            = 0x2\n\tPT_R20                           = 0x14\n\tPT_R21                           = 0x15\n\tPT_R22                           = 0x16\n\tPT_R23                           = 0x17\n\tPT_R24                           = 0x18\n\tPT_R25                           = 0x19\n\tPT_R26                           = 0x1a\n\tPT_R27                           = 0x1b\n\tPT_R28                           = 0x1c\n\tPT_R29                           = 0x1d\n\tPT_R3                            = 0x3\n\tPT_R30                           = 0x1e\n\tPT_R31                           = 0x1f\n\tPT_R4                            = 0x4\n\tPT_R5                            = 0x5\n\tPT_R6                            = 0x6\n\tPT_R7                            = 0x7\n\tPT_R8                            = 0x8\n\tPT_R9                            = 0x9\n\tPT_REGS_COUNT                    = 0x2c\n\tPT_RESULT                        = 0x2b\n\tPT_SOFTE                         = 0x27\n\tPT_TRAP                          = 0x28\n\tPT_VR0                           = 0x52\n\tPT_VRSAVE                        = 0x94\n\tPT_VSCR                          = 0x93\n\tPT_VSR0                          = 0x96\n\tPT_VSR31                         = 0xd4\n\tPT_XER                           = 0x25\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x4004667f\n\tSIOCOUTQ                         = 0x40047473\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x14\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x15\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x10\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x12\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x12\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x11\n\tSO_SNDTIMEO                      = 0x13\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x13\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x400\n\tTAB2                             = 0x800\n\tTAB3                             = 0xc00\n\tTABDLY                           = 0xc00\n\tTCFLSH                           = 0x2000741f\n\tTCGETA                           = 0x40147417\n\tTCGETS                           = 0x402c7413\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x2000741d\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x80147418\n\tTCSETAF                          = 0x8014741c\n\tTCSETAW                          = 0x80147419\n\tTCSETS                           = 0x802c7414\n\tTCSETSF                          = 0x802c7416\n\tTCSETSW                          = 0x802c7415\n\tTCXONC                           = 0x2000741e\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETC                         = 0x40067412\n\tTIOCGETD                         = 0x5424\n\tTIOCGETP                         = 0x40067408\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x40285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGLTC                         = 0x40067474\n\tTIOCGPGRP                        = 0x40047477\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40045430\n\tTIOCGPTPEER                      = 0x20005441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x4004667f\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_LOOP                       = 0x8000\n\tTIOCM_OUT1                       = 0x2000\n\tTIOCM_OUT2                       = 0x4000\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x40047473\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETC                         = 0x80067411\n\tTIOCSETD                         = 0x5423\n\tTIOCSETN                         = 0x8006740a\n\tTIOCSETP                         = 0x80067409\n\tTIOCSIG                          = 0x80045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSLTC                         = 0x80067475\n\tTIOCSPGRP                        = 0x80047476\n\tTIOCSPTLCK                       = 0x80045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTART                        = 0x2000746e\n\tTIOCSTI                          = 0x5412\n\tTIOCSTOP                         = 0x2000746f\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x400000\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0x10\n\tVEOF                             = 0x4\n\tVEOL                             = 0x6\n\tVEOL2                            = 0x8\n\tVMIN                             = 0x5\n\tVREPRINT                         = 0xb\n\tVSTART                           = 0xd\n\tVSTOP                            = 0xe\n\tVSUSP                            = 0xc\n\tVSWTC                            = 0x9\n\tVT1                              = 0x10000\n\tVTDLY                            = 0x10000\n\tVTIME                            = 0x7\n\tVWERASE                          = 0xa\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4000\n\tXTABS                            = 0xc00\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x3a)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{58, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/riscv64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/riscv64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_GETFDPIC                  = 0x21\n\tPTRACE_GETFDPIC_EXEC             = 0x0\n\tPTRACE_GETFDPIC_INTERP           = 0x1\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/s390x/include -fsigned-char\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build s390x && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/s390x/include -fsigned-char _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x127a\n\tBLKBSZGET                        = 0x80081270\n\tBLKBSZSET                        = 0x40081271\n\tBLKDISCARD                       = 0x1277\n\tBLKDISCARDZEROES                 = 0x127c\n\tBLKFLSBUF                        = 0x1261\n\tBLKFRAGET                        = 0x1265\n\tBLKFRASET                        = 0x1264\n\tBLKGETDISKSEQ                    = 0x80081280\n\tBLKGETSIZE                       = 0x1260\n\tBLKGETSIZE64                     = 0x80081272\n\tBLKIOMIN                         = 0x1278\n\tBLKIOOPT                         = 0x1279\n\tBLKPBSZGET                       = 0x127b\n\tBLKRAGET                         = 0x1263\n\tBLKRASET                         = 0x1262\n\tBLKROGET                         = 0x125e\n\tBLKROSET                         = 0x125d\n\tBLKROTATIONAL                    = 0x127e\n\tBLKRRPART                        = 0x125f\n\tBLKSECDISCARD                    = 0x127d\n\tBLKSECTGET                       = 0x1267\n\tBLKSECTSET                       = 0x1266\n\tBLKSSZGET                        = 0x1268\n\tBLKZEROOUT                       = 0x127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x81484d11\n\tECCGETSTATS                      = 0x80104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x80000\n\tEFD_NONBLOCK                     = 0x800\n\tEPIOCGPARAMS                     = 0x80088a02\n\tEPIOCSPARAMS                     = 0x40088a01\n\tEPOLL_CLOEXEC                    = 0x80000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x40049409\n\tFICLONERANGE                     = 0x4020940d\n\tFLUSHO                           = 0x1000\n\tFS_IOC_ENABLE_VERITY             = 0x40806685\n\tFS_IOC_GETFLAGS                  = 0x80086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x8010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x400c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x40106614\n\tFS_IOC_SETFLAGS                  = 0x40086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x800c6613\n\tF_GETLK                          = 0x5\n\tF_GETLK64                        = 0x5\n\tF_GETOWN                         = 0x9\n\tF_RDLCK                          = 0x0\n\tF_SETLK                          = 0x6\n\tF_SETLK64                        = 0x6\n\tF_SETLKW                         = 0x7\n\tF_SETLKW64                       = 0x7\n\tF_SETOWN                         = 0x8\n\tF_UNLCK                          = 0x2\n\tF_WRLCK                          = 0x1\n\tHIDIOCGRAWINFO                   = 0x80084803\n\tHIDIOCGRDESC                     = 0x90044802\n\tHIDIOCGRDESCSIZE                 = 0x80044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x80000\n\tIN_NONBLOCK                      = 0x800\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x7b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x100\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x2000\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x4000\n\tMAP_POPULATE                     = 0x8000\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x1\n\tMCL_FUTURE                       = 0x2\n\tMCL_ONFAULT                      = 0x4\n\tMEMERASE                         = 0x40084d02\n\tMEMERASE64                       = 0x40104d14\n\tMEMGETBADBLOCK                   = 0x40084d0b\n\tMEMGETINFO                       = 0x80204d01\n\tMEMGETOOBSEL                     = 0x80c84d0a\n\tMEMGETREGIONCOUNT                = 0x80044d07\n\tMEMISLOCKED                      = 0x80084d17\n\tMEMLOCK                          = 0x40084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x40084d0c\n\tMEMUNLOCK                        = 0x40084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x4d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x8008b705\n\tNS_GET_NSTYPE                    = 0xb703\n\tNS_GET_OWNER_UID                 = 0xb704\n\tNS_GET_PARENT                    = 0xb702\n\tNS_GET_PID_FROM_PIDNS            = 0x8004b706\n\tNS_GET_PID_IN_PIDNS              = 0x8004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x8004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x8004b709\n\tNS_GET_USERNS                    = 0xb701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x400c4d19\n\tOTPGETREGIONCOUNT                = 0x40044d0e\n\tOTPGETREGIONINFO                 = 0x400c4d0f\n\tOTPLOCK                          = 0x800c4d10\n\tOTPSELECT                        = 0x80044d0d\n\tO_APPEND                         = 0x400\n\tO_ASYNC                          = 0x2000\n\tO_CLOEXEC                        = 0x80000\n\tO_CREAT                          = 0x40\n\tO_DIRECT                         = 0x4000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x1000\n\tO_EXCL                           = 0x80\n\tO_FSYNC                          = 0x101000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x800\n\tO_NOATIME                        = 0x40000\n\tO_NOCTTY                         = 0x100\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x800\n\tO_PATH                           = 0x200000\n\tO_RSYNC                          = 0x101000\n\tO_SYNC                           = 0x101000\n\tO_TMPFILE                        = 0x410000\n\tO_TRUNC                          = 0x200\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x2401\n\tPERF_EVENT_IOC_ENABLE            = 0x2400\n\tPERF_EVENT_IOC_ID                = 0x80082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x40042409\n\tPERF_EVENT_IOC_PERIOD            = 0x40082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x2402\n\tPERF_EVENT_IOC_RESET             = 0x2403\n\tPERF_EVENT_IOC_SET_BPF           = 0x40042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x40082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x2405\n\tPPPIOCATTACH                     = 0x4004743d\n\tPPPIOCATTCHAN                    = 0x40047438\n\tPPPIOCBRIDGECHAN                 = 0x40047435\n\tPPPIOCCONNECT                    = 0x4004743a\n\tPPPIOCDETACH                     = 0x4004743c\n\tPPPIOCDISCONN                    = 0x7439\n\tPPPIOCGASYNCMAP                  = 0x80047458\n\tPPPIOCGCHAN                      = 0x80047437\n\tPPPIOCGDEBUG                     = 0x80047441\n\tPPPIOCGFLAGS                     = 0x8004745a\n\tPPPIOCGIDLE                      = 0x8010743f\n\tPPPIOCGIDLE32                    = 0x8008743f\n\tPPPIOCGIDLE64                    = 0x8010743f\n\tPPPIOCGL2TPSTATS                 = 0x80487436\n\tPPPIOCGMRU                       = 0x80047453\n\tPPPIOCGRASYNCMAP                 = 0x80047455\n\tPPPIOCGUNIT                      = 0x80047456\n\tPPPIOCGXASYNCMAP                 = 0x80207450\n\tPPPIOCSACTIVE                    = 0x40107446\n\tPPPIOCSASYNCMAP                  = 0x40047457\n\tPPPIOCSCOMPRESS                  = 0x4010744d\n\tPPPIOCSDEBUG                     = 0x40047440\n\tPPPIOCSFLAGS                     = 0x40047459\n\tPPPIOCSMAXCID                    = 0x40047451\n\tPPPIOCSMRRU                      = 0x4004743b\n\tPPPIOCSMRU                       = 0x40047452\n\tPPPIOCSNPMODE                    = 0x4008744b\n\tPPPIOCSPASS                      = 0x40107447\n\tPPPIOCSRASYNCMAP                 = 0x40047454\n\tPPPIOCSXASYNCMAP                 = 0x4020744f\n\tPPPIOCUNBRIDGECHAN               = 0x7434\n\tPPPIOCXFERUNIT                   = 0x744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_DISABLE_TE                = 0x5010\n\tPTRACE_ENABLE_TE                 = 0x5009\n\tPTRACE_GET_LAST_BREAK            = 0x5006\n\tPTRACE_OLDSETOPTIONS             = 0x15\n\tPTRACE_PEEKDATA_AREA             = 0x5003\n\tPTRACE_PEEKTEXT_AREA             = 0x5002\n\tPTRACE_PEEKUSR_AREA              = 0x5000\n\tPTRACE_PEEK_SYSTEM_CALL          = 0x5007\n\tPTRACE_POKEDATA_AREA             = 0x5005\n\tPTRACE_POKETEXT_AREA             = 0x5004\n\tPTRACE_POKEUSR_AREA              = 0x5001\n\tPTRACE_POKE_SYSTEM_CALL          = 0x5008\n\tPTRACE_PROT                      = 0x15\n\tPTRACE_SINGLEBLOCK               = 0xc\n\tPTRACE_SYSEMU                    = 0x1f\n\tPTRACE_SYSEMU_SINGLESTEP         = 0x20\n\tPTRACE_TE_ABORT_RAND             = 0x5011\n\tPT_ACR0                          = 0x90\n\tPT_ACR1                          = 0x94\n\tPT_ACR10                         = 0xb8\n\tPT_ACR11                         = 0xbc\n\tPT_ACR12                         = 0xc0\n\tPT_ACR13                         = 0xc4\n\tPT_ACR14                         = 0xc8\n\tPT_ACR15                         = 0xcc\n\tPT_ACR2                          = 0x98\n\tPT_ACR3                          = 0x9c\n\tPT_ACR4                          = 0xa0\n\tPT_ACR5                          = 0xa4\n\tPT_ACR6                          = 0xa8\n\tPT_ACR7                          = 0xac\n\tPT_ACR8                          = 0xb0\n\tPT_ACR9                          = 0xb4\n\tPT_CR_10                         = 0x168\n\tPT_CR_11                         = 0x170\n\tPT_CR_9                          = 0x160\n\tPT_ENDREGS                       = 0x1af\n\tPT_FPC                           = 0xd8\n\tPT_FPR0                          = 0xe0\n\tPT_FPR1                          = 0xe8\n\tPT_FPR10                         = 0x130\n\tPT_FPR11                         = 0x138\n\tPT_FPR12                         = 0x140\n\tPT_FPR13                         = 0x148\n\tPT_FPR14                         = 0x150\n\tPT_FPR15                         = 0x158\n\tPT_FPR2                          = 0xf0\n\tPT_FPR3                          = 0xf8\n\tPT_FPR4                          = 0x100\n\tPT_FPR5                          = 0x108\n\tPT_FPR6                          = 0x110\n\tPT_FPR7                          = 0x118\n\tPT_FPR8                          = 0x120\n\tPT_FPR9                          = 0x128\n\tPT_GPR0                          = 0x10\n\tPT_GPR1                          = 0x18\n\tPT_GPR10                         = 0x60\n\tPT_GPR11                         = 0x68\n\tPT_GPR12                         = 0x70\n\tPT_GPR13                         = 0x78\n\tPT_GPR14                         = 0x80\n\tPT_GPR15                         = 0x88\n\tPT_GPR2                          = 0x20\n\tPT_GPR3                          = 0x28\n\tPT_GPR4                          = 0x30\n\tPT_GPR5                          = 0x38\n\tPT_GPR6                          = 0x40\n\tPT_GPR7                          = 0x48\n\tPT_GPR8                          = 0x50\n\tPT_GPR9                          = 0x58\n\tPT_IEEE_IP                       = 0x1a8\n\tPT_LASTOFF                       = 0x1a8\n\tPT_ORIGGPR2                      = 0xd0\n\tPT_PSWADDR                       = 0x8\n\tPT_PSWMASK                       = 0x0\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x7\n\tRLIMIT_NPROC                     = 0x6\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x40085203\n\tRNDADDTOENTCNT                   = 0x40045201\n\tRNDCLEARPOOL                     = 0x5206\n\tRNDGETENTCNT                     = 0x80045200\n\tRNDGETPOOL                       = 0x80085202\n\tRNDRESEEDCRNG                    = 0x5207\n\tRNDZAPENTCNT                     = 0x5204\n\tRTC_AIE_OFF                      = 0x7002\n\tRTC_AIE_ON                       = 0x7001\n\tRTC_ALM_READ                     = 0x80247008\n\tRTC_ALM_SET                      = 0x40247007\n\tRTC_EPOCH_READ                   = 0x8008700d\n\tRTC_EPOCH_SET                    = 0x4008700e\n\tRTC_IRQP_READ                    = 0x8008700b\n\tRTC_IRQP_SET                     = 0x4008700c\n\tRTC_PARAM_GET                    = 0x40187013\n\tRTC_PARAM_SET                    = 0x40187014\n\tRTC_PIE_OFF                      = 0x7006\n\tRTC_PIE_ON                       = 0x7005\n\tRTC_PLL_GET                      = 0x80207011\n\tRTC_PLL_SET                      = 0x40207012\n\tRTC_RD_TIME                      = 0x80247009\n\tRTC_SET_TIME                     = 0x4024700a\n\tRTC_UIE_OFF                      = 0x7004\n\tRTC_UIE_ON                       = 0x7003\n\tRTC_VL_CLR                       = 0x7014\n\tRTC_VL_READ                      = 0x80047013\n\tRTC_WIE_OFF                      = 0x7010\n\tRTC_WIE_ON                       = 0x700f\n\tRTC_WKALM_RD                     = 0x80287010\n\tRTC_WKALM_SET                    = 0x4028700f\n\tSCM_TIMESTAMPING                 = 0x25\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x36\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3a\n\tSCM_TIMESTAMPNS                  = 0x23\n\tSCM_TXTIME                       = 0x3d\n\tSCM_WIFI_STATUS                  = 0x29\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x40182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x40082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x40082104\n\tSFD_CLOEXEC                      = 0x80000\n\tSFD_NONBLOCK                     = 0x800\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x80108907\n\tSIOCGSTAMP_NEW                   = 0x80108906\n\tSIOCINQ                          = 0x541b\n\tSIOCOUTQ                         = 0x5411\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x80000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x800\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0x1\n\tSO_ACCEPTCONN                    = 0x1e\n\tSO_ATTACH_BPF                    = 0x32\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x33\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x34\n\tSO_BINDTODEVICE                  = 0x19\n\tSO_BINDTOIFINDEX                 = 0x3e\n\tSO_BPF_EXTENSIONS                = 0x30\n\tSO_BROADCAST                     = 0x6\n\tSO_BSDCOMPAT                     = 0xe\n\tSO_BUF_LOCK                      = 0x48\n\tSO_BUSY_POLL                     = 0x2e\n\tSO_BUSY_POLL_BUDGET              = 0x46\n\tSO_CNX_ADVICE                    = 0x35\n\tSO_COOKIE                        = 0x39\n\tSO_DETACH_REUSEPORT_BPF          = 0x44\n\tSO_DOMAIN                        = 0x27\n\tSO_DONTROUTE                     = 0x5\n\tSO_ERROR                         = 0x4\n\tSO_INCOMING_CPU                  = 0x31\n\tSO_INCOMING_NAPI_ID              = 0x38\n\tSO_KEEPALIVE                     = 0x9\n\tSO_LINGER                        = 0xd\n\tSO_LOCK_FILTER                   = 0x2c\n\tSO_MARK                          = 0x24\n\tSO_MAX_PACING_RATE               = 0x2f\n\tSO_MEMINFO                       = 0x37\n\tSO_NETNS_COOKIE                  = 0x47\n\tSO_NOFCS                         = 0x2b\n\tSO_OOBINLINE                     = 0xa\n\tSO_PASSCRED                      = 0x10\n\tSO_PASSPIDFD                     = 0x4c\n\tSO_PASSSEC                       = 0x22\n\tSO_PEEK_OFF                      = 0x2a\n\tSO_PEERCRED                      = 0x11\n\tSO_PEERGROUPS                    = 0x3b\n\tSO_PEERPIDFD                     = 0x4d\n\tSO_PEERSEC                       = 0x1f\n\tSO_PREFER_BUSY_POLL              = 0x45\n\tSO_PROTOCOL                      = 0x26\n\tSO_RCVBUF                        = 0x8\n\tSO_RCVBUFFORCE                   = 0x21\n\tSO_RCVLOWAT                      = 0x12\n\tSO_RCVMARK                       = 0x4b\n\tSO_RCVTIMEO                      = 0x14\n\tSO_RCVTIMEO_NEW                  = 0x42\n\tSO_RCVTIMEO_OLD                  = 0x14\n\tSO_RESERVE_MEM                   = 0x49\n\tSO_REUSEADDR                     = 0x2\n\tSO_REUSEPORT                     = 0xf\n\tSO_RXQ_OVFL                      = 0x28\n\tSO_SECURITY_AUTHENTICATION       = 0x16\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x18\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x17\n\tSO_SELECT_ERR_QUEUE              = 0x2d\n\tSO_SNDBUF                        = 0x7\n\tSO_SNDBUFFORCE                   = 0x20\n\tSO_SNDLOWAT                      = 0x13\n\tSO_SNDTIMEO                      = 0x15\n\tSO_SNDTIMEO_NEW                  = 0x43\n\tSO_SNDTIMEO_OLD                  = 0x15\n\tSO_TIMESTAMPING                  = 0x25\n\tSO_TIMESTAMPING_NEW              = 0x41\n\tSO_TIMESTAMPING_OLD              = 0x25\n\tSO_TIMESTAMPNS                   = 0x23\n\tSO_TIMESTAMPNS_NEW               = 0x40\n\tSO_TIMESTAMPNS_OLD               = 0x23\n\tSO_TIMESTAMP_NEW                 = 0x3f\n\tSO_TXREHASH                      = 0x4a\n\tSO_TXTIME                        = 0x3d\n\tSO_TYPE                          = 0x3\n\tSO_WIFI_STATUS                   = 0x29\n\tSO_ZEROCOPY                      = 0x3c\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x540b\n\tTCGETA                           = 0x5405\n\tTCGETS                           = 0x5401\n\tTCGETS2                          = 0x802c542a\n\tTCGETX                           = 0x5432\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x5409\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x5406\n\tTCSETAF                          = 0x5408\n\tTCSETAW                          = 0x5407\n\tTCSETS                           = 0x5402\n\tTCSETS2                          = 0x402c542b\n\tTCSETSF                          = 0x5404\n\tTCSETSF2                         = 0x402c542d\n\tTCSETSW                          = 0x5403\n\tTCSETSW2                         = 0x402c542c\n\tTCSETX                           = 0x5433\n\tTCSETXF                          = 0x5434\n\tTCSETXW                          = 0x5435\n\tTCXONC                           = 0x540a\n\tTFD_CLOEXEC                      = 0x80000\n\tTFD_NONBLOCK                     = 0x800\n\tTIOCCBRK                         = 0x5428\n\tTIOCCONS                         = 0x541d\n\tTIOCEXCL                         = 0x540c\n\tTIOCGDEV                         = 0x80045432\n\tTIOCGETD                         = 0x5424\n\tTIOCGEXCL                        = 0x80045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x80285442\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x540f\n\tTIOCGPKT                         = 0x80045438\n\tTIOCGPTLCK                       = 0x80045439\n\tTIOCGPTN                         = 0x80045430\n\tTIOCGPTPEER                      = 0x5441\n\tTIOCGRS485                       = 0x542e\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x5429\n\tTIOCGSOFTCAR                     = 0x5419\n\tTIOCGWINSZ                       = 0x5413\n\tTIOCINQ                          = 0x541b\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x5417\n\tTIOCMBIS                         = 0x5416\n\tTIOCMGET                         = 0x5415\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x5418\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x5422\n\tTIOCNXCL                         = 0x540d\n\tTIOCOUTQ                         = 0x5411\n\tTIOCPKT                          = 0x5420\n\tTIOCSBRK                         = 0x5427\n\tTIOCSCTTY                        = 0x540e\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSER_TEMT                     = 0x1\n\tTIOCSETD                         = 0x5423\n\tTIOCSIG                          = 0x40045436\n\tTIOCSISO7816                     = 0xc0285443\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x5410\n\tTIOCSPTLCK                       = 0x40045431\n\tTIOCSRS485                       = 0x542f\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x541a\n\tTIOCSTI                          = 0x5412\n\tTIOCSWINSZ                       = 0x5414\n\tTIOCVHANGUP                      = 0x5437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x401054d5\n\tTUNDETACHFILTER                  = 0x401054d6\n\tTUNGETDEVNETNS                   = 0x54e3\n\tTUNGETFEATURES                   = 0x800454cf\n\tTUNGETFILTER                     = 0x801054db\n\tTUNGETIFF                        = 0x800454d2\n\tTUNGETSNDBUF                     = 0x800454d3\n\tTUNGETVNETBE                     = 0x800454df\n\tTUNGETVNETHDRSZ                  = 0x800454d7\n\tTUNGETVNETLE                     = 0x800454dd\n\tTUNSETCARRIER                    = 0x400454e2\n\tTUNSETDEBUG                      = 0x400454c9\n\tTUNSETFILTEREBPF                 = 0x800454e1\n\tTUNSETGROUP                      = 0x400454ce\n\tTUNSETIFF                        = 0x400454ca\n\tTUNSETIFINDEX                    = 0x400454da\n\tTUNSETLINK                       = 0x400454cd\n\tTUNSETNOCSUM                     = 0x400454c8\n\tTUNSETOFFLOAD                    = 0x400454d0\n\tTUNSETOWNER                      = 0x400454cc\n\tTUNSETPERSIST                    = 0x400454cb\n\tTUNSETQUEUE                      = 0x400454d9\n\tTUNSETSNDBUF                     = 0x400454d4\n\tTUNSETSTEERINGEBPF               = 0x800454e0\n\tTUNSETTXFILTER                   = 0x400454d1\n\tTUNSETVNETBE                     = 0x400454de\n\tTUNSETVNETHDRSZ                  = 0x400454d8\n\tTUNSETVNETLE                     = 0x400454dc\n\tUBI_IOCATT                       = 0x40186f40\n\tUBI_IOCDET                       = 0x40046f41\n\tUBI_IOCEBCH                      = 0x40044f02\n\tUBI_IOCEBER                      = 0x40044f01\n\tUBI_IOCEBISMAP                   = 0x80044f05\n\tUBI_IOCEBMAP                     = 0x40084f03\n\tUBI_IOCEBUNMAP                   = 0x40044f04\n\tUBI_IOCMKVOL                     = 0x40986f00\n\tUBI_IOCRMVOL                     = 0x40046f01\n\tUBI_IOCRNVOL                     = 0x51106f03\n\tUBI_IOCRPEB                      = 0x40046f04\n\tUBI_IOCRSVOL                     = 0x400c6f02\n\tUBI_IOCSETVOLPROP                = 0x40104f06\n\tUBI_IOCSPEB                      = 0x40046f05\n\tUBI_IOCVOLCRBLK                  = 0x40804f07\n\tUBI_IOCVOLRMBLK                  = 0x4f08\n\tUBI_IOCVOLUP                     = 0x40084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x80045702\n\tWDIOC_GETPRETIMEOUT              = 0x80045709\n\tWDIOC_GETSTATUS                  = 0x80045701\n\tWDIOC_GETSUPPORT                 = 0x80285700\n\tWDIOC_GETTEMP                    = 0x80045703\n\tWDIOC_GETTIMELEFT                = 0x8004570a\n\tWDIOC_GETTIMEOUT                 = 0x80045707\n\tWDIOC_KEEPALIVE                  = 0x80045705\n\tWDIOC_SETOPTIONS                 = 0x80045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x80804804\n\t_HIDIOCGRAWPHYS                  = 0x80404805\n\t_HIDIOCGRAWUNIQ                  = 0x80404808\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x62)\n\tEADDRNOTAVAIL   = syscall.Errno(0x63)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x61)\n\tEALREADY        = syscall.Errno(0x72)\n\tEBADE           = syscall.Errno(0x34)\n\tEBADFD          = syscall.Errno(0x4d)\n\tEBADMSG         = syscall.Errno(0x4a)\n\tEBADR           = syscall.Errno(0x35)\n\tEBADRQC         = syscall.Errno(0x38)\n\tEBADSLT         = syscall.Errno(0x39)\n\tEBFONT          = syscall.Errno(0x3b)\n\tECANCELED       = syscall.Errno(0x7d)\n\tECHRNG          = syscall.Errno(0x2c)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x67)\n\tECONNREFUSED    = syscall.Errno(0x6f)\n\tECONNRESET      = syscall.Errno(0x68)\n\tEDEADLK         = syscall.Errno(0x23)\n\tEDEADLOCK       = syscall.Errno(0x23)\n\tEDESTADDRREQ    = syscall.Errno(0x59)\n\tEDOTDOT         = syscall.Errno(0x49)\n\tEDQUOT          = syscall.Errno(0x7a)\n\tEHOSTDOWN       = syscall.Errno(0x70)\n\tEHOSTUNREACH    = syscall.Errno(0x71)\n\tEHWPOISON       = syscall.Errno(0x85)\n\tEIDRM           = syscall.Errno(0x2b)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x73)\n\tEISCONN         = syscall.Errno(0x6a)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x7f)\n\tEKEYREJECTED    = syscall.Errno(0x81)\n\tEKEYREVOKED     = syscall.Errno(0x80)\n\tEL2HLT          = syscall.Errno(0x33)\n\tEL2NSYNC        = syscall.Errno(0x2d)\n\tEL3HLT          = syscall.Errno(0x2e)\n\tEL3RST          = syscall.Errno(0x2f)\n\tELIBACC         = syscall.Errno(0x4f)\n\tELIBBAD         = syscall.Errno(0x50)\n\tELIBEXEC        = syscall.Errno(0x53)\n\tELIBMAX         = syscall.Errno(0x52)\n\tELIBSCN         = syscall.Errno(0x51)\n\tELNRNG          = syscall.Errno(0x30)\n\tELOOP           = syscall.Errno(0x28)\n\tEMEDIUMTYPE     = syscall.Errno(0x7c)\n\tEMSGSIZE        = syscall.Errno(0x5a)\n\tEMULTIHOP       = syscall.Errno(0x48)\n\tENAMETOOLONG    = syscall.Errno(0x24)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x64)\n\tENETRESET       = syscall.Errno(0x66)\n\tENETUNREACH     = syscall.Errno(0x65)\n\tENOANO          = syscall.Errno(0x37)\n\tENOBUFS         = syscall.Errno(0x69)\n\tENOCSI          = syscall.Errno(0x32)\n\tENODATA         = syscall.Errno(0x3d)\n\tENOKEY          = syscall.Errno(0x7e)\n\tENOLCK          = syscall.Errno(0x25)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEDIUM       = syscall.Errno(0x7b)\n\tENOMSG          = syscall.Errno(0x2a)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x5c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x26)\n\tENOTCONN        = syscall.Errno(0x6b)\n\tENOTEMPTY       = syscall.Errno(0x27)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x83)\n\tENOTSOCK        = syscall.Errno(0x58)\n\tENOTSUP         = syscall.Errno(0x5f)\n\tENOTUNIQ        = syscall.Errno(0x4c)\n\tEOPNOTSUPP      = syscall.Errno(0x5f)\n\tEOVERFLOW       = syscall.Errno(0x4b)\n\tEOWNERDEAD      = syscall.Errno(0x82)\n\tEPFNOSUPPORT    = syscall.Errno(0x60)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x5d)\n\tEPROTOTYPE      = syscall.Errno(0x5b)\n\tEREMCHG         = syscall.Errno(0x4e)\n\tEREMOTE         = syscall.Errno(0x42)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x55)\n\tERFKILL         = syscall.Errno(0x84)\n\tESHUTDOWN       = syscall.Errno(0x6c)\n\tESOCKTNOSUPPORT = syscall.Errno(0x5e)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x74)\n\tESTRPIPE        = syscall.Errno(0x56)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x6e)\n\tETOOMANYREFS    = syscall.Errno(0x6d)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x31)\n\tEUSERS          = syscall.Errno(0x57)\n\tEXFULL          = syscall.Errno(0x36)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0x7)\n\tSIGCHLD   = syscall.Signal(0x11)\n\tSIGCLD    = syscall.Signal(0x11)\n\tSIGCONT   = syscall.Signal(0x12)\n\tSIGIO     = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x1d)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1e)\n\tSIGSTKFLT = syscall.Signal(0x10)\n\tSIGSTOP   = syscall.Signal(0x13)\n\tSIGSYS    = syscall.Signal(0x1f)\n\tSIGTSTP   = syscall.Signal(0x14)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x17)\n\tSIGUSR1   = syscall.Signal(0xa)\n\tSIGUSR2   = syscall.Signal(0xc)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{35, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{36, \"ENAMETOOLONG\", \"file name too long\"},\n\t{37, \"ENOLCK\", \"no locks available\"},\n\t{38, \"ENOSYS\", \"function not implemented\"},\n\t{39, \"ENOTEMPTY\", \"directory not empty\"},\n\t{40, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{42, \"ENOMSG\", \"no message of desired type\"},\n\t{43, \"EIDRM\", \"identifier removed\"},\n\t{44, \"ECHRNG\", \"channel number out of range\"},\n\t{45, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{46, \"EL3HLT\", \"level 3 halted\"},\n\t{47, \"EL3RST\", \"level 3 reset\"},\n\t{48, \"ELNRNG\", \"link number out of range\"},\n\t{49, \"EUNATCH\", \"protocol driver not attached\"},\n\t{50, \"ENOCSI\", \"no CSI structure available\"},\n\t{51, \"EL2HLT\", \"level 2 halted\"},\n\t{52, \"EBADE\", \"invalid exchange\"},\n\t{53, \"EBADR\", \"invalid request descriptor\"},\n\t{54, \"EXFULL\", \"exchange full\"},\n\t{55, \"ENOANO\", \"no anode\"},\n\t{56, \"EBADRQC\", \"invalid request code\"},\n\t{57, \"EBADSLT\", \"invalid slot\"},\n\t{59, \"EBFONT\", \"bad font file format\"},\n\t{60, \"ENOSTR\", \"device not a stream\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of streams resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"EMULTIHOP\", \"multihop attempted\"},\n\t{73, \"EDOTDOT\", \"RFS specific error\"},\n\t{74, \"EBADMSG\", \"bad message\"},\n\t{75, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{76, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{77, \"EBADFD\", \"file descriptor in bad state\"},\n\t{78, \"EREMCHG\", \"remote address changed\"},\n\t{79, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{80, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{81, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{82, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{83, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{84, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{85, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{86, \"ESTRPIPE\", \"streams pipe error\"},\n\t{87, \"EUSERS\", \"too many users\"},\n\t{88, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{89, \"EDESTADDRREQ\", \"destination address required\"},\n\t{90, \"EMSGSIZE\", \"message too long\"},\n\t{91, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{92, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{93, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{94, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{95, \"ENOTSUP\", \"operation not supported\"},\n\t{96, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{97, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{98, \"EADDRINUSE\", \"address already in use\"},\n\t{99, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{100, \"ENETDOWN\", \"network is down\"},\n\t{101, \"ENETUNREACH\", \"network is unreachable\"},\n\t{102, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{103, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{104, \"ECONNRESET\", \"connection reset by peer\"},\n\t{105, \"ENOBUFS\", \"no buffer space available\"},\n\t{106, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{107, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{108, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{109, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{110, \"ETIMEDOUT\", \"connection timed out\"},\n\t{111, \"ECONNREFUSED\", \"connection refused\"},\n\t{112, \"EHOSTDOWN\", \"host is down\"},\n\t{113, \"EHOSTUNREACH\", \"no route to host\"},\n\t{114, \"EALREADY\", \"operation already in progress\"},\n\t{115, \"EINPROGRESS\", \"operation now in progress\"},\n\t{116, \"ESTALE\", \"stale file handle\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EDQUOT\", \"disk quota exceeded\"},\n\t{123, \"ENOMEDIUM\", \"no medium found\"},\n\t{124, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{125, \"ECANCELED\", \"operation canceled\"},\n\t{126, \"ENOKEY\", \"required key not available\"},\n\t{127, \"EKEYEXPIRED\", \"key has expired\"},\n\t{128, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{129, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{130, \"EOWNERDEAD\", \"owner died\"},\n\t{131, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{132, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{133, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGBUS\", \"bus error\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGUSR1\", \"user defined signal 1\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGUSR2\", \"user defined signal 2\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGSTKFLT\", \"stack fault\"},\n\t{17, \"SIGCHLD\", \"child exited\"},\n\t{18, \"SIGCONT\", \"continued\"},\n\t{19, \"SIGSTOP\", \"stopped (signal)\"},\n\t{20, \"SIGTSTP\", \"stopped\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGURG\", \"urgent I/O condition\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGIO\", \"I/O possible\"},\n\t{30, \"SIGPWR\", \"power failure\"},\n\t{31, \"SIGSYS\", \"bad system call\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go",
    "content": "// mkerrors.sh -Wall -Werror -static -I/tmp/sparc64/include\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build sparc64 && linux\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -Wall -Werror -static -I/tmp/sparc64/include _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tASI_LEON_DFLUSH                  = 0x11\n\tASI_LEON_IFLUSH                  = 0x10\n\tASI_LEON_MMUFLUSH                = 0x18\n\tB1000000                         = 0x1008\n\tB115200                          = 0x1002\n\tB1152000                         = 0x1009\n\tB1500000                         = 0x100a\n\tB2000000                         = 0x100b\n\tB230400                          = 0x1003\n\tB2500000                         = 0x100c\n\tB3000000                         = 0x100d\n\tB3500000                         = 0x100e\n\tB4000000                         = 0x100f\n\tB460800                          = 0x1004\n\tB500000                          = 0x1005\n\tB57600                           = 0x1001\n\tB576000                          = 0x1006\n\tB921600                          = 0x1007\n\tBLKALIGNOFF                      = 0x2000127a\n\tBLKBSZGET                        = 0x40081270\n\tBLKBSZSET                        = 0x80081271\n\tBLKDISCARD                       = 0x20001277\n\tBLKDISCARDZEROES                 = 0x2000127c\n\tBLKFLSBUF                        = 0x20001261\n\tBLKFRAGET                        = 0x20001265\n\tBLKFRASET                        = 0x20001264\n\tBLKGETDISKSEQ                    = 0x40081280\n\tBLKGETSIZE                       = 0x20001260\n\tBLKGETSIZE64                     = 0x40081272\n\tBLKIOMIN                         = 0x20001278\n\tBLKIOOPT                         = 0x20001279\n\tBLKPBSZGET                       = 0x2000127b\n\tBLKRAGET                         = 0x20001263\n\tBLKRASET                         = 0x20001262\n\tBLKROGET                         = 0x2000125e\n\tBLKROSET                         = 0x2000125d\n\tBLKROTATIONAL                    = 0x2000127e\n\tBLKRRPART                        = 0x2000125f\n\tBLKSECDISCARD                    = 0x2000127d\n\tBLKSECTGET                       = 0x20001267\n\tBLKSECTSET                       = 0x20001266\n\tBLKSSZGET                        = 0x20001268\n\tBLKZEROOUT                       = 0x2000127f\n\tBOTHER                           = 0x1000\n\tBS1                              = 0x2000\n\tBSDLY                            = 0x2000\n\tCBAUD                            = 0x100f\n\tCBAUDEX                          = 0x1000\n\tCIBAUD                           = 0x100f0000\n\tCLOCAL                           = 0x800\n\tCR1                              = 0x200\n\tCR2                              = 0x400\n\tCR3                              = 0x600\n\tCRDLY                            = 0x600\n\tCREAD                            = 0x80\n\tCS6                              = 0x10\n\tCS7                              = 0x20\n\tCS8                              = 0x30\n\tCSIZE                            = 0x30\n\tCSTOPB                           = 0x40\n\tECCGETLAYOUT                     = 0x41484d11\n\tECCGETSTATS                      = 0x40104d12\n\tECHOCTL                          = 0x200\n\tECHOE                            = 0x10\n\tECHOK                            = 0x20\n\tECHOKE                           = 0x800\n\tECHONL                           = 0x40\n\tECHOPRT                          = 0x400\n\tEFD_CLOEXEC                      = 0x400000\n\tEFD_NONBLOCK                     = 0x4000\n\tEMT_TAGOVF                       = 0x1\n\tEPIOCGPARAMS                     = 0x40088a02\n\tEPIOCSPARAMS                     = 0x80088a01\n\tEPOLL_CLOEXEC                    = 0x400000\n\tEXTPROC                          = 0x10000\n\tFF1                              = 0x8000\n\tFFDLY                            = 0x8000\n\tFICLONE                          = 0x80049409\n\tFICLONERANGE                     = 0x8020940d\n\tFLUSHO                           = 0x1000\n\tFS_IOC_ENABLE_VERITY             = 0x80806685\n\tFS_IOC_GETFLAGS                  = 0x40086601\n\tFS_IOC_GET_ENCRYPTION_NONCE      = 0x4010661b\n\tFS_IOC_GET_ENCRYPTION_POLICY     = 0x800c6615\n\tFS_IOC_GET_ENCRYPTION_PWSALT     = 0x80106614\n\tFS_IOC_SETFLAGS                  = 0x80086602\n\tFS_IOC_SET_ENCRYPTION_POLICY     = 0x400c6613\n\tF_GETLK                          = 0x7\n\tF_GETLK64                        = 0x7\n\tF_GETOWN                         = 0x5\n\tF_RDLCK                          = 0x1\n\tF_SETLK                          = 0x8\n\tF_SETLK64                        = 0x8\n\tF_SETLKW                         = 0x9\n\tF_SETLKW64                       = 0x9\n\tF_SETOWN                         = 0x6\n\tF_UNLCK                          = 0x3\n\tF_WRLCK                          = 0x2\n\tHIDIOCGRAWINFO                   = 0x40084803\n\tHIDIOCGRDESC                     = 0x50044802\n\tHIDIOCGRDESCSIZE                 = 0x40044801\n\tHUPCL                            = 0x400\n\tICANON                           = 0x2\n\tIEXTEN                           = 0x8000\n\tIN_CLOEXEC                       = 0x400000\n\tIN_NONBLOCK                      = 0x4000\n\tIOCTL_VM_SOCKETS_GET_LOCAL_CID   = 0x200007b9\n\tISIG                             = 0x1\n\tIUCLC                            = 0x200\n\tIXOFF                            = 0x1000\n\tIXON                             = 0x400\n\tMAP_ANON                         = 0x20\n\tMAP_ANONYMOUS                    = 0x20\n\tMAP_DENYWRITE                    = 0x800\n\tMAP_EXECUTABLE                   = 0x1000\n\tMAP_GROWSDOWN                    = 0x200\n\tMAP_HUGETLB                      = 0x40000\n\tMAP_LOCKED                       = 0x100\n\tMAP_NONBLOCK                     = 0x10000\n\tMAP_NORESERVE                    = 0x40\n\tMAP_POPULATE                     = 0x8000\n\tMAP_RENAME                       = 0x20\n\tMAP_STACK                        = 0x20000\n\tMAP_SYNC                         = 0x80000\n\tMCL_CURRENT                      = 0x2000\n\tMCL_FUTURE                       = 0x4000\n\tMCL_ONFAULT                      = 0x8000\n\tMEMERASE                         = 0x80084d02\n\tMEMERASE64                       = 0x80104d14\n\tMEMGETBADBLOCK                   = 0x80084d0b\n\tMEMGETINFO                       = 0x40204d01\n\tMEMGETOOBSEL                     = 0x40c84d0a\n\tMEMGETREGIONCOUNT                = 0x40044d07\n\tMEMISLOCKED                      = 0x40084d17\n\tMEMLOCK                          = 0x80084d05\n\tMEMREAD                          = 0xc0404d1a\n\tMEMREADOOB                       = 0xc0104d04\n\tMEMSETBADBLOCK                   = 0x80084d0c\n\tMEMUNLOCK                        = 0x80084d06\n\tMEMWRITEOOB                      = 0xc0104d03\n\tMTDFILEMODE                      = 0x20004d13\n\tNFDBITS                          = 0x40\n\tNLDLY                            = 0x100\n\tNOFLSH                           = 0x80\n\tNS_GET_MNTNS_ID                  = 0x4008b705\n\tNS_GET_NSTYPE                    = 0x2000b703\n\tNS_GET_OWNER_UID                 = 0x2000b704\n\tNS_GET_PARENT                    = 0x2000b702\n\tNS_GET_PID_FROM_PIDNS            = 0x4004b706\n\tNS_GET_PID_IN_PIDNS              = 0x4004b708\n\tNS_GET_TGID_FROM_PIDNS           = 0x4004b707\n\tNS_GET_TGID_IN_PIDNS             = 0x4004b709\n\tNS_GET_USERNS                    = 0x2000b701\n\tOLCUC                            = 0x2\n\tONLCR                            = 0x4\n\tOTPERASE                         = 0x800c4d19\n\tOTPGETREGIONCOUNT                = 0x80044d0e\n\tOTPGETREGIONINFO                 = 0x800c4d0f\n\tOTPLOCK                          = 0x400c4d10\n\tOTPSELECT                        = 0x40044d0d\n\tO_APPEND                         = 0x8\n\tO_ASYNC                          = 0x40\n\tO_CLOEXEC                        = 0x400000\n\tO_CREAT                          = 0x200\n\tO_DIRECT                         = 0x100000\n\tO_DIRECTORY                      = 0x10000\n\tO_DSYNC                          = 0x2000\n\tO_EXCL                           = 0x800\n\tO_FSYNC                          = 0x802000\n\tO_LARGEFILE                      = 0x0\n\tO_NDELAY                         = 0x4004\n\tO_NOATIME                        = 0x200000\n\tO_NOCTTY                         = 0x8000\n\tO_NOFOLLOW                       = 0x20000\n\tO_NONBLOCK                       = 0x4000\n\tO_PATH                           = 0x1000000\n\tO_RSYNC                          = 0x802000\n\tO_SYNC                           = 0x802000\n\tO_TMPFILE                        = 0x2010000\n\tO_TRUNC                          = 0x400\n\tPARENB                           = 0x100\n\tPARODD                           = 0x200\n\tPENDIN                           = 0x4000\n\tPERF_EVENT_IOC_DISABLE           = 0x20002401\n\tPERF_EVENT_IOC_ENABLE            = 0x20002400\n\tPERF_EVENT_IOC_ID                = 0x40082407\n\tPERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x8008240b\n\tPERF_EVENT_IOC_PAUSE_OUTPUT      = 0x80042409\n\tPERF_EVENT_IOC_PERIOD            = 0x80082404\n\tPERF_EVENT_IOC_QUERY_BPF         = 0xc008240a\n\tPERF_EVENT_IOC_REFRESH           = 0x20002402\n\tPERF_EVENT_IOC_RESET             = 0x20002403\n\tPERF_EVENT_IOC_SET_BPF           = 0x80042408\n\tPERF_EVENT_IOC_SET_FILTER        = 0x80082406\n\tPERF_EVENT_IOC_SET_OUTPUT        = 0x20002405\n\tPPPIOCATTACH                     = 0x8004743d\n\tPPPIOCATTCHAN                    = 0x80047438\n\tPPPIOCBRIDGECHAN                 = 0x80047435\n\tPPPIOCCONNECT                    = 0x8004743a\n\tPPPIOCDETACH                     = 0x8004743c\n\tPPPIOCDISCONN                    = 0x20007439\n\tPPPIOCGASYNCMAP                  = 0x40047458\n\tPPPIOCGCHAN                      = 0x40047437\n\tPPPIOCGDEBUG                     = 0x40047441\n\tPPPIOCGFLAGS                     = 0x4004745a\n\tPPPIOCGIDLE                      = 0x4010743f\n\tPPPIOCGIDLE32                    = 0x4008743f\n\tPPPIOCGIDLE64                    = 0x4010743f\n\tPPPIOCGL2TPSTATS                 = 0x40487436\n\tPPPIOCGMRU                       = 0x40047453\n\tPPPIOCGRASYNCMAP                 = 0x40047455\n\tPPPIOCGUNIT                      = 0x40047456\n\tPPPIOCGXASYNCMAP                 = 0x40207450\n\tPPPIOCSACTIVE                    = 0x80107446\n\tPPPIOCSASYNCMAP                  = 0x80047457\n\tPPPIOCSCOMPRESS                  = 0x8010744d\n\tPPPIOCSDEBUG                     = 0x80047440\n\tPPPIOCSFLAGS                     = 0x80047459\n\tPPPIOCSMAXCID                    = 0x80047451\n\tPPPIOCSMRRU                      = 0x8004743b\n\tPPPIOCSMRU                       = 0x80047452\n\tPPPIOCSNPMODE                    = 0x8008744b\n\tPPPIOCSPASS                      = 0x80107447\n\tPPPIOCSRASYNCMAP                 = 0x80047454\n\tPPPIOCSXASYNCMAP                 = 0x8020744f\n\tPPPIOCUNBRIDGECHAN               = 0x20007434\n\tPPPIOCXFERUNIT                   = 0x2000744e\n\tPR_SET_PTRACER_ANY               = 0xffffffffffffffff\n\tPTRACE_GETFPAREGS                = 0x14\n\tPTRACE_GETFPREGS                 = 0xe\n\tPTRACE_GETFPREGS64               = 0x19\n\tPTRACE_GETREGS64                 = 0x16\n\tPTRACE_READDATA                  = 0x10\n\tPTRACE_READTEXT                  = 0x12\n\tPTRACE_SETFPAREGS                = 0x15\n\tPTRACE_SETFPREGS                 = 0xf\n\tPTRACE_SETFPREGS64               = 0x1a\n\tPTRACE_SETREGS64                 = 0x17\n\tPTRACE_SPARC_DETACH              = 0xb\n\tPTRACE_WRITEDATA                 = 0x11\n\tPTRACE_WRITETEXT                 = 0x13\n\tPT_FP                            = 0x48\n\tPT_G0                            = 0x10\n\tPT_G1                            = 0x14\n\tPT_G2                            = 0x18\n\tPT_G3                            = 0x1c\n\tPT_G4                            = 0x20\n\tPT_G5                            = 0x24\n\tPT_G6                            = 0x28\n\tPT_G7                            = 0x2c\n\tPT_I0                            = 0x30\n\tPT_I1                            = 0x34\n\tPT_I2                            = 0x38\n\tPT_I3                            = 0x3c\n\tPT_I4                            = 0x40\n\tPT_I5                            = 0x44\n\tPT_I6                            = 0x48\n\tPT_I7                            = 0x4c\n\tPT_NPC                           = 0x8\n\tPT_PC                            = 0x4\n\tPT_PSR                           = 0x0\n\tPT_REGS_MAGIC                    = 0x57ac6c00\n\tPT_TNPC                          = 0x90\n\tPT_TPC                           = 0x88\n\tPT_TSTATE                        = 0x80\n\tPT_V9_FP                         = 0x70\n\tPT_V9_G0                         = 0x0\n\tPT_V9_G1                         = 0x8\n\tPT_V9_G2                         = 0x10\n\tPT_V9_G3                         = 0x18\n\tPT_V9_G4                         = 0x20\n\tPT_V9_G5                         = 0x28\n\tPT_V9_G6                         = 0x30\n\tPT_V9_G7                         = 0x38\n\tPT_V9_I0                         = 0x40\n\tPT_V9_I1                         = 0x48\n\tPT_V9_I2                         = 0x50\n\tPT_V9_I3                         = 0x58\n\tPT_V9_I4                         = 0x60\n\tPT_V9_I5                         = 0x68\n\tPT_V9_I6                         = 0x70\n\tPT_V9_I7                         = 0x78\n\tPT_V9_MAGIC                      = 0x9c\n\tPT_V9_TNPC                       = 0x90\n\tPT_V9_TPC                        = 0x88\n\tPT_V9_TSTATE                     = 0x80\n\tPT_V9_Y                          = 0x98\n\tPT_WIM                           = 0x10\n\tPT_Y                             = 0xc\n\tRLIMIT_AS                        = 0x9\n\tRLIMIT_MEMLOCK                   = 0x8\n\tRLIMIT_NOFILE                    = 0x6\n\tRLIMIT_NPROC                     = 0x7\n\tRLIMIT_RSS                       = 0x5\n\tRNDADDENTROPY                    = 0x80085203\n\tRNDADDTOENTCNT                   = 0x80045201\n\tRNDCLEARPOOL                     = 0x20005206\n\tRNDGETENTCNT                     = 0x40045200\n\tRNDGETPOOL                       = 0x40085202\n\tRNDRESEEDCRNG                    = 0x20005207\n\tRNDZAPENTCNT                     = 0x20005204\n\tRTC_AIE_OFF                      = 0x20007002\n\tRTC_AIE_ON                       = 0x20007001\n\tRTC_ALM_READ                     = 0x40247008\n\tRTC_ALM_SET                      = 0x80247007\n\tRTC_EPOCH_READ                   = 0x4008700d\n\tRTC_EPOCH_SET                    = 0x8008700e\n\tRTC_IRQP_READ                    = 0x4008700b\n\tRTC_IRQP_SET                     = 0x8008700c\n\tRTC_PARAM_GET                    = 0x80187013\n\tRTC_PARAM_SET                    = 0x80187014\n\tRTC_PIE_OFF                      = 0x20007006\n\tRTC_PIE_ON                       = 0x20007005\n\tRTC_PLL_GET                      = 0x40207011\n\tRTC_PLL_SET                      = 0x80207012\n\tRTC_RD_TIME                      = 0x40247009\n\tRTC_SET_TIME                     = 0x8024700a\n\tRTC_UIE_OFF                      = 0x20007004\n\tRTC_UIE_ON                       = 0x20007003\n\tRTC_VL_CLR                       = 0x20007014\n\tRTC_VL_READ                      = 0x40047013\n\tRTC_WIE_OFF                      = 0x20007010\n\tRTC_WIE_ON                       = 0x2000700f\n\tRTC_WKALM_RD                     = 0x40287010\n\tRTC_WKALM_SET                    = 0x8028700f\n\tSCM_TIMESTAMPING                 = 0x23\n\tSCM_TIMESTAMPING_OPT_STATS       = 0x38\n\tSCM_TIMESTAMPING_PKTINFO         = 0x3c\n\tSCM_TIMESTAMPNS                  = 0x21\n\tSCM_TXTIME                       = 0x3f\n\tSCM_WIFI_STATUS                  = 0x25\n\tSECCOMP_IOCTL_NOTIF_ADDFD        = 0x80182103\n\tSECCOMP_IOCTL_NOTIF_ID_VALID     = 0x80082102\n\tSECCOMP_IOCTL_NOTIF_SET_FLAGS    = 0x80082104\n\tSFD_CLOEXEC                      = 0x400000\n\tSFD_NONBLOCK                     = 0x4000\n\tSF_FP                            = 0x38\n\tSF_I0                            = 0x20\n\tSF_I1                            = 0x24\n\tSF_I2                            = 0x28\n\tSF_I3                            = 0x2c\n\tSF_I4                            = 0x30\n\tSF_I5                            = 0x34\n\tSF_L0                            = 0x0\n\tSF_L1                            = 0x4\n\tSF_L2                            = 0x8\n\tSF_L3                            = 0xc\n\tSF_L4                            = 0x10\n\tSF_L5                            = 0x14\n\tSF_L6                            = 0x18\n\tSF_L7                            = 0x1c\n\tSF_PC                            = 0x3c\n\tSF_RETP                          = 0x40\n\tSF_V9_FP                         = 0x70\n\tSF_V9_I0                         = 0x40\n\tSF_V9_I1                         = 0x48\n\tSF_V9_I2                         = 0x50\n\tSF_V9_I3                         = 0x58\n\tSF_V9_I4                         = 0x60\n\tSF_V9_I5                         = 0x68\n\tSF_V9_L0                         = 0x0\n\tSF_V9_L1                         = 0x8\n\tSF_V9_L2                         = 0x10\n\tSF_V9_L3                         = 0x18\n\tSF_V9_L4                         = 0x20\n\tSF_V9_L5                         = 0x28\n\tSF_V9_L6                         = 0x30\n\tSF_V9_L7                         = 0x38\n\tSF_V9_PC                         = 0x78\n\tSF_V9_RETP                       = 0x80\n\tSF_V9_XARG0                      = 0x88\n\tSF_V9_XARG1                      = 0x90\n\tSF_V9_XARG2                      = 0x98\n\tSF_V9_XARG3                      = 0xa0\n\tSF_V9_XARG4                      = 0xa8\n\tSF_V9_XARG5                      = 0xb0\n\tSF_V9_XXARG                      = 0xb8\n\tSF_XARG0                         = 0x44\n\tSF_XARG1                         = 0x48\n\tSF_XARG2                         = 0x4c\n\tSF_XARG3                         = 0x50\n\tSF_XARG4                         = 0x54\n\tSF_XARG5                         = 0x58\n\tSF_XXARG                         = 0x5c\n\tSIOCATMARK                       = 0x8905\n\tSIOCGPGRP                        = 0x8904\n\tSIOCGSTAMPNS_NEW                 = 0x40108907\n\tSIOCGSTAMP_NEW                   = 0x40108906\n\tSIOCINQ                          = 0x4004667f\n\tSIOCOUTQ                         = 0x40047473\n\tSIOCSPGRP                        = 0x8902\n\tSOCK_CLOEXEC                     = 0x400000\n\tSOCK_DGRAM                       = 0x2\n\tSOCK_NONBLOCK                    = 0x4000\n\tSOCK_STREAM                      = 0x1\n\tSOL_SOCKET                       = 0xffff\n\tSO_ACCEPTCONN                    = 0x8000\n\tSO_ATTACH_BPF                    = 0x34\n\tSO_ATTACH_REUSEPORT_CBPF         = 0x35\n\tSO_ATTACH_REUSEPORT_EBPF         = 0x36\n\tSO_BINDTODEVICE                  = 0xd\n\tSO_BINDTOIFINDEX                 = 0x41\n\tSO_BPF_EXTENSIONS                = 0x32\n\tSO_BROADCAST                     = 0x20\n\tSO_BSDCOMPAT                     = 0x400\n\tSO_BUF_LOCK                      = 0x51\n\tSO_BUSY_POLL                     = 0x30\n\tSO_BUSY_POLL_BUDGET              = 0x49\n\tSO_CNX_ADVICE                    = 0x37\n\tSO_COOKIE                        = 0x3b\n\tSO_DETACH_REUSEPORT_BPF          = 0x47\n\tSO_DOMAIN                        = 0x1029\n\tSO_DONTROUTE                     = 0x10\n\tSO_ERROR                         = 0x1007\n\tSO_INCOMING_CPU                  = 0x33\n\tSO_INCOMING_NAPI_ID              = 0x3a\n\tSO_KEEPALIVE                     = 0x8\n\tSO_LINGER                        = 0x80\n\tSO_LOCK_FILTER                   = 0x28\n\tSO_MARK                          = 0x22\n\tSO_MAX_PACING_RATE               = 0x31\n\tSO_MEMINFO                       = 0x39\n\tSO_NETNS_COOKIE                  = 0x50\n\tSO_NOFCS                         = 0x27\n\tSO_OOBINLINE                     = 0x100\n\tSO_PASSCRED                      = 0x2\n\tSO_PASSPIDFD                     = 0x55\n\tSO_PASSSEC                       = 0x1f\n\tSO_PEEK_OFF                      = 0x26\n\tSO_PEERCRED                      = 0x40\n\tSO_PEERGROUPS                    = 0x3d\n\tSO_PEERPIDFD                     = 0x56\n\tSO_PEERSEC                       = 0x1e\n\tSO_PREFER_BUSY_POLL              = 0x48\n\tSO_PROTOCOL                      = 0x1028\n\tSO_RCVBUF                        = 0x1002\n\tSO_RCVBUFFORCE                   = 0x100b\n\tSO_RCVLOWAT                      = 0x800\n\tSO_RCVMARK                       = 0x54\n\tSO_RCVTIMEO                      = 0x2000\n\tSO_RCVTIMEO_NEW                  = 0x44\n\tSO_RCVTIMEO_OLD                  = 0x2000\n\tSO_RESERVE_MEM                   = 0x52\n\tSO_REUSEADDR                     = 0x4\n\tSO_REUSEPORT                     = 0x200\n\tSO_RXQ_OVFL                      = 0x24\n\tSO_SECURITY_AUTHENTICATION       = 0x5001\n\tSO_SECURITY_ENCRYPTION_NETWORK   = 0x5004\n\tSO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002\n\tSO_SELECT_ERR_QUEUE              = 0x29\n\tSO_SNDBUF                        = 0x1001\n\tSO_SNDBUFFORCE                   = 0x100a\n\tSO_SNDLOWAT                      = 0x1000\n\tSO_SNDTIMEO                      = 0x4000\n\tSO_SNDTIMEO_NEW                  = 0x45\n\tSO_SNDTIMEO_OLD                  = 0x4000\n\tSO_TIMESTAMPING                  = 0x23\n\tSO_TIMESTAMPING_NEW              = 0x43\n\tSO_TIMESTAMPING_OLD              = 0x23\n\tSO_TIMESTAMPNS                   = 0x21\n\tSO_TIMESTAMPNS_NEW               = 0x42\n\tSO_TIMESTAMPNS_OLD               = 0x21\n\tSO_TIMESTAMP_NEW                 = 0x46\n\tSO_TXREHASH                      = 0x53\n\tSO_TXTIME                        = 0x3f\n\tSO_TYPE                          = 0x1008\n\tSO_WIFI_STATUS                   = 0x25\n\tSO_ZEROCOPY                      = 0x3e\n\tTAB1                             = 0x800\n\tTAB2                             = 0x1000\n\tTAB3                             = 0x1800\n\tTABDLY                           = 0x1800\n\tTCFLSH                           = 0x20005407\n\tTCGETA                           = 0x40125401\n\tTCGETS                           = 0x40245408\n\tTCGETS2                          = 0x402c540c\n\tTCSAFLUSH                        = 0x2\n\tTCSBRK                           = 0x20005405\n\tTCSBRKP                          = 0x5425\n\tTCSETA                           = 0x80125402\n\tTCSETAF                          = 0x80125404\n\tTCSETAW                          = 0x80125403\n\tTCSETS                           = 0x80245409\n\tTCSETS2                          = 0x802c540d\n\tTCSETSF                          = 0x8024540b\n\tTCSETSF2                         = 0x802c540f\n\tTCSETSW                          = 0x8024540a\n\tTCSETSW2                         = 0x802c540e\n\tTCXONC                           = 0x20005406\n\tTFD_CLOEXEC                      = 0x400000\n\tTFD_NONBLOCK                     = 0x4000\n\tTIOCCBRK                         = 0x2000747a\n\tTIOCCONS                         = 0x20007424\n\tTIOCEXCL                         = 0x2000740d\n\tTIOCGDEV                         = 0x40045432\n\tTIOCGETD                         = 0x40047400\n\tTIOCGEXCL                        = 0x40045440\n\tTIOCGICOUNT                      = 0x545d\n\tTIOCGISO7816                     = 0x40285443\n\tTIOCGLCKTRMIOS                   = 0x5456\n\tTIOCGPGRP                        = 0x40047483\n\tTIOCGPKT                         = 0x40045438\n\tTIOCGPTLCK                       = 0x40045439\n\tTIOCGPTN                         = 0x40047486\n\tTIOCGPTPEER                      = 0x20007489\n\tTIOCGRS485                       = 0x40205441\n\tTIOCGSERIAL                      = 0x541e\n\tTIOCGSID                         = 0x40047485\n\tTIOCGSOFTCAR                     = 0x40047464\n\tTIOCGWINSZ                       = 0x40087468\n\tTIOCINQ                          = 0x4004667f\n\tTIOCLINUX                        = 0x541c\n\tTIOCMBIC                         = 0x8004746b\n\tTIOCMBIS                         = 0x8004746c\n\tTIOCMGET                         = 0x4004746a\n\tTIOCMIWAIT                       = 0x545c\n\tTIOCMSET                         = 0x8004746d\n\tTIOCM_CAR                        = 0x40\n\tTIOCM_CD                         = 0x40\n\tTIOCM_CTS                        = 0x20\n\tTIOCM_DSR                        = 0x100\n\tTIOCM_RI                         = 0x80\n\tTIOCM_RNG                        = 0x80\n\tTIOCM_SR                         = 0x10\n\tTIOCM_ST                         = 0x8\n\tTIOCNOTTY                        = 0x20007471\n\tTIOCNXCL                         = 0x2000740e\n\tTIOCOUTQ                         = 0x40047473\n\tTIOCPKT                          = 0x80047470\n\tTIOCSBRK                         = 0x2000747b\n\tTIOCSCTTY                        = 0x20007484\n\tTIOCSERCONFIG                    = 0x5453\n\tTIOCSERGETLSR                    = 0x5459\n\tTIOCSERGETMULTI                  = 0x545a\n\tTIOCSERGSTRUCT                   = 0x5458\n\tTIOCSERGWILD                     = 0x5454\n\tTIOCSERSETMULTI                  = 0x545b\n\tTIOCSERSWILD                     = 0x5455\n\tTIOCSETD                         = 0x80047401\n\tTIOCSIG                          = 0x80047488\n\tTIOCSISO7816                     = 0xc0285444\n\tTIOCSLCKTRMIOS                   = 0x5457\n\tTIOCSPGRP                        = 0x80047482\n\tTIOCSPTLCK                       = 0x80047487\n\tTIOCSRS485                       = 0xc0205442\n\tTIOCSSERIAL                      = 0x541f\n\tTIOCSSOFTCAR                     = 0x80047465\n\tTIOCSTART                        = 0x2000746e\n\tTIOCSTI                          = 0x80017472\n\tTIOCSTOP                         = 0x2000746f\n\tTIOCSWINSZ                       = 0x80087467\n\tTIOCVHANGUP                      = 0x20005437\n\tTOSTOP                           = 0x100\n\tTUNATTACHFILTER                  = 0x801054d5\n\tTUNDETACHFILTER                  = 0x801054d6\n\tTUNGETDEVNETNS                   = 0x200054e3\n\tTUNGETFEATURES                   = 0x400454cf\n\tTUNGETFILTER                     = 0x401054db\n\tTUNGETIFF                        = 0x400454d2\n\tTUNGETSNDBUF                     = 0x400454d3\n\tTUNGETVNETBE                     = 0x400454df\n\tTUNGETVNETHDRSZ                  = 0x400454d7\n\tTUNGETVNETLE                     = 0x400454dd\n\tTUNSETCARRIER                    = 0x800454e2\n\tTUNSETDEBUG                      = 0x800454c9\n\tTUNSETFILTEREBPF                 = 0x400454e1\n\tTUNSETGROUP                      = 0x800454ce\n\tTUNSETIFF                        = 0x800454ca\n\tTUNSETIFINDEX                    = 0x800454da\n\tTUNSETLINK                       = 0x800454cd\n\tTUNSETNOCSUM                     = 0x800454c8\n\tTUNSETOFFLOAD                    = 0x800454d0\n\tTUNSETOWNER                      = 0x800454cc\n\tTUNSETPERSIST                    = 0x800454cb\n\tTUNSETQUEUE                      = 0x800454d9\n\tTUNSETSNDBUF                     = 0x800454d4\n\tTUNSETSTEERINGEBPF               = 0x400454e0\n\tTUNSETTXFILTER                   = 0x800454d1\n\tTUNSETVNETBE                     = 0x800454de\n\tTUNSETVNETHDRSZ                  = 0x800454d8\n\tTUNSETVNETLE                     = 0x800454dc\n\tUBI_IOCATT                       = 0x80186f40\n\tUBI_IOCDET                       = 0x80046f41\n\tUBI_IOCEBCH                      = 0x80044f02\n\tUBI_IOCEBER                      = 0x80044f01\n\tUBI_IOCEBISMAP                   = 0x40044f05\n\tUBI_IOCEBMAP                     = 0x80084f03\n\tUBI_IOCEBUNMAP                   = 0x80044f04\n\tUBI_IOCMKVOL                     = 0x80986f00\n\tUBI_IOCRMVOL                     = 0x80046f01\n\tUBI_IOCRNVOL                     = 0x91106f03\n\tUBI_IOCRPEB                      = 0x80046f04\n\tUBI_IOCRSVOL                     = 0x800c6f02\n\tUBI_IOCSETVOLPROP                = 0x80104f06\n\tUBI_IOCSPEB                      = 0x80046f05\n\tUBI_IOCVOLCRBLK                  = 0x80804f07\n\tUBI_IOCVOLRMBLK                  = 0x20004f08\n\tUBI_IOCVOLUP                     = 0x80084f00\n\tVDISCARD                         = 0xd\n\tVEOF                             = 0x4\n\tVEOL                             = 0xb\n\tVEOL2                            = 0x10\n\tVMIN                             = 0x6\n\tVREPRINT                         = 0xc\n\tVSTART                           = 0x8\n\tVSTOP                            = 0x9\n\tVSUSP                            = 0xa\n\tVSWTC                            = 0x7\n\tVT1                              = 0x4000\n\tVTDLY                            = 0x4000\n\tVTIME                            = 0x5\n\tVWERASE                          = 0xe\n\tWDIOC_GETBOOTSTATUS              = 0x40045702\n\tWDIOC_GETPRETIMEOUT              = 0x40045709\n\tWDIOC_GETSTATUS                  = 0x40045701\n\tWDIOC_GETSUPPORT                 = 0x40285700\n\tWDIOC_GETTEMP                    = 0x40045703\n\tWDIOC_GETTIMELEFT                = 0x4004570a\n\tWDIOC_GETTIMEOUT                 = 0x40045707\n\tWDIOC_KEEPALIVE                  = 0x40045705\n\tWDIOC_SETOPTIONS                 = 0x40045704\n\tWORDSIZE                         = 0x40\n\tXCASE                            = 0x4\n\tXTABS                            = 0x1800\n\t_HIDIOCGRAWNAME                  = 0x40804804\n\t_HIDIOCGRAWPHYS                  = 0x40404805\n\t_HIDIOCGRAWUNIQ                  = 0x40404808\n\t__TIOCFLUSH                      = 0x80047410\n)\n\n// Errors\nconst (\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEADV            = syscall.Errno(0x53)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEALREADY        = syscall.Errno(0x25)\n\tEBADE           = syscall.Errno(0x66)\n\tEBADFD          = syscall.Errno(0x5d)\n\tEBADMSG         = syscall.Errno(0x4c)\n\tEBADR           = syscall.Errno(0x67)\n\tEBADRQC         = syscall.Errno(0x6a)\n\tEBADSLT         = syscall.Errno(0x6b)\n\tEBFONT          = syscall.Errno(0x6d)\n\tECANCELED       = syscall.Errno(0x7f)\n\tECHRNG          = syscall.Errno(0x5e)\n\tECOMM           = syscall.Errno(0x55)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0x4e)\n\tEDEADLOCK       = syscall.Errno(0x6c)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOTDOT         = syscall.Errno(0x58)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEHWPOISON       = syscall.Errno(0x87)\n\tEIDRM           = syscall.Errno(0x4d)\n\tEILSEQ          = syscall.Errno(0x7a)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISNAM          = syscall.Errno(0x78)\n\tEKEYEXPIRED     = syscall.Errno(0x81)\n\tEKEYREJECTED    = syscall.Errno(0x83)\n\tEKEYREVOKED     = syscall.Errno(0x82)\n\tEL2HLT          = syscall.Errno(0x65)\n\tEL2NSYNC        = syscall.Errno(0x5f)\n\tEL3HLT          = syscall.Errno(0x60)\n\tEL3RST          = syscall.Errno(0x61)\n\tELIBACC         = syscall.Errno(0x72)\n\tELIBBAD         = syscall.Errno(0x70)\n\tELIBEXEC        = syscall.Errno(0x6e)\n\tELIBMAX         = syscall.Errno(0x7b)\n\tELIBSCN         = syscall.Errno(0x7c)\n\tELNRNG          = syscall.Errno(0x62)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x7e)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x57)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENAVAIL         = syscall.Errno(0x77)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENOANO          = syscall.Errno(0x69)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENOCSI          = syscall.Errno(0x64)\n\tENODATA         = syscall.Errno(0x6f)\n\tENOKEY          = syscall.Errno(0x80)\n\tENOLCK          = syscall.Errno(0x4f)\n\tENOLINK         = syscall.Errno(0x52)\n\tENOMEDIUM       = syscall.Errno(0x7d)\n\tENOMSG          = syscall.Errno(0x4b)\n\tENONET          = syscall.Errno(0x50)\n\tENOPKG          = syscall.Errno(0x71)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSR           = syscall.Errno(0x4a)\n\tENOSTR          = syscall.Errno(0x48)\n\tENOSYS          = syscall.Errno(0x5a)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTNAM         = syscall.Errno(0x76)\n\tENOTRECOVERABLE = syscall.Errno(0x85)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x2d)\n\tENOTUNIQ        = syscall.Errno(0x73)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x5c)\n\tEOWNERDEAD      = syscall.Errno(0x84)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROTO          = syscall.Errno(0x56)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tEREMCHG         = syscall.Errno(0x59)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEREMOTEIO       = syscall.Errno(0x79)\n\tERESTART        = syscall.Errno(0x74)\n\tERFKILL         = syscall.Errno(0x86)\n\tERREMOTE        = syscall.Errno(0x51)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESRMNT          = syscall.Errno(0x54)\n\tESTALE          = syscall.Errno(0x46)\n\tESTRPIPE        = syscall.Errno(0x5b)\n\tETIME           = syscall.Errno(0x49)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tEUCLEAN         = syscall.Errno(0x75)\n\tEUNATCH         = syscall.Errno(0x63)\n\tEUSERS          = syscall.Errno(0x44)\n\tEXFULL          = syscall.Errno(0x68)\n)\n\n// Signals\nconst (\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCLD    = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGLOST   = syscall.Signal(0x1d)\n\tSIGPOLL   = syscall.Signal(0x17)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x1d)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device or resource busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"invalid cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"numerical result out of range\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"ENOTSUP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{57, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{58, \"ESHUTDOWN\", \"cannot send after transport endpoint shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale file handle\"},\n\t{71, \"EREMOTE\", \"object is remote\"},\n\t{72, \"ENOSTR\", \"device not a stream\"},\n\t{73, \"ETIME\", \"timer expired\"},\n\t{74, \"ENOSR\", \"out of streams resources\"},\n\t{75, \"ENOMSG\", \"no message of desired type\"},\n\t{76, \"EBADMSG\", \"bad message\"},\n\t{77, \"EIDRM\", \"identifier removed\"},\n\t{78, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{79, \"ENOLCK\", \"no locks available\"},\n\t{80, \"ENONET\", \"machine is not on the network\"},\n\t{81, \"ERREMOTE\", \"unknown error 81\"},\n\t{82, \"ENOLINK\", \"link has been severed\"},\n\t{83, \"EADV\", \"advertise error\"},\n\t{84, \"ESRMNT\", \"srmount error\"},\n\t{85, \"ECOMM\", \"communication error on send\"},\n\t{86, \"EPROTO\", \"protocol error\"},\n\t{87, \"EMULTIHOP\", \"multihop attempted\"},\n\t{88, \"EDOTDOT\", \"RFS specific error\"},\n\t{89, \"EREMCHG\", \"remote address changed\"},\n\t{90, \"ENOSYS\", \"function not implemented\"},\n\t{91, \"ESTRPIPE\", \"streams pipe error\"},\n\t{92, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{93, \"EBADFD\", \"file descriptor in bad state\"},\n\t{94, \"ECHRNG\", \"channel number out of range\"},\n\t{95, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{96, \"EL3HLT\", \"level 3 halted\"},\n\t{97, \"EL3RST\", \"level 3 reset\"},\n\t{98, \"ELNRNG\", \"link number out of range\"},\n\t{99, \"EUNATCH\", \"protocol driver not attached\"},\n\t{100, \"ENOCSI\", \"no CSI structure available\"},\n\t{101, \"EL2HLT\", \"level 2 halted\"},\n\t{102, \"EBADE\", \"invalid exchange\"},\n\t{103, \"EBADR\", \"invalid request descriptor\"},\n\t{104, \"EXFULL\", \"exchange full\"},\n\t{105, \"ENOANO\", \"no anode\"},\n\t{106, \"EBADRQC\", \"invalid request code\"},\n\t{107, \"EBADSLT\", \"invalid slot\"},\n\t{108, \"EDEADLOCK\", \"file locking deadlock error\"},\n\t{109, \"EBFONT\", \"bad font file format\"},\n\t{110, \"ELIBEXEC\", \"cannot exec a shared library directly\"},\n\t{111, \"ENODATA\", \"no data available\"},\n\t{112, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{113, \"ENOPKG\", \"package not installed\"},\n\t{114, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{115, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{116, \"ERESTART\", \"interrupted system call should be restarted\"},\n\t{117, \"EUCLEAN\", \"structure needs cleaning\"},\n\t{118, \"ENOTNAM\", \"not a XENIX named type file\"},\n\t{119, \"ENAVAIL\", \"no XENIX semaphores available\"},\n\t{120, \"EISNAM\", \"is a named type file\"},\n\t{121, \"EREMOTEIO\", \"remote I/O error\"},\n\t{122, \"EILSEQ\", \"invalid or incomplete multibyte or wide character\"},\n\t{123, \"ELIBMAX\", \"attempting to link in too many shared libraries\"},\n\t{124, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{125, \"ENOMEDIUM\", \"no medium found\"},\n\t{126, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{127, \"ECANCELED\", \"operation canceled\"},\n\t{128, \"ENOKEY\", \"required key not available\"},\n\t{129, \"EKEYEXPIRED\", \"key has expired\"},\n\t{130, \"EKEYREVOKED\", \"key has been revoked\"},\n\t{131, \"EKEYREJECTED\", \"key was rejected by service\"},\n\t{132, \"EOWNERDEAD\", \"owner died\"},\n\t{133, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{134, \"ERFKILL\", \"operation not possible due to RF-kill\"},\n\t{135, \"EHWPOISON\", \"memory page has hardware error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{6, \"SIGABRT\", \"aborted\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGLOST\", \"power failure\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && netbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0084277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x400c427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x800c427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80084272\n\tBIOCSUDPF                         = 0x80084273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLONE_CSIGNAL                     = 0xff\n\tCLONE_FILES                       = 0x400\n\tCLONE_FS                          = 0x200\n\tCLONE_PID                         = 0x1000\n\tCLONE_PTRACE                      = 0x2000\n\tCLONE_SIGHAND                     = 0x800\n\tCLONE_VFORK                       = 0x4000\n\tCLONE_VM                          = 0x100\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tEN_SW_CTL_INF                     = 0x1000\n\tEN_SW_CTL_PREC                    = 0x300\n\tEN_SW_CTL_ROUND                   = 0xc00\n\tEN_SW_DATACHAIN                   = 0x80\n\tEN_SW_DENORM                      = 0x2\n\tEN_SW_INVOP                       = 0x1\n\tEN_SW_OVERFLOW                    = 0x8\n\tEN_SW_PRECLOSS                    = 0x20\n\tEN_SW_UNDERFLOW                   = 0x10\n\tEN_SW_ZERODIV                     = 0x4\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8030720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8030720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc01c697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0946920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0086926\n\tSIOCGIFDATA                       = 0xc0946985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0286936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc01c6987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCINITIFADDR                    = 0xc0446984\n\tSIOCSDRVSPEC                      = 0x801c697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8094691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x801c6988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0946986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tS_LOGIN_SET                       = 0x1\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x400c7458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x40287446\n\tTIOCPTSNAME                       = 0x40287448\n\tTIOCRCVFRAME                      = 0x80047445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80047444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && netbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0104277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x4010427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x8010427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80104272\n\tBIOCSUDPF                         = 0x80104273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x8\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLONE_CSIGNAL                     = 0xff\n\tCLONE_FILES                       = 0x400\n\tCLONE_FS                          = 0x200\n\tCLONE_PID                         = 0x1000\n\tCLONE_PTRACE                      = 0x2000\n\tCLONE_SIGHAND                     = 0x800\n\tCLONE_VFORK                       = 0x4000\n\tCLONE_VM                          = 0x100\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8038720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8038720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0986920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0106926\n\tSIOCGIFDATA                       = 0xc0986985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0306936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc0286987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCINITIFADDR                    = 0xc0706984\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8098691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x80286988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0986986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tS_LOGIN_SET                       = 0x1\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x40287446\n\tTIOCPTSNAME                       = 0x40287448\n\tTIOCRCVFRAME                      = 0x80087445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80087444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go",
    "content": "// mkerrors.sh -marm\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && netbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -marm _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0084277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x400c427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x800c427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80084272\n\tBIOCSUDPF                         = 0x80084273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8030720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8030720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc01c697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0946920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0086926\n\tSIOCGIFDATA                       = 0xc0946985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0286936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc01c6987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCINITIFADDR                    = 0xc0446984\n\tSIOCSDRVSPEC                      = 0x801c697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8094691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x801c6988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0946986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x400c7458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x48087446\n\tTIOCPTSNAME                       = 0x48087448\n\tTIOCRCVFRAME                      = 0x80047445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80047444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_netbsd_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && netbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_ARP                            = 0x1c\n\tAF_BLUETOOTH                      = 0x1f\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_HYLINK                         = 0xf\n\tAF_IEEE80211                      = 0x20\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x23\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OROUTE                         = 0x11\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x22\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tARPHRD_ARCNET                     = 0x7\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tARPHRD_STRIP                      = 0x17\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB460800                           = 0x70800\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB921600                           = 0xe1000\n\tB9600                             = 0x2580\n\tBIOCFEEDBACK                      = 0x8004427d\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc0104277\n\tBIOCGETIF                         = 0x4090426b\n\tBIOCGFEEDBACK                     = 0x4004427c\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRTIMEOUT                     = 0x4010427b\n\tBIOCGSEESENT                      = 0x40044278\n\tBIOCGSTATS                        = 0x4080426f\n\tBIOCGSTATSOLD                     = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDLT                          = 0x80044276\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8090426c\n\tBIOCSFEEDBACK                     = 0x8004427d\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRTIMEOUT                     = 0x8010427a\n\tBIOCSSEESENT                      = 0x80044279\n\tBIOCSTCPF                         = 0x80104272\n\tBIOCSUDPF                         = 0x80104273\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x8\n\tBPF_ALIGNMENT32                   = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DFLTBUFSIZE                   = 0x100000\n\tBPF_DIV                           = 0x30\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x1000000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLONE_CSIGNAL                     = 0xff\n\tCLONE_FILES                       = 0x400\n\tCLONE_FS                          = 0x200\n\tCLONE_PID                         = 0x1000\n\tCLONE_PTRACE                      = 0x2000\n\tCLONE_SIGHAND                     = 0x800\n\tCLONE_VFORK                       = 0x4000\n\tCLONE_VM                          = 0x100\n\tCPUSTATES                         = 0x5\n\tCP_IDLE                           = 0x4\n\tCP_INTR                           = 0x3\n\tCP_NICE                           = 0x1\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0x14\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tCTL_QUERY                         = -0x2\n\tDIOCBSFLUSH                       = 0x20006478\n\tDLT_A429                          = 0xb8\n\tDLT_A653_ICM                      = 0xb9\n\tDLT_AIRONET_HEADER                = 0x78\n\tDLT_AOS                           = 0xde\n\tDLT_APPLE_IP_OVER_IEEE1394        = 0x8a\n\tDLT_ARCNET                        = 0x7\n\tDLT_ARCNET_LINUX                  = 0x81\n\tDLT_ATM_CLIP                      = 0x13\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AURORA                        = 0x7e\n\tDLT_AX25                          = 0x3\n\tDLT_AX25_KISS                     = 0xca\n\tDLT_BACNET_MS_TP                  = 0xa5\n\tDLT_BLUETOOTH_HCI_H4              = 0xbb\n\tDLT_BLUETOOTH_HCI_H4_WITH_PHDR    = 0xc9\n\tDLT_CAN20B                        = 0xbe\n\tDLT_CAN_SOCKETCAN                 = 0xe3\n\tDLT_CHAOS                         = 0x5\n\tDLT_CISCO_IOS                     = 0x76\n\tDLT_C_HDLC                        = 0x68\n\tDLT_C_HDLC_WITH_DIR               = 0xcd\n\tDLT_DECT                          = 0xdd\n\tDLT_DOCSIS                        = 0x8f\n\tDLT_ECONET                        = 0x73\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0x6d\n\tDLT_ERF                           = 0xc5\n\tDLT_ERF_ETH                       = 0xaf\n\tDLT_ERF_POS                       = 0xb0\n\tDLT_FC_2                          = 0xe0\n\tDLT_FC_2_WITH_FRAME_DELIMS        = 0xe1\n\tDLT_FDDI                          = 0xa\n\tDLT_FLEXRAY                       = 0xd2\n\tDLT_FRELAY                        = 0x6b\n\tDLT_FRELAY_WITH_DIR               = 0xce\n\tDLT_GCOM_SERIAL                   = 0xad\n\tDLT_GCOM_T1E1                     = 0xac\n\tDLT_GPF_F                         = 0xab\n\tDLT_GPF_T                         = 0xaa\n\tDLT_GPRS_LLC                      = 0xa9\n\tDLT_GSMTAP_ABIS                   = 0xda\n\tDLT_GSMTAP_UM                     = 0xd9\n\tDLT_HDLC                          = 0x10\n\tDLT_HHDLC                         = 0x79\n\tDLT_HIPPI                         = 0xf\n\tDLT_IBM_SN                        = 0x92\n\tDLT_IBM_SP                        = 0x91\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS          = 0xa3\n\tDLT_IEEE802_15_4                  = 0xc3\n\tDLT_IEEE802_15_4_LINUX            = 0xbf\n\tDLT_IEEE802_15_4_NONASK_PHY       = 0xd7\n\tDLT_IEEE802_16_MAC_CPS            = 0xbc\n\tDLT_IEEE802_16_MAC_CPS_RADIO      = 0xc1\n\tDLT_IPMB                          = 0xc7\n\tDLT_IPMB_LINUX                    = 0xd1\n\tDLT_IPNET                         = 0xe2\n\tDLT_IPV4                          = 0xe4\n\tDLT_IPV6                          = 0xe5\n\tDLT_IP_OVER_FC                    = 0x7a\n\tDLT_JUNIPER_ATM1                  = 0x89\n\tDLT_JUNIPER_ATM2                  = 0x87\n\tDLT_JUNIPER_CHDLC                 = 0xb5\n\tDLT_JUNIPER_ES                    = 0x84\n\tDLT_JUNIPER_ETHER                 = 0xb2\n\tDLT_JUNIPER_FRELAY                = 0xb4\n\tDLT_JUNIPER_GGSN                  = 0x85\n\tDLT_JUNIPER_ISM                   = 0xc2\n\tDLT_JUNIPER_MFR                   = 0x86\n\tDLT_JUNIPER_MLFR                  = 0x83\n\tDLT_JUNIPER_MLPPP                 = 0x82\n\tDLT_JUNIPER_MONITOR               = 0xa4\n\tDLT_JUNIPER_PIC_PEER              = 0xae\n\tDLT_JUNIPER_PPP                   = 0xb3\n\tDLT_JUNIPER_PPPOE                 = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM             = 0xa8\n\tDLT_JUNIPER_SERVICES              = 0x88\n\tDLT_JUNIPER_ST                    = 0xc8\n\tDLT_JUNIPER_VP                    = 0xb7\n\tDLT_LAPB_WITH_DIR                 = 0xcf\n\tDLT_LAPD                          = 0xcb\n\tDLT_LIN                           = 0xd4\n\tDLT_LINUX_EVDEV                   = 0xd8\n\tDLT_LINUX_IRDA                    = 0x90\n\tDLT_LINUX_LAPD                    = 0xb1\n\tDLT_LINUX_SLL                     = 0x71\n\tDLT_LOOP                          = 0x6c\n\tDLT_LTALK                         = 0x72\n\tDLT_MFR                           = 0xb6\n\tDLT_MOST                          = 0xd3\n\tDLT_MPLS                          = 0xdb\n\tDLT_MTP2                          = 0x8c\n\tDLT_MTP2_WITH_PHDR                = 0x8b\n\tDLT_MTP3                          = 0x8d\n\tDLT_NULL                          = 0x0\n\tDLT_PCI_EXP                       = 0x7d\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPI                           = 0xc0\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0xe\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_PPPD                      = 0xa6\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PPP_WITH_DIR                  = 0xcc\n\tDLT_PRISM_HEADER                  = 0x77\n\tDLT_PRONET                        = 0x4\n\tDLT_RAIF1                         = 0xc6\n\tDLT_RAW                           = 0xc\n\tDLT_RAWAF_MASK                    = 0x2240000\n\tDLT_RIO                           = 0x7c\n\tDLT_SCCP                          = 0x8e\n\tDLT_SITA                          = 0xc4\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xd\n\tDLT_SUNATM                        = 0x7b\n\tDLT_SYMANTEC_FIREWALL             = 0x63\n\tDLT_TZSP                          = 0x80\n\tDLT_USB                           = 0xba\n\tDLT_USB_LINUX                     = 0xbd\n\tDLT_USB_LINUX_MMAPPED             = 0xdc\n\tDLT_WIHART                        = 0xdf\n\tDLT_X2E_SERIAL                    = 0xd5\n\tDLT_X2E_XORAYA                    = 0xd6\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tDT_WHT                            = 0xe\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMUL_LINUX                        = 0x1\n\tEMUL_LINUX32                      = 0x5\n\tEMUL_MAXID                        = 0x6\n\tETHERCAP_JUMBO_MTU                = 0x4\n\tETHERCAP_VLAN_HWTAGGING           = 0x2\n\tETHERCAP_VLAN_MTU                 = 0x1\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERMTU_JUMBO                    = 0x2328\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PAE                     = 0x888e\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOWPROTOCOLS           = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MAX_LEN_JUMBO               = 0x233a\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_PPPOE_ENCAP_LEN             = 0x8\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = 0x2\n\tEVFILT_PROC                       = 0x4\n\tEVFILT_READ                       = 0x0\n\tEVFILT_SIGNAL                     = 0x5\n\tEVFILT_SYSCOUNT                   = 0x7\n\tEVFILT_TIMER                      = 0x6\n\tEVFILT_VNODE                      = 0x3\n\tEVFILT_WRITE                      = 0x1\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_SYSFLAGS                       = 0xf000\n\tEXTA                              = 0x4b00\n\tEXTATTR_CMD_START                 = 0x1\n\tEXTATTR_CMD_STOP                  = 0x2\n\tEXTATTR_NAMESPACE_SYSTEM          = 0x2\n\tEXTATTR_NAMESPACE_USER            = 0x1\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x100\n\tFLUSHO                            = 0x800000\n\tF_CLOSEM                          = 0xa\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xc\n\tF_FSCTL                           = -0x80000000\n\tF_FSDIRMASK                       = 0x70000000\n\tF_FSIN                            = 0x10000000\n\tF_FSINOUT                         = 0x30000000\n\tF_FSOUT                           = 0x20000000\n\tF_FSPRIV                          = 0x8000\n\tF_FSVOID                          = 0x40000000\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETNOSIGPIPE                    = 0xd\n\tF_GETOWN                          = 0x5\n\tF_MAXFD                           = 0xb\n\tF_OK                              = 0x0\n\tF_PARAM_MASK                      = 0xfff\n\tF_PARAM_MAX                       = 0xfff\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETNOSIGPIPE                    = 0xe\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFA_ROUTE                         = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8f52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_NOTRAILERS                    = 0x20\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf8\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf2\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf1\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_STF                           = 0xd7\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_IPV6_ICMP                 = 0x3a\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x34\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_VRRP                      = 0x70\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPSEC_POLICY                 = 0x1c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_EF                             = 0x8000\n\tIP_ERRORMTU                       = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPSEC_POLICY                   = 0x16\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0x14\n\tIP_MF                             = 0x2000\n\tIP_MINFRAGSIZE                    = 0x45\n\tIP_MINTTL                         = 0x18\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVIF                         = 0x14\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVTTL                        = 0x17\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ALIGNMENT_16MB                = 0x18000000\n\tMAP_ALIGNMENT_1TB                 = 0x28000000\n\tMAP_ALIGNMENT_256TB               = 0x30000000\n\tMAP_ALIGNMENT_4GB                 = 0x20000000\n\tMAP_ALIGNMENT_64KB                = 0x10000000\n\tMAP_ALIGNMENT_64PB                = 0x38000000\n\tMAP_ALIGNMENT_MASK                = -0x1000000\n\tMAP_ALIGNMENT_SHIFT               = 0x18\n\tMAP_ANON                          = 0x1000\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_HASSEMAPHORE                  = 0x200\n\tMAP_INHERIT                       = 0x80\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_DEFAULT               = 0x1\n\tMAP_INHERIT_DONATE_COPY           = 0x3\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_NORESERVE                     = 0x40\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x20\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x2000\n\tMAP_TRYFIXED                      = 0x400\n\tMAP_WIRED                         = 0x800\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_BASIC_FLAGS                   = 0xe782807f\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DISCARD                       = 0x800000\n\tMNT_EXKERB                        = 0x800\n\tMNT_EXNORESPORT                   = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXPUBLIC                      = 0x10000000\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_EXTATTR                       = 0x1000000\n\tMNT_FORCE                         = 0x80000\n\tMNT_GETARGS                       = 0x400000\n\tMNT_IGNORE                        = 0x100000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_LOG                           = 0x2000000\n\tMNT_NOATIME                       = 0x4000000\n\tMNT_NOCOREDUMP                    = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NODEVMTIME                    = 0x40000000\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_OP_FLAGS                      = 0x4d0000\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELATIME                      = 0x20000\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x80000000\n\tMNT_SYMPERM                       = 0x20000000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UNION                         = 0x20\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0xff90ffff\n\tMNT_WAIT                          = 0x1\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CONTROLMBUF                   = 0x2000000\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_IOVUSRSPACE                   = 0x4000000\n\tMSG_LENUSRSPACE                   = 0x8000000\n\tMSG_MCAST                         = 0x200\n\tMSG_NAMEMBUF                      = 0x1000000\n\tMSG_NBIO                          = 0x1000\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_USERFLAGS                     = 0xffffff\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x2\n\tMS_SYNC                           = 0x4\n\tNAME_MAX                          = 0x1ff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x5\n\tNET_RT_MAXID                      = 0x6\n\tNET_RT_OIFLIST                    = 0x4\n\tNET_RT_OOIFLIST                   = 0x3\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOFIOGETBMAP                       = 0xc004667a\n\tONLCR                             = 0x2\n\tONLRET                            = 0x40\n\tONOCR                             = 0x20\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tO_ACCMODE                         = 0x3\n\tO_ALT_IO                          = 0x40000\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x400000\n\tO_CREAT                           = 0x200\n\tO_DIRECT                          = 0x80000\n\tO_DIRECTORY                       = 0x200000\n\tO_DSYNC                           = 0x10000\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_NOSIGPIPE                       = 0x1000000\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x20000\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPRI_IOFLUSH                       = 0x7c\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_AS                         = 0xa\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BRD                          = 0x7\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_MAX                          = 0x9\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_TAG                          = 0x8\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BRD                           = 0x80\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_NETMASK                       = 0x4\n\tRTA_TAG                           = 0x100\n\tRTF_ANNOUNCE                      = 0x20000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_CLONED                        = 0x2000\n\tRTF_CLONING                       = 0x100\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_MASK                          = 0x80\n\tRTF_MODIFIED                      = 0x20\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_REJECT                        = 0x8\n\tRTF_SRC                           = 0x10000\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_XRESOLVE                      = 0x200\n\tRTM_ADD                           = 0x1\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDR                       = 0x15\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_GET                           = 0x4\n\tRTM_IEEE80211                     = 0x11\n\tRTM_IFANNOUNCE                    = 0x10\n\tRTM_IFINFO                        = 0x14\n\tRTM_LLINFO_UPD                    = 0x13\n\tRTM_LOCK                          = 0x8\n\tRTM_LOSING                        = 0x5\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_OIFINFO                       = 0xf\n\tRTM_OLDADD                        = 0x9\n\tRTM_OLDDEL                        = 0xa\n\tRTM_OOIFINFO                      = 0xe\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_RTTUNIT                       = 0xf4240\n\tRTM_SETGATE                       = 0x12\n\tRTM_VERSION                       = 0x4\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tSCM_CREDS                         = 0x4\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x8\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80906931\n\tSIOCADDRT                         = 0x8038720a\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCALIFADDR                      = 0x8118691c\n\tSIOCATMARK                        = 0x40047307\n\tSIOCDELMULTI                      = 0x80906932\n\tSIOCDELRT                         = 0x8038720b\n\tSIOCDIFADDR                       = 0x80906919\n\tSIOCDIFPHYADDR                    = 0x80906949\n\tSIOCDLIFADDR                      = 0x8118691e\n\tSIOCGDRVSPEC                      = 0xc028697b\n\tSIOCGETPFSYNC                     = 0xc09069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGHIWAT                        = 0x40047301\n\tSIOCGIFADDR                       = 0xc0906921\n\tSIOCGIFADDRPREF                   = 0xc0986920\n\tSIOCGIFALIAS                      = 0xc040691b\n\tSIOCGIFBRDADDR                    = 0xc0906923\n\tSIOCGIFCAP                        = 0xc0206976\n\tSIOCGIFCONF                       = 0xc0106926\n\tSIOCGIFDATA                       = 0xc0986985\n\tSIOCGIFDLT                        = 0xc0906977\n\tSIOCGIFDSTADDR                    = 0xc0906922\n\tSIOCGIFFLAGS                      = 0xc0906911\n\tSIOCGIFGENERIC                    = 0xc090693a\n\tSIOCGIFMEDIA                      = 0xc0306936\n\tSIOCGIFMETRIC                     = 0xc0906917\n\tSIOCGIFMTU                        = 0xc090697e\n\tSIOCGIFNETMASK                    = 0xc0906925\n\tSIOCGIFPDSTADDR                   = 0xc0906948\n\tSIOCGIFPSRCADDR                   = 0xc0906947\n\tSIOCGLIFADDR                      = 0xc118691d\n\tSIOCGLIFPHYADDR                   = 0xc118694b\n\tSIOCGLINKSTR                      = 0xc0286987\n\tSIOCGLOWAT                        = 0x40047303\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGVH                           = 0xc0906983\n\tSIOCIFCREATE                      = 0x8090697a\n\tSIOCIFDESTROY                     = 0x80906979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCINITIFADDR                    = 0xc0706984\n\tSIOCSDRVSPEC                      = 0x8028697b\n\tSIOCSETPFSYNC                     = 0x809069f7\n\tSIOCSHIWAT                        = 0x80047300\n\tSIOCSIFADDR                       = 0x8090690c\n\tSIOCSIFADDRPREF                   = 0x8098691f\n\tSIOCSIFBRDADDR                    = 0x80906913\n\tSIOCSIFCAP                        = 0x80206975\n\tSIOCSIFDSTADDR                    = 0x8090690e\n\tSIOCSIFFLAGS                      = 0x80906910\n\tSIOCSIFGENERIC                    = 0x80906939\n\tSIOCSIFMEDIA                      = 0xc0906935\n\tSIOCSIFMETRIC                     = 0x80906918\n\tSIOCSIFMTU                        = 0x8090697f\n\tSIOCSIFNETMASK                    = 0x80906916\n\tSIOCSIFPHYADDR                    = 0x80406946\n\tSIOCSLIFPHYADDR                   = 0x8118694a\n\tSIOCSLINKSTR                      = 0x80286988\n\tSIOCSLOWAT                        = 0x80047302\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSVH                           = 0xc0906982\n\tSIOCZIFDATA                       = 0xc0986986\n\tSOCK_CLOEXEC                      = 0x10000000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_FLAGS_MASK                   = 0xf0000000\n\tSOCK_NONBLOCK                     = 0x20000000\n\tSOCK_NOSIGPIPE                    = 0x40000000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_ACCEPTFILTER                   = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NOHEADER                       = 0x100a\n\tSO_NOSIGPIPE                      = 0x800\n\tSO_OOBINLINE                      = 0x100\n\tSO_OVERFLOWED                     = 0x1009\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x100c\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x100b\n\tSO_TIMESTAMP                      = 0x2000\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSYSCTL_VERSION                    = 0x1000000\n\tSYSCTL_VERS_0                     = 0x0\n\tSYSCTL_VERS_1                     = 0x1000000\n\tSYSCTL_VERS_MASK                  = 0xff000000\n\tS_ARCH1                           = 0x10000\n\tS_ARCH2                           = 0x20000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IFWHT                           = 0xe000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tS_LOGIN_SET                       = 0x1\n\tTCIFLUSH                          = 0x1\n\tTCIOFLUSH                         = 0x3\n\tTCOFLUSH                          = 0x2\n\tTCP_CONGCTL                       = 0x20\n\tTCP_KEEPCNT                       = 0x6\n\tTCP_KEEPIDLE                      = 0x3\n\tTCP_KEEPINIT                      = 0x7\n\tTCP_KEEPINTVL                     = 0x5\n\tTCP_MAXBURST                      = 0x4\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x10\n\tTCP_MINMSS                        = 0xd8\n\tTCP_MSS                           = 0x218\n\tTCP_NODELAY                       = 0x1\n\tTCSAFLUSH                         = 0x2\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCONS                          = 0x80047462\n\tTIOCDCDTIMESTAMP                  = 0x40107458\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CDTRCTS                  = 0x10\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGLINED                        = 0x40207442\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGQSIZE                        = 0x40047481\n\tTIOCGRANTPT                       = 0x20007447\n\tTIOCGSID                          = 0x40047463\n\tTIOCGSIZE                         = 0x40087468\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCPTMGET                        = 0x40287446\n\tTIOCPTSNAME                       = 0x40287448\n\tTIOCRCVFRAME                      = 0x80087445\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x2000745f\n\tTIOCSLINED                        = 0x80207443\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSQSIZE                        = 0x80047480\n\tTIOCSSIZE                         = 0x80087467\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x80047465\n\tTIOCSTI                           = 0x80017472\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCXMTFRAME                      = 0x80087444\n\tTOSTOP                            = 0x400000\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALL                              = 0x8\n\tWALLSIG                           = 0x8\n\tWALTSIG                           = 0x4\n\tWCLONE                            = 0x4\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWNOWAIT                           = 0x10000\n\tWNOZOMBIE                         = 0x20000\n\tWOPTSCHECKED                      = 0x40000\n\tWSTOPPED                          = 0x7f\n\tWUNTRACED                         = 0x2\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x58)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x57)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x52)\n\tEILSEQ          = syscall.Errno(0x55)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x60)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tEMULTIHOP       = syscall.Errno(0x5e)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x5d)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODATA         = syscall.Errno(0x59)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOLINK         = syscall.Errno(0x5f)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x53)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x5a)\n\tENOSTR          = syscall.Errno(0x5b)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x56)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x54)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x60)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIME           = syscall.Errno(0x5c)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGPWR    = syscall.Signal(0x20)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large or too small\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol option not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"connection timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disc quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC prog. not avail\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIDRM\", \"identifier removed\"},\n\t{83, \"ENOMSG\", \"no message of desired type\"},\n\t{84, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{85, \"EILSEQ\", \"illegal byte sequence\"},\n\t{86, \"ENOTSUP\", \"not supported\"},\n\t{87, \"ECANCELED\", \"operation Canceled\"},\n\t{88, \"EBADMSG\", \"bad or Corrupt message\"},\n\t{89, \"ENODATA\", \"no message available\"},\n\t{90, \"ENOSR\", \"no STREAM resources\"},\n\t{91, \"ENOSTR\", \"not a STREAM\"},\n\t{92, \"ETIME\", \"STREAM ioctl timeout\"},\n\t{93, \"ENOATTR\", \"attribute not found\"},\n\t{94, \"EMULTIHOP\", \"multihop attempted\"},\n\t{95, \"ENOLINK\", \"link has been severed\"},\n\t{96, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"stopped (signal)\"},\n\t{18, \"SIGTSTP\", \"stopped\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGPWR\", \"power fail/restart\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go",
    "content": "// mkerrors.sh -m32\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m32 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc008427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x400c426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80084277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x800c426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc100445d\n\tDIOCADDRULE                       = 0xccc84404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xccc8441a\n\tDIOCCLRIFFLAG                     = 0xc024445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0d04412\n\tDIOCCLRSTATUS                     = 0xc0244416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1084460\n\tDIOCGETQUEUE                      = 0xc100445f\n\tDIOCGETQUEUES                     = 0xc100445e\n\tDIOCGETRULE                       = 0xccc84407\n\tDIOCGETRULES                      = 0xccc84406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0084454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0084419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0244457\n\tDIOCKILLSRCNODES                  = 0xc068445b\n\tDIOCKILLSTATES                    = 0xc0d04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc084444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0844450\n\tDIOCRADDADDRS                     = 0xc44c4443\n\tDIOCRADDTABLES                    = 0xc44c443d\n\tDIOCRCLRADDRS                     = 0xc44c4442\n\tDIOCRCLRASTATS                    = 0xc44c4448\n\tDIOCRCLRTABLES                    = 0xc44c443c\n\tDIOCRCLRTSTATS                    = 0xc44c4441\n\tDIOCRDELADDRS                     = 0xc44c4444\n\tDIOCRDELTABLES                    = 0xc44c443e\n\tDIOCRGETADDRS                     = 0xc44c4446\n\tDIOCRGETASTATS                    = 0xc44c4447\n\tDIOCRGETTABLES                    = 0xc44c443f\n\tDIOCRGETTSTATS                    = 0xc44c4440\n\tDIOCRINADEFINE                    = 0xc44c444d\n\tDIOCRSETADDRS                     = 0xc44c4445\n\tDIOCRSETTFLAGS                    = 0xc44c444a\n\tDIOCRTSTADDRS                     = 0xc44c4449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0244459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0244414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc00c4451\n\tDIOCXCOMMIT                       = 0xc00c4452\n\tDIOCXROLLBACK                     = 0xc00c4453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80246987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x805c693c\n\tSIOCBRDGADDL                      = 0x805c6949\n\tSIOCBRDGADDS                      = 0x805c6941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x805c693d\n\tSIOCBRDGDELS                      = 0x805c6942\n\tSIOCBRDGFLUSH                     = 0x805c6948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc05c693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc03c6958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc028694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc05c6942\n\tSIOCBRDGRTS                       = 0xc0186943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x805c6955\n\tSIOCBRDGSIFFLGS                   = 0x805c693f\n\tSIOCBRDGSIFPRIO                   = 0x805c6954\n\tSIOCBRDGSIFPROT                   = 0x805c694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80246989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0086924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc024698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc024698d\n\tSIOCGIFGMEMB                      = 0xc024698a\n\tSIOCGIFGROUP                      = 0xc0246988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0386938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8024698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x400c745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{28672, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{28672, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go",
    "content": "// mkerrors.sh\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc008427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80084267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80084277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc100445d\n\tDIOCADDRULE                       = 0xcce04404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcce0441a\n\tDIOCCLRIFFLAG                     = 0xc024445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0d04412\n\tDIOCCLRSTATUS                     = 0xc0244416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1084460\n\tDIOCGETQUEUE                      = 0xc100445f\n\tDIOCGETQUEUES                     = 0xc100445e\n\tDIOCGETRULE                       = 0xcce04407\n\tDIOCGETRULES                      = 0xcce04406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0084454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0084419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0244457\n\tDIOCKILLSRCNODES                  = 0xc068445b\n\tDIOCKILLSTATES                    = 0xc0d04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc44c4443\n\tDIOCRADDTABLES                    = 0xc44c443d\n\tDIOCRCLRADDRS                     = 0xc44c4442\n\tDIOCRCLRASTATS                    = 0xc44c4448\n\tDIOCRCLRTABLES                    = 0xc44c443c\n\tDIOCRCLRTSTATS                    = 0xc44c4441\n\tDIOCRDELADDRS                     = 0xc44c4444\n\tDIOCRDELTABLES                    = 0xc44c443e\n\tDIOCRGETADDRS                     = 0xc44c4446\n\tDIOCRGETASTATS                    = 0xc44c4447\n\tDIOCRGETTABLES                    = 0xc44c443f\n\tDIOCRGETTSTATS                    = 0xc44c4440\n\tDIOCRINADEFINE                    = 0xc44c444d\n\tDIOCRSETADDRS                     = 0xc44c4445\n\tDIOCRSETTFLAGS                    = 0xc44c444a\n\tDIOCRTSTADDRS                     = 0xc44c4449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0244459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0244414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc00c4451\n\tDIOCXCOMMIT                       = 0xc00c4452\n\tDIOCXROLLBACK                     = 0xc00c4453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80246987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc028694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0186943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80246989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0147534\n\tSIOCGETVIFCNT                     = 0xc0147533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0086924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc024698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc024698d\n\tSIOCGIFGMEMB                      = 0xc024698a\n\tSIOCGIFGROUP                      = 0xc0246988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0386938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc00c6978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8024698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{28672, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_arm64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{28672, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build mips64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xfffffff\n\tIPV6_FLOWLABEL_MASK               = 0xfffff\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGIOT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n\t{81920, \"SIGSTKSZ\", \"unknown signal\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_ppc64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build ppc64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xfffffff\n\tIPV6_FLOWLABEL_MASK               = 0xfffff\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMSG_WAITFORONE                    = 0x1000\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_openbsd_riscv64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build riscv64 && openbsd\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_APPLETALK                      = 0x10\n\tAF_BLUETOOTH                      = 0x20\n\tAF_CCITT                          = 0xa\n\tAF_CHAOS                          = 0x5\n\tAF_CNT                            = 0x15\n\tAF_COIP                           = 0x14\n\tAF_DATAKIT                        = 0x9\n\tAF_DECnet                         = 0xc\n\tAF_DLI                            = 0xd\n\tAF_E164                           = 0x1a\n\tAF_ECMA                           = 0x8\n\tAF_ENCAP                          = 0x1c\n\tAF_HYLINK                         = 0xf\n\tAF_IMPLINK                        = 0x3\n\tAF_INET                           = 0x2\n\tAF_INET6                          = 0x18\n\tAF_IPX                            = 0x17\n\tAF_ISDN                           = 0x1a\n\tAF_ISO                            = 0x7\n\tAF_KEY                            = 0x1e\n\tAF_LAT                            = 0xe\n\tAF_LINK                           = 0x12\n\tAF_LOCAL                          = 0x1\n\tAF_MAX                            = 0x24\n\tAF_MPLS                           = 0x21\n\tAF_NATM                           = 0x1b\n\tAF_NS                             = 0x6\n\tAF_OSI                            = 0x7\n\tAF_PUP                            = 0x4\n\tAF_ROUTE                          = 0x11\n\tAF_SIP                            = 0x1d\n\tAF_SNA                            = 0xb\n\tAF_UNIX                           = 0x1\n\tAF_UNSPEC                         = 0x0\n\tALTWERASE                         = 0x200\n\tARPHRD_ETHER                      = 0x1\n\tARPHRD_FRELAY                     = 0xf\n\tARPHRD_IEEE1394                   = 0x18\n\tARPHRD_IEEE802                    = 0x6\n\tB0                                = 0x0\n\tB110                              = 0x6e\n\tB115200                           = 0x1c200\n\tB1200                             = 0x4b0\n\tB134                              = 0x86\n\tB14400                            = 0x3840\n\tB150                              = 0x96\n\tB1800                             = 0x708\n\tB19200                            = 0x4b00\n\tB200                              = 0xc8\n\tB230400                           = 0x38400\n\tB2400                             = 0x960\n\tB28800                            = 0x7080\n\tB300                              = 0x12c\n\tB38400                            = 0x9600\n\tB4800                             = 0x12c0\n\tB50                               = 0x32\n\tB57600                            = 0xe100\n\tB600                              = 0x258\n\tB7200                             = 0x1c20\n\tB75                               = 0x4b\n\tB76800                            = 0x12c00\n\tB9600                             = 0x2580\n\tBIOCFLUSH                         = 0x20004268\n\tBIOCGBLEN                         = 0x40044266\n\tBIOCGDIRFILT                      = 0x4004427c\n\tBIOCGDLT                          = 0x4004426a\n\tBIOCGDLTLIST                      = 0xc010427b\n\tBIOCGETIF                         = 0x4020426b\n\tBIOCGFILDROP                      = 0x40044278\n\tBIOCGHDRCMPLT                     = 0x40044274\n\tBIOCGRSIG                         = 0x40044273\n\tBIOCGRTIMEOUT                     = 0x4010426e\n\tBIOCGSTATS                        = 0x4008426f\n\tBIOCIMMEDIATE                     = 0x80044270\n\tBIOCLOCK                          = 0x20004276\n\tBIOCPROMISC                       = 0x20004269\n\tBIOCSBLEN                         = 0xc0044266\n\tBIOCSDIRFILT                      = 0x8004427d\n\tBIOCSDLT                          = 0x8004427a\n\tBIOCSETF                          = 0x80104267\n\tBIOCSETIF                         = 0x8020426c\n\tBIOCSETWF                         = 0x80104277\n\tBIOCSFILDROP                      = 0x80044279\n\tBIOCSHDRCMPLT                     = 0x80044275\n\tBIOCSRSIG                         = 0x80044272\n\tBIOCSRTIMEOUT                     = 0x8010426d\n\tBIOCVERSION                       = 0x40044271\n\tBPF_A                             = 0x10\n\tBPF_ABS                           = 0x20\n\tBPF_ADD                           = 0x0\n\tBPF_ALIGNMENT                     = 0x4\n\tBPF_ALU                           = 0x4\n\tBPF_AND                           = 0x50\n\tBPF_B                             = 0x10\n\tBPF_DIRECTION_IN                  = 0x1\n\tBPF_DIRECTION_OUT                 = 0x2\n\tBPF_DIV                           = 0x30\n\tBPF_FILDROP_CAPTURE               = 0x1\n\tBPF_FILDROP_DROP                  = 0x2\n\tBPF_FILDROP_PASS                  = 0x0\n\tBPF_F_DIR_IN                      = 0x10\n\tBPF_F_DIR_MASK                    = 0x30\n\tBPF_F_DIR_OUT                     = 0x20\n\tBPF_F_DIR_SHIFT                   = 0x4\n\tBPF_F_FLOWID                      = 0x8\n\tBPF_F_PRI_MASK                    = 0x7\n\tBPF_H                             = 0x8\n\tBPF_IMM                           = 0x0\n\tBPF_IND                           = 0x40\n\tBPF_JA                            = 0x0\n\tBPF_JEQ                           = 0x10\n\tBPF_JGE                           = 0x30\n\tBPF_JGT                           = 0x20\n\tBPF_JMP                           = 0x5\n\tBPF_JSET                          = 0x40\n\tBPF_K                             = 0x0\n\tBPF_LD                            = 0x0\n\tBPF_LDX                           = 0x1\n\tBPF_LEN                           = 0x80\n\tBPF_LSH                           = 0x60\n\tBPF_MAJOR_VERSION                 = 0x1\n\tBPF_MAXBUFSIZE                    = 0x200000\n\tBPF_MAXINSNS                      = 0x200\n\tBPF_MEM                           = 0x60\n\tBPF_MEMWORDS                      = 0x10\n\tBPF_MINBUFSIZE                    = 0x20\n\tBPF_MINOR_VERSION                 = 0x1\n\tBPF_MISC                          = 0x7\n\tBPF_MSH                           = 0xa0\n\tBPF_MUL                           = 0x20\n\tBPF_NEG                           = 0x80\n\tBPF_OR                            = 0x40\n\tBPF_RELEASE                       = 0x30bb6\n\tBPF_RET                           = 0x6\n\tBPF_RND                           = 0xc0\n\tBPF_RSH                           = 0x70\n\tBPF_ST                            = 0x2\n\tBPF_STX                           = 0x3\n\tBPF_SUB                           = 0x10\n\tBPF_TAX                           = 0x0\n\tBPF_TXA                           = 0x80\n\tBPF_W                             = 0x0\n\tBPF_X                             = 0x8\n\tBRKINT                            = 0x2\n\tCFLUSH                            = 0xf\n\tCLOCAL                            = 0x8000\n\tCLOCK_BOOTTIME                    = 0x6\n\tCLOCK_MONOTONIC                   = 0x3\n\tCLOCK_PROCESS_CPUTIME_ID          = 0x2\n\tCLOCK_REALTIME                    = 0x0\n\tCLOCK_THREAD_CPUTIME_ID           = 0x4\n\tCLOCK_UPTIME                      = 0x5\n\tCPUSTATES                         = 0x6\n\tCP_IDLE                           = 0x5\n\tCP_INTR                           = 0x4\n\tCP_NICE                           = 0x1\n\tCP_SPIN                           = 0x3\n\tCP_SYS                            = 0x2\n\tCP_USER                           = 0x0\n\tCREAD                             = 0x800\n\tCRTSCTS                           = 0x10000\n\tCS5                               = 0x0\n\tCS6                               = 0x100\n\tCS7                               = 0x200\n\tCS8                               = 0x300\n\tCSIZE                             = 0x300\n\tCSTART                            = 0x11\n\tCSTATUS                           = 0xff\n\tCSTOP                             = 0x13\n\tCSTOPB                            = 0x400\n\tCSUSP                             = 0x1a\n\tCTL_HW                            = 0x6\n\tCTL_KERN                          = 0x1\n\tCTL_MAXNAME                       = 0xc\n\tCTL_NET                           = 0x4\n\tDIOCADDQUEUE                      = 0xc110445d\n\tDIOCADDRULE                       = 0xcd604404\n\tDIOCADDSTATE                      = 0xc1084425\n\tDIOCCHANGERULE                    = 0xcd60441a\n\tDIOCCLRIFFLAG                     = 0xc028445a\n\tDIOCCLRSRCNODES                   = 0x20004455\n\tDIOCCLRSTATES                     = 0xc0e04412\n\tDIOCCLRSTATUS                     = 0xc0284416\n\tDIOCGETLIMIT                      = 0xc0084427\n\tDIOCGETQSTATS                     = 0xc1204460\n\tDIOCGETQUEUE                      = 0xc110445f\n\tDIOCGETQUEUES                     = 0xc110445e\n\tDIOCGETRULE                       = 0xcd604407\n\tDIOCGETRULES                      = 0xcd604406\n\tDIOCGETRULESET                    = 0xc444443b\n\tDIOCGETRULESETS                   = 0xc444443a\n\tDIOCGETSRCNODES                   = 0xc0104454\n\tDIOCGETSTATE                      = 0xc1084413\n\tDIOCGETSTATES                     = 0xc0104419\n\tDIOCGETSTATUS                     = 0xc1e84415\n\tDIOCGETSYNFLWATS                  = 0xc0084463\n\tDIOCGETTIMEOUT                    = 0xc008441e\n\tDIOCIGETIFACES                    = 0xc0284457\n\tDIOCKILLSRCNODES                  = 0xc080445b\n\tDIOCKILLSTATES                    = 0xc0e04429\n\tDIOCNATLOOK                       = 0xc0504417\n\tDIOCOSFPADD                       = 0xc088444f\n\tDIOCOSFPFLUSH                     = 0x2000444e\n\tDIOCOSFPGET                       = 0xc0884450\n\tDIOCRADDADDRS                     = 0xc4504443\n\tDIOCRADDTABLES                    = 0xc450443d\n\tDIOCRCLRADDRS                     = 0xc4504442\n\tDIOCRCLRASTATS                    = 0xc4504448\n\tDIOCRCLRTABLES                    = 0xc450443c\n\tDIOCRCLRTSTATS                    = 0xc4504441\n\tDIOCRDELADDRS                     = 0xc4504444\n\tDIOCRDELTABLES                    = 0xc450443e\n\tDIOCRGETADDRS                     = 0xc4504446\n\tDIOCRGETASTATS                    = 0xc4504447\n\tDIOCRGETTABLES                    = 0xc450443f\n\tDIOCRGETTSTATS                    = 0xc4504440\n\tDIOCRINADEFINE                    = 0xc450444d\n\tDIOCRSETADDRS                     = 0xc4504445\n\tDIOCRSETTFLAGS                    = 0xc450444a\n\tDIOCRTSTADDRS                     = 0xc4504449\n\tDIOCSETDEBUG                      = 0xc0044418\n\tDIOCSETHOSTID                     = 0xc0044456\n\tDIOCSETIFFLAG                     = 0xc0284459\n\tDIOCSETLIMIT                      = 0xc0084428\n\tDIOCSETREASS                      = 0xc004445c\n\tDIOCSETSTATUSIF                   = 0xc0284414\n\tDIOCSETSYNCOOKIES                 = 0xc0014462\n\tDIOCSETSYNFLWATS                  = 0xc0084461\n\tDIOCSETTIMEOUT                    = 0xc008441d\n\tDIOCSTART                         = 0x20004401\n\tDIOCSTOP                          = 0x20004402\n\tDIOCXBEGIN                        = 0xc0104451\n\tDIOCXCOMMIT                       = 0xc0104452\n\tDIOCXROLLBACK                     = 0xc0104453\n\tDLT_ARCNET                        = 0x7\n\tDLT_ATM_RFC1483                   = 0xb\n\tDLT_AX25                          = 0x3\n\tDLT_CHAOS                         = 0x5\n\tDLT_C_HDLC                        = 0x68\n\tDLT_EN10MB                        = 0x1\n\tDLT_EN3MB                         = 0x2\n\tDLT_ENC                           = 0xd\n\tDLT_FDDI                          = 0xa\n\tDLT_IEEE802                       = 0x6\n\tDLT_IEEE802_11                    = 0x69\n\tDLT_IEEE802_11_RADIO              = 0x7f\n\tDLT_LOOP                          = 0xc\n\tDLT_MPLS                          = 0xdb\n\tDLT_NULL                          = 0x0\n\tDLT_OPENFLOW                      = 0x10b\n\tDLT_PFLOG                         = 0x75\n\tDLT_PFSYNC                        = 0x12\n\tDLT_PPP                           = 0x9\n\tDLT_PPP_BSDOS                     = 0x10\n\tDLT_PPP_ETHER                     = 0x33\n\tDLT_PPP_SERIAL                    = 0x32\n\tDLT_PRONET                        = 0x4\n\tDLT_RAW                           = 0xe\n\tDLT_SLIP                          = 0x8\n\tDLT_SLIP_BSDOS                    = 0xf\n\tDLT_USBPCAP                       = 0xf9\n\tDLT_USER0                         = 0x93\n\tDLT_USER1                         = 0x94\n\tDLT_USER10                        = 0x9d\n\tDLT_USER11                        = 0x9e\n\tDLT_USER12                        = 0x9f\n\tDLT_USER13                        = 0xa0\n\tDLT_USER14                        = 0xa1\n\tDLT_USER15                        = 0xa2\n\tDLT_USER2                         = 0x95\n\tDLT_USER3                         = 0x96\n\tDLT_USER4                         = 0x97\n\tDLT_USER5                         = 0x98\n\tDLT_USER6                         = 0x99\n\tDLT_USER7                         = 0x9a\n\tDLT_USER8                         = 0x9b\n\tDLT_USER9                         = 0x9c\n\tDT_BLK                            = 0x6\n\tDT_CHR                            = 0x2\n\tDT_DIR                            = 0x4\n\tDT_FIFO                           = 0x1\n\tDT_LNK                            = 0xa\n\tDT_REG                            = 0x8\n\tDT_SOCK                           = 0xc\n\tDT_UNKNOWN                        = 0x0\n\tECHO                              = 0x8\n\tECHOCTL                           = 0x40\n\tECHOE                             = 0x2\n\tECHOK                             = 0x4\n\tECHOKE                            = 0x1\n\tECHONL                            = 0x10\n\tECHOPRT                           = 0x20\n\tEMT_TAGOVF                        = 0x1\n\tEMUL_ENABLED                      = 0x1\n\tEMUL_NATIVE                       = 0x2\n\tENDRUNDISC                        = 0x9\n\tETH64_8021_RSVD_MASK              = 0xfffffffffff0\n\tETH64_8021_RSVD_PREFIX            = 0x180c2000000\n\tETHERMIN                          = 0x2e\n\tETHERMTU                          = 0x5dc\n\tETHERTYPE_8023                    = 0x4\n\tETHERTYPE_AARP                    = 0x80f3\n\tETHERTYPE_ACCTON                  = 0x8390\n\tETHERTYPE_AEONIC                  = 0x8036\n\tETHERTYPE_ALPHA                   = 0x814a\n\tETHERTYPE_AMBER                   = 0x6008\n\tETHERTYPE_AMOEBA                  = 0x8145\n\tETHERTYPE_AOE                     = 0x88a2\n\tETHERTYPE_APOLLO                  = 0x80f7\n\tETHERTYPE_APOLLODOMAIN            = 0x8019\n\tETHERTYPE_APPLETALK               = 0x809b\n\tETHERTYPE_APPLITEK                = 0x80c7\n\tETHERTYPE_ARGONAUT                = 0x803a\n\tETHERTYPE_ARP                     = 0x806\n\tETHERTYPE_AT                      = 0x809b\n\tETHERTYPE_ATALK                   = 0x809b\n\tETHERTYPE_ATOMIC                  = 0x86df\n\tETHERTYPE_ATT                     = 0x8069\n\tETHERTYPE_ATTSTANFORD             = 0x8008\n\tETHERTYPE_AUTOPHON                = 0x806a\n\tETHERTYPE_AXIS                    = 0x8856\n\tETHERTYPE_BCLOOP                  = 0x9003\n\tETHERTYPE_BOFL                    = 0x8102\n\tETHERTYPE_CABLETRON               = 0x7034\n\tETHERTYPE_CHAOS                   = 0x804\n\tETHERTYPE_COMDESIGN               = 0x806c\n\tETHERTYPE_COMPUGRAPHIC            = 0x806d\n\tETHERTYPE_COUNTERPOINT            = 0x8062\n\tETHERTYPE_CRONUS                  = 0x8004\n\tETHERTYPE_CRONUSVLN               = 0x8003\n\tETHERTYPE_DCA                     = 0x1234\n\tETHERTYPE_DDE                     = 0x807b\n\tETHERTYPE_DEBNI                   = 0xaaaa\n\tETHERTYPE_DECAM                   = 0x8048\n\tETHERTYPE_DECCUST                 = 0x6006\n\tETHERTYPE_DECDIAG                 = 0x6005\n\tETHERTYPE_DECDNS                  = 0x803c\n\tETHERTYPE_DECDTS                  = 0x803e\n\tETHERTYPE_DECEXPER                = 0x6000\n\tETHERTYPE_DECLAST                 = 0x8041\n\tETHERTYPE_DECLTM                  = 0x803f\n\tETHERTYPE_DECMUMPS                = 0x6009\n\tETHERTYPE_DECNETBIOS              = 0x8040\n\tETHERTYPE_DELTACON                = 0x86de\n\tETHERTYPE_DIDDLE                  = 0x4321\n\tETHERTYPE_DLOG1                   = 0x660\n\tETHERTYPE_DLOG2                   = 0x661\n\tETHERTYPE_DN                      = 0x6003\n\tETHERTYPE_DOGFIGHT                = 0x1989\n\tETHERTYPE_DSMD                    = 0x8039\n\tETHERTYPE_EAPOL                   = 0x888e\n\tETHERTYPE_ECMA                    = 0x803\n\tETHERTYPE_ENCRYPT                 = 0x803d\n\tETHERTYPE_ES                      = 0x805d\n\tETHERTYPE_EXCELAN                 = 0x8010\n\tETHERTYPE_EXPERDATA               = 0x8049\n\tETHERTYPE_FLIP                    = 0x8146\n\tETHERTYPE_FLOWCONTROL             = 0x8808\n\tETHERTYPE_FRARP                   = 0x808\n\tETHERTYPE_GENDYN                  = 0x8068\n\tETHERTYPE_HAYES                   = 0x8130\n\tETHERTYPE_HIPPI_FP                = 0x8180\n\tETHERTYPE_HITACHI                 = 0x8820\n\tETHERTYPE_HP                      = 0x8005\n\tETHERTYPE_IEEEPUP                 = 0xa00\n\tETHERTYPE_IEEEPUPAT               = 0xa01\n\tETHERTYPE_IMLBL                   = 0x4c42\n\tETHERTYPE_IMLBLDIAG               = 0x424c\n\tETHERTYPE_IP                      = 0x800\n\tETHERTYPE_IPAS                    = 0x876c\n\tETHERTYPE_IPV6                    = 0x86dd\n\tETHERTYPE_IPX                     = 0x8137\n\tETHERTYPE_IPXNEW                  = 0x8037\n\tETHERTYPE_KALPANA                 = 0x8582\n\tETHERTYPE_LANBRIDGE               = 0x8038\n\tETHERTYPE_LANPROBE                = 0x8888\n\tETHERTYPE_LAT                     = 0x6004\n\tETHERTYPE_LBACK                   = 0x9000\n\tETHERTYPE_LITTLE                  = 0x8060\n\tETHERTYPE_LLDP                    = 0x88cc\n\tETHERTYPE_LOGICRAFT               = 0x8148\n\tETHERTYPE_LOOPBACK                = 0x9000\n\tETHERTYPE_MACSEC                  = 0x88e5\n\tETHERTYPE_MATRA                   = 0x807a\n\tETHERTYPE_MAX                     = 0xffff\n\tETHERTYPE_MERIT                   = 0x807c\n\tETHERTYPE_MICP                    = 0x873a\n\tETHERTYPE_MOPDL                   = 0x6001\n\tETHERTYPE_MOPRC                   = 0x6002\n\tETHERTYPE_MOTOROLA                = 0x818d\n\tETHERTYPE_MPLS                    = 0x8847\n\tETHERTYPE_MPLS_MCAST              = 0x8848\n\tETHERTYPE_MUMPS                   = 0x813f\n\tETHERTYPE_NBPCC                   = 0x3c04\n\tETHERTYPE_NBPCLAIM                = 0x3c09\n\tETHERTYPE_NBPCLREQ                = 0x3c05\n\tETHERTYPE_NBPCLRSP                = 0x3c06\n\tETHERTYPE_NBPCREQ                 = 0x3c02\n\tETHERTYPE_NBPCRSP                 = 0x3c03\n\tETHERTYPE_NBPDG                   = 0x3c07\n\tETHERTYPE_NBPDGB                  = 0x3c08\n\tETHERTYPE_NBPDLTE                 = 0x3c0a\n\tETHERTYPE_NBPRAR                  = 0x3c0c\n\tETHERTYPE_NBPRAS                  = 0x3c0b\n\tETHERTYPE_NBPRST                  = 0x3c0d\n\tETHERTYPE_NBPSCD                  = 0x3c01\n\tETHERTYPE_NBPVCD                  = 0x3c00\n\tETHERTYPE_NBS                     = 0x802\n\tETHERTYPE_NCD                     = 0x8149\n\tETHERTYPE_NESTAR                  = 0x8006\n\tETHERTYPE_NETBEUI                 = 0x8191\n\tETHERTYPE_NHRP                    = 0x2001\n\tETHERTYPE_NOVELL                  = 0x8138\n\tETHERTYPE_NS                      = 0x600\n\tETHERTYPE_NSAT                    = 0x601\n\tETHERTYPE_NSCOMPAT                = 0x807\n\tETHERTYPE_NSH                     = 0x984f\n\tETHERTYPE_NTRAILER                = 0x10\n\tETHERTYPE_OS9                     = 0x7007\n\tETHERTYPE_OS9NET                  = 0x7009\n\tETHERTYPE_PACER                   = 0x80c6\n\tETHERTYPE_PBB                     = 0x88e7\n\tETHERTYPE_PCS                     = 0x4242\n\tETHERTYPE_PLANNING                = 0x8044\n\tETHERTYPE_PPP                     = 0x880b\n\tETHERTYPE_PPPOE                   = 0x8864\n\tETHERTYPE_PPPOEDISC               = 0x8863\n\tETHERTYPE_PRIMENTS                = 0x7031\n\tETHERTYPE_PUP                     = 0x200\n\tETHERTYPE_PUPAT                   = 0x200\n\tETHERTYPE_QINQ                    = 0x88a8\n\tETHERTYPE_RACAL                   = 0x7030\n\tETHERTYPE_RATIONAL                = 0x8150\n\tETHERTYPE_RAWFR                   = 0x6559\n\tETHERTYPE_RCL                     = 0x1995\n\tETHERTYPE_RDP                     = 0x8739\n\tETHERTYPE_RETIX                   = 0x80f2\n\tETHERTYPE_REVARP                  = 0x8035\n\tETHERTYPE_SCA                     = 0x6007\n\tETHERTYPE_SECTRA                  = 0x86db\n\tETHERTYPE_SECUREDATA              = 0x876d\n\tETHERTYPE_SGITW                   = 0x817e\n\tETHERTYPE_SG_BOUNCE               = 0x8016\n\tETHERTYPE_SG_DIAG                 = 0x8013\n\tETHERTYPE_SG_NETGAMES             = 0x8014\n\tETHERTYPE_SG_RESV                 = 0x8015\n\tETHERTYPE_SIMNET                  = 0x5208\n\tETHERTYPE_SLOW                    = 0x8809\n\tETHERTYPE_SNA                     = 0x80d5\n\tETHERTYPE_SNMP                    = 0x814c\n\tETHERTYPE_SONIX                   = 0xfaf5\n\tETHERTYPE_SPIDER                  = 0x809f\n\tETHERTYPE_SPRITE                  = 0x500\n\tETHERTYPE_STP                     = 0x8181\n\tETHERTYPE_TALARIS                 = 0x812b\n\tETHERTYPE_TALARISMC               = 0x852b\n\tETHERTYPE_TCPCOMP                 = 0x876b\n\tETHERTYPE_TCPSM                   = 0x9002\n\tETHERTYPE_TEC                     = 0x814f\n\tETHERTYPE_TIGAN                   = 0x802f\n\tETHERTYPE_TRAIL                   = 0x1000\n\tETHERTYPE_TRANSETHER              = 0x6558\n\tETHERTYPE_TYMSHARE                = 0x802e\n\tETHERTYPE_UBBST                   = 0x7005\n\tETHERTYPE_UBDEBUG                 = 0x900\n\tETHERTYPE_UBDIAGLOOP              = 0x7002\n\tETHERTYPE_UBDL                    = 0x7000\n\tETHERTYPE_UBNIU                   = 0x7001\n\tETHERTYPE_UBNMC                   = 0x7003\n\tETHERTYPE_VALID                   = 0x1600\n\tETHERTYPE_VARIAN                  = 0x80dd\n\tETHERTYPE_VAXELN                  = 0x803b\n\tETHERTYPE_VEECO                   = 0x8067\n\tETHERTYPE_VEXP                    = 0x805b\n\tETHERTYPE_VGLAB                   = 0x8131\n\tETHERTYPE_VINES                   = 0xbad\n\tETHERTYPE_VINESECHO               = 0xbaf\n\tETHERTYPE_VINESLOOP               = 0xbae\n\tETHERTYPE_VITAL                   = 0xff00\n\tETHERTYPE_VLAN                    = 0x8100\n\tETHERTYPE_VLTLMAN                 = 0x8080\n\tETHERTYPE_VPROD                   = 0x805c\n\tETHERTYPE_VURESERVED              = 0x8147\n\tETHERTYPE_WATERLOO                = 0x8130\n\tETHERTYPE_WELLFLEET               = 0x8103\n\tETHERTYPE_X25                     = 0x805\n\tETHERTYPE_X75                     = 0x801\n\tETHERTYPE_XNSSM                   = 0x9001\n\tETHERTYPE_XTP                     = 0x817d\n\tETHER_ADDR_LEN                    = 0x6\n\tETHER_ALIGN                       = 0x2\n\tETHER_CRC_LEN                     = 0x4\n\tETHER_CRC_POLY_BE                 = 0x4c11db6\n\tETHER_CRC_POLY_LE                 = 0xedb88320\n\tETHER_HDR_LEN                     = 0xe\n\tETHER_MAX_DIX_LEN                 = 0x600\n\tETHER_MAX_HARDMTU_LEN             = 0xff9b\n\tETHER_MAX_LEN                     = 0x5ee\n\tETHER_MIN_LEN                     = 0x40\n\tETHER_TYPE_LEN                    = 0x2\n\tETHER_VLAN_ENCAP_LEN              = 0x4\n\tEVFILT_AIO                        = -0x3\n\tEVFILT_DEVICE                     = -0x8\n\tEVFILT_EXCEPT                     = -0x9\n\tEVFILT_PROC                       = -0x5\n\tEVFILT_READ                       = -0x1\n\tEVFILT_SIGNAL                     = -0x6\n\tEVFILT_SYSCOUNT                   = 0x9\n\tEVFILT_TIMER                      = -0x7\n\tEVFILT_VNODE                      = -0x4\n\tEVFILT_WRITE                      = -0x2\n\tEVL_ENCAPLEN                      = 0x4\n\tEVL_PRIO_BITS                     = 0xd\n\tEVL_PRIO_MAX                      = 0x7\n\tEVL_VLID_MASK                     = 0xfff\n\tEVL_VLID_MAX                      = 0xffe\n\tEVL_VLID_MIN                      = 0x1\n\tEVL_VLID_NULL                     = 0x0\n\tEV_ADD                            = 0x1\n\tEV_CLEAR                          = 0x20\n\tEV_DELETE                         = 0x2\n\tEV_DISABLE                        = 0x8\n\tEV_DISPATCH                       = 0x80\n\tEV_ENABLE                         = 0x4\n\tEV_EOF                            = 0x8000\n\tEV_ERROR                          = 0x4000\n\tEV_FLAG1                          = 0x2000\n\tEV_ONESHOT                        = 0x10\n\tEV_RECEIPT                        = 0x40\n\tEV_SYSFLAGS                       = 0xf800\n\tEXTA                              = 0x4b00\n\tEXTB                              = 0x9600\n\tEXTPROC                           = 0x800\n\tFD_CLOEXEC                        = 0x1\n\tFD_SETSIZE                        = 0x400\n\tFLUSHO                            = 0x800000\n\tF_DUPFD                           = 0x0\n\tF_DUPFD_CLOEXEC                   = 0xa\n\tF_GETFD                           = 0x1\n\tF_GETFL                           = 0x3\n\tF_GETLK                           = 0x7\n\tF_GETOWN                          = 0x5\n\tF_ISATTY                          = 0xb\n\tF_OK                              = 0x0\n\tF_RDLCK                           = 0x1\n\tF_SETFD                           = 0x2\n\tF_SETFL                           = 0x4\n\tF_SETLK                           = 0x8\n\tF_SETLKW                          = 0x9\n\tF_SETOWN                          = 0x6\n\tF_UNLCK                           = 0x2\n\tF_WRLCK                           = 0x3\n\tHUPCL                             = 0x4000\n\tHW_MACHINE                        = 0x1\n\tICANON                            = 0x100\n\tICMP6_FILTER                      = 0x12\n\tICRNL                             = 0x100\n\tIEXTEN                            = 0x400\n\tIFAN_ARRIVAL                      = 0x0\n\tIFAN_DEPARTURE                    = 0x1\n\tIFF_ALLMULTI                      = 0x200\n\tIFF_BROADCAST                     = 0x2\n\tIFF_CANTCHANGE                    = 0x8e52\n\tIFF_DEBUG                         = 0x4\n\tIFF_LINK0                         = 0x1000\n\tIFF_LINK1                         = 0x2000\n\tIFF_LINK2                         = 0x4000\n\tIFF_LOOPBACK                      = 0x8\n\tIFF_MULTICAST                     = 0x8000\n\tIFF_NOARP                         = 0x80\n\tIFF_OACTIVE                       = 0x400\n\tIFF_POINTOPOINT                   = 0x10\n\tIFF_PROMISC                       = 0x100\n\tIFF_RUNNING                       = 0x40\n\tIFF_SIMPLEX                       = 0x800\n\tIFF_STATICARP                     = 0x20\n\tIFF_UP                            = 0x1\n\tIFNAMSIZ                          = 0x10\n\tIFT_1822                          = 0x2\n\tIFT_A12MPPSWITCH                  = 0x82\n\tIFT_AAL2                          = 0xbb\n\tIFT_AAL5                          = 0x31\n\tIFT_ADSL                          = 0x5e\n\tIFT_AFLANE8023                    = 0x3b\n\tIFT_AFLANE8025                    = 0x3c\n\tIFT_ARAP                          = 0x58\n\tIFT_ARCNET                        = 0x23\n\tIFT_ARCNETPLUS                    = 0x24\n\tIFT_ASYNC                         = 0x54\n\tIFT_ATM                           = 0x25\n\tIFT_ATMDXI                        = 0x69\n\tIFT_ATMFUNI                       = 0x6a\n\tIFT_ATMIMA                        = 0x6b\n\tIFT_ATMLOGICAL                    = 0x50\n\tIFT_ATMRADIO                      = 0xbd\n\tIFT_ATMSUBINTERFACE               = 0x86\n\tIFT_ATMVCIENDPT                   = 0xc2\n\tIFT_ATMVIRTUAL                    = 0x95\n\tIFT_BGPPOLICYACCOUNTING           = 0xa2\n\tIFT_BLUETOOTH                     = 0xf8\n\tIFT_BRIDGE                        = 0xd1\n\tIFT_BSC                           = 0x53\n\tIFT_CARP                          = 0xf7\n\tIFT_CCTEMUL                       = 0x3d\n\tIFT_CEPT                          = 0x13\n\tIFT_CES                           = 0x85\n\tIFT_CHANNEL                       = 0x46\n\tIFT_CNR                           = 0x55\n\tIFT_COFFEE                        = 0x84\n\tIFT_COMPOSITELINK                 = 0x9b\n\tIFT_DCN                           = 0x8d\n\tIFT_DIGITALPOWERLINE              = 0x8a\n\tIFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba\n\tIFT_DLSW                          = 0x4a\n\tIFT_DOCSCABLEDOWNSTREAM           = 0x80\n\tIFT_DOCSCABLEMACLAYER             = 0x7f\n\tIFT_DOCSCABLEUPSTREAM             = 0x81\n\tIFT_DOCSCABLEUPSTREAMCHANNEL      = 0xcd\n\tIFT_DS0                           = 0x51\n\tIFT_DS0BUNDLE                     = 0x52\n\tIFT_DS1FDL                        = 0xaa\n\tIFT_DS3                           = 0x1e\n\tIFT_DTM                           = 0x8c\n\tIFT_DUMMY                         = 0xf1\n\tIFT_DVBASILN                      = 0xac\n\tIFT_DVBASIOUT                     = 0xad\n\tIFT_DVBRCCDOWNSTREAM              = 0x93\n\tIFT_DVBRCCMACLAYER                = 0x92\n\tIFT_DVBRCCUPSTREAM                = 0x94\n\tIFT_ECONET                        = 0xce\n\tIFT_ENC                           = 0xf4\n\tIFT_EON                           = 0x19\n\tIFT_EPLRS                         = 0x57\n\tIFT_ESCON                         = 0x49\n\tIFT_ETHER                         = 0x6\n\tIFT_FAITH                         = 0xf3\n\tIFT_FAST                          = 0x7d\n\tIFT_FASTETHER                     = 0x3e\n\tIFT_FASTETHERFX                   = 0x45\n\tIFT_FDDI                          = 0xf\n\tIFT_FIBRECHANNEL                  = 0x38\n\tIFT_FRAMERELAYINTERCONNECT        = 0x3a\n\tIFT_FRAMERELAYMPI                 = 0x5c\n\tIFT_FRDLCIENDPT                   = 0xc1\n\tIFT_FRELAY                        = 0x20\n\tIFT_FRELAYDCE                     = 0x2c\n\tIFT_FRF16MFRBUNDLE                = 0xa3\n\tIFT_FRFORWARD                     = 0x9e\n\tIFT_G703AT2MB                     = 0x43\n\tIFT_G703AT64K                     = 0x42\n\tIFT_GIF                           = 0xf0\n\tIFT_GIGABITETHERNET               = 0x75\n\tIFT_GR303IDT                      = 0xb2\n\tIFT_GR303RDT                      = 0xb1\n\tIFT_H323GATEKEEPER                = 0xa4\n\tIFT_H323PROXY                     = 0xa5\n\tIFT_HDH1822                       = 0x3\n\tIFT_HDLC                          = 0x76\n\tIFT_HDSL2                         = 0xa8\n\tIFT_HIPERLAN2                     = 0xb7\n\tIFT_HIPPI                         = 0x2f\n\tIFT_HIPPIINTERFACE                = 0x39\n\tIFT_HOSTPAD                       = 0x5a\n\tIFT_HSSI                          = 0x2e\n\tIFT_HY                            = 0xe\n\tIFT_IBM370PARCHAN                 = 0x48\n\tIFT_IDSL                          = 0x9a\n\tIFT_IEEE1394                      = 0x90\n\tIFT_IEEE80211                     = 0x47\n\tIFT_IEEE80212                     = 0x37\n\tIFT_IEEE8023ADLAG                 = 0xa1\n\tIFT_IFGSN                         = 0x91\n\tIFT_IMT                           = 0xbe\n\tIFT_INFINIBAND                    = 0xc7\n\tIFT_INTERLEAVE                    = 0x7c\n\tIFT_IP                            = 0x7e\n\tIFT_IPFORWARD                     = 0x8e\n\tIFT_IPOVERATM                     = 0x72\n\tIFT_IPOVERCDLC                    = 0x6d\n\tIFT_IPOVERCLAW                    = 0x6e\n\tIFT_IPSWITCH                      = 0x4e\n\tIFT_ISDN                          = 0x3f\n\tIFT_ISDNBASIC                     = 0x14\n\tIFT_ISDNPRIMARY                   = 0x15\n\tIFT_ISDNS                         = 0x4b\n\tIFT_ISDNU                         = 0x4c\n\tIFT_ISO88022LLC                   = 0x29\n\tIFT_ISO88023                      = 0x7\n\tIFT_ISO88024                      = 0x8\n\tIFT_ISO88025                      = 0x9\n\tIFT_ISO88025CRFPINT               = 0x62\n\tIFT_ISO88025DTR                   = 0x56\n\tIFT_ISO88025FIBER                 = 0x73\n\tIFT_ISO88026                      = 0xa\n\tIFT_ISUP                          = 0xb3\n\tIFT_L2VLAN                        = 0x87\n\tIFT_L3IPVLAN                      = 0x88\n\tIFT_L3IPXVLAN                     = 0x89\n\tIFT_LAPB                          = 0x10\n\tIFT_LAPD                          = 0x4d\n\tIFT_LAPF                          = 0x77\n\tIFT_LINEGROUP                     = 0xd2\n\tIFT_LOCALTALK                     = 0x2a\n\tIFT_LOOP                          = 0x18\n\tIFT_MBIM                          = 0xfa\n\tIFT_MEDIAMAILOVERIP               = 0x8b\n\tIFT_MFSIGLINK                     = 0xa7\n\tIFT_MIOX25                        = 0x26\n\tIFT_MODEM                         = 0x30\n\tIFT_MPC                           = 0x71\n\tIFT_MPLS                          = 0xa6\n\tIFT_MPLSTUNNEL                    = 0x96\n\tIFT_MSDSL                         = 0x8f\n\tIFT_MVL                           = 0xbf\n\tIFT_MYRINET                       = 0x63\n\tIFT_NFAS                          = 0xaf\n\tIFT_NSIP                          = 0x1b\n\tIFT_OPTICALCHANNEL                = 0xc3\n\tIFT_OPTICALTRANSPORT              = 0xc4\n\tIFT_OTHER                         = 0x1\n\tIFT_P10                           = 0xc\n\tIFT_P80                           = 0xd\n\tIFT_PARA                          = 0x22\n\tIFT_PFLOG                         = 0xf5\n\tIFT_PFLOW                         = 0xf9\n\tIFT_PFSYNC                        = 0xf6\n\tIFT_PLC                           = 0xae\n\tIFT_PON155                        = 0xcf\n\tIFT_PON622                        = 0xd0\n\tIFT_POS                           = 0xab\n\tIFT_PPP                           = 0x17\n\tIFT_PPPMULTILINKBUNDLE            = 0x6c\n\tIFT_PROPATM                       = 0xc5\n\tIFT_PROPBWAP2MP                   = 0xb8\n\tIFT_PROPCNLS                      = 0x59\n\tIFT_PROPDOCSWIRELESSDOWNSTREAM    = 0xb5\n\tIFT_PROPDOCSWIRELESSMACLAYER      = 0xb4\n\tIFT_PROPDOCSWIRELESSUPSTREAM      = 0xb6\n\tIFT_PROPMUX                       = 0x36\n\tIFT_PROPVIRTUAL                   = 0x35\n\tIFT_PROPWIRELESSP2P               = 0x9d\n\tIFT_PTPSERIAL                     = 0x16\n\tIFT_PVC                           = 0xf2\n\tIFT_Q2931                         = 0xc9\n\tIFT_QLLC                          = 0x44\n\tIFT_RADIOMAC                      = 0xbc\n\tIFT_RADSL                         = 0x5f\n\tIFT_REACHDSL                      = 0xc0\n\tIFT_RFC1483                       = 0x9f\n\tIFT_RS232                         = 0x21\n\tIFT_RSRB                          = 0x4f\n\tIFT_SDLC                          = 0x11\n\tIFT_SDSL                          = 0x60\n\tIFT_SHDSL                         = 0xa9\n\tIFT_SIP                           = 0x1f\n\tIFT_SIPSIG                        = 0xcc\n\tIFT_SIPTG                         = 0xcb\n\tIFT_SLIP                          = 0x1c\n\tIFT_SMDSDXI                       = 0x2b\n\tIFT_SMDSICIP                      = 0x34\n\tIFT_SONET                         = 0x27\n\tIFT_SONETOVERHEADCHANNEL          = 0xb9\n\tIFT_SONETPATH                     = 0x32\n\tIFT_SONETVT                       = 0x33\n\tIFT_SRP                           = 0x97\n\tIFT_SS7SIGLINK                    = 0x9c\n\tIFT_STACKTOSTACK                  = 0x6f\n\tIFT_STARLAN                       = 0xb\n\tIFT_T1                            = 0x12\n\tIFT_TDLC                          = 0x74\n\tIFT_TELINK                        = 0xc8\n\tIFT_TERMPAD                       = 0x5b\n\tIFT_TR008                         = 0xb0\n\tIFT_TRANSPHDLC                    = 0x7b\n\tIFT_TUNNEL                        = 0x83\n\tIFT_ULTRA                         = 0x1d\n\tIFT_USB                           = 0xa0\n\tIFT_V11                           = 0x40\n\tIFT_V35                           = 0x2d\n\tIFT_V36                           = 0x41\n\tIFT_V37                           = 0x78\n\tIFT_VDSL                          = 0x61\n\tIFT_VIRTUALIPADDRESS              = 0x70\n\tIFT_VIRTUALTG                     = 0xca\n\tIFT_VOICEDID                      = 0xd5\n\tIFT_VOICEEM                       = 0x64\n\tIFT_VOICEEMFGD                    = 0xd3\n\tIFT_VOICEENCAP                    = 0x67\n\tIFT_VOICEFGDEANA                  = 0xd4\n\tIFT_VOICEFXO                      = 0x65\n\tIFT_VOICEFXS                      = 0x66\n\tIFT_VOICEOVERATM                  = 0x98\n\tIFT_VOICEOVERCABLE                = 0xc6\n\tIFT_VOICEOVERFRAMERELAY           = 0x99\n\tIFT_VOICEOVERIP                   = 0x68\n\tIFT_WIREGUARD                     = 0xfb\n\tIFT_X213                          = 0x5d\n\tIFT_X25                           = 0x5\n\tIFT_X25DDN                        = 0x4\n\tIFT_X25HUNTGROUP                  = 0x7a\n\tIFT_X25MLP                        = 0x79\n\tIFT_X25PLE                        = 0x28\n\tIFT_XETHER                        = 0x1a\n\tIGNBRK                            = 0x1\n\tIGNCR                             = 0x80\n\tIGNPAR                            = 0x4\n\tIMAXBEL                           = 0x2000\n\tINLCR                             = 0x40\n\tINPCK                             = 0x10\n\tIN_CLASSA_HOST                    = 0xffffff\n\tIN_CLASSA_MAX                     = 0x80\n\tIN_CLASSA_NET                     = 0xff000000\n\tIN_CLASSA_NSHIFT                  = 0x18\n\tIN_CLASSB_HOST                    = 0xffff\n\tIN_CLASSB_MAX                     = 0x10000\n\tIN_CLASSB_NET                     = 0xffff0000\n\tIN_CLASSB_NSHIFT                  = 0x10\n\tIN_CLASSC_HOST                    = 0xff\n\tIN_CLASSC_NET                     = 0xffffff00\n\tIN_CLASSC_NSHIFT                  = 0x8\n\tIN_CLASSD_HOST                    = 0xfffffff\n\tIN_CLASSD_NET                     = 0xf0000000\n\tIN_CLASSD_NSHIFT                  = 0x1c\n\tIN_LOOPBACKNET                    = 0x7f\n\tIN_RFC3021_HOST                   = 0x1\n\tIN_RFC3021_NET                    = 0xfffffffe\n\tIN_RFC3021_NSHIFT                 = 0x1f\n\tIPPROTO_AH                        = 0x33\n\tIPPROTO_CARP                      = 0x70\n\tIPPROTO_DIVERT                    = 0x102\n\tIPPROTO_DONE                      = 0x101\n\tIPPROTO_DSTOPTS                   = 0x3c\n\tIPPROTO_EGP                       = 0x8\n\tIPPROTO_ENCAP                     = 0x62\n\tIPPROTO_EON                       = 0x50\n\tIPPROTO_ESP                       = 0x32\n\tIPPROTO_ETHERIP                   = 0x61\n\tIPPROTO_FRAGMENT                  = 0x2c\n\tIPPROTO_GGP                       = 0x3\n\tIPPROTO_GRE                       = 0x2f\n\tIPPROTO_HOPOPTS                   = 0x0\n\tIPPROTO_ICMP                      = 0x1\n\tIPPROTO_ICMPV6                    = 0x3a\n\tIPPROTO_IDP                       = 0x16\n\tIPPROTO_IGMP                      = 0x2\n\tIPPROTO_IP                        = 0x0\n\tIPPROTO_IPCOMP                    = 0x6c\n\tIPPROTO_IPIP                      = 0x4\n\tIPPROTO_IPV4                      = 0x4\n\tIPPROTO_IPV6                      = 0x29\n\tIPPROTO_MAX                       = 0x100\n\tIPPROTO_MAXID                     = 0x103\n\tIPPROTO_MOBILE                    = 0x37\n\tIPPROTO_MPLS                      = 0x89\n\tIPPROTO_NONE                      = 0x3b\n\tIPPROTO_PFSYNC                    = 0xf0\n\tIPPROTO_PIM                       = 0x67\n\tIPPROTO_PUP                       = 0xc\n\tIPPROTO_RAW                       = 0xff\n\tIPPROTO_ROUTING                   = 0x2b\n\tIPPROTO_RSVP                      = 0x2e\n\tIPPROTO_SCTP                      = 0x84\n\tIPPROTO_TCP                       = 0x6\n\tIPPROTO_TP                        = 0x1d\n\tIPPROTO_UDP                       = 0x11\n\tIPPROTO_UDPLITE                   = 0x88\n\tIPV6_AUTH_LEVEL                   = 0x35\n\tIPV6_AUTOFLOWLABEL                = 0x3b\n\tIPV6_CHECKSUM                     = 0x1a\n\tIPV6_DEFAULT_MULTICAST_HOPS       = 0x1\n\tIPV6_DEFAULT_MULTICAST_LOOP       = 0x1\n\tIPV6_DEFHLIM                      = 0x40\n\tIPV6_DONTFRAG                     = 0x3e\n\tIPV6_DSTOPTS                      = 0x32\n\tIPV6_ESP_NETWORK_LEVEL            = 0x37\n\tIPV6_ESP_TRANS_LEVEL              = 0x36\n\tIPV6_FAITH                        = 0x1d\n\tIPV6_FLOWINFO_MASK                = 0xffffff0f\n\tIPV6_FLOWLABEL_MASK               = 0xffff0f00\n\tIPV6_FRAGTTL                      = 0x78\n\tIPV6_HLIMDEC                      = 0x1\n\tIPV6_HOPLIMIT                     = 0x2f\n\tIPV6_HOPOPTS                      = 0x31\n\tIPV6_IPCOMP_LEVEL                 = 0x3c\n\tIPV6_JOIN_GROUP                   = 0xc\n\tIPV6_LEAVE_GROUP                  = 0xd\n\tIPV6_MAXHLIM                      = 0xff\n\tIPV6_MAXPACKET                    = 0xffff\n\tIPV6_MINHOPCOUNT                  = 0x41\n\tIPV6_MMTU                         = 0x500\n\tIPV6_MULTICAST_HOPS               = 0xa\n\tIPV6_MULTICAST_IF                 = 0x9\n\tIPV6_MULTICAST_LOOP               = 0xb\n\tIPV6_NEXTHOP                      = 0x30\n\tIPV6_OPTIONS                      = 0x1\n\tIPV6_PATHMTU                      = 0x2c\n\tIPV6_PIPEX                        = 0x3f\n\tIPV6_PKTINFO                      = 0x2e\n\tIPV6_PORTRANGE                    = 0xe\n\tIPV6_PORTRANGE_DEFAULT            = 0x0\n\tIPV6_PORTRANGE_HIGH               = 0x1\n\tIPV6_PORTRANGE_LOW                = 0x2\n\tIPV6_RECVDSTOPTS                  = 0x28\n\tIPV6_RECVDSTPORT                  = 0x40\n\tIPV6_RECVHOPLIMIT                 = 0x25\n\tIPV6_RECVHOPOPTS                  = 0x27\n\tIPV6_RECVPATHMTU                  = 0x2b\n\tIPV6_RECVPKTINFO                  = 0x24\n\tIPV6_RECVRTHDR                    = 0x26\n\tIPV6_RECVTCLASS                   = 0x39\n\tIPV6_RTABLE                       = 0x1021\n\tIPV6_RTHDR                        = 0x33\n\tIPV6_RTHDRDSTOPTS                 = 0x23\n\tIPV6_RTHDR_LOOSE                  = 0x0\n\tIPV6_RTHDR_STRICT                 = 0x1\n\tIPV6_RTHDR_TYPE_0                 = 0x0\n\tIPV6_SOCKOPT_RESERVED1            = 0x3\n\tIPV6_TCLASS                       = 0x3d\n\tIPV6_UNICAST_HOPS                 = 0x4\n\tIPV6_USE_MIN_MTU                  = 0x2a\n\tIPV6_V6ONLY                       = 0x1b\n\tIPV6_VERSION                      = 0x60\n\tIPV6_VERSION_MASK                 = 0xf0\n\tIP_ADD_MEMBERSHIP                 = 0xc\n\tIP_AUTH_LEVEL                     = 0x14\n\tIP_DEFAULT_MULTICAST_LOOP         = 0x1\n\tIP_DEFAULT_MULTICAST_TTL          = 0x1\n\tIP_DF                             = 0x4000\n\tIP_DROP_MEMBERSHIP                = 0xd\n\tIP_ESP_NETWORK_LEVEL              = 0x16\n\tIP_ESP_TRANS_LEVEL                = 0x15\n\tIP_HDRINCL                        = 0x2\n\tIP_IPCOMP_LEVEL                   = 0x1d\n\tIP_IPDEFTTL                       = 0x25\n\tIP_IPSECFLOWINFO                  = 0x24\n\tIP_IPSEC_LOCAL_AUTH               = 0x1b\n\tIP_IPSEC_LOCAL_CRED               = 0x19\n\tIP_IPSEC_LOCAL_ID                 = 0x17\n\tIP_IPSEC_REMOTE_AUTH              = 0x1c\n\tIP_IPSEC_REMOTE_CRED              = 0x1a\n\tIP_IPSEC_REMOTE_ID                = 0x18\n\tIP_MAXPACKET                      = 0xffff\n\tIP_MAX_MEMBERSHIPS                = 0xfff\n\tIP_MF                             = 0x2000\n\tIP_MINTTL                         = 0x20\n\tIP_MIN_MEMBERSHIPS                = 0xf\n\tIP_MSS                            = 0x240\n\tIP_MULTICAST_IF                   = 0x9\n\tIP_MULTICAST_LOOP                 = 0xb\n\tIP_MULTICAST_TTL                  = 0xa\n\tIP_OFFMASK                        = 0x1fff\n\tIP_OPTIONS                        = 0x1\n\tIP_PIPEX                          = 0x22\n\tIP_PORTRANGE                      = 0x13\n\tIP_PORTRANGE_DEFAULT              = 0x0\n\tIP_PORTRANGE_HIGH                 = 0x1\n\tIP_PORTRANGE_LOW                  = 0x2\n\tIP_RECVDSTADDR                    = 0x7\n\tIP_RECVDSTPORT                    = 0x21\n\tIP_RECVIF                         = 0x1e\n\tIP_RECVOPTS                       = 0x5\n\tIP_RECVRETOPTS                    = 0x6\n\tIP_RECVRTABLE                     = 0x23\n\tIP_RECVTTL                        = 0x1f\n\tIP_RETOPTS                        = 0x8\n\tIP_RF                             = 0x8000\n\tIP_RTABLE                         = 0x1021\n\tIP_SENDSRCADDR                    = 0x7\n\tIP_TOS                            = 0x3\n\tIP_TTL                            = 0x4\n\tISIG                              = 0x80\n\tISTRIP                            = 0x20\n\tITIMER_PROF                       = 0x2\n\tITIMER_REAL                       = 0x0\n\tITIMER_VIRTUAL                    = 0x1\n\tIUCLC                             = 0x1000\n\tIXANY                             = 0x800\n\tIXOFF                             = 0x400\n\tIXON                              = 0x200\n\tKERN_HOSTNAME                     = 0xa\n\tKERN_OSRELEASE                    = 0x2\n\tKERN_OSTYPE                       = 0x1\n\tKERN_VERSION                      = 0x4\n\tLCNT_OVERLOAD_FLUSH               = 0x6\n\tLOCK_EX                           = 0x2\n\tLOCK_NB                           = 0x4\n\tLOCK_SH                           = 0x1\n\tLOCK_UN                           = 0x8\n\tMADV_DONTNEED                     = 0x4\n\tMADV_FREE                         = 0x6\n\tMADV_NORMAL                       = 0x0\n\tMADV_RANDOM                       = 0x1\n\tMADV_SEQUENTIAL                   = 0x2\n\tMADV_SPACEAVAIL                   = 0x5\n\tMADV_WILLNEED                     = 0x3\n\tMAP_ANON                          = 0x1000\n\tMAP_ANONYMOUS                     = 0x1000\n\tMAP_CONCEAL                       = 0x8000\n\tMAP_COPY                          = 0x2\n\tMAP_FILE                          = 0x0\n\tMAP_FIXED                         = 0x10\n\tMAP_FLAGMASK                      = 0xfff7\n\tMAP_HASSEMAPHORE                  = 0x0\n\tMAP_INHERIT                       = 0x0\n\tMAP_INHERIT_COPY                  = 0x1\n\tMAP_INHERIT_NONE                  = 0x2\n\tMAP_INHERIT_SHARE                 = 0x0\n\tMAP_INHERIT_ZERO                  = 0x3\n\tMAP_NOEXTEND                      = 0x0\n\tMAP_NORESERVE                     = 0x0\n\tMAP_PRIVATE                       = 0x2\n\tMAP_RENAME                        = 0x0\n\tMAP_SHARED                        = 0x1\n\tMAP_STACK                         = 0x4000\n\tMAP_TRYFIXED                      = 0x0\n\tMCL_CURRENT                       = 0x1\n\tMCL_FUTURE                        = 0x2\n\tMNT_ASYNC                         = 0x40\n\tMNT_DEFEXPORTED                   = 0x200\n\tMNT_DELEXPORT                     = 0x20000\n\tMNT_DOOMED                        = 0x8000000\n\tMNT_EXPORTANON                    = 0x400\n\tMNT_EXPORTED                      = 0x100\n\tMNT_EXRDONLY                      = 0x80\n\tMNT_FORCE                         = 0x80000\n\tMNT_LAZY                          = 0x3\n\tMNT_LOCAL                         = 0x1000\n\tMNT_NOATIME                       = 0x8000\n\tMNT_NODEV                         = 0x10\n\tMNT_NOEXEC                        = 0x4\n\tMNT_NOPERM                        = 0x20\n\tMNT_NOSUID                        = 0x8\n\tMNT_NOWAIT                        = 0x2\n\tMNT_QUOTA                         = 0x2000\n\tMNT_RDONLY                        = 0x1\n\tMNT_RELOAD                        = 0x40000\n\tMNT_ROOTFS                        = 0x4000\n\tMNT_SOFTDEP                       = 0x4000000\n\tMNT_STALLED                       = 0x100000\n\tMNT_SWAPPABLE                     = 0x200000\n\tMNT_SYNCHRONOUS                   = 0x2\n\tMNT_UPDATE                        = 0x10000\n\tMNT_VISFLAGMASK                   = 0x400ffff\n\tMNT_WAIT                          = 0x1\n\tMNT_WANTRDWR                      = 0x2000000\n\tMNT_WXALLOWED                     = 0x800\n\tMOUNT_AFS                         = \"afs\"\n\tMOUNT_CD9660                      = \"cd9660\"\n\tMOUNT_EXT2FS                      = \"ext2fs\"\n\tMOUNT_FFS                         = \"ffs\"\n\tMOUNT_FUSEFS                      = \"fuse\"\n\tMOUNT_MFS                         = \"mfs\"\n\tMOUNT_MSDOS                       = \"msdos\"\n\tMOUNT_NCPFS                       = \"ncpfs\"\n\tMOUNT_NFS                         = \"nfs\"\n\tMOUNT_NTFS                        = \"ntfs\"\n\tMOUNT_TMPFS                       = \"tmpfs\"\n\tMOUNT_UDF                         = \"udf\"\n\tMOUNT_UFS                         = \"ffs\"\n\tMSG_BCAST                         = 0x100\n\tMSG_CMSG_CLOEXEC                  = 0x800\n\tMSG_CTRUNC                        = 0x20\n\tMSG_DONTROUTE                     = 0x4\n\tMSG_DONTWAIT                      = 0x80\n\tMSG_EOR                           = 0x8\n\tMSG_MCAST                         = 0x200\n\tMSG_NOSIGNAL                      = 0x400\n\tMSG_OOB                           = 0x1\n\tMSG_PEEK                          = 0x2\n\tMSG_TRUNC                         = 0x10\n\tMSG_WAITALL                       = 0x40\n\tMS_ASYNC                          = 0x1\n\tMS_INVALIDATE                     = 0x4\n\tMS_SYNC                           = 0x2\n\tNAME_MAX                          = 0xff\n\tNET_RT_DUMP                       = 0x1\n\tNET_RT_FLAGS                      = 0x2\n\tNET_RT_IFLIST                     = 0x3\n\tNET_RT_IFNAMES                    = 0x6\n\tNET_RT_MAXID                      = 0x8\n\tNET_RT_SOURCE                     = 0x7\n\tNET_RT_STATS                      = 0x4\n\tNET_RT_TABLE                      = 0x5\n\tNFDBITS                           = 0x20\n\tNOFLSH                            = 0x80000000\n\tNOKERNINFO                        = 0x2000000\n\tNOTE_ATTRIB                       = 0x8\n\tNOTE_CHANGE                       = 0x1\n\tNOTE_CHILD                        = 0x4\n\tNOTE_DELETE                       = 0x1\n\tNOTE_EOF                          = 0x2\n\tNOTE_EXEC                         = 0x20000000\n\tNOTE_EXIT                         = 0x80000000\n\tNOTE_EXTEND                       = 0x4\n\tNOTE_FORK                         = 0x40000000\n\tNOTE_LINK                         = 0x10\n\tNOTE_LOWAT                        = 0x1\n\tNOTE_OOB                          = 0x4\n\tNOTE_PCTRLMASK                    = 0xf0000000\n\tNOTE_PDATAMASK                    = 0xfffff\n\tNOTE_RENAME                       = 0x20\n\tNOTE_REVOKE                       = 0x40\n\tNOTE_TRACK                        = 0x1\n\tNOTE_TRACKERR                     = 0x2\n\tNOTE_TRUNCATE                     = 0x80\n\tNOTE_WRITE                        = 0x2\n\tOCRNL                             = 0x10\n\tOLCUC                             = 0x20\n\tONLCR                             = 0x2\n\tONLRET                            = 0x80\n\tONOCR                             = 0x40\n\tONOEOT                            = 0x8\n\tOPOST                             = 0x1\n\tOXTABS                            = 0x4\n\tO_ACCMODE                         = 0x3\n\tO_APPEND                          = 0x8\n\tO_ASYNC                           = 0x40\n\tO_CLOEXEC                         = 0x10000\n\tO_CREAT                           = 0x200\n\tO_DIRECTORY                       = 0x20000\n\tO_DSYNC                           = 0x80\n\tO_EXCL                            = 0x800\n\tO_EXLOCK                          = 0x20\n\tO_FSYNC                           = 0x80\n\tO_NDELAY                          = 0x4\n\tO_NOCTTY                          = 0x8000\n\tO_NOFOLLOW                        = 0x100\n\tO_NONBLOCK                        = 0x4\n\tO_RDONLY                          = 0x0\n\tO_RDWR                            = 0x2\n\tO_RSYNC                           = 0x80\n\tO_SHLOCK                          = 0x10\n\tO_SYNC                            = 0x80\n\tO_TRUNC                           = 0x400\n\tO_WRONLY                          = 0x1\n\tPARENB                            = 0x1000\n\tPARMRK                            = 0x8\n\tPARODD                            = 0x2000\n\tPENDIN                            = 0x20000000\n\tPF_FLUSH                          = 0x1\n\tPRIO_PGRP                         = 0x1\n\tPRIO_PROCESS                      = 0x0\n\tPRIO_USER                         = 0x2\n\tPROT_EXEC                         = 0x4\n\tPROT_NONE                         = 0x0\n\tPROT_READ                         = 0x1\n\tPROT_WRITE                        = 0x2\n\tRLIMIT_CORE                       = 0x4\n\tRLIMIT_CPU                        = 0x0\n\tRLIMIT_DATA                       = 0x2\n\tRLIMIT_FSIZE                      = 0x1\n\tRLIMIT_MEMLOCK                    = 0x6\n\tRLIMIT_NOFILE                     = 0x8\n\tRLIMIT_NPROC                      = 0x7\n\tRLIMIT_RSS                        = 0x5\n\tRLIMIT_STACK                      = 0x3\n\tRLIM_INFINITY                     = 0x7fffffffffffffff\n\tRTAX_AUTHOR                       = 0x6\n\tRTAX_BFD                          = 0xb\n\tRTAX_BRD                          = 0x7\n\tRTAX_DNS                          = 0xc\n\tRTAX_DST                          = 0x0\n\tRTAX_GATEWAY                      = 0x1\n\tRTAX_GENMASK                      = 0x3\n\tRTAX_IFA                          = 0x5\n\tRTAX_IFP                          = 0x4\n\tRTAX_LABEL                        = 0xa\n\tRTAX_MAX                          = 0xf\n\tRTAX_NETMASK                      = 0x2\n\tRTAX_SEARCH                       = 0xe\n\tRTAX_SRC                          = 0x8\n\tRTAX_SRCMASK                      = 0x9\n\tRTAX_STATIC                       = 0xd\n\tRTA_AUTHOR                        = 0x40\n\tRTA_BFD                           = 0x800\n\tRTA_BRD                           = 0x80\n\tRTA_DNS                           = 0x1000\n\tRTA_DST                           = 0x1\n\tRTA_GATEWAY                       = 0x2\n\tRTA_GENMASK                       = 0x8\n\tRTA_IFA                           = 0x20\n\tRTA_IFP                           = 0x10\n\tRTA_LABEL                         = 0x400\n\tRTA_NETMASK                       = 0x4\n\tRTA_SEARCH                        = 0x4000\n\tRTA_SRC                           = 0x100\n\tRTA_SRCMASK                       = 0x200\n\tRTA_STATIC                        = 0x2000\n\tRTF_ANNOUNCE                      = 0x4000\n\tRTF_BFD                           = 0x1000000\n\tRTF_BLACKHOLE                     = 0x1000\n\tRTF_BROADCAST                     = 0x400000\n\tRTF_CACHED                        = 0x20000\n\tRTF_CLONED                        = 0x10000\n\tRTF_CLONING                       = 0x100\n\tRTF_CONNECTED                     = 0x800000\n\tRTF_DONE                          = 0x40\n\tRTF_DYNAMIC                       = 0x10\n\tRTF_FMASK                         = 0x110fc08\n\tRTF_GATEWAY                       = 0x2\n\tRTF_HOST                          = 0x4\n\tRTF_LLINFO                        = 0x400\n\tRTF_LOCAL                         = 0x200000\n\tRTF_MODIFIED                      = 0x20\n\tRTF_MPATH                         = 0x40000\n\tRTF_MPLS                          = 0x100000\n\tRTF_MULTICAST                     = 0x200\n\tRTF_PERMANENT_ARP                 = 0x2000\n\tRTF_PROTO1                        = 0x8000\n\tRTF_PROTO2                        = 0x4000\n\tRTF_PROTO3                        = 0x2000\n\tRTF_REJECT                        = 0x8\n\tRTF_STATIC                        = 0x800\n\tRTF_UP                            = 0x1\n\tRTF_USETRAILERS                   = 0x8000\n\tRTM_80211INFO                     = 0x15\n\tRTM_ADD                           = 0x1\n\tRTM_BFD                           = 0x12\n\tRTM_CHANGE                        = 0x3\n\tRTM_CHGADDRATTR                   = 0x14\n\tRTM_DELADDR                       = 0xd\n\tRTM_DELETE                        = 0x2\n\tRTM_DESYNC                        = 0x10\n\tRTM_GET                           = 0x4\n\tRTM_IFANNOUNCE                    = 0xf\n\tRTM_IFINFO                        = 0xe\n\tRTM_INVALIDATE                    = 0x11\n\tRTM_LOSING                        = 0x5\n\tRTM_MAXSIZE                       = 0x800\n\tRTM_MISS                          = 0x7\n\tRTM_NEWADDR                       = 0xc\n\tRTM_PROPOSAL                      = 0x13\n\tRTM_REDIRECT                      = 0x6\n\tRTM_RESOLVE                       = 0xb\n\tRTM_SOURCE                        = 0x16\n\tRTM_VERSION                       = 0x5\n\tRTV_EXPIRE                        = 0x4\n\tRTV_HOPCOUNT                      = 0x2\n\tRTV_MTU                           = 0x1\n\tRTV_RPIPE                         = 0x8\n\tRTV_RTT                           = 0x40\n\tRTV_RTTVAR                        = 0x80\n\tRTV_SPIPE                         = 0x10\n\tRTV_SSTHRESH                      = 0x20\n\tRT_TABLEID_BITS                   = 0x8\n\tRT_TABLEID_MASK                   = 0xff\n\tRT_TABLEID_MAX                    = 0xff\n\tRUSAGE_CHILDREN                   = -0x1\n\tRUSAGE_SELF                       = 0x0\n\tRUSAGE_THREAD                     = 0x1\n\tSCM_RIGHTS                        = 0x1\n\tSCM_TIMESTAMP                     = 0x4\n\tSEEK_CUR                          = 0x1\n\tSEEK_END                          = 0x2\n\tSEEK_SET                          = 0x0\n\tSHUT_RD                           = 0x0\n\tSHUT_RDWR                         = 0x2\n\tSHUT_WR                           = 0x1\n\tSIOCADDMULTI                      = 0x80206931\n\tSIOCAIFADDR                       = 0x8040691a\n\tSIOCAIFGROUP                      = 0x80286987\n\tSIOCATMARK                        = 0x40047307\n\tSIOCBRDGADD                       = 0x8060693c\n\tSIOCBRDGADDL                      = 0x80606949\n\tSIOCBRDGADDS                      = 0x80606941\n\tSIOCBRDGARL                       = 0x808c694d\n\tSIOCBRDGDADDR                     = 0x81286947\n\tSIOCBRDGDEL                       = 0x8060693d\n\tSIOCBRDGDELS                      = 0x80606942\n\tSIOCBRDGFLUSH                     = 0x80606948\n\tSIOCBRDGFRL                       = 0x808c694e\n\tSIOCBRDGGCACHE                    = 0xc0146941\n\tSIOCBRDGGFD                       = 0xc0146952\n\tSIOCBRDGGHT                       = 0xc0146951\n\tSIOCBRDGGIFFLGS                   = 0xc060693e\n\tSIOCBRDGGMA                       = 0xc0146953\n\tSIOCBRDGGPARAM                    = 0xc0406958\n\tSIOCBRDGGPRI                      = 0xc0146950\n\tSIOCBRDGGRL                       = 0xc030694f\n\tSIOCBRDGGTO                       = 0xc0146946\n\tSIOCBRDGIFS                       = 0xc0606942\n\tSIOCBRDGRTS                       = 0xc0206943\n\tSIOCBRDGSADDR                     = 0xc1286944\n\tSIOCBRDGSCACHE                    = 0x80146940\n\tSIOCBRDGSFD                       = 0x80146952\n\tSIOCBRDGSHT                       = 0x80146951\n\tSIOCBRDGSIFCOST                   = 0x80606955\n\tSIOCBRDGSIFFLGS                   = 0x8060693f\n\tSIOCBRDGSIFPRIO                   = 0x80606954\n\tSIOCBRDGSIFPROT                   = 0x8060694a\n\tSIOCBRDGSMA                       = 0x80146953\n\tSIOCBRDGSPRI                      = 0x80146950\n\tSIOCBRDGSPROTO                    = 0x8014695a\n\tSIOCBRDGSTO                       = 0x80146945\n\tSIOCBRDGSTXHC                     = 0x80146959\n\tSIOCDELLABEL                      = 0x80206997\n\tSIOCDELMULTI                      = 0x80206932\n\tSIOCDIFADDR                       = 0x80206919\n\tSIOCDIFGROUP                      = 0x80286989\n\tSIOCDIFPARENT                     = 0x802069b4\n\tSIOCDIFPHYADDR                    = 0x80206949\n\tSIOCDPWE3NEIGHBOR                 = 0x802069de\n\tSIOCDVNETID                       = 0x802069af\n\tSIOCGETKALIVE                     = 0xc01869a4\n\tSIOCGETLABEL                      = 0x8020699a\n\tSIOCGETMPWCFG                     = 0xc02069ae\n\tSIOCGETPFLOW                      = 0xc02069fe\n\tSIOCGETPFSYNC                     = 0xc02069f8\n\tSIOCGETSGCNT                      = 0xc0207534\n\tSIOCGETVIFCNT                     = 0xc0287533\n\tSIOCGETVLAN                       = 0xc0206990\n\tSIOCGIFADDR                       = 0xc0206921\n\tSIOCGIFBRDADDR                    = 0xc0206923\n\tSIOCGIFCONF                       = 0xc0106924\n\tSIOCGIFDATA                       = 0xc020691b\n\tSIOCGIFDESCR                      = 0xc0206981\n\tSIOCGIFDSTADDR                    = 0xc0206922\n\tSIOCGIFFLAGS                      = 0xc0206911\n\tSIOCGIFGATTR                      = 0xc028698b\n\tSIOCGIFGENERIC                    = 0xc020693a\n\tSIOCGIFGLIST                      = 0xc028698d\n\tSIOCGIFGMEMB                      = 0xc028698a\n\tSIOCGIFGROUP                      = 0xc0286988\n\tSIOCGIFHARDMTU                    = 0xc02069a5\n\tSIOCGIFLLPRIO                     = 0xc02069b6\n\tSIOCGIFMEDIA                      = 0xc0406938\n\tSIOCGIFMETRIC                     = 0xc0206917\n\tSIOCGIFMTU                        = 0xc020697e\n\tSIOCGIFNETMASK                    = 0xc0206925\n\tSIOCGIFPAIR                       = 0xc02069b1\n\tSIOCGIFPARENT                     = 0xc02069b3\n\tSIOCGIFPRIORITY                   = 0xc020699c\n\tSIOCGIFRDOMAIN                    = 0xc02069a0\n\tSIOCGIFRTLABEL                    = 0xc0206983\n\tSIOCGIFRXR                        = 0x802069aa\n\tSIOCGIFSFFPAGE                    = 0xc1126939\n\tSIOCGIFXFLAGS                     = 0xc020699e\n\tSIOCGLIFPHYADDR                   = 0xc218694b\n\tSIOCGLIFPHYDF                     = 0xc02069c2\n\tSIOCGLIFPHYECN                    = 0xc02069c8\n\tSIOCGLIFPHYRTABLE                 = 0xc02069a2\n\tSIOCGLIFPHYTTL                    = 0xc02069a9\n\tSIOCGPGRP                         = 0x40047309\n\tSIOCGPWE3                         = 0xc0206998\n\tSIOCGPWE3CTRLWORD                 = 0xc02069dc\n\tSIOCGPWE3FAT                      = 0xc02069dd\n\tSIOCGPWE3NEIGHBOR                 = 0xc21869de\n\tSIOCGRXHPRIO                      = 0xc02069db\n\tSIOCGSPPPPARAMS                   = 0xc0206994\n\tSIOCGTXHPRIO                      = 0xc02069c6\n\tSIOCGUMBINFO                      = 0xc02069be\n\tSIOCGUMBPARAM                     = 0xc02069c0\n\tSIOCGVH                           = 0xc02069f6\n\tSIOCGVNETFLOWID                   = 0xc02069c4\n\tSIOCGVNETID                       = 0xc02069a7\n\tSIOCIFAFATTACH                    = 0x801169ab\n\tSIOCIFAFDETACH                    = 0x801169ac\n\tSIOCIFCREATE                      = 0x8020697a\n\tSIOCIFDESTROY                     = 0x80206979\n\tSIOCIFGCLONERS                    = 0xc0106978\n\tSIOCSETKALIVE                     = 0x801869a3\n\tSIOCSETLABEL                      = 0x80206999\n\tSIOCSETMPWCFG                     = 0x802069ad\n\tSIOCSETPFLOW                      = 0x802069fd\n\tSIOCSETPFSYNC                     = 0x802069f7\n\tSIOCSETVLAN                       = 0x8020698f\n\tSIOCSIFADDR                       = 0x8020690c\n\tSIOCSIFBRDADDR                    = 0x80206913\n\tSIOCSIFDESCR                      = 0x80206980\n\tSIOCSIFDSTADDR                    = 0x8020690e\n\tSIOCSIFFLAGS                      = 0x80206910\n\tSIOCSIFGATTR                      = 0x8028698c\n\tSIOCSIFGENERIC                    = 0x80206939\n\tSIOCSIFLLADDR                     = 0x8020691f\n\tSIOCSIFLLPRIO                     = 0x802069b5\n\tSIOCSIFMEDIA                      = 0xc0206937\n\tSIOCSIFMETRIC                     = 0x80206918\n\tSIOCSIFMTU                        = 0x8020697f\n\tSIOCSIFNETMASK                    = 0x80206916\n\tSIOCSIFPAIR                       = 0x802069b0\n\tSIOCSIFPARENT                     = 0x802069b2\n\tSIOCSIFPRIORITY                   = 0x8020699b\n\tSIOCSIFRDOMAIN                    = 0x8020699f\n\tSIOCSIFRTLABEL                    = 0x80206982\n\tSIOCSIFXFLAGS                     = 0x8020699d\n\tSIOCSLIFPHYADDR                   = 0x8218694a\n\tSIOCSLIFPHYDF                     = 0x802069c1\n\tSIOCSLIFPHYECN                    = 0x802069c7\n\tSIOCSLIFPHYRTABLE                 = 0x802069a1\n\tSIOCSLIFPHYTTL                    = 0x802069a8\n\tSIOCSPGRP                         = 0x80047308\n\tSIOCSPWE3CTRLWORD                 = 0x802069dc\n\tSIOCSPWE3FAT                      = 0x802069dd\n\tSIOCSPWE3NEIGHBOR                 = 0x821869de\n\tSIOCSRXHPRIO                      = 0x802069db\n\tSIOCSSPPPPARAMS                   = 0x80206993\n\tSIOCSTXHPRIO                      = 0x802069c5\n\tSIOCSUMBPARAM                     = 0x802069bf\n\tSIOCSVH                           = 0xc02069f5\n\tSIOCSVNETFLOWID                   = 0x802069c3\n\tSIOCSVNETID                       = 0x802069a6\n\tSOCK_CLOEXEC                      = 0x8000\n\tSOCK_DGRAM                        = 0x2\n\tSOCK_DNS                          = 0x1000\n\tSOCK_NONBLOCK                     = 0x4000\n\tSOCK_RAW                          = 0x3\n\tSOCK_RDM                          = 0x4\n\tSOCK_SEQPACKET                    = 0x5\n\tSOCK_STREAM                       = 0x1\n\tSOL_SOCKET                        = 0xffff\n\tSOMAXCONN                         = 0x80\n\tSO_ACCEPTCONN                     = 0x2\n\tSO_BINDANY                        = 0x1000\n\tSO_BROADCAST                      = 0x20\n\tSO_DEBUG                          = 0x1\n\tSO_DOMAIN                         = 0x1024\n\tSO_DONTROUTE                      = 0x10\n\tSO_ERROR                          = 0x1007\n\tSO_KEEPALIVE                      = 0x8\n\tSO_LINGER                         = 0x80\n\tSO_NETPROC                        = 0x1020\n\tSO_OOBINLINE                      = 0x100\n\tSO_PEERCRED                       = 0x1022\n\tSO_PROTOCOL                       = 0x1025\n\tSO_RCVBUF                         = 0x1002\n\tSO_RCVLOWAT                       = 0x1004\n\tSO_RCVTIMEO                       = 0x1006\n\tSO_REUSEADDR                      = 0x4\n\tSO_REUSEPORT                      = 0x200\n\tSO_RTABLE                         = 0x1021\n\tSO_SNDBUF                         = 0x1001\n\tSO_SNDLOWAT                       = 0x1003\n\tSO_SNDTIMEO                       = 0x1005\n\tSO_SPLICE                         = 0x1023\n\tSO_TIMESTAMP                      = 0x800\n\tSO_TYPE                           = 0x1008\n\tSO_USELOOPBACK                    = 0x40\n\tSO_ZEROIZE                        = 0x2000\n\tS_BLKSIZE                         = 0x200\n\tS_IEXEC                           = 0x40\n\tS_IFBLK                           = 0x6000\n\tS_IFCHR                           = 0x2000\n\tS_IFDIR                           = 0x4000\n\tS_IFIFO                           = 0x1000\n\tS_IFLNK                           = 0xa000\n\tS_IFMT                            = 0xf000\n\tS_IFREG                           = 0x8000\n\tS_IFSOCK                          = 0xc000\n\tS_IREAD                           = 0x100\n\tS_IRGRP                           = 0x20\n\tS_IROTH                           = 0x4\n\tS_IRUSR                           = 0x100\n\tS_IRWXG                           = 0x38\n\tS_IRWXO                           = 0x7\n\tS_IRWXU                           = 0x1c0\n\tS_ISGID                           = 0x400\n\tS_ISTXT                           = 0x200\n\tS_ISUID                           = 0x800\n\tS_ISVTX                           = 0x200\n\tS_IWGRP                           = 0x10\n\tS_IWOTH                           = 0x2\n\tS_IWRITE                          = 0x80\n\tS_IWUSR                           = 0x80\n\tS_IXGRP                           = 0x8\n\tS_IXOTH                           = 0x1\n\tS_IXUSR                           = 0x40\n\tTCIFLUSH                          = 0x1\n\tTCIOFF                            = 0x3\n\tTCIOFLUSH                         = 0x3\n\tTCION                             = 0x4\n\tTCOFLUSH                          = 0x2\n\tTCOOFF                            = 0x1\n\tTCOON                             = 0x2\n\tTCPOPT_EOL                        = 0x0\n\tTCPOPT_MAXSEG                     = 0x2\n\tTCPOPT_NOP                        = 0x1\n\tTCPOPT_SACK                       = 0x5\n\tTCPOPT_SACK_HDR                   = 0x1010500\n\tTCPOPT_SACK_PERMITTED             = 0x4\n\tTCPOPT_SACK_PERMIT_HDR            = 0x1010402\n\tTCPOPT_SIGNATURE                  = 0x13\n\tTCPOPT_TIMESTAMP                  = 0x8\n\tTCPOPT_TSTAMP_HDR                 = 0x101080a\n\tTCPOPT_WINDOW                     = 0x3\n\tTCP_INFO                          = 0x9\n\tTCP_MAXSEG                        = 0x2\n\tTCP_MAXWIN                        = 0xffff\n\tTCP_MAX_SACK                      = 0x3\n\tTCP_MAX_WINSHIFT                  = 0xe\n\tTCP_MD5SIG                        = 0x4\n\tTCP_MSS                           = 0x200\n\tTCP_NODELAY                       = 0x1\n\tTCP_NOPUSH                        = 0x10\n\tTCP_SACKHOLE_LIMIT                = 0x80\n\tTCP_SACK_ENABLE                   = 0x8\n\tTCSAFLUSH                         = 0x2\n\tTIMER_ABSTIME                     = 0x1\n\tTIMER_RELTIME                     = 0x0\n\tTIOCCBRK                          = 0x2000747a\n\tTIOCCDTR                          = 0x20007478\n\tTIOCCHKVERAUTH                    = 0x2000741e\n\tTIOCCLRVERAUTH                    = 0x2000741d\n\tTIOCCONS                          = 0x80047462\n\tTIOCDRAIN                         = 0x2000745e\n\tTIOCEXCL                          = 0x2000740d\n\tTIOCEXT                           = 0x80047460\n\tTIOCFLAG_CLOCAL                   = 0x2\n\tTIOCFLAG_CRTSCTS                  = 0x4\n\tTIOCFLAG_MDMBUF                   = 0x8\n\tTIOCFLAG_PPS                      = 0x10\n\tTIOCFLAG_SOFTCAR                  = 0x1\n\tTIOCFLUSH                         = 0x80047410\n\tTIOCGETA                          = 0x402c7413\n\tTIOCGETD                          = 0x4004741a\n\tTIOCGFLAGS                        = 0x4004745d\n\tTIOCGPGRP                         = 0x40047477\n\tTIOCGSID                          = 0x40047463\n\tTIOCGTSTAMP                       = 0x4010745b\n\tTIOCGWINSZ                        = 0x40087468\n\tTIOCMBIC                          = 0x8004746b\n\tTIOCMBIS                          = 0x8004746c\n\tTIOCMGET                          = 0x4004746a\n\tTIOCMODG                          = 0x4004746a\n\tTIOCMODS                          = 0x8004746d\n\tTIOCMSET                          = 0x8004746d\n\tTIOCM_CAR                         = 0x40\n\tTIOCM_CD                          = 0x40\n\tTIOCM_CTS                         = 0x20\n\tTIOCM_DSR                         = 0x100\n\tTIOCM_DTR                         = 0x2\n\tTIOCM_LE                          = 0x1\n\tTIOCM_RI                          = 0x80\n\tTIOCM_RNG                         = 0x80\n\tTIOCM_RTS                         = 0x4\n\tTIOCM_SR                          = 0x10\n\tTIOCM_ST                          = 0x8\n\tTIOCNOTTY                         = 0x20007471\n\tTIOCNXCL                          = 0x2000740e\n\tTIOCOUTQ                          = 0x40047473\n\tTIOCPKT                           = 0x80047470\n\tTIOCPKT_DATA                      = 0x0\n\tTIOCPKT_DOSTOP                    = 0x20\n\tTIOCPKT_FLUSHREAD                 = 0x1\n\tTIOCPKT_FLUSHWRITE                = 0x2\n\tTIOCPKT_IOCTL                     = 0x40\n\tTIOCPKT_NOSTOP                    = 0x10\n\tTIOCPKT_START                     = 0x8\n\tTIOCPKT_STOP                      = 0x4\n\tTIOCREMOTE                        = 0x80047469\n\tTIOCSBRK                          = 0x2000747b\n\tTIOCSCTTY                         = 0x20007461\n\tTIOCSDTR                          = 0x20007479\n\tTIOCSETA                          = 0x802c7414\n\tTIOCSETAF                         = 0x802c7416\n\tTIOCSETAW                         = 0x802c7415\n\tTIOCSETD                          = 0x8004741b\n\tTIOCSETVERAUTH                    = 0x8004741c\n\tTIOCSFLAGS                        = 0x8004745c\n\tTIOCSIG                           = 0x8004745f\n\tTIOCSPGRP                         = 0x80047476\n\tTIOCSTART                         = 0x2000746e\n\tTIOCSTAT                          = 0x20007465\n\tTIOCSTOP                          = 0x2000746f\n\tTIOCSTSTAMP                       = 0x8008745a\n\tTIOCSWINSZ                        = 0x80087467\n\tTIOCUCNTL                         = 0x80047466\n\tTIOCUCNTL_CBRK                    = 0x7a\n\tTIOCUCNTL_SBRK                    = 0x7b\n\tTOSTOP                            = 0x400000\n\tUTIME_NOW                         = -0x2\n\tUTIME_OMIT                        = -0x1\n\tVDISCARD                          = 0xf\n\tVDSUSP                            = 0xb\n\tVEOF                              = 0x0\n\tVEOL                              = 0x1\n\tVEOL2                             = 0x2\n\tVERASE                            = 0x3\n\tVINTR                             = 0x8\n\tVKILL                             = 0x5\n\tVLNEXT                            = 0xe\n\tVMIN                              = 0x10\n\tVM_ANONMIN                        = 0x7\n\tVM_LOADAVG                        = 0x2\n\tVM_MALLOC_CONF                    = 0xc\n\tVM_MAXID                          = 0xd\n\tVM_MAXSLP                         = 0xa\n\tVM_METER                          = 0x1\n\tVM_NKMEMPAGES                     = 0x6\n\tVM_PSSTRINGS                      = 0x3\n\tVM_SWAPENCRYPT                    = 0x5\n\tVM_USPACE                         = 0xb\n\tVM_UVMEXP                         = 0x4\n\tVM_VNODEMIN                       = 0x9\n\tVM_VTEXTMIN                       = 0x8\n\tVQUIT                             = 0x9\n\tVREPRINT                          = 0x6\n\tVSTART                            = 0xc\n\tVSTATUS                           = 0x12\n\tVSTOP                             = 0xd\n\tVSUSP                             = 0xa\n\tVTIME                             = 0x11\n\tVWERASE                           = 0x4\n\tWALTSIG                           = 0x4\n\tWCONTINUED                        = 0x8\n\tWCOREFLAG                         = 0x80\n\tWNOHANG                           = 0x1\n\tWUNTRACED                         = 0x2\n\tXCASE                             = 0x1000000\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x30)\n\tEADDRNOTAVAIL   = syscall.Errno(0x31)\n\tEAFNOSUPPORT    = syscall.Errno(0x2f)\n\tEAGAIN          = syscall.Errno(0x23)\n\tEALREADY        = syscall.Errno(0x25)\n\tEAUTH           = syscall.Errno(0x50)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADMSG         = syscall.Errno(0x5c)\n\tEBADRPC         = syscall.Errno(0x48)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x58)\n\tECHILD          = syscall.Errno(0xa)\n\tECONNABORTED    = syscall.Errno(0x35)\n\tECONNREFUSED    = syscall.Errno(0x3d)\n\tECONNRESET      = syscall.Errno(0x36)\n\tEDEADLK         = syscall.Errno(0xb)\n\tEDESTADDRREQ    = syscall.Errno(0x27)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x45)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEFTYPE          = syscall.Errno(0x4f)\n\tEHOSTDOWN       = syscall.Errno(0x40)\n\tEHOSTUNREACH    = syscall.Errno(0x41)\n\tEIDRM           = syscall.Errno(0x59)\n\tEILSEQ          = syscall.Errno(0x54)\n\tEINPROGRESS     = syscall.Errno(0x24)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEIPSEC          = syscall.Errno(0x52)\n\tEISCONN         = syscall.Errno(0x38)\n\tEISDIR          = syscall.Errno(0x15)\n\tELAST           = syscall.Errno(0x5f)\n\tELOOP           = syscall.Errno(0x3e)\n\tEMEDIUMTYPE     = syscall.Errno(0x56)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x28)\n\tENAMETOOLONG    = syscall.Errno(0x3f)\n\tENEEDAUTH       = syscall.Errno(0x51)\n\tENETDOWN        = syscall.Errno(0x32)\n\tENETRESET       = syscall.Errno(0x34)\n\tENETUNREACH     = syscall.Errno(0x33)\n\tENFILE          = syscall.Errno(0x17)\n\tENOATTR         = syscall.Errno(0x53)\n\tENOBUFS         = syscall.Errno(0x37)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x4d)\n\tENOMEDIUM       = syscall.Errno(0x55)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x5a)\n\tENOPROTOOPT     = syscall.Errno(0x2a)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSYS          = syscall.Errno(0x4e)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x39)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x42)\n\tENOTRECOVERABLE = syscall.Errno(0x5d)\n\tENOTSOCK        = syscall.Errno(0x26)\n\tENOTSUP         = syscall.Errno(0x5b)\n\tENOTTY          = syscall.Errno(0x19)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x2d)\n\tEOVERFLOW       = syscall.Errno(0x57)\n\tEOWNERDEAD      = syscall.Errno(0x5e)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x2e)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROCLIM        = syscall.Errno(0x43)\n\tEPROCUNAVAIL    = syscall.Errno(0x4c)\n\tEPROGMISMATCH   = syscall.Errno(0x4b)\n\tEPROGUNAVAIL    = syscall.Errno(0x4a)\n\tEPROTO          = syscall.Errno(0x5f)\n\tEPROTONOSUPPORT = syscall.Errno(0x2b)\n\tEPROTOTYPE      = syscall.Errno(0x29)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMOTE         = syscall.Errno(0x47)\n\tEROFS           = syscall.Errno(0x1e)\n\tERPCMISMATCH    = syscall.Errno(0x49)\n\tESHUTDOWN       = syscall.Errno(0x3a)\n\tESOCKTNOSUPPORT = syscall.Errno(0x2c)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESTALE          = syscall.Errno(0x46)\n\tETIMEDOUT       = syscall.Errno(0x3c)\n\tETOOMANYREFS    = syscall.Errno(0x3b)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUSERS          = syscall.Errno(0x44)\n\tEWOULDBLOCK     = syscall.Errno(0x23)\n\tEXDEV           = syscall.Errno(0x12)\n)\n\n// Signals\nconst (\n\tSIGABRT   = syscall.Signal(0x6)\n\tSIGALRM   = syscall.Signal(0xe)\n\tSIGBUS    = syscall.Signal(0xa)\n\tSIGCHLD   = syscall.Signal(0x14)\n\tSIGCONT   = syscall.Signal(0x13)\n\tSIGEMT    = syscall.Signal(0x7)\n\tSIGFPE    = syscall.Signal(0x8)\n\tSIGHUP    = syscall.Signal(0x1)\n\tSIGILL    = syscall.Signal(0x4)\n\tSIGINFO   = syscall.Signal(0x1d)\n\tSIGINT    = syscall.Signal(0x2)\n\tSIGIO     = syscall.Signal(0x17)\n\tSIGIOT    = syscall.Signal(0x6)\n\tSIGKILL   = syscall.Signal(0x9)\n\tSIGPIPE   = syscall.Signal(0xd)\n\tSIGPROF   = syscall.Signal(0x1b)\n\tSIGQUIT   = syscall.Signal(0x3)\n\tSIGSEGV   = syscall.Signal(0xb)\n\tSIGSTOP   = syscall.Signal(0x11)\n\tSIGSYS    = syscall.Signal(0xc)\n\tSIGTERM   = syscall.Signal(0xf)\n\tSIGTHR    = syscall.Signal(0x20)\n\tSIGTRAP   = syscall.Signal(0x5)\n\tSIGTSTP   = syscall.Signal(0x12)\n\tSIGTTIN   = syscall.Signal(0x15)\n\tSIGTTOU   = syscall.Signal(0x16)\n\tSIGURG    = syscall.Signal(0x10)\n\tSIGUSR1   = syscall.Signal(0x1e)\n\tSIGUSR2   = syscall.Signal(0x1f)\n\tSIGVTALRM = syscall.Signal(0x1a)\n\tSIGWINCH  = syscall.Signal(0x1c)\n\tSIGXCPU   = syscall.Signal(0x18)\n\tSIGXFSZ   = syscall.Signal(0x19)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"operation not permitted\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"input/output error\"},\n\t{6, \"ENXIO\", \"device not configured\"},\n\t{7, \"E2BIG\", \"argument list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file descriptor\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EDEADLK\", \"resource deadlock avoided\"},\n\t{12, \"ENOMEM\", \"cannot allocate memory\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"operation not supported by device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"too many open files in system\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"numerical argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{36, \"EINPROGRESS\", \"operation now in progress\"},\n\t{37, \"EALREADY\", \"operation already in progress\"},\n\t{38, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{39, \"EDESTADDRREQ\", \"destination address required\"},\n\t{40, \"EMSGSIZE\", \"message too long\"},\n\t{41, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{42, \"ENOPROTOOPT\", \"protocol not available\"},\n\t{43, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{44, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{45, \"EOPNOTSUPP\", \"operation not supported\"},\n\t{46, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{47, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{48, \"EADDRINUSE\", \"address already in use\"},\n\t{49, \"EADDRNOTAVAIL\", \"can't assign requested address\"},\n\t{50, \"ENETDOWN\", \"network is down\"},\n\t{51, \"ENETUNREACH\", \"network is unreachable\"},\n\t{52, \"ENETRESET\", \"network dropped connection on reset\"},\n\t{53, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{54, \"ECONNRESET\", \"connection reset by peer\"},\n\t{55, \"ENOBUFS\", \"no buffer space available\"},\n\t{56, \"EISCONN\", \"socket is already connected\"},\n\t{57, \"ENOTCONN\", \"socket is not connected\"},\n\t{58, \"ESHUTDOWN\", \"can't send after socket shutdown\"},\n\t{59, \"ETOOMANYREFS\", \"too many references: can't splice\"},\n\t{60, \"ETIMEDOUT\", \"operation timed out\"},\n\t{61, \"ECONNREFUSED\", \"connection refused\"},\n\t{62, \"ELOOP\", \"too many levels of symbolic links\"},\n\t{63, \"ENAMETOOLONG\", \"file name too long\"},\n\t{64, \"EHOSTDOWN\", \"host is down\"},\n\t{65, \"EHOSTUNREACH\", \"no route to host\"},\n\t{66, \"ENOTEMPTY\", \"directory not empty\"},\n\t{67, \"EPROCLIM\", \"too many processes\"},\n\t{68, \"EUSERS\", \"too many users\"},\n\t{69, \"EDQUOT\", \"disk quota exceeded\"},\n\t{70, \"ESTALE\", \"stale NFS file handle\"},\n\t{71, \"EREMOTE\", \"too many levels of remote in path\"},\n\t{72, \"EBADRPC\", \"RPC struct is bad\"},\n\t{73, \"ERPCMISMATCH\", \"RPC version wrong\"},\n\t{74, \"EPROGUNAVAIL\", \"RPC program not available\"},\n\t{75, \"EPROGMISMATCH\", \"program version wrong\"},\n\t{76, \"EPROCUNAVAIL\", \"bad procedure for program\"},\n\t{77, \"ENOLCK\", \"no locks available\"},\n\t{78, \"ENOSYS\", \"function not implemented\"},\n\t{79, \"EFTYPE\", \"inappropriate file type or format\"},\n\t{80, \"EAUTH\", \"authentication error\"},\n\t{81, \"ENEEDAUTH\", \"need authenticator\"},\n\t{82, \"EIPSEC\", \"IPsec processing failure\"},\n\t{83, \"ENOATTR\", \"attribute not found\"},\n\t{84, \"EILSEQ\", \"illegal byte sequence\"},\n\t{85, \"ENOMEDIUM\", \"no medium found\"},\n\t{86, \"EMEDIUMTYPE\", \"wrong medium type\"},\n\t{87, \"EOVERFLOW\", \"value too large to be stored in data type\"},\n\t{88, \"ECANCELED\", \"operation canceled\"},\n\t{89, \"EIDRM\", \"identifier removed\"},\n\t{90, \"ENOMSG\", \"no message of desired type\"},\n\t{91, \"ENOTSUP\", \"not supported\"},\n\t{92, \"EBADMSG\", \"bad message\"},\n\t{93, \"ENOTRECOVERABLE\", \"state not recoverable\"},\n\t{94, \"EOWNERDEAD\", \"previous owner died\"},\n\t{95, \"ELAST\", \"protocol error\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGTRAP\", \"trace/BPT trap\"},\n\t{6, \"SIGABRT\", \"abort trap\"},\n\t{7, \"SIGEMT\", \"EMT trap\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad system call\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGURG\", \"urgent I/O condition\"},\n\t{17, \"SIGSTOP\", \"suspended (signal)\"},\n\t{18, \"SIGTSTP\", \"suspended\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGXCPU\", \"cputime limit exceeded\"},\n\t{25, \"SIGXFSZ\", \"filesize limit exceeded\"},\n\t{26, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{27, \"SIGPROF\", \"profiling timer expired\"},\n\t{28, \"SIGWINCH\", \"window size changes\"},\n\t{29, \"SIGINFO\", \"information request\"},\n\t{30, \"SIGUSR1\", \"user defined signal 1\"},\n\t{31, \"SIGUSR2\", \"user defined signal 2\"},\n\t{32, \"SIGTHR\", \"thread AST\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go",
    "content": "// mkerrors.sh -m64\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && solaris\n\n// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n// cgo -godefs -- -m64 _const.go\n\npackage unix\n\nimport \"syscall\"\n\nconst (\n\tAF_802                        = 0x12\n\tAF_APPLETALK                  = 0x10\n\tAF_CCITT                      = 0xa\n\tAF_CHAOS                      = 0x5\n\tAF_DATAKIT                    = 0x9\n\tAF_DECnet                     = 0xc\n\tAF_DLI                        = 0xd\n\tAF_ECMA                       = 0x8\n\tAF_FILE                       = 0x1\n\tAF_GOSIP                      = 0x16\n\tAF_HYLINK                     = 0xf\n\tAF_IMPLINK                    = 0x3\n\tAF_INET                       = 0x2\n\tAF_INET6                      = 0x1a\n\tAF_INET_OFFLOAD               = 0x1e\n\tAF_IPX                        = 0x17\n\tAF_KEY                        = 0x1b\n\tAF_LAT                        = 0xe\n\tAF_LINK                       = 0x19\n\tAF_LOCAL                      = 0x1\n\tAF_MAX                        = 0x20\n\tAF_NBS                        = 0x7\n\tAF_NCA                        = 0x1c\n\tAF_NIT                        = 0x11\n\tAF_NS                         = 0x6\n\tAF_OSI                        = 0x13\n\tAF_OSINET                     = 0x15\n\tAF_PACKET                     = 0x20\n\tAF_POLICY                     = 0x1d\n\tAF_PUP                        = 0x4\n\tAF_ROUTE                      = 0x18\n\tAF_SNA                        = 0xb\n\tAF_TRILL                      = 0x1f\n\tAF_UNIX                       = 0x1\n\tAF_UNSPEC                     = 0x0\n\tAF_X25                        = 0x14\n\tARPHRD_ARCNET                 = 0x7\n\tARPHRD_ATM                    = 0x10\n\tARPHRD_AX25                   = 0x3\n\tARPHRD_CHAOS                  = 0x5\n\tARPHRD_EETHER                 = 0x2\n\tARPHRD_ETHER                  = 0x1\n\tARPHRD_FC                     = 0x12\n\tARPHRD_FRAME                  = 0xf\n\tARPHRD_HDLC                   = 0x11\n\tARPHRD_IB                     = 0x20\n\tARPHRD_IEEE802                = 0x6\n\tARPHRD_IPATM                  = 0x13\n\tARPHRD_METRICOM               = 0x17\n\tARPHRD_TUNNEL                 = 0x1f\n\tB0                            = 0x0\n\tB110                          = 0x3\n\tB115200                       = 0x12\n\tB1200                         = 0x9\n\tB134                          = 0x4\n\tB150                          = 0x5\n\tB153600                       = 0x13\n\tB1800                         = 0xa\n\tB19200                        = 0xe\n\tB200                          = 0x6\n\tB230400                       = 0x14\n\tB2400                         = 0xb\n\tB300                          = 0x7\n\tB307200                       = 0x15\n\tB38400                        = 0xf\n\tB460800                       = 0x16\n\tB4800                         = 0xc\n\tB50                           = 0x1\n\tB57600                        = 0x10\n\tB600                          = 0x8\n\tB75                           = 0x2\n\tB76800                        = 0x11\n\tB921600                       = 0x17\n\tB9600                         = 0xd\n\tBIOCFLUSH                     = 0x20004268\n\tBIOCGBLEN                     = 0x40044266\n\tBIOCGDLT                      = 0x4004426a\n\tBIOCGDLTLIST                  = -0x3fefbd89\n\tBIOCGDLTLIST32                = -0x3ff7bd89\n\tBIOCGETIF                     = 0x4020426b\n\tBIOCGETLIF                    = 0x4078426b\n\tBIOCGHDRCMPLT                 = 0x40044274\n\tBIOCGRTIMEOUT                 = 0x4010427b\n\tBIOCGRTIMEOUT32               = 0x4008427b\n\tBIOCGSEESENT                  = 0x40044278\n\tBIOCGSTATS                    = 0x4080426f\n\tBIOCGSTATSOLD                 = 0x4008426f\n\tBIOCIMMEDIATE                 = -0x7ffbbd90\n\tBIOCPROMISC                   = 0x20004269\n\tBIOCSBLEN                     = -0x3ffbbd9a\n\tBIOCSDLT                      = -0x7ffbbd8a\n\tBIOCSETF                      = -0x7fefbd99\n\tBIOCSETF32                    = -0x7ff7bd99\n\tBIOCSETIF                     = -0x7fdfbd94\n\tBIOCSETLIF                    = -0x7f87bd94\n\tBIOCSHDRCMPLT                 = -0x7ffbbd8b\n\tBIOCSRTIMEOUT                 = -0x7fefbd86\n\tBIOCSRTIMEOUT32               = -0x7ff7bd86\n\tBIOCSSEESENT                  = -0x7ffbbd87\n\tBIOCSTCPF                     = -0x7fefbd8e\n\tBIOCSUDPF                     = -0x7fefbd8d\n\tBIOCVERSION                   = 0x40044271\n\tBPF_A                         = 0x10\n\tBPF_ABS                       = 0x20\n\tBPF_ADD                       = 0x0\n\tBPF_ALIGNMENT                 = 0x4\n\tBPF_ALU                       = 0x4\n\tBPF_AND                       = 0x50\n\tBPF_B                         = 0x10\n\tBPF_DFLTBUFSIZE               = 0x100000\n\tBPF_DIV                       = 0x30\n\tBPF_H                         = 0x8\n\tBPF_IMM                       = 0x0\n\tBPF_IND                       = 0x40\n\tBPF_JA                        = 0x0\n\tBPF_JEQ                       = 0x10\n\tBPF_JGE                       = 0x30\n\tBPF_JGT                       = 0x20\n\tBPF_JMP                       = 0x5\n\tBPF_JSET                      = 0x40\n\tBPF_K                         = 0x0\n\tBPF_LD                        = 0x0\n\tBPF_LDX                       = 0x1\n\tBPF_LEN                       = 0x80\n\tBPF_LSH                       = 0x60\n\tBPF_MAJOR_VERSION             = 0x1\n\tBPF_MAXBUFSIZE                = 0x1000000\n\tBPF_MAXINSNS                  = 0x200\n\tBPF_MEM                       = 0x60\n\tBPF_MEMWORDS                  = 0x10\n\tBPF_MINBUFSIZE                = 0x20\n\tBPF_MINOR_VERSION             = 0x1\n\tBPF_MISC                      = 0x7\n\tBPF_MSH                       = 0xa0\n\tBPF_MUL                       = 0x20\n\tBPF_NEG                       = 0x80\n\tBPF_OR                        = 0x40\n\tBPF_RELEASE                   = 0x30bb6\n\tBPF_RET                       = 0x6\n\tBPF_RSH                       = 0x70\n\tBPF_ST                        = 0x2\n\tBPF_STX                       = 0x3\n\tBPF_SUB                       = 0x10\n\tBPF_TAX                       = 0x0\n\tBPF_TXA                       = 0x80\n\tBPF_W                         = 0x0\n\tBPF_X                         = 0x8\n\tBRKINT                        = 0x2\n\tBS0                           = 0x0\n\tBS1                           = 0x2000\n\tBSDLY                         = 0x2000\n\tCBAUD                         = 0xf\n\tCFLUSH                        = 0xf\n\tCIBAUD                        = 0xf0000\n\tCLOCAL                        = 0x800\n\tCLOCK_HIGHRES                 = 0x4\n\tCLOCK_LEVEL                   = 0xa\n\tCLOCK_MONOTONIC               = 0x4\n\tCLOCK_PROCESS_CPUTIME_ID      = 0x5\n\tCLOCK_PROF                    = 0x2\n\tCLOCK_REALTIME                = 0x3\n\tCLOCK_THREAD_CPUTIME_ID       = 0x2\n\tCLOCK_VIRTUAL                 = 0x1\n\tCR0                           = 0x0\n\tCR1                           = 0x200\n\tCR2                           = 0x400\n\tCR3                           = 0x600\n\tCRDLY                         = 0x600\n\tCREAD                         = 0x80\n\tCRTSCTS                       = 0x80000000\n\tCS5                           = 0x0\n\tCS6                           = 0x10\n\tCS7                           = 0x20\n\tCS8                           = 0x30\n\tCSIZE                         = 0x30\n\tCSTART                        = 0x11\n\tCSTATUS                       = 0x14\n\tCSTOP                         = 0x13\n\tCSTOPB                        = 0x40\n\tCSUSP                         = 0x1a\n\tCSWTCH                        = 0x1a\n\tDIOC                          = 0x6400\n\tDIOCGETB                      = 0x6402\n\tDIOCGETC                      = 0x6401\n\tDIOCGETP                      = 0x6408\n\tDIOCSETE                      = 0x6403\n\tDIOCSETP                      = 0x6409\n\tDLT_AIRONET_HEADER            = 0x78\n\tDLT_APPLE_IP_OVER_IEEE1394    = 0x8a\n\tDLT_ARCNET                    = 0x7\n\tDLT_ARCNET_LINUX              = 0x81\n\tDLT_ATM_CLIP                  = 0x13\n\tDLT_ATM_RFC1483               = 0xb\n\tDLT_AURORA                    = 0x7e\n\tDLT_AX25                      = 0x3\n\tDLT_BACNET_MS_TP              = 0xa5\n\tDLT_CHAOS                     = 0x5\n\tDLT_CISCO_IOS                 = 0x76\n\tDLT_C_HDLC                    = 0x68\n\tDLT_DOCSIS                    = 0x8f\n\tDLT_ECONET                    = 0x73\n\tDLT_EN10MB                    = 0x1\n\tDLT_EN3MB                     = 0x2\n\tDLT_ENC                       = 0x6d\n\tDLT_ERF_ETH                   = 0xaf\n\tDLT_ERF_POS                   = 0xb0\n\tDLT_FDDI                      = 0xa\n\tDLT_FRELAY                    = 0x6b\n\tDLT_GCOM_SERIAL               = 0xad\n\tDLT_GCOM_T1E1                 = 0xac\n\tDLT_GPF_F                     = 0xab\n\tDLT_GPF_T                     = 0xaa\n\tDLT_GPRS_LLC                  = 0xa9\n\tDLT_HDLC                      = 0x10\n\tDLT_HHDLC                     = 0x79\n\tDLT_HIPPI                     = 0xf\n\tDLT_IBM_SN                    = 0x92\n\tDLT_IBM_SP                    = 0x91\n\tDLT_IEEE802                   = 0x6\n\tDLT_IEEE802_11                = 0x69\n\tDLT_IEEE802_11_RADIO          = 0x7f\n\tDLT_IEEE802_11_RADIO_AVS      = 0xa3\n\tDLT_IPNET                     = 0xe2\n\tDLT_IPOIB                     = 0xa2\n\tDLT_IP_OVER_FC                = 0x7a\n\tDLT_JUNIPER_ATM1              = 0x89\n\tDLT_JUNIPER_ATM2              = 0x87\n\tDLT_JUNIPER_CHDLC             = 0xb5\n\tDLT_JUNIPER_ES                = 0x84\n\tDLT_JUNIPER_ETHER             = 0xb2\n\tDLT_JUNIPER_FRELAY            = 0xb4\n\tDLT_JUNIPER_GGSN              = 0x85\n\tDLT_JUNIPER_MFR               = 0x86\n\tDLT_JUNIPER_MLFR              = 0x83\n\tDLT_JUNIPER_MLPPP             = 0x82\n\tDLT_JUNIPER_MONITOR           = 0xa4\n\tDLT_JUNIPER_PIC_PEER          = 0xae\n\tDLT_JUNIPER_PPP               = 0xb3\n\tDLT_JUNIPER_PPPOE             = 0xa7\n\tDLT_JUNIPER_PPPOE_ATM         = 0xa8\n\tDLT_JUNIPER_SERVICES          = 0x88\n\tDLT_LINUX_IRDA                = 0x90\n\tDLT_LINUX_LAPD                = 0xb1\n\tDLT_LINUX_SLL                 = 0x71\n\tDLT_LOOP                      = 0x6c\n\tDLT_LTALK                     = 0x72\n\tDLT_MTP2                      = 0x8c\n\tDLT_MTP2_WITH_PHDR            = 0x8b\n\tDLT_MTP3                      = 0x8d\n\tDLT_NULL                      = 0x0\n\tDLT_PCI_EXP                   = 0x7d\n\tDLT_PFLOG                     = 0x75\n\tDLT_PFSYNC                    = 0x12\n\tDLT_PPP                       = 0x9\n\tDLT_PPP_BSDOS                 = 0xe\n\tDLT_PPP_PPPD                  = 0xa6\n\tDLT_PRISM_HEADER              = 0x77\n\tDLT_PRONET                    = 0x4\n\tDLT_RAW                       = 0xc\n\tDLT_RAWAF_MASK                = 0x2240000\n\tDLT_RIO                       = 0x7c\n\tDLT_SCCP                      = 0x8e\n\tDLT_SLIP                      = 0x8\n\tDLT_SLIP_BSDOS                = 0xd\n\tDLT_SUNATM                    = 0x7b\n\tDLT_SYMANTEC_FIREWALL         = 0x63\n\tDLT_TZSP                      = 0x80\n\tECHO                          = 0x8\n\tECHOCTL                       = 0x200\n\tECHOE                         = 0x10\n\tECHOK                         = 0x20\n\tECHOKE                        = 0x800\n\tECHONL                        = 0x40\n\tECHOPRT                       = 0x400\n\tEMPTY_SET                     = 0x0\n\tEMT_CPCOVF                    = 0x1\n\tEQUALITY_CHECK                = 0x0\n\tEXTA                          = 0xe\n\tEXTB                          = 0xf\n\tFD_CLOEXEC                    = 0x1\n\tFD_NFDBITS                    = 0x40\n\tFD_SETSIZE                    = 0x10000\n\tFF0                           = 0x0\n\tFF1                           = 0x8000\n\tFFDLY                         = 0x8000\n\tFIORDCHK                      = 0x6603\n\tFLUSHALL                      = 0x1\n\tFLUSHDATA                     = 0x0\n\tFLUSHO                        = 0x2000\n\tF_ALLOCSP                     = 0xa\n\tF_ALLOCSP64                   = 0xa\n\tF_BADFD                       = 0x2e\n\tF_BLKSIZE                     = 0x13\n\tF_BLOCKS                      = 0x12\n\tF_CHKFL                       = 0x8\n\tF_COMPAT                      = 0x8\n\tF_DUP2FD                      = 0x9\n\tF_DUP2FD_CLOEXEC              = 0x24\n\tF_DUPFD                       = 0x0\n\tF_DUPFD_CLOEXEC               = 0x25\n\tF_FLOCK                       = 0x35\n\tF_FLOCK64                     = 0x35\n\tF_FLOCKW                      = 0x36\n\tF_FLOCKW64                    = 0x36\n\tF_FREESP                      = 0xb\n\tF_FREESP64                    = 0xb\n\tF_GETFD                       = 0x1\n\tF_GETFL                       = 0x3\n\tF_GETLK                       = 0xe\n\tF_GETLK64                     = 0xe\n\tF_GETOWN                      = 0x17\n\tF_GETXFL                      = 0x2d\n\tF_HASREMOTELOCKS              = 0x1a\n\tF_ISSTREAM                    = 0xd\n\tF_MANDDNY                     = 0x10\n\tF_MDACC                       = 0x20\n\tF_NODNY                       = 0x0\n\tF_NPRIV                       = 0x10\n\tF_OFD_GETLK                   = 0x2f\n\tF_OFD_GETLK64                 = 0x2f\n\tF_OFD_SETLK                   = 0x30\n\tF_OFD_SETLK64                 = 0x30\n\tF_OFD_SETLKW                  = 0x31\n\tF_OFD_SETLKW64                = 0x31\n\tF_PRIV                        = 0xf\n\tF_QUOTACTL                    = 0x11\n\tF_RDACC                       = 0x1\n\tF_RDDNY                       = 0x1\n\tF_RDLCK                       = 0x1\n\tF_REVOKE                      = 0x19\n\tF_RMACC                       = 0x4\n\tF_RMDNY                       = 0x4\n\tF_RWACC                       = 0x3\n\tF_RWDNY                       = 0x3\n\tF_SETFD                       = 0x2\n\tF_SETFL                       = 0x4\n\tF_SETLK                       = 0x6\n\tF_SETLK64                     = 0x6\n\tF_SETLK64_NBMAND              = 0x2a\n\tF_SETLKW                      = 0x7\n\tF_SETLKW64                    = 0x7\n\tF_SETLK_NBMAND                = 0x2a\n\tF_SETOWN                      = 0x18\n\tF_SHARE                       = 0x28\n\tF_SHARE_NBMAND                = 0x2b\n\tF_UNLCK                       = 0x3\n\tF_UNLKSYS                     = 0x4\n\tF_UNSHARE                     = 0x29\n\tF_WRACC                       = 0x2\n\tF_WRDNY                       = 0x2\n\tF_WRLCK                       = 0x2\n\tHUPCL                         = 0x400\n\tIBSHIFT                       = 0x10\n\tICANON                        = 0x2\n\tICMP6_FILTER                  = 0x1\n\tICRNL                         = 0x100\n\tIEXTEN                        = 0x8000\n\tIFF_ADDRCONF                  = 0x80000\n\tIFF_ALLMULTI                  = 0x200\n\tIFF_ANYCAST                   = 0x400000\n\tIFF_BROADCAST                 = 0x2\n\tIFF_CANTCHANGE                = 0x7f203003b5a\n\tIFF_COS_ENABLED               = 0x200000000\n\tIFF_DEBUG                     = 0x4\n\tIFF_DEPRECATED                = 0x40000\n\tIFF_DHCPRUNNING               = 0x4000\n\tIFF_DUPLICATE                 = 0x4000000000\n\tIFF_FAILED                    = 0x10000000\n\tIFF_FIXEDMTU                  = 0x1000000000\n\tIFF_INACTIVE                  = 0x40000000\n\tIFF_INTELLIGENT               = 0x400\n\tIFF_IPMP                      = 0x8000000000\n\tIFF_IPMP_CANTCHANGE           = 0x10000000\n\tIFF_IPMP_INVALID              = 0x1ec200080\n\tIFF_IPV4                      = 0x1000000\n\tIFF_IPV6                      = 0x2000000\n\tIFF_L3PROTECT                 = 0x40000000000\n\tIFF_LOOPBACK                  = 0x8\n\tIFF_MULTICAST                 = 0x800\n\tIFF_MULTI_BCAST               = 0x1000\n\tIFF_NOACCEPT                  = 0x4000000\n\tIFF_NOARP                     = 0x80\n\tIFF_NOFAILOVER                = 0x8000000\n\tIFF_NOLINKLOCAL               = 0x20000000000\n\tIFF_NOLOCAL                   = 0x20000\n\tIFF_NONUD                     = 0x200000\n\tIFF_NORTEXCH                  = 0x800000\n\tIFF_NOTRAILERS                = 0x20\n\tIFF_NOXMIT                    = 0x10000\n\tIFF_OFFLINE                   = 0x80000000\n\tIFF_POINTOPOINT               = 0x10\n\tIFF_PREFERRED                 = 0x400000000\n\tIFF_PRIVATE                   = 0x8000\n\tIFF_PROMISC                   = 0x100\n\tIFF_ROUTER                    = 0x100000\n\tIFF_RUNNING                   = 0x40\n\tIFF_STANDBY                   = 0x20000000\n\tIFF_TEMPORARY                 = 0x800000000\n\tIFF_UNNUMBERED                = 0x2000\n\tIFF_UP                        = 0x1\n\tIFF_VIRTUAL                   = 0x2000000000\n\tIFF_VRRP                      = 0x10000000000\n\tIFF_XRESOLV                   = 0x100000000\n\tIFNAMSIZ                      = 0x10\n\tIFT_1822                      = 0x2\n\tIFT_6TO4                      = 0xca\n\tIFT_AAL5                      = 0x31\n\tIFT_ARCNET                    = 0x23\n\tIFT_ARCNETPLUS                = 0x24\n\tIFT_ATM                       = 0x25\n\tIFT_CEPT                      = 0x13\n\tIFT_DS3                       = 0x1e\n\tIFT_EON                       = 0x19\n\tIFT_ETHER                     = 0x6\n\tIFT_FDDI                      = 0xf\n\tIFT_FRELAY                    = 0x20\n\tIFT_FRELAYDCE                 = 0x2c\n\tIFT_HDH1822                   = 0x3\n\tIFT_HIPPI                     = 0x2f\n\tIFT_HSSI                      = 0x2e\n\tIFT_HY                        = 0xe\n\tIFT_IB                        = 0xc7\n\tIFT_IPV4                      = 0xc8\n\tIFT_IPV6                      = 0xc9\n\tIFT_ISDNBASIC                 = 0x14\n\tIFT_ISDNPRIMARY               = 0x15\n\tIFT_ISO88022LLC               = 0x29\n\tIFT_ISO88023                  = 0x7\n\tIFT_ISO88024                  = 0x8\n\tIFT_ISO88025                  = 0x9\n\tIFT_ISO88026                  = 0xa\n\tIFT_LAPB                      = 0x10\n\tIFT_LOCALTALK                 = 0x2a\n\tIFT_LOOP                      = 0x18\n\tIFT_MIOX25                    = 0x26\n\tIFT_MODEM                     = 0x30\n\tIFT_NSIP                      = 0x1b\n\tIFT_OTHER                     = 0x1\n\tIFT_P10                       = 0xc\n\tIFT_P80                       = 0xd\n\tIFT_PARA                      = 0x22\n\tIFT_PPP                       = 0x17\n\tIFT_PROPMUX                   = 0x36\n\tIFT_PROPVIRTUAL               = 0x35\n\tIFT_PTPSERIAL                 = 0x16\n\tIFT_RS232                     = 0x21\n\tIFT_SDLC                      = 0x11\n\tIFT_SIP                       = 0x1f\n\tIFT_SLIP                      = 0x1c\n\tIFT_SMDSDXI                   = 0x2b\n\tIFT_SMDSICIP                  = 0x34\n\tIFT_SONET                     = 0x27\n\tIFT_SONETPATH                 = 0x32\n\tIFT_SONETVT                   = 0x33\n\tIFT_STARLAN                   = 0xb\n\tIFT_T1                        = 0x12\n\tIFT_ULTRA                     = 0x1d\n\tIFT_V35                       = 0x2d\n\tIFT_X25                       = 0x5\n\tIFT_X25DDN                    = 0x4\n\tIFT_X25PLE                    = 0x28\n\tIFT_XETHER                    = 0x1a\n\tIGNBRK                        = 0x1\n\tIGNCR                         = 0x80\n\tIGNPAR                        = 0x4\n\tIMAXBEL                       = 0x2000\n\tINLCR                         = 0x40\n\tINPCK                         = 0x10\n\tIN_AUTOCONF_MASK              = 0xffff0000\n\tIN_AUTOCONF_NET               = 0xa9fe0000\n\tIN_CLASSA_HOST                = 0xffffff\n\tIN_CLASSA_MAX                 = 0x80\n\tIN_CLASSA_NET                 = 0xff000000\n\tIN_CLASSA_NSHIFT              = 0x18\n\tIN_CLASSB_HOST                = 0xffff\n\tIN_CLASSB_MAX                 = 0x10000\n\tIN_CLASSB_NET                 = 0xffff0000\n\tIN_CLASSB_NSHIFT              = 0x10\n\tIN_CLASSC_HOST                = 0xff\n\tIN_CLASSC_NET                 = 0xffffff00\n\tIN_CLASSC_NSHIFT              = 0x8\n\tIN_CLASSD_HOST                = 0xfffffff\n\tIN_CLASSD_NET                 = 0xf0000000\n\tIN_CLASSD_NSHIFT              = 0x1c\n\tIN_CLASSE_NET                 = 0xffffffff\n\tIN_LOOPBACKNET                = 0x7f\n\tIN_PRIVATE12_MASK             = 0xfff00000\n\tIN_PRIVATE12_NET              = 0xac100000\n\tIN_PRIVATE16_MASK             = 0xffff0000\n\tIN_PRIVATE16_NET              = 0xc0a80000\n\tIN_PRIVATE8_MASK              = 0xff000000\n\tIN_PRIVATE8_NET               = 0xa000000\n\tIPPROTO_AH                    = 0x33\n\tIPPROTO_DSTOPTS               = 0x3c\n\tIPPROTO_EGP                   = 0x8\n\tIPPROTO_ENCAP                 = 0x4\n\tIPPROTO_EON                   = 0x50\n\tIPPROTO_ESP                   = 0x32\n\tIPPROTO_FRAGMENT              = 0x2c\n\tIPPROTO_GGP                   = 0x3\n\tIPPROTO_HELLO                 = 0x3f\n\tIPPROTO_HOPOPTS               = 0x0\n\tIPPROTO_ICMP                  = 0x1\n\tIPPROTO_ICMPV6                = 0x3a\n\tIPPROTO_IDP                   = 0x16\n\tIPPROTO_IGMP                  = 0x2\n\tIPPROTO_IP                    = 0x0\n\tIPPROTO_IPV6                  = 0x29\n\tIPPROTO_MAX                   = 0x100\n\tIPPROTO_ND                    = 0x4d\n\tIPPROTO_NONE                  = 0x3b\n\tIPPROTO_OSPF                  = 0x59\n\tIPPROTO_PIM                   = 0x67\n\tIPPROTO_PUP                   = 0xc\n\tIPPROTO_RAW                   = 0xff\n\tIPPROTO_ROUTING               = 0x2b\n\tIPPROTO_RSVP                  = 0x2e\n\tIPPROTO_SCTP                  = 0x84\n\tIPPROTO_TCP                   = 0x6\n\tIPPROTO_UDP                   = 0x11\n\tIPV6_ADD_MEMBERSHIP           = 0x9\n\tIPV6_BOUND_IF                 = 0x41\n\tIPV6_CHECKSUM                 = 0x18\n\tIPV6_DONTFRAG                 = 0x21\n\tIPV6_DROP_MEMBERSHIP          = 0xa\n\tIPV6_DSTOPTS                  = 0xf\n\tIPV6_FLOWINFO_FLOWLABEL       = 0xffff0f00\n\tIPV6_FLOWINFO_TCLASS          = 0xf00f\n\tIPV6_HOPLIMIT                 = 0xc\n\tIPV6_HOPOPTS                  = 0xe\n\tIPV6_JOIN_GROUP               = 0x9\n\tIPV6_LEAVE_GROUP              = 0xa\n\tIPV6_MULTICAST_HOPS           = 0x7\n\tIPV6_MULTICAST_IF             = 0x6\n\tIPV6_MULTICAST_LOOP           = 0x8\n\tIPV6_NEXTHOP                  = 0xd\n\tIPV6_PAD1_OPT                 = 0x0\n\tIPV6_PATHMTU                  = 0x25\n\tIPV6_PKTINFO                  = 0xb\n\tIPV6_PREFER_SRC_CGA           = 0x20\n\tIPV6_PREFER_SRC_CGADEFAULT    = 0x10\n\tIPV6_PREFER_SRC_CGAMASK       = 0x30\n\tIPV6_PREFER_SRC_COA           = 0x2\n\tIPV6_PREFER_SRC_DEFAULT       = 0x15\n\tIPV6_PREFER_SRC_HOME          = 0x1\n\tIPV6_PREFER_SRC_MASK          = 0x3f\n\tIPV6_PREFER_SRC_MIPDEFAULT    = 0x1\n\tIPV6_PREFER_SRC_MIPMASK       = 0x3\n\tIPV6_PREFER_SRC_NONCGA        = 0x10\n\tIPV6_PREFER_SRC_PUBLIC        = 0x4\n\tIPV6_PREFER_SRC_TMP           = 0x8\n\tIPV6_PREFER_SRC_TMPDEFAULT    = 0x4\n\tIPV6_PREFER_SRC_TMPMASK       = 0xc\n\tIPV6_RECVDSTOPTS              = 0x28\n\tIPV6_RECVHOPLIMIT             = 0x13\n\tIPV6_RECVHOPOPTS              = 0x14\n\tIPV6_RECVPATHMTU              = 0x24\n\tIPV6_RECVPKTINFO              = 0x12\n\tIPV6_RECVRTHDR                = 0x16\n\tIPV6_RECVRTHDRDSTOPTS         = 0x17\n\tIPV6_RECVTCLASS               = 0x19\n\tIPV6_RTHDR                    = 0x10\n\tIPV6_RTHDRDSTOPTS             = 0x11\n\tIPV6_RTHDR_TYPE_0             = 0x0\n\tIPV6_SEC_OPT                  = 0x22\n\tIPV6_SRC_PREFERENCES          = 0x23\n\tIPV6_TCLASS                   = 0x26\n\tIPV6_UNICAST_HOPS             = 0x5\n\tIPV6_UNSPEC_SRC               = 0x42\n\tIPV6_USE_MIN_MTU              = 0x20\n\tIPV6_V6ONLY                   = 0x27\n\tIP_ADD_MEMBERSHIP             = 0x13\n\tIP_ADD_SOURCE_MEMBERSHIP      = 0x17\n\tIP_BLOCK_SOURCE               = 0x15\n\tIP_BOUND_IF                   = 0x41\n\tIP_BROADCAST                  = 0x106\n\tIP_BROADCAST_TTL              = 0x43\n\tIP_DEFAULT_MULTICAST_LOOP     = 0x1\n\tIP_DEFAULT_MULTICAST_TTL      = 0x1\n\tIP_DF                         = 0x4000\n\tIP_DHCPINIT_IF                = 0x45\n\tIP_DONTFRAG                   = 0x1b\n\tIP_DONTROUTE                  = 0x105\n\tIP_DROP_MEMBERSHIP            = 0x14\n\tIP_DROP_SOURCE_MEMBERSHIP     = 0x18\n\tIP_HDRINCL                    = 0x2\n\tIP_MAXPACKET                  = 0xffff\n\tIP_MF                         = 0x2000\n\tIP_MSS                        = 0x240\n\tIP_MULTICAST_IF               = 0x10\n\tIP_MULTICAST_LOOP             = 0x12\n\tIP_MULTICAST_TTL              = 0x11\n\tIP_NEXTHOP                    = 0x19\n\tIP_OPTIONS                    = 0x1\n\tIP_PKTINFO                    = 0x1a\n\tIP_RECVDSTADDR                = 0x7\n\tIP_RECVIF                     = 0x9\n\tIP_RECVOPTS                   = 0x5\n\tIP_RECVPKTINFO                = 0x1a\n\tIP_RECVRETOPTS                = 0x6\n\tIP_RECVSLLA                   = 0xa\n\tIP_RECVTOS                    = 0xc\n\tIP_RECVTTL                    = 0xb\n\tIP_RETOPTS                    = 0x8\n\tIP_REUSEADDR                  = 0x104\n\tIP_SEC_OPT                    = 0x22\n\tIP_TOS                        = 0x3\n\tIP_TTL                        = 0x4\n\tIP_UNBLOCK_SOURCE             = 0x16\n\tIP_UNSPEC_SRC                 = 0x42\n\tISIG                          = 0x1\n\tISTRIP                        = 0x20\n\tIUCLC                         = 0x200\n\tIXANY                         = 0x800\n\tIXOFF                         = 0x1000\n\tIXON                          = 0x400\n\tLOCK_EX                       = 0x2\n\tLOCK_NB                       = 0x4\n\tLOCK_SH                       = 0x1\n\tLOCK_UN                       = 0x8\n\tMADV_ACCESS_DEFAULT           = 0x6\n\tMADV_ACCESS_LWP               = 0x7\n\tMADV_ACCESS_MANY              = 0x8\n\tMADV_DONTNEED                 = 0x4\n\tMADV_FREE                     = 0x5\n\tMADV_NORMAL                   = 0x0\n\tMADV_PURGE                    = 0x9\n\tMADV_RANDOM                   = 0x1\n\tMADV_SEQUENTIAL               = 0x2\n\tMADV_WILLNEED                 = 0x3\n\tMAP_32BIT                     = 0x80\n\tMAP_ALIGN                     = 0x200\n\tMAP_ANON                      = 0x100\n\tMAP_ANONYMOUS                 = 0x100\n\tMAP_FILE                      = 0x0\n\tMAP_FIXED                     = 0x10\n\tMAP_INITDATA                  = 0x800\n\tMAP_NORESERVE                 = 0x40\n\tMAP_PRIVATE                   = 0x2\n\tMAP_RENAME                    = 0x20\n\tMAP_SHARED                    = 0x1\n\tMAP_TEXT                      = 0x400\n\tMAP_TYPE                      = 0xf\n\tMCAST_BLOCK_SOURCE            = 0x2b\n\tMCAST_EXCLUDE                 = 0x2\n\tMCAST_INCLUDE                 = 0x1\n\tMCAST_JOIN_GROUP              = 0x29\n\tMCAST_JOIN_SOURCE_GROUP       = 0x2d\n\tMCAST_LEAVE_GROUP             = 0x2a\n\tMCAST_LEAVE_SOURCE_GROUP      = 0x2e\n\tMCAST_UNBLOCK_SOURCE          = 0x2c\n\tMCL_CURRENT                   = 0x1\n\tMCL_FUTURE                    = 0x2\n\tMSG_CTRUNC                    = 0x10\n\tMSG_DONTROUTE                 = 0x4\n\tMSG_DONTWAIT                  = 0x80\n\tMSG_DUPCTRL                   = 0x800\n\tMSG_EOR                       = 0x8\n\tMSG_MAXIOVLEN                 = 0x10\n\tMSG_NOSIGNAL                  = 0x200\n\tMSG_NOTIFICATION              = 0x100\n\tMSG_OOB                       = 0x1\n\tMSG_PEEK                      = 0x2\n\tMSG_TRUNC                     = 0x20\n\tMSG_WAITALL                   = 0x40\n\tMSG_XPG4_2                    = 0x8000\n\tMS_ASYNC                      = 0x1\n\tMS_INVALIDATE                 = 0x2\n\tMS_OLDSYNC                    = 0x0\n\tMS_SYNC                       = 0x4\n\tM_FLUSH                       = 0x86\n\tNAME_MAX                      = 0xff\n\tNEWDEV                        = 0x1\n\tNFDBITS                       = 0x40\n\tNL0                           = 0x0\n\tNL1                           = 0x100\n\tNLDLY                         = 0x100\n\tNOFLSH                        = 0x80\n\tOCRNL                         = 0x8\n\tOFDEL                         = 0x80\n\tOFILL                         = 0x40\n\tOLCUC                         = 0x2\n\tOLDDEV                        = 0x0\n\tONBITSMAJOR                   = 0x7\n\tONBITSMINOR                   = 0x8\n\tONLCR                         = 0x4\n\tONLRET                        = 0x20\n\tONOCR                         = 0x10\n\tOPENFAIL                      = -0x1\n\tOPOST                         = 0x1\n\tO_ACCMODE                     = 0x600003\n\tO_APPEND                      = 0x8\n\tO_CLOEXEC                     = 0x800000\n\tO_CREAT                       = 0x100\n\tO_DIRECT                      = 0x2000000\n\tO_DIRECTORY                   = 0x1000000\n\tO_DSYNC                       = 0x40\n\tO_EXCL                        = 0x400\n\tO_EXEC                        = 0x400000\n\tO_LARGEFILE                   = 0x2000\n\tO_NDELAY                      = 0x4\n\tO_NOCTTY                      = 0x800\n\tO_NOFOLLOW                    = 0x20000\n\tO_NOLINKS                     = 0x40000\n\tO_NONBLOCK                    = 0x80\n\tO_RDONLY                      = 0x0\n\tO_RDWR                        = 0x2\n\tO_RSYNC                       = 0x8000\n\tO_SEARCH                      = 0x200000\n\tO_SIOCGIFCONF                 = -0x3ff796ec\n\tO_SIOCGLIFCONF                = -0x3fef9688\n\tO_SYNC                        = 0x10\n\tO_TRUNC                       = 0x200\n\tO_WRONLY                      = 0x1\n\tO_XATTR                       = 0x4000\n\tPARENB                        = 0x100\n\tPAREXT                        = 0x100000\n\tPARMRK                        = 0x8\n\tPARODD                        = 0x200\n\tPENDIN                        = 0x4000\n\tPRIO_PGRP                     = 0x1\n\tPRIO_PROCESS                  = 0x0\n\tPRIO_USER                     = 0x2\n\tPROT_EXEC                     = 0x4\n\tPROT_NONE                     = 0x0\n\tPROT_READ                     = 0x1\n\tPROT_WRITE                    = 0x2\n\tRLIMIT_AS                     = 0x6\n\tRLIMIT_CORE                   = 0x4\n\tRLIMIT_CPU                    = 0x0\n\tRLIMIT_DATA                   = 0x2\n\tRLIMIT_FSIZE                  = 0x1\n\tRLIMIT_NOFILE                 = 0x5\n\tRLIMIT_STACK                  = 0x3\n\tRLIM_INFINITY                 = 0xfffffffffffffffd\n\tRTAX_AUTHOR                   = 0x6\n\tRTAX_BRD                      = 0x7\n\tRTAX_DST                      = 0x0\n\tRTAX_GATEWAY                  = 0x1\n\tRTAX_GENMASK                  = 0x3\n\tRTAX_IFA                      = 0x5\n\tRTAX_IFP                      = 0x4\n\tRTAX_MAX                      = 0x9\n\tRTAX_NETMASK                  = 0x2\n\tRTAX_SRC                      = 0x8\n\tRTA_AUTHOR                    = 0x40\n\tRTA_BRD                       = 0x80\n\tRTA_DST                       = 0x1\n\tRTA_GATEWAY                   = 0x2\n\tRTA_GENMASK                   = 0x8\n\tRTA_IFA                       = 0x20\n\tRTA_IFP                       = 0x10\n\tRTA_NETMASK                   = 0x4\n\tRTA_NUMBITS                   = 0x9\n\tRTA_SRC                       = 0x100\n\tRTF_BLACKHOLE                 = 0x1000\n\tRTF_CLONING                   = 0x100\n\tRTF_DONE                      = 0x40\n\tRTF_DYNAMIC                   = 0x10\n\tRTF_GATEWAY                   = 0x2\n\tRTF_HOST                      = 0x4\n\tRTF_INDIRECT                  = 0x40000\n\tRTF_KERNEL                    = 0x80000\n\tRTF_LLINFO                    = 0x400\n\tRTF_MASK                      = 0x80\n\tRTF_MODIFIED                  = 0x20\n\tRTF_MULTIRT                   = 0x10000\n\tRTF_PRIVATE                   = 0x2000\n\tRTF_PROTO1                    = 0x8000\n\tRTF_PROTO2                    = 0x4000\n\tRTF_REJECT                    = 0x8\n\tRTF_SETSRC                    = 0x20000\n\tRTF_STATIC                    = 0x800\n\tRTF_UP                        = 0x1\n\tRTF_XRESOLVE                  = 0x200\n\tRTF_ZONE                      = 0x100000\n\tRTM_ADD                       = 0x1\n\tRTM_CHANGE                    = 0x3\n\tRTM_CHGADDR                   = 0xf\n\tRTM_DELADDR                   = 0xd\n\tRTM_DELETE                    = 0x2\n\tRTM_FREEADDR                  = 0x10\n\tRTM_GET                       = 0x4\n\tRTM_IFINFO                    = 0xe\n\tRTM_LOCK                      = 0x8\n\tRTM_LOSING                    = 0x5\n\tRTM_MISS                      = 0x7\n\tRTM_NEWADDR                   = 0xc\n\tRTM_OLDADD                    = 0x9\n\tRTM_OLDDEL                    = 0xa\n\tRTM_REDIRECT                  = 0x6\n\tRTM_RESOLVE                   = 0xb\n\tRTM_VERSION                   = 0x3\n\tRTV_EXPIRE                    = 0x4\n\tRTV_HOPCOUNT                  = 0x2\n\tRTV_MTU                       = 0x1\n\tRTV_RPIPE                     = 0x8\n\tRTV_RTT                       = 0x40\n\tRTV_RTTVAR                    = 0x80\n\tRTV_SPIPE                     = 0x10\n\tRTV_SSTHRESH                  = 0x20\n\tRT_AWARE                      = 0x1\n\tRUSAGE_CHILDREN               = -0x1\n\tRUSAGE_SELF                   = 0x0\n\tSCM_RIGHTS                    = 0x1010\n\tSCM_TIMESTAMP                 = 0x1013\n\tSCM_UCRED                     = 0x1012\n\tSHUT_RD                       = 0x0\n\tSHUT_RDWR                     = 0x2\n\tSHUT_WR                       = 0x1\n\tSIG2STR_MAX                   = 0x20\n\tSIOCADDMULTI                  = -0x7fdf96cf\n\tSIOCADDRT                     = -0x7fcf8df6\n\tSIOCATMARK                    = 0x40047307\n\tSIOCDARP                      = -0x7fdb96e0\n\tSIOCDELMULTI                  = -0x7fdf96ce\n\tSIOCDELRT                     = -0x7fcf8df5\n\tSIOCDXARP                     = -0x7fff9658\n\tSIOCGARP                      = -0x3fdb96e1\n\tSIOCGDSTINFO                  = -0x3fff965c\n\tSIOCGENADDR                   = -0x3fdf96ab\n\tSIOCGENPSTATS                 = -0x3fdf96c7\n\tSIOCGETLSGCNT                 = -0x3fef8deb\n\tSIOCGETNAME                   = 0x40107334\n\tSIOCGETPEER                   = 0x40107335\n\tSIOCGETPROP                   = -0x3fff8f44\n\tSIOCGETSGCNT                  = -0x3feb8deb\n\tSIOCGETSYNC                   = -0x3fdf96d3\n\tSIOCGETVIFCNT                 = -0x3feb8dec\n\tSIOCGHIWAT                    = 0x40047301\n\tSIOCGIFADDR                   = -0x3fdf96f3\n\tSIOCGIFBRDADDR                = -0x3fdf96e9\n\tSIOCGIFCONF                   = -0x3ff796a4\n\tSIOCGIFDSTADDR                = -0x3fdf96f1\n\tSIOCGIFFLAGS                  = -0x3fdf96ef\n\tSIOCGIFHWADDR                 = -0x3fdf9647\n\tSIOCGIFINDEX                  = -0x3fdf96a6\n\tSIOCGIFMEM                    = -0x3fdf96ed\n\tSIOCGIFMETRIC                 = -0x3fdf96e5\n\tSIOCGIFMTU                    = -0x3fdf96ea\n\tSIOCGIFMUXID                  = -0x3fdf96a8\n\tSIOCGIFNETMASK                = -0x3fdf96e7\n\tSIOCGIFNUM                    = 0x40046957\n\tSIOCGIP6ADDRPOLICY            = -0x3fff965e\n\tSIOCGIPMSFILTER               = -0x3ffb964c\n\tSIOCGLIFADDR                  = -0x3f87968f\n\tSIOCGLIFBINDING               = -0x3f879666\n\tSIOCGLIFBRDADDR               = -0x3f879685\n\tSIOCGLIFCONF                  = -0x3fef965b\n\tSIOCGLIFDADSTATE              = -0x3f879642\n\tSIOCGLIFDSTADDR               = -0x3f87968d\n\tSIOCGLIFFLAGS                 = -0x3f87968b\n\tSIOCGLIFGROUPINFO             = -0x3f4b9663\n\tSIOCGLIFGROUPNAME             = -0x3f879664\n\tSIOCGLIFHWADDR                = -0x3f879640\n\tSIOCGLIFINDEX                 = -0x3f87967b\n\tSIOCGLIFLNKINFO               = -0x3f879674\n\tSIOCGLIFMETRIC                = -0x3f879681\n\tSIOCGLIFMTU                   = -0x3f879686\n\tSIOCGLIFMUXID                 = -0x3f87967d\n\tSIOCGLIFNETMASK               = -0x3f879683\n\tSIOCGLIFNUM                   = -0x3ff3967e\n\tSIOCGLIFSRCOF                 = -0x3fef964f\n\tSIOCGLIFSUBNET                = -0x3f879676\n\tSIOCGLIFTOKEN                 = -0x3f879678\n\tSIOCGLIFUSESRC                = -0x3f879651\n\tSIOCGLIFZONE                  = -0x3f879656\n\tSIOCGLOWAT                    = 0x40047303\n\tSIOCGMSFILTER                 = -0x3ffb964e\n\tSIOCGPGRP                     = 0x40047309\n\tSIOCGSTAMP                    = -0x3fef9646\n\tSIOCGXARP                     = -0x3fff9659\n\tSIOCIFDETACH                  = -0x7fdf96c8\n\tSIOCILB                       = -0x3ffb9645\n\tSIOCLIFADDIF                  = -0x3f879691\n\tSIOCLIFDELND                  = -0x7f879673\n\tSIOCLIFGETND                  = -0x3f879672\n\tSIOCLIFREMOVEIF               = -0x7f879692\n\tSIOCLIFSETND                  = -0x7f879671\n\tSIOCLOWER                     = -0x7fdf96d7\n\tSIOCSARP                      = -0x7fdb96e2\n\tSIOCSCTPGOPT                  = -0x3fef9653\n\tSIOCSCTPPEELOFF               = -0x3ffb9652\n\tSIOCSCTPSOPT                  = -0x7fef9654\n\tSIOCSENABLESDP                = -0x3ffb9649\n\tSIOCSETPROP                   = -0x7ffb8f43\n\tSIOCSETSYNC                   = -0x7fdf96d4\n\tSIOCSHIWAT                    = -0x7ffb8d00\n\tSIOCSIFADDR                   = -0x7fdf96f4\n\tSIOCSIFBRDADDR                = -0x7fdf96e8\n\tSIOCSIFDSTADDR                = -0x7fdf96f2\n\tSIOCSIFFLAGS                  = -0x7fdf96f0\n\tSIOCSIFINDEX                  = -0x7fdf96a5\n\tSIOCSIFMEM                    = -0x7fdf96ee\n\tSIOCSIFMETRIC                 = -0x7fdf96e4\n\tSIOCSIFMTU                    = -0x7fdf96eb\n\tSIOCSIFMUXID                  = -0x7fdf96a7\n\tSIOCSIFNAME                   = -0x7fdf96b7\n\tSIOCSIFNETMASK                = -0x7fdf96e6\n\tSIOCSIP6ADDRPOLICY            = -0x7fff965d\n\tSIOCSIPMSFILTER               = -0x7ffb964b\n\tSIOCSLGETREQ                  = -0x3fdf96b9\n\tSIOCSLIFADDR                  = -0x7f879690\n\tSIOCSLIFBRDADDR               = -0x7f879684\n\tSIOCSLIFDSTADDR               = -0x7f87968e\n\tSIOCSLIFFLAGS                 = -0x7f87968c\n\tSIOCSLIFGROUPNAME             = -0x7f879665\n\tSIOCSLIFINDEX                 = -0x7f87967a\n\tSIOCSLIFLNKINFO               = -0x7f879675\n\tSIOCSLIFMETRIC                = -0x7f879680\n\tSIOCSLIFMTU                   = -0x7f879687\n\tSIOCSLIFMUXID                 = -0x7f87967c\n\tSIOCSLIFNAME                  = -0x3f87967f\n\tSIOCSLIFNETMASK               = -0x7f879682\n\tSIOCSLIFPREFIX                = -0x3f879641\n\tSIOCSLIFSUBNET                = -0x7f879677\n\tSIOCSLIFTOKEN                 = -0x7f879679\n\tSIOCSLIFUSESRC                = -0x7f879650\n\tSIOCSLIFZONE                  = -0x7f879655\n\tSIOCSLOWAT                    = -0x7ffb8cfe\n\tSIOCSLSTAT                    = -0x7fdf96b8\n\tSIOCSMSFILTER                 = -0x7ffb964d\n\tSIOCSPGRP                     = -0x7ffb8cf8\n\tSIOCSPROMISC                  = -0x7ffb96d0\n\tSIOCSQPTR                     = -0x3ffb9648\n\tSIOCSSDSTATS                  = -0x3fdf96d2\n\tSIOCSSESTATS                  = -0x3fdf96d1\n\tSIOCSXARP                     = -0x7fff965a\n\tSIOCTMYADDR                   = -0x3ff79670\n\tSIOCTMYSITE                   = -0x3ff7966e\n\tSIOCTONLINK                   = -0x3ff7966f\n\tSIOCUPPER                     = -0x7fdf96d8\n\tSIOCX25RCV                    = -0x3fdf96c4\n\tSIOCX25TBL                    = -0x3fdf96c3\n\tSIOCX25XMT                    = -0x3fdf96c5\n\tSIOCXPROTO                    = 0x20007337\n\tSOCK_CLOEXEC                  = 0x80000\n\tSOCK_DGRAM                    = 0x1\n\tSOCK_NDELAY                   = 0x200000\n\tSOCK_NONBLOCK                 = 0x100000\n\tSOCK_RAW                      = 0x4\n\tSOCK_RDM                      = 0x5\n\tSOCK_SEQPACKET                = 0x6\n\tSOCK_STREAM                   = 0x2\n\tSOCK_TYPE_MASK                = 0xffff\n\tSOL_FILTER                    = 0xfffc\n\tSOL_PACKET                    = 0xfffd\n\tSOL_ROUTE                     = 0xfffe\n\tSOL_SOCKET                    = 0xffff\n\tSOMAXCONN                     = 0x80\n\tSO_ACCEPTCONN                 = 0x2\n\tSO_ALL                        = 0x3f\n\tSO_ALLZONES                   = 0x1014\n\tSO_ANON_MLP                   = 0x100a\n\tSO_ATTACH_FILTER              = 0x40000001\n\tSO_BAND                       = 0x4000\n\tSO_BROADCAST                  = 0x20\n\tSO_COPYOPT                    = 0x80000\n\tSO_DEBUG                      = 0x1\n\tSO_DELIM                      = 0x8000\n\tSO_DETACH_FILTER              = 0x40000002\n\tSO_DGRAM_ERRIND               = 0x200\n\tSO_DOMAIN                     = 0x100c\n\tSO_DONTLINGER                 = -0x81\n\tSO_DONTROUTE                  = 0x10\n\tSO_ERROPT                     = 0x40000\n\tSO_ERROR                      = 0x1007\n\tSO_EXCLBIND                   = 0x1015\n\tSO_HIWAT                      = 0x10\n\tSO_ISNTTY                     = 0x800\n\tSO_ISTTY                      = 0x400\n\tSO_KEEPALIVE                  = 0x8\n\tSO_LINGER                     = 0x80\n\tSO_LOWAT                      = 0x20\n\tSO_MAC_EXEMPT                 = 0x100b\n\tSO_MAC_IMPLICIT               = 0x1016\n\tSO_MAXBLK                     = 0x100000\n\tSO_MAXPSZ                     = 0x8\n\tSO_MINPSZ                     = 0x4\n\tSO_MREADOFF                   = 0x80\n\tSO_MREADON                    = 0x40\n\tSO_NDELOFF                    = 0x200\n\tSO_NDELON                     = 0x100\n\tSO_NODELIM                    = 0x10000\n\tSO_OOBINLINE                  = 0x100\n\tSO_PROTOTYPE                  = 0x1009\n\tSO_RCVBUF                     = 0x1002\n\tSO_RCVLOWAT                   = 0x1004\n\tSO_RCVPSH                     = 0x100d\n\tSO_RCVTIMEO                   = 0x1006\n\tSO_READOPT                    = 0x1\n\tSO_RECVUCRED                  = 0x400\n\tSO_REUSEADDR                  = 0x4\n\tSO_SECATTR                    = 0x1011\n\tSO_SNDBUF                     = 0x1001\n\tSO_SNDLOWAT                   = 0x1003\n\tSO_SNDTIMEO                   = 0x1005\n\tSO_STRHOLD                    = 0x20000\n\tSO_TAIL                       = 0x200000\n\tSO_TIMESTAMP                  = 0x1013\n\tSO_TONSTOP                    = 0x2000\n\tSO_TOSTOP                     = 0x1000\n\tSO_TYPE                       = 0x1008\n\tSO_USELOOPBACK                = 0x40\n\tSO_VRRP                       = 0x1017\n\tSO_WROFF                      = 0x2\n\tS_ENFMT                       = 0x400\n\tS_IAMB                        = 0x1ff\n\tS_IEXEC                       = 0x40\n\tS_IFBLK                       = 0x6000\n\tS_IFCHR                       = 0x2000\n\tS_IFDIR                       = 0x4000\n\tS_IFDOOR                      = 0xd000\n\tS_IFIFO                       = 0x1000\n\tS_IFLNK                       = 0xa000\n\tS_IFMT                        = 0xf000\n\tS_IFNAM                       = 0x5000\n\tS_IFPORT                      = 0xe000\n\tS_IFREG                       = 0x8000\n\tS_IFSOCK                      = 0xc000\n\tS_INSEM                       = 0x1\n\tS_INSHD                       = 0x2\n\tS_IREAD                       = 0x100\n\tS_IRGRP                       = 0x20\n\tS_IROTH                       = 0x4\n\tS_IRUSR                       = 0x100\n\tS_IRWXG                       = 0x38\n\tS_IRWXO                       = 0x7\n\tS_IRWXU                       = 0x1c0\n\tS_ISGID                       = 0x400\n\tS_ISUID                       = 0x800\n\tS_ISVTX                       = 0x200\n\tS_IWGRP                       = 0x10\n\tS_IWOTH                       = 0x2\n\tS_IWRITE                      = 0x80\n\tS_IWUSR                       = 0x80\n\tS_IXGRP                       = 0x8\n\tS_IXOTH                       = 0x1\n\tS_IXUSR                       = 0x40\n\tTAB0                          = 0x0\n\tTAB1                          = 0x800\n\tTAB2                          = 0x1000\n\tTAB3                          = 0x1800\n\tTABDLY                        = 0x1800\n\tTCFLSH                        = 0x5407\n\tTCGETA                        = 0x5401\n\tTCGETS                        = 0x540d\n\tTCIFLUSH                      = 0x0\n\tTCIOFF                        = 0x2\n\tTCIOFLUSH                     = 0x2\n\tTCION                         = 0x3\n\tTCOFLUSH                      = 0x1\n\tTCOOFF                        = 0x0\n\tTCOON                         = 0x1\n\tTCP_ABORT_THRESHOLD           = 0x11\n\tTCP_ANONPRIVBIND              = 0x20\n\tTCP_CONGESTION                = 0x25\n\tTCP_CONN_ABORT_THRESHOLD      = 0x13\n\tTCP_CONN_NOTIFY_THRESHOLD     = 0x12\n\tTCP_CORK                      = 0x18\n\tTCP_EXCLBIND                  = 0x21\n\tTCP_INIT_CWND                 = 0x15\n\tTCP_KEEPALIVE                 = 0x8\n\tTCP_KEEPALIVE_ABORT_THRESHOLD = 0x17\n\tTCP_KEEPALIVE_THRESHOLD       = 0x16\n\tTCP_KEEPCNT                   = 0x23\n\tTCP_KEEPIDLE                  = 0x22\n\tTCP_KEEPINTVL                 = 0x24\n\tTCP_LINGER2                   = 0x1c\n\tTCP_MAXSEG                    = 0x2\n\tTCP_MSS                       = 0x218\n\tTCP_NODELAY                   = 0x1\n\tTCP_NOTIFY_THRESHOLD          = 0x10\n\tTCP_RECVDSTADDR               = 0x14\n\tTCP_RTO_INITIAL               = 0x19\n\tTCP_RTO_MAX                   = 0x1b\n\tTCP_RTO_MIN                   = 0x1a\n\tTCSAFLUSH                     = 0x5410\n\tTCSBRK                        = 0x5405\n\tTCSETA                        = 0x5402\n\tTCSETAF                       = 0x5404\n\tTCSETAW                       = 0x5403\n\tTCSETS                        = 0x540e\n\tTCSETSF                       = 0x5410\n\tTCSETSW                       = 0x540f\n\tTCXONC                        = 0x5406\n\tTIMER_ABSTIME                 = 0x1\n\tTIMER_RELTIME                 = 0x0\n\tTIOC                          = 0x5400\n\tTIOCCBRK                      = 0x747a\n\tTIOCCDTR                      = 0x7478\n\tTIOCCILOOP                    = 0x746c\n\tTIOCEXCL                      = 0x740d\n\tTIOCFLUSH                     = 0x7410\n\tTIOCGETC                      = 0x7412\n\tTIOCGETD                      = 0x7400\n\tTIOCGETP                      = 0x7408\n\tTIOCGLTC                      = 0x7474\n\tTIOCGPGRP                     = 0x7414\n\tTIOCGPPS                      = 0x547d\n\tTIOCGPPSEV                    = 0x547f\n\tTIOCGSID                      = 0x7416\n\tTIOCGSOFTCAR                  = 0x5469\n\tTIOCGWINSZ                    = 0x5468\n\tTIOCHPCL                      = 0x7402\n\tTIOCKBOF                      = 0x5409\n\tTIOCKBON                      = 0x5408\n\tTIOCLBIC                      = 0x747e\n\tTIOCLBIS                      = 0x747f\n\tTIOCLGET                      = 0x747c\n\tTIOCLSET                      = 0x747d\n\tTIOCMBIC                      = 0x741c\n\tTIOCMBIS                      = 0x741b\n\tTIOCMGET                      = 0x741d\n\tTIOCMSET                      = 0x741a\n\tTIOCM_CAR                     = 0x40\n\tTIOCM_CD                      = 0x40\n\tTIOCM_CTS                     = 0x20\n\tTIOCM_DSR                     = 0x100\n\tTIOCM_DTR                     = 0x2\n\tTIOCM_LE                      = 0x1\n\tTIOCM_RI                      = 0x80\n\tTIOCM_RNG                     = 0x80\n\tTIOCM_RTS                     = 0x4\n\tTIOCM_SR                      = 0x10\n\tTIOCM_ST                      = 0x8\n\tTIOCNOTTY                     = 0x7471\n\tTIOCNXCL                      = 0x740e\n\tTIOCOUTQ                      = 0x7473\n\tTIOCREMOTE                    = 0x741e\n\tTIOCSBRK                      = 0x747b\n\tTIOCSCTTY                     = 0x7484\n\tTIOCSDTR                      = 0x7479\n\tTIOCSETC                      = 0x7411\n\tTIOCSETD                      = 0x7401\n\tTIOCSETN                      = 0x740a\n\tTIOCSETP                      = 0x7409\n\tTIOCSIGNAL                    = 0x741f\n\tTIOCSILOOP                    = 0x746d\n\tTIOCSLTC                      = 0x7475\n\tTIOCSPGRP                     = 0x7415\n\tTIOCSPPS                      = 0x547e\n\tTIOCSSOFTCAR                  = 0x546a\n\tTIOCSTART                     = 0x746e\n\tTIOCSTI                       = 0x7417\n\tTIOCSTOP                      = 0x746f\n\tTIOCSWINSZ                    = 0x5467\n\tTOSTOP                        = 0x100\n\tUTIME_NOW                     = -0x1\n\tUTIME_OMIT                    = -0x2\n\tVCEOF                         = 0x8\n\tVCEOL                         = 0x9\n\tVDISCARD                      = 0xd\n\tVDSUSP                        = 0xb\n\tVEOF                          = 0x4\n\tVEOL                          = 0x5\n\tVEOL2                         = 0x6\n\tVERASE                        = 0x2\n\tVERASE2                       = 0x11\n\tVINTR                         = 0x0\n\tVKILL                         = 0x3\n\tVLNEXT                        = 0xf\n\tVMIN                          = 0x4\n\tVQUIT                         = 0x1\n\tVREPRINT                      = 0xc\n\tVSTART                        = 0x8\n\tVSTATUS                       = 0x10\n\tVSTOP                         = 0x9\n\tVSUSP                         = 0xa\n\tVSWTCH                        = 0x7\n\tVT0                           = 0x0\n\tVT1                           = 0x4000\n\tVTDLY                         = 0x4000\n\tVTIME                         = 0x5\n\tVWERASE                       = 0xe\n\tWCONTFLG                      = 0xffff\n\tWCONTINUED                    = 0x8\n\tWCOREFLG                      = 0x80\n\tWEXITED                       = 0x1\n\tWNOHANG                       = 0x40\n\tWNOWAIT                       = 0x80\n\tWOPTMASK                      = 0xcf\n\tWRAP                          = 0x20000\n\tWSIGMASK                      = 0x7f\n\tWSTOPFLG                      = 0x7f\n\tWSTOPPED                      = 0x4\n\tWTRAPPED                      = 0x2\n\tWUNTRACED                     = 0x4\n\tXCASE                         = 0x4\n\tXTABS                         = 0x1800\n)\n\n// Errors\nconst (\n\tE2BIG           = syscall.Errno(0x7)\n\tEACCES          = syscall.Errno(0xd)\n\tEADDRINUSE      = syscall.Errno(0x7d)\n\tEADDRNOTAVAIL   = syscall.Errno(0x7e)\n\tEADV            = syscall.Errno(0x44)\n\tEAFNOSUPPORT    = syscall.Errno(0x7c)\n\tEAGAIN          = syscall.Errno(0xb)\n\tEALREADY        = syscall.Errno(0x95)\n\tEBADE           = syscall.Errno(0x32)\n\tEBADF           = syscall.Errno(0x9)\n\tEBADFD          = syscall.Errno(0x51)\n\tEBADMSG         = syscall.Errno(0x4d)\n\tEBADR           = syscall.Errno(0x33)\n\tEBADRQC         = syscall.Errno(0x36)\n\tEBADSLT         = syscall.Errno(0x37)\n\tEBFONT          = syscall.Errno(0x39)\n\tEBUSY           = syscall.Errno(0x10)\n\tECANCELED       = syscall.Errno(0x2f)\n\tECHILD          = syscall.Errno(0xa)\n\tECHRNG          = syscall.Errno(0x25)\n\tECOMM           = syscall.Errno(0x46)\n\tECONNABORTED    = syscall.Errno(0x82)\n\tECONNREFUSED    = syscall.Errno(0x92)\n\tECONNRESET      = syscall.Errno(0x83)\n\tEDEADLK         = syscall.Errno(0x2d)\n\tEDEADLOCK       = syscall.Errno(0x38)\n\tEDESTADDRREQ    = syscall.Errno(0x60)\n\tEDOM            = syscall.Errno(0x21)\n\tEDQUOT          = syscall.Errno(0x31)\n\tEEXIST          = syscall.Errno(0x11)\n\tEFAULT          = syscall.Errno(0xe)\n\tEFBIG           = syscall.Errno(0x1b)\n\tEHOSTDOWN       = syscall.Errno(0x93)\n\tEHOSTUNREACH    = syscall.Errno(0x94)\n\tEIDRM           = syscall.Errno(0x24)\n\tEILSEQ          = syscall.Errno(0x58)\n\tEINPROGRESS     = syscall.Errno(0x96)\n\tEINTR           = syscall.Errno(0x4)\n\tEINVAL          = syscall.Errno(0x16)\n\tEIO             = syscall.Errno(0x5)\n\tEISCONN         = syscall.Errno(0x85)\n\tEISDIR          = syscall.Errno(0x15)\n\tEL2HLT          = syscall.Errno(0x2c)\n\tEL2NSYNC        = syscall.Errno(0x26)\n\tEL3HLT          = syscall.Errno(0x27)\n\tEL3RST          = syscall.Errno(0x28)\n\tELIBACC         = syscall.Errno(0x53)\n\tELIBBAD         = syscall.Errno(0x54)\n\tELIBEXEC        = syscall.Errno(0x57)\n\tELIBMAX         = syscall.Errno(0x56)\n\tELIBSCN         = syscall.Errno(0x55)\n\tELNRNG          = syscall.Errno(0x29)\n\tELOCKUNMAPPED   = syscall.Errno(0x48)\n\tELOOP           = syscall.Errno(0x5a)\n\tEMFILE          = syscall.Errno(0x18)\n\tEMLINK          = syscall.Errno(0x1f)\n\tEMSGSIZE        = syscall.Errno(0x61)\n\tEMULTIHOP       = syscall.Errno(0x4a)\n\tENAMETOOLONG    = syscall.Errno(0x4e)\n\tENETDOWN        = syscall.Errno(0x7f)\n\tENETRESET       = syscall.Errno(0x81)\n\tENETUNREACH     = syscall.Errno(0x80)\n\tENFILE          = syscall.Errno(0x17)\n\tENOANO          = syscall.Errno(0x35)\n\tENOBUFS         = syscall.Errno(0x84)\n\tENOCSI          = syscall.Errno(0x2b)\n\tENODATA         = syscall.Errno(0x3d)\n\tENODEV          = syscall.Errno(0x13)\n\tENOENT          = syscall.Errno(0x2)\n\tENOEXEC         = syscall.Errno(0x8)\n\tENOLCK          = syscall.Errno(0x2e)\n\tENOLINK         = syscall.Errno(0x43)\n\tENOMEM          = syscall.Errno(0xc)\n\tENOMSG          = syscall.Errno(0x23)\n\tENONET          = syscall.Errno(0x40)\n\tENOPKG          = syscall.Errno(0x41)\n\tENOPROTOOPT     = syscall.Errno(0x63)\n\tENOSPC          = syscall.Errno(0x1c)\n\tENOSR           = syscall.Errno(0x3f)\n\tENOSTR          = syscall.Errno(0x3c)\n\tENOSYS          = syscall.Errno(0x59)\n\tENOTACTIVE      = syscall.Errno(0x49)\n\tENOTBLK         = syscall.Errno(0xf)\n\tENOTCONN        = syscall.Errno(0x86)\n\tENOTDIR         = syscall.Errno(0x14)\n\tENOTEMPTY       = syscall.Errno(0x5d)\n\tENOTRECOVERABLE = syscall.Errno(0x3b)\n\tENOTSOCK        = syscall.Errno(0x5f)\n\tENOTSUP         = syscall.Errno(0x30)\n\tENOTTY          = syscall.Errno(0x19)\n\tENOTUNIQ        = syscall.Errno(0x50)\n\tENXIO           = syscall.Errno(0x6)\n\tEOPNOTSUPP      = syscall.Errno(0x7a)\n\tEOVERFLOW       = syscall.Errno(0x4f)\n\tEOWNERDEAD      = syscall.Errno(0x3a)\n\tEPERM           = syscall.Errno(0x1)\n\tEPFNOSUPPORT    = syscall.Errno(0x7b)\n\tEPIPE           = syscall.Errno(0x20)\n\tEPROTO          = syscall.Errno(0x47)\n\tEPROTONOSUPPORT = syscall.Errno(0x78)\n\tEPROTOTYPE      = syscall.Errno(0x62)\n\tERANGE          = syscall.Errno(0x22)\n\tEREMCHG         = syscall.Errno(0x52)\n\tEREMOTE         = syscall.Errno(0x42)\n\tERESTART        = syscall.Errno(0x5b)\n\tEROFS           = syscall.Errno(0x1e)\n\tESHUTDOWN       = syscall.Errno(0x8f)\n\tESOCKTNOSUPPORT = syscall.Errno(0x79)\n\tESPIPE          = syscall.Errno(0x1d)\n\tESRCH           = syscall.Errno(0x3)\n\tESRMNT          = syscall.Errno(0x45)\n\tESTALE          = syscall.Errno(0x97)\n\tESTRPIPE        = syscall.Errno(0x5c)\n\tETIME           = syscall.Errno(0x3e)\n\tETIMEDOUT       = syscall.Errno(0x91)\n\tETOOMANYREFS    = syscall.Errno(0x90)\n\tETXTBSY         = syscall.Errno(0x1a)\n\tEUNATCH         = syscall.Errno(0x2a)\n\tEUSERS          = syscall.Errno(0x5e)\n\tEWOULDBLOCK     = syscall.Errno(0xb)\n\tEXDEV           = syscall.Errno(0x12)\n\tEXFULL          = syscall.Errno(0x34)\n)\n\n// Signals\nconst (\n\tSIGABRT    = syscall.Signal(0x6)\n\tSIGALRM    = syscall.Signal(0xe)\n\tSIGBUS     = syscall.Signal(0xa)\n\tSIGCANCEL  = syscall.Signal(0x24)\n\tSIGCHLD    = syscall.Signal(0x12)\n\tSIGCLD     = syscall.Signal(0x12)\n\tSIGCONT    = syscall.Signal(0x19)\n\tSIGEMT     = syscall.Signal(0x7)\n\tSIGFPE     = syscall.Signal(0x8)\n\tSIGFREEZE  = syscall.Signal(0x22)\n\tSIGHUP     = syscall.Signal(0x1)\n\tSIGILL     = syscall.Signal(0x4)\n\tSIGINFO    = syscall.Signal(0x29)\n\tSIGINT     = syscall.Signal(0x2)\n\tSIGIO      = syscall.Signal(0x16)\n\tSIGIOT     = syscall.Signal(0x6)\n\tSIGJVM1    = syscall.Signal(0x27)\n\tSIGJVM2    = syscall.Signal(0x28)\n\tSIGKILL    = syscall.Signal(0x9)\n\tSIGLOST    = syscall.Signal(0x25)\n\tSIGLWP     = syscall.Signal(0x21)\n\tSIGPIPE    = syscall.Signal(0xd)\n\tSIGPOLL    = syscall.Signal(0x16)\n\tSIGPROF    = syscall.Signal(0x1d)\n\tSIGPWR     = syscall.Signal(0x13)\n\tSIGQUIT    = syscall.Signal(0x3)\n\tSIGSEGV    = syscall.Signal(0xb)\n\tSIGSTOP    = syscall.Signal(0x17)\n\tSIGSYS     = syscall.Signal(0xc)\n\tSIGTERM    = syscall.Signal(0xf)\n\tSIGTHAW    = syscall.Signal(0x23)\n\tSIGTRAP    = syscall.Signal(0x5)\n\tSIGTSTP    = syscall.Signal(0x18)\n\tSIGTTIN    = syscall.Signal(0x1a)\n\tSIGTTOU    = syscall.Signal(0x1b)\n\tSIGURG     = syscall.Signal(0x15)\n\tSIGUSR1    = syscall.Signal(0x10)\n\tSIGUSR2    = syscall.Signal(0x11)\n\tSIGVTALRM  = syscall.Signal(0x1c)\n\tSIGWAITING = syscall.Signal(0x20)\n\tSIGWINCH   = syscall.Signal(0x14)\n\tSIGXCPU    = syscall.Signal(0x1e)\n\tSIGXFSZ    = syscall.Signal(0x1f)\n\tSIGXRES    = syscall.Signal(0x26)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  syscall.Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EPERM\", \"not owner\"},\n\t{2, \"ENOENT\", \"no such file or directory\"},\n\t{3, \"ESRCH\", \"no such process\"},\n\t{4, \"EINTR\", \"interrupted system call\"},\n\t{5, \"EIO\", \"I/O error\"},\n\t{6, \"ENXIO\", \"no such device or address\"},\n\t{7, \"E2BIG\", \"arg list too long\"},\n\t{8, \"ENOEXEC\", \"exec format error\"},\n\t{9, \"EBADF\", \"bad file number\"},\n\t{10, \"ECHILD\", \"no child processes\"},\n\t{11, \"EAGAIN\", \"resource temporarily unavailable\"},\n\t{12, \"ENOMEM\", \"not enough space\"},\n\t{13, \"EACCES\", \"permission denied\"},\n\t{14, \"EFAULT\", \"bad address\"},\n\t{15, \"ENOTBLK\", \"block device required\"},\n\t{16, \"EBUSY\", \"device busy\"},\n\t{17, \"EEXIST\", \"file exists\"},\n\t{18, \"EXDEV\", \"cross-device link\"},\n\t{19, \"ENODEV\", \"no such device\"},\n\t{20, \"ENOTDIR\", \"not a directory\"},\n\t{21, \"EISDIR\", \"is a directory\"},\n\t{22, \"EINVAL\", \"invalid argument\"},\n\t{23, \"ENFILE\", \"file table overflow\"},\n\t{24, \"EMFILE\", \"too many open files\"},\n\t{25, \"ENOTTY\", \"inappropriate ioctl for device\"},\n\t{26, \"ETXTBSY\", \"text file busy\"},\n\t{27, \"EFBIG\", \"file too large\"},\n\t{28, \"ENOSPC\", \"no space left on device\"},\n\t{29, \"ESPIPE\", \"illegal seek\"},\n\t{30, \"EROFS\", \"read-only file system\"},\n\t{31, \"EMLINK\", \"too many links\"},\n\t{32, \"EPIPE\", \"broken pipe\"},\n\t{33, \"EDOM\", \"argument out of domain\"},\n\t{34, \"ERANGE\", \"result too large\"},\n\t{35, \"ENOMSG\", \"no message of desired type\"},\n\t{36, \"EIDRM\", \"identifier removed\"},\n\t{37, \"ECHRNG\", \"channel number out of range\"},\n\t{38, \"EL2NSYNC\", \"level 2 not synchronized\"},\n\t{39, \"EL3HLT\", \"level 3 halted\"},\n\t{40, \"EL3RST\", \"level 3 reset\"},\n\t{41, \"ELNRNG\", \"link number out of range\"},\n\t{42, \"EUNATCH\", \"protocol driver not attached\"},\n\t{43, \"ENOCSI\", \"no CSI structure available\"},\n\t{44, \"EL2HLT\", \"level 2 halted\"},\n\t{45, \"EDEADLK\", \"deadlock situation detected/avoided\"},\n\t{46, \"ENOLCK\", \"no record locks available\"},\n\t{47, \"ECANCELED\", \"operation canceled\"},\n\t{48, \"ENOTSUP\", \"operation not supported\"},\n\t{49, \"EDQUOT\", \"disc quota exceeded\"},\n\t{50, \"EBADE\", \"bad exchange descriptor\"},\n\t{51, \"EBADR\", \"bad request descriptor\"},\n\t{52, \"EXFULL\", \"message tables full\"},\n\t{53, \"ENOANO\", \"anode table overflow\"},\n\t{54, \"EBADRQC\", \"bad request code\"},\n\t{55, \"EBADSLT\", \"invalid slot\"},\n\t{56, \"EDEADLOCK\", \"file locking deadlock\"},\n\t{57, \"EBFONT\", \"bad font file format\"},\n\t{58, \"EOWNERDEAD\", \"owner of the lock died\"},\n\t{59, \"ENOTRECOVERABLE\", \"lock is not recoverable\"},\n\t{60, \"ENOSTR\", \"not a stream device\"},\n\t{61, \"ENODATA\", \"no data available\"},\n\t{62, \"ETIME\", \"timer expired\"},\n\t{63, \"ENOSR\", \"out of stream resources\"},\n\t{64, \"ENONET\", \"machine is not on the network\"},\n\t{65, \"ENOPKG\", \"package not installed\"},\n\t{66, \"EREMOTE\", \"object is remote\"},\n\t{67, \"ENOLINK\", \"link has been severed\"},\n\t{68, \"EADV\", \"advertise error\"},\n\t{69, \"ESRMNT\", \"srmount error\"},\n\t{70, \"ECOMM\", \"communication error on send\"},\n\t{71, \"EPROTO\", \"protocol error\"},\n\t{72, \"ELOCKUNMAPPED\", \"locked lock was unmapped \"},\n\t{73, \"ENOTACTIVE\", \"facility is not active\"},\n\t{74, \"EMULTIHOP\", \"multihop attempted\"},\n\t{77, \"EBADMSG\", \"not a data message\"},\n\t{78, \"ENAMETOOLONG\", \"file name too long\"},\n\t{79, \"EOVERFLOW\", \"value too large for defined data type\"},\n\t{80, \"ENOTUNIQ\", \"name not unique on network\"},\n\t{81, \"EBADFD\", \"file descriptor in bad state\"},\n\t{82, \"EREMCHG\", \"remote address changed\"},\n\t{83, \"ELIBACC\", \"can not access a needed shared library\"},\n\t{84, \"ELIBBAD\", \"accessing a corrupted shared library\"},\n\t{85, \"ELIBSCN\", \".lib section in a.out corrupted\"},\n\t{86, \"ELIBMAX\", \"attempting to link in more shared libraries than system limit\"},\n\t{87, \"ELIBEXEC\", \"can not exec a shared library directly\"},\n\t{88, \"EILSEQ\", \"illegal byte sequence\"},\n\t{89, \"ENOSYS\", \"operation not applicable\"},\n\t{90, \"ELOOP\", \"number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS\"},\n\t{91, \"ERESTART\", \"error 91\"},\n\t{92, \"ESTRPIPE\", \"error 92\"},\n\t{93, \"ENOTEMPTY\", \"directory not empty\"},\n\t{94, \"EUSERS\", \"too many users\"},\n\t{95, \"ENOTSOCK\", \"socket operation on non-socket\"},\n\t{96, \"EDESTADDRREQ\", \"destination address required\"},\n\t{97, \"EMSGSIZE\", \"message too long\"},\n\t{98, \"EPROTOTYPE\", \"protocol wrong type for socket\"},\n\t{99, \"ENOPROTOOPT\", \"option not supported by protocol\"},\n\t{120, \"EPROTONOSUPPORT\", \"protocol not supported\"},\n\t{121, \"ESOCKTNOSUPPORT\", \"socket type not supported\"},\n\t{122, \"EOPNOTSUPP\", \"operation not supported on transport endpoint\"},\n\t{123, \"EPFNOSUPPORT\", \"protocol family not supported\"},\n\t{124, \"EAFNOSUPPORT\", \"address family not supported by protocol family\"},\n\t{125, \"EADDRINUSE\", \"address already in use\"},\n\t{126, \"EADDRNOTAVAIL\", \"cannot assign requested address\"},\n\t{127, \"ENETDOWN\", \"network is down\"},\n\t{128, \"ENETUNREACH\", \"network is unreachable\"},\n\t{129, \"ENETRESET\", \"network dropped connection because of reset\"},\n\t{130, \"ECONNABORTED\", \"software caused connection abort\"},\n\t{131, \"ECONNRESET\", \"connection reset by peer\"},\n\t{132, \"ENOBUFS\", \"no buffer space available\"},\n\t{133, \"EISCONN\", \"transport endpoint is already connected\"},\n\t{134, \"ENOTCONN\", \"transport endpoint is not connected\"},\n\t{143, \"ESHUTDOWN\", \"cannot send after socket shutdown\"},\n\t{144, \"ETOOMANYREFS\", \"too many references: cannot splice\"},\n\t{145, \"ETIMEDOUT\", \"connection timed out\"},\n\t{146, \"ECONNREFUSED\", \"connection refused\"},\n\t{147, \"EHOSTDOWN\", \"host is down\"},\n\t{148, \"EHOSTUNREACH\", \"no route to host\"},\n\t{149, \"EALREADY\", \"operation already in progress\"},\n\t{150, \"EINPROGRESS\", \"operation now in progress\"},\n\t{151, \"ESTALE\", \"stale NFS file handle\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  syscall.Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGQUIT\", \"quit\"},\n\t{4, \"SIGILL\", \"illegal Instruction\"},\n\t{5, \"SIGTRAP\", \"trace/Breakpoint Trap\"},\n\t{6, \"SIGABRT\", \"abort\"},\n\t{7, \"SIGEMT\", \"emulation Trap\"},\n\t{8, \"SIGFPE\", \"arithmetic Exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus Error\"},\n\t{11, \"SIGSEGV\", \"segmentation Fault\"},\n\t{12, \"SIGSYS\", \"bad System Call\"},\n\t{13, \"SIGPIPE\", \"broken Pipe\"},\n\t{14, \"SIGALRM\", \"alarm Clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user Signal 1\"},\n\t{17, \"SIGUSR2\", \"user Signal 2\"},\n\t{18, \"SIGCHLD\", \"child Status Changed\"},\n\t{19, \"SIGPWR\", \"power-Fail/Restart\"},\n\t{20, \"SIGWINCH\", \"window Size Change\"},\n\t{21, \"SIGURG\", \"urgent Socket Condition\"},\n\t{22, \"SIGIO\", \"pollable Event\"},\n\t{23, \"SIGSTOP\", \"stopped (signal)\"},\n\t{24, \"SIGTSTP\", \"stopped (user)\"},\n\t{25, \"SIGCONT\", \"continued\"},\n\t{26, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{27, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{28, \"SIGVTALRM\", \"virtual Timer Expired\"},\n\t{29, \"SIGPROF\", \"profiling Timer Expired\"},\n\t{30, \"SIGXCPU\", \"cpu Limit Exceeded\"},\n\t{31, \"SIGXFSZ\", \"file Size Limit Exceeded\"},\n\t{32, \"SIGWAITING\", \"no runnable lwp\"},\n\t{33, \"SIGLWP\", \"inter-lwp signal\"},\n\t{34, \"SIGFREEZE\", \"checkpoint Freeze\"},\n\t{35, \"SIGTHAW\", \"checkpoint Thaw\"},\n\t{36, \"SIGCANCEL\", \"thread Cancellation\"},\n\t{37, \"SIGLOST\", \"resource Lost\"},\n\t{38, \"SIGXRES\", \"resource Control Exceeded\"},\n\t{39, \"SIGJVM1\", \"reserved for JVM 1\"},\n\t{40, \"SIGJVM2\", \"reserved for JVM 2\"},\n\t{41, \"SIGINFO\", \"information Request\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go",
    "content": "// Copyright 2020 The Go Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style\n// license that can be found in the LICENSE file.\n\n//go:build zos && s390x\n\n// Hand edited based on zerrors_linux_s390x.go\n// TODO: auto-generate.\n\npackage unix\n\nconst (\n\tBRKINT                   = 0x0001\n\tCLOCAL                   = 0x1\n\tCLOCK_MONOTONIC          = 0x1\n\tCLOCK_PROCESS_CPUTIME_ID = 0x2\n\tCLOCK_REALTIME           = 0x0\n\tCLOCK_THREAD_CPUTIME_ID  = 0x3\n\tCLONE_NEWIPC             = 0x08000000\n\tCLONE_NEWNET             = 0x40000000\n\tCLONE_NEWNS              = 0x00020000\n\tCLONE_NEWPID             = 0x20000000\n\tCLONE_NEWUTS             = 0x04000000\n\tCLONE_PARENT             = 0x00008000\n\tCS8                      = 0x0030\n\tCSIZE                    = 0x0030\n\tECHO                     = 0x00000008\n\tECHONL                   = 0x00000001\n\tEFD_SEMAPHORE            = 0x00002000\n\tEFD_CLOEXEC              = 0x00001000\n\tEFD_NONBLOCK             = 0x00000004\n\tEPOLL_CLOEXEC            = 0x00001000\n\tEPOLL_CTL_ADD            = 0\n\tEPOLL_CTL_MOD            = 1\n\tEPOLL_CTL_DEL            = 2\n\tEPOLLRDNORM              = 0x0001\n\tEPOLLRDBAND              = 0x0002\n\tEPOLLIN                  = 0x0003\n\tEPOLLOUT                 = 0x0004\n\tEPOLLWRBAND              = 0x0008\n\tEPOLLPRI                 = 0x0010\n\tEPOLLERR                 = 0x0020\n\tEPOLLHUP                 = 0x0040\n\tEPOLLEXCLUSIVE           = 0x20000000\n\tEPOLLONESHOT             = 0x40000000\n\tFD_CLOEXEC               = 0x01\n\tFD_CLOFORK               = 0x02\n\tFD_SETSIZE               = 0x800\n\tFNDELAY                  = 0x04\n\tF_CLOSFD                 = 9\n\tF_CONTROL_CVT            = 13\n\tF_DUPFD                  = 0\n\tF_DUPFD2                 = 8\n\tF_GETFD                  = 1\n\tF_GETFL                  = 259\n\tF_GETLK                  = 5\n\tF_GETOWN                 = 10\n\tF_OK                     = 0x0\n\tF_RDLCK                  = 1\n\tF_SETFD                  = 2\n\tF_SETFL                  = 4\n\tF_SETLK                  = 6\n\tF_SETLKW                 = 7\n\tF_SETOWN                 = 11\n\tF_SETTAG                 = 12\n\tF_UNLCK                  = 3\n\tF_WRLCK                  = 2\n\tFSTYPE_ZFS               = 0xe9 //\"Z\"\n\tFSTYPE_HFS               = 0xc8 //\"H\"\n\tFSTYPE_NFS               = 0xd5 //\"N\"\n\tFSTYPE_TFS               = 0xe3 //\"T\"\n\tFSTYPE_AUTOMOUNT         = 0xc1 //\"A\"\n\tGRND_NONBLOCK            = 1\n\tGRND_RANDOM              = 2\n\tHUPCL                    = 0x0100 // Hang up on last close\n\tIN_CLOEXEC               = 0x00001000\n\tIN_NONBLOCK              = 0x00000004\n\tIN_ACCESS                = 0x00000001\n\tIN_MODIFY                = 0x00000002\n\tIN_ATTRIB                = 0x00000004\n\tIN_CLOSE_WRITE           = 0x00000008\n\tIN_CLOSE_NOWRITE         = 0x00000010\n\tIN_OPEN                  = 0x00000020\n\tIN_MOVED_FROM            = 0x00000040\n\tIN_MOVED_TO              = 0x00000080\n\tIN_CREATE                = 0x00000100\n\tIN_DELETE                = 0x00000200\n\tIN_DELETE_SELF           = 0x00000400\n\tIN_MOVE_SELF             = 0x00000800\n\tIN_UNMOUNT               = 0x00002000\n\tIN_Q_OVERFLOW            = 0x00004000\n\tIN_IGNORED               = 0x00008000\n\tIN_CLOSE                 = (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)\n\tIN_MOVE                  = (IN_MOVED_FROM | IN_MOVED_TO)\n\tIN_ALL_EVENTS            = (IN_ACCESS | IN_MODIFY | IN_ATTRIB |\n\t\tIN_CLOSE | IN_OPEN | IN_MOVE |\n\t\tIN_CREATE | IN_DELETE | IN_DELETE_SELF |\n\t\tIN_MOVE_SELF)\n\tIN_ONLYDIR                      = 0x01000000\n\tIN_DONT_FOLLOW                  = 0x02000000\n\tIN_EXCL_UNLINK                  = 0x04000000\n\tIN_MASK_CREATE                  = 0x10000000\n\tIN_MASK_ADD                     = 0x20000000\n\tIN_ISDIR                        = 0x40000000\n\tIN_ONESHOT                      = 0x80000000\n\tIP6F_MORE_FRAG                  = 0x0001\n\tIP6F_OFF_MASK                   = 0xfff8\n\tIP6F_RESERVED_MASK              = 0x0006\n\tIP6OPT_JUMBO                    = 0xc2\n\tIP6OPT_JUMBO_LEN                = 6\n\tIP6OPT_MUTABLE                  = 0x20\n\tIP6OPT_NSAP_ADDR                = 0xc3\n\tIP6OPT_PAD1                     = 0x00\n\tIP6OPT_PADN                     = 0x01\n\tIP6OPT_ROUTER_ALERT             = 0x05\n\tIP6OPT_TUNNEL_LIMIT             = 0x04\n\tIP6OPT_TYPE_DISCARD             = 0x40\n\tIP6OPT_TYPE_FORCEICMP           = 0x80\n\tIP6OPT_TYPE_ICMP                = 0xc0\n\tIP6OPT_TYPE_SKIP                = 0x00\n\tIP6_ALERT_AN                    = 0x0002\n\tIP6_ALERT_MLD                   = 0x0000\n\tIP6_ALERT_RSVP                  = 0x0001\n\tIPPORT_RESERVED                 = 1024\n\tIPPORT_USERRESERVED             = 5000\n\tIPPROTO_AH                      = 51\n\tSOL_AH                          = 51\n\tIPPROTO_DSTOPTS                 = 60\n\tSOL_DSTOPTS                     = 60\n\tIPPROTO_EGP                     = 8\n\tSOL_EGP                         = 8\n\tIPPROTO_ESP                     = 50\n\tSOL_ESP                         = 50\n\tIPPROTO_FRAGMENT                = 44\n\tSOL_FRAGMENT                    = 44\n\tIPPROTO_GGP                     = 2\n\tSOL_GGP                         = 2\n\tIPPROTO_HOPOPTS                 = 0\n\tSOL_HOPOPTS                     = 0\n\tIPPROTO_ICMP                    = 1\n\tSOL_ICMP                        = 1\n\tIPPROTO_ICMPV6                  = 58\n\tSOL_ICMPV6                      = 58\n\tIPPROTO_IDP                     = 22\n\tSOL_IDP                         = 22\n\tIPPROTO_IP                      = 0\n\tSOL_IP                          = 0\n\tIPPROTO_IPV6                    = 41\n\tSOL_IPV6                        = 41\n\tIPPROTO_MAX                     = 256\n\tSOL_MAX                         = 256\n\tIPPROTO_NONE                    = 59\n\tSOL_NONE                        = 59\n\tIPPROTO_PUP                     = 12\n\tSOL_PUP                         = 12\n\tIPPROTO_RAW                     = 255\n\tSOL_RAW                         = 255\n\tIPPROTO_ROUTING                 = 43\n\tSOL_ROUTING                     = 43\n\tIPPROTO_TCP                     = 6\n\tSOL_TCP                         = 6\n\tIPPROTO_UDP                     = 17\n\tSOL_UDP                         = 17\n\tIPV6_ADDR_PREFERENCES           = 32\n\tIPV6_CHECKSUM                   = 19\n\tIPV6_DONTFRAG                   = 29\n\tIPV6_DSTOPTS                    = 23\n\tIPV6_HOPLIMIT                   = 11\n\tIPV6_HOPOPTS                    = 22\n\tIPV6_JOIN_GROUP                 = 5\n\tIPV6_LEAVE_GROUP                = 6\n\tIPV6_MULTICAST_HOPS             = 9\n\tIPV6_MULTICAST_IF               = 7\n\tIPV6_MULTICAST_LOOP             = 4\n\tIPV6_NEXTHOP                    = 20\n\tIPV6_PATHMTU                    = 12\n\tIPV6_PKTINFO                    = 13\n\tIPV6_PREFER_SRC_CGA             = 0x10\n\tIPV6_PREFER_SRC_COA             = 0x02\n\tIPV6_PREFER_SRC_HOME            = 0x01\n\tIPV6_PREFER_SRC_NONCGA          = 0x20\n\tIPV6_PREFER_SRC_PUBLIC          = 0x08\n\tIPV6_PREFER_SRC_TMP             = 0x04\n\tIPV6_RECVDSTOPTS                = 28\n\tIPV6_RECVHOPLIMIT               = 14\n\tIPV6_RECVHOPOPTS                = 26\n\tIPV6_RECVPATHMTU                = 16\n\tIPV6_RECVPKTINFO                = 15\n\tIPV6_RECVRTHDR                  = 25\n\tIPV6_RECVTCLASS                 = 31\n\tIPV6_RTHDR                      = 21\n\tIPV6_RTHDRDSTOPTS               = 24\n\tIPV6_RTHDR_TYPE_0               = 0\n\tIPV6_TCLASS                     = 30\n\tIPV6_UNICAST_HOPS               = 3\n\tIPV6_USE_MIN_MTU                = 18\n\tIPV6_V6ONLY                     = 10\n\tIP_ADD_MEMBERSHIP               = 5\n\tIP_ADD_SOURCE_MEMBERSHIP        = 12\n\tIP_BLOCK_SOURCE                 = 10\n\tIP_DEFAULT_MULTICAST_LOOP       = 1\n\tIP_DEFAULT_MULTICAST_TTL        = 1\n\tIP_DROP_MEMBERSHIP              = 6\n\tIP_DROP_SOURCE_MEMBERSHIP       = 13\n\tIP_MAX_MEMBERSHIPS              = 20\n\tIP_MULTICAST_IF                 = 7\n\tIP_MULTICAST_LOOP               = 4\n\tIP_MULTICAST_TTL                = 3\n\tIP_OPTIONS                      = 1\n\tIP_PKTINFO                      = 101\n\tIP_RECVPKTINFO                  = 102\n\tIP_TOS                          = 2\n\tIP_TTL                          = 14\n\tIP_UNBLOCK_SOURCE               = 11\n\tICMP6_FILTER                    = 1\n\tMCAST_INCLUDE                   = 0\n\tMCAST_EXCLUDE                   = 1\n\tMCAST_JOIN_GROUP                = 40\n\tMCAST_LEAVE_GROUP               = 41\n\tMCAST_JOIN_SOURCE_GROUP         = 42\n\tMCAST_LEAVE_SOURCE_GROUP        = 43\n\tMCAST_BLOCK_SOURCE              = 44\n\tMCAST_UNBLOCK_SOURCE            = 46\n\tICANON                          = 0x0010\n\tICRNL                           = 0x0002\n\tIEXTEN                          = 0x0020\n\tIGNBRK                          = 0x0004\n\tIGNCR                           = 0x0008\n\tINLCR                           = 0x0020\n\tISIG                            = 0x0040\n\tISTRIP                          = 0x0080\n\tIXON                            = 0x0200\n\tIXOFF                           = 0x0100\n\tLOCK_SH                         = 0x1\n\tLOCK_EX                         = 0x2\n\tLOCK_NB                         = 0x4\n\tLOCK_UN                         = 0x8\n\tPOLLIN                          = 0x0003\n\tPOLLOUT                         = 0x0004\n\tPOLLPRI                         = 0x0010\n\tPOLLERR                         = 0x0020\n\tPOLLHUP                         = 0x0040\n\tPOLLNVAL                        = 0x0080\n\tPROT_READ                       = 0x1 // mmap - page can be read\n\tPROT_WRITE                      = 0x2 // page can be written\n\tPROT_NONE                       = 0x4 // can't be accessed\n\tPROT_EXEC                       = 0x8 // can be executed\n\tMAP_PRIVATE                     = 0x1 // changes are private\n\tMAP_SHARED                      = 0x2 // changes are shared\n\tMAP_FIXED                       = 0x4 // place exactly\n\t__MAP_MEGA                      = 0x8\n\t__MAP_64                        = 0x10\n\tMAP_ANON                        = 0x20\n\tMAP_ANONYMOUS                   = 0x20\n\tMS_SYNC                         = 0x1 // msync - synchronous writes\n\tMS_ASYNC                        = 0x2 // asynchronous writes\n\tMS_INVALIDATE                   = 0x4 // invalidate mappings\n\tMS_BIND                         = 0x00001000\n\tMS_MOVE                         = 0x00002000\n\tMS_NOSUID                       = 0x00000002\n\tMS_PRIVATE                      = 0x00040000\n\tMS_REC                          = 0x00004000\n\tMS_REMOUNT                      = 0x00008000\n\tMS_RDONLY                       = 0x00000001\n\tMS_UNBINDABLE                   = 0x00020000\n\tMNT_DETACH                      = 0x00000004\n\tZOSDSFS_SUPER_MAGIC             = 0x44534653 // zOS DSFS\n\tNFS_SUPER_MAGIC                 = 0x6969     // NFS\n\tNSFS_MAGIC                      = 0x6e736673 // PROCNS\n\tPROC_SUPER_MAGIC                = 0x9fa0     // proc FS\n\tZOSTFS_SUPER_MAGIC              = 0x544653   // zOS TFS\n\tZOSUFS_SUPER_MAGIC              = 0x554653   // zOS UFS\n\tZOSZFS_SUPER_MAGIC              = 0x5A4653   // zOS ZFS\n\tMTM_RDONLY                      = 0x80000000\n\tMTM_RDWR                        = 0x40000000\n\tMTM_UMOUNT                      = 0x10000000\n\tMTM_IMMED                       = 0x08000000\n\tMTM_FORCE                       = 0x04000000\n\tMTM_DRAIN                       = 0x02000000\n\tMTM_RESET                       = 0x01000000\n\tMTM_SAMEMODE                    = 0x00100000\n\tMTM_UNQSEFORCE                  = 0x00040000\n\tMTM_NOSUID                      = 0x00000400\n\tMTM_SYNCHONLY                   = 0x00000200\n\tMTM_REMOUNT                     = 0x00000100\n\tMTM_NOSECURITY                  = 0x00000080\n\tNFDBITS                         = 0x20\n\tONLRET                          = 0x0020 // NL performs CR function\n\tO_ACCMODE                       = 0x03\n\tO_APPEND                        = 0x08\n\tO_ASYNCSIG                      = 0x0200\n\tO_CREAT                         = 0x80\n\tO_DIRECT                        = 0x00002000\n\tO_NOFOLLOW                      = 0x00004000\n\tO_DIRECTORY                     = 0x00008000\n\tO_PATH                          = 0x00080000\n\tO_CLOEXEC                       = 0x00001000\n\tO_EXCL                          = 0x40\n\tO_GETFL                         = 0x0F\n\tO_LARGEFILE                     = 0x0400\n\tO_NDELAY                        = 0x4\n\tO_NONBLOCK                      = 0x04\n\tO_RDONLY                        = 0x02\n\tO_RDWR                          = 0x03\n\tO_SYNC                          = 0x0100\n\tO_TRUNC                         = 0x10\n\tO_WRONLY                        = 0x01\n\tO_NOCTTY                        = 0x20\n\tOPOST                           = 0x0001\n\tONLCR                           = 0x0004\n\tPARENB                          = 0x0200\n\tPARMRK                          = 0x0400\n\tQUERYCVT                        = 3\n\tRUSAGE_CHILDREN                 = -0x1\n\tRUSAGE_SELF                     = 0x0 // RUSAGE_THREAD unsupported on z/OS\n\tSEEK_CUR                        = 1\n\tSEEK_END                        = 2\n\tSEEK_SET                        = 0\n\tSETAUTOCVTALL                   = 5\n\tSETAUTOCVTON                    = 2\n\tSETCVTALL                       = 4\n\tSETCVTOFF                       = 0\n\tSETCVTON                        = 1\n\tAF_APPLETALK                    = 16\n\tAF_CCITT                        = 10\n\tAF_CHAOS                        = 5\n\tAF_DATAKIT                      = 9\n\tAF_DLI                          = 13\n\tAF_ECMA                         = 8\n\tAF_HYLINK                       = 15\n\tAF_IMPLINK                      = 3\n\tAF_INET                         = 2\n\tAF_INET6                        = 19\n\tAF_INTF                         = 20\n\tAF_IUCV                         = 17\n\tAF_LAT                          = 14\n\tAF_LINK                         = 18\n\tAF_LOCAL                        = AF_UNIX // AF_LOCAL is an alias for AF_UNIX\n\tAF_MAX                          = 30\n\tAF_NBS                          = 7\n\tAF_NDD                          = 23\n\tAF_NETWARE                      = 22\n\tAF_NS                           = 6\n\tAF_PUP                          = 4\n\tAF_RIF                          = 21\n\tAF_ROUTE                        = 20\n\tAF_SNA                          = 11\n\tAF_UNIX                         = 1\n\tAF_UNSPEC                       = 0\n\tIBMTCP_IMAGE                    = 1\n\tMSG_ACK_EXPECTED                = 0x10\n\tMSG_ACK_GEN                     = 0x40\n\tMSG_ACK_TIMEOUT                 = 0x20\n\tMSG_CONNTERM                    = 0x80\n\tMSG_CTRUNC                      = 0x20\n\tMSG_DONTROUTE                   = 0x4\n\tMSG_EOF                         = 0x8000\n\tMSG_EOR                         = 0x8\n\tMSG_MAXIOVLEN                   = 16\n\tMSG_NONBLOCK                    = 0x4000\n\tMSG_OOB                         = 0x1\n\tMSG_PEEK                        = 0x2\n\tMSG_TRUNC                       = 0x10\n\tMSG_WAITALL                     = 0x40\n\tPRIO_PROCESS                    = 1\n\tPRIO_PGRP                       = 2\n\tPRIO_USER                       = 3\n\tRLIMIT_CPU                      = 0\n\tRLIMIT_FSIZE                    = 1\n\tRLIMIT_DATA                     = 2\n\tRLIMIT_STACK                    = 3\n\tRLIMIT_CORE                     = 4\n\tRLIMIT_AS                       = 5\n\tRLIMIT_NOFILE                   = 6\n\tRLIMIT_MEMLIMIT                 = 7\n\tRLIMIT_MEMLOCK                  = 0x8\n\tRLIM_INFINITY                   = 2147483647\n\tSCHED_FIFO                      = 0x2\n\tSCM_CREDENTIALS                 = 0x2\n\tSCM_RIGHTS                      = 0x01\n\tSF_CLOSE                        = 0x00000002\n\tSF_REUSE                        = 0x00000001\n\tSHM_RND                         = 0x2\n\tSHM_RDONLY                      = 0x1\n\tSHMLBA                          = 0x1000\n\tIPC_STAT                        = 0x3\n\tIPC_SET                         = 0x2\n\tIPC_RMID                        = 0x1\n\tIPC_PRIVATE                     = 0x0\n\tIPC_CREAT                       = 0x1000000\n\t__IPC_MEGA                      = 0x4000000\n\t__IPC_SHAREAS                   = 0x20000000\n\t__IPC_BELOWBAR                  = 0x10000000\n\tIPC_EXCL                        = 0x2000000\n\t__IPC_GIGA                      = 0x8000000\n\tSHUT_RD                         = 0\n\tSHUT_RDWR                       = 2\n\tSHUT_WR                         = 1\n\tSOCK_CLOEXEC                    = 0x00001000\n\tSOCK_CONN_DGRAM                 = 6\n\tSOCK_DGRAM                      = 2\n\tSOCK_NONBLOCK                   = 0x800\n\tSOCK_RAW                        = 3\n\tSOCK_RDM                        = 4\n\tSOCK_SEQPACKET                  = 5\n\tSOCK_STREAM                     = 1\n\tSOL_SOCKET                      = 0xffff\n\tSOMAXCONN                       = 10\n\tSO_ACCEPTCONN                   = 0x0002\n\tSO_ACCEPTECONNABORTED           = 0x0006\n\tSO_ACKNOW                       = 0x7700\n\tSO_BROADCAST                    = 0x0020\n\tSO_BULKMODE                     = 0x8000\n\tSO_CKSUMRECV                    = 0x0800\n\tSO_CLOSE                        = 0x01\n\tSO_CLUSTERCONNTYPE              = 0x00004001\n\tSO_CLUSTERCONNTYPE_INTERNAL     = 8\n\tSO_CLUSTERCONNTYPE_NOCONN       = 0\n\tSO_CLUSTERCONNTYPE_NONE         = 1\n\tSO_CLUSTERCONNTYPE_SAME_CLUSTER = 2\n\tSO_CLUSTERCONNTYPE_SAME_IMAGE   = 4\n\tSO_DEBUG                        = 0x0001\n\tSO_DONTROUTE                    = 0x0010\n\tSO_ERROR                        = 0x1007\n\tSO_IGNOREINCOMINGPUSH           = 0x1\n\tSO_IGNORESOURCEVIPA             = 0x0002\n\tSO_KEEPALIVE                    = 0x0008\n\tSO_LINGER                       = 0x0080\n\tSO_NONBLOCKLOCAL                = 0x8001\n\tSO_NOREUSEADDR                  = 0x1000\n\tSO_OOBINLINE                    = 0x0100\n\tSO_OPTACK                       = 0x8004\n\tSO_OPTMSS                       = 0x8003\n\tSO_RCVBUF                       = 0x1002\n\tSO_RCVLOWAT                     = 0x1004\n\tSO_RCVTIMEO                     = 0x1006\n\tSO_REUSEADDR                    = 0x0004\n\tSO_REUSEPORT                    = 0x0200\n\tSO_SECINFO                      = 0x00004002\n\tSO_SET                          = 0x0200\n\tSO_SNDBUF                       = 0x1001\n\tSO_SNDLOWAT                     = 0x1003\n\tSO_SNDTIMEO                     = 0x1005\n\tSO_TYPE                         = 0x1008\n\tSO_UNSET                        = 0x0400\n\tSO_USELOOPBACK                  = 0x0040\n\tSO_USE_IFBUFS                   = 0x0400\n\tS_ISUID                         = 0x0800\n\tS_ISGID                         = 0x0400\n\tS_ISVTX                         = 0x0200\n\tS_IRUSR                         = 0x0100\n\tS_IWUSR                         = 0x0080\n\tS_IXUSR                         = 0x0040\n\tS_IRWXU                         = 0x01C0\n\tS_IRGRP                         = 0x0020\n\tS_IWGRP                         = 0x0010\n\tS_IXGRP                         = 0x0008\n\tS_IRWXG                         = 0x0038\n\tS_IROTH                         = 0x0004\n\tS_IWOTH                         = 0x0002\n\tS_IXOTH                         = 0x0001\n\tS_IRWXO                         = 0x0007\n\tS_IREAD                         = S_IRUSR\n\tS_IWRITE                        = S_IWUSR\n\tS_IEXEC                         = S_IXUSR\n\tS_IFDIR                         = 0x01000000\n\tS_IFCHR                         = 0x02000000\n\tS_IFREG                         = 0x03000000\n\tS_IFFIFO                        = 0x04000000\n\tS_IFIFO                         = 0x04000000\n\tS_IFLNK                         = 0x05000000\n\tS_IFBLK                         = 0x06000000\n\tS_IFSOCK                        = 0x07000000\n\tS_IFVMEXTL                      = 0xFE000000\n\tS_IFVMEXTL_EXEC                 = 0x00010000\n\tS_IFVMEXTL_DATA                 = 0x00020000\n\tS_IFVMEXTL_MEL                  = 0x00030000\n\tS_IFEXTL                        = 0x00000001\n\tS_IFPROGCTL                     = 0x00000002\n\tS_IFAPFCTL                      = 0x00000004\n\tS_IFNOSHARE                     = 0x00000008\n\tS_IFSHARELIB                    = 0x00000010\n\tS_IFMT                          = 0xFF000000\n\tS_IFMST                         = 0x00FF0000\n\tTCP_KEEPALIVE                   = 0x8\n\tTCP_NODELAY                     = 0x1\n\tTIOCGWINSZ                      = 0x4008a368\n\tTIOCSWINSZ                      = 0x8008a367\n\tTIOCSBRK                        = 0x2000a77b\n\tTIOCCBRK                        = 0x2000a77a\n\tTIOCSTI                         = 0x8001a772\n\tTIOCGPGRP                       = 0x4004a777 // _IOR(167, 119, int)\n\tTCSANOW                         = 0\n\tTCSETS                          = 0 // equivalent to TCSANOW for tcsetattr\n\tTCSADRAIN                       = 1\n\tTCSETSW                         = 1 // equivalent to TCSADRAIN for tcsetattr\n\tTCSAFLUSH                       = 2\n\tTCSETSF                         = 2 // equivalent to TCSAFLUSH for tcsetattr\n\tTCGETS                          = 3 // not defined in ioctl.h -- zos golang only\n\tTCIFLUSH                        = 0\n\tTCOFLUSH                        = 1\n\tTCIOFLUSH                       = 2\n\tTCOOFF                          = 0\n\tTCOON                           = 1\n\tTCIOFF                          = 2\n\tTCION                           = 3\n\tTIOCSPGRP                       = 0x8004a776\n\tTIOCNOTTY                       = 0x2000a771\n\tTIOCEXCL                        = 0x2000a70d\n\tTIOCNXCL                        = 0x2000a70e\n\tTIOCGETD                        = 0x4004a700\n\tTIOCSETD                        = 0x8004a701\n\tTIOCPKT                         = 0x8004a770\n\tTIOCSTOP                        = 0x2000a76f\n\tTIOCSTART                       = 0x2000a76e\n\tTIOCUCNTL                       = 0x8004a766\n\tTIOCREMOTE                      = 0x8004a769\n\tTIOCMGET                        = 0x4004a76a\n\tTIOCMSET                        = 0x8004a76d\n\tTIOCMBIC                        = 0x8004a76b\n\tTIOCMBIS                        = 0x8004a76c\n\tVINTR                           = 0\n\tVQUIT                           = 1\n\tVERASE                          = 2\n\tVKILL                           = 3\n\tVEOF                            = 4\n\tVEOL                            = 5\n\tVMIN                            = 6\n\tVSTART                          = 7\n\tVSTOP                           = 8\n\tVSUSP                           = 9\n\tVTIME                           = 10\n\tWCONTINUED                      = 0x4\n\tWEXITED                         = 0x8\n\tWNOHANG                         = 0x1\n\tWNOWAIT                         = 0x20\n\tWSTOPPED                        = 0x10\n\tWUNTRACED                       = 0x2\n\t_BPX_SWAP                       = 1\n\t_BPX_NONSWAP                    = 2\n\tMCL_CURRENT                     = 1  // for Linux compatibility -- no zos semantics\n\tMCL_FUTURE                      = 2  // for Linux compatibility -- no zos semantics\n\tMCL_ONFAULT                     = 3  // for Linux compatibility -- no zos semantics\n\tMADV_NORMAL                     = 0  // for Linux compatibility -- no zos semantics\n\tMADV_RANDOM                     = 1  // for Linux compatibility -- no zos semantics\n\tMADV_SEQUENTIAL                 = 2  // for Linux compatibility -- no zos semantics\n\tMADV_WILLNEED                   = 3  // for Linux compatibility -- no zos semantics\n\tMADV_REMOVE                     = 4  // for Linux compatibility -- no zos semantics\n\tMADV_DONTFORK                   = 5  // for Linux compatibility -- no zos semantics\n\tMADV_DOFORK                     = 6  // for Linux compatibility -- no zos semantics\n\tMADV_HWPOISON                   = 7  // for Linux compatibility -- no zos semantics\n\tMADV_MERGEABLE                  = 8  // for Linux compatibility -- no zos semantics\n\tMADV_UNMERGEABLE                = 9  // for Linux compatibility -- no zos semantics\n\tMADV_SOFT_OFFLINE               = 10 // for Linux compatibility -- no zos semantics\n\tMADV_HUGEPAGE                   = 11 // for Linux compatibility -- no zos semantics\n\tMADV_NOHUGEPAGE                 = 12 // for Linux compatibility -- no zos semantics\n\tMADV_DONTDUMP                   = 13 // for Linux compatibility -- no zos semantics\n\tMADV_DODUMP                     = 14 // for Linux compatibility -- no zos semantics\n\tMADV_FREE                       = 15 // for Linux compatibility -- no zos semantics\n\tMADV_WIPEONFORK                 = 16 // for Linux compatibility -- no zos semantics\n\tMADV_KEEPONFORK                 = 17 // for Linux compatibility -- no zos semantics\n\tAT_SYMLINK_FOLLOW               = 0x400\n\tAT_SYMLINK_NOFOLLOW             = 0x100\n\tXATTR_CREATE                    = 0x1\n\tXATTR_REPLACE                   = 0x2\n\tP_PID                           = 0\n\tP_PGID                          = 1\n\tP_ALL                           = 2\n\tPR_SET_NAME                     = 15\n\tPR_GET_NAME                     = 16\n\tPR_SET_NO_NEW_PRIVS             = 38\n\tPR_GET_NO_NEW_PRIVS             = 39\n\tPR_SET_DUMPABLE                 = 4\n\tPR_GET_DUMPABLE                 = 3\n\tPR_SET_PDEATHSIG                = 1\n\tPR_GET_PDEATHSIG                = 2\n\tPR_SET_CHILD_SUBREAPER          = 36\n\tPR_GET_CHILD_SUBREAPER          = 37\n\tAT_FDCWD                        = -100\n\tAT_EACCESS                      = 0x200\n\tAT_EMPTY_PATH                   = 0x1000\n\tAT_REMOVEDIR                    = 0x200\n\tRENAME_NOREPLACE                = 1 << 0\n\tST_RDONLY                       = 1\n\tST_NOSUID                       = 2\n)\n\nconst (\n\tEDOM               = Errno(1)\n\tERANGE             = Errno(2)\n\tEACCES             = Errno(111)\n\tEAGAIN             = Errno(112)\n\tEBADF              = Errno(113)\n\tEBUSY              = Errno(114)\n\tECHILD             = Errno(115)\n\tEDEADLK            = Errno(116)\n\tEEXIST             = Errno(117)\n\tEFAULT             = Errno(118)\n\tEFBIG              = Errno(119)\n\tEINTR              = Errno(120)\n\tEINVAL             = Errno(121)\n\tEIO                = Errno(122)\n\tEISDIR             = Errno(123)\n\tEMFILE             = Errno(124)\n\tEMLINK             = Errno(125)\n\tENAMETOOLONG       = Errno(126)\n\tENFILE             = Errno(127)\n\tENOATTR            = Errno(265)\n\tENODEV             = Errno(128)\n\tENOENT             = Errno(129)\n\tENOEXEC            = Errno(130)\n\tENOLCK             = Errno(131)\n\tENOMEM             = Errno(132)\n\tENOSPC             = Errno(133)\n\tENOSYS             = Errno(134)\n\tENOTDIR            = Errno(135)\n\tENOTEMPTY          = Errno(136)\n\tENOTTY             = Errno(137)\n\tENXIO              = Errno(138)\n\tEPERM              = Errno(139)\n\tEPIPE              = Errno(140)\n\tEROFS              = Errno(141)\n\tESPIPE             = Errno(142)\n\tESRCH              = Errno(143)\n\tEXDEV              = Errno(144)\n\tE2BIG              = Errno(145)\n\tELOOP              = Errno(146)\n\tEILSEQ             = Errno(147)\n\tENODATA            = Errno(148)\n\tEOVERFLOW          = Errno(149)\n\tEMVSNOTUP          = Errno(150)\n\tECMSSTORAGE        = Errno(151)\n\tEMVSDYNALC         = Errno(151)\n\tEMVSCVAF           = Errno(152)\n\tEMVSCATLG          = Errno(153)\n\tECMSINITIAL        = Errno(156)\n\tEMVSINITIAL        = Errno(156)\n\tECMSERR            = Errno(157)\n\tEMVSERR            = Errno(157)\n\tEMVSPARM           = Errno(158)\n\tECMSPFSFILE        = Errno(159)\n\tEMVSPFSFILE        = Errno(159)\n\tEMVSBADCHAR        = Errno(160)\n\tECMSPFSPERM        = Errno(162)\n\tEMVSPFSPERM        = Errno(162)\n\tEMVSSAFEXTRERR     = Errno(163)\n\tEMVSSAF2ERR        = Errno(164)\n\tEMVSTODNOTSET      = Errno(165)\n\tEMVSPATHOPTS       = Errno(166)\n\tEMVSNORTL          = Errno(167)\n\tEMVSEXPIRE         = Errno(168)\n\tEMVSPASSWORD       = Errno(169)\n\tEMVSWLMERROR       = Errno(170)\n\tEMVSCPLERROR       = Errno(171)\n\tEMVSARMERROR       = Errno(172)\n\tELENOFORK          = Errno(200)\n\tELEMSGERR          = Errno(201)\n\tEFPMASKINV         = Errno(202)\n\tEFPMODEINV         = Errno(203)\n\tEBUFLEN            = Errno(227)\n\tEEXTLINK           = Errno(228)\n\tENODD              = Errno(229)\n\tECMSESMERR         = Errno(230)\n\tECPERR             = Errno(231)\n\tELEMULTITHREAD     = Errno(232)\n\tELEFENCE           = Errno(244)\n\tEBADDATA           = Errno(245)\n\tEUNKNOWN           = Errno(246)\n\tENOTSUP            = Errno(247)\n\tEBADNAME           = Errno(248)\n\tENOTSAFE           = Errno(249)\n\tELEMULTITHREADFORK = Errno(257)\n\tECUNNOENV          = Errno(258)\n\tECUNNOCONV         = Errno(259)\n\tECUNNOTALIGNED     = Errno(260)\n\tECUNERR            = Errno(262)\n\tEIBMBADCALL        = Errno(1000)\n\tEIBMBADPARM        = Errno(1001)\n\tEIBMSOCKOUTOFRANGE = Errno(1002)\n\tEIBMSOCKINUSE      = Errno(1003)\n\tEIBMIUCVERR        = Errno(1004)\n\tEOFFLOADboxERROR   = Errno(1005)\n\tEOFFLOADboxRESTART = Errno(1006)\n\tEOFFLOADboxDOWN    = Errno(1007)\n\tEIBMCONFLICT       = Errno(1008)\n\tEIBMCANCELLED      = Errno(1009)\n\tEIBMBADTCPNAME     = Errno(1011)\n\tENOTBLK            = Errno(1100)\n\tETXTBSY            = Errno(1101)\n\tEWOULDBLOCK        = Errno(1102)\n\tEINPROGRESS        = Errno(1103)\n\tEALREADY           = Errno(1104)\n\tENOTSOCK           = Errno(1105)\n\tEDESTADDRREQ       = Errno(1106)\n\tEMSGSIZE           = Errno(1107)\n\tEPROTOTYPE         = Errno(1108)\n\tENOPROTOOPT        = Errno(1109)\n\tEPROTONOSUPPORT    = Errno(1110)\n\tESOCKTNOSUPPORT    = Errno(1111)\n\tEOPNOTSUPP         = Errno(1112)\n\tEPFNOSUPPORT       = Errno(1113)\n\tEAFNOSUPPORT       = Errno(1114)\n\tEADDRINUSE         = Errno(1115)\n\tEADDRNOTAVAIL      = Errno(1116)\n\tENETDOWN           = Errno(1117)\n\tENETUNREACH        = Errno(1118)\n\tENETRESET          = Errno(1119)\n\tECONNABORTED       = Errno(1120)\n\tECONNRESET         = Errno(1121)\n\tENOBUFS            = Errno(1122)\n\tEISCONN            = Errno(1123)\n\tENOTCONN           = Errno(1124)\n\tESHUTDOWN          = Errno(1125)\n\tETOOMANYREFS       = Errno(1126)\n\tETIMEDOUT          = Errno(1127)\n\tECONNREFUSED       = Errno(1128)\n\tEHOSTDOWN          = Errno(1129)\n\tEHOSTUNREACH       = Errno(1130)\n\tEPROCLIM           = Errno(1131)\n\tEUSERS             = Errno(1132)\n\tEDQUOT             = Errno(1133)\n\tESTALE             = Errno(1134)\n\tEREMOTE            = Errno(1135)\n\tENOSTR             = Errno(1136)\n\tETIME              = Errno(1137)\n\tENOSR              = Errno(1138)\n\tENOMSG             = Errno(1139)\n\tEBADMSG            = Errno(1140)\n\tEIDRM              = Errno(1141)\n\tENONET             = Errno(1142)\n\tERREMOTE           = Errno(1143)\n\tENOLINK            = Errno(1144)\n\tEADV               = Errno(1145)\n\tESRMNT             = Errno(1146)\n\tECOMM              = Errno(1147)\n\tEPROTO             = Errno(1148)\n\tEMULTIHOP          = Errno(1149)\n\tEDOTDOT            = Errno(1150)\n\tEREMCHG            = Errno(1151)\n\tECANCELED          = Errno(1152)\n\tEINTRNODATA        = Errno(1159)\n\tENOREUSE           = Errno(1160)\n\tENOMOVE            = Errno(1161)\n)\n\n// Signals\nconst (\n\tSIGHUP    = Signal(1)\n\tSIGINT    = Signal(2)\n\tSIGABRT   = Signal(3)\n\tSIGILL    = Signal(4)\n\tSIGPOLL   = Signal(5)\n\tSIGURG    = Signal(6)\n\tSIGSTOP   = Signal(7)\n\tSIGFPE    = Signal(8)\n\tSIGKILL   = Signal(9)\n\tSIGBUS    = Signal(10)\n\tSIGSEGV   = Signal(11)\n\tSIGSYS    = Signal(12)\n\tSIGPIPE   = Signal(13)\n\tSIGALRM   = Signal(14)\n\tSIGTERM   = Signal(15)\n\tSIGUSR1   = Signal(16)\n\tSIGUSR2   = Signal(17)\n\tSIGABND   = Signal(18)\n\tSIGCONT   = Signal(19)\n\tSIGCHLD   = Signal(20)\n\tSIGTTIN   = Signal(21)\n\tSIGTTOU   = Signal(22)\n\tSIGIO     = Signal(23)\n\tSIGQUIT   = Signal(24)\n\tSIGTSTP   = Signal(25)\n\tSIGTRAP   = Signal(26)\n\tSIGIOERR  = Signal(27)\n\tSIGWINCH  = Signal(28)\n\tSIGXCPU   = Signal(29)\n\tSIGXFSZ   = Signal(30)\n\tSIGVTALRM = Signal(31)\n\tSIGPROF   = Signal(32)\n\tSIGDANGER = Signal(33)\n\tSIGTHSTOP = Signal(34)\n\tSIGTHCONT = Signal(35)\n\tSIGTRACE  = Signal(37)\n\tSIGDCE    = Signal(38)\n\tSIGDUMP   = Signal(39)\n)\n\n// Error table\nvar errorList = [...]struct {\n\tnum  Errno\n\tname string\n\tdesc string\n}{\n\t{1, \"EDC5001I\", \"A domain error occurred.\"},\n\t{2, \"EDC5002I\", \"A range error occurred.\"},\n\t{111, \"EDC5111I\", \"Permission denied.\"},\n\t{112, \"EDC5112I\", \"Resource temporarily unavailable.\"},\n\t{113, \"EDC5113I\", \"Bad file descriptor.\"},\n\t{114, \"EDC5114I\", \"Resource busy.\"},\n\t{115, \"EDC5115I\", \"No child processes.\"},\n\t{116, \"EDC5116I\", \"Resource deadlock avoided.\"},\n\t{117, \"EDC5117I\", \"File exists.\"},\n\t{118, \"EDC5118I\", \"Incorrect address.\"},\n\t{119, \"EDC5119I\", \"File too large.\"},\n\t{120, \"EDC5120I\", \"Interrupted function call.\"},\n\t{121, \"EDC5121I\", \"Invalid argument.\"},\n\t{122, \"EDC5122I\", \"Input/output error.\"},\n\t{123, \"EDC5123I\", \"Is a directory.\"},\n\t{124, \"EDC5124I\", \"Too many open files.\"},\n\t{125, \"EDC5125I\", \"Too many links.\"},\n\t{126, \"EDC5126I\", \"Filename too long.\"},\n\t{127, \"EDC5127I\", \"Too many open files in system.\"},\n\t{128, \"EDC5128I\", \"No such device.\"},\n\t{129, \"EDC5129I\", \"No such file or directory.\"},\n\t{130, \"EDC5130I\", \"Exec format error.\"},\n\t{131, \"EDC5131I\", \"No locks available.\"},\n\t{132, \"EDC5132I\", \"Not enough memory.\"},\n\t{133, \"EDC5133I\", \"No space left on device.\"},\n\t{134, \"EDC5134I\", \"Function not implemented.\"},\n\t{135, \"EDC5135I\", \"Not a directory.\"},\n\t{136, \"EDC5136I\", \"Directory not empty.\"},\n\t{137, \"EDC5137I\", \"Inappropriate I/O control operation.\"},\n\t{138, \"EDC5138I\", \"No such device or address.\"},\n\t{139, \"EDC5139I\", \"Operation not permitted.\"},\n\t{140, \"EDC5140I\", \"Broken pipe.\"},\n\t{141, \"EDC5141I\", \"Read-only file system.\"},\n\t{142, \"EDC5142I\", \"Invalid seek.\"},\n\t{143, \"EDC5143I\", \"No such process.\"},\n\t{144, \"EDC5144I\", \"Improper link.\"},\n\t{145, \"EDC5145I\", \"The parameter list is too long, or the message to receive was too large for the buffer.\"},\n\t{146, \"EDC5146I\", \"Too many levels of symbolic links.\"},\n\t{147, \"EDC5147I\", \"Illegal byte sequence.\"},\n\t{148, \"EDC5148I\", \"The named attribute or data not available.\"},\n\t{149, \"EDC5149I\", \"Value Overflow Error.\"},\n\t{150, \"EDC5150I\", \"UNIX System Services is not active.\"},\n\t{151, \"EDC5151I\", \"Dynamic allocation error.\"},\n\t{152, \"EDC5152I\", \"Common VTOC access facility (CVAF) error.\"},\n\t{153, \"EDC5153I\", \"Catalog obtain error.\"},\n\t{156, \"EDC5156I\", \"Process initialization error.\"},\n\t{157, \"EDC5157I\", \"An internal error has occurred.\"},\n\t{158, \"EDC5158I\", \"Bad parameters were passed to the service.\"},\n\t{159, \"EDC5159I\", \"The Physical File System encountered a permanent file error.\"},\n\t{160, \"EDC5160I\", \"Bad character in environment variable name.\"},\n\t{162, \"EDC5162I\", \"The Physical File System encountered a system error.\"},\n\t{163, \"EDC5163I\", \"SAF/RACF extract error.\"},\n\t{164, \"EDC5164I\", \"SAF/RACF error.\"},\n\t{165, \"EDC5165I\", \"System TOD clock not set.\"},\n\t{166, \"EDC5166I\", \"Access mode argument on function call conflicts with PATHOPTS parameter on JCL DD statement.\"},\n\t{167, \"EDC5167I\", \"Access to the UNIX System Services version of the C RTL is denied.\"},\n\t{168, \"EDC5168I\", \"Password has expired.\"},\n\t{169, \"EDC5169I\", \"Password is invalid.\"},\n\t{170, \"EDC5170I\", \"An error was encountered with WLM.\"},\n\t{171, \"EDC5171I\", \"An error was encountered with CPL.\"},\n\t{172, \"EDC5172I\", \"An error was encountered with Application Response Measurement (ARM) component.\"},\n\t{200, \"EDC5200I\", \"The application contains a Language Environment member language that cannot tolerate a fork().\"},\n\t{201, \"EDC5201I\", \"The Language Environment message file was not found in the hierarchical file system.\"},\n\t{202, \"EDC5202E\", \"DLL facilities are not supported under SPC environment.\"},\n\t{203, \"EDC5203E\", \"DLL facilities are not supported under POSIX environment.\"},\n\t{227, \"EDC5227I\", \"Buffer is not long enough to contain a path definition\"},\n\t{228, \"EDC5228I\", \"The file referred to is an external link\"},\n\t{229, \"EDC5229I\", \"No path definition for ddname in effect\"},\n\t{230, \"EDC5230I\", \"ESM error.\"},\n\t{231, \"EDC5231I\", \"CP or the external security manager had an error\"},\n\t{232, \"EDC5232I\", \"The function failed because it was invoked from a multithread environment.\"},\n\t{244, \"EDC5244I\", \"The program, module or DLL is not supported in this environment.\"},\n\t{245, \"EDC5245I\", \"Data is not valid.\"},\n\t{246, \"EDC5246I\", \"Unknown system state.\"},\n\t{247, \"EDC5247I\", \"Operation not supported.\"},\n\t{248, \"EDC5248I\", \"The object name specified is not correct.\"},\n\t{249, \"EDC5249I\", \"The function is not allowed.\"},\n\t{257, \"EDC5257I\", \"Function cannot be called in the child process of a fork() from a multithreaded process until exec() is called.\"},\n\t{258, \"EDC5258I\", \"A CUN_RS_NO_UNI_ENV error was issued by Unicode Services.\"},\n\t{259, \"EDC5259I\", \"A CUN_RS_NO_CONVERSION error was issued by Unicode Services.\"},\n\t{260, \"EDC5260I\", \"A CUN_RS_TABLE_NOT_ALIGNED error was issued by Unicode Services.\"},\n\t{262, \"EDC5262I\", \"An iconv() function encountered an unexpected error while using Unicode Services.\"},\n\t{265, \"EDC5265I\", \"The named attribute not available.\"},\n\t{1000, \"EDC8000I\", \"A bad socket-call constant was found in the IUCV header.\"},\n\t{1001, \"EDC8001I\", \"An error was found in the IUCV header.\"},\n\t{1002, \"EDC8002I\", \"A socket descriptor is out of range.\"},\n\t{1003, \"EDC8003I\", \"A socket descriptor is in use.\"},\n\t{1004, \"EDC8004I\", \"Request failed because of an IUCV error.\"},\n\t{1005, \"EDC8005I\", \"Offload box error.\"},\n\t{1006, \"EDC8006I\", \"Offload box restarted.\"},\n\t{1007, \"EDC8007I\", \"Offload box down.\"},\n\t{1008, \"EDC8008I\", \"Already a conflicting call outstanding on socket.\"},\n\t{1009, \"EDC8009I\", \"Request cancelled using a SOCKcallCANCEL request.\"},\n\t{1011, \"EDC8011I\", \"A name of a PFS was specified that either is not configured or is not a Sockets PFS.\"},\n\t{1100, \"EDC8100I\", \"Block device required.\"},\n\t{1101, \"EDC8101I\", \"Text file busy.\"},\n\t{1102, \"EDC8102I\", \"Operation would block.\"},\n\t{1103, \"EDC8103I\", \"Operation now in progress.\"},\n\t{1104, \"EDC8104I\", \"Connection already in progress.\"},\n\t{1105, \"EDC8105I\", \"Socket operation on non-socket.\"},\n\t{1106, \"EDC8106I\", \"Destination address required.\"},\n\t{1107, \"EDC8107I\", \"Message too long.\"},\n\t{1108, \"EDC8108I\", \"Protocol wrong type for socket.\"},\n\t{1109, \"EDC8109I\", \"Protocol not available.\"},\n\t{1110, \"EDC8110I\", \"Protocol not supported.\"},\n\t{1111, \"EDC8111I\", \"Socket type not supported.\"},\n\t{1112, \"EDC8112I\", \"Operation not supported on socket.\"},\n\t{1113, \"EDC8113I\", \"Protocol family not supported.\"},\n\t{1114, \"EDC8114I\", \"Address family not supported.\"},\n\t{1115, \"EDC8115I\", \"Address already in use.\"},\n\t{1116, \"EDC8116I\", \"Address not available.\"},\n\t{1117, \"EDC8117I\", \"Network is down.\"},\n\t{1118, \"EDC8118I\", \"Network is unreachable.\"},\n\t{1119, \"EDC8119I\", \"Network dropped connection on reset.\"},\n\t{1120, \"EDC8120I\", \"Connection ended abnormally.\"},\n\t{1121, \"EDC8121I\", \"Connection reset.\"},\n\t{1122, \"EDC8122I\", \"No buffer space available.\"},\n\t{1123, \"EDC8123I\", \"Socket already connected.\"},\n\t{1124, \"EDC8124I\", \"Socket not connected.\"},\n\t{1125, \"EDC8125I\", \"Can't send after socket shutdown.\"},\n\t{1126, \"EDC8126I\", \"Too many references; can't splice.\"},\n\t{1127, \"EDC8127I\", \"Connection timed out.\"},\n\t{1128, \"EDC8128I\", \"Connection refused.\"},\n\t{1129, \"EDC8129I\", \"Host is not available.\"},\n\t{1130, \"EDC8130I\", \"Host cannot be reached.\"},\n\t{1131, \"EDC8131I\", \"Too many processes.\"},\n\t{1132, \"EDC8132I\", \"Too many users.\"},\n\t{1133, \"EDC8133I\", \"Disk quota exceeded.\"},\n\t{1134, \"EDC8134I\", \"Stale file handle.\"},\n\t{1135, \"\", \"\"},\n\t{1136, \"EDC8136I\", \"File is not a STREAM.\"},\n\t{1137, \"EDC8137I\", \"STREAMS ioctl() timeout.\"},\n\t{1138, \"EDC8138I\", \"No STREAMS resources.\"},\n\t{1139, \"EDC8139I\", \"The message identified by set_id and msg_id is not in the message catalog.\"},\n\t{1140, \"EDC8140I\", \"Bad message.\"},\n\t{1141, \"EDC8141I\", \"Identifier removed.\"},\n\t{1142, \"\", \"\"},\n\t{1143, \"\", \"\"},\n\t{1144, \"EDC8144I\", \"The link has been severed.\"},\n\t{1145, \"\", \"\"},\n\t{1146, \"\", \"\"},\n\t{1147, \"\", \"\"},\n\t{1148, \"EDC8148I\", \"Protocol error.\"},\n\t{1149, \"EDC8149I\", \"Multihop not allowed.\"},\n\t{1150, \"\", \"\"},\n\t{1151, \"\", \"\"},\n\t{1152, \"EDC8152I\", \"The asynchronous I/O request has been canceled.\"},\n\t{1159, \"EDC8159I\", \"Function call was interrupted before any data was received.\"},\n\t{1160, \"EDC8160I\", \"Socket reuse is not supported.\"},\n\t{1161, \"EDC8161I\", \"The file system cannot currently be moved.\"},\n}\n\n// Signal table\nvar signalList = [...]struct {\n\tnum  Signal\n\tname string\n\tdesc string\n}{\n\t{1, \"SIGHUP\", \"hangup\"},\n\t{2, \"SIGINT\", \"interrupt\"},\n\t{3, \"SIGABT\", \"aborted\"},\n\t{4, \"SIGILL\", \"illegal instruction\"},\n\t{5, \"SIGPOLL\", \"pollable event\"},\n\t{6, \"SIGURG\", \"urgent I/O condition\"},\n\t{7, \"SIGSTOP\", \"stop process\"},\n\t{8, \"SIGFPE\", \"floating point exception\"},\n\t{9, \"SIGKILL\", \"killed\"},\n\t{10, \"SIGBUS\", \"bus error\"},\n\t{11, \"SIGSEGV\", \"segmentation fault\"},\n\t{12, \"SIGSYS\", \"bad argument to routine\"},\n\t{13, \"SIGPIPE\", \"broken pipe\"},\n\t{14, \"SIGALRM\", \"alarm clock\"},\n\t{15, \"SIGTERM\", \"terminated\"},\n\t{16, \"SIGUSR1\", \"user defined signal 1\"},\n\t{17, \"SIGUSR2\", \"user defined signal 2\"},\n\t{18, \"SIGABND\", \"abend\"},\n\t{19, \"SIGCONT\", \"continued\"},\n\t{20, \"SIGCHLD\", \"child exited\"},\n\t{21, \"SIGTTIN\", \"stopped (tty input)\"},\n\t{22, \"SIGTTOU\", \"stopped (tty output)\"},\n\t{23, \"SIGIO\", \"I/O possible\"},\n\t{24, \"SIGQUIT\", \"quit\"},\n\t{25, \"SIGTSTP\", \"stopped\"},\n\t{26, \"SIGTRAP\", \"trace/breakpoint trap\"},\n\t{27, \"SIGIOER\", \"I/O error\"},\n\t{28, \"SIGWINCH\", \"window changed\"},\n\t{29, \"SIGXCPU\", \"CPU time limit exceeded\"},\n\t{30, \"SIGXFSZ\", \"file size limit exceeded\"},\n\t{31, \"SIGVTALRM\", \"virtual timer expired\"},\n\t{32, \"SIGPROF\", \"profiling timer expired\"},\n\t{33, \"SIGDANGER\", \"danger\"},\n\t{34, \"SIGTHSTOP\", \"stop thread\"},\n\t{35, \"SIGTHCONT\", \"continue thread\"},\n\t{37, \"SIGTRACE\", \"trace\"},\n\t{38, \"\", \"DCE\"},\n\t{39, \"SIGDUMP\", \"dump\"},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_armnn_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(\"arm\", \"arm64\"). DO NOT EDIT.\n\n//go:build linux && (arm || arm64)\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegsArm is the registers used by arm binaries.\ntype PtraceRegsArm struct {\n\tUregs [18]uint32\n}\n\n// PtraceGetRegsArm fetches the registers used by arm binaries.\nfunc PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsArm sets the registers used by arm binaries.\nfunc PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n\n// PtraceRegsArm64 is the registers used by arm64 binaries.\ntype PtraceRegsArm64 struct {\n\tRegs   [31]uint64\n\tSp     uint64\n\tPc     uint64\n\tPstate uint64\n}\n\n// PtraceGetRegsArm64 fetches the registers used by arm64 binaries.\nfunc PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsArm64 sets the registers used by arm64 binaries.\nfunc PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_linux_arm64.go",
    "content": "// Code generated by linux/mkall.go generatePtraceRegSet(\"arm64\"). DO NOT EDIT.\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceGetRegSetArm64 fetches the registers used by arm64 binaries.\nfunc PtraceGetRegSetArm64(pid, addr int, regsout *PtraceRegsArm64) error {\n\tiovec := Iovec{(*byte)(unsafe.Pointer(regsout)), uint64(unsafe.Sizeof(*regsout))}\n\treturn ptracePtr(PTRACE_GETREGSET, pid, uintptr(addr), unsafe.Pointer(&iovec))\n}\n\n// PtraceSetRegSetArm64 sets the registers used by arm64 binaries.\nfunc PtraceSetRegSetArm64(pid, addr int, regs *PtraceRegsArm64) error {\n\tiovec := Iovec{(*byte)(unsafe.Pointer(regs)), uint64(unsafe.Sizeof(*regs))}\n\treturn ptracePtr(PTRACE_SETREGSET, pid, uintptr(addr), unsafe.Pointer(&iovec))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_mipsnn_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(\"mips\", \"mips64\"). DO NOT EDIT.\n\n//go:build linux && (mips || mips64)\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegsMips is the registers used by mips binaries.\ntype PtraceRegsMips struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMips fetches the registers used by mips binaries.\nfunc PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsMips sets the registers used by mips binaries.\nfunc PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n\n// PtraceRegsMips64 is the registers used by mips64 binaries.\ntype PtraceRegsMips64 struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMips64 fetches the registers used by mips64 binaries.\nfunc PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsMips64 sets the registers used by mips64 binaries.\nfunc PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_mipsnnle_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(\"mipsle\", \"mips64le\"). DO NOT EDIT.\n\n//go:build linux && (mipsle || mips64le)\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegsMipsle is the registers used by mipsle binaries.\ntype PtraceRegsMipsle struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMipsle fetches the registers used by mipsle binaries.\nfunc PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsMipsle sets the registers used by mipsle binaries.\nfunc PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n\n// PtraceRegsMips64le is the registers used by mips64le binaries.\ntype PtraceRegsMips64le struct {\n\tRegs     [32]uint64\n\tLo       uint64\n\tHi       uint64\n\tEpc      uint64\n\tBadvaddr uint64\n\tStatus   uint64\n\tCause    uint64\n}\n\n// PtraceGetRegsMips64le fetches the registers used by mips64le binaries.\nfunc PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsMips64le sets the registers used by mips64le binaries.\nfunc PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zptrace_x86_linux.go",
    "content": "// Code generated by linux/mkall.go generatePtracePair(\"386\", \"amd64\"). DO NOT EDIT.\n\n//go:build linux && (386 || amd64)\n\npackage unix\n\nimport \"unsafe\"\n\n// PtraceRegs386 is the registers used by 386 binaries.\ntype PtraceRegs386 struct {\n\tEbx      int32\n\tEcx      int32\n\tEdx      int32\n\tEsi      int32\n\tEdi      int32\n\tEbp      int32\n\tEax      int32\n\tXds      int32\n\tXes      int32\n\tXfs      int32\n\tXgs      int32\n\tOrig_eax int32\n\tEip      int32\n\tXcs      int32\n\tEflags   int32\n\tEsp      int32\n\tXss      int32\n}\n\n// PtraceGetRegs386 fetches the registers used by 386 binaries.\nfunc PtraceGetRegs386(pid int, regsout *PtraceRegs386) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegs386 sets the registers used by 386 binaries.\nfunc PtraceSetRegs386(pid int, regs *PtraceRegs386) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n\n// PtraceRegsAmd64 is the registers used by amd64 binaries.\ntype PtraceRegsAmd64 struct {\n\tR15      uint64\n\tR14      uint64\n\tR13      uint64\n\tR12      uint64\n\tRbp      uint64\n\tRbx      uint64\n\tR11      uint64\n\tR10      uint64\n\tR9       uint64\n\tR8       uint64\n\tRax      uint64\n\tRcx      uint64\n\tRdx      uint64\n\tRsi      uint64\n\tRdi      uint64\n\tOrig_rax uint64\n\tRip      uint64\n\tCs       uint64\n\tEflags   uint64\n\tRsp      uint64\n\tSs       uint64\n\tFs_base  uint64\n\tGs_base  uint64\n\tDs       uint64\n\tEs       uint64\n\tFs       uint64\n\tGs       uint64\n}\n\n// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries.\nfunc PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error {\n\treturn ptracePtr(PTRACE_GETREGS, pid, 0, unsafe.Pointer(regsout))\n}\n\n// PtraceSetRegsAmd64 sets the registers used by amd64 binaries.\nfunc PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error {\n\treturn ptracePtr(PTRACE_SETREGS, pid, 0, unsafe.Pointer(regs))\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsymaddr_zos_s390x.s",
    "content": "// go run mksyscall_zos_s390x.go -o_sysnum zsysnum_zos_s390x.go -o_syscall zsyscall_zos_s390x.go -i_syscall syscall_zos_s390x.go -o_asm zsymaddr_zos_s390x.s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build zos && s390x\n#include \"textflag.h\"\n\n//  provide the address of function variable to be fixed up.\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FlistxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Flistxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FremovexattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fremovexattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FgetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fgetxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FsetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fsetxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_accept4Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·accept4(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_RemovexattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Removexattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_Dup3Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Dup3(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_DirfdAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Dirfd(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollCreateAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollCreate(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollCreate1Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollCreate1(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollCtlAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollCtl(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollPwaitAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollPwait(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EpollWaitAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·EpollWait(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_EventfdAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Eventfd(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FaccessatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Faccessat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FchmodatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fchmodat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FchownatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fchownat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FdatasyncAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fdatasync(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_fstatatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·fstatat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LgetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Lgetxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LsetxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Lsetxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FstatfsAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Fstatfs(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FutimesAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Futimes(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_FutimesatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Futimesat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_GetrandomAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Getrandom(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_InotifyInitAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·InotifyInit(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_InotifyInit1Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·InotifyInit1(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_InotifyAddWatchAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·InotifyAddWatch(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_InotifyRmWatchAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·InotifyRmWatch(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_ListxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Listxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LlistxattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Llistxattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LremovexattrAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Lremovexattr(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LutimesAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Lutimes(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_StatfsAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Statfs(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_SyncfsAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Syncfs(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_UnshareAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Unshare(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_LinkatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Linkat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_MkdiratAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Mkdirat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_MknodatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Mknodat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_PivotRootAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·PivotRoot(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_PrctlAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Prctl(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_PrlimitAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Prlimit(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_RenameatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Renameat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_Renameat2Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Renameat2(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_SethostnameAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Sethostname(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_SetnsAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Setns(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_SymlinkatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Symlinkat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_UnlinkatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·Unlinkat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_openatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·openat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_openat2Addr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·openat2(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nTEXT ·get_utimensatAddr(SB), NOSPLIT|NOFRAME, $0-8\n\tMOVD $·utimensat(SB), R8\n\tMOVD R8, ret+0(FP)\n\tRET\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc.go",
    "content": "// go run mksyscall_aix_ppc.go -aix -tags aix,ppc syscall_aix.go syscall_aix_ppc.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build aix && ppc\n\npackage unix\n\n/*\n#include <stdint.h>\n#include <stddef.h>\nint utimes(uintptr_t, uintptr_t);\nint utimensat(int, uintptr_t, uintptr_t, int);\nint getcwd(uintptr_t, size_t);\nint accept(int, uintptr_t, uintptr_t);\nint getdirent(int, uintptr_t, size_t);\nint wait4(int, uintptr_t, int, uintptr_t);\nint ioctl(int, int, uintptr_t);\nint fcntl(uintptr_t, int, uintptr_t);\nint fsync_range(int, int, long long, long long);\nint acct(uintptr_t);\nint chdir(uintptr_t);\nint chroot(uintptr_t);\nint close(int);\nint dup(int);\nvoid exit(int);\nint faccessat(int, uintptr_t, unsigned int, int);\nint fchdir(int);\nint fchmod(int, unsigned int);\nint fchmodat(int, uintptr_t, unsigned int, int);\nint fchownat(int, uintptr_t, int, int, int);\nint fdatasync(int);\nint getpgid(int);\nint getpgrp();\nint getpid();\nint getppid();\nint getpriority(int, int);\nint getrusage(int, uintptr_t);\nint getsid(int);\nint kill(int, int);\nint syslog(int, uintptr_t, size_t);\nint mkdir(int, uintptr_t, unsigned int);\nint mkdirat(int, uintptr_t, unsigned int);\nint mkfifo(uintptr_t, unsigned int);\nint mknod(uintptr_t, unsigned int, int);\nint mknodat(int, uintptr_t, unsigned int, int);\nint nanosleep(uintptr_t, uintptr_t);\nint open64(uintptr_t, int, unsigned int);\nint openat(int, uintptr_t, int, unsigned int);\nint read(int, uintptr_t, size_t);\nint readlink(uintptr_t, uintptr_t, size_t);\nint renameat(int, uintptr_t, int, uintptr_t);\nint setdomainname(uintptr_t, size_t);\nint sethostname(uintptr_t, size_t);\nint setpgid(int, int);\nint setsid();\nint settimeofday(uintptr_t);\nint setuid(int);\nint setgid(int);\nint setpriority(int, int, int);\nint statx(int, uintptr_t, int, int, uintptr_t);\nint sync();\nuintptr_t times(uintptr_t);\nint umask(int);\nint uname(uintptr_t);\nint unlink(uintptr_t);\nint unlinkat(int, uintptr_t, int);\nint ustat(int, uintptr_t);\nint write(int, uintptr_t, size_t);\nint dup2(int, int);\nint posix_fadvise64(int, long long, long long, int);\nint fchown(int, int, int);\nint fstat(int, uintptr_t);\nint fstatat(int, uintptr_t, uintptr_t, int);\nint fstatfs(int, uintptr_t);\nint ftruncate(int, long long);\nint getegid();\nint geteuid();\nint getgid();\nint getuid();\nint lchown(uintptr_t, int, int);\nint listen(int, int);\nint lstat(uintptr_t, uintptr_t);\nint pause();\nint pread64(int, uintptr_t, size_t, long long);\nint pwrite64(int, uintptr_t, size_t, long long);\n#define c_select select\nint select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint setregid(int, int);\nint setreuid(int, int);\nint shutdown(int, int);\nlong long splice(int, uintptr_t, int, uintptr_t, int, int);\nint stat(uintptr_t, uintptr_t);\nint statfs(uintptr_t, uintptr_t);\nint truncate(uintptr_t, long long);\nint bind(int, uintptr_t, uintptr_t);\nint connect(int, uintptr_t, uintptr_t);\nint getgroups(int, uintptr_t);\nint setgroups(int, uintptr_t);\nint getsockopt(int, int, int, uintptr_t, uintptr_t);\nint setsockopt(int, int, int, uintptr_t, uintptr_t);\nint socket(int, int, int);\nint socketpair(int, int, int, uintptr_t);\nint getpeername(int, uintptr_t, uintptr_t);\nint getsockname(int, uintptr_t, uintptr_t);\nint recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint nrecvmsg(int, uintptr_t, int);\nint nsendmsg(int, uintptr_t, int);\nint munmap(uintptr_t, uintptr_t);\nint madvise(uintptr_t, size_t, int);\nint mprotect(uintptr_t, size_t, int);\nint mlock(uintptr_t, size_t);\nint mlockall(int);\nint msync(uintptr_t, size_t, int);\nint munlock(uintptr_t, size_t);\nint munlockall();\nint pipe(uintptr_t);\nint poll(uintptr_t, int, int);\nint gettimeofday(uintptr_t, uintptr_t);\nint time(uintptr_t);\nint utime(uintptr_t, uintptr_t);\nunsigned long long getsystemcfg(int);\nint umount(uintptr_t);\nint getrlimit64(int, uintptr_t);\nlong long lseek64(int, long long, int);\nuintptr_t mmap(uintptr_t, uintptr_t, int, int, int, long long);\n\n*/\nimport \"C\"\nimport (\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.utimes(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(times))), C.int(flag))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getcwd(buf []byte) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.getcwd(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, er := C.accept(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirent(fd int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.getdirent(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {\n\tr0, er := C.wait4(C.int(pid), C.uintptr_t(uintptr(unsafe.Pointer(status))), C.int(options), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))\n\twpid = Pid_t(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req int, arg uintptr) (err error) {\n\tr0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {\n\tr0, er := C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {\n\tr0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))\n\tr = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {\n\tr0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(uintptr(unsafe.Pointer(lk))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, er := C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg))\n\tval = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsyncRange(fd int, how int, start int64, length int64) (err error) {\n\tr0, er := C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.acct(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.chdir(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.chroot(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\tr0, er := C.close(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, er := C.dup(C.int(oldfd))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tC.exit(C.int(code))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\tr0, er := C.fchdir(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\tr0, er := C.fchmod(C.int(fd), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\tr0, er := C.fdatasync(C.int(fd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, er := C.getpgid(C.int(pid))\n\tpgid = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pid int) {\n\tr0, _ := C.getpgrp()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := C.getpid()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := C.getppid()\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, er := C.getpriority(C.int(which), C.int(who))\n\tprio = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\tr0, er := C.getrusage(C.int(who), C.uintptr_t(uintptr(unsafe.Pointer(rusage))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, er := C.getsid(C.int(pid))\n\tsid = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig Signal) (err error) {\n\tr0, er := C.kill(C.int(pid), C.int(sig))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.syslog(C.int(typ), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(dirfd int, path string, mode uint32) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mkfifo(C.uintptr_t(_p0), C.uint(mode))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\tr0, er := C.nanosleep(C.uintptr_t(uintptr(unsafe.Pointer(time))), C.uintptr_t(uintptr(unsafe.Pointer(leftover))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.read(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tvar _p1 *byte\n\tif len(buf) > 0 {\n\t\t_p1 = &buf[0]\n\t}\n\tvar _p2 int\n\t_p2 = len(buf)\n\tr0, er := C.readlink(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(_p1))), C.size_t(_p2))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(oldpath)))\n\t_p1 := uintptr(unsafe.Pointer(C.CString(newpath)))\n\tr0, er := C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.setdomainname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.sethostname(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\tr0, er := C.setpgid(C.int(pid), C.int(pgid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, er := C.setsid()\n\tpid = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\tr0, er := C.settimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\tr0, er := C.setuid(C.int(uid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(uid int) (err error) {\n\tr0, er := C.setgid(C.int(uid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\tr0, er := C.setpriority(C.int(which), C.int(who), C.int(prio))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(uintptr(unsafe.Pointer(stat))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tC.sync()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, er := C.times(C.uintptr_t(uintptr(unsafe.Pointer(tms))))\n\tticks = uintptr(r0)\n\tif uintptr(r0) == ^uintptr(0) && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := C.umask(C.int(mask))\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\tr0, er := C.uname(C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.unlink(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\tr0, er := C.ustat(C.int(dev), C.uintptr_t(uintptr(unsafe.Pointer(ubuf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.write(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\tr0, er := C.dup2(C.int(oldfd), C.int(newfd))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\tr0, er := C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\tr0, er := C.fchown(C.int(fd), C.int(uid), C.int(gid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *Stat_t) (err error) {\n\tr0, er := C.fstat(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(stat))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\tr0, er := C.fstatfs(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\tr0, er := C.ftruncate(C.int(fd), C.longlong(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := C.getegid()\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := C.geteuid()\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := C.getgid()\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := C.getuid()\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\tr0, er := C.listen(C.int(s), C.int(n))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *Stat_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.lstat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(stat))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\tr0, er := C.pause()\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.pread64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.pwrite64(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.longlong(offset))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, er := C.c_select(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, er := C.pselect(C.int(nfd), C.uintptr_t(uintptr(unsafe.Pointer(r))), C.uintptr_t(uintptr(unsafe.Pointer(w))), C.uintptr_t(uintptr(unsafe.Pointer(e))), C.uintptr_t(uintptr(unsafe.Pointer(timeout))), C.uintptr_t(uintptr(unsafe.Pointer(sigmask))))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\tr0, er := C.setregid(C.int(rgid), C.int(egid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\tr0, er := C.setreuid(C.int(ruid), C.int(euid))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\tr0, er := C.shutdown(C.int(fd), C.int(how))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, er := C.splice(C.int(rfd), C.uintptr_t(uintptr(unsafe.Pointer(roff))), C.int(wfd), C.uintptr_t(uintptr(unsafe.Pointer(woff))), C.int(len), C.int(flags))\n\tn = int64(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, statptr *Stat_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.stat(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(statptr))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.statfs(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.truncate(C.uintptr_t(_p0), C.longlong(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\tr0, er := C.bind(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\tr0, er := C.connect(C.int(s), C.uintptr_t(uintptr(addr)), C.uintptr_t(uintptr(addrlen)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, er := C.getgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))\n\tnn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\tr0, er := C.setgroups(C.int(n), C.uintptr_t(uintptr(unsafe.Pointer(list))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\tr0, er := C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(uintptr(unsafe.Pointer(vallen))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\tr0, er := C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(uintptr(val)), C.uintptr_t(vallen))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, er := C.socket(C.int(domain), C.int(typ), C.int(proto))\n\tfd = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\tr0, er := C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(uintptr(unsafe.Pointer(fd))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, er := C.getpeername(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, er := C.getsockname(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(rsa))), C.uintptr_t(uintptr(unsafe.Pointer(addrlen))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(p)\n\tr0, er := C.recvfrom(C.int(fd), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(unsafe.Pointer(from))), C.uintptr_t(uintptr(unsafe.Pointer(fromlen))))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(buf)\n\tr0, er := C.sendto(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags), C.uintptr_t(uintptr(to)), C.uintptr_t(uintptr(addrlen)))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, er := C.nrecvmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, er := C.nsendmsg(C.int(s), C.uintptr_t(uintptr(unsafe.Pointer(msg))), C.int(flags))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\tr0, er := C.munmap(C.uintptr_t(addr), C.uintptr_t(length))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.madvise(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(advice))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.mprotect(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(prot))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.mlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\tr0, er := C.mlockall(C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.msync(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1), C.int(flags))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\tvar _p1 int\n\t_p1 = len(b)\n\tr0, er := C.munlock(C.uintptr_t(uintptr(unsafe.Pointer(_p0))), C.size_t(_p1))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\tr0, er := C.munlockall()\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\tr0, er := C.pipe(C.uintptr_t(uintptr(unsafe.Pointer(p))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, er := C.poll(C.uintptr_t(uintptr(unsafe.Pointer(fds))), C.int(nfds), C.int(timeout))\n\tn = int(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tv *Timeval, tzp *Timezone) (err error) {\n\tr0, er := C.gettimeofday(C.uintptr_t(uintptr(unsafe.Pointer(tv))), C.uintptr_t(uintptr(unsafe.Pointer(tzp))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, er := C.time(C.uintptr_t(uintptr(unsafe.Pointer(t))))\n\ttt = Time_t(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(path)))\n\tr0, er := C.utime(C.uintptr_t(_p0), C.uintptr_t(uintptr(unsafe.Pointer(buf))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsystemcfg(label int) (n uint64) {\n\tr0, _ := C.getsystemcfg(C.int(label))\n\tn = uint64(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc umount(target string) (err error) {\n\t_p0 := uintptr(unsafe.Pointer(C.CString(target)))\n\tr0, er := C.umount(C.uintptr_t(_p0))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\tr0, er := C.getrlimit64(C.int(resource), C.uintptr_t(uintptr(unsafe.Pointer(rlim))))\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, er := C.lseek64(C.int(fd), C.longlong(offset), C.int(whence))\n\toff = int64(r0)\n\tif r0 == -1 && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, er := C.mmap(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset))\n\txaddr = uintptr(r0)\n\tif uintptr(r0) == ^uintptr(0) && er != nil {\n\t\terr = er\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64.go",
    "content": "// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build aix && ppc64\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callutimes(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callutimensat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), flag)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getcwd(buf []byte) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\t_, e1 := callgetcwd(uintptr(unsafe.Pointer(_p0)), len(buf))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, e1 := callaccept(s, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirent(fd int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, e1 := callgetdirent(fd, uintptr(unsafe.Pointer(_p0)), len(buf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) {\n\tr0, e1 := callwait4(int(pid), uintptr(unsafe.Pointer(status)), options, uintptr(unsafe.Pointer(rusage)))\n\twpid = Pid_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req int, arg uintptr) (err error) {\n\t_, e1 := callioctl(fd, req, arg)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {\n\t_, e1 := callioctl_ptr(fd, req, arg)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlInt(fd uintptr, cmd int, arg int) (r int, err error) {\n\tr0, e1 := callfcntl(fd, cmd, uintptr(arg))\n\tr = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlFlock(fd uintptr, cmd int, lk *Flock_t) (err error) {\n\t_, e1 := callfcntl(fd, cmd, uintptr(unsafe.Pointer(lk)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, e1 := callfcntl(uintptr(fd), cmd, uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsyncRange(fd int, how int, start int64, length int64) (err error) {\n\t_, e1 := callfsync_range(fd, how, start, length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callacct(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callchdir(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callchroot(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, e1 := callclose(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, e1 := calldup(oldfd)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tcallexit(code)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfaccessat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, e1 := callfchdir(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, e1 := callfchmod(fd, mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfchmodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfchownat(dirfd, uintptr(unsafe.Pointer(_p0)), uid, gid, flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, e1 := callfdatasync(fd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, e1 := callgetpgid(pid)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pid int) {\n\tr0, _ := callgetpgrp()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := callgetpid()\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := callgetppid()\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, e1 := callgetpriority(which, who)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, e1 := callgetrusage(who, uintptr(unsafe.Pointer(rusage)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, e1 := callgetsid(pid)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig Signal) (err error) {\n\t_, e1 := callkill(pid, int(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, e1 := callsyslog(typ, uintptr(unsafe.Pointer(_p0)), len(buf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmkdir(dirfd, uintptr(unsafe.Pointer(_p0)), mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmkdirat(dirfd, uintptr(unsafe.Pointer(_p0)), mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmkfifo(uintptr(unsafe.Pointer(_p0)), mode)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmknod(uintptr(unsafe.Pointer(_p0)), mode, dev)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callmknodat(dirfd, uintptr(unsafe.Pointer(_p0)), mode, dev)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, e1 := callnanosleep(uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, e1 := callopen64(uintptr(unsafe.Pointer(_p0)), mode, perm)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, e1 := callopenat(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mode)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callread(fd, uintptr(unsafe.Pointer(_p0)), len(p))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\tif len(buf) > 0 {\n\t\t_p1 = &buf[0]\n\t}\n\tr0, e1 := callreadlink(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), len(buf))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callrenameat(olddirfd, uintptr(unsafe.Pointer(_p0)), newdirfd, uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\t_, e1 := callsetdomainname(uintptr(unsafe.Pointer(_p0)), len(p))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\t_, e1 := callsethostname(uintptr(unsafe.Pointer(_p0)), len(p))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, e1 := callsetpgid(pid, pgid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, e1 := callsetsid()\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, e1 := callsettimeofday(uintptr(unsafe.Pointer(tv)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, e1 := callsetuid(uid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(uid int) (err error) {\n\t_, e1 := callsetgid(uid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, e1 := callsetpriority(which, who, prio)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callstatx(dirfd, uintptr(unsafe.Pointer(_p0)), flags, mask, uintptr(unsafe.Pointer(stat)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tcallsync()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, e1 := calltimes(uintptr(unsafe.Pointer(tms)))\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := callumask(mask)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, e1 := calluname(uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callunlink(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callunlinkat(dirfd, uintptr(unsafe.Pointer(_p0)), flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, e1 := callustat(dev, uintptr(unsafe.Pointer(ubuf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callwrite(fd, uintptr(unsafe.Pointer(_p0)), len(p))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, e1 := calldup2(oldfd, newfd)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, e1 := callposix_fadvise64(fd, offset, length, advice)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, e1 := callfchown(fd, uid, gid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *Stat_t) (err error) {\n\t_, e1 := callfstat(fd, uintptr(unsafe.Pointer(stat)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callfstatat(dirfd, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, e1 := callfstatfs(fd, uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, e1 := callftruncate(fd, length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := callgetegid()\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := callgeteuid()\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := callgetgid()\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := callgetuid()\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := calllchown(uintptr(unsafe.Pointer(_p0)), uid, gid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, e1 := calllisten(s, n)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := calllstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, e1 := callpause()\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callpread64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callpwrite64(fd, uintptr(unsafe.Pointer(_p0)), len(p), offset)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, e1 := callselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, e1 := callpselect(nfd, uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, e1 := callsetregid(rgid, egid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, e1 := callsetreuid(ruid, euid)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, e1 := callshutdown(fd, how)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, e1 := callsplice(rfd, uintptr(unsafe.Pointer(roff)), wfd, uintptr(unsafe.Pointer(woff)), len, flags)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, statptr *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callstat(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statptr)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callstatfs(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := calltruncate(uintptr(unsafe.Pointer(_p0)), length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e1 := callbind(s, uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, e1 := callconnect(s, uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, e1 := callgetgroups(n, uintptr(unsafe.Pointer(list)))\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, e1 := callsetgroups(n, uintptr(unsafe.Pointer(list)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, e1 := callgetsockopt(s, level, name, uintptr(val), uintptr(unsafe.Pointer(vallen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, e1 := callsetsockopt(s, level, name, uintptr(val), vallen)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, e1 := callsocket(domain, typ, proto)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, e1 := callsocketpair(domain, typ, proto, uintptr(unsafe.Pointer(fd)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e1 := callgetpeername(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, e1 := callgetsockname(fd, uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, e1 := callrecvfrom(fd, uintptr(unsafe.Pointer(_p0)), len(p), flags, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\t_, e1 := callsendto(s, uintptr(unsafe.Pointer(_p0)), len(buf), flags, uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, e1 := callnrecvmsg(s, uintptr(unsafe.Pointer(msg)), flags)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, e1 := callnsendmsg(s, uintptr(unsafe.Pointer(msg)), flags)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, e1 := callmunmap(addr, length)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmadvise(uintptr(unsafe.Pointer(_p0)), len(b), advice)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmprotect(uintptr(unsafe.Pointer(_p0)), len(b), prot)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmlock(uintptr(unsafe.Pointer(_p0)), len(b))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, e1 := callmlockall(flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmsync(uintptr(unsafe.Pointer(_p0)), len(b), flags)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, e1 := callmunlock(uintptr(unsafe.Pointer(_p0)), len(b))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, e1 := callmunlockall()\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\t_, e1 := callpipe(uintptr(unsafe.Pointer(p)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, e1 := callpoll(uintptr(unsafe.Pointer(fds)), nfds, timeout)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tv *Timeval, tzp *Timezone) (err error) {\n\t_, e1 := callgettimeofday(uintptr(unsafe.Pointer(tv)), uintptr(unsafe.Pointer(tzp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, e1 := calltime(uintptr(unsafe.Pointer(t)))\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callutime(uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsystemcfg(label int) (n uint64) {\n\tr0, _ := callgetsystemcfg(label)\n\tn = uint64(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc umount(target string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, e1 := callumount(uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, e1 := callgetrlimit(resource, uintptr(unsafe.Pointer(rlim)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, e1 := calllseek(fd, offset, whence)\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, e1 := callmmap64(addr, length, prot, flags, fd, offset)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gc.go",
    "content": "// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build aix && ppc64 && gc\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_accept accept \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getdirent getdirent \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fsync_range fsync_range \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_acct acct \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_chdir chdir \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_chroot chroot \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_close close \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_dup dup \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_exit exit \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fdatasync fdatasync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpid getpid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getppid getppid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsid getsid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_kill kill \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_syslog syslog \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mknod mknod \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_open64 open64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_openat openat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_read read \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_readlink readlink \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_renameat renameat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setdomainname setdomainname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_sethostname sethostname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setsid setsid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setuid setuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setgid setgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_statx statx \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_sync sync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_times times \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_umask umask \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_uname uname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_unlink unlink \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_ustat ustat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_write write \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_posix_fadvise64 posix_fadvise64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fchown fchown \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fstat fstat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getegid getegid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getgid getgid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getuid getuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_lchown lchown \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_listen listen \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_lstat lstat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pause pause \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pread64 pread64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pwrite64 pwrite64 \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_select select \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pselect pselect \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setregid setregid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_splice splice \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_stat stat \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_statfs statfs \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_truncate truncate \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_bind bind \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_connect connect \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_socket socket \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_sendto sendto \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_nrecvmsg nrecvmsg \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_nsendmsg nsendmsg \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_munmap munmap \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_madvise madvise \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mlock mlock \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_msync msync \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_munlock munlock \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_pipe pipe \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_poll poll \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_time time \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_utime utime \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getsystemcfg getsystemcfg \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_umount umount \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_lseek lseek \"libc.a/shr_64.o\"\n//go:cgo_import_dynamic libc_mmap64 mmap64 \"libc.a/shr_64.o\"\n\n//go:linkname libc_utimes libc_utimes\n//go:linkname libc_utimensat libc_utimensat\n//go:linkname libc_getcwd libc_getcwd\n//go:linkname libc_accept libc_accept\n//go:linkname libc_getdirent libc_getdirent\n//go:linkname libc_wait4 libc_wait4\n//go:linkname libc_ioctl libc_ioctl\n//go:linkname libc_fcntl libc_fcntl\n//go:linkname libc_fsync_range libc_fsync_range\n//go:linkname libc_acct libc_acct\n//go:linkname libc_chdir libc_chdir\n//go:linkname libc_chroot libc_chroot\n//go:linkname libc_close libc_close\n//go:linkname libc_dup libc_dup\n//go:linkname libc_exit libc_exit\n//go:linkname libc_faccessat libc_faccessat\n//go:linkname libc_fchdir libc_fchdir\n//go:linkname libc_fchmod libc_fchmod\n//go:linkname libc_fchmodat libc_fchmodat\n//go:linkname libc_fchownat libc_fchownat\n//go:linkname libc_fdatasync libc_fdatasync\n//go:linkname libc_getpgid libc_getpgid\n//go:linkname libc_getpgrp libc_getpgrp\n//go:linkname libc_getpid libc_getpid\n//go:linkname libc_getppid libc_getppid\n//go:linkname libc_getpriority libc_getpriority\n//go:linkname libc_getrusage libc_getrusage\n//go:linkname libc_getsid libc_getsid\n//go:linkname libc_kill libc_kill\n//go:linkname libc_syslog libc_syslog\n//go:linkname libc_mkdir libc_mkdir\n//go:linkname libc_mkdirat libc_mkdirat\n//go:linkname libc_mkfifo libc_mkfifo\n//go:linkname libc_mknod libc_mknod\n//go:linkname libc_mknodat libc_mknodat\n//go:linkname libc_nanosleep libc_nanosleep\n//go:linkname libc_open64 libc_open64\n//go:linkname libc_openat libc_openat\n//go:linkname libc_read libc_read\n//go:linkname libc_readlink libc_readlink\n//go:linkname libc_renameat libc_renameat\n//go:linkname libc_setdomainname libc_setdomainname\n//go:linkname libc_sethostname libc_sethostname\n//go:linkname libc_setpgid libc_setpgid\n//go:linkname libc_setsid libc_setsid\n//go:linkname libc_settimeofday libc_settimeofday\n//go:linkname libc_setuid libc_setuid\n//go:linkname libc_setgid libc_setgid\n//go:linkname libc_setpriority libc_setpriority\n//go:linkname libc_statx libc_statx\n//go:linkname libc_sync libc_sync\n//go:linkname libc_times libc_times\n//go:linkname libc_umask libc_umask\n//go:linkname libc_uname libc_uname\n//go:linkname libc_unlink libc_unlink\n//go:linkname libc_unlinkat libc_unlinkat\n//go:linkname libc_ustat libc_ustat\n//go:linkname libc_write libc_write\n//go:linkname libc_dup2 libc_dup2\n//go:linkname libc_posix_fadvise64 libc_posix_fadvise64\n//go:linkname libc_fchown libc_fchown\n//go:linkname libc_fstat libc_fstat\n//go:linkname libc_fstatat libc_fstatat\n//go:linkname libc_fstatfs libc_fstatfs\n//go:linkname libc_ftruncate libc_ftruncate\n//go:linkname libc_getegid libc_getegid\n//go:linkname libc_geteuid libc_geteuid\n//go:linkname libc_getgid libc_getgid\n//go:linkname libc_getuid libc_getuid\n//go:linkname libc_lchown libc_lchown\n//go:linkname libc_listen libc_listen\n//go:linkname libc_lstat libc_lstat\n//go:linkname libc_pause libc_pause\n//go:linkname libc_pread64 libc_pread64\n//go:linkname libc_pwrite64 libc_pwrite64\n//go:linkname libc_select libc_select\n//go:linkname libc_pselect libc_pselect\n//go:linkname libc_setregid libc_setregid\n//go:linkname libc_setreuid libc_setreuid\n//go:linkname libc_shutdown libc_shutdown\n//go:linkname libc_splice libc_splice\n//go:linkname libc_stat libc_stat\n//go:linkname libc_statfs libc_statfs\n//go:linkname libc_truncate libc_truncate\n//go:linkname libc_bind libc_bind\n//go:linkname libc_connect libc_connect\n//go:linkname libc_getgroups libc_getgroups\n//go:linkname libc_setgroups libc_setgroups\n//go:linkname libc_getsockopt libc_getsockopt\n//go:linkname libc_setsockopt libc_setsockopt\n//go:linkname libc_socket libc_socket\n//go:linkname libc_socketpair libc_socketpair\n//go:linkname libc_getpeername libc_getpeername\n//go:linkname libc_getsockname libc_getsockname\n//go:linkname libc_recvfrom libc_recvfrom\n//go:linkname libc_sendto libc_sendto\n//go:linkname libc_nrecvmsg libc_nrecvmsg\n//go:linkname libc_nsendmsg libc_nsendmsg\n//go:linkname libc_munmap libc_munmap\n//go:linkname libc_madvise libc_madvise\n//go:linkname libc_mprotect libc_mprotect\n//go:linkname libc_mlock libc_mlock\n//go:linkname libc_mlockall libc_mlockall\n//go:linkname libc_msync libc_msync\n//go:linkname libc_munlock libc_munlock\n//go:linkname libc_munlockall libc_munlockall\n//go:linkname libc_pipe libc_pipe\n//go:linkname libc_poll libc_poll\n//go:linkname libc_gettimeofday libc_gettimeofday\n//go:linkname libc_time libc_time\n//go:linkname libc_utime libc_utime\n//go:linkname libc_getsystemcfg libc_getsystemcfg\n//go:linkname libc_umount libc_umount\n//go:linkname libc_getrlimit libc_getrlimit\n//go:linkname libc_lseek libc_lseek\n//go:linkname libc_mmap64 libc_mmap64\n\ntype syscallFunc uintptr\n\nvar (\n\tlibc_utimes,\n\tlibc_utimensat,\n\tlibc_getcwd,\n\tlibc_accept,\n\tlibc_getdirent,\n\tlibc_wait4,\n\tlibc_ioctl,\n\tlibc_fcntl,\n\tlibc_fsync_range,\n\tlibc_acct,\n\tlibc_chdir,\n\tlibc_chroot,\n\tlibc_close,\n\tlibc_dup,\n\tlibc_exit,\n\tlibc_faccessat,\n\tlibc_fchdir,\n\tlibc_fchmod,\n\tlibc_fchmodat,\n\tlibc_fchownat,\n\tlibc_fdatasync,\n\tlibc_getpgid,\n\tlibc_getpgrp,\n\tlibc_getpid,\n\tlibc_getppid,\n\tlibc_getpriority,\n\tlibc_getrusage,\n\tlibc_getsid,\n\tlibc_kill,\n\tlibc_syslog,\n\tlibc_mkdir,\n\tlibc_mkdirat,\n\tlibc_mkfifo,\n\tlibc_mknod,\n\tlibc_mknodat,\n\tlibc_nanosleep,\n\tlibc_open64,\n\tlibc_openat,\n\tlibc_read,\n\tlibc_readlink,\n\tlibc_renameat,\n\tlibc_setdomainname,\n\tlibc_sethostname,\n\tlibc_setpgid,\n\tlibc_setsid,\n\tlibc_settimeofday,\n\tlibc_setuid,\n\tlibc_setgid,\n\tlibc_setpriority,\n\tlibc_statx,\n\tlibc_sync,\n\tlibc_times,\n\tlibc_umask,\n\tlibc_uname,\n\tlibc_unlink,\n\tlibc_unlinkat,\n\tlibc_ustat,\n\tlibc_write,\n\tlibc_dup2,\n\tlibc_posix_fadvise64,\n\tlibc_fchown,\n\tlibc_fstat,\n\tlibc_fstatat,\n\tlibc_fstatfs,\n\tlibc_ftruncate,\n\tlibc_getegid,\n\tlibc_geteuid,\n\tlibc_getgid,\n\tlibc_getuid,\n\tlibc_lchown,\n\tlibc_listen,\n\tlibc_lstat,\n\tlibc_pause,\n\tlibc_pread64,\n\tlibc_pwrite64,\n\tlibc_select,\n\tlibc_pselect,\n\tlibc_setregid,\n\tlibc_setreuid,\n\tlibc_shutdown,\n\tlibc_splice,\n\tlibc_stat,\n\tlibc_statfs,\n\tlibc_truncate,\n\tlibc_bind,\n\tlibc_connect,\n\tlibc_getgroups,\n\tlibc_setgroups,\n\tlibc_getsockopt,\n\tlibc_setsockopt,\n\tlibc_socket,\n\tlibc_socketpair,\n\tlibc_getpeername,\n\tlibc_getsockname,\n\tlibc_recvfrom,\n\tlibc_sendto,\n\tlibc_nrecvmsg,\n\tlibc_nsendmsg,\n\tlibc_munmap,\n\tlibc_madvise,\n\tlibc_mprotect,\n\tlibc_mlock,\n\tlibc_mlockall,\n\tlibc_msync,\n\tlibc_munlock,\n\tlibc_munlockall,\n\tlibc_pipe,\n\tlibc_poll,\n\tlibc_gettimeofday,\n\tlibc_time,\n\tlibc_utime,\n\tlibc_getsystemcfg,\n\tlibc_umount,\n\tlibc_getrlimit,\n\tlibc_lseek,\n\tlibc_mmap64 syscallFunc\n)\n\n// Implemented in runtime/syscall_aix.go.\nfunc rawSyscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\nfunc syscall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimes)), 2, _p0, times, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utimensat)), 4, uintptr(dirfd), _p0, times, uintptr(flag), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getcwd)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_accept)), 3, uintptr(s), rsa, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getdirent)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_wait4)), 4, uintptr(pid), status, uintptr(options), rusage, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), arg, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl_ptr(fd int, req int, arg unsafe.Pointer) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fcntl)), 3, fd, uintptr(cmd), arg, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fsync_range)), 4, uintptr(fd), uintptr(how), uintptr(start), uintptr(length), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_acct)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chdir)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_chroot)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callclose(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_close)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup(oldfd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup)), 1, uintptr(oldfd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callexit(code int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_exit)), 1, uintptr(code), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_faccessat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchdir(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchmodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(flags), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchownat)), 5, uintptr(dirfd), _p0, uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfdatasync(fd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgid(pid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgrp() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpgrp)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetppid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getppid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrusage)), 2, uintptr(who), rusage, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsid(pid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callkill(pid int, sig int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_kill)), 2, uintptr(pid), uintptr(sig), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_syslog)), 3, uintptr(typ), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdir)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkdirat)), 3, uintptr(dirfd), _p0, uintptr(mode), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mkfifo)), 2, _p0, uintptr(mode), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknod)), 3, _p0, uintptr(mode), uintptr(dev), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mknodat)), 4, uintptr(dirfd), _p0, uintptr(mode), uintptr(dev), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nanosleep)), 2, time, leftover, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_open64)), 3, _p0, uintptr(mode), uintptr(perm), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_openat)), 4, uintptr(dirfd), _p0, uintptr(flags), uintptr(mode), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_read)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_readlink)), 3, _p0, _p1, uintptr(_lenp1), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_renameat)), 4, uintptr(olddirfd), _p0, uintptr(newdirfd), _p1, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setdomainname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sethostname)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setsid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_settimeofday)), 1, tv, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetuid(uid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgid(uid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setgid)), 1, uintptr(uid), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statx)), 5, uintptr(dirfd), _p0, uintptr(flags), uintptr(mask), stat, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsync() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sync)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltimes(tms uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_times)), 1, tms, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumask(mask int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_umask)), 1, uintptr(mask), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calluname(buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_uname)), 1, buf, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlink)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_unlinkat)), 3, uintptr(dirfd), _p0, uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ustat)), 2, uintptr(dev), ubuf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_write)), 3, uintptr(fd), _p0, uintptr(_lenp0), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_dup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_posix_fadvise64)), 4, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstat)), 2, uintptr(fd), stat, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatat)), 4, uintptr(dirfd), _p0, stat, uintptr(flags), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_fstatfs)), 2, uintptr(fd), buf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_ftruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetegid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getegid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgeteuid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_geteuid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetuid() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getuid)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lchown)), 3, _p0, uintptr(uid), uintptr(gid), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllisten(s int, n int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_listen)), 2, uintptr(s), uintptr(n), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lstat)), 2, _p0, stat, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpause() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pause)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pread64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pwrite64)), 4, uintptr(fd), _p0, uintptr(_lenp0), uintptr(offset), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_select)), 5, uintptr(nfd), r, w, e, timeout, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_pselect)), 6, uintptr(nfd), r, w, e, timeout, sigmask)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_shutdown)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_splice)), 6, uintptr(rfd), roff, uintptr(wfd), woff, uintptr(len), uintptr(flags))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_stat)), 2, _p0, statptr, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_statfs)), 2, _p0, buf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_truncate)), 2, _p0, uintptr(length), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_bind)), 3, uintptr(s), addr, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_connect)), 3, uintptr(s), addr, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getgroups)), 2, uintptr(n), list, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_setgroups)), 2, uintptr(n), list, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_setsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), val, vallen, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), fd, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getpeername)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getsockname)), 3, uintptr(fd), rsa, addrlen, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_recvfrom)), 6, uintptr(fd), _p0, uintptr(_lenp0), uintptr(flags), from, fromlen)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_sendto)), 6, uintptr(s), _p0, uintptr(_lenp0), uintptr(flags), to, addrlen)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nrecvmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_nsendmsg)), 3, uintptr(s), msg, uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munmap)), 2, addr, length, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_madvise)), 3, _p0, uintptr(_lenp0), uintptr(advice), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mprotect)), 3, _p0, uintptr(_lenp0), uintptr(prot), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlockall(flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_msync)), 3, _p0, uintptr(_lenp0), uintptr(flags), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlock)), 2, _p0, uintptr(_lenp0), 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlockall() (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_munlockall)), 0, 0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpipe(p uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_pipe)), 1, p, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_poll)), 3, fds, uintptr(nfds), uintptr(timeout), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_gettimeofday)), 2, tv, tzp, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltime(t uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_time)), 1, t, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_utime)), 2, _p0, buf, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_getsystemcfg)), 1, uintptr(label), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_umount)), 1, _p0, 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = rawSyscall6(uintptr(unsafe.Pointer(&libc_getrlimit)), 2, uintptr(resource), rlim, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_lseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1, _, e1 = syscall6(uintptr(unsafe.Pointer(&libc_mmap64)), 6, addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_aix_ppc64_gccgo.go",
    "content": "// go run mksyscall_aix_ppc64.go -aix -tags aix,ppc64 syscall_aix.go syscall_aix_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build aix && ppc64 && gccgo\n\npackage unix\n\n/*\n#include <stdint.h>\nint utimes(uintptr_t, uintptr_t);\nint utimensat(int, uintptr_t, uintptr_t, int);\nint getcwd(uintptr_t, size_t);\nint accept(int, uintptr_t, uintptr_t);\nint getdirent(int, uintptr_t, size_t);\nint wait4(int, uintptr_t, int, uintptr_t);\nint ioctl(int, int, uintptr_t);\nint fcntl(uintptr_t, int, uintptr_t);\nint fsync_range(int, int, long long, long long);\nint acct(uintptr_t);\nint chdir(uintptr_t);\nint chroot(uintptr_t);\nint close(int);\nint dup(int);\nvoid exit(int);\nint faccessat(int, uintptr_t, unsigned int, int);\nint fchdir(int);\nint fchmod(int, unsigned int);\nint fchmodat(int, uintptr_t, unsigned int, int);\nint fchownat(int, uintptr_t, int, int, int);\nint fdatasync(int);\nint getpgid(int);\nint getpgrp();\nint getpid();\nint getppid();\nint getpriority(int, int);\nint getrusage(int, uintptr_t);\nint getsid(int);\nint kill(int, int);\nint syslog(int, uintptr_t, size_t);\nint mkdir(int, uintptr_t, unsigned int);\nint mkdirat(int, uintptr_t, unsigned int);\nint mkfifo(uintptr_t, unsigned int);\nint mknod(uintptr_t, unsigned int, int);\nint mknodat(int, uintptr_t, unsigned int, int);\nint nanosleep(uintptr_t, uintptr_t);\nint open64(uintptr_t, int, unsigned int);\nint openat(int, uintptr_t, int, unsigned int);\nint read(int, uintptr_t, size_t);\nint readlink(uintptr_t, uintptr_t, size_t);\nint renameat(int, uintptr_t, int, uintptr_t);\nint setdomainname(uintptr_t, size_t);\nint sethostname(uintptr_t, size_t);\nint setpgid(int, int);\nint setsid();\nint settimeofday(uintptr_t);\nint setuid(int);\nint setgid(int);\nint setpriority(int, int, int);\nint statx(int, uintptr_t, int, int, uintptr_t);\nint sync();\nuintptr_t times(uintptr_t);\nint umask(int);\nint uname(uintptr_t);\nint unlink(uintptr_t);\nint unlinkat(int, uintptr_t, int);\nint ustat(int, uintptr_t);\nint write(int, uintptr_t, size_t);\nint dup2(int, int);\nint posix_fadvise64(int, long long, long long, int);\nint fchown(int, int, int);\nint fstat(int, uintptr_t);\nint fstatat(int, uintptr_t, uintptr_t, int);\nint fstatfs(int, uintptr_t);\nint ftruncate(int, long long);\nint getegid();\nint geteuid();\nint getgid();\nint getuid();\nint lchown(uintptr_t, int, int);\nint listen(int, int);\nint lstat(uintptr_t, uintptr_t);\nint pause();\nint pread64(int, uintptr_t, size_t, long long);\nint pwrite64(int, uintptr_t, size_t, long long);\n#define c_select select\nint select(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint pselect(int, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);\nint setregid(int, int);\nint setreuid(int, int);\nint shutdown(int, int);\nlong long splice(int, uintptr_t, int, uintptr_t, int, int);\nint stat(uintptr_t, uintptr_t);\nint statfs(uintptr_t, uintptr_t);\nint truncate(uintptr_t, long long);\nint bind(int, uintptr_t, uintptr_t);\nint connect(int, uintptr_t, uintptr_t);\nint getgroups(int, uintptr_t);\nint setgroups(int, uintptr_t);\nint getsockopt(int, int, int, uintptr_t, uintptr_t);\nint setsockopt(int, int, int, uintptr_t, uintptr_t);\nint socket(int, int, int);\nint socketpair(int, int, int, uintptr_t);\nint getpeername(int, uintptr_t, uintptr_t);\nint getsockname(int, uintptr_t, uintptr_t);\nint recvfrom(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint sendto(int, uintptr_t, size_t, int, uintptr_t, uintptr_t);\nint nrecvmsg(int, uintptr_t, int);\nint nsendmsg(int, uintptr_t, int);\nint munmap(uintptr_t, uintptr_t);\nint madvise(uintptr_t, size_t, int);\nint mprotect(uintptr_t, size_t, int);\nint mlock(uintptr_t, size_t);\nint mlockall(int);\nint msync(uintptr_t, size_t, int);\nint munlock(uintptr_t, size_t);\nint munlockall();\nint pipe(uintptr_t);\nint poll(uintptr_t, int, int);\nint gettimeofday(uintptr_t, uintptr_t);\nint time(uintptr_t);\nint utime(uintptr_t, uintptr_t);\nunsigned long long getsystemcfg(int);\nint umount(uintptr_t);\nint getrlimit(int, uintptr_t);\nlong long lseek(int, long long, int);\nuintptr_t mmap64(uintptr_t, uintptr_t, int, int, int, long long);\n\n*/\nimport \"C\"\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimes(_p0 uintptr, times uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.utimes(C.uintptr_t(_p0), C.uintptr_t(times)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutimensat(dirfd int, _p0 uintptr, times uintptr, flag int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.utimensat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(times), C.int(flag)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetcwd(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getcwd(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callaccept(s int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.accept(C.int(s), C.uintptr_t(rsa), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetdirent(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getdirent(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwait4(pid int, status uintptr, options int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.wait4(C.int(pid), C.uintptr_t(status), C.int(options), C.uintptr_t(rusage)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl(fd int, req int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(arg)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callioctl_ptr(fd int, req int, arg unsafe.Pointer) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ioctl(C.int(fd), C.int(req), C.uintptr_t(uintptr(arg))))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfcntl(fd uintptr, cmd int, arg uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fcntl(C.uintptr_t(fd), C.int(cmd), C.uintptr_t(arg)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfsync_range(fd int, how int, start int64, length int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fsync_range(C.int(fd), C.int(how), C.longlong(start), C.longlong(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callacct(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.acct(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchdir(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.chdir(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callchroot(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.chroot(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callclose(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.close(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup(oldfd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.dup(C.int(oldfd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callexit(code int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.exit(C.int(code)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfaccessat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.faccessat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchdir(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchdir(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmod(fd int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchmod(C.int(fd), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchmodat(dirfd int, _p0 uintptr, mode uint32, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchmodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchownat(dirfd int, _p0 uintptr, uid int, gid int, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchownat(C.int(dirfd), C.uintptr_t(_p0), C.int(uid), C.int(gid), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfdatasync(fd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fdatasync(C.int(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgid(pid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpgid(C.int(pid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpgrp() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpgrp())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetppid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getppid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpriority(which int, who int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpriority(C.int(which), C.int(who)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrusage(who int, rusage uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getrusage(C.int(who), C.uintptr_t(rusage)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsid(pid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsid(C.int(pid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callkill(pid int, sig int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.kill(C.int(pid), C.int(sig)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsyslog(typ int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.syslog(C.int(typ), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdir(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mkdir(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkdirat(dirfd int, _p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mkdirat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmkfifo(_p0 uintptr, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mkfifo(C.uintptr_t(_p0), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknod(_p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mknod(C.uintptr_t(_p0), C.uint(mode), C.int(dev)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmknodat(dirfd int, _p0 uintptr, mode uint32, dev int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mknodat(C.int(dirfd), C.uintptr_t(_p0), C.uint(mode), C.int(dev)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnanosleep(time uintptr, leftover uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.nanosleep(C.uintptr_t(time), C.uintptr_t(leftover)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopen64(_p0 uintptr, mode int, perm uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.open64(C.uintptr_t(_p0), C.int(mode), C.uint(perm)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callopenat(dirfd int, _p0 uintptr, flags int, mode uint32) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.openat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.uint(mode)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callread(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.read(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callreadlink(_p0 uintptr, _p1 uintptr, _lenp1 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.readlink(C.uintptr_t(_p0), C.uintptr_t(_p1), C.size_t(_lenp1)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrenameat(olddirfd int, _p0 uintptr, newdirfd int, _p1 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.renameat(C.int(olddirfd), C.uintptr_t(_p0), C.int(newdirfd), C.uintptr_t(_p1)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetdomainname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setdomainname(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsethostname(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.sethostname(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpgid(pid int, pgid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setpgid(C.int(pid), C.int(pgid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setsid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsettimeofday(tv uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.settimeofday(C.uintptr_t(tv)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetuid(uid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setuid(C.int(uid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgid(uid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setgid(C.int(uid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetpriority(which int, who int, prio int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setpriority(C.int(which), C.int(who), C.int(prio)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatx(dirfd int, _p0 uintptr, flags int, mask int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.statx(C.int(dirfd), C.uintptr_t(_p0), C.int(flags), C.int(mask), C.uintptr_t(stat)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsync() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.sync())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltimes(tms uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.times(C.uintptr_t(tms)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumask(mask int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.umask(C.int(mask)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calluname(buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.uname(C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlink(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.unlink(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callunlinkat(dirfd int, _p0 uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.unlinkat(C.int(dirfd), C.uintptr_t(_p0), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callustat(dev int, ubuf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ustat(C.int(dev), C.uintptr_t(ubuf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callwrite(fd int, _p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.write(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calldup2(oldfd int, newfd int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.dup2(C.int(oldfd), C.int(newfd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callposix_fadvise64(fd int, offset int64, length int64, advice int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.posix_fadvise64(C.int(fd), C.longlong(offset), C.longlong(length), C.int(advice)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfchown(fd int, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fchown(C.int(fd), C.int(uid), C.int(gid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstat(fd int, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fstat(C.int(fd), C.uintptr_t(stat)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatat(dirfd int, _p0 uintptr, stat uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fstatat(C.int(dirfd), C.uintptr_t(_p0), C.uintptr_t(stat), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callfstatfs(fd int, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.fstatfs(C.int(fd), C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callftruncate(fd int, length int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.ftruncate(C.int(fd), C.longlong(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetegid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getegid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgeteuid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.geteuid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getgid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetuid() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getuid())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllchown(_p0 uintptr, uid int, gid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.lchown(C.uintptr_t(_p0), C.int(uid), C.int(gid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllisten(s int, n int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.listen(C.int(s), C.int(n)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllstat(_p0 uintptr, stat uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.lstat(C.uintptr_t(_p0), C.uintptr_t(stat)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpause() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pause())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpread64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pread64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpwrite64(fd int, _p0 uintptr, _lenp0 int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pwrite64(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.longlong(offset)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.c_select(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpselect(nfd int, r uintptr, w uintptr, e uintptr, timeout uintptr, sigmask uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pselect(C.int(nfd), C.uintptr_t(r), C.uintptr_t(w), C.uintptr_t(e), C.uintptr_t(timeout), C.uintptr_t(sigmask)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetregid(rgid int, egid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setregid(C.int(rgid), C.int(egid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetreuid(ruid int, euid int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setreuid(C.int(ruid), C.int(euid)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callshutdown(fd int, how int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.shutdown(C.int(fd), C.int(how)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsplice(rfd int, roff uintptr, wfd int, woff uintptr, len int, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.splice(C.int(rfd), C.uintptr_t(roff), C.int(wfd), C.uintptr_t(woff), C.int(len), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstat(_p0 uintptr, statptr uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.stat(C.uintptr_t(_p0), C.uintptr_t(statptr)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callstatfs(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.statfs(C.uintptr_t(_p0), C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltruncate(_p0 uintptr, length int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.truncate(C.uintptr_t(_p0), C.longlong(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callbind(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.bind(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callconnect(s int, addr uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.connect(C.int(s), C.uintptr_t(addr), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getgroups(C.int(n), C.uintptr_t(list)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetgroups(n int, list uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setgroups(C.int(n), C.uintptr_t(list)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsetsockopt(s int, level int, name int, val uintptr, vallen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.setsockopt(C.int(s), C.int(level), C.int(name), C.uintptr_t(val), C.uintptr_t(vallen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocket(domain int, typ int, proto int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.socket(C.int(domain), C.int(typ), C.int(proto)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsocketpair(domain int, typ int, proto int, fd uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.socketpair(C.int(domain), C.int(typ), C.int(proto), C.uintptr_t(fd)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetpeername(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getpeername(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsockname(fd int, rsa uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsockname(C.int(fd), C.uintptr_t(rsa), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callrecvfrom(fd int, _p0 uintptr, _lenp0 int, flags int, from uintptr, fromlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.recvfrom(C.int(fd), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(from), C.uintptr_t(fromlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callsendto(s int, _p0 uintptr, _lenp0 int, flags int, to uintptr, addrlen uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.sendto(C.int(s), C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags), C.uintptr_t(to), C.uintptr_t(addrlen)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnrecvmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.nrecvmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callnsendmsg(s int, msg uintptr, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.nsendmsg(C.int(s), C.uintptr_t(msg), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunmap(addr uintptr, length uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.munmap(C.uintptr_t(addr), C.uintptr_t(length)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmadvise(_p0 uintptr, _lenp0 int, advice int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.madvise(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(advice)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmprotect(_p0 uintptr, _lenp0 int, prot int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mprotect(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(prot)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mlock(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmlockall(flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mlockall(C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmsync(_p0 uintptr, _lenp0 int, flags int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.msync(C.uintptr_t(_p0), C.size_t(_lenp0), C.int(flags)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlock(_p0 uintptr, _lenp0 int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.munlock(C.uintptr_t(_p0), C.size_t(_lenp0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmunlockall() (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.munlockall())\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpipe(p uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.pipe(C.uintptr_t(p)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callpoll(fds uintptr, nfds int, timeout int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.poll(C.uintptr_t(fds), C.int(nfds), C.int(timeout)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgettimeofday(tv uintptr, tzp uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.gettimeofday(C.uintptr_t(tv), C.uintptr_t(tzp)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calltime(t uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.time(C.uintptr_t(t)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callutime(_p0 uintptr, buf uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.utime(C.uintptr_t(_p0), C.uintptr_t(buf)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetsystemcfg(label int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getsystemcfg(C.int(label)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callumount(_p0 uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.umount(C.uintptr_t(_p0)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callgetrlimit(resource int, rlim uintptr) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.getrlimit(C.int(resource), C.uintptr_t(rlim)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc calllseek(fd int, offset int64, whence int) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.lseek(C.int(fd), C.longlong(offset), C.int(whence)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc callmmap64(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (r1 uintptr, e1 Errno) {\n\tr1 = uintptr(C.mmap64(C.uintptr_t(addr), C.uintptr_t(length), C.int(prot), C.int(flags), C.int(fd), C.longlong(offset)))\n\te1 = syscall.GetErrno()\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go",
    "content": "// go run mksyscall.go -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build darwin && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc closedir(dir uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_closedir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_closedir closedir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {\n\tr0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))\n\tres = Errno(r0)\n\treturn\n}\n\nvar libc_readdir_r_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readdir_r readdir_r \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe pipe \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getxattr getxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fgetxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fgetxattr fgetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setxattr setxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsetxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsetxattr fsetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_removexattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_removexattr removexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fremovexattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fremovexattr fremovexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listxattr listxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flistxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flistxattr flistxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc renamexNp(from string, to string, flag uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renamex_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renamex_np renamex_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameatx_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameatx_np renameatx_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pthread_chdir_np(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pthread_chdir_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pthread_fchdir_np(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pthread_fchdir_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iov) > 0 {\n\t\t_p0 = unsafe.Pointer(&iov[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connectx_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connectx connectx \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendfile_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendfile sendfile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmat shmat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))\n\tresult = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmctl shmctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmdt(addr uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmdt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmdt shmdt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmget(key int, size int, flag int) (id int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag))\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmget_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmget shmget \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Clonefile(src string, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(src)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clonefile_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clonefile clonefile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(src)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clonefileat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clonefileat clonefileat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_exchangedata_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exchangedata exchangedata \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fclonefileat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fclonefileat fclonefileat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\nvar libc_getdtablesize_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdtablesize getdtablesize \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(attrBuf) > 0 {\n\t\t_p1 = unsafe.Pointer(&attrBuf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setattrlist_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setattrlist setattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setprivexec_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setprivexec setprivexec \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_undelete_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_undelete undelete \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat64 fstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat64 fstatat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat64_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat64 lstat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ptrace_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ptrace ptrace \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat64 stat64 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs64_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs64 statfs64 \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s",
    "content": "// go run mkasm.go darwin amd64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fdopendir(SB)\nGLOBL\t·libc_fdopendir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_closedir(SB)\nGLOBL\t·libc_closedir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)\n\nTEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readdir_r(SB)\nGLOBL\t·libc_readdir_r_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)\n\nTEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe(SB)\nGLOBL\t·libc_pipe_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB)\n\nTEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getxattr(SB)\nGLOBL\t·libc_getxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB)\n\nTEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fgetxattr(SB)\nGLOBL\t·libc_fgetxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB)\n\nTEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setxattr(SB)\nGLOBL\t·libc_setxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB)\n\nTEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsetxattr(SB)\nGLOBL\t·libc_fsetxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB)\n\nTEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_removexattr(SB)\nGLOBL\t·libc_removexattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB)\n\nTEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fremovexattr(SB)\nGLOBL\t·libc_fremovexattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB)\n\nTEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listxattr(SB)\nGLOBL\t·libc_listxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB)\n\nTEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flistxattr(SB)\nGLOBL\t·libc_flistxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renamex_np(SB)\nGLOBL\t·libc_renamex_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB)\n\nTEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameatx_np(SB)\nGLOBL\t·libc_renameatx_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pthread_chdir_np(SB)\nGLOBL\t·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB)\n\nTEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pthread_fchdir_np(SB)\nGLOBL\t·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB)\n\nTEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connectx(SB)\nGLOBL\t·libc_connectx_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB)\n\nTEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendfile(SB)\nGLOBL\t·libc_sendfile_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB)\n\nTEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmat(SB)\nGLOBL\t·libc_shmat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB)\n\nTEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmctl(SB)\nGLOBL\t·libc_shmctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB)\n\nTEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmdt(SB)\nGLOBL\t·libc_shmdt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB)\n\nTEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmget(SB)\nGLOBL\t·libc_shmget_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clonefile(SB)\nGLOBL\t·libc_clonefile_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB)\n\nTEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clonefileat(SB)\nGLOBL\t·libc_clonefileat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exchangedata(SB)\nGLOBL\t·libc_exchangedata_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fclonefileat(SB)\nGLOBL\t·libc_fclonefileat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdtablesize(SB)\nGLOBL\t·libc_getdtablesize_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setattrlist(SB)\nGLOBL\t·libc_setattrlist_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setprivexec(SB)\nGLOBL\t·libc_setprivexec_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_undelete(SB)\nGLOBL\t·libc_undelete_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat64(SB)\nGLOBL\t·libc_fstat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat64_trampoline_addr(SB)/8, $libc_fstat64_trampoline<>(SB)\n\nTEXT libc_fstatat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat64(SB)\nGLOBL\t·libc_fstatat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat64_trampoline_addr(SB)/8, $libc_fstatat64_trampoline<>(SB)\n\nTEXT libc_fstatfs64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs64(SB)\nGLOBL\t·libc_fstatfs64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs64_trampoline_addr(SB)/8, $libc_fstatfs64_trampoline<>(SB)\n\nTEXT libc_getfsstat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat64(SB)\nGLOBL\t·libc_getfsstat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat64_trampoline_addr(SB)/8, $libc_getfsstat64_trampoline<>(SB)\n\nTEXT libc_lstat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat64(SB)\nGLOBL\t·libc_lstat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat64_trampoline_addr(SB)/8, $libc_lstat64_trampoline<>(SB)\n\nTEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ptrace(SB)\nGLOBL\t·libc_ptrace_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB)\n\nTEXT libc_stat64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat64(SB)\nGLOBL\t·libc_stat64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat64_trampoline_addr(SB)/8, $libc_stat64_trampoline<>(SB)\n\nTEXT libc_statfs64_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs64(SB)\nGLOBL\t·libc_statfs64_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs64_trampoline_addr(SB)/8, $libc_statfs64_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go",
    "content": "// go run mksyscall.go -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build darwin && arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc closedir(dir uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_closedir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_closedir closedir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) {\n\tr0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))\n\tres = Errno(r0)\n\treturn\n}\n\nvar libc_readdir_r_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readdir_r readdir_r \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe pipe \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getxattr getxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fgetxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fgetxattr fgetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setxattr setxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsetxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsetxattr fsetxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc removexattr(path string, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_removexattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_removexattr removexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fremovexattr(fd int, attr string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fremovexattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fremovexattr fremovexattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc listxattr(path string, dest *byte, size int, options int) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listxattr listxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flistxattr_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flistxattr flistxattr \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kill(pid int, signum int, posix int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc renamexNp(from string, to string, flag uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renamex_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renamex_np renamex_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameatx_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameatx_np renameatx_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pthread_chdir_np(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_pthread_chdir_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pthread_chdir_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pthread_chdir_np pthread_chdir_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pthread_fchdir_np(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pthread_fchdir_np_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pthread_fchdir_np_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pthread_fchdir_np pthread_fchdir_np \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iov) > 0 {\n\t\t_p0 = unsafe.Pointer(&iov[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connectx_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connectx connectx \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendfile_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendfile sendfile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmat_trampoline_addr, uintptr(id), uintptr(addr), uintptr(flag))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmat shmat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmctl_trampoline_addr, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))\n\tresult = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmctl shmctl \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmdt(addr uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shmdt_trampoline_addr, uintptr(addr), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmdt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmdt shmdt \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmget(key int, size int, flag int) (id int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_shmget_trampoline_addr, uintptr(key), uintptr(size), uintptr(flag))\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shmget_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shmget shmget \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Clonefile(src string, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(src)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clonefile_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clonefile clonefile \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(src)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clonefileat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clonefileat clonefileat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exchangedata(path1 string, path2 string, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path1)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(path2)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_exchangedata_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exchangedata exchangedata \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(dst)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fclonefileat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fclonefileat fclonefileat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\nvar libc_getdtablesize_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdtablesize getdtablesize \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setattrlist(path string, attrlist *Attrlist, attrBuf []byte, options int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(attrBuf) > 0 {\n\t\t_p1 = unsafe.Pointer(&attrBuf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(attrlist)), uintptr(_p1), uintptr(len(attrBuf)), uintptr(options), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setattrlist_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setattrlist setattrlist \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setprivexec(flag int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setprivexec_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setprivexec setprivexec \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_undelete_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_undelete undelete \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ptrace_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ptrace ptrace \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"/usr/lib/libSystem.B.dylib\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"/usr/lib/libSystem.B.dylib\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s",
    "content": "// go run mkasm.go darwin arm64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fdopendir(SB)\nGLOBL\t·libc_fdopendir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB)\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_closedir(SB)\nGLOBL\t·libc_closedir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB)\n\nTEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readdir_r(SB)\nGLOBL\t·libc_readdir_r_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB)\n\nTEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe(SB)\nGLOBL\t·libc_pipe_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB)\n\nTEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getxattr(SB)\nGLOBL\t·libc_getxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB)\n\nTEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fgetxattr(SB)\nGLOBL\t·libc_fgetxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB)\n\nTEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setxattr(SB)\nGLOBL\t·libc_setxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB)\n\nTEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsetxattr(SB)\nGLOBL\t·libc_fsetxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB)\n\nTEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_removexattr(SB)\nGLOBL\t·libc_removexattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB)\n\nTEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fremovexattr(SB)\nGLOBL\t·libc_fremovexattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB)\n\nTEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listxattr(SB)\nGLOBL\t·libc_listxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB)\n\nTEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flistxattr(SB)\nGLOBL\t·libc_flistxattr_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renamex_np(SB)\nGLOBL\t·libc_renamex_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB)\n\nTEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameatx_np(SB)\nGLOBL\t·libc_renameatx_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_pthread_chdir_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pthread_chdir_np(SB)\nGLOBL\t·libc_pthread_chdir_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pthread_chdir_np_trampoline_addr(SB)/8, $libc_pthread_chdir_np_trampoline<>(SB)\n\nTEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pthread_fchdir_np(SB)\nGLOBL\t·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB)\n\nTEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connectx(SB)\nGLOBL\t·libc_connectx_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB)\n\nTEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendfile(SB)\nGLOBL\t·libc_sendfile_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB)\n\nTEXT libc_shmat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmat(SB)\nGLOBL\t·libc_shmat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmat_trampoline_addr(SB)/8, $libc_shmat_trampoline<>(SB)\n\nTEXT libc_shmctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmctl(SB)\nGLOBL\t·libc_shmctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmctl_trampoline_addr(SB)/8, $libc_shmctl_trampoline<>(SB)\n\nTEXT libc_shmdt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmdt(SB)\nGLOBL\t·libc_shmdt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmdt_trampoline_addr(SB)/8, $libc_shmdt_trampoline<>(SB)\n\nTEXT libc_shmget_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shmget(SB)\nGLOBL\t·libc_shmget_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shmget_trampoline_addr(SB)/8, $libc_shmget_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clonefile(SB)\nGLOBL\t·libc_clonefile_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB)\n\nTEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clonefileat(SB)\nGLOBL\t·libc_clonefileat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exchangedata(SB)\nGLOBL\t·libc_exchangedata_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fclonefileat(SB)\nGLOBL\t·libc_fclonefileat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdtablesize(SB)\nGLOBL\t·libc_getdtablesize_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setattrlist(SB)\nGLOBL\t·libc_setattrlist_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setprivexec(SB)\nGLOBL\t·libc_setprivexec_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_undelete(SB)\nGLOBL\t·libc_undelete_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ptrace(SB)\nGLOBL\t·libc_ptrace_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go",
    "content": "// go run mksyscall.go -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build dragonfly && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe() (r int, w int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (r int, w int, err error) {\n\tr0, r1, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tr = int(r0)\n\tw = int(r1)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc extpread(fd int, p []byte, flags int, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go",
    "content": "// go run mksyscall.go -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), uintptr(dev>>32), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go",
    "content": "// go run mksyscall.go -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go",
    "content": "// go run mksyscall.go -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, uintptr(dev), uintptr(dev>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go",
    "content": "// go run mksyscall.go -tags freebsd,arm64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go",
    "content": "// go run mksyscall.go -tags freebsd,riscv64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_riscv64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build freebsd && riscv64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr unsafe.Pointer, data int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CapEnter() (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsGet(version int, fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc capRightsLimit(fd int, rightsp *CapRights) (err error) {\n\t_, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getdirentries(fd int, buf []byte, basep *uint64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdtablesize() (size int) {\n\tr0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0)\n\tsize = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(fd int, path string, mode uint32, dev uint64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Undelete(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_illumos_amd64.go",
    "content": "// go run mksyscall_solaris.go -illumos -tags illumos,amd64 syscall_illumos.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build illumos && amd64\n\npackage unix\n\nimport (\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_readv readv \"libc.so\"\n//go:cgo_import_dynamic libc_preadv preadv \"libc.so\"\n//go:cgo_import_dynamic libc_writev writev \"libc.so\"\n//go:cgo_import_dynamic libc_pwritev pwritev \"libc.so\"\n//go:cgo_import_dynamic libc_accept4 accept4 \"libsocket.so\"\n\n//go:linkname procreadv libc_readv\n//go:linkname procpreadv libc_preadv\n//go:linkname procwritev libc_writev\n//go:linkname procpwritev libc_pwritev\n//go:linkname procaccept4 libc_accept4\n\nvar (\n\tprocreadv,\n\tprocpreadv,\n\tprocwritev,\n\tprocpwritev,\n\tprocaccept4 syscallFunc\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readv(fd int, iovs []Iovec) (n int, err error) {\n\tvar _p0 *Iovec\n\tif len(iovs) > 0 {\n\t\t_p0 = &iovs[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procreadv)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc preadv(fd int, iovs []Iovec, off int64) (n int, err error) {\n\tvar _p0 *Iovec\n\tif len(iovs) > 0 {\n\t\t_p0 = &iovs[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpreadv)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writev(fd int, iovs []Iovec) (n int, err error) {\n\tvar _p0 *Iovec\n\tif len(iovs) > 0 {\n\t\t_p0 = &iovs[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwritev)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwritev(fd int, iovs []Iovec, off int64) (n int, err error) {\n\tvar _p0 *Iovec\n\tif len(iovs) > 0 {\n\t\t_p0 = &iovs[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwritev)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(iovs)), uintptr(off), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept4)), 4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux.go",
    "content": "// Code generated by mkmerge; DO NOT EDIT.\n\n//go:build linux\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FanotifyInit(flags uint, event_f_flags uint) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FANOTIFY_INIT, uintptr(flags), uintptr(event_f_flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(open_how)), uintptr(size), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Waitid(idType int, id int, info *Siginfo, options int, rusage *Rusage) (err error) {\n\t_, _, e1 := Syscall6(SYS_WAITID, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlJoin(cmd int, arg2 string) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg2)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg3)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(arg4)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p0 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlRestrictKeyringByType(cmd int, arg2 int, keyType string, restriction string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(restriction)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc keyctlRestrictKeyring(cmd int, arg2 int) (err error) {\n\t_, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(arg)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(source)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mountSetattr(dirfd int, pathname string, flags uint, attr *MountAttr, size uintptr) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOUNT_SETATTR, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(unsafe.Pointer(attr)), uintptr(size), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Acct(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(payload) > 0 {\n\t\t_p2 = unsafe.Pointer(&payload[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtimex(buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Capget(hdr *CapUserHeader, data *CapUserData) (err error) {\n\t_, _, e1 := RawSyscall(SYS_CAPGET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Capset(hdr *CapUserHeader, data *CapUserData) (err error) {\n\t_, _, e1 := RawSyscall(SYS_CAPSET, uintptr(unsafe.Pointer(hdr)), uintptr(unsafe.Pointer(data)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockAdjtime(clockid int32, buf *Timex) (state int, err error) {\n\tr0, _, e1 := Syscall(SYS_CLOCK_ADJTIME, uintptr(clockid), uintptr(unsafe.Pointer(buf)), 0)\n\tstate = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGetres(clockid int32, res *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETRES, uintptr(clockid), uintptr(unsafe.Pointer(res)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) {\n\t_, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CloseRange(first uint, last uint, flags uint) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE_RANGE, uintptr(first), uintptr(last), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc DeleteModule(name string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_DELETE_MODULE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(oldfd int, newfd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCreate1(flag int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Eventfd(initval uint, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscallNoError(SYS_EXIT_GROUP, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_FGETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FinitModule(fd int, params string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FINIT_MODULE, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_FLISTXATTR, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FREMOVEXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_FSETXATTR, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_FSMOUNT, uintptr(fd), uintptr(flags), uintptr(mountAttrs))\n\tfsfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsopen(fsName string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsName)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_FSOPEN, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fspick(dirfd int, pathName string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathName)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_FSPICK, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FSCONFIG, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(value)), uintptr(aux), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettid() (tid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETTID, 0, 0, 0)\n\ttid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InitModule(moduleImage []byte, params string) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(moduleImage) > 0 {\n\t\t_p0 = unsafe.Pointer(&moduleImage[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(params)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_INIT_MODULE, uintptr(_p0), uintptr(len(moduleImage)), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\twatchdesc = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyInit1(flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0)\n\tsuccess = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Klogctl(typ int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0)\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\tsz = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdCreate(name string, flags int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_MEMFD_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fromPathName)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(toPathName)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MOVE_MOUNT, uintptr(fromDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(toDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc OpenTree(dfd int, fileName string, flags uint) (r int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fileName)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tr = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PivotRoot(newroot string, putold string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(putold)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT2, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(keyType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(description)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(callback)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0)\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setdomainname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setns(fd int, nstype int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc signalfd(fd int, sigmask *Sigset_t, maskSize uintptr, flags int) (newfd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SIGNALFD4, uintptr(fd), uintptr(unsafe.Pointer(sigmask)), uintptr(maskSize), uintptr(flags), 0, 0)\n\tnewfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statx(dirfd int, path string, flags int, mask int, stat *Statx_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_STATX, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mask), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\tSyscallNoError(SYS_SYNC, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Syncfs(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysinfo(info *Sysinfo_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc TimerfdCreate(clockid int, flags int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMERFD_CREATE, uintptr(clockid), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc TimerfdGettime(fd int, currValue *ItimerSpec) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TIMERFD_GETTIME, uintptr(fd), uintptr(unsafe.Pointer(currValue)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc TimerfdSettime(fd int, flags int, newValue *ItimerSpec, oldValue *ItimerSpec) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_TIMERFD_SETTIME, uintptr(fd), uintptr(flags), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tgkill(tgid int, tid int, sig syscall.Signal) (err error) {\n\t_, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _ := RawSyscallNoError(SYS_UMASK, uintptr(mask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unshare(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc exitThread(code int) (err error) {\n\t_, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc readv(fd int, iovs []Iovec) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc writev(fd int, iovs []Iovec) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc preadv(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREADV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwritev(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITEV, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc preadv2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREADV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwritev2(fd int, iovs []Iovec, offs_l uintptr, offs_h uintptr, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(iovs) > 0 {\n\t\t_p0 = unsafe.Pointer(&iovs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITEV2, uintptr(fd), uintptr(_p0), uintptr(len(iovs)), uintptr(offs_l), uintptr(offs_h), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremap(oldaddr uintptr, oldlength uintptr, newlength uintptr, flags int, newaddr uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldaddr), uintptr(oldlength), uintptr(newlength), uintptr(flags), uintptr(newaddr), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc faccessat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat2(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc nameToHandleAt(dirFD int, pathname string, fh *fileHandle, mountID *_C_int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NAME_TO_HANDLE_AT, uintptr(dirFD), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(fh)), uintptr(unsafe.Pointer(mountID)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc openByHandleAt(mountFD int, fh *fileHandle, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_OPEN_BY_HANDLE_AT, uintptr(mountFD), uintptr(unsafe.Pointer(fh)), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ProcessVMReadv(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(localIov) > 0 {\n\t\t_p0 = unsafe.Pointer(&localIov[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(remoteIov) > 0 {\n\t\t_p1 = unsafe.Pointer(&remoteIov[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PROCESS_VM_READV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ProcessVMWritev(pid int, localIov []Iovec, remoteIov []RemoteIovec, flags uint) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(localIov) > 0 {\n\t\t_p0 = unsafe.Pointer(&localIov[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(remoteIov) > 0 {\n\t\t_p1 = unsafe.Pointer(&remoteIov[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PROCESS_VM_WRITEV, uintptr(pid), uintptr(_p0), uintptr(len(localIov)), uintptr(_p1), uintptr(len(remoteIov)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PidfdOpen(pid int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_PIDFD_OPEN, uintptr(pid), uintptr(flags), 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PidfdGetfd(pidfd int, targetfd int, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_PIDFD_GETFD, uintptr(pidfd), uintptr(targetfd), uintptr(flags))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc PidfdSendSignal(pidfd int, sig Signal, info *Siginfo, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_PIDFD_SEND_SIGNAL, uintptr(pidfd), uintptr(sig), uintptr(unsafe.Pointer(info)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall(SYS_SHMAT, uintptr(id), uintptr(addr), uintptr(flag))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {\n\tr0, _, e1 := Syscall(SYS_SHMCTL, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))\n\tresult = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmdt(addr uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_SHMDT, uintptr(addr), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmget(key int, size int, flag int) (id int, err error) {\n\tr0, _, e1 := Syscall(SYS_SHMGET, uintptr(key), uintptr(size), uintptr(flag))\n\tid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getitimer(which int, currValue *Itimerval) (err error) {\n\t_, _, e1 := Syscall(SYS_GETITIMER, uintptr(which), uintptr(unsafe.Pointer(currValue)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setitimer(which int, newValue *Itimerval, oldValue *Itimerval) (err error) {\n\t_, _, e1 := Syscall(SYS_SETITIMER, uintptr(which), uintptr(unsafe.Pointer(newValue)), uintptr(unsafe.Pointer(oldValue)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc rtSigprocmask(how int, set *Sigset_t, oldset *Sigset_t, sigsetsize uintptr) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_RT_SIGPROCMASK, uintptr(how), uintptr(unsafe.Pointer(set)), uintptr(unsafe.Pointer(oldset)), uintptr(sigsetsize), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tRawSyscallNoError(SYS_GETRESUID, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tRawSyscallNoError(SYS_GETRESGID, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc schedSetattr(pid int, attr *SchedAttr, flags uint) (err error) {\n\t_, _, e1 := Syscall(SYS_SCHED_SETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc schedGetattr(pid int, attr *SchedAttr, size uint, flags uint) (err error) {\n\t_, _, e1 := Syscall6(SYS_SCHED_GETATTR, uintptr(pid), uintptr(unsafe.Pointer(attr)), uintptr(size), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error) {\n\t_, _, e1 := Syscall6(SYS_CACHESTAT, uintptr(fd), uintptr(unsafe.Pointer(crange)), uintptr(unsafe.Pointer(cstat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mseal(b []byte, flags uint) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSEAL, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_386.go",
    "content": "// go run mksyscall.go -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go",
    "content": "// go run mksyscall.go -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdSecret(flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go",
    "content": "// go run mksyscall.go -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID32, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID32, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID32, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID32, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc armSyncFileRange(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_ARM_SYNC_FILE_RANGE, uintptr(fd), uintptr(flags), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go",
    "content": "// go run mksyscall.go -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdSecret(flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go",
    "content": "// go run mksyscall.go -tags linux,loong64 syscall_linux.go syscall_linux_loong64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && loong64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go",
    "content": "// go run mksyscall.go -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && mips\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r0)<<32 | int64(r1))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset>>32), uintptr(offset), uintptr(length>>32), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go",
    "content": "// go run mksyscall.go -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && mips64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, st *stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go",
    "content": "// go run mksyscall.go -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && mips64le\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, st *stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstatat(dirfd int, path string, st *stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, st *stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go",
    "content": "// go run mksyscall.go -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && mipsle\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(mask>>32), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_FADVISE64, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_ppc.go",
    "content": "// go run mksyscall.go -b32 -tags linux,ppc syscall_linux.go syscall_linux_ppc.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && ppc\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask>>32), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(int64(r0)<<32 | int64(r1))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length>>32), uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset>>32), uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length>>32), uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrlimit(resource int, rlim *rlimit32) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc syncFileRange2(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go",
    "content": "// go run mksyscall.go -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && ppc64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc syncFileRange2(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go",
    "content": "// go run mksyscall.go -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && ppc64le\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ioperm(from int, num int, on int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Iopl(level int) (err error) {\n\t_, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Time(t *Time_t) (tt Time_t, err error) {\n\tr0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0)\n\ttt = Time_t(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc syncFileRange2(fd int, flags int, off int64, n int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(flags), uintptr(off), uintptr(n), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_riscv64.go",
    "content": "// go run mksyscall.go -tags linux,riscv64 syscall_linux.go syscall_linux_riscv64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && riscv64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc MemfdSecret(flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc riscvHWProbe(pairs []RISCVHWProbePairs, cpuCount uintptr, cpus *CPUSet, flags uint) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(pairs) > 0 {\n\t\t_p0 = unsafe.Pointer(&pairs[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_RISCV_HWPROBE, uintptr(_p0), uintptr(len(pairs)), uintptr(cpuCount), uintptr(unsafe.Pointer(cpus)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go",
    "content": "// go run mksyscall.go -tags linux,s390x syscall_linux.go syscall_linux_s390x.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && s390x\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_NEWFSTATAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(cmdline)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go",
    "content": "// go run mksyscall.go -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go syscall_linux_alarm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build linux && sparc64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) {\n\t_, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fallocate(fd int, mode uint32, off int64, len int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tee(rfd int, wfd int, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT64, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, buf *Statfs_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\tr0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence))\n\toff = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsgid(gid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setfsuid(uid int) (prev int, err error) {\n\tr0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0)\n\tprev = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags))\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc SyncFileRange(fd int, off int64, n int64, flags int) (err error) {\n\t_, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tr0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tnn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset))\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(dirfd int, path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Alarm(seconds uint) (remaining uint, err error) {\n\tr0, _, e1 := Syscall(SYS_ALARM, uintptr(seconds), 0, 0)\n\tremaining = uint(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go",
    "content": "// go run mksyscall.go -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build netbsd && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go",
    "content": "// go run mksyscall.go -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build netbsd && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go",
    "content": "// go run mksyscall.go -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build netbsd && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), 0, uintptr(length), uintptr(length>>32), uintptr(advice), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go",
    "content": "// go run mksyscall.go -netbsd -tags netbsd,arm64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build netbsd && arm64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS___GETCWD, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_DUP3, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tSyscall(SYS_EXIT, uintptr(code), 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(file)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attrname)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fadvise(fd int, offset int64, length int64, advice int) (err error) {\n\t_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), 0, uintptr(length), uintptr(advice))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs1(fd int, buf *Statvfs_t, flags int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSTATVFS1, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKFIFOAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs1(path string, buf *Statvfs_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_STATVFS1, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := Syscall(SYS_SYNC, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mremapNetBSD(oldp uintptr, oldsize uintptr, newp uintptr, newsize uintptr, flags int) (xaddr uintptr, err error) {\n\tr0, _, e1 := Syscall6(SYS_MREMAP, uintptr(oldp), uintptr(oldsize), uintptr(newp), uintptr(newsize), uintptr(flags), 0)\n\txaddr = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go",
    "content": "// go run mksyscall.go -l32 -openbsd -libc -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && 386\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s",
    "content": "// go run mkasm.go openbsd 386\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getresuid_trampoline_addr(SB)/4, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getresgid_trampoline_addr(SB)/4, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/4, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getfsstat_trampoline_addr(SB)/4, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pledge_trampoline_addr(SB)/4, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unveil_trampoline_addr(SB)/4, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go",
    "content": "// go run mksyscall.go -openbsd -libc -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s",
    "content": "// go run mkasm.go openbsd amd64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go",
    "content": "// go run mksyscall.go -l32 -openbsd -arm -libc -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && arm\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_ftruncate_trampoline_addr, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, r1, e1 := syscall_syscall6(libc_lseek_trampoline_addr, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0)\n\tnewoffset = int64(int64(r1)<<32 | int64(r0))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall9(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0)\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s",
    "content": "// go run mkasm.go openbsd arm\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getgroups_trampoline_addr(SB)/4, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setgroups_trampoline_addr(SB)/4, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_wait4_trampoline_addr(SB)/4, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_accept_trampoline_addr(SB)/4, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_bind_trampoline_addr(SB)/4, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_connect_trampoline_addr(SB)/4, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_socket_trampoline_addr(SB)/4, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsockopt_trampoline_addr(SB)/4, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setsockopt_trampoline_addr(SB)/4, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpeername_trampoline_addr(SB)/4, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsockname_trampoline_addr(SB)/4, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_shutdown_trampoline_addr(SB)/4, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_socketpair_trampoline_addr(SB)/4, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_recvfrom_trampoline_addr(SB)/4, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sendto_trampoline_addr(SB)/4, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_recvmsg_trampoline_addr(SB)/4, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sendmsg_trampoline_addr(SB)/4, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kevent_trampoline_addr(SB)/4, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_utimes_trampoline_addr(SB)/4, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_futimes_trampoline_addr(SB)/4, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_poll_trampoline_addr(SB)/4, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_madvise_trampoline_addr(SB)/4, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mlock_trampoline_addr(SB)/4, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mlockall_trampoline_addr(SB)/4, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mprotect_trampoline_addr(SB)/4, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_msync_trampoline_addr(SB)/4, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munlock_trampoline_addr(SB)/4, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munlockall_trampoline_addr(SB)/4, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pipe2_trampoline_addr(SB)/4, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getdents_trampoline_addr(SB)/4, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getcwd_trampoline_addr(SB)/4, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getresuid_trampoline_addr(SB)/4, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getresgid_trampoline_addr(SB)/4, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ioctl_trampoline_addr(SB)/4, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sysctl_trampoline_addr(SB)/4, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fcntl_trampoline_addr(SB)/4, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ppoll_trampoline_addr(SB)/4, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_access_trampoline_addr(SB)/4, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_adjtime_trampoline_addr(SB)/4, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chdir_trampoline_addr(SB)/4, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chflags_trampoline_addr(SB)/4, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chmod_trampoline_addr(SB)/4, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chown_trampoline_addr(SB)/4, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_chroot_trampoline_addr(SB)/4, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/4, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_close_trampoline_addr(SB)/4, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup_trampoline_addr(SB)/4, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup2_trampoline_addr(SB)/4, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_dup3_trampoline_addr(SB)/4, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_exit_trampoline_addr(SB)/4, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_faccessat_trampoline_addr(SB)/4, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchdir_trampoline_addr(SB)/4, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchflags_trampoline_addr(SB)/4, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchmod_trampoline_addr(SB)/4, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchmodat_trampoline_addr(SB)/4, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchown_trampoline_addr(SB)/4, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fchownat_trampoline_addr(SB)/4, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_flock_trampoline_addr(SB)/4, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fpathconf_trampoline_addr(SB)/4, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstat_trampoline_addr(SB)/4, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstatat_trampoline_addr(SB)/4, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fstatfs_trampoline_addr(SB)/4, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_fsync_trampoline_addr(SB)/4, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_ftruncate_trampoline_addr(SB)/4, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getegid_trampoline_addr(SB)/4, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_geteuid_trampoline_addr(SB)/4, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getgid_trampoline_addr(SB)/4, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpgid_trampoline_addr(SB)/4, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpgrp_trampoline_addr(SB)/4, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpid_trampoline_addr(SB)/4, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getppid_trampoline_addr(SB)/4, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getpriority_trampoline_addr(SB)/4, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrlimit_trampoline_addr(SB)/4, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrtable_trampoline_addr(SB)/4, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getrusage_trampoline_addr(SB)/4, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getsid_trampoline_addr(SB)/4, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/4, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getuid_trampoline_addr(SB)/4, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_issetugid_trampoline_addr(SB)/4, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kill_trampoline_addr(SB)/4, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_kqueue_trampoline_addr(SB)/4, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lchown_trampoline_addr(SB)/4, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_link_trampoline_addr(SB)/4, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_linkat_trampoline_addr(SB)/4, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_listen_trampoline_addr(SB)/4, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lstat_trampoline_addr(SB)/4, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkdir_trampoline_addr(SB)/4, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkdirat_trampoline_addr(SB)/4, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkfifo_trampoline_addr(SB)/4, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/4, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mknod_trampoline_addr(SB)/4, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_nanosleep_trampoline_addr(SB)/4, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_open_trampoline_addr(SB)/4, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_openat_trampoline_addr(SB)/4, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pathconf_trampoline_addr(SB)/4, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pread_trampoline_addr(SB)/4, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_read_trampoline_addr(SB)/4, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_readlink_trampoline_addr(SB)/4, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_readlinkat_trampoline_addr(SB)/4, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_rename_trampoline_addr(SB)/4, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_renameat_trampoline_addr(SB)/4, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_revoke_trampoline_addr(SB)/4, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_rmdir_trampoline_addr(SB)/4, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_lseek_trampoline_addr(SB)/4, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_select_trampoline_addr(SB)/4, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setegid_trampoline_addr(SB)/4, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_seteuid_trampoline_addr(SB)/4, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setgid_trampoline_addr(SB)/4, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setlogin_trampoline_addr(SB)/4, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setpgid_trampoline_addr(SB)/4, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setpriority_trampoline_addr(SB)/4, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setregid_trampoline_addr(SB)/4, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setreuid_trampoline_addr(SB)/4, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setresgid_trampoline_addr(SB)/4, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setresuid_trampoline_addr(SB)/4, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setrtable_trampoline_addr(SB)/4, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setsid_trampoline_addr(SB)/4, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_settimeofday_trampoline_addr(SB)/4, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_setuid_trampoline_addr(SB)/4, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_stat_trampoline_addr(SB)/4, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_statfs_trampoline_addr(SB)/4, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_symlink_trampoline_addr(SB)/4, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_symlinkat_trampoline_addr(SB)/4, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_sync_trampoline_addr(SB)/4, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_truncate_trampoline_addr(SB)/4, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_umask_trampoline_addr(SB)/4, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unlink_trampoline_addr(SB)/4, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unlinkat_trampoline_addr(SB)/4, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unmount_trampoline_addr(SB)/4, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_write_trampoline_addr(SB)/4, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_mmap_trampoline_addr(SB)/4, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_munmap_trampoline_addr(SB)/4, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_getfsstat_trampoline_addr(SB)/4, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_utimensat_trampoline_addr(SB)/4, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_pledge_trampoline_addr(SB)/4, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $4\nDATA\t·libc_unveil_trampoline_addr(SB)/4, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s",
    "content": "// go run mkasm.go openbsd arm64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go",
    "content": "// go run mksyscall.go -openbsd -libc -tags openbsd,mips64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_mips64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && mips64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s",
    "content": "// go run mkasm.go openbsd mips64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go",
    "content": "// go run mksyscall.go -openbsd -libc -tags openbsd,ppc64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_ppc64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && ppc64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s",
    "content": "// go run mkasm.go openbsd ppc64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getgroups(SB)\n\tRET\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setgroups(SB)\n\tRET\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_wait4(SB)\n\tRET\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_accept(SB)\n\tRET\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_bind(SB)\n\tRET\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_connect(SB)\n\tRET\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_socket(SB)\n\tRET\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getsockopt(SB)\n\tRET\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setsockopt(SB)\n\tRET\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpeername(SB)\n\tRET\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getsockname(SB)\n\tRET\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_shutdown(SB)\n\tRET\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_socketpair(SB)\n\tRET\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_recvfrom(SB)\n\tRET\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_sendto(SB)\n\tRET\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_recvmsg(SB)\n\tRET\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_sendmsg(SB)\n\tRET\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_kevent(SB)\n\tRET\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_utimes(SB)\n\tRET\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_futimes(SB)\n\tRET\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_poll(SB)\n\tRET\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_madvise(SB)\n\tRET\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mlock(SB)\n\tRET\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mlockall(SB)\n\tRET\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mprotect(SB)\n\tRET\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_msync(SB)\n\tRET\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_munlock(SB)\n\tRET\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_munlockall(SB)\n\tRET\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pipe2(SB)\n\tRET\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getdents(SB)\n\tRET\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getcwd(SB)\n\tRET\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getresuid(SB)\n\tRET\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getresgid(SB)\n\tRET\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_ioctl(SB)\n\tRET\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_sysctl(SB)\n\tRET\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fcntl(SB)\n\tRET\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_ppoll(SB)\n\tRET\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_access(SB)\n\tRET\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_adjtime(SB)\n\tRET\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chdir(SB)\n\tRET\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chflags(SB)\n\tRET\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chmod(SB)\n\tRET\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chown(SB)\n\tRET\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_chroot(SB)\n\tRET\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_clock_gettime(SB)\n\tRET\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_close(SB)\n\tRET\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_dup(SB)\n\tRET\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_dup2(SB)\n\tRET\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_dup3(SB)\n\tRET\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_exit(SB)\n\tRET\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_faccessat(SB)\n\tRET\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchdir(SB)\n\tRET\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchflags(SB)\n\tRET\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchmod(SB)\n\tRET\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchmodat(SB)\n\tRET\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchown(SB)\n\tRET\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fchownat(SB)\n\tRET\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_flock(SB)\n\tRET\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fpathconf(SB)\n\tRET\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fstat(SB)\n\tRET\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fstatat(SB)\n\tRET\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fstatfs(SB)\n\tRET\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_fsync(SB)\n\tRET\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_ftruncate(SB)\n\tRET\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getegid(SB)\n\tRET\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_geteuid(SB)\n\tRET\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getgid(SB)\n\tRET\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpgid(SB)\n\tRET\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpgrp(SB)\n\tRET\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpid(SB)\n\tRET\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getppid(SB)\n\tRET\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getpriority(SB)\n\tRET\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getrlimit(SB)\n\tRET\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getrtable(SB)\n\tRET\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getrusage(SB)\n\tRET\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getsid(SB)\n\tRET\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_gettimeofday(SB)\n\tRET\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getuid(SB)\n\tRET\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_issetugid(SB)\n\tRET\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_kill(SB)\n\tRET\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_kqueue(SB)\n\tRET\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_lchown(SB)\n\tRET\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_link(SB)\n\tRET\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_linkat(SB)\n\tRET\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_listen(SB)\n\tRET\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_lstat(SB)\n\tRET\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mkdir(SB)\n\tRET\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mkdirat(SB)\n\tRET\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mkfifo(SB)\n\tRET\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mkfifoat(SB)\n\tRET\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mknod(SB)\n\tRET\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mknodat(SB)\n\tRET\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mount(SB)\n\tRET\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_nanosleep(SB)\n\tRET\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_open(SB)\n\tRET\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_openat(SB)\n\tRET\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pathconf(SB)\n\tRET\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pread(SB)\n\tRET\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pwrite(SB)\n\tRET\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_read(SB)\n\tRET\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_readlink(SB)\n\tRET\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_readlinkat(SB)\n\tRET\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_rename(SB)\n\tRET\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_renameat(SB)\n\tRET\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_revoke(SB)\n\tRET\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_rmdir(SB)\n\tRET\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_lseek(SB)\n\tRET\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_select(SB)\n\tRET\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setegid(SB)\n\tRET\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_seteuid(SB)\n\tRET\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setgid(SB)\n\tRET\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setlogin(SB)\n\tRET\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setpgid(SB)\n\tRET\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setpriority(SB)\n\tRET\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setregid(SB)\n\tRET\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setreuid(SB)\n\tRET\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setresgid(SB)\n\tRET\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setresuid(SB)\n\tRET\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setrtable(SB)\n\tRET\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setsid(SB)\n\tRET\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_settimeofday(SB)\n\tRET\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_setuid(SB)\n\tRET\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_stat(SB)\n\tRET\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_statfs(SB)\n\tRET\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_symlink(SB)\n\tRET\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_symlinkat(SB)\n\tRET\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_sync(SB)\n\tRET\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_truncate(SB)\n\tRET\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_umask(SB)\n\tRET\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_unlink(SB)\n\tRET\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_unlinkat(SB)\n\tRET\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_unmount(SB)\n\tRET\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_write(SB)\n\tRET\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_mmap(SB)\n\tRET\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_munmap(SB)\n\tRET\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_getfsstat(SB)\n\tRET\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_utimensat(SB)\n\tRET\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_pledge(SB)\n\tRET\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tCALL\tlibc_unveil(SB)\n\tRET\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go",
    "content": "// go run mksyscall.go -openbsd -libc -tags openbsd,riscv64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_riscv64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build openbsd && riscv64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgroups_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_wait4_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_accept_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_accept accept \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_bind_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_bind bind \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_connect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_connect connect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socket_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socket socket \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockopt getsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsockopt_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpeername_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpeername getpeername \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsockname_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsockname getsockname \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_shutdown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_shutdown shutdown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_socketpair_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_socketpair socketpair \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvfrom_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendto_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendto sendto \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_recvmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_recvmsg recvmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sendmsg_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sendmsg sendmsg \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kevent_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kevent kevent \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimes(fd int, timeval *[2]Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_futimes_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_futimes futimes \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_poll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, behav int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_madvise_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mprotect_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_msync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munlockall_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_pipe2_trampoline_addr, uintptr(unsafe.Pointer(p)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pipe2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getdents_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getdents_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getcwd_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresuid(ruid *_C_int, euid *_C_int, suid *_C_int) {\n\tsyscall_rawSyscall(libc_getresuid_trampoline_addr, uintptr(unsafe.Pointer(ruid)), uintptr(unsafe.Pointer(euid)), uintptr(unsafe.Pointer(suid)))\n\treturn\n}\n\nvar libc_getresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresuid getresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getresgid(rgid *_C_int, egid *_C_int, sgid *_C_int) {\n\tsyscall_rawSyscall(libc_getresgid_trampoline_addr, uintptr(unsafe.Pointer(rgid)), uintptr(unsafe.Pointer(egid)), uintptr(unsafe.Pointer(sgid)))\n\treturn\n}\n\nvar libc_getresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getresgid getresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req uint, arg uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ioctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(mib) > 0 {\n\t\t_p0 = unsafe.Pointer(&mib[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\t_, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sysctl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sysctl sysctl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fcntl_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_ppoll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ppoll_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ppoll ppoll \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_access_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_adjtime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chflags(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chflags chflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_chroot_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_clock_gettime_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_clock_gettime clock_gettime \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_close_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(from int, to int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup2_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup3(from int, to int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_dup3_trampoline_addr, uintptr(from), uintptr(to), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_dup3_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_dup3 dup3 \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsyscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0)\n\treturn\n}\n\nvar libc_exit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_faccessat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchflags(fd int, flags int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchflags_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchflags fchflags \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchmodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fchownat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_flock_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fpathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatfs(fd int, stat *Statfs_t) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fstatfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fstatfs fstatfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_fsync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_ftruncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\nvar libc_getegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_geteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\nvar libc_getgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgrp int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0)\n\tpgrp = int(r0)\n\treturn\n}\n\nvar libc_getpgrp_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\nvar libc_getpid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\nvar libc_getppid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0)\n\tprio = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrlimit_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrtable() (rtable int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getrtable_trampoline_addr, 0, 0, 0)\n\trtable = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrtable getrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getrusage_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tv)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_gettimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\nvar libc_getuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Issetugid() (tainted bool) {\n\tr0, _, _ := syscall_syscall(libc_issetugid_trampoline_addr, 0, 0, 0)\n\ttainted = bool(r0 != 0)\n\treturn\n}\n\nvar libc_issetugid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_issetugid issetugid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kill_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kqueue() (fd int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_kqueue_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_kqueue kqueue \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lchown_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_link_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_linkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_linkat linkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_listen_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_listen listen \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkdirat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifo_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mkfifoat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mkfifoat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknod_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mknodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mknodat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(fsType)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(dir)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mount mount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_nanosleep_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_open_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_openat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pathconf_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pread_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pwrite_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_read_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlinkat(dirfd int, path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p1 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_readlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_readlinkat readlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rename_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(fromfd int, from string, tofd int, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_renameat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Revoke(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_revoke_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_revoke revoke \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_rmdir_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence))\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_lseek_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_select_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setegid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_seteuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setlogin(name string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(name)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setlogin_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setlogin setlogin \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setpriority_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setregid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setreuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresgid(rgid int, egid int, sgid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresgid_trampoline_addr, uintptr(rgid), uintptr(egid), uintptr(sgid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresgid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresgid setresgid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setresuid(ruid int, euid int, suid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setresuid_trampoline_addr, uintptr(ruid), uintptr(euid), uintptr(suid))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setresuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setresuid setresuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrtable(rtable int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setrtable_trampoline_addr, uintptr(rtable), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setrtable_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setrtable setrtable \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setsid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Settimeofday(tp *Timeval) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_settimeofday_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_settimeofday settimeofday \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_setuid_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_stat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statfs(path string, stat *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_statfs_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_statfs statfs \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlinkat(oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_symlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_symlinkat symlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_sync_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_truncate_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(newmask int) (oldmask int) {\n\tr0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\nvar libc_umask_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlink_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unlinkat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unmount_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unmount unmount \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\tr0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_write_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_mmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_munmap_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getfsstat(stat *Statfs_t, bufsize uintptr, flags int) (n int, err error) {\n\tr0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(unsafe.Pointer(stat)), uintptr(bufsize), uintptr(flags))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_getfsstat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_getfsstat getfsstat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := syscall_syscall6(libc_utimensat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_utimensat_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pledge(promises *byte, execpromises *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_pledge_trampoline_addr, uintptr(unsafe.Pointer(promises)), uintptr(unsafe.Pointer(execpromises)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_pledge_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_pledge pledge \"libc.so\"\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unveil(path *byte, flags *byte) (err error) {\n\t_, _, e1 := syscall_syscall(libc_unveil_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(flags)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\nvar libc_unveil_trampoline_addr uintptr\n\n//go:cgo_import_dynamic libc_unveil unveil \"libc.so\"\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s",
    "content": "// go run mkasm.go openbsd riscv64\n// Code generated by the command above; DO NOT EDIT.\n\n#include \"textflag.h\"\n\nTEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgroups(SB)\nGLOBL\t·libc_getgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB)\n\nTEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgroups(SB)\nGLOBL\t·libc_setgroups_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB)\n\nTEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_wait4(SB)\nGLOBL\t·libc_wait4_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB)\n\nTEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_accept(SB)\nGLOBL\t·libc_accept_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB)\n\nTEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_bind(SB)\nGLOBL\t·libc_bind_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB)\n\nTEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_connect(SB)\nGLOBL\t·libc_connect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB)\n\nTEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socket(SB)\nGLOBL\t·libc_socket_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB)\n\nTEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockopt(SB)\nGLOBL\t·libc_getsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB)\n\nTEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsockopt(SB)\nGLOBL\t·libc_setsockopt_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB)\n\nTEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpeername(SB)\nGLOBL\t·libc_getpeername_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB)\n\nTEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsockname(SB)\nGLOBL\t·libc_getsockname_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB)\n\nTEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_shutdown(SB)\nGLOBL\t·libc_shutdown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB)\n\nTEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_socketpair(SB)\nGLOBL\t·libc_socketpair_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB)\n\nTEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvfrom(SB)\nGLOBL\t·libc_recvfrom_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB)\n\nTEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendto(SB)\nGLOBL\t·libc_sendto_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB)\n\nTEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_recvmsg(SB)\nGLOBL\t·libc_recvmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB)\n\nTEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sendmsg(SB)\nGLOBL\t·libc_sendmsg_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB)\n\nTEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kevent(SB)\nGLOBL\t·libc_kevent_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB)\n\nTEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimes(SB)\nGLOBL\t·libc_utimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB)\n\nTEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_futimes(SB)\nGLOBL\t·libc_futimes_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB)\n\nTEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_poll(SB)\nGLOBL\t·libc_poll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB)\n\nTEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_madvise(SB)\nGLOBL\t·libc_madvise_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB)\n\nTEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlock(SB)\nGLOBL\t·libc_mlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB)\n\nTEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mlockall(SB)\nGLOBL\t·libc_mlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB)\n\nTEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mprotect(SB)\nGLOBL\t·libc_mprotect_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB)\n\nTEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_msync(SB)\nGLOBL\t·libc_msync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB)\n\nTEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlock(SB)\nGLOBL\t·libc_munlock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB)\n\nTEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munlockall(SB)\nGLOBL\t·libc_munlockall_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB)\n\nTEXT libc_pipe2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pipe2(SB)\nGLOBL\t·libc_pipe2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pipe2_trampoline_addr(SB)/8, $libc_pipe2_trampoline<>(SB)\n\nTEXT libc_getdents_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getdents(SB)\nGLOBL\t·libc_getdents_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getdents_trampoline_addr(SB)/8, $libc_getdents_trampoline<>(SB)\n\nTEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getcwd(SB)\nGLOBL\t·libc_getcwd_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB)\n\nTEXT libc_getresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresuid(SB)\nGLOBL\t·libc_getresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresuid_trampoline_addr(SB)/8, $libc_getresuid_trampoline<>(SB)\n\nTEXT libc_getresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getresgid(SB)\nGLOBL\t·libc_getresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getresgid_trampoline_addr(SB)/8, $libc_getresgid_trampoline<>(SB)\n\nTEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ioctl(SB)\nGLOBL\t·libc_ioctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB)\n\nTEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sysctl(SB)\nGLOBL\t·libc_sysctl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB)\n\nTEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fcntl(SB)\nGLOBL\t·libc_fcntl_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB)\n\nTEXT libc_ppoll_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ppoll(SB)\nGLOBL\t·libc_ppoll_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ppoll_trampoline_addr(SB)/8, $libc_ppoll_trampoline<>(SB)\n\nTEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_access(SB)\nGLOBL\t·libc_access_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB)\n\nTEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_adjtime(SB)\nGLOBL\t·libc_adjtime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB)\n\nTEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chdir(SB)\nGLOBL\t·libc_chdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB)\n\nTEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chflags(SB)\nGLOBL\t·libc_chflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB)\n\nTEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chmod(SB)\nGLOBL\t·libc_chmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB)\n\nTEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chown(SB)\nGLOBL\t·libc_chown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB)\n\nTEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_chroot(SB)\nGLOBL\t·libc_chroot_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB)\n\nTEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_clock_gettime(SB)\nGLOBL\t·libc_clock_gettime_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB)\n\nTEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_close(SB)\nGLOBL\t·libc_close_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB)\n\nTEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup(SB)\nGLOBL\t·libc_dup_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB)\n\nTEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup2(SB)\nGLOBL\t·libc_dup2_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB)\n\nTEXT libc_dup3_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_dup3(SB)\nGLOBL\t·libc_dup3_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_dup3_trampoline_addr(SB)/8, $libc_dup3_trampoline<>(SB)\n\nTEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_exit(SB)\nGLOBL\t·libc_exit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB)\n\nTEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_faccessat(SB)\nGLOBL\t·libc_faccessat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB)\n\nTEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchdir(SB)\nGLOBL\t·libc_fchdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB)\n\nTEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchflags(SB)\nGLOBL\t·libc_fchflags_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB)\n\nTEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmod(SB)\nGLOBL\t·libc_fchmod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB)\n\nTEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchmodat(SB)\nGLOBL\t·libc_fchmodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB)\n\nTEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchown(SB)\nGLOBL\t·libc_fchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB)\n\nTEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fchownat(SB)\nGLOBL\t·libc_fchownat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB)\n\nTEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_flock(SB)\nGLOBL\t·libc_flock_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB)\n\nTEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fpathconf(SB)\nGLOBL\t·libc_fpathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB)\n\nTEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstat(SB)\nGLOBL\t·libc_fstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB)\n\nTEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatat(SB)\nGLOBL\t·libc_fstatat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB)\n\nTEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fstatfs(SB)\nGLOBL\t·libc_fstatfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB)\n\nTEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_fsync(SB)\nGLOBL\t·libc_fsync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB)\n\nTEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_ftruncate(SB)\nGLOBL\t·libc_ftruncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB)\n\nTEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getegid(SB)\nGLOBL\t·libc_getegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB)\n\nTEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_geteuid(SB)\nGLOBL\t·libc_geteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB)\n\nTEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getgid(SB)\nGLOBL\t·libc_getgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB)\n\nTEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgid(SB)\nGLOBL\t·libc_getpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB)\n\nTEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpgrp(SB)\nGLOBL\t·libc_getpgrp_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB)\n\nTEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpid(SB)\nGLOBL\t·libc_getpid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB)\n\nTEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getppid(SB)\nGLOBL\t·libc_getppid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB)\n\nTEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getpriority(SB)\nGLOBL\t·libc_getpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB)\n\nTEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrlimit(SB)\nGLOBL\t·libc_getrlimit_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB)\n\nTEXT libc_getrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrtable(SB)\nGLOBL\t·libc_getrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrtable_trampoline_addr(SB)/8, $libc_getrtable_trampoline<>(SB)\n\nTEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getrusage(SB)\nGLOBL\t·libc_getrusage_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB)\n\nTEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getsid(SB)\nGLOBL\t·libc_getsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB)\n\nTEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_gettimeofday(SB)\nGLOBL\t·libc_gettimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB)\n\nTEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getuid(SB)\nGLOBL\t·libc_getuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB)\n\nTEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_issetugid(SB)\nGLOBL\t·libc_issetugid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB)\n\nTEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kill(SB)\nGLOBL\t·libc_kill_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB)\n\nTEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_kqueue(SB)\nGLOBL\t·libc_kqueue_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB)\n\nTEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lchown(SB)\nGLOBL\t·libc_lchown_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB)\n\nTEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_link(SB)\nGLOBL\t·libc_link_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB)\n\nTEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_linkat(SB)\nGLOBL\t·libc_linkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB)\n\nTEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_listen(SB)\nGLOBL\t·libc_listen_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB)\n\nTEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lstat(SB)\nGLOBL\t·libc_lstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB)\n\nTEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdir(SB)\nGLOBL\t·libc_mkdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB)\n\nTEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkdirat(SB)\nGLOBL\t·libc_mkdirat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB)\n\nTEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifo(SB)\nGLOBL\t·libc_mkfifo_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB)\n\nTEXT libc_mkfifoat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mkfifoat(SB)\nGLOBL\t·libc_mkfifoat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mkfifoat_trampoline_addr(SB)/8, $libc_mkfifoat_trampoline<>(SB)\n\nTEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknod(SB)\nGLOBL\t·libc_mknod_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB)\n\nTEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mknodat(SB)\nGLOBL\t·libc_mknodat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB)\n\nTEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mount(SB)\nGLOBL\t·libc_mount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB)\n\nTEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_nanosleep(SB)\nGLOBL\t·libc_nanosleep_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_nanosleep_trampoline_addr(SB)/8, $libc_nanosleep_trampoline<>(SB)\n\nTEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_open(SB)\nGLOBL\t·libc_open_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB)\n\nTEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_openat(SB)\nGLOBL\t·libc_openat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB)\n\nTEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pathconf(SB)\nGLOBL\t·libc_pathconf_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB)\n\nTEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pread(SB)\nGLOBL\t·libc_pread_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB)\n\nTEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pwrite(SB)\nGLOBL\t·libc_pwrite_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)\n\nTEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_read(SB)\nGLOBL\t·libc_read_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB)\n\nTEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlink(SB)\nGLOBL\t·libc_readlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB)\n\nTEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_readlinkat(SB)\nGLOBL\t·libc_readlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB)\n\nTEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rename(SB)\nGLOBL\t·libc_rename_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB)\n\nTEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_renameat(SB)\nGLOBL\t·libc_renameat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB)\n\nTEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_revoke(SB)\nGLOBL\t·libc_revoke_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB)\n\nTEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_rmdir(SB)\nGLOBL\t·libc_rmdir_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB)\n\nTEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_lseek(SB)\nGLOBL\t·libc_lseek_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB)\n\nTEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_select(SB)\nGLOBL\t·libc_select_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB)\n\nTEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setegid(SB)\nGLOBL\t·libc_setegid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB)\n\nTEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_seteuid(SB)\nGLOBL\t·libc_seteuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB)\n\nTEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setgid(SB)\nGLOBL\t·libc_setgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB)\n\nTEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setlogin(SB)\nGLOBL\t·libc_setlogin_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB)\n\nTEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpgid(SB)\nGLOBL\t·libc_setpgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB)\n\nTEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setpriority(SB)\nGLOBL\t·libc_setpriority_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB)\n\nTEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setregid(SB)\nGLOBL\t·libc_setregid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB)\n\nTEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setreuid(SB)\nGLOBL\t·libc_setreuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB)\n\nTEXT libc_setresgid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresgid(SB)\nGLOBL\t·libc_setresgid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresgid_trampoline_addr(SB)/8, $libc_setresgid_trampoline<>(SB)\n\nTEXT libc_setresuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setresuid(SB)\nGLOBL\t·libc_setresuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setresuid_trampoline_addr(SB)/8, $libc_setresuid_trampoline<>(SB)\n\nTEXT libc_setrtable_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setrtable(SB)\nGLOBL\t·libc_setrtable_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setrtable_trampoline_addr(SB)/8, $libc_setrtable_trampoline<>(SB)\n\nTEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setsid(SB)\nGLOBL\t·libc_setsid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB)\n\nTEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_settimeofday(SB)\nGLOBL\t·libc_settimeofday_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB)\n\nTEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_setuid(SB)\nGLOBL\t·libc_setuid_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB)\n\nTEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_stat(SB)\nGLOBL\t·libc_stat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB)\n\nTEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_statfs(SB)\nGLOBL\t·libc_statfs_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB)\n\nTEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlink(SB)\nGLOBL\t·libc_symlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB)\n\nTEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_symlinkat(SB)\nGLOBL\t·libc_symlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB)\n\nTEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_sync(SB)\nGLOBL\t·libc_sync_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB)\n\nTEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_truncate(SB)\nGLOBL\t·libc_truncate_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB)\n\nTEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_umask(SB)\nGLOBL\t·libc_umask_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB)\n\nTEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlink(SB)\nGLOBL\t·libc_unlink_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB)\n\nTEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unlinkat(SB)\nGLOBL\t·libc_unlinkat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB)\n\nTEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unmount(SB)\nGLOBL\t·libc_unmount_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB)\n\nTEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_write(SB)\nGLOBL\t·libc_write_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB)\n\nTEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_mmap(SB)\nGLOBL\t·libc_mmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB)\n\nTEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_munmap(SB)\nGLOBL\t·libc_munmap_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB)\n\nTEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_getfsstat(SB)\nGLOBL\t·libc_getfsstat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB)\n\nTEXT libc_utimensat_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_utimensat(SB)\nGLOBL\t·libc_utimensat_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_utimensat_trampoline_addr(SB)/8, $libc_utimensat_trampoline<>(SB)\n\nTEXT libc_pledge_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_pledge(SB)\nGLOBL\t·libc_pledge_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_pledge_trampoline_addr(SB)/8, $libc_pledge_trampoline<>(SB)\n\nTEXT libc_unveil_trampoline<>(SB),NOSPLIT,$0-0\n\tJMP\tlibc_unveil(SB)\nGLOBL\t·libc_unveil_trampoline_addr(SB), RODATA, $8\nDATA\t·libc_unveil_trampoline_addr(SB)/8, $libc_unveil_trampoline<>(SB)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go",
    "content": "// go run mksyscall_solaris.go -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build solaris && amd64\n\npackage unix\n\nimport (\n\t\"syscall\"\n\t\"unsafe\"\n)\n\n//go:cgo_import_dynamic libc_pipe pipe \"libc.so\"\n//go:cgo_import_dynamic libc_pipe2 pipe2 \"libc.so\"\n//go:cgo_import_dynamic libc_getsockname getsockname \"libsocket.so\"\n//go:cgo_import_dynamic libc_getcwd getcwd \"libc.so\"\n//go:cgo_import_dynamic libc_getgroups getgroups \"libc.so\"\n//go:cgo_import_dynamic libc_setgroups setgroups \"libc.so\"\n//go:cgo_import_dynamic libc_wait4 wait4 \"libc.so\"\n//go:cgo_import_dynamic libc_gethostname gethostname \"libc.so\"\n//go:cgo_import_dynamic libc_utimes utimes \"libc.so\"\n//go:cgo_import_dynamic libc_utimensat utimensat \"libc.so\"\n//go:cgo_import_dynamic libc_fcntl fcntl \"libc.so\"\n//go:cgo_import_dynamic libc_futimesat futimesat \"libc.so\"\n//go:cgo_import_dynamic libc_accept accept \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg \"libsocket.so\"\n//go:cgo_import_dynamic libc_acct acct \"libc.so\"\n//go:cgo_import_dynamic libc___makedev __makedev \"libc.so\"\n//go:cgo_import_dynamic libc___major __major \"libc.so\"\n//go:cgo_import_dynamic libc___minor __minor \"libc.so\"\n//go:cgo_import_dynamic libc_ioctl ioctl \"libc.so\"\n//go:cgo_import_dynamic libc_poll poll \"libc.so\"\n//go:cgo_import_dynamic libc_access access \"libc.so\"\n//go:cgo_import_dynamic libc_adjtime adjtime \"libc.so\"\n//go:cgo_import_dynamic libc_chdir chdir \"libc.so\"\n//go:cgo_import_dynamic libc_chmod chmod \"libc.so\"\n//go:cgo_import_dynamic libc_chown chown \"libc.so\"\n//go:cgo_import_dynamic libc_chroot chroot \"libc.so\"\n//go:cgo_import_dynamic libc_clockgettime clockgettime \"libc.so\"\n//go:cgo_import_dynamic libc_close close \"libc.so\"\n//go:cgo_import_dynamic libc_creat creat \"libc.so\"\n//go:cgo_import_dynamic libc_dup dup \"libc.so\"\n//go:cgo_import_dynamic libc_dup2 dup2 \"libc.so\"\n//go:cgo_import_dynamic libc_exit exit \"libc.so\"\n//go:cgo_import_dynamic libc_faccessat faccessat \"libc.so\"\n//go:cgo_import_dynamic libc_fchdir fchdir \"libc.so\"\n//go:cgo_import_dynamic libc_fchmod fchmod \"libc.so\"\n//go:cgo_import_dynamic libc_fchmodat fchmodat \"libc.so\"\n//go:cgo_import_dynamic libc_fchown fchown \"libc.so\"\n//go:cgo_import_dynamic libc_fchownat fchownat \"libc.so\"\n//go:cgo_import_dynamic libc_fdatasync fdatasync \"libc.so\"\n//go:cgo_import_dynamic libc_flock flock \"libc.so\"\n//go:cgo_import_dynamic libc_fpathconf fpathconf \"libc.so\"\n//go:cgo_import_dynamic libc_fstat fstat \"libc.so\"\n//go:cgo_import_dynamic libc_fstatat fstatat \"libc.so\"\n//go:cgo_import_dynamic libc_fstatvfs fstatvfs \"libc.so\"\n//go:cgo_import_dynamic libc_getdents getdents \"libc.so\"\n//go:cgo_import_dynamic libc_getgid getgid \"libc.so\"\n//go:cgo_import_dynamic libc_getpid getpid \"libc.so\"\n//go:cgo_import_dynamic libc_getpgid getpgid \"libc.so\"\n//go:cgo_import_dynamic libc_getpgrp getpgrp \"libc.so\"\n//go:cgo_import_dynamic libc_geteuid geteuid \"libc.so\"\n//go:cgo_import_dynamic libc_getegid getegid \"libc.so\"\n//go:cgo_import_dynamic libc_getppid getppid \"libc.so\"\n//go:cgo_import_dynamic libc_getpriority getpriority \"libc.so\"\n//go:cgo_import_dynamic libc_getrlimit getrlimit \"libc.so\"\n//go:cgo_import_dynamic libc_getrusage getrusage \"libc.so\"\n//go:cgo_import_dynamic libc_getsid getsid \"libc.so\"\n//go:cgo_import_dynamic libc_gettimeofday gettimeofday \"libc.so\"\n//go:cgo_import_dynamic libc_getuid getuid \"libc.so\"\n//go:cgo_import_dynamic libc_kill kill \"libc.so\"\n//go:cgo_import_dynamic libc_lchown lchown \"libc.so\"\n//go:cgo_import_dynamic libc_link link \"libc.so\"\n//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten \"libsocket.so\"\n//go:cgo_import_dynamic libc_lstat lstat \"libc.so\"\n//go:cgo_import_dynamic libc_madvise madvise \"libc.so\"\n//go:cgo_import_dynamic libc_mkdir mkdir \"libc.so\"\n//go:cgo_import_dynamic libc_mkdirat mkdirat \"libc.so\"\n//go:cgo_import_dynamic libc_mkfifo mkfifo \"libc.so\"\n//go:cgo_import_dynamic libc_mkfifoat mkfifoat \"libc.so\"\n//go:cgo_import_dynamic libc_mknod mknod \"libc.so\"\n//go:cgo_import_dynamic libc_mknodat mknodat \"libc.so\"\n//go:cgo_import_dynamic libc_mlock mlock \"libc.so\"\n//go:cgo_import_dynamic libc_mlockall mlockall \"libc.so\"\n//go:cgo_import_dynamic libc_mprotect mprotect \"libc.so\"\n//go:cgo_import_dynamic libc_msync msync \"libc.so\"\n//go:cgo_import_dynamic libc_munlock munlock \"libc.so\"\n//go:cgo_import_dynamic libc_munlockall munlockall \"libc.so\"\n//go:cgo_import_dynamic libc_nanosleep nanosleep \"libc.so\"\n//go:cgo_import_dynamic libc_open open \"libc.so\"\n//go:cgo_import_dynamic libc_openat openat \"libc.so\"\n//go:cgo_import_dynamic libc_pathconf pathconf \"libc.so\"\n//go:cgo_import_dynamic libc_pause pause \"libc.so\"\n//go:cgo_import_dynamic libc_pread pread \"libc.so\"\n//go:cgo_import_dynamic libc_pwrite pwrite \"libc.so\"\n//go:cgo_import_dynamic libc_read read \"libc.so\"\n//go:cgo_import_dynamic libc_readlink readlink \"libc.so\"\n//go:cgo_import_dynamic libc_rename rename \"libc.so\"\n//go:cgo_import_dynamic libc_renameat renameat \"libc.so\"\n//go:cgo_import_dynamic libc_rmdir rmdir \"libc.so\"\n//go:cgo_import_dynamic libc_lseek lseek \"libc.so\"\n//go:cgo_import_dynamic libc_select select \"libc.so\"\n//go:cgo_import_dynamic libc_setegid setegid \"libc.so\"\n//go:cgo_import_dynamic libc_seteuid seteuid \"libc.so\"\n//go:cgo_import_dynamic libc_setgid setgid \"libc.so\"\n//go:cgo_import_dynamic libc_sethostname sethostname \"libc.so\"\n//go:cgo_import_dynamic libc_setpgid setpgid \"libc.so\"\n//go:cgo_import_dynamic libc_setpriority setpriority \"libc.so\"\n//go:cgo_import_dynamic libc_setregid setregid \"libc.so\"\n//go:cgo_import_dynamic libc_setreuid setreuid \"libc.so\"\n//go:cgo_import_dynamic libc_setsid setsid \"libc.so\"\n//go:cgo_import_dynamic libc_setuid setuid \"libc.so\"\n//go:cgo_import_dynamic libc_shutdown shutdown \"libsocket.so\"\n//go:cgo_import_dynamic libc_stat stat \"libc.so\"\n//go:cgo_import_dynamic libc_statvfs statvfs \"libc.so\"\n//go:cgo_import_dynamic libc_symlink symlink \"libc.so\"\n//go:cgo_import_dynamic libc_sync sync \"libc.so\"\n//go:cgo_import_dynamic libc_sysconf sysconf \"libc.so\"\n//go:cgo_import_dynamic libc_times times \"libc.so\"\n//go:cgo_import_dynamic libc_truncate truncate \"libc.so\"\n//go:cgo_import_dynamic libc_fsync fsync \"libc.so\"\n//go:cgo_import_dynamic libc_ftruncate ftruncate \"libc.so\"\n//go:cgo_import_dynamic libc_umask umask \"libc.so\"\n//go:cgo_import_dynamic libc_uname uname \"libc.so\"\n//go:cgo_import_dynamic libc_umount umount \"libc.so\"\n//go:cgo_import_dynamic libc_unlink unlink \"libc.so\"\n//go:cgo_import_dynamic libc_unlinkat unlinkat \"libc.so\"\n//go:cgo_import_dynamic libc_ustat ustat \"libc.so\"\n//go:cgo_import_dynamic libc_utime utime \"libc.so\"\n//go:cgo_import_dynamic libc___xnet_bind __xnet_bind \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_connect __xnet_connect \"libsocket.so\"\n//go:cgo_import_dynamic libc_mmap mmap \"libc.so\"\n//go:cgo_import_dynamic libc_munmap munmap \"libc.so\"\n//go:cgo_import_dynamic libc_sendfile sendfile \"libsendfile.so\"\n//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_socket __xnet_socket \"libsocket.so\"\n//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair \"libsocket.so\"\n//go:cgo_import_dynamic libc_write write \"libc.so\"\n//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt \"libsocket.so\"\n//go:cgo_import_dynamic libc_getpeername getpeername \"libsocket.so\"\n//go:cgo_import_dynamic libc_setsockopt setsockopt \"libsocket.so\"\n//go:cgo_import_dynamic libc_recvfrom recvfrom \"libsocket.so\"\n//go:cgo_import_dynamic libc_port_create port_create \"libc.so\"\n//go:cgo_import_dynamic libc_port_associate port_associate \"libc.so\"\n//go:cgo_import_dynamic libc_port_dissociate port_dissociate \"libc.so\"\n//go:cgo_import_dynamic libc_port_get port_get \"libc.so\"\n//go:cgo_import_dynamic libc_port_getn port_getn \"libc.so\"\n//go:cgo_import_dynamic libc_putmsg putmsg \"libc.so\"\n//go:cgo_import_dynamic libc_getmsg getmsg \"libc.so\"\n\n//go:linkname procpipe libc_pipe\n//go:linkname procpipe2 libc_pipe2\n//go:linkname procgetsockname libc_getsockname\n//go:linkname procGetcwd libc_getcwd\n//go:linkname procgetgroups libc_getgroups\n//go:linkname procsetgroups libc_setgroups\n//go:linkname procwait4 libc_wait4\n//go:linkname procgethostname libc_gethostname\n//go:linkname procutimes libc_utimes\n//go:linkname procutimensat libc_utimensat\n//go:linkname procfcntl libc_fcntl\n//go:linkname procfutimesat libc_futimesat\n//go:linkname procaccept libc_accept\n//go:linkname proc__xnet_recvmsg libc___xnet_recvmsg\n//go:linkname proc__xnet_sendmsg libc___xnet_sendmsg\n//go:linkname procacct libc_acct\n//go:linkname proc__makedev libc___makedev\n//go:linkname proc__major libc___major\n//go:linkname proc__minor libc___minor\n//go:linkname procioctl libc_ioctl\n//go:linkname procpoll libc_poll\n//go:linkname procAccess libc_access\n//go:linkname procAdjtime libc_adjtime\n//go:linkname procChdir libc_chdir\n//go:linkname procChmod libc_chmod\n//go:linkname procChown libc_chown\n//go:linkname procChroot libc_chroot\n//go:linkname procClockGettime libc_clockgettime\n//go:linkname procClose libc_close\n//go:linkname procCreat libc_creat\n//go:linkname procDup libc_dup\n//go:linkname procDup2 libc_dup2\n//go:linkname procExit libc_exit\n//go:linkname procFaccessat libc_faccessat\n//go:linkname procFchdir libc_fchdir\n//go:linkname procFchmod libc_fchmod\n//go:linkname procFchmodat libc_fchmodat\n//go:linkname procFchown libc_fchown\n//go:linkname procFchownat libc_fchownat\n//go:linkname procFdatasync libc_fdatasync\n//go:linkname procFlock libc_flock\n//go:linkname procFpathconf libc_fpathconf\n//go:linkname procFstat libc_fstat\n//go:linkname procFstatat libc_fstatat\n//go:linkname procFstatvfs libc_fstatvfs\n//go:linkname procGetdents libc_getdents\n//go:linkname procGetgid libc_getgid\n//go:linkname procGetpid libc_getpid\n//go:linkname procGetpgid libc_getpgid\n//go:linkname procGetpgrp libc_getpgrp\n//go:linkname procGeteuid libc_geteuid\n//go:linkname procGetegid libc_getegid\n//go:linkname procGetppid libc_getppid\n//go:linkname procGetpriority libc_getpriority\n//go:linkname procGetrlimit libc_getrlimit\n//go:linkname procGetrusage libc_getrusage\n//go:linkname procGetsid libc_getsid\n//go:linkname procGettimeofday libc_gettimeofday\n//go:linkname procGetuid libc_getuid\n//go:linkname procKill libc_kill\n//go:linkname procLchown libc_lchown\n//go:linkname procLink libc_link\n//go:linkname proc__xnet_llisten libc___xnet_llisten\n//go:linkname procLstat libc_lstat\n//go:linkname procMadvise libc_madvise\n//go:linkname procMkdir libc_mkdir\n//go:linkname procMkdirat libc_mkdirat\n//go:linkname procMkfifo libc_mkfifo\n//go:linkname procMkfifoat libc_mkfifoat\n//go:linkname procMknod libc_mknod\n//go:linkname procMknodat libc_mknodat\n//go:linkname procMlock libc_mlock\n//go:linkname procMlockall libc_mlockall\n//go:linkname procMprotect libc_mprotect\n//go:linkname procMsync libc_msync\n//go:linkname procMunlock libc_munlock\n//go:linkname procMunlockall libc_munlockall\n//go:linkname procNanosleep libc_nanosleep\n//go:linkname procOpen libc_open\n//go:linkname procOpenat libc_openat\n//go:linkname procPathconf libc_pathconf\n//go:linkname procPause libc_pause\n//go:linkname procpread libc_pread\n//go:linkname procpwrite libc_pwrite\n//go:linkname procread libc_read\n//go:linkname procReadlink libc_readlink\n//go:linkname procRename libc_rename\n//go:linkname procRenameat libc_renameat\n//go:linkname procRmdir libc_rmdir\n//go:linkname proclseek libc_lseek\n//go:linkname procSelect libc_select\n//go:linkname procSetegid libc_setegid\n//go:linkname procSeteuid libc_seteuid\n//go:linkname procSetgid libc_setgid\n//go:linkname procSethostname libc_sethostname\n//go:linkname procSetpgid libc_setpgid\n//go:linkname procSetpriority libc_setpriority\n//go:linkname procSetregid libc_setregid\n//go:linkname procSetreuid libc_setreuid\n//go:linkname procSetsid libc_setsid\n//go:linkname procSetuid libc_setuid\n//go:linkname procshutdown libc_shutdown\n//go:linkname procStat libc_stat\n//go:linkname procStatvfs libc_statvfs\n//go:linkname procSymlink libc_symlink\n//go:linkname procSync libc_sync\n//go:linkname procSysconf libc_sysconf\n//go:linkname procTimes libc_times\n//go:linkname procTruncate libc_truncate\n//go:linkname procFsync libc_fsync\n//go:linkname procFtruncate libc_ftruncate\n//go:linkname procUmask libc_umask\n//go:linkname procUname libc_uname\n//go:linkname procumount libc_umount\n//go:linkname procUnlink libc_unlink\n//go:linkname procUnlinkat libc_unlinkat\n//go:linkname procUstat libc_ustat\n//go:linkname procUtime libc_utime\n//go:linkname proc__xnet_bind libc___xnet_bind\n//go:linkname proc__xnet_connect libc___xnet_connect\n//go:linkname procmmap libc_mmap\n//go:linkname procmunmap libc_munmap\n//go:linkname procsendfile libc_sendfile\n//go:linkname proc__xnet_sendto libc___xnet_sendto\n//go:linkname proc__xnet_socket libc___xnet_socket\n//go:linkname proc__xnet_socketpair libc___xnet_socketpair\n//go:linkname procwrite libc_write\n//go:linkname proc__xnet_getsockopt libc___xnet_getsockopt\n//go:linkname procgetpeername libc_getpeername\n//go:linkname procsetsockopt libc_setsockopt\n//go:linkname procrecvfrom libc_recvfrom\n//go:linkname procport_create libc_port_create\n//go:linkname procport_associate libc_port_associate\n//go:linkname procport_dissociate libc_port_dissociate\n//go:linkname procport_get libc_port_get\n//go:linkname procport_getn libc_port_getn\n//go:linkname procputmsg libc_putmsg\n//go:linkname procgetmsg libc_getmsg\n\nvar (\n\tprocpipe,\n\tprocpipe2,\n\tprocgetsockname,\n\tprocGetcwd,\n\tprocgetgroups,\n\tprocsetgroups,\n\tprocwait4,\n\tprocgethostname,\n\tprocutimes,\n\tprocutimensat,\n\tprocfcntl,\n\tprocfutimesat,\n\tprocaccept,\n\tproc__xnet_recvmsg,\n\tproc__xnet_sendmsg,\n\tprocacct,\n\tproc__makedev,\n\tproc__major,\n\tproc__minor,\n\tprocioctl,\n\tprocpoll,\n\tprocAccess,\n\tprocAdjtime,\n\tprocChdir,\n\tprocChmod,\n\tprocChown,\n\tprocChroot,\n\tprocClockGettime,\n\tprocClose,\n\tprocCreat,\n\tprocDup,\n\tprocDup2,\n\tprocExit,\n\tprocFaccessat,\n\tprocFchdir,\n\tprocFchmod,\n\tprocFchmodat,\n\tprocFchown,\n\tprocFchownat,\n\tprocFdatasync,\n\tprocFlock,\n\tprocFpathconf,\n\tprocFstat,\n\tprocFstatat,\n\tprocFstatvfs,\n\tprocGetdents,\n\tprocGetgid,\n\tprocGetpid,\n\tprocGetpgid,\n\tprocGetpgrp,\n\tprocGeteuid,\n\tprocGetegid,\n\tprocGetppid,\n\tprocGetpriority,\n\tprocGetrlimit,\n\tprocGetrusage,\n\tprocGetsid,\n\tprocGettimeofday,\n\tprocGetuid,\n\tprocKill,\n\tprocLchown,\n\tprocLink,\n\tproc__xnet_llisten,\n\tprocLstat,\n\tprocMadvise,\n\tprocMkdir,\n\tprocMkdirat,\n\tprocMkfifo,\n\tprocMkfifoat,\n\tprocMknod,\n\tprocMknodat,\n\tprocMlock,\n\tprocMlockall,\n\tprocMprotect,\n\tprocMsync,\n\tprocMunlock,\n\tprocMunlockall,\n\tprocNanosleep,\n\tprocOpen,\n\tprocOpenat,\n\tprocPathconf,\n\tprocPause,\n\tprocpread,\n\tprocpwrite,\n\tprocread,\n\tprocReadlink,\n\tprocRename,\n\tprocRenameat,\n\tprocRmdir,\n\tproclseek,\n\tprocSelect,\n\tprocSetegid,\n\tprocSeteuid,\n\tprocSetgid,\n\tprocSethostname,\n\tprocSetpgid,\n\tprocSetpriority,\n\tprocSetregid,\n\tprocSetreuid,\n\tprocSetsid,\n\tprocSetuid,\n\tprocshutdown,\n\tprocStat,\n\tprocStatvfs,\n\tprocSymlink,\n\tprocSync,\n\tprocSysconf,\n\tprocTimes,\n\tprocTruncate,\n\tprocFsync,\n\tprocFtruncate,\n\tprocUmask,\n\tprocUname,\n\tprocumount,\n\tprocUnlink,\n\tprocUnlinkat,\n\tprocUstat,\n\tprocUtime,\n\tproc__xnet_bind,\n\tproc__xnet_connect,\n\tprocmmap,\n\tprocmunmap,\n\tprocsendfile,\n\tproc__xnet_sendto,\n\tproc__xnet_socket,\n\tproc__xnet_socketpair,\n\tprocwrite,\n\tproc__xnet_getsockopt,\n\tprocgetpeername,\n\tprocsetsockopt,\n\tprocrecvfrom,\n\tprocport_create,\n\tprocport_associate,\n\tprocport_dissociate,\n\tprocport_get,\n\tprocport_getn,\n\tprocputmsg,\n\tprocgetmsg syscallFunc\n)\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (n int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe2(p *[2]_C_int, flags int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe2)), 2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getcwd(buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(ngid int, gid *_Gid_t) (n int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(ngid int, gid *_Gid_t) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0)\n\twpid = int32(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gethostname(buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, times *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc futimesat(fildes int, path *byte, times *[2]Timeval) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc acct(path *byte) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc __makedev(version int, major uint, minor uint) (val uint64) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0)\n\tval = uint64(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc __major(version int, dev uint64) (val uint) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)\n\tval = uint(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc __minor(version int, dev uint64) (val uint) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0)\n\tval = uint(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlRet(fd int, req int, arg uintptr) (ret int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtrRet(fd int, req int, arg unsafe.Pointer) (ret int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0)\n\tret = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc poll(fds *PollFd, nfds int, timeout int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Adjtime(delta *Timeval, olddelta *Timeval) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ClockGettime(clockid int32, time *Timespec) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClockGettime)), 2, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Close(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(fd int) (nfd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tnfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\tsysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFaccessat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fdatasync(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Flock(fd int, how int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fpathconf(fd int, name int) (val int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstat(fd int, stat *Stat_t) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgrp() (pgid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0)\n\tpgid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0)\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0)\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (ppid int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0)\n\tppid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(which int, lim *Rlimit) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrusage(who int, rusage *Rusage) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetsid)), 1, uintptr(pid), 0, 0, 0, 0, 0)\n\tsid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gettimeofday(tv *Timeval) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, signum syscall.Signal) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, backlog int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lstat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Madvise(b []byte, advice int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifoat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mlockall(flags int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlock(b []byte) (err error) {\n\tvar _p0 *byte\n\tif len(b) > 0 {\n\t\t_p0 = &b[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Munlockall() (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Nanosleep(time *Timespec, leftover *Timespec) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pathconf(path string, name int) (val int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0)\n\tval = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pause() (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readlink(path string, buf []byte) (n int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\tif len(buf) > 0 {\n\t\t_p1 = &buf[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (newoffset int64, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0)\n\tnewoffset = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSelect)), 5, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(gid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sethostname(p []byte) (err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0)\n\tpid = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(s int, how int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Stat(path string, stat *Stat_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Statvfs(path string, vfsstat *Statvfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sysconf(which int) (n int64, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSysconf)), 1, uintptr(which), 0, 0, 0, 0, 0)\n\tn = int64(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\tr0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0)\n\tticks = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\tr0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0)\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unmount(target string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(target)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ustat(dev int, ubuf *Ustat_t) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, buf *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\tret = uintptr(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsendfile)), 4, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0)\n\twritten = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 *byte\n\tif len(buf) > 0 {\n\t\t_p0 = &buf[0]\n\t}\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0)\n\tfd = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\t_, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 *byte\n\tif len(p) > 0 {\n\t\t_p0 = &p[0]\n\t}\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_create() (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_associate(port int, source int, object uintptr, events int, user *byte) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_associate)), 5, uintptr(port), uintptr(source), uintptr(object), uintptr(events), uintptr(unsafe.Pointer(user)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_dissociate(port int, source int, object uintptr) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_dissociate)), 3, uintptr(port), uintptr(source), uintptr(object), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_get(port int, pe *portEvent, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_get)), 3, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(unsafe.Pointer(timeout)), 0, 0, 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc port_getn(port int, pe *portEvent, max uint32, nget *uint32, timeout *Timespec) (n int, err error) {\n\tr0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_getn)), 5, uintptr(port), uintptr(unsafe.Pointer(pe)), uintptr(max), uintptr(unsafe.Pointer(nget)), uintptr(unsafe.Pointer(timeout)), 0)\n\tn = int(r0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc putmsg(fd int, clptr *strbuf, dataptr *strbuf, flags int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procputmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(flags), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getmsg(fd int, clptr *strbuf, dataptr *strbuf, flags *int) (err error) {\n\t_, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetmsg)), 4, uintptr(fd), uintptr(unsafe.Pointer(clptr)), uintptr(unsafe.Pointer(dataptr)), uintptr(unsafe.Pointer(flags)), 0, 0)\n\tif e1 != 0 {\n\t\terr = errnoErr(e1)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsyscall_zos_s390x.go",
    "content": "// go run mksyscall_zos_s390x.go -o_sysnum zsysnum_zos_s390x.go -o_syscall zsyscall_zos_s390x.go -i_syscall syscall_zos_s390x.go -o_asm zsymaddr_zos_s390x.s\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build zos && s390x\n\npackage unix\n\nimport (\n\t\"runtime\"\n\t\"syscall\"\n\t\"unsafe\"\n)\n\nvar _ syscall.Errno\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fcntl(fd int, cmd int, arg int) (val int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), uintptr(arg))\n\truntime.ExitSyscall()\n\tval = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p0 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FLISTXATTR_A<<4, uintptr(fd), uintptr(_p0), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FlistxattrAddr() *(func(fd int, dest []byte) (sz int, err error))\n\nvar Flistxattr = enter_Flistxattr\n\nfunc enter_Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tfuncref := get_FlistxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FLISTXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Flistxattr\n\t} else {\n\t\t*funcref = error_Flistxattr\n\t}\n\treturn (*funcref)(fd, dest)\n}\n\nfunc error_Flistxattr(fd int, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fremovexattr(fd int, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FREMOVEXATTR_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FremovexattrAddr() *(func(fd int, attr string) (err error))\n\nvar Fremovexattr = enter_Fremovexattr\n\nfunc enter_Fremovexattr(fd int, attr string) (err error) {\n\tfuncref := get_FremovexattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FREMOVEXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fremovexattr\n\t} else {\n\t\t*funcref = error_Fremovexattr\n\t}\n\treturn (*funcref)(fd, attr)\n}\n\nfunc error_Fremovexattr(fd int, attr string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc read(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_READ<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc write(fd int, p []byte) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WRITE<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FGETXATTR_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FgetxattrAddr() *(func(fd int, attr string, dest []byte) (sz int, err error))\n\nvar Fgetxattr = enter_Fgetxattr\n\nfunc enter_Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tfuncref := get_FgetxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FGETXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fgetxattr\n\t} else {\n\t\t*funcref = error_Fgetxattr\n\t}\n\treturn (*funcref)(fd, attr, dest)\n}\n\nfunc error_Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fsetxattr(fd int, attr string, data []byte, flag int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p1 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FSETXATTR_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(data)), uintptr(flag))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FsetxattrAddr() *(func(fd int, attr string, data []byte, flag int) (err error))\n\nvar Fsetxattr = enter_Fsetxattr\n\nfunc enter_Fsetxattr(fd int, attr string, data []byte, flag int) (err error) {\n\tfuncref := get_FsetxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FSETXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fsetxattr\n\t} else {\n\t\t*funcref = error_Fsetxattr\n\t}\n\treturn (*funcref)(fd, attr, data, flag)\n}\n\nfunc error_Fsetxattr(fd int, attr string, data []byte, flag int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___ACCEPT_A<<4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___ACCEPT4_A<<4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_accept4Addr() *(func(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error))\n\nvar accept4 = enter_accept4\n\nfunc enter_accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tfuncref := get_accept4Addr()\n\tif funcptrtest(GetZosLibVec()+SYS___ACCEPT4_A<<4, \"\") == 0 {\n\t\t*funcref = impl_accept4\n\t} else {\n\t\t*funcref = error_accept4\n\t}\n\treturn (*funcref)(s, rsa, addrlen, flags)\n}\n\nfunc error_accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___BIND_A<<4, uintptr(s), uintptr(addr), uintptr(addrlen))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CONNECT_A<<4, uintptr(s), uintptr(addr), uintptr(addrlen))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getgroups(n int, list *_Gid_t) (nn int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETGROUPS<<4, uintptr(n), uintptr(unsafe.Pointer(list)))\n\tnn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setgroups(n int, list *_Gid_t) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETGROUPS<<4, uintptr(n), uintptr(unsafe.Pointer(list)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETSOCKOPT<<4, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETSOCKOPT<<4, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socket(domain int, typ int, proto int) (fd int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SOCKET<<4, uintptr(domain), uintptr(typ), uintptr(proto))\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SOCKETPAIR<<4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETPEERNAME_A<<4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETSOCKNAME_A<<4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Removexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___REMOVEXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_RemovexattrAddr() *(func(path string, attr string) (err error))\n\nvar Removexattr = enter_Removexattr\n\nfunc enter_Removexattr(path string, attr string) (err error) {\n\tfuncref := get_RemovexattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___REMOVEXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Removexattr\n\t} else {\n\t\t*funcref = error_Removexattr\n\t}\n\treturn (*funcref)(path, attr)\n}\n\nfunc error_Removexattr(path string, attr string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RECVFROM_A<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SENDTO_A<<4, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc recvmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RECVMSG_A<<4, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc sendmsg(s int, msg *Msghdr, flags int) (n int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SENDMSG_A<<4, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MMAP<<4, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))\n\truntime.ExitSyscall()\n\tret = uintptr(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc munmap(addr uintptr, length uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MUNMAP<<4, uintptr(addr), uintptr(length))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctl(fd int, req int, arg uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_IOCTL<<4, uintptr(fd), uintptr(req), uintptr(arg))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc ioctlPtr(fd int, req int, arg unsafe.Pointer) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_IOCTL<<4, uintptr(fd), uintptr(req), uintptr(arg))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmat(id int, addr uintptr, flag int) (ret uintptr, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMAT<<4, uintptr(id), uintptr(addr), uintptr(flag))\n\truntime.ExitSyscall()\n\tret = uintptr(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmctl(id int, cmd int, buf *SysvShmDesc) (result int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMCTL64<<4, uintptr(id), uintptr(cmd), uintptr(unsafe.Pointer(buf)))\n\truntime.ExitSyscall()\n\tresult = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmdt(addr uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMDT<<4, uintptr(addr))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc shmget(key int, size int, flag int) (id int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHMGET<<4, uintptr(key), uintptr(size), uintptr(flag))\n\truntime.ExitSyscall()\n\tid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Access(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___ACCESS_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHDIR_A<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHOWN_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chmod(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHMOD_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Creat(path string, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CREAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup(oldfd int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DUP<<4, uintptr(oldfd))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Dup2(oldfd int, newfd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DUP2<<4, uintptr(oldfd), uintptr(newfd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Dup3(oldfd int, newfd int, flags int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DUP3<<4, uintptr(oldfd), uintptr(newfd), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_Dup3Addr() *(func(oldfd int, newfd int, flags int) (err error))\n\nvar Dup3 = enter_Dup3\n\nfunc enter_Dup3(oldfd int, newfd int, flags int) (err error) {\n\tfuncref := get_Dup3Addr()\n\tif funcptrtest(GetZosLibVec()+SYS_DUP3<<4, \"\") == 0 {\n\t\t*funcref = impl_Dup3\n\t} else {\n\t\t*funcref = error_Dup3\n\t}\n\treturn (*funcref)(oldfd, newfd, flags)\n}\n\nfunc error_Dup3(oldfd int, newfd int, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Dirfd(dirp uintptr) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_DIRFD<<4, uintptr(dirp))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_DirfdAddr() *(func(dirp uintptr) (fd int, err error))\n\nvar Dirfd = enter_Dirfd\n\nfunc enter_Dirfd(dirp uintptr) (fd int, err error) {\n\tfuncref := get_DirfdAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_DIRFD<<4, \"\") == 0 {\n\t\t*funcref = impl_Dirfd\n\t} else {\n\t\t*funcref = error_Dirfd\n\t}\n\treturn (*funcref)(dirp)\n}\n\nfunc error_Dirfd(dirp uintptr) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollCreate(size int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_CREATE<<4, uintptr(size))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollCreateAddr() *(func(size int) (fd int, err error))\n\nvar EpollCreate = enter_EpollCreate\n\nfunc enter_EpollCreate(size int) (fd int, err error) {\n\tfuncref := get_EpollCreateAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_CREATE<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollCreate\n\t} else {\n\t\t*funcref = error_EpollCreate\n\t}\n\treturn (*funcref)(size)\n}\n\nfunc error_EpollCreate(size int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollCreate1(flags int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_CREATE1<<4, uintptr(flags))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollCreate1Addr() *(func(flags int) (fd int, err error))\n\nvar EpollCreate1 = enter_EpollCreate1\n\nfunc enter_EpollCreate1(flags int) (fd int, err error) {\n\tfuncref := get_EpollCreate1Addr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_CREATE1<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollCreate1\n\t} else {\n\t\t*funcref = error_EpollCreate1\n\t}\n\treturn (*funcref)(flags)\n}\n\nfunc error_EpollCreate1(flags int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_CTL<<4, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollCtlAddr() *(func(epfd int, op int, fd int, event *EpollEvent) (err error))\n\nvar EpollCtl = enter_EpollCtl\n\nfunc enter_EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\tfuncref := get_EpollCtlAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_CTL<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollCtl\n\t} else {\n\t\t*funcref = error_EpollCtl\n\t}\n\treturn (*funcref)(epfd, op, fd, event)\n}\n\nfunc error_EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_PWAIT<<4, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), uintptr(unsafe.Pointer(sigmask)))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollPwaitAddr() *(func(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error))\n\nvar EpollPwait = enter_EpollPwait\n\nfunc enter_EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) {\n\tfuncref := get_EpollPwaitAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_PWAIT<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollPwait\n\t} else {\n\t\t*funcref = error_EpollPwait\n\t}\n\treturn (*funcref)(epfd, events, msec, sigmask)\n}\n\nfunc error_EpollPwait(epfd int, events []EpollEvent, msec int, sigmask *int) (n int, err error) {\n\tn = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(events) > 0 {\n\t\t_p0 = unsafe.Pointer(&events[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EPOLL_WAIT<<4, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EpollWaitAddr() *(func(epfd int, events []EpollEvent, msec int) (n int, err error))\n\nvar EpollWait = enter_EpollWait\n\nfunc enter_EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tfuncref := get_EpollWaitAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EPOLL_WAIT<<4, \"\") == 0 {\n\t\t*funcref = impl_EpollWait\n\t} else {\n\t\t*funcref = error_EpollWait\n\t}\n\treturn (*funcref)(epfd, events, msec)\n}\n\nfunc error_EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) {\n\tn = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Errno2() (er2 int) {\n\truntime.EnterSyscall()\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS___ERRNO2<<4)\n\truntime.ExitSyscall()\n\ter2 = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Eventfd(initval uint, flags int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_EVENTFD<<4, uintptr(initval), uintptr(flags))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_EventfdAddr() *(func(initval uint, flags int) (fd int, err error))\n\nvar Eventfd = enter_Eventfd\n\nfunc enter_Eventfd(initval uint, flags int) (fd int, err error) {\n\tfuncref := get_EventfdAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_EVENTFD<<4, \"\") == 0 {\n\t\t*funcref = impl_Eventfd\n\t} else {\n\t\t*funcref = error_Eventfd\n\t}\n\treturn (*funcref)(initval, flags)\n}\n\nfunc error_Eventfd(initval uint, flags int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Exit(code int) {\n\truntime.EnterSyscall()\n\tCallLeFuncWithErr(GetZosLibVec()+SYS_EXIT<<4, uintptr(code))\n\truntime.ExitSyscall()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FACCESSAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FaccessatAddr() *(func(dirfd int, path string, mode uint32, flags int) (err error))\n\nvar Faccessat = enter_Faccessat\n\nfunc enter_Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tfuncref := get_FaccessatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FACCESSAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Faccessat\n\t} else {\n\t\t*funcref = error_Faccessat\n\t}\n\treturn (*funcref)(dirfd, path, mode, flags)\n}\n\nfunc error_Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchdir(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCHDIR<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchmod(fd int, mode uint32) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCHMOD<<4, uintptr(fd), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FCHMODAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FchmodatAddr() *(func(dirfd int, path string, mode uint32, flags int) (err error))\n\nvar Fchmodat = enter_Fchmodat\n\nfunc enter_Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\tfuncref := get_FchmodatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FCHMODAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fchmodat\n\t} else {\n\t\t*funcref = error_Fchmodat\n\t}\n\treturn (*funcref)(dirfd, path, mode, flags)\n}\n\nfunc error_Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fchown(fd int, uid int, gid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCHOWN<<4, uintptr(fd), uintptr(uid), uintptr(gid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fchownat(fd int, path string, uid int, gid int, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FCHOWNAT_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FchownatAddr() *(func(fd int, path string, uid int, gid int, flags int) (err error))\n\nvar Fchownat = enter_Fchownat\n\nfunc enter_Fchownat(fd int, path string, uid int, gid int, flags int) (err error) {\n\tfuncref := get_FchownatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FCHOWNAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Fchownat\n\t} else {\n\t\t*funcref = error_Fchownat\n\t}\n\treturn (*funcref)(fd, path, uid, gid, flags)\n}\n\nfunc error_Fchownat(fd int, path string, uid int, gid int, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc FcntlInt(fd uintptr, cmd int, arg int) (retval int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), uintptr(arg))\n\truntime.ExitSyscall()\n\tretval = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fdatasync(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FDATASYNC<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FdatasyncAddr() *(func(fd int) (err error))\n\nvar Fdatasync = enter_Fdatasync\n\nfunc enter_Fdatasync(fd int) (err error) {\n\tfuncref := get_FdatasyncAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_FDATASYNC<<4, \"\") == 0 {\n\t\t*funcref = impl_Fdatasync\n\t} else {\n\t\t*funcref = error_Fdatasync\n\t}\n\treturn (*funcref)(fd)\n}\n\nfunc error_Fdatasync(fd int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc fstat(fd int, stat *Stat_LE_t) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSTAT<<4, uintptr(fd), uintptr(unsafe.Pointer(stat)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FSTATAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_fstatatAddr() *(func(dirfd int, path string, stat *Stat_LE_t, flags int) (err error))\n\nvar fstatat = enter_fstatat\n\nfunc enter_fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) {\n\tfuncref := get_fstatatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FSTATAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_fstatat\n\t} else {\n\t\t*funcref = error_fstatat\n\t}\n\treturn (*funcref)(dirfd, path, stat, flags)\n}\n\nfunc error_fstatat(dirfd int, path string, stat *Stat_LE_t, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p2 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LGETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LgetxattrAddr() *(func(link string, attr string, dest []byte) (sz int, err error))\n\nvar Lgetxattr = enter_Lgetxattr\n\nfunc enter_Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\tfuncref := get_LgetxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LGETXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Lgetxattr\n\t} else {\n\t\t*funcref = error_Lgetxattr\n\t}\n\treturn (*funcref)(link, attr, dest)\n}\n\nfunc error_Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 unsafe.Pointer\n\tif len(data) > 0 {\n\t\t_p2 = unsafe.Pointer(&data[0])\n\t} else {\n\t\t_p2 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LSETXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LsetxattrAddr() *(func(path string, attr string, data []byte, flags int) (err error))\n\nvar Lsetxattr = enter_Lsetxattr\n\nfunc enter_Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\tfuncref := get_LsetxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LSETXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Lsetxattr\n\t} else {\n\t\t*funcref = error_Lsetxattr\n\t}\n\treturn (*funcref)(path, attr, data, flags)\n}\n\nfunc error_Lsetxattr(path string, attr string, data []byte, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Fstatfs(fd int, buf *Statfs_t) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSTATFS<<4, uintptr(fd), uintptr(unsafe.Pointer(buf)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FstatfsAddr() *(func(fd int, buf *Statfs_t) (err error))\n\nvar Fstatfs = enter_Fstatfs\n\nfunc enter_Fstatfs(fd int, buf *Statfs_t) (err error) {\n\tfuncref := get_FstatfsAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_FSTATFS<<4, \"\") == 0 {\n\t\t*funcref = impl_Fstatfs\n\t} else {\n\t\t*funcref = error_Fstatfs\n\t}\n\treturn (*funcref)(fd, buf)\n}\n\nfunc error_Fstatfs(fd int, buf *Statfs_t) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fstatvfs(fd int, stat *Statvfs_t) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSTATVFS<<4, uintptr(fd), uintptr(unsafe.Pointer(stat)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Fsync(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FSYNC<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Futimes(fd int, tv []Timeval) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(tv) > 0 {\n\t\t_p0 = unsafe.Pointer(&tv[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FUTIMES<<4, uintptr(fd), uintptr(_p0), uintptr(len(tv)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FutimesAddr() *(func(fd int, tv []Timeval) (err error))\n\nvar Futimes = enter_Futimes\n\nfunc enter_Futimes(fd int, tv []Timeval) (err error) {\n\tfuncref := get_FutimesAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_FUTIMES<<4, \"\") == 0 {\n\t\t*funcref = impl_Futimes\n\t} else {\n\t\t*funcref = error_Futimes\n\t}\n\treturn (*funcref)(fd, tv)\n}\n\nfunc error_Futimes(fd int, tv []Timeval) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Futimesat(dirfd int, path string, tv []Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(tv) > 0 {\n\t\t_p1 = unsafe.Pointer(&tv[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___FUTIMESAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(tv)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_FutimesatAddr() *(func(dirfd int, path string, tv []Timeval) (err error))\n\nvar Futimesat = enter_Futimesat\n\nfunc enter_Futimesat(dirfd int, path string, tv []Timeval) (err error) {\n\tfuncref := get_FutimesatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___FUTIMESAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Futimesat\n\t} else {\n\t\t*funcref = error_Futimesat\n\t}\n\treturn (*funcref)(dirfd, path, tv)\n}\n\nfunc error_Futimesat(dirfd int, path string, tv []Timeval) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Ftruncate(fd int, length int64) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FTRUNCATE<<4, uintptr(fd), uintptr(length))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Getrandom(buf []byte, flags int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETRANDOM<<4, uintptr(_p0), uintptr(len(buf)), uintptr(flags))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_GetrandomAddr() *(func(buf []byte, flags int) (n int, err error))\n\nvar Getrandom = enter_Getrandom\n\nfunc enter_Getrandom(buf []byte, flags int) (n int, err error) {\n\tfuncref := get_GetrandomAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_GETRANDOM<<4, \"\") == 0 {\n\t\t*funcref = impl_Getrandom\n\t} else {\n\t\t*funcref = error_Getrandom\n\t}\n\treturn (*funcref)(buf, flags)\n}\n\nfunc error_Getrandom(buf []byte, flags int) (n int, err error) {\n\tn = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_InotifyInit() (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec() + SYS_INOTIFY_INIT<<4)\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_InotifyInitAddr() *(func() (fd int, err error))\n\nvar InotifyInit = enter_InotifyInit\n\nfunc enter_InotifyInit() (fd int, err error) {\n\tfuncref := get_InotifyInitAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_INOTIFY_INIT<<4, \"\") == 0 {\n\t\t*funcref = impl_InotifyInit\n\t} else {\n\t\t*funcref = error_InotifyInit\n\t}\n\treturn (*funcref)()\n}\n\nfunc error_InotifyInit() (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_InotifyInit1(flags int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_INOTIFY_INIT1<<4, uintptr(flags))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_InotifyInit1Addr() *(func(flags int) (fd int, err error))\n\nvar InotifyInit1 = enter_InotifyInit1\n\nfunc enter_InotifyInit1(flags int) (fd int, err error) {\n\tfuncref := get_InotifyInit1Addr()\n\tif funcptrtest(GetZosLibVec()+SYS_INOTIFY_INIT1<<4, \"\") == 0 {\n\t\t*funcref = impl_InotifyInit1\n\t} else {\n\t\t*funcref = error_InotifyInit1\n\t}\n\treturn (*funcref)(flags)\n}\n\nfunc error_InotifyInit1(flags int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(pathname)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___INOTIFY_ADD_WATCH_A<<4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask))\n\truntime.ExitSyscall()\n\twatchdesc = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_InotifyAddWatchAddr() *(func(fd int, pathname string, mask uint32) (watchdesc int, err error))\n\nvar InotifyAddWatch = enter_InotifyAddWatch\n\nfunc enter_InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\tfuncref := get_InotifyAddWatchAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___INOTIFY_ADD_WATCH_A<<4, \"\") == 0 {\n\t\t*funcref = impl_InotifyAddWatch\n\t} else {\n\t\t*funcref = error_InotifyAddWatch\n\t}\n\treturn (*funcref)(fd, pathname, mask)\n}\n\nfunc error_InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) {\n\twatchdesc = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_INOTIFY_RM_WATCH<<4, uintptr(fd), uintptr(watchdesc))\n\truntime.ExitSyscall()\n\tsuccess = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_InotifyRmWatchAddr() *(func(fd int, watchdesc uint32) (success int, err error))\n\nvar InotifyRmWatch = enter_InotifyRmWatch\n\nfunc enter_InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tfuncref := get_InotifyRmWatchAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_INOTIFY_RM_WATCH<<4, \"\") == 0 {\n\t\t*funcref = impl_InotifyRmWatch\n\t} else {\n\t\t*funcref = error_InotifyRmWatch\n\t}\n\treturn (*funcref)(fd, watchdesc)\n}\n\nfunc error_InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) {\n\tsuccess = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Listxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LISTXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_ListxattrAddr() *(func(path string, dest []byte) (sz int, err error))\n\nvar Listxattr = enter_Listxattr\n\nfunc enter_Listxattr(path string, dest []byte) (sz int, err error) {\n\tfuncref := get_ListxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LISTXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Listxattr\n\t} else {\n\t\t*funcref = error_Listxattr\n\t}\n\treturn (*funcref)(path, dest)\n}\n\nfunc error_Listxattr(path string, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Llistxattr(path string, dest []byte) (sz int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(dest) > 0 {\n\t\t_p1 = unsafe.Pointer(&dest[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LLISTXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest)))\n\truntime.ExitSyscall()\n\tsz = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LlistxattrAddr() *(func(path string, dest []byte) (sz int, err error))\n\nvar Llistxattr = enter_Llistxattr\n\nfunc enter_Llistxattr(path string, dest []byte) (sz int, err error) {\n\tfuncref := get_LlistxattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LLISTXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Llistxattr\n\t} else {\n\t\t*funcref = error_Llistxattr\n\t}\n\treturn (*funcref)(path, dest)\n}\n\nfunc error_Llistxattr(path string, dest []byte) (sz int, err error) {\n\tsz = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Lremovexattr(path string, attr string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(attr)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LREMOVEXATTR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LremovexattrAddr() *(func(path string, attr string) (err error))\n\nvar Lremovexattr = enter_Lremovexattr\n\nfunc enter_Lremovexattr(path string, attr string) (err error) {\n\tfuncref := get_LremovexattrAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LREMOVEXATTR_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Lremovexattr\n\t} else {\n\t\t*funcref = error_Lremovexattr\n\t}\n\treturn (*funcref)(path, attr)\n}\n\nfunc error_Lremovexattr(path string, attr string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Lutimes(path string, tv []Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 unsafe.Pointer\n\tif len(tv) > 0 {\n\t\t_p1 = unsafe.Pointer(&tv[0])\n\t} else {\n\t\t_p1 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LUTIMES_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(tv)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LutimesAddr() *(func(path string, tv []Timeval) (err error))\n\nvar Lutimes = enter_Lutimes\n\nfunc enter_Lutimes(path string, tv []Timeval) (err error) {\n\tfuncref := get_LutimesAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LUTIMES_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Lutimes\n\t} else {\n\t\t*funcref = error_Lutimes\n\t}\n\treturn (*funcref)(path, tv)\n}\n\nfunc error_Lutimes(path string, tv []Timeval) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mprotect(b []byte, prot int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MPROTECT<<4, uintptr(_p0), uintptr(len(b)), uintptr(prot))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Msync(b []byte, flags int) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(b) > 0 {\n\t\t_p0 = unsafe.Pointer(&b[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_MSYNC<<4, uintptr(_p0), uintptr(len(b)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Console2(cmsg *ConsMsg2, modstr *byte, concmd *uint32) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CONSOLE2<<4, uintptr(unsafe.Pointer(cmsg)), uintptr(unsafe.Pointer(modstr)), uintptr(unsafe.Pointer(concmd)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Poll(fds []PollFd, timeout int) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(fds) > 0 {\n\t\t_p0 = unsafe.Pointer(&fds[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_POLL<<4, uintptr(_p0), uintptr(len(fds)), uintptr(timeout))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Readdir_r(dirp uintptr, entry *direntLE, result **direntLE) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___READDIR_R_A<<4, uintptr(dirp), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Statfs(path string, buf *Statfs_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___STATFS_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_StatfsAddr() *(func(path string, buf *Statfs_t) (err error))\n\nvar Statfs = enter_Statfs\n\nfunc enter_Statfs(path string, buf *Statfs_t) (err error) {\n\tfuncref := get_StatfsAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___STATFS_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Statfs\n\t} else {\n\t\t*funcref = error_Statfs\n\t}\n\treturn (*funcref)(path, buf)\n}\n\nfunc error_Statfs(path string, buf *Statfs_t) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Syncfs(fd int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SYNCFS<<4, uintptr(fd))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SyncfsAddr() *(func(fd int) (err error))\n\nvar Syncfs = enter_Syncfs\n\nfunc enter_Syncfs(fd int) (err error) {\n\tfuncref := get_SyncfsAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_SYNCFS<<4, \"\") == 0 {\n\t\t*funcref = impl_Syncfs\n\t} else {\n\t\t*funcref = error_Syncfs\n\t}\n\treturn (*funcref)(fd)\n}\n\nfunc error_Syncfs(fd int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Times(tms *Tms) (ticks uintptr, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TIMES<<4, uintptr(unsafe.Pointer(tms)))\n\truntime.ExitSyscall()\n\tticks = uintptr(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc W_Getmntent(buff *byte, size int) (lastsys int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_W_GETMNTENT<<4, uintptr(unsafe.Pointer(buff)), uintptr(size))\n\truntime.ExitSyscall()\n\tlastsys = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc W_Getmntent_A(buff *byte, size int) (lastsys int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___W_GETMNTENT_A<<4, uintptr(unsafe.Pointer(buff)), uintptr(size))\n\truntime.ExitSyscall()\n\tlastsys = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc mount_LE(path string, filesystem string, fstype string, mtm uint32, parmlen int32, parm string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(filesystem)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p2 *byte\n\t_p2, err = BytePtrFromString(fstype)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p3 *byte\n\t_p3, err = BytePtrFromString(parm)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MOUNT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(mtm), uintptr(parmlen), uintptr(unsafe.Pointer(_p3)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc unmount_LE(filesystem string, mtm int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(filesystem)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UMOUNT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mtm))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Chroot(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___CHROOT_A<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Select(nmsgsfds int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (ret int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SELECT<<4, uintptr(nmsgsfds), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)))\n\truntime.ExitSyscall()\n\tret = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Uname(buf *Utsname) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_____OSNAME_A<<4, uintptr(unsafe.Pointer(buf)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Unshare(flags int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_UNSHARE<<4, uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_UnshareAddr() *(func(flags int) (err error))\n\nvar Unshare = enter_Unshare\n\nfunc enter_Unshare(flags int) (err error) {\n\tfuncref := get_UnshareAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_UNSHARE<<4, \"\") == 0 {\n\t\t*funcref = impl_Unshare\n\t} else {\n\t\t*funcref = error_Unshare\n\t}\n\treturn (*funcref)(flags)\n}\n\nfunc error_Unshare(flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Gethostname(buf []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(buf) > 0 {\n\t\t_p0 = unsafe.Pointer(&buf[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___GETHOSTNAME_A<<4, uintptr(_p0), uintptr(len(buf)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getgid() (gid int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETGID<<4)\n\tgid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpid() (pid int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETPID<<4)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpgid(pid int) (pgid int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETPGID<<4, uintptr(pid))\n\tpgid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getppid() (pid int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETPPID<<4)\n\tpid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getpriority(which int, who int) (prio int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETPRIORITY<<4, uintptr(which), uintptr(who))\n\truntime.ExitSyscall()\n\tprio = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getrlimit(resource int, rlim *Rlimit) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETRLIMIT<<4, uintptr(resource), uintptr(unsafe.Pointer(rlim)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc getrusage(who int, rusage *rusage_zos) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETRUSAGE<<4, uintptr(who), uintptr(unsafe.Pointer(rusage)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getegid() (egid int) {\n\truntime.EnterSyscall()\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETEGID<<4)\n\truntime.ExitSyscall()\n\tegid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Geteuid() (euid int) {\n\truntime.EnterSyscall()\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETEUID<<4)\n\truntime.ExitSyscall()\n\teuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getsid(pid int) (sid int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETSID<<4, uintptr(pid))\n\tsid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Getuid() (uid int) {\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec() + SYS_GETUID<<4)\n\tuid = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Kill(pid int, sig Signal) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_KILL<<4, uintptr(pid), uintptr(sig))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Lchown(path string, uid int, gid int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LCHOWN_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Link(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LINK_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldPath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newPath)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LINKAT_A<<4, uintptr(oldDirFd), uintptr(unsafe.Pointer(_p0)), uintptr(newDirFd), uintptr(unsafe.Pointer(_p1)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_LinkatAddr() *(func(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error))\n\nvar Linkat = enter_Linkat\n\nfunc enter_Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) {\n\tfuncref := get_LinkatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___LINKAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Linkat\n\t} else {\n\t\t*funcref = error_Linkat\n\t}\n\treturn (*funcref)(oldDirFd, oldPath, newDirFd, newPath, flags)\n}\n\nfunc error_Linkat(oldDirFd int, oldPath string, newDirFd int, newPath string, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Listen(s int, n int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_LISTEN<<4, uintptr(s), uintptr(n))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc lstat(path string, stat *Stat_LE_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___LSTAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkdir(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKDIR_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKDIRAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_MkdiratAddr() *(func(dirfd int, path string, mode uint32) (err error))\n\nvar Mkdirat = enter_Mkdirat\n\nfunc enter_Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\tfuncref := get_MkdiratAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___MKDIRAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Mkdirat\n\t} else {\n\t\t*funcref = error_Mkdirat\n\t}\n\treturn (*funcref)(dirfd, path, mode)\n}\n\nfunc error_Mkdirat(dirfd int, path string, mode uint32) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mkfifo(path string, mode uint32) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKFIFO_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Mknod(path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKNOD_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___MKNODAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_MknodatAddr() *(func(dirfd int, path string, mode uint32, dev int) (err error))\n\nvar Mknodat = enter_Mknodat\n\nfunc enter_Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\tfuncref := get_MknodatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___MKNODAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Mknodat\n\t} else {\n\t\t*funcref = error_Mknodat\n\t}\n\treturn (*funcref)(dirfd, path, mode, dev)\n}\n\nfunc error_Mknodat(dirfd int, path string, mode uint32, dev int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_PivotRoot(newroot string, oldroot string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(newroot)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(oldroot)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___PIVOT_ROOT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_PivotRootAddr() *(func(newroot string, oldroot string) (err error))\n\nvar PivotRoot = enter_PivotRoot\n\nfunc enter_PivotRoot(newroot string, oldroot string) (err error) {\n\tfuncref := get_PivotRootAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___PIVOT_ROOT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_PivotRoot\n\t} else {\n\t\t*funcref = error_PivotRoot\n\t}\n\treturn (*funcref)(newroot, oldroot)\n}\n\nfunc error_PivotRoot(newroot string, oldroot string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pread(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PREAD<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Pwrite(fd int, p []byte, offset int64) (n int, err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PWRITE<<4, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset))\n\truntime.ExitSyscall()\n\tn = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___PRCTL_A<<4, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_PrctlAddr() *(func(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error))\n\nvar Prctl = enter_Prctl\n\nfunc enter_Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\tfuncref := get_PrctlAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___PRCTL_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Prctl\n\t} else {\n\t\t*funcref = error_Prctl\n\t}\n\treturn (*funcref)(option, arg2, arg3, arg4, arg5)\n}\n\nfunc error_Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PRLIMIT<<4, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_PrlimitAddr() *(func(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error))\n\nvar Prlimit = enter_Prlimit\n\nfunc enter_Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\tfuncref := get_PrlimitAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_PRLIMIT<<4, \"\") == 0 {\n\t\t*funcref = impl_Prlimit\n\t} else {\n\t\t*funcref = error_Prlimit\n\t}\n\treturn (*funcref)(pid, resource, newlimit, old)\n}\n\nfunc error_Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rename(from string, to string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(from)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(to)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RENAME_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RENAMEAT_A<<4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_RenameatAddr() *(func(olddirfd int, oldpath string, newdirfd int, newpath string) (err error))\n\nvar Renameat = enter_Renameat\n\nfunc enter_Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\tfuncref := get_RenameatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___RENAMEAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Renameat\n\t} else {\n\t\t*funcref = error_Renameat\n\t}\n\treturn (*funcref)(olddirfd, oldpath, newdirfd, newpath)\n}\n\nfunc error_Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldpath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newpath)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RENAMEAT2_A<<4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_Renameat2Addr() *(func(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error))\n\nvar Renameat2 = enter_Renameat2\n\nfunc enter_Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\tfuncref := get_Renameat2Addr()\n\tif funcptrtest(GetZosLibVec()+SYS___RENAMEAT2_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Renameat2\n\t} else {\n\t\t*funcref = error_Renameat2\n\t}\n\treturn (*funcref)(olddirfd, oldpath, newdirfd, newpath, flags)\n}\n\nfunc error_Renameat2(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Rmdir(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___RMDIR_A<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seek(fd int, offset int64, whence int) (off int64, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_LSEEK<<4, uintptr(fd), uintptr(offset), uintptr(whence))\n\truntime.ExitSyscall()\n\toff = int64(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setegid(egid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETEGID<<4, uintptr(egid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Seteuid(euid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETEUID<<4, uintptr(euid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Sethostname(p []byte) (err error) {\n\tvar _p0 unsafe.Pointer\n\tif len(p) > 0 {\n\t\t_p0 = unsafe.Pointer(&p[0])\n\t} else {\n\t\t_p0 = unsafe.Pointer(&_zero)\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SETHOSTNAME_A<<4, uintptr(_p0), uintptr(len(p)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SethostnameAddr() *(func(p []byte) (err error))\n\nvar Sethostname = enter_Sethostname\n\nfunc enter_Sethostname(p []byte) (err error) {\n\tfuncref := get_SethostnameAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___SETHOSTNAME_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Sethostname\n\t} else {\n\t\t*funcref = error_Sethostname\n\t}\n\treturn (*funcref)(p)\n}\n\nfunc error_Sethostname(p []byte) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Setns(fd int, nstype int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETNS<<4, uintptr(fd), uintptr(nstype))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SetnsAddr() *(func(fd int, nstype int) (err error))\n\nvar Setns = enter_Setns\n\nfunc enter_Setns(fd int, nstype int) (err error) {\n\tfuncref := get_SetnsAddr()\n\tif funcptrtest(GetZosLibVec()+SYS_SETNS<<4, \"\") == 0 {\n\t\t*funcref = impl_Setns\n\t} else {\n\t\t*funcref = error_Setns\n\t}\n\treturn (*funcref)(fd, nstype)\n}\n\nfunc error_Setns(fd int, nstype int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpriority(which int, who int, prio int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETPRIORITY<<4, uintptr(which), uintptr(who), uintptr(prio))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setpgid(pid int, pgid int) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETPGID<<4, uintptr(pid), uintptr(pgid))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setrlimit(resource int, lim *Rlimit) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETRLIMIT<<4, uintptr(resource), uintptr(unsafe.Pointer(lim)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setregid(rgid int, egid int) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETREGID<<4, uintptr(rgid), uintptr(egid))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setreuid(ruid int, euid int) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETREUID<<4, uintptr(ruid), uintptr(euid))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setsid() (pid int, err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec() + SYS_SETSID<<4)\n\tpid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setuid(uid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETUID<<4, uintptr(uid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Setgid(uid int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SETGID<<4, uintptr(uid))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Shutdown(fd int, how int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_SHUTDOWN<<4, uintptr(fd), uintptr(how))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc stat(path string, statLE *Stat_LE_t) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___STAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(statLE)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Symlink(path string, link string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(link)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SYMLINK_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Symlinkat(oldPath string, dirfd int, newPath string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(oldPath)\n\tif err != nil {\n\t\treturn\n\t}\n\tvar _p1 *byte\n\t_p1, err = BytePtrFromString(newPath)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___SYMLINKAT_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(dirfd), uintptr(unsafe.Pointer(_p1)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_SymlinkatAddr() *(func(oldPath string, dirfd int, newPath string) (err error))\n\nvar Symlinkat = enter_Symlinkat\n\nfunc enter_Symlinkat(oldPath string, dirfd int, newPath string) (err error) {\n\tfuncref := get_SymlinkatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___SYMLINKAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Symlinkat\n\t} else {\n\t\t*funcref = error_Symlinkat\n\t}\n\treturn (*funcref)(oldPath, dirfd, newPath)\n}\n\nfunc error_Symlinkat(oldPath string, dirfd int, newPath string) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Sync() {\n\truntime.EnterSyscall()\n\tCallLeFuncWithErr(GetZosLibVec() + SYS_SYNC<<4)\n\truntime.ExitSyscall()\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Truncate(path string, length int64) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___TRUNCATE_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(length))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tcgetattr(fildes int, termptr *Termios) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TCGETATTR<<4, uintptr(fildes), uintptr(unsafe.Pointer(termptr)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Tcsetattr(fildes int, when int, termptr *Termios) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_TCSETATTR<<4, uintptr(fildes), uintptr(when), uintptr(unsafe.Pointer(termptr)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Umask(mask int) (oldmask int) {\n\truntime.EnterSyscall()\n\tr0, _, _ := CallLeFuncWithErr(GetZosLibVec()+SYS_UMASK<<4, uintptr(mask))\n\truntime.ExitSyscall()\n\toldmask = int(r0)\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlink(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UNLINK_A<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_Unlinkat(dirfd int, path string, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UNLINKAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_UnlinkatAddr() *(func(dirfd int, path string, flags int) (err error))\n\nvar Unlinkat = enter_Unlinkat\n\nfunc enter_Unlinkat(dirfd int, path string, flags int) (err error) {\n\tfuncref := get_UnlinkatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___UNLINKAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_Unlinkat\n\t} else {\n\t\t*funcref = error_Unlinkat\n\t}\n\treturn (*funcref)(dirfd, path, flags)\n}\n\nfunc error_Unlinkat(dirfd int, path string, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Utime(path string, utim *Utimbuf) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UTIME_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(utim)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc open(path string, mode int, perm uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___OPEN_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___OPENAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_openatAddr() *(func(dirfd int, path string, flags int, mode uint32) (fd int, err error))\n\nvar openat = enter_openat\n\nfunc enter_openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tfuncref := get_openatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___OPENAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_openat\n\t} else {\n\t\t*funcref = error_openat\n\t}\n\treturn (*funcref)(dirfd, path, flags, mode)\n}\n\nfunc error_openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___OPENAT2_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(open_how)), uintptr(size))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_openat2Addr() *(func(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error))\n\nvar openat2 = enter_openat2\n\nfunc enter_openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) {\n\tfuncref := get_openat2Addr()\n\tif funcptrtest(GetZosLibVec()+SYS___OPENAT2_A<<4, \"\") == 0 {\n\t\t*funcref = impl_openat2\n\t} else {\n\t\t*funcref = error_openat2\n\t}\n\treturn (*funcref)(dirfd, path, open_how, size)\n}\n\nfunc error_openat2(dirfd int, path string, open_how *OpenHow, size int) (fd int, err error) {\n\tfd = -1\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc remove(path string) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_REMOVE<<4, uintptr(unsafe.Pointer(_p0)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc waitid(idType int, id int, info *Siginfo, options int) (err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WAITID<<4, uintptr(idType), uintptr(id), uintptr(unsafe.Pointer(info)), uintptr(options))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc waitpid(pid int, wstatus *_C_int, options int) (wpid int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_WAITPID<<4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options))\n\truntime.ExitSyscall()\n\twpid = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc gettimeofday(tv *timeval_zos) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GETTIMEOFDAY<<4, uintptr(unsafe.Pointer(tv)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc pipe(p *[2]_C_int) (err error) {\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_PIPE<<4, uintptr(unsafe.Pointer(p)))\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc utimes(path string, timeval *[2]Timeval) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UTIMES_A<<4, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc impl_utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) {\n\tvar _p0 *byte\n\t_p0, err = BytePtrFromString(path)\n\tif err != nil {\n\t\treturn\n\t}\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS___UTIMENSAT_A<<4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(ts)), uintptr(flags))\n\truntime.ExitSyscall()\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n//go:nosplit\nfunc get_utimensatAddr() *(func(dirfd int, path string, ts *[2]Timespec, flags int) (err error))\n\nvar utimensat = enter_utimensat\n\nfunc enter_utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) {\n\tfuncref := get_utimensatAddr()\n\tif funcptrtest(GetZosLibVec()+SYS___UTIMENSAT_A<<4, \"\") == 0 {\n\t\t*funcref = impl_utimensat\n\t} else {\n\t\t*funcref = error_utimensat\n\t}\n\treturn (*funcref)(dirfd, path, ts, flags)\n}\n\nfunc error_utimensat(dirfd int, path string, ts *[2]Timespec, flags int) (err error) {\n\terr = ENOSYS\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Posix_openpt(oflag int) (fd int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_POSIX_OPENPT<<4, uintptr(oflag))\n\truntime.ExitSyscall()\n\tfd = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Grantpt(fildes int) (rc int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_GRANTPT<<4, uintptr(fildes))\n\truntime.ExitSyscall()\n\trc = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n\n// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\nfunc Unlockpt(fildes int) (rc int, err error) {\n\truntime.EnterSyscall()\n\tr0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_UNLOCKPT<<4, uintptr(fildes))\n\truntime.ExitSyscall()\n\trc = int(r0)\n\tif int64(r0) == -1 {\n\t\terr = errnoErr2(e1, e2)\n\t}\n\treturn\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build 386 && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build amd64 && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build arm && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build arm64 && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build mips64 && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_ppc64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build ppc64 && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysctl_openbsd_riscv64.go",
    "content": "// go run mksysctl_openbsd.go\n// Code generated by the command above; DO NOT EDIT.\n\n//go:build riscv64 && openbsd\n\npackage unix\n\ntype mibentry struct {\n\tctlname string\n\tctloid  []_C_int\n}\n\nvar sysctlMib = []mibentry{\n\t{\"ddb.console\", []_C_int{9, 6}},\n\t{\"ddb.log\", []_C_int{9, 7}},\n\t{\"ddb.max_line\", []_C_int{9, 3}},\n\t{\"ddb.max_width\", []_C_int{9, 2}},\n\t{\"ddb.panic\", []_C_int{9, 5}},\n\t{\"ddb.profile\", []_C_int{9, 9}},\n\t{\"ddb.radix\", []_C_int{9, 1}},\n\t{\"ddb.tab_stop_width\", []_C_int{9, 4}},\n\t{\"ddb.trigger\", []_C_int{9, 8}},\n\t{\"fs.posix.setuid\", []_C_int{3, 1, 1}},\n\t{\"hw.allowpowerdown\", []_C_int{6, 22}},\n\t{\"hw.byteorder\", []_C_int{6, 4}},\n\t{\"hw.cpuspeed\", []_C_int{6, 12}},\n\t{\"hw.diskcount\", []_C_int{6, 10}},\n\t{\"hw.disknames\", []_C_int{6, 8}},\n\t{\"hw.diskstats\", []_C_int{6, 9}},\n\t{\"hw.machine\", []_C_int{6, 1}},\n\t{\"hw.model\", []_C_int{6, 2}},\n\t{\"hw.ncpu\", []_C_int{6, 3}},\n\t{\"hw.ncpufound\", []_C_int{6, 21}},\n\t{\"hw.ncpuonline\", []_C_int{6, 25}},\n\t{\"hw.pagesize\", []_C_int{6, 7}},\n\t{\"hw.perfpolicy\", []_C_int{6, 23}},\n\t{\"hw.physmem\", []_C_int{6, 19}},\n\t{\"hw.power\", []_C_int{6, 26}},\n\t{\"hw.product\", []_C_int{6, 15}},\n\t{\"hw.serialno\", []_C_int{6, 17}},\n\t{\"hw.setperf\", []_C_int{6, 13}},\n\t{\"hw.smt\", []_C_int{6, 24}},\n\t{\"hw.usermem\", []_C_int{6, 20}},\n\t{\"hw.uuid\", []_C_int{6, 18}},\n\t{\"hw.vendor\", []_C_int{6, 14}},\n\t{\"hw.version\", []_C_int{6, 16}},\n\t{\"kern.allowdt\", []_C_int{1, 65}},\n\t{\"kern.allowkmem\", []_C_int{1, 52}},\n\t{\"kern.argmax\", []_C_int{1, 8}},\n\t{\"kern.audio\", []_C_int{1, 84}},\n\t{\"kern.boottime\", []_C_int{1, 21}},\n\t{\"kern.bufcachepercent\", []_C_int{1, 72}},\n\t{\"kern.ccpu\", []_C_int{1, 45}},\n\t{\"kern.clockrate\", []_C_int{1, 12}},\n\t{\"kern.consbuf\", []_C_int{1, 83}},\n\t{\"kern.consbufsize\", []_C_int{1, 82}},\n\t{\"kern.consdev\", []_C_int{1, 75}},\n\t{\"kern.cp_time\", []_C_int{1, 40}},\n\t{\"kern.cp_time2\", []_C_int{1, 71}},\n\t{\"kern.cpustats\", []_C_int{1, 85}},\n\t{\"kern.domainname\", []_C_int{1, 22}},\n\t{\"kern.file\", []_C_int{1, 73}},\n\t{\"kern.forkstat\", []_C_int{1, 42}},\n\t{\"kern.fscale\", []_C_int{1, 46}},\n\t{\"kern.fsync\", []_C_int{1, 33}},\n\t{\"kern.global_ptrace\", []_C_int{1, 81}},\n\t{\"kern.hostid\", []_C_int{1, 11}},\n\t{\"kern.hostname\", []_C_int{1, 10}},\n\t{\"kern.intrcnt.nintrcnt\", []_C_int{1, 63, 1}},\n\t{\"kern.job_control\", []_C_int{1, 19}},\n\t{\"kern.malloc.buckets\", []_C_int{1, 39, 1}},\n\t{\"kern.malloc.kmemnames\", []_C_int{1, 39, 3}},\n\t{\"kern.maxclusters\", []_C_int{1, 67}},\n\t{\"kern.maxfiles\", []_C_int{1, 7}},\n\t{\"kern.maxlocksperuid\", []_C_int{1, 70}},\n\t{\"kern.maxpartitions\", []_C_int{1, 23}},\n\t{\"kern.maxproc\", []_C_int{1, 6}},\n\t{\"kern.maxthread\", []_C_int{1, 25}},\n\t{\"kern.maxvnodes\", []_C_int{1, 5}},\n\t{\"kern.mbstat\", []_C_int{1, 59}},\n\t{\"kern.msgbuf\", []_C_int{1, 48}},\n\t{\"kern.msgbufsize\", []_C_int{1, 38}},\n\t{\"kern.nchstats\", []_C_int{1, 41}},\n\t{\"kern.netlivelocks\", []_C_int{1, 76}},\n\t{\"kern.nfiles\", []_C_int{1, 56}},\n\t{\"kern.ngroups\", []_C_int{1, 18}},\n\t{\"kern.nosuidcoredump\", []_C_int{1, 32}},\n\t{\"kern.nprocs\", []_C_int{1, 47}},\n\t{\"kern.nselcoll\", []_C_int{1, 43}},\n\t{\"kern.nthreads\", []_C_int{1, 26}},\n\t{\"kern.numvnodes\", []_C_int{1, 58}},\n\t{\"kern.osrelease\", []_C_int{1, 2}},\n\t{\"kern.osrevision\", []_C_int{1, 3}},\n\t{\"kern.ostype\", []_C_int{1, 1}},\n\t{\"kern.osversion\", []_C_int{1, 27}},\n\t{\"kern.pfstatus\", []_C_int{1, 86}},\n\t{\"kern.pool_debug\", []_C_int{1, 77}},\n\t{\"kern.posix1version\", []_C_int{1, 17}},\n\t{\"kern.proc\", []_C_int{1, 66}},\n\t{\"kern.rawpartition\", []_C_int{1, 24}},\n\t{\"kern.saved_ids\", []_C_int{1, 20}},\n\t{\"kern.securelevel\", []_C_int{1, 9}},\n\t{\"kern.seminfo\", []_C_int{1, 61}},\n\t{\"kern.shminfo\", []_C_int{1, 62}},\n\t{\"kern.somaxconn\", []_C_int{1, 28}},\n\t{\"kern.sominconn\", []_C_int{1, 29}},\n\t{\"kern.splassert\", []_C_int{1, 54}},\n\t{\"kern.stackgap_random\", []_C_int{1, 50}},\n\t{\"kern.sysvipc_info\", []_C_int{1, 51}},\n\t{\"kern.sysvmsg\", []_C_int{1, 34}},\n\t{\"kern.sysvsem\", []_C_int{1, 35}},\n\t{\"kern.sysvshm\", []_C_int{1, 36}},\n\t{\"kern.timecounter.choice\", []_C_int{1, 69, 4}},\n\t{\"kern.timecounter.hardware\", []_C_int{1, 69, 3}},\n\t{\"kern.timecounter.tick\", []_C_int{1, 69, 1}},\n\t{\"kern.timecounter.timestepwarnings\", []_C_int{1, 69, 2}},\n\t{\"kern.timeout_stats\", []_C_int{1, 87}},\n\t{\"kern.tty.tk_cancc\", []_C_int{1, 44, 4}},\n\t{\"kern.tty.tk_nin\", []_C_int{1, 44, 1}},\n\t{\"kern.tty.tk_nout\", []_C_int{1, 44, 2}},\n\t{\"kern.tty.tk_rawcc\", []_C_int{1, 44, 3}},\n\t{\"kern.tty.ttyinfo\", []_C_int{1, 44, 5}},\n\t{\"kern.ttycount\", []_C_int{1, 57}},\n\t{\"kern.utc_offset\", []_C_int{1, 88}},\n\t{\"kern.version\", []_C_int{1, 4}},\n\t{\"kern.video\", []_C_int{1, 89}},\n\t{\"kern.watchdog.auto\", []_C_int{1, 64, 2}},\n\t{\"kern.watchdog.period\", []_C_int{1, 64, 1}},\n\t{\"kern.witnesswatch\", []_C_int{1, 53}},\n\t{\"kern.wxabort\", []_C_int{1, 74}},\n\t{\"net.bpf.bufsize\", []_C_int{4, 31, 1}},\n\t{\"net.bpf.maxbufsize\", []_C_int{4, 31, 2}},\n\t{\"net.inet.ah.enable\", []_C_int{4, 2, 51, 1}},\n\t{\"net.inet.ah.stats\", []_C_int{4, 2, 51, 2}},\n\t{\"net.inet.carp.allow\", []_C_int{4, 2, 112, 1}},\n\t{\"net.inet.carp.log\", []_C_int{4, 2, 112, 3}},\n\t{\"net.inet.carp.preempt\", []_C_int{4, 2, 112, 2}},\n\t{\"net.inet.carp.stats\", []_C_int{4, 2, 112, 4}},\n\t{\"net.inet.divert.recvspace\", []_C_int{4, 2, 258, 1}},\n\t{\"net.inet.divert.sendspace\", []_C_int{4, 2, 258, 2}},\n\t{\"net.inet.divert.stats\", []_C_int{4, 2, 258, 3}},\n\t{\"net.inet.esp.enable\", []_C_int{4, 2, 50, 1}},\n\t{\"net.inet.esp.stats\", []_C_int{4, 2, 50, 4}},\n\t{\"net.inet.esp.udpencap\", []_C_int{4, 2, 50, 2}},\n\t{\"net.inet.esp.udpencap_port\", []_C_int{4, 2, 50, 3}},\n\t{\"net.inet.etherip.allow\", []_C_int{4, 2, 97, 1}},\n\t{\"net.inet.etherip.stats\", []_C_int{4, 2, 97, 2}},\n\t{\"net.inet.gre.allow\", []_C_int{4, 2, 47, 1}},\n\t{\"net.inet.gre.wccp\", []_C_int{4, 2, 47, 2}},\n\t{\"net.inet.icmp.bmcastecho\", []_C_int{4, 2, 1, 2}},\n\t{\"net.inet.icmp.errppslimit\", []_C_int{4, 2, 1, 3}},\n\t{\"net.inet.icmp.maskrepl\", []_C_int{4, 2, 1, 1}},\n\t{\"net.inet.icmp.rediraccept\", []_C_int{4, 2, 1, 4}},\n\t{\"net.inet.icmp.redirtimeout\", []_C_int{4, 2, 1, 5}},\n\t{\"net.inet.icmp.stats\", []_C_int{4, 2, 1, 7}},\n\t{\"net.inet.icmp.tstamprepl\", []_C_int{4, 2, 1, 6}},\n\t{\"net.inet.igmp.stats\", []_C_int{4, 2, 2, 1}},\n\t{\"net.inet.ip.arpdown\", []_C_int{4, 2, 0, 40}},\n\t{\"net.inet.ip.arpqueued\", []_C_int{4, 2, 0, 36}},\n\t{\"net.inet.ip.arptimeout\", []_C_int{4, 2, 0, 39}},\n\t{\"net.inet.ip.encdebug\", []_C_int{4, 2, 0, 12}},\n\t{\"net.inet.ip.forwarding\", []_C_int{4, 2, 0, 1}},\n\t{\"net.inet.ip.ifq.congestion\", []_C_int{4, 2, 0, 30, 4}},\n\t{\"net.inet.ip.ifq.drops\", []_C_int{4, 2, 0, 30, 3}},\n\t{\"net.inet.ip.ifq.len\", []_C_int{4, 2, 0, 30, 1}},\n\t{\"net.inet.ip.ifq.maxlen\", []_C_int{4, 2, 0, 30, 2}},\n\t{\"net.inet.ip.maxqueue\", []_C_int{4, 2, 0, 11}},\n\t{\"net.inet.ip.mforwarding\", []_C_int{4, 2, 0, 31}},\n\t{\"net.inet.ip.mrtmfc\", []_C_int{4, 2, 0, 37}},\n\t{\"net.inet.ip.mrtproto\", []_C_int{4, 2, 0, 34}},\n\t{\"net.inet.ip.mrtstats\", []_C_int{4, 2, 0, 35}},\n\t{\"net.inet.ip.mrtvif\", []_C_int{4, 2, 0, 38}},\n\t{\"net.inet.ip.mtu\", []_C_int{4, 2, 0, 4}},\n\t{\"net.inet.ip.mtudisc\", []_C_int{4, 2, 0, 27}},\n\t{\"net.inet.ip.mtudisctimeout\", []_C_int{4, 2, 0, 28}},\n\t{\"net.inet.ip.multipath\", []_C_int{4, 2, 0, 32}},\n\t{\"net.inet.ip.portfirst\", []_C_int{4, 2, 0, 7}},\n\t{\"net.inet.ip.porthifirst\", []_C_int{4, 2, 0, 9}},\n\t{\"net.inet.ip.porthilast\", []_C_int{4, 2, 0, 10}},\n\t{\"net.inet.ip.portlast\", []_C_int{4, 2, 0, 8}},\n\t{\"net.inet.ip.redirect\", []_C_int{4, 2, 0, 2}},\n\t{\"net.inet.ip.sourceroute\", []_C_int{4, 2, 0, 5}},\n\t{\"net.inet.ip.stats\", []_C_int{4, 2, 0, 33}},\n\t{\"net.inet.ip.ttl\", []_C_int{4, 2, 0, 3}},\n\t{\"net.inet.ipcomp.enable\", []_C_int{4, 2, 108, 1}},\n\t{\"net.inet.ipcomp.stats\", []_C_int{4, 2, 108, 2}},\n\t{\"net.inet.ipip.allow\", []_C_int{4, 2, 4, 1}},\n\t{\"net.inet.ipip.stats\", []_C_int{4, 2, 4, 2}},\n\t{\"net.inet.pfsync.stats\", []_C_int{4, 2, 240, 1}},\n\t{\"net.inet.tcp.ackonpush\", []_C_int{4, 2, 6, 13}},\n\t{\"net.inet.tcp.always_keepalive\", []_C_int{4, 2, 6, 22}},\n\t{\"net.inet.tcp.baddynamic\", []_C_int{4, 2, 6, 6}},\n\t{\"net.inet.tcp.drop\", []_C_int{4, 2, 6, 19}},\n\t{\"net.inet.tcp.ecn\", []_C_int{4, 2, 6, 14}},\n\t{\"net.inet.tcp.ident\", []_C_int{4, 2, 6, 9}},\n\t{\"net.inet.tcp.keepidle\", []_C_int{4, 2, 6, 3}},\n\t{\"net.inet.tcp.keepinittime\", []_C_int{4, 2, 6, 2}},\n\t{\"net.inet.tcp.keepintvl\", []_C_int{4, 2, 6, 4}},\n\t{\"net.inet.tcp.mssdflt\", []_C_int{4, 2, 6, 11}},\n\t{\"net.inet.tcp.reasslimit\", []_C_int{4, 2, 6, 18}},\n\t{\"net.inet.tcp.rfc1323\", []_C_int{4, 2, 6, 1}},\n\t{\"net.inet.tcp.rfc3390\", []_C_int{4, 2, 6, 17}},\n\t{\"net.inet.tcp.rootonly\", []_C_int{4, 2, 6, 24}},\n\t{\"net.inet.tcp.rstppslimit\", []_C_int{4, 2, 6, 12}},\n\t{\"net.inet.tcp.sack\", []_C_int{4, 2, 6, 10}},\n\t{\"net.inet.tcp.sackholelimit\", []_C_int{4, 2, 6, 20}},\n\t{\"net.inet.tcp.slowhz\", []_C_int{4, 2, 6, 5}},\n\t{\"net.inet.tcp.stats\", []_C_int{4, 2, 6, 21}},\n\t{\"net.inet.tcp.synbucketlimit\", []_C_int{4, 2, 6, 16}},\n\t{\"net.inet.tcp.syncachelimit\", []_C_int{4, 2, 6, 15}},\n\t{\"net.inet.tcp.synhashsize\", []_C_int{4, 2, 6, 25}},\n\t{\"net.inet.tcp.synuselimit\", []_C_int{4, 2, 6, 23}},\n\t{\"net.inet.udp.baddynamic\", []_C_int{4, 2, 17, 2}},\n\t{\"net.inet.udp.checksum\", []_C_int{4, 2, 17, 1}},\n\t{\"net.inet.udp.recvspace\", []_C_int{4, 2, 17, 3}},\n\t{\"net.inet.udp.rootonly\", []_C_int{4, 2, 17, 6}},\n\t{\"net.inet.udp.sendspace\", []_C_int{4, 2, 17, 4}},\n\t{\"net.inet.udp.stats\", []_C_int{4, 2, 17, 5}},\n\t{\"net.inet6.divert.recvspace\", []_C_int{4, 24, 86, 1}},\n\t{\"net.inet6.divert.sendspace\", []_C_int{4, 24, 86, 2}},\n\t{\"net.inet6.divert.stats\", []_C_int{4, 24, 86, 3}},\n\t{\"net.inet6.icmp6.errppslimit\", []_C_int{4, 24, 30, 14}},\n\t{\"net.inet6.icmp6.mtudisc_hiwat\", []_C_int{4, 24, 30, 16}},\n\t{\"net.inet6.icmp6.mtudisc_lowat\", []_C_int{4, 24, 30, 17}},\n\t{\"net.inet6.icmp6.nd6_debug\", []_C_int{4, 24, 30, 18}},\n\t{\"net.inet6.icmp6.nd6_delay\", []_C_int{4, 24, 30, 8}},\n\t{\"net.inet6.icmp6.nd6_maxnudhint\", []_C_int{4, 24, 30, 15}},\n\t{\"net.inet6.icmp6.nd6_mmaxtries\", []_C_int{4, 24, 30, 10}},\n\t{\"net.inet6.icmp6.nd6_umaxtries\", []_C_int{4, 24, 30, 9}},\n\t{\"net.inet6.icmp6.redirtimeout\", []_C_int{4, 24, 30, 3}},\n\t{\"net.inet6.ip6.auto_flowlabel\", []_C_int{4, 24, 17, 17}},\n\t{\"net.inet6.ip6.dad_count\", []_C_int{4, 24, 17, 16}},\n\t{\"net.inet6.ip6.dad_pending\", []_C_int{4, 24, 17, 49}},\n\t{\"net.inet6.ip6.defmcasthlim\", []_C_int{4, 24, 17, 18}},\n\t{\"net.inet6.ip6.forwarding\", []_C_int{4, 24, 17, 1}},\n\t{\"net.inet6.ip6.forwsrcrt\", []_C_int{4, 24, 17, 5}},\n\t{\"net.inet6.ip6.hdrnestlimit\", []_C_int{4, 24, 17, 15}},\n\t{\"net.inet6.ip6.hlim\", []_C_int{4, 24, 17, 3}},\n\t{\"net.inet6.ip6.log_interval\", []_C_int{4, 24, 17, 14}},\n\t{\"net.inet6.ip6.maxdynroutes\", []_C_int{4, 24, 17, 48}},\n\t{\"net.inet6.ip6.maxfragpackets\", []_C_int{4, 24, 17, 9}},\n\t{\"net.inet6.ip6.maxfrags\", []_C_int{4, 24, 17, 41}},\n\t{\"net.inet6.ip6.mforwarding\", []_C_int{4, 24, 17, 42}},\n\t{\"net.inet6.ip6.mrtmfc\", []_C_int{4, 24, 17, 53}},\n\t{\"net.inet6.ip6.mrtmif\", []_C_int{4, 24, 17, 52}},\n\t{\"net.inet6.ip6.mrtproto\", []_C_int{4, 24, 17, 8}},\n\t{\"net.inet6.ip6.mtudisctimeout\", []_C_int{4, 24, 17, 50}},\n\t{\"net.inet6.ip6.multicast_mtudisc\", []_C_int{4, 24, 17, 44}},\n\t{\"net.inet6.ip6.multipath\", []_C_int{4, 24, 17, 43}},\n\t{\"net.inet6.ip6.neighborgcthresh\", []_C_int{4, 24, 17, 45}},\n\t{\"net.inet6.ip6.redirect\", []_C_int{4, 24, 17, 2}},\n\t{\"net.inet6.ip6.soiikey\", []_C_int{4, 24, 17, 54}},\n\t{\"net.inet6.ip6.sourcecheck\", []_C_int{4, 24, 17, 10}},\n\t{\"net.inet6.ip6.sourcecheck_logint\", []_C_int{4, 24, 17, 11}},\n\t{\"net.inet6.ip6.use_deprecated\", []_C_int{4, 24, 17, 21}},\n\t{\"net.key.sadb_dump\", []_C_int{4, 30, 1}},\n\t{\"net.key.spd_dump\", []_C_int{4, 30, 2}},\n\t{\"net.mpls.ifq.congestion\", []_C_int{4, 33, 3, 4}},\n\t{\"net.mpls.ifq.drops\", []_C_int{4, 33, 3, 3}},\n\t{\"net.mpls.ifq.len\", []_C_int{4, 33, 3, 1}},\n\t{\"net.mpls.ifq.maxlen\", []_C_int{4, 33, 3, 2}},\n\t{\"net.mpls.mapttl_ip\", []_C_int{4, 33, 5}},\n\t{\"net.mpls.mapttl_ip6\", []_C_int{4, 33, 6}},\n\t{\"net.mpls.ttl\", []_C_int{4, 33, 2}},\n\t{\"net.pflow.stats\", []_C_int{4, 34, 1}},\n\t{\"net.pipex.enable\", []_C_int{4, 35, 1}},\n\t{\"vm.anonmin\", []_C_int{2, 7}},\n\t{\"vm.loadavg\", []_C_int{2, 2}},\n\t{\"vm.malloc_conf\", []_C_int{2, 12}},\n\t{\"vm.maxslp\", []_C_int{2, 10}},\n\t{\"vm.nkmempages\", []_C_int{2, 6}},\n\t{\"vm.psstrings\", []_C_int{2, 3}},\n\t{\"vm.swapencrypt.enable\", []_C_int{2, 5, 0}},\n\t{\"vm.swapencrypt.keyscreated\", []_C_int{2, 5, 1}},\n\t{\"vm.swapencrypt.keysdeleted\", []_C_int{2, 5, 2}},\n\t{\"vm.uspace\", []_C_int{2, 11}},\n\t{\"vm.uvmexp\", []_C_int{2, 4}},\n\t{\"vm.vmmeter\", []_C_int{2, 1}},\n\t{\"vm.vnodemin\", []_C_int{2, 9}},\n\t{\"vm.vtextmin\", []_C_int{2, 8}},\n}\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go",
    "content": "// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include/sys/syscall.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build amd64 && darwin\n\npackage unix\n\n// Deprecated: Use libSystem wrappers instead of direct syscalls.\nconst (\n\tSYS_SYSCALL                        = 0\n\tSYS_EXIT                           = 1\n\tSYS_FORK                           = 2\n\tSYS_READ                           = 3\n\tSYS_WRITE                          = 4\n\tSYS_OPEN                           = 5\n\tSYS_CLOSE                          = 6\n\tSYS_WAIT4                          = 7\n\tSYS_LINK                           = 9\n\tSYS_UNLINK                         = 10\n\tSYS_CHDIR                          = 12\n\tSYS_FCHDIR                         = 13\n\tSYS_MKNOD                          = 14\n\tSYS_CHMOD                          = 15\n\tSYS_CHOWN                          = 16\n\tSYS_GETFSSTAT                      = 18\n\tSYS_GETPID                         = 20\n\tSYS_SETUID                         = 23\n\tSYS_GETUID                         = 24\n\tSYS_GETEUID                        = 25\n\tSYS_PTRACE                         = 26\n\tSYS_RECVMSG                        = 27\n\tSYS_SENDMSG                        = 28\n\tSYS_RECVFROM                       = 29\n\tSYS_ACCEPT                         = 30\n\tSYS_GETPEERNAME                    = 31\n\tSYS_GETSOCKNAME                    = 32\n\tSYS_ACCESS                         = 33\n\tSYS_CHFLAGS                        = 34\n\tSYS_FCHFLAGS                       = 35\n\tSYS_SYNC                           = 36\n\tSYS_KILL                           = 37\n\tSYS_GETPPID                        = 39\n\tSYS_DUP                            = 41\n\tSYS_PIPE                           = 42\n\tSYS_GETEGID                        = 43\n\tSYS_SIGACTION                      = 46\n\tSYS_GETGID                         = 47\n\tSYS_SIGPROCMASK                    = 48\n\tSYS_GETLOGIN                       = 49\n\tSYS_SETLOGIN                       = 50\n\tSYS_ACCT                           = 51\n\tSYS_SIGPENDING                     = 52\n\tSYS_SIGALTSTACK                    = 53\n\tSYS_IOCTL                          = 54\n\tSYS_REBOOT                         = 55\n\tSYS_REVOKE                         = 56\n\tSYS_SYMLINK                        = 57\n\tSYS_READLINK                       = 58\n\tSYS_EXECVE                         = 59\n\tSYS_UMASK                          = 60\n\tSYS_CHROOT                         = 61\n\tSYS_MSYNC                          = 65\n\tSYS_VFORK                          = 66\n\tSYS_MUNMAP                         = 73\n\tSYS_MPROTECT                       = 74\n\tSYS_MADVISE                        = 75\n\tSYS_MINCORE                        = 78\n\tSYS_GETGROUPS                      = 79\n\tSYS_SETGROUPS                      = 80\n\tSYS_GETPGRP                        = 81\n\tSYS_SETPGID                        = 82\n\tSYS_SETITIMER                      = 83\n\tSYS_SWAPON                         = 85\n\tSYS_GETITIMER                      = 86\n\tSYS_GETDTABLESIZE                  = 89\n\tSYS_DUP2                           = 90\n\tSYS_FCNTL                          = 92\n\tSYS_SELECT                         = 93\n\tSYS_FSYNC                          = 95\n\tSYS_SETPRIORITY                    = 96\n\tSYS_SOCKET                         = 97\n\tSYS_CONNECT                        = 98\n\tSYS_GETPRIORITY                    = 100\n\tSYS_BIND                           = 104\n\tSYS_SETSOCKOPT                     = 105\n\tSYS_LISTEN                         = 106\n\tSYS_SIGSUSPEND                     = 111\n\tSYS_GETTIMEOFDAY                   = 116\n\tSYS_GETRUSAGE                      = 117\n\tSYS_GETSOCKOPT                     = 118\n\tSYS_READV                          = 120\n\tSYS_WRITEV                         = 121\n\tSYS_SETTIMEOFDAY                   = 122\n\tSYS_FCHOWN                         = 123\n\tSYS_FCHMOD                         = 124\n\tSYS_SETREUID                       = 126\n\tSYS_SETREGID                       = 127\n\tSYS_RENAME                         = 128\n\tSYS_FLOCK                          = 131\n\tSYS_MKFIFO                         = 132\n\tSYS_SENDTO                         = 133\n\tSYS_SHUTDOWN                       = 134\n\tSYS_SOCKETPAIR                     = 135\n\tSYS_MKDIR                          = 136\n\tSYS_RMDIR                          = 137\n\tSYS_UTIMES                         = 138\n\tSYS_FUTIMES                        = 139\n\tSYS_ADJTIME                        = 140\n\tSYS_GETHOSTUUID                    = 142\n\tSYS_SETSID                         = 147\n\tSYS_GETPGID                        = 151\n\tSYS_SETPRIVEXEC                    = 152\n\tSYS_PREAD                          = 153\n\tSYS_PWRITE                         = 154\n\tSYS_NFSSVC                         = 155\n\tSYS_STATFS                         = 157\n\tSYS_FSTATFS                        = 158\n\tSYS_UNMOUNT                        = 159\n\tSYS_GETFH                          = 161\n\tSYS_QUOTACTL                       = 165\n\tSYS_MOUNT                          = 167\n\tSYS_CSOPS                          = 169\n\tSYS_CSOPS_AUDITTOKEN               = 170\n\tSYS_WAITID                         = 173\n\tSYS_KDEBUG_TYPEFILTER              = 177\n\tSYS_KDEBUG_TRACE_STRING            = 178\n\tSYS_KDEBUG_TRACE64                 = 179\n\tSYS_KDEBUG_TRACE                   = 180\n\tSYS_SETGID                         = 181\n\tSYS_SETEGID                        = 182\n\tSYS_SETEUID                        = 183\n\tSYS_SIGRETURN                      = 184\n\tSYS_THREAD_SELFCOUNTS              = 186\n\tSYS_FDATASYNC                      = 187\n\tSYS_STAT                           = 188\n\tSYS_FSTAT                          = 189\n\tSYS_LSTAT                          = 190\n\tSYS_PATHCONF                       = 191\n\tSYS_FPATHCONF                      = 192\n\tSYS_GETRLIMIT                      = 194\n\tSYS_SETRLIMIT                      = 195\n\tSYS_GETDIRENTRIES                  = 196\n\tSYS_MMAP                           = 197\n\tSYS_LSEEK                          = 199\n\tSYS_TRUNCATE                       = 200\n\tSYS_FTRUNCATE                      = 201\n\tSYS_SYSCTL                         = 202\n\tSYS_MLOCK                          = 203\n\tSYS_MUNLOCK                        = 204\n\tSYS_UNDELETE                       = 205\n\tSYS_OPEN_DPROTECTED_NP             = 216\n\tSYS_GETATTRLIST                    = 220\n\tSYS_SETATTRLIST                    = 221\n\tSYS_GETDIRENTRIESATTR              = 222\n\tSYS_EXCHANGEDATA                   = 223\n\tSYS_SEARCHFS                       = 225\n\tSYS_DELETE                         = 226\n\tSYS_COPYFILE                       = 227\n\tSYS_FGETATTRLIST                   = 228\n\tSYS_FSETATTRLIST                   = 229\n\tSYS_POLL                           = 230\n\tSYS_WATCHEVENT                     = 231\n\tSYS_WAITEVENT                      = 232\n\tSYS_MODWATCH                       = 233\n\tSYS_GETXATTR                       = 234\n\tSYS_FGETXATTR                      = 235\n\tSYS_SETXATTR                       = 236\n\tSYS_FSETXATTR                      = 237\n\tSYS_REMOVEXATTR                    = 238\n\tSYS_FREMOVEXATTR                   = 239\n\tSYS_LISTXATTR                      = 240\n\tSYS_FLISTXATTR                     = 241\n\tSYS_FSCTL                          = 242\n\tSYS_INITGROUPS                     = 243\n\tSYS_POSIX_SPAWN                    = 244\n\tSYS_FFSCTL                         = 245\n\tSYS_NFSCLNT                        = 247\n\tSYS_FHOPEN                         = 248\n\tSYS_MINHERIT                       = 250\n\tSYS_SEMSYS                         = 251\n\tSYS_MSGSYS                         = 252\n\tSYS_SHMSYS                         = 253\n\tSYS_SEMCTL                         = 254\n\tSYS_SEMGET                         = 255\n\tSYS_SEMOP                          = 256\n\tSYS_MSGCTL                         = 258\n\tSYS_MSGGET                         = 259\n\tSYS_MSGSND                         = 260\n\tSYS_MSGRCV                         = 261\n\tSYS_SHMAT                          = 262\n\tSYS_SHMCTL                         = 263\n\tSYS_SHMDT                          = 264\n\tSYS_SHMGET                         = 265\n\tSYS_SHM_OPEN                       = 266\n\tSYS_SHM_UNLINK                     = 267\n\tSYS_SEM_OPEN                       = 268\n\tSYS_SEM_CLOSE                      = 269\n\tSYS_SEM_UNLINK                     = 270\n\tSYS_SEM_WAIT                       = 271\n\tSYS_SEM_TRYWAIT                    = 272\n\tSYS_SEM_POST                       = 273\n\tSYS_SYSCTLBYNAME                   = 274\n\tSYS_OPEN_EXTENDED                  = 277\n\tSYS_UMASK_EXTENDED                 = 278\n\tSYS_STAT_EXTENDED                  = 279\n\tSYS_LSTAT_EXTENDED                 = 280\n\tSYS_FSTAT_EXTENDED                 = 281\n\tSYS_CHMOD_EXTENDED                 = 282\n\tSYS_FCHMOD_EXTENDED                = 283\n\tSYS_ACCESS_EXTENDED                = 284\n\tSYS_SETTID                         = 285\n\tSYS_GETTID                         = 286\n\tSYS_SETSGROUPS                     = 287\n\tSYS_GETSGROUPS                     = 288\n\tSYS_SETWGROUPS                     = 289\n\tSYS_GETWGROUPS                     = 290\n\tSYS_MKFIFO_EXTENDED                = 291\n\tSYS_MKDIR_EXTENDED                 = 292\n\tSYS_IDENTITYSVC                    = 293\n\tSYS_SHARED_REGION_CHECK_NP         = 294\n\tSYS_VM_PRESSURE_MONITOR            = 296\n\tSYS_PSYNCH_RW_LONGRDLOCK           = 297\n\tSYS_PSYNCH_RW_YIELDWRLOCK          = 298\n\tSYS_PSYNCH_RW_DOWNGRADE            = 299\n\tSYS_PSYNCH_RW_UPGRADE              = 300\n\tSYS_PSYNCH_MUTEXWAIT               = 301\n\tSYS_PSYNCH_MUTEXDROP               = 302\n\tSYS_PSYNCH_CVBROAD                 = 303\n\tSYS_PSYNCH_CVSIGNAL                = 304\n\tSYS_PSYNCH_CVWAIT                  = 305\n\tSYS_PSYNCH_RW_RDLOCK               = 306\n\tSYS_PSYNCH_RW_WRLOCK               = 307\n\tSYS_PSYNCH_RW_UNLOCK               = 308\n\tSYS_PSYNCH_RW_UNLOCK2              = 309\n\tSYS_GETSID                         = 310\n\tSYS_SETTID_WITH_PID                = 311\n\tSYS_PSYNCH_CVCLRPREPOST            = 312\n\tSYS_AIO_FSYNC                      = 313\n\tSYS_AIO_RETURN                     = 314\n\tSYS_AIO_SUSPEND                    = 315\n\tSYS_AIO_CANCEL                     = 316\n\tSYS_AIO_ERROR                      = 317\n\tSYS_AIO_READ                       = 318\n\tSYS_AIO_WRITE                      = 319\n\tSYS_LIO_LISTIO                     = 320\n\tSYS_IOPOLICYSYS                    = 322\n\tSYS_PROCESS_POLICY                 = 323\n\tSYS_MLOCKALL                       = 324\n\tSYS_MUNLOCKALL                     = 325\n\tSYS_ISSETUGID                      = 327\n\tSYS___PTHREAD_KILL                 = 328\n\tSYS___PTHREAD_SIGMASK              = 329\n\tSYS___SIGWAIT                      = 330\n\tSYS___DISABLE_THREADSIGNAL         = 331\n\tSYS___PTHREAD_MARKCANCEL           = 332\n\tSYS___PTHREAD_CANCELED             = 333\n\tSYS___SEMWAIT_SIGNAL               = 334\n\tSYS_PROC_INFO                      = 336\n\tSYS_SENDFILE                       = 337\n\tSYS_STAT64                         = 338\n\tSYS_FSTAT64                        = 339\n\tSYS_LSTAT64                        = 340\n\tSYS_STAT64_EXTENDED                = 341\n\tSYS_LSTAT64_EXTENDED               = 342\n\tSYS_FSTAT64_EXTENDED               = 343\n\tSYS_GETDIRENTRIES64                = 344\n\tSYS_STATFS64                       = 345\n\tSYS_FSTATFS64                      = 346\n\tSYS_GETFSSTAT64                    = 347\n\tSYS___PTHREAD_CHDIR                = 348\n\tSYS___PTHREAD_FCHDIR               = 349\n\tSYS_AUDIT                          = 350\n\tSYS_AUDITON                        = 351\n\tSYS_GETAUID                        = 353\n\tSYS_SETAUID                        = 354\n\tSYS_GETAUDIT_ADDR                  = 357\n\tSYS_SETAUDIT_ADDR                  = 358\n\tSYS_AUDITCTL                       = 359\n\tSYS_BSDTHREAD_CREATE               = 360\n\tSYS_BSDTHREAD_TERMINATE            = 361\n\tSYS_KQUEUE                         = 362\n\tSYS_KEVENT                         = 363\n\tSYS_LCHOWN                         = 364\n\tSYS_BSDTHREAD_REGISTER             = 366\n\tSYS_WORKQ_OPEN                     = 367\n\tSYS_WORKQ_KERNRETURN               = 368\n\tSYS_KEVENT64                       = 369\n\tSYS___OLD_SEMWAIT_SIGNAL           = 370\n\tSYS___OLD_SEMWAIT_SIGNAL_NOCANCEL  = 371\n\tSYS_THREAD_SELFID                  = 372\n\tSYS_LEDGER                         = 373\n\tSYS_KEVENT_QOS                     = 374\n\tSYS_KEVENT_ID                      = 375\n\tSYS___MAC_EXECVE                   = 380\n\tSYS___MAC_SYSCALL                  = 381\n\tSYS___MAC_GET_FILE                 = 382\n\tSYS___MAC_SET_FILE                 = 383\n\tSYS___MAC_GET_LINK                 = 384\n\tSYS___MAC_SET_LINK                 = 385\n\tSYS___MAC_GET_PROC                 = 386\n\tSYS___MAC_SET_PROC                 = 387\n\tSYS___MAC_GET_FD                   = 388\n\tSYS___MAC_SET_FD                   = 389\n\tSYS___MAC_GET_PID                  = 390\n\tSYS_PSELECT                        = 394\n\tSYS_PSELECT_NOCANCEL               = 395\n\tSYS_READ_NOCANCEL                  = 396\n\tSYS_WRITE_NOCANCEL                 = 397\n\tSYS_OPEN_NOCANCEL                  = 398\n\tSYS_CLOSE_NOCANCEL                 = 399\n\tSYS_WAIT4_NOCANCEL                 = 400\n\tSYS_RECVMSG_NOCANCEL               = 401\n\tSYS_SENDMSG_NOCANCEL               = 402\n\tSYS_RECVFROM_NOCANCEL              = 403\n\tSYS_ACCEPT_NOCANCEL                = 404\n\tSYS_MSYNC_NOCANCEL                 = 405\n\tSYS_FCNTL_NOCANCEL                 = 406\n\tSYS_SELECT_NOCANCEL                = 407\n\tSYS_FSYNC_NOCANCEL                 = 408\n\tSYS_CONNECT_NOCANCEL               = 409\n\tSYS_SIGSUSPEND_NOCANCEL            = 410\n\tSYS_READV_NOCANCEL                 = 411\n\tSYS_WRITEV_NOCANCEL                = 412\n\tSYS_SENDTO_NOCANCEL                = 413\n\tSYS_PREAD_NOCANCEL                 = 414\n\tSYS_PWRITE_NOCANCEL                = 415\n\tSYS_WAITID_NOCANCEL                = 416\n\tSYS_POLL_NOCANCEL                  = 417\n\tSYS_MSGSND_NOCANCEL                = 418\n\tSYS_MSGRCV_NOCANCEL                = 419\n\tSYS_SEM_WAIT_NOCANCEL              = 420\n\tSYS_AIO_SUSPEND_NOCANCEL           = 421\n\tSYS___SIGWAIT_NOCANCEL             = 422\n\tSYS___SEMWAIT_SIGNAL_NOCANCEL      = 423\n\tSYS___MAC_MOUNT                    = 424\n\tSYS___MAC_GET_MOUNT                = 425\n\tSYS___MAC_GETFSSTAT                = 426\n\tSYS_FSGETPATH                      = 427\n\tSYS_AUDIT_SESSION_SELF             = 428\n\tSYS_AUDIT_SESSION_JOIN             = 429\n\tSYS_FILEPORT_MAKEPORT              = 430\n\tSYS_FILEPORT_MAKEFD                = 431\n\tSYS_AUDIT_SESSION_PORT             = 432\n\tSYS_PID_SUSPEND                    = 433\n\tSYS_PID_RESUME                     = 434\n\tSYS_PID_HIBERNATE                  = 435\n\tSYS_PID_SHUTDOWN_SOCKETS           = 436\n\tSYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438\n\tSYS_KAS_INFO                       = 439\n\tSYS_MEMORYSTATUS_CONTROL           = 440\n\tSYS_GUARDED_OPEN_NP                = 441\n\tSYS_GUARDED_CLOSE_NP               = 442\n\tSYS_GUARDED_KQUEUE_NP              = 443\n\tSYS_CHANGE_FDGUARD_NP              = 444\n\tSYS_USRCTL                         = 445\n\tSYS_PROC_RLIMIT_CONTROL            = 446\n\tSYS_CONNECTX                       = 447\n\tSYS_DISCONNECTX                    = 448\n\tSYS_PEELOFF                        = 449\n\tSYS_SOCKET_DELEGATE                = 450\n\tSYS_TELEMETRY                      = 451\n\tSYS_PROC_UUID_POLICY               = 452\n\tSYS_MEMORYSTATUS_GET_LEVEL         = 453\n\tSYS_SYSTEM_OVERRIDE                = 454\n\tSYS_VFS_PURGE                      = 455\n\tSYS_SFI_CTL                        = 456\n\tSYS_SFI_PIDCTL                     = 457\n\tSYS_COALITION                      = 458\n\tSYS_COALITION_INFO                 = 459\n\tSYS_NECP_MATCH_POLICY              = 460\n\tSYS_GETATTRLISTBULK                = 461\n\tSYS_CLONEFILEAT                    = 462\n\tSYS_OPENAT                         = 463\n\tSYS_OPENAT_NOCANCEL                = 464\n\tSYS_RENAMEAT                       = 465\n\tSYS_FACCESSAT                      = 466\n\tSYS_FCHMODAT                       = 467\n\tSYS_FCHOWNAT                       = 468\n\tSYS_FSTATAT                        = 469\n\tSYS_FSTATAT64                      = 470\n\tSYS_LINKAT                         = 471\n\tSYS_UNLINKAT                       = 472\n\tSYS_READLINKAT                     = 473\n\tSYS_SYMLINKAT                      = 474\n\tSYS_MKDIRAT                        = 475\n\tSYS_GETATTRLISTAT                  = 476\n\tSYS_PROC_TRACE_LOG                 = 477\n\tSYS_BSDTHREAD_CTL                  = 478\n\tSYS_OPENBYID_NP                    = 479\n\tSYS_RECVMSG_X                      = 480\n\tSYS_SENDMSG_X                      = 481\n\tSYS_THREAD_SELFUSAGE               = 482\n\tSYS_CSRCTL                         = 483\n\tSYS_GUARDED_OPEN_DPROTECTED_NP     = 484\n\tSYS_GUARDED_WRITE_NP               = 485\n\tSYS_GUARDED_PWRITE_NP              = 486\n\tSYS_GUARDED_WRITEV_NP              = 487\n\tSYS_RENAMEATX_NP                   = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_NETAGENT_TRIGGER               = 490\n\tSYS_STACK_SNAPSHOT_WITH_CONFIG     = 491\n\tSYS_MICROSTACKSHOT                 = 492\n\tSYS_GRAB_PGO_DATA                  = 493\n\tSYS_PERSONA                        = 494\n\tSYS_WORK_INTERVAL_CTL              = 499\n\tSYS_GETENTROPY                     = 500\n\tSYS_NECP_OPEN                      = 501\n\tSYS_NECP_CLIENT_ACTION             = 502\n\tSYS___NEXUS_OPEN                   = 503\n\tSYS___NEXUS_REGISTER               = 504\n\tSYS___NEXUS_DEREGISTER             = 505\n\tSYS___NEXUS_CREATE                 = 506\n\tSYS___NEXUS_DESTROY                = 507\n\tSYS___NEXUS_GET_OPT                = 508\n\tSYS___NEXUS_SET_OPT                = 509\n\tSYS___CHANNEL_OPEN                 = 510\n\tSYS___CHANNEL_GET_INFO             = 511\n\tSYS___CHANNEL_SYNC                 = 512\n\tSYS___CHANNEL_GET_OPT              = 513\n\tSYS___CHANNEL_SET_OPT              = 514\n\tSYS_ULOCK_WAIT                     = 515\n\tSYS_ULOCK_WAKE                     = 516\n\tSYS_FCLONEFILEAT                   = 517\n\tSYS_FS_SNAPSHOT                    = 518\n\tSYS_TERMINATE_WITH_PAYLOAD         = 520\n\tSYS_ABORT_WITH_PAYLOAD             = 521\n\tSYS_NECP_SESSION_OPEN              = 522\n\tSYS_NECP_SESSION_ACTION            = 523\n\tSYS_SETATTRLISTAT                  = 524\n\tSYS_NET_QOS_GUIDELINE              = 525\n\tSYS_FMOUNT                         = 526\n\tSYS_NTP_ADJTIME                    = 527\n\tSYS_NTP_GETTIME                    = 528\n\tSYS_OS_FAULT_WITH_PAYLOAD          = 529\n\tSYS_KQUEUE_WORKLOOP_CTL            = 530\n\tSYS___MACH_BRIDGE_REMOTE_TIME      = 531\n\tSYS_MAXSYSCALL                     = 532\n\tSYS_INVALID                        = 63\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go",
    "content": "// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm64 && darwin\n\npackage unix\n\n// Deprecated: Use libSystem wrappers instead of direct syscalls.\nconst (\n\tSYS_SYSCALL                        = 0\n\tSYS_EXIT                           = 1\n\tSYS_FORK                           = 2\n\tSYS_READ                           = 3\n\tSYS_WRITE                          = 4\n\tSYS_OPEN                           = 5\n\tSYS_CLOSE                          = 6\n\tSYS_WAIT4                          = 7\n\tSYS_LINK                           = 9\n\tSYS_UNLINK                         = 10\n\tSYS_CHDIR                          = 12\n\tSYS_FCHDIR                         = 13\n\tSYS_MKNOD                          = 14\n\tSYS_CHMOD                          = 15\n\tSYS_CHOWN                          = 16\n\tSYS_GETFSSTAT                      = 18\n\tSYS_GETPID                         = 20\n\tSYS_SETUID                         = 23\n\tSYS_GETUID                         = 24\n\tSYS_GETEUID                        = 25\n\tSYS_PTRACE                         = 26\n\tSYS_RECVMSG                        = 27\n\tSYS_SENDMSG                        = 28\n\tSYS_RECVFROM                       = 29\n\tSYS_ACCEPT                         = 30\n\tSYS_GETPEERNAME                    = 31\n\tSYS_GETSOCKNAME                    = 32\n\tSYS_ACCESS                         = 33\n\tSYS_CHFLAGS                        = 34\n\tSYS_FCHFLAGS                       = 35\n\tSYS_SYNC                           = 36\n\tSYS_KILL                           = 37\n\tSYS_GETPPID                        = 39\n\tSYS_DUP                            = 41\n\tSYS_PIPE                           = 42\n\tSYS_GETEGID                        = 43\n\tSYS_SIGACTION                      = 46\n\tSYS_GETGID                         = 47\n\tSYS_SIGPROCMASK                    = 48\n\tSYS_GETLOGIN                       = 49\n\tSYS_SETLOGIN                       = 50\n\tSYS_ACCT                           = 51\n\tSYS_SIGPENDING                     = 52\n\tSYS_SIGALTSTACK                    = 53\n\tSYS_IOCTL                          = 54\n\tSYS_REBOOT                         = 55\n\tSYS_REVOKE                         = 56\n\tSYS_SYMLINK                        = 57\n\tSYS_READLINK                       = 58\n\tSYS_EXECVE                         = 59\n\tSYS_UMASK                          = 60\n\tSYS_CHROOT                         = 61\n\tSYS_MSYNC                          = 65\n\tSYS_VFORK                          = 66\n\tSYS_MUNMAP                         = 73\n\tSYS_MPROTECT                       = 74\n\tSYS_MADVISE                        = 75\n\tSYS_MINCORE                        = 78\n\tSYS_GETGROUPS                      = 79\n\tSYS_SETGROUPS                      = 80\n\tSYS_GETPGRP                        = 81\n\tSYS_SETPGID                        = 82\n\tSYS_SETITIMER                      = 83\n\tSYS_SWAPON                         = 85\n\tSYS_GETITIMER                      = 86\n\tSYS_GETDTABLESIZE                  = 89\n\tSYS_DUP2                           = 90\n\tSYS_FCNTL                          = 92\n\tSYS_SELECT                         = 93\n\tSYS_FSYNC                          = 95\n\tSYS_SETPRIORITY                    = 96\n\tSYS_SOCKET                         = 97\n\tSYS_CONNECT                        = 98\n\tSYS_GETPRIORITY                    = 100\n\tSYS_BIND                           = 104\n\tSYS_SETSOCKOPT                     = 105\n\tSYS_LISTEN                         = 106\n\tSYS_SIGSUSPEND                     = 111\n\tSYS_GETTIMEOFDAY                   = 116\n\tSYS_GETRUSAGE                      = 117\n\tSYS_GETSOCKOPT                     = 118\n\tSYS_READV                          = 120\n\tSYS_WRITEV                         = 121\n\tSYS_SETTIMEOFDAY                   = 122\n\tSYS_FCHOWN                         = 123\n\tSYS_FCHMOD                         = 124\n\tSYS_SETREUID                       = 126\n\tSYS_SETREGID                       = 127\n\tSYS_RENAME                         = 128\n\tSYS_FLOCK                          = 131\n\tSYS_MKFIFO                         = 132\n\tSYS_SENDTO                         = 133\n\tSYS_SHUTDOWN                       = 134\n\tSYS_SOCKETPAIR                     = 135\n\tSYS_MKDIR                          = 136\n\tSYS_RMDIR                          = 137\n\tSYS_UTIMES                         = 138\n\tSYS_FUTIMES                        = 139\n\tSYS_ADJTIME                        = 140\n\tSYS_GETHOSTUUID                    = 142\n\tSYS_SETSID                         = 147\n\tSYS_GETPGID                        = 151\n\tSYS_SETPRIVEXEC                    = 152\n\tSYS_PREAD                          = 153\n\tSYS_PWRITE                         = 154\n\tSYS_NFSSVC                         = 155\n\tSYS_STATFS                         = 157\n\tSYS_FSTATFS                        = 158\n\tSYS_UNMOUNT                        = 159\n\tSYS_GETFH                          = 161\n\tSYS_QUOTACTL                       = 165\n\tSYS_MOUNT                          = 167\n\tSYS_CSOPS                          = 169\n\tSYS_CSOPS_AUDITTOKEN               = 170\n\tSYS_WAITID                         = 173\n\tSYS_KDEBUG_TYPEFILTER              = 177\n\tSYS_KDEBUG_TRACE_STRING            = 178\n\tSYS_KDEBUG_TRACE64                 = 179\n\tSYS_KDEBUG_TRACE                   = 180\n\tSYS_SETGID                         = 181\n\tSYS_SETEGID                        = 182\n\tSYS_SETEUID                        = 183\n\tSYS_SIGRETURN                      = 184\n\tSYS_THREAD_SELFCOUNTS              = 186\n\tSYS_FDATASYNC                      = 187\n\tSYS_STAT                           = 188\n\tSYS_FSTAT                          = 189\n\tSYS_LSTAT                          = 190\n\tSYS_PATHCONF                       = 191\n\tSYS_FPATHCONF                      = 192\n\tSYS_GETRLIMIT                      = 194\n\tSYS_SETRLIMIT                      = 195\n\tSYS_GETDIRENTRIES                  = 196\n\tSYS_MMAP                           = 197\n\tSYS_LSEEK                          = 199\n\tSYS_TRUNCATE                       = 200\n\tSYS_FTRUNCATE                      = 201\n\tSYS_SYSCTL                         = 202\n\tSYS_MLOCK                          = 203\n\tSYS_MUNLOCK                        = 204\n\tSYS_UNDELETE                       = 205\n\tSYS_OPEN_DPROTECTED_NP             = 216\n\tSYS_GETATTRLIST                    = 220\n\tSYS_SETATTRLIST                    = 221\n\tSYS_GETDIRENTRIESATTR              = 222\n\tSYS_EXCHANGEDATA                   = 223\n\tSYS_SEARCHFS                       = 225\n\tSYS_DELETE                         = 226\n\tSYS_COPYFILE                       = 227\n\tSYS_FGETATTRLIST                   = 228\n\tSYS_FSETATTRLIST                   = 229\n\tSYS_POLL                           = 230\n\tSYS_WATCHEVENT                     = 231\n\tSYS_WAITEVENT                      = 232\n\tSYS_MODWATCH                       = 233\n\tSYS_GETXATTR                       = 234\n\tSYS_FGETXATTR                      = 235\n\tSYS_SETXATTR                       = 236\n\tSYS_FSETXATTR                      = 237\n\tSYS_REMOVEXATTR                    = 238\n\tSYS_FREMOVEXATTR                   = 239\n\tSYS_LISTXATTR                      = 240\n\tSYS_FLISTXATTR                     = 241\n\tSYS_FSCTL                          = 242\n\tSYS_INITGROUPS                     = 243\n\tSYS_POSIX_SPAWN                    = 244\n\tSYS_FFSCTL                         = 245\n\tSYS_NFSCLNT                        = 247\n\tSYS_FHOPEN                         = 248\n\tSYS_MINHERIT                       = 250\n\tSYS_SEMSYS                         = 251\n\tSYS_MSGSYS                         = 252\n\tSYS_SHMSYS                         = 253\n\tSYS_SEMCTL                         = 254\n\tSYS_SEMGET                         = 255\n\tSYS_SEMOP                          = 256\n\tSYS_MSGCTL                         = 258\n\tSYS_MSGGET                         = 259\n\tSYS_MSGSND                         = 260\n\tSYS_MSGRCV                         = 261\n\tSYS_SHMAT                          = 262\n\tSYS_SHMCTL                         = 263\n\tSYS_SHMDT                          = 264\n\tSYS_SHMGET                         = 265\n\tSYS_SHM_OPEN                       = 266\n\tSYS_SHM_UNLINK                     = 267\n\tSYS_SEM_OPEN                       = 268\n\tSYS_SEM_CLOSE                      = 269\n\tSYS_SEM_UNLINK                     = 270\n\tSYS_SEM_WAIT                       = 271\n\tSYS_SEM_TRYWAIT                    = 272\n\tSYS_SEM_POST                       = 273\n\tSYS_SYSCTLBYNAME                   = 274\n\tSYS_OPEN_EXTENDED                  = 277\n\tSYS_UMASK_EXTENDED                 = 278\n\tSYS_STAT_EXTENDED                  = 279\n\tSYS_LSTAT_EXTENDED                 = 280\n\tSYS_FSTAT_EXTENDED                 = 281\n\tSYS_CHMOD_EXTENDED                 = 282\n\tSYS_FCHMOD_EXTENDED                = 283\n\tSYS_ACCESS_EXTENDED                = 284\n\tSYS_SETTID                         = 285\n\tSYS_GETTID                         = 286\n\tSYS_SETSGROUPS                     = 287\n\tSYS_GETSGROUPS                     = 288\n\tSYS_SETWGROUPS                     = 289\n\tSYS_GETWGROUPS                     = 290\n\tSYS_MKFIFO_EXTENDED                = 291\n\tSYS_MKDIR_EXTENDED                 = 292\n\tSYS_IDENTITYSVC                    = 293\n\tSYS_SHARED_REGION_CHECK_NP         = 294\n\tSYS_VM_PRESSURE_MONITOR            = 296\n\tSYS_PSYNCH_RW_LONGRDLOCK           = 297\n\tSYS_PSYNCH_RW_YIELDWRLOCK          = 298\n\tSYS_PSYNCH_RW_DOWNGRADE            = 299\n\tSYS_PSYNCH_RW_UPGRADE              = 300\n\tSYS_PSYNCH_MUTEXWAIT               = 301\n\tSYS_PSYNCH_MUTEXDROP               = 302\n\tSYS_PSYNCH_CVBROAD                 = 303\n\tSYS_PSYNCH_CVSIGNAL                = 304\n\tSYS_PSYNCH_CVWAIT                  = 305\n\tSYS_PSYNCH_RW_RDLOCK               = 306\n\tSYS_PSYNCH_RW_WRLOCK               = 307\n\tSYS_PSYNCH_RW_UNLOCK               = 308\n\tSYS_PSYNCH_RW_UNLOCK2              = 309\n\tSYS_GETSID                         = 310\n\tSYS_SETTID_WITH_PID                = 311\n\tSYS_PSYNCH_CVCLRPREPOST            = 312\n\tSYS_AIO_FSYNC                      = 313\n\tSYS_AIO_RETURN                     = 314\n\tSYS_AIO_SUSPEND                    = 315\n\tSYS_AIO_CANCEL                     = 316\n\tSYS_AIO_ERROR                      = 317\n\tSYS_AIO_READ                       = 318\n\tSYS_AIO_WRITE                      = 319\n\tSYS_LIO_LISTIO                     = 320\n\tSYS_IOPOLICYSYS                    = 322\n\tSYS_PROCESS_POLICY                 = 323\n\tSYS_MLOCKALL                       = 324\n\tSYS_MUNLOCKALL                     = 325\n\tSYS_ISSETUGID                      = 327\n\tSYS___PTHREAD_KILL                 = 328\n\tSYS___PTHREAD_SIGMASK              = 329\n\tSYS___SIGWAIT                      = 330\n\tSYS___DISABLE_THREADSIGNAL         = 331\n\tSYS___PTHREAD_MARKCANCEL           = 332\n\tSYS___PTHREAD_CANCELED             = 333\n\tSYS___SEMWAIT_SIGNAL               = 334\n\tSYS_PROC_INFO                      = 336\n\tSYS_SENDFILE                       = 337\n\tSYS_STAT64                         = 338\n\tSYS_FSTAT64                        = 339\n\tSYS_LSTAT64                        = 340\n\tSYS_STAT64_EXTENDED                = 341\n\tSYS_LSTAT64_EXTENDED               = 342\n\tSYS_FSTAT64_EXTENDED               = 343\n\tSYS_GETDIRENTRIES64                = 344\n\tSYS_STATFS64                       = 345\n\tSYS_FSTATFS64                      = 346\n\tSYS_GETFSSTAT64                    = 347\n\tSYS___PTHREAD_CHDIR                = 348\n\tSYS___PTHREAD_FCHDIR               = 349\n\tSYS_AUDIT                          = 350\n\tSYS_AUDITON                        = 351\n\tSYS_GETAUID                        = 353\n\tSYS_SETAUID                        = 354\n\tSYS_GETAUDIT_ADDR                  = 357\n\tSYS_SETAUDIT_ADDR                  = 358\n\tSYS_AUDITCTL                       = 359\n\tSYS_BSDTHREAD_CREATE               = 360\n\tSYS_BSDTHREAD_TERMINATE            = 361\n\tSYS_KQUEUE                         = 362\n\tSYS_KEVENT                         = 363\n\tSYS_LCHOWN                         = 364\n\tSYS_BSDTHREAD_REGISTER             = 366\n\tSYS_WORKQ_OPEN                     = 367\n\tSYS_WORKQ_KERNRETURN               = 368\n\tSYS_KEVENT64                       = 369\n\tSYS___OLD_SEMWAIT_SIGNAL           = 370\n\tSYS___OLD_SEMWAIT_SIGNAL_NOCANCEL  = 371\n\tSYS_THREAD_SELFID                  = 372\n\tSYS_LEDGER                         = 373\n\tSYS_KEVENT_QOS                     = 374\n\tSYS_KEVENT_ID                      = 375\n\tSYS___MAC_EXECVE                   = 380\n\tSYS___MAC_SYSCALL                  = 381\n\tSYS___MAC_GET_FILE                 = 382\n\tSYS___MAC_SET_FILE                 = 383\n\tSYS___MAC_GET_LINK                 = 384\n\tSYS___MAC_SET_LINK                 = 385\n\tSYS___MAC_GET_PROC                 = 386\n\tSYS___MAC_SET_PROC                 = 387\n\tSYS___MAC_GET_FD                   = 388\n\tSYS___MAC_SET_FD                   = 389\n\tSYS___MAC_GET_PID                  = 390\n\tSYS_PSELECT                        = 394\n\tSYS_PSELECT_NOCANCEL               = 395\n\tSYS_READ_NOCANCEL                  = 396\n\tSYS_WRITE_NOCANCEL                 = 397\n\tSYS_OPEN_NOCANCEL                  = 398\n\tSYS_CLOSE_NOCANCEL                 = 399\n\tSYS_WAIT4_NOCANCEL                 = 400\n\tSYS_RECVMSG_NOCANCEL               = 401\n\tSYS_SENDMSG_NOCANCEL               = 402\n\tSYS_RECVFROM_NOCANCEL              = 403\n\tSYS_ACCEPT_NOCANCEL                = 404\n\tSYS_MSYNC_NOCANCEL                 = 405\n\tSYS_FCNTL_NOCANCEL                 = 406\n\tSYS_SELECT_NOCANCEL                = 407\n\tSYS_FSYNC_NOCANCEL                 = 408\n\tSYS_CONNECT_NOCANCEL               = 409\n\tSYS_SIGSUSPEND_NOCANCEL            = 410\n\tSYS_READV_NOCANCEL                 = 411\n\tSYS_WRITEV_NOCANCEL                = 412\n\tSYS_SENDTO_NOCANCEL                = 413\n\tSYS_PREAD_NOCANCEL                 = 414\n\tSYS_PWRITE_NOCANCEL                = 415\n\tSYS_WAITID_NOCANCEL                = 416\n\tSYS_POLL_NOCANCEL                  = 417\n\tSYS_MSGSND_NOCANCEL                = 418\n\tSYS_MSGRCV_NOCANCEL                = 419\n\tSYS_SEM_WAIT_NOCANCEL              = 420\n\tSYS_AIO_SUSPEND_NOCANCEL           = 421\n\tSYS___SIGWAIT_NOCANCEL             = 422\n\tSYS___SEMWAIT_SIGNAL_NOCANCEL      = 423\n\tSYS___MAC_MOUNT                    = 424\n\tSYS___MAC_GET_MOUNT                = 425\n\tSYS___MAC_GETFSSTAT                = 426\n\tSYS_FSGETPATH                      = 427\n\tSYS_AUDIT_SESSION_SELF             = 428\n\tSYS_AUDIT_SESSION_JOIN             = 429\n\tSYS_FILEPORT_MAKEPORT              = 430\n\tSYS_FILEPORT_MAKEFD                = 431\n\tSYS_AUDIT_SESSION_PORT             = 432\n\tSYS_PID_SUSPEND                    = 433\n\tSYS_PID_RESUME                     = 434\n\tSYS_PID_HIBERNATE                  = 435\n\tSYS_PID_SHUTDOWN_SOCKETS           = 436\n\tSYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438\n\tSYS_KAS_INFO                       = 439\n\tSYS_MEMORYSTATUS_CONTROL           = 440\n\tSYS_GUARDED_OPEN_NP                = 441\n\tSYS_GUARDED_CLOSE_NP               = 442\n\tSYS_GUARDED_KQUEUE_NP              = 443\n\tSYS_CHANGE_FDGUARD_NP              = 444\n\tSYS_USRCTL                         = 445\n\tSYS_PROC_RLIMIT_CONTROL            = 446\n\tSYS_CONNECTX                       = 447\n\tSYS_DISCONNECTX                    = 448\n\tSYS_PEELOFF                        = 449\n\tSYS_SOCKET_DELEGATE                = 450\n\tSYS_TELEMETRY                      = 451\n\tSYS_PROC_UUID_POLICY               = 452\n\tSYS_MEMORYSTATUS_GET_LEVEL         = 453\n\tSYS_SYSTEM_OVERRIDE                = 454\n\tSYS_VFS_PURGE                      = 455\n\tSYS_SFI_CTL                        = 456\n\tSYS_SFI_PIDCTL                     = 457\n\tSYS_COALITION                      = 458\n\tSYS_COALITION_INFO                 = 459\n\tSYS_NECP_MATCH_POLICY              = 460\n\tSYS_GETATTRLISTBULK                = 461\n\tSYS_CLONEFILEAT                    = 462\n\tSYS_OPENAT                         = 463\n\tSYS_OPENAT_NOCANCEL                = 464\n\tSYS_RENAMEAT                       = 465\n\tSYS_FACCESSAT                      = 466\n\tSYS_FCHMODAT                       = 467\n\tSYS_FCHOWNAT                       = 468\n\tSYS_FSTATAT                        = 469\n\tSYS_FSTATAT64                      = 470\n\tSYS_LINKAT                         = 471\n\tSYS_UNLINKAT                       = 472\n\tSYS_READLINKAT                     = 473\n\tSYS_SYMLINKAT                      = 474\n\tSYS_MKDIRAT                        = 475\n\tSYS_GETATTRLISTAT                  = 476\n\tSYS_PROC_TRACE_LOG                 = 477\n\tSYS_BSDTHREAD_CTL                  = 478\n\tSYS_OPENBYID_NP                    = 479\n\tSYS_RECVMSG_X                      = 480\n\tSYS_SENDMSG_X                      = 481\n\tSYS_THREAD_SELFUSAGE               = 482\n\tSYS_CSRCTL                         = 483\n\tSYS_GUARDED_OPEN_DPROTECTED_NP     = 484\n\tSYS_GUARDED_WRITE_NP               = 485\n\tSYS_GUARDED_PWRITE_NP              = 486\n\tSYS_GUARDED_WRITEV_NP              = 487\n\tSYS_RENAMEATX_NP                   = 488\n\tSYS_MREMAP_ENCRYPTED               = 489\n\tSYS_NETAGENT_TRIGGER               = 490\n\tSYS_STACK_SNAPSHOT_WITH_CONFIG     = 491\n\tSYS_MICROSTACKSHOT                 = 492\n\tSYS_GRAB_PGO_DATA                  = 493\n\tSYS_PERSONA                        = 494\n\tSYS_WORK_INTERVAL_CTL              = 499\n\tSYS_GETENTROPY                     = 500\n\tSYS_NECP_OPEN                      = 501\n\tSYS_NECP_CLIENT_ACTION             = 502\n\tSYS___NEXUS_OPEN                   = 503\n\tSYS___NEXUS_REGISTER               = 504\n\tSYS___NEXUS_DEREGISTER             = 505\n\tSYS___NEXUS_CREATE                 = 506\n\tSYS___NEXUS_DESTROY                = 507\n\tSYS___NEXUS_GET_OPT                = 508\n\tSYS___NEXUS_SET_OPT                = 509\n\tSYS___CHANNEL_OPEN                 = 510\n\tSYS___CHANNEL_GET_INFO             = 511\n\tSYS___CHANNEL_SYNC                 = 512\n\tSYS___CHANNEL_GET_OPT              = 513\n\tSYS___CHANNEL_SET_OPT              = 514\n\tSYS_ULOCK_WAIT                     = 515\n\tSYS_ULOCK_WAKE                     = 516\n\tSYS_FCLONEFILEAT                   = 517\n\tSYS_FS_SNAPSHOT                    = 518\n\tSYS_TERMINATE_WITH_PAYLOAD         = 520\n\tSYS_ABORT_WITH_PAYLOAD             = 521\n\tSYS_NECP_SESSION_OPEN              = 522\n\tSYS_NECP_SESSION_ACTION            = 523\n\tSYS_SETATTRLISTAT                  = 524\n\tSYS_NET_QOS_GUIDELINE              = 525\n\tSYS_FMOUNT                         = 526\n\tSYS_NTP_ADJTIME                    = 527\n\tSYS_NTP_GETTIME                    = 528\n\tSYS_OS_FAULT_WITH_PAYLOAD          = 529\n\tSYS_MAXSYSCALL                     = 530\n\tSYS_INVALID                        = 63\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go",
    "content": "// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && freebsd\n\npackage unix\n\nconst (\n\t// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int\n\tSYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void\n\tSYS_FORK                     = 2   // { int fork(void); }\n\tSYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE                    = 6   // { int close(int fd); }\n\tSYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }\n\tSYS_LINK                     = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK                   = 10  // { int unlink(char *path); }\n\tSYS_CHDIR                    = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR                   = 13  // { int fchdir(int fd); }\n\tSYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_BREAK                    = 17  // { caddr_t break(char *nsize); }\n\tSYS_GETPID                   = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }\n\tSYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID                   = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID                   = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID                  = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }\n\tSYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }\n\tSYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_ACCESS                   = 33  // { int access(char *path, int amode); }\n\tSYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }\n\tSYS_SYNC                     = 36  // { int sync(void); }\n\tSYS_KILL                     = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID                  = 39  // { pid_t getppid(void); }\n\tSYS_DUP                      = 41  // { int dup(u_int fd); }\n\tSYS_GETEGID                  = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }\n\tSYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }\n\tSYS_GETGID                   = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }\n\tSYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT                     = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }\n\tSYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }\n\tSYS_REBOOT                   = 55  // { int reboot(int opt); }\n\tSYS_REVOKE                   = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }\n\tSYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }\n\tSYS_UMASK                    = 60  // { int umask(int newmask); }\n\tSYS_CHROOT                   = 61  // { int chroot(char *path); }\n\tSYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }\n\tSYS_VFORK                    = 66  // { int vfork(void); }\n\tSYS_SBRK                     = 69  // { int sbrk(int incr); }\n\tSYS_SSTK                     = 70  // { int sstk(int incr); }\n\tSYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT                 = 74  // { int mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_GETPGRP                  = 81  // { int getpgrp(void); }\n\tSYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_SWAPON                   = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }\n\tSYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }\n\tSYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }\n\tSYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_FSYNC                    = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }\n\tSYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }\n\tSYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }\n\tSYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }\n\tSYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }\n\tSYS_LISTEN                   = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }\n\tSYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }\n\tSYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }\n\tSYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME                   = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK                    = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }\n\tSYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR                    = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }\n\tSYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }\n\tSYS_SETSID                   = 147 // { int setsid(void); }\n\tSYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }\n\tSYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }\n\tSYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }\n\tSYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }\n\tSYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }\n\tSYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }\n\tSYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }\n\tSYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }\n\tSYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }\n\tSYS_SETFIB                   = 175 // { int setfib(int fibnum); }\n\tSYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID                   = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID                  = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }\n\tSYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int\n\tSYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int\n\tSYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int\n\tSYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE                 = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV                   = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }\n\tSYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME            = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }\n\tSYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }\n\tSYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }\n\tSYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }\n\tSYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }\n\tSYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); }\n\tSYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); }\n\tSYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); }\n\tSYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }\n\tSYS_RFORK                    = 251 // { int rfork(int flags); }\n\tSYS_ISSETUGID                = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); }\n\tSYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }\n\tSYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }\n\tSYS_MODNEXT                  = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat* stat); }\n\tSYS_MODFNEXT                 = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                  = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                  = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                  = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); }\n\tSYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                   = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND              = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }\n\tSYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }\n\tSYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_YIELD                    = 321 // { int yield(void); }\n\tSYS_MLOCKALL                 = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL               = 325 // { int munlockall(void); }\n\tSYS___GETCWD                 = 326 // { int __getcwd(char *buf, size_t buflen); }\n\tSYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }\n\tSYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }\n\tSYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }\n\tSYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD              = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }\n\tSYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }\n\tSYS_JAIL                     = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }\n\tSYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }\n\tSYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }\n\tSYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }\n\tSYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }\n\tSYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_KQUEUE                   = 362 // { int kqueue(void); }\n\tSYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS___SETUGID                = 374 // { int __setugid(int flag); }\n\tSYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }\n\tSYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }\n\tSYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }\n\tSYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }\n\tSYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }\n\tSYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }\n\tSYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }\n\tSYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }\n\tSYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }\n\tSYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }\n\tSYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }\n\tSYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }\n\tSYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }\n\tSYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }\n\tSYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }\n\tSYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }\n\tSYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }\n\tSYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }\n\tSYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }\n\tSYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }\n\tSYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }\n\tSYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }\n\tSYS_SIGRETURN                = 417 // { int sigreturn(const struct __ucontext *sigcntxp); }\n\tSYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT               = 422 // { int setcontext(const struct __ucontext *ucp); }\n\tSYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }\n\tSYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }\n\tSYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }\n\tSYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }\n\tSYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }\n\tSYS_THR_SELF                 = 432 // { int thr_self(long *id); }\n\tSYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }\n\tSYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }\n\tSYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }\n\tSYS_THR_SUSPEND              = 442 // { int thr_suspend(const struct timespec *timeout); }\n\tSYS_THR_WAKE                 = 443 // { int thr_wake(long id); }\n\tSYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }\n\tSYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }\n\tSYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }\n\tSYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }\n\tSYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }\n\tSYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }\n\tSYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }\n\tSYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_AUDITCTL                 = 453 // { int auditctl(char *path); }\n\tSYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }\n\tSYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }\n\tSYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }\n\tSYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }\n\tSYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }\n\tSYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }\n\tSYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }\n\tSYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }\n\tSYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }\n\tSYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }\n\tSYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }\n\tSYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }\n\tSYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }\n\tSYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }\n\tSYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }\n\tSYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }\n\tSYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }\n\tSYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }\n\tSYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }\n\tSYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }\n\tSYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }\n\tSYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }\n\tSYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }\n\tSYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }\n\tSYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }\n\tSYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }\n\tSYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }\n\tSYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }\n\tSYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }\n\tSYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }\n\tSYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }\n\tSYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }\n\tSYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }\n\tSYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }\n\tSYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }\n\tSYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }\n\tSYS_READLINKAT               = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }\n\tSYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }\n\tSYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }\n\tSYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }\n\tSYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }\n\tSYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }\n\tSYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }\n\tSYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }\n\tSYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_ENTER                = 516 // { int cap_enter(void); }\n\tSYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }\n\tSYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }\n\tSYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }\n\tSYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }\n\tSYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }\n\tSYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }\n\tSYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }\n\tSYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }\n\tSYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }\n\tSYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }\n\tSYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }\n\tSYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }\n\tSYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }\n\tSYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }\n\tSYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }\n\tSYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }\n\tSYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }\n\tSYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }\n\tSYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }\n\tSYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }\n\tSYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }\n\tSYS_FDATASYNC                = 550 // { int fdatasync(int fd); }\n\tSYS_FSTAT                    = 551 // { int fstat(int fd, struct stat *sb); }\n\tSYS_FSTATAT                  = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }\n\tSYS_FHSTAT                   = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }\n\tSYS_GETDIRENTRIES            = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); }\n\tSYS_STATFS                   = 555 // { int statfs(char *path, struct statfs *buf); }\n\tSYS_FSTATFS                  = 556 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_GETFSSTAT                = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }\n\tSYS_FHSTATFS                 = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }\n\tSYS_MKNODAT                  = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }\n\tSYS_KEVENT                   = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_CPUSET_GETDOMAIN         = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); }\n\tSYS_CPUSET_SETDOMAIN         = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); }\n\tSYS_GETRANDOM                = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); }\n\tSYS_GETFHAT                  = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); }\n\tSYS_FHLINK                   = 565 // { int fhlink(struct fhandle *fhp, const char *to); }\n\tSYS_FHLINKAT                 = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); }\n\tSYS_FHREADLINK               = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); }\n\tSYS___SYSCTLBYNAME           = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_CLOSE_RANGE              = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go",
    "content": "// go run mksysnum.go https://cgit.freebsd.org/src/plain/sys/kern/syscalls.master?h=stable/12\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build arm && freebsd\n\npackage unix\n\nconst (\n\t// SYS_NOSYS = 0;  // { int nosys(void); } syscall nosys_args int\n\tSYS_EXIT                     = 1   // { void sys_exit(int rval); } exit sys_exit_args void\n\tSYS_FORK                     = 2   // { int fork(void); }\n\tSYS_READ                     = 3   // { ssize_t read(int fd, void *buf, size_t nbyte); }\n\tSYS_WRITE                    = 4   // { ssize_t write(int fd, const void *buf, size_t nbyte); }\n\tSYS_OPEN                     = 5   // { int open(char *path, int flags, int mode); }\n\tSYS_CLOSE                    = 6   // { int close(int fd); }\n\tSYS_WAIT4                    = 7   // { int wait4(int pid, int *status, int options, struct rusage *rusage); }\n\tSYS_LINK                     = 9   // { int link(char *path, char *link); }\n\tSYS_UNLINK                   = 10  // { int unlink(char *path); }\n\tSYS_CHDIR                    = 12  // { int chdir(char *path); }\n\tSYS_FCHDIR                   = 13  // { int fchdir(int fd); }\n\tSYS_CHMOD                    = 15  // { int chmod(char *path, int mode); }\n\tSYS_CHOWN                    = 16  // { int chown(char *path, int uid, int gid); }\n\tSYS_BREAK                    = 17  // { caddr_t break(char *nsize); }\n\tSYS_GETPID                   = 20  // { pid_t getpid(void); }\n\tSYS_MOUNT                    = 21  // { int mount(char *type, char *path, int flags, caddr_t data); }\n\tSYS_UNMOUNT                  = 22  // { int unmount(char *path, int flags); }\n\tSYS_SETUID                   = 23  // { int setuid(uid_t uid); }\n\tSYS_GETUID                   = 24  // { uid_t getuid(void); }\n\tSYS_GETEUID                  = 25  // { uid_t geteuid(void); }\n\tSYS_PTRACE                   = 26  // { int ptrace(int req, pid_t pid, caddr_t addr, int data); }\n\tSYS_RECVMSG                  = 27  // { int recvmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_SENDMSG                  = 28  // { int sendmsg(int s, struct msghdr *msg, int flags); }\n\tSYS_RECVFROM                 = 29  // { int recvfrom(int s, caddr_t buf, size_t len, int flags, struct sockaddr * __restrict from, __socklen_t * __restrict fromlenaddr); }\n\tSYS_ACCEPT                   = 30  // { int accept(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen); }\n\tSYS_GETPEERNAME              = 31  // { int getpeername(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_GETSOCKNAME              = 32  // { int getsockname(int fdes, struct sockaddr * __restrict asa, __socklen_t * __restrict alen); }\n\tSYS_ACCESS                   = 33  // { int access(char *path, int amode); }\n\tSYS_CHFLAGS                  = 34  // { int chflags(const char *path, u_long flags); }\n\tSYS_FCHFLAGS                 = 35  // { int fchflags(int fd, u_long flags); }\n\tSYS_SYNC                     = 36  // { int sync(void); }\n\tSYS_KILL                     = 37  // { int kill(int pid, int signum); }\n\tSYS_GETPPID                  = 39  // { pid_t getppid(void); }\n\tSYS_DUP                      = 41  // { int dup(u_int fd); }\n\tSYS_GETEGID                  = 43  // { gid_t getegid(void); }\n\tSYS_PROFIL                   = 44  // { int profil(caddr_t samples, size_t size, size_t offset, u_int scale); }\n\tSYS_KTRACE                   = 45  // { int ktrace(const char *fname, int ops, int facs, int pid); }\n\tSYS_GETGID                   = 47  // { gid_t getgid(void); }\n\tSYS_GETLOGIN                 = 49  // { int getlogin(char *namebuf, u_int namelen); }\n\tSYS_SETLOGIN                 = 50  // { int setlogin(char *namebuf); }\n\tSYS_ACCT                     = 51  // { int acct(char *path); }\n\tSYS_SIGALTSTACK              = 53  // { int sigaltstack(stack_t *ss, stack_t *oss); }\n\tSYS_IOCTL                    = 54  // { int ioctl(int fd, u_long com, caddr_t data); }\n\tSYS_REBOOT                   = 55  // { int reboot(int opt); }\n\tSYS_REVOKE                   = 56  // { int revoke(char *path); }\n\tSYS_SYMLINK                  = 57  // { int symlink(char *path, char *link); }\n\tSYS_READLINK                 = 58  // { ssize_t readlink(char *path, char *buf, size_t count); }\n\tSYS_EXECVE                   = 59  // { int execve(char *fname, char **argv, char **envv); }\n\tSYS_UMASK                    = 60  // { int umask(int newmask); }\n\tSYS_CHROOT                   = 61  // { int chroot(char *path); }\n\tSYS_MSYNC                    = 65  // { int msync(void *addr, size_t len, int flags); }\n\tSYS_VFORK                    = 66  // { int vfork(void); }\n\tSYS_SBRK                     = 69  // { int sbrk(int incr); }\n\tSYS_SSTK                     = 70  // { int sstk(int incr); }\n\tSYS_MUNMAP                   = 73  // { int munmap(void *addr, size_t len); }\n\tSYS_MPROTECT                 = 74  // { int mprotect(void *addr, size_t len, int prot); }\n\tSYS_MADVISE                  = 75  // { int madvise(void *addr, size_t len, int behav); }\n\tSYS_MINCORE                  = 78  // { int mincore(const void *addr, size_t len, char *vec); }\n\tSYS_GETGROUPS                = 79  // { int getgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_SETGROUPS                = 80  // { int setgroups(u_int gidsetsize, gid_t *gidset); }\n\tSYS_GETPGRP                  = 81  // { int getpgrp(void); }\n\tSYS_SETPGID                  = 82  // { int setpgid(int pid, int pgid); }\n\tSYS_SETITIMER                = 83  // { int setitimer(u_int which, struct itimerval *itv, struct itimerval *oitv); }\n\tSYS_SWAPON                   = 85  // { int swapon(char *name); }\n\tSYS_GETITIMER                = 86  // { int getitimer(u_int which, struct itimerval *itv); }\n\tSYS_GETDTABLESIZE            = 89  // { int getdtablesize(void); }\n\tSYS_DUP2                     = 90  // { int dup2(u_int from, u_int to); }\n\tSYS_FCNTL                    = 92  // { int fcntl(int fd, int cmd, long arg); }\n\tSYS_SELECT                   = 93  // { int select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); }\n\tSYS_FSYNC                    = 95  // { int fsync(int fd); }\n\tSYS_SETPRIORITY              = 96  // { int setpriority(int which, int who, int prio); }\n\tSYS_SOCKET                   = 97  // { int socket(int domain, int type, int protocol); }\n\tSYS_CONNECT                  = 98  // { int connect(int s, caddr_t name, int namelen); }\n\tSYS_GETPRIORITY              = 100 // { int getpriority(int which, int who); }\n\tSYS_BIND                     = 104 // { int bind(int s, caddr_t name, int namelen); }\n\tSYS_SETSOCKOPT               = 105 // { int setsockopt(int s, int level, int name, caddr_t val, int valsize); }\n\tSYS_LISTEN                   = 106 // { int listen(int s, int backlog); }\n\tSYS_GETTIMEOFDAY             = 116 // { int gettimeofday(struct timeval *tp, struct timezone *tzp); }\n\tSYS_GETRUSAGE                = 117 // { int getrusage(int who, struct rusage *rusage); }\n\tSYS_GETSOCKOPT               = 118 // { int getsockopt(int s, int level, int name, caddr_t val, int *avalsize); }\n\tSYS_READV                    = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_WRITEV                   = 121 // { int writev(int fd, struct iovec *iovp, u_int iovcnt); }\n\tSYS_SETTIMEOFDAY             = 122 // { int settimeofday(struct timeval *tv, struct timezone *tzp); }\n\tSYS_FCHOWN                   = 123 // { int fchown(int fd, int uid, int gid); }\n\tSYS_FCHMOD                   = 124 // { int fchmod(int fd, int mode); }\n\tSYS_SETREUID                 = 126 // { int setreuid(int ruid, int euid); }\n\tSYS_SETREGID                 = 127 // { int setregid(int rgid, int egid); }\n\tSYS_RENAME                   = 128 // { int rename(char *from, char *to); }\n\tSYS_FLOCK                    = 131 // { int flock(int fd, int how); }\n\tSYS_MKFIFO                   = 132 // { int mkfifo(char *path, int mode); }\n\tSYS_SENDTO                   = 133 // { int sendto(int s, caddr_t buf, size_t len, int flags, caddr_t to, int tolen); }\n\tSYS_SHUTDOWN                 = 134 // { int shutdown(int s, int how); }\n\tSYS_SOCKETPAIR               = 135 // { int socketpair(int domain, int type, int protocol, int *rsv); }\n\tSYS_MKDIR                    = 136 // { int mkdir(char *path, int mode); }\n\tSYS_RMDIR                    = 137 // { int rmdir(char *path); }\n\tSYS_UTIMES                   = 138 // { int utimes(char *path, struct timeval *tptr); }\n\tSYS_ADJTIME                  = 140 // { int adjtime(struct timeval *delta, struct timeval *olddelta); }\n\tSYS_SETSID                   = 147 // { int setsid(void); }\n\tSYS_QUOTACTL                 = 148 // { int quotactl(char *path, int cmd, int uid, caddr_t arg); }\n\tSYS_NLM_SYSCALL              = 154 // { int nlm_syscall(int debug_level, int grace_period, int addr_count, char **addrs); }\n\tSYS_NFSSVC                   = 155 // { int nfssvc(int flag, caddr_t argp); }\n\tSYS_LGETFH                   = 160 // { int lgetfh(char *fname, struct fhandle *fhp); }\n\tSYS_GETFH                    = 161 // { int getfh(char *fname, struct fhandle *fhp); }\n\tSYS_SYSARCH                  = 165 // { int sysarch(int op, char *parms); }\n\tSYS_RTPRIO                   = 166 // { int rtprio(int function, pid_t pid, struct rtprio *rtp); }\n\tSYS_SEMSYS                   = 169 // { int semsys(int which, int a2, int a3, int a4, int a5); }\n\tSYS_MSGSYS                   = 170 // { int msgsys(int which, int a2, int a3, int a4, int a5, int a6); }\n\tSYS_SHMSYS                   = 171 // { int shmsys(int which, int a2, int a3, int a4); }\n\tSYS_SETFIB                   = 175 // { int setfib(int fibnum); }\n\tSYS_NTP_ADJTIME              = 176 // { int ntp_adjtime(struct timex *tp); }\n\tSYS_SETGID                   = 181 // { int setgid(gid_t gid); }\n\tSYS_SETEGID                  = 182 // { int setegid(gid_t egid); }\n\tSYS_SETEUID                  = 183 // { int seteuid(uid_t euid); }\n\tSYS_PATHCONF                 = 191 // { int pathconf(char *path, int name); }\n\tSYS_FPATHCONF                = 192 // { int fpathconf(int fd, int name); }\n\tSYS_GETRLIMIT                = 194 // { int getrlimit(u_int which, struct rlimit *rlp); } getrlimit __getrlimit_args int\n\tSYS_SETRLIMIT                = 195 // { int setrlimit(u_int which, struct rlimit *rlp); } setrlimit __setrlimit_args int\n\tSYS___SYSCTL                 = 202 // { int __sysctl(int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen); } __sysctl sysctl_args int\n\tSYS_MLOCK                    = 203 // { int mlock(const void *addr, size_t len); }\n\tSYS_MUNLOCK                  = 204 // { int munlock(const void *addr, size_t len); }\n\tSYS_UNDELETE                 = 205 // { int undelete(char *path); }\n\tSYS_FUTIMES                  = 206 // { int futimes(int fd, struct timeval *tptr); }\n\tSYS_GETPGID                  = 207 // { int getpgid(pid_t pid); }\n\tSYS_POLL                     = 209 // { int poll(struct pollfd *fds, u_int nfds, int timeout); }\n\tSYS_SEMGET                   = 221 // { int semget(key_t key, int nsems, int semflg); }\n\tSYS_SEMOP                    = 222 // { int semop(int semid, struct sembuf *sops, size_t nsops); }\n\tSYS_MSGGET                   = 225 // { int msgget(key_t key, int msgflg); }\n\tSYS_MSGSND                   = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); }\n\tSYS_MSGRCV                   = 227 // { ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); }\n\tSYS_SHMAT                    = 228 // { int shmat(int shmid, const void *shmaddr, int shmflg); }\n\tSYS_SHMDT                    = 230 // { int shmdt(const void *shmaddr); }\n\tSYS_SHMGET                   = 231 // { int shmget(key_t key, size_t size, int shmflg); }\n\tSYS_CLOCK_GETTIME            = 232 // { int clock_gettime(clockid_t clock_id, struct timespec *tp); }\n\tSYS_CLOCK_SETTIME            = 233 // { int clock_settime(clockid_t clock_id, const struct timespec *tp); }\n\tSYS_CLOCK_GETRES             = 234 // { int clock_getres(clockid_t clock_id, struct timespec *tp); }\n\tSYS_KTIMER_CREATE            = 235 // { int ktimer_create(clockid_t clock_id, struct sigevent *evp, int *timerid); }\n\tSYS_KTIMER_DELETE            = 236 // { int ktimer_delete(int timerid); }\n\tSYS_KTIMER_SETTIME           = 237 // { int ktimer_settime(int timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); }\n\tSYS_KTIMER_GETTIME           = 238 // { int ktimer_gettime(int timerid, struct itimerspec *value); }\n\tSYS_KTIMER_GETOVERRUN        = 239 // { int ktimer_getoverrun(int timerid); }\n\tSYS_NANOSLEEP                = 240 // { int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_FFCLOCK_GETCOUNTER       = 241 // { int ffclock_getcounter(ffcounter *ffcount); }\n\tSYS_FFCLOCK_SETESTIMATE      = 242 // { int ffclock_setestimate(struct ffclock_estimate *cest); }\n\tSYS_FFCLOCK_GETESTIMATE      = 243 // { int ffclock_getestimate(struct ffclock_estimate *cest); }\n\tSYS_CLOCK_NANOSLEEP          = 244 // { int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp); }\n\tSYS_CLOCK_GETCPUCLOCKID2     = 247 // { int clock_getcpuclockid2(id_t id, int which, clockid_t *clock_id); }\n\tSYS_NTP_GETTIME              = 248 // { int ntp_gettime(struct ntptimeval *ntvp); }\n\tSYS_MINHERIT                 = 250 // { int minherit(void *addr, size_t len, int inherit); }\n\tSYS_RFORK                    = 251 // { int rfork(int flags); }\n\tSYS_ISSETUGID                = 253 // { int issetugid(void); }\n\tSYS_LCHOWN                   = 254 // { int lchown(char *path, int uid, int gid); }\n\tSYS_AIO_READ                 = 255 // { int aio_read(struct aiocb *aiocbp); }\n\tSYS_AIO_WRITE                = 256 // { int aio_write(struct aiocb *aiocbp); }\n\tSYS_LIO_LISTIO               = 257 // { int lio_listio(int mode, struct aiocb* const *acb_list, int nent, struct sigevent *sig); }\n\tSYS_LCHMOD                   = 274 // { int lchmod(char *path, mode_t mode); }\n\tSYS_LUTIMES                  = 276 // { int lutimes(char *path, struct timeval *tptr); }\n\tSYS_PREADV                   = 289 // { ssize_t preadv(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_PWRITEV                  = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, u_int iovcnt, off_t offset); }\n\tSYS_FHOPEN                   = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); }\n\tSYS_MODNEXT                  = 300 // { int modnext(int modid); }\n\tSYS_MODSTAT                  = 301 // { int modstat(int modid, struct module_stat* stat); }\n\tSYS_MODFNEXT                 = 302 // { int modfnext(int modid); }\n\tSYS_MODFIND                  = 303 // { int modfind(const char *name); }\n\tSYS_KLDLOAD                  = 304 // { int kldload(const char *file); }\n\tSYS_KLDUNLOAD                = 305 // { int kldunload(int fileid); }\n\tSYS_KLDFIND                  = 306 // { int kldfind(const char *file); }\n\tSYS_KLDNEXT                  = 307 // { int kldnext(int fileid); }\n\tSYS_KLDSTAT                  = 308 // { int kldstat(int fileid, struct kld_file_stat *stat); }\n\tSYS_KLDFIRSTMOD              = 309 // { int kldfirstmod(int fileid); }\n\tSYS_GETSID                   = 310 // { int getsid(pid_t pid); }\n\tSYS_SETRESUID                = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); }\n\tSYS_SETRESGID                = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); }\n\tSYS_AIO_RETURN               = 314 // { ssize_t aio_return(struct aiocb *aiocbp); }\n\tSYS_AIO_SUSPEND              = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); }\n\tSYS_AIO_CANCEL               = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); }\n\tSYS_AIO_ERROR                = 317 // { int aio_error(struct aiocb *aiocbp); }\n\tSYS_YIELD                    = 321 // { int yield(void); }\n\tSYS_MLOCKALL                 = 324 // { int mlockall(int how); }\n\tSYS_MUNLOCKALL               = 325 // { int munlockall(void); }\n\tSYS___GETCWD                 = 326 // { int __getcwd(char *buf, size_t buflen); }\n\tSYS_SCHED_SETPARAM           = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); }\n\tSYS_SCHED_GETPARAM           = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); }\n\tSYS_SCHED_SETSCHEDULER       = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); }\n\tSYS_SCHED_GETSCHEDULER       = 330 // { int sched_getscheduler (pid_t pid); }\n\tSYS_SCHED_YIELD              = 331 // { int sched_yield (void); }\n\tSYS_SCHED_GET_PRIORITY_MAX   = 332 // { int sched_get_priority_max (int policy); }\n\tSYS_SCHED_GET_PRIORITY_MIN   = 333 // { int sched_get_priority_min (int policy); }\n\tSYS_SCHED_RR_GET_INTERVAL    = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); }\n\tSYS_UTRACE                   = 335 // { int utrace(const void *addr, size_t len); }\n\tSYS_KLDSYM                   = 337 // { int kldsym(int fileid, int cmd, void *data); }\n\tSYS_JAIL                     = 338 // { int jail(struct jail *jail); }\n\tSYS_SIGPROCMASK              = 340 // { int sigprocmask(int how, const sigset_t *set, sigset_t *oset); }\n\tSYS_SIGSUSPEND               = 341 // { int sigsuspend(const sigset_t *sigmask); }\n\tSYS_SIGPENDING               = 343 // { int sigpending(sigset_t *set); }\n\tSYS_SIGTIMEDWAIT             = 345 // { int sigtimedwait(const sigset_t *set, siginfo_t *info, const struct timespec *timeout); }\n\tSYS_SIGWAITINFO              = 346 // { int sigwaitinfo(const sigset_t *set, siginfo_t *info); }\n\tSYS___ACL_GET_FILE           = 347 // { int __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FILE           = 348 // { int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_GET_FD             = 349 // { int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_FD             = 350 // { int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_FILE        = 351 // { int __acl_delete_file(const char *path, acl_type_t type); }\n\tSYS___ACL_DELETE_FD          = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_FILE      = 353 // { int __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_ACLCHECK_FD        = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); }\n\tSYS_EXTATTRCTL               = 355 // { int extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); }\n\tSYS_EXTATTR_SET_FILE         = 356 // { ssize_t extattr_set_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FILE         = 357 // { ssize_t extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FILE      = 358 // { int extattr_delete_file(const char *path, int attrnamespace, const char *attrname); }\n\tSYS_AIO_WAITCOMPLETE         = 359 // { ssize_t aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); }\n\tSYS_GETRESUID                = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); }\n\tSYS_GETRESGID                = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); }\n\tSYS_KQUEUE                   = 362 // { int kqueue(void); }\n\tSYS_EXTATTR_SET_FD           = 371 // { ssize_t extattr_set_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_FD           = 372 // { ssize_t extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_FD        = 373 // { int extattr_delete_fd(int fd, int attrnamespace, const char *attrname); }\n\tSYS___SETUGID                = 374 // { int __setugid(int flag); }\n\tSYS_EACCESS                  = 376 // { int eaccess(char *path, int amode); }\n\tSYS_NMOUNT                   = 378 // { int nmount(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS___MAC_GET_PROC           = 384 // { int __mac_get_proc(struct mac *mac_p); }\n\tSYS___MAC_SET_PROC           = 385 // { int __mac_set_proc(struct mac *mac_p); }\n\tSYS___MAC_GET_FD             = 386 // { int __mac_get_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_GET_FILE           = 387 // { int __mac_get_file(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_FD             = 388 // { int __mac_set_fd(int fd, struct mac *mac_p); }\n\tSYS___MAC_SET_FILE           = 389 // { int __mac_set_file(const char *path_p, struct mac *mac_p); }\n\tSYS_KENV                     = 390 // { int kenv(int what, const char *name, char *value, int len); }\n\tSYS_LCHFLAGS                 = 391 // { int lchflags(const char *path, u_long flags); }\n\tSYS_UUIDGEN                  = 392 // { int uuidgen(struct uuid *store, int count); }\n\tSYS_SENDFILE                 = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, struct sf_hdtr *hdtr, off_t *sbytes, int flags); }\n\tSYS_MAC_SYSCALL              = 394 // { int mac_syscall(const char *policy, int call, void *arg); }\n\tSYS_KSEM_CLOSE               = 400 // { int ksem_close(semid_t id); }\n\tSYS_KSEM_POST                = 401 // { int ksem_post(semid_t id); }\n\tSYS_KSEM_WAIT                = 402 // { int ksem_wait(semid_t id); }\n\tSYS_KSEM_TRYWAIT             = 403 // { int ksem_trywait(semid_t id); }\n\tSYS_KSEM_INIT                = 404 // { int ksem_init(semid_t *idp, unsigned int value); }\n\tSYS_KSEM_OPEN                = 405 // { int ksem_open(semid_t *idp, const char *name, int oflag, mode_t mode, unsigned int value); }\n\tSYS_KSEM_UNLINK              = 406 // { int ksem_unlink(const char *name); }\n\tSYS_KSEM_GETVALUE            = 407 // { int ksem_getvalue(semid_t id, int *val); }\n\tSYS_KSEM_DESTROY             = 408 // { int ksem_destroy(semid_t id); }\n\tSYS___MAC_GET_PID            = 409 // { int __mac_get_pid(pid_t pid, struct mac *mac_p); }\n\tSYS___MAC_GET_LINK           = 410 // { int __mac_get_link(const char *path_p, struct mac *mac_p); }\n\tSYS___MAC_SET_LINK           = 411 // { int __mac_set_link(const char *path_p, struct mac *mac_p); }\n\tSYS_EXTATTR_SET_LINK         = 412 // { ssize_t extattr_set_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_GET_LINK         = 413 // { ssize_t extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); }\n\tSYS_EXTATTR_DELETE_LINK      = 414 // { int extattr_delete_link(const char *path, int attrnamespace, const char *attrname); }\n\tSYS___MAC_EXECVE             = 415 // { int __mac_execve(char *fname, char **argv, char **envv, struct mac *mac_p); }\n\tSYS_SIGACTION                = 416 // { int sigaction(int sig, const struct sigaction *act, struct sigaction *oact); }\n\tSYS_SIGRETURN                = 417 // { int sigreturn(const struct __ucontext *sigcntxp); }\n\tSYS_GETCONTEXT               = 421 // { int getcontext(struct __ucontext *ucp); }\n\tSYS_SETCONTEXT               = 422 // { int setcontext(const struct __ucontext *ucp); }\n\tSYS_SWAPCONTEXT              = 423 // { int swapcontext(struct __ucontext *oucp, const struct __ucontext *ucp); }\n\tSYS_SWAPOFF                  = 424 // { int swapoff(const char *name); }\n\tSYS___ACL_GET_LINK           = 425 // { int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_SET_LINK           = 426 // { int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS___ACL_DELETE_LINK        = 427 // { int __acl_delete_link(const char *path, acl_type_t type); }\n\tSYS___ACL_ACLCHECK_LINK      = 428 // { int __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp); }\n\tSYS_SIGWAIT                  = 429 // { int sigwait(const sigset_t *set, int *sig); }\n\tSYS_THR_CREATE               = 430 // { int thr_create(ucontext_t *ctx, long *id, int flags); }\n\tSYS_THR_EXIT                 = 431 // { void thr_exit(long *state); }\n\tSYS_THR_SELF                 = 432 // { int thr_self(long *id); }\n\tSYS_THR_KILL                 = 433 // { int thr_kill(long id, int sig); }\n\tSYS_JAIL_ATTACH              = 436 // { int jail_attach(int jid); }\n\tSYS_EXTATTR_LIST_FD          = 437 // { ssize_t extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_FILE        = 438 // { ssize_t extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_EXTATTR_LIST_LINK        = 439 // { ssize_t extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); }\n\tSYS_KSEM_TIMEDWAIT           = 441 // { int ksem_timedwait(semid_t id, const struct timespec *abstime); }\n\tSYS_THR_SUSPEND              = 442 // { int thr_suspend(const struct timespec *timeout); }\n\tSYS_THR_WAKE                 = 443 // { int thr_wake(long id); }\n\tSYS_KLDUNLOADF               = 444 // { int kldunloadf(int fileid, int flags); }\n\tSYS_AUDIT                    = 445 // { int audit(const void *record, u_int length); }\n\tSYS_AUDITON                  = 446 // { int auditon(int cmd, void *data, u_int length); }\n\tSYS_GETAUID                  = 447 // { int getauid(uid_t *auid); }\n\tSYS_SETAUID                  = 448 // { int setauid(uid_t *auid); }\n\tSYS_GETAUDIT                 = 449 // { int getaudit(struct auditinfo *auditinfo); }\n\tSYS_SETAUDIT                 = 450 // { int setaudit(struct auditinfo *auditinfo); }\n\tSYS_GETAUDIT_ADDR            = 451 // { int getaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_SETAUDIT_ADDR            = 452 // { int setaudit_addr(struct auditinfo_addr *auditinfo_addr, u_int length); }\n\tSYS_AUDITCTL                 = 453 // { int auditctl(char *path); }\n\tSYS__UMTX_OP                 = 454 // { int _umtx_op(void *obj, int op, u_long val, void *uaddr1, void *uaddr2); }\n\tSYS_THR_NEW                  = 455 // { int thr_new(struct thr_param *param, int param_size); }\n\tSYS_SIGQUEUE                 = 456 // { int sigqueue(pid_t pid, int signum, void *value); }\n\tSYS_KMQ_OPEN                 = 457 // { int kmq_open(const char *path, int flags, mode_t mode, const struct mq_attr *attr); }\n\tSYS_KMQ_SETATTR              = 458 // { int kmq_setattr(int mqd, const struct mq_attr *attr, struct mq_attr *oattr); }\n\tSYS_KMQ_TIMEDRECEIVE         = 459 // { int kmq_timedreceive(int mqd, char *msg_ptr, size_t msg_len, unsigned *msg_prio, const struct timespec *abs_timeout); }\n\tSYS_KMQ_TIMEDSEND            = 460 // { int kmq_timedsend(int mqd, const char *msg_ptr, size_t msg_len, unsigned msg_prio, const struct timespec *abs_timeout); }\n\tSYS_KMQ_NOTIFY               = 461 // { int kmq_notify(int mqd, const struct sigevent *sigev); }\n\tSYS_KMQ_UNLINK               = 462 // { int kmq_unlink(const char *path); }\n\tSYS_ABORT2                   = 463 // { int abort2(const char *why, int nargs, void **args); }\n\tSYS_THR_SET_NAME             = 464 // { int thr_set_name(long id, const char *name); }\n\tSYS_AIO_FSYNC                = 465 // { int aio_fsync(int op, struct aiocb *aiocbp); }\n\tSYS_RTPRIO_THREAD            = 466 // { int rtprio_thread(int function, lwpid_t lwpid, struct rtprio *rtp); }\n\tSYS_SCTP_PEELOFF             = 471 // { int sctp_peeloff(int sd, uint32_t name); }\n\tSYS_SCTP_GENERIC_SENDMSG     = 472 // { int sctp_generic_sendmsg(int sd, caddr_t msg, int mlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }\n\tSYS_SCTP_GENERIC_SENDMSG_IOV = 473 // { int sctp_generic_sendmsg_iov(int sd, struct iovec *iov, int iovlen, caddr_t to, __socklen_t tolen, struct sctp_sndrcvinfo *sinfo, int flags); }\n\tSYS_SCTP_GENERIC_RECVMSG     = 474 // { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, struct sockaddr *from, __socklen_t *fromlenaddr, struct sctp_sndrcvinfo *sinfo, int *msg_flags); }\n\tSYS_PREAD                    = 475 // { ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); }\n\tSYS_PWRITE                   = 476 // { ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); }\n\tSYS_MMAP                     = 477 // { caddr_t mmap(caddr_t addr, size_t len, int prot, int flags, int fd, off_t pos); }\n\tSYS_LSEEK                    = 478 // { off_t lseek(int fd, off_t offset, int whence); }\n\tSYS_TRUNCATE                 = 479 // { int truncate(char *path, off_t length); }\n\tSYS_FTRUNCATE                = 480 // { int ftruncate(int fd, off_t length); }\n\tSYS_THR_KILL2                = 481 // { int thr_kill2(pid_t pid, long id, int sig); }\n\tSYS_SHM_OPEN                 = 482 // { int shm_open(const char *path, int flags, mode_t mode); }\n\tSYS_SHM_UNLINK               = 483 // { int shm_unlink(const char *path); }\n\tSYS_CPUSET                   = 484 // { int cpuset(cpusetid_t *setid); }\n\tSYS_CPUSET_SETID             = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, cpusetid_t setid); }\n\tSYS_CPUSET_GETID             = 486 // { int cpuset_getid(cpulevel_t level, cpuwhich_t which, id_t id, cpusetid_t *setid); }\n\tSYS_CPUSET_GETAFFINITY       = 487 // { int cpuset_getaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, cpuset_t *mask); }\n\tSYS_CPUSET_SETAFFINITY       = 488 // { int cpuset_setaffinity(cpulevel_t level, cpuwhich_t which, id_t id, size_t cpusetsize, const cpuset_t *mask); }\n\tSYS_FACCESSAT                = 489 // { int faccessat(int fd, char *path, int amode, int flag); }\n\tSYS_FCHMODAT                 = 490 // { int fchmodat(int fd, char *path, mode_t mode, int flag); }\n\tSYS_FCHOWNAT                 = 491 // { int fchownat(int fd, char *path, uid_t uid, gid_t gid, int flag); }\n\tSYS_FEXECVE                  = 492 // { int fexecve(int fd, char **argv, char **envv); }\n\tSYS_FUTIMESAT                = 494 // { int futimesat(int fd, char *path, struct timeval *times); }\n\tSYS_LINKAT                   = 495 // { int linkat(int fd1, char *path1, int fd2, char *path2, int flag); }\n\tSYS_MKDIRAT                  = 496 // { int mkdirat(int fd, char *path, mode_t mode); }\n\tSYS_MKFIFOAT                 = 497 // { int mkfifoat(int fd, char *path, mode_t mode); }\n\tSYS_OPENAT                   = 499 // { int openat(int fd, char *path, int flag, mode_t mode); }\n\tSYS_READLINKAT               = 500 // { ssize_t readlinkat(int fd, char *path, char *buf, size_t bufsize); }\n\tSYS_RENAMEAT                 = 501 // { int renameat(int oldfd, char *old, int newfd, char *new); }\n\tSYS_SYMLINKAT                = 502 // { int symlinkat(char *path1, int fd, char *path2); }\n\tSYS_UNLINKAT                 = 503 // { int unlinkat(int fd, char *path, int flag); }\n\tSYS_POSIX_OPENPT             = 504 // { int posix_openpt(int flags); }\n\tSYS_GSSD_SYSCALL             = 505 // { int gssd_syscall(char *path); }\n\tSYS_JAIL_GET                 = 506 // { int jail_get(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_SET                 = 507 // { int jail_set(struct iovec *iovp, unsigned int iovcnt, int flags); }\n\tSYS_JAIL_REMOVE              = 508 // { int jail_remove(int jid); }\n\tSYS_CLOSEFROM                = 509 // { int closefrom(int lowfd); }\n\tSYS___SEMCTL                 = 510 // { int __semctl(int semid, int semnum, int cmd, union semun *arg); }\n\tSYS_MSGCTL                   = 511 // { int msgctl(int msqid, int cmd, struct msqid_ds *buf); }\n\tSYS_SHMCTL                   = 512 // { int shmctl(int shmid, int cmd, struct shmid_ds *buf); }\n\tSYS_LPATHCONF                = 513 // { int lpathconf(char *path, int name); }\n\tSYS___CAP_RIGHTS_GET         = 515 // { int __cap_rights_get(int version, int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_ENTER                = 516 // { int cap_enter(void); }\n\tSYS_CAP_GETMODE              = 517 // { int cap_getmode(u_int *modep); }\n\tSYS_PDFORK                   = 518 // { int pdfork(int *fdp, int flags); }\n\tSYS_PDKILL                   = 519 // { int pdkill(int fd, int signum); }\n\tSYS_PDGETPID                 = 520 // { int pdgetpid(int fd, pid_t *pidp); }\n\tSYS_PSELECT                  = 522 // { int pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *sm); }\n\tSYS_GETLOGINCLASS            = 523 // { int getloginclass(char *namebuf, size_t namelen); }\n\tSYS_SETLOGINCLASS            = 524 // { int setloginclass(const char *namebuf); }\n\tSYS_RCTL_GET_RACCT           = 525 // { int rctl_get_racct(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_RULES           = 526 // { int rctl_get_rules(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_GET_LIMITS          = 527 // { int rctl_get_limits(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_ADD_RULE            = 528 // { int rctl_add_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_RCTL_REMOVE_RULE         = 529 // { int rctl_remove_rule(const void *inbufp, size_t inbuflen, void *outbufp, size_t outbuflen); }\n\tSYS_POSIX_FALLOCATE          = 530 // { int posix_fallocate(int fd, off_t offset, off_t len); }\n\tSYS_POSIX_FADVISE            = 531 // { int posix_fadvise(int fd, off_t offset, off_t len, int advice); }\n\tSYS_WAIT6                    = 532 // { int wait6(idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *info); }\n\tSYS_CAP_RIGHTS_LIMIT         = 533 // { int cap_rights_limit(int fd, cap_rights_t *rightsp); }\n\tSYS_CAP_IOCTLS_LIMIT         = 534 // { int cap_ioctls_limit(int fd, const u_long *cmds, size_t ncmds); }\n\tSYS_CAP_IOCTLS_GET           = 535 // { ssize_t cap_ioctls_get(int fd, u_long *cmds, size_t maxcmds); }\n\tSYS_CAP_FCNTLS_LIMIT         = 536 // { int cap_fcntls_limit(int fd, uint32_t fcntlrights); }\n\tSYS_CAP_FCNTLS_GET           = 537 // { int cap_fcntls_get(int fd, uint32_t *fcntlrightsp); }\n\tSYS_BINDAT                   = 538 // { int bindat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CONNECTAT                = 539 // { int connectat(int fd, int s, caddr_t name, int namelen); }\n\tSYS_CHFLAGSAT                = 540 // { int chflagsat(int fd, const char *path, u_long flags, int atflag); }\n\tSYS_ACCEPT4                  = 541 // { int accept4(int s, struct sockaddr * __restrict name, __socklen_t * __restrict anamelen, int flags); }\n\tSYS_PIPE2                    = 542 // { int pipe2(int *fildes, int flags); }\n\tSYS_AIO_MLOCK                = 543 // { int aio_mlock(struct aiocb *aiocbp); }\n\tSYS_PROCCTL                  = 544 // { int procctl(idtype_t idtype, id_t id, int com, void *data); }\n\tSYS_PPOLL                    = 545 // { int ppoll(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *set); }\n\tSYS_FUTIMENS                 = 546 // { int futimens(int fd, struct timespec *times); }\n\tSYS_UTIMENSAT                = 547 // { int utimensat(int fd, char *path, struct timespec *times, int flag); }\n\tSYS_FDATASYNC                = 550 // { int fdatasync(int fd); }\n\tSYS_FSTAT                    = 551 // { int fstat(int fd, struct stat *sb); }\n\tSYS_FSTATAT                  = 552 // { int fstatat(int fd, char *path, struct stat *buf, int flag); }\n\tSYS_FHSTAT                   = 553 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); }\n\tSYS_GETDIRENTRIES            = 554 // { ssize_t getdirentries(int fd, char *buf, size_t count, off_t *basep); }\n\tSYS_STATFS                   = 555 // { int statfs(char *path, struct statfs *buf); }\n\tSYS_FSTATFS                  = 556 // { int fstatfs(int fd, struct statfs *buf); }\n\tSYS_GETFSSTAT                = 557 // { int getfsstat(struct statfs *buf, long bufsize, int mode); }\n\tSYS_FHSTATFS                 = 558 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); }\n\tSYS_MKNODAT                  = 559 // { int mknodat(int fd, char *path, mode_t mode, dev_t dev); }\n\tSYS_KEVENT                   = 560 // { int kevent(int fd, struct kevent *changelist, int nchanges, struct kevent *eventlist, int nevents, const struct timespec *timeout); }\n\tSYS_CPUSET_GETDOMAIN         = 561 // { int cpuset_getdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int *policy); }\n\tSYS_CPUSET_SETDOMAIN         = 562 // { int cpuset_setdomain(cpulevel_t level, cpuwhich_t which, id_t id, size_t domainsetsize, domainset_t *mask, int policy); }\n\tSYS_GETRANDOM                = 563 // { int getrandom(void *buf, size_t buflen, unsigned int flags); }\n\tSYS_GETFHAT                  = 564 // { int getfhat(int fd, char *path, struct fhandle *fhp, int flags); }\n\tSYS_FHLINK                   = 565 // { int fhlink(struct fhandle *fhp, const char *to); }\n\tSYS_FHLINKAT                 = 566 // { int fhlinkat(struct fhandle *fhp, int tofd, const char *to,); }\n\tSYS_FHREADLINK               = 567 // { int fhreadlink(struct fhandle *fhp, char *buf, size_t bufsize); }\n\tSYS___SYSCTLBYNAME           = 570 // { int __sysctlbyname(const char *name, size_t namelen, void *old, size_t *oldlenp, void *new, size_t newlen); }\n\tSYS_CLOSE_RANGE              = 575 // { int close_range(u_int lowfd, u_int highfd, int flags); }\n)\n"
  },
  {
    "path": "vendor/golang.org/x/sys/unix/zsysnum_linux_386.go",
    "content": "// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/386/include -m32 /tmp/386/include/asm/unistd.h\n// Code generated by the command above; see README.md. DO NOT EDIT.\n\n//go:build 386 && linux\n\npackage unix\n\nconst (\n\tSYS_RESTART_SYSCALL              = 0\n\tSYS_EXIT                         = 1\n\tSYS_FORK                         = 2\n\tSYS_READ                         = 3\n\tSYS_WRITE                        = 4\n\tSYS_OPEN                         = 5\n\tSYS_CLOSE                        = 6\n\tSYS_WAITPID                      = 7\n\tSYS_CREAT                        = 8\n\tSYS_LINK                         = 9\n\tSYS_UNLINK                       = 10\n\tSYS_EXECVE                       = 11\n\tSYS_CHDIR                        = 12\n\tSYS_TIME                         = 13\n\tSYS_MKNOD                        = 14\n\tSYS_CHMOD                        = 15\n\tSYS_LCHOWN                       = 16\n\tSYS_BREAK                        = 17\n\tSYS_OLDSTAT                      = 18\n\tSYS_LSEEK                        = 19\n\tSYS_GETPID                       = 20\n\tSYS_MOUNT                        = 21\n\tSYS_UMOUNT                       = 22\n\tSYS_SETUID                       = 23\n\tSYS_GETUID                       = 24\n\tSYS_STIME                        = 25\n\tSYS_PTRACE                       = 26\n\tSYS_ALARM                        = 27\n\tSYS_OLDFSTAT                     = 28\n\tSYS_PAUSE                        = 29\n\tSYS_UTIME                        = 30\n\tSYS_STTY                         = 31\n\tSYS_GTTY                         = 32\n\tSYS_ACCESS                       = 33\n\tSYS_NICE                         = 34\n\tSYS_FTIME                        = 35\n\tSYS_SYNC                         = 36\n\tSYS_KILL                         = 37\n\tSYS_RENAME                       = 38\n\tSYS_MKDIR                        = 39\n\tSYS_RMDIR                        = 40\n\tSYS_DUP                          = 41\n\tSYS_PIPE                         = 42\n\tSYS_TIMES                        = 43\n\tSYS_PROF                         = 44\n\tSYS_BRK                          = 45\n\tSYS_SETGID                       = 46\n\tSYS_GETGID                       = 47\n\tSYS_SIGNAL                       = 48\n\tSYS_GETEUID                      = 49\n\tSYS_GETEGID                      = 50\n\tSYS_ACCT                         = 51\n\tSYS_UMOUNT2                      = 52\n\tSYS_LOCK                         = 53\n\tSYS_IOCTL                        = 54\n\tSYS_FCNTL                        = 55\n\tSYS_MPX                          = 56\n\tSYS_SETPGID                      = 57\n\tSYS_ULIMIT                       = 58\n\tSYS_OLDOLDUNAME                  = 59\n\tSYS_UMASK                        = 60\n\tSYS_CHROOT                       = 61\n\tSYS_USTAT                        = 62\n\tSYS_DUP2                         = 63\n\tSYS_GETPPID                      = 64\n\tSYS_GETPGRP                      = 65\n\tSYS_SETSID                       = 66\n\tSYS_SIGACTION                    = 67\n\tSYS_SGETMASK                     = 68\n\tSYS_SSETMASK                     = 69\n\tSYS_SETREUID                     = 70\n\tSYS_SETREGID                     = 71\n\tSYS_SIGSUSPEND                   = 72\n\tSYS_SIGPENDING                   = 73\n\tSYS_SETHOSTNAME                  = 74\n\tSYS_SETRLIMIT                    = 75\n\tSYS_GETRLIMIT                    = 76\n\tSYS_GETRUSAGE                    = 77\n\tSYS_GETTIMEOFDAY                 = 78\n\tSYS_SETTIMEOFDAY                 = 79\n\tSYS_GETGROUPS                    = 80\n\tSYS_SETGROUPS                    = 81\n\tSYS_SELECT                       = 82\n\tSYS_SYMLINK                      = 83\n\tSYS_OLDLSTAT                     = 84\n\tSYS_READLINK                     = 85\n\tSYS_USELIB                       = 86\n\tSYS_SWAPON                       = 87\n\tSYS_REBOOT                       = 88\n\tSYS_READDIR                      = 89\n\tSYS_MMAP                         = 90\n\tSYS_MUNMAP                       = 91\n\tSYS_TRUNCATE                     = 92\n\tSYS_FTRUNCATE                    = 93\n\tSYS_FCHMOD                       = 94\n\tSYS_FCHOWN                       = 95\n\tSYS_GETPRIORITY                  = 96\n\tSYS_SETPRIORITY                  = 97\n\tSYS_PROFIL                       = 98\n\tSYS_STATFS                       = 99\n\tSYS_FSTATFS                      = 100\n\tSYS_IOPERM                       = 101\n\tSYS_SOCKETCALL                   = 102\n\tSYS_SYSLOG                       = 103\n\tSYS_SETITIMER                    = 104\n\tSYS_GETITIMER                    = 105\n\tSYS_STAT                         = 106\n\tSYS_LSTAT                        = 107\n\tSYS_FSTAT                        = 108\n\tSYS_OLDUNAME                     = 109\n\tSYS_IOPL                         = 110\n\tSYS_VHANGUP                      = 111\n\tSYS_IDLE                         = 112\n\tSYS_VM86OLD                      = 113\n\tSYS_WAIT4                        = 114\n\tSYS_SWAPOFF                      = 115\n\tSYS_SYSINFO                      = 116\n\tSYS_IPC                          = 117\n\tSYS_FSYNC                        = 118\n\tSYS_SIGRETURN                    = 119\n\tSYS_CLONE                        = 120\n\tSYS_SETDOMAINNAME                = 121\n\tSYS_UNAME                        = 122\n\tSYS_MODIFY_LDT                   = 123\n\tSYS_ADJTIMEX                     = 124\n\tSYS_MPROTECT                     = 125\n\tSYS_SIGPROCMASK                  = 126\n\tSYS_CREATE_MODULE                = 127\n\tSYS_INIT_MODULE                  = 128\n\tSYS_DELETE_MODULE                = 129\n\tSYS_GET_KERNEL_SYMS              = 130\n\tSYS_QUOTACTL                     = 131\n\tSYS_GETPGID                      = 132\n\tSYS_FCHDIR                       = 133\n\tSYS_BDFLUSH                      = 134\n\tSYS_SYSFS                        = 135\n\tSYS_PERSONALITY                  = 136\n\tSYS_AFS_SYSCALL                  = 137\n\tSYS_SETFSUID                     = 138\n\tSYS_SETFSGID                     = 139\n\tSYS__LLSEEK                      = 140\n\tSYS_GETDENTS                     = 141\n\tSYS__NEWSELECT                   = 142\n\tSYS_FLOCK                        = 143\n\tSYS_MSYNC                        = 144\n\tSYS_READV                        = 145\n\tSYS_WRITEV                       = 146\n\tSYS_GETSID                       = 147\n\tSYS_FDATASYNC                    = 148\n\tSYS__SYSCTL                      = 149\n\tSYS_MLOCK                        = 150\n\tSYS_MUNLOCK                      = 151\n\tSYS_MLOCKALL                     = 152\n\tSYS_MUNLOCKALL                   = 153\n\tSYS_SCHED_SETPARAM               = 154\n\tSYS_SCHED_GETPARAM               = 155\n\tSYS_SCHED_SETSCHEDULER           = 156\n\tSYS_SCHED_GETSCHEDULER           = 157\n\tSYS_SCHED_YIELD                  = 158\n\tSYS_SCHED_GET_PRIORITY_MAX       = 159\n\tSYS_SCHED_GET_PRIORITY_MIN       = 160\n\tSYS_SCHED_RR_GET_INTERVAL        = 161\n\tSYS_NANOSLEEP                    = 162\n\tSYS_MREMAP                       = 163\n\tSYS_SETRESUID                    = 164\n\tSYS_GETRESUID                    = 165\n\tSYS_VM86                         = 166\n\tSYS_QUERY_MODULE                 = 167\n\tSYS_POLL                         = 168\n\tSYS_NFSSERVCTL                   = 169\n\tSYS_SETRESGID                    = 170\n\tSYS_GETRESGID                    = 171\n\tSYS_PRCTL                        = 172\n\tSYS_RT_SIGRETURN                 = 173\n\tSYS_RT_SIGACTION                 = 174\n\tSYS_RT_SIGPROCMASK               = 175\n\tSYS_RT_SIGPENDING                = 176\n\tSYS_RT_SIGTIMEDWAIT              = 177\n\tSYS_RT_SIGQUEUEINFO              = 178\n\tSYS_RT_SIGSUSPEND                = 179\n\tSYS_PREAD64                      = 180\n\tSYS_PWRITE64                     = 181\n\tSYS_CHOWN                        = 182\n\tSYS_GETCWD                       = 183\n\tSYS_CAPGET                       = 184\n\tSYS_CAPSET                       = 185\n\tSYS_SIGALTSTACK                  = 186\n\tSYS_SENDFILE                     = 187\n\tSYS_GETPMSG                      = 188\n\tSYS_PUTPMSG                      = 189\n\tSYS_VFORK                        = 190\n\tSYS_UGETRLIMIT                   = 191\n\tSYS_MMAP2                        = 192\n\tSYS_TRUNCATE64                   = 193\n\tSYS_FTRUNCATE64                  = 194\n\tSYS_STAT64                       = 195\n\tSYS_LSTAT64                      = 196\n\tSYS_FSTAT64                      = 197\n\tSYS_LCHOWN32                     = 198\n\tSYS_GETUID32                     = 199\n\tSYS_GETGID32                     = 200\n\tSYS_GETEUID32                    = 201\n\tSYS_GETEGID32                    = 202\n\tSYS_SETREUID32                   = 203\n\tSYS_SETREGID32                   = 204\n\tSYS_GETGROUPS32                  = 205\n\tSYS_SETGROUPS32                  = 206\n\tSYS_FCHOWN32                     = 207\n\tSYS_SETRESUID32                  = 208\n\tSYS_GETRESUID32                  = 209\n\tSYS_SETRESGID32                  = 210\n\tSYS_GETRESGID32                  = 211\n\tSYS_CHOWN32                      = 212\n\tSYS_SETUID32                     = 213\n\tSYS_SETGID32                     = 214\n\tSYS_SETFSUID32                   = 215\n\tSYS_SETFSGID32                   = 216\n\tSYS_PIVOT_ROOT                   = 217\n\tSYS_MINCORE                      = 218\n\tSYS_MADVISE                      = 219\n\tSYS_GETDENTS64                   = 220\n\tSYS_FCNTL64                      = 221\n\tSYS_GETTID                       = 224\n\tSYS_READAHEAD                    = 225\n\tSYS_SETXATTR                     = 226\n\tSYS_LSETXATTR                    = 227\n\tSYS_FSETXATTR                    = 228\n\tSYS_GETXATTR                     = 229\n\tSYS_LGETXATTR                    = 230\n\tSYS_FGETXATTR                    = 231\n\tSYS_LISTXATTR                    = 232\n\tSYS_LLISTXATTR                   = 233\n\tSYS_FLISTXATTR                   = 234\n\tSYS_REMOVEXATTR                  = 235\n\tSYS_LREMOVEXATTR                 = 236\n\tSYS_FREMOVEXATTR                 = 237\n\tSYS_TKILL                        = 238\n\tSYS_SENDFILE64                   = 239\n\tSYS_FUTEX                        = 240\n\tSYS_SCHED_SETAFFINITY            = 241\n\tSYS_SCHED_GETAFFINITY            = 242\n\tSYS_SET_THREAD_AREA              = 243\n\tSYS_GET_THREAD_AREA              = 244\n\tSYS_IO_SETUP                     = 245\n\tSYS_IO_DESTROY                   = 246\n\tSYS_IO_GETEVENTS                 = 247\n\tSYS_IO_SUBMIT                    = 248\n\tSYS_IO_CANCEL                    = 249\n\tSYS_FADVISE64                    = 250\n\tSYS_EXIT_GROUP                   = 252\n\tSYS_LOOKUP_DCOOKIE               = 253\n\tSYS_EPOLL_CREATE                 = 254\n\tSYS_EPOLL_CTL                    = 255\n\tSYS_EPOLL_WAIT                   = 256\n\tSYS_REMAP_FILE_PAGES             = 257\n\tSYS_SET_TID_ADDRESS              = 258\n\tSYS_TIMER_CREATE                 = 259\n\tSYS_TIMER_SETTIME                = 260\n\tSYS_TIMER_GETTIME                = 261\n\tSYS_TIMER_GETOVERRUN             = 262\n\tSYS_TIMER_DELETE                 = 263\n\tSYS_CLOCK_SETTIME                = 264\n\tSYS_CLOCK_GETTIME                = 265\n\tSYS_CLOCK_GETRES                 = 266\n\tSYS_CLOCK_NANOSLEEP              = 267\n\tSYS_STATFS64                     = 268\n\tSYS_FSTATFS64                    = 269\n\tSYS_TGKILL                       = 270\n\tSYS_UTIMES                       = 271\n\tSYS_FADVISE64_64                 = 272\n\tSYS_VSERVER                      = 273\n\tSYS_MBIND                        = 274\n\tSYS_GET_MEMPOLICY                = 275\n\tSYS_SET_MEMPOLICY                = 276\n\tSYS_MQ_OPEN                      = 277\n\tSYS_MQ_UNLINK                    = 278\n\tSYS_MQ_TIMEDSEND                 = 279\n\tSYS_MQ_TIMEDRECEIVE              = 280\n\tSYS_MQ_NOTIFY                    = 281\n\tSYS_MQ_GETSETATTR                = 282\n\tSYS_KEXEC_LOAD                   = 283\n\tSYS_WAITID                       = 284\n\tSYS_ADD_KEY                      = 286\n\tSYS_REQUEST_KEY                  = 287\n\tSYS_KEYCTL                       = 288\n\tSYS_IOPRIO_SET                   = 289\n\tSYS_IOPRIO_GET                   = 290\n\tSYS_INOTIFY_INIT                 = 291\n\tSYS_INOTIFY_ADD_WATCH            = 292\n\tSYS_INOTIFY_RM_WATCH             = 293\n\tSYS_MIGRATE_PAGES                = 294\n\tSYS_OPENAT                       = 295\n\tSYS_MKDIRAT                      = 296\n\tSYS_MKNODAT                      = 297\n\tSYS_FCHOWNAT                     = 298\n\tSYS_FUTIMESAT                    = 299\n\tSYS_FSTATAT64                    = 300\n\tSYS_UNLINKAT                     = 301\n\tSYS_RENAMEAT                     = 302\n\tSYS_LINKAT                       = 303\n\tSYS_SYMLINKAT                    = 304\n\tSYS_READLINKAT                   = 305\n\tSYS_FCHMODAT                     = 306\n\tSYS_FACCESSAT                    = 307\n\tSYS_PSELECT6                     = 308\n\tSYS_PPOLL                        = 309\n\tSYS_UNSHARE                      = 310\n\tSYS_SET_ROBUST_LIST              = 311\n\tSYS_GET_ROBUST_LIST              = 312\n\tSYS_SPLICE                       = 313\n\tSYS_SYNC_FILE_RANGE              = 314\n\tSYS_TEE                          = 315\n\tSYS_VMSPLICE                     = 316\n\tSYS_MOVE_PAGES                   = 317\n\tSYS_GETCPU                       = 318\n\tSYS_EPOLL_PWAIT                  = 319\n\tSYS_UTIMENSAT                    = 320\n\tSYS_SIGNALFD                     = 321\n\tSYS_TIMERFD_CREATE               = 322\n\tSYS_EVENTFD                      = 323\n\tSYS_FALLOCATE                    = 324\n\tSYS_TIMERFD_SETTIME              = 325\n\tSYS_TIMERFD_GETTIME              = 326\n\tSYS_SIGNALFD4                    = 327\n\tSYS_EVENTFD2                     = 328\n\tSYS_EPOLL_CREATE1                = 329\n\tSYS_DUP3                         = 330\n\tSYS_PIPE2                        = 331\n\tSYS_INOTIFY_INIT1                = 332\n\tSYS_PREADV                       = 333\n\tSYS_PWRITEV                      = 334\n\tSYS_RT_TGSIGQUEUEINFO            = 335\n\tSYS_PERF_EVENT_OPEN              = 336\n\tSYS_RECVMMSG                     = 337\n\tSYS_FANOTIFY_INIT                = 338\n\tSYS_FANOTIFY_MARK                = 339\n\tSYS_PRLIMIT64                    = 340\n\tSYS_NAME_TO_HANDLE_AT            = 341\n\tSYS_OPEN_BY_HANDLE_AT            = 342\n\tSYS_CLOCK_ADJTIME                = 343\n\tSYS_SYNCFS                       = 344\n\tSYS_SENDMMSG                     = 345\n\tSYS_SETNS                        = 346\n\tSYS_PROCESS_VM_READV             = 347\n\tSYS_PROCESS_VM_WRITEV            = 348\n\tSYS_KCMP                         = 349\n\tSYS_FINIT_MODULE                 = 350\n\tSYS_SCHED_SETATTR                = 351\n\tSYS_SCHED_GETATTR                = 352\n\tSYS_RENAMEAT2                    = 353\n\tSYS_SECCOMP                      = 354\n\tSYS_GETRANDOM                    = 355\n\tSYS_MEMFD_CREATE                 = 356\n\tSYS_BPF                          = 357\n\tSYS_EXECVEAT                     = 358\n\tSYS_SOCKET                       = 359\n\tSYS_SOCKETPAIR                   = 360\n\tSYS_BIND                         = 361\n\tSYS_CONNECT                      = 362\n\tSYS_LISTEN                       = 363\n\tSYS_ACCEPT4                      = 364\n\tSYS_GETSOCKOPT                   = 365\n\tSYS_SETSOCKOPT                   = 366\n\tSYS_GETSOCKNAME                  = 367\n\tSYS_GETPEERNAME                  = 368\n\tSYS_SENDTO                       = 369\n\tSYS_SENDMSG                      = 370\n\tSYS_RECVFROM                     = 371\n\tSYS_RECVMSG                      = 372\n\tSYS_SHUTDOWN                     = 373\n\tSYS_USERFAULTFD                  = 374\n\tSYS_MEMBARRIER                   = 375\n\tSYS_MLOCK2                       = 376\n\tSYS_COPY_FILE_RANGE              = 377\n\tSYS_PREADV2                      = 378\n\tSYS_PWRITEV2                     = 379\n\tSYS_PKEY_MPROTECT                = 380\n\tSYS_PKEY_ALLOC                   = 381\n\tSYS_PKEY_FREE                    = 382\n\tSYS_STATX                        = 383\n\tSYS_ARCH_PRCTL                   = 384\n\tSYS_IO_PGETEVENTS                = 385\n\tSYS_RSEQ                         = 386\n\tSYS_SEMGET                       = 393\n\tSYS_SEMCTL                       = 394\n\tSYS_SHMGET                       = 395\n\tSYS_SHMCTL                       = 396\n\tSYS_SHMAT                        = 397\n\tSYS_SHMDT                        = 398\n\tSYS_MSGGET                       = 399\n\tSYS_MSGSND                       = 400\n\tSYS_MSGRCV                       = 401\n\tSYS_MSGCTL                       = 402\n\tSYS_CLOCK_GETTIME64              = 403\n\tSYS_CLOCK_SETTIME64              = 404\n\tSYS_CLOCK_ADJTIME64              = 405\n\tSYS_CLOCK_GETRES_TIME64          = 406\n\tSYS_CLOCK_NANOSLEEP_TIME64       = 407\n\tSYS_TIMER_GETTIME64              = 408\n\tSYS_TIMER_SETTIME64              = 409\n\tSYS_TIMERFD_GETTIME64            = 410\n\tSYS_TIMERFD_SETTIME64            = 411\n\tSYS_UTIMENSAT_TIME64             = 412\n\tSYS_PSELECT6_TIME64              = 413\n\tSYS_PPOLL_TIME64                 = 414\n\tSYS_IO_PGETEVENTS_TIME64         = 416\n\tSYS_RECVMMSG_TIME64              = 417\n\tSYS_MQ_TIMEDSEND_TIME64          = 418\n\tSYS_MQ_TIMEDRECEIVE_TIME64       = 419\n\tSYS_SEMTIMEDOP_TIME64            = 420\n\tSYS_RT_SIGTIMEDWAIT_TIME64       = 421\n\tSYS_FUTEX_TIME64                 = 422\n\tSYS_SCHED_RR_GET_INTERVAL_TIME64 = 423\n\tSYS_PIDFD_SEND_SIGNAL            = 424\n\tSYS_IO_URING_SETUP               = 425\n\tSYS_IO_URING_ENTER               = 426\n\tSYS_IO_URING_REGISTER            = 427\n\tSYS_OPEN_TREE                    = 428\n\tSYS_MOVE_MOUNT                   = 429\n\tSYS_FSOPEN                       = 430\n\tSYS_FSCONFIG                     = 431\n\tSYS_FSMOUNT                      = 432\n\tSYS_FSPICK                       = 433\n\tSYS_PIDFD_OPEN                   = 434\n\tSYS_CLONE3                       = 435\n\tSYS_CLOSE_RANGE                  = 436\n\tSYS_OPENAT2                      = 437\n\tSYS_PIDFD_GETFD                  = 438\n\tSYS_FACCESSAT2                   = 439\n\tSYS_PROCESS_MADVISE              = 440\n\tSYS_EPOLL_PWAIT2                 = 441\n\tSYS_MOUNT_SETATTR                = 442\n\tSYS_QUOTACTL_FD                  = 443\n\tSYS_LANDLOCK_CREATE_RULESET      = 444\n\tSYS_LANDLOCK_ADD_RULE            = 445\n\tSYS_LANDLOCK_RESTRICT_SELF       = 446\n\tSYS_MEMFD_SECRET                 = 447\n\tSYS_PROCESS_MRELEASE             = 448\n\tSYS_FUTEX_WAITV                  = 449\n\tSYS_SET_MEMPOLICY_HOME_NODE      = 450\n\tSYS_CACHESTAT                    = 451\n\tSYS_FCHMODAT2                    = 452\n\tSYS_MAP_SHADOW_STACK             = 453\n\tSYS_FUTEX_WAKE                   = 454\n\tSYS_FUTEX_WAIT                   = 455\n\tSYS_FUTEX_REQUEUE                = 456\n\tSYS_STATMOUNT                    = 457\n\tSYS_LISTMOUNT                    = 458\n\tSYS_LSM_GET_SELF_ATTR            = 459\n\tSYS_LSM_SET_SELF_ATTR            = 460\n\tSYS_LSM_LIST_MODULES             = 461\n\tSYS_MSEAL                        = 462\n)\n"
  }
]